[英]How to trace where php5-fpm umask settings are coming from on ubuntu
我真的很感激在Ubuntu上追踪和诊断umask问题的任何帮助:
我通过proxy_fcgi
运行php5-fpm
和Apache。 该进程使用0022的umask运行(通过让PHP将umask()
的结果发送到文件[结果为'18'== 0022])来确认。 我想将其更改为0002,但无法追踪umask的来源。
使用umask 0002设置Apache,作为测试,如果我禁用proxy_fcgi
并运行上面的测试,我会得到一个u + g具有rw访问权限的文件(文件内容确认umask为'2'== 0002)。
如果我sudo -iu fpmuser
并运行umask
,结果是0002。
系统信息:
到目前为止,我已经尝试了以下(每个系统重启和重新测试后):
umask 0002
添加到/etc/init.d/php5-fpm
的开头 --umask 0002
添加到/etc/init.d/php5-fpm
的start-stop-daemon
调用中 umask 0002
添加到fpm
用户家中的.profile
有些东西显然正在调整php-fpm进程的umask - 所以,我怎样才能开始跟踪强制umask 0022进入php-fpm进程的内容?
编辑(1):
/etc/login.defs
调整系统范围的umask(请参阅如何设置系统范围的umask? )会影响其他地方的umask(例如,通过sudo
comannds现在有一个0002的umask),但是php-fpm仍会创建一个umask为的umask 0022.请注意,我验证了session optional pam_umask.so
也存在于/etc/pam.d/common-session-noninteractive
,我测试了002和0002的session optional pam_umask.so
。 编辑(2):
nginx
和php5-fpm
复制问题(使用unix套接字设置为监听模式'0666')。 编辑(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 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
或重启。
不是ubuntu上umask设置来源的一般跟踪解决方案(到目前为止我发现的唯一方法是复制问题,试图将其分离为脚本或函数,然后退回的好旧方法)通过递归调用的每个脚本/函数)但解决php5-fpm umask问题 。 我在google,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
是否存在并且可以报告它的版本。 如果传递了这些测试,则使用upstart
,在php5-fpm
的情况下使用/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
)。
如果使用systemd,请在/etc/systemd/system
目录中创建一个名为php7.2-fpm.service.d
的新目录。 此目录的名称将根据您的发行版和PHP版本而有所不同。 运行systemctl list-units --type=service | grep --ignore-case php
systemctl list-units --type=service | grep --ignore-case php
找出它的systemctl list-units --type=service | grep --ignore-case php
。 在此目录内,放置一个名为umask.conf
的文件, umask.conf
包含以下内容:
# /etc/systemd/system/php7.2-fpm.service.d/umask.conf
[Service]
UMask=0002
要使更改生效,请运行:
systemctl daemon-reload && systemctl restart php7.2-fpm
此解决方案的好处是,在更新软件包时,您的自定义不会丢失。
从systemd手册解释这是如何工作的:
与单元文件foo.service一起,可能存在“drop-in”目录foo.service.d /。 解析文件本身后,将解析此目录中带有后缀“.conf”的所有文件。 这对于更改或添加单元的配置设置很有用,而无需修改单元文件。 每个插件文件都必须具有适当的节标题。 请注意,对于实例化的单元,此逻辑将首先查找实例“.d /”子目录并读取其“.conf”文件,然后是模板“.d /”子目录和那里的“.conf”文件。
除了/ etc / systemd / system之外,系统服务的drop-in“.d”目录可以放在/ usr / lib / systemd / system或/ run / systemd / system目录中。 / etc中的drop-in文件优先于/ run中的文件,后者优先于/ usr / lib中的文件。 任何这些目录下的drop-in文件优先于位于任何位置的单元文件。 具有不同名称的多个插入文件以字典顺序应用,而不管它们驻留在哪个目录中。
在编辑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/
okey,但这适用于所有池。 能用这样的东西设置它会很方便
env [umask] = 0002(没有机会这样做)
谷歌搜索,但似乎不是一个方法来实现每个主机。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.