口令历史约束什么
强制口令复杂度却不限制复用,结果往往是用户在几个口令之间来回切换,合规检查通过了,实际强度没有提升。pam_pwhistory 记录最近若干次口令的哈希,改密时比对历史,禁止重复使用,把「改密」真正变成换新口令。
基本信息
| 适用平台 | Linux(pam_pwhistory.so,配置文件通常为 system-auth 或 common-password) |
|---|---|
| 关键参数 | remember(保留条数)、use_authtok、enforce_for_root |
| 记录文件 | /etc/security/opasswd |
| 基线 | remember 建议 5 及以上 |
典型使用场景
- 口令策略整改:复杂度与历史一起约束,才算完整
- 合规检查:口令复用限制是等保与 CIS 的常见条目
- 特权账号加严:对管理账号使用更长的历史与更强的复杂度要求
- 策略变更验证:确认历史记录确实阻止了重复口令
配置(以 system-auth 为例)
配置(以 system-auth 为例)
# 在密码栈中加入历史约束,用 use_authtok 复用已校验的口令
# password requisite pam_pwhistory.so use_authtok remember=5 enforce_for_root
# RHEL 8 及以上可以用 authselect 统一管理:
authselect enable-feature with-pwhistory 2>/dev/null || true
# 查看当前生效的 PAM 配置
ls -l /etc/pam.d/system-auth /etc/pam.d/password-auth 2>/dev/null验证
验证
# 历史记录文件应存在且权限严格
ls -l /etc/security/opasswd
# 实际操作验证:连续两次改成同一口令应被拒绝
# passwd testuser配置项读法
| 项 | 含义 | 注意点 |
|---|---|---|
| remember | 保留多少次历史口令 | 值过大影响用户体验,5 至 24 常见 |
| use_authtok | 复用前序模块给定的口令 | 缺少该参数会要求重复输入 |
| enforce_for_root | 对 root 同样生效 | 普通用户与 root 策略一致性 |
| opasswd | 历史哈希存放位置 | 属敏感文件,权限应为 600 |
opasswd 里存的是旧口令哈希:权限应为 600 且属主为 root,并纳入文件权限核查范围,备份与复制时按敏感文件处理。
remember 只约束 PAM 改密路径:管理员直接编辑 shadow 或批量下发口令会绕过历史记录,流程上要明确改密只能走标准通道。
历史条数与复杂度要一起看:只把 remember 调大而复杂度很弱,用户仍会用相似口令,实际强度提升有限,两项参数应配套调整。
改完策略要抽查几台机器确认生效:不同发行版把 PAM 配置分散在多个文件中,只在模板上改动而未覆盖实际加载的文件是常见疏漏。