摘要
Linux 在驗證程序中將 PAM (可插式驗證模組,Pluggable Authentication Modules) 當做使用者與應用程式之間的溝通層。PAM 模組適用於整個系統,任何應用程式皆可要求。本章節說明模組驗證機制如何運作以及如何設定。
系統管理員與程式設計人員通常會想要限制系統某些部份的存取,或是限制應用程式某些功能的使用。如果沒有 PAM,則每次引用新的驗證機制 (例如 LDAP、Samba 或 Kerberos) 時都必須調整應用程式。然而這個程序相當耗費時間,而且容易產生錯誤。避免這些缺點的方法就是將應用程式與驗證機制區隔開來,並將驗證委託給集中管理的模組。如此一來每當需要新的驗證配置時,就能夠調整或撰寫適當的 PAM 模組以供有問題的程式使用。
每個依賴 PAM 機制的程式都有自己的組態檔,位置在 /etc/pam.d/
。這些檔案是定義用來驗證的 PAM 模組。除此之外,programname
/etc/security
之下還有幾個 PAM 模組的全域組態檔可以定義這些模組的精確行為 (這些範例包括 pam_env.conf
、pam_pwcheck.conf
、pam_unix2.conf
以及 time.conf
)。每個應用程式使用 PAM 模組時,其實就是呼叫一組 PAM 函數,然後處理各種組態檔中的資訊,並將結果傳回呼叫的應用程式。
在 PAM 組態檔中的每一行最多包含四個資料欄:
<Type of module> <Control flag> <Module path> <Options>
PAM 模組是以堆疊的方式處理。不同模組的類型就有不同的目的,例如,一個模組檢查密碼,另一個驗證存取系統的位置,還有一個則讀取使用者特定的設定值。PAM 共有四種不同類型的模組:
驗證
此類型模組的目的就是要檢查使用者的驗證性。傳統上是以查詢密碼的方式來檢查,但是這也可以使用晶片卡或透過生物測定 (指紋或虹彩掃描) 來完成。
帳戶
此類型的模組會檢查使用者是否具有使用所要求服務的一般權限。舉例而言,執行這類檢查是要確保沒有人可以用使用者已過期的帳戶登入。
密碼
此類型模組的目的就是要能夠變更驗證權杖。在大部份情況下,這個權杖是密碼。
工作階段
此類型的模組是用來管理和設定使用者的工作階段。模組在驗證之前和之後啟動,以便在系統日誌中註冊登入嘗試,並設定使用者的特定環境 (郵件帳戶、主目錄、系統限制等等)。
第二個資料欄包含多種控制旗標,它們會影響已啟動模組的行為:
需要
具有此旗標的模組必須成功地處理完成後,才能開始進行驗證。具有需要
旗標的模組失敗後,需待所有具有相同旗標的其他模組處理完畢,使用者才會收到關於驗證嘗試失敗的訊息。
必要
具有此旗標的模組也必須成功地處理,方式與具有需要
旗標的模組相似。然而在失敗時,具有此旗標的模組會對使用者發出立即回應,而且不會再處理其他的模組。當成功時,就會接著處理其他的模組,像是任何具有需要
旗標的模組。必要
旗標可以當做基本的過濾器,檢查是否具備正確驗證所必需的條件。
充分
具有此旗標的模組經成功處理後,呼叫應用程式會收到關於成功的立即訊息,而且不會再處理其他的模組 (假設具有需要
旗標的模組之前沒有失敗)。具有充分
旗標的模組若失敗並不會有直接的結果,這是因為任何後續的模組都是以個別的順序處理。
選擇性
具有此旗標的模組不論是成功或失敗都不會有任何直接的結果。這對於只想顯示訊息 (例如,通知使用者郵件已寄達),但不想採取任何進一步動作的模組而言非常有用。
如果給予這個旗標,則指定為引數的檔案會在這個位置插入。
模組只要是位於 /lib/security
的預設目錄中即可,其路徑並不需要明確指定,(至於 SUSE Linux EnterpriseŽ 所支援的所有 64 位元平台,目錄則為 /lib64/security
)。第四個資料欄可能包含指定模組的選項,例如 debug
(啟用除錯) 或 nullok
(允許使用空密碼)。