क्या सूडो सु चलाने का कोई अच्छा कारण है?


78

उन रूटों पर रूट शेल लॉन्च करने के लिए जहां रूट अकाउंट डिसेबल है, आप इनमें से एक को चला सकते हैं:

  • sudo -i: एक इंटरेक्टिव लॉगिन शेल (रीड /root/.bashrcऔर /root/.profile) चलाएं
  • sudo -s: एक गैर-लॉगिन इंटरेक्टिव शेल (रीड्स /root/.bashrc) चलाएँ

उबंटू की दुनिया में, मैं अक्सर sudo suरूट शेल प्राप्त करने के लिए एक सुझाव के रूप में देखता हूं । जब कोई करेगा तो दो अलग-अलग कमांड क्यों चलाएगा? जहाँ तक मैं बता सकता हूँ, sudo -iके बराबर है sudo su -और sudo -sउसी के समान है sudo su

केवल अंतर प्रतीत होता है ( sudo -iबाईं ओर और sudo su -दाईं ओर की तुलना ):

'सूदो-आई' और 'सूदो सु -' की तुलना में मेल्ड का स्क्रीनशॉट

और तुलना sudo -s(बाएं) और sudo su(दाएं):

'सूदो -स' और 'सूदो सु' की तुलना में मेल्ड का स्क्रीनशॉट

मुख्य अंतर ( SUDO_fooवेरिएबल्स की अनदेखी LS_COLORS) और संस्करणों XDG_fooमें सिस्टम वेरिएबल लगते हैं sudo su

क्या ऐसे कोई मामले हैं, जहां अंतर असंतुष्टों का उपयोग करके वारंट करते हैं sudo su? क्या मैं लोगों को सुरक्षित रूप से बता सकता हूं (जैसा कि मेरे पास अक्सर होता है) कि दौड़ने का कोई मतलब नहीं है sudo suया मुझे कुछ याद नहीं है?


8
मैंने उन फैंसी सिस्टम को कभी नहीं समझा है, ubuntuजो उपयोगकर्ताओं को मानक से रोकते हैं su -। उन्होंने समस्या पैदा की और अब इसे सुलझाने के तरीके पर अंतहीन चर्चा हो रही है।
14

16
@jimmij क्या आपको रूट पासवर्ड पता होना चाहिए su -? क्या आपको नहीं लगता कि बहु-उपयोगकर्ता वातावरण में एक सुरक्षा छेद है, जहां एक से अधिक लोगों को रूट एक्सेस की आवश्यकता है?
एरथियल जूल

4
@Christopher समस्या उस उपयोगकर्ता में से नहीं है जिसके पास सिस्टम को हैक करने के लिए sudo विशेषाधिकार या रूट पासवर्ड है। समस्या पासवर्ड सुरक्षा के बारे में है। जब आप रूट पासवर्ड बदलते हैं, तो आपको उन सभी उपयोगकर्ताओं को बताने की आवश्यकता होती है, जिन्हें इसे जानने की आवश्यकता होती है, जो मुश्किल हो सकता है। सुडो के साथ, आपको यह कठिनाई नहीं है।
Huygens

4
उपकरण क्या है?
जोश द गीक

5
@ जिमीज कैसे उबंटू के उपयोग को रोकता है su -? हां, किसी को रूट पासवर्ड सेट करना होगा, लेकिन यह तुच्छ है।
फूल

जवाबों:


62

जैसा कि आपने अपने प्रश्न में कहा है, मुख्य अंतर पर्यावरण का है।

sudo su - बनाम sudo -i

इसके मामले में sudo su -, एक लॉगिन शेल है, इसलिए /etc/profile, .profileऔर .bashrcनिष्पादित किया जाता है और आप रूट के वातावरण के साथ खुद को रूट के होम डायरेक्टरी में पाएंगे।

sudo -iलगभग वैसा ही है जैसा sudo su -कि -i(आरंभिक लॉगिन का अनुकरण) विकल्प लक्ष्य उपयोगकर्ता के पासवर्ड डेटाबेस प्रविष्टि द्वारा निर्दिष्ट शेल को एक लॉगिन शेल के रूप में चलाता है। इसका मतलब यह है कि लॉगिन-विशिष्ट संसाधन फ़ाइलें जैसे कि .profile, .bashrcया .loginशेल द्वारा पढ़ा और निष्पादित किया जाएगा।

sudo su बनाम sudo -s

sudo susudoकमांड के साथ कॉल करता है su। बैश को इंटरेक्टिव नॉन-लॉगइन शेल कहा जाता है। तो bashकेवल निष्पादित करता है .bashrc। आप देख सकते हैं कि रूट करने के बाद आप अभी भी उसी निर्देशिका में हैं:

user@host:~$ sudo su
root@host:/home/user#

sudo -s$SHELLचर को पढ़ता है और सामग्री को निष्पादित करता है। यदि $SHELLइसमें /bin/bashइनवोक होता है sudo /bin/bash, जिसका अर्थ है कि /bin/bashगैर-लॉगिन शेल के रूप में शुरू किया गया है, इसलिए सभी डॉट-फ़ाइलों को निष्पादित नहीं किया जाता है, लेकिन bashस्वयं पढ़ता है। bashrcकॉलिंग उपयोगकर्ता की। आपका वातावरण वैसा ही रहता है। तुम्हारा घर जड़ घर नहीं होगा। तो आप रूट हैं, लेकिन कॉलिंग उपयोगकर्ता के वातावरण में।

निष्कर्ष

-iध्वज को जोड़ा गया है sudoमें 2004 , के लिए एक समान कार्य प्रदान करने के लिए sudo su -है, तो sudo su -के लिए टेम्पलेट था sudo -iऔर यह की तरह काम करने के लिए होती। मुझे लगता है कि यह वास्तव में कोई फर्क नहीं पड़ता जो आप उपयोग करते हैं, जब तक कि पर्यावरण महत्वपूर्ण नहीं है।

इसके अलावा

यहाँ उल्लेख किया जाना चाहिए कि एक मूल बिंदु यह है कि उच्च विशेषाधिकार के साथ sudoकेवल एक ही आदेश को चलाने के लिए डिज़ाइन किया गया था और फिर उन विशेषाधिकारों को मूल लोगों को छोड़ दें। यह वास्तव में उपयोगकर्ता को स्विच करने और रूट शेल खोलने के लिए कभी नहीं था । समय के sudoसाथ, इस तरह के तंत्र के साथ विस्तार किया गया था, क्योंकि लोग इस बात से नाराज थे कि sudoहर आदेश के सामने क्यों उपयोग किया जाए।

अतः अर्थ का sudoदुरुपयोग किया गया। sudoउपयोगकर्ता को विशेषाधिकारों के उपयोग को कम करने के लिए प्रोत्साहित करने के लिए था।

अब हमारे पास जो है, sudoवह अधिक से अधिक लोकप्रिय हो गया है। यह लगभग हर प्रसिद्ध लिनक्स वितरण में एकीकृत है। किसी अन्य उपयोगकर्ता खाते पर स्विच करने का मूल उपकरण है su। एक पुराने स्कूल के लिए * निक्स वयोवृद्ध ऐसी चीज की sudoजरूरत नहीं लग सकती है। यह जटिलता को जोड़ता है और उन तंत्रों के बारे में अधिक संभावना रखता है जिन्हें हम माइक्रोसॉफ़्ट ओएस-परिवार से जानते हैं, और इस प्रकार * निक्स सिस्टम की सादगी के दर्शन के विपरीत है।

मैं वास्तव में एक अनुभवी नहीं हूं, लेकिन मेरी राय में भी sudoहमेशा मेरे पक्ष में एक कांटा था, जब से पेश किया गया था और मैंने हमेशा इसके उपयोग के चारों ओर काम किया sudo, अगर यह संभव था। मैं उपयोग करने के लिए सबसे अधिक अनिच्छुक हूं sudo। मेरे सभी सिस्टम पर, रूट खाता सक्षम है। लेकिन चीजें बदल जाती हैं, शायद समय आ जाएगा, जब suपदावनत किया जाएगा और पूरी तरह से sudoबदल suजाएगा।

इसलिए मुझे लगता है, यह सबसे अच्छा उपयोग करने के लिए किया जाएगा sudoके आंतरिक तंत्र ( -s, -iबजाय इस तरह के रूप में एक पुराने उपकरण पर भरोसा करने की) su


4
आह, तो 2004 से पहले वास्तव में sudo suतब चलने का एक कारण था ? उस समय मैं सुडो और सक्रिय रूट खातों के बिना डिस्ट्रो का उपयोग कर रहा था ताकि मुझे पता न चले। वह उबंटू दुनिया में सुडो सु मेम के प्रचलन की व्याख्या कर सकता है।
terdon

8
मुझे इसके बारे में sudo -iया उससे sudo -sपहले कभी नहीं पता था - मैं 1991 से विभिन्न प्रकार के यूनिक्स चला रहा हूं और मेरे लिए sudo su -इस बिंदु पर सिर्फ एक अभिन्न आदत है।
शराबी

2
क्या sudo -sतब भी ऐसा ही है sudo $SHELL?
सैमुअल एडविन वार्ड

3
(@Chaos से सहमत) उपयोग करने के कारण sudo su -1 हैं) कि यह काम करता है और आपको ठीक-ठीक पता है कि यह क्या करता है, और 2) जिसे आपको दूसरा विकल्प याद नहीं है sudo(जब आप पहले से जानते हैं su -) और 3) आप डॉन ' t को यह याद रखना होगा कि sudoआप इस समय किस संस्करण के साथ काम कर रहे हैं। याद रखें कि जब आप पहले से ही ठीक काम करते हैं तो तुर्विया का एक और टुकड़ा क्यों याद करते हैं? क्या कोई ऐसी चीज है जो su -iलॉग एंट्री से बचने के अलावा बेहतर है? मैं sudo su -उस के बारे में चिंता करने के लिए पर्याप्त उपयोग नहीं करते ।
jrw32982

3
मैं सिर्फ अद्यतन देखा, बहुत अच्छा! रिकॉर्ड के लिए, मुझे बताएं कि मैंने भी सिस्टम पर अपने * निक्स दांतों को काट दिया है, sudoजिनका उपयोग नहीं किया गया है su। यह दो का संयोजन है जो मुझे परेशान करता है।
terdon

16

सीधे अपने प्रश्न का उत्तर देने के लिए: नहीं, ऐसा करने का कोई अच्छा कारण नहीं है। इसके अलावा, sudo su दो लॉग एंट्रीज का निर्माण करता है जब एक पर्याप्त होगा।

मैंने कई लोगों को ऐसा करते देखा है, और जब मैं पूछता हूं कि वे बस क्यों नहीं चलाते हैं sudo -s, तो इसका जवाब सिर्फ इतना है कि वे -sसूडो को ध्वज के बारे में नहीं जानते हैं , और आमतौर पर मैं इसे इंगित करने के बाद स्विच करता हूं।

हालाँकि, आपकी सूची में sudo -sऔर sudo -i, मैं एक और विकल्प जोड़ना चाहूंगा sudo -sE, जो एक प्रतिस्थापन के लिए है su -msudo -sEघर निर्देशिका सहित अपने पर्यावरण को संरक्षित करता है। यदि आपके घर की निर्देशिका असुरक्षित है (NFS पर) तो इसके जोखिम हैं। लेकिन ऐसे वातावरण में जहां कई लोग रूट का उपयोग करते हैं, यह आपको रूट .bashrcफाइल की सामग्री पर सहमत होने से बचाता है । .bashrcरूट के लिए मेरी कई विशेषज्ञताएं हैं, इसलिए मुझे रूट के समान वातावरण नहीं मिलता है, लेकिन कम से कम मुझे बिल्कुल वैसा ही वातावरण मिलता है जैसा मैं चाहता हूं।


4
यदि यह आपके वातावरण को संरक्षित करता है, तो $HOMEइसका मतलब है कि होम फ़ोल्डर के तहत बनाई गई सभी नई फाइलें रूट के स्वामित्व में हैं, आपके द्वारा नहीं। अनुमति त्रुटियों का निदान करने के लिए मेरे पास कई कारण हैं।
एरिस

sudo -sEऔर फिर CentOS 7, bash 4.2 पर echo $HOMEदेता है /root-sEजैसा कि आपने बताया होम डाइरेक्टरी को संरक्षित करने के लिए प्रकट नहीं होता है।
jeremysprofile
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.