अपस्टार्ट: एक सामान्य उपयोगकर्ता को मेरी कस्टम सेवा को रोकने और शुरू करने की अनुमति देना


16

मुझे अपने वेबसर्वर एप्लिकेशन को upstart का उपयोग करके बूट पर शुरू करना है। यह अपस्टार्ट स्क्रिप्ट है:

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

यह उबंटू सर्वर 10.04 एलटीएस पर त्रुटिपूर्ण रूप से काम करता है और मैं इसके बारे में बहुत खुश हूं।

हालांकि, मेरे पास एक तैनाती शेल स्क्रिप्ट है जो SSH के रूप में उपयोग करने में लॉग इन करता है mainuser(यह एक sudoer नहीं है) और फिर नवीनतम तैनाती संस्करण के लिए कार्यशील निर्देशिका को अपडेट करेगा।

यहां मुद्दा यह है कि सेवा को फिर से शुरू करने की आवश्यकता है ताकि एप्लिकेशन नए स्रोत फ़ाइलों को लोड करें। हालांकि, mainuserएक हो जाता है ...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

... जब इसे रोकने की कोशिश की जा रही है। मुझे दौड़ना है sudo stop webapp, लेकिन यह उपयोगकर्ता ऐसा नहीं कर सकता है क्योंकि वह सुडोल नहीं है। सुरक्षा कारणों से मैं नहीं चाहता कि वह सूडोअर भी बने, साथ ही मैं सूडो पासवर्ड नहीं डालना चाहता।

तो मैं कैसे mainuserचलाने की अनुमति देता हूं stop webappऔर start webapp?


1
उपयोगकर्ता को sudoers में जोड़कर आप किन सुरक्षा समस्याओं से चिंतित हैं? आप एक नियम लिख सकते हैं जो उपयोगकर्ता को केवल एक विशिष्ट कमांड की अनुमति देता है और अधिक नहीं, इसके अलावा आप पासवर्ड प्रॉम्प्ट को दूर रखने के लिए एक nopasswd विकल्प शामिल कर सकते हैं। आपके द्वारा प्राप्त होने वाली विशिष्ट त्रुटि के लिए, ऐसा इसलिए है क्योंकि स्टार्ट / स्टॉप में / sbin है, जो आमतौर पर सामान्य उपयोगकर्ताओं के पथ का हिस्सा नहीं है। तो आप "/ sbin / stop" कर सकते हैं, या पथ में sbin जोड़ सकते हैं। यह तब तक काम कर सकता है जब तक कि रूट की शुरुआत / स्टॉप स्क्रिप्ट में कोई अन्य आइटम न हों।
डेरेक प्रेसनॉल

@DerekPressnall, धन्यवाद, लेकिन जब मैं दौड़ता /sbin/stop webappहूं तो मुझे मिलता है stop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory। मैं mainuserकेवल इस आदेश को निष्पादित करने की अनुमति कैसे दूंगा?
टॉम

त्रुटि इस उपयोगकर्ता के लिए व्यवस्थापक अधिकार नहीं होने का एक परिणाम है।
टॉम

जवाबों:


31

sudo बहुत विन्यास योग्य है, आप इस उपयोगकर्ता को पासवर्ड के लिए संकेत दिए बिना सीमित सेट को निष्पादित करने की अनुमति दे सकते हैं। निम्नलिखित पंक्ति में वह /etc/sudoersकरना चाहिए जो आप चाहते हैं:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp

1
बहुत बढ़िया, बहुत बहुत धन्यवाद। क्या आपने वास्तव में यह सब सीखा है man sudoers? मुझे यह काफी मुश्किल लग रहा था।
टॉम

1
नहीं, मैंने पहले भी ऐसा किया है। यह :-)
mgorven

के साथ विफल हो जाता है Unable to connect to system bus। अधिक: गैर-
सूडो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.