Vsftpd est l'acronyme de Very Secure FTP Daemon :c'est l'un des serveurs ftp les plus utilisés sous Linux et d'autres systèmes d'exploitation de type Unix. Il est open source et publié sous la licence GPL, et prend en charge les utilisateurs virtuels et SSL pour le cryptage des données. Dans ce tutoriel, nous verrons comment l'installer et le configurer sous Linux.
Dans ce didacticiel, vous apprendrez :
- Comment installer vsftpd sur Debian 10
- Comment configurer vsftpd
- Comment configurer l'utilisation anonyme
- Comment configurer la connexion avec des utilisateurs locaux
- Comment configurer des utilisateurs virtuels
- Comment configurer ufw pour autoriser le trafic entrant
Comment configurer vsftpd sur Debian
Configuration logicielle requise et conventions utilisées
Catégorie | Exigences, conventions ou version du logiciel utilisée |
---|---|
Système | Debian 10 (Buster) |
Logiciel | vsftpd, openssl, libpam-pwdfile |
Autre | Autorisations root pour installer et configurer vsftpd |
Conventions | # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo command$ - nécessite que les commandes linux données soient exécutées en tant qu'utilisateur normal non privilégié |
Installation
Vsftpd est disponible dans les dépôts officiels de Debian, donc pour l'installer, nous pouvons utiliser notre gestionnaire de paquets préféré; il s'agit simplement de synchroniser les référentiels et d'installer le package. Les deux choses peuvent être accomplies en
exécutant les commandes suivantes :
$ sudo apt-get update && sudo apt-get install vsftpd
Quelques secondes et le paquet sera installé sur notre système Debian. Les scripts d'installation inclus dans le package se chargeront également de démarrer le vsftpd service automatiquement, mais nous devons nous rappeler de redémarrer ou de recharger le service chaque fois que nous modifions le fichier de configuration. Pouvoir utiliser les utilisateurs virtuels fonctionnalité fournie par le vsftpd, nous devons également installer un autre package :
$ sudo apt-get install libpam-pwdfile
Nous verrons son utilisation dans la partie dédiée de ce tutoriel.
Une fois les packages nécessaires installés, nous pouvons continuer et configurer vsftpd :nous verrons comment le faire dans la prochaine section de ce tutoriel.
Configuration de Vsftpd
Le fichier de configuration vsftpd est /etc/vsftpd.conf
. Si nous l'ouvrons, nous pouvons voir les différentes directives déjà contenues. Voyons quels sont les plus pertinents pour les cas les plus courants.
Activer la connexion anonyme
L'accès non authentifié au serveur, en tant qu'utilisateurs anonymes, est désactivé par défaut. Pour l'activer, nous devons utiliser le anonymous_enable
directive, qui sur le fichier de configuration est placé à la ligne 25
. Tout ce que nous avons à faire est de le mettre sur YES
:
doit remplacer l'instruction par :
anonymous_enable=YES
Une autre directive que nous pourrions vouloir changer est celle qui nous permet de définir un répertoire dans lequel vsftpd essaiera de naviguer après un accès anonyme. La directive qui nous permet de contrôler ce paramètre est anon_root
. Disons que nous voulons qu'un utilisateur anonyme accède au /srv/ftp
répertoire par défaut, on écrirait :
anon_root=/srv/ftp
Toutes les connexions anonymes sont mappées en interne à un utilisateur désigné, qui, par défaut, est ftp
. Pour changer ce mappage, nous devons utiliser le ftp_username
option et définissez-le sur le nom de l'utilisateur auquel nous voulons mapper les utilisateurs anonymes.
Par défaut, un utilisateur anonyme ne sera pas autorisé à écrire quoi que ce soit sur le serveur, pour des raisons de sécurité évidentes. Si vous souhaitez modifier ce comportement (non recommandé), il y a peu d'options qui doivent être modifiées. Tout d'abord le général write_enable
directive doit être définie sur YES
. Cette directive est commentée à la ligne 31
du fichier de configuration, il vous suffit donc de supprimer le commentaire.
# Uncomment this to enable any form of FTP write command. write_enable=YES
Une fois cette directive activée, il ne nous reste plus qu'à travailler sur deux autres options :anon_upload_enable
et anon_mkdir_write_enable
. Lorsque le premier est défini sur YES
un utilisateur anonyme pourra télécharger files, mais seulement si l'utilisateur sur lequel il est mappé (comme nous l'avons dit, ftp, par défaut) a des autorisations d'écriture sur le répertoire de destination. Pour activer cette option, il suffit de supprimer le commentaire de la ligne 40
du fichier de configuration :
# Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. anon_upload_enable=YES
Le anon_mkdir_write_enable
directive, à la place, lorsqu'elle est définie sur YES
permet aux utilisateurs anonymes de créer de nouveaux répertoires sur le serveur, dans les mêmes conditions que nous avons vues ci-dessus (l'utilisateur sous-jacent sur le serveur doit avoir les droits d'écriture sur le répertoire parent). La directive est située à la ligne 44
du fichier de configuration :
# Uncomment this if you want the anonymous FTP user to be able to create # new directories. anon_mkdir_write_enable=YES
Encore une fois, puisque la variable est déjà définie sur YES
, pour qu'il soit pertinent, il suffit d'en supprimer le commentaire.
Pour permettre aux utilisateurs anonymes d'effectuer également d'autres types d'opérations d'écriture, comme par exemple renommer ou supprimer un répertoire, nous devons utiliser une autre directive qui n'est pas présente dans le fichier de configuration, anon_other_write_enable
et réglez-le sur YES
si celui ci-dessus est notre comportement souhaité :
anon_other_write_enable=YES
Connexions authentifiées
Pour permettre aux utilisateurs du système local d'accéder au serveur ftp avec leur mot de passe système, le local_enable
directive doit être définie sur YES
:c'est la valeur par défaut sur le système Debian. La directive se trouve à la ligne 28
du fichier de configuration du démon
:
# Uncomment this to allow local users to log in. local_enable=YES
Par défaut, lorsqu'un utilisateur local s'authentifie avec succès, il aura son propre répertoire personnel en tant que root. Il est cependant possible de spécifier un point de départ alternatif en utilisant le local_root
directif. Cette directive n'est pas présente dans le fichier de configuration, nous devons donc l'ajouter si nous voulons l'utiliser. Pour définir le /srv/ftp
répertoire comme racine locale, par exemple, nous écrirons :
local_root=/srv/ftp
Chrooter les utilisateurs locaux
Par mesure de sécurité, il est possible de chrooter chaque utilisateur authentifié dans son propre répertoire personnel. Pour accomplir cette tâche, nous devons utiliser le chroot_local_user
instruction :
chroot_local_user=YES
Lorsque cette fonctionnalité est activée, il est possible de spécifier une liste d'exclusions (une liste d'utilisateurs qui ne doivent pas être chrootés) à l'aide des directives suivantes :
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
La première directive est nécessaire pour activer la fonctionnalité, l'autre pour spécifier l'emplacement du fichier contenant la liste d'exclusion . Le fichier doit être créé s'il n'existe pas déjà, sinon la connexion échouera.
Par mesure de sécurité, lorsqu'un utilisateur est chrooté, il ne doit pas pouvoir écrire dans le répertoire de niveau supérieur du chroot. Si tel est le cas, dans les versions les plus récentes de vsftpd, un utilisateur ne pourra pas se connecter et le serveur répondra par le message suivant :
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Ce problème peut être résolu essentiellement de deux manières. Cette première consiste évidemment à fixer les permissions , en refusant à l'utilisateur l'accès en écriture au répertoire de niveau supérieur du chroot et en le laissant écrire uniquement sur les sous-répertoires.
La deuxième façon de résoudre le problème, si vous ne vous souciez pas des implications possibles pour la sécurité, est de contourner cette restriction , en utilisant la directive suivante :
allow_writeable_chroot=YES
En parlant d'autorisations, il est important de garder à l'esprit que l'umask par défaut pour l'utilisateur local est défini sur 077
. Si ce paramètre est jugé trop restrictif, il est possible de le modifier à l'aide du local_umask
directif. Cette directive est commentée à la ligne 35
du fichier de configuration :
# 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
Connexion avec des utilisateurs virtuels
Une fonctionnalité intéressante offerte par vsftpd est la possibilité de se connecter en utilisant des utilisateurs virtuels . Un utilisateur virtuel est un utilisateur qui n'existe pas vraiment sur le système, mais uniquement dans le contexte de l'application sftpd. Pour activer cette fonctionnalité, nous devons utiliser la directive suivante :
guest_enable=YES
Lorsque la fonctionnalité est active, toutes les connexions non anonymes (donc même les utilisateurs réels/locaux) sont mappées à l'utilisateur spécifié avec le guest_username
directive, qui par défaut, comme nous l'avons déjà vu est ftp .
L'étape suivante consiste à créer un fichier contenant les noms d'utilisateur et les mots de passe des utilisateurs virtuels. Pour générer un mot de passe haché, nous pouvons utiliser openssl
et lancez la commande suivante :
$ openssl passwd -1 Password: Verifying - Password: $1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
Le mot de passe commande de openssl est utilisé pour générer des mots de passe hachés (md5). Dans l'exemple ci-dessus, on nous a demandé le mot de passe à hacher et sa confirmation. Enfin, le mot de passe haché est généré et affiché à l'écran.
Le nom d'utilisateur, ainsi que le mot de passe, doivent être placés dans un fichier, disons qu'il s'agit de /etc/virtual_users.pwd
, au format suivant :
username:hashed_password
Donc, en supposant que notre utilisateur virtuel s'appelle "linuxconfig", nous écrirons :
linuxconfig:$1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
L'opération doit être répétée pour chaque utilisateur virtuel que nous voulons configurer.
Maintenant, nous devons créer le pam service qui sera utilisé par vsftpd pour authentifier les utilisateurs virtuels. Nous nommerons le fichier vsftpd_virtual
et placez-le dans le /etc/pam.d
annuaire. Son contenu sera le suivant :
#%PAM-1.0 auth required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_users.pwd account required pam_permit.so
Comme vous pouvez le voir, nous avons spécifié le chemin du fichier contenant le nom d'utilisateur et les mots de passe des utilisateurs virtuels dans la première ligne. Tout ce que nous avons à faire, maintenant, est de demander à vsftpd d'utiliser ce "service" pam. Nous pouvons le faire avec le pam_service_name
instruction :
pam_service_name=vsftpd_virtual
À ce stade, nous pouvons enregistrer le fichier de configuration, redémarrer le démon et vérifier que nous pouvons nous connecter avec l'utilisateur virtuel que nous venons de créer.
Activation de la prise en charge SSL pour le chiffrement des données
Par défaut, le support SSL est désactivé sur vsftpd, donc les données transférées ne seront pas cryptées. Pour activer le support SSL, nous devons utiliser les directives suivantes, situées aux lignes 149
à 151
du fichier de configuration :
# This option specifies the location of the RSA certificate to use for SSL # encrypted connections. rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=YES
La première directive, rsa_cert_file
est utilisé pour indiquer le chemin du certificat RSA à utiliser pour les connexions cryptées SSL. La seconde, rsa_private_key
, à la place, est utilisé pour spécifier l'emplacement de la clé privée RSA. Enfin, le ssl_enable
est utilisée pour activer l'utilisation du cryptage SSL.
L'exemple utilise le /etc/ssl/certs/ssl-cert-snakeoil.pem
et /etc/ssl/private/ssl-cert-snakeoil.key
fichiers, mais vous voudrez presque certainement en utiliser un dédié.
Spécification de la plage de ports pour le mode passif
Le mode passif FTP est la valeur par défaut sur une nouvelle installation de vsftpd, mais si nous voulons l'activer explicitement, nous pouvons utiliser la directive suivante :
# Set to NO if you want to disallow the PASV method of obtaining a data connection # (passive mode). Default: YES pasv_enable=YES
Lorsque le serveur fonctionne en mode passif , il envoie au client une adresse IP et un port qu'il doit écouter pour la connexion. Ces ports sont par défaut sélectionnés au hasard, cependant, puisque nous devons utiliser un pare-feu sur notre serveur, nous devons savoir quels ports nous devons autoriser le trafic. La plage de ports à utiliser peut être spécifiée avec le pasv_min_port
et pasv_max_port
directives, par exemple :
# The minimum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. pasv_min_port=10090 # The maximum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. Default: 0 (use any port) pasv_max_port=10100
Avec la configuration suivante, le serveur utilisera une plage de ports allant de 10090
à 10100
.
Configuration du pare-feu
Pour que notre serveur vsftpd fonctionne correctement, nous devons autoriser le trafic via les ports nécessaires, certains nous devons configurer les règles appropriées pour notre pare-feu. Dans ce tutoriel, je supposerai l'utilisation de l'ufw gestionnaire de pare-feu (pare-feu simple).
Le premier port que nous voulons autoriser au trafic est le port 21
, qui est le port standard utilisé par le protocole FTP :
$ sudo ufw allow in 21/tcp
Dans un deuxième temps, nous devons autoriser le trafic entrant via la plage de ports spécifiée que nous avons configurée dans la section précédente. Pour spécifier une plage de ports que nous pouvons exécuter :
$ sudo ufw allow in 10090:10100/tcp
Conclusion
Dans cet article, nous avons vu comment installer et configurer vsftpd sur Debian 10 Buster. Nous avons vu comment configurer l'utilisation anonyme et l'utilisation des utilisateurs locaux, et comment tirer parti des utilisateurs virtuels fonctionnalité fournie par le service. Étant donné que FTP ne fournit pas de cryptage des données, nous avons vu comment activer la prise en charge SSL et enfin comment configurer le pare-feu pour autoriser le trafic entrant via les ports nécessaires. Pour une liste complète des directives possibles pouvant être utilisées dans le fichier de configuration vsftpd, veuillez consulter le vsftpd.conf page de manuel (VSFTPD.CONF(5)). Vous voulez savoir comment travailler par programmation avec un serveur FTP ? Jetez un œil à notre article sur Comment se connecter à un serveur FTP en utilisant python.