是否有工具可以找到允许特定访问发生的 SELinux 规则?

sat*_*ine 6 selinux

我的系统有一个非常复杂的 SELinux 策略。是否有工具可以解释为什么授予特定访问权限?通常,当我使用文本搜索来搜索特定规则时,我找不到它,因为该规则是通过宏或属性规则创建的。

例如,我知道我的系统中某处有一个等效规则允许这样做:

allow app_a app_b:fifo_file write;
Run Code Online (Sandbox Code Playgroud)

由于大量使用宏和类型属性关联,搜索该特定规则的文本没有任何结果。

小智 1

据我所知,没有。通常,您“扩展”与类型属性关联的宏和查询规则以查找它们的含义,宏和属性的名称通常非常具有描述性。您还可以查询 git-log 以查看 git 提交消息是否包含更多信息。

有一个名为“macro-expander”的脚本可以帮助扩展宏,并且有一个 setools 策略分析套件可以帮助查找与属性相关的规则。

您的示例中的规则似乎是未命名管道的使用。这通常是域转换宏的一部分,以允许管道进入目标的输入流,因为这对于 stdin/stdout/stderr 的处理非常常见,例如: ( app_b | app_a)

https://github.com/SELinuxProject/refpolicy/blob/master/policy/support/misc_patterns.spt#L58

因此,假设 app_b 通过域转换运行 app_a,则允许 app_a 读/写从 app_b 继承的管道。所以它是关于 stdin、stdout、stderr 的处理。例如,自动允许域转换的目标使用域转换源的继承管道。

但是,是的,解析其他人编写的复杂策略可能是一个挑战。setools 和像宏扩展器这样的脚本可以减轻一些痛苦,并且具有严格样式规则的自记录策略也有帮助。其中很多都是常见的模式。