我有一個 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
新貴的行為和sudo
導致一個失敗而另一個成功的行為之間有什麼區別?
答案1
該setuid
節不應該在script
區塊中,它是全域的。這可能就是你工作失敗的原因。
請注意,使用setuid
將使全部作業階段按照使用者指定的方式運行,並且無法變更它。如果您只想以其他使用者身分執行守護程序,請避免sudo
並使用start-stop-daemon
。這對於分叉守護程序尤其重要。檢查 Ubuntu 的新貴食譜,第 11.43.2 章了解詳細資訊。