為什麼我的 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

setuid新貴的行為和sudo導致一個失敗而另一個成功的行為之間有什麼區別?

答案1

setuid節不應該在script區塊中,它是全域的。這可能就是你工作失敗的原因。

請注意,使用setuid將使全部作業階段按照使用者指定的方式運行,並且無法變更它。如果您只想以其他使用者身分執行守護程序,請避免sudo並使用start-stop-daemon。這對於分叉守護程序尤其重要。檢查 Ubuntu 的新貴食譜,第 11.43.2 章了解詳細資訊。

相關內容