SELinux が破損していますか? SELinux を有効にしても CentOS 7 を起動できません

SELinux が破損していますか? SELinux を有効にしても CentOS 7 を起動できません

最近、停電とバックアップ発電機の同時故障が発生しました。UPS の電力が枯渇したため、すべてのサーバーを安全にシャットダウンする必要があるほど深刻な状況でした。

CentOS 7.4.1708 サーバーを 1 台再起動したところ (数か月ぶりの「再起動」ですが、CentOS のアップデートは最新の状態です)、SELinux を有効にして起動できないという壁にぶつかりました。徹底的に調査しましたが、他にこの現象を経験した人がいるという証拠は見つからず、次に何を試せばよいかもわかりません。ここで誰かが何かアイデアを提供してくれることを期待しています。

タイムラインは次のとおりです。

  1. ブート
  2. いくつかのサービスが起動していないため、起動に失敗しました:

    FAILED Failed to start Login Service.
    See 'systemctl status systemd-logind.service' for details.
    FAILED Failed to start Authorization Manager.
    See 'systemctl status polkit.service' for details.
    DEPEND Dependency failed for Dynamic System Tuning Daemon.
    
  3. きっかけはこれselinux=0GRUBで再起動しました

  4. これは機能し、システムは動作しますが、SELinuxが無効になっているため、一時的な回避策以外としては実行できません。

  5. フォローオンラインで見つけたアドバイス:

    sudo yum reinstall selinux-policy-targeted
    
  6. 再起動

  7. 次の理由により起動に失敗しました:

    Failed to load SELinux policy, freezing
    
  8. selinux=0再びGRUBで再起動

  9. 見つかったさらなるアドバイス実行されました:

    sudo yum reinstall selinux-policy-targeted
    sudo touch /.autorelabel
    

    許可を設定する/etc/selinux/config

  10. 再起動

  11. 次のバナーが表示されます:

    Warning -- SELinux targeted policy relabel is required.
    Relabeling could take a very long time, depending on file
    system size and speed of hard drives.
    

    しかし、実際にラベル付けを行う代わりに、システムはすぐに再起動しました。他の出力を見るには速すぎます。

  12. 元のエラーで再度起動に失敗しました。

    ああ、またここに戻ってきました。そして、それがまだ存在しているのがわかります。これは/.autorelabel、再ラベル付けが行われなかったことを示しています。しかし、エラーが振り出しに戻ってしまったのは驚きです。

    また、SELinux はまだ強制モードではなく、許可モードになっていることに注意してください。

最終結果として、SELinux を permissive モードでも enforcing モードでも有効にできず、困った状況に陥ってしまいます。

どうすればいいでしょうか?

答え1

要約:すべては の無効な値に帰着しましたSELINUXTYPE

有効な値であることを確認しSELINUXTYPE、必要に応じて再ラベル付けを実行し (たとえば、診断中に SELinux をオフにして起動した場合)、再起動してシャンパンを開けます。


何らかの理由で、そしてある時点で、/etc/selinux/config設定を獲得しましたSELINUXTYPE=permissive

これはそのパラメータの有効なオプションではなく、Dbus、ログイン サービス、および承認マネージャが失敗した理由に基づいて、値が「デフォルト」の値に戻るように見えます。

Failed to open "/etc/selinux/default/contexts/dbus_contexts": No such file or directory

selinux-policy-defaultCentOS 7にはパッケージがないので面倒です(例えばDebianでは、Jessieでは意図的に削除されましただからここでも同じことが当てはまると思います。

restoreconこれは、(シングルユーザー モードから、および によってアクセスされたシェルから)を使用してファイル システムのラベルを変更しようとするinit=/sbin/shと、不可解な「そのようなファイルまたはディレクトリはありません」という出力が生成され、getenforce明らかな理由もなく「無効」と表示される理由でもあると思います。

切り替えるにselinux-policy-targetedをインストールした後、構成を に修正しSELINUXTYPE=targeted(最初からそうあるべきだったと思います)、 で再度再起動しましたenforcing=0 autorelabel=1

その後、ラベルの再付けが行われました。その後、システムは正常に起動しました。

答え2

次のようにしてファイルシステムのラベルを変更できるはずです。

# restorecon -rv /

それが無効モードで機能するかどうかは 100% 確信が持てません。Permissive/Enforcing にする必要があるかもしれません。

selinux を有効にして起動できますかinit=/bin/sh?

答え3

リカバリモードで起動し、シェルターミナルをルートしてdisabled=1を設定し、再起動せずに再開し、構成ファイルで無効にする必要があります...その後、selinuxをアンインストールして再起動します

答え4

SELinuxtype が正しく設定されていても、SELinux ポリシーが原因で同じ問題が発生する場合があります。また、起動画面に次の行が表示されます。
Failed to load SELinux policy, freezing
別の回避策として、この問題を解決するには、permissiveまず SELinux を モードに設定し
てからマシンを再起動します。再起動画面に SELinux がポリシーを生成しているのが表示されます。その後、問題なく強制モードに再度設定できます。

問題を解決する前に、ポリシー開発パッケージを確認してください。
sudo yum install policycoreutils-devel
インストール時にエラーが発生する場合があります。これは主にパッケージの競合が原因で、Red Hat 8 でも発生します。

関連情報