web-dev-qa-db-ja.com

SELinuxが壊れていますか? CentOS 7をSELinuxを有効にして起動できない

UPSが消耗しているときにすべてのサーバーを安全にシャットダウンする必要があるほど深刻な電源障害と同時バックアップジェネレーター障害が最近発生しました。

1つのCentOS 7.4.1708サーバーを再起動すると(数か月で最初の「再起動」ですが、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. プロンプト: this 再起動してselinux=0でgrub

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

  5. 追跡 オンラインでアドバイスが見つかりました

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

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

    Failed to load SELinux policy, freezing
    
  8. Grubでselinux=0を使用して再起動しました

  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はまだ強制モードではなく、強制モードであることを思い出してください。

その結果、permissiveモードまたはenforcingモードのいずれかでSELinuxを有効にすることができずに行き詰まってしまい、これは問題です。

どうすればいいですか?

tl; dr:すべてがSELINUXTYPEの無効な値になりました。

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


何らかの理由で、ある時点で、_/etc/selinux/config_は_SELINUXTYPE=permissive_の設定を取得していました。

これはそのパラメーターの有効なオプションではなく、Dbus、Login Service、およびAuthorization Managerが失敗した理由としてリストされた理由に基づいて、値を「デフォルト」にフォールバックするように見えます。

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

CentOS 7には_selinux-policy-default_パッケージがないため、これは面倒です( たとえば、Debianでは、Jessieで故意に削除されました ですから、ここでも同じと思います)。

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

isがインストールされている_selinux-policy-targeted_のものに切り替えるには、構成を_SELINUXTYPE=targeted_に修正し(すべてが順調に進んでいるはずだったと思います)、再度_enforcing=0 autorelabel=1_。

その後、ラベルの変更が行われました。その後、システムは通常どおり起動しました。

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

# restorecon -rv /

それが無効モードで機能するかどうかは100%わかりませんが、Permissive/Enforcingである必要がある場合があります。

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

1
MikeyB

あなたはそれが回復モードで起動し、シェルシェルターミナルをルートし、disabled = 1を入れて再起動せずに再開し、設定ファイルでそれを無効にします...そしてselinuxをアンインストールして再起動します

0
Ronald Campos