LinuxPAM(可插拔身份验证模块)模块的使用和实操

admin 2026-09-23 05:17:04 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文系统讲解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(可插拔身份验证模块)模块的使用和实操》

评论:0   参与:  0