Le serveur FTP doit permettre d'héberger les dossiers de différents utilisateurs. Cependant ce sont des comptes virtuels, gérés dans une base de donnés MySQL, qui seront utilisés afin d'éviter de créer des comptes linux sur le serveur.
Le serveur doit disposer du serveur Web Apache2, de PHP, MySQL et PhpMyAdmin.
# apt-get update # apt-get upgrade
apt install vsftpd
Il faut supprimer l'utilisateur ftp créé par défaut :
# deluser --remove-home ftp
Modifiez le fichier de configuration /etc/vsftpd.conf pour :
Les lignes concernées :
# utilisation en mode standalone listen=YES # désactiver les connexion anonymes anonymous_enable=NO # activer les connexions des utilisateurs locaux local_enable=YES # interdire toutes actions d'écriture write_enable=NO # interdire l'upload anonyme anon_upload_enable=NO # interdire la création de répertoire anonyme anon_mkdir_write_enable=NO anon_other_write_enable=NO allow_anon_ssl=NO # definition des droits par defaut des fichiers uploades (droits en 755) local_umask=022 # activer les utilisateurs virtuels guest_enable=YES # faire correspondre tous les utilisateurs virtuels à l'utilisateur d'Apache 2 (www-data) guest_username=www-data # Enfermer les utilisateurs virtuels dans leur dossier chroot_local_user=YES chroot_list_enable=NO #Dossier utiliser pour le chroot (doit appartenir a root et avec un chmod 755) # car il ne doit surtout pas être inscriptible (writable) par tous le monde secure_chroot_dir=/var/run/vsftpd/empty # définir le nombre maximum de session à 100 max_clients=100 # définir le nombre maximum de session par IP à 5 max_per_ip=5 # Définir la plage de ports utilisés par le mode passif pasv_min_port=20000 pasv_max_port=20050 # Autoriser les utilisateurs virtuels à changer les permissions de leurs fichiers chmod_enable=YES virtual_use_local_privs=YES # Activer les logs xferlog_enable=YES log_ftp_protocol=YES xferlog_file=/var/log/vsftp.log # Définir valeur de timeout idle_session_timeout=300 data_connection_timeout=120 connect_timeout=60 accept_timeout=60 # Interdire la commande ABOR pas sécurité async_abor_enable=NO # S'assurer que la commande PORT provient bien du port 20 du client connect_from_port_20=YES # Utilisation des configurations individuelles pour chaque utilisateurs user_config_dir=/etc/vsftpd # Définir les heures d'enregistrement à l'heure locale use_localtime=YES # definir la bannière ftpd_banner=Serveur FTP de test - Charles Técher. # enlever la mesure de sécurité de vsftpd qui empêche un client de chrooter un client dans un répertoire # pour il possède les droits d'écriture. # https://lindev.fr/index.php?post/2013/04/05/wheezy-vsftpd-et-chroot allow_writeable_chroot=YES
Gestion des autorisations sur le dossier secure_chroot_dir (/var/run/vsftpd/empty) avec les permissions adéquates : il ne faut pas que les utilisateurs aient des droits d'écriture dans ce répertoire.
$ chown root:root /var/run/vsftpd/empty $ chmod 660 /var/run/vsftpd/empty
Création du dossier contenant les configurations de chaque utilisateur :
mkdir /etc/vsftpd
Il faut installer le module d'authentification par MySQL !
# apt-get install libpam-mysql
Création de la table des utilisateurs dans la base de données ftp.
CREATE TABLE `ftp`.`users` ( `name` TEXT NOT NULL , `pass` TEXT NOT NULL ) ENGINE = MYISAM
Remplacer le contenu du fichier /etc/pam.d/vsftpd par le suivant (qui contient les informations d'accès à cette table) :
auth required pam_mysql.so host=localhost user=ftp passwd=votre_pass db=ftp table=users usercolumn=name passwdcolumn=pass crypt=1 account required pam_mysql.so host=localhost user=ftp passwd=votre_pass db=ftp table=users usercolumn=name passwdcolumn=pass crypt=1
Redémarrer le serveur FTP !
/etc/init.d/vsftpd restart
anon_world_readable_only=NO local_root=/home/[nom d'utilisateur]/public_html write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES hide_file=(none) force_dot_files=YES
Pour davantage d'informations sur les options choisies, voir la page de documentation http://vsftpd.beasts.org/vsftpd_conf.html. (définition du dossier dans lequel l'utilisateur est enfermé, on l'autorise à y écrire, et on lui permet de voir les fichiers cachés).
mkdir /home/[nom d'utilisateur] chown -R www-data:www-data /home/[nom d'utilisateur] chmod -R 700 /home/[nom d'utilisateur]
et son mot de pase.