👮

SELinuxの状態を変更する

2020/09/27に公開

SELinuxの状態にはEnforcing、Permissive、Disabledの3つの状態があります。これらを変更する方法について解説します。

結論

  1. 現在の状態を変更するにはsetenforceコマンドを使用する。
  2. OS起動直後の状態を変更するには/etc/selinux/configSELINUXの値を変更する。
  3. OS起動直後の状態をDisabledからEnforcingまたはPermissiveに変更する場合は手順に注意!!
  4. /etc/selinux/configの設定誤るとカーネルパニックを起こす。

SELinuxを無効化(Disabled)する

現在の状態を変更する

オンラインで現在のSELinuxの状態を変更することは出来ません。

OS起動時の状態を変更する方法

/etc/selinux/configSELINUXの値を変更します。現在の状態を変更したい場合は設定変更後、OSを再起動します。
SELINUX=disabledを使用してSELinuxを無効すると、カーネルがSELinuxを有効にして起動し、その後のブートプロセスで無効化モードに切り替わります。

$ sudo vim /etc/selinux/config
SELINUX=disabled        ← ここを変更
SELINUXTYPE=targeted
$ sudo shutdown -r 0

または

$ sudo sed -i "s/\(^SELINUX=\).*/\1disabled/" /etc/selinux/config
$ sudo shutdown -r 0

SELinuxを完全に無効にする

SELinuxを完全に無効にするカーネルパラメータにselinux=0を指定します。以下はFedora 32での例です。

$ sudo vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/fedora-swap rd.lvm.lv=fedora/swap rhgb quiet selinux=0" ← ここに追加
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

(BIOSベースのマシンの場合)
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo shutdown -r 0

(UEFIベースのマシンの場合)(※間違ってたらごめん。)
$ sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
$ sudo shutdown -r 0

SELinuxを有効(Permissive)から有効(Enforcing)にする

現在の状態を変更する

現在の状態をPermissiveからEnforcingに変更する場合は、setenforceコマンドを使用します。

$ getenforce
Permissive
$ sudo setenforce 1
$ getenforce
Enforcing

OS起動時の状態を変更する方法

/etc/selinux/configSELINUXの値を変更します。

$ sudo vim /etc/selinux/config
SELINUX=enforcing       ← ここを変更
SELINUXTYPE=targeted

または

$ sudo sed -i "s/\(^SELINUX=\).*/\1enforcing/" /etc/selinux/config

SELinuxを有効(Enforcing)から有効(Permissive)にする

現在の状態を変更する

現在の状態をEnforcingからPermissiveに変更する場合は、setenforceコマンドを使用します。

$ getenforce
Enforcing
$ sudo setenforce 0
$ getenforce
Permissive

OS起動時の状態を変更する方法

/etc/selinux/configSELINUXの値を変更します。

$ sudo vim /etc/selinux/config
SELINUX=permissive       ← ここを変更
SELINUXTYPE=targeted

または

$ sudo sed -i "s/\(^SELINUX=\).*/\1permissive/" /etc/selinux/config

SELinuxを無効(Disabled)から有効(Enforcing|Permissive)に変更する方法

SELinuxをDisabledからEnforcingまたはPermissiveに変更する場合、コマンドでの変更はできません。変更手順は以下の通りです。

  1. /etc/selinux/configSELINUXの値をpermissiveに変更する
  2. ファイルの再ラベル付けを予約を行う
  3. OSを再起動する
  4. (Enforcingにする場合)/etc/selinux/configSELINUXの値をenforcingに変更する
  5. (Enforcingにする場合)現在の状態をenforcingに変更する
$ sudo vim /etc/selinux/config
SELINUX=permissive        ← ここを変更
SELINUXTYPE=targeted
$ sudo fixfiles onboot
$ sudo shutdown -r 0
$ sudo vim /etc/selinux/config
SELINUX=enforcing        ← ここを変更
SELINUXTYPE=targeted
$ sudo setenforce 1

ファイルの再ラベル付けについて

SELinuxはファイルに対してラベルを付与します。しかし、SELinuxが無効化されている状態で作成されたファイルにはラベル付けが行われません。ラベルが付与されていないファイルはアクセス制御が正しく行われません。
SELinuxを有効化する際は正しくアクセス制御を行うため、再ラベル付けというラベルの再割り当て処理を行う必要があります。

/ディレクトリ直下に/.autorelabelという名前で空ファイルを作成すると次回OS再起動時に再ラベル付け処理が行われます。fixfiles onbootコマンドを実行するとこのファイルが作成されます。typoのリスクを回避するため、fixfiles onbootの実行を推奨します。

  • 注意
    全てのファイルに対して再ラベル付けが行われます。chconなどで一時的なラベルを割り当てをしているファイルも再ラベル付けがされ定義通りのラベルに書き換わります。

SELinuxを無効から安全に有効にするTips

何らかの問題で再ラベル付けをしたファイルがアクセス拒否をされシステムが起動されなくなるリスクを回避するため、OS起動時の状態をPermissiveにします。
OS起動後、SELinuxの拒否ログを確認し、Deniedのエントリーがない場合、改めて状態をEnforcingに変更します。

/etc/selinux/config編集時の注意点

SELinuxのOS起動時の状態(永続化状態)を変更する場合、/etc/selinux/configSELINUXの値を変更します。この時、誤ってSELINUXTYPEを編集するとOS起動時にカーネルパニックが起きます。これは読み込むべきSELinuxポリシーが見つからずに起きる問題です。
この問題を解消するにはgrubからselinux=0を指定し、SELinuxを無効化したい状態でOSを起動した後、/etc/selinux/configを正しい値に修正します。

/etc/sysconfig/selinux について

/etc/sysconfig/selinux/etc/selinux/configのシンボリックリンクです。sedでファイルを編集する場合は--follow-symlinksオプションを忘れずにつけましょう。

おわりに

よいSELinuxライフを!

Discussion