martes, 18 de noviembre de 2008

Servidor LDAP en Ubuntu o Debian con OpenLDAP

¿Qué es un servidor LDAP?

Un servidor LDAP es un servidor de datos optimizado para la realización rápida de consultas de lectura y orientado al almacenamiento de datos de usuarios a modo de directorio.

La principal utilidad de un directorio LDAP es como servidor de autentificación para los distintos servicios de un sistema informático como puedan ser: autentificación para entrar en un PC, para entrar en una aplicación web, para acceder a un servidor ftp, para acceder a servidores de correo entrante POP3 y saliente SMTP, etc...

Si en nuestra red disponemos de un servidor LDAP y configuramos todos los PCs y todos los servicios de la red para que se autentifiquen en él, bastará con crear las cuentas de usuario y grupos de usuarios en nuestro servidor LDAP para que los usuarios puedan hacer uso del sistema y de sus servicios desde cualquier puesto de la red. Es un sistema ideal para centralizar la administración de usuarios en un único lugar.

En el curso veremos cómo poner en marcha un servidor LDAP y cómo configurar el resto de PCs clientes de la red para que se autentifiquen en él. También utilizaremos OpenSSL para que durante el proceso de autentificación los datos viajen encriptados por la red, así ningún curioso podrá averiguar nuestras contraseñas. Además utilizaremos LDAP para que autentifique el acceso al servidor ftp y el acceso a páginas restringidas en el servidor web.

Instalación y configuración de OpenLDAP

Para simplificar la administración de los usuarios del sistema es ideal utilizar una base de datos accesible mediante LDAP. Almacenar las cuentas de usuario de forma centralizada en un único repositorio facilitará la creación, modificación y eliminación de cuentas de usuario y grupos de usuarios. Será necesario configurar los PCs de la red para que utilicen el servidor LDAP como servidor de autentificación.

Instalación de OpenLDAP

El servidor OpenLDAP está disponible en el paquete slapd por tanto, lo instalaremos utilizando apt-get. También nos conviene instalar el paquete db4.2-util que son un conjunto de utilidades para la base de datos dbd que es la que utilizaremos para nuestro servidor ldap y el paquete ldap-utils que contiene utilidades adicionales:

// Instalación del servidor LDAP
# apt-get install slapd db4.2-util ldap-utils

Durante la instalación, nos pedirá que introduzcamos la contraseña de administrador del servidor ldap. Podemos configurar cualquier contraseña, como por ejemplo 'ldapadmin'

Configuración de OpenLDAP

La configuración del servidor LDAP se almacena en el archivo /etc/ldap/slapd.conf. Podemos editar manualmente dicho archivo, pero es mejor lanzar el asistente de configuración de slapd. Para ello debemos ejecutar el siguiente comando:

(para aquellos a los que no os aparezca, os recomiendo que le echéis un vistazo a este otro artículo: http://tecnoloxiaxa.blogspot.com/2008/11/autenticacin-en-un-sistema-ldap.html )
//Lanzar el asistente de configuración de slapd
# dpkg-reconfigure slapd

  • Lo primero que nos pregunta el asistente es si deseamos omitir la configuración del servidor LDAP. Obviamente responderemos que no, ya que precisamente lo que queremos es configurar el servidor LDAP.
  • 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. Ejemplo, si nuestro dominio es iesacarballeria.com, lo normal es que la base para nuestro directorio LDAP sea: dc=iesacarballeira,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.

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

  • Después nos preguntará por la contraseña que deseamos poner al usuario admin (administrador) del servidor LDAP. Dicha contraseña nos la pedirá dos veces para evitar errores de tecleo. Podemos poner cualquier contraseña, por ejemplo 'root'.

  • Acto seguido nos informará sobre los posibles gestores de datos para almacenar el directorio y en la siguiente ventana nos preguntará qué sistema utilizar. Lo recomendable es utilizar el sistema BDB.

  • 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:

  • En el caso de que exista una base de datos LDAP previa, nos preguntará si deseamos moverla. Lo mejor es responder Sí, para evitar que interfiera en la nueva base de datos:
  • Luego nos preguntará si deseamos utilizar LDAP versión 2, respondemos que no ya que apenas se utiliza.

  • Finalmente nos da la oportunidad de omitir la configuración. Si respondemos que sí, será como que no hemos ejecutado el asistente, por lo tanto si nuestra intención es configurar el servidor LDAP responderemos no:

Ya tendríamos nuestro servidor LDAP listo para trabajar con él.

Arranque y parada manual del servidor LDAP

El servidor LDAP, al igual que todos los servicios en Debian, dispone de un script de arranque y parada en la carpeta /etc/init.d.

// Arrancar o reiniciar el servidor LDAP
root@cnice-desktop:# /etc/init.d/slapd restart

// Parar el servidor LDAP
root@cnice-desktop:# /etc/init.d/slapd stop

Arranque automático del servidor LDAP al iniciar el sistema.


update-rc.d slapd defaults

Administración de OpenLDAP

Introducción

Una vez instalado y configurado el servidor LDAP, la siguiente tarea es la del diseño de la estructura y la introducción de datos en el directorio.

Puesto que la finalidad de nuestro servidor LDAP es que sirva de almacen de usuarios y grupos para autentificar sistemas linux y servicios como ftp y web, deberemos crear una estructura que parta de la base de nuestro directorio, para almacenar dicha información. Tal y como se explica más abajo, crearemos una unidad organizativa (ou) llamada groups, para almacenar los grupos de usuarios y crearemos otra unidad organizativa llamada users para almacenar a los usuarios.

Explorador de directorios LDAP

Para acceder al directorio LDAP y poder crear y modificar elementos en dicho directorio, es necesario disponer de un explorador de directorios LDAP (LDAP browser). Existen muchos exploradores LDAP tanto de pago como libres. Entre las aplicaciones libres destacamos gq, phpldapadmin (aplicación web) y JXplorer.

Para instalar gq, podemos utilizar apt-get. Una vez instalada, para ejecutar gq tan solo debemos pulsar alt+f2 y escribir gq.

Para instalar phpldapadmin podemos:

  • Simplemente ejecutar: apt-get install phpldapadmin
  • Si se produce el error :

    Memory Limit low.
    Your php memory limit is low - currently 16M
Deberemos aumentar la memoria, por ejemplo a 64M, en el fichero /etc/php5/apache2/php.ini
//editamos el fichero /etc/php5/apache2/php.ini memory_limit = 64M ; Maximum amount of memory a script may consume (16MB)
y reiniciamos el servidor apache:

/etc/init.d/apache restart
Si estamos en el servidor, simplemente teclearemos en la barra de direcciones de nuestro explorador web:

http://localhost/phpldapadmin/

  • Otra posibilidad y al igual que otras aplicaciones web, podremos descargarla desde http://phpldapadmin.sourceforge.net/ y descomprimirla dentro del DocumentRoot de apache, es decir, dentro de la carpeta /var/www, por ejemplo en /var/www/phpldapadmin. Para ejecutarla, si la hemos descomprimido en la carpeta anterior, debemos ir a http://ip_del_servidor_web/phpldapadmin/ con el navegador y veremos la página principal de la aplicación (deberemos asegurarnos de que existe el fichero config.php, ya que por defecto sólo trae un config.php.example, ya que sino con cada actualización, en caso de existir ya nos machacaría la configuración previa.

JXplorer - Explorador LDAP en java.

Por su calidad superior, en este curso utilizaremos JXplorer para administrar el directorio LDAP.

Instalación de JXplorer

Previo a instalar jxplorer, es necesario instalar la máquina virtual java de Sun.
Aunque en estos momentos está disponible la versión 1.6 de la máquina virtual de java, por problemas con la versión 3.2 de jxplorer he instalado la 1.5:

# apt-get install sun-java5-bin sun-java5-jre

Lo cierto es que la versión 3.2, de momento me ha dado muchos problemas en su instalación, por ello finalmente he decidido bajarme la versión 3.1 ( http://sourceforge.net/project/downloading.php?groupname=jxplorer&filename=JXv3.1deploy.tar.bz2&use_mirror=ovh) y ejecutarla tecleando:

# sh ./jxplorer.sh

Pasos para la instalación de jxplorer3.2 - DE MOMENTO CON SERIOS PROBLEMAS DE INSTALACIÓN
Para ello debemos ir a http://www.java.com/es/ y descargar la última versión del JRE (Java Runtime Enviroment). Puesto que no existe una versión específica para sistemas debian, debemos descargar la versión Linux (genérica), ejecutar el archivo 'bin' para que se descomprima el paquete y mover el directorio que se ha creado (ejemplo, jre1.6.0_10), a la carpeta /usr/lib. Posteriormente tendremos que editar el archivo /root/.bashrc y añadir las variables que permitan al shell encontrar el JRE: // Añadir en /root/.bashrc (sustituir jre1.6.0_10 por la versión descargada) CLASSPATH=/usr/lib/jre1.6.0_10/bin/ JAVA_HOME=/usr/lib/jre1.6.0_10/bin/ PATH=/usr/lib/jre1.6.0_10/bin/:/usr/lib/jre1.6.0_10/bin/java/:/sbin:/bin :/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin cargamos las variables del entorno: # source /root/.bashrc Después, debemos abrir un terminal y ya estamos en condiciones de instalar JXplorer. JXplorer no está disponible en los repositorios de paquetes de debian, por ello debemos ir a http://pegacat.com/jxplorer/downloads/users.html y descargarnos la versión para linux. En el momento de escribir estas líneas, la última versión es la 3.2 y por tanto el archivo descargado se llama JXv3.2_install_linux.bin. Para instalar la aplicación debemos dar permisos de ejecución al archivo y ejecutar:

// Instalar JXplorer
# sh ./JXv3.1_install_linux.bin

Se iniciará un sencillo asistente de instalación que al finalizar habrá creado un enlace en nuestra carpeta home, por lo tanto para ejecutarlo debemos escribir:

// Ejecutar JXplorer 
# ./JXplorer_LDAP_Browser

Veremos la pantalla principal de 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. 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 en nuestro caso)
  • Base del directorio (dc=iesacarballeira,dc=com en nuestro caso)
  • Nombre de usuario administrador (cn=admin,dc=iesacarballeira,dc=com en nuestro caso)
  • Contraseña (root en nuestro caso)

La base del directorio se suele denominar en inglés 'base DN' o 'Nombre Distinguido de la base del directorio'. Se corresponde con el parámetro 'suffix' del archivo de configuración del servidor LDAP /etc/ldap/slapd.conf.

El nombre del usuario con el que nos conectamos se suele denominar en inglés 'user DN' o también 'bind DN'

El nombre de usuario administrador por defecto suele ser admin y a menudo hay que proporcionar nombre y base del directorio: cn=admin,dc=ieacarballeira,dc=com

Al hacer clic en el botón 'conectar' (marcado con círculo rojo en la figura) nos aparecerá el diálogo de conexión para que introduzcamos los datos de la conexión. Para no tener que introducir dicha información cada vez que conectemos, podemos grabar los datos pulsando 'Save'.

Si pulsamos OK, JXplorer conectará con el servidor LDAP y mostrará el directorio:

Vemos que en nuestro directorio solamente hay dos elementos: una organización llamada 'iesacarballeira' y el usuario administrador llamado 'admin'.

Organización del directorio LDAP

Creación de las unidades organizativas

Puesto que nuestro directorio va a almacenar usuarios y grupos, vamos a crear sendas unidades organizativas (en inglés organizational unit - ou) llamadas 'users' y 'groups' que nos servirán para organizar los usuarios y los grupos por separado.

Dentro de la unidad organizativa 'users' crearemos todos los usuarios del sistema. Dentro de la unidad organizativa 'groups' crearemos todos los grupos del sistema.

Para crear una unidad organizativa dentro de nuestra organización, haremos clic con el derecho sobre la organización 'iesacarballeira' y en el menú contextual elegiremos 'New':

Nos aparecerá la ventana 'Set Entry Object Classes' que podríamos traducir por 'Seleccione las clases objeto de la nueva entrada' o mejor, 'Seleccione las tipologías'. En ella podremos elegir los 'tipos' que tendrá nuestro nuevo elemento. Como se trata de una unidad organizativa (en inglés organizational unit - 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' (introducir Nombre Distinguido Relativo) debemos poner el nombre de nuestro elemento. Escribiremos ou=users. Estaremos en la situación de la siguiente figura:

Tan solo debemos pulsar el botón OK y el botón "Submit" en la pantalla que nos aparece, ya se habrá creado nuestra unidad organizativa 'users'. Repetiremos los pasos para crear otra unidad organizativa llamada 'groups'.


Usuarios y grupos

Ahora solamente nos queda crear los usuarios, crear los grupos y asignar los usuarios a sus grupos. Dentro de nuestra unidad organizativa 'groups' crearemos los siguientes grupos:
  • profesores (gid=1001)
  • alumnos (gid=1002)
Dentro de nuestra unidad organizativa 'users' crearemos los siguientes usuarios:
  • javier (uid=1001, profesor)
  • joaquin (uid=1002, profesor)
  • miguel (uid=1003, profesor)
  • jessica (uid=1004, alumno)
  • joel (uid=1005, alumno)

Creación de grupos

Para crear los grupos, haremos clic con el derecho en la unidad organizativa 'groups' e igual que antes haremos clic en 'New'. Nuestro nuevo elemento será un nuevo grupo posix, por lo tanto debemos agregar el tipo 'posixGroup' de la lista de la izquierda. El nombre (RDN) será profesores, por tanto debemos escribir 'cn=profesores' (cn= Common Name - Nombre Común):

Al pulsar OK nos apacererá la siguente figura, en la cual observamos los atributos clásicos de un grupo posix. Debemos rellenar al menos el campo gidNumber. También podemos introducir miembros al grupo. En el parámetro memberUid añadimos javier. Luego, haciendo clic con el derecho en javier > Add another value, podemos añadir otro valor: joaquin. De igual manera añadiremos a miguel. No importa que todavía no hayamos creado a dichos usuarios:

Creación de usuarios

Para crear los usuarios, haremos clic con el derecho en la unidad organizativa 'users' e igual que antes haremos clic en 'New'. Nuestro nuevo elemento será un nuevo 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 Francisco Javier, podemos escribir en la casilla RDN 'cn=Francisco Javier' (cn= Common Name - Nombre Común):

Al pulsar OK nos apacererá la siguente 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 y sn (surname - apellidos). También añadiremos el e-mail aunque en la figura no se vea ya que está más abajo:

Lo mismo haremos con el resto hasta que tengamos creados los cinco usuarios.


Ya tendríamos creada la estructura, los grupos y los usuarios que necesitamos para nuestro sistema.

Autenticación de usuarios con LDAP
Para seguir viendo cómo configurar y autenticar LDAP (sin encriptar y usando openssl para encriptación) pulsa aquí


Fuentes:



26 comentarios:

Sergio dijo...

Hola, antes de nada enhorabuena por la web, y este articulo increible.

Estoy intentando hacer lo que explicas, pero el primer error me surge demasiado pronto :(

Despues de poner:
# apt-get install slapd db4.2-util ldap-utils

Me pone que no se detecta el paquete db4.2

¿Que puedo hacer? Mi mail es giogaucho@hotmail.com

Te sigo visitando ;) Un abrazo!

Sergio dijo...
Este comentario ha sido eliminado por el autor.
Juan dijo...

Probablemente o no tienes bien configurados los repositorios o has dejado un espacio en db4.2-util. Comprueba que tienes esa librería accesible intentando/instalándola desde synaptic. Te debería aparecer, sin problemas, en los repositorios oficiales.

Sergio dijo...

Gracias por la respuesta :) Pues no se muy bien como se hace lo que me has dicho porque soy nuevo en esto...

Un saludo!

Juan dijo...

lo puedes hacer desde Sistema-Administración-Gestión de Paquetes sinaptic.

de todos modos si eres nuevo te recomiendo que empieces por algo más simple, échale un vistazo a este enlace y comienza por los primeros temas:

http://tecnoloxiaxa.blogspot.com/2008/11/administrar-y-configurar-redes.html

Sergio dijo...

Hola de nuevo, ya consegui instalar todo, pero cuando estoy en JXplorer y me voy a conectar me da un error y no puedo contectarme.

Empece por esto porque me lo han mandado para un trabajo de la facultad, pero es que Ubuntu yo lo habia usado muy poco, lo tipico: probarle a ver como es y valio...

Un slaudo y gracias por la ayuda.

Sergio dijo...

Hola otra vez, perdona que sea tan pesado.

Ya consegui acceder, estaba poniendo mal los datos de BASE DN. Mire 'suffix' del archivo de configuración del servidor LDAP /etc/ldap/slapd.conf y ahi vi que estaba poniendolo mal.

Voy a seguir a ver si me sigue saliendo todo bien, muchisimas gracias por este manual que me esta sirviendo de mucho. :)

