LDAP/Populating

De Astillas.net

Introducción

Para añadir el contenido y la estructura inicial a una base de datos vía LDAP se emplea el programa ldapadd junto con los datos iniciales en formato LDIF.

En nuestro caso queremos que existan dos cosas:

  • Un directorio con cuentas de usuario para conceder acceso a un servicio.
  • Una libreta de direcciones común para todos los usuarios.
  • Una libreta de direcciones personal para cada usuario.

El archivo de datos comienza con la raíz del árbol de entradas:

dn: dc=aprenda,dc=com
objectclass: top
objectclass: dcObject
objectclass: organization
o: Equipo aprenda
dc: aprenda.com

Herramientas

Si no indico otra cosa los siguientes parámetros son comunes a las herramientas abajo descritas. Estas herramientas, además, son de tipo administrativo y no requiren al servidor LDAP en funcionamiento.

Parámetro común Finalidad
-u No grabar nada en la base de datos.
-v Habilitar el modo verboso.
-f archivo Especificar un archivo de configuración diferente al estándar (que en Debian está en /etc/ldap/slapd.conf).

slaptest

Verifica el archivo de configuración del servidor LDAP analizándolo conforme a las reglas generales y específicas del backend de la base de datos.

# slaptest -u -v
/etc/ldap/slapd.conf: line 92: <replogfile> keyword is obsolete (ignored)
/etc/ldap/slapd.conf: line 103: rootdn is always granted unlimited privileges.
/etc/ldap/slapd.conf: line 122: rootdn is always granted unlimited privileges.
/etc/ldap/slapd.conf: line 135: rootdn is always granted unlimited privileges.
config file testing succeeded
#

slapadd

Inicializa el directorio ya que abre la base de datos que lo contiene y carga las entradas especificadas sin preguntar más.

Puede usarse de esta forma:

# slapadd -l datos_en_formato_ldif

y emplear durante las pruebas estos otros parámetros.

Parámetro Finalidad
-b sufijo_raíz Seleccionar base de datos por sufijo.
-n número Seleccionar base de datos por número.
-j número_de_línea Saltar al número de línea indicado y continuar desde allí la carga de entradas.

slapcat

Obtiene el contenido de un directorio LDAP en formato LDIF adecuado para suministrarlo como entrada a slapadd y de esa forma migrar un directorio a otro.

Las entradas están ordenadas según como aparezcan en la base datos y no en orden jerárquico e incluyen todos los atributos almacenados.

Entre otros parámetros permite emplear un filtro y discriminar por base de datos con un sufijo:

Parámetro Finalidad
-a filter Filtro de selección de entradas.
-b sufijo Sufijo raíz con el que seleccionar la base de datos.
-n numero Número con el que seleccionar la base de datos.
-s subárbol Subárbol desde el que comenzar la búsqueda de entradas. Implica el parámetro -b si no se ha utilidado.

migrationtools

Este paquete de programas facilita mucho el paso de las bases de datos del sistema a un directorio LDAP.

La versión empaquetada en Debian incluye un archivo de configuración en /etc/migrationtools/migrate_common.ph que está enlazado en el directorio donde están los scripts (/usr/share/migrationtools); recomiendan modificar su contenido para ajustarlo a la instalación y proceder a ejecutar los programas de migración desde allí.

Nota: el planteamiento anterior no me gusta en absoluto, demasiado forzado, pero dado que sólo va a realizarse una vez durante la migración (y ésta tampoco se debería repetir muy a menudo) podré vivir con ello.

La siguiente tabla resume los parámetros que pueden cambiarse:

Parámetro en archivo Variable de entorno Uso y significado Valor predeterminado
$DEFAULT_MAIL_DOMAIN LDAP_DEFAULT_MAIL_DOMAIN Si es necesario se emplea para:
  • Para construir el sufijo raíz del directorio.
  • Para formar el dominio (REALM) de Kerberos.
  • Para crear un esquema extendido y asociar el directorio con un dominio de correo.
padl.com
$DEFAULT_MAIL_HOST LDAP_DEFAULT_MAIL_HOST mail.padl.com
$DEFAULT_BASE LDAP_BASEDN Sufijo raíz del directorio. Si no se proporciona se construye partiendo del dominio de correo. dc=padl,dc=com
$EXTENDED_SCHEMA LDAP_EXTENDED_SCHEMA No (0)
$USE_UTF8 Si está habilitado emplea el juego de caracteres UTF-8, en lugar de usar un ascii de 7bit con la transformación de algunas letras iso8859-1. Sí (1)
$IGNORE_UID_BELOW Ignora los usuarios cuyo identificador esté por debajo de lo indicado. 1000
$IGNORE_GID_BELOW Ignora los grupos cuyo identificador esté por debajo de su valor. 100
$IGNORE_UID_ABOVE Ignora todos los usuarios cuyo identificador esté por encima del valor indicado. 9999
$IGNORE_GID_ABOVE Ignora todos los grupos cuyo identificador esté por encima del valor indicado. 9999

Revisando este archivo de configuración vemos que también existen otros valores que pueden ser conveniente cambiar; hablo del hash $NAMINGCONTEXT que relaciona el origen de los datos con su situación jerárquica en el directorio LDAP. Por ejemplo la clave

$NAMINGCONTEXT{'passwd'} = "ou=People";

es la encargada de situar las cuentas de usuario en la unidad organizativa correspondiente.

La lista de programas cubre un montón de bases de datos textuales del sistema y algunos de ellos pueden emplearse en línea o desconectados. Es decir, con el servidor LDAP detenido o en funcionamiento.

Un ejemplo de uso es el siguiente:

# cd /usr/share/migrationtools
# ./migrate_passwd.pl 
...
...
...

dn: uid=pelaez,ou=People,dc=example
uid: pelaez
cn: Pelaez Cansado
givenName: Pelaez
sn: Cansado
mail: pelaez@example.net
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: krb5Principal
objectClass: shadowAccount
userPassword: {crypt}XXXXXXXXXXXXXXXX
shadowLastChange: 14910
shadowMax: 99999
shadowWarning: 7
krb5PrincipalName: pelaez@EXAMPLE.NET
loginShell: /bin/bash
uidNumber: 1018
gidNumber: 1003
homeDirectory: /home/pelaez
gecos: Pelaez Cansado,,,
$