Dans cet article, je vais vous montrer comment configurer un serveur FTP sur le Raspberry Pi qui peut être utilisé pour partager des fichiers sur vos appareils. Nous utiliserons vsFTPd car il est très stable, sécurisé et un serveur FTP très rapide. Je montrerai également comment configurer vsFTPd pour limiter les utilisateurs à leurs répertoires HOME, tout en cryptant l'intégralité de la connexion à l'aide de SSL/TLS.
Si vous souhaitez suivre ce matériel, vous devez avoir installé le système d'exploitation Raspberry Pi sur votre Raspberry Pi. L'exécution d'un serveur FTP ne nécessite pas d'interface graphique, je recommande donc d'installer Raspberry Pi OS Lite avec le service SSH activé, permettant l'accès à distance.
Installer ou vsFTPd sans Raspberry Pi
Le package vsftpd est disponible à partir des dépôts officiels du système d'exploitation Raspberry Pi, il peut donc être installé avec les commandes suivantes :
sudo apt update
sudo apt install vsftpd
Après l'installation, le service du serveur FTP démarre automatiquement. Pour vérifier l'état de ce service, exécutez :
sudo systemctl status vsftpd
Le retour de cette commande devrait renvoyer "Actif :actif (en cours d'exécution) depuis…", quelque chose comme :
vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-05-23 07:02:41 BST; 14s ago
...
Comment migrer de CentOS 8 vers Rocky Linux 8/Alma Linux 8
Configurer le serveur FTP avec vsFTPd
La configuration de vsFTPd se fait via le fichier /etc/vsftpd.conf .
La plupart des paramètres sont bien documentés, en anglais, dans le fichier de configuration. Si vous souhaitez évaluer toutes les options disponibles, je vous recommande le site officiel à :Page de manuel de VSFTPD.CONF
1. Accès au serveur FTP
Pour vous assurer que seuls les utilisateurs locaux du système d'exploitation peuvent accéder au serveur FTP, recherchez les entrées anonyme_enable et local_enable dans le fichier de configuration, en les laissant comme suit :
anonymous_enable=NO
local_enable=YES
2. Activation des téléchargements
Localisez et décommentez le paramètre write_enable pour autoriser les modifications du système de fichiers, permettant aux utilisateurs de télécharger et de supprimer des fichiers :
write_enable=YES
3. Cage de chroot
Pour empêcher les utilisateurs FTP d'accéder aux fichiers en dehors de leur dossier personnel, nous devons créer une prison chroot, en décommentant le paramètre chroot_local_user :
chroot_local_user=YES
Lorsque la fonction chroot est activée, vsFTPd désactivera le téléchargement de fichiers si le répertoire utilisateur est verrouillé.
Utilisez l'une des options ci-dessous pour laisser l'environnement chrooté en mode écriture.
Option 1 - la méthode recommandée pour activer le téléchargement de fichiers et laisser le chroot actif, en configurant les répertoires FTP. Dans l'exemple suivant, je vais créer un répertoire ftp dans le dossier personnel de l'utilisateur, qui servira de dossier utilisé par chroot et permettra d'y télécharger les fichiers.
user_sub_token=$USER
local_root=/home/$USER/ftp
Option 2 - Une autre alternative consiste à ajouter le paramètre allow_writeable_chroot dans le fichier vsftpd.conf. Cette option activera l'option d'écriture dans le dossier de départ des utilisateurs.
allow_writeable_chroot=YES
4. Connexions passives sur serveur FTP
Par défaut, vsFTPd utilise le mode actif. Pour utiliser le mode passif, définissez la plage minimale et maximale de ports utilisés.
pasv_min_port=30000
pasv_max_port=31000
vsFTPd peut utiliser n'importe quel port en mode passif. Lorsque le mode passif est activé, le client FTP ouvre une connexion sur un port aléatoire lors de la connexion au serveur FTP, à l'intervalle que vous avez défini dans le fichier de configuration.
5. Limiter la connexion à certains utilisateurs
Nous pouvons configurer vsFTPd pour n'autoriser que quelques utilisateurs à se connecter. Pour effectuer cette configuration, ajoutez les lignes suivantes au fichier de paramètres :
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Lorsque ce paramètre est activé, vous devez spécifier quels utilisateurs pourront se connecter, en ajoutant leurs noms d'utilisateur dans le fichier /etc/vsftpd.user_list, avec un utilisateur par ligne.
6. Transmission sécurisée avec SSL/TLS
Pour crypter la transmission FTP avec SSL/TLS, vous devez disposer d'un certificat SSL et configurer le serveur FTP pour l'utiliser. Nous pouvons utiliser un certificat SSL existant signé par un émetteur certifié ou créer un certificat auto-signé.
Si vous avez un domaine ou un sous-domaine pointant vers l'adresse IP de votre serveur FTP, vous pouvez générer un certificat SSL gratuit à l'aide de Let's Encrypt. Si vous ne l'avez jamais utilisé auparavant, suivez la documentation officielle :Getting Started – Let's Encrypt – Free SSL/TLS Certificates
Dans cet article, nous allons générer une clé auto-signée à l'aide de la commande openssl.
Exécutez la commande ci-dessous pour créer une clé privée (certificat) de 2 048 bits, auto-signée, valable 10 ans et valable 10 ans. Les clés publiques et privées seront stockées dans le même fichier.
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Après avoir créé les clés, ouvrez à nouveau le fichier de paramètres vsFTPd :
sudo nano /etc/vsftpd.conf
Trouvez les paramètres rsa_cert_file et rsa_private_key_file en modifiant leurs valeurs dans le fichier pem et définissez le paramètre ssl_enable sur YES.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Si ces paramètres ne sont pas configurés correctement, le serveur FTP n'utilisera TLS que pour sécuriser les connexions.
Redémarrer ou serveur FTP
Lorsque les paramètres ci-dessus sont effectués, le fichier de paramètres vsFTPd devrait ressembler à ceci (sans les commentaires) :
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_min_port=30000 pasv_max_port=31000 userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES
Enregistrez le fichier et redémarrez le service vsFTPd pour que les modifications apportées à ce fichier prennent effet :
sudo systemctl restart vsftpd
Ouverture du pare-feu
Si vous utilisez le pare-feu UFW dans votre distribution, vous devez libérer le trafic FTP, en ouvrant les ports 20 (données FTP), 21 (commandes FTP) et 30000-31000 (ports en mode passif), à l'aide des commandes suivantes :
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Maintenant, relisez les règles UFW, en les désactivant et en les réactivant.
sudo ufw disable
sudo ufw enable
Créer un utilisateur pour FTP
Pour tester notre serveur FTP, nous allons créer un utilisateur.
- Si vous avez déjà un utilisateur qui sera utilisé et que vous souhaitez simplement lui donner accès, ignorez la première étape.
- Si vous avez défini allow_writeable_chroot=YES dans votre fichier de configuration, ignorez la troisième étape.
01. Créez un utilisateur appelé novouserftp :
sudo adduser novouserftp
Lorsque vous y êtes invité, définissez le mot de passe de l'utilisateur.
02. Ajoutez l'utilisateur à la liste de ceux qui peuvent utiliser le serveur FTP.
echo "novouserftp" | sudo tee -a /etc/vsftpd.user_list
03. Créez un répertoire FTP et définissez les autorisations correctes.
sudo mkdir -p /home/novouserftp/ftp/upload
sudo chmod 550 /home/novouserftp/ftp
sudo chmod 750 /home/novouserftp/ftp/upload
sudo chown -R novouserftp: / home / novouserftp / ftp
Comme indiqué précédemment, l'utilisateur pourra télécharger des fichiers dans le dossier ftp/upload de son répertoire personnel.
À ce stade, votre serveur FTP est entièrement fonctionnel et vous pouvez vous y connecter à l'aide de clients FTP comme FileZilla !
Désactiver l'accès au shell
Par défaut, lorsqu'un utilisateur est créé, si aucune configuration supplémentaire n'est effectuée, cet utilisateur dispose d'un accès SSH au serveur. Pour désactiver cet accès, créez un nouveau shell qui affiche simplement un message indiquant à l'utilisateur que ce compte est limité à l'accès FTP uniquement.
Créer le shell /bin/ftponly et rendez-le exécutable.
echo -e '#!/bin/sh echo "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
Ajoutez le nouveau shell à la liste des shells valides dans le fichier /etc/shells :
echo "/bin/ftponly" | sudo tee -a /etc/shells
Remplacez le shell utilisateur créé par /bin/ftponly :
sudo usermod novouserftp -s / bin / ftponly
Utilisez cette dernière commande pour tous les utilisateurs qui n'auront accès qu'au serveur FTP.
Conclusion
J'espère que vous savez comment installer et configurer un serveur FTP rapide et sécurisé sur votre système Raspberry Pi.