Разрешить всем пользователям группы запускать и останавливать 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
Надеюсь это поможет.