Les grandes lignes du protocole FTP
-
2 modèles de fonctionnement:
-
transferts entre une machine serveur et la machine de l'utilisateur
-
transferts entre deux machines serveurs contrôlées depuis la
machine de l'utilisateur
-
le transfert de données est caractérisé par 3 aspects
(les valeurs par défaut sont marquées en
gras+italique):
-
le mode de transfert
-
Stream: les données sont transmises comme une séquence
d'octets
-
Block: les données sont transmises par blocs de taille variable;
chaque bloc commence par un descripteur suivi d'une valeur de 16 bits indiquant
le nombre d'octets de donnée. Permet d'insérer des points de
reprise pour relancer le transfert à partir d'un de ces points en
cas de rupture de connexion.
-
Compressed: plusieurs octets consécutifs identiques peuvent
être encodés sur 2 octets (facteur de répétition
+ valeur à répéter). Ce mode comporte tous les
possibilités du mode block.
-
la structure du fichier
-
File: pas de structure à proprement parler. Le fichier
est une simple séquence d'octets. Pour du texte, les lignes sont
délimitées par <CRLF>.
-
Record: le fichier est composé d'une séquence
d'enregistrements (généralement un par ligne)
-
Page: généralement quand le fichier est destiné
à une imprimante.
-
le type de représentation de l'information
-
ASCII: représentation par défaut. Le transfert
se fait dans une représentation normalisée NVT-ASCII (NVT=
Network Virtual Terminal). Il y a conversion entre la représentation
interne et la représentation NVT-ASCII s'il y a lieu.
-
EBCDIC: le transfert se fait en représentation EBCDIC 8 bits.
Cette représentation n'est généralement employée
que si la représentation interne sur les deux machines est aussi EBCDIC,
pour éviter des conversions inutiles.
-
Image: les données sont considérées comme une
suite de bits contigus transférés par groupes de 8 bits.
-
Local: les données sont transférées en bytes
"logiques" de n bits (n étant fourni en paramètre).
-
pour les types ASCII et EBCDIC, 3 formats de contrôle
de l'avancement vertical peuvent être spécifiés:
-
Non Print: pas d'information sur l'avancement vertical
-
Telnet: des caractères de contrôle (<CR>,
<LF>, <VT>, <FF>) permettent de contrôler l'avance
verticale, quand le fichier est destiné à une imprimante.
-
Carriage: convention du FORTRAN, selon laquelle le premier caractère
de chaque ligne n'est pas imprimé, mais sert plutôt à
contrôler l'avancement vertical.
-
côté serveur, le port de contrôle par défaut est
le port 21et le port de transfert de données est le port
20.
-
côté utilisateur, tout se fait par défaut sur le même
port, qui est déterminé lors de la connexion initiale.
-
la connexion est démarrée par l'utilisateur, sur le port de
contrôle du serveur.
-
à la suite d'une commande de transfert, le serveur établit
une connexion sur le port de données du client
-
en mode stream, la fin des données est indiquée par
la fermeture de la connexion de données -> peu fiable puisqu'on
ne peut pas différencier fin de transfert et rupture inopinée
de connexion.
-
les modes block et compressed permettent une procédure
de redémarrage à partir de points de reprise définis
par l'envoyeur du fichier.
-
le serveur répond à chaque commande par un code de 3 chiffres,
suivi d'un texte destiné à un humain. Le premier chiffre indique
la catégorie de la réponse (positive préliminaire, positive
finale, positive intermédiaire, négative transitoire,
négative permanente), le deuxième chiffre indique ce qui est
concerné par la réponse (syntaxe, information, connexions,
système de fichiers) et le troisième chiffre donne la signification
précise de la réponse.
-
après l'envoi d'une commande, le client doit toujours attendre un
code réponse avant d'envoyer une autre commande ou des données.
-
pour transférer entre deux serveurs, il faut:
-
mettre un des deux en mode passif, à l'aide de la commande
PASV (qui retourne l'adresse IP et le numéro de port sur
lequel ce serveur passif s'est mis en attente d'une connexion), puis lui
envoyer une commande de réception de fichier STOR,
-
indiquer à l'autre serveur (actif) l'adresse IP et le numéro
de port utilisé par le serveur passif, à l'aide de la commande
PORT,
-
envoyer au serveur actif la commande de transfert RETR.
-
si les serveurs ne sont pas correctement configurés, ce mécanisme
peut servir à contourner des mesures de restriction d'accès,
ou à envoyer de manière détournée des informations
(courrier électronique ou message de forum de discussion) en rendant
difficile la détermination de la source d'information (c.f.
The FTP Bounce Attack). En effet, la commande
PORT permet d'indiquer sur quel port d'une machine à distance
le transfert de fichier aura lieu. Si ce port est un des ports par défaut
employé par un protocole Internet et que le fichier est conçu
pour correspondre à des commandes dans ce protocole, le transfert
de fichier peut résulter en une opération toute autre qu'un
simple transfert de fichier. Par exemple, si la commande PORT est
utilisée pour diriger les données sur le port 25 d'un serveur
SMTP, le transfert de fichier peut résulter en l'envoi d'un
message de courrier électronique.
-
il existe des versions sécurisées de serveurs FTP
qui empèchent dans une grande mesure ce genre d'utilisation
détournée.
Bertrand Ibrahim
Dernière modification: 29.12.00
Site Hosting: Bronco