我有一个Node.js应用程序的Upstart作业,我想让它运行节点作为node用户,而不是root 。 当我在作业configuration中使用setuid时,只要我尝试启动作业,它就会显示my-app stop/waiting 。 但是,如果我省略了setuid但是使用sudo exec ,则按照我的预期工作。
我已经创buildnode作为系统用户。 据我所知,所有相关的文件和目录都可以被这个用户访问。 我使用的Upstart版本是1.12.1。
configurationsetuid :
script setuid node chdir /var/app/my-app exec nodejs server.js end script
与使用sudo的configuration相比:
script chdir /var/app/my-app exec sudo -u node nodejs server.js end script
Upstart的setuid行为和sudo行为之间会有什么不同?
setuid节不应该在script块,它是全球性的。 这可能是你的工作失败的原因。
请注意,使用setuid将使所有作业阶段按用户指定的方式运行,并且无法对其进行更改。 如果您想以不同的用户身份运行一个守护进程,请避免使用sudo ,而是使用start-stop-daemon 。 这对于分支守护进程尤为重要。 有关详细信息,请查阅Ubuntu的Upstart Cookbook ,第11.43.2章。