====== 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 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.
* 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 :
mkdir /home/[nom d'utilisateur]
chown -R www-data:www-data /home/[nom d'utilisateur]
chmod -R 700 /home/[nom d'utilisateur]
* 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]