Разрешить всем пользователям группы запускать и останавливать zope с помощью supervisorctl

Я просто делаю некоторые изменения в том, как мы запускаем Zope, следуя недавним рекомендациям по безопасности. В рекомендации говорится:

"Убедитесь, что служба Zope/Plone работает с минимальными привилегиями. В идеале сервисы Zope и ZEO должны иметь возможность записи только в каталоги журналов и данных ".

В настоящее время у нас есть специальный пользователь Linux, который запускает buildout, запускает и останавливает сервер и который запускает сервис Zope. Мы используем http://supervisord.org/ для управления двумя экземплярами Zope, которые мы запускаем параллельно (бэкэнд relstorage).

Нашему текущему пользователю zope нужно разрешение на запись не только в каталог log и data, чтобы он мог запускать buildout, поэтому я решил создать дополнительного пользователя linux, zoperun, для фактического запуска службы zope. zoperun находится в той же группе, что и zope, и имеет только права на запись в каталог var. Все это работает нормально, за исключением одного: я бы хотел, чтобы оригинальный пользователь zope мог запускать и останавливать экземпляры zope, используя supervisorctl.

Я не могу заставить это работать. Например, когда я пытаюсь запустить bin/supervisorctl status я получил

ошибка: [Errno 13] Отказано в доступе: файл: строка: 1

Я думаю, что это потому, что сокет супервизора не имеет групповых разрешений на чтение и запись

srw------- 1 zoperun zopeour 0 30 сентября 09:00 supervisor.sock

Я установил umask = 002 в конфигурации супервизора, но это не влияет на этот сокет superctl.

Есть ли способ, которым я могу достичь того, что я хотел бы?

2 ответа

Решение

Взгляните на раздел unix-http-server. Измените файл конфигурации, как показано ниже:

[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   

Принятый ответ мне не помог. Мне пришлось сделать дополнительный шаг. Я запускаю супервизор на сервере Centos 7.

После изменения файла и изменения переменных в /etc/supervisord.conf

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

Вылезла следующая ошибка:

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

Чтобы решить эту проблему, я изменил переменную serverurl в разделе [supervisorctl], чтобы она указывала на тот же путь в «файле».

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

После этого перезапустите супервизор и проверьте статус, чтобы убедиться, что все в порядке.

      systemctl restart supervisord
systemctl status supervisord

Надеюсь это поможет.

Другие вопросы по тегам