不算个安全方面的问题,但也跟安全息息相关,因为控制好文件权限是维护服务器安全的重要一点。
所以问题来了:

通常nginx或apache或php-fpm都是以www-data或www之类的用户启动并运行的,但这些用户并不像root等用户。他没有home目录,所以也没有~/.bashrc这种配置文件。
那我怎么设置www-data用户的umask(文件默认权限),让php新建的目录、文件有我想要的掩码,而不是默认的022。同时,不影响其他用户的umask?

我只能想到以下三个思路:
解决方法1.所有php文件开头都手工写上umask(0xxx); ,明显不行,如果文件多而杂,根本不可能兼顾所有文件。
解决方法2.在开机启动项中加入sudo su www-data -c "umask 0003",开机时手工设置。这个方法不行,我试过,第一次设置成功,第二次再查看umask,还是默认的022。
解决方法3.修改系统的umask,但这样就影响其他用户、服务了。如果xxx服务也想设置和www-data不一样的umask,怎么办?

感觉都不行,有没有什么好方法,求linux大牛解答~~


问题解决

找到一个简单方法:
可以改/etc/init.d/php5-fpm
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
加入--umask参数即可。
因为是fpm的配置,所以nginx、apache均可用~

参考文献:
http://stackoverflow.com/questions/21248904/how-to-trace-where-php5-fpm-umask-settings-are-coming-from-on-ubuntu
http://stackoverflow.com/questions/428416/setting-the-umask-of-the-apache-user