PAM

出自 Arch Linux 中文维基

Linux PAM (Pluggable Authentication Modules) 是一個系統級用戶認證框架。如下描述引用自 項目介紹:

PAM 將程序開發與認證方式進行分離,程序在運行時調用附加的「認證」模塊完成自己的工作。本地系統管理員通過配置選擇要使用哪些認證模塊。

本文描述在 Arch Linux 下為本地和遠端用戶配置 PAM 權限的方式方法。具體的細節配置方法將在專門的文章內展開。

安裝[編輯 | 編輯原始碼]

pam 包依賴於base meta package,默認已經安裝在系統。PAM 模塊被放置於 /usr/lib/security 目錄

軟件源中另外還包括其它一些可選的 PAM 包,詳見 #配置方法

配置[編輯 | 編輯原始碼]

/etc 目錄有多個子目錄與 PAM 相關,使用命令 pacman --query --list pam | grep /etc 查看默認創建的配置文件。這些配置與 #安全性參數#PAM 基礎配置 有關。

安全性參數[編輯 | 編輯原始碼]

/etc/security 包含了對認證方法參數的系統級配置,安裝後的文件與軟件開發方默認配置一致。

注意 Arch Linux 沒有對這些文件進行定製。例如 /etc/security/pwquality.conf 配置可用於系統級別默認的密碼認證方式,但需要手動將 pam_pwquality.so 模塊加入到 #PAM 基礎配置 內。

詳見 #安全性參數配置

PAM 基礎配置[編輯 | 編輯原始碼]

/etc/pam.d/ 目錄專門用於存放 PAM 配置,用於為具體的應用程式設置獨立的認證方式。配置文件由以下安裝包提供:

  • pambase 安裝包,提供了 Arch Linux 中為應用程式使用的 PAM 基礎配置文件
  • 其它基礎安裝包。例如 util-linux 添加了為 login 及其它一些應用的認證配置, shadow 安裝包為 Arch Linux 提供默認的用戶數據庫認證方式(參見Users and groups

不同的安裝包的配置文件都被放在該目錄,在運行時被不同的應用程式加載。例如,在用戶登錄時,login程序將加載 system-local-login 策略,具體過程如下:

/etc/pam.d/
login -> system-local-login -> system-login -> system-auth

不同的應用程式,可能使用不同的配置文件。例如,openssh 安裝其 sshd PAM 策略,如下所示:

/etc/pam.d/
sshd -> system-remote-login -> system-login -> system-auth

配置文件的選擇與應用程式有關。一種特定的認證方式可能僅用到 sshd,遠程登錄用到 system-remote-login,對這兩者的修改不用影響到本地登錄(local logins)。而對 system-loginsystem-auth 的修改將同時對 local 和 remote 的登錄產生影響。

sshd 的例子,任何 pam-aware 的應用程式需要將它的認證策略安裝到 /etc/pam.d 目錄下,以更集成和使用 PAM 提供的功能。否則應用程式將使用默認配置 /etc/pam.d/other

提示:PAM 是在運行過程中被動態連結使用的,例如
$ ldd /usr/bin/login |grep pam
libpam.so.0 => /usr/lib/libpam.so.0 (0x000003d8c32d6000)
libpam_misc.so.0 => /usr/lib/libpam_misc.so.0 (0x000003d8c30d2000)
login 程序是 pam-aware 的,因此 必需 指定一個認證策略。

PAM 手冊 pam(8)pam.d(5) 描述了配置文件的標準規範。手冊分四部分:賬戶,認證,密碼和會話管理,同時還包括了配置項的可選內容。

此外,文檔 /usr/share/doc/Linux-PAM/index.html 包含多種指導文檔,包括了每種標準模塊的 man 手冊。

警告: 對 PAM 配置的修改會影響用戶認證。不正確的修改可能導致沒有用戶可以登錄,或所有用戶都可以登錄。
提示:更改對於已通過身份驗證的用戶無效;使用 PAM 的一種方法是最好在測試機器上本地登錄並進行開發,保持會話不斷運行,同時檢查另一個控制台上另一個用戶的結果。

示例[編輯 | 編輯原始碼]

本文或本章節的事實準確性存在爭議。

原因: (1) the use of nullok (2) the way pam handles optional modules(在 Talk:PAM#Accuracy of PAM#Examples 中討論)


下所的兩個小例子用於反面示例:

首先是下面兩行配置:

/etc/pam.d/system-auth
auth      required  pam_unix.so     try_first_pass nullok
auth      optional  pam_permit.so

pam_unix(8) 說明如下:「本認證 ( pam_unix.so )用於檢查用戶密碼作為認證。默認情況不允許密碼為空的用戶進入」。而 pam_permit.so 允許密碼為空的情況。如果將 rerquiredoptional 交換位置,則兩種情況都將允許無密碼登錄。

第二種情況恰好相反,在 /etc/pam.d/login 中的pam_nologin.so 默認配置創建如下文件:

# touch /etc/nologin

將導致只有 root 用戶可以登錄(Arch Linux 默認允許 root 用戶登錄)。要讓普通用戶可以登錄,則需要刪除該文件,可能是從創建它的控制台。

參考 #PAM stack and module configuration來對具體使用進行配置。

配置方法[編輯 | 編輯原始碼]

本節簡要說明如何修改 PAM 配置,如何添加新的 PAM 模塊。具體的模塊 man 手冊與模塊名一致(去掉 .so 後綴)

安全性參數配置[編輯 | 編輯原始碼]

下面的章節描述如何修改 PAM 默認參數配置:

展示如何使用 pam_crackib.so 強制密碼認證。
展示如何使用 pam_tally.so 限制登錄。
展示使用 pam_wheel.so 限制用戶登錄 。
描述如何使用 pam_limits.so 來配置系統進程。
包含了用 pam_env.so 設置環境變量的示例。

PAM stack and module configuration[編輯 | 編輯原始碼]

下面的章節說明對於具體的模塊,如何修改 #PAM 基礎配置

pam_mount.so 在用戶登錄時自動掛載加密目錄
pam_ecryptfs.so 自動掛載加密目錄
pam_exec.so 在用戶登錄時執行自定義腳本
使用 pam_winbind.sopam_krb5.so 通過 Active Directory (LDAP, Kerberos) 服務進行用戶認證
pam_ldap.so 介紹集成 LDAP 主對端認證過程
描述如何使用 U2F (pam_u2f.so) 和 YubiKey 與 PAM 提供的專有 Yubico OTP 實現 (pam_yubico.so)
pam_oath.so 軟件方式的 two-factor 認證
使用 pam_fprintd.so 進行指紋認證.
pam_usb.so 通過 USB 設備進行認證
pam_ssh.so 認證遠端用戶
pam_abl.so 限制通過 ssh 的暴力攻擊
pam_encfs.so 實現自動掛載加密目錄
pam_google_authenticator.so two-factor 認證
pam_pwdfile.so 認證非本地用戶的 FTP 登錄和 chroot 限制

更多 PAM 包[編輯 | 編輯原始碼]

除了上面提到的安裝包,Arch User Repository 包括更多的 PAM 模塊和工具。

PAM 相關的通用工具有:

https://pamtester.sourceforge.net/ || pamtesterAUR

Note the AUR features a keyword tag for PAM, but not all available packages are updated to include it. Hence, searching the package description may be necessary.

參閱[編輯 | 編輯原始碼]