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:26] 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}} {{tag>système sécurité conteneur}}
----- 
  
 ====== Chroot : changement d'environnement ====== ====== Chroot : changement d'environnement ======
  
-===== Introduction et présentation ===== +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'applicationsvers un nouvel environnement d'exécution.
- +
-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]] +
-<code>printenv</code> +
-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'applicationsvers un nouvel environnement d'exécution.+
  
 <code>chroot arborescence shell/application</code> <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 ===== ===== Utilisations courantes =====
Ligne 22: Ligne 13:
 Cette opération peut être utilisée dans divers cas : 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.   * 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.+  * 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    * 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. 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]].+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.+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|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]].+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 le système a réparer , évidemment , il faut démarrer sur un système parfaitement sain au préalable . Si vous n' en avez pas un sur votre ordinateur ( cas le plus courant ) , il faudra alors démarrer sur  [[live_usb|une session live USB (Live USB)]].</note>+<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 ===== ===== La pratique : Changer de système =====
Ligne 37: Ligne 28:
 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. 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.+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 <code>sudo -i</code> 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 USB// 
-  - Démarrez sur un système sain. Par exemple : un live CD +  - Montez la partition racine du système endommagé :<code>sudo mkdir -v /media/system 
-  - Montez la partition racine du système endommagé : <code>sudo mkdir -v /media/system +sudo mount </dev/partition> /media/system 
-sudo mount </dev/partition> /media/system</code> par exemple, si sda2 est la partition racine, la commande sera : "sudo mount /dev/sda2 /media/system" +</code>par exemple, si ''sda2'' est la partition racine, la commande sera : <code> 
-  - Préparez les dossiers spéciaux /proc et /dev : <code>sudo mount --bind /dev /media/system/dev +sudo mount /dev/sda2 /media/system 
-sudo mount -t proc /proc /media/system/proc</code> +</code> 
-  - Dans certains cas (réparation de Grub avec update-grub par exemple) vous devrez lier le /run : <code>sudo mount --bind /run  /media/system/run</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 
-**Note : ** Vous pourriez aussi avoir besoin de monter /sys : <code>sudo mount -t sysfs /sys /media/system/sys</code> +</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> 
-  - Pour démarrer la connexion internet: <code> net-setup eth0 </code> +  Vous pourriez aussi avoir besoin de monter ''/sys'' :<code>sudo mount -t sysfs /sys /media/system/sys</code> 
-  - 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é) : <code>sudo cp /etc/resolv.conf /media/system/etc/resolv.conf</code> +  - Pour démarrer la connexion internet:<code>net-setup eth0</code> 
-  - Changez d'environnement : <code>sudo chroot /media/system</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> 
-  - En cas d'erreur à propos de "/bin/zshremplacer cette commande par<code>sudo chroot /media/system /bin/bash</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. 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 : <code>exit</code>+Pour quitter l'environnement, il suffit d'un : 
 +  exit
  
-Pour démonter la partition racine du système endommagé : <code>sudo umount /media/system/dev +Pour démonter toutes les partitions montées avec la partition racine du système endommagé lorsque vous avez terminé  
-sudo umount /media/system/proc +  sudo umount /media/system/{dev,proc,sys,run,}
-sudo umount /media/system/sys +
-sudo umount /media/system/run +
-sudo umount /media/system</code>+
  
-==== Pour un système avec prise en charge de l ' EFI : ==== +==== 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é ) : +Il s'agit de faire en sorte une fois le **chroot** exécuté de faire le nécessaire pour prendre en charge l'EFI. 
-<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+  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> </code>
 +  * le nécessaire pour prise en charge EFI :<code>mount -t efivarfs none /sys/firmware/efi/efivars</code>
  
-le nécessaire pour prise en charge EFI : +Ne pas oublier bien sûr de remplacer : ''<PARTITION_SYSTEM>'' et ''<PARTITION_EFI>'' par ce qui convient. 
-<code> + 
-mount -t efivarfs none /sys/firmware/efi/efivars</code> +RAPPEL : il est possible d' obtenir les informations de  partitions préalablement avec la commande suivante : 
-Bien sur , ne pas oublier de remplacer : <PARTITION_SYSTEM> et <PARTITION_EFI> par ce qui convient . +  lsblk -fe7 
-il est possible d  ' obtenir les informations de  partitions préalablement avec la commande suivante : + 
-<code>lsblk -fe7</code>+==== 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
  
-==== 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 
-<code>setxkbmap fr       ### afin d'avoir un clavier français. 
-sudo -i            ### afin d'éviter de passer son temps à taper cette commande</code> 
-L'identification de la partition système à cibler sera plus aisée en tapant la commande 
-<code>lsblk -fe7</code> 
-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.  
-<code bash>cryptsetup luksOpen /dev/xxx part_dechiffree</code> 
-Le montage de la partition système à cibler se fera  en tapant la commande (pensez à remplacer XXXX par la bonne valeur). 
-<code>mount   /dev/XXXX /mnt   ### Si pas  chiffrée</code> 
 ou ou
-<code>mount   /dev/mapper/part_dechiffree /mnt   ### Si   chiffrée</code>+  sudo mount /dev/mapper/part_dechiffree /media/system   ### Si chiffrée 
 ou ou
-<code>zpool import -a -f -l -R /mnt  ### Si partition zfs standard</code>+  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). Le montage des répertoires se fera avec ces commandes (copier/coller).
-<code>   mount -t proc  /proc              /mnt/proc +<code> 
-   mount -t sysfs /sys               /mnt/sys +sudo mount -t proc  /proc            /media/system/proc 
-   mount --bind   /dev               /mnt/dev +sudo mount -t sysfs /sys             /media/system/sys 
-   mount --bind   /run               /mnt/run +sudo mount --bind   /dev             /media/system/dev 
-   mount --bind   /etc/resolv.conf   /mnt/etc/resolv.conf +sudo mount --bind   /run             /media/system/run 
-   modprobe efivars     </code>   +sudo mount --bind   /etc/resolv.conf /media/system/etc/resolv.conf 
- Le changement d'environnement se fera avec cette commande +sudo modprobe efivars 
-<code>  chroot /mnt</code>+</code> 
 + 
 +Le changement d'environnement se fera avec cette commande 
 +  sudo chroot /media/system 
 Quelques contrôles seront à faire par exemple Quelques contrôles seront à faire par exemple
-<code>mount -t devpts devpts /dev/pts +<code> 
 +sudo mount -t devpts devpts /dev/pts 
 df -h && df -i df -h && df -i
 ping -c4 8.8.8.8  && ping -c4 google.fr ping -c4 8.8.8.8  && ping -c4 google.fr
-ls   -ls /home </code>+ls   -ls /home 
 +</code> 
 Vous pouvez alors passer à la réparation proprement dite qui a justifié cette opération. 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. +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 rebooter pour vérifier. La commande suivante s'occupe de toutes les déconnexions. +Lorsque cela sera fini, le plus simple est de redémarrer pour vérifier. La commande suivante s'occupe de toutes les déconnexions : 
-<code>reboot</code>+  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 ====+==== 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]].+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 [[apt>binfmt-support]] et [[apt>qemu-user-static]].+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 : Vous pouvez alors lister les architectures matérielles supportées :
-<code>ls /usr/bin/qemu-*-static</code>+  ls /usr/bin/qemu-*-static 
 ou plus verbeux : ou plus verbeux :
-<code>sudo update-binfmts --display</code>+  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 : +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 +<code> 
-sudo chroot /media/system qemu-aarch64-static /bin/bash</code> +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.+</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 /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 arch</code>
Ligne 136: Ligne 155:
  
 Cette option devient de plus en plus désuète puisque la plupart des machines sont maintenant en 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 'chrootentre deux systèmes de même architecture.\\ +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.+//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 +<code> 
-sudo chroot /media/system qemu-i386-static /bin/bash</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.+Voir le tutoriel [[:tutoriel:chroot32bits]] pour approfondir.
  
-== Convertir un environnement 32 bits en environnement 64 bits == +=== Convertir un environnement 32 bits en environnement 64 bits === 
-Il faut d'abord  faire la fonctionnalité "chroot" telle que décrite ci-dessus.+ 
 +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. Il est préférable  de mettre à jour le logiciel de façon classique.
-<code>apt update && apt upgrade</code> +  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 +Puis de procéder à l'installation des modules 64 bits absents avec ces commandes : 
-apt-get update +<code> 
-apt-get install linux-image-amd64:amd64 </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
  
-==== Pour un ubuntu intallé dans une partition  BTRFS ====+Repérer votre partition système endommagée avec : 
 +  lsblk -fe7 | grep ext4
  
-[[https://forum.ubuntu-fr.org/viewtopic.php?pid=22031607#p22031607|c'est là]] ou [[:timeshift#restauration_depuis_une_autre_instance|là.]] +et noter son //block device// (ce qui suit ''/dev/''), puis monter votre partition système endommagée 
-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.]]+  sudo mount -/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
  
-<note tip>À faire [[https://www.vincentliefooghe.net/content/mise-place-dun-serveur-ftp-cloisonn%C3%A9|Lien externe]]</note> 
  
-===== Liens =====+===== Voir aussi =====
  
-  * [[schroot|schroot]] +  * [[:schroot]] 
-  * [[fakeroot|fakeroot]] [[https://www.thegeekdiary.com/fakeroot-command-examples-in-linux/|Lien externe EN]]+  * commande ''[[man>fakeroot-sysv|fakeroot]]''
   * [[https://linuxfr.org/news/care-et-la-reproductibilite-des-executions|care]]   * [[https://linuxfr.org/news/care-et-la-reproductibilite-des-executions|care]]
   * [[https://linuxfr.org/tags/cde/public|cde]]   * [[https://linuxfr.org/tags/cde/public|cde]]
Ligne 172: Ligne 214:
 ---- ----
  
-//Contributeurs : [[utilisateurs:Id2ndR]].//+//Contributeurs : [[:utilisateurs:Id2ndR]].//