我有一个 Node.js 应用程序的 Upstart 作业,我想让它以node
用户身份而不是运行 Node root
。当我setuid
在作业配置中使用时,每当我尝试启动作业时,它都会显示my-app stop/waiting
。但是,如果我省略setuid
但使用exec
with sudo
,它会按我的预期工作。
我已创建node
为系统用户。据我所知,该用户可以访问所有相关文件和目录。我使用的 Upstart 版本是 1.12.1。
配置setuid
:
script
setuid node
chdir /var/app/my-app
exec nodejs server.js
end script
与配置相比sudo
:
script
chdir /var/app/my-app
exec sudo -u node nodejs server.js
end script
setuid
Upstart 的行为与sudo
导致一个失败而另一个成功的行为之间有何区别?
答案1
该setuid
节不应放在script
块中,它是全局的。这可能是您的作业失败的原因。
请注意,使用setuid
将使全部作业阶段按用户指定的方式运行,无法更改。如果您只想以其他用户身份运行守护进程,请避免使用,sudo
而改用start-stop-daemon
。这对于分叉守护进程尤其重要。检查 Ubuntu 的新贵食谱,详情请参阅第 11.43.2 章。