Red Hat Training

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

5.10.5. star を使ったファイルのアーカイビング

star は、デフォルトでは拡張属性を維持しません。SELinux コンテキストは拡張属性に保存されるので、ファイルをアーカイビングするとコンテキストは失われます。star -xattr -H=exustar を使ってコンテキストを維持するアーカイブを作成します。star パッケージはデフォルトではインストールされません。star をインストールするには、yum install star コマンドを Linux root ユーザーで実行します。
以下の例では、SELinux コンテキストを保持する Star アーカイブの作成方法を説明します。
  1. Linux root ユーザーで touch /var/www/html/file{1,2,3} コマンドを実行し、3 つのファイルを作成します (file1file2file3)。これらのファイルは、/var/www/html/ ディレクトリーからの httpd_sys_content_t タイプを継承します。
    ~]# touch /var/www/html/file{1,2,3}
    ~]# 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
    
  2. cd /var/www/html/ コマンドで /var/www/html/ ディレクトリーに移動します。その後、Linux root ユーザーで star -xattr -H=exustar -c -f=test.star file{1,2,3} コマンドを実行し、test.star という名前の Star アーカイブを作成します。
    ~]# star -xattr -H=exustar -c -f=test.star file{1,2,3}
    star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
    
  3. Linux root ユーザーで mkdir /test コマンドを実行し、新規ディレクトリーを作成します。そして chmod 777 /test/ コマンドを実行し、全ユーザーに /test/ ディレクトリーへの完全アクセスを可能にします。
  4. cp /var/www/html/test.star /test/ コマンドを実行し、test.star ファイルを /test/ ディレクトリーにコピーします。
  5. cd /test/ コマンドを実行し、/test/ ディレクトリーに切り替え、このディレクトリー内で star -x -f=test.star コマンドを実行して Star アーカイブを抽出します。
    ~]$ star -x -f=test.star 
    star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
    
  6. ls -lZ /test/ コマンドで SELinux コンテキストを表示させます。httpd_sys_content_t タイプが維持されます。-xattr -H=exustar が使われていなければ、default_t に変更されます。
    ~]$ 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.star
    
  7. /test/ ディレクトリーが不要であれば、Linux root ユーザーで rm -ri /test/ コマンドを実行し、ディレクトリーとその中の全ファイルをを削除します。
  8. star が不要であれば、Linux root ユーザーでyum remove star コマンドを実行し、パッケージを削除します。
star についての詳細は、star(1) の man ページを参照してください。