在 Linux Apache 服务器上设置多个站点

在 Linux Apache 服务器上设置多个站点

我知道如何设置 Apache 服务器并使多个站点正常运行,但这个问题更多的是关于最佳实践。

基本上,我有一个运行 Ubuntu 服务器的 VPS,我想从中运行多个网站。我想做的是为每个帐户在主文件夹中设置一个目录,但我的sites帐户能够创建、修改和删除每个文件夹中的文件,而无需使用 root 权限。这可行吗?如果可行,这是设置我的环境的可接受方式吗?

答案1

谢谢 user204088 - 一个关于权限的问题,描述了一个安全模型!(大多数人只是抱怨他们无法让东西正常工作,并接受将权限更改为 0777 的答案)。

您没有提到的一件事是如何创建站点,如何修改站点,以及站点之间应该有多少隔离。

需要注意以下几点:

1)我建议将文档根目录设置为文件夹以下主文件夹。这样,您就可以拥有每个站点的包含目录、每个站点的上传目录和每个站点的会话数据目录,而这些目录都不会由 Web 服务器以 URL 形式提供。这也意味着 /etc/skel 中的所有垃圾都无法访问。

2)除非在极少数情况下,你的网络服务器不应该有写入权限任何文档根目录内的内容。

为了创建用户(带有主目录),您需要具有 root 权限 - 因此我将在 /etc/skel 中设置一个模板站点,并编写一个简单的 bash 脚本来创建用户并将 vhost 记录添加到 httpd.conf(在我的 PCLinux 机器上,它位于 /etc/httpd/conf/vhosts.d - 将文件命名为与主机名相同,但去掉 www. 前缀)

允许站点帐户对所有站点内容进行读/写访问是混乱的地方。您可以设置一个公共组并确保所有文件/目录都是组可写的(chmod g+S),但这意味着用户可以访问彼此的内容。采用每个用户一个组的模型,将文件权限设置为组可写,并将“站点”帐户添加到每个单用户组可能是一个更好的主意。

Apache 通过“其他”获取对文件/目录的读取权限 - 因此请记住适当设置 umask。

将这一切打包成一个只能由 root 运行的 bash 脚本很简单。你可以从你的 web 服务器通过 sudo 调用它(确保添加了进一步的身份验证),以便在创建帐户/虚拟主机时放置一个简单的前端。

一旦创建用户帐户,您就可以使用“站点”帐户操作文件。

答案2

这是可能的,如果您认为这是维护服务器的可接受方式,我认为它不是一个可行的选择。另一种方法是不要使用站点用户,而是以 apache 或您使用的任何 Web 服务用户身份运行脚本。

相关内容