Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
vsftpd_et_pam_mysql [Le 03/12/2009, 02:21] MatToufoutu rectification du nom de la table de log |
vsftpd_et_pam_mysql [Le 11/09/2022, 11:41] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag>BROUILLON Gutsy Hardy Tutoriel}} | + | {{tag>Bionic BROUILLON reseau Tutoriel}} |
| ---- | ---- | ||
| - | ====== VsftpD et authentification via pam_mysql sur base de données SQL ====== | + | ====== VsftpD et authentification via pam_mysql sur base de données SQL ====== |
| - | + | <note warning>Cette page aurait besoin d'une mise à jour, à lire avec précaution.</note> | |
| - | Ce tutoriel vous servira à authentifier des utilisateurs VsftpD grâce à une base de données MySQL. Le but étant de ne pas utiliser une base de données Berkeley qui doit être re-génénée à chaque création, suppression ou mise à jour d'utilisateur. Je précise que j'ai réalisé cette installation sur une Ubuntu 8.04 Server. | + | Ce tutoriel vous servira à authentifier des utilisateurs VsftpD grâce à une base de données MySQL. Le but étant de ne pas utiliser une base de données Berkeley qui doit être re-générée à chaque création, suppression ou mise à jour d'utilisateur. |
| ===== Installation ===== | ===== Installation ===== | ||
| Ligne 30: | Ligne 30: | ||
| <file> | <file> | ||
| - | # Serveur en ecoute | + | # Serveur en écoute |
| listen=YES | listen=YES | ||
| - | # Port d'ecoute du serveur | + | # Port d’écoute du serveur |
| listen_port=21 | listen_port=21 | ||
| Ligne 53: | Ligne 53: | ||
| # Monitoring de base via `ps -ef | grep vsftpd` | # Monitoring de base via `ps -ef | grep vsftpd` | ||
| setproctitle_enable=YES | setproctitle_enable=YES | ||
| - | # Active les messages de changement de repertoire | + | # Active les messages de changement de répertoire |
| dirmessage_enable=YES | dirmessage_enable=YES | ||
| # Utilisation de log pour les uploads et downloads (par defaut /var/log/vsftpd.log) | # Utilisation de log pour les uploads et downloads (par defaut /var/log/vsftpd.log) | ||
| xferlog_enable=YES | xferlog_enable=YES | ||
| - | # Emplacement du fichier de log | + | # Emplacement du fichier de log |
| xferlog_file=/var/log/vsftpd.log | xferlog_file=/var/log/vsftpd.log | ||
| # Formatage de la log au standard wu-ftpd | # Formatage de la log au standard wu-ftpd | ||
| xferlog_std_format=YES | xferlog_std_format=YES | ||
| - | # Utilisation de 2 fichiers de log differents (Par defaut /var/log/xferlog et /var/log/vsftpd.log) | + | # Utilisation de 2 fichiers de log différents (Par défaut /var/log/xferlog et /var/log/vsftpd.log) |
| dual_log_enable=YES | dual_log_enable=YES | ||
| Ligne 67: | Ligne 67: | ||
| # Nombre de clients maximum | # Nombre de clients maximum | ||
| max_clients=30 | max_clients=30 | ||
| - | # Nombre maximum de connections par clients | + | # Nombre maximum de connexions par clients |
| max_per_ip=3 | max_per_ip=3 | ||
| - | # Duree en secondes d'inactivite avant deconnexion de la session | + | # Durée en secondes d’inactivité avant déconnexion de la session |
| idle_session_timeout=60 | idle_session_timeout=60 | ||
| - | # Duree en secondes d'inactivite avant deconnexion de donnees | + | # Durée en secondes d’inactivité avant déconnexion de données |
| data_connection_timeout=120 | data_connection_timeout=120 | ||
| - | # Debit maximum du serveur en bytes par secondes (0 = debit illimite) | + | # Débit maximum du serveur en bytes par secondes (0 = débit illimité) |
| local_max_rate=0 | local_max_rate=0 | ||
| # Message de bienvenue affiche durant la phase de connexion | # Message de bienvenue affiche durant la phase de connexion | ||
| Ligne 80: | Ligne 80: | ||
| chroot_local_user=YES | chroot_local_user=YES | ||
| # Dossier utiliser pour le chroot (doit appartenir a root et avec un chmod 755) | # Dossier utiliser pour le chroot (doit appartenir a root et avec un chmod 755) | ||
| - | # car il ne doit surtout pas etre inscriptible (writable) par tous le monde | + | # car il ne doit surtout pas être inscriptible (writable) par tous le monde |
| secure_chroot_dir=/var/run/vsftpd | secure_chroot_dir=/var/run/vsftpd | ||
| # Nom du service d'authentification utilise par le serveur vsftpd | # Nom du service d'authentification utilise par le serveur vsftpd | ||
| pam_service_name=vsftpd | pam_service_name=vsftpd | ||
| - | # Utilisation des privileges locaux pour les utilisateurs virutels | + | # Utilisation des privilèges locaux pour les utilisateurs virtuels |
| - | # permet notamment de donner les droits d'ecriture car sinon les | + | # permet notamment de donner les droits d’écriture car sinon les |
| # utilisateurs virtuels ont des droits d'utilisateurs anonymes | # utilisateurs virtuels ont des droits d'utilisateurs anonymes | ||
| virtual_use_local_privs=YES | virtual_use_local_privs=YES | ||
| Ligne 91: | Ligne 91: | ||
| guest_enable=YES | guest_enable=YES | ||
| # Utilisateur du lancement du serveur vsftpd | # Utilisateur du lancement du serveur vsftpd | ||
| - | # ici c'est le meme utilisateur que le serveur apache | + | # ici c'est le même utilisateur que le serveur apache |
| - | # mais vous pouvez creer un utilisateur dedie a cette tache | + | # mais vous pouvez créer un utilisateur dédie à cette tache |
| guest_username=www-data | guest_username=www-data | ||
| - | # Dossier ou vont etre encapsules les utilisateurs virtuels | + | # Dossier ou vont être encapsules les utilisateurs virtuels |
| - | # represente le / du site ftp | + | # représente le / du site ftp |
| local_root=/home/vsftpd | local_root=/home/vsftpd | ||
| </file> | </file> | ||
| Ligne 104: | Ligne 104: | ||
| # Activation du SSL | # Activation du SSL | ||
| ssl_enable=YES | ssl_enable=YES | ||
| - | # Oblige les connexions de donnees a passer par du SSL | + | # Oblige les connexions de données a passer par du SSL |
| - | # Si cette option est activee les clients ftp ne gerant pas | + | # Si cette option est activée les clients ftp ne gérant pas |
| - | # SSL ne pourront envoyer ni recevoir de donnees | + | # SSL ne pourront envoyer ni recevoir de données |
| force_local_data_ssl=NO | force_local_data_ssl=NO | ||
| - | # Oblige la connexion d'identification a etre encryptee en SSL | + | # Oblige la connexion d'identification a être encryptée en SSL |
| - | # Si cette option est activee les clients ftp ne gerant pas | + | # Si cette option est activée les clients ftp ne gérant pas |
| # SSL ne pourront plus se connecter | # SSL ne pourront plus se connecter | ||
| force_local_logins_ssl=YES | force_local_logins_ssl=YES | ||
| Ligne 125: | Ligne 125: | ||
| </note> | </note> | ||
| <file> | <file> | ||
| - | # Option permettant de desactiver la methode passive (PASV) | + | # Option permettant de désactiver la méthode passive (PASV) |
| - | # deconseille si vous etes derriere un routeur | + | # déconseille si vous êtes derrière un routeur |
| pasv_promiscuous=NO | pasv_promiscuous=NO | ||
| # Mode passif autorise | # Mode passif autorise | ||
| Ligne 136: | Ligne 136: | ||
| # Adresse IP ou nom de domaine a renseigner | # Adresse IP ou nom de domaine a renseigner | ||
| pasv_address=monsiteftp.com | pasv_address=monsiteftp.com | ||
| - | # Demande ded resolution DNS du nom de domaine (pour tous ceux en DynDNS, no-ip, etc ...) | + | # Demande de résolution DNS du nom de domaine (pour tous ceux en DynDNS, no-ip, etc ...) |
| pasv_addr_resolve=YES | pasv_addr_resolve=YES | ||
| - | # Option permettant de desactiver la methode (PORT) | + | # Option permettant de désactiver la méthode (PORT) |
| port_promiscuous=NO | port_promiscuous=NO | ||
| </file> | </file> | ||
| Ligne 156: | Ligne 156: | ||
| En commande, pas très convivial mais efficace ou via une interface Web comme [[:lamp|PhpMyAdmin]] ou [[:webmin|Webmin]]. | En commande, pas très convivial mais efficace ou via une interface Web comme [[:lamp|PhpMyAdmin]] ou [[:webmin|Webmin]]. | ||
| - | Concernant PhpMyAdmin et WebMin je vous laisse chercher, je vais donner les commandes MySQL de base tout en précisant les besoins. | + | Concernant PhpMyAdmin et Webmin je vous laisse chercher, je vais donner les commandes MySQL de base tout en précisant les besoins. |
| <code> | <code> | ||
| Ligne 164: | Ligne 164: | ||
| # Création d'une nouvelle base nommée "vsftpd" | # Création d'une nouvelle base nommée "vsftpd" | ||
| CREATE DATABASE vsftpd; | CREATE DATABASE vsftpd; | ||
| - | # Attribution des privileges a l'utilisateur vsftpd avec comme mot de passe : MOTDEPASSE_VSFTPD | + | # Attribution des privilèges a l'utilisateur vsftpd avec comme mot de passe : MOTDEPASSE_VSFTPD |
| + | # MOTDEPASSE_VSFTPD ne doit pas contenir de caractère # : interpréte le reste de la ligne comme un commentaire. | ||
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'MOTDEPASSE_VSFTPD'; | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'MOTDEPASSE_VSFTPD'; | ||
| + | # Sous Mysql 8.0 ou > : | ||
| + | # CREATE USER 'vsftpd'@'localhost' IDENTIFIED BY 'MOTDEPASSE_VSFTPD'; | ||
| + | # GRANT ALL ON vsftpd.* TO 'vsftpd'@'localhost'; | ||
| # Application des privileges | # Application des privileges | ||
| FLUSH PRIVILEGES; | FLUSH PRIVILEGES; | ||
| - | # Utilisation de la base de donnees fraichement creee | + | # Utilisation de la base de données fraîchement créée |
| USE vsftpd; | USE vsftpd; | ||
| - | # Creation d'une table utilsateurs avec 4 champs (ID, NOM, PASS, CRYPTAGE) | + | # Création d'une table utilisateurs avec 4 champs (ID, NOM, PASS, CRYPTAGE) |
| - | # ID => identifiant unique (auto-incrementation et cle primaire) | + | # ID => identifiant unique (auto-incrémentation et clé primaire) |
| # NOM => texte (nul non autorise) | # NOM => texte (nul non autorise) | ||
| # PASS => texte (nul non autorise) | # PASS => texte (nul non autorise) | ||
| Ligne 178: | Ligne 182: | ||
| CREATE TABLE `utilisateurs` ( `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `NOM` TEXT NOT NULL , `PASS` TEXT NOT NULL , `CRYPTAGE` TEXT ); | CREATE TABLE `utilisateurs` ( `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `NOM` TEXT NOT NULL , `PASS` TEXT NOT NULL , `CRYPTAGE` TEXT ); | ||
| - | # Creation d'une table logging avec 6 champs (ID, USER, HOST, RHOST, MSG, TIME) | + | # Création d'une table logging avec 6 champs (ID, USER, HOST, RHOST, MSG, TIME) |
| - | # ID => identifiant unique (auto-incrementation et cle primaire) | + | # ID => identifiant unique (auto-incrémentation et clé primaire) |
| # USER => texte (nul non autorise) | # USER => texte (nul non autorise) | ||
| # HOST => texte (nul non autorise) | # HOST => texte (nul non autorise) | ||
| Ligne 185: | Ligne 189: | ||
| # TIME => texte (nul non autorise) | # TIME => texte (nul non autorise) | ||
| # MSG => => texte (nul non autorise) | # MSG => => texte (nul non autorise) | ||
| - | CREATE TABLE `logging` ( `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `USER` TEXT NOT NULL , `HOST` TEXT NOT NULL , `RHOST` TEXT NOT NULL , `TIME` TEXT NOT NULL , `MSG` TEXT NOT NULL ); | + | # PID => texte (nul non autorisé) |
| + | CREATE TABLE `logging` ( `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `USER` TEXT NOT NULL , `HOST` TEXT NOT NULL , `RHOST` TEXT NOT NULL , `TIME` TEXT NOT NULL , `MSG` TEXT NOT NULL , `PID` TEXT NOT NULL); | ||
| </code> | </code> | ||
| Ligne 191: | Ligne 196: | ||
| que cette commande est aussi utilisable sous [[:lamp|PhpMyAdmin]] ou [[:webmin|Webmin]] pour ceux qui n'ont pas envie de s'embêter. Nous allons créer 3 utilisateurs nommés respectivement | que cette commande est aussi utilisable sous [[:lamp|PhpMyAdmin]] ou [[:webmin|Webmin]] pour ceux qui n'ont pas envie de s'embêter. Nous allons créer 3 utilisateurs nommés respectivement | ||
| "toto", "tata" et "titi" avec comme mots de passes respectifs **toto**, **tata** et **titi**. | "toto", "tata" et "titi" avec comme mots de passes respectifs **toto**, **tata** et **titi**. | ||
| - | Ceci afin de détailler l'utilisation de la librairie pam_mysql et de MySQL-server. | + | Ceci afin de détailler l'utilisation de la librairie pam_mysql et de MySQL-server. |
| <code> | <code> | ||
| - | # Creation de l'utilisateur toto avec comme mot de passe toto stocke en clair (aucun cryptage) | + | # Création de l'utilisateur toto avec comme mot de passe toto stocke en clair (aucun cryptage) |
| INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES('toto', 'toto', 'aucun' ); | INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES('toto', 'toto', 'aucun' ); | ||
| - | # Creation de l'utilisateur tata avec comme mot de passe tata crypte avec la fonction MySQL PASSWORD() => deconseille dans le manuel MySQL | + | # Création de l'utilisateur tata avec comme mot de passe tata crypte avec la fonction MySQL PASSWORD() => deconseille dans le manuel MySQL |
| INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES('tata', PASSWORD('tata'), 'PASSWORD' ); | INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES('tata', PASSWORD('tata'), 'PASSWORD' ); | ||
| - | # Creation de l'utilisateur titi avec comme mot de passe titi crypte avec la fonction MySQL ENCRYPT() => conseille a la place de PASSWORD() | + | # Création de l'utilisateur titi avec comme mot de passe titi crypte avec la fonction MySQL ENCRYPT() => conseille a la place de PASSWORD() |
| INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES('titi', ENCRYPT('titi'), 'ENCRYPT' ); | INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES('titi', ENCRYPT('titi'), 'ENCRYPT' ); | ||
| </code> | </code> | ||
| ===== Configuration du certificat SSL ===== | ===== Configuration du certificat SSL ===== | ||
| + | <note warning> La commande **sudo head -15 vsftpd.pem > vsftpd.key** | ||
| + | peut rendre votre système fortement instable</note> | ||
| <code> | <code> | ||
| # Creation du repertoire pour stocker les certificats | # Creation du repertoire pour stocker les certificats | ||
| Ligne 279: | Ligne 285: | ||
| # Connexion avec logging en base de donnees des acces | # Connexion avec logging en base de donnees des acces | ||
| - | auth required pam_mysql.so verbose=1 user=vsftpd passwd=VsftpD host=localhost db=vsftpd table=utilisateurs usercolumn=NOM passwdcolumn=PASS crypt=1 sqllog=true logtable=logging logmsgcolumn=msg logusercolumn=user loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time | + | auth required pam_mysql.so verbose=1 user=vsftpd passwd=VsftpD host=localhost db=vsftpd table=utilisateurs usercolumn=NOM passwdcolumn=PASS crypt=1 sqllog=true logtable=logging logmsgcolumn=msg logusercolumn=user loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time logpidcolumn=pid |
| - | account required pam_mysql.so verbose=1 user=vsftpd passwd=VsftpD host=localhost db=vsftpd table=utilisateurs usercolumn=NOM passwdcolumn=PASS crypt=1 sqllog=true logtable=logging logmsgcolumn=msg logusercolumn=user loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time | + | account required pam_mysql.so verbose=1 user=vsftpd passwd=VsftpD host=localhost db=vsftpd table=utilisateurs usercolumn=NOM passwdcolumn=PASS crypt=1 sqllog=true logtable=logging logmsgcolumn=msg logusercolumn=user loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time logpidcolumn=pid |
| </code> | </code> | ||
| <note> | <note> | ||
| Ligne 336: | Ligne 342: | ||
| </code> | </code> | ||
| - | ===== Utilisation ===== | + | ===== Utilisation ===== test |
| Pour faire mes tests j'ai utilisé différents clients ftp, cependant je conseille **ftp-ssl** pour les tests car les messages d'erreurs sont plus | Pour faire mes tests j'ai utilisé différents clients ftp, cependant je conseille **ftp-ssl** pour les tests car les messages d'erreurs sont plus | ||
| Ligne 374: | Ligne 380: | ||
| (connexion et plage de ports passifs) sont bien ouverts et redirigés vers l'adresse IP locale de votre machine. | (connexion et plage de ports passifs) sont bien ouverts et redirigés vers l'adresse IP locale de votre machine. | ||
| - | Une autre solution est de venir en discuter [[http://forum.ubuntu-fr.org/viewtopic.php?id=198367|ici]] ou [[http://forum.ubuntu-fr.org|ici]]. Bon courage. | + | Une autre solution est de venir en discuter [[https://forum.ubuntu-fr.org/viewtopic.php?id=198367|ici]] ou [[http://forum.ubuntu-fr.org|ici]]. Bon courage. |
| ===== Liens ===== | ===== Liens ===== | ||
| Ligne 381: | Ligne 387: | ||
| * [[:Vsftpd|Vsftpd sur ubuntu-fr]] (pour toute la partie installation du serveur et configuration des certificats SSL) | * [[:Vsftpd|Vsftpd sur ubuntu-fr]] (pour toute la partie installation du serveur et configuration des certificats SSL) | ||
| * [[http://pam-mysql.sourceforge.net/Documentation/package-readme.php?seemore=y|le README de la librairie pam_mysql]] | * [[http://pam-mysql.sourceforge.net/Documentation/package-readme.php?seemore=y|le README de la librairie pam_mysql]] | ||
| + | * [[https://doc.fedora-fr.org/wiki/Vsftpd_:_Installation_et_configuration|Page similaire sur le wiki de Fedora]] | ||
| ---- | ---- | ||
| //Contributeur : [[:utilisateurs:maclane45]]// | //Contributeur : [[:utilisateurs:maclane45]]// | ||