Apache2: Permitir indexação de diretório, mas restringir o acesso ao arquivo por tipo

2

Eu preciso configurar meu servidor Apache2 (versão 2.2.22) de forma que eu permita a indexação automática da pasta raiz WWW e de seus subdiretórios, mas restrinja o acesso (ou seja, restrinja o download) a apenas um conjunto de tipos de arquivos específicos (ou seja, .txt e .log). Em outras palavras, qualquer um pode ver quais arquivos estão presentes, mas somente determinados tipos de arquivos podem ser baixados.

Eu criei o seguinte que restringe o download para apenas os tipos de arquivo especificados, mas todas as URLs para um índice de diretório retornam 403 Forbidden.

<Directory /var/www/>
    Options Indexes FollowSymLinks
    SetOutputFilter DEFLATE
    AllowOverride None
    Order allow,deny
    <FilesMatch "">
        Order deny,allow
        allow from all
    </FilesMatch>
    <FilesMatch ".+\.(?!(txt|log)$)[^\.]+?$">
        Order allow,deny
        deny from all
    </FilesMatch>
</Directory>
    
por Keith Morgan 10.10.2014 / 10:22

2 respostas

4

Você também precisa permitir arquivos de índice:

<FilesMatch "^index\.">
    Order allow,deny
    allow from all
</FilesMatch>

porque o Apache irá procurá-los (como index.html , index.cgi , ...) mas eles são todos proibidos. Não sei por quê, mas suponho que o Apache não consiga verificar a existência desses arquivos e, em seguida, envie um 403. Se o Apache puder verificar a inexistência desses arquivos de índice, ele criará o índice do diretório e precisará da <FilesMatch ""> Directive, já que o nome do arquivo de índice é "".

Você pode encontrar as informações no arquivo de registro de erros, algumas linhas como:

client denied by server configuration: /var/www/index.html

E como você deseja que os arquivos proibidos também sejam listados, adicione:

IndexOptions ShowForbidden

por exemplo, depois de Options Indexes FollowSymLinks . Há diversas opções de índices de diretório que você pode encontrá-los no apache doc .

Espero que isso ajude.

    
por 10.10.2014 / 22:51
0

O FilesMatch precisa atingir todas as entradas possíveis da diretiva DirectoryIndex e da sequência vazia. Se você tem isso:

DirectoryIndex index.html index.html.var index.php

então este é o seu par:

<Files ~ ^index\.(html|php|html.var)$|^$>

Pode ser mais fácil definir DirectoryIndex e, em seguida, corresponder:

DirectoryIndex index.html
<Files ~ ^index\.html$|^$>
    <Limit GET HEAD>
        Order Allow,Deny
        Allow from all
    </Limit>
</Files>
    
por 23.02.2018 / 01:52