Operando um servidor apache 2.4.7 no Ubuntu 14.04 LTS, estou tendo um problema com uma configuração para "Restringir extensões de arquivo", conforme recomendado pelo Center for Internet Security (CIS). A idéia básica é (1) restringir todos os arquivos e (2) permitir acesso somente aos tipos de arquivos a serem atendidos.
O arquivo MAIN_APACHE2.conf inclui, na parte relevante, o seguinte:
<Directory />
Require all denied
AllowOverride None
Options None
<LimitExcept GET HEAD OPTIONS>
Require all denied
</LimitExcept>
</Directory>
<FilesMatch "^.*$">
Require all denied
</FilesMatch>
O arquivo V_HOST.conf incluído inclui, na parte relevante, o seguinte:
DocumentRoot /var/www/html
<Directory /var/www/html>
Require all granted
<FilesMatch "^.*\.(htm)$">
Require all granted
</FilesMatch>
</Directory>
O único arquivo no servidor é um arquivo de teste "index.htm" totalmente independente, localizado na raiz do documento do vHost. A tentativa de acertar o servidor com essa configuração resulta em um Erro 403. Pensando que esse problema pode ser uma questão de como o FilesMatch mescla, especialmente com a configuração do vHost e a diretiva Diretório aninhada, substituímos o seguinte no arquivo V_HOST.conf:
<Directory /var/www/html>
Require all granted
<FilesMatch "^.*$">
Require all granted
</FilesMatch>
</Directory>
Um pouco para minha surpresa, isso funciona! Então, o que estou perdendo? Isso é um problema com a expressão regular? Estou faltando algum "outro" arquivo que o servidor Apache precisa ser capaz de ler? Eu tentei qualquer número de outras expressões, tentei com ALL do FilesMatch no MAIN_APACHE2.conf (fora da diretiva Directory) e neste momento estou apenas preso!
Todos os ponteiros aqui são muito apreciados. Claro, se eu deveria estar no Stack Overflow ou em outro lugar com isso, por favor me avise.