Linux應用-加密和安全

加密和安全

一、安全機制

1. 墨菲定律

墨菲定律:一種心理學效應,是由愛德華·墨菲(Edward A. Murphy)提出的,
		原話:如果有兩種或兩種以上的方式去做某件事情,而其中一種選擇方式將導致災難
		則必定有人會做出這種選擇
		
主要內容:
1.任何事都沒有表面看起來那麼簡單
2.所有的事都會比你預計的時間長
3.會出錯的事總會出錯
4.如果你擔心某種情況發生,那麼它就更有可能發生

2. 安全機制

1.信息安全防護的目標
	保密性		Confidentiality
	完整性		Integrity
	可用性		Usability
	可控制性		Controlability
	不可否認性	Non-repudiation

2.安全防護環節
	物理安全:各種設備/主機、機房環境
	系統安全:主機或設備的操作系統
	應用安全:各種網絡服務、應用程序
	網絡安全:對網絡訪問的控制、防火牆規則
	數據安全:信息的備份與恢復、加密解密
	管理安全:各種保障性的規範、流程、方法
	
3.安全攻擊:
	STRIDESpoofing				假冒
	Tampering					篡改
	Repudiation					否認
	Information Disclosure		信息泄漏
	Denial of Service			拒絕服務
	Elevation of Privilege		提升權限

3. 安全設計基本原則

	1.使用成熟的安全系統
	2.以小人之心度輸入數據
	3.外部系統是不安全的
	4.最小授權
	5.減少外部接口
	6.缺省使用安全模式
	7.安全不是似是而非
	8.STRIDE思考
	9.在入口處檢查
	10.從管理上保護好你的系統

二、對稱和非對稱加密

1. 安全算法

1.常用安全技術
	認證
	授權
	審計
	安全通信

2.加密算法和協議
	對稱加密
	公鑰加密
	單向加密
	認證協議

2. 對稱加密算法

對稱加密:加密和解密使用同一個密鑰
	DES:Data Encryption Standard,56bits
	3DES:
	AES:Advanced (128, 192, 256bits)
	Blowfish,TwofishIDEA,RC6CAST5

特性:
	1、加密、解密使用同一個密鑰,效率高
	2、將原始數據分割成固定大小的塊,逐個進行加密

缺陷:
	1、密鑰過多
	2、密鑰分發
	3、數據來源無法確認

3. 非對稱加密算法

1.公鑰加密:密鑰是成對出現
	公鑰:公開給所有人;public key
	私鑰:自己留存,必須保證其私密性;secret key
2.特點:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然
3.功能:
	數字簽名:主要在於讓接收方確認發送方身份
	對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰後發送給對方
	數據加密:適合加密較小數據
4.缺點:密鑰長,加密解密效率低下
5.算法:
	RSA(加密,數字簽名)
	DSA(數字簽名)
	ELGamal

6.基於一對公鑰/密鑰對
	用密鑰對中的一個加密,另一個解密
	
7.實現加密:
	接收者
		生成公鑰/密鑰對:PS
		公開公鑰P,保密密鑰S
	發送者
		使用接收者的公鑰來加密消息MP(M)發送給接收者
	接收者
		使用密鑰S來解密:M=S(P(M))
		
8.實現數字簽名:
	發送者
		生成公鑰/密鑰對:PS
		公開公鑰P,保密密鑰S
		使用密鑰S來加密消息M
		發送給接收者S(M)
	接收者
		使用發送者的公鑰來解密M=P(S(M))
		
9.結合簽名和加密
10.分離簽名

數字簽名
在這裏插入圖片描述

4. RSA和DSA

1.RSA:公鑰加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在
(美國麻省理工學院)開發的,RSA取名來自開發他們三者的名字,後成立RSA
數據安全有限公司。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目
前爲止已知的所有密碼攻擊,已被ISO推薦爲公鑰數據加密標準。RSA算法基於
一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積
進行因式分解卻極其困難,因此可以將乘積公開作爲加密密鑰

2.DSA (Digital Signature Algorithm)1991726日提交,並歸屬於David
W. Kravitz前NSA員工,DSA是Schnorr和ElGamal簽名算法的變種,被美國
NIST作爲SS(DigitalSignature Standard)DSA是基於整數有限域離散對數難
題的,其安全性與RSA相比差不多。DSA只是一種算法,和RSA不同之處在於
它不能用作加密和解密,也不能進行密鑰交換,只用於簽名,它比RSA要快很多

三、散列算法

1. 單向散列

1.將任意數據縮小成固定大小的“指紋”
	• 任意長度輸入
	• 固定長度輸出
	• 若修改數據,指紋也會改變(“不會產生衝突”)
	• 無法從指紋中重新生成數據(“單向”)
2.功能:數據完整性
3.常見算法
	md5: 128bits、sha1: 160bits、sha224、sha256、sha384、sha512
4.常用工具
	• md5sum | sha1sum [ --check ] file
	• openssl、gpg
	• rpm -V

2. 應用程序:RPM

1.文件完整性的兩種實施方式
2.被安裝的文件
	• MD5單向散列
	• rpm --verify package_name (or -V)
3.發行的軟件包文件
	• GPG公鑰簽名
	• rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
	• rpm --checksig pakage_file_name (or -K)

3. 密鑰交換

密鑰交換:IKE( Internet Key Exchange )
	公鑰加密:
	DH (Deffie-Hellman):生成會話密鑰,由惠特菲爾德·迪菲(Bailey
Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表
參看:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

DH:
第一步:
 A: g,p 協商生成公開的整數g, 大素數p
 B: g,p
第二步:
 A:生成隱私數據 :a (a<p ),計算得出 g^a%p,發送給B
 B:生成隱私數據 :b,計算得出 g^b%p,發送給A
第三步: 
 A:計算得出 [(g^b%p)^a] %p = g^ab%p,生成爲密鑰
 B:計算得出 [(g^a%p)^b] %p = g^ab%p,生成爲密鑰

四、gpg

1. 使用gpg實現對稱加密

1.對稱加密file文件
	gpg -c file
	ls file.gpg
2.在另一臺主機上解密file
	gpg -o file -d file.gpg

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

1.在hostB主機上用公鑰加密,在hostA主機上解密
2.在hostA主機上生成公鑰/私鑰對
	gpg --gen-key
3.在hostA主機上查看公鑰
	gpg --list-keys
4.在hostA主機上導出公鑰到wang.pubkey
	gpg -a --export -o wang.pubkey
5.從hostA主機上覆制公鑰文件到需加密的B主機上
	scp wang.pubkey hostB:
6.在需加密數據的hostB主機上生成公鑰/私鑰對
	gpg --list-keys
	gpg --gen-key
7.在hostB主機上導入公鑰
	gpg --import wang.pubkey
	gpg --list-keys
8.用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg
	gpg -e -r wangxiaochun file
	file file.gpg
9.複製加密文件到hostA主機
	scp fstab.gpg hostA:
10.在hostA主機解密文件
	gpg -d file.gpg
	gpg -o file -d file.gpg
11.刪除公鑰和私鑰
	gpg --delete-keys wangxiaochun
	gpg --delete-secret-keys wangxiaochun

3. 中間人攻擊

在這裏插入圖片描述

五、PKI和CA

1. CA和證書

1.PKI:Public Key Infrastructure
	簽證機構:CA(Certificate Authority)
	註冊機構:RA
	證書吊銷列表:CRL
	證書存取庫:
2.X.509:定義了證書的結構以及認證協議標準
	版本號
	序列號
	簽名算法
	頒發者
	有效期限
	主體名稱
	主體公鑰
	CRL分發點
	擴展信息
	發行者簽名

2. 證書獲取

1.證書類型:
	證書授權機構的證書
	服務器
	用戶證書
2.獲取證書兩種方法:
	使用證書授權機構
		生成證書請求(csr)
		將證書請求csr發送給CA
		CA簽名頒發證書
	自簽名的證書
		自已簽發自己的公鑰

3. 安全協議

1.SSL:Secure Socket Layer,TLS: Transport Layer Security
	1995SSL 2.0 Netscape
	1996SSL 3.0
	1999TLS 1.0
	2006TLS 1.1 IETF(Internet工程任務組) RFC 4346
	2008TLS 1.2 當前使用
	2015TLS 1.3
	功能:機密性,認證,完整性,重放保護
2.兩階段協議,分爲握手階段和應用階段
	握手階段(協商階段):客戶端和服務器端認證對方身份(依賴於PKI體系,利用數字
證書進行身份認證),並協商通信中使用的安全參數、密碼套件以及主密鑰。後續通信使
用的所有密鑰都是通過MasterSecret生成
	應用階段:在握手階段完成後進入,在應用階段通信雙方使用握手階段協商好的密
鑰進行安全通信

4. SSL/TLS

1.Handshake協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身
  份認證可選)、密鑰交換
2.ChangeCipherSpec 協議:一條消息表明握手協議已經完成
3.Alert 協議:對握手協議中一些異常的錯誤提醒,分爲fatal和warning兩個級別,
  fatal類型錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接仍可繼續,
  只是會給出錯誤警告
4.Record 協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等
5.HTTPS 協議:就是“HTTP 協議”和“SSL/TLS 協議”的組合。HTTP over
  SSL”或“HTTP over TLS”,對http協議的文本數據進行加密處理後,成爲二
  進制形式傳輸

在這裏插入圖片描述

5. HTTPS

HTTPS結構
在這裏插入圖片描述

HTTPS工作過程
在這裏插入圖片描述

六、openssl

1. OpenSSL

1.OpenSSL:開源項目
	三個組件:
		openssl:多用途的命令行工具,包openssl
		libcrypto:加密算法庫,包openssl-libs
		libssl:加密模塊應用庫,實現了ssl及tls,包nss
		
2.openssl命令:
	兩種運行模式:交互模式和批處理模式
	openssl version:程序版本號
	標準命令、消息摘要命令、加密命令
		標準命令:enc, ca, req, ...

3.對稱加密:
	工具:openssl enc, gpg
	算法:3des, aes, blowfish, twofish
	
4.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
		openssl ?

5.單向加密:
	工具:md5sum, sha1sum, sha224sum,sha256sum…
		openssl dgst
		
6.dgst命令:
	幫助:man dgst
	openssl dgst -md5 [-hex默認] /PATH/SOMEFILE
	openssl dgst -md5 testfile
	md5sum /PATH/TO/SOMEFILE
		
7.MAC: Message Authentication Code,單向加密的一種延伸應用,用於實現
網絡通信中保證所傳輸數據的完整性機制
	CBC-MAC
	HMAC:使用md5或sha1算法

8.生成用戶密碼:
	passwd命令:
	幫助:man sslpasswd
	openssl passwd -1 -salt SALT(最多8)
	openssl passwd -1 –salt centos
	
9.生成隨機數:
	幫助:man sslrand
	openssl rand -base64|-hex NUM
	NUM: 表示字節數,使用-hex,每個字符爲十六進制,相當於4位二進制,出現的字符數爲NUM*2

10.公鑰加密:
	算法:RSA, ELGamal
	工具:gpg, openssl rsautl(man rsautl)
	
11.數字簽名:
	算法:RSA, DSA, ELGamal
	
12.密鑰交換:
	算法:dh
	DSA:Digital Signature Algorithm
	DSS:Digital Signature Standard
	RSA13.生成密鑰對兒:man genrsa

14.生成私鑰
	openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
	(umask 077; openssl genrsa –out test.key –des 2048)
	openssl rsa -in test.key –out test2.key 將加密key解密
	
15.從私鑰中提取出公鑰
	openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
	openssl rsa –in test.key –pubout –out test.key.pub
	
16.隨機數生成器:僞隨機數字
	鍵盤和鼠標,塊設備中斷
	/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
	/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成僞隨機數,非阻塞

七、證書管理

詳細地址

八、ssh服務和dropbear

1. SSH

1.ssh: secure shell, protocol, 22/tcp, 安全的遠程登錄
2.具體的軟件實現:
	OpenSSH: ssh協議的開源實現,CentOS默認安裝
	dropbear:另一個開源實現
3.SSH協議版本
	v1: 基於CRC-32MAC,不安全;man-in-middle
	v2:雙方主機協議選擇安全的MAC方式
	基於DH算法做密鑰交換,基於RSADSA實現身份認證
4.兩種方式的用戶登錄認證:
	基於password
	基於key

2. Openssh軟件組成

1.OpenSSH介紹
2.相關包:
	openssh
	openssh-clients
	openssh-server
3.工具:
	基於C/S結構
	Linux Client: ssh, scp, sftp,slogin
	Windows Client:xshell, putty, securecrt, sshsecureshellclient
	Server: sshd

3. ssh客戶端

1.客戶端組件:
2.ssh, 配置文件:/etc/ssh/ssh_config
	Host PATTERN
		StrictHostKeyChecking no 首次登錄不顯示檢查提示
3.格式:ssh [user@]host [COMMAND]
	ssh [-l user] host [COMMAND]
4.常見選項
	-p port:遠程服務器監聽的端口
	-b:指定連接的源IP
	-v:調試模式
	-C:壓縮方式
	-X:支持x11轉發
	-t:強制僞tty分配
		ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3
