ACL
L’ACL d’un montage donne des droits, chemin par chemin ; tout le reste est
refuse. Elle s’ecrit sous [[roles.mounts.acl]], et son path est
relatif au montage.
Ecrire une ACL
[[roles.mounts]]
backend = "disque"
mount_path = "/partenaire"
home_dir = "/partenaires/acme"
[[roles.mounts.acl]]
path = "/" # /partenaire pour l'utilisateur
rights = ["list"] # non recursive : ce dossier seulement
[[roles.mounts.acl]]
path = "/in" # /partenaire/in
rights = ["write", "list"]
recursive = true # et tout ce qui est dessous
Toutes les cles : Reference [[roles.mounts.acl]].
Une ACL ne gouverne que son montage, meme sur un backend monte deux fois.
Les droits
Chaque operation demande son droit sur chaque chemin qu’elle nomme :
| Operation | Droit exige |
|---|---|
envoi, mkdir | write sur le chemin, et sur chaque parent qu’il faut creer |
| telechargement | read |
| listage | list sur le repertoire liste |
stat (SFTP), HEAD (REST) | read ou list |
| suppression d’un fichier, d’un repertoire vide | delete |
| suppression d’un repertoire non vide | delete sur tout l’arbre |
| renommage | rename sur la source et la destination, et write la ou le contenu deplace atterrit |
Un listage montre tout le repertoire, sans filtrer par l’ACL. list sur
/in ne donne pas list sur /.
Quelle entree decide
- Refus par defaut : un chemin qu’aucune entree ne gouverne est refuse.
- L’entree la plus specifique decide : celle du chemin exact, sinon
l’entree
recursivela plus proche au-dessus. - Une entree plus specifique qui n’accorde pas le droit refuse, meme sous une entree plus large qui l’accorde.
[[roles.mounts.acl]]
path = "/"
rights = ["read", "write", "list", "delete", "rename"]
recursive = true
[[roles.mounts.acl]]
path = "/archives"
rights = ["read", "list"]
recursive = true
Ici tout est modifiable, sauf /archives et ce qu’il contient, en lecture.
Un deplacement est rejuge sur ce qu’il emporte : un dossier qui contient un sous-dossier protege ne se deplace pas vers un endroit gouverne par une entree plus large, ou le sous-arbre perdrait sa protection.
Plusieurs roles sur un montage
Deux roles sur le meme montage mettent leurs ACL ensemble :
- deux entrees au meme chemin unissent leurs droits, et une seule
recursiverend l’union recursive ; - a des chemins differents, l’entree la plus specifique decide, de quelque role qu’elle vienne.
Une entree etroite d’un role peut donc restreindre ce qu’une entree large
d’un autre accordait. Le resultat se lit dans la console, onglet des roles
d’une session (GET /admin/sessions/<id>/roles).
Repertoires synthetiques
Avec plusieurs montages sous des noms, un chemin sous aucun montage (/,
/partenaires) est synthetique : il n’appartient a aucun backend.
| Operation | Sur un chemin synthetique |
|---|---|
| listage | les montages et les repertoires synthetiques qu’il contient |
stat | un repertoire, date du debut de la session |
?rights (REST) | ["list"] |
| toute autre operation | refusee |
chemin sous lequel aucun montage n’est (/inconnu) | introuvable |
Un point de montage (/partenaires/acme) se liste selon son ACL, mais ne
s’ecrit, ne se supprime ni ne se renomme.
Casse des noms
Quand l’ACL d’un backend plie la casse
(case_insensitive),
/Archives et /archives sont un seul chemin : ecrivez-le une fois par
montage.