安全機制
信息安全防護的目標
保密性 Confidentiality
完整性 lntegrity
可用性 Usability
可控制性Controlability
不可否認性 Non-repudiation
安全防護環節
物理安全:各種設備/主機、機房環境
系統安全:主機或設備的操作系統
應用安全:各種網絡服務、應用程序
網絡安全:對網絡訪問的控制、防火墻規則
數據安全:信息的備份、恢復、加密解密
管理安全:各種保障的規范、流程、方法
安全
安全攻擊; STRIDE
Spoofing 假冒
Tampering 篡改
Repudiation 否認
lnformation Disclosure 信息泄露
Denial of Service 拒絕服務
Elevation of Privilege 提升權限
安全設計基本原則
使用成熟的安全系統
以小人之心度輸入數據
外部系統是不安全的
最小授權
減少外部接口
缺省外部接口
安全不是似是而非
安全算法
常用安全技術
認證
授權
審計
安全通信
密碼算法和協議:
對稱加密
公鑰加密
單向加密
認證協議
Linux系統:OpenSSL, gpg(pgp協議的實現)
加密需要
?不加密流量的易受攻擊性
? 密碼/數據嗅探
? 數據操作
? 驗證操作
? 相當于郵寄明信片
?不安全的傳統協議
? telnet、FTP、POP3等等;不安全密碼
? http、smtp、NFS等等;不安全信息
? Ldap、NIS、rsh等等;不安全驗證
對稱加密算法
? 對稱加密:加密和解密使用同一個密鑰
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
? 特性:
1、加密、解密使用同一個密鑰,效率高
2、將原始數據分割成固定大小的塊,逐個進行加密
? 缺陷:
1、密鑰過多
2、密鑰分發
3、數據來源無法確認
非對稱加密算法
? 公鑰加密:密鑰是成對出現
? 公鑰:公開給所有人;public key
? 私鑰:自己留存,必須保證其私密性;secret key
? 特點:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然
? 功能:
? 數字簽名:主要在于讓接收方確認發送方身份
? 對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰后發送給對方
? 數據加密:適合加密較小數據
? 缺點:密鑰長,加密解密效率低下
? 算法:
RSA(加密,數字簽名),DSA(數字簽名),ELGamal
A—>B
A—>C
A—>D
Data明文–加密 data’ 密文—–傳輸—-解密—-data明文
算法:
算法公開
密鑰key 不公開
對稱加密算法:
key1=key2
優勢:速度快
https://
http://
非對稱加密算法:
Key1 ! = key2
Alice—>BOB
Alice:pa公,sa私
Bob:Pb,Sb
data—加密Pb(data)—解密Sb{Pb(data)}—data
data—加密Sa(data)—解密Pa{Sa(data)}—data
Key(Sa)
Pb {Sa(data)}
hash(data)=digest摘要
data不同,digest必不同
digest 不可反推算出data
digest長度固定大小
md5:128
sha1: 160
/etc/shadow sha512
非對稱加密
?基于一對公鑰/密鑰對
? 用密鑰對中的一個加密,另一個解密
?實現加密:
? 接收者
生成公鑰/密鑰對:P和S
公開公鑰P,保密密鑰S
? 發送者
使用接收者的公鑰來加密消息M
將P(M)發送給接收者
? 接收者
使用密鑰S來解密:M=S(P(M))
非對稱加密
?實現數字簽名:
? 發送者
生成公鑰/密鑰對:P和S
公開公鑰P,保密密鑰S
使用密鑰S來加密消息M
發送給接收者S(M)
? 接收者
使用發送者的公鑰來解密M=P(S(M))
?結合簽名和加密
?分離簽名
單向散列
?將任意數據縮小成固定大小的“指紋”
? 任意長度輸入
? 固定長度輸出
? 若修改數據,指紋也會改變(“不會產生沖突”)
? 無法從指紋中重新生成數據(“單向”)
?功能:數據完整性
?常見算式
md5: 128bits、sha1: 160bits、sha224
sha256、sha384、sha512
?常用工具
? md5sum | sha1sum [ –check ] file
? openssl、gpg
? rpm -V
密鑰交換
?密鑰交換:IKE( Internet Key Exchange )
公鑰加密:
DH (Deffie-Hellman):生成會話密鑰,參看如下:
https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
?DH:
1、A: a,p 協商生成公開的整數a, 大素數p
B: a,p
2、A:生成隱私數據 :x (x<p ),計算得出 a^x%p,發送給B
B:生成隱私數據 :y,計算得出 a^y%p,發送給A
3、A:計算得出 [(a^y%p)^x] %p = a^xy%p,生成為密鑰
B:計算得出 [(a^x%p)^y] %p = a^xy%p,生成為密鑰
應用程序:RPM
?文件完整性的兩種實施方式
?被安裝的文件
? MD5單向散列
? rpm –verify package_name (or -V)
?發行的軟件包文件
? GPG公鑰簽名
? rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
? rpm –checksig pakage_file_name (or -K)
使用gpg實現對稱加密
?對稱加密file文件
gpg -c file
ls file.gpg
?在另一臺主機上解密file
gpg -o file -d file.gpg
使用gpg工具實現公鑰加密
?在hostB主機上用公鑰加密,在hostA主機上解密
?在hostA主機上生成公鑰/私鑰對
gpg –gen-key
?在hostA主機上查看公鑰
gpg –list-keys
?在hostA主機上導出公鑰到wang.pubkey
gpg -a –export -o wang.pubkey
?從hostA主機上復制公鑰文件到需加密的B主機上
scp wang.pubkey hostB:
使用gpg工具實現公鑰加密
?在需加密數據的hostB主機上生成公鑰/私鑰對
gpg –list-keys
gpg –gen-key
?在hostB主機上導入公鑰
gpg –import wang.pubkey
gpg –list-keys
?用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg
gpg -e -r wangxiaochun file
file file.gpg
使用gpg工具實現公鑰加密
?復制加密文件到hostA主機
scp fstab.gpg hostA:
?在hostA主機解密文件
gpg -d file.gpg
gpg -o file -d file.gpg
?刪除公鑰和私鑰
gpg –delete-keys wangxiaochun
gpg –delete-secret-keys wangxiaochun
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 IETF(Internet工程任務組) RFC 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協議的文本數據進行加密處理后,成為二
進制形式傳輸
taobao 證書
Sca(ptaobao)+Ca+expire+Ptaobao
Ptaobao(key)—>taobao
Staobao (Ptaobao(Key))=key
Key(data)
OpenSSL
?OpenSSL:開源項目
三個組件:
openssl: 多用途的命令行工具,包openssl
libcrypto: 加密算法庫,包openssl-libs
libssl:加密模塊應用庫,實現了ssl及tls,包nss
?openssl命令:
兩種運行模式:交互模式和批處理模式
openssl version:程序版本號
標準命令、消息摘要命令、加密命令
標準命令:
enc, ca, req, …
openssl命令
?對稱加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
?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 ?
openssl命令
?單向加密:
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
?dgst命令:
幫助:man dgst
openssl dgst -md5 [-hex默認] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
?MAC: Message Authentication Code,單向加密的一種延伸應用,用于實現
網絡通信中保證所傳輸數據的完整性機制
CBC-MAC
HMAC:使用md5或sha1算法
openssl命令
?生成用戶密碼:
passwd命令:
幫助:man sslpasswd
openssl passwd -1 -salt SALT(最多8位)
openssl passwd -1 –salt centos
?生成隨機數:
幫助:man sslrand
openssl rand -base64|-hex NUM
NUM: 表示字節數;-hex時,每個字符為十六進制,相當于4位二進制,出
現的字符數為NUM*
openssl命令
?公鑰加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
?數字簽名:
算法:RSA, DSA, ELGamal
?密鑰交換:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:
penssl命令
?生成密鑰對兒:man genrsa
?生成私鑰
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解密
?從私鑰中提取出公鑰
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
?隨機數生成器:偽隨機數字
鍵盤和鼠標,塊設備中斷
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機
數,非阻塞
OpenSSL
? PKI:Public Key Infrastructure
CA
RA
CRL
證書存取庫
? 建立私有CA:
OpenCA
openssl
? 證書申請及簽署步驟:
1、生成申請請求
2、RA核驗
3、CA簽署
4、獲取證書
創建CA和申請證書
? 創建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
三種策略:匹配、支持和可選
匹配指要求申請填寫的信息跟CA設置信息必須一致,支持指必須填寫這項申請信息,
可選指可有可無
? 1、創建所需要的文件
touch /etc/pki/CA/index.txt 生成證書索引數據庫文件
echo 01 > /etc/pki/CA/serial 指定第一個頒發證書的序列號
? 2、 CA自簽證書
生成私鑰
cd /etc/pki/CA/
(umask 066; openssl genrsa -out
/etc/pki/CA/private/cakey.pem 2048)
創建CA和申請證書
?生成自簽名證書
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 : 證書的保存路徑
創建CA和申請證書
? 3 、 頒發證書
? 在需要使用證書的主機生成證書請求
給web服務器生成私鑰
(umask 066; openssl genrsa -out
/etc/pki/tls/private/test.key 2048)
生成證書申請文件
openssl req -new -key /etc/pki/tls/private/test.key
-days 365 -out etc/pki/tls/test.csr
? 將證書請求文件傳輸給CA
? CA簽署證書,并將證書頒發給請求者
openssl ca -in /tmp/test.csr –out
/etc/pki/CA/certs/test.crt -days 365
注意:默認國家,省,公司名稱三項必須和CA一致
創建CA和證書管理
? 查看證書中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
openssl ca -status SERIAL 查看指定編號的證書狀態
? 4、吊銷證書
? 在客戶端獲取要吊銷的證書的serial
openssl x509 -in / PATH/FROM/CERT_FILE -noout -serial -subject
? 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致,吊
銷證書:
openssl ca -revoke /etc/pki/CA/newcerts/ SERIAL .pem
? 指定第一個吊銷證書的編號 , 注意:第一次更新證書吊銷列表前,才需要執行
echo 01 > /etc/pki/CA/crlnumber
? 更新證書吊銷列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem
? 查看crl文件:
openssl crl -in /etc/pki/CA/crl.pem -noout -text
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
sh客戶端
? 客戶端組件:
? 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客戶端
?允許實現對遠程系統經驗證地加密安全訪問
?當用戶遠程連接ssh服務器時,會復制ssh服務器/etc/ssh/ssh_host*key.pub
(CentOS7默認是ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的
~./ssh/know_hosts中。下次連接時,會自動匹配相應私鑰,不能匹配,將拒
絕連接
ssh服務登錄驗證
?ssh服務登錄驗證方式:
?用戶/口令
?基于密鑰
?基于用戶和口令登錄驗證
?1 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
?2 用戶會根據服務器發來的公鑰對密碼進行加密
?3 加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則
用戶登錄成功
ssh服務登錄驗證
基于用戶名口令登錄驗證
ssh服務登錄驗證
?基于密鑰的登錄方式
?1 首先在客戶端生成一對密鑰(ssh-keygen)
?2 并將客戶端的公鑰ssh-copy-id 拷貝到服務端
?3 當客戶端再次發送一個連接請求,包括ip、用戶名
?4 服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP
和用戶,就會隨機生成一個字符串,例如:acdf
?5 服務端將使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端
?6 得到服務端發來的消息后,客戶端會使用私鑰進行解密,然后將解密后的
字符串發送給服務端
?7服務端接受到客戶端發來的字符串后,跟之前的字符串進行對比,如果一致,
就允許免密碼登錄
ssh服務登錄驗證
?基于密鑰的登錄方式
基于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
基于key認證
?(5)重設私鑰口令:
ssh-keygen –p
?(6)驗證代理(authentication agent)保密解密后的密鑰
? 這樣口令就只需要輸入一次
? 在GNOME中,代理被自動提供給root用戶
? 否則運行ssh-agent bash
?(7)鑰匙通過命令添加給代理
ssh-add
1、各自生成各自的密鑰對
2、
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)
sftp命令
?交互式文件傳輸工具
?用法和傳統的ftp工具相似
?利用ssh服務實現安全的文件上傳和下載
?使用ls cd mkdir rmdir pwd get put等指令,可用?或help獲取幫助信息
sftp [user@]host
sftp> help
pssh工具
? pssh是一個python編寫可以在多臺服務器上執行命令的工具,也可實現文件復制
? 選項如下:
? –version:查看版本
? -h:主機文件列表,內容格式”[user@]host[:port]”
? -H:主機字符串,內容格式”[user@]host[:port]”
? -l:登錄使用的用戶名
? -p:并發的線程數【可選】
? -o:輸出的文件目錄【可選】
? -e:錯誤輸入文件【可選】
? -t:TIMEOUT 超時時間設置,0無限制【可選】
? -O:SSH的選項
? -v:詳細模式
? -A:手動輸入密碼模式
? -x:額外的命令行參數使用空白符號,引號,反斜線處理
? -X:額外的命令行參數,單個參數模式,同-x
? -i:每個服務器內部處理信息輸出
? -P:打印出服務器返回信息
PSCP.PSSH命令
? pscp.pssh功能是將本地文件批量復制到遠程主機
? pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir]
[-t timeout] [-O options] [-x args] [-X arg] local remote
? Pscp-pssh選項
-v 顯示復制過程
-a 復制過程中保留常規屬性
-r 遞歸復制目錄
? 將本地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/
? 將本地多個文件批量復制到/app/目錄
pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
? 將本地目錄批量復制到/app/目錄
pscp.pssh -H 192.168.1.10 -r /root/test/ /app/
PSLURP.PSSH命令
?pslurp.pssh功能是將遠程主機的文件批量復制到本地
?pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o
outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir]
remote local(本地名)
?Pslurp-pssh選項
-L 指定從遠程主機下載到本機的存儲的目錄,local是下載到本地后的名稱
-r 遞歸復制目錄
?批量下載目標服務器的passwd文件至/app下,并更名為user
pslurp -H 192.168.1.10 -L /app/ /etc/passwd user
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
? 選項:
-f 后臺啟用
-N 不打開遠程shell,處于等待狀態
-g 啟用網關功能
? 示例
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
SSH端口轉發
?遠程轉發:
-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
SSH端口轉發
?動態端口轉發:
?當用firefox訪問internet時,本機的1080端口做為代理服務器,firefox的訪問
請求被轉發到sshserver上,由sshserver替之訪問internet
ssh -D 1080 root@sshserver
在本機firefox設置代理socket proxy:127.0.0.1:1080
curl –socks5 127.0.0.1:1080 http://www.qq.com
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 檢查.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服務的最佳實踐
? 建議使用非默認端口
? 禁止使用protocol version 1
? 限制可登錄用戶
? 設定空閑會話超時時長
? 利用防火墻設置ssh訪問策略
? 僅監聽特定的IP地址
? 基于口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
? 使用基于密鑰的認證
? 禁止使用空密碼
? 禁止root用戶直接登錄
? 限制ssh的訪問頻度和并發在線數
? 經常分析日志
編譯安裝dropbear示例
?ssh協議的另一個實現:dropbear
?源碼編譯安裝:
? 1、安裝開發包組:yum groupinstall “Development tools”
? 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
相當于這個程序的角色
dropbear
?啟動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
? AIDE(Advanced Intrusion Detection Environment)
? 高級入侵檢測環境)是一個入侵檢測工具,主要用途是檢查文件的完整性,審計計算機
上的那些文件被更改過了。
? AIDE能夠構造一個指定文件的數據庫,它使用aide.conf作為其配置文件。AIDE數據庫
能夠保存文件的各種屬性,包括:權限(permission)、索引節點序號(inode number)、
所屬用戶(user)、所屬用戶組(group)、文件大小、最后修改時間(mtime)、創建時間
(ctime)、最后訪問時間(atime)、增加的大小以及連接數。AIDE還能夠使用下列算法:
sha1、md5、rmd160、tiger,以密文形式建立每個文件的校驗碼或散列號.
? 這個數據庫不應該保存那些經常變動的文件信息,例如:日志文件、郵件、/proc文件
系統、用戶起始目錄以及臨時目錄.
AIDE
?安裝
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
?初始化默認的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 檢查語法
授權操作
更改身份
?su 切換身份:su –l username –c ‘command‘
?sudo
? 來自sudo包
? man 5 sudoers
? sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使
用 sudo,會提示聯系管理員
? sudo可以提供日志,記錄每個用戶使用sudo操作
? sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權
限和使用的主機
? sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入
場券”
? 通過visudo命令編輯配置文件,具有語法檢查功能
visudo –c 檢查語法
授權操作
限制某個ip
訪問sshd服務
TCP_Wrappers的使用
?客戶端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
?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
TCP_Wrappers的使用
?[: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
除了30.7的其他的都不能訪問
默認情況下都不匹配它是允許的
示例
?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認證機制
?PAM:Pluggable Authentication Modules
?認證庫:文本文件,MySQL,NIS,LDAP等
?Sun公司于1995 年開發的一種與認證相關的通用框架機制
?PAM 是關注如何為服務驗證用戶的 API,通過提供一些動態鏈接庫和一套統
一的API,將系統提供的服務和該服務的認證方式分開
?使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無
需更改服務程序
?一種認證框架,自身不做認證
PAM認證機制
?它提供了對所有服務進行認證的中央機制,適用于login,遠程登錄
(telnet,rlogin,fsh,ftp,點對點協議(PPP)),su等應用程序中。系統管理員
通過PAM配置文件來制定不同應用程序的不同認證策略;應用程序開發者通過
在服務程序中使用PAM API(pam_xxxx( ))來實現對認證方法的調用;而PAM服
務模塊的開發者則利用PAM SPI來編寫模塊(主要是引出一些函數
pam_sm_xxxx( )供PAM接口庫調用),將不同的認證機制加入到系統中;PAM
接口庫(libpam)則讀取配置文件,將應用程序和相應的PAM服務模塊聯系起
來。
PAM架構
AM認證機制
?PAM相關文件
?模塊文件目錄:/lib64/security/*.so
?環境相關的設置:/etc/security/
?主配置文件:/etc/pam.conf,默認不存在
?為每種應用模塊提供一個專用的配置文件:/etc/pam.d/APP_NAME
?注意:如/etc/pam.d存在,/etc/pam.conf將失效
pam認證原理
?PAM認證一般遵循這樣的順序:Service(服務)→PAM(配置文件)→pam_*.so
?PAM認證首先要確定那一項服務,然后加載相應的PAM的配置文件(位于
/etc/pam.d下),最后調用認證文件(位于/lib/security下)進行安全認證
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回傳的結果
決定下一個動作(重新輸入密碼或者通過驗證)
PAM認證機制
?通用配置文件/etc/pam.conf格式
application type control module-path arguments
?專用配置文件/etc/pam.d/* 格式
type control module-path arguments
?說明:
?服務名(application)
telnet、login、ftp等,服務名字“OTHER”代表所有沒有在該文件中明確配置
的其它服務
?模塊類型(module-type)
?control PAM庫該如何處理與該服務相關的PAM模塊的成功或失敗情況
?module-path 用來指明本模塊對應的程序文件的路徑名
?Arguments 用來傳遞給該模塊的參數
PAM認證機制
?模塊類型(module-type)
?Auth 賬號的認證和授權
?Account 與賬號管理相關的非認證類的功能,如:用來限制/允許用戶對某個
服務的訪問時間,當前有效的系統資源(最多可以有多少個用戶),限制用戶
的位置(例如:root用戶只能從控制臺登錄)
?Password 用戶修改密碼時密碼復雜度檢查機制等功能
?Session 用戶獲取到服務之前或使用服務完成之后需要進行一些附加的操作,
如:記錄打開/關閉數據的信息,監視目錄等
?-type 表示因為缺失而不能加載的模塊將不記錄到系統日志,對于那些不總是
安裝在系統上的模塊有用
PAM認證機制
?Control:
PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況
?兩種方式實現:
簡單和復雜
?簡單方式實現:一個關健詞實現
?required :一票否決,表示本模塊必須返回成功才能通過認證,但是如果該
模塊返回失敗,失敗結果也不會立即通知用戶,而是要等到同一type中的所
有模塊全部執行完畢再將失敗結果返回給應用程序。即為必要條件
PAM認證機制
?requisite :一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返
回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程
序。是一個必要條件
?sufficient :一票通過,表明本模塊返回成功則通過身份認證的要求,不必再執
行同一type內的其它模塊,但如果本模塊返回失敗可忽略,即為充分條件
?optional :表明本模塊是可選的,它的成功與否不會對身份認證起關鍵作用,
其返回值一般被忽略
?include: 調用其他的配置文件中定義的配置信息
PAM認證機制
?復雜詳細實現:使用一個或多個“status=action”
?[status1=action1 status2=action …]
Status:檢查結果的返回狀態
Action:采取行為 ok,done,die,bad,ignore,reset
?ok 模塊通過,繼續檢查
?done 模塊通過,返回最后結果給應用
?bad 結果失敗,繼續檢查
?die 結果失敗,返回失敗結果給應用
?ignore 結果忽略,不影響最后結果
?reset 忽略已經得到的結果
PAM認證機制
?module-path: 模塊路徑
?相對路徑:
/lib64/security目錄下的模塊可使用相對路徑
如:pam_shells.so、pam_limits.so
?絕對路徑:
?模塊通過讀取配置文件完成用戶對系統資源的使用控制
/etc/security/*.conf
?注意:修改PAM配置文件將馬上生效
?建議:編輯pam規則時,保持至少打開一個root會話,以防止root身份驗證錯誤
?Arguments 用來傳遞給該模塊的參數
pam文檔說明
?/user/share/doc/pam-*
?rpm -qd pam
?man –k pam_
?man 模塊名 如man rootok
?《The Linux-PAM System Administrators’ Guide》
PAM模塊示例
?模塊:pam_shells
?功能:檢查有效shell
?man pam_shells
?示例:不允許使用/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
PAM模塊示例
?模塊:pam_securetty.so
?功能:只允許root用戶在/etc/securetty列出的安全終端上登陸
?示例:允許root在telnet登陸
vi /etc/pam.d/remote
#auth required pam_securetty.so #將這一行加上注釋
或者/etc/securetty文件中加入
pts/0,pts/1…pts/n
PAM模塊示例
?模塊:pam_nologin.so
?功能:
?如果/etc/nologin文件存在,將導致非root用戶不能登陸
?如果用戶shell是/sbin/nologin 時,當該用戶登陸時,會顯示/etc/nologin文件內
容,并拒絕登陸
PAM模塊示例
?模塊:pam_limits.so
?功能:在用戶級別實現對其可使用的資源的限制,例如:可打開的文件數量,
可運行的進程數量,可用內存空間
?修改限制的實現方式:
?(1) ulimit命令,立即生效,但無法保存
-n 最多的打開的文件描述符個數
-u 最大用戶進程數
-S 使用 soft(軟)資源限制
-H 使用 hard(硬)資源限制
?(2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf
?配置文件:每行一個定義;
<domain> <type> <item> <value>
PAM認證機制
pam_limits.so
?<domain> 應用于哪些對象
?Username 單個用戶
?@group 組內所有用戶
?* 所有用戶
?<type> 限制的類型
?Soft 軟限制,普通用戶自己可以修改
?Hard 硬限制,由root用戶設定,且通過kernel強制生效
?- 二者同時限定
?<item> 限制的資源
?nofile 所能夠同時打開的最大文件數量,默認為1024
?nproc 所能夠同時運行的進程的最大數量,默認為1024
?<value> 指定具體值
示例:pam_limits.so
?限制用戶最多打開的文件數和運行進程數
?/etc/pam.d/system-auth
session required pam_limits.so
?vim /etc/security/limits.conf
apache – nofile 10240 apache用戶可打開10240個文件
student hard nproc 20 不能運行超過20個進程
改這個文件來限制用戶資源
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100136