cloud:2016:tp_intro

Prise en main d'openstack

Objectifs :

Cette première séance de TP a pour objectifs de vous familiariser avec l’interface Horizon qui permet d’exploiter simplement une plateforme Cloud Openstack (financée par le département informatique et la région ). Nous utiliserons pour cette séance une image système « clé en main », que vous pourrez instancier et sur laquelle vous devrez vous connecter via SSH.

Étape préliminaire :

Vous pouvez utiliser sur votre poste de travail le système linux ou windows. De préférence le système linux (Xubuntu 16.04).

Connectez vous à la plateforme d’administration Horizon de Openstack via votre navigateur en saisissant dans la barre de navigation l’URL suivante :

Pour vous connecter à votre instance de machine virtuelle vous aurez besoin d’un jeu de clé SSH (clés publique/privé). Deux solutions s’offre à vous :

  • (a) Générer un jeu de clé via l’outil sshkey-gen que vous importerez (selectionnez l’onglet « Access and security → Key Pair → Import Key Pair » puis copier/coller la clé publique (.ssh/id_rsa.pub)) ou,
  • (b) accéder à la section « Access and security → Key Pair → Create Key Pair » de l’interface Horizon.

Le logiciel ssh est disponible directement sur tous les linux. Pour windows, vous aurez besoin d'installer un logiciel client. Pour ce TP nous vous conseillons MobaXterm qui peut s'utiliser sans installation et dispose d'un serveur graphique intégré permettant l'export d'affichage.

Dans le cadre de ce TP nous vous proposons de sélectionner une « petite » image système pré-configurée. Pour cela, allé sur l’onglet instances puis Launch Instance. Nous vous demandons d'utiliser une machine basée sur un snapshot de volume. C'est une machine préparée pour vous et basée sur une Ubuntu 15.04. Sélectionnez la source de l’image dans le menu déroulant Instant boot source → Boot from volume snapshot (créate a new volume) et utilisez le snapshot snap-TP1_TIW7.

Sélectionnez ensuite un type (aussi appelé flavor) de machine virtuelle qui sera adaptée à l’image sélectionnée précédemment et à l’usage que vous en ferez. Toujours dans le contexte de ce TP, un flavor m1.xxsmall proposant 5GB d’espace disque, 512 Mio de RAM et 1 vCPU. Oui, il est possible d'avoir moins de 1Go de mémoire !

Finalement, avant de créer l’instance et de la lancer (Launch instance), assurez-vous que votre clé publique à bien été sélectionnée (Remarque : Cette clé sera copiée dans la VM au moment de sa création. Cela vous permettra de vous connecter à votre VM sans avoir à saisir de mot de passe). Nommez l’instance et lancer là, puis patientez… Lorsque celle-ci sera opérationnelle, notez l’adresse IP fixe qui lui a été associée (cf. interface Horizon) et connectez-vous via SSH en spécifiant le nom de votre clé publique à l’aide de l’option –i de SSH le cas échéant. Exemple :

$ ssh –i ./chemin/vers/maCleSsh ubuntu@adresseIPdeVotreVM

Remarque 1 : Le nom de votre clé SSH est peut être id_rsa ou id_dsa, ou nomcle.pem.

Remarque 2 : Le nom d’utilisateur par défaut est ubuntu pour cette image système mais sera très probablement différent sur une image issue d’une distribution autre que Ubuntu.

Toutes les VM sont, dans le cadre de ce TP, situées dans le même sous réseau. Vérifiez en « pingant » la VM d’un de vos camarades (vous aurez besoin de son adresse IP).

Vous avez réussi à vous connectez à votre VM ? Pinger une autre VM à partir de votre VM ? Félicitation ! Passez à l’étape suivante.

Usage de la VM : Nous allons à présent utiliser la VM. Vous remarquerez par vous même qu’il n’y a pas différences avec l’administration d’une machine physique classique. Pour nous en convaincre nous allons vous demander d’y installer Apache2 (Pourquoi pas ?).

$ sudo apt-get update
$ sudo apt-get install apache2 libapache2-mod-php5

Une fois installé, ouvrir un nouvel onglet de votre navigateur et connectez vous à votre serveur web Apache fraichement installé.

 http://adresseIPdeVotreVM/]] (exemple : http://192.168.74.136)

Ça fonctione ? Bravo !

L'interface que vous utilisez est en ligne de commande. Sous linux tout est possible via ce moyen, il est conseillé de l'utiliser en priorité car les échanges entre votre poste de travail et la VM sont alors limités à quelques caractères. Mais cela est parfois difficile à utiliser, c'est pourquoi vous pouvez utiliser l'export graphique.

  • sous linux il faut vous déconnecter et utiliser les options -X (export graphique) et -C (compression) de ssh.

Par exemple:

  $ ssh –XCi ./chemin/vers/maCleSsh ubuntu@adresseIPdeVotreVM
  • sous windows, ces options sont activées par défaut pour le logiciel MobaXterm

Installez un logiciel d'édition graphique comme gedit et lancez le depuis la VM. Lorsque cela fonctionne, vous pouvez passer à la suite

La VM créée contient 2 utilisateurs :

  • root l'administrateur qui a tous les droits.
  • ubuntu l'utilisateur normal.
sudo

L'utilisateur ubuntu n'a pas de droit spéciaux. Certains fichiers sont interdits en lecture (par exemple /etc/shadow) la pluspart est interdit en écriture … Pour faire des configurations, vous devez exécuter des commandes en tant qu'administrateur. Pour cela, vous pouvez :

  • Exécuter une commande particulière en tant qu'administrateur grâce au sudo. Par exemple:
## commande interdite
$ cat /etc/shadow
## commande autorisée
$ sudo cat /etc/shadow
  • Passer totalement administrateur :
$ sudo su
Utilisateur root

C'est souvent plus simple de se connecter directement en tant que root, mais traditionnellement ce n'est pas possible sur les VM openstack. En effet, si vous essayez de le faire :

$ ssh -i votreclef root@192.168...

Le système vous refuse l'accès. Par contre, cela est modifiable, ils suffit de supprimer la commande no-port-[…] echo;sleep 10“ dans la première ligne du fichier qui contient les clefs publiques authorisées pour l'administrateur : /root/.ssh/authorized_keys.

Utilisateur ubuntu

L'utilisateur ubuntu n'a pas de mot de passe. Ce n'est pas très grave car vous pouvez y accéder par la clef. Mais cela n'est pas toujours pratique car si vous perdez la clef, vous n'aurez plus accès a votre machine. Pour éviter cela, vous allez mettre un mot de passe à cet utilisateur.

  • Vérifiez le contenu du fichier /etc/shadow le mot de passe de l'utilisateur est normalement le 2ème champs.
  • Modifier le mot de passe par la commande sudo passwd ubuntu
  • essayer de vous connecter sans utiliser la clef (et donc avec le mot de passe)
$ ssh ubuntu@192.168....

Vous allez utiliser ssh pour copier des fichier à distance. Par exemple vous devez ajouter le fichier php suivant sur votre serveur web index.zip (attention, le php étant un langage utilisé par le serveur web, pour le distribué il a été zippé, il faut le dézipper avant de le copier).

Pour copier le fichier à distance vous pouvez utiliser plusieurs moyens. Dans les exemples, nous supposons que vous voulez copier des fichiers depuis votre poste de travail vers le répertoire /tmp/ de la machine 192.168.241.1 en utilisant l'utilisateur distant 'ubuntu'. A vous de modifier les commandes pour les adapter à une autre situation. Attention, ce que vous pouvez faire dépend de ce que l'utilisateur local et l'utilisateur distant on le droit de faire sur les machines respective. Par exemple, pour copier le fichier '/etc/shadow' de la machine locale vers le répertoire '/' de la machine distante, il faut que l'utilisateur local ai le droit de lire le fichier et que le distant ai le droit d'écrire dans le répertoire '/'

Vous pouvez utiliser :

  • La commande scp sous linux ou pscp sous windows :
$ scp fichierACopier ubuntu@192.168.246.1:/tmp/
  • Des logiciels graphiques comme winscp sous windows ou l'explorateur de fichier sous linux. L'interface de winscp est assez intuitive, si vous utiliser l'explorateur de fichiers, vous n'avez qu'à taper sftp://ubuntu@192.168.246.1/ pour accéder au disque de la VM
  • Des logiciels de synchronisation comme rsync :
$ rsync -avuz -e ssh /repertoire/départ/ ubuntu@192.168.246.1:/repertoire/arrive/

Vous devez essayer de copier le fichier php en utilisant 2 des 3 méthodes proposée. Il faut placer le fichier dans le repertoire racine du site web /var/www/html/ et ouvrir l'url http://votrevm/index.php

Sur les machines nous avons installé le logiciel wireshark qui permet d'éccouter ce qui se passe sur le réseau. Une fois connecté en mode graphique, vous pouvez le lancer par la commande

