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 ideia básica é (1) restringir todos os arquivos e (2) permitir o acesso apenas aos tipos de arquivo a serem servidos.
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 totalmente independente "index.htm" localizado na raiz do documento vHost. A tentativa de atingir o servidor com esta configuração resulta em um erro 403. Pensando que esse problema pode ser uma questão de como o FilesMatch se mescla, especialmente com o vHost configurado e a diretiva Directory aninhada, substituí o seguinte no arquivo V_HOST.conf:
<Directory /var/www/html>
Require all granted
<FilesMatch "^.*$">
Require all granted
</FilesMatch>
</Directory>
Para minha surpresa, isso funciona! Então ... o que estou perdendo? Isso é um problema com a expressão regular? Estou perdendo algum "outro" arquivo que o servidor Apache precisa ser capaz de ler? Eu tentei várias outras expressões, tentei com TODOS os FilesMatch no MAIN_APACHE2.conf (fora da diretiva Directory) e neste ponto estou travado!
Quaisquer dicas aqui são muito apreciadas. Claro, se eu estiver no Stack Overflow ou em outro lugar com isso, por favor me avise.