Autenticação de usuário SVN em um diretório OpenLDAP

Um pequeno guia para realizar autenticação os usuários do openldap no Subversion utilizando SASL.

Executado em um Debian GNU/Linux 6 amd64.

Pré-requisitos: subversion previamente instalado e um repositório já criado, caso precise de um guia para a instalação e criação dos repositórios no SVN recomendo este tutorial: http://longspine.com/how-to/install-apachesubversion-on-debian-lenny-and-migrate-the-repositories/

Pacotes necessários:


apt-get install db4.7-util sasl2-bin ldap-utils

Os passos a seguir são realizados levando em consideração um repositório previamente criado em /home/svn/myproject.

Vamos editar o arquivo svnserve.conf do nosso repositório (/home/svn/myproject/conf/svnserve.conf) como o mostrado a seguir:


[general]
anon-access = none
auth-access = write

realm = myproject

[sasl]
use-sasl = true

Atenção no parâmetro realm, que deve ser o nome do repositório.

Criaremos o seguinte arquivo de definições do svn para o saslauthd em /usr/lib/sasl2/svn.conf:


#/usr/lib/sasl2/svn.conf -- might be /usr/lib/sasl2/subversion.conf not sure, make both

## Password check method, default to the SASL AUTH daemon

pwcheck_method: saslauthd

## Auxiliary (propery) plugin, use ldap

auxprop_plugin: ldap

## Mechanism list, MS AD requires you to send credentials in plain text

mech_list: PLAIN LOGIN

## Not sure if this is required... but I kept it in

ldapdb_mech: PLAIN LOGIN

Agora vem a configuração do serviço saslauthd, edite o arquivo /etc/default/saslauthd e altere os seguintes parâmetros:


START=yes
MECHANISMS="ldap"

A mágica do negócio vai no próximo arquivo, que define como o SASL vai pesquisar o diretório em busca dos usuários. Antes vamos mostrar uma DIT de exemplo, e mostar como será feita a pesquisa.

dc=exemplo,dc=com
|-cn=admin
|
|-ou=people
|  |-uid=user1
|  |-uid=user2
|
|-ou=group
|  |-cn=myproject
|  |-cn=someAnotherProject

Os usuários pertencem à classe posixAccount e os grupos à classe posixGroup e como podemos ver, criamos um grupo para cada repositório do svn e atribuímos a eles os devidos usuários usando o atribudo memberUid como mostrado abaixo:

dn: cn=myproject,ou=group,dc=exemplo,dc=com
gidNumber: 2031
cn: myproject
objectClass: top
objectClass: posixGroup
memberUid: user1
memberUid: user2

Agora editaremos o principal arquivo de configuração do SASL, o /etc/saslauthd.conf, como mostrado a seguir:


## URL for the Active Directory
ldap_servers: ldap://"openldap server ip address":389

## Not sure why exactly, but yes doesnt work... so no.
ldap_use_sasl: no

## Bind DN (Distinguishing Name) of the user you want to bind to the AD
ldap_bind_dn: cn=admin,dc=exemplo,dc=com

## Password to the above user
ldap_password: openldap_password_goes_here

## Sends passwords as plain text to AD to authenticate
ldap_mech: PLAIN

## Auth Method = Bind as specified user, and search for users in the AD
ldap_auth_method: bind

## Filter for users. (user@example.com) sAMAccountName = user
ldap_filter: uid=%U
ldap_scope: sub
ldap_password_attr: userPassword
ldap_search_base: ou=people,dc=exemplo,dc=com

## Group Filter
ldap_group_match_method: filter
ldap_group_search_base: ou=group,dc=exemplo,dc=com
ldap_group_filter: (&(objectClass=posixGroup)(cn=%r)(memberUid=%u))

O SASL ira fazer a query definida na diretiva ldap_group_filter substituindo a variável %r pelo nome do realm, isto é,  o nome do repositório definido no arquivo svnserve.conf e a variável %u pelo nome de usuário passado no login.

Assim para realizar a autenticação um usuário deve passar seu login e senha corretos, e pertencer ao grupo ldap do repositório.

Apos isso iniciamos o saslauthd e reiniciamos o subversion:


service saslauthd start
service svn restart

Podemos acompanhar as consultas com um tail no arquivo /var/log/auth.log.
Outra dica é por o saslauthd em modo debug com o comando:


saslauthd -a ldap -d

Referências:
http://notesfromchechu.com/blog/subversionopenldap/

Leave a Reply

Your email address will not be published. Required fields are marked *