root以外のユーザーとしてシステムモードでdbus-monitorを実行する

root以外のユーザーとしてシステムモードでdbus-monitorを実行する

ルート以外のユーザーとしてシステムバスからD-Bus呼び出しを監視できますか?システムはraw D-Bus呼び出しをキャプチャするサービスを作成したいが、セキュリティ上の理由からroot権限なしでカスタムサービスを実行することを好む。サービスは不要なメッセージをフィルタリングし、重要なコンテンツ値をクリーンアップし、残りのメッセージのログファイルを生成します。目的は、送信されたすべての構成および読み取り選択コマンドがD-Busインターフェースを提供するカスタムサービスによって実際に正しく記録されていることを確認できるように、特定のサービスのログを補完するログストリームを生成することです。

「dbusmonitor」グループのユーザーに「BecomeMonitor」機能を提供するために、system-local.confを作成しました。その結果、グループに属していないユーザーとは若干異なるエラーメッセージが表示されましたが、目的の動作は発生しませんでした。

コンテンツ/etc/dbus-1/system-local.conf:

<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy group="dbusmonitor">
    <allow send_destination="org.freedesktop.DBus"
           send_interface="org.freedesktop.DBus.Monitoring"
           send_member="BecomeMonitor"
           send_type="method_call"/>
  </policy>
</busconfig>

NetworkManager ターゲットの dbus-monitor に対する一般ユーザー出力。 dbus 呼び出しが行われた場合、出力には何も表示されません。

[test@localhost ~]$ groups
test

[test@localhost ~]$ dbus-monitor --system "destination='org.freedesktop.NetworkManager'"

dbus-monitor: unable to enable new-style monitoring: org.freedesktop.DBus.Error.AccessDenied: "Rejected send message, 1 matched rules; type="method_call", sender=":1.461" (uid=1002 pid=6471 comm="dbus-monitor --system destination='org.freedesktop" label="unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023") interface="org.freedesktop.DBus.Monitoring" member="BecomeMonitor" error name="(unset)" requested_reply="0" destination="org.freedesktop.DBus" (bus)". Falling back to eavesdropping.

signal time=1661974390.087332 sender=org.freedesktop.DBus -> destination=:1.461 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.461"

以下は、特権グループのメンバーであるユーザーに対する同じdbus-monitorコマンドの出力です。エラーメッセージは少し異なります。同様に、dbus呼び出しもキャッチされません。

[admin@localhost ~]$ groups
admin wheel dbusmonitor

[admin@localhost ~]$ dbus-monitor --system "destination='org.freedesktop.NetworkManager'"

dbus-monitor: unable to enable new-style monitoring: org.freedesktop.DBus.Error.AccessDenied: "rejected attempt to call BecomeMonitor by connection :1.528 (uid=1000 pid=9157 comm="dbus-monitor --system destination='org.freedesktop" label="unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023") with uid 1000". Falling back to eavesdropping.

signal time=1661978040.536692 sender=org.freedesktop.DBus -> destination=:1.528 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.528"

以下は、rootユーザーに対する同じdbus-monitorコマンドの出力です。 "org.freedesktop.NetworkManager.state"へのdbus呼び出しが正常にキャプチャされ、これは望ましい動作です。

[root@localhost ~]#  dbus-monitor --system "destination='org.freedesktop.NetworkManager'"

signal time=1661979771.623836 sender=org.freedesktop.DBus -> destination=:1.546 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.546"
signal time=1661979771.623861 sender=org.freedesktop.DBus -> destination=:1.546 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string ":1.546"

method call time=1661979774.507096 sender=:1.547 -> destination=org.freedesktop.NetworkManager serial=2 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.DBus.Introspectable; member=Introspect
method call time=1661979774.508390 sender=:1.547 -> destination=org.freedesktop.NetworkManager serial=3 path=/org/freedesktop/NetworkManager; interface=org.freedesktop.NetworkManager; member=state

重要な場合はRHEL8でテストしています。 SELinuxを許可モードに切り替えても、この問題には何の影響もありません。

system-local.confファイルの「dbusmonitor」グループに追加の権限を割り当てる必要がありますか?それとも、この能力が他の場所では二次的に制限されていますか?

関連情報