清除密码历史记录,解决pam安全策略密码无法复用问题

RHEL8 精准清除 root 密码历史记录,解决 "Password has been already used" 无法复用旧密码问题

一、问题场景

RHEL8 默认启用 pam_pwhistory 密码历史策略,很多生产加固配置中还会加入 enforce_for_root 参数,代表 root 用户也禁止复用历史密码。

症状很直接:

· 即使是 root,也无法使用曾经用过的旧密码

· passwd 报错 Password has been already used

· 想恢复成机房统一标准口令时被历史策略拦截

二、原理说明

RHEL8 的密码历史记录不存放在 shadow,也不存放在系统日志,唯一存储文件是:

复制代码
/etc/security/opasswd

文件作用:

· 记录所有用户历史密码哈希

· remember=N 策略依赖此文件判断是否重复

· 普通修改 PAM 配置不清理此文件依然报错

文件格式大致为:

复制代码
用户名:哈希1,哈希2,哈希3

每个用户一行,冒号后是该用户历史密码哈希的逗号分隔列表。

三、生产最优方案:只清理 root 历史(不影响其他用户)

核心优势

  1. 不关闭 PAM 策略(合规、不破坏基线)
  2. 不清空所有用户密码历史(只动 root)
  3. 无需重启、无需变更 authselect 配置
  4. 审计风险最低

步骤 1:备份原文件(生产必做)

bash 复制代码
cp -a /etc/security/opasswd /etc/security/opasswd.bak.$(date +%F)

步骤 2:查看当前密码历史记录

bash 复制代码
cat /etc/security/opasswd

你会看到类似:

复制代码
root:$6$xxxx$yyyy,...
user1:$6$aaaa$bbbb,...

步骤 3:仅删除 root 那一行

使用 sed 精准删除,避免手工编辑误伤其他用户:

bash 复制代码
sed -i '/^root:/d' /etc/security/opasswd

验证删除结果:

bash 复制代码
grep -c '^root:' /etc/security/opasswd   # 应返回 0
wc -l /etc/security/opasswd               # 确认文件未被清空

只删除 root 开头那一行,保留其他所有业务用户历史密码记录。

步骤 4:直接修改为旧密码

bash 复制代码
passwd root

文件修改立即生效,不需要重启,也不需要特意新开 SSH 会话。如果当前会话执行 passwd 遇到异常,再新开一个会话重试即可。

此时:

· 系统无历史密码校验

· 可以成功设置你需要的旧密码

· 复杂度校验依然保留(安全策略不失效)

相关推荐
分布式存储与RustFS4 小时前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天4 小时前
服务器和虚机配置IPV6
运维·服务器·github
zixu_star5 小时前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化
AR-26710-5 小时前
Linux Day33——定时任务+lvm
linux·运维
润滑卫士6 小时前
液压系统工作粘度窗口等级选型:泵允许粘度范围与油温-粘度匹配计算
运维
每月一号准时摆烂8 小时前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记
时间售卖铺9 小时前
Chrony与SSH实战:精准时间同步与安全远程登录
运维·安全·云原生·ssh
微订校园外卖系统9 小时前
校园代取快递系统选型:现成系统与定制开发的技术核对项
大数据·运维·人工智能·外卖系统·本地生活·微订
QXWZ_IA9 小时前
管道GIS测绘如何实现自动化成图:三种成图方式怎么选
运维·人工智能·安全·自动化
一条破秋裤9 小时前
【1112】Linux中断【整理】
linux·运维·服务器