ユーザーがスーパーバイザーで再起動できるプロセスを制限しますか?


14

Djangoサイトを実行しているGunicornプロセスを管理するためにスーパーバイザーを使用しましたが、この質問はスーパーバイザーによって管理されているものに関係する可能性があります。以前は、サーバーを管理および使用する唯一の人物であり、スーパーバイザーはrootとして実行されsupervisorctl restart myapp、必要に応じてsudoを使用して実行していました。

サーバーは異なるサイトで作業する複数のユーザーをサポートする必要があり、各プロジェクトは他のユーザーのプロセスを再起動することなく、独自のgunicornプロセスを再起動できる必要があります。

このブログ投稿をフォローしました。

http://drumcoder.co.uk/blog/2010/nov/24/running-supervisorctl-non-root/

また、root以外のユーザーがSupervisorctlを使用できるようになりましたが、今では誰でも他のユーザーのプロセスを再起動できます。見た目では、スーパーバイザーにはユーザーごとのアクセス制御を行う方法がありません。

ユーザーがルートなしで自分のプロセスのみを再起動できるようにする方法についてのアイデアはありますか?

編集:私たちが考えたいくつかのことには、rootが所有するスクリプトを、suidビットを設定して、何も含まないものを記述し、所有してsupervisorctl restart myappいるユーザーのディレクトリに置くことが含まれますmyapp。インターネットは、そのようなスクリプトが誤って実行された場合、安全でないと言っているようです。また、特定のユーザーからのコマンドをリッスンし、ユーザーに許可がある場合はスーパーバイザープロセスを再起動するカスタムデーモンを作成することも検討しました。より単純なソリューションが機能する場合、このアイデアは過度に複雑に思えます。

回答:


33

sudoカスタムスクリプトの代わりに使用して、同じことを実現できます。つまり、supervisordrootのみが実行できるデフォルトの構成を指定すると、次のsupervisorctlようなエントリを次のように入力できます/etc/sudoers

alice ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app1
bob ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart app2

これにより、パスワードを入力せずにrootとしてalice実行sudo /usr/bin/supervisorctl restart app1できbob、再起動できapp2ます。


ああ、素晴らしい。これはまさに私が探していたものです。ご協力いただきありがとうございます!
-davidscolgan

1
あなたはこの文字列を追加する必要があることを念頭に置いた後のようなルール%sudo ALL=(ALL:ALL) ALL
ПавелТявин
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.