Debian - VsFTPd

Un article de Wiki.OmBreNoiRe.net.

Vous être en train de lire Comment installer un serveur sécurisé sur Debian.

Sommaire Install Aptitude Locales SSHd Shorewall 6wall DHCP3-server Bind9 VsFTPd Apache/MySQL Mail BackupManager

Sommaire

Introduction

Pour transmettre des fichiers par FTP, il faut choisir entre plusieurs daemons : ProFTPd, PureFTPd, VsFTPd, etc...

Je vous propose VsFTPd pour plusieurs raisons :

  • C'est le plus sécurisé
  • Configuration très aisée
  • Paramétrable par utilisateur

Je ne lui trouve qu'un seul défaut, bien qu'il gère de façon indirect les quota par le biais du kernel, il n'affiche pas le quota restant de l'utilisateur.

Installation

VsFTPd se trouve sur les dépôts officiels Debian, mais cette version ne me convient pas car entre autre, elle ne gère pas l'UTF-8. Fort heureusement, il existe un patch, et la version patchée se trouve sur mon dépôt perso http://debian.ombrenoire.net

À noter !
C'est un certain Grundik qui a compilé ces paquets pour Debian, si vous souhaitez récupérer la version de VsFTPd patchée directement à la source, il vous faudra aller sur le site internet du patch. Mais il faudra alors utiliser la commande dpkg -i lepaquet.deb au lieu d'aptitude... C'est pourquoi je vous recommande d'utiliser mon dépôt :)

Vous devez donc ajouter la ligne suivante à votre fichier /etc/apt/sources.list en haut de votre fichier :

Fichier : /etc/apt/sources.list
deb http://debian.ombrenoire.net/etch/vsftpd-ext ./

Puis on lance les commandes suivantes :

root@monordi:~# aptitude update

root@monordi:~# aptitude install vsftpd openssl

Astuce !
Si vous avez une erreur GPG après aptitude update et que vous ne savez pas comment la résoudre, la solution se trouve ici !

Configuration

La configuration de VsFTPd est très aisée, celle que je vous propose est très sécurisée, et vous demande d'ajouter chacun des utilisateurs par une procédure décrite plus bas.

Par ailleurs, le port d'écoute est non standard (à ouvrir dans Shorewall) et la connexion se fait en mode passif en IPv4 exclusivement (il est possible de le configurer en IPv6).

Le fichier /etc/vsftpd.conf

Remplacer votre fichier par celui-ci :

Fichier : /etc/vsftpd.conf
# Config file /etc/vsftpd.conf

# Fonctionne en standalone
listen=YES

# le serveur ecoute sur des ports non standards (a ouvrir dans shorewall)
listen_port=891
ftp_data_port=890

# Nombre de client autorise en meme temps
max_clients=10

# Max par IP
max_per_ip=2

# Plage de port pour le pasv
pasv_min_port=44600
pasv_max_port=44700

# On interdit les connexions anonymes
anonymous_enable=NO

# On autorise les utilisateurs locaux a pouvoir se logger
local_enable=YES

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022

# Message lorsque l'on rentre dans certain repertoire
dirmessage_enable=YES

# Activate logging of uploads/downloads.
xferlog_enable=YES

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES

# Duree avant le timeout (idle)
idle_session_timeout=600

# Duree avant le timeout (connection)
data_connection_timeout=120

# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure

# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES

# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
ascii_upload_enable=YES
ascii_download_enable=YES

# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails

# Par default on chroot tous les utilisateurs
chroot_local_user=YES

# Liste des utilisateurs NON chrootes, le reste l'est
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd_conf/nonchroote


# Debian customization
#
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default.  These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty.  Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd

# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd

# Repertoire de configuration de chaque user
user_config_dir=/etc/vsftpd_conf/conf_user

# Message de bienvenue
ftpd_banner=Bienvenue

# Utilisation d'une userlist pour n'autoriser QUE les users cette liste
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd_conf/auth_user

# Par default on empeche le chmod, write et download
chmod_enable=NO
write_enable=NO
download_enable=NO

# Mettre le UTF-8
local_charset=UTF8
convert_charset_enable=YES

# Activation du SSL
ssl_enable=YES
force_local_logins_ssl=NO
force_local_data_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/vsftp_conf/certs/vsftpd.pem
rsa_private_key_file=/etc/vsftpd_conf/certs/vsftpd.pem

Le répertoire /etc/vsftpd_conf

Il vous faut créer un répertoire /etc/vsftpd_conf où sera contenu le reste de la configuration.

Créations des repertoires et des fichiers de bases

Executez les commandes suivantes :

root@monordi:~# mkdir -p /etc/vsftpd_conf/conf_user

root@monordi:~# touch /etc/vsftpd_conf/nonchroote
root@monordi:~# touch /etc/vsftpd_conf/auth_user

Génération du certificat SSL

root@monordi:~# mkdir /etc/vsftpd_conf/certs

root@monordi:~# cd /etc/vsftpd_conf/certs
root@monordi:~# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd_conf/certs/vsftpd.pem -out /etc/vsftpd_conf/certs/vsftpd.pem
Generating a 2048 bit RSA private key
.....................+++
............................................................................+++
writing new private key to '/etc/vsftpd_conf/certs/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MonOrdi.MonDomaine.net - FTP/SSL
Organizational Unit Name (eg, section) []:MonOrdi.MonDomaine.net - FTP/SSL
Common Name (eg, YOUR name) []:1.2.3.4

Email Address []:monemail@mondomaine.net

Quelques remarques :

  • Le certificat est fait pour 365 jours (à modifier dans la ligne de commande si besoin)
  • Les champs surlignés sont à adapter, en particulier 1.2.3.4 à remplacer par votre IP.

Prise en charge des quotas

Les quotas ne sont donc pas pris en charge nativement, mais de façon à direct par le biais du kernel, si vous voulez limiter l'espace que peut prendre un utilisateur du FTP, il faut réaliser les étapes suivantes :

  • Installer la gestion des quotas :
root@monordi:~# aptitude install quota quotatool
  • Puis ajouter le paramètre usrquota à la partition surlaquelle sont situés les repertoires des utilisateurs FTP dans le fichier /etc/fstab (dans l'exemple /) :
Fichier : /etc/fstab
[...]
/dev/sda2       /       ext3    usrquota,errors=remount-ro      0       1
[...]
  • Puis rebooter :
root@monordi:~# reboot
  • Pour gerer le quota d'un utilisateur faite ainsi :
root@monordi:~# edquota ftpuser

Quotas disque pour user ftpuser (uid 3024) :
 Système de fichiers blocs souple stricte inodes souple stricte

  /dev/sda2 147432 300000 300000 6976 0 0

Cette commande vous ouvre un utilitaire pour editer le fichier texte des quotas de l'utilisateur, remplacer 300000 par ce que vous voulez, en sachant que c'est en kilo-octet (donc dans l'exemple l'utilisateur est limité en gros à 300Mo (292,97Mo pour les puristes)).

Ajouter un utilisateur

Maintenant que les fichiers de configuration sont en place voici comment il faut procéder pour ajouter un utilisateur à votre FTP.

Création de l'utilisateur

S'il n'existe pas au niveau système le créer avec un :

root@monordi:~# adduser ftpuser

ou si vous avez besoin de spécifier l'emplacement du répertoire home (qui sera la racine du ftp) : {{Bandeau Root|adduser --home /var/www/site/ftpuser ftpuser

Autoriser auprès de VsFTPd

Il faut ajouter son nom dans /etc/vsftpd_conf/auth_user

Chroot ?

Si vous ne voulez pas que l'utilisateur soit chrooté, ajouter son nom dans /etc/vsftpd_conf/nonchroote

Droits

Créer un fichier qui portera le nom de l'utilisateur dans le repertoire /etc/vsftpd_conf/conf_user où l'on va spécifier ses droits.

Voici plusieurs type de fichier de droits :

  • l'utilisateur à les droits upload/download, de faire un chmod, il voit les fichiers cachés (débutant par un point), et sa session se termine au bout d'une heure sans activité :
Fichier : /etc/vsftpd_conf/conf_user/ftpuser
write_enable=YES
download_enable=YES
chmod_enable=YES
idle_session_timeout=3600
force_dot_files=YES
  • l'utilisateur peut downloader uniquement :
Fichier : /etc/vsftpd_conf/conf_user/ftpuser
write_enable=NO
download_enable=YES
cmds_allowed=CWD,CDUP,TYPE,PWD,LIST,NLST,NOOP,PASV,REST,SYST,RETR,FEAT,QUIT,HELP,PORT,OPTS,PBSZ,PROT
  • l'utilisateur peut uploader uniquement :
Fichier : /etc/vsftpd_conf/conf_user/ftpuser
write_enable=YES
download_enable=NO
cmds_allowed=CWD,CDUP,TYPE,APPE,MKD,PWD,LIST,NLST,NOOP,PASV,STOR,REST,SYST,RNFR,RNTO,QUIT,FEAT,HELP,PORT,OPTS,PBSZ,PROT
  • l'utilisateur peut downloader/uploader et l'on force la connexion sécurisée (data et auth) et on limite la vitesse de connexion à 35000 octets/s :
Fichier : /etc/vsftpd_conf/conf_user/ftpuser
write_enable=YES
download_enable=YES
chmod_enable=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
local_max_rate=35000

Et c'est terminé, l'utilisateur peut se connecter :)

Conclusion

Vous disposez désormais d'un FTP sécurisé et fiable, qui va vous permettre par exemple à transférer les fichiers de votre page web. Mais ces pages Web necessite un daemon pour être utilisé : Apache et c'est le sujet de l'étape suivante !

Affichages
Boîte à outils