configurationCentos7 Apache 2.4 php-fpm以用户身份运行

我想configuration一个Centos 7 Apache 2.4 Linode使用php-fpm来执行php作为文件所有者。 以前Centos6 / Apache2.2的文档不起作用,我在Centos7上设置Lamp服务器的configuration只是作为apache用户运行。 有没有好的教程来做到这一点,或者有人可以提供configuration文件和虚拟主机指令需要这样做吗? 谢谢。

受过部分教育的自我回应 与suphp不同,php-fpm不允许以脚本所有者身份运行,而是允许设置指定用户和组运行的池。

在Apache 2.4的Centos 7中,我在/etc/php-fpm.d中find了这些声明,如www.conf。 我创build了这个文件的副本,并将用户和组放在一个虚拟主机的用户名中,并将监听端口设置为9001而不是9000(每个都需要本地主机套接字上的唯一端口)。 然后在每个虚拟主机声明中,用下面的一行指定相同的端口:

ProxyPassMatch ^ /(.php(/。)?)$ fcgi://127.0.0.1:9001 / home / dancenew / public_html / dneuser / $ 1

请注意,上面的ProxyPassMatch容易受到攻击,请参阅https://wiki.apache.org/httpd/PHP-FPM上的Apache WIKI文档中的CAVEATS。 也许有人可以提供一个关于如何避免这个漏洞的清晰指南,而不是将其作为一个未被完全消化的实现者的练习…我记得NGINX的例子,即使在被很多网站抄袭…

由于OpCache(默认情况下)在共享主机环境中的所有用户之间共享一个caching,所以您提出的解决scheme除了在您的答案中链接到的文章中提到的方法之外,还有一个额外的潜在安全问题。 已经提交了一个错误 (你可以也应该去投票让维护者知道这对你的用例有多重要),但是没有提供修复的承诺。

TL; DR:默认情况下,启用OpCache时,用于存储编译的字节码的caching将在所有用户之间共享。 在多个站点/用户共享主机的环境中, 这可能会导致站点从其他站点抓取php脚本的caching输出,或者如果启用了特定的安全设置,甚至会产生错误 。

如果您计划使用带有PHP 5.5 +的内置opcache的PHP-FPM,请在实际执行之前阅读下面的博客文章。 事实certificate,操作码caching可以被服务器上的任何用户读取。 这意味着,如果有10个独立的用户,拥有自己的虚拟主机和目录,并且为每个用户configuration了一个PHP-FPM池,则每个用户仍然可以看到caching了哪些脚本及其位置。 由于他们已经读取了caching,他们可能会查看所有这些数据。

这显然是一个巨大的安全问题,即使没有人利用这个,在生成一个页面的时候仍然有一个错误的用户读取脚本的机会,所以如果有多个索引,网站可能会显示错误的数据/信息.php脚本在caching中。

虽然没有修正已经正式发布,如果你使用的是cPanel, 这个wiki有一个文件化的方式来configurationphp-fpm池在每个用户的基础上创build和保护 ,如果你按照下面的说明以及重要的注意事项在这个答案的底部,你应该能够得到你想要的function,没有任何错误

这篇文章还logging了如何在每个站点/每个用户的基础上手动configuration这个function(尽pipe如果你要托pipe很多站点,我会打赌这可能会变得单调乏味)。 如果你不使用cPanel,你可能需要修改脚本来指定你的个人path和用户名,而不是cPanel的configuration引擎使用的variables。


重要笔记

在testing和额外的研究过程中,我遇到了这篇文章,它提供了一些可能与您的具体情况相关的说明:

  1. 您需要确保opcache.use_cwd参数设置为true以便您的应用程序configurationOpCache – 默认情况下设置为false ,如果您在您的主机上托pipe多个PHP应用程序,则将其设置为默认值可能会导致冲突系统:

首先,可能在每个典型的项目中,你必须确保opcache.use_cwd选项设置为true。 启用此设置意味着OpCache引擎将查看完整的文件path以区分具有相同名称的文件。 将其设置为false将导致具有相同基本名称的文件之间发生冲突。

  1. 如果您正在运行由Zend Framework或其他使用注释的类似框架的应用程序,则还需要确保opcache.load_commentsopcache.save_comments指令设置为true 。 您应该仔细检查一下您的应用程序/框架文档中的build议,因为大多数人现在已经更新了他们的文档,并具体说明了如何在系统中正确使用OpCache:

在使用注释的工具和框架中还有一个重要的设置。 如果您使用Doctrine,Zend Framework 2或PHP Unit,请记住将opcache.load_comments和opcache.save_comments设置为true。 结果,来自文件的文档注释也将包含在OpCache生成的预编译代码中。 这个设置将允许你在没有任何中断的情况下使用注释。

如果您的项目基于特定的框架或Web应用程序,则最好检查文档以获取有关OpCacheconfiguration的任何指导原则

重要笔记


希望这有助于 – 如果您使用cPanel,请发表评论,让我们知道您是如何处理configuration的这一部分! 另见这个问题和相关的评论 。