Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:watts [Le 14/03/2020, 11:18] Watts [Modification de 30_os-prober] |
utilisateurs:watts [Le 11/09/2022, 12:27] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Page test pour mon tutoriel grub2 ====== | + | Watts |
+ | Ubuntueros investi depuis peu de temps (découverte 18.04). | ||
- | ====== Sécuriser Grub2 de manière avancée ====== | + | KDE fan, command line addict |
- | <note important>Ce tutoriel fait suite à celui ci [[https://doc.ubuntu-fr.org/securite#securiser_le_demarrage_d_ubuntu_grub|Sécuriser le démarrage d'ubuntu]] Vous devez impérativement avoir effectué ce dernier, et que la manipulation fonctionne, avant de passer à la suite. J'ai testé ces manipulations en 18.04 sur Ubuntu, KDE Neon dual boot Linux Mint 19.1 et Xubuntu</note> | ||
- | <note warning>Les manipulations qui suivent peuvent vous faire complétement perdre l'accès à votre système. Aussi, pensez à faire une sauvegarde du fichier grub.cfg grâce à cette ligne: | ||
- | <code>sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.old</code> | ||
- | Munissez vous d'un support d'installation de Ubuntu (ou de toute autre distribution permettant d'avoir une session live), et vérifiez bien que vous pouvez démarrer dessus. Une fois en session live, il suffira d'exécuter | ||
- | <code>sudo mv mnt/boot/grub/grub.cfg.old mnt/boot/grub/grub.cfg</code> | ||
- | si la racine de votre système est montée sur mnt. | ||
- | Pour toutes ces raisons, ce tutoriel n'est pas adapté aux débutants en ligne de commande. | ||
- | Il est également possible de modifier directement le grub.cfg pour pouvoir rebooter (mais il faut savoir ce qu'on fait). | ||
- | </note> | ||
- | |||
- | Ce tutoriel explique comment sécuriser le menu Grub de manière avancée. Si protéger l'édition des entrées est déjà un point important, il ne faut pas oublier que n'importe qui peut démarrer un noyau en mode recovery, et obtenir une console root par la suite! Il serait donc avantageux de ne permettre l'accès à un noyau recovery qu'en possession du mot de passe. | ||
- | |||
- | ===== Prérequis ===== | ||
- | |||
- | Avoir sauvegardé les fichiers importants: /boot/grub/grub.cfg, /etc/grub.d/00_security_header, /etc/grub.d/10_linux et /etc/grub.d/30_os_prober (si vous êtes en dual boot) | ||
- | |||
- | Normalement à ce stade vous devriez posséder un fichier 00_security_header ressemblant à celui ci | ||
- | |||
- | <code>#! /bin/sh | ||
- | |||
- | cat <<EOF | ||
- | |||
- | set superusers="toto" | ||
- | |||
- | password_pbkdf2 toto grub.pbkdf2.sha512.10000.891DC34A2C0492FD76FA0E2D01B37F13FB3B3FD5A57D0838C4894D895CFAE206F9A2EA5ED3C1286AF7C44A1BBF4C9D4E2AD4AE4EBD376F4674FC8ACCEF65D92D.49656B11F58E309EC930E7B0CD76F63E67840E65E50F1F23FED0EA9D668291DFB0D10608BEEEC3C9F33AB68895C2EFDD7F7CDEE1CB58FD96CF12B9A507EACCCC | ||
- | set menuentry_id_option="--unrestricted \$menuentry_id_option" | ||
- | EOF | ||
- | </code> | ||
- | |||
- | Le mot de passe n'est pas identique, mais c'est normal. Ce qui compte, c'est que le script fasse son travail. En particulier, que le superusers toto soit créé et fonctionne. | ||
- | |||
- | ===== Modifier le script 00_security_header ===== | ||
- | |||
- | Nous allons maintenant effacer la ligne "EOF" rajouter au script les lignes suivantes: | ||
- | |||
- | <code> | ||
- | set restricted="--users toto" | ||
- | export superusers | ||
- | export menuentry_id_option | ||
- | export restricted | ||
- | EOF | ||
- | </code> | ||
- | |||
- | Nous utilisons une variable pour déterminer les utilisateurs autorisés à faire quelque chose (nous définirons le quelque chose plus tard) Les commandes export permettent de changer la portée des variables afin qu'elles soient valables dans les autres fichiers de configuration de Grub. | ||
- | |||
- | Voilà maintenant à quoi ressemble 00_security_header | ||
- | |||
- | <code>#! /bin/sh | ||
- | |||
- | cat <<EOF | ||
- | |||
- | set superusers="toto" | ||
- | |||
- | password_pbkdf2 toto grub.pbkdf2.sha512.10000.891DC34A2C0492FD76FA0E2D01B37F13FB3B3FD5A57D0838C4894D895CFAE206F9A2EA5ED3C1286AF7C44A1BBF4C9D4E2AD4AE4EBD376F4674FC8ACCEF65D92D.49656B11F58E309EC930E7B0CD76F63E67840E65E50F1F23FED0EA9D668291DFB0D10608BEEEC3C9F33AB68895C2EFDD7F7CDEE1CB58FD96CF12B9A507EACCCC | ||
- | set menuentry_id_option="--unrestricted \$menuentry_id_option" | ||
- | set restricted="--users toto" | ||
- | export superusers | ||
- | export menuentry_id_option | ||
- | export restricted | ||
- | EOF | ||
- | </code> | ||
- | |||
- | ===== Modifier le script 10_linux ===== | ||
- | |||
- | <note important>Attention, c'est une partie dangereuse</note> | ||
- | |||
- | Pour restreindre les parties de Grub que nous voulons, il va falloir "verrouiller" les entrées au niveau du script 10_linux qui les génèrent. | ||
- | |||
- | Avec votre éditeur favori, allez à la ligne 132. Vous voyez normalement cette ligne: | ||
- | |||
- | <code> | ||
- | echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" |sed "s/^/$submenu_indentation/" | ||
- | </code> | ||
- | |||
- | C'est la ligne de tout les noyaux dans le sous menu "Options avancées". Nous allons écrire "\$restricted" afin d'inclure le contenu de la variable restricted dans la ligne d'entrée ci dessus et enlever la variable menuentry_id_option, qui annulerait ce qu'on vient d'écrire. Cela donne: | ||
- | |||
- | <code> | ||
- | echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$restricted 'gnulinux-$version-$type-$boot_device_id' {" |sed "s/^/$submenu_indentation/" | ||
- | </code> | ||
- | |||
- | Faites maintenant: | ||
- | |||
- | <code>sudo update-grub</code> | ||
- | |||
- | Puis redémarrez votre ordinateur afin de vous assurer de la prise en compte correcte des options. Normalement, en allant dans le menu "Options Avancées", il est désormais impossible de démarrer un noyau sans entrer le mot de passe renseigné dans 00_security_header. Néanmoins, depuis le menu principal, il est possible de démarrer le dernier noyau. | ||
- | |||
- | <note warning>Pour sortir du menu sans avoir entré le mot de passe auparavant, il faut saisir le mot de passe!</note> | ||
- | |||
- | ===== En cas de dual-boot avec un autre Système type Debian ===== | ||
- | |||
- | Si vous êtes en dual-boot avec un autre système fonctionnant de la même manière (avec un sous menu "Options Avancées"), les manipulations ci haut sont à faire sur le grub maître (celui qui se lance). De plus, pour limiter les entrées répétitives, je désactive le script "30_os-prober" pour tout les grub non maître. | ||
- | |||
- | <code>sudo chmod -x /etc/grub.d/30_os-prober</code> | ||
- | |||
- | Néanmoins il reste à sécuriser le menu "Options Avancées" de l'autre OS. Il faut le faire depuis le grub maître. | ||
- | |||
- | ==== Modification de 30_os-prober ==== | ||
- | |||
- | Le fichier 30_os-prober génère le menu grub pour les autres systèmes détectés par os-prober. Il suffit de trouver la ligne concernant le menu "Options Avancées" et de faire la même manipulation que précédemment. | ||
- | |||
- | Ligne 292, vous avez: | ||
- | |||
- | <code>echo "submenu '$gettext_printf "Advanced options for %s" "${OS} $onstr" | grub_quote)' \$menuentry_id_option 'osprober-gnulinux-advanced-$boot_device_id' {"</code> | ||
- | |||
- | Il faut remplacer \$menuentry_id_option par \$restricted, ce qui donne: | ||
- | |||
- | <code>echo "submenu '$gettext_printf "Advanced options for %s" "${OS} $onstr" | grub_quote)' \$restricted 'osprober-gnulinux-advanced-$boot_device_id' {"</code> | ||
- | |||
- | Puis | ||
- | |||
- | <code>sudo update-grub</code> | ||