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.

[[email protected] ~]# slappasswd
New password:
Re-enter new password:
{SSHA}WafqlarNUYNbabKveFBkTrtKHEOlgQVu
[[email protected] ~]#

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

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

Permitimos la autentificación de usuarios por LDAP

[[email protected] ~]# grep ldap /etc/nsswitch.conf
passwd: files sss ldap
shadow: files sss ldap
group: files sss ldap
[[email protected] ~]#

Desactivamos la configuración de LDAP por defecto

[[email protected] ~]# mv /etc/openldap/slapd.d /etc/openldap/slapd.original
[[email protected] ~]#

Creamos el fichero de configuración del servidor de LDAP

[[email protected] ~]# 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
[[email protected] ~]#

Arrancamos el servidor de LDAP

[[email protected] ~]# systemctl start slapd
[[email protected] ~]# 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) $
[email protected]:/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.
[[email protected] ~]#

Damos de alta un usuario en el servidor de LDAP

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

[[email protected] ~]# 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: [email protected]
description: Es un tio muy majo
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/ldapuser2
[[email protected] ~]#

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:

[[email protected] ~]# 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: [email protected]
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
[[email protected] ~]#

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

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

Configuramos el fichero /etc/nsswitch.conf permitiendo LDAP

[[email protected] ~]# grep ldap /etc/nsswitch.conf
passwd: files sss ldap
shadow: files sss ldap
group: files sss ldap
netgroup: files sss ldap
automount: files ldap
[[email protected] ~]#

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:

[[email protected] ~]# getent passwd ldapuser2
ldapuser2:*:1002:1002:ldapuser2:/home/ldapuser2:/bin/bash
[[email protected] ~]#

Y, además, podemos hacer login:

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

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

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

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:

[[email protected] 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]
[[email protected] 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:

[[email protected] 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]
[[email protected] ldap]# 

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

[[email protected] 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  ]
[[email protected] ldap]#

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

¿Te ha gustado? ¡Compártelo!

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

Deja un comentario

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

Instalación de Ceph Storage en Linux RedHat 7

En este artículo aprenderemos a instalar RedHat Ceph Storage en un sistema Linux RedHat 7.7, configurando un cluster de dos nodos. Tabla de contenidos1 ¿Qué es Ceph?2 Conceptos previos de Ceph3 Instalación de Ceph3.1 Requerimientos previos3.1.1 Creación de los repositorios de yum3.1.2 Instalación de los paquetes RPM de Ceph3.1.3 Arranque del servicio NTP3.2 Configuración Manual

Leer más »

Limitar los recursos de CPU y memoria en Linux RedHat

Debido a una serie de pruebas de rendimiento que querían hacer desde el equipo de aplicaciones, me han preguntado si era posible limitar los recursos de CPU y memoria a nivel global del servidor, un Linux RedHat 7. Podemos hacerlo con CGROUPS pero para este caso concreto he preferido limitar los recursos mediante parámetros del

Leer más »

GlusterFS – Filesystems con Alta Disponibilidad en Linux

Alguna vez os he hablado de ServiceGuard para montar entornos de alta disponibilidad robustos, que monten filesystems y levanten servicios, pero este es un software de pago que no quería utilizar para montar un único filesystem con alta disponibilidad. En su lugar, he elegido GlusterFS, que es opensource y con soporte de RedHat. Tabla de

Leer más »

Configurar un servidor Memcached en Linux RedHat 7

Memcached es uno de los servidores de cacheo más populares. Se utiliza para que aplicaciones externas cacheen su contenido en un servidor centralizado como, por ejemplo, páginas WEB estáticas. El objetivo es acelerar la velocidad de la aplicación accediendo al contenido que ya está en caché en vez de tener que reinterpretarlo cada vez que

Leer más »

Conexiones seguras con SSH en Linux

SSH es un protocolo de comunicaciones que proporciona seguridad criptográfica cuando nos conectamos a un servidor para iniciar una sesión o transfereir archivos por SFTP o SCP. Los comandos SSH, SFTP y SCP utilizan el mismo puerto de comunicaciones, que es el 22. Rebajas Lenovo S145-15IWL – Ordenador portátil 15.6″… 549,99 EUR COMPRAR EN AMAZON

Leer más »

Guía de Linux

Tabla de contenidos1 Historia de Linux2 ¿Qué es una distribución Linux y cuál instalar?3 ¿Cómo iniciar una sesión en Linux?4 Cinco maneras de ejecutar comandos en Linux5 Funcionamiento del editor «vi»6 Comandos básicos de Linux relacionados con el sistema de archivos7 Comandos básicos relacionados con los procesos8 Comando básicos de Linux relacionados con los filtros

Leer más »