Apache: Como Exibir uma Lista de Diretórios

Para exibir uma lista de arquivos e subdiretórios em um diretório no servidor Apache HTTP, defina Options +Indexes nesse diretório. A lista é gerada quando as permissões de acesso são concedidas, nenhum arquivo de índice padrão existe e mod_autoindex está ativado.

Condições sob as quais a lista é exibida

Quando uma URL de diretório é solicitada no Apache 2.4, ele primeiro procura por arquivos especificados em DirectoryIndex. Por exemplo, se index.html existir, esse arquivo geralmente é exibido. Se o arquivo não existir e Indexes estiver ativado, mod_autoindex pode criar a lista. Para um comportamento detalhado, consulte a descrição DirectoryIndex e a documentação mod_autoindex do Apache.

As configurações de listagem não concedem permissões de acesso. Diretórios aos quais o acesso é negado ou caminhos que o Apache não consegue ler não exibirão uma listagem. Além disso, um erro 403 Proibido pode ocorrer por vários motivos, como autenticação ou permissões do sistema de arquivos, portanto, você não deve habilitar a listagem apenas porque um 403 aparece.

Verifique antes de configurar

  • Prepare um diretório dedicado onde listagens e arquivos possam ser tornados públicos. Não coloque materiais que não devem ser públicos, como arquivos de configuração, backups ou informações pessoais.
  • Confirme o host virtual do site a ser configurado e o caminho real dos arquivos. O exemplo abaixo é para o Ubuntu Apache 2.4 quando a raiz de documentos do site é /var/www/html e o diretório público é downloads abaixo dela. Substitua pelo caminho do ambiente real e URL.
  • Faça backup das configurações existentes e confirme que você tem permissão para gerenciar o site e recarregar o Apache. Se for um servidor de produção, verifique primeiro em um ambiente de teste.

Mesmo que os arquivos não apareçam na listagem, eles podem ser acessíveis se você souber a URL do arquivo diretamente. Ocultar nomes na listagem não substitui permissões que bloqueiam o acesso aos arquivos.

Aplicar a um diretório específico no host virtual

No Ubuntu, a configuração ativa do site geralmente está em um arquivo sob /etc/apache2/sites-available/. Adicione o seguinte bloco à configuração do host virtual do site ou modifique a configuração de caminho existente. Não adicione permissões públicas descuidadamente a diretórios que já possuem restrições de acesso.

<Directory "/var/www/html/downloads">
    Options +Indexes
    Require all granted
</Directory>

Options +Indexes adiciona uma listagem de diretório às opções herdadas. Require all granted permite o acesso a este caminho, portanto, use-o apenas em diretórios destinados a serem públicos. O escopo real de aplicação pode variar dependendo de outras seções de configuração ou configurações de subdiretório. Você pode verificar as regras de herança e mesclagem das opções na diretiva Apache Options.

Após salvar a configuração, verifique a sintaxe no Ubuntu. Se Syntax OK for exibido, recarregue a configuração. Se ocorrerem erros, corrija o caminho e erros de digitação, e não recarregue até que a verificação seja bem-sucedida.

sudo apache2ctl configtest
sudo systemctl reload apache2

Distribuições que não sejam o Ubuntu podem ter locais de arquivo de configuração e nomes de serviço diferentes. Além disso, siga as orientações dessa distribuição para comandos de verificação de sintaxe e recarga.

Verificando listas de diretórios e escopo de acesso

  1. Coloque um arquivo de teste que possa ser acessado publicamente no diretório de destino e certifique-se de que o arquivo de índice especificado não esteja lá.
  2. Abra a URL do diretório no seu navegador. No exemplo acima, se o endereço do servidor for https://example.com, https://example.com/downloads/ seria a URL de exemplo. Substitua pelo domínio real.
  3. Verifique se os arquivos de teste são exibidos na lista e abra os links para garantir que o escopo de acesso corresponda à configuração pretendida. Como as configurações podem ser herdadas por subdiretórios, revise também o escopo de acesso público.

Se uma página aparecer em vez de uma lista, verifique se existe um arquivo DirectoryIndex ou outros manipuladores/redirecionamentos. Se for um erro 403, verifique as restrições de acesso, permissões de diretório e configurações de índice nos logs de erro. Você também pode verificar se o módulo autoindex está ativo usando apache2ctl -M. Se o caminho estiver incorreto, pode ocorrer um erro 404.

Ao usar .htaccess

Se o administrador do servidor permitir alterações de Options em .htaccess para o diretório, você também pode adicionar a seguinte linha a esse arquivo. Se o AllowOverride das configurações do pai não permitir essa opção, pode não funcionar ou causar um erro no servidor, então confirme com o administrador.

Options +Indexes

Se você tem acesso às configurações do servidor, o Apache geralmente recomenda o uso do arquivo de configuração principal. Verifique as condições aplicáveis no guia .htaccess do Apache.

Para parar de exibir a lista

Defina Options -Indexes no caminho fornecido ou restaure as configurações de antes de suas alterações, depois verifique a sintaxe e recarregue o Apache. Se você o adicionou em .htaccess, ou remova essa linha ou, se permitido, altere para Options -Indexes. Como podem existir configurações herdadas, verifique o URL do diretório novamente após fazer as alterações.

Simplesmente desligar a lista não bloqueia o acesso aos URLs de arquivos já conhecidos. Para proteger os próprios arquivos, aplique controles de acesso separados e verifique se usuários não autorizados estão realmente bloqueados.