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/01/2010, 22:49] 213.95.41.13 |
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> | ||
Ligne 280: | 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 337: | 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 375: | 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 382: | 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]]// |