네트워크 네임스페이스에서 D-Bus에 연결

네트워크 네임스페이스에서 D-Bus에 연결

단일 프로세스의 네트워크 트래픽을 캡처할 수 있도록 네트워크 네임스페이스를 사용하고 있습니다. 네임스페이스는 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를 프록시할 수 있으며 루트 액세스가 필요하지 않습니다.

대체 솔루션 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에 액세스할 수 없습니다(이는 적용되지 않음).

관련 정보