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