1. 程式人生 > >openssl詳解

openssl詳解

OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼演算法、常用的金鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用.

  SSL是Secure Sockets Layer(安全套接層協議)的縮寫,可以在Internet上提供祕密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通訊的保密性和可靠性,可在伺服器端和使用者端同時實現支援。已經成為Internet上保密通訊的工業標準。

  SSL能使使用者/伺服器應用之間的通訊不被攻擊者竊聽,並且始終對伺服器進行認證,還可選擇對使用者進行認證。SSL協議要求建立在可靠的傳輸層協議(TCP)之上。SSL協議的優勢在於它是與應用層協議獨立無關的,高層的應用層協議(例如:HTTP,FTP,TELNET等)能透明地建立於SSL協議之上。SSL協議在應用層協議通訊之前就已經完成加密演算法、通訊金鑰的協商及伺服器認證工作。在此之後應用層協議所傳送的資料都會被加密,從而保證通訊的私密性。

  傳輸層協議:TCP,UDP,SCTP.傳輸層協議的每一種都會提供埠,埠是用來標識程序地址的,但是埠卻是由核心上的傳輸層協議所提供,所以每一個程序所啟動時,要想通過某地址與其他主機通訊,他要向核心註冊申請使用某埠,而且一旦註冊使用以後他是獨佔使用的

  程序間通訊有多種方式,在同一主機上的程序間通訊可以藉助核心間的很多機制實現,如IPC機制,message queue(訊息佇列),shm(共享記憶體),semerphor(旗語)等等…

  不同主機上的程序間通訊用的最多的是早些時候tcp/ip協議中所研發的一種機制叫做基於socket的通訊機制,socket是成對出現的;即ip+port.ip+port只是用來描述標識單個主機上的程序地址的,如果要真正產生通訊他應該是兩個主機上發進程間進行通訊,即客戶端有ip+port服務端有ip+port(cip:port<–>sip:port)

  兩個主機間的程序通訊的時候發起的一方應該知道接收方的地址,而這個地址包含了ip和埠,那如何能得知地址呢.所以為了解決這樣的問題,網際網路名稱地址解析機構就首先做出了假定(套接字通訊在基於CS模式時伺服器端要處於監聽模式:所謂監聽模式就表示開啟ip和埠隨時等待客戶端請求),這就叫做監聽模式;

監聽模式:LISTEN機制
監聽模式指的是無論有沒有人訪問他都要開啟自己的程序,可以讓他監聽在某個ip+port上

SSL:secure sockets layer(安全的套接字層)

如果http協議呼叫了ssl協議,那麼他就變成了https(http –>ssl–>https)

網路通訊安全的目標是什麼:
保密性:confidentiality
完整性:integrity 通訊雙方在實現通訊時整個通訊報文不能產生資訊丟失,一旦資訊丟失就基於其他機制讓接收方知道.
可用性:availability 通訊雙方所產生的資訊應當對授權實體可用,即加了密的資料對方最起碼能夠解密
網路安全通訊的攻擊型別:
威脅保密性的攻擊:竊聽,通訊量分析
威脅完整性的攻擊:更改,偽裝,重放,否認
威脅可用性攻擊:拒絕服務(DoS)
為了實現安全目標並防範攻擊,就需要提供一些機制來完成抵禦攻擊保證安全,這需要從很多層面來保證.這些層面主要是從兩個層面來說;技術和服務

解決方案:
技術:加密和解密,服務:(用來抵禦攻擊而提供的服務,也即使為了實現上述安全目標而特地設計的安全服務)

加密和解密:(技術)
傳統加密方法:替代加密方法,置換加密方法
現代加密方法:現代塊加密方法
服務:
認證機制
訪問控制機制
在網際網路通訊時通訊方如何與被通訊方安全交換金鑰:金鑰演算法和協議就是為了解決金鑰交換的服務
加密和解密以及實現服務功能當中所用到的金鑰演算法和協議:常見的有四大類;

