SELinux:为什么 httpd 可以读取 /var/www/html 中的文件?

SELinux:为什么 httpd 可以读取 /var/www/html 中的文件?

我只是想更好地理解目标 SELinux。虽然我理解用户、进程、端口等都用四元组标记<user>,role>,<type>,<sensitivity>以及如何使用等设置标签semanage, restorecon。但我还不理解 SELinux 如何确定资源是否可以从进程访问以及进程如何访问它。

例如,查看我的httpdREL8,我可以看到进程和默认DocumentRoot目录上的以下标签/var/www/html

[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0  6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..

[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0    root       35291       1  0 13:23 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     35292   35291  0 13:23 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     35293   35291  0 13:23 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     35294   35291  0 13:23 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0    apache     35295   35291  0 13:23 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 35838 27088  0 13:30 pts/0 00:00:00 grep --color=auto httpd

但我正在寻找以下问题的答案:

  1. 为什么允许httpd进程访问/var/www/html下的文件? 这里按什么顺序检查哪些标签以及哪些标签必须匹配?
  2. role允许这种访问的定义是什么样的? 如何检查角色定义
  3. 如何确定进程如何访问特定标签的资源
  4. 作为管理员,我是否可以修改角色,以便也可以访问其他文件上下文

在此先非常感谢您的澄清。

答案1

从你的输出来看:

[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0    root       35291       1  0 13:23 ?        

httpd作为标签运行httpd_t。此类标签通过特定的 selinux 域转换规则附加到进程。

然后,我们可以看到:

[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0  6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..

/var/www/html具有允许的域标签httpd_sys_content_t。因此,运行的进程httpd_d可以读取标有相同标签的文件系统内容httpd_sys_content_t

所有这些都是通过非常复杂(且冗长)的 selinux 规则来控制的。系统管理员不需要了解整个规则集,所以不要惊慌。重要的是要了解 a) selinux 日志、b)semanage和 c)audit2allow

欲了解更多信息,您可以阅读RedHat Selinux 文档

回答您的问题:

  1. 为什么允许httpd进程访问/var/www/html里的文件?因为规则允许带有httpd_t标签的进程读取带有httpd_sys_content_t标签的文件(即ALLOW apache_process apache_log:FILE READ;:)

  2. 定义允许这种访问的角色是什么样的?角色将 MAC 应用于用户类型(即:员工),但不用于默认策略;而是用于(非默认)MLS 策略。

  3. 如何确定某个进程如何访问特定标签的资源?您可以转储整个策略集,但这不会提供简单的信息。相反,请看一下semange fcontext -l

  4. 作为管理员,我可以修改角色以便也可以访问其他文件上下文吗?当然可以。您可以从头开始编写策略(不推荐)或使用audit2allow(更好)。但是,请尽量避免这样做,因为任何自定义策略更改都难以跟踪/管理;相反,如果可能,请使用setseboolsemanage自定义您的基础策略。

相关内容