Protéger l'édition du GRUB avec un mot de passe

Je dois bien reconnaître que dans la vie de tous les jours et assez régulièrement je charrie sur la sécurité de Windows... mais bon, étant linuxien, on ne m'en tient pas trop rigueur. Et bien aujourd'hui je vais parler d'une "faille" linux que l'on trouve au niveau du logiciel d'amorçage GRUB (GRand Unified Bootloader). Ce n'est pas une faille à proprement parlé, mais plutôt une possibilité de contourner le fonctionnement normal du gestionnaire d'amorçage. Je vais vous présenter le problème et surtout expliquer comment y remédier. Allez hop, c'est parti !

 

La "faille" en question : la possibilité d'éditer le GRUB

La "faille" en question est due à la possibilité d'éditer le GRUB au démarrage de la machine, et ce, sans mot de passe. Il faut cependant avoir accès physiquement à celle-ci. Au démarrage, lorsque le menu apparaît, il suffit de taper 'e' pour l'éditer.

Sécuriser le menu GRUB

 

Ensuite, on identifie la ligne qui commence par "linux /boot/vmlinuz" et on remplace ro (Read Only) par rw (Read Write). Attention au qwerty !! Enfin, il convient de rajouter à la fin de la ligne :

"init=/bin/bash"

Sécuriser le menu GRUB

Sécuriser le menu GRUB

 

Un petit coup de F10 pour enregistrer, et hop, la machine démarre sur... un beau shell en root !!!

Sécuriser le menu GRUB

 

Il est possible de remédier à cette "faille" en définissant un mot de passe pour l'édition du menu. Attention cependant, la solution diffère selon la version du GRUB. Voyons donc d'abord comment identifier cette version.

 

Identifier la version du GRUB

Pour contrôler la version du GRUB, il y a plusieurs solutions. La première consiste à contrôler la version lors du boot. En effet, lorsque le menu apparaît, la version s'affiche en haut de la fenêtre (voir le premier screenshot plus haut). Attention, si vous voyez "GNU GRUB Version 1.98" ou plus, c'est que vous utilisez la version 2 de GRUB. Si vous utilisez GRUB-Legacy, vous verrez affiché "GNU GRUB Version 0.97".

L'autre solution consiste à utiliser dpkg :

dpkg -i | grep grub

Et vous apercevrez alors la version installée :

Sécuriser le menu GRUB

Sécuriser le menu GRUB

 

Je ne donnerai ici que la procédure pour la version 2 de GRUB, la version Legacy n'étant plus beaucoup utilisée.

 

Sécuriser l'édition de GRUB 2 avec un mot de passe

La première chose à faire va être de sauvegarder le fichier de configuration (/etc/grub/grub.cfg). On va en faire une copie au préalable, au cas où...

cp /boot/grub/grub.cfg /boot/grub/old.grub.cfg

 

Ensuite, pour mettre un login et un mot de passe, on va éditer ce fichier grub.cfg pour y ajouter :

#Password

set superusers = "justegeek"

password justegeek justegeek

 

Bon, là c'est bien de mettre un mot de passe, mais un mot de passe en clair... c'est plus que moyen. Alors hop, on va hasher le mot de passe. Pour cela, il faut entrer dans une console :

grub-mkpasswd-pbkdf2

La commande va alors demander de saisir le mot de passe (deux fois), puis va retourner le hash de celui-ci (en SHA1 sur 512bits).

Sécuriser le menu GRUB

 

Ensuite il convient d'éditer le fichier grub.cfg pour y coller le hash de votre mot de passe :

#Password

set superusers = "justegeek"

password_pbkdf2 justegeek grub.pbkdf2.sha512.10000.8A3D270280BD703A08E1AFCAF7EB5EA055069EE96286E2186CE6F6F6726C0EA91342473E1A3A093ED127F2993F86E46253AAE81DD3D1F0664B2E5FDCF9C7C7BE.64C244CF9B2EBCCF08B41211F263A7B2E245050BD072AFBED2E85E9207B794BD6E9E424898D3F4B1BCABDED24EA972581E820E6F196D69FD3547C45D738DB4D6

 

Il ne reste plus qu'à tester. Un petit reboot, et on appuie sur 'e' lorsque l'on est sur le menu boot et hop :

Sécuriser le menu GRUB

 

Conserver le paramétrage en cas de mise à jour

Modifier le fichier de configuration grub.cfg, OK ça fonctionne, mais pour combien de temps ? En effet, en cas de mise à jour du menu, votre paramétrage disparaîtra. Pour que la modification perdure après les mises à jour, il faut d'éditer le fichier /etc/grub.d/00_header pour y ajouter :

cat << EOF

#Password

set superusers = "justegeek"

password_pbkdf2 justegeek grub.pbkdf2.sha512.10000.8A3D270280BD703A08E1AFCAF7EB5EA055069EE96286E2186CE6F6F6726C0EA91342473E1A3A093ED127F2993F86E46253AAE81DD3D1F0664B2E5FDCF9C7C7BE.64C244CF9B2EBCCF08B41211F263A7B2E245050BD072AFBED2E85E9207B794BD6E9E424898D3F4B1BCABDED24EA972581E820E6F196D69FD3547C45D738DB4D6

EOF

Suite à cela, un petit update et ça roule ! 

update-grub

 

Vous retrouverez maintenant votre mot de passe lors des mises à jour du gestionnaire d'amorçage. Je vous recommande vraiment de faire cela, notamment si vous l'utiliser sur un PC Portable.

On dit merci JusteGeek !!! 🙂

 

Sandstorm

Ingénieur Systèmes passionné d'informatique et de High-Tech, Sandstorm a créé JusteGeek.fr en 2013. Il aime les geekeries en tout genre. "Si un produit s'allume c'est un bon point. S'il est connecté, c'est encore mieux !"

Vous aimerez aussi...

13 réponses

  1. Damien dit :

    Bonjour,

    pour sauvegarder la conf de Grub vous indiquez:

    cp /boot/grub/grub.cfg /boot/grub/old.grub.cfg

    Mais pour la restaurer au cas où, quelle est la commande svp ?

    Merci

  2. Sandstorm dit :

    Salut Damien,
    pour rétablir l'ancienne configuration, tu peux entrer la commande inverse :
    cp /boot/grub/old.grub.cfg /boot/grub/grub.cfg
    ++

  3. Julien dit :

    bonjour,
    cela exige également le mot de passe pour lancer la machine.
    N'y a-t-il pas un moyen de ne sécuriser que l'édition de grub ?
    Cdt
    Julien

    • Julien dit :

      je viens de trouver la réponse :
      sur chaque ligne du menu de chargement :
      menuentry '...' ... {

      il faut compléter ainsi :
      menuentry '...' ... --unrestricted {

      reste à voir comment le mettre en place en cas de mise à jour ...
      Je cherche !

  4. Julien dit :

    Je viens de trouver la solution :
    Dans le fichier /etc/grub.d/00_header
    ------------------------------------------------------------------
    cat << EOF
    #Password
    set superusers = "justegeek"
    password_pbkdf2 justegeek grub.pbkdf2.sha512.10000.8A3D270280BD703A08E1AFCAF7EB5EA055069EE96286E2186CE6F6F6726C0EA91342473E1A3A093ED127F2993F86E46253AAE81DD3D1F0664B2E5FDCF9C7C7BE.64C244CF9B2EBCCF08B41211F263A7B2E245050BD072AFBED2E85E9207B794BD6E9E424898D3F4B1BCABDED24EA972581E820E6F196D69FD3547C45D738DB4D6
    set menuentry_id_option="--unrestricted $menuentry_id_option"
    EOF
    -----------------------------------------------

    J'ajouter également qu'il ne faut (suite à des tests) pas d'espaces autour du = dans les lignes de commande ici !
    Maintenant, un mot de passe est défini pour l'édition de grub, mais pas pour son utilisation !

  5. Louis dit :

    Bonjour, je viens de suivre ce tuto à la lettre mais la j'ai un petit problème. Au démarrage, grub me demande le nom d'utilisateur et le mdp. Mais quand je rentres les deux, il revient sur le menu. Peut être vous pourrez m'aider. Merci d'avance.

  6. Louis dit :

    Bon, finalement j'ai résolu mon problème en démarrant sur un live-usb et en modifiant directement le fichier grub.cfg. Je l'ai remplacé par la sauvegarde. Cela dit en suivant le tuto je ne crois pas m'être trompé dans ce que j'ai fait du coup jcomprends pas. Jvais réessayer en tout cas.

  7. meubeukeu dit :

    Merci pour ce tuto qui donne une bonne base, il manque juste l'export des variables :
    La solution complète qui fonctionne même dans les submenus est la suivante

    cat << EOF
    #Password
    set superusers="justegeek"
    password_pbkdf2 justegeek grub.pbkdf2.sha512.10000.8A3D270280BD703A08E1AFCAF7EB5EA055069EE96286E2186CE6F6F6726C0EA91342473E1A3A093ED127F2993F86E46253AAE81DD3D1F0664B2E5FDCF9C7C7BE.64C244CF9B2EBCCF08B41211F263A7B2E245050BD072AFBED2E85E9207B794BD6E9E424898D3F4B1BCABDED24EA972581E820E6F196D69FD3547C45D738DB4D6
    export superusers
    set menuentry_id_option="--unrestricted $menuentry_id_option"
    export menuentry_id_option
    EOF

    et le mieux pour ne pas se faire écraser la modif lors d'une mise à jour est de placer tout cela dans un fichier /etc/grub.d/01_pass

  8. Zer00CooL dit :

    Salut meubeukeu, pourrait tu commenter le bas de ton code, que fait
    export superusers
    set menuentry_id_option="--unrestricted $menuentry_id_option"
    export menuentry_id_option

    Sinon, mon clavier est en qwerty au démarrage du Grub, comment faire pour avoir un clavier fr, pour saisir le mot de passe normalement, sans avoir à jongler avec le qwerty ?

  9. ZenLinux dit :

    Merci du tuto mais RIP à tout le temps que ce tuto a fait perdre depuis l'évolution des systèmes Unix, sans compter toutes les machines cassées parce que ce tuto n'indique pas le bon fichier à modifier.

    Il faudrait penser à une MAJ, je demande un remboursement de mon temps !!
    Les seules fois où je me dis vasy je laisse une chance à un tuto fr je me fais bz, voici pourquoi on est toujours en retard technologiquement

  10. Sécherre dit :

    Bonjour,
    Petite erreur en début du tuto pour connaître sa version de grub. L'option de dpkg n'est pas "-i" (comme irène) mais "-l" (comme Laurent).
    dpkg -l | grep grub.
    Sylvain

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.