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
- 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]