🧰 Linux PAM 與 sudo 權限安全控管指南
在 Linux 系統中,PAM(Pluggable Authentication Modules)與 sudo 是維運人員最常接觸的安全控管機制。透過靈活的模組化驗證架構與細緻的權限設定,我們能有效降低誤用與入侵風險,建立安全又彈性的管理環境。
📘 一、PAM 是什麼?
PAM(可插入式驗證模組)是 Linux 的核心安全框架,用於統一管理使用者登入、認證、密碼策略與帳號鎖定等動作。各服務(如 SSH、su、login)皆透過 PAM 進行身分驗證。
PAM 設定檔位置:
/etc/pam.d/
├── login
├── sshd
├── su
├── sudo
└── system-auth
每個服務都可使用不同 PAM 模組控制登入行為,如 pam_unix.so、pam_tally2.so、pam_faillock.so。
🧩 二、PAM 驗證流程解析
以 sshd 為例,登入時會依序執行以下模組:
- auth:使用者身份驗證。
- account:帳號狀態與到期檢查。
- password:密碼變更規範。
- session:登入與登出階段動作。
範例設定(/etc/pam.d/sshd):
auth required pam_sepermit.so
auth substack password-auth
account required pam_nologin.so
session required pam_selinux.so close
session required pam_loginuid.so
---
🔐 三、帳號鎖定與登入次數限制
使用 pam_faillock 模組可防止暴力破解登入:
auth required pam_faillock.so preauth silent deny=3 unlock_time=300
auth [default=die] pam_faillock.so authfail
account required pam_faillock.so
這代表:連續 3 次登入失敗會鎖定帳號 5 分鐘。 可用下列指令查詢鎖定狀態:
pam_tally2 --user username
faillock --user username
---
🧱 四、sudo 權限控管原則
sudo 讓一般使用者以受限方式執行管理員指令,是最重要的權限管理工具。
編輯 sudoers:
sudo visudo
常見設定範例:
# 允許 user1 使用 root 權限執行所有指令
user1 ALL=(ALL) ALL
# 限制 group admin 只能重啟服務
%admin ALL=(ALL) /bin/systemctl restart *
# 禁止特定指令
user2 ALL=(ALL) ALL, !/bin/rm
查看目前使用者的 sudo 權限:
sudo -l
---
🧠 五、提升 sudo 與 PAM 的安全層級
- 使用 visudo 編輯,避免語法錯誤導致鎖死。
- 在 PAM 中整合
pam_faillock.so以限制 sudo 登入次數。 - 開啟 sudo 日誌:在
/etc/sudoers加入Defaults logfile="/var/log/sudo.log" - 建議搭配 auditd 或 Rsyslog 收集 sudo 使用紀錄。
🛡 六、與系統安全模組整合(Fail2Ban / Rsyslog)
將 sudo 與 PAM 鎖定事件導入 Rsyslog,可搭配 Fail2Ban 進行防護:
# /etc/rsyslog.d/sudo.conf
if $programname == 'sudo' then /var/log/sudo.log
& stop
Fail2Ban 可透過 /etc/fail2ban/filter.d/sudo.conf 偵測可疑 sudo 嘗試,自動封鎖 IP。
📘 結語
PAM 與 sudo 是 Linux 權限安全的兩大支柱。妥善運用這些模組,可防止暴力登入、權限濫用與未經授權操作。建議定期檢查 PAM 設定與 sudo 日誌,搭配 Fail2Ban、Rsyslog 等監控工具,即能構築穩固的多層防護體系。
🔗 延伸閱讀
— WWFandy・系統維運筆記
沒有留言: