हालाँकि आप कमांडलाइन तर्कों को प्रतिबंधित करते हैं लेकिन ऐसा कुछ भी नहीं है जो उपयोगकर्ता को रूट के रूप में चलने पर किसी भी यादृच्छिक फ़ाइल को खोलने, संपादित करने और अधिलेखित करने से रोकता है ।
उपयोगकर्ता चला सकता है sudo vim /etc/httpd/conf/httpd.conf और फिर
- संपादन बफ़र से वह सभी पाठ साफ़ करें
- तब सुविधा स्रोत के लिए एक मौजूदा फ़ाइल (हालांकि यह भी आवश्यक नहीं है): उदाहरण के लिए sudo कॉन्फ़िगरेशन
:r /etc/sudoers नोट: जब तक SELinux द्वारा प्रतिबंधित उपयोगकर्ता इस तरह से किसी भी फ़ाइल को पढ़ सकता है !
- अपने आप को अधिक sudo विशेषाधिकार प्रदान करते हैं
user ALL=(ALL) NOPASSWD: ALL
- पुराने कॉन्फ़िगरेशन को अधिलेखित करें
:w /etc/sudoers
मैं ऐसे ही दर्जनों तरीकों की कल्पना कर सकता हूं जो आपके उपयोगकर्ता अब आपके सिस्टम तक पहुंच, संशोधित या नष्ट कर सकते हैं।
आपके पास एक ऑडिट ट्रेल भी नहीं होगा, जो फाइलें इस तरह से बदल दी गई थीं जैसा कि आप उसे केवल सूडो लॉग संदेशों में अपने अपाचे कॉन्फ़िगरेशन को संपादित करते हुए देखेंगे। यह sudoकिसी भी संपादक को विशेषाधिकार देने में एक सुरक्षा जोखिम है ।
यह कमोबेश यही कारण है कि कमांडो को sudo रूट लेवल राइट्स देना जैसे कि tarऔर unzipअक्सर असुरक्षित होता है, कुछ भी आपको संग्रह में सिस्टम बायनेरी या सिस्टम कॉन्फ़िगरेशन फ़ाइलों के लिए प्रतिस्थापनों को शामिल करने से रोकता है।
एक दूसरा जोखिम, जैसा कि कई अन्य टिप्पणीकारों ने बताया है, यह है कि शेल से बचने कीvim अनुमति देता है , जहां आप विम से उप-शेल शुरू कर सकते हैं जो आपको किसी भी मनमाना आदेश को निष्पादित करने की अनुमति देता है । आपके sudo vim सेशन के भीतर से जो रूट के रूप में चलेंगे, उदाहरण के लिए शेल एस्केप:
:!/bin/bash आपको एक इंटरेक्टिव रूट शेल देगा
:!/bin/rm -rf / पब में अच्छी कहानियों के लिए कर देगा।
इसके बजाय क्या करना है?
आप अभी भी sudoउपयोगकर्ताओं को उन फ़ाइलों को संपादित करने की अनुमति देने के लिए उपयोग कर सकते हैं जो वे सुरक्षित तरीके से खुद नहीं करते हैं।
अपने sudoers कॉन्फ़िगरेशन में, आप एक विशेष आरक्षित कमांड सेट कर सकते हैं, sudoeditजिसके बाद पूर्ण (वाइल्डकार्ड) pathname फाइल (s) में एक उपयोगकर्ता को संपादित कर सकता है:
user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
उपयोगकर्ता तब -eअपने sudo कमांड लाइन में स्विच का उपयोग कर सकता है या sudoeditकमांड का उपयोग कर सकता है :
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
जैसा कि मैन पेज में बताया गया है :
-e (edit)विकल्प है कि इंगित करता है, एक आदेश चलाकर के बजाय, उपयोगकर्ता संपादित एक या अधिक फ़ाइलों चाहती है। एक कमांड के बदले में, सुरक्षा नीति पर विचार-विमर्श करते समय स्ट्रिंग "सुडोयडिट" का उपयोग किया जाता है।
यदि उपयोगकर्ता नीति द्वारा अधिकृत है, तो निम्न कदम उठाए गए हैं:
- अस्थायी प्रतियाँ उन फ़ाइलों से बनी होती हैं, जिन्हें स्वामी के द्वारा आमंत्रित उपयोगकर्ता के साथ संपादित किया जाता है।
- पॉलिसी द्वारा निर्दिष्ट संपादक अस्थायी फ़ाइलों को संपादित करने के लिए चलाया जाता है। सूडोर्स नीति SUDO_EDITOR, VISUAL और EDITOR पर्यावरण चर (उस क्रम में) का उपयोग करती है। यदि SUDO_EDITOR, VISUAL या EDITOR में से कोई भी सेट नहीं किया जाता है, तो संपादक
sudoers(5) विकल्प में सूचीबद्ध पहले प्रोग्राम का उपयोग किया जाता है।
- यदि उन्हें संशोधित किया गया है, तो अस्थायी फ़ाइलों को उनके मूल स्थान पर वापस कॉपी किया जाता है और अस्थायी संस्करण हटा दिए जाते हैं।
यदि निर्दिष्ट फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा।
ध्यान दें कि sudo द्वारा चलाए जाने वाले अधिकांश कमांडों के विपरीत, संपादक को अनचाहे उपयोगकर्ता के वातावरण के साथ चलाया जाता है। यदि, किसी कारण से, sudo अपने संपादित संस्करण के साथ फ़ाइल को अपडेट करने में असमर्थ है, तो उपयोगकर्ता को एक चेतावनी मिलेगी और संपादित प्रतिलिपि एक अस्थायी फ़ाइल में रहेगी।
sudoersमैनुअल भी एक पूरी अनुभाग है कि यह कैसे सीमित की पेशकश कर सकते है खोल पलायन के खिलाफ संरक्षण के साथ RESRICTऔर NOEXECविकल्प।
restrict
उपयोगकर्ताओं को उन आदेशों तक पहुंच देने से बचें, जो उपयोगकर्ता को मनमाना आदेशों को चलाने की अनुमति देते हैं। कई संपादकों के पास एक प्रतिबंधित मोड होता है जहां शेल एस्केप अक्षम होते हैं, हालांकि sudoedit sudo के माध्यम से संपादकों को चलाने के लिए एक बेहतर समाधान है। शेल की पेशकश करने वाले कार्यक्रमों की बड़ी संख्या के कारण, उपयोगकर्ताओं को उन कार्यक्रमों के सेट तक सीमित करना जो अक्सर नहीं होते हैं, जो कि अटूट होते हैं।
तथा
noexec
साझा पुस्तकालयों का समर्थन करने वाली कई प्रणालियाँ एक वैकल्पिक साझा पुस्तकालय के लिए एक पर्यावरण चर (आमतौर पर LD_PRELOAD) को इंगित करके डिफ़ॉल्ट पुस्तकालय कार्यों को ओवरराइड करने की क्षमता रखती हैं। इस तरह के सिस्टम पर, sudo द्वारा चलाए जा रहे प्रोग्राम को किसी अन्य प्रोग्राम को निष्पादित करने से रोकने के लिए sudo की नोस्टेक कार्यक्षमता का उपयोग किया जा सकता है। नोट, ... ...
कमांड के लिए नोएसेक सक्षम करने के लिए, NOEXECउपर्युक्त उपयोगकर्ता विनिर्देश अनुभाग में दस्तावेज के रूप में टैग का उपयोग करें । यहाँ वह उदाहरण फिर से दिया गया है:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
यह उपयोगकर्ता aaron को चलाने में सक्षम है /usr/bin/moreऔर /usr/bin/vinoexec सक्षम है। यह उन दो कमांड्स को अन्य कमांड्स (जैसे शेल) को निष्पादित करने से रोकेगा।
vim, उपयोगकर्ता किसी भी फ़ाइल को खोलने और लिखने के लिए स्वतंत्र है जिसे वह प्रसन्न करता है।