SELinuxを無効化するには「disabled」でなく「Permissive」モードで利用する

スポンサーリンク

RHEL9のマニュアルを見ていると、SELinuxを無効にするのではなく、「Permissive」モードを使用することを強く推奨されています。

そのため、SELinuxを「Permissive」モードにして変更して使ってみます。

2.5. SELinux の無効化 Red Hat Enterprise Linux 9 | Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through your subscription.

検証した環境

$ cat /etc/os-release
NAME="AlmaLinux"
VERSION="8.7 (Stone Smilodon)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="AlmaLinux 8.7 (Stone Smilodon)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:8::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-8"
ALMALINUX_MANTISBT_PROJECT_VERSION="8.7"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.7"
$ uname -r
4.18.0-425.3.1.el8.x86_64

SELinuxのモード

SELinuxには、下記の3つのモードがあります。

モード要約
enforcing(強制する)SELinux セキュリティ ポリシーが適用される。
permissive(寛大な)SELinux は強制する代わりに警告を出力する。
disabled(無効)SELinux ポリシーはロードされない。

SELinuxをPermissiveモードに変更

前提条件

$ dnf list selinux-policy-targeted libselinux-utils policycoreutils
Last metadata expiration check: 0:00:49 ago on Sun Mar 19 23:23:06 2023.
Installed Packages
libselinux-utils.x86_64        2.9-6.el8      @anaconda ・・・ インストールされていること
policycoreutils.x86_64         2.9-20.el8     @anaconda ・・・ インストールされていること
selinux-policy-targeted.noarch 3.14.3-108.el8 @anaconda ・・・ インストールされていること
Available Packages
selinux-policy-targeted.noarch 3.14.3-108.el8_7.1 baseos
$ cat /proc/cmdline ・・・カーネルパラメータで「selinux=0」や「enforce=0」がないこと
BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.3.1.el8.x86_64 root=/dev/mapper/vg00-lvroot ro crashkernel=auto resume=/dev/mapper/vg00-lvswap rd.lvm.lv=vg00/lvroot rd.lvm.lv=vg00/lvswap rhgb quiet

設定変更前の状態

$ getenforce
Enforcing ・・・ 初期インストール時はセキュリティポリシーが適用された状態

設定ファイルの変更

$ sudo cp -a /etc/selinux/config /etc/selinux/BK-config.original
$ sudo 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. ・・・ RHEL9は設定しても無効にならない
SELINUX=permissive ・・・ 「enforcing」から「permissive」に変更
# 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

マシンリブート

$ sudo systemctl reboot

設定変更後の状態

$ 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:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

SELinuxをDisabledモードに変更

「SELinuxは使わない。」という場合、完全に無効化する方法です。

RHEL9では、selinuxを無効化にすることを推奨していません。永続的に無効化したい場合は、Permissiveモードを利用することを強く推奨されています。

変更前の状態

$ cat /proc/cmdline
BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.3.1.el8.x86_64 root=/dev/mapper/vg00-lvroot ro crashkernel=auto resume=/dev/mapper/vg00-lvswap rd.lvm.lv=vg00/lvroot rd.lvm.lv=vg00/lvswap rhgb quiet
$ getenforce
Enforcing

カーネルパラメータの変更

$ sudo grubby --update-kernel=ALL --args=selinux=0

マシンリブート

$ sudo systemctl reboot

変更後の状態

$ cat /proc/cmdline
BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.3.1.el8.x86_64 root=/dev/mapper/almalinux-root ro crashkernel=auto resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap rhgb quiet selinux=0
$ getenforce
Disabled

パーミッションの横にある「.(ドット)」も気になるようであれば削除

パーミッションの横にある「.(ドット)」は、SELinuxの拡張属性が設定されている意味です。当然、SELinuxの無効化を行ったあとに、作成されたものには付きません。

$ ls -l ・・・ パーミッションの横にある「.(ドット)」があることを確認
total 24
lrwxrwxrwx.   1 root root    7 Oct  9  2021 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Mar 20 00:47 boot
drwxr-xr-x   19 root root 3100 Mar 20 01:06 dev
drwxr-xr-x. 142 root root 8192 Mar 20 01:06 etc
drwxr-xr-x.   3 root root   21 Mar 20 00:43 home
lrwxrwxrwx.   1 root root    7 Oct  9  2021 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Oct  9  2021 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Oct  9  2021 media
drwxr-xr-x.   2 root root    6 Oct  9  2021 mnt
drwxr-xr-x.   2 root root    6 Oct  9  2021 opt
dr-xr-xr-x  301 root root    0 Mar 20 01:06 proc
dr-xr-x---.   4 root root  190 Mar 20 00:51 root
drwxr-xr-x   40 root root 1140 Mar 20 01:08 run
lrwxrwxrwx.   1 root root    8 Oct  9  2021 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Oct  9  2021 srv
dr-xr-xr-x   13 root root    0 Mar 20 01:06 sys
drwxrwxrwt.  17 root root 4096 Mar 20 01:16 tmp
drwxr-xr-x.  13 root root  158 Mar 20 00:37 usr
drwxr-xr-x.  21 root root 4096 Mar 20 00:46 var
$ sudo find / -exec setfattr -h -x security.selinux {} \; ・・・ エラーが出ても気にしない
   : (省略)
$ ls -l ・・・ パーミッションの横にある「.(ドット)」がないことを確認
total 24
lrwxrwxrwx   1 root root    7 Oct  9  2021 bin -> usr/bin
dr-xr-xr-x   5 root root 4096 Mar 20 00:47 boot
drwxr-xr-x  19 root root 3100 Mar 20 01:06 dev
drwxr-xr-x 142 root root 8192 Mar 20 01:06 etc
drwxr-xr-x   3 root root   21 Mar 20 00:43 home
lrwxrwxrwx   1 root root    7 Oct  9  2021 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Oct  9  2021 lib64 -> usr/lib64
drwxr-xr-x   2 root root    6 Oct  9  2021 media
drwxr-xr-x   2 root root    6 Oct  9  2021 mnt
drwxr-xr-x   2 root root    6 Oct  9  2021 opt
dr-xr-xr-x 297 root root    0 Mar 20 01:06 proc
dr-xr-x---   4 root root  190 Mar 20 00:51 root
drwxr-xr-x  40 root root 1140 Mar 20 01:08 run
lrwxrwxrwx   1 root root    8 Oct  9  2021 sbin -> usr/sbin
drwxr-xr-x   2 root root    6 Oct  9  2021 srv
dr-xr-xr-x  13 root root    0 Mar 20 01:22 sys
drwxrwxrwt  16 root root 4096 Mar 20 01:23 tmp
drwxr-xr-x  13 root root  158 Mar 20 00:37 usr
drwxr-xr-x  21 root root 4096 Mar 20 00:46 var