EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Païou essaie de comprendre le transfert de fichiers avec FTP

Historique

12 août 2013 : Nouvelle page regroupant les bases de FTP.

Difficulté

Pour : utilisateur un peu curieux.

Introduction

Le File Transfer Protocol est un protocole qui permet à des ordinateur distants d'échanger des fichiers à travers un réseau.
Les applications sont multiples :

Haut

Un peu de théorie

Ce paragraphe vous sera très utile pour :

FTP obéit à un modèle client-serveur, c'est-à-dire qu'une des deux parties, le client, envoie des requêtes vers l'autre partie , appelée serveur. Et le serveur répond aux requêtes.

Exemple, en ligne de commande, avec lftp, en mode debug, pour l'utilisateur
login :
lftp -d -u login adresse_serveur

Le processus de connexion

Le client ouvre une session FTP sur un serveur. Pour ceci, il envoie une requête sur le port 21 du serveur.
(Mais le serveur peut être configuré pour écouter sur un autre port. Dans ce cas, il faut connaître le numéro de ce port et lui envoyer la requête en précisant le port).

La négociation se poursuit sur ce port :

Pour les curieux, dialogue avec lftp; survolez la ligne :

Partie commune

---- Connexion à 192.168.0.10 (192.168.0.10) port 21
<--- 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
<--- 220-You are user number 1 of 50 allowed.
<--- 220-Local time is now 17:58. Server port: 21.
<--- 220-IPv6 connections are also welcome on this server.
<--- 220 You will be disconnected after 15 minutes of inactivity.
---> FEAT
<--- 211-Extensions supported:
<--- EPRT
<--- IDLE
<--- MDTM
<--- SIZE
<--- MFMT
<--- REST STREAM
<--- MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
<--- MLSD
<--- AUTH TLS
<--- PBSZ
<--- PROT
<--- UTF8
<--- ESTA
<--- PASV
<--- EPSV
<--- SPSV
<--- ESTP
<--- 211 End.
---> AUTH TLS
<--- 500 This security scheme is not implemented
---> OPTS UTF8 ON
<--- 200 OK, UTF-8 enabled
---> OPTS MLST type;size;modify;UNIX.mode;UNIX.uid;UNIX.gid;
<--- 200 MLST OPTS type;size;sizd;modify;UNIX.mode;UNIX.uid;UNIX.gid;unique;
---> USER georges
<--- 331 User georges OK. Password required
---> PASS XXXX
<--- 230 OK. Current restricted directory is /
---> PWD
<--- 257 "/" is your current location
---> PASV

suite en mode passif

<--- 227 Entering Passive Mode (192,168,0,10,250,174)

suite en mode actif

---> PORT 192,168,0,2,175,241
<--- 200 PORT command successful

Haut

Utilisateur identifié et utilisateur anonyme

Un serveur FTP demande généralement une identification du client avec un mot de passe.
Pour accéder aux parties privées, les clients doivent avoir un compte sur le serveur et ils accèdent en lecture/écriture aux répertoires qui leur sont dédiés.
C'est le cas, par exemple, pour les mises à jour de pages personnelles sur un serveur web. Cela peut aussi être la mise à jour des sauvegardes sur le serveur bakup.

Mais il existe souvent un compte "anonyme", qui donne accès en lecture seule dans la partie publique du serveur, à tout client distant, se connectant avec le login anonymous.

Haut

Mode actif ou passif

Le protocole TCP nécessite deux ports, l'un pour les commandes, l'autre pour les données.
Deux cas de figure se présentent :

Mode actif

Mode actif

Ceci signifie que, pour la transmission des données, le serveur joue le rôle de client et le client joue le rôle de serveur. Cela aura une conséquence très importante pour le client, s'il se trouve derrière un pare-feu ou un routeur NAT. Les données seraient bloquées.

Haut

Mode passif

Mode actif

Le routeur NAT n'est plus perturbé puisque la connexion est demandée côté client.
Mais, côté serveur, il faudra tout de même en tenir compte de ces ports à ouvrir pour le pare-feu du serveur, sil y en a un.

En résumé

En mode actif, c'est le client qui décide sur quel port doivent entrer les données. Il définit ce port.
Le serveur initie le transfert.
Si le client se trouve derrière un NAT ou un pare-feu, les données seront bloquées, vu qu'il n'est pas possible de connaître le port qui devrait être translaté ou ouvert.

En mode passif, c'est le serveur qui définit le port par lequel il envoie les données. C'est le client qui initie le transfert. Il n'y a donc plus de problème au niveau du client. Sur le serveur, il est possible de spécifier une plage de ports de données et donc d'ouvrir cette plage sur le pare-feu.

Haut

Le transport crypté avec TLS/SSL

Transport Layer Security (TLS), anciennement nommé Secure Socket Layer (SSL), est un protocole de sécurisation des échanges sur Internet.
Développé à l'origine par Netscape (SSL version 2 et SSL version 3). Il a été renommé en Transport Layer Security (TLS) par l'IETF suite au rachat du brevet de Netscape par l'IETF en 2001.
Il y a très peu de différences entre SSL version 3 et TLS version 1 (qui correspond à la version 3.1 du protocole SSL) rendant les deux protocoles non interopérables, mais TLS a mis en place un mécanisme de compatibilité ascendante avec SSL.
TLS diffère de SSL pour la génération des clés symétriques. Cette génération est plus sécurisée dans TLS que dans SSLv3 dans la mesure où aucune étape de l'algorithme ne repose uniquement sur MD5 pour lequel sont apparues quelques faiblesses en cryptanalyse.

Haut

Serveurs FTP courants

Sous Linux, il existe un bon choix de serveurs FTP. En voici 3 :

Haut

Utilisateurs virtuels et hôte virtuel

Utilisateurs virtuels

Vous avez peut-être besoin de définir des permissions pour des utilisateurs autres que ceux qui sont enregistrés sur le serveur FTP (et qui figurent donc dans le fichier /etc/passwd) : des utilisateurs virtuels.

Moyennant une configuration adéquate, Pure-FTPd, ProFTPd et VsFTPd acceptent des utilisateurs virtuels.

Hôte virtuel

La même machine physique peut abriter un ou plusieurs serveurs ProFTPD supplémentaires : des hôtes virtuels.
Les utilisateurs peuvent y accéder en donnant une adresse IP différente ou un port différent (ou les deux).

Haut

Installation et configuration

L'installation et la configuration seront expliquées sur des pages séparées, pour chaque serveur.