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.
FilesMatch são aplicados na ordem em que ocorrem no arquivo de configuração mesclado. O layout implícito em sua pergunta é ambíguo, mas seus resultados indicam que a ordem relativa não é como você "espera".
Depois de pensar um pouco mais, aqui está a resposta:
A
FilesMatch
diretiva é aplicada contra a ocorrência de "diretório" antes daDirectoryIndex
atribuição da diretiva mod-dir a "index.htm". Como resultado, uma condição "nula" deve passar no teste para que a solicitação seja tratada. Com isso, esta configuração (tudo igual, exceto por esta alteração no arquivo V_HOST.conf) funciona:NOTA: Também aproveitei esta oportunidade para "endurecer" o requisito sobre os arquivos permitidos com extensões para exigir que haja realmente algum caractere antes do ponto que delineia a extensão, o que torna menos provável que um arquivo do tipo ".ht" (ou seja, um nome de arquivo começando com um único ".") será inadvertidamente permitido por uma alteração de configuração futura.