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édentesRévision précédente
Prochaine révision
Révision précédente
vsftpd_et_pam_mysql [Le 03/12/2009, 02:08] – copie de la private_key simplifiée MatToufoutuvsftpd_et_pam_mysql [Le 11/09/2022, 11:41] (Version actuelle) – 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) moths-art
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=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid 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=log logmsgcolumn=msg logusercolumn=user logpidcolumn=pid 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> 
 +N'oubliez pas de remplacer VsftpD par le mot de passe que vous avez choisi lors de la création de la base de données 
 +</note>
 La librairie pam_mysql acceptent plusieurs arguments dont voici le détail : La librairie pam_mysql acceptent plusieurs arguments dont voici le détail :
 \\ \\
Ligne 334: 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 372: 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 379: 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]]//