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 | ||
logiciel:reseau:ftp:serveur:vsftpd:start [2024/09/21 13:41] – supprimée - modification externe (Unknown date) 127.0.0.1 | logiciel:reseau:ftp:serveur:vsftpd:start [2024/09/21 13:41] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ====== VSFTPd - un serveur FTP sécurisé avec des utilisateurs virtuels ====== | ||
+ | |||
+ | **vsftpd** est un serveur FTP stable, sécurisé et rapide. | ||
+ | |||
+ | Nous allons l' | ||
+ | * Seuls les utilisateurs locaux sont autorisés à se connecter au serveur | ||
+ | * En lecture seule | ||
+ | * Les utilisateurs ne peuvent pas accéder à leurs répertoires | ||
+ | * Les options seront réglées utilisateur par utilisateur | ||
+ | * les utilisateurs seront restreints à leur répertoire d' | ||
+ | * les transmissions seront cryptées avec un certificat auto-signé SSLTLS. | ||
+ | * nous utiliserons le paramétrage par **utilisateurs virtuels**, avec une base de données de type **Berkeley**.\\ Chaque enregistrement n’est constitué que d'un login et d'un mot de passe.\\ Pour créer un nouvel utilisateur, | ||
+ | * une entrée dans la base Berkeley | ||
+ | * et un fichier de configuration personnel. | ||
+ | |||
+ | Quatre scénarios illustreront les possibilités. | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Le protocole FTP en lui même n'est pas sûr ! | ||
+ | |||
+ | L' | ||
+ | |||
+ | N' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Nous supposons que le serveur sera sur le disque $DISQUE=**/ | ||
+ | </ | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | < | ||
+ | - **Mettez à jour** :<cli prompt=' | ||
+ | - **Installez les paquets** :<cli prompt=' | ||
+ | - **Vérifiez** avec le programme **ftp** : | ||
+ | - Acceptez le nom d' | ||
+ | - Pour sortir du ftp : **bye** | ||
+ | - Avec la configuration d' | ||
+ | - avec un utilisateur (**pi**) disposant réellement d’un compte sur la machine serveur | ||
+ | - mais **pas en anonyme** (impossible de se connecter avec l' | ||
+ | - un ls confirme que le dossier racine est le home (**/ | ||
+ | Connected to localhost. | ||
+ | 220 (vsFTPd 3.0.3) | ||
+ | <cli prompt=': | ||
+ | 331 Please specify the password. | ||
+ | Password: </ | ||
+ | 230 Login successful. | ||
+ | Remote system type is UNIX. | ||
+ | Using binary mode to transfer files. | ||
+ | <cli prompt='> | ||
+ | 200 PORT command successful. Consider using PASV. | ||
+ | 150 Here comes the directory listing. | ||
+ | ... | ||
+ | drwxr-xr-x | ||
+ | ... | ||
+ | 226 Directory send OK. | ||
+ | ftp> bye</ | ||
+ | 221 Goodbye. | ||
+ | <cli prompt=' | ||
+ | - **depuis un PC du réseau**, en vous connectant avec un logiciel comme FileZilla, avec un user/ | ||
+ | - vous pouvez : | ||
+ | - vous déplacer dans toute la machine serveur, y compris la racine | ||
+ | - télécharger un fichier depuis le serveur | ||
+ | - mais pas : | ||
+ | - y écrire ou téléverser un fichier | ||
+ | - ni créer un répertoire | ||
+ | - ni effacer un fichier ou un répertoire | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | < | ||
+ | - **L' | ||
+ | ftp: | ||
+ | - Si ce n'est pas le cas, créez-les :<cli prompt=' | ||
+ | - Si l' | ||
+ | - **Et l' | ||
+ | www-data: | ||
+ | </ | ||
+ | </ | ||
+ | ===== Configuration ===== | ||
+ | |||
+ | Le fichier de configuration du serveur est **[[logiciel: | ||
+ | |||
+ | Voir la page de man **[[logiciel: | ||
+ | |||
+ | < | ||
+ | - **Créez le répertoire / | ||
+ | USER@MACHINE: | ||
+ | - **Sauvegardez les fichiers de configuration** originaux :<cli prompt=' | ||
+ | USER@MACHINE: | ||
+ | USER@MACHINE: | ||
+ | - **créez un emplacement pour la racine du serveur** : | ||
+ | - **Créez le répertoire < | ||
+ | - **Éditez avec les droits d' | ||
+ | - **Montez /srv** :<cli prompt=' | ||
+ | </ | ||
+ | |||
+ | ==== Configuration par défaut ==== | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | < | ||
+ | - **Paramètres généraux** :<code - / | ||
+ | ... | ||
+ | ########## Paramètres personnalisés ########## | ||
+ | ftpd_banner=Bienvenue sur le serveur FTP de ... | ||
+ | |||
+ | # un message apparaît chaque fois | ||
+ | # qu'un utilisateur ouvre un répertoire avec un fichier .message | ||
+ | dirmessage_enable=YES | ||
+ | |||
+ | # heure locale de l' | ||
+ | use_localtime=YES | ||
+ | |||
+ | # Nombre maximum de connexions simultanées | ||
+ | # | ||
+ | # " | ||
+ | max_clients=200 | ||
+ | # Nombre maximum de connexions venant de la même IP | ||
+ | max_per_ip=4 | ||
+ | |||
+ | # journalisation des transferts | ||
+ | xferlog_enable=YES | ||
+ | </ | ||
+ | - **Utilisateurs virtuels** :<code - / | ||
+ | # Activation des utilisateurs virtuels | ||
+ | guest_enable=YES | ||
+ | # nom de l' | ||
+ | # tous les utilisateurs virtuels -> utilisateur ftp avec son home /srv/ftp | ||
+ | ftp_username=ftp | ||
+ | guest_username=ftp | ||
+ | nopriv_user=ftp | ||
+ | |||
+ | # Fichier de config PAM | ||
+ | pam_service_name=vsftpd | ||
+ | </ | ||
+ | - **Connexion et contrôle d' | ||
+ | # Pas d' | ||
+ | # (dont les utilisateurs virtuels, mappés sur un utilisateur local) | ||
+ | # les vrais utilisateurs locaux sont désactivés avec le fichier user_list | ||
+ | anonymous_enable=NO | ||
+ | local_enable=YES | ||
+ | |||
+ | # On refuse les utilisateurs du fichier / | ||
+ | # un utilisateur par ligne | ||
+ | userlist_enable=YES | ||
+ | userlist_deny=NO | ||
+ | userlist_file=/ | ||
+ | |||
+ | # Les utilisateurs locaux restent chez eux | ||
+ | chroot_local_user=YES | ||
+ | allow_writeable_chroot=YES | ||
+ | </ | ||
+ | - **Permissions** :<code - / | ||
+ | # Interdiction de toute action d' | ||
+ | # On spécifiera les droits utilisateur par utilisateur. | ||
+ | write_enable=NO | ||
+ | anon_mkdir_write_enable=NO | ||
+ | anon_other_write_enable=NO | ||
+ | anon_upload_enable=NO | ||
+ | anon_world_readable_only=NO | ||
+ | |||
+ | # droits par défaut des fichiers uploadés | ||
+ | anon_umask=002 | ||
+ | |||
+ | # Autoriser les utilisateurs locaux | ||
+ | # à changer les permissions des fichiers | ||
+ | chmod_enable=YES | ||
+ | virtual_use_local_privs=YES | ||
+ | |||
+ | # On n’autorise pas les utilisateurs à se faire passer pour d’autres | ||
+ | chown_uploads=NO | ||
+ | chown_username=nobody | ||
+ | |||
+ | # Cacher les informations sur le propriétaire des fichiers (utilisateur et groupe) | ||
+ | hide_ids=YES | ||
+ | |||
+ | # Activation de la configuration utilisateur par utilisateur | ||
+ | user_config_dir=/ | ||
+ | </ | ||
+ | - **Sécurisation des transmissions avec SSL/TLS** :<code - / | ||
+ | rsa_cert_file=/ | ||
+ | rsa_private_key_file=/ | ||
+ | ssl_enable=YES | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Utilisateurs virtuels ==== | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Nous allons créer trois utilisateurs virtuels : | ||
+ | < | ||
+ | - **admin**, qui aura accès à tout **/srv** sous l' | ||
+ | - **user**, qui ne pourra que télécharger sous l' | ||
+ | - **admiweb**, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | - **Éditez avec les droits d' | ||
+ | admin | ||
+ | MotDePasseAdmin | ||
+ | user | ||
+ | MotDePasseUser | ||
+ | admiweb | ||
+ | MotDePasseAdmiweb | ||
+ | |||
+ | </ | ||
+ | - **Créez la base de données** :<cli prompt=' | ||
+ | - **Protégez ces fichiers** contre une intrusion :<cli prompt=' | ||
+ | Pour ajouter, modifier ou supprimer un utilisateur il faut éditer le fichier login.txt puis relancer la création de la base avec la commande du paragraphe 2. | ||
+ | </ | ||
+ | - **Éditez avec les droits d' | ||
+ | auth required pam_userdb.so db=/ | ||
+ | account required pam_userdb.so db=/ | ||
+ | </ | ||
+ | - **Redémarrez** le serveur :<cli prompt=' | ||
+ | - **Vérification** : | ||
+ | - pi ne peut plus se connecter :<cli prompt=' | ||
+ | Connected to localhost. | ||
+ | 220 Bienvenue sur le serveur FTP de xxx | ||
+ | <cli prompt=': | ||
+ | 331 Please specify the password. | ||
+ | Password: </ | ||
+ | 530 Login incorrect. | ||
+ | Login failed. | ||
+ | <cli prompt='> | ||
+ | 221 Goodbye.</ | ||
+ | - mais admiweb le peut :<cli prompt=' | ||
+ | Connected to localhost. | ||
+ | 220 Bienvenue sur le serveur FTP de xxx | ||
+ | <cli prompt=': | ||
+ | 331 Please specify the password. | ||
+ | Password: </ | ||
+ | 230 Login successful. | ||
+ | Remote system type is UNIX. | ||
+ | Using binary mode to transfer files. | ||
+ | <cli prompt='> | ||
+ | 221 Goodbye.</ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | **Deux scripts pour se faciliter la vie** | ||
+ | < | ||
+ | - **txt2db.sh** régénère le fichier .db et crée un fichier de config vide s'il n' | ||
+ | #!/bin/sh | ||
+ | if [ $# = " | ||
+ | rm -f $2 | ||
+ | db_load -T -t hash -f / | ||
+ | chmod 600 / | ||
+ | echo "Base créée" | ||
+ | lignes=$(cat $1) | ||
+ | nb=1 | ||
+ | for ligne in $lignes | ||
+ | do | ||
+ | if [ $(($nb%2)) -ne 0 ]; | ||
+ | then | ||
+ | if [ ! -e / | ||
+ | then | ||
+ | touch / | ||
+ | echo " | ||
+ | fi | ||
+ | fi | ||
+ | nb=$(($nb+1)) | ||
+ | done | ||
+ | else | ||
+ | echo "Il faut donner le fichier d’entrée et le fichier de sortie" | ||
+ | fi | ||
+ | </ | ||
+ | ...@...:~$ sudo ./txt2db.sh login.txt login.db</ | ||
+ | - Le script **cleanconf.sh** supprime tous les fichiers qui n'ont pas de login associé (utilisateurs supprimés) :<code bash ~/ | ||
+ | fichiers=$(ls / | ||
+ | users="" | ||
+ | lignes=$(cat / | ||
+ | nb=1 | ||
+ | for ligne in $lignes | ||
+ | do | ||
+ | if [ $(($nb%2)) -ne 0 ]; | ||
+ | then | ||
+ | | ||
+ | fi | ||
+ | nb=$(($nb+1)) | ||
+ | done | ||
+ | for conf in $fichiers | ||
+ | do | ||
+ | found=0 | ||
+ | for user in $users | ||
+ | do | ||
+ | if [ $conf = $user ]; | ||
+ | then | ||
+ | found=" | ||
+ | fi | ||
+ | done | ||
+ | if [ $found != " | ||
+ | then | ||
+ | rm -f / | ||
+ | echo " | ||
+ | fi | ||
+ | done | ||
+ | </ | ||
+ | ...@...:~$ sudo ./ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Personnalisation pour chaque utilisateur ==== | ||
+ | |||
+ | Par défaut les utilisateurs virtuels n'ont aucun droit. | ||
+ | |||
+ | Il faut donc les définir pour chacun d' | ||
+ | |||
+ | Chaque fichier contient des paramètres (les mêmes que ceux de vsftpd.conf) qui remplaceront ceux de vsftpd.conf. | ||
+ | |||
+ | Généralement, | ||
+ | |||
+ | Voici quelques exemples. | ||
+ | < | ||
+ | - utilisateur **admin** :<code - / | ||
+ | # Racine | ||
+ | local_root=/ | ||
+ | |||
+ | # Lecture autorisée | ||
+ | download_enable=YES | ||
+ | anon_world_readable_only=NO | ||
+ | |||
+ | # Écriture autorisée | ||
+ | write_enable=YES | ||
+ | anon_upload_enable=YES | ||
+ | anon_mkdir_write_enable=YES | ||
+ | |||
+ | # Renommage et suppression autorisés | ||
+ | anon_other_write_enable=YES | ||
+ | |||
+ | # changement des droits autorisé | ||
+ | chmod_enable=YES | ||
+ | virtual_use_local_privs=YES | ||
+ | |||
+ | # Définit à qui appartiendront les fichiers téléversés | ||
+ | guest_username=pi | ||
+ | |||
+ | # Affichage des fichiers cachés | ||
+ | # | ||
+ | force_dot_files=YES | ||
+ | |||
+ | # masque local (002 -> droits 775) | ||
+ | local_umask=002 | ||
+ | anon_umask=002 | ||
+ | </ | ||
+ | - utilisateur **admiweb** :<code - / | ||
+ | # Racine | ||
+ | local_root=/ | ||
+ | |||
+ | # Lecture autorisée | ||
+ | download_enable=YES | ||
+ | anon_world_readable_only=NO | ||
+ | |||
+ | # Écriture (upload) autorisée | ||
+ | write_enable=YES | ||
+ | anon_upload_enable=YES | ||
+ | anon_mkdir_write_enable=YES | ||
+ | |||
+ | # Renommage et suppression autorisés | ||
+ | anon_other_write_enable=YES | ||
+ | |||
+ | # changement des droits autorisé | ||
+ | chmod_enable=YES | ||
+ | virtual_use_local_privs=YES | ||
+ | |||
+ | # Définit à qui appartiendront les fichiers téléversés | ||
+ | guest_username=www-data | ||
+ | chown_uploads=YES | ||
+ | chown_username=www-data | ||
+ | |||
+ | # Affichage des fichiers cachés | ||
+ | # | ||
+ | force_dot_files=YES | ||
+ | |||
+ | # masque local (002 -> droits 775) | ||
+ | file_open_mode=0777 | ||
+ | local_umask=002 | ||
+ | anon_umask=002 | ||
+ | </ | ||
+ | - utilisateur **user** : | ||
+ | * Créez le répertoire **< | ||
+ | * puis le fichier <code - / | ||
+ | local_root=/ | ||
+ | </ | ||
+ | - utilisateur **adminftp** :<code - / | ||
+ | ## l' | ||
+ | # en commentant cette ligne, on autorise tout le site | ||
+ | # | ||
+ | |||
+ | ## droit de lecture(download) | ||
+ | anon_world_readable_only=NO | ||
+ | |||
+ | ## droit d' | ||
+ | write_enable=YES | ||
+ | anon_upload_enable=YES | ||
+ | |||
+ | ## créer des dossiers | ||
+ | anon_mkdir_write_enable=YES | ||
+ | |||
+ | ## droit de renommer, supprimer... | ||
+ | anon_other_write_enable=YES | ||
+ | |||
+ | ## pour gérer le chmod de l' | ||
+ | ## activer l' | ||
+ | # | ||
+ | ## définir l' | ||
+ | # | ||
+ | # | ||
+ | write_enable=YES | ||
+ | anon_upload_enable=YES | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Redémarrez le serveur pour valider les modifications :<cli prompt=' | ||
+ | |||
+ | ==== Tests ==== | ||
+ | |||
+ | < | ||
+ | - **admin** :<cli prompt=' | ||
+ | Connected to localhost. | ||
+ | 220 Bienvenue sur le serveur FTP de framboise 4. | ||
+ | <cli prompt=': | ||
+ | 331 Please specify the password. | ||
+ | Password: </ | ||
+ | 230 Login successful. | ||
+ | Remote system type is UNIX. | ||
+ | Using binary mode to transfer files. | ||
+ | <cli prompt='> | ||
+ | 221 Goodbye.</ | ||
+ | - connexion possible | ||
+ | - peut lister le répertoire, | ||
+ | - à partir de la racine **/srv** | ||
+ | - **admiweb** :<cli prompt=' | ||
+ | Connected to localhost. | ||
+ | 220 Bienvenue sur le serveur FTP de framboise 4. | ||
+ | <cli prompt=': | ||
+ | 331 Please specify the password. | ||
+ | Password: </ | ||
+ | 230 Login successful. | ||
+ | Remote system type is UNIX. | ||
+ | Using binary mode to transfer files. | ||
+ | <cli prompt='> | ||
+ | 221 Goodbye.</ | ||
+ | - connexion possible | ||
+ | - peut lister le répertoire, | ||
+ | - à partir de la racine **/ | ||
+ | - les fichiers téléversés appartiennent à **www-data** | ||
+ | - **user** :<cli prompt=' | ||
+ | Connected to localhost. | ||
+ | 220 Bienvenue sur le serveur FTP de framboise 4. | ||
+ | <cli prompt=': | ||
+ | 331 Please specify the password. | ||
+ | Password: </ | ||
+ | 230 Login successful. | ||
+ | Remote system type is UNIX. | ||
+ | Using binary mode to transfer files. | ||
+ | <cli prompt='> | ||
+ | 221 Goodbye.</ | ||
+ | - connexion possible | ||
+ | - ne peut que télécharger | ||
+ | - à partir de **/ | ||
+ | - connexion **impossible** pour : | ||
+ | - un **utilisateur réel** de la machine (pi) :<cli prompt=' | ||
+ | ... | ||
+ | <cli prompt=': | ||
+ | 331 Please specify the password. | ||
+ | Password: | ||
+ | 530 Login incorrect. | ||
+ | Login failed.</ | ||
+ | <cli prompt='> | ||
+ | 221 Goodbye.</ | ||
+ | - ni en **anonyme** | ||
+ | </ | ||
+ | |||
+ | ==== Cinq exemples de configuration ==== | ||
+ | |||
+ | Voir la page **[[logiciel: | ||
+ | |||
+ | ===== Utilisation ===== | ||
+ | |||
+ | ==== Gestion du service ==== | ||
+ | |||
+ | Via systemctl :<cli prompt=' | ||
+ | < | ||
+ | - **start** : Démarrer le serveur | ||
+ | - **stop** : Arrêter le serveur | ||
+ | - **restart** : Redémarrer le serveur | ||
+ | - **status** : État du serveur | ||
+ | </ | ||
+ | |||
+ | ==== Se connecter en utilisant le serveur FTP comme un simple dossier ==== | ||
+ | |||
+ | === Sous Ubuntu === | ||
+ | |||
+ | < | ||
+ | - Raccourcis (menu en haut) | ||
+ | - Se connecter à un serveur : | ||
+ | - **type de service** : ftp (avec identification) | ||
+ | - **l' | ||
+ | - **le nom d' | ||
+ | - et < | ||
+ | </ | ||
+ | |||
+ | On peut aussi cocher la case pour créer un signet en le nommant. | ||
+ | |||
+ | On se retrouve avec un dossier distant dans lequel on peut naviguer. | ||
+ | |||
+ | Ne pas oublier de se déconnecter (démonter) | ||
+ | |||
+ | === Sous Windows === | ||
+ | |||
+ | < | ||
+ | - Double-clic sur Favoris réseau | ||
+ | - puis sur Ajouter un favori réseau | ||
+ | - cliquer sur Suivant deux fois de suite | ||
+ | - saisir, dans le champ Adresse réseau ou Internet, la ligne ftp:// | ||
+ | - Suivant | ||
+ | - taper l' | ||
+ | - Suivant | ||
+ | - Terminer. | ||
+ | </ | ||
+ | |||
+ | Désormais, on peut se connecter directement sur le serveur FTP, en : | ||
+ | < | ||
+ | - double-cliquant sur Favoris réseau | ||
+ | - puis sur l' | ||
+ | - et ainsi accéder aux dossiers et fichiers qu'il contient dans la limite des droits accordés. | ||
+ | </ | ||
+ | |||
+ | ===== Désinstallation ===== | ||
+ | |||
+ | < | ||
+ | - **Désinstallation partielle** : Pour désinstaller le serveur vsftpd, en gardant les fichiers de configuration :<cli prompt=' | ||
+ | - **Pour tout remettre à plat** :<cli prompt=' | ||
+ | USER@MACHINE: | ||
+ | USER@MACHINE: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | La remise à plat supprime définitivement des données de votre disque dur ! | ||
+ | |||
+ | Si vous n' | ||
+ | </ | ||
+ | |||
+ | ===== Problèmes connus ===== | ||
+ | |||
+ | ===== Voir aussi ===== | ||
+ | |||
+ | * **(fr)** [[https:// | ||
+ | |||
+ | < | ||
+ | - **VSFTPD** | ||
+ | - Documentation spécifique dans le répertoire **/ | ||
+ | - **(fr)** [[http:// | ||
+ | - **(fr)** [[https:// | ||
+ | - **(fr)** [[https:// | ||
+ | - **(fr)** [[http:// | ||
+ | - **(fr)** [[http:// | ||
+ | - **(en)** [[http:// | ||
+ | - **(en)** Page consacrée à vsFTPd sur freshmeat : [[http:// | ||
+ | - **vsftpd.conf** | ||
+ | - **(en)** Page de manuel : [[http:// | ||
+ | - **(fr)** principales options de vsftpd.conf : [[http:// | ||
+ | - **(fr)** Toutes les directives traduites en français : http:// | ||
+ | - **VSFTPD sur un Raspberry Pi** | ||
+ | - **(en)** [[https:// | ||
+ | - **(fr)** [[http:// | ||
+ | - **(en)** [[https:// | ||
+ | - **Utilisateurs virtuels** | ||
+ | - **(fr)** [[http:// | ||
+ | - **(fr)** Les pages de supinfo : [[http:// | ||
+ | - **(en)** Pour gérer votre db Berkeley : [[http:// | ||
+ | - **(fr)** un mémo, complété d' | ||
+ | - **(fr)** configuration d'un ftp avec utilisateurs virtuels : [[http:// | ||
+ | - **Didacticiels** | ||
+ | - **(fr)** [[http:// | ||
+ | - **(en)** [[ftp:// | ||
+ | - FAQ : | ||
+ | - **(en)** [[ftp:// | ||
+ | - **(fr)** [[logiciel: | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | //Basé sur << [[https:// |