Hébergement Virtuel · 15 min read · Nov 24, 2025
Hébergement Virtuel Avec PureFTPd Et MySQL (Incl. Gestion Des Quotas Et De La Bande Passante) Sur OpenSUSE 13.2
Hébergement Virtuel Avec PureFTPd Et MySQL (Incl. Gestion Des Quotas Et De La Bande Passante) Sur OpenSUSE 13.2
Version 1.0
Auteur : Srijan Kishore
Suivez howtoforge sur Twitter
Dernière modification le 19/Nov/2014
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 de quotas et de limites de bande passante de téléchargement/téléversement avec cette configuration. Les mots de passe seront stockés de manière cryptée 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 howto. phpMyAdmin est une interface graphique confortable, ce qui signifie que vous n’avez pas à vous embêter avec la ligne de commande.
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 je choisis.
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 là où cela est approprié. Vous devez avoir une installation de base d’Open Suse avant de continuer comme décrit dans ce tutoriel.
2 Installer MariaDB, Apache2, Et phpMyAdmin
MariaDB, Apache et les modules PHP nécessaires à phpMyAdmin peuvent être installés comme suit :
zypper install mariadb mariadb-client apache2 apache2-mod_php5 php5-mysql php5-mcrypt php5-mbstring php5-gdserver1:~ # zypper install mariadb mariadb-client apache2 apache2-mod_php5 php5-mysql php5-mcrypt php5-mbstring php5-gd
Chargement des données du dépôt...
Lecture des paquets installés...
Résolution des dépendances des paquets...
Problème : php5-mysql-5.6.1-4.1.x86_64 nécessite php5 = 5.6.1, mais cette exigence ne peut pas être fournie
fournisseurs désinstallables : php5-5.6.1-1.1.x86_64[openSUSE-13.2-0]
php5-5.6.1-1.1.i586[repo-oss]
php5-5.6.1-1.1.x86_64[repo-oss]
php5-5.6.1-4.1.i586[repo-update]
php5-5.6.1-4.1.x86_64[repo-update]
Solution 1 : Les actions suivantes seront effectuées :
ne pas installer php5-mysql-5.6.1-4.1.x86_64
ne pas installer php5-mcrypt-5.6.1-4.1.x86_64
ne pas installer php5-gd-5.6.1-4.1.x86_64
Solution 2 : Les actions suivantes seront effectuées :
ne pas installer php5-mcrypt-5.6.1-4.1.x86_64
ne pas installer apache2-mod_php5-5.6.1-4.1.x86_64
ne pas installer php5-gd-5.6.1-4.1.x86_64
ne pas installer php5-mbstring-5.6.1-4.1.x86_64
ne pas installer php5-mysql-5.6.1-4.1.x86_64
Solution 3 : Les actions suivantes seront effectuées :
ne pas installer php5-mcrypt-5.6.1-4.1.x86_64
ne pas installer apache2-mod_php5-5.6.1-4.1.x86_64
ne pas installer php5-gd-5.6.1-4.1.x86_64
ne pas installer php5-mbstring-5.6.1-4.1.x86_64
Solution 4 : Les actions suivantes seront effectuées :
ne pas installer php5-mcrypt-5.6.1-4.1.x86_64
ne pas installer apache2-mod_php5-5.6.1-4.1.x86_64
ne pas installer php5-gd-5.6.1-4.1.x86_64
ne pas installer php5-mbstring-5.6.1-4.1.x86_64
Solution 5 : Les actions suivantes seront effectuées :
ne pas installer php5-mcrypt-5.6.1-4.1.x86_64
ne pas installer apache2-mod_php5-5.6.1-4.1.x86_64
ne pas installer php5-gd-5.6.1-4.1.x86_64
ne pas installer php5-mbstring-5.6.1-4.1.x86_64
Solution 6 : Les actions suivantes seront effectuées :
ne pas installer php5-mcrypt-5.6.1-4.1.x86_64
ne pas installer apache2-mod_php5-5.6.1-4.1.x86_64
ne pas installer php5-gd-5.6.1-4.1.x86_64
ne pas installer php5-mbstring-5.6.1-4.1.x86_64
Solution 7 : désinstallation de patterns-openSUSE-minimal_base-conflicts-20141007-2.1.x86_64
Solution 8 : casser php5-mysql-5.6.1-4.1.x86_64 en ignorant certaines de ses dépendances
Choisissez parmi les solutions ci-dessus par numéro ou annulez [1/2/3/4/5/6/7/8/c] (c) : <--7Ensuite, nous créons les liens de démarrage système pour MySQL (afin que MySQL démarre automatiquement chaque fois que le système démarre) et démarrons le serveur MySQL :
systemctl enable mysql.service
systemctl start mysql.servicePour sécuriser l’installation de MySQL, exécutez :
mysql_secure_installationserver1:~ # mysql_secure_installation
/usr/bin/mysql_secure_installation: ligne 379 : find_mysql_client : commande introuvable
REMARQUE : L'EXÉCUTION DE TOUTES LES PARTIES DE CE SCRIPT EST RECOMMANDÉE POUR TOUS LES SERVEURS MariaDB
EN UTILISATION EN PRODUCTION ! VEUILLEZ LIRE CHAQUE ÉTAPE ATTENTIVEMENT !
Pour se connecter à MariaDB pour le sécuriser, nous aurons besoin du mot de passe actuel pour l'utilisateur root. Si vous venez d'installer MariaDB, et que vous n'avez pas encore défini le mot de passe root, le mot de passe sera vide, donc vous devez simplement appuyer sur entrer ici.
Entrez le mot de passe actuel pour root (appuyez sur entrer pour aucun) :
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 : <--mariadbpassword
Ressaisir le nouveau mot de passe : <--mariadbpassword
Mot de passe mis à jour avec succès !
Rechargement des tables de privilèges..
... Succès !
Par défaut, une installation de MariaDB a un utilisateur anonyme, permettant à quiconque de se connecter à MariaDB sans avoir à avoir un compte utilisateur créé pour eux. Cela 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, MariaDB est livré avec une base de données nommée 'test' à laquelle quiconque peut accéder. Cela 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 tous les changements effectués jusqu'à présent prendront effet immédiatement.
Recharger les tables de privilèges maintenant ? [Y/n] <--ENTRER
... Succès !
Nettoyage...
Tout est prêt ! Si vous avez complété toutes les étapes ci-dessus, votre installation de MariaDB devrait maintenant être sécurisée.
Merci d'utiliser MariaDB !
server1:~ #Maintenant, votre configuration MySQL devrait être sécurisée.
Ensuite, nous créons les liens de démarrage système pour Apache (afin qu’il démarre automatiquement chaque fois que le système démarre) et le démarrons :
systemctl enable apache2.service
systemctl start apache2.servicephpMyAdmin peut être installé comme suit :
zypper install phpmyadminPour s’assurer que nous pouvons accéder à phpMyAdmin, modifiez le fichier comme suit :
vi /etc/apache2/conf.d/phpMyAdmin.confAjoutez l’alias comme suit :
Alias /phpMyAdmin /srv/www/htdocs/phpMyAdmin
Alias /phpmyadmin /srv/www/htdocs/phpMyAdmin
[...]Avant de démarrer apache, nous devons suivre le lien & apporter des modifications dans httpd.conf
vi /etc/apache2/httpd.conf
Remarque : si les valeurs de fichier sont différentes, changez la valeur comme suit :
Commentez ces lignes & ajoutez ces lignes
#
# Options None
# AllowOverride None
# Order deny,allow
# Deny from all
#
Options None
AllowOverride None
Require all denied
Ensuite, nous devons créer le fichier de configuration pour phpmyadmin comme
cd /srv/www/htdocs/phpMyAdmin
cp config.sample.inc.php config.inc.phpDans le fichier de configuration, vous pouvez voir que phpmyadmin s’attend à une base de données nommée “phpmyadmin” qui contient les tables pma :
[...]
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
[...] Donc nous en créons une :
echo "create database phpmyadmin;" | mysql -u root -p 'mariadbpassword'et chargeons les tables à partir des docs de phpmyadmin.
mysql -u root -p 'mariadbpassword' < /usr/share/doc/packages/phpMyAdmin/examples/create_tables.sqlMaintenant, démarrez le service Apache
systemctl enable apache2.service
systemctl restart apache2.serviceMaintenant, nous pouvons accéder à phpmyadmin à http://192.168.0.100/phpmyadmin ou à http://server1.example.com

3 Installer PureFTPd Avec Support MySQL
Le paquet PureFTPd d’OpenSUSE prend en charge divers backends, tels que MySQL, PostgreSQL, LDAP, etc. Par conséquent, tout ce que nous avons à faire est d’installer le paquet PureFTPd normal :
zypper install pure-ftpdEnsuite, nous créons un groupe ftp (ftpgroup) et un utilisateur (ftpuser) auxquels tous nos utilisateurs virtuels seront mappés. Remplacez l’identifiant de groupe et d’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 ftpuser4 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 -pCREATE 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;Vous pouvez maintenant 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.
5 Configurer PureFTPd
Modifiez /etc/pure-ftpd/pure-ftpd.conf et assurez-vous que les lignes ChrootEveryone, AnonymousOnly, MySQLConfigFile et CreateHomeDir sont activées et ressemblent à ceci :
vi /etc/pure-ftpd/pure-ftpd.conf[...]
ChrootEveryone yes
[...]
AnonymousOnly no
[...]
MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
[...]
CreateHomeDir yes
[...] Le paramètre ChrootEveryone fera en sorte que PureFTPd chroot chaque utilisateur virtuel dans son répertoire personnel afin qu’il ne puisse pas parcourir les répertoires et fichiers en dehors de son répertoire personnel. La ligne CreateHomeDir fera en sorte que PureFTPd crée un répertoire personnel pour l’utilisateur lorsque l’utilisateur se connecte et que le répertoire personnel n’existe pas encore. AnonymousOnly doit être réglé sur non, sinon seules les sessions FTP anonymes seront autorisées.
Ensuite, nous créons /edit /etc/pure-ftpd/pureftpd-mysql.conf. Il devrait ressembler à ceci :
vi /etc/pure-ftpd/pureftpd-mysql.confMYSQLSocket /var/run/mysql/mysql.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword ftpdpass
MYSQLDatabase pureftpd
#MYSQLCrypt md5, cleartext, crypt() ou password() - md5 est TRÈS RECOMMANDÉ par rapport au texte clair
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")Assurez-vous de remplacer la chaîne ftpdpass par le vrai mot de passe pour l’utilisateur MySQL pureftpd dans la ligne MYSQLPassword ! Veuillez noter que nous utilisons md5 comme méthode MYSQLCrypt, ce qui signifie que nous stockerons les mots de passe des utilisateurs sous forme de chaîne MD5 dans la base de données, ce qui est beaucoup plus sécurisé que d’utiliser des mots de passe en texte clair !
Maintenant, nous créons les liens de démarrage système pour PureFTPd et le démarrons :
systemctl enable pure-ftpd
systemctl start pure-ftpd6 Peupler La Base De Données Et Tester
Pour peupler la base de données, vous pouvez utiliser le shell MySQL :
mysql -u root -pUSE pureftpd;Maintenant, nous créons l’utilisateur exampleuser avec le statut 1 (ce qui signifie que son compte ftp est actif), le mot de passe secret (qui sera stocké de manière cryptée en utilisant la fonction MD5 de MySQL), l’UID et le GID 2001 (utilisez l’identifiant d’utilisateur et l’identifiant de groupe que vous avez créés à la fin de l’étape deux !), le répertoire personnel /home/www.example.com, une bande passante de téléversement et de téléchargement de 100 Ko/s (kilooctets par seconde), et un quota de 50 Mo :
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');quit;Maintenant, ouvrez votre programme client FTP sur votre station de travail (quelque chose comme WS_FTP ou SmartFTP si vous êtes sur un système Windows ou gFTP sur un bureau Linux) et essayez de vous connecter. Comme nom d’hôte, utilisez server1.example.com (ou l’adresse IP du système), le nom d’utilisateur est exampleuser, et le mot de passe est secret.
Si vous parvenez à vous connecter - félicitations ! Si ce n’est pas le cas, quelque chose a mal tourné.
Maintenant, si vous exécutez
ls -l /home/server1:~ # ls -l /home/
total 0
drwxr-xr-x 1 administrator users 128 Nov 7 14:30 administrator
drwxr-xr-x 1 ftpuser ftpgroup 18 Nov 19 14:32 www.example.com
server1:~ #vous devriez voir que le répertoire /home/www.example.com (le répertoire personnel de exampleuser) a été créé automatiquement, et qu’il est possédé par ftpuser et ftpgroup (l’utilisateur/groupe que nous avons créés à la fin de l’étape deux) :
7 Administration De La Base De Données
Pour la plupart des gens, il est plus facile d’avoir une interface graphique pour MySQL ; par conséquent, vous pouvez également utiliser phpMyAdmin (dans cet exemple sous http://server1.example.com/phpMyAdmin/ ou http://192.168.0.100/phpMyAdmin/) pour administrer la base de données pureftpd.

Chaque fois que vous souhaitez créer un nouvel utilisateur, vous devez créer une entrée dans la table ftpd, donc je vais expliquer les colonnes de cette table ici :
Table ftpd :
User : Le nom de l’utilisateur virtuel PureFTPd (par exemple, exampleuser).
status : 0 ou 1. 0 signifie que le compte est désactivé, l’utilisateur ne peut pas se connecter.
Password : Le mot de passe de l’utilisateur virtuel. Assurez-vous d’utiliser la fonction MD5 de MySQL pour enregistrer le mot de passe crypté sous forme de chaîne MD5 :

UID : L’identifiant de l’utilisateur ftp que vous avez créé à la fin de l’étape deux (par exemple, 2001).
GID : L’identifiant de groupe du groupe ftp que vous avez créé à la fin de l’étape deux (par exemple, 2001).
Dir : Le répertoire personnel de l’utilisateur virtuel PureFTPd (par exemple, /home/www.example.com). S’il n’existe pas, il sera créé lorsque le nouvel utilisateur se connectera pour la première fois via FTP. L’utilisateur virtuel sera enfermé dans ce répertoire personnel, c’est-à-dire qu’il ne peut pas accéder à d’autres répertoires en dehors de son répertoire personnel.
ULBandwidth : Bande passante de téléversement de l’utilisateur virtuel en Ko/s (kilooctets par seconde). 0 signifie illimité.
DLBandwidth : Bande passante de téléchargement de l’utilisateur virtuel en Ko/s (kilooctets par seconde). 0 signifie illimité.
comment : Vous pouvez entrer n’importe quel commentaire ici (par exemple, pour votre administration interne) ici. Normalement, vous laissez ce champ vide.
ipaccess : Entrez ici les adresses IP qui sont autorisées à se connecter à ce compte FTP. * signifie que n’importe quelle adresse IP est autorisée à se connecter.
QuotaSize : Espace de stockage en Mo (pas en Ko, comme dans ULBandwidth et DLBandwidth !) que l’utilisateur virtuel est autorisé à utiliser sur le serveur FTP. 0 signifie illimité.
QuotaFiles : nombre de fichiers que l’utilisateur virtuel est autorisé à enregistrer sur le serveur FTP. 0 signifie illimité.
8 FTP Anonyme
Si vous souhaitez créer un compte ftp anonyme (un compte ftp auquel tout le monde peut se connecter sans mot de passe), vous avez besoin d’un utilisateur et d’un groupe appelés ftp. Les deux ont été créés automatiquement lorsque vous avez installé le paquet pure-ftpd, donc vous n’avez pas besoin de les créer manuellement. Cependant, le répertoire personnel de ftp est /srv/ftp par défaut, mais j’aimerais créer le répertoire ftp anonyme dans /home/ftp (les répertoires ftp des utilisateurs normaux sont également dans /home, par exemple /home/www.example.com). Mais bien sûr, vous pouvez utiliser le répertoire /srv/ftp pour ftp anonyme, si vous le préférez.
Si vous souhaitez utiliser /home/ftp, ouvrez /etc/passwd et changez le répertoire personnel de l’utilisateur ftp de /srv/ftp à /home/ftp (ne faites pas cela si vous souhaitez utiliser /srv/ftp) :
vi /etc/passwd[...]
#ftp:x:40:49:Compte FTP:/srv/ftp:/bin/bash
ftp:x:40:49:Compte FTP:/home/ftp:/bin/bash
[...] Ensuite, déplacez /srv/ftp vers /home (ne faites pas cela si vous souhaitez utiliser /srv/ftp) :
mv /srv/ftp /homeEnsuite, nous créons le répertoire /home/ftp/incoming qui permettra aux utilisateurs anonymes de téléverser des fichiers. Nous donnerons au répertoire /home/ftp/incoming des permissions de 311 afin que les utilisateurs puissent téléverser, mais ne puissent pas voir ou télécharger de fichiers dans ce répertoire. Le répertoire /home/ftp aura des permissions de 555, ce qui permet de voir et de télécharger des fichiers :
chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/(Si vous souhaitez utiliser /srv/ftp à la place, remplacez /home/ftp par /srv/ftp dans les commandes ci-dessus.)
Les utilisateurs anonymes pourront se connecter, et ils seront autorisés à télécharger des fichiers depuis /home/ftp, mais les téléversements seront limités à /home/ftp/incoming (et une fois qu’un fichier est téléversé dans /home/ftp/incoming, il ne peut pas être lu ni téléchargé depuis là ; l’administrateur du serveur doit le déplacer dans /home/ftp d’abord pour le rendre disponible aux autres).
Maintenant, nous devons configurer PureFTPd pour ftp anonyme. Ouvrez /etc/pure-ftpd/pure-ftpd.conf et assurez-vous que vous avez les paramètres suivants :
vi /etc/pure-ftpd/pure-ftpd.conf[...]
NoAnonymous no
[...]
AnonymousBandwidth 8
[...]
AnonymousCantUpload no
[...] (Le paramètre AnonymousBandwidth est optionnel - il vous permet de limiter les bandes passantes de téléversement et de téléchargement pour les utilisateurs anonymes. 8 signifie 8 Ko/s. Utilisez n’importe quelle valeur que vous aimez, ou commentez la ligne si vous ne souhaitez pas limiter les bandes passantes.)
Enfin, nous redémarrons PureFTPd :
systemctl restart pure-ftpd.service9 Liens
- OpenSUSE : http://www.opensuse.org/
- PureFTPd : http://www.pureftpd.org/
- phpMyAdmin : http://www.phpmyadmin.net/
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.