गैर-सूडो समूह को अपस्टार्ट कार्य को नियंत्रित करने की अनुमति दें


11

मैं सिस्टम स्टार्टअप पर चलने के लिए एक अपस्टार्ट नौकरी स्थापित करने की कोशिश कर रहा हूं, और इसके अलावा किसी अन्य समूह के सदस्यों द्वारा शुरू / बंद किया जा सकता है sudo। पिछले संस्करण के साथ, मैंने अपने sudoers फ़ाइल में जोड़कर इस कार्य को प्राप्त करने के लिए update-rc.dसंग्रहीत और उपयोग की गई स्क्रिप्ट्स का उपयोग किया , लेकिन मैं Upstart के लिए एक समान कार्य प्राप्त नहीं कर सकता।/etc/init.d/%Group ALL = NOPASSWD: /etc/init.d/scriptname

मैंने %Group ALL = NOPASSWD: /sbin/initctl start jobnamesudoers फ़ाइल में जोड़ने की कोशिश की , लेकिन कमांड चलाने की कोशिश करने से start jobnameयह त्रुटि उत्पन्न होती है:

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

जैसा कि मैं बता सकता हूं, यह इस बात की शिकायत है कि मेरे उपयोगकर्ता खाते को Upstart के लिए D-Bus config फ़ाइल में 'प्रारंभ' संदेश भेजने की शक्ति कैसे नहीं दी गई है। मैं वास्तव में इस बारे में कोई जानकारी नहीं पा सका हूँ कि किसी विशिष्ट सेवा तक पहुँचने के लिए समूह की अनुमति देने के लिए उस फ़ाइल को कैसे संपादित किया जाए - क्या ऐसा विकल्प मौजूद है? क्या सुडोर्स फाइल को एडिट करने का कोई तरीका है ताकि मैं बिना कॉन्फिग फाइल को एडिट किए काम चला सकूं? क्या मैं पिछले संस्करण के साथ चिपके हुए हूं?

जवाबों:


7

आप यह पता लगाने के साथ शुरू कर सकते हैं कि उपस्टार्ट के लिए विशिष्ट डी-बस कॉन्फ़िगरेशन कहां रखा गया है। destination="com.ubuntu.Upstart"त्रुटि संदेश से उस स्निपेट को देखें ? अब इसे डी-बस कॉन्फिग फाइलों के साथ फोल्डर में रखने की कोशिश करें:

vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1
/etc/dbus-1/system.d/Upstart.conf:    <allow own="com.ubuntu.Upstart" />
[...skipped...]

उस Upstart.confफ़ाइल में नीतियों के कुछ उदाहरण हैं। मुझे लगता है कि आप उनसे एक नीति का प्रारूप जानने की कोशिश कर सकते हैं। फिर अपने विशिष्ट उपयोगकर्ता को केवल उन कार्यों की अनुमति देने का प्रयास करें जिनकी उसे आवश्यकता है। उदाहरण के लिए, जैसे:

<policy user="pope_benedict">
  <allow send_destination="com.ubuntu.Upstart"
         send_interface="com.ubuntu.Upstart0_6.Job"
         send_member="Start"/>
</policy>

यह pope_benedictउपयोगकर्ता को उस काम को शुरू करने की अनुमति देनी चाहिए ।

ध्यान दें कि 'अनुमति' नीति विशेषताओं के मूल्य आपके मूल त्रुटि संदेश में सूचीबद्ध हैं।


1
ओह, और इसके बाद डी-बस को फिर से शुरू करने के लिए मत भूलना! :)
इलियु पास्करू

मुझे यह थोड़ा अटपटा लगा
माइक कैंपबेल

7

मैं व्यक्तिगत रूप से /etc/sudoers.d/jobname_myuser फ़ाइल में निम्न पंक्ति का उपयोग कर रहा हूं:

myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname

जैसा कि यहाँ वर्णित है: /server//a/390723/68608


2

इस तरह का विकल्प सुडो में मौजूद नहीं है।

Sysv स्क्रिप्ट और अपस्टार्ट कॉन्फ़िगरेशन फ़ाइलों के बीच का अंतर बस इतना है: Sysv स्क्रिप्ट स्क्रिप्ट, निष्पादनयोग्य अपने आप में हैं और आप sudo को कुछ समूह को निष्पादित करने की अनुमति देने के लिए कह सकते हैं। दूसरी ओर, अपस्टार्ट विन्यास फाइल केवल विन्यास फाइल है, निष्पादन योग्य नहीं है, इसलिए start(सिमलिंक का initctl) निष्पादन है जो सूडो अनुमति देता है। यहां आपका मुद्दा यह है कि लोगों को initctlआपको चलाने की अनुमति देने से उन्हें initctlहर चीज की अनुमति मिलती है ।

हालांकि समाधान आसान है अगर आपकी चिंता केवल एक नौकरी में है। एक स्क्रिप्ट बनाओ, /usr/bin/jobname.shसाथ कहो

#!/bin/sh
initctl $1 jobname

तब chmod 755 /usr/bin/jobname.shऔर अंत में उस निष्पादन योग्य को अपने sudoers फ़ाइल में जोड़ें:

%Group ALL = NOPASSWD: /usr/bin/jobname.sh

इस तरह, हर कोई इस विशिष्ट कार्य को कॉल jobname.sh startया jobname.sh stopनियंत्रित कर सकता है । आप केवल startऔर stopमापदंडों आदि की अनुमति देने के लिए कुछ जाँच जोड़ना चाह सकते हैं ।


दूसरे शब्दों में, मेरा मुद्दा यह नहीं है कि सिस्टम समूह के सदस्यों को चलाने की क्षमता से इनकार करता है initctl, लेकिन यह कि उपस्टार्ट उपयोगकर्ताओं / समूहों द्वारा भेजे गए किसी भी संकेत को स्पष्ट रूप से मना कर देता है, जिसे उपस्टार्ट.कॉनफ में अनुमति नीति में प्रवेश की अनुमति नहीं दी गई है? और कोई भी तरीका नहीं है कि ऑल-जॉब्स की तुलना में अधिक ग्रैन्युलैरिटी प्रदान की जाए या कॉन्फिग फाइल में कोई सेटिंग नहीं है?
एंगल ओ 'सैक्सन

आपके मामले में Initctl बिना sudoers बदलाव के भी ठीक चल रहा है, यदि आप विशेष रूप से गैर-रूट उपयोगकर्ताओं के लिए अनुमति नहीं देते हैं, तो उपस्टार्ट केवल इससे संदेशों को मना कर रहा है। अन्य दो उत्तर देखें। आप com.ubuntu.Upstart0_6.<JOB>अपस्टार्ट.कॉन्फ़ में प्रति कार्य के आधार पर ( भाग देखें ) नीति को परिभाषित कर सकते हैं । आपकी जरूरतों के आधार पर, इस तरह की स्क्रिप्ट को डब की नीतियों को लिखने और डब को फिर से शुरू करने के बजाय बनाना आसान हो सकता है। कम परेशानी के साथ लंबा रास्ता।
तुम्मीनिद

DBus नीति संपादित करने का उपयोग करने के com.ubuntu.Upstart0_6.jobnameरूप में send_interfaceपहले की तरह ही त्रुटि संदेश का उत्पादन किया। यदि मैं अनुमान लगाने में सही हूं कि त्रुटि आउटपुट में सिग्नल की जानकारी है, तो यह इंटरफ़ेस या गंतव्य दिखता है जो सिग्नल को संदर्भित करता है अपस्टार्ट सेवा को प्रतिबिंबित नहीं करता है। मुझे लगता है कि डी-बस विधि कॉल संदेश में सेवा की जानकारी सिर्फ तर्क है, और मुझे यकीन नहीं है कि मैं तर्क मूल्यों के आधार पर निर्णय लेने के लिए उपस्टार्ट के लिए डी-बस नीति को संपादित कर सकता हूं।
एंगल ओ 'सैक्सन

