Tuto pour installer et configurer le serveur FTP PureFTP en utilisant MySQL comme base de données pour gérer ses utilisateurs virtuels (utilisateurs non système Unix).
Ici le but est que chaque utilisateur aie tous les droits sur un dossier placé dans notre home perso. Après pour ceux qui veulent aller plus loin, il y aura moyen de jouer sur les liens symboliques pointant dans d'autres dossiers de notre système, avec la gestion des droits qui va avec (symlinks), qui n'est pas encore abordé dans ce tuto... bon courage!!!
Tout d'abord, l'idéal est de passer par la console, sous l'utilisateur root
Installation du serveur web (apache2) et du serveur de base de données (mysql), l'interface web phpmyadmin pour gérer MySQL simplement
apt-get install mysql-server mysql-client phpmyadmin apache2
Installation du serveur FTP PureFTP, avec gestion de MySQL
apt-get install pure-ftpd-mysql
Ajout de l'utilisateur et groupe système avec lesquels travaillera le serveur FTP
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
Création d'une base de données avec authentification
nom de la base : pureftpd
login : pureftp
pass : password
Commande pour entrer dans MySQL, Puis création de l'utilisateur relatif à la table à créer prochainement
mysql -u root -p
create database pureftpd character set utf8;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftp'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftp'@'localhost.localdomain' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Toujours dans mysql >, création de la table (son nom sera ici ftpd) et de ses champs :
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)
) TYPE=MyISAM;
Toujours dans MySQL, création d'un utilisateur virtuel (compte utilisable pour se connecter au serveur), qui pointera dans un dossier par exemple /home/mon_user/ftp-commun
nom du gugusse : fiston
mot de passe de cet utilisateur stocké en md5 : motdepasse
Commande mysql à taper : mysql.user.virtuel.txt
Puis pour terminer et sortir des commandes :
quit
Configuration du serveur FTP pour dialoguer avec MySQL :
Au préalable, on peut faire une copie de sauvegarde du fichier d'origine... (avec sudo au cas où...)
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf.ori
Contenu du fichier /etc/pure-ftpd/db/mysql.conf qui va bien :
Contenu : mysql.conf.txt
On relance le serveur FTP avec la config,
/etc/init.d/pure-ftpd-mysql stop
/etc/init.d/pure-ftpd-mysql start
Voila!
Quelques autres trucs pour peaufiner la configuration du serveur :
- Bloquer les utilisateurs dans le dossier prévu :
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
- Afficher les fichiers commencant par un point :
echo "yes" > /etc/pure-ftpd/conf/DisplayDotFiles
- Adresse IP de notre connexion internet (attention au loopback! configurer son client avec cette IP s'il on se trouve dans le même LAN, à tester si ca merdouille) :
echo "ADRESSE_IP_INTERNET" > /etc/pure-ftpd/conf/ForcePassiveIP
- Fourchette de ports pour le mode passif, ici du port 51000 à 51050 :
echo "51000 51050" > /etc/pure-ftpd/conf/PassivePortRange
- Limiter affichage du nombre de dossiers/fichiers (en théorie pour éviter les attaques ddos), ici 2000 fichiers et 5 niveaux de répertoire :
echo "2000 5" > /etc/pure-ftpd/conf/LimitRecursion
- Nombre maximum de connexions clientes par IP, ici 5 (4 pour les transferts de fichiers + 1 pour la navigation) :
echo "5" > /etc/pure-ftpd/conf/MaxClientsPerIP
- Temps avant déconnexion automatique du client s'il dort devant son ordi (en minutes) :
echo "5" > /etc/pure-ftpd/conf/MaxIdleTime
- Pour gérer l'umask par défaut des dossiers et fichiers créés par les utilisateurs (ici 777) (site pour le calcul de l'umask)
echo "000 000" > /etc/pure-ftpd/conf/Umask
- Liens symboliques :
Dans le fichier /etc/default/pure-ftpd-common
passer VIRTUALCHROOT=false (défaut) à VIRTUALCHROOT=true
- Pour afficher d'autres répertoires qui se trouve ailleurs dans l'arborescence de son linux, il faudra passer par un lien symbolique ! (attention aux droits!!!)
-> Petite astuce avec Gnome 2, ouvrir le navigateur de fichiers Nautilus, puis F3 pour ouvrir un 2e panneau. Avec le clic molette centrale, prendre le dossier cible et le faire glisser dans le dossier du FTP, puis sélectionner "Lier ici".
-> En ligne de commande, se placer dans le dossier où on veut créer son lien symbolique puis :
ln -s /chemin_du_répertoire_ciblé nom_du_lien
Quelques sites d'inspiration, avec le sujet du crytage via SSL :
[http://doc.ubuntu-fr.org/pure-ftp](http://doc.ubuntu-fr.org/pure-ftp)
[http://www.planetmy.com/blog/how-to-configure-pureftpd-over-ssl](http://www.planetmy.com/blog/how-to-configure-pureftpd-over-ssl)
[http://blog.cheramy.name/2010/12/22/pureftpd-tls-clamav-sur-debian-lenny](http://blog.cheramy.name/2010/12/22/pureftpd-tls-clamav-sur-debian-lenny)
[http://www.howtoforge.com/virtual-hosting-with-pureftpd-and-mysql-incl-quota-and-bandwidth-management-on-debian-squeeze](http://www.howtoforge.com/virtual-hosting-with-pureftpd-and-mysql-incl-quota-and-bandwidth-management-on-debian-squeeze)
[http://www.howtoforge.com/how-to-configure-pureftpd-to-accept-tls-sessions-on-ubuntu-10.10](http://www.howtoforge.com/how-to-configure-pureftpd-to-accept-tls-sessions-on-ubuntu-10.10)
Site du projet
Doc chez sourceforge
Réf:
[http://www.pureftpd.org/project/pure-ftpd](http://www.pureftpd.org/project/pure-ftpd)
PureFTP avec base MySQL - Installation et configuration du serveur FTP
- Wiki - Tutos - Notes ( MinosHome | MH8 )
- Linux
- Debian (et autres...)
- PureFTP avec base MySQL - Installation et configuration du serveur FTP