Como configuro a Manutenção de Associação a Grupos Reversos em um servidor openldap? (membro de)

18

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 é por meio de um filtro de pesquisa e, portanto, acredito que minha única opção seja o uso do atributo "memberOf" em meu filtro de pesquisa. No meu entender, o atributo "memberOf" é um atributo operacional que pode ser criado pelo servidor para mim sempre que um novo atributo "member" for criado para qualquer entrada "groupOfNames" no servidor. Meu principal objetivo é poder adicionar um atributo "membro" a uma entrada "groupOfNames" existente e adicionar um atributo "memberOf" correspondente ao DN fornecido.

O que consegui até agora:

Ainda sou muito novo na administração do LDAP, mas com base no que encontrei no guia do administrador do openldap, parece A manutenção reversa da associação de membros também conhecida como "memberof overlay" atingiria 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 do estilo "cn = config". A maioria dos exemplos que eu encontrei ainda referenciam o método "slapd.conf" mais antigo de configuração estática e eu tentei o meu melhor para adaptar as configurações ao novo modelo baseado em diretório.

Eu adicionei as seguintes entradas para ativar o módulo memberof overlay:

Ativar 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

Habilitou a sobreposição do 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, posso adicionar um NOVO "groupOfNames" com qualquer número de entradas "membro" 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 eu ficaria feliz em receber qualquer conselho:

  1. Adicione um atributo "member" a um "groupOfNames" EXISTENTE e tenha um atributo "memberOf" correspondente criado automaticamente.
  2. Remova um atributo "membro" e solicite que o atributo "memberOf" correspondente "seja removido automaticamente.
por emills 10.10.2009 / 10:02

2 respostas

10

Eu tenho lutado com a mesma coisa, a documentação do openldap é minimalista e nem um pouco útil. Quando eles foram para um banco de dados de configuração (não é uma má idéia em princípio) todas as opções foram alteradas, então quando as pessoas estão dando um exemplo de /etc/ldap/slapd.conf é inútil com uma configuração moderna do slapd (como o Ubuntu). / p>

Eu finalmente consegui isso funcionar. Aqui está o resumo ... primeiro arquivo LDIF:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

Segundo arquivo LDIF:

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Adicione-os ao banco de dados de configuração usando o ldapadd (o mesmo que o material de configuração normal).

Ele não atualiza automaticamente os dados existentes no banco de dados, então eu precisava usar o slapcat para copiar tudo em um arquivo temporário e visitar cada grupo, excluir o grupo e adicionar o mesmo grupo de volta novamente (força os atributos memberOf a serem atualizados corretamente). Se você estiver iniciando com um banco de dados vazio, ele atualizará corretamente os atributos à medida que os objetos forem adicionados.

Além disso, observe que "olcDatabase = {1} hdb" é muito comum, mas não é garantido que corresponda à sua configuração. Certifique-se de verificar isso.

    
por 01.11.2011 / 02:58
11

Eu escrevi sobre isso recentemente no meu blog, www.jordaneunson.com Eu copiei e colei as partes relevantes em

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 seguintes.

moduleload memberof.la
overlay memberof

Eu já tinha um groupOfNames chamado vpn, então tive que criar um arquivo LDIF com o seguinte conteúdo:

dn: cn=vpn,ou=Groups,dc=shop,dc=lan
objectclass: groupofnames
cn: vpn
description: Users allowed to connect on VPN
member: uid=jordan,ou=People,dc=shop,dc=lan

E adicionei isso ao meu banco de dados do ldap

slapadd -f file.ldif

Depois disso, ativei o servidor ldap na depuração para verificar erros

slapd -d 99 -f /etc/ldap/slapd.conf 

e verificado para ter certeza de que minha participação no grupo de "vpn" estava listada na minha entrada de usuário.

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

e bam! sucesso!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan

Então eu abri o serviço slapd de volta e tive muito sucesso desde então. Para uma nova ferramenta de gerenciamento de 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 notar é que o atributo "memberOf" não faz parte do esquema básico do LDAP v3 e, portanto, fazer um ldapsearch não revelará esse atributo, a menos que seja especificamente consultado. É por isso que no meu exemplo acima é declarado no final dos parâmetros ldapsearch.

Espero que isso ajude.

Edit: Acabei de testar seu problema com o Apache Directory Studio: desde que eu digite o valor do membro do atributo como um todo, como mencionado acima, ele funciona A-OK. No entanto, o atributo memberOf não é exibido na entrada do usuário. Isso ocorre porque o atributo memberOf não faz parte do esquema LDAPv3. Para verificar se ele está lá, use a ferramenta de linha de comando ldapsearch:

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 
    
por 13.10.2009 / 20:46

Tags