カーネルコマンドラインを使ってブート時にSELinuxを無効化する。

はじめに

こんばんは。
今回はRHEL9におけるSELinuxを無効化する方法についての覚え書きです。

以前のバージョンまでは/etc/selinux/configファイルにSELINUX=disabledと追記する方法がとられていました。

ところが、RHEL9からSElinuxの無効化方法に変更がありました。

そこで今回の記事というわけです。

※ RHEL8の公式ドキュメントにおいても、上記の方法はメモリリークの可能性があるため、以下で説明するselinux=0 パラメーターをカーネルコマンドラインに追加して SELinux を無効にする方法が推奨されています。

SElinuxの無効化手順

事前の設定確認

SELinuxが有効であることを確認します

[root@ip-10-0-2-46 ~]# getenforce
Enforcing

grubの設定ファイルを確認してみます。

[root@ip-10-0-2-46 ~]# cat /etc/default/grub
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295"
GRUB_TIMEOUT=0
GRUB_ENABLE_BLSCFG=true
GRUB_DEFAULT=saved

念のためgrubbyでも確認してみます。

[root@ip-10-0-2-46 ~]# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-5.14.0-284.30.1.el9_2.x86_64"
args="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M $tuned_params"
root="UUID=016e7284-31f6-4c28-bbb1-98c5b25fcdbf"
initrd="/boot/initramfs-5.14.0-284.30.1.el9_2.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (5.14.0-284.30.1.el9_2.x86_64) 9.2 (Plow)"
id="ffffffffffffffffffffffffffffffff-5.14.0-284.30.1.el9_2.x86_64"

設定変更

gubbyコマンドでパラメータをカーネルコマンドラインに追加します。

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

設定を反映させるために再起動します。

reboot

設定変更後の確認

grubbyで確認してみます。
args行の最後にselinux=0のパラメータが追加されているのが分かります。

[root@ip-10-0-2-46 ~]# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-5.14.0-284.30.1.el9_2.x86_64"
args="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M $tuned_params selinux=0"
root="UUID=016e7284-31f6-4c28-bbb1-98c5b25fcdbf"
initrd="/boot/initramfs-5.14.0-284.30.1.el9_2.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (5.14.0-284.30.1.el9_2.x86_64) 9.2 (Plow)"
id="ffffffffffffffffffffffffffffffff-5.14.0-284.30.1.el9_2.x86_64"

grubの設定ファイルも確認してみます。
GRUB_CMDLINE_LINUXの行末にselinux=0が追加されているのが分かります。

[root@ip-10-0-2-46 ~]# cat /etc/default/grub
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 selinux=0"
GRUB_TIMEOUT=0
GRUB_ENABLE_BLSCFG=true
GRUB_DEFAULT=saved

最後に、SELinuxが無効であることを確認します。

[root@ip-10-0-2-46 ~]# getenforce
Disabled

ばっちりですね!

補足(RHEL9での/etc/selinux/configについて)

実際にファイルを見てみます。
ご覧の通り、コメントでもしっかりとkernel command lineを使ってねと書いています。
しかも親切に実行すべきコマンドラインまで書かれてありますね。

[root@ip-10-0-2-46 ~]# 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.
# See also:
# https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-selinux/#getting-started-with-selinux-selinux-states-and-modes
#
# NOTE: In earlier Fedora kernel builds, SELINUX=disabled would also
# fully disable SELinux during boot. If you need a system with SELinux
# fully disabled instead of SELinux running with no policy loaded, you
# need to pass selinux=0 to the kernel command line. You can use grubby
# to persistently set the bootloader to boot with selinux=0:
#
#    grubby --update-kernel ALL --args selinux=0
#
# To revert back to SELinux enabled:
#
#    grubby --update-kernel ALL --remove-args selinux
#
SELINUX=enforcing
# 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

おわりに

いかがだったでしょうか。

私自身最近の気づきになるのですが、設定ファイルのコメント部分にはかなり大切なことが書かれています。
ググるのもChat-GPTに質問するのも有用ですが、設定ファイルを編集するときは可能な限りコメント部分も押さえておきたいですね!
(なかなかどうしてそれも難しいなという思いつつ…)

それではまたお会いしましょう。
あでゅー!!

参考

Last modified: 2023-12-03

Author