Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| proftpd_et_mysql [Le 23/09/2008, 14:45] – jose.e | proftpd_et_mysql [Le 12/04/2017, 20:40] (Version actuelle) – obsolète L'Africain | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> | ||
| - | ---- | ||
| - | |||
| - | ====== 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' | ||
| - | |||
| - | < | ||
| - | La procédure traitée sur cette page considère qu'une solution LAMP a déjà été installé sur votre machine. Pour l' | ||
| - | </ | ||
| - | |||
| - | Cette procédure installera sur votre machine : | ||
| - | *proftpd | ||
| - | *proftpd-mysql | ||
| - | |||
| - | ===== Installation ===== | ||
| - | |||
| - | Pour installer le serveur FTP avec le support de MySQL, vérifiez d' | ||
| - | |||
| - | Et ensuite, | ||
| - | [[: | ||
| - | |||
| - | A la question //" | ||
| - | |||
| - | <note importante> | ||
| - | **Pour l' | ||
| - | </ | ||
| - | |||
| - | ===== Configuration ===== | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ==== La base de données MySQL ==== | ||
| - | |||
| - | Je considère ici que la base de données utilisée pour ProFTPd s' | ||
| - | |||
| - | 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 ' | ||
| - | `members` varchar(16) NOT NULL default '', | ||
| - | KEY `groupname` (`groupname`) | ||
| - | ) TYPE=MyISAM COMMENT=' | ||
| - | |||
| - | -- | ||
| - | -- Table structure for table `ftpquotalimits` | ||
| - | -- | ||
| - | CREATE TABLE `ftpquotalimits` ( | ||
| - | `name` varchar(30) default NULL, | ||
| - | `quota_type` enum(' | ||
| - | `par_session` enum(' | ||
| - | `limit_type` enum(' | ||
| - | `bytes_up_limit` float NOT NULL default ' | ||
| - | `bytes_down_limit` float NOT NULL default ' | ||
| - | `bytes_transfer_limit` float NOT NULL default ' | ||
| - | `files_up_limit` int(10) unsigned NOT NULL default ' | ||
| - | `files_down_limit` int(10) unsigned NOT NULL default ' | ||
| - | `files_transfer_limit` int(10) unsigned NOT NULL default ' | ||
| - | ) TYPE=MyISAM COMMENT=' | ||
| - | |||
| - | -- | ||
| - | -- Table structure for table `ftpquotatotal` | ||
| - | -- | ||
| - | CREATE TABLE `ftpquotatotal` ( | ||
| - | `name` varchar(30) NOT NULL default '', | ||
| - | `quota_type` enum(' | ||
| - | `bytes_up_total` float NOT NULL default ' | ||
| - | `bytes_down_total` float NOT NULL default ' | ||
| - | `bytes_transfer_total` float NOT NULL default ' | ||
| - | `files_up_total` int(10) unsigned NOT NULL default ' | ||
| - | `files_down_total` int(10) unsigned NOT NULL default ' | ||
| - | `files_transfer_total` int(10) unsigned NOT NULL default ' | ||
| - | ) TYPE=MyISAM COMMENT=' | ||
| - | |||
| - | -- | ||
| - | -- 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 ' | ||
| - | `gid` smallint(6) NOT NULL default ' | ||
| - | `homedir` varchar(255) NOT NULL default '', | ||
| - | `shell` varchar(16) NOT NULL default '/ | ||
| - | `count` int(11) NOT NULL default ' | ||
| - | `accessed` datetime NOT NULL default ' | ||
| - | `modified` datetime NOT NULL default ' | ||
| - | `LoginAllowed` enum(' | ||
| - | PRIMARY KEY (`id`) | ||
| - | ) TYPE=MyISAM COMMENT=' | ||
| - | </ | ||
| - | |||
| - | 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 ' | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | 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 * | ||
| - | </ | ||
| - | |||
| - | 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 " | ||
| - | |||
| - | Voici ci-dessous la version corrigée: | ||
| - | <code sql> | ||
| - | GRANT USAGE ON proftpd.* TO ' | ||
| - | </ | ||
| - | |||
| - | |||
| - | Il semble qu'une autre erreur s'est glissée dans cette requête SQL. En effet, si on laisse uniquement le privilège USAGE, alors l' | ||
| - | La version corrigée donne ceci: | ||
| - | <code sql> | ||
| - | GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO ' | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== Le serveur FTP ProFTPd ==== | ||
| - | |||
| - | On passe maintenant à la configuration de ProFTPd. | ||
| - | Pour cela, on édite le fichier de configuration de ProFTPd : | ||
| - | |||
| - | [[: | ||
| - | |||
| - | Ensuite, trouvez et décommentez les lignes suivantes (en retirant les # au début de chaque ligne) : | ||
| - | |||
| - | < | ||
| - | DefaultRoot | ||
| - | </ | ||
| - | < | ||
| - | RequireValidShell | ||
| - | </ | ||
| - | |||
| - | Attention dans le fichier **/ | ||
| - | |||
| - | < | ||
| - | < | ||
| - | | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | On rajoute ces lignes à la fin du fichier tout en faisant attention de modifier le nom et le mot de passe de l' | ||
| - | |||
| - | < | ||
| - | # 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' | ||
| - | 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 " | ||
| - | |||
| - | # On donne a ProFTPd le nom des colonnes de la table " | ||
| - | SQLGroupInfo ftpgroup groupname gid members | ||
| - | |||
| - | # Creer le repertoire home de l' | ||
| - | SQLHomedirOnDemand on | ||
| - | |||
| - | # Met a jour les compteurs a chaque connection d'un utilisateur | ||
| - | SQLLog PASS updatecount | ||
| - | SQLNamedQuery updatecount UPDATE " | ||
| - | |||
| - | #Met a jour les compteurs a chaque upload ou download d'un utilisateur | ||
| - | SQLLog STOR,RETR modified | ||
| - | SQLNamedQuery modified UPDATE " | ||
| - | |||
| - | # 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, | ||
| - | SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_up_total, | ||
| - | SQLNamedQuery update-quota-tally UPDATE " | ||
| - | SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatotal | ||
| - | |||
| - | QuotaLimitTable sql:/ | ||
| - | QuotaTallyTable sql:/ | ||
| - | |||
| - | # Gestion des logs | ||
| - | # ================ | ||
| - | # Enregistre les requetes SQL dans / | ||
| - | SQLLogFile / | ||
| - | |||
| - | # Enregistre les authentifications | ||
| - | LogFormat auth "%v [%P] %h %t \" | ||
| - | ExtendedLog / | ||
| - | |||
| - | # Enregistre les acces aux fichiers | ||
| - | LogFormat write "%h %l %u %t \" | ||
| - | ExtendedLog / | ||
| - | </ | ||
| - | |||
| - | Et Finalement, on redemarre le serveur FTP. | ||
| - | |||
| - | <code bash> | ||
| - | sudo / | ||
| - | </ | ||
| - | |||
| - | ===== 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' | ||
| - | |||
| - | ==== Gestion des utilisateurs ==== | ||
| - | |||
| - | === Ajout d'un utilisateur === | ||
| - | |||
| - | Voici un exemple de la création de l' | ||
| - | |||
| - | La valeur ' | ||
| - | |||
| - | <code sql> | ||
| - | INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed` ) VALUES ('', | ||
| - | </ | ||
| - | |||
| - | //count// représente le nombre d' | ||
| - | |||
| - | |||
| - | // | ||
| - | |||
| - | |||
| - | // | ||
| - | |||
| - | === Suppression d'un utilisateur === | ||
| - | |||
| - | Voici un exemple pour supprimer l' | ||
| - | |||
| - | |||
| - | <code sql> | ||
| - | DELETE FROM `ftpuser` WHERE `userid`=' | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== Gestion des groupes ==== | ||
| - | |||
| - | === Affecter un utilisateur à un groupe === | ||
| - | |||
| - | Voici un exemple pour affecter l' | ||
| - | |||
| - | <code sql> | ||
| - | INSERT INTO `ftpgroup` ( `groupname` , `gid` , `members` ) VALUES (' | ||
| - | </ | ||
| - | |||
| - | === Enlever un utilisateur d'un groupe === | ||
| - | |||
| - | On reprend l' | ||
| - | |||
| - | <code sql> | ||
| - | DELETE FROM `ftpgroup` WHERE `members`=' | ||
| - | </ | ||
| - | |||
| - | ==== Gestion des quotas ==== | ||
| - | |||
| - | La table // | ||
| - | |||
| - | La table // | ||
| - | |||
| - | === Ajouter une règle de quota === | ||
| - | |||
| - | On exécute la requête suivante : | ||
| - | |||
| - | <code sql> | ||
| - | INSERT INTO `ftpquotalimits` ( `name`, `quota_type`, | ||
| - | VALUES ( ' | ||
| - | </ | ||
| - | |||
| - | *NOM : Nom de l' | ||
| - | *TYPE : //user// si le quota s' | ||
| - | *SESSION : //true// si les quotas doivent être remis à zéro à chaque nouvelle session, //false// sinon. (' | ||
| - | *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). | ||
| - | |||
| - | < | ||
| - | Pour définir un quota illimité à un des champs, mettez une valeur négative ou nulle. | ||
| - | </ | ||
| - | |||
| - | <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. | ||
| - | </ | ||
| - | |||
| - | === Réinitialiser les quotas === | ||
| - | |||
| - | Il suffit de supprimer l' | ||
| - | |||
| - | <code sql> | ||
| - | DELETE FROM `ftpquotatotal` WHERE `name`=' | ||
| - | </ | ||
| - | |||
| - | 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`; | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ===== Ajouter TLS SSL ===== | ||
| - | |||
| - | Allez dans le dossier de configuration proftpd | ||
| - | |||
| - | < | ||
| - | cd / | ||
| - | </ | ||
| - | |||
| - | créé le dossier ssl | ||
| - | |||
| - | < | ||
| - | mkdir ssl | ||
| - | </ | ||
| - | |||
| - | on ce déplace dedans | ||
| - | |||
| - | < | ||
| - | cd ssl/ | ||
| - | </ | ||
| - | |||
| - | on vas générer le certificat ssl | ||
| - | |||
| - | < | ||
| - | openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out proftpd-rsa.pem -keyout proftpd-key.pem | ||
| - | </ | ||
| - | |||
| - | on protège la key | ||
| - | |||
| - | < | ||
| - | chmod 440 proftpd-key.pem | ||
| - | </ | ||
| - | |||
| - | on edite le fichier / | ||
| - | pour rajouter cela a la fin du fichier | ||
| - | |||
| - | < | ||
| - | TLSEngine | ||
| - | |||
| - | TLSRequired | ||
| - | |||
| - | TLSRSACertificateFile | ||
| - | |||
| - | TLSRSACertificateKeyFile | ||
| - | |||
| - | TLSLog | ||
| - | </ | ||
| - | |||
| - | on cherche dans le fichier ceci | ||
| - | |||
| - | < | ||
| - | < | ||
| - | TLSEngine off | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | et on le modifie comme cela | ||
| - | |||
| - | < | ||
| - | < | ||
| - | TLSEngine on | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | on enregistre on ferme le fichier | ||
| - | |||
| - | et on restart proftpd | ||
| - | |||
| - | < | ||
| - | sudo / | ||
| - | </ | ||
| - | |||
| - | et voila proftpd avec ssl/tls pour le tester en ligne de commande vous pouvez utiliser ftp-ssl (a installer) | ||
| - | |||
| - | ===== Références ===== | ||
| - | |||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | |||
| - | ------ | ||
| - | // | ||
| - | |||
| - | // Basé sur « [[http:// | ||
