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
| Montages | Ce 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 roles | Dans 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_stores | un 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
| Source | Comment | Les roles |
|---|---|---|
| utilisateur local | authorities de son entree [[users]] | des noms de [[roles]] |
| jeton JWT | la claim authorities_path (defaut /groups) | des noms de [[roles]], ou des authorities a traduire |
| service d’autorisation | authz_base_url traduit les authorities inconnues | des 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
| Quand | Ligne |
|---|---|
demarrage, role a {username} | INFO role gives each user their own home directory |
| demarrage, role qui monte plusieurs backends | INFO role mounts several backends: its users hold the credentials of all of them ..., champs role, backends, writable |
create_home cree un repertoire | INFO 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.