5.允許實現對遠程系統經驗證地加密安全訪問
6.當用戶遠程連接ssh服務器時,會複製ssh服務器/etc/ssh/ssh_host*key.pub
 (CentOS7默認是ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的
  ~./ssh/know_hosts中。下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接

4. 公鑰交換

1.客戶端發起鏈接請求
2.服務端返回自己的公鑰,以及一個會話ID(這一步客戶端得到服務端公鑰)
3.客戶端生成密鑰對
4.客戶端用自己的公鑰異或會話ID,計算出一個值Res,並用服務端的公鑰加密
5.客戶端發送加密後的值到服務端,服務端用私鑰解密,得到Res
6.服務端用解密後的值Res異或會話ID,計算出客戶端的公鑰(這一步服務端得到客戶端公鑰)
7.最終:雙方各自持有三個祕鑰,分別爲自己的一對公、私鑰,以及對方的公鑰,
之後的所有通訊都會被加密

在這裏插入圖片描述

5. ssh加密通訊

在這裏插入圖片描述

6. ssh服務登錄驗證

1.ssh服務登錄驗證方式
	用戶/口令
	基於密鑰
2.基於用戶和口令登錄驗證
	1 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
	2 用戶會根據服務器發來的公鑰對密碼進行加密
	3 加密後的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功

基於用戶名口令登錄驗證
在這裏插入圖片描述

7. ssh服務基於密鑰登錄驗證

基於密鑰的登錄方式
	1 首先在客戶端生成一對密鑰(ssh-keygen)
	2 並將客戶端的公鑰ssh-copy-id 拷貝到服務端
	3 當客戶端再次發送一個連接請求,包括ip、用戶名
	4 服務端得到客戶端的請求後,會到authorized_keys中查找,如果有響應的IP和用戶,
	  就會隨機生成一個字符串,例如:magedu
	5 服務端將使用客戶端拷貝過來的公鑰進行加密,然後發送給客戶端
	6 得到服務端發來的消息後,客戶端會使用私鑰進行解密,然後將解密後的字符串發送給服務端
	7 服務端接受到客戶端發來的字符串後,跟之前的字符串進行對比,如果一致,
	  就允許免密碼登錄

在這裏插入圖片描述

1. 基於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

8. 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的監聽的端口

9. rsync命令

1.基於ssh和rsh服務實現高效率的遠程系統之間複製文件
2.使用安全的shell連接做爲傳輸方式
	rsync -av /etc server1:/tmp 複製目錄和目錄下文件
	rsync -av /etc/ server1:/tmp 只複製目錄下文件
3.比scp更快,只複製不同的文件
4.常用選項:
	-n 模擬複製過程
	-v 顯示詳細過程
	-r 遞歸複製目錄樹
	-p 保留權限
	-t 保留時間戳
	-g 保留組信息
	-o 保留所有者信息
	-l 將軟鏈接文件本身進行復制(默認)
	-L 將軟鏈接文件指向的文件複製
	-a 存檔,相當於–rlptgoD,但不保留ACL-A)和SELinux屬性(-X

10. sftp命令

交互式文件傳輸工具
用法和傳統的ftp工具相似
利用ssh服務實現安全的文件上傳和下載
使用ls cd mkdir rmdir pwd get put等指令,可用?或help獲取幫助信息
	sftp [user@]host
	sftp> help

11. SSH端口轉發

1.SSH端口轉發
	SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。但是,
SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發,並且自動提供了
相應的加密及解密服務。這一過程也被叫做“隧道”(tunneling),這是因爲
SSH 爲其他 TCP 鏈接提供了一個安全的通道來進行傳輸而得名。例如,Telnet,
SMTPLDAP 這些 TCP 應用均能夠從中得益,避免了用戶名,密碼以及隱私信
息的明文傳輸。而與此同時,如果工作環境中的防火牆限制了一些網絡端口的使
用,但是允許 SSH 的連接,也能夠通過將 TCP 端口轉發來使用 SSH 進行通訊

2.SSH 端口轉發能夠提供兩大功能:
	加密 SSH Client 端至 SSH Server 端之間的通訊數據
	突破防火牆的限制完成一些之前無法建立的 TCP 連接

3.本地轉發:
	-L localport:remotehost:remotehostport sshserver
4.選項:
	-f 後臺啓用
	-N 不打開遠程shell,處於等待狀態
	-g 啓用網關功能
5.示例
	ssh –L 9527:telnetsrv:23 -Nfg sshsrv
	telnet 127.0.0.1 9527
	當訪問本機的9527的端口時,被加密後轉發到sshsrv的ssh服務,再解密被轉
發到telnetsrv:23
	data < > localhost:9527 < > localhost:XXXXX < > sshsrv:22 < >
sshsrv:YYYYY < > telnetsrv:23

6.遠程轉發:
 	-R sshserverport:remotehost:remotehostport sshserver
7.示例:
	ssh –R 9527:telnetsrv:23 –Nf sshsrv
	讓sshsrv偵聽9527端口的訪問,如有訪問,就加密後通過ssh服務轉發請求
到本機ssh客戶端,再由本機解密後轉發到telnetsrv:23
	Data < > sshsrv:9527 < > sshsrv:22 < > localhost:XXXXX < >
localhost:YYYYY < > telnetsrv:23

8.動態端口轉發:
9.當用firefox訪問internet時,本機的1080端口做爲代理服務器,firefox的訪問
  請求被轉發到sshserver上,由sshserver替之訪問internet
	ssh -D 1080 root@sshserver -fNg
  在本機firefox設置代理socket proxy:127.0.0.1:1080
	curl --socks5 127.0.0.1:1080 http://www.google.com

12. X 協議轉發

1.所有圖形化應用程序都是X客戶程序
	能夠通過tcp/ip連接遠程X服務器
	數據沒有加密機,但是它通過ssh連接隧道安全進行
2.ssh -X user@remotehost gedit
	remotehost主機上的gedit工具,將會顯示在本機的X服務器上
	傳輸的數據將通過ssh連接加密

13. ssh服務器

服務器端:sshd, 配置文件: /etc/ssh/sshd_config
常用參數:
	Port
	ListenAddress ip
	LoginGraceTime 2m
	PermitRootLogin yes
	StrictModes yes 檢查.ssh/文件的所有者,權限等
	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服務的最佳實踐
	1.建議使用非默認端口
	2.禁止使用protocol version 1
	3.限制可登錄用戶
	4.設定空閒會話超時時長
	5.利用防火牆設置ssh訪問策略
	6.僅監聽特定的IP地址
	7.基於口令認證時,使用強密碼策略
	 	tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
	8.使用基於密鑰的認證
	9.禁止使用空密碼
	10.禁止root用戶直接登錄
	11.限制ssh的訪問頻度和併發在線數
	12.經常分析日誌

14. 編譯安裝dropbear示例

ssh協議的另一個實現:dropbear
源碼編譯安裝:
• 1、安裝相關包:yum install gcc
• 2、下載dropbear-2019.78.tar.bz2
• 3、tar xf dropbear-2019.78.tar.bz2
• 4、less INSTALL README5./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 204812、dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
• 13、dropbear -p :2222 -FE #前臺運行
	  dropbear -p :2222 #後臺運行

客戶端訪問:
• 14、ssh -p 2222 root@127.0.0.115、dbclient -p 2222 root@127.0.0.1

九、輕量級自動化運維工具

1. 輕量級自動化運維工具

1.pssh:基於python編寫,可在多臺服務器上執行命令的工具,也可實現文件復
制,提供了基於ssh和scp的多個並行工具
	 項目:http://code.google.com/p/parallel-ssh/
	 
2.pdsh:Parallel remote shell program,是一個多線程遠程shell客戶端,可以
並行執行多個遠程主機上的命令。 pdsh可以使用幾種不同的遠程shell服務,包
括標準的“rsh”,Kerberos IV和ssh
	 項目: https://pdsh.googlecode.com/
	 
3.mussh:Multihost SSH wrapper,是一個shell腳本,允許您使用一個命令在
多個主機上通過ssh執行命令或腳本。 mussh可使用ssh-agent和RSA / DSA密
鑰,以減少輸入密碼
	 項目:http://www.sourceforge.net/projects/mussh
	 
4.說明:以上工具都包含在EPEL源中

2. pssh工具

選項如下:
	 --version:查看版本
	 -h:主機文件列表,內容格式”[user@]host[:port]-H:主機字符串,內容格式”[user@]host[:port]-A:手動輸入密碼模式
	 -i:每個服務器內部處理信息輸出
	 -l:登錄使用的用戶名
	 -p:併發的線程數【可選】
	 -o:輸出的文件目錄【可選】
	 -e:錯誤輸出文件【可選】
	 -t:TIMEOUT 超時時間設置,0無限制【可選】
	 -OSSH的選項
	 -P:打印出服務器返回信息
	 -v:詳細模式
	 
1.通過pssh批量關閉seLinux
	pssh -H root@192.168.1.10 -i ‘sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config’
	
2.批量發送指令
	pssh -H root@192.168.1.10 -i setenforce 0
	pssh -H wang@192.168.1.10 -i hostname
	
3.當不支持ssh的key認證時,通過 -A選項,使用密碼認證批量執行指令
	pssh -H wang@192.168.1.10 -A -i hostname
	
4.將標準錯誤和標準正確重定向都保存至/app目錄下
	pssh -H 192.168.1.10 -o /app -e /app -i “hostname”

3. pscp.pssh命令

1.pscp.pssh功能是將本地文件批量複製到遠程主機

2.pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] 
[-p par] [-ooutdir] [-e errdir] [-t timeout] [-O options]
[-x args] [-X arg] local remote

