文章总结: 本文系统讲解LinuxPAM可插拔认证模块的架构与实操,涵盖模块栈、控制标记等核心概念,提供密码复杂度策略、登录限速与账号锁定、限制su提权与来源控制三组可直接套用的配置方案,并给出排查PAM问题的日志查看、状态查询与debug调试三条路径。文章强调理解认证流水线节点放行与拦截逻辑比死记参数更重要,适合Linux运维与安全人员参考落地。 综合评分: 78 文章分类: 安全建设,安全培训,安全工具,实战经验
Linux PAM(可插拔身份验证模块)模块的使用和实操
原创
小石同学 小石同学
小石学习笔记
2026年9月22日 18:50 四川
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
Intro
登录认证是 Linux 安全的第一道闸门,但很多人只会照抄配置文件、改完就忘。这篇从 PAM 的架构讲起,再带你手写密码策略、登录限速和强认证,最后附排错思路,让你读完既能看懂也能落地。
如果你管过 Linux 服务器,大概率碰过 /etc/pam.d/ 这个目录,也大概率只敢动里面的注释。它管着系统里几乎所有认证入口——从 SSH 登录、su 提权,到 sudo 授权,背后都是 PAM 在工作。
可一旦想加点安全策略,很多人就卡住了。改错了可能直接把自己锁在门外,于是干脆放着不动。今天这篇就把 PAM 拆开讲明白,再用三组可直接套用的配置带你落地。
01
一、PAM 到底解决了什么问题
PAM 是可插拔认证模块的缩写(Pluggable Authentication Modules)。它把「认证」这件原本写死在各个程序里的逻辑,抽成了一套可配置的模块栈。
在没有 PAM 之前,SSH、login、su 各自实现一套认证逻辑。要改密码策略,就得去改每个程序源码。PAM 出现后,这些程序只负责调用 PAM,具体怎么认证由模块和配置决定。
应用 → PAM 框架 → pam_unix/pam_faillock/pam_wheel 模块层
一句话:应用只问「能不能进」,怎么验、拦不拦,由 PAM 的模块栈决定。
02
二、PAM 的核心:模块栈与控制标记
PAM 的配置按服务分文件,放在 /etc/pam.d/ 下,文件名就是服务名。比如 sshd、login、su、sudo。
每个文件里是一行行模块调用,按顺序执行,就像一条流水线:
auth required pam_env.so
auth required pam_faillock.so preauth
auth required pam_unix.so
auth required pam_faillock.so authfail
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
每一行由四部分组成:模块类型、控制标记、模块名、参数。这四段缺一不可。
模块类型就是四种职责:
-
auth:验证身份,最常见,检查密码是否正确
-
account:检查账户状态,比如是否过期、是否被锁定
-
password:处理密码修改,比如校验强度、更新密码
-
session:登录后的初始化,比如挂载、写日志、限资源
03
三、控制标记决定了「能不能过」
控制标记是 PAM 的精髓,它决定这条流水线的通过逻辑。常用四类:
-
required:必须成功,失败不立即退出,等所有 required 都跑完才回报失败
-
requisite:必须成功,一旦失败立即退出,后续不再执行
-
sufficient:成功且前面没有 required 失败,就直接放行,不再跑后面的
-
optional:成功与否都不影响结果,通常只用来记日志或收集信息
很多误锁账号的坑,都是把
required和requisite混着用。记住一个判断:requisite是「半路拦下」,required是「排队到最后一起宣判」。
PAM 的真正威力,是把这几个标记组合成你想要的认证策略。
04
四、前置条件
动手前确认两件事:
- 系统基于 RHEL / CentOS / Rocky / Debian / Ubuntu(命令大同小异)
- 有 root 权限,且准备一个独立 SSH 会话作为逃生通道
改 PAM 配置前,永远先留一个已登录的会话当逃生通道。这句话值一台服务器的命——配置出错锁死自己,还有条路能登回去。
05
五、实操一:给密码立规矩
用 PAM 落实密码复杂度,核心是两个模块配合:pam_unix.so 管密码本身,pam_pwquality.so 管复杂度检查。
打开 /etc/pam.d/system-auth(Debian 是 common-password),找到 password 组那一行,把强度参数加上:
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
password sufficient pam_unix.so sha512 shadow use_authtok
参数含义:
-
minlen=12最短 12 位
-
dcredit=-1至少 1 位数字(负数表示至少,正数才是「至多」)
-
ucredit=-1/lcredit=-1至少 1 个大写、1 个小写
-
ocredit=-1至少 1 个特殊字符
-
retry=3允许输错重试 3 次
改完不用重启服务,下一次改密码立即生效。密码策略的本质是逼出熵,不是装样子。8 位纯数字和 12 位混合字符,爆破成本差了不止一个数量级。
06
六、实操二:登录限速与账号锁定
想防暴力破解,别只靠改 sshd 的重试次数。PAM 自带 pam_faillock.so,能按用户记录失败次数并锁定。
RHEL 系配置(Debian 用 pam_tally2 或 pam_faillock,语法接近):
auth required pam_faillock.so preauth deny=5 unlock_time=600
auth required pam_unix.so
auth required pam_faillock.so authfail deny=5 unlock_time=600
参数含义:
-
deny=5连续错 5 次锁定
-
unlock_time=600锁定 10 分钟(600 秒)
加完这两行,同一账户连错 5 次就会被暂时封掉,暴力扫描基本没戏。要手动解除锁定:
faillock --user zhangsan --reset
07
七、实操三:限制 su 提权与来源控制
pam_wheel.so 是限制 su 的神器:只允许 wheel 组的用户 su 到 root。
在 /etc/pam.d/su 里这样配:
auth required pam_wheel.so use_uid group=wheel
同时在 /etc/group 里把需要提权的人加进 wheel 组。其他人就算知道 root 密码,也su 不上去。
如果是阻止特定 IP 登录,用 pam_access.so,在 /etc/security/access.conf 里写规则:
- : ALL EXCEPT root : 192.168.1.0/24
表示:非 root 用户只能从 192.168.1.0/24 网段登录。配合防火墙,双保险。
08
八、排查 PAM 问题的三个路子
PAM 配置错了不好查,但有几条路能快速定位:
1. 看认证日志
Debian/RHEL 都有 /var/log/auth.log(有的在 /var/log/secure):
grep -i pam /var/log/auth.log | tail -50
日志里会明确写出是哪个模块、以什么原因拒绝。
2. 用 pam_tally2 或 faillock 查状态
pam_tally2 --user zhangsan
faillock --user zhangsan
能直接看到失败次数和锁定状态,排查限速类策略最有效。
3. 加 debug 调试开关
大部分模块支持 debug 参数,临时加上能打出详细过程:
auth required pam_unix.so debug
排查完记得去掉。日志不会说谎,先从最底层的模块日志找原因。
09
九、总结
PAM 不难,难的是把它当成一套「可组合的认证流水线」来理解。
- 用 pam_pwquality 落实密码复杂度
- 用 pam_faillock 挡暴力破解
- 用 pam_wheel + pam_access 收敛提权和来源
真正的高手不是记住每行参数,而是看得懂 PAM 的流水线在什么节点放行、什么节点拦截。下次需要新认证策略时,从「用什么模块、放哪个组、设哪种控制标记」三个角度去想,就会发现它没那么难。
“
安全不是堆配置,而是看透认证流水线在哪个节点放行、哪个节点拦截。
— 小石学习笔记
你是先改密码策略,还是先上登录限速?不妨从今天这几条配置里挑一条试起来。
觉得有用?点个关注,持续获取网络安全与 Linux 实操干货。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:小石学习笔记 小石同学 小石同学《Linux PAM(可插拔身份验证模块)模块的使用和实操》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论