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