"Su", "sudo -s", "sudo -i", "sudo su" के बीच क्या अंतर हैं?


148

मैंने पहले से ही इसे मैनुअल से पढ़ा है लेकिन मुझे अंतर नहीं दिख रहा है।

su - यूजर आईडी बदलें या सुपरयूजर बनें

sudo -s [command]

-s(शेल) विकल्प खोल शेल वातावरण चर द्वारा निर्दिष्ट सेट होने पर इससे या खोल पासवर्ड के रूप में विनिर्दिष्ट चलाता है (5)। यदि कोई आदेश निर्दिष्ट किया जाता है, तो इसे निष्पादन के लिए शेल में दिया जाता है। अन्यथा, एक इंटरैक्टिव शेल निष्पादित किया जाता है।

sudo -i मैनुअल में विवरण गायब


7
इसके अलावा, su userअविश्वासित गोले से प्रवेश करने के लिए उपयोग न करें , लेकिन su - user। देखें unix.stackexchange.com/q/7013/8250
Lekensteyn

@Lekensteyn वाह, बढ़िया उदाहरण। LOL के लिए thx :)
törzsmókus

1
हमेशा पुरानी आज्ञा को याद रखें: आप व्यर्थ में जड़ के नाम का दावा नहीं करेंगे!
törzsmókus

sudo -iबुरा नहीं कह रहा है, लेकिन आप निश्चित रूप से इसका इस्तेमाल कर सकते हैं *** बातें
Kolob Canyon

जवाबों:


118

इन आदेशों के बीच मुख्य अंतर उस तरह से है जैसे वे अपने कार्यों तक पहुंच को प्रतिबंधित करते हैं।

su (जिसका अर्थ है "स्थानापन्न उपयोगकर्ता" या "स्विच उपयोगकर्ता") - ठीक यही करता है, यह लक्ष्य उपयोगकर्ता के विशेषाधिकारों के साथ एक और शेल उदाहरण शुरू करता है। यह सुनिश्चित करने के लिए कि आपके पास ऐसा करने का अधिकार है, यह आपसे लक्ष्य उपयोगकर्ता का पासवर्ड मांगता है । तो, रूट बनने के लिए, आपको रूट पासवर्ड जानना होगा। यदि आपकी मशीन पर कई उपयोगकर्ता हैं जिन्हें कमांड को रूट के रूप में चलाने की आवश्यकता है, तो उन्हें रूट पासवर्ड जानने की आवश्यकता है - ध्यान दें कि यह एक ही पासवर्ड होगा। यदि आपको उपयोगकर्ताओं में से किसी एक से व्यवस्थापक अनुमतियों को रद्द करने की आवश्यकता है, तो आपको रूट पासवर्ड बदलने और इसे केवल उन लोगों को बताने की आवश्यकता है, जिन्हें एक्सेस - गड़बड़ रखने की आवश्यकता है।

sudo (हम्म ... महामारी क्या है? सुपर-यूजर-डीओ?) पूरी तरह से अलग है। यह एक कॉन्फ़िगर फ़ाइल (/ etc / sudoers) का उपयोग करता है, जो यह बताता है कि उपयोगकर्ताओं के पास विशिष्ट कार्यों के अधिकार हैं (रूट, आदि के रूप में कमांड चलाएँ), जब इसे आमंत्रित किया जाता है, तो यह उस उपयोगकर्ता का पासवर्ड मांगता है जिसने इसे शुरू किया है - व्यक्ति को लॉगिन पर सुनिश्चित करने के लिए टर्मिनल वास्तव में वही "जो" है जो सूचीबद्ध है /etc/sudoers। किसी व्यक्ति से व्यवस्थापक विशेषाधिकारों को रद्द करने के लिए, आपको बस कॉन्फ़िग फ़ाइल को संपादित करने की आवश्यकता है (या उस समूह से उपयोगकर्ता को हटा दें जो उस कॉन्फ़िगरेशन में सूचीबद्ध है)। इसके परिणामस्वरूप विशेषाधिकारों का बहुत साफ-सुथरा प्रबंधन होता है।

इसके परिणामस्वरूप, कई डेबियन-आधारित सिस्टम में rootउपयोगकर्ता के पास कोई पासवर्ड सेट नहीं है - यानी सीधे रूट के रूप में लॉगिन करना संभव नहीं है।

इसके अलावा, /etc/sudoersकुछ अतिरिक्त विकल्पों को निर्दिष्ट करने की अनुमति देता है - यानी उपयोगकर्ता एक्स केवल प्रोग्राम वाई आदि को चलाने में सक्षम है।

अक्सर उपयोग किया जाने वाला sudo suसंयोजन निम्नानुसार काम करता है: पहले sudoआपसे आपका पासवर्ड मांगता है , और, यदि आपको ऐसा करने की अनुमति है, तो अगले कमांड ( su) को एक सुपर-उपयोगकर्ता के रूप में आमंत्रित करता है । क्योंकि suद्वारा लागू किया गया है root, इसलिए आपको लक्ष्य उपयोगकर्ता का पासवर्ड दर्ज करने की आवश्यकता नहीं है। इसलिए, sudo suयदि आप /etc/sudoersफ़ाइल द्वारा सुपर-उपयोगकर्ता एक्सेस की अनुमति देते हैं, तो आप किसी अन्य उपयोगकर्ता (रूट सहित) के रूप में एक शेल खोल सकते हैं ।


2
मैंने कभी भी su"स्विच उपयोगकर्ता" के रूप में नहीं देखा है , लेकिन हमेशा सुपरसुसर के रूप में; दूसरे के उपयोगकर्ता नाम के बिना डिफ़ॉल्ट व्यवहार (हालांकि यह समझ में आता है)। से विकिपीडिया : "सु आदेश, यह भी करने के लिए सुपर उपयोगकर्ता के रूप में संदर्भित [1] के रूप में 1974 के शुरू के रूप में, यह भी कहा गया है" विकल्प के उपयोगकर्ता "," हंसोड़ उपयोगकर्ता "या" सेट उपयोगकर्ता "क्योंकि यह वर्तमान से संबंधित खाते को बदलने की अनुमति देता है टर्मिनल (खिड़की)
डॉम्ब जिंबोब

5
@dr jimbob: आप सही कह रहे हैं, लेकिन मुझे पता है कि "स्विच उपयोगकर्ता" थोड़े बेहतर तरीके से वर्णन करता है कि यह क्या करता है - हालांकि ऐतिहासिक रूप से यह "सुपर उपयोगकर्ता" के लिए खड़ा है। मुझे यह जानकर भी प्रसन्नता हुई कि विकिपीडिया लेख मेरे उत्तर से बहुत मिलता-जुलता है - मैंने इससे पहले कभी लेख नहीं देखा था :)
सर्गेई

11
"सु" का आधिकारिक अर्थ "स्थानापन्न उपयोगकर्ता" है। देखें: "आदमी सु"।
एंजेल ओ स्फीयर

1
@ AngelO'Sphere: दिलचस्प बात यह है कि उबंटू के मैनपेज में "स्थानापन्न" का उल्लेख बिल्कुल नहीं है। Gnu.org ( gnu.org/software/coreutils/manual/html_node/su-invocation.html ) का मेनपेज वास्तव में कहता है "su: स्थानापन्न उपयोगकर्ता और समूह ID के साथ एक कमांड चलाएँ"। मुझे लगता है कि gnu.org एक विहित स्रोत है :)
सर्जेई

1
किस बारे में sudo su?
कज़ वोल्फ

59

sudoआपको रूट विशेषाधिकार के साथ अपने स्वयं के उपयोगकर्ता खाते में कमांड चलाने देता है। suआपको उपयोगकर्ता को स्विच करने देता है ताकि आप वास्तव में रूट के रूप में लॉग इन हों।

sudo -sरूट विशेषाधिकारों के साथ एक शेल चलाता है। sudo -iउपयोगकर्ता के वातावरण को भी अधिग्रहित करता है।

के बीच अंतर को देखने के लिए suऔर sudo -s, कर cd ~और फिर pwdउनमें से प्रत्येक के बाद। पहले मामले में, आप रूट के होम डायरेक्टरी में होंगे, क्योंकि आप रूट हैं। दूसरे मामले में, आप अपने स्वयं के होम डायरेक्टरी में रहेंगे, क्योंकि आप स्वयं अपने विशेषाधिकारों के साथ हैं।

