Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
chroot [Le 18/09/2025, 16:57] – supprimée 86.229.122.12chroot [Le 01/04/2026, 08:40] (Version actuelle) – [Procédure pas à pas] iznobe
Ligne 1: Ligne 1:
 +{{tag>système sécurité conteneur}}
  
 +====== Chroot : changement d'environnement ======
 +
 +La commande ''[[man>chroot]]''(([[wpfr>chroot|Wikipédia]])) permet de changer le répertoire [[:arborescence#racine]], et ainsi l'environnement d'exécution //[[:shell]]// de l'utilisateur concerné ou d'applications, vers un nouvel environnement d'exécution.
 +
 +<code>chroot arborescence shell/application</code>
 +
 +<note important>Pour s'y retrouver, il faut avoir un minimum de connaissance sur les [[:partitions]] avant de se lancer seul dans l'aventure **chroot** !</note>
 +
 +===== Utilisations courantes =====
 +
 +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.
 +  * 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 ''[[man>chroot]]'', ou [[:virtualisation|les conteneurs ou la virtualisation matérielle]].
 +
 +Dans cette documentation nous traitons de la mise en place avec **chroot**.
 +
 +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]], [[:docker]] (sans changement du logiciel système d'exploitation), et aux systèmes d'exploitation au niveau du matériel avec la [[:virtualisation]] ou les proxy matériels pur, les XénoServeur, comme [[:xen]].
 +
 +<note>Pour //chrooter// (changer de système) dans un système a réparer, il faut évidemment démarrer sur un système parfaitement sain au préalable. Si ce n'est pas le cas, il faut alors démarrer sur une session //[[:live USB]]//.</note>
 +
 +===== La pratique : 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.
 +
 +  - Démarrez sur un système sain. Par exemple : un //live USB//
 +  - Montez la partition racine du système endommagé :<code>sudo mkdir -v /media/system
 +sudo mount </dev/partition> /media/system
 +</code>par exemple, si ''sda2'' est la partition racine, la commande sera : <code>
 +sudo mount /dev/sda2 /media/system
 +</code>
 +  - Préparez les répertoires spéciaux ''/proc'' et ''/dev'' :<code>sudo mount --bind /dev /media/system/dev
 +sudo mount -t proc /proc /media/system/proc
 +</code>
 +  - Dans certains cas (réparation de [[:grub-pc|grub]] avec ''[[man>update-grub]]'' par exemple) il faut aussi lier le répertoire ''/run'' :<code>sudo mount --bind /run  /media/system/run</code>
 +  - Vous pourriez aussi avoir besoin de monter ''/sys'' :<code>sudo mount -t sysfs /sys /media/system/sys</code>
 +  - Pour démarrer la connexion internet:<code>net-setup eth0</code>
 +  - Copiez le fichier ''/etc/resolv.conf'' pour la connexion internet (à faire seulement si votre connexion internet ne marche pas directement sans rien faire dans l'environnement //chrooté//) :<code>sudo cp /etc/resolv.conf /media/system/etc/resolv.conf</code>
 +  - Changez d'environnement :<code>sudo chroot /media/system</code>
 +  - En cas d'erreur à propos de ''/bin/zsh'', remplacer cette commande par :<code>sudo chroot /media/system /bin/bash</code>
 +
 +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 toutes les partitions montées avec la partition racine du système endommagé lorsque vous avez terminé : 
 +  sudo umount /media/system/{dev,proc,sys,run,}
 +
 +==== Pour un système avec prise en charge de l'EFI : ====
 +
 +Il s'agit de faire en sorte une fois le **chroot** exécuté de faire le nécessaire pour prendre en charge l'EFI.
 +  * le chroot (en condensé) :<code>sudo mkdir -v /media/system && sudo mount -v /dev/<PARTITION_SYSTEM> /media/system && sudo mount -v /dev/<PARTITION_EFI> /boot/efi && sudo mount -v --bind /dev /media/system/dev && sudo mount -vt proc /proc /media/system/proc && sudo mount -v --bind /run  /media/system/run && sudo mount -vt sysfs /sys /media/system/sys && sudo chroot /media/system
 +</code>
 +  * le nécessaire pour prise en charge EFI :<code>mount -t efivarfs none /sys/firmware/efi/efivars</code>
 +
 +Ne pas oublier bien sûr de remplacer : ''<PARTITION_SYSTEM>'' et ''<PARTITION_EFI>'' par ce qui convient.
 +
 +RAPPEL : il est possible d' obtenir les informations de  partitions préalablement avec la commande suivante :
 +  lsblk -fe7
 +
 +==== Exemple pratique avec une version 18.04, 20.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 avec une partition système non chiffrée.
 +Les commandes de préparation sont :
 +  setxkbmap fr       ### afin d'avoir un clavier français
 +
 +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. 
 +  sudo cryptsetup luksOpen /dev/xxx  part_dechiffree
 +
 +La partition système à cibler se monte en entrant la commande (pensez à remplacer ''XXXX'' par la bonne valeur).
 +  sudo mount /dev/XXXX /media/system   ### Si pas chiffrée
 +
 +ou
 +  sudo mount /dev/mapper/part_dechiffree /media/system   ### Si chiffrée
 +
 +ou
 +  sudo zpool import -a -f -l -R /media/system  ### Si partition zfs standard
 +
 +Le montage des répertoires se fera avec ces commandes (copier/coller).
 +<code>
 +sudo mount -t proc  /proc            /media/system/proc
 +sudo mount -t sysfs /sys             /media/system/sys
 +sudo mount --bind   /dev             /media/system/dev
 +sudo mount --bind   /run             /media/system/run
 +sudo mount --bind   /etc/resolv.conf /media/system/etc/resolv.conf
 +sudo modprobe efivars
 +</code>
 +
 +Le changement d'environnement se fera avec cette commande
 +  sudo chroot /media/system
 +
 +Quelques contrôles seront à faire par exemple
 +<code>
 +sudo mount -t devpts devpts /dev/pts 
 +df -h && df -i
 +ping -c4 8.8.8.8  && ping -c4 google.fr
 +ls   -ls /home
 +</code>
 +
 +Vous pouvez alors passer à la réparation proprement dite qui a justifié cette opération.
 +Espérons simplement que le message d'erreur ''Running in chroot, ignoring request.'' n'empêchera pas votre réparation.
 +Lorsque cela sera fini, le plus simple est de redémarrer pour vérifier. La commande suivante s'occupe de toutes les déconnexions :
 +  sudo reboot
 +
 +----
 +
 +Dans le cas d'une partition chiffrée, si vous obtenez avec ''lsblk -fe7'' après avoir passé la commande ''sudo cryptsetup luksOpen /dev/xxx  part_dechiffree'', quelque chose comme :
 +<code>
 +└─nvme1n1p3
 +     crypto 2                              3d9739ab-61a7-415e-b1b5-81246666e518                  
 +  └─part_dechiffree
 +     LVM2_m LVM2                           aa6Ped-pjQi-dIWF-WFlx-mOnB-P9Pf-EGorvY                
 +    ├─vgubuntu-root
 +    │  ext4   1.0                            0f2dd8fb-a4d8-479c-9863-18f8bbcb73cd                  
 +    └─vgubuntu-swap_1
 +       swap                                9c94fa4c-f4b9-4efd-bda9-a8fa468b08fc  
 +</code>
 +il faut alors monter la partition racine endommagée avec la commande suivante :
 +  sudo mount /dev/mapper/vgubuntu-root  /media/system 
 +
 +==== Multi-architecture ====
 +
 +Vous pouvez aussi vouloir démarrer en **chroot** un système Linux d'une [[https://wiki.debian.org/RaspberryPi/qemu-user-static|autre architecture matérielle]].
 +
 +Pour cela il vous faut installer les paquets ''[[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 bits par exemple, et après avoir monté tout ce dont vous avez besoin pour fonctionner en **chroot** dans ''/media/system'' :
 +<code>
 +cp /usr/bin/qemu-aarch64-static /media/system/usr/bin
 +sudo chroot /media/system qemu-aarch64-static /bin/bash
 +</code>
 +
 +Vous pouvez aussi utiliser des commande comme ''[[man>proot]]'' pour passer des commandes en **chroot**.
 +<code>proot -S /chemin/répertoire_monté/ -q qemu-architecture-static commande_bash</code>
 +<code>proot -S /media/system/ -q qemu-aarch64-static arch</code>
 +<code>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"</code>
 +
 +=== 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.\\
 +//USB live// 32 bits pour une installation système 32 bits et de même pour 64 bits.
 +
 +<code>
 +cp /usr/bin/qemu-i386-static /path/folder_system_32bit/usr/bin
 +sudo chroot /media/system qemu-i386-static /bin/bash
 +</code>
 +
 +Voir le tutoriel [[:tutoriel:chroot32bits]] pour approfondir.
 +
 +=== Convertir un environnement 32 bits en environnement 64 bits ===
 +
 +Il faut d'abord utiliser ''chroot'' tel que décrit ci-dessus.
 +
 +Il est préférable  de mettre à jour le logiciel de façon classique.
 +  sudo apt update && sudo apt upgrade
 +
 +Puis de procéder à l'installation des modules 64 bits absents avec ces commandes :
 +<code>
 +dpkg --add-architecture amd64
 +sudo apt-get update
 +sudo apt-get install linux-image-amd64:amd64
 +</code>
 +
 +==== Pour un Ubuntu installé dans une partition BTRFS ====
 +
 +Voir [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22031607#p22031607|le forum]] ou [[:timeshift#restauration_depuis_une_autre_instance|la documentation]] ou aussi [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22771420#p22771420|là]] et [[https://forum.endeavouros.com/t/chroot-into-a-btrfs-uefi-system-from-live-media/15986|en anglais]].
 +
 +==== Procédure pas à pas à partir d ' une session live ====
 +
 +Insérez la clé USB contenant ubuntu dans un port de l' ordi .
 +Démarre l ' ordi sur la clé et choisir " essayer ubuntu ".
 +
 +Ouvrez un terminal et entrez :
 +
 +  sudo add-apt-repository universe multiverse -y && sudo apt update && sudo apt install arch-install-scripts -y
 +  
 +[[:tutoriel:comment_installer_un_paquet|Installer le paquet]] ''[[apt>arch-install-scripts]]''
 +  sudo apt install arch-install-scripts
 +
 +Repérer votre partition système endommagée avec :
 +  lsblk -fe7 | grep ext4
 +
 +et noter son //block device// (ce qui suit ''/dev/''), puis monter votre partition système endommagée :
 +  sudo mount -v /dev/<BLOCK_DEVICE_PARTITION_SYSTEME> /mnt
 +
 +en remplaçant ''<BLOCK_DEVICE_PARTITION_SYSTEME>'' par le //block device// correspondant à votre partition système endommagée.
 +  sudo arch-chroot /mnt
 +
 +
 +===== Voir aussi =====
 +
 +  * [[:schroot]]
 +  * commande ''[[man>fakeroot-sysv|fakeroot]]''
 +  * [[https://linuxfr.org/news/care-et-la-reproductibilite-des-executions|care]]
 +  * [[https://linuxfr.org/tags/cde/public|cde]]
 +
 +----
 +
 +//Contributeurs : [[:utilisateurs:Id2ndR]].//