2015-03-24 51 views
3

我使用的二进制文件本身的标志尝试(--uid www数据--gid www数据),并在我的配置设置它:uWSGI皇帝被拒绝的权限,除非根

uid = www-data 
    gid = www-data 

但套接字总是与我正在使用的帐户一起产生,所以我得到了来自nginx的权限被拒绝错误。

任何人都知道这是为什么?

附加问题:有谁知道nginx和uwsgi有用户设置?我有另一台服务器一直在工作,它没有在任何配置文件中设置uid或gid,但是一切都在使用www-data。

ANSWER显然,如果你从终端启动服务,就像我试图做的那样,即(user @ server:〜/ $ uwsgi --uid www-data --gid www-data),它会一直开始并运行与调用它的用户,这解释了为什么我觉得它不服从我的uid和gid标志。当我如下所述运行它时,它确实以正确的用户/组www数据运行。

修订

我开始uWSGI正如你所说, “sudo的服务uwsgi启动” 应该被触发这个文件(/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根,那么这一切工作正常。它必须是一些简单的许可,但是对于linux来说是新手,我发现很难查明。

奇怪的是,它问我在我的系统路径中的uwsgi二进制文件...它应该在那里吗?因为我在/ etc/environment中将/home/ccadmin/.local/bin添加到了我的系统路径中。它不应该在那里吗?还是应该一直到二进制文件? (即将/home/ccadmin/.local/bin/uwsgi insetad添加到/ bin)

+0

Uwsgi应该在您的配置中为uid/gid和uid/gid参数设置过程 - 用于http套接字和unix套接字。如果你通过启动脚本来管理你的uwsgi守护进程,这应该是自动的。你如何开始/停止uwsgi? – kchan 2015-03-25 05:47:23

+0

对于nginx,您可以使用“user”指令来设置它将运行的用户/组。用户的默认值(来自源代码)是“nobody”,但如果您从包中安装,它将特定于您的系统(如www-data)。请参阅:http://nginx.org/en/docs/ngx_core_module.html#user – kchan 2015-03-25 05:49:01

回答

2

您应该以root身份启动uwsgi,否则您不允许切换到其他用户。基本的unix概念。通过sudo使用service uwsgi start命令。