最近の セキュリティアドバイザリ に従って、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ソケットには影響しません。
私が望むことを達成する方法はありますか?
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