如何跟踪php5-fpm的umask设置来自ubuntu

我非常感谢在Ubuntu上跟踪和诊断umask问题的任何帮助:

我通过proxy_fcgiApache运行php5-fpm 。 该进程运行的是0022的umask(通过让PHP将umask()的结果发送到一个文件(结果是'18'== 0022])来确认。 我想将其更改为0002,但无法追踪umask的来源。

Apache设置为umask 0002,作为一个testing,如果我禁用proxy_fcgi并运行上面的testing,我得到一个文件,u + g有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端口还没有工作/支持)

到目前为止,我已经尝试了以下(每个之后系统重新启动和重新testing):

  • umask 0002添加到/etc/init.d/php5-fpm的开头
  • /etc/init.d/php5-fpm添加--umask 0002start-stop-daemon调用中
  • umask 0002添加到fpm用户的home .profile

有些东西显然是在调整php-fpm过程的umask – 那么,我该如何开始追踪什么是迫使umask 0022进入到php-fpm过程?

编辑(1):

  • 通过/etc/login.defs调整系统范围的umask(请参阅如何设置系统范围的umask? )影响其他地方的umask(例如,通过sudo comannds现在有一个0002的umask),但仍然php-fpm创build文件的umask 0022.请注意,我validation了session optional pam_umask.so也存在于/etc/pam.d/common-session-noninteractive ,我testing了002和0002的session optional pam_umask.so

编辑(2):

  • 我已经能够使用nginxphp5-fpm复制这个问题(使用unix套接字设置为监听模式'0666')。
  • 我很想追踪umask来自哪里,但是我会以某种方式来强迫它达到我想要的。
  • 我应该补充说,第一个testing是在Amazon Ubuntu 13.10镜像上完成的。 我在'编辑2'中的testing在虚拟机中从零开始使用Ubuntu13.10服务器ISO安装程序的副本完成。 所有的安装都是通过apt-get来完成的,而不是通过下载源代码和构build。

编辑(3):

  • 我已经确认我可以通过以下两种方式手动操作umask(通过检查创build的testing文件的权限进行validation):

    一个。 在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 service php5-fpm stop; sudo service php5-fpm start时调整umask sudo service php5-fpm stop; sudo service php5-fpm start sudo service php5-fpm stop; sudo service php5-fpm start或重启。

不是一个通用的跟踪umask设置来自ubuntu的解决方案(我迄今为止发现的唯一方法就是复制问题的好办法,尝试将其隔离为脚本或函数,然后逐步回退通过递归调用每个脚本/函数),但是解决php5-fpm umask问题 。 我发现谷歌,stackoverflow和其他地方的问题很多点击,但迄今没有解决方案。 希望这对人们有用。

编辑/etc/init/php-fpm.conf以包含行umask 0002 (或任何你想要的umask)。 现在我的文件版本如下所示:

 # php5-fpm - The PHP FastCGI Process Manager description "The PHP FastCGI Process Manager" author "Ondřej Surý <ondrej@debian.org>" 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 

说明

通过在启动时启动php5-fpmservice命令,它会为/etc/init/${SERVICE}.conf运行一些检查(我的副本上的第118行),同时验证initctl是否存在并可以报告它的版本。 如果这些测试通过,那么在php5-fpm的情况下使用upstart ,使用/etc/init/php-fpm.conf文件。

Ubuntu的暴发户网站给出了非常明确的说明。 特别是你可以检查出你所需要的具体的新贵烹饪书 。

最好的解决办法就是说,“service”命令从来没有真正运行/etc/init.d/php5-fpmstart-stop-daemon …命令,这就是为什么我以前的编辑没有任何效果。 相反,当你使用诸如service php5-fpm startservice php5-fpm start时,它会传递给upstart (实际上是initctl )。

2016年插件:
如果你使用systemd,那么编辑/lib/systemd/system/php5-fpm.service
并编辑章节“服务”:

 [Service] UMask=0002 

在编辑php5-fpm.service之前更好地复制systemd脚本,否则将在下次更新时被覆盖:

 cp /lib/systemd/system/php5-fpm.service /etc/systemd/system/ vi /etc/systemd/system/php5-fpm.service Add: UMask=0002 in [Service] section. systemctl daemon-reload systemctl restart php5-fpm 

来源: https : //ispire.me/running-php-fpm-with-different-user-group-using-umask/

奥凯,但这适用于所有的游泳池。 将会很方便,可以用类似的东西来设置它

env [umask] = 0002(没有这个工作的机会)

一直在谷歌搜索,但似乎并不是每个主机的基础上做到这一点。