Linux PAM 认证体系完全指南:从认证流程到 PAM 配置详解

Linux系统 0 1839 团子精英 收藏

前言

在 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 集成问题都能快速定位。


相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码