Product SiteDocumentation Site

5.10. Поддержка Меток SELinux

В данном разделе описывается, что происходит с контекстами SELinux при копировании, перемещении и архивировании файлов и каталогов. Также, объясняется как предохранить контексты при копировании и архивировании.

5.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 создается как новый файл
Когда файл копируется поверх существующего файла, существующий контекст файла сохраняется, если пользователь не укажет опции cp для сохранения контекста указанного файла, такую как --preserve=context. Политика SELinux может ограничивать контекст, от сохранения при копировании.
Копирование без сохранения контекста SELinux
При копировании файла с помощью команды cp, если не указывается никаких опций, тип наследуется от целевого родительского каталога:
$ touch file1
$ ls -Z file1
-rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
$ ls -dZ /var/www/html/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
# 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
В этом примере, file1 создается в домашнем каталоге пользователя и помечен типом user_home_t. Каталог /var/www/html/ помечен типом httpd_sys_content_t, как показывается в выводе команды ls -dZ /var/www/html/. Когда file1 копируется в /var/www/html/ он наследует тип httpd_sys_content_t, как показано в выводе команды ls -Z /var/www/html/file1.
Сохранение контекстов SELinux при копировании
Используйте команду cp --preserve=context для сохранения контекста при копировании:
$ touch file1
$ ls -Z file1
-rw-rw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0 file1
$ ls -dZ /var/www/html/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
# 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
В этом примере, file1 создаётся в домашнем каталоге пользователя, и помечен типом user_home_t. Каталог /var/www/html/ помечен типом httpd_sys_content_t, как показано в выводе команды ls -dZ /var/www/html/. Используя опцию --preserve=context сохраняется контекст SELinux во время операции копирования. Как показано в выводе команды ls -Z /var/www/html/file1, тип файла file1 user_home_t, сохранен после копирования в /var/www/html/.
Копирование с изменением контекста
Используйте команду cp -Z для изменения целевого контекста при копировании. В следующем примере выполнено копирование в домашний каталог пользователя:
$ touch file1
$ cp -Z system_u:object_r:samba_share_t:s0 file1 file2
$ 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
$ rm file1 file2
В этом примере, контекст определен опцией -Z. Без опции -Z файл file2 будет помечен контекстом unconfined_u:object_r:user_home_t.
Копирования файла поверх существующего файла
Когда файл копируется поверх существующего файла, контекст существующего файла сохраняется (если не указывается опция preserve context). Например:
# touch /etc/file1
# ls -Z /etc/file1
-rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/file1
# touch /tmp/file2
# ls -Z /tmp/file2
-rw-r--r--  root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
# cp /tmp/file2 /etc/file1
# ls -Z /etc/file1
-rw-r--r--  root root unconfined_u:object_r:etc_t:s0   /etc/file1
В этом примере создаются два файла: /etc/file1, помеченный типом etc_t и /tmp/file2, помеченный типом user_tmp_t. Команда cp /tmp/file2 /etc/file1 перезаписывает файл file1 файлом file2. После копирования команда ls -Z /etc/file1 показывает, что file1 помечен типом etc_t, а не user_tmp_t от /tmp/file2, который заменил /etc/file1.

Важно

Копируйте файлы и каталоги, вместо того. чтобы перемещать (moving) их. Это поможет удостовериться, что они помечены корректным контекстом SELinux. Некорректный контекст SELinux может ограничить доступ к таким файлам и каталогам.