Configuração do FilesMatch para restringir extensões de arquivo atendidas

2

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.

    
por Colt 01.12.2014 / 16:55

2 respostas

0

Depois de pensar um pouco mais, aqui está a resposta:

A diretiva FilesMatch é aplicada ao hit "directory" antes da atribuição da diretiva mod-dir DirectoryIndex para "index.htm". Como resultado, uma condição "nula" deve passar no teste para que a solicitação seja manipulada. Com isso, essa configuração (tudo igual, exceto por essa mudança no arquivo V_HOST.conf) funciona:

<Directory /var/www/html>
  Require all granted
  <FilesMatch "((^$)|(^.+\.(htm|ico)$))">
    Require all granted
  </FilesMatch>
</Directory>

NOTA: Eu também aproveitei esta oportunidade para "apertar" o requisito nos arquivos permitidos com extensões para exigir que haja algum caractere antes do período de delineamento da extensão, o que torna menos provável que um tipo ".ht" arquivo (ou seja, um nome de arquivo que começa com um único ".") será inadvertidamente permitido por uma futura alteração na configuração.

    
por 03.12.2014 / 15:34
0

O FilesMatch é aplicado na ordem em que eles ocorrem no arquivo de configuração mesclado. O layout implícito da sua pergunta é ambíguo, mas seus resultados implicam que a ordem relativa não é como você "espera".

    
por 03.12.2014 / 04:07

Tags