De vez en cuando retomo temas viejos que, recurrentemente, vuelven a demostrarse útiles, aunque no termine de decidirme a probarlos en profundidad. Conocí el protocolo LDAP allá por 1997, cuando trabajaba en una empresa grande que necesitaba crear un sistema de correo flexible y ampliable… Y netscape les vendió la solución completa que incluía un directorio LDAP integrado.
Poco depués decidimos utilizar el LDAP como repositorio central de datos de organización en nuestro sistema de workflow (hace 11 años). Aunque no voy a desarrollar aquí la historia del LDAP, si teneis curiosidad podeis ver la wikipedia, y de ahi iros al RFC del LDAP v3, o una buena introduccion al protocolo aqui.
El caso es que se disponían servidores gratuitos y librerías de acceso para crear clientes en C, C++ y Java, lo que hace que sea algo «universalmente» accesible. Pero a lo que vamos, ¿qué quiero montar?
Mi idea es mantener un servidor centrar de LDAP replicado conteniendo información sobre usuarios de mi empresa, de tal manera que todos los sistemas se autentiquen contra ese servidor (correo, cuentas linux, intranet, erp, workflow, etc.) y no haya que guardar bases de datos distintas con el usuario y su password.
Vayamos paso a paso:
1. El servidor LDAP
Hoy en día disponer de un servidor LDAP es muy sencillo, en linux disponemos de OpenLdap y, recientemente Fedora Directory Server. Los dos parten de raices comunes (el servidor slapd de la universidad de Michigan), pero han seguido caminos muy distintos en su desarrollo. Al final lo que importa es el esquema soportado y la robusted del mismo. En mi caso me decidí por openldap simplemente porque está disponible en forma de paquete para todas mis distribuciones favoritas.
El procedimiento de instalación es muy fácil:
Para CentOS / Fedora / RHEL:
yum install openldap-servers openldap-clients openldap
o bien en ubuntu:
sudo apt-get install slapd ldap-utils
Generalmente eso nos deja el servidor instalado y listo para funcionar pero con una configuración por defecto que no nos suele bastar. Para ello hay que configurar lo siguiente:
Archivo /etc/openldap/slapd.conf (RH) o /etc/ldap/slapd.conf (ubuntu)
Hay que incluir, como mínimo estas líneas:
include /etc/openldap/schema/misc.schema
suffix "dc=digimate,dc=biz"
rootdn "uid=admin,dc=digimate,dc=biz"
rootpw adminpw
o bien utilizar dpkg-reconfigure slapd
Una vez hecho esto, arrancamos el servidor y probamos a ver si funciona…
service ldap start
o
sudo /etc/init.d/slapd start
Para probar:
ldapsearch -x -h localhost -D "uid=admin,dc=digimate,dc=biz" -wadminpw
Nos debería devolver algo como esto:
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
2. Migrar los datos
Lo más normal (y lo que quería hacer) era almacener los datos de los usuarios que ya tenía en uno de los ordenadores (el servidor de correo), para ello lo mejor es usar las MigrationTools.
En CentOs / Fedora / RH ya se encuentran instaladas junto con los servidores en /usr/share/openldap/migration/
, en ubuntu hay que instalarlas: sudo apt-get install migrationtools
y se isntala en /usr/share/migrationtools
.
Para que funcione, hay que editar el archivo migrate_common.ph y cambiar estas líneas:
$DEFAULT_MAIL_DOMAIN = "digimate.biz";
$DEFAULT_BASE = "dc=digimate,dc=biz";
$DEFAULT_MAIL_HOST = "mail.digimate.biz";
$EXTENDED_SCHEMA = 1;
Ahora, para migrar, nada más sencillo que :
export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
./migrate_aliases.pl /etc/aliases /tmp/aliases.ldif
Si no ha dado errores, se pasa a revisar los archivos generados y a introducirlos en LDAP:
ldapadd -h localhost -D "uid=admin,dc=digimate,dc=biz" -W -c -x -f /tmp/base.ldif
ldapadd -h localhost -D "uid=admin,dc=digimate,dc=biz" -c -W -x -f /tmp/group.ldif
ldapadd -h localhost -D "uid=admin,dc=digimate,dc=biz" -c -W -x -f /tmp/hosts.ldif
ldapadd -h localhost -D "uid=admin,dc=digimate,dc=biz" -c -W -x -f /tmp/passwd.ldif
ldapadd -h localhost -D "uid=admin,dc=digimate,dc=biz" -c -W -x -f /tmp/aliases.ldif
Con esto ya tendremos la mayoría de nuestra información en el directorio… Ahora solo queda utilizarla con «sabiduría». Os recomiendo, antes que nada volver a modificar el slapd.conf para dejar la autenticacion así:
rootdn "uid=root,ou=People,dc=digimate,dc=biz"
#rootpw adminpw
De tal forma que el usuario privilegiado del directorio sea nuestro usuario root.
En el siguiente artículo os mostraré como utilizar este servidor con los distintos clientes.
Muchas gracias!
Ha funcionado perfectamente salvo por el $EXTENDED_SCHEMA = 1; que lo he tenido que dejar a 0 pq si no no me añadia el fichero de passwords!
Ahora a por la segunda parte!