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"):
Un nodo «People» donde se guardarán los usuarios
Un nodo «Groups» donde se guardarán los grupos
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.
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
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
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
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:
Detenga el demonio slapd del servidor maestro.
Reconfigure el archivo slapd.conf del servidor maestro para habilitar la replicación al nuevo servidor esclavo.
Exporte la base de datos del servidor maestro.
Configure el archivo slapd.conf
del servidor réplica.
Importe la base de datos del servidor maestro al servidor esclavo.
Re/inicie el proceso slapd del servidor réplica.
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.
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
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