proftp sur comptes mysql

Ok, le ftp en 2015, c'est à éviter. Je suppose que vous ferez ça en local sur une DMZ uniquement. On va voir ici comment installer proftp, avec une gestion des comptes sur une base mysql.

Roadmap du document:

  • 06/10/2010: création
  • 23/11/2015: Correction erreur mysql, fichier de conf de proftp, ajout d'un exemple de création d'un utilisateur.

Bases de données:

La database se nome ftp, l'user 'proftpd'@'localhost' y a accès. Dans le prompt mysql pour créer la base et l'user:

CREATE database ftp;
GRANT ALL ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'mot-de-passe';
QUIT

Puis pour créer les tables, télécharger le script sur ce blog.

cd ~
wget https://blog-du-grouik.tinad.fr/public/createtablesftp.sql
mysql -u root -p ftp < createtablesftp.sql

Installation

apt-get install proftpd proftpd-mod-mysql

proftpd-inetd-ou-Indep.jpg je choisis indépendant, (proftp tournera en permanence et pompera un peu plus de ressources. c'est pas bien vu mon utilisation, mais c'est plus stable et plus simple à configurer.)

addgroup proftpd

Activer le module mysql:

Dans le fichier /etc/proftpd/modules.conf dé-commenter les lignes suivantes:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Paramétrage proftpd:

Remplacez le fichier /etc/proftpd/proftpd.conf par celui ci dessous proposé ici:

cd /etc/proftpd
mv proftpd.conf proftpd.conf.old
wget https://blog-du-grouik.tinad.fr/public/proftpd.conf
vi proftpd.conf

Remplacez ************** par le mot de passe mysql de proftpd dans la ligne SQLConnectInfo ftp@localhost proftpd **********

Mais c'est pas bien, je le conçois, idéalement l'user ftp devrait être le propriétaire des dossiers publics (faisant partie du site) avec des droits en écriture et lecture. tandis que www-data devrait faire partie du groupe de l'user, ce dernier ayant accès en lecture uniquement (sauf dans les répertoires où le site internet a besoin d'écrire).

Une telle organisation pourrait limiter les conséquences de l'exploitation d'une faille dans un script php. mais à gérer site par site, c'est super lourd.

Redémarrer proftpd:

service proftpd restart

Créer des utilisateurs

#Créer le repertoire
mkdir -p /home/ftp/user1
chown -R ftp:ftp /home/ftp/user1

Créer l'user en dans la base de donnée. "120" correspond à l'uid unix du compte ftp.

USE ftp;
INSERT INTO ftpuser(userid,passwd,uid,gid,homedir,modified) VALUES 
('user1',ENCRYPT('mot-de-passe'),'120','120','/home/ftp/user1',NOW());

Vous pouvez ajouter des utilisateurs dans la base de données en utilisant phpmyadmin par exemple.

Page top