¿Usuarios de Directorio Activo en OpenLDAP?

¿Es eso posible?, ¿podemos migrar usuarios de Active Directory de Microsoft a un OpenLDAP? La respuesta a ambas preguntas es sí, y a lo largo de esta entrada se comentarán una serie de  consideraciones ha tener en cuenta, cómo compilar/configurar un OpenLDAP para que soporte las nuevas entradas y algunas herramientas útiles para estos menesteres.

Consideraciones ha tener en cuenta

El principal escollo con el que nos vamos a encontrar a la hora de migrar datos ente ambos sistemas es la obtención de contraseñas del Active Directory. Aunque OpenLDAP y Active Directory son implementaciones del protocolo LDAP, son muy distintas entre sí a la hora de persistir las contraseñas. Mientras que OpenLDAP guarda la contraseña, a no ser que se indique lo contrario, como un atributo más de un usuario (encriptada por supuesto), Active Directory almacena esta información en la base de datos del SAM (Security Account Manager) encriptada con el algoritmo Lan Manager, por lo que al consultar la información de un usuario con un cliente LDAP no aparecerá dato alguno sobre la contraseña y habrá que recurrir a otras herramientas para su obtención.

Cómo configurar un OpenLDAP

Cómo se ha mencionado anteriormente las contraseñas en Active Directory se almacenan encriptadas con LanManager, así que el principal esfuerzo, a la hora de configurar OpenLDAP, será dar soporte a dicho algoritmo de hashing. De este modo cuando un usuario intente autenticarse, nuestro sistema deberá ser capaz de encriptar con dicho algoritmo la contraseña que proporcione el usuario y comprobar si se corresponde con el hash almacenado para él. Para que nuestro Open LDAP sea capaz de realizar dicha tarea será necesario compilar los fuentes con la opción --enable-lmpasswd. A continuación se especifica cómo realizar esta tarea sobre Debian:

  1. Instalar en nuestro entorno los paquetes necesarios para llevar a cabo labores de construcción/compilación:
    dev:~# aptitude install build-essential
  2. Intalaremos las dependencias con Berkeley DB necesarias para OpenLDAP (utilizaremos paquetes para simplificar el proceso):
    dev:~# aptitude install libdb4.4-dev openssl-dev
  3. Ejecutaremos ldconfig para cargar las librerías compartidas (este paso podríamos obviarlo):
    dev:~# ldconfig
  4. Descargaremos los fuentes y descomprimimos:
    dev:~/dowloads# wget ftp://ftp.OpenLDAP.org/pub/OpenLDAP/openldap-release/openldap-<version>.tgz
    dev:~/dowloads# tar -xzf openldap-<version>.tgz
  5. Ahora procederemos a compilar la herramienta con las siguientes instrucciones:
    dev:~/dowloads/openldap-<version># ./configure --prefix="/opt/openldap" --enable-lmpasswd
    dev:~/dowloads/openldap-<version># make depend
    dev:~/dowloads/openldap-<version># make
    dev:~/dowloads/openldap-<version># make test
    dev:~/dowloads/openldap-<version># make install

Ya tenemos instalado servidor de LDAP en el directorio /opt/openldap y sólo nos quedará configurarlo según nuestras necesidades. A continuación se establecerá  una configuración básica con la que poder probar la autenticación.

  1. Editaremos el fichero slapd.conf (/opt/openldap/etc/openldap/slapd.conf) en el que se modificarán las siguientes entradas:

    include      /opt/openldap/etc/openldap/schema/core.schema
    include      /opt/openldap/etc/openldap/schema/cosine.schema
    include      /opt/openldap/etc/openldap/schema/nis.schema

    suffix       "o=mrpotatoe,c=es"
    rootdn       "cn=admin,o=mrpotatoe,c=es"
    rootpw       admin
  2. Ahora crearemos un fichero ldif  (/tmp/carga.ldif) en con algunos datos a persistir:
    dn: o=mrpotatoe,c=es
    objectclass: organization
    o: mrpotatoe

    dn: cn=admin,o=mrpotatoe,c=es
    objectclass: organizationalRole
    cn: admin

    # En este punto crearíamos un usuario con la contraseña 12345678
    # encriptada con lan manager para la realización de pruebas
    dn: cn=user,o=mrpotatoe,c=es
    objectClass: top
    objectClass: account
    objectClass: posixAccount
    cn: user
    gidNumber: 0
    homeDirectory: -
    uid: user
    uidNumber: 0
    userPassword:{lanman}0182BD0BD4444BF836077A718CCDF409

  3. Lo próximo será iniciar el servidor e introducir los datos necesarios para realizar las pruebas, para ello tendremos que ejecutar el siguientes comando:
    dev:~# su -c /opt/openldap/libexec/slapd
    dev:~# /opt/openldap/bin/ldapadd -xcWD 'cn=admin,o=mrpotatoe,c=es' -f /tmp/carga.ldif
  4. Una vez llegados a este punto podremos probar a autenticarnos contra nuestro openldap con el usuario de prueba que hemos creado. Para ello podremos utilizar cualquier cliente de LDAP.

Algunas herramientas útiles

A continuación se enumeran algunas herramientas para migrar usuarios de Directorio Activo a OpenLDAP:

  • PwDump
    Esta utilidad permite extraer las contraseñas en LM y en NTLM de los usuarios de un sistema SAM. Esta herramienta nos será útil para obtener las contraseñas de los usuarios de un directorio activo.
  • Apache Directory Studio
    Se trata de un cliente LDAP bastante potente que nos permitirá, además de navegar y consultar un LDAP, editar ficheros LDIF, crear y editar esquemas para OpenLDAP y Apache Directory Server, utilizar un Apache Directory Server embebido, etc.
Anuncios