如何在Upstart中以非特权用户身份启动作业?


14

我正在使用ubuntu 10.4 LTS的最新新贵版本。upstart是通过--debug内核标志启动的。

我正在为nzbget守护程序进行自定义作业配置。基本上,此作业具有安装文件系统的启动前脚本,卸载文件系统的启动后脚本和exec nzbget -D一行。

问题在于nzbget守护程序需要以非特权用户身份运行。此功能已包含在nzbget中。确实,当我从控制台运行时,sudo nzbget -D该进程以非特权用户身份运行。但是,当我用该exec nzbget -D行开始启动工作时,进程nzbget -D将以root身份运行。正如新贵食谱中所说的那样,我尝试使用su -c“ nzbget -D”用户以及start-stop-daemon都没有建议的期望节。但是对于这两个命令,由于新贵跟踪错误的PID,我猜它在启动过程结束时将主进程视为已终止(由于新贵日志),因此,它启动了我不需要的后处理脚本。

=>我该怎么办?exec nzbget -Dupstart命令如何使进程以root身份运行,而sudo nzbget -D命令使它以非特权用户身份运行又如何呢?

Answers:


12

1.4版的发布取得了一些进展:

新的“ setuid”和“ setgid”节允许系统作业在与给定名称/组相对应的指定uid / gid下运行。

您可以从其LaunchPad页面上获取它,但是(奇怪的是)我看不到PPA,因此您可能必须自己编译它。

否则,请在exec命令中使用susudo,如下所示:

su -c "<commands>" <username>
sudo -u <username> <commands>

他们俩几乎都做同样的事情,所以选择最开心的人。因此,使用您的示例命令:

exec sudo -u me "nzbget -D"

域名upstart.at是不死
法尔肯教授合约突破

谢谢你!我是否应该使用会话初始化/工作等并不清楚我的新贵文档
卢克Hoersten

4

我建议将sudo使用以下语法:

sudo -u foouser foocommand

这将以用户foouser的身份运行命令foocommand。

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.