LDAP

De jagfloriano.com
Ir a la navegaciónIr a la búsqueda

LDAP

¿Qué es LDAP?

LDAP (Lightweight Directory Access Protocol) es un **protocolo ligero de acceso a directorios**.

Características principales:

  • LDAP fue creado por la Universidad de Michigan en 1992 como una alternativa ligera a DAP.
  • Está basado en el estándar **X.500**.
  • El RFC 2251 fue publicado en 1997 (actualmente actualizado por otros RFC).
  • LDAP, por sí mismo, **no define un servicio de directorio**.
  • Define el **transporte y el formato de los mensajes** utilizados para que un cliente acceda a los datos almacenados en un directorio.

Fundamentos de LDAP

  • LDAP es un **servicio global de directorios** capaz de almacenar distintos tipos de información.
  • Puede considerarse como una **base de datos de objetos**, organizados por clases.
  • A diferencia de una base de datos relacional tradicional, LDAP está optimizado para:
 ** Operaciones de lectura
 ** Búsquedas
 ** Navegación
  • No está pensado para un alto volumen de escrituras.
  • OpenLDAP es una **implementación libre y abierta** del protocolo LDAP.


El directorio LDAP

  • Al igual que DNS, las entradas de un directorio LDAP están organizadas en una **estructura jerárquica en forma de árbol**.
  • Cuanto mayor es la profundidad del árbol, mayor suele ser la precisión y especificidad de la información almacenada.
  • Esta estructura se denomina formalmente **Directory Information Tree (DIT)** (Árbol de Información del Directorio).
  • La parte superior de esta estructura se conoce como el **elemento raíz** del directorio.


Terminología LDAP

  • **Entrada u objeto**: unidad mínima de información almacenada en el directorio LDAP.
  • **Atributos**: piezas de información asociadas a un objeto (por ejemplo, correo electrónico).
  • **objectClass**: define el tipo de objeto y determina qué atributos puede o debe contener.
  • Esquema: conjunto de definiciones que describen:
 ** Sintaxisde atributos
 ** Definiciones de objectClass
  • **LDIF**: LDAP Data Interchange Format, formato de intercambio de datos LDAP.
  • **DN (Distinguished Name)**: nombre completo y único que identifica una entrada en el directorio.
  • **RDN (Relative Distinguished Name)**: parte del DN que identifica la entrada de forma relativa dentro de su rama.

Utilidades OpenLDAP

Utilidades de línea de comandos

  • **ldapadd**: añade objetos al directorio LDAP.
  • **ldapmodify**: modifica objetos existentes.
  • **ldapdelete**: elimina objetos del directorio.
  • **ldapsearch**: consulta y busca objetos en LDAP.
  • **ldappasswd**: establece o modifica la contraseña de un usuario LDAP.
  • **slapadd**: importa entradas desde un archivo LDIF directamente en la base de datos.
  • **slapcat**: exporta el contenido del directorio LDAP a formato LDIF.
  • **slapindex**: reconstruye los índices del directorio LDAP.
  • **slappasswd**: genera contraseñas cifradas para LDAP.

Utilidades de entorno gráfico

  • **Apache Directory Studio**

Herramienta gráfica para:

  • Navegación por el directorio
  • Edición de entradas
  • Gestión de esquemas
  • Administración general de OpenLDAP


Documentación OpenLDAP

  • Documentación oficial:
 http://www.openldap.org/doc
  • Páginas del manual:
 * `apropos slapd`
 * `apropos ldap`
  • Guía avanzada LDAP (Zytrax):
 http://www.zytrax.com/books/ldap/ape/


Instalación de OpenLDAP

En RHEL 9, OpenLDAP se instala desde los repositorios oficiales y utiliza configuración dinámica basada en *cn=config*.

Requisitos previos

  • IP estática
  • Nombre de host correctamente configurado
  • Resolución DNS o entrada en /etc/hosts
  • Sincronización horaria (recomendado)

Ejemplo de validación:

192.168.1.81 node1.jagfloriano.com node1

Preparación del sistema

  • Configuración de red
[root@nodo1 ~]# ip route
default via 192.168.1.1 dev enp0s3 proto static metric 100
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.81 metric 100

[root@nodo1 ~]#  ip a show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:f3:3c:51 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.81/24 brd 192.168.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fef3:3c51/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
  • Verificación del hostname
[root@nodo1 ~]# hostname
nodo1

[root@nodo1 ~]# hostname -f
nodo1.jagfloriano.com

[root@nodo1 ~]# hostnamectl
 Static hostname: nodo1
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: 20ff935e15e14490a6e182f1a7979010
         Boot ID: daaaf7f2b9104421820d256e95a711c3
  Virtualization: oracle
Operating System: Red Hat Enterprise Linux 9.6 (Plow)
     CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos
          Kernel: Linux 5.14.0-570.12.1.el9_6.x86_64
    Architecture: x86-64
 Hardware Vendor: innotek GmbH
  Hardware Model: VirtualBox
Firmware Version: VirtualBox
  • Comprobación de resolución de nombres
[root@nodo1 ~]# grep 192.168.1.81 /etc/hosts
192.168.1.81 node1.jagfloriano.com node1

[root@nodo1 ~]# getent hosts nodo1
fe80::a00:27ff:fef3:3c51 nodo1

[root@nodo1 ~]# ping -c 1 nodo1.jagfloriano.com
PING nodo1.jagfloriano.com (192.168.1.81) 56(84) bytes of data.
64 bytes from nodo1.jagfloriano.com (192.168.1.81): icmp_seq=1 ttl=64 time=0.011 ms

--- nodo1.jagfloriano.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.011/0.011/0.011/0.000 ms
  • Puertos utilizados (389 / 636)
[root@nodo1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: cockpit dhcpv6-client high-availability ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Los puertos que se utilizarán posteriormente son:

  • 389/TCP (LDAP)
  • 636/TCP (LDAPS, opcional)

Instalación de paquetes

Instalar los paquetes necesarios:

dnf install -y openldap openldap-servers openldap-clients
  • openldap: librerías base
  • openldap-servers: servicio slapd
  • openldap-clients: utilidades ldapadd, ldapsearch, etc
  • Instalación del servicio LDAP
  • Verificación de la instalación

Configuración inicial del servidor LDAP

  • Ejecución del asistente de configuración
  • Dominio del directorio
  • Organización
  • Backend de base de datos
  • Usuario administrador
  • Versiones de LDAP permitidas

Estructura inicial del directorio (DIT)

  • Base DN
  • Unidades organizativas iniciales
    • usuarios
    • grupos
    • sistemas (opcional)

Arranque y verificación del servicio

  • Comprobación del proceso slapd
  • Puertos en escucha
  • Prueba de conexión local con ldapsearch

Configuración de OpenLDAP

  • Esquemas LDAP
  • Gestión mediante archivos LDIF
  • Creación de objetos
    • Unidades organizativas
    • Grupos
    • Usuarios
  • Gestión de contraseñas

Configuración de clientes LDAP

  • Métodos de integración
    • libnss-ldap (legacy)
    • SSSD (recomendado)
  • Configuración de NSS
  • Configuración de PAM
  • Creación automática de directorios home

Verificación y pruebas

  • Consultas LDAP básicas
  • Resolución de usuarios y grupos
  • Login con usuarios LDAP

Logs y troubleshooting

  • Logs del servicio LDAP
  • Errores comunes
  • Problemas de autenticación

Buenas prácticas

  • Uso de TLS
  • Uso de contraseñas cifradas
  • Principio de mínimos privilegios
  • Copias de seguridad del directorio