3.pscp-pssh選項
	-v 顯示覆制過程
	-r 遞歸複製目錄
	
4.將本地curl.sh 複製到/app/目錄
	pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
	pscp.pssh -h host.txt /root/test/curl.sh /app/
	
5.將本地多個文件批量複製到/app/目錄
	pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/

6.將本地目錄批量複製到/app/目錄
	pscp.pssh -H 192.168.1.10 -r /root/test/ /app/

4. pslurp命令

1.pslurp功能是將遠程主機的文件批量複製到本地

2.pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] 
[-p par][-ooutdir] [-e errdir] [-t timeout] 
[-O options] [-x args] [-X arg] [-L localdir]
remote local(本地名)

3.pslurp選項
	-L 指定從遠程主機下載到本機的存儲的目錄,local是下載到本地後的名稱
	-r 遞歸複製目錄
	
4.批量下載目標服務器的passwd文件至/app下,並更名爲user
	pslurp -H 192.168.1.10 -L /app /etc/passwd user

十、AIDE

1. AIDE

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

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

3.AIDE能夠構造一個指定文件的數據庫,它使用aide.conf作爲其配置文件。
AIDE數據庫能夠保存文件的各種屬性,包括:權限(permission)索引節點序號(inodenumber)、所屬用戶(user)、所屬用戶組(group)文件大小、最後修改時間(mtime)、創建時間(ctime)、最後訪問時間(atime)、
增加的大小以及連接數。AIDE還能夠使用下列算法:sha1、md5、rmd160、tiger,
以密文形式建立每個文件的校驗碼或散列號

4.這個數據庫不應該保存那些經常變動的文件信息,例如:日誌文件、郵件、/proc文件系統、
用戶起始目錄以及臨時目錄

