本章內容
• 安全機制
• 對稱和非對稱加密
• 散列算法
• gpg • PKI和CA
• openssl
• 證書管理
• ssh服務和dropbear
• aide
• Sudo
• TCP Wrappers
安全機制
•安全機制 :加密、數字簽名、訪問控制、數據完整性、認證交換、流量填充、路由控制、公證
•安全服務:
認證
訪問控制
數據保密性
連接保密性
無連接保密性
選擇域保密性
流量保密性
數據完整性
不可否認性
對稱和非對稱加密
對稱加密:加密和解密使用同一個密鑰,依賴於算法和密鑰,但其安全性依賴於密鑰而非算法:
常見的算法 DES:3DES AES IDEA RC6 CAST5 Blowfish
非對稱加密:採用的是公鑰加密算法,當然還需要另一個密鑰解密,這個密鑰成爲私鑰,兩者統稱爲密鑰對兒。
私鑰:secret key,僅允許個人使用
公鑰:pubilc key,公開給所有人獲取
公鑰是從私鑰中提取而來的;使用公鑰加密的數據,只能使用於此公鑰配對兒的私鑰解密,反之亦然。
用處:
(1),身份認證:私鑰擁有者用自己的私鑰加密的數據,只要用其公鑰能解密,即可認證其身份;
(2),密鑰交換:與被通信方通信之前,首先獲取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,併發送給對方;
(3),數據加密:
算法: RSA(加密,數字簽名) DSA(數字簽名) ELGamal
散列算法
單向散列
• 任意長度輸入
• 固定長度輸出
• 功能:數據完整性
• 常見算式 md5: 128bits 、 sha1: 160bits 、 sha224 sha256 、 sha384 、 sha512
• 常用工具
• md5sum | sha1sum [ --check ] file
• openssl、gpg
• rpm -V
(在linux系統上常用的加密工具有兩個:openssl 和gpg,pgp是一個協議,而gpg是實現這個協議的一個軟件,因此說gpg是pgp的實現)
密鑰交換:
雙方通過交換密鑰數據加密解密;密鑰交換有兩種:
公鑰加密:將公鑰加密後通過網絡傳輸到對方進行解密,這種方式還有很大可能被截取破解,不常用;
DH:雙方共有一些參數,共同協商加密算法,除此之外雙方還有屬於自己的私有參數,通過共有的參數,私有參數和算法信息來進行加密,然後雙方將計算後的結果進行交換,交換完成後再和屬於自己私有參數進行特殊算法,經過雙方計算後的結果是相同的,而這個結果就是密鑰
如:
A有p和g兩個參數,A還有一個屬於自己的私有參數x;
B有p和g兩個參數,B還有一個屬於自己的私有參數y;
A和B有相同的加密算法即
A:p^X%G
B:p^Y%G
然後上方交換計算後的結果,此時A拿到B的P^Y%G,B拿到A的P^X%G,雙方再和自己的私有參數進行相同的算法,即:A;對P^Y%G,再求X次方(P^X%G)^X=P^XY%G B:(P^X%G)再求Y次方得(P^X%G)^y=P^XY%G 最後A和B的結果是一樣的
注意:整個過程中對於第三方人員來說只能獲取p,g兩個值,AB雙方交換的是經過計算後的值,因此這種加密方式是很安全的。
一次加密通信過程
發送者:
1,使用單向加密算法提取生成數據的特徵碼;
2,使用自己的私鑰加密特徵碼附加在數據後面;
3,生成用於對稱加密的臨時密鑰;
4,用此臨時密鑰加密數據和已經使用私鑰加密後的特徵碼;
5,使用接收方的公鑰加密此臨時密鑰;附加在對稱加密後的數據後方;
接收方:
1,使用自己的私鑰解密加密的臨時密鑰;從而獲得對稱密鑰;
2,使用對稱密鑰解密對稱加密的數據和私鑰加密的特徵密文;從而獲得數據和特徵密文;
3,使用發送方的公鑰解密特徵碼密文,從而獲得從計算機生成的特徵碼;
4,使用與對方同樣的單向加密算法計算數據的特徵碼,並與解密而來的進行比較;
數字證書
在雙方通訊過程中,數據的加密解密依賴於對方的公鑰,因此就需要一種可靠機制能夠保證公鑰數據的安全性,這種機制就是CA,CA是一個證書頒發機構,這個機構負責證書的頒發,誰需要就去CA購買,買完之去後驗證證書就可以了。那麼我們如何知道或確定一個證書就是正規的CA頒發的呢?
我們來捋一捋:A要給B進行通信,A將自己的公鑰發給了B,那B就需要知道A發過來的公鑰是否爲正規的CA頒發的,A在獲得CA給其頒發的證書時會在證書上面蓋一個戳,那因此我們就需要通過驗證戳的真實性來驗證A的公鑰的合法性,所以上面的關鍵所在就是驗證CA所蓋的戳了,那怎麼驗證呢?解鈴還須繫鈴人,我們可以通過驗證CA自身的證書就可以了,那CA 的證書又是從哪裏獲得呢?答:從操作系統上獲得的,也就是系統發行商會把這些CA證書做進操作系統裏,在需要時可以直接進行比對,如果操作系統中沒有固話的這些CA證書,那麼就可以說該CA證書是不合法的。
CA只是PKI的一個組成部分,PKI包括:
簽證機構:CA,相當於我們辦理×××時的公安局(真正頒發證件的機構)
註冊機構:RA,相當於我們辦理×××時的派出所(幫你拍照信息錄入的機構)
證書吊銷列表:CRL,相當於我們證件丟失時掛失的內容
證書存取庫:當別人去請求認證時的資料庫
證書通常有兩類用途:用戶證書和主機證書(入httpd)
數字證書的獲取
獲取證書的方法有兩種:向RA註冊申請,或者自己建立私有CA,向RA註冊申請CA是需要花錢購買的通常用於企業生產環境當中,以滿足業務的需求;但有時我們僅僅是用於企業內部自身使用或者個人測試使用,因此我們沒有必要花錢購買CA證書,而OpenSSL工具以滿足我們創建私有CA的需求。
使用OpenSSL構建私有CA的步驟:
1,生成私鑰
2,生成自簽署證書;
1)私鑰用於簽發證書時,向證書添加數字簽名的使用;
2)證書:每個通信方都導入此證書至“受信任的證書頒發機構”;
涉及的配置文件: /etc/pki/tls/openssl.cnf
工作目錄:/etc/pki/CA
建立私有CA
1,生成私鑰文件:/etc/pki/CA/private/cakey.pem 絕對路徑
#(umask 066:openssl genrsa-out /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 )
2生成自簽證書
#openssl req -new -x509 -key /etc/pki/CA/pri/vate/cakey.pem -out/etc/pki/CA/cacert.pem -days 365
其中:
-new:生成新的證書籤署請求;
-key:私鑰文件路徑,用於提取公鑰;
-days N:證書有效時長,單位爲“天”;
-out:輸出文件保存位置;
-x509:直接輸出自簽署的證書文件,通常只有構建CA時才這麼有用;
3,提供輔助文件
# touch /etc/pki/CA/index.txt
#echo 01>/etc/pki/CA/serial
給節點頒發證書
1,節點申請證書
在證書申請的主機上進行如下步驟:
(1)生成私鑰;
(2)生成證書籤署請求;
注意:
(a)其中的subject信息部分,要與CA的保持一致;
(b)Common Name要使用此主機在通信真實使用名字;
(3)把請求發送給CA
2,CA簽發證書
(1)驗證請求者信息
(2)簽署證書;
#openssl ca -in /PATH/FORM/CSR_FILE-out /PATH/TO/CAR_FILE -days N
(3)把簽署好的證書發送給請求者。
吊銷證書;
1,獲取吊銷證書的序列號;
#openssl x509 -in /PATH/FROM/CRT_FILE-noout-serial -subjiect
2實現證書吊銷
(1)吊銷證書
#openssl ca -revoke /PATH/FROM/CRT_FILE
(2)生成吊銷證書的編號
#echo 01>/etc/pkie/CA/crlnumber
(3)更新證書吊銷列表
#openssl crl -gencrl -out THISCA.crl
實驗一:CA中心部署(以centos7作爲根CA,centos6作爲子CA,centos5作爲app)
根ca
cd /etc/pki/CA/ 進入工作目錄
接着提供輔助文件
touch index.txt 建立數據庫
echo 00 > serial 生成序列號
(umask 066;openssl genrsa -out private/cakey.pem -des3 2048) 生成私鑰 (橙色陰影中-des3意思就是用des3加密一下,執行後的結果配口令)
ls private/ 可以查看一下私鑰文件,此步驟非必須
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300 私鑰中提取公鑰(申請證書) *橙色陰影裏寫的是相對路徑
-key 後跟私鑰文件路徑,用於提取公鑰 -out 後接文件:輸出指定文件名,-out /etc/pki/CA/cacert.pem 就是輸出文件保存位置,並指定文件名。
**
sz cacert .pem 拷到物理機上
到 此 CA 就 創 建 好 了
繼續
子ca
cd /etc/pki/CA/
touch index.txt
echo 00 > serial
(umask 066;openssl genrsa -out private/cakey.pem -des3 2048) 服務商生成的私鑰
openssl req -new -key private/cakey.pem -out subca.csr 生成請求文件 (找CA中心申請)
scp subca.csr [email protected]:/etc/pki/CA 複製到那邊(根ca)去,請求文件發給CA
scp /文件路徑、文件 用戶名@ip地址 :/ /
根ca
openssl ca -in subca.csr -out certs/subca.crt -days 3650 簽署,CA中心簽名
scp certs/subca.crt [email protected]:/etc/pki/CA/cacert.pem 複製到子ca那裏
再 yes一下
app(centos5)
(umask 066;openssl genrsa -out rhel5.key 1024) 生成私鑰
openssl req -new -key rhel5.key -out rhel5.csr 生成請求文件 生成請求文件以.csr結尾
scp rhel5.csr [email protected]:/etc/pki/CA
子ca
openssl ca -in rhel5.csr -out certs/rhel5.crt -days 365 籤一下
scp certs/rhel5.crt [email protected]:/root
SSH
• ssh: secure shell, protocol, 22/tcp, 安全的遠程登錄
• 具體的軟件實現:
OpenSSH: ssh協議的開源實現,CentOS默認安裝
dropbear:另一個開源實現
• SSH協議版本
v1: 基於CRC-32做MAC,不安全;man-in-middle
v2:雙方主機協議選擇安全的MAC方式 基於DH算法做密鑰交換,基於RSA或DSA實現身份認證
• 兩種方式的用戶登錄認證: 基於password 基於key
Openssh軟件組成
• OpenSSH介紹
• 相關包: openssh openssh-clients openssh-server
• 工具: 基於C/S結構 Client: ssh, scp, sftp,slogin
Windows客戶端: xshell, putty, securecrt, sshsecureshellclient
Server: sshd
ssh客戶端
• 客戶端組件:
• ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登錄不顯示檢查提示
• 格式:
ssh [user@]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 連接remoteserver2通過連接remoteserver1實現,比如A要和C連接,則A連接B,B連接C
ssh客戶端
• 允許實現對遠程系統經驗證地加密安全訪問
• 當用戶遠程連接ssh服務器時,會複製ssh服務器/etc/ssh/ssh_host*key.pub(CentOS7默認是 ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的~./ssh/know_hosts中。下次連接時,會自動 匹配相應私鑰,不能匹配,將拒絕連接
ssh服務登錄驗證
• ssh服務登錄驗證方式: 用戶/口令 基於密鑰
• 基於用戶和口令登錄驗證
– 1 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
– 2 用戶會根據服務器發來的公鑰對密碼進行加密
– 3 加密後的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確 ,則用戶登錄成功
ssh服務登錄驗證
• 基於密鑰的登錄方式
– 1 首先在客戶端生成一對密鑰(ssh-keygen)
– 2 並將客戶端的公鑰ssh-copy-id 拷貝到服務端
– 3 當客戶端再次發送一個連接請求,包括ip、用戶名
– 4 服務端得到客戶端的請求後,會到authorized_keys中查找,如果有響應的IP和用戶,就會 隨機生成一個字符串,例如:acdf
– 5 服務端將使用客戶端拷貝過來的公鑰進行加密,然後發送給客戶端
– 6 得到服務端發來的消息後,客戶端會使用私鑰進行解密,然後將解密後的字符串發送給服務端
– 7服務端接受到客戶端發來的字符串後,跟之前的字符串進行對比,如果一致,就允許免密碼登錄
基於key認證
• 基於密鑰的認證:
• (1) 在客戶端生成密鑰對 ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
• (2) 把公鑰文件傳輸至遠程服務器對應用戶的家目錄 ssh-copy-id [-i [identity_file]] [user@]host
• (3) 測試
• (4) 在SecureCRT或Xshell實現基於key驗證 在SecureCRT工具—>創建公鑰—>生成Identity.pub文件 轉化爲openssh兼容格式(適合SecureCRT,Xshell不需要轉化格式),並複製到需登錄主機上相應文件 authorized_keys中,注意權限必須爲600,在需登錄的ssh主機上執行: ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
• (5)重設私鑰口令: ssh-keygen –p
• (6)驗證代理(authentication agent)保密解密後的密鑰
• 這樣口令就只需要輸入一次
• 在GNOME中,代理被自動提供給root用戶
• 否則運行ssh-agent bash
• (7)鑰匙通過命令添加給代理 ssh-add
scp命令
• 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 存檔,相當於–rlptgoD,但不保留ACL(-A)和SELinux屬性( - X )
例如 把6上的magescp.txt文件拷貝到7的root下 rsync -選項(看想保留什麼權限) magescp.txt root @c7:/root/
rsync可以保證兩個文件同步
sftp命令
• 交互式文件傳輸工具
• 用法和傳統的ftp工具相似
• sftp user@ip地址 利用ssh服務實現安全的文件上傳和下載
• 使用ls cd mkdir rmdir pwd get put等指令,可用?或help獲取幫助信息 sftp [user@]host sftp> help
PSSH
批量操作工具
用法:PSSH [選項]命令[…]
-h 執行命令的遠程主機列表,文件內容格式[user@]host[:port]
-H 執行命令主機,主機格式 user@ip:port
-l 遠程機器的用戶名
-p 一次最大允許多少連接
-P 執行時輸出執行信息
-o 輸出內容重定向到一個文件
-e 執行錯誤重定向到一個文件
-t 設置命令執行超時時間
-A 提示輸入密碼並且把密碼傳遞給ssh(如果私鑰也有密碼也用這個參數)
-O 設置ssh一些選項
-x 設置ssh額外的一些參數,可以多個,不同參數間空格分開
-X 同-x,但是隻能設置一個參數
-i 顯示標準輸出和標準錯誤在每臺host執行完畢後其他工具
pssh -h host.txt -l root -o /tmp/uptime uptime 在host.txt中列出的服務器上,遠程執行uptime命令,並將執行結果輸出到/tmp/uptime目錄下
其中相關參數說明
-h host.txt 指定服務器列表host.txt文件
-root 指定遠程用戶爲root
-o /tmp/uptime 指定遠程命令執行結果輸入到/tmp/uptime目錄下
uptime指定遠程執行命令
PSCP把文件並行的複製到多個主機上,注意是從服務器端給客戶端送文件
pscp的使用參數大多和pssh一致
基本使用方法
pscp -h ip文件 本地文件 遠程目錄
舉例:將本機的/tmp/i.txt文件複製到host.txt列出的主機上的/tmp目錄
pscp -h host.txt -l root /tmp/i.txt/tmp
SSH端口轉發
• SSH端口轉發 SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。但是, SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發,並且自動提 供了相應的加密及解密服務。這一過程也被叫做“隧道”(tunneling),這 是因爲 SSH 爲其他 TCP 鏈接提供了一個安全的通道來進行傳輸而得名。例 如,Telnet,SMTP,LDAP 這些 TCP 應用均能夠從中得益,避免了用戶名, 密碼以及隱私信息的明文傳輸。而與此同時,如果工作環境中的防火牆限制 了一些網絡端口的使用,但是允許 SSH 的連接,也能夠通過將 TCP 端口轉 發來使用 SSH 進行通訊
• SSH 端口轉發能夠提供兩大功能:
• 加密 SSH Client 端至 SSH Server 端之間的通訊數據
•突破防火牆的限制完成一些之前無法建立的 TCP 連接
SSH端口轉發
• 本地轉發:
-L localport:remotehost:remotehostport sshserver
• 選項:
-N 是不執行遠端命令,在只是端口轉發時這條命令很有用處
-C是進行數據壓縮,
-f是後臺操作,只有當提示用戶名密碼的時候才轉向前臺。
-g啓用網關功能 是允許遠端主機連接本地轉發端口。
-R表明是將遠端主機端口映射到本地端口。
-L,則是將本地端口映射到遠端主機端口
• 示例 ssh –L 9527:telnetsrv:23 -N sshsrv telnet 127.0.0.1 9527 當訪問本機的9527的端口時,被加密後轉發到sshsrv的ssh服務,再解密被轉發到telnetsrv:23 data localhost:9527 localhost:XXXXX sshsrv:22 sshsrv:YYYYY telnetsrv:23
本地端口轉發圖
假定host1是本地主機,host2是遠程主機。由於種種原因,這兩臺主機之間無法連通。但是,另外還有一臺host3,可以同時連通前面兩臺主機。因此,很自然的想法就是,通過host3,將host1連上host2。
ssh -L 2121:host2:21 host3 host3是踏板地址,host2是服務器地址,2121是本地端口
命令中的L參數一共接受三個值,分別是"本地端口(2121):目標主機:目標主機端口(21)",它們之間用冒號分隔。這條命令的意思,就是指定SSH綁定本地端口2121,然後指定host3將所有的數據,轉發到目標主機host2的21端口(假定host2運行FTP,默認端口爲21)。
這樣一來,我們只要連接host1的2121端口,就等於連上了host2的21端口。
"本地端口轉發"使得host1和host3之間彷彿形成一個數據傳輸的祕密隧道,因此又被稱爲"SSH隧道"。
: centos5 centos6 centos7 :
• 遠程轉發:
-R sshserverport:remotehost:remotehostport sshserver
• 示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
讓sshsrv偵聽9527端口的訪問,如有訪問,就加密後通過ssh服務轉發請求到本
機ssh客戶端,再由本機解密後轉發到telnetsrv:23
Data sshsrv:9527 sshsrv:22 localhost:XXXXX
localhost:YYYYY telnetsrv:23
遠程端口轉發圖
遠程端口轉發實驗
實驗2:smtp(郵件)轉發 c6:[root@centos6(nanyibo) ~]# ssh -R 9527:192.168.190.7:25 -fN 192.168.190.5 c5:telnet 127.0.0.1 9527 mail from:[email protected] rctp to:[email protected] data hello world . quit
接着在踏板機上(centos6)
centos5 telnet 127.0.0.1 9527
centos7 mail 一下接一下郵件
• 動態端口轉發:
• 當用firefox訪問internet時,本機的1080端口做爲代理服務器,firefox的訪問請求被轉發到 sshserver上,由sshserver替之訪問internet 在本機firefox設置代理socket proxy:127.0.0.1:1080 ssh -D 1080 root@sshserver
科學上網實驗圖(動態端口轉發圖)
centos7上搭一個網橋
yum -y install httpd
cd /var/www/html/
vim index.html
X 協議轉發
• 所有圖形化應用程序都是X客戶程序
• 能夠通過tcp/ip連接遠程X服務器 • 數據沒有加密機,但是它通過ssh連接隧道安全進行
• ssh -X user@remotehost gedit remotehost主機上的gedit工具,將會顯示在本機的X服務器上 傳輸的數據將通過ssh連接加密
ssh服務器
• 服務器端:
sshd, 配置文件: /etc/ssh/sshd_config
• 常用參數:
– Port – ListenAddress ip
– LoginGraceTime 2m
– PermitRootLogin yes
– StrictModes yes
– MaxAuthTries 6
– MaxSessions 10 同一個連接最大會話
– PubkeyAuthentication yes
– PermitEmptyPasswords no
– PasswordAuthentication yes
• GatewayPorts no
• ClientAliveInterval (單位 : 秒 )
• ClientAliveCountMax (默認 3 )
• UseDNS yes
• GSSAPIAuthentication yes 提高速度可改爲no
• MaxStartups 未認證連接最大值,默認值10
• Banner /path/file
• 限制可登錄用戶的辦法: AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups
ssh服務的最佳實踐
• 要使用默認端口
• 禁止使用protocol version 1
• 限制可登錄用戶
• 設定空閒會話超時時長
• 利用防火牆設置ssh訪問策略
• 僅監聽特定的IP地址
• 基於口令認證時,使用強密碼策略 tr -dc A -Za -z0 -9_ < /dev/urandom | head -c 30| xargs
• 使用基於密鑰的認證
• 禁止使用空密碼
• 禁止root用戶直接登錄
• 限制ssh的訪問頻度和併發在線數
• 做好日誌,經常分析
編譯安裝dropbear示例
• ssh協議的另一個實現:dropbear
• 安裝準備:
• 1、安裝開發包組:
• 2、下載dropbear-2017.75.tar.bz2
• 3、tar xf dropbear-2017.75.tar.bz2
• 4、less INSTALL README
• 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 [email protected]
• 15、dbclient -p 2222 [email protected]
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 • 來自sudo包 • man 5 sudoers
• sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使用 sudo,會提示 聯繫管理員
• sudo可以提供日誌,記錄每個用戶使用sudo操作 • sudo爲系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機
• sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期爲5分鐘的“入場券”
• 通過visudo命令編輯配置文件,具有語法檢查功能 visudo –c 檢查語法
• 配置文件: /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: 運行哪些命令
• 別名有四種類型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
• 別名格式:[A-Z]([A-Z][0-9]_)*
• 別名定義: Alias_Type NAME1 = item1, item2, item3 : NAME2 = 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 [azA-Z]*,
!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
• 示例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/messages*
sudo命令
• ls -l /usr/bin/sudo
• sudo –i –u wang 切換身份
• sudo [-u user] COMMAND
-V 顯示版本信息等配置信息
-u user 默認爲root -l,
ll 列出用戶在主機上可用的和被禁止的命令
-v 再延長密碼有效期限5分鐘,更新時間戳
-k 清除時間戳(1970-01-01),下次需要重新輸密碼
-K 與-k類似,還要刪除時間戳文件
-b 在後臺執行指令
-p 改變詢問密碼的提示符號
示例:-p ”password on %h for user %p:"
TCP_Wrappers
• 配置文件:/etc/hosts.allow, /etc/hosts.deny
• 幫助參考:man 5 hosts_access,man 5 hosts_options
• 檢查順序:hosts.allow,hosts.deny(默認允許) 注意:一旦前面規則匹配,直接生效,將不再繼續
• 基本語法: – daemon_list@host: client_list [ :options :option… ]
• Daemon_list@host格式
– 單個應用程序的二進制文件名,而非服務名,例如vsftpd
– 以逗號或空格分隔的應用程序文件名列表,如:sshd,vsftpd
– ALL表示所有接受tcp_wrapper控制的服務程序
– 主機有多個IP,可用@hostIP來實現控制
• 客戶端Client_list格式
– 以逗號或空格分隔的客戶端列表
– 基於IP地址:192.168.10.1 192.168.1.
– 基於主機名:www.magedu.com .magedu.com 較少用
– 基於網絡/掩碼:192.168.0.0/255.255.255.0
– 基於net/prefixlen: 192.168.1.0/24(CentOS7)
– 基於網絡組(NIS 域):@mynetwork
– 內置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
• [:options]選項:
• 幫助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定義“拒絕”規則 如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定義“允許”規則 如:vsftpd:172.16. :allow
spawn 啓動一個外部程序完成執行的操作
twist 實際動作是拒絕訪問,使用指定的操作替換當前服務,標準I/O和 ERROR發送到客戶端,默認至/dev/null
• 測試工具:
tcpdmatch [-d] daemon[@host] client
-d 測試當前目錄下的hosts.allow和hosts.deny
示例
• sshd: ALL :spawn echo "$(date) login attempt from %c to %s,%d" >>/var/log/sshd.log
• 說明:
– 在/etc/hosts.allow中添加,允許登錄,並記錄日誌
– 在/etc/hosts.deny中添加,拒絕登錄,並記錄日誌
– %c 客戶端信息
– %s 服務器端信息
– %d 服務名
– %p 守護進程的PID
• vsftpd: 172.16. :twist /bin/echo “connection prohibited”