Configurar un servidor y un cliente de LDAP en Linux CentOS 7

El servicio de LDAP se utiliza mucho en los sistemas Linux como base de datos centralizadora de usuarios. De esta manera, cuando hay que gestionar muchos usuarios, por ejemplo, los de toda una compañía, no hace falta crearlos en cada uno de los servidores, si no que únicamente se crean en el servidor de LDAP y cada sistema Linux cliente, se conecta al servidor para permitir o no el acceso al sistema.

Por lo tanto, se puede decir que LDAP es una base de datos de usuarios con una serie de atributos ordenados lógicamente. Mejor os dejo el enlace de la Wikipedia donde lo explica muy bien. En el siguiente tutorial vamos a ver cómo configurar LDAP.

Configuración del servidor de LDAP

Voy a instalar el servidor de LDAP en un Linux CentOS 7.5. Lo primero que haremos, será instalar el software con el comando:

yum -y install openldap openldap-clients openldap-servers nss-pam-ldapd authconfig authconfig-gtk migrationtools

Generamos una contraseña LDAP para el usuario root.

[root@Centos7 ~]# slappasswd
New password:
Re-enter new password:
{SSHA}WafqlarNUYNbabKveFBkTrtKHEOlgQVu
[root@Centos7 ~]#

El texto que aparece lo tendremos que añadir más tarde en el fichero /etc/openldap/slapd.conf.

Copiamos los ficheros de configuración de LDAP por defecto a un directorio personalizado

