11.7. Instalar y configurar OpenLDAP en el servidor Ubuntu
En este apartado vamos a ver cómo se instala OpenLDAP en un equipo con el sistema operativo Ubuntu 12.04 LTS. También supondremos que el sistema dispone del sistema de archivos NFS debidamente instalado y configurado para exportar la carpeta /home (te recomiendo revisar el capítulo 10: Instalar y configurar NFS en Ubuntu para refrescar conocimientos).
Para llevar a cabo nuestro cometido, realizaremos las siguientes tareas:
- Instalar los paquetes necesarios.
- Realizar la configuración básica de OpenLDAP
- Configurar la autenticación para los clientes
- Configurar el demonio SLAPD
- Crear la estructura del directorio
- Añadir un usuario y un grupo
- Comprobar que todo es correcto
En los siguientes apartados, aprenderemos a configurar los equipos cliente para autenticarse con LDAP.
Instalar OpenLDAP en el servidor
El proceso de instalación es realmente sencillo. Básicamente consiste en instalar el paquete slapd, aunque nosotros también instalaremos el paquete que contiene las utilidades de administración de LDAP: ldap-utils.
Como ambos paquetes se encuentran en los repositorios oficiales de Ubuntu, sólo tenemos que escribir en la terminal la siguiente orden:
sudo apt-get install slapd ldap-utils
Durante la instalación, aparece en la consola un mensaje que nos solicita la contraseña de administración para LDAP. Como siempre, deberá ser una contraseña segura.
Si consideras que la contraseña local cumple los requisitos, no hay ningún inconveniente para volver a usarla, aunque serás tú quien deba evaluar este aspecto en función de los requisitos de seguridad de tu entorno.
Como suele ocurrir cuando escribimos una contraseña, para evitar que hayamos cometido algún error tipográfico que después nos impida entrar, el sistema nos pide que volvamos a escribirla.
Al hacerlo, volveremos al aspecto normal de la terminal y comprobaremos que la instalación sigue su curso.
De forma predeterminada, slapd se configura con las mínimas opciones necesarias para que el demonio funcione de forma correcta.
Realizar la configuración básica de OpenLDAP
Comenzaremos por modificar el contenido del archivo /etc/hosts. El objetivo es que, cuando hagamos referencia a los nombres ldapserver o ldapserver.somebooks.local, nuestro sistema entienda que nos estamos refiriendo al servidor (quizás sería oportuno cambiar también el nombre del servidor, como hicimos en el capítulo 10: Instalar y configurar NFS en Ubuntu, pero, por el momento, no resulta imprescindible).
Dentro del archivo, añadimos una nueva línea que relacione la dirección IP estática del servidor con los nombres lógicos que tenemos previsto utilizar.
2
Cuando acabemos, pulsamos Ctrl + x para salir y nos aseguramos de guardar los cambios en el archivo.
El nombre NSS proviene de las siglas, en inglés, Name Service Switch.
A continuación, instalaremos la librería NSS para LDAP. Esta librería ofrece una interfaz para acceder y configurar distintas bases de datos utilizadas para almacenar cuentas de usuario (entre otras, /etc/passwd, /etc/group, /etc/hosts, LDAP, etc.).
Conseguirlo es tan sencillo como instalar el paquete libnss-ldap.
Una de las dependencias del paquete libnss-ldap es el paquete de configuración de la autenticación de LDAP (ldap-auth-config). Durante su instalación se iniciará un asistente que nos irá solicitando la información que necesita para su correcta configuración.
En el primar paso, nos solicita la dirección URi del servidor LDAP. Es importante dejar el principio tal y como lo encontramos (ldapi:///).
4
Cuando completemos la dirección IP, pulsaremos la tecla Intro. También podemos usar la tecla <Tabulador> para desplazarnos hasta la palabra <Aceptar>.
A continuación escribiremos el nombre global único (Distinguished Name – DN) siguiendo las indicaciones que vimos al principio de este capítulo (dc=somebooks,dc=local)
En el siguiente paso, indicaremos la versión del protocolo LDAP que vamos a utilizar. Salvo que dispongamos en nuestra red de clientes muy antiguos, lo normal será elegir el valor más alto.
A continuación, indicaremos si las utilidades que utilicen PAM deberán comportarse del mismo modo que cuando cambiamos contraseñas locales. Esto hará que las contraseñas se guarden en un archivo independiente que sólo podrá ser leído por el superusuario.
A continuación, el sistema nos pregunta si queremos que sea necesario identificarse para realizar consultas en la base de datos de LDAP.
Ya sólo nos queda indicar el nombre de la cuenta LDAP que tendrá privilegios para realizar cambios en las contraseñas. Como antes, deberemos escribir un nombre global único (Distinguished Name – DN) siguiendo las indicaciones que vimos al principio de este capítulo (cn=admin,dc=somebooks,dc=local)
En el último paso, el asistente nos solicita la contraseña que usará la cuenta anterior (como siempre, habrá que escribirla por duplicado para evitar errores tipográficos). Deberá coincidir con la que escribimos en el apartado Instalar OpenLDAP en el servidor.
De vuelta en la pantalla de la terminal, podremos comprobar que no ha habido errores durante el proceso.
Si más adelante observamos algún error o necesitamos efectuar alguna modificación, sólo tenemos que ejecutar el siguiente comando:
sudo dpkg-reconfigure ldap-auth-config
Configurar la autenticación para los clientes
Lo primero que haremos será utilizar auth-client-config, un script que nos ayuda a modificar los archivos de configuración de PAM y NSS. Para conseguirlo, ejecutamos el siguiente comando en la terminal:
sudo auth-client-config -t nss -p lac_ldap
Como puede verse, en nuestro caso hemos utilizado dos atributos:
- -t nss, con el que le indicamos que los archivos que vamos a modificar son los correspondientes a NSS
- -p lac_ldap, con el que indicamos que los datos para la configuración debe tomarlos del archivo lac_ldap. Este archivo se habrá generado durante la ejecución de ldap-auth-config en el punto anterior.
La ejecución de este comando no debe ofrecer ningún tipo de error. De lo contrario, deberíamos repasar la configuración ejecutando de nuevo ldap-auth-config.
A continuación, deberemos actualizar la configuración de las políticas de autenticación predeterminadas de PAM, lo que conseguimos con el siguiente comando:
sudo pam-auth-update
Al ejecutarlo, aparecerá un asistente, que nos muestra una primera pantalla informativa sobre la función de los módulos PAM.
En la siguiente pantalla, elegiremos cuáles de los módulos disponibles queremos habilitar. De forma predeterminada aparecen todos marcados…
Una vez acabada la configuración automática, podremos hacer algunos cambios complementarios editando el archivo /etc/ldap.conf. Para lograrlo, recurriremos, como siempre, al editor nano:
sudo nano /etc/ldap.conf
Una vez que se abra el editor, podremos ajustar algunos de los valores del documento, pero, sobre todo, comprobaremos que son correctos los siguientes datos:
host 192.168.1.10 base dc=somebooks,dc=local uri ldapi://192.168.1.10/ rootbinddn cn=admin,dc=somebooks,dc=local ldap_version 3 bind_policy soft
Con esto habremos terminado la configuración del servidor LDAP. Ahora está listo para autenticar usuarios. Sin embargo, aún nos queda establecer el comportamiento del demonio SLAPD.
Configurar el demonio SLAPD
SLAPD (Standalone LDAP Daemon) es un programa multiplataforma, que se ejecuta en segundo plano, atendiendo las solicitudes de autenticación LDAP que se reciban en el servidor.
Como hemos dicho más arriba, el último paso en la configuración del servidor LDAP será establecer algunos parámetros en la configuración de este demonio. Para conseguirlo, ejecutaremos el siguiente comando:
sudo dpkg-reconfigure slapd
Aparecerá un asistente cuyo cometido es evitar que tengamos que cambiar a mano el archivo slapd.conf.
La primera pantalla que se muestra, actúa como medida de seguridad, para asegurarse de que no hacemos cambios por error. Hay que tener cuidado porque la pregunta se hace al revés, es decir, nos pregunta si queremos omitir la configuración del servidor (imagino que el objetivo será impedir que elijamos Sí sin pensar lo que hacemos). En este caso, lógicamente, deberemos elegir la opción No.
Recuerda que puedes usar la tecla <tabulador> para cambiar de opción.
A continuación, deberemos escribir el nombre DNS que utilizamos para crear el DN base (Distinguished Name) del directorio LDAP.
Después, escribiremos el nombre de la entidad en la que estamos instalando el directorio LDAP.
En el siguiente paso, deberemos escribir la contraseña de administración del directorio.
5
La contraseña debe coincidir con la que escribimos en el apartado Instalar OpenLDAP en el servidor
A continuación, elegiremos el motor de la base de datos que usaremos para el directorio. Se recomienda HDB porque nos permitirá, en el futuro, cambiar los nombres de los subárboles si fuese necesario.
Si HDB no aparece elegida de forma predeterminada, saremos la tecla <tabulador> para desplazarnos.
Lo siguiente que nos pregunta el asistente es si queremos que se borre la base de datos anterior del directorio cuando terminemos la configuración de slapd.
A continuación, como hemos decidido no borrar la base de datos antigua, el asistente nos pregunta si queremos cambiarla de sitio.
9
Para evitar confusiones entre las dos bases de datos (nueva y antigua), elegiremos la opción Sí y pulsaremos Intro.
En algunas redes, con clientes muy antiguos, puede ser necesario mantener la versión 2 del protocolo LDAP. Por ese motivo, antes de terminar, el asistente nos pregunta queremos permitir el protocolo LDAPv2.
Después de este último paso, se cierra el asistente y volvemos a la consola.
11
Ahora podemos ver en la pantalla que la base de datos antigua se ha guardado en /var/backups y que el resto de la configuración se ha realizado con éxito.
Con esto habremos terminado la configuración del servidor LDAP. Ahora está listo para autenticar usuarios.
Crear la estructura del directorio
Una vez configurado el servidor, deberemos configurar la estructura básica del directorio. Es decir, crearemos la estructura jerárquica del árbol (DIT – Directory Information Tree).
Una de las formas más sencillas de añadir información al directorio es utilizar archivos LDIF (LDAP Data Interchange Format). En realidad, se trata de archivos en texto plano, pero con un formato particular que debemos conocer poder construirlos correctamente
El formato básico de una entrada es así:
# comentario dn: <nombre global único> <atributo>: <valor> <atributo>: <valor> ...
Puedes encontrar más información en la página oficial de OpenLDAP: http://www.openldap.org/doc/admin24/dbtools.html#The%20LDIF%20text%20entry%20format
Las líneas que comienzan con un carácter # son comentarios.
<atributo> puede ser un tipo de atributo como cn o objectClass, o puede incluir opciones como cn;lang_en_US o userCertificate;binary.
Entre dos entradas consecutivas debe existir siempre una línea en blanco.
Si una línea es demasiado larga, podemos repartir su contenido entre varias, siempre que las líneas de continuación comiencen con un carácter de tabulación o un espacio en blanco.
Por ejemplo, las siguientes líneas son equivalentes:
dn: uid=jlopez, ou=medio, dc=somebooks, dc=es
dn: uid=jlopez, ou=medio, dc=somebooks, dc=es
También podemos asignar varios valores a un mismo atributo utilizando varias líneas:
cn: Juan Jose Lopez cn: Juan Lopez
Con esta información en mente, crearemos un archivo que contenga los tipos de objeto básicos del directorio. Comenzaremos por abrir un editor de textos, por ejemplo nano, indicándole el nombre de nuestro archivo:
sudo nano ~/base.ldif
1
Aquí lo hemos llamado base.ldif, pero, lógicamente, podrás llamarlo como te resulte más apropiado.
Una vez abierto el editor, escribiremos un contenido como este:
dn: ou=usuarios,dc=somebooks,dc=local objectClass: organizationalUnit ou: usuarios dn: ou=grupos,dc=somebooks,dc=local objectClass: organizationalUnit ou: grupos
Lógicamente, en cada lugar donde aparecen los valores dc=somebooks,dc=local deberemos sustituirlos por los valores correctos en cada implementación.
2
Cuando hayamos terminado de escribirlo, sólo nos quedará pulsar Ctrl + x para salir y asegurarnos de guardar los cambios en el archivo.
A continuación, deberemos añadir la información a la base de datos OpenLDAP. Como sabemos, esto se hace con el comando ldapadd:
sudo ldapadd -x -D cn=admin,dc=somebooks,dc=local -W -f base.ldif
Después, podremos comprobar que los nuevos objetos se han añadido correctamente.
Añadir un usuario y un grupo
El método para añadir nuevos usuarios y grupos al árbol es muy similar a lo visto en el punto anterior, ya que consiste en crear un nuevo archivo ldif y, a continuación, integrarlo en la base de datos con ldapadd.
Añadir un usuario
Para añadir un nuevo usuario, recurriremos, como hasta ahora, al editor nano:
sudo nano ~/usuario.ldif
Por supuesto, puedes cambiar el nombre usuario.ldif por el que te resulte más adecuado en tu caso.
En el área de trabajo del editor, escribiremos un contenido como este:
dn: uid=jlopez,ou=usuarios,dc=somebooks,dc=local objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: jlopez sn: Lopez givenName: Juan cn: Juan Lopez displayName: Juan Lopez uidNumber: 1000 gidNumber: 10000 userPassword: mi_password gecos: Juan Lopez loginShell: /bin/bash homeDirectory: /home/jlopez shadowExpire: -1 shadowFlag: 0 shadowWarning: 7 shadowMin: 8 shadowMax: 999999 shadowLastChange: 10877 mail: juan.lopez@somebooks.com postalCode: 29000 o: somebooks initials: JL
2
Cuando hayamos terminado de escribirlo, sólo nos quedará pulsar Ctrl + x para salir y asegurarnos de guardar los cambios en el archivo.
Con esto ya estamos listos para cargar el nuevo usuario en el directorio. Sólo tenemos que escribir el siguiente comando:
sudo ldapadd -x -D cn=admin,dc=somebooks,dc=local -W -f usuario.ldif
3
Después de escribir la contraseña de administración de LDAP, podremos comprobar que el usuario se ha añadido correctamente.
Añadir un grupo
Para añadir el grupo, repetimos de nuevo el proceso anterior:
sudo nano ~/grupo.ldif
Una vez abierto el editor, escribiremos este contenido:
dn: cn=SMR2,ou=grupos,dc=somebooks,dc=local objectClass: posixGroup cn: SMR2 gidNumber: 10000
2
Cuando esté listo, pulsamos Ctrl + x para salir y nos aseguramos de guardar los cambios en el archivo.
De vuelta en la terminal, usamos de nuevo el comando ldapadd:
sudo ldapadd -x -D cn=admin,dc=somebooks,dc=local -W -f grupo.ldif
3
Después de escribir la contraseña de administración de LDAP, podremos comprobar que el grupo se ha añadido correctamente.
Con esto, ya tendremos en la base de datos un nuevo usuario y un nuevo grupo.
Cuando añadas nuevos usuarios, recuerda que los valores para los atributos uidNumber y homeDirectory deben ser diferentes para cada usuario. También habrá que sustituir el texto mi_password por la contraseña adecuada para el usuario.
Lo mismo ocurre con el atributo gidNumber de los grupos.
Además, los valores de los campos uidNumber y gidNumber no deben coincidir con el UID y GID de ningún usuario y grupo local.
Comprobar que todo es correcto
Ahora podemos comprobar que el contenido anterior se ha añadido correctamente. Para lograrlo podemos utilizar, por ejemplo, el comando ldapsearch , que nos permite hacer una búsqueda en el directorio.:
ldapsearch -xLLL -b "dc=somebooks,dc=local" uid=jlopez sn givenName cn
En este ejemplo buscamos un usuario con uid=jlopez y pedimos que nos muestre el contenido de los atributos sn, givenName y cn.
Otra opción interesante para comprobar el contenido del directorio es utilizar el comando slapcat. Su cometido es mostrar el contenido completo del directorio LDAP. Además, esta información se obtiene en formato LDIF, lo que nos permitirá volcarla a un fichero y exportar la base de datos de un modo muy sencillo.
En nuestro caso, nos limitaremos a obtener la salida en la pantalla: