PAM (简体中文)
Linux PAM(Pluggable Authentication Modules) 是一个系统级用户认证框架。如下描述引用自 项目介绍:
- PAM 将程序开发与认证方式进行分离,程序在运行时调用附加的“认证”模块完成自己的工作。本地系统管理员通过配置选择要使用哪些认证模块。
本文描述在 Arch Linux 下为本地和远端用户配置 PAM 权限的方式方法。具体的细节配置方法将在专门的文章内展开。
安装
pam 包是基础安装包,默认已经安装在系统。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 基础配置 内。
详见 #安全性参数配置。
PAM 基础配置
/etc/pam.d/
目录专门用于存放 PAM 配置,用于为具体的应用程序设置独立的认证方式。配置文件由以下安装包提供:
- pambase 安装包,提供了 Arch Linux 中为应用程序使用的 PAM 基础配置文件
- 其它基础安装包。例如 util-linux 添加了为 login 及其它一些应用的认证配置, shadow 安装包为 Archlinux 提供默认的用户数据库认证方式(参见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
交换位置,则两种情况都将允许无密码登录。
第二种情况恰好相反,默认情况下创建如下的文件:
# 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 基础配置
Official repositories PAM 模块:
-
pam_mount.so
在用户登录时自动挂载加密目录
-
pam_ecryptfs.so
自动挂载加密目录
-
pam_exec.so
在用户登录时执行自定义脚本
- 使用
pam_winbind.so
和pam_krb5.so
通过 Active Directory (LDAP, Kerberos 服务) 进行用户认证
- LDAP authentication with its LDAP authentication#NSS and PAM section
-
pam_ldap.so
介绍集成 LDAP 主对端认证过程
-
pam_yubico.so
通过私有的 Yubikey 进行认证
-
pam_oath.so
软件方式的 two-factor 认证
+
- 使用
pam_fprintd.so
进行指纹认证.
来自于 Arch User Repository 的 PAM 模块:
-
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 相关的通用工具有:
- libx32_pam — Arch Linux PAM x32 ABI library
- 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