Как предотвратить доступ пользователя subversion к части репозитория?

Я использую репозиторий Subversion, размещенный на Dreamhost для проекта.

Я бы хотел разрешить доступ к некоторым пользователям на ограниченной основе. По крайней мере, я хотел бы разрешить доступ только для чтения некоторым пользователям, но в идеале я хотел бы, чтобы некоторые пользователи вообще не видели некоторые части репозитория. Я не могу найти разрешения пользователя, упомянутые в веб-документах для Subversion, хотя я предполагаю, что он есть?

Я привык использовать Perforce, так что я хочу, что p4 protect делает для Perforce.

спасибо.

6 ответов


посмотрите файл authz в каталоге conf/. Можно задать разрешения для определенных пользователей и определенных каталогов. В svnserve.conf вы можете указать, имеют ли анонимные пользователи доступ для чтения или нет.

вот пример из моего репозитория:

[groups]
project1_team = dave, john, andy

[/]
* =
dave = rw

[/project1]
@project1_team = rw

[/project2]
andy = r

здесь происходит то, что я определил группу пользователей, имеющих полный доступ к project1; Дэйв (который, оказывается, я) имеет полный доступ ко всему репозиторию, в то время как Энди имеет доступ только для чтения проект2.


на веб-хостах обычно есть файл конфигурации (который может быть назван как угодно) для запуска авторизация. Каждый репозиторий имеет такой список, как
[my-repository:/]
myuser = rw

Что даст "myuser" разрешение на чтение и запись во всем репозитории. Вы также можете сделать:

[my-repository / just-this-folder/:]
somejerk: Р

который должен делать то, что вы хотите.


если вы используете SVN и Apache , выполните следующую процедуру :

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

1-Создайте соответствующих пользователей для каждого репозитория в отдельном файле:

sudo htpasswd -c -m /etc/apache2/dav_svn_REPOSITORY1.passwd $user_name_for_repository1
 sudo htpasswd -c -m /etc/apache2/dav_svn_REPOSITORY2.passwd $user_name_for_repository2

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

2 - отредактируйте следующий файл:

nano /etc/apache2/mods-available/dav_svn.conf

у вас будет что-то вроде этого :

<Location /svn>
  SVNPath $your svn repository path
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  Require valid-user
  SSLRequireSSL
</Location>

скопируйте этот блок для каждого репозитория , который у вас есть, в нашем случае вам нужен еще один такой блок . Теперь избавьтесь от (удалите) вышеуказанного блока и добавьте следующий блок, который является измененной копией вышеуказанного:

<Location /svn/repository1>
  SVNPath $your svn repository1 path
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn_REPOSITORY1.passwd
  Require valid-user
  SSLRequireSSL
</Location>
<Location /svn/repository2>
  SVNPath $your svn repository2 path
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn_REPOSITORY2.passwd
  Require valid-user
  SSLRequireSSL
</Location>

3 - сохраните файл и перезапустите Apache.


на Subversion Book ваш ответ здесь.

серьезно, люди: когда это вышло из моды, чтобы прочитать даже самую основную документацию, прежде чем докучать другим людям?


см. принятый ответ выше. Однако для специфики Dreamhost в каталоге ~ / svn есть два файла для каждого репозитория repo_name.access и repo_name.passwd. Где repo_name-это имя, которое вы дали вашему репозиторию. Вы можете изменить repo_name.доступ к файлу, как описано в принятом ответе.

не забудьте chmod 644 repo_name.access после редактирования, чтобы apache мог получить к нему доступ.


Я не знаком с конкретной конфигурацией, которую использует Dreamhost, но типичным способом обеспечения разрешений является использование механизмов аутентификации Apache. Вот соответствующую страницу из документации Subversion.