章 16. 使用 PAM 驗證

內容目錄

16.1. PAM 組態檔的結構
16.2. sshd 的 PAM 組態
16.3. PAM 模組的組態
16.4. 如需詳細資訊

摘要

Linux 在驗證程序中將 PAM (可插式驗證模組,Pluggable Authentication Modules) 當做使用者與應用程式之間的溝通層。PAM 模組適用於整個系統,任何應用程式皆可要求。本章節說明模組驗證機制如何運作以及如何設定。

系統管理員與程式設計人員通常會想要限制系統某些部份的存取,或是限制應用程式某些功能的使用。若未使用 PAM,則每次引用新的驗證機制 (例如 LDAP 或 SAMBA) 時,就必須調整應用程式。然而這個程序相當耗費時間,而且容易產生錯誤。避免這些缺點的方法就是將應用程式與驗證機制區隔開來,並將驗證委託給集中管理的模組。如此一來每當需要新的驗證配置時,就能夠調整或撰寫適當的 PAM 模組以供有問題的程式使用。

每個依賴 PAM 機制的程式都有自己的組態檔,位置在 /etc/pam.d/programname 目錄。這些檔案是定義用來驗證的 PAM 模組。除此之外,在 /etc/security 之下具有大部份 PAM 模組的全域組態檔,它們定義出這些模組的精確行為 (這些範例包括 pam_env.confpam_pwcheck.confpam_unix2.conf 以及 time.conf)。每個應用程式使用 PAM 模組時,其實就是呼叫一組 PAM 函數,然後處理各種組態檔中的資訊,並將結果傳回呼叫的應用程式。


16.1. PAM 組態檔的結構

在 PAM 組態檔中的每一行最多包含四個資料欄:

 <模組類型> >控制旗標> <模組路徑> <選項> 

PAM 模組是以堆疊的方式處理。不同模組的類型就有不同的目的,例如,一個模組檢查密碼,另一個驗證存取系統的位置,還有一個則讀取使用者特定的設定值。PAM 共有四種不同類型的模組:

auth

此類型模組的目的就是要檢查使用者的驗證性。傳統上是以查詢密碼的方式來檢查,但是這也可以使用晶片卡或透過生物測定 (指紋或虹彩掃描) 來完成。

account

此類型的模組會檢查使用者是否具有使用所要求服務的一般權限。舉例而言,執行這類檢查是要確保沒有人可以用使用者已過期的帳戶登入。

password

此類型模組的目的就是要能夠變更驗證權杖。在大部份情況下,這個權杖是密碼。

工作階段

此類型的模組是用來管理和設定使用者的工作階段。模組在驗證之前和之後啟動,以便在系統日誌中註冊登入嘗試,並設定使用者的特定環境 (郵件帳戶、主目錄、系統限制等等)。

第二個資料欄包含多種控制旗標,它們會影響已啟動模組的行為:

required

具有此旗標的模組必須成功地處理完成後,才能開始進行驗證。具有 required 旗標的模組失敗後,需待所有具有相同旗標的其他模組處理完畢,使用者才會收到關於驗證嘗試失敗的訊息。

requisite

具有此旗標的模組也必須成功地處理,方式與具有 required 旗標的模組相似。然而在失敗時,具有此旗標的模組會對使用者發出立即回應,而且不會再處理其他的模組。當成功時,就會接著處理其他的模組,像是任何具有 required 旗標的模組。requisite 旗標可以當做基本的過濾器,檢查是否具備正確驗證所必需的條件。

sufficient

具有此旗標的模組經成功處理後,呼叫應用程式會收到關於成功的立即訊息,而且不會再處理其他的模組 (假設具有 required 旗標的模組之前沒有失敗)。具有 sufficient 旗標的模組若失敗並不會有直接的結果,這是因為任何後續的模組都是以個別的順序處理。

optional

具有此旗標的模組不論是成功或失敗都不會有任何直接的結果。這對於只想顯示訊息 (例如,通知使用者郵件已寄達),但不想採取任何進一步動作的模組而言非常有用 。

include

如果給予這個旗標,則指定為引數的檔案會在這個位置插入。

模組只要是位於 /lib/security 的預設目錄中即可,其路徑並不需要明確指定,(至於 SUSE Linux 所支援的所有 64 位元平台,目錄則為 /lib64/security)。第四個資料欄可能包含指定模組的選項,例如 debug (啟用除錯) 或 nullok (允許使用空密碼)。