對稱加密:
常見的加密方式有:DES,3DES,AES,Blowfish,Twofish,TDEA,RC6,CAST5
特性:
加密和解密使用同一個金鑰
將原始資料分割成為固定大小的塊,逐個進行加密
缺陷:
金鑰過多
金鑰分發困難
公鑰加密:金鑰成對存在,分為公鑰和與之配對的私鑰.
公鑰:從私鑰中提取產生;可公開給所有人;pubkey
私鑰:通過工具建立,使用者自己留存,必須保證其私密性;secret key;
特點:
用公鑰加密的資料只能使用與之配對的私鑰解密;反之亦然
用途:
數字簽名:主要作用在於讓接收方確認傳送方的身份
金鑰交換:傳送方用對方的公鑰加密一個對稱金鑰,併發送給對方;以實現金鑰交換
加密和傳送過程:假如說A要和B進行通訊,第一步A先生成一段資料,為了保證這段資料安全無誤保密的送達給B,A要先用加密演算法 計算出這段資料的特徵碼.
第二步A會用自己的私鑰加密這段特徵碼並將結果附加在資料後面.
第三步A生成一個臨時的對稱金鑰,並使用這個對稱金鑰加密整段資料(特徵碼+資料).
第四步A會獲取到B的公鑰,並用B的公鑰加密剛才的臨時性對稱金鑰,並附加在整段資料的後面,然後整體傳送給B.

解密過程:第一步B先用自己的私鑰去解密A傳送過來的整段資料後面的對稱金鑰.
第二步用對稱金鑰解密A使用臨時對稱金鑰加密的整段內容(資料+特徵碼).
第三步用A的公鑰解密特徵嗎,如果能解密的話A的身份得到了驗證.
第四步B用同樣的對稱加密演算法去計算資料的特徵碼並與解密出來的特徵碼記性比較,
如果兩個特徵碼相同,資料完整性得到了驗證.所以這種手段保證了保密性和完整性同時也完成了身份驗證.

資料加密
公鑰加密當中常用的演算法:RSA,DSA,ELGamal
    DSS:數字簽名標準
    DSA:僅能實現簽名,而不能實現加解密
    RSA:既能簽名,又能實現加解密

單向加密:提取資料指紋,只能加密,不能解密.
特性:定長輸出,雪崩效應
功能:主要實現完整性驗證
演算法:
md5:訊息摘要演算法,5是版本號,128位定長輸出
sha1:安全的雜湊演算法,1是版本號,160位定長輸出
sha224,sha256,sha384,sha512
金鑰交換:網際網路金鑰交換;常見的實現方法有兩種;
公鑰加密
DH演算法
PKI:公鑰基礎設施:由四個元件組成
簽證機構:CA
註冊機構:RA
證書吊銷列表:CRL
證書存取庫:CB
證書
x509v3:定義了證書的結構以及認證協議標準

定義的證書應該有以下內容組成
證書版本號
序列號
簽名演算法ID
發行者的名稱
有效期限
主體名稱
主體公鑰
發行者的唯一標識
主體的唯一標識
擴充套件
發行者的簽名
SSL:安全套接字層:由網景公司1994年釋出,他的1.0版本從來沒有公開過,2.0版本在1995年釋出,因為存在數個安全漏洞被3.0版本取代,而3.0在1991年釋出,3.0版本被谷歌發現嚴重漏洞已經被禁用,目前處於臨危狀態,目前建議使用TLS1.2版本. TLS:傳輸層安全:由IETF1999年釋出,2006年釋出1.1版本

TLS採用了分層設計: 最底層:基礎演算法原語的實現 第二層:各種演算法的實現 第三層:組合演算法實現的半成品 第四層:用各種元件拼裝而成的各種成品密碼學協議軟體

開源協議的實現:OpenSSL
linux系統實現上述的方案有兩種:OpenSSL(ssl協議和加密解密庫的實現),GPG(pgp協議的實現)
OpenSSL由三部分組成:
libencrypto:用於實現加密和解密的庫
libssl:用於實現ssl通訊安全機制的庫
openssl多用途命令列工具
SSL會話主要三步:
客戶端向伺服器端索要並驗正證書;
雙方協商生成”會話金鑰”
====此前兩步被成為握手階段====
雙方採用”會話金鑰”進行加密通訊
在這三步操作當中,以HTTPD為例首先是客戶端通過瀏覽器向伺服器傳送加密通訊請求,這個加密通訊請求就成為clienthello 的過程;也就是SSL握手過程的第一階段;

SSL握手過程
第一階段clienthello:在clienthello過程,客戶端主要完成以下幾個操作;

