配置Centos7 Apache 2.4 php-fpm以用户身份运行

配置Centos7 Apache 2.4 php-fpm以用户身份运行

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

答案1

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

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

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

请注意,上述 ProxyPassMatch 容易受到攻击,请参阅 Apache WIKI 文档中的 CAVEATS,网址为https://wiki.apache.org/httpd/PHP-FPM。也许有人可以提供一个关于如何避免这种漏洞的明确指南,而不是把它留给受教育程度较低的实施者作为练习...我记得 NGINX 示例存在类似的问题,即使在被认为是可靠的示例代码中,也有很多网站复制了这些代码...

答案2

除了您在答案中链接的文章中提到的安全问题之外,您提出的解决方案确实存在额外的潜在安全问题......因为 OpCache(默认情况下)在共享托管环境中为所有用户共享单个缓存。错误已提交(并且您可以并且应该去投票,让维护人员知道这对您的用例有多重要)尽管尚未承诺提供修复。

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

如果您计划将 PHP-FPM 与 PHP 5.5+ 内置的 opcache 结合使用,请在实际操作之前阅读下面的博客文章。事实证明,服务器上的任何用户都可以读取操作码缓存。这意味着,如果有 10 个独立的用户,他们有自己的虚拟主机和目录,并且您为每个用户配置一个 PHP-FPM 池,则每个用户仍然可以看到缓存了哪些脚本及其位置。由于他们具有对缓存的读取权限,因此他们可能会查看所有这些数据。

这显然是一个巨大的安全隐患,即使没有人利用这一点,在生成页面时仍有可能由错误的用户读取脚本,因此如果缓存中有多个 index.php 脚本,网站可能会显示错误的数据/信息。

虽然官方尚未发布修复程序,但如果你正在使用 cPanel,此 wiki 记录了如何配置 php-fpm 池以根据每个用户进行创建和保护如果你遵循以下说明以及重要笔记在这个答案的底部,你应该能够获得你想要的功能而不会出现任何错误

该帖子还记录了如何根据每个站点/每个用户手动配置这一点(不过我敢打赌,如果您托管很多站点,这可能会变得很乏味)。如果您不使用 cPanel,您可能需要修改脚本以指定您的个人路径和用户名,而不是 cPanel 的配置引擎使用的变量。


重要笔记

在测试和进一步研究期间我遇到了这篇文章提供了一些澄清这可能与您的具体情况相关:

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

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

  1. 如果你正在运行由 Zend Framework 或其他使用注释的类似框架提供支持的应用程序,则还需要确保将opcache.load_commentsopcache.save_comments指令设置为true。你应该使用你的应用程序/框架文档仔细检查此建议,因为大多数文档现在都已更新了其文档,其中包含有关在其系统中正确启用 OpCache 的具体说明:

在使用注释的工具和框架中,还有一个设置也很重要。如果您使用 Doctrine、Zend Framework 2 或 PHP Unit,请记住将 opcache.load_comments 和 opcache.save_comments 设置设置为 true。这样,文件中的文档注释也将包含在 OpCache 生成的预编译代码中。此设置将允许您使用注释而不会受到任何干扰。

如果你的项目基于特定的框架或 Web 应用程序,最好检查文档中是否有关于 OpCache 配置的指南

重要笔记


希望这会有所帮助 - 如果您使用 cPanel,请发表评论让我们知道您如何处理这部分配置! 另请参阅此问题和相关评论

相关内容