共计 1261 个字符,预计需要花费 4 分钟才能阅读完成。
问题背景
在 Linux 系统管理中,忘记 root 密码是常见情况。CentOS 7.6 通常通过单用户模式重置密码,但执行 passwd 命令时可能遇到 authentication token manipulation error 错误。这个报错会导致密码修改失败,即使输入了正确的新密码。错误提示往往伴随着 password unchanged 的补充说明。

错误分析
经过实践排查,该错误主要源于以下三种系统级保护机制:
- 文件系统挂载模式 :单用户模式下
/分区可能被挂载为只读 (ro) 状态,导致无法修改存储密码的/etc/shadow文件 - SELinux 策略限制:安全增强 Linux 的上下文标签变更会阻止密码修改操作
- PAM 模块配置:身份验证模块的异常配置可能中断密码更新流程
解决方案
进入单用户模式
- 重启系统并在 GRUB 菜单界面按
e进入编辑模式 - 找到
linux16行,在末尾追加init=/bin/bash(注意先保留原始参数) - 按 Ctrl+ X 启动进入 bash shell
检查修复文件系统
# 查看当前挂载模式
mount | grep "on /"
# 若显示 ro 则重新挂载为读写模式
mount -o remount,rw /
# 确认可写状态
touch /testfile && rm -f /testfile
处理 SELinux 策略
临时方案(立即生效但重启失效):
setenforce 0 # 切换 SELinux 到宽容模式
持久方案(需文件系统可写):
# 检查 shadow 文件上下文
ls -Z /etc/shadow
# 恢复默认安全上下文
chcon -t shadow_t /etc/shadow
验证 PAM 配置
检查关键配置文件权限:
ls -l /etc/pam.d/passwd
ls -l /etc/security/opasswd # 历史密码存储文件
完整操作流程
# 1. 进入单用户模式后执行
mount -o remount,rw /
# 2. 关闭 SELinux 保护
setenforce 0
# 3. 实际修改密码
passwd root
# 4. 创建自动标记文件(避免启动时 relabeling)touch /.autorelabel
# 5. 同步数据并重启
exec /sbin/init 6
避坑指南
- 误删 autorelabel 文件 :
/.autorelabel是 SELinux 重建标签的关键标志,遗漏会导致启动失败 - 直接修改 shadow 文件 :手动编辑密码哈希极易出错,应始终使用
passwd命令 - 忽略日志检查 :操作后必须查看
/var/log/secure确认密码更新记录
安全考量
密码重置后应立即:
- 检查
lastb命令显示的失败登录记录 - 更新 SSH 密钥:
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key - 恢复 SELinux 策略:
setenforce 1
延伸思考
如何构建更安全的密码恢复方案?建议考虑:
1. 预先配置 GRUB 密码防止未授权进入单用户模式
2. 定期备份关键认证配置文件
3. 使用 LDAP 集中管理认证信息
通过这套方案,我们不仅解决了眼前的密码重置问题,更深入理解了 Linux 系统的安全机制。记住:任何绕过正常认证流程的操作都应记录在审计日志中。
正文完
