Le Coin Wiki
d'Olivier Dalle
$WikiTagline
 

L’objectif du projet cette année est la réalisation d’un remote shell (rsh). Une application de remote shell est un programme de type client-server dans lequel un processus connecté à la console sur la machine locale lance à distance des commande sur la machine distante sur laquelle tourne le processus serveur.

Le projet est à réaliser en binôme. Les binômes devront être annoncés à l’enseignant chargé de TD lors de la séance de TD de la semaine 10 (TD1: 04/04 - TD2: 08/04)

Cahier des charges

Dispositifs de sécurité

Comme l’exécution de processus à distance constitue un trou de sécurité évident, un certain nombre de mesures de sécurité devront impérativement être respectées:

  • partage de secrets: le client et le serveur devront utiliser un protocole comportant un phase d’authentification basée sur la connaissance d’un secret partagé;
  • le serveur sera programmé pour s’arrêter tout seul au bout de 20 minutes;
  • le serveur contiendra une liste noire de commandes interdites (telles que rm par exemple)

La note finale tiendra compte de la rigueur et de l’originalité des dispositifs de sécurité utilisés dans ce projet.

Client-serveur simple

La réalisation d’un client serveur simple constitue le minimum demandé:

  • Le serveur est supposé être lancé manuellement à l’avance
  • Le serveur attend les demandes de connexion TCP depuis un ou plusieurs clients
  • Le serveur recoit des demandes d’execution de commandes
  • Pour chaque demande d’exécution, le serveur fait les choses suivantes:
    • Vérifications de sécurité (par exemple vérificqtion que la commande est autorisée)
    • création d’un tube pour communiquer avec un processus fils
    • création d’un processus fils pour exécuter la commande
    • gestion des entrées/sorties
    • gestion des signaux
    • Rapport de terminaison

La bonne réalisation de ces objectifs sera suffisante à obtenir la moyenne et même largement plus si la réalisation est d’excellente qualité. Les critères de qualité évalués sont:

  • pertinence des algorithmes et solutions employées
  • qualité du code (utilisation de classes et fonction, choix des noms de variable, lisibilité du code, pertinence des commentaires, etc.)
  • exécution sans erreur

Client-serveur avancé

Cette question optionnelle permettra d’obtenir des points bonus à condition que la partie client-server simple soit bien réalisée. (En aucun cas elle se substitue au client-serveur simple).

L’objectif de cette question est de permettre l’exécution de commande en parallèle sur plusieurs machines:

  • Le client peut être lancé avec plusieurs adresses de serveur
  • le client se conencte à tous les serveurs
  • chaque commande saisie à la console sur le client est envoyée simulyanément à tous les serveurs
  • le client collecte et affiche les résultats en provenance de chaque serveur