第六週 小總結

     安全

~安全***: STRIDE
Spoofing 假冒
Tampering 篡改
Repudiation 否認
Information Disclosure 信息泄漏
Denial of Service 拒絕服務
Elevation of Privilege 提升權限

對稱加密算法
~對稱加密:加密和解密使用同一個密鑰
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
~特性:
1、加密、解密使用同一個密鑰,效率高
2、將原始數據分割成固定大小的塊,逐個進行加密
~缺陷:
1、密鑰過多
2、密鑰分發
3、數據來源無法確認

非對稱加密
~基於一對公鑰/密鑰對
•用密鑰對中的一個加密,另一個解密
~實現加密:
•接收者
生成公鑰/密鑰對:P和S
公開公鑰P,保密密鑰S
•發送者
使用接收者的公鑰來加密消息M
將P(M)發送給接收者
•接收者
使用密鑰S來解密:M=S(P(M))

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

應用程序: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

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*2

openssl命令
~生成密鑰對兒: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
三種策略:match匹配、optional可選、supplied提供
match:要求申請填寫的信息跟CA設置信息必須一致
optional:可有可無,跟CA設置信息可不一致
supplied:必須填寫這項申請信息,
~1、創建所需要的文件
touch /etc/pki/CA/index.txt 生成證書索引數據庫文件
echo 01 > /etc/pki/CA/serial 指定第一個頒發證書的序列號
~2、 CA自簽證書
生成私鑰
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)

創建CA和申請證書
~生成自簽名證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem
-days 3650 -out /etc/pki/CA/cacert.pem
~選項說明:
-new:生成新證書籤署請求
-x509:專用於CA生成自簽證書
-key:生成請求時用到的私鑰文件
-days n:證書的有效期限
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑

創建CA和申請證書
~3、頒發證書
~在需要使用證書的主機生成證書請求
給web服務器生成私鑰
(umask 066; openssl genrsa –out /data/test.key 2048)
生成證書申請文件
openssl req -new -key /data/test.key -out /data/test.csr
~將證書請求文件傳輸給CA
~CA簽署證書,並將證書頒發給請求者
openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 100
注意:默認要求 國家,省,公司名稱三項必須和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結構
Linux Client: ssh, scp, sftp,slogin
Windows Client: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轉發
-t:強制僞tty分配
ssh -t remoteserver1 ssh -t remoteserver2 ssh remotes

基於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)

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

pssh工具br/>~選項如下:
--version:查看版本
-h:主機文件列表,內容格式”[user@]host[:port]”
-H:主機字符串,內容格式”[user@]host[:port]”
-A:手動輸入密碼模式
-i:每個服務器內部處理信息輸出
-l:登錄使用的用戶名
-p:併發的線程數【可選】
-o:輸出的文件目錄【可選】
-e:錯誤輸出文件【可選】
-t:TIMEOUT 超時時間設置,0無限制【可選】
-O:SSH的選項
-P:打印出服務器返回信息
-v:詳細模式

pssh示例
~通過pssh批量關閉seLinux
pssh -H [email protected] -i ‘sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config’
~批量發送指令
pssh -H [email protected] -i setenforce 0
pssh -H [email protected] -i hostname
~當不支持ssh的key認證時,通過 -A選項,使用密碼認證批量執行指令
pssh -H [email protected] -A -i hostname
~將標準錯誤和標準正確重定向都保存至/app目錄下
pssh -H 192.168.1.10 -o /app -e /app -i “hostname

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 顯示覆制過程
-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命令
~pslurp功能是將遠程主機的文件批量複製到本地
~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選項
-L 指定從遠程主機下載到本機的存儲的目錄,local是下載到本地後的名稱
-r 遞歸複製目錄
~批量下載目標服務器的passwd文件至/app下,並更名爲user
pslurp -H 192.168.1.10 -L /app /etc/passwd user

SSH端口轉發
~本地轉發:
-L localport:remotehost:remotehostport sshserver
~選項:
-f 後臺啓用
-N 不打開遠程shell,處於等待狀態
-g 啓用網關功能
~示例
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

SSH端口轉發
~遠程轉發:
-R sshserverport:remotehost:remotehostport sshserver
~示例:
ssh –R 9527:telnetsrv:23 –Nf 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 -fNg
在本機firefox設置代理socket proxy:127.0.0.1:1080
curl --socks5 127.0.0.1:1080 http://www.google.com

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

