Listarea membrilor grupului folosind ldapsearch (Administrarea sistemului, Ldap, Server Mac Osx, Opendirectory)

colemanm a intrebat.

Directorul nostru LDAP corporativ este găzduit pe un server Snow Leopard Server Open Directory. Încerc să folosesc ldapsearch pentru a exporta un fișier .ldif pentru a-l importa în un alt server LDAP extern cu care să mă autentific în exterior; practic, încerc să pot utiliza aceleași credențiale atât în interior, cât și în exterior.

Am ldapsearch funcționează și îmi oferă conținutul și atributele a tot ceea ce se află în OU „Users” și chiar filtrează doar atributele de care am nevoie:

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

Asta îmi oferă o listă de utilizatori și proprietăți pe care le pot importa pe serverul OpenLDAP de la distanță.

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

Cu toate acestea, atunci când încerc aceeași interogare pe un „grup” OD în loc de un „container”, rezultatele sunt ceva de genul acesta:

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

Ceea ce vreau cu adevărat este o listă de utilizatori din exemplul de sus, filtrată pe baza apartenenței lor la grup, dar se pare că apartenența este setată din partea grupului, și nu din partea contului de utilizator. Trebuie să existe o modalitate de a filtra acest lucru și de a exporta doar ceea ce am nevoie, nu-i așa?

3 răspunsuri
freiheit

Lucrez cu LDAP, dar nu cu această marcă specifică de server.

Primul lucru pe care l-aș încerca este o căutare pe utilizatori care să scoată toate atributele lor în loc să le restricționeze în modul în care o face exemplul dvs.

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

Adesea, există un atribut „memberOf” pe utilizator care enumeră numele grupului sau DN-ul grupului pentru grupurile în care se află un utilizator, păstrat în sincronizare cu informațiile din grup. Dacă există, aceasta este cea mai simplă modalitate de a face ceea ce doriți.

Adresa * va prelua toate atributele utilizatorului (comportamentul implicit), iar opțiunea + va prelua toate atributele operaționale (atribute speciale).

Comentarii

  • Acesta este un fir de discuție vechi, dar trebuie menționat că în OpenLDAP (baza Open Directory) memberOf este un atribut operațional și trebuie să fie solicitat în mod explicit. Un simplu ldapsearch așa cum se sugerează aici nu va returna memberOf, chiar dacă există. De asemenea, ar trebui menționat faptul că memberOf nu este de obicei activat în mod implicit, deși nu știu cum este gestionat acest lucru în OS X și Open Directory. –  > Por daff.
  • @daff Cred că un + ar trebui să obțină toate atributele operaționale… –  > Por freiheit.
  • Ah, într-adevăr. Actualizarea dvs. ldapsearch funcționează așa cum a fost anunțat. –  > Por daff.
Murali Mopuru
ldapsearch -x 
-b "cn=<your group name>,ou=group,dc=<your org>,dc=com" 
-H ldaps://<ldap server>:<port>

Acest lucru funcționează foarte bine.

lukecyca

Intenționați să reprezentați grupuri prin faptul că obiectele utilizatorilor se află în containere diferite? Cum ar fi:

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

Dacă da, mă aștept să trebuiască să scrieți un script pentru a masa LDIF-ul. Încercați excelentul Python-LDAP module.

Totuși, m-aș întreba de ce vrei să faci asta. Este complicat să ai utilizatori care aparțin mai multor grupuri și este contrar convențiilor Open Directory. Nu puteți să copiați toate obiectele de utilizator și de grup pe serverul OpenLDAP și să le interogați pe baza apartenenței la un grup, mai degrabă decât pe baza containerului în care există obiectul de utilizator?