Red Hat, Alma Linux : Installer et configurer un serveur SFTP (avec chroot)
Table des matières
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).
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 :
Si on utilise un parefeu et que le port SSH n'est pas ouvert :
Nous allons créer une arborescence pour notre utilisateur :
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 .
On affecte les bons droits (root:root):
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 :
On crée un utilisateur sftp (cursus) en indiquant son dossier personnel (la racine du sftp de l'utilisateur), avec un shell "nologin" :
On attribue un mot de passe à notre utilisateur :
Et on affecte les droits root:root au dossier de l'utilisateur (obligatoire sinon le chroot ne fonctionnera pas) :
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é :
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 :
On ajoute à la fin :
On recharge le démon SSH :
On se connecte sur la machine pour tester :
Et on vérifie que c'est OK :
Et on peut tester avec un client filezilla sur un autre ordinateur (sftp://srv-sftp)
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)