Autenticação Apache 2.4 + SVN authz com acesso misto autenticado / anônimo

7

Estou usando o Apache 2.4 e desejo usá-lo sem mod_access_compat.

Estou tentando servir repositórios SVN, com o controle de acesso tratado por mod_authz_svn.

Eu quero que alguns repositórios ou locais dentro de repositórios tenham acesso anônimo somente leitura. Quero que outros repositórios ou locais exijam autenticação básica.

O Apache 2.4 não suporta mais a sintaxe Satisfy all , no entanto, o mod_authz_svn parece esperar. Como isso deve ser configurado no Apache 2.4?

Configuração do Apache:

 <Location /svn>
        DAV svn
        SVNParentPath /usr/projects/svn
        AuthType Basic
        AuthName "SVN repository"
        AuthUserFile /usr/project-config/etc/svn-auth-file
        AuthzSVNAccessFile /usr/project-config/etc/svn-access-control
        Require valid-user
 </Location>

svn-access-control:

# cat etc/svn-access-control
[/]
antiduh = rw

[openprojects:/]
* = r
antiduh = rw

Eu tenho 5 repos, openprojects é o único para o qual eu quero ter acesso somente leitura anônimo. Eu não consigo fazer isso funcionar. Mesmo a documentação mais recente que pude encontrar para mod_authz_svn continua a usar Satisfy all .

    
por antiduh 19.06.2014 / 22:08

3 respostas

3

Percorrendo o código-fonte do mod_authz_svn, parece que há uma grande dependência do ap_satisfies(r) == SATISFY_ANY . Eu não estou totalmente familiarizado com o modelo de API do Apache, mas isso parece indicar que o mod_authz_svn atualmente não suporta o novo modelo de autenticação do Apache 2.4.

Como ninguém mais encontrou uma resposta ou evidências contrárias, vou marcar isso como a resposta.

Para fazer isso funcionar no Apache 2.4, carregue o módulo mod_access_compat :

LoadModule access_compat_module libexec/apache24/mod_access_compat.so

Em seguida, adicione a cláusula Satisfy any , assim como a documentação indica atualmente.

 <Location /svn>
    DAV svn
    SVNParentPath /usr/home/antiduh/svn
    AuthType Basic
    AuthName "SVN repository"
    AuthUserFile /usr/home/antiduh/svn/etc/svn-auth-file
    AuthzSVNAccessFile /usr/home/antiduh/svn/etc/svn-access-control
    Satisfy any
    Require valid-user
 </Location>
    
por 27.06.2014 / 22:00
0

Na maioria dos casos, o equivalente a 2,4% de Satisfy All é incluir as diretivas Require em um <RequireAll> bloquear. O equivalente a Satisfy Any seria um bloco <RequireAny> .

Para obter mais informações sobre as alterações e equivalências, esta apresentação (PDF) de Rich Bowen pode ser útil.

    
por 19.06.2014 / 22:35
0

É possível criar um Location separado sem auth para um subconjunto dos comandos do protocolo SVN, como:

<Location /subversion-open>
  DAV                    svn
  SVNParentPath          /path/to/svn-repos/subversion-open
  SVNListParentPath      Off
  SVNReposName           "SVN repos"
  AuthzSVNAccessFile     /path/to/svn-authz-file

  # Limit write permission to list of valid users.
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    AuthType               Basic
    AuthBasicProvider      file PAM
    AuthUserFile           /path/to/svn-htpasswd-file
    AuthPAMService         httpd_svn
    AuthName               "Open access SVN repos"

    Require                valid-user
  </LimitExcept>
</Location>

Isso permite que usuários não autenticados leiam os repositórios e os usuários autenticados acessem de acordo com as regras svn-authz-file . (Neste exemplo, também permitimos a autenticação via PAM para usuários do sistema, bem como aqueles no arquivo htpasswd )

    
por 26.06.2018 / 14:01