Comment configurer vsftpd pour un utilisateur's répertoire sur Ubuntu 18.04

Introduction

FTP, abréviation de File Transfer Protocol, est un protocole réseau qui était autrefois largement utilisé pour déplacer des fichiers entre un client et un serveur. Il a depuis été remplacé par des moyens plus rapides, plus sécurisés et plus pratiques de livraison de fichiers. De nombreux internautes occasionnels s’attendent à télécharger directement depuis leur navigateur Web avec https, et les utilisateurs de ligne de commande sont plus susceptibles d’utiliser des protocoles sécurisés tels que scp ou SFTP.,

FTP est toujours utilisé pour prendre en charge les applications et les workflows hérités avec des besoins très spécifiques. Si vous avez le choix du protocole à utiliser, envisagez d’explorer les options les plus modernes. Lorsque vous avez besoin de FTP, cependant, vsftpd est un excellent choix. Optimisé pour la sécurité, les performances et la stabilité, vsftpd offre une protection solide contre de nombreux problèmes de sécurité rencontrés dans d’autres serveurs FTP et est la valeur par défaut pour de nombreuses distributions Linux.,

dans ce tutoriel, vous configurerez vsftpd pour permettre à un utilisateur de télécharger des fichiers dans son répertoire personnel en utilisant FTP avec des informations de connexion sécurisées par SSL/TLS.

prérequis

pour suivre ce tutoriel, vous aurez besoin de:

  • un serveur Ubuntu 18.04 et un utilisateur non root avec des privilèges sudo: vous pouvez en savoir plus sur la configuration d’un utilisateur avec ces privilèges dans notre Guide Configuration initiale du serveur avec Ubuntu 18.04.,

Étape 1 — Installation de vsftpd

commençons par mettre à jour notre liste de paquets et installer le démon vsftpd:

  • sudo apt update
  • sudo apt install vsftpd

lorsque l’installation est terminée, copions le fichier de configuration afin que nous puissions commencer avec une configuration vierge, div id= »48a2c8f2bc »>

avec une sauvegarde de la configuration en place, Nous sommes prêts à configurer le pare-feu.

Étape 2 — Ouverture du pare-feu

vérifions l’état du pare-feu pour voir s’il est activé., Si c’est le cas, nous veillerons à ce que le trafic FTP soit autorisé afin que les règles de pare-feu ne bloquent pas nos tests.

Vérifier l’état du pare-feu:

  • sudo ufw status

Dans ce cas, seule la SSH est autorisé par:

Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)

Vous pouvez avoir d’autres règles ou pas règles de pare-feu à tous. Puisque seul le trafic SSH est autorisé dans ce cas, nous devrons ajouter des règles pour le trafic FTP.,

ouvrons les ports 20 Et 21 pour FTP, le port 990 lorsque nous activons TLS, et les ports 40000-50000 pour la plage de ports passifs que nous prévoyons de définir dans le fichier de configuration:

  • sudo ufw allow 20/tcp
  • sudo ufw allow 21/tcp
  • sudo ufw allow 990/tcp
  • sudo ufw allow 40000:50000/tcp
  • sudo ufw status

nos règles de pare-feu devraient maintenant ressembler à ceci:

avec vsftpd installé et les ports nécessaires ouverts, passons à la création d’un utilisateur FTP dédié.,

Étape 3 — Préparation du répertoire utilisateur

Nous allons créer un utilisateur FTP dédié, mais vous avez peut-être déjà un utilisateur ayant besoin d’un accès FTP. Nous veillerons à préserver l’accès d’un utilisateur existant à ses données dans les instructions qui suivent. Malgré cela, nous vous recommandons de commencer avec un nouvel utilisateur jusqu’à ce que vous ayez configuré et testé votre configuration.

tout d’Abord, ajoutez un utilisateur de test:

  • sudo adduser sammy

Attribuer un mot de passe lorsque vous y êtes invité. N’hésitez pas à appuyer sur ENTER via les autres invites.,

