我一直在管理一些LAMP服务器,每个服务器上有2-5个站点。 这些基本上由同一个用户/客户端拥有,因此除了通过易受攻击的守护程序或脚本的攻击之外没有任何安全问题。 我正在建立自己的服务器,并希望开始托管多个站点。 我首先关注的是......隔离。 如何避免c99脚本破坏所有虚拟主机? 另外,我应该阻止c99能够写/读其他网站的目录吗? (很容易从另一个站点“cat”一个config.php,然后进入mysql数据库) 我的服务器是一个VPS,512M突发到1G。在免费托管经理中,是否有适合我的VPS的小型服务? (这可能与我希望的安全方法兼容) 目前我不打算托管超过10个站点,但我不接受客户端/黑客可以导航到不需要的目录,或者更糟糕的是,运行恶意脚本。 FTP管理没问题。我不想让SSH隔离复杂化。
在这种情况下,最佳做法是什么?基本上,托管公司做什么睡得好? :)
非常感谢! 大卫
答案 0 :(得分:8)
您应该在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()或使用符号链接,也禁止在其他位置打开文件。
您也可以在运行时使用ini_set()从PHP5.3.0开始提供此指令,但是最好直接在vhosts.conf文件中应用它。
答案 1 :(得分:1)
查看针对Apache 2.x的ITK MPM:http://mpm-itk.sesse.net/
我现在在很多繁忙的网站上使用它已经有几年了,没有任何问题。
答案 2 :(得分:1)
为了实现最终隔离,请考虑轻量级虚拟化(Linux上的OpenVZ,FreeBSD jails或类似版本)。它与orginary虚拟机类似,但共享内核,因此不承担完全虚拟化的开销。轻量级VM还可以以协作方式共享磁盘空间,而不是每个都使用单独的磁盘映像,并且都可以使用相同文件的单个副本。缺点是轻量级VM总是运行相同的内核,即你不能在另一个内部运行一个操作系统,这对你来说似乎不是问题。