PAM (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 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 安装包为 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-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
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.

参阅