Cómo instalar OpenLDAP Server para la autenticación centralizada


El Protocolo ligero de acceso a directorios (LDAP, por sus siglas en inglés) es un conjunto de protocolos estándar de la industria, ligero y ampliamente utilizado para acceder a los servicios de directorio. Un servicio de directorio es una infraestructura de información compartida para acceder, administrar, organizar y actualizar elementos cotidianos y recursos de red, como usuarios, grupos, dispositivos, direcciones de correo electrónico, números de teléfono, volúmenes y muchos otros objetos.

El modelo de información LDAP se basa en entradas. Una entrada en un directorio LDAP representa una sola unidad o información y se identifica de forma única mediante lo que se denomina un nombre distinguido (DN). Cada uno de los atributos de la entrada tiene un tipo y uno o más valores.

Un atributo es un dato asociado con una entrada. Los tipos suelen ser cadenas nemotécnicas, como "cn" para el nombre común o "mail" para la dirección de correo electrónico. A cada atributo se le asigna uno o más valores que consisten en una lista separada por espacios.

La siguiente es una ilustración de cómo se organiza la información en el directorio LDAP.

En este artículo, mostraremos cómo instalar y configurar el servidor OpenLDAP para la autenticación centralizada en Ubuntu 16.04/18.04 y CentOS 7.

Paso 1: instalación del servidor LDAP

1. Primero, comience instalando OpenLDAP, una implementación de código abierto de LDAP y algunas utilidades tradicionales de administración de LDAP utilizando los siguientes comandos.

# yum install openldap openldap-servers	    #CentOS 7
$ sudo apt install slapd ldap-utils	    #Ubuntu 16.04/18.04

En Ubuntu, durante la instalación del paquete, se le pedirá que ingrese la contraseña para la entrada de administrador en su directorio LDAP, establezca una contraseña segura y confírmela.

Cuando se complete la instalación, puede iniciar el servicio como se explica a continuación.

2. En CentOS 7, ejecute los siguientes comandos para iniciar el demonio del servidor openldap, habilítelo para que se inicie automáticamente en el momento del arranque y verifique si está en funcionamiento (en Ubuntu, el servicio debe iniciarse automáticamente en systemd, simplemente puede verificar su estado):

$ sudo systemctl start slapd
$ sudo systemctl enable slapd
$ sudo systemctl status slapd

3. A continuación, permita las solicitudes al demonio del servidor LDAP a través del firewall como se muestra.

# firewall-cmd --add-service=ldap    #CentOS 7
$ sudo ufw allow ldap                #Ubuntu 16.04/18.04

Paso 2: configurar el servidor LDAP

Nota: No se recomienda editar manualmente la configuración LDAP, debe agregar las configuraciones en un archivo y usar el comando ldapadd o ldapmodify para cargarlas en el directorio LDAP como se muestra a continuación.

4. Ahora cree un usuario administrativo OpenLDAP y asigne una contraseña para ese usuario. En el siguiente comando, se crea un valor hash para la contraseña dada, anótelo, lo usará en el archivo de configuración LDAP.

$ slappasswd

5. Luego cree un archivo LDIF (ldaprootpasswd.ldif) que se usa para agregar una entrada al directorio LDAP.

$ sudo vim ldaprootpasswd.ldif

Agregue el siguiente contenido en él:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD_CREATED

explicando los pares atributo-valor anteriores:

  • olcDatabase: indica un nombre de instancia de base de datos específico y normalmente se puede encontrar dentro de /etc/openldap/slapd.d/cnu003dconfig.
  • cn u003d config: indica las opciones de configuración global.
  • CONTRASEÑA: es la cadena hash obtenida al crear el usuario administrativo.

6. A continuación, agregue la entrada LDAP correspondiente especificando el URI que hace referencia al servidor ldap y al archivo anterior.

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f ldaprootpasswd.ldif  

Paso 3: configurar la base de datos LDAP

7. Ahora copie el archivo de configuración de la base de datos de muestra para slapd en el directorio/var/lib/ldap y establezca los permisos correctos en el archivo.

$ sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
$ sudo chown -R ldap:ldap /var/lib/ldap/DB_CONFIG
$ sudo systemctl restart slapd

8. A continuación, importe algunos esquemas LDAP básicos del directorio/etc/openldap/schema de la siguiente manera.

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif 
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

9. Ahora agregue su dominio en la base de datos LDAP y cree un archivo llamado ldapdomain.ldif para su dominio.

$ sudo vim ldapdomain.ldif 

Agregue el siguiente contenido en él (reemplace el ejemplo con su dominio y CONTRASEÑA con el valor hash obtenido antes):

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=example,dc=com" write by * read

10. Luego, agregue la configuración anterior a la base de datos LDAP con el siguiente comando.

$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f ldapdomain.ldif

11. En este paso, necesitamos agregar algunas entradas a nuestro directorio LDAP. Cree otro archivo llamado baseldapdomain.ldif con el siguiente contenido.

dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: example com
dc: example

dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group 

Guarde el archivo y luego agregue las entradas al directorio LDAP.

$ sudo ldapadd -Y EXTERNAL -x -D cn=Manager,dc=example,dc=com -W -f baseldapdomain.ldif

12. El siguiente paso es crear un usuario LDAP, por ejemplo, tecmint, y establecer una contraseña para este usuario de la siguiente manera.

$ sudo useradd tecmint
$ sudo passwd tecmint

13. Luego, cree las definiciones para un grupo LDAP en un archivo llamado ldapgroup.ldif con el siguiente contenido.

dn: cn=Manager,ou=Group,dc=example,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1005

En la configuración anterior, gidNumber es el GID en/etc/group para tecmint y lo agrega al directorio OpenLDAP.

$ sudo ldapadd -Y EXTERNAL -x  -W -D "cn=Manager,dc=example,dc=com" -f ldapgroup.ldif

14. A continuación, cree otro archivo LDIF llamado ldapuser.ldif y agregue las definiciones para el usuario tecmint.

dn: uid=tecmint,ou=People,dc=example,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: tecmint
uid: tecmint
uidNumber: 1005
gidNumber: 1005
homeDirectory: /home/tecmint
userPassword: {SSHA}PASSWORD_HERE
loginShell: /bin/bash
gecos: tecmint
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

luego cargue la configuración en el directorio LDAP.

$ ldapadd -Y EXTERNAL  -x -D cn=Manager,dc=example,dc=com -W -f  ldapuser.ldif

Una vez que haya configurado un servidor central para la autenticación, la parte final es permitir que el cliente se autentique usando LDAP como se explica en esta guía:

  1. Cómo configurar el cliente LDAP para conectar la autenticación externa

Para obtener más información, consulte la documentación correspondiente de la guía del servidor OpenLDAP.

OpenLDAP es una implementación de código abierto de LDAP en Linux. En este artículo, hemos mostrado cómo instalar y configurar el servidor OpenLDAP para la autenticación centralizada, en Ubuntu 16.04/18.04 y CentOS 7. Si tiene una pregunta o ideas para compartir, no dude en comunicarse con nosotros a través del formulario de comentarios a continuación.