插入式驗證模塊(Pluggable Authentication Module,PAM)API 將公開一組功能,應(yīng)用程序程序員可以使用這些功能來實現(xiàn)與安全性相關(guān)的功能,例如用戶驗證、數(shù)據(jù)加密、LDAP 等。在本文中,獲得在 Linux 中使用 PAM 模塊的基本指南,了解如何配置 PAM,并了解如何通過 10 個簡單步驟設(shè)計樣例 PAM 登錄應(yīng)用程序。
對于 Linux 用戶,安全地共享文件是一項麻煩的任務(wù)。例如,需要費力地回想多個密碼,并且重新設(shè)計系統(tǒng)訪問應(yīng)用程序(如 login、su、password、ftp 等)十分耗費時間。增加這一復(fù)雜度的是驗證 過程,在該過程中,系統(tǒng)將識別用戶并為該用戶提供相應(yīng)的訪問控制。
PAM 是關(guān)注如何為服務(wù)驗證用戶的 API。在使用 PAM 之前,諸如 login(和 rlogin、telnet、rsh)之類的應(yīng)用程序在 /etc/passwd
中查找用戶名,然后將兩者相比較并驗證用戶輸入的名稱。所有應(yīng)用程序使用了這些共享服務(wù),但是并未共享實現(xiàn)細(xì)節(jié)和配置這些服務(wù)的權(quán)限。
接下來,應(yīng)用程序開發(fā)人員嘗試編寫自定義過程代碼。在此過程中,需要分離應(yīng)用程序與安全模塊(通用安全模塊可以在應(yīng)用程序之間共享并且可以根據(jù)需求進(jìn)行配置)。
PAM 機制將把多個低級別驗證模式集成到高級別 API 中,該 API 將允許以獨立于底層驗證模式的方式編寫使用驗證的程序。PAM 的主要特征表現(xiàn)為通過 /etc/pam.d
或 /etc/pam.conf
文件實現(xiàn)動態(tài)驗證配置。
PAM 可以被配置為拒絕某些程序?qū)τ脩暨M(jìn)行驗證,或者在某些程序嘗試驗證時發(fā)出警告。PAM 程序?qū)⑹褂?PAM 模塊(驗證模塊):這些模塊在運行時與應(yīng)用程序綁定在一起才能工作。
圖 1 顯示了 PAM 模塊的基本流程。
PAM 最初是由 Sun Microsystems 于 1995 年開發(fā)的,并且以下操作系統(tǒng)版本(及更高版本)都提供支持:
最新版本的 Solaris™、AIX®、HP-UX 和 Mac OS® X 也支持 PAM。PAM 后來被標(biāo)準(zhǔn)化為 X/Open UNIX® 標(biāo)準(zhǔn)化流程(在 X/Open 單點登錄服務(wù)(XSSO)架構(gòu)中)的一部分。
雖然沒有進(jìn)行嚴(yán)格劃分,但是可以認(rèn)為有三種 PAM:
雖然這些是不同的 PAM,但是其主要功能仍然相同。
安裝 PAM 是一個逐步的過程。要獲得安裝說明,請參閱 參考資料。
PAM 模塊是按模塊類型歸類的。任何給定的模塊至少要實現(xiàn)四種模塊類型功能之一:
PAM 將提供不同的功能,例如單點登錄驗證、訪問控制等。每個功能的實現(xiàn)都是由不同的模塊處理的。下面是一些主要模塊:
pam_access
將使用登錄名/域名,根據(jù) /etc/security/access.conf 中的預(yù)定義規(guī)則交付日志守護(hù)進(jìn)程樣式的登錄訪問控制。 pam_cracklib
將根據(jù)密碼規(guī)則檢查密碼。 pam_env sets/unsets
環(huán)境變量來自 /etc/security/pam_env_conf。 pam_debug
將調(diào)試 PAM。 pam_deny
將拒絕 PAM 模塊。 pam_echo
將打印消息。 pam_exec
將執(zhí)行外部命令。 pam_ftp
是匿名訪問模塊。 pam_localuser
要求將用戶列于 /etc/passwd 中。 pam_unix
將通過 /etc/passwd
提供傳統(tǒng)密碼驗證。 還有許多其他模塊(pam_userdb
、pam_warn
、pam_xauth
),這些模塊將獲取返回的一組值(這些模塊的詳細(xì)信息可以在 參考資料 的 PAM 管理指南中找到)。
PAM 配置通常是在 /etc/pam.d
或 /etc/pam.conf
(用于舊版本)中的配置文件中實現(xiàn)的。
對于使用 PAM 的各項服務(wù),目錄中都有一個對應(yīng)的文件,其中包含應(yīng)當(dāng)如何獲取該服務(wù)的驗證及帳戶信息的規(guī)則或說明。通常每一行有一個規(guī)則。
PAM 配置文件中的字段包括:
Service_name
將指定服務(wù)/應(yīng)用程序的名稱(默認(rèn)值為 OTHER)。 Module_type
將為 Service_name
字段中的相應(yīng)服務(wù)指定模塊類型(auth/account/session/passwd
)。 Control_flag
將指定模塊的堆棧行為。它可以獲取諸如 requisite
、required
、sufficient
和 optional
之類的值。 Module_path
將指定實現(xiàn)模塊的庫對象的路徑名稱。默認(rèn)情況下,它將被設(shè)為 /lib/security
。 Module_options
/module_args
(可選字段)將指定可以傳遞給服務(wù)模塊的選項或?qū)崊ⅰ?模塊將按照在配置文件中列出的順序被調(diào)用,這取決于每個條目允許的 Control_flag
的值。Control_flag 值包括:
表 1 顯示了各種操作系統(tǒng)中的 PAM 配置文件的一些示例。
系統(tǒng) | 配置文件所在位置 | 類型 | Control_flag | 模塊 |
---|---|---|---|---|
Red Hat | /etc/pam.d | auth | required | /lib/security/pam_unix.so |
Red Hat | /etc/pam.d | account | sufficient | /lib/security/pam_unix.so |
Red Hat | /etc/pam.d | session | required | /lib/security/pam_limit.so |
AIX | /etc/pam.conf | auth | required | /usr/lib/security/pam_aix |
AIX | /etc/pam.conf | account | required | /usr/lib/security/pam_aix |
AIX | /etc/pam.conf | password | required | /usr/lib/security/pam_aix |
zSUSE 64-bit | 32-bit | /etc/pam.conf | auth | required | /lib64/security/pam_unix.so | /lib/security/pam_unix.so |
zSUSE 64-bit | 32-bit | /etc/pam.conf | account | required | /lib64/security/pam_unix.so | /lib/security/pam_unix.so |
zSUSE 64-bit | 32-bit | /etc/pam.conf | session | required | /lib64/security/pam_unix.so | /lib/security/pam_unix.so |
Solaris | /etc/pam.conf | auth | required | /usr/lib/security/pam_unix.so.1 |
Solaris | /etc/pam.conf | account | required | /usr/lib/security/pam_unix.so.1 |
Solaris | /etc/pam.conf | password | required | /usr/lib/security/pam_unix.so.1 |
HP-UX | /etc/pam.conf | auth | required | libpam_unix.so.1 |
HP-UX | /etc/pam.conf | account | required | libpam_unix.so.1 |
HP-UX | /etc/pam.conf | password | required | libpam_unix.so.1 |
默認(rèn)的 PAM 配置文件 /etc/pam.d
用于沒有明確配置的所有其他服務(wù),并且可能是 PAM 所依賴的最簡單而又最健壯的默認(rèn)文件。該文件內(nèi)部類似如下所示:
/etc/pam.d/other File |
此文件非常簡單。對于所有模塊類型,Control_flag 都是一樣的:required
。調(diào)用兩個模塊:
pam_warn.so
來記錄關(guān)于正在進(jìn)行的嘗試的信息。 pam_deny.so
僅返回錯誤并防止發(fā)生任何類型的連接或驗證。 因此,使用 PAM 的所有服務(wù)都必須被明確配置為允許驗證;否則,嘗試將失敗。
設(shè)計簡單 PAM 登錄應(yīng)用程序的 10 個步驟
這 10 個步驟可以幫助您實現(xiàn)自己的 PAM 應(yīng)用程序并幫助您了解 PAM 會話的工作方式:
main
函數(shù)中,使用惟一的句柄初始化 PAM 庫 libpam.so(該庫將裝入應(yīng)用程序的配置文件中指定的模塊)。 依賴 PAM 來幫助把低級別驗證工作變?yōu)楦哂泄芾硇缘恼w,這大大簡化了這種安全機制。在本文中,您了解了:
現(xiàn)在您可以接著了解使用 PAM 模塊的更多高級主題 — 請從下面的 參考資料 開始……
學(xué)習(xí)