Как предотвратить доступ пользователя 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.