htaccess: restringindo o acesso à diretórios no Apache

Numa instalação do Apache num Debian Squeeeze, precisei fazer o seguinte para habilitar o uso do .htaccess que serve, entre outras coisas, para restringir o acesso a determinados diretórios disponíveis no servidor Web Apache.

Observe, no entanto:

  • Apesar de ser possível restringir o acesso a determinados diretórios, isto não significa que o diretório estará seguro, porque o método utilizado pelo Apache neste caso é muito simples e a senha pode ser capturada no trajeto porque o meio de comunicação não é cifrado.

  • A restrição apresentada aqui não se aplica aos acessos efetuados por scripts acessados via web, tais como PHP, Python, Ruby etc. Isto se deve ao fato de que, na maioria dos casos, os cripts instalados no servidor Web acessam os arquivos do site diretamente e não pelo servidor Apache.

Vamos lá: o nosso objetivo é restringir o acesso a um diretório do site, OK? Pois bem, primeiro vamos criar o arquivo .htaccess (observe o o ponto no início do nome do arquivo) com o seguinte conteúdo:

AuthName "Acesso Restrito"
AuthType Basic
AuthUserFile /etc/apache2/htpasswd-restrito
require valid-user

Onde:

  • AuthName define o título que será apresentado na mensagem para o usuário.

  • AuthType define o tipo de autenticação (Basic é a mais simples).

  • AuthUserFile** define o caminho completo para o arquivo que contém os usuários e senhas.

  • require valid-user define que é preciso que o usuário se autentique com a senha correta para ser permitido o acesso ao diretório.

Como estou assumindo que o administrador do sistema é quem está fazendo esta configuração, coloquei o arquivo de senhas no /etc/apache2.

No diretório especificado em AuthUserFile, crie o arquivo de usuários e senhas com o comando htpasswd:

 htpasswd -c htpasswd-restrito USUARIO
New password:
Re-type new password:
Adding password for user USUARIO

Obviamente, o texto USUARIO dever ser substituido pelo nome do usuário.

Quase pronto: agora falta configurar o Apache para entender isso…

Vá para o diretório /etc/apache2/sites-enabled e edite o arquivo 000-default, procure pela diretiva que aponta para o diretório-raiz do servidor Web e altere a diretiva AllowOverride de None para All, conforme o exemplo a seguir:

Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all

Habilite o módulo rewrite do servidor:

a2enmod rewrite

Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Reinicie o apache:

invoke-rc.d apache2 restart

Pronto, agora deve funcionar!

Sds,

Marião