Apache DAV SVN LDAP e AuthzSVNAccessFile

1

Estou trabalhando em um projeto em que tenho um ApacheDS contendo todos os usuários e suas participações em grupo. As associações de grupo são armazenadas como atributo de membro para cada grupo e eu fiz uma modificação de esquema, portanto, também tenho um atributo memberOf em cada usuário, tornando trivial verificar a associação ao grupo ao fazer a autorização. Eu preciso dar aos usuários acesso aos repositórios do Subversion com base em seus membros de grupo e ter isso instalado e funcionando agora.

No entanto, meu cliente acabou de me informar que esqueceu de mencionar um detalhe "leve" ao especificar os requisitos. Eles aparentemente também têm alguns repositórios nos quais eles precisam ter exigências mais rígidas em certas subpastas. Então, para chegar a uma solução simples, eu pensei que poderia simplesmente combinar minhas diretivas de requerimento LDAP com uma diretiva AuthzSVNAccessFile.

Aqui está minha configuração:

        <Location /TestClosedProject>
            SVNPath /repos/TestClosedProject
            SVNListParentPath on

            # Include shared LDAP settings, binddn, passwords, ldapurl etc.
            Include /svn/conf/ldapCommonSettings

            # LDAP Authentication & Authorization is final; do not check other databases
            AuthzLDAPAuthoritative on

            AuthName "TestClosedProject"

            # Admin group has full access
            Require ldap-attribute memberOf=cn=TestProject-admins,ou=groups,dc=somedomain,dc=somecountry

            # Members group has read-only access
            <Limit GET PROPFIND OPTIONS REPORT>
                    Require ldap-attribute memberOf=cn=TestProject-members,ou=groups,dc=somedomain,dc=somecountry
            </Limit>
    </Location>

Isso permite que qualquer um dos membros do TestProject possa ler código em / TestProject e Test-admins tenha acesso total.

No entanto, quando insiro AuthzSVNAccessFile /svn/conf/TestClosedProject.svnAuth na configuração acima, minhas diretivas require-attribute ldap podem ser substituídas no arquivo svnAuth, especificando um usuário que existe no LDAP, mas que não é membro nem dos -admins nem do - grupo de membros. Conteúdo de /svn/conf/TestClosedProject.svnAuth:

[groups]
supporters = jrf,agata
admins = fj,jrf
members = fj,jrf

[/]
* =
@members = r
@admins = rw

[TestClosedProject:/support]
@supporters = rw
@members = r

O cenário problemático é que

  • o LDAP é atualizado com muita frequência / automaticamente
  • enquanto os arquivos svnAuth são mantidos manualmente
    • por exemplo, se um funcionário é demitido / encerra, ele será removido do grupo TestProject-members / TestProject-admins automaticamente - mas devido a alguns outros sistemas internos ele continuará a ser um usuário no LDAP, mas sem nenhuma associação ao "grupo de projetos". Isso funcionará bem, desde que não exista um arquivo svnAuth que lhe dê acesso às pastas do projeto.
    • Como os arquivos svnAuth são mantidos manualmente, na maioria das vezes eles não serão atualizados tão regularmente quanto os membros do grupo LDAP - e, portanto, o funcionário demitido ainda será mencionado no arquivo svnAuth e, portanto, terá acesso ao repositório, embora ele não é mais membro de nenhum dos grupos requeridos.

Existe alguma maneira de configurá-lo para que somente os usuários nos grupos LDAP de membros ou administradores possam receber acesso usando o arquivo svnAuth? Basicamente eu só quero negar o acesso a qualquer um que não esteja em nenhum desses grupos antes de delegar ao arquivo svnAuth - isso é possível - se sim, como especifico isso?

    
por user81347 13.05.2011 / 13:03

2 respostas

1

Veja como eu gerencio o acesso ao repositório:

  1. Todo repositório tem um diretório "admin", que contém o arquivo authz
  2. Eu configurei o arquivo authz para limitar o acesso ao diretório "admin" aos "proprietários" do repositório.
  3. Eu tenho uma verificação de tarefa cron para alterações no diretório "admin" e copio o arquivo authz para o repositório.

Eu não faço nada na configuração do Apache além de "require valid-user" (dessa forma, o Apache só precisa ser reiniciado quando novos repositórios forem adicionados).

Desta forma eu descarrego toda a manutenção das permissões do repositório para os proprietários do repositório. Isso pode não resolver diretamente o seu problema, pois ele não incorpora nenhum grupo LDAP, mas essa solução funcionou para mim por vários anos com centenas de repositórios.

    
por 27.06.2012 / 18:10
1

Não tenho certeza se isso é possível com código-fonte aberto puro, mas eu conheço o produto comercial da WANdisco, o Subversion Access Control pode lidar com isso. Em vez de um arquivo authz, o produto tem sua própria lista de grupos e regras que se aplicam aos usuários. A associação do grupo vem da pesquisa do servidor de diretório ativo, portanto, isso deve satisfazer os requisitos.

link

    
por 28.06.2012 / 01:52