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 | ||
tutoriel:vsftpd_multi-utilisateurs_multi-dossiers_avec_db_ou_mysql [Le 21/12/2012, 19:05] – [Configuration] 82.234.48.146 | tutoriel:vsftpd_multi-utilisateurs_multi-dossiers_avec_db_ou_mysql [Le 18/06/2018, 17:36] (Version actuelle) – [Une base mySQL] màj MySQL krodelabestiole | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> Precise tutoriel vsftpd}} | ||
+ | ---------------- | ||
+ | ====== VSFTPD multi-utilisateurs multi-dossiers avec DB ou MYSQL. ====== | ||
+ | |||
+ | |||
+ | vsftpd est un deamon FTP très léger, rapide et sécurisé. | ||
+ | Il peut gérer des services FTP de tous types, il est relativement simple à configurer, mais il manque cruellement de documentation et d' | ||
+ | |||
+ | Voici un petit tutoriel qui vous permettra de monter rapidement votre service FTP en local ou sur votre serveur dédié. | ||
+ | |||
+ | Vous y trouverez deux possibilités pour la gestions de vos utilisateurs, | ||
+ | |||
+ | Ce tuto suppose que avez un minimum de connaissance en ligne de commande, mais il est suffisamment détaillé pour un débutant. | ||
+ | Il a été réalisé sous Ubuntu 12.04, mais peut s' | ||
+ | |||
+ | Pour réaliser cette installation, | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | * Disposer des droits d' | ||
+ | * Savoir utiliser un terminal | ||
+ | * Avoir installé le paquet vsftpd | ||
+ | |||
+ | Commencez par ouvrir votre fenêtre de terminal (ctrl-alt-t) | ||
+ | Passez en utilisateur « root » pour éviter d' | ||
+ | < | ||
+ | sudo -i | ||
+ | </ | ||
+ | |||
+ | Si vous n'avez pas encore installé vsftpd tapez : | ||
+ | < | ||
+ | apt-get install vsftpd | ||
+ | </ | ||
+ | |||
+ | ===== Configuration ===== | ||
+ | |||
+ | Commencez par créer un fichier de configuration pour vsftpd, si ce fichier existe déjà renommez le : | ||
+ | < | ||
+ | mv / | ||
+ | </ | ||
+ | Puis créez un nouveau fichier de configuration : | ||
+ | < | ||
+ | touch / | ||
+ | </ | ||
+ | Editez ce fichier avec votre éditeur favori, ici avec nano : | ||
+ | < | ||
+ | nano / | ||
+ | </ | ||
+ | Insérez ce contenu (copier/ | ||
+ | < | ||
+ | # ftp server | ||
+ | ##################### | ||
+ | listen=YES | ||
+ | # port par défaut du FTP | ||
+ | listen_port=21 | ||
+ | # nom du service d' | ||
+ | pam_service_name=vsftpd | ||
+ | # pour le mode passif (firewall) | ||
+ | pasv_min_port=30000 | ||
+ | pasv_max_port=30999 | ||
+ | # | ||
+ | # | ||
+ | # anonymous user | ||
+ | ##################### | ||
+ | anonymous_enable=NO | ||
+ | anon_upload_enable=NO | ||
+ | anon_mkdir_write_enable=NO | ||
+ | anon_other_write_enable=NO | ||
+ | # | ||
+ | # | ||
+ | # general user | ||
+ | ##################### | ||
+ | local_enable=YES | ||
+ | local_umask= 022 | ||
+ | write_enable=YES | ||
+ | chroot_local_user=YES | ||
+ | # pour user admin (déconseillé) | ||
+ | # chroot_list_enable=YES | ||
+ | # | ||
+ | # | ||
+ | # virtual user | ||
+ | ##################### | ||
+ | guest_enable=YES | ||
+ | guest_username=vsftpd | ||
+ | nopriv_user=vsftpd | ||
+ | virtual_use_local_privs=YES | ||
+ | user_sub_token=$USER | ||
+ | local_root=/ | ||
+ | hide_ids=YES | ||
+ | </ | ||
+ | |||
+ | Créez maintenant l' | ||
+ | < | ||
+ | useradd --home /ftpzone --shell /bin/false vsftpd | ||
+ | </ | ||
+ | |||
+ | Le nom d' | ||
+ | //cf. config :// | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | |||
+ | |||
+ | ===== UTILISATEURS VIRTUELS ===== | ||
+ | |||
+ | Les utilisateurs virtuels peuvent être gérés de plusieurs façons, je vous en propose deux : | ||
+ | * **3.1 un simple fichier DB (Berkeley db)** | ||
+ | * **3.2 une base mySQL** | ||
+ | |||
+ | Je vous conseille plutôt la version mySQL qui vous permettra par la suite une gestion beaucoup plus souple et évolutive (ajout des quotas, gestion d' | ||
+ | Bien sûr il faudra disposer du service mysql installé. | ||
+ | |||
+ | |||
+ | ==== Un simple fichier DB (Berkeley db) ==== | ||
+ | |||
+ | Le principe est de créer les utilisateurs dans un fichier texte puis de le convertir au format DB. | ||
+ | |||
+ | Créez le fichier d' | ||
+ | < | ||
+ | touch / | ||
+ | </ | ||
+ | Editez le fichier et définissez deux utilisateurs pour exemple user1 et user2, respectivement avec les mots de passe 123456 et 654321. | ||
+ | < | ||
+ | nano / | ||
+ | </ | ||
+ | Copiez/ | ||
+ | < | ||
+ | user1 | ||
+ | 123456 | ||
+ | user2 | ||
+ | 654321 | ||
+ | </ | ||
+ | <note important> | ||
+ | |||
+ | Générez ensuite le fichier db dans / | ||
+ | < | ||
+ | db_load -T -t hash -f / | ||
+ | </ | ||
+ | Changez les droits pour le fichier db (securité) : | ||
+ | < | ||
+ | chmod 600 / | ||
+ | </ | ||
+ | |||
+ | |||
+ | Définissez la config de PAM pour l' | ||
+ | //cf config : pam_service_name=vsftpd// | ||
+ | < | ||
+ | touch / | ||
+ | </ | ||
+ | Éditez ce fichier : | ||
+ | < | ||
+ | nano / | ||
+ | </ | ||
+ | Copiez/ | ||
+ | < | ||
+ | auth required / | ||
+ | account required / | ||
+ | </ | ||
+ | |||
+ | **Vos utilisateurs virtuels peuvent maintenant être authentifiés sans être créés comme des utilisateurs locaux.** | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Une base MySQL ==== | ||
+ | | ||
+ | Pour créer la base de données vsftpd, il est nécessaire de connaître le mot de passe root (ici les étoiles) de votre installation de mysql ou celui d'un autre utilisateur ayant les droits de création. | ||
+ | Nous utiliserons ici des mots de passe cryptés pour nos utilisateurs virtuels. | ||
+ | |||
+ | Connexion au serveur MySQL | ||
+ | < | ||
+ | sudo mysql | ||
+ | </ | ||
+ | (Ajoutez //-p// à cette commande si vous utilisez un mot de passe pour le compte //root//.) | ||
+ | |||
+ | Vous entrez alors dans l' | ||
+ | |||
+ | <note important> | ||
+ | < | ||
+ | CREATE DATABASE vsftpd; | ||
+ | GRANT ALL ON vsftpd.* TO " | ||
+ | USE vsftpd; | ||
+ | CREATE TABLE `utilisateurs` ( | ||
+ | `username` varchar(64) NOT NULL default '', | ||
+ | `password` varchar(64) NOT NULL default '', | ||
+ | `quota` int(10) NOT NULL default ' | ||
+ | PRIMARY KEY (username) | ||
+ | ) ENGINE=MyISAM COMMENT=' | ||
+ | INSERT INTO `utilisateurs` (`username`, | ||
+ | INSERT INTO `utilisateurs` (`username`, | ||
+ | QUIT; | ||
+ | </ | ||
+ | |||
+ | |||
+ | Il vous reste à créer le fichier pour l' | ||
+ | Créez le fichier / | ||
+ | //cf config : pam_service_name=vsftpd// | ||
+ | < | ||
+ | touch / | ||
+ | </ | ||
+ | Éditez ce fichier : | ||
+ | < | ||
+ | nano / | ||
+ | </ | ||
+ | Copiez/ | ||
+ | <note important> | ||
+ | < | ||
+ | auth | ||
+ | account | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Vos utilisateurs virtuels peuvent maintenant être authentifiés sans être créés comme des utilisateurs locaux.** | ||
+ | |||
+ | |||
+ | ===== Dossiers des utilisateurs virtuels ===== | ||
+ | |||
+ | |||
+ | Nous définissons ici le dossier racine du FTP /ftpzone, mais vous devez l' | ||
+ | //cf. config : virtual_use_local_privs=YES ; user_sub_token=$USER ; local_root=/ | ||
+ | |||
+ | Pour fonctionner dans ce mode, vsftpd attend : | ||
+ | - un dossier racine (jail) pour chaque utilisateur sans droit d' | ||
+ | - un ou plusieurs sous-dossiers pour chaque utilisateur avec droit d' | ||
+ | |||
+ | Création des dossiers et sous-dossiers : | ||
+ | < | ||
+ | mkdir / | ||
+ | mkdir / | ||
+ | mkdir / | ||
+ | mkdir / | ||
+ | mkdir / | ||
+ | </ | ||
+ | Définition les droits pour les dossiers des utilisateurs virtuels : | ||
+ | < | ||
+ | chmod 555 / | ||
+ | chmod 775 / | ||
+ | chmod 555 / | ||
+ | chmod 775 / | ||
+ | </ | ||
+ | Le propriétaire de l' | ||
+ | < | ||
+ | chown -R vsftpd: | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Démarrage du service et test. ===== | ||
+ | |||
+ | |||
+ | Pour démarrer le service vsftpd on utilisera la commande « service », | ||
+ | |||
+ | Premier démarrage du service vsftpd : | ||
+ | < | ||
+ | service vsftpd start | ||
+ | </ | ||
+ | Si le service est déjà démarré ou pour toutes modification de la configuration : | ||
+ | < | ||
+ | service vsftpd restart | ||
+ | </ | ||
+ | < | ||
+ | Pour vérifier que le service est bien démarré et que la configuration est correcte, vérifiez les process (top) ou plus simplement redémarrez le service (restart) et s'il affiche « stop: Unknown instance » s'est qu'il n'a pas été lancé et que vous avez une erreur dans le fichier configuration.</ | ||
+ | |||
+ | |||
+ | A partir de là le service FTP fonctionne il peut être testé. Dans un premier temps en local en ligne de commande pour vérifier si les logins fonctionnent : | ||
+ | **En gras ce que vous devez taper.** | ||
+ | |||
+ | **ftp 127.0.0.1 21** | ||
+ | |||
+ | Connected to 127.0.0.1. | ||
+ | |||
+ | 220 (vsFTPd 2.3.5) | ||
+ | |||
+ | Name (127.0.0.1: | ||
+ | |||
+ | 331 Please specify the password. | ||
+ | |||
+ | Password: **123456** | ||
+ | 230 Login successful. | ||
+ | |||
+ | Remote system type is UNIX. | ||
+ | |||
+ | Using binary mode to transfer files. | ||
+ | |||
+ | ftp> **quit** | ||
+ | |||
+ | 221 Goodbye. | ||
+ | |||
+ | |||
+ | Si la connexion s'est bien déroulée, passez maintenant au test avec votre client ftp favori - ex. Nautilus ou FileZilla | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | ===== OPTION : Administrateur général ===== | ||
+ | |||
+ | |||
+ | Le but est de définir un utilisateur qui pourra accéder aux fichiers de tous les autres , et qui n'aura pas de dossier personnel. | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Même si vsftpd permet de le faire, je vous déconseille ce type d' | ||
+ | |||
+ | Le fichier / | ||
+ | //cf. config : chroot_list_enable=YES// | ||
+ | Dé-commentez cette ligne dans la config : chroot_list_enable=YES | ||
+ | |||
+ | Créez le fichier / | ||
+ | < | ||
+ | touch / | ||
+ | </ | ||
+ | Éditez ce fichier : | ||
+ | < | ||
+ | nano / | ||
+ | </ | ||
+ | Ajoutez les identifiants d' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Ajouter des nouveaux utilisateurs ===== | ||
+ | |||
+ | |||
+ | Il faut ajouter le nom et le mot de passe de l' | ||
+ | |||
+ | Pour cela un petit scripts shell est bien pratique . Je vous décrit ici un script très simple si vous avez choisi le mode DB, et un autre plus complet si vous avez choisi le mode MYSQL. | ||
+ | |||
+ | |||
+ | ==== script SH pour DB ==== | ||
+ | |||
+ | |||
+ | |||
+ | Ici un script pour ajouter un utilisateur nommé addFTPuser : | ||
+ | < | ||
+ | touch / | ||
+ | nano / | ||
+ | </ | ||
+ | Copiez/ | ||
+ | < | ||
+ | # | ||
+ | ################################################################# | ||
+ | # ajoute un utilisateur virtuel pour vsftpd | ||
+ | ################################################################# | ||
+ | if [ $# = " | ||
+ | # ajoute username et mot de passe au fichier texte des logins | ||
+ | echo $1" | ||
+ | # converti le fichier texte en DB | ||
+ | db_load -T -t hash -f / | ||
+ | # securise le fichier | ||
+ | chmod 600 / | ||
+ | # cree le dossier utilisateur | ||
+ | mkdir / | ||
+ | mkdir / | ||
+ | # defini les droits et le propriétaire des dossiers utilisateur | ||
+ | chmod 555 / | ||
+ | chmod 775 / | ||
+ | chown -R vsftpd: | ||
+ | # affiche le succés | ||
+ | echo " | ||
+ | else | ||
+ | echo "Deux arguments attendus (ex: addFTPuser username password)" | ||
+ | fi | ||
+ | </ | ||
+ | Donnez le droit d' | ||
+ | < | ||
+ | chmod 750 / | ||
+ | </ | ||
+ | |||
+ | Exemple d' | ||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== script SH pour MYSQL ==== | ||
+ | |||
+ | |||
+ | Ici un script scripts d' | ||
+ | < | ||
+ | touch / | ||
+ | nano / | ||
+ | </ | ||
+ | Copiez/ | ||
+ | <note important> | ||
+ | < | ||
+ | # | ||
+ | ################################################################# | ||
+ | # gestion des utilisateurs virtuels pour vsftpd // BY CHESTERKIK | ||
+ | ################################################################# | ||
+ | if [ $# = " | ||
+ | # test si l' | ||
+ | r=$(echo "USE vsftpd; | ||
+ | if [ " | ||
+ | # insert l' | ||
+ | echo "USE vsftpd; | ||
+ | # cree le dossier utilisateur | ||
+ | mkdir / | ||
+ | mkdir / | ||
+ | # defini les droits et le propriétaire des dossiers utilisateur | ||
+ | chmod 555 / | ||
+ | chmod 775 / | ||
+ | chown -R vsftpd: | ||
+ | # affiche le succés | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | elif [ $# = " | ||
+ | # test si l' | ||
+ | r=$(echo "USE vsftpd; | ||
+ | if [ " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | echo -n "Vous êtes sur (o/N) ? " | ||
+ | read rr | ||
+ | if [ " | ||
+ | # supprime l' | ||
+ | echo "USE vsftpd; | ||
+ | # supprime les dossiers | ||
+ | rm -r / | ||
+ | # affiche le succés | ||
+ | echo " | ||
+ | else | ||
+ | echo "Rien n'a été supprimé" | ||
+ | fi | ||
+ | fi | ||
+ | elif [ $# = " | ||
+ | # test si l' | ||
+ | r=$(echo "USE vsftpd; | ||
+ | if [ " | ||
+ | echo " | ||
+ | else | ||
+ | # modifie l' | ||
+ | echo "USE vsftpd; | ||
+ | # affiche le succés | ||
+ | echo " | ||
+ | fi | ||
+ | else | ||
+ | echo " | ||
+ | echo " > Ajout, tapez: FTPuser add username password" | ||
+ | echo " > Suppression, | ||
+ | echo " > Changer le mot de passe, tapez: FTPuser change username password" | ||
+ | fi | ||
+ | </ | ||
+ | Donnez le droit d' | ||
+ | < | ||
+ | chmod 750 / | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Exemples d' | ||
+ | |||
+ | ajout d'un utilisateur | ||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | modification d'un mot de passe | ||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | suppression d'un utilisateur | ||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Problèmes connus ===== | ||
+ | |||
+ | |||
+ | Si vous obtenez les messages suivants lors de la connexion d'un utilisateur virtuel : | ||
+ | |||
+ | < | ||
+ | Vous n'avez pas créé le dossier racine de l' | ||
+ | |||
+ | |||
+ | < | ||
+ | Vous n'avez pas restreint les droits d' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | Lors du redémarrage si vous constatez un message du type : | ||
+ | < | ||
+ | Vous avez une erreur dans le fichier de configuration qui empêche de démarrer le daemon. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | Lors de la connexion vous obtenez le message | ||
+ | < | ||
+ | Il vous manque une bibliothèque (normalement installé sous ubuntu 12.04). Vous devez installer le paquet **libpam-ldap** pour résoudre votre problème. | ||
+ | ===== Voir aussi. ===== | ||
+ | |||
+ | (en) [[https:// | ||
+ | |||
+ | (en) [[http:// | ||
+ | |||
+ | (en) [[http:// | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | --- // | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||