LoginSignup
9
4

More than 3 years have passed since last update.

適当にSELinuxを無効にしたらひどい目にあった話

Posted at

CentOSが起動しなくなるという、キツめのやらかしについて、自戒を込めて。

原因:SELinuxの設定ミス

そう、いつもの作業のように、私はCentOS7.4にログインし、SELinuxを恒久無効化しようとしていたのでした。

5.4.2. SELINUX の無効化
SELinux を無効にするには、/etc/selinux/config で SELINUX=disabled と設定します。

しかし、正しい「SELINUX」オプションではなく、誤って「SELINUXTYPE」オプションをdisableしてしまったのが不幸の始まりでした。

vi /etc/selinux/config

image.png

上がってこないサーバ

設定が終わったと思い、OSを再起動すると、一向に上がってこない。正しくは、CentOS起動画面から10分待っても動かない。
image.png

強制的にパワーオフし、コンソール画面を見ていると、[Failed to load SELinux policy.]の文字が・・・
image.png

ここで、「やっちまったな」と気づきました。

今回設定をしてしまったのは、[SELUINUXTYPE]オプションで、ユーザやファイルの高度なアクセス制御(MLS等)を行うためのものです。SELinuxはOS起動時にこの設定を読み込み、必要な場合は処理を行います。この設定が存在しない引数の場合、カーネルパニックとなります。

参考

5.3. 主要設定ファイル
SELINUXTYPE=targeted
SELINUXTYPE オプションは、使用する SELinux ポリシーを設定します。ターゲットポリシーがデフォルトのポリシーです。MLS ポリシーを使用する場合にのみ、このオプションを変更してください。

強制アクセス制御(SELinux)の基礎
MLS(Multi Level Security)
MLSは、カテゴリ別のアクセス制御(MCS)にレベル別のアクセス制御を追加した機能です。ユーザやプロセスがアクセス可能な範囲を詳細に制御でき、非常に高度なセキュリティを実現できます。ただし、運用や管理が大変で、強固なセキュリティを求められる国防/軍事システムなどで利用されるような機能と言えます。

[fedora WIKI]SELinux/Config
When booting up the machine, init uses libselinux to read this file, and determines which policy to load and what mode to put the machine in.*

シングルユーザーモードでのログイン

もう二度とログインできないねえ・・・を素でやらかしてしまったので、grubからシングルユーザモードで無理やりログインしようとしました。

後で調べたのですが、grubカーネルオプションで[SELinux=0]とする方法も効くようですね。
Centos7:grubからSELinuxを無効にして起動する

仮想コンソールがエラーで落ちまくる

grubを操作してシングルユーザモードでログインするためには、電源をONしてから急速に操作を行う必要があります。

今回のサーバはESXi6.5上のVMで、vSphere Web ClientのWeb仮想コンソールで操作しようとしていたのですが、OSの電源を入れ、grub画面を操作しようとWeb仮想コンソールを起動するたびに、以下のメッセージが出てしまいました。

image.png

予期しないエラーが発生しました。
クライアントは機能し続ける可能性がありますが、ここでブラウザを更新し、
バグレポートを送信することを推奨します。

この例外ウィンドウに従って[再ロード]を行うと、必ずvSphere Web Clientのログイン画面に戻されるので、ログインしている間にカーネルパニックまで進んでしまっている・・・電源落とす・・・電源上げる・・・を繰り返す・・・という拷問をしこたま味わいました。


【解決策:ESCキーでウインドウを閉じる】
これは20分ほど格闘している中で偶然発見した系なので、公式ナレッジではないですが、この例外ウィンドウはESCキーを押すと消えます。これで問題なくgrub操作に入ることができました。

grub起動、カーネルパラメータ変更、OS起動

シングルユーザモードでbashを起動するため、カーネルパラメータを弄ってOSを起動しようという算段でした。

まずはOS選択にて[e]を押してeditモードに入ります。
image.png

[linux16]行のカーネルパラメータのro以降をrw init=/bin/shに書き換えます。

image.png
 これを
image.png
 こうじゃ

