SELinuxの設定ミスでカーネルパニック

# 概要
SELinuxの設定ミスによりカーネルパニックが発生し、ログインできなくなったので、その対処方法を書きます。

# 私のやっていたこと・誰に向けて
Apache+PHP+MySQLなどを使用するサービスの開発環境を構築していた時に起こった出来事です。環境構築の際に同様のミスに陥った方に向けて書きたいと思います。

# バージョン
CentOS7
PHP 5.3.29
Apache 2.4

# 経緯
私の経緯ですので、読み飛ばして頂いても結構ですが一応。

phpでrequire_onceで外部ファイルを参照することありますよね。
defaultではphpファイルが置かれているディレクトリより下のディレクトリしか参照できないので、php.iniでinclude_pathの設定を行い、上のディレクトリを参照できるように設定していました。

/var/www/html/hoge/fuga.phpで
/var/www/html/lib/common.phpを参照できないので、パスを通したという事です。

しかしinclude_pathを設定してもなぜかrequire_onceで外部ファイルを参照できない。

この原因はSELinux(Security-Enhanced-Linux)が原因だったんです。SELinuxはアクセス制御に関わるもので、セキュリティを設定するシステムだそうです。強力なアクセス制限を設定できるため、開発環境では結構邪魔です。ですので、設定をOffにしたいと考えたわけです。

[参考]https://eng-entrance.com/linux-selinux

SELinuxの設定ファイルはetc/selinux/configです。この設定にミスがありカーネルパニックが発生しました。

# 原因
SELinuxの設定ファイルを書き間違えたことが原因でした。
以下間違った設定

```java:/etc/selinux/config
      1 
      2 # This file controls the state of SELinux on the system.
      3 # SELINUX= can take one of these three values:
      4 #     enforcing - SELinux security policy is enforced.
      5 #     permissive - SELinux prints warnings instead of enforcing.
      6 #     disabled - No SELinux policy is loaded.
      7 SELINUX=enforcing
      8 # SELINUXTYPE= can take one of three two values:
      9 #     targeted - Targeted processes are protected,
     10 #     minimum - Modification of targeted policy. Only selected processes     11  are protected. 
     11 #     mls - Multi Level Security protection.
     12 SELINUXTYPE=disabled

```
以下正しい設定

```java:/etc/selinux/config
      1 
      2 # This file controls the state of SELinux on the system.
      3 # SELINUX= can take one of these three values:
      4 #     enforcing - SELinux security policy is enforced.
      5 #     permissive - SELinux prints warnings instead of enforcing.
      6 #     disabled - No SELinux policy is loaded.
      7 SELINUX=disabled
      8 # SELINUXTYPE= can take one of three two values:
      9 #     targeted - Targeted processes are protected,
     10 #     minimum - Modification of targeted policy. Only selected processes     11  are protected. 
     11 #     mls - Multi Level Security protection.
     12 SELINUXTYPE=targeted

```

7行目SELinuxをdisabledにしなければなりませんでしたが、12行目のSELINUXTYPEをdisabledに設定していたことが原因でした。これによりカーネルパニックが発生し、GNOMEからログインできなくなりました。
# 対処法
流れは
1. シングルユーザモードでブート
2. /etc/selinux/configを修正する

# シングルユーザモードでブートする方法

起動するカーネルがでる時に、eを押して編集画面に移動する。

```java:カーネル選択画面
CentOS Linux (3.10.0-229.1.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-123.20.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-123.13.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-123.13.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-123.9.3.el7.x86_64) 7 (Core)
CentOS Linux, with Linux 0-rescue-586d1be91


Use the ^ and v keys to change the selection.
Press 'e' to edit the selected item, or 'c' for a command prompt.
```
カーネルパラメータを編集します。


```java:カーネル編集画面（編集前)
linux16 /vmlinuz-3.10.0-229.1.2.el7.x86_64 root=UUID=209ae889-38ef-444\
f-bb37-53faf2a51f44 ro vconsole.keymap=jp106 console=ttyS0,115200n8 crashkerne\
l=auto  vconsole.font=latarcyrheb-sun16 LANG=en_US.UTF-8
```

```java:カーネル編集画面（編集後)
linux16 /vmlinuz-3.10.0-229.1.2.el7.x86_64 root=UUID=209ae889-38ef-444\
f-bb37-53faf2a51f44 ro vconsole.keymap=jp106 console=ttyS0,115200n8 crashkerne\
l=auto  vconsole.font=latarcyrheb-sun16 LANG=en_US.UTF-8 systemd.unit=rescue.t\
arget
```

linux16の最終行に
(スペースを空けて)systemd.unit=rescue.targetを追加しています。
^ で = を入力することができます。

最後にCtrl+Xでシングルユーザモードで起動します。

起動するとrootのパスワードが求められ、シングルユーザモードで操作が可能となります。

# 最後に
参考にしたサイトを紹介します。
[参考サイト]
https://tsunokawa.hatenablog.com/entry/2015/06/12/113015
https://qiita.com/murabiton/items/d44fc01b9e1ac2fdcfab
このサイトに救われました、本当にありがとうございす。