5

我的 Linux 机器(“php”)上有一个用户,它是两个组的成员。主要组是“php”,辅助组是“www”。

我的 Linux 机器上有一个目录(/home/www/public/wp-content/uploads),其用户www和组是www,权限设置为 775。

我希望以“php”用户身份运行的进程应该能够读取和写入该目录中的文件。如果我从命令行以fopen“php”用户的身份运行该目录中的文件,它工作正常!

但是,如果我使用用户“php”和组“php”启动 php-fpm,则在尝试写入该目录时会收到“权限被拒绝”错误。

我希望 php-fpm 进程仍然能够写入该目录,因为它以“php”用户身份运行,该用户是拥有该目录的“www”组的一部分。但我得到“权限被拒绝”。

为什么 php-fpm 行为与 php 脚本的行为不同?

(我在添加辅助组后重新启动了 php-fpm,所以这不是陈旧问题。)

4

2 回答 2

4

它看起来像setgid这里的 php-fpm 源代码调用:https ://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_unix.c#L383-L386

        if (0 > setgid(wp->set_gid)) {
            zlog(ZLOG_SYSERROR, "[pool %s] failed to setgid(%d)", wp->config->name, wp->set_gid);
            return -1;
        }

据我所知,一个进程在调用 setgid 后无法访问补充组可用的权限,所以我是 SOL。

于 2016-12-22T23:28:04.193 回答
1

很可能您对 fpm 守护进程的配置很差,您需要在 conf 文件中指定组,如下所示: [php] group=php

于 2016-12-21T01:03:10.393 回答