D-Bus에 대한 원격 액세스를 설정하려고하는데 인증 및 권한 부여가 작동하지 않는 방식을 이해하지 못합니다.
추상 소켓에서 수신 대기하는 D-Bus 서버가 있습니다.
$ echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-g5sxxvDlmz,guid=49bd93b893fe40d83604952155190c31
나는 dbus-monitor
무슨 일이 일어나고 있는지 보려고 달려 간다. 내 테스트 케이스는 notify-send hello
로컬 컴퓨터에서 실행될 때 작동합니다.
같은 컴퓨터의 다른 계정에서 해당 버스에 연결할 수 없습니다.
otheraccount$ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-g5sxxvDlmz,guid=49bd93b893fe40d83604952155190c31 dbus-monitor
Failed to open connection to session bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
otheraccount$ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-g5sxxvDlmz,guid=49bd93b893fe40d83604952155190c31 notify-send hello
D-Bus 사양을 탐색 한 후 ~/.dbus-keyrings/org_freedesktop_general
다른 계정으로 복사 했지만 도움이되지 않습니다.
socat을 사용하여 schedar 의 Access D-Bus 에서 영감을 얻은 TCP를 통해 D-Bus 소켓을 전달하려고했습니다 .
socat TCP-LISTEN:8004,reuseaddr,fork,range=127.0.0.1/32 ABSTRACT-CONNECT:/tmp/dbus-g5sxxvDlmz
내 계정에서 TCP 소켓에 연결할 수 있습니다.
DBUS_SESSION_BUS_ADDRESS=tcp:host=127.0.0.1,port=8004 notify-send hello
하지만 다른 계정에서, 어느 쪽과 dbus-monitor
도와 notify-send
. dbus-monitor
위의 추상 소켓과 같은 오류 메시지 ; notify-send
이제 추적을 내 보냅니다.
otheraccount$ DBUS_SESSION_BUS_ADDRESS=tcp:host=127.0.0.1,port=8004 notify-send hello
** (notify-send:2952): WARNING **: The connection is closed
Stracing은이 버전이 notify-send
쿠키 파일을 읽으려고 시도하지 않으므로 쿠키를 연결할 수없는 이유를 이해합니다.
또한 다른 컴퓨터로 SSH를 시도하고 TCP 연결을 전달하려고 시도했습니다.
ssh -R 8004:localhost:8004 remotehost
놀랍게도 dbus-monitor
쿠키 파일없이 작동합니다! 원격 호스트에서 D-Bus 트래픽을 볼 수 있습니다. 로컬 dbus-monitor
인스턴스 에서 도청에 대한 알림이 표시 됩니다.
remotehost$ DBUS_SESSION_BUS_ADDRESS=tcp:host=127.0.0.1,port=8004 dbus-monitor
signal sender=org.freedesktop.DBus -> dest=:1.58 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
string ":1.58"
method call sender=:1.58 -> dest=org.freedesktop.DBus serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "eavesdrop=true"
notify-send
로컬 컴퓨터에서 실행 dbus-monitor
하면 원격 호스트에서 알림이 표시됩니다. 인증이 필요한 액세스 수준에 도달했습니다.
notify-send
쿠키를 찾지 못하는 것에 대해 불평했습니다. 쿠키 파일을 복사 한 후notify-send
원격 시스템에서 작동합니다.
로컬 머신은 데비안 wheezy를 실행합니다. 원격 시스템은 FreeBSD 10.1을 실행합니다.
D-Bus 인증 및 권한 부여 방법을 이해하지 못합니다.
- 내가 알 수있는 한 원격 시스템의 자격 증명없이 도청 할 수있는 이유는 무엇입니까? D-Bus를 TCP 연결로 전달할 때 무엇을 노출합니까? 왜에 대한 권한입니다
dbus-monitor
및notify-send
다른는? - 초록 소켓 또는 TCP 연결을 통해 동일한 컴퓨터의 다른 계정에서 도청 할 수없는 이유는 무엇입니까?
- 쿠키 파일이 몇 분마다 변경되는 것을 알았습니다 (정기 간격인지 여부는 알지 못했습니다). 왜?
(TCP에서 수신 대기하는 D-Bus 데몬을 시작할 수 있다는 것을 알고 있습니다. 제 질문의 목적이 아닙니다. 왜 내가 한 일과 왜 일하지 않았는지 이해하고 싶습니다.)
SCM_CREDENTIALS
구체적으로 사용하지 않습니다 . Linux에서는SO_PEERCRED
대신 소켓 옵션을 사용합니다.