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

Linux系统 0 136 团子精英 收藏

前言

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


相关推荐:

网友留言:

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

我要评论:

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