為了顯示 PAM 實際運作的理論,請將 sshd 的 PAM 組態當做實際範例:
範例 27.1. sshd 的 PAM 組態
#%PAM-1.0 auth include common-auth auth required pam_nologin.so account include common-account password include common-password session include common-session # Enable the following line to get resmgr support for # ssh sessions (see /usr/share/doc/packages/resmgr/README.SuSE) #session optional pam_resmgr.so fake_ttyname
典型的應用程式 (本例中為 sshd) PAM 組態會包含四個 include 陳述式,它們參照四個模組類型的組態檔:common-auth
、common-account
、common-password
和 common-session
。這四個檔案具有每個模組類型的預設組態。藉由包括它們而不是為每個 PAM 應用程式分別呼叫每個模組,這樣如果管理員變更預設值,就會自動取得更新的 PAM 組態。在以前,當 PAM 有變更或是安裝新應用程式時,必須為所有的應用程式手動調整所有的組態檔案。現在 PAM 組態是由中央的組態檔案組成,每個服務的 PAM 組態都會自動繼承所有的變更內容。
第一個 include 檔案 (common-auth
) 會呼叫 auth
類型的兩個檔案:pam_env
與 pam_unix2
。請參閱範例 27.2 「auth 區段的預設組態
」。
第一個 pam_env
會載入 /etc/security/pam_env.conf
檔案,以根據此檔案的指定來設定環境變數。這可用來將 DISPLAY
變數設為正確的值,因為 pam_env
模組知道登入正在發生的位置。第一個模組 pam_unix2
會根據 /etc/passwd
與 /etc/shadow
檢查使用者的登入名稱與密碼。
在成功地呼叫 common-auth
中所指定的模組後,第三個模組會呼叫 pam_nologin
,以檢查 /etc/nologin
是否存在。如果它存在,則除了 root
以外的使用者都不能登入。在處理完 auth
模組的整個堆疊後,sshd 才會收到關於登入是否成功的回應。假定堆疊的所有模組都有 required
控制旗標,則必須成功地處理完所有的模組後,sshd 才會收到成功結果的訊息。如果其中一個模組沒有成功,仍然會處理整個模組堆疊,並且會在此時通知 sshd 失敗的結果。
只要已成功處理 auth
類型的所有模組,就會處理另一個 include 陳述式,在此例為 範例 27.3 「account
區段的預設組態」 中的陳述式。common-account
只包含一個模組:pam_unix2
。如果 pam_unix2
傳回的結果是使用者存在,則 sshd 會收到此已成功的訊息,而且會接著處理下一個堆疊的模組 (password
),如 範例 27.4 「password
區段的預設組態」 中所示。
範例 27.4. password
區段的預設組態
password required pam_pwcheck.so nullok password required pam_unix2.so nullok use_first_pass use_authtok #password required pam_make.so /var/yp
此外,sshd 的 PAM 組態只有一個 include 陳述式參照 password
模組的預設組態,它是在 common-password
中。不論應用程式何時要求變更驗證權杖,這些模組皆必須順利完成 (控制旗標 required
)。變更密碼或另一個驗證權杖時,必需做安全性檢查。這是以 pam_pwcheck
模組來達成。之後使用的 pam_unix2
模組會沿用任何 pam_pwcheck
的舊密碼或新密碼,因此使用者不必再進行驗證。這也使人無法規避 pam_pwcheck
所執行的檢查。當 account
或 auth
類型前面的模組是設定成會針對過期密碼發出警告時,就應該使用 password
類型的模組。
範例 27.5. session
區段的預設組態
session required pam_limits.so session required pam_unix2.so session optional pam_umask.so
最後一個步驟會呼叫與 common-session
檔案繫結在一起的 session
類型的模組,以便根據有問題的使用者之設定值來設定工作階段。雖然會已再次處理 pam_unix2
,但是由於在此模組 pam_unix2.conf
的個別組態中指定了 none
選項,所以不會有實際的結果。pam_limits
模組會載入 /etc/security/limits.conf
檔案,它可以定義某些系統資源的使用限制。當使用者登出時,會再次呼叫工作階段
模組。