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
Au premier match la règle est appliquée
Aucune mise en production sans tests avec table de vérité sur les cas
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
Bonsoir,
et bien merci pour ces 2 informations précieuses :
– possibilité de supprimer par id
– ordre d’application
A+