उपयोगकर्ता कौन सी प्रक्रियाओं को सीमित करता है जो पर्यवेक्षक के साथ पुनः आरंभ कर सकता है?


14

मैंने एक Django साइट चलाने वाली एक Gunicorn प्रक्रिया का प्रबंधन करने के लिए पर्यवेक्षक का उपयोग किया है, हालांकि यह प्रश्न पर्यवेक्षक द्वारा प्रबंधित किए जाने वाले किसी भी चीज़ से संबंधित हो सकता है। पहले मैं केवल एक ही व्यक्ति था जो हमारे सर्वर का प्रबंधन और उपयोग कर रहा था, और पर्यवेक्षक सिर्फ रूट के रूप में चलता था और supervisorctl restart myappजरूरत पड़ने पर चलने के लिए मैं सुडो का उपयोग करता था ।

अब हमारे सर्वर को विभिन्न साइटों पर काम करने वाले कई उपयोगकर्ताओं का समर्थन करना है, और प्रत्येक परियोजना को अन्य उपयोगकर्ताओं की प्रक्रियाओं को फिर से शुरू करने में सक्षम होने के बिना अपनी खुद की gunicorn प्रक्रियाओं को पुनरारंभ करने में सक्षम होने की आवश्यकता है।

मैंने इस ब्लॉग पोस्ट का अनुसरण किया:

http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/

और गैर-रूट उपयोगकर्ताओं को पर्यवेक्षक के उपयोग की अनुमति देने में सक्षम था, लेकिन अब कोई भी किसी और की प्रक्रियाओं को पुनः आरंभ कर सकता है। यह लग रहा है से, पर्यवेक्षक प्रति उपयोगकर्ता अभिगम नियंत्रण करने का एक तरीका नहीं है।

किसी के पास कोई भी विचार है कि कैसे उपयोगकर्ताओं को बिना रूट के केवल अपनी प्रक्रियाओं को पुनरारंभ करने की अनुमति दी जाए?

संपादित करें: कुछ चीजों के बारे में हमने सोचा है कि इसमें रद्दी बिट सेट के साथ एक स्क्रिप्ट लिखी जाती है जिसमें कुछ भी नहीं होता है supervisorctl restart myappऔर इसे उस उपयोगकर्ता की निर्देशिका में रखा जाता है जो इसके मालिक हैं myapp। इंटरनेट यह कहता नजर आ रहा है कि अगर गलत तरीके से ऐसा किया जाता है तो ऐसी स्क्रिप्ट असुरक्षित है। हमने एक कस्टम डेमॉन लिखने पर भी विचार किया जो विशिष्ट उपयोगकर्ताओं से आदेशों के लिए सुनता है और यदि उपयोगकर्ता की अनुमति है तो पर्यवेक्षक प्रक्रिया को पुनरारंभ करता है। यह विचार अत्यधिक जटिल लगता है यदि एक सरल समाधान काम करेगा।

जवाबों:


33

आप sudoअपनी कस्टम स्क्रिप्ट के स्थान पर उसी चीज़ को पूरा करने के लिए उपयोग कर सकते हैं । अर्थात्, डिफ़ॉल्ट supervisordकॉन्फ़िगरेशन दिया गया है, जिसमें केवल रूट चल supervisorctlसकता है, आप इस तरह से एक प्रविष्टि डाल सकते हैं /etc/sudoers:

alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2

यह पासवर्ड प्रदान किए बिना रूट के रूप में aliceचलाने की अनुमति देगा sudo /usr/bin/supervisorctl restart app1, और यह bobपुनरारंभ करने की अनुमति देगा app2


आह, उत्कृष्ट। यह ठीक उसी तरह की चीज है जिसकी मुझे तलाश थी। आपकी सहायताके लिए धन्यवाद!
davidscolgan

1
मन है कि आप इस स्ट्रिंग को नियमों के बाद जोड़ना चाहिए जैसे%sudo ALL=(ALL:ALL) ALL
Павел Тявин
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.