修改Linux ECS实例root密码时,提示"passwd:Permission denied"

问题现象

执行passwd命令修改密码时,系统返回Permission denied错误。

问题原因

  • 文件锁定:核心认证文件(如/etc/passwd/etc/shadow)被设置了不可变属性,禁止所有修改操作。

  • 读写权限配置不当:文件读写权限配置不当,导致passwd命令无法修改密码。

  • SELinux策略限制:系统开启SELinux,且安全策略阻止passwd修改密码。

  • PAM配置文件格式异常:PAM配置文件(/etc/pam.d/)使用DOS格式会导致解析失败。

解决方案

重要

在执行任何系统文件修改前,请先为系统盘手动创建单个快照对配置数据进行备份。以便在发生意外时能够快速恢复。

步骤一:检查并修改文件属性

  1. 检查文件属性。

    sudo lsattr /etc/passwd /etc/shadow
  2. 如果输出中包含i属性或a属性(如----ia------),表示文件被锁定。使用chattr移除锁定。

    sudo chattr -ia /etc/passwd
    sudo chattr -ia /etc/shadow
  3. 移除属性后,尝试执行passwd命令。

步骤二:检查并修复文件权限

  1. 查看文件权限。

    sudo ls -l /etc/passwd /etc/shadow
  2. 核对权限是否符合标准。如若权限不正确,使用chmod修复。

    • /etc/passwd:标准权限为644-rw-r--r--)。

    • /etc/shadow:标准权限为000----------)或600-rw-------)。

    sudo chmod 644 /etc/passwd
    sudo chmod 000 /etc/shadow
  3. 修复权限后,尝试执行passwd命令。

步骤三:检查SELinux状态

  1. 检查SELinux的当前状态。

    sestatus
  2. 如果Current modeenforcing,表示系统处于强制模式,会禁止违反安全策略的文件修改。可以将SELinux临时调整为宽容模式,暂时允许这些操作。

    setenforce 0
  3. 关闭SELinux后,尝试执行passwd命令。

步骤四:检查PAM配置文件格式

  1. 检查PAM系统配置文件的格式。

    sudo file -i /etc/pam.d/passwd
  2. 如果输出包含ASCII text, with CRLF line terminators,则表示文件是DOS格式(使用CRLF换行),Linux系统无法解析含CRLF(\r\n)换行符的文件。需要转换格式。

    sudo yum install -y dos2unix
    sudo dos2unix /etc/pam.d/passwd
  3. 转换格式后,尝试执行passwd命令。

后续建议

问题解决后,可重新为/etc/passwd/etc/shadow文件添加不可变属性,防止意外篡改。

sudo chattr +i /etc/passwd
sudo chattr +i /etc/shadow