为什么php-fpm会忽略为补充组定义的权限?

时间:2016-12-20 23:01:30

标签: php unix permissions fpm

我的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,所以这不是陈旧问题。)

2 个答案:

答案 0 :(得分:4)

看起来php-fpm源代码在这里调用setgidhttps://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;
        }

据我所知,一个过程cannot access permissions available to supplementary groups after it invokes setgid,所以我是SOL。

答案 1 :(得分:1)

很可能你没有配置fpm守护进程,你需要在conf文件中指定这样的组:[php] group = php