उबंटू और डेबियन सूडो विशेषाधिकार वाले उपयोगकर्ताओं के लिए $ HOME का प्रबंधन कैसे करते हैं?


39

मेरे पास एक बैश स्क्रिप्ट है myhome.shजिसमें केवल एक लाइन है:

echo $HOME

स्क्रिप्ट का स्वामी एक उपयोगकर्ता है:

$ ls -l myhome.sh
-rw-rw-r-- 1 user user <date> <time> myhome.sh

में उबंटू 16.04 और 17.10 मैं मिलता है:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

$ sudo bash myhome.sh
/home/user

में डेबियन बस्टर / परीक्षण मैं मिलता है:

$ echo $HOME
/home/user

$ sudo echo $HOME
/home/user

$ bash myhome.sh
/home/user

# WHY ?
$ sudo bash myhome.sh
/root

मुझे समझ में नहीं आता कि डेबियन में स्क्रिप्ट के अंदर क्यों, अगर इसे सूडो के साथ निष्पादित किया जाता है, तो मुझे हमेशा $HOME=/rootउबंटू में मिलता है $HOME=/home/user। क्या किसी को पता है कि उबंटू डेवलपर्स में क्या बदलाव आया है?

जवाबों:


68

डेबियन और उबंटू दोनों में एक /etc/sudoersफ़ाइल होती है जिसमें Defaults env_resetपर्यावरण चर होता है।

हालांकि, लक्ष्य उपयोगकर्ता के घर पर इसे रीसेट करने के लिए $ HOME को नहीं छूने env_resetसे व्यवहार बदल गया था ।

उबंटू ने sudoपिछले व्यवहार को बनाए रखने के लिए अपने संस्करण को पैच करने का फैसला किया : https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/760140

उबंटू में, लक्ष्य उपयोगकर्ता के लिए $ HOME पर्यावरण चर को रीसेट करने के लिए, किसी को Defaults always_set_homeया तो सेट करना होगा Defaults set_home( या जिस स्थिति में केवल sudo -sघर को अपडेट किया जाएगा) /etc/sudoers

उबंटू ट्रैकर के इस बग में सुडो में $ HOME सेट नहीं करने पर कुछ और तर्क दिए गए हैं: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1373495

देखें टिप्पणी # 4:

यदि घर को हटा दिया जाता है, तो जैसे विम, बैश, आदि, उपयोगकर्ता के ~ / .vimrc, ~ / .bashrc, आदि के बजाय /root/.vimrc, /root/.bashrc, आदि का उपयोग करेगा, जबकि यह एक बुरा विचार है। सुडो के माध्यम से एक्स क्लाइंट को चलाने के लिए, वे भी संभवत: कॉन्फ़िगरेशन फ़ाइलों के लिए गलत स्थानों में दिखेंगे, और एक मौका है कि X11 क्लाइंट X11 सर्वर से कनेक्ट करने में सक्षम नहीं हो सकते हैं यदि वे गलत .Xauthority फ़ाइल के उद्देश्य से हैं।

यह उबंटू डेवलपर्स द्वारा एक सचेत निर्णय है।

इस उत्तर में sudoers विकल्पों पर अधिक विवरण हैं जैसे always_set_home: https://unix.stackexchange.com/a/91572/284444


आपके प्रश्न में एक दूसरा मुद्दा है, sudo echo $HOMEजो अभी भी उपयोगकर्ता के घर को डेबियन में भी प्रदर्शित करता है।

ऐसा इसलिए होता है क्योंकि कमांड चलाने से $HOME पहले शेल का विस्तार होता है sudo

तो यह:

$ sudo echo $HOME

पहले शेल द्वारा विस्तारित किया गया है:

$ sudo echo /home/user

और फिर sudo echo /home/userरूट के रूप में निष्पादित ...

यह अंतर भी प्रदर्शित करना चाहिए:

$ sudo bash -c 'echo $HOME'
/root

या एक पूर्ण शैल प्राप्त करें और वहां पर्यावरण चर देखें:

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