Kev*_*rke 5 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,因此这不是陈旧的问题。)
看起来 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;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,进程在调用 setgid 后无法访问补充组可用的权限,所以我是SOL。