Environnement réseau

notion de réseau

Chaque machine UNIX possède l'ensemble des logiciels réseaux adéquats pour être connecté sur Internet. Historiquement, Internet a été développé au même moment qu'UNIX. UNIX possède ainsi nativement la notion de réseau, de partage de fichier, etc.

Sur Internet, chaque ordinateur possède un identifiant (unique) qui lui permet de communiquer avec les autres ordinateurs. Comme pour l'UID, sous Unix, l'identifiant n'est pas le nom de la machine mais un numéro dit numéro IP (Internet Protocol).

La norme actuelle de numéro IP est IPv4. L'identifiant d'une machine est une suite de 4 octets, habituellement représenté A.B.C.DA,B,C, et D sont des nombres entre 0 et 255.

Sous Linux (l'implémentation de la commande dépend de l'UNIX), le numéro IP d'une machine est obtenu par la commande ifconfig.

La correspondance entre nom de machines et adresse IP est effectuée par des serveurs spécifiques: les DNS (Domain Name Server).

Une machine machine1 veut communiquer avec machine2.sousdomain.dom: 1. machine1 envoie le nom machine2.sousdomain.dom à un DNS (dont l'adresse IP est stockée dans /etc/resolv.conf) 2. Si le DNS possède la correspondance machine2.sousdomain.dom <-> adresse IP, il la renvoie; sinon il transmet la requête à un autre serveur DNS (il existe ainsi une hiérarchie de serveurs DNS jusqu'aux DNS racines) jusqu'à obtenir l'information requise 3. machine1 reçoit de son DNS l'adresse IP de machine2.sousdomain.dom, il peut alors communiquer avec lui.

Sous Linux, la commande traceroute permet de suivre la trace d'un communication IP entre sa machine et une machine donnée.

Pour communiquer, les machines utilisent des ports (ports) afin de différencier les types de communication (web, mail, chat, etc.). Ainsi, lorsqu'une machine veut envoyer un message, elle spécifie à la fois l'adresse IP de la machine mais aussi le numéro de port associé.

Par exemple, le port 80 sert à la navigation web, le port 42 sert au DNS, le port 110 au mail (pop), etc.

telnet/rlogin/rsh

Sous UNIX, il est possible de démarrer une session sur un ordinateur autrement qu'en passant par le clavier physique de la machine. Pour cela, il suffit de se connecter à la machine en utilisant une commande UNIX de connection.

Historiquement, il existe deux commandes de connection: telnet et rlogin. Elles prennent pour arguments le nom de la machine et le nom de l'utilisateur

rlogin machine.sousdomain.dom -l utilisateur
telnet machine.sousdomain.dom

Ensuite, le mot de passe est demandé.

Malheureusement, de par leur conception, ces commandes ne sont pas sécurisées (=le mot de passe est transmis en clair à la machine et peut donc être intercepté).

Il est donc fortement conseillé d'utiliser une commande de connection sécurisée à la place: ssh.

De la même manière, il existe également une commande rsh (remote shell) qui permet d'exécuter des commandes à distance:

rsh user@machine.sousdomain.dom commande

Cette commande possède les mêmes défauts que rlogin et telnet. Elle doit être remplacée par ssh.

ssh

La commande ssh permet la connexion sécurisée à une machine distante. Elle utilise le principe de la cryptographie par clé publique:

  • un utilisateur possède deux clés, l'une publique et l'autre privée;

  • chaque message est encrypté avec la clé publique

  • mais seule la clé privée peut décrypter le message

  • lors d'une connexion ssh, un échange de clés publiques entre les deux machines est issu afin de protéger les communications dans les deux sens

Synopsis:

ssh user@machine.sousdomaine.dom [commande]

Si commande est absent, ssh ouvre une connexion interactive (shell) sur la machine distance, sinon il exécute commande sur la machine distante. Comme toute commande UNIX, l'exécution de la commande est liée à un processus pour lequel il existe une entrée standard, une sortie standard et une erreur standard.

Exemple:

liste des processus d'un utilisateur sur une machine

ssh machine ps -eaf | grep utilisateur

Fichiers relatifs à ssh

Un certain nombre de fichiers, stockés dans le répertoire $HOME/.ssh, servent au bon fonctionnement de .ssh.

known_hosts

Ce fichier contient les clés d'authentification des machines distantes. Il permet de vérifier que la machine distante est bien celle que l'on croît et non une autre (address spoofing). En cas de changement de clé de la machine distante (changement hardware ou de système d'exploitation), il faut utiliser la commande ssh-keygen

renouvellement de la clé d'authentification d'une machine

ssh-keygen -R machine

identity/identity.pub, id_rsa/id_rsa.pub

Les clés publique et privée de l'utilisateur sont générées grâce à la commande ssh-keygen

authorized_keys

Le fichier authorized_keys permet de stocker les clés publiques qui ont permission de se connecter. Ces clés publiques sont générées grâce à ssh-keygen -t rsa (dans le cas d'une authentification RSA).

Ainsi, pour pouvoir ce connecter sur une machine distante sans mot de passe, il faut:

  • générer sa clé publique sur sa machine local
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lambda/.ssh/id_rsa): 
Created directory '/home/lambda/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/lambda/.ssh/id_rsa.
Your public key has been saved in /home/lambda/.ssh/id_rsa.pub.
The key fingerprint is:

**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:** lambda@ged
The key's randomart image is:
+--[ RSA 2048]----+
|        . oo+. o+|
|         +.+ ooo+|
|        =...o ..=|
|       . +o.o  o |
|        S .o E   |
|            o    |
|                 |
|                 |
|                 |
+-----------------+
  • transferer le fichier $HOME/.ssh/id_rsa.pub sur la machine distance grâce à la commande ssh-copy-id
$ ssh-copy-id machine.sousdomaine.dom

scp

La commande scp permet de copier un fichier ou un repertoire sur une machine distante, ou vice-versa.

scp fichier user@machine:/home/directory/newfichier
option de scp signification
-r copie récursive
-p préserve les permissions et la date

ftp/sftp

La commande ftp permet de transférer de multiples files d'une ou vers une machine distante. Elle utilise le protocole FTP (File Transfert Protocol). C'est une commande interactive qui permet de naviguer dans l'arborescence de la machine hôte.

Synopsis:

ftp machine.sousdomaine.dom
commande de ftp signification
help affiche l'aide en ligne
cd change le répertoire dans la machine hôte
lcd change le répertoire dans la machine locale
pwd affiche le répertoire courant dans la machine hôte
lpwd affiche le répertoire courant dans la machine locale
ls liste le contenu du répertoire courant de la machine hôte
lls liste le contenu du répertoire courant de la machine locale
mkdir crée un répertoire dans la machine hôte
lmkdir crée un répertoire dans la machine locale
get fichier rappatrie fichier de la machine hôte vers la machine locale (1 seul fichier)
put fichier transfère fichier de la machine locale vers la machine hôte (1 seul fichier)
mget fichier(s) rappatrie le ou les fichiers de la machine hôte vers la machine locale
mput fichier(s) transfère le ou les fichiers de la machine locale vers la machine hôte
quit fin de la connexion

La commande ftp est une commande client qui nécessite la présence d'un serveur ftp sur la machine hôte. Parce que maintenir un serveur ftp sur une machine est parfois délicat (problème de piratage), il est souvent plus simple d'utiliser la commande sftp qui permet d'effectuer un ftp à travers une connection ssh. L'utilisation de sftp est similaire dans son principe à ftp.

rsync

La commande rsync permet de faire de la synchronisation entre deux répertoires ou deux machines.

Synopsis:

rsync [options] source cible
rsync [options] chemin user@machine:[chemin]
rsync [options] user@machine:[chemin] chemin

Comme pour cp,mv, etc., la source est placée dans la commande avant la cible.