it-swarm-pt.tech

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

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

Desde então, também comecei a usar WebSVN . Meu problema é que nem todos os usuários do sistema devem ser capazes de 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 por caminho do Subversion, então procurei criá-lo usando a diretiva AuthzSVNAccessFile.

Quando eu faço isso, porém, continuo recebendo mensagens "403 Forbidden".

Meus arquivos se parecem com o seguinte:

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 a seguir:

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

[sysadmin:/]
joebloggs = rw

em vez disso, recebo novamente os erros de 'Permissão negada'. As entradas do arquivo de registro 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? Configurei o Apache incorretamente ou meu entendimento sobre o arquivo svnaccess.conf está incorreto?

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

ATUALIZAÇÃO (20090528-1600):

Tentei implementar esta resposta , mas ainda não consigo fazer com que funcione corretamente.

Sei que a maior parte da configuração está correta, pois adicionei

[/]
joebloggs = rw

no início e 'joebloggs' então tem todos os acessos corretos.

Porém, quando tento ir para um repositório específico, faço 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

[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

ATUALIZAÇÃO (20090529-1245):

Ainda não tive sorte em fazer isso funcionar, mas todos os sinais parecem apontar para o problema de o controle de acesso ao caminho no Subversion não estar funcionando corretamente. Minha suposição é que não configurei o Apache ou o svn para reconhecer adequadamente a estrutura do meu repositório.

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

Também me ocorre que essa é uma questão que pode ser melhor no StackOverflow?

ATUALIZAÇÃO (20090603-1740):

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

8
kaybenleroll

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 (configuração do Apache 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, obviamente.

5
Alex J

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

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

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

4
Daniel

isso funciona para mim.

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

[grupos]

groupa = usuário1, usuário2

groupb = usuário3, usuário4

[/]

@groupa = rw

[/Projeto 1]

@groupb = rw

2
user11196

Tenho lutado muito 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 "projeto1" e "projeto2" são projetos dentro do repositório definido no arquivo de configuração do Apache Subversion.conf Como.

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 em tudo (embora possam ser acessados ​​corretamente). SVNListParentPath na diretiva, independente 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

1
Marko Kosunen

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 do Subversion para controlar o acesso. Adicione esta linha ao seu arquivo config.php:

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

0
Bartek