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.

参阅[编辑 | 编辑源代码]