为什么 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 源代码在这里调用 setgid
: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;
}
据我所知,一个过程cannot access permissions available to supplementary groups after it invokes setgid,所以我是 SOL。
我的 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 源代码在这里调用 setgid
: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;
}
据我所知,一个过程cannot access permissions available to supplementary groups after it invokes setgid,所以我是 SOL。