Serveur FTP authentifié via Mysql
Par PlaceOweb le jeudi, février 22 2007, 00:13 - Système - Lien permanent
Comment faire un serveur FTP avec des utilisateurs virtuels déclarés sous Mysql ?
Pure-FTPd MySQL sous Debian Lenny (5.0.3)
Les paquets du serveur FTP : pure-ftpd
~# apt-cache search pure-ftp pure-ftpd - Pure-FTPd FTP server pure-ftpd-common - Pure-FTPd FTP server (Common Files) pure-ftpd-ldap - Pure-FTPd FTP server with LDAP user authentication pure-ftpd-mysql - Pure-FTPd FTP server with MySQL user authentication pure-ftpd-postgresql - Pure-FTPd FTP server with PostgreSQL user authentication
Installation
~# apt-get install pure-ftpd-mysql Les paquets supplémentaires suivants seront installés : pure-ftpd-common Paquets recommandés : pure-ftpd Les NOUVEAUX paquets suivants seront installés : pure-ftpd-common pure-ftpd-mysql
Note : historiquement pour la gestion des fichiers supérieurs à 2Go, il fallait compiler avec
--with-largefile Support des fichiers de plus de 2 go. (elle est implémentée par défaut à partir de la version 1.0.21)
Mais heureusement pour nous les versions de Debian incluent une version de pure ftpd supérieure à la version 1.0.21
Configuration
Lecture de la doc depuis la documentation Pure-FTPd, section MySQL authentication, ou depuis les fichiers locaux :
cd /usr/share/doc/pure-ftpd-mysql zcat README.MySQL.gz > README.MySQL.txt vim README.MySQL.txt /// !! Configuration des accès au serveur MySQL depuis Pure-FTPd Créer l'utilisateur MySQL, sa base et sa table : ///[sql] CREATE TABLE users ( User VARCHAR(16) BINARY NOT NULL, Password VARCHAR(64) BINARY NOT NULL, Uid INT(11) NOT NULL default '-1', Gid INT(11) NOT NULL default '-1', Dir VARCHAR(128) BINARY NOT NULL, PRIMARY KEY (User) );
Modifier le fichier de configuration pureFTPd mysql.conf pour spécifier nos accès :
~# vim /etc/pure-ftpd/db/mysql.conf
Options de configuration
Pour que chaque utilisateur puisse uniquement accéder au dossier qui lui est attribué, nous allons le chrooter.
~# vim /etc/pure-ftpd/conf/ChrootEveryone
Et entrez simplement "yes", sauvegardez et quittez.
Afficher et accéder aux fichiers commençant par un point. Il suffit de créer un fichier /etc/pure-ftpd/conf/DisplayDotFiles et d'y inscrire : "yes"
Aussi ,dans le cas où le répertoire associé à l'utilisateur virtuel n'existe pas, au lieu de provoquer une erreur, nous allons demander à pure-ftpd de le créer en mettant "yes" dans le nouveau fichier /etc/pure-ftpd/conf/CreateHomeDir
Options de lancement
On configure que serveur en mode "standalone" à la place de "inetd", sans quoi on ne peut pas le lancer via /etc/init.d/pure-ftpd-mysql start
~# vim /etc/default/pure-ftpd-common # STANDALONE_OR_INETD # valid values are "standalone" and "inetd". # Any change here overrides the setting in debconf. STANDALONE_OR_INETD=inetd STANDALONE_OR_INETD=standalone
Lancement du serveur en standalone
~# /etc/init.d/pure-ftpd-mysql start Restarting ftp server: Running: /usr/sbin/pure-ftpd-mysql -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -A -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -E -B
Lancement automatique de pure-ftpd au démarrage du système
~# update-rc.d pure-ftpd-mysql defaults System startup links for /etc/init.d/pure-ftpd-mysql already exist.
Erreur : pure-ftpd: (?@?) [ERROR] Unable to start a standalone server: [Invalid argument]
Au lancement du serveur Pure-FTPd, vous aurez peut être :
pure-ftpd: (?@?) [ERROR] Unable to start a standalone server: [Invalid argument]
Les deux modes de fonctionnement “démon” et processus se confronteraient, l’un empêchant l’autre de se lancer. Résolu en stoppant le processus lié à /usr/sbin/inetd.
Pour prévenir la répétition du problème au prochain lancement du serveur, commentaire de la ligne concernant le service FTP pure-ftpd dans /etc/inetd.conf
#:STANDARD: These are standard services. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
Pure-FTPd MySQL avec DEBIAN ETCH (4.0)
J'ai tester cela avec succès sous DEBIAN ETCH avec pure-ftpd-mysql.
#Installation apt-get install-mysql # Lecture de la doc cd /usr/share/doc/pure-ftpd-common gzip -d README.MySQL.gz vim README.MySQL # Configuration d'accès myqsl vim /etc/pure-ftpd/db/mysql.conf
Création de la base de donnée et de la table avec la structure définie dans le fichier de doc. Ensuite ajout des utilisateurs dans cette table.
Puis lancement définitif en standalone après les erreurs rencontrées reportées par syslog :
- Le serveur ne se lance pas. Dans le fichier /etc/default/pure-ftpd-common j'ai modifié la ligne STANDALONE_OR_INETD=inetd par STANDALONE_OR_INETD=standalone et du coup /etc/init.d/pure-ftpd-mysql start fonctionne !
- [WARNING] Wrong SQL parameters : [SELECT Password FROM users WHERE User="www-data"]
La table n'était pas encore crée.
- [WARNING] Can't login as [www-data]: account disabled
Côté client : 530 Sorry, but I can't trust you Il faut passer le /etc/pure-ftpd/conf/MinUID à une valeur au minimum égale à votre user web.
- [INFO] www-data is now logged in
Ah quelle joie quand tout fonctionne !
D'autres infos sur les sites :
- Installation et configuration du serveur FTP Pure-FTPd sous Debian détaillant les paramètres.
- Problème avec pure-ftpd-mysql précisant des options telles que comment afficher les fichiers commençant par un point.
Il suffit de créer un fichier /etc/pure-ftpd/conf/DisplayDotFiles et d'y inscrire : "yes"
Identiquement, pour bloquer les utilisateurs dans leur home (chroot), rajouter le fichier /etc/pure-ftpd/conf/ChrootEveryone dont le contenu est "yes"
Pure-FTPd MySQL avec SUSE 10
J'ai tester cela avec succès sous SUSE 10 avec pure-ftpd.
Installez avec yast votre serveur FTP : pure-ftpd
5. Support de MySQL Le support de MySQL apporte la possibilité d'assurer l'authentification des utilisateurs via une base de donnée.
5.1. Prérequis
MySQL doit être installé afin d'activer cette fonctionnalité. Pure-FTPd nécessite également d'être compilé avec l'option --with-mysql.
5.2. Configuration de Pure-FTPd
vi pure-ftpd.conf # MySQL configuration file (see README.MySQL) # MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
# If you want to enable PAM authentication, uncomment the following line #PAMAuthentication yes # If you want simple Unix (/etc/passwd) authentication, uncomment this # UnixAuthentication yes
Nous allons créer un fichier de configuration afin d'y placer toutes les options pour le support de MySQL.
vi /etc/pure-ftpd/pureftpd-mysql.conf
MYSQLServer monserveurmysql.mondomaine.com MYSQLPort 3306 #MYSQLSocket /tmp/mysql.sock MYSQLUser root MYSQLPassword rootpw MYSQLDatabase pureftpd MYSQLCrypt cleartext MYSQLGetPW SELECT Password FROM users WHERE User="\L" MYSQLGetUID SELECT Uid FROM users WHERE User="\L" MYSQLGetGID SELECT Gid FROM users WHERE User="\L" MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
PureFTPd utilise des variables pour ses requêtes SQL, comme \L dans l'exemple: \L désigne le login de l'utilisateur. \I désigne l'adresse IP a laquelle le client se connecte. \P désigne le port auqel le client se connecte. \R désigne l'adresse IP du client. \D désigne l'adresse IPv4 du client au format décimal.
Il suffit maintenant de lancer Pure-FTPd avec l'option -l mysql:
/usr/sbin/pure-ftpd -l mysql:/etc/pure-ftpd/pureftpd-mysql.conf &
ou plus simplement
/etc/init.d/pure-ftpd restart
Notez qu'il est possible de mixer plusieurs méthodes d'authentification qui se compléteront les unes aux autres. 5.3. Strucures des tables MySQL
On commence par créer une base pureftpd (via phpmyadmin par exemple).
Ensuite on crée la table users:
CREATE TABLE users ( User varchar(16) NOT NULL default '', Password varchar(64) NOT NULL default '', Uid int(11) NOT NULL default '-1', Gid int(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', PRIMARY KEY (User) );
Vous pouvez dès lors rajouter des utilisateurs dans la base et profiter de votre serveur FTP. N'oubliez pas de définir le Uid et Gid.
Ensuite pour connaître les utilisateurs définis sur votre serveur, utilisez la commande :
pure-ftpwho
Article réalisé selon l'explication de pure ftpd par supinfo sûrement lui même réalisé suivant how to forge : pure ftpd mysql et relatifs aux articles :