Configuration de VSFTPD

VSFTPD, qu'est ce que c'est?

VSFTPD est un serveur FTP: Very Secure File Transfer Protocol Deamon.

En d'autres termes, c'est le moyen pour transférer des fichiers d'un ordinateur distant vers un serveur (votre serveur dédié). Avec VSFTPD vous pourrez transférer les fichiers de votre site internet vers votre serveur web dédié.

Configuration de VSFTPD

Nous allons maintenant créer des espaces FTP sur le disque dur de votre serveur. Un espace FTP sera le lieu sur votre serveur ou vous pourrez transférer vos fichiers depuis votre ordinateur personnel.

Il y a plusieurs façon de créer des espaces ftp:

- En créant un utilisateur linux pour chaque espace ftp.

- en utilisant une base de donnée de type Berkeley (mode utilisateurs viruels)

Nous allons choisir la solution un utilisateur linux pour chaque espace ftp car c'est certainement la solution la plus simple. Après si vous avez des centaines d'espace FTP il faudra songer à faire autrement...

Notre objectif:

- Nous voulons créer l'espace ftp pour le site l'emplacement disque /var/www/blogs

Le protocole FTP est un protocole très peu sécurisé par défaut car tous les mots de passe et toutes les données sont transférés en clair. En utilisant TLS, toute la communication est cryptée, rendant ainsi FTP beaucoup plus sécurisé.

Installation de vsftpd et OpenSSL


apt-get -y install vsftpd openssl

Sauvegarde du fichier de configuration: Nous allons créer une sauvegarde du fichier de configuration /etc/vsftpd.conf , en cas de problème cela peut toujours être utile...

cp -i /etc/vsftpd.conf /etc/vsftpd.conf_BACKUP

Création du certificat SSL pour TLS

Pour utiliser TLS, nous devons créer un certificat SSL. le certificat sera stocké dans /etc/ssl-vsftpd/private , ce répertoire n'existe pas, créez-le maintenant:


mkdir -p /etc/ssl-vsftpd/private
chmod 700 /etc/ssl-vsftpd/private

Ensuite, nous pouvons générer le certificat SSL:


openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl-vsftpd/private/vsftpd.pem -out /etc/ssl-vsftpd/private/vsftpd.pem


Country Name (2 letter code) [AU]: <-- FR pour la France

State or Province Name (full name) [Some-State]: <-- Province ou Etat (franchement saisissez ce que vous voulez...)

Locality Name (eg, city) []: <-- Saisissez votre ville

Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Saisissez le nom de votre Organisation...

Organizational Unit Name (eg, section) []: <-- Saisissez n'importe quoi

Common Name (eg, YOUR name) []: <-- Saisissez votre nom

Email Address []: <-- Saisissez votre adresse email

Activer TLS dans vsftpd

Ajoutez ou changer les options suivantes:

nano /etc/vsftpd.conf

# Turn on SSL
ssl_enable=YES

# Allow anonymous users to use secured SSL connections
allow_anon_ssl=YES

# All non-anonymous logins are forced to use a secure SSL connection in order to
# send and receive data on data connections.
force_local_data_ssl=YES

# All non-anonymous logins are forced to use a secure SSL connection in order to send the password.
force_local_logins_ssl=YES

# Permit TLS v1 protocol connections. TLS v1 connections are preferred
ssl_tlsv1=YES

# Permit SSL v2 protocol connections. TLS v1 connections are preferred
ssl_sslv2=NO

# permit SSL v3 protocol connections. TLS v1 connections are preferred
ssl_sslv3=NO

# Disable SSL session reuse (required by WinSCP)
require_ssl_reuse=NO

# Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla)
ssl_ciphers=HIGH

# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl-vsftpd/private/vsftpd.pem

