Servidor OpenLDAP

LDAP significa Protocolo de Acceso a Directorios Ligero ("Lightweight Directory Access Protocol") y es una versión simplificada del protocolo X500. La configuración del directorio de esta sección abordará el tema de la autentificación. Sin embargo, un directorio LDAP puede utilizarse para muchas cosas: autentificación, directorio compartido (para clientes de correo), en todo tipo de aplicaciones. LDAP es un estándar muy usado.

Para describir rápidamente un LDAP, toda la información se almacena en un árbol. Tendrá que determinar usted mismo la arborescencia del directorio (el Árbol de Información del Directorio, DIT, por sus siglas en inglés). Comenzaremos con un árbol básico, con dos nodos por encima de la raíz ("root"):

En primer lugar tendrá que definir cuál será la raíz de su LDAP. Por defecto, el árbol será definido por su dominio de Internet. Si su dominio es example.com (usado en los ejemplos), la raíz será be dc=example,dc=com.

Instalación

Comience instalando el demonio del servidor ldap (slapd) en el servidor; instale los siguientes paquetes: slapd y ldap-utils.

Introduzca su dominio cuando se le solicite y la contraseña que desee usar para el administrador del directorio.

Hay que realizar algunos cambios a la configuración predeterminada. Primero, ponga la contraseña de administrador en el archivo de configuración (en lugar de hacerlo en el directorio) modificando el archivo /etc/ldap/slapd.conf.

No utilice contraseñas en texto en claro. Utilice slappasswd para generar una contraseña encriptada.

$ slappasswd
Nueva contraseña:
Verificar contraseña:
{SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m

En este ejemplo se muestra lo que ocurre cuando se usa la cadena «secreto» como contraseña. (Dada la naturaleza del esquema de encriptación SSHA, su resultado será diferente.)

Después modifique /etc/ldap/slapd.conf copiando y pegando la cadena generada.

# Make sure you edit or add these directives after the first 'database' directive.

suffix          "dc=example,dc=com"
directory       "/var/lib/ldap"
rootdn          "cn=admin,dc=example,dc=com"
rootpw          {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m

Población del LDAP

El directorio ha sido creado durante la instalación, ahora es el momento de poblarlo. Será poblado con una entrada "clásica", que será compatible con directorio (por ejemplo, para un directorio compartido), con cuentas clásicas (para una aplicación web) y con cuentas Unix (posix).

El directorio LDAP puede ser alimentado con un archivo ldif (ldif significa «formato de intercambio de directorio ldap»). Cree este archivo de texto de ejemplo init.ldif en algún lugar en su sistema:

dn: dc=example,dc=com
objectClass: dcObject
objectClass: organizationalUnit
dc: example
ou: Example Dot Com

dn: ou=people,dc=example,dc=com
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups

dn: uid=john,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 1000
gidNumber: 10000
userPassword: password
gecos: John Doe
loginShell: /bin/bash
homeDirectory: /home/john
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: john.doe@example.com
postalCode: 31000
l: Toulouse
o: Example
mobile: +33 (0)6 xx xx xx xx
homePhone: +33 (0)5 xx xx xx xx
title: System Administrator
postalAddress: 
initials: JD

dn: cn=example,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: example
gidNumber: 10000

En el ejemplo anterior se crearon un usuario y un grupo. En otro ejemplo puede encontrarse objectClass: top añadido en cada entrada. Éste es el comportamiento predeterminado, así que no tiene que añadirlo explícitamente.

A continuación añada sus entradas al LDAP:

  • detenga el demonio LDAP: sudo /etc/init.d/slapd stop

  • elimine el contenido añadido automáticamente durante la instalación: sudo rm -rf /var/lib/ldap/*

  • añada el contenido sudo slapadd -l init.ldif

  • inicie el demonio LDAP: sudo /etc/init.d/slapd start

Es posible verificar que el contenido haya sido añadido correctamente con las herramientas del paquete ldap-utils. Para realizar una búsqueda en el directorio LDAP:

ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn
dn: uid=john,ou=people,dc=example,dc=com
cn: John Doe
sn: Doe
givenName: John

Una explicación rápida:

  • -x es porque no usaremos el método de autentificación SASL (por defecto)

  • -LLL desactivar información LDIF de impresión

Configuración de ACL

La autentificación requiere tener acceso al campo de contraseña, lo cual no debería ser posible por defecto. Otro problema es que durante el cambio de contraseña usando passwd, shadowLastChange tiene que ser accesible también. El siguiente código es un ejemplo de una configuración de ACL que permite acceder a shadowLastChange:

access to attr=shadowLastChange
        by dn="cn=manager,dc=example,dc=com" write
        by self write
        by * read

Replicación de LDAP

El servicio LDAP se convierte a menudo en un servicio imprescindible en un sistema de información, pues todo depende de LDAP: autentificación, autorización, sistema de correo, etc.; por lo que es una buena idea preparar un sistema redundante. Es fácil de hacer, aquí le ofrecemos una guía rápida.

La replicación se basará aquí en una relación maestro-esclavo ("master-slave"). Antes de poner en práctica la replicación de LDAP realice lo siguiente:

  1. Detenga el demonio slapd del servidor maestro.

  2. Reconfigure el archivo slapd.conf del servidor maestro para habilitar la replicación al nuevo servidor esclavo.

  3. Exporte la base de datos del servidor maestro.

  4. Configure el archivo slapd.conf del servidor réplica.

  5. Importe la base de datos del servidor maestro al servidor esclavo.

  6. Re/inicie el proceso slapd del servidor réplica.

  7. Re/inicie el proceso slapd del servidor maestro.

Recuerde que las modificaciones han de realizarse SIEMPRE en el maestro. Si modifica el esclavo, perderá los cambios.

LDAP maestro

En el maestro, debe modificar la sección de la base de datos del archivo /etc/ldap/slapd.conf para añadir la instrucción de réplica. El siguiente ejemplo muestra una réplica en ldap-2.example.com con el usuario «Manager» y la contraseña «secret».

replica uri=ldap://ldap-2.example.com:389 binddn="cn=Manager,dc=example,dc=com" bindmethod=simple credentials=secret

replogfile      /var/lib/ldap/replog

Exporte la base de datos del maestro usando slapcat. Después copie master.ldif al esclavo usando scp u otra herramienta.

user@master:~$ sudo slapcat -l master.ldif

LDAP esclavo

En el esclavo, debe autorizar al maestro para actualizar la base de datos LDAP. Añada las siguientes líneas al archivo /etc/ldap/slapd.conf en la sección de la base de datos ("database"):

updatedn        cn=Manager,dc=example,dc=com
updateref       ldap://ldap-1.example.com

Importe el archivo master.ldif usando slapadd.

user@slave:~$ sudo slapadd -c -l master.ldif

Reinicie el servidor maestro.

user@master:~$ sudo /etc/init.d/slapd start

Reinicie el servidor maestro.

user@slave:~$ sudo /etc/init.d/slapd start