Debian - VsFTPd
Un article de Wiki.OmBreNoiRe.net.
|
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
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 :
deb http://debian.ombrenoire.net/etch/vsftpd-ext ./
Puis on lance les commandes suivantes :
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 :
# 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:~# touch /etc/vsftpd_conf/nonchroote
root@monordi:~# touch /etc/vsftpd_conf/auth_user
Génération du certificat SSL
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
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 :
- 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 /) :
[...] /dev/sda2 / ext3 usrquota,errors=remount-ro 0 1 [...]
- Puis rebooter :
- Pour gerer le quota d'un utilisateur faite ainsi :
Quotas disque pour user ftpuser (uid 3024) :
Système de fichiers blocs souple stricte inodes souple stricte
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 :
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é :
write_enable=YES download_enable=YES chmod_enable=YES idle_session_timeout=3600 force_dot_files=YES
- l'utilisateur peut downloader uniquement :
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 :
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 :
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 !

