==== Comando ldapsearch ====
Por meio dele, é possível construir buscas na base LDAP.
Opções para o escopo de pesquisa:
* b → Define a partir de qual “galho” a pesquisa será feita;
* s → Define o escopo da pesquisa.
As opções abaixo referem-se aos escopos para a opção "-s":
* base → Busca apenas na base DN;
* one → Busca no mesmo nível do “galho” definido em -b e em mais um subnível;
* Sub → Opção padrão, busca recursivamente a partir do “galho”.
No exemplo abaixo, temos uma pesquisa simples onde todas as informações contidas no galho Usuários será trazida:
# service slapd start
# ldapsearch -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha -b ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br -LLL
dn: ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br
ou: Usuarios
objectClass: organizationalUnit
objectClass: top
dn: cn=Linus Torvalds,ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br
uid: linust
cn: Linus Torvalds
sn: linust
objectClass: inetOrgPerson
objectClass: posixAccount
homeDirectory: /home/linust
loginShell: /bin/bash
uidNumber: 1020
gidNumber: 1020
userPassword:: MTIzbXVkYXI=
* Em geral nas pesquisas utilizamos a opção -LLL que desabilita comentários e informações extras nos resultados de pesquisas.
==== Construindo um filtro de busca ====
Buscando apenas pelo usuário linust:
# ldapsearch -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha -b ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br -LLL uid=linust
dn: cn=Linus Torvalds,ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br
uid: linust
cn: Linus Torvalds
sn: linust
objectClass: inetOrgPerson
objectClass: posixAccount
homeDirectory: /home/linust
loginShell: /bin/bash
uidNumber: 1020
gidNumber: 1020
userPassword:: MTIzbXVkYXI=
Neste segundo exemplo, a busca foi feita pelo atributo “uid”, porém ao final desta, é requisitado que o valor retornado seja os atributos “cn” e “sn”:
# ldapsearch -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha -b ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br -LLL uid=linust cn sn
dn: cn=Linus Torvalds,ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br
cn: Linus Torvalds
sn: linust
No exemplo abaixo, a busca criada trará campos onde uid for igual a linust e uidNumber igual a 2000. Repare que nessa sintaxe o operador “&” (and) aparece antes dos valores requeridos:
# ldapsearch -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha -b ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br -LLL '(&(uid=linust)(uidNumber=2000))' cn
Para facilitar na construção dos próximos exemplos vamos definir o servidor e a base padrão para as buscas do ldap:
# vim /etc/ldap/ldap.conf
[...]
BASE dc=laboratorio,dc=com,dc=br
URI ldap://127.0.0.1
[...]
E vamos adicionar mais um usuário:
# cat user02.ldif
dn: cn=Tim Berners-Lee,ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br
uid: timb
cn: Tim Berners-Lee
sn: timb
objectClass: inetOrgPerson
objectClass: posixAccount
loginShell: /bin/bash
uidNumber: 1021
gidNumber: 1021
homeDirectory: /home/timb
userPassword: {SSHA}w6sk3690RGbCzTWmmr1JpkcY2HQpysC7
# service slapd stop
# slapadd -l user02.ldif
_#################### 100.00% eta none elapsed none fast!
Closing DB...
Exemplos de buscas avançadas:
# service slapd start
# ldapsearch -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha -b ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br -LLL '(|(uid=linut)(uid=timb))' cn
dn: cn=Tim Berners-Lee,ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br
cn: Tim Berners-Lee
# ldapsearch -h localhost -p 389 -x -D cn=admin,dc=laboratorio,dc=com,dc=br -w senha -b ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br -LLL '(&(uid=linust)(!(uidNumber=1021)))' cn
dn: cn=Linus Torvalds,ou=Usuarios,o=matriz,dc=laboratorio,dc=com,dc=br
cn: Linus Torvalds