$ wireshark &

Pour écouter le réseau, vous devez sélectionner l'interface que vous souhaitez écouter (sans doute eth0), puis cliquer sur start. Mais si vous faites cela, vous observerez de nombreux échanges de paquets du protocole SSH.

  • D'où ces paquets viennent-ils ?

Pour éviter ce problème, il est possible d'ajouter des filtres en ne capturant par exemple que les paquets qui ne sont pas lié au port de SSH. Le plus simple est de refaire une capture en sélectionnant la bonne interface, mais en passant par le menu capture→options pour démarer la capture. Dans ce cas vous pouvez observer qu'un filtre s'ajoute automatiquement et qu'il n'affichera pas les paquets incriminés.

Grâce à ce logiciel observez l'échange entre votre poste de travail et le serveur web apache de la VM http://votre_vm/index.php :

  • Dessinez le chronogramme des échanges.
  • Pouvez-vous décortiquer la requête faite par votre navigateur ? A quoi peuvent servir les informations envoyées ? Par exemple :
    • le champs Referer:
    • le champs Accept encoding
    • le champs host
  • Comment sont transmis les informations de login et mot de passe.

Il peut arriver de faire une fausse manœuvre qui empêche la machine de redémarrer. Dans ce cas pour une machine réelle ou avec un hyperviseur standard, il est possible d'utiliser un disque de récupération pour booter et tenter de réparer le système. Ici, vous n'avez pas accès au système de boot de la VM, ni a une console évoluée. Par contre, il est toujours possible de récupérer le disque de la VM, de modifier ou réparer le système qu'il contient, puis de relancer un serveur. La méthode la plus simple, si le disque de la VM est un volume, est d'utiliser une autre VM pour ouvrir ce disque.

<hi #ff9f9f>Attention, sous openstack, cela n'est possible que pour les VM dont le disque est un volume</hi> commencez tout d'abord par allez dans la description de votre VM (via l'onglet instance de l'interface horizon). En bas de la description, dans le champ volumes attached vous devez voir un identifiant de volume. Par exemple

Attached To
f7026996-4b4c-4011-a6a4-b209ef637bb6 on /dev/vda 

Vous devez notez cet identifiant pour retrouver le volume dans la suite.

Si aucun volume n'est mentionné, recréez une nouvelle VM mais ne détruisez pas celle que vous êtes en train d'utiliser.

Un fois que vous avez relevé le nom de votre volume, vous pouvez effacer le fichier /boot/vmlinuz-3.19.0-47-generic) c'est le fichier contenant le noyau du système d'exploitation. Une fois effacé, redémarrez la VM et constatez qu'elle n'est plus fonctionnelle. Pour réparer le système vous devez trouve un moyen de remettre ce noyau sur le disque de votre machine :

  • Terminez (détruire) la VM depuis le menu instance
  • Créez une autre VM temporaire ou utiliser celle de vos voisin.
  • Dans le menu volumes, retrouvez votre volume et attachez le a la VM temporaire (il vous propose normalement de l'appeler vdc).
  • Depuis la VM temporaire vous pouver maintenant monter le disque. Pour cela utilisez la commande mount.

Par exemple :

     $ mkdir /mnt/sauv
     $ mount /dev/vdc1 /mnt/sauv
  • Vous pouvez maintenant naviguer dans le disque de la VM détruite et recopier le noyau au bon endroit.
  • Enfin démontez le disque (commande umount), détachez le de la VM temporaire puis lancer une nouvelle instance depuis ce volume.

Vous pouvez constater que le mot de passe de ubuntu sur cette machine a été modifié :

  • Que signifie la modification ?
  • À quel moment a-t-il été modifié, comment et par qui ?
  • Pourquoi est faite cette modification ?

Toujours à l’aide de l’interface Horizon, réalisez un snapshot de votre instance (bouton « Create Snapshot » ou « Créez un instantané »). C'est assez rapide et semble créer un snapshot de taille vide, mais ce dernier est utilisable (c'est donc sans doute un bug d'affichage).

Démarrez une seconde VM à partir du snapshot réalisé dans l’étape précédente (Boot from snapshot, Launch Instance, cf. Étape #1). Vous observerez que les modifications faites sont reportées sur la nouvelle machine (sauf les mots de passe bien sur).

  • cloud/2016/tp_intro.txt
  • Dernière modification : 2018/09/14 17:37
  • de fabien.rico