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.
fonte
Respostas:
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
svn.authz
Você também precisaria dos usuários apropriados no arquivo htpasswd.
fonte
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
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
Eu lutei bastante com isso, e a única configuração que funciona para mim é a seguinte:
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.conf
como.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ê o colocar, não ajuda.Atualmente, o 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 comsvnadmin create
fonte
Você deveria ter lido o documento websvn e tudo teria sido óbvio :)
fonte