Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.10. SELinux ラベルの維持

以下のセクションでは、ファイルおよびディレクトリーのコピー、移動、およびアーカイブ時に SELinux コンテキストの動作を説明します。また、コピーおよびアーカイブ時にコンテキストを保存する方法も説明します。

4.10.1. ファイルおよびディレクトリーのコピー

ファイルまたはディレクトリーのコピー時に、新しいファイルまたはディレクトリーが存在しない場合は作成されます。この新しいファイルまたはディレクトリーのコンテキストは、元のコンテキストの保存にオプションが使用されていない限り、デフォルトのラベル付けルールに基づいています。たとえば、ユーザーのホームディレクトリーに作成されたファイルには、user_home_t タイプのラベルが付けられます。
~]$ touch file1
~]$ ls -Z file1
-rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
このようなファイルを、/etc などの別のディレクトリーにコピーすると、/etc のデフォルトのラベル付けルールに従って、新しいファイルが作成されます。追加オプションなしでファイルをコピーすると、元のコンテキストが保持されない場合があります。
~]$ ls -Z file1
-rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
~]# cp file1 /etc/
~]$ ls -Z /etc/file1
-rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/file1
file1/etc にコピーする際に、/etc/file1 が存在しない場合は、/etc/file1 が新規に作成されます。上記の例で示すように、/etc/file1 には、default-labeling ルールに基づいて etc_t タイプのラベルが付けられます。
既存ファイルにファイルをコピーすると、--preserve=context など、元のファイルのコンテキストを保持するためにユーザーがcpオプションを指定しない限り、既存ファイルのコンテキストが保持されます。SELinux ポリシーは、コピー中にコンテキストが保持されないことがあります。

手順4.11 SELinux コンテキストを保持せずにコピーする

この手順では、cp コマンドでファイルをコピーする場合 (オプションが指定されていない場合)、タイプはターゲットの親ディレクトリーから継承されます。
  1. ユーザーのホームディレクトリーにファイルを作成します。ファイルには、user_home_t タイプのラベルが付けられます。
    ~]$ touch file1
    ~]$ ls -Z file1
    -rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
    
  2. /var/www/html/ ディレクトリーには、以下のコマンドのように httpd_sys_content_t タイプのラベルが付けられます。
    ~]$ ls -dZ /var/www/html/
    drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
    
  3. file1/var/www/html/ にコピーされると、httpd_sys_content_t タイプを継承します。
    ~]# cp file1 /var/www/html/
    ~]$ ls -Z /var/www/html/file1
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
    

手順4.12 コピー時の SELinux コンテキストの保持

この手順では、--preserve=context オプションを使用して、コピー時にコンテキストを保持する方法を説明します。
  1. ユーザーのホームディレクトリーにファイルを作成します。ファイルには、user_home_t タイプのラベルが付けられます。
    ~]$ touch file1
    ~]$ ls -Z file1
    -rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
    
  2. /var/www/html/ ディレクトリーには、以下のコマンドのように httpd_sys_content_t タイプのラベルが付けられます。
    ~]$ ls -dZ /var/www/html/
    drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
    
  3. --preserve=context オプションを使用すると、コピー操作時に SELinux コンテキストが保持されます。以下に示すように、ファイルが /var/www/html/ にコピーされると、user_home_t タイプの file1 が保持されます。
    ~]# cp --preserve=context file1 /var/www/html/
    ~]$ ls -Z /var/www/html/file1
    -rw-r--r--  root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
    

手順4.13 コンテキストのコピーと変更

この手順では、--context オプションを使用して宛先コピーのコンテキストを変更する方法を説明します。以下の例は、ユーザーのホームディレクトリーで実行されます。
  1. ユーザーのホームディレクトリーにファイルを作成します。ファイルには、user_home_t タイプのラベルが付けられます。
    ~]$ touch file1
    ~]$ ls -Z file1
    -rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
    
  2. --context オプションを使用して SELinux コンテキストを定義します。
    ~]$ cp --context=system_u:object_r:samba_share_t:s0 file1 file2
  3. --context がない場合、file2 には unconfined_u:object_r:user_home_t コンテキストでラベルが付けられます。
    ~]$ ls -Z file1 file2
    -rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
    -rw-rw-r--  user1 group1 system_u:object_r:samba_share_t:s0 file2
    

手順4.14 既存ファイルを介したファイルのコピー

この手順では、ファイルが既存のファイルにコピーされた場合に、コンテキストの保存にオプションを使用しない限り、既存のファイルのコンテキストが保持されることを示しています。
  1. root として、/etc ディレクトリーに新しいファイル file1 を作成します。以下に示すように、ファイルには etc_t タイプのラベルが付けられています。
    ~]# touch /etc/file1
    ~]$ ls -Z /etc/file1
    -rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/file1
    
  2. 別のファイル file2/tmp ディレクトリーに作成します。以下に示すように、ファイルには user_tmp_t タイプのラベルが付けられます。
    ~]$ touch /tmp/file2
    ~$ ls -Z /tmp/file2
    -rw-r--r--  root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
    
  3. file1file2 で上書きします。
    ~]# cp /tmp/file2 /etc/file1
  4. コピーした後、次のコマンドを実行すると、/etc/file1 を置き換えた /tmp/file2user_tmp_t タイプではなく、etc_t タイプのラベルが付けられた file1 が表示されます。
    ~]$ ls -Z /etc/file1
    -rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/file1
    
重要
ファイルおよびディレクトリーを移動せずにコピーします。これにより、正しい SELinux コンテキストでラベル付けされることを確認できます。SELinux コンテキストが間違っていると、プロセスがこのようなファイルおよびディレクトリーにアクセスできなくなる可能性があります。