如何在 Upstart 中以非特权用户身份开始工作?

ash*_*she 14 root upstart

我正在为 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 两者都没有按照建议的期望节。但是对于这两个命令,当 upstart 跟踪错误的 PID 时,我猜它会在启动过程结束时看到主进程被杀死(由于 upstart 日志),因此,它启动了我不想要的后处理脚本。

=> 我怎样才能做对?exec nzbget -Dupstart 命令如何使进程以 root 身份运行而sudo nzbget -Dcommand 使其以非特权用户身份运行?

Oli*_*Oli 12

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

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

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

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

su -c "<commands>" <username>
sudo -u <username> <commands>
Run Code Online (Sandbox Code Playgroud)

他们都做几乎相同的事情,所以选择你最满意的那个。因此,使用您的示例命令:

exec sudo -u me "nzbget -D"
Run Code Online (Sandbox Code Playgroud)


Mic*_*l K 4

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

sudo -u foouser foocommand
Run Code Online (Sandbox Code Playgroud)

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