PAM
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-login
或 system-auth
的修改將同時對 local 和 remote 的登錄產生影響。
如 sshd
的例子,任何 pam-aware 的應用程式需要將它的認證策略安裝到 /etc/pam.d
目錄下,以更集成和使用 PAM 提供的功能。否則應用程式將使用默認配置 /etc/pam.d/other
。
$ 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 手冊。
示例[編輯 | 編輯原始碼]
下所的兩個小例子用於反面示例:
首先是下面兩行配置:
/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
允許密碼為空的情況。如果將 rerquired
和 optional
交換位置,則兩種情況都將允許無密碼登錄。
第二種情況恰好相反,在 /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
在用戶登錄時執行自定義腳本
- LDAP authentication with its LDAP authentication#NSS and PAM section
pam_ldap.so
介紹集成 LDAP 主對端認證過程
- 描述如何使用 U2F (
pam_u2f.so
) 和 YubiKey 與 PAM 提供的專有 Yubico OTP 實現 (pam_yubico.so
)
pam_oath.so
軟體方式的 two-factor 認證
- 使用
pam_fprintd.so
進行指紋認證.
- pam_autologin : saves username and password to log in automatically.
- pam_usb
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 相關的通用工具有:
- Pamtester — PAM 測試工具集
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.
參閱[編輯 | 編輯原始碼]
- linux-pam.org - The project homepage
- Understanding and configuring PAM - An introductory article