Recherche de site Web

Comment configurer un serveur FTP sur Debian 9 Stretch Linux


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.

Système d’exploitation et versions logicielles

  • Système d’exploitation : – Debian 9 Stretch
  • Logiciel : – vsFTPd version 3.0.3

Exigences

Accès privilégié à

Difficulté

DOULEUR MOYENNE

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 la commande sudo
  • $ – nécessite que des 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 à l’aide du démon vsFTPd. Il abordera également diverses configurations pour permettre un 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 nous l’avons déjà mentionné, le fichier de configuration ci-dessus n’accordera un accès en lecture seule qu’à tout utilisateur du système répertorié dans le fichier /etc/passwd. Utilisez la commande ftp et essayez 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 des éléments suivants :


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 la commande ftp 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

À l’heure actuelle, notre serveur FTP permet l’accès à n’importe quel utilisateur du système défini dans le fichier /etc/passwd. Afin de permettre à certains utilisateurs de 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) aura accès au FTP refusé tandis que tous les autres utilisateurs du système pourront se connecter. Créons une nouvelle liste d’utilisateurs /etc/vsftpd.userlist 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 la commande ftp pour confirmer l’accès refusé au serveur FTP pour l’utilisateur linuxconfig :


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. Ci-dessous se trouve notre fichier de configuration /etc/vsftpd.conf 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

Autoriser l’anonyme

À ce stade, nous allons également autoriser l’accès en lecture seule par des utilisateurs anonymes. Commençons par créer un nouveau répertoire qui sera utilisé comme répertoire racine pour un utilisateur anonyme, 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 le fichier de configuration /etc/vsftpd.conf pour définir le répertoire personnel anonyme et l’accès anonyme :


anon_root=/var/ftp
anonymous_enable=YES

Si vous le souhaitez, ajoutez la ligne no_anon_password=YES pour indiquer à vsFTPd de permettre aux utilisateurs anonymes de se connecter automatiquement sans mot de passe. Puisque nous avons maintenant défini la liste d’utilisateurs, nous devons également ajouter l’utilisateur anonyme à la liste :


echo anonymous >> /etc/vsftpd.userlist
cat /etc/vsftpd.userlist 
linuxconfig
anonymous

Comme d’habitude, redémarrez votre serveur FTP et effectuez une validité de votre configuration actuelle :


systemctl restart vsftpd

Testez 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 à un utilisateur anonyme de télécharger des fichiers et de créer de nouveaux répertoires et plus encore. Pour ce faire, créez un nouveau téléchargement de répertoire dans le répertoire /var/ftp :


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 final de vsFTPd :


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

Appendice

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 répertoire anon_root 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

Articles connexes: