हम su का उपयोग क्यों करते हैं - और केवल su का नहीं?


178

मुझे समझ नहीं आता कि रूट के रूप में लॉगिन करने के लिए क्यों su -पसंद किया suजाता है।

जवाबों:


240

su -उपयोगकर्ता को स्विच करने के बाद एक लॉगिन खोल देता है। एक लॉगिन शेल सबसे पर्यावरण चर को रीसेट करता है, एक स्वच्छ आधार प्रदान करता है।

su बस उपयोगकर्ता को स्विच करता है, पुराने उपयोगकर्ता के साथ लगभग समान वातावरण के साथ एक सामान्य शेल प्रदान करता है।

कल्पना कीजिए, आप एक सॉफ्टवेयर डेवलपर हैं जो सामान्य उपयोगकर्ता तक एक मशीन का उपयोग करते हैं और आपका अज्ञानी व्यवस्थापक आपको रूट एक्सेस नहीं देगा। आइए (उम्मीद से) उसे चकमा दें।

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

अब, आप अपने व्यवस्थापक से पूछते हैं कि आप catअपने होम फ़ोल्डर में डमी फ़ाइल क्यों नहीं कर सकते , यह सिर्फ काम नहीं करेगा!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

यदि आपका व्यवस्थापक इतना स्मार्ट या थोड़ा आलसी नहीं है, तो वह आपकी मेज पर आ सकता है और अपनी सुपर-उपयोगकर्ता शक्तियों के साथ प्रयास कर सकता है:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

वाह! धन्यवाद, सुपर एडमिन!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

वह, वह।

आपने शायद देखा कि दूषित $PATHचर रीसेट नहीं किया गया था। ऐसा नहीं होता, अगर एडमिन su -इसके बजाय मंगवाता ।


10
su --के रूप में ही है su
मिकेल

12
- एक झंडा है जो अधिकांश कार्यक्रमों की व्याख्या करता है "इसके बाद कुछ भी नहीं लिया जाना चाहिए"। एक पानी का छींटा के साथ शुरू होने वाली चीजों के लिए उपयोगी है।
डेविड मैकिन्टोश

2
एक umask000 सेट करने के लिए मत भूलना या यह काम नहीं करेगा।
लेकेनस्टाइन

10
एक के रूप में अच्छी तरह से सिर्फ suपाथ के अंदर एक फ़ाइल डाल सकता है । असली के व्यवहार की नकल करना इतना कठिन नहीं है su। सुपर-यूजर को वैसे भी लापरवाह किया गया है :-)
स्टीफन जिमेनेज़

10
su --जैसा है वैसा नहीं है su -: --एक गेटटॉप (एस) या (समान) विकल्प हैंडलर को आगे के विकल्पों के लिए कमांड लाइन को संसाधित करने से रोकने के लिए बताता है (उदाहरण के लिए उपयोगी अगर बाकी में फाइलनाम शामिल हैं जो एक '-' के साथ शुरू हो सकता है)। यानी, में "rm मैं - -f": -f तो के रूप में एक नियमित रूप से तर्क के रूप में व्यवहार किया जाता है, इसलिए यहाँ फ़ाइल का नाम करने के लिए rm -i, और नहीं एक additionnal के रूप में -fकरने का विकल्प rmआदेश। तो su --बस है suऔर नहीं su -! तो su --वैग द्वारा (मजाकिया और शिक्षाप्रद) उदाहरण givan के लिए असुरक्षित होगा। का उपयोग करें su -
ओलिवियर डुलैक

35

su -आपको पूरी तरह से रूट के रूप में लॉग करता है, जबकि suऐसा करता है तो आप रूट होने का नाटक कर रहे हैं।

इसका सबसे स्पष्ट उदाहरण है कि ~यदि आप उपयोग करते हैं तो रूट की होम डायरेक्टरी है su -, लेकिन यदि आप उपयोग करते हैं तो आपकी स्वयं की होम डाइरेक्टरी su

आपके सिस्टम के आधार पर, इसका अर्थ प्रांप्ट PATH, या इतिहास फ़ाइल में अंतर भी हो सकता है ।

इसलिए यदि आप एक प्रणाली का संचालन करने वाली टीम का हिस्सा हैं, और आपका सहयोगी आपको चलाने की आज्ञा देता है, तो आप जानते हैं कि यह उसी तरह काम करेगा यदि आप दोनों का उपयोग कर रहे हैं su -, लेकिन यदि आप दोनों का उपयोग कर रहे हैं su, तो आपके होने के कारण मतभेद हो सकते हैं विभिन्न शेल कॉन्फ़िगरेशन।

दूसरी ओर, यदि आप एक कमांड को रूट के रूप में चलाना चाहते हैं लेकिन अपने स्वयं के कॉन्फ़िगरेशन का उपयोग कर रहे हैं, तो शायद suआपके लिए बेहतर है।

इसके अलावा sudo, जो -sएक खोल को रूट के रूप में शुरू करने का विकल्प होता है, के बारे में मत भूलना । बेशक, इसके अलग-अलग नियम भी हैं, और वे इस बात पर निर्भर करते हैं कि आप किस वितरण का उपयोग कर रहे हैं।


1
जब मैं "su" करता हूं तो मुझे ~ और $ HOME दोनों का मूल्यांकन / रूट मिलता है। क्या वह व्यवहार जिसका वर्णन आप कुछ विशेष गोले या OS संस्करण या किसी चीज़ के लिए करते हैं? यह मेरी समझ है कि ~ कर्नेल द्वारा विस्तार किया जा सकता है। मुझे अपने (और रूट के) शेल के रूप में zsh मिला है।
जेसनवॉफ

आपका .bashrcया /etc/bashrcया /etc/profile.dस्क्रिप्ट की स्थापना कर रहे हैं PATH। देखने के लिए if [ $UID -eq 0 ]या ऐसा कुछ।
मिकेल

$USERउदाहरण के लिए अपरिवर्तित छोड़ दिया जाता है।
पेट्रफ

1
किस बारे में sudo su?
साइमन कुआंग

1
आपका उदाहरण मेरे लिए काम नहीं करता है। मैं एक ही निर्देशिका को किसी भी तरह से हल करता हूं।
डैनियल डब्ल्यू।

1

मैं su का उपयोग करता हूं - जब मैं एक निर्देशिका में एक नियमित उपयोगकर्ता के रूप में हूं, लेकिन रूट पर स्विच करना चाहता हूं और स्विच के बाद उसी निर्देशिका में रहना चाहता हूं। जब आप su का उपयोग करते हैं - यह उपयोगकर्ता को रूट करने के लिए स्विच करता है और आपको / root पर भी ले जाता है जो रूट होम डायरेक्टरी है।


या /जो कुछ भी रूट की होम डायरेक्टरी के रूप में परिभाषित किया गया है
जेफ स्कॉलर

-1

मुख्य अंतर यह है:

su - username शेल वातावरण सेट करता है जैसे कि यह निर्दिष्ट उपयोगकर्ता के रूप में एक साफ लॉगिन था, यह निर्दिष्ट उपयोगकर्ता पर्यावरण चर का उपयोग और उपयोग करता है,

su username केवल निर्दिष्ट उपयोगकर्ता के लिए वर्तमान परिवेश सेटिंग्स के साथ एक शेल शुरू होता है।

यदि उपयोगकर्ता नाम के साथ निर्दिष्ट नहीं है suऔर su -, रूट खाता डिफ़ॉल्ट के रूप में निहित है।

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