# Grub2 , protection par mots de passe

**URL:** <https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689>\
**Category:** Trucs et Astuces\
**Created:** [Mars 15, 2016, 9:09 UTC](https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689 "2016-03-15T21:09:24Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![hulk](https://www.debian-fr.org/user_avatar/www.debian-fr.org/hulk/32/3868_2.png) [@hulk](https://www.debian-fr.org/u/hulk)\
**Post date:** [Mars 15, 2016, 9:09 UTC](https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689/1 "2016-03-15T21:09:25Z")

</div>

Pour ceux qui comme moi ce sont cassée les dents (ou plutôt couper l’accès ) dessus ce problème, car grub2  
fonctionne avec une keymap us , donc pas de éèà… , que bien sur pas malchance on en a insérais dans sont mots de passe, du cou boot sur live pour modifier /boot/grub/grub.cfg.

j’ai donc fait un script qui facilite la mise en place du compte superuser de grub2 , et nous évite ces petit tracas.

malheureusement, grub2 ne gère les mots de passes que aux premier niveaux de l’arborescence du menu.  
ce qui implique que l’ajout de --unrestricted a un submenu et récursif !!  
il et donc plus judicieux de demander le mot de passe pour tous les sous menus.

Ont limitent , les menus de “setup uefi” , “recovery mode” ,“c”,“e” ainsi que tous les submenu.  
mais aucun mot de passe n’est demandé pour lancer windows ou le dernier noyaux debian.  
A la mise a jour grub2 la conf devrait rester , mais je n’est pas encore testé.  
bien sur le script et a lancer en root.

**[passwordgrub2.sh](http://passwordgrub2.sh)**

```auto
#!/bin/sh
PTNlogin='^[a-zA-Z]*$'
##Passage en keymap us pour le password comme sa quelque soit votre clavier le mot de passe correspond bien ##au touche frappée.ce qui, ce qui évite de ce prendre la tête pour le clavier avec le mot de passe grub.
#apt-get install console-data
layout1="$(cat < /etc/default/keyboard | grep "XKBLAYOUT" | awk -F "\"" '{print $2}' | awk -F "," '{print $1}')"
setxkbmap us
loadkeys us
clear
gettext 'keymap is in qwerty us in grub menu.
    - Only letters or numbers.
    - 4 characters minimum.
Enter login to the superuser of grub2 :'
while (true); do
    read logingrub
    if ["$(expr "$logingrub" : "$PTNlogin")" -gt 4];then 
        break
    else
        clear
gettext 'keymap is in qwerty us in grub menu.
    - Only letters or numbers.
    - 4 characters minimum.
Enter login to the superuser of grub2 :'
    fi    
done
echo > /tmp/passgrub
while ["$(awk '{print $NF}' /tmp/passgrub | grep -c grub.)" -eq 0];do
grub-mkpasswd-pbkdf2 | tee /tmp/passgrub
done    
passwordgrub=$(awk '{print $NF}' /tmp/passgrub | grep grub.)
##on rebascule sur la keymap system
setxkbmap "$layout1"
loadkeys "$layout1"
vide=""
cat << EOF > /etc/grub.d/99_password
#!/bin/sh
## ce script doit être lancé en dernier !!!
## on restreint uniquement les menus de "setup uefi" , " recovery mode "
## ainsi que tous les submenu.
## seul les menuentry et submenu de premier niveaux prennent en compte les paramètres d’accès utilisateurs.
## ce qui implique que l'ajout de --unrestricted a un submenu et récursif !!
cat << ${vide}EOF
set superusers="$logingrub"
password_pbkdf2 $logingrub $passwordgrub
${vide}EOF
confunrestricted() {
        ## fonction lancer en tache de fond par la commande
        ## confunrestricted &
        ## elle attend la fin de l’exécution de tous les scripts update grub 
        ## puis modifie le fichier /boot/grub/grub.cfg pour y ajouter le droits a touts le monde
        cd /etc/grub.d/
        for file in *
        do
        if ["\$(echo "\$file" | grep -E -c "[0-9][0-9]_")" -eq 1 ];then
            if [-z "\$processupdategrub"] ; then
                processupdategrub=\$file
            else
                processupdategrub=\$processupdategrub","\$file
            fi
        fi
        done
        while ["\$(ps -C "\$processupdategrub" -o pid= | wc -l)" -gt 2]
        do
            sleep 0.2
        done
        cp /boot/grub/grub.cfg /tmp/grub.cfg.new
        while read linecfg 
        do
            if ["\$(echo "\$linecfg" | grep -E "menuentry " | grep -v "uefi-firmware" | grep -c -v "recovery mode" )" -eq 1];then
                line2=\$(echo "\$linecfg" | sed -e 's/ {/ --unrestricted { /g')
                sed -i "s|\$linecfg|\$line2|" /boot/grub/grub.cfg
            fi
        done < /tmp/grub.cfg.new
        rm /tmp/grub.cfg.new
    }
confunrestricted &
EOF
chmod 755 /etc/grub.d/99_password
update-grub2

```

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Mars 16, 2016, 1:27 UTC](https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689/2 "2016-03-16T01:27:51Z")

</div>

Merci !

Sinon, hormis tes erreurs d’orthographe - _essaye de te relire, avant de poster ou d’utiliser le correcteur embarqué à ton navigateur web_ -, pourquoi ne pas faire un script qui ne fasse appel qu’au shell - et non pas au Bash.  
Je suis d’avis, que ce n’est pas plus compliqué - l’avantage est qu’il sera aisément utilisable - surtout pour un petit script aussi sympa, dans le fond.

---

<div class="post-metadata">

**Author:** ![hulk](https://www.debian-fr.org/user_avatar/www.debian-fr.org/hulk/32/3868_2.png) [@hulk](https://www.debian-fr.org/u/hulk)\
**Post date:** [Mars 16, 2016, 6:09 UTC](https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689/3 "2016-03-16T18:09:16Z")

</div>

j’ai corrigé quelque fautes et basculé le script en /bin/sh

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Mars 16, 2016, 6:28 UTC](https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689/4 "2016-03-16T18:28:12Z")

</div>

Passes ton code à la moulinette [shellcheck.net](http://www.shellcheck.net/) ; d’autant que sur Debian, tu as normalement le paquet existant … Ne prends pas peur, c’est normal 😉

[https://packages.debian.org/search?keywords=shellcheck](https://packages.debian.org/search?keywords=shellcheck)

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Mars 16, 2016, 7:48 UTC](https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689/5 "2016-03-16T19:48:08Z")

</div>

Cool ce petit tutorial mais il faut essayer d’améliorer la rédaction un peu! Merci

---

<div class="post-metadata">

**Author:** ![hulk](https://www.debian-fr.org/user_avatar/www.debian-fr.org/hulk/32/3868_2.png) [@hulk](https://www.debian-fr.org/u/hulk)\
**Post date:** [Mars 16, 2016, 9:57 UTC](https://www.debian-fr.org/t/grub2-protection-par-mots-de-passe/68689/6 "2016-03-16T21:57:14Z")

</div>

j’ai corrigée le script en fonction de shellcheck merci pour l’information je connaissait pas l’outil .  
plus d’erreur dans

```auto

```

```auto

```
