Настройка SVN-сервера с доступом по протоколам svn+ssh и http
Пошаговое руководство по установке и настройке SVN-сервера с организацией доступа по протоколу svn+ssh и http (через Apache). Также описывается настройка клиента для работы с данным сервером. Кратко рассмотрен принцип работы получившейся системы и дополнительные настройки.
Установка сервера
Установка SVN сводится к запуску команды sudo yum install subversion. На
других ОС воспользуйтесь соответствующими утилитами для установки нужного
дистрибутива. Взять его можно с официального сайта: http://subversion.tigris.org/getting.html
Настройка прав и создание хранилищ.
Вначале создаем пользователя:
# useradd svn
Затем редактируя /etc/group добавляем в свежесозданную группу svn всех
пользователей, которым будет нужен доступ к хранилищам.
Теперь создаем корневой каталог, где будут лежать все хранилища (пусть это /var/svn)
# mkdir /var/svn # chown svn:svn /var/svn # chmod 770 /var/svn
Далее все операции выполняем из-под пользователя svn:
# su svn
Создаем тестовое хранилище утилитой svnadmin:
$ svnadmin create /var/svn/test
Запрещаем доступ к нему не из группы:
$ chmod -R o-rwx /var/svn/test
Повторяем процесс для всех необходимых хранилищ (сейчас или позднее)
Настройка прав доступа SVN
Реализуется путем установки нужных прав на каталоги хранилищ. Создаем группы пользователей в /etc/group для каждого хранилища (или группы хранилищ с одинаковыми правилами доступа) и настраиваем права пользователей путем включения их в нужные группы.
Настройка прав доступа к отдельным каталогам внутри хранилищ описана в руководстве: http://svnbook.red-bean.com/nightly/ru/svn.serverconfig.pathbasedauthz.html
Настройка доступа к хранилищу по http (через Apache)
Устанавливаем пакет mod_dav_svn стандартным образом:
# yum install mod_dav_svn
Добавляем пользователя, под которым работает apache, в группы для доступа к хранилищам.
В настройки виртуального хоста, где будет показываться содержимое хранилищ, добавляем строки:
<Location /repo> DAV svn SVNParentPath /var/svn # For any operations other than these, require an authenticated user. <LimitExcept GET PROPFIND OPTIONS REPORT> Deny From All </LimitExcept> </Location>
Настройка клиента (PuTTY)
Создайте ключ с помощью puttygen, сохраните секретную его часть на локальной машине. Зайдите на сервер под собой (пользователем, который будет работать с SVN). Проверьте наличие в вашем домашнем каталоге каталога .ssh и файла authorized_keys в нем. Если нет, создайте:
$ mkdir .ssh $ chmod 700 .ssh $ touch .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys
Отредактируйте файл .ssh/authorized_keys, добавив в него строку открытого ключа (из puttygen). В начало этой, только что добавленной строки, допишите
command="/usr/bin/svnserve -t -r /var/svn"
Помните, что все это должно быть без переводов строк.
/usr/bin/svnserve - имя сервера SVN (может отличаться на вашей системе)
/var/svn - путь к каталогу, где находятся все хранилища. Параметр -r при запуске сервера SVN приведет к тому, что все пути от клиента будут отсчитываться от указанного каталога, таким образом для доступа к хранилищу /var/svn/test клиент должен будет передать путь /test, не завязываясь на реальное расположением хранилища в файловой системе сервера.
Теперь, при авторизации с данным ключем от имени клиента будет выполнена указанная программа, которая будет общаться с клиентом через SSH-туннель.
Попробуйте локальную работу с хранилищем, заодно создав начальную структуру каталогов
$ svn mkdir -m "Create initial structure" file:///var/svn/test/trunk file:///var/svn/test/tags file:///var/svn/test/branches
Создайте сессию в putty, назвав ее svn-test. Укажите автоматическое имя входа (Auto-login username) и секретный ключ для авторизации. Сохраните сессию (входить в нее не надо). Теперь запустите TortoiseSVN Repo-browser и в качестве URL укажите svn+ssh://svn-test/test Если все работает правильно, вы должны увидеть хранилище, содержащее папки branches, tags и trunk с вашим логином в поле Author. Обратите внимание, что имя хоста в URL соответствует имени сессии, а не имени сервера. При использовании схемы svn+ssh SVN-клиент автоматически находит сессию по указанному имени и использует ее в качестве туннеля.
Указанную настройку нужно повторить для всех пользователей, которые будут использовать SVN.