Installer le serveur FTP Proftpd et stocker les utilisateurs dans une base de données MySQL sous Linux Debian Squeeze avec mots de passe encryptés en MD5

18/11/2012 - 10541 consultations - 2 commentaires


Ce tutoriel vous présente comment installer le serveur FTP Proftpd lié à MySQL sous Linux Debian Squeeze ainsi que la gestion de vos utilisateurs dans une table MySQL avec encryption des mots de passe en MD5

Lorsque vous avez beaucoup d'utilisateurs devant envoyer des données sur vos serveurs via FTP, il n'est pas forcément nécessaire de créer un compte utilisateur local à chacun. Il peut être alors intéressant d'utiliser des utilisateurs stockés dans une base de données MySQL à l'aide du module MySQL de ProFTPd.

Cette installation vous permettra de gérer vos utilisateurs dans une table mysql et d'encrypter les mots de passe en MD5.
 
Les droits des fichiers uploadés seront : utilisateur ftp et groupe www-data
Il est donc nécessaire qu'apache2 par exemple soit déjà installé.

L’exemple suivant utilisera :
La base : proftpd
La table : utilisateur
L’utilisateur mysql : userftp
Avec comme mot de passe : passftp

Nous allons donc commencer par installer Proftpd, rien de plus simple :
apt-get update
apt-get install proftpd

Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances      
Lecture des informations d'état... Fait
Note: sélection de "proftpd-basic" au lieu de "proftpd"
Les paquets supplémentaires suivants seront installé :
  libfile-copy-recursive-perl proftpd-basic update-inetd
Paquets suggérés :
  proftpd-doc proftpd-mod-mysql proftpd-mod-pgsql proftpd-mod-ldap proftpd-mod-odbc proftpd-mod-sqlite openbsd-inetd inet-superserver
Les NOUVEAUX paquets suivants seront installés :
  libfile-copy-recursive-perl proftpd-basic update-inetd
0 mis à jour, 3 nouvellement installés, 0 à enlever et 13 non mis à jour.
Inst libfile-copy-recursive-perl (0.38-1 Debian:6.0.6/stable [all])
Inst update-inetd (4.38+nmu1+squeeze1 Debian:6.0.6/stable [all])
Inst proftpd-basic (1.3.3a-6squeeze4 Debian:6.0.6/stable, Debian-Security:6.0/stable [amd64])
Conf libfile-copy-recursive-perl (0.38-1 Debian:6.0.6/stable [all])
Conf update-inetd (4.38+nmu1+squeeze1 Debian:6.0.6/stable [all])
Conf proftpd-basic (1.3.3a-6squeeze4 Debian:6.0.6/stable, Debian-Security:6.0/stable [amd64])

Installer le module proftpd-mod-mysql :
apt-get install proftpd-mod-mysql

Activer la gestion des modules SQL :
nano /etc/proftpd/modules.conf

Décommenter les lignes suivantes :
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_sql_passwd.c

Ajouter le paramétrage de la gestion des utilisateurs par mysql ainsi que l'encryption MD5 :
nano /etc/proftpd/proftpd.conf

 
Ajouter la section suivante :
<Global>
        ServerIdent     Off
        IdentLookups    Off
 
        # Set the user and group that the server normally runs at.
        User            ftp
        Group           www-data
 
        CreateHome      on 711
        SQLAuthTypes    MD5
        SQLPasswordEngine on
        SQLPasswordEncoding hex
        SQLEngine         on
        SQLBackend      mysql
        SQLAuthenticate users
        SQLConnectInfo  proftpd@localhost userftp passftp
        SQLUserInfo     utilisateur nom mot_de_passe uid gid repertoire shell
        SQLDefaultUID   XXX
        SQLDefaultGID   XX
        SQLMinID        100
        AllowOverWrite  on
        AllowForeignAddress     on
        ListOptions "-a"
        <Directory ~>
           AllowOverWrite on
        </Directory>
 
        DefaultRoot ~

        SQLLogFile /var/log/proftpd/mysql.log
        ExtendedLog /var/log/proftpd/auth.log AUTH auth
 
</Global>
 
Remplacer XX par le GID du groupe www-data :
cat /etc/group | grep www-data
www-data:x:33:
Donc XX = 33

Remplacer XXX par le UID de l’utilisateur ftp :
cat /etc/passwd | grep ftp
ftp:x:106:65534::/home/ftp:/bin/false
Donc XXX = 106
 
Se connecter à MySQL et créer la base de données et la table qui va bien :
mysql -u root -proot_password

CREATE DATABASE proftpd ;

USE proftpd;
 
CREATE TABLE `utilisateur` (
  `nom` varchar(255) NOT NULL default '',
  `mot_de_passe` varchar(255) NOT NULL default '',
  `uid` int(11) default '101',
  `gid` int(11) default '65534',
  `repertoire` varchar(255) default NULL,
  `shell` varchar(255) default '/bin/sh',
  UNIQUE KEY `nom` (`nom`),
  KEY `i_nom` (`nom`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Insérer un nouvel utilisateur :
INSERT INTO utilisateur VALUES (‘xenetis’, md5(‘password_xenetis’), ‘106’, ‘33’, ‘/home/www/xenetis.org’, ‘/bin/sh’) ;
 
On créé le dossier correspondant à l’utilisateur FTP avec les bons droits :
mkdir /home/www/xenetis.org
chown ftp:www-data /home/www/xenetis.org

Enfin on redémarre le service Proftpd pour prendre en compte les changements :
/etc/init.d/proftpd restart

L'encryption MD5 fonctionne évidemment aussi bien avec la fonction MD5() de MySQL qu'avec la fonction MD5() de PHP

Pour aller plus loin : http://www.proftpd.org/docs/contrib/mod_sql_passwd.html

Commentaires (2)

Cinetryx - 04/03/2014 à 01h37
Hello,

je n'arrive pas a faire fonctionner proftpd avec cette méthode. Je suis sous Debian 7 wheezy

Il y a deux chose que je ne comprend pas :

Pourquoi dans "SQLUserInfo utilisateur nom mot_de_passe uid gid repertoire shell" il y a 'nom' ? D'ou viens 'nom', utilisateur n'est il pas normalement le nom de la table ?

Ensuite comment etre sure de la valeur du shell (/bin/sh/), sur ma config j'ai ftp=>bin/false et www-data => /bin/sh mais mon dossier a bien les bons droits :
drwxr-xr-x 2 ftp www-data 4096 févr. 25 11:10 ftp

Malgré cela j'obtiens cette erreur : '1142'
Mar 04 01:23:07 mod_sql/4.3[17815]: message: 'SELECT command denied to user 'proftpd'@'localhost' for table 'ftpuser'

D'ou viendrait le probleme ?

Merci d'avance !

Nicolo - 04/03/2014 à 09h55
Bonjour, comme décrit dans le CREATE TABLE :
- utilisateur est le nom de la table
- nom est le champ de cette table correspondant au login
- mot_de_passe est le champ de mot de passe

Dans ton log d'erreur, tu essais de requêter sur la table ftpuser.

La ligne de config SQLUserInfo doit être en concordance avec ta table de user FTP

Commentez cet article

Nom (obligatoire)
E-mail (obligatoire)
Site Internet (facultatif)
code anti-spam

Me tenir inform� des nouveaux messages


encrypted.pngSauvegarde par ssh avec la commande scp avec clé publique - clé privée
Ce tutoriel présente comment effectuer une copie de fichier entre 2 serveurs en utilisant scp, en passant par des clé publique et clé privée afin de ne pas avoir à saisir de mot de passe
log.pngInstallation d'un systeme de monitoring MRTG (Multi Router Traffic Grapher) sous debian
Ce tutoriel a pour but d'installer l'outil de monitoring MRTG. Cet outil permet de générer des graphiques en fonction de données SNMP, ou de scripts shell.
encrypted.pngConnexion ssh sous debian etch et lenny avec clé publique - privée
Ce tutoriel vous présente comment vous connecter sur votre serveur Debian (Etch et Lenny) en ssh, scp, sftp à partir de Windows avec clé publique privée (sans avoir à taper de mot de passe)
terminal.pngVider la mémoire cache d'un serveur Linux Debian
Ce tutoriel vous présente comment récupérer la mémoire cache alouée mais non utilisée par le système afin de la rendre disponible aux processus qui en ont besoin.
terminal.pngServeur ftp proftpd avec utilisateurs virtuels sous linux debian ubuntu
Ce tutoriel vous présente comment installer le serveur ftp proftpd à partir des paquets debian. Pour éviter de créer autant d'utilisateurs Linux que de compte FTP il est possible de créer des utilisateurs virtuels seulement disponibles pour le serveur FTP
terminal.pngCommandes de base Debian et Ubuntu
Liste de commandes Linux les plus utilisées et les plus courantes sous Debian et Ubuntu avec les options qui vont biens
kcmdevices.pngInstaller et formater un disque dur externe usb sous Linux Debian Etch
Ce tutoriel vous présente comment installer votre dique usb sous Linux debian de l'installation en passant par le formatage jusqu'au montage dans votre système de fichier
mycomputer.pngMise à jour de votre distribution Linux Debian 5.0 Lenny à Linux Debian 6.0 Squeeze
Ce tutoriel vous indique comment mettre à jour votre distribution Linux Debian 5.0 Lenny à Linux Debian 6.0 Squeeze
encrypted.pngConnexion ssh sous debian sarge avec clé publique - privée
Ce tutoriel vous présente comment vous connecter sur votre serveur Linux en ssh, scp, sftp à partir de Windows avec clé publique privée