在Ubuntu 14.04 LTS上运行apache 2.4.7服务器时,我遇到了Internet安全中心(CIS)推荐的configuration设置“限制文件扩展名”的问题。 其基本思想是(1)限制所有文件,然后(2)只允许访问要提供的文件types。
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文档根目录中的完全自包含的testing文件“index.htm”。 试图用此configuration命中服务器会导致403错误。 考虑到这个问题可能是FilesMatch如何合并的一个问题,尤其是在vHost设置和嵌套的Directory指令方面,我在V_HOST.conf文件中replace了以下内容:
<Directory /var/www/html> Require all granted <FilesMatch "^.*$"> Require all granted </FilesMatch> </Directory>
有些令我惊讶的是,这个工程! 所以…我错过了什么? 这是正则expression式的问题吗? 我是否缺less一些Apache服务器需要能够读取的“其他”文件? 我已经尝试过任何其他的expression式,试图与MAIN_APACHE2.conf(目录指令之外)的所有FilesMatch,在这一点上,我只是坚持!
任何指针在这里非常感激。 当然,如果我应该在堆栈溢出或其他地方与此请让我知道。
FilesMatch按照它们在合并configuration文件中出现的顺序进行应用。 你的问题暗示的布局是不明确的,但是你的结果意味着相对顺序不是你所期望的。
给了这个更多的思想后,这里是答案:
FilesMatch指令应用于“目录”命中之前的mod-dir DirectoryIndex指令分配给“index.htm”。 结果,“null”条件必须通过testing才能处理请求。 这样,这个设置(除了对V_HOST.conf文件的这个改变之外都是一样的)工作原理:
<Directory /var/www/html> Require all granted <FilesMatch "((^$)|(^.+\.(htm|ico)$))"> Require all granted </FilesMatch> </Directory>
注意:我也借此机会对扩展名允许的文件的要求“收紧”,要求在描述扩展名的时间段之前确实存在一些字符,这使得“.ht”types文件(即以单个“。”开头的文件名称)将在未来的configuration更改中被无意中允许。