domingo, 23 de noviembre de 2008

Autenticación en un sistema LDAP (OpenLDAP) Ubuntu o Debian

Introducción

Como ya hemos comentado anteriormente, una de las utilidades más importantes de un servidor LDAP es como servidor de autentificación. Autentificarse es necesario para entrar en un sistema linux. También para acceder a algunos servicios como un servidor FTP o a páginas privadas en un servidor web. En otros apartados veremos como utilizar un servidor LDAP para permitir el acceso a páginas web privadas y para autentificar a usuarios del servidor de ftp Proftpd. Aquí veremos las modificaciones que hay que realizar en un sistema 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. Para ello es necesario instalar y configurar los paquetes libpam-ldap y libnss-ldap.

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. Para que el sistema linux se autentifique mediante un servidor LDAP es necesario instalar esta librería ya que utiliza PAM. El archivo de configuración de ésta librería es /etc/ldap.conf. Hay otras aplicaciones o servicios que utilizan PAM para la autentificación y por tanto podrían, gracias a la librería pam-ldap, autentificarse ante un servidor LDAP.

Para especificar el modo de autentificación de cada servicio es necesario configurar los archivos que se encuentran en la carpeta /etc/pam.d/. Al final de este documento se indican los cambios necesarios en éstos archivos.

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. Su archivo de configuración se encuentra en /etc/libnss-ldap.conf (o /etc/ldap.conf en versiones recientes). Posteriormente deberemos configurar el arhivo /etc/nsswitch.conf para que se utilice LDAP como base de datos del sistema en lugar de los archivos passwd, group y shadow.

La instalación de ambas librerías se puede realizar mediante apt-get.

Instalación y configuración de libpam-ldap

La instalación de la librería libpam-ldap se puede realizar ejecutando el comando:

// Instalación de la librería libpam-ldap
# apt-get install libpam-ldap
Nos aparecerán las pantallas del asistente de configuración cuyas pantallas podéis ver un poco más abajo, en las versiones más recientes de Ubuntu. Deberemos comprobar al finalizar:

El archivo de configuración de la librería es el archivo /etc/ldap.conf . Únicamente hay que configurar los siguientes parámetros:

  1. Quién es el servidor LDAP (nombre o IP)
  2. Cuál es la base de nuestro directorio LDAP (base DN)
  3. Cuál es la versión de LDAP a utilizar
  4. Quién es el administrador del directorio
  5. En qué unidad organizativa se encuentran los usuarios (sustituto de /etc/passwd)
  6. En qué unidad organizativa se encuentran las contraseñas (sustituto de /etc/shadow)
  7. En qué unidad organizativa se encuentran los grupos (sustituto de /etc/group)

Para ello las líneas que hay que modificar en el archivo de configuración son las siguientes (el valor de los parámetros es un ejemplo):

// Configurar en /etc/ldap.conf
host 172.16.15.1 //nombre o IP del servidor LDAP
base dc=iesacarballeira,dc=com
ldap_version 3
rootbinddn cn=admin,dc=iesacarballeira,dc=com
nss_base_passwd ou=users,dc=iesacarballeira,dc=com?one
nss_base_shadow ou=users,dc=iesacarballeira,dc=com?one
nss_base_group ou=groups,dc=iesacarballeira,dc=com?one

Instalación y configuración de libnss-ldap

En las versiones más recientes al instalar la librería libpam-ldap ya nos instala ésta y nos habrá ejecutado el asistente de instalación, sino:

Para instalar la librería libnss-ldap debemos ejecutar el comando:

// Instalación de la librería libnss-ldap
# apt-get install libnss-ldap

Acto seguido se iniciará el asistente de configuración de dicha librería. Se puede lanzar dicho asistente más adelante mediante el comando:

// Lanzar asistente de configuración de libnss-ldap
# dpkg-reconfigure libnss-ldap

Dicho asistente modificará el archivo /etc/libnss-ldap.conf (o /etc/ldap.conf en versiones recientes) que es donde se almacena la configuración de la librería. Posteriormente tendremos que editar dicho archivo manualmente para introducir algún cambio que no realiza el asistente.

Asistente de instalación

La primera pregunta que nos hace el asistente es quién es el servidor LDAP. Podemos poner la IP o el nombre:

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

dc=iesacarballeira,dc=com

Acto seguido tendremos que indicar la versión de LDAP a utilizar:

la más actual -la 3- por defecto.

En el siguiente paso 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':

Posteriormente nos preguntará si el archivo /etc/libnss-ldap (o /etc/ldap.conf en versiones recientes) debe solamente tener permisos de lectura y escritura para el usuario (root que es quién instala) o no. Como en el paso anterior hemos indicado que no necesitamos autentificación, no se almacenarán contraseñas en el archivo de configuración, por tanto podemos responder 'No':

Finalmente nos advierte que debemos modificar el archivo /etc/nsswitch.conf para que el sistema utilice el directorio LDAP como base de datos del sistema, al igual que hace con los archivos passwd, group y shadow:

Con el asistente se habrá configurado casi todo lo necesario aunque para que nuestro sistema se autentifique por LDAP, aún hay que configurar dos parámetros más:

  1. En qué unidad organizativa se encuentran los usuarios (sustituto de /etc/passwd - en nuestro caso ou=users)
  2. En qué unidad organizativa se encuentran los grupos (sustituto de /etc/group - en nuestro caso ou=groups)
Para ello hay que modificar dos líneas en el archivo de configuración. Son las siguientes:

// Configurar en /etc/ldap.conf
nss_base_passwd ou=users,dc=iesacarballeira,dc=com
nss_base_group ou=groups,dc=iesacarballeira,dc=com

Configuración de NSS

Para que el servidor LDAP actúe como si se tratara de los archivos passwd, group y shadow, además de instalar las dos librerías anteriores, debemos indicar que se utilice LDAP como alternativa para autentificar usuarios. Para ello hay que añadir en las líneas que hacen referencia a passwd, group y shadow en el archivo /etc/nsswitch.conf, la palabra 'ldap' tras la palabra 'compat' quedando el archivo /etc/nsswitch.conf así:

// Archivo /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd: compat ldap
group: compat ldap
shadow: compat ldap

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

Configurar servicios PAM

Nuestro sistema ya estaría preparado para autentificarse por LDAP. Editando los archivos que hay en la carpeta /etc/pam.d, podemos configurar la forma en la que se autentifica cada uno de los servicios que requieren autentificación.

Para no tener que configurar de cada uno de los servicios, existen unos archivos comunes cuyo nombre empieza por common que afectan a la mayoría de ellos y sus archivos de configuración los referencian mediante una línea @include a los archivos comunes causando el mismo el efecto que si el contenido de los archivos comunes estuviera copiado en el lugar de la línea @include. Los archivos comunes son:

  • /etc/pam.d/common-auth (para autentificarse)
  • /etc/pam.d/common-account (para disponer de una cuenta)
  • /etc/pam.d/common-session (para poder iniciar sesion)
  • /etc/pam.d/common-password (para poder cambiar password)

Estos archivos contienen una línea que hace referencia a la librería pam_unix.so que corresponde a la autentificación contra los archivos UNIX. Para que los servicios de nuestro sistema utilicen primero las librerías pam_ldap.so para autentificar al usuario, debemos añadir la línea correspondiente a pam_ldap.so por encima de la línea correspondiente a la librería pam_unix.so en los archivos common. Así, auntentificará primero contra el servidor LDAP, y si la autentificación falla, probará despues con los archivos UNIX.

Configuración archivo common-auth

Para que los servicios de nuestro sistema utilicen las librerías pam-ldap para autentificar al usuario, debemos añadir en el archivo /etc/pam.d/common-auth la siguiente línea:

// Añadir en /etc/pam.d/common-auth encima de la línea pam_unix.so
auth sufficient pam_ldap.so

Además de ello, hemos de modificar la línea -añadiendo al final use_first_pass:

auth required pam_unix.so use_first_pass
// en caso contrario cuando hagamos su para un usuario dado de alta en ldap nos pedirá la contraseña dos veces

Configuración archivo common-account

Para permitir que los servicios de nuestro sistema comprueben la cuenta del usuario mediante las librerías pam-ldap, debemos añadir en el archivo /etc/pam.d/common-account la siguiente línea:

// Añadir en /etc/pam.d/common-account encima de la línea pam_unix.so
account sufficient pam_ldap.so nullok_secure

Configuración archivo common-session

Para permitir que los servicios de nuestro sistema obtengan los parámetros de la sesión de usuario mediante las librerías pam-ldap, debemos añadir en el archivo /etc/pam.d/common-session la siguiente línea:

// Añadir en /etc/pam.d/common-session encima de la línea pam_unix.so
session sufficient pam_ldap.so

Configuración archivo common-password

Para permitir que los servicios de nuestro sistema puedan modificar la contraseña del usuario mediante las librerías pam-ldap, debemos añadir en el archivo /etc/pam.d/common-password la siguiente línea:

// Añadir en /etc/pam.d/common-password encima de la línea pam_unix.so
password sufficient pam_ldap.so

Configuración particular para cada servicio

Si deseamos que algún servicio se autentifique de forma diferente, podemos editar el archivo del servicio (ej: /etc/pam.d/su, /etc/pam.d/ssh, /etc/pam.d/ftp, etc...), eliminar la línea que comienza por @include e introducir la configuración particular que deseemos.

Probar la autentificación

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

// Instalación del comando pamtest
# apt-get install libpam-dotfile

Si deseamos probar que funciona el servicio passwd (cambiar contraseña) sobre un usuario del directorio LDAP (ejemplo jessica) , podemos ejecutar:

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

También podemos utilizar el comando finger sobre usuarios que estén solamente en el directorio LDAP, por ejemplo joel:

// Probando finger
root@cnice-desktop:/etc/pam.d# finger joel
Login: joel Name: Joel Javier
Directory: /home/www/alumnos Shell: /bin/sh
Last login Tue Sep 27 18:02 (CEST) on pts/3 from 192.168.0.213
No mail.
No Plan.

Podemos por ejemplo, desde una consola de root, cambiar mediante el comando 'su' (su=Switch User - cambiar de usuario) a un usuario que esté en el directorio LDAP, para lo cuál no nos pedirá contraseña ya que root tiene permiso para cambiar a cualquier usuario. Si posteriormente cambiamos a otro usuario del directorio, ahora sí que nos pedirá contraseña. Deberemos introducir la contraseña que esté almacenada en el directorio LDAP para dicho usuario:

// Cambiando de usuario
root@cnice-desktop:/etc/pam.d# su joel // Somos root y cambiamos a joel
joel@cnice-desktop: // No nos pide password
joel@cnice-desktop:/etc/pam.d$ su jessica // Somos joel, y cambiamos a jessica
Password: // Nos pide password, le introducimos
jessica@cnice-desktop:/etc/pam.d$ // Ha cambiado correctamente

Las opciones de configuración de PAM son muy variadas. Para obtener más información se puede instalar el paquete libpam-doc que instala bastante documentación al respecto bajo la carpeta /usr/share/doc/libpam-doc/

Crea un usuario de prueba:
smbldap-useradd -a -m -M cuenta_de_correo -c "Nombre Completo" nombre_usuario

Luego dale una password:
smbldap-passwd nombre_usuario

Y debieras poder conectarte al servidor como ese usuario, ya sea por la consola o por SSH. También debes arreglar algunos ajustes de la cuenta root en el servidor, o te quedarás sin poder usarla:
smbldap-usermod -u 0 -d /root -s /bin/bash root


Para información sobre cómo instalar el servidor LDAP pulsa en el enlace

Fuente:

19 comentarios:

Anónimo dijo...

Qué bien me van a venir tus apuntes para clase.... la próxima vez que tenga que dar sistemas!
Saludos.
ana.

tecnoadmin dijo...

los apuntes son, más bien, del cnice, lo único que he hecho es actualizar algunas cosas que eran de versiones antiguas y no funcionaban en las actuales.
Bueno, eso y capturar pantallas de las instalaciones, pero como puedes ver, precisamente en éste, se me pasó y quedó sin las pantallitas.

saludos

thesixhalcon dijo...

Muchisimas gracias por el contenido del post, es de muchísima utilidad.
Espero que vaya bien!
Salu2!

tecnoadmin dijo...

me alegro de que te haya sido útil
saludos

Anónimo dijo...

Esta es la mejor guia que he encontrado muchas gracias por publicarla.

Tengo un pequeño problema. cuando intento conectarme desde la consola a un usuario creado en ldpa mediante jxplorer me sale un herror diciendo que no exiten las carpetas personales (configuradas en jxplorer: /home/sergio) ¿alguien sabe por que?
un saludo y gracias por todo

Lucky Luck dijo...

Excelente articulo, al igual que el primero.
Pero me ha surgido una duda tras ponerlo todo en marcha. La pregunta puede resultar estupida pero no me reconocia ningun usuario de la instalación previa. ¿La instalación y configuración de NSS se realizar en el cliente o en el servidor? En la introducción no dice nada al respecto.

ðĄŘќЖăђ dijo...

Increible, esta muy bueno y me ayudo mucho...

Restaurador dijo...

que puede ser que no me autentifica los usuarios, ni me puedo loguear, pero si me logueo con un usuario local y hago pamtest passwd user, me lo toma bien.
pero el cliente no se puede autentificar con el server, que datos necesitarias que te muestre?

tecnoadmin dijo...

por lo que comentas es bastante probable que ldap no esté funcionando, échale un vistazo a los logs especialmente /var/log/auth.log y sys.log a ver si te dan alguna pista.
Prueba a parar y volver a arrancar el servicio ldap a ver que te dice.
dentro de unas semanas colgaré un artículo más actualizado sobre configuración de ldap.

Anónimo dijo...

Tengo problemas con la autenticación de usuarios, seguí todos tus pasos al pie de la letra y al final al hacer la autenticación de usuarios falla la autenticación,también trato de hacer un ping a la ip que le puse al ldap dice que no es alcanzable, hago finger de los usuarios creados y no me da nada, estoy trabajando sobre ubuntu 9.10 virtualizado eso podría causar algun problema? tienes alguna idea de que tengo mal?
Muchas Gracias.

Juan dijo...

lo primero que tienes que hacer es ver al otro equipo, si el ping no te va, quiere decir que no tienes conexión con lo cual no te va a funcionar nada. Comprueba que las tarjetas de red no estén en NAT sino en Virtual host only, así te será más fácil hacer las comprobaciones.
Por si te sirve de ayuda, en breve voy a meter más manuales, esta vez propios, dónde explicaré cómo usar LDAP e incluso con varios servicios: correo, samba,... para autenticar a los usuarios.... desde una máquina virtual para poder hacer las pruebas sin problemas

Doug182 dijo...

una pregunta, en que version de ubuntu estas haciendo la instalacion?...intentare hacerla con el ubuntu server 9.10...a ver que tal...Saludos!!

Doug182 dijo...

otra pregunta, este articulo es una alternativa del articulo:
Servidor Ldap en ubuntu o debian con html

o es necesario hacer primero el articulo del "Servidor LDap en ubuntu o debian con html" y despues hacer este "autenticacion en un sistema LDAP(OPENLDAP) ubuntu o debian"
espero me respondan...
de antemano gracias!!!!

Juan dijo...

este artículo como comentas es una continuación del anterior, en uno tienes la instalación del servidor y en este qué tienes que hacer en el cliente, de todos modos, esto está basado en la versión 8.10, para las versiones actuales intentaré colgar ya, un manual, si tengo un momento libre este fin de semana lo colgaré ya.
saludos

Doug182 dijo...

ok Juan, dejame decirte que ya tengo instalado Ldap en la maquina que servira como servidor, entonces (para ver si entendi) quieres decir que todo este articulo se tiene que hacer en la maquina que sera el cliente? o todavia existe en este articulo cosas por configurar en el servidor donde esta instalado Ldap??

nuevamente gracias por tomarte el tiempo de contestar, estare pendiente con los manuales que estas por postear.

Sigue Adelante!!!!!

Juan dijo...

he colgado ya el tema de LDAP más actualizado:
http://tecnoloxiaxa.blogspot.com/2010/05/servidor-ldap-en-ubuntu.html
espero te sea útil.
saludos

Israel dijo...

Muchas gracias por tus tutos, fueron de mucha utilidad y al fin puede entender sobre este tema. Solo una pregunta Como hago para montar los directorios del cliente?.

jrbustosm dijo...

Hola, muchas gracias por el tutorial, lo he seguido pero me surgió un problema, monte la autenticación de usuarios en el servidor LDAP con el mismo servidor y ningún problema, luego traté de seguir el tutorial para montar la autenticación de usuarios en un cliente, y ahora este servidor cliente no me permite acceder (ni con usuarios fuera de LDAP), traté de modificar el archivo de configuración nsswitch.conf con un live cd para volver al sistema de autenticación básico, y ahora esta peor, que puedo hacer? como puedo volver al sistema de autenticación por defecto de linux?

Juan dijo...

Hice todos tus pasos.. y cuando quise entrar a root no pude.. quise poner smbldap-usermod -u 0 -d /root -s /bin/bash root pero no me dejo porque no tenia el paquete smbldap, el cual no puedo instalar porque no puedo autenticarme con root... :S alguna idea? :(