{{htmlmetatags>metatag-description=(Installation de SFTP sur serveur Linux Debian en chroot. ) metatag-og:image=(https://www1.zonewebmaster.eu/_media/:serveur-debian-file:sftp.png) metatag-og:description=(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. ) metatag-og:title=(Installation de SFTP sur serveur Linux Debian. ) metatag-og:type=(article) metatag-og:url=(https://www1.zonewebmaster.eu/serveur-debian-file/serveur-sftp) metatag-og:locale=(fr_FR) metatag-og:site_name(zonewebmaster.eu) metatag-article:published_time=(2023-05-24) metatag-article:modified_time=(2023-06-25) metatag-article:author=(montuy337513) metatag-article:tag=(SFTP, SSH, FTP sécurisé, installation SFTP, serveur SFTP, sécurisation, help, tuto, wiki, debian) }} ====== 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. {{ :serveur-debian-file:sftp.png?400 |}} ===== 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. {{howhard>3}} ===== 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//. {{ :serveur-debian-file:capture_d-ecran_2023-05-26_a_12.01.49.png?400 |}} 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 : [[:user:montuy337513]] ===== Navigation ===== * [[:accueil|Accueil]] * [[:serveur-debian-securite]] * [[:serveur-debian-general]] * [[:serveur-debian-automatisation]] * [[:serveur-debian-file]] * [[:serveur-debian-log]] * [[:serveur-debian-user-groupe]] * [[:serveur-debian-apache2]] * [[:serveur-debian-postfix]] * [[:serveur-debian-mysql]] * [[:serveur-debian-divers]]