PAM (简体中文)

From ArchWiki
翻译状态:本文是 PAM翻译。上次翻译日期:2019-03-13。如果英文版本有所更改,则您可以帮助同步翻译。

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 安装包为 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 作操作时使用一个用户修改,另一个账号在另一个终端来测试认证情况

示例

下所的两个小例子用于反面示例:

首先是下面两行配置:

/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 交换位置,则两种情况都将允许无密码登录。

第二种情况恰好相反,默认情况下创建如下的文件:

# 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.sopam_krb5.so 通过 Active Directory (LDAP, Kerberos 服务) 进行用户认证
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 相关的通用工具有:

http://linux-pam.org/ || libx32-pamAUR[损坏的链接:package not found]
http://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.

参阅