如何"Apache will serve any file mapped from an URL"目录指令?



我有一个关于Apache的目录指令的问题,这里是他们在文档中所说的(http://httpd.apache.org/docs/2.4/mod/core.html#directory):

注意的默认访问权限是允许所有访问。这意味着Apache httpd将为从URL映射的任何文件提供服务。建议您使用像

这样的块来更改它。
<Directory "/">
  Require all denied
</Directory>

但是如果我只设置了DocumentRoot, Apache将如何做他们所说的(从URL映射任何文件),例如:

DocumentRoot "/usr/local/apache/htdocs"

没有Alias "/some/webspace/path" "/"UserDir或其他映射到系统根目录/的URL映射规则?

在文档的另一节(安全提示http://httpd.apache.org/docs/2.4/misc/security_tips.html#protectserverfiles)中,他们做了一个半完整的UserDir示例,我可以猜到:

Apache偶尔被误解的一个方面是默认访问特性。也就是说,除非你采取措施做出改变如果服务器可以通过正常URL找到访问文件的方法,则为它映射规则,它可以服务于客户端。

例如,考虑以下示例:

# cd /; ln -s / public_html
Accessing http://localhost/~root/

这将允许客户机遍历整个文件系统。要解决这个问题,请将以下代码块添加到服务器的配置中:

<Directory "/">
    Require all denied 
</Directory> 

这将禁止默认访问文件系统位置。

他们所说的Directory指令在http://httpd.apache.org/docs/2.4/mod/core.html#directory只是一个警告,如果你使用像mod_userdir这样的模块,然后在http://httpd.apache.org/docs/2.4/misc/security_tips.html#protectserverfiles显示?或者还有其他的东西,也许是关于Directory的一些细节没有在文档中给出?

感谢您的关注!

在Apache中,有无限的假设插件/指令可以改变 URL映射到文件系统的方式。明显的/主流的是DocumentRoot, Alias, AliasMatch, RewriteRule, UserDir等。但没有人知道还可能存在什么。

Apache只是将URI与文件系统映射完全分离,而不考虑内核是否愿意从该文件系统位置实际提供服务。

有几种方法可能会意外地暴露一些东西,比如使用mod_rewrite,默认配置文件通过默认设置保护您免受这种情况的影响。手册并不擅长总是强调编译默认值和默认配置内容之间的差异。后者在重新打包时可能会发生变化,这很棘手。

最新更新