そして、[Ctrl-x]を押すことで、OSが上がり、コマンドを受け付けられるようになります。
image.png

カーネルパラメータに[init=/bin/sh]を渡して起動させるということは、普段の/etc/inittabの読み込みとかをすっ飛ばしてとりあえずshを起動する、ということのようです。

参考

kernel-parameters.txt
https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt


「Systemd」を理解する ーシステム起動編ー
http://equj65.net/tech/systemd-boot/

bashが起動したので、あとはrootのパスワードを変更したり、やらかした設定を元に戻します。

vi /etc/selinux/config

入力できない:

viで、やらかした設定SELINUXTYPE=disabledSELINUXTYPE=targetedに修正後、:wqで抜けようとしたところ、何回押しても:キーが;としか入力されません。

というのも、今回のOS起動方法では、キーボードが英語入力となっているため、日本語キーボードでのキー表示記号と入力内容が全然違っているということが発覚しました。

(そういえばgrubでカーネルパラメータを編集するときも、なんだか記号の=が入力できないなぁ、でも設定付近に=があるから消さずに利活用しよう、とやっちゃってました)

もちろん、日本語キーボードと英語キーボードの違いを鑑みて押してもよいのですが、私の愛する東プレ REALFORCEでは残念ながら全てのキーをshiftなし/ありで試しても、:=が入力されないという謎トラップが仕掛けられていたのでした。



【解決策:記号を使わずに保存する】

これも不勉強で今回知ったのですが、viには:wq以外にもZZで上書き保存できるとのこと。無かったら終わってた。これで保存を敢行します。

image.png

無事、保存ができました。再起動してみます。

image.png

問題なく起動し、回復しました。解決です!

最後に

たかがconfig、されどconfig、シンプルに猛省しました。
今回は手元の検証環境でしたが、コンソールが現地にしかないリモート環境だったらと思うと、本当にやべぇやらかしでした。
設定後には必ず想定configとの突合確認を行います・・・

参考

5.4.2. SELINUX の無効化
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-enabling_and_disabling_selinux-disabling_selinux

5.3. 主要設定ファイル
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-working_with_selinux-main_configuration_file

強制アクセス制御(SELinux)の基礎
https://thinkit.co.jp/article/13296

[fedora WIKI]SELinux/Config
https://fedoraproject.org/wiki/SELinux/Config

SELinux 覚書
https://qiita.com/JhonnyBravo/items/2012250c1cec9a682b86

SELinuxを無効にした後、Kernel panicになり起動できなくなった
https://www.ipentec.com/document/linux-boot-kernel-panic-after-selinux-disabled

Centos7:grubからSELinuxを無効にして起動する
https://okisanjp.hatenablog.jp/entry/archives/771

SELinux再入門-基礎編-
https://www.ffri.jp/assets/files/monthly_research/MR201406_A%20Re-introduction%20to%20SELinux_JPN.pdf

25.10. ブート中のターミナルメニューの編集
Red Hat Enterprise Linux 7 では、レスキューモードはシングルユーザーモードと同等であり、root パスワードを必要とします。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sec-terminal_menu_editing_during_boot

CentOS7 シングルユーザモードでrootのパスワードを変更する
https://it.rin-ka.net/centos7-single-mode/

rootパスワードをリセットする
https://www.server-world.info/query?os=CentOS_7&p=resetpass

シリアル コンソールを使用して GRUB とシングル ユーザー モードにアクセスする
https://docs.microsoft.com/ja-jp/azure/virtual-machines/troubleshooting/serial-console-grub-single-user-mode

「Systemd」を理解する ーシステム起動編ー
http://equj65.net/tech/systemd-boot/

kernel-parameters.txt
https://www.kernel.org/doc/Documentation/admin-guide/kernel-parameters.txt

26.3. シングルユーザーモードでブートする(grub legacy)
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/5/html/installation_guide/s1-rescuemode-booting-single

Red Hat Enterprise Linux - シングルユーザモードで起動したい(grub legacy)
https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c01982340

GRUB でイコール "=" を入力する方法
https://users.miraclelinux.com/support/?q=node/154

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4