उबंटू में $ HOME को नहीं बदलने के लिए sudo को कैसे सेट किया जाता है और इस व्यवहार को कैसे निष्क्रिय करना है?


39

Ubuntu 12.04 पर, जब मैं sudo -s$ HOME वैरिएबल नहीं बदला जाता है, तो यदि मेरा नियमित उपयोगकर्ता है regularuser, तो स्थिति इस प्रकार है:

$ cd
$ pwd
/home/regularuser
$ sudo -s
# cd
# pwd
/home/regularuser

मैंने बहुत समय पहले उबंटू को छोड़ दिया है, इसलिए मुझे यकीन नहीं हो रहा है, लेकिन मुझे लगता है कि यह डिफ़ॉल्ट व्यवहार है। तो, मेरे सवाल हैं:

Q1। यह कैसे किया जाता है? विन्यास कहाँ है?

Q2। मैं इसे कैसे निष्क्रिय करूं?

संपादित करें: उत्तर के लिए धन्यवाद, जिसने चीजों को थोड़ा स्पष्ट किया, लेकिन मुझे लगता है कि मुझे जिस उत्तर की तलाश है, उसे पाने के लिए मुझे कुछ प्रश्नों को जोड़ना होगा।

Q3। डेबियन में sudo -s, $ HOME वैरिएबल को बदलता है /root। मुझे उत्तरों से क्या मिलता है और man sudoशेल किसके साथ मिला sudo -sहै, क्या वह /etc/passwdसही में दिया गया है ?

Q4। हालांकि, उबंटू और डेबियन दोनों पर /etc/passwdरूट के लिए दिया गया शेल है /bin/bash। या तो सिस्टम में भी, मैं नहीं ढूँढ सकता जहाँ अंतर .profileया .bashrcफ़ाइलों में अंतर है, जहाँ तक $ HOME का संबंध है, ताकि sudo -sभिन्न का व्यवहार हो । इस पर कोई मदद?


आपने मेरे जवाब पर एक टिप्पणी में अपने स्वयं के प्रश्न का हिस्सा दिया, लेकिन मुझे लगा कि मैं यहां लिंक unix.stackexchange.com/questions/38175/… डालूंगा । मुझे लगता है कि क्यू 3 में आपका दावा है क्योंकि कुछ लोग अपनी प्रोफाइल और आरसी फाइलों को एक ही कार्य के लिए सेट करते हैं, भले ही वे लॉगिन शेल में हों या नहीं। मुझे लगता है कि यह बेतहाशा असंभव है sudoजो डेबियन और उबंटू के बीच अलग तरह से व्यवहार करता है।
msw

@msw जहां तक ​​डेबियन और उबंटू (12.04) के बीच का अंतर sudoहै, मुझे लगता है कि वास्तव में डिफ़ॉल्ट रूप से अंतर है। हालाँकि, मैं इस पर दांव नहीं लगाता, क्योंकि मैं एक ऐसे बॉक्स पर हूं, जिसे किसी और ने सेटअप किया है और काफी समय से चल रहा है। किसी भी मामले में, किसी को भी दिलचस्पी लेने के लिए, मुझे सुरक्षा मिलीbackexchange.com/questions/18369/… और बग्सलाउन्चैपडॉटनेट /ubuntu /+source/sudo/+bug/760140
alxs

जवाबों:


51

सूडो में कई संकलन-समय विन्यास विकल्प हैं। आप अपने संस्करण में सेटिंग्स को सूचीबद्ध कर सकते हैं sudo -V। डेबियन मट्ठा और उबंटू 12.04 में विन्यास के बीच एक अंतर यह है कि HOMEपर्यावरण चर उबंटू में संरक्षित है लेकिन डेबियन में नहीं; दोनों वितरण कुछ को छोड़कर सभी पर्यावरण चर मिटाते हैं जो स्पष्ट रूप से संरक्षित करने के लिए सुरक्षित रूप से चिह्नित हैं। इस प्रकार , डेबियन को मिटा दिया गया है, जबकि उबंटू पर sudo -sसंरक्षित HOMEहै, HOMEऔर sudoफिर इसे लक्ष्य उपयोगकर्ता की होम डायरेक्टरी में सेट करता है।

आप sudoersफ़ाइल में इस व्यवहार को ओवरराइड कर सकते हैं । फ़ाइल visudoको संपादित करने के लिए चलाएँ sudoers। कई प्रासंगिक विकल्प हैं:

  • env_keepनिर्धारित करता है कि कौन से पर्यावरण चर संरक्षित किए जाते हैं। Defaults env_keep += "HOME"कॉलर के HOMEपर्यावरण चर को बनाए रखने या Defaults env_keep -= "HOME"इसे मिटाने के लिए उपयोग करें (और इसे लक्ष्य उपयोगकर्ता की होम निर्देशिका द्वारा प्रतिस्थापित करें)।
  • env_resetनिर्धारित करता है कि पर्यावरण चर सभी पर रीसेट किए जाते हैं या नहीं। पर्यावरण चर को रीसेट करना अक्सर नियमों के लिए आवश्यक होता है जो एक विशिष्ट कमांड को चलाने की अनुमति देता है, लेकिन नियमों के लिए प्रत्यक्ष सुरक्षा लाभ नहीं होता है जो वैसे भी मनमाना आदेश चलाने की अनुमति देता है।
  • always_set_home, यदि सेट HOMEकिया गया है, तो यह env_resetअक्षम HOMEहोने या env_keepसूची में होने के कारण संरक्षित होने पर भी ओवरराइड होने का कारण बनता है । इस विकल्प का कोई प्रभाव नहीं है अगर HOMEवैसे भी संरक्षित नहीं है।
  • set_homeपसंद है always_set_home, लेकिन केवल तभी लागू होता है sudo -s, जब sudoस्पष्ट आदेश के साथ कॉल नहीं किया जाता है।