向伺服器傳送自己支援的協議版本,比如TLS1.2
客戶端生成的一個隨機數,稍後用於生成一個會話金鑰
傳送自己支援的各種加密演算法,比如AES(對稱加密演算法),RSA(公鑰加密演算法)…
傳送自己支援的壓縮演算法
第二階段:serverhello:伺服器端在收到客戶端的請求之後要向客戶端發出迴應;迴應主要有以下內容;

確認使用的加密通訊協議版本,比如TLS1.2
伺服器端生成一個隨機數,稍後用於生成”會話金鑰”
確認使用的加密方法
伺服器證書
第三階段:客戶端收到伺服器端的serverhello以後給出的迴應;

驗證伺服器證書;在確認無誤後取出其公鑰;(發證機構,證書籤名,證書完整性,證書持有者,證書有效期,吊銷列表)
傳送以下資訊給伺服器端
一個隨機數:用於伺服器公鑰加密
編碼變更通知:表示通訊雙方都用商定好的金鑰進行通訊;即隨後的資訊都將用雙方商定好的加密方法和金鑰傳送.
客戶端握手結束通知:
第四階段:收到客戶端發來的第三個隨機數pre-master-key後,計算生成本次會話所有用到的”會話金鑰”;向客戶端傳送如下資訊;

編碼變更通知:表示通訊雙方都用商定好的金鑰進行通訊;即隨後的資訊都將用雙方商定好的加密方法和金鑰傳送.
伺服器端握手結束通知
OpenSSL的應用
它的元件:libcrypto,libssl主要由開發者使用,openssl;多用途命令列工具.

openssl:眾多子命令,分為三類:標準命令,訊息摘要(dgst子命令),加密命令(enc子命令)
標準命令:

訊息摘要(dgst子命令)

加密命令(enc子命令)

對稱加密:
工具:openssl enc 支援的演算法:3des,aes,blowfish..

enc命令

加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext

解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext

單向加密:
工具:opssl dgst dgst,md5sum,sha1sum,…

dgst命令:計算檔案特徵碼

~]# openssl dgst -md5 /path/to/somefile
生成使用者密碼的命令:

工具:passwd,openssl passwd

~]# openssl passwd -1 -salt SALT
生成隨機數:

工具:openssl rand

~]# openssl rand -hex NUM
~]# openssl rand -base NUM
公鑰加密:三種功能;
加密解密:
演算法:RSA,ELGamal
工具:openssl rsautl,gpg
數字簽名:
演算法:RSA,DSA,ELGamal
工具:openssl tsasutl,gpg
金鑰解密:
演算法:DH
如何生成金鑰:

生成私鑰:~]# (umask 077; openssl genrsa -out /path/to/private_key_file num_bits)
提出公鑰:~]# openssl rsa -in /path/from/frivate_key_file -pubout
linux系統上的隨機數生成器:
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟體生成偽隨機數,非阻塞;
偽隨機數不安全
熵池中隨機數的來源:
硬碟io中斷時間間隔;
鍵盤io中斷時間間隔;
CA:公共信任的CA,私有CA
建立私有CA: openssl,OpenCA

openssl命令:

  配置檔案:/etc/pki/tls/openssl.cof   

構建私有CA:

在確定配置為CA的服務上生成一個自簽證書,併為CA提供所需要的目錄及檔案即可;
步驟:
1)生成私鑰:
~]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2)生成自簽證書:
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新證書籤署請求
-x509:生成自籤格式證書,專用於建立私有CA時使用
-key:生成請求時用到的私有檔案路徑
-out:生成的請求檔案路徑;如果自簽證操作,將直接生成簽署過的證書
-days:證書的有效時長,單位是day
3)為CA提供所需的目錄及檔案
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.()txt}
~]# echo 01 > /etc/pki/CA/serial
要用到證書進行安全通訊的伺服器,需要向CA請求籤署證書

步驟:(以httpd為例)

1)用到證書的主機生成證書籤署請求
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成證書籤署請求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
3)將請求通過可靠方式傳送給CA主機
~]# scp
4)在CA主機上籤署證書
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
檢視證書中的資訊:
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
吊銷證書:

步驟:

