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