« Virtualisation de systèmes d'exploitation » : différence entre les versions

De OSWiki
Aller à la navigation Aller à la recherche
 
(101 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
=Introduction =
=Introduction =
===Virtualisation de systèmes d'exploitation : ===
===Virtualisation de systèmes d'exploitation : ===
* technique qui permet de faire fonctionner en même temps, sur un seul ordinateur (hôte), plusieurs systèmes d'exploitation (invités). Il existe plusieurs types de virtualisation.
* technique qui permet de faire fonctionner en même temps, sur un seul ordinateur ('''hôte'''), plusieurs systèmes d'exploitation ('''invités'''). Il existe plusieurs types de virtualisation.
* on parle alors de Virtual Machines (VM) ou Machine Virtuelle.
* on parle alors de Virtual Machines (VM) ou Machine Virtuelle.
* [https://fr.wikipedia.org/wiki/Virtualisation La virtualisation sur Wikipédia]
* [https://fr.wikipedia.org/wiki/Virtualisation La virtualisation sur Wikipédia]
=== Hyperviseur ===
=== Hyperviseur ===
[[Fichier:Virtualisation.jpg|left|200px |Schéma de la virtualisation de type I avec l'hyperviseur KVM]]
[[Fichier:Virtualisation.jpg|left|200px |Schéma de la virtualisation de type I avec l'hyperviseur KVM]]
* Logiciel de virtualisation installé dans le système d'exploitation de l'hôte et qui permet à plusieurs systèmes d'exploitation de fonctionner sur l'hôte.
* '''Logiciel de virtualisation''' installé dans le système d'exploitation de l'hôte et qui permet à plusieurs systèmes d'exploitation de fonctionner sur l'hôte.
* Crée des environnements clos où  sont installé les OS invités.
* Crée des environnements clos où  sont installé les OS invités.
* [https://fr.wikipedia.org/wiki/Kernel-based_Virtual_Machine KVM]  (Kernel-based Virtual Machine) est un hyperviseur libre de type I pour Linux. C'est l'hyperviseur qui sera utilisé dans ce document.
* [https://fr.wikipedia.org/wiki/Kernel-based_Virtual_Machine '''KVM''']  (Kernel-based Virtual Machine) est un hyperviseur libre de type I pour Linux. C'est l'hyperviseur qui sera utilisé dans ce document.
<br><br><br><br>
<br><br><br><br>


=== Pourquoi utiliser la virtualisation ?===
=== Pourquoi utiliser la virtualisation ?===
* Utiliser plusieurs VM en même temps sur la même machine,
* '''Utiliser plusieurs VM''' en même temps sur la même machine,
* Tester différents systèmes d'exploitation,
* '''Tester''' différents systèmes d'exploitation,
* Tester des logiciels dans un environnement contrôlé sans danger pour le système hôte,
* Tester des logiciels dans un environnement contrôlé sans danger pour le système hôte,
* Copier et utiliser  des environnements de test,  
* '''Copier''' et utiliser  des environnements de test,  
* Utiliser des configurations différentes sur le même serveur comme par exemple Nginx et PostgreSQL sur une VM et Apache2 et MySQL sur une autre.   
* '''Utiliser des configurations différentes sur le même serveur''' par exemple Nginx et PostgreSQL sur une VM et Apache2 et MySQL sur une autre.   
* Transporter un OS d'une machine à l'autre.
* '''Transporter un OS''' d'une machine à l'autre.


= Description de l'installation et des outils utilisés dans ce document =
= Description de l'installation et des outils utilisés dans ce document =
Ligne 43 : Ligne 44 :
* '''Serveur (machine hôte):'''
* '''Serveur (machine hôte):'''
  Linux <nom du serveur> 5.4.0-137-generic #154-Ubuntu SMP Thu Jan 5 17:03:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  Linux <nom du serveur> 5.4.0-137-generic #154-Ubuntu SMP Thu Jan 5 17:03:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
* '''Archive utillisée pour installer la VM''' :  [https://www.releases.ubuntu.com/focal/ubuntu-20.04.5-live-server-amd64.iso ubuntu-20.04.5-live-server-amd64.iso]
* '''Archive utilisée pour installer la VM''' :  [https://www.releases.ubuntu.com/focal/ubuntu-20.04.5-live-server-amd64.iso ubuntu-20.04.5-live-server-amd64.iso]


== L'hyperviseur KVM ==
== L'hyperviseur KVM ==
Ligne 129 : Ligne 130 :
==Créer un fichier image  sur le serveur hôte==
==Créer un fichier image  sur le serveur hôte==
=== Répertoire vm ===
=== Répertoire vm ===
* Créer un répertoire vm  sur le serveur hôte. Il contiendra l'image disque de la VM.
* Créer un répertoire vm  sur le serveur hôte. Il contiendra l'image disque de la VM. Nous allons, par exemple, créer ce dossier dans le home de l'utilisateur.
mkdir /home/<utilisateur>/vm


===Image disque ===
===Image disque ===
Ligne 137 : Ligne 139 :


'''Commande''' :
'''Commande''' :
  qemu-img create -f qcow2 emplacement/vm/du/fichier_image.img 6G
  qemu-img create -f qcow2 /home/<utilisateur>/vm/fichier_image.img 6G
* Emplacement :  emplacement/vm/du/fichier_image.img
* Emplacement :  /home/<utilisateur>/vm/fichier_image.img
- 6G est la taille virtuelle de ce système de fichier virtuel.
- 6G est la taille virtuelle de ce système de fichier virtuel.


'''Réponse'''  
'''Réponse'''  
  Formatting 'emplacement/du/vm/fichier_image.img', fmt=qcow2 size=6442450944 cluster_size=65536 lazy_refcounts=off refcount_bits=16
  Formatting '/home/<utilisateur>/vm/fichier_image.img', fmt=qcow2 size=6442450944 cluster_size=65536 lazy_refcounts=off refcount_bits=16
 
Rq : remplacer <utilisateur> par le nom de l'utilisateur du serveur hôte.


==Charger l'archive iso d'Ubuntu server 20.04 sur le serveur hôte==
==Charger l'archive iso d'Ubuntu server 20.04 sur le serveur hôte==
* Créer un '''dossier iso''' , ou placer les fichiers iso des systèmes d'exploitation.
* Créer un '''dossier iso''' , ou placer les fichiers iso des systèmes d'exploitation. Par exemple, nous placerons ce dossier dans le home de l'utilisateur :
mkdir /home/<utilisateur>/iso
cd  /home/<utilisateur>/iso
* Lancer la '''commande''' suivante depuis le dossier iso
* Lancer la '''commande''' suivante depuis le dossier iso
   wget https://releases.ubuntu.com/20.04.5/ubuntu-20.04.5-live-server-amd64.iso
   wget https://releases.ubuntu.com/20.04.5/ubuntu-20.04.5-live-server-amd64.iso
Ligne 158 : Ligne 164 :


* '''Sur le client''' (ssh-askpass-gnome pour utiliser une connexion ssh)  :
* '''Sur le client''' (ssh-askpass-gnome pour utiliser une connexion ssh)  :
Le client est un ordinateur à partir duquel on administre la serveur. Ici c'est le PC du réseau local. Mais, il peut être accessible via un réseau étendu. On va installer une interface graphique sur le client.   
Le client est un ordinateur à partir duquel on administre le serveur. Ici, c'est le PC du réseau local. Mais, il peut être accessible via un réseau étendu. On va installer une interface graphique sur le client.   


   sudo apt install virt-manager ssh-askpass-gnome
   sudo apt install virt-manager ssh-askpass-gnome
Ligne 165 : Ligne 171 :
== Créer une machine virtuelle avec le gestionnaire de machines virtuelles ==
== Créer une machine virtuelle avec le gestionnaire de machines virtuelles ==
=== Ajouter une connexion  QEMU/KVM vers le serveur hôte ===
=== Ajouter une connexion  QEMU/KVM vers le serveur hôte ===
{|
{|class="wikitable"
|-
|-
|[[Fichier:GestionnaireVM.png|border|centre|200px|Fenêtre du gestionnaire de machine virtuelle]]<br>
|[[Fichier:GestionnaireVM.png|border|centre|200px|Fenêtre du gestionnaire de machine virtuelle]]<br>
Ligne 186 : Ligne 192 :
[[Fichier:Connexion hote etablie.png|border|centre|250px|Affichage de la connexion QEMU/KVM à l'hôte]]
[[Fichier:Connexion hote etablie.png|border|centre|250px|Affichage de la connexion QEMU/KVM à l'hôte]]
|'''La connexion QEMU/KVM''' s'affiche dans le gestionnaire. Elle va nous permettre de créer une nouvelle VM sur le serveur hôte.  
|'''La connexion QEMU/KVM''' s'affiche dans le gestionnaire. Elle va nous permettre de créer une nouvelle VM sur le serveur hôte.  
Si ''' PC et serveur hôte (local ou distant) ne sont pas déjà connectés ''', il faudra cliquer sur "QEMU/KVM : <ip>" dans le gestionnaire de VM puis, entrer le mot de passe ou la passphrase de la connexion.
|}
|}


===Organiser le stockage sur le serveur hôte depuis le gestionnaire de VM ===
===Organiser le stockage sur le serveur hôte depuis le gestionnaire de VM ===
{|
{|class="wikitable"
|-
|-
|[[Fichier:Details connexion.png|Fenêtre des détails de la connexion]]
|[[Fichier:Details connexion.png|250px|Fenêtre des détails de la connexion]]
|Dans le gestionnaire de VM, ouvrir le menu Édition/ Détails de la connexion.
|Dans le gestionnaire de VM, ouvrir le menu '''Édition/ Détails de la connexion'''.


Une nouvelle fenêtre s'ouvre.  
Une nouvelle fenêtre s'ouvre.  
|-
|-
|[[Fichier:Stockage1.png|Fenêtre de gestion du stockage sur le/les serveur(s) hôte(s)]]
|[[Fichier:Stockage1.png|250px|Fenêtre de gestion du stockage sur le/les serveur·s hôte·s]]
|Cliquer sur l'onglet Stockage dans la fenêtre des détails de la connexion pour ouvrir la fenêtre de gestion du stockage sur les serveurs hôtes des VM gérées.
|Cliquer sur l''''onglet Stockage''' dans la fenêtre des détails de la connexion pour ouvrir '''la fenêtre de gestion du stockage''' sur les serveurs hôtes des VM gérées.
 
À gauche de la fenêtre on voit une colonne  qui contient '''la liste des stockages disponibles'''. Normalement, il y a au moins le stockage "default".
 
En bas de cette colonne, il y a 4 petits boutons, une croix verte, une flèche, une croix blanche dans un rond rouge, et un signe interdit. Il ne faut pas confondre la croix verte de la colonne de gauche et la croix verte de la fenêtre de droite.
 
Nous allons ajouter deux stockages :
* le '''stockage des images disque ''' qui va contenir l'image disque du système de fichier de la VM
* le '''stockage de l'archive iso''' qui va contenir le fichier iso du système d'exploitation qui sera installé sur la VM.
 
Pour cela cliquer sur la croix verte de la colonne de gauche. Une nouvelle fenêtre s'ouvre.
|-
|[[Fichier:Creer stockage.png|250px|Fenêtre de création d'un nouveau stockage]]
|Cette fenêtre va nous permettre de '''créer un nouveau stockage'''.
* Dans le champ '''Nom''', on indique le nom du stockage. '''Image disque'''.
* Dans '''Type''' on laisse '''dir: Répertoire des fichiers système'''
* Dans '''Chemin Cible''', on indique le chemin de l'image disque créée sur le serveur hôte. '''/home/<utilisateur>/vm/'''
 
Remplacer <utilisateur> par le nom de l'utilisateur du serveur hôte. 
 
Presser sur '''Terminer'''.
 
On fait pareil pour l'archive de l'iso ce qui donne :
* Nom : '''ISO'''
* Type : '''dir: Répertoire des fichiers système'''
* Chemin Cible :  '''/home/<utilisateur>/iso/'''
|-
|}
=== Préparation de l'installation de l'OS de la VM ===
{|class="wikitable"
|-
|[[Fichier:Nouvelle VM.png|250px|Fenêtre de création d'une nouvelle VM]]
|Sélectionner la connexion au serveur hôte. Dans le menu Fichier sélectionner "Nouvelle machine virtuelle". Une nouvelle fenêtre s'ouvre. On nous demande de choisir comment on veut installer l'OS. Plusieurs choix sont proposés :
* Média d'installation local (image ISO ou CD-ROM) : c'est l'option que nous allons choisir pour installer la VM. Il va nous permettre de sélectionner l'archive iso d'Ubuntu server 20.04 LTS.
* Installation réseau (HTPP, HTPS, FTP) : pour aller chercher le fichier d'installation de l'OS sur un réseau local ou étendu.
* Démarrage réseau (PXE) : L'amorçage PXE (sigle de Pre-boot eXecution Environment) permet à une station de travail de démarrer depuis le réseau en récupérant une image de système d'exploitation qui se trouve sur un serveur.[https://fr.wikipedia.org/wiki/Preboot_Execution_Environment]
* Importer une image disque existante :pour installer une VM à partir d'une image disque créée à partir d'une autre VM.
 
Sélectionner '''Média d'installation local (image ISO ou CD-ROM)''' et cliquer sur le bouton "'''Suivant'''"
|-
|[[Fichier:Choisir media.png|250px|Fenêtre pour choisir un média d'installation ISO ou CD-ROM]]
|Cliquer sur le bouton "'''Parcourir'''" pour trouver le nom du fichier ISO qui sera utilisé pour créer la VM. La fenêtre de choix du volume de stockage s'ouvre. On retrouve les stockages '''Image Disque'''(ici Image) et '''ISO''' que nous avions créés.
|-
|[[Fichier:Choix volume stockage.png|250px|Fenêtre de choix d'un volume de stockage]]
|Dans la colonne de gauche, sélectionner '''ISO'''. La liste des volumes de stockage contenus dans ISO s'affichent.
 
Sélectionner '''ubutu-20.04.5-live-server-amd64.iso'''.
 
Cliquer sur '''Choisir ce volume'''.
|-
|[[Fichier:Aucun detecte.png|250px|Generic default]]
|Dans le champ cd choix du système d'exploitation, tapez '''Ubuntu,''' puis sélectionnez '''Ubuntu 20.04'''.
 
Cliquer sur '''Suivant'''.
|-
|[[Fichier:Parametres CPU.png |250px|Fenêtre de choix des paramètres CPU]]
|Les paramètres CPU dépendront de l''''OS installé''', des '''ressources matérielles de l'hôte''' et '''à quoi on destine la VM'''.  Il faut vérifier que ces paramètres ne dépassent pas les capacités de l'hôte indiqué sur cette fenêtre.
 
Pour un test et un serveur ubuntu 20.04 LTS, 1024Mo de RAM et 1 CPU suffisent.
 
'''Les paramètres CPU deviennent''' :
* Mémoire : 1024
* CPU : 1
 
Cliquer sur '''Suivant'''.
|-
|[[Fichier:Stockage VM1.png|250px|Fenêtre de choix du stockage de la VM créée]]
|Dans cette nouvelle fenêtre on choisit si on veut stocker la nouvelle machine virtuelle et où la stocker.
 
* La case "'''Activer le stockage pour cette machine virtuelle'''" reste cochée.
 
* Sélectionner l'option "'''Selectionner ou créer un stockage personnalisé'''" puis cliquer sur le bouton "'''Gérer'''".
|-
|[[Fichier:Choix volume stockage.png|250px|Fenêtre de choix d'un volume de stockage]]
|Comme pour l'archive iso, nous allons choisir un volume de stockage. Cette fois dans "Image disque" (Image) nous sélectionnons fichier_image.img.
 
Cliquer sur '''Choisir ce volume'''
 
cliquer sur '''Suivant''' dans la fenêtre de choix des paramètres de CPU.
|-
|[[Fichier:Commencer installation.png|250px|Fenêtre récapitulative des paramètres d'installation de la VM]]
|Une fenêtre récapitulative des paramètres d'installation de la VM s'ouvre.
* On peut la renommer dans le champ d'édition '''Nom''' sans espace dans le nom
* Le menu déroulant '''Sélection de réseau''' propose plusieurs types de réseau. Nous allons utiliser '''Périphérique de l'hôte <nom du périph> : macvtap'''. Malgré l'avertissement cette solution fonctionne sur la configuration de test.
* Cliquer sur le bouton '''Terminer'''
|-
|}
=== Installation du système d'exploitation ===
{|class="wikitable"
|-
|[[Fichier:Installation Ubuntu.png|250px|Choix de la langue d'affichage]]
| Une console avec un fond noir s'affiche dans le gestionnaire, c'est '''ce qui se passe sur le serveur hôte'''.
 
On voit des lignes s'afficher pendant le chargement  de l'archive iso.
 
Après un petit instant, la fenêtre de gauche s'affiche. Elle va nous permettre de sélectionner  '''la langue  du système d'exploitation'''.
 
La sélection se fait à l'aide des '''flèches du clavier''' puis presser sur '''Entrée''', mais il faut tout d'abord donner '''le focus à la console''' en cliquant dessus.
 
Pour sortir de la console et réactiver la souris, il faut enfoncer les touches '''CTRL + ALT'''.
 
|-
|[[Fichier:Installer Ubuntu Server.png |250px|Lancer l'installation d'Ubuntu server]]
| Cette page présente 4 choix. On va laisser "'''Installer Ubuntu Server''' " sélectionné et on presse sur le bouton "'''Entrée'''".
 
On passe à la fenêtre de sélection de la langue d'installation.
|-
|[[Fichier:Choix du clavier.png|250px|Choix de la langue de l'OS installée]]
|Comme indiqué à l'écran, on utilise les flèches '''HAUT''' et '''BAS''' pour sélectionner '''la langue d'installation'''. Presser sur le bouton "'''Entrée'''" pour valider le choix.
|-
|[[Fichier:Choix config clavier.png|250px|Choix de la configuration du clavier]]
|Ensuite, on sélectionne '''le disposition du clavier''' et on sélectionne "'''Terminé'''" en bas de la fenêtre et on presse sur '''Entrée''' pour continuer.
|-
|[[Fichier:Update 22.12.01.png|250px|Demande de mise à jour du serveur à la version 22.12.1]]
 
|L'installateur nous demande si on veut '''mettre à jour Ubuntu server 20.04 LTS vers Ubuntu serveur 22.12.1'''.
 
Dans ce document, on va continuer sans mise à jour et installer Ubuntu server 20.04 LTS.
 
Cliquer sur '''Continuer sans mettre à jour'''.
|-
|[[Fichier:Connection réseau.png|250px|Connexion de l'installateur au réseau]]
|Si on a bien sélectionné la connexion au réseau Périphérique de l'hôte <nom du périph> : macvtap dans la fenêtre récapitulative des paramètres de l'installation de la VM alors, l'installateur devrait '''trouver automatiquement l'adresse de la nouvelle VM''' pour qu'elle puisse communiquer avec les autres machines du réseau et qu'elle ait un accès aux mises à jour.
Ici par exemple l'IP privée de la  nouvelle VM est  192.168.0.16.
 
Sélectionner '''Terminé''' en bas de la fenêtre et presser sur la touche '''Entrée pour continuer'''.
|-
|[[Fichier:Proxy.png|250px|Page de configuration d'un proxy]]
|En fonction de la configuration du réseau, s'il est besoin d'utiliser '''un serveur proxy''' pour se connecter à Internet, on entre ici ses détails.
 
Nous allons laisser ce '''champ vide''' et  appuyer sur '''Terminé'''.
|-
|[[Fichier:Miror ubuntu.png|250px|Page de définition du miroir d'archive Ubuntu]]
|Ensuite, on configure le '''miroir d'archive Ubuntu'''. Le programme d'installation le sélectionnera '''automatiquement''' en fonction du pays de l'installation.
 
On appuie sur '''Terminé''' pour continuer.
|-
|[[Fichier:Config stockage.png|250px|Configuration du stockage de la VM]]
| Il est maintenant temps de configurer le stockage. Dans  ce document, nous allons utiliser la configuration
* '''Utiliser un disque entier'''
* Set up this disk as an LVM group ('''Configurer ce disque comme un groupe LVM''').
 
Note : le programme d'installation créera la partition racine (avec une petite taille par défaut), on pourra modifier manuellement ses tailles et également créer une partition swap.
 
Presser sur '''terminer''' pour continuer
 
|-
|[[Fichier:Sommaire système.png|250px|Sommaire du système de fichier ]]
|La capture d'écran suivante montre le résumé du système de fichiers par défaut. Notre machine virtuelle de test a une capacité totale de 6 Go de disque dur.
|-
|[[Fichier:Confirmer install.png|250px|Confirmation de l'installation de la VM]]
|
En sélectionnant Continuer ci-dessous, le processus d'installation
commencera et entraînera la perte de données sur les disques
sélectionnés pour être formatés.
Vous ne pourrez pas revenir à cet écran ou à un écran précédent
une fois que l'installation aura commencé.
Êtes-vous sûr de vouloir continuer ?
 
'''Confirmer''' l'installation en sélectionnant '''Continuer''' et appuyez sur '''Entrée'''.
|-
|[[Fichier:Config profil.png|250px|Création du profil de l'utilisateur de la VM]]
|On crée maintenant un profil d'utilisateur en mentionnant un '''nom''', le '''nom du serveur'''(VM_Tuto), '''le nom d'utilisateur'''
 
et '''un mot de passe''' sûr et solide.
 
Ensuite, sélectionner  '''Terminé'''  et appuyer sur '''Entrée'''.
|-
|[[Fichier:Ssh.png|250px|Configuration SSH]]
| Ensuite, le programme d'installation demande si on veut installer '''le paquetage OpenSSH''' pour l'accès à distance.
 
Utilise la '''barre d'espace''' pour choisir cette option.
 
Faire défiler jusqu'à '''Terminé''' et appuyer sur '''Entrée'''.
|-
|[[Fichier:Outils annexes.png|250px|Outils annexes à installer]]
|Il est possible d'installer certains snaps, pour cela on les sélectionne
 
dans la liste. Utiliser la barre d'espacement pour sélectionner un snap.
 
Faire défiler jusqu'à '''Terminé''' et appuyer sur '''Entrée'''.
|-
|[[Fichier:Redemarrer maintenant.png|250px|Fin de l'installation de l'OS]]
|Le processus d'installation devrait maintenant commencer.  


À gauche de la fenêtre on voit une colonne  qui contient la liste des stockages disponibles. Normalement, il y a au moins le stockage "default".
Une fois l'installation terminée, appuyer sur '''Entrée''' pour '''redémarrer le système.'''


Nous allons en ajouter deux :
Après le redémarrage, on peut se connecter à la VM Ubuntu server 20.04 LTS avec le nom et le mot de passe de l'utilisateur.
* le stockage de l'image disque qui va contenir le système de fichier de la VM
* le stockage de l'archive iso du système d'exploitation qui sera installé sur la VM.  
|-
|-
|}
|}
=Installer un serveur web sur la VM=
'''Toute cette partie se fait dans la VM  via la console du gestionnaire de VM ou via une connexion ssh depuis le terminal d'un ordinateur de bureau.(Voir plus bas) '''
== Mise  jour du système ==
sudo apt update
sudo apt upgrade
== Installation de LAMP ==
'''LAMP'''[https://fr.wikipedia.org/wiki/LAMP] est un acronyme désignant un ensemble de logiciels libres permettant de construire des serveurs de sites web. L'acronyme original se réfère aux logiciels suivants :
*« Linux », le système d'exploitation ( GNU/Linux ) ;
* « Apache », le serveur Web ;
* « MySQL ou MariaDB », le serveur de base de données ;
* À l'origine1, « PHP », « Perl » ou « Python », les langages de script.
'''Installation'''
sudo apt install apache2 php libapache2-mod-php mysql-server php-mysql
'''Remarque''' : Si l'installation se termine par une erreur, une solution est peut-être d'installer les paquets l'un après l'autre.
== Utilisation  du port 90 pour rediriger les paquets entrant vers la VM ==
'''Schéma récapitulatif de l'installation et redirection de ports :'''
[[Fichier:Redirection port.jpeg|center|800px|Schéma récapitulatif de l'installation et redirection de ports]]
'''La redirection de port''' [https://fr.wikipedia.org/wiki/Redirection_de_port] (port forwarding ou port mapping en anglais) consiste à rediriger des paquets réseaux reçus sur un port donné d'un ordinateur ou un équipement réseau vers un autre ordinateur ou équipement réseau sur un port donné. Cela permet entre autres de proposer à des ordinateurs extérieurs à un réseau d'accéder à des services répartis sur plusieurs ordinateurs de ce réseau.
Cela se fait depuis l'interface de configuration du modem routeur NAT. Cette interface '''dépend du modem routeur de la connexion à internet.'''
== Configuration du port http pour la VM==
* '''Remplacer le port http dans /etc/apache2/ports.conf'''
La ligne
Listen 80
devient
Listen 90
* '''Remplacer le port dans /ect/apache2/sites-available/000-default.conf'''
La ligne
<VirtualHost *:80>
devient
<VirtualHost *:90>
== Ajouter un alias à Apache ==
Imaginons que  nous voulions installer plusieurs sites sur cette VM.
Nous allons ajouter '''un alias''' par site dans un fichier /ect/apache2/sites-available/vm.conf puis lier symboliquement ce fichier vers site-enable.
'''On copie le fichier 000-default.conf'''
cp 000-default.conf vm.conf
'''On édite le fichier vm.conf''' et on ajoute cette configuration  sous la ligne DocumentRoot /var/www/html
    ## ZONE SITE VM
      Alias /tuto  "/var/www/html/tuto"
      <Directory "/var/www/html/tuto/">
      Options -Indexes +FollowSymLinks +MultiViews
              AllowOverride All
              Require all granted
      </Directory>
'''Ensuite on  active le fichier de configuration''' (pour désactiver on utilise a2dissite)
  sudo a2ensite vm.conf
'''Et on recharge apache2'''
  systemctl reload apache2
== Comment activer l'utilisation de la redirection ==
J'ai pas mal cherché comment faire pour accéder à une page web située sur une VM. J'ai essayé beaucoup de tutoriels qui utilisaient '''Iptables''' et j'ai
fait pas mal de configurations inutiles pour me rendre compte qu'avec le gestionnaire de virtualisation, tout devenait plus simple. Heureusement, j'utilise un serveur test.
(Je n’en ai pas fini avec Iptables ;) )
Ainsi, '''cette partie est peut-être inutile'''. Je dois encore le vérifier.
* Editer ce fichier
nano /etc/sysctl.conf
* Décommenter :
net.ipv4.ip_forward=1
* Activer la modification  avec cette commande.
sysctl -p
==Vérification de l'accessibilité à la VM depuis internet ==
* On crée le '''dossier du site'''
mkdir tuto
* On peut créer une simple '''page html'''
nano /var/www/html/tuto/index.html
* Copier ces lignes et enregistrer la page
  <html>
    Bonjour le monde !
  </html>
* On '''attribue le dossier à l'utilisateur www-data'''
chown -R www-data:www-data /var/www/htlm/tuto
* '''Pour le test''', imaginons que votre adresse IP publique soit XXX.XXX.XXX.XXX et que le nom de domaine associé soit monsite.truc
Vous pouvez ouvrir la page  http://xxx.xxx.xxx.xxx:90/tuto/ ou http://monsite.truc:90/tuto/
=Connexion SSH à la machine virtuelle =
Le gestionnaire de machines virtuelles  et très pratique pour installer une nouvelle VM mais, lorsqu'il s'agit d''''envoyer des commandes''' à la VM il est plus commode de le faire '''depuis un terminal'''.
En effet, il est impossible de faire un copier coller dans la console du gestionnaire et l'affichage n'y est pas des plus lisibles. Voyons comment faire pour créer une connexion ssh entre une PC et une machine virtuelle.
'''Spoiler''' : Si on sait comment faire pour créer une connexion SSH entre un PC et toutes autres machines distantes ou locales, pas la peine d'aller plus loin : c'est la même chose.
On utilise (une dernière fois ?) la console du gestionnaire de machine virtuelle sur le PC pour mettre en place cette connexion. Ensuite procéder ainsi :
== Pare-feu de la VM ==
* '''Ouvrir le port ssh''' sur la machine virtuelle (attention ne pas activer ufw avant d'avoir ouvert ce port !)
  sudo ufw allow ssh
* Éventuellement, '''ouvrir le port http'''. Dans ce document nous avons utilisé le port 90, ce qui donne :
  sudo ufw allow 90/tcp
* '''Activer ufw''' :
  ufw enable
* '''Vérifier l'installation du serveur ssh'''  qui devrait déjà avoir été installé par le gestionnaire de VM (voir plus haut)
sudo apt install openssh-server
* '''Relancer SSH'''
sudo systemctl restart ssh
== Créer les clés SSH privée et publiques pour le PC  ==
Dans un terminal du PC on lance la commande :
  ssh-keygen -t ed25519 -C "email@example.com"
  ssh-add
* On indique une '''adresse e-mail'''.
* On crée '''une passphrase''' [https://fr.wikipedia.org/wiki/Phrase_secr%C3%A8te]  pour les clés SSH.
== Envoyer la clé publique à la VM==
ssh-copy-id -i ~/.ssh/id_<algorithme>.pub <utilisateur>@<adresse IP>
'''<algorithme>''' est le nom de l'algorithme utilisé pour créer les clés SSH. Si on n'est pas sûr de ce qu'on fait, on va voir dans le dossier .ssh  du home de l'utilisateur dPC, le nom de la clé publique y apparaît.
'''<utilisateur>''' est le nom de l'utilisateur de la VM.
'''<adresse IP>''' est l'adresse IP privée de la VM dans le réseau local. Si la VM est sur un serveur distant ce sera l'adresse publique du serveur distant.
On doit entrer '''le mot de passe de de l'utilisateur de la VM''' (pas la passphrase).
Si tout va bien '''un message''' en anglais s'affiche, voici sa traduction (sans l'adresse ip et l'empreinte de la clé ECDSA):
L'authenticité de l'hôte '<adresse_ip (adresse_ip)' ne peut pas être établie.
L'empreinte de la clé ECDSA est SHA256:<***************************************>.
Êtes-vous sûr de vouloir continuer à vous connecter (yes/no/[empreinte digitale]) ?
Écrire '''"yes"'''
'''Un nouveau message''' s'affiche en anglais, voici sa traduction :
Avertissement : Ajout définitif de '<adresse_ip>' (ECDSA) à la liste des hôtes connus.
On peut voir le '''fichier "known_hosts"''' dans le dossier .ssh de l'utilisateur du PC.
==Problème rencontré==
Un message d'erreur peut s'afficher. Voici sa traduction :
ERREUR : @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERREUR : @ WARNING : REMOTE HOST IDENTIFICATION HAS CHANGED !    @
ERREUR : @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERREUR : IL EST POSSIBLE QUE QUELQU'UN SOIT EN TRAIN DE FAIRE QUELQUE CHOSE DE MÉCHANT !
ERREUR : Quelqu'un pourrait être en train de vous écouter en ce moment même (attaque man-in-the-middle) !
ERREUR : Il est également possible qu'une clé hôte vienne d'être modifiée.
ERREUR : L'empreinte digitale de la clé ECDSA envoyée par l'hôte distant est la suivante
ERREUR: SHA256:<******************************************>.
ERREUR : Veuillez contacter votre administrateur système.
ERREUR : Ajoutez la clé d'hôte correcte dans /home/<utilisateur>/.ssh/known_hosts pour vous débarrasser de ce message.
ERREUR : Clé ECDSA incriminée dans /home/<utilisateur>/.ssh/known_hosts:3
ERREUR : supprimer avec :
ERREUR : ssh-keygen -f "/home/<utilisateur>/.ssh/known_hosts" -R "<adresse_ip de la VM>"
ERREUR : La clé hôte ECDSA pour <adresse_ip> a changé et vous avez demandé une vérification stricte.
ERREUR : La vérification de la clé hôte a échoué.
'''Le fichier known_hosts  stocke les clés publiques des hôtes auxquels un utilisateur a accès'''. Il s'agit d'un fichier très important qui garantit que l'utilisateur se connecte à un serveur légitime en enregistrant son identité sur votre système local. Il permet également d'éviter les attaques de type "man-in-the-middle".
'''Pour corriger ce problème''' envoyer la commande indiquée dans le message d'erreur:
  ssh-keygen -f "/home/<utilisateur>/.ssh/known_hosts" -R "<adresse_ip de la VM>"
'''<utilisateur>''' est le nom de l'utilisateur du PC
'''<adresse_ip de la VM>''' est l'adresse IP privée de la VM si c'est une VM sur votre réseau local, sinon c'est l'adresse IP publique du serveur distant.
==Connexion à la VM depuis le PC==
Maintenant, on doit pouvoir se connecter à la VM depuis un terminal ou un navigateur du PC .
* '''Connexion depuis un terminal'''
ssh <utilisateur>@<adresse_ip_vm>
* '''Connexion depuis un navigateur'''
sftp://<adresse_ip_vm>/
==Désactivation de l’authentification par mot de passe sur la VM ==
Pour un serveur distant, si la connexion SSH est établie il vaut mieux désactiver l'authentification par mot de passe.
===Mettre l'utilisateur de la VM dans le groupe sudo ===
* Donner les droits d'administration à l'utilisateur :
usermod -aG sudo <utilisateur>
* Vérifier que <utilisateur> est dans le groupe "sudo"
groups <utilisateur>
===Configurer SSH pour désactiver l'authentification par mot de passe ===
* Éditer le fichier '''sshd_config''' :
sudo nano /etc/ssh/sshd_config
* Repérer la ligne qui contient la directive "'''PasswordAuthentication'''"
* Décommenter la ligne en supprimant le #, et fixez la valeur à no ce qui donne :
PasswordAuthentication no
* '''Redémarrer SSH''':
sudo systemctl restart ssh
* Par '''précaution''', ouvrez une nouvelle fenêtre de terminal et vérifiez que le service SSH fonctionne correctement avant de fermer votre session actuelle.
ssh <utilisateur>@<adresse_ip_vm>
=Avertissement =
J’ai écrit ce document pour avoir '''une trace de mes recherches''' et je le partage ici sur ce wiki parce que j’ai eu beaucoup de mal à trouver certaines informations détaillées en français.
Bien entendu, '''la démarche proposée ici correspond à une configuration et une installation bien précises ''' (serveur local, VM, Ubuntu 20.04 server, Linux, apache2, mysql, web, etc) et devra être soit adaptée soit oubliée pour une autre configuration.
Si je trouve de nouvelles informations plus simples, plus sécurisées, plus récentes ou pour une autre configuration, je mettrai à jour ce document. Vous pouvez également me contacter sur '''Mastodon''' [https://framapiaf.org/@acryline] (@acryline@framapiaf.org)  pour '''m’informer d’éventuelles erreurs, améliorations, questions, idées, partages'''.
Si vous utilisez ce document, vous reconnaissez et acceptez que '''je ne suis pas responsable des interruptions, et des conséquences qui peuvent en découler pour vous ou tout tiers.'''
Merci d’avoir lu ce document.

Dernière version du 26 janvier 2023 à 19:10

Introduction

Virtualisation de systèmes d'exploitation :

  • technique qui permet de faire fonctionner en même temps, sur un seul ordinateur (hôte), plusieurs systèmes d'exploitation (invités). Il existe plusieurs types de virtualisation.
  • on parle alors de Virtual Machines (VM) ou Machine Virtuelle.
  • La virtualisation sur Wikipédia

Hyperviseur

Schéma de la virtualisation de type I avec l'hyperviseur KVM
Schéma de la virtualisation de type I avec l'hyperviseur KVM
  • Logiciel de virtualisation installé dans le système d'exploitation de l'hôte et qui permet à plusieurs systèmes d'exploitation de fonctionner sur l'hôte.
  • Crée des environnements clos où sont installé les OS invités.
  • KVM (Kernel-based Virtual Machine) est un hyperviseur libre de type I pour Linux. C'est l'hyperviseur qui sera utilisé dans ce document.





Pourquoi utiliser la virtualisation ?

  • Utiliser plusieurs VM en même temps sur la même machine,
  • Tester différents systèmes d'exploitation,
  • Tester des logiciels dans un environnement contrôlé sans danger pour le système hôte,
  • Copier et utiliser des environnements de test,
  • Utiliser des configurations différentes sur le même serveur par exemple Nginx et PostgreSQL sur une VM et Apache2 et MySQL sur une autre.
  • Transporter un OS d'une machine à l'autre.

Description de l'installation et des outils utilisés dans ce document

Le réseau

Réseau correspondant à l'installation de VM décrite dans ce document.
Réseau correspondant à l'installation de VM décrite dans ce document.

Le réseau local est connecté à internet via un modem routeur. Il communique avec l'extérieur (le monde) à l'aide d'une adresse IP publique que nous représenterons par XXX.XXX.XXX.XXX.

Le modem routeur possède 4 prises LAN (réseau local ).Donc, on peut y connecter 4 appareils. Ici,on voit :

  • un PC sur la prise 1 et
  • un serveur sur la prise 2.
  • Les deux autres prises sont libres.

Les appareils du réseau local communiquent l'un avec l'autre à l'aide d'adresses IP privées. Ici, par exemple :

  • le PC a pour adresse IP privée 198.168.0.1
  • le serveur l'adresse IP privée 192.168.0.2.



Les systèmes d'exploitation des machines

Dans ce document il ne sera question que d'OS GNU/Linux. Pour trouver des informations sur l'OS installé tapez dans un terminal la commande :

uname -a  
  • PC :
Linux <nom de la machine> 5.15.0-58-generic #64~20.04.1-Ubuntu SMP Fri Jan 6 16:42:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  • Serveur (machine hôte):
Linux <nom du serveur> 5.4.0-137-generic #154-Ubuntu SMP Thu Jan 5 17:03:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

L'hyperviseur KVM

  • Hyperviseur de type I pour une virtualisation complète.
  • Simule un nouvel ordinateur complet pour les le système d'exploitation (OS) invité.
  • KVM est plus facile à mettre en place qu'un hyperviseur de type II.
  • KVM est un logiciel libre.
  • Pour des OS prévus pour la même architecture matériel que le processeur physique.
  • Hyperviseurs : KVM

Est-ce que la machine hôte supporte la virtualisation ?

Envoyer cette commande dans une console de l'hôte où on veut installer une VM:

egrep -c '(svm|vmx)' /proc/cpuinfo

Réponse :

  • si 0  : l'hôte ne supporte pas la virtualisation, l'installation est compromise.
  • si 1 ou + : l'hôte supporte la virtualisation, on peut poursuivre l'installation.

La virtualisation est-elle activée dans le BIOS/UEFI ?

Installer cpu-checker

sudo apt install cpu-checker

Commande

Envoyer cette commande dans une console de l'hôte.

sudo kvm-ok

Réponses

  • Si la virtualisation n'est pas activée et si le processeur prend en charge la virtualisation , cette réponse est envoyée en anglais (ici elle est traduite pour plus de commodité).
INFO : /dev/kvm n'existe pas
ASTUCE : sudo modprobe kvm_intel
INFO : Votre processeur prend en charge les extensions KVM
INFO : KVM (vmx) est désactivé par votre BIOS
ASTUCE : Entrez dans la configuration de votre BIOS et activez la technologie de virtualisation (VT),
puis éteignez ou rallumez votre système.
L'accélération KVM ne peut PAS être utilisée

Il faut entrer dans le BIOS et activez la technologie de virtualisation (VT), puis rebooter le système.

  • Si la virtualisation est activée cette réponse s'affiche en anglais dans la console.
INFO : /dev/kvm existe
L'accélération KVM peut être utilisée

Activation de la Technologie de virtualisation pour l'hôte

Arrêter le serveur

Installer des périphériques sur le serveur hôte

Un écran + un clavier + une souris

Ouvrir le BIOS/UEFI

Redémarrer le serveur hôte et presser la touche qui ouvre le BIOS/UEFI.

Par exemple F2 pour ouvrir ASUS UEFI BIOS Utility.

Chercher comment activer la virtualisation

Par exemple, pour ASUS UEFI BIOS Utility

  • Advanced Mode / Onglet Avancé /
  • Activer Technologie de virtualisation Intel tout en bas de l'écran.
  • Bouton "Quitter "

Enregistrer les modifications et réinitialiser le serveur

Tester la machine

sudo kvm-ok

On devrait obtenir :

INFO: /dev/kvm exists
KVM acceleration can be used

Redémarrer le serveur hôte

  • Arrêter le serveur,
  • Débrancher écran, clavier et souris
  • Redémarrer le serveur hôte

Installation d'une machine virtuelle

Conditions d'installation

Voir les chapitres précédants.

  • le ou les processeurs de la machine hôte destinée à recevoir la VM invitée acceptent la virtualisation
  • la virtualisation est activée dans le BIOS/UEFI.

En plus il faut une connexion à internet ou au moins l'archive iso d'installation du système d'exploitation de la VM.

Installer KVM et annexes sur le serveur hôte

sudo apt-get install qemu-kvm 
  • qemu-kvm - virtualisation complète sur les machines x86 ;

Ajouter l'utilisateur au groupe kvm

sudo adduser $USER kvm

Redémarrer.

Créer un fichier image sur le serveur hôte

Répertoire vm

  • Créer un répertoire vm sur le serveur hôte. Il contiendra l'image disque de la VM. Nous allons, par exemple, créer ce dossier dans le home de l'utilisateur.
mkdir /home/<utilisateur>/vm

Image disque

Moyen pratique de simuler un grand nombre de médias : elles permettent notamment de stocker, sur un seul disque dur physique, de nombreuses images disques virtuelles permettant d'accéder à des données qui pourraient ne pas être compatibles avec le système hôte.[1] Il va contenir le système de fichier virtuels de la VM.

Commande :

qemu-img create -f qcow2 /home/<utilisateur>/vm/fichier_image.img 6G
  • Emplacement : /home/<utilisateur>/vm/fichier_image.img

- 6G est la taille virtuelle de ce système de fichier virtuel.

Réponse

Formatting '/home/<utilisateur>/vm/fichier_image.img', fmt=qcow2 size=6442450944 cluster_size=65536 lazy_refcounts=off refcount_bits=16

Rq : remplacer <utilisateur> par le nom de l'utilisateur du serveur hôte.

Charger l'archive iso d'Ubuntu server 20.04 sur le serveur hôte

  • Créer un dossier iso , ou placer les fichiers iso des systèmes d'exploitation. Par exemple, nous placerons ce dossier dans le home de l'utilisateur :
mkdir /home/<utilisateur>/iso
cd  /home/<utilisateur>/iso
  • Lancer la commande suivante depuis le dossier iso
 wget https://releases.ubuntu.com/20.04.5/ubuntu-20.04.5-live-server-amd64.iso

Installation de virt-manager

Présentation

« L'application virt-manager est une interface utilisateur de bureau pour la gestion des machines virtuelles via libvirt. Elle cible principalement les VMs KVM, mais gère également Xen et LXC (conteneurs linux). Elle présente une vue synthétique des domaines en cours d'exécution, leurs performances en direct et les statistiques d'utilisation des ressources. Des assistants permettent la création de nouveaux domaines, ainsi que la configuration et l'ajustement de l'allocation des ressources et du matériel virtuel d'un domaine. Une visionneuse client VNC et SPICE intégrée présente une console graphique complète pour le domaine invité.» [2]

Installation

  • Sur le serveur hôte
sudo apt install libvirt-daemon-system libvirt-clients bridge-utils
  • Sur le client (ssh-askpass-gnome pour utiliser une connexion ssh)  :

Le client est un ordinateur à partir duquel on administre le serveur. Ici, c'est le PC du réseau local. Mais, il peut être accessible via un réseau étendu. On va installer une interface graphique sur le client.

 sudo apt install virt-manager ssh-askpass-gnome
 sudo adduser $user libvirt

Créer une machine virtuelle avec le gestionnaire de machines virtuelles

Ajouter une connexion QEMU/KVM vers le serveur hôte

Fenêtre du gestionnaire de machine virtuelle
Fenêtre du gestionnaire de machine virtuelle

Lancer le gestionnaire de machines virtuelles sur la machine cliente [3]
  • soit depuis le gestionnaire d'applications du système d'exploitation
  • soit en utilisant la commande virt-manager dans une console.

La fenêtre du gestionnaire de machines virtuelles s'ouvre.

Aller dans Fichier/Ajouter une connexion. Une fenêtre s'ouvre.

Ajouter une connexion
Ajouter une connexion
  • Cocher la case "Se connecter à l'hôte distant via SSH" si nécessaire.
  • Nom de l'utilisateur : entrer le nom de l'utilisateur du serveur hôte
  • Nom de l'hôte : nom de domaine ou IP du serveur hôte. Dans un réseau local, on utilise l'IP privée du serveur hôte. Si le serveur est distant, c'est à dire qu'il est accessible via internet, on utilisera l'IP publique du serveur hôte.
  • Presser sur le bouton "Connecter"

Affichage de la connexion QEMU/KVM à l'hôte
Affichage de la connexion QEMU/KVM à l'hôte
La connexion QEMU/KVM s'affiche dans le gestionnaire. Elle va nous permettre de créer une nouvelle VM sur le serveur hôte.

Si PC et serveur hôte (local ou distant) ne sont pas déjà connectés , il faudra cliquer sur "QEMU/KVM : <ip>" dans le gestionnaire de VM puis, entrer le mot de passe ou la passphrase de la connexion.

Organiser le stockage sur le serveur hôte depuis le gestionnaire de VM

Fenêtre des détails de la connexion Dans le gestionnaire de VM, ouvrir le menu Édition/ Détails de la connexion.

Une nouvelle fenêtre s'ouvre.

Fenêtre de gestion du stockage sur le/les serveur·s hôte·s Cliquer sur l'onglet Stockage dans la fenêtre des détails de la connexion pour ouvrir la fenêtre de gestion du stockage sur les serveurs hôtes des VM gérées.

À gauche de la fenêtre on voit une colonne qui contient la liste des stockages disponibles. Normalement, il y a au moins le stockage "default".

En bas de cette colonne, il y a 4 petits boutons, une croix verte, une flèche, une croix blanche dans un rond rouge, et un signe interdit. Il ne faut pas confondre la croix verte de la colonne de gauche et la croix verte de la fenêtre de droite.

Nous allons ajouter deux stockages :

  • le stockage des images disque qui va contenir l'image disque du système de fichier de la VM
  • le stockage de l'archive iso qui va contenir le fichier iso du système d'exploitation qui sera installé sur la VM.

Pour cela cliquer sur la croix verte de la colonne de gauche. Une nouvelle fenêtre s'ouvre.

Fenêtre de création d'un nouveau stockage Cette fenêtre va nous permettre de créer un nouveau stockage.
  • Dans le champ Nom, on indique le nom du stockage. Image disque.
  • Dans Type on laisse dir: Répertoire des fichiers système
  • Dans Chemin Cible, on indique le chemin de l'image disque créée sur le serveur hôte. /home/<utilisateur>/vm/

Remplacer <utilisateur> par le nom de l'utilisateur du serveur hôte.

Presser sur Terminer.

On fait pareil pour l'archive de l'iso ce qui donne :

  • Nom : ISO
  • Type : dir: Répertoire des fichiers système
  • Chemin Cible : /home/<utilisateur>/iso/

Préparation de l'installation de l'OS de la VM

Fenêtre de création d'une nouvelle VM Sélectionner la connexion au serveur hôte. Dans le menu Fichier sélectionner "Nouvelle machine virtuelle". Une nouvelle fenêtre s'ouvre. On nous demande de choisir comment on veut installer l'OS. Plusieurs choix sont proposés :
  • Média d'installation local (image ISO ou CD-ROM) : c'est l'option que nous allons choisir pour installer la VM. Il va nous permettre de sélectionner l'archive iso d'Ubuntu server 20.04 LTS.
  • Installation réseau (HTPP, HTPS, FTP) : pour aller chercher le fichier d'installation de l'OS sur un réseau local ou étendu.
  • Démarrage réseau (PXE) : L'amorçage PXE (sigle de Pre-boot eXecution Environment) permet à une station de travail de démarrer depuis le réseau en récupérant une image de système d'exploitation qui se trouve sur un serveur.[4]
  • Importer une image disque existante :pour installer une VM à partir d'une image disque créée à partir d'une autre VM.

Sélectionner Média d'installation local (image ISO ou CD-ROM) et cliquer sur le bouton "Suivant"

Fenêtre pour choisir un média d'installation ISO ou CD-ROM Cliquer sur le bouton "Parcourir" pour trouver le nom du fichier ISO qui sera utilisé pour créer la VM. La fenêtre de choix du volume de stockage s'ouvre. On retrouve les stockages Image Disque(ici Image) et ISO que nous avions créés.
Fenêtre de choix d'un volume de stockage Dans la colonne de gauche, sélectionner ISO. La liste des volumes de stockage contenus dans ISO s'affichent.

Sélectionner ubutu-20.04.5-live-server-amd64.iso.

Cliquer sur Choisir ce volume.

Generic default Dans le champ cd choix du système d'exploitation, tapez Ubuntu, puis sélectionnez Ubuntu 20.04.

Cliquer sur Suivant.

Fenêtre de choix des paramètres CPU Les paramètres CPU dépendront de l'OS installé, des ressources matérielles de l'hôte et à quoi on destine la VM. Il faut vérifier que ces paramètres ne dépassent pas les capacités de l'hôte indiqué sur cette fenêtre.

Pour un test et un serveur ubuntu 20.04 LTS, 1024Mo de RAM et 1 CPU suffisent.

Les paramètres CPU deviennent :

  • Mémoire : 1024
  • CPU : 1

Cliquer sur Suivant.

Fenêtre de choix du stockage de la VM créée Dans cette nouvelle fenêtre on choisit si on veut stocker la nouvelle machine virtuelle et où la stocker.
  • La case "Activer le stockage pour cette machine virtuelle" reste cochée.
  • Sélectionner l'option "Selectionner ou créer un stockage personnalisé" puis cliquer sur le bouton "Gérer".
Fenêtre de choix d'un volume de stockage Comme pour l'archive iso, nous allons choisir un volume de stockage. Cette fois dans "Image disque" (Image) nous sélectionnons fichier_image.img.

Cliquer sur Choisir ce volume

cliquer sur Suivant dans la fenêtre de choix des paramètres de CPU.

Fenêtre récapitulative des paramètres d'installation de la VM Une fenêtre récapitulative des paramètres d'installation de la VM s'ouvre.
  • On peut la renommer dans le champ d'édition Nom sans espace dans le nom
  • Le menu déroulant Sélection de réseau propose plusieurs types de réseau. Nous allons utiliser Périphérique de l'hôte <nom du périph> : macvtap. Malgré l'avertissement cette solution fonctionne sur la configuration de test.
  • Cliquer sur le bouton Terminer

Installation du système d'exploitation

Choix de la langue d'affichage Une console avec un fond noir s'affiche dans le gestionnaire, c'est ce qui se passe sur le serveur hôte.

On voit des lignes s'afficher pendant le chargement de l'archive iso.

Après un petit instant, la fenêtre de gauche s'affiche. Elle va nous permettre de sélectionner la langue du système d'exploitation.

La sélection se fait à l'aide des flèches du clavier puis presser sur Entrée, mais il faut tout d'abord donner le focus à la console en cliquant dessus.

Pour sortir de la console et réactiver la souris, il faut enfoncer les touches CTRL + ALT.

Lancer l'installation d'Ubuntu server Cette page présente 4 choix. On va laisser "Installer Ubuntu Server " sélectionné et on presse sur le bouton "Entrée".

On passe à la fenêtre de sélection de la langue d'installation.

Choix de la langue de l'OS installée Comme indiqué à l'écran, on utilise les flèches HAUT et BAS pour sélectionner la langue d'installation. Presser sur le bouton "Entrée" pour valider le choix.
Choix de la configuration du clavier Ensuite, on sélectionne le disposition du clavier et on sélectionne "Terminé" en bas de la fenêtre et on presse sur Entrée pour continuer.
Demande de mise à jour du serveur à la version 22.12.1 L'installateur nous demande si on veut mettre à jour Ubuntu server 20.04 LTS vers Ubuntu serveur 22.12.1.

Dans ce document, on va continuer sans mise à jour et installer Ubuntu server 20.04 LTS.

Cliquer sur Continuer sans mettre à jour.

Connexion de l'installateur au réseau Si on a bien sélectionné la connexion au réseau Périphérique de l'hôte <nom du périph> : macvtap dans la fenêtre récapitulative des paramètres de l'installation de la VM alors, l'installateur devrait trouver automatiquement l'adresse de la nouvelle VM pour qu'elle puisse communiquer avec les autres machines du réseau et qu'elle ait un accès aux mises à jour.

Ici par exemple l'IP privée de la nouvelle VM est 192.168.0.16.

Sélectionner Terminé en bas de la fenêtre et presser sur la touche Entrée pour continuer.

Page de configuration d'un proxy En fonction de la configuration du réseau, s'il est besoin d'utiliser un serveur proxy pour se connecter à Internet, on entre ici ses détails.

Nous allons laisser ce champ vide et appuyer sur Terminé.

Page de définition du miroir d'archive Ubuntu Ensuite, on configure le miroir d'archive Ubuntu. Le programme d'installation le sélectionnera automatiquement en fonction du pays de l'installation.

On appuie sur Terminé pour continuer.

Configuration du stockage de la VM Il est maintenant temps de configurer le stockage. Dans ce document, nous allons utiliser la configuration
  • Utiliser un disque entier
  • Set up this disk as an LVM group (Configurer ce disque comme un groupe LVM).

Note : le programme d'installation créera la partition racine (avec une petite taille par défaut), on pourra modifier manuellement ses tailles et également créer une partition swap.

Presser sur terminer pour continuer

Sommaire du système de fichier La capture d'écran suivante montre le résumé du système de fichiers par défaut. Notre machine virtuelle de test a une capacité totale de 6 Go de disque dur.
Confirmation de l'installation de la VM
En sélectionnant Continuer ci-dessous, le processus d'installation 
commencera et entraînera la perte de données sur les disques 
sélectionnés pour être formatés.
Vous ne pourrez pas revenir à cet écran ou à un écran précédent 
une fois que l'installation aura commencé.
Êtes-vous sûr de vouloir continuer ?

Confirmer l'installation en sélectionnant Continuer et appuyez sur Entrée.

Création du profil de l'utilisateur de la VM On crée maintenant un profil d'utilisateur en mentionnant un nom, le nom du serveur(VM_Tuto), le nom d'utilisateur

et un mot de passe sûr et solide.

Ensuite, sélectionner Terminé et appuyer sur Entrée.

Configuration SSH Ensuite, le programme d'installation demande si on veut installer le paquetage OpenSSH pour l'accès à distance.
Utilise la barre d'espace pour choisir cette option. 
Faire défiler jusqu'à Terminé et appuyer sur Entrée.
Outils annexes à installer Il est possible d'installer certains snaps, pour cela on les sélectionne

dans la liste. Utiliser la barre d'espacement pour sélectionner un snap.

Faire défiler jusqu'à Terminé et appuyer sur Entrée.

Fin de l'installation de l'OS Le processus d'installation devrait maintenant commencer.

Une fois l'installation terminée, appuyer sur Entrée pour redémarrer le système.

Après le redémarrage, on peut se connecter à la VM Ubuntu server 20.04 LTS avec le nom et le mot de passe de l'utilisateur.

Installer un serveur web sur la VM

Toute cette partie se fait dans la VM via la console du gestionnaire de VM ou via une connexion ssh depuis le terminal d'un ordinateur de bureau.(Voir plus bas)

Mise jour du système

sudo apt update
sudo apt upgrade

Installation de LAMP

LAMP[5] est un acronyme désignant un ensemble de logiciels libres permettant de construire des serveurs de sites web. L'acronyme original se réfère aux logiciels suivants :

  • « Linux », le système d'exploitation ( GNU/Linux ) ;
  • « Apache », le serveur Web ;
  • « MySQL ou MariaDB », le serveur de base de données ;
  • À l'origine1, « PHP », « Perl » ou « Python », les langages de script.

Installation

sudo apt install apache2 php libapache2-mod-php mysql-server php-mysql

Remarque : Si l'installation se termine par une erreur, une solution est peut-être d'installer les paquets l'un après l'autre.

Utilisation du port 90 pour rediriger les paquets entrant vers la VM

Schéma récapitulatif de l'installation et redirection de ports :

Schéma récapitulatif de l'installation et redirection de ports
Schéma récapitulatif de l'installation et redirection de ports

La redirection de port [6] (port forwarding ou port mapping en anglais) consiste à rediriger des paquets réseaux reçus sur un port donné d'un ordinateur ou un équipement réseau vers un autre ordinateur ou équipement réseau sur un port donné. Cela permet entre autres de proposer à des ordinateurs extérieurs à un réseau d'accéder à des services répartis sur plusieurs ordinateurs de ce réseau.

Cela se fait depuis l'interface de configuration du modem routeur NAT. Cette interface dépend du modem routeur de la connexion à internet.

Configuration du port http pour la VM

  • Remplacer le port http dans /etc/apache2/ports.conf

La ligne

Listen 80

devient

Listen 90
  • Remplacer le port dans /ect/apache2/sites-available/000-default.conf

La ligne

<VirtualHost *:80>

devient

<VirtualHost *:90>

Ajouter un alias à Apache

Imaginons que nous voulions installer plusieurs sites sur cette VM. Nous allons ajouter un alias par site dans un fichier /ect/apache2/sites-available/vm.conf puis lier symboliquement ce fichier vers site-enable.

On copie le fichier 000-default.conf

cp 000-default.conf vm.conf

On édite le fichier vm.conf et on ajoute cette configuration sous la ligne DocumentRoot /var/www/html

    ## ZONE SITE VM
      Alias /tuto  "/var/www/html/tuto"
      <Directory "/var/www/html/tuto/">
      Options -Indexes +FollowSymLinks +MultiViews
              AllowOverride All
              Require all granted
      </Directory>

Ensuite on active le fichier de configuration (pour désactiver on utilise a2dissite)

 sudo a2ensite vm.conf

Et on recharge apache2

 systemctl reload apache2

Comment activer l'utilisation de la redirection

J'ai pas mal cherché comment faire pour accéder à une page web située sur une VM. J'ai essayé beaucoup de tutoriels qui utilisaient Iptables et j'ai fait pas mal de configurations inutiles pour me rendre compte qu'avec le gestionnaire de virtualisation, tout devenait plus simple. Heureusement, j'utilise un serveur test. (Je n’en ai pas fini avec Iptables ;) )

Ainsi, cette partie est peut-être inutile. Je dois encore le vérifier.

  • Editer ce fichier
nano /etc/sysctl.conf
  • Décommenter :
net.ipv4.ip_forward=1
  • Activer la modification avec cette commande.
sysctl -p

Vérification de l'accessibilité à la VM depuis internet

  • On crée le dossier du site
mkdir tuto
  • On peut créer une simple page html
nano /var/www/html/tuto/index.html
  • Copier ces lignes et enregistrer la page
 <html>
   Bonjour le monde !
 </html>
  • On attribue le dossier à l'utilisateur www-data
chown -R www-data:www-data /var/www/htlm/tuto
  • Pour le test, imaginons que votre adresse IP publique soit XXX.XXX.XXX.XXX et que le nom de domaine associé soit monsite.truc

Vous pouvez ouvrir la page http://xxx.xxx.xxx.xxx:90/tuto/ ou http://monsite.truc:90/tuto/

Connexion SSH à la machine virtuelle

Le gestionnaire de machines virtuelles et très pratique pour installer une nouvelle VM mais, lorsqu'il s'agit d'envoyer des commandes à la VM il est plus commode de le faire depuis un terminal. En effet, il est impossible de faire un copier coller dans la console du gestionnaire et l'affichage n'y est pas des plus lisibles. Voyons comment faire pour créer une connexion ssh entre une PC et une machine virtuelle.

Spoiler : Si on sait comment faire pour créer une connexion SSH entre un PC et toutes autres machines distantes ou locales, pas la peine d'aller plus loin : c'est la même chose.

On utilise (une dernière fois ?) la console du gestionnaire de machine virtuelle sur le PC pour mettre en place cette connexion. Ensuite procéder ainsi :

Pare-feu de la VM

  • Ouvrir le port ssh sur la machine virtuelle (attention ne pas activer ufw avant d'avoir ouvert ce port !)
 sudo ufw allow ssh
  • Éventuellement, ouvrir le port http. Dans ce document nous avons utilisé le port 90, ce qui donne :
 sudo ufw allow 90/tcp
  • Activer ufw :
 ufw enable

  • Vérifier l'installation du serveur ssh qui devrait déjà avoir été installé par le gestionnaire de VM (voir plus haut)
sudo apt install openssh-server
  • Relancer SSH
sudo systemctl restart ssh

Créer les clés SSH privée et publiques pour le PC

Dans un terminal du PC on lance la commande :

 ssh-keygen -t ed25519 -C "email@example.com"
 ssh-add
  • On indique une adresse e-mail.
  • On crée une passphrase [7] pour les clés SSH.

Envoyer la clé publique à la VM

ssh-copy-id -i ~/.ssh/id_<algorithme>.pub <utilisateur>@<adresse IP>

<algorithme> est le nom de l'algorithme utilisé pour créer les clés SSH. Si on n'est pas sûr de ce qu'on fait, on va voir dans le dossier .ssh du home de l'utilisateur dPC, le nom de la clé publique y apparaît.

<utilisateur> est le nom de l'utilisateur de la VM.

<adresse IP> est l'adresse IP privée de la VM dans le réseau local. Si la VM est sur un serveur distant ce sera l'adresse publique du serveur distant.

On doit entrer le mot de passe de de l'utilisateur de la VM (pas la passphrase).

Si tout va bien un message en anglais s'affiche, voici sa traduction (sans l'adresse ip et l'empreinte de la clé ECDSA):

L'authenticité de l'hôte '<adresse_ip (adresse_ip)' ne peut pas être établie.
L'empreinte de la clé ECDSA est SHA256:<***************************************>.
Êtes-vous sûr de vouloir continuer à vous connecter (yes/no/[empreinte digitale]) ? 

Écrire "yes"

Un nouveau message s'affiche en anglais, voici sa traduction :

Avertissement : Ajout définitif de '<adresse_ip>' (ECDSA) à la liste des hôtes connus.

On peut voir le fichier "known_hosts" dans le dossier .ssh de l'utilisateur du PC.

Problème rencontré

Un message d'erreur peut s'afficher. Voici sa traduction :

ERREUR : @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERREUR : @ WARNING : REMOTE HOST IDENTIFICATION HAS CHANGED !     @
ERREUR : @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERREUR : IL EST POSSIBLE QUE QUELQU'UN SOIT EN TRAIN DE FAIRE QUELQUE CHOSE DE MÉCHANT !
ERREUR : Quelqu'un pourrait être en train de vous écouter en ce moment même (attaque man-in-the-middle) !
ERREUR : Il est également possible qu'une clé hôte vienne d'être modifiée.
ERREUR : L'empreinte digitale de la clé ECDSA envoyée par l'hôte distant est la suivante
ERREUR: SHA256:<******************************************>.
ERREUR : Veuillez contacter votre administrateur système.
ERREUR : Ajoutez la clé d'hôte correcte dans /home/<utilisateur>/.ssh/known_hosts pour vous débarrasser de ce message.
ERREUR : Clé ECDSA incriminée dans /home/<utilisateur>/.ssh/known_hosts:3
ERREUR : supprimer avec :
ERREUR : ssh-keygen -f "/home/<utilisateur>/.ssh/known_hosts" -R "<adresse_ip de la VM>"
ERREUR : La clé hôte ECDSA pour <adresse_ip> a changé et vous avez demandé une vérification stricte.
ERREUR : La vérification de la clé hôte a échoué.

Le fichier known_hosts stocke les clés publiques des hôtes auxquels un utilisateur a accès. Il s'agit d'un fichier très important qui garantit que l'utilisateur se connecte à un serveur légitime en enregistrant son identité sur votre système local. Il permet également d'éviter les attaques de type "man-in-the-middle".

Pour corriger ce problème envoyer la commande indiquée dans le message d'erreur:

 ssh-keygen -f "/home/<utilisateur>/.ssh/known_hosts" -R "<adresse_ip de la VM>"

<utilisateur> est le nom de l'utilisateur du PC <adresse_ip de la VM> est l'adresse IP privée de la VM si c'est une VM sur votre réseau local, sinon c'est l'adresse IP publique du serveur distant.

Connexion à la VM depuis le PC

Maintenant, on doit pouvoir se connecter à la VM depuis un terminal ou un navigateur du PC .

  • Connexion depuis un terminal
ssh <utilisateur>@<adresse_ip_vm>
  • Connexion depuis un navigateur
sftp://<adresse_ip_vm>/

Désactivation de l’authentification par mot de passe sur la VM

Pour un serveur distant, si la connexion SSH est établie il vaut mieux désactiver l'authentification par mot de passe.

Mettre l'utilisateur de la VM dans le groupe sudo

  • Donner les droits d'administration à l'utilisateur :
usermod -aG sudo <utilisateur>
  • Vérifier que <utilisateur> est dans le groupe "sudo"
groups <utilisateur>

Configurer SSH pour désactiver l'authentification par mot de passe

  • Éditer le fichier sshd_config :
sudo nano /etc/ssh/sshd_config
  • Repérer la ligne qui contient la directive "PasswordAuthentication"
  • Décommenter la ligne en supprimant le #, et fixez la valeur à no ce qui donne :
PasswordAuthentication no
  • Redémarrer SSH:
sudo systemctl restart ssh
  • Par précaution, ouvrez une nouvelle fenêtre de terminal et vérifiez que le service SSH fonctionne correctement avant de fermer votre session actuelle.
ssh <utilisateur>@<adresse_ip_vm>

Avertissement

J’ai écrit ce document pour avoir une trace de mes recherches et je le partage ici sur ce wiki parce que j’ai eu beaucoup de mal à trouver certaines informations détaillées en français.

Bien entendu, la démarche proposée ici correspond à une configuration et une installation bien précises (serveur local, VM, Ubuntu 20.04 server, Linux, apache2, mysql, web, etc) et devra être soit adaptée soit oubliée pour une autre configuration.

Si je trouve de nouvelles informations plus simples, plus sécurisées, plus récentes ou pour une autre configuration, je mettrai à jour ce document. Vous pouvez également me contacter sur Mastodon [8] (@acryline@framapiaf.org) pour m’informer d’éventuelles erreurs, améliorations, questions, idées, partages.

Si vous utilisez ce document, vous reconnaissez et acceptez que je ne suis pas responsable des interruptions, et des conséquences qui peuvent en découler pour vous ou tout tiers.

Merci d’avoir lu ce document.