Installation serveur SFTP sur Debian en chroot

Il existe plusieurs méthodes pour transférer des fichiers vers un serveur Linux. Le plus connu est bien sûr le FTP (File Transport Protocol).
Ce protocole est très répandu mais les données transit en claires sur les réseaux. Il existe aussi le FTPs qui est une version sécurisée de FTP. Et il existe le protocole SFTP (Secure File Transfer Protocol) qui exploite SSH.
Nous verrons dans ce tutoriel la mise en place d'un serveur SFTP sur un serveur Debian qui vous permettra de transférer des fichiers de manière sécurisée.

Ce tutoriel a été testé sur les versions Linux Debian 9, 10 et 11.
Toutes les lignes de commande suivantes ont été saisie en tant qu'utilisateur root.
openSSH doit être installé et configuré correctement sur votre serveur.

Difficulté
Moyen

Pour commencer nous allons configurer openSSH pour qu'il gère correctement SFTP et ceci de manière sécurisée. Pour cela nous allons modifier le fichier /etc/ssh/sshd_config avec les lignes de codes suivantes (les explications sont après) :

command sed -i -e "s/Subsystem sftp \/usr\/lib\/ssh\/sftp-server/#Subsystem sftp \/usr\/lib\/ssh\/sftp-server/" "/etc/ssh/sshd_config"
echo "
Subsystem sftp /usr/lib/ssh/sftp-server
 
Match Group sftp
   ChrootDirectory /home/%u
   ForceCommand internal-sftp
   AllowTcpForwarding no
   X11Forwarding no
   " >> /etc/ssh/sshd_config

Les explications :

  • Subsystem sftp /usr/lib/ssh/sftp-server : Indique à openSSH le chemin du script qui gère le SFTP.
  • Match Group sftp : Indique que seuls les utilisateurs appartenant au groupe sftp pourront se connecter et les lignes suivantes fournissent les règles de connexion pour les membres de ce groupe.
  • ChrootDirectory : Défini le répertoire racine de la connexion SFTP. Ici c'est le répertoire personnel de l'utilisateur. /home/%u
  • X11Forwarding no : Interdit l'accès au serveur graphique du serveur (KDE, Gnome, …)
  • AllowTcpForwarding no : Interdit les redirections du port TCP
  • ForceCommand internal-sftp : autorise seulement les commandes SFTP, les commandes SSH sont proscrites.

La ligne sed permet de commenter la ligne subsystem sftp déjà présente dans la configuration La commande echo permet de rajouter la configuration nécessaire à la fin du fichier sshd_config grâce à »

Nous rechargerons la configuration de openSSh plus tard.

Pour créer le groupe sftp, rien de plus simple avec la commande addgroup, donc voici la ligne de commande.

addgroup sftp

Maintenant que le groupe sftp est créé, nous pouvons créer l'utilisateur hola qui se connectera au serveur SFTP avec les lignes de commandes suivantes.

mkdir -p /home/hola
useradd -g sftp -s /bin/false -d /home/hola hola 
passwd hola
chown root:root /home/hola
chmod 755 /home/hola
mkdir /home/hola/upload
chown hola:sftp /home/hola/upload

Le première ligne permet de créer le répertoire de l'utilisateur hola.
La seconde ligne permet de créer l'utilisateur en spécifiant que hola appartient au groupe sftp, sans accès au shell (paramètre -s) et en spécifiant le répertoire de l'utilisateur (paramètre -d).
La troisième ligne permet de définir le mot de passe pour se connecter à l'utilisateur hola.
La quatrième ligne et les suivantes permettent de définir les droits de utilisateurs sur les différents répertoires. Le répertoire de base (/home/hola) doit avoir les droits en écriture pour root seulement.
Le répertoire /home/hola/upload est le répertoire qui servira à l'upload des fichiers.

Redémarrage de openSSH avec la ligne de commande suivante

systemctl reload ssh

Ensuite nous testons la connexion avec notre logiciel SFTP préféré. Pour ma part, j'utilise filezilla ou Termium.

N'oubliez pas de changer le port de connexion SSH si vous avez l'avez modifier pour sécuriser votre serveur

Et dans l'onglet "avancé", indiquez le répertoire distant /upload/.

Et à priori cela fonctionnera sans aucun problème

Vous retrouverez la plupart des erreurs de connexions dans le fichier log /var/log/auth.log

fatal: bad ownership or modes for chroot directory "/home/hola"

Les droits du répertoire de destination ne sont pas correct. Depuis quelques versions de Debian, le répertoire de connexion doit avoir seulement les droits en écriture pour root.
La ligne suivante devrait corriger le problème.

chmod 755 /home/hola 

Autre erreur possible que vous pouvez rencontrer :

User hola from xxx.xxx.xxx.xxx not allowed because none of user's groups are listed in AllowGroups

Vous rencontrez cette erreur lorsque vous avez renforcé la sécurité de votre serveur SSH en spécifiant des groupes spécifiques qui sont autorisées à se connecter.
Vous ouvrez le fichier de configuration /etc/ssh/sshd_config puis vous cherchez la ligne commençant par AllowGroups et vous modifiez cette ligne pour obtenir quelque chose qui ressemble à ceci :

AllowGroups ssh-only sftp

Ici, par mesure de sécurité, seul les membres du groupe ssh-only peuvent se connecter. Nous rajoutons aussi les membres du groupes nouvellement créé ci-dessus sftp.

Vous souhaitez utiliser SFTP pour télécharger ou upoader les fichiers de votre site internet. Voici comment faire.

Pour cette explication, nous considérons que :

  • notre site internet se trouve dans le répertoire /var/www
  • l'utilisateur et le groupe du serveur web est www-data

Nous créons un répertoire www dans /home/hola puis les droits correspondants avec les commandes suivantes

gpasswd -a hola www-data
mkdir /home/hola/www
chown hola:sftp /home/hola/www
mount -o bind /var/www /home/hola/www

La première ligne permet d'inscrire l'utilisateur hola dans le groupe www-data
La seconde ligne crée le répertoire www
La troisième ligne donne les bons droits au répertoire www
La quatrième ligne créée un lien entre le répertoire utilisateur dédié au site et l'emplacement réel du site.

Ensuite pour que le lien entre les deux répertoires soit permanent même si le serveur redémarre, on ajoute cette ligne au fichier /etc/fstab

/var/www /home/hola/www       none    bind    0       0 

Vous rencontrerez peut-être des problèmes de droits en écriture sur certains fichiers ou certains répertoires notamment pour les répertoires qui servent à uploader les photos par exemple.
Assurez-vous de donner le droit en écriture au groupe www-data exemple : chmod 775 /var/www/uploads/album

  • [26/05/2023] : Création de l'article
  • [30/05/2023] : Correction faute de frappe
  • [25/06/2023] : Correction code
  • serveur-debian-file/serveur-sftp.txt
  • Dernière modification : 25/06/2023 11:57
  • de zonewebmaster