【问题标题】:Running multiple sites on a LAMP with secure isolation在具有安全隔离的 LAMP 上运行多个站点
【发布时间】:2010-12-08 16:10:07
【问题描述】:

我一直在管理一些 LAMP 服务器,每个服务器上有 2-5 个站点。 这些基本上归同一个用户/客户端所有,因此除了通过易受攻击的守护进程或脚本进行的攻击外,没有安全问题。 我正在构建自己的服务器,并想开始托管多个站点。 我首先关心的是……隔离。 如何避免 c99 脚本破坏所有虚拟主机? 另外,我是否应该阻止 c99 能够写入/读取其他站点的目录? (很容易从另一个站点“cat”一个 config.php,然后进入 mysql 数据库) 我的服务器是 512M 可爆到 1G 的 VPS。在免费的托管管理器中,有没有适合我的 VPS 的小型管理器? (这可能与我想要的安全方法兼容) 目前我不打算托管超过 10 个站点,但我不会接受客户端/黑客可以导航到不需要的目录,或者更糟糕的是,运行恶意脚本。 FTP管理会很好。我不想让 SSH 隔离变得复杂。

在这种情况下,最佳做法是什么?基本上,托管公司做什么才能睡得好? :)

非常感谢! 大卫

【问题讨论】:

  • 这真是一个 serverfault.com 的问题。

标签: php linux security apache lamp


【解决方案1】:

为了实现终极隔离,请考虑轻量级虚拟化(Linux 上的 OpenVZ、FreeBSD jails 或类似的)。它类似于普通虚拟机,但共享内核,因此不承担完全虚拟化的开销。轻量级虚拟机还可以以协作的方式共享磁盘空间,而不是每个使用单独的磁盘映像,并且都可以使用相同文件的单个副本。缺点是轻量级虚拟机总是运行相同的内核,即你不能在另一个操作系统中运行一个操作系统,这对你来说似乎不是问题。

【讨论】:

  • 我支持这一点,因为我看到太多共享托管环境因脚本狂野运行或内存泄漏而崩溃。在虚拟化环境中,这样的事情更容易控制。此外,它的可扩展性要好得多:如果客户需要更多资源,您只需将他们的虚拟机移到更大的服务器上即可。搬家不麻烦,15分钟搞定。虚拟化很棒。
【解决方案2】:

您应该在每个虚拟主机的 Apache 配置中使用 PHP 指令 open_basedir,方法是添加以下行:

<VirtualHost x.x.x.x:80>
ServeName www.example.com
DocumentRoot /path/to/your/virtualroot
...
... usual stuff ...
...
php_admin_value open_basedir /path/to/your/virtualroot:/some/other/path
</VirtualHost>

这将限制您的所有 PHP 进程仅访问文件系统上的这个(或这些)路径。 禁止在其他位置打开文件,即使是通过 chdir() 或使用符号链接。

自 PHP5.3.0 起,您还可以在运行时使用 ini_set() 提供此指令,但恕我直言,最好直接在 vhosts.conf 文件中应用此指令。

PHP Manual

【讨论】:

  • 这正是我想要的!谢谢!
【解决方案3】:

查看适用于 Apache 2.x 的 ITK MPM:http://mpm-itk.sesse.net/

几年来,我在一些繁忙的网站上使用它,没有任何问题。

【讨论】:

  • mpm-itk 唯一的缺点是它在权限下降之前以 root 身份运行。
  • 是的,为了克服这个问题,它使用 POSIX 功能以尽可能低的权限运行自己
猜你喜欢
  • 2011-03-10
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多