I have a user on my Linux machine ("php") that is a member of two groups. The primary group is "php" and a supplementary group is "www".
I have a directory on my Linux machine (/home/www/public/wp-content/uploads) whose user is www
and whose group is www
and whose permissions are set to 775.
I expect that a process running as the "php" user should be able to read and write files in that directory. If I run a script from the command line that fopen
's a file in that directory as the "php" user, it works fine!
However if I start php-fpm with user "php" and group "php", I get a "permission denied" error when trying to write to that directory.
I expect that the php-fpm process should still be able to write to that directory, since it's running as the "php" user, which is part of the "www" group that owns the directory. But I get "permission denied."
Why does the php-fpm behavior differ from the behavior from a php script?
(I restarted php-fpm after I added the secondary group, so it's not a staleness issue.)
It looks like the php-fpm source code calls
setgid
here: https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_unix.c#L383-L386As far as I am able to determine, a process cannot access permissions available to supplementary groups after it invokes setgid, so I'm SOL.