Juan dijo...

pues nada,me alegro que te funcione. suerte

Juan dijo...

.... y también con los exámenes que estarán a punto de llegar

Juan dijo...

... porque en lo futbolístico está claro que no necesitas ninguna suerte este año.

Sergio dijo...

Hola d enuevo. Gracias por la suerte, aver que tal los examenes, en futbol necesito poca jeje.

Pues mira instale todo ya y pase a tu siguiente manual: http://tecnoloxiaxa.blogspot.com/2008/11/autenticacin-en-un-sistema-ldap.html

El caso es que al principio iba bien, pero no se que ha pasado y ahora que en esta parte que indicas:

Probando el cambio de contraseñaroot@cnice-desktop:/etc/pam.d# pamtest passwd jessicaTrying to authenticate for service .Password: // Introducimos el password de jessicaAuthentication successful. // La autentificación ha sido satisfactoria

No me reconoce a ningun usuario :S Pero al principio si que lo hacia. Un saludo.

Krlos dijo...

Hola a todos me parecio muy bueno el articulo sin embargo tengo un problema y es que tras instalar los paquetes y configurar el slapd me fin y el archivo slapd.conf no existe en su lugar lo que tengo es un archvo llamdo ldap.conf pero no tiene nada relacionado con la configuracion en el podrian ayudarme con esto graxias de antemano.

