我对Apache DocumentRoot安全性有一个普遍的疑问,它来自我在安装Galaxy(一种生物信息networking服务和基础设施)时阅读的声明。 声明说
“请注意Galaxy不应该放在Apache的DocumentRoot内的磁盘上。
默认情况下,这会将所有的Galaxy(包括数据集)暴露给networking上的任何人。“
本段来自https://wiki.galaxyproject.org/Admin/Config/ApacheProxy
所以问题是把DocumentRoot一些内容放到DocumentRoot的子目录中有什么区别? 即使将内容放在子目录中,默认情况下,所有内容都将暴露给networking上的任何人也是真的吗?
如果将内容放在SSL服务器的DocumentRoot中,并且只允许经过身份validation和授权的用户访问,是否可以解决全球范围内的访问问题?
更新:谢谢大家的深思熟虑的答案。 我想我已经回答了所有的问题。 总结:
除非具有不同的权限设置,否则DocumentRoot中的子目录将可供所有人访问。
SSL只保护通过networking传输的数据包,而不是文件的许可。
authentication/授权将限制谁可以访问DocumentRoot。
Unix / Linux文件权限不会影响访问,因为所有文件都必须可以由Web服务器所有者访问。
DocumentRoot的子目录仍在DocumentRoot中考虑。
当一些软件包build议将部分包放在DocumentRoot中时,意图是它实际上应该在DocumentRoot之外。
所以,举例来说, 如果您的DocumentRoot是/var/www/example.com/html您可能希望将这些文件完全放在其他位置,如说/var/www/example.com/restricted
不,SSL没有解决,甚至没有解决关于在doc根内有敏感configuration文件的担心!
要添加到Joe Sniderman的答案中,将文件放在文档根目录之外会使用户无法访问在浏览器中inputurl的用户,但仍可用于在文档根目录下运行的脚本。
例如,您可以创build一个匿名和汇总用户login数据的报告。 你把脚本放在你的文档根目录下, /var/www/example.com/html/report.php所以其他人可以看到你的网站是多么stream行。
您的报告必须使用原始用户数据,因此它会将源文件/var/www/example.com/restricted/login.log引用。 这个文件不在文档根目录下,因此除非通过report.php,否则匿名数据是不可访问的。 您不希望将原始数据公开,以便将敏感数据从文档根目录中分离出来。
DocumentRoot下的任何东西都被认为是网站的一部分,并且如果你知道path的话,将会被Apache正式交付。
但….
保护文件夹非常容易。 只要制定一个重写规则,或访问控制,或任何。
但是把各种脚本放在别的地方会更好。 其他答案有这样的行:
/var/www/example.com/restricted
但是这不在DocumentRoot之外。 这是在外面:
/var/www/example.com-scripts/
要么:
/var/admin-code/example.com/
或者真的在文件系统的其他地方。 所有你需要的是那些期望它的代码在其他地方存在的软件,以及你在哪里告诉它文件夹在哪里的configuration设置。
如前所述,除了确保黑客#2不能窃听黑客#1读取数据库密码之外,SSL不会为你做任何事情。
引用
“请注意,Galaxy不应该放在Apache的DocumentRoot中的磁盘上,默认情况下,这会将所有的Galaxy(包括数据集)暴露给networking上的任何人。
适用于某个特定的软件,以及它如何完成设置!
根据以上所述。 默认的Galaxyconfiguration可能意味着DocumentRoot下面的所有文件(“内部”)都是可访问的 。
这就是为什么你应该移动文件不能被访问。
在其他安装或Galaxy的非标准安装中,这种假设可能并非如此。 特别是Directory指令可以打开或closures部分文件系统, Location指令可以打开或closures部分URI树, Alias指令可以将文件系统子树映射到URI上,文件系统级权限以及强制访问控制(通过SELinux或其他系统=可以允许或授予对networking服务器进程的部分文件系统的访问权限。
“移动到DocumentRoot之外”的示例:
