了解和配置 linux PAM
對于 Linux 用戶,安全地共享文件是一項麻煩的任務。例如,需要費力地回想多個密碼,并且重新設計系統(tǒng)訪問應用程序(如 login 、su 、password 、ftp 等)十分耗費時間。增加這一復
對于 Linux 用戶,安全地共享文件是一項麻煩的任務。例如,需要費力地回想多個密碼,并且重新設計系統(tǒng)訪問應用程序(如 login 、su 、password 、ftp 等)十分耗費時間。增加這一復雜度的是驗證 過程,在該過程中,系統(tǒng)將識別用戶并為該用戶提供相應的訪問控制。
PAM 的使用歷史記錄
PAM 是關注如何為服務驗證用戶的 API。在使用 PAM 之前,諸如 login (和 rlogin 、telnet 、rsh )之類的應用程序在 /etc/passwd 中查找用戶名,然后將兩者相比較并驗證用戶輸入的名稱。所有應用程序使用了這些共享服務,但是并未共享實現(xiàn)細節(jié)和配置這些服務的權限。
接下來,應用程序開發(fā)人員嘗試編寫自定義過程代碼。在此過程中,需要分離應用程序與安全模塊(通用安全模塊可以在應用程序之間共享并且可以根據(jù)需求進行配置)。
PAM 機制將把多個低級別驗證模式集成到高級別 API 中,該 API 將允許以獨立于底層驗證模式的方式編寫使用驗證的程序。PAM 的主要特征表現(xiàn)為通過 /etc/pam.d 或 /etc/pam.conf 文件實現(xiàn)動態(tài)驗證配置。
PAM 可以被配置為拒絕某些程序對用戶進行驗證,或者在某些程序嘗試驗證時發(fā)出警告。PAM 程序將使用 PAM 模塊(驗證模塊):這些模塊在運行時與應用程序綁定在一起才能工作。
圖 1 顯示了 PAM 模塊的基本流程。
圖 1. PAM 庫將解析配置文件并將模塊裝入其中
哪些操作系統(tǒng)支持 PAM?
PAM 最初是由 Sun Microsystems 于 1995 年開發(fā)的,并且以下操作系統(tǒng)版本(及更高版本)都提供支持:
?
?
?
?
?
?

