我一直在pipe理几个LAMP服务器,每个服务器有2-5个站点。 这些基本上由同一个用户/客户拥有,所以除了通过易受攻击的代理或脚本进行攻击外,没有任何安全问题。 我正在build立自己的服务器,并希望开始托pipe多个网站。 我首先关心的是…隔离。 我怎样才能避免一个C99脚本可以毁坏所有的虚拟主机? 另外,我应该防止c99能够写/读其他网站的目录吗? (这是很容易从另一个网站“猫”一个config.php,然后进入MySQL数据库)我的服务器是一个512M的VPS突发到1G。 在免费的托pipe经理中,有没有一个适合我的VPS的小个子? (这可能与我想要的安全方法兼容)目前我不打算主持10个以上的站点,但我不会接受客户端/黑客可能导航到不需要的目录,更糟糕的是,运行恶意脚本。 FTPpipe理会很好。 我不想让SSH隔离变得复杂。
这种情况下的最佳做法是什么? 基本上,托pipe公司做什么睡觉好? 🙂
非常感谢! 大卫
你可以使用chattr +我对deface部分,但它不会修复的PHP错误。 典型的PHP安全function将有所帮助,在最坏的情况下,chroot也是可能的。
购买你的出路:
迈克尔的build议是使用VPS,我同意这一点,但我相信你说你现在有一个VPS,这可能是XEN或OpenVZ已经。 我从来没有听说过任何人嵌套VPSs。
所以我会推荐虚拟化来包含东西,但是我认为如果你有一堆网站,你可能想租一个整个服务器 ,然后运行OpenVZ或者Xen。 然后把每个网站或一组网站放在自己的容器中。 如果您不担心某些站点彼此交互,请将它们放在一个容器中,并使用虚拟主机,否则给他们自己的虚拟机。
关于这个方法的一件事情是,你可能想要获得更多的IP,这将花费更多。 你也许可以用反向代理工作,但是这可能比它的价值更麻烦。
所以购买一台整机和一些IP,可能会让你付出更多的代价。 但是我认为这比购买相同数量的VPS要便宜。 如上所述,在os中包含内容是非常棘手的。 所以总的来说,我的解决scheme只是通过租用服务器和获取IP来花更多的钱,但最终我认为这会让所有的事情变得简单。
对于这种应用程序,我会认真考虑Linux系统虚拟化的OpenVZ 。 它不是像XEN或Virtualbox这样的虚拟机系统,因为它不模拟CPU。 相反,它创build的容器将一组Linux进程与机器上运行的其他进程隔离开来。
我将在Apache中使用mod_suexec并将所有脚本作为CGI运行。 这允许您将用户设置为在虚拟主机定义中运行。 然后可以将每个虚拟主机子目录设置为不同的所有者,但是是相同的组。 一切都是组可读的,但只有用户可写。 这并不能完全防止恶意观看,但是还有很长的路要走。
因此,Apache服务器运行(使用Debian的设置,因为这是我所知道的)www-data.www-data,所有的虚拟主机目录设置为组www-data,但基于客户端的用户。
请注意,我通常设置虚拟主机的方式是使用以下目录结构:
vhost1-root /html /scripts
你可以有任何你想在那里,但Apache指向的html
目录。 然后,由于suexec控制用户使用, scripts
和其他任何东西都可以在客户端特定的组中,使其他客户端无法读取它们。 不幸的是,过去我一直没有使用suexec,因为我一直拥有所有的网站。 但总的来说这种结构运行良好。
查看Apache 2.x的ITK MPM: http : //mpm-itk.sesse.net/
mpm-itk允许你在单独的uid和gid下运行你的每个虚拟主机 – 简而言之,一个虚拟主机的脚本和configuration文件不再需要被所有其他虚拟主机读取。
我在一些繁忙的网站上使用了几年,现在没有任何问题。
此外,它可以在基于Debian的发行版中以apache2-mpm-itk方式获得,并且也可以在其他版本中使用。
还有一个更老的select,Peruser MPM,但是上次我检查时很容易出现错误和难以configuration。
在RHEL / CentOS 5中使用mpm-itk增加Apache Vhost安全性http://blog.lystor.org.ua/2010/04/increase-apache-vhost-security-mpm-itk.html