Upstart:以非特权用户身份运行服务,并以root用户身份启动预启动脚本


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权限。如何以root用户身份运行upstart作业的某些部分,如何以非特权用户身份运行服务本身?

Answers:


9

upstart没有与systemdPermissionsStartOnly设置等效的功能。在作业的所有进程运行为通过用户设定setuid,如食谱说。

daemontools方式也是如此。

使用setuidgidsetuidgids6-setuidgidchpstrunuid,或setuidgidexec节:

exec \
setuidgid有人
unicorn -D -c /opt/posty_api/unicorn.rb --env生产>> /var/log/posty/upstart.log 2>&1

顺便说一下,这是一个糟糕的日志记录机制。该daemontools的方式将有一个适当的,自动循环,rotateable点播,大小皑皑,登录使用multilogmultilogs6-logsvlogdtinylog,或cyclogupstart但是,鉴于其expect机制,将它们与这些元素集成起来非常棘手。

期待叉
exec \
setuidgid有人
独角兽-D -c /opt/posty_api/unicorn.rb --env生产2>&1 | \
/ usr / local / bin / chdir / var / log / \
setuidgid日志
Cyclg post /独角兽/

(这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错误。
RovingBlade
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.