cloud:2018:tp_intro-iga

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.

  • Pour commencer, il faut lancer le vpn anyconnect.

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ée). 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) Générer une clef lors de la création de votre première VM. Pour cela l'onglet de gestion de clef lors de la création de la VM est assez simple d'utilisation. Attention, il faut bien télécharger la clef privée lors de la création car c'est la seul fois où vous y aurez accès. De plus, vous devez récupérer la clef publique (en cliquant sur la petite clef a coté de l'empreinte de la clef crée. Ces deux clefs doivent être conservées pour plus tard.

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. Sous MACOS, le système contient déjà le client ssh, mais il n'y a pas de serveur graphique. Vous devez installer ce serveur (logiciel XQuartz).

Dans le cadre de ce TP nous vous proposons de sélectionner une « petite » image système pré-configurée. Pour cela, allez sur l’onglet instances puis Launch Instance. Nous vous demandons d'utiliser une machine basée sur une image avec création d'un volumee. Vous utiliserez une machine standard juste préparée pour fonctionner à l'université basée sur une ubuntu 18.04. Lorsque l'interface vous demande de définir la source (l'image de départ) vous devez :

  • sélectionner une image comme source de démarrage;
  • créer un nouveau volume en cochant yes (l'interface ne doit alors pas vous demander la taille du volume choississez 10Go);
  • choisir comme source l'image Ubuntu Server 18.04.1 Bionic Beaver (attention, pas la version ldap)

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.xsmall proposant 10GB d’espace disque, 1Gio de RAM et 1 vCPU.

Finalement, avant de créer l’instance et de la lancer (Launch instance), assurez-vous de créer une clef à votre nom ou, si vous en avez déjà une, 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 et c'est le seul moyen d'y accéder au départ). 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é privée à l’aide de l’option –i de SSH le cas échéant. Exemple :

$ ssh -XCi /chemin/vers/maCleSsh ubuntu@adresseIPdeVotreVM

Remarque 1 : Le nom de votre clé SSH est celui du fichier qui contient la clef privée. Il 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.

Dans le cadre de ce TP, toutes les VMs sont 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 classique. Pour nous en convaincre nous allons vous demander d’y installer Apache2 (Pourquoi pas ?).

$ sudo apt update
$ sudo apt install apache2 libapache2-mod-php

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 !

Bilan

  • À quoi sert la commande apt update
  • comment trouver le nom des paquets à installer ?

Comme sur votre téléphone, pour trouver une application, il faut consulter un dépot d'application. Sous ubuntu il y en a plusieurs que vous devrez parfois modifier (voir installation de docker). Comme sur votre téléphone, lorsqu'on cherche une application, il faut utiliser l'outils de recherche proposé :

$ apt-cache search <nom du paquets> # ancienne fonction qui répond pas des description d'une ligne (utile pour grep)
$ apt search <nom du paquets> # nouvelle interface

Ces 2 fonctions explorent un cache local des paquets disponible qu'on mets à jour avec la commande apt update. Sans cette dernière, la liste des paquet est souvent obsolète (et l'installation devient impossible car le système ne trouve plus les paquets mis a jour).

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/mac 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.

Ces deux utilisateurs n'ont pas les mêmes droits, il est donc important de savoir quel utilisateur fait quel opération. Assez souvent les problèmes que vous aurez viendront simplement du fait que utilisateur concerné n'en a pas le droit.

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 VMs 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, il suffit de supprimer la commande no-port-[…] echo;sleep 10“ dans la première ligne du fichier qui contient les clefs publiques autorisé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. De plus, les outils graphiques ne permettent pas toujours d'utiliser la clef de manière simple. 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
  • Autorisez les utilisateurs normaux à se connecter via ssh en modifiant le contenu du fichier de configuration du serveur ssh :

Dans /etc/ssh/sshd_config remplacez

PermitRootLogin without-password
PasswordAuthentication no

par (respectivement)

PermitRootLogin yes
PasswordAuthentication yes

Vous pouvez le faire par une simple commande :

sed -i.old "{s/^PasswordAuthentication no/PasswordAuthentication yes/; s/PermitRootLogin without-password/PermitRootLogin yes/}" /etc/ssh/sshd_config
  • relancer le serveur ssh
