允许组内的所有用户使用 Supervisorctl 启动和停止 zope

允许组内的所有用户使用 Supervisorctl 启动和停止 zope

我只是根据最近的情况对我们运行 Zope 的方式做了一些改变安全通告. 公告中称:

“确保 Zope/Plone 服务以最低权限运行。理想情况下,Zope 和 ZEO 服务应该只能写入日志和数据目录。”

目前我们有一个专门的 Linux 用户,负责运行 buildout、启动和停止服务器以及运行 Zope 服务。我们正在使用主管管理我们并行运行的两个 Zope 实例(relstorage 后端)。

我们当前的 zope 用户需要对日志和数据目录以外的内容具有写入权限,以便能够运行 buildout,因此我选择创建一个额外的 linux 用户 zoperun 来实际运行 zope 服务。zoperun 与 zope 属于同一组,并且仅对 var 目录具有写入权限。除了一件事之外,一切都运行正常:我希望原始 zope 用户能够使用 Supervisorctl 启动和停止 zope 实例。

我无法让它工作。例如,当我尝试运行时,bin/supervisorctl status我得到

错误:,[Errno 13] 权限被拒绝:文件:行:1

我认为这是因为监督者套接字没有组读写权限

srw------- 1 zoperun zopeour 0 9月30日 09:00 executive.sock

我已经umask = 002在supervisord配置中设置了,但这对这个superctl套接字没有影响。

有什么方法可以实现我的愿望吗?

答案1

看一眼unix-http 服务器部分。按如下方式更改您的配置文件:

[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   

答案2

接受的答案对我不起作用。我不得不多做一步。我在 centos 7 服务器上运行主管。

在 /etc/supervisord.conf 中更改文件和 chown 变量后

file=/tmp/supervisor.sock       ;custom
chown=carlos:mygroup       ; socket file uid:gid owner

出现以下错误:

unix:///var/run/supervisor/supervisor.sock no such file

为了解决这个问题,我更改了 [supervisorctl] 部分下的变量 serverurl,使其指向“文件”中的相同路径。

serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

此后,重新启动主管并检查状态以确保一切正常。

systemctl restart supervisord
systemctl status supervisord

希望这可以帮助。

相关内容