SELinuxの有効／無効の設定（CentOS7、CentOS8）

# 環境

+ OS:CentOS Linux release 8.0.1905

# 1. SELinuxのステータス、モードを確認

SElinuxのステータス及びモードは`getenforce`コマンドまたは`sestatus`コマンドで確認できます。
SElinuxのステータスは「**有効／無効**」があり、「**有効**」の場合は２つのモード「**Enforcingモード**」、「**Permissiveモード**」があります。

|表示|ステータス|モード|内容|
|:------------|:----------------|:----|:---|
|Enforcing |有効|Enforcinモード|SELinux有効（制御有 + ログ出力有）|
|Permissive|有効|Permissiveモード|SELinux有効（制御無 + ログ出力有）|
|Disabled  |無効|-|SELinux無効（制御無 + ログ出力無）|

なお、ログは「/var/log/messages」や「/var/log/audit/audit.log」に出力されます。

`getenforce`コマンドの場合、「**Enforcing**」、「**Permissive**」、「**Disabled**」のいずれかが表示されます。

+ 「**Enforcing**」の場合

```console:実行結果（Enforcingの場合）
[root@CENTOS8 /]# getenforce
Enforcing
[root@CENTOS8 /]#
```

+ 「**Permissive**」の場合

```console:実行結果（Permissiveの場合）
[root@CENTOS8 /]# getenforce
Permissive
[root@CENTOS8 /]#
```

+ 「**Disabled**」の場合

```console:実行結果（Disabledの場合）
[root@CENTOS8 ~]# getenforce
Disabled
[root@CENTOS8 ~]#
```


また、`sestatus`コマンドでもステータス及びモードを確認することができます。
`sestatus`コマンドで表示された「**SELinux status:**」に**ステータス**が、「**Current mode:**」に**モード**が表示されます。

+ 「**Enforcing**」の場合

```console:実行結果（Enforcingの場合）
[root@CENTOS8 ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

+ 「**Permissive**」の場合

```console:実行結果（Permissiveの場合）
[root@CENTOS8 ~]# 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:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

+ 「**Disabled**」の場合

```console:実行結果（Deniedの場合）
[root@CENTOS8 ~]# sestatus
SELinux status:                 disabled
[root@CENTOS8 ~]#
```

# 2. SELinuxのモードを一時的に変更

SELinuxのモードを一時的に変更する場合、`setenforce`コマンドで変更することができます。

「**Enforcingモード**」から「**Permissiveモード**」に変更する場合、以下のコマンドで変更できます。
`setenforce 0`

```console:実行結果
[root@CENTOS8 ~]# setenforce 0
```

