PAM 配置檔

/etc/pam.conf 配置檔是由每一個 PAM 模組類型的服務項目組成,適合透過已定義的模組路徑路由服務。

本檔案中的項目是由下列以空格區隔的欄位所組成:
service_name module_type control_flag module_path module_options
這些欄位的說明如下:
service_name
指定服務的名稱。關鍵字 OTHER 是用來定義預設模組,以使用於項目中未指定的應用程式。
module_type
指定服務的模組類型。有效的模組類型為 authaccountsessionpassword。給定的模組將支援一個以上的模組類型。
control_flag
指定模組的堆疊行為。支援的控制旗標為 required、requisite、sufficient 或 optional。
module_path

指定服務要載入的模組。module_path 的有效值可以指定為模組的完整路徑,或只有模組名稱。如果已指定模組的完整路徑,則 PAM 檔案庫會使用該 module_path 來載入(若為 32 位元服務)或使用 64 子目錄(若為 64 位元服務)。 如果未指定模組的完整路徑,則 PAM 檔案庫會新增字首 /usr/lib/security(若為 32 位元服務)或 /usr/lib/security/64(若為 64 位元服務)至模組名稱。

module_options
指定可傳遞到服務模組的選項清單 (以空格區隔)。此欄位的值取決於 module_path 欄位中定義的模組所支援的選項。此欄位不是必填的。

PAM 程式庫會忽略格式不正確的項目或 module_typecontrol_flag 欄位的錯誤項目值。行首是以 # 記號字元開頭的項目也被忽略,因為這表示註解。

PAM 支援一個通常稱為「堆疊」的概念,可對每一個服務使用多個機制。堆疊在配置檔中的實作方式,是對服務 (具有相同 module_type 欄位) 建立多個項目。針對給定的服務,模組是以它們在檔案中列出的次序呼叫, 其最終結果由每個項目指定的 control_flag 欄位所決定。control_flag 欄位的有效值和堆疊中的對應行為如下:

control_flag 欄位的值 行為
required 堆疊中所有必要的模組必須通過才能有成功的結果。如果其中有一個以上的必要模組失敗,則會嘗試堆疊中所有必要模組,但會傳回第一個失敗的必要模組的錯誤。
requisite 類似於 required, 若 requisite 模組失敗,則不再處理堆疊中的模組,且會立即從 required 或 requisite 模組傳回第一個失敗碼。
sufficient 如果標上 sufficient 旗標的模組成功,且先前 required 或 sufficient 模組都未失敗,則堆疊中所有剩餘模組被忽略,並傳回成功。
optional 如果堆疊中沒有任何模組是必要的,且沒有任何 sufficient 模組成功,則該服務至少要有一個選用的模組成功才行。如果堆疊中的另一個模組成功,則選用的模組的失敗被忽略。
下列 /etc/pam.conf 子集是登入服務之 auth 模組類型堆疊的範例。
#
# PAM configuration file /etc/pam.conf
#

# Authentication Management
login   auth     required       /usr/lib/security/pam_ckfile    file=/etc/nologin
login   auth     required       /usr/lib/security/pam_aix
login   auth     optional       /usr/lib/security/pam_test      use_first_pass
OTHER   auth     required       /usr/lib/security/pam_prohibit
此配置檔範例包含登入服務的三個項目。指定必要的 pam_ckfilepam_aix 之後,將會執行這兩個模組,若最後要完全成功,也必須順利執行這兩個模組。虛構 pam_test 模組的第三個項目是選用的,它的成功與否並不會影響使用者是否能登入。pam_test 模組的選項 use_first_pass 必須使用之前輸入的密碼,而非提示輸入新密碼。

使用 OTHER 關鍵字作為服務名稱,能夠對配置檔中未明確宣告的其他任何服務設定預設值。設定預設值可確定某給定的模組類型的所有案例都至少有一個模組涵蓋。在這個範例中,除了登入之外,所有服務都會一直失敗,因於 pam_prohibit 模組會針對所有呼叫傳回 PAM 失敗。