第四周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  \:在被指定的行的下面插入文本
    \n:换行
    r 文件:在指定位置把另外一个文件的内容插入
    w 文件:将符合条件的所有行保存至指定文件中
    =:显示符号条件的行的行号
    s///:查找条件可以使用模式,但是要替换的内容不行

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

 用法:sed [options] 'addr1[,addr2]编辑命令' FILE...
       sed [options] "addr1[,addr2]编辑命令" FILE...   变量替换使用双引号
      
 正则表达式:
     基本的
        字符:
           .
           []
           [^]
        次数
           *
           \?
           \{m,n\}
         锚定:
           ^
           $
           \<,\b
           \>,\b
         分组:
          \(\)
         引用:
          \1,\2,……
     扩展:
        字符:
           .
           []
           [^]
        次数
           *
           ?
           {m,n}
           +
         锚定:
           ^
           $
           \<,\b
           \>,\b
         或:
           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无法捕捉

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

猜你喜欢

转载自www.cnblogs.com/gohrx/p/10633341.html