SFTP & FTPS: explications et exemple

SFTP & FTPS: explications et exemple

3 avril 2021 0 Par Mairien Anthony

Quelles sont les différences entre le protocole FTPS et SFTP ?

Aujourd’hui nous allons donc nous intéresser au protocole FTP, mais plus encore: nous allons parler des protocoles FTPS et SFTP, car comme vous le savez déjà, les échanges avec un serveur FTP ne sont pas chiffrés !

I) FTP, petit rappel

Déjà, revoyons sereinement les bases du protocole FTP. Ici nous n’entrerons pas dans les détails les plus avancés (SYN, ACK etc) mais nous allons juste voir de manière résumée son fonctionnement.

FTP est donc un protocole de transfert de fichiers utilisant le fonctionnement client-serveur, jusque là rien de nouveau sous le soleil.

Il utilise le port 21 pour les différentes commandes (get, put, ls…) et le port 20 pour le transit des données. Il n’y a aucun chiffrement effectué, le client demande la connexion au serveur, le serveur lui répond, et c’est tout ! Pas d’échange de clés ou autre.

Il peut fonctionner de deux manières: soit en mode actif, soit en mode passif :

  • actif: Ici le client choisi le port à utiliser pour faire transiter les données, cela peut donc être un port entre 1024 et 65635. Ce mode est le moins utilisé car si il y a un pare-feu, il faudra ouvrir X port(s) pour autoriser la connexion du serveur FTP vers le client.
  • passif: L’inverse se trouve ici, c’est le serveur FTP qui détermine le port pour faire transiter les données, qui sera par défaut le port 20. Il suffit donc d’ouvrir ce port et le tour est joué !

Voilà, c’est un rappel très basique mais toutefois nécessaire pour la suite de l’article.

II) Comment chiffrer ses connexions FTP ?

Et bien oui, la question se pose ! Car jusqu’à présent, en vous connectant à un service FTP, non seulement vos commandes passent en clair sur le réseau, mais aussi et surtout vos credentials… ce qui constitue forcément un gros risque de sécurité.

Pour ce faire, nous avons deux alternatives à FTP, deux protocoles différents.

  • FTPS/FTPES, mais plus communément appelé sous le sigle FTPS. C’est une variante du protocole FTP reposant sur SSL/TLS et utilisant donc un certificat pour le chiffrement de la communication entre le client et le serveur.
  • SFTP, aussi appelé SSH File Transfer Protocol. Comme son nom l’indique, ce protocole est une déclinaison de SSH, et permet donc d’utiliser un tunnel SSH puis d’y faire transiter un flux FTP de manière chiffrée. Les commandes restent les même, mais l’installation d’un serveur FTP n’est pas nécessaire.

En général, SFTP est privilégié car ce dernier utilise le même port que le service SSH, et ne nécessite pas l’installation/configuration d’un serveur FTP (en tout cas, c’est ce qui ressort des mes recherches personnelles !). Cependant, dans le contexte d’une entreprise avec de nombreux utilisateurs utilisant le service FTP, utiliser FTPS peut devenir vraiment pertinent. Ici, nous allons donc voir comment mettre en place un serveur SFTP, qui est le plus simple et rapide à mettre en oeuvre (pas besoin de générer un certificat etc).

III) La pratique

Ici nous aurons donc une Debian 10 en 192.168.1.50, avec le paquet openssh-server installé. Classique.

Et ensuite nous allons… et bien rien du tout en réalité, ou presque ! Je m’explique. Par défaut, le « service FTP de SSH » (si l’on peut l’appeler comme ça) est activé par défaut via cette directive présente dans le fichier /etc/ssh/sshd_config :

A partir de là, si l’on utilise par exemple Filezilla, on peut créer une nouvelle connexion et s’y connecter en tant que root (il faut au préalable autoriser le root en SSH, cela n’est forcément pas conseillé mais c’est un lab, j’y viens juste après) :

On accepte la clé publique SSH de notre serveur, et c’est tout bon ! Après comme dit précédemment, ce n’est jamais l’idéal d’autoriser root en SSH (et de facto idem pour le SFTP). Pour autoriser seulement certains utilisateurs, nous pouvons faire ceci :

#Créer un groupe dédié pour les utilisateurs du SFTP
groupadd sftp-users
#Créer un nouvel utilisateur, membre du groupe sftp-users, sans shell, et avec un home
useradd -g sftp-users -s /bin/false -m -d /home/vincent vincent
#Modifier le mot de passe de l'utilisateur
passwd vincent

Ensuite, une fois notre ou nos utilisateur(s) créé(s), on modifier notre fichier de configuration SSH :

Il existe une plétore de paramètres que l’on peut utiliser, mais ici nous souhaitons simplement chrooter nos users dans leur home respectif. Match Group sftp-users permet d’indiquer que les paramètres qui suivent sont propres au groupe sftp-users, puis ChrootDirectory permet d’indiquer le dossier du chroot, ici via la variable %h ce sera le home de chacun. Pour les trois dernières options, ce ne sont que des paramètres de sécurité supplémentaires.

Si on essaie maintenant de se connecter via Filezilla à notre serveur, en redémarrant au préalable notre service sshd (service sshd reload) on peut vérifier tout ça !

Et comme on peut le voir, notre utilisateur ne peut pas créer de dossiers à la racine de son home, n’y s’en extraire. Cependant, il peut tout à fait upload/télécharger dans son dossier FTP !

Et si l’utilisateur essaie de se connecter via SSH :

IV) Conclusion

Nous aurons donc vu la différence entre ces différents protocoles, et la mise en application du SFTP avec quelques bonnes pratiques de sécurité. Je n’ai pas parlé plus que ça du FTPS car moins de personnes l’utilisent, mais cela pourrait faire l’objet d’un futur article avec la génération du certificat SSL. A voir !

Sur ce, j’espère comme à mon habitude vous avoir appris quelques bricoles, et je vous souhaite une bonne journée/soirée!

N'hésitez pas à soutenir le blog, chaque article demande un certain travail de recherche, rédaction ainsi que la réalisation de divers tests !