• 第四周LINUX 学习笔记


                                                                                                                 内核编译丶sed丶awk

    Linux:单内核
        模块化:动态
          /lib/modules
          lsmod,modinfo,modprobe,insmod,,modprobe -r ,rmmod
          dep文件:模块的依赖关系
          sysbols:符号映射
        depmod:用来生成模块依赖关系
             kernel文件夹下
                arch:架构
                crypto:加密模块
                drivers:驱动
                fs:文件系统
                   有两部分组成
                kernel:内核调试模块
                lib:内核本身通用库
                mm:
                net:网络协议的实现
                   netfilter:软件防火墙
                   openvswith:虚拟机
                   sunrpc:
                sound:声音

            CentOS6:
               与官方kernel可能不一样
        
            src.rpm
               源码rpm包+specs文件
               步骤:
                 1.创建mockbuild用户
                 2.切换至mockbuild用户,而后安装src.rpm包
                 3.rpmbuild -bb|-ba ~/rpmbuild/SPECS/package_name.spec
                 4.制作完成的rpm包:位于/root/rpmbuild/RPMS/x86_64中

            /usr/src,/usr/local/src

       编译内核:
           可能需要的模块不多,红帽或者centos为了使版本更通用,
           y:编译进核心
           m:编译成模块
           make config
           make allyesconfig
           make allnoconfig

           make menuconfig

           建议将/boot/下的config文件拷贝到当前目录下,叫.config
           
           make kconfig(KDE桌面环境,并且安装了qt开发环境)

           make gconfig(Gnome桌面环境,并且安装gtk开发环境)

        第二步:编译
          make -j #
        第三步:安装模块
          make modules_install
        第四步:安装内核
          make install
        第五步:检查。测试
          grub.conf中是否已经有新内核配置项
          重启系统并启用新内核

          
    安装一个新桌面:
       screen命令:
          screen:打开一个新的screen
          隐藏:ctrl+a,d
          重新打开隐藏的screen:
             显示个screen ID: screen -ls
             重新打开 screen -r Screen_ID


        查看硬件信息:
        lspci
        hal-device
        lspcmcia
        lscpu
        lsdiff
        lsusb
        lsdlk
        dmidecode:查看BIOS,


    RHEL src.rpm
      补充:http://ftp.redhat.com/pub/redhat/linux/enterprise


    编译安装新内核:
    1.获取内核编码,解压至/usr/src
      tar xf linux-3.13.5.tar.xz -C /usr/src
      ln -sv /usr/src/linux-3.13.5 /usr/src/linux-
    2.配置内核特性
      cp /boot/config-* /usr/src/linux/.config
      make menuconfig
    3.编译内核
       make [-j #]
          最多为cpu物理核心总数的两倍
    4.安装内核模块
       make modules_install
    5.安装内核
       make install
    6.验证并测试
      cat /boot/grub/grub.conf
      重启系统并应用新系统

     二次编译如何做清理操作:
         make clean:只清理编译生成的文件,但不删除配置文件.config
         make mrproper:删除编译生成的文件和.config
         make distclean:重置源代码树
    将编译的文件放置于源码不同的路径:
        mkdir /path/to/somewhere
        cd  /path/to/somewhere
        ./configure --ksource=/usr/src/linux

    如何实现内核的部分编译:
       1.只编译某子目录下的相关代码:
          cd /usr/src/linux
          make 子目录文件

          make SUBDIR=arch/
          make drivers/net/
       2.只编译部分模块
          make M=path/to/dir/

          make M=drivers/net/
       3.只编译某一个模块
          make path/to/dir/module_name.ko

          make drivers/net/e1000/e1000.ko
       4.将编译后的结果放置于别的目录中
          make O=/path/to/somewhere

    如何实现交叉编译
        make ARCH=架构

        以arm为例:

        make ARCH=arm 默认编译文件

     树莓派


     内核参数的查看与配置:
       /proc/sys/
          kernel net vm fs
       配置参数:
          echo "string" > /proc/sys/path/to/some_parameter
          echo 1 > /proc/sys/net.ipv4/icmp_echo_ignore_all
         sysctl -w
         上面也可写成
         sysctl -w net.ipv4.icmp_echo_ignore_all=1
       查看参数:
         sysctl -a
        配置文件:
         /etc/sysctl.conf

         net.ipv4.ip_forward ip转发
         kernel.hostname 主机名
         net.ipv4.icmp_echo_ignore_all ping功能
         vm.drop_caches 清除缓存
         sysctl -p 重读配置文件

    硬件设备:设备文件
        2.4-:2W+

        udev:用户空间程序

        kenrel硬件探测过程在根文件系统挂载前就已经结束,启动udev daemon程序,要求内核重新探测硬件信息,并输出/sys目录,
        由此udevadmin工具就可以根据/sys目录中硬件信息给每个硬件创建设备文件了

        udev rules:udev规则文件,用于定义udev如何创建设备文件的
          /etc/udev/rules.d/

        kernel+initramfs(根文件系统所在设备的设备驱动模块)-->devtmps(用于在内核初始化时为基本设备创建设备文件的临时文件系统)

        如何手动创建设备文件
        mknod
           mknod [option] ...NAME YTPE [MAJOR MINOR]
           MAJOR:主设备号,表示设备类型
           MINOR:同一设备的不同文件

           选项:
             -m MODE:指定权限

           例子
             mknod -m 660 /dev/testdev b 100 0

    sed初级使用
       stream editor
    一次只读一行,只处理一行,不对源文件做处理,至输出到屏幕上
    模式空间
    是一个行编辑器

    格式
       sed[options] "script" FILE....

    选项:
       -n:静默模式,不输出模式空间内的内容;默认打印空间模式的内容
       -r:扩展的正则表达式
       -f 文件:指定sed脚本文件
       -e 'script' -e 'script' :指定多个编辑指令
       -i : 直接编辑原文件
    编辑命令:
        d:删除
        p: 打印
        i  :在被指定到的行前面插入文本
        a  :在被指定的行的下面插入文本
        :换行
        r 文件:在指定位置把另外一个文件的内容插入
        w 文件:将符合条件的所有行保存至指定文件中
        =:显示符号条件的行的行号
        s///:查找条件可以使用模式,但是要替换的内容不行

    地址定界:自定义的起始行到结束行
      startline,endline
       1,3
       /pat1/,/pat2/
       /pattern/

     用法:sed [options] 'addr1[,addr2]编辑命令' FILE...
           sed [options] "addr1[,addr2]编辑命令" FILE...   变量替换使用双引号
          
     正则表达式:
         基本的
            字符:
               .
               []
               [^]
            次数
               *
               ?
               {m,n}
             锚定:
               ^
               $
               <,
               >,
             分组:
              ()
             引用:
              1,2,……
         扩展:
            字符:
               .
               []
               [^]
            次数
               *
               ?
               {m,n}
               +
             锚定:
               ^
               $
               <,
               >,
             或:
               a|b
             分组:
              ()
             引用:
              1,2,……
        sed '地址定界s@查找条件@替换文件@'
           修饰符:
              g:global,全局替换
              i:ignore-case,不区分字符大小写

    awk命令:
       awk:报告生成工具
           把文件中读取带的每一行的每个字段分别进行格式化,而后进行显示:

           支持使用变量、条件判断、循环、数组

        awk --> new awk --> nawk

        GNU awk --> gawk


      选项:
        -F:切割符
        $0:整行
        $1,$2.....:位置参数


      用法格式:
         awk [options] 'script' FILE...
         awk [options] '/pattern/{action}' FILE...

         action: print $1,$2

         模式:
           地址定界:/pat1/,/pat2/ 一个范围
                    /pattern/ 被匹配到的行
                    experssion 表达式
                       >,>=,<,<=,==,!=,~(模式匹配)
            BEGIN:执行前操作
            END:执行后的收尾  操作

      awk的常用四种分隔符:
          输入:
              行分隔符
              字段分隔符
          输出:
              行分隔符
              字段分隔符
     
      awk的内置变量
        NF:最后一个字段
        FS: 指定输入分隔符 在BEGIN中定义,指定时要使用""
        默认为空白
        OFS:输出时指定的分隔符,在BEGIN中定义,指定时要使用"",默认为空白

                                                                                   安装丶bash丢失丶dhcp丶pxelinux

    anaconda:fedora,Linux的安装程序


    anaconda:将安装分成两个阶段
        安装前配置阶段
            键盘类型
            安装过程中的语言
            支持的语言
            时区
            选择要使用的磁盘设备
            分区格式化
            选择要安装的程序包
            管理员密码
            是否使用iptables
            是否启用selinux
        安装阶段
            在目标磁盘上根文件系统
            将选定的程序包安装至目标磁盘

    如何启动安装过程
      MBR:bootloader,本身可启动的安装光盘
      网络启动安装过程
      可移动设备,便携式设备

    简装光盘:只有isolinux,能够启动安装过程的

    anaconda的配置文件称为kickstat

    安装前配置阶段:
         配置的选项:
              必选项:
              可选项:

    kickstart文件的组成部分:
        命令段:用于配置系统
            install
            firewall
            part
            lvm
        软件包:指定要安装的程序包及程序包组
        %packages 标识
          @Base:使用@指定包组
          lftp:直接写程序包名
          tree:
          每行一个  
        注意:在程序包前加-,不安装相关包
         %end :软件包结束
        脚本段:
           %pre:安装过程开始前的预备脚本
                所能执行的操作较小,它是一个首先得环境,因为其是仅有简装版的shell环境
           %post:所有的软件完成之后执行的脚本
                此时,具有完整意义上的shell环境,但并非所有命令都安装,先确保所有的程序包已经安装

    以光盘为例:
         MBR-->bootloader,isolinux/
         安装树:

         noparport:不探测硬件  


    启动安装界面时,boot提示符后,可以向安装内核传递许多的配置参数,用于指定安装过程的特性
    boot:
       test:文本安装界面
       graphical:图形安装界面
       askmethod:提示用户指定安装方法,让用户选择使用的安装树
       asknetword:提示用户在安装过程中使用网络功能,并提示用户配置网络地址
       dd:提示用户指定一个驱动程序所在的设备
       ks=:指定一个安装过程使用的kickstart文件
          ks={http|https}://<sevrer>/<path>
          ks=cdrom:/<path>
          ks=nfs:<server>:/<path>
        repo=:指定安装树位置
            repo=ftp://<path>
            repo={http|https}://<path>
            repo=nfs:<path>
        ip:
        netmask:
        gateway:
        dns:
        noipv6:


        http://172.16.0.1/centos6.X86_64.cfg

        成长是用来发现自己的过去是多么的操蛋


        CentOS:
         kickstart文件:命令段、软件包段、脚本段

         selinux限制进程的访问,
         permissive 记录到日志

        创建光盘映像

         mkisofs:-R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos 6.5 X86_64 boot(可改)" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos6.5.boot.iso(可改) linuxiso/
       
         光盘中的背景图片
         640*480

         dhcp server:告诉客户端到某一位置找一tftp server,向此tftp server要一个文件


         pxe:安装方式

         创建kickstart文件的方式:
            1,复制模板/root/anaconda-ks.cfg。而后使用vim编辑配置
            2.使用system-config-kiskstart来生成,建议使用/root/anaconda-ks.cfg 模板生成

     ksvalidator 检查kiskstart文件的配置是否存在问题

    系统故障排除之:bash程序文件损坏
    1.启动紧急救援模式
    2.获取到bash的rpm包:
       mkdir /media
       mount -r /dev/dvd /media
       rpm -ivh bash-*.rpm --replacepkgs --root=/mnt/sysimage/
     紧急救援模式:启动了一个工作于光盘上的linux

    arp

    dhcp和pxe

    DHCP:动态地址配置协议
      前身bootp:分配出去以后,将绑定
      leases,地址租约,地址池



      Dynamic Host Configuration Protocol

      C/S 模式
       Server:DHCP Server(运行dhcp服务)
         UDP服务:67
       Client:DHCP Client(运行dhcp程序)
         UDP服务:68
       udp:适合发送较小的数据报文,且对时效性要求较高

      A:DHCP DISCOVER
      S:DHCP OFFER(ip/netmask)
      A:DHCP REQUEST(确认使用)
      S:DHCP ACK

      50%:DHCP REQUEST
          75%:DHCP REQUEST
             87.5%:DHCP REQUEST

      DHCP DISCOVER

      DHCP :
         IP,NETMASK,GATEWAY,DNS,NTP SERVER,WINS SERVER,File

      DHCP Client:
           169.254.X.X
            本地地址
      有两个进程
         一个dhcpd
         一个dhcrelay,中继


      dhcpd.conf大致可以分为四个区域:
        定义dhcpd自身的工作属性:
           log-facilify:日志facilify
        全局地址跟拍属性:options打头
          option router
        子网配置:
            通常每个作用域通过一个subnet定义
             subnet NETWORK_ADDR netmask NETMASK {


             }
        主机配置:
          通常为某特定MAC地址固定的分配一个地址
             host ‘HOST ID’ {
               hardware ethernet 08:00:07:26:c0:a5; MAC地址
      fixed-address IP; ip地址
             }
    日志服务的配置文件:/etc/rsyslog.conf

    文件详解:
    ption domain-name "example.org"; 搜索域
    option domain-name-servers ns1.example.org, ns2.example.org; 全局默认网关
    default-lease-time 600;默认租约期限
    max-lease-time 7200;最长租约期限
    #ddns-update-style none;动态dns
    og-facility local7;日志反动地址
    subnet 10.254.239.0 netmask 255.255.255.224 {
      range 10.254.239.10 10.254.239.20; 地址池
      option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; 提供的网关
    }

    subnet 10.254.239.32 netmask 255.255.255.224 {
      range dynamic-bootp 10.254.239.40 10.254.239.60;向bootp提供服务
      option broadcast-address 10.254.239.31;广播地址
      option routers rtr-239-32-1.example.org;
    }
    subnet 10.5.5.0 netmask 255.255.255.224 {
      range 10.5.5.26 10.5.5.30;
      option domain-name-servers ns1.internal.example.org;
      option domain-name "internal.example.org";
      option routers 10.5.5.1;默认网关
      option broadcast-address 10.5.5.31;广播地址
      default-lease-time 600;
      max-lease-time 7200;
    }

    host fantasia {
      hardware ethernet 08:00:07:26:c0:a5; MAC地址
      fixed-address fantasia.fugue.com; ip地址
    }
    class "foo" {
      match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
    }定义函数,用来定义特定系统分配特定的地址

    /var/lib/dhcpd有配置文件

    dhcilent -d etho:/客户端重新获取dhcp地址

    总结:dhcp dhcpd /etc/dhcp/dhcpd.conf /etc/rc.d/init/dhcpd /var/lib/dhcp,udp:67,68



    PXE:Preboot Execution Environment,启动前的执行环境
        
        Client:网卡要支持网络引导

    tftp Trivial FTP:简单文件传输协议,高效传输小文件(udp:69)
       瞬时(非独立)守护进程:他们无需定义在运行级别下,只需要一次性的定义xinetd的运行级别
       独立(standalone)守护进程:能自我管理,无需xinted提供箭头服务的进程

    超级守护进程:xinetd
       为那些极少接收用户请求的服务,专门提供监听功能
         tftp:udp:69
         
       瞬时守护进程基于xinetd的配置文件:/etc/xinted.d/Service_name
       独立守护进程:能自我管理,无须xinetd提供监听服务的进程
     
       chkconfig xinetd on
       service xinetd start

       chkconfig Service_name on
       service xinetd restart

      Linux上的tftp:
        服务器:tftp-server
        客户端:tftp
    在dhcp添加
        next-server ip地址
        filename="pxelinux.0"


    配置步骤:
    前提:需要安装apache服务器,并启动httpd服务!
     mkdir /media/cdrom
     mount -r /dev/dvd /media/cdrom
     vi /etc/yum.repo.d/
    1.配置DHCP服务器
    yum -y install dhcp
    vim /etc/dhcp/dhcpd.conf
    自定义subnet{
        ...
        next-server
        filename ""
    }
     service dhcpd restart
     tail -f /var/log/boot.log
    2配置tftp-server
    yum -y install xinetd tftp-server tftp
    chkconfig xinetd on
    chkconfig tftp on
    service xinetd start
    3准备安装树
    mkdir /var/www/html/centos6
    mount --bind /media/cdrom /var/www/html/centos6
    service httpd start
    4.准备tftpboot下的文件
    yum -y install syslinux
    cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
    cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
    cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
    mkdir /var/lib/tftpboot/pxelinux.cfg
    cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

    5.提供kickstart文件
    注意:url及repo后的路径要修改为可用安装树的路径;
    url --url=http://192.168.48.128/centos6
    repo --name="CentOS-6.5"  --baseurl=http://192.168.48.128/centos6
    编辑好kickstart文件后保存至/var/www/html目录下;假设为ks.cfg

    6)配置引导程序能自动加载kickstart文件。
    编辑/var/lib/tftpboot/pxelinux.cfg/default
    在label为linux项的append一行后附加:
        ks=http://192.168.48.128/ks.cfg

            



    SELinxu:Secure Enhenced Linux

    获取selinux的当前状态:
    getenforce
    临时启用或禁用
    setenfoce 0|1

    永久启用:/etc/sysconfig/selinux
          /etc/selinux/config

         SELINUX={enforcing|permissove|disabled}


     ls -Z:查看
     mac:强制访问控制

                                                                                             Openssl丶ssh丶脚本信息捕获

    passwd:
       加密方式:
           对称加密、公钥加密、单向加密
        加密、解密
        明文:plaintext,cleartext -->密文 -->

        对称加密:
           加密算法+口令
              明文 --> 密文

              字典攻击
              加密方,解密方使用同一个口令
              DES(56bits):数据加密标准
              3DES
              AES(128bits):高级加密标准
              Blowfish
              Twofish
              IDEA
              RC6
              CAST5
              Serpent
              特性:
              1.加密/解密使用统一口令
              2.将原文分割成固定大小的数据块,对这些块进行加密
                ECB,CBC

              1.口令传输
              2.密钥太多

            密钥交换:
            用户认证:
            数据完整性:

       密钥交换(IKE:Inernet Key Exchange):DH算法

       非对称加密:公开公钥,私钥私有,只有一组密钥对(公钥和私钥组成)才能对消息进行加密和解密,公钥和私钥都能进行加密或者解密。公钥一般来加密数据,私钥一般来签名数据。
          加密算法:RSA,EIGmal,DSA
          1.密钥交换
          2.用户身份认证
        单向加密:
         抽取数据特征码:
           MD5,SHA1,SHA512,CRC-32(循环冗余校验码)
          1.完整性,

          消息认证算法:MAC(Message Authenntication Codes)
            CBC-MAC
            HMAC

            雪崩效应
            定长输出:
    使用私钥钥来加密特征码(保留数据的完整性)和数据(保证数据的来源)再将两者进行对称加密(速度快),接着再用对方的公钥来加密密码(保证安全性)

     PKI:Pubile key Infrastucture 公钥基础设施

     openssl gpg

     openssl:套件,开源程序
         libcrypto:通用功能的加密库
         libssl:用于实现TLX/SSL的功能
         openssl:多功能命令工具
             生成密钥,创建数字证书,手动加密解密数据
     加密解密技术常用的功能及算法:
       对称加密:
         工具:gpg openssl enc
         加密:openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher
         解密:openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher  -out 文件

       单向加密:
         特性:One-Way
               Collision-free:
         算法
          md5:128bits
          sha1:160bits
          sha512:512bits
         工具:sha1sum,md5sum,openssl dgst
          openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
       MAC:信息摘要码,单向加密的延伸应用
           应用:用于实现在网络通信中保证所传输的数据完整性
           机制:
               CBC-MAC
               HMAC:使用md5和sha1算法
       用户认证:每一个用户的密码即使是相同的,他们的加密方式也不同,因为是不同用户。可以指定-salt string 即可生成相同的加密
           工具:passwd openssl passwd
     
        公钥加密:公钥加密,私钥解密
           密钥对:
              公钥:pkey
              私钥:skey

           算法:RSA,EIGamal

           工具:gpg openssl rsautl

        数字签名:私钥加密,公钥解密
           算法:RSA,EIGamal,DSA

           DSA:Digital Signature Algorithm
           DSS: Digital Signature standard
        密钥交换:IKE
           算法:DH(Diffie-Hellman),公钥加密

        数字证书:
        第三方机构使用一种安全的方式把公钥分发出去
           证书格式:x509,pkcs家族
             x509格式:
               公钥和有效期限:
               持有者的个人合法身份信息;(主机名),所以输入主机名所对应的IP地址,有可能会访问不到。
               证书的使用方式
               CA的信息
               CA的数字签名

            谁给CA发证:自签署证书
       用户
        1.生成一对密钥
        2.把所需信息和公钥按固定格式制作成证书申请
       CA机构
        1.自签证书
        2.签署证书
        3.传给用户
        4.维护吊销列表
        OpenCA
    用openssl实现是有CA
    配置文件/etc/pki/tls/openssl.cnf
    命令:
    谁给CA发证:自签署证书

        用openssl实现私有CA:
                配置文件:/etc/pki/tls/openssl.cnf

            生成密钥对儿:
                # (umask 077; openssl genrsa -out private/cakey.pem 2048)
                
                如果想查看公钥:
                    # openssl rsa -in private/cakey.pem -pubout -text -noout

            生成自签证书:
                # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

            
        用openssl实现证书申请:

            在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:
                # mkdir /etc/httpd/ssl
                # cd /etc/httpd/ssl
                # (umask 077; openssl genrsa -out httpd.key 1024)

            生成证书签署请求:
                # openssl req -new -key httpd.key -out httpd.csr

            将请求文件发往CA;
                                                   #  scp httpd.csr  192.168.48.128:/tmp/

        CA签署证书:
            签署:
                # openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS

            将证书传回请求者

        吊销证书:
            # openssl ca -revoke /path/to/somefile.crt





    speed 测试当前系统上的加密算法的性能
    version: 版本
    s_client ssl/tls client program 测试连接性的
    rand:用来生成伪随机数字
       openssl rand -hex #

    openssl:私有CA
      证书格式
             公钥和有效期限:
             持有者的个人合法身份信息;(主机名)
             证书的使用方式
             CA的信息
             CA的数字签名


    对称加密:数据私密性
    公钥加密:密钥交换(对方的公钥)、数据加密(对方的公钥)、身份认证(自己的私钥)
    单向加密:hash码,only-way hash
    openssl补充材料:

            openssl中有如下后缀名的文件
            .key格式:私有的密钥
            .crt格式:证书文件,certificate的缩写
            .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
            .crl格式:证书吊销列表,Certificate Revocation List的缩写
            .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
            
            常用证书协议
            x509v3: IETF的证书标准
            x.500:目录的标准
            SCEP:  简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
            PKCS#7:  是封装数据的标准,可以放置证书和一些请求信息
            PKCS#10:  用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
            PKCS#12:  用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx



    ssl:网景公司开发
     Secure Scocket Layer
      安全的套接字层

    TLS:Transport Layer Security
        安全的传输层

    远程登录:
     telnet

    telnet服务:明文传输
       监听tcp协议的23号端口
       ss -tan |grep 23

       禁止管理员直接登陆
          使用普通用户登录。而后su到管理员

    ssh:Secure SHell
     监听tcp协议的22号端口
     /etc/services 解析库,进程<->端口
       ssh文本协议:字符通信

     sshv1,sshv2
        由于sshv1是居于CRC-32做MAC,因此,不安全,建议勿用
        sshv2 基于双发主机协商选择最安全的MAC实现机制
           加密机制和MAC机制是双方协商选定
           基于DH实现密钥交换,基于RSA或DAS实现身份认证
           客户端通过检查服务端的主机密钥来判断是否与其进一步通信

     OpenSSH(C/S)
       Server:监听tcp22
       Client:程序
     windows客户端:xmanager(xshell)、SecureCRT、putty、sshshellcilent

     openssh客户端组件:
        ssh
           ssh Username@HOST [command]
           ssh -l Username HOST [command]
              -p port:指定要连入端口

        ssh认证机制:
           基于口令
           基于密钥
              客户端在本地生成一对密钥
              客户端将公钥复制到服务器,要登陆的用户的家目录下的隐藏目录.ssh中的一个名为authorized_keys或authorized_keys2中
           配置过程:
             1.生成密钥对,客户端
                ssh-key -t rsa
                 生成的密钥默认保存至当前家目录下的.ssh下的id_rsa,公钥在id_rsa.pub
              文件中
              2.复制密钥至远程主机:
                 ssh-copy-id -i 公钥文件 登陆用户@远程ip地址
        scp:类cp命令,基于ssh协议跨主机复制
           scp SRC1 SRC2 .... DEST
           分两种情况:
             1.源文件在本机,目标为远程
             scp /path/to/somefile ....  Username@HOST:/path/to/somewhere
             2.源文件在远程,目标在本机
              scp Username@HOST:/path/to/somefile /path/to/somewhere

             -r当源文件为目录,以实现递归复制
             -p:保留源文件的复制及修改时间戳,以及权限
             -q:静默模式
             -P PORT:指定服务器端口

        sftp:是基于ssh的ftp协议
         只要OpenSSH的服务器端有以下项,则代表支持sftp
         Subsystem    sftp    /usr/libexec/openssh/sftp-server

         用法: sftp[username@]HOST

    服务器端:sshd
       配置文件 /etc/ssh/sshd_config
       服务脚本 /etc/rc.d/init.d/sshd
       脚本配置文件:/etc/sysconfig/sshd

       查看config文件的帮助
           man sshd_config
           ListernAddress 当前主机的监听地址
           Protocol 协议版本
           # HostKeys for protocol version 2
           #HostKey /etc/ssh/ssh_host_rsa_key
           #HostKey /etc/ssh/ssh_host_dsa_key
           验证主机的公钥
           #KeyRegenerationInterval 1h  密钥的使用时间
           #ServerKeyBits 1024 密钥长度
           #LogLevel INFO 日志级别
           #LoginGraceTime 2m 登陆宽限期
           #PermitRootLogin yes root是否可以登录
           #StrictModes yes 严格模式,家目录 属主 属组
           #MaxAuthTries 6 最多可以承受的次数
           #MaxSessions 10
           最大的连接数
           PasswordAuthentication yes 是否使用用户名和密码的方式
           Kerberos集中认证管理
           X11Forwarding yes 是否转发图形窗口
           AllowUsers user1 user2
           用户白名单
           Allowgroups 组白名单
           DenyUser 用户黑名单
     
    用户登录信息获取
      lastlog:显示用户最近一次的登录信息,成功的 /var/log/wtmp
      lastb:显示用户登录的信息,并尝试失败的 /var/log/btmp
      用户成功登陆的日志信息
      last



    使用ssh的最佳方式
    1)only use ssh protocol 2
    2)limit users SSh access
        Allowusers root vivek jerry
        白名单
        denyUser saroj anjali foo
        黑名单
    3)configure  Idle Log out timeout Interval 配置空闲超时长。
        ClientAliveCountMax 300
        ClientAliveInterval  0
    4)Firwall SSH Port # 22
        使用iptables设置ssh服务安全访问策略
    5)change ssh port and Limit IP binding
        port 300
        Listaddress 192.168.1.5
        ListenAddress 202.54.1.5
        勿使用默认22端口
    6)use Strong SSH passwords and passphrase  
        genpasswd(){
            local 1=$1
                [ "$1" == "" ]&& 1=20
                tr -dc A-Za-z0-9_</dev/urandom | head -c ${1} | xargs
        }
    使用足够长足够复杂的密码,且定期更换。
    7)use Public key Based AUthentication
    使用公钥认证。
    8)disable Empty password
    9)thwart ssh crakers (Brute  Force attack)
    google:ssh best practice
    10)rate-limit incoming port # 22 COnnections
    限制ssh访问频度
    11)use log analyzer
        记录好日志,经常做日志分析。

    总结:ssh,scp.sftp,sshd
          ssh /etc/ssh/ssh_config
          sshd /etc/ssh/sshd_config

    bash编程的信号捕获
      trap 陷阱
      trap ‘command’ signal
      kill -l
      KILL无法捕捉

      信号捕捉用于:在中途中止时做一些清理操

  • 相关阅读:
    Educational Codeforces Round 58
    Educational Codeforces Round 59
    Codeforces Round #534 (Div. 2)
    Codeforces Round #531 (Div. 3)
    Codeforces Round #536 (Div. 2)
    Codeforces Round #530 (Div. 2)
    Codeforces Round #533 (Div. 2)
    Codeforces Round #535 (Div. 3)
    Codeforces Round #532 (Div. 2)
    Codeforces Round #538 (Div. 2)
  • 原文地址:https://www.cnblogs.com/gohrx/p/10633341.html
Copyright © 2020-2023  润新知