Vérifier les permissions de /boot/grub2/grub.cfg
Garantit que /boot/grub2/grub.cfg n'est lisible et modifiable que par root, protégeant les paramètres de démarrage et tout hash de mot de passe GRUB contre la divulgation ou l'altération.
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
/boot/grub2/grub.cfg définit les paramètres de démarrage du système : ligne de commande du noyau, entrées de boot et, si configuré, le hash du mot de passe superutilisateur GRUB. Si un utilisateur non privilégié peut le lire, le hash du mot de passe GRUB peut être exposé à un cassage hors-ligne ; s'il peut l'écrire, il peut injecter des arguments de boot du noyau (par ex. init=/bin/bash ou selinux=0) pour contourner les contrôles de sécurité au démarrage. Le restreindre pour que seul root puisse le lire et l'écrire (aucune lecture/écriture/exécution pour le groupe ou les autres) garantit que seul l'administrateur contrôle les paramètres de démarrage.
Ce que vérifie Pavois
Pavois lit le mode effectif de l'inode de /boot/grub2/grub.cfg et vérifie l'absence de lecture/écriture/exécution pour le groupe ou les autres et l'absence de bits setuid/setgid/sticky. Protégé par only_if { file('/boot/grub2/grub.cfg').exist? } (ce chemin correspond à la disposition RHEL/Fedora ; les systèmes Debian/Ubuntu BIOS utilisent /boot/grub/grub.cfg, les systèmes EFI /boot/efi/EFI/<distro>/grub.cfg). Vérifier le fichier réel plutôt que les modèles du générateur garantit que la configuration de bootloader réellement déployée est protégée.
only_if { file('/boot/grub/grub.cfg').exist? }
describe file('/boot/grub/grub.cfg') 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' /boot/grub2/grub.cfg. La sortie attendue est 600 root root (ou 700 sur certaines dispositions EFI) : aucun bit de lecture, d'écriture ou d'exécution pour le groupe ou les autres.
Inspecter et investiguer
stat /boot/grub2/grub.cfg affiche le mode courant. Les modifications apparaissent dans /var/log/audit/audit.log si une surveillance est posée (cherchez name="/boot/grub2/grub.cfg"). Notez que grub2-mkconfig régénère le fichier et peut réinitialiser son mode, re-vérifiez donc après les mises à jour de noyau.
Remédiation
Aucun plan de durcissement automatisé n'est défini pour cette règle, appliquez-la donc manuellement : chown root:root /boot/grub2/grub.cfg puis chmod 0600 /boot/grub2/grub.cfg. Sur les systèmes EFI, ajustez le chemin en conséquence.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| mode | 0600 |
|---|---|
| path | /boot/grub/grub.cfg |
| resource | file |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Un grub.cfg lisible expose le hash du mot de passe GRUB à un cassage hors-ligne ; un fichier modifiable permet à un attaquant disposant d'un accès local d'altérer la ligne de commande du noyau pour contourner l'authentification au boot (init=/bin/bash) ou désactiver les LSM. Précautions : le resserrement à 0600 root:root est sûr et correspond au défaut de la distribution ; ne changez pas le propriétaire root, et rappelez-vous que lancer grub2-mkconfig/update-grub après une mise à jour de noyau peut régénérer le fichier et réinitialiser ses permissions, réappliquez si nécessaire.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R29 | direct | 2.0 | haute |
| CIS | 1.4.2, 2.2.6 | direct | per OS, see the benchmark table | haute |
| NIST | 3.4.5, AC-6(1), CM-6(a) | support | 800-53 Rev 5 · 800-171 Rev 2 (pinned) | moyenne |
| PCI DSS | 2.2.6 | support | 4.0.1 | 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.