SE linux Постоянные изменения: semanage fcontext

Команда /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 изменений, которые сохранятся при перемаркировании файловой системы:

  1. Выполните команду /usr/sbin/semanage fcontext -a options file-name|directory-name, помня, что необходимо использовать полные пути к файлам и каталогам.
  2. Выполните команду /sbin/restorecon -v file-name|directory-name для применения изменений контекста.
Изменение типа файла

В следующем примере демонстрируется как изменить тип файла в контексте SELinux:

  1. От имени пользователя 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
  2. От имени пользователя 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
  3. От имени пользователя 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
  4. От имени пользователя root выполните команду rm -i /etc/file1 для удаления file1.
  5. От имени пользователя root, выполните команду /usr/sbin/semanage fcontext -d /etc/file1 для удаления контекста добавленного для /etc/file1. Когда контекст удален, выполнение команды restorecon изменяет тип на etc_t, вместо samba_share_t.
Изменение типа каталога

В следующем примере демонстрируется создание нового каталога и изменение типа каталога на тип, используемый Apache HTTP Server:

  1. От имени пользователя 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).
  2. От имени пользователя 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
  3. От имени пользователя 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.
  4. От имени пользователя root, выполните команду /usr/sbin/semanage fcontext -d /web для удаления контекста, добавленного для /web/.
  5. От имени пользователя root, выполните команду /sbin/restorecon -v /web для восстановления контекста SELinux по умолчанию.
Изменение типа каталога и его содержимого

В следующем примере демонстрируется создание нового каталога и изменение типа каталога (вместе с его содержимым) на тип, используемым Apache HTTP Server. Конфигурация в этом примере, может быть использована, если Apache HTTP Server использует другой корневой каталог (вместо /var/www/html/):

  1. От имени пользователя root, выполните команду mkdir /web для создания нового каталога и команду touch /web/file{1,2,3} для создания трёх пустых файлов (file1file2 и 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
  2. От имени пользователя 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
  3. От имени пользователя 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.
  4. От имени пользователя root выполните команду /usr/sbin/semanage fcontext -d "/web(/.*)?" для удаления контекста добавленного для "/web(/.*)?".
  5. От имени пользователя root выполните команду /sbin/restorecon -R -v /web для восстановления контекста SELinux по умолчанию.
Удаление добавленного контекста

В следующем примере демонстрируется добавление и удаление контекста SELinux:

  1. От имени пользователя 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
  2. Для удаления контекста, выполните от имени пользователя root команду /usr/sbin/semanage fcontext -d file-name|directory-name, где file-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.

Запись опубликована в рубрике Новости, Общее. Добавьте в закладки постоянную ссылку.