सवाल अप्रतिबंधित उपयोगकर्ताओं के रूप में नौकरियों को अपस्टार्ट करना


अपस्टार्ट जॉब को अपना उपयोगकर्ता आईडी बदलने और स्क्रिप्ट को एक अप्रतिबंधित उपयोगकर्ता के रूप में चलाने का कैननिक तरीका क्या है?

जाहिर है कि कोई भी उपयोग कर सकते हैं su या sudo, लेकिन यह हैकी लगता है (और अनावश्यक लॉग लाइनें उत्पन्न कर सकते हैं)।


139
2018-03-11 14:26


मूल




जवाब:


अपस्टार्ट v1.4 के साथ, setuid तथा setgid कॉन्फ़िगरेशन फ़ाइल में मूल रूप से समर्थित हैं।


108
2017-09-09 11:26



इस पर विनिर्देशों के लिए कुकबुक देखें: upstart.ubuntu.com/cookbook/#run-a-job-as-a-different-user - Jason Navarrete
दूसरे शब्दों में, यह सटीक (12.04) और नए में समर्थित है। - Edward Anderson
दूसरे शब्दों में, सेंटोस 6 में समर्थित नहीं है - socketpair
रिकार्ड के लिए, initctl --version अपस्टार्ट के अपने वर्तमान संस्करण को खोजने के लिए। - Mahn
कष्टप्रद, एडब्ल्यूएस पर अमेज़ॅन लिनक्स डिस्ट्रो आरएचईएल 6 के अपस्टार्ट संस्करण (0.6.5 !!!!) का उपयोग करता है, इसलिए इसका उपयोग करने वाले किसी भी व्यक्ति को 'su' समाधान का उपयोग करना होगा। - Asfand Qazi


Freenode पर #upstart चैनल पर पूछते हुए, आधिकारिक इस मामले पर लेते हैं:

अपस्टार्ट की भविष्य की रिलीज होगी   उस के लिए मूल समर्थन, लेकिन अभी के लिए,   आप कुछ इस तरह उपयोग कर सकते हैं:

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]

85
2018-01-18 01:41



यह एकमात्र उत्तर है जो अमेज़ॅन लिन्यू ईसी 2 पर काम करता है (मैंने सुडो और सु के सभी बदलावों की कोशिश की, जिसमें सत्र-आदेश, -सी, विज्ञापन मतली शामिल है); उनमें से किसी ने शुरू होने के बाद प्रक्रिया को रोकने की अनुमति नहीं दी; इस लिए आपका बहुत - बहुत धन्यवाद। - Kato
यह कुछ फैंसी शैल जादू है, +1। - Steve Kehlet
यह CentOS 6 (अपस्टार्ट 0.6.5) पर मेरे लिए काम नहीं किया। द्वारा शुरू की गई कांटे की एक श्रृंखला (4 गहरी मुझे लगता है) su इसका मतलब है कि expect fork और भी expect daemon अंतिम पीआईडी ​​पकड़ो मत। - Mark Lakata
मैंने जेनकिंस प्रक्रिया को बूट करने के लिए अमेज़ॅन लिनक्स (अपस्टार्ट 0.6.5) पर इसका इस्तेमाल किया (जो स्वयं को निराश नहीं करता है, धन्यवाद) और यह काम करता है! मुझे मानक आउटपुट को लॉग फ़ाइल में रीडायरेक्ट करने और कुछ पर्यावरण चर सेट करने के लिए इसे थोड़ा बदलना पड़ा, लेकिन यह काम किया! मेरा संस्करण इस तरह दिखता है: exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...] - Asfand Qazi


स्टार्ट-स्टॉप-डिमन का उपयोग करने के बारे में कैसे?

exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd

से अपस्टार्ट कुकबुक:

डेबियन और उबंटू सिस्टम के लिए अनुशंसित विधि सहायक उपयोगिता का उपयोग करना है start-stop-daemon। [...] start-stop-daemon पीएएम ("प्लग करने योग्य प्रमाणीकरण मॉड्यूल") को शुरू करने वाली प्रक्रिया को सीमित नहीं करता है।

ध्यान दें: start-stop-daemon आरएचईएल में समर्थित नहीं है।


17
2017-12-23 15:11



यदि आपको इसकी ज़रूरत है, तो आप समूह का भी उपयोग कर सकते हैं। --Chuid daemonuser के साथ: daemongroup - Evgeny


ऐसा करने के कई तरीके हैं, सभी अलग-अलग अर्थशास्त्र के साथ, विशेष रूप से समूह सदस्यता से संबंधित:

  • setuidgid आपको आपके द्वारा निर्दिष्ट समूह में डाल देगा।

    • मूल daemontools ' setuidgid आपको रखेगा केवल उस समूह में, इसलिए आप उन अन्य समूहों से संबंधित फ़ाइलों तक पहुंच नहीं पाएंगे जिनके सदस्य हैं।
    • setuidgid daemontools-encore से और यह setuidgid नोश टूलसेट से दोनों में एक है -s (यानी --supplementary) विकल्प जो आपको उस समूह में रखेगा, और आपको सभी में भी डाल देगा पूरक समूह आपके द्वारा निर्दिष्ट उपयोगकर्ता के लिए।
  • का उपयोग करते हुए newgrp एक बार जब आप कम विशेषाधिकार प्राप्त हो जाते हैं तो उपयोगकर्ता आपके समूह में एक समूह जोड़ देगा, लेकिन यह एक नया सबहेल भी बनाता है, जिससे स्क्रिप्ट के अंदर उपयोग करना मुश्किल हो जाता है।

  • start-stop-daemon आपकी समूह सदस्यता को संरक्षित करता है, और केवल सेटुइड / सेटगिड से बहुत कुछ करता है।

  • chpst -u username:group1:group2:group3... commandname आपको यह निर्दिष्ट करने देगा कि कौन सी समूह सदस्यता को अपनाना है, लेकिन (इन उबंटू) यह केवल के साथ आता है runit पैकेज, जो एक विकल्प है upstart

  • su -c commandname username जैसा कि करता है, उपयोगकर्ता नाम की सभी सदस्यता सदस्यता लेता है sudo -u username commandname, इसलिए वे शायद कम से कम आश्चर्य के लिए मार्ग हैं।


13
2017-12-24 00:00





उपयोग setuidgid पैकेज से daemontools

यहां दस्तावेज़ीकरण: http://cr.yp.to/daemontools/setuidgid.html


8
2018-03-11 15:50



daemontools अपस्टार्ट की एक पूर्व शर्त नहीं है, तो यह 'canonical' जवाब की तरह प्रतीत नहीं होता है - Adam Nelson
इसके अलावा, डेमोंटोल्स ब्रह्मांड में है (उबंटू 10.04), और अपस्टार्ट मुख्य में है। - jtimberman


अमेज़ॅन ईसी 2 पर उबंटू 10.10 के उदाहरण पर, मेरे साथ बेहतर भाग्य था start-stop-daemon आदेश।

मैंने कुछ अन्य अपस्टार्ट के साथ भी संघर्ष किया पद। मैं एक विशिष्ट के साथ एक अजगर आवेदन बुला रहा हूँ virtualenv और मेरे निष्पादित कार्यक्रम के कुछ पैरामीटर।

निम्नलिखित मेरे लिए क्या काम किया है।

script
  export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
  exec start-stop-daemon --start  --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script

PYTHONPATH स्रोत से कुछ संकुल स्थापित करने के लिए है अजगर मॉड्यूल पथ जब यह अपस्टार्ट जॉब चलता है। मुझे सब कुछ पूर्ण पथ में करना था क्योंकि chdir Stanza काम नहीं लग रहा था।


4
2018-01-06 19:52



मुझे भी समस्याएं आई हैं env चर के साथ प्रयोग किया जाता है exec start-stop-daemon exec। - Thomas Bratt


मैं CentOS 6 का उपयोग कर रहा था, और मुझे मेरे लिए काम करने के लिए अनुशंसित हैक (अपस्टार्ट 0.6.5 के लिए) नहीं मिला, न ही 'सु' चाल क्योंकि इसमें शामिल कांटे की संख्या (4 मुझे लगता है) को 'फोर्क की उम्मीद नहीं थी' 'या' डेमॉन की उम्मीद करें '।

मैंने अंत में अभी किया

chown user:group executable
chmod +s executable

(यानी सेटयूड बिट सेट करें और स्वामित्व बदलें)।

यह सबसे सुरक्षित तरीका नहीं हो सकता है, लेकिन एक आंतरिक आर एंड डी परियोजना के लिए, इससे हमारे मामले में कोई फर्क नहीं पड़ता।


3
2017-08-27 21:56



यदि आप एक करना चाहते थे chmod 1700 या कम से कम एक chmod u+sx,go-x बस इसके बजाय वहां +s, यह "पर्याप्त सुरक्षित" के रूप में योग्य होगा। :) - dannysauer


आप जो करने की कोशिश कर रहे हैं उसके आधार पर तीसरी संभावना है। आप कर सकते हैं प्रश्न में फ़ाइलों / उपकरणों पर अभिगम नियंत्रण को ढीला करें। यह एक अप्रतिबंधित उपयोगकर्ता को उन वस्तुओं को माउंट या एक्सेस करने की अनुमति दे सकता है जिनकी उन्हें सामान्य रूप से अनुमति नहीं दी जाएगी। बस सुनिश्चित करें कि आप प्रक्रिया में राज्य को चाबियाँ नहीं दे रहे हैं।

आप भी कर सकते हैं सुडो पासवर्ड कैश के टाइमआउट को बदलें। लेकिन जब तक आपकी मशीन शारीरिक रूप से सुरक्षित न हो, तब तक मैं इसकी अनुशंसा नहीं करता हूं (यानी, आप मानते हैं कि यह संभव नहीं है कि एक यात्री द्वारा सूडो पहुंच प्राप्त करने का प्रयास किया जाएगा)।

एक अच्छा कारण है कि विशेषाधिकार प्राप्त कार्यों को करने के बहुत कम तरीके हैं और वे प्रदर्शन करते हैं बेकार  ज़रूरी लॉगिंग। लूज प्रतिबंध आपके सिस्टम के लिए एक सुरक्षा खतरा होगा, और लॉगिंग की कमी का मतलब यह होगा कि आपके साथ समझौता किए जाने पर क्या हुआ, यह जानने का कोई तरीका नहीं है।

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


0
2018-03-11 17:07