इसके साथ su
, आप एक और उपयोगकर्ता बन जाते हैं - मूल रूप से मूल, लेकिन संभावित रूप से दूसरा उपयोगकर्ता। यदि आप कहते हैं su -
, तो आपका वातावरण उस उपयोगकर्ता के लॉगिन वातावरण के साथ-साथ बदल जाता है, ताकि आप जो देख रहे हैं वह उस उपयोगकर्ता के रूप में लॉगिंग से अप्रभेद्य हो। ऐसा कोई तरीका नहीं है कि सिस्टम यह बता सके कि जब आप su
लॉग इन करते हैं तो उस उपयोगकर्ता के कार्यों से दूसरे उपयोगकर्ता को क्या होता है।
चीजें बहुत अलग हैं sudo
:
आदेश आप के माध्यम से चलाने sudo
पर अमल लक्ष्य उपयोगकर्ता के रूप में - डिफ़ॉल्ट रूप से जड़ है, लेकिन साथ अस्थिर -u
- लेकिन यह आदेशों आप इसे माध्यम से चलाने के लॉग करता है, उन्हें अपने उपयोगकर्ता नाम के साथ टैगिंग तो दोष बाद में सौंपा जा सकता है। :)
sudo
बहुत लचीला है। उदाहरण के लिए, आप दिए गए उपयोगकर्ता या उपयोगकर्ताओं के समूह को चलाने की आज्ञा दे सकते हैं। के साथ su
, यह सब या कुछ भी नहीं है।
यह सुविधा आमतौर पर भूमिकाओं को परिभाषित करने के लिए उपयोग की जाती है। उदाहरण के लिए, आप एक "बैकअप" समूह को चलाने की अनुमति दे सकते हैं dump
और tar
, जिनमें से प्रत्येक को सिस्टम डिस्क को ठीक से बैकअप लेने के लिए रूट एक्सेस की आवश्यकता होती है।
मैं यहां इसका उल्लेख करता हूं क्योंकि इसका मतलब है कि आप किसी को sudo
विशेषाधिकार sudo -s
या sudo bash
क्षमताओं के बिना दे सकते हैं । उनके पास केवल अनुमतियाँ हैं जो उन्हें अपना काम करने की आवश्यकता है, जबकि su
उनके पास पूरी प्रणाली का संचालन है। आपको इसके साथ सावधान रहना होगा, हालांकि: यदि आप किसी को कहने की क्षमता देते हैं sudo vi
, उदाहरण के लिए, वे बाहर से खोल सकते हैं vi
और प्रभावी रूप से उसी शक्ति के साथ हो सकते हैं sudo -s
।
क्योंकि यह sudoer के पासवर्ड को रूट पासवर्ड के बजाय लेता है, sudo
कई sudoers के बीच अनुमति को अलग करता है।
यह एक प्रशासनिक समस्या को हल करता है su
, जो यह है कि जब रूट पासवर्ड बदलता है, तो उन सभी को जो इसे उपयोग करने के लिए जानना su
था। sudo
सूडोर्स के पासवर्ड को स्वतंत्र रूप से बदलने की अनुमति देता है। वास्तव में, सिस्टम पर रूट उपयोगकर्ता के खाते को पासवर्ड से लॉक करना आम है, जिसमें sudo
सभी sysadmin कार्यों को करने के लिए बाध्य किया जाता है sudo
। कई विश्वसनीय sudoers के साथ एक बड़े संगठन में, इसका मतलब है कि जब एक sysadmins निकल जाता है, तो आपको रूट पासवर्ड को बदलने और उन प्रवेशकों को वितरित करने की आवश्यकता नहीं है जो बने रहते हैं।
के बीच मुख्य अंतर sudo bash
और sudo -s
वह यह है कि -s
कम है और आप कई तरीकों से अपनी उपयोगकर्ता के डिफ़ॉल्ट खोल में निष्पादित करने के लिए आदेशों पारित कर सकते हैं:
आप कह सकते हैं sudo -s some-command
जो some-command
आपके खोल के नीचे चलता है । यह मूल रूप से आशुलिपि है sudo $SHELL -c some-command
।
आप इसके बजाय शेल के मानक इनपुट के लिए कमांड पास कर सकते हैं, जैसे sudo -s < my-shell-script
। बार-बार टाइप करने की आवश्यकता को टालते हुए, आप एक कॉल पर कई कमांड भेजने के लिए इसे हेरेडोक के साथ उपयोग कर सकते हैं ।sudo
sudo
वे दोनों व्यवहार वैकल्पिक हैं। अधिक सामान्य रूप से, आप -s
अकेले देते हैं, इसलिए यह आपके उपयोगकर्ता के शेल को अंतःक्रियात्मक रूप से चलाता है। उस मोड में, यह इस बात से अलग sudo bash
है कि यह एक अलग शेल को चला सकता है bash
, क्योंकि यह पहली बार SHELL
पर्यावरण चर में दिखता है , और फिर यदि यह परेशान है, तो आपके उपयोगकर्ता के लॉगिन शेल सेटिंग में, आमतौर पर /etc/passwd
।
आपके द्वारा चलाए जाने वाला शेल sudo -s
आपके वर्तमान उपयोगकर्ता वातावरण को इनहेरिट करता है। यदि आप वास्तव में चाहते हैं कि एक स्वच्छ वातावरण है, जैसे आप लॉगिन के बाद प्राप्त करते हैं, तो आप इसके बजाय क्या चाहते हैं sudo -i
, अपेक्षाकृत हाल ही में इसके अतिरिक्त है sudo
। मोटे तौर पर बोलना है, sudo -i
जैसा sudo -s
कि su -
है su
: यह सभी लेकिन कुछ प्रमुख पर्यावरण चर को रीसेट करता है और आपको आपके उपयोगकर्ता के होम डायरेक्टरी में वापस भेजता है। यदि आप इसे मानक इनपुट के माध्यम से उस शेल के नीचे चलाने के लिए कमांड नहीं देते हैं sudo -i some-command
, या यह उस शेल को इंटरेक्टिव लॉगिन शेल के रूप में चलाएगा, तो आपके उपयोगकर्ता के शेल स्टार्टअप स्क्रिप्ट (जैसे .bash_profile
) फिर से रन हो जाएंगे ।
यह सब की sudo -i
तुलना में काफी अधिक सुरक्षित बनाता है sudo -s
। क्यों? क्योंकि अगर कोई आपके पर्यावरण को पहले संशोधित sudo -s
कर सकता है, तो वे अनपेक्षित आदेशों को निष्पादित करने का कारण बन सकते हैं। सबसे स्पष्ट मामला संशोधित हो रहा है SHELL
, लेकिन यह सीधे कम भी हो सकता है, जैसे कि PAGER
यदि आप man foo
नीचे बोलते हैं तो sudo -s
।
आप कह सकते हैं, "यदि वे संशोधित PAGER
कर सकते हैं PATH
, तो वे संशोधित कर सकते हैं , और फिर वे सिर्फ एक बुराई sudo
कार्यक्रम का विकल्प चुन सकते हैं ," लेकिन कोई पर्याप्त रूप से पागल /usr/bin/sudo /bin/bash
उस जाल से बचने के लिए कह सकता है । आप शायद इतने पागल नहीं हैं कि आप अन्य सभी अतिसंवेदनशील पर्यावरण चर में जाल से बचते हैं , हालांकि। क्या आपने EDITOR
कोई वीसीएस कमांड चलाने से पहले, उदाहरण के लिए जांचना भी याद रखा ? इस प्रकार sudo -i
।
क्योंकि sudo -i
आपकी कार्यशील निर्देशिका को आपके उपयोगकर्ता की होम निर्देशिका में भी बदल देता है, फिर भी आप sudo -s
उन परिस्थितियों के लिए उपयोग करना चाह सकते हैं जहाँ आप जानते हैं कि आप उसी निर्देशिका में बने रहना चाहते हैं cd
जब आप भाग रहे थे sudo
। यह अभी भी सुरक्षित है sudo -i
और cd
आप कहाँ थे, हालांकि वापस।
sudo su -
इस तरह से उपयोग करना पसंद करता हूं आपको रूट पासवर्ड की आवश्यकता नहीं है, और यह-
सुनिश्चित करता है कि होम डायरेक्टरी सही सेट है।