問題現象
執行passwd命令修改密碼時,系統返回Permission denied錯誤。
問題原因
檔案鎖定:核心認證檔案(如
/etc/passwd,/etc/shadow)被設定了不可變屬性,禁止所有修改操作。讀寫權限配置不當:檔案讀寫權限配置不當,導致
passwd命令無法修改密碼。SELinux策略限制:系統開啟SELinux,且安全性原則阻止
passwd修改密碼。PAM設定檔格式異常:PAM設定檔(
/etc/pam.d/)使用DOS格式會導致解析失敗。
解決方案
在執行任何系統檔案修改前,請先為系統硬碟建立快照對配置資料進行備份。以便在發生意外時能夠快速恢複。
步驟一:檢查並修改檔案屬性
檢查檔案屬性。
sudo lsattr /etc/passwd /etc/shadow如果輸出中包含
i屬性或a屬性(如----ia------),表示檔案被鎖定。使用chattr移除鎖定。sudo chattr -ia /etc/passwd sudo chattr -ia /etc/shadow移除屬性後,嘗試執行
passwd命令。
步驟二:檢查並修複檔案許可權
查看檔案許可權。
sudo ls -l /etc/passwd /etc/shadow核對許可權是否符合標準。如若許可權不正確,使用
chmod修複。/etc/passwd:標準許可權為644(-rw-r--r--)。/etc/shadow:標準許可權為000(----------)或600(-rw-------)。
sudo chmod 644 /etc/passwd sudo chmod 000 /etc/shadow修複許可權後,嘗試執行
passwd命令。
步驟三:檢查SELinux狀態
檢查SELinux的目前狀態。
sestatus如果
Current mode為enforcing,表示系統處於強制模式,會禁止違反安全性原則的檔案修改。可以將SELinux臨時調整為寬容模式,暫時允許這些操作。setenforce 0關閉SELinux後,嘗試執行
passwd命令。
步驟四:檢查PAM設定檔格式
檢查PAM系統設定檔的格式。
sudo file -i /etc/pam.d/passwd如果輸出包含
ASCII text, with CRLF line terminators,則表示檔案是DOS格式(使用CRLF換行),Linux系統無法解析含CRLF(\r\n)分行符號的檔案。需要轉換格式。sudo yum install -y dos2unix sudo dos2unix /etc/pam.d/passwd轉換格式後,嘗試執行
passwd命令。
後續建議
問題解決後,可重新為/etc/passwd和/etc/shadow檔案添加不可變屬性,防止意外篡改。
sudo chattr +i /etc/passwd
sudo chattr +i /etc/shadow