共计 2071 个字符,预计需要花费 6 分钟才能阅读完成。
问题现象
在 CentOS 7/ 8 系统中执行 passwd 命令修改密码时,有时会遇到如下报错:

passwd: Authentication token manipulation error
passwd: password unchanged
这个错误通常发生在普通用户尝试修改自己密码,或者管理员尝试修改其他用户密码时。错误提示中的 ”token” 指的是 Linux 系统中的密码令牌机制,这个报错表明系统在更新密码令牌时遇到了问题。
原理分析
Linux PAM 工作机制
Linux 使用 PAM(Pluggable Authentication Modules)进行身份验证管理。当执行 passwd 命令时:
- 系统会调用
/etc/pam.d/passwd中定义的 PAM 模块链 - 各模块依次验证请求的合法性
- 最终通过
pam_unix.so模块更新/etc/shadow中的密码哈希
/etc/shadow 文件的重要性
/etc/shadow存储了所有用户的密码哈希,其典型权限如下:
-r-------- 1 root root 1254 Jun 15 10:23 /etc/shadow
关键点:
– 只有 root 用户有读取权限
– 密码修改过程需要写入此文件
常见错误原因
- 文件权限问题 :
/etc/shadow或其父目录权限不正确 - SELinux 限制:安全上下文配置错误
- 磁盘空间不足:无法创建临时文件
- PAM 配置错误:认证链被破坏
- 文件系统只读 :特别是
/etc目录
解决方案
方法 1:修复文件权限
检查并修复 /etc/shadow 权限:
# 查看当前权限
ls -l /etc/shadow
# 修复权限(需要 root 权限)chmod 400 /etc/shadow
chown root:root /etc/shadow
# 同时检查 /etc 目录权限
chmod 755 /etc
方法 2:检查 PAM 配置
比较正常的 /etc/pam.d/passwd 文件内容:
#%PAM-1.0
auth include system-auth
account include system-auth
password substack system-auth
-password optional pam_gnome_keyring.so
如果文件被修改,可以从其他正常机器复制或使用包管理器修复:
yum reinstall pam
方法 3:使用 chage 命令
chage命令可以绕过部分 PAM 验证:
# 设置用户密码过期,强制下次登录修改
chage -d 0 username
# 或者直接修改密码(需要 root)chage -l username # 先查看当前状态
避坑指南
安全操作 shadow 文件
- 任何时候都不要直接编辑
/etc/shadow - 修改前先备份:
cp -p /etc/shadow /etc/shadow.bak - 使用
vipw或vigr等安全编辑工具
配置 sudo 规则
避免直接使用 root,配置精细化的 sudo 权限:
# 在 /etc/sudoers.d/ 下创建文件
User_Alias ADMINS = user1, user2
ADMINS ALL=(root) /usr/bin/passwd, /usr/bin/chage
使用 auditd 监控
监控对关键文件的访问:
# 添加监控规则
auditctl -w /etc/shadow -p wa -k shadow-file
# 查看日志
aureport -k | grep shadow-file
进阶建议
pwconv/pwunconv 命令
pwconv: 将/etc/passwd中的密码转移到/etc/shadowpwunconv: 反向操作(不建议生产环境使用)
密码复杂度策略
在 /etc/pam.d/system-auth 中配置:
password requisite pam_pwquality.so try_first_pass retry=3 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
排查流程图
graph TD
A[遇到 token manipulation error] --> B{检查磁盘空间}
B -- 充足 --> C[检查 /etc/shadow 权限]
B -- 不足 --> D[清理磁盘空间]
C -- 正常 --> E[检查 PAM 配置]
C -- 异常 --> F[修复权限]
E -- 正常 --> G[检查 SELinux 状态]
E -- 异常 --> H[修复 PAM 配置]
G -- enforcing --> I[临时设置为 permissive]
G -- 正常 --> J[检查文件系统状态]
延伸思考
- 如果在
/etc/shadow权限正确的情况下仍然报错,还可能是什么原因? - 如何通过 PAM 模块实现双因素认证的密码修改流程?
- 在容器环境中遇到此错误,排查思路有何不同?
总结
遇到 ’token manipulation error’ 时,不要慌张。按照本文提供的步骤,从文件权限、PAM 配置、SELinux 状态等方面逐步排查,通常都能快速解决问题。重要的是理解 Linux 密码管理的底层机制,这样不仅能解决问题,还能预防类似情况的发生。记住,生产环境中操作敏感文件时,一定要谨慎并做好备份。
希望这篇指南能帮助你顺利解决密码修改问题,如果遇到特殊情况,欢迎在评论区交流讨论。
正文完
