Listando membros do grupo usando ldapsearch

12

Nosso diretório LDAP corporativo está alojado em uma configuração de diretório aberto do Snow Leopard Server. Estou tentando usar a ldapsearchferramenta para exportar um arquivo .ldif para importar para outro servidor LDAP externo para autenticação externa; basicamente tentando usar as mesmas credenciais interna e externamente.

Estou ldapsearchtrabalhando e fornecendo o conteúdo e os atributos de tudo na UO "Usuários" e até 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 fornece uma lista de usuários e propriedades que 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" de OD em vez de um "contêiner", os resultados são algo como isto:

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 principal filtrada com base nas associações de grupo, mas parece que a associação é definida pelo lado do Grupo, e não pelo lado da conta do usuário. Deve haver uma maneira de filtrar isso e exportar apenas o que eu preciso, certo?

colemanm
fonte

Respostas:

4

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

A primeira coisa que eu tentaria é uma pesquisa nos usuários, puxando todos os seus atributos, em vez de restringi-los da maneira que o seu exemplo faz.

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

Muitas vezes, há um atributo "memberOf" no usuário que lista o nome do grupo ou o DN do grupo para os grupos nos quais um usuário está, mantido sincronizado com as informações do grupo. Se estiver lá, é a maneira mais fácil de fazer o que você deseja.

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

freiheit
fonte
Este é um encadeamento antigo, mas deve-se mencionar que no OpenLDAP (a base do Open Directory) memberOfé um atributo operacional e precisa ser solicitado explicitamente. Um mero ldapsearchcomo sugerido aqui não retornará memberOf, mesmo que exista. Também deve ser mencionado que a memberOfsobreposição geralmente não é ativada por padrão, embora eu não saiba como isso é tratado no OS X e no Open Directory.
daff
@daff Eu acredito que um + deve ter todos os atributos operacionais ...
Freiheit
Ah, de fato. Sua atualização ldapsearchfunciona conforme anunciado.
daff
0

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

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

Nesse caso, espero que você precise 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 servidor OpenLDAP e consultá-lo com base na associação ao grupo, e não em qual container o objeto de usuário existe?

lukecyca
fonte
0
ldapsearch -x \
-b "cn=<your group name>,ou=group,dc=<your org>,dc=com" \
-H ldaps://<ldap server>:<port>

Isso funciona muito bem.

Murali Mopuru
fonte