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

1次阅读
没有评论

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

image.webp

问题现象

在 CentOS 7/ 8 系统中,当我们尝试使用 passwd 命令修改用户密码时,有时会遇到如下错误提示:

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

passwd: Authentication token manipulation error
passwd: password unchanged

这个错误通常发生在密码修改的最后一步,系统无法将新密码写入到相关认证文件中。遇到这种情况,很多新手管理员会感到困惑,不知道从何下手排查问题。

原理分析

Linux PAM 工作机制

Linux 系统使用 PAM(Pluggable Authentication Modules,可插拔认证模块)来处理认证相关任务。当执行 passwd 命令时,系统会调用 PAM 模块来完成密码修改流程。PAM 的配置文件位于 /etc/pam.d/ 目录下,其中 passwd 文件定义了密码修改的具体流程。

/etc/shadow 文件的重要性

用户密码的哈希值存储在 /etc/shadow 文件中,这是一个高度敏感的系统文件。我们可以使用以下命令查看其权限:

ls -l /etc/shadow

正常情况下应该看到如下输出:

-r--------. 1 root root 1234 Jan 1 10:00 /etc/shadow

这表示该文件仅对 root 用户可读,其他用户没有任何权限。如果这个文件的权限不正确,就可能导致密码修改失败。

常见错误原因

  1. 文件权限问题 :/etc/shadow 或相关目录权限设置不当
  2. SELinux 限制:安全策略阻止了密码修改操作
  3. 磁盘空间不足:系统无法写入密码信息
  4. 文件系统只读 :/etc 目录被挂载为只读
  5. PAM 配置错误 :/etc/pam.d/passwd 文件被误修改

解决方案

方法 1:修复文件权限

首先检查并修复 /etc/shadow 文件的权限:

# 确保文件所有者为 root 且权限为 400
sudo chmod 400 /etc/shadow
sudo chown root:root /etc/shadow

# 同时检查 /etc/shadow- 备份文件和 /etc 目录权限
sudo chmod 600 /etc/shadow-
sudo chmod 755 /etc

风险提示:此操作需要 root 权限,错误的权限设置可能导致系统安全问题。

方法 2:检查并修复 PAM 配置

比较正常的 /etc/pam.d/passwd 文件内容:

# 正常配置示例
cat /etc/pam.d/passwd

# 输出应包含类似内容
#%PAM-1.0
auth       include      system-auth
account    include      system-auth
password   substack     system-auth

如果发现配置被修改,可以从备份恢复或手动修复:

# 从备份恢复
sudo cp /etc/pam.d/passwd- /etc/pam.d/passwd

# 或者手动编辑
sudo vi /etc/pam.d/passwd

方法 3:使用 chage 命令

如果 PAM 验证问题暂时无法解决,可以使用 chage 命令直接修改密码过期信息,间接实现密码修改:

# 设置密码过期,强制用户下次登录修改密码
sudo chage -d 0 username

避坑指南

安全操作 /etc/shadow

  1. 永远不要直接编辑 /etc/shadow 文件
  2. 修改前先备份:sudo cp /etc/shadow /etc/shadow.bak
  3. 使用 vipw 或vigr等专用工具编辑密码文件

配置 sudo 规则

为避免频繁切换到 root,可以配置 sudo 规则:

# 允许 wheel 组成员执行密码修改
%wheel ALL=(ALL) /usr/bin/passwd, !/usr/bin/passwd root

使用 auditd 监控

配置 auditd 监控对关键文件的访问:

# 监控 /etc/shadow 访问
sudo auditctl -w /etc/shadow -p wa -k shadow_access

进阶建议

pwconv/pwunconv 命令

  • pwconv:将密码从 /etc/passwd 转移到/etc/shadow
  • pwunconv:反向操作(不建议使用)

PAM 密码复杂度策略

编辑 /etc/pam.d/system-auth 文件,添加:

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1

故障排查流程图

graph TD
    A[遇到 token manipulation error] --> B[检查 /etc/shadow 权限]
    B -->| 权限正常 | C[检查磁盘空间]
    B -->| 权限异常 | D[修复权限]
    C -->| 空间足够 | E[检查 PAM 配置]
    C -->| 空间不足 | F[清理磁盘]
    E -->| 配置正常 | G[检查 SELinux]
    E -->| 配置异常 | H[修复 PAM 配置]
    G -->|SELinux 阻止 | I[临时禁用或调整策略]
    G -->|SELinux 正常 | J[使用 chage 命令]

延伸思考题

  1. 为什么 Linux 系统要将密码存储在 /etc/shadow 而不是 /etc/passwd 中?
  2. 如何在密码修改失败时获取更详细的错误信息?
  3. 企业环境中如何批量检测和修复多台服务器的密码修改问题?

通过本文的讲解,相信大家对 CentOS 系统中密码修改报错有了更深入的理解。遇到问题时,按照本文提供的排查思路和方法,大多数情况下都能快速解决问题。Linux 系统的安全性很大程度上依赖于这些认证机制的正确配置,因此理解其工作原理对系统管理员来说至关重要。

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