web-dev-qa-db-fra.com

Comment configurer facilement le mot de passe GRUB2?

J'ai besoin de configurer le mot de passe pour GRUB2 sur Ubuntu 14.04 LTS AMD64. La configuration que je tente d’atteindre est d’avoir les options [e] dit et [c] onsole protégées par mot de passe, mais le démarrage des entrées du système d’exploitation (Ubuntu, Windows) non protégées.

J'ai étudié Grub2/Passwords (il est obsolète, assez chaotique et difficilement lisible en passant) et il semble que j'ai besoin de configurer le mot de passe superutilisateur et d'ajouter l'option --unrestricted aux entrées de menu. . OK, mais à quel endroit dois-je ajouter cette option --unrestricted?

Si dans /boot/grub/grub.cfg alors ce n’est pas l’idée la plus intelligente, car ce fichier est écrasé à chaque fois que grub-update est exécuté. Donc, ce n’est pas une option pour moi, car, supposons que, j’aime changer GRUB l’image d’arrière-plan deux fois par semaine. De plus, la lisibilité /boot/grub/grub.cfg est loin d'être parfaite; il n’est toujours pas évident de placer l’option --unrestricted.

Si dans les fichiers d’entrée de menu du/etc/grub.d/*, il est encore pire que de modifier /boot/grub/grub.cfg. Les conditions de lisibilité de ces fichiers sont plutôt gênantes, ce qui rend leur édition d'autant plus difficile.

Existe-t-il une méthode simple et propre pour définir le mot de passe GRUB2 comme je l'ai décrit? Peut-être une documentation brillante autre que celle que j'ai liée dans ce post?

3
user280493

Selon la section sur la protection des entrées :

Il n'existe actuellement aucune méthode automatisée permettant d'ajouter des utilisateurs ou de désigner des éléments de menu à protéger. L'utilisateur doit éditer manuellement les scripts GRUB 2. Le menu GRUB 2 est une compilation des entrées de plusieurs scripts. Le fichier /etc/grub.d/10_linux permet d'ajouter le système d'exploitation Ubuntu par défaut au menu GRUB 2. [...] La majorité de ces sections sont consacrées à l'édition des scripts par défaut situés dans le dossier /etc/grub.d/.

Et dans la section suivante :

Le menu GRUB 2 inclut des sélections pour les systèmes d'exploitation autres que le système d'exploitation Ubuntu par défaut via le script /etc/grub.d/30_os-prober. [...] Cela inclurait d'autres installations Ubuntu et Linux, Windows, etc.

Le script 30_os-prober recherche des types spécifiques de systèmes d'exploitation. L'utilisateur peut effectuer les modifications pour tous les systèmes d'exploitation via une seule commande ou individuellement par type de système d'exploitation, comme indiqué ci-dessous.

Donc, il semble que vous deviez éditer les fichiers dans /etc/grub.d/. Au moins pour ajouter un superutilisateur, vous n'avez pas besoin de modifier l'un de ces fichiers, mais vous pouvez créer un nouveau fichier :

Les informations de superutilisateur/utilisateur et le mot de passe ne doivent pas nécessairement être contenus dans le fichier /etc/grub.d/00_header. Les informations peuvent être placées dans n’importe quel fichier /etc/grub.d tant que ce fichier est incorporé dans grub.cfg. L'utilisateur peut préférer entrer ces données dans un fichier personnalisé, tel que /etc/grub.d/40_custom, afin qu'elles ne soient pas écrasées au cas où le package Grub serait mis à jour. Si vous placez les informations dans un fichier personnalisé, n'incluez pas les lignes "cat << EOF" et "EOF" car le contenu est automatiquement ajouté à partir de ces fichiers.

Ces paragraphes restent pertinents jusqu’à ce que la documentation officielle GRUB indique autrement:

Le programme grub-mkconfig ne prend pas encore en charge la génération de fichiers de configuration avec authentification.

(Quoi que ce soit censé vouloir dire.)


Jusqu'à Ubuntu 12.04

Voici les instructions obsolètes pour la protection des entrées de menu:

Dans /etc/grub.d/10_linux, recherchez la ligne suivante:

printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

Ajouter --users '':

printf "menuentry '${title}' ${CLASS} --users '' {\n" "${os}" "${version}"

Pour toutes les entrées dans 30_os-prober:

Sudo sed 's/--class os /--class os --users /' -i /etc/grub.d/30_os-prober

paquets Ubunt ne répertorie pas Ubuntu 12.10, donc je ne suis pas sûr si 12.10 utilise l'ancienne méthode ou la nouvelle.

Ubuntu 13.04 et plus tard

Maintenant, le fichier 10_linux utilise echo au lieu de printf:

echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

Et le fichier 30_os-prober utilise cat et heredocs:

# The minix entry
cat << EOF
menuentry "${LONGNAME} (on ${DEVICE}, Multiboot)" {
EOF
# The hurd entry
cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' {
EOF

Ainsi, vous pouvez coller la partie --user "" quelque part avant la fin de l'entrée de menu (avant que l'accolade ne s'ouvre).

N'oubliez pas de sauvegarder tous les fichiers que vous modifiez et d'exécuter update-grub après modification.

3
muru

Configurez superusers. Pour ce faire, par exemple, ajoutez les lignes suivantes à /etc/grub.d/00_header:

# Support user protection on entries
cat << EOF
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.8E51188BE7DF732DDF102C918DEC152087558E04DA843B4A74C3EA8374BAB1ECA493399D62E3F2779F55C5BE2E8B65B8636113A99C09BFB892DB64626337904C.3016474FE6B420DBE6371B41D9BE8471B135CDF4BE674AC1265D3BA123CD9E459E960AEC199AB8C7C1C1A6BAF45314C64591E85E404AB54F4777E032A50CC731
EOF

Mettez à jour le mot de passe crypté à l'aide du résultat de la commande grub-mkpasswd-pbkdf2. Dans notre exemple, vous devez modifier les informations suivantes:

grub.pbkdf2.sha512.10000.8E51188BE7DF732DDF102C918DEC152087558E04DA843B4A74C3EA8374BAB1ECA493399D62E3F2779F55C5BE2E8B65B8636113A99C09BFB892DB64626337904C.3016474FE6B420DBE6371B41D9BE8471B135CDF4BE674AC1265D3BA123CD9E459E960AEC199AB8C7C1C1A6BAF45314C64591E85E404AB54F4777E032A50CC731

Editez le fichier /etc/grub.d/10_linux et cherchez la ligne 129 (dans Ubuntu 14.04 LTS). Dans sa forme originale, il devrait ressembler à ceci:

echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id'     {" | sed "s/^/$submenu_indentation/"

Ici, ajoutez l’option --unrestricted après la variable CLASS pour compléter la ligne de configuration:

echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

Reconstruisez /boot/grub/grub.cfg. Pour ce faire, vous exécutez la commande Sudo update-grub.

Redémarrez le système et essayez.

Maintenant, vous devriez avoir une configuration où:

  • L'entrée principale du système d'exploitation Ubuntu démarrera normalement, mais personne, à l'exception de la variable superusers, ne pourra modifier l'entrée associée dans la liste.

  • Seul le superusers pourra démarrer et éditer toutes les autres entrées de la liste.


Voir également:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-GRUB_2_Password_Protection.html

0