FTP est généralement plus sécurisé lorsque les utilisateurs sont limités à un répertoire spécifique. vsftpd accomplit cette mission avec des chroot prisons. Lorsque chroot est activé pour les utilisateurs locaux, ils sont limités à leur répertoire personnel par défaut. Cependant, en raison de la façon dont vsftpd sécurise le répertoire, il ne doit pas être accessible en écriture par l’utilisateur. C’est très bien pour un nouvel utilisateur qui ne doit se connecter que via FTP, mais un utilisateur existant peut avoir besoin d’écrire dans son dossier personnel s’il a également accès au shell.,

dans cet exemple, plutôt que de supprimer les privilèges d’écriture du répertoire personnel, créons un répertoire ftppour servir de répertoire chrootet un répertoire files accessible en écriture pour contenir les fichiers réels.,missions:

  • sudo ls -la /home/sammy/ftp
Output
total 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..

ensuite, créons le répertoire pour les téléchargements de fichiers et attribuons la propriété à l’utilisateur:

  • sudo mkdir /home/sammy/ftp/files
  • sudo chown sammy:sammy /home/sammy/ftp/files

une vérification des autorisations sur le ftp doit renvoyer ce qui suit:

  • sudo ls -la /home/sammy/ftp

enfin, ajoutons un test.txt fichier à utiliser lorsque nous testons:

  • echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt

maintenant que nous avons Sécurisé le ftp répertoire et a permis à l’utilisateur d’accéder au files répertoire, modifions notre configuration.,

Étape 4 — Configuration de L’accès FTP

Nous prévoyons de permettre à un seul utilisateur disposant d’un compte shell local de se connecter au FTP. Les deux paramètres clés pour cela sont déjà définis dans vsftpd.conf. Commencez par ouvrir le fichier de configuration pour vérifier que les paramètres de votre configuration correspondent à celles ci-dessous:

  • sudo nano /etc/vsftpd.conf
/etc/vsftpd.conf

ensuite, permettons à l’utilisateur de télécharger des fichiers en décommentant le paramètrewrite_enable:

/etc / vsftpd.,conf
. . .write_enable=YES. . .

Nous décommenterons également lechroot pour empêcher l’utilisateur connecté au FTP d’accéder à des fichiers ou commandes en dehors de l’arborescence des répertoires:

/etc/vsftpd.conf
. . .chroot_local_user=YES. . .

ajoutons également un user_sub_tokenpour insérer le nom d’utilisateur dans notre chemin local_root directory afin que notre configuration fonctionne pour cet utilisateur et tous les futurs utilisateurs supplémentaires. Ajouter ces paramètres n’importe où dans le fichier:

/etc/vsftpd.,conf
. . .user_sub_token=$USERlocal_root=/home/$USER/ftp

limitons également la plage de ports pouvant être utilisés pour le FTP passif pour s’assurer que suffisamment de connexions sont disponibles:

/etc / vsftpd.conf
. . .pasv_min_port=40000pasv_max_port=50000

remarque: à l’étape 2, nous avons ouvert les ports que nous avons définis ici pour la plage de ports passifs. Si vous modifiez les valeurs, veillez à mettre à jour les paramètres de votre pare-feu.

Pour permettre l’accès FTP au cas par cas, nous allons définir la configuration afin que les utilisateurs aient accès uniquement lorsqu’ils sont explicitement ajoutés à une liste, plutôt que par défaut:

/etc/vsftpd.,conf
. . .userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO

userlist_deny bascule la logique: lorsqu’elle est définie sur YES, les utilisateurs de la liste se voient refuser L’accès FTP. Lorsqu’il est défini sur NO, seuls les utilisateurs de la liste sont autorisés à y accéder.

Lorsque vous avez terminé les modifications, enregistrez le fichier et quittez l’éditeur.

enfin, ajoutons notre utilisateur à /etc/vsftpd.userlist., Utiliser la balise -a drapeau à ajouter dans le fichier:

  • echo "sammy" | sudo tee -a /etc/vsftpd.userlist

Vérifiez qu’il a été ajouté comme prévu:

  • cat /etc/vsftpd.userlist
Output
sammy

Redémarrer le démon à charge de les changements de configuration:

  • sudo systemctl restart vsftpd

Avec la configuration en place, passons aux tests d’accès FTP.

Étape 5 — Test de L’accès FTP

