CentOSが起動しなくなるという、キツめのやらかしについて、自戒を込めて。
#原因:SELinuxの設定ミス
そう、いつもの作業のように、私はCentOS7.4にログインし、SELinuxを恒久無効化しようとしていたのでした。
5.4.2. SELINUX の無効化
SELinux を無効にするには、/etc/selinux/config で SELINUX=disabled と設定します。
しかし、正しい「SELINUX」オプションではなく、誤って「SELINUXTYPE」オプションをdisableしてしまったのが不幸の始まりでした。
vi /etc/selinux/config
#上がってこないサーバ
設定が終わったと思い、OSを再起動すると、一向に上がってこない。正しくは、CentOS起動画面から10分待っても動かない。
強制的にパワーオフし、コンソール画面を見ていると、[Failed to load SELinux policy.]の文字が・・・
ここで、「やっちまったな」と気づきました。
今回設定をしてしまったのは、[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仮想コンソールを起動するたびに、以下のメッセージが出てしまいました。
予期しないエラーが発生しました。
クライアントは機能し続ける可能性がありますが、ここでブラウザを更新し、
バグレポートを送信することを推奨します。
この例外ウィンドウに従って[再ロード]を行うと、必ずvSphere Web Clientのログイン画面に戻されるので、ログインしている間にカーネルパニックまで進んでしまっている・・・電源落とす・・・電源上げる・・・を繰り返す・・・という拷問をしこたま味わいました。
【解決策:ESCキーでウインドウを閉じる】
これは20分ほど格闘している中で偶然発見した系なので、公式ナレッジではないですが、この例外ウィンドウは**ESCキーを押すと消えます。**これで問題なくgrub操作に入ることができました。
#grub起動、カーネルパラメータ変更、OS起動
シングルユーザモードでbashを起動するため、カーネルパラメータを弄ってOSを起動しようという算段でした。
[linux16]行のカーネルパラメータのro
以降をrw init=/bin/sh
に書き換えます。
そして、[Ctrl-x]を押すことで、OSが上がり、コマンドを受け付けられるようになります。
カーネルパラメータに[init=/bin/sh]を渡して起動させるということは、普段の/etc/inittabの読み込みとかをすっ飛ばしてとりあえずshを起動する、ということのようです。
参考
「Systemd」を理解する ーシステム起動編ー http://equj65.net/tech/systemd-boot/ >
bashが起動したので、あとは~~rootのパスワードを変更したり、~~やらかした設定を元に戻します。
vi /etc/selinux/config
#入力できない:
viで、やらかした設定SELINUXTYPE=disabled
をSELINUXTYPE=targeted
に修正後、:wq
で抜けようとしたところ、何回押しても:
キーが;
としか入力されません。
というのも、今回のOS起動方法では、キーボードが英語入力となっているため、日本語キーボードでのキー表示記号と入力内容が全然違っているということが発覚しました。
(そういえばgrubでカーネルパラメータを編集するときも、なんだか記号の=が入力できないなぁ、でも設定付近に=があるから消さずに利活用しよう、とやっちゃってました)
もちろん、日本語キーボードと英語キーボードの違いを鑑みて押してもよいのですが、私の愛する東プレ REALFORCEでは残念ながら全てのキーをshiftなし/ありで試しても、:
と=
が入力されないという謎トラップが仕掛けられていたのでした。
**【解決策:記号を使わずに保存する】**
これも不勉強で今回知ったのですが、viには:wq
以外にもZZ
で上書き保存できるとのこと。無かったら終わってた。これで保存を敢行します。
無事、保存ができました。再起動してみます。
問題なく起動し、回復しました。解決です!
#最後に
たかが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
強制アクセス制御(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