Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problèmes d'ACL dans openLDAP

1 réponse
Avatar
Denis
Bonjour !

Après quelques jours passés à remonter mon serveur, me revoilà avec mes
problèmes d'apprentissage d'openLDAP. Ayant - provisoirement -renoncé au
montage automatique des répertoires utilisateurs, je me suis mis à jouer
avec les autorisations d'accés. Et après 3 jours à m'arracher les cheveux,
ça ne marche toujours pas. Voici donc ce que je voudrais faire :

J'ai organisé mon anuuaire en plusieurs OU :
-> une pour les admins de l'annuaire;
-> deux ou (cheradenine et algernon) pour des utilisateurs normaux, qui
n'ont le droit de se connecter que sur les ordis de la même ou qu'eux, avec
un administrateur pour l'ou parmi eux;
-> une ou pour les groupes d'utilisateurs, notamment les groupes d'admins.

Les règles que j'essayes de mettre en place sont les suivantes (n'essayez
pas d'y voir une logique ou un inétrêt quelconque autre que celle de
l'apprentissage) :
-> Les admins d'ou doivent pouvoir tout faire dans leur ou, sauf modifier
les uidNumber et gidNumber.
-> Un simple utilisateur doit pouvoir lire tous ses attributs, et en
modifier certains (mail, téléphone, etc...).
-> N'importe qui, même un utilisateur anonyme doit pouvoir lire les
attributs mail, téléphone, ... de tous les utilisateurs de l'annuaire.
-> Les admins de l'annuaire ont évidemment le droit de tout faire.

Tous les admins sont regroupés dans des groupOfNames au sein de l'ou Groupe.

Avec le fichier /etc/slapd.access.conf qui suit, tout ce que j'obtiens est
qu'un administrateur de l'ou peut tout lire dans son ou (j'ai pas testé la
modification), un simple utilisater ne peut accéder qu'à ses propres
informations, et les administrateurs accédent bien à tout.

Voici mon fichier /etc/slapd.access.conf, avec en commentaires sur ce que ma
logique à moi, à priori différente de celle d'openLDAP, me dicte qu'il doit
faire :

# Accès pour que les administrateurs s'authentifient...
access to dn.subtree="ou=admin,dc=zakalwe,dc=ata"
attrs=userPassword
by
group/groupOfNames/member="cn=administrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by anonymous auth

# Règles d'accés à l'ou algernon
# authentification des utilisateurs de l'ou
access to dn.children="ou=algernon,dc=zakalwe,dc=ata"
attrs=userPassword
by self write
by
group/groupOfNames/member="cn=administrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by
group/groupOfNames/member="cn=admin-algernon,ou=groupe,dc=zakalwe,dc=ata"
write
by anonymous auth

# les admins de l'ou et le propriétaire peuvent modifier ces attributs
# n'importe qui peut les lire
# le break sert à continuer pour tomber sur la règle d'accés totale pour les
# admins de l'annuaire
access to dn.children="ou=algernon,dc=zakalwe,dc=ata"
attrs=mail,mobile,telephoneNumber
by
group/groupOfNames/member="cn=admin-algernon,ou=groupe,dc=zakalwe,dc=ata"
write
by self write
by * read break

# Les admins de l'ou et le propriétaire ne peuvent que lire ces attributs
# pour tous les autres utilisateurs, on passe à la régle suivante
access to dn.children="ou=algernon,dc=zakalwe,dc=ata"
attrs=uidNumber,gidNumber
by dn.children="ou=personnes,ou=algernon,dc=zakalwe,dc=ata" read
by self read
by * break

# pour les autres attributs de l'ou, l'admin de l'ou peut les modifier, tout
# comme leur propriétaire. POur les autres, on passe à la régle suivante.
# J'ai remarqué ici que si je supprime la ligne by self read, un utilisateur
# ne peut plus rien lire, même les attributs mail etc... qu'il a pourtant le
# droit de lire d'après la régle précédente
access to dn.children="ou=algernon,dc=zakalwe,dc=ata"
by
group/groupOfNames/member="cn=admin-algernon,ou=groupe,dc=zakalwe,dc=ata"
write
by self read
by * break

# Règles d'accés à l'ou cheradenine

---------- On retrouve les mêmes règles que ci dessus ------------

# Accès global
# les admins de l'annuaire ont tous les droits sur tout l'annuaire
access to *
by
group/groupOfNames/member="cn=administrateurs,ou=groupe,dc=zakalwe,dc=ata"
write


Merci à ceux qui ont lu jusqu'ici et qui arriveront à m'aider !

Denis

1 réponse

Avatar
Denis
J'y suis enfin arrivé !

Après de multiples essais, j'ai enfin obtenu ce que je voulais, avec le
fichier /etc/slapd.access.conf dont une copie se trouve à la fin du
message.

Toutefois, lors de mes essais, je me suis aperçu de quelques problèmes qui
m'obligent à être beaucoup moins restrictif. En effet, par moment, il
devenait impossible de se connecter avec les comptes openLDAP, et quand on
y arrivait, le système ne trouvait pas les noms de l'utilisateur et de son
groupe, et parfois pas de homeDirectory non plus. ET même maintenant, je ne
garantis pas qu'il ne reste pas des problèmes qui m'auraient échappé.

Bref, mes essais m'auront au moins appris à ne pas imposer trop de
restrictions juste pour le plaisir.

Denis

Mon fichier slapd.access.conf :

# Accès pour que les administrateurs s'authentifient...
access to dn.subtree="ou­min,dc=zakalwe,dc=ata" attrs=userPassword
by
group/groupOfNames/member="cn­ministrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by anonymous auth
# Accés pour permettre la connexion
access to attrs=uid,uidNumber,gidNumber,homeDirectory
by
group/groupOfNames/member="cn­ministrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by * read

# accés à l'ou algernon
access to dn.children="ou=algernon,dc=zakalwe,dc=ata" attrs=userPassword
by self write
by
group/groupOfNames/member="cn­ministrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by
group/groupOfNames/member="cn­min-algernon,ou=groupe,dc=zakalwe,dc=ata"
write
by anonymous auth
access to dn.children="ou=algernon,dc=zakalwe,dc=ata"
attrs=mail,mobile,telephoneNumber,entry,objectCLass
by self write
by
group/groupOfNames/member="cn­ministrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by
group/groupOfNames/member="cn­min-algernon,ou=groupe,dc=zakalwe,dc=ata"
write
by * read
access to dn.children="ou=algernon,dc=zakalwe,dc=ata"
attrs=cn,sn,gecos,description
by
group/groupOfNames/member="cn­ministrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by
group/groupOfNames/member="cn­min-algernon,ou=groupe,dc=zakalwe,dc=ata"
write
by * read
access to dn.children="ou=algernon,dc=zakalwe,dc=ata"
by
group/groupOfNames/member="cn­ministrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by
group/groupOfNames/member="cn­min-algernon,ou=groupe,dc=zakalwe,dc=ata"
write
by self read
# accés à l'ou cheradenine semblable à celle de Algernon
# Accès global
access to *
by
group/groupOfNames/member="cn­ministrateurs,ou=groupe,dc=zakalwe,dc=ata"
write
by * read