5.4. SELinux の有効化および無効化
SELinux のステータスをチェックするには、
getenforce または sestatus コマンドを使います。getenforce コマンドは、Enforcing、Permissive、Disabled のいずれかを返します。getenforce コマンドは、SELinux が有効な際に (SELinux ポリシールールが強制されている際に) Enforcing を返します。
~]$ getenforce
Enforcing
getenforce コマンドは、SELinux が有効ではあるものの SELinux ポリシールールが強制されておらず DAC ルールのみが使用されている場合に Permissive を返します。SELinux が無効だと、getenforce コマンドは、Disabled を返します。
sestatus コマンドは、SELinux のステータスと使用されている SELinux ポリシーを返します。
~]$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
SELinux が有効だと、
SELinux status: enabled が返されます。SELinux が enforcing モードで実行中だと、Current mode: enforcing が返されます。SELinux ターゲットポリシーが使用されていると、Policy from config file: targeted が返されます。
5.4.1. SELinux の有効化 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
重要
システムが最初に SELinux なしで、特に selinux-policy パッケージなしでインストールされ、これが後でシステムに追加された場合、SELinux を有効にするには追加のステップが必要になります。システムのスタートアップ時に SELinux が初期化されたことを確認するには、
dracut ユーティリティーを実行して SELinux 認識を initramfs ファイルシステムに記載する必要があります。これを行わないと、SELinux がシステムのスタートアップ時に起動しません。
SELinux が無効になっているシステムでは、
SELINUX=disabled オプションは /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 two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
また、
getenforce コマンドは、Disabled を返します。
~]$ getenforce
Disabled
SELinux を有効にするには、以下の手順にしたがいます。
rpm -qa | grep selinuxとrpm -q policycoreutils、rpm -qa | grep setroubleshootのコマンドを実行して、SELinux パッケージのインストールを確認します。本ガイドでは、以下のパッケージがインストールされていることを前提としています。selinux-policy-targeted、selinux-policy、libselinux、libselinux-python、libselinux-utils、policycoreutils、policycoreutils-python、setroubleshoot、setroubleshoot-server、setroubleshoot-plugins。これらのパッケージがインストールされていなければ、Linux root ユーザーでyum install package-nameコマンドを使ってインストールします。policycoreutils-gui、setroubleshoot、mcstrans の 3 パッケージはオプションです。- SELinux の有効化の前に、ファイルシステム上の全ファイルを SELinux コンテキストでラベル付けする必要があります。これが行われないと、制限のあるドメインはアクセスが拒否される場合があり、システムの正常な起動を妨げます。これを避けるには、
/etc/selinux/configでSELINUX=permissiveと設定します。# 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 two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted - Linux root ユーザーで
rebootコマンドを実行してシステムを再起動します。次回の起動時に、ファイルシステムがラベル付けされます。このラベルプロセスでは、全ファイルに SELinux コンテキストがラベル付けされます。*** Warning -- SELinux targeted policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ****一番下の行の*(アスタリスク) 記号はそれぞれ、ラベル付けされた 1000 ファイルを表します。上記の例では、4 つの*記号はラベル付けされた 4000 ファイルを表しています。全ファイルにラベル付けする時間はシステム上のファイル数とハードディスクドライブの速度によって異なります。最近のシステムでは、このプロセスは 10 分程度で終わります。 - permissive モードでは、SELinux ポリシーは強制されませんが、enforcing モードであれば拒否されたであろうアクションについては拒否がログに記録されます。enforcing モードに変更する前に、Linux root ユーザーで
grep "SELinux is preventing" /var/log/messagesコマンドを実行して、SELinux が最後の起動時にアクセスを拒否しなかったことを確認します。最後の起動時にアクセス拒否がなかった場合は、このコマンドに返される出力はありません。起動時に SELinux がアクセスを拒否していた場合は、トラブルシューティング情報を 8章トラブルシューティング で参照してください。 /var/log/messagesに拒否メッセージがない場合は、/etc/selinux/configでSELINUX=enforcingと設定します。# 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 two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted- システムを再起動して、
getenforceコマンドがEnforcingを返すことを確認します。~]$ getenforce Enforcing - Linux root ユーザーで
semanage login -lコマンドを実行し、SELinux ユーザーと Linux ユーザー間のマッピングを表示します。出力は以下のようになります。Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
このような出力にならない場合は、Linux root でユーザーマッピングを修正します。
SELinux-user username is already defined 警告を無視しても問題ありません。ここでの username は、unconfined_u、guest_u、xguest_u のいずれかになります。
semanage user -a -S targeted -P user -R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_usemanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 rootsemanage user -a -S targeted -P user -R guest_r guest_usemanage user -a -S targeted -P user -R xguest_r xguest_u
重要
SELinux の permissive または disabled モードでシステムが稼働している場合、ユーザーにはファイルを誤ってラベル付けするパーミッションがあります。また、SELinux が無効の間に作成されたファイルにはラベル付けがされません。enforcing モードに変更すると、これが問題になります。間違ったラベルが付いたファイルやラベルなしのファイルが問題を起こさないように disabled モードから permissive モードや enforcing モードに変更すると、ファイルシステムは自動的に再ラベル付けが行われます。