如何在Upstart中以非特权用户身份开始工作?
我正在使用ubuntu 10.4 LTS的最新upstart版本。 使用–debug内核标志启动upstart。
我正在为nzbget守护进程进行自定义作业配置。 基本上,这个作业有一个预启动脚本,用于安装文件系统,一个卸载文件系统的启动后脚本和一个exec nzbget -D
行。
问题是nzbget守护程序需要作为非特权用户运行。 此function已包含在nzbget中。 实际上,当我从控制台sudo nzbget -D
运行时,该进程作为非特权用户运行。 但是当我使用exec nzbget -D
行启动upstart作业时,进程nzbget -D以root身份运行。 正如在新贵的食谱中所说的那样,我尝试使用su -c“nzbget -D”用户以及start-stop-daemon,而不需要预期的节。 但对于这两个命令,由于upstart跟踪错误的PID我猜,它在启动过程结束时看到主进程被杀死(由于upstart日志),因此,它启动了我不想要的后处理脚本。
=>我该怎么办呢? exec nzbget -D
upstart命令如何使进程以root sudo nzbget -D
运行,而sudo nzbget -D
命令使它作为非特权用户运行?
版本1.4的发布取得了一些进展:
新的“setuid”和“setgid”节允许系统作业在与给定名称/组对应的指定uid / gid下运行。
您可以从LaunchPad页面获取它,但(奇怪的是)我看不到PPA,因此您可能需要自己编译。
否则,在exec命令中使用su
或sudo
,如下所示:
su -c "" sudo -u
他们都做了几乎相同的事情,所以选择你最开心的。 所以使用你的示例命令:
exec sudo -u me "nzbget -D"
我建议使用sudo语法如下:
sudo -u foouser foocommand
这将命令foocommand作为用户foouser运行。