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 コマンドでファイルをコピーする場合 (オプションが指定されていない場合)、タイプはターゲットの親ディレクトリーから継承されます。
- ユーザーのホームディレクトリーにファイルを作成します。ファイルには、
user_home_t
タイプのラベルが付けられます。~]$
touch file1~]$
ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 /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/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
オプションを使用して、コピー時にコンテキストを保持する方法を説明します。
- ユーザーのホームディレクトリーにファイルを作成します。ファイルには、
user_home_t
タイプのラベルが付けられます。~]$
touch file1~]$
ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 /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/--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
オプションを使用して宛先コピーのコンテキストを変更する方法を説明します。以下の例は、ユーザーのホームディレクトリーで実行されます。
- ユーザーのホームディレクトリーにファイルを作成します。ファイルには、
user_home_t
タイプのラベルが付けられます。~]$
touch file1~]$
ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 --context
オプションを使用して SELinux コンテキストを定義します。~]$
cp --context=system_u:object_r:samba_share_t:s0 file1 file2--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 既存ファイルを介したファイルのコピー
この手順では、ファイルが既存のファイルにコピーされた場合に、コンテキストの保存にオプションを使用しない限り、既存のファイルのコンテキストが保持されることを示しています。
- 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 - 別のファイル
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 file1
をfile2
で上書きします。~]#
cp /tmp/file2 /etc/file1- コピーした後、次のコマンドを実行すると、
/etc/file1
を置き換えた/tmp/file2
のuser_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 コンテキストが間違っていると、プロセスがこのようなファイルおよびディレクトリーにアクセスできなくなる可能性があります。