Administración de OpenLDAP

Introducción

Una vez instalado y configurado el servidor LDAP, la siguiente tarea es la del diseño de la estructura y la introducción de datos en el directorio.

Puesto que la finalidad de nuestro servidor LDAP es que sirva de almacén de usuarios y grupos para autentificar sistemas linux y servicios como ftp y web, deberemos crear una estructura que parta de la base de nuestro directorio, para almacenar dicha información. Tal y como se explica más abajo, crearemos una unidad organizativa (ou) llamada groups, para almacenar los grupos de usuarios y crearemos otra unidad organizativa llamada users para almacenar a los usuarios. 

 

Paso 1: Cargar plantillas

Al instalar el servidor LDAP, se instalan también unas plantillas que nos serviran para crear el esquema básico para almacenamiento de usuarios unix para LDAP, lo que nos permitirá almacenar en nuestro directorio, cuentas de usuario. Para instalar las plantillas necesarias, debemos ejecutar los siguientes comandos:

// Instalar plantillas para almacenamiento de usuarios unix
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

 

Paso 2: Archivo de configuración del esquema básico

Después crearemos un archivo en formato ldif con la configuración de nuestro esquema básico. En dicho archivo debemos configurar :

  • Base del directorio: Se configura en el parámetro olcSuffix del archivo de configuración del esquema básico. En nuestro ejemplo usaremos: dc=ieslapaloma,dc=com
  • Nombre de usuario administrador: Se configura en el parámetro olcRootDN del archivo de configuración del esquema básico. En nuestro ejemplo usaremos: cn=admin,dc=ieslapaloma,dc=com
  • Contraseña: Se configura en el parámetro olcRootPW del archivo de configuración del esquema básico. En nuestro ejemplo usaremos: ldapadmin
  • Permiso de acceso a contraseñas: Se configura en el parámetro olcAccess: to attrs=userPassword. Daremos al usuario administrador permiso de escritura y a cada usuario para cambiar su propia contraseña 
  • Permiso de acceso global al directorio: Se configura en el parámetro olcAccess: to *. Daremos al usuario administrador permiso de escritura y a todos los usuarios, permisos de lectura

Almacenaremos el archivo en la carpeta temporal porque una vez procesado se debería borrar, ya que contiene la contraseña de administrador en texto plano.

#  ---------- Archivo /tmp/ldapcurso-esquema-basico.ldif ----------

# Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=ieslapaloma,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=ieslapaloma,dc=com
olcRootPW: ldapadmin
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=ieslapaloma,dc=com" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=ieslapaloma,dc=com" write by * read

# ---------------------------------- 

Ahora habrá que cargar el servidor ldap con el archivo de configuración creado:

// Cargar en ldap el archivo ldapcurso-esquema-basico.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/ldapcurso-esquema-basico.ldif

 

Paso 3: Creación de unidades organizativas para almacenar cuentas unix

Para que nuestro directorio LDAP pueda almacenar cuentas unix, necesitamos crear una unidad organizativa (dn: ou=users) para los usuarios y otra (dn: ou=groups) para los grupos de usuarios. Antes debemos crear la base del directorio (dn: dc=ieslapaloma,dc=com) y el usuario administrador (dn: cn=admin,dc=ieslapaloma,dc=com). Después podemos crear usuarios y grupos para hacer pruebas. Crearemos los usuarios javier, joaquin y miguel en el grupo profesores y los usuarios jessica y joel en el grupo alumnos. 

# ---------- Archivo /tmp/ldapcurso-usuarios.ldif ---------- 

dn: dc=ieslapaloma,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: ieslapaloma
o: ieslapaloma

dn: cn=admin,dc=ieslapaloma,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fXdSVDNLMEpKSlQydmM=

dn: ou=users,dc=ieslapaloma,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users

dn: ou=groups,dc=ieslapaloma,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups

dn: cn=Francisco Javier,ou=users,dc=ieslapaloma,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Francisco Javier
gidNumber: 1001
homeDirectory: /home/javier
loginShell: /bin/bash
sn: Corcuera Ruiz
uid: javier
uidNumber: 1001

dn: cn=Joaquin,ou=users,dc=ieslapaloma,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Joaquin
gidNumber: 1001
homeDirectory: /home/joaquin
loginShell: /bin/bash
sn:: R8OzbWV6
uid: joaquin
uidNumber: 1002

dn: cn=Miguel Angel,ou=users,dc=ieslapaloma,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Miguel Angel
gidNumber: 1001
homeDirectory: /home/miguel
loginShell: /bin/bash
sn: Martinez
uid: miguel
uidNumber: 1003

dn: cn=Jessica,ou=users,dc=ieslapaloma,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Jessica
gidNumber: 1002
homeDirectory: /home/jessica
loginShell: /bin/bash
sn: Perez
uid: jessica
uidNumber: 1004

dn: cn=Joel Javier,ou=users,dc=ieslapaloma,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
cn: Joel Javier
gidNumber: 1002
homeDirectory: /home/joel
loginShell: /bin/bash
sn: Moreno
uid: joel
uidNumber: 1005

dn: cn=profesores,ou=groups,dc=ieslapaloma,dc=com
objectClass: posixGroup
objectClass: top
cn: profesores
gidNumber: 1001
memberUid: javier
memberUid: joaquin
memberUid: miguel

dn: cn=alumnos,ou=groups,dc=ieslapaloma,dc=com
objectClass: posixGroup
objectClass: top
cn: alumnos
gidNumber: 1002
memberUid: jessica
memberUid: joel

# ---------------------------------- 

Ahora habrá que cargar el servidor ldap con el archivo de usuarios creado:

// Cargar en ldap el archivo ldapcurso-usuarios.ldif (cuando pida la contraseña: ldapadmin)
sudo ldapadd -c -x -D cn=admin,dc=ieslapaloma,dc=com -W -f /tmp/ldapcurso-usuarios.ldif

A partir de este momento ya tendremos un servidor LDAP apto para almacenar usuarios y grupos de cuentas unix.

 

Explorador de directorios LDAP

Aunque LDAP permite trabajar con comandos y archivos ldif, para acceder al directorio LDAP y poder crear y modificar elementos en dicho directorio, es más práctico utilizar un explorador de directorios LDAP (LDAP browser). Existen muchos exploradores LDAP tanto de pago como libres. Entre las aplicaciones libres destacamos gq, phpldapadmin (aplicación web) y JXplorer.

Para instalar gq, podemos utilizar apt-get install gq. Una vez instalada, para ejecutar gq tan solo debemos pulsar alt+f2 y escribir gq.

Para instalar phpldapadmin, al igual que otras aplicaciones web, deberemos descargarla desde http://phpldapadmin.sourceforge.net/ y descomprimirla dentro del DocumentRoot de apache, es decir, dentro de la carpeta /var/www, por ejemplo en /var/www/phpldapadmin. Para ejecutarla, si la hemos descomprimido en la carpeta anterior, debemos ir a http://ip_del_servidor_web/phpldapadmin/ con el navegador y veremos la página principal de la aplicación:

Instalación de phpldapadmin

 

JXplorer - Explorador LDAP en java

Por su calidad superior, utilizaremos JXplorer para administrar el directorio LDAP.

 

Instalación de JXplorer

Previo a instalar jxplorer, es necesario instalar la máquina virtual java de Sun, para lo cual utilizaremos apt-get, pero antes debemos activar los repositorios -partner- de Ubuntu (ver capítulo Trucos > Archivo /etc/apt/sources.list):
// Instalación de Java (previamente activar repositorios partner)
sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-plugin sun-java6-fonts
El comando anterior instalará java en la carpeta /usr/lib/jvm/java-6-sun/jre/bin/. Posteriormente tendremos que editar el archivo /root/.bashrc y añadir las variables que permitan al shell encontrar los binarios del JRE:
// Añadir en /root/.bashrc
CLASSPATH=/usr/lib/jvm/java-6-sun/jre/bin/
JAVA_HOME=/usr/lib/jvm/java-6-sun/jre/bin/
PATH=/usr/lib/jvm/java-6-sun/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
Una vez instalado el java y establecidas las variables CLASSPATH, JAVA_HOME y PATH en el archivo /root/.bashrc, debes cerrar el terminal y volver a abrirlo, para que cargue nuevamente las variables de entorno. Si ejecutas el comando set en el terminal, podrás comprobar que ha cargado las variables de entorno y podrás instalar JXplorer. JXplorer no está disponible en los repositorios de paquetes de debian, pero se puede descargar haciendo clic aquí. Debemos copiar el archivo en la carpeta /tmp de nuestro sistema y ejecutar:
// Instalar JXplorer (como usuario, no como root)
sh /tmp/jxplorer3.2_linux.bin
Se iniciará un sencillo asistente de instalación que al finalizar habrá creado la carpeta JXplorer en nuestra carpeta home y el script de inicio jxplorer.sh dentro de ella, por lo tanto para ejecutarlo debemos escribir:
// Ejecutar JXplorer: Entran en la carpeta de instalación y ejecutar:
~/JXplorer/jxplorer.sh

Veremos la pantalla principal de JXplorer:



Pantalla principal de JXplorer

 

