इसके साथ 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। बार-बार टाइप करने की आवश्यकता को टालते हुए, आप एक कॉल पर कई कमांड भेजने के लिए इसे हेरेडोक के साथ उपयोग कर सकते हैं ।sudosudo
वे दोनों व्यवहार वैकल्पिक हैं। अधिक सामान्य रूप से, आप -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 -इस तरह से उपयोग करना पसंद करता हूं आपको रूट पासवर्ड की आवश्यकता नहीं है, और यह-सुनिश्चित करता है कि होम डायरेक्टरी सही सेट है।