問題描述
在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格式。
系統日誌中記錄的相關檔案不存在或模組錯誤等問題。
解決方案
在對系統檔案進行修改前,建議建立快照或備份重要資料,以防誤操作導致資料丟失。
步驟一:檢查關鍵檔案的許可權
運行以下命令,檢查檔案許可權是否正常。
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
。
如果發現許可權異常,可以使用以下命令修複檔案許可權。
sudo chmod 644 /etc/passwd sudo chmod 600 /etc/shadow sudo chmod -R 644 /etc/pam.d/*
運行以下命令,檢查檔案不可變屬性。
lsattr /etc/passwd /etc/shadow
若輸出中包含
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
追蹤修改密碼過程
通過
strace
命令,追蹤修改密碼的過程,並將日誌輸出到/tmp/changepasswd
檔案。strace -o /tmp/changepasswd passwd root
執行以下命令分析日誌,若輸出類似
open("/etc/pam.d/system-auth-ac\r", O_RDONLY)
,則確認/etc/pam.d/system-auth-ac
檔案格式異常(DOS格式導致)。grep "open" /tmp/changepasswd | grep "\/r"
步驟四:檢查並修複PAM設定檔格式
執行以下命令檢查檔案格式。如果問題與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-ascii
和with CRLF line terminators
,則表示檔案為DOS格式。如果檔案為DOS格式,使用以下命令將檔案從DOS格式轉換為Unix格式。
# CentOS/RHEL sudo dos2unix /etc/pam.d/system-auth-ac # Ubuntu/Debian sudo dos2unix /etc/pam.d/passwd
步驟五:驗證修改結果
完成上述步驟後,再次嘗試修改root密碼。
passwd root
輸入新密碼並確認,查看是否能夠成功修改密碼且不再出現“Permission denied”錯誤。
使用新密碼登入系統,驗證密碼修改是否生效。
通過上述步驟,您可以逐步排查並解決“passwd: Permission denied”問題。如果問題仍未解決,請進一步檢查系統日誌或提交工單聯絡支援人員擷取協助。