Как мне настроить контроль доступа в SVN?

84

Я создал репозиторий с использованием SVN и загрузил проекты. Над этими проектами работают несколько пользователей. Но не всем требуется доступ ко всем проектам. Я хочу настроить права пользователей для каждого проекта.

Как я могу этого добиться?

user15425
источник

Ответы:

85

В папке 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 .

Стивен Бейли
источник
8
соответствующая страница руководства: svnbook.red-bean.com/en/1.7/…
ErichBSchulz,
1
Примечание: это не сработает, если вы
обращаетесь
Когда я даю пользователю, например, одну папку в репозитории, пользователь может получить доступ к этой папке только по прямой ссылке. Может ли пользователь добавить репозиторий, и ему будут отображаться только назначенные ему папки? Спасибо за ответ .
maoanz
группы вызываются с @groupnameэтим одним битом при определении правил, это идеально в ваших примерах, просто указывая.
Wolfeh
28

@ Стивен Бейли

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

Для этого вы настраиваете свою базу данных 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_descriptions.txt' , в котором администраторы SVN или менеджеры проектов будут изменять и регистрировать пользователей.

Затем вы настраиваете ловушку перед фиксацией, которая будет определять, состоит ли ревизия из этого файла (и только из этого файла).

Если это так, сценарий этой ловушки проверит содержимое вашего текстового файла и проверит, соответствует ли каждая строка синтаксису SVN.

Затем обработчик пост-фиксации обновит \conf\authzфайл конкатенацией :

  • authzфайл TEMPLATE, представленный выше
  • простой текстовый файл /admin/acl_descriptions.txt

Первая итерация выполняется администратором SVN, который добавляет:

[groups]
projadmins = zzzz

Он фиксирует свою модификацию, и это обновляет authzфайл.

Затем менеджер проекта zzzz может добавлять, удалять или объявлять любую группу пользователей и любых пользователей, которых он хочет. Он фиксирует файл, и authzфайл обновляется.

Таким образом, администратору SVN не нужно индивидуально управлять всеми без исключения пользователями для всех репозиториев SVN .

VonC
источник
27

Одна ловушка, которая меня поймала:

[repos:/path/to/dir/] # this won't work

но

[repos:/path/to/dir]  # this is right

Вам не нужно включать в конец каталога косую черту, иначе вы увидите 403 для запроса OPTIONS.

Крис Берджесс
источник
8

Вы можете использовать svn + ssh :, и тогда он будет основан на управлении доступом к репозиторию в указанном месте.

Вот как я размещаю репозиторий проектной группы в своем универмаге, где я не могу ничего настроить. Просто наличие каталога, которым владеет группа, и запуск в нем svn-admin (или чего-то еще) означает, что мне не нужно было выполнять какую-либо настройку.

Мэтью Шинкель
источник
Это ужасный ответ. Этот метод ssh плохо документирован и, похоже, работает только для Linux.
user1040323
1
Просто неправда. Достаточно запустить демон SSH на их сервере Windows, и svn + ssh работает для Windows точно так же, как и для Linux. Существует множество руководств, в которых объясняется, как запустить SSH на компьютере с Windows.
Чак
Кроме того, дорогой @ user1040323, есть и другие платформы, отличные от Linux, кроме Windows: я почти уверен, что машина, на которой я был, была не Linux, а каким-то вариантом BSD.
Мэтью Шинкель
5

Хотя я бы сказал, что подход Apache лучше, SVN Serve работает нормально и довольно просто.

Предположим, ваш репозиторий называется «my_repo» и хранится в C: \ svn_repos:

  1. Создайте файл с именем "passwd" в "C: \ svn_repos \ my_repo \ conf". Этот файл должен выглядеть так:

    [Users]
    username = password
    john = johns_password
    steve = steves_password
    
  2. В C: \ svn_repos \ my_repo \ conf \ svnserve.conf установите:

    [general]
    password-db = passwd
    auth-access=read
    auth-access=write
    

Это заставит пользователей войти в систему для чтения или записи в этот репозиторий.

Выполните эти шаги для каждого репозитория, включая только соответствующих пользователей в passwdфайл для каждого репозитория.

РБ.
источник
Внимание: пароли хранятся в виде обычного текста в файле SVN conf!
AVA
3

Лучше всего настроить Apache и настроить доступ через него. Обратитесь за помощью к svn book . Если вы не хотите использовать Apache, вы также можете выполнить минималистичный контроль доступа с помощью svnserve.

Младен Михайлович
источник
0

Apache Subversion поддерживает авторизацию на основе путей, которая помогает настраивать детальные разрешения для учетных записей пользователей и групп на пути в ваших репозиториях (файлах или каталогах). Авторизация на основе пути поддерживает три уровня доступа - нет доступа, только чтение и чтение / запись.

Разрешения авторизации на основе пути хранятся в файлах авторизации для каждого репозитория или сервера со специальным синтаксисом. Вот пример из SVNBook:

[calc:/branches/calc/bug-142]
harry = rw
sally = r

Если вам требуется сложная структура разрешений с множеством путей и учетных записей, вы можете воспользоваться инструментами управления разрешениями на основе графического интерфейса, предоставляемыми VisualSVN Server:

  • Администраторы сервера могут управлять разрешениями пользователей и групп через консоль VisualSVN Server Manager или PowerShell,
  • Пользователи без прав администратора могут управлять разрешениями через RepoCfg.

Разрешения репозитория в VisualSVN Server Manager введите описание изображения здесь

Разрешения репозитория в PowerShell введите описание изображения здесь

Пользователи без прав администратора могут управлять разрешениями с помощью инструмента RepoCfg. введите описание изображения здесь

бахреп
источник