5.7. SELinux コンテキスト - ファイルのラベル付け

SELinux 実行中のシステム上では、すべてのプロセスとファイルがセキュリティー関連の情報を表示する方法でラベル付けされます。この情報は、SELinux コンテキストと呼ばれます。ファイルに関しては、ls -Z コマンドでこれを表示できます。
~]$ ls -Z file1
-rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
この例では、SELinux は ユーザー (unconfined_u)、ロール (object_r)、タイプ (user_home_t)、レベル (s0) を提示しています。この情報は、アクセス制限の決定に使われます。DAC システムでは、アクセスは Linux ユーザー ID とグループ ID に基づいて制御されます。SELinux ポリシールールは、DAC ルールの後でチェックされます。DAC ルールが最初にアクセスを拒否すると、SELinux ポリシールールは使用されません。
ファイルの SELinux コンテキストを管理するには、 chconsemanage fcontextrestorecon といった複数のコマンドがあります。

5.7.1. 一時的な変更: chcon

chcon コマンドは、ファイルの SELinux コンテキストを変更します。ただし、chcon コマンドによる変更は、ファイルシステムの再ラベル付けや restorecon コマンドが実行されると維持されません。SELinux ポリシーは、特定のファイルの SELinux コンテキストをユーザーが修正できるかどうかを制御します。chcon を使うと、ユーザーは変更する SELinux コンテキストの一部または全部を提供します。SELinux がアクセスを拒否する一般的な原因は、ファイルタイプが間違っているためです。
クイックリファレンス
  • ファイルタイプを変更するには、chcon -t type file-name コマンドを実行します。ここでの typehttpd_sys_content_t などのタイプで、file-name はファイル名またはディレクトリー名になります。
  • ディレクトリーのタイプとそのコンテンツを変更するには、chcon -R -t type directory-name コマンドを実行します。ここでの typehttpd_sys_content_t などのタイプで、directory-name はディレクトリー名になります。
ファイルまたはディレクトリーのタイプ変更
以下の例では、SELinux コンテキストの属性のうち、タイプのみを変更する方法を示しています。
  1. 引数なしで cd コマンドを実行して、ホームディレクトリーに移動します。
  2. touch file1 コマンドの実行で新規ファイルを作成します。ls -Z file1 コマンドで file1 の SELinux コンテキストを表示します。
    ~]$ ls -Z file1
    -rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
    
    この例では、file1 の SELinux コンテキストには、SELinux unconfined_u ユーザー、object_r ロール、user_home_t タイプ、s0 レベルが含まれます。SELinux コンテキストの各パーツの説明は、3章SELinux コンテキスト を参照してください。
  3. chcon -t samba_share_t file1 コマンドを実行して、タイプを samba_share_t に変更します。-t オプションのみがタイプを変更します。ls -Z file1 で変更を表示します。
    ~]$ ls -Z file1 
    -rw-rw-r--  user1 group1 unconfined_u:object_r:samba_share_t:s0 file1
    
  4. restorecon -v file1 コマンドを実行して、file1 ファイルの SELinux コンテキストを復元します。-v オプションで変更を表示します。
    ~]$ restorecon -v file1
    restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
    
    この例では、以前のタイプである samba_share_t は、正しい user_home_t に復元されました。ターゲットポリシー (Red Hat Enterprise Linux 6 ではデフォルトの SELinux ポリシー) を使用している場合は、restorecon コマンドが /etc/selinux/targeted/contexts/files/ ディレクトリー内のファイルを読み取り、どの SELinux コンテキストファイルを持つべきかをチェックします。
このセクションの例は、ディレクトリーにも適用できます。例えば、file1 をディレクトリーに置き換えます。
ディレクトリーおよびコンテンツタイプの変更
以下の例では、新規ディレクトリーの作成と、そのディレクトリーのファイルタイプを (そのコンテンツとともに) Apache HTTP Server が使用するタイプに変更する方法を示します。この例で使用される設定は、Apache HTTP Server で (/var/www/html/ ではなく) 異なるドキュメントルートを使用する場合に適用します。
  1. Linux root ユーザーで mkdir /web コマンドを実行し、新規ディレクトリーを作成します。次に touch /web/file{1,2,3} コマンドで 3 つの空ファイル (file1file2file3) を作成します。/web/ ディレクトリーおよびその中のファイルには、default_t タイプのラベルが付けられます。
    ~]# ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /web
    ~]# ls -lZ /web
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 file1
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 file2
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 file3
    
  2. Linux root ユーザーで chcon -R -t httpd_sys_content_t /web/ コマンドを実行し、/web/ ディレクトリー (およびそのコンテンツ) のタイプを httpd_sys_content_t に変更します。
    ~]# chcon -R -t httpd_sys_content_t /web/
    ~]# ls -dZ /web/
    drwxr-xr-x  root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
    ~]# ls -lZ /web/
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
    
  3. Linux root ユーザーで restorecon -R -v /web/ コマンドを実行し、デフォルトの SELinux コンテキストを復元します。
    ~]# restorecon -R -v /web/
    restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    
chcon についての詳細は、chcon(1) の man ページを参照してください。

注記

Type Enforcement は、SELinux ターゲットポリシーで使われる主要なパーミッション制御です。ほとんどの場合、SELinux ユーザーとロールは無視することができます。