Команда /usr/sbin/semanage fcontext изменяет контекст SELinux для файлов. При использовании целевой политики targeted, изменение вносимые данной командой, добавляются в файл /etc/selinux/targeted/contexts/files/file_contexts, если изменения вносятся для существующих файлов, то они добавляются в файл file_contexts, или добавляютсяв файл file_contexts.local для новых файлов и каталогов, например при создании каталога /web/. setfiles, использующаяся при маркирование файловой системы и /sbin/restorecon, использующаяся для восстановления контекста SELinux по умолчанию, читают эти файлы. Это значит, что изменения вносимые командой /usr/sbin/semanage fcontext постоянно, даже если файловая система будет перемаркирована. Политика SELinux контролирует возможность пользователей изменять контекст файлов.
Быстрое ознакомление
Для внесения изменений в контекст SELinux изменений, которые сохранятся при перемаркировании файловой системы:
- Выполните команду
/usr/sbin/semanage fcontext -a, помня, что необходимо использовать полные пути к файлам и каталогам.optionsfile-name|directory-name - Выполните команду
/sbin/restorecon -vдля применения изменений контекста.file-name|directory-name
Изменение типа файла
В следующем примере демонстрируется как изменить тип файла в контексте SELinux:
- От имени пользователя root, выполните команду
touch /etc/file1для создания нового файла. По умолчанию, вновь созданные файлы в каталоге/etc/помечаются типомetc_t:# ls -Z /etc/file1 -rw-r—r— root root unconfined_u:object_r:etc_t:s0 /etc/file1 - От имени пользователя root, выполните команду
/usr/sbin/semanage fcontext -a -t samba_share_t /etc/file1для изменения типа файлаfile1наsamba_share_t. Опция-aдобавляет новую запись, а опция-tопределяет тип (samba_share_t). Примечание: выполнение данной командой не изменяет тип напрямую —file1до сих пор помечен типомetc_t:# /usr/sbin/semanage fcontext -a -t samba_share_t /etc/file1 # ls -Z /etc/file1 -rw-r—r— root root unconfined_u:object_r:etc_t:s0 /etc/file1 Команда/usr/sbin/semanage fcontext -a -t samba_share_t /etc/file1добавляет следующую запись в/etc/selinux/targeted/contexts/files/file_contexts.local:/etc/file1 unconfined_u:object_r:samba_share_t:s0 - От имени пользователя root выполните команду
/sbin/restorecon -v /etc/file1для изменения типа. Так как командаsemanageдобавила запись вfile.contexts.localдля/etc/file1, команда/sbin/restoreconизменяет тип наsamba_share_t:# /sbin/restorecon -v /etc/file1 restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0 - От имени пользователя root выполните команду
rm -i /etc/file1для удаленияfile1. - От имени пользователя root, выполните команду
/usr/sbin/semanage fcontext -d /etc/file1для удаления контекста добавленного для/etc/file1. Когда контекст удален, выполнение командыrestoreconизменяет тип наetc_t, вместоsamba_share_t.
Изменение типа каталога
В следующем примере демонстрируется создание нового каталога и изменение типа каталога на тип, используемый Apache HTTP Server:
- От имени пользователя root, выполните команду
mkdir /webдля создания нового каталога. Этот каталог помечен типомdefault_t:# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web Командаls-dс опцией выводит информацию о каталоге, а не о его содержимом, а опция-Zпоказывает контекст SELinux (в нашем примере,unconfined_u:object_r:default_t:s0). - От имени пользователя root, выполните команду
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /webдля изменения типа каталога/web/наhttpd_sys_content_t. Опция-aдобавляет новую запись, а опция-tопределяет тип (httpd_sys_content_t). Примечание: выполнение этой команды не изменяет тип напрямую —/web/до сих пор помечен типомdefault_t:# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web # ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web Команда/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /webдобавляет следующую запись в/etc/selinux/targeted/contexts/files/file_contexts.local:/web unconfined_u:object_r:httpd_sys_content_t:s0 - От имени пользователя root, выполните команду
/sbin/restorecon -v /webдля изменения типа. Так как с помощью командыsemanageдобавлена запись вfile.contexts.localдля/web, то команда/sbin/restoreconизменяет тип наhttpd_sys_content_t:# /sbin/restorecon -v /web restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 По умолчанию, вновь созданные файлы и каталоги наследуют тип SELinux от своих родительских каталогов. При использовании данного примера и перед удалением контекста SELinux, добавленного для/web/, файлы и каталоги созданные в каталоге/web/помечены типомhttpd_sys_content_t. - От имени пользователя root, выполните команду
/usr/sbin/semanage fcontext -d /webдля удаления контекста, добавленного для/web/. - От имени пользователя root, выполните команду
/sbin/restorecon -v /webдля восстановления контекста SELinux по умолчанию.
Изменение типа каталога и его содержимого
В следующем примере демонстрируется создание нового каталога и изменение типа каталога (вместе с его содержимым) на тип, используемым Apache HTTP Server. Конфигурация в этом примере, может быть использована, если Apache HTTP Server использует другой корневой каталог (вместо /var/www/html/):
- От имени пользователя root, выполните команду
mkdir /webдля создания нового каталога и командуtouch /web/file{1,2,3}для создания трёх пустых файлов (file1,file2иfile3). Каталог/web/и файлы в внутри каталога помечены как типdefault_t:# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web # ls -lZ /web -rw-r—r— root root unconfined_u:object_r:default_t:s0 file1 -rw-r—r— root root unconfined_u:object_r:default_t:s0 file2 -rw-r—r— root root unconfined_u:object_r:default_t:s0 file3 - От имени пользователя root, выполните команду
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"для изменения типа каталога/web/и файла в нем, наhttpd_sys_content_t. Опция-aдобавляет новую запись, а опция-tопределяет тип (httpd_sys_content_t). Регулярное выражение"/web(/.*)?"при выполнении командыsemanageприменяет изменения к каталогу/web/, а также файлам внутри него. Примечание: выполнение этой команды не изменяет тип напрямую —/web/до сих пор помечен типомdefault_t:# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web # ls -lZ /web -rw-r—r— root root unconfined_u:object_r:default_t:s0 file1 -rw-r—r— root root unconfined_u:object_r:default_t:s0 file2 -rw-r—r— root root unconfined_u:object_r:default_t:s0 file3 Команда/usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"добавляет следующую запись в/etc/selinux/targeted/contexts/files/file_contexts.local:/web(/.*)? system_u:object_r:httpd_sys_content_t:s0 - От имени пользователя root, выполните команду
/sbin/restorecon -R -v /webдля изменения типа каталога/web/, а также файлам внутри него. Опция-Rопределяет рекурсию, а это означает, что все файлы и каталоги внутри/web/помечены типомhttpd_sys_content_t. Так как с помощью командыsemanageдобавлены записи вfile.contexts.localдля/web(/.*)?, то команда/sbin/restoreconизменяет тип наhttpd_sys_content_t:# /sbin/restorecon -R -v /web restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 По умолчанию вновь созданные файлы и каталоги наследуют тип SELinux от родительских каталогов. В данном примере, файлы и каталоги созданные в каталоге/web/будут помечены типомhttpd_sys_content_t. - От имени пользователя root выполните команду
/usr/sbin/semanage fcontext -d "/web(/.*)?"для удаления контекста добавленного для"/web(/.*)?". - От имени пользователя root выполните команду
/sbin/restorecon -R -v /webдля восстановления контекста SELinux по умолчанию.
Удаление добавленного контекста
В следующем примере демонстрируется добавление и удаление контекста SELinux:
- От имени пользователя root выполните команду
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /test. Каталога/test/не должно существовать. Эта команда добавляет следующих контекст в/etc/selinux/targeted/contexts/files/file_contexts.local:/test system_u:object_r:httpd_sys_content_t:s0 - Для удаления контекста, выполните от имени пользователя root команду
/usr/sbin/semanage fcontext -d, гдеfile-name|directory-namefile-name|directory-nameявляется первой частью вfile_contexts.local. Ниже показан пример контекста вfile_contexts.local:/test system_u:object_r:httpd_sys_content_t:s0 В начале указан/test. Для предотвращения маркирования каталога/test/контекстомhttpd_sys_content_tпосле запуска/sbin/restorecon, или после перемаркирования файловой системы, выполните следующую команду от имени пользователя root для удаления контекста изfile_contexts.local:/usr/sbin/semanage fcontext -d /test
Если контекст является частью регулярного выражения, например /web(/.*)?, заключите регулярное выражение в кавычки:/usr/sbin/semanage fcontext -d "/web(/.*)?"Refer to the semanage(8) manual page for further information about /usr/sbin/semanage.