viernes, 21 de mayo de 2010

Servidor LDAP en Ubuntu

Instalación y Configuración de OpenLDAP

El servido OpenLDAP nos provee de un modo sencillo de centralizar la autenticación de usuarios y servicios en una única base de datos de rápida lectura, de modo que podamos hacer que cualquier servicio ( ftp, web, correo,...) autoricen o no el acceso dependiendo de los datos, por ejemplo, de usuario y contraseña que hayamos configurado en el mismo.

1.- Instalación de OpenLDAP

En primer lugar instalamos el demonio servidor slapd, ldap-utils -paquete que contiene utilidades para el manejo de LDAP y db4.2-util – que proporciona herramientas para realizar algunas operaciones con bases de datos como pueden ser cargas, modificaciones o actualizaciones del formato de las mismas-:


sudo apt-get install slapd ldap-utils db4.2-util

Durante la instalación nos pedirá que introduzcamos una contraseña para identificar al administrador de ldap.

Por defecto, además, el sufijo del directorio coincidirá con el nombre de dominio del servidor. Por ejemplo si el FQDN (Fully Qualified Domain) es ldap.ejemplo.com, el sufijo por defecto será dc=example,dc=com. Si queremos cambiarlo lo podremos hacer usando dpkg-reconfigure dónde podremos configurar varias opciones de slapd (en nuestro caso no sería necesario ya que el dominio de nuestro equipo ya era el deseado: mczones.es).

sudo dpkg-reconfigure slapd

Nos aparecerá un asistente que nos pedirá los siguientes datos:

  • 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 base , habitualmente se utiliza el nombre del dominio. Ejemplo, si nuestro dominio es mczones.es, lo normal es que la base para nuestrodirectorio LDAP sea: dc=mczones,dc=es.

  • 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 nuestrodirectorio LDAP: mczones.es.

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

  • Contraseña que deseamos poner al usuario admin (administrador) del servidor LDAP. La solicitará 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 nos preguntará qué sistema utilizar. Lo recomendable es utilizar el sistema HDB.

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

2.- Configuración del servidor OpenLDAP

En versiones anteriores openldap se configuraba el comportamiento del servidor empleando únicamente el fichero slapd.conf, actualmente podemos hacer modificaciones dinámicamente -con lo que no es necesario parar y reiniciar el demonio slapd para realizar cada cambio- 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, también podremos emplear las herramientas de línea de comandos que hemos instalado. Por ejemplo para comprobar el árbol de directorio creado durante la instalación o tras la reconfiguración (nos pedirá la contraseña de administrador del sistema LDAP):

ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb

image

2.1 Instalación y configuración de phpLDAPadmin

PhpLDAPadmin es una aplicación web que nos permitirá acceder al directorio LDAP para poder crear y modificar elementos. Otros posibles exploradores LDAP libres podrían ser gq y Jxexplorer.

Para instalar phpldap admin:

sudo apt-get install phpldapadmin

Esto nos instalará también apache -el servidor web-. Si estamos en el servidor, simplemente teclearemos en la barra de direcciones de nuestro explorador web: http://localhost/phpldapadmin/. Si se produce el error : “Memory Limit Low. Your php memory limit is low -currently 16 M” deberemos aumentar la memoria, por ejemplo a 64M, en el fichero /etc/php5/apache2/php.ini
(editamos el fichero /etc/php5/apache2/php.ini y ponemos: memory_limit = 64M ; ) y reiniciamos el servidor apache: /etc/init.d/apache2 restart.

En la versión de phpLDAPadmin que he instalado (1.1.05-6) cuando entramos por primera vez, en el panel izquierdo nos aparece el dominio de ejemplo (example.com) en lugar del que hemos configurado; para solucionarlo editamos el fichero /etc/phpldapadmin/config.php y cambiamos las líneas:

$ldapservers->SetValue($i,'server','base',array('dc=example,dc=com')); por

$ldapservers->SetValue($i,'server','base',array('dc=mczones,dc=es'));

si además queremos que cuando nos solicite el login, también aparezca el dominio correcto en el campo nombre de usuario, deberemos sustituir también:

$ldapservers->SetValue($i,'login','dn','cn=admin,dc=example,dc=com'); por

$ldapservers->SetValue($i,'login','dn','cn=admin,dc=example,dc=com');

Tras realizar estos dos cambios deberemos reiniciar el servidor apache: /etc/init.d/apache2 restart.

En la versión de phpLDAPadmin que he instalado (1.1.05-6) cuando entramos por primera vez, en el panel izquierdo nos aparece el dominio de ejemplo (example.com) en lugar del que hemos configurado; para solucionarlo editamos el fichero /etc/phpldapadmin/config.php y cambiamos las líneas:

$ldapservers->SetValue($i,'server','base',array('dc=example,dc=com')); por

$ldapservers->SetValue($i,'server','base',array('dc=mczones,dc=es'));

si además queremos que cuando nos solicite el login, también aparezca el dominio correcto en el campo nombre de usuario, deberemos sustituir también:

$ldapservers->SetValue($i,'login','dn','cn=admin,dc=example,dc=com'); por

$ldapservers->SetValue($i,'login','dn','cn=admin,dc=example,dc=com');

Tras realizar estos dos cambios deberemos reiniciar el servidor apache: /etc/init.d/apache2 restart.

2.2 Creación de Unidades organizativas, grupos y usuarios con phpLDAPadmin

Una vez hemos entrado en el sistema como cn=admin,dc=mczones,dc=es y password -en mi caso- ldapadmin, podemos crear la estructura del dominio. Para ello pulsamos en crear nuevo objeto y seleccionamos “Organisational Unit” para crear las unidades organizativas, en mi caso:

image image

  • Grupos: Dentro de ella crearé los “Posix Groups” “contabilidad” , “desarrollo” y “otros” a los que pertenecerán todos los usuarios.
  •  

  • Usuarios: en ella crearé directamente los usuarios que pertenezcan al grupo “otros”. Igualmente para mantener el orden crearé dos unidades organizativas:

    • Contabilidad: En ella iré añadiendo los User Account de este departamento: c1 y c2 pertenecientes al posix group “contabilidad” con contraseña “1234”.

    • Desarrollo: en ella he añadido los “User Account” d1 y d2 pertenecientes al Posix Group Desarrollo con contraseña “1234”.

    • En la unidad organizativa Usuarios he creado el usuario juan.

3.- Configuración de los clientes: Autenticación con OpenLDAP

Una de las principales razones para usar LDAP es centralizar la autenticación de los usuarios en un único sistema servidor (ya sea para iniciar sesión, ftp, web, correo,...), en lugar de utilizar los clásicos archivos /etc/passwd, /etc/group y /etc/shadow. Para ello veremos las modificaciones que hay que realizar en un sistema Linux para que autentifique a los usuarios en un servidor LDAP, en primer lugar, será necesario instalar y configurar los paquetes libpam-ldap y libnss-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/.

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 como la que he usado yo, la 2.4.2). 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

3.1 Instalación y configuración de libpam-ldap

La instalación de la librería libpam-ldap se puede realizar ejecutando el comando (instalará ya todas librerías necesarias como libnss-ldap):

# apt-get install libpam-ldap

Nos lanzará un asistente que nos pedirá los siguientes datos, que se almacenarán en el fichero /etc/lapd.conf desde dónde podremos modificarlos en cualquier momento a posteriori (basado en la versión 2.4.2 de openldap):

  1. Quién es el servidor LDAP (nombre o IP) *en el caso de emplear la ip deberemos escribir ldap no ldapi, ya que sino resolverá el finger pero no nos permitirá autenticarnos: ldap://192.168.2.3/

  2. Cuál es la base de nuestro directorio LDAP (base DN): dc=mczones,dc=es

  3. Cuál es la versión de LDAP a utilizar: 3

  4. Hacer que las utiliadades password que usen ldap se comporte como si cambiaramos las locales:si

  5. Necesitamos conectarnos a la base de datos LDAP para recibir las entradas: NO

  6. Cuenta LDAP para el usuario root: cn=admin,dc=mczones,dc=es

  7. Contraseña del administrador.

Finalmente tendremos, por lo tanto, las siguientes líneas en el fichero /etc/ldap.conf

// Configurar en /etc/ldap.conf
host 192.168.2.3 //nombre o IP del servidor LDAP
base dc=mczones,dc=es
uri ldap://192.168.2.3
ldap_version 3
rootbinddn cn=admin,dc=mczones,dc=es
pam_password md5
nss_base_passwd ou=usuarios,dc=mczones,dc=es?sub
nss_base_shadow ou=usuarios,dc=mczones,dc=es?sub
nss_base_group  ou=grupos,dc=mczones,dc=es?sub
Tras el carácter “?”, se puede poner one (por defecto), base o sub; yo he empleado sub para que también compruebe los usuarios y contraseñas creados colgando de la unidad organizativa   “usuarios” -es decir en las unidades organizativas contabilidad y desarrollo-.



3.1 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
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis



3.2 Configuración de 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)




La configuración de los archivos comunes para emplear LDAP se puede hacer deimage modo automático tecleando en consola pam-auth-update que nos permite seleccionar el perfil a emplear. Si queremos que cada vez que entremos en una sesión se verifique si el usuario ya tiene un directorio personal (home) en el equipo para que si no es así sea creado (la primera vez me advertirá como se ve en la imagen que va a crear el directorio personal), deberíamos añadir la siguiente línea al final del fichero /etc/common-session:



session required pam_mkhomedir.so skel=/etc/skel/ umask=0022



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.



3.3 Probar la autentificación


image Ahora mismo ya deberíamos poder autentificarnos de modo correcto. Para probarlo podemos emplear el comando pamtest que está en el paquete libpam-dotfile:



