Product SiteDocumentation Site

9.4.4. SELinux の有効化および無効化

SELinux の状態を確認するには /usr/sbin/getenforce または /usr/sbin/sestatus コマンドを使用します。getenforce コマンドが Enforcing, Permissive, または Disabled を返します。SELinux が有効なとき (SELinux ポリシールールがエンフォースであるとき)、getenforce コマンドが Enforcing を返します:
$ /usr/sbin/getenforce
Enforcing
SELinux が有効になっているとき、getenforce コマンドが Permissive を返します。しかし、SELinux ポリシールールがエンフォースではありません。DAC ルールのみが使用されます。SELinux が無効になっていると、getenforce コマンドが Disabled を返します。
sestatus コマンドが SELinux の状態と使用される SELinux ポリシーを返します:
$ /usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 23
Policy from config file:        targeted
SELinux が有効化されているとき、SELinux status: enabled が返されます。SELinux がエンフォースモードで実行されているとき、Current mode: enforcing が返されます。SELinux ターゲットポリシーが使用されているとき、Policy from config file: targeted が返されます。

9.4.4.1. SELinux の有効化

SELinux を無効化されたシステムにおいて、SELINUX=disabled オプションが /etc/selinux/config に設定されています:
# このファイルがシステムにおける SELinux の状態を制御します。
# SELINUX= これら 3 つの値のどれかを使用できます:
#       enforcing - SELinux セキュリティポリシーが強制されます。
#       permissive - SELinux が強制される代わりに警告を表示します。
#       disabled - SELinux ポリシーが読み込まれません。
SELINUX=disabled
# SELINUXTYPE= これら 2 つの値のどれかを使用できます:
#       targeted - ターゲットポリシーが保護されます。
#       mls - マルチレベルセキュリティ保護。
SELINUXTYPE=targeted
また、getenforce コマンドが Disabled を返します:
$ /usr/sbin/getenforce
Disabled
SELinux を有効化するには:
  1. SELinux パッケージがインストールされていることを確認するには、rpm -qa | grep selinux, rpm -q policycoreutils, および rpm -qa | grep setroubleshoot コマンドを使用します。このガイドは以下のパッケージがインストールされていることを仮定します: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins。これらのパッケージがインストールされていなければ、Linux root ユーザーとして yum install package-name 経由でインストールします。以下のパッケージはオプションです: policycoreutils-gui, setroubleshoot, selinux-policy-devel, および mcstrans
  2. SELinux が有効になる前に、ファイルシステムにある各ファイルが SELinux コンテキストでラベル付けされている必要があります。これをする前は、制限されたドメインがアクセスを拒否される可能性があります。これにより、システムの正常なブートを妨げられます。これを防ぐには、/etc/selinux/configSELINUX=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
    
  3. システムを再起動するには、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 分ほどしかかかりません。
  4. パーミッシブモードでは、SELinux ポリシーがエンフォースされません。しかし、エンフォースモードで動作していると、拒否されるはずのアクションに対して、拒否メッセージが記録されます。エンフォースモードに変更する前に、SELinux が前回の起動時にアクションを拒否していないことを確認するために、Linux root ユーザーとして grep "SELinux is preventing" /var/log/messages コマンドを実行します。SELinux が前回の起動時にアクションを拒否していなければ、このコマンドが何も出力しません。SELinux が起動中にアクセスを拒否していれば、情報をトラブルシューティングするために「トラブルシューティング」を参照してください。
  5. /var/log/messages に拒否メッセージがなければ、/etc/selinux/config において SELINUX=enforcing を設定します:
    # このファイルがシステムにおける SELinux の状態を制御します。
    # SELINUX= これら 3 つの値のどれかを使用できます:
    #       enforcing - SELinux セキュリティポリシーが強制されます。
    #       permissive - SELinux が強制される代わりに警告を表示します。
    #       disabled - SELinux ポリシーが読み込まれません。
    SELINUX=enforcing
    # SELINUXTYPE= これら 2 つの値のどれかを使用できます:
    #       targeted - ターゲットポリシーが保護されます。
    #       mls - マルチレベルセキュリティ保護。
    SELINUXTYPE=targeted
    
  6. システムを再起動します。再起動後、getenforce コマンドが Enforcing が返すことを確認します:
    $ /usr/sbin/getenforce
    Enforcing
    
  7. SELinux と Linux ユーザーの対応付けを表示するには、Linux root ユーザーとして /usr/sbin/semanage login -l コマンドを実行します。出力が次のようになります:
    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 が発生しても、それらの警告を無視しても安全です。ここで、usernameunconfined_u, guest_u, または xguest_u です:
  1. /usr/sbin/semanage user -a -S targeted -P user -R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_u
    
  2. /usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
    
  3. /usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 root
    
  4. /usr/sbin/semanage user -a -S targeted -P user -R guest_r guest_u
    
  5. /usr/sbin/semanage user -a -S targeted  -P user -R xguest_r xguest_u
    

重要

システムが パーミッシブモードまたは無効モードで動作していると、ユーザーが不適切なラベルのファイルにパーミッションを持ちます。また、SELinux が無効になっているときに作成されたファイルはラベルがつけられています。これは、エンフォースモードに変更するときに問題を引き起こします。不適切にラベルづけされたファイルやラベルづけされていないファイルが問題を引き起こすことを防ぐには、無効モードからパーミッシブモードやエンフォースモードに変更するとき、ファイルシステムが自動的に再ラベルづけします。