Configurar un servidor y un cliente de LDAP en Linux CentOS

¿Qué es LDAP y para qué sirve?

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.

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 ~]#

¿Qué es un fichero LDIF?

Un LDIF (LDAP Data Interchange Format) es un formato de archivo que se utiliza para almacenar y sincronizar datos en un servidor LDAP. LDIF puede leerse e importarse directamente en la mayoría de las herramientas LDAP, como OpenLDAP, ApacheDS y 389 Directory Server. Los archivos LDIF también se pueden exportar desde estas herramientas para respaldar o transferir los datos LDAP.

La estructura básica de un archivo LDIF es una lista de entradas LDAP, donde cada entrada LDAP contiene un conjunto de atributos LDAP. Cada atributo LDAP tiene un nombre y un valor o valores. Los nombres de los atributos LDAP deben estar en mayúsculas y seguir el formato «NOMBRE-ATRIBUTO:». El valor del atributo puede ser una cadena, un número o una fecha.

Ejemplo del formato de un fichero LDIF
Ejemplo del formato de un fichero LDIF

A continuación, vamos a realizar una serie de operaciones básicas en el servidor de LDAP utilizando ficheros LDIF.

Damos de alta un usuario en el servidor de LDAP

Para poder conectarnos al servidor de LDAP necesitaremos que esté abierto el puerto TCP 389.

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 ~]#

Montaje automático de filesystems en Linux con Automount

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.

Copia de seguridad del servidor de LDAP

Para hacer una copia de seguridad del servidor de LDAP, ejecutaremos los siguientes comandos:

service slapd stop
slapcat -v -F /etc/openldap/slapd.d -l bacup-ldap-$(date +%Y%m%d).ldif
service slapd start

Creación de grupos de LDAP

Los grupos en LDAP (Lightweight Directory Access Protocol) sirven para varios propósitos importantes en la gestión de redes y sistemas informáticos. Algunos de los usos más comunes son:

1. Control de Acceso y Gestión de Permisos:

   – Agrupación de Usuarios: Los grupos LDAP permiten agrupar usuarios bajo un conjunto común. Esto es útil para asignar permisos, derechos o políticas a muchos usuarios a la vez, en lugar de hacerlo individualmente.

   – Asignación de Recursos: Puedes usar grupos LDAP para controlar el acceso a recursos como archivos, directorios, aplicaciones, servicios de red, etc. Por ejemplo, un grupo «Contabilidad» podría tener acceso a ciertas carpetas y aplicaciones relacionadas con su trabajo.

2. Simplificación de la Administración:

   – Gestión Centralizada: Al tener a los usuarios organizados en grupos, se facilita la administración de permisos y políticas. Por ejemplo, al añadir un nuevo usuario a un grupo «Ventas», automáticamente heredaría los permisos y accesos definidos para ese grupo.

   – Cambio de Roles o Departamentos: Cuando un usuario cambia de rol o departamento, es más sencillo actualizar su acceso cambiándolo de grupo, en lugar de modificar sus permisos individualmente.

3. Seguridad Mejorada:

   – Minimizar Errores: Al gestionar los permisos a través de grupos, reduces el riesgo de errores humanos que podrían ocurrir al asignar permisos individualmente.

   – Principio de Menor Privilegio: Los grupos LDAP facilitan la implementación del principio de menor privilegio, asegurando que los usuarios tengan solo los permisos necesarios para su rol, ni más ni menos.

4. Eficiencia en la Distribución de Información:

   – **Correo Electrónico y Comunicaciones:** Los grupos LDAP pueden ser utilizados para gestionar listas de correo electrónico, asegurando que las comunicaciones lleguen a todos los miembros relevantes de una organización.

5. Integración con Aplicaciones y Servicios:

   – Aplicaciones Empresariales: Muchas aplicaciones empresariales y servicios en la nube pueden integrarse con LDAP para la gestión de usuarios y grupos, permitiendo una experiencia de usuario coherente y unificada.

   – Single Sign-On (SSO): Los grupos LDAP pueden ser fundamentales en la configuración de sistemas de autenticación única (SSO), permitiendo que los usuarios accedan a múltiples aplicaciones y servicios con una sola cuenta.

