जवाबों:
स्क्रिप्ट में sudo कमांड का उपयोग करें।
फार्म में:
sudo -u username command
sudo कमांड रन कमान उपयोगकर्ता के रूप में उपयोगकर्ता नाम ।
यदि स्क्रिप्ट को रूट के रूप में चलाया जा रहा है, तो मुझे नहीं लगता कि यह पासवर्ड के लिए संकेत देगा। अन्यथा, यह आलेख चर्चा करता है कि एक कमांड लाइन में पासवर्ड के साथ sudo का उपयोग कैसे करें ? , और इस लेख में चर्चा की गई है कि बिना पासवर्ड के sudo का उपयोग कैसे करें ?
chmod +x script.sh
sudo -u username script.sh
i
यदि आप उपयोगकर्ता के पर्यावरण को प्राप्त करना चाहते हैं तो विकल्प भी शामिल करें
यह उत्तर अच्छा है, लेकिन सर्वरफॉल्ट सलाह थोड़ी खतरनाक है - किसी को भी रूट के रूप में कुछ भी चलाने की अनुमति देगा! इसलिए मैं यहां पोस्ट कर रहा हूं क्योंकि मैं टिप्पणी को प्रारूपित नहीं कर सकता।
मैं आपको अनुमति के रूप में ठीक वैसी ही अनुमति देने के लिए visudo का उपयोग करने की सलाह दूंगा जैसे आप कर सकते हैं। टाइप करें visudo
और एक पंक्ति जोड़ें जैसे:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
यदि आपको कई मेजबानों पर इसी चीज़ को चलाने की ज़रूरत है, तो आप इसे खोल सकते हैं:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
लेकिन मैं ** का उपयोग नहीं करेगा:
username ALL=(ALL) NOPASSWD: ALL
या उपयोगकर्ता नामनाम = सभी
Sudoer आदमी पेज रक्तमय विवरण के बहुत सारे है
username
उपयोगकर्ता नाम के साथ बदलें जो कमांड चलाने में सक्षम होना चाहिए)। यदि आप जिस निष्पादन योग्य को चलाना चाहते हैं, वह केवल एक विशेष उपयोगकर्ता द्वारा निष्पादित किया जा सकता है, तो यह ठीक भी है - बस उस उपयोगकर्ता नाम sudo -u username commandline
को स्क्रिप्ट की पंक्ति में पास करें।
# मैं = जैसे:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./run
1: root
2: nobody
3: root
इसके बारे में इतना निश्चित नहीं है, लेकिन यदि आप चाहते हैं कि केवल उस स्क्रिप्ट का अंत एक अलग उपयोगकर्ता के रूप में चलेगा, तो आप su someuser
स्क्रिप्ट के अंत से पहले जोड़ सकते हैं ।
क्या मैं कुछ भूल रहा हूँ?
उम्मीद है की वो मदद करदे,
सादर
इस तरह, एक स्क्रिप्ट के अंत को अलग-अलग उपयोगकर्ता (रूट) द्वारा निष्पादित किया जाएगा। कृपया नोट करें $[LINENO+2]
और exit $?
कॉल करें। स्क्रिप्ट के अंत को एक बार निष्पादित करने और sudo
कॉल के निकास कोड को संरक्षित करने के लिए आवश्यक हैं।
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1