Node.js アプリケーション用の Upstart ジョブがあり、node
ではなくユーザーとして Node を実行するようにしたいと考えています。ジョブ設定で をroot
使用すると、ジョブを開始しようとするたびに が表示されます。ただし、 を省略してを使用すると、期待どおりに動作します。setuid
my-app stop/waiting
setuid
exec
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章を参照してください。