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

How to determine an SELinux rule from an error in dbus-monitor output

我在基于 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 规则?

进一步的研究表明 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 错误。

更多信息: