cloud:2018: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.

Remarque :

Un certain nombre d'entre vous ont déjà une certaine expérience avec notre plateforme. Ils seront donc tentés de terminer ce TP au plus tôt. Ce TP n'est d’ailleurs pas noté. Mais les suivants le seront et utiliseront une partie du travail d'aujourd'hui, avant de partir, assurez-vous de savoir installer docker sur une VM. N'oubliez pas non plus de déposer vos informations sur tomuss.

É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.

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 sans créer de volume. 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;
  • ne pas créer de nouveau volume en cochant non (l'interface ne doit alors pas vous demander la taille du volume);
  • choisir comme source l'image Ubuntu 18.04 LTS Bionic Beaver

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 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 -i /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 ! Saisissez l'IP de votre VM sur tomuss et 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 par 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 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
  • 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 debian (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://ip_de_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.

Nous allons installer docker sur votre VM.

Installation

Il y a 2 versions de docker utilisables sur ubuntu : docker.io un paquet directement installable via apt-get et docker-ce qui demande de suivre une procédure décrite ici. docker-ce contient en plus de docker les utilitaires nécessaire à l'orchestration que vous utiliserez dans les TPs suivants.

  • Installez docker-ce en utilisant l'explication ici.

Attention avant de commencer lisez bien ce texte. Comme dans beaucoup de documentation, celle-ci essaye d'être le plus général possible. Il est donc nécessaire de lire le texte entre les commandes proposées et d'y appliquer un regard critique.

  • Certaines commandes sont souvent inutiles (mise à jours, suppression de paquets non compatibles…). À moins d'en être sûr, il est prudent de les exécuter quand même. Par contre, si le gestionnaire de paquet vous annonce qu'il ne peut pas supprimer un paquet car ce dernier n'est pas présent, ce n'est pas une erreur !
  • L'utilisation de sudo est parfois inutile si vous êtes root et inversement si vous ne l'êtes pas il faut parfois l'utiliser malgré ce qui est dit ou passer administrateur.
  • Certaines commandes sont uniquement des extensions proposées (par exemple, installation de versions précises de docker).
  • Certaines commandes peuvent échouer pour de bonne raison. Ici, le test de l'installation de docker ne fonctionnera pas à cause du réseau de l'université ce qui est décrit au paragraphe suivant.

Adaptation au réseau de l'université

Docker n'est pas encore fonctionnel dans cet environnement, car il a besoin d'accéder au réseau et il faut le configurer pour utiliser le proxy de l'université. Cette configuration n'est pas simple car elle doit modifier le service docker de la machine et dépend donc du gestionnaire de service. Elle n'est nécessaire que dans des réseaux utilisant un proxy comme celui des machines virtuelles de notre université. Elle n'est pas nécessaire si docker est installé sur une machine ayant directement accès au réseau (comme votre PC chez vous). La configuration est expliquée ici. Vous pouvez suivre bêtement les instructions suivantes (qui ne seront pas expliquées car hors du champ de ce TP).

  • Créez un répertoire pour stocker les configurations du service docker
sudo mkdir -p /etc/systemd/system/docker.service.d
  • Créez un fichier de configuration /etc/systemd/system/docker.service.d/http-proxy.conf contenant :
[Service]
Environment="HTTP_PROXY=http://proxy.univ-lyon1.fr:3128/" 
Environment="HTTPS_PROXY=http://proxy.univ-lyon1.fr:3128/"
  • relancer le gestionnaire de service
sudo systemctl daemon-reload
  • Vérifier que la modification est prise en compte
sudo systemctl show docker | grep -i proxy
# la liste des options doit contenir un élément Environment="HTTP_PROXY=http://proxy.univ-lyon1.fr:3128/"
  • Relancer le service docker
sudo systemctl restart docker
  • Vous pouvez normalement utiliser docker par exemple en recherchant un docker contenant un serveur sql:
docker search mysql 
  • Enfin cette commande n'est pas nécessaire, mais elle permettra à l'utilisateur ubuntu d'utiliser docker simplement en l'ajoutant au groupes des utilisateur de docker. Il est donc conseillé de la faire.
usermod -aG docker ubuntu

Nous n'avons pas utilisé de volume pour booter une instance.

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/2018/tp_intro.txt
  • Dernière modification : 2021/10/08 17:25
  • de romain.chanu