SVN ограничивает доступ ко всему, кроме подкаталога

У меня есть Apache Subversion 1.7.14, размещенный на CentOS 7.4, и у меня возникают проблемы с получением авторизации на основе пути, так что группа с ограниченным доступом к определенной ветви может переходить к ветви с веб-сервера apache.

Пример структуры:

/svn/repo/projA
/svn/repo/projA/trunk
/svn/repo/projA/branches
/svn/repo/projA/branches/branch1
/svn/repo/projA/branches/branch2
/svn/repo/projB
/svn/repo/projC

У меня есть пара групп пользователей, например:

[groups]
svn-group1 = ...
svn-group2 = ...

Моя цель состоит в том, чтобы svn-group2 был явно ограничен /svn/repo/projA/branch /branch1 и не имел никакого доступа к какой-либо другой ветке, такой как:

[/]
* =
@svn-group1 = rw

[repo:/projA/branches/branch1]
@svn-group2 = rw

Однако при переходе на https://svn.example.com/repo/projA пользователи svn-group2 получат ошибку Forbidden. Только если они перейдут по полному URL https://svn.example.com/repo/projA/branches/branch1, они получат доступ. В идеале я бы хотел, чтобы svn-group2 видел все родительские листья вплоть до корневого каталога, чтобы они "знали", к чему у них есть доступ с https://svn.example.com/.

Я могу получить правильное поведение, явно исключив каждый братский лист:

[/]
* =
@svn-group1 = rw

[repo:/projA/branches/branch1]
@svn-group2 = rw

[repo:/projA]
@svn-group2 = r

[repo:/projA/trunk]
@svn-group2 =

[repo:/projA/branches/branch2]
@svn-group2 =

[repo:/projB]
@svn-group2 =

[repo:/projC]
@svn-group2 =

Это даже имеет преимущество в том, что пользователь даже не видит ссылки на projB и projC со страницы https://svn.example.com/repo. Будет виден только projA, за которым следуют только ветви, а за ними - только branch1.

Однако это не гарантирует, что svn-group2 увидит только branch1. Я хотел бы гарантировать, что svn-group1 создаст какую-то новую ветку, которую svn-group2 не увидит по умолчанию.

Я нашел несколько подсказок: glob: rule с некоторыми символами подстановки, но я не смог заставить его работать. Я мог бы представить что-то вроде ниже, где подстановочные знаки исключают родственные ветви.

[:glob:repo:/]
@svn-group2 = r

[:glob:repo:/*/]
@svn-group2 =

[repo:/projA]
@svn-group2 = r

[:glob:repo:/projA/*/]
@svn-group2 = 

[repo:/projA/branches/]
@svn-group2 = r

[:glob:repo:/projA/branches/*/]
@svn-group2 =

[repo:/projA/branches/branch1]
@svn-group2 = rw

Спасибо!

1 ответ

Итак, есть пара вещей, которые я постараюсь прояснить для вас.

[/]
* =
@svn-group1 = rw

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

В идеале я бы хотел, чтобы svn-group2 видел все родительские листья вплоть до корневого каталога, чтобы они "знали", к чему у них есть доступ с https://svn.example.com/

Я вижу ход мыслей, что вы шли с этим, к сожалению, это невозможно, если, как вы сказали, явно не запретите им доступ в каждом созданном подкаталоге. В тот момент, когда вы предоставили группе 2 доступ на чтение к базовому URL-адресу projA, они по сути будут иметь доступ на чтение к любым новым созданным вами подкаталогам, что будет означать любые новые ветки / теги, которые вы создадите, они будут видеть, пока вы не обновите authz. файл для этого.

Я еще не пробовал подстановочные знаки, и в данный момент у меня нет доступа к моему серверу, но когда я вернусь домой, я смогу проверить это для более удобного способа сделать это.

Другие вопросы по тегам