SELinux とは

SELinux は、カーネルに MAC 機能を付加することによって、セキュリティの高い OS 提供を可能にするものです。

SELinux を実装するとシステムがものすごく複雑になってしまう欠点があり、場合によっては、疎通がうまく行かなかったり、アプリケーションがうまく動かなかったりします。

なので、特に使う理由がなければ、SELinux は無効にした方が良いのではないかと思っています。

SELinux とは

SELinux(Security-Enhanced Linux : エスイーリナックス)とは、アメリカ国家安全保障局が GPL 下で提供している Linux のカーネルに強制アクセス制御 (MAC) 機能を付加するモジュールのことで、名前から勘違いされることが多いが Linux ディストリビューションの一つではない。

参考 : Wikipedia : SELinux

SELinux について、内容をよくまとめてくれてる方がいたので、(少し長いですが) ご興味ある方は一読してみてください。

SELinux のモード種別

この後出てきますが、SELinux には 3つのモードが存在します。

モード 説明
enforcing 完全有効化状態 (設定通りに機能する)
permissive ほぼ無効化状態 (有効化されてるが、監査ログだけ記録する)
disabled 完全無効化状態 (SELinux 完全無効化状態)

特に、permissive に関しては、SELinux 自体は有効化されてる状態ですが、監視ログ記録以外については働かないので、ほぼ無効化状態になります。

Step 1. 現在の SELinux 状態確認

SELinux のステータスは、sestatus コマンドで確認できます。

以下の結果を見ると SELinux 状態は有効化、そして、現在のモードが enforcing になっているので、SELinux が設定通りに機能するようになっていることがわかります。

現在の SELinux 状態確認Raw Code(S)Raw Code(T)
# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          disabled
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

Step 2. コマンドで SELinux 無効化

SELinux を完全に無効にするためには、設定ファイルを編集した後、再起動する必要がありますが、もうシステムがサービス・イン状態で、簡単に再起動できない環境もあるので、そのときには以下のコマンド setenforce 0 でほぼ無効化することが出来ます。

設定後、Permissive になっていれば、SELinux は有効状態だけど、監視ログ機能しか動かないので、ほぼ無効化状態になります。

コマンドで SELinux 無効化Raw Code(S)Raw Code(T)
# getenforce
Enforcing

# setenforce 0
※出力結果は、何も表示されない

# getenforce
Permissive

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

Step 3. SELinux 永久無効化、及び設定反映

ただ、コマンドラインで無効にするだけでは、再起動後に再び enforcing になってしまうので、完全に無効にするためには、SELinux の設定ファイル /etc/selinux/config を修正する必要があります。

設定を反映するためには、再起動が必要ですが、上記のコマンド setenforce 0 を実行済みであれば、設定ファイルを編集するだけでも構いません。

SELINUX=enforcing をコメントアウトし、SELINUX=disabled を追記します。

SELinux 永久無効化、及び設定反映Raw Code(S)Raw Code(T)
# vi /etc/selinux/config
━━━━━━━━ ここから ━━━━━━━━
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
━━━━━━━━ ここまで ━━━━━━━━

# shutdown -r now

# sestatus
SELinux status:                 disabled

# getenforce
Disabled

コマンドで SELinux のモード設定できるのは、SELinux が有効になっているときだけ

ちなみに、コマンドで SELinux のモードを変更するためには、SELinux statusenabled になっている必要があります。

  • SELinux が有効状態なら コマンドでモード変更可能
  • SELinux が無効状態なら コマンドでモード変更不可
SELinux 有効状態 : コマンドでモード変更可能Raw Code(S)Raw Code(T)
# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

# setenforce 0

# getenforce
Permissive

# setenforce 1

# getenforce
Enforcing
SELinux 無効状態 : コマンドでモード変更不可Raw Code(S)Raw Code(T)
# sestatus
SELinux status:                 disabled

# getenforce
Disabled

# setenforce 1
setenforce: SELinux is disabled

# getenforce
Disabled

終わりに

注意 : 設定を間違えるとカーネルパニックになる

SELinux の設定ファイル /etc/selinux/config を編集する際に誤字・脱字によるタイプミスがあると、再起動後にカーネルパニックを起こすので注意が必要です。

もしそうなった場合には、GRUB のコマンドラインで、手動で OS を立ち上げて設定を直さないと行けなくなるので、少し面倒くさくなります。

なので、設定が終わったら、必ず二度・三度確認して設定内容に間違いがないことを確認してください。

以上、CentOS 7 SELinux 無効化 でした。