Use autenticação + autorização do Apache para controlar o acesso aos subdiretórios do Subversion

2

Eu tenho um único repositório SVN em / var / svn / com alguns subdiretórios. A equipe deve ser capaz de acessar o diretório de nível superior e todos os subdiretórios dentro dele, mas eu quero restringir o acesso a subdiretórios usando arquivos htpasswd alternativos.

Isso funciona para nossa equipe.

<Location />
DAV svn
SVNParentPath /var/svn

AuthType Basic
AuthBasicProvider ldap

# mod_authnz_ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap.example.org:636/ou=people,ou=Unit,ou=Host,o=ldapsvc,dc=example,dc=org?uid?sub?(objectClass=PosixAccount)"
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off

Require ldap-group cn=staff,ou=PosixGroup,ou=Unit,ou=Host,o=ldapsvc,dc=example,dc=org
</Location>

Agora, estou tentando restringir o acesso a um subdiretório com um arquivo htpasswd separado, como este:

<Location /customerA>
DAV svn
SVNParentPath /var/svn

# mod_authn_file
AuthType Basic
AuthBasicProvider file
AuthUserFile /usr/local/etc/apache22/htpasswd.customerA
Require user customerA
</Location>

Eu posso usar o Firefox e curl para navegar até esta pasta:

curl https://svn.example.org/customerA/ --user customerA:password

Mas não posso usar o check-out deste repositório SVN:

$ svn co https://svn.example.org/customerA/
svn: Repository moved permanently to 'https://svn.example.org/customerA/'; please relocate

E nos registros do servidor, recebo este erro estranho:

# httpd-access.log
192.168.19.13 - - [03/May/2010:16:40:00 -0700] "OPTIONS /customerA HTTP/1.1" 401 401
192.168.19.13 - customerA [03/May/2010:16:40:00 -0700] "OPTIONS /customerA HTTP/1.1" 301 244

# httpd-error.log
[Mon May 03 16:40:00 2010] [error] [client 192.168.19.13] Could not fetch resource information.  [301, #0]
[Mon May 03 16:40:00 2010] [error] [client 192.168.19.13] Requests for a collection must have a trailing slash on the URI.  [301, #0]

Minhas perguntas:

  1. Posso restringir o acesso ao Subversion? subdiretórios usando o acesso do Apache controles? DocumentRoot é comentado fora, por isso não está claro que o FAQ a link aplica-se.
  2. Eu prefiro não usar o AuthzSVNAccessFile, porque ele não suporta grupos LDAP. Controlamos o acesso usando o LDAP e fazemos uso intenso de grupos LDAP.
por Stefan Lasiewski 04.05.2010 / 20:34

1 resposta

1

Eu passei a tarde toda tentando fazer isso, e acho que a resposta para a pergunta 1, como você pediu, é "não". Se eu tentar e procurar no log de erros, vejo erros nas solicitações PROPFIND para caminhos como "/ myrepo /! Svn": ie, eu acho que o cliente Subversion algumas vezes está solicitando caminhos mágicos que só têm significado para o módulo do servidor Subversion, ao contrário de caminhos como "/ myrepo / subdir" que o Apache poderia entender e restringir.

O fato de você estar usando o SVNParentPath, no entanto, me faz suspeitar que o / var / svn na verdade contém múltiplos repositórios do Subversion, e o customerA é um desses repositórios. Você pode dizer, verificando se existe um arquivo / var / svn / customerA / format.

Isso está correto? Se assim for, você pode configurar um VirtualHost ou outro local onde você pode acessar apenas o repositório customerA usando a diretiva SVNPath. Por exemplo:

<VirtualHost>
  ServerName customerA.example.com

  <Location />
     SVNPath /var/svn/customerA
     ...
  </Location>
</VirtualHost>
    
por 15.01.2011 / 00:45