无法将 SELinux 文件上下文应用于带有符号链接的路径

无法将 SELinux 文件上下文应用于带有符号链接的路径

我有一个正在企业环境中安装的解决方案。该解决方案及其部署指南旨在安装在启用了 SELinux 的 RHEL7/CentOS7 服务器上,并且组件将根据文件系统层次结构标准安装到相应位置。

然而,一位客户让我们感到惊讶,他表示所有第三方解决方案都必须安装到目录中,/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

是否有办法修改semanagerestorecon命令的参数,以使其适用于符号链接(以及正常情况下)或者我对 SELinux 如何应用文件上下文存在根本性的误解?

我认为这个问题不同于如何使用 semanage 为符号链接分配 SELinux 标签,以便它在重新标记后仍然有效?因为它是将上下文应用于符号链接目录的子目录中的文件,而不是将上下文应用于符号链接文件本身。

答案1

您可以使用realpath部署指南中的命令来确保说明是通用的,但将上下文应用于实际文件系统位置,无论其实际位置在哪里。

`realpath "/opt/product/wwwstatic"`

答案2

SELinux 文件上下文根据实际文件系统路径进行匹配。没有“跟随符号链接”。因此您的自定义上下文需要引用磁盘上的实际位置。

第三方应用程序的标准位置 /opt,所以你说得对。如果你的客户想做一些非标准的事情,那么你应该向他们明确说明他们这样做是错误的,以及这样做会造成哪些额外的成本(时间和金钱)。

答案3

将 -h 标志与 chcon 一起使用:

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

相关内容