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

8

Eu tenho vários repositórios de subversão que são servidos através do Apache 2.2 e WebDAV. Eles estão todos localizados em um local central, e eu usei este artigo debian-administration.org como base (deixei de lado 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 no sistema devem poder 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 ao caminho do subversion, então procurei criá-lo usando a diretiva AuthzSVNAccessFile.

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

Meus arquivos têm a seguinte aparência:

Eu tenho configurações de diretiva 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íticas 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 este:

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 no 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 era essencialmente inalterado), mas assim que comecei a tentar adicionar qualquer tipo de restrição, como

[sysadmin:/]
joebloggs = rw

em vez disso, recebo os erros 'Permissão negada' novamente. 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? O apache foi configurado incorretamente ou o meu entendimento do arquivo svnaccess.conf está incorreto?

Se estou fazendo isso da maneira errada, não tenho nenhum apego particular à minha abordagem geral; portanto, fique à vontade para oferecer alternativas também.

ATUALIZAÇÃO (20090528-1600):

Tentei implementar esta resposta , mas ainda não consigo fazer o trabalho corretamente.

Eu sei que a maioria das configurações está correta, como adicionei

[/]
joebloggs = rw

no início e 'joebloggs', então, tem todo o acesso correto.

Quando tento ir específico do repositório, fazer algo como

[/]
joebloggs = rw

[sysadmin:/]
mickmurphy = rw

então recebi um erro de permissão negada para 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 por baixo

/var/lib/svn/repository

ATUALIZAÇÃO (20090529-1245):

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

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

Também me ocorre que essa é uma pergunta que pode pertencer melhor ao StackOverflow?

ATUALIZAÇÃO (20090603-1740):

Em resposta a um dos comentários a esta pergunta, minha configuração do WebDAV para o subversion recebe o local / svn / repos, mas o websvn está definido como / websvn.

kaybenleroll
fonte
Em qual URL do servidor relativo o seu websvn é executado? Na minha atual websvn configuração é em / websvn, ao passo que o próprio repositório é em / svn
Sander Rijken
oi kaybenleroll, você pode me ajudar nisso? stackoverflow.com/questions/13541629/...
Juned

Respostas:

5

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

Em vez de definir permissões em dois lugares (apache config e o arquivo authz), apenas defina-as no arquivo authz. Igual a:

httpd.conf

<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ê também precisaria dos usuários apropriados no arquivo htpasswd.

Alex J
fonte
você pode me ajudar nisso? stackoverflow.com/questions/13541629/...
Juned
4

Não tenho idéia se você resolveu ou não esse problema, mas esse é o procedimento que funciona para mim.

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

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


fonte
Não, nunca resolvi completamente. Vou tentar a sua ideia. :)
kaybenleroll 23/03
+1 Eu tive o mesmo problema e isso foi completamente corrigido! Obrigado!
John Virgolino
2

isso funciona para mim.

usuário1 pode ver "/" e "/ projeto1" usuário3 pode ver apenas "/ projeto1"

[grupos]

groupa = usuário1, usuário2

groupb = usuário3, usuário4

[/]

@groupa = rw

[/Projeto 1]

@groupb = rw


fonte
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 possui acesso de leitura e gravação ao projeto1 e o grupo2 possui acesso de leitura ao projeto2. Todo mundo não tem acesso a nenhum projeto.

Devo enfatizar que "projeto1" e "projeto2" são projetos dentro do repositório definido no arquivo de configuração do Apache subversion.confcomo.

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). SVNListParentPathna diretiva, independentemente de onde você o colocar, não ajuda.

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

Marko Kosunen
fonte
0

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

Observe também que você não deve usar o comando AuthzSVNAccessFile para definir o arquivo de acesso.

Agora que você definiu sua autenticação, será solicitado seu nome de usuário e senha para acessar o diretório WebSVN. Tudo o que resta é configurar o WebSVN para usar seu arquivo de acesso ao Subversion para controlar o acesso. Adicione esta linha ao seu arquivo config.php:

$ config-> useAuthenticationFile ('/ caminho / para / arquivo de acesso');

Bartek
fonte