Professional Documents
Culture Documents
donc
tout
d'abord
mis
en
place
vsftpd
Contexte
Dans cet article, je vais vous prsenter la mise en place d'un serveur vsftpd. Je
tiens tre clair ds le dbut, je ne vais vous prsenter que ce que j'ai mis en place,
je ne dtaillerais pas toutes les possibilits de ce serveur FTP.
Pour rsumer voici ce dont j'avais besoin :
Le client sera chroot dans son /home. C'est dire qu'un client qui se
connectera sera "bloqu" dans son rpertoire personnel et ne pourra pas
remonter l'arborescence du serveur (pour des raisons videntes de scurit).
La connexion se fera via SSL pour ne pas faire transiter les mots de passe en
clair sur le rseau
VsFTPd (pour Very secure FTPd) est un serveur FTP conu avec la problmatique
d'une scurit maximale. Contrairement aux autres serveurs FTP (ProFTPd,
PureFTPd, etc.), aucune faille de scurit n'a jamais t dcele dans VsFTPd.
Ce serveur est notamment utilis grande chelle par des entreprises telles que Red
Hat. (source)
Je suis un parano de la scurit (oui je vais quand mme autoriser des centaines de
connexions quotidiennes chez moi), il me semblait donc trs important d'utiliser un
serveur FTP "scuris". J'ajoute "scuris" car le protocole FTP, par dfinition, n'est
pas scuris. Nanmoins, cela me rassure un peu plus d'utiliser vsftpd :)
II. Installation
Comme toujours, l'installation est trs simple puisque vsftpd est inclus dans les
dpts officiels des principales distributions. Pour les distributions Ubuntu ou Debian,
il vous suffit de taper cette commande :
apt-get install vsftpd
#
#
# Run standalone? vsftpd can run either from an inetd or as a standalone
#
daemon
started
from
an
initscript.
listen=YES
#
#
Run
standalone
with
IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
#
exclusive.
#listen_ipv6=YES
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO
#
#
Uncomment
this
to
allow
local
users
to
log
in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
#
Fichier
des
users
userlist_file=/etc/vsftpd/user_list
# Si vous n'avez pas encore cr ce fichier, excutez ces commandes : mkdir
/etc/vsftpd
puis
# J'ajoute tous les utilisateurs du systme dans ce fichier (grce cette
commande
:
# less /etc/vcat /etc/passwd |cut -d: -f1 > /etc/vsftpd/user_list) et je commente
les
users
AUTORISES
#
Chargement
de
la
liste
userlist_file
userlist_enable=YES
# On refuse tous les utilisateur de la liste (vous devez donc commenter
explicitement
les
utilisateurs
autoriss
se
connecter)
userlist_deny=YES
#
Nombre
maximum
de
connexion
simultanes
max_clients=30
# Nombre maximum de connexion venant de la mme adresse IP
max_per_ip=4
# 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
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=NO
#
# Uncomment this if you want the anonymous FTP user to be able to create
#
new
directories.
anon_mkdir_write_enable=NO
#
# Activate directory messages - messages given to remote users when they
#
go
into
a
certain
directory.
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
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
#
recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
#
below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
#
#
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
#
# This option specifies the location of the RSA certificate to use for SSL
#
encrypted
connections.
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
pasv_enable=YES
pasv_promiscuous=NO
pasv_min_port=40000
pasv_max_port=40100
pasv_address=mon_futur_site.com
pasv_addr_resolve=YES
port_promiscuous=NO
Je vais m'attarder sur ces derniers paramtres que j'ai ajout : les pasv_******. Ayant
moi mme eu un peu de mal tout cerner, j'ai dcid de tout reprendre dans cet
article. Je prcise que ces lignes sont ncessaires si vous souhaitez rendre
disponible votre serveur FTP l'exterieur.
Avant tout, si vous ne connaissez pas la diffrence entre le FTP actif et le FTP passif,
allez lire cet article de NicoLargo qui explique trs bien cette diffrence, ensuite vous
pouvez revenir ;)
Je vous ajoute le deuxime schma de NIcolargo ii pour plus de facilit pour la suite
de la lecture
Bien, dsormais je vais reprendre mes lignes pasv_ et vous les expliquer.
Bien sr, si vous tes derrire un routeur ou une *box, il vous faudra dbloquer les
ports 21 (pour la flche rouge) et les ports 40000 40100 (pour la flche verte).
Dsormais, votre serveur FTP sera accessible depuis l'extrieur.
IV. Scurisation
Comme je vous l'ai dit prcdemment, le protocole FTP n'est pas scuris (car c'est
un protocole ancien). Par dfaut, les mots de passe circulent en clair sur le rseau.
Pour vous le prouver, voici une analyse de trame pendant une connexion FTP :
Nous voyons clairement que l'utilisateur benj se connecte avec le mot de passe
"topsecret123". Ces donnes sont accessible par n'importe qui... Voici donc une belle
preuve de la faiblesse de ce protocole.
Pour palier ce soucis, nous allons devoir encapsuler FTP dans du SSL afin de
crypter la connexion (on appelle cela FTPS). Pour cela, il y a deux tapes, une
premire consiste crer un certificat SSL et une deuxime consiste paramtrer
vsftpd pour qu'il n'autorise que les connexions en SSL (source).
Cration du certificat
Dans un terminal, tapez cette commande (il est possible que vous deviez installer
openssl auparavant: apt-get install openssl) :
openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out
vsftpd.pem
Vous devez ensuite renseigner quelques champs, ils ne sont pas particulirement
importants excpts celui-ci :
Common Name (eg, YOUR name) []:
L, vous devez taper l'adresse IP publique de votre serveur FTP (ou le nom de
domaine).
Maintenant il ne vous reste plus qu'a copier le fichier gnr dans le rpertoire
/etc/ssl/certs/. Pour cela, utilisez cette commande :
cp vsftpd.pem /etc/ssl/certs/
Vous pouvez dsormais vous connecter avec un client compatible SSL (par
exemple ftp-ssl). Les donnes sont maintenant cryptes :
P.S : Si vous obtenez une erreur 500 Illegal PORT command, c'est parce que vous
n'avez pas dit votre client qu'il faut utiliser le mode passif. Pour cela, ajoutez le
paramtre -P pour la commande ftp-ssl.
Voila, j'en ai fini avec cet article, si vous pensez que je n'ai pas parl de certaines
choses qui vous semblent intressantes, merci de ma le signaler :) Je reste
galement disposition pour d'ventuelles questions.
bientt !