Servidor SVN com autenticação no Active Directory

by Cássio R Eskelsen 11. setembro 2008 13:15

Na empresa em que trabalho, fiquei responsável pela criação de um servidor SVN usando o Active Directory para autenticação dos usuários juntamente com um gerador de builds automatizados.

Irei relatar como montei esse servidor. Se esse post está no ar é porque deu tudo certo!

As ferramentas que utilizadas são:

a) Servidor (que chamarei de SVNSERVER) usando o Windows XP como sistema operacional. O ideal seria uma versão server obviamente, mas não queríamos torrar uma licença de servidor apenas para isso. No entanto, os fontes não ficarão nessa máquina, serão gravadas em um servidor de arquivos com backup automatizado.

b) Subversion para controle de versão. Como usaremos o Apache de intermediário para autenticação no AD, temos que utilizar o build correto, de acordo com a versão do Apache que estivermos utilizando. Usarei a versão gerada com o Apache 2.2. Cuidado com as versões: no momento em que eu escrevo este artigo, a versão do setup é a do SVN 1.4, no entanto, o Tortoise (item d) está usando o SVN 1.5. Eu instalei o SVN via setup e depois atualizei manualmente através do arquivo zipado que está na mesma pasta ( http://subversion.tigris.org/files/documents/15/43244/svn-win32-1.5.1.zip)

c) Apache HTTPD: o servidor apache será responsável pela interface entre o SVN e o Active Directory. A versão que irei utilizar é a http://linorg.usp.br/apache/httpd/binaries/win32/apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi

d) Tortoise SVN: cliente gráfico para o SVN.

Instalação

Instalei os programas na seguinte ordem:


a) Servidor Apache. Instalei no modo Custom e marquei todas as opções. Deixei no diretório default <arquivos de programas>\Apache Software Foundation\Apache2.2\ . A única configuração que fiz nesse momento é mudar a porta onde o servidor ouve as requisições haja vista que deixarei a porta 80 para o IIS. A configuração da porta pode ser feita em Apache Software Foundation\Apache2.2\conf no arquivo httpd.conf, na linha “Listen”. Usei a porta 8080. Reinicie o servidor Apache e teste a URL http://localhost:8080. Se aparecer a mensagem “It´s Works!”, deu tudo certo.

 

b) SVN: Nenhuma configuração especial, apenas mudei o diretório de instalação para c:\subversion. Next, Next. Finish. O instalador do SVN adiciona o diretório ao PATH, confira se está tudo ok abrindo um prompt de comando e digite svn. Se aparecer a mensagem “Digite 'svn help' para uso.”  significa que o svn está sendo localizado no PATH.

c) Tortoise SVN:Next, Next, Finish. Ele pede para reiniciar. Para garantir, obedeci!

Configuração do Apache

1) Primeiramente crie seus repositórios SVN. Para fins de teste, primeiro vou criei um repositório fake para que não aconteça nenhum “imprevisto”.

image

2) Copie os arquivos  \<subversiondir>\bin\*.so para \<apachedir>\modules\

3) Copie os arquivos \<subversiondir>\bin\intl3_svn.dll e \<subversiondir>\bin\libdb44.dll para \<apachedir>\bin\

4) Edite o arquivo \<apachedir>\conf\httpd.conf e certifique-se de que os seguintes módulos estão sendo carregados (remova o # se necessário):

LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_lock_module modules/mod_dav_lock.so
LoadModule ldap_module modules/mod_ldap.so

Adicione as seguintes linhas:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

Configuração do Active Directory

Você irá precisar das seguintes informações:

1) Hostname do servidor do AD. Você pode descobrir isso com o comando ipconfig /all verificando o item (bem no início) “Sufixo DNS primário”

2) Porta onde o AD ouve as requisições. O padrão é 389

3) O DN base para os ids de usuários que você usará no subversion, por exemplo, OU=Users, DC=empresa, DC=com, DC=br

4) Um usuário do AD que pode fazer busca de usuários no AD (caso seu AD não permita pesquisas anônimas)

5) DN do grupo para o qual você está restringindo o acesso, por exemplo, digamos que você queira permitir a autenticação apenas dos usuários pertencentes ao grupo Desenvolvimento.

Com as informações em mãos, altere o arquivo httpd.conf e acrescente as linhas abaixo:

<Location /repositorio>
     DAV svn
     SVNPath K:/SVN/TesteServidor
     AuthName "Subversion - Repositório"
     AuthBasicProvider ldap
     AuthType Basic
     AuthzLDAPAuthoritative on
     AuthLDAPRemoteUserIsDN Off
     AuthLDAPURL "ldap://serverdom.bizness.com.br:389/DC=serverdom,DC=bizness, DC=com, DC=br?sAMAccountName?sub?(objectClass=user)" NONE
     AuthLDAPBindDN "MASTERDOM\cassio"
     AuthLDAPBindPassword "senha"
     AuthLDAPGroupAttributeIsDN on
    require ldap-group "Desenvolvimento"

</Location>

Algumas observações:

a) O atributo <location> indica a url que você deseja expor (ex: http://servidor/repositorio)
b) SVNPath indica onde está o seu repositório SVN
c) AuthLDAPBindDN  e AuthLDAPBindPassword  indicam um usuário e senha que pode consultar informações no Active Directory. Isso é obrigatório apenas se o AD não permitir bind anônimo.
d) require ldap-group indica qual grupo tem permissão de autenticar no servidor SVN. Se você não quer limitar por grupo, troque a linha por require valid-user

Restarte o servidor Apache e teste sua conexão. Se tudo deu certo, a tela de login abaixo irá aparecer e ao digitar um usuário válido, o acesso ao repositório será permitido!

image

Creio que a parte mais complicada seja descobrir os parâmetros corretos para a conexão LDAP. Verifique exatamente dentro de quais OU, CN, etc seus usuários estão no servidor.

Tags: ,

Arquitetura

Comentários

Comentar




  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading