रूट एक्सेस के साथ चलाने के लिए Systemd सेवा को कॉन्फ़िगर करना


21

मेरे पास एक नोड के रूप में एक सेवा है। Raspbian Jessie पर Systemd के साथ एक नोड अनुप्रयोग स्थापित किया गया है और यह अपने उपयोगकर्ता खाते का उपयोग कर रहा है। हालाँकि, मुझे पता चल रहा है कि यह सेवा सही तरीके से नहीं चल रही है क्योंकि इसमें आवश्यक अनुमतियां नहीं हैं। मेरे द्वारा स्थापित नोड मॉड्यूल में से एक को रूट एक्सेस की आवश्यकता होती है। अगर मैं sudo के साथ मैन्युअल रूप से एप्लिकेशन चलाता हूं तो सब कुछ ठीक काम करता है।

वहाँ प्रणाली को sudo के साथ चलाने के लिए कहने का एक तरीका है?


2
आपकी इकाई फ़ाइल कैसी दिखती है, इसे अपने प्रश्न में जोड़ें? आम तौर पर systemdयूनिट फ़ाइलों को रूट अधिकारों के साथ चलाता है।
थॉमस

जवाबों:


31

सेवा को चलाने के लिए systemd बताओ sudo?

sudo इसके पास कुछ भी नहीं है।

आमतौर पर आप सिस्टमड को एक विशिष्ट उपयोगकर्ता / समूह के रूप में एक सेवा चलाने के लिए निर्देश देते हैं User=और यूनिट फ़ाइल Group=के [Service]अनुभाग में निर्देश देते हैं ।

रूट करने के लिए उन्हें सेट करें (या उन्हें हटा दें, क्योंकि रूट डिफ़ॉल्ट है)।


मैंने इसे एक विशिष्ट उपयोगकर्ता का उपयोग करने के लिए सेट किया था क्योंकि मैं इसे कॉन्फ़िगर करने के लिए एक गाइड का उपयोग कर रहा था। हालाँकि मेरे मामले में यह उचित नहीं था। मैंने इसे डिफ़ॉल्ट रूप से रूट करने के लिए हटा दिया है और अब सब कुछ काम करता है!
ल्यूक

2
रूट के रूप में चलाना साथ चलने के समान नहीं है User=root। मेरा जवाब देखिए।
मार्क स्टोसबर्ग

इस फ़ाइल को कहाँ संपादित किया जा सकता है?
मैथ्यू


15

स्पष्ट करने के लिए, systemdसिस्टम सेवाएँ डिफ़ॉल्ट रूप से रूट के रूप में चलती हैं, लेकिन अभी भी डिफ़ॉल्ट व्यवहार और सिस्टम सेवा चलाने के बीच अंतर है User=root

स्पावर्ड प्रक्रियाओं में पर्यावरण चर में प्रलेखित के रूप में , ये चर सेट होने पर ही सेट User=किए जाते हैं:

$USER, $LOGNAME, $HOME, $SHELL

मैंने इस खोज की पुष्टि करने के लिए परीक्षण किया। इसलिए यदि आप एक रूड सर्विस को रूट के रूप में चलाना चाहते हैं, जिसमें उपरोक्त चर में से एक की जरूरत है, तो आपको सेट करना होगा User=root


धन्यवाद! यह केवल एक चीज थी जो मेरे लिए एक आवेदन पर काम करती थी जो मेरे पास है
पेड्रो टोरेस

NB यदि आप उपयोगकर्ता = रूट सेट करते हैं, तो आपको संभवतः समूह = रूट सेट करना चाहिए: superuser.com/a/1452367/39364
rogerdpack

2

एक अस्थायी समाधान, लेकिन इसे चुटकी में काम करने के लिए मिला:

/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'

एक उपयोगकर्ता के साथ चल सकता है जिसके पास सिस्टम यूनिट फ़ाइल में sudo विशेषाधिकार हैं जैसे:

[Unit]
Description=Rails Webserver
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

इसके कई मुद्दे हैं: पहला, पहले दो उत्तर बताते हैं कि उपयोगकर्ता और फिर sudo का उपयोग क्यों अनावश्यक है, और इसे करने का सही तरीका दिखाएं। दूसरा, आपको वैसे भी अपने वेब को रूट के रूप में नहीं चलाना चाहिए। तीसरा, आपका वेब ऐप नगनेक्स जैसे सामान्य वेब सर्वर के पीछे होना चाहिए।
माइकल हैम्पटन

मैं आपकी किसी भी बात पर आपसे असहमत नहीं होगा। लेकिन अगर कोई व्यक्ति, अपने आप की तरह, एक नंगे-हड्डियों, जैसे तेज-से-आप-के रूप में एक सर्वर के स्टैंडअप चाहता था, यह एक व्यवहार्य विकल्प है जो काम करता है।
daino3

लगभग उतनी ही तेजी से। जाहिर है इस्तेमाल sudoसे स्टार्टअप थोड़ा धीमा हो जाएगा। और यह अनावश्यक है।
माइकल हैम्पटन

@Michael Hampton मैं एक पिछले दरवाजे को लिखने की कोशिश कर रहा हूं, इसलिए मुझे यह उत्तर मददगार लगा है!
पी। साउथेइकविच

1

डिफ़ॉल्ट रूप से सेवा रूट के रूप में चल रहा है इस मामले में इसे सिस्टम उपयोगकर्ता के रूप में चलाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.