Listando membros do grupo usando ldapsearch

7

Nosso diretório LDAP corporativo está alojado em uma instalação do Snow Leopard Server Open Directory. Eu estou tentando usar a ferramenta ldapsearch para exportar um arquivo .ldif para importar para outro servidor LDAP externo para autenticar com externamente; basicamente tentando usar as mesmas credenciais interna e externamente.

Eu tenho ldapsearch funcionando e me dando o conteúdo e os atributos de tudo na UO "Usuários" e até mesmo filtrando apenas os atributos de que preciso:

ldapsearch -xLLL -H ldap://server.domain.net / 
 -b "cn=users,dc=server,dc=domain,dc=net" objectClass / 
 uid uidNumber cn userPassword > directorycontents.ldif

Isso me dá uma lista de usuários e propriedades que eu posso importar para o meu servidor OpenLDAP remoto.

dn: uid=username1,cn=users,dc=server,dc=domain,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: organizationalPerson
uidNumber: 1000
uid: username1
userPassword:: (hashedpassword)
cn: username1

No entanto, quando tento a mesma consulta em um "grupo" do OD em vez de um "contêiner", os resultados são algo assim:

dn: cn=groupname,cn=groups,dc=server,dc=domain,dc=net
objectClass: posixGroup
objectClass: apple-group
objectClass: extensibleObject
objectClass: top
gidNumber: 1032
cn: groupname
memberUid: username1
memberUid: username2
memberUid: username3

O que eu realmente quero é uma lista de usuários do exemplo de topo filtrado com base em suas participações de grupo, mas parece que a associação é definida do lado do grupo, em vez do lado da conta de usuário. Deve haver uma maneira de filtrar isso e exportar apenas o que eu preciso, certo?

    
por colemanm 13.04.2010 / 19:15

2 respostas

3

Eu trabalho com o LDAP, mas não com aquela marca específica de servidor.

A primeira coisa que eu tentarei é uma pesquisa em que os usuários puxem todos os seus atributos, em vez de restringi-lo, como o seu exemplo faz.

ldapsearch -xLLL -H ldap://server.domain.net \
    -b "cn=users,dc=server,dc=domain,dc=net" uid=username1 \* +

Geralmente, há um atributo "memberOf" no usuário que lista o nome do grupo ou o DN do grupo para os grupos em que o usuário está, em sincronia com as informações do grupo. Se estiver lá, essa é a maneira mais fácil de fazer o que você quer.

O * irá pegar todos os atributos do usuário (o comportamento padrão) e o + irá pegar todos os atributos operacionais (atributos especiais).

    
por 13.04.2010 / 19:26
0

Você pretende representar grupos tendo objetos de usuário localizados em contêineres diferentes? Como:

dn: uid=username1,cn=users,cn=accounting,dc=server,dc=domain,dc=net
...
dn: uid=username2,cn=users,cn=engineering,dc=server,dc=domain,dc=net
...

Se assim for, espero que você tenha que escrever um script para massagear o LDIF. Experimente os excelentes módulos Python-LDAP .

Gostaria de perguntar por que você quer fazer isso. Isso torna confuso ter usuários que pertencem a vários grupos e é contrário às convenções do Open Directory. Você não pode simplesmente copiar todos os objetos de usuário e grupo para o seu servidor OpenLDAP, e consultá-lo com base na associação ao grupo, em vez de em qual container o objeto de usuário existe?

    
por 13.04.2010 / 19:28