Upstartで非特権ユーザーとしてジョブを開始するにはどうすればよいですか?


14

私はubuntu 10.4 LTSの最新のスタートアップバージョンを使用しています。upstartは、-debugカーネルフラグで起動されます。

nzbgetデーモンのカスタムジョブ構成を作成しています。基本的に、このジョブには、ファイルシステムをマウントする開始前スクリプト、ファイルシステムをアンマウントする開始後スクリプト、およびexec nzbget -D行があります。

問題は、nzbgetデーモンが特権を持たないユーザーとして実行する必要があることです。この機能はすでにnzbgetに含まれています。実際、コンソールから実行するとsudo nzbget -D、プロセスは非特権ユーザーとして実行されます。しかし、このexec nzbget -D行でupstartジョブを開始すると、プロセスnzbget -Dがルートとして実行されます。upstart cookbookで述べたように、su -c "nzbget -D"ユーザーとstart-stop-daemonの両方を使用しようとしましたが、どちらもアドバイスどおりのスタンザを期待していませんでした。しかし、両方のコマンドについて、upstartは間違ったPIDを追跡するため、開始プロセスの終了時にメインプロセスが強制終了(upstartログが原因で)されているように見えるため、望まないポストプロセススクリプトを起動します。

=>どうすれば正しくできますか?それはどのようにということであるexec nzbget -Dのに対し、成り上がりのコマンドはrootとして、プロセスの実行を作るsudo nzbget -Dコマンドは、それが非privillegedユーザーとして実行するのですか?

回答:


12

バージョン1.4のリリースにはいくつかの進歩がありました。

指定された名前/グループに対応する指定されたuid / gidの下でシステムジョブを実行できるようにする新しい「setuid」および「setgid」スタンザ。

LaunchPadページから取得できますが、(奇妙なことに)PPAが表示されないため、自分でコンパイルする必要があります。

そうでsuない場合は、またはsudoexecコマンドで次のように使用します。

su -c "<commands>" <username>
sudo -u <username> <commands>

どちらもほぼ同じことをするので、どちらが幸せかを選んでください。例のコマンドを使用して:

exec sudo -u me "nzbget -D"

ドメイン名upstart.atはアンデッドです
ファルケン教授はモニカをサポートします

これをありがとう!私はセッションの初期化を使用する必要がある場合は/などジョブズ成り上がりのドキュメントに私には明確ではなかった
ルークHoersten

4

次の構文でsudoを使用することをお勧めします。

sudo -u foouser foocommand

これにより、コマンドfoocommandがユーザーfoouserとして実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.