Инструменты пользователя

Инструменты сайта


subversion_active_directory

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
subversion_active_directory [2013/05/13 16:26]
metallic создано
subversion_active_directory [2022/03/25 17:42] (текущий)
217.25.239.250 [Возможные проблемы]
Строка 1: Строка 1:
 ====== Интеграция Subversion с MS Active Directory ====== ====== Интеграция Subversion с MS Active Directory ======
  
 +===== Введение =====
 +В данном howto показан один из вариантов интеграции Subversion и AD. К сожалению, сам по себе svnserve не поддерживает LDAP, поэтому придется использовать на стороне сервера Apache с модулем dav_svn, т.к. Apache поддерживает LDAP. 
 +Подробно описывать установку, настройку и вообще общие принципы Subversion не буду, будем считать, что на текущий момент он установлен. Установка проводится на примере GNU/Debian 7.0 и Windows Server 2012.
  
 +===== Установка =====
 +Ставим Apache и модуль для работы в качестве svn-сервера.
 +<konsole>
 +# apt-get install apache2 libapache2-svn
 +</konsole>
 +
 +===== Настройка =====
 +Разрешаем все необходимые модули Apache.
 +<konsole>
 +# a2enmod dav
 +# a2enmod dav_svn
 +# a2enmod ldap
 +# a2enmod authnz_ldap
 +# a2enmod authz_svn
 +</konsole>
 +
 +Редактируем файл /etc/apache2/mods-enabled/dav_svn.conf 
 +  #  Указываем путь, по которому Apache будет обрабатывать svn-запросы. Можно указать /svn или любой другой. Мне удобнее обрабатывать запросы в корне.
 +  <Location />
 +  
 +    # Включаем обработку svn-запросов по этому адресу
 +    DAV svn
 +    
 +    # Указываем путь к каталогу с репозиториями. Если же у нас один репозиторий, то нужно использовать опцию SVNPath и указать в ней путь к репозиторию.
 +    SVNParentPath /srv/svn/bases
 +    
 +    # Разрешить листинг репозиториев
 +    SVNListParentPath On
 +    
 +    # Путь к файлу с описанием прав доступа к репозиториям и подпапкам, если надо. Также в этом файле можно определить гуппы пользователей. В самом Apache и его модуле LDAP 
 +    # к сожалению нет возможности управлять группами, поэтому есть два варианта: либо формировать группы из доменных пользователей вручную, либо использовать спец. скрипты, 
 +    # вроде этого(см. ссылку в конце статьи). 
 +    AuthzSVNAccessFile /etc/apache2/svnaccessfile
 +    
 +    # Сделать авторизацию в каталоге LDAP главной
 +    AuthzLDAPAuthoritative on
 +    
 +    # Тип аунтификации
 +    AuthType Basic
 +    
 +    # Указываем, что данные по логинам и паролям следует брать в LDAP
 +    AuthBasicProvider ldap
 +    
 +    # Информационное сообщение, которое будет выводиться в окне аунтификации
 +    AuthName "Yohoho!"
 +    
 +    # Пользователь в AD с правами на чтение каталога
 +    AuthLDAPBindDN "reader@domain.local"
 +    
 +    # Его пароль
 +    AuthLDAPBindPassword "passw0rd"
 +    
 +    # Строка подключения к AD. В данном случае поиск пользовтелей выполняется не во всем домене, а только в контейнере AllUsers, также отфильтрованы заблокированные пользователи
 +    AuthLDAPURL "ldap://domain.local:389/OU=AllUsers,DC=domain,DC=local?sAMAccountName?sub?(&(objectClass=user)( !(userAccountControl:1.2.840.113556.1.4.803:=2)))" NONE
 +    
 +    # Позволяем получать доступ только авторизовавшимся пользователям. Также, если есть такая необходимость, можно разрешить авторизовываться в svn только пользователям, входящим
 +    # в определенную группу, например SvnGroup, тогда вместо этой строки следует прописать это:
 +    # Require ldap-group cn=SvnGroup,ou=AllGroups,dc=domain,dc=local
 +    Require valid-user
 +    
 +  </Location>
 +
 +===== Пример svnaccessfile =====
 +В данном примере, группе group1 дан доступ на чтение/запись в репозиторий repo1, а группе group2 только на чтение. При этом в папку secret в репозитории repo1 предоставлен доступ только пользователю user6, а остальным явно запрещен(*= ), если не добавить этот параметр, то доступ к папке secret унаследуется от корня репозитория.
 +  [groups]
 +  group1 = user1, user2, user3
 +  group2 = user4, user5
 +  
 +  [repo1:/]
 +  @groups1 = rw
 +  @groups2 = r
 +  
 +  [repo1:/secret]
 +  user6 = rw
 +  *=
 +
 +===== Возможные проблемы1 =====
 +Для поиска проблем в конфигурации лучше всего включить отладку, для этого в виртуалхосте, на котором работает svn(обычно - default) нужно заменить LogLevel warn на LogLevel debug.
 +
 +Самая распространненая ошибка - 500 (internal server error). Чаще всего это связано с неправильными реквизитами доступа к каталогу LDAP. При этом в логах появляется что-то вроде:
 +  "OPTIONS /svn HTTP/1.1" 500
 +
 +Также, при корректной конфигурации, возможно следующая проблема:
 +  [3574] auth_ldap authenticate: user foo authentication failed; URI /svn [ldap_search_ext_s() for user failed][Operations error]
 +Лечится добавлением в файл /etc/ldap/ldap.conf следующей строки:
 +  REFERRALS off
 +  
 +Еще одна проблема, с которой я сталкнулся - нестабильное появление ошибки при комите:
 +  Server sent unexpected return value (400 Bad Request) in response to MERGE  
 +Дело оказалось в Kaspersky Antivirus 2012, это он хулиганил. Решение проблемы - добавить в исключения файлы TortoiseProc.exe и TSVNCache.exe
 +===== Ссылки =====
 +  * [[https://bitbucket.org/whitlockjc/jw-tools/src/e3396390e99bfbc566a4e8423a123abb4c00d655/sync_ldap_groups_to_svn_authz?at=default|Скрипт синхронизации групп AD и Subversion]]
 +  * [[http://httpd.apache.org/docs/2.0/mod/mod_auth_ldap.html|Параметры Apache LDAP]]
 +  * [[http://www.open.collab.net/support/media/pdfs/SVN/Subversion%20with%20Apache%20and%20LDAP.pdf|Документация по SVN]]
subversion_active_directory.1368448005.txt.gz · Последнее изменение: 2022/03/25 17:03 (внешнее изменение)