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
