Installation et configuration d'un serveur FTP

Ressources :

https://doc.ubuntu-fr.org/vsftpd_et_pam_mysql

http://www.debianaddict.org/article47.html

http://docs.btssio.ac-limoges.fr/docs/doku.php?id=administration:valadon:esxprof:hebergementweb

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

création avec phpmyadmin d'un compte ftp local avec sa base de données ftp sur laquelle il a tous les provilèges.

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 :

utilisation en mode standalone

désactiver les connexion anonymes

activer les connexions des utilisateurs locaux

interdire toutes actions d'écriture

interdire l'upload anonyme

interdire la création de répertoire anonyme

définir des droits par defaut des fichiers uploades (droits en 755)

activer les utilisateurs virtuels et les faire correspondre à www-data

enfermer les utilisateurs virtuels dans leur dossier

définir le nombre maximum de session à 100 et le nombre maximum de session par IP à 5

Définir la plage de ports utilisés par le mode passif de 20000 à 20050

Définir la plage de ports utilisés par le mode passif

Autoriser les utilisateurs virtuels à changer les permissions de leurs fichiers

Activer les logs

Définir valeur de timeout

Interdire la commande ABOR pas sécurité

S'assurer que la commande PORT provient bien du port 20 du client

Utilisation des configurations individuelles pour chaque utilisateur

Définir les heures d'enregistrement à l'heure locale

définir la bannière d'accueil

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 securechrootdir (/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.

lancer PHPMyAdmin,

se logger avec l'utilisateur ftp et sélectionner la base de donnée ftp,

créer la table ftp ci-dessous :

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

Définir un nom de compte et un mot de passe ;

connexion à la base de données ftp avec le compte et le mot de passe de l'utilisateur ftp,

Dans la base de données ftp, il faut ajouter un nouvel enregistrement à la table en renseignant avec le nom d'utilisateur et le mot de passe crypté avec l'option ENCRYPT.

création du fichier de configuration de l'utilisateur /etc/vsftpd/[nom d'utilisateur].

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).

création du dossier de l'utilisateur avec les bons droits : <code> mkdir /home/[nom d'utilisateur] chown -R www-data:www-data /home/[nom d'utilisateur] chmod -R 700 /home/[nom d'utilisateur] </code>

L'utilisateur accède par ftp à son dossier à l'adresse ftp://spock.btssio.local avec le [nom d'utilisateur] et son mot de pase.

On accède au site web à l'adresse http://spock.btssio.local/~[nom d'utilisateur]