taller sobre migración de active directory a ldap · república bolivariana de venezuela...

20
República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica de la Fuerza Armada Núcleo Caracas Cátedra: Defensa Integral 8vo Semestre Ing. Sistemas, Sección 02 Instructor: Tte. Crnel. (E) José Bermudez. Alumnos C.I. Edwin Huggins 12.638.382 Miguel Díaz 15.586.326 Yanis Chacón 18.154.159 Jonathan Palacios 12.382.075 Mauricio Ramirez 16.004.032 Caracas, Diciembre de 2011 Taller sobre Migración de Active Directory a LDAP

Upload: others

Post on 13-Oct-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

República Bolivariana de Venezuela

Ministerio del Poder Popular para la Defensa

Universidad Nacional Experimental Politécnica de la Fuerza Armada

Núcleo Caracas

Cátedra: Defensa Integral

8vo Semestre Ing. Sistemas, Sección 02

Instructor: Tte. Crnel. (E) José Bermudez.

Alumnos C.I. Edwin Huggins 12.638.382 Miguel Díaz 15.586.326

Yanis Chacón 18.154.159 Jonathan Palacios 12.382.075

Mauricio Ramirez 16.004.032

Caracas, Diciembre de 2011

Taller sobre Migración

de Active Directory a LDAP

Page 2: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Introducción

La finalidad principal de este documento es demostrar configurar y utilizar un Servidor de

directorio LDAP (Protocolo Ligero de Acceso a Directorios) en su máquina Linux.

Aprenderá cómo instalar, configurar, ejecutar y mantener el servidor LDAP (en nuestro

caso, Debian 6). Después, se demostrará cómo almacenar, recuperar y actualizar

información en su Directorio, utilizando las utilidades y clientes LDAP. El demonio o

programa servidor para el directorio LDAP se llama slapd y puede ejecutarse sobre

muchas plataformas UNIX diferentes.

He aquí una configuración sencilla del servidor, válida para empezar, pero fácil también de

actualizar a una configuración distinta más adelante, si lo desea. La información que se

presenta en este documento representa una buena forma de iniciarse en el uso del

protocolo LDAP.

Page 3: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

El protocolo DAP, X.500, es el protocolo de acceso a directorio de la pila OSI. El LDAP, del

inglés Lightweight Directory Access Protocol, es un protocolo que está implementado

sobre la pila TCP/IP y que surge como versión ligera al DAP, ya que este último requiere

bastantes más recursos que LDAP. Tenemos varias alternativas a la hora de elegir un

servidor LDAP, entre ellos los creados por la Universidad de Michigan y el servidor LDAP

de Netscape. OpenLDAP es la versión libre de este tipo de servidores.

Origen e influencias

Las compañías de telecomunicaciones introdujeron el concepto de servicios de directorio

a Tecnologías de Información y Redes de Computadoras, así su comprensión de los

requerimientos de directorios era bien desarrollado después de 70 años de producir y

manejar directorios de teléfonos. La culminación de este esfuerzo fue la

especificación X.500, un conjunto de protocolos producido por la Unión Internacional de

Telecomunicaciones (ITU por sus siglas en inglés) en la década de 1980.

Los servicios de directorio X.500 fueron accedidos tradicionalmente vía DAP (Directory

Access Protocol), que requería la pila de protocolos OSI (Open Systems Interconnection).

LDAP fue originalmente dirigido a ser un protocolo alternativo y ligero para acceder a

servicios de directorio X.500 a través de la pila de protocolos más simple (y ahora más

difundido) TCP/IP. Este modelo de acceso a directorio fue imitado de los

protocolos DIXIE Directory Assistance Service. Se usó inicialmente como un front-end o

interfaz final para X.500, pero también puede usarse con servidores de directorio únicos y

con otros tipos de servidores de directorio.

X.500 es un conjunto de estándares de redes de ordenadores de la ITU-T sobre servicios

de directorio, entendidos estos como bases de datos de direcciones electrónicas (o de

otros tipos). El estándar se desarrolló conjuntamente con la ISO como parte del Modelo

