Table des matières

Installation et configuration d'un serveur FTP

Ressources :

Présentation

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.

Préparation du serveur

Le serveur doit disposer du serveur Web Apache2, de PHP, MySQL et PhpMyAdmin.

Mise à jour du serveur

# apt-get update
# apt-get upgrade

Configuration de MySQL

Création d'un compte et d'une base de données pour ftp

Installation et configuration de vsFTPd pour l'hébergement multi-utilisateur

Installer vsFTPd

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

Configurer vsFTPd avec pam-mysql

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

Principe de la création d'un site

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.