Как настроить контроль доступа в SVN?
Я создал репозиторий, используя SVN и загруженные проекты. Над этими проектами работают несколько пользователей. Но не все работают над всеми проектами и требуют доступа. Я хочу настроить разрешения для каждого из проектов с пользователями.
Как мне этого добиться?
6 ответов
В вашей папке svn\repos\YourRepo\conf вы найдете два файла, authz и passwd. Это те два, которые вам нужно отрегулировать.
В файле passwd вам нужно добавить несколько имен пользователей и паролей. Я предполагаю, что вы уже сделали это, так как у вас есть люди, использующие это:
[users]
User1=password1
User2=password2
Затем вы хотите назначить разрешения соответственно с файлом authz:
Создайте нужные вам концептуальные группы и добавьте в них людей:
[groups]
allaccess = user1
someaccess = user2
Затем выберите доступ, который у них есть, как на уровне разрешений, так и на уровне проекта.
Итак, давайте дадим нашим парням "полный доступ" полный доступ из корня:
[/]
@allaccess = rw
Но только предоставьте нашим парням "некоторого доступа" доступ только для чтения к какому-либо проекту более низкого уровня
[/someproject]
@someaccess = r
Вы также найдете несколько простых документов в файлах authz и passwd.
@ Стефан Бейли
Чтобы завершить свой ответ, вы также можете делегировать права пользователя менеджеру проекта через обычный текстовый файл в вашем хранилище.
Для этого вы устанавливаете базу данных SVN по умолчанию authz
файл, содержащий следующее.
###########################################################################
# The content of this file always precedes the content of the
# $REPOS/admin/acl_descriptions.txt file.
# It describes the immutable permissions on main folders.
###########################################################################
[groups]
svnadmins = xxx,yyy,....
[/]
@svnadmins = rw
* = r
[/admin]
@svnadmins = rw
@projadmins = r
* =
[/admin/acl_descriptions.txt]
@projadmins = rw
Это по умолчанию authz
Файл разрешает администраторам SVN изменять обычный текстовый файл в вашем репозитории SVN, называемый /admin/acl_description.txt, в котором администраторы SVN или руководители проектов будут изменять и регистрировать пользователей.
Затем вы устанавливаете ловушку предварительной фиксации, которая будет определять, состоит ли ревизия из этого файла (и только этого файла).
Если это так, сценарии этой ловушки будут проверять содержимое вашего простого текстового файла и проверять, соответствует ли каждая строка правильному синтаксису SVN.
Затем хук после фиксации обновит \conf\authz
файл с объединением:
- ШАБЛОН
authz
файл представлен выше - простой текстовый файл
/admin/acl_descriptions.txt
Первая итерация выполняется администратором SVN, он добавляет:
[groups]
projadmins = zzzz
Он совершает свою модификацию, и это обновляет authz
файл.
Затем менеджер проекта zzzz может добавлять, удалять или объявлять любую группу пользователей и любых пользователей, которых он хочет. Он передает файл и authz
Файл обновлен.
Таким образом, администратор SVN не должен следить за всеми пользователями всех хранилищ SVN.
Одна ошибка, которая поймала меня:
[repos:/path/to/dir/] # this won't work
но
[repos:/path/to/dir] # this is right
Вам не нужно включать косую черту в каталог, иначе вы увидите 403 для запроса OPTIONS.
Вы можете использовать svn+ssh:, и тогда это основано на контроле доступа к хранилищу в указанном месте.
Так я размещаю репозиторий групп проектов в Uni, где я не могу ничего настроить. Просто наличие каталога, которым владеет группа, и запуск там svn-admin (или чего бы то ни было) означает, что мне не нужно ничего настраивать.
Хотя я бы посоветовал подход Apache лучше, SVN Serve работает нормально и довольно просто.
Предполагая, что ваш репозиторий называется "my_repo", и он хранится в c:\svn_repos:
Создайте файл с именем "passwd" в "C:\svn_repos\my_repo\conf". Этот файл должен выглядеть так:
[Users] username = password john = johns_password steve = steves_password
В наборе c:\svn_repos\my_repo\conf\svnserve.conf
[general] password-db = passwd auth-access=read auth-access=write
Это заставит пользователей войти в систему для чтения или записи в этот репозиторий.
Выполните следующие действия для каждого хранилища, включая только соответствующих пользователей в passwd
файл для каждого хранилища.
Лучший способ - настроить Apache и настроить доступ через него. Проверьте svn книгу на помощь. Если вы не хотите использовать Apache, вы также можете сделать минималистичный контроль доступа с помощью svnserve.
Apache Subversion поддерживает авторизацию на основе путей, которая помогает вам настраивать детальные разрешения для учетных записей пользователей и групп на пути в ваших репозиториях (файлах или каталогах). Авторизация на основе пути поддерживает три уровня доступа: нет доступа, только чтение и чтение / запись.
Разрешения авторизации на основе пути хранятся в файлах авторизации для каждого репозитория или сервера со специальным синтаксисом. Вот пример из SVNBook:
[calc:/branches/calc/bug-142]
harry = rw
sally = r
Если вам требуется сложная структура разрешений с множеством путей и учетных записей, вы можете воспользоваться инструментами управления разрешениями на основе графического интерфейса, предоставляемыми VisualSVN Server:
- Администраторы сервера могут управлять разрешениями пользователей и групп через консоль VisualSVN Server Manager или PowerShell,
- Пользователи без прав администратора могут управлять разрешениями через RepoCfg.
Разрешения репозитория в VisualSVN Server Manager
Разрешения репозитория в PowerShell
Пользователи без прав администратора могут управлять разрешениями с помощью инструмента RepoCfg.