PAM 驗證階段
PAM 驗證分成 4 個階段:
.auth : 驗證階段,驗證帳號密碼是否正確。
.account : 授權階段,判斷是否可以授權給該使用者,如密碼是否過期。
.password : 密碼變更方法,決定如何變更密碼。
.session : 工作階段,在程式的啟動或關閉階段要進行的工作,如登錄記錄檔。
雖然 PAM 的驗證分成 4 個階段,但是並不需要全部具備,有些甚至可能不適合使用某個階段,那就不能加到堆疊中。
==============================
PAM 控制旗標
PAM 堆疊是由數個模組所組成,模組的執行順序是由上而下循序執行,控制旗標是用來決定某個模組要如何影響堆疊的執行順序和最後驗證結果,控制旗標共有 5 種:
.required : 一定要通過的驗證模組,不管驗證通過或失敗,繼續執行以下的模組。
.requisite : 一定要通過的驗證模組,如果驗證通過則繼續執行以下的模組,驗證失敗則不再執行底下的模組,且回覆整個堆疊的驗證結果為失敗。
.sufficient : 如果此模組驗證通過,且前面的模組驗證都通過,則不用再驗證底下的模組,直接回覆整個堆疊的驗證結果為通過;如果此模組驗證失敗,則勿略此模組的驗證結果,且繼續執行底下的模組。
.optional : 與整個堆疊通過與否無關,通常做為初始化用的,如登錄記錄檔。
.include : 將別的檔案中「相同驗證階段」的模組內容包含進來當作堆疊的一部份,並執行驗證。
除了這 5 種控制旗標外,另有進階的控制旗標語法:
[default=bad success=ok ignore=ignore user_unknown=ignore]
此行旗標的意思是,在這個模組驗證中,因為 default 是 bad,所以模組中的所有驗證項目一定要通過 (即 required ),通過則為 ok,如果發生了「user_unknown」這個錯誤,則予以勿略,不會影響此模組的驗證結果。
也就是:除了 user_unknown 的錯誤以外,此模組是 required。
也就是:除了 user_unknown 的錯誤以外,此模組是 required。
==============================
PAM 堆疊的檔案結構
# cat /etc/pam.d/login
#%PAM-1.0
auth required pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so close
session include system-auth
session required pam_loginuid.so
session optional pam_console.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
欄一 欄二 欄三 欄四
驗證階段 控制旗標 使用的模組名稱 模組的參數
#%PAM-1.0
auth required pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so close
session include system-auth
session required pam_loginuid.so
session optional pam_console.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
欄一 欄二 欄三 欄四
驗證階段 控制旗標 使用的模組名稱 模組的參數
PAM 相關的說明文件可在 /usr/share/doc/pam-xxxx/html/ 或 /usr/share/doc/pam-xxxx/txts/ 之中找到。
==============================
system-auth 堆疊
/etc/pam.d/system-auth 是最常被 include 的 PAM 堆疊, 它的內容:
# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
No comments:
Post a Comment