Cet article va expliquer comment installer pure-ftpd avec la gestion d'utilisateurs virtuels depuis une base de données MySql. Rien ne vous empêche d'utiliser le tutorial pour installer un serveur ftp qui se base sur le fichier /etc/passwd et /etc/shadow. La méthode mysql nous permet de gerer des centaines d'utilisateurs dynamiquement et sans ralentissement. La structure des tables étant très simple, vous pouvez gerer les utilisateurs manuellement avec phpmyadmin, l'invite mysql ou encore faire un petit script vous même. Le tutoriel est écrit et testé par moi même, il devrait fonctionner sur la plupart des distributions linux.
1. L'installation
Prérequis: Une installation de linux fonctionnelle et un serveur mysql fonctionnel. Un environement de développement GCC et les librairies mysql-devel sont aussi requises. Perl est requis si vous souhaitez utiliser le wrapper de configuration "pure-config.pl".
Il y a deux façons pour installer pure-ftpd : les dépôts officiels, ou la compilation manuelle. Puisque ce tutoriel s'adresse à tout le monde, je vais expliquer les deux méthodes. Toutes les opérations décrites ci-dessous doivent être effectués en tant que super utilisateur.
Installation par les dépôts officiels:
Fedora :
bash# yum install pure-ftpdDebian:
bash# apt-get install pure-ftpd-mysql
Installation manuelle:
bash# cd /tmp
bash# wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz
bash# tar zxvf pure-ftpd-1.0.21.tar.gz
bash# cd pure-ftpd-1.0.21
bash# ./configure --with-extauth --with-mysql --with-quotas --with-ratios --with-throttling --with-altlog --prefix "/usr/"
bash# make install
bash# make clean
bash# mkdir /etc/pure-ftpd
bash# cd configuration-file/
bash# chmod 755 pure-config.pl
bash# mv pure-config.pl /usr/sbin/pure-config.pl
Note: Vous pouvez aussi faire un ./configure --with-everything --with-mysql pour avoir un serveur avec toutes les fonctions de pure-ftpd, mais c'est une mauvaise idée d'un point de vue performances. Les 3 dernières lignes ne sont pas obligatoires, elles permettent d'utiliser pure-config.pl qui est un "wrapper" pour la configuration. À l'origine pure-ftpd ne sait pas lire de fichier de configuration (sauf pour mysql), il accepte juste des switches au lancement. pure-config.pl permet de démarrer le serveur plus simplement, mais n'apporte rien de plus.
2. Configuration de mysql
Tout d'abord on doit créer l'utilisateur, la base et la table que le serveur ftp va utiliser (ceci peut être fait depuis l'invite mysql ou depuis phpmyadmin).
CREATE USER 'ftpd'@'localhost' IDENTIFIED BY '*******' ;
CREATE DATABASE ftpd;
GRANT DROP,SELECT, INSERT, UPDATE, DELETE, CREATE ON ftpd.* TO 'ftpd'@'localhost' IDENTIFIED BY '*******';
USE ftpd;
CREATE TABLE ftp_users (
Username varchar(16) NOT NULL default '',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Home varchar(128) NOT NULL default '',
Quota smallint(5) NOT NULL default '100',
MaxUploadSpeed smallint(5) NOT NULL default '50',
MaxDownloadSpeed smallint(5) NOT NULL default '50',
actif enum('Yes','No') NOT NULL default 'Yes',
PRIMARY KEY (Username),
UNIQUE KEY User (Username)
);
Ajouter un utilisateur de test
INSERT INTO `ftp_users` (`Username`, `Password`, `Uid`, `Gid`, `Home`, `Quota`, `MaxUploadSpeed`, `MaxDownloadSpeed`, `actif`) VALUES ('user', MD5('motdepasse'), '5000', '5000', '/home/user', '100', '50', '50', 'Yes');
3. Création des fichiers de configurations
/etc/pure-ftpd/pureftpd-mysql.conf
MYSQLSocket /var/lib/mysql/mysql.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser ftpd
MYSQLPassword ******
MYSQLDatabase ftpd
MYSQLCrypt md5
# Décommenter si vous voulez que tous les utilisateurs aient le même UID ou le même GID
# Et commenter les deux lignes à propos de UID et GID plus basse.
# MYSQLDefaultUID 5000
# MYSQLDefaultGID 5000
MYSQLGetPW SELECT Password FROM ftp_users WHERE actif = 'Yes' AND Username="\L"
MYSQLGetUID SELECT Uid FROM ftp_users WHERE actif = 'Yes' AND Username="\L"
MYSQLGetGID SELECT Gid FROM ftp_users WHERE actif = 'Yes' AND Username="\L"
MYSQLGetDir SELECT Home FROMftp_users WHERE actif = 'Yes' AND Username="\L"
# Décommenter si vous souhaitez limiter les vitesses de transfert ou le quota disque:
# MySQLGetQTASZ SELECT Quota FROM ftp_users WHERE actif = 'Yes' AND Username="\L"
# MySQLGetBandwidthUL SELECT MaxUploadSpeed FROM ftp_users WHERE actif = 'Yes' AND Username="\L"
# MySQLGetBandwidthDL SELECT MaxDownloadSpeed FROM ftp_users WHERE actif = 'Yes' AND Username="\L"
/etc/pure-ftpd/pure-ftpd.conf (seulement si installé depuis un dépôt ou avec pure-config.pl)
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 150
Daemonize yes
MaxClientsPerIP 4
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
NoAnonymous yes
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
# Décommenter la ligne ci dessous si vous souhaitez utiliser les utilisateurs système /etc/passwd
# UnixAuthentication yes
LimitRecursion 7500 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Bind 127.0.0.1,21
Umask 033:012
MinUID 500
# UserBandwidth 100
#Quota 1000:10
UseFtpUsers no
CustomerProof no
AllowUserFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload yes
AltLog clf:/var/log/pureftpd.log
CreateHomeDir yes
MaxDiskUsage 90
IPV4Only yes
4. Accès anonyme:
Si vous souhaitez avoir un accès anonyme au ftp, alors vous devez créer un utilisateur pour le serveur ftp (il doit s'appeler "ftp") avec les commandes suivantes:
bash# groupadd ftp
bash# useradd -s /bin/false -d /var/ftp -u 5000 -m ftp
Si l'utilisateur existait déja, assurez vous que son répertoire home existait, et qu'il lui appartient.
bash# mkdir /var/ftp
bash# chmod 777 /var/ftp
bash# chown ftp:ftp /var/ftp
et vous devez modifier le fichier pure-ftpd.conf (si vous utilisez pure-config.pl)
NoAnonymous no
AntiWarez no
AnonymousCantUpload no
Ou ajouter le switch -M et enlever -E (si vous n'utilisez pas pure-config.pl)
5. Démarrer le serveur :
5.1 Méthode Standard
/usr/sbin/pure-ftpd -4 -A -B -c 50 -C 4 -D -E -H -I 15 -j -k 90 -f ftp -L 7500:8 -m 4 -s -S 127.0.0.1,21 -u 500 -U 033:012 -z -l mysql:/etc/pure-ftpd/pureftpd-mysql.conf
Remplacer la partie orange par -lmysql:/etc/pure-ftpd/pureftpd-mysql.conf -lunix pour utiliser des utilisateurs de /etc/passwd aussi (système).
Attention l'ordre d'authentification est prise en compte, par exemple si un utilisateur est trouvé dans mysql, alors il demande pas à unix. Vous pouvez évidement inverser.
5.2 Avec pure-config.pl
/usr/sbin/pure-config.pl /etc/pure-ftpd/pure-ftpd.conf
5.3 Ou si vous avez installé le package:
Fedora: /sbin/service pure-ftpd start
Debian: /etc/init.d/pure-ftpd-mysql start
6. Tester
Essayer de vous connectez à votre ftp, si ça ne fonctionne pas relisez attentivement les étapes ci-dessus, assurez vous d'avoir modifié les valeurs en rose dans le tutoriel, ça doit fonctionner !
Pour plus d'informations sur la configuration : http://download.pureftpd.org/pub/pure-ftpd/doc/
Comments (5)
Salut, a quoi correspond les ** dans
CREATE USER ‘ftpd’@’localhost’ IDENTIFIED BY ‘*******‘ ;
Lorsque je lance ceci
/usr/sbin/pure-ftpd -4 -A -B -c 50 -C 4 -D -E -H -I 15 -j -k 90 -f ftp -L 7500:8 -m 4 -s -S 192.168.1.13,21 -u 500 -U 033:012 -z -l mysql:/etc/pure-ftpd/pureftpd-mysql.conf
J’obtiens No such file or directory
J’ai finalement réussi a poursuivre mais je n’arrive pas a me connecter sur mon ftp avec mon utilisateur de test.
J’ai testé mon utilisateur proftp directement en m’identifiant sur mysql, il fonctionne.
Dans la config il y a Bind 127.0.0.1,21 Est ce que cela pose probleme si je n’utilise pas bind pour resoudre mes nom de domaine? J’utilise zoneedit.
Bind n’a rien à voir avec le serveur de DNS du même nom
. Ça veut dire qu’il doit écouté sur 127.0.0.1 sur le port 21.
Est-ce que tu es sur que pure-ftpd se connecte bien à MySql ? Est-ce que le mot de passe de ton utilisateur de test est bien en md5 ?
oui, cette partie fonctionne, je pense que je vais abandonner pureftpd pour le moment car je viens d’arriver a faire fonctionner proftpd en upload.
Le truc embettant sur ce tuto c’est que les quotes fermantes ont été remplacé par wordpress et impossible de faire copier/coller.