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

Utilisateurs, roles et montages

utilisateur ──authorities──▶ role ──▶ montage ──▶ backend (stockage)
                                       │
                                       └── ACL (droits par chemin)

Aucun droit n’est implicite : un backend que nul role ne monte n’est visible par personne, et le jeton d’administration ne donne acces a aucun fichier.

Un exemple complet

[[backends]]                 # un stockage, decrit une fois
name = "disque"
type = "local"
root = "/srv/sftp"

[[roles]]
name = "utilisateurs"

[[roles.mounts]]             # au moins un par role
backend = "disque"           # un nom de [[backends]]
home_dir = "/{username}"     # ou le montage commence sur le stockage
create_home = true

[[roles.mounts.acl]]         # les droits, relatifs au montage
path = "/"
rights = ["read", "write", "list", "delete", "rename"]
recursive = true

[[users]]
username = "alice"
password_hash = "$argon2id$..."   # craft-file-gate hash-password
authorities = ["utilisateurs"]    # les roles d'alice

alice voit / ; ce / est /srv/sftp/alice sur le disque.

Les cles d’un role et d’un montage

Toutes les cles, avec leur rechargement : Reference [[roles]], [[roles.mounts]].

Ou vont les fichiers

Un chemin client va au montage dont le mount_path le prefixe le plus longuement ; le reste s’ajoute a home_dir, sur le stockage (ce que home_dir designe sur chaque type). .. ne remonte jamais au-dessus de home_dir.

{username} : un repertoire par utilisateur

home_dir = "/{username}" donne a chaque utilisateur son repertoire, avec un seul role. Le nom, jamais nettoye, est fait de A-Z a-z 0-9 . _ -, 1 a 64 caracteres, sans point en tete.

Un montage ou plusieurs

MontagesCe que voit l’utilisateur
un seul, a /l’arborescence du backend, a partir de home_dir
plusieurs, sous des noms (/disque, /archives)/ liste les montages ; chacun montre son backend
a profondeur (/partenaires/acme)/ et /partenaires sont des repertoires intermediaires

Les chemins entre les montages sont des repertoires synthetiques. Un renommage reste dans son montage.

Cumuler des roles

Un utilisateur a souvent plusieurs roles. Sa session a les montages de tous.

Les montages de deux rolesDans la session
des mount_path dont aucun n’est le prefixe d’un autre (/a, /b)ils coexistent
identiques : meme mount_path, backend, home_dir, et memes max_file_mb, create_home, hidden_storesun seul montage, ACL unies

Deux montages differents d’un meme backend ont des home_dir disjoints (/a et /b, pas / et /a) : chaque fichier n’est atteint que sous une ACL.

La doctrine : un role a / est complet

  • un role a / est complet : il donne a lui seul tout ce que voit son utilisateur, et ne se cumule avec aucun autre ;
  • un role fait pour se cumuler monte sous un nom (/archives).

Voir les recettes.

D’ou viennent les roles

SourceCommentLes roles
utilisateur localauthorities de son entree [[users]]des noms de [[roles]]
jeton JWTla claim authorities_path (defaut /groups)des noms de [[roles]], ou des authorities a traduire
service d’autorisationauthz_base_url traduit les authorities inconnuesdes noms de [[roles]]

Les roles sont toujours definis dans [[roles]] ou roles_file. Seules les authorities qui ne sont pas des noms de roles vont au service.

Le contrat du service d’autorisation

POST <authz_base_url>/authz/resolve
Content-Type: application/json

{"authorities": ["CN=ACME-Partners,OU=Groups"]}

Reponse attendue : 200 et

{"roles": ["partenaire-acme"]}

authz_base_url et timeout_secs : Reference [auth].

Les roles nommes s’ajoutent a ceux trouves localement ; un nom que [[roles]] ne definit pas est ignore, et un service en panne laisse les roles locaux.

Une session SFTP construit tous ses backends a l’authentification et garde ses montages jusqu’a sa fin, meme apres un rechargement ; une requete REST construit celui du montage qu’elle atteint.

Ce que vous verrez

QuandLigne
demarrage, role a {username}INFO role gives each user their own home directory
demarrage, role qui monte plusieurs backendsINFO role mounts several backends: its users hold the credentials of all of them ..., champs role, backends, writable
create_home cree un repertoireINFO created missing home directory

Un role qui monte plusieurs backends detient leurs credentials : gardez-le en lecture seule, pour un utilisateur dedie authentifie par cle.