CentOS修改密码报错token manipulation error的排查与修复指南

1次阅读
没有评论

共计 2071 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

问题现象

在 CentOS 7/ 8 系统中执行 passwd 命令修改密码时,有时会遇到如下报错:

CentOS 修改密码报错 token manipulation error 的排查与修复指南

passwd: Authentication token manipulation error
passwd: password unchanged

这个错误通常发生在普通用户尝试修改自己密码,或者管理员尝试修改其他用户密码时。错误提示中的 ”token” 指的是 Linux 系统中的密码令牌机制,这个报错表明系统在更新密码令牌时遇到了问题。

原理分析

Linux PAM 工作机制

Linux 使用 PAM(Pluggable Authentication Modules)进行身份验证管理。当执行 passwd 命令时:

  1. 系统会调用 /etc/pam.d/passwd 中定义的 PAM 模块链
  2. 各模块依次验证请求的合法性
  3. 最终通过 pam_unix.so 模块更新 /etc/shadow 中的密码哈希

/etc/shadow 文件的重要性

/etc/shadow存储了所有用户的密码哈希,其典型权限如下:

-r-------- 1 root root 1254 Jun 15 10:23 /etc/shadow

关键点:
– 只有 root 用户有读取权限
– 密码修改过程需要写入此文件

常见错误原因

  1. 文件权限问题 /etc/shadow 或其父目录权限不正确
  2. SELinux 限制:安全上下文配置错误
  3. 磁盘空间不足:无法创建临时文件
  4. PAM 配置错误:认证链被破坏
  5. 文件系统只读 :特别是/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 文件

  1. 任何时候都不要直接编辑/etc/shadow
  2. 修改前先备份:cp -p /etc/shadow /etc/shadow.bak
  3. 使用 vipwvigr等安全编辑工具

配置 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/shadow
  • pwunconv: 反向操作(不建议生产环境使用)

密码复杂度策略

/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[检查文件系统状态]

延伸思考

  1. 如果在 /etc/shadow 权限正确的情况下仍然报错,还可能是什么原因?
  2. 如何通过 PAM 模块实现双因素认证的密码修改流程?
  3. 在容器环境中遇到此错误,排查思路有何不同?

总结

遇到 ’token manipulation error’ 时,不要慌张。按照本文提供的步骤,从文件权限、PAM 配置、SELinux 状态等方面逐步排查,通常都能快速解决问题。重要的是理解 Linux 密码管理的底层机制,这样不仅能解决问题,还能预防类似情况的发生。记住,生产环境中操作敏感文件时,一定要谨慎并做好备份。

希望这篇指南能帮助你顺利解决密码修改问题,如果遇到特殊情况,欢迎在评论区交流讨论。

正文完
 0
评论(没有评论)