第四周LINUX 學習筆記

                                                                                                             內核編譯丶sed丶awkhtml

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
linux

 

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,不區分字符大小寫
git

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文件的配置是否存在問題
shell

系統故障排除之: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:強制訪問控制
apache

                                                                                         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沒法捕捉

  信號捕捉用於:在中途停止時作一些清理操
vim

相關文章
相關標籤/搜索