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. :D

Agradecimentos ao faw, que me ajudou a debugar o problema e a encontrar a solução.

5 Responses to “Integrando OpenLDAP, Subversion, Webdav e Apache2”

  1. [...] Colocar o controle de autorização Usar um servidor LDAP para controlar as permissões de acesso aos projetos do Subversion; [...]

  2. 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,

  3. Nenhum problema Amilton. A única ressalva seria os créditos para o autor original, e você fez isso. :)

    Abraços.

  4. 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

  5. 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

Leave a Reply


Fechar
Envie por e-mail