मैं उपयोगकर्ताओं को उपयोग करने के लिए sudo -u $ उपयोगकर्ता कैसे प्राप्त करूं?


19

ऐसा लगता है sudoकि जब नीचे sudo -u $userजड़ का पर्यावरण अभी भी उपयोग किया जा रहा है कि निगलना। मैं sudoउपयोगकर्ताओं के पर्यावरण का उपयोग कैसे कर सकता हूं ? सभी उपयोगकर्ताओं के लिए एक विशेष नोट के रूप में, जिसका मैं इस पर उपयोग करूंगा, लॉगिन गोले हैं।


'पर्यावरण ’को परिभाषित कीजिए। # whoami => root # sudo -u user whoami => user
एलेक्स

1
@alex I फिगर sudo -u userका su userउपयोग करने के लिए अनुरूप है सु में आपको उपयोग करना हैsu - user
xenoterracide

लेकिन अगर उपयोगकर्ता के पास लॉगिन शेल नहीं है तो आप "उपयोगकर्ता के वातावरण" से क्या मतलब है?
थॉमस थेमेल

@ थोमस उपयोगकर्ता प्रोग्राम चला सकते हैं, भले ही वे शेल न कर सकें ... मेरा मानना ​​है कि -uसमूहों को भी अनदेखा करता है ... मैंने रूट से कुछ करने की कोशिश की (sudo -u down का उपयोग करके) और यह काम किया, जाहिर है यह उपयोगकर्ता के लिए नहीं था। .. इसलिए मुझे यह सुनिश्चित करना होगा कि मैं एक तरह से कमांड चला रहा हूं जिसमें सभी सीमाएं और पर्यावरणीय मुद्दे होंगे।
xenoterracide

जवाबों:


21

प्रयत्न sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

दुर्भाग्य से अगर वे एक खोल में काम नहीं करते हैं /etc/passwd:( लेकिन यह मुझे लगता है ...
xenoterracide

मैन पेज को देखते हुए, ऐसा लगता है कि वह है जो -Eपर्यावरण को संरक्षित करता है, अर्थात सभी पर्यावरण चर आदि हैं, हालांकि यह अभी भी सेट नहीं है PATHऔर LD_LIBRARY_PATHकॉल करने वाले उपयोगकर्ता के लिए है।
शहबाज

1
$SUDO_USERइस्तेमाल किया जा सकता है
राहुल पाटिल

4

man sudoersडेबियन एक और संभावना का उल्लेख करता है। निश्चित नहीं है कि आप किस तरह से चाहते हैं, लेकिन आपका प्रश्न ऐसा लगता है कि आप चाहते हैं कि env_resetविकल्प से /etc/sudoers- विपरीत मूल रूप से env_keepसूची है। उचित सेट करने के लिए HOMEआप उपयोग कर सकते हैं -Hविकल्प के लिए sudoसीधे फिर में या, sudoersके साथ always_set_homeविकल्प।

वैकल्पिक रूप से आप env_fileएक सटीक वातावरण निर्दिष्ट करने के लिए उपयोग कर सकते हैं जिसे आप पास करना चाहते हैं। हालाँकि, मुझे लगता है कि यदि आप env_*विकल्पों को देखते हैं man sudoers, तो यह सबसे अच्छा है , क्योंकि /etc/sudoersयह सभी को नियंत्रित करता है और यही वह मोड़ है।

यहां उस संदर्भ का हिस्सा है जिसमें मैं env_resetअपनी sudoersफ़ाइल के अंदर उपयोग करता हूं :

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

जब sudo ing पर्यावरण चर संरक्षित नहीं हैं।

मेरे मामले में, मैं यहाँ दस्तावेज़ का उपयोग करता हूँ ।

आप अपनी कार्रवाइयाँ जैसे कि my_script.shअपने यहाँ के अंदर डालते हैं :

su -u some_user <<EOF
./my_script.sh
EOF

आपको सीधे यहां वैरिएबल नहीं लगाना चाहिए, क्योंकि वे आपके वर्तमान उपयोगकर्ता से व्याख्यायित होंगे।

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

यदि $MY_VARस्क्रिप्ट चलाने वाले उपयोगकर्ता के लिए सेट नहीं है, तो इसे सेट नहीं किया जाएगा।

आपको चर को अपनी स्क्रिप्ट के अंदर बुलाया जाना चाहिए, या आपको उनके साथ बचना चाहिए \

उदाहरण के लिए।

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

इधर, $MY_VARहोगा some_userप्रासंगिक मूल्य।


अच्छा उत्तर। एक छोटा सा सुधार: यह होना चाहिए su - some_userके बजाय su -u some_user
रुडोल्फबाइकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.