Linux डेस्कटॉप में D-Bus की समस्याएँ
(blog.vaxry.net)- D-Bus ऐप्लिकेशनों के बीच संचार के लिए एक bus है, जिसका कॉन्सेप्ट उपयोगी है, लेकिन इसका implementation बहुत कमजोर और non-standard है
- standard documentation अधूरी और असंगत है, और वास्तविक implementations इसका पालन नहीं करतीं, जिससे compatibility का ढहना होता है
- security flaws भी गंभीर हैं; unlock होने की स्थिति में एक ऐप दूसरे ऐप के secret data को पढ़ सकता है
- इसके जवाब में लेखक नया bus system ‘hyprtavern’ और protocol ‘hyprwire’ विकसित कर रहा है
- hyprtavern सख्त type checking, built-in permission management, सुरक्षित secret store (kv) आदि के जरिए D-Bus की संरचनात्मक समस्याओं को हल करने की कोशिश करता है
D-Bus की अवधारणा और सीमाएँ
- D-Bus एक ऐसा सिस्टम है जिसमें application और service shared bus के जरिए methods और properties expose कर सकते हैं और एक-दूसरे को call कर सकते हैं
- उदाहरण के लिए, यदि मौसम सेवा देने वाला कोई ऐप bus पर API register करता है, तो दूसरे ऐप उसे खोजकर इस्तेमाल कर सकते हैं
- लेकिन D-Bus की बहुत ढीली और असंरचित design के कारण कोई भी object मनमाने method register और call कर सकता है
- इससे “Garbage in, garbage out” जैसी स्थिति पैदा होती है
standard documentation और implementation में भ्रम
- D-Bus की standard documentation कई जगह बिखरी हुई है और अधूरी व कठिन रूप में मौजूद है
- वास्तविक implementations या तो इसका पालन नहीं करतीं, या अलग-अलग spec को मनमाने ढंग से अपनाती हैं
- लेखक बताता है कि xdg-desktop-portal-hyprland विकसित करते समय उसने “restore_token” spec implement किया,
लेकिन सभी ऐप अनौपचारिक “restore_data” field का उपयोग कर रहे थे, इसलिए compatibility नहीं बनी - D-Bus का variant type (a{sv}) मनमाना data transfer करने देता है, और इसे protocol consistency तोड़ने का बड़ा कारण बताया गया है
security संरचना की खामियाँ
- D-Bus में centralized permission management या deny mechanism मौजूद नहीं है
- सभी ऐप दूसरे ऐप की calls देख सकते हैं, और यदि कोई explicit security mechanism न हो तो असीमित access संभव है
- gnome-keyring, kwallet जैसे secret stores भी संरचनात्मक रूप से कमजोर हैं
- store unlock होने पर हर ऐप सभी secret data तक पहुँच सकता है
- लेखक ने इसे “security joke के स्तर” का बताया
नया विकल्प: hyprwire और hyprtavern
- लेखक D-Bus की समस्याओं को हल करने के लिए नया bus system ‘hyprtavern’ विकसित कर रहा है
- hyprwire Wayland के design से प्रेरित एक सरल और सुसंगत wire protocol है
- इसकी खासियतें हैं type enforcement, तेज connection, और सरल संरचना
- hyprtavern की संरचना ऐसी है जिसमें ऐप protocol-आधारित objects register करते हैं और एक-दूसरे को खोजते हैं
- यह built-in permission system, सख्त protocol compliance, सरल API, और secure defaults देता है
- hyprwire Wayland के design से प्रेरित एक सरल और सुसंगत wire protocol है
hyprtavern-kv (सुरक्षित key-value store)
- यह D-Bus की Secrets API को replace करने वाला core protocol है
- किसी ऐप द्वारा register किए गए secrets को सिर्फ वही ऐप पढ़ सकता है, और उनका enumeration संभव नहीं है
- Flatpak, Snap, AppImage ऐप्स के लिए ID-आधारित access control की भी योजना है
- data हमेशा encrypted रूप में store होगा, और password सेट होने पर वास्तविक security guarantee संभव है
- सभी ऐप सुरक्षित secret storage feature को डिफ़ॉल्ट रूप से इस्तेमाल कर सकेंगे
development status और आगे की योजना
- hyprtavern अभी development के शुरुआती चरण में है, और आगे Hyprland 0.54 version में इसका आंतरिक उपयोग किया जाएगा
- शुरुआती adoption सीमित रहने की उम्मीद है, लेकिन क्रमिक transition संभव है
- D-Bus के विपरीत, कई session buses को साथ चलाया जा सकता है, इसलिए compatibility proxy लिखना भी संभव है
- यह C++ में लिखा गया है, और Rust·Go·Python bindings भी आसानी से implement किए जा सकते हैं
- लेखक ज़ोर देकर कहता है कि “D-Bus को मूल रूप से ठीक नहीं किया जा सकता; इसे पूरी तरह नए सिरे से design करना होगा”
FAQ सारांश
- “पहिया फिर से बनाने” वाली आलोचना पर लेखक कहता है कि D-Bus की मूल design ही टूटी हुई है, इसलिए redesign अपरिहार्य है
- documentation अभी WIP (कार्य प्रगति पर) है और पूरा होने के बाद जारी किया जाएगा
- Wayland का उपयोग न करने का कारण यह है कि वह सामान्य IPC उपयोग के लिए उपयुक्त नहीं है
- D-Bus compatibility proxy (hyprtavern-dbus-notification-proxy) लिखना संभव है
- Rust की जगह C++ चुनने का कारण यह है कि developer की मुख्य भाषा C++ है
- security के लिहाज़ से LD_PRELOAD attack को पूरी तरह रोकना कठिन है, लेकिन यह संरचना हमले की कठिनाई और detectability बढ़ाती है
निष्कर्ष
- D-Bus को non-standard, insecure, और inconsistent होने के कारण Linux डेस्कटॉप ecosystem की bottleneck के रूप में देखा जा रहा है
- hyprtavern को इसके स्थान पर एक आधुनिक और सुरक्षित IPC bus के रूप में विकसित किया जा रहा है,
और Hyprland ecosystem के केंद्र में क्रमिक अपनाने की उम्मीद है - लक्ष्य है “userspace को अधिक आरामदायक बनाना”
1 टिप्पणियां
Hacker News टिप्पणियाँ
GNOME के secret storage access vulnerability विवाद को देखकर, यह मज़ेदार लगता है कि GNOME टीम ने “untrusted apps secret service से communicate नहीं कर सकतीं” वाले security model के आधार पर समस्या से इनकार किया
GNOME सच में किसी joker troupe द्वारा चलाया जाने वाला project लगता है
किसी ने कहा कि वह “खुद एक नया bus बनाएगा”, तो मैंने सुझाव दिया कि पहले से अरबों devices पर deployed Binder को reuse क्यों न किया जाए
Binder Android का core IPC है, और इसके पीछे कहीं ज़्यादा developers और battle-tested code है
संबंधित लेख: LWN, Rust-for-Linux mailing
Hyprwire और Hyprtavern से उम्मीद थी, लेकिन documentation या tests लगभग नहीं हैं
अफ़सोस है कि ऐसे projects एक अच्छा starting point बन सकते थे
OpenWrt developers ने बहुत पहले ही ubus नाम का एक alternative बना लिया था
संदर्भ: ubus docs, ubus vs dbus comparison
लेकिन इसका security model लगभग न के बराबर है, और OpenWrt की प्रकृति देखते हुए इसकी वजह समझ में आती है
D-Bus की समस्याओं में से एक browser extensions से जुड़ी vulnerabilities हैं, जो GNOME/KDE के साथ communicate करते समय पैदा होती हैं
सिर्फ website visit करने भर से D-Bus API flood होकर desktop hang हो सकता था
अगर आप security researcher हैं, तो D-Bus वास्तव में तलाशने लायक क्षेत्र है
D-Bus Linux desktop में XPC, COM, Android IPC जैसी चीज़ों के सबसे क़रीब है
लेकिन desktop fragmentation की वजह से एक unified development stack बनाना मुश्किल है
GNOME के लिए बनाई गई चीज़ KDE में बेकार हो जाती है, और XFCE या Sway तो अलग ही चलते हैं
अब जाकर पता चला कि KWallet या GNOME Keyring जैसे secret stores, unlock होने के बाद लगभग सभी apps के लिए accessible होते हैं
seahorseGUI में देखकर लगा कि ज़्यादातर Chromium-related keys या JetBrains account tokens ही थेplaintext passwords तो नहीं थे, लेकिन लगा कि अगर कोई malicious app Chromium data खंगाले, तो शायद कुछ और भी निकल सकता है
अगर system access के समय notification नहीं देता, तो कौन सा software उसे manage कर रहा है, इससे ज़्यादा फ़र्क नहीं पड़ता
सवाल है कि आखिर general-purpose bus protocol की ज़रूरत ही क्यों है?
Unix domain socket पर HTTP या simple JSON protocol इस्तेमाल करना काफ़ी होना चाहिए
permissions, SSH forwarding, container mounts जैसी चीज़ें भी सब support हो जाती हैं
D-Bus में service, interface, path, method जैसी संरचनाएँ काफ़ी जटिल हैं, फिर भी message identification अधूरा है, और app-specific protocol details भी जाननी पड़ती हैं
आखिरकार proxy handling भी मुश्किल हो जाती है, और यह system ज़रूरत से ज़्यादा complex है
D-Bus का design इस law of randomness का उदाहरण लगता है कि “सबसे बेहतरीन solution ज़रूरी नहीं चुना ही जाए”
जैसे React से बेहतर frameworks अनगिनत हैं, लेकिन जाने नहीं गए तो दब गए
GNOME ने vulnerability report का खंडन करते हुए Flatpak sandbox access restrictions का ज़िक्र किया, तो पुराने Microsoft blog post की याद आ गई
ऊपर से quotation को सिर्फ screenshot के रूप में डालना ताकि उसे copy भी न किया जा सके, यह बिल्कुल समझ से बाहर है