Configuración de OpenLDAP I.

En esta entrada vamos a ver cómo instalar un servidor de openLDAP en Centos, crear la configuración inicial del servidor para poder conectar y generar el usuario para poder configurarlo de forma remota. Una vez montado, tendremos acceso a los datos del LDAP de forma segura, la base de datos de configuración del propio servidor y la posiblidad de monitorizarlo de forma remota.

Serie completa:

http://www.elalfon.com/2015/03/21/configuracion-de-openldap-i/

http://www.elalfon.com/2015/03/30/configuracion-de-openldap-ii/

http://www.elalfon.com/2015/03/31/configuracion-de-openldap-iii/

IMPORTANTE: Copiar y pegar es la fuente más común de errores. Revisa elementos como las comillas, puntos, y caracteres extraños antes de ejecutar el comando.

Instalación inicial de paquetes Centos:

yum install openldap-servers

yum install openldap-clients

service slapd start

Configuración inicial del servidor de ldap.

La versión de ldap instalada en Centos 6.5 se basa en ficheros ldif en vez de los ficheros de configuración de siempre en formato texto. Con este cambio, es posible cambiar completamente la configuración del servidor con las mismas herramientas que usamos para navegar por el LDAP. Como recomendación, es mucho más simple crear y mantener el openLDAP con una herramienta visual como el Apache Directory Studio, aunque no siempre es posible. En este post usaremos la línea de comando para todas las operaciones.

El primer paso, una vez instalado el servidor será crear la estructura inicial del arbol. En nuestro caso, el olcSuffix será dc=example,dc=com, con lo cual toda la estructura del arbol comenzará desde ese punto. Ojo, eso quiere decir que no existe la entrada dc=com por debajo de dc=example.

Para crear esta entrada, tenemos que localizar el directorio /etc/openldad/slapd.d/cn=config. Ahí veremos qué tipo de base de datos tenemos en el ldap inicial, el que aparezca como olcDatabase={2}*.ldif. Esto es importante a la hora de crear el fichero ldif inicial. Por ejemplo, en Centos 6.5, la base de datos es olcDatabase={2}dbd, así que la entrada inicial será la siguiente:

dn: olcDatabase={2}bdb,cn=config

changetype: modify

replace: olcSuffix

olcSuffix: dc=example,dc=com

replace: olcRootDN

olcRootDN: cn=Manager,dc=example,dc=com

add: olcRootPW

olcRootPW: secret

Sólo para  Centos 7 La base de datos será olcDatabase={2}hdb, así que cambiaríamos la línea inicial marcada en rojo por

dn: olcDatabase={2}hdb,cn=config

Luego, cargamos estos datos lanzando como root el comando:

ldapmodify -H ldapi:// < inicial.ldif

Es posible que la carga no funcione por que nos pide password. Si es el caso, añadimos una opción más al comando:

ldapmodify -H ldapi:// -Y EXTERNAL < inicial.ldif

Si tenemos que repetir la carga del fichero, tendremos que modificar la línea add: olcRootPW por replace: olcRootPW

Una vez llegados a este punto, podemos conectar con usuario y password al ldap, pero si buscamos datos veremos que aún no tenemos nada cargado. Resolveremos esto ahora mismo.

[root@testldap openldap]# ldapsearch -x -D cn=Manager,dc=example,dc=com -W
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

Antes de cargar datos, en Centos 7 tenemos el «problema» de que las clases de openLDAP que vienen «cargadas» por defecto son sólo las básicas, y vamos a necesitar al menos las clases definidas en el esquema «cosine». Lo cargamos con este comando:

SOLO CENTOS 7.

ldapadd -H ldapi:// -Y EXTERNAL < /etc/openldap/schema/cosine.ldif

Si vemos el olcSuffix que hemos definido, vemos que el DN dc=example,dc=com tiene que contener clases con atributo dc. La mejor forma sería crearlo con la clase Domain, aunque se puede usar también la clase auxiliar dcObject y cualquier clase estructural que queramos. El fichero de carga inicial datos.ldif sería:

dn: dc=example,dc=com
objectClass: Domain
objectClass: top
dc: example

Para cargarlo, ahora que tenemos un superusuario sería con el comando:

