Subversion + LDAP
A integração de autenticação LDAP para acesso a repositórios Subversion está dependente do uso de SASL.
Este manual destina-se a instalações não baseadas no protocolo svn:// puro (sem ser por SSH ou por WebDAV) e presume a existência de um serviço LDAP em execução e correctamente configurado.
Como os caminhos podem variar e há inconsistências mesmo na mesma distribuição, há recomendações de certas ligações simbólicas que convém criar-se. De notar que, pelo menos em distribuições baseadas em Ubuntu, o svnserve não tem configurações base para uso com o systemd ou qualquer outro serviço de init alternativo. Assim sendo, também se apresenta aqui a listagem dos ficheiros necessários para que o svnserve possa ser adicionado ao arranque.
Excepto se indicado em contrário, estes comandos devem ser executados como root ou com o sudo.
/etc/systemd/system/svnserve.service:
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
RuntimeDirectory=svnserve
PIDFile=/run/svnserve/svnserve.pid
EnvironmentFile=/safe/etc/default/svnserve
ExecStart=/usr/bin/svnserve $DAEMON_ARGS
User=svn
Group=svn
KillMode=control-group
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=svnserve.service
Na configuração padrão do serviço svnserve, deverá preencher a variável SVNROOT com o valor correcto. Poderá também alterar o caminho que se segue a "--log-file" para outro destino que lhe seja mais conveniente.
/etc/default/svnserve.conf:
SVNROOT="<caminho base dos seus repositórios>"
DAEMON_ARGS="--daemon --pid-file /run/svnserve/svnserve.pid --root $SVNROOT --log-file /var/log/svnserve/svnserve.log"
/usr/lib/sasl2/svn.conf:
pwcheck_method: saslauthd
mech_list: LDAP
Recomendamos que crie um link simbólico da pasta /usr/lib/sasl2 em /etc:
ln -s /usr/lib/sasl2 /etc
É preferível, também, ter um utilizador e um grupo "svn" no sistema, devendo substituir, nos comandos abaixo, os dados conforme necessário:
groupadd -r svn
useradd -r -d <caminho base dos seus repositórios> -g svn svn
mkdir <caminho base dos seus repositórios>
chown -R svn:svn <caminho base dos seus repositórios>
chmod 700 <caminho base dos seus repositórios>
Em algumas distribuições, há problemas de permissões que vão impedir o svnserve de correctamente contactar o serviço sasl, pelo que essas permissões devem ser corrigidas:
chmod 711 /var/run/saslauthd
De seguida, cria-se ou edita-se o ficheiro que permite ao serviço saslauthd consultar a base de dados LDAP. O modelo abaixo pode ser usado, devendo ser adaptado conforme necessário:
/etc/saslauthd.conf:
ldap_servers: ldap://localhost
ldap_port: 389
ldap_version: 3
ldap_password_attr: userPassword
ldap_auth_method: bind
ldap_filter: (uid=%u)
ldap_search_base: ou=Users,dc=dominio,dc=pt
ldap_bind_pw: <password do utilizador LDAP>
ldap_bind_dn: cn=admin,dc=dominio,dc=pt
Agora só falta editar o ficheiro de configuração de cada repositório. Dentro de um repositório subversion já criado, há um ficheiro chamado svnserve.conf na pasta conf do respositório. Eis um modelo base
<repositório>/conf/svnserve.conf:
[general]
anon-access = none
auth-access = write
[sasl]
use-sasl = true
#min-encryption = 128
#max-encryption = 256
TODO: adicionar suporte de encriptação.