如何通过xmlrpc安全地获取对supervisord的程序访问权限?

4 投票
1 回答
2112 浏览
提问于 2025-04-17 04:46

我需要能够以编程的方式管理 supervisord 的设置。此外,系统上的任何用户都不应该能够访问 supervisord 的配置。因此,通信需要以某种方式进行加密。

我知道 supervisord 提供了通过 XML-RPC 进行编程访问的功能。我阅读了相关文档,并尝试了几种方法,但总是遇到问题。

  1. 介绍页面上,文档建议为 XML-RPC 接口运行一个 HTTP 服务器,并使用 Python 标准库中的 xmlrpclib 来进行通信。这里有两个问题:

    • inet_http_server 指令在 supervisord.conf 中只包含用户名、密码和端口作为设置,没有选项可以加密连接。
    • xmlrpclib 甚至不支持用户名和密码。当我使用 username:password@host:port 的语法时,出现 IOError: unsupported XML-RPC protocol 的错误。正如文档页面上的示例所示,没有进行身份验证。
  2. 由于 UNIX 套接字是安全的,我想通过 xmlrpclib 连接到 [unix_http_server] 是个好主意。不过,我不知道身份验证该怎么进行,而且 xmlrpclib 只支持网络 HTTP/HTTPS 服务器。

  3. 文档中的另一页提到一个 supervisor.rpcinterface 模块。但我在 Python 中无法访问这个模块。为了了解更多信息,我用 Pip 重新安装了 supervisord。执行了 sudo pip install --upgrade supervisor。在 pip 的输出中,我看到一行 Skipping installation of /usr/local/lib/python2.6/dist-packages/supervisor/__init__.py (namespace package)。我不知道为什么会跳过命名空间包的安装。

我该如何以编程的方式安全地与 supervisord 进行通信呢?

1 个回答

1

Supervisor支持在Unix域套接字上设置权限的选项。

http://supervisord.org/configuration.html#unix-http-server-section-example

我不太清楚具体细节,但你应该可以通过Unix域套接字调用xmlrpc接口,就像supervisorctl.py那样。它是通过调用options.getServerProxy()来获取一个xmlrpclib.ServerProxy对象。

https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py#L188

撰写回答