среда, 20 января 2010 г.

subversion and ldap

Необходимо поднять svn, доступ к которому будет через ldap, но права на репозитории будут указаны в отдельном файле. Почему в файле, а не самом ldap. В данном случае файл будет изменяться автоматически, админ не будет принимать участие в раздаче прав и выдачи доступа до svn. Иначе потребовалось бы сильно модифицировать ldap, и мудрить с правами.

1 Устанавливаем:
* svn с mod_dav_svn module for Apache 2.X и db4 repository backend.
* apache с bdb и dav
* mod_auth_pam (/usr/ports/www/mod_auth_pam)
* ldap сlient
2 Настраиваем ldap. Настраиваем стандартно, добавляем ограничения на логин(для пущей безопасности)(тут указано как: http://angel4gm.blogspot.com/2009/10/ldap-host.html)
3 Настраиваем pam:
в FreeBSD 7.2-RELEASE нужно настроить только /etc/pam.d/other, поскольку apache своего pam конфига не имеет(кстати, нужно поискать, может его и можно создать).

auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth required pam_unix.so no_warn try_first_pass

# account
account required pam_nologin.so
#account required pam_krb5.so
account required pam_login_access.so
account required pam_unix.so

# session
#session optional pam_ssh.so
session required pam_permit.so

# password

нас интересует строка выделенная жирным.
4 создаем репозитории svnadmin create $REPOS_PATH
5 В файле $REPOS_PATH/conf/authz добавляем пользователей для доступа к репозиторию.
6 Настраиваем apache.
Проверяем наличие:
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so
LoadModule auth_pam_module libexec/apache22/mod_auth_pam.so
LoadModule auth_sys_group_module libexec/apache22/mod_auth_sys_group.so

Поднимаем ssl:
Убираем 80 порт.
Настраиваем VirtualHost:
< VirtualHost svn.local:443>
ServerName svn.local
# DocumentRoot /usr/local/www/validator/htdocs

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/etc/apache22/crt/server.crt
SSLCertificateKeyFile /usr/local/etc/apache22/crt/server.key
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

< Location /js/svn>
DAV svn
# SVNPath /js/svn/
SVNParentPath /js/svn
AuthzSVNAccessFile /js/svn/test/conf/authz
SVNAutoversioning on
AuthPAM_Enabled on
AuthType Basic
AuthName "SVN Repository"

Require valid-user
Order Allow,Deny
Allow from all
< /Location>
< /VirtualHost>

ВАЖНО: блогер слишком умный и обрабатывает Location и VirtualHost как теги, поэтому поставила доп. пробел. При копипасте в apache пробелы нужно убрать.
7 Чтобы разрешить иметь доступ до svn в ldap профиль каждого пользователя нужно добавить поле
host: svn.local
8 Проверяем: svn list https://svn.local/js/svn/test (например).

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