uWSGI皇帝模式抛出“ setgroups():不允许的操作[core / emperor.c第1189行]”

时间:2018-07-25 13:17:12

标签: python uwsgi fedora-28

我正在将组织使用的一些python Web应用程序迁移到功能更强大且配置更好的 Fedora 28数字海洋小滴。我认为这是部署pgAdmin4的绝佳机会,以帮助轻松管理数据库。我使用NGINX作为Web服务器,更喜欢使用uWSGI作为应用程序网关服务器。 pgAdmin是Flask应用程序,我继续进行此过程。但是我面临着一个我从未遇到过的问题。

我从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,但无法理解为什么会发生或如何解决。基本配置以前已用于许多flask和django应用程序,但我在这里找不到问题。另外,如果我使用“ pgadmin”用户SSH进入服务器,则可以从终端使用uwsgi成功运行wsgi应用程序(详细信息如下)。我也不想以root用户身份运行uwsgi。

系统配置如下:

我需要运行uWSGI的自编译版本,因为我有一些在python 2.7上运行的旧版应用程序,并且所有新内容都是使用python 3制作的。因此,我使用说明here编译了uWSGI 2.0.17.1。 。由于这样安装uWSGI不会自动创建必要的服务单元,用户或目录,因此我将它们全部安装了,并且uWSGI这样运行时没有很多问题。但是皇帝的服务单元文件和uWSGI ini文件如下:

/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。

此后,我在“ / webapps / pagadmin”创建了一个名为pgadmin的用户,该用户包含python 3 virtualenv,其中我使用提供的官方python wheel安装了pgAdmin4。我还有一个名为“ 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'

最后一块是pgadmin应用程序的uwsgi ini文件,我认为这是由以下原因引起的:

[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 个答案:

没有答案