Nous avons configuré le serveur pour autoriser uniquement l’utilisateursammy à se connecter via FTP. Assurons-nous que cela fonctionne comme prévu.,

les utilisateurs anonymes ne doivent pas se connecter: Nous avons désactivé l’accès anonyme. Testons cela en essayant de se connecter anonymement. Si notre configuration est correctement configurée, les utilisateurs anonymes doivent se voir refuser l’autorisation. Ouvrez une autre fenêtre de terminal et exécutez la commande suivante. Assurez-vous de remplacer 203.0.113.0 par l’adresse IP publique de votre serveur:

  • ftp -p 203.0.113.0

fermez la connexion:

  • bye

Les utilisateurs autres que sammy ne, essayons de nous connecter en tant qu’utilisateur sudo.,> devrait pouvoir se connecter, lire et écrire des fichiers: assurons-nous que notre utilisateur désigné peut se connecter:

  • ftp -p 203.0.113.0

changeons dans le répertoire files et utilisons la commande get pour transférer le fichier de test que nous avons créé précédemment sur notre machine locale:

  • cd files
  • get test.txt

ensuite, chargeons le fichier avec un nouveau nom pour tester les autorisations d’écriture:

  • put test.txt upload.txt

fermez la connexion:

  • bye

maintenant que nous avons testé notre configuration, prenons des mesures pour sécuriser davantage notre serveur.,

Étape 6 — sécurisation des Transactions

puisque FTP ne crypte aucune donnée en transit, y compris les informations d’identification de l’utilisateur, nous allons activer TLS / SSL pour fournir ce cryptage. La première étape consiste à créer les certificats SSL à utiliser avec vsftpd.

utilisonsopenssl pour créer un nouveau certificat et utilisons l’indicateur-days pour le rendre valide pendant un an. Dans la même commande, nous allons ajouter une clé RSA privée de 2048 bits., En définissant les indicateurs -keyout Et -out sur la même valeur, la clé privée et le certificat seront situés dans le même fichier:

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

Vous serez invité à fournir les informations d’adresse pour votre certificat., Remplacez vos propres informations par les valeurs en surbrillance ci-dessous:

pour plus d’informations sur les indicateurs de certificat, consultez OpenSSL Essentials: utilisation de certificats SSL, clés privées et CSR

Une fois les certificats créés, Ouvrez à nouveau le fichier de configuration vsftpd:

  • sudo nano /etc/vsftpd.conf

ommencez parrsa_. Commentez – les pour qu’ils ressemblent à ceci:

/etc/vsftpd.,conf
. . .# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key. . .

ci-Dessous, ajoutez les lignes suivantes qui pointent vers le certificat et la clé privée que nous venons de créer:

/etc/vsftpd.conf
. . .rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem. . .

Après cela, nous forcerons L’utilisation de SSL, ce qui empêchera les clients qui ne peuvent pas gérer TLS de se connecter. Ceci est nécessaire pour s’assurer que tout le trafic est crypté, mais cela peut forcer votre utilisateur FTP à changer de client. Vous pouvez utiliser le fichier ssl_enableenYES:

/etc / vsftpd.,conf
. . .ssl_enable=YES. . .

Après cela, ajoutez les lignes suivantes pour refuser explicitement les connexions anonymes via SSL et pour Exiger SSL pour le transfert de données et les connexions:

/etc / vsftpd.conf
. . .allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES. . .

Après cela, configurez le serveur pour utiliser TLS, le préféré successeur de SSL, en ajoutant les lignes suivantes:

/etc/vsftpd.conf
. . .ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO. . .

Enfin, nous allons ajouter deux autres options. Tout d’abord, nous n’aurons pas besoin de réutilisation SSL car cela peut casser de nombreux clients FTP., Nous aurons besoin de suites de chiffrement” élevées », ce qui signifie actuellement des longueurs de clé égales ou supérieures à 128 bits:

/etc/vsftpd.conf
. . .require_ssl_reuse=NOssl_ciphers=HIGH. . .

Le fini de la section du fichier devrait ressembler à ceci:

/etc/vsftpd.conf

Lorsque vous avez terminé, enregistrez et fermez le fichier.

