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

CraftFileGate

CraftFileGate est un serveur de fichiers : un client SFTP, un script HTTP ou un navigateur y deposent et y prennent des fichiers, que le serveur range sur un ou plusieurs stockages. Il remplace un serveur SFTP classique (ProFTPD, OpenSSH internal-sftp) quand les fichiers ne vivent pas tous sur un disque local, ou quand les comptes viennent d’un fournisseur d’identite.

Ce qu’il fait

BesoinReponse
Deposer et prendre des fichiersSFTP, API REST de fichiers, explorateur web
Ranger les fichiersdisque local, serveur SFTP amont, S3 et compatibles, HDFS via Knox (lecture seule)
Authentifiermot de passe, cle publique SSH, jeton JWT (secret, cle publique ou JWKS)
Donner des droitsdes roles, qui montent des stockages et y donnent des droits par chemin ; refus par defaut
Surveillerpiste d’audit, journaux JSON, metriques Prometheus, traces OpenTelemetry
AdministrerAPI d’administration et console web : sessions, bans, configuration en vigueur
Deployerun binaire statique, des images Docker, un chart Helm

Les mots du guide

MotSens
backendun stockage nomme, decrit dans [[backends]]
roleun ensemble de montages ; un utilisateur en recoit un ou plusieurs
montageun backend vu par l’utilisateur a un chemin (mount_path), a partir d’un sous-repertoire (home_dir), avec son ACL
ACLles droits (read, write, list, delete, rename) par chemin, dans un montage
porteune facon d’entrer : SFTP, API REST, explorateur, console d’administration

Le chapitre Utilisateurs, roles et montages les explique avec des exemples.

Demarrage rapide

Un serveur sur un disque local, un utilisateur alice qui ne voit que son repertoire.

1. Generer une cle d’hote

ssh-keygen -t ed25519 -f /etc/craft-file-gate/host_ed25519 -N ""

Une cle listee dans host_keys mais absente refuse le demarrage.

2. Ecrire la configuration

Creer /etc/craft-file-gate/config.toml :

#:schema ./config.schema.json
[server]
shutdown_grace_period_secs = 30
# max_sessions_per_user = 10  # optionnel, illimite par defaut

[sftp]
listen = "0.0.0.0:2222"
host_keys = ["/etc/craft-file-gate/host_ed25519"]
# login_grace_secs = 120      # connexion non authentifiee coupee au-dela (0 = jamais)

[auth]
jwt_sentinel_username = "jwt"
timeout_secs = 5
# roles_file = "/etc/craft-file-gate/roles.toml"  # optionnel, sinon [[roles]] inline
# authz_base_url = "https://authz.internal"  # optionnel, service de mapping distant

[auth.jwt]
secret = "changez-moi-en-production"
# public_key_file = "/etc/craft-file-gate/jwt_public.pem"  # alternative au secret
# jwks_url = "https://idp.interne/.well-known/jwks.json"   # alternative : cles du fournisseur d'identite
# jwks_refresh_interval_secs = 3600                        # defaut, minimum 1
# username_path = "/sub"       # defaut
# authorities_path = "/groups" # defaut

[auth.methods]
jwt   = { enabled = true }
# Mot de passe et cle publique sont les preuves du magasin local, pas des
# methodes a part : elles se declarent sous `local`.
local = { enabled = true, password = true, pubkey = true }

[admin]
listen = "127.0.0.1:8080"
bearer_token = "changez-moi-en-production"

[log]
level = "info"
format = "json"

# ── Stockage et droits ──
[[backends]]
name = "local"
type = "local"
root = "/srv/sftp"

[[roles]]
name = "utilisateurs"

[[roles.mounts]]
backend = "local"
home_dir = "/{username}"   # alice voit /srv/sftp/alice comme sa racine /
create_home = true

[[roles.mounts.acl]]
path = "/"
rights = ["read", "write", "list", "delete", "rename"]
recursive = true

# ── Utilisateurs locaux ──
[[users]]
username = "alice"
# mot de passe : changez-moi-en-production
password_hash = "$argon2id$v=19$m=19456,t=2,p=1$QzIrOEdtBZI4UL4ddXDbkg$yudDYsZSLamFZHWeKlFpFWtkP4kX6ALV8GNKs3pEXBk"
# authorized_keys = ["ssh-ed25519 AAAA... alice@poste"]
authorities = ["utilisateurs"]

Le secret JWT, le jeton admin et le mot de passe d’alice (changez-moi-en-production) sont publics. Le serveur demarre avec, mais emet un WARN par valeur d’exemple encore en place. Pour remplacer le bloc [[users]] d’alice :

echo -n "mot-de-passe" | craft-file-gate hash-password --user alice

Le processus doit pouvoir ecrire dans /srv/sftp : create_home y cree alice/ a sa premiere connexion.

3. Lancer le serveur

craft-file-gate --config /etc/craft-file-gate/config.toml

Pour Docker et Kubernetes, voir le guide (« Exploiter »).

4. Se connecter

sftp -P 2222 alice@votre-serveur

ls montre le contenu de /srv/sftp/alice, et rien au-dessus.

Et ensuite

PourLire
donner a chacun ce qu’il doit voirUtilisateurs, roles et montages, Recettes
brancher S3 ou un serveur SFTP amontLes backends
brancher un fournisseur d’identiteAuthentification
deployer en conteneurDocker, Kubernetes
comprendre un refusDepannage, Audit
connaitre une cleReference de la configuration