6. Personalización y Filtrado de Datos:

   – Acceso Basado en Roles: Los grupos permiten personalizar la experiencia del usuario, mostrando o escondiendo datos y funciones según el grupo al que pertenezca el usuario.

Pasos para crear un grupo de LDAP

1. Definir la Estructura del Grupo:

   – Los grupos en LDAP se definen como entradas con un tipo de objeto específico, generalmente `posixGroup` o `groupOfNames`, dependiendo de tus necesidades.

   – Un grupo típico podría tener atributos como `cn` (Common Name), `gidNumber` (para `posixGroup`), y `member` (para `groupOfNames`).

2. Crear un Archivo LDIF para el Grupo:

   – LDIF (LDAP Data Interchange Format) es el formato estándar para representar datos de directorio LDAP.

   – Crea un archivo `.ldif` con la definición de tu grupo. Por ejemplo:

     «`ldif

     dn: cn=miGrupo,ou=grupos,dc=ejemplo,dc=com

     objectClass: posixGroup

     cn: miGrupo

     gidNumber: 10000

     «`

3. Agregar el Grupo al Directorio LDAP:

   – Utiliza el comando `ldapadd` para agregar el grupo al directorio LDAP.

   – Ejemplo de comando:

     «`bash

     ldapadd -x -D «cn=admin,dc=ejemplo,dc=com» -W -f miGrupo.ldif

     «`

   – Aquí, `-D` especifica el DN del usuario que tiene los permisos para añadir entradas, `-W` pide la contraseña, y `-f` indica el archivo LDIF a utilizar.

4. Verificación:

   – Puedes verificar que el grupo se ha creado correctamente utilizando `ldapsearch`.

   – Ejemplo:

     «`bash

     ldapsearch -x -b «ou=grupos,dc=ejemplo,dc=com» «(cn=miGrupo)»

     «`

Añadir un usuario a un grupo de LDAP

Añadir un usuario a un grupo en LDAP implica modificar la entrada del grupo para incluir el DN (Distinguished Name) del usuario como miembro del grupo. Los pasos específicos pueden variar dependiendo del tipo de grupo que estés utilizando (como `posixGroup` o `groupOfNames`). A continuación, podemos ver una guía general:

Pasos para Añadir un Usuario a un Grupo en LDAP

1. Identificar el Tipo de Grupo y su Estructura:

   – `posixGroup`: Para los grupos `posixGroup`, se añade el atributo `memberUid`, que generalmente contiene el nombre de usuario (UID).

   – `groupOfNames`: Para los grupos `groupOfNames`, se añade el atributo `member`, que contiene el DN completo del usuario.

2. Preparar el Archivo LDIF para la Modificación:

   – Crea un archivo LDIF (`modificacion.ldif`, por ejemplo) que describa la modificación.

   – Ejemplo para `posixGroup`:

     «`ldif

     dn: cn=miGrupo,ou=grupos,dc=ejemplo,dc=com

     changetype: modify

     add: memberUid

     memberUid: nombreDeUsuario

     «`

   – Ejemplo para `groupOfNames`:

     «`ldif

     dn: cn=miGrupo,ou=grupos,dc=ejemplo,dc=com

     changetype: modify

     add: member

     member: uid=nombreDeUsuario,ou=usuarios,dc=ejemplo,dc=com

     «`

3. Aplicar la Modificación Usando `ldapmodify`:

   – Utiliza el comando `ldapmodify` para aplicar los cambios.

   – Ejemplo de comando:

     «`bash

     ldapmodify -x -D «cn=admin,dc=ejemplo,dc=com» -W -f modificacion.ldif

     «`

   – Aquí, `-D` especifica el DN del usuario con permisos para modificar el directorio, `-W` pide la contraseña, y `-f` señala el archivo LDIF.

