【发布时间】:2014-02-10 12:03:38
【问题描述】:
非常感谢在 Ubuntu 上跟踪和诊断 umask 问题的任何帮助:
我正在通过 proxy_fcgi 使用 Apache 运行 php5-fpm。该进程以 0022 的 umask 运行(通过让 PHP 将 umask() 的结果发送到文件中来确认 [结果为 '18' == 0022])。我想将其更改为 0002,但无法追踪 umask 的来源。
Apache 设置为 umask 0002,作为测试,如果我禁用 proxy_fcgi 并在上面运行我的测试,我会得到一个 u+g 具有 rw 访问权限的文件(并且文件内容确认 umask 为“2” == 0002)。
如果我 sudo -iu fpmuser 并运行 umask 结果为 0002。
系统信息:
- PHP:5.5.3-1ubuntu2.1
- 阿帕奇:2.4.6
- Ubuntu:13.10
- PHP-PFM 正在列出使用 TCP 端口(因为 Unix 端口尚未工作/支持)
到目前为止,我已经尝试了以下方法(每次都进行了系统重启和重新测试):
- 将
umask 0002添加到/etc/init.d/php5-fpm的开头 - 将
--umask 0002添加到start-stop-daemon调用/etc/init.d/php5-fpm - 在
fpm用户的主页中添加umask 0002到.profile
某些东西显然正在调整 php-fpm 进程的 umask - 那么,我该如何开始追踪是什么迫使 umask 0022 进入 php-fpm 进程?
编辑(1):
- 通过
/etc/login.defs调整系统范围的umask(参见How to set system wide umask?)会影响其他地方的umask(例如,通过sudo的commannds 现在的umask 为0002),但php-fpm 仍然创建umask 为0022 的文件。请注意,我验证了session optional pam_umask.so也存在于/etc/pam.d/common-session-noninteractive中,并且我测试了 002 和 0002 的 umask。
编辑(2):
- 我已经能够使用
nginx和php5-fpm复制该问题(使用设置为侦听模式“0666”的 unix 套接字)。 - 我很想追踪 umask 的来源,但我愿意采用某种方式将其强制为我想要的。
- 我应该补充一点,第一个测试是在 Amazon Ubuntu 13.10 映像上完成的。我在“编辑 2”中的测试是在虚拟机中使用 Ubuntu13.10 服务器 ISO 设置的副本从头开始完成的。所有安装都是通过 apt-get 完成的,而不是通过下载源代码和构建。
编辑(3):
-
我已确认我可以通过以下任一方式手动操作 umask(通过检查创建的测试文件的权限来验证):
一个。在 shell 中,设置一个 umask,然后从 shell 运行
/usr/sbin/php-fpmb.在 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 service php5-fpm stop; sudo service php5-fpm start或重新启动时调整 umask。
【问题讨论】: