no image

SELinuxの設定ミスからの復旧

1. はじめに

はしへいです。SELinuxの設定を「disabled」とするべきところを「disaled」と設定してしまった事により、Linuxサーバが以下のメッセージを出力しサーバが起動途中で停止してしまう状態となってしまった。

 [!!!!!!] Failed to load SELinux policy, freezing.

2. 実施した復旧方法

今回の失敗はGCPのVMインスタンスで起こしてしまった為、以下の手順で復旧させる事にしました。
オンプレミス環境のサーバであればSSD(HDD)を取り外し別のPC等にマウントの上復旧対応したり、USBブートOSから起動し復旧対応する等、さらに手間がかかる。

  1. 別のVMインスタンスでのディスクマウント
  2. SELinux設定の修正
  3. ディスクマウントの再設定

3. GCP VMインスタンスでの実施手順

3-1. 別のVMインスタンスでのディスクマウント

他のVMインスタンスに起動しなくなったVMインスタンスが利用する起動ディスクをマウントし、SELinuxの設定ファイルを修正する事で復旧させる。具体的には以下の手順を実施する。

  1. 新たなVMインスタンス1を作成する。(instance-1)
  2. 復旧させたいVMインスタンス(R-instance)を停止する。


  3. 復旧させたいVMインスタンス(R-instance)の名前を選択し、インスタンスの詳細画面を開き、編集ボタンをクリックする。この時に必ず、復旧させたいVMインスタンスの設定を控えておく


  4. 「インスタンスを削除する際にブートディスクを削除する」のチェックを外し「保存」する。


  5. 復旧させたいVMインスタンス(R-instance)を削除する。削除は右上のボタンから実施できる。


    この際、ブートディスク の削除について勧められるが、チェックをつけずにVMインスタンスのみ削除する
  6. VMインスタンス1を停止する。
  7. VMインスタンス1の名前を選択し、インスタンスの詳細画面を開き、編集ボタンをクリックする。
  8. [追加ディスク]の箇所に「➕項目を追加」があるので、クリックする。
  9. 名前から復旧させたいVMインスタンスで利用しているディスク(R-instance)を選択する。

3-2. SELinux設定の修正

  1. VMインスタンス1を起動する。
  2. VMインスタンス1にログインしたら、以下のコマンドを実施しSELinuxのコンフィグを編集する。
    $ sudo mount -o defaults /dev/sdb1 /mnt
    $ sudo vi /mnt/etc/selinux/config

    SELinuxの設定を正しく修正する。今回はSELinuxを無効にする。

    SELINUX=disabled

3-3. ディスクマウントの再設定

  1. 項番[6-8]を参考に、VMインスタンス1から復旧させたいVMインスタンスのディスクを取り外す。取り外すには、追加ディスクの右側にある「X」ボタンをクリックし、「保存」する。
  2. 項番[3]で控えていた復旧させたいVMインスタンスの設定を参考に新たなインスタンスを作成する。この際、ブートディスク の項目で「変更」ボタンをクリックし、「既存のディスク」から「復旧させたいVMインスタンス(R-instance)のディスク」を選択する

  3. 最後に「作成」ボタンからVMインスタンスの作成を完了する。

上記の手順を実施すれば、VMインスタンスを復旧させることができた。
ただし新たにVMインスタンスを作成している為、元々のVMインスタンス名と新たなVMインスタンス名が同じでない場合はネットワークやファイアウォールの設定などに影響が出ると考えれらるので注意が必要である。