Clément OUDOT : Astuce OpenLDAP : Des groupes dynamiques ? Jamais sans tri des valeurs !
lundi 7 janvier 2013 à 14:09Dynamique de groupe
Les groupes dynamiques en LDAP sont une fonctionnalité très intéressante, permettant de lister les membres d'un groupe par rapport à un filtre LDAP, ce qui évite de maintenir la liste des membres de manière statique.
Par exemple :
dn: cn=test,ou=groups,dc=example,dc=com objectClass: groupOfURLs objectClass: top cn: test memberURL: ldap:///ou=users,dc=example,dc=com??one?(description=*test*)
Ce groupe contiendra toutes les entrées de la branche ou=users,dc=example,dc=com possédant test dans l'attribut description.
Au vert lait
Dans OpenLDAP, les groupes dynamiques ne sont pas activés par défaut, il faut pour les utiliser charger l'overlay dynlist. Et pour utiliser la classe d'objet groupOfURLs, il faut également charger un schéma.
Cela peut-être fait simplement dans cn=config avec le LDIF suivant :
dn: cn=dyngroup,cn=schema,cn=config objectClass: olcSchemaConfig cn: dyngroup olcObjectIdentifier: {0}NetscapeRoot 2.16.840.1.113730 olcObjectIdentifier: {1}NetscapeLDAP NetscapeRoot:3 olcObjectIdentifier: {2}NetscapeLDAPattributeType NetscapeLDAP:1 olcObjectIdentifier: {3}NetscapeLDAPobjectClass NetscapeLDAP:2 olcObjectIdentifier: {4}OpenLDAPExp11 1.3.6.1.4.1.4203.666.11 olcObjectIdentifier: {5}DynGroupBase OpenLDAPExp11:8 olcObjectIdentifier: {6}DynGroupAttr DynGroupBase:1 olcObjectIdentifier: {7}DynGroupOC DynGroupBase:2 olcAttributeTypes: {0}( NetscapeLDAPattributeType:198 NAME 'memberURL' DESC 'I dentifies an URL associated with each member of a group. Any type of labeled URL can be used.' SUP labeledURI ) olcAttributeTypes: {1}( DynGroupAttr:1 NAME 'dgIdentity' DESC 'Identity to use when processing the memberURL' SUP distinguishedName SINGLE-VALUE ) olcAttributeTypes: {2}( DynGroupAttr:2 NAME 'dgAuthz' DESC 'Optional authoriza tion rules that determine who is allowed to assume the dgIdentity' EQUALITY a uthzMatch SYNTAX 1.3.6.1.4.1.4203.666.2.7 X-ORDERED 'VALUES' ) olcObjectClasses: {0}( NetscapeLDAPobjectClass:33 NAME 'groupOfURLs' SUP top S TRUCTURAL MUST cn MAY ( memberURL $ businessCategory $ description $ o $ ou $ owner $ seeAlso ) ) olcObjectClasses: {1}( DynGroupOC:1 NAME 'dgIdentityAux' SUP top AUXILIARY MAY ( dgIdentity $ dgAuthz ) ) dn: olcOverlay=dynlist,olcDatabase={1}bdb,cn=config objectClass: olcOverlayConfig objectClass: olcDynamicList olcOverlay: dynlist olcDlAttrSet: {0}groupOfURLs memberURL uniqueMember
Comme vous êtes des lecteurs avisés, vous aurez noté qu'on peut utiliser d'autres classes d'objet que groupOfURLs, puisque cela dépend de la configuration de l'overlay dynlist (attribut olcDlAttrSet). Pour plus de détails, voir la page de manuel de l'overlay dynlist (man slapo-dynlist).
Tri sélectif
Cet overlay fonctionne bien sur des petits volumes mais les performances s'écroulent dès le le groupe dynamique doit contenir plusieurs milliers d'utilisateurs.
Le secret réside dans l'option sortvals (olcSortVals dans cn=config) qui active le tri des valeurs sur certains attributs. D'après le manuel :
olcSortVals[...] Specify a list of multi-valued attributes whose values will always be maintained in sorted order. Using this option will allow Modify, Compare, and filter evaluations on these attributes to be performed more efficiently. The resulting sort order depends on the attributes' syntax and matching rules and may not correspond to lexical order or any other recognizable order. This setting is only allowed in the frontend entry.
Dans notre cas, nous allons trier les valeurs de l'attribut uniqueMember :
dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcSortVals olcSortVals: uniqueMember
Dès l'application de ce paramètre, l'affichage de groupes dynamiques de plusieurs milliers d'utilisateurs ne prendra que quelques secondes !
Original post of Clément OUDOT.Votez pour ce billet sur Planet Libre.
Articles similaires
- Clément OUDOT : Sujet du jour : comment instaurer une politique des mots de passe commune à OpenLDAP et Samba ? (04/03/2011)
- Clément OUDOT : Nouveaux RPMs pour OpenLDAP 2.4.24 sur LTB-project (25/03/2011)
- Clément OUDOT : Sortie des RPMs OpenLDAP 2.4.28 sur LDAP Tool Box Project (02/12/2011)
- Clément OUDOT : Mémoriser la dernière authentification dans OpenLDAP (12/06/2012)
- Clément OUDOT : Sortie de Self Service Password 0.6 (27/07/2011)