chrony
chrony 的優勢:
更快的同步只需要數分鐘而非數小時時間,從而最大程度減少了時間和頻率誤差,對於並非全天 24 小時運行的虛擬計算機而言非常有用
能夠更好地響應時鐘頻率的快速變化,對於具備不穩定時鐘的虛擬機或導致時鐘頻率發生變化的節能技術而言非常有用
在初始同步後,它不會停止時鐘,以防對需要系統時間保持單調的應用程序造成影響
在應對臨時非對稱延遲時(例如,在大規模下載造成鏈接飽和時)提供了更好的穩定性
無需對服務器進行定期輪詢,因此具備間歇性網絡連接的系統仍然可以快速同步時鐘
chrony官網:https://chrony.tuxfamily.org
chrony官方文檔:https://chrony.tuxfamily.org/documentation.html

chrony
~包:chrony
~兩個主要程序:chronyd和chronyc
chronyd:後臺運行的守護進程,用於調整內核中運行的系統時鐘和時鐘服務器同步。它確定計算機增減時間的比率,並對此進行補償
chronyc:命令行用戶工具,用於監控性能並進行多樣化的配置。它可以在chronyd實例控制的計算機上工作,也可在一臺不同的遠程計算機上工作
~服務unit 文件: /usr/lib/systemd/system/chronyd.service
~監聽端口: 323/udp,123/udp
~配置文件: /etc/chrony.conf

配置文件chrony.conf
~server - 可用於時鐘服務器,iburst 選項當服務器可達時,發送一個八個數據包而不是通常的一個數據包。 包間隔通常爲2秒,可加快初始同步速度
~driftfile - 根據實際時間計算出計算機增減時間的比率,將它記錄到一個文件中,會在重啓後爲系統時鐘作出補償
~rtcsync - 啓用內核模式,系統時間每11分鐘會拷貝到實時時鐘(RTC)
~allow / deny - 指定一臺主機、子網,或者網絡以允許或拒絕訪問本服務器
~cmdallow / cmddeny - 可以指定哪臺主機可以通過chronyd使用控制命令
~bindcmdaddress - 允許chronyd監聽哪個接口來接收由chronyc執行的命令
~makestep - 通常chronyd將根據需求通過減慢或加速時鐘,使得系統逐步糾正所有時間偏差。在某些特定情況下,系統時鐘可能會漂移過快,導致該調整過程消耗很長的時間來糾正系統時鐘。該指令強制chronyd在調整期大於某個閥值時調整系統時鐘
~local stratum 10 - 即使server指令中時間服務器不可用,也允許將本地時間作爲標準時間授時給其它客戶端

chronyc命令
~chronyc命令
~help命令可以查看更多chronyc的交互命令
~accheck 檢查是否對特定主機可訪問當前服務器
~activity 顯示有多少NTP源在線/離線
~sources [-v] 顯示當前時間源的同步信息
~sourcestats [-v]顯示當前時間源的同步統計信息
~add server 手動添加一臺新的NTP服務器
~clients 報告已訪問本服務器的客戶端列表
~delete 手動移除NTP服務器或對等服務器
~settime 手動設置守護進程時間
~sracking 顯示系統時間信息

chronyc示例
[root@centos7 ~]#chronyc
chrony version 3.2
Copyright (C) 1997-2003, 2007, 2009-2017 Richard P. Curnow and others
chrony comes with ABSOLUTELY NO WARRANTY. This is free software, and
you are welcome to redistribute it under certain conditions. See the
GNU General Public License version 2 for details.
chronyc> clients
Hostname NTP Drop Int IntL Last Cmd Drop Int Last

192.168.8.7 18 0 6 - 17 0 0 - -
192.168.8.6 14 0 6 - 56 0 0 - -
chronyc> activity
200 OK
1 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address
chronyc> sources -v
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample

^? 192.168.8.100 3 8 1 338 -40ms[ -40ms] +/- 237ms

