共计 1874 个字符,预计需要花费 5 分钟才能阅读完成。
问题背景
在 CentOS 7.6 系统中,管理员偶尔会遇到需要重置 root 密码的情况,尤其是在忘记密码或接手旧系统时。传统方法是进入单用户模式直接修改密码,但有时执行 passwd 命令会返回 authentication token manipulation error 错误,导致密码无法更新。这个错误通常伴随着 /etc/shadow 文件无法写入的提示,让许多管理员感到困惑。

错误的表现形式如下:
# 尝试修改 root 密码时
passwd
Changing password for user root.
New password:
Retype new password:
passwd: Authentication token manipulation error
passwd: password unchanged
错误分析
这个错误的核心是系统无法更新用户的认证令牌(即密码哈希值)。经过实践分析,主要有以下三个原因:
-
文件系统挂载模式问题 :
/或/etc分区被挂载为只读 (ro) 模式,导致无法修改/etc/shadow文件 -
SELinux 策略限制:安全增强 Linux 的上下文标签不正确,阻止了对关键文件的修改
-
PAM 模块配置异常:可插拔认证模块的配置错误可能导致密码更新流程中断
解决方案
1. 进入单用户模式
首先需要进入单用户模式获取 root 权限:
- 重启服务器,在 GRUB 启动菜单界面按
e键编辑启动参数 - 找到以
linux16开头的行,在行尾添加init=/bin/bash - 按
Ctrl+X启动进入 bash shell
2. 检查并修复文件系统挂载
进入单用户模式后,首要任务是确认文件系统挂载状态:
# 查看当前挂载状态
mount | grep -E '/(|etc)'
# 如果发现 ro(只读)标记,需要重新挂载为 rw(读写)
mount -o remount,rw /
# 特别检查 /etc 是否单独挂载
mount | grep /etc
if [$? -eq 0]; then
mount -o remount,rw /etc
fi
3. 处理 SELinux 策略
有两种方法处理 SELinux 问题:
方案一:临时禁用 SELinux
# 查看当前 SELinux 状态
getenforce
# 如果是 Enforcing,暂时设置为 Permissive
setenforce 0
方案二:修复文件上下文
# 恢复 /etc/shadow 文件的 SELinux 上下文
chcon -t shadow_t /etc/shadow
# 也可以恢复整个 /etc 目录的上下文
restorecon -Rv /etc
4. 验证 PAM 配置
检查 PAM 相关配置是否正常:
# 查看 pam_unix.so 模块配置
cat /etc/pam.d/system-auth | grep pam_unix.so
# 正常情况下应该包含如下配置
# password sufficient pam_unix.so sha512 shadow try_first_pass
完整操作流程示例
以下是完整的密码重置流程代码块:
# 1. 进入单用户模式(如前述 GRUB 编辑方法)# 2. 重新挂载文件系统
mount -o remount,rw /
# 3. 检查 /etc 是否单独挂载
mount | grep /etc && mount -o remount,rw /etc
# 4. 临时关闭 SELinux
setenforce 0
# 5. 修改 root 密码
passwd
# 6. 强制更新文件系统
sync
# 7. 恢复 SELinux
setenforce 1
# 8. 重启系统
exec /sbin/init
避坑指南
在操作过程中需要注意以下常见误区:
- 直接重启不检查挂载状态:
- 错误做法:修改密码失败后直接重启
-
正确做法:先检查
mount输出,确保/和/etc是 rw 状态 -
完全禁用 SELinux:
- 错误做法:直接修改 /etc/selinux/config 永久禁用
-
正确做法:临时设置为 Permissive,问题解决后恢复
-
忽略 PAM 配置检查:
- 错误做法:只处理挂载和 SELinux
- 正确做法:同时验证 /etc/pam.d/ 下相关配置文件
安全考量
密码重置后,建议立即执行以下安全措施:
-
检查最近的登录记录:
lastlog last grep 'Accepted password' /var/log/secure -
验证 sudoers 文件是否被修改:
visudo -c lsattr /etc/sudoers -
考虑设置 SSH 密钥认证替代密码登录
延伸思考
如何预防此类问题的发生?可以考虑:
- 定期测试密码修改流程
- 建立系统快照后再进行敏感操作
- 维护详细的系统变更日志
- 考虑使用集中式身份管理系统
通过以上步骤和注意事项,应该能够成功解决 CentOS 7.6 中的 root 密码重置错误问题。记住在操作前做好备份,避免不必要的系统风险。