4. **Verificación:

   – Verifica que el usuario ha sido añadido correctamente al grupo utilizando `ldapsearch`.

   – Ejemplo:

     «`bash

     ldapsearch -x -b «cn=miGrupo,ou=grupos,dc=ejemplo,dc=com»

Creación de grupos anidados

Crear grupos anidados en OpenLDAP, aunque no soportado de manera inherente, puede realizarse mediante una estructura que simule esta funcionalidad. Aquí te ofrezco un ejemplo para ilustrar cómo podrías configurar grupos anidados usando `groupOfNames`. Este ejemplo asume que ya tienes una estructura básica de LDAP configurada y funcionando.

Fuente: https://www.openldap.org/doc/admin24/access-control.html

Paso 1: Definir los Grupos

Supongamos que quieres crear un grupo principal llamado «IT» y un subgrupo dentro de él llamado «Desarrolladores».

Paso 2: Crear el Grupo Principal

Primero, creas el grupo principal «IT». Para ello, usas un archivo LDIF (por ejemplo, `grupoIT.ldif`):

«`ldif

dn: cn=IT,ou=grupos,dc=ejemplo,dc=com

objectClass: groupOfNames

objectClass: top

cn: IT

description: Grupo principal de IT

member: cn=Manager,ou=usuarios,dc=ejemplo,dc=com

«`

En este archivo, defines el grupo con el nombre común (cn) «IT», y añades un miembro inicial (este es necesario porque `groupOfNames` requiere al menos un miembro).

Paso 3: Crear el Subgrupo

A continuación, creas el subgrupo «Desarrolladores». Usas otro archivo LDIF (por ejemplo, `grupoDesarrolladores.ldif`):

«`ldif

dn: cn=Desarrolladores,ou=grupos,dc=ejemplo,dc=com

objectClass: groupOfNames

objectClass: top

cn: Desarrolladores

description: Subgrupo de Desarrolladores en IT

member: cn=Empleado1,ou=usuarios,dc=ejemplo,dc=com

«`

Este grupo también requiere al menos un miembro.

Paso 4: Anidar los Grupos (Simulación)

Ahora, para simular la anidación, añades el grupo «Desarrolladores» como miembro del grupo «IT». Creas un archivo LDIF (por ejemplo, `anidarGrupos.ldif`):

«`ldif

dn: cn=IT,ou=grupos,dc=ejemplo,dc=com

changetype: modify

add: member

member: cn=Desarrolladores,ou=grupos,dc=ejemplo,dc=com

«`

Paso 5: Aplicar los Cambios con ldapmodify

Ejecutas los siguientes comandos para aplicar los cambios:

«`bash

ldapadd -x -D «cn=admin,dc=ejemplo,dc=com» -W -f grupoIT.ldif

ldapadd -x -D «cn=admin,dc=ejemplo,dc=com» -W -f grupoDesarrolladores.ldif

ldapmodify -x -D «cn=admin,dc=ejemplo,dc=com» -W -f anidarGrupos.ldif

«`

Consideraciones:

– En este ejemplo, «Desarrolladores» se añade como un miembro del grupo «IT», pero esto no hace que los miembros de «Desarrolladores» sean automáticamente miembros de «IT» en términos de acceso y permisos. La interpretación de esta anidación depende de la lógica de la aplicación cliente o de scripts adicionales que manejen esta relación.

– Asegúrate de que los DNs usados en los archivos LDIF coincidan con tu esquema y estructura de LDAP existentes.

– La gestión de grupos anidados de esta manera puede ser compleja y podría requerir mantenimiento adicional.

Este método proporciona una forma de organizar visualmente los grupos en una jerarquía en OpenLDAP, aunque no ofrece funcionalidad de herencia de pertenencia a grupos de forma nativa.

Subgrupo de LDAP heredando permisos del grupo padre mediante ACL

Configurar ACLs (Access Control Lists) en OpenLDAP para manejar la herencia de permisos en grupos y subgrupos puede ser un proceso complejo y muy específico de tu configuración y necesidades. A continuación, te proporciono un ejemplo genérico de cómo podrías configurar una ACL para este propósito:

Imagina que tienes un grupo principal `cn=GrupoPrincipal,ou=grupos,dc=ejemplo,dc=com` y quieres que los miembros de este grupo tengan ciertos permisos sobre los recursos de un subgrupo `cn=Subgrupo,ou=grupos,dc=ejemplo,dc=com`.

Una ACL en el archivo de configuración de OpenLDAP (`slapd.conf` o `cn=config`) podría ser algo así:

«`conf