यहां इस सटीक प्रश्न की अधिक चर्चा है


20
"आप स्वयं मूल अधिकारों के साथ हैं" वास्तव में क्या हो रहा है :) वास्तव में, "स्वयं को मूल विशेषाधिकारों के साथ" होना संभव नहीं है - या तो आप जड़ हैं या आप स्वयं हैं। टाइप करने की कोशिश Whoami दोनों ही मामलों में। तथ्य यह है कि cd ~परिणाम अलग हैं sudo -s का परिणाम $ HOME पर्यावरण चर नहीं है।
सर्गेई

1
@Sergey, whoami यह कहते हैं कि 'मूल' हैं क्योंकि आप 'whoami' cmd चला रहे हैं जैसे कि आपने इसे sudoed किया है, इसलिए अस्थायी रूप से (उस आदेश की अवधि के लिए) आप रूट उपयोगकर्ता प्रतीत होते हैं, लेकिन आप अभी भी पूर्ण नहीं हो सकते हैं sudoers फ़ाइल के अनुसार रूट एक्सेस।
ऑक्टोपस

1
@ ऑक्टोपस: मैं जो कहना चाह रहा था, वह यह है कि यूनिक्स में, एक प्रक्रिया में केवल एक यूआईडी हो सकता है, और यह कि यूआईडी प्रक्रिया की अनुमति निर्धारित करता है। आप "अपने आप को रूट विशेषाधिकारों के साथ" नहीं हो सकते, एक प्रोग्राम या तो आपके यूआईडी के साथ या रूट के यूआईडी (0) के साथ चलता है।
सर्गेई

5
"सूडोर्स फाइल के अनुसार आपके पास अभी भी पूर्ण रूट एक्सेस नहीं हो सकता है" के बारे में: sudoersफ़ाइल नियंत्रण जो किसी अन्य उपयोगकर्ता के रूप में कमांड को चला सकता है, लेकिन कमांड निष्पादित होने से पहले ऐसा होता है। हालाँकि, एक बार जब आप एक प्रक्रिया शुरू करने की अनुमति देते हैं, तो कहते हैं, रूट - रनिंग प्रक्रिया में रूट की UID है और सिस्टम के लिए पूर्ण पहुंच है, इसे प्रतिबंधित करने के लिए sudo के लिए कोई रास्ता नहीं है। फिर, आप हमेशा खुद या जड़ होते हैं, कोई "आधा-एन-आधा" नहीं होता है। इसलिए, यदि sudoersफ़ाइल आपको शेल को रूट के रूप में चलाने की अनुमति देती है - उस शेल में अनुमतियाँ "सामान्य" रूट शेल से अप्रभेद्य होगी।
सर्गेई

36

यह उत्तर मेरे प्रश्न का एक उत्तर है , इस प्रश्न के एक दोहे पर , यहाँ पर विहित उत्तर पर रखा गया है ताकि लोग इसे खोज सकें!

के बीच प्रमुख अंतर sudo -iऔर sudo -sहै:

  • sudo -iआपको मूल वातावरण देता है, अर्थात आपकी ~/.bashrcउपेक्षा की जाती है।
  • sudo -sआपको उपयोगकर्ता का वातावरण देता है, इसलिए आपका ~/.bashrcसम्मान किया जाता है।

यहाँ एक उदाहरण है, आप देख सकते हैं कि मेरे पास lslमेरी ~/.bin/निर्देशिका में एक आवेदन है जो कि सुलभ है, sudo -sलेकिन इसके साथ सुलभ नहीं है sudo -i। यह भी ध्यान दें कि बैश तुरंत बदल जाएगा, sudo -iलेकिन इसके साथ नहीं sudo -s:

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

हालाँकि sudo -s, आपको उस वातावरण को देने के लिए सुविधाजनक है जिससे आप परिचित हैं, मैंsudo -i दो कारणों से उपयोग करने की सलाह देता हूं :

  1. दृश्य याद दिलाता है कि आप एक 'मूल' सत्र में हैं।
  2. मूल वातावरण में मैलवेयर से जहर होने की संभावना बहुत कम होती है, जैसे कि एक बदमाश लाइन में .bashrc

