LINUX

Cómo utilizar la consulta de comandos ldapsearch con ejemplos

herramienta ldapsearch

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.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar