суббота, 17 ноября 2012 г.

Настройка svn+sasl+ldap

Задача
Настроить аутентификацию Active Directory пользователей в Subversion для работы по протоколу SVN.

Использованные материалы
Using Cyrus SASL Authentication with Subversion
Настройка SVN вместе с LDAP
SVN SASL Commit - Authorisation failed
Subversion+OpenLDAP
SVN Authentication against a Microsoft Active Directory using svnserve sasl, ldap
Chapter 6. Server Configuration
Создаем свой SVN сервер: 3$ и 30 минут


Реализации
Доступ к SVN может быть предоставлен несколькими способами:
1. Доступ по протоколу SVN используя встроенную аутентификацию.
2. Доступ по протоколу SVN используя SASL аутентификацию.
3. Доступ по протоколу HTTP/HTTPS через Apache и libapache2-svn.
4. Доступ через тонель поверх SSH.

На данный момент у нас настроен с пособ с Apache/HTTPS. Устраивает всё кроме скорости работы. Посему всё склоняются к работе по протоколу svn:// и используя внутренюю аутентификцию.
Будет использован механизм аутентификации SASL-ldap.

Настройка
Окружение
cat /etc/lsb-release
Цитировать
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04 LTS"

svn --version
Цитировать
svn, version 1.6.17 (r1128011)
   compiled Dec 17 2011, 16:12:52

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.apache.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication

  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
Т.е. настройка в Ubuntu 12.04 где SVN уже идёт с поддержкой SASL.

Устанавливаем необходимые пакеты
sudo apt-get install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-ldap
Настраиваем SASL
vi /etc/default/saslauthd
Цитировать
START=yes
MECHANISMS="ldap"

vi /etc/saslauthd.conf
Цитировать
ldap_servers: ldap://dc.domain.com
ldap_search_base: OU=Users,DC=DOMAIN,DC=COM
ldap_bind_dn: domain\ldapuser
ldap_bind_pw: *******
# Misc options for LDAP to make it work with Microsoft AD
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind
ldap_filter: (sAMAccountName=%u)
ldap_password_attr: userPassword
ldap_timeout: 10
ldap_cache_ttl: 30
ldap_cache_mem: 32768

Стартуем SASL демон
/etc/init.d/saslauthd restart
Тестируем что наш SASL-ldap механизм работает
testsaslauthd -u domainuser -p *******
Цитировать
0: OK "Success."
Ежели проблемы, то стартуем sasl демон с дебагом и смотирм логи
/usr/sbin/saslauthd -a ldap -d -n 1 -V
tail /var/log/auth.log

Указываем SVN что аутентификация у нас будет через SASL
vi /var/svn/sandbox/conf/svnserve.conf
Цитировать
[general]
anon-access = none
auth-access = write
authz-db = ../../authz
realm = Sandbox

[sasl]
use-sasl = true
min-encryption = 0
max-encryption = 256

Создаём файл с настройками уатентификации для SVN в папке с плагинами для sasl(имя файла svn.conf)
vi /usr/lib/sasl2/svn.conf
Цитировать
## Password check method, default to the SASL AUTH daemon
pwcheck_method: saslauthd
## Auxiliary (propery) plugin, use ldapdb
auxprop_plugin: ldapdb
## Mechanism list, MS AD requires you to send credentials in plain text
mech_list: PLAIN
ldapdb_mech: PLAIN
## Saslauthd socket path
saslauthd_path: /var/run/saslauthd/mux
## Ldap server uri
ldapdb_uri: ldap://dc.domain.com

Перегружаем демон SVN
service svnserve restart
Теперь пользователи Active Directory смогут получать доступ к репозиторию согласно доступам прописанным в файле authz-db = ../../authz

Недостатки метода
При таком методе аутентификации мы вынуждены передавать пароль в PLAIN а иначе мы несможем cоедениться с AD.
В результате:
tcpdump -ni eth0 -A src host 192.168.1.2 and tcp dst port 3690
Цитировать
17:10:10.488834 IP 192.168.1.2.59751 > 192.168.1.1.3690: Flags [P.], seq 145:184, ack 166, win 65115, length 39
E..O.b@...."..@...@     .g.j....~...P..[....( PLAIN ( 21:AHVzZXIAcGFzc3dvcmQ=
Заходим Base64 Decode и видим какой пароль передавался по сети.

Метод я настроил и понял что пользоваться им нестоит, т.к. под угрозу ставяться пароли пользователей.

Пошёл смотреть в сторону SVN + SASL GSSAPI(Kerberos)

Источник:
http://forum.ubuntu.ru/index.php?topic=197819.0

Стоит обратить внимание на параметр auxprop_plugin: в файле svn.conf. В ubuntu 12.04 precise его значение должно быть ldapdb, хотя в других системах, в том числе и ubuntu 10.04 lucid допускалось ldap.

Комментариев нет:

Отправить комментарий