我只是想更好地理解目标 SELinux。虽然我理解用户、进程、端口等都用四元组标记<user>,role>,<type>,<sensitivity>
以及如何使用等设置标签semanage, restorecon
。但我还不理解 SELinux 如何确定资源是否可以从进程访问以及进程如何访问它。
例如,查看我的httpd
REL8,我可以看到进程和默认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
但我正在寻找以下问题的答案:
- 为什么允许httpd进程访问/var/www/html下的文件? 这里按什么顺序检查哪些标签以及哪些标签必须匹配?
role
允许这种访问的定义是什么样的? 如何检查角色定义- 如何确定进程如何访问特定标签的资源?
- 作为管理员,我是否可以修改角色,以便也可以访问其他文件上下文?
在此先非常感谢您的澄清。
答案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 文档
回答您的问题:
为什么允许httpd进程访问/var/www/html里的文件?因为规则允许带有
httpd_t
标签的进程读取带有httpd_sys_content_t
标签的文件(即ALLOW apache_process apache_log:FILE READ;
:)定义允许这种访问的角色是什么样的?角色将 MAC 应用于用户类型(即:员工),但不用于默认策略;而是用于(非默认)MLS 策略。
如何确定某个进程如何访问特定标签的资源?您可以转储整个策略集,但这不会提供简单的信息。相反,请看一下
semange fcontext -l
作为管理员,我可以修改角色以便也可以访问其他文件上下文吗?当然可以。您可以从头开始编写策略(不推荐)或使用
audit2allow
(更好)。但是,请尽量避免这样做,因为任何自定义策略更改都难以跟踪/管理;相反,如果可能,请使用setsebool
或semanage
自定义您的基础策略。