```cosole:モード確認
[root@CENTOS8 ~]# getenforce
Permissive
[root@CENTOS8 ~]# 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:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

「**Permissiveモード**」から「**Enforcingモード**」に変更する場合、以下のコマンドで変更できます。
`setenforce 1`

```console:実行結果
[root@CENTOS8 ~]# setenforce 1
[root@CENTOS8 ~]#
```

```cosole:モード確認
[root@CENTOS8 ~]# getenforce
Enforcing
[root@CENTOS8 ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

# 3. SELinuxのびモードを永続的に変更

SELinuxのモードを一時的に変更する場合、「/etc/selinux/config」ファイルの「SELINUX」の値を書き換えます。「/etc/selinux/config」ファイルを書き換えた後にOSを再起動することにより反映されます。

|SELINUXの値|ステータス及びモード|
|:----------|:------------------|
|SELINUX=enforcing|有効、Enforcingモード|
|SELINUX=permissive|有効、Permissiveモード|
|SELINUX=disabled|無効|

なお、「/etc/selinux/config」ファイルを変更するにあたって２つ注意があります。

+  「/etc/selinux/config」ファイルに誤りがあった場合、カーネルパニックを起こす可能性がある。
+ SELinuxのステータスを無効から有効にした場合、ファイルシステムのラベルの不整合によりカーネルパニックを起こす可能性がある。

１つ目の問題は、OSを再起動する前に`sestatus`コマンドでステータスを確認することで回避します。
２つ目の問題は、「**5. SELinuxのステータスを無効から有効にする**」に手順を紹介します。

実際にSELinuxのモードを「**Enforcingモード**」から「**Permissiveモード**」へ永続的に変更してみます。（「**Permissiveモード**」から「**Enforcingモード**」への永続的変更も手順は同じです。）

「/etc/selinux/config」の「SELINUX=enforcing」を「SELINUX=permissive」に修正します。

```config:/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=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
```

```config:/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=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
```

`sestatus`コマンドで「Mode from config file:」の内容が正しいか確認します。

```console:実行結果
[root@CENTOS8 ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

なお、「SELINUX=permissive」の部分を誤って、「SELINUX=ermissive」と変更した場合、`sestatus`コマンドで以下の通り、「Mode from config file:」の項目に「**error**」が表示されます。

```console:実行結果（エラーの場合）
[root@CENTOS8 ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          error (Success)
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

`reboot`コマンドでOSを再起動します。

```console:実行結果
[root@CENTOS8 ~]# reboot
```

`getenforce`コマンドでモードを確認します。

```console:実行結果
[root@CENTOS8 ~]# getenforce
Permissive
[root@CENTOS8 ~]#
```

これで、モードが「**Permissiveモード**」となりました。

# 4. SELinuxのステータスを無効にする

手順は「**3. SELinuxのびモードを永続的に変更**」と同じ手順となります。

「/etc/selinux/config」の「SELINUX=permissive」を「SELINUX=disabled」に修正します。

```config:/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=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
```

```config:/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
```

`sestatus`コマンドで「Mode from config file:」の内容が正しいか確認します。

```console:実行結果
[root@CENTOS8 ~]# 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:          disabled
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

`reboot`コマンドでOSを再起動します。

```console:実行結果
[root@CENTOS8 ~]# reboot
```

`getenforce`コマンドでモードを確認します。

```console:実行結果
[root@CENTOS8 ~]# getenforce
Disabled
[root@CENTOS8 ~]#
```

これで、SELinuxのステータスが「**無効**」となりました。

# 5. SELinuxのステータスを無効から有効にする

「/etc/selinux/config」の「SELINUX=disabled」を「SELINUX=permissive」に修正します。

```config:/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
```

```config:/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=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
```

`sestatus`コマンドで「Mode from config file:」の内容が正しいか確認します。

```console:実行結果
[root@CENTOS8 ~]# 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:          disabled
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[root@CENTOS8 ~]#
```

`fixfiles -F onboot`コマンドで「/.autorelabel：ファイルを作成し、次回のシステムの再起動時にファイルに再ラベル付けされるようにします。

```console:実行結果
[root@CENTOS8 ~]# fixfiles -F onboot
System will relabel on next boot
[root@CENTOS8 ~]#
```

`reboot`コマンドでOSを再起動します。

```console:実行結果
[root@CENTOS8 ~]# reboot
```

`getenforce`コマンドでモードを確認します。

```console:実行結果
[root@CENTOS8 ~]# getenforce
Permissive
[root@CENTOS8 ~]#
```

`sestatus`コマンドでも確認してみます。

```console:実行結果
[root@CENTOS8 ~]# 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:      31
[root@CENTOS8 ~]#
```

SELinuxのステータスが「**有効**」となりました。

「/var/log/messages」や「/var/log/audit/audit.log」にエラーが発生していなければ、「**2. SELinuxのモードを一時的に変更**」または「**3. SELinuxのびモードを永続的に変更**」の手順で、モードを「**Enforcingモード**」に変更します。

# 参考

> [第2章 SELinux のステータスおよびモードの変更 Red Hat Enterprise Linux 8 | Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/using_selinux/changing-selinux-states-and-modes_using-selinux "第2章 SELinux のステータスおよびモードの変更 Red Hat Enterprise Linux 8 | Red Hat Customer Portal")
---

以上