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.
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 [...]
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.
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
.
Î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
).
Realizați următoarele căutări în baza de date LDAP de pe swarm.cs.pub.ro
:
Popescu
.@cti.pub.ro
.escu
.Vlad
sau Andrei
.Vlad
sau Andrei
.
Este recomandat să puneți expresiile de filtrare între apostroafe sau ghilimele ca să preveniți interpretarea caracterelor speciale de shell.