8

从安全/性能的角度来看,您建议使用 php 设置共享服务器是什么?

  • Apache mod_php(你如何保护它?除了 safe_mode,因为它不会在 PHP6 中)
  • Apache CGI + suexec
  • Lighttpd 并为每个用户生成一个 FastCGI

LE:我对使用已经制作好的控制面板不感兴趣,因为我正在尝试编写自己的控制面板,所以我想知道自己设置它的最佳方法是什么。我正在考虑使用 Lighttpd 并为每个托管用户生成一个 fastcgi,使 fcgi 进程在他的凭据下运行(在 lighttpd wiki 上有一个教程)。这会有点安全,但这会影响性能(每个 fcgi 需要大量用户/内存)以至于它不是一个可行的解决方案吗?

4

4 回答 4

11

就个人而言,虽然 Lighttpd 还可以,但如果您最终使用轻量级 Web 服务器 + FastCGI 解决方案,我会选择 Nginx + FastCGI。我已经运行了基准测试并阅读了所有代码,并且 Nginx 在负载下速度更快/更稳定一个数量级——非常好。

但是,这不是你问的。从本质上讲,我会说在您列出的三个选项中存在一系列安全/可扩展性与速度权衡,您只需要决定您想要的位置。如果您是共享托管服务提供商,不信任的用户安装了天知道的 PHP 应用程序,您将更倾向于安全性,如果在更受信任的用户之间共享,您可能更倾向于性能。以下是我的想法:

CGI + suexec:就共享托管环境中的用户/站点数量而言,这是迄今为止最安全、最高效/可扩展的。进程只在请求进来时才被派生,内存只被使用。当然,CGI 派生使得这对于单个脚本的执行时间来说是最慢的。慢多少?好吧,您必须进行基准测试,但通常如果人们正在运行长时间运行的应用程序(例如,像 WordPress 这样的应用程序,加载其库并在每个请求上初始化需要 0.25-0.5 秒),那么 CGI 生成惩罚开始看起来很漂亮在上下文中可以忽略不计。

FastCGI:这里的问题(无论您的网络服务器是 Apache、Lighttpd 还是 Nginx 都无关紧要)是弄清楚您让每个用户运行多少个 FCGI 子进程,因为每个进程占用的内存等于 PHP 解释器的大小(在 Linux 中,当然不是所有的都是有线的,但我离题了)。而且,与 mod_php 不同,这些进程不会在用户之间共享,因此您必须限制每个用户。例如,Dreamhost 为他们的客户将这个上限限制为 3 - 现在,对于一个运行网站的客户,该网站每秒获得超过 2-5 次页面浏览量,这实际上非常糟糕,因为这些请求只会堆积起来,网站就会挂起。现在,当我在专用服务器上运行应用程序时,我喜欢带有轻量级网络服务器的 FastCGI服务器/集群,当我可以为应用程序提供数百个 FCGI 子级时(当然,所有这些都具有 webserver privs,à la Apache/prefork + mod_php)。但是,我认为共享主机没有意义,您必须为每个用户分配/限制 FCGI 子代。

Apache + mod_php:最不安全,因为一切都使用 webserver privs 运行,但是您的实时 PHP 进程池是共享的,因此它在性能方面是最好的。从开发人员的角度来看,我不能容忍 php_safe 模式,从系统管理员的角度来看,这实际上只是一种安全错觉(它可以减轻愚蠢的用户,但不能防止实际攻击)所以我实际上宁愿使用 CGI 如果我的其他选项必须包括 safe_mode。

Dreamhost 确实是一种混合,默认情况下他们使用 Apache CGI + suexec,但是如果他们愿意,允许他们的更多(小)百分比的老练用户选择使用 FCGI,这取决于上限和他们自己对内存使用情况的监控. 与默认情况下为每个人启用 FCGI 相比,这节省了大量内存资源。

如果您在谈论标准的商业共享主机,另一个问题是,Apache 功能齐全,具有几乎任何东西的模块(包括您可能想要的 mod_security 之类的东西),并且您的用户会喜欢它,因为他们所有的 .htaccess 配置都可以工作等等——当他们去安装 Drupal 或 WordPress 或其他任何东西时,你会遇到任何其他问题的支持头痛(如果我们谈论的是内部用户,那么问题就小得多了)。

就个人而言,我建议保持简单的开始并使用 CGI + suexec 以获得最佳的安全性和可扩展性。如果您的用户想要 FCGI 或 mod_php,并且您有一个很好的渠道可以与他们进行建议/交流,他们会提出要求,但是对于您来说,这两者中的任何一个都是更令人头疼的问题,对他们来说只有边际性能改进,所以我的建议最初是不做其中任何一个,但如果他们吵着要做出回应。

我很同情做一些“有趣”的事情,比如 Lighttpd + FCGI 而不是标准的 Apache + CGI + suexec,但我内心深处我真的不能推荐它。

如果您正在运行多台服务器,那么您最终可能会将 CGI 放在一些服务器上,而将其他一些服务器放在其他服务器上供高级用户使用。并且一定要 cron grep 所有 www 目录,例如旧版本的 phpBB!

于 2008-10-08T11:11:16.067 回答
2

我推荐Suhosin

于 2008-10-07T12:08:34.160 回答
1

关于 PHP + FastCGI 和安全性,请查看这篇博文

保护共享托管服务器的挑战是如何保护网站免受来自外部和内部的攻击。PHP 有内置功能可以提供帮助,但最终它不是解决问题的地方。

我已经写过许多可行的解决方案,但是我一次又一次地被要求查看的一个选项是使用 PHP + FastCGI。人们相信使用 FastCGI 将克服 Apache 的 suexec 或 mod_suphp 的性能问题,因为 FastCGI 进程在页面视图之间持续存在。

但在我们查看性能之前,第一个问题是:首先我们如何让 PHP 和 FastCGI 作为不同用户在一个 Web 服务器上运行?

于 2008-10-07T14:58:54.643 回答
0

我已经使用InterWorx大约一年了,印象非常深刻。它维护一个带有 chroot 脚本的 LAMP 服务器以确保安全。

我也使用过Ensim,但没有发现它友好、快速并且没有那么多功能。再加上它的成本要高得多。

于 2008-10-06T20:56:07.667 回答