Actualmente estoy trabajando en la integración de la autenticación LDAP en un sistema y me gustaría restringir el acceso basado en el grupo LDAP. La única forma de hacerlo es a través de un filtro de búsqueda y, por lo tanto, creo que mi única opción es utilizar el atributo "memberOf" en mi filtro de búsqueda. Entiendo que el atributo "memberOf" es un atributo operativo que el servidor puede crear para mí en cualquier momento que se cree un nuevo atributo "member" para cualquier entrada "groupOfNames" en el servidor. Mi objetivo principal es poder agregar un atributo "miembro" a una entrada existente "groupOfNames" y agregar un atributo "memberOf" coincidente al DN que proporciono.
Lo que he logrado hasta ahora:
Todavía soy bastante nuevo en la administración de LDAP, pero según lo que encontré en la guía del administrador de openldap, parece que Reverse Group Membership Maintence, también conocido como "memberof overlay", lograría exactamente el efecto que estoy buscando.
Mi servidor está ejecutando actualmente una instalación de paquete (slapd en ubuntu) de openldap 2.4.15 que utiliza la configuración de tiempo de ejecución de estilo "cn = config". La mayoría de los ejemplos que he encontrado todavía hacen referencia al antiguo método "slapd.conf" de configuración estática y he hecho todo lo posible para adaptar las configuraciones al nuevo modelo basado en directorios.
He agregado las siguientes entradas para habilitar el módulo memberof overlay:
Habilite el módulo con olcModuleLoad
cn=config/cn\=module\{0\}.ldif
dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z
Habilitó la superposición para la base de datos y le permitió usar su configuración predeterminada (groupOfNames, member, memberOf, etc.)
cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof
dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z
Mi resultado actual:
Al usar la configuración anterior, puedo agregar un NUEVO "groupOfNames" con cualquier número de entradas "miembro" y tener todos los DN involucrados actualizados con un atributo "memberOf". Esto es parte del comportamiento que esperaría. Si bien creo que lo siguiente debería haberse logrado con el miembro de superposición, todavía no sé cómo hacer lo siguiente y con gusto agradecería cualquier consejo:
- Agregue un atributo "member" a un "groupOfNames" EXISTENTE y haga que se cree automáticamente el atributo "memberOf" correspondiente.
- Elimine un atributo "member" y haga que el atributo "memberOf" correspondiente se elimine automáticamente.
slapadd
(en la base de datos detenida) la forma correcta de hacerlo?Escribí sobre esto recientemente en mi blog, www.jordaneunson.com. Copié y pegué las partes relevantes.
Lo que tenía que hacer era detener el servicio "slapd" en mi servidor LDAP y editar mi archivo slapd.conf y agregar las siguientes dos líneas.
Ya tenía un groupOfNames llamado vpn, así que tuve que crear un archivo LDIF con el siguiente contenido:
Y agregué esto a mi base de datos ldap
Después de esto, encendí el servidor ldap en depuración para verificar si hay errores
y comprobé para asegurarme de que mi membresía de grupo de "vpn" figuraba en mi entrada de usuario.
y bam! ¡éxito!
Así que volví a activar el servicio slapd y tuve mucho éxito desde entonces. Para una nueva herramienta de administración de GUI, estoy usando phpLDAPAdmin y no tengo problemas con el atributo memberOf asignado y sin asignar a mis usuarios.
Una última cosa a tener en cuenta es que el atributo "memberOf" no es parte del esquema básico LDAP v3 y, por lo tanto, realizar una búsqueda de ldap no revelará este atributo a menos que se lo consulte específicamente. Es por eso que en mi ejemplo anterior se declara al final de los parámetros de ldapsearch.
Espero que esto ayude.
Editar: Acabo de probar su problema con Apache Directory Studio: siempre que ingrese el valor del miembro de atributo en su conjunto como se mencionó anteriormente, funciona A-OK. Sin embargo, el atributo memberOf no aparece en la entrada del usuario. Esto se debe a que el atributo memberOf no forma parte del esquema LDAPv3. Para verificar que está allí, use la herramienta de línea de comandos ldapsearch:
fuente