एक अलग उपयोगकर्ता के रूप में बैश स्क्रिप्ट का हिस्सा चलाएँ


33

क्या स्क्रिप्ट को अलग (गैर-रूट) उपयोगकर्ता के रूप में चलाने का एक तरीका है? यदि यह मदद करता है, तो एक अलग उपयोगकर्ता के रूप में चलाया जाने वाला भाग स्क्रिप्ट के अंत में होता है

संपादित करें:
OS -> Ubuntu 9.04


जवाबों:


42

स्क्रिप्ट में sudo कमांड का उपयोग करें।

फार्म में:

sudo -u username command

sudo कमांड रन कमान उपयोगकर्ता के रूप में उपयोगकर्ता नाम

यदि स्क्रिप्ट को रूट के रूप में चलाया जा रहा है, तो मुझे नहीं लगता कि यह पासवर्ड के लिए संकेत देगा। अन्यथा, यह आलेख चर्चा करता है कि एक कमांड लाइन में पासवर्ड के साथ sudo का उपयोग कैसे करें ? , और इस लेख में चर्चा की गई है कि बिना पासवर्ड के sudo का उपयोग कैसे करें ?


5
यह अच्छा और आसान है, लेकिन क्या एक समय में एक के बजाय आदेशों के समूह के लिए ऐसा करने का एक तरीका है?
एंड्रयू

बैश स्क्रिप्ट लिखें, इसे निष्पादन योग्य chmod +x script.shsudo -u username script.sh
बनाएं

@ और मैं इस बारे में खुद सोच रहा था और निम्नलिखित ने मेरे लिए काम किया: sudo -u ic sh -c 'cmd1 && cmd2'
Karussell

iयदि आप उपयोगकर्ता के पर्यावरण को प्राप्त करना चाहते हैं तो विकल्प भी शामिल करें
neoDev

6

यह उत्तर अच्छा है, लेकिन सर्वरफॉल्ट सलाह थोड़ी खतरनाक है - किसी को भी रूट के रूप में कुछ भी चलाने की अनुमति देगा! इसलिए मैं यहां पोस्ट कर रहा हूं क्योंकि मैं टिप्पणी को प्रारूपित नहीं कर सकता।

मैं आपको अनुमति के रूप में ठीक वैसी ही अनुमति देने के लिए 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को स्क्रिप्ट की पंक्ति में पास करें।
जेम्स पोली

@Manish। हाँ। Sudoers फ़ाइल क्या कहती है, "इस होस्ट को इस उपयोक्ता को एक कूटशब्द दिये बिना
कमांड

6

# मैं = जैसे:

#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

10
क्या आप कुछ व्याख्यात्मक पाठ जोड़ सकते हैं?
कज़र्क

4

सोनारक्बी के लिए:

sudo -u sonar /usr/bin/sonar start

sonarउपयोगकर्ता का नाम कमांड चलाने के लिए कहां उपयोग किया जाता है/usr/bin/sonar start


2

इसके बारे में इतना निश्चित नहीं है, लेकिन यदि आप चाहते हैं कि केवल उस स्क्रिप्ट का अंत एक अलग उपयोगकर्ता के रूप में चलेगा, तो आप su someuserस्क्रिप्ट के अंत से पहले जोड़ सकते हैं ।

क्या मैं कुछ भूल रहा हूँ?

उम्मीद है की वो मदद करदे,

सादर


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

1

इस तरह, एक स्क्रिप्ट के अंत को अलग-अलग उपयोगकर्ता (रूट) द्वारा निष्पादित किया जाएगा। कृपया नोट करें $[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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.