安全稽核時需快速排查:
root 外是否還有 UID 0 的帳號(隱藏超級用戶)。awk -F: '$3 == 0 {print $1}' /etc/passwd
輸出範例:
root
toor
解讀: 正常僅應有 root。若出現其他名稱,立即審查來源、鎖定或刪除。
awk -F: 'length($2) == 2 {print $1}' /etc/shadow
原理: CentOS/RHEL 等系統採用 SHA-512 雜湊,$6$ 開頭,長度遠大於 2。空密碼在 /etc/shadow 第二欄通常顯示為 !! 或 *(長度 2),或早期 DES 雜湊僅 13 字元。length($2) == 2 能快速捕捉 !! 情況。
更嚴謹的檢測(兼容多種雜湊):
awk -F: '$2 ~ /^!!$/ || $2 ~ /^\*$/ || length($2) < 13 {print $1}' /etc/shadow
#!/bin/bash
# audit_accounts.sh
echo "=== UID 0 帳號 ==="
awk -F: '$3 == 0 {print " " $1}' /etc/passwd
echo -e "\n=== 空密碼/弱雜湊帳號 ==="
awk -F: '$2 ~ /^!!$/ || $2 ~ /^\*$/ || length($2) < 13 {print " " $1 " (" $2 ")"}' /etc/shadow
echo -e "\n=== 密碼未設定過期策略的帳號(建議 90 天)==="
awk -F: '$5 == "" || $5 > 90 {print " " $1 " (max age: " $5 ")"}' /etc/shadow
| 問題 | 處理指令 |
|---|---|
| 多餘 UID 0 用戶 | usermod -u <新UID> <用戶名> 或 userdel -r <用戶名> |
| 空密碼帳號 | passwd -l <用戶名> 鎖定,或 passwd <用戶名> 設定強密碼 |
| 無密碼過期策略 | chage -M 90 <用戶名> 設定最長 90 天 |
兩條 awk 單行指令即可完成核心帳號安全基線掃描。建議納入每日巡檢腳本、配合 auditd 審計、定期輸出報表,做到「早發現、早修復、留痕跡」。