Objectif
L'objectif est d'installer et de configurer un serveur FTP sur Debian 9 Stretch Linux permettant un accès utilisateur anonyme ou local.
Versions du système d'exploitation et du logiciel
- Système d'exploitation : – Étirement de Debian 9
- Logiciel : – vsFTPd version 3.0.3
Exigences
Accès privilégié à
Difficulté
MOYEN
Congrès
- # - 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
commande - $ - nécessite que les commandes linux données soient exécutées en tant qu'utilisateur régulier non privilégié
Instructions
Le tutoriel suivant explique comment installer et configurer le serveur FTP en utilisant vsFTPd
démon. Il abordera également diverses configurations pour permettre l'accès en écriture ou en lecture seule aux utilisateurs anonymes ainsi qu'aux utilisateurs locaux.
Installation de vsFTPd
Commençons par l'installation du serveur vsFPTd et du client FTP :
# apt install vsftpd ftp
Par défaut, le serveur vsFTPd est configuré pour permettre aux utilisateurs du système d'accéder à leurs répertoires personnels avec un accès en lecture seule. Ce qui suit est un fichier de configuration vsFTPd par défaut /etc/vsftpd.conf
:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO
Comme déjà mentionné, le fichier de configuration ci-dessus n'accordera qu'un accès en lecture seule à tout utilisateur système répertorié dans /etc/passwd
dossier. Utiliser ftp
commande et tentez de vous connecter en utilisant le nom d'utilisateur et le mot de passe de l'un des utilisateurs du système local :
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 550 Permission denied.
Si vous n'avez besoin que d'un accès en lecture seule pour vos utilisateurs locaux, vous avez terminé.
Autoriser l'accès en écriture de l'utilisateur
Pour ajouter un accès en écriture pour tous les utilisateurs locaux du système, décommentez ou ajoutez la strophe suivante write_enable=YES
. Le nouveau fichier de configuration se compose de :
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES
Ensuite, redémarrez votre vsFTPd :
# systemctl restart vsftpd
Effectuez un nouveau test avec ftp
commande pour confirmer l'accès en écriture :
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 150 Ok to send data. 226 Transfer complete. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 1000 1000 0 Jun 07 12:45 FILE.TXT 226 Directory send OK.
Autoriser uniquement des utilisateurs spécifiques
Pour le moment, notre serveur FTP autorise l'accès à tout utilisateur système défini dans /etc/passwd
dossier. Afin de permettre uniquement à des utilisateurs spécifiques de pouvoir se connecter, nous pouvons inclure les lignes suivantes dans notre fichier de configuration :
userlist_file=/etc/vsftpd.userlist userlist_enable=YES
Ce qui précède activera une liste d'utilisateurs prédéfinie où tout utilisateur répertorié dans /etc/vsftpd.userlist
(un nom d'utilisateur par ligne) se verra refuser l'accès au FTP tandis que tous les autres utilisateurs du système pourront se connecter. Créons un nouveau /etc/vsftpd.userlist
liste d'utilisateurs composée d'un seul utilisateur linuxconfig
:
# echo linuxconfig > /etc/vsftpd.userlist
Redémarrez le serveur vsFTPd :
# systemctl restart vsftpd
Effectuez un nouveau test avec ftp
commande pour confirmer l'accès refusé au serveur FTP pour linuxconfig
utilisateur :
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 530 Permission denied. Login failed. ftp>
Cependant, si vous devez pouvoir vous connecter uniquement avec les utilisateurs définis dans /etc/vsftpd.userlist
, ajoutez l'option de configuration suivante userlist_deny=NO
dans votre fichier de configuration vsFTPd /etc/vsftpd.conf
. Vous trouverez ci-dessous notre /etc/vsftpd.conf
actuel fichier de configuration :
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO
Autoriser les anonymes
À ce stade, nous allons également autoriser l'accès en lecture seule aux utilisateurs anonymes. Commençons par créer un nouveau répertoire qui sera utilisé comme répertoire racine pour les utilisateurs anonymes, par exemple. /var/ftp
. À des fins de test, nous pouvons également placer un fichier de test arbitraire dans /var/ftp
:
# mkdir /var/ftp/ # chmod 555 /var/ftp/ # chown ftp.ftp /var/ftp/ # touch /var/ftp/ANONYMOUS.TXT
De plus, incluez les lignes suivantes dans /etc/vsftpd.conf
fichier de configuration pour définir le répertoire personnel anonyme et l'accès anonyme :
anon_root=/var/ftp anonymous_enable=YES
Ajoutez éventuellement no_anon_password=YES
ligne pour demander à vsFTPd d'autoriser l'utilisateur anonyme à se connecter automatiquement sans le mot de passe. Puisque nous avons maintenant défini la liste des utilisateurs, nous devons également ajouter le anonymous
utilisateur à la liste :
# echo anonymous >> /etc/vsftpd.userlist # cat /etc/vsftpd.userlist linuxconfig anonymous
Comme d'habitude redémarrez votre serveur FTP et effectuez une validation de votre configuration actuelle :
# systemctl restart vsftpd
Tester la connexion anonyme :
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 07 13:29 ANONYMOUS.TXT 226 Directory send OK. ftp>
Vous trouverez ci-dessous notre fichier de configuration vsFTPd actuel :
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO anon_root=/var/ftp anonymous_enable=YES no_anon_password=YES
Activer l'accès en écriture anonyme
Ensuite, permettons à l'utilisateur anonyme de télécharger des fichiers et de créer de nouveaux répertoires et plus encore. Pour cela, créez un nouveau répertoire upload
dans le /var/ftp
répertoire :
# mkdir /var/ftp/upload # chown ftp.ftp /var/ftp/upload/
Ensuite, ajoutez les lignes suivantes dans votre fichier de configuration vsFTPd :
anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES
Redémarrez votre serveur :
# systemctl restart vsftpd
Après le redémarrage, l'utilisateur anonyme pourra télécharger des fichiers, créer des répertoires, renommer des fichiers :
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 07 13:29 ANONYMOUS.TXT drwxr-xr-x 2 108 112 4096 Jun 07 13:57 upload 226 Directory send OK. ftp> cd upload 250 Directory successfully changed. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 150 Ok to send data. 226 Transfer complete. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 108 112 0 Jun 07 13:57 FILE.TXT 226 Directory send OK. ftp> rename FILE.TXT NEW.TXT 350 Ready for RNTO. 250 Rename successful. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 108 112 0 Jun 07 13:57 NEW.TXT 226 Directory send OK. ftp>
Vous trouverez ci-dessous notre fichier de configuration vsFTPd final :
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO anon_root=/var/ftp anonymous_enable=YES no_anon_password=YES anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES
Annexe
Message d'erreur :
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed. ftp>
Ce qui précède indique que votre anon_root
répertoire est accessible en écriture. La solution est de le rendre en lecture seule. Exemple :
# chmod 555 /var/ftp
Vous pouvez également essayer d'ajouter la ligne suivante dans votre fichier de configuration vsFTPd :
allow_writeable_chroot=YES