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.
Pré-requis
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.
Modification de la configuration de openSSH
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.
Création du groupe spécifique pour le serveur SFTP
Pour créer le groupe sftp, rien de plus simple avec la commande addgroup, donc voici la ligne de commande.
addgroup sftp
Création de l'utilisateur pour 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 et tests
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
Erreurs possibles
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.
Pour aller plus loin
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
Notes de version
- [26/05/2023] : Création de l'article
- [30/05/2023] : Correction faute de frappe
- [25/06/2023] : Correction code
Auteurs et sources
- Auteur : montuy337513
Navigation
Autres liens rapides pouvant vous intéresser