为什么我的 Upstart 作业可以使用 sudo 工作,但不能使用 setuid 工作?

为什么我的 Upstart 作业可以使用 sudo 工作,但不能使用 setuid 工作?

我有一个 Node.js 应用程序的 Upstart 作业,我想让它以node用户身份而不是运行 Node root。当我setuid在作业配置中使用时,每当我尝试启动作业时,它都会显示my-app stop/waiting。但是,如果我省略setuid但使用execwith 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

setuidUpstart 的行为与sudo导致一个失败而另一个成功的行为之间有何区别?

答案1

setuid节不应放在script块中,它是全局的。这可能是您的作业失败的原因。

请注意,使用setuid将使全部作业阶段按用户指定的方式运行,无法更改。如果您只想以其他用户身份运行守护进程,请避免使用,sudo而改用start-stop-daemon。这对于分叉守护进程尤其重要。检查 Ubuntu 的新贵食谱,详情请参阅第 11.43.2 章。

相关内容