Modifier les ACL d'un annuaire OpenLDAP

Les droits d'accès sur les objets du DIT OpenLDAP sont contrôlés par des ACL (Access Control List), qui sont stockés au niveau du rootSuffix.

Par exemple, on peut récupérer les règles via une requête telle que :

ldapsearch -LLL -x -b "cn=config" -D "cn=admin,cn=config" \ 
 -w secret "(objectclass=olchdbconfig)" olcaccess
dn: olcDatabase={1}hdb,cn=config
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to dn.base="ou=users,dc=nodomain" by users read
olcAccess: {3}to * by self write by dn="cn=admin,dc=nodomain" write by * read

Les ACL sont matérialisées par l'attribut olcAccess. Dans notre cas, elles signifient :

  • Tout le monde peut lire tout l'arbre (by * read), y compris en mode anonyme
  • Seuls les utilisateurs connectés peuvent accéder à la branche ou=users,dc=nodomain
  • Seul l'utilisateur lui-même et l'administrateur peuvent écrire. Les autres peuvent lire les valeurs d'attributs

Limiter les accès à un groupe

Plutôt qu'une énumération de comptes, il est préférable d'utiliser des groupes LDAP pour affecter des accès. Pour cela on utilise une syntaxe telle que

olcAccess: to attrs=userPassword  by dn="cn=admin,dc=nodomain" write by group/groupOfUniqueNames/uniqueMember="cn=Administrators,ou=groups,dc=nodomain" write

Modifier via LDAPmodify

Si on veut modifier les ACL en "live", on peut passer par une commande ldapmodify, en se connectant avec l'administrateur de la configuration.

Dans le fichier LDIF, il faut repréciser toutes les ACL. Par exemple, si je veux ajouter la règle sur le mot de passe, mon fichier LDIF sera :

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to dn.base="ou=users,dc=nodomain" by users read
olcAccess: {3}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcAccess: {4}to attrs=userPassword by dn="cn=admin,dc=nodomain" write by
 group/groupOfUniqueNames/uniqueMember="cn=Administrators,ou=groups,dc=nodomain" write

Et la mise à jour de la configuration se fera via :

ldapmodify -x  -D "cn=admin,cn=config" -w secret -f ACL.ldif

 

 

Catégorie