Кажется, существует проблема наследования пути, которая сбивает меня с толку из-за ограничений доступа. Например, если я предоставлю rw
получить доступ к одной группе / пользователю и пожелать ограничить его некоторыми /../../secret
никому, он тут же плюет мне в лицо.
Вот пример того, чего я пытаюсь достичь в dav_svn.authz
[groups]
grp_W = a, b, c, g
grp_X = a, d, f, e
grp_Y = a, e,
[/]
* =
@grp_Y = rw
[somerepo1:/projectPot]
@grp_W = rw
[somerepo2:/projectKettle]
@grp_X = rw
Что ожидается: grp_Y
имеет rw
доступ ко всем репозиториям, а grp_W
и grp_X
имеют доступ только к своим репозиториям.
Что происходит: grp_Y
имеет доступ ко всем репозиториям, а grp_W
и grp_X
не иметь доступа ни к чему
Если я изменяю порядок доступа, при котором я предоставляю доступ всем и ограничиваю его в каждом репозитории, он сразу же игнорирует правило аннулирования (лишение прав) и предоставляет всем доступ, предоставленный на корневом уровне.
Исключая группы, он выполняет то же самое с условиями для конкретных пользователей; даже полностью определено, например:
[/]
a = rw
b =
c =
d =
e =
f =
g = rw
[somerepo1:/projectPot]
a = rw
b = rw
c = rw
d =
e = rw
f =
g = rw
[somerepo2:/projectKettle]
a = rw
b
c
d = rw
e = rw
f = rw
g
Что дает точно такой же результат. Согласно документация Я соблюдаю все протоколы, так что это безумие.
Запуск на Apache2 с dav_svn
После кучи головных болей я позволил этому бездельничать * = rw
в SVNParentPath
уровень. Возвращаясь к этому, меня внезапно поразил очевидный удар; порядок чтения был проблемой.
Во-первых, мои соглашения об именах были совершенно неправильными, как и должно быть. [<repo_name>:<path-in-repo>]
Основная проблема заключается в том, что файл authz ожидает порядок «специфичности», в котором применяется первое правило чтения или доступное совпадение. В моем случае все будет совпадать с корнем, и все будет готово. таким образом, изменив порядок моего примера:
[groups]
grp_W = a, b, c, g
grp_X = a, d, f, e
grp_Y = a, e,
[ProjectPot:/]
@grp_W = rw
[ProjectKettle:/]
@grp_X = rw
[/]
* =
@grp_Y = rw
сделает его принятым и выполнит, как вел себя. Это НЕ ДОКУМЕНТИРУЕТСЯ, и, на мой взгляд, это серьезная путаница из-за чего-то совершенно тривиального.
Вы должны предоставить полный URL-адрес для доступа к репозиторию, у которого есть разрешение, в противном случае вам нужно предоставить разрешение на чтение, подобное этому.
[groups]
grp_W = a, b, c, g
grp_X = a, d, f, e
grp_Y = a, e,
[/]
* =
@grp_Y = rw
@grp_w = r
@grp_x = r
[somerepo1:/projectPot]
@grp_W = rw
[somerepo2:/projectKettle]
@grp_X = rw
Я столкнулся с тем же не так давно и тоже не смог придумать решения. Некоторые дешевые правила псевдонимов apache и / или svn: external могут помочь, но если это станет довольно сложным, я не думаю, что вы сможете это сделать сегодня. WANdisco поступило несколько запросов на эту функцию, и она может получить достаточный импульс, чтобы заслужить улучшенную аутентификацию с ненаследуемым доступом и поддержкой регулярных выражений.