Tous les fichiers de configuration GRUB doivent avoir le mode 0600 ou plus restrictif
Garantit que la configuration GRUB2 sous /boot/grub2 n'est ni lisible ni modifiable par le groupe/les autres et ne porte aucun bit exécutable ou spécial (setuid/setgid/sticky), soit le mode 0600 ou plus strict.
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 configuration GRUB2 sous /boot/grub2 (notamment grub.cfg et user.cfg) contrôle le démarrage du système et peut stocker le hachage du mot de passe du chargeur GRUB. S'il est lisible par le groupe/les autres, ce hachage peut être extrait et cassé hors ligne pour vaincre la protection au démarrage ; s'il est modifiable, un attaquant pourrait injecter des paramètres de noyau (par ex. init=/bin/bash) pour obtenir root au prochain redémarrage. Le mode 0600, appartenant à root, garde les paramètres de démarrage confidentiels et immuables pour les utilisateurs non-root.
Ce que vérifie Pavois
Pavois lit les bits de mode réels de /boot/grub2 via la ressource InSpec file, les permissions appliquées par le noyau, au lieu d'une valeur par défaut de paquet. Un grub.cfg régénéré (après grub2-mkconfig) peut être recréé avec des permissions plus larges, ce que cela détecte. La garde only_if ignore le contrôle sur les systèmes où /boot/grub2 est absent (par ex. agencements UEFI utilisant /boot/efi).
only_if { file('/boot/grub2').exist? }
describe file('/boot/grub2') do
it { should_not be_executable.by('owner') }
it { should_not be_setuid }
it { should_not be_executable.by('group') }
it { should_not be_writable.by('group') }
it { should_not be_readable.by('group') }
it { should_not be_setgid }
it { should_not be_executable.by('other') }
it { should_not be_writable.by('other') }
it { should_not be_readable.by('other') }
it { should_not be_sticky }
endComment vérifier qu’elle est appliquée
Exécutez stat -c '%a %U %G %n' /boot/grub2/grub.cfg /boot/grub2/user.cfg 2>/dev/null. La sortie attendue affiche 600 root root (ou plus strict) pour chaque fichier présent, sans accès groupe/autres.
Inspecter et investiguer
La config GRUB est reconstruite par grub2-mkconfig/grubby ; leurs exécutions apparaissent dans l'historique de paquets/transactions (dnf history) ou les journaux du shell. Les événements d'authentification GRUB au démarrage sont visibles sur la console et, après démarrage, dans journalctl -b. Suivez les changements de permissions via une règle auditd et grep grub2 /var/log/audit/audit.log.
Remédiation
Aucune remédiation automatique n'est définie ; appliquez-la manuellement : chown root:root /boot/grub2/grub.cfg /boot/grub2/user.cfg && chmod 0600 /boot/grub2/grub.cfg /boot/grub2/user.cfg. Si vous régénérez la config avec grub2-mkconfig -o /boot/grub2/grub.cfg, revérifiez le mode ensuite.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| mode | 0600 |
|---|---|
| path | /boot/grub2 |
| resource | file |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Risque en cas de non-application : une config GRUB lisible divulgue le hachage du mot de passe du chargeur ; une config modifiable permet à un attaquant de démarrer dans un shell root. Précautions : appliquer le mode 0600 est sans impact, GRUB lit sa config dans l'environnement de démarrage précoce avant l'application du DAC, et seul root l'édite à l'exécution. Ne placez pas /boot/grub2 sur un système de fichiers monté avec des ACL restrictives bloquant root, et rappelez-vous qu'un mot de passe superutilisateur GRUB doit être associé à --unrestricted sur les entrées de menu normales, sinon chaque démarrage s'arrêtera à l'invite GRUB.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| CIS | 1.4.2 | direct | per OS, see the benchmark table | haute |
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.