uWSGI皇帝:非root用户无法访问权限。

3

我尝试在二进制文件本身上使用标志(--uid www-data --gid www-data),并在我的配置中设置它:

    uid = www-data
    gid = www-data

但是套接字始终与我正在使用的帐户一起生成,因此我从nginx中获得了权限被拒绝的错误。
有人知道这是为什么吗?
附加问题:有人知道nginx和uwsgi设置用户的位置吗?我有另一个服务器已经运行了很长时间,它在任何配置文件中都没有设置uid或gid,但所有内容都像应该一样使用www-data。
答案:显然,如果您像我尝试的那样从终端启动服务,即(user@server:~/$ uwsgi --uid www-data --gid www-data),它将始终以调用它的用户身份启动和运行,这就解释了为什么我感觉它没有遵守我的uid和gid标志。当我按下面所述运行它时,它确实以正确的用户/组www-data运行。
更新:
我正在按照您所说的方式启动uWSGI,“sudo service uwsgi start”,这应该触发此文件(/etc/init/uwsgi.conf):
description "uWSGI"
start on runlevel [2345]
stop on runlevel [06]
respawn

env UWSGI=/home/ccadmin/.local/bin/uwsgi
env LOGTO=/var/log/uwsgi/emperor.log

exec $UWSGI --master --emperor /etc/uwsgi/vassals --die-on-term --uid www-data --gid www-data --logto $LOGTO

然而,使用这个配置后,我的emperor.log文件显示:
execvp(): Permission denied [core/emperor.c line 1481]
[emperor] binary path: /home/ccadmin/.local/bin/uwsgi
[emperor] is the uwsgi binary in your system PATH ?
TIME STAMP - [emperor] curse the uwsgi instance cc_uwsgi.ini (pid: ####)
TIME STAMP - [emperor] removed uwsgi instance cc_uwsgi.ini

如果我将--uid和--gid更改为root,那么一切都正常工作。这一定是一些简单的权限问题,但由于我对Linux不熟悉,我很难找到它的具体位置。
另外,奇怪的是它让我在系统路径中查找uwsgi二进制文件...它应该在那里吗?因为我已经在/etc/environment中将/home/ccadmin/.local/bin添加到了我的系统路径中。它不应该在那里吗?或者应该一直到二进制文件?(例如,添加/home/ccadmin/.local/bin/uwsgi而不仅仅是/bin)

Uwsgi 应该使用配置中的 "uid" 和 "gid" 参数设置进程的 uid/gid -- 对于 http socket 和 unix socket 都是如此。如果您通过启动脚本管理 uwsgi 守护进程,这应该是自动的。您是如何启动/停止 uwsgi 的? - kchan
对于nginx,您可以使用“user”指令来设置其运行的用户/组。用户的默认值(来自源代码)为“nobody”,但如果您从软件包安装,则将特定于您的系统(如www-data)。请参见:http://nginx.org/en/docs/ngx_core_module.html#user - kchan
2个回答

2

您应该以root身份启动uwsgi,否则无法切换到其他用户。这是基本的Unix概念。请使用sudo通过service uwsgi start命令来启动。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接