![SElinux源上下文和目标上下文之间的映射在哪里](https://linux22.com/image/220858/SElinux%E6%BA%90%E4%B8%8A%E4%B8%8B%E6%96%87%E5%92%8C%E7%9B%AE%E6%A0%87%E4%B8%8A%E4%B8%8B%E6%96%87%E4%B9%8B%E9%97%B4%E7%9A%84%E6%98%A0%E5%B0%84%E5%9C%A8%E5%93%AA%E9%87%8C.png)
我正在学习SELinux,有一个问题:
源字段和目标字段之间似乎没有直接关联。例如,Apache 可能以 Type 运行httpd_t
,并且 /var/www/html/ 下的文件可能将类型标签设置为httpd_sys_content_t
。除非我错了,否则这些“标签”似乎只是人类可读的字符串。
那么映射在哪里呢?系统如何知道具有任何特定源上下文的进程允许访问哪些目标上下文?
semanage fcontext -a
将设置一个自定义文件上下文策略,然后可以将其附加到匹配的文件restorecon
,但这并没有告诉我应该使用什么类型。
用户、角色和级别字段的“用途”是什么?哪些字段必须匹配才能允许操作?
相关说明:如何用特定的源上下文标记流程?
答案1
这些字段的解释见这里上下文
但对于不使用的普通用户MLS我们大多数人只关心类型强制 ( httpd_t
)。
SELinux 上下文有几个字段:用户、角色、类型和安全级别。当涉及到 SELinux 策略时,SELinux 类型信息可能是最重要的,因为定义进程和系统资源之间允许的交互的最常见策略规则使用 SELinux 类型,而不是完整的 SELinux 上下文。 SELinux 类型以 _t 结尾。例如,Web 服务器的类型名称是 httpd_t。通常在 /var/www/html/ 中找到的文件和目录的类型上下文是 httpd_sys_content_t。通常在 /tmp 和 /var/tmp/ 中找到的文件和目录的类型上下文是 tmp_t。 Web 服务器端口的类型上下文是 http_port_t。
- [3]
您可以考虑 的httpd_sys_content_t
子文件上下文类型httpd_t
,其定义在文件上下文。
一般来说,我建议作为快速查找来搜索代码参考政策回购协议有关如何定义内置类型的信息。在我看来,这是获得答案的最快方法之一。
接下来使用
seinfo --all|grep httpd_sys_content_t
或者
sesearch -t httpd_t -A
或者
sesearch -s httpd_t -A
或者
semanage fcontext -l | grep httpd_sys_content_t
更好的是,获取您的发行版策略的源代码并 grep 该类型的源代码树,以获得适用于您的发行版策略修订版的更准确的信息。
当宏出现在 refpolicy 源中时,它们可能有点令人生畏,但您也可以搜索它们的定义。