Lista członków grupy za pomocą ldapsearch


12

Nasz korporacyjny katalog LDAP mieści się w konfiguracji Open Directory serwera Snow Leopard. Próbuję użyć ldapsearchnarzędzia do wyeksportowania pliku .ldif w celu zaimportowania na inny zewnętrzny serwer LDAP w celu uwierzytelnienia na zewnątrz; w zasadzie stara się być w stanie korzystać z tych samych poświadczeń wewnętrznie i zewnętrznie.

Mam ldapsearchpracę i daje mi zawartość i atrybuty wszystko w „Użytkownicy” OU, a nawet aż do filtrowania tylko atrybuty muszę:

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

To daje mi listę użytkowników i właściwości, które mogę zaimportować na mój zdalny serwer 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

Jednak gdy próbuję tego samego zapytania dla „grupy” OD zamiast „kontenera”, wyniki są mniej więcej takie:

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

To, czego naprawdę chcę, to lista użytkowników z najlepszego przykładu filtrowana na podstawie członkostwa w ich grupach, ale wygląda na to, że członkostwo jest ustawiane po stronie Grupy, a nie po stronie konta użytkownika. Musi istnieć sposób na filtrowanie tego i eksportowanie tylko tego, czego potrzebuję, prawda?

Odpowiedzi:


4

Pracuję z LDAP, ale nie z tą konkretną marką serwera.

Najpierw spróbuję wyszukać użytkowników, którzy wyciągną wszystkie swoje atrybuty zamiast ograniczać je tak, jak robi to twój przykład.

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

Często użytkownik ma atrybut „memberOf”, który wyświetla nazwę grupy lub nazwę wyróżniającą grupy dla grup, w których użytkownik jest, zsynchronizowany z informacjami w grupie. Jeśli tam jest, jest to najłatwiejszy sposób na robienie tego, co chcesz.

*Przechwyci wszystkie atrybuty użytkownika (domyślne zachowanie) i +przechwyci wszystkie atrybuty operacyjne (specjalne atrybuty).


Jest to stary wątek, ale należy wspomnieć, że w OpenLDAP (podstawa Open Directory) memberOfjest atrybutem operacyjnym i należy go wyraźnie zażądać. Samo ldapsearchsugerowane tutaj nie wróci memberOf, nawet jeśli istnieje. Należy również wspomnieć, że memberOfnakładka zwykle nie jest domyślnie włączona, chociaż nie wiem, jak to jest obsługiwane w OS X i Open Directory.
daff

@daff Uważam, że + powinien otrzymać wszystkie atrybuty operacyjne ...
freiheit,

Ach, rzeczywiście. Twoja zaktualizowana wersja ldapsearchdziała zgodnie z reklamą.
daff

0

Czy chcesz reprezentować grupy, umieszczając obiekty użytkownika w różnych kontenerach? Lubić:

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

Jeśli tak, spodziewam się, że będziesz musiał napisać skrypt masujący LDIF. Wypróbuj doskonałe moduły Python-LDAP .

Chciałbym jednak zapytać, dlaczego chcesz to zrobić. Utrudnia to posiadanie użytkowników należących do wielu grup i jest sprzeczne z konwencjami Open Directory. Czy nie możesz po prostu skopiować wszystkich obiektów użytkownika i grupy na serwer OpenLDAP i zapytać go na podstawie członkostwa w grupie, a nie w jakim kontenerze istnieje obiekt użytkownika?


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

To działa bardzo dobrze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.