Administration et Sécurité Des SE (UNIX) TP : Chargeur de
démarrage GRUB 2
Niveau : 3A / 3B
UP : SYSTEME
Objectifs :
Le but de ce TP est de :
✔ Manipuler le EFI Boot manager
✔ Manipuler les différents fichiers de configuration Grub2.
✔ Personnaliser le menu de démarrage.
✔ Protéger Grub2 par un mot de passe.
Environnement de travail :
✔ Machine virtuelle ou physique avec un système d’exploitation Ubuntu 22.04.4
Travail demandé :
Créer un snapshot de la machine virtuelle pour sauvegarder l’état actuel de la machine.
Avant toute modification système, il est essentiel de prendre un instantané de l’état de la
machine. Cela permet de restaurer l’état initial en cas d’erreur.
1. UEFI BOOT MANAGER
1. Vérifier que l’ordinateur démarre avec une session EFI :
Si le démarrage est en mode classique (non-EFI), il faut ajuster les paramètres de la machine
pour passer en mode UEFI. Vous devez vérifier si la machine démarre bien en mode EFI.
[ -d /sys/firmware/efi ] && echo "Session EFI" || echo "Session non EFI"
• Si la réponse est " Session EFI ", alors le démarrage se fait en mode UEFI.
• Si la réponse est " Session non EFI ", cela signifie que le démarrage est en mode BIOS
classique.
Action à entreprendre en cas de démarrage non-EFI :
1. Fermer la machine virtuelle.
2. Entrer dans les paramètres de la machine virtuelle :
3. Cliquez sur Options.
4. Sélectionnez Advanced ou Avancé.
5. Dans la section Firmware Type, choisissez UEFI.
6. Enregistrez les paramètres, puis relancez la machine virtuelle.
➢ Vérifiez à nouveau si la machine est maintenant en mode EFI en exécutant la
commande précédente.
2. Lister les entrées de démarrage de la machine (boot devices) :
Cela vous affichera la liste des entrées de démarrage disponibles, avec leurs priorités.
• BootCurrent: 0006: Indique l'option de démarrage qui a été sélectionnée pour le
démarrage en cours.
• BootOrder: 0006,0000,0001,0002,0003,0004,0005: Cette ligne spécifie l'ordre
dans lequel les périphériques de démarrage sont consultés. Dans cet exemple,
l'ordinateur tentera d'abord de démarrer à partir de l'entrée 0006 (ubuntu), puis 0000
(EFI VMware Virtual SCSI Hard Drive), puis 0001 (EFI Floppy), et ainsi de suite.
• Boot0000* EFI VMware Virtual SCSI Hard Drive (0.0): C'est l'entrée de démarrage
numéro 0000. Il est configuré pour démarrer à partir d'un disque dur virtuel SCSI
sur une machine virtuelle VMware.
• Boot0001* EFI Floppy: Il s'agit de l'entrée de démarrage numéro 0001 qui est
configurée pour démarrer à partir d'une unité de disquette virtuelle.
• Boot0002* EFI VMware Virtual SATA CDROM Drive (0.0): Cette entrée est
configurée pour démarrer à partir d'un lecteur CD-ROM virtuel SATA sur une
machine virtuelle VMware.
• Boot0003* EFI VMware Virtual SATA CDROM Drive (1.0): Il s'agit d'une autre
entrée configurée pour démarrer à partir d'un lecteur CD-ROM virtuel SATA, mais
celui-ci est répertorié comme le deuxième lecteur (1.0).
• Boot0004* EFI Network: Cette entrée est configurée pour démarrer à partir du
réseau, ce qui signifie qu'elle tentera de démarrer à partir d'un serveur PXE (Preboot
eXecution Environment)
• Boot0005* EFI Internal Shell (Unsupported option): Il s'agit d'une option interne du
micrologiciel EFI qui est répertoriée comme non prise en charge. Cela pourrait être
une interface de ligne de commande intégrée pour effectuer des opérations de
maintenance ou de diagnostic.
• Boot0006* ubuntu: C'est l'entrée de démarrage numéro 0006. Elle est configurée
pour démarrer à partir de l'installation Ubuntu sur ce système.
3. Lister les entrées de démarrage avec leurs chemins :
4. Changer l’ordre de démarrage :
5. Affichage de menu grub
Le fichier : /etc/default/grub: C'est le fichier principal de GRUB2. Il contient les paramètres
par défaut qui influencent le comportement global du chargeur de démarrage.
• GRUB_DEFAULT définit l'entrée par défaut dans le menu de démarrage de GRUB.
Une valeur numérique correspond à la position dans le menu, tandis que "saved"
démarre le dernier système utilisé.
• GRUB_TIMEOUT_STYLE détermine l'affichage du menu : il peut être visible,
masqué, ou masqué avec un délai d'attente.
• GRUB_TIMEOUT spécifie le nombre de secondes avant de démarrer
automatiquement l'OS par défaut.
• GRUB_DISTRIBUTOR personnalise le titre affiché dans le menu GRUB, basé par
défaut sur la distribution.
• GRUB_CMDLINE_LINUX_DEFAULT configure les options de démarrage par
défaut du noyau, comme "splash" pour un écran graphique ou "quiet" pour réduire les
messages.
• GRUB_CMDLINE_LINUX ajoute des options de démarrage spécifiques au mode
récupération, comme forcer la vérification ou la réparation du système de fichiers.
Pour rendre ce menu visible par défaut avec une durée de temporisation de 10 secondes, on va
agir sur le paramètre.
• GRUB_TIMEOUT_STYLE=menu
• GRUB_TIMEOUT=10
Remarque : Suite à chaque modification du fichier /etc/default/grub, on doit exécuter la
commande update-grub pour mettre à jour le fichier de configuration /boot/grub/grub.cfg
puis redémarrer.
6. Intitulé dans le menu
• Pour changer l’intitulé du système d’exploitation, on va agir sur le paramètre :
GRUB_DISTRIBUTOR =”Old Kernel”
GRUB_DISTRIBUTOR =”Old Kernel” : Elle est utilisée pour spécifier un texte personnalisé
qui peut être affiché dans le menu de démarrage de GRUB pour indiquer le système
d'exploitation ou la configuration qui est en train de démarrer.
NB : Après chaque modification des fichiers de configuration de GRUB, il est impératif
d'exécuter la commande sudo update-grub. Cette commande met à jour le fichier de
configuration principal de GRUB situé dans /boot/grub/grub.cfg, afin de prendre en
compte les changements effectués.
7. Expliquer pourquoi le nom personnalisé est toujours accompagné par GNU/Linux
(Indication : Rechercher dans le répertoire /etc/grub.d le mot clé “GNU/Linux”)
• if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then : Il s'agit d'une structure
conditionnelle qui vérifie si la variable d'environnement GRUB_DISTRIBUTOR est
vide. On utilise "x" pour s'assurer que même si GRUB_DISTRIBUTOR n'est pas défini,
la comparaison fonctionnera correctement.
• Si GRUB_DISTRIBUTOR est vide, la variable OS est définie sur "GNU/Linux".
• Si GRUB_DISTRIBUTOR a une valeur, une case est exécuté pour effectuer
différentes actions en fonction de la valeur de GRUB_DISTRIBUTOR.
À l'intérieur du case, on vérifie si GRUB_DISTRIBUTOR est égal à "Ubuntu" ou
"Kubuntu". Si c'est le cas, la variable OS est définie avec la valeur de
GRUB_DISTRIBUTOR.
• Si GRUB_DISTRIBUTOR ne correspond ni à "Ubuntu" ni à "Kubuntu", on
utilise un cas générique (*) et on définit la variable OS comme
"${GRUB_DISTRIBUTOR} GNU/Linux".
8. Ajouter deux nouvelles entrées dans le menu GRUB2 : la première pour arrêter le
système et la deuxième pour redémarrer le système :
Indication : Les nouvelles entrées sont ajoutées dans le fichier /etc/grub.d/40_custom en
utilisant le menu menuentry{} :
➢ Le fichier /etc/grub.d/40_custom est un script de configuration utilisé par le
gestionnaire de démarrage GRUB
9. Ajout d’un nouveau noyau
1. Afficher la version actuelle du noyau :
2. Télécharger à partir du lien ci-dessous le noyau mainline v5.19 approprié à
L’architecture de votre machine :
• https://kernel.ubuntu.com/~kernel-ppa/mainline/?C=N;O=D
• Remarque : Installer le noyau stable au lieu de rc (release candidate).
2. Installer le noyau déjà téléchargé
• dpkg: Il s'agit de l'outil de gestion de paquets. Il est utilisé pour installer, supprimer et
gérer les paquets logiciels.
• -i: C'est l'option d'installation de dpkg, qui indique que l'on veut installer un paquet.
• ./: Cela spécifie le répertoire actuel comme emplacement pour les fichiers .deb à
installer.
• *.deb: Cela fait référence à tous les fichiers .deb dans le répertoire actuel.
L'astérisque (*) est un caractère générique qui correspond à tout, et .deb est
l'extension des fichiers de paquets Debian.
4. Redémarrer le système
5. Ajouter une nouvelle entrée nommée « New Kernel » qui fait référence au noyau
récemment installé :
7. Définir « New Kernel » en tant que système d’exploitation par défaut
Remarque : Pour changer le système d’exploitation sur lequel grub2 démarre par défaut, on
doit agir sur la valeur du paramètre GRUB_DEFAULT sachant que :
• Un chiffre (0 = le premier, 1 = le deuxième, etc.) ;
• Saved (sans guillemet) pour le dernier système d’exploitation chargé avec
succès.
10. Démarrage en mode « Recovery »
➢ On remarque que quiconque peut accéder à ce mode et par la suite modifier le
mot de passe du “root”. Il faut donc penser à protéger cet accès par un mot de
passe. Ceci revient à protéger le grub2 par un mot de passe.
11. Protection de grub2 par un mot de passe
1. Faire le nécessaire pour protéger le grub 2: Créer un mot de passe chiffré en SHA1 :
2. Ajouter à la fin du fichier /etc/grub.d/00_header le mot de passe crypté
"End Of File". C'est une indication utilisée pour marquer la fin d'un fichier ou d'une entrée de
données. Lorsque vous écrivez des scripts shell ou des commandes qui prennent des entrées
interactives, vous pouvez utiliser EOF pour indiquer à quel moment la saisie de données doit
être considérée comme terminée.
Ce bloc de texte est une configuration pour GRUB qui définira un superutilisateur avec le nom
"root" et un mot de passe chiffré. Voici une explication des lignes :
• set superusers="root" : Définit "root" comme superutilisateur dans GRUB.
• password_pbkdf2 root : Définit un mot de passe chiffré pour l'utilisateur "root" à l'aide
de l'algorithme PBKDF2 avec SHA-512.
• Le reste de la ligne représente le mot de passe chiffré. Ce mot de passe est généré
par la commande précédente.
Donc, ce bloc de texte est utilisé pour configurer un accès sécurisé à GRUB en définissant un
superutilisateur avec le nom "root" et en lui attribuant un mot de passe chiffré.
12. Modifier les paramètres de démarrage de noyau
1. Redémarrer le système en forçant la quantité de mémoire vive à 2000 Mo
Indication :
Pendant le démarrage, lorsque le menu GRUB2 apparaît, appuyer sur la touche e pour modifier.
Ajouter l’argument mem=2000M comme indiqué dans la figure suivante.