access to dn.subtree=»ou=subgrupo,ou=grupos,dc=ejemplo,dc=com»

    by group.exact=»cn=GrupoPrincipal,ou=grupos,dc=ejemplo,dc=com» write

    by * read

«`

Explicación:

– `dn.subtree=»ou=subgrupo,ou=grupos,dc=ejemplo,dc=com»`: Esta línea especifica que la ACL se aplica a todos los objetos dentro del subárbol del subgrupo.

– `by group.exact=»cn=GrupoPrincipal,ou=grupos,dc=ejemplo,dc=com» write`: Esta línea otorga permisos de escritura a todos los miembros del grupo principal.

– `by * read`: Esto permite que todos los demás (por defecto) tengan permisos de lectura.

Heredación del grupo padre

Imaginemos una situación en el que un usuario de LDAP pertenece a un grupo hijo que, a su vez, pertenece a un grupo padre. Lo que queremos conseguir es que cuando el usario haga login en un servidor Linux pertenezca tanto al grupo hijo como al grupo padre (comando id usuario).

Para conseguir esto a nivel de LDAP, hay que configurar los siguientes parámetros:

[domain/your-domain.com]
ldap_schema = rfc2307bis
ldap_group_object_class=groupOfNames
ldap_group_member=member
ldap_group_nesting_level = 10

¿Que es el esquema rfc2307bis?

El esquema rfc2307bis es una extensión o variante del esquema rfc2307 original utilizado en LDAP (Lightweight Directory Access Protocol). Mientras que rfc2307 es ampliamente adoptado para representar información de usuarios y grupos en directorios LDAP, rfc2307bis introduce mejoras significativas, especialmente en lo que respecta a la representación de la pertenencia a grupos. Aquí te explico las diferencias clave:

RFC2307
• En el esquema rfc2307, la pertenencia a grupos se maneja principalmente a través del atributo memberUid en los objetos de grupo, que almacena los nombres de usuario (UID) de los miembros.
• Este enfoque es más simple pero tiene limitaciones, particularmente en entornos grandes o complejos, donde la gestión de la pertenencia a grupos puede ser más desafiante.

RFC2307bis
• rfc2307bis mejora el manejo de la pertenencia a grupos permitiendo el uso del atributo member en los objetos de grupo. Este atributo almacena los Distinguished Names (DN) completos de los miembros del grupo, en lugar de solo los UIDs.
• Esta característica facilita la gestión de grupos anidados, ya que permite referenciar directamente a otros objetos de grupo o a usuarios en el atributo member.
• Ofrece una gestión más flexible y robusta de la pertenencia a grupos en directorios LDAP.

Importancia de RFC2307bis
Grupos Anidados: rfc2307bis es especialmente útil para implementar grupos anidados, una funcionalidad crucial en entornos empresariales donde la estructura de grupo puede ser compleja.
Compatibilidad: Algunos sistemas y aplicaciones pueden requerir o funcionar mejor con el esquema rfc2307bis debido a su enfoque avanzado en la gestión de grupos.
Adopción: Aunque rfc2307bis no es tan universalmente adoptado como rfc2307, su uso está creciendo en entornos que necesitan una gestión más detallada de la pertenencia a grupos.

COMPÁRTEME

Deja un comentario