Listado de miembros del grupo usando ldapsearch

12

Nuestro directorio LDAP corporativo está alojado en una configuración de directorio abierto del servidor Snow Leopard. Estoy tratando de usar la ldapsearchherramienta para exportar un archivo .ldif para importarlo a otro servidor LDAP externo para autenticarlo externamente; básicamente tratando de poder usar las mismas credenciales interna y externamente.

Me puse a ldapsearchtrabajar y me proporcioné el contenido y los atributos de todo en la unidad organizativa "Usuarios", e incluso filté solo los atributos que necesito:

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

Eso me da una lista de usuarios y propiedades que puedo importar a mi servidor remoto OpenLDAP.

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

Sin embargo, cuando intento la misma consulta en un "grupo" OD en lugar de un "contenedor", los resultados son algo como esto:

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

Lo que realmente quiero es una lista de usuarios del ejemplo superior filtrada en función de la membresía de su grupo, pero parece que la membresía se establece desde el lado del Grupo, en lugar del lado de la cuenta de usuario. Debe haber una manera de filtrar esto y solo exportar lo que necesito, ¿verdad?

colemanm
fuente

Respuestas:

4

Trabajo con LDAP, pero no con esa marca específica de servidor.

Lo primero que probaría es una búsqueda en los usuarios que extraen todos sus atributos en lugar de restringirlos como lo hace su ejemplo.

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

A menudo hay un atributo "memberOf" en el usuario que enumera el nombre del grupo o el DN del grupo para los grupos en los que se encuentra un usuario, y se mantiene sincronizado con la información del grupo. Si está ahí, esa es la forma más fácil de hacer lo que quieres.

El *va a agarrar todos los atributos de usuario (comportamiento por defecto) y la +va a agarrar todos los atributos operativos (atributos especiales).

freiheit
fuente
Este es un hilo antiguo pero debe mencionarse que en OpenLDAP (la base de Open Directory) memberOfes un atributo operativo y debe solicitarse explícitamente. Un simple ldapsearchcomo sugerido aquí no volverá memberOf, incluso si existe. También debe mencionarse que la memberOfsuperposición generalmente no está habilitada de manera predeterminada, aunque no sé cómo se maneja esto en OS X y Open Directory.
daff
@daff Creo que a + debe recibir todos los atributos operativos ...
Freiheit
Ah, de hecho. Sus ldapsearchtrabajos actualizados según lo anunciado.
daff
0

¿Pretende representar grupos al tener objetos de usuario ubicados en diferentes contenedores? Me gusta:

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

Si es así, espero que tengas que escribir un guión para masajear el LDIF. Pruebe los excelentes módulos Python-LDAP .

Sin embargo, me preguntaría por qué quieres hacer eso. Es complicado tener usuarios que pertenecen a múltiples grupos, y es contrario a las convenciones de Open Directory. ¿No puede simplemente copiar todos los objetos de usuario y grupo a su servidor OpenLDAP y consultarlo en función de la pertenencia al grupo en lugar de en qué contenedor existe el objeto de usuario?

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

Esto funciona muy bien

Murali Mopuru
fuente