SFTPGo¶
Serveur de fichiers personnel accessible via HTTPS avec SSO Authelia (OIDC).
Accès¶
| Interface | URL / Adresse | Auth |
|---|---|---|
| Web client | https://files.ncls.ltd/web/client/login | OIDC Authelia |
| Admin OIDC | https://files.ncls.ltd/web/admin/login | OIDC Authelia (nico uniquement) |
| Admin local | http://192.168.1.106:8080 | Compte local (LAN / VPN) |
| SFTP | 192.168.1.106:2022 | Clé SSH / mdp local |
| WebDAV | https://files.ncls.ltd/dav/ | Basic Auth (mdp local SFTPGo) |
L'interface admin OIDC (
/web/admin/login) est accessible surhttps://files.ncls.ltdpour les utilisateurs ayant une entité admin dans la BDD SFTPGo (nico). Le rôle est déterminé parimplicit_roles— SFTPGo vérifie si le username OIDC est un admin ou user dans sa propre base, ce qui permet à nico d'utiliser les deux interfaces.L'interface admin local (port 8080) est accessible sur le LAN uniquement (non exposé via Caddy). Via VPN WireGuard depuis l'extérieur.
L'interface web (port 8090) est proxifiée via Caddy (LXC 103). L'authentification est gérée nativement par SFTPGo via OIDC Authelia — pas de gateway Authelia pour cette application.
Le WebDAV (port 8091) utilise le daemon
webdavdde SFTPGo avec le préfixe/dav(SFTPGO_WEBDAVD__BINDINGS__0__PREFIX=/dav). Ce préfixe est nécessaire pour éviter que Caddy retourne unWWW-Authenticate: Basicsur/et déclenche la boîte de dialogue native du navigateur.
Installation¶
- LXC : LXC 106
- Image :
drakkan/sftpgo:v2.7.1 - Compose :
/mnt/lxc-data/106-storage/docker-compose.yml - Données :
/mnt/lxc-data/106-storage/sftpgo/data/(BDD SQLite, clés SFTP) - Config :
/mnt/lxc-data/106-storage/sftpgo/config/
Stockage¶
SFTPGo est monté sur le pool ZFS storage — voir HDD Storage.
/storage/ ← /mnt/storage sur l'hôte
├── alice/ ← home dir alice
│ ├── drive/
│ ├── photos/
│ └── archives/
├── nico/ ← home dir nico
│ ├── drive/
│ ├── photos/
│ └── archives/
├── family/ ← virtual folder /family (rw) pour alice + nico
│ ├── drive/
│ └── archives/
└── shared/ ← virtual folder /shared (ro) pour guests
Groupes et Permissions¶
| Groupe | Type | Membres | Configuration |
|---|---|---|---|
owners |
primaire | alice, nico | home_dir = /storage/%username%, permissions * |
owners-shared |
secondaire | alice, nico | virtual folder /family [rw], /.snapshots [ro] |
guests |
secondaire | — | virtual folder /shared [ro], permissions list,dl |
Virtual folders définis dans SFTPGo admin → Folders :
| Nom | Path |
|---|---|
family |
/storage/family |
snapshots |
/storage/.zfs/snapshot |
shared |
/storage/shared |
Utilisateurs¶
| Compte | Groupes | Rôle |
|---|---|---|
| alice | owners (primary), owners-shared | Utilisatrice normale |
| nico | owners (primary), owners-shared | User + Admin SFTPGo via OIDC (implicit_roles) |
OIDC Authelia¶
Provider : Authelia (https://auth.ncls.ltd)
SFTPGo utilise preferred_username comme champ d'identification de l'utilisateur. Le rôle (admin ou client) est déterminé par implicit_roles : SFTPGo vérifie si le username OIDC correspond à une entité admin ou user dans sa propre base. Nico possédant les deux entités, il peut se connecter aux deux interfaces.
/web/admin/login→ vérifie existence comme admin SFTPGo → nico ✅/web/client/login→ vérifie existence comme user SFTPGo → nico ✅, alice ✅
Config SFTPGo (docker-compose.yml) :
SFTPGO_HTTPD__BINDINGS__0__OIDC__IMPLICIT_ROLES=true
SFTPGO_HTTPD__BINDINGS__0__OIDC__USERNAME_FIELD=preferred_username
SFTPGO_HTTPD__BINDINGS__0__OIDC__SCOPES=openid,profile,email
Config Authelia (configuration.yml) :
claims_policies:
sftpgo_policy:
id_token:
- preferred_username
- email
clients:
- client_id: sftpgo
claims_policy: sftpgo_policy
scopes: [openid, profile, email]
token_endpoint_auth_method: client_secret_post
Note : la config Authelia est intentionnellement minimale. Un système plus complexe (
user_attributeCEL +custom_claims+ scope dédié) avait été tenté pour transmettre un claim de rôle, mais s'est avéré inutile une foisimplicit_rolescompris — voir §2.5 du rapport d'avancement.
Montage WebDAV Windows / macOS¶
Le WebDAV requiert un mot de passe local SFTPGo (pas l'OIDC). À définir dans l'admin SFTPGo → Users → champ Password.
Windows 11 (PowerShell) :
# Correctif registre si « Accès refusé » (une seule fois, en administrateur)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" `
-Name "BasicAuthLevel" -Value 2
Restart-Service WebClient
# Mapper le lecteur réseau
net use Z: https://files.ncls.ltd/dav /user:nico <mot_de_passe_local> /persistent:yes
# Optionnel — autoriser les uploads > 50 MB
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" `
-Name "FileSizeLimitInBytes" -Value 0xFFFFFFFF
Restart-Service WebClient
macOS : Finder → Aller → Se connecter au serveur (⌘K) → https://files.ncls.ltd/dav
Share Links¶
SFTPGo gère nativement des liens de partage publics avec token + expiration + mot de passe optionnel. Interface web → Share / Create link. Aucun compte SFTPGo requis pour les destinataires.
Snapshots ZFS¶
Le dossier /.snapshots expose les snapshots ZFS de l'espace personnel (via /storage/.zfs/snapshot). Accessible en lecture seule pour alice et nico via le groupe owners-shared.