Installer un serveur FTP avec VsFTPd sous CentOS

FTPCet article décrit la mise en place d’un serveur FTP avec VsFTPd (Very Secure FTP Daemon) sur un serveur de réseau local tournant sous CentOS. FTP a été pendant longtemps la manière la plus simple pour échanger des fichiers sur Internet. Même si le protocole reste encore extrêmement populaire – notamment dans le cadre des hébergements web mutualisés – on peut considérer qu’il est obsolète, au vu des considérations de sécurité comme les mots de passe qui transitent en clair.

La raison pour laquelle je le présente quand-même ici, c’est que je m’en sers toujours dans un contexte bien précis, en combinaison avec Ghost4Linux, pour stocker l’image Ghost d’un poste client comme celui d’une salle informatique dans une école. Ghost4Linux requiert un serveur FTP local pour stocker une image ISO, et c’est donc ce que nous allons mettre en place. Sous CentOS, nous avons le choix entre ProFTPd et VsFTPd, et c’est ce dernier que nous allons utiliser.

Prérequis

Le pare-feu nécessite une configuration un peu particulière avec le protocole FTP. Pour permettre l’accès au serveur, nous devons faire deux choses.

  • ouvrir le port 21 en TCP
  • charger le module nf_conntrack_ftp

Voici à quoi cela ressemble concrètement dans mon script de pare-feu.

...
IPT=/usr/sbin/iptables
MOD=/usr/sbin/modprobe
...
# FTP
$MOD nf_conntrack_ftp
$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 21 -j ACCEPT
...

Notons que dans notre configuration spécifique, SELinux ne nécessite aucune intervention de notre part.

Installation

Le serveur VsFTPd est fourni par les dépôts officiels de Red Hat et de CentOS.

# yum install vsftpd

Création d’un utilisateur

Je vais créer un utilisateur install pour mon serveur local d’images Ghost. Cet utilisateur n’est pas censé se connecter directement au système. Les images Ghost seront stockées en-dessous de /srv/ftp/install, le répertoire utilisateur correspondant que je dois créer au préalable.

# mkdir -pv -m 0770 /srv/ftp/install
mkdir: created directory ‘/srv/ftp’
mkdir: created directory ‘/srv/ftp/install’
# useradd -c "G4L User" -d /srv/ftp/install -s /sbin/nologin install
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
# chown -R install:install /srv/ftp/install/
# passwd install
Changing password for user install.
New password: **********
Retype new password: **********
passwd: all authentication tokens updated successfully.

Configuration du serveur

La configuration de VsFTPd s’effectue dans le fichier /etc/vsftpd/vsftpd.conf. Avant d’aller plus loin, nous allons sauvegarder la configuration par défaut.

# cd /etc/vsftpd/
# cp vsftpd.conf vsftpd.conf.orig

À partir de là, nous allons modifier ou ajouter quelques directives. Pour commencer, on va désactiver les connexions anonymes.

anonymous_enable=NO

Ensuite, on va descendre vers la fin du fichier et définir la configuration de notre utilisateur.

chroot_local_user=YES
userlist_enable=YES
userlist_deny=NO
check_shell=NO
userlist_file=/etc/vsftpd/vsftpd.user_list
allow_writeable_chroot=YES

Cette dernière stance mérite quelques explications.

  • La directive chroot_local_user=YES interdit aux utilisateurs de quitter l’arborescence de leur répertoire utilisateur pour se balader un peu partout dans le système.
  • La directive userlist_enable=YES active une liste d’utilisateurs.
  • Dans la configuration par défaut, la liste spécifie les utilisateurs auxquels on interdit l’accès au serveur. Nous allons faire le contraire avec userlist_deny=NO et créer une liste qui contiendra un seul utilisateur autorisé.
  • La directive check_shell=NO est nécessaire lorsqu’un utilisateur doit pouvoir se connecter alors même qu’il ne dispose d’aucun shell de connexion.
  • Le fichier spécifié par la directive userlist_file contiendra la liste avec les utilisateurs autorisés à se connecter.

Les listings récursifs sont autorisés.

ls_recurse_enable=YES

Notre serveur utilise uniquement l’IPv4, ce que nous allons préciser ici.

listen=YES
listen_ipv6=NO

Un peu plus bas, on pourra supprimer le doublon userlist_enable=YES et désactiver l’utilisation des encapsuleurs TCP.

tcp_wrappers=NO

Il ne reste plus qu’à créer le fichier /etc/vsftpd/vsftpd.user_list censé contenir la liste des utilisateurs autorisés à se connecter à VsFTPd.

# echo install > /etc/vsftpd/vsftpd.user_list

Mise en service et premier test

Activer et démarrer le serveur VsFTPd.

# systemctl enable vsftpd
# systemctl start vsftpd

Pour tester le serveur localement, on pourra utiliser un client FTP comme ncftp ou lftp. Avant de le lancer, on va lui fournir un fichier test à se mettre sous la dent.

# echo "Ceci est un test FTP" > /srv/ftp/install/test
# chown install:install /srv/ftp/install/test

À présent, on peut initier une connexion en tant qu’utilisateur install.

# ncftp -u install localhost
NcFTP 3.2.5 (Feb 02, 2011) by Mike Gleason 
(http://www.NcFTP.com/contact/).

Copyright (c) 1992-2011 by Mike Gleason.
All rights reserved.

Connecting to localhost...
(vsFTPd 3.0.2)
Logging in...
Password requested by localhost for user "install".

    Please specify the password.

Password: *********

Login successful.
Logged in to localhost.
ncftp / > ls
test
ncftp / > cat test
Ceci est un test FTP

ncftp / > bye

 

Ce contenu a été publié dans CentOS, Documentation Microlinux, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Une réponse à Installer un serveur FTP avec VsFTPd sous CentOS

  1. Ping : Installer un serveur FTP avec VsFTPd sous CentOS - My Tiny Tools

Laisser un commentaire

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