openssl&openssh

安全和加密


不加密流量的易受攻擊性

      密碼/數據嗅探

      數據操作

      驗證操作

      相當于郵寄明信片

不安全的傳統協議

      telnet、FTP、POP3等等;不安全密碼

      http、smtp、NFS等等;不安全信息

      Ldap、NIS、rsh等等;不安全驗證

  

NIST(美國國家標準與技術研究院)定義的安全屬性:

    保密性:

數據保密性

隱私性

    完整性:不可篡改

數據完整性

系統完整性

    可用性

安全攻擊: STRIDE

    Spoofing(假冒)、Tampering(篡改)、Repudiation(否認)、Information Disclosure(信息泄漏)、Denial of Service(拒絕服務)和 Elevation of Privilege(提升權限)

安全機制:

    加密、數字簽名、訪問控制、數據完整性、認證交換、流量填充、路由控制、公證

  

安全服務:

    認證

    訪問控制

    數據保密性

連接保密性

無連接保密性

選擇域保密性

流量保密性

    數據完整性

    不可否認性

  

設計基本原則

    使用成熟的安全系統

    以小人之心度輸入數據

    外部系統是不安全的

    最小授權

    減少外部接口

    缺省使用安全模式

    安全不是似是而非

    從STRIDE思考

    在入口處檢查

    從管理上保護好你的系統

常用安全技術

    認證

    授權

    安全通信

    審計

    

密碼算法和協議:

    對稱加密

    公鑰加密

    單向加密

    認證協議

    

Linux系統:OpenSSL, gpg(pgp協議的實現)

1、對稱加密

 特性:

1、加密、解密使用同一個密鑰,效率高

2、將原始數據分割成固定大小的塊,逐個進行加密

 算法:

DES:Data Encryption Standard,56bits

3DES:使用DES加密三次

AES:Advanced (128, 192, 256bits)

Blowfish,Twofish

IDEA,RC6,CAST5

 缺陷:

1、密鑰過多

2、密鑰分發困難

3、數據來源無法確認

    

2、非對稱加密算法(公鑰加密)

公鑰:公開給所有人;public key

私鑰:自己留存,必須保證其私密性;secret key

     特點:密鑰成對出現;用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然

     功能:

   數字簽名:主要在于讓接收方確認發送方身份

   對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰后發送給對方

   數據加密:適合加密較小數據

     缺點:密鑰長,加密解密效率低下

     算法:RSA(加密,數字簽名),DSA(數字簽名),ELGamal

     (1)實現數字簽名:使用自己的私鑰加密

 發送者A

     生成公鑰/私鑰對:P和S

     公開公鑰P,保密私鑰S

     使用自己的私鑰S來加密消息data

     將S(data)發送給接收者B

 接收者B

     使用發送者A的公鑰P來解密data=P(S(data))

     

     (2)實現加密:使用對方的公鑰加密

 接收者B

     生成公鑰/私鑰對:P和S

     公開公鑰P,保密私鑰S

 發送者A

     使用接收者B的公鑰P來加密消息data

     將P(data)發送給接收者A

 接收者B

     使用自己的公鑰S來解密:data=S(P(data))

3、單向加密

        特點:

     將任意數據縮小成固定大小的“指紋”

任意長度輸入

固定長度輸出

若修改數據,指紋也會改變(“不會產生沖突”)

無法從指紋中重新生成數據(“單向”)

       功能:確保數據完整性

算法:md5: 128bits、sha1: 160bits、sha224sha256、sha384、sha512

  

4、密鑰交換:IKE( Internet Key Exchange )

     公鑰加密:

     DH (Deffie-Hellman):

 1、A: a,p 協商生成公開的整數a, 大素數p

     B: a,p

 2、A:生成隱私數據 :x (x<p ),計算得出 a^x%p,發送給B

     B:生成隱私數據 :y (y<p ),計算得出 a^y%p,發送給A

 3、A:計算得出 (a^y%p)^x = a^xy%p,生成為密鑰

     B:計算得出 (a^x%p)^y = a^xy%p, 生成為密鑰

            

CA和證書

     PKI: Public Key Infrastructure

   簽證機構:CA(Certificate Authority)

   注冊機構:RA

   證書吊銷列表:CRL

   證書存取庫:

 X.509:定義了證書的結構以及認證協議標準

     版本號

     主體公鑰

     序列號

     CRL分發點

     簽名算法

     擴展信息

     頒發者

     發行者簽名

     有效期限

     主體名稱

   證書獲取

   證書類型:

 證書授權機構的證書

 服務器

 用戶證書

   獲取證書兩種方法:

 使用證書授權機構

