应用 (sshd, login, sudo)
↓
PAM API (libpam)
↓
配置文件 (/etc/pam.d/*)
↓
PAM 模块 (.so)
↓
后台 (LDAP, MySQL, /etc/shadow, ...)
type control module-path module-arguments
# /etc/pam.d/sshd 示例
auth required pam_env.so
auth required pam_unix.so try_first_pass
account required pam_unix.so
password requisite pam_pwquality.so minlen=12
session required pam_limits.so
| 类型 | 触发时机 |
|---|---|
| auth | 用户认证 (密码/密钥) |
| account | 账户状态检查 (过期/锁定) |
| password | 密码更新 |
| session | 会话建立/销毁 |
| 标志 | 含义 |
|---|---|
| required | 失败继续执行后续模块,最终仍失败 |
| requisite | 失败立即返回,不执行后续 |
| sufficient | 成功立即返回 (跳过后续模块) |
| optional | 可忽略的模块 |
auth required pam_unix.so try_first_pass nullok
auth required pam_tally2.so deny=5 unlock_time=600
password requisite pam_pwquality.so \
minlen=12 \
dcredit=-1 \ # 至少 1 位数字
ucredit=-1 \ # 至少 1 位大写
lcredit=-1 \ # 至少 1 位小写
ocredit=-1 \ # 至少 1 位特殊字符
enforce_for_root
session required pam_limits.so
# /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
# 查看认证日志
tail -f /var/log/auth.log # Debian/Ubuntu
tail -f /var/log/secure # RHEL/CentOS
# 调试模式 (慎用)
# 在控制标志后加 debug: sufficient debug