Integrando OpenLDAP, Subversion, Webdav e Apache2
Essa semana recebi a missão de configurar um novo repositório subversion, então aproveitei para dessa vez utilizar o apache2 com webdav, autenticando via OpenLDAP.
Visita ao site do apache, leitura de documentação, busca no google…
“Ok, já posso por a mão na massa.”
Ledo engano. O apache2 não autenticava o usuário nem a pau. O log do openldap mostava a consulta sendo feita, o repositório estava com as permissões corretas para www-data.
“Tá bom, vou ler a documentação novamente.”
Após algumas horas de pesquisas na internet, consegui fazer a integração. Vejamos todos os passos.
Ambiente
- Servidor Subversion e apache2;
- Servidor OpenLDAP;
- Svn com vários repositórios, permissões de arquivos via OpenLDAP;
- Controle via grupos.
Configuração do repositório
O usuário www-data precisa ter acesso aos arquivos do repositório. Então supondo que sua base seja /var/svn/repo01, precisamos garantir as permissões com o comando:
cd /var/snv/repo01
chown -R www-data:grupo1
find repo01/ -type f -print -exec chmod 660 {} \;
find repo01/ -type d -print -exec chmod 2770 {} \;
Assim, apenas o www-data e os usuários do grupo terão acesso aos arquivos. Além disso, estamos setando o bit SGID nos diretórios, para que os arquivos criados também sejam do grupo.
Configuração do apache2
No apache 2.2.x, o módulo utilizado para autenticação via ldap é o mod_authnz_ldap. Iremos precisar do módulo dav_svn (pacote libapache2-svn). Habilite-os com o a2enmod.
Crie o arquivo do site em /var/apache2/sites-available/repo01. O conteúdo deve ser mais ou menos assim:
<VirtualHost *:80>
ServerAdmin administrador@seudominio.com.br
ServerName svn.seudominio.com.br
DocumentRoot /var/www/
ErrorLog /var/log/apache2/repo01/error.log
LogLevel notice
CustomLog /var/log/apache2/repo01/access.log combined
<Location /svn/repo01>
#habilita o repositorio
DAV svn
# caminho para o repositorio
SVNPath /var/svn/repo01
# tipo de autenticacao
AuthType Basic
# identificação do repositorio
AuthName "Repositorio SVN"
# provedor de autenticacao
AuthBasicProvider ldap
# Está on porque se a autenticação via ldap falhar, não deve pesquisar outras bases
AuthzLDAPAuthoritative on
# URL da base LDAP. O ?uid especifica atributo pesquisar (uid)
AuthLDAPURL "ldap://ldap.seudominio.com.br/ou=Usuarios,dc=seudominio,dc=com,dc=br?uid"
# Informa que atributo usar para verificar se o usuario faz parte do grupo ou não
AuthLDAPGroupAttribute memberUid
# especifica que a busca deve ser feita por usuario, e nao pelo DN
AuthLDAPGroupAttributeIsDN off
#usuario que irá fazer a consulta no ldap
AuthLDAPBindDN "cn=subversion,dc=seudominio,dc=com,dc=br"
#senha do usuario acima
AuthLDAPBindPassword "senha"
# grupos que terão acesso ao repositorio
Require ldap-group cn=repo01,ou=Grupos,dc=seudominio,dc=com,dc=br
</Location>
</VirtualHost>
Habilite o site com o a2ensite, recarregue o apache2 e pronto, seu apache2 está acessando o repositório svn e autenticando via openldap.
Agradecimentos ao faw, que me ajudou a debugar o problema e a encontrar a solução.





[...] Colocar o controle de autorização Usar um servidor LDAP para controlar as permissões de acesso aos projetos do Subversion; [...]
Eder, publiquei no meu blog esse seu artigo. tem algum problema? É que achei bem útil sua dica que foi enviada pela Lista Dicas-L.
Também incuí seu site em meu blogroll.
Abs,
Nenhum problema Amilton. A única ressalva seria os créditos para o autor original, e você fez isso.
Abraços.
Ops, cuidamos de alguns repos e recomendamos que desligue o SVNPathAuthz para melhorar a performance das requisições, ou, ainda melhor, use o svnserve em vez do apache. Se quiser conversar mais sobre isso me procure.
[]s e boa sorte,
–
Andreyev
Oi Andreyev,
De fato, se o repositório é uniforme (todos os usuários tem acesso a todos os arquivos do repositório), realmente deixar o SVNPathAuthz desabilitado (que vem habilitado por padrão) é a melhor opção.
Com relação a utilizar o svnserve, a opção pelo apache é devido a integração com o openldap e a utilização do trac.
O acesso cotidiano aos arquivos é via ssh+svn (que também usa a base openldap para autenticar).
[]’s