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?