🡐 Retour à l'index

chroot

Le chrootage peut être super utile pour changer des choses comme le mot de passe racine, la réparation du chargeur de démarrage grub, etc., les choses qui nécessitent le montage du système.
En règle générale, vous pouvez démarrer sur une distribution Live Linux ou utiliser la fonction Rescue sur certains installateurs Linux.

Préparation

Après avoir démaré la distribution live linux, monter créer un répertoire vide, par exemple mkdir /rescue

Pour trouver le bon lecteur / volume / partition (s) , vous pouvez utiliser utiliser fdisk.

Pour afficher tous les volumes, exécutez fdisk -l

Si vous n'êtes pas certain de quel volume est le bon, vous pouvez vous aider en exécutant mount | grep ^/dev

Montage du système cassé

Quand vous avez déterminé la partition sdXN dont vous aurez besoin, montez-là en exécutant mount /dev/sdXN /rescue

Si la partition de boot est située hors de sdXN , montez-là en exécutant mount /dev/sdXM /rescue/boot

Une fois le système d'exploitation principal monté, vous devez également monter des répertoires spéciaux à partir de l'hôte afin que le chroot fonctionne correctement sans erreurs.
Ce sont principalement /dev, /proc, /sys, /dev/pts:

mount -t proc proc /rescue/proc
mount -t sysfs sys /rescue/sys
mount -o bind /dev /rescue/dev
mount -t devpts pts /rescue/dev/pts

Faire le chroot

Tous simplement exécuter chroot /rescue

Faites maintenant tout ce que vous devez faire pour réparer votre système.

Quitter le chroot

Pour quitter le chroot, il suffit d'exécuter exit

Si vous devez arrêter la machine hôte, aucun nettoyage n'est requis: Tous les composants seront démontés dans le cadre du processus d'arrêt.

Si vous n'arrêtez pas la machine hôte, après avoir quitté le chroot, vous pouvez démonter les répertoires spéciaux dans l'ordre inverse où ils ont été montés:

umount /rescue/dev/pts
umount /rescue/dev
umount /rescue/sys
umount /rescue/proc
umount /rescue

et terminez par rm -r /rescue

chroot sans debootstrap

La création d’un chroot se résume principalement à créer une arborescence sur laquelle nous allons pouvoir lancer un shell.

Je vais créer mon chroot dans le répertoire /chroot1.

sudo mkdir -p /chroot1
sudo mkdir -p /chroot1/{lib,lib64,usr/bin}
sudo cp /usr/bin/{bash,touch,ls,cat,rm} /chroot1/usr/bin/
sudo ln -s /usr/bin /chroot1/bin

Je peux copier autant de binaires que je souhaite, mais dans ce court exemple, je vais m’arreter à la base de la base : bash, touch, ls, cat, rm.

Je peux maintenant lancer mon chroot via la commande sudo chroot /chroot1/bin /bin/bash

et ...

sudo chroot /chroot1/ /bin/bash
chroot: failed to run command '/bin/bash': No such file or directory

Pourtant … mon binaire /chroot1/bin/bash est bien présent, et devrait bien se lancer !

La raison à ce refus: il me manque les dépendances situées dans les dossiers /lib et /lib64.

Les dépendances de mon binaire bash sont visibles via la commande ldd:

ldd /chroot1/usr/bin/bash | grep -o '/lib.* '
/lib/x86_64-linux-gnu/libtinfo.so.6
/lib/x86_64-linux-gnu/libdl.so.2
/lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2

On va lancer une boucle pour copier chaque fichier dans l’arborescence de notre chroot.

for bin in $(ls /chroot1/usr/bin/); do
echo $bin
for lib in $(ldd /chroot1/usr/bin/$bin | grep -o '/lib.* '); do sudo cp -v --parents "$lib" /chroot1/; done
done

On relance notre commande chroot :

sudo chroot /chroot1/
bash-5.0#

et on a bien notre environnement chroot.

chroot et debootstrap

https://linuxconfig.org/install-debian-server-in-a-linux-chroot-environment

Installer debootstrap

sudo apt update
sudo apt install debootstrap

Installer l'environnement de chroot

Créez le répertoire dans lequel résidera le chroot, ici /mnt/chroot

sudo debootstrap stable /mnt/chroot http://deb.debian.org/debian/

Ensuite, utiliser debootstrap pour installer de nouveaux fichiers système Debian dans le chroot.
On peut utiliser stable, ou sid, ou un nom de version debian

sudo debootstrap stable /mnt/chroot http://deb.debian.org/debian/

Enfin, connectez votre système de proc hôte à l'environnement chroot en montant dans le répertoire chroot.
Cela permet à chroot d'accéder au matériel de votre système hôte.

sudo mount -t proc proc /mnt/chroot/proc
sudo mount -t devpts devpts /mnt/chroot/dev/pts

Configuration

Entrer dans le chroot

sudo chroot /mnt/chroot /bin/bash --login

Pour éviter toute confusion entre l'environnement hôte et chroot, nous pouvons changer la variable PS1 de root en une invite shell en chroot #

echo 'PS1="chroot:\w# "' >> ~/.bashrc
exit

La prochaine fois que vous entrerez dans l'environnement chroot, vous aurez une nouvelle invite shell.

chroot /mnt/chroot /bin/bash --login

nstaller et configurer les paramètres régionaux.

apt install locales
dpkg-reconfigure locales

Installer ssh dans le chroot

Dans le chroot executer

apt install ssh

Configurer sshd_config : nano /etc/ssh/sshd_config

Port 2223
PermitRootLogin yes

Redémarrer le service SSH

/etc/init.d/ssh restart

Et changer le mot de passe

passwd

Entrer dans le chroot

sudo chroot  /mnt/chroot bash

Entrer dans le chroot avec ssh

ssh root@localhost -p 2223

ou en cas d'anormalie dans le terminal

ssh -t root@localhost -p 2223

si config

ssh localhost

Login sans mot de passe

ssh-copy-id -p 2223 -i ~/.ssh/id_ed25519.pub root@localhost

fichier config sur l'hôte

Host 127.0.0.1 localhost
	User root
	IdentitiesOnly no
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/id_ed25519
	port 2223

Derniers mots

ssh dans lechroot ne démarre pas automatiquement lorsque vous allumez votre système d'exploitation hôte.
Par conséquent, créez un simple script shell pour effectuer cette tâche:

sudo mount -t devpts devpts /mnt/chroot/dev/pts
sudo mount -t proc proc /mnt/chroot/proc
sudo chroot  /mnt/chroot /etc/init.d/ssh start