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...
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:
# 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:
# 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
usermod -g sftp_users Moi
usermod -d /var/www Moi
Se connecter au FTP avec FileZilla
Vous allez avoir une alerte comme quoi votre certificat est auto-signé, rien de grave!
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
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
#Subsystem sftp /usr/libexec/openssh/sftp-server
et ajoutez ceci
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:
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
Good job
Répondre à ce(s) commentaires(s)