Juan dijo...

échale un vistazo a este otro artículo que creo te ayudará en las cuestiones de configuración:
http://tecnoloxiaxa.blogspot.com/2008/11/autenticacin-en-un-sistema-ldap.html

Anónimo dijo...

La última versión de openldap ya no utiliza slapd.conf para configurarse, sino que lo hace dinámicamente desde la base cn=config, se puede acceder a ella desde phpldapadmin con el usuario cn=admin,cn=config y la contraseña del admin, para luego buscar como está configurado. Más información en: https://help.ubuntu.com/8.10/serverguide/C/openldap-server.html
Si quieres mantener el viejo esquema estático también se puede: https://help.ubuntu.com/8.10/serverguide/C/openldap-server.html
Espero que sea de utilidad.

Lucky Luck dijo...

Llevo en torno a un mes leyendo manuales y visitando web donde explican el modo de configuración y puesta en marcha de LDAP, una odisea, y puedo decir a todas luces que es el mas facil y mejor de todos los que he leido hasta la fecha. Lo he puesto en marcha todo, en menos de una hora.
Muchas gracias por este gran tutorial.

Juan dijo...

me alegro de que te haya sido útil y gracias por el comentario

kokonuts dijo...

cuando entro con con cn=admin,cn=config me dice lo siguiente el phpldapadmin:
Authenticate to server
Nombre de usuario o contraseña incorrectos. Por favor, inténtelo de nuevo.

no entiendo el tutorial de la pagina de ubuntu que han colgado unos 3 comentarios mas arriba(está en inglés y he probado a traducirlo con google pero nada).y estoy desesperado, que hago?
nota:no me aparece /etc/ldap/slapd.conf
agradeceria muchisimo algo de ayuda :D

kokonuts dijo...

por cierto, busco ayuda para poder configurarlo dinamicamente, o para pasarlo a estático.cualquier cosilla es buena.
(perdon por el doble post)

Muro dijo...

Muchas gracias por tu manual, me ha funcionado a la perfeccion, lo que me extraña es que el archivo slapd.conf no lo tengo y las modificaciones las hice a nivel de config.php y anduvo perfecto ¿esta bien esto? , agradezco tus comentarios y el tiempo de compartir

noe dijo...

holas: estoy montando ldap, pero no me aparece l archivo /etc/ldap/slapd.conf, por que ? y como le puedo hacer para solucionar este problema, y otra cosa es necesario copiar el fichero de esquema de evolution-data-server dentro del directorio /etc/openldap/schema/: para que funcione como directorio ?

saludos

Juan dijo...

ese fichero ya no se utiliza en las versiones actuales, en breve colgaré manuales actualizados, incluso integrandolo con correo electrónico, samba,....

noe dijo...

ok, muchas gracias; y pues esperare a que pongas esos manuales, pero entonces ahora desde donde puedo cambiar la configuraciòn del ldap ? se puede hacer desde el phpldapadmin ?

Saludos

noe dijo...

holas, de nuevo por aqui, he tratado de configurar el control de acceso de mis usuarios en mi ldap para definir que es lo que pueden ver y lo que pueden escribir y hasta que nivel del arbol, pero la verdad nada mas no le hayo, quisiera saber si alguien me puede ehcar la mano,estoy trabajando sobre ubuntu 9.04.

saludos:(

Mandrake dijo...

Hola, estoy tratando de conecta con el JXplorer y siempre me sale el error 49, que es lo que estoyu haciendo mal?

Mandrake dijo...

Hola, estoy tratando de acceder por JXplorer, pero siempre me sale el error 49 a que se debe? ya configure de varias formas y siempre me aparece este error

Anónimo dijo...

buenas tardes,

en el momento de acceder al servidor por el explorador, no me coge mi dominio, coge el dominio example. que puede ser debido??

muchas gracias por vuestra atención!!!