ये विकल्प किसी दिए गए स्रोत उपयोगकर्ता, किसी दिए गए लक्ष्य उपयोगकर्ता या दिए गए आदेश के लिए सेट किए जा सकते हैं; देखने के sudoersविवरण के लिए मैनुअल।

आप हमेशा विकल्प को पास करके HOMEकिसी दिए गए कॉल के लिए ओवरराइड कर सकते हैं ।sudo-H

शेल कभी भी मान को ओवरराइड नहीं करेगा HOME। (यह सेट होगा HOMEअगर यह परेशान था, लेकिन sudoहमेशा HOMEएक ही रास्ता या कोई अन्य सेट करता है ।)

यदि आप चलाते हैं sudo -i, तो sudoएक प्रारंभिक लॉगिन अनुकरण करता है। इसमें HOMEलक्ष्य उपयोगकर्ता की होम निर्देशिका में सेटिंग और एक लॉगिन शेल को शामिल करना शामिल है


17

इंटरेक्टिव लॉगिन रूट शेल प्राप्त करने के sudo -H -iबजाय उपयोग करें sudo -s:

sudo -H -i
cd
pwd -P  #  /private/var/root  (on Mac OS X 10.6.8)

से man sudo:

-H      The -H (HOME) option sets the HOME environment variable to
        the homedir of the target user (root by default) as
        specified in passwd(5).  By default, sudo does not modify
        HOME (see set_home and always_set_home in sudoers(5)).

-iतात्पर्य है -H
x- यूरी

5

यह sudo"लॉगिन शेल" और "गैर-लॉगिन शेल" के बीच के अंतर के साथ करने के लिए बहुत कुछ करना है। जल्दी ठीक है

$ sudo -i

जैसा कि देखा जा सकता है:

$ sudo -s
# id
uid=0(root) gid=0(root) groups=0(root)
# echo $HOME
/home/msw
# exit
$ sudo -i
# echo $HOME
/root
# pwd
/root

जैसा कि सूडो मैनुअल में उल्लेख किया गया है:

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


अतिरिक्त विवरण के लिए धन्यवाद, उन्होंने मेरे लिए चीजों को थोड़ा और स्पष्ट किया। मुझे लगता है कि मुझे गोले के बीच अंतर की जांच करनी होगी। इसे पढ़ने वाले किसी भी व्यक्ति के लिए, मेरे साथ एक ही स्थिति पर, इसे देखें: unix.stackexchange.com/questions/38175/…
alxs

1
नहीं, चाहे सूडो बदल जाए HOMEया नहीं, सब कुछ कैसे सूदो कॉन्फ़िगर किया गया है के साथ क्या करना है।
गिल्स एसओ- बुराई को रोकें '

@ गिल्स: तो, सुडो को कैसे कॉन्फ़िगर किया गया है? में /etc/sudoers, वहाँ Debian और Ubuntu के बीच कुछ भी नहीं अलग जहाँ तक $ HOME संबंध है।
अल्क्स

1
@alxs IIRC डेबियन और उबंटू में अलग-अलग संकलन-समय दोष हैं। आप उन्हें विकल्पों के साथ always_set_homeऔर set_homeमें ओवरराइड कर सकते हैं sudoers
गिल्स एसओ- बुराई को रोकें '

@ गिल्स: धन्यवाद। ठीक यही उत्तर मुझे तलाश है, दोनों पर कि ऐसा क्यों होता है और इसे कैसे वापस किया जाए। यदि आपको इसे पोस्ट करने में कोई आपत्ति नहीं है, तो मैं इसे उत्तर के रूप में स्वीकार करूंगा। मैं इसे स्वयं कर सकता था, लेकिन मैं इसका श्रेय नहीं लेना चाहता।
अल्क्स

2

रूट शेल प्राप्त करने का काफी लोकप्रिय तरीका भी उपयोग कर रहा है:

 $ sudo su - 
 # id
 uid=0(root) gid=0(root) groups=0(root)
 # pwd
 /root

मैं उपयोग करने के लिए उपयोग करता हूं sudo -i -H, लेकिन यह git से वैश्विक npm पैकेज स्थापित करने में विफल रहा। इसके साथ sudo su -काम करता है! धन्यवाद।
लॉरेंट

0

sudo -sक्रमशः उबंटू और डेबियन पर अलग व्यवहार से छुटकारा पाने के लिए , आप एक sudoआवरण (Q4 का उत्तर) का उपयोग कर सकते हैं :

sudos() {
   local PATH="$(getconf PATH)" root_homedir
   root_homedir="$(sudo -H sh -c 'printf "%s" "$HOME"')"
   sudo sh -c 'export HOME="$0"; exec sh -i' "$root_homedir"
   return 0
}

sudo -k
sudos
{
logname
whoami
id -un
id -ur
echo "PATH: $PATH"
}
exit
echo "PATH: $PATH"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.