生成簽名請求(csr)

將csr發送給CA

從CA處接收簽名

 自簽名的證書

自已簽發自己的公鑰

     安全協議

     SSL: Secure Socket Layer

     TLS: Transport Layer Security

     1995:SSL 2.0 Netscape

     1996: SSL 3.0

     1999: TLS 1.0

     2006: TLS 1.1 RFC( Request For Comments ) 4346

     2008:TLS 1.2 當前使用

     2015: TLS 1.3

     功能:機密性,認證,完整性,重放保護

兩階段協議,分為握手階段和應用階段

      握手階段(協商階段):客戶端和服務器端認證對方身份(依賴于PKI體系,利用數字證書進行身份認證),并協商通信中使用的安全參數、密碼套件以及主密鑰。后續通信使用的所有密鑰都是通過MasterSecret生成。

      應用階段:在握手階段完成后進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信。

SSL/TLS

  Handshake協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換

  ChangeCipherSpec 協議:一條消息表明握手協議已經完成

  Alert 協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning兩個級別,fatal類型錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接仍可繼續,只是會給出錯誤警告

  Record 協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等

  HTTPS 協議:就是“HTTP 協議”和“SSL/TLS 協議”的組合。HTTP over SSL”或“HTTP over TLS”,對http協議的文本數據進行加密處理后,成為二進制形式傳輸

OpenSSL:開源項目

三個組件:

   openssl: 多用途的命令行工具

   libcrypto: 加密算法庫

   libssl:加密模塊應用庫,實現了ssl及tls

openssl命令:

 兩種運行模式:交互模式和批處理模式

 openssl version:程序版本號

 標準命令、消息摘要命令、加密命令

 標準命令:enc, ca, req, …

   注:查看支持的加密算法:openssl ?

 1、對稱加密

enc命令:man enc

#  加密  openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher

#  解密  openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile

 -e:加密

 -d:解密

 -des3:指明des3加密算法

 -a:編碼為文本,可放于文件中,默認編碼為二進制文件

 -salt [xxxx]:雜質,可手動指明字母或數字,默認隨機添加,最長8位

 -in:輸入文件

 -out:輸出文件

       注:

   回車后鍵入密碼

   加密不會刪除源文件

2016-09-22 21-27-05 的屏幕截圖.png

2、非對稱加密(公鑰加密)

genrsa命令:man genrsa

#   生成私鑰     openssl genrsa  {-out|>} /PATH/TO/PRIVATEKEY.FILE  [-des] NUM    鍵入回車后設置私鑰密碼

#   提取公鑰     openssl rsa -in /PATH/TO/PRIVATEKEY.FILE -pubout -out /PATH/TO/PUBLICKEYFILE     鍵入回車后輸入私鑰密碼

                       -des:對私鑰進行des加密保護

                      NUM: 表示字節數;-hex時,每個字符4位,出現的字符數為NUM*2

                          注:

                       生成的私鑰權限應僅自己有讀寫權限可使用以下命令,括號表示在子shell中運行生成私鑰,并設置其umask權限,此時生成的私鑰僅屬主有讀寫權限

                       (umask 077; openssl genrsa -out key.pri -des 2048)

2016-09-22 21-38-43 的屏幕截圖.png

2016-09-22 21-40-12 的屏幕截圖.png

3、單向加密

dgst命令:man dgst

   #  計算文件特征碼  openssl dgst -md5 [-hex] filename

注:md5sum filename

2016-09-22 22-02-56 的屏幕截圖.png

4、生成用戶密碼:

     passwd命令:man sslpasswd

     #    openssl passwd -1 -salt [xxxx] 密碼口令

     -1:指明加密算法(1表示md5算法)

     -salt [xxxx]:雜質,可手動指明字母或數字,默認隨機添加,最長8位

 示例:openssl passwd -1 salt centos

openssl passwd -1 salt $(openssl rand -hex 4)  使用隨機數生成器結果作為雜質

2016-09-22 22-08-12 的屏幕截圖.png

5、生成隨機數:

   sslrand命令:man sslrand

   #    openssl rand {-base64|-hex} NUM

