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

问题描述

Linux实例中修改root密码时,遇到“passwd: Permission denied”的错误。

原因分析

Linux系统中,/etc/passwd/etc/shadow是直接存储用户信息和密码的核心文件,其权限或属性异常会直接影响密码修改操作。而/etc/pam.d/*目录下的配置文件则与PAM(Pluggable Authentication Modules)模块相关,主要定义了认证规则,通常不会直接导致“Permission denied”错误,除非存在严重的配置错误(如模块缺失或格式异常)。所以,此问题通常由以下原因导致:

  • /etc/passwd/etc/shadow/etc/pam.d/* 等关键文件的权限设置不正确。

  • PAM(可插拔认证模块)配置文件格式错误,例如文件为DOS格式。

  • 系统日志中记录的相关文件不存在或模块错误等问题。

解决方案

重要

在对系统文件进行修改前,建议创建快照或备份重要数据,以防误操作导致数据丢失。

步骤一:检查关键文件的权限

  1. 运行以下命令,检查文件权限是否正常。

    ls -l /etc/passwd /etc/shadow /etc/pam.d/*

    正常情况下:

    • /etc/passwd权限为644(即rw-r--r--),所有者为root

    • /etc/shadow权限为600(即rw-------),所有者为root

    • /etc/pam.d/*权限为644(即rw-r--r--),所有者为root

  2. 如果发现权限异常,可以使用以下命令修复文件权限。

    sudo chmod 644 /etc/passwd
    sudo chmod 600 /etc/shadow
    sudo chmod -R 644 /etc/pam.d/*
  3. 运行以下命令,检查文件不可变属性。

    lsattr /etc/passwd /etc/shadow
  4. 若输出中包含i(如----i--------),表示文件不可修改,可执行以下命令移除i属性。

    sudo chattr -i /etc/passwd
    sudo chattr -i /etc/shadow

    修改密码后,可重新设置i属性以增强安全性。

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

步骤二:检查SELinux状态

如果系统启用了SELinux服务,可能会限制密码修改操作。可以通过以下命令临时关闭SELinux。

# 查看SELinux状态
sestatus

# 临时关闭SELinux(若启用)
sudo setenforce 0

如果问题解决,可根据需求永久关闭SELinux,具体请参见永久关闭SELinux服务

步骤三:使用strace追踪修改密码过程

  1. 通过strace命令,追踪修改密码的过程,并将日志输出到/tmp/changepasswd文件。

    strace -o /tmp/changepasswd passwd root
  2. 执行以下命令分析日志,若输出类似open("/etc/pam.d/system-auth-ac\r", O_RDONLY),则确认/etc/pam.d/system-auth-ac文件格式异常(DOS格式导致)。

    grep "open" /tmp/changepasswd | grep "\/r"

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

  1. 执行以下命令检查文件格式。如果问题与PAM模块相关,可能是/etc/pam.d/system-auth-ac文件格式异常(例如DOS格式)。

    # CentOS/RHEL
    file -i /etc/pam.d/system-auth-ac
    
    # Ubuntu/Debian
    file -i /etc/pam.d/passwd

    如果输出中包含us-asciiwith CRLF line terminators,则表示文件为DOS格式。

  2. 如果文件为DOS格式使用以下命令将文件从DOS格式转换为Unix格式。

    # CentOS/RHEL
    sudo dos2unix /etc/pam.d/system-auth-ac
    
    # Ubuntu/Debian
    sudo dos2unix /etc/pam.d/passwd

步骤五:验证修改结果

  1. 完成上述步骤后,再次尝试修改root密码。

    passwd root

    输入新密码并确认,查看是否能够成功修改密码且不再出现“Permission denied”错误。

  2. 使用新密码登录系统,验证密码修改是否生效。

通过上述步骤,您可以逐步排查并解决“passwd: Permission denied”问题。如果问题仍未解决,请进一步检查系统日志或提交工单联系技术支持获取帮助。