LDAP/Migrando desde NIS

De Astillas.net

Esta página recoge mis notas sobre la migración desde un sistema NIS a un directorio LDAP.

Esquemas

Los esquemas del directorio que empleo son:

Servidor LDAP

Creamos el directorio donde va a residir la base de datos con la siguiente secuencia:

# mkdir /var/lib/ldap/example.net
# chown openldap.openldap /var/lib/ldap/example.net
# chmod 0700 /var/lib/ldap/example.net

Directorio LDAP

Una vez inicializado el directorio le añadimos las entradas correspondientes al nivel superior en el que van a estar los diferentes grupos de información:

# Nodo raíz 
dn: dc=example,dc=net
dc: example
objectClass: dcObject
objectClass: organizationalUnit
ou: example dot net 

# Usuarios del sistema 
dn: ou=People,dc=example,dc=net
objectClass: organizationalUnit
ou: People

# Grupos de usuarios 
dn: ou=Group,dc=example,dc=net
objectClass: organizationalUnit
ou: Group

# Administradores 
dn: ou=Admins,dc=example,dc=net
objectClass: organizationalUnit
ou: Admins

Insertamos directamente en el directorio sin pasar por el servidor LDAP:

# slapd -v -l top.ldif
added: "dc=example,dc=net" (00000001)
added: "ou=People,dc=example,dc=net" (00000002)
added: "ou=Group,dc=example,dc=net" (00000003)
added: "ou=Admins,dc=example,dc=net" (00000004)

Traspasando información

migrationtools

El paquete migrationtools ofrece un completo número de programas para extraer información de las bases de datos NIS y volcarlas en un formato digerible por LDAP como es LDIF.

Antes de usarlo es conveniente modificar la configuración en /etc/migrationtools/migrate_common.ph para indicar que los programas excluyan o no las cuentas de sistema, usar o no UTF-8 y definir la raíz de acceso al directorio.

# Dominio DNS predeterminado 
$DEFAULT_MAIL_DOMAIN = "example.net";

# Base del directorio 
$DEFAULT_BASE = "dc=example,dc=net";

# Usar codificación UTF
$USE_UTF8 = 1;

# Excluir usuarios y grupos del sistema
$IGNORE_UID_BELOW = 1000;
$IGNORE_GID_BELOW = 100;

Para usar cualquiera de los programas de migración es necesario cambiar primero al directorio raíz de los mismos /usr/share/migrationtools/ y llamarlo desde allí con uno o dos parámetros. El primer parámetro es el archivo origen de los datos y el segundo el archivo destino que puede obviarse si se emplea alguno de los programas con el sufijo _online, puesto que en este caso intentarán emplear el programa ldapadd para exportar las nuevas entradas directamente al servidor LDAP en funcionamiento.

Cuentas de usuario

$ cd /usr/share/migrationtools
$ ./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
$ ldapmodify -D "cn=admin,dc=example,dc=net" -W -x -a -f /tmp/passwd.ldif
Enter LDAP Password: 

$ rm /tmp/passwd.ldif

Grupos de usuarios

$ cd /usr/share/migrationtools
$ ./migrate_group.pl /etc/group /tmp/group.ldif 
$ ldapmodify -D "cn=admin,dc=example,dc=net" -W -x -a -f /tmp/group.ldif
Enter LDAP Password: 

$ rm /tmp/group.ldif

Sustitución

Teniendo en cuenta que la distribución es Debian rama Squeeze y que el sistema estaba un poco retocado por varios años de uso el proceso ha sido muy sencillo. Los pasos que he seguido -grosso modo- son:

  1. Eliminación del paquete nis
  2. Revisión de archivos de contraseñas y grupos (/etc/passwd, /etc/shadow, /etc/group) para eliminar el característico registro vacío al final de los mismos.
  3. Instalación de libpam-ldap y libnss-ldapd con las consiguientes dependencias arrastradas.

No ha hecho falta más que rellenar correctamente los parámetros que el instalador pide para cada uno de los paquetes y el sistema estaba listo y respondía rápidamente a las consultas.