口令历史是做什么的
等保与安全基线通常要求口令不得重复使用,实现方式是 PAM 的 pam_pwhistory 模块:它把用户用过的口令哈希记录到 /etc/security/opasswd,改密时比对新口令与最近若干次的历史口令,命中则拒绝。配置要写进口令栈(RPM 系是 /etc/pam.d/system-auth 与 password-auth,deb 系对应 common-password),改完必须用实际账号连续改密验证生效。
基本信息
| 模块 | pam_pwhistory.so,负责口令复用控制 |
|---|---|
| 关键参数 | remember=N,限制历史口令数量 |
| 记录文件 | /etc/security/opasswd(root 可读) |
| 职责边界 | 复用控制归 pwhistory,复杂度控制归 pwquality |
| 生效方式 | 改配置后立即生效,用 passwd 实测验证 |
典型使用场景
- 等保测评要求口令不复用,需要在口令栈中启用历史记录
- 安全整改项落地:把 remember 参数按单位策略设置为固定值
- 排查「改密总提示重复」:确认历史记录数量与参数是否与策略一致
- 配合复杂度策略一起下发,形成完整口令管理要求
- 交接与审计:核对 opasswd 文件权限与内容规模是否符合预期
- 批量终端基线配置,把 PAM 改动纳入标准化脚本
配置与验证
配置与验证
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak # 改动前备份
# 在 password 栈中加入(示例 remember=5):
# password requisite pam_pwhistory.so remember=5
# password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
# 验证:连续给测试账号改密,重复旧口令应被拒绝
passwd testuser # 第一次改密
passwd testuser # 再改,输入与上次相同的口令
sudo ls -l /etc/security/opasswd # 确认历史文件权限非普通用户可读
grep -n pwhistory /etc/pam.d/system-auth # 确认配置已写入正确位置PAM 口令栈读法
| 字段 | 含义 | 本例取值 |
|---|---|---|
| 模块接口 | 所属处理阶段 | password |
| 控制位 | 失败时的处理方式 | requisite 必须通过 |
| 模块名 | 加载的 PAM 模块 | pam_pwhistory.so |
| 参数 | 模块行为调整 | remember=5 记录最近 5 次 |
| 顺序 | 同一栈上的先后关系 | 历史检查在口令写入之前 |
机制从启用那一刻开始记录:存量用户此前用过的口令不会进入历史链条,需要先完成一次改密,后续的重复检查才真正有效。
PAM 配置错误可能导致全系统无法登录,包括本地与远程。改动前备份原文件,保留一个已登录的 root 会话,改完立即用另一个终端验证登录与改密是否正常。