RedHat 5.0 SUSE 6.2 Debian 2.2 Mandrake 5.2 Caldera 1.3 TurboLinux 3.6
,最新版本的 Solaris?、AIX?、HP-UX 和 Mac OS? X 也支持 PAM。PAM 后來被標準化為 X/Open UNIX? 標準化流程(在 X/Open 單點登錄服務(XSSO )架構中)的一部分。
我可以獲得哪種 PAM?
雖然沒有進行嚴格劃分,但是可以認為有三種 PAM:
1. Linux-PAM :Linux-PAM 涵蓋了本文中討論的所有 PAM。在任何一個 Linux 平臺中的 PAM 的主要結構都類似于 Linux-PAM 版本。
2. OpenPAM :OpenPAM 是由 NAI 實驗室的 Dag-Erling Smorgrav 開發(fā)的另一個 PAM 實現(xiàn),屬于 DARPA-CHATS 研究項目。由于它是開源的,因此它主要由 FreeBSD、NetBSD 及應用程序(加上 Mac OS X)使用。
3. Java ? PAM 或 JPam:PAM 主要是支持 Linux 和 UNIX 的標準驗證模塊。JPam 將 Java 部分與普通 PAM 聯(lián)系了起來。JPam 允許基于 Java 的應用程序使用 PAM 模塊或工具(如 auth 、account 、passwd 、session 等)。它提供了 JAAS 和直接 API,并且支持大多數(shù) Unix OS 和架構。
雖然這些是不同的 PAM,但是其主要功能仍然相同。
PAM 模塊是什么樣子的?
安裝 PAM 是一個逐步的過程。要獲得安裝說明,請參閱 參考資料。
PAM 模塊是按模塊類型歸類的。任何給定的模塊至少要實現(xiàn)四種模塊類型功能之一:
1. 驗證模塊用于驗證用戶或設置/銷毀憑證。
2. 帳戶管理模塊將執(zhí)行與訪問、帳戶及憑證有效期、密碼限制/規(guī)則等有關的操作。
3. 會話管理模塊用于初始化和終止會話。
4. 密碼管理模塊將執(zhí)行與密碼更改/更新有關的操作。
PAM 將提供不同的功能,例如單點登錄驗證、訪問控制等。每個功能的實現(xiàn)都是由不同的模塊處理的。下面是一些主要模塊:
?
?
?
?
?
?
?
? pam_access 將使用登錄名/域名,根據(jù) /etc/security/access.conf 中的預定義規(guī)則交付日志守護進程樣式的登錄訪問控制。 pam_cracklib 將根據(jù)密碼規(guī)則檢查密碼。 pam_env sets/unsets 環(huán)境變量來自 /etc/security/pam_env_conf。 pam_debug 將調試 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),這些模塊將獲取返回的一組值(這些模塊的詳細信息可以在 參考資料 的 PAM 管理指南中找到)。
回頁首
配置 PAM
PAM 配置通常是在 /etc/pam.d 或 /etc/pam.conf(用于舊版本)中的配置文件中實現(xiàn)的。
配置文件的結構
對于使用 PAM 的各項服務,目錄中都有一個對應的文件,其中包含應當如何獲取該服務的驗證及帳戶信息的規(guī)則或說明。通常每一行有一個規(guī)則。 PAM 配置文件中的字段包括:
?
?
?
?
? Service_name 將指定服務/應用程序的名稱(默認值為 OTHER)。 Module_type 將為 Service_name 字段中的相應服務指定模塊類型(auth/account/session/passwd)。 Control_flag 將指定模塊的堆棧行為。它可以獲取諸如 requisite、required 、sufficient 和 optional 之類的值。 Module_path 將指定實現(xiàn)模塊的庫對象的路徑名稱。默認情況下,它將被設為 /lib/security。 Module_options/module_args(可選字段)將指定可以傳遞給服務模塊的選項或實參。
模塊將按照在配置文件中列出的順序被調用,這取決于每個條目允許的 Control_flag 的值。Control_flag 值包括:
Required :堆棧中的所有 Required 模塊必須看作一個成功的結果。如果一個或多個 Required 模塊失敗,則實現(xiàn)堆棧中的所有 Required 模塊,但是將返回第一個錯誤。
? Sufficient :如果標記為 sufficient 的模塊成功并且先前沒有
Required 或 sufficient 模塊失敗,則忽略堆棧中的所有其余模塊并返回成功。
? Optional :如果堆棧中沒有一個模塊是 required 并且沒有任何一個 sufficient 模塊成功,則服務/應用程序至少要有一個 optional 模塊成功。 ?
,PAM 配置文件示例
表 1 顯示了各種操作系統(tǒng)中的 PAM 配置文件的一些示例。
表 1. PAM 配置文件的世界
配置文件所在Control_fla系統(tǒng) 位置 類型 g
Red Hat /etc/pam.d auth required Red Hat /etc/pam.d account sufficient Red Hat /etc/pam.d session required AIX /etc/pam.con
f
auth required AIX /etc/pam.con
f
account required AIX /etc/pam.conpasswor
f d
required zSUSE
64-bit /etc/pam.con| f auth required
32-bit zSUSE
64-bit /etc/pam.con| f account required
32-bit zSUSE
64-bit /etc/pam.con| f session required
32-bit
Solari /etc/pam.cons f auth required
Solari /etc/pam.cons f account required
Solari /etc/pam.conpasswor s f d required
HP-UX /etc/pam.con
f
auth required HP-UX /etc/pam.con
f
account required HP-UX /etc/pam.conpasswor
f d required PAM 的 “other ” 文件
模塊
/lib/security/pam_unix.so /lib/security/pam_unix.so /lib/security/pam_limit.so
/usr/lib/security/pam_aix
/usr/lib/security/pam_aix
/usr/lib/security/pam_aix
/lib64/security/pam_unix.so |
/lib/security/pam_unix.so /lib64/security/pam_unix.so |
/lib/security/pam_unix.so /lib64/security/pam_unix.so |
/lib/security/pam_unix.so /usr/lib/security/pam_unix.so.
1 /usr/lib/security/pam_unix.so.
1 /usr/lib/security/pam_unix.so.
1
libpam_unix.so.1
libpam_unix.so.1
libpam_unix.so.1
,默認的 PAM 配置文件 /etc/pam.d 用于沒有明確配置的所有其他服務,并且可能是 PAM 所依賴的最簡單而又最健壯的默認文件。該文件內部類似如下所示: /etc/pam.d/other File
auth required pam_warn.so
auth required pam_deny.so
account required pam_warn.so
account required pam_deny.so
password required pam_warn.so
password required pam_deny.so
session required pam_warn.so
session required pam_deny.so
此文件非常簡單。對于所有模塊類型,Control_flag 都是一樣的:required 。調用兩個模塊:
1. 首先,調用 pam_warn.so 來記錄關于正在進行的嘗試的信息。
2. 然后調用 pam_deny.so 僅返回錯誤并防止發(fā)生任何類型的連接或驗證。 因此,使用 PAM 的所有服務都必須被明確配置為允許驗證;否則,嘗試將失敗。 設計簡單 PAM 登錄應用程序的 10 個步驟
這 10 個步驟可以幫助您實現(xiàn)自己的 PAM 應用程序并幫助您了解 PAM 會話的工作方式:
1. 包括 PAM 實現(xiàn)的頭文件(例如,pam_appl.h、pam_misc.h)。
2. 在 main 函數(shù)中,使用惟一的句柄初始化 PAM 庫 libpam.so(該庫將裝入應用程序的配置文件中指定的模塊)。
3. 嘗試驗證所有模塊并處理失敗場景。
4. 檢查用戶憑證和帳戶詳細信息。
5. 打開一個新 PAM 會話。
6. 為使用憑證的用戶設置環(huán)境。
7. 當用戶完成時,取消用戶環(huán)境。
8. 關閉 PAM 會話。
9. 從帶有句柄值的 libpam.so 庫中退出。
10. 退出。
結束語
依賴 PAM 來幫助把低級別驗證工作變?yōu)楦哂泄芾硇缘恼w,這大大簡化了這種安全機制。在本文中,您了解了:
,基本的 PAM 架構
? 如何配置 PAM 模塊
? 幫助理解工作原理的 PAM 登錄應用程序概述 ?
現(xiàn)在您可以接著了解使用 PAM 模塊的更多高級主題 — 請從下面的 參考資料 開始??
參考資料
學習
? 將提供關于系統(tǒng)管理問題、模塊編寫和應用程序開發(fā)的文檔。
這是來自 SUSE Linux Unofficial FAQ 的 PAM 觀點。
如果需要升級,Gentoo 提供了一本 。
查看一下 。
準備好了解使用 PAM 的更多高級主題了么?
o “A comparison of security subsystems on AIX, Linux, and Solaris ”(developerWorks ,2005 年 10 月):介紹 PAM 的工
作原理。
o “”(developerWorks ,2007 年 9 月):查看
與 PAM 模塊相關的部分。
o “”(developerWorks ,2006 年
5 月):查看 Linux 中的 PAM 如何與 LDAP 協(xié)作。
o “使用多實例化提高安全性”(developerWorks ,2008 年 2 月):
使用插入式驗證模塊保護私有數(shù)據(jù)。
o “LPI 202 考試準備,主題 210:網(wǎng)絡客戶端管理”
(developerWorks ,2006 年 5 月):配置 PAM 來支持驗證。
o “PAM configuration on SUSE Enterprise Linux 9”(Technote
(IBM Tivoli Netcool/OMNIbus),2008 年 10 月):如何配置 PAM
模塊以允許 ObjectServer 驗證本地系統(tǒng)用戶。
? ? ? ?
? 在 尋找為 Linux 開發(fā)人員(包括 新手入門)準備的更多參考資料,查閱我們 最受歡迎的文章和教程。 在 developerWorks 上查閱所有 和 。
隨時關注 developerWorks 技術活動和網(wǎng)絡廣播。 ? ?
,獲得產(chǎn)品和技術
? 使用 構建下一個 Linux 開發(fā)項目,可以從 developerWorks 直接下載獲得。 討論
? 通過博客、論壇、podcasts 和空間加入 。