我正在使用 uWSGI(在 nginx 后面)没有皇帝,以systemd
服务的方式运行。
uwsgi.服务:
[Service]
ExecStart=/usr/local/bin/uwsgi --ini /var/www/CONSTANd++/uwsgi_config.ini
(...)
uwsgi_config.ini:
(...)
gid = www-data
uid = www-data
chdir = /var/www/CONSTANd++/constandpp_web/constandpp_web
(...)
终端:
$ ls -la /var/www/CONSTANd++/constandpp_web/constandpp_web
drwxrwxr-x 5 pdiracdelta www-data 4096 Sep 6 10:42 .
(...)
显然,该文件夹具有 www-data 组的所有权限,但是当我启动这个 uWSGI 服务时,uWSGI 日志仍然会抱怨:
(...)
setgid() to 33
setuid() to 33
chdir() to /var/www/CONSTANd++/constandpp_web/constandpp_web
chdir(): Permission denied [core/uwsgi.c line 2591]
chdir(): Permission denied [core/uwsgi.c line 1613]
为什么会发生这种情况?我该如何解决?如果我uid=www-data
从 uwsgi_config.ini 中删除,一切都会正常启动,但是当然,我的 WSGI 应用程序创建的文件具有 root 所有权,而这是我不想要的。
答案1
事实证明,www-data 用户需要获得文件/文件夹“完整”路径的权限。这可能比您想象的更棘手:
- www-data 用户需要有
+x
权限才能cd
访问文件夹... - ...并且在每个父母您正在使用的路径中指定的文件夹...
- ... 和还, 如果一个符号链接在每个父文件夹中绝对该文件/文件夹的路径。
您可以使用一个命令检查所有(相对和绝对)路径权限namei -m <any_path>
。
这个答案部分基于@Khaled 的评论和一些更多搜索: