Apache DocumentRoot 的安全性

Apache DocumentRoot 的安全性

我有一个关于 Apache 安全性的一般问题DocumentRoot,这个问题来自我在安装 Galaxy(一种生物信息学 Web 服务和基础设施)时读到的一份声明。声明中说

“请注意,Galaxy 绝不能位于 Apache 的 DocumentRoot 内的磁盘上。
默认情况下,这会将 Galaxy 的所有内容(包括数据集)暴露给网络上的任何人。”

此段摘自 https://wiki.galaxyproject.org/Admin/Config/ApacheProxy

DocumentRoot那么问题是将一些内容放入与 放入 的子目录中有什么区别DocumentRoot?即使将内容默认放在子目录中,是否所有内容也会暴露给网络上的任何人?

如果我将内容放入DocumentRoot服务器SSL,并且只允许经过身份验证和授权的用户访问,这是否可以解决全球访问问题?

更新:感谢大家的深思熟虑的回答。我想我所有的问题都得到了答案。总结一下:

  1. 除非设置了不同的权限,否则每个人都可以访问 DocumentRoot 中的子目录。

  2. SSL 仅保护网络上传输的数据包,而不保护文件的权限。

  3. 身份验证/授权将限制谁可以访问 DocumentRoot。

  4. Unix/Linux 文件权限不会影响访问,因为所有文件都必须由 Web 服务器所有者访问。

答案1

DocumentRoot 的子目录仍被视为在 DocumentRoot 内。

当某些软件包建议不要将包的一部分放在 DocumentRoot 内部时,其目的是让它实际上位于 DocumentRoot 之外。

例如,如果你的 DocumentRoot 是/var/www/example.com/html你可能想把这些文件放在其他地方,比如说/var/www/example.com/restricted

并且,SSL 并没有解决,甚至没有解决在文档根目录内有敏感配置文件的问题!

答案2

补充 Joe Sniderman 的回答,将文件放在文档根目录之外会使在浏览器中输入 URL 的用户无法访问它们,但仍然可供在文档根目录中运行的脚本访问。

例如,您可以创建一份匿名化并汇总用户登录数据的报告。您将脚本放在文档根目录中,以便/var/www/example.com/html/report.php其他人可以看到您的网站有多受欢迎。

您的报告必须使用原始用户数据,因此它会引用一个文件/var/www/example.com/restricted/login.log作为源。此文件不在文档根目录中,因此只能通过 report.php 访问,而 report.php 无论如何都会匿名化数据。您不会希望原始数据公开,因此您需要将这些敏感数据放在文档根目录之外。

答案3

DocumentRoot 下的所有内容都被视为网站的一部分,如果您知道路径,Apache 将适时提供它们。

但....

保护文件夹非常简单。只需为其制定重写规则、访问控制等即可。

但最好将各种脚本放在其他地方。其他答案有这样的几行:

/var/www/example.com/restricted

但那并不在 DocumentRoot 之外。这是在外面:

/var/www/example.com-scripts/

或者:

/var/admin-code/example.com/

或者文件系统中的其他任何地方。您所需要的只是希望其代码位于其他地方的软件,以及一个配置设置,告诉它文件夹的位置。

如上所述,SSL 不会为您做任何事情,除了确保黑客 #2 无法窃听黑客 #1 读取您的数据库密码。

答案4

引文

“请注意,Galaxy 绝不能位于 Apache 的 DocumentRoot 内的磁盘上。默认情况下,这会将 Galaxy 的所有内容(包括数据集)暴露给网络上的任何人。”

适用于特定软件以及它期望如何完成设置!

根据上述内容,默认的 Galaxy 配置可能意味着DocumentRoot 之下(“内部”)的所有文件都可以访问

这就是为什么你应该将无法访问的文件移出那里。

在其他安装或 Galaxy 的非标准安装中,此假设可能不成立。具体来说,Directory指令可能会打开或关闭文件系统的某些部分,Location指令可能会打开或关闭 URI 树的某些部分,Alias指令可能会将文件系统子树映射到 URI,文件系统级权限以及强制访问控制(通过 SELinux 或其他系统= 可能会允许或授予 Web 服务器进程对文件系统某些部分的访问权限。

“移出 DocumentRoot” 的一个例子:

在此处输入图片描述

相关内容