Bonnes pratiques de mise en œuvre des options d'attributs
OpenLDAP : activation 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
.
Écriture des valeurs
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
Lecture et requêtage
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.
OpenLDAP: contrôler la visibilité d'un attribut selon son option
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