面對日益嚴峻的網路威脅,Linux 伺服器的基礎安全強化是運維工作的重中之重。本文系統梳理賬號管控、密碼策略、審計追蹤、權限提升機制四大核心維度,提供可落地的配置標準與最佳實踐。
針對系統服務賬號(如 daemon、mail、games 等),應將登入 Shell 設為 /sbin/nologin 或 /usr/sbin/nologin:
usermod -s /sbin/nologin daemon
usermod -s /sbin/nologin mail
批次處理腳本範例:
for user in $(awk -F: '$3 < 1000 && $7 != "/sbin/nologin" && $7 != "/bin/false" {print $1}' /etc/passwd); do
usermod -s /sbin/nologin "$user"
done
usermod -L username 或 passwd -l usernamelastlog -b 90userdel -r username(-r 同時刪除家目錄與郵件佇列)使用 chattr +i 鎖定核心認證檔案,防止竄改:
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
lsattr /etc/passwd /etc/shadow # 驗證輸出應含 'i' 屬性
操作前必讀:鎖定後無法新增/刪除使用者、修改密碼,維護窗口期間需先 chattr -i 解鎖,完畢後立即恢復。
編輯 /etc/login.defs 設定全域密碼策略:
PASS_MAX_DAYS 90 # 密碼最大使用天數
PASS_MIN_DAYS 7 # 密碼最小變更間隔天數
PASS_MIN_LEN 12 # 密碼最小長度
PASS_WARN_AGE 14 # 到期前警告天數
安裝 libpam-pwquality(Debian/Ubuntu)或 pam_pwquality.so(RHEL/CentOS),編輯 /etc/pam.d/common-password 或 /etc/pam.d/system-auth:
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 difok=3 enforce_for_root
參數說明:至少 12 字元、含 1 個數字、1 個大寫、1 個小寫、1 個特殊字元、新舊密碼至少 3 字元不同、root 同樣強制。
chage -d 0 username # 下次登入強制修改
chage -M 90 username # 設定單一使用者最大天數
編輯 /etc/profile(全域)或 ~/.bashrc(用戶級):
export HISTSIZE=1000 # 記憶體中保留條數
export HISTFILESIZE=2000 # 檔案中保留條數
export HISTTIMEFORMAT="%F %T " # 含時間戳記
export HISTCONTROL=ignoredups:erasedups # 忽略重複、刪除重複
export PROMPT_COMMAND="history -a" # 即時追加寫入檔案
~/.bash_logout:
history -c
clear
~/.bash_profile 或 /etc/profile.d/timeout.sh:
export TMOUT=600 # 600 秒無操作自動登出(僅對互動式 Shell 生效)
readonly TMOUT
編輯 /etc/pam.d/su,啟用 pam_wheel.so:
auth required pam_wheel.so use_uid group=wheel
將受信任管理員加入 wheel 群組:
gpasswd -a adminuser wheel
使用 visudo 編輯 /etc/sudoers 或 /etc/sudoers.d/ 下建立專屬規則檔:
# 允許 webadmin 以 www-data 身分重啟 nginx,免密
webadmin ALL=(www-data) NOPASSWD: /bin/systemctl reload nginx
# 允許 dba 執行資料庫備份腳本,需輸入自身密碼
dba ALL=(postgres) /usr/local/bin/pg_backup.sh
# 禁止高風險指令
Cmnd_Alias DANGEROUS = /bin/rm -rf /, /sbin/mkfs*, /sbin/fdisk*, /usr/bin/passwd root
adminuser ALL=ALL, !DANGEROUS
確保 /etc/sudoers 含:
Defaults logfile="/var/log/sudo.log"
Defaults log_input, log_output # 記錄輸入/輸出(需磁碟空間,謹慎啟用)
定期審閱 /var/log/secure(RHEL)或 /var/log/auth.log(Debian)中的 su/sudo 記錄。
lynis audit system)定期自動掃描auditd 監控敏感系統呼叫(auditctl -w /etc/passwd -p wa -k passwd_changes)安全非一次性設定,而是持續演進的過程。建立基線、自動化合規檢查、最小權限原則、完整審計日誌,四大支柱缺一不可。將上述措施納入 Ansible/Playbook 或 Terraform 模組,實現基礎設施即代碼的安全交付。