linux中禁止用户重复使用最近密码需配置pam密码历史记录,通过pam_pwquality.so模块的remember=5参数保存5次旧密码哈希并校验,依赖/etc/security/opasswd文件存储,立即生效且仅作用于passwd命令。

Linux 中禁止用户重复使用最近的密码,核心是启用并配置 PAM 密码历史记录功能,它通过 pam_pwquality.so(推荐)或旧版 pam_pwhistory.so 模块实现。关键不是“记住旧密码”,而是“拒绝与最近 N 条历史密码雷同的新密码”。
配置密码历史记录条数(remember 参数)
该参数决定系统保存多少条旧密码哈希用于比对,新密码提交时会自动校验是否与其中任一条匹配。
- 编辑 PAM 密码策略文件:
sudo vi /etc/pam.d/password-auth(主流发行版如 RHEL/CentOS/Ubuntu 22.04+ 推荐)
或 sudo vi /etc/pam.d/system-auth(部分较老系统或特定场景) - 找到以
password requisite pam_pwquality.so开头的行(若无则添加),在末尾追加:
remember=5
表示保留最近 5 次密码的历史记录,用户无法复用这 5 条中的任意一条。 - 保存退出。此设置立即生效,适用于后续所有密码修改操作。
确保密码哈希已实际存储
仅设 remember 不够,还需确认系统启用了密码哈希存储机制:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 检查
/etc/security/opasswd文件是否存在且可写:
ls -l /etc/security/opasswd
正常应为 root 可读写,其他用户不可访问(如-rw------- 1 root root)。 - 若文件不存在,首次触发密码修改时会自动创建;若权限异常,需修复:
sudo touch /etc/security/opasswd && sudo chmod 600 /etc/security/opasswd && sudo chown root:root /etc/security/opasswd
验证是否生效
用测试用户尝试连续改密,观察是否被拦截:
- 先执行一次密码修改:
passwd → 输入当前密码 → 设置新密码(如P@ssw0rd1) - 立即再执行一次:
passwd → 输入当前密码 → 尝试再次设为P@ssw0rd1
系统应报错类似:
passwd: Authentication token manipulation error
或明确提示“Password has been used recently”。 - 若未报错,检查 PAM 配置行是否拼写正确、是否在正确的文件中、是否有多余空格或换行符。
补充说明:remember 值的合理选择
值并非越大越好,需兼顾安全与运维实际:
- 5~10 是常见平衡值:覆盖 3~6 个月内的密码轮换,避免用户陷入“想不出新密码”的困境。
- 设为 0 即关闭历史检查(不推荐);设为 1 仅防上一次重复,防护力有限。
- 注意:该机制只作用于
passwd命令修改密码,不适用于 SSH 密钥登录、sudo 免密等其他认证方式。










