問題の説明
passwd コマンドを実行して root パスワードを変更すると、システムから Permission denied エラーが返されます。
原因
ファイルロック:
/etc/passwdや/etc/shadowなどのコア認証ファイルには不変属性があり、変更ができません。不正な権限: 1 つ以上のファイルの読み取りおよび書き込み権限が正しくないため、
passwdコマンドでパスワードを変更できません。SELinux ポリシーの制限: SELinux セキュリティポリシーにより、
passwdコマンドによるパスワードの変更が妨げられています。不正な PAM 設定ファイル形式:
/etc/pam.d/内の Pluggable Authentication Modules (PAM) 設定ファイルが DOS 形式を使用しているため、Linux が正しく解析できません。
解決策
システムファイルを変更する前に、スナップショットを作成してシステムディスクの設定データをバックアップしてください。これにより、問題が発生した場合にシステムを迅速に復元できます。
手順 1: ファイル属性の確認と変更
ファイル属性を確認します。
sudo lsattr /etc/passwd /etc/shadow出力に
i属性またはa属性 (例:----ia------) が含まれている場合、ファイルはロックされています。次のコマンドを実行して、これらの属性を削除します。sudo chattr -ia /etc/passwd sudo chattr -ia /etc/shadow属性を削除した後、
passwdコマンドを再試行します。
手順 2: ファイル権限の確認と修正
ファイル権限を確認します。
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コマンドを再試行します。
手順 3: SELinux のステータスの確認
SELinux の現在のステータスを確認します。
sestatusCurrent modeがenforcingの場合、SELinux は enforcing モードであり、セキュリティポリシーに違反する変更をブロックします。変更を許可するために、一時的にSELinuxを permissive モードに切り替えます。setenforce 0SELinuxをpermissiveモードに設定した後、passwdコマンドを再試行します。
手順 4: PAM 設定ファイル形式の確認
PAM 設定ファイルの形式を確認します。
sudo file -i /etc/pam.d/passwd出力に
ASCII text, with CRLF line terminatorsが含まれている場合、ファイルは DOS 形式です。Linux は CRLF の行末 (\r\n) を持つファイルを解析できないため、ファイル形式を変換します。sudo yum install -y dos2unix sudo dos2unix /etc/pam.d/passwdpasswdコマンドを再試行します。
推奨事項
問題が解決した後、誤った変更を防ぐために、/etc/passwd および /etc/shadow ファイルに不変属性を再適用できます。
sudo chattr +i /etc/passwd
sudo chattr +i /etc/shadow