我真的很感激任何帮助,以追踪和诊断Ubuntu上的umask问题:
我通过proxy_fcgi与Apache运行php5-fpm.该进程以一个umask为0022进行运行(通过将PHP发送umask()的结果确认为一个文件[结果为’18’== 0022]).我想把它改成0002,但是不能跟踪umask来自哪里.
Apache设置为umask 0002,作为测试,如果我禁用proxy_fcgi并运行我的测试,我得到一个文件与你有rw访问(并且文件内容确认umask为’2’== 0002).
如果我sudo -iu fpmuser并运行umask,结果是0002.
系统信息:
> PHP:5.5.3-1ubuntu2.1
> Apache:2.4.6
> Ubuntu:13.10
> PHP-PFM列出使用TCP端口(因为Unix端口还没有工作/支持)
到目前为止,我已经尝试过以下操作(每个都是系统重新启动和重新测试):
>将umask 0002添加到/etc/init.d/php5-fpm的开头
>将–umask 0002添加到/etc/init.d/php5-fpm中的start-stop-daemon调用
将umask 0002添加到fpm用户的home中的.profile文件中
有些事情正在调整php-fpm进程的umask – 所以我该如何开始追踪什么是强制umask 0022到php-fpm进程?
编辑(1):
通过/etc/login.defs(参见How to set system wide umask?)调整系统范围的umask会影响其他地方的umask(例如,通过sudo的comannds现在有一个umask为0002),但仍然是php-fpm创建一个umask为0022的文件.请注意,我验证了会话可选pam_umask.so也存在于/etc/pam.d/common-session-noninteractive中,我测试了002和0002的umasks.
编辑(2):
>我已经能够使用nginx和php5-fpm(使用unix套接字设置为监听模式’0666′)来复制问题.
>我很想跟踪umask来自哪里,但是我会为了某种方式来解决这个问题.
>我应该补充说,第一个测试是在Amazon Ubuntu 13.10图像上完成的.我的测试在“编辑2”中完成,使用Ubuntu13.10服务器ISO安装从零开始虚拟机.所有的安装都是通过apt-get完成的,而不是通过下载源代码和构建.
编辑(3):
>我已经确认我可以通过以下任一方式手动操纵umask(通过检查创建的测试文件的权限来验证):
一个.在shell中,设置umask,然后从shell运行/usr/sbin / php-fpm
湾在shell中,运行以下任何umask值,我喜欢:
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
>但是,在/etc/init.d/php5-fpm文件中完全相同的命令在运行sudo服务php5-fpm stop时无法调整umask; sudo服务php5-fpm启动或重新启动.