systemctl restart ssh
  • essayez 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 fichiers à 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 distribuer 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 ont le droit de faire sur les machines respectives. 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 ait le droit de lire le fichier et que le distant ait le droit d'écrire dans le répertoire '/'

Vous pouvez utiliser :

  • La commande scp sous linux ou pscp sous windows :
$ scp -i votreclef 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 utilisez 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/

Exercice

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

Il est parfois utile de pouvoir écouter ce qui se passe sur le réseau pour résoudre un problème de configuration voir de programmation. Pour cela il existe un logiciel puissant wireshark que vous allez installer.

Installation

  • Dans les paquets disponibles, cherchez le logiciel wireshark et sa version texte tshark.
  • Installez les tous les deux.

À cette occasion, vous verrez que les systèmes basés sur débian (comme ubuntu) posent parfois des questions lors de l'installation. En effet, chaque installation de paquet suppose l'exécution d'un ou plusieurs script d'installation. Le choix, dans cette famille de distribution, est de poser certaines questions à l'administrateur pour lui permettre quelques configurations simple. D'autre distribution (RedHat) proposent par contre de mettre une configuration standard à chaque installation.

Ici, on vous demande si vous souhaitez autoriser certains utilisateurs à utiliser wireshark. En effet, écouter sur le réseau permet d'avoir accès à beaucoup d'informations sensibles. Par défaut, cela n'est possible que pour l'administrateur. Mais lancer le programme wireshark par l'administrateur est aussi problématique car il exécute directement certains script reçu via le réseau et cela permettrait à un attaquant de forger des paquets qui pourrait compromettre votre machine. Il est donc plus prudent de répondre oui à la question. À partir de là tout utilisateur qui fait partie du groupe wireshark peut utiliser le logiciel.

  • Pour ajouter le groupe wireshark à votre utilisateur ubuntu utilisez la commande
$ usermod -aG wireshark ubuntu  

Attention, pour que le shell courant prennent en compte le nouveau groupe, il faut se déconnecter et se reconnecter sur la machine.

Vous avez mal répondu à la question ? Rien de grave, il suffit de rejouer le script d'installation avec la commande

$ sudo dpkg-reconfigure wireshark-common

Utilisation

Vous pouvez maintenant lancer le logiciel par la commande (dans un terminal avec export graphique).

$ 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és 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émarrer 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.

L'image de la machine que vous utilisez est une image standart comme celle que l'on peut télécharger sur internet ici.

  • Peut-on trouver d'autres images pour des systèmes différents centos ou windows par exemple ?
  • Qu'est-c qui différencie l'image bionic-server-cloudimg-amd64.ova , bionic-server-cloudimg-amd64.img et bionic-server-cloudimg-ppc64el.img
  • Qu'est-ce qui différencie une image cloud d'une image normale ?

Pour vous aider à répondre à ces questions, vous pouvez consultez le contenu du répertoire /etc/cloudinit/ Dans le fichier /etc/cloud/cloud.cfg :

  • que font les modules growpart et resizefs
  • que fait le module module ssh-import-id
  • qu'aprend-on sur le default-user ?

Dans le fichier /etc/cloud/cloud.cfg.d/90_dpkg.cfg

  • Qu'est-ce que la datasource_list ?
  • Comment à été configuré ce fichier ?

A quoi correspond le fichier /etc/cloud/cloud.cfg.d/91_dptinfo.cfg ?

La platforme ne permet pas encore de faire cette partie.

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.

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 cela, allez dans la console (dans le menu instance cliquer sur votre instance puis choisissez l'onglet console).

Pour réparer le système vous devez trouver 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 vdb ou vdc).
  • Depuis la VM temporaire vous pouvez maintenant explorer le disque avec fdisk. Combien y a-t-il de partitions ? Quelle est celle qui contient le système ?
  • Montez le disque avec 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 ?

====Étape 9 : Création d'un snapshot et lancement d'une nouvelle VM==== 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/2018/tp_intro-iga.txt
  • Dernière modification : 2019/03/08 19:41
  • de fabien.rico