我的系统有一个非常复杂的 SELinux 策略。是否有一个工具可以解释为什么授予特定访问权限?通常,当我使用文本搜索搜索特定规则时,我找不到它,因为该规则是通过宏或属性规则创建的。
例如,我知道我的系统中某个地方有一个等效的规则允许这样做:
allow app_a app_b:fifo_file write;
由于大量使用宏和类型属性关联,对该特定规则的文本搜索一无所获。
答案1
对于您的具体示例,您可以使用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 和像宏扩展器这样的脚本可以减轻一些痛苦,并且具有严格样式规则的自记录策略也有帮助。其中很多都是常见的模式。