2010/10/22

PAM 轉錄

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。
==============================

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 相關的說明文件可在 /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

No comments: