понедельник, 24 июня 2013 г.

Установка сервера Subversion в CentOS 6.4 используя протокол доступа WebDAV

Subversion - популярная система контроля версий исходного кода, в данной заметке я опишу, как установить subversion на сервер CentOS с доступом через WebDAV и разграничением доступа разных пользователей, к разным проектам.

Итак, выполняем последовательно:

1. Устанавливаем Subversion и Apache

yum install -y subversion mod_dav_svn

2. Модифицируем файл /etc/httpd/conf.d/subversion.conf добавляем следующую секцию:

<Location /svn>

        DAV svn
        SVNParentPath /var/www/svn

        AuthType Basic
        AuthName "Subversion repositories"
        AuthUserFile /etc/svn-auth-users
        Require valid-user

        SSLRequireSSL
        AuthzSVNAccessFile /etc/subversion/authz

</Location>

Немного пояснения:

SVNParentPath /var/www/svn  - корневой каталог содержащий остальные репозитории
Auth* и Require valid-user - стандартные директивы апача ограничивающие доступ к определенному ресурсу (определенному в данном случае в теге Location)
SSLRequireSSL - требовать шифрованное соединение. Полезная опция, если сервер SVN находится вне локальной сети. Обратите внимание, что включение данной опции не заставит апач автоматически использовать протокол HTTPS, для успешной работы и перенаправления всех запросов HTTP на HTTPS необходимо будет настроить mod_rewrite. Как это сделать я покажу чуть ниже.

3. Пункт, который выполнять не обязательно. Редактирование файла conf/svnserve.conf - обратите внимание, что данный файл используется только в том случае, если будет использован доступ к репозиторию минуя WebDAV. Изменения данного файла никак не влияют на доступ к репозиторию через WebDAV!

Установите следующие параметры (если хотите, если будете использовать доступ к репозиторию минуя WebDAV):

[general]
anon-access = none
# Обратите внимание, что путь до файла соответствует 
# пути в директиве AuthzSVNAccessFile 
authz-db = /etc/subversion/authz

4. Создайте пользователей, которые будут работать с репозиториями:

htpasswd -cm /etc/svn-auth-users ags

5. Формирование фейкового сертификата SSL (вы можете на самом деле сформировать не фейковый, а вполне себе реальный сертификат, стоимость которого может быть относительно невысокой или даже бесплатной, но эта тема отдельной заметки)

yum install crypto-utils
genkey --days 365 javacation.ru

Откройте файл /etc/httpd/conf.d/ssl.conf и добавьте только что сформированные сертификаты:

SSLCertificateFile /etc/pki/tls/certs/javacation.ru.crt
SSLCertificateKeyFile /etc/pki/tls/private/javacation.ru.key

5. mod_rewrite (необязательно)

Поскольку, мы явно указали, что можно работать в SVN только через безопасный протокол, то будет неплохо добавить следующие строки в .htaccess для автоматического изменения протокола на HTTPS при доступе по протоколу отличному от HTTPS

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

6. Настройка доступа к репозиториям

Для разграничения доступа к проектам используйте файл /etc/subversion/authz

Например, вы бы могли написать такие правила:

[groups]
# Создаем группу admin и наполняем её пользователями
# имена которых разделены запятыми
admin = ags

# Настройки доступа по умолчанию. Для всех только чтение, для 
# группы админов - чтение/запись
[/]
* = r
@admin = rw

# Можно было бы обойтись без этой директивы, но здесь я 
# показал, как создавать секцию для описания прав конкретного 
# репозитория
[javacation:/]

На этом собственно настройку можно прекратить, т.к. задача фактически выполнена.

PS. Забыл достаточно важный пункт, если вы используете SELINUX: не забудьте разрешить редактирование и чтение файлов сервису httpd:

sudo chcon -R -t httpd_sys_content_t /var/www/svn/javacation/
sudo chcon -R -t httpd_sys_rw_content_t /var/www/svn/javacation/



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

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