在 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 或其他地方,请告诉我。