系統安全及應用
結構
賬號安全控制
系統引導和登入控制
弱口令檢測
埠掃描
賬號安全基本措施
系統賬號清理
將非登入使用者的Shell設為/sbin/nologinusermod -s /sbin/nologin使用者名稱鎖定長期不使用的賬號
usermod -L 使用者名稱 passwd -l 使用者名稱 passwd -S 使用者名稱刪除無用的賬號
userdel [-r] 使用者名稱鎖定賬號檔案passwd, shadow
chattr +i /etc/passwd /etc/shadow Isattr /etc/passwd /etc/shadow #鎖定檔案並檢視狀態 chattr -i/etc/passwd /etc/shadow #解鎖檔案
鎖定狀態下的檔案無法被修改
賬號安全基本措施
密碼安全控制
- 設定密碼有期
- 要求使用者下次登入時修改密碼
[root@localhost ~]# vi /etc/login.defs ####修改密碼配置檔案,適用於新建使用者 …… PASS_MAX_DAYS 30 [root@localhost ~]# chage -M 30 lisi [root@localhost ~]# cat /etc/shadow | grep lis
[root@localhost ~]# chage -d 0 zhangsan ####強制在下次登入時更改密碼,檔案中的第三個欄位被修改為0
[root@localhost ~]# cat /etc/shadow | grep zhangsan shadow
賬號安全基本措施
命令歷史限制
- 減少記錄的命令條數
- 登入時自動清空命令歷史
[root@localhost ~]# vi /etc/profile export HISTSIZE=200 ####將命令條數設定為200條 [root@localhost ~]# source /etc/profile [root@localhost ~]# vi ~/.bashrc echo " " > ~/.bash_history ####登陸時自動清空歷史命令,> ~/.bash_history 效果相同
終端自動登出
[root@localhost ~]# vi /etc/profile …… export TMOUT=600 ####閒置600秒自動登出 [root@localhost ~]# source /etc/profile
使用su命令切換使用者
用途及用法
- 用途: Substitute User,切換使用者
- 格式:
su -目標使用者
密碼驗證
- root →任意使用者,不驗證密碼
- 普通使用者 →其他使用者,驗證目標使用者的密碼
[jerry@localhost ~]$ su -root ####帶-選項表示將使用目標使用者的登入Shell環境 口令: [root@localhost ~]# whoami root
限制使用su命令的使用者
- 將允許使用su命令的使用者加入wheel組
- 啟用pam_wheel認證模組
[root@localhost ~]# gpasswd -a tsengyia wheel tsengyia ####正在將使用者"tsengyia"加入到"wheel"組中
檢視su操作記錄
安全日誌檔案:/var/log/secure
Linux中的PAM安全認證
su命令的安全隱患
- 預設情況下,任何使用者都允許使用su命令, 有機會反覆嘗試其他使用者(如root)的登入密碼,帶來安全風險
- 為了加強su命令的使用控制,可藉助於PAM認證模組,只允許極個別使用者使用su命令進行切換
PAM(Pluggable Authentication Modules)可插拔式認證模組
- 是一種高效而且靈活便利的使用者級別的認證方式
- 也是當前Linux伺服器普遍使用的認證方式
PAM認證原理
Linux-PAM,是linux可插拔認證模組,是一套可定製、可動態載入的共享庫,使本地系統管理員可以隨意選擇程式的認證方式。
PAM使用/etc/pam.d/下的配置檔案,來管理對程式的認證方式。應用程式呼叫相應的PAM配置檔案,從而呼叫本地的認證模組,模組放置在/lib64/security下,以載入動態庫的形式進行認證。比如使用su命令時,系統會提示輸入root使用者的密碼,這就是su命令通過呼叫PAM模組實現的。
PAM認證原理:
1.PAM認證一般遵循的順序: Service (服務)--> PAM (配置檔案)--> pam*.so
2.PAM認證首先要確定哪一項應用服務,然後載入相應的PAM的配置檔案(位於7etc/pam.d下),最後呼叫認證模組(位於/lib64/security/下)進行安全認證。
3.使用者訪問伺服器的時候,伺服器的某一個服務程式把使用者的請求傳送到PAM模組進行認證。不同的應用程式所對應的PAM模組也是不同的。
如果想檢視某個程式是否支援PAM認證,可以用ls命令進行檢視/etc/pam.d/
PAM的配置檔案中的每一行都是一個獨立的認證過程,它們按從上往下的順序依次由PAM模組呼叫。
一般遵循的順序
- Service (服務) →PAM (配置檔案)→pam_*so
首先要確定哪一項服務,然後載入相應的PAM的配置檔案(位於/etc/pam.d下),最後呼叫認證檔案(位於/lib64/security下)進行安全認證
使用者訪問伺服器時,伺服器的某一個服務程式把使用者的請求傳送到PAM模組進行認證
不同的應用程式所對應的PAM模組是不同的
PAM認證的構成
檢視某個程式是否支援PAM認證,可以用Is命令
- 示例: 檢視su是否支援PAM模組認證
ls /etc/pam.d | grep su
檢視su的PAM配置檔案: cat /etc/pam.d/su
第一列代表PAM認證模組型別
auth: 對使用者身份進行識別,如提示輸入密碼,判斷是否為root. account: 對賬號各項屬性進行檢查,如是否允許登入系統,帳號是否已經過期,是否達到最大使用者數等 password: 使用使用者資訊來更新資料,如修改使用者密碼。 session: 定義登入前以及退出後所要進行的會話操作管理,如登入連線資訊,使用者資料的開啟和關閉,掛載檔案系統。第二列代表PAM控制標記
required: 表示需要返回一個成功值,如果返回失敗,不會立刻將失敗結果返回,而是繼續進行同型別的下一驗證,所有此型別的模組都執行完成後,再返回失敗
requisite: 與required類似,但如果此模組返回失敗,則立刻返回失敗並表示此型別失敗。 sufficient: 如果此模組返回成功,則直接向程式返回成功,表示此類成功,如果失敗,也不影響這型別的返回值 optional: 不進行成功與否的返回,一般不用於驗證,只是顯示資訊(通常用於session型別)include: 表示在驗證過程中呼叫其他的PAM配置檔案。比如很多應用通過完整呼叫/etc/pam.d/system-auth (主要負責使用者登入系統的認證工作)來實現認證而不需要重新逐一去寫配置項
第三列代表PAM模組,預設是在/lib64/security/目錄下,如果不在此預設路徑下,要填寫絕對路徑
同一個模組,可以出現在不同的模組型別中,它在不同的型別中所執行的操作都不相同,這是由於每個模組針對不同的模組型別編制了不同的執行函式。第四列代表PAM模組的引數,這個需要根據所使用的模組來新增.
傳遞給模組的引數。引數可以有多個,之間用空格分隔開
PAM安全認證流程
控制型別也稱做Control Flags,用於PAM驗證型別的返回結果
1.required驗證失敗時仍然繼續,但返回Fail
2.requisite驗證失敗則立即結束整個驗證過程,返回Fail
3.sufficient驗證成功則立即返回,不再繼續,否則忽略結果並繼續
4.optional不用於驗證,只顯示資訊(通常用於session型別)
使用者1 | 使用者2 | 使用者3 | 使用者4 | |||
auth | required | 模組1 | pass | fail | pass | pass |
auth | sufficient | 模組2 | pass | pass | fail | pass |
auth | required | 模組3 | pass | pass | pass | fail |
結果 | pass | fail | pass | pass |
使用sudo機制提升許可權
su命令的缺點
- 預設情況下,任何使用者都允許使用su命令, 有機會反覆嘗試其他使用者(如root)的登入密碼,帶來安全風險
sudo命令的用途及用法
- 用途:以其他使用者身份(如root)執行授權的命令
- 用法:sudo 授權命令
配置sudo授權
visudo 或者 vi /etc/sudoers 記錄格式:使用者 主機名=命令程式vi /etc/sudoers (此檔案的預設許可權為440,儲存退出時必須執行":wq!"命令來強制操作)
語法格式:
使用者 主機名=命令程式列表
使用者 主機名=(使用者) 命令程式列表
- 使用者: 直接授權指定的使用者名稱,或採用"%組名"的形式(授權一個組的所有使用者)。
- 主機名: 使用此規則的主機名。沒配置過主機名時可用localhost,有配過主機名則用實際的主機名, ALL則代表所有主機
- (使用者): 使用者能夠以何種身份來執行命令。此項可省略,預設時以root使用者的身份來執行命令
- 命令程式列表: 允許授權的使用者通過sudo方式執行的特權命令,需填寫命令程式的完整路徑,多個命令之間以逗號","進行分隔。ALL則代表系統中的所有命令
示例:
Tom ALL=/sbin/ifconfig Jerry localhost=/sbin/*, !/sbin/reboot, !/sbin/poweroff #萬用字元"*"表示所有、取反符號"!"表示排除 %wheel ALL=NOPASSWD: ALL #表示wheel組成員無需驗證密碼即可使用sudo執行任何命令 Mike ALL=(root)NOPASSWD: /bin/kill, /usr/bin/killall 使用關鍵字User_Alias、Host_Alias、Cmnd_Alias來進行設定別名(別名必須為大寫) User_Alias USERS=Tom,Jerry,Mike Host_Alias HOSTS=localhost,bogon Cmnd_Alias CMNDS=/sbin/ifconfig, /usr/sbin/useradd, /usr/sbin/userdel USERS HOSTS=CMNDS #呼叫檢視sudo操作記錄
需啟用Defaults logfile配置 啟用sudo操作日誌[root@localhost ~]# visudo Defaults logfile = "/var/log/sudo“
啟用日誌配置以後,sudo操作過程才會被記錄
sudo -l 檢視使用者許可權
開關機安全控制
調整BIOS引導設定
- 將第一引導裝置設為當前系統所在硬碟
- 禁止從其他裝置(光碟、U盤、網路)引導系統
- 將安全級別設為setup,並設定管理員密碼
GRUB限制
- 使用grub2-mkpasswd-pbkdf2生成金鑰
- 修改/etc/grub.d/00-header檔案中,新增密碼記錄
- 生成新的grub.cfg配置檔案
限制更改GRUB引導引數
通常情況下在系統開機進入GRUB選單時,按e鍵可以檢視並修改GRUB引導引數,這對伺服器是一個極大的威脅。
可以為GRUB選單設定一個密碼,只有提供正確的密碼才被允許修改引導引數。
grub2-mkpasswd-pbkdf2 #根據提示設定GRUB選單的密碼 PBKDF2 hash of your password is grub.pbkdf2... #省略部分內容為經過加密生成的密碼字串 cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak cp /etc/grub.d/00_header /etc/grub.d/00_header.bak vim /etc/grub.d/00_header cat << EOF set superusers="root" #設定使用者名稱為root password_pbkdf2 root grub.pbkdf2... #設定密碼,省略部分內容為經過加密生成的密碼字串 EOFgrub2-mkconfig -o /boot/grub2/grub.cfg #生成新的grub.cfg檔案
重啟系統進入GRUB選單時,按e鍵將需要輸入賬號密碼才能修改引導引數。終端登入安全控制
在Linux系統中, login程式會讀取/etc/securetty檔案,以決定允許root使用者從哪些終端(安全終端)登入系統。限制root只在安全終端登入
- 安全終端配置: /etc/securetty
[root@localhost ~]# vi /etc/securetty …… #tty5 #tty6
禁止普通使用者登入
- 建立/etc/nologin檔案
- 刪除nologin檔案或重啟後即恢復正常
[root@localhost ~]# touch /etc/nologin ###禁止普通使用者登入 [root@localhost ~]# rm -f /etc/nologin ###取消上述登入限制
系統弱口令檢測
John the Ripper,簡稱為JR
- 一款密碼分析工具,支援字典式的暴力破解
- 通過對shadow檔案的口令分析,可以檢測密碼強度
- 官方網站: http://www.openwall.com/john/
#解壓工具包
cd /opt tar zxf john-1.8.0.tar.gz
#安裝軟體編譯工具
yum install -y gcc gcc-c++ make
#切換到src子目錄
cd /opt/john-1.8.0/src
#進行編譯安裝
make clean linux-x86-64
#準備待破解的密碼檔案
cp /etc/shadow /opt/shadow.txt
#執行暴力破解
cd /opt/john-1.8.0/run ./john /opt/shadow.txt
#檢視已破解出的賬戶列表
./john --show /opt/shadow. txt
#使用密碼字典檔案
> john.pot #清空已破解出的賬戶列表,以便重新分析 ./john --wordlist=./password.lst /opt/shadow.txt #使用指定的字典檔案進行破解
網路埠掃描
NMAP是一個強大的埠掃描類安全評測工具,支援ping掃描、多埠檢測等多種技術。
#安裝NMAP軟體包rpm -ga I grep nmap yum install -y nmap
nmap命令常用的選項和掃描型別
-p: 指定掃描的埠。 -n: 禁用反向DNS解析(以加快掃描速度)。 -ss: TCP的SYN掃描(半開掃描) ,只向目標發出SYN資料包,如果收到SYN/ACK響應包就認為目標埠正在監聽,並立即斷開連線;否則認為目標埠並未開放。 -ST: TCP連線掃描,這是完整的TCP掃描方式(預設掃描型別) ,用來建立一個TCP連線,如果成功則認為目標埠正在監聽服務,否則認為目標埠並未開放。 -SF: TCP的FIN掃描,開放的埠會忽略這種資料包,關閉的埠會迴應RST資料包。許多防火牆只對SYN資料包進行簡單過濾,而忽略了其他形式的TCP攻擊包。這種型別的掃描可間接檢測防火牆的健壯性。 -sU: UDP掃描,探測目標主機提供哪些UDP服務, UDP掃描的速度會比較慢。 -sP: ICMP掃描,類似於ping檢測,快速判斷目標主機是否存活,不做其他掃描。 -PO: 跳過ping檢測,這種方式認為所有的目標主機是存活的,當對方不響應ICMP請求時,使用這種方式可以避免因無法ping通而放棄掃描。netstat命令
netstat命令常用選項:
-a: 顯示主機中所有活動的網路連線資訊(包括監聽、非監聽狀態的服務埠) -n: 以數字的形式顯示相關的主機地址、埠等資訊。 -t: 檢視TCP相關的資訊。 -u: 顯示UDP協議相關的資訊。 -p: 顯示與網路連線相關聯的程序號、程序名稱資訊(該選項需要root許可權) -r: 顯示路由表資訊。 -l: 顯示處於監聽狀態的網路連線及埠資訊。netstat -natp 檢視正在執行的使用TCP協議的網路狀態資訊
netstat -naup 檢視正在執行的使用UDP協議的網路狀態資訊
其他示例:
#分別檢視本機開放的TCP埠、UDP埠
nmap -sT 127.0.0.1 nmap -sU 127.0.0.1#檢測192.168.80.0/24網段有哪些主機提供HTTP服務
nmap -p 80 192.168.80.0/24#檢測192.168.80.0/24網段有哪些存活主機
nmap -n -sP 192.168.80.0/24總結
賬號基本安全措施
- 系統賬號清理、密碼安全控制、命令歷史清理、自動登出
使用者切換與提權
- su, sudo
開關機安全控制
- BIOS引導設定、GRUB選單設定密碼