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