Red Hat Training

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

4.10.4. tarによるファイルのアーカイブ

tar ユーティリティーは、デフォルトで拡張属性を保持しません。SELinux コンテキストは拡張属性に保存されるため、ファイルのアーカイブ時にコンテキストが失われる可能性があります。tar --selinux コマンドを使用して、コンテキストを保持するアーカイブを作成し、アーカイブからファイルを復元します。tar アーカイブに拡張属性のないファイルが含まれる場合、または拡張属性がシステムのデフォルトと一致するようにするには、restorecon ユーティリティーを使用します。
~]$ tar -xvf archive.tar | restorecon -f -
ディレクトリーによっては、restorecon を実行するためには、root ユーザーでなければならない場合があることに注意してください。
以下の例は、SELinux コンテキストを保持する tar アーカイブの作成を示しています。

手順4.17 tar アーカイブの作成

  1. /var/www/html/ ディレクトリーに移動し、その SELinux コンテキストを表示します。
    ~]$ cd /var/www/html/
    html]$ ls -dZ /var/www/html/
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 .
  2. root で、/var/www/html/ に 3 つのファイル (file1file2、および file3) を作成します。これらのファイルは、/var/www/html/ から httpd_sys_content_t タイプを継承します。
    html]# touch file{1,2,3}
    html]$ ls -Z /var/www/html/
    -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. root で、以下のコマンドを実行して、test.tar という名前のtar アーカイブを作成します。SELinux コンテキストを維持するには、--selinux を使用します。
    html]# tar --selinux -cf test.tar file{1,2,3}
  4. root で test/ という名前の新規ディレクトリーを作成し、すべてのユーザーによる完全なアクセスを許可します。
    ~]# mkdir /test
    ~]# chmod 777 /test/
  5. test.tar ファイルを test/ にコピーします。
    ~]$ cp /var/www/html/test.tar /test/
  6. test/ ディレクトリーに移動します。このディレクトリーに移動し、以下のコマンドを実行して tar アーカイブを展開します。--selinux オプションを再度指定すると、SELinux コンテキストが default_t に変更されます。
    ~]$ cd /test/
    test]$ tar --selinux -xvf test.tar
  7. SELinux コンテキストを表示します。httpd_sys_content_t タイプは default_t に変更されず、保持されました。これは、--selinux が使用されていなかったとしたら、変更されていたでしょう。
    test]$ ls -lZ /test/
    -rw-r--r--  user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
    -rw-r--r--  user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
    -rw-r--r--  user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3
    -rw-r--r--  user1 group1 unconfined_u:object_r:default_t:s0 test.tar
    
  8. test/ ディレクトリーが必要なくなった場合は、root で以下のコマンドを実行して、そのディレクトリー内のすべてのファイルも削除します。
    ~]# rm -ri /test/
拡張属性をすべて保持する --xattrs オプションなどのtar の詳細は、tar(1) man ページを参照してください。