Liste des membres du groupe à l'aide de ldapsearch

12

Notre annuaire LDAP d'entreprise est hébergé sur une configuration Open Directory de Snow Leopard Server. J'essaie d'utiliser l' ldapsearchoutil pour exporter un fichier .ldif à importer dans un 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.

Je dois ldapsearchtravailler et me donner le contenu et les attributs de tout dans l'unité d'organisation "Utilisateurs", et même filtrer vers le bas 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?

colemanm
la source

Réponses:

4

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 nom distinctif du groupe pour les groupes dans lesquels un utilisateur se trouve, 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 (le comportement par défaut) et le +récupérera tous les attributs opérationnels (attributs spéciaux).

freiheit
la source
Il s'agit d'un ancien thread mais il convient de mentionner que dans OpenLDAP (la base d'Open Directory) memberOfest un attribut opérationnel et doit être demandé explicitement. Un simple ldapsearchcomme suggéré ici ne reviendra pas memberOf, même s'il existe. Il convient également de mentionner que la memberOfsuperposition n'est généralement pas activée par défaut, bien que je ne sache pas comment cela est géré dans OS X et Open Directory.
daff
@daff Je crois qu'un + devrait obtenir tous les attributs opérationnels ...
freiheit
Ah, en effet. Vos ldapsearchtravaux mis à jour comme annoncé.
2011
0

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 oui, 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?

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

Cela fonctionne très bien.

Murali Mopuru
la source