共计 1683 个字符,预计需要花费 5 分钟才能阅读完成。
背景与痛点
在 CentOS 系统管理中,修改用户密码是最基础的操作之一。然而,许多系统管理员都遇到过在执行 passwd 命令时出现 ’Token Manipulation Error’ 错误的情况。这个错误会导致密码修改失败,给系统管理工作带来诸多不便。

这个错误的典型场景包括:
- 新建用户后首次设置密码时
- 定期修改密码时
- 通过自动化脚本批量修改密码时
错误发生时,用户通常会看到类似这样的提示:
passwd: Authentication token manipulation error
passwd: password unchanged
根因分析
1. PAM 模块配置问题
PAM(Pluggable Authentication Modules)是 Linux 系统的认证框架。当修改密码时,系统会调用 PAM 栈中的多个模块进行验证。常见的配置问题包括:
- pam_cracklib.so 模块的密码复杂度检查失败
- pam_pwquality.so 模块的密码策略限制
- pam_unix.so 模块的密码哈希生成失败
2. 文件系统权限问题
密码修改涉及多个关键文件,包括:
- /etc/shadow:存储密码哈希
- /etc/passwd:用户基本信息
- /etc/security:PAM 相关配置文件
如果这些文件的权限设置不正确(如 shadow 文件不可写),就会导致密码修改失败。
3. SELinux 策略限制
SELinux 的安全上下文和策略可能阻止密码修改操作,特别是当:
- 相关文件的安全上下文不正确
- 当前策略限制了 passwd 命令的权限
- 系统处于 enforcing 模式且没有适当的规则
解决方案
方案一:修改 PAM 配置
-
备份当前 PAM 配置:
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak -
编辑 system-auth 文件:
vi /etc/pam.d/system-auth -
找到包含 pam_unix.so 的行,修改为:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
参数说明:
– sha512:使用 SHA512 哈希算法
– shadow:使用 shadow 密码文件
– nullok:允许空密码
– try_first_pass:尝试使用之前输入的其他密码
方案二:调整 SELinux 策略
-
检查 SELinux 状态:
getsebool -a | grep passwd -
临时修改策略:
setsebool -P authlogin_passwd=1 -
如果问题依旧,可以尝试:
restorecon -v /etc/shadow
方案三:使用 chpasswd 替代方案
-
使用 root 权限执行:
echo "username:newpassword" | chpasswd -
或者批量修改密码:
chpasswd < users.txt
安全注意事项:
– 确保密码文件权限为 600
– 操作完成后立即删除包含密码的临时文件
– 避免在命令行中直接显示密码
避坑指南
- 权限问题:
- 确保 /etc/shadow 文件权限为 640
- 确保 /etc/passwd 文件权限为 644
-
关键目录如 /etc/security 的权限应为 755
-
PAM 配置陷阱:
- 修改前务必备份原始配置
- 避免同时修改多个 PAM 模块
-
测试时保持另一个 SSH 会话开启以防锁死
-
SELinux 注意事项:
- 不要随意将 SELinux 设置为 permissive 模式
- 使用 audit2allow 生成自定义策略而非完全禁用
- 定期检查安全上下文
进阶建议
- 日志监控:
- 定期检查 /var/log/secure 日志
-
监控 PAM 相关事件:
aureport -a -i | grep PAM -
预防措施:
- 实施定期密码策略审计
- 使用 pam_tally2 模块防止暴力破解
- 配置密码复杂度要求
延伸思考
- 如何在保持系统安全性的前提下,优化 PAM 模块的验证流程?
- 当面对大规模服务器集群时,如何设计一个既安全又高效的密码管理方案?
通过本文的分析和解决方案,相信您已经能够应对 CentOS 系统中 ’Token Manipulation Error’ 这一常见问题。记住,系统安全和管理便利性需要平衡考虑,任何修改都应该在充分理解影响后进行。
