单用户 VPS 管理教育

单用户 VPS 管理教育

我正在努力学习,所以我有几个问题想问各位大神。此 VPS 将运行 wordpress 和 drupal 网站。

  1. 在具有 Debian LAMP 堆栈的单用户 VPS 上,从非 root 用户主目录(而不是 /var/www)提供网站服务的最佳方法是什么,同时确保文件/组所有权为用户:用户?我认为这是避免更改 /var/www 的所有者/组的最佳方法。

  2. 如果只有一个非 root 用户,suexec 是否有必要?我是否应该使用它?

  3. 带有 FastCGI 的 PHP 是否是目前使用的事实标准?什么时候不会使用?

  4. 我注意到,当我的 VPS 从 mpm_worker 切换到 mpm_prefork 时,内存使用量减少了一半。这是预期的行为吗?两个 MPM 在 apache.conf 中都配置了相同的设置

答案1

每个人都需要从某个地方开始 - 只有通过尝试,您才能真正学会如何做这些事情。也就是说,仅仅因为服务器可以为您的网站提供服务,并不意味着它应该为您的网站提供服务 - 大多数安全漏洞往往在被利用之前都不会显现出来。还请记住,如果您的服务器受到攻击,它不仅会影响您,还会对互联网的所有其他用户产生不利影响。

我强烈建议从虚拟机开始(例如使用 Virtualbox) - 这样您就可以毫无风险地进行实验。(另一方面,我意识到这并不像组装一台“实时”服务器那么令人兴奋,但当出现问题时,身边有个人可以打电话来帮助你,这很好)。

在继续之前,我建议你阅读保护 LAMP 服务器的技巧

并不总是只有一种正确的方法,因此,以下是一些可以帮助您入门的要点:

  1. Apache 服务的路径在您的 httpd.conf 中定义 - 查找DocumentRoot指令,它基本上定义了映射到网站根路径的文件系统路径。您通常会找到匹配的Directory定义匹配文件的特定选项、权限和行为的块。我建议从 HowToForge 上的“完美服务器”文章开始(但是,较新的文章确实有大量由 ISPConfig 配置的设置部分 - 这对于学习来说不太理想)。

尽管如此,使用/var/www是一种相当常见的做法(即使它不太符合正常的文件系统层次标准,这可能有利于/srv/www)。您需要限制权限 - 并且让包含目录的 root 拥有权限可以限制帐户/站点受到攻击时可能发生的损害。我建议简单地将每个站点添加到 /var/www 下。例如,可能的布局可能是:

  • /var/www/domain1.com - 受限用户的主目录(由该用户拥有)
    • cgi-bin-cgi 脚本目录(可能包括 FastCGI 包装器)
    • log - 指向 /var/log/ 下特定站点日志文件的符号链接
    • tmp-根据需要临时目录(例如用于上传、会话等)
    • public_html-网站的文档根目录

保留文件的权限为 644,目录的权限为 755(对可能包含密码的配置文件使用更严格的权限)。(您还可以将 Web 服务器添加到组中,具体取决于您的设置)。
  1. 您提到了多个网站(Wordpress 和 Drupal 网站)——最好尽可能将它们分开,让它们以不同的用户身份运行是一个好的开始。特定用户能做的事情越少,如果特定网站受到攻击,造成的损害就越小(也就是说,在多次此类攻击之后试图“修复”问题可能不是一个好主意——最好从头开始——推荐阅读)。suExec 是一个好主意,但是如果您使用 PHP-FPM,您可能不需要它(尽管您仍然可以将 suExec 与 PHP-FPM 一起使用)。

  2. mod_php 比 FastCGI 更快 - 但它无法处理负载(因为每个请求都会得到一个专用的 PHP 解释器,因此速度更快,但内存占用量也很大)。因此,对于任何应用程序(除了最普通的应用程序),您都应该选择 FastCGI 路线。我建议PHP-FPM- 它是一个 FastCGI 进程管理器,性能良好,大大简化了许多基本功能(如 suExec)的实现。它适用于 5.3.3 以上的 PHP 版本(以前的版本需要使用 php-fpm 补丁进行编译)。在 Apache 方面,如果您使用 PHP-FPM,则可以使用mod_fastcgi并将请求传递给正在运行的 PHP-FPM 守护程序FastCgiExternalServer

  3. Apache 使用线程和进程来响应请求。多线程方法效率更高,但并非所有模块都是线程安全的。启动更多进程总体上需要更多内存,但在某些情况下可能会更稳定。每个请求都由单个线程处理。

  • mpm_prefork 是较旧的进程管理器 - 每个进程只有一个线程 - 因此每个请求都需要一个新进程 - 这需要更多内存。
  • mpm_worker - 较新的进程管理器 - 启动少量进程,每个进程都有多个线程。这应该具有更好的扩展性并且消耗更少的资源。

切换时内存下降的原因可能有几个。首先,您可能重新启动了 Apache - 这会终止所有现有进程并启动新进程。随着时间的推移,进程的大小会增大并消耗更多内存 - 新进程使用的内存较少。其次,您在 httpd.conf 中设置的值可能为每个进程管理器定义了不同的起点(例如,如果 mpm_worker 有更多线程,您会认为相同数量的正在运行的进程将消耗更多内存 - 但是,它们也将能够处理更多请求)。(每个进程管理器指令的含义在 httpd.conf 中都有说明 - 或者您可以查看 [此答案][7])。

最后,如果你在低内存 VPS 上运行,我建议你研究一下NginX而不是 Apache。虽然 Apache 的使用更为广泛,但 Nginx 更易于设置、占用资源更少,并且通常提供更好的性能(尤其是“开箱即用”)。

无论您选择哪条路线,请将互联网视为一个充满敌意的环境 - 保持您的软件包为最新版本(使用您的软件包管理器,并尽可能避免编译)并始终牢记安全性(例如避免使用 FTP,而使用 SCP) - 希望得到最好的结果,但要做最坏的打算。

相关内容