LDAP (parte4): Buscar, modificar y eliminar elementos del directorio

Publicado por P. Ruiz en

OpenLDAP logoHoy seguimos avanzando en la explicación sobre OpenLDAP. Si has seguido nuestros artículos publicados sobre esta serie (Instalar OpenLDAP en Ubuntu 20.04 LTS, Iniciar la estructura del directorio y Añadir usuarios y grupos de forma manual), ya tienes un directorio en funcionamiento.

Llegados a este punto, lo siguiente será aprender a buscar objetos, a modificar su contenido e incluso eliminarlos.

Planteamiento de partida

Para realizar las tareas de hoy, supondremos que hemos seguido las indicaciones del artículo anterior para crear un nuevo usuario llamado lgomez. En realidad, hemos editado el archivo usr.ldif y hemos cambiado los datos del primer usuario (jlopez) para sustituirlos por los des nuevo usuario (lgomez). En particular, hemos cambiado los campos uid, cn, sn, uidNumber, homeDirectory y givenName, pero hemos «olvidado» cambiar la dirección de mail.

Una vez modificado el archivo, ejecutamos el comando:

sudo ldapadd -x -D cn=admin,dc=somebooks,dc=local -W -f usr.ldif

Para tener más información sobre la estructura de los archivos LDIF, te recomiendo consultar el Capítulo 12: Instalar y configurar OpenLDAP en Ubuntu de nuestro libro Sistemas Operativos en Red (2ª edición).

Además, puedes consultar todos los artículos prácticos publicados en SomeBooks.es sobre LDAP. haciendo clic aquí.

Buscar elementos del directorio

En realidad, ya aprendimos a localizar objetos en el árbol del directorio al final del artículo anterior.

Como vimos, la utilidad de línea de comandos que permite realizar búsquedas en el directorio LDAP es ldapsearch. Se trata de una utilidad con multitud de opciones, pero aquí vamos a hacer un uso básico de ella. Por ejemplo, podríamos buscar todos los usuarios usando la siguiente sintaxis:

ldapsearch -xLLL -b "dc=somebooks,dc=local" uid=* sn givenName mail

(Observa que es la misma orden que escribimos en el artículo anterior, pero ahora hemos utilizado un asterisco como valor de uid). Aunque no vamos a entrar en muchos detalles, al menos vamos a explicar los argumentos que estamos usando para este ejemplo:

  • -x  indica que usaremos autentificación simple.

  • -LLL sirve para que la salida sea del tipo LDAPv1.

  • -b va seguida del punto del árbol donde debe comenzar la búsqueda. En este caso, dc=somebooks,dc=local.

  • Después se incluye la condición que deberán cumplir los objetos buscados. En el ejemplo, cualquier valor (*) para el atributo uid.

  • Por último, se incluye el nombre de los atributos que queremos obtener en el resultado de la consulta.

Escribimos la orden y pulsamos la tecla Intro.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-001

Como puedes ver en la imagen siguiente, el resultado de la consulta se obtiene en formato LDIF, lo que facilitará redirigirlo a un archivo y usarlo como copia de seguridad o incluso como método de exportación de datos a otra implementación de OpenLDAP.

Resultado de la consulta.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-002

Modificar entradas del directorio

Como ya habíamos adelantado al principio, en la imagen anterior nos encontramos un error: el valor del correo electrónico de los dos usuarios es el mismo. Esta situación nos ofrece la excusa perfecta para comprobar cómo podemos cambiar el valor del atributo mail para el usuario lgomez.

El comando que usaremos en este caso es ldapmodify, que permite cambiar el contenido de cualquier atributo, añadir atributos nuevos, eliminarlos etc. Dado que la sintaxis es más compleja nos apoyaremos en un archivo LDIF que especifique los cambios que necesitamos realizar. En nuestro caso, el archivo tendrá el siguiente aspecto:

dn: uid=lgomez,ou=unidad,dc=somebooks,dc=local
changetype: modify
replace: mail
mail: luis.gomez@somebooks.local

Como puedes suponer, la primera línea identifica la cuenta en la que realizaremos el cambio. La segunda indica el tipo de operación a realizar, la tercera identifica el atributo y, por último, la cuarta incluye el nuevo valor que debe asignarle.

Como en el resto de los artículos, usaremos el editor nano para crear el archivo, que para este ejemplo llamaremos cambios.ldif:

sudo nano cambios.ldif

Como antes, escribimos la orden y pulsamos la tecla Intro.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-003

Una vez abierto el editor, escribimos el texto del ejemplo.

Cuando hayamos terminado de escribirlo, pulsamos Ctrl + X para salir, asegurándonos de guardar los cambios.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-004

Por último, ejecutamos la utilidad ldapmodify, indicándole el nombre del archivo donde se encuentran los datos:

ldapmodify -x -D cn=admin,dc=somebooks,dc=local -W -f cambios.ldif

Como de costumbre, necesitaremos escribir la contraseña de administración de LDAP.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-005

Después de escribir la contraseña, el comando nos responde con los datos de la entrada que ha sido modificada.

Comprobamos que, efectivamente, la respuesta se corresponde con la cuenta indicada en el archivo LDIF.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-006

Y para comprobar que los cambios se han efectuado correctamente, basta con volver a utilizar la utilidad ldapsearch, tal y como hicimos en el punto anterior.

Observamos que el valor del atributo mail de la cuenta lgomez ha sido modificado.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-007

Borrar entradas del directorio

La utilidad que permite eliminar entradas del directorio se llama ldapdelete. Para utilizarla, sólo tenemos que aportar los datos del objeto a borrar y los datos de la cuenta administrador que debe permitirlo. La sintaxis será como sigue:

ldapdelete -x -W -D 'cn=admin,dc=somebooks,dc=local' "uid=lgomez,ou=unidad,dc=somebooks,dc=local"

Como antes, necesitaremos escribir la contraseña de administración de LDAP.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-008

Después de escribir la contraseña, parecerá que no ha ocurrido nada. Sin embargo, el objeto se habrá eliminado. Para comprobarlo, podemos volver a utilizar la utilidad ldapsearch con la misma sintaxis de arriba.

Observamos que el objeto ha desaparecido.

ldap-parte4-Buscar-modificar-y-eliminar-elementos-del-directorio-009

Y esto es todo por el momento. Espero que te resulte útil.