Product SiteDocumentation Site

5.10.4. Архивирование файлов с помощью tar

tar не сохраняет расширенные атрибуты по умолчанию. Так как контексты SELinux хранятся в расширенных атрибутах, контексты могут быть потеряны при архивировании файлов. Используйте tar --selinux для создания архивов с сохранением контекстов. Если Tar архив содержит файлы без расширенных атрибутов, или если вам нужно, чтобы расширенные атрибуты соответствовали системным настройкам по-умолчанию, пропустите архив через /sbin/restorecon:
$ tar -xvf archive.tar | /sbin/restorecon -f -
Примечание: в зависимости от каталога, вам могут быть необходимы права пользователя root для выполнения команды /sbin/restorecon.
В следующем примере демонстрируется создание архива Tar с сохранением контекста SELinux:
  1. От имени пользователя root, выполните команду touch /var/www/html/file{1,2,3} для создания трёх файлов (file1, file2, и file3). Эти файлы наследуют тип httpd_sys_content_t от каталога /var/www/html/:
    # 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/. Из этого каталога от имени пользователя root выполните команду tar --selinux -cf test.tar file{1,2,3} для создания Tar архива с именем test.tar.
  3. От имени пользователя root, выполните команду mkdir /test для создания нового каталога, и затем, выполните команду chmod 777 /test/ для предоставления всем пользователям полного доступа к каталогу /test/.
  4. Выполните команду cp /var/www/html/test.tar /test/ для копирования файла test.tar в каталог /test/.
  5. Выполните команду cd /test/ для перехода в каталог /test/. Из этого каталога, выполните команду tar -xvf test.tar для распаковки Tar архива.
  6. Выполните команду ls -lZ /test/ для просмотра контекста SELinux. Тип The httpd_sys_content_t сохранился, вместо default_t, что произошло бы, если опция --selinux не использовалась:
    $ 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
    
  7. Если каталог /test/ больше не нужен, от имени пользователя root, выполните команду rm -ri /test/ для его удаления, а также всех файлов в нём.
Refer to the tar(1) manual page for further information about tar, such as the --xattrs option that retains all extended attributes.