CentOS 7 : Le nouveau mode mono-utilisateur
I. Présentation
Fini le temps où il suffisait d’ajouter "1" en fin de ligne de la commande GRUB de démarrage du système GNU/Linux. Et oui, les choses se sont légèrement compliquées, la faute à l’arrivée de Grub 2.0. Vous l’aurez compris, dans ce billet je vais vous présenter la méthode permettant de booter vos chers serveurs Linux CentOS7 en mode utilisateur simple aussi appelé "Single User".
Mais, avant de commencer, faisons un petit rappel de ce qu’est Grub et des différents modes de démarrage du système d’exploitation GNU/Linux et du noyau linux. Le démarreur GRUB (abrégé de GRand Unified Bootloader) est un programme d’amorçage et qui trouve son utilité lors de la phase de démarrage des serveurs :
Une fois que le noyau Linux (aussi appelé kernel), est démarré, celui-ci charge alors le programme /sbin/init et l’exécute. Comme ce programme est le premier à être exécuté sur le système d’exploitation, son numéro d’identification (ou PID) porte le n°1. C’est le code initrd qui fournit le système minimal pouvant ensuite charger le système principal ou d’autres systèmes sans disque (également appelé diskless). Cela permet de disposer alors des modules minimaux du noyau pour fournir aux différents périphériques du système principal, leur environnement de fonctionnement optimum.
La dernière étape lors du démarrage d’une machine consiste à consulter le niveau d’exécution via la commande :
# systemctl get-default graphical.target
On dispose alors des niveaux suivants :
- Niveau 0 : arrêt de la machine
- Niveau 1 : mode mono-utilisateur (single user)
- Niveau 2 : mode multi-utilisateurs (sans application)
- Niveau 3 : mode multi-utilisateurs (avec applications ð aussi appelé multi-user)
- Niveau 4 : mode inutilisé pouvant servir à X11
- Niveau 5 : mode graphique (aussi appelé graphical)
- Niveau 6 : mode démarrage de la machine
La commande systemctl utilisée avec l’option set-default permet également de fixer le niveau de démarrage souhaité. On rappelle également que ce niveau par défaut, détermine les scripts exécutés lors de la phase de démarrage. Au niveau d’un système GNU/Linux, les niveaux les plus utilisés sont :
- Niveau 3 pour le mode multi-utilisateurs, sans Window Manager
- Niveau 5 pour le mode multi-utilisateurs avec interface graphique
II. Le runlevel
Comme on vient de le voir, lorsque le système GNU/Linux démarre, on s’aperçoit qu’il existe plusieurs services qui sont simultanément chargés sur le système. Il s’agit des programmes du niveau d’exécution qui sont chargés à partir du répertoire représentant le niveau d’exécution du système. Soit :
- Runlevel 0 : /etc/rc.d/rc0.d/
- Runlevel 1 : /etc/rc.d/rc1.d/
- Runlevel 2 : /etc/rc.d/rc2.d/
- Runlevel 3 : /etc/rc.d/rc3.d/
- Runlevel 4 : /etc/rc.d/rc4.d/
- Runlevel 5 : /etc/rc.d/rc5.d/
- Runlevel 6 : /etc/rc.d/rc6.d/
Dans ces répertoires, on retrouve (théoriquement), les noms des programmes commençant par S (pour Startup) ou K (pour Kill). Les premiers sont exécutés lors de la phase de démarrage du serveur et les autres, lors de la phase d’arrêt. Les chiffres portés par les programmes (qu’il s’agisse des programmes d’arrêt ou de démarrage) servent d’indication de l’ordre d’exécution de chaque script.
Exemple : pour le niveau 5 :
On voit ici, que lors de l’arrêt le script K50netconsole sera exécuté alors que durant la phase de démarrage, les scripts Sxx seront initialisés dans l’ordre de leur numéro d’identification :
- S03vmware-tools
- S10network
- S20electronServer
- …
III. Le mode mono-utilisateur
Pour en revenir à notre niveau de démarrage mono-utilisateur, que l’on appelle mode single user, sur un système CentOS 7 il faut au moment du démarrage de la machine prendre la main sur l’image du noyau, en utilisant la séquence de touches [ TAB ] et ‘e’ pour éditer les fonctions de GRUB :
Il faut alors déplacer le curseur pour se positionner sur la ligne linux ou linux16 décrit dans la capture suivante et remplacer ‘ro’ par ‘rw init=/sysroot/bin/sh’ :
Une fois que cela est fait, il faut alors exécuter la séquence de touches [ CTRL ] + ‘x’ pour pouvoir enregistrer temporairement la modification, et effectuer le démarrage en mode mono-utilisateur. On entre alors dans un mode console, en ligne de commandes avec le privilège root, sans avoir à saisir de mot de passe (sauf si on en a mis un sur le bootloader GRUB) :
ATTENTION : le système est protégé par un montage en chroot. Il faut donc exécuter la commande suivante pour pouvoir utiliser le système d’exploitation sous-jacent :
# chroot /sysroot
IV. Conclusion
Dès lors que l’on s’est positionné dans le chroot, on peut alors utiliser les commandes habituelles de vérification de table de montage /etc/fstab, de modification du mot de passe root, via la commande passwd, ou toute autre correction sur le système, suite à un problème.
Voilà, j’espère que ce petit tutoriel vous servira le moins souvent, car démarrer un serveur en mode mono-utilisateur est toujours synonyme de problème. Mais, cela peut vous faire gagner du temps de savoir comment faire, surtout qu’en général, dans ce genre de cas, on se trouve déjà en stress, ce n’est pas la peine d’en rajouter !