如何根据 dbus-monitor 输出中的错误确定 SELinux 规则

Posted

技术标签:

【中文标题】如何根据 dbus-monitor 输出中的错误确定 SELinux 规则【英文标题】:How to determine an SELinux rule from an error in dbus-monitor output 【发布时间】:2021-08-13 17:23:26 【问题描述】:

我在基于 yocto 的嵌入式 linux 系统中遇到问题。我已经追踪到 dbus 和 SELinux 之间的交互,使用 dbus-monitor 我可以看到以下错误:

error time=1621869986.514891 sender=org.freedesktop.DBus -> destination=:1.4 error_name=org.freedesktop.DBus.Error.AccessDenied reply_serial=69729
   string "An SELinux policy prevents this sender from sending this message to this recipient, 0 matched rules; type="method_return", sender=":1.4" (uid=0 pid=905 comm="/usr/sbin/NetworkManager --no-daemon " label="system_u:system_r:NetworkManager_t:s0") interface="(unset)" member="(unset)" error name="(unset)" requested_reply="0" destination=":1.6390" (uid=0 pid=14426 comm="/opt/metix-embedded/metix-wg-ui " label="system_u:system_r:init_t:s0")"

但是,审计日志中没有“AVC denied”错误,所以我不能使用 audit2allow 来确定允许交互的 SELinux 规则。

如何从 dbus-monitor 错误中找出我需要的 SELinux 规则?

【问题讨论】:

静默拒绝可能来自 dontaudit 规则,您可以通过运行 semodule -DB 禁用它们(-D 禁用 dontaudit 规则;-B 重建 selinux 策略)然后检查是否拒绝显示在审核日志中。运行 semodule -B 以在启用所有规则的情况下重建策略。 谢谢你,但它并没有揭示我的问题。当然它有效,我可以看到许多其他消息,但与 dbus 问题无关。 这似乎很有帮助:hub.packtpub.com/handling-selinux-aware-applications 【参考方案1】:

进一步的研究表明,dbus 本身就是一个支持 SELinux 的应用程序。它正在检查 SELinux 配置,并在 dbus 内部采取强制措施。这就是为什么来自 dbus 的拒绝不会出现在审核日志中的原因,即使关闭了静默拒绝也是如此。

通过为“send_msg”添加一些允许规则解决了我的特定问题,如下所示:

allow init_t NetworkManager_t:dbus send_msg;
allow NetworkManager_t init_t:dbus send_msg;

请注意,“init_t”和“NetworkManager_t”类型源自 dbus-monitor 错误。

更多信息:

https://hub.packtpub.com/handling-selinux-aware-applications/

https://blog.siphos.be/2014/06/d-bus-and-selinux/

https://relativkreativ.at/articles/how-to-compile-a-selinux-policy-package

【讨论】:

以上是关于如何根据 dbus-monitor 输出中的错误确定 SELinux 规则的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 dbus-monitor 输出中排除某些接口/地址?

dbus-monitor 中的'sender=:1.478' 是啥意思?

20KH开关电源的开关管(IGBT)死区时间如何确区

在 Gnome 中,dbus-monitor 上的啥信号表明用户正在注销?

dbus-monitoring 循环自动退出

我如何使用python将终端输出到网格中的tkinter框架?