5.安裝
	yum install aide
6.修改配置文件
	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
7.初始化默認的AIDE的庫:
	/usr/local/bin/aide --init
8.生成檢查數據庫(建議初始數據庫存放到安全的地方)
	cd /var/lib/aide
	mv aide.db.new.gz aide.db.gz
9.檢測:
	/usr/local/bin/aide --check
10.更新數據庫
	aide --update

在這裏插入圖片描述

十一、Sudo

1. 更改身份

1.su 切換身份:su –l username –c ‘command’
2.sudo
	• 來自sudo包,man 5 sudoers
	• sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使
	  用 sudo,會提示聯繫管理員
	• sudo可以提供日誌,記錄每個用戶使用sudo操作
	• sudo爲系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權
	  限和使用的主機
	• sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期爲5分鐘的“入
	  場券”
	• 通過visudo命令編輯配置文件,具有語法檢查功能
		visudo -c 檢查語法
		visudo -f /etc/sudoers.d/test

2. sudo命令

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

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

3.日誌文件:/var/log/secure

4.配置文件支持使用通配符glob
	? 任意單一字符
	* 匹配任意長度字符
	[wxc] 匹配其中一個字符
	[!wxc] 除了這三個字符的其它字符
	\x 轉義
	[[alpha]] 字母 示例: /bin/ls [[alpha]]*
	
5.配置文件規則有兩類
	1、別名定義:不是必須的
	2、授權規則:必須的
	
6.ls -l /usr/bin/sudo

7.sudo –i –u wang 切換身份

8.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:

3. sudoers

1.授權規則格式:
	用戶 登入主機=(代表用戶) 命令
	user host=(runas) command
2.示例:
	root ALL=(ALL) ALL
3.格式說明:
	user: 運行命令者的身份
	host: 通過哪些主機
	(runas):以哪個用戶的身份
	command: 運行哪些命令
4.User和runas:
	username
	#uid
	%group_name
	%#gid
	user_alias|runas_alias
5.host:
	ip或hostname
	network(/netmask)
	host_alias
6.command:
	command name
	directory
	sudoedit
	Cmnd_Alias
7.別名有四種類型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
8.別名格式:[A-Z]([A-Z][0-9]_)*
9.別名定義:
	Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
10.示例1:
	Student ALL=(ALL) ALL
	%wheel ALL=(ALL) ALL
11.示例2:
	student ALL=(root) /sbin/pidof,/sbin/ifconfig
	%wheel ALL=(ALL) NOPASSWD: ALL
12.示例3
	User_Alias NETADMIN= netuser1,netuser2
	Cmnd_Alias NETCMD = /usr/sbin/ip
	NETADMIN ALL=(root) NETCMD
13.示例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
14.示例5
	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:ADMINCMDPASSWD:/usr/sbin/userdel
15.示例6
	Defaults:wang runas_default=tom
	wang ALL=(tom,jerry) ALL
16.示例7
	wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd
17.示例8
	wang ALL=(ALL) /bin/cat /var/log/messages*

十二、TCP Wrappers

1. TCP Wrappers

1.作者:Wieste Venema,IBM,Google
2.工作在第四層(傳輸層)的TCP協議
3.對有狀態連接的特定服務進行安全檢測並實現訪問控制
4.以庫文件形式實現
5.某進程是否接受libwrap的控制取決於發起此進程的程序在編譯時是否針對
  libwrap進行編譯的
6.判斷服務程序是否能夠由tcp_wrapper進行訪問控制的方法:
	ldd /PATH/TO/PROGRAM|grep libwrap.so
	strings PATH/TO/PROGRAM|grep libwrap.so

2. TCP_Wrappers的使用

1.配置文件:/etc/hosts.allow, /etc/hosts.deny
2.幫助參考:man 5 hosts_access,man 5 hosts_options
3.檢查順序:hosts.allow,hosts.deny(默認允許)
  注意:一旦前面規則匹配,直接生效,將不再繼續
  
4.基本語法:
	daemon_list@host: client_list [ :options :option… ]
5.Daemon_list@host格式
	單個應用程序的二進制文件名,而非服務名,例如vsftpd
	以逗號或空格分隔的應用程序文件名列表,如:sshd,vsftpd
	ALL表示所有接受tcp_wrapper控制的服務程序
	主機有多個IP,可用@hostIP來實現控制
       如:in.telnetd@192.168.0.254
       
6.客戶端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
	內置ACLALLLOCALKNOWNUNKNOWNPARANOID

7.[:options]選項:
8.幫助:man 5 hosts_options
	deny 主要用在/etc/hosts.allow定義“拒絕”規則
		如:vsftpd: 172.16. :deny
	allow 主要用在/etc/hosts.deny定義“允許”規則
		如:vsftpd:172.16. :allow
	spawn 啓動一個外部程序完成執行的操作
	twist 實際動作是拒絕訪問,使用指定操作替換當前服務,標準輸出和ERROR
		  發送到客戶端,默認至/dev/null
