O Apache 2, além de funcionar como servidor do repositório, fornece vários serviços complementares ao Subversion, tais como compressão de dados, criptografia e autenticação. Este artigo vai falar um pouco a respeito de como configurar a autenticação do Subversion usando a autenticação básica do Apache 2.
Conforme consta na wikipedia, autenticação “… é um processo que busca verificar a identidade digital do usuário de um sistema, normalmente, no momento em que ele requisita um log in (acesso) em um programa ou computador”. O modo mais comum de autenticação envolve um nome de usuário (username) e senha (password).
Como funciona o processo de autenticação do Apache?
O processo de autenticação segue a seguinte seqüência:
- O cliente faz uma requisição
- O Apache identifica que a requisição é sobre um recurso protegido por uma autenticação básica e envia como resposta um header de código 401 Authentication Required indicando que o cliente deve fornecer as credenciais do usuário
- O cliente (por exemplo, o firefox) pede ao usuário para fornecer o nome do usuário e a senha e repassa para o Servidor;
- O Apache verifica se o nome fornecido de usuário está numa lista pré-aprovada e se a senha correspondente está correta, e só então libera o recurso requisitado.
Criando um Recurso Protegido por Autenticação Básica
O primeiro passo para exigir uma identificação é inserir na seção Location de acesso aos repositórios do Subversion a sub-seção que exige a autenticação básica:
<Location /svn>
DAV svn
SVNParentPath /srv/svn
# sub-seção referente à autenticação
AuthType Basic
AuthName "Repositórios do Subversion"
AuthUserFile /srv/svn/autenticacao
Require valid-user
</Location>
Esta configuração do jeito que está permitirá o acesso à leitura e escrita a todos os usuários autenticados a todos os repositórios localizados a partir do diretório /srv/svn. Falta agora fornecer o arquivo de autenticação /srv/svn/autenticacao.
O arquivo de autenticação contém uma relação de nomes de usuários e senhas. Na verdade, não são as senhas que são armazenadas, e sim o hash da senha. Isso torna o arquivo mais seguro pois o processo de hash é unidirecional e impossibilita descobrir o conteúdo original a partir do código gerado.
A verificação é feita usando a senha fornecida para gerar o hash novamente. Caso o hash seja o mesmo que o registrado, então a senha está correta.
O Próprio Usuário Gerando Seu Login e Senha
Para gerar e manter um arquivo com nomes de usuários e suas respectivas senhas criptografadas, utiliza-se o comando htpasswd. O nome do usuário e a senha são passados como parâmetros pela linha de comando ou digitados quando a execução do comando solicita. O inconveniente é que o usuário ou não pode escolher seu login e senha ou precisa estar presente para fornecer a senha desejada. Se o desenvolvedor está em São Paulo e a equipe de suporte está no Rio de Janeiro, por exemplo, a situação fica mais complicada ainda.
Minha sugestão é usar um jeito que o próprio desenvolvedor possa enviar ao pessoal do suporte o login e a senha que deseja. Para isso, deve:
- Visitar o site: http://aspirine.org/htpasswd_en.html
- Criar a senha desejada senha;
- Copiar e mandar palavra criptografada ao encarregado de adicionar a linha ao arquivo de autorização lá no servidor.
Pronto! Simples e prático!
Considerações Finais
A autenticação básica funciona muito bem para empresas com um número pequeno de desenvolvedores pois é fácil e rápido de configurar e resolve bem o problema, sem dores de cabeça para o pessoal do suporte técnico.
Só a autenticação não é tudo. Ainda falta configurar a parte de autorização, mas isso fica pra outra oportunidade…
