Linux PAM是Pluggable Authentication Modules的缩写,中文叫可插拔认证模块。它是Linux系统中负责身份验证的一套标准框架,把登录、改密码、提权等操作中的认证逻辑独立出来,让系统和程序通过统一接口调用不同的认证方式。

为什么需要Linux PAM
在没有PAM之前,每个程序比如login、su、ssh都要自己写校验账号密码的代码。一旦密码规则变了,所有程序都得改。PAM出现后,程序只负责调用PAM接口,真正的认证规则写在配置文件里。管理员改配置就能调整策略,程序本身不用动。
PAM的核心概念
- 模块:具体干活的组件,如pam_unix.so负责传统密码校验
- 配置文件:在/etc/pam.d/目录下,每个服务一个文件
- 控制类型:required、requisite、sufficient、optional,决定模块失败是否阻断
一个最简单的PAM配置示例
下面是/etc/pam.d/sshd中常见的几行配置,展示了如何用pam_unix模块做密码认证:
# /etc/pam.d/sshd 片段 auth required pam_unix.so try_first_pass account required pam_unix.so password required pam_unix.so sha512
用C代码看PAM接口调用
程序使用PAM时,会调用pam_start、pam_authenticate等函数。下面是一段简化示例:
#include <security/pam_appl.h>
#include <stdio.h>
int main() {
pam_handle_t *pamh = NULL;
int ret = pam_start("login", "user1", NULL, &pamh);
if (ret == PAM_SUCCESS) {
ret = pam_authenticate(pamh, 0);
}
if (ret == PAM_SUCCESS) {
printf("认证通过n");
}
pam_end(pamh, ret);
return 0;
}
常见问题排查
如果ssh登不上去,可以先看/etc/pam.d/sshd里有没有把auth设成required但模块不存在。另外,密码复杂度策略通常通过pam_pwquality.so控制,修改它就能限制最小长度。
| 模块名 | 主要作用 |
|---|---|
| pam_unix.so | 传统本地账号密码认证 |
| pam_pwquality.so | 密码强度检查 |
| pam_limits.so | 限制用户资源使用 |
总结
理解linux pam是什么意思,关键记住它是认证的中间层。把认证逻辑插件化后,系统更安全也好维护。新手只要会看/etc/pam.d下的文件,就能解决大部分登录相关故障。