OpenLDAP : l’overlay memberOf

L’overlay « memberOf » d’OpenLDAP permet de maintenir à jour via LDAP la liste des groupes auquels appartiennent les utilisateurs.

Sa mise en place est triviale : dans le fichier de configuration de OpenLDAP, par défaut « /etc/openldap/slapd.conf » qui peut devenir sur certaines distributions « /etc/ldap/slapd.conf », charger le module « memberof » puis dans la définition de la base de donnée correspondante, charger l’overlay comme dans cet extrait d’un fichier « slapd.conf » :

### Inclusion des schemas ###
#
include         /srv/openldap-2.4.19/etc/openldap/schema/core.schema
include         /srv/openldap-2.4.19/etc/openldap/schema/cosine.schema
include         /srv/openldap-2.4.19/etc/openldap/schema/nis.schema
include         /srv/openldap-2.4.19/etc/openldap/schema/inetorgperson.schema
...
### Inclusion des modules ###
#
modulepath      /srv/openldap-2.4.19/libexec/openldap
moduleload      syncprov
moduleload      memberof
...
 
# DATABASES DEFINITION
# Database info
database        hdb
suffix          "o=rez0.lan"
rootdn          "cn=admin,o=rez0.lan"
rootpw          {SSHA}QQR0gZclxLkbRy50bhw2pCTd1DF18Kdh
directory       "/var/lib/ldap/rez0.lan"
 
overlay          memberof

Lors de l’interrogation de l’annuaire, nous obtenons les groupes associés aux utilisateurs :

fhh@mafalda /etc/openldap $ ldapsearch -LLL -x -D "uid=root,ou=users,o=rez0.lan" -b o=rez0.lan -W "(uid=fhh)" memberof
Enter LDAP Password: 
dn: uid=fhh,ou=users,o=rez0.lan
memberOf: cn=info,ou=groups,o=rez0.lan

Avec le groupe info définit ainsi :

dn: cn=info, ou=groups, o=rez0.lan
member: uid=fhh,ou=users, o=rez0.lan
objectClass: groupOfNames
cn: info

Par défaut l’overlay « memberOf » :

  • recherche des groupes du type « groupOfNames » (core.schema) qui peut être modifié par la définition de « memberof-group-oc » ;
  • récupère les valeurs de l’attribut « member » de ces groupes qui peut être modifié par la variable « memberof-member-ad » lors de l’appel de l’overlay (ATTENTION : la valeur récupérée DOIT être un « dn » complet ex : uid=toto,ou=users,dc=exemple,dc=com) ;
  • retourne les groupes associés à une entité sous forme de « dn » dans le(s) champ(s) « memberOf » qui peut être modifié par « memberof-memberof-ad » lors de l’appel de l’overlay.

L’ensemble des paramètres sont modifiables lors de l’appel de l’overlay :

overlay          memberof
memberof-refint true
memberof-dangling error
memberof-group-oc groupOfNames
memberof-member-ad member
memberof-memberof-ad memberOf

Notons le « memberof-refint » à vrai qui permet de conserver une cohérence de l’annuaire en cas de modification d’un utilisateur ainsi que « memberof-dangling » qui définit la statégie à adopter en cas de référence ballante. Dans ce cas une erreur est remontée.

ATTENTION : Souvenez vous que « memberof-member-ad » doit contenir un « dn » !!! Ainsi :

overlay          memberof
memberof-refint true
memberof-dangling error
memberof-group-oc posixGroup
memberof-member-ad memberUid

ne permettra pas le démarrage de l’annuaire .

8 réflexions au sujet de « OpenLDAP : l’overlay memberOf »

  1. Bonjour,

    un commentaire sur un vieux sujet. Donc l’attribut memberof est seulement utilisé avev grouoofnames ou si on veut l’utiliser avec posixgroup on doit mettre uid dans memberof-member-ad ?

    Merci.

    1. Arf, ce n’est pas l’age qui compte, certains sujets sont indémodables … Je ne suis pas sur de bien comprendre la question… memberof est un overlay, « un plugin » et non un attribut. Le champ défini par « memberof-member-ad » ne peut être un uid puisque le champ désigné doit contenir un dn… Enfin groupofname est simplement un objectclass permettant d’accéder à un champ member …

  2. C’est une bonne présentation, par contre j’aime bien savoir est ce que l’overlay memberof une fois activé, peut charger un entré LDAP avec ce que vous avez utilisé ?

    1. Je ne suis pas sur de bien comprendre votre question… Une fois activé, memberof modifie des entrées. Si un utilisateur est supprimé, il est retiré des groupes dans lesquels il était inscrit…

      1. Je reviens sur cette (bonne) doc pour un autre projet.
        Et là je remarque une typo:

        memberof-group-oc posixGoup

        au lieu de :

        memberof-group-oc posixGroup

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *