Hébergement Virtuel · 7 min read · Jan 19, 2026

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

5 Configurer PureFTPd

Éditez /etc/pure-ftpd/pure-ftpd.conf et assurez-vous que les lignes ChrootEveryone, MySQLConfigFile et CreateHomeDir sont activées et ressemblent à ceci :

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |

La configuration 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 le répertoire personnel d’un utilisateur lorsque l’utilisateur se connecte et que le répertoire personnel n’existe pas encore.

Ensuite, nous éditons /etc/pure-ftpd/pureftpd-mysql.conf. Cela devrait ressembler à ceci :

cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig  
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf  
vi /etc/pure-ftpd/pureftpd-mysql.conf

| MYSQLSocket /var/lib/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 de 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 du système pour PureFTPd et le démarrons :

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

6 Peupler La Base De Données Et Tester

Pour peupler la base de données, vous pouvez utiliser le shell MySQL :

mysql -u root -p
USE 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é crypté en utilisant la fonction MD5 de MySQL), le UID et 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 d’upload et de download de 100 Ko/sec. (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 ! Sinon, quelque chose s’est mal passé.

Maintenant, si vous exécutez

ls -l /home

vous devriez voir que le répertoire /home/www.example.com (répertoire personnel de exampleuser) a été créé automatiquement, et il est possédé par ftpuser et ftpgroup (l’utilisateur/groupe que nous avons créé à la fin de l’étape deux) :

[root@server1 system]# ls -l /home/  
total 4  
drwxr-xr-x 2 ftpuser ftpgroup 4096 May  2 02:35 www.example.com  
[root@server1 system]#  

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/) 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 d’utilisateur 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 d’upload de l’utilisateur virtuel en Ko/sec. (kilooctets par seconde). 0 signifie illimité.
  • DLBandwidth : Bande passante de download de l’utilisateur virtuel en Ko/sec. (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 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 package pure-ftpd, donc vous n’avez pas besoin de les créer manuellement. Cependant, le répertoire personnel de ftp est /var/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 /var/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 /var/ftp à /home/ftp (ne faites pas cela si vous souhaitez utiliser /var/ftp) :

vi /etc/passwd

| [...] #ftp:x:14:50:Utilisateur FTP:/var/ftp:/sbin/nologin ftp:x:14:50:Utilisateur FTP:/home/ftp:/sbin/nologin [...] |

Ensuite, déplacez /var/ftp vers /home (ne faites pas cela si vous souhaitez utiliser /var/ftp) :

mv /var/ftp /home

Ensuite, nous créons le répertoire /home/ftp/incoming qui permettra aux utilisateurs anonymes de télécharger des fichiers. Nous donnerons au répertoire /home/ftp/incoming des permissions de 311 afin que les utilisateurs puissent télécharger, mais ne puissent pas voir ou télécharger des fichiers dans ce répertoire. Le répertoire /home/ftp aura des permissions de 555 qui permettent 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 /var/ftp à la place, remplacez /home/ftp par /var/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échargements seront limités à /home/ftp/incoming (et une fois qu’un fichier est téléchargé dans /home/ftp/incoming, il ne peut pas être lu ni téléchargé à partir de 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 [...] AntiWarez no [...] AnonymousBandwidth 8 [...] AnonymousCantUpload no [...] |

(Le paramètre AnonymousBandwidth est optionnel - il vous permet de limiter les bandes passantes d’upload et de download pour les utilisateurs anonymes. 8 signifie 8 Ko/sec. 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.service

9 Liens

Share: X/Twitter LinkedIn

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

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