2012-01-20 11 views
7

यहां मेरी इनिट स्क्रिप्ट है जो मेरे उबंटू वर्कस्टेशन में है। मुझे रूट के मुकाबले किसी अन्य उपयोगकर्ता के रूप में कमांड चलाने की ज़रूरत है, लेकिन मैं अपने सिर को यह नहीं समझ सकता कि इसे कैसे किया जाना चाहिए। न तो sudo -u या su newuser काम करने लगता है।उपयोगकर्ता को एक init स्क्रिप्ट में स्विच करें?

स्क्रिप्ट:

su -l $MUSER -c "myCommand args..." 

अद्यतन:

respawn 
console none 

start on runlevel [2345] 
stop on runlevel [06] 

script 
    su "anotherUser" -c ./myCommand 
end script 
+0

इस प्रकार के कमांड का उपयोग करें "su -c 'आपके कमांड' different_user" – vikky

+0

जैसा कि @ हेनरिक ने नीचे दिए गए उत्तर में बताया है, अपस्टार्ट स्क्रिप्ट ['setuid' कॉन्फ़िगरेशन stanza] का उपयोग कर सकते हैं (http://upstart.ubuntu.com/cookbook/# setuid) उपयोगकर्ता को सेट करने के लिए। – clayzermk1

उत्तर

18

मैं इस का उपयोग चूंकि इस जवाब में रुचि है, मैं जिस तरह से मैं इसे यहाँ का उपयोग समझाने।

हम सामान्य लिनक्स उपयोगकर्ताओं के रूप में सर्वर चलाते हैं, रूट नहीं।

सेवा, ग्राहक, मंच

इस तरह हम एक linux ओएस में कई ग्राहकों के लिए कई सेवाओं चला सकते हैं: उपयोगकर्ता नाम तीन भागों में शामिल है।

उदाहरण: foo_bar_p सेवा ग्राहक "बार" और "पी" के "foo" का मतलब है उत्पादन

यहाँ init स्क्रिप्ट का हिस्सा है। init स्क्रिप्ट रूट के रूप में या foo_bar_p उपयोगकर्ता के रूप में क्रियान्वित किया जा सकता:

# /etc/init.d/foo_bar_p-celeryd 
# scriptname contains linux username 
SCRIPT_NAME=`basename "$0"` 
SYSTEM=${SCRIPT_NAME%*-celeryd} 

U=`id -nu` 

if [ ! $U == $SYSTEM ]; then 
    if [ $U == "root" ]; then 
     # use "-l (login)" to delete the environment variables of the calling shell. 
     exec su -l $SYSTEM -c "$0 [email protected]" 
    fi 
    echo "Script must be run from $SYSTEM or root. You are '$U'" 
    rc_exit 1 
fi 

# OK, now I am foo_bar_p 
cd 
. $HOME/.bashrc 
.... 
+0

शानदार। धन्यवाद! – Industrial

+0

-एल स्विच क्या करता है ?? – Henrik

+0

-l | --login खोल बनाने के लिए एक तरीका लॉगिन खोल शुरू किया। – Henrik

1

सु शायद एक अधिक सार्वभौमिक दृष्टिकोण है, लेकिन इस sudo के साथ कुछ सामान्य वितरण पर भी संभव है:

sudo -u $MUSER $COMMAND $ARGS 

(बस पुन: पढ़ने अपने प्रश्न और एहसास नहीं था कि नवोदय, उपयोग के लिए आप के लिए काम नहीं करता है, लेकिन यह init स्क्रिप्ट में मेरे लिए काम किया है)

+0

ने इसे '/ etc/rc.local' में आजमाया है लेकिन यह उबंटू 16.04 पर काम नहीं करता है। यह भी कोशिश की: 'su -l उपयोगकर्ता-सी/घर/उपयोगकर्ता/स्क्रिप्ट'। कोई सुझाव? – beemaster

6

:

setuid myuser 
exec command args 
+0

अच्छा! क्या यह लोड करता है। Bashrc, प्रोफाइल और उस तरह की चीजें? –