I'd really appreciate any help in tracking down and diagnosing an umask issue on Ubuntu:
I'm running php5-fpm
with Apache via proxy_fcgi
. The process is running with a umask of 0022 (confirmed by having PHP send the results of umask()
into a file [the result is '18' == 0022]). I'd like to change this to 0002, but can't track down where the umask is coming from.
Apache is set with umask 0002, and as a test, if I disable proxy_fcgi
and run my test above, I get a file with u+g having rw access (and the file contents confirm the umask as '2' == 0002).
If I sudo -iu fpmuser
and run umask
the results are 0002.
System info:
So far I've tried the following (each followed by a system restart and a retest):
umask 0002
to the start of /etc/init.d/php5-fpm
--umask 0002
into the start-stop-daemon
calls in /etc/init.d/php5-fpm
umask 0002
to .profile
in the home of the fpm
userSomething is clearly adjusting the umask of the php-fpm process - so, how can I begin tracing what is forcing the umask 0022 onto the php-fpm process?
EDIT (1):
/etc/login.defs
(see How to set system wide umask?) affects the umask elsewhere (e.g. comannds via sudo
now have a umask of 0002), but still php-fpm creates files with a umask of 0022. Note that I verified that session optional pam_umask.so
was also present in /etc/pam.d/common-session-noninteractive
and I tested umasks of 002 and 0002.EDIT (2):
nginx
and php5-fpm
(using unix sockets set to listen mode '0666').EDIT (3):
I have confirmed I can manipulate the umask manually by either of the following (verified by checking the permissions on the test file created):
a. In a shell, set a umask then run /usr/sbin/php-fpm
from the shell
b. In a shell, run the following with whatever umask value I like:
start-stop-daemon --start --quiet --umask 0002 --pidfile /var/run/php5-fpm.pid --exec /usr/sbin/php5-fpm -- --daemonize --fpm-config /etc/php5/fpm/php-fpm.conf
However this exact same command in the /etc/init.d/php5-fpm
file fails to adjust the umask when running sudo service php5-fpm stop; sudo service php5-fpm start
or at reboot.
Not a solution for generically tracing where umask settings are coming from on ubuntu (the only way I've found so far is the good old hard work approach of replicating the issue, attempting to isolate it to a script or a function, then stepping back through each script/function that is called recursively) but a solution to the php5-fpm umask issue. I've found a lot of hits on google, stackoverflow, and elsewhere for the problem, but so far no solution. Hopefully this is useful for people.
Edit /etc/init/php-fpm.conf
to include the line umask 0002
(or whatever umask you wish). My version of the file now looks like this:
# php5-fpm - The PHP FastCGI Process Manager
description "The PHP FastCGI Process Manager"
author "Ondřej Surý <[email protected]>"
start on runlevel [2345]
stop on runlevel [016]
### my edit - change umask setting
umask 0002
pre-start exec /usr/lib/php5/php5-fpm-checkconf
respawn
exec /usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf
Explanation
Having traced through the service
command which launches php5-fpm
at startup, it runs some checks (line 118 on my copy) for /etc/init/${SERVICE}.conf
, along with verifying initctl
is present and can report it's version. If these tests are passed then upstart
is used which in the case of php5-fpm
uses the /etc/init/php-fpm.conf
file.
The ubuntu upstart site gives pretty clear instructions. In particular you can check out the upstart cookbook for the specifics you need.
As best I can work out that means that therefore the 'service' command was never actually running the start-stop-daemon …
commands found in /etc/init.d/php5-fpm
which is why my previous edits were having no effect. Instead it passes off to upstart
(actually initctl
) when you use something like service php5-fpm start
, etc.