NGINX 中的 PHP 用户无法访问文件,具有组的权限

NGINX 中的 PHP 用户无法访问文件,具有组的权限

我知道 nginx 将 php 的用户设置为 www-data。因此,用户 www-data 需要访问整个结构,如中所述这篇博文

为了表达我的问题,我必须定义一些参数:

  1. 让我们将 php 用户定义为“www”。
  2. 我们将人类用户定义为“mods”。
  3. 让我们定义一个名为“webaccess”的组。
  4. 1 和 2 都是 3 的成员。

这里的想法是,我希望将 html 目录和所有子文件设置为 mods:webaccess 750,以便 mods 可以上传和修改 php 文件,并且显然 www 可以访问和处理 php 请求。

问题是,使用此设置时,我不断收到“未指定输入文件”错误。现在,由于 www 用户是 webaccess 的成员,他们是否应该能够使用为该组设置的 rx 权限读取 php 文件?

为了验证这实际上是权限问题而不是路径问题,我在包含的 Web 根目录中添加了一个 php 文件<?php echo exec('whoami'); ?>,并将权限设置为 750,我得到了“未指定输入文件。”错误。所以我将权限更改为 755,然后我恢复了用户“www”。

答案1

在非交互式 shell 中,您的“www”用户可能只获得其主要组(如 /etc/passwd 中所定义),而不是任何附加组(如 /etc/group 中所定义)。

您可以使用以下方法测试是否是这种情况:

<?php echo exec('id'); ?>

如果 webaccess 未在组中列出,那可能就是为什么它只能在其他人有访问权限时读取文件的原因。

编辑:

这个问题和dwieeb遇到的类似(https://serverfault.com/questions/356959/user-http-does-not-have-write-permissions-directory

啊,我发现问题了。是的,我重启了 Nginx,但是当 http 添加到我的域的组中时,php-fpm 守护进程也必须重启。

如果您在将 www 添加到 webaccess 后还没有这样做,请尝试重新启动 Nginx 和 php-fpm。

相关内容