Linux系统通过PAM模块强制限制密码重用,核心是配置pam_unix.so remember=5参数并确保/etc/security/opasswd可写,Windows则通过组策略设置“强制密码历史”为24次。

防止密码重用不是靠用户自觉,而是靠系统强制约束。核心思路是:让旧密码“进不了黑名单”,新密码“绕不开检查”。Linux 和 Windows 都可通过配置策略实现自动拦截,无需依赖用户记忆或自律。
Linux 系统:用 PAM 模块锁死历史密码
关键在于 pam_unix.so 的 remember 参数,它让系统记住最近用过的密码,并拒绝重复使用:
- 编辑
/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS) - 找到含
pam_unix.so的 password 行,在末尾添加remember=5(表示禁止重用最近5次密码) - 完整示例:
password [success=1 default=ignore] pam_unix.so obscure use_authtok sha512 remember=5 - 搭配
pam_pwquality.so使用时,还可设difok=4,确保新密码至少有4个字符与旧密码不同
Windows Server:通过组策略启用密码历史记录
AD 域环境或本地策略均可配置,生效后用户修改密码时系统自动比对:
- 打开
gpedit.msc→ 计算机配置 → Windows 设置 → 安全设置 → 帐户策略 → 密码策略 - 设置“强制密码历史”为 24(推荐值,即不允许重用最近24次密码)
- 同步配置“密码最长使用期限”(如90天)和“密码最短使用期限”(如1天),避免用户刚改完就立刻再改来绕过历史检查
- 若用 PowerShell 批量部署,可用
Set-ADDefaultDomainPasswordPolicy -PasswordHistoryCount 24
配套加固:让重用失效、让泄露兜底
单靠防重用不够,需叠加其他机制形成纵深防御:
-
启用多因素认证(MFA):即使密码被撞库或重用,攻击者仍无法登录;SSH 可配
AuthenticationMethods publickey,keyboard-interactive -
禁用弱密码提交:Linux 用
pam_pwquality要求大小写字母+数字+符号;Windows 组策略中开启“密码必须符合复杂性要求” -
定期审计账户密码状态:Linux 下用
chage -l username查有效期;Windows 用net user username /domain或导出 AD 密码最后设置时间
运维提醒:配置后务必验证
策略写进去不等于生效,常见疏漏点:
- 修改 PAM 配置后,无需重启服务,但需用户下次执行
passwd才触发检查 - 测试时用普通用户而非 root 修改密码,避免
enforce_for_root未启用导致跳过校验 - Windows 组策略应用后,运行
gpupdate /force并检查事件查看器中“安全”日志是否有策略加载失败提示 - 若发现用户频繁输错新密码,可能是
retry=3太严,可适当放宽但不建议低于2次

















