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

Local

Le backend local sert un repertoire du systeme de fichiers du serveur, sa racine (root). Chaque montage y a son sous-repertoire, home_dir.

[[backends]]
name = "disque"
type = "local"
root = "/srv/sftp"

[[roles]]
name = "utilisateurs"

[[roles.mounts]]
backend = "disque"
home_dir = "/{username}"
create_home = true
acl = [{ path = "/", rights = ["read", "write", "list", "delete", "rename"], recursive = true }]

alice envoie /rapport.txt : le fichier est /srv/sftp/alice/rapport.txt.

Les cles

Toutes les cles : Reference [[backends]] type = “local” ; cles communes : Les backends.

La racine et les liens symboliques

Aucune operation ne sort de root + home_dir du montage, quels que soient les liens qui s’y trouvent, y compris ce que le serveur fait lui-meme (fichier en cours, verrou, balayage). Un lien vers le home_dir d’un autre montage sort autant qu’un lien hors de la racine.

ReglageUn lien dans le montageUn lien qui en sort
follow_symlinks = false (defaut)jamais suivijamais suivi
follow_symlinks = truesuivi s’il reste sous root + home_dirjamais suivi
  • Un lien se liste comme un lien (type l ; "is_symlink": true en REST), ou, suivi, comme sa cible. Supprimer ou renommer agit sur le lien.
  • Avec hidden_stores, un envoi sur un lien de fichier remplace le lien ; la cible reste intacte.
  • Aucune porte ne cree de lien : ils viennent d’un autre processus ou d’une restauration.
  • La racine et ses ancetres sont de confiance (une racine a travers un lien est suivie) : inscriptibles par l’administrateur seul.
  • Sur un volume partage (NFS…), montez la racine nosymfollow (Linux 5.10 et plus).

Casse des chemins de l’ACL

Sur un stockage qui confond les majuscules (NTFS, APFS et HFS+ par defaut, SMB/CIFS, ext4 ou tmpfs casefold), l’ACL compare les chemins plies : NFD, retrait des points de code ignorables (U+200B…), pliage de casse complet (straße = strasse), NFC.

ReglageComparaison des chemins de l’ACL
case_insensitive = truepliee
case_insensitive = falseoctet a octet, sans normalisation
cle absenteune sonde decide, au demarrage et a chaque rechargement des roles

La sonde cree un fichier en minuscules et le cherche en majuscules dans chaque repertoire ou une entree se resout (le pliage se regle par repertoire, chattr +F) : un repertoire qui plie fait plier le backend, ce qui ne tranche pas plie. Un repertoire absent ou sous {username} n’est pas sonde, et un volume APFS sensible a la casse reste insensible a la normalisation : dans le doute, case_insensitive = true.

La ou l’ACL plie, et sur un serveur Windows, un nom court 8.3 (PROTEG~1) ou fini par . ou une espace n’est pas un chemin valide : desactivez les noms courts (fsutil 8dot3name).

Les cles communes sur un backend local

CleSur un backend local
home_dir (montage)un sous-repertoire de root : /partenaire/in/x d’un montage a /partenaire de home_dir = "/partenaires/acme" est /srv/sftp/partenaires/acme/in/x
create_home (montage)true : cree home_dir s’il manque, a l’ouverture de la session, un niveau a la fois, jamais a travers un lien
hidden_storesun fichier en cours de transfert a cote de la destination, publie par renommage
stale_partialsle balayage de ces fichiers, sur l’horloge du systeme de fichiers
cross_instance_reservationun fichier verrou a cote de la destination ; false par defaut sous Windows : une instance par racine
lock_prefixle nom de ces verrous

Le processus agit sous son propre uid ; le mode des fichiers suit son umask.

Sur Linux 5.6 et plus, le noyau impose le confinement (openat2(2), RESOLVE_BENEATH) ; sans openat2, chaque composante est ouverte O_NOFOLLOW (dit une fois en INFO) ; sous Windows, le parent est verifie juste avant l’appel.

Performances et limites

  • Un renommage et la publication d’un envoi utilisent RENAME_NOREPLACE. La ou le systeme de fichiers ne l’a pas (NFS, FUSE dont sshfs, 9p), ils retombent sur rename(2) : un ecrasement concurrent n’y est pas detecte, et l’audit d’un envoi qui ecrase dit replaced=unknown.
  • Aucun fsync : un succes ne promet pas la durabilite sur disque.
  • mkdir cree un niveau ; les parents manquants d’un envoi sont crees un par un, chacun juge par l’ACL.
  • La suppression d’un arbre n’est pas comptee : l’audit dit removed=unknown.

Ce que vous verrez

QuandLigne
demarrage, sonde de la casseINFO avec backend, acl_paths = folded ou exact
create_home cree un repertoireINFO created missing home directory, champ home_dir
demarrage, balayage des restesINFO stale in-flight files: ..., champs backend, grace_secs, age_check