Bonnes pratiques de mise en œuvre des options d'attributs

L'utilisation des options pour le sous-typage des attributs est possible nativement dans OpenLDAP. Il faut seulement déclarer les options ou les préfixes admissibles. Cette déclaration est globale pour tous les attributs.

  • Un préfixe se termine par un -
  • Une fois le préfixe déclaré, toute option débutant par ce préfixe sera autorisée
  • Le préfixe lang- est déclaré de façon implicite (mais doit être redéclaré de façon explicite si d'autres préfixes ou options sont ajoutés)

Si nous voulons déclarer le préfixe x- (pour autoriser toutes les options à usage privé, non déclarées à l'IANA), on ajoute dans slapd.conf :

slapd.conf
attributeoptions lang- x-

En configuration dynamique, il faut modifier l'objet cn=config, et ajouter l'attribut olcAttributeOptions.

Pour ajouter deux valeurs de l'attribut supannCMSId à un utilisateur existant, dans deux encodages différents, on insère le LDIF suivant :

dn: uid=dupont,ou=people,dc=univ,dc=fr
changetype: modify
add: supannCmsId;x-mifare-xlsb
supannCmsId;x-mifare-xlsb: DEADBEEF000000
-
add: supannCmsId;x-mifare-xmsb
supannCmsId;x-mifare-xmsb: 000000EFBEADDE

On peut demander à lire toutes les valeurs, en spécifiant le type sans option. Dans ce cas, le serveur renvoie l'intégralité des valeurs :

# ldapsearch -x '(uid=dupont)' supannCmsId

dn: uid=dupont,ou=people,dc=unilim,dc=fr
supannCmsId;x-mifare-xlsb: DEADBEEF000000
supannCmsId;x-mifare-xmsb: 000000EFBEADDE

On peut demander à lire uniquement la valeur associée à une option :

# ldapsearch -x '(uid=dupont)' 'supannCmsId;x-mifare-xlsb'

dn: uid=dupont,ou=people,dc=unilim,dc=fr
supannCmsId;x-mifare-xlsb: DEADBEEF000000

Le même principe est valable pour les filtres de recherche : on peut faire une recherche avec ou sans option. Sans option, la recherche sera faite sur toutes les valeurs de l'attribut, quelle que soit son option. Exemples :

# ldapsearch -x '(supannCmsId=DEADBEEF000000)' 'uid'

dn: uid=dupont,ou=people,dc=unilim,dc=fr
uid: dupont

# ldapsearch -x '(supannCmsId=000000EFBEADDE)' 'uid'

dn: uid=dupont,ou=people,dc=unilim,dc=fr
uid: dupont

En précisant l'option, seule la valeur correspondante sera interrogée:

# ldapsearch -x '(supannCmsId;x-mifare-xmsb=000000EFBEADDE)' 'uid'

dn: uid=dupont,ou=people,dc=unilim,dc=fr
uid: dupont

En revanche, dans cet exemple, le filtre “(supannCmsId;x-mifare-xlsb=000000EFBEADDE)” ne renverra pas l'entrée “uid=dupont”, car la valeur 000000EFBEADDE n'est pas associée à l'option x-mifare-xlsb.

Ces exemples ont été réalisés avec les commandes en ligne fournies par OpenLDAP, mais les mêmes règles s'appliquent pour tout outil de requêtage respectant le protocole.

Dans certains cas il peut être nécessaire de restreindre l'accès à un sous-ensemble d'options d'un attribut.

Cela peut répondre à des besoins de :

  • confidentialité: le niveau de visibilité diffère d'une option à l'autre, certaines options devant être restreintes à certains clients seulement;
  • filtrage: certaines options ont pour finalité exclusive des opérations de recherche dans l'annuaire, mais ne doivent pas être lues. Par exemple, une option “x-ascii” contenant une version non accentuée de la valeur.

Dans OpenLDAP, les ACLs sur des options d'attributs fonctionnement de la même manière que celles sur les sous-types d'attributs:

  • une ACL sur l'attribut parent ou dépourvu d'option agit aussi sur les attributs fils et les options;
  • une ACL sur une option ou un fils n'agit que sur celle ou celui-ci.

Les exemples ci-dessous exploitent ces propriétés en ordonnant les ACLs de façon à obtenir le résultat souhaité:

slapd.conf
# limite l'option "x-ascii" du displayName en recherche seule, 
# sauf pour les membres du groupe "ldap.acl.ascii.access":
access to
    attrs=displayName;x-ascii
    by group="cn=ldap.acl.ascii.access,ou=groups,dc=univ-x,dc=fr" break
    by * search
# définition des règles d'accès par défaut du displayName:
access to
    attrs=displayName
    by self write
    by * read
 
# limite l'option "x-mifare-xlsb" du supannCmsId 
# aux seuls membres du groupe "ldap.acl.xlsb.access":
access to
    attrs=supannCmsId;x-mifare-xlsb
    by group="cn=ldap.acl.xlsb.access,ou=groups,dc=univ-x,dc=fr" break
    by * none
# définition des règles d'accès par défaut du supannCmsId:
access to
    attrs=supannCmsId
    by * read
  • Dernière modification : 2018/09/10 13:25