Linux PAM(Pluggable Authentication Modules)完整指南——从入门原理到进阶机制,再到实战配置

Linux PAM(Pluggable Authentication Modules)完整指南

------从入门原理到进阶机制,再到实战配置

1. PAM 入门:它是什么、为什么存在、解决了什么问题?

1.1 PAM 是什么?

PAM(可插拔认证模块)是 Linux 的统一认证框架。 它的核心思想是:

应用程序不负责认证逻辑,只调用 PAM;认证方式由 PAM 模块链决定。

例如:

  • sshd 不验证密码,它调用 PAM

  • sudo 不验证密码,它调用 PAM

  • login 不验证密码,它调用 PAM

认证方式(本地密码、LDAP、指纹、二次认证)都由 PAM 配置文件决定。

1.2 为什么需要 PAM?

没有 PAM 时,每个程序都要自己实现认证逻辑:

  • 密码验证

  • 账号是否过期

  • 是否允许从某个 IP 登录

  • 是否需要二次认证

这导致:

  • 重复造轮子

  • 难以统一管理

  • 修改认证方式需要改多个程序

PAM 让所有程序共享一套认证体系。

1.3 PAM 的四大模块类型(必须理解)

PAM 的配置文件中,每一行都属于以下四类之一:

  • auth:身份认证(密码、二次认证等)

  • account:账号状态检查(是否过期、是否允许登录)

  • password:密码修改策略(复杂度、历史密码)

  • session:会话管理(登录/退出时执行的操作)

这四类模块构成了完整的认证流程。

2. PAM 进阶:配置文件结构、控制标志、执行流程

2.1 PAM 配置文件在哪里?

所有配置文件都在:

代码

复制代码
/etc/pam.d/

每个服务都有自己的配置文件,例如:

  • /etc/pam.d/sshd

  • /etc/pam.d/sudo

  • /etc/pam.d/login

Debian/Ubuntu 还有四个"公共配置":

  • common-auth

  • common-account

  • common-password

  • common-session

服务文件通常会包含它们:

代码

复制代码
@include common-auth

2.2 配置文件的语法结构

每一行的格式:

代码

复制代码
<模块类型>  <控制标志>  <模块>  [参数...]

示例:

代码

复制代码
auth required pam_unix.so nullok

含义:

  • auth:身份认证

  • required:必须成功

  • pam_unix.so:使用本地密码认证

  • nullok:允许空密码

2.3 控制标志(Control Flags)------PAM 的"跳转规则"

控制标志决定当前模块成功或失败时,后续模块如何执行。

① required
  • 必须成功,否则最终失败

  • 即使失败,也继续执行后续模块(不暴露失败点)

② requisite
  • 必须成功

  • 失败立即中断整个认证流程

③ sufficient
  • 成功即可跳过后续模块

  • 常用于多种认证方式并存时

④ optional
  • 成功失败都不影响整体结果

  • 常用于日志类模块

⑤ 复杂控制语法(跳转式)

例如:

代码

复制代码
auth [success=1 default=ignore] pam_unix.so

含义:

  • 成功 → 跳过下一行

  • 失败 → 忽略,继续执行下一行

这是 PAM 最强大的机制。

2.4 PAM 的执行流程(以 SSH 为例)

  1. 用户输入用户名

  2. sshd 调用 PAM

  3. 执行 /etc/pam.d/sshd

  4. 执行 auth 模块链(验证密码)

  5. 执行 account 模块链(检查账号状态)

  6. 执行 session 模块链(记录日志等)

  7. 登录成功

退出时:

  • 执行 session 的"关闭"逻辑(卸载、清理)

3. PAM 实战:常用模块、典型配置、真实案例

3.1 常用 PAM 模块

身份认证类(auth)

  • pam_unix.so:本地密码认证

  • pam_google_authenticator.so:二次认证

  • pam_faillock.so:失败次数限制

账号检查类(account)

  • pam_time.so:限制登录时间

  • pam_access.so:限制登录来源

