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 * readLes 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