Upstart:通常のユーザーがカスタムサービスを停止および開始できるようにする


16

upstartを使用して起動時にWebサーバーアプリケーションを開始しました。これは、スタートアップスクリプトです。

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

これは、Ubuntuサーバー10.04 LTSで問題なく動作し、非常に満足しています。

ただし、SSHを使用してmainuser(これはsudoerではありません)としてログインし、作業ディレクトリを最新の展開バージョンに更新する展開シェルスクリプトがあります。

ここでの問題は、アプリケーションが新しいソースファイルをロードするために、サービスを再起動する必要があることです。ただし、mainuser...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

...それを止めようとするとき。実行するsudo stop webapp必要がありますが、このユーザーはsudoerではないため、これを実行できません。セキュリティ上の理由から、私も彼をsudoerにしたくありません。また、sudoパスワードを挿入したくありません。

だから、どのように私は許可しないmainuserで実行するstop webappstart webapp


1
ユーザーをsudoersに追加することで、どのようなセキュリティの問題が心配ですか?ユーザーに特定のコマンドのみを許可するルールを記述できます。また、パスワードプロンプトを回避するnopasswdオプションを含めることもできます。取得する特定のエラーについては、開始/停止が/ sbinにあるためです。これは通常、通常のユーザーのパスの一部ではありません。したがって、「/ sbin / stop」を実行するか、パスにsbinを追加できます。これは、ルートを必要とする起動/停止スクリプトに他の項目がない限り機能する場合があります。
デレクプレスナル

@DerekPressnall、ありがとう、しかし私が走るとき私/sbin/stop webappは得るstop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directorymainuserこのコマンドの実行のみを許可するにはどうすればよいですか?
トム

このエラーは、このユーザーが管理者権限を持っていないことが原因です。
トム

回答:


31

sudoは非常に構成可能であり、このユーザーがパスワードを要求せずに限られたコマンドセットを実行できるようにすることができます。次の行は/etc/sudoersあなたが望むことをするはずです:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp

1
素晴らしい、ありがとう。あなたは本当にこれからすべてを学びましたman sudoersか?解析が非常に難しいことがわかりました。
トム

1
いいえ、私はこれを以前にやったことがあります。解読するのが最も簡単なマンページではありません:-)
mgorven

で失敗しUnable to connect to system busます。詳細:非sudoグループがUpstartジョブを制御できるようにする
-ciastek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.