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
| Besoin | Reponse |
|---|---|
| Deposer et prendre des fichiers | SFTP, API REST de fichiers, explorateur web |
| Ranger les fichiers | disque local, serveur SFTP amont, S3 et compatibles, HDFS via Knox (lecture seule) |
| Authentifier | mot de passe, cle publique SSH, jeton JWT (secret, cle publique ou JWKS) |
| Donner des droits | des roles, qui montent des stockages et y donnent des droits par chemin ; refus par defaut |
| Surveiller | piste d’audit, journaux JSON, metriques Prometheus, traces OpenTelemetry |
| Administrer | API d’administration et console web : sessions, bans, configuration en vigueur |
| Deployer | un binaire statique, des images Docker, un chart Helm |
Les mots du guide
| Mot | Sens |
|---|---|
| backend | un stockage nomme, decrit dans [[backends]] |
| role | un ensemble de montages ; un utilisateur en recoit un ou plusieurs |
| montage | un backend vu par l’utilisateur a un chemin (mount_path), a partir d’un sous-repertoire (home_dir), avec son ACL |
| ACL | les droits (read, write, list, delete, rename) par chemin, dans un montage |
| porte | une 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
| Pour | Lire |
|---|---|
| donner a chacun ce qu’il doit voir | Utilisateurs, roles et montages, Recettes |
| brancher S3 ou un serveur SFTP amont | Les backends |
| brancher un fournisseur d’identite | Authentification |
| deployer en conteneur | Docker, Kubernetes |
| comprendre un refus | Depannage, Audit |
| connaitre une cle | Reference de la configuration |