Si vous utilisez force_local_logins_ssl = YES et force_local_data_ssl = YES, seules les connexions TLS sont autorisées (ceci verrouille tous les utilisateurs avec d'anciens clients FTP qui ne sont pas pris en charge par TLS); en utilisant force_local_logins_ssl = NO et force_local_data_ssl = NO, les connexions TLS et non-TLS sont autorisées, en fonction de la prise en charge du client FTP.

Assurez-vous que vous avez également les paramètres suivants dans votre vsftpd.conf pour permettre les connexions non anonymes:

nano /etc/vsftpd.conf

# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022

Redémarrez vsftpd


service vsftpd restart

Ajoutez un utilisateur pour vsftpd

Nous allons ajouter un utilisateur Linux local auquel nous pouvons nous connecter. Je vais créer un utilisateur "Moi" avec le mot de passe "MonMotDePasse". Cet utilisateur fera parti du groupe "sftp_users"

On ajoute un groupe d'utilisateur


groupadd sftp_users

On ajoute un utilisateur


useradd Moi

On définit le mot de passe de l’utilisateur:


passwd Moi
On ajoute l’utilisateur au groupe et on lui attribut le répertoire par défaut :

usermod -g sftp_users Moi
usermod -d /var/www Moi

Se connecter au FTP avec FileZilla



filezilla-vsftpd

Vous allez avoir une alerte comme quoi votre certificat est auto-signé, rien de grave!

vsftpd certificat inconnu

Vous pouvez désormais avoir un accès FTP à votre serveur, mais attention, vous avez accès à tout le serveur, pas bon ça...Essayez pour voir...

CHROOT de l'utilisateur

On va limiter l'accès de l'utilisateur à son répertoire pour qu'il ne puisse pas accéder aux répertoires parents.

Je ne comprends pas pourquoi (expliquez moi...) mais il faut chrooter l'utilisateur quand il se connecte via FTP/TLS et via SFTP/SSH

Je ne suis pas certain mais la petite modification ci-dessous semble être utile pour chrooter l'utilisateur quand il se connecte via FTP/TLS

nano /etc/vsftpd.conf

chroot_local_user=YES

Maintenant on va chrooter le groupe de l’utilisateur dans /etc/ssh/sshd_config:

Éditez le fichier de configuration du daemon SSH /etc/ssh/sshd_config et commentez la ligne

nano /etc/ssh/sshd_config

#Subsystem sftp /usr/libexec/openssh/sftp-server

et ajoutez ceci

nano /etc/ssh/sshd_config

Subsystem sftp internal-sftp

Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h
ForceCommand internal-sftp

Le match user doit se trouver après le UsePAM. Dans le cas contraire, vous recevrez une erreur lors de la relance du service ssh.

Redémarrer le service SSH


systemctl restart sshd

Notre utilisateur Moi peut maintenant se connecter via ssh à notre serveur, mais si la connexion SFTP échoue c'est parce que le répertoire /var/www/blogs doit appartenir à root et uniquement éditable par le propriétaire


chown root:root /var/www/blogs/
chmod 777 /var/www/blogs/

Conseils

Même si vous êtes le seul utilisateur de votre serveur, vérifiez que vous êtes bien chrooté en FTP/TLS et en SFTP/SSH

VSFTPD et IPTABLES


- Pour le mode de transfert FTP actif, vous devez autoriser les connexions TCP entrantes sur le port 21 et sortantes sur le port 20

- Pour le mode de transfert FTP passif, vous devez autoriser les connexions TCP entrantes sur le port 21 et les connexions entrante sur des ports aléatoires


Donc il est possible que vous deviez rajouter ceci:

nano /etc/vsftpd.conf

pasv_enable=YES
pasv_min_port=13450
pasv_max_port=13500

Et d'ouvrir les ports dans iptables:


iptables -t filter -A INPUT -p tcp --dport 13450:13500 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 13450:13500 -j ACCEPT
Vos commentaires
Mickaelb a écrit le 23-04-2020 :

Good job


Répondre à ce(s) commentaires(s)
Pierre a écrit le 12-12-2019 :

Putain ... enfin un tutoriel qui est foutu d'expliquer correctement comment faire ... Ca marche enfin !!!! Merci :)


Répondre à ce(s) commentaires(s)
Geo a écrit le 06-12-2019 :

Bonjour, Merci pour cette article. Ma question est plus général et non spécifique à l'utilisation de vsftpd je pense : je ne comprend pas pourquoi il n'est pas nécessaire d'avoir un certificat pour se connecter au serveur ftp. on active le certificat du coté du serveur de tel sorte que lorsqu'on se connecte on a une fenêtre nous indiquant le certificat du site auquel on se connecte. Mais niveau sécurité pour le serveur, on a toujours qu'un login mot de passe à entrer. Pourquoi le client qui veut se connecter au serveur ne doit-il pas fournir un certificat lui aussi ? J'ai l'impression qu'au augmente la sécurité coté client (on s'assure de se connecter au bon serveur), mais pas coté serveur.


Répondre à ce(s) commentaires(s)
Christophe G. a écrit le 05-09-2019 :

Petite question: Si j'ai déjà un certificat SSL pour mon domaine, exemple monchezmoi.fr et que je veux l'utiliser pour le sftp et éviter l'alerte du certificat auto-signé. Est ce que je peux simplement le copier dans ce répertoire "/etc/ssl-vsftpd/private/" et changer cette ligne dans le fichier vsftpd.conf ? rsa_cert_file=/etc/ssl-vsftpd/private/MOICHEZMOI.pem


Répondre à ce(s) commentaires(s)
Gosset a écrit le 05-05-2019 :

Super travail, merci pour ce magnifique sujet qui traite le serveur FTP. Je recommande


Répondre à ce(s) commentaires(s)

Laisser un commentaire

Votre commentaire sera en attente de modération, validation NON automatique

Votre nom (obligatoire) :


Email ou site internet (facultatif) (nécessaire si vous souhaitez être prévenu d'une réponse):


Image/photo (facultatif) (JPG, JPEG, PNG ou GIF) (image de partition concernant le question par exemple):

Javascript doit être activé