了解和配置 linux PAM
對于 Linux 用戶,安全地共享文件是一項麻煩的任務。例如,需要費力地回想多個密碼,并且重新設計系統訪問應用程序(如 login 、su 、password 、ftp 等)十分耗費時間。增加這一復
對于 Linux 用戶,安全地共享文件是一項麻煩的任務。例如,需要費力地回想多個密碼,并且重新設計系統訪問應用程序(如 login 、su 、password 、ftp 等)十分耗費時間。增加這一復雜度的是驗證 過程,在該過程中,系統將識別用戶并為該用戶提供相應的訪問控制。
PAM 的使用歷史記錄
PAM 是關注如何為服務驗證用戶的 API。在使用 PAM 之前,諸如 login (和 rlogin 、telnet 、rsh )之類的應用程序在 /etc/passwd 中查找用戶名,然后將兩者相比較并驗證用戶輸入的名稱。所有應用程序使用了這些共享服務,但是并未共享實現細節和配置這些服務的權限。
接下來,應用程序開發人員嘗試編寫自定義過程代碼。在此過程中,需要分離應用程序與安全模塊(通用安全模塊可以在應用程序之間共享并且可以根據需求進行配置)。
PAM 機制將把多個低級別驗證模式集成到高級別 API 中,該 API 將允許以獨立于底層驗證模式的方式編寫使用驗證的程序。PAM 的主要特征表現為通過 /etc/pam.d 或 /etc/pam.conf 文件實現動態驗證配置。
PAM 可以被配置為拒絕某些程序對用戶進行驗證,或者在某些程序嘗試驗證時發出警告。PAM 程序將使用 PAM 模塊(驗證模塊):這些模塊在運行時與應用程序綁定在一起才能工作。
圖 1 顯示了 PAM 模塊的基本流程。
圖 1. PAM 庫將解析配置文件并將模塊裝入其中
哪些操作系統支持 PAM?
PAM 最初是由 Sun Microsystems 于 1995 年開發的,并且以下操作系統版本(及更高版本)都提供支持:
?
?
?
?
?
?
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 開發的另一個 PAM 實現,屬于 DARPA-CHATS 研究項目。由于它是開源的,因此它主要由 FreeBSD、NetBSD 及應用程序(加上 Mac OS X)使用。
3. Java ? PAM 或 JPam:PAM 主要是支持 Linux 和 UNIX 的標準驗證模塊。JPam 將 Java 部分與普通 PAM 聯系了起來。JPam 允許基于 Java 的應用程序使用 PAM 模塊或工具(如 auth 、account 、passwd 、session 等)。它提供了 JAAS 和直接 API,并且支持大多數 Unix OS 和架構。
雖然這些是不同的 PAM,但是其主要功能仍然相同。
PAM 模塊是什么樣子的?
安裝 PAM 是一個逐步的過程。要獲得安裝說明,請參閱 參考資料。
PAM 模塊是按模塊類型歸類的。任何給定的模塊至少要實現四種模塊類型功能之一:
1. 驗證模塊用于驗證用戶或設置/銷毀憑證。
2. 帳戶管理模塊將執行與訪問、帳戶及憑證有效期、密碼限制/規則等有關的操作。
3. 會話管理模塊用于初始化和終止會話。
4. 密碼管理模塊將執行與密碼更改/更新有關的操作。
PAM 將提供不同的功能,例如單點登錄驗證、訪問控制等。每個功能的實現都是由不同的模塊處理的。下面是一些主要模塊:
?
?
?
?
?
?
?
? pam_access 將使用登錄名/域名,根據 /etc/security/access.conf 中的預定義規則交付日志守護進程樣式的登錄訪問控制。 pam_cracklib 將根據密碼規則檢查密碼。 pam_env sets/unsets 環境變量來自 /etc/security/pam_env_conf。 pam_debug 將調試 PAM。 pam_deny 將拒絕 PAM 模塊。 pam_echo 將打印消息。 pam_exec 將執行外部命令。 pam_ftp 是匿名訪問模塊。
,pam_localuser 要求將用戶列于 /etc/passwd 中。
? pam_unix 將通過 /etc/passwd 提供傳統密碼驗證。 ?
還有許多其他模塊(pam_userdb、pam_warn、pam_xauth),這些模塊將獲取返回的一組值(這些模塊的詳細信息可以在 參考資料 的 PAM 管理指南中找到)。
回頁首
配置 PAM
PAM 配置通常是在 /etc/pam.d 或 /etc/pam.conf(用于舊版本)中的配置文件中實現的。
配置文件的結構
對于使用 PAM 的各項服務,目錄中都有一個對應的文件,其中包含應當如何獲取該服務的驗證及帳戶信息的規則或說明。通常每一行有一個規則。 PAM 配置文件中的字段包括:
?
?
?
?
? Service_name 將指定服務/應用程序的名稱(默認值為 OTHER)。 Module_type 將為 Service_name 字段中的相應服務指定模塊類型(auth/account/session/passwd)。 Control_flag 將指定模塊的堆棧行為。它可以獲取諸如 requisite、required 、sufficient 和 optional 之類的值。 Module_path 將指定實現模塊的庫對象的路徑名稱。默認情況下,它將被設為 /lib/security。 Module_options/module_args(可選字段)將指定可以傳遞給服務模塊的選項或實參。
模塊將按照在配置文件中列出的順序被調用,這取決于每個條目允許的 Control_flag 的值。Control_flag 值包括:
Required :堆棧中的所有 Required 模塊必須看作一個成功的結果。如果一個或多個 Required 模塊失敗,則實現堆棧中的所有 Required 模塊,但是將返回第一個錯誤。
? Sufficient :如果標記為 sufficient 的模塊成功并且先前沒有
Required 或 sufficient 模塊失敗,則忽略堆棧中的所有其余模塊并返回成功。
? Optional :如果堆棧中沒有一個模塊是 required 并且沒有任何一個 sufficient 模塊成功,則服務/應用程序至少要有一個 optional 模塊成功。 ?
,PAM 配置文件示例
表 1 顯示了各種操作系統中的 PAM 配置文件的一些示例。
表 1. PAM 配置文件的世界
配置文件所在Control_fla系統 位置 類型 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 僅返回錯誤并防止發生任何類型的連接或驗證。 因此,使用 PAM 的所有服務都必須被明確配置為允許驗證;否則,嘗試將失敗。 設計簡單 PAM 登錄應用程序的 10 個步驟
這 10 個步驟可以幫助您實現自己的 PAM 應用程序并幫助您了解 PAM 會話的工作方式:
1. 包括 PAM 實現的頭文件(例如,pam_appl.h、pam_misc.h)。
2. 在 main 函數中,使用惟一的句柄初始化 PAM 庫 libpam.so(該庫將裝入應用程序的配置文件中指定的模塊)。
3. 嘗試驗證所有模塊并處理失敗場景。
4. 檢查用戶憑證和帳戶詳細信息。
5. 打開一個新 PAM 會話。
6. 為使用憑證的用戶設置環境。
7. 當用戶完成時,取消用戶環境。
8. 關閉 PAM 會話。
9. 從帶有句柄值的 libpam.so 庫中退出。
10. 退出。
結束語
依賴 PAM 來幫助把低級別驗證工作變為更具有管理性的整體,這大大簡化了這種安全機制。在本文中,您了解了:
,基本的 PAM 架構
? 如何配置 PAM 模塊
? 幫助理解工作原理的 PAM 登錄應用程序概述 ?
現在您可以接著了解使用 PAM 模塊的更多高級主題 — 請從下面的 參考資料 開始??
參考資料
學習
? 將提供關于系統管理問題、模塊編寫和應用程序開發的文檔。
這是來自 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 協作。
o “使用多實例化提高安全性”(developerWorks ,2008 年 2 月):
使用插入式驗證模塊保護私有數據。
o “LPI 202 考試準備,主題 210:網絡客戶端管理”
(developerWorks ,2006 年 5 月):配置 PAM 來支持驗證。
o “PAM configuration on SUSE Enterprise Linux 9”(Technote
(IBM Tivoli Netcool/OMNIbus),2008 年 10 月):如何配置 PAM
模塊以允許 ObjectServer 驗證本地系統用戶。
? ? ? ?
? 在 尋找為 Linux 開發人員(包括 新手入門)準備的更多參考資料,查閱我們 最受歡迎的文章和教程。 在 developerWorks 上查閱所有 和 。
隨時關注 developerWorks 技術活動和網絡廣播。 ? ?
,獲得產品和技術
? 使用 構建下一個 Linux 開發項目,可以從 developerWorks 直接下載獲得。 討論
? 通過博客、論壇、podcasts 和空間加入 。