{{tag>système sécurité conteneur}}
----
====== Chroot : changement d'environnement ======
Linux est le logiciel système d'exploitation qui est une sorte de proxy (interface) entre l'utilisateur et le matériel. Ce système logiciel d'interface matériels est alors actif dans un environnement d'exécution à la fin du lancement du système d'exploitation (processus init).
Il exécute alors un logiciel d'interface utilisateurs, un «[[shell|shell]]», l'environnement qui va gérer les interactions utilisateur avec le système d'exploitation. Cet environnement contient des [[variables_d_environnement|variables paramètres]]
printenv
une arborescence et les ressources logicielles de contrôle du matériel du système d'exploitation.
Ce shell peut-être en ligne de commandes ou graphique.
La commande **chroot** permet de changer le répertoire racine (premier environnement d'exécution shell utilisateurs ou d'applications) vers un nouvel environnement d'exécution.
chroot arborescence shell/application
Cette opération peut être utilisée dans divers cas :
* prison : empêche un utilisateur ou un programme de remonter dans l'arborescence et le cantonne à une nouvelle arborescence restreinte.
* changement de système : permet de basculer vers un autre système linux (autre architecture, autre distribution, autre version). Nous détaillerons ici cette technique.
Le concept de chroot, de changements ou d'isolation d'environnement système utilisateurs (ou d'exécution d'applications), s'est étendu aux ressources du système d'exploitation avec la notion de conteneurs comme [[lxc|lxc]], [[docker|docker]] (sans changement du logiciel système d'exploitation), et aux systèmes d'exploitation au niveau du matériel avec la [[virtualisation|virtualisation]] ou les proxy matériels pur, les XénoServeur, comme [[xen|xen]].
===== Changer de système =====
Cette technique est le plus souvent utilisée pour récupérer une installation endommagée ou pour installer un nouveau système d'exploitation.
Ici le chroot sera utilisé après le démarrage sur un système sain pour se retrouver dans l'environnement endommagé et faire des modifications directement dans ce dernier environnement.
Astuce : Vous pouvez taper sudo -i
avant de faire les opérations suivantes pour devenir "root" et ne pas devoir entrer "sudo".
- Démarrez sur un système sain. Par exemple : un live CD
- Montez la partition racine du système endommagé : sudo mkdir /media/system
sudo mount /media/system
par exemple, si sda2 est la partition racine, la commande sera : "sudo mount /dev/sda2 /media/system"
- Préparez les dossiers spéciaux /proc et /dev : sudo mount --bind /dev /media/system/dev
sudo mount -t proc /proc /media/system/proc
- Dans certains cas (réparation de Grub avec update-grub par exemple) vous devrez lier le /run : sudo mount --bind /run /media/system/run
**Note : ** Vous pourriez aussi avoir besoin de monter /sys : sudo mount -t sysfs /sys /media/system/sys
- Pour démarrer la connexion internet: net-setup eth0
- Copiez le /etc/resolv.conf pour la connexion internet (à faire seulement si votre connexion internet ne marche pas directement sans rien faire dans l'environnement chrooté) : sudo cp /etc/resolv.conf /media/system/etc/resolv.conf
- Changez d'environnement : sudo chroot /media/system
- En cas d'erreur à propos de "/bin/zsh" remplacer cette commande parsudo chroot /media/system /bin/bash
.
Maintenant vous êtes sur l'installation endommagée et vous pouvez travailler dessus pour y corriger les problèmes.
Pour quitter l'environnement, il suffit d'un : exit
Pour démonter la partition racine du système endommagé : sudo umount /media/system/dev
sudo umount /media/system/proc
sudo umount /media/system/sys
sudo umount /media/system/run
sudo umount /media/system
==== Exemple pratique avec une version 17.10 , 18.04 , 20.04 , 21.04 , 22.04 et 24.04 ====
Le plus souvent, cette utilisation est faite à partir d'une clé USB d'installation d'Ubuntu. Ceci est un cas pratique fait en EFI sur partition système non chiffrée.
Les commandes de préparation sont
setxkbmap fr ### afin d'avoir un clavier français.
sudo -i ### afin d'éviter de passer son temps à taper cette commande
L'identification de la partition système à cibler sera plus aisée en tapant la commande
lsblk -fe7
Si cette commande montre que ubuntu est installé dans une partition chiffrée, il est nécessaire de l'ouvrir pour y avoir accès.
cryptsetup luksOpen /dev/xxx chiffre
Le montage de la partition système à cibler se fera en tapant la commande (pensez à remplacer XXXX par la bonne valeur).
mount /dev/XXXX /mnt ### Si pas chiffrée
ou
mount /dev/mapper/chiffre /mnt ### Si chiffrée
ou
zpool import -a -f -l -R /mnt ### Si partition zfs standard
Le montage des répertoires se fera avec ces commandes (copier/coller).
mount -t proc /proc /mnt/proc
mount -t sysfs /sys /mnt/sys
mount --bind /dev /mnt/dev
mount --bind /run /mnt/run
mount --bind /sys /mnt/sys
mount --bind /etc/resolv.conf /mnt/etc/resolv.conf
modprobe efivars
Le changement d'environnement se fera avec cette commande
chroot /mnt
Quelques contrôles seront à faire par exemple
mount -t devpts devpts /dev/pts
df -h && df -i
ping -c4 8.8.8.8 && ping -c4 google.fr
ls -ls /home
Vous pouvez alors passer à la réparation proprement dite qui a justifié cette opération.
Espérons simplement que ce message d'erreur "//Running in chroot, ignoring request.//" n'empêchera pas votre réparation.
Lorsque cela sera fini, le plus simple est de rebooter pour vérifier. La commande suivante s'occupe de toutes les déconnexions.
reboot
==== Multi architecture ====
Vous pouvez aussi vouloir démarrer [[https://wiki.debian.org/RaspberryPi/qemu-user-static|en chroot un système Linux d'une autre architecture matérielle]].
Pour cela il vous faut installer [[apt>binfmt-support]] et [[apt>qemu-user-static]].
Vous pouvez alors lister les architectures matérielles supportées :
ls /usr/bin/qemu-*-static
ou plus verbeux :
sudo update-binfmts --display
Pour démarrer le chroot en arm 64 bit par exemple, et après avoir monter tout ce que vous avez besoin pour fonctionner en chroot dans /media/system :
cp /usr/bin/qemu-aarch64-static /media/system/usr/bin
sudo chroot /media/system qemu-aarch64-static /bin/bash
Vous pouvez aussi utiliser des commande comme [[proot|proot]] pour passer des commandes en chroot.
proot -S /chemin/répertoire_monté/ -q qemu-architecture-static commande_bash
proot -S /media/system/ -q qemu-aarch64-static arch
proot -S /media/system/ -q qemu-aarch64-static bash -c "if ping -c 1 doc.ubuntu-fr.org &> /dev/null; then echo 'Réseau OK'; else exit 1; fi"
=== Utiliser un environnement 32 bits sur une installation 64 bits ===
Cette option devient de plus en plus désuète puisque la plupart des machines sont maintenant en 64 bits.
Préférez toujours utiliser 'chroot' entre deux systèmes de même architecture.\\
CD Live 32bit pour une installation système 32bits et de même pour 64bits.
cp /usr/bin/qemu-i386-static /path/folder_system_32bit/usr/bin
sudo chroot /media/system qemu-i386-static /bin/bash
Voir le tutoriel [[tutoriel:chroot32bits]] pour approfondir.
== Convertir un environnement 32 bits en environnement 64 bits ==
Il faut d'abord faire la fonctionnalité "chroot" telle que décrite ci-dessus.
Il est préférable de mettre à jour le logiciel de façon classique.
apt update && apt upgrade
Puis de procéder à l'installation des modules 64 bits absents avec ces commandes:
dpkg --add-architecture amd64
apt-get update
apt-get install linux-image-amd64:amd64
==== Pour un ubuntu intallé dans une partition BTRFS ====
[[https://forum.ubuntu-fr.org/viewtopic.php?pid=22031607#p22031607|c'est là]] ou [[:timeshift#restauration_depuis_une_autre_instance|là.]]
ou aussi [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22771420#p22771420|là]] et en [[https://forum.endeavouros.com/t/chroot-into-a-btrfs-uefi-system-from-live-media/15986|anglais.]]
===== Isolation d'applications =====
C'est une action logicielle qui consiste à protéger l'environnement système des faiblesses de sécurités d'une application.
Pour cela on peut utiliser chroot, [[https://doc.ubuntu-fr.org/virtualisation|les conteneurs ou la virtualisation matérielle]].
Dans cette documentation nous traitons de la mise en place avec chroot.
À faire [[https://www.vincentliefooghe.net/content/mise-place-dun-serveur-ftp-cloisonn%C3%A9|Lien externe]]
===== Liens =====
* [[schroot|schroot]]
* [[fakeroot|fakeroot]] [[https://www.thegeekdiary.com/fakeroot-command-examples-in-linux/|Lien externe EN]]
* [[https://linuxfr.org/news/care-et-la-reproductibilite-des-executions|care]]
* [[https://linuxfr.org/tags/cde/public|cde]]
----
//Contributeurs : [[utilisateurs:Id2ndR]].//