密码策略类(password)

  • pam_pwquality.so:密码复杂度

  • pam_cracklib.so:密码强度检查

会话管理类(session)

  • pam_limits.so:资源限制

  • pam_lastlog.so:显示上次登录

  • pam_mkhomedir.so:自动创建 home 目录

3.2 实战案例 1:为 SSH 添加二次认证(TOTP)

步骤 1:安装 Google Authenticator

代码

复制代码
apt install libpam-google-authenticator

步骤 2:为用户生成密钥

代码

复制代码
google-authenticator

步骤 3:修改 PAM 配置

编辑 /etc/pam.d/sshd

代码

复制代码
auth required pam_google_authenticator.so

步骤 4:修改 SSH 配置

编辑 /etc/ssh/sshd_config

代码

复制代码
ChallengeResponseAuthentication yes

步骤 5:重启 SSH

代码

复制代码
systemctl restart sshd

效果:

  • 登录时先输入密码

  • 再输入动态验证码

3.3 实战案例 2:限制用户只能在工作时间登录

编辑 /etc/security/time.conf

代码

复制代码
login;*;alice;MoTuWeThFr0800-1800

编辑 /etc/pam.d/login

代码

复制代码
account required pam_time.so

效果:

  • 用户 alice 只能在工作日 8:00--18:00 登录

3.4 实战案例 3:限制 SSH 登录来源 IP

编辑 /etc/security/access.conf

代码

复制代码
-:ALL EXCEPT root:192.168.1.0/24

编辑 /etc/pam.d/sshd

代码

复制代码
account required pam_access.so

效果:

  • 只有内网 IP 可以登录

  • root 不受限制

3.5 实战案例 4:登录失败 5 次锁定 10 分钟

编辑 /etc/pam.d/system-auth(CentOS):

代码

复制代码
auth required pam_faillock.so preauth silent deny=5 unlock_time=600
auth [success=1 default=bad] pam_unix.so
auth required pam_faillock.so authfail deny=5 unlock_time=600

效果:

  • 密码错误 5 次 → 锁定 10 分钟

4. PAM 调试与安全注意事项

4.1 查看日志

Debian/Ubuntu:

代码

复制代码
/var/log/auth.log

RHEL/CentOS:

代码

复制代码
/var/log/secure

4.2 开启调试模式

例如:

代码

复制代码
auth required pam_unix.so debug

日志会非常详细。

4.3 修改 PAM 的安全建议

  • 永远不要在生产机上直接改

  • 保留一个 root 已登录的终端

  • 改错可能导致:

    • SSH 登录不上

    • sudo 不能用

    • 本地登录失败

相关推荐
das2m3 小时前
WSL2 Ubuntu 配置完美版 docker compose 指南
linux·ubuntu·docker
丑过三八线3 小时前
Runc 深度解析:从原理到实操
java·linux·开发语言·docker·容器·rpc
手可摘星辰的少年3 小时前
Linux字符设备驱动的实现与QEMU验证
linux
手可摘星辰的少年3 小时前
使用额外ext4磁盘镜像在QEMU中传递与加载内核模块
linux
科技风向标go3 小时前
QYResearch联合发布:《2026室外网络摄像头行业白皮书》格行视精灵成用户室外硬核环境首选监控
大数据·网络·安全·监控·户外安防
hai3152475434 小时前
libcore_final.c —— 九章数流矩阵系统
linux·运维·网络
zh路西法4 小时前
【RDKX5交叉编译】基于 QEMU 的 RDK X5 ARM64 rootfs 镜像定制与 chroot 开发环境搭建
linux
格图素书4 小时前
AI安全攻防深度解析|Prompt注入与越狱攻击全拆解、供应链投毒风险深挖,助力大模型应用加固、RAG风控、全链路安全防控落地
人工智能·安全·prompt
iRayCheung4 小时前
virtualbox安装的ubuntu系统跑numpy报错
linux·ubuntu·numpy
Safeploy安策数据4 小时前
等保测评总卡壳?PCI加密卡如何破解政务云与金融合规难题
运维·网络·安全