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

Why does php-fpm ignore permissions defined for supplementary groups?

我的 Linux 机器 ("php") 上有一个用户是两个组的成员。主要组是 "php",补充组是 "www"。

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

我希望作为 "php" 用户的进程 运行ning 应该能够读取和写入该目录中的文件。如果我 运行 来自命令行的脚本 fopen 作为 "php" 用户在该目录中的一个文件,它工作正常!

但是,如果我使用用户 "php" 和组 "php" 启动 php-fpm,我在尝试写入该目录时会收到 "permission denied" 错误。

我希望 php-fpm 进程应该仍然能够写入该目录,因为它 运行ning 作为 "php" 用户,它是 "www" 拥有该目录的组。但是我得到 "permission denied."

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

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

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

看起来 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。