आपके द्वारा सुझाए गए सॉर्ट की एक स्क्रिप्ट मेरे लिए बहुत अच्छी तरह से काम कर रही है, एक कैविएट के साथ: मुझे इसे चलाने की आवश्यकता है sudo jobname.sh start, ताकि rootउपस्टार्ट अनुरोध को उपयोगकर्ता से आने के रूप में देखता है। मैं प्रयास करने का प्रयास कर रहा हूं यह "सही" तरीका है (इस प्रकार पहले स्थान पर Sys-V स्क्रिप्ट से दूर जाना), इसलिए मैं यह काम डी-बस नीति या कुछ अन्य अपस्टार्ट कॉन्फ़िगरेशन विकल्प के माध्यम से प्राप्त करना चाहता हूं, लेकिन अगर मैं नहीं कर सकता काम कर रहा हूँ कि मैं इस जवाब को स्वीकार करता हूँ।
एंगल ओ'सक्सन

1
मैं भी बोली "$1"। आपके [ "$1" = "start" -o "$1" = "stop" ]परीक्षण से मुझे विश्वास है कि यह $1एक स्क्रिप्ट के रूप में सुरक्षित है, लेकिन जड़ के रूप में चलाए जा रहे विस्तार में अस्वास्थ्यकर विस्तार सिर्फ अस्वास्थ्यकर आदत है (जब तक कि शब्द विभाजन जानबूझकर वांछित नहीं हो ...)
बेनी चेर्नियाव्स्की-पास्किन

0

जैसा कि ऊपर बताया गया है कि डबस डेमॉन में एक कॉन्फ़िगरेशन फ़ाइल है जो इसे किसी विशेष एप्लिकेशन के लिए माहिर करती है।

ls /etc/dbus-1/system.d/
avahi-dbus.conf
bluetooth.conf
...
Upstart.conf
wpa_supplicant.con

कॉन्फ़िगरेशन फ़ाइल संसाधन सीमा, सुरक्षा पैरामीटर और इसके आगे भी स्थापित करती है।

विवरण के लिए dbus-daemon-1 (1) - लिनक्स मैन पेज देखें

एक समूह को अपस्टार्ट नौकरियों को शुरू / बंद करने की अनुमति देने के लिए /etc/dbus-1/system.d/Upstart.conf पर निम्न नीति जोड़ें

  <policy group="YourGroupName">
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Start" />
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Stop" />
  </policy>

आपको डिफ़ॉल्ट नीति बदलने से पहले ऐसी नीति के सुरक्षा निहितार्थों पर विचार करना चाहिए। के सदस्य YourGroupName शुरू / बंद करने के लिए सक्षम हो जाएगा सब कल का नवाब नौकरियों।


लेकिन क्या उन नौकरियों को सीमित करने का एक तरीका है जो वे नियंत्रित कर सकते हैं? या यह संभव नहीं है क्योंकि डी-बस संदेश सामग्री पर ध्यान नहीं देती है?
एंगल ओ 'सेक्सन

मैंने उस नीति को Upstart.conf (मेरे वास्तविक groupname के साथ groupname की जगह) को जोड़ने की कोशिश की, D- बस start: You do not have permission to modify job: jobnameको फिर से शुरू किया , और जब मैंने सेवा शुरू करने की कोशिश की तो मुझे मिल गया ।
एंगल ओ 'सेक्सन

ठीक। इसका मतलब है कि नीति सफलतापूर्वक लागू है। ऐसा प्रतीत होता है कि yourjob.conf / etc / init में है। उपयोगकर्ता नौकरियां ~ / .init में होनी चाहिए। क्या यह आपके उपयोग के मामले में ~ / .init में yourjob.conf लगाने के लिए प्रशंसनीय है?
गोरान मिस्कोविक

आपके पहले प्रश्न के संबंध में: नीति परिभाषित करती है कि कौन से इंटरफेस और सदस्यों तक पहुँचा जा सकता है। यह परिभाषित करता है कि कौन सी सामग्री / तर्क भेजे / पास किए जा सकते हैं। वर्तमान प्रतिबंधात्मक नीति को अपस्ट्रीम में ढील दी गई है। देखें उपयोगकर्ता की नौकरी चलाने के लिए
गोरान मिस्कोविक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.