SELinux無効化について

インフラエンジニアをしてると、SELinuxを使わない設計が多々あります。
というかSELinuxを使わない設計しかみたことないです。(浅学でスミマセン)

SELinuxとは…

Security-Enhanced Linuxの略で、カーネルの制御機能の一つ。
細かいアクセス制限が可能で、一般ユーザはもちろんrootに対しての制限も可能…らしいです。


SELinuxの無効化について、いくつか方法があるので、つらつらと書いていきます。

SELinuxの状態確認方法

現状のSELinuxが有効かどうかについて、コマンドで確認することができます。

# getenforceコマンドを実行する。
[root@hogehoge ~]# getenforce
Disabled
[root@hogehoge ~]#
[root@hogehoge ~]#
[root@hogehoge ~]#

# 設定ファイルを確認する。
[root@hogehoge ~]# cat /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=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@hogehoge ~]#
[root@hogehoge ~]#

SELinuxの状態は三パターン存在します。

・enforcing    SELinux有効でありアクセス制御が有効となる
・permissive  アクセス制御は無効だが警告メッセージを表示する
・disabled   SELinux無効

無効化されている場合は、上記の通りDisabledと表示されます。

無効化手順① configファイルを編集する

確認手段としてcatしたファイルを直接編集することで、SELinuxの無効化ができます。

# 設定ファイルを編集する。
[root@hogehoge ~]# cat -n /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 these three values:
    9  #     targeted - Targeted processes are protected,
   10  #     minimum - Modification of targeted policy. Only selected processes are protected.
   11  #     mls - Multi Level Security protection.
   12  SELINUXTYPE=targeted
   13
   14
[root@hogehoge ~]#

7行目のSELINUX= の項目を"disabled"と変更することで、恒久的なSELinuxの無効化が可能になります。

ただ、実はこれはシステム起動と同時に活性化されたSELinuxがこのコンフィグを確認して非活性になる、という流れが発生します。

無効化手順② カーネルオプションでSELinuxを無効化する

①はシステム起動後に自動でSELinuxを無効にする設定ですが、カーネルオプションを指定することで、システム起動時にSELinuxを無効にすることができます。

2.6. システムの起動時に SELINUX モードの変更

カーネルオプションの変更については、GRUB2の機能を使用します。

[root@hogehoge ~]# cat -n /etc/default/grub
    1  GRUB_TIMEOUT=5
    2  GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    3  GRUB_DEFAULT=saved
    4  GRUB_DISABLE_SUBMENU=true
    5  GRUB_TERMINAL_OUTPUT="console"
    6  GRUB_CMDLINE_LINUX="crashkernel=auto selinux=0 elevator=mq-deadline"
    7  GRUB_DISABLE_RECOVERY="true"
    8  GRUB_ENABLE_BLSCFG=true
[root@hogehoge ~]# grub2-mkconfig
[root@hogehoge ~]#

/etc/default/grubファイルを編集します。
6行目のGRUB_CMDLINE_LINUX=の項目に、"selinux=0"を追記します。
変更するだけでは反映されないため、grub2コマンド"grub2-mkconfig"を実行します。

SELinuxを黙らせた

カーネルオプションでSELinuxを無効化させることで、現状最小限のコストでSELinuxを無効化することができるはずです。
setenforce=0をたたくシェルをcronで自動で叩かせるみたいな脳筋ワザも可能だけど、根っこから排除してあげたほうがお客さんも喜ぶでしょう。
ただ、Red HatはそもそもSELinuxを無効化することを非推奨としているため、それを前提として設計をしていきましょう!


この記事が気に入ったらサポートをしてみませんか?