de interconexión de sistemas abiertos, para usarlo como soporte del correo electrónico

X.400.

Page 4: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Los protocolos definidos por X.500 incluyen, protocolo de acceso al directorio (DAP), el

protocolo de sistema de directorio, el protocolo de ocultación de información de

directorio, y el protocolo de gestión de enlaces operativos de directorio.

Dentro de la serie X.500, la especificación que ha resultado ser la más difundida no trata

de protocolos de directorio, sino de certificados de clave pública: X.509.

Servidores de directorio LDAP independientes pronto fueron implementados, así como los

servidores de directorio que soportaban DAP y LDAP. El último se hizo popular en

empresas debido a que eliminaba cualquier necesidad de desplegar una red OSI. Ahora,

los protocolos de directorio X.500 incluyendo DAP pueden ser usados directamente sobre

TCP/IP.

El protocolo fue creado originalmente por Tim Howes (University of Michigan), Steve

Kille (Isode Limited), y Wengyik Yeong (Performance Systems International) hacia 1993.

Un desarrollo más completo ha sido hecho por la Internet Engineering Task Force.

En las primeras etapas de ingeniería de LDAP, éste era conocido como Lightweight

Directory Browsing Protocol, o LDBP. Posteriormente fue renombrado dado que el ámbito

del protocolo había sido expandido para incluir no sólo navegación en el directorio y

funciones de búsqueda, sino también funciones de actualización de directorio.

LDAP ha influenciado protocolos posteriores de Internet, incluyendo versiones posteriores

de X.500, XML Enabled Directory (XED), Directory Service Markup

Language (DSML), Service Provisioning Markup Language (SPML), y Service Location

Protocol (SLP).

¿Qué es un servicio de directorio?

Un directorio es como una base de datos, pero en general contiene información más

descriptiva y más basada en atributos. La información contenida en un directorio

normalmente es lee mucho más de lo que se escribe. Como consecuencia los directorios

no implementan normalmente los complicados esquemas para transacciones o esquemas

Page 5: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

de reducción (rollback) que las bases de datos utilizan para llevar a cabo actualizaciones

complejas de grandes volúmenes de datos. Por contra, las actualizaciones en un directorio

son usualmente cambios sencillos de “todo o nada”, si es que se permiten en algo.

Los directorios están afinados para proporcionar una repuesta rápida a operaciones de

búsqueda o consulta. Pueden tener la capacidad de replicar información de forma amplia,

con el fin de aumentar la disponibilidad y la fiabilidad, y a la vez reducir el tiempo de

respuesta. Cuando se duplica (o se replica) la información del directorio, pueden

aceptarse inconsistencias temporales entre la información que hay en las réplicas,

siempre que finalmente exista una sincronización.

Existen muchas maneras distintas de proporcionar un servicio de directorio. Los diferentes

métodos permiten almacenar en el directorio diferentes tipos de información, establecer

requisitos diferentes para hacer referencias a la información, consultarla y actualizarla, la

forma en que protege al directorio de accesos no autorizados, etc. Algunos servicios de

directorio son locales, proporcionando servicios a un contexto restringido (por ejemplo, el

servicio de finger en una única máquina). Otros servicios son globales, proporcionando

servicio en un contexto mucho más amplio.

¿Cómo funciona LDAP?

El servicio de directorio LDAP se basa en un modelo cliente-servidor. Uno o más servidores

LDAP contienen los datos que conforman el árbol del directorio LDAP o base de datos

troncal. El cliente LDAP se conecta con el servidor LDAP y le hace una consulta. El servidor

contesta con la respuesta correspondiente, o bien con una indicación de dónde puede el

cliente hallar más información (normalmente otro servidor LDAP). No importa con qué

servidor LDAP se conecte el cliente: siempre observará la misma vista del directorio; el

nombre que se le presenta a un servidor LDAP hace referencia a la misma entrada a la que

haría referencia en otro servidor LDAP. Es ésta una característica importante de un

servicio de directorios universal como LDAP.

Page 6: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Estructura de directorio

