単一プロセスのネットワークトラフィックをキャプチャできるように、ネットワークネームスペースを使用しています。名前空間は、vethペアを介して「ホスト」を介して接続され、NATを介してネットワーク接続を介して接続されます。これまでは、IPトラフィックと名前付きUnixドメインソケットで動作していました。
プログラムが D-Bus セッションバスと通信する必要がある場合に問題が発生します。 D-Busデーモンは、この環境変数で指定された抽象ソケットを受け取ります。
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-jIB6oAy5ea,guid=04506c9a7f54e75c0b617a6c54e9b63a
抽象Unixドメインソケットの名前空間は、名前空間の点で異なるようです。ネットワークネームスペースからこのD-Busセッションにアクセスする方法はありますか?
答え1
Linuxネットワークネームスペース IPネットワーク実際にUnixソケットを切り離し、dbusがそれを使用している間に新しいネームスペースからアクセスできないようにしたので、Unixソケットへのアクセスを維持する機能を想像できますが、2019年5月現在、この機能はまだ実装されていません。 Unixソケットは次のように見えます。netstat -a -p --unix
代替ソリューションdbusソケットをプロキシするために使用されますsocat
。詳しく説明します。回答そしてここ
代替ソリューションdbusに必要な通信に応じて、新しいセッションバスインスタンスを作成できます。dbus スタート名前空間内でdbus-launch my-command-or-app
他のメソッドを使用できることに注意してください。dbus実行セッション
代替ソリューション netnsの実行ルートアクセスなしでネームスペースでアプリケーション/コマンドを実行できます(例:火災刑務所できる)しかし、socat
また、最初のソリューションのように自動化された方法でdbusをプロキシすることができ、rootアクセスは必要ありません。
代替ソリューション xdg-dbus-エージェントこれはルートなしで行うことができ、追加のオプション(フィルタリングなど)がたくさんあります...単一のdbusロケーションへのアクセスを許可したい場合は、セキュリティに関してこれが最善の選択です。このアプリケーションが起動します。分散化主なディストリビューションはFirejailの一部であるため、ソースからビルドする必要はないかもしれません。マニュアルページを見つけることができます。ここまたは、man xdg-dbus-proxy
アプリがインストールされている場合の使用方法は次のとおりです。
ホストマシンから:xdg-dbus-proxy $DBUS_SESSION_BUS_ADDRESS /tmp/proxybus
または xdg-dbus-proxy $DBUS_SESSION_BUS_ADDRESS /tmp/proxybus --filter --talk=org.foo.bar --see=org.gtk.* --own=org.my.name
名前空間から:DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/proxybus app-using-dbus
答え2
他のネットワーク名前空間の抽象Unixソケットを受け取るDBusデーモンに接続できません。これらのアドレスは、ss -x
以下を含むアドレスで識別できます@
。
u_str ESTAB 0 0 @/tmp/dbus-t00hzZWBDm 11204746 * 11210618
回避策として、非抽象UnixまたはIPソケットを作成して、抽象Unixソケットをプロキシできます。これはネットワーク名前空間の外部で行われます。その後、ネットワークネームスペース内でそのアドレスに接続できます。たとえば、上記の抽象ソケットアドレスを想定すると、名前空間の外部で動作します。
socat UNIX-LISTEN:/tmp/whatever,fork ABSTRACT-CONNECT:/tmp/dbus-t00hzZWBDm
その後、この環境変数を設定して名前空間内で接続できます。
DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/whatever
答え3
Linuxネットワークネームスペースには、IPv4およびIPv6スタック、ネットワークインターフェース、IPアドレス、IPパスなどのネットワークリソースのみが含まれています。ただし、Unixソケットはネットワークネームスペースに属していません。ソケットはファイルシステムをアドレス空間として使用します。したがって、ファイルシステムを介してアクセスするために名前空間をマウントすることに関連しています(それを呼び出すことができる場合)。ただし、共有マウントポイントが利用できなくても、ファイルディスクリプタとして Unix ソケットを渡すことができます。
したがって、DBus通信はLinuxネットワークの名前空間とは無関係であり、影響を受けません。したがって、ネットワークネームスペースからDBusにアクセスできません(これは適用されません)。