LAMP 堆栈,仅对特定目录进行读/写访问

LAMP 堆栈,仅对特定目录进行读/写访问

我正在考虑建立一个 AWS 微实例,以便可以从中运行许多不同的、不相关的网站。

我在使用共享主机时遇到的一个问题是,我的一些客户运行的 Wordpress 网站有时无法像我希望的那样及时更新到最新版本,导致这些网站容易受到安全漏洞的影响。以前,当其中一个 Wordpress 网站受到攻击时,我的共享主机上的所有其他网站都会受到影响,包括非 Wordpress 网站。

如果再次发生这种情况,我至少希望能够控制住这种情况。有没有办法,在单个 Linux 实例上,我可以拥有多个 PHP“用户”(非常宽泛地使用这个术语),每个用户都具有不超过网站根级目录的读写权限?

我看到过关于开放VZ但这似乎会对性能造成很大影响,但收益却很小。

如果之前已经有人问过这个问题,我深表歉意 — — 这是那些很难用简洁的措辞进行 Google 搜索的问题之一,但很明显,肯定有人之前问过同样的问题。

答案1

您可以使用文件权限来隔离单个虚拟机(EC2 实例)上的事物。您可以拥有单独的 PHP 池,并且它们可以根据此权限以不同的用户身份运行DO 教程。该教程基本上是您需要执行的操作的指南,并且可能比使用 ECS 更好。

你应该看看t2 实例,t2.micro 可能有点小,有多个池,但小型或中型可能适合您。当然,您必须进行一些测试。您可以向 EC2 实例添加虚拟内存,但存在缺点,特别是因为磁盘在 t2 实例上跨网络。其他实例类型有本地磁盘,上一代 M3/C3 实例,但您最好使用具有足够 RAM 的 t2 或当前一代实例。

或者看看AWS EC2 容器服务,又称托管 docker。这样您就可以将所有内容完全分开,但代价是运行多个资源密集型应用程序(如 PHP,这会占用大量内存)。微实例可能不适合许多容器,但t2.大或类似的可能合适。

更新——后续问题 Nginx 是一款快速、高效的 Web 服务器和反向代理,占用的内存非常少,而且配置起来也相对容易。Apache 更大,可以使用许多模块完成更多任务,但占用的资源也更多。

我在 t2.nano 上托管了 5 个网站和 MySQL,但偶尔在进行大型 yum 更新时会耗尽 RAM。t2.micro 最初可能适合您,但这取决于您有多少个 PHP 池 - 它们可能占用大量内存。我有一个有关如何配置 MySQL 以使用最少 RAM 的指南。从 t2.micro 和 RDS 服务开始,两者都在免费层,这样您的数据库就可以在单独的机器上运行,从而节省 RAM。如果由于 RAM 要求而必须升级到更大的实例大小,请不要感到惊讶。

来自评论的更新 @tero Kilkanen 指出了以下非常有价值的观点

如果您希望 PHP 工作进程之间有更多隔离,可以考虑使用 PHP-FPM 的 chroot 功能。使用 chroot,每个 PHP 进程只能访问其 chroot 中的目录。但是,这需要做更多的工作来设置,我不知道是否有任何指南可以做到这一点

相关内容