-base64:使用base64編碼,所有文本均可

-hex:使用十六進制數字編碼使用,只使用0-f之間的字符進行編碼,默認

NUM: 表示字節數;-hex時,每個字符4位,出現的字符數為NUM*2

     注:默認生成的隨機數為二進制編碼

   linux系統上的隨機數生成器

/dev/random:僅從熵池返回隨機數;隨機數用盡,將阻塞后面的進程,等待更多的隨機數生成

/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞,偽隨機數不夠安全

   熵池:運行中的內核在內存維護的地址空間,從中存儲大量的隨機數,開機時為空,剪切使用

   來源:各種I/O中斷之間的時間間隔

鍵盤和鼠標:相鄰擊鍵間的時間差

塊設備中斷:硬盤IO中斷時間間隔

2016-09-22 22-09-51 的屏幕截圖.png

1、使用gpg實現對稱加密

       在hostB主機加密,在hostA主機上解密;在同一臺主機上操作時無需密碼即可解密

          加密:在hostB主機加密

                    gpg -c file   回車后輸入密碼

                    ls file.gpg

2016-09-22 22-13-36 的屏幕截圖.png

          解密:在hostA主機上解密

                    gpg -o file -d file.gpg   回車后輸入密碼

                        -o:解密后保存在文件

2016-09-22 22-16-05 的屏幕截圖.png

2、使用gpg工具實現公鑰加密

       在hostB主機上用hostA的公鑰加密,在hostA主機上解密

    (1)在hostA主機上生成公鑰/私鑰對

        gpg –gen-key     回車后選擇加密算法,密鑰長度,有效期,確認信息y/N,user_id,屬主郵箱,描述,是否接受,密鑰密碼

2016-09-22 22-34-36 的屏幕截圖.png      

2016-09-22 22-36-39 的屏幕截圖.png  

    (2)在hostA主機上查看公鑰

        gpg –list-keys

2016-09-22 22-37-14 的屏幕截圖.png

    (3)在hostA主機上導出公鑰到keyA.pub

        gpg -a –export -o keyA.pub

2016-09-22 22-38-54 的屏幕截圖.png        

    (4)從hostA主機上復制公鑰文件到需加密的B主機上

        scp keyA.pub hostB:

       

    (5)在hostB主機上導入hostA主機的公鑰

        gpg –import keyA.pub

        gpg –list-keys

2016-09-22 22-52-37 的屏幕截圖.png

    (6)用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg

        gpg -e -r user_id file    

        ls file.gpg

    2016-09-22 22-55-11 的屏幕截圖.png    

2016-09-22 22-55-39 的屏幕截圖.png

    (7)復制加密文件到hostA主機

        scp file.gpg hostA:

    (8)在hostA主機解密文件

        gpg -d file.gpg

        gpg -o file -d file.gpg

            -o:解密后保存在文件

2016-09-22 22-58-18 的屏幕截圖.png

    (9)刪除公鑰和私鑰(公鑰與私鑰成對存在是,先刪除私鑰再刪除公鑰)

        gpg –delete-secret-keys user_id      刪除該私鑰    

        gpg –delete-keys user_id             刪除該公鑰

2016-09-22 23-00-56 的屏幕截圖.png

2016-09-22 23-01-18 的屏幕截圖.png

   PKI:Public Key Infrastructure   公共密鑰加密體系

   CA

   RA

   CRL

   證書存取庫

   建立私有CA:

     openssl

     OpenCA:開源CA工具,基于openssl

          注:在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可

   證書申請及簽署步驟:

     1、生成申請請求

     2、RA核驗

     3、CA簽署

     4、獲取證書

創建私有CA:

    openssl的配置文件:/etc/pki/tls/openssl.conf   其中定義了CA的各種配置

      CA的配置:

            /etc/pki/CA/  工作目錄

        新建:

            /etc/pki/CA/serial  當前主機序列號碼    

            /etc/pki/CA/index.txt  已經頒發的證書索引            

            /etc/pki/CA/private/cakey.pem  CA自己的私鑰

            /etc/pki/CA/cacert.pem  CA的自簽證書            

        存在:

            /etc/pki/CA/private/   CA的私鑰放置目錄

            /etc/pki/CA/newcerts/  尚未簽署的證書放置處    

            /etc/pki/CA/certs/  已經簽署的證書

            /etc/pki/CA/crl/  已經吊銷的證書   

        注:policy客戶端與CA之間標有match的選項必須相同,countryName,stateOrProvinceName,localityName        

      (1) 創建所需要的文件

            (a) touch /etc/pki/CA/index.txt

            (b) echo 01 > /etc/pki/CA/serial

      (2) CA自簽證書

            (a)生成私鑰

                cd /etc/pki/CA/

                (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem [-des] 2048)  

                    注:cakey.pem文件名必須與配置文件中對應,自定義文件名時需修改配置文件使其與之相同

            (b)生成自簽證書

                openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

                -new: 生成新證書簽署請求

                -x509: 專用于CA生成自簽證書

                -key: 生成請求時用到的私鑰文件

                -days n:證書的有效期限

                -out /PATH/TO/SOMECERTFILE : 證書的保存路徑

      鍵入回車后輸入country name,state province name,local name,organzation name,organzation unit name,common name(hostname),mail address

            (c)查看證書信息:

                 openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -text|subject|serial|dates

      (3) 申請證書

            (a)  生成私鑰(以web服務為例)

                        mkdir /etc/httpd/ssl

                        cd /etc/httpd/ssl

                        (umask 066; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

            (b)  生成申請證書

                        openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr

       鍵入回車后輸入country name,state province name,local name,organzation name,organzation unit name,common name(hostname),mail address

            (c)  提交申請證書

                      scp /etc/httpd/ssl/httpd.key CA:/etc/pki/CA/newcerts/

      (4)     簽署證書

              openssl ca -in /etc/pki/CA/newcerts/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

                注:默認國家,省 ,公司名稱必須和CA一致,主機名hostmane.domain

                    /tmp/目錄下的證書申請文件簽署后即可刪除

              頒發證書

                   scp /etc/pki/CA/certs/httpd.crt  WEB:/etc/httpd/ssl/

      (4) 吊銷證書

            (a) 在客戶端獲取要吊銷的證書的serial

                  openssl x509 -in / PATH/FROM/CERT_FILE -noout -serial -subject

            (b) 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致

                吊銷證書:  openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

                注:其中SERIAL.pem要換成證書真正的序列號

            (c) 生成吊銷證書的編號(第一次吊銷證書時才需要執行)

                 echo 01 > /etc/pki/CA/crlnumber

            (d) 更新證書吊銷列表:openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl

                查看crl文件: openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text

SSH

  ssh: secure shell, protocol, 22/tcp, 安全的遠程登錄

  OpenSSH: ssh協議的開源實現

  dropbear:另一個開源實現

  SSH協議版本

 v1: 基于CRC-32做MAC,不安全;man-in-middle

 v2:雙方主機協議選擇安全的MAC方式

 基于DH算法做密鑰交換,基于RSA或DSA實現身份認證

  兩種方式的用戶登錄認證:

 基于password

 基于key

OpenSSH:  C/S架構

  C: 

      Linux:openssh-clients:ssh, scp, sftp

      Windows: xshell, putty, securecrt, sshsecureshellclient

  S: openssh-server:sshd

ssh客戶端

  客戶端組件:

  ssh, 配置文件:/etc/ssh/ssh_config

 Host PATTERN

 ForwardX11Trusted yes  支持信任x11轉發

 StrictHostKeyChecking no  首次登錄不顯示檢查提示

  格式:ssh [user@] host [COMMAND]

         ssh [-l user] host [COMMAND]

     -p port:遠程服務器監聽的端口

     -b:指定連接的源IP

     -v:調試模式

     -C:壓縮方式

     -X: 支持x11轉發

     -Y:支持信任x11轉發   

     -t: 強制偽tty分配

 示例:ssh -t remoteserver1 ssh remoteserver2              其中: remoteserver1為跳板,remoteserver2為目標

scp命令:

  scp [options] SRC… DEST/

  兩種方式:

      下載 scp [options] [user@]host : /sourcefile /destpath    

      上傳 scp [options] /sourcefile [user@]host:/destpath

        常用選項:

          -C: 壓縮數據流

          -r: 遞歸復制

          -p: 保持原文件的屬性信息

          -q: 靜默模式

          -P PORT: 指明remote host的監聽的端口

rsync命令

  基于ssh和rsh服務實現高效率的遠程系統之間復制文件

  使用安全的shell連接做為傳輸方式 

      rsync -av /etc server1:/tmp 復制目錄和目錄下文件

      rsync -av /etc/ server1:/tmp 只復制目錄下的文件

  比scp更快,只復制不同的文件

  選項:

    -n 模擬復制過程

    -v 顯示詳細過程

    -r 遞歸復制目錄樹

    -p 保留權限

    -t 保留時間戳

    -g 保留組信息

    -o 保留所有者信息

    -l 把符號鏈接文件做為符號文件進行復制

    -L 將軟鏈接文件指向文件復制

    -a 存檔模式,相當于 rlptgo,但不保留ACL(-A)和SELinux屬性(-X)

sftp命令

  交互式文件傳輸工具

  用法能和傳統的ftp工具相似

  利用ssh服務實現安全的文件上傳和下載

  使用ls cd mkdir rmdir pwd get put等指令,可用?或help獲取幫助信息。

      sftp [user@]host

      sftp> help  

 

 

兩種認證方式  

 

1、基于password認證

允許實現對遠程系統經驗證地加密安全訪問

     當用戶遠程連接ssh服務器時,會復制ssh服務器/etc/ssh/中的

     ssh_host_rsa_key.pub(centos6)

     ssh_host_ecdsa_key.pub(centos7)

 到客戶機的~./ssh/know_hosts中。下次連接時,會比較兩處是否有不同。

2、基于key認證

(1) 在客戶端生成密鑰對

 ssh-keygen -t {rsa|dsa} [-P 'passwd'] [-f “/root/.ssh/id_rsa|dsa"]

(2) 把公鑰文件傳輸至遠程服務器對應用戶的家目錄,會自動創建.ssh/authorized_keys并將公鑰內容寫入

 ssh-copy-id [-i /root/.ssh/id_rsa|dsa.pub] [user@]host

或先將公鑰文件id_rsa|dsa.pub復制至對應用戶家目錄下的.ssh/目錄下,再更名為authorized_keys

(3) 測試

    注:

      重設私鑰口令      ssh-keygen -p

      驗證代理(authentication agent)保密解密后的密鑰,這樣口令就只需要輸入一次

      在GNOME中,代理被自動提供(自動啟用ssh-agent),否則運行ssh-agent bash,鑰匙通過命令添加給代理ssh-add,僅當前shell有效

  windows中基于key的驗證

     xshell

        新建會話、輸入名稱、協議、主機IP、端口號

        連接、輸入用戶名、密碼、登陸

        工具-新建用戶密鑰生成向導、選擇密鑰類型{DSA|RSA}、密鑰長度1024

        輸入給用戶密鑰加密的密碼、保存為文件、完成

        將公鑰上傳至服務器并更名為authorized_key

        會話屬性、類別中選擇用戶身份驗證、選擇驗證方法為Public key、密鑰密碼、瀏覽選擇公鑰

    secureCRT

        工具、創建公鑰、選擇密鑰類型{RSA|DSA}、通行短語(密碼密鑰)、密鑰長度1024、選擇文件保存路徑

        將公鑰上傳至服務器、轉換密鑰格式

        點擊快速連接、輸入主機名、身份驗證方式為公鑰、屬性選擇使用證書、導入私鑰文件、導入公鑰文件

            注:轉化為openssh兼容格式(適合SecureCRT,Xshell不需要轉化格式),并復制到需登錄主機上相應文件authorized_keys中,注意權限必須為600

                    ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

          

SSH端口轉發

   SSH 會自動加密和解密所有SSH客戶端與服務端之間的網絡數據。但是,SSH還能夠將其他TCP端口的網絡數據通過SSH接來轉發,并且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道”(tunneling),這是因為SSH為其他TCP接提供了一個安全的通

道來進行傳輸而得名。例如,Telnet,SMTP,LDAP這些TCP應用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許SSH的連接,也能夠通過將TCP端口轉發來使用SSH進行通訊

SSH端口轉發能夠提供兩大功能:

    加密 SSH Client 端至 SSH Server 端之間的通訊數據

    突破防火墻的限制完成一些之前無法建立的 TCP 連接。

  1、本地轉發:                  A主機借助AB主機的SSH通道,實現A與C之間有防火墻時的telnet通信

      A:  ssh -L A_port:C_IP:C_port -N B_IP          需要輸入B主機的密碼,不連接至B主機shell

         選項:

            -f 后臺啟用

            -N 不開遠程shell

            -g 啟用網關功能

            A_port:自己指定

            C_port:telnet服務端口23

      示例:

      A:    telnet 127.0.0.1 A_port              需要輸入C主機的密碼,連接至C主機

                     WAN                                               |                                      LAN 

                                                                             |

          hostA lo:A_port–>hostA IP:port   –>   |   –>   hostB IP:22–>hostB IP:port   –>   hostC IP:23

                                                                            |

                                                                            |

           A本機訪問回環的telnet服務的指定端口,經ssh加密后轉發到B的ssh服務,解密后用telent轉發到C的telnet服務

          以A主機的身份登陸到B主機,以B主機的身份登陸到C主機

    

  2、遠程轉發:                   B主機借助AB主機的SSH通道,實現A與C之間有防火墻時的telnet通信

      B:     ssh -R A_port:C_IP:C_port -N A_IP              需要輸入A主機的密碼,連接至A主機shell

                  選項:

                    -f 后臺啟用

                    -N 不開遠程shell

                    -g 啟用網關功能

                    A_port:自己指定

                    C_port:telnet服務端口23

      示例:

      A:    telnet 127.0.0.1 A_port              需要輸入C主機的密碼,連接至C主機

                     WAN                                              |                                      LAN 

                                                                            |

           hostA IP:22                                   <–    |   <–   hostB IP:port   

          hostA lo:A_port–>hostA IP:port   –>  |   –>   hostB IP:22–>hostB IP:port   –>   hostC IP:23          

                                                                           |

                                                                           |

          A本機訪問回環的telnet服務的指定端口,經ssh加密后轉發到B的ssh服務,解密后用telent轉發到C的telnet服務

          以B主機的身份登陸到A主機,以B主機的身份登陸到C主機

  3、動態轉發: C主機借助B主機做網絡代理訪問A主機

        當用firefox訪問internet時,本機的1080端口做為代理服務器,firefox的訪問請求被轉發到sshserver上,由sshserver替之訪問internet

        C:   ssh -D C_port [root@]hostB             需要輸入B主機的密碼   

                  C_port:自己指定

        C:   在本機firefox-選項-高級-網絡-設置-手動設置代理-SOCKS Host:127.0.0.1:C_port

                     WAN                                |                       LAN 

                                                              | 

          hostA   IP:80                     <–   |   <–   hostB IP:22    <–   hostC IP:port<–hostC lo:C_port

                                                              |

  4、X協議轉發

        所有圖形化應用程序都是X客戶程序,本機可以不啟動圖形界面

        能夠通過tcp/ip連接遠程X服務器

        數據沒有加密機,但是它通過ssh連接隧道安全進行

    ssh -X user@remotehost gedit

        remotehost主機上的gedit工具,將會顯示在本機的X服務器上

        傳輸的數據將通過ssh連接加密

      注:Xmanager Enterprise 5

            打開xtart

            輸入會話名、主機IP、協議ssh、用戶名、身份驗證password、命令8GNOME(Gnome-session)

            運行

            接受并保存

            輸入密碼

             

ssh服務器

  服務器端:

  sshd, 配置文件: /etc/ssh/sshd_config

  常用參數:

      Port

      ListenAddress ip

      PermitRootLogin yes

      ClientAliveInterval 0

      UseDNS yes

  限制可登錄用戶的辦法:

      AllowUsers user1 user2 user3

      DenyUsers

      AllowGroups

      DenyGroups

ssh服務的最佳實踐  

    1、不要使用默認端口

    2、禁止使用protocol version 1

    3、限制可登錄用戶

    4、設定空閑會話超時時長

    5、利用防火墻設置ssh訪問策略

    6、僅監聽特定的IP地址

    7、基于口令認證時,使用強密碼策略

        tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs

    8、使用基于密鑰的認證

    9、禁止使用空密碼

    10、禁止root用戶直接登錄

    11、限制ssh的訪問頻度和并發在線數

    12、做好日志,經常分析

編譯安裝dropbear示例

  ssh協議的另一個實現:dropbear

  安裝準備:

      1、安裝開發包組:

      2、ftp://172.16.0.1/pub/Sources/sources/dropbear/dropbear-2013.58.tar.bz2

  安裝:

      3、tar xf dropbear-2013.58.tar.bz2,

      4、less INSTALL

      5、./configure

      6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"

      7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

  啟動ssh服務:

      8、ls /usr/local/sbin/ /usr/local/bin/

      9、/usr/local/sbin/dropbear -h

      10、mkdir /etc/dropbear

      11、dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048

      12、dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key

      13、dropbear -p :2222 -F E #前臺運行

          dropbear -p :2222 #后臺運行

  客戶端訪問:

      14、ssh -p 2222 root@127.0.0.1

      15、dbclient -p 2222 root@127.0.0.1

AIDE

當一個入侵者進入了你的系統并且種植了木馬,通常會想辦法來隱蔽這個木馬(除了木馬自身的一些隱蔽特性外,他會盡量給你檢查系統的過程設置障礙),通常入侵者會修改一些文件,比如管理員通常用ps -aux來查看系統進程,那么入侵者很可能用自己經過修改的ps程序來替換掉你系統上的ps程序,以使用ps命令查不到正在運行的木馬程序。如果入侵者發現管理員正在運行crontab作業,也有可能替換掉crontab程序等等。所以由此可以看出對于系統文件或是關鍵文件的檢查是很必要的。目前就系統完整性檢查的工具用的比較多的有兩款:Tripwire和AIDE,前者是一款商業軟件,后者是一款免費的但功能也很強大的工具。

AIDE(Adevanced Intrusion Detection Environment)

高級入侵檢測環境)是一個入侵檢測工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被更改過了。

AIDE能夠構造一個指定文件的數據庫,它使用aide.conf作為其配置文件。AIDE數據庫能夠保存文件的各種屬性,包括:權限(permission)、索引節點序號(inode number)、所屬用戶(user)、所屬用戶組(group)、文件大小、最后修改時間(mtime)、創建時間(ctime)、最后訪問時間(atime)、增加的大小以及連接數。AIDE還能夠使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每個文件的校驗碼或散列號.這個數據庫不應該保存那些經常變動的文件信息,例如:日志文件、郵件、/proc文件系統、用戶起始目錄以及臨時目錄.

  安裝

      yum install aide

  修改配置文件

      vim /etc/aide.conf (指定對哪些文件進行檢測)

      /test/chameleon R

      /bin/ps R+a

      /usr/bin/crontab R+a

      /etc

      PERMS

      !/etc/mtab #“!”表示忽略這個文件的檢查

      R=p+i+n+u+g+s+m+c+md5 權限+索引節點+鏈接數+用

      戶+組+大小+最后一次修改時間+創建時間+md5校驗值

      NORMAL = R+rmd60+sha256

  初始化默認的AIDE的庫:

      /usr/local/bin/aide –init

  生成檢查數據庫(建議初始數據庫存放到安全的地方)

      cd /var/lib/aide

      mv aide.db.new.gz aide.db.gz

  檢測:

      /usr/local/bin/aide –check

  更新數據庫

      aide –update

更改身份

  su 切換身份:su -l username -c ‘command'

  sudo 命令

      1. sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使用 sudo,會提示聯系管理員

      2. sudo可以提供日志,記錄每個用戶使用sudo操作

      3. sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機

      4.sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入場券”

      5、通過visudo命令編輯配置文件,具有語法檢查功能

  配置文件:/etc/sudoers, /etc/sudoers.d/

  時間戳文件:/var/db/sudo

  日志文件:/var/log/secure

  配置文件支持使用通配符glob:

      ?:前面的字符或詞可出現一次或無

      * :前面的字符或詞出現零次或多次

      [wxc]:匹配其中一個字符

      [^wxc]:除了這三個字符的其它字符

      \x : 轉義

      [[alpha]] :字母 示例: /bin/ls [[alpha]]*        此處沒有冒號:冒號在此處有特殊用途

  配置文件規則有兩類;

      1、別名定義:不是必須的

      2、授權規則:必須的

 

 sudoers

    授權規則格式:

         用戶 登入主機=(代表用戶) 命令

    示例:root      ALL=(ALL)       ALL

  格式說明:

      user: 運行命令者的身份

      host: 通過哪些主機

      (runas):以哪個用戶的身份

      command: 運行哪些命令

別名

  Users和runas:

      username

      #uid        #代表UID,不表示注釋

      %group_name

      %#gid

      user_alias|runas_alias

  host:

      ip或hostname       單個IP或主機名

      network(/netmask)       某個網段的所有主機

      host_alias

  command:

      command name    可以執行的的命令

      directory    可以執行該目錄下的所有命令

      sudoedit       授權用戶可以編輯sudoers文件

      Cmnd_Alias

sudo別名和示例

  別名有四種類型:User_Alias, Runas_Alias, Host_Alias,Cmnd_Alias

  別名格式:[A-Z]([A-Z][0-9]_)*      大寫字母開頭,字母或數字組成

  別名定義:Alias_Type NAME = item1, item2, item3 : NAME = item4, item5

    示例1:

        Student

        %wheel

        ALL=(ALL) ALL

        ALL=(ALL)

        ALL

    示例2:

        student ALL=(root)

        /sbin/pidof,/sbin/ifconfig

        %wheel ALL=(ALL) NOPASSWD: ALL     免密碼執行

    示例3

        User_Alias NETADMIN= netuser1,netuser2

        Cmnd_Alias NETCMD = /usr/sbin/ip

        NETADMIN ALL=(root) NETCMD

    示例4

        User_Alias SYSADER=wang,mage,%admins

        User_Alias DISKADER=tom

        Host_Alias SERS=www.magedu.com,172.16.0.0/24

        Runas_Alias OP=root

        Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod

        Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk

        SYSADER SERS= SYDCMD,DSKCMD

        DISKADER ALL=(OP) DSKCMD

        User_Alias ADMINUSER = adminuser1,adminuser2

        Cmnd_Alias ADMINCMD = /usr/sbin/useradd,

        /usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*,

        !/usr/bin/passwd root

        ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,

        PASSWD:/usr/sbin/userdel

    示例5

        Defaults:wang runas_default=tom    wang用戶的默認身份切換為ton

        wang ALL=(tom,jerry) ALL

    示例6

        wang 192.168.175.136,192.168.175.138=(root)

        /usr/sbin/,!/usr/sbin/useradd

    示例7

        wang ALL=(ALL) /bin/cat /var/log/message*   會查看包括日志在內的所有的文件

sudo命令

  ls -l /usr/bin/sudo

  sudo -i -u wang 切換身份相當于 su

  sudo [-u user] COMMAND

      -V 顯示版本信息等配置信息

      -u user 默認為root

      -l,ll 列出用戶在主機上可用的和被禁止的命令

      -v 再延長密碼有效期限5分鐘,更新時間戳

      -k 清除時間戳,下次需要重新輸密碼

      -K 與-k類似,還要刪除時間戳文件

      -b 在后臺執行指令

      -p 改變詢問密碼的提示符號

      如 -p ”password on %h for user %p"


原創文章,作者:anonymous,如若轉載,請注明出處:http://www.www58058.com/49098

(0)
anonymousanonymous
上一篇 2016-09-26
下一篇 2016-09-26

相關推薦

  • ?linux文件類型及顏色標識整理

          linux文件類型及顏色標識整理                      &…

    Linux干貨 2016-10-17
  • 馬哥教育網絡班20期第2周課程練習

    一、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關  示例演示。 linux上文件管理命令包括: ls,cat,pwd,cp,rm,cd,head,tail,more,less,cut,which,whereis,find,mkdir,mv; 1、ls 命令;顯示文件/文件夾清單   例如:如下顯示列出根目錄下的文件及目錄…

    Linux干貨 2016-06-23
  • 馬哥教育N22期第七周作業

    1、創建一個10G分區,并格式為ext4文件系統; [root@localhost xuc]# cat /proc/partitions  major minor  #blocks  name    8   &…

    Linux干貨 2016-10-24
  • N23-卡卡琦-第一周

    1、描述計算機的組成及其功能 硬件: 控制器:是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等;運算器:運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理;存儲器:存儲器的功能是存儲程序、數據和各種信號、命令等信息,并在需要時提供這些信息;輸入輸…

    Linux干貨 2016-11-16
  • 源碼安裝http

    http://xxlii.blog.51cto.com/10277731/1841570     哈哈!

    Linux干貨 2016-08-24
  • Linux的自動化安裝實現

    在介紹自動化安裝系統之前讓我們來回顧一下系統的啟動流程,系統的啟動大概分為一下幾個步驟:加電自檢 boot sequence(mbr)— boot loader –>kernel(initramfs)—>rootfs  /sbin/init大概就是這么幾個過程了,接下來來介紹系統的安裝,安裝系統雖然看起來簡單,普…

    系統運維 2016-09-19

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-26 12:15

    行與行之間的間距是不是太寬了?看起來太離散了,建議緊密一點哦。

欧美性久久久久