CÓMO INSTALAR Y CONFIGURAR OPENLDAP EN GNU/LINUX

database-openldap¿Qué es OpenLDAP?

OpenLDAP es una implementación libre de código abierto del protocolo “Lightweight Directory Access Protocol” (LDAP) y está liberada bajo su propia licencia “OpenLDAP Public License”. En si mismo, LDAP es un protocolo de comunicación independiente de la plataforma, muchas distribuciones GNU/Linux incluyen el software OpenLDAP, aunque también corre bajo BSD, AIX, HP-UX, Mac OS X, Oracle Solaris y Microsoft Windows.

El proyecto OpenLDAP se inició en 1998 por Kurt Zeilenga. Comenzó como un clon de la implementación LDAP de la “Universidad de Michigan”, entidad donde se desarrolló originalmente el protocolo y que actualmente sigue trabajando en la evolución del mismo.

En pocas palabras, si en nuestra red disponemos de un servidor LDAP, bastará con crear las cuentas de usuario y grupos en nuestro servidor para que los clientes puedan hacer uso del sistema y de sus servicios desde cualquier puesto de la red. Por lo tanto, es un sistema ideal para centralizar la administración de usuarios en un único lugar.

 

Instalando OpenLDAP

El servidor OpenLDAP está disponible en el paquete “slapd”, lo podremos instalar utilizando apt-get ó cualquier otro gestor (dnf, yast, etc). Es conveniente instalar “db4.8-util”,el cual contiene un conjunto de utilidades para la base de datos “dbd” que utiliza LDAP, además usaremos las “ldap-utils” que son un conjunto de herrmaientas adicionales:

# apt-get install slapd db4.8-util ldap-utils

Durante la instalación se nos pedirá que introduzcamos la contraseña de administrador del servidor LDAP, el usuario es “admin”.

 

Configurando OpenLDAP

Lo primero que nos pregunta el asistente es si deseamos omitir la configuración del servidor LDAP (obviamente no):

 

LDAP-1

 

Nuestro directorio LDAP debe tener una base a partir de la cual cuelgan el resto de elementos. Como nombre de la base, habitualmente se utiliza el nombre del dominio. Por ejemplo, si nuestro dominio es “midominio.com”, lo normal es que la base para nuestro directorio LDAP sea: “dc=midominio, dc=com”.

La siguiente pregunta que nos hace el asistente es el nombre de nuestro dominio. Éste nombre lo utilizará para crear el nombre distinguido (DN) o dicho más claramente, nombre identificativo de la base de nuestro directorio LDAP.

LDAP-2

Posteriormente nos preguntará por el nombre de nuestra organización.

LDAP-3

En la siguiente ventana nos pregunta la contraseña para el administrador LDAP.

LDAP-4

Nos vuelve a salir la misma pantalla pidiéndonos que confirmemos el password y posteriormente nos informa sobre la opción de escoger entre la base de datos HDB ó BDB, escogemos HDB por defecto.

DATABAE-HDB

Después nos preguntará si queremos que se elimine la base de datos cuando quitemos “slapd”. Por si acaso, lo mejor es responder que no:

PURGE_NO

En el caso de que exista una base de datos LDAP previa, nos informa de si deseamos moverla. Lo mejor es responder “Sí”, para evitar que interfiera en la nueva base de datos:

BORRAR-DATABASE-OLD

Por ultimo nos pregunta si deseamos utilizar LDAP versión 2, respondemos que no, y escogemos la versión 3. El asistente finaliza y ya tenemos nuestros servidor listo para empezar a trabajar con el.

 

Arrancar y parar el servidor manualmente

El servidor LDAP, al igual que todos los servicios en GNU/Linux, dispone de un script en la carpeta “/etc/init.d”. Podemos arrancar, reiniciar o parar el servicio tal y como se ve en la foto.

ARRANCAR-MANUALMENTE

 

Arranque automático del servicio al iniciar el sistema

Ya hemos comentado en anteriores “HowTo’s” la necesidad de crear los enlaces simbólicos de los scripts en cada uno de los directorios según su nivel de ejecución, pero disponemos de la herramienta “sysv-rc-conf” que nos facilita enormemente dicha tarea.

# apt-get install sysv-rc-conf

 

Administrando OpenLDAP

Una vez instalado y configurado el servidor LDAP, la siguiente tarea es la de diseñar la estructura del directorio. Puesto que la finalidad de nuestro servidor LDAP es que sirva de almacén de usuarios y grupos, deberemos crear la base de nuestro directorio para almacenar dicha información. Por lo tanto, necesitamos una unidad organizativa (ou) llamada “groups” para almacenar los grupos de usuarios y otra (ou) llamada “users” para almacenar a los usuarios.

 

Exploradores LDAP

Aunque LDAP permite trabajar con comandos y archivos “ldif”, para acceder al directorio más cómodamente y poder crear ó modificar elementos de manera gráfica es necesario disponer de un explorador LDAP (LDAP browser). Algunos son bien conocidos como “Apache Directory Studio”, “PhpLdapAdmin” y “JXplorer” (bastante potente y desarrollado en Java).

http://phpldapadmin.sourceforge.net/wiki/index.php/Download

https://directory.apache.org/apacheds/

http://jxplorer.org

Para instalar “PhpLdapAdmin”, al igual que otras aplicaciones web, deberemos descargarla y descomprimirla dentro del “DocumentRoot” de Apache, es decir, dentro de la carpeta “/var/www” (como ya vimos en el “HowTo” de Apache), por ejemplo “/var/www/phpldapadmin” y para ejecutarla debemos ir a la URL “http://ip_del_servidor_web/phpldapadmin/ “. Respecto a la instalación de las otras 2 aplicaciones, necesitaremos tener instalado Java, nosotros usaremos “Jxplorer”.

 

Instalando JXplorer

Antes de instalar Jxplorer, es necesario instalar java:

# apt-get install icedtea-6-plugin openjdk-6-jre openjdk-6-jdk

Esto dependerá de cada distribución, mi consejo es ir directamente a la web de java.com y buscar el apartado de descargas de GNU/Linux, hay tendremos toda la información.

https://www.java.com/es/download/help/linux_install.xml

Una vez instalado “java”, procederemos con la instalación de “Jxplorer” el cual podemos bajar desde su web:

http://jxplorer.org/downloads/users.html

Una vez ahí, seleccionamos nuestra plataforma, en este caso GNU/Linux:

“jxplorer-3.3.1-linux-installer.run”

Cuando lo tengamos descargado, deberemos darle permisos de ejecución:

permiso-ejecuion-jxplorer

Y lo ejecutaremos:

# ./ jxplorer-3.3.1-linux-installer.run

Nos aparece la siguiente ventana gráfica del “wizard” de instalación:

wizard-jxplorer

Le damos a siguiente, aceptamos el contrato de licencia y nos muestra el directorio de instalación “/opt/jxplorer”, aceptamos y acto seguido se copian todos los fichero a dicho directorio, aceptamos de nuevo y se cierra la ventana de instalación:

fin-instaalacion-jxplorer

Al dirigirnos al directorio de instalación vemos lo siguiente:

CONTENIDO-OPT-JXPLORER

Dentro podemos ver 2 ficheros que nos interesan “jxplorer.sh” y “JXplorer.desktop”, el primero es el “script”, tendremos que dirigirnos al directorio “/opt/jxplorer” y una vez dentro ejecutar:

# ./jxplorer

ó copiar el segundo fichero que no es más que un acceso directo en nuestro escritorio. Al ejecutarlo vemos la siguiente ventana:

PANTALLA-INICIO-JXPLORER

 

Conexión con el servidor LDAP

La conexión con el servidor LDAP podemos hacerla como usuario anónimo o como usuario administrador. Si conectamos de forma anónima solo podremos visualizar los elementos pero no podremos hacer cambios, mientras que si conectamos como administrador, podremos crear, modificar y eliminar elementos de cualquier tipo.

Para conectar al servidor LDAP como administrador necesitamos la siguiente información:

Dirección IP del servidor LDAP.

Protocolo del servidor (LDAP v3).

Base del directorio (dc=midominio, dc=com en mi caso).

Nombre de usuario administrador (cn=admin, dc=midominio, dc=com).

Contraseña del usuario “admin”.

NOTA: Durante las pruebas de laboratorio, puse como contraseña “admin” al igual que el administrador de LDAP y me devolvía un error (49 Invalid credentials), así que probando, cambié la contraseña y funcionó perfectamente.

Al hacer clic en el botón “conectar”, (arriba en la esquina izquierda debajo del menú “file”), nos aparecerá el diálogo de conexión para que introduzcamos los datos. Para no tener que escribir dicha información cada vez que queramos conectar, podemos grabar los parámetros pulsando en el botón “Save” (guardará la configuración en una plantilla).

FOTO-CONEXION-JXPLORER

Tras validarnos aparecerá la pantalla de gestión de Jxplorer:

PANTALLA-GESTION-JXPLORER

Sólo veremos 2 elementos: La organización “midominio” y el usuario “admin”.

 

Organizando el directorio LDAP

Para crear una unidad organizativa, haremos click con el botón derecho sobre la organización “midominio” y en el menú contextual elegiremos “New”. Nos aparecerá la ventana “Set Entry Object Classes” ó configuración inicial para clases de objetos y en ella podremos elegir los “tipos” que tendrá nuestro nuevo elemento.

Como se trata de una unidad organizativa (ou) debemos seleccionar el tipo “organizationalUnit” en la lista de la izquierda y pulsar el botón añadir “Add”. Los otros dos tipos que aparecen por defecto “organizationalRole” y “simpleSecurityObjet” no los necesitaremos, por lo tanto podemos seleccionarlos de la lista de la derecha y pulsar el botón quitar “remove”.

En la casilla “Enter RDN” debemos poner el nombre de nuestro elemento. Escribiremos “ou=users” y estaremos en la situación de la siguiente figura:

añadiendo-users-jxplorer

Pulsaremos OK y después presionaremos el botón “submit” para que se cree nuestra unidad organizativa “users”. La pantalla sería la siguiente:

boton-SUBMIT

Tendremos que repetir los pasos anteriores para crear otra unidad organizativa llamada “groups”.

 

Usuarios y grupos

Partimos de la hipotética situación de una pequeña empresa de servicios, en la cual hay principalmente trabajadores Técnicos y Administrativos, estos serán nuestros 2 grupos principales.

El siguiente paso es crear los grupos y los usuarios, asignando posteriormente los usuarios a sus grupos correspondientes. Dentro de nuestra unidad organizativa “groups” crearemos los siguientes grupos:

tecnicos (gid=1001)

administrativos (gid=1002)

Dentro de nuestra unidad organizativa “users” crearemos los siguientes usuarios:

juan (uid=1001, tecnico)

antonio (uid=1002, tecnico)

luis (uid=1003, tecnico)

maria (uid=1004, administrativo)

enrique (uid=1005, administrativo)

 

Creando los grupos

Para crear los grupos, haremos clic con el botón derecho en la unidad organizativa “groups” y al igual que antes hicimos, daremos click en “New”. Nuestro nuevo elemento será un grupo “posix”, por lo tanto debemos agregar el tipo “posixGroup” de la lista de la izquierda. El nombre (RDN) será “tecnicos”, por tanto debemos escribir “cn=tecnicos” (cn= Common Name):

set-entry-objetc-classes

Al pulsar OK nos aparecerá la siguiente figura en la cual observamos los atributos clásicos de un grupo “posix”, al menos rellenaremos el campo “gidNumber”. También podemos introducir miembros al grupo, en el parámetro “memberUid” añadimos “juan”, luego, haciendo clic con el botón derecho en “juan” > “Add another value”, podemos añadir otro valor: “Antonio”, de igual manera añadiremos a “luis”.

No importa que todavía no hayamos creado a dichos usuarios, por último pulsamos “submit” y repetimos el proceso para añadir al grupo “administrativos” sus correspondientes usuarios.

La pantalla quedaría de la siguiente manera:

administrativos-tecnicos

 

Creando a los usuarios

