跳至內容

PAM

出自 Arch Linux 中文维基

Linux 可插拔認證模塊(PAM,Pluggable Authentication Modules)提供了系統級的用戶認證框架。如下描述引用自項目介紹:

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

本文描述在 Arch Linux 下用於認證本地和遠程用戶的基礎默認設置。對默認設置的更改在連結的專門文章內展開。

安裝

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

軟體倉庫中還包括其它一些可選的 PAM 包,詳見 #配置方法。

配置文件

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

安全性參數

/etc/security 包含了對認證方法參數的系統級配置,基礎安裝使用上游默認配置。

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

詳見 #安全性參數配置。

PAM 基礎棧

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

  • pambase包。包含供應用程式使用的特定於 Arch Linux 的 PAM 基礎配置。
  • 其它基礎包。例如 util-linux包 添加了為 login 及其它一些應用的認證配置, shadow包 提供 Arch Linux 默認的用戶資料庫認證方式(參見用戶和用戶組)。

基礎安裝的不同配置文件相互連結,在運行時「堆疊」,稱為「PAM 棧」。例如,在用戶登錄時,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 更改所有遠程登錄的驗證方式。這兩種方式不影響本地登錄,修改 system-login 或 system-auth 則會同時影響本地和遠程登錄。

如 sshd 的例子,任何接入 PAM(pam-aware)的應用程式都需要在 /etc/pam.d 目錄下安裝的單獨策略,以便正確集成並依賴 PAM 棧。否則應用程式將使用默認配置 /etc/pam.d/other,拒絕認證並在日誌中記錄警告。

提示:

接入 PAM 的程序在運行時動態連結 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,因此相應的認證策略必須存在。

PAM 的手冊頁 pam(8) 和 pam.d(5) 描述了配置文件的標準規範。其中解釋了四個 PAM 管理組⸺帳戶管理(account)、認證管理(auth)、密碼管理(password)、會話管理(session)⸺和各種控制值(用於配置模塊堆疊方式和行為)。

此外,詳盡的文檔安裝在 /usr/share/doc/Linux-PAM/index.html,包含多個指南,其中提供每個標準模塊的手冊頁。

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

配置方法

本節提供了一個目錄,包括關於如何修改 PAM 配置和如何添加特殊的 PAM 模塊的文章/章節。注意,模塊的 man 手冊通常與模塊名一致(不包括 .so 後綴)。

安全性參數配置

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

更改允許空密碼的默認設置。
使用 pam_crackib.so 強制使用強密碼。
使用 pam_tally.so 限制嘗試登錄次數。
使用 pam_wheel.so 限制用戶登錄。
使用 pam_limits.so 來配置系統進程限制。
使用 pam_env.so 設置環境變量的示例。

PAM 棧和模塊配置

下面的章節說明對於具體的用例,如何修改 #PAM 基礎棧:

使用 pam_mount.so 在用戶登錄時自動掛載加密目錄。
使用 pam_ecryptfs.so 自動掛載加密目錄。
使用 pam_exec.so 在用戶登錄時執行自定義腳本。
使用 pam_winbind.so 和 pam_krb5.so 通過活動目錄(LDAP、Kerberos)服務進行用戶認證。
使用 pam_ldap.so 集成 LDAP 客戶端或服務端認證。
使用 U2F(pam_u2f.so)和 YubiKey 提供的專有 Yubico OTP 實現(pam_yubico.so)。
使用 pam_oath.so 進行軟體雙因素認證。
使用 pam_fprintd.so 進行指紋認證。
保存用戶名和密碼以自動登錄。
使用 pam_usb.so 通過 USB 設備進行(可作為雙因素)認證。
使用 pam_ssh.so 認證遠程用戶身份。
使用 pam_abl.so 限制通過 ssh 的暴力破解攻擊。
使用 pam_encfs.so 自動掛載加密目錄。
使用 pam_google_authenticator.so 進行雙因素認證。
使用 pam_pwdfile.so 配置 FTP chroot,以便在沒有本地系統帳戶的情況下對用戶進行身份驗證。

更多 PAM 包

除了上面提到的包,AUR 中還包括許多另外的 PAM 模塊和工具:

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

注意,AUR中有一個 PAM 關鍵詞標籤,但並不是所有可用的相關軟體包都包含。因此,可能還是需要搜索軟體包描述。

提示與技巧

被封鎖

如果被 PAM 封鎖,可能是密碼輸錯太多次了,參見安全#在三次登錄嘗試失敗後封鎖用戶。

參閱