Définir un mot de passe pour le chargeur d'amorçage grub2
Protège le chargeur d'amorçage grub2 par un superutilisateur et un mot de passe PBKDF2 afin que les paramètres de démarrage ne puissent pas être modifiés à la console sans authentification.
Vérifié sur le contenu d’un fichier de configuration persistant, la source de vérité qui survit aux redémarrages.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
La protection par mot de passe du chargeur d'amorçage empêche un attaquant disposant d'un accès physique ou console de modifier trivialement des réglages critiques du bootloader. Sans elle, n'importe qui à la console peut éditer la ligne de commande du noyau, démarrer en mode mono-utilisateur ou passer init=/bin/bash, obtenant ainsi un shell root non authentifié et contournant tous les contrôles du système d'exploitation.
Ce que vérifie Pavois
Pavois recherche dans le grub.cfg généré (et /etc/grub.d/) une directive set superusers ainsi qu'un password_pbkdf2/password. Il inspecte la configuration effective générée pour les agencements BIOS (/boot/grub, /boot/grub2) et EFI (/boot/efi/EFI/*/grub.cfg), détectant ainsi un mot de passe réellement présent après régénération par grub-mkconfig/grub2-mkconfig, et pas seulement un fragment de modèle.
describe command('grep -rqsE \'^[[:space:]]*(set[[:space:]]+superusers|password_pbkdf2|password)\' /boot/grub/grub.cfg /boot/grub2/grub.cfg /boot/efi/EFI/*/grub.cfg /etc/grub.d/ 2>/dev/null && echo ok || echo ko') do
its('stdout.strip') { should eq 'ok' }
endComment vérifier qu’elle est appliquée
Exécutez grep -E '^(set superusers|password_pbkdf2|password)' /boot/grub/grub.cfg /boot/grub2/grub.cfg (adaptez le chemin à votre agencement). Attendu : au moins une ligne set superusers="..." et une ligne password_pbkdf2 <user> grub.pbkdf2.sha512....
Inspecter et investiguer
Il n'existe pas de journal d'exécution pour ce contrôle ; la preuve est la configuration générée. Vérifiez avec grep -E 'superusers|password_pbkdf2' /boot/grub2/grub.cfg et examinez la source dans /etc/grub.d/ et /etc/grub.d/40_custom. La régénération est déclenchée par grub2-mkconfig / update-grub.
Remédiation
pavois harden apply exécute la ressource grub_password : elle définit un superutilisateur grub, hache le mot de passe fourni en PBKDF2, l'écrit dans le snippet grub.d et régénère la configuration de démarrage. Le changement est reboot_required: true. Important : Pavois ajoute --unrestricted aux entrées de démarrage standard afin que le mot de passe ne soit exigé que pour éditer les entrées ou atteindre le shell grub, et non à chaque démarrage normal.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| command_apt | H=$(printf "%s\n%s\n" "$(cat %{pwfile})" "$(cat %{pwfile})" | grub-mkpasswd-pbkdf2 2>/dev/null | grep -oE "grub\.pbkdf2\.[^ ]+"); [ -n "$H" ] && { printf "%s\n" "$H" > /etc/grub.d/.pavois-grub-hash; chmod 0600 /etc/grub.d/.pavois-grub-hash; grep -q -- "--unrestricted" /etc/grub.d/10_linux || sed -ri "/^CLASS=/ s/\"$/ --unrestricted\"/" /etc/grub.d/10_linux; sed -ri "/^GRUB_DISABLE_SUBMENU=/d" /etc/default/grub; echo "GRUB_DISABLE_SUBMENU=y" >> /etc/default/grub; /usr/sbin/update-grub; } |
|---|---|
| command_rhel | H=$(printf "%s\n%s\n" "$(cat %{pwfile})" "$(cat %{pwfile})" | grub2-mkpasswd-pbkdf2 2>/dev/null | grep -oE "grub\.pbkdf2\.[^ ]+"); [ -n "$H" ] && { echo "GRUB2_PASSWORD=$H" > /boot/grub2/user.cfg; chmod 0600 /boot/grub2/user.cfg; } |
| reboot_required | true |
| resource | grub_password |
| superuser | root |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Mal configuré, c'est un vecteur de compromission complet par accès physique : un attaquant à la console démarre en root, lit ou réécrit le disque et exfiltre des secrets. Précautions avant application : un mot de passe superutilisateur grub sans --unrestricted bloque chaque démarrage et fige une machine sans écran à l'invite grub, assurez-vous que --unrestricted est posé sur les entrées normales (Pavois le fait). Conservez le mot de passe en clair dans votre gestionnaire de mots de passe ; s'il est perdu, vous devrez démarrer sur un support de secours pour le réinitialiser.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R5 | direct | 2.0 | haute |
| CIS | 1.4.1 | direct | per OS, see the benchmark table | haute |
| NIST | 3.4.5, CM-6(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.