Cómo utilizar la consulta de comandos ldapsearch con ejemplos

En este artículo, consideraremos una de las principales utilidades de LDAP: ldapsearch. Es una interfaz accesible desde el shell que abre una conexión al servidor LDAP especificado usando el nombre distinguido y la contraseña especificados y localiza las entradas en base a un filtro de búsqueda, parámetros y opciones específicos.
Antes de comenzar, asegúrese de haber instalado y configurado correctamente el servidor LDAP. Si no tiene LDAP instalado, consulte la guía de instalación simple (omita la parte de configuración del modo espejo).
1) Consultar servidor Ldap y extraer información
A continuación, tres comandos consultarán y extraerán todas las entradas del servidor LDAP
ldapsearch -x -h master.example.com -p 389
-x stands for simple authentication (without SASL) -h specifies hostname -p used for port (that can be 636 in case of LDAP over SSL)
ldapsearch -x -h master.example.com -D "cn=manager,dc=example,dc=com" -W
-D defines bind Distinguish name. In other words, your authentication user from slapd.conf file -W will prompt for bind password (the one you've typed after slappasswd command)
ldapsearch -x -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd"
-w will use the password provided in the command line
Entonces, los tres comandos darán la misma salida:
# example.com dn: dc=example,dc=com dc: corp o: corp objectclass: dcObject objectclass: organization # department, example.com dn: ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: hadoop # groups, department, example.com dn: ou=groups,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: groups # system_admin, groups, department, example.com dn: cn=system_admin,ou=groups,ou=department,dc=example,dc=com cn: system_admin gidnumber: 502 memberuid: admin1 memberuid: admin2 objectclass: posixGroup objectclass: top # users, department, example.com dn: ou=users,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: users # admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com cn: admin2 gidnumber: 502 givenname: Admin2 homedirectory: /home/users/admin2 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin2 uid: admin2 uidnumber: 5002 userpassword: password
2) Consultar SSL / TLS
Para utilizar el identificador uniforme de recursos (URI) LDAP, debe utilizar -H
bandera que especifica un URI que se utilizará para conectarse al servidor y al puerto en el siguiente formato: LDAP[s]: // nombre de host[:port]
ldapsearch -x -H ldap://master.example.com
ldapsearch -x -H ldaps://master.example.com
El puerto es opcional, usará el LDAP predeterminado de 389 o el puerto LDAPS de 636 si no se proporciona el puerto. La salida será toda su base de datos LDAP.
3) Buscar DN base y alcance específicos
Ahora, intentaremos buscar un nombre y un alcance específicos para distinguir la base.
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -s base
-b defines base distinguish name for search. In other words, it defines starting point for the search -s scope of your search. That can be base object (base), one-level (one), subtree (sub) or children search (children)
La salida del comando anterior será el nombre distintivo base de ou = users, ou = department, dc = example, dc = com scope.
# users, department, example.com dn: ou=users,ou=department,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: users
En el caso de la misma búsqueda base dn y subárbol, obtendrá todo (todos los subárboles) que van debajo del árbol ou = users, ou = department, dc = example, dc = com. En nuestro caso, obtendrá ambas entradas para administradores:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -s sub
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com cn: admin2 gidnumber: 502 givenname: Admin2 homedirectory: /home/users/admin2 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin2 uid: admin2 uidnumber: 5002 userpassword: password
4) Leer operación usando archivo
En el futuro, usaremos la utilidad ldapsearch junto con un archivo. Cree un archivo con el siguiente contenido:
vi file
admin1
Ahora, necesita ejecutar el comando:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -s sub -f file.txt "(uid=%s)"
-f read operations from 'file'. This is usually used for multiple filters. If the file contains multiple filters, the file should be structured with one filter per line
Tenga en cuenta que dará el mismo resultado que:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "uid=admin1,ou=users,ou=department,dc=example,dc=com"
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password
5) Ordenar el resultado de la consulta
En este tema, consideraremos las principales opciones de entrada y salida. Para empezar, ordenaremos los resultados de nuestra consulta por atributo ‘uidnumber’
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -S uidnumber
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com cn: admin1 gidnumber: 502 givenname: Admin1 homedirectory: /home/users/admin1 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin1 uid: admin1 uidnumber: 5001 userpassword: password # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com cn: admin2 gidnumber: 502 givenname: Admin2 homedirectory: /home/users/admin2 objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Admin2 uid: admin2 uidnumber: 5002 userpassword: password
Como podemos ver, -S bandera ordena el resultado por atributo definido. Dado que en nuestro caso solo tenemos 2 entradas, la salida se ordenó por uidnumber = 5001 y 5002.
6) Límites, salida fácil de usar y sin caracteres
En el siguiente ejemplo, especificaremos el número máximo de entradas que se devolverán en respuesta a una solicitud de búsqueda (-z bandera), luego incluiremos la forma de nombre fácil de usar del nombre distintivo en la salida (-u bandera) y los valores jpegPhoto y audio se recuperarán y escribirán en archivos temporales (-t «()» jpegPhoto audio). Desafortunadamente, en nuestro ejemplo, no tenemos tales atributos, pero si los tuviera, obtendría el siguiente resultado:
ldapsearch -h master.example.com -D "cn=manager,dc=example,dc=com" -w "slappasswd" -b "ou=users,ou=department,dc=example,dc=com" -z 2 -u -t "(uid=admin*)" jpegPhoto audio
# admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com ufn: admin1, users, department, example.com audio:< file:///tmp/ldapsearch-audio-a1 jpegPhoto:< file:///tmp/ldapsearch-jpegPhoto-a1 # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com ufn: admin2, users, department, example.com audio:< file:///tmp/ldapsearch-audio-a2 jpegPhoto:< file:///tmp/ldapsearch-jpegPhoto-a2
-t flag es útil para tratar con valores que contienen datos que no son caracteres, como fotos o audio. Generará una salida de archivo temporal, cada atributo de cada entrada se escribirá en un archivo separado en el directorio temporal del sistema, generalmente es / tmp /.
7) búsqueda persistente
Una búsqueda persistente deja abierta la operación de búsqueda después de que se devuelvan las salidas del comando. Esto permite que las entradas devueltas en la búsqueda permanezcan en la memoria caché y que las actualizaciones se transmitan e incluyan a medida que ocurren. Esto permanece abierto hasta que el cliente cierra la conexión con la tecla ctrl-c.
ldapsearch -x -C ps:changeType[:changesOnly[:entryChangeControls]]
# example.com dn: dc=example,dc=com # department, example.com dn: ou=department,dc=example,dc=com # groups, department, example.com dn: ou=groups,ou=department,dc=example,dc=com # system_admin, groups, department, example.com dn: cn=system_admin,ou=groups,ou=department,dc=example,dc=com # users, department, example.com dn: ou=users,ou=department,dc=example,dc=com # admin1, users, department, example.com dn: uid=admin1,ou=users,ou=department,dc=example,dc=com # admin2, users, department, example.com dn: uid=admin2,ou=users,ou=department,dc=example,dc=com
-C bandera ejecutará la búsqueda como una búsqueda persistente. ps: changeType especifica qué tipo de cambios en las entradas permiten que se devuelva la entrada (agregar / eliminar / modificar / moddn / todo). changesOnly establece si devolver todas las entradas existentes que coinciden con el filtro de búsqueda o devolver entradas modificadas. De forma predeterminada, devolverá las entradas modificadas. entryChangeControls establece si se envían controles de cambio de entrada, información adicional sobre la modificación realizada en la entrada. Si el valor se establece en 0, solo se devuelve la entrada; si se establece en 1, se agrega una línea a la entrada a medida que se devuelve a la búsqueda que enumera el tipo de cambio realizado en la entrada. El valor predeterminado es 1.
8) Vista de lista virtual
En el siguiente ejemplo, intentaremos extraer solo una parte de los resultados con -G bandera. La llamada vista de lista virtual siempre requiere -S y -X banderas para especificar el orden de clasificación. entradasAntes: entradasDespués: valor – especifique el objetivo de búsqueda como la primera entrada en los resultados para la cual el atributo de clasificación es> o = al valor dado. Dado que no tenemos muchas entradas en nuestro LDAP, consideraremos un ejemplo. Por ejemplo,
ldapsearch -x -S uidnumber -G 2:3:admin1
Nos daría 6 entradas en orden de número de usuario. 2 entradas antes de admin1, la entrada igual o siguiente a admin1 y las 3 entradas posteriores.
Probar una conexión LDAP
Puede vincularse a su servidor de directorio LDAP ejecutando este comando ldapsearch desde el cliente / servidor. Ejecuto este comando desde mi máquina cliente a mi servidor LDAP y guardo los detalles en un archivo de texto.
root@ldapclient:~# ldapsearch -x -b " dc=ldap01,dc=linoxide,dc=com" >> all.txt root@ldapclient:~# cat all.txt # extended LDIF # # LDAPv3 # base < dc=ldap01,dc=linoxide,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # ldap01.linoxide.com dn: dc=ldap01,dc=linoxide,dc=com objectClass: top objectClass: dcObject objectClass: organization o: VIP dc: ldap01 # admin, ldap01.linoxide.com dn: cn=admin,dc=ldap01,dc=linoxide,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
Incluso podemos usar este comando para devolver todas las entradas en nuestro servicio de directorio preferido usando filtros como se muestra a continuación.
root@ldapclient:~# ldapsearch -x -b " dc=ldap01,dc=linoxide,dc=com" -s sub "objectclass=*" # extended LDIF # # LDAPv3 # base < dc=ldap01,dc=linoxide,dc=com> with scope subtree # filter: objectclass=* # requesting: ALL # # ldap01.linoxide.com dn: dc=ldap01,dc=linoxide,dc=com objectClass: top objectClass: dcObject objectClass: organization o: VIP dc: ldap01 # admin, ldap01.linoxide.com dn: cn=admin,dc=ldap01,dc=linoxide,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
Conclusión
En este artículo, hemos utilizado las opciones de la utilidad ldapsearch para consultar la base de datos LDAP. Esta herramienta tiende a ser muy extraña para los usuarios cuando la encuentran por primera vez. Sin embargo, con el comando mencionado puede dirigir completamente su búsqueda para devolver los datos exactos que necesita.