1)客戶端獲取要吊銷的證書的serial(序列號)(在使用證書的主機上執行)
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
2)CA端主機吊銷證書
先根據客戶端提交的serial和subject資訊,對比其本機資料庫index.txt中儲存的是否一致
吊銷:
# openssl ca -revoke /etc/pki/CA /newcerts/SERIAL.pem
其中的SERIAL要換成證書真正的序列號;
3)生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
#echo 01 > /etc/pki/CA/crlnumber
4)更新證書吊銷列表
# openssl ca -gencrl -out thisca.crl
檢視crl檔案:
# openssl crl -in /path/from/crl_file.crl -noout -text
過程示例:
構建私有CA

1)主機生成私鑰:

    ~]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2)生成自簽證書:
    ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
        -new:生成新證書籤署請求
        -x509:生成自籤格式證書,專用於建立私有CA時使用
        -key:生成請求時用到的私有檔案路徑
        -out:生成的請求檔案路徑;如果自簽證操作,將直接生成簽署過的證書
        -days:證書的有效時長,單位是day
3)為CA提供所需的目錄及檔案
    ~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
    ~]# touch /etc/pki/CA/{serial,index.txt}
    ~]# echo 01 > /etc/pki/CA/serial

要用到證書進行安全通訊的伺服器,需要向CA請求籤署證書(以httpd為例)

1)用到證書的主機生成證書籤署請求
~]# mkdir /etc/httpd/ssl
~]# cd /etc/httpd/ssl
~]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2)生成證書籤署請求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 3655
3)將請求通過可靠方式傳送給CA主機
~]# scp
4)在CA主機上籤署證書
~]# openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 3655
檢視證書中的資訊:
~]# openssl -x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

在CA主機簽署證書

將證書傳送給申請方,放在其對應的服務目錄中

SSH
安全的shell協議,代替傳統的不安全的遠端登入,預設監聽在tcp協議的22號埠,SSH協議的開源實現是基於OpenSSH這個軟體,提供SSH服務的另外一個軟體是dropbear,這是一個第三方提供的軟體,沒有rpm包,需要手動編譯安裝.

openssh
客戶端:ssh,scp,sftp 服務端:sshd

ssh命令
格式: ssh [[email protected]]host [COMMAND]
ssh [-l user] host [COMMAND]
-p port:遠端伺服器監聽的埠
-b:指定連線的源IP
-v:除錯模式
-C:壓縮方式
X: 支援x11轉發
-Y:支援信任x11轉發
ForwardX11Trusted yes
-t: 強制偽tty分配
ssh -t remoteserver1 ssh remoteserver2
]# ssh -t 10.1.249.190 ssh 10.1.249.191
注意:當初次使用ssh命令連線至一個目標主機時,系統會把這個目標主機的資訊儲存至當前本機的連線使用者的家目錄的known_hosts檔案中,
這個檔案的作用是,當目標主機的資訊發生了變化的時候會拒絕連線,比如偽裝ip ,登入的時候會發出警告提示,()此次連線的IP和之前連線的ip不是同一臺主機).
此種機制的實現是基於金鑰對兒實現的,如果刪除此檔案即可連線.
ssh基於key的認證方式
(1) 在客戶端生成金鑰對
ssh-keygen -t rsa [-P ”] [-f “/root/.ssh/id_rsa”]

ssh-keygen –t rsa –P ‘’ -f “/root/.ssh/id_rsa”

ssh-keygen

(2) 把公鑰檔案傳輸至遠端伺服器對應使用者的家目錄
ssh-copy-id [-i [identity_file]] [[email protected]]host
(3) 測試
(4) 轉化為openssh相容格式(適合SecureCRT, Xshell不需要轉化格式),並複製到需登入主機上相應檔案authorized_keys中,注意許可權必須為600
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重設私鑰口令: #ssh-keygen –p

注意:如果在設定金鑰密碼的時候為金鑰設定了密碼的話,每次登入遠端主機都要輸入金鑰密碼.可以使用驗證代理的方式解決此問題,如下;

驗證代理( authentication agent)保密解密後的金鑰
這樣口令就只需要輸入一次
在GNOME中,代理被自動提供
否則執行ssh-agent bash
鑰匙通過命令新增給代理

ssh-add

