Subversion all ou nothing access to repo tree

1

Estou tendo alguns problemas para configurar o acesso aos meus repositórios do Subversion em um servidor Linux. O problema é que só consigo ter uma estrutura de tudo ou nada. Qualquer um recebe acesso de leitura a tudo ou ninguém consegue ler ou escrever acesso a qualquer coisa.

A configuração:

As repos SVN estão localizadas em / www / svn / repoA, repoB, repoC ...

Repositórios são servidos pelo Apache, com os locais definidos em etc / httpd / conf.d / subversion.conf como:

<Location /svn/repoA>
 DAV svn
 SVNPath /var/www/svn/repoA
 AuthType Basic
 AuthName "svn repo"
 AuthUserFile /var/www/svn/svn-auth.conf
 AuthzSVNAccessFile /var/www/svn/svn-access.conf
 Require valid-user
</Location>

<Location /svn/repoB>
 DAV svn
 SVNPath /var/www/svn/repoB
 AuthType Basic
 AuthName "svn repo"
 AuthUserFile /var/www/svn/svn-auth.conf
 AuthzSVNAccessFile /var/www/svn/svn-access.conf
 Require valid-user
</Location>

...

O svn-access.conf está configurado como:

[/]
* =

[/repoA]
* =
userA = rw

[/repoB]
* =
userB = rw

Mas o check-out de URL / svn / repoA como userA resulta em Access Forbidded.

Alterando para

[/]
* =
userA = r

[/repoA]
* =
userA = rw

[/repoB]
* =
userB = rw

dá ao usuário um acesso de leitura a todos os repositórios (incluindo o repoB), mas somente o acesso de leitura ao repoA!

para que o userA tenha acesso de leitura / gravação ao repoB, preciso adicionar

[/]
userA = rw

que é mental.

Eu também tentei mudar

 Require valid-user

para

 Require user userA

para o repoA no subversion.conf, mas isso só me deu acesso de leitura a ele.

Eu preciso de uma maneira padrão de negar acesso a todos os repositórios, dando acesso de leitura / gravação somente quando explicitamente definido.

Alguém pode me dizer o que estou fazendo de errado aqui? Eu passei algumas horas testando e pesquisando, mas fica vazio, então agora estou fazendo o post de vergonha.

EDITAR

Eu fui com a primeira solução de Shane e acabei com a seguinte configuração de trabalho:

/etc/httpd/conf.d/subversion.conf:

<Location /svn>
    DAV svn
    SVNParentPath /var/www/svn

    AuthType Basic
    AuthName "Subversion repo"
    AuthUserFile /var/svn-auth.conf
    Require valid-user
</Location>

/var/svn-access.conf:

[/]
* =

[repoA:/]
* =
userA = rw

[repoB:/]
* =
userB = rw
    
por Glader 03.09.2012 / 12:38

3 respostas

4

O tema comum nos problemas que você está tendo é que suas seções [/repoA] e [/repoB] não estão fazendo nada, certo? Há uma razão para isso.

Os caminhos que você está autorizando são não relativos ao local do arquivo de acesso authz; eles são relativos ao repositório SVN que está controlando o controle de acesso.

Então, sua seção [/] ? Concede acesso a ambos os /svn/repoA/ e /svn/repoB/ ; ele não concede acesso a /svn/ . Da mesma forma, sua seção [/repoA] concede acesso a /svn/repoA/repoA e /svn/repoB/repoA ; uma regra para [/trunk] concederá acesso a ambos /svn/repoA/trunk e /svn/repoB/trunk .

Você definiu SVNPath diretivas para cada um de seus repositórios, mas está apontando para os mesmos arquivos de autorização para cada um - portanto, cada repositório tem regras de acesso idênticas. Há uma sintaxe para definir diferentes autorizações para diferentes repositórios, mas isso é para quando você está usando SVNParentPath .

Então, duas opções:

  1. Mude para o SVNParentPath /var/www/svn em vez de definir cada repositório em sua configuração do Apache, e mude o seu arquivo authz para ter permissões direcionadas a repo:

    [/]
    * =
    userA = r
    
    [repoA:/]
    * =
    userA = rw
    
    [repoB:/]
    * =
    userB = rw
    
  2. Use diferentes arquivos authz para cada repositório, tendo em mente que os caminhos para os quais o acesso está sendo concedido é relativo à raiz do repositório.

por 04.09.2012 / 04:37
0

Whoa. Primeiramente, eu removeria o svn-auth.conf (e o svn-access.conf) do diretório do qual o apache serve explicitamente as requisições http. Alguma pessoa mal-intencionada aparece e solicita esse arquivo e ele já tem metade da sua segurança já sem precisar tentar.

link Esta resposta parece cobrir o que você está procurando para, eu acho.

    
por 03.09.2012 / 18:19
0

Você está misturando um projeto por repositório estrutura com o formulário Autorização baseada no caminho .

    
por 04.09.2012 / 06:31