web-dev-qa-db-ja.com

グループのすべてのユーザーがsupervisorctlを使用してzopeを開始および停止できるようにする

最近の セキュリティアドバイザリ に従って、Zopeの実行方法にいくつかの変更を加えています。アドバイザリでは、次のように述べています。

「Zope/Ploneサービスが最小限の権限で実行されていることを確認してください。理想的には、ZopeおよびZEOサービスは、ログおよびデータディレクトリにのみ書き込むことができる必要があります。」

現在、ビルドアウトを実行し、サーバーを起動および停止し、Zopeサービスを実行する専用のLinuxユーザーがいます。 supervisord を使用して、並行して実行する2つのZopeインスタンス(relstorageバックエンド)を管理しています。

現在のzopeユーザーは、ビルドアウトを実行できるように、ログとデータディレクトリ以外の書き込み権限が必要なので、実際にzopeサービスを実行するために追加のLinuxユーザーzoperunを作成することにしました。 zoperunはzopeと同じグループにあり、varディレクトリに対する書き込み権限しか持っていません。これは、1つのことを除いてすべて正常に機能しています。元のzopeユーザーがsupervisorctlを使用してzopeインスタンスを開始および停止できるようにしたいのです。

これを機能させることができません。たとえば、bin/supervisorctl statusを実行しようとすると

エラー:、[Errno 13]アクセスが拒否されました:ファイル:行:1

これは、スーパーバイザソケットにグループの読み取りおよび書き込み権限がないためだと思います

srw ------- 1 zoperun zopeour 09月30日09:00supervisor.sock

スーパーバイザー構成でumask = 002を設定しましたが、これはこのsuperctlソケットには影響しません。

私が望むことを達成する方法はありますか?

2
scarba05

nix-http-server セクションを見てください。構成ファイルを次のように変更します。

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
chmod=0770                  ; sockef file mode (default 0700)
chown=zope:zoperun          ; socket file uid:gid owner
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

これにより、zoperunグループのユーザーがソケットファイルを読み書きできるようになります。

ll /tmp/supervisor.sock 
srwxrwx--- 1 zope zoperun 0 Sep 30 16:54 /tmp/supervisor.sock

最後に、Zopeインスタンスの開始/停止を許可するすべてのユーザーをzoperunグループに追加し、通常のユーザーでテストすると、次のように表示されます。

$ supervisorctl status
foo                              STARTING   
6
quanta