Supervisord 使用错误的 setuid 启动

Supervisord 使用错误的 setuid 启动

我正在尝试测试一个试点系统,该系统nginx连接到uwsgi由 ubuntu-server 上运行控制的服务应用程序supervisord。应用程序是用 Python 编写的,使用虚拟环境中的 Flask,但我不确定这是否相关。为了测试系统,我用 创建了一个简单的 hello world flask。我希望 nginx 和 uwsgi 都以 www-data 用户身份运行。
如果我uwsgi从 root shell“手动”启动,我可以看到 uwsgi 进程以适当的用户(www-data)身份运行。但是,如果我启动supervisor应用程序,会发生一些奇怪的事情 - uwsgi 进程在我的用户(friendzis)下运行。因此,套接字文件在错误的用户下创建,nginx 无法与我的应用程序通信。
笔记: Linux 服务器Hyper-V在 Windows Server 2008 下作为 VM 运行。

相关配置:

[uwsgi]

socket = /var/www/sockets/cowsay.sock
chmod-socket = 666
abstract-socket = false

master = true
workers = 2

uid = www-data
gid = www-data

chdir = /var/www/cowsay/cowsay
pp = /var/www/cowsay/cowsay
pyhome = /var/www/cowsay
module = cowsay
callable = app

导师

[program:cowsay]
command = /var/www/cowsay/bin/uwsgi -s /var/www/sockets/cowsay.sock -w cowsay:app
directory = /var/www/cowsay/cowsay
user = www-data
autostart = true
autorestart = true
stdout_logfile = /var/www/cowsay/log/supervisor.log
redirect_stderr = true
stopsignal = QUIT

我肯定我遗漏了一些细节,但我没注意到。如果能提供任何建议,我将不胜感激。

答案1

您应该environment在程序部分指定一个选项。例如:

user=chrism
environment=HOME="/home/chrism",USER="chrism"

子进程环境了解详情。

此外,还提出了类似的解决方案堆栈溢出

答案2

您如何运行supervisord?您确定没有从shell(使用您的uid)运行它吗?

你确定你需要supervisord吗?你可以轻松地将uWSGI附加到upstart或systemd(最终使用uWSGI Emperor)

相关内容