pam认证流程的配置需先明确四类模块和控制标志的作用,1. auth负责身份验证,2. account检查账户状态,3. password管理密码策略,4. session处理会话操作,每类模块按配置文件中定义的顺序执行,控制标志required、requisite、sufficient和optional决定模块失败或成功时的流程走向,实际配置中常通过include引入common-*文件以提高可维护性,例如auth include common-auth,典型应用如sshd服务依次执行密码验证、账户检查、密码策略和会话建立,启用登录失败锁定可通过pam_tally2.so设置deny和unlock_time参数,配置时应备份原文件、逐步测试、避免滥用sufficient标志,并结合/var/log/auth.log排查问题,最终实现灵活且安全的认证控制。

配置PAM(Pluggable Authentication Modules,可插拔认证模块)是Linux系统中管理用户认证的重要方式。它允许系统管理员灵活地控制登录、sudo、ssh等服务的认证流程,而无需修改应用程序本身。下面介绍如何理解和配置PAM模块的认证流程。
一、PAM 认证流程的基本结构
PAM通过配置文件定义认证流程,这些文件通常位于
/etc/pam.d/目录下,每个服务(如
sshd、
login、
sudo)都有一个独立的配置文件。
PAM 的认证流程由四类模块控制:
- auth:负责用户身份验证(如密码验证、双因素认证)。
- account:检查账户状态(是否过期、是否允许登录时间等)。
- password:管理密码更新策略(如强度检查、过期提醒)。
- session:在用户登录前后执行操作(如记录日志、挂载家目录)。
每一行配置代表一个模块调用,格式如下:
类型 控制标志 模块路径 模块参数
例如:
auth required pam_unix.so
二、控制标志(Control Flags)的作用
控制标志决定当模块执行成功或失败时,PAM如何继续处理后续模块。常见值包括:
- required:必须成功,但失败不会立即返回,继续执行后续模块,最终整体失败。
- requisite:必须成功,一旦失败立即返回,不执行后续模块。
- sufficient:如果成功且前面没有requisite失败,则直接返回成功,不再执行后续模块;失败则继续。
- optional:通常用于session或非关键检查,结果一般不影响整体认证。
-
include:包含另一个服务的配置(如
include common-auth
)。
实际配置中常用 include 来复用通用配置,如 Debian/Ubuntu 系统中的 common-auth、common-account 等文件。
三、典型配置示例与流程分析
以
/etc/pam.d/sshd为例:
# 验证用户身份 auth required pam_unix.so auth optional pam_ssh.so # 检查账户有效性 account required pam_unix.so account required pam_access.so # 密码策略(在修改密码时起作用) password required pam_unix.so # 会话管理 session required pam_unix.so session optional pam_systemd.so
认证流程执行顺序如下:
-
auth 阶段:
- 先调用
pam_unix.so
验证密码,必须成功。 - 再调用
pam_ssh.so
(如适用),失败也无妨。
- 先调用
-
account 阶段:
企业网站管理系统源码2.0下载这是一款比较精美的企业网站管理系统源码,功能比较完整,比较适合新手学习交流使用,也可以作为毕业设计或者课程设计使用,感兴趣的朋友可以下载看看哦。功能介绍:该源码主要包括前台和后台两大部分,具体功能如下:网站前台模块:主要包括企业简介、新闻中心、产品展示、公司证书、工程业绩、联系我们、客户系统、人才招聘等信息的浏览,以及客户留言的功能。网站后台模块1、常规管理:企业简介、链接管理、投票管理、系统设置
- 检查用户是否被锁定、是否在允许登录的时间段内。
pam_access.so
可基于/etc/security/access.conf
控制登录来源。
-
password 阶段:
- 修改密码时触发,确保符合复杂度要求。
-
session 阶段:
- 登录成功后建立会话,比如记录
wtmp
日志、启动 systemd 用户实例。
- 登录成功后建立会话,比如记录
四、常用PAM模块及其用途
| 模块 | 用途 |
|---|---|
| @@######@@ | 标准的用户名/密码认证,基于 @@######@@ 和 @@######@@ |
| @@######@@ | SSH密钥认证支持 |
| @@######@@ | 通过LDAP进行集中认证 |
| @@######@@ | Google两步验证(TOTP) |
| @@######@@ 或 @@######@@ | 登录失败次数限制 |
| @@######@@ | 基于规则控制谁可以从哪里登录 |
| @@######@@ | 用户首次登录时自动创建家目录 |
例如,启用自动创建家目录:
pam_unix.so
五、配置建议与注意事项
-
备份原始配置:修改前备份
/etc/passwd
下的文件,避免锁死自己。 - 逐步测试:每次只改一处,用测试账户验证,避免影响生产登录。
- 避免滥用 sufficient:容易绕过安全检查,例如错误配置可能导致仅用SSH密钥就跳过密码。
-
日志排查:查看
/etc/shadow
或pam_ssh.so
排错。 -
使用 include 提高可维护性:大多数发行版使用
pam_ldap.so
文件统一管理。
例如,在
pam_google_authenticator.so中常见写法:
pam_tally2.so
然后在
pam_faillock.so中统一配置密码认证策略。
六、启用登录失败锁定示例(以 pam_tally2 为例)
编辑
pam_access.so(Ubuntu/Debian):
pam_mkhomedir.so
这表示:连续失败3次后锁定账户10分钟。
查看失败次数:
session required pam_mkhomedir.so skel=/etc/skel umask=077
手动解锁:
/etc/pam.d/
基本上就这些。PAM的核心是“模块化+流程控制”,理解四类模块和控制标志后,就能根据安全需求定制认证流程。虽然配置灵活,但改错可能导致无法登录,务必谨慎操作。
/var/log/auth.log
journalctl
common-*
/etc/pam.d/sshd
auth include common-auth account include common-account password include common-password session include common-session
common-auth
/etc/pam.d/common-auth
auth required pam_tally2.so deny=3 unlock_time=600
pam_tally2 --user=username
pam_tally2 --user=username --reset









