【问题标题】:How can I securely gain programmatic access to supervisord via xmlrpc?如何通过 xmlrpc 安全地以编程方式访问 supervisord?
【发布时间】:2011-12-12 21:17:07
【问题描述】:

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

我知道 supervisord 以 XML-RPC 的形式提供编程访问。我阅读了文档并尝试以多种方式使用它,但我一直遇到问题。

  1. Introduction page 上,文档建议为 XML-RPC 接口运行 HTTP 服务器并使用 Python 标准库 xmlrpclib 与其通信。这里有两个问题:

    • supervisord.conf 的inet_http_server 指令仅包含用户名、密码和端口作为设置。没有加密连接的选项。
    • 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 通信?

【问题讨论】:

    标签: python linux security xml-rpc supervisord


    【解决方案1】:

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

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

    我不知道细节,但您应该能够像 supervisorctl.py 一样通过 UNIX 域套接字调用 xmlrpc 接口。它调用 options.getServerProxy() 来获取一个 xmlrpclib.ServerProxy 对象。

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

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多