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édentes Révision précédente
Prochaine révision
Révision précédente
chroot [Le 21/11/2010, 13:08]
88.162.86.75 ajout de la copie du resolv.conf pour la connexion internet
chroot [Le 18/09/2025, 20:48] (Version actuelle)
iznobe [Multi-architecture]
Ligne 1: Ligne 1:
-{{tag>​système ​BROUILLON ​sécurité}} +{{tag>​système sécurité ​conteneur}}
-----+
  
-====== Chroot : changement ​de dossier racine ​======+====== Chroot : changement ​d'​environnement ​======
  
-La commande **chroot** permet de changer le répertoire racine vers un nouvel emplacement. 
  
-Cette opération peut être utilisée dans divers cas : +Linux est le logiciel système d'​exploitation qui est une sorte de proxy (interface) entre l'utilisateur ​et le matérielCe 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).
-  * prison : empêche un utilisateur ou un programme ​de remonter dans l'arborescence ​et le cantonne à une nouvelle arborescence restreinte. +
-  * changement ​d'environnement : permet de basculer vers un autre système ​linux (autre architecture,​ autre distribution,​ autre version). Nous détaillerons ici cette technique.+
  
-===== Utilisation =====+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.
  
 +===== Introduction et présentation =====
  
 +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.
  
 +<​code>​
 +  chroot arborescence shell/​application
 +</​code>​
  
-==== Changer ​de système ====+<note important>​Pour s'y retrouver , il faut avoir un minimum ​de connaissance sur les [[partitions|Les partitions]] avant de se lancer seul dans l ' aventure chroot !</​note>​
  
-Cette technique est le plus souvent utilisée pour récupérer une installation endommagée.+===== 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 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. 
 + 
 +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]]. 
 + 
 +<​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>​ 
 + 
 +===== 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. 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 CD   - Démarrez sur un système sain. Par exemple : un live CD
-  - Montez la partition racine du système endommagé : <​code>​sudo mkdir /​media/​system +  - Montez la partition racine du système endommagé : 
-sudo mount </​dev/​partition>​ /​media/​system</​code>​ +<​code>​ 
-  - Préparez les dossiers spéciaux /proc et /dev : <​code>​sudo mount --bind /dev /​media/​system/​dev +  ​sudo mkdir -v /​media/​system 
-sudo mount -t proc /proc /​media/​system/​proc</​code>​ +  sudo mount </​dev/​partition>​ /​media/​system 
-  - Copiez le /​etc/​resolv.conf pour la connexion internet : <​code>​sudo cp /​etc/​resolv.conf /​media/​system/​etc/​resolv.conf</​code>​ +</​code>​ 
-  - Changez d'​environnement : <​code>​sudo chroot /​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 dossiers 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 avec update-grub par exemple) vous devrez lier le /run : 
 +<​code>​ 
 +  sudo mount --bind /run  /​media/​system/​run 
 +</​code>​ 
 + 
 +**Note : 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 /​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. 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 démonter toutes les partitions montées avec la partition racine du système endommagé lorsque vous avez terminé : 
 +<​code>​
 +  sudo umount /​media/​system/​{dev,​proc,​sys,​run,​}
 +</​code>​
 +
 +==== 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>​
 +Bien sur , ne pas oublier 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 :
 +<​code>​
 +  lsblk -fe7
 +</​code>​
 +
 +==== 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
 +</​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>​
 +  sudo 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>​
 +  sudo mount   /​dev/​XXXX /​media/​system ​  ### Si pas  chiffrée
 +</​code>​
 +ou
 +<​code>​
 +  sudo mount   /​dev/​mapper/​part_dechiffree /​media/​system ​  ### Si   ​chiffrée
 +</​code>​
 +ou
 +<​code>​
 +  sudo zpool import -a -f -l -R /​media/​system ​ ### Si partition zfs standard
 +</​code>​
 +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
 +<​code>​
 +  sudo chroot /​media/​system
 +</​code>​
 +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 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.
 +<​code>​
 +  sudo reboot
 +</​code>​
 +
 +----
 +
 +Dans le cas d ' une partition chiffrée , si vous obtenez avec " lsblk -fe7 " apres 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 ​  ​1 ​                             9c94fa4c-f4b9-4efd-bda9-a8fa468b08fc  ​
 +</​code>​
 +il faut alors monter la partition racine endommagée avec la commande suivante :
 +<​code>​
 +  sudo mount /​dev/​mapper/​vgubuntu-root ​ /​media/​system ​
 +</​code>​
 +==== 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 :
 +<​code>​
 +  ls /​usr/​bin/​qemu-*-static
 +</​code>​
 +ou plus verbeux :
 +<​code> ​
 +  sudo update-binfmts --display
 +</​code>​
 +
 +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 :
 +<​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 [[proot|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.\\
 +CD Live 32bit pour une installation système 32bits et de même pour 64bits.
 +
 +<​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 ​ faire la fonctionnalité "​chroot"​ telle que décrite ci-dessus.
 +
 +Il est préférable ​ de mettre à jour le logiciel de façon classique.
 +<​code>​
 +  sudo apt update && sudo apt upgrade
 +</​code>​
 +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 ====
 +
 +[[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.]]
 +
 +
 +==== un truc simple ====
 +[[tutoriel:​comment_installer_un_paquet|installer le paquet]] suivant : **[[apt>​arch-install-scripts|arch-install-scripts]]**
 +<​code>​
 +  sudo apt install arch-install-scripts
 +</​code>​
 +Reperer votre partition systeme endommagée avec :
 +<​code>​
 +  lsblk -fe7
 +</​code>​
 +et noter son block device ( ce qui suit " /dev/ " )
 +monter votre partition systeme endommagée dans /​media/​system :
 +<​code>​
 +  sudo mount -v /​dev/<​BLOCK_DEVICE_PARTITION_SYSTEME>​ /​media/​system
 +</​code>​
 +<​code>​
 +  sudo arch-chroot /​media/​system
 +</​code>​
  
-Pour quitter l'​environnement,​ il suffit d'un : <​code>​exit</​code>​ 
  
-==== Utiliser un environnement 32 bits sur une installation 64 bits ==== 
  
-Voir le tutoriel [[tutoriel:​chroot32bits]] 
  
 ===== Liens ===== ===== Liens =====
  
   * [[schroot|schroot]]   * [[schroot|schroot]]
-  * [[http://www.tenshu.fr/ubuntu/​recuperer-une-installation-avec-un-cd-ubuntu/|Récupérer une installation avec un cd Ubuntu]] [fr]+  * [[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]].//​ //​Contributeurs : [[utilisateurs:​Id2ndR]].//​
  • chroot.1290341315.txt.gz
  • Dernière modification: Le 18/04/2011, 14:44
  • (modification externe)