У меня есть решение, которое устанавливается в корпоративной среде. Решение и руководство по его развертыванию предназначены для установки на сервере 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 *