Назад | Перейти на главную страницу

Невозможно применить контекст файла SELinux к путям с символическими ссылками

У меня есть решение, которое устанавливается в корпоративной среде. Решение и руководство по его развертыванию предназначены для установки на сервере RHEL7 / CentOS7 с включенным SELinux и компонентами, устанавливаемыми в места в соответствии со стандартом иерархии файловой системы.

Однако один из клиентов удивил нас, заявив, что все сторонние решения должны быть установлены на /apps каталог, поскольку они создают резервную копию в соответствии с политикой.

Чтобы избежать отклонений для этого конкретного клиента, поскольку это потребует значительных изменений в решении, мы решили, что лучшим подходом будет создание нового каталога в /apps каталог для /optи заранее создавайте символические ссылки из истинных /opt и примените к нему то же содержимое SELinux (usr_t) например:

ls -laZ /appl/opt
drwxr-xr-x. root     root     unconfined_u:object_r:usr_t:s0   .
drwxr-xr-x. root     root     unconfined_u:object_r:default_t:s0 ..
drwxr-xr-x. product product unconfined_u:object_r:usr_t:s0   product

la -laZ /opt
drwxr-xr-x. root root system_u:object_r:usr_t:s0       .
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..
lrwxrwxrwx. root root unconfined_u:object_r:usr_t:s0   product -> /apps/opt/product/

Доступ к некоторым компонентам продукта осуществляется через Apache HTTPD, и для них требуется httpd_sys_content_t контекст, который будет применяться к ним.

Файлы расположены по адресу /opt/product/wwwstatic/ (что на самом деле /apps/opt/product/wwwstatic/).

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

semanage fcontext -a -t httpd_sys_content_t "/opt/product/wwwstatic/*"
restorecon -Rv /opt/product/wwwstatic

который восстанавливает контексты при стандартной установке, но в этой среде из-за символических ссылок он не работает.

Если вы измените команды, чтобы включить /apps каталог работает, но отличается от общего подхода.

Содержание /etc/selinux/targeted/contexts/files/file_contexts.local является:

# This file is auto-generated by libsemanage
# Do not edit directly.

/appl/opt/.*    system_u:object_r:usr_t:s0
/appl/srv/.*    system_u:object_r:var_t:s0
/opt/product/wwwstatic/*    system_u:object_r:httpd_sys_content_t:s0

Есть ли способ изменить аргументы на semanage или restorecon команды, так что это будет работать для символических ссылок (а также обычно), или я фундаментальное непонимание того, как SELinux применяет контексты файлов?

Я считаю, что этот вопрос отличается от Как назначить метку SELinux символической ссылке с помощью semanage, чтобы она сохранялась после повторной метки? поскольку речь идет о применении контекстов к файлам в подкаталогах из каталогов, связанных символическими ссылками, вместо применения контекстов к самому файлу символической ссылки.

Вы можете использовать realpath в руководстве по развертыванию, чтобы гарантировать, что инструкции являются общими, но применяют контексты к реальному местоположению файловой системы, где бы это ни было на самом деле.

`realpath "/opt/product/wwwstatic"`

Контексты файлов SELinux совпадают на основе фактического пути файловой системы. Здесь нет "следовать символическим ссылкам". Таким образом, ваши пользовательские контексты должны ссылаться на фактическое местоположение на диске.

Стандартное расположение для сторонних приложений является /opt, значит, здесь вы правы. Если у вас есть клиент, который хочет сделать что-то нестандартное, вы должны дать ему понять, что он делает это неправильно, и каковы будут дополнительные затраты (по времени и деньгам) на это.

Используйте флаг -h с chcon:

chcon -h -v system_u:object_r:httpd_sys_content_t:s0 *