Les Access Control openldap aka ACL

Comme le sujet ldap a l’air de bien intéresser, je rajoute une couche avec les Access Control, un sujet vaste et surtout une source de complexité et de sécurité.
Toutes les operations se font en tant qu’admin bien évidement.

    Listing

Pour lister les ACL en cours

ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -W -b cn=config '(olcDatabase={1}hdb)' olcAccess
dn: olcDatabase={1}hdb,cn=config
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=cyklodev,dc=com" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=cyklodev,dc=com" write by  * read

Pour en supprimer on peut spécifier la règle dans un fichier ldif mais c’est fastidieux.

    Remove
vim remove.ldif
dn: olcDatabase={1}hdb,cn=config
delete: olcAccess
olcAccess: to dn.base="" by * read
ldapmodify -Y EXTERNAL -H ldapi:/// -f remove.ldif

Mais on peut aussi le faire par id et la c’est plus cool

    Remove by id
vim remove.ldif
dn: olcDatabase={1}hdb,cn=config
delete: olcAccess
olcAccess: {1}
ldapmodify -Y EXTERNAL -H ldapi:/// -f remove.ldif

Comme la configuration de base permet une lecture de tout par tous les users, il vaut mieux commencer par tout enlever en passant par une boucle sur {0}.

Maintenant on peut rajouter ses propres règles comme celle qui exposait toutes les branches aux users :

    Add
vim add.ldif
dn: olcDatabase={1}hdb,cn=config
add: olcAccess
olcAccess: to dn.base="" by * read
ldapmodify -Y EXTERNAL -H ldapi:/// -f add.ldif

A éviter bien sur !

Il reste maintenant a exploiter correctement les fonctionnalités des ACL avec quelques règles a savoir :

Les ACL sont appliquées par ordre croissant {id}

Au premier match la règle est appliquée

Aucune mise en production sans tests avec table de vérité sur les cas

Pour faciliter la gestion quelques fonctionnalités sont ajoutées :

 0: o=suffix
    1: cn=Manager,o=suffix
    2: ou=people,o=suffix
    3: uid=kdz,ou=people,o=suffix
    4: cn=addresses,uid=kdz,ou=people,o=suffix
    5: uid=hyc,ou=people,o=suffix
    dn.base="ou=people,o=suffix" match 2;
    dn.one="ou=people,o=suffix" match 3, and 5;
    dn.subtree="ou=people,o=suffix" match 2, 3, 4, and 5; and
    dn.children="ou=people,o=suffix" match 3, 4, and 5.

Source : Doc OpenLdap 2.4

Zephilou

1 Response

  1. Bonsoir,

    et bien merci pour ces 2 informations précieuses :
    – possibilité de supprimer par id
    – ordre d’application

    A+

Laisser un commentaire

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

Post comment