A venir...
Nous avons besoin du paquet DEBIAN suivant : vsftpd. Pour cela, en tant que superutilisateur (utilisateur root), entrez les commandes suivantes dans une console :
# aptitude install vsftpd
et suivez les instructions.
Dans ce fichier de configuration, nous déterminons les paramètres généraux du serveur vsFtpd, les options de connexion et l'accès des utilisateurs.
Dans la section Options du Daemon, nous définissons les ports utilisés par vsFTPd (2121 pour le port de contrôle et 2020 pour le port de données).
Dans la section Options de connexion, nous autorisons l'utilisateur du mode passif (mode PASV) pour que ce soit le serveur qui impose le numéro de port de données (ici 2020). Et nous interdissons l'utilisation du mode actif (mode PORT) pour empêcher au client de décider du numéro de port de données à utiliser. Ceci permet de limiter l'ouverture des ports au niveau du firewall aux ports 2020 et 2121 pour l'utilisation du FTP. Nous devons aussi préciser notre adresse IP pour l'emploi du mode passif.
Dans la section Gestion des utilisateurs anonymes, nous interdissons toute connexion non authentifiée, par conséquence l'emploi du mode anonyme est interdit.
Dans la section Gestion des utilisateurs locaux, nous autorisons l'accès à tous les utilisateurs ayant un compte sur le serveur. Ces derniers sont alors automatiquement dirigés vers le répertoire /var/ftp
. Il faut donc le créer et lui attribuer les bons droits d'accès. Nous créons pour cela un utilisateur et un groupe ftp :
# adduser ftp
# mkdir /var/ftp
# chown ftp.ftp /var/ftp
# chmod ug+rwx /var/ftp
# chmod o-rwx /var/ftp
# chmod g+s /var/ftp
Nous autorisons l'accés en lecteur, écriture, exécution pour l'utilisateur et le groupe et interdisons tout accès pour les autres utilisateurs. Le SetGid bit est positionné pour que tout nouveau fichier ou répertoire créé soit du groupe ftp et en hérite des droits d'accès.
Modifiez le fichier de configuration /etc/vsftpd.conf
comme suit :
# Configuration de vsftpd pour ftp.nuts.fr
# Fichier /etc/vsftpd.conf
#
#
#
#####################
# Options du Daemon #
#####################
#
# Utilisation en mode "standalone"
listen=YES
# Support de l'IPv6
listen_ipv6=NO
# Port pour le canal de controle
listen_port=2121
# Port pour le canal de donnees
ftp_data_port=2020
# Nombre maximum de clients connectes simultaneement
max_clients=4
# Nombre de connections par clients
max_per_ip=1
# Executer vsftpd en tant qu'utilisateur "ftpsecure"
nopriv_user=ftpsecure
# Options non definies
#background=NO
#check_shell=YES
#connect_from_port_20=NO
#one_process_model=NO
#run_as_launching_user=NO
#tcp_wrappers=NO
#listen_address=
#listen_address6=
#
#
#
##########################
# Options de connections #
##########################
#
# Utilisation du mode PASV
pasv_enable=YES
pasv_max_port=2020
pasv_min_port=2020
pasv_address=217.217.36.25
#pasv_promiscuous=NO
#accept_timeout=60
#
# Utilisation du mode PORT
port_enable=NO
ftp_data_port=2020
#connect_from_port_20=NO
#port_promiscuous=NO
#connect_timeout=60
#
# Autres options
#data_connect_timeout=300
#
#
#
############################
# Cryptage des connections #
############################
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=DES-CBC3-SHA
dsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
force_local_data_ssl=YES
force_local_logins_ssl=YES
#
#
#
####################
# Gestion des logs #
####################
#
# Utilisation de 2 fichiers de logs ?
dual_log_enable=YES
# Fichier de logs de vsftpd
vsftpd_log_file=/var/log/vsftpd.log
# Utiliser syslog plutot que le fichier de logs de vsftpd ?
syslog_enable=NO
# Utilisation de xferlog
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
# Logguer toutes les requetes et reponses ?
log_ftp_protocol=NO
# Options non definies
#no_log_lock
#
#
#
#####################################
# Gestion des utilisateurs anonymes #
#####################################
#
# Autoriser le FTP anonyme ?
anonymous_enable=NO
# Autoriser les connections anonymes non securisees ? (ssl_enable doit etre actif)
allow_anon_ssl=NO
# Ne pas demander de mots de passe pour les utilisateurs anonymes ?
no_anon_password=YES
# Utilisation d'une liste d'adresses e-mail interdites ?
deny_email_enable=NO
#banned_email_file=/etc/vsftpd.banned_emails
# Utilisation d'une liste d'adresses e-mail de confiance ?
secure_email_list_enable=NO
#email_password_file=/etc/vsftpd.email_passwords
# Se connecter dans le repertoire suivant
anon_root=/var/ftp
# en tant qu'utilisateur "ftp"
ftp_username=ftp
# Autoriser la creation de nouveaux repertoires ? (write_enable doit etre actif)
anon_mkdir_write_enable=NO
# Autoriser la suppression et le renomage des fichiers ?
anon_other_write_enable=NO
# Autoriser l'upload ? (write_enable doit etre actif) - Faut-il changer l'utilisateur du fichier ? Si oui, lequel ?
anon_upload_enable=NO
chown_uploads=YES
chown_username=ftp
# Seuls les fichiers en lecture pour tout le monde peuvent etre telecharges
anon_world_readable_only=YES
#
#
#
###################################
# Gestion des utilisateurs locaux #
###################################
#
# Autoriser les utilisateurs locaux ?
local_enable=YES
# Repertoire des utilisateurs locaux
local_root=/var/ftp
# Mask des utilisateurs locaux
local_umask=007
# Taux de transfert maximum (0=illimite)
local_max_rate=0
# Chrooter les utilisateurs locaux ?
chroot_local_user=YES
chroot_list_enable=NO
#chroot_list_file=/etc/vsftpd.chroot_list
#passwd_chroot_enable=NO
#
#
#
###############
# Options FTP #
###############
# Baniere de login
ftpd_banner=Welcome to the ftp.nuts.fr FTP service.
#banner_file=
# Activer les messages de repertoires
dirmessage_enable=YES
message_file=.message
# Autoriser de lister les repertoires
dirlist_enable=YES
# Autoriser la recursivite pour le listage des repertoires
ls_recurse_enable=YES
# Afficher les identifiants des utilisateurs et des groupes en textuel
text_userdb_names=YES
# Autoriser le telechargement
download_enable=YES
# Autoriser l'ecriture
write_enable=YES
# Changer les droits des fichiers en upload
file_open_mode=0666
# Autoriser les transferts en mode ASCII
ascii_upload_enable=YES
ascii_download_enable=YES
# Options non definies
#async_abor_enable=YES
#force_dot_files=NO
#hide_ids=NO
#tilde_user_enable=NO
#use_localtime=NO
#cmds_allowed=
#deny_file=
#hide_file=
#
#
#
# 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
#
Pour que le système de logs fonctionne bien, il faut créer les fichiers (initialement vides) de logs :
# touch /var/log/vsftpd.log
# touch /var/log/xferlog
Comme nous utilisons une adresse IP dynamique, nous avons besoin de modifier la ligne :
pasv_address=217.217.36.25
de la section Option de connexion de notre fichier de configuration.
Pour cela, nous avons besoin d'un script de mise à jour pour notre fichier de configuration.
Voici ce petit script : vsftpd_ip
#!/bin/sh
#vsftpd.conf IP update
vsftpd_conf=/etc/vsftpd.conf
vsftpd_log=/var/log/vsftpd.log
#change to your domain name in next line
my_ip=`host mon_site.dyndns.org | cut -f4 -d" "`
vsftpd_ip=`grep pasv_address $vsftpd_conf | cut -f2 -d=`
if [ "$my_ip" != "$vsftpd_ip" ] ; then
sed -e "s/$vsftpd_ip/$my_ip/g" $vsftpd_conf
( echo ",s/$vsftpd_ip/$my_ip/g" && echo w ) | ed - $vsftpd_conf
echo `date` "$vsftpd_conf updated with $my_ip IP address" >> $vsftpd_log
/etc/init.d/vsftpd reload
fi
Pour automatiser la mise à jour de l'adresse IP au démarrage de vsFTPd, nous rajoutons notre script dans les sections "start" et "restart" du fichier /etc/init.d/vsftpd
#!/bin/sh
# /etc/init.d/vsftpd
#
# Written by Sander Smeenk <ssmeenk@debian.org>
set -e
# Exit if vsftpd.conf doesn't have listen=yes or listen_ipv6=yes
# (mandatory for standalone operation)
if [ -f /etc/vsftpd.conf ] && ! egrep -iq "^ *listen(_ipv6)? *= *yes" /etc/vsftpd.conf; then
exit 0
fi
DAEMON=/usr/sbin/vsftpd
NAME=vsftpd
test -x $DAEMON || exit 0
case "$1" in
start)
echo -n "Starting FTP server: $NAME"
/root/vsftpd_ip
start-stop-daemon --start --background -m --pidfile /var/run/vsftpd/vsftpd.pid --exec $DAEMON
echo "."
;;
stop)
echo -n "Stopping FTP server: $NAME"
start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd.pid --oknodo --exec $DAEMON
echo "."
;;
restart)
echo -n "Restarting FTP server: $NAME"
start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd.pid --oknodo --exec $DAEMON
/root/vsftpd_ip
start-stop-daemon --start --background -m --pidfile /var/run/vsftpd/vsftpd.pid --exec $DAEMON
echo "."
;;
reload|force-reload)
echo "Reloading $NAME configuration files"
start-stop-daemon --stop --pidfile /var/run/vsftpd/vsftpd.pid --signal 1 --exec $DAEMON
echo "."
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload}"
exit 1
;;
esac
exit 0
Création des clefs de cryptage RSA :
# openssl genrsa -out server.key 1024
Création du certificat autosigné :
# openssl req -new -x509 -days 365 -key server.key -out server.crt
Création du fichier vsftpd.pem
:
# cat server.key server.crt > /etc/ssl/certs/vsftpd.pem
Comme nous n'autorisons l'accès qu'aux utilisateurs locaux, seuls les utilisateurs ayant un compte sur le serveur peuvent y accéder.
Pour ajouter un utilisateur, il suffit de lui créer un compte et de l'ajouter au groupe ftp. Ainsi pour ajouter l'utilisateur bob, faire en tant que root :
# adduser bob
# adduser bob ftp