歡迎您光臨本站 註冊首頁

了解和配置 PAM

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
插入式驗證模塊(Pluggable Authentication Module,PAM)API 將公開一組功能,應用程序程序員可以使用這些功能來實現與安全性相關的功能,例如用戶驗證、數據加密、LDAP 等。在本文中,獲得在 Linux 中使用 PAM 模塊的基本指南,了解如何配置 PAM,並了解如何通過 10 個簡單步驟設計樣例 PAM 登錄應用程序。

對於 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_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

PAM 的 “other” 文件

默認的 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 登錄應用程序概述(責任編輯:A6)


[火星人 ] 了解和配置 PAM已經有716次圍觀

http://coctec.com/docs/linux/show-post-68931.html