Mot de passe root oublié : le menu GRUB rouvre /etc/shadow en six étapes

Un mot de passe root oublié se réécrit depuis le menu GRUB, sans session ouverte et sans réinstallation. La ligne de commande du noyau accepte init=/bin/bash à la place de l’init habituel, ce qui ouvre un shell root sans authentification, et /etc/shadow se modifie depuis là avec passwd. La documentation communautaire Ubuntu prévient que le système de fichiers y est monté en lecture seule, et les autres pannes d’amorçage se réparent depuis la rubrique Linux.
Sommaire
- Le menu GRUB s’affiche 5 secondes, Maj ou Échap le rappelle quand il est masqué
- Six étapes remplacent l’init du noyau et rouvrent /etc/shadow
- Une racine laissée en lecture seule fait échouer passwd
- L’entrée recovery réclame le mot de passe que vous venez de perdre
- Trois voies selon le clavier, le menu et le disque de la machine
- Le choix de la méthode dépend du clavier, du disque et du compte sudo
- Sources
Le menu GRUB s’affiche 5 secondes, Maj ou Échap le rappelle quand il est masqué
Le menu GRUB s’affiche pendant 5 secondes par défaut, valeur que le manuel GRUB 2.14 du projet GNU donne pour GRUB_TIMEOUT, et toute touche enfoncée interrompt ce décompte. Quand GRUB_TIMEOUT_STYLE vaut countdown ou hidden, le délai s’écoule avant l’affichage de la liste, et le même manuel indique que la touche Échap ou F4, ou la touche Maj maintenue, fait apparaître le menu. Deux valeurs particulières changent ce comportement : 0 démarre immédiatement sans rien afficher, -1 attend indéfiniment. GRUB_DEFAULT vaut 0 par défaut, et le manuel accepte un index compté à partir de zéro comme le titre d’une entrée. L’absence de GRUB_TIMEOUT_STYLE équivaut à menu : la liste s’affiche, puis le décompte court. La documentation communautaire Ubuntu rattache la touche à la version du système, Maj depuis Ubuntu 9.10 karmic et Échap jusqu’à Ubuntu 9.04 jaunty. Le fichier /etc/default/grub porte ces réglages, que grub-mkconfig traduit en entrées de démarrage.
Ces réglages s’écrivent en permanence dans /etc/default/grub, que grub-mkconfig relit pour régénérer les entrées ; régler ce délai d’affichage détaille la manœuvre. Une édition faite au clavier pendant l’amorçage ne touche pas ce fichier, elle ne vit que le temps d’une session GRUB.
Six étapes remplacent l’init du noyau et rouvrent /etc/shadow
Six gestes suffisent, dans cet ordre : ouvrir le menu, éditer l’entrée, ajouter init=/bin/bash, démarrer, remonter la racine en écriture et changer le mot de passe, redémarrer. Chaque étape se contrôle à l’écran. La page passwd(1) publiée pour Debian 12, shadow-utils 4.13, datée du 23 mars 2023, rappelle la règle qui rend l’opération possible : « The superuser is permitted to bypass this step so that forgotten passwords may be changed. » Un compte sudo fonctionnel rend ce détour inutile, le wiki Arch notant que sudo passwd root suffit alors à changer le mot de passe root sans redémarrer. Le paramètre init=/bin/bash ne remplace que le dernier maillon de l’amorçage, celui que le chargeur transmet au noyau. L’édition au clavier reste locale à la session GRUB, la configuration enregistrée n’est pas réécrite.
-
Redémarrer la machine et maintenir la touche Maj pendant l’amorçage, ou appuyer sur Échap quand le menu ne s’affiche pas.
Ce que vous devez voir : la liste des noyaux installés, l’entrée normale en tête.
-
Sélectionner l’entrée normale avec les flèches du clavier, puis appuyer sur la touche e.
Ce que vous devez voir : un écran d’édition en texte brut, qui reprend les lignes de l’entrée, dont celle qui commence par linux.
-
Descendre jusqu’à cette ligne linux et ajouter, à sa fin, le paramètre init=/bin/bash.
Ce que vous devez voir : la ligne se termine désormais par init=/bin/bash, après les paramètres root= et quiet déjà présents.
-
Démarrer l’entrée modifiée par Ctrl+X.
Ce que vous devez voir : les messages du noyau, puis une invite root sans login ni mot de passe, ce que la documentation Ubuntu appelle un passwordless root shell.
-
Remonter la racine en écriture, puis changer le mot de passe.
mount -n -o remount,rw / passwd rootCe que vous devez voir : aucune sortie de mount, les deux saisies du nouveau mot de passe, puis la ligne passwd: password updated successfully écrite par shadow-utils 4.13. La page Ubuntu écrit la même remontée sous la forme mount -rw -o remount /.
-
Redémarrer la machine.
reboot -fCe que vous devez voir : le retour du menu GRUB puis l’invite de connexion, avec le nouveau mot de passe actif. Le wiki Arch termine par reboot -f, la page Ubuntu par reboot.
Une racine laissée en lecture seule fait échouer passwd
Le premier essai échoue souvent sur deux lignes concises, et la cause tient au montage de la racine. Le noyau monte le système de fichiers racine en lecture seule quand la ligne de commande du noyau ne porte pas rw, ce que la documentation Ubuntu signale pour toutes les versions prises en charge et ce que le wiki Arch traduit par un remontage obligatoire avant passwd. Le projet Linux-PAM fournit la chaîne anglaise associée au code PAM_AUTHTOK_ERR, et le dépôt shadow-utils 4.13 écrit cette réponse puis la ligne suivante sur tout échec PAM. Le remède tient en une commande de remontage lancée avant passwd, jamais après. Réessayer le mot de passe ne change rien, la saisie n’ayant jamais atteint le fichier /etc/shadow, que la page passwd(1) range dans ses fichiers.
passwd: Authentication token manipulation error passwd: password unchanged
La page passwd(1) livrée avec Debian 12 s’arrête aux codes de retour 0 à 6, alors que le chemin PAM du dépôt shadow-utils termine sur exit (10) après ces deux lignes. Un echo $? qui répond 10 confirme l’échec côté PAM et n’accuse pas le mot de passe saisi.
L’entrée recovery réclame le mot de passe que vous venez de perdre
L’entrée recovery du menu GRUB réclame le mot de passe perdu, et le manuel GRUB 2.14 du projet GNU explique pourquoi par une valeur par défaut : GRUB_CMDLINE_LINUX_RECOVERY vaut single, le mode mono-utilisateur. La documentation communautaire Ubuntu cite le prompt qui suit, et Control-D y poursuit le démarrage sans ouvrir de session, comme l’annonce le prompt lui-même. Le manuel précise que ces paramètres de l’entrée recovery sont placés avant ceux de GRUB_CMDLINE_LINUX. Deux réglages du même manuel agissent sur ces entrées, GRUB_DISABLE_RECOVERY passé à true supprime leur génération, et GRUB_CMDLINE_LINUX_RECOVERY modifie les paramètres ajoutés au noyau pour ce mode. L’entrée normale, éditée à la main, évite ce prompt et démarre le noyau sans passer par la demande d’authentification. Le paramètre single reste présent dans les entrées générées tant que le fichier /etc/default/grub n’est pas modifié.
Give root password for maintenance (or type Control-D to continue):
Trois voies selon le clavier, le menu et le disque de la machine
Trois voies mènent au même fichier /etc/shadow, et le choix dépend de ce qui répond encore : la ligne linux éditée au clavier, le paramètre de noyau systemd.debug_shell, ou une clé USB live suivie de passwd –root. Le wiki Arch décrit les trois avec leurs contraintes propres. La première demande de pouvoir éditer le menu GRUB, la deuxième ouvre un shell root sur le neuvième terminal virtuel sans quitter le démarrage normal, la troisième exige une clé amorçable de même architecture que le système installé. La clé démarre un système complet, qui écrit dans le /etc/shadow du système installé monté sous /mnt. Chaque voie se distingue par le nombre de redémarrages et la présence d’un support externe. Aucune connexion réseau n’intervient, la fenêtre d’action se situe avant le démarrage des services.
| Méthode | Mot de passe root demandé | Remontage de / nécessaire | Redémarrages | Support externe |
|---|---|---|---|---|
| init=/bin/bash sur la ligne linux | non | oui | 1 | aucun |
| systemd.debug_shell en paramètre du noyau | non | non | 1 | aucun |
| Clé USB live puis passwd –root | non | non | 2 | une clé amorçable |
Certains claviers ne sont pas initialisés avec cette méthode, signale le wiki Arch, et rien ne s’écrit alors à l’invite bash ; l’article renvoie vers une autre méthode.
Le paramètre systemd.debug_shell démarre debug-shell.service pendant un démarrage normal et ouvre un shell root sur tty9, accessible par Ctrl+Alt+F9. Le wiki Arch demande d’arrêter ce service une fois le mot de passe changé, sans quoi la porte reste ouverte à quiconque atteint le clavier. Ces unités se relisent avec les outils systemd et leur journal.
La clé USB live convient quand le clavier reste muet. Le wiki Arch monte la partition racine du système installé, applique passwd –root /mnt root, puis démonte. La page passwd(1) précise que seuls les chemins absolus sont acceptés avec cette option, et l’article exige une clé de même architecture que le système à réparer.
Un accès physique au clavier reste la condition de départ, et elle vaut dans les deux sens. Le wiki Arch le dit sans détour, un accès physique équivaut à charger un système tiers et à exposer les données, sauf si un chiffrement des données au repos protège le disque. Ce chiffrement est la seule parade citée par l’article.
Le choix de la méthode dépend du clavier, du disque et du compte sudo
Faut-il une clé USB live pour réinitialiser le mot de passe root ?
Non dans le cas courant, la ligne linux éditée dans GRUB ne demande aucun support externe. Le wiki Arch présente la clé comme la solution quand l’invite ouverte par init=/bin/bash reste muette. La commande devient alors passwd –root /mnt root, appliquée depuis le système de la clé.
Le clavier ne répond pas dans le shell root, que faire ?
Le wiki Arch signale ce cas, certains claviers n’étant pas chargés avec cette méthode et la frappe ne produisant rien à l’écran. Le même article propose deux sorties, le shell de débogage système sur tty9 par Ctrl+Alt+F9, ou une clé USB live.
Un disque chiffré empêche-t-il la manipulation ?
Le wiki Arch tranche par une exception : un accès physique équivaut à charger un système alternatif et à exposer les données, sauf si un chiffrement des données au repos est en place. Ce chiffrement est la parade citée par l’article, et la phrase de passe du volume reste nécessaire pour atteindre l’invite root.
L’édition de la ligne linux est-elle enregistrée dans la configuration ?
Non. La correction faite avec la touche e vit dans la session GRUB et disparaît au redémarrage, le manuel GRUB rappelant que /etc/default/grub pilote grub-mkconfig. Rien ne reste à annuler après coup, et la relecture de ces entrées au fil des noyaux est décrite dans GRUB et les mises à jour du noyau.
Peut-on changer le mot de passe d’un autre compte depuis ce shell ?
Oui. La page passwd(1) publiée pour Debian 12 indique que le superutilisateur peut changer le mot de passe de n’importe quel compte, l’appel prenant le nom en argument, passwd alice. Le wiki Arch montre l’équivalent depuis un système externe, passwd –root /mnt alice.
Sources
- manuel GRUB 2.14, GRUB_TIMEOUT, GRUB_TIMEOUT_STYLE et GRUB_CMDLINE_LINUX_RECOVERY
- documentation communautaire Ubuntu, init=/bin/bash et montage en lecture seule
- wiki Arch, remontage, reboot -f, clavier non initialisé, clé USB
- passwd(1) pour Debian 12, shadow-utils 4.13, option –root
- Linux-PAM, chaîne Authentication token manipulation error