Mémento 9.2 - Serveur VsFTPd
Le serveur VsFTPd sera installé sur la VM srvlan.
Le FTP est un protocole de communication dédié au transfert de fichiers sur un réseau TCP/IP.
Les utilisateurs des VM debian12-vm* (clients) utiliseront la VM srvlan (serveur) pour déposer ou s'échanger des fichiers.
Selon le paramétrage FTP, un utilisateur pourra ou non Déposer, Télécharger, Lire, Modifier ou Supprimer des dossiers/fichiers.
1 - Préambule
Outils utilisés :
- Serveur VsFTPd (Very secure FTP daemon).
- Console client lftp à la place de ftp.
Configurations proposées :
- Usage du FTPS (FTP via SSL).
- Usage du mode passif.
1.1 - Rôle d'un serveur FTP
Il permet le transfert de dossiers/fichiers avec un client distant, par Internet ou par le réseau informatique local. Le transfert, selon un modèle client/serveur, peut se faire dans les 2 sens.
Le serveur FTP d'un hébergeur permet par exemple à un client distant de déposer ou télécharger les fichiers de son site web.
En général, deux modes de connexion sont utilisés :
Le mode anonyme qui autorise l'accès au dossier public du serveur sans fournir de nom d'utilisateur ni de MDP. Les fichiers de ce dossier sont souvent en lecteur seule.
Le mode authentifié qui permet à un utilisateur local ou virtuel, après contrôle de son nom et de son MDP, d'accéder en lecture/écriture à ses propres fichiers.
2 - Installation
2.1 - Serveur vsftpd
Au préalable, mettez à jour la distribution Debian 12 :
[srvlan@srvlan:~$] sudo apt update
[srvlan@srvlan:~$] sudo apt upgrade
[srvlan@srvlan:~$] sudo reboot
[srvlan@srvlan:~$] sudo apt autoremove --purge
et installez vsftpd pour son côté léger et sécurisé :
[srvlan@srvlan:~$] sudo apt install vsftpd
Vérifiez le bon démarrage de celui-ci :
[srvlan@srvlan:~$] sudo systemctl status vsftpd
Retour :
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd...
Active: active (running) since Mon 2024-... ago
Process: 1989 ExecStartPre=/bin/mkdir -p /var...
Main PID: 1990 (vsftpd)
Tasks: 1 (limit: 1077)
Memory: 2.0M
CPU: 15ms
CGroup: /system.slice/vsftpd.service
└─1990 /usr/sbin/vsftpd /etc/vsftd...
juin 03 ... srvlan systemd[1]: Starting vsftpd ...
juin 03 ... srvlan systemd[1]: Started vsftpd ...
Un utilisateur de nom ftp a été créé lors de l'installation.
Un dossier personnel /srv/ftp/ lui a été associé.
Il s'agit du dossier public FTP par défaut du serveur.
Pour les tests, copiez ces 2 fichiers dans ce dossier :
[srvlan@srvlan:~$] cd /usr/share/doc/vsftpd [srvlan@srvlan:~$] sudo cp README /srv/ftp/README [srvlan@srvlan:~$] sudo cp TODO /srv/ftp/TODO
2.2 - Sécurisation des échanges FTP via SSL
De base le serveur vsftpd ne chiffre rien mais il peut utiliser le protocole FTPS (FTP via SSL) pour chiffrer ses communications avec les clients.
Pour information, différences entre le SFTP et le FTPS :
- SFTP plus récent utilise par défaut le port SSH 22 pour traiter l’authentification, les Cdes FTP et le transfert de données.
La gestion d'un pare-feu est facilitée, un seul port.
- FTPS utilise par défaut le port 21 pour traiter l'authentification et les Cdes FTP ainsi que le port 20 (en mode actif) ou une tranche de ports (en mode passif) pour le transfert de données.
Un pare-feu sera donc plus compliqué à gérer.
Pour le FTPS, installez si absent le paquet openssl :
[srvlan@srvlan:~$] sudo apt install openssl
Puis connectez-vous en tant que root et créez un certificat CA (Certificate Authority) auto-signé :
[srvlan@srvlan:~$] su root
[root@srvlan:~#] cd /etc/ssl/private
[root@srvlan:~#] openssl req -x509 -nodes -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem -days 3650
Répondez aux questions posées comme suit :
Country Name (2 letter code) [AU]:FR
State or Prov... Name (full name) [Some-State]:Paris
Locality Name (eg, city) []:Paris
Organization Name (e...) [Interne...]:Intra-InfoLoup
Organizational Uni... (eg...) []:Intra-Labo-FTPS
Common Name (... server FQDN or YOUR name) []:srvlan
Email Address []: Touche Entrée
Le Common Name doit correspondre au nom d'hôte du serveur FTP soit ici srvlan.
Editez ensuite le fichier de configuration vsftpd.conf :
[root@srvlan:~#] exit
[srvlan@srvlan:~$] sudo nano /etc/vsftpd.conf
et ajustez vers la ligne 147 les paramètres SSL :
# This option specifies the location of the RSA certifi...
# encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
# Lignes ajoutées
ssl_ciphers=HIGH
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
allow_anon_ssl=NO
#
# Uncomment this to indicate that vsftpd use ...
Le contenu des 7 lignes ajoutées signifie :
- Niveau de chiffrement élevé imposé.
- Protocole ssl_tlsv1 autorisé.
- Protocole ssl_sslv2 refusé car moins sécurisé.
- Protocole ssl_sslv3 refusé car moins sécurisé.
- Login non anonyme forcé SSL pour l'envoi des Data.
- Login non anonyme forcé SSL pour l'envoi du MDP.
- Login anonyme non forcé SSL.
2.3 - Activation du mode FTP passif
Le serveur fonctionne par défaut en mode actif.
Il vaut mieux, pour éviter que le pare-feu d'un client distant situé sur Internet ne bloque la liaison FTPS, passer celui-ci en mode passif.
Le synoptique du mémento détaille l'intérêt de ce mode.
Activez celui-ci en ajoutant ceci en fin de vsftpd.conf :
# Activation du mode passif
pasv_enable=YES
pasv_min_port=12500
pasv_max_port=12550
La tranche de ports aléatoires doit être supérieure à 1024, ici 12500 à 12550.
Redémarrez le serveur FTP pour la prise en compte :
[srvlan@srvlan:~$] sudo systemctl restart vsftpd [srvlan@srvlan:~$] sudo systemctl status vsftpd
3 - Connexions anonymes
3.1 - Configuration de base
Par défaut, vsftpd refuse les connexions anonymes.
Pour changer cela, éditez son fichier de configuration :
[srvlan@srvlan:~$] sudo nano /etc/vsftpd.conf
et réglez les valeurs de ces 3 paramètres comme suit :
anonymous_enable=YES # Accès anonyme autorisé
anon_upload_enable=NO # Dépôt fichiers interdit
anon_mkdir_write_enable=NO # Création dossiers interdite
N'oubliez pas de retirer si besoin le # de début de ligne.
Redémarrez le serveur FTP :
[srvlan@srvlan:~$] sudo systemctl restart vsftpd
3.2 - Connexion distante depuis une console
Installez le client FTP de nom lftp sur debian12-vm2 :
[client-linux@debian12-vm2:~$] sudo apt install lftp
Ce programme permet d'envoyer des lignes de Cdes vers un serveur FTP/FTPS/SFTP.
Créez un fichier caché .lftprc qui sera utilisé par lftp :
[client-linux@debian12-vm2:~$] cd /home/client-linux
[client-linux@debian12-vm2:~$] nano .lftprc
et entrez la configuration suivante :
# Configuration traitée au démarrage du client lftp
set ftp:passive-mode true
set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-protect-data true
set ftp:ssl-protect-list true
set ssl:verify-certificate no
Enfin, connectez-vous sur le serveur vsftpd de srvlan :
[client-linux@debian12-vm2:~$] lftp srvlan
lftp srvlan:~> ls
La Cde ls renvoie le contenu du dossier public /srv/ftp/ :
-rw-r--r-- 1 0 0 1361 Juin 03 16:42 README
-rw-r--r-- 1 0 0 1833 Juin 03 16:42 TODO
lftp srvlan:/> quit
Utilisez la Cde quit pour fermer la connexion distante.
Testez ensuite un téléchargement FTP :
[client-linux@debian12-vm2:~$] cd Documents
[client-linux@debian12-vm2:~$] lftp srvlan
lftp srvlan:~> get TODO
Retour :
1833 octets transférés
lftp srvlan:/> quit
Créez enfin un fichier de test test-ftp-vm2 comme suit :
[client-linux@debian12-vm2:~$] touch test-ftp-vm2
[client-linux@debian12-vm2:~$] echo "Test Upload FTP" > test-ftp-vm2
et testez un envoi FTP dans le dossier public de srvlan :
[client-linux@debian12-vm2:~$] lftp srvlan
lftp srvlan:~> put test-ftp-vm2
Retour :
put: L'accès a échoué : 550 Permission denied. (te...
lftp srvlan:/> quit
Echec normal puisque vous avez plus haut interdit le dépôt anonyme de fichiers.
3.3 - Connexion distante depuis FileZilla
Installez sur debian12-vm2 le client FTP/SFTP FileZilla :
[client-linux@debian12-vm2:~$] sudo apt install filezilla
FileZilla fonctionne en mode passif par défaut.
Ouvrez ensuite l'application graphique :
- Menu Applications -> Internet -> Icône FileZilla
Cliquez sur l'icône située la plus à gauche de la barre des icônes afin d'ouvrir le Gestionnaire de Sites et cliquez sur le bouton Nouveau site.
Créez un site de nom srvlan-anonymous comme suit :
- Onglet Général

- Onglet Avancé

Une fenêtre Se souvenir des mots de passe ? s'ouvre :
-> Cochez Sauvegarder les mots de passe -> Valider
Le site srvlan-anonymous est à présent créé. Cliquez sur la flèche située à droite de l'icône du Gestionnaire de Sites et sélectionnez celui-ci.
Une fenêtre Connexion FTP non sécurisée s'ouvre :
-> Cochez Toujours autoriser FTP non sécurisé pour ...
-> Valider
La connexion s'établit et la zone Site distant doit montrer le contenu du dossier public de srvlan.

Pour Afficher/Editer les fichiers texte, procédez ainsi :
-> Menu Edition de FileZilla -> Paramètres...
-> Sélectionnez Edition des fichiers
-> Cochez Utiliser l'éditeur pers... -> /usr/bin/mousepad
-> Cochez Toujours utiliser l'éditeur par défaut
-> Bouton Valider
Vérifiez à présent que vous pouvez :
- En zone Site local
Télécharger un fichier mais non en Envoyer (Upload).
- En zone Site distant
Afficher/Editer un fichier mais non le Renommer ni le Supprimer.
Cliquez sur l'icône serveur/croix-rouge pour fermer la connexion.
3.4 - Configuration ouvrant l'Upload de fichiers
Choix déconseillé pour raison de sécurité, un anonyme pouvant déposer un fichier infecté.
Créez et affectez un dossier uploads à l'utilisateur ftp :
[srvlan@srvlan:~$] sudo mkdir /srv/ftp/uploads [srvlan@srvlan:~$] sudo chown ftp:ftp /srv/ftp/uploads
Donnez à l'utilisateur ftp le droit d'écriture sur celui-ci :
[srvlan@srvlan:~$] sudo chmod 755 /srv/ftp/uploads
et retirez lui ce droit sur le dossier racine /srv/ftp/ :
[srvlan@srvlan:~$] sudo chmod 555 /srv/ftp
Editez ensuite le fichier de configuration vsftpd.conf :
[srvlan@srvlan:~$] sudo nano /etc/vsftpd.conf
puis ajustez les paramètres ci-dessous comme suit :
write_enable=YES # Ecriture autorisée
anon_upload_enable=YES # Dépôt fichiers autorisé
anon_mkdir_write_enable=YES # Création dossiers autorisée
et ajoutez les 2 lignes suivantes en fin de fichier :
# Permissions affectées au contenu du dossier uploads
anon_umask=022
- umask 022 = Permissions à 755 dossiers/644 fichiers
Pour finir, redémarrez le serveur FTP :
[srvlan@srvlan:~$] sudo systemctl restart vsftpd
3.5 - Test de bon fonctionnement de l'Upload
Accédez au dossier suivant de la VM debian12-vm2 :
[client-linux@debian12-vm2:~$] cd /home/client-linux
[client-linux@debian12-vm2:~$] cd Documents
et testez le dépôt (upload) suivant avec la Cde lftp :
[client-linux@debian12-vm2:~$] lftp srvlan
lftp srvlan:~> ls
Retour :
-rw-r--r-- 1 0 0 1361 Jun 03 16:42 README
-rw-r--r-- 1 0 0 1833 Jun 03 16:42 TODO
drwxr-xr-x 2 112 122 4096 Jun 04 12:56 uploads
lftp srvlan:/> cd uploads
lftp srvlan:/uploads> put test-ftp-vm2
Retour :
16 octets transférés
lftp srvlan:/uploads> ls
Retour :
-rw-r--r-- 1 112 122 16 Jun 04 13:17 test-ftp-vm2
lftp srvlan:/uploads> quit
Ensuite, dans FileZilla, vérifiez le résultat et contrôlez l'impossibilité de Supprimer, Renommer et Modifier un fichier/dossier déposé dans le dossier uploads.
Vérifiez également l'impossibilité maintenant de réaliser un envoi FTP en dehors du dossier uploads (droits du dossier racine /srv/ftp/ fixés ci-dessus à 555).
4 - Connexions authentifiées d'utilisateurs locaux
4.1 - Accès FTP limité à un dossier commun
C'est par défaut l'utilisateur nobody de Linux qui permet au démon vsftpd d'exécuter ses processus enfants non privilégiés. L'inconvénient est que d'autres démons peuvent également travailler avec cet utilisateur.
Il est donc, par sécurité, conseillé de créer un utilisateur non privilégié dédié au démon vsftpd et de le déclarer dans vsftpd.conf à l'aide du paramètre nopriv_user.
Pour cela, vous allez créer un utilisateur local de nom userftps sans MDP associé, ce qui interdira toute tentative de connexion avec ce nom sur srvlan.
Un dossier /home/ftp/ affecté à cet utilisateur et au groupe grftps servira de racine aux utilisateurs locaux et plus tard aux utilisateurs virtuels.
Créez le dossier/groupe/utilisateur et les permissions :
[srvlan@srvlan:~$] sudo mkdir -p /home/ftp [srvlan@srvlan:~$] sudo groupadd grftps [srvlan@srvlan:~$] sudo useradd -g grftps -d /home/ftp userftps [srvlan@srvlan:~$] sudo chown userftps:grftps /home/ftp [srvlan@srvlan:~$] sudo chmod 555 /home/ftp
Créez ensuite les utilisateurs locaux clientvm* suivants :
[srvlan@srvlan:~$] sudo adduser clientvm1 [srvlan@srvlan:~$] sudo adduser clientvm2
Un MDP UNIX sera demandé pour chacun d'eux. Vous pouvez utiliser ceux des utilisateurs des VM debian12-vm* mais ce n'est pas obligatoire. Vous êtes également libre de répondre ou non aux demandes d'information qui apparaîtront.
Ajoutez les 2 utilisateurs au groupe grftps :
[srvlan@srvlan:~$] sudo adduser clientvm1 grftps [srvlan@srvlan:~$] sudo adduser clientvm2 grftps
et créez pour ceux-ci le dossier commun_locaux :
[srvlan@srvlan:~$] cd /home/ftp
[srvlan@srvlan:~$] sudo mkdir commun_locaux
[srvlan@srvlan:~$] sudo chown userftps:grftps commun_locaux
[srvlan@srvlan:~$] sudo chmod 775 commun_locaux
[srvlan@srvlan:~$] sudo chmod +t commun_locaux
Le +t (sticky bit) interdira aux utilisateurs locaux de Supprimer/Modifier les fichiers situés dans le dossier commun_locaux dont ils ne sont pas propriétaires.
Vérifiez toutes les créations dans /home/ ainsi que le contenu de ces 3 fichiers :
[srvlan@srvlan:~$] sudo cat /etc/group [srvlan@srvlan:~$] sudo cat /etc/passwd [srvlan@srvlan:~$] sudo cat /etc/shadow
Editez à présent le fichier de configuration vsftpd.conf :
[srvlan@srvlan:~$] sudo nano /etc/vsftpd.conf
puis ajustez les paramètres suivants comme affichés :
local_enable=YES # Accès utilisateur local=YES
write_enable=YES # Ecriture utilisateur local=YES
local_umask=022 # 644 fichiers reçus, 755 dossiers reçus
nopriv_user=userftps # Utilisateur non privilégié
ftpd_banner=Serveur FTP du Loup. # Accueil de vsftpd
chroot_local_user=YES # Utilisateur limité à sa racine
secure_chroot_dir=/home/ftp # Racine de userftps
- ftpd_banner : Permet de cacher la version de vsftpd.
et ajoutez ces 3 lignes en fin de fichier :
# Gestion des utilisateurs locaux
local_root=/home/ftp/commun_locaux
allow_writeable_chroot=YES
- Ecriture OK dans le dossier racine commun_locaux.
Redémarrez le serveur FTP :
[srvlan@srvlan:~$] sudo systemctl restart vsftpd
Créez la note suivante dans le dossier commun_locaux :
[srvlan@srvlan:~$] cd /home/ftp/commun_locaux [srvlan@srvlan:~$] sudo nano note-ftps-utilisateurs-locaux
et entrez ce contenu précisant le rôle du dossier :
Ici, dossier FTP dédié aux utilisateurs locaux.
4.2 - Connexion sur le dossier commun
Créez sur le client FileZilla de debian12-vm2 un site de nom srvlan-commun.
Paramétrez celui-ci comme montré ci-dessous :
- Onglet Général

- Onglet Avancé
-> Dossier local par défaut -> Parcourir...
-> Sélectionnez /home/client-linux/Documents
-> Bouton Valider
Lancez ensuite une connexion FTPS sur le site.
1 ) Traitez le certificat SSL présenté comme suit :

2 ) La connexion est établie :

Le transfert FTP doit fonctionner dans les 2 sens.
Mais vous ne devez pas pouvoir, zone Site distant, Supprimer, Renommer et Modifier les fichiers déposés sur srvlan par d'autres utilisateurs, cas du fichier note-ftps-utilisateurs-locaux.
Vous devez en revanche pouvoir lire leur contenu.
Pour finir, créez sur le client FileZilla de debian12-vm1 le site srvlan-commun avec comme utilisateur local clientvm1 et contrôlez après connexion que vous retrouvez bien les mêmes permissions que ci-dessus.
4.3 - Accès FTP à tous les dossiers
Choix déconseillé, l'utilisateur du FTP pouvant accéder à des fichiers sensibles.
La configuration actuelle enferme les utilisateurs locaux tels clientvm* dans le dossier racine commun_locaux, ceux-ci ne peuvent donc pas accéder au dossier parent donc à l'arborescence complète de srvlan.
Ce comportement sécurisé vient de ces paramètres :
chroot_local_user=YES # Utilisateur limité à sa racine
local_root=/home/ftp/commun_locaux # Racine
Mais vous pouvez avoir besoin qu'un utilisateur local accède à toute l'arborescence de srvlan ceci avec des permissions différentes de celles de son dossier personnel et du dossier racine commun_locaux.
Editez pour cela le fichier vsftpd.conf :
[srvlan@srvlan:~$] sudo nano /etc/vsftpd.conf
puis décommentez les 2 lignes suivantes :
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
et redémarrez le serveur FTP :
[srvlan@srvlan:~$] sudo systemctl restart vsftpd
Créez maintenant un utilisateur local de nom indiscret :
[srvlan@srvlan:~$] sudo adduser indiscret
Pour simplifier, donnez lui le MDP indiscret.
Affectez ensuite celui-ci au groupe grftps :
[srvlan@srvlan:~$] sudo adduser indiscret grftps
Pour finir, créez le fichier vsftpd.chroot_list :
[srvlan@srvlan:~$] sudo nano /etc/vsftpd.chroot_list
et entrez l'utilisateur indiscret en début de celui-ci :
indiscret
Si d'autres noms, placez ceux-ci les uns sous les autres.
Créez sur le FileZilla de debian12-vm1 le site srvlan-complet et attribuez lui ces paramètres :
- Onglet Général
-> Hôte -> srvlan
-> Chiffrement -> Connexion FTP explicite sur TLS si ...
-> Type d'authentification -> Normale
-> Utilisateur -> indiscret
-> Mot de passe -> indiscret
- Onglet Avancé
-> Dossier local par défaut -> Parcourir...
-> Sélectionnez /home/client-linux/Documents
-> Dossier distant par défaut
-> Entrez /home/indiscret
-> Bouton Valider
Lancez une connexion sur le site srvlan-complet :

et vérifiez que rien, en dehors de /home/indiscret/ et /home/ftp/commun_locaux/, ne peut être supprimé ou modifié mais le droit de lire et télécharger tous les fichiers de srvlan représente un risque de sécurité.
5 - Connexions authentifiées d'utilisateurs virtuels
Choix conseillé pour raison de sécurité.
Les utilisateurs virtuels non déclarés avec la Cde adduser seront comme l'utilisateur local userftps inconnus du système mais verront leurs demandes de connexion mappées vers celui-ci, chacun dans leur dossier respectif.
Il s’agit là d’une protection plus efficace que la création d'utilisateurs locaux.
La configuration s’opère en 4 étapes :
- Création d’une Bdd Berkeley utilisateurs virtuels
- Liaison de la Bdd avec le module PAM de vsftpd
- Création des permissions et dossiers des utilisateurs
- Configuration de vsftpd et test de connexion
5.1 - Bdd Berkeley des utilisateurs virtuels
Installez au préalable le paquet db5.3-util :
[srvlan@srvlan:~$] sudo apt install db5.3-util
puis créez ensuite le dossier et le fichier suivants :
[srvlan@srvlan:~$] sudo mkdir /etc/vsftpd [srvlan@srvlan:~$] sudo touch /etc/vsftpd/virtuels.txt
Editez le fichier créé virtuels.txt :
[srvlan@srvlan:~$] sudo nano /etc/vsftpd/virtuels.txt
et entrez, l'un sous l'autre, ces utilisateurs et MDP :
clientvm1-virtuel
MDP de clientvm1-virtuel
clientvm2-virtuel
MDP de clientvm2-virtuel
Terminez la liste par un retour de chariot.
Nota : Les utilisateurs ci-dessus, inconnus de srvlan, peuvent avoir des MDP différents ou non de ceux affectés aux utilisateurs locaux des VM debian12-vm*.
Créez enfin la Bdd virtuels.db pour le module PAM :
[srvlan@srvlan:~$] cd /etc/vsftpd [srvlan@srvlan:~$] sudo db5.3_load -T -t hash -f virtuels.txt virtuels.db
et autorisez la lecture des 2 fichiers à root uniquement :
[srvlan@srvlan:~$] sudo chmod 600 /etc/vsftpd/virtuels.db [srvlan@srvlan:~$] sudo chmod 600 /etc/vsftpd/virtuels.txt
5.2 - Liaison Bdd avec le module PAM vsftpd
Editez le fichier de configuration PAM suivant :
[srvlan@srvlan:~$] sudo nano /etc/pam.d/vsftpd
et ajoutez, sous # Note : vsftpd..., ces 2 instructions :
auth sufficient /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/virtuels
account sufficient /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/virtuels
Mettre i386-linux-gnu à la place de x86_64-linux-gnu pour un système 32 bits.
Le module pam_userdb (Pluggable Authentication Modules) vérifiera les authentifications utilisateurs virtuels/MDP avec les valeurs stockées dans la Bdd Berkeley.
5.3 - Permissions et dossiers des utilisateurs
Créez le dossier qui contiendra les permissions :
[srvlan@srvlan:~$] cd /etc/vsftpd [srvlan@srvlan:~$] sudo mkdir vsftpd_user_conf
Créez le fichier des permissions pour clientvm1-virtuel :
[srvlan@srvlan:~$] cd vsftpd_user_conf [srvlan@srvlan:~$] sudo nano clientvm1-virtuel
et entrez pour cet utilisateur les permissions suivantes :
# Configuration vsftpd de l'utilisateur "clientvm1-virtuel"
# Paramétrage pour les mêmes droits qu'un utilisateur local
# Activation de l'utilisateur comme utilisateur virtuel
guest_enable=YES
# Ecriture autorisée
write_enable=YES
# Modification et suppression autorisées
anon_other_write_enable=YES
# Download autorisé même si un fichier
# n'est pas en lecture pour tous
anon_world_readable_only=NO
# Dossier dans lequel sera enfermé l'utilisateur
local_root=/home/ftp/clientvm1-virtuel
Créez maintenant son dossier personnel :
[srvlan@... ~$] cd /home/ftp [srvlan@... ~$] sudo mkdir clientvm1-virtuel [srvlan@... ~$] sudo chown userftps:grftps clientvm1-virtuel [srvlan@... ~$] sudo chmod 755 clientvm1-virtuel
Créez une note qui permettra d'identifier le dossier :
[srvlan@srvlan:~$] cd /home/ftp/clientvm1-virtuel [srvlan@srvlan:~$] sudo nano note-clientvm1-virtuel
et entrez le texte suivant :
Ici, dossier FTP personnel de "clientvm1-virtuel".
Effectuez les mêmes opérations que ci-dessus pour l'utilisateur virtuel clientvm2-virtuel.
5.4 - Réglage de vsftpd et test de connexion
Editez le fichier de configuration de serveur FTP :
[srvlan@srvlan:~$] sudo nano /etc/vsftpd.conf
et ajoutez les lignes suivantes à la fin de celui-ci :
# Gestion des utilisateurs virtuels
guest_username=userftps
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
Mappage sur l'utilisateur userftps et attribution des mêmes privilèges que ceux des utilisateurs locaux de srvlan.
Redémarrez le serveur :
[srvlan@srvlan:~$] sudo systemctl restart vsftpd
Créez depuis FileZilla les sites srvlan-clientvm*-virtuel sur les VM debian12-vm* comme suit :
- Onglet Général
-> Hôte -> srvlan
-> Chiffrement -> Connexion FTP explicite sur TLS si ...
-> Type d'authentification -> Normale
-> Utilisateur -> clientvm1-virtuel ou clientvm2-virtuel
-> Mot de passe -> MDP de clientvm1-virtuel ou clientv...
Pour les MDP, voir le § 5.1.
- Onglet Avancé
-> Dossier local par défaut -> Parcourir...
-> Sélectionnez /home/client-linux/Documents
-> Bouton Valider
Vérifiez après connexion que chaque utilisateur virtuel :
- Peut Transférer des fichiers dans les 2 sens.
- Peut Supprimer/Modifier ses dépôts sur srvlan.
- Reste bien enfermé dans son dossier personnel.
Vérifiez que chaque dossier/fichier déposé sur srvlan est bien mappé sur l'utilisateur userftps :
[srvlan@srvlan:~$] ls -l /home/ftp/clientvm1-virtuel [srvlan@srvlan:~$] ls -l /home/ftp/clientvm2-virtuel
6 - Configuration préférentielle
En l'état, le serveur FTP accepte les connexions d'utilisateurs anonymes, locaux et virtuels.
Vous l'avez compris, la connexion authentifiée d'utilisateurs virtuels est la plus sécurisée des 3.
Pour ne traiter que celle-ci, appliquez dans vsftpd.conf :
anonymous_enable=NO # Accès anonyme interdit
Editez ensuite le fichier de configuration PAM :
[srvlan@srvlan:~$] sudo nano /etc/pam.d/vsftpd
et commentez ces 4 lignes dédiées utilisateurs locaux :
# @include common-account
# @include common-session
# @include common-auth
# auth required pam_shells.so
La 2ème ligne de ce fichier fait référence au fichier /etc/ftpusers. Pour info, celui-ci contient une liste par défaut d'utilisateurs locaux n'ayant pas le droit de se connecter sur le service FTP.
On pourrait encore augmenter la sécurité (changement de n° de port FTP, filtrage IP, adresses IP virtuelles, etc...) mais la connexion authentifiée d'utilisateurs virtuels est un bon début.

Repos mérité, respirez !
Le mémento 10.1 propose de rendre
le réseau plus cohérent avec entre
autres la création d'un DNS split.