正确设置具有多个用户的 Apache 虚拟主机

正确设置具有多个用户的 Apache 虚拟主机

在此先感谢您提供的任何帮助。我自学了使用 Linux (ubuntu)、apache、虚拟主机和一些与安全相关的知识,但我还没有将它们无缝地结合在一起。

我也从过去没有正确设置用户帐户和网站/虚拟主机的错误中吸取了惨痛教训。我以 root 身份 ssh 进入服务器(我知道,这很糟糕),并手动创建所有虚拟主机和文件,因此它们都归 root 所有。我的旧版 joomla 被利用,恶意垃圾邮件代码插入到我所有其他虚拟主机中。

我正在迁移到新服务器,正在寻找有关设置虚拟主机和可以访问它们的用户帐户的正确步骤。由于我们使用第三方软件,因此我们有时需要其他人通过 ftp 进入网站来调查他们的网站文件。

我们当前的服务器版本为 10.04,但新服务器版本为 12.04。所有网站文件均安装在

/home/www/site1.com

/home/www/site2.com

/home/www/site3.com

ETC

简而言之,我想这就是我所追求的。

  1. 如何正确设置虚拟主机和用户,以便它只能访问自己的文件,而不能访问服务器上的任何其他虚拟主机。例如,如果该网站被恶意代码利用,它无法感染服务器上的其他网站

  2. 我应该如何设置用户,以便他们只能通过 ftp 访问其给定的文件而不能访问任何其他站点。

如前所述,有许多文章详细介绍了如何执行其中任何一个步骤,但没有一篇文章可以将它们无缝地结合在一起。

非常感谢大家的帮助。如果您需要提供任何额外的信息,请随时提出建议。我目前正在按照教程设置 chroot,但我担心自己做得不对,因为我在此过程中发现了一些不一致之处。我也在调查 jailkit。

答案1

由于问题是在谷歌上被问到“apache虚拟主机单独用户”时最热门的搜索结果,我想根据以下内容给出更详细的答案:这个答案。我的回答不涵盖 PHP 和 CGI​​ 的使用情况(您将使用 suPHP)。它侧重于用作 apache 模块时的 PHP。

您可以使用 apache 模块Apache2-mpm-itk。它适用于当前版本的 apache 2.4。它附带指令AssignUserID。此指令定义处理虚拟主机请求的用户和组。这是我最终得到的 apache 站点配置示例:

<VirtualHost *:80>
ServerName www.site1.com
DocumentRoot /home/www/site1.com
AssignUserID site1 www-data
php_admin_value open_basedir /home/www/site1.com
...
</VirtualHost>

当然,这只能提高安全性,前提是各个 DocumentRoots 由其各自的用户拥有并且不可由组访问。为了进一步提高与 PHP 相关的安全性,脚本被限制在DocumentRootopen_basedir 限制中。至于后端文件访问,我更喜欢带有 chroot 的 SFTP

注意:apache2-mpm-itk 目前与 Apache 的 http2 模块不兼容。

答案2

我自己并不认为这是对你问题的回答。但由于我暂时无法发表评论,所以我必须在“答案”区域写下来。我季节性地从事网络管理,我以安全的方式测试和尝试事物的一种方法是设置虚拟机(即 VirtualBox)或“旧”台式计算机中的测试环境。新手网络主机管理员的一个非常常见的问题是了解网络服务器程序的工作原理。在这种情况下,我假设您需要了解 Apache 的工作原理,至少了解配置文件。我发现网页管理对于新手来说,这是一个非常有用的工具,可以管理 Apache 和其他服务。您必须花一些时间在测试环境中尝试一下,这样事情才会变得更加清晰。

回到你的问题,我认为答案可以是一篇教程文章或一本小书。首先查看以下文章:

https://www.digitalocean.com/community/articles/how-to-set-up-apache-virtual-hosts-on-ubuntu-12-04-lts

http://www.servermom.org/build-ubuntu-server-a-complete-guide/

相关内容