Red Hat et dérivées version SERVEUR

Red Hat, Alma Linux : Installer et configurer un serveur SFTP (avec chroot)

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

sftp-server



Introduction



Dans cet article, nous allons voir comment installer un serveur SFTP sur CentOS.
Le tutoriel est réalisé avec CentOS 8 mais fonctionne de la même manière avec CentOS 7.

Le nom d'utilisateur pour ce tuto est cursus (nom de l'application pro pour laquelle j'avais besoin d'un sftp au travail).

Installation



Autant avec du FTP normal, il est nécessaire d'installer un serveur particulier (ProFTPd, vsFTPd, ...). Pour du SFTP, seul le serveur OpenSSH est nécessaire, puisque le FTP au travers d'un tunnel SSH est géré entièrement par OpenSSH lui même.

Installer (si ce n'est pas le cas) openssh-server et openssh-clients :

Code BASH :
dnf install openssh-{server,clients}


Si on utilise un parefeu et que le port SSH n'est pas ouvert :

Code BASH :
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload



Configuration SFTP



Création de l'arborescence sftp



Nous allons créer une arborescence pour notre utilisateur :
Code BASH :
/sftp/$USER


Dans mon cas /sftp est monté sur un volume logique sftplv. Je vous conseille d'avoir un volume séparé pour éviter le blocage du système si vos utilisateurs mettent beaucoup de fichiers .

Code TEXT :
Sys. de fichiers          Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/rootvg-sftplv   2,0G    6,0M  1,8G   1% /sftp


On affecte les bons droits (root:root):

Code BASH :
chown root:root /sftp
chmod 755 /sftp


Création des utilisateurs



On va créer des utilisateurs pour le transfert des fichiers via SFTP, qui n'auront aucun accès shell à la machine (nologin), et on les intégrera dans un groupe "sftpusers".

On créé le groupe :

Code BASH :
groupadd sftpusers


On crée un utilisateur sftp (cursus) en indiquant son dossier personnel (la racine du sftp de l'utilisateur), avec un shell "nologin" :

Code BASH :
useradd -g sftpusers -d /sftp/cursus -s /usr/sbin/nologin cursus


On attribue un mot de passe à notre utilisateur :

Code BASH :
passwd cursus


Et on affecte les droits root:root au dossier de l'utilisateur (obligatoire sinon le chroot ne fonctionnera pas) :

Code BASH :
chown root:root /sftp/cursus


Il est interdit de créer des dossiers et fichiers à la racine du sftp. On pourra donc créer un dossier data par exemple, avec les pleins droits pour l'utlisateur concerné :

Code BASH :
mkdir /sftp/cursus/data
chown -R cursus:sftpusers /sftp/cursus/data


Configurer le démon SSH pour le groupe sftpusers



On va configurer SSH pour autoriser le SFTP pour les utilisateurs du groupe sftpusers grâce à la directive Match, et surtout les chrooter dans leur dossier :

Code BASH :
vi /etc/ssh/sshd_config


On ajoute à la fin :

Code BASH :
Match Group sftpusers
    ChrootDirectory /sftp/%u
    AllowTcpForwarding no
    ForceCommand internal-sftp


On recharge le démon SSH :

Code BASH :
systemctl restart sshd


Tester



On se connecte sur la machine pour tester :

Code BASH :
sftp cursus@localhost
cursus@localhost's password:


Et on vérifie que c'est OK :

Code :
Connected to cursus@localhost.
sftp> ls
data


Et on peut tester avec un client filezilla sur un autre ordinateur (sftp://srv-sftp)