Как я могу безопасно получить программный доступ к супервизору через xmlrpc? - PullRequest
4 голосов
/ 22 октября 2011

Мне нужно иметь возможность управлять настройкой супервизора программно. Кроме того, ни один пользователь в системе не должен иметь возможность получить доступ к конфигурации супервизора. По этой причине связь должна быть как-то защищена.

Я знаю, что supervisord предлагает программный доступ в форме XML-RPC. Я прочитал документацию и попытался поработать с ней несколькими способами, но продолжаю сталкиваться с проблемами.

  1. На странице Введение документация рекомендует запустить HTTP-сервер для интерфейса XML-RPC и использовать стандартную библиотеку Python xmlrpclib для связи с ним. Здесь есть две проблемы:

    • Директива inet_http_server для supervisord.conf содержит только имя пользователя, пароль и порт в качестве настроек. Нет возможности зашифровать соединение.
    • xmlrpclib даже не поддерживает имена пользователей и пароли. Когда я использую синтаксис username:password@host:port, я получаю IOError: unsupported XML-RPC protocol. Как видно из примера на странице документации, аутентификация не выполняется.
  2. Поскольку сокеты UNIX безопасны, я подумал, что было бы неплохо подключиться к [unix_http_server] с помощью xmlrpclib. Тем не менее, я не знаю, как будет работать аутентификация, и, кроме того, xmlrpclib поддерживает только сетевые серверы HTTP / HTTPS.

  3. На другой странице документации упоминается модуль supervisor.rpcinterface. У меня нет доступа к такой вещи в Python, хотя. Чтобы получить больше информации о том, почему это так, я переустановил supervisord с Pip. sudo pip install --upgrade supervisor. В выводе пипса я вижу строку Skipping installation of /usr/local/lib/python2.6/dist-packages/supervisor/__init__.py (namespace package). Я не знаю, почему он пропустит установку пакета пространства имен.

Как я могу программно и безопасно общаться с супервизором?

1 Ответ

1 голос
/ 28 октября 2011

Supervisor поддерживает опции для установки разрешений для сокета домена Unix.

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

Я не знаю деталей, но вы должны иметь возможность вызывать интерфейс xmlrpc через сокет домена UNIX так же, как это делает supervisorctl.py. Он вызывает options.getServerProxy (), чтобы получить объект xmlrpclib.ServerProxy.

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

...