全部產品
Search
文件中心

Elastic Compute Service:修改Linux ECS執行個體root密碼時,提示"passwd:Permission denied"

更新時間:Mar 26, 2025

問題描述

在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”問題。如果問題仍未解決,請進一步檢查系統日誌或提交工單聯絡支援人員擷取協助。