Conexión con el servidor LDAP

La conexión con el servidor LDAP podemos hacerla como usuario anónimo o como usuario administrador. Si conectamos de forma anónima solo podremos visualizar los elementos pero no podremos hacer cambios. Si conectamos como administrador, podremos crear, modificar y eliminar elementos de cualquier tipo.

Para conectar al servidor LDAP como administrador necesitamos la siguiente información:

  • Dirección IP del servidor LDAP
  • Protocolo del servidor (LDAP v3 en nuestro caso)
  • Base del directorio (dc=ieslapaloma,dc=com en nuestro caso)
  • Nombre de usuario administrador (cn=admin,dc=ieslapaloma,dc=com en nuestro caso)
  • Contraseña (ldapadmin en nuestro caso)

La base del directorio se suele denominar en inglés 'base DN' o 'Nombre Distinguido de la base del directorio'. Se corresponde con el parámetro 'suffix' del archivo de configuración del servidor LDAP /etc/ldap/slapd.conf.

El nombre del usuario con el que nos conectamos se suele denominar en inglés 'user DN' o también 'bind DN'.

El nombre de usuario administrador por defecto suele ser admin y a menudo hay que proporcionar nombre y base del directorio: cn=admin,dc=ieslapaloma,dc=com

Al hacer clic en el botón 'conectar' (marcado con círculo rojo en la figura) nos aparecerá el diálogo de conexión para que introduzcamos los datos de la conexión. Para no tener que introducir dicha información cada vez que conectemos, podemos grabar los datos pulsando 'Save'.

Diálogo para introducir los datos de la conexión

Si pulsamos OK, JXplorer conectará con el servidor LDAP y mostrará el directorio:

JXplorer mostrando el directorio

Vemos que en nuestro directorio ya tiene creada la organización llamada 'ieslapaloma', el usuario administrador llamado 'admin' y dos unidades organizativas: groups y users en las cuales se encuentran los grupos y los usuarios anteriormente creados.

Creación de usuarios y grupos con jxplorer

Anteriormente hemos creado el grupo alumnos y el grupo profesores mediante el archivo ldapcurso-usuarios.ldif. Ahora veremos cómo crear usuarios y grupos desde la herramienta jxplorer. Como ejemplo, crearemos un nuevo grupo y un nuevo usuario. Crearemos el siguiente grupo:
  • jefesdpto (gid=1003)
Además, crearemos un usuario nuevo:
  • carlos (uid=1006, jefesdpto)

Creación de grupos

Para crear los grupos, haremos clic con el derecho en la unidad organizativa 'groups' y haremos clic en 'New'. Observamos en 'Selected Classes' (clases seleccionadas) que está seleccionada la clase 'posixGroup'. El nombre (RDN) será jefesdpto, por tanto debemos escribir 'cn=jefesdpto' (cn= Common Name - Nombre Común):

Creación de grupos

Al pulsar OK nos apacererá la siguente figura, en la cual observamos los atributos clásicos de un grupo posix. Debemos rellenar al menos el campo gidNumber. También podemos introducir miembros al grupo. En el parámetro memberUid añadimos javier. Luego, haciendo clic con el derecho en javier > Add another value podemos añadir más miembros.


Atributos clásicos de un grupo posix

 

Creación de usuarios

Para crear los usuarios, haremos clic con el derecho en la unidad organizativa 'users' y haremos clic en 'New'. Observamos en 'Selected Classes' (clases seleccionadas) que están seleccionadas las clases 'inetOrgPerson','organizationalPerson','person' y 'posixAccount'. Si su nombre es Carlos, podemos escribir en la casilla RDN 'cn=Carlos'.



Creación de usuarios

Al pulsar OK nos apacerá la siguiente figura, en la cual observamos los atributos de las tres tipologías de nuestro elemento: persona, usuario de internet y cuenta posix. Debemos rellenar al menos los campos gidNumber (grupo primario que será el 1003), homeDirectory, uid (identificador), uidNumber y sn (surname - apellidos). También podemos configurar la contraseña en el atributo userPassword escribiendo la nueva contraseña cifrada con MD5.

Atributos de las tres tipologías de nuestro elemento

Lo mismo haremos con el resto hasta que tengamos creados los cinco usuarios. Al final nuestro servidor LDAP tendrá la siguiente información:

Información ofrecida por nuestro servidor LDAP

Ya tendríamos creada la estructura, los grupos y los usuarios que necesitamos para nuestro sistema.

Icono de iDevice

¿Sabías que?

Trabajar con herramientas gráficas como jxplorer o phpldapadmin resulta interesante cuando hay que realizar consultas o pequeñas modificaciones...