अपस्टार्ट: बिना सेवा वाले उपयोगकर्ता के रूप में रन सेवा और रूट के रूप में प्री-स्टार्ट स्क्रिप्ट


8

मेरे पास अपस्टार्ट की नौकरी है:

description "posty api"


start on mysql
stop on shutdown

env RACK_ENV=production

setuid vmail
setgid vmail

chdir /opt/posty_api

pre-start script
    mkdir -p /var/run/posty
    chown -R vmail:root /var/run/posty
end script

exec /usr/local/bin/unicorn -D -c /opt/posty_api/unicorn.rb --env production >> /var/log/posty/upstart.log 2>&1

post-stop exec kill `cat /var/run/posty/unicorn.pid`

respawn
respawn limit 1 10

फ़ोल्डर बनाने के लिए /var/runमुझे रूट विशेषाधिकारों की आवश्यकता है। मैं अपस्टार्ट जॉब के कुछ हिस्सों को रूट के रूप में कैसे चला सकता हूं, और खुद को अनप्रोफाइल यूजर के रूप में सेवा दे सकता हूं?

जवाबों:


9

upstartकरने के लिए कोई सुविधा नहीं के बराबर है systemdकी PermissionsStartOnlyसेटिंग। नौकरी में सभी प्रक्रियाओं के माध्यम से उपयोगकर्ता सेट के रूप में चलाने के छंद , के रूप में कुकबुक कहते हैं।setuid

इसलिए डेमोंटोल्स की चीजों को करें।

का प्रयोग करें setuidgid, setuidgid, s6-setuidgid, chpst, runuid, या setuidgidमें execछंद:

निष्पादित करें
किसी व्यक्ति को सेट करना
यूनिकॉर्न -D -c /opt/posty_api/unicorn.rb --env उत्पादन >> /var/log/posty/upstart.log 2> & 1

यह एक भयानक लॉगिंग तंत्र है, वैसे। Daemontools तरीका होता है एक उचित, स्वचालित रूप से साइकिल, rotateable-ऑन-डिमांड, आकार से ढकी, का उपयोग कर लॉग ऑन करें multilog, multilog, s6-log, svlogd, tinylog, या cyclogupstartहालांकि, उन लोगों के साथ एकीकृत करने के लिए मुश्किल है, हालांकि, इसकी expectव्यवस्था दी गई है

उम्मीद करना
निष्पादित करें
किसी व्यक्ति को सेट करना
गेंडा -D -c /opt/posty_api/unicorn.rb --env उत्पादन 2> और 1 | \
/ usr / स्थानीय / बिन / chdir / var / लॉग / \
setuidgid log \
साइक्लॉग पोस्टी / यूनिकॉर्न /

( chdirयहाँ noshपैकेज से एक श्रृंखला-लोडिंग है , और सख्ती से आवश्यक नहीं है। लेकिन यह कुछ हद तक कठिन बनाता है।)


स्पष्टीकरण के लिए Thx और लॉगिंग के लिए संकेत। मैं पहले से ही दो upstartjobs, तैयार नौकरी के साथ संदर्भित बनाया start on starting posty। लेकिन लॉगिंग मेरी तरह से बेहतर है।
क्रिश्चियन

0

आप स्क्रिप्ट ब्लॉक में setguid का उपयोग कर सकते हैं और यह केवल दिए गए ब्लॉक को प्रभावित करेगा। कुछ इस तरह:

# Ubuntu upstart file at /etc/init/kafka.conf
description "kafka broker"

limit nofile 32768 32768

start on runlevel [2345]
stop on [!2345]

respawn
respawn limit 2 5

umask 007

kill timeout 300

pre-start script
    # here you are root
    ls -alh /root/
end script

chdir /usr/local/lib/kafka

script
    setuid kafka
    setgid kafka
    # here you are user/group kafka
    /usr/local/lib/kafka/bin/kafka-server-start.sh /usr/local/lib/kafka/config/server.properties
end script

यह मेरे लिए काम नहीं किया। स्क्रिप्ट अनुभाग निष्पादित नहीं करता है।
सप्ताह

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