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 мне нужны права root. Как я могу запустить некоторые части задания upstart от имени пользователя root, а саму службу - как непривилегированного пользователя?

2 ответа2

9

upstart не имеет средства, эквивалентного параметру systemd PermissionsStartOnly . Все процессы в задании выполняются в соответствии с настройками, заданными пользователем в разделе setuid .

Так делают вещи, как это делают daemontools.

Используйте setuidgid, setuidgid, s6-setuidgid, chpst, runuid или setuidgid в разделе exec :

exec \
setuidgid somebody \
unicorn -D -c /opt/posty_api/unicorn.rb --env production >> /var/log/posty/upstart.log 2>&1

Кстати, это ужасный механизм регистрации. Путь daemontools будет иметь правильный, автоматически циклический, вращающийся по требованию, ограниченный по размеру, журнал, используя multilog, multilog, s6-log, svlogd, tinylog или cyclog. upstart сложно интегрировать с ними, учитывая его expect механизм.

expect fork
exec \
setuidgid somebody \
unicorn -D -c /opt/posty_api/unicorn.rb --env production 2>&1 | \
/usr/local/bin/chdir /var/log/ \
setuidgid log \
cyclog posty/unicorn/

(Здесь chdir - цепочечный загрузчик из пакета nosh , и он не является строго обязательным. Но это делает вещи несколько опрятнее.)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .