uwsgi 权限被拒绝,但 chdir 对该 uid 具有权限

uwsgi 权限被拒绝,但 chdir 对该 uid 具有权限

我正在使用 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 用户需要获得文件/文件夹“完整”路径的权限。这可能比您想象的更棘手:

  1. www-data 用户需要有+x权限才能cd访问文件夹...
  2. ...并且在每个父母您正在使用的路径中指定的文件夹...
  3. ... 和, 如果一个符号链接在每个父文件夹中绝对该文件/文件夹的路径。

您可以使用一个命令检查所有(相对和绝对)路径权限namei -m <any_path>

这个答案部分基于@Khaled 的评论和一些更多搜索:

相关内容