मैं डी-बस तक रिमोट एक्सेस स्थापित करने की कोशिश कर रहा हूं, और मुझे समझ नहीं आ रहा है कि प्रमाणीकरण और प्राधिकरण कैसे काम कर रहे हैं (नहीं)।
मेरे पास डी-बस सर्वर एक अमूर्त सॉकेट पर सुन रहा है।
$ 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
डी-बस विनिर्देशन ब्राउज़ करने के बाद , मैंने ~/.dbus-keyrings/org_freedesktop_generalदूसरे खाते में प्रतिलिपि बनाई , लेकिन यह मदद नहीं करता है।
मैंने टीसीपी पर डी-बस सॉकेट को अग्रेषित करने की कोशिश की, जो कि सोटर का उपयोग करते हुए दूर से बस के एक्सेस डी-बस से प्रेरित है ।
socat TCP-LISTEN:8004,reuseaddr,fork,range=127.0.0.1/32 ABSTRACT-CONNECT:/tmp/dbus-g5sxxvDlmz
मैं अपने खाते से टीसीपी सॉकेट से कनेक्ट कर सकता हूं।
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
स्ट्रिंग्स से पता चलता है कि यह संस्करण notify-sendकुकी फ़ाइल को पढ़ने की कोशिश नहीं करता है, इसलिए मैं समझता हूं कि यह कनेक्ट करने में सक्षम क्यों नहीं होगा।
मैंने दूसरी मशीन में SSHing और TCP कनेक्शन को अग्रेषित करने का भी प्रयास किया।
ssh -R 8004:localhost:8004 remotehost
हैरानी की बात है, dbus-monitorएक कुकी फ़ाइल के बिना काम करता है! मैं दूरस्थ मेजबान से डी-बस यातायात देख सकता हूं। मैं अपने स्थानीय 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 चलाता है। रिमोट मशीन फ्रीबीएसडी 10.1 चलाता है।
मुझे समझ में नहीं आता कि डी-बस प्रमाणीकरण और प्राधिकरण कैसे काम करते हैं।
- मैं दूरस्थ रूप से मशीन से कोई प्रमाणिकता के साथ, जहां तक मैं बता सकता हूं, क्यों छिप सकते हैं? जब मैं डी-बस को टीसीपी कनेक्शन के लिए आगे बढ़ाता हूं तो मैं क्या उजागर कर रहा हूं? के लिए प्राधिकरण
dbus-monitorऔरnotify-sendअलग - अलग क्यों हैं ? - मैं एक ही मशीन पर किसी अन्य खाते से क्यों नहीं देख सकता, चाहे सार सॉकेट पर या टीसीपी कनेक्शन पर?
- मैंने देखा कि कुकी फ़ाइल हर कुछ मिनटों में बदलती है (मुझे पता नहीं है कि यह नियमित अंतराल पर है या नहीं)। क्यों?
(मुझे पता है कि मैं एक डी-बस डेमॉन लॉन्च कर सकता हूं जो टीसीपी पर सुनता है। यह मेरे सवाल का उद्देश्य नहीं है, मैं समझना चाहता हूं कि मैंने क्या किया और काम नहीं किया।)
SCM_CREDENTIALSविशेष रूप से उपयोग नहीं करता है। लिनक्स पर, यहSO_PEERCREDइसके बजाय सॉकेट विकल्प का उपयोग करता है ।