Ce document décrit comment installer un serveur PureFTPd qui utilise des utilisateurs virtuels d'une base de données MySQL au lieu d'utilisateurs système réels. Ceci est beaucoup plus performant et permet d'avoir des milliers d'utilisateurs ftp sur une seule machine. En plus de cela, je montrerai l'utilisation des quotas et des limites de bande passante de téléchargement/téléchargement avec cette configuration. Les mots de passe seront stockés chiffré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 Web tels que phpMyAdmin qui seront également installés dans ce guide. phpMyAdmin est une interface graphique confortable qui signifie que vous n'avez pas à vous soucier de la ligne de commande.
Ce tutoriel est basé sur Ubuntu 8.10 (Intrepid Ibex). Vous devriez déjà avoir configuré un système de serveur Ubuntu 8.10 de base, comme décrit dans les dix premiers chapitres de ce didacticiel :https://www.howtoforge.com/perfect-server-ubuntu-8.10
Ce guide est conçu comme un guide pratique ; il ne couvre pas les arrière-plans théoriques. Ils sont traités 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 mettre en place un tel système. Il existe de nombreuses façons d'atteindre cet objectif, mais c'est la voie que je prends. Je n'émets 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, vous devez donc les remplacer le cas échéant.
Assurez-vous que vous êtes connecté en tant que root (tapez
sudo su
pour devenir root), car nous devons exécuter toutes les étapes de ce tutoriel en tant qu'utilisateur root. De plus, si vous souhaitez utiliser vi comme éditeur de texte (comme suggéré par ce tutoriel), vous devez exécuter
apt-get install vim-nox
Le paquet vim-nox s'assure que l'éditeur de texte vi se comporte comme prévu (sans vim-nox, vous pourriez rencontrer un comportement étrange dans l'éditeur de texte vi).
2 Installer MySQL et phpMyAdmin
Tout cela peut être installé avec une seule commande :
apt-get install mysql-server mysql-client phpmyadmin apache2
Ces questions vous seront posées :
Nouveau mot de passe pour l'utilisateur MySQL "root" :<-- yourrootsqlpassword
Répétez le mot de passe pour l'utilisateur MySQL "root" :<-- yourrootsqlpassword
Serveur Web à reconfigurer automatiquement :<-- apache2
3 Installer PureFTPd avec le support MySQL
Pour Ubuntu 8.10, un package pure-ftpd-mysql préconfiguré est disponible. Installez-le comme ceci :
apt-get install pure-ftpd-mysql
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 libre sur votre système :
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
4 Créer la base de données MySQL pour PureFTPd
Nous créons maintenant 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 ;
ACCORDER SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* À 'pureftpd'@'localhost' IDENTIFIÉ PAR 'ftpdpass' ;
ACCORDER SELECT, INSERT, METTRE À JOUR, SUPPRIMER, CRÉER, DÉPOSER SUR pureftpd.* VERS 'pureftpd'@'localhost.localdomain' IDENTIFIÉ PAR 'ftpdpass' ;
FLUSH PRIVILEGES ;
Remplacez la chaîne ftpdpass par le mot de passe que vous souhaitez utiliser pour l'utilisateur MySQL pureftpd. Toujours sur le shell MySQL, on crée la table de base de données dont on a besoin (oui, il n'y a qu'une seule table !) :
UTILISER pureftpd ;
CREATE TABLE ftpd (
Utilisateur varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Mot de passe varchar (64) NOT NULL par défaut '',
Uid varchar(11) NOT NULL par défaut '-1',
Gid varchar(11) NOT NULL par défaut '-1',
Dir varchar( 128) NOT NULL par défaut '',
ULBandwidth smallint(5) NOT NULL par défaut '0',
DLBandwidth smallint(5) NOT NULL par défaut '0',
commentaire tinytext NOT NULL,
ipaccess varchar(15) NOT NULL par défaut '*',
QuotaSize smallint(5) NOT NULL par défaut '0',
QuotaFiles int(11) NOT NULL par défaut 0,
PRIMARY CLÉ (Utilisateur),
CLÉ UNIQUE Utilisateur (Utilisateur)
) TYPE=MyISAM ;
quitter ;
Comme vous l'avez peut-être remarqué, avec le renoncement; commande, nous avons quitté le shell MySQL et sommes de retour sur le shell Linux.
BTW, (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 connectez-vous en tant qu'utilisateur pureftpd. Ensuite, vous pouvez consulter la base de données. Plus tard, vous pourrez utiliser phpMyAdmin pour administrer votre serveur PureFTPd.
5 Configurer PureFTPd
Modifiez /etc/pure-ftpd/db/mysql.conf. Cela devrait ressembler à ceci :
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null> /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf
MYSQLSocket /var/run/mysqld/mysqld.sock#MYSQLServer localhost#MYSQLPort 3306MYSQLUser pureftpdMYSQLPassword ftpdpassMYSQLDatabase pureftpd#MYSQLCrypt md5, texte clair, crypt() ou mot de passe () - md5 est TRES RECOMMANDABLE sur cleartextMYSQLCrypt md5MYSQLGetPW 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")MySQ LGetQTASZ 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 l'utilisation de mots de passe en texte brut !
Créez ensuite le fichier /etc/pure-ftpd/conf/ChrootEveryone qui contient simplement la chaîne yes :
echo "yes"> /etc/pure-ftpd/conf/ChrootEveryone
Cela obligera PureFTPd à chrooter chaque utilisateur virtuel dans son répertoire personnel afin qu'il ne puisse pas parcourir les répertoires et les fichiers en dehors de son répertoire personnel.
Créez également le fichier /etc/pure-ftpd/conf/CreateHomeDir qui contient à nouveau simplement la chaîne yes :
echo "yes"> /etc/pure-ftpd/conf/CreateHomeDir
Cela obligera PureFTPd à créer le répertoire personnel d'un utilisateur lorsque l'utilisateur se connecte et que le répertoire personnel n'existe pas encore.
Ensuite, nous redémarrons PureFTPd :
/etc/init.d/pure-ftpd-mysql restart
6 Remplir la base de données et tester
Pour remplir la base de données, vous pouvez utiliser le shell MySQL :
mysql -u root -p
UTILISER 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é chiffré à l'aide de la fonction MD5 de MySQL), l'UID et le GID 2001 (utilisez l'ID utilisateur et l'ID de groupe de l'utilisateur/ groupe que vous avez créé à la fin de la deuxième étape !), le répertoire personnel /home/www.example.com, une bande passante de téléchargement et de téléchargement 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`) VALEURS ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100' , '', '*', '50', '0');
quitter ;
Ouvrez maintenant votre programme client FTP sur votre poste de travail (quelque chose comme FileZilla, WS_FTP, SmartFTP ou gFTP) et essayez de vous connecter. Comme nom d'hôte, vous 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 (le répertoire personnel de l'utilisateur de l'exemple) a été automatiquement créé, et qu'il appartient à ftpuser et ftpgroup (l'utilisateur/groupe que nous avons créé à la fin de la deuxième étape) :
[email protected] :~# ls -l /home
total 8
drwxr-xr-x 2 administrateur administrateur 4096 2008-11-04 15:48 administrateur
drwxr-xr -x 2 ftpuser ftpgroup 4096 2009-01-06 16:36 www.example.com
[email protected] :~#
7 Administration de la base de données
Pour la plupart des gens, c'est plus facile s'ils ont 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 voulez créer un nouvel utilisateur, vous devez créer une entrée dans le tableau ftpd donc je vais vous expliquer les colonnes de ce tableau ici :
Table ftpd :
- Utilisateur :le nom de l'utilisateur virtuel PureFTPd (par exemple, exampleuser).
- statut :0 ou 1. 0 signifie que le compte est désactivé, l'utilisateur ne peut pas se connecter.
- Mot de passe :le mot de passe de l'utilisateur virtuel. Assurez-vous d'utiliser la fonction MD5 de MySQL pour enregistrer le mot de passe chiffré sous forme de chaîne MD5 :
- UID :ID utilisateur de l'utilisateur ftp que vous avez créé à la fin de la deuxième étape (par exemple, 2001).
- GID :le groupid du groupe ftp que vous avez créé à la fin de la deuxième étape (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éé lors de la première connexion du nouvel utilisateur via FTP. L'utilisateur virtuel sera emprisonné dans ce répertoire personnel, c'est-à-dire qu'il ne pourra pas accéder à d'autres répertoires en dehors de son répertoire personnel.
- ULBandwidth :téléchargez la bande passante de l'utilisateur virtuel en Ko/sec. (kilooctets par seconde). 0 signifie illimité.
- DLBandwidth :téléchargement de la bande passante de l'utilisateur virtuel en Ko/sec. (kilooctets par seconde). 0 signifie illimité.
- commentaire :vous pouvez entrer ici n'importe quel commentaire (par exemple pour votre administration interne). 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 (et non en Ko, comme dans ULBandwidth et DLBandwidth !) que l'utilisateur virtuel est autorisé à utiliser sur le serveur FTP. 0 signifie illimité.
- QuotaFiles :quantité 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 pouvez le faire comme ceci :
Créez d'abord un utilisateur ftp (avec le homedir /home/ftp) et un groupe ftp :
groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "ftp anonyme" -g ftp ftp
Créez ensuite le fichier /etc/pure-ftpd/conf/NoAnonymous qui contient la chaîne no :
echo "no"> /etc/pure-ftpd/conf/NoAnonymous
Avec cette configuration, PureFTPd autorisera les connexions anonymes.
Redémarrez PureFTPd :
/etc/init.d/pure-ftpd-mysql restart
Ensuite, nous créons le répertoire /home/ftp/incoming qui permettra aux utilisateurs anonymes de télécharger des fichiers. Nous accorderons au répertoire /home/ftp/incoming des autorisations de 311 afin que les utilisateurs puissent télécharger, mais ne voient ni ne téléchargent aucun fichier 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 :
cd /home/ftp
mkdir entrant
chown ftp:nogroup entrant/
chmod 311 entrant/
cd ../
chmod 555 ftp/Désormais, les utilisateurs anonymes peuvent se connecter et télécharger des fichiers depuis /home/ftp, mais les téléchargements sont limités à /home/ftp/incoming (et une fois qu'un fichier est téléchargé dans /home/ftp/incoming, il ne peut être ni lu ni téléchargé depuis là ; l'administrateur du serveur doit d'abord le déplacer vers /home/ftp pour le rendre accessible aux autres).
9 liens
- PureFTPd :http://www.pureftpd.org
- MySQL :http://www.mysql.com
- phpMyAdmin :http://www.phpmyadmin.net
- Ubuntu :http://www.ubuntu.com