[root@Centos7 ~]# mkdir /var/lib/ldap/ldapdavtst
[root@Centos7 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/ldapdavtst/DB_CONFIG
[root@Centos7 ~]# chown -R ldap:ldap /var/lib/ldap

Permitimos la autentificación de usuarios por LDAP

[root@Centos7 ~]# grep ldap /etc/nsswitch.conf
passwd: files sss ldap
shadow: files sss ldap
group: files sss ldap
[root@Centos7 ~]#

Desactivamos la configuración de LDAP por defecto

[root@Centos7 ~]# mv /etc/openldap/slapd.d /etc/openldap/slapd.original
[root@Centos7 ~]#

Creamos el fichero de configuración del servidor de LDAP

[root@Centos7 ~]# cat /etc/openldap/slapd.conf
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/pmi.schema

# Allow connections from Openldap 2.x clients
allow bind_v2

database monitor
database bdb

# Process ID file
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

# LDAP domain name
suffix «dc=ldapdavtst,dc=com»

# The rootdn entry is the Distinguished Name (DN) for a user who is unrestricted by access controls or administrative limit parameters set for operations on the LDAP directory.
rootdn «cn=root,dc=ldapdavtst,dc=com»

# Root password generated by command slappasswd
rootpw {SSHA}WafqlarNUYNbabKveFBkTrtKHEOlgQVu

# Logs
#loglevel -1

directory /var/lib/ldap/ldapdavtst

# Indices a mantener para esta base de datos
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
[root@Centos7 ~]#

Arrancamos el servidor de LDAP

[root@Centos7 ~]# systemctl start slapd
[root@Centos7 ~]# systemctl status slapd
● slapd.service – OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2018-11-26 10:38:21 CET; 4s ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Process: 3571 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
Process: 3555 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
Main PID: 3573 (slapd)
Tasks: 2
Memory: 31.0M
CGroup: /system.slice/slapd.service
└─3573 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

Nov 26 10:38:20 Centos7 systemd[1]: Starting OpenLDAP Server Daemon…
Nov 26 10:38:20 Centos7 check-config.sh[3555]: Configuration directory ‘/etc/openldap/slapd.d’ does not exist.
Nov 26 10:38:20 Centos7 check-config.sh[3555]: Warning: Usage of a configuration file is obsolete!
Nov 26 10:38:20 Centos7 runuser[3561]: pam_unix(runuser:session): session opened for user ldap by (uid=0)
Nov 26 10:38:21 Centos7 runuser[3561]: pam_unix(runuser:session): session closed for user ldap
Nov 26 10:38:21 Centos7 slapd[3571]: @(#) $OpenLDAP: slapd 2.4.44 (May 16 2018 09:55:53) $
mockbuild@c1bm.rdu2.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/…rs/slapd
Nov 26 10:38:21 Centos7 slapd[3573]: slapd starting
Nov 26 10:38:21 Centos7 systemd[1]: Started OpenLDAP Server Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[root@Centos7 ~]#

Damos de alta un usuario en el servidor de LDAP

Creamos un fichero LDIF con la estructura de datos lógica que entiende LDAP

[root@Centos7 ~]# grep -v «#» personas.ldif |grep -v ^$
dn: cn=ldapuser2,ou=Personal,dc=ldapdavtst,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
cn: ldapuser2
sn: ldapuser2
uid: ldapuser2
userpassword: passwdtst
mail: ldapuser2@ldapserver
description: Es un tio muy majo
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/ldapuser2
[root@Centos7 ~]#

Añadimos el usuario

ldapadd -x -w ContraseñaDeLDAP -D «cn=root,dc=ldapdavtst,dc=com» -f personas.ldif

Comprobamos que se ha registrado correctamente:

[root@Centos7 ~]# ldapsearch -x -b ‘cn=ldapuser2,ou=Personal,dc=ldapdavtst,dc=com’ ‘(objectclass=*)’
# extended LDIF
#
# LDAPv3
# base <cn=ldapuser2,ou=Personal,dc=ldapdavtst,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# ldapuser2, Personal, ldapdavtst.com
dn: cn=ldapuser2,ou=Personal,dc=ldapdavtst,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
cn: ldapuser2
sn: ldapuser2
uid: ldapuser2
userPassword:: cGFzc3dkdHN0
mail: ldapuser2@ldapserver
description: Es un tio muy majo
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/ldapuser2

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
[root@Centos7 ~]#

Configuración del cliente de LDAP

Ahora queremos que en cualquier servidor Linux podamos autentificarnos con los usuarios que están dados de alta en el servidor de LDAP. Igual que en el punto anterior, lo primero que tenemos que hacer es instalar el software. De nuevo, utilizo Linux CentOS 7.5.

yum -y install authconfig openldap-clients nss-pam-ldapd

Permitimos la autentificación de usuarios con el servidor de LDAP

[root@Centos7v2 etc]# authconfig –enableldap –enableldapauth –ldapserver=ldap://ldapserver:389/ –ldapbasedn=»ou=Personal,dc=ldapdavtst,dc=com» –enablecache –disablefingerprint –kickstart
[root@Centos7v2 etc]#

Configuramos el fichero /etc/nsswitch.conf permitiendo LDAP

[root@Centos7v2 ~]# grep ldap /etc/nsswitch.conf
passwd: files sss ldap
shadow: files sss ldap
group: files sss ldap
netgroup: files sss ldap
automount: files ldap
[root@Centos7v2 ~]#

Habilitamos el servicio local LDAP name service daemon

systemctl enable nscd
systemctl start nscd
systemctl enable autofs
systemctl start autofs

Comprobamos que desde el cliente de LDAP ya podemos obtener información del usuario dado de alta en el servidor de LDAP:

[root@Centos7v2 ~]# getent passwd ldapuser2
ldapuser2:*:1002:1002:ldapuser2:/home/ldapuser2:/bin/bash
[root@Centos7v2 ~]#

Y, además, podemos hacer login:

[root@Centos7v2 ~]# su – ldapuser2
Creating home directory for ldapuser2.
/usr/bin/id: cannot find name for group ID 1002
[ldapuser2@Centos7v2 ~]$ pwd
/home/ldapuser2
[ldapuser2@Centos7v2 ~]$

Si queremos que el directorio HOME del usuario sea un filesystem NFS, configuraremos el servicio autofs de la siguiente manera:

[root@Centos7v2 ~]# vim /etc/auto.master
/home /etc/auto.misc
[root@Centos7v2 ~]# vim /etc/auto.misc
* -fstype=nfs,rw,nosuid,soft ldapserver:/home/&
[root@Centos7v2 ~]# systemctl restart autofs
[root@Centos7v2 ~]# systemctl enable autofs
ln -s ‘ /usr/lib/systemd/system/autofs.service’ ‘ /etc/systemd/system/multi-user.target.wants/autofs.service’
[root@Centos7v2 ~]# su – ldapuser2
Last login: Sun May 15 04:34:03 IST 2016 on pts/1
[root@Centos7v2 ~]#

En los parámetros de NFS del cliente es una buena práctica añadir noatime, ya que con que se actualice en el nodo en el servidor de NFS es suficiente. No hace falta que el cliente pierda el tiempo haciendo lo mismo. De esta manera, mejoraremos algo el rendimiento.

Corrupción de la base de datos de LDAP

He tenido una incidencia con un servidor de VMWare que ha provocado que uno de los servidores se parara de manera abrupta y luego el servicio de LDAP no podía arrancar debido a que se había corrompido su base de datos interna, dando el siguiente error:

[root@LSICASX2 ldap]# service ldap start
Checking configuration files for slapd:  bdb_db_open: unclean shutdown detected; attempting recovery.
bdb_db_open: Recovery skipped in read-only mode. Run manual recovery if errors are encountered.
bdb(dc=forja,dc=ctti,dc=local): PANIC: fatal region error detected; run recovery
bdb_db_open: Database cannot be opened, err -30974. Restore from backup!
bdb(dc=forja,dc=ctti,dc=local): DB_ENV->lock_id_free interface requires an environment configured for the locking subsystem
backend_startup_one: bi_db_open failed! (-30974)
slap_startup failed (test would succeed using the -u switch)
                                                           [FAILED]
stale lock files may be present in /aqd/app/ldap           [WARNING]
[root@LSICASX2 ldap]#

Recuperar la base de datos de LDAP

Para recuperar la base de datos de LDAP, simplemente hay que ejecutar el comando slapd_db_recover de la siguiente manera:

[root@LSICASX2 ldap]# /usr/sbin/slapd_db_recover -v -h /aqd/app/ldap
Finding last valid log LSN: file: 209 offset 1040918
Recovery starting from [169][3058228]
Recovery complete at Fri Mar 22 10:21:10 2019
Maximum transaction ID 8344ce5d Recovery checkpoint [209][1041971]
[root@LSICASX2 ldap]# 

Una vez finalizado el proceso, ya podemos arrancar el servicio de LDAP con normalidad:

[root@LSICASX2 ldap]# service ldap start
Checking configuration files for slapd:  bdb_db_open: unclean shutdown detected; attempting recovery.
bdb_db_open: Recovery skipped in read-only mode. Run manual recovery if errors are encountered.
config file testing succeeded
                                                           [  OK  ]
Starting slapd:                                            [  OK  ]
[root@LSICASX2 ldap]#

Esto me ocurrió en un servidor bastante antiguo con Linux RedHat 5.2.

¿Te ha gustado? ¡Compártelo!

Share on facebook
Share on google
Share on twitter
Share on linkedin
Share on whatsapp

Tal vez también te gustaría leer...

Tutorial de Ansible

Recientemente me he estado mirando el funcionamiento de Ansible para automatizar tareas de manera masiva en servidores Linux remotos mediante esta aplicación. Hasta ahora utilizo otra pero como Ansible está cada vez más extendida y considero que vale la pena mirárselo. Más aún si RedHat está apostando por esta herramienta como estándar de automatización. Su

Leer más »

Insertar el botón «Continuar leyendo» en WordPress

Lo normal es presentar en la portada de un blog varios artículos pero no mostrar el contenido completo de cada uno de ellos porque la portada sería muy larga. Es una buena práctica insertar un botón o enlace en cada uno de los artículos de la portada que indique «Continuar leyendo» y que el usuario

Leer más »

Crear un Espinner con las Hojas de Cálculo de Google

Si no sabes lo que es un Espinner consiste en crear contenido diferente con un único texto a través de variables. Mejor lo explico con un ejemplo: Pongamos por caso que tenemos el siguiente texto con variables: Lo que hay dentro de cada llave son diferentes variables para cada palabra clave. Cuando procesemos este texto

Leer más »

Tipos de Enlaces WEB: Nofollow, Sponsored y UGC

Hasta hace muy poco, Google distinguía entre dos tipos de enlaces hacia otras URLs: Follow o, también conocidos como «DoFollow», son aquellos «puntúan» en el posicionamiento de una página WEB. NoFollow son justo lo contrario. Es decir, podemos insertar un enlace en un artículo, un foro, etc. pero no traspasaremos autoridad de nuestra página a

Leer más »

WP All Import – Importar fichero CSV y XML en WordPress

El plugin de WordPress WP All Import es muy útil para importar a WordPress una cantidad ingente de datos. El problema es que es de pago pero nos ahorrará mucho tiempo en estos casos. Imaginaos el tiempo que podéis tardar en crear 200 entradas en WordPress de forma manual. Con WP All Import, el proceso

Leer más »