Atualmente, estou trabalhando na integração da autenticação LDAP em um sistema e gostaria de restringir o acesso com base no grupo LDAP. A única maneira de fazer isso é através de um filtro de pesquisa e, portanto, acredito que minha única opção seja o uso do atributo "memberOf" no meu filtro de pesquisa. Entendo que o atributo "memberOf" é um atributo operacional que pode ser criado pelo servidor para mim sempre que um novo atributo "membro" é criado para qualquer entrada "groupOfNames" no servidor. Meu principal objetivo é poder adicionar um atributo "member" a uma entrada "groupOfNames" existente e fazer com que um atributo "memberOf" correspondente seja adicionado ao DN que forneço.
O que eu consegui alcançar até agora:
Ainda sou bastante novo na administração do LDAP, mas com base no que encontrei no guia do administrador do openldap, parece que a Manutenção de Associação Reversa ao Grupo, conhecida como "memberof overlay", alcançaria exatamente o efeito que estou procurando.
Meu servidor está atualmente executando uma instalação de pacote (slapd no ubuntu) do openldap 2.4.15 que usa a configuração de tempo de execução no estilo "cn = config". A maioria dos exemplos que encontrei ainda faz referência ao método "slapd.conf" antigo de configuração estática e tentei o máximo possível para adaptar as configurações ao novo modelo baseado em diretório.
Eu adicionei as seguintes entradas para ativar o módulo membro de sobreposição:
Ative o módulo com olcModuleLoad
cn=config/cn\=module\{0\}.ldif
dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z
Ativou a sobreposição para o banco de dados e permitiu que ele usasse suas configurações padrão (groupOfNames, member, memberOf, etc)
cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof
dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z
Meu resultado atual:
Usando a configuração acima, eu posso adicionar um novo "groupOfNames" com qualquer número de entradas "member" e ter todos os DNs envolvidos atualizados com um atributo "memberOf". Isso faz parte do comportamento que eu esperaria. Embora eu acredite que o seguinte deveria ter sido realizado com o membro da sobreposição, ainda não sei como fazer o seguinte e gostaria de receber qualquer conselho:
- Adicione um atributo "member" a um "groupOfNames" EXISTENTE e faça com que um atributo "memberOf" correspondente seja criado automaticamente.
- Remova um atributo "member" e faça com que o atributo "memberOf" correspondente "seja removido automaticamente.
slapadd
(no banco de dados parado) o caminho certo para fazer isso?Escrevi sobre isso recentemente no meu blog, www.jordaneunson.com. Copiei e colei as partes relevantes.
O que eu tive que fazer foi parar o serviço "slapd" no meu servidor LDAP e editar meu arquivo slapd.conf e adicionar as duas linhas a seguir.
Eu já tinha um groupOfNames chamado vpn, então tive que criar um arquivo LDIF com o seguinte conteúdo:
E adicionei isso ao meu banco de dados LDAP
Depois disso, iniciei o servidor ldap em depuração para verificar se havia erros
e verifiquei se minha associação ao grupo "vpn" estava listada na minha entrada de usuário.
e bam! sucesso!
Por isso, ativei o serviço slapd e tive muito sucesso desde então. Para uma nova ferramenta de gerenciamento da GUI, estou usando o phpLDAPAdmin e não tenho problemas com o atributo memberOf sendo atribuído e não atribuído aos meus usuários.
Uma última coisa a observar é que o atributo "memberOf" não faz parte do esquema básico do LDAP v3 e, portanto, fazer uma pesquisa de ldapsearch não revelará esse atributo, a menos que seja especificamente consultado. É por isso que no meu exemplo acima ele é declarado no final dos parâmetros ldapsearch.
Espero que isto ajude.
Edit: Acabei de testar o seu problema com o Apache Directory Studio: desde que eu insira o valor do membro do atributo como um todo, como mencionado acima, ele funciona bem. No entanto, o atributo memberOf não aparece na entrada do usuário. Isso ocorre porque o atributo memberOf não faz parte do esquema LDAPv3. Para verificar se existe, use a ferramenta de linha de comando ldapsearch:
fonte