03. [15p] Căutare în baza de date LDAP

Output-ul comenzii de interogare LDAP a serverului swarm.cs.pub.ro este consistent. De multe ori dorim să căutăm în baza de date LDAP și să extragem doar anumite intrări similar comenzii select din SQL.

Informații din subarbori

Un prim mod de căutare este selectarea doar a intrării căutate (fără subarbore) sau doar a primului nivel din arbore, ca mai jos:

root@ldap-client:~# ldapsearch -x -LLL -s base -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro"
dn: dc=swarm,dc=cs,dc=pub,dc=ro
objectClass: top
objectClass: dcObject
objectClass: organization
o: University Politehnica of Bucharest
dc: swarm
 
 
root@ldap-client:~# ldapsearch -x -LLL -s one -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro"
dn: cn=admin,dc=swarm,dc=cs,dc=pub,dc=ro
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
 
dn: ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
ou: People
objectClass: organizationalUnit
 
dn: ou=Group,dc=swarm,dc=cs,dc=pub,dc=ro
ou: Group
objectClass: organizationalUnit

Prima comandă extrage doar intrarea de bază, identificată de domain name-ul (DN) dc=swarm,dc=cs,dc=pub,dc=ro. A doua extrage primul nivel din arborele/directorul LDAP, adică intrarile indentificate de DN-urile cn=admin,dc=swarm,dc=cs,dc=pub,dc=ro, ou=People,dc=swarm,dc=cs,dc=pub,dc=ro, ou=Group,dc=swarm,dc=cs,dc=pub,dc=ro.

Un mod uzual de căutare este doar într-un subarbore al directorului LDAP. Astfel, dacă dorim să extragem doar intrările din grupuri, vom folosi comanda:

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "ou=Group,dc=swarm,dc=cs,dc=pub,dc=ro"
dn: ou=Group,dc=swarm,dc=cs,dc=pub,dc=ro
ou: Group
objectClass: organizationalUnit
 
dn: cn=rosedu,ou=Group,dc=swarm,dc=cs,dc=pub,dc=ro
cn: rosedu
[...]

Extragere de atribute

Așa cum comanda select din SQL extrage doar anumite coloane dintr-un tabel, putem selecta, folosind comanda ldapsearch anumite atribute ale intrărilor în baza de date LDAP.

Spre exemplu, dacă vrem să afișăm doar uid-ul utilizatorilor din baza de date LDAP, vom folosi comanda

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro" uid
[...]
dn: uid=ddvlad,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: ddvlad
 
dn: uid=roxanam,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: roxanam
 
dn: uid=razvan,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: razvan

Folosirea atributului uid la sfârșitul comenzii de mai sus înseamnă selectarea doar a acelui câmp.

Câmpul dn va fi întotdeauna selectat pentru că indică în mod unic intrarea în LDAP.

Dacă dorim să selectăm uid-ul, adresa de e-mail și numele vom folosi comanda

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro" uid mail cn
[...]
dn: uid=ddvlad,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: ddvlad
cn: Vlad Dogaru
mail: XXXXXXX
 
dn: uid=roxanam,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: roxanam
cn: Roxana Murarus
mail: XXXXXXX
 
dn: uid=razvan,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: razvan
cn: Razvan Deaconescu
mail: XXXXXXX

Altfel spus, pentru a selecta mai multe atribute le transmitem ca argument comenzii ldapsearch.

Filtrare după atribute

În SQL, clauza where permite selectarea doar anumitor intrări. La fel permite și comanda ldapsearch folosirea de filtre de căutare.

Astfel, pentru a selecta intrările de utilizator al căror prenume este Silviu vom folosi comanda

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro" givenName=Silviu
dn: uid=silviu,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: silviu
cn: Silviu Grijincu
[...]

Dacă vrem să aflăm informații despre contul aferent lui Mihai Carabaș, și nu știm uid-ul său, vom folosi comanda

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro" cn="Mihai Carabas"
dn: uid=mihaic,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: mihaic
sn: Carabas
[...]

Dacă știam uid-ul căutam direct după uid:

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro" uid=mihaic
dn: uid=mihaic,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: mihaic
sn: Carabas
[...]

Filtrele de căutare (search filters) sunt expresii care fac match pe anumite atribute din intrările LDAP și le afișează doar pe acelea. Filtrele pot conține și glob-uri pentru a permite match pe mai multe valori ale atributelor. Astfel, pentru a selecta toate persoanele al căror nume de familie începe cu șirul An folosim expresia:

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro" sn="An*"
dn: uid=aandrei,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
uid: aandrei
cn: Alexandru Andrei
sn: Andrei
[...]

Atributul sn înseamnă numele de familie (surname) iar glob-ul An* însemnă șirurile care încep cu An.

La fel cum comanda select este combinată cu where, vom putea selecta doar anumite atribute ale unor intrări. Dacă dorim să afișăm dar cn-ul și e-mail-ul rezultatelor comenzii de mai sus, vom folosi comanda

root@ldap-client:~# ldapsearch -x -LLL -H ldaps://swarm.cs.pub.ro -b "dc=swarm,dc=cs,dc=pub,dc=ro" sn="An*" cn mail
dn: uid=aandrei,ou=People,dc=swarm,dc=cs,dc=pub,dc=ro
cn: Alexandru Andrei
mail: XXXXXXX
[...]

În cazul acesta, după comanda de căutare am precizat filtrul de căutare (sn=“An*”) și apoi atributele care vor fi selectate (cn mail).

Exerciții de căutare

Realizați următoarele căutări în baza de date LDAP de pe swarm.cs.pub.ro:

  1. Extrageți utilizatorii al căror nume de familie este Popescu.
  2. Extrageți uid-ul și cn-ul utilizatorilor a căror adresă de e-mail conține șirul @cti.pub.ro.
  3. Extrageți utilizatorii al căror nume de familie nu se termină în escu.
  4. Extrageți utilizatorii al căror prenume este Vlad sau Andrei.
  5. Extrageți uid-ul, e-mail-ul și numele de familie al utilizatorilor al căror prenume este Vlad sau Andrei.

Detalii legate de folosirea filtrelor de căutare găsiți la pagina http://www.centos.org/docs/5/html/CDS/ag/8.0/Finding_Directory_Entries-LDAP_Search_Filters.html.

Este recomandat să puneți expresiile de filtrare între apostroafe sau ghilimele ca să preveniți interpretarea caracterelor speciale de shell.

saisp/labs/01/contents/03.txt · Last modified: 2014/02/18 11:43 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0