SSH埠轉發
什麼是SSH埠轉發? SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網路資料。 但是, SSH 還能夠將其他 TCP 埠的網路資料通過 SSH 連結來轉發 ,並且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道” ( tunneling),這是因為 SSH 為其他 TCP 連結提供了一個安全的通 道來進行傳輸而得名。例如, Telnet, SMTP, LDAP 這些 TCP 應用均 能夠從中得益,避免了使用者名稱,密碼以及隱私資訊的明文傳輸。而與此 同時, 如果工作環境中的防火牆限制了一些網路埠的使用,但是允許 SSH 的連線,也能夠通過將 TCP 埠轉發來使用 SSH 進行通訊  SSH 埠轉發能夠提供兩大功能: • 加密 SSH Client 端至 SSH Server 端之間的通訊資料 • 突破防火牆的限制完成一些之前無法建立的 TCP 連線。

本地轉發:
-L localport:host:hostport sshserver
ssh –L 9527:server1:23 -N server2
telnet 127.0.0.1 9527
當訪問本機的9527的埠時,被加密後轉發到server2的ssh服務,再解密被轉發到server1:23
data<–>localhost:9527<–>localhost:XXXXX<–>server2:22<–>server2:YYYYY<–>server1:23
選項:
-f 後臺啟用
-N 不開遠端shell
-g 啟用閘道器功能
遠端轉發:
-R sshserverport:host:hostport sshserver
ssh –R 9527:server1:23 –N server2
讓server2偵聽9527埠的訪問,如有訪問,就加密後轉發請求到本機ssh服務,再由本機解密後轉發到serve1:23
Data<–>server2:9527<–>server2:22<–>localhost:XXXXX<–>localhost:YYYYY<–>server1:23
動態埠轉發
當用firefox訪問internet時,本機的1080埠做為代理伺服器, firefox的訪問請求被轉發到sshserver上,由sshserver替之訪問internet
在本機firefox設定代理proxy:127.0.0.1:1080

ssh -D 1080 [email protected]

ssh伺服器
伺服器端:

sshd, 配置檔案: /etc/ssh/sshd_config
常用引數:
Port
ListenAddress ip
PermitRootLogin yes
ClientAliveInterval 0
UseDNS yes
限制可登入使用者的辦法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroup
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、做好日誌,經常分析
示例:設定可登入使用者白名單;編輯配置檔案]# vim /etc/ssh/sshd_config.新增白名單資訊;

使用者登入資訊獲取:

/var/log/wtmp:使用者成功登入的日誌資訊
]# last
/var/log/btmp:使用者登入嘗試失敗的日誌資訊
]# lastb

lastlog:每個使用者最近一次成功登入的資訊
scp命令
scp [options] SRC… DEST/
兩種方式:
scp [options] [[email protected]]host:/sourcefile /destpath
scp [options] /sourcefile [[email protected]]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 存檔模式,相當於 –rlptgoD,但不保留ACL( -A)和SELinux屬性(-X)
sftp命令:基於ssh的ftp協議
互動式檔案傳輸工具
用法能和傳統的ftp工具相似
利用ssh服務實現安全的檔案上傳和下載
使用ls cd mkdir rmdir pwd get put等指令,可用?獲取幫助資訊。
sftp [[email protected]]host
sftp> help
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檔案系統、使用者起始目錄以及臨時目錄.

如何使用AIDE:
安裝AIDE
yum install aide
修改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 –up
切換身份
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、授權規則:必須的
授權規則格式:
使用者 登入主機=(代表使用者) 命令
示例:
root ALL=(ALL) ALL
格式說明:
user: 執行命令者的身份
host: 通過哪些主機
(runas):以哪個使用者的身份
command: 執行哪些命
別名:
Users和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
sudo別名和示例
別名有四種類型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias
別名格式: A-Z*
別名定義:
Alias_Type NAME = item1, item2, item3 : NAME =item4, item5
示例1:
Student ALL=(ALL) ALL
%wheel 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/userd
示例5
Defaults:wang runas_default=tom
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*
命令語法選項:

ls -l /usr/bin/sudo

sudo –i –u wang 切換身份
sudo [-u user] COMMAND
-V 顯示版本資訊等配置資訊
-u user 預設為root
-l,ll 列出使用者在主機上可用的和被禁止的命令
-v 再延長密碼有效期限5分鐘,更新時間戳
-k 清除時間戳,下次需要重新輸密碼
-K 與-k類似,還要刪除時間戳檔案
-b 在後臺執行指令
-p 改變詢問密碼的提示符號
如 -p ”password on %h for user %p”