前言
在 Linux 运维、CAD/EDA Farm 管理、HPC 集群、NFS 文件服务器、AD 域集成、SSSD 和 Kerberos 环境中,PAM(Pluggable Authentication Modules)是整个认证体系的核心。
很多工程师对认证过程的理解停留在:
用户输入密码
↓
系统验证
↓
登录成功
但实际上 Linux 的认证过程远比这复杂。
一次 SSH 登录背后可能涉及:
SSHD
↓
PAM
↓
SSSD
↓
Kerberos
↓
Active Directory
↓
LDAP
↓
NSS
↓
Home Directory
↓
Session
本文将全面解析 Linux PAM 的工作原理、认证流程、配置文件、控制逻辑以及企业级应用场景。
一、Linux 认证体系全景图
首先要理解 Linux 中几个容易混淆的组件。
组件 | 职责 |
PAM | 认证框架 |
NSS | 用户信息查询 |
LDAP | 用户目录 |
Kerberos | 身份认证 |
SSSD | 统一认证代理 |
AD | 用户管理中心 |
SSHD | SSH服务 |
很多故障都是因为混淆了这些组件。
例如:
id alice
调用的是:
NSS
而:
ssh alice@server
调用的是:
PAM
二、认证流程全解析
本地用户登录
用户:
ssh root@server
认证链路:
SSH Client
│
▼
sshd
│
▼
/etc/pam.d/sshd
│
▼
password-auth
│
▼
pam_unix.so
│
▼
/etc/shadow
│
▼
Password Match
│
▼
Login Success
AD用户登录
例如:
ssh alice@company.com@server
流程:
SSHD
│
▼
PAM
│
▼
pam_sss.so
│
▼
SSSD
│
▼
Kerberos
│
▼
Active Directory
│
▼
Authentication Success
用户信息查询流程
例如:
id alice
流程:
id
│
▼
glibc
│
▼
nsswitch.conf
│
├─ files
│
├─ sss
│
└─ ldap
注意:
认证与用户查询是两套系统。
三、PAM是什么
PAM全称:
Pluggable Authentication Modules
可插拔认证模块。
PAM的作用:
决定认证顺序
决定认证方式
决定成功条件
决定失败处理
PAM本身不验证密码。
真正验证密码的是:
pam_unix.so
pam_sss.so
pam_krb5.so
pam_ldap.so
四、PAM配置文件结构
目录:
/etc/pam.d/
常见文件:
login
sshd
su
sudo
passwd
system-auth
password-auth
五、PAM文件之间的关系
login
对应:
/bin/login
控制:
TTY登录
Console登录
sshd
对应:
/usr/sbin/sshd
控制:
SSH认证
su
对应:
su
su -
控制用户切换。
sudo
对应:
sudo
控制提权。
passwd
对应:
passwd
控制密码修改。
system-auth
公共认证模板。
通常被:
login
su
sudo
passwd
引用。
password-auth
网络认证模板。
通常被:
sshd
gdm
vnc
xrdp
引用。
六、PAM配置格式
典型配置:
auth required pam_unix.so
结构:
Type
Control
Module
Arguments
例如:
auth sufficient pam_sss.so use_first_pass
解析:
字段 | 值 |
Type | auth |
Control | sufficient |
Module | pam_sss.so |
Arguments | use_first_pass |
七、PAM 四大类型
auth
身份认证。
验证:
密码
Kerberos票据
OTP
MFA
例如:
auth required pam_unix.so
account
账户合法性检查。
检查:
是否过期
是否锁定
是否允许登录
例如:
account required pam_access.so
password
密码修改阶段。
例如:
passwd alice
调用:
password sufficient pam_sss.so
session
登录后的会话处理。
例如:
session required pam_limits.so
负责:
创建Session
设置环境变量
挂载目录
创建Home
记录日志
八、Control Flag详解
这是PAM最核心的部分。
required
必须成功。
auth required pam_unix.so
特点:
失败继续执行
最终统一返回失败
逻辑:
AND
requisite
必须成功。
失败立即退出。
auth requisite pam_unix.so
特点:
失败立即停止
sufficient
成功即可通过。
auth sufficient pam_sss.so
特点:
成功立即返回成功
逻辑:
OR
optional
结果不影响整体认证。
session optional pam_lastlog.so
常用于:
日志
欢迎信息
统计信息
九、认证控制逻辑示例
本地 OR AD
auth sufficient pam_unix.so
auth sufficient pam_sss.so
auth required pam_deny.so
等价:
Local
OR
AD
密码 + MFA
auth required pam_unix.so
auth required pam_google_authenticator.so
等价:
Password
AND
MFA
十、重要PAM模块详解
pam_unix.so
本地认证。
读取:
/etc/passwd
/etc/shadow
pam_sss.so
SSSD认证。
支持:
AD
LDAP
Kerberos
IPA
pam_krb5.so
Kerberos认证。
验证:
kinit
同类功能。
pam_ldap.so
LDAP Bind认证。
pam_access.so
登录访问控制。
配置:
/etc/security/access.conf
pam_limits.so
资源限制。
配置:
/etc/security/limits.conf
控制:
nofile
nproc
stack
memlock
pam_mkhomedir.so
自动创建Home目录。
首次登录:
/home/user不存在
自动创建:
/home/user
pam_env.so
加载环境变量。
配置:
/etc/environment
pam_lastlog.so
显示:
Last Login
pam_faillock.so
登录失败锁定。
例如:
连续失败5次
锁定10分钟
pam_permit.so
永远成功。
pam_deny.so
永远失败。
十一、企业级AD集成配置
典型配置:
auth required pam_env.so
auth sufficient pam_unix.so nullok
auth sufficient pam_sss.so use_first_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_sss.so
account required pam_permit.so
password sufficient pam_unix.so
password sufficient pam_sss.so
password required pam_deny.so
session required pam_limits.so
session optional pam_mkhomedir.so
session required pam_unix.so
session optional pam_sss.so
十二、EDA/HPC集群认证架构
大型EDA环境常见:
User
│
▼
SSH
│
▼
SSHD
│
▼
PAM
│
▼
pam_sss.so
│
▼
SSSD
│
▼
Kerberos
│
▼
Active Directory
│
▼
LDAP
与此同时:
id/getent
│
▼
NSS
│
▼
SSSD
│
▼
AD LDAP
认证与用户查询相互独立。
十三、排障思路
用户查不到
id user
检查:
nsswitch.conf
sssd.conf
用户能查到但不能登录
检查:
pam_sss.so
pam_unix.so
SSH失败
检查:
/etc/pam.d/sshd
su失败
检查:
/etc/pam.d/su
sudo失败
检查:
/etc/pam.d/sudo
没有HOME目录
检查:
pam_mkhomedir.so
ulimit异常
检查:
pam_limits.so
总结
记住一句话:
NSS负责:
用户是谁
PAM负责:
密码对不对
SSSD负责:
与AD/LDAP通信
Kerberos负责:
身份认证
AD负责:
用户管理
排查认证问题时:
id/getent失败
查NSS
SSH失败
查PAM
AD用户失败
查SSSD
票据失败
查Kerberos
理解这四层关系后,绝大多数 Linux、EDA Farm、HPC 集群、NFS 和企业 AD 集成问题都能快速定位。


网友留言: