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を無効にすることができます。
カーネルオプションの変更については、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を無効化することを非推奨としているため、それを前提として設計をしていきましょう!