有没有一个工具可以找到哪个 SELinux 规则允许发生特定的访问?

有没有一个工具可以找到哪个 SELinux 规则允许发生特定的访问?

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

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

allow app_a app_b:fifo_file write;

由于大量使用宏和类型属性关联,对该特定规则的文本搜索一无所获。

答案1

是的,您正在寻找sesearch来自setools包裹

对于您的具体示例,您可以使用sesearch -A -s app_a -t app_b -c fifo_file -p write.结果不仅包括allow两种类型之间的显式规则,还包括由属性产生的规则和取决于特定布尔值的条件规则。

-A/--allow使其搜索允许规则,还有其他选项用于 dontaudits、转换等。

您不必指定所有源/目标类型、类和权限。例如,使用sesearch -A -t app_b -c fifo_file将列出任何源对该fifo_file类型的所有权限app_b

默认情况下,sesearch使用当前活动的策略,但您也可以指定要搜索的策略的路径。

答案2

据我所知,没有。通常,您“扩展”与类型属性关联的宏和查询规则以查找它们的含义,宏和属性的名称通常非常具有描述性。您还可以查询 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 和像宏扩展器这样的脚本可以减轻一些痛苦,并且具有严格样式规则的自记录策略也有帮助。其中很多都是常见的模式。

相关内容