जवाबों:
initctl --version
अपस्टार्ट के अपने वर्तमान संस्करण को खोजने के लिए।
Freenode पर #upstart चैनल पर पूछने पर, आधिकारिक मामला इस प्रकार है:
अपस्टार्ट की भविष्य की रिलीज़ में इसके लिए मूल समर्थन होगा, लेकिन अभी के लिए, आप कुछ का उपयोग कर सकते हैं:
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
su
कि इस तरह से शुरू किया है expect fork
और यहां तक कि expect daemon
अंतिम PID को पकड़ नहीं है।
exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
स्टार्ट-स्टॉप-डेमॉन का उपयोग कैसे करें?
exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd
डेबियन और उबंटू सिस्टम के लिए अनुशंसित विधि सहायक उपयोगिता का उपयोग करने के लिए है
start-stop-daemon
। [...]start-stop-daemon
PAM ("प्लगगेज ऑथेंटिकेशन मॉड्यूल") को उस प्रक्रिया तक सीमित नहीं करता है जो इसे शुरू करती है।
नोट: start-stop-daemon
आरएचईएल में समर्थित नहीं है।
इसे करने के कई तरीके हैं, सभी थोड़े अलग शब्दार्थों के साथ, विशेष रूप से समूह सदस्यता से संबंधित हैं:
setuidgid
आपके द्वारा निर्दिष्ट समूह में आपको डाल देगा।
setuidgid
आपको केवल उस समूह में रखेगा, जिससे आप उन अन्य समूहों से संबंधित फ़ाइलों तक नहीं पहुंच पाएंगे, जिनके आप सदस्य हैं।setuidgid
Daemontools-दोहराना से और setuidgid
nosh टूलसेट से दोनों एक है -s
(उर्फ --supplementary
) विकल्प जो सभी में उस समूह में डाल देगा, और भी डाल अनुपूरक समूहों उपयोगकर्ता आपके द्वारा निर्दिष्ट।newgrp
एक बार उपयोग करने के बाद आप कम विशेषाधिकार प्राप्त उपयोगकर्ता अपने समूह में एक एकल समूह जोड़ देंगे, लेकिन यह एक नया उप-समूह भी बनाता है, जिससे स्क्रिप्ट के अंदर उपयोग करना मुश्किल हो जाता है।
start-stop-daemon
आपके समूह की सदस्यता को सुरक्षित रखता है, और केवल सेट / रीड / सेटगिड की तुलना में बहुत अधिक काम करता है।
chpst -u username:group1:group2:group3... commandname
आपको यह निर्दिष्ट करने की अनुमति देगा कि समूह के सदस्यों को क्या अपनाना है, लेकिन ( उबंटू में ) यह केवल runit
पैकेज के साथ आता है , जो इसका एक विकल्प है upstart
।
su -c commandname username
उपयोगकर्ता के समूह के सभी सदस्यों को चुनता है, जैसा कि करता है sudo -u username commandname
, इसलिए वे शायद कम से कम विस्मय का मार्ग हैं।
setuidgid
पैकेज से उपयोग करें daemontools
।
यहाँ दस्तावेज़: http://cr.yp.to/daemontools/setuidgid.html
अमेज़न ईसी 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
श्लोक काम नहीं करता था।
मैं CentOS 6 का उपयोग कर रहा था, और मुझे मेरे लिए काम करने के लिए अनुशंसित हैक (Upstart 0.6.5 के लिए) नहीं मिल सका, और न ही 'su' ट्रिक क्योंकि इसमें शामिल फोर्क की संख्या (4 मुझे लगता है) 'उम्मीद कांटा' द्वारा ट्रैक नहीं की गई थी 'या' उम्मीद डेमॉन '।
मैंने आखिरकार बस किया
chown user:group executable
chmod +s executable
(यानी सेटिउड बिट सेट करें और स्वामित्व बदलें)।
यह सबसे सुरक्षित तरीका नहीं हो सकता है, लेकिन एक आंतरिक अनुसंधान एवं विकास परियोजना के लिए, यह हमारे मामले में कोई फर्क नहीं पड़ा।
chmod 1700
एक के chmod u+sx,go-x
बजाय एक या कम से कम वहाँ थे +s
, तो यह "पर्याप्त रूप से सुरक्षित" के रूप में योग्य होगा। :)
आप जो हासिल करने की कोशिश कर रहे हैं, उसके आधार पर एक तीसरी संभावना है। आप प्रश्न में फ़ाइलों / उपकरणों पर अभिगम नियंत्रण को ढीला करने में सक्षम हो सकते हैं । यह एक अप्रकाशित उपयोगकर्ता को उन वस्तुओं को माउंट करने या एक्सेस करने की अनुमति दे सकता है जिन्हें वे सामान्य रूप से अनुमति नहीं देते हैं। बस सुनिश्चित करें कि आप इस प्रक्रिया में राज्य की चाबी नहीं दे रहे हैं।
आप sudo पासवर्ड कैश का टाइमआउट भी बदल सकते हैं । जब तक आपकी मशीन शारीरिक रूप से सुरक्षित नहीं हो जाती (लेकिन, आप मानते हैं कि यह संभावना नहीं है कि कोई राहगीर सुडौल पहुंच हासिल करने का प्रयास करेगा), मैं इसकी सिफारिश नहीं करता।
एक अच्छा कारण है कि विशेषाधिकार प्राप्त कार्यों को करने के बहुत कम तरीके हैं और वे अनावश्यक रूप से आवश्यक लॉगिंग करते हैं। ढीले प्रतिबंध आपके सिस्टम के लिए एक सुरक्षा खतरा होगा, और लॉगिंग की कमी का मतलब यह होगा कि यह जानने का कोई तरीका नहीं है कि आपके द्वारा समझौता किए जाने पर क्या हुआ।
यदि आपकी लॉग फ़ाइलों का आकार एक चिंता का विषय है तो कुछ गलत है। सूडो सामान्य परिस्थितियों में केवल एक लाइन प्रति उपयोग उत्पन्न करता है।
सेंटोस 6 में, ऊपर की ओर 0.6.5, मेरे लिए क्या काम किया गया है।
script
exec su user_name << EOF
exec /path/to/command [parameters...]
EOF
end script
या:
script
exec su user_name << EOF
..... what you want to do ....
EOF
end script
जब उपयोग करें
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
नौकरी की प्रक्रिया को रोका नहीं जा सकता initclt stop
। मुझे लगता है कि इसका कारण है:
1. the job forked and the main process is not tracked.
2. the main process changed its process group,because of `su -c`