Installer SFTPGo avec Docker
SFTPGo

Installer SFTPGo avec Docker

Table des matières

GitHub - drakkan/sftpgo: Full-featured and highly configurable SFTP, HTTP/S, FTP/S and WebDAV server - S3, Google Cloud Storage, Azure Blob
Full-featured and highly configurable SFTP, HTTP/S, FTP/S and WebDAV server - S3, Google Cloud Storage, Azure Blob - drakkan/sftpgo
Merci à virtutux pour l'idée de tutoriel. 🤝

SFTPGo ou comment transformer son serveur en serveur SFTP de luxe, avec possibilité de partager du contenu par liens.

Aujourd'hui nous allons parler, comme vous vous en douter, de SFPGo, non seulement il va vous permettre de créer un SFTP hautement configurable mais en plus vous pourrez monter des stockages en ligne comme Amazon S3, Google Cloud, Azure Blob, d'autres serveur SFTP et ainsi centraliser tous vos accès, par exemple.

SFTPGo permet le montage de dossiers virtuels avec vos utilisateurs et quels droits attribuer à ceux-ci.

Suivant comment vous réglez SFTPGo, il est accèssible par SFTP, WebDav ou encore une page web moderne.

Application puissante, paramétrages riches et interface fluide.


⚡Caractéristiques

Cliquez pour découvrir...

  • Prise en charge du système de fichiers local, du système de fichiers local chiffré, du stockage d'objets compatible S3, de Google Cloud Storage, du stockage Azure Blob ou d'autres comptes SFTP via SFTP/SCP/FTP/WebDAV.
  • Les dossiers virtuels sont pris en charge : un dossier virtuel peut utiliser n'importe lequel des backends de stockage pris en charge. Ainsi, vous pouvez par exemple avoir un utilisateur avec le backend S3 mappant un compartiment GCS (ou une partie de celui-ci) sur un chemin spécifié et un système de fichiers local chiffré sur un autre. Les dossiers virtuels peuvent être privés ou partagés entre plusieurs utilisateurs. Pour les dossiers virtuels partagés, vous pouvez définir différentes limites de quota pour chaque utilisateur.
  • Commandes personnalisées configurables et/ou hooks HTTP pour le téléchargement, le pré-téléchargement, le téléchargement, le pré-téléchargement, la suppression, la pré-suppression, le renommage, mkdir, rmdir sur les commandes SSH et lors de l'ajout, de la mise à jour et de la suppression de l'utilisateur.
  • Comptes virtuels stockés au sein d'un "fournisseur de données".
  • SQLite, MySQL, PostgreSQL, CockroachDB, Bolt (magasin de clés/valeurs en Go pur) et les fournisseurs de données en mémoire sont pris en charge.
  • Isolation chroot pour les comptes locaux. Les comptes basés sur le cloud peuvent être limités à un certain chemin de base.
  • Autorisations virtuelles par utilisateur et par répertoire, pour chaque chemin, vous pouvez autoriser ou refuser : liste de répertoires, télécharger, écraser, télécharger, supprimer, renommer, créer des répertoires, créer des liens symboliques, changer le mode propriétaire/groupe/fichier et l'heure de modification.
  • API REST pour la gestion des utilisateurs et des dossiers, la conservation des données, la sauvegarde, la restauration et les rapports en temps réel des connexions actives avec possibilité de fermer de force une connexion.
  • Le gestionnaire d'événements permet de définir des workflows personnalisés basés sur des événements ou des plannings du serveur.
  • Interface d'administration basée sur le Web pour gérer facilement les utilisateurs, les dossiers et les connexions.
  • Interface client Web permettant aux utilisateurs finaux de modifier leurs informations d'identification, de gérer et de partager leurs fichiers dans le navigateur.
  • Authentification par clé publique et mot de passe. Plusieurs clés publiques par utilisateur sont prises en charge.
  • Authentification du certificat utilisateur SSH.
  • Authentification interactive au clavier. Vous pouvez facilement configurer une authentification multifacteur personnalisable.
  • Authentification partielle. Vous pouvez configurer une authentification en plusieurs étapes exigeant, par exemple, le mot de passe de l'utilisateur après une authentification par clé publique réussie.
  • Méthodes d'authentification par utilisateur.
  • Authentification à deux facteurs basée sur des mots de passe à usage unique basés sur le temps (RFC 6238) qui fonctionne avec Google Authenticator, Microsoft Authenticator, Authy et d'autres applications compatibles.
  • Authentification LDAP/Active Directory à l'aide d'un plugin .
  • Administrations des utilisateurs simplifiées à l'aide de groupes .
  • Les rôles permettent de créer des administrateurs limités qui peuvent uniquement créer et gérer des utilisateurs avec leur rôle.
  • Authentification personnalisée via des programmes externes/API HTTP .
  • Les interfaces utilisateur Web Client et Web Admin prennent en charge l'authentification OpenID Connect et peuvent donc être intégrées à des fournisseurs d'identité tels que Keycloak . Vous pouvez trouver plus de détails ici .
  • Chiffrement des données au repos .
  • Modification dynamique de l'utilisateur avant la connexion via des programmes externes/API HTTP .
  • Prise en charge des quotas : les comptes peuvent avoir un quota de disque individuel exprimé en taille totale maximale et/ou en nombre maximal de fichiers.
  • Limitation de la bande passante, avec des paramètres séparés pour le téléchargement et le téléchargement et des remplacements basés sur l'adresse IP du client.
  • Limites de bande passante de transfert de données, avec limite totale ou paramètres séparés pour les téléchargements et les remplacements en fonction de l'adresse IP du client. Les limites peuvent être réinitialisées à l'aide de l'API REST.
  • La limite de débit par protocoleest prise en charge et peut éventuellement être connectée au défenseur intégré pour bloquer automatiquement les hôtes qui dépassent à plusieurs reprises la limite configurée.
  • Nombre maximal de sessions simultanées par utilisateur.
  • Filtres IP par utilisateur et globaux : la connexion peut être limitée à des plages spécifiques d'adresses IP ou à une adresse IP spécifique.
  • Filtres de modèles de type shell par utilisateur et par répertoire : les fichiers peuvent être autorisés, refusés et éventuellement masqués en fonction de modèles de type shell.
  • Terminer automatiquement les connexions inactives.
  • Gestion automatique des listes de blocage à l'aide du défenseur intégré.
  • Filtrage géo-IP à l'aide d'un plugin .
  • Les téléchargements atomiques sont configurables.
  • Mappage de propriété des fichiers/dossiers par utilisateur : vous pouvez mapper tous les utilisateurs au compte système qui exécute SFTPGo (toutes les plates-formes sont prises en charge) ou vous pouvez exécuter SFTPGo en tant qu'utilisateur root et mapper chaque utilisateur ou groupe d'utilisateurs à un compte système différent ( *NIX uniquement).
  • Prise en charge des référentiels Git via SSH.
  • SCP et rsync sont pris en charge.
  • FTP/S est pris en charge. Vous pouvez configurer le service FTP pour exiger TLS pour les connexions de contrôle et de données.
  • WebDAV est pris en charge.
  • Le protocole ACME est pris en charge. SFTPGo peut obtenir et renouveler automatiquement des certificats TLS pour HTTPS, WebDAV et FTPS auprès Let's Encryptd'autres autorités de certification conformes à l'ACME, en utilisant les types de défiHTTP-01 ou.TLS-ALPN-01
  • L'authentification TLS bidirectionnelle, également appelée TLS avec authentification par certificat client, est prise en charge pour l'API REST/Web Admin, FTPS et WebDAV sur HTTPS.
  • Restrictions des protocoles par utilisateur. Vous pouvez configurer les protocoles autorisés (SSH/HTTP/FTP/WebDAV) pour chaque utilisateur.
  • Les métriques Prometheus sont prises en charge.
  • Prise en charge du protocole HAProxy PROXY : vous pouvez proxy et/ou équilibrer la charge du service SFTP/SCP/FTP sans perdre les informations sur l'adresse du client.
  • Migration facileà partir des comptes d'utilisateurs du système Linux.
  • Mode portable : un moyen pratique de partager un seul répertoire à la demande.
  • Mode sous-système SFTP : vous pouvez utiliser SFTPGo comme sous-système SFTP d'OpenSSH.
  • Analyse des performances à l'aide du profileur intégré.
  • Le format de configuration est à votre choix : JSON, TOML, YAML, envfile sont pris en charge.
  • Les fichiers journaux sont précis et enregistrés au format JSON facilement analysable ( plus d'informations ).
  • SFTPGo prend en charge un système de plugins et peut donc être étendu à l'aide de plugins externes.
  • Prise en charge de l'infrastructure en tant que code (IaC) à l'aide du fournisseur Terraform .
  • Prise en charge partielle (expérimentale) de l' internationalisation des interfaces utilisateur WebAdmin et WebClient.

L'installation

  1. Créez votre docker-compose.yml dans le dossier ou vous comptez installer sftpgo:
sudo nano docker-compose.yml
  1. Collez ça dedans en prenant soin d'adapter les ports et les volumes suivant votre configuration. Commentez et décommentez les ports suivant ce que vous voulez. Un accès HTTP, SFTP, HTTPS, WEBDAV:
services:

  sftpgo:
    image: drakkan/sftpgo:latest
    user: 1000:1000
    restart: unless-stopped
    ports:
      - 8888:8080 # HTTP
      - 2022:2022 # SFTP
      #- 8443:443" # HTTPS
      #- 5007:5007 # WEBDAV
    environment:
      # These are the settings to access your db
      SFTPGO_WEBDAVD__BINDINGS__0__PORT: 5007
      SFTPGO_DATA_PROVIDER__DRIVER: mysql
      SFTPGO_DATA_PROVIDER__NAME: sftpgo
      SFTPGO_DATA_PROVIDER__HOST: mysql
      SFTPGO_DATA_PROVIDER__PORT: 3306
      SFTPGO_DATA_PROVIDER__USERNAME: sftpgo # please change
      SFTPGO_DATA_PROVIDER__PASSWORD: sftpgo # please change
      SFTPGO_COMMON__DEFENDER__ENABLED: true
      SFTPGO_COMMON__DEFENDER__BAN_TIME: 15
      SFTPGO_COMMON__DEFENDER__BAN_TIME_INCREMENT: 100
      SFTPGO_COMMON__DEFENDER__THRESHOLD: 5
      SFTPGO_COMMON__DEFENDER__OBSERVATION_TIME: 15
    volumes:
      - ./data:/srv/sftpgo

  mysql:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_DATABASE: sftpgo
      MYSQL_USER: sftpgo # please change    
      MYSQL_PASSWORD: sftpgo # please change
      MYSQL_ROOT_PASSWORD: MySecureRootDatabasePassword
    volumes:
      - ./mysql:/var/lib/mysql
  1. On va déployer l'application:
docker compose up -d
  1. Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 8888 par défaut:
http://ip:8888/

ou votre domaine:

https://mondomaine.com

Création du compte administrateur

La première chose à faire quand vous lancez l'application pour la première fois, c'est de créer votre compte administrateur, pour ça, rendez-vous sur l'URL de votre site suivie de /web/admin/:

Quand vous avez choisi un nom d'utilisateur et un mot de passe fort, cliquez sur Create admin and Sign in.

Vous arriverez sur votre tableau de bord:


Activer la double authentification

Pour activer la double authentification, rendez-vous en haut à droite et cliquez sur l'icône du compte 👤, ensuite sélectionnez Two-factor authentification:

Réglez Configuration sur Default et cliquez sur Enable:

Cela va ouvrir une fenêtre, scannez votre QR Code et indiquez le code de vérification, validez en cliquant sur Save:

Vous aurez une petite confirmation que vos paramètres sont réglés, cliquez sur OK:

Recovery codes

N'oubliez pas de générer des code pour débloquer la double authentification en cas de problème, ce cadre apparaîtra une fois que vous aurez activé et configuré la double authentification:


Configurer le serveur mail

Cliquez sur Server Manager dans la colonne de gauche, ensuite sur Configurations et pour terminer, sur SMTP:

Remplissez les informations demandées, si vous avez votre propre serveur mail, vous connaissez sans doute déjà les informations concernant votre serveur mail.

Notez que vous pourrez utiliser d'autre prestataires comme Gmail, Outlook, suivez cet article car vous ne pourrez plus mettre votre vrai mot de passe, mais un mot de passe créé spécialement à cette effet. La procédure est expliquée ici:

Configurer le SMTP pour envoyer un mail avec une application Docker
Tutoriel pour configurer le SMTP afin d’envoyer un mail à partir de vos applications self-hosted.

Quand tout est bien configuré, vous pouvez tester en envoyant un mail de test:

Et d’obtenir cette réponse:


Créer un utilisateur

Vous aurez besoin d'au moins un utilisateur pour pouvoir vous connecter au sftp. Créons-le tout de suite.

Cliquez dans la colonne de gauche sur Users, ensuite, cliquez sur + Add:

Choisissez un nom d'utilisateur et un mot de passe fort:

En prévision, nous allons déjà lui indiquer le dossier auquel ce compte aura droit de base:

  • Root directory: /srv/sftpgo/zarev => remplacez zarev par le nom d'utilisateur de votre compte, par exemple.

Cliquez dans le bas de la page sur Save:

Votre utilisateur est créé:


Créer et donner les permissions au dossier utilisateur

Maintenant que l'utilisateur est créé, nous allons lui attribuer un dossier et lui donner les permissions nécessaires. C'est à faire à la racine d'où vous avez installé SFTPGo:

sudo mkdir data/zarev
  • Changez zarev par le nom du dossier que vous avez décidé à l'étape précédente: Root directory: /srv/sftpgo/zarev

Si vous utilisez un compte normal, donc non root, on va changer le groupe du dossier créé pour que notre utilisateur puisse écrire dedans:

sudo chown 1000:1000 -R data/zarev
💡
Pour connaître votre ID, dans votre terminal tapez: id
Cela se présente comme ceci: uid=1000(zarev) gid=1000(zarev)

Se connecter à son espace SFTP

Maintenant que vous avez votre compte et son espace créé, connectez-vous à votre page de gestion. Il faut ajouter /web/client à votre URL, soit:

http://ip:8888/web/client

ou encore

https://mondomaine.com/web/client

Vous arriverez à une fenêtre de connexion, entrez les informations du compte que vous avez créé et cliquez sur Sign in pour valider:

Vous voilà sur la page principale de votre compte. Libre à vous de créer des dossiers/fichiers et de les partager facilement:


Création d'un dossier virtuel

Nous avons donc un utilisateur avec un espace disque qui lui est propre, mais vous pourriez avoir envie de monter un autre disque et de le partager avec un utilisateur. Commençons par le début, la création d'un dossier virtuel. Et c'est ici que ça commence vraiment à être intéressant.

Je vais aborder deux montages, l'un en local et l'autre un montage SFTP.

Dans la colonne de gauche, cliquez sur Virtual folders et ensuite sur + Add:

Stockage en local

Remplissez les informations demandées:

  • Name => Nommez le nom du dossier virtuel.
  • Description => Ajoutez une description si vous voulez.
  • Storage => Différents types de storage s'offrent à vous:

Je vais choisir dans cet exemple, un storage en local. Donc le disque même ou est installé SFTPGo.

  • Root directory => Comme dans l'exemple, je choisis de partager la racine, soyons généreux...

Cliquez sur Save quand vous avez terminé.

Stockage SFTP

J'ai une autre VM dont j'aurais voulu monter le contenu dans mon compte utilisateur. Celui de mes médias. On va donc ajouter un stockage SFTP.

On est de nouveau dans la partie Virtual folders, on clique sur + Add:

Remplissez les informations demandées:

  • Storage => Choisir SFTP.
  • Endpoint => ip:port du serveur à ajouter.
  • Username => Le nom d'utilisateur du compte.
  • Password => Le mot de passe du compte.
  • Private key => Si comme dans mon cas vous utilisez des clés SSH, collez votre clé privée.
  • Passphrase => Si vous avez une passphrase, renseignez-là.
  • SFTP root directory => Ici je ne veux pas partager tout le serveur, à la racine, comme le montage précédant, mais juste ce qui est contenu dans medias. Donc j'ajoute le chemin complet jusqu'au dossier medias, tout ce qui sera avant ne sera pas accèssible.

Cliquez sur Save une fois que c'est terminé.

Nous avons monté deux dossiers au total:


Attribuer un dossier virtuel

Quand vous avez créé des dossiers virtuels, vous pouvez décider quel utilisateur pourra en bénéficier.

Dans la colonne de gauche, cliquez sur Users et ensuite faites clic droit sur le compte où vous voulez ajouter un dossier virtuel, et choisissez Edit:

Ici on peut constater le dossier de base de l'utilisateur:

Rendez-vous dans la partie Virtual folders et cliquez sur + Add:

Je vais ajouter les deux espaces que j'ai prévu, medias et testbelginux

Petite explication:

  • Le premier champ où j'ai mis /medias, c'est le nom de montage que je verrai apparaître.
  • Le second champ, choisissez le dossier à attribuer à l'utilisateur.
  • Le troisième et quatrième champ est soit pour définir la taille disponible et/ou le nombre de fichiers autorisés.

Cliquez sur Save quand tout est bien configuré.

Que ce soit par FileZilla

Ou par l'interface web de SFTPGo:

J'ai bien accès à mon stockage de base + deux autres dossiers virtuels.


Envoyer & partager des dossiers/fichiers

Rendez-vous sur l'URL, de la partie client, à savoir /web/client/ après l'URL de votre instance SFTPGo:

https://monsite.com/web/client

Voici le tableau de bord:

Nous allons créer un dossier "partage", cliquez sur New Folder, nommez votre dossier et cliquez sur le ✔️ pour valider:

Le dossier est bien créé:

Entrons dedans et envoyons quelques fichiers que je voudrais partager en cliquant sur Upload Files, qui va ouvrir une fenêtre pour sélectionner les fichiers à envoyer, quand vous avez terminé cela devrait ressemble à ça:

Revenons à la racine des dossiers et mettons en partage le dossier "partage", cliquez sur les ... en fin de ligne et ensuite sur Share:

Nommez votre partage et indiquez dans Scope, si la personne qui recevra ce lien pourra juste faire de la lecture seule, écrire ou encore lecture + écriture:

Vous avez d'autres options dans la seconde partie de la page comme ajouter un mot de passe, une expiration,...

Dans la partie Shares, vous avez le lien de partage en fin de ligne:

Quand vous cliquez sur l'icône lien, une fenêtre s'ouvre et propose plusieurs options comme envoyer des fichiers ou tout simplement copier le lien. Copions le lien;

Me voilà sur la page de partage avec la possibilité de lire et écrire dans le dossier:

Et sur FileZilla je retrouve bien les fichiers dans le dossier:

zarev

🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.

Vous pourriez aussi aimer

#ouvrir un lien dans une nouvelle fenêtre