Auflisten von Gruppenmitgliedern mit ldapsearch


12

Unser LDAP-Unternehmensverzeichnis befindet sich in einem Open Directory-Setup von Snow Leopard Server. Ich versuche , das verwenden ldapsearchTool eine .ldif - Datei Import in den Export ein anderes externen LDAP-Server zu extern zu authentifizieren. Grundsätzlich wird versucht, dieselben Anmeldeinformationen intern und extern verwenden zu können.

Ich muss ldapsearcharbeiten und mir den Inhalt und die Attribute von allem in der Organisationseinheit "Benutzer" geben und sogar nur auf die Attribute filtern, die ich brauche:

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

Dadurch erhalte ich eine Liste der Benutzer und Eigenschaften, die ich auf meinen Remote-OpenLDAP-Server importieren kann.

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

Wenn ich jedoch dieselbe Abfrage für eine OD- "Gruppe" anstelle eines "Containers" versuche, sind die Ergebnisse ungefähr so:

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

Was ich wirklich möchte, ist eine Liste der Benutzer aus dem oberen Beispiel, die basierend auf ihren Gruppenmitgliedschaften gefiltert wurden, aber es sieht so aus, als ob die Mitgliedschaft eher auf der Gruppenseite als auf der Benutzerkontoseite festgelegt wird. Es muss eine Möglichkeit geben, dies herauszufiltern und nur das zu exportieren, was ich brauche, oder?

Antworten:


4

Ich arbeite mit LDAP, aber nicht mit dieser bestimmten Servermarke.

Als erstes würde ich versuchen, nach Benutzern zu suchen, die alle ihre Attribute abrufen, anstatt sie wie in Ihrem Beispiel einzuschränken.

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

Häufig gibt es ein "memberOf" -Attribut für den Benutzer, das den Gruppennamen oder den Gruppen-DN für Gruppen auflistet, in denen sich ein Benutzer befindet und die mit den Informationen in der Gruppe synchronisiert sind. Wenn das da ist, ist das der einfachste Weg, um das zu tun, was Sie wollen.

Das *erfasst alle Benutzerattribute (das Standardverhalten) und das +erfasst alle Betriebsattribute (spezielle Attribute).


Dies ist ein alter Thread, aber es sollte erwähnt werden, dass OpenLDAP (die Basis von Open Directory) memberOfein Betriebsattribut ist und explizit angefordert werden muss. Ein bloßes ldapsearchwie hier vorgeschlagen wird nicht zurückkehren memberOf, selbst wenn es existiert. Es sollte auch erwähnt werden, dass das memberOfOverlay normalerweise nicht standardmäßig aktiviert ist, obwohl ich nicht weiß, wie dies in OS X und Open Directory behandelt wird.
daff

@daff Ich glaube, ein + sollte alle Betriebsattribute erhalten ...
freiheit

Ah, in der Tat. Ihre aktualisierten ldapsearchArbeiten funktionieren wie angekündigt.
Daff

0

Möchten Sie Gruppen darstellen, indem sich Benutzerobjekte in verschiedenen Containern befinden? Mögen:

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

Wenn ja, müssen Sie wahrscheinlich ein Skript schreiben, um das LDIF zu massieren. Probieren Sie die hervorragenden Python-LDAP- Module aus.

Ich würde fragen, warum Sie das tun wollen. Es macht es chaotisch, Benutzer zu haben, die mehreren Gruppen angehören, und widerspricht den Konventionen von Open Directory. Können Sie nicht einfach alle Benutzer- und Gruppenobjekte auf Ihren OpenLDAP-Server kopieren und sie basierend auf der Gruppenmitgliedschaft abfragen, anstatt in welchem ​​Container das Benutzerobjekt vorhanden ist?


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

Das funktioniert sehr gut.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.