ldapadd -H ldap:// -x -D «cn=Manager,dc=example,dc=com» -W  < datos.ldif

Con esto ya tenemos la base para acceder al ldap y cargar datos mediante aplicaciones como el Apache Directory Studio.

Ahora que tenemos un superusuario con password, tenemos que asegurar el acceso de forma que sólo usuarios autenticados puedan acceder al servidor. Para ello será suficiente con una entrada en la base de datos «FrontEnd» del directorio. Esta base de datos guarda configuración común para todas las bases de datos que tenga el directorio, y para que sólo podamos ejecutar comandos en el servidor una vez autenticados, debemos añadir esta entrada ldif:

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc

Con esta entrada forzaremos que todas las conexiones a todas las bases de datos estén autenticadas. Quizás nos interese ser un poco menos restrictivos, para servir datos del ldap como el esquema que utiliza, las extensiones que tiene o los contextos de nombre a conexiones no autenticadas. Si es el caso, podemos forzar la conexión autenticada sólo en las bases de datos del directorio donde tenemos «datos» reales con la entrada:

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcRequires
olcRequires: authc

Sólo Centos 7: Para cargar esta entrada modificaríamos la línea en rojo por

dn: olcDatabase={2}hdb,cn=config

Una vez creado el fichero con alguna de las dos opciones anteriores lo cargamos con el comando:

ldapmodify -H ldapi:// -Y EXTERNAL < seguridad.ldif

Usuario de acceso a la configuración del servidor

Hasta ahora toda la configuración del Openldap la hemos realizado por la interfaz ldapi, pero también puede configurarse mediante herramientas externas. Para acceder debemos crear un superusuario para la base de datos de configuración. Esta base de datos se encuentra en /etc/openldap/slapd.d/sn=config/olcDatabase{0}config.ldif.

Igual que en el punto anterior, vamos a crear un usuario para poder modificar externamente el ldap. Crearemos primero el fichero de modificación de datos:

dn: olcDatabase={0}config,cn=config

changetype: modify

add: olcRootPW

olcRootPW: secret

Cargaremos estos datos con el comando:

ldapmodify -H ldapi:// -Y EXTERNAL< config.ldif

Ya podemos acceder a la configuración del servidor en remoto con el Apache Directory Studio.

Configuración de acceso al monitor de openLDAP

El último paso de la configuración es modificar el usuario con el que se puede acceder al monitor del openLDAP. Con la configuración por defecto, el usuario que aparece en la lista de acceso aparece en el olcSuffix con el que empezamos, dc=my-domain,dc=com. Necesitamos cambiar esa línea para acceder al monitor, así que creamos el fichero monitor.ldif:

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base=»gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth» read by dn.base=»cn=manager,dc=example,dc=com» read by * none

Cargamos estos datos con el usuario de configuración:

ldapmodify -x -D «cn=config» -W < monitor.ldif

Ya tenemos acceso también al monitor del ldap desde herramientas externas. Eso sí, hay que recordar que al ser valores calculados en tiempo real, tendremos que pedir los datos del monitor indicando que queremos recuperar los atributos operaciones o el nombre del atributo si lo conocemos. Por ejemplo, para ver el número de peticiones de búsqueda que ha realizado el openLDAP, ejecutaremos

ldapsearch -D «cn=Manager,dc=example,dc=Com» -x -W -b «cn=Search,cn=Operations,cn=monitor» +

El resultado será parecido a este:

# extended LDIF
#
# LDAPv3
# base <cn=Search,cn=Operations,cn=monitor> with scope subtree
# filter: (objectclass=*)
# requesting: +
#

# Search, Operations, Monitor
dn: cn=Search,cn=Operations,cn=Monitor
structuralObjectClass: monitorOperation
creatorsName:
modifiersName:
createTimestamp: 20150320232509Z
modifyTimestamp: 20150320232509Z
monitorOpInitiated: 393
monitorOpCompleted: 392
entryDN: cn=Search,cn=Operations,cn=Monitor
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Los resultados son en tiempo real, así que los contadores varían con el tiempo y se resetean en cada reinicio del servidor.

En posteriores entregas, veremos cómo ampliar esquemas y añadir overlays al servidor.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *