Le protocole de transfert de fichiers SFTP ou SSH est une méthode de transfert sécurisé de données entre deux ordinateurs et plus encore. C'est FTP qui s'exécute au-dessus du protocole SSH et tire parti de sa sécurité et prend entièrement en charge son authentification.
De nos jours, il est recommandé d'utiliser SFTP au lieu de l'ancien protocole FTP ou FTP/S. SFTP est sécurisé par défaut car c'est ainsi que SSH fonctionne. Du point de vue de la sécurité, SFTP vous protège également contre le reniflage de mot de passe et l'attaque de l'homme du milieu (MiTM).
Tout comme SSH, SFTP protège également l'intégrité de vos données en utilisant la fonction de cryptage et de hachage cryptographique. En outre, il prend en charge plusieurs méthodes d'authentification sécurisées, notamment l'authentification par mot de passe et par clé. En outre, il réduit le port ouvert du serveur vers le réseau extérieur, car il est exécuté sur le même port que le protocole SSH.
Prérequis
Dans ce guide, vous apprendrez à configurer le serveur SFTP sur un système Linux. De plus, vous apprendrez la commande de base du client sftp.
Vous trouverez ci-dessous l'environnement actuel de mise en œuvre :
- Un serveur Linux :vous pouvez utiliser Debian, Ubuntu, CentOS, Fedora, Rocky ou toute autre distribution Linux.
- Assurez-vous que les packages OpenSSH sont disponibles sur votre système Linux.
- Client SFTP :ligne de commande sftp ou tout autre client graphique selon votre préférence.
Vérifier les packages OpenSSH
Pour configurer un serveur SFTP, vous devez avoir installé les packages OpenSSH sur votre système Linux. Presque tous les serveurs de distribution Linux ont les packages OpenSSH installés par défaut. Mais, si vous n'avez pas le package OpenSSH sur votre système, vous pouvez l'installer à partir du référentiel officiel.
1. Pour vous assurer que les packages OpenSSH sont installés sur votre système Linux, utilisez la commande suivante.
Pour les serveurs Debian ou Ubuntu, vous pouvez utiliser la commande dpkg ci-dessous.
dpkg -l | grep ssh
Vous trouverez ci-dessous la sortie de notre système Debian.
ii libssh2-1:amd64 1.9.0-2 amd64 SSH2 client-side library
ii openssh-client 1:8.4p1-5 amd64 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:8.4p1-5 amd64 secure shell (SSH) server, for secure access from remote machines
ii openssh-sftp-server 1:8.4p1-5 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
La première colonne 'ii ' signifie que le paquet est installé. Le paquet 'openssh-sftp-server ' est installé sur le système Debian/Ubuntu.
Pour les utilisateurs de RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux, vous pouvez utiliser la commande rpm comme ci-dessous.
rpm -qa | grep ssh
Créer un groupe et un utilisateur
À cette étape, vous allez créer un nouveau groupe et un nouvel utilisateur pour le serveur SFTP. Les utilisateurs de ce groupe seront autorisés à accéder au serveur SFTP. Et pour des raisons de sécurité, les utilisateurs SFTP ne peuvent pas accéder au service SSH. Les utilisateurs SFTP accèdent uniquement au serveur SFTP.
1. Exécutez la commande suivante pour créer un nouveau groupe 'sftpgroup '.
sudo groupadd sftpgroup
2. Créez un nouvel utilisateur 'sftpuser ' à l'aide de la commande suivante.
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
Options détaillées :
- -G :ajoute automatiquement l'utilisateur au 'sftpgroup '.
- -d :spécifiez le répertoire personnel du nouvel utilisateur.
- -s :définissez la valeur par défaut pour le nouvel utilisateur sur '/sbin/nologin ', ce qui signifie que l'utilisateur ne peut pas accéder au serveur SSH.
3. Ensuite, créez le mot de passe pour l'utilisateur 'sftpuser ' en utilisant la commande ci-dessous.
passwd sftpuser
Tapez votre mot de passe fort et répétez, puis appuyez sur 'Entrée ' pour confirmer.
Pour ajouter plus d'utilisateurs, répétez les étapes numéro 2 et 3, et surtout, tous les utilisateurs SFTP doivent être dans le groupe 'sftpgroup ' sans accès au shell via SSH.
Configurer le répertoire de la prison chroot
Après avoir créé un nouveau groupe et utilisateur, vous devez créer et configurer le répertoire chroot pour les utilisateurs SFTP.
1. Pour l'utilisateur 'sftpuser', le nouveau répertoire personnel se trouvera dans '/srv/sftpuser' . Exécutez la commande ci-dessous pour le créer.
mkdir -p /srv/sftpuser
2. Pour configurer le chroot pour l'utilisateur 'sftpuser ', vous devez changer la propriété du répertoire en utilisateur root, mais rester le groupe pour lire et exécuter sans accès en écriture.
Changez la propriété du répertoire en utilisateur 'root' en utilisant la commande suivante.
sudo chown root /srv/sftpuser
Donnez au groupe la permission de lire et d'exécuter, mais pas d'écrire.
sudo chmod g+rx /srv/sftpuser
3. Ensuite, créez un nouveau répertoire 'data' dans le '/srv/sftpuser ' et changer le propriétaire de ces 'données ' répertoire à l'utilisateur 'sftpuser '.
mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data
Jusqu'à présent, ci-dessous détaille la configuration du répertoire d'utilisateurs SFTP.
- Le répertoire '/srv/sftuser' est le répertoire personnel par défaut.
- L'utilisateur 'sftpuser ' ne peut pas écrire dans le répertoire '/srv/sftpuser ', mais peut lire à l'intérieur de ce répertoire.
- L'utilisateur 'sftpuser ' peut télécharger des fichiers sur le serveur SFTP dans le répertoire '/srv/sftpuser/data '.
Activer SFTP sur le serveur SSH
Pour activer le serveur SFTP sur OpenSSH, vous devez modifier la configuration SSH '/etc/ssh/sshd_config'.
1. Modifiez la configuration ssh '/etc/ssh/sshd_config ' en utilisant nano ou vim.
sudo nano /etc/ssh/sshd_config
2. Commentaire la configuration suivante pour désactiver le 'sftp-server autonome ' fonctionnalité.
#Subsystem sftp /usr/lib/openssh/sftp-server
3. Collez la configuration suivante au bas de la ligne.
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory %h
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp
Enregistrez la configuration et quittez.
Paramétrage détaillé :
- Au lieu d'utiliser le sous-processus 'sftp-server ', nous utilisons le 'internal-sftp '.
- Le serveur SFTP activé pour le groupe 'sftpgroup '.
4. Pour appliquer une nouvelle configuration, redémarrez le service ssh à l'aide de la commande ci-dessous.
sudo systemctl restart sshd
Le serveur SFTP est prêt et accessible, et il s'exécute sur le même port que le service SSH.
Accéder au serveur SFTP
Côté client, nous utiliserons la ligne de commande sftp, qui est installée par défaut sur la plupart des distributions Linux. Mais, vous pouvez également utiliser un autre client de ligne de commande ou un client FTP GUI tel que FileZilla , Cybercanard , etc.
1. Pour vous connecter au serveur SFTP, exécutez la commande sftp comme ci-dessous.
sftp [email protected]
Si votre serveur SFTP et/ou SSH s'exécute sur le port personnalisé, vous pouvez utiliser la commande sftp comme ci-dessous.
sftp -P PORT [email protected]
Tapez le mot de passe pour le 'sftpuser '.
2. Une fois connecté au serveur SFTP, exécutez la commande suivante.
Afficher le répertoire de travail du chemin actuel et lister tous les fichiers et répertoires disponibles.
pwd
ls
3. Téléchargez un fichier local sur le serveur SFTP dans le répertoire '/ ', qui se traduira par 'autorisation refusée ', car il s'agit du répertoire chroot.
put /path/to/file/on/local /
4. Téléchargez un fichier local dans le répertoire '/data/ ' sur le serveur SFTP. Si votre configuration est correcte, votre fichier sera téléchargé dans le dossier '/data/ ' répertoire.
put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/
5. Vérifiez maintenant les fichiers disponibles sur le '/data ' à l'aide de la commande suivante.
ls /data/
Et vous verrez votre fichier téléchargé sur le serveur SFTP.
Conclusion
Toutes nos félicitations! Vous avez configuré avec succès le serveur SFTP sur le système Linux. Ce type de configuration peut être appliqué sur la plupart des systèmes Linux sur lesquels OpenSSH est installé. De plus, vous avez appris à configurer le répertoire chroot pour les utilisateurs SFTP et appris la commande de base du client sftp.