Up

1  Description générale du projet

1.1  Objectif

Un titre alternatif pour ce projet aurait pu être "Projet système et réseau Vintage". En effet vous allez travailler sur un projet proposé dans le département IMA de l’EUDIL au siècle dernier.

Voici le sujet original dans le format le plus portable de l’époque : comftp.ps. Votre première épreuve va donc être d’arriver à le lire.

1.2  Obsolète ?

Même si le protocole FTP (File Transfer Protocol, RFC 959) n’est pas le protocole le plus utilisé d’Internet de nos jours il perdure encore pour la distribution de fichiers.

Le sujet de 1995 est étrangement encore d’actualité. Vous ne pouvez qu’apprendre de la première partie sur la description du protocole. Nous allons aussi garder la seconde partie du sujet de 1995 sur les objectifs des travaux pratiques (le terme de projet était moins utilisé au XXème siècle). Quelques mises à jour sur cette seconde partie cependant :

Pour la troisième partie du sujet d’origine, les choses se compliquent. Les exercices suggérés en section 3.1 sont tout à fait intéressants et il vous est demandé de les effectuer. Vous remplacerez bien entendu les utilitaires obsolètes netstat et telnet par les utilitaires modernes ss et nc. Installez un serveur FTP sur votre machine au besoin (e.g. vsftpd). Comme serveur FTP public utilisez ftp.polytech-lille.fr.

Par contre vous allez devoir prendre des libertés avec les sections sur la programmation système (3.2) et la programmation réseau (3.3).

1.3  Rénovation système

Nous allons garder le principe de communication entre les utilitaires ftpxxx et le processus d’actions via mémoire partagée et sémaphores IPC. Par contre nous voulons optimiser au delà de ce qui est demandé dans la section 3.2.1 : nous voulons pouvoir récupérer plusieurs listes de répertoires ou fichiers simultanément. Proposez une méthode sachant que les mémoires des PC actuels sont un peu plus importantes que celles des PC en 1995.

Vous garderez l’idée de la bibliothèque des fonctions liées aux IPC (section 3.2.3) en ajoutant la fonction de création des IPC creer_ipc incluse, à l’origine, dans le processus d’actions. Construisez une bibliothèque statique et plutôt sous le nom libipc.a. Les sources de cette bibliothèque doivent se trouver dans un sous-répertoire dédié du projet. La bibliothèque elle-même doit être générée dans le sous-répertoire des bibliothèques statiques du projet.

Pour cette partie vous pouvez vous appuyer sur les supports de cours de Thomas Vantroys : https://tvantroys.plil.fr/IMA4SC/COURS/06_ipc.pdf.

1.4  Rénovation réseau

Il vous est recommandé de remplacer totalement les fonctions proposées dans la section 3.3.1 par les fonctions génériques IPv4 / IPv6 vues en cours. Le principe de la bibliothèque des fonctions réseau est à conserver. Cette fois construisez la bibliothèque de façon dynamique sous le nom libres.so. Les sources de cette bibliothèque ont aussi leur sous-répertoire dédié. La bibliothèque doit être générée dans le sous-répertoire des bibliothèques dynamique du projet.

Concernant le processus d’actions (section 3.3.2), la liste des fonctions à implanter reste d’actualité. Bien entendu votre maitrise de la fonction système fdopen vous évitera d’avoir à implanter les fonctions lire et ecrire proposées pour les fonctions connecte_utilisateur, change_repertoire et generique_fichier.

La modification la plus importante du processus d’actions va consister à utiliser des processus légers pour implanter traite_act. L’idée est que plusieurs commandes ftpls ou ftpcat puissent s’exécuter simultanément. Les sources des exécutables doivent, a minima, se trouve dans un sous-répertoire du projet. Les exécutables seront générés dans le sous-répertoire des exécutables du projet.

1.5  Ajout

La grande différence entre l’Internet de 1995 et l’actuel est la tendance à chiffrer tout et n’importe quoi. Pour suivre la tendance vous allez permettre à votre client FTP de se connecter sur des serveurs FTPS implicites. Ces serveurs écoutent sur le ports 990 et y attendent une négociation TLS. Les tests peuvent être effectués sur les serveurs ftps://demo:password@test.rebex.net ou ftps://ftprex.plil.fr. Toujours pour les tests, vous pouvez utiliser le client Linux FTPS lftp.

1.6  Chiffrement

Vous avez un exemple d’utilisation de la bibliothèque libssl pour établir des communications chiffrées à l’adresse https://github.com/openssl/openssl/tree/master/demos/sslecho.

Il serait assez peu pratique d’adapter directement l’exemple aux sources fournies pour le projet. En particulier, l’obligation d’utiliser les fonctions SSL_read et SSL_write n’est pas très compatibles avec l’usage intensif des fonctions fgets et fprintf pour l’implantation du protocole FTP.

Vous allez donc créer un nouveau sous-répertoire dédié dans le projet, ce répertoire doit contenir les sources d’une bibliothèque dynamique de chiffrement. Cette bibliothèque doit, notablement, inclure une fonction socket2SSL définie ci-après.

La fonction socket2SSL a vocation à être appelée après connect dans les clients TCP et après accept dans les serveurs TCP. Le descripteur obtenu peut alors être passé dans fdopen pour permettre l’utilisation des fonctions fgets, fprintf, etc. Ce qui sera écrit via le FILE * obtenu par fdopen sera, dans un premier temps, chiffré par SSL_write puis envoyé, dans un second temps, sur la connexion TCP. Ce qui sera lu via le FILE * sera récupéré de la connexion TCP puis déchiffré via le SSL_read.


Up