मैंने देखा कि sudo -s doesnt प्रक्रिया / etc / प्रोफ़ाइल, या कुछ भी जो मुझे /etc/profile.d/ में है लगता है .. क्यों?
मेक्टेक्ट

@dotancohen - क्या मतलब है कि आप sudo -sएक पर्यावरण प्रदान करता है जो एक उपयोगकर्ता से परिचित है?
प्रेरित

@dotancohen - कमांड sudo -s पहले से ही दृश्य क्यू प्रदान करता है इसलिए मुझे लगता है कि क्यों sudo -i एक बेहतर विकल्प है।
प्रेरित

9

su उपयोगकर्ता "रूट" का पासवर्ड मांगता है।

sudoअपने स्वयं के पासवर्ड के लिए पूछता है (और यह भी जांचता है कि क्या आपको कमांड को रूट के रूप में चलाने की अनुमति है, जिसे /etc/sudoersडिफ़ॉल्ट रूप से - "व्यवस्थापक" या "sudo" समूहों से संबंधित सभी उपयोगकर्ता खातों को sudo का उपयोग करने की अनुमति है)।

sudo -sएक शेल को रूट के रूप में लॉन्च करता है, लेकिन आपकी कार्यशील निर्देशिका को परिवर्तित नहीं करता है। sudo -iरूट खाते में एक लॉगिन का अनुकरण करता है: आपकी कार्यशील निर्देशिका होगी /root, और रूट .profileआदि को लॉगिन के रूप में खट्टा किया जाएगा।


1
इस सवाल का जवाब और अधिक संपूर्ण बनाने के लिए: sudo -sके लगभग बराबर है su($ HOME अलग है) और sudo -iके बराबर हैsu -
DJCrashdummy

@DJCashashdummy - आप लगभग बराबर क्यों कहते हैं? क्या अंतर है?
प्रेरित

2

उबंटू या एक संबंधित प्रणाली में, मैं suपारंपरिक, सुपर-उपयोगकर्ता अर्थों के लिए बहुत उपयोग नहीं करता हूं । sudoउस मामले को बहुत बेहतर तरीके से हैंडल करता है। हालाँकि, suवन-ऑफ़ स्थितियों में एक और उपयोगकर्ता बनने के लिए बहुत अच्छा है जहाँ सुडोल को कॉन्फ़िगर करना मूर्खतापूर्ण होगा।

उदाहरण के लिए, यदि मैं अपने सिस्टम को लाइव सीडी / यूएसबी से रिपेयर कर रहा हूं, तो मैं अक्सर अपनी हार्ड ड्राइव और अन्य आवश्यक सामान और chrootसिस्टम को माउंट करूंगा । ऐसे मामले में, मेरा पहला आदेश आम तौर पर है:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

इस तरह, मैं रूट के रूप में नहीं, बल्कि अपने सामान्य उपयोगकर्ता के रूप में काम कर रहा हूं, और फिर मैं sudoउपयुक्त के रूप में उपयोग करता हूं ।


0
  • su रूट पासवर्ड पूछता है, रूट हो जाता है, एक इंटरैक्टिव गैर लॉगिन खोल खोलता है।
  • su - रूट पासवर्ड पूछता है, रूट हो जाता है, एक इंटरैक्टिव लॉगिन खोल खोलता है।

  • sudo -s अपने पासवर्ड पूछता है, जड़ हो जाता है, एक इंटरैक्टिव गैर लॉगिन खोल खोलता है।
  • sudo -i अपने पासवर्ड पूछता है, रूट हो जाता है, एक इंटरैक्टिव लॉगिन खोल खोलता है।

सबसे अच्छा अभ्यास इन दोनों का उपयोग करना है।


  • sudo suआपका पासवर्ड पूछता है, एक सेकंड के लिए रूट हो जाता है और suroot` के रूप में चलता है।
  • sudo su -आपका पासवर्ड पूछता है, एक सेकंड के लिए रूट हो जाता है और su -रूट के रूप में चलता है।

तो इस मामले में आप suउपयोग कर रहे हैं sudoऔर आपको रूट का वास्तविक पासवर्ड पता नहीं है। परिणाम के रूप में suऔर कर रहे हैं su -


लॉगिन और नॉन लॉगिन शेल में क्या अंतर है?
पायलट 6

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.