redémarrez le serveur pour que les modifications prennent effet:

  • sudo systemctl restart vsftpd

à ce stade, nous ne pourrons plus nous connecter avec un client de ligne de commande non sécurisé., Si nous essayions, nous verrions quelque chose comme:

ensuite, vérifions que nous pouvons nous connecter en utilisant un client qui prend en charge TLS.

Étape 7 — Test de TLS avec FileZilla

La plupart des clients FTP modernes peuvent être configurés pour utiliser le cryptage TLS. Nous allons démontrer comment se connecter avec FileZilla en raison de son support multiplateforme. Consultez la documentation pour les autres clients.

lorsque vous ouvrez FileZilla pour la première fois, trouvez l’icône du Gestionnaire de Site juste au-dessus du mot hôte, l’icône la plus à gauche sur la ligne supérieure. Cliquez sur:

Une nouvelle fenêtre s’ouvre., Cliquez sur le bouton nouveau Site dans le coin inférieur droit:


sous Mes Sites, une nouvelle icône avec les mots nouveau site apparaîtra. Vous pouvez le nommer maintenant ou revenir plus tard et utiliser le bouton Renommer.

Remplissez le champ Hôte avec le nom ou l’adresse IP. Dans le menu déroulant cryptage, sélectionnez Exiger un FTP explicite sur TLS.

pour le type D’ouverture de session, sélectionnez Demander un mot de passe. Remplissez votre utilisateur FTP dans le champ Utilisateur:

Cliquez sur se Connecter à la partie inférieure de l’interface., Il vous sera demandé le mot de passe utilisateur:

Cliquez sur OK pour vous connecter. Vous devriez maintenant être connecté à votre serveur avec le cryptage TLS / SSL.,ficate qui ressemble à ceci:

lorsque vous avez accepté le certificat, double-cliquez sur le dossier files et faites glisser upload.txt vers la gauche pour confirmer que vous pouvez télécharger des fichiers:

lorsque vous avez fait cela, faites un clic droit sur la copie locale, renommez-la en upload-tls.txt et faites-la glisser vers le serveur pour confirmer que vous pouvez télécharger des fichiers:

Vous avez maintenant confirmé que fichiers avec SSL/TLS activé.,

Étape 8 — désactivation de L’accès au Shell (facultatif)

Si vous ne pouvez pas utiliser TLS en raison des exigences du client, vous pouvez gagner en sécurité en désactivant la capacité de l’utilisateur FTP à se connecter autrement. Un moyen relativement simple de l’empêcher est de créer un shell personnalisé. Cela ne fournira aucun cryptage, mais cela limitera l’accès d’un compte compromis aux fichiers accessibles par FTP.,

tout d’Abord, ouvrez un fichier appelé ftponly dans le bin répertoire:

  • sudo nano /bin/ftponly

Ajouter un message indiquant à l’utilisateur pourquoi ils sont incapables de se connecter:

/bin/ftponly
#!/bin/shecho "This account is limited to FTP access only."

Enregistrez le fichier et quittez votre éditeur.,Modifier les autorisations pour rendre le fichier exécutable:

  • sudo chmod a+x /bin/ftponly

Ouvrir la liste de validité coques:

  • sudo nano /etc/shells

Au fond d’ajouter:

/etc/shells
. . ./bin/ftponly

mettre à Jour le shell de l’utilisateur avec la commande suivante:

  • sudo usermod sammy -s /bin/ftponly

Maintenant, essayez de vous connecter à votre serveur sammy:

Vous devriez voir quelque chose comme:

Output
This account is limited to FTP access only.Connection to 203.0.113.0 closed.

Cela confirme que l’utilisateur n’a plus ssh pour le serveur, et est limité à un accès FTP.,

Conclusion

dans ce tutoriel, nous avons couvert la configuration de FTP pour les utilisateurs ayant un compte local. Si vous devez utiliser une source d’authentification externe, vous pouvez examiner la prise en charge des utilisateurs virtuels par vsftpd. Cela offre un riche ensemble d’options grâce à L’utilisation de PAM, les Modules D’authentification enfichables, et est un bon choix si vous gérez des utilisateurs dans un autre système tel que LDAP ou Kerberos.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *