「PAM」- Pluggable Authentication Modules

可插拔认证模块,将低层认证方案集成到高层接口中,为操作系统的应用及服务提供认证支持,而需要关注低层认证方案。简单地说,如果你的应用程序想要使用系统帐号登录,不需要自己解析 passwd 和 shadow 文件,使用 PAM 模块即可。

Linux Pluggable Authentication Modules

从 Unix Pluggable Authentication Modules 架构中演变而来。它将身份验证任务分为四个独立的管理组:

(1)Account Module,帐户模块:检查帐号是否为有效认证对象。帐号可能存在过期、密码失效等等问题。

(2)Authentication Module,认证模块:由于验证密码或其他密钥。该模块也肯能将认证信息传递给其他系统,比如 keyring 服务。

(3)Password Module,密码模块:负责更新密码,通常耦合到认证步骤中使用。也被用于强制使用强密码。

(4)Session Module,会话模块:定义会话在开始与结束时执行的动作。会话开始与用户成功认证后。

该四个模块与 pam.conf(5) 手册所属的 type 属性对应。

注意事项

1)调整 PAM 会改变系统的安全性。
2)错误的配置将导致系统部分功能无法访问,或者全部无法访问。请做好回滚准备,比如备份原文件。
3)无需过多关心 PAM 内部细节,要更多关注配置文件如何定义应用与PAM之间执行认证任务的连接。

配置实例(谨慎参考)

错误配置可能导致系统认证不可用,请谨慎参考本部分内容,这只在我们自身环境中测试通过。请参考官方文档或手册获取准确内容。

检查应用程序是否使用 PAM 认证

我们希望使用 su root 命令时无需输入密码,则先检查 su 是否集成 PAM 认证:

# ldd $(which su) | grep libpam.so
        libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007ff1da47c000)

从输出中可以看出 su 命令使用 PAM 库,所以我们可以说 su 支持 PAM 认证。

配置文件的语法格式

第一步,阅读 How to Configure and Use PAM in Linux 文章,有个初步认识。
第二步,在 Debian 中,请参考 man 5 pam.d 或 man 5 pam.conf 手册。

参考文献

Wikipedia/Linux PAM
Wikipedia/Pluggable authentication module
What is PAM?
How to Configure and Use PAM in Linux
archlinux/PAM