Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
proftpd_et_mysql [Le 08/08/2013, 16:56]
84.100.197.105 [La base de données MySQL]
— (Version actuelle)
Ligne 1: Ligne 1:
-{{tag>​Feisty serveur réseau ftp}} 
  
----- 
-<note warning>​Attention ! Ce tutoriel ne fonctionne que pour les versions inférieures à 1.2.0 de proftpd, donc ne fonctionnera pas avec la version actuellement disponible dans les dépôts universe.</​note>​ 
- 
-====== ProFTPd et MySQL et TLS SSL====== 
- 
-Cette page traite la procédure à suivre pour installer un serveur FTP en utilisant ProFTPd avec la gestion des quotas et des utilisateurs par la base de données MySQL. 
- 
- 
-Le fait d'​utiliser l'​authentification de ProFTPd par base de données vous permet, par exemple, de faire une page PHP de configuration ou d'​administrer facilement vos comptes FTP via l'​interface Web de PhpMyAdmin. 
- 
-<​note>​ 
-La procédure traitée sur cette page considère qu'une solution LAMP a déjà été installé sur votre machine. Pour l'​installation d'une solution LAMP, suivez [[lamp|ce tutorial]] 
-</​note>​ 
- 
-Cette procédure installera sur votre machine : 
-  *proftpd 
-  *proftpd-mysql 
- 
-===== Installation ===== 
- 
-Pour installer le serveur FTP avec le support de MySQL, vérifiez d'​abord que vos [[depots#​universe_et_multiverse|dépôts Universe]] sont bien activés.\\ 
- 
-Et ensuite, 
-[[:​tutoriel:​comment_installer_un_paquet|installez les paquets]] **proftpd proftpd-mysql** 
-<​note>​le paquet se nomme proftpd-mod-mysql sur débian.</​note>​ 
-A la question //"​Lancer ProFTPd à partir d'​inetd ou indépendamment ?"//, répondez //​indépendamment//,​ à moins de savoir ce que vous faites en choisissant //inetd//. 
- 
-<note importante>​ 
-**Pour l'​utilisation de ProFTPd avec MySQL, je vous déconseille d'​installer et d'​utiliser l'​interface graphique gproftpd. Sauf si vous voulez avoir un fichier de configuration compromis.** 
-</​note>​ 
- 
-===== Configuration ===== 
- 
- 
- 
- 
-==== La base de données MySQL ==== 
- 
-Je considère ici que la base de données utilisée pour ProFTPd s'​appelle **proftpd** et que le nouvel utilisateur se nommera **proftpd** avec comme mot de passe **password**. Cependant les trois valeurs peuvent être modifiées selon votre choix. 
- 
-Ensuite, il faut créer la base de données et les tables utiles pour la gestion des utilisateurs et des quotas. Pour cela, connectez vous à votre serveur MySQL (soit par ligne de commande ou par PhpMyAdmin pour ceux qui ont du mal avec SQL) et insérez ces lignes : 
- 
-<code sql> 
-CREATE DATABASE `proftpd`; 
-USE proftpd; 
- 
---  
--- Table structure for table `ftpgroup` 
---  
-CREATE TABLE `ftpgroup` ( 
-`groupname` varchar(16) NOT NULL default '',​ 
-`gid` smallint(6) NOT NULL default '​5500',​ 
-`members` varchar(16) NOT NULL default '',​ 
-KEY `groupname` (`groupname`) 
-) Engine=MyISAM COMMENT='​Table des groupes ProFTPD';​ 
- 
---  
--- Table structure for table `ftpquotalimits` 
---  
-CREATE TABLE `ftpquotalimits` ( 
-`name` varchar(30) default NULL, 
-`quota_type` enum('​user','​group','​class','​all'​) NOT NULL default '​user',​ 
-`par_session` enum('​false','​true'​) NOT NULL default '​false',​ 
-`limit_type` enum('​soft','​hard'​) NOT NULL default '​soft',​ 
-`bytes_up_limit` float NOT NULL default '​0',​ 
-`bytes_down_limit` float NOT NULL default '​0',​ 
-`bytes_transfer_limit` float NOT NULL default '​0',​ 
-`files_up_limit` int(10) unsigned NOT NULL default '​0',​ 
-`files_down_limit` int(10) unsigned NOT NULL default '​0',​ 
-`files_transfer_limit` int(10) unsigned NOT NULL default '​0'​ 
-) Engine=MyISAM COMMENT='​Table des quotas ProFTPD';​ 
- 
---  
--- Table structure for table `ftpquotatotal` 
---  
-CREATE TABLE `ftpquotatotal` ( 
-`name` varchar(30) NOT NULL default '',​ 
-`quota_type` enum('​user','​group','​class','​all'​) NOT NULL default '​user',​ 
-`bytes_up_total` float NOT NULL default '​0',​ 
-`bytes_down_total` float NOT NULL default '​0',​ 
-`bytes_transfer_total` float NOT NULL default '​0',​ 
-`files_up_total` int(10) unsigned NOT NULL default '​0',​ 
-`files_down_total` int(10) unsigned NOT NULL default '​0',​ 
-`files_transfer_total` int(10) unsigned NOT NULL default '​0'​ 
-) Engine=MyISAM COMMENT='​Table des compteurs des quotas ProFTPD';​ 
- 
---  
--- Table structure for table `ftpuser` 
---  
-CREATE TABLE `ftpuser` ( 
-`id` int(10) unsigned NOT NULL auto_increment,​ 
-`userid` varchar(32) NOT NULL default '',​ 
-`passwd` varchar(32) NOT NULL default '',​ 
-`uid` smallint(6) NOT NULL default '​5500',​ 
-`gid` smallint(6) NOT NULL default '​5500',​ 
-`homedir` varchar(255) NOT NULL default '',​ 
-`shell` varchar(16) NOT NULL default '/​bin/​false',​ 
-`count` int(11) NOT NULL default '​0',​ 
-`accessed` datetime NOT NULL default '​0000-00-00 00:​00:​00',​ 
-`modified` datetime NOT NULL default '​0000-00-00 00:​00:​00',​ 
-`LoginAllowed` enum('​true','​false'​) NOT NULL default '​true',​ 
-PRIMARY KEY (`id`) 
-) Engine=MyISAM COMMENT='​Table des utlisateurs ProFTPD'; ​ 
-</​code>​ 
- 
-Finalement, il ne reste plus qu'à créer un nouvel utilisateur possédant seulement les droits de lire les données de la base proftpd. 
- 
-Pour cela, utilisez cette commandes dans votre serveur MySQL. 
- 
-<code sql> 
-GRANT USAGE ON proftpd.* TO '​proftpd'​@'​localhost'​ IDENTIFIED BY '​password'​ WITH GRANT OPTION; 
-</​code>​ 
- 
-<​note>​ 
-Si votre serveur MySQL n'est pas sur la même machine que ProFTPd, remplacez localhost par le nom de la machine (du serveur MySQL) ou par * 
-</​note>​ 
-<​note>​ 
-Les droits "​USAGE"​ suffisent au fonctionnement,​ cependant si vous souhaitez administrer les comptes en vous identifiant sur la base de données en tant que proftpd, il vous faut lui donner les droits de modifier les tables: 
-<code sql> 
-GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO '​proftpd'​@'​localhost'​ IDENTIFIED BY '​password'​ WITH GRANT OPTION; 
-</​code>​ 
-</​note>​ 
- 
-==== 1-Le serveur FTP ProFTPd ==== 
- 
-On passe maintenant à la configuration de ProFTPd. 
-Pour cela, on édite le fichier de configuration de ProFTPd : 
- 
-[[:​tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/​etc/​proftpd/​proftpd.conf** 
- 
-Ensuite, trouvez et décommentez les lignes suivantes (en retirant les # au début de chaque ligne) : 
- 
-<​file>​ 
-DefaultRoot ​           ~ 
-</​file>​ 
-<​file>​ 
-RequireValidShell ​       off 
-</​file>​ 
- 
-Attention dans le fichier **/​etc/​proftpd/​proftpd.conf**,​ la valeur doit être RequireValidShell et non RequireValidShells,​ il faut donc laisser commenter "​RequireValidShells off" et rajouter "​RequireValidShell ​   off" 
- 
-<​file>​ 
-<​IfModule mod_sql.c>​ 
- ​SQLBackend ​           mysql 
-</​IfModule>​ 
-</​file>​ 
-------------------------- Avec Quota engine sur on ca fonctionne mieux 
-<​file>​ 
-<​IfModule mod_quotatab.c>​ 
-QuotaEngine on 
-</​IfModule>​ 
-</​file>​ 
-<​code>​ 
-On rajoute ces lignes à la fin du fichier tout en faisant attention de modifier le nom et le mot de passe de l'​utilisateur MySQL dans la troisième ligne. 
- 
-# Mod MySQL 
-# ========= 
-# Les mots de passe sont cryptes dans la base avec la fonction ENCRYPT (MySQL) 
-SQLAuthTypes Crypt 
-SQLAuthenticate users* groups* 
- 
-# Modifiez cette ligne selon l'​utilisateur et le mot de passe definit plutot 
-SQLConnectInfo proftpd@localhost proftpd password 
- 
-# On donne a ProFTPd le nom des colonnes de la table usertable 
-SQLUserInfo ftpuser userid passwd uid gid homedir shell 
-SQLUserWhereClause "​LoginAllowed = '​true'"​ 
- 
-# On donne a ProFTPd le nom des colonnes de la table "​grouptable"​ 
-SQLGroupInfo ftpgroup groupname gid members 
- 
-# Creer le repertoire home de l'​utilisateur si il n'​existe pas 
-CreateHome on 
- 
-# Met a jour les compteurs a chaque connection d'un utilisateur 
-SQLLog PASS updatecount 
-SQLNamedQuery updatecount UPDATE "​count=count+1,​ accessed=now() WHERE userid='​%u'"​ ftpuser 
- 
-# Met a jour les compteurs a chaque upload ou download d'un utilisateur 
-SQLLog STOR,RETR modified 
-SQLNamedQuery modified UPDATE "​modified=now() WHERE userid='​%u'"​ ftpuser 
- 
-# Mod quota 
-# ========= 
-QuotaEngine on 
-QuotaDirectoryTally on 
-QuotaDisplayUnits Mb 
-QuotaShowQuotas on 
- 
-# Definit les requetes SQL pour que ProFTPd recupere les infos sur les quotas 
-SQLNamedQuery get-quota-limit SELECT "name, quota_type, par_session,​ limit_type, bytes_up_limit,​ bytes_down_limit,​ bytes_transfer_limit,​ files_up_limit,​ files_down_limit,​ files_transfer_limit FROM ftpquotalimits WHERE name = '​%{0}'​ AND quota_type = '​%{1}'"​ 
-SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_up_total,​ bytes_down_total,​ bytes_transfer_total,​ files_up_total,​ files_down_total,​ files_transfer_total FROM ftpquotatotal WHERE name = '​%{0}'​ AND quota_type = '​%{1}'"​ 
-SQLNamedQuery update-quota-tally UPDATE "​bytes_up_total = bytes_up_total + %{0}, bytes_down_total = bytes_down_total + %{1}, bytes_transfer_total = bytes_transfer_total + %{2}, files_up_total = files_up_total + %{3}, files_down_total = files_down_total + %{4}, files_transfer_total = files_transfer_total + %{5} WHERE name = '​%{6}'​ AND quota_type = '​%{7}'"​ ftpquotatotal 
-SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatotal 
- 
-QuotaLimitTable sql:/​get-quota-limit 
-QuotaTallyTable sql:/​get-quota-tally/​update-quota-tally/​insert-quota-tally 
- 
-# Gestion des logs 
-# ================ 
-# Enregistre les requetes SQL dans /​var/​log/​proftpd/​mysql.log 
-SQLLogFile /​var/​log/​proftpd/​mysql.log 
- 
-# Enregistre les authentifications 
-LogFormat auth "%v [%P] %h %t \"​%r\"​ %s" 
-ExtendedLog /​var/​log/​proftpd/​auth.log AUTH auth 
- 
-# Enregistre les acces aux fichiers 
-LogFormat write "%h %l %u %t \"​%r\"​ %s %b" 
-ExtendedLog /​var/​log/​proftpd/​access.log WRITE,READ write 
-</​code>​ 
- 
- 
-Ensuite, trouvez et décommentez les lignes suivantes dans **modules.conf** (en retirant les # au début de chaque ligne) :  
- 
-<code bash> 
-LoadModule mod_sql.c 
-LoadModule mod_sql_mysql.c 
-</​code>​ 
- 
-Et Finalement, on redemarre le serveur FTP. 
- 
-<code bash> 
-sudo /​etc/​init.d/​proftpd restart 
-</​code>​ 
- 
-===== Utilisation ===== 
- 
-Maintenant que la configuration est faite, nous allons voir comment gérer les utilisateurs à travers la base de données. 
- 
-Je vous conseille d'​utiliser PhpMyAdmin pour ceux qui ne connaissent pas le langage SQL. 
- 
-==== Gestion des utilisateurs ==== 
- 
-=== Ajout d'un utilisateur === 
- 
-<note importante>​ 
-**Avec la configuration présente ici seul les uid et gid supérieurs à 1000 fonctionnent.** 
-</​note>​ 
- 
-Voici un exemple de la création de l'​utilisateur **test** avec un mot de passe **pwd**. Cet utilisateur aura accès au repertoire **/​home/​ftp/​test** avec les droits de l'​utilisateur (UID) **5500**, et de groupe (GID) **5500**, sans shell (**/​bin/​false**). 
- 
-La valeur '​LoginAllowed'​ est mise à **true** pour autoriser la connexion de cet utilisateur,​ à **false** pour l'​interdire. 
- 
-<code sql> 
-INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed` ) VALUES ('',​ '​test',​ ENCRYPT('​pwd'​),​ '​5500',​ '​5500',​ '/​home/​ftp/​test',​ '/​bin/​false',​ '',​ '',​ '',​ '​true'​ ); 
-</​code>​ 
- 
-//count// représente le nombre d'​authentifications effectués par cet utilisateur. 
- 
- 
-//​accessed//​ représente la date du dernier accès. 
- 
- 
-//​modified//​ représente la date de la dernière écriture. 
- 
-=== Suppression d'un utilisateur === 
- 
-Voici un exemple pour supprimer l'​utilisateur test créée précédemment. 
- 
- 
-<code sql> 
-DELETE FROM `ftpuser` WHERE `userid`='​test';​ 
-</​code>​ 
- 
- 
-==== Gestion des groupes ==== 
- 
-=== Affecter un utilisateur à un groupe === 
- 
-Voici un exemple pour affecter l'​utilisateur **test** au groupe **group_test** avec les droits de groupe (GID) du groupe **5500**. 
- 
-<code sql> 
-INSERT INTO `ftpgroup` ( `groupname` , `gid` , `members` ) VALUES ('​group_test',​ '​5500',​ '​test'​);​ 
-</​code>​ 
- 
-=== Enlever un utilisateur d'un groupe === 
- 
-On reprend l'​exemple ci dessus en enlevant l'​utilisateur **test** du groupe **group_test**. 
- 
-<code sql> 
-DELETE FROM `ftpgroup` WHERE `members`='​test';​ 
-</​code>​ 
- 
- 
-==== Gestion des quotas ==== 
- 
-La table //​ftpquotalimits//​ contient la description des quotas. 
- 
-La table //​ftpquotatotal//​ contient les statistiques d'​utilisation correspondant aux règles des quotas défini dans la table //​ftpquotalimits//​. Cette table permet à ProFTPd de gérer les quotas. 
- 
-=== Ajouter une règle de quota === 
- 
-On exécute la requête suivante : 
- 
-<code sql> 
-INSERT INTO `ftpquotalimits` ( `name`, `quota_type`,​ `par_session`,​ `limit_type`,​ `bytes_up_limit`,​ `bytes_down_limit`,​ `bytes_transfer_limit`,​ `files_up_limit`,​ `files_down_limit`,​ `files_transfer_limit` ) 
-VALUES ( '​NOM'​ , '​TYPE',​ '​SESSION',​ '​LIMIT_TYPE',​ '​B_UP',​ '​B_DOWN',​ '​B_TRANS',​ '​F_UP',​ '​F_DOWN',​ '​F_TRANS'​);​ 
-</​code>​ 
- 
-  *NOM : Nom de l'​utilisateur,​ du groupe ou de la règle selon la valeur de TYPE. 
-  *TYPE : //user// si le quota s'​applique à un utilisateur,​ //group// à un groupe, //class// à une classe (ici inutile), //all// à tous les utilisateurs. 
-  *SESSION : //true// si les quotas doivent être remis à zéro à chaque nouvelle session, //false// sinon. ('​false'​ est conseillé). 
-  *LIMIT_TYPE : //soft// pour une mesure logicielle de la taille, //hard// pour une mesure hardware. 
-  *B_UP : Taille (en Mbytes) autorisé à être transféré sur le serveur. 
-  *B_DOWN : Taille (en Mbytes) autorisé à être téléchargé à partir du serveur. 
-  *B_TRANS : Taille (en Mbytes) autorisé à transféré sur et à partir du serveur (upload+download). 
-  *F_UP : Nombre de fichiers autorisé à être transféré sur le serveur. 
-  *F_DOWN : Nombre de fichiers autorisé à être téléchargé à partir du serveur. 
-  *F_TRANS : Nombre de fichiers autorisé à transféré sur et à partir du serveur (upload+download). 
- 
-<​note>​ 
-Pour définir un quota illimité à un des champs, mettez une valeur négative ou nulle. 
-</​note>​ 
- 
-<note importante>​ 
-Les quotas de type //all//, //class// ou //group// ne définissent pas un quota pour chaque utilisateur mais un quota partagé par tous les utilisateurs concernés par cette règle. 
-</​note>​ 
- 
-=== Réinitialiser les quotas === 
- 
-Il suffit de supprimer l'​entrée correspondante à la règle devant être réinitialisée. Par exemple si on veut effacer les règles de quota de l'​utilisateur **test**, on exécute la requête SQL suivante : 
- 
-<code sql> 
-DELETE FROM `ftpquotatotal` WHERE `name`='​test';​ 
-</​code>​ 
- 
-Si vous voulez réinitialiser tous les quotas, par exemple tous les mois, faites une tâche cron se connectant sur le serveur et exécutant la requête suivante : 
- 
-<code sql> 
-TRUNCATE TABLE `ftpquotatotal`;​ 
-</​code>​ 
- 
- 
-==== Pour ceux ayant des problèmes pour l'​utilisation des quotas ==== 
- 
-=== Chargement du module mod_quotatab_sql.c === 
- 
-Apparemment,​ plusieurs personnes ont du mal avec les quotas, certains n'​arrivant pas à l'​utiliser. 
- 
-Premièrement,​ vérifiez que le module est bien chargé. ​ 
-Pour ce faire, il faut [[:​tutoriel:​comment_editer_un_fichier|éditer le fichier]] **/​etc/​proftpd/​modules.conf** 
- 
-Il faut rechercher cette ligne ... 
-<​file>​ 
-#LoadModule mod_quotatab_sql.c 
-</​file>​ 
- 
-... et la dé-commenter pour obtenir ceci : 
-<​file>​ 
-LoadModule mod_quotatab_sql.c 
-</​file>​ 
- 
-Si vous ne l'​aviez pas, rajoutez-la . 
- 
-Et Finalement, on redemarre le serveur FTP. 
- 
-<code bash> 
-sudo /​etc/​init.d/​proftpd restart 
-</​code>​ 
- 
- 
-=== Problème d'​unités === 
- 
-Il semblerait que certains problème d'​unités existent. Chez certaines personnes la valeur à entrer dans les champs des limites de quota doivent être exprimées en octets et non en Mo ... Ce qui fait que,par exemple, pour une limite de 100 Mo, il se peut que vous aillez à inscrire la valeur 104857600 (qui correspond au nombre exact d'​octets compris dans 100 Mo) 
- 
-Pour convertir, faites : nombre de Mo multiplié par 1048576 
- 
-===== Ajouter TLS SSL ===== 
- 
-[[http://​doc.ubuntu-fr.org/​proftpd_et_tls_ssl| Proftpd TLS & SSL ]] 
- 
-===== Références ===== 
- 
-  * [[http://​www.proftpd.org/​|Site officiel de ProFTPd]] (en) 
-  * [[http://​www.castaglia.org/​proftpd/​doc/​contrib/​ProFTPD-mini-HOWTO-SQL.html|Documentation plus complète sur ProFTPd et MySQL]] (en) ( lien mort 22/10/2010) 
-  * [[http://​www.proftpd.org/​docs/​howto/​SQL.html|Documentation plus complète sur ProFTPd et MySQL sur le site de ProFTPd]] (en)  
- 
------- 
-//​Contributeur : [[utilisateurs:​Fengy|Fengy]]//​ 
- 
-// Basé sur « [[http://​www.lea-linux.org/​cached/​index/​Reseau-partfic-proftpd_mysql.html| ProFTPD, MySQL et Quota]] » par lea-linux.org//​ 
  • proftpd_et_mysql.1375973777.txt.gz
  • Dernière modification: Le 08/08/2013, 16:56
  • par 84.100.197.105