在 Ubuntu 14.04 LTS 上运行 apache 2.4.7 服务器时,我遇到了 Internet 安全中心 (CIS) 建议的“限制文件扩展名”的配置设置问题。基本思想是 (1) 限制所有文件,然后 (2) 只允许访问要提供的文件类型。
MAIN_APACHE2.conf 文件在相关部分包括以下内容:
<Directory />
Require all denied
AllowOverride None
Options None
<LimitExcept GET HEAD OPTIONS>
Require all denied
</LimitExcept>
</Directory>
<FilesMatch "^.*$">
Require all denied
</FilesMatch>
包含的 V_HOST.conf 文件在相关部分包括以下内容:
DocumentRoot /var/www/html
<Directory /var/www/html>
Require all granted
<FilesMatch "^.*\.(htm)$">
Require all granted
</FilesMatch>
</Directory>
服务器上唯一的文件是位于 vHost Document 根目录中的完全独立的测试文件“index.htm”。尝试使用此配置访问服务器会导致 403 错误。考虑到这个问题可能是 FilesMatch 如何合并的问题,尤其是在 vHost 设置和嵌套 Directory 指令的情况下,我在 V_HOST.conf 文件中替换了以下内容:
<Directory /var/www/html>
Require all granted
<FilesMatch "^.*$">
Require all granted
</FilesMatch>
</Directory>
令我惊讶的是,这行得通!所以......我错过了什么?这是正则表达式的问题吗?我是否缺少 Apache 服务器需要能够读取的一些“其他”文件?我尝试了许多其他表达式,尝试了 MAIN_APACHE2.conf 中的所有 FilesMatch (在 Directory 指令之外),此时我只是卡住了!
非常感谢这里的任何指针。当然,如果我应该在 Stack Overflow 或其他地方,请告诉我。
FilesMatch 按照它们在合并的配置文件中出现的顺序应用。您的问题所暗示的布局是模棱两可的,但您的结果暗示相对顺序不是您“预期的”。
在考虑了更多之后,这是答案:
在将 mod-dir指令分配给“index.htm”之前,该
FilesMatch
指令应用于“目录”命中。DirectoryIndex
因此,“空”条件必须通过测试才能处理请求。有了这个,这个设置(除了对 V_HOST.conf 文件的这个更改之外都一样)有效:注意:我还借此机会“收紧”了对带有扩展名的允许文件的要求,要求在描述扩展名的期间之前实际上有一些字符,这使得“.ht”类型文件(即以单个“。”开头的文件名)将在未来的配置更改中无意中被允许。