16 पॉइंट द्वारा GN⁺ 2024-05-01 | 1 टिप्पणियां | WhatsApp पर शेयर करें

run0: systemd का sudo विकल्प टूल

  • v256 में शामिल नया टूल (असल में मौजूदा systemd-run का symlink)
  • sudo की तरह काम करता है, लेकिन SUID नहीं है
  • सर्विस मैनेजर से लक्ष्य उपयोगकर्ता के UID पर कमांड या shell चलाने का अनुरोध करता है
    • क्लाइंट से context inherit किए बिना, PID 1 से नए fork किए गए isolated execution context में target command को चलाता है
  • run0 अपनी अलग configuration language लागू नहीं करता, और authorization के लिए polkit का उपयोग करता है.
  • privilege escalation के दौरान terminal background को लाल रंगत में बदल देता है ताकि पता चले कि यह elevated privileges के साथ चल रहा है. Window title में भी privilege escalation की स्थिति दिखाने के लिए लाल बिंदु दिखाता है.
  • systemd-run के --property= switch को सपोर्ट करता है, इसलिए चलाए गए privileged command/session के लिए मनचाही service settings तय की जा सकती हैं.

sudo की समस्याएँ

  • sudo अपेक्षाकृत बड़ा SUID binary है, यानी ऐसा privileged code जिसे non-privileged user अपने context से चला सकता है.
  • जटिल configuration language, loadable plugins (LDAP आदि), hostname matching जैसी चीज़ों के कारण इसका attack surface बड़ा है.
  • SUID binary होना सबसे बड़ी समस्या है. इसे non-privileged code द्वारा चलाया जाता है, और यह उसी execution context को inherit करता है जिसे non-privileged code नियंत्रित करता है (environment variables, process scheduling properties, cgroup assignment, security context, पास किए गए file descriptors आदि). SUID binaries को इन सबको बहुत सावधानी से sanitize करना पड़ता है, लेकिन अक्सर यह ठीक से नहीं हो पाता.

अन्य बातें

  • run0 से सिर्फ shell ही नहीं, root privileges के साथ दूसरे commands भी चलाए जा सकते हैं. प्रोग्राम बंद होने पर terminal का रंग पहले जैसा हो जाता है.
  • background color का अपने-आप बदलना असुविधाजनक लग सकता है, लेकिन --background= switch से इसे बदला या बंद किया जा सकता है.
  • sudo को पूरी तरह run0 से बदलना संभव लगता है, लेकिन अलग-अलग distributions की पसंद अलग हो सकती है.
  • LDAP support आदि के लिए sudo का plugin-आधारित तरीका कई समस्याएँ रखता है. polkit को systemd में सुरक्षित रूप से प्रबंधित होने वाले तरीके से extend किया जा सकता है.
  • run0 में bash scripts का व्यवहार sudo के अनुकूल SUDO_xxx environment variables से जाँचा जा सकता है.

GN⁺ की राय

  • अक्सर इस्तेमाल होने वाले sudo के विकल्प के रूप में run0 को पेश किया जाना प्रभावशाली है. यह SUID के जोखिम से बचते हुए sudo के फायदे भी बनाए रखता दिखता है.
  • privilege escalation की स्थिति को दृश्य रूप से स्पष्ट दिखाना, गलती से होने वाले नुकसान को कम करने में मददगार हो सकता है. Terminal background color बदलना कुछ लोगों को खल सकता है, लेकिन इसे option से नियंत्रित किया जा सकता है, इसलिए यह बड़ी समस्या नहीं लगती.
  • polkit के ज़रिए permission settings करना sudo जितना flexible न हो, लेकिन इससे चीज़ें सरल हो सकती हैं और attack surface कम हो सकता है. polkit configuration के उदाहरणों का अच्छा documentation देना महत्वपूर्ण लगता है.
  • sudo पर निर्भर मौजूदा scripts आदि के migration के लिए कुछ समय तक sudo को साथ में उपलब्ध रखना पड़ेगा. लेकिन नए environments में शुरुआत से run0 का उपयोग करना बेहतर रहेगा.
  • लंबे समय में, run0 को अपनाने के बहाने SUID को साहसपूर्वक हटाकर ऐसी architecture की ओर बढ़ने की उम्मीद की जा सकती है जिसमें system permissions का केंद्रीकृत प्रबंधन system services से हो. सुरक्षा और मजबूती के लिहाज़ से यह सही दिशा लगती है.

1 टिप्पणियां

 
GN⁺ 2024-05-01
Hacker News राय
  • run0, sudo के विपरीत, क्लाइंट से कोई भी context inherit नहीं करता और PID 1 से नए fork किए गए isolated exec context में target command चलाता है। यह shell commands के सामान्य use case से मेल नहीं खाता, इसलिए व्यवहार में यह समस्याओं का कारण बनेगा और व्यापक रूप से अपनाया जाना कठिन होगा।
  • अगर run0 का व्यापक उपयोग होने लगे, तो sudo की तरह व्यवहार करने वाला एक flag जोड़ दिया जाएगा, और लोग हमेशा वही flag इस्तेमाल करेंगे। जब इससे समस्या होगी, तो systemd project sudo को हटाने की कोशिश कर सकता है।
  • run0, privilege levels के बीच सख्त IPC boundary रखकर sudo से अलग approach अपनाता है। जो लोग systemd का उपयोग करना चाहते हैं, उनके लिए यह एक अच्छा तरीका हो सकता है।
  • sudo का रखरखाव ज़्यादातर एक ही व्यक्ति द्वारा किया जाता है।
  • run0 का व्यवहार कई मायनों में sudo से अधिक ssh के करीब है। localhost पर SSH कनेक्ट करके इसी तरह का tool बनाया जा सकता है।
  • 1980 के दशक के मध्य में Berkeley के एक experimental BSD clone में इसी तरह के विचार का परीक्षण किया गया था, लेकिन सब कुछ pipe के जरिए भेजने की जटिलता के कारण इसे अस्वीकार कर दिया गया। इसके बजाय inherited environment की जाँच को अधिक मजबूत बनाया गया।
  • run0 को लेकर logging, पास किए जाने वाले environment variables, signal handling, और sudoedit के विकल्प जैसे पहलुओं पर सवाल हैं।
  • run0 के अलावा, Rust में लिखा गया एक memory-safe और कम bugs वाला sudo implementation भी मौजूद है।
  • हाल के समय में अक्सर एक physical machine पर केवल एक ही user होता है, इसलिए Unix permission system को सरल बनाने की आवश्यकता है।
  • privilege escalation के समय terminal background color को लाल करना कोई महत्वपूर्ण हिस्सा नहीं है।