Hébergement Virtuel · 7 min read · Nov 26, 2025

Hébergement Virtuel Avec PureFTPd Et MySQL (Incl. Gestion Des Quotas Et De La Bande Passante) Sur Fedora 20

Hébergement Virtuel Avec PureFTPd Et MySQL (Incl. Gestion Des Quotas Et De La Bande Passante) Sur Fedora 20

Version 1.0
Auteur : Falko Timme, mis à jour par Srijan Kishore

Ce document décrit comment installer un serveur PureFTPd qui utilise des utilisateurs virtuels à partir d’une base de données MySQL au lieu d’utilisateurs système réels. Cela est beaucoup plus performant et permet d’avoir des milliers d’utilisateurs ftp sur une seule machine. En plus de cela, je vais montrer l’utilisation des quotas et des limites de bande passante de téléchargement/téléversement avec cette configuration. Les mots de passe seront stockés cryptés sous forme de chaînes MD5 dans la base de données.

Pour l’administration de la base de données MySQL, vous pouvez utiliser des outils basés sur le web comme phpMyAdmin qui seront également installés dans ce guide. phpMyAdmin est une interface graphique confortable, ce qui signifie que vous n’avez pas à vous embêter avec la ligne de commande.

Ce tutoriel est basé sur Fedora 20. Vous devriez déjà avoir configuré un système de base Fedora 20.

Ce guide est destiné à être un guide pratique ; il ne couvre pas les bases théoriques. Elles sont traitées dans de nombreux autres documents sur le web.

Ce document est fourni sans garantie d’aucune sorte ! Je tiens à dire que ce n’est pas la seule façon de configurer un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la méthode que j’utilise. Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Remarque Préliminaire

Dans ce tutoriel, j’utilise le nom d’hôte server1.example.com avec l’adresse IP 192.168.0.100. Ces paramètres peuvent différer pour vous, donc vous devez les remplacer le cas échéant.

2 Installer MySQL Et phpMyAdmin

Tout cela peut être installé avec une seule commande :

yum install mysql mysql-server phpMyAdmin httpd

Maintenant, nous configurons phpMyAdmin. Nous modifions la configuration d’Apache afin que phpMyAdmin autorise les connexions non seulement depuis localhost (en commentant tout dans le bloc et en ajoutant la ligne Require all granted) :

vi /etc/httpd/conf.d/phpMyAdmin.conf

| # phpMyAdmin - Navigateur MySQL basé sur le web écrit en php # # N'autorise que localhost par défaut # # Mais autoriser phpMyAdmin à quiconque autre que localhost doit être considéré # dangereux à moins d'être correctement sécurisé par SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin # # # Apache 2.4 # # Require ip 127.0.0.1 # Require ip ::1 # # # # # Apache 2.2 # Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # Require all granted # Apache 2.4 Require ip 127.0.0.1 Require ip ::1 # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 # Ces répertoires ne nécessitent pas d'accès via HTTP - pris de l'original # tarball de phpMyAdmin # Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None # Cette configuration empêche mod_security dans les répertoires phpMyAdmin de # filtrer SQL etc. Cela peut casser votre implémentation mod_security. # # # # SecRuleInheritance Off # # |

Ensuite, nous créons les liens de démarrage système pour MySQL et Apache (afin que les deux démarrent automatiquement chaque fois que le système démarre) et démarrons les deux services :

systemctl enable mysqld.service  
systemctl start mysqld.service

Si vous obtenez une erreur comme celle-ci :

[root@server1 ~]# systemctl enable mysqld.service  
Failed to issue method call: No such file or directory  
[root@server1 ~]#

Cela se produit en raison de ce bug, puis procédez comme suit :

[root@server1 ~]# ln -s '/usr/lib/systemd/system/mysqld.service' '/etc/systemd/system/multi-user.target.wants/mysqld.service'  
[root@server1 ~]# ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
systemctl start mysqld.service  
systemctl start mariadb.service
systemctl enable httpd.service   
systemctl start httpd.service

Créez un mot de passe pour l’utilisateur MySQL root (remplacez yourrootsqlpassword par le mot de passe que vous souhaitez utiliser) :

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation

NOTE : L’EXÉCUTION DE TOUTES LES PARTIES DE CE SCRIPT EST RECOMMANDÉE POUR TOUS LES SERVEURS MySQL
EN UTILISATION EN PRODUCTION ! VEUILLEZ LIRE CHAQUE ÉTAPE ATTENTIVEMENT !

Pour se connecter à MySQL afin de le sécuriser, nous aurons besoin du mot de passe actuel
pour l’utilisateur root. Si vous venez d’installer MySQL, et
vous n’avez pas encore défini le mot de passe root,
le mot de passe sera vide, donc vous devriez juste
presser entrer ici.

Entrez le mot de passe actuel pour root (entrez pour aucun) : <– ENTRER
OK, mot de passe utilisé avec succès, passage à la suite…

Définir le mot de passe root ? [Y/n] <– ENTRER
Nouveau mot de passe : <– yourrootsqlpassword
Ressaisissez le nouveau mot de passe : <– yourrootsqlpassword
Mot de passe mis à jour avec succès !
Rechargement des tables de privilèges..
… Succès !

Par défaut, une installation MySQL a un utilisateur anonyme,
permettant à quiconque de se connecter à MySQL
sans avoir à créer un compte utilisateur pour eux.
Ceci est destiné uniquement à des fins de test,
et pour rendre l’installation un peu plus fluide.
Vous devriez les supprimer avant de passer à un
environnement de production.

Supprimer les utilisateurs anonymes ? [Y/n] <– ENTRER
… Succès !

Normalement, root ne devrait être autorisé à se connecter
que depuis ‘localhost’.
Cela garantit que quelqu’un ne peut pas deviner
le mot de passe root depuis le réseau.

Interdire la connexion root à distance ? [Y/n] <– ENTRER
… Succès !

Par défaut, MySQL vient avec une base de données
appelée ‘test’ à laquelle quiconque peut
accéder.
Ceci est également destiné uniquement à des fins de test,
et doit être supprimé avant de passer à un
environnement de production.

Supprimer la base de données de test et l’accès à celle-ci ? [Y/n] <– ENTRER

  • Suppression de la base de données de test…
    … Succès !
  • Suppression des privilèges sur la base de données de test…
    … Succès !

Recharger les tables de privilèges garantira que
toutes les modifications effectuées jusqu’à présent
prendront effet immédiatement.

Recharger les tables de privilèges maintenant ? [Y/n] <– ENTRER
… Succès !

Nettoyage…

Tout est fait ! Si vous avez complété
toutes les étapes ci-dessus, votre installation MySQL
devrait maintenant être sécurisée.

Merci d’utiliser MySQL !

[root@server1 ~]#

3 Installer PureFTPd Avec Support MySQL

Le package PureFTPd de Fedora prend en charge divers backends, tels que MySQL, PostgreSQL, LDAP, etc. Par conséquent, tout ce que nous avons à faire est d’installer le package PureFTPd normal :

yum install pure-ftpd

Ensuite, nous créons un groupe ftp (ftpgroup) et un utilisateur (ftpuser) auxquels tous nos utilisateurs virtuels seront mappés. Remplacez le groupe et l’ID utilisateur 2001 par un numéro qui est libre sur votre système :

groupadd -g 2001 ftpgroup  
useradd -u 2001 -s /bin/false -d /bin/null -c "utilisateur pureftpd" -g ftpgroup ftpuser

4 Créer La Base De Données MySQL Pour PureFTPd

Maintenant, nous créons une base de données appelée pureftpd et un utilisateur MySQL nommé pureftpd que le démon PureFTPd utilisera plus tard pour se connecter à la base de données pureftpd :

mysql -u root -p
CREATE DATABASE pureftpd;  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';  
FLUSH PRIVILEGES;

Remplacez la chaîne ftpdpass par le mot de passe que vous souhaitez utiliser pour l’utilisateur MySQL pureftpd. Toujours dans le shell MySQL, nous créons la table de base de données dont nous avons besoin (oui, il n’y a qu’une seule table !) :

USE pureftpd;
CREATE TABLE ftpd (  
User varchar(16) NOT NULL default '',  
status enum('0','1') NOT NULL default '0',  
Password varchar(64) NOT NULL default '',  
Uid varchar(11) NOT NULL default '-1',  
Gid varchar(11) NOT NULL default '-1',  
Dir varchar(128) NOT NULL default '',  
ULBandwidth smallint(5) NOT NULL default '0',  
DLBandwidth smallint(5) NOT NULL default '0',  
comment tinytext NOT NULL,  
ipaccess varchar(15) NOT NULL default '*',  
QuotaSize smallint(5) NOT NULL default '0',  
QuotaFiles int(11) NOT NULL default 0,  
PRIMARY KEY (User),  
UNIQUE KEY User (User)  
) ENGINE=MyISAM;
quit;

Comme vous l’avez peut-être remarqué, avec la commande quit; nous avons quitté le shell MySQL et sommes de retour dans le shell Linux.

Au fait, (je suppose que le nom d’hôte de votre système de serveur ftp est server1.example.com) vous pouvez accéder à phpMyAdmin sous http://server1.example.com/phpMyAdmin/ (vous pouvez également utiliser l’adresse IP au lieu de server1.example.com) dans un navigateur et vous connecter en tant qu’utilisateur pureftpd. Ensuite, vous pouvez jeter un œil à la base de données. Plus tard, vous pouvez utiliser phpMyAdmin pour administrer votre serveur PureFTPd.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.