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 | ||
| vsftpd_et_pam_mysql [Le 01/10/2008, 23:08] – MacLane45 | vsftpd_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: | ||
| - | ====== VsftpD et authentification via pam_mysql sur base de données SQL ====== | + | {{tag> |
| - | 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' | + | |
| - | \\ | + | |
| - | Pour rédiger ce tutoriel j'ai utilisé les adresses suivantes :\\ | + | |
| - | \\ | + | |
| - | http:// | + | |
| - | http:// | + | |
| - | http://pam-mysql.sourceforge.net/ | + | |
| - | \\ | + | |
| - | Ce tutoriel se déroule en plusieurs étapes, je vais tout expliquer pas à pas (aussi clairement que possible).\\ | + | |
| - | \\ | + | |
| + | ====== VsftpD et authentification via pam_mysql sur base de données SQL ====== | ||
| + | <note warning> | ||
| + | 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' | ||
| + | ===== Installation ===== | ||
| + | [[: | ||
| + | Une fois ces logiciels installés, je vous conseille de suivre ce [[: | ||
| + | de base de données, notamment la partie **Configuration**. | ||
| + | ===== Configuration de VsftpD ===== | ||
| - | + | On commence par sauvegarder le nécessaire : | |
| - | + | ||
| - | + | ||
| - | ==== 1) Installation du nécessaire ==== | + | |
| - | + | ||
| - | [[: | + | |
| - | [[apt:// | + | |
| - | [[apt:// | + | |
| - | [[apt:// | + | |
| - | [[apt:// | + | |
| - | + | ||
| - | < | + | |
| - | sudo apt-get install vsftpd | + | |
| - | sudo apt-get install mysql-server | + | |
| - | sudo apt-get install libpam-mysql | + | |
| - | sudo apt-get install openssl | + | |
| - | </ | + | |
| - | + | ||
| - | Une fois ces logiciels installés, je vous conseille de suivre ce tutoriel MySQL afin de correctement sécuriser votre serveur | + | |
| - | de base de données, partie **Configuration** : http:// | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | ==== 2) Configuration de VsftpD ==== | + | |
| - | + | ||
| - | On commence par sauvegarder le nécessaire :\\ | + | |
| < | < | ||
| sudo cp / | sudo cp / | ||
| </ | </ | ||
| - | Ensuite vous utilisez l' | ||
| - | à ouvrir le fichier en tant que **root**. | ||
| - | < | + | [[: |
| - | sudo nano /etc/vsftpd.conf => mode texte | + | |
| - | gksu gedit / | + | |
| - | </ | + | |
| Ci dessous la configuration du fichier **/ | Ci dessous la configuration du fichier **/ | ||
| Ligne 67: | Ligne 30: | ||
| < | < | ||
| - | # Serveur en ecoute | + | # Serveur en écoute |
| listen=YES | listen=YES | ||
| - | # Port d' | + | # Port d’écoute |
| listen_port=21 | listen_port=21 | ||
| - | # Options des utilisateurs anonymes ici desactives | + | # Options des utilisateurs anonymes ici désactivés |
| anonymous_enable=NO | anonymous_enable=NO | ||
| # Autorisation d' | # Autorisation d' | ||
| anon_upload_enable=NO | anon_upload_enable=NO | ||
| - | # Autorisation de creation | + | # Autorisation de création |
| # mais aussi de suppression et de renommage | # mais aussi de suppression et de renommage | ||
| anon_other_write_enable=NO | anon_other_write_enable=NO | ||
| Ligne 90: | 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 / | # Utilisation de log pour les uploads et downloads (par defaut / | ||
| xferlog_enable=YES | xferlog_enable=YES | ||
| - | # Emplacement du fichier de log | + | # Emplacement du fichier de log |
| xferlog_file=/ | xferlog_file=/ | ||
| # 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 | + | # Utilisation de 2 fichiers de log différents |
| dual_log_enable=YES | dual_log_enable=YES | ||
| Ligne 104: | Ligne 67: | ||
| # Nombre de clients maximum | # Nombre de clients maximum | ||
| max_clients=30 | max_clients=30 | ||
| - | # Nombre maximum de connections | + | # Nombre maximum de connexions |
| max_per_ip=3 | max_per_ip=3 | ||
| - | # Duree en secondes d' | + | # Durée |
| idle_session_timeout=60 | idle_session_timeout=60 | ||
| - | # Duree en secondes d' | + | # Durée |
| data_connection_timeout=120 | data_connection_timeout=120 | ||
| - | # Debit maximum du serveur en bytes par secondes (0 = debit illimite) | + | # Débit |
| 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 117: | 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=/ | secure_chroot_dir=/ | ||
| # Nom du service d' | # Nom du service d' | ||
| pam_service_name=vsftpd | pam_service_name=vsftpd | ||
| - | # Utilisation des privileges | + | # Utilisation des privilèges |
| - | # permet notamment de donner les droits d' | + | # permet notamment de donner les droits d’écriture |
| # utilisateurs virtuels ont des droits d' | # utilisateurs virtuels ont des droits d' | ||
| virtual_use_local_privs=YES | virtual_use_local_privs=YES | ||
| Ligne 128: | 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 | + | # mais vous pouvez |
| 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 | + | # représente |
| local_root=/ | local_root=/ | ||
| </ | </ | ||
| Ligne 141: | Ligne 104: | ||
| # Activation du SSL | # Activation du SSL | ||
| ssl_enable=YES | ssl_enable=YES | ||
| - | # Oblige les connexions de donnees | + | # Oblige les connexions de données |
| - | # Si cette option est activee | + | # Si cette option est activée |
| - | # 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' | + | # Oblige la connexion d' |
| - | # Si cette option est activee | + | # Si cette option est activée |
| # SSL ne pourront plus se connecter | # SSL ne pourront plus se connecter | ||
| force_local_logins_ssl=YES | force_local_logins_ssl=YES | ||
| Ligne 155: | Ligne 118: | ||
| # Emplacement du certificat d' | # Emplacement du certificat d' | ||
| rsa_cert_file=/ | rsa_cert_file=/ | ||
| - | # Emplacement de la clé privée | + | # Emplacement de la clé privée |
| - | rsa_private_key_file=/ | + | #rsa_private_key_file=/ |
| </ | </ | ||
| <note tip> | <note tip> | ||
| Ligne 162: | Ligne 125: | ||
| </ | </ | ||
| < | < | ||
| - | # Option permettant de desactiver | + | # Option permettant de désactiver |
| - | # deconseille | + | # déconseille |
| pasv_promiscuous=NO | pasv_promiscuous=NO | ||
| # Mode passif autorise | # Mode passif autorise | ||
| Ligne 173: | 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 | + | # Demande |
| pasv_addr_resolve=YES | pasv_addr_resolve=YES | ||
| - | # Option permettant de desactiver | + | # Option permettant de désactiver |
| port_promiscuous=NO | port_promiscuous=NO | ||
| </ | </ | ||
| Il faut penser à créer le dossier **secure_chroot_dir** Vsftpd (dans notre exemple **/ | Il faut penser à créer le dossier **secure_chroot_dir** Vsftpd (dans notre exemple **/ | ||
| - | et lui appliquer les permissions adéquates, il ne faut pas que les utilisateurs aient des droits d' | + | et lui appliquer les [[:permissions]] adéquates, il ne faut pas que les utilisateurs aient des droits d' |
| < | < | ||
| Ligne 188: | Ligne 151: | ||
| </ | </ | ||
| + | ===== Configuration de MySQL ===== | ||
| + | À ce stade, plusieurs possibilités pour administrer la base de données MySQL :\\ | ||
| - | |||
| - | ==== 3) Préparation de la base de données MySQL ==== | ||
| - | \\ | ||
| - | A ce stade, plusieurs possibilités pour administrer la base de données MySQL :\\ | ||
| - | \\ | ||
| En commande, pas très convivial mais efficace ou via une interface Web comme [[: | En commande, pas très convivial mais efficace ou via une interface Web comme [[: | ||
| - | Concernant PhpMyAdmin et WebMin | + | Concernant PhpMyAdmin et Webmin |
| - | \\ | + | |
| - | Sous MySQL (en ligne de commandes) :\\ | + | |
| < | < | ||
| - | sudo mysql -u root -p ( puis taper le mot de passe de votre superutilisateur MySQL) | + | sudo mysql -u root -p (puis taper le mot de passe de votre superutilisateur MySQL) |
| mysql> | mysql> | ||
| # Création d'une nouvelle base nommée " | # Création d'une nouvelle base nommée " | ||
| CREATE DATABASE vsftpd; | CREATE DATABASE vsftpd; | ||
| - | # Attribution des privileges | + | # Attribution des privilèges |
| + | # 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 ' | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO ' | ||
| + | # Sous Mysql 8.0 ou > : | ||
| + | # CREATE USER ' | ||
| + | # GRANT ALL ON vsftpd.* TO ' | ||
| # 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 | + | # Création |
| - | # ID => identifiant unique (auto-incrementation | + | # ID => identifiant unique (auto-incrémentation |
| # NOM => texte (nul non autorise) | # NOM => texte (nul non autorise) | ||
| # PASS => texte (nul non autorise) | # PASS => texte (nul non autorise) | ||
| Ligne 220: | 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 | + | # Création |
| - | # ID => identifiant unique (auto-incrementation | + | # ID => identifiant unique (auto-incrémentation |
| # USER => texte (nul non autorise) | # USER => texte (nul non autorise) | ||
| # HOST => texte (nul non autorise) | # HOST => texte (nul non autorise) | ||
| Ligne 227: | 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); | ||
| </ | </ | ||
| Notre base de données est créée et nous allons donc la renseigner avec un jeu d' | Notre base de données est créée et nous allons donc la renseigner avec un jeu d' | ||
| que cette commande est aussi utilisable sous [[: | que cette commande est aussi utilisable sous [[: | ||
| - | " | + | " |
| - | Ceci afin de détailler l' | + | Ceci afin de détailler l' |
| < | < | ||
| - | # Creation | + | # Création |
| INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES(' | INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES(' | ||
| - | # Creation | + | # Création |
| INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES(' | INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES(' | ||
| - | # Creation | + | # Création |
| INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES(' | INSERT INTO utilisateurs (NOM, PASS, CRYPTAGE) VALUES(' | ||
| </ | </ | ||
| - | + | ===== Configuration | |
| - | + | <note warning> La commande **sudo head -15 vsftpd.pem > vsftpd.key** | |
| - | + | peut rendre votre système fortement instable</ | |
| - | + | ||
| - | ==== 4) Preparation | + | |
| < | < | ||
| # Creation du repertoire pour stocker les certificats | # Creation du repertoire pour stocker les certificats | ||
| Ligne 257: | Ligne 217: | ||
| # Creation du certificat SSL valable 1 an | # Creation du certificat SSL valable 1 an | ||
| sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem | sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem | ||
| - | # Affichage | + | # Copie de la partie [PRIVATE_KEY] du certificat dans le fichier vsftpd.key |
| - | sudo head -15 vsftpd.pem | + | sudo head -15 vsftpd.pem |
| - | # Creation d'un fichier vide vsftpd.key | + | |
| - | sudo touch vsftpd.key | + | |
| - | # Editez le fichier vsftpd.key avec un editeur de texte et | + | |
| - | # coller le contenu de la commande `sudo head -15 vsftpd.pem` | + | |
| - | # qui doit vous afficher la partie entre BEGIN RSA PRIVATE KEY | + | |
| - | # et END RSA PRIVATE KEY | + | |
| - | # | + | |
| # Protection du certificat et de la cle privee | # Protection du certificat et de la cle privee | ||
| sudo chmod 600 * | sudo chmod 600 * | ||
| Ligne 272: | Ligne 225: | ||
| <note important> | <note important> | ||
| La clé privée générée est auto-signée et certains clients vont donc afficher des alertes de sécurité, | La clé privée générée est auto-signée et certains clients vont donc afficher des alertes de sécurité, | ||
| - | car la clé n'est pas validée par une authorité de certification reconnue (Thawte, Verisign | + | car la clé n'est pas validée par une authorité de certification reconnue (Thawte, Verisign, etc) |
| </ | </ | ||
| Ligne 295: | Ligne 248: | ||
| </ | </ | ||
| - | + | ===== Configuration | |
| - | + | ||
| - | + | ||
| - | ==== 5) Preparation | + | |
| On commence par sauvegarder l' | On commence par sauvegarder l' | ||
| Ligne 304: | Ligne 254: | ||
| < | < | ||
| sudo cp / | sudo cp / | ||
| - | cd /etc/pam.d | ||
| - | sudo nano vsftpd | ||
| </ | </ | ||
| - | Vous devriez tomber sur quelque chose ressemblant à ça : | + | [[: |
| < | < | ||
| Ligne 325: | Ligne 273: | ||
| </ | </ | ||
| - | Il faut commenter toutes les lignes avec un **#** ou effacer tout le contenu du fichier et coller le code ci dessous à la place | + | Il faut commenter toutes les lignes avec un **#** ou effacer tout le contenu du fichier et coller le code ci dessous à la place. |
| - | <file> | + | <code> |
| # fonction pam_mysql crypt=1 OK avec la fonction ENCRYPT() de MySQL | # fonction pam_mysql crypt=1 OK avec la fonction ENCRYPT() de MySQL | ||
| Ligne 337: | 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=users usercolumn=nom passwdcolumn=mdp crypt=1 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user | + | auth required pam_mysql.so verbose=1 user=vsftpd passwd=VsftpD host=localhost db=vsftpd table=utilisateurs |
| - | account required pam_mysql.so verbose=1 user=vsftpd passwd=VsftpD host=localhost db=vsftpd table=users usercolumn=nom passwdcolumn=mdp crypt=1 sqllog=true logtable=log logmsgcolumn=msg logusercolumn=user | + | account required pam_mysql.so verbose=1 user=vsftpd passwd=VsftpD host=localhost db=vsftpd table=utilisateurs |
| - | </file> | + | </code> |
| + | < | ||
| + | N' | ||
| + | </ | ||
| La librairie pam_mysql acceptent plusieurs arguments dont voici le détail : | La librairie pam_mysql acceptent plusieurs arguments dont voici le détail : | ||
| - | |||
| \\ | \\ | ||
| **verbose** | **verbose** | ||
| Ligne 362: | Ligne 311: | ||
| **logtimecolumn** => nom de la colonne ou seront stockés les heures de connexion\\ | **logtimecolumn** => nom de la colonne ou seront stockés les heures de connexion\\ | ||
| - | La fonction **crypt** de la librairie pam_mysql accepte différents arguments (**0**, **1**, **2**, **3**, **4**) , cependant je n'en ai trouvé que deux qui fonctionnent avec | + | La fonction **crypt** de la librairie pam_mysql accepte différents arguments (**0**, **1**, **2**, **3**, **4**) , cependant je n'en ai trouvé que deux qui fonctionnent avec mysql-server, |
| - | mysql-server, | + | |
| - | fourni par pam_mysql. Autrement dit, les valeurs ne correspondent pas et l' | + | |
| - | + | ===== Configuration | |
| - | + | ||
| - | ==== 6) Montages | + | |
| Nos utilisateurs virtuels se connectent et sont emprisonnés dans un dossier dans lequel il n'ont pas les droits en écriture. Il faut donc leur monter des | Nos utilisateurs virtuels se connectent et sont emprisonnés dans un dossier dans lequel il n'ont pas les droits en écriture. Il faut donc leur monter des | ||
| Ligne 397: | Ligne 342: | ||
| </ | </ | ||
| + | ===== 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' | ||
| + | parlants. Autrement il existe **Filezilla** ou **FireFTP** sous Mozilla qui fonctionnent très bien. | ||
| - | ==== 7) Tests ==== | + | [[: |
| - | Pour faire mes tests j'ai utilisé différents clients ftp, cependant je conseille | + | |
| - | parlants. Autrement il existe **Filezilla** ou **FireFTP** sous Mozilla qui fonctionnent très bien.\\ | + | |
| - | \\ | + | * [[https:// |
| - | [[: | + | |
| - | \\ | + | |
| - | [[apt:// | + | |
| - | [[apt:// | + | |
| - | https:// | + | |
| - | \\ | + | |
| - | En ligne de commandes :\\ | + | |
| - | < | + | |
| - | sudo apt-get install ftp-ssl | + | |
| - | sudo apt-get install filezilla | + | |
| - | </ | + | |
| Pour commencer il faut recharger le fichier de configuration VsftpD. | Pour commencer il faut recharger le fichier de configuration VsftpD. | ||
| Ligne 422: | Ligne 359: | ||
| </ | </ | ||
| - | Ensuite tentative de connexion en commande ou via un client graphique qui devrait normalement vous répondre comme ci-dessous.\\ | + | Ensuite tentative de connexion en commande ou via un client graphique qui devrait normalement vous répondre comme ci-dessous. Il est aussi possible de tester via un navigateur à l' |
| - | Il est aussi possible de tester via un navigateur à l' | + | |
| < | < | ||
| Ligne 442: | Ligne 378: | ||
| Si toutefois vous avez des problèmes de connexion (Authentication Failed) vérifiez les paramètres de cryptage de pam_mysql et la fonction\\ | Si toutefois vous avez des problèmes de connexion (Authentication Failed) vérifiez les paramètres de cryptage de pam_mysql et la fonction\\ | ||
| utilisée dans MySQL-server pour crypter le mot de passe. Pour les problèmes de connexion sur nom de domaine vérifiez bien que tous les ports\\ | utilisée dans MySQL-server pour crypter le mot de passe. Pour les problèmes de connexion sur nom de domaine vérifiez bien que tous les ports\\ | ||
| - | (connexion et plage de ports passifs) sont bien ouverts et redirigés vers l' | + | (connexion et plage de ports passifs) sont bien ouverts et redirigés vers l' |
| - | \\ | + | |
| - | Une autre solution est de venir en discuter [[http:// | + | Une autre solution est de venir en discuter [[https:// |
| - | \\ | + | |
| - | \\ | + | ===== Liens ===== |
| - | | + | |
| + | * [[http:// | ||
| + | * [[: | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | //Contributeur : [[:utilisateurs: | ||
