UWSGI режим императора "setgroups(): операция не разрешена [core/emperor.c line 1189]"

Я нахожусь в процессе миграции нескольких веб-приложений на python, используемых моей организацией, на более мощную и лучше сконфигурированную цифровую океаническую каплю Fedora 28. Я подумал, что это прекрасная возможность развернуть pgAdmin4, чтобы упростить управление базами данных. Я использую NGINX в качестве веб-сервера и предпочитаю использовать uWSGI в качестве сервера шлюза приложений. Будучи приложением для колб, pgAdmin продолжил процесс. Но я сталкиваюсь с этой проблемой, с которой я никогда не сталкивался.

Я получаю следующую ошибку из journalctl:

Jul 25 18:07:03 localhost.localdomain systemd[1]: Started uWSGI Emperor Service.
Jul 25 18:07:03 localhost.localdomain uwsgi[26445]: *** Stats server enabled on /run/uwsgi/stats.sock fd: 11 ***
Jul 25 18:07:03 localhost.localdomain uwsgi[26445]: *** starting uWSGI Emperor ***
Jul 25 18:07:03 localhost.localdomain uwsgi[26445]: [emperor-tyrant] dropping privileges to 989 989 for instance pgadmin.ini
Jul 25 18:07:03 localhost.localdomain uwsgi[26445]: setgroups(): Operation not permitted [core/emperor.c line 1189]
Jul 25 18:07:03 localhost.localdomain uwsgi[26445]: Wed Jul 25 18:07:03 2018 - [emperor] curse the uwsgi instance pgadmin.ini (pid: 26447)
Jul 25 18:07:06 localhost.localdomain uwsgi[26445]: Wed Jul 25 18:07:06 2018 - [emperor] removed uwsgi instance pgadmin.ini
Jul 25 18:07:09 localhost.localdomain uwsgi[26445]: [emperor-tyrant] dropping privileges to 989 989 for instance pgadmin.ini
Jul 25 18:07:09 localhost.localdomain uwsgi[26445]: setgroups(): Operation not permitted [core/emperor.c line 1189]
Jul 25 18:07:09 localhost.localdomain uwsgi[26445]: Wed Jul 25 18:07:09 2018 - [emperor] curse the uwsgi instance pgadmin.ini (pid: 26454)
Jul 25 18:07:12 localhost.localdomain uwsgi[26445]: Wed Jul 25 18:07:12 2018 - [emperor] removed uwsgi instance pgadmin.ini

Я вижу, что он пытается установить GID после отказа от привилегий судна, но не может понять, почему это происходит или как его решить. Базовая конфигурация ранее использовалась для многих приложений фляги и django, и я просто не могу найти проблему здесь. Кроме того, я могу успешно запустить приложение wsgi, используя uwsgi из терминала, если я ssh на сервер, используя пользователя "pgadmin" (подробно описано ниже). Я также не хочу запускать uwsgi от имени пользователя root.

Конфигурация системы выглядит следующим образом:

Мне нужно запустить самостоятельно скомпилированную версию uWSGI, так как у меня есть несколько устаревших приложений, работающих на python 2.7, и все новые вещи сделаны с использованием python 3. Поэтому я скомпилировал uWSGI 2.0.17.1, используя инструкции здесь. Поскольку при такой установке uWSGI автоматически не создаются необходимые сервисные блоки, пользователи или каталоги, я сделал все из них, и uWSGI как таковой работает без особых проблем. Но файл сервисного модуля и INI-файл uWSGI для императора выглядит следующим образом:

/etc/uwsgi.ini

[uwsgi]
uid = uwsgi
gid = uwsgi
pid = /run/uwsgi/uwsgi.pid
emperor = /etc/uwsgi.d
stats =  /run/uwsgi/stats.sock
chmod-socket = 660
emperor-tyrant = true
cap = setgid,setuid

/usr/lib/systemd/system/uwsgi.service

[Unit]
Description=uWSGI Emperor Service
After=syslog.target

[Service]
EnvironmentFile=-/etc/sysconfig/uwsgi
ExecStartPre=/bin/mkdir -p /run/uwsgi
ExecStartPre=/bin/chown uwsgi:uwsgi /run/uwsgi
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi.ini
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
Restart=always
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Я также создал системного пользователя uwsgi и группу uwsgi.

После этого я создал пользователя с именем pgadmin и home по адресу "/webapps/pagadmin", в котором содержится python 3 virtualenv, в который я установил pgAdmin4, используя предоставленное официальное колесо python. У меня также есть группа под названием "webapps", в которую были добавлены пользователи pgadmin и uwsgi, чтобы посмотреть, решит ли это мои проблемы. В документации по pgadmin показано, как использовать файл config_local.py, и я использовал здесь то же самое, и все используемые каталоги были созданы, а право собственности установлено правильно.

LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
STORAGE_DIR = '/var/lib/pgadmin4/storage'

Последний фрагмент - это файл uwsgi ini для приложения pgadmin, и я думаю, что проблема в этом:

[uwsgi]
socket = 127.0.0.1:3031
chmod-socket = 664
uid     = pgadmin
gid     = webapps
master  = true
enable-threads = true
processes = 1
plugin = /usr/local/lib/uwsgi/python36

venv = /webapps/pgadmin/venv
pythonpath = /webapps/pgadmin/venv/lib/python3.6/site-packages/pgadmin4
chdir      = /webapps/pgadmin/venv/lib/python3.6/site-packages/pgadmin4
module     = wsgi
pidfile    = /webapps/pgadmin/pgadmin.pid
vacuum     = true

0 ответов

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