9.測試工具:
	tcpdmatch [-d] daemon[@host] client
	-d 測試當前目錄下的hosts.allow和hosts.deny

3. 示例

1.EXCEPT用法:
	示例:
		vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
		
	示例:只允許192.168.1.0/24的主機訪問sshd
		 /etc/hosts.allow
		sshd: 192.168.1.
		 /etc/hosts.deny
		sshd :ALL
		
	示例:只允許192.168.1.0/24的主機訪問telnet和vsftpd服務
		 /etc/hosts.allow
		vsftpd,in.telnetd: 192.168.1.
		 /etc/host.deny
		vsftpd,in.telnetd: ALL
2.示例
	sshd: ALL :spawn echo "$(date +%%F) 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”

十三、PAM模塊

1. PAM認證機制

1.PAM:Pluggable Authentication Modules
	a.認證庫:文本文件,MySQL,NISLDAP等
	b.Sun公司於1995 年開發的一種與認證相關的通用框架機制
	c.PAM 是關注如何爲服務驗證用戶的 API,通過提供一些動態鏈接庫和一套統
	  一的API,將系統提供的服務和該服務的認證方式分開
	d.使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無
	  需更改服務程序
	e.一種認證框架,自身不做認證

2.它提供了對所有服務進行認證的中央機制,適用於本地登錄,遠程登錄,如:
telnet,rlogin,fsh,ftp,點對點協議PPP,su等應用程序中,系統管理員通過PAM
配置文件來制定不同應用程序的不同認證策略;應用程序開發者通過在服務程
序中使用PAM API(pam_xxxx( ))來實現對認證方法的調用;而PAM服務模塊的
開發者則利用PAM SPI來編寫模塊(主要調用函數pam_sm_xxxx( )PAM接口
庫調用,將不同的認證機制加入到系統中;PAM接口庫(libpam)則讀取配置
文件,將應用程序和相應的PAM服務模塊聯繫起來

3.PAM相關文件
	模塊文件目錄:/lib64/security/*.so                                      */
	環境相關的設置:/etc/security/
	主配置文件:/etc/pam.conf,默認不存在
	爲每種應用模塊提供一個專用的配置文件:/etc/pam.d/APP_NAME
	注意:如/etc/pam.d存在,/etc/pam.conf將失效


2. PAM架構

在這裏插入圖片描述

3. PAM認證原理

1.PAM認證一般遵循這樣的順序:Service(服務)PAM(配置文件)→pam_*.so
2.PAM認證首先要確定那一項服務,然後加載相應的PAM的配置文件(位於
/etc/pam.d下),最後調用認證文件(位於/lib64/security下)進行安全認證

在這裏插入圖片描述

4. PAM認證過程

PAM認證過程:
1.使用者執行/usr/bin/passwd 程序,並輸入密碼

2.passwd開始調用PAM模塊,PAM模塊會搜尋passwd程序的PAM相關設置文
件,這個設置文件一般是在/etc/pam.d/裏邊的與程序同名的文件,即PAM會
搜尋/etc/pam.d/passwd此設置文件

3.經由/etc/pam.d/passwd設定文件的數據,取用PAM所提供的相關模塊來進
行驗證

4.將驗證結果回傳給passwd這個程序,而passwd這個程序會根據PAM回傳的
結果決定下一個動作(重新輸入密碼或者通過驗證)

5. PAM配置文件信息

1.通用配置文件/etc/pam.conf格式
	application 	type 	control 	module-path 	arguments
2.專用配置文件/etc/pam.d/* 格式											*/
	type 	control 	module-path 	arguments
3.說明:
	3.1.服務名(application)
		telnet、login、ftp等,服務名字“OTHER”代表所有沒有在該文件中明確配置的其它服務
	3.2.模塊類型(module-type)
	3.3.control PAM庫該如何處理與該服務相關的PAM模塊的成功或失敗情況
	3.4.module-path 用來指明本模塊對應的程序文件的路徑名
	3.5.Arguments 用來傳遞給該模塊的參數

3.2.模塊類型(module-type)
	a.模塊類型(module-type)
	b.Auth 賬號的認證和授權
	c.Account 與賬號管理相關的非認證類的功能,如:用來限制/允許用戶對某
	  個服務的訪問時間,當前有效的系統資源(最多可以有多少個用戶),限制用
	  戶的位置(例如:root用戶只能從控制檯登錄)
	d.Password 用戶修改密碼時密碼複雜度檢查機制等功能
	e.Session 用戶獲取到服務之前或使用服務完成之後需要進行一些附加的操作,
		如:記錄打開/關閉數據的信息,監視目錄等
	f.-type 表示因爲缺失而不能加載的模塊將不記錄到系統日誌,對於那些不總是
	  安裝在系統上的模塊有用

3.3.control PAM庫該如何處理與該服務相關的PAM模塊的成功或失敗情況
	a.Control:
	 	PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況
	b.兩種方式實現:
		簡單和複雜
	c.簡單方式實現:一個關健詞實現
		required :一票否決,表示本模塊必須返回成功才能通過認證,但是如果該
		模塊返回失敗,失敗結果也不會立即通知用戶,而是要等到同一type中的所
		有模塊全部執行完畢再將失敗結果返回給應用程序,即爲必要條件
		
		requisite :一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返
		回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程
		序。是一個必要條件
		
		sufficient :一票通過,表明本模塊返回成功則通過身份認證的要求,不必再執
		行同一type內的其它模塊,但如果本模塊返回失敗可忽略,即爲充分條件
		
		optional :表明本模塊是可選的,它的成功與否不會對身份認證起關鍵作用,
		其返回值一般被忽略
		
		include: 調用其他的配置文件中定義的配置信息
	
	d.複雜詳細實現:使用一個或多個“status=action”
		[status1=action1 status2=action …]
			Status:檢查結果的返回狀態
			Action:採取行爲 ok,done,die,bad,ignore,reset
		ok 模塊通過,繼續檢查
		done 模塊通過,返回最後結果給應用
		bad 結果失敗,繼續檢查
		die 結果失敗,返回失敗結果給應用
		ignore 結果忽略,不影響最後結果
		reset 忽略已經得到的結果

3.4.module-path 用來指明本模塊對應的程序文件的路徑名
	1.module-path: 模塊路徑
	2.相對路徑:
		/lib64/security目錄下的模塊可使用相對路徑
		如:pam_shells.so、pam_limits.so
	3.絕對路徑:
	4.模塊通過讀取配置文件完成用戶對系統資源的使用控制
		/etc/security/*.conf												*/
	5.注意:修改PAM配置文件將馬上生效
	6.建議:編輯pam規則時,保持至少打開一個root會話,以防止root身份驗證錯誤
	
3.5.Arguments 用來傳遞給該模塊的參數

6. PAM文檔說明

/user/share/doc/pam-*
rpm -qd pam
man –k pam_
man 模塊名 如man rootok
《The Linux-PAM System Administrators' Guide》

7. PAM模塊示例

7.1. pam_shells

1.模塊:pam_shells
2.功能:檢查有效shell
3.man pam_shells
4.示例:不允許使用/bin/csh的用戶本地登錄
	vim /etc/pam.d/login
		 auth required pam_shells.so
	vim /etc/shells
	 	去掉 /bin/csh
	useradd –s /bin/csh testuser
	testuser將不可登錄
	tail /var/log/secure

7.2. pam_securetty.so

1.模塊:pam_securetty.so
2.功能:只允許root用戶在/etc/securetty列出的安全終端上登陸
3.示例:允許root在telnet登陸
	vi /etc/pam.d/remote
		#auth required pam_securetty.so #將這一行加上註釋
	或者/etc/securetty文件中加入
		pts/0,pts/1…pts/n

7.3. pam_nologin.so

1.模塊:pam_nologin.so
2.功能:
	如果/etc/nologin文件存在,將導致非root用戶不能登陸
	如果用戶shell是/sbin/nologin 時,當該用戶登陸時,會顯示/etc/nologin文件內容,並拒絕登陸

7.4. pam_limits.so

1.模塊:pam_limits.so
2.功能:在用戶級別實現對其可使用的資源的限制,例如:可打開的文件數量,
	   可運行的進程數量,可用內存空間
3.修改限制的實現方式:
4.(1) ulimit命令,立即生效,但無法保存
	-n 每個進程最多的打開的文件描述符個數
	-u 最大用戶進程數
	-S 使用 soft(軟)資源限制
	-H 使用 hard(硬)資源限制
  (2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf    */
  
5.配置文件:每行一個定義;
	<domain> 	<type> 		<item> 		<value>
	5.1<domain> 應用於哪些對象
		Username 單個用戶
		@group 組內所有用戶
		* 所有用戶
	5.2<type> 限制的類型
		Soft 軟限制,普通用戶自己可以修改
		Hard 硬限制,由root用戶設定,且通過kernel強制生效
		- 二者同時限定
	5.3<item> 限制的資源
		nofile 所能夠同時打開的最大文件數量,默認爲1024
		nproc 所能夠同時運行的進程的最大數量,默認爲1024
	5.4<value> 指定具體值

6.示例:pam_limits.so
	6.1限制用戶最多打開的文件數和運行進程數
	6.2/etc/pam.d/system-auth
		 session required pam_limits.so
	6.3vim /etc/security/limits.conf
		 apache – nofile 10240 用戶apache可打開10240個文件
		 student hard nproc 20 用戶student不能運行超過20個進程

在這裏插入圖片描述

7.5. 生產案例

* 	soft 	core 		unlimited
*	hard 	core 		unlimited
* 	soft 	nproc 		1000000
*	hard 	nproc 		1000000
* 	soft 	nofile 		1000000
* 	hard 	nofile 		1000000
* 	soft 	memlock 	32000
* 	hard 	memlock 	32000
* 	soft 	msgqueue 	8192000
* 	hard 	msgqueue 	8192000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章