我对 Gnu/Linux 的经验很少。
我现在正在配置一台 VPS (Debian 10),我想在其上创建多个 Apache2 虚拟主机。
所有虚拟主机目录都将位于/var/www/vhosts
.
因此,对于每个虚拟主机(例如myproject.com
):
/var/www/vhosts/myproject.com
/var/www/vhosts/myproject.com/public_html
/var/www/vhosts/myproject.com/__logs__
对于每个虚拟主机,都会创建一个新用户。对于上面的例子 - usr_myproject
.该用户的主目录(用于 FTP 目的)应该是/var/www/vhosts/myproject.com
.
我的问题是为此用户和虚拟主机目录分配正确的权限和组。关于目录的同样问题/var/www/vhosts
。
任何帮助或网络资源链接将不胜感激。
谢谢。
答案1
这ITKapache2 的模块为每个虚拟主机提供不同的系统用户支持。它针对 Debian 打包为apache2-mpm-itk
.
它不会创建或管理用户 - 这取决于您使用常用工具。
我曾经经常使用这个(当我在共享服务器上运行大量虚拟主机时),并且我通常会对其进行设置,以便每个虚拟主机都有自己的主目录(/home/WEB/username
),html
以及logs
与cgi-bin
此相关的所有其他内容vhost 在他们的主目录下。这使得在必要时更容易迁移到另一台服务器。
它还使虚拟主机的所有者更容易使用ftp
或sftp
更新其站点或获取自己的日志文件等。并且它确保一个虚拟主机的所有者无法读取属于其他虚拟主机的文件 - 保护数据库等机密信息嵌入脚本或配置文件中的密码。
来自 ITK 网页:
apache2-mpm-itk(简称 mpm-itk)是 Apache Web 服务器的 MPM(多处理模块)。 mpm-itk 允许您在单独的 uid 和 gid 下运行每个虚拟主机 - 简而言之,一个虚拟主机的脚本和配置文件不再需要对所有其他虚拟主机可读。
mpm-itk 基于传统的 prefork MPM,这意味着它是非线程的;简而言之,这意味着您可以毫无问题地运行非线程感知代码(如许多 PHP 扩展)。另一方面,当然,您会失去使用线程获得的任何性能优势;你必须自己决定这是否值得。与 prefork 相比,您还会遭受额外的性能损失,因为每个请求都会有一个额外的 fork。
和:
prefork MPM 上的新配置设置是:
分配用户ID:采用两个参数,uid 和 gid(或者实际上是用户名和组名;如果要指定原始 uid,请使用“#”);指定虚拟主机将运行的 uid 和 gid(当然,在解析请求等之后)。请注意,如果您不分配用户 ID,则将使用 Apache 中的默认用户 ID。
分配用户 ID 表达式,分配组 ID 表达式(仅限 Apache 2.4 或更高版本):与AssignUserID 类似,但采用Apache 表达式来动态选择用户或组。见下文。
最大客户端虚拟主机数:虚拟主机的单独 MaxClient。如果您的一半虚拟主机依赖于某个 NFS 服务器,这可能会很有用;如果 NFS 服务器出现故障,您不希望子进程永远在 NFS 上等待以将不依赖 NFS 的主机宕机。因此,这可以作为一种安全措施,让依赖 NFS 的虚拟主机出现“服务器太忙”的情况,同时保持其他虚拟主机正常运行。 (当然,您可以使用它来简单地防止一个站点消耗太多资源,但可能有更好的方法来做到这一点。)
尼斯价值:让您可以减少一些请求,从而减少它们的 CPU 时间。
启用功能(仅限 Apache 2.4 或更高版本):删除父进程中的大多数 root 功能,并以具有一些额外功能(特别是 setuid)的 User/Group 指令指定的用户身份运行。更安全(尤其是与上面的 LimitUIDRange 结合使用时),但在从不支持功能的文件系统(例如 NFS)提供服务时可能会导致问题。
限制UID范围,限制GID范围(仅限 Apache 2.4 或更高版本):将 setuid() 和 setgid() 调用限制在给定范围内(例如“LimitUIDRange 1000 2000”仅允许 1000 到 2000(含)之间的 uid),可能会在一定程度上提高安全性。请注意,这需要 seccomp v2(Linux 3.5.0 或更高版本)。此外,由于技术原因,setgroups() 不受限制,因此恶意进程仍然可以获取它可能想要的任何组,但执行成功的攻击会比其他方式更加棘手。
答案2
您可能会发现文件 ACL 很有用,这样每个用户都可以拥有自己的文件,但您可以使用 ACL 允许 apache 能够读取它们。您可能还想查看 ACL 的默认权限。