Perdre le mot de passe root d’un conteneur LXC: voilà quelque chose qui peut arriver,surtout lorsque vous veillez à choisir un mot de passe unique pour chacune des machines que vous gérer.

Une recherche sur internet vous aura sans doute proposé différentes démarches pour le retrouver. Les principaux tutoriels indiquent une marche à suivre très simple: redémarrer en runlevel 1, ce qui permet de changer le mot de passe sans en connaitre l’ancien.

Mais problème: lorsqu’un conteneur lxc est démarré, il n’y a pas de grub, et pas de moyen simple de changer le runlevel. Par contre, il est possible d’accéder au système de fichiers directement depuis la machine hôte.

Dès lors, il est possible d’avoir accès au fichier /etc/shadow, qui contient les mots de passe. Il devrait indiquer ceci :


root:*:16470:0:99999:7:::
# ...
ubuntu:$6$LongueSuiteDeChiffresEtLettres:16532:0:99999:7:::

Le fichier doit être lu en séparant les :. La première chaine de caractère avant le : est le nom de l’utilisateur, puis le mot de passe, encrypté.

Mais, par quoi le remplacer ? A moins de ne pouvoir réaliser un cryptage correct - pas impossible, mais il existe une méthode plus simple… - il suffit de le remplacer par une chaine vide, comme ceci :


ubuntu::16532:0:99999:7:::

Puis, se connecter avec l’utilisateur ubuntu - nous le réalisons par clé ssh, mais cela doit être possible également avec la commande lxc-console - puis de lancer la commande passwd pour indiquer un nouveau mot de passe.