除非root,否则uWSGI Emperor权限被拒绝

时间:2015-03-24 21:42:11

标签: ubuntu nginx uwsgi

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

    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-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二进制文件......它应该在那里吗?因为我已将/home/ccadmin/.local/bin添加到/ etc / environment中的系统路径。它应该不存在吗?或者它应该一直到二进制文件? (即将/home/ccadmin/.local/bin/uwsgi insetad添加到/ bin)

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

暴君模式(安全的多用户托管)

  

在暴君模式下,Emperor将使用其配置文件的UID / GID运行附庸......

http://uwsgi-docs.readthedocs.org/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting

之前我没有使用过emperor模式。希望能有所帮助。