Estou tentando configurar permissões para um repositório SVN acessado através do Apache 2. O que eu quero é permitir que qualquer pessoa acesse o diretório raiz, enquanto restringe a usuários autenticados um diretório filho. Exemplo:
/demo
/demo/project1
/demo/project1/sensitive-data # This path should require user authentication.
/demo/project2
A princípio, pensei que fosse tão simples quanto:
<Location /demo>
DAV svn
SVNPath /home/svn/demo
AuthType Basic
AuthName demo
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
<Location /demo/project1/sensitive-data>
DAV svn
Require valid-user
</Location>
Quando usado através de HTTP (por exemplo com CURL), o Apache está em conformidade com a configuração: I can access:
e recebo, como esperado, um HTTP 401 Unauthorized
ao tentar recuperar http://example.com/demo/project1/sensitive-data .
Por outro lado, fazendo:
svn checkout http://example.com/demo/ .
ou:svn checkout http://example.com/demo/project1/ .
recupera toda a árvore de diretórios, incluindo demo/project1/sensitive-data
.
Pelo menos, svn checkout http://example.com/demo/project1/sensitive-data/ .
pedidos de senha.
Como devo configurar as permissões para restringir o acesso ao sensitive-data
diretório ao fazer svn checkout http://example.com/demo/ .
?
O
<Location /demo/project1/sensitive-data>
bloco é irrelevante ao fazer um checkout: ele é usado apenas ao acessar http://example.com/demo/project1/sensitive-data diretamente, razão pela qual as solicitações HTTP resultamHTTP 401 Unauthorized
e um checkout desse diretório específico requer autenticação .A maneira correta de configurar a autorização baseada em caminho é explicada na documentação do Subversion :
<Location /demo>
aponta para um arquivo de acesso:O arquivo de acesso define quem pode acessar os arquivos e diretórios específicos. Exemplo básico: