如何通过xmlrpc安全地获得对supervisord的编程访问?

时间:2011-10-21 20:30:12

标签: python linux security xml-rpc supervisord

我需要能够以编程方式管理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。在点子输出中,我看到了行Skipping installation of /usr/local/lib/python2.6/dist-packages/supervisor/__init__.py (namespace package)。我不知道为什么它会跳过命名空间包的安装。

  4. 我应该如何以编程方式安全地与supervisord进行沟通?

1 个答案:

答案 0 :(得分: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