我的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,所以这不是陈旧问题。)
答案 0 :(得分:4)
看起来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。
答案 1 :(得分:1)
很可能你没有配置fpm守护进程,你需要在conf文件中指定这样的组:[php] group = php