\documentclass[french,a4paper,10pt]{article}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
% 
% \renewcommand{\sfdefault}{phv}
% \renewcommand{\rmdefault}{ptm}
% \renewcommand{\ttdefault}{pcr}

\newtheorem{quest}{Question}

\title{\textbf{Système et réseau : mise en oeuvre et exploitation}}
\date{\textbf{Version. simplet et joyeux}}

\author{Mathieu Petit}

\begin{document}

\maketitle

\section{Introduction}
\subsection{Objectif} La finalité de ce TP est double. Il s'agit d'une part de vous familiariser avec l'environnement Unix et d'autre part, de vous faire analyser
une communication entre ordinateurs.

Il s'agira d'effectuer la mise en réseau des 6 machines, de vérifier les protocoles de communication {\it telnet} et {\it Ssh}. Vous démontrerez, en analysant les trames TCP, que le protocole {\it Ssh} est plus sécurisé que le protocole {\it telnet}. Enfin, vous explorerez des mécanismes d'accès et d'exploitation de machine à distance.

A la fin du TP, vous me rendrez une copie contenant vos éléments de réflexion. Ceux-ci seront notés\dots J'attends donc de votre
part un document rédigé et répondant aux questions ci après. Justifiez vos réponses, si vous manquez d'informations, internet est une bonne source, l'ordinateur ``prof'' est connecté sur l'extérieur.

\subsection{Le matériel\dots}
La démarche que nous vous proposons consiste à analyser les communications entre ordinateurs. Certains ont comme système d'exploitation Linux (``joyeux'', ``dormeur'', ``atchoum''), les autres utilisent Windows (``grincheux'', ``simplet'', ``timide''). Les machines seront montées en réseau Ethernet. Dans un premier temps, nous allons provoquer des communications entre les machines. Puis nous analyserons les communications entre celles-ci. Enfin nous exploiterons quelques possibilités plus subtiles d'Unix et Windows.

En utilisant la démarche présentée par la suite ainsi que les logiciels de la distribution Ubuntu et des logiciels Windows mis à votre disposition, vous réaliserez les taches suivantes.

\section{Quelques vérifications}
\subsection{configuration physique du réseau (couche physique-liaison)}
Cette opération est a effectuer en concertation avec les autres binommes présents. Les machines sont livrées en état ``sortie d'usine'' et aucune configuration du réseau n'est effectuée. En premier lieu, et avant d'allumer les ordinateurs :
\begin{enumerate}
\item câblez l'ensemble du réseau. Utilisez les câbles droits et croisés fournis ainsi que les 2 hubs
\begin{quest}Présentez un schéma du câblage effectué\end{quest}
\begin{quest}À quelle fin avez vous utilisé le câble croisé\end{quest}
\item faites valider votre câblage par l'encadrant !
\end{enumerate}
\begin{figure}[h]
	\centering
	\includegraphics[width=6cm]{reseau.png}
	\caption{Plan du réseau}
	\label{neurone}
\end{figure}

\subsection{configuration des machines (couche transport-reseau)}
Les comptes ouverts sur chaque machine sont du type ``eleve'' + ``nom\_de\_machine'' comme mot de passe ;  vous êtes administrateur sur chaque machine. Nous allons configurer les cartes réseau pour pouvoir échanger des trames.
\begin{enumerate}
\item Démarrez les machines et logez vous.
\item Sous {\it Windows}, configurez le réseau à partir du panneau de configuration. L'IP est 10.5.0.1, le réseau 10.5.0.0/16.
\begin{quest} Précisez le masque de sous réseau \end{quest}
\item faites de même sous {\it linux} à partir de {\it Système$\rightarrow$administration$\rightarrow$ réseau}. L'adresse IP est 10.5.0.2, le masque identique à celui de la machine {\it Windows}.
\item testez l'activation de la connexion depuis la console avec les commandes {\it ipconfig} et {\it ifconfig}, sous {\it windows} et {\it linux}, respectivement.\footnote{Rappel : sous \textit{linux}, vous trouvez la console dans \textit{applications$\rightarrow$accessoires}, sous \textit{windows}, c'est menu \textit{démarrer$\rightarrow$tout les programmes$\rightarrow$accessoires}}
\begin{quest} Quelles informations sont retournées par ces commandes ?\end{quest}
\end{enumerate}

\subsection{La déclaration des machines (couche application)}
Pour s'assurer du bon dialogue entre les machines, il faut les déclarer. Nous réaliserons cette étape sans utiliser de DNS (Domain Name Server). Pour cela, nous devons déclarer chacune des machines. Les machines sur lesquelles vous travaillez s'appellent respectivement ``simplet'' ({\it Windows}) et ``joyeux'' ({\it linux})
\begin{enumerate}
\item De \textbf{simplet}, après avoir ouvert une boite de commande MS-DOS, essayez de ``pinger'' \textbf{joyeux}. avec la commande \textit{ping joyeux}
\begin{quest}Que se passe t'il ?\end{quest}
%\footnote{rien. L'ordinateur ne connaît pas de
%machine {\it linux}}
%Pour information, il faut utiliser la commande {\bf ping <host>}.
%
\item Éditez le fichier {\it c:$\backslash$windows$\backslash$system32$\backslash$drivers$\backslash$etc$\backslash$hosts}.
Ajoutez dans le fichier les lignes suivantes :
\begin{center}
\begin{tabular}{| p{2cm} p{2cm}|}\hline
10.5.0.1 & simplet \\
10.5.0.2 & joyeux \\
... & \\
10.5.0.6 & atchoum \\  \hline
\end{tabular}
\end{center}
\item Sous Linux, ouvrez une console et logez vous en tant qu'administrateur (tapez {\it sudo -s} et $\lbrack$enter$\rbrack$ puis renseignez le mot de passe d'utilisateur pour vous connecter en super-utilisateur).
\item Dans le fichier {\it /etc/hosts}, faites les mêmes modifications ({\it nano nom\_fichier} pour éditer).
\item Essayez à nouveau de ``pinger'' \textbf{joyeux}.
\begin{quest}Que se passe t'il ? détaillez les champs des trames reçues \end{quest}
\item Vérifiez que vous arrivez à joindre les stations des autres binomes
%\footnote{La machine est reconnue est identifiée sur le
%réseau.}
%
\end{enumerate}

% \subsection{Génération de trafic}
% Pour la suite du TP, il est intéressant de générer ``artificiellement'' un peu de trafic sur le réseau. Nous allons lancer des processus ininterrompus de pings entre les différentes stations \textbf{Linux}.
% \begin{enumerate}
%  \item Ouvrez une console sur \textbf{joyeux} et placez-la en mode ``always on top'' (clic droit sur la barre de titre)
%  \item Lancez la commande \textit{ping dormeur $>$ /dev/null $\&$}\footnote{Vous connaissez la commande ping ; ``$>$'' permet de re-diriger sa sortie vers ``/dev/null'' qui est une sorte de poubelle. le ``\&'' final permet d'envoyer l'ensemble de la commande en tâche de fond pour récupérer le prompt du shell.}
% \end{enumerate}
% Ne fermez pas cette fenêtre, laissez la dans un coin de votre écran ; vous vous en servirez pour taper les commandes de la suite de ce TP.


\subsection{La connexion telnet}
On considère maintenant qu'il n'y a plus de problèmes sur le réseau. Nous allons essayer de réaliser une connexion de type {\bf
telnet} entre \textbf{simplet} et \textbf{joyeux}. Pour cela, nous allons ouvrir un serveur telnet sur la machine \textbf{Windows},
\begin{enumerate}
 \item Démarrez le service {\bf telnet} sous Windows (voir dans le \textit{panneau de config\-uration$\rightarrow$administration$\rightarrow$services})
 \item Depuis la machine linux, connectez vous via un client telnet (commande \textit{telnet nom\_du\_serveur})
\begin{quest}Que vous affiche la console linux ouverte ? Expliquez\end{quest}
\item A partir de Linux, créez un nouveau répertoire Lambda sur le disque c:$\backslash$ (commandes MsDOS \textit{cd} et \textit{MkDir nom\_du\_répertoire})
\item Vérifiez sur \textbf{simplet} la présence du répertoire nouvellement crée
\begin{quest}En quelques mots, à quoi sert un serveur Telnet ?\end{quest}
\end{enumerate}
% 
% \begin{enumerate}
% \item le serveur telnet n'est pas installé sur
% {\it linux}.
% \item dans votre repertoire home se trouve le paquet ubuntu qu'il faut installer, il contient les binaires du serveur telnet. réalisez les taches suivantes dans la console:\\
% {\sf
% \begin{tabular}{||l}
% sudo dpkg -i <nom\_du\_paquet>.deb\\
% sudo in.telnetd -debug\\
% \end{tabular}
% }
% \item Le serveur est lancé en mode debug, c'est à dire qu'il n'accepte qu'une connexion et qu'il se coupe apres celle-ci. Pensez bien à relancer le serveur en cas de problèmes.
% %
% \item Sur {\it windoze}, lancez le programme {\bf telnet} et
% connectez vous comme utilisateur {\bf <utilisateur>/<pass>}.
% \begin{quest}Que se passe t'il ?\end{quest}%\footnote{Vous avez pris la main sur la machine
% %linux.}
% \begin{quest}Si vous tapez sur {\it linux}, la commande {\bf who}. Que
% constatez-vous ?\end{quest}%\footnote{La présence d'un utilisateur lambda
% %connecté à partir d'un machine {\it windoze}}
% %
% \item 
% %
% \item Application : à partir de Linux, créez un nouveau répertoire Lambda sur le disque c:$\backslash$.
% \end{enumerate}
% \begin{quest}En quelques mots, à quoi sert un serveur Telnet ?\end{quest}

\subsection{La connexion Ssh (couche session-application)}
Pour réaliser une connexion Ssh, il est nécessaire qu'un serveur sécurisé soit installé. Le protocole Ssh permet une connexion sécurisée entre deux machines. À l'inverse du point précédent, nous installerons le serveur sur la machine \textbf{Linux}.
\begin{enumerate}
%  \item Avec l'outil d'installation de logiciels \textbf{Synaptic}, recherchez et installez les paquets nécessaires au serveur open-Ssh
 \item Vérifiez que le serveur est bien lancé (commande \textit{ps -aux$\mid$grep sshd})
 \item Depuis la machine \textbf{Windows}, connectez vous à la station \textbf{joyeux} avec le logiciel \textbf{Putty}
 \item une fois connecté, tapez sous linux la commande \textit{who}
\begin{quest}Que constatez-vous ? À quoi sert cette commande\end{quest}
\end{enumerate}

\section{La trame TCP/IP}
On sait maintenant se connecter sur une machine distante. On sait aussi installer des logiciels. On va, maintenant, passer au reniflage de notre réseau.
\subsection{Scan de port avec Nmap}
Le produit que nous allons utiliser est {\bf nmap}. il s'utilise en ligne de commande (\textit{man nmap} vous donne sa syntaxe). 

%  \item Installez le paquet à partir de \textbf{synaptic} et scannez \textbf{simplet}.
\begin{quest}Quels ports sont ouverts sur \textbf{simplet} ? À quels services cor\-respondent-ils ?\end{quest}


%\footnote{Il s'agit de celui qui tourne sur le port
%139 : netbios}
% \subsection{Collecte d'une trame TCP/IP}
% Pour collecter une trame TCP/IP, il faut utiliser un logiciel
% appelé {\bf tcpdump}. Installez le paquet correspondant
%Pour cela copiez le fichier {\it
%tcpdump.tar.gz} présent sur le CDROM dans le répertoire {\it
%/home/lambda}. Appliquez ensuite la procédure suivante :\\
%{\sf
%  \begin{tabular}{||l}
%tar xvfz tcpdump.tar.gz\\
%./configure --prefix=/root \\
%make all install
%  \end{tabular}
%}
%\\
% Verifiez que votre serveur telnet tourne toujours et lancez tcpdump dans une autre console. Sur {\it windoze}, ouvrez une session {\bf telnet}.
% \begin{quest}Que
% se passe t'il sur {\it linux} ? Que peut-on sortir avec ce logiciel ?\end{quest}
%\footnote{Toutes les transactions
%entre {\it linux} et{\it windoze} apparaissent. Cependant, le
%contenu des trames n'apparait pas}.
\subsection{Analyse de trames TCP/IP}
Pour visualiser les trames qui transitent sur le réseau, je vous propose d'installer un autre produit : EtherReal. C'est un outil graphique qui
permet de visualiser les trames TCP. Le même produit existe pour Windows.
\begin{enumerate}
% \item  Installez le produit sur la station {\bf Linux} à partir de \textbf{Synaptic}
\item Démarrez le logiciel depuis la console en mode super-utilisateur (\textit{sudo ethereal $\&$})
\item Lancez un enregistrement de trames depuis ethereal et ouvrez une session {\bf telnet} sur {\bf simplet} à partir de {\bf joyeux}. effectuez quelques échanges et arrêtez l'acquisition
\begin{quest}
 Les trames reçues s'affichent dans la fenêtre principale de ethereal. D'où proviennent les paquets ``sniffés'' ?
\end{quest}
\begin{quest}
 Pourquoi l'utilisation de switchs à la place de hubs permettrait un niveau de sécurité plus élévé ?
\end{quest}
\item triez les trames par ``destination'' et analysez les paquets envoyés à \textbf{simplet} (on connaît son adresse IP)
\begin{quest}
 Retrouvez vous le login et le mot de passe en clair ?
\end{quest}
\begin{quest}
 Pourquoi le mot de passe est-il découpé lettre par lettre (\textit{non, ce n'est pas une question de sécurité...})
\end{quest}
\end{enumerate}

Nous allons reprendre la même manipulation, avec Ssh et dans le sens \textbf{Windows}$\rightarrow$\textbf{Linux}.
\begin{enumerate}
 \item Lancez une nouvelle collecte de trames
 \item Avec putty, connectez vous à \textbf{joyeux}, lancez quelques commandes
 \item Arrêtez l'enregistrement et passez à l'analyse des paquets reçus
 \begin{quest}
 Concluez sur la sécurité de SSH par rapport à Telnet.
 \end{quest} 
\end{enumerate}

\section{plus loin avec Linux}
À priori, des serveurs SSH doivent tourner sur les 3 machines \textbf{Linux}. Vous connaissez les noms et les mots de passe de ces stations, tout les ingrédients sont là pour permettre une connexion.
\subsection{\textit{``Follow the white rabbit''}}
Vous avez sur \textbf{joyeux} une console en avant plan. À ce point nous pouvons assumer qu'il en est de même sur les stations Linux des autres binomes. Le but dans cette section va être d'afficher depuis \textbf{joyeux} des messages sur la console ouverte sous \textbf{dormeur}. Pour cela, prenons un moment pour introduire la gestion des périphériques sous Linux.

Vous utilisez en ce moment même des périphériques d'entrée-sortie... Clavier, souris, écran viennent à l'esprit, mais il faut aussi considérer les disques, cdroms, cartes son, imprimantes, etc. comme des périphériques. Sous Linux, un périphérique est toujours représenté par un fichier rangé dans le répertoire \textit{/dev/}. Ainsi, pour accéder au données de la souris, il vous suffit de lire le fichier correspondant dans \textit{/dev/}.
\begin{enumerate}
 \item Dans une nouvelle console, lancez la commande sudo \textit{cat /dev/psaux} et bougez la souris
\end{enumerate}
Voila, nous accédons au périphérique. De la même manière, pour les périphériques en sortie, il suffit d'écrire dans le fichier correspondant. Par exemple, pour imprimer un fichier, on peut utiliser \textit{sudo cat nom\_du\_fichier $>$ /dev/lp0} ou \textit{/dev/lp0} désigne l'imprimante Linux \no0 (Linux printer 0).
\begin{quest}
 Décomposez la commande \textit{sudo cat reseau.pdf $>$ /dev/lp0}
\end{quest}
Pour des raisonS historique, les consoles sont des logiciels considérés comme des périphériques d'affichage physique. On retrouve donc des fichiers d'accès aux consoles dans l'arborescence \textit{/dev/}. Les consoles sont de 2 types : ``les vrais'' terminaux, représentés par les fichiers \textit{/dev/tty[1-63]} et les ``pseudo'' terminaux, représentés par \textit{/dev/pts/[0-N]}.
\begin{enumerate}
 \item fermez les consoles ouvertes, sauf la console de traffic reseau que vous pouvez nettoyer (commande \textit{clear}).
 \item lancez la commande who
 \begin{quest}quels sont les consoles ouvertes ? Par quels fichiers sont elles représentés dans \textit{/dev/} ?\end{quest}
 \item Ouvrez une console supplémentaire et dans la console fixe, relancez \textit{who}
 \begin{quest}
  Des changements ? Qu'est-ce qu'un ``pseudo'' terminal dé\-signe ?\footnote{Vous devez constater la présence d'un vrais terminal dans la liste des connectés, il s'agit de la console qui a servi a lancer l'interface graphique de Linux et qui apparaît brièvement lors de la séquence de démarrage. On peut y accéder avec la combinaison de touches \textit{[ctrl]+[alt]+[F1]} (\textit{[ctrl]+[alt]+[F7]} pour revenir).}
 \end{quest}
\item Écrivez un message depuis la console fixe vers la console nouvellement ouverte : \textit{echo ``message transmis''$>$/dev/pts/2} . Celui-ci s'affiche dans l'autre console
\end{enumerate}

Avec ces bases techniques, vous pouvez maintenant effectuer la même manipulation sur un ordinateur distant, en l'occurrence \textbf{dormeur}.
\begin{enumerate}
 \item connectez vous a joyeux par SSH depuis une nouvelle console linux (commande \textit{Ssh nom\_ordi})
 \item lancez la commande \textit{who} et repérez le fichier lié à la console fixe affichée sur \textbf{dormeur}. Au passage, vous remarquez que votre propre connexion SSH est identifiée...
 \item effacez le contenu de la console (commande clear $>$ /dev/pts/[\no\_de\_console])
 \item envoyez un message (``Wake up Neo'' ou ce que vous voulez) et guettez la réaction ou allez constater de visu que le texte s'est bien affiché sur l'ordinateur distant.
\end{enumerate}

\subsection{affichage distant}
Le serveur graphique de linux, Héritage de XWindow, permet une utilisation en réseau. Ces possibilités ne sont plus exploitées de nos jours mais étaient essentielles dans les années 80-90 où des ordinateurs centraux distribuaient leurs affichages graphique sur une multitude de terminaux. La couche réseau est toujours disponible, et c'est une source potentielle de nuisances... Nous allons effectuer un export d'affichage depuis \textbf{joyeux} vers \textbf{atchoum} pour faire ``surgir'' des fenêtres d'application sur l'écran de vos camarades.

La variable d'environnement \textit{DISPLAY} définit les propriétés de l'affichage d'une application graphique. C'est une chaîne de caractères qui s'écrit de la façon suivante : $<$adresse\_machine$>:<$\no serveur\_graphique$>$.$<$\no écran$>$ .

\begin{enumerate}
 \item en local, affichez le contenu de \textit{DISPLAY} (commande \textit{echo \$DISPLAY})
\begin{quest}
 sur quel serveur et quel écran s'afficheront les application ?
\end{quest}
 \item Vérifiez cela en lançant une application graphique depuis la console (commande \textit{xeyes $\&$} par exemple)
\end{enumerate}

Nous allons maintenant déporter l'affichage vers \textbf{atchoum} en modifiant le contenu de DISPLAY
\begin{enumerate}
 \item lancez \textit{export DISPLAY=``atchoum:0.0''} et vérifiez que la variable à bien été modifiée
 \item lancez une application graphique depuis votre console\footnote{Vous pouvez d'ailleurs en ouvrir autant que vous voulez : \textit{xeyes $\&$ firefox $\&$ xcalc $\&$} etc.} et guettez les réactions ...
\end{enumerate}
 \begin{quest}
  Comment savez-vous que vos camarades ont fermé les applications que vous avez pu lancer depuis \textbf{joyeux} ?
 \end{quest}

\subsection{Prise de main à distance}
Dans cette dernière partie du TP, nous allons utiliser VNC pour prendre complètement la main sur la session Windows depuis Linux.
\begin{enumerate}
%  \item installez le serveur et le client VNC sur les deux machines (installeur pour windows fournis, logiciels vncserver et vncviewer pour Ubuntu)
\item configurez le serveur sur {\bf simplet}. Après avoir défini le mot de passe de connexion, lancez le serveur VNC
\item Lancez ensuite le client {\bf vncviewer} sur {\bf joyeux}. Entrez le nom du serveur ou son IP et le mot de passe.
\end{enumerate}
\begin{quest}Comment prendre conscience de la prise en main à distance sur {\bf simplet} ?\end{quest}

Une fois la session VNC en cours. Lancez une session ethereal et collectez quelques trames.
\begin{quest}Les trames sont elles exploitables ?\end{quest} 
\begin{quest}Pouvez-vous expliquer pourquoi (réfléchissez au contenu transféré) ?\end{quest}
\begin{quest}À la vue des trames collectées, quels sont les inconvénients de la prise de contrôle par vnc ?\end{quest}

\section{Conclusion}
Vous avez parcouru en trois heures quelques possibilités de l'utilisation d'ordinateurs en réseau. L'analyse des trames doit vous faire prendre conscience des dangers du manque de sécurité des transmissions qui est malheureusement généralisé aujourd'hui. En effet, toutes les transmissions Web reposent sur le protocole HTTP, qui tout comme telnet transmet ses information en clair ! Tout les formulaires d'abonnements, les pages de forums, vos éventuels mots de passe et logins transitent à la vue de qui veut bien prendre la peine d'y regarder (nous avons vu que c'est techniquement à la portée de tous). Prendre conscience des faiblesse des réseau, c'est déjà faire la moitié du chemin vers la sûreté informatique, l'autre moitié vous sera dispensée en cours de voie d'approfondissement.
\end{document}

