我即将设置一个 VPS,用于托管我公司的多个网站,只有我才能访问这些网站。这些网站是我们自己的网站,因此,服务器上将运行我自己的代码。
所以我想知道,我是否应该费心将网站与它们自己的用户/组分开,以便对每个网站进行沙盒处理?显然,我不会将 shell 上传到其中一个网站来读取另一个网站的文件 - 我只需通过 SSH 即可:>
但是,我考虑的是,如果其中一个网站由于在 CMS/我的代码/等等中发现漏洞而被其他人攻击。如果我将其沙盒化,那么被攻击的只是一个网站,而不是所有网站。
我该为此烦恼吗?
答案1
在沙盒中运行网站始终是个好主意。但您需要问的一个重要问题是 - 您和您的客户是否愿意承受实施 suexec/suPHP 带来的性能损失?
我找不到更新的文章,但是这篇 2007 年的文章基准测试 suexec 表明它比常规 mod_php 慢 30 倍。
如果你的客户端运行的是混合技术栈(例如,Perl 和 PHP 都是必需的),你可能需要考虑读取器 MPM相反。peruser MPM 不是核心 Apache 代码库的一部分,但它列在Apache 官方维基这似乎表明 Apache 基金会相信 MPM 开发不会在一夜之间消失。
现在,如果你的客户端只运行常规的 LAMP 堆栈(重点在 P)——你可能需要研究一下PHP-FPM相反。它是一种 PHP-CGI 实现,提供本机沙盒、chrooting 和本机 PHP-CGI+suPHP 不提供的许多其他自定义功能。此外,从 PHP 5.3.3 开始PHP-FPM 是核心 PHP 堆栈的一部分,因此您不必担心兼容性问题。
答案2
简单的回答:是的,你应该这样做。
在系统上分离不同的(逻辑)用户始终是个好主意。通过每个站点拥有单独的用户,您还可以更轻松地实施文件系统配额或进程限制。
根据应用程序的性能要求和功能,您可以通过 FastCGI 而不是普通 CGI(SuPHP 使用)运行脚本。