我非常感谢在Ubuntu上跟踪和诊断umask问题的任何帮助:
我通过proxy_fcgi
与Apache运行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。
系统信息:
到目前为止,我已经尝试了以下(每个之后系统重新启动和重新testing):
umask 0002
添加到/etc/init.d/php5-fpm
的开头 /etc/init.d/php5-fpm
添加--umask 0002
到start-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):
nginx
和php5-fpm
复制这个问题(使用unix套接字设置为监听模式'0666')。 编辑(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-fpm
的service
命令,它会为/etc/init/${SERVICE}.conf
运行一些检查(我的副本上的第118行),同时验证initctl
是否存在并可以报告它的版本。 如果这些测试通过,那么在php5-fpm
的情况下使用upstart
,使用/etc/init/php-fpm.conf
文件。
Ubuntu的暴发户网站给出了非常明确的说明。 特别是你可以检查出你所需要的具体的新贵烹饪书 。
最好的解决办法就是说,“service”命令从来没有真正运行/etc/init.d/php5-fpm
的start-stop-daemon …
命令,这就是为什么我以前的编辑没有任何效果。 相反,当你使用诸如service php5-fpm start
等service 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(没有这个工作的机会)
一直在谷歌搜索,但似乎并不是每个主机的基础上做到这一点。