El protocolo accede a directorios LDAP, que siguen la edición de 1993 del modelo X.500:

Un directorio es un árbol de entradas de directorio.

Una entrada consta de un conjunto de atributos.

Un atributo tiene un nombre (un tipo de atributo o descripción de atributo) y uno o más

valores. Los atributos son definidos en un esquema (véase luego).

Cada entrada tiene un identificador único: su Nombre distinguido (Distinguished Name,

DN). Este consta de su Relative Distinguished Name (RDN) construido por algunos

atributos en la entrada, seguidos del DN de la entrada del padre. Pensar en el nombre

distinguido como un completo nombre de archivo y el nombre distinguido relativo como

el nombre de archivo relativo en un folder.

Se debe tener cuidado con el hecho de que un nombre distinguido puede cambiar en el

tiempo de vida de una entrada, por ejemplo, cuando las entradas son movidas en el árbol.

Para hacer más confiables e identificar de manera no ambigua las entradas

un UUID podría ser proporcionado en el conjunto de los atributos operacionales de la

entrada.

Una entrada puede lucirse como esta cuando es representada en el formato LDAP Data

Interchange Format (LDIF) (LDAP por sí mismo es un protocolo binario).

Backends, objetos y atributos en LDAP

slapd se suministra con tres diferentes bases de datos de backend (dorsal, o base de datos

de segundo plano) entre las que elegir. Se trata de LDBM, una base de datos de gran

rendimiento basada en disco: SHELL, una interfaz de base de datos para órdenes

arbitrarias de UNIX o guiones (scripts) del intérprete de órdenes (shell); y PASSWD, una

sencilla base de datos de contraseñas.

Page 7: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

En el desarrollo de este documento, se da por supuesto que ha elegido la base de datos

LDBM.

La base de datos LDBM funciona asignando un identificador compacto de cuatro bytes,

único para cada entrada de la base de datos. La base de datos utiliza este identificador

para hacer referencia a entradas en los índices. La base de datos está compuesta de un

fichero índice principal, llamado id2entry, que mapea el identificador único de una

entrada en la representación en texto de esa misma entrada. También se da

mantenimiento a otros ficheros índice.

Para importar y exportar información de directorio entre servidores de directorios

basados en LDAP, o para describir una serie de cambios que han de aplicarse al directorio,

se usa en general del fichero de formato conocido como LDIF (siglas de "LDAP interchange

format", o formato de intercambio de LDAP). Un fichero LDIF almacena información en

jerarquías de entradas orientadas a objeto. El paquete de software LDAP que va a utilizar

incluye una utilidad para convertir ficheros LDIF a formato LDBM.

Un fichero LDIF corriente tiene este aspecto:

dn: o=Insflug, c=ES

o: Insflug

objectclass: organization

dn: cn=Luiz Malere, o=Insflug, c=ES

cn: Luiz Malere

sn: Malere

mail: [email protected]

objectclass: person

Como puede comprobar, cada entrada está identificada unívocamente por un nombre

distintivo (DN, "distinguished name"). El DN (nombre distintivo) está compuesto por el

nombre de la entrada en cuestión, más la ruta de nombres que permiten rastrear la

entrada hacia atrás hasta la parte superior de la jerarquía del directorio.

En LDAP, una clase de objetos define la colección de atributos que pueden usarse para

definir una entrada. El estándar LDAP proporciona estos tipos básicos para las clases de

objetos:

Page 8: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Grupos en el directorio, entre ellos listas no ordenadas de objetos individuales o de

grupos de objetos.

Emplazamientos, como por ejemplo:

El nombre del país y su descripción.

Organizaciones que están en el directorio.

Personas que están en el directorio.

Una entrada determinada puede pertenecer a más de una clase de objetos. Por ejemplo,

la entrada para personas se define mediante la clase de objetos person, pero también

puede definirse mediante atributos en las clases de

objetos inetOrgPerson, groupOfNames y organization. La estructura de clases de

objetos del servidor (su esquema) determina la lista total de atributos requeridos y

permitidos para una entrada concreta.

Los datos del directorio se representan mediante pares de atributo y su valor. Cualquier

pieza de información específica se asocia con un atributo descriptivo.

Por ejemplo el atributo commonName, o cn (“nombre de pila”), se usa para almacenar el

nombre de una persona. Puede representarse en el directorio a una persona llamada

Jonás Saqueiro mediante

cn: Jonás Saqueiro

Cada persona que se introduzca en el directorio se define mediante la colección de

atributos que hay en la clase de objetos person. Otros atributos que se usan para definir

esta entrada serán:

givenname: Jonás

surname: Saqueiro

mail: [email protected]

Page 9: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Los atributos requeridos son aquellos que deben estar presentes en las entradas que

utilicen la clase de objetos. Todas las entradas precisan del atributo objectClass, que

lista las clases de objeto a las que pertenece una entrada.

Los atributos permitidos son aquellos que pueden estar presentes en las entradas que

utilicen la clase de objetos. Por ejemplo, en la clase de objetos person, se requieren los

atributos cn y sn. Los atributos description (descripción), telephoneNumber (número

de teléfono), seeAlso (véase también), y userpassword (contraseña del usuario) se

permiten pero no se requieren.

Cada atributo tiene la definición de sintaxis que le corresponde. La definición de sintaxis

describe el tipo de información que proporciona ese atributo:

bin (binario)

ces (cadena con mayúsculas y minúsculas exactas - las mayúsculas y minúsculas

son significativas durante las comparaciones)

cis (cadena con mayúsculas y minúsculas ignoradas - las mayúsculas y minúsculas

no son significativas durante las comparaciones)

tel (cadena de número de teléfono - como cis, pero durante las comparaciones

se ignoran los espacios en blanco y los guiones "-")

dn ("distinguished name" - nombre distintivo)

Configuración del servidor LDAP

Para configurar el ldap haremos el típico configure, make y make install. El configure lo

haremos con las siguientes opciones:

$ ./configure --with-tls --enable-debug --enable-cache --enable-referrals --with-threads --enable-slapd --enable-slurpd

--with-tls nos permitirá tener soporte seguro a través de OpenSSL, por lo que deberemos

tener instaladas las bibliotecas de OpenSSL en nuestro sistema.

Page 10: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

--enable-slapd y --enable-slurpd nos crearán los ejecutables para el servidor OpenLDAP y

para el encargado de la replicación. Aunque este último no lo trataremos en este artículo,

nos puede venir bien tenerlo para un futuro próximo.

Puedes ver la documentación para otros tipos de opciones, pero yo creo que con esta es

suficiente para lo que tenemos pensado montar.

Después, para compilar el software, testearlo e instalarlo en el sistema, haremos:

$ make depend $ make $ cd tests $ make tests $ cd .. $ su # make install

Si todo ha ido bien y no ha fallado ni la compilación ni los testeos, tendremos instalados

los binarios en /usr/local/libexec y los ficheros de configuración en

/usr/local/etc/openldap.

Procedemos ahora a configurar el fichero de configuración del openLDAP, que es

/usr/local/etc/openldap/slapd.conf. Este fichero está estructurado en dos partes, una

primera con las opciones globales del OpenLDAP y otra con las definiciones de cada base

de datos (directorio) que queramos tener. Hay que resaltar que las opciones de este

fichero deben comenzar en la primera columna del fichero, ya que si no lo hacen así, serán

considerados continuaciones de la línea anterior.

Veamos pues un fichero slapd.conf de ejemplo para definir un directorio que contendrá

una base de datos de usuario para un sistema de autentificación:

# See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/nis.schema #include /usr/local/etc/openldap/schema/redhat/autofs.schema #include /usr/local/etc/openldap/schema/redhat/rfc822-MailMember.schema #include /usr/local/etc/openldap/schema/redhat/kerberosobject.schema ################################################################# #Los siguientes valores indican la ruta de los pid y los args. pidfile /var/run/slapd.pid argsfile /var/run/slapd.args # permisos para nuestra base de datos access to attr=userpassword

Page 11: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

by self write

by * read access to * by self write by dn=".+" read by * read #################################################################### # DEFINICION DE LAS BASES DE DATOS (DIRECTORIOS) #################################################################### # Base de datos por defecto a usar ldbm database ldbm # Sufijo o raiz(root) del directorio. Es el nodo raiz superior # de nuestro directorio ldap suffix "dc=bulmalug, dc=net" # El nombre distinguido del directorio manager rootdn "cn=Manager, dc=bulmalug, dc=net" # No es muy buena idea guardar la contraseña en texto llano, # pero la dejaremos asi al principio hasta que controlemos mas sobre LDAP rootpw secret # Aqui es donde se guardara los datos del directorio directory /var/lib/ldap

Veamos lo que definimos con este fichero de configuración. Primeramente, la parte de

configuración global, donde le indicamos los schemas que queremos que siga OpenLDAP

por medio de la orden include. Definimos los ficheros dónde se guardarán el pid y los

argumentos con qué se ha llamado al programa con pidfile y argsfile y por último, en la

sección global, definimos los ACLs para la clave.

A continuación tenemos la definición de la base de datos que vamos a usar. Si queremos

tener más de una base de datos podemos añadir más sentencias como estas que vienen a

continuación. Veámoslas:

database ldbm: Con esto definimos, a parte del inicio de la configuración de la

base de datos, el tipo de base de datos que queremos usar. Lo normal es usar

ldbm, pero otras opciones son passwd y shell.

suffix "dc=bulmalug, dc=net": Con esto definimos la jerarquía que usaremos, o

sea, bulma.net.

rootdn "cn=Manager, dc=bulmalug, dc=net": Aquí definiremos quién va a ser el

usuario administrador de esta base de datos, es como el root de un sistema unix.

rootpw secret: Aquí definimos cual va a ser la clave de root, secret en este caso.

Vemos que aquí la clave está en modo texto plano, totalmente desaconsejada,

Page 12: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

pero que, para hacer nuestras pruebas, nos sirve de momento. Después se debe

de cambiar a una clave encriptada con crypt, por ejemplo.

directory /var/lib/ldap: Directorio dónde se guardarán todos los datos del

directorio LDAP.

Si lo que quiere es usar otra jerarquía de internet, se puede cambiar las sentencias rootdn

a alguna que se adecue a vuestro caso, por ejemplo: "dc=eii,dc=us,dc=es".

Una vez que tenemos hecho todo esto, podemos proceder a lanzar el demonio. Lo normal

es lanzarlo a través de su script en /etc/init.d/, pero vamos a lanzarlo a mano hasta

comprobar que todo funciona bien. Lo hacemos con:

/usr/local/libexec/slapd -f /usr/local/etc/openldap/slapd.conf

Esto lanzará el servidor en modo demonio, pero podemos añadirle la opción "-d n", para

obtener el debug por pantalla, siendo n el nivel de debug que queremos.

Para comprobar que el servidor está funcionando, ejecutamos el siguiente comando:

$ ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts

lo que debe devolver debe ser algo parecido a:

dn: namingContexts: dc=bulmalug,dc=net

Si has obtenido algo parecido a eso, es que el servidor está funcionando correctamente y

ya podemos agregar las entradas iniciales al directorio.

La primera que vamos a añadir es la que va a sostener toda la estructura de los usuarios. O

sea, vamos a añadir una organización a la base de datos. Esta organización la

llamaremos bulma y estará sobre "dc=bulmalug,dc=net".

Todo el intercambio de datos con LDAP se hace con unos ficheros con un formato

especial. Este formato es el LDIF, LDAP interchange format El fichero que utilizaremos

para añadir la entrada original será este, llamemosle prueba.ldif:

Page 13: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

####################################

dn: dc=bulmalug,dc=net objectclass: dcObject objectclass: organization o: bulma dc: bulmalug dn: cn=Manager,dc=bulmalug,dc=net objectclass: organizationalRole cn: Manager ####################################

Lo añadiremos al directorio con el comando siguiente, que nos pedirá la clave del

Manager:

$ ldapadd -x -D "cn=Manager,dc=bulmalug,dc=net" -W -f prueba.ldif

Una vez hecho esto ya podemos añadir el resto de datos al ldap. Una vez añadidos los

datos, que veremos en la siguiente sección, podemos comprobarlos con este comando:

$ ldapsearch -x -b 'dc=bulmalug,dc=net' '(objectclass=*)'

Este comando nos tiene que devolver una salida en formato LDIF con todos los datos en

que están en el directorio.

Configuración del servidor en modo seguro

Hasta ahora lo que hemos hecho ha sido configurar un servidor OpenLDAP para que

funcione por el puerto estándar, es decir, el puerto 389, que realiza las conexiones sin

cifrar. Para configurar el servidor en modo seguro, debemos tenerlo funcionando

correctamente por el puerto 389, tal y como hemos explicado en los apartados anteriores,

así como asegurarnos de que fue compilado con soporte OpenSSL.

OpenLDAP tiene dos formas de comunicación segura, SSL y TLS. SSL opera en otro puerto,

el 636 y, desde el principio, realiza las comunicaciones encriptadas en modo seguro. TLS,

por contra, es una solución más moderna que utiliza el puerto estándar 389 para iniciar las

comunicaciones y que, después, cambia a modo seguro a través del citado puerto 636.

Page 14: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Es conveniente tener los dos tipos activados, ya que no todas las aplicaciones cliente

soportan este método, e incluso hay aplicaciones que no soportan las transmisiones

seguras. Para las transmisiones seguras hace falta un certificado en formato PEM para la

llave SSL. Normalmente, se necesitaría que una organización dedicada a generar

certificados nos proporcionase una, pero como, normalmente, el OpenLDAP lo vamos a

usar en la red local, no a través de internet, ni para hacer comercio electrónico, basta con

que la generemos nosotros mismos. Para generar el certificado, debemos irnos al

directorio /usr/share/ssl/certs y allí ejecutar el comando:

# make slapd.pem

Esto nos creará un certificado, con lo que nos irá preguntando: Nombre del equipo, e-mail

del administrador, Organización, etc. Esto es, simplemente, la ejecución de un archivo

makefile que lo que hace es llamar a varias utilidades para generarlo. Si lo queremos hacer

a mano podemos hacer lo siguiente:

# /usr/bin/openssl req -newkey rsa:1024 -keyout temporal1 -nodes -x509 -days 365 -out temporal2 # cat temporal1 > slapd.pem # echo "" >> sldap.pem # cat temporal2 >> slapd.pem # rm -f temporal1 temporal2

Este comando crea una llave que se firma por sí misma. Esto no es lo normal en los

certificados seguros, pero, como hemos dicho, no pasa nada, ya que somos nosotros los

que vamos a utilizar estos en la red local privada. (Aunque siempre se puede confiar en

un Certification Authority, previo pago, claro).

Esta llave tiene que ser de sólo lectura para el usuario que ejecuta openldap. Si cualquier

otro usuario tiene acceso a esta llave, la seguriddad puede quedar comprometida.

Para configurar el servidor OpenLDAP para que utilice la llave correspondiente, tenemos

que editar el fichero /usr/local/etc/openldap/slapd.conf y añadir estas tres lineas:

TLSCipherSuite HIGH:MEDIUM:+SSLv2 TLSCertificateFile /usr/share/ssl/certs/slapd.pem TLSCertificateKeyFile /usr/share/ssl/certs/slapd.pem

Page 15: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Llegados a este punto, ya podemos reiniciar el servidor OpenLDAP para que utilice el

puerto seguro. Para ello, llamamos a slapd con el parámetro -h de esta forma:

# /usr/local/libexec/slapd -h '"ldap:/// ldaps:///"'

La opción -h le indica a OpenLDAP que tipo de transmisión queremos hacer, normal,

segura o ambas. Teóricamente, cuando comprobemos que funciona en modo seguro,

podemos cerrar el puerto inseguro, ejecutando slapd con -h "ldaps:///" solamente. Para

comprobar que tenemos el servidor escuchando en el puerto podemos hacer varias cosas:

$ netstat -a |grep LISTEN

para ver los puertos de escucha y podemos ejecutar esta orden de openssl para ver el

certificado que tengamos en el puerto 636 (openLDAP seguro):

$ openssl s_client -connect localhost:636 –showcerts

con lo que nos tiene que salir por pantalla los datos relativos al certificado que hemos

creado. Con esto ya tenemos constancia de que el servidor LDAP está funcionando en

modo seguro. Ahora sólo queda configurar los clientes Linux para que la autentificación la

hagan a través del directorio LDAP en vez de en modo local con /etc/passwd, utilizando

tanto el modo seguro como el no seguro.

El Objetivo del Proyecto

Hemos descrito todo lo anterior solo para poder realizar la migración desde un servidor

con Sistema Operativo basado en Windows Server (nosotros seleccionamos Windows

2003 Server Standart Edition) hacia un servidor con Sistema Operativo basado en Linux

(que según el requerimiento especificado es el Debian 6).

Para lograr nuestro objetivo, se debe tener configurado el servidor Windows Server con

las condiciones idóneas, es decir, con la capacidad manejar un dominio (que en nuestro

caso hemos decido labunefa.edu.ve) y con el servicio o programa Active Directory

Page 16: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

instalado y con varios usuarios establecidos o almacenados. Se debe obtener la

información antes descrita en un archivo para poder realizar la migración hacia el servidor.

Luego de obtener dicho archivo, es necesario llevarlo hacia el servidor con Debian 6, con

el sistema OpenLDAP ya instalado como se describió en los puntos anteriores, y realizar la

instalación requerida para realizar el reemplazo de los servidores.

Consideraciones que se han de 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:

Page 17: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

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

Page 18: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

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.

Page 19: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

Conclusión

La información que se suele guardar en un directorio está formada por entradas. Cada

entrada es un conjunto de atributos (información) que se identifica a través de un nombre

distinguido, DN, Distished name en inglés. Cada uno de estos atributos es de un tipo

concreto y puede tener uno o varios valores. Estos atributos suelen ser nemónicos como

por ejemplo cn (common name) o mail que indicaría el nombre o email de una entrada en

el directorio.

La información se almacena en el directorio en forma de árbol jerárquico.

Tradicionalmente se almacenaban utilizando como raíz los distintos países, siendo los

hijos las distintas provincias, e hijos de estos las distintas organizaciones o compañías que

podía haber en una provincia. También se puede utilizar la jerarquía de internet para

definir la estructura de un directorio LDAP utilizando, por ejemplo, los nombres de

dominio. Así, la raíz podría ser net, un hijo, bulmalug y dentro de este los diversos

usuarios que pudiera tener, etc.

LDAP posee un atributo, objectClass, que permite definir qué datos van a ser obligatorios y

cuales opcionales a través de los esquemas (schemas). O sea, los esquemas van a ser

como definiciones de los datos que va a contener el directorio. OpenLDAP incluye varios

esquemas, pero podremos añadir o modificar los ya existentes para cumplir con nuestras

necesidades.

El acceso a la información del directorio, se hace a través de los nombres distinguidos, DN,

y de los RND, nombres distinguidos relativos. Estos se construyen a partir de una entrada,

concatenándole el DN de todos sus padres. Por ejemplo, para el ejemplo de bulma,

imaginemos que tenemos un autor que tiene de uid autor1, su DN sería "uid=autor1,

ou=autores, dc=bulmalug, dc=net". Para encontrar más información sobre el formato DN,

puedes consultar el RFC2253.

Page 20: Taller sobre Migración de Active Directory a LDAP · República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica

OpenLDAP permite, además, definir ACL (access control lists) para el acceso a los datos,

aparte de que permite transmitir los datos sobre una capa segura como OpenSSL. Así

mismo, OpenLDAP permite la replicación de los datos entre varios servidores OpenLDAP

para descongestionar los servidores.