Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 :

OperationDroit exige
envoi, mkdirwrite sur le chemin, et sur chaque parent qu’il faut creer
telechargementread
listagelist sur le repertoire liste
stat (SFTP), HEAD (REST)read ou list
suppression d’un fichier, d’un repertoire videdelete
suppression d’un repertoire non videdelete sur tout l’arbre
renommagerename 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

  1. Refus par defaut : un chemin qu’aucune entree ne gouverne est refuse.
  2. L’entree la plus specifique decide : celle du chemin exact, sinon l’entree recursive la plus proche au-dessus.
  3. 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 recursive rend 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.

OperationSur un chemin synthetique
listageles montages et les repertoires synthetiques qu’il contient
statun repertoire, date du debut de la session
?rights (REST)["list"]
toute autre operationrefusee
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.