SELinux を有効にすると起動できないのはラベルのエラーが原因かもしれません。
- SELinux を無効化すると起動するのが、有効化するとエラーになる。
- SELinux を再インストールしても「Failed to load SELinux policy」が消えない。
- ネット上の「Failed to load SELinux policy」 ケースのどれも該当しない。
- OS が異常終了した後に、なぜか「Failed to load SELinux policy」が表示されるようになり、Linux が起動できなくなった。
VirtualBox で起きた現象ですが、実機でも起きるのではないかと思います。
SELinux の設定値を間違えた結果「Failed to load SELinux policy」が表示されてLinux が起動できなくなるという情報はたくさんあったのですが、私のケースと同じと思われるものはなかったので、その解決手順をメモしておきます。
OS 異常終了後、起動時に「Failed to load SELinux policy」が出て、フリーズする場合の対策方法。
Failed to load SELinux policy
→ Failed to load SELinux policy, freezing のコンボ
症状について。
起動時に「Failed to load SELinux policy」が出て、
ずっとぐるぐるしていて、起動してこない。
【Esc】キーを押すと、Failed to load SELinux policy, freezing でフリーズしているのがわかる。
Failed to load SELinux policy が出始めた原因。
再起動するときにメモリエラーが出て、
中断状態から電源を入れ直して起動するとSELinux のエラー発生するようになる。
以降VM を何度起動しても Failed to load SELinux policy → Failed to load SELinux policy, freezing のループに陥る。
暫定的な回避策。
SELinux を無効にして起動する。
「Failed to load SELinux policy」でネットを検索すると、
起動時に「SELinux」を無効化すれば「 Failed to load SELinux policy → Failed to load SELinux policy, freezing 」のフリーズは回避できることがわかった。
起動時のコア選択画面でキーボードの【E】を押す。
エディット画面に移動するので、以下の位置(LANG=ja_JP.UTF-8 の後ろ)に「selinux=0」を追加して、
【Ctrl】+【X】を押します。
■ 参考サイト
CentOS起動でバーが100%から起動しない場合:SELinux失敗した時
今回の現象について考える。
とりあえず起動するようになったので、解決かなと思ったのですが、そもそもSELinux ってなんだったんろう?
SELinux ってそもそも何なのか。
SELinux は「Security-Enhanced Linux」の略で、セキュリティー機能です。
https://ja.wikipedia.org/wiki/Security-Enhanced_Linux
理解できた範囲でざっくり言うと、
ユーザー、グループ、所有者のパーミッション制御だけでなく、
ファイルごとにラベルを付与しておいて、ラベル側からもアクセス制限しちゃおう。
というコンセプトのセキュリティー機能なのだそうです。(実際は多分もっと複雑なものだと思います。)
このSELinux が有効になっていると一部のアプリケーションが起動しないなどの問題があったり、いろいろとトラブルの原因になったりすることから、無効化しようとして設定値を間違えてしまい、Linux を起動できなくなるケースが多く、「SELinux を無効化して起動する」という暫定回避策も、設定を間違えて起動しなくなったとき用の手順でした。
今回、SELinux の問題で起動できなくなっているのは、
「メモリエラー」による異常終了がトリガーになって起きている問題です。
皆さんはSELinux を無効化して起動して設定を修正すれば元通りですが、
私の場合SELinux を無効化すれば起動はできるのですが、有効化すると起動が出来ないので根本的な解決には至っていません。
SELinux の問題を修正して起動する。
今回の「Failed to load SELinux policy」の原因
いろいろと試した結果、今回のSELinux エラーの原因は、
「VMがメモリエラーで異常終了したことをトリガーにSELinux のラベリングでエラーが発生し、
起動時にSELinux がいろいろなサービスへのアクセスをブロックしてしまっていた結果。」
と推測されます。
起動時の画面。
この問題を修正するには、起動時に「enforcing=0 autorelabel=1」を設定して、
リラベルを実行してから再起動すれば解決できることが分かりました。
修正の手順
起動時のコア選択画面でキーボードの【E】を押す。
エディット画面に移動するので、以下の位置(LANG=ja_JP.UTF-8 の後ろ)に
「 enforcing=0 autorelabel=1 」を追加して、【Ctrl】+【X】を押します。
パッシブモードで起動しているのはラベルエラーが多い場合、
パッシブモードでないとリラベルが実行できないからです。
リラベルが実行されているのがわかる。
この後、自動的に再起動され、通常通り起動できるようになりました。
検証中、selinux を再インストールしないと うまく行かないケースもありました。
■ 設定値については以下のページを参照してください。
4.5. システムの起動時での SELinux モードの変更
以上です。