Все статьи раздела «Системное администрирование»

Настройка 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.