Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
informatique:reseau:ldap:dynlist [2020/11/23 11:45] – [Installation] bn8 | informatique:reseau:ldap:dynlist [2024/05/27 17:10] (Version actuelle) – [Module dynlist] bn8 |
---|
<note important>**Il est important que l'attribut dynamique qui listera les groupes de l'utilisateur soit également défini** dans le schéma de l'annuaire. Dans l'exemple ci-dessous, nous utiliserons l'attribut //memberOf// qui est apporté par le module //memberof// et dont la définition est la suivante : <code>( 1.2.840.113556.1.2.102 NAME 'memberOf' DESC 'Group that the entry belongs to' SYNTAX '1.3.6.1.4.1.1466.115.121.1.12' EQUALITY distinguishedNameMatch )</code></note> | <note important>**Il est important que l'attribut dynamique qui listera les groupes de l'utilisateur soit également défini** dans le schéma de l'annuaire. Dans l'exemple ci-dessous, nous utiliserons l'attribut //memberOf// qui est apporté par le module //memberof// et dont la définition est la suivante : <code>( 1.2.840.113556.1.2.102 NAME 'memberOf' DESC 'Group that the entry belongs to' SYNTAX '1.3.6.1.4.1.1466.115.121.1.12' EQUALITY distinguishedNameMatch )</code></note> |
| |
<note warning>Comme pour le module //memberof//, **il ne sera pas possible de faire de recherche d'utilisateur avec un filtre sur la valeur de l'attribut listant ses groupes.**</note> | <note warning>**Avant la version 2.5** d'OpenLDAP (Debian Bookworm), comme pour le module //memberof//, **il n'était pas possible de faire de recherche d'utilisateur avec un filtre sur la valeur de |
| l'attribut listant ses groupes.** Cette limitation a été supprimée en version 2.5, mais cela n'est pas sans impacte sur les performances. Il est donc toujours conseillé de privilégier d'utiliser |
| la //méthode traditionnelle// pour lister les groupes d'un utilisateur. |
| |
<note tip>Contrairement au module //memberof//, la configuration dynamique de ce module ne pose pas de soucis et il n'est pas nécessaire de "toucher" aux membres des groupes, pour que l'attribut dynamique soit alimenté.</note> | Il est par ailleurs à noter que dans les premières versions disponibles d'OpenLDAP 2.5, il y avait une |
| [[https://lists.openldap.org/hyperkitty/list/openldap-technical@openldap.org/thread/EOIWWJM4YNU367YVSILDBM5WISKPRSDP/|nette perte de performances]] lorsque ce module était activé par rapport à la version 2.4. |
| Ces problèmes furent en grandes partie corrigés dans la version [[https://git.openldap.org/openldap/openldap/-/blob/OPENLDAP_REL_ENG_2_5_17/CHANGES|2.5.17]] d'OpenLDAP |
| (disponible en backports sur le [[https://apt.easter-eggs.com/|dépôt Easter-eggs]]).</note> |
| |
| <note tip>Contrairement au module //memberof//, la configuration dynamique de ce module ne pose pas de soucis et il n'est pas nécessaire de "toucher" aux membres des groupes, pour que l'attribut dynamique |
| soit alimenté.</note> |
===== Installation ===== | ===== Installation ===== |
| |
Il faut d'abord charger le module //dynlist// : | Il faut d'abord charger le module //dynlist// : <code bash>ldapmodify -Y EXTERNAL -H ldapi:/// << EOF |
* Créer le fichier ///tmp/load-module.ldif// : <code bash>cat << EOF > /tmp/load-module.ldif | |
dn: cn=module{0},cn=config | dn: cn=module{0},cn=config |
changetype: modify | changetype: modify |
olcModuleLoad: dynlist | olcModuleLoad: dynlist |
EOF</code> | EOF</code> |
* Jouer ce LDIF via //ldapmodify// : <code bash>ldapmodify -x -D cn=admin,cn=config -W -f /tmp/load-module.ldif | |
# Ou : | |
ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/load-module.ldif</code> | |
| |
Il faut charger également le schéma LDAP propre à ce module (fourni par le paquet Debian //slapd//) : <code bash>ldapadd -x -D cn=admin,cn=config -W -f /etc/ldap/schema/dyngroup.ldif | Il faut charger également le schéma LDAP propre à ce module (fourni par le paquet Debian //slapd//) : <code bash>ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/dyngroup.ldif</code> |
# Ou : | |
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/dyngroup.ldif</code> | |
| |
Il faut ensuite activer ce module pour votre //database// : | Il faut ensuite activer ce module pour votre //database// : <code bash>ldapadd -Y EXTERNAL -H ldapi:/// << EOF |
* Créer le fichier ///tmp/config-module.ldif// : <code bash>cat << EOF > /tmp/config-module.ldif | dn: olcOverlay=dynlist,olcDatabase={1}mdb,cn=config |
dn: olcOverlay={0}dynlist,olcDatabase={1}mdb,cn=config | |
objectClass: olcOverlayConfig | objectClass: olcOverlayConfig |
objectClass: olcDynamicList | objectClass: olcDynamicList |
EOF | EOF |
</code> | </code> |
* Jouer ce LDIF avec //ldapadd// : <code bash>ldapadd -x -D cn=admin,cn=config -W -f /tmp/config-module.ldif | |
# Ou : | |
ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/config-module.ldif</code> | |
| |
<note tip>La définition de l'attribut //memberof// est fourni par l'overlay OpenLDAP du même nom. Si vous avez l'erreur ''unable to find AttributeDescription #0 "memberOf"'', vous pouvez charger le overlay ''memberof'' ou bien ajouter le schéma LDAP suivant : <code ldif>dn: cn=memberof,cn=schema,cn=config | <note tip>La définition de l'attribut //memberof// est fourni par l'overlay OpenLDAP du même nom. Si vous avez l'erreur ''unable to find AttributeDescription #0 "memberOf"'', vous pouvez charger le overlay ''memberof'' ou bien ajouter le schéma LDAP suivant : <code ldif>dn: cn=memberof,cn=schema,cn=config |