Para crear los usuarios haremos click con el botón derecho en la unidad organizativa “users” y al igual que antes, haremos clic en “New”. Nuestro nuevo elemento será un usuario “posix”, por lo tanto debemos agregar el tipo “posixAccount” de la lista de la izquierda. Pero nuestro usuario también será una persona, por eso nos interesará agregar el tipo “person” para disponer de los atributos de dicho tipo (nombre, apellidos, …), además como será usuario de Internet nos interesará agregar también el tipo “inetOrgPerson” para poder almacerar el e-mail y otros valores. Si su nombre es Juan Manuel, podemos escribir en la casilla RDN “cn=Juan Manuel” (cn= Common Name):

añadiendo-usuarios

Al pulsar OK nos aparecerá la siguiente figura en la cual observamos los atributos de las tres tipologías de nuestro elemento: persona, usuario de internet y cuenta posix. Debemos rellenar al menos los campos “gidNumber” (grupo primario que será el 1001), “homeDirectory”, “uid” (identificador), “uidNumber”, “loginShell”, “sn” (surname – apellidos), el e-mail y además configuraremos la contraseña en el atributo “userPassword“ cifrada con MD5.

La pantalla quedaría asi:

datos-usuario-añadido

Y para terminar, repetiremos el proceso con el resto de usuarios.

 

Autenticación basada en LDAP

Como ya hemos comentado anteriormente, una de las utilidades más importantes de un servidor LDAP es el servicio de autentificación. Ahora veremos las modificaciones que hay que realizar en un sistema GNU/Linux para que autentifique a los usuarios en un servidor LDAP en lugar de utilizar los clásicos archivos “/etc/passwd”, “/etc/group” y “/etc/shadow” de forma local. Para ello es necesario instalar y configurar los paquetes “libpam-ldap”, “libnss-ldap” y “ldap-utils”.

 

Acerca de las librerías de autentificación “pam-ldap” y “nss-ldap”

La librería “pam-ldap” permite que las aplicaciones que utilizan PAM para autentificarse, puedan hacerlo mediante un servidor LDAP. El archivo de configuración de ésta librería es “/etc/ldap.conf”. Para especificar el modo de autentificación de cada servicio es necesario configurar los archivos que se encuentran en la carpeta “/etc/pam.d/”.

La librería “nss-ldap” permite que un servidor LDAP suplante a los archivos “/etc/passwd”, “/etc/group” y “/etc/shadow” como bases de datos del sistema y toma la configuración del archivo anterior “/etc/ldap.conf”. También habría que configurar el arhivo “/etc/nsswitch.conf” para que se utilice LDAP como base de datos del sistema en lugar de los archivos anteriormente comentados. El asistente que veremos a continuación, configurará automáticamente todos los archivos necesarios para permitir la autentificación del sistema por LDAP.

 

Instalación de “libpam-ldap” ,“libnss-ldap” y “ldap-utils”

La instalación de las librerías “libpam-ldap”,“libnss-ldap” y “ldap-utils” se puede realizar ejecutando cualquier gestor de paquetes según la distribución, como ya hemos comentado varias veces (en mi caso “apt-get” desde Ubuntu):

# apt-get update

# apt-get install libpam-ldap libnss-ldap ldap-utils

Nos aparece por TUI la siguiente interfaz de configuración para saber quien es el servidor LDAP, ponemos IP ó localhost y puerto, tal que asi:

configurar-ldap-auth-config

Luego nos preguntará por la base del directorio LDAP (base DN):

 

Acto seguido tendremos que indicar la versión de LDAP a utilizar (usamos la 3):

VERSION-DE-LDAP

Después nos pregunta si necesitamos autentificarnos en el servidor LDAP o no. Como la librería únicamente va a realizar consultas, no es necesario autentificarse por lo tanto debemos responder “No”:

LOGIN-DABASE-NO

Ahora solamente nos quedaría indicarle al sistema que se autentifique por LDAP. Podríamos hacerlo editando manualmente el archivo “/etc/nsswitch.conf” pero lo haremos mediante el comando “auth-client-config”.

# auth-client-config -t nss -p lac_ldap

 

Probando la autentificación

Nuestro servidor LDAP ya debería autentificar correctamente. Podemos probar los servicios mediante el comando “pamtest” que se encuentra en el paquete “libpam-dotfile”, por lo tanto debemos instalarlo:

# apt-get install libpam-dotfile

Si deseamos probar que funciona el servicio “passwd” (cambiar contraseña) sobre un usuario del directorio LDAP “jpayan”, ejecutaremos:

# pamtest passwd jpayan

pamtest-passwd-jpayan

Ahora usaremos el comando “finger” sobre el mismo usuario “jpayan”:

# finger jpayan

finger-jpayan

Hasta aquí el proceso de centralización y autentificación de usuarios en el servidor LDAP estaría concluido, ahora solo nos faltaría asegurar las comunicaciones entre el servidor y los clientes, para ello usaremos OpenSSL como veremos en el siguiente apartado.

 

Autentificación segura; ¿Por qué usar LDAP y SSL?

Desde que el usuario introduce su contraseña hasta que ésta llega al servidor para comprobar la autentificación, el paquete de datos que contiene la contraseña viaja por los cables de red atravesando “switches” y “routers” hasta llegar al servidor LDAP. Durante el trayecto, cualquier persona con los conocimientos necesarios podría quedarse con una copia del paquete de datos para posteriormente analizarlo y tratar de descubrir el usuario y la contraseña.

Con el fin de evitar esto, existe la posibilidad de cifrar los paquetes de datos en el PC antes de enviarlos por la red, de manera que lleguen al servidor de una forma más segura. Así, aunque un usuario malintencionado capturase un paquete de datos con la información del usuario y la contraseña, sería muy difícil descifrarlos ya que se utiliza cifrado asimétrico.

¿Qué quiere decir esto?. El cifrado asimétrico permite la generación de una pareja de claves comúnmente denominadas “clave pública” y “clave privada” en el servidor. La pareja de claves es tal que, todo lo cifrado con una, solo se puede descifrar con la otra.

El servidor tiene guardado en un lugar seguro la “clave privada” y cuando un cliente intenta autentificarse, éste le trasfiere la “clave pública” para que cifre los datos con dicha clave antes de enviarlos. El cliente utiliza la “clave pública” del servidor para cifrar los datos, así al llegar el paquete al servidor, éste podrá descifrarlo porque dispone de la “clave privada”.

Por lo tanto, si un usuario malintencionado interceptase el paquete de datos cifrado con la “clave pública”, no podría hacer nada porque no dispone de la “clave privada”.

CLAVE-PUBLICA-PRIVADA

 

LDAPS (LDAP seguro)

Al igual que el servidor web apache utiliza el puerto 80 para transmitir información sin cifrar (protocolo http) y el puerto 443 para transmitir información cifrada (protocolo https), openLDAP también se puede configurar para que utilice las prestaciones de cifrado que ofrece OpenSSL.

Normalmente las consultas al servidor LDAP se realizan por el puerto 389 pero éstas, se transmiten sin cifrar. Para realizar consultas seguras cifrando los datos con SSL, es necesario utilizar el puerto 636. Para ello, el servidor deberá disponer de un certificado firmado por una entidad certificadora (CA) y posteriormente configurar LDAP para que utilice los certificados. Para ello, habrá que realizar los siguientes pasos:

  • Crear una nueva entidad certificadora.
  • Crear una petición de firma de certificado del servidor.
  • Firmar el certificado con la CA.
  • Copiar los certificados en la carpeta deseada, renombrarlos y protegerlos.
  • Configurar LDAP para que utilice los certificados.
  • Modificar el script de inicio de “slapd” para que utilice el protocolo seguro.
  • Reiniciar “slapd”.

Todo esto lo podemos hacer con el siguiente script “ldap-seguro.sh”:

script-ldap-seguro

NOTA: Al principio del script se ejecuta “apt-get install gnutls-bin”, “GnuTLS” ó “GNU Transport Layer Security Library” es una implementación de software libre de los protocolos SSL y TLS. Si estamos en una distribución no derivada de Debian, tendremos que modificar y adaptar nuestro gestor de paquetes al script.

Una vez copiado y guardado el script, solo habrá que darle permisos de ejecución y lanzarlo:

# chmod 744 ldap-seguro.sh

# ./ldap-seguro.sh

Ahora probamos el acceso a LDAP por SSL:

conexion-ldap-ssl

Si nuestro servidor LDAP está funcionando en modo seguro, estará escuchando en el puerto 636 ya que es el puerto utilizado por el protocolo “ldaps”. Para probarlo, iniciamos JXplorer pero la conexión la realizaremos a dicho puerto y en el nivel de seguridad seleccionamos “SSL + User + Password” ya que la autentificación va a ser por usuario y contraseña pero utilizando SSL

aviso-de certificado

Al intentar conectar nos aparece la información del certificado y lo aceptamos (ya sea para esa sesión o para siempre). Esta vez la conexión se ha realizado mediante SSL.

Ahora que tenemos centralizada la autentificación de usuarios con LDAP y además cifrada con SSL, nos queda probar que cualquier máquina cliente en la que “NO” tengamos cuenta local (conectada a la red) nos permita hacer “login”. Para este “Lab” he estado usando Ubuntu como servidor y el cliente será una máquina con Debian en la que tendremos que hacer algunas configuraciones para que se pueda conectar al servidor.

 

Configurar el PC cliente para conectar al servidor LDAP

Para configurar el cliente instalaremos las siguientes librerías (igual que hicimos en el servidor):

# apt-get install libnss-ldap libpam-ldap ldap-utils –y

NOTA: La opción “-y” acepta todas las dependencias de los paquetes.

Tal como empieza la instalación, nos aparecerá una TUI de configuración, los datos más importantes son:

“ldap://192.168.1.11” (IP de mi servidor), “dc=midominio,dc=com” “ldap versión 3” “cn=admin,dc=midominio,dc=com”, “contraseña para el administrador ldap”.

Adjunto pantallas una por una, vosotros deberéis como siempre ir modificando cada entrada según vuestros datos:

ip-ldap

ip-ldap-1

ip-ldap-2

ip-ldap-3

ip-ldap-4

ip-ldap-5

ip-ldap-6

ip-ldap-7

ip-ldap-8

ip-ldap-9

El siguiente paso es modificar el fichero “/etc/nsswitch.conf” y agregaremos detrás del parámetro “compat” la entrada “ldap”.

passwd:      compat ldap

group:        compat ldap

shadow:      compat ldap

Ahora modificaremos “/etc/pam.d/common-password”, en el cual buscaremos la entrada “use-authtok” y la borraremos.

El tercer fichero a configurar es “/etc/pam.d/common-session”, aquí agregaremos la siguiente entrada “session optional pam_mkhomedir.so skel=/etc/skel umask=077”.

NOTA: Como guía de donde podéis escribir el parámetro correctamente, tenéis que buscar “session optional”, hay varias entradas, debajo de cualquiera de ellas.

Después de haber modificado estos ficheros, instalamos la herramienta “sysv-rc-conf”:

# apt-get install sysv-rc-conf

Activamos el servicio “libnss-ldap”

# sysv-rc-conf libnss-ldap on

Y finalmente reiniciamos el cliente.

Ajunto capturas desde una consola (ALT+CTRL+F1), haciendo “ls –l /home” en la que podéis ver que no hay ningún directorio creado.

ls-home-1

Ahora me muevo a la consola gráfica (ALT+CTRL+F7), como se puede ver no aparece ningún usuario.

debian-no-user

Hacemos click en “not listed?” y en mi caso entraré con mi usuario creado previamente en el servidor LDAP con la herramienta Jxplorer (el usuario es jpayan). Nos permite acceder sin ningún problema y vemos nuestro escritorio como si se hubiera creado con una cuenta de usuario localmente.

Volvemos a la primera consola (ALT+CTRL+F1) y como usuario “root” intento eliminar el usuario “jpayan”, podéis ver los resultados del comando en la captura siguiente, en la cual nos dice que dicho usuario no se encuentra en “/etc/passwd”, sin embargo tiene creado su directorio $HOME y es funcional completamente.

ultima-captura

Y hasta aquí este “HowTo” sobre como configurar un servidor LDAP y sus clientes para que usen autentificación centralizada bajo SSL.

 

Saludos cordiales.

 

 

 

Deja un comentario