Portes : SFTP, API REST, explorateur, console
Les portes de fichiers (SFTP, API REST, explorateur) partagent utilisateurs, roles, montages et ACL : un droit accorde l’est partout. La console d’administration n’ouvre aucun fichier. SFTP tient des sessions ; l’API REST n’en a pas, la console montre ses transferts longs en cours (son activite).
| Porte | Pour qui | Ecoute | Credential | Section |
|---|---|---|---|---|
| SFTP | clients SFTP (OpenSSH sftp, WinSCP, FileZilla, rclone), sshfs | [sftp] listen | mot de passe, cle SSH, JWT (nom sentinel) | [sftp] |
| API REST de fichiers | scripts HTTP, applications | [admin] listen, sous [api] prefix | Basic, Bearer (JWT), ticket | [api] |
| Explorateur web | utilisateurs dans un navigateur | [admin] listen, a [api.ui] path | celle de l’API, gardee en memoire | [api.ui] |
| Console et API d’administration | exploitants | [admin] listen, ou [admin] control_listen | compte local (mot de passe) ou JWT avec un role de [[admin.roles]], bearer_token de secours | [admin] |
SFTP
[sftp]
listen = "0.0.0.0:2222"
host_keys = ["/etc/craft-file-gate/host_ed25519"]
- Seul le sous-systeme
sftpest servi : ni shell, niscp, niexec, ni renvoi de ports ou d’agent. - Par JWT : le nom sentinel (
jwtpar defaut) et le jeton en mot de passe,sftp -P 2222 jwt@serveur. - Les cles : Porte SFTP et algorithmes SSH.
API REST de fichiers
[admin]
listen = "0.0.0.0:8080"
bearer_token = "changez-moi-en-production"
[api]
enabled = true
prefix = "/api/v1/files"
# lister un repertoire
curl -u alice:mot-de-passe 'http://serveur:8080/api/v1/files/in?list'
# deposer un fichier
curl -u alice:mot-de-passe -T rapport.csv http://serveur:8080/api/v1/files/in/rapport.csv
# telecharger
curl -u alice:mot-de-passe -o rapport.csv http://serveur:8080/api/v1/files/in/rapport.csv
| Requete | Effet |
|---|---|
GET <chemin>?list&offset=&limit= | listage pagine ; limit 100 par defaut, 10000 au plus |
GET <chemin> | telechargement ; un Range d’un seul intervalle le reprend (206) |
HEAD <chemin> | metadonnees |
PUT <chemin> | depot du fichier entier |
PUT <chemin>?mkdir | creation d’un repertoire |
DELETE <chemin> | suppression |
POST <chemin>?rename=<destination> | renommage |
GET <chemin>?rights | {"path", "rights", "home"} : les droits de l’appelant sur ce chemin, sans toucher au stockage |
POST <fichier>?ticket | 201 {"url": "<prefix>/<fichier>?ticket=<jeton>", "expires_in": 600} ; droit read ; 32 tickets vivants par utilisateur, et un ticket qui a encore 60 s est rendu de nouveau |
GET <fichier>?ticket=<jeton> | le fichier, sans Authorization, autant de fois que voulu pendant 600 s (moins si le JWT de la demande expire avant), l’ACL rejugee a chaque fois |
Toutes les cles : Reference [api].
- Une credential par requete ; ni cookie, ni session.
- Un fichier telecharge part en
attachment,Cache-Control: no-store,Content-Security-Policy: sandbox,Accept-Ranges: bytes. Une URL de ticket qui fuit telecharge ce fichier jusqu’a son expiration.
Explorateur web
[api.ui]
enabled = true
path = "/files"
Une page sur http://serveur:8080/files, cliente de l’API : memes
identifiants, memes ACL. Voir Explorateur de fichiers.
Console et API d’administration
[admin]
listen = "127.0.0.1:8080"
bearer_token = "changez-moi-en-production"
# control_listen = "127.0.0.1:8081" # une porte a part pour l'administration
La console est sur / de l’ecouteur admin : sessions et montages, bans,
configuration sans secret, journaux, metriques, revocations. On s’y connecte par
identifiant et mot de passe, ou avec un jeton. /metrics et les sondes sont sur
le meme ecouteur, ou sur control_listen, ou sur [server] probes_listen :
voir Une porte ou deux.
Ce que vous verrez
| Ligne | Sens |
|---|---|
INFO SFTP server listening | la porte SFTP est ouverte |
INFO starting admin API server (HTTP) (ou (HTTPS)) | l’ecouteur admin est ouvert |
INFO every configured door started | toutes les portes configurees servent (champ doors) |
audit connection_accepted | une authentification reussie, sur toute porte (a chaque requete en REST) |