web-dev-qa-db-fra.com

Liste des membres du groupe à l'aide de ldapsearch

Notre annuaire LDAP d'entreprise est hébergé sur une configuration Open Directory de Snow Leopard Server. J'essaie d'utiliser l'outil ldapsearch pour exporter un fichier .ldif à importer dans n autre serveur LDAP externe pour s'authentifier en externe; essaie essentiellement de pouvoir utiliser les mêmes informations d'identification en interne et en externe.

J'ai ldapsearch qui fonctionne et me donne le contenu et les attributs de tout dans l'unité d'organisation "Utilisateurs", et même en filtrant uniquement les attributs dont j'ai besoin:

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

Cela me donne une liste d'utilisateurs et de propriétés que je peux importer sur mon serveur OpenLDAP distant.

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

Cependant, lorsque j'essaie la même requête sur un "groupe" OD au lieu d'un "conteneur", les résultats sont quelque chose comme ceci:

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

Ce que je veux vraiment, c'est une liste d'utilisateurs de l'exemple supérieur filtrée en fonction de leur appartenance à un groupe, mais il semble que l'appartenance soit définie du côté Groupe, plutôt que du côté compte d'utilisateur. Il doit y avoir un moyen de filtrer cela et d'exporter uniquement ce dont j'ai besoin, non?

12
colemanm

Je travaille avec LDAP, mais pas avec cette marque spécifique de serveur.

La première chose que j'essaierais est une recherche sur les utilisateurs tirant tous leurs attributs au lieu de les restreindre comme le fait votre exemple.

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

Souvent, il existe un attribut "memberOf" sur l'utilisateur qui répertorie le nom du groupe ou le DN du groupe pour les groupes dans lesquels se trouve un utilisateur, synchronisé avec les informations du groupe. Si c'est le cas, c'est la façon la plus simple de faire ce que vous voulez.

Le * récupérera tous les attributs utilisateur (comportement par défaut) et + récupérera tous les attributs opérationnels (attributs spéciaux).

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

Cela fonctionne très bien.

0
Murali Mopuru

Visez-vous à représenter des groupes en ayant des objets utilisateur situés dans différents conteneurs? Comme:

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 c'est le cas, je pense que vous devrez écrire un script pour masser le LDIF. Essayez les excellents modules Python-LDAP .

Je me demande cependant pourquoi vous voulez faire cela. Cela rend désordonné d'avoir des utilisateurs qui appartiennent à plusieurs groupes et est contraire aux conventions d'Open Directory. Ne pouvez-vous pas simplement copier tous les objets utilisateur et groupe sur votre serveur OpenLDAP et l'interroger en fonction de l'appartenance au groupe plutôt que dans quel conteneur l'objet utilisateur existe?

0
lukecyca