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 10/07/2007, 21:00]
Fengy modif note
— (Version actuelle)
Ligne 1: Ligne 1:
-{{tag>​feisty serveur reseau ftp}} 
  
----- 
- 
-====== ProFTPd et MySQL ====== 
- 
-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** 
- 
-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 utile 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`) 
-) TYPE=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'​ 
-) TYPE=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'​ 
-) TYPE=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`) 
-) TYPE=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.localhost 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>​ 
- 
-Remarque sur cette dernière opération : 
- 
-Lors de la création du nouvel utilisateur (ex: proftpd) une erreur s'est glissée dans la requête SQL. 
- 
-Il faut remplacer "​localhost"​ par "​*"​ après la requète GRANT USAGE ON proftpd.localhost. En effet, l'​astérisque permet de séléctionner toute les tables de la base de donnée proftpd. 
- 
-Voici ci-dessous la version corrigée: 
-<code sql> 
-GRANT USAGE ON proftpd.* TO '​proftpd'​@'​localhost'​ IDENTIFIED BY '​password'​ WITH GRANT OPTION; 
-</​code>​ 
- 
-==== 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>​ 
-<​file>​ 
-<​IfModule mod_sql.c>​ 
- ​SQLBackend ​           mysql 
-</​IfModule>​ 
-</​file>​ 
- 
-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. 
- 
-<​code>​ 
-# 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 
-SQLHomedirOnDemand 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,DELE 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>​ 
- 
-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 === 
- 
-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 connection 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é. 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>​ 
- 
-===== 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) 
- 
------- 
-//​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.1184094031.txt.gz
  • Dernière modification: Le 21/07/2007, 16:49
  • (modification externe)