Como faço para restringir o acesso ao repositório via WebSVN?

8

Eu tenho vários repositórios do subversion que são servidos através do Apache 2.2 e WebDAV. Eles estão todos localizados em um lugar central, e eu usei este artigo debian-administration.org como base (eu abandonou o uso da autenticação do banco de dados para um arquivo htpasswd simples).

Desde então, eu também comecei a usar o WebSVN . Meu problema é que nem todos os usuários do sistema podem acessar os diferentes repositórios, e a configuração padrão do WebSVN é permitir que qualquer pessoa possa se autenticar.

De acordo com a documentação do WebSVN, a melhor maneira de contornar isso é usar o sistema de acesso de caminho do subversion, então eu procurei criar isto, usando a diretiva AuthzSVNAccessFile.

Quando faço isso, continuo recebendo mensagens "403 Proibidas".

Meus arquivos parecem com os seguintes:

Eu tenho configurações de política padrão em um arquivo:

<Location /svn/>
  DAV svn
  SVNParentPath  /var/lib/svn/repository

  Order deny,allow
  Deny from all
</Location>

Cada repositório obtém um arquivo de política como abaixo:

<Location /svn/sysadmin/>
    Include  /var/lib/svn/conf/default_auth.conf
    AuthName "Repository for sysadmin"
    require user joebloggs jimsmith mickmurphy
</Location>

O arquivo default_auth.conf contém isto:

SVNParentPath      /var/lib/svn/repository
AuthType           basic
AuthUserFile       /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf

Não sei ao certo por que preciso do segundo SVNParentPath em default_auth.conf, mas acabei de adicionar isso hoje, pois estava recebendo mensagens de erro como resultado da adição da diretiva AuthzSVNAccessFile.

Com um arquivo de acesso totalmente permissivo

[/]
joebloggs = rw

o sistema funcionou bem (e foi essencialmente inalterado), mas assim que eu começo a tentar adicionar qualquer tipo de restrição, como

[sysadmin:/]
joebloggs = rw

em vez disso, recebo novamente os erros "Permissão negada". As entradas do arquivo de log são:

[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin

O que preciso fazer para que isso funcione? Configurou o apache errado ou o meu entendimento do arquivo svnaccess.conf está incorreto?

Se eu estou indo sobre isso da maneira errada, eu não tenho nenhum apego especial à minha abordagem geral, então sinta-se à vontade para oferecer alternativas também.

UPDATE (20090528-1600):

Eu tentei implementar esta resposta , mas ainda não consigo fazê-lo funcionar corretamente.

Eu sei que a maior parte da configuração está correta, como eu adicionei

[/]
joebloggs = rw

no começo e 'joebloggs' então tem todo o acesso correto.

Quando eu tento ir embora específico do repositório, fazendo algo como

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

então recebi um erro de permissão negada para o mickmurphy (joebloggs ainda funciona), com um erro semelhante ao que eu já tinha anteriormente

[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin

Além disso, esqueci de explicar anteriormente que todos os meus repositórios estão abaixo

/var/lib/svn/repository

UPDATE (20090529-1245):

Ainda não há sorte em fazer isso funcionar, mas todos os sinais parecem estar apontando para o problema, pois o controle de acesso ao caminho na subversão não está funcionando corretamente. Minha suposição é que eu não configurei o apache ou o svn para reconhecer corretamente minha estrutura de repositório.

Isso ocorre porque a entrada '[/]' parece funcionar perfeitamente.

Também me ocorre que esta é uma questão que pode pertencer melhor ao StackOverflow?

UPDATE (20090603-1740):

Em resposta a um dos comentários para esta questão, minha configuração do WebDAV para o subversion em si recebe a localização / svn / repos , mas o websvn está configurado para / websvn.

    
por kaybenleroll 28.05.2009 / 16:59

5 respostas

5

O problema provavelmente está relacionado à divisão da configuração entre duas diretivas de local, mas não tenho certeza.

Em vez de definir permissões em dois locais (configuração do apache e o arquivo authz), basta defini-los no arquivo authz. Assim:

link

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn/repository

  Require valid-user
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /path/to/.htpasswd

  SVNPathAuthz on
  AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

Você precisaria dos usuários apropriados no arquivo htpasswd também, obviamente.

    
por 28.05.2009 / 17:59
4

Não tem ideia se resolveu ou não este problema, mas este é o procedimento que funciona para mim.

Esqueça-se de mexer nas diretivas do apache, edite o arquivo config.php do WebSVN e inclua / descomente a seguinte diretiva:

$ config- > useAuthenticationFile ('/ caminho / para / seu / authz / arquivo');

    
por 23.03.2010 / 13:07
2

isso funciona para mim.

user1 pode ver "/" e "/ project1" user3 pode ver apenas "/ project1"

[grupos]

groupa = user1, user2

groupb = user3, user4

[/]

@groupa = rw

[/ project1]

@groupb = rw

    
por 30.06.2009 / 16:44
1

Eu lutei bastante com isso, e a única configuração que funciona para mim é a seguinte:

Authz file
------
[groups]
group1=user1
group2=user2

#Read and write for everyone defined in some group, others denied
[/]
@group1=rw
@group2=rw
*=

[project1:/]
@group1=rw
*=

[project2:/]
@group2=r
*=
----end authz file

Como resultado, o grupo1 tem acesso de leitura e gravação ao projeto1 e o grupo2 tem acesso de leitura ao projeto2. Todos os outros não têm acesso a nenhum projeto.

Devo enfatizar que "project1" e "project2" são projetos dentro do repositório definido no arquivo de configuração do Apache subversion.conf as.

Subversion.conf
----
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "Name of the root repositories"
   Require valid-user
</Location>

<Location /svn/repos>
   AuthName "Subversion subrepository"
   AuthUserFile /var/www/svn/repos/conf/passwdfile
#Authz control
   AuthzSVNAccessFile /var/www/svn/repos/conf/authz
</Location>

-----end

Meu problema atual é que não é possível listar os projetos no repositório /svn/repos (embora possam ser acessados corretamente). SVNListParentPath na diretiva, independentemente de onde você a colocou, isso não ajuda.

Atualmente meu /var/www/svn não é um repositório, mas apenas um diretório em um sistema de arquivos de servidores. /var/www/svn/repos é um repositório criado com svnadmin create

    
por 21.11.2011 / 06:54
0

Você deveria ter lido o documento websvn e tudo teria sido óbvio:)

Also note that you should not use the AuthzSVNAccessFile command to define the access file.

Now that you've defined your authentication, you'll be asked for your user name and password in order to access the WebSVN directory. All that's left is to configure WebSVN to use your Subversion access file to control access. Add this line to your config.php file:

$config->useAuthenticationFile('/path/to/accessfile');

    
por 22.08.2014 / 13:53