公共NTP服務
~pool.ntp.org:項目是一個提供可靠易用的NTP服務的虛擬集羣cn.pool.ntp.org,0-3.cn.pool.ntp.org
~阿里雲公共NTP服務器
Unix/linux類:ntp.aliyun.com,ntp1-7.aliyun.com
windows類: time.pool.aliyun.com
~大學ntp服務
s1a.time.edu.cn 北京郵電大學 s1b.time.edu.cn 清華大學 s1c.time.edu.cn 北京大學
~國家授時中心服務器
210.72.145.44

時間工具
~timedatectl
~查看日期時間、時區及NTP狀態:timedatectl
~查看時區列表:timedatectl list-timezones
~修改時區:timedatectl set-timezone Asia/Shanghai
~修改日期時間:timedatectl set-time "2017-01-23 10:30:00"
~開啓NTP: timedatectl set-ntp true/flase
~system-config-date:圖形化配置chrony服務的工具

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

編譯安裝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 [email protected]
•15、dbclient -p 2222 [email protected]

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 檢查語法
visudo -f /etc/sudoers.d/test

sudo
~配置文件:/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
%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 ,CmndAlias
~別名格式:[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

sudo示例
~示例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

sudo示例
~示例4
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 ALL=(tom,jerry) ALL
~示例6
wang 192.168.1.6,192.168.1.8=(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… ]br/>~Daemon_list@host格式
~單個應用程序的二進制文件名,而非服務名,例如vsftpd
br/>~以逗號或空格分隔的應用程序文件名列表,如:sshd,vsftpd
~ALL表示所有接受tcp_wrapper控制的服務程序
~主機有多個IP,可用@hostIP來實現控制
如:[email protected]

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 實際動作是拒絕訪問,使用指定操作替換當前服務,標準輸出和ERROR發送到客戶端,默認至/dev/null
~測試工具:
tcpdmatch [-d] daemon[@host] client
-d 測試當前目錄下的hosts.allow和hosts.deny

示例
~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相關文件
~模塊文件目錄:/lib64/security/*.so
~環境相關的設置:/etc/security/
~主配置文件:/etc/pam.conf,默認不存在
~爲每種應用模塊提供一個專用的配置文件:/etc/pam.d/APP_NAME
~注意:如/etc/pam.d存在,/etc/pam.conf將失效

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模塊示例
~模塊: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_limits.so
~功能:在用戶級別實現對其可使用的資源的限制,例如:可打開的文件數量,可運行的進程數量,可用內存空間
~修改限制的實現方式:
~(1) ulimit命令,立即生效,但無法保存
-n 每個進程最多的打開的文件描述符個數
-u 最大用戶進程數
-S 使用 soft(軟)資源限制
-H 使用 hard(硬)資源限制
~(2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf
~配置文件:每行一個定義;
<domain> <type> <item> <value>

編譯安裝
第一步:下載 dropbear-2019.78.tar.bz2包,解壓
tar xvf dropbear-2019.78.tar.bz2 解壓到當前目錄
cd dropbear-2019.78 進入該目錄
第二步 :編譯安裝
./configure --prefix=/app/dropbear --sysconfdir=/etc/dropbear --disable-zlib
--prefix=/app/dropbear 指定安裝位置
--sysconfdir=/etc/dropbear 指定配置文件位置
--disable-zlib 關閉zlib功能
make && make install 編譯並且安裝
第三步:編譯完成後,進入安裝的指定目錄內
cd /app/dropbear
需要注意的是:
在INSTALL文件中,我們需要生成key,並且指定目錄,之後才能啓動服務
內容如下:
To run the server, you need to generate server keys, this is one-off:
./dropbearkey -t rsa -f dropbear_rsa_host_key ./dropbearkey -t dss -f dropbear_dss_host_key ./dropbearkey -t ecdsa -f dropbear_ecdsa_host_key
我們需要手動創建key文件,
mkdir /etc/dropbear ./dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
第四步:啓動dropbear
注意:
dropbear開啓時後臺開啓的,由於在本機上已經有ssh服務了,22端口已經被openssh佔用,所以,我們需要指定一個端口
dropbear -p 2222 (要確保此端口沒有被使用) 啓動服務
dropbear -p 2222 -FE 前臺執行,可以將錯誤日誌顯示在桌面上
dbclient是客戶端工具
dbclient 指定要連接的主機IP 默認連接的是22端口,我們也可以直接指定端口 -p port
第五步: 關閉dropbear
ps aux | grep dropbear
kill PID

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章