web-dev-qa-db-ja.com

SELinuxのrootパスワードのリセット

免責事項:この質問は、SELinuxがアクティブなときにrootパスワードを変更する問題を解決するためのものではありません。すでに解決するためのガイドがたくさんあるためです。これは、SELinuxが内部で行う方法の詳細です。

私は最近SELinuxを使用していますが、最近はもっと連絡を取り合っています。 rootのパスワードを忘れた場合にどうしたらリセットできるかと誰かが私に尋ねた瞬間がありました。

CentOSを起動し、grubエントリを次のように編集しました

linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash

私はpasswdを実行し、その後syncを実行して強制的に再起動しました。再起動後、古いパスワードだけでなく、新しいパスワードでのログインも拒否されました。

再度再起動し、SELinuxを無効にするパラメーター(selinux=0)をカーネルに渡しました。新しいパスワードでログインしてみましたが、うまくいきました。その後、fsの自動ラベル変更を(.autorelabelファイルを介して)強制し、SELinuxがアクティブな状態でログインできるようになりました。

私の質問は、なぜ起こるのですか?ユーザーまたはオブジェクトではなく、パスワードの変更のみがあった場合に、再ラベル付けがログインに影響を与えるのはなぜですか?

ご清聴ありがとうございました。

TL; DR:通常のrootパスワードのリセットは、SELinuxでは機能しません。どうして?

編集:これは、ハイパーバイザーとしてKVMを使用してCentOS7を実行している仮想マシンでテストされました。

12
Jorge Heleno

新しくインストールしたCentOS 7.5システムでこの問題を再現できました。

これが起こっていることです:

init=/bin/bashで起動すると、2つの問題が発生する可能性があります。

  • ルートファイルシステムは読み取り専用でマウントできます。この場合、passwdAuthentication token manipulation errorに文句を言います。

    これは非常に明白です。ファイルシステムが読み書き可能にマウントされていない場合、ファイルシステムに書き込むことはできません。

  • SELinuxポリシーがロードされていない可能性があります。この場合、passwdはパスワードを正常に変更しますが、上記の元の質問で説明されている問題が発生します。誰もログインできません。

    パスワードハッシュは/etc/shadowファイルに保存されます。このファイルは通常、SELinuxタイプshadow_tです。ただし、SELinuxポリシーがロードされていないときにファイルを変更すると、SELinuxタイプがファイルから削除され、unlabeled_tのままになります。したがって、ログインを認証するためにファイルを読み取ろうとするサービスは、それを読み取ることができなくなります。

したがって、RHEL/CentOS 7でrootパスワードを変更するには、次のプロセスに従う必要があります。

  1. 以前と同様に、init=/bin/bashをgrubのカーネルコマンドラインの最後に追加します。
  2. Bashプロンプトで、/usr/sbin/load_policy -iを使用してSELinuxポリシーをロードします。
  3. ルートファイルシステムをmount -o remount,rw /で読み書き可能にマウントします。
  4. ここでパスワードを変更すると、成功します。 passwd root
  5. ファイルシステムを読み取り専用で再マウントして変更をコミットし、mount -o remount,ro /を使用して次回の起動時にクリーンなファイルシステムを作成します。
  6. シェルを終了するか、exec /sbin/init 6を使用してシステムを再起動します。

これで、変更したrootパスワードでログインできます。

この手順の詳細な説明 はRed Hatから入手できます(サブスクリプションが必要です)。

17
Michael Hampton