===== ACL pour LDAP =====
Voici le fichier commenté et à jour utilisé pour les ACL de l'annuaire [[ateliers:serveurmail:ldap]] d'Anarcha.
Ce fichier peut être utilisé tel quel avec la commande ldapmodify :
$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f acl.ldif
Chaque bloc olcAccess est terminé par un ``to * deny`` implicite, il faut donc être exhaustif dans vos ACL.
Attention à ne pas vous bloquer dehors et à ne plus pouvoir utiliser votre répertoire.
# La base frontend contiens toutes les bases. Donc les ACL s'appliquant
# à celle-ci, s'applique à toutes les autres.
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
replace: olcAccess
# Ici nous validons l'accès si l'on se connecte en external sur ldapi
# et que l'utilisateur est root. C'est ce qui fait que l'on peut tout
# changer avec `sudo ldapmodify -Y EXTERNAL -H ldapi:///` par exemple.
# On ajoute ici le droit de modifier la configuration aux personnes
# faisant partie du groupe cn=sudo,ou=Groups
olcAccess: to *
by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage
by group.exact=cn=sudo,ou=Groups,dc=anarcha,dc=pink manage
by * break
# L'objet racine est lisible par tout le monde
olcAccess: to dn.exact=""
by * read
# Tout le monde peut lire le contenu de Subschema qui décrit la syntaxe
# utilisée par LDAP
olcAccess: {3}to dn.base="cn=Subschema"
by * read
# Les droits d'accès ici concerne la configuration de LDAP
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcAccess
# Seul root - en utilisant -Y EXTERNAL -H ldapi:/// - ainsi que les personnes
# dans le groupe cn=sudo,ou=Groups peut gérer toute
# la configuration.
olcAccess: to *
by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage
by group.exact=cn=sudo,ou=Groups,dc=anarcha,dc=pink manage
by * break
# Ceci est la première base de donnée, et correspond donc au cn: dc=anarcha,dc=pink
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
# Les sudo peuvent modifier et gérer l'ensemble des groupes faisant parti de l'OU
# System.
olcAccess: to attrs=userPassword
dn.children="ou=System,dc=anarcha,dc=pink"
by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage
by group.exact=cn=sudo,ou=Groups,dc=anarcha,dc=pink manage
# Seul l'utilisateur peut écrire son mot de passe
# Tout le monde peut essayer de s'en servir dans un but d'identification (ce n'est
# pas un accès en lecture, mais un accès par les mécanismes d'authentification)
# et le reste du monde ne peut rien faire.
olcAccess: to attrs=userPassword
by self write
by anonymous auth
by * none
# Même chose, mais pour un attribut nęcessaire au fonctionnement de Shadow
olcAccess: to attrs=shadowLastChange
by self write
by * read
# La clef SSH e peut être écrite que par l'owner. Tout le monde peut lire.
olcAccess: to attrs=sshPublicKey
by self write
by * read
# Tout le monde peut lire notre arbre. C'est pour ça que ldapsearch fonctionne.
# Nobody ne peut rien faire
# Et le groupe sudo a tous les pouvoirs
olcAccess: to *
by dn.exact=uid=nobody,ou=System,dc=anarcha,dc=pink none
by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage
by group.exact=cn=sudo,ou=Groups,dc=anarcha,dc=pink manage
by anonymous read
by * read
La dernière ligne du fichier DOIT être une ligne vide. A noter qu'au lieu d'utiliser un replace, il est possible d'utiliser add/delete, mais il est plus simple d'avoir une représentation détaillée.