sudo apt-get isntall libpam-dotfile



Podemos probar si funciona el cambo de contraseña sobre cualquier usuario sobre c2, por ejemplo.



También podemos usar el comando finger sobre usuarios que sólo estén en LDAP y en sistema local.image



Incluso podemos emplear, directamente el comando su desde la consola para cambiarnos a los usuarios que sólo estén dados de alta en el sistema LDAP.



Tras ello ya podremos cerrar sesión y entrar en los equipos como los usuarios dados de alta en LDAP:



image





image



4. Otros ficheros y directorios



Además de los citados ficheros se deberían tener presentes los siguientes:




  • Para logs: /var/log/syslog y /var/log/auth.log



  • Almacenar la Base de datos y los backups: /var/lib/ldap y /var/backups respectivamente



  • Fichero de configuración del demonio slapd en el servidor: /etc/default/slapd




para continuar viendo el resto de manuales Linux siga el enlace:administración de servidores con Linux


5. Enlaces







Samba PDC en Debian :: Improvisa :: Magazine Digital :: Informatica ...



Ubuntu Server PDC - Página 5 | jorge.herskovic | Jorge Herskovic



OpenLDAP-SambaPDC-OrgInfo-Posix - Community Ubuntu Documentation



Installing custom ldap schema 6.0 - Zimbra :: Wiki



OpenLDAPServer - Community Ubuntu Documentation



Linux Tutorial - Apache Web Login Authentication:



Configurar un servidor Controlador de Dominio con Samba y OpenLDAP en Ubuntu Server Hardy 8.04



En busca de la solución definitiva para la autenticación | CRySoL



How-To set up a LDAP server and its clients -- page 2 | Debian/Ubuntu ...



OpenLDAP Server


9 comentarios:

Doug182 dijo...

Hola Juan, antes que nada felicidades por toamrte el tiempo de hacer este estupendo tutorial.

pues fijate que ya tengo instalado el phpldapadmin y tambien tengo creadas las cuentas asi como tu las tienes en el tutorial, tambien hice lo que es desde el paso # 3 a la maquina que seria el cliente-linux, pero al llegar al paso # 3.3 prueba de autenticacion

digito: finger juan

y me da el resultado que tu muestras, cuando ejecuto el otro comando de:

pamtest passwd juan

me pide el password, le digito el password y dentro de un rato me dice:

Failed to authenticate: Authentication failure

que será lo que no me deja autenticar, espero me puedas ayudar a resolverlo.

de antemano muchisimas gracias!!!!

Doug182 dijo...

Hola, ya logre hacer funcionar todo asi como dice este tutorial, pero me gustaria que publicaras algo donde integres samba basado en este tutorial....

Adelante amigo!!!!

Doug182 dijo...

Hola Juan, gracias por tomarte el tiempo de leer este comentario, tengo una pregunta...

fijate que tengo corriendo ldap y samba y para la administracion uso phpldapadmin, lo que me han pedido que haga es que en vez de usar db4.8-util integre lo que es postgresql, he buscado algun tutorial en la web pero no he tenido exito, lo que al final quieren que haga es que tenga ldap+samba+postgresql+postfix corriendo en el servidor, no se si tu podrias ayudarme a encontrar un tutorial o tu tengas alguna idea de lo que me piden,

de antemano gracias por tu tiempo...!!!

Juan dijo...

hola, siento no poder echarte una mano, no conozco ningún manual dónde trate el tema y yo nunca lo he empleado, espero que tengas suerte y encuentres algo de ayuda.
saludos y gracias por tus comentarios.
De todos modos échale un vistazo a esta página que es de unos compañeros de informática y es bastante posible que tengan algo que te sea de ayuda:
http://informatica.iessanclemente.net/manuais/index.php/Portada

Pancho Jay dijo...

Juan,

Muy bueno el tutorial, hace tiempo que buscaba algo asi.
Me gustaria saber como puedo configurar para que las carpetas home de los clientes se almacenen en el servidor, de modo de tener centralizados los backups.

Desde ya muchas gracias.

Francisco

DonPimPon dijo...

Hola que tal. estoy probando esta linea


ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb

le introduzco el password
Enter LDAP Password:

y me da este error
ldap_bind: Invalid credentials (49)

lo curioso del tema es que con phpldapadmin si que puedo entrar en la gestión del ldap y el resto del manual funciona.

alguien sabe lo del error de autenticación ?

gracias

luquedi dijo...

Para Pancho.

Lo que quieres se consigue con NFS.

luquedi dijo...

Hola.

No me pide la contraseña del administrador al instalar.

¿Dónde se debe poner?
o ¿Tiene alguna por defecto?

Gracias.

LuciferianJ dijo...

Hola Doug182 hace algún tiempo publicaste que tenías el error al realizar pamtest passwd (Failed to authenticate: Authentication failure) a mi me está sucediendo, me podrías contar como lo solucionaste... gracias!