Elenco dei membri del gruppo utilizzando ldapsearch


12

La nostra directory LDAP aziendale è ospitata su un'impostazione Open Directory di Snow Leopard Server. Sto cercando di utilizzare lo ldapsearchstrumento per esportare un file .ldif da importare in un altro server LDAP esterno con cui eseguire l'autenticazione esternamente; fondamentalmente cercando di essere in grado di utilizzare le stesse credenziali internamente ed esternamente.

Ho ldapsearchlavorato e mi hanno dato i contenuti e gli attributi di tutto nell'unità organizzativa "Utenti", e ho anche filtrato solo gli attributi di cui ho bisogno:

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

Questo mi dà un elenco di utenti e proprietà che posso importare sul mio server OpenLDAP remoto.

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

Tuttavia, quando provo la stessa query su un "gruppo" OD anziché su un "contenitore", i risultati sono qualcosa del genere:

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

Quello che voglio davvero è un elenco di utenti dell'esempio principale filtrato in base alle loro appartenenze al gruppo, ma sembra che l'appartenenza sia impostata dal lato Gruppo, piuttosto che dal lato account utente. Deve esserci un modo per filtrare questo ed esportare solo ciò di cui ho bisogno, giusto?

Risposte:


4

Lavoro con LDAP, ma non con quel marchio specifico di server.

La prima cosa che proverei è una ricerca sugli utenti che estrae tutti i loro attributi invece di limitarlo come fa il tuo esempio.

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

Spesso c'è un attributo "memberOf" sull'utente che elenca il nome del gruppo o il DN del gruppo per i gruppi in cui si trova un utente, mantenuti sincronizzati con le informazioni nel gruppo. Se è lì, questo è il modo più semplice per fare quello che vuoi.

Il *catturerà tutti gli attributi utente (comportamento predefinito) e la +catturerà tutti gli attributi operativi (attributi speciali).


Questo è un vecchio thread, ma va detto che in OpenLDAP (la base di Open Directory) memberOfè un attributo operativo e deve essere richiesto esplicitamente. Un mero ldapsearchsuggerito qui non tornerà memberOf, anche se esiste. Va anche detto che l' memberOfoverlay di solito non è abilitato per impostazione predefinita, anche se non so come questo sia gestito in OS X e Open Directory.
figlia

@daff Credo che un + dovrebbe ottenere tutti gli attributi operativi ...
freiheit

Ah davvero. Il tuo aggiornamento ldapsearchfunziona come pubblicizzato.
daff

0

Stai mirando a rappresentare gruppi avendo oggetti utente posizionati in contenitori diversi? Piace:

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

In tal caso, mi aspetto che dovrai scrivere una sceneggiatura per massaggiare il LDIF. Prova gli eccellenti moduli Python-LDAP .

Mi chiedo perché tu voglia farlo. Rende disordinato avere utenti che appartengono a più gruppi ed è contrario alle convenzioni di Open Directory. Non puoi semplicemente copiare tutti gli oggetti utente e di gruppo sul tuo server OpenLDAP e interrogarlo in base all'appartenenza al gruppo anziché al contenitore in cui si trova l'oggetto utente?


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

Funziona molto bene

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.