Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ce wiki a pour but de détailler les différentes étapes pour mettre en place un serveur de partage de fichier FTP, en utilisant vsftpd (Very Secure FTP Daemon).
Un serveur vsftpd permet comme un serveur FTP de déterminer un le lieu sur votre serveur depuis lequel il est possible de transférer des fichiers depuis son ordinateur personnel sur lequel est installé un client ftp.
Il y a plusieurs façon de créer des espaces ftp:
- En utilisant ou en créant un utilisateur linux dont le répertoire personnel sera l'espace ftp.
- En utilisant une base de donnée de type Berkeley (mode utilisateurs viruels)
Nous allons d'abord mettre en œuvre la solution un utilisateur linux pour chaque espace ftp car c'est certainement la solution la plus simple. Elle ne convient pas pour un grand nombre d'espaces FTP.
La faille majeur d'un serveur vsftpd est que tout passe en clair. Il faudra donc installer un certificat ssl qui permet le chiffrement de la connexion au serveur.
apt-get install vsftpd
Pour le savoir deux méthodes :
netstat -a | grep ftp
tcp 0 0 *:ftp *:* LISTEN
→ C'est ok !
/etc/init.d/vsftpd status
vsftpd is running
→ C'est ok aussi !
Attention il faut être derrière un routeur c'est-à-dire en local.
vim /etc/vsftpd.conf
listen=YES anonymous_enable=NO local_enable=YES ftpd_banner=Bienvenue !
Depuis le client une autre machine virtuelle par exemple que celle sur laquelle on a installé vsftpd on tape simplement :
ftp 192.168.0.10
192.168.0.10 : étant l'IP du serveur vsftpd
Connected to 192.168.0.10. 220 Bienvenue ! Name (192.168.0.10:hypathie): hypathie 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> exit 221 Goodbye.
oùPassword
: est le mot de passe du compte de l'utilisateur “hypathie” sur le système Linux.
Voyons maintenant le détail des options possibles et l'installation d'un certificat ssl pour chiffrer le mot de passe de l'utilisateur.
apt-get install openssl
Peut importe d'où la commande suivante va être lancé on déplacera le fichier qu'elle va créer.
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
Common Name
: mettre l'IP du serveur ou le nom de domaine si un DNS en local est installé.
mv vsftpd.pem /etc/ssl/certs
chown root:root /etc/ssl/certs/vsftpd.pem
chmod 600 /etc/ssl/certs/vsftpd.pem
Et voilà !
Il faut maintenant éditer à nouveau le fichier /etc/vsftpd.conf
Voici les options utilisées et commentées à partir de man vsftpd, histoire de comprendre ce qu'on fait. C'est sûr, c'est long …
Pour les options qui ne sont pas utilisées dans cette configuration, voir le man ou en ligne ici : https://security.appspot.com/vsftpd/vsftpd_conf.html
vim /etc/vsftpd.conf
# Pour mettre en mode standalone : ce mode permet au service FTP d'avoir # son propre démon au lieu de fonctionner sous le démon des autres # service du sytème, le démon xinetd # listen=YES # # On n'utilisera pas ipv6 #listen_ipv6=YES # # On ne veut pas de connexions en mode anonymous qui permet à quiconque # de se connecter au serveur # anonymous_enable=NO # # On veut que les utilisateurs locaux puissent se connecter local_enable=YES # # On veut que les utilisateurs puissent remonter des fichiers sur le serveur write_enable=YES # # Umask par défaut pour les utilisateurs locaux est 077 # On peut changer cela en 022, si les utilisateurs s'attendent à ce que # (022 soit utilisé par la plupart des autres serveurs FTP). local_umask=022 # # # On interdit l’upload anonyme anon_upload_enable=NO # # On interdit l'upload anonyme anon_mkdir_write_enable=NO # # Lorsque cette option est activée, un message apparaît chaque fois # qu'un utilisateur ouvre un répertoire avec un fichier message. # Ce message se trouve dans le répertoire qui est ouvert. # Le nom de ce fichier est spécifié dans la directive # message_file et part défaut prend la valeur .message. # man page précise que par défaut la valeur est NO mais qu'une simple # configuration peut mettre la valeur YES. Cela varie selon les distributions. dirmessage_enable=NO # # Les heures d’enregistrement des fichiers seront affichées à l’heure locale. use_localtime=YES # # Pour que les actions des utilisateurs soient loggées. xferlog_enable=YES # # On vérifie que la demande de port provienne forcément du port 20 # de la machine cliente. connect_from_port_20=YES # # Lorsque cette option est activée, tous les fichiers téléléchargés # vers les serveurs par des utilisateurs anonymes deviennent # la propriété de l'utilisateur spécifié dans la directive chown_username. chown_uploads=yes # Spécifie la propriété de fichiers téléchargés anonymement # vers le serveur si la directive chown_uploads est activée. chown_username=hypathie # # Les logs seront enregistres dans le fichier /var/log/vsftpd.log xferlog_file=/var/log/vsftpd.log # #Lorsque l'option "xferlog_std_format=YES" est activée de concert avec # xferlog_enable, alors un seul un journal de transfert de fichiers # compatible avec wu-ftpd est enregistré dans le fichier spécifié # dans la directive xferlog_file (par défaut /var/log/xferlog). # Il est important de noter ici que ce fichier journalise seulement # les transferts de fichiers et n'enregistre pas les connexions au serveur. # #Lorsque l'option "xferlog_std_format=NO", on peut ajouter les directives # "log_ftp_protocol=YES" et "xferlog_enable=YES" # ainsi toutes les commandes et réponses FTP seront journalisées. # Cela est très utilise lors d'opérations de débogage. xferlog_std_format=YES # # On declare les valeurs de timeout. Spécifie la durée maximale pouvant # s'écouler entre des commandes depuis un client distant. # Une fois cette durée écoulée, la connexion au client distant est fermée. idle_session_timeout=600 # # Spécifie la durée maximale exprimée en secondes, # pendant laquelle les transferts de données peuvent s'arrêter. data_connection_timeout=120 # #On ajoute une indication sur la durée maximale exprimée en secondes, # donnée à un client utilisant un mode actif pour répondre # à une connexion de données. connect_timeout=60 #On ajoute une indication sur la durée donnée à un client # utilisant une connexion passive pour se connecter. accept_timeout=60 # Il est recommandé que vous définissez sur votre système un utilisateur # unique que le serveur FTP peut utiliser comme un utilisateur non # privilégié et totalement isolé. # Cela restreint complétement les privilèges d'exécution du processus vsftpd # non privilégié (lancé au moment de l'attente d'authentification # puis lors de l'automutilation) en lui dédiant un utilisateur (par défaut # nobody). Mais il faut de créer cet utilisateur non-privilégié (par # exemple vsftpd) et de le spécifier par la directive nopriv_user=vsftpd. # Si on ne crée pas cet utilisateur plus personne peut être accepté. # man page indique que par défaut la valeur est "Default: nobody". #nopriv_user=ftpsecure nopriv_user=nobody # # Par sécurité, on interdit la commande ABOR # Elle permet de stopper un téléchargement asynchrone en cours. # Elle est considérée comme complexe et inélégante, parce qu’async ABOR # produit des effets différents en fonction des clients. On l'utilise quand # on ne sait pas quel type de client est susceptible de se connecter. async_abor_enable=NO # # Les transferts en ASCII sont souvent source de confusions. ascii_upload_enable=NO ascii_download_enable=NO # # On change la bannière pour reconnaître note serveur et c'est plus joli ! ftpd_banner=Bienvenue ! # # Utile pour prévenir certaines attaques : Lorsque cette option est activée, # tout utilisateur anonyme employant des mots de passe de messagerie # spécifiés dans /etc/vsftpd.banned_emails se voit refuser l'accès au serveur. # Le nom du fichier référencé par cette directive peut être spécifié # à l'aide de la directive banned_email_file # On l'utilise avec l'autorisation des connexions anonymes, ce qu'on a refusé. #deny_email_enable=YES # (default follows) #banned_email_file=/etc/vsftpd.banned_emails # ### Si on veut limiter les utilisateurs à leur repertoire chroot_local_user=NO # # Mais il est à noter d'abord que : # 1) Si on a choisi "chroot_local_user=YES" # alors on doit mettre "chroot_list_enable=NO" # sinon la liste_enable indique les utilisateurs qui ne sont pas chrootés. # # 2) Une mesure de sécurité ajoutée à vsftpd dans sa version 2.3.5, refuse # de chrooter un client dans un répertoire pour lequel l'utilisateur possède # les droits d'écriture. Du coup avec :"chroot_local_user=YES" # un refus de connexion à lieu lorsque un utilisateur tente de se logger : # "500 OOPS: vsftpd: refusing to run with writable root inside chroot() #Login failed. # # Avec "chroot_local_user=YES" la méthode pour contourner cette sécurité: #"chroot_local_user=YES" #"allow_writeable_chroot=YES" # Et ""chroot_list_enable=NO" # ne fonctionne pas # ### Il en va de même pour l'option "chroot_list_enable=YES" # (avec "chroot_local_user=NO") qui devrait permettre de fournir # une liste des utilisateurs locaux dont le répertoire personnel peut # placé dans un chroot () lors de la connexion. # Par défaut, le fichier contenant cette liste devrait être # /etc/vsftpd.chroot_list # Mais cela ne fonctionne pas. #chroot_list_file=/etc/vsftpd.chroot_list # ## Désactive le listage récursif des répertoires par la commande "ls -R", # afin d'éviter trop d'appels sur le système de fichier. # Certain clients FTP comme "ncftp" ou "mirror" réclame l'option "-R" # pour fonctionner. # ls_recurse_enable=NO # # Customization # # Some of vsftpd's settings don't fit the filesystem layout by # default. # # Cette option doit être le nom d'un répertoire qui est vide. # En outre, le répertoire ne doit pas être accessible en écriture # par l'utilisateur ftp. # Ce répertoire est utilisé comme un chroot sécurisé. # Par exemple pour emprisonner le démon vsftpd : # "secure_chroot_dir=/var/run/vsftpd". # Mais tout va bien par défaut, à l'installation /var/run/vsftpd/empty # possède les bons droits et il est vide. secure_chroot_dir=/var/run/vsftpd/empty # # Spécifie le nom du service PAM pour vsftpd: # Le PAM est système d'authentification utilisé en standard sous Linux. # DOC en français : http://www-igm.univ-mlv.fr/~dr/XPOSE2003/augereau/2.html pam_service_name=vsftpd # ###mise en place du chiffrement ssl # #Remarque sur l'utilisation de ssl: #Soit on met certificat et clé privée dans /etc/ssl/private/vstfpd.pem #Soit on met le certificat (copie) dans # et dans ce cas, on ajoute la directive # "rsa_private_key_file=/fichier/clé/privée" # Cette option spécifie l'emplacement de la clé privée RSA à # utiliser pour les connexions cryptées SSL. # emplacement par défaut : Default: (none) ssl_enable=YES validate_cert=NO ssl_ciphers=HIGH require_ssl_reuse=NO allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO # Emplacement du certificat RSA à utiliser pour les connections SSL. rsa_cert_file=/etc/ssl/certs/vsftpd.pem # pasv_address=192.168.0.10
Pour la signification des options concernant ssl :
ssl_enable: Si elle est activée, vsftpd utilise OpenSSL, et vsftpd soutiendra les connexions sécurisées via SSL.
Cela s'applique à la connexion de contrôle (y compris login) et les connexions de données.
Vous aurez besoin d'un client avec le support SSL.
REMARQUE !! Méfiez-vous de cette option.
vsftpd ne donne aucune garantie quant à la sécurité des bibliothèques OpenSSL. En activant cette option, vous déclarez que vous faites confiance à la sécurité de votre bibliothèque OpenSSL.
validate_cert : Si définie à “yes”, tous les certificats clients SSL reçus doivent validés. Certificats auto-signés ne constituent pas une validation. (Dans ce wiki ont a auto-signé, pour pouvoir chiffrer, mais l'utilisation est locale !)
ssl_ciphers : Cette option peut être utilisée pour sélectionner les chiffrements SSL vsftpd qui permettront des connexions SSL chiffrées.
Voir la page de man sur les chiffrement pour plus de détails.
Par défaut: DES-CBC3-SHA
require_ssl_reuse : Si définie à “yes”, toutes les connexions de données SSL dépendent de la session SSL. Mieux vaut la désactiver. Pour une discussion sur les conséquences, voir http://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html (Ajouté à v2.1.0).
Par défaut: OUI
allow_anon_ssl : Ne s'applique que si “ssl_enable” est actif. Si la valeur est “YES”, les utilisateurs anonymes seront autorisés à utiliser des connexions SSL sécurisées.
Default: NO
force_local_data_ssl : Ne s'applique que si “ssl_enable” est activée. Si elle est activée, toutes les connexions non anonymes sont contraints d'utiliser une connexion SSL sécurisée pour envoyer et recevoir des données sur les connexions de données.
Par défaut: OUI
force_local_logins_ssl : Ne s'applique que si “ssl_enable” est activée. Si elle est activée, toutes les connexions non anonymes sont contraints d'utiliser un mot de passe.
Par défaut: OUI
ssl_tlsv1 : Ne s'applique que si “ssl_enable” est activée. Si elle est activée, cette option permettra les TLS connexions de protocole v1. Les connexions TLS de sont préférables.
Par défaut: OUI
ssl_sslv2 : Ne s'applique que si “ssl_enable” est activée. Si elle est activée, cette option permettra les connexions de protocole SSL v2. Les connexions TLS de sont très bonnes.
Par défaut: NON
ssl_sslv3 : Ne s'applique que si ssl_enable est activée. Si elle est activée, cette option permettra les connexions de protocole SSL v3. Les connexions TLS de sont très bonnes.
Par défaut: NON
pasv_address : Utilisez cette option pour remplacer l'adresse IP que vsftpd affichera en réponse de la commande PASV. Fournir une adresse IP numérique, à moins pasv_addr_resolve soit activée, dans ce cas, vous pouvez fournir un nom d'hôte qui résolu par un DNS mis en place lors du démarrage.
Valeur par défaut: (aucune)
apt-get install ftp-ssl
ftp-ssl 192.168.0.10
où192.168.0.10
est à remplacer par l'IP de votre serveur vsftpd
Connected to 192.168.0.10. 220 Bienvenue ! Name (192.168.0.10:hypathie): hypathie 234 Proceed with negotiation. [SSL Cipher AES256-GCM-SHA384] 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> exit 221 Goodbye.
oùPassword
: est le mot de passe du compte de l'utilisateur “hypathie” sur le système Linux.
Et voilà !