| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| chroot [Le 23/03/2020, 09:04] – [Exemple pratique avec une version 17.10 et 18.04] ajout 2004 dans le titre 37.164.199.222 | chroot [Le 01/04/2026, 08:40] (Version actuelle) – [Procédure pas à pas] iznobe |
|---|
| {{tag>système BROUILLON sécurité}} | {{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> |
| |
| ====== Chroot : changement de dossier racine ====== | <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> |
| |
| La commande **chroot** permet de changer le répertoire racine vers un nouvel emplacement. | ===== Utilisations courantes ===== |
| |
| 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 d'environnement : 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 |
| | 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]]. |
| |
| ===== Utilisation ===== | 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. |
| |
| ==== Changer de système ==== | 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. |
| |
| Cette technique est le plus souvent utilisée pour récupérer une installation endommagée. | - 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> |
| |
| 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. | Maintenant vous êtes sur l'installation endommagée et vous pouvez travailler dessus pour y corriger les problèmes. |
| |
| Astuce : Vous pouvez taper <code>sudo -i</code> avant de faire les opérations suivantes pour devenir "root" et ne pas devoir entrer "sudo". | Pour quitter l'environnement, il suffit d'un : |
| - Démarrez sur un système sain. Par exemple : un live CD | exit |
| - Montez la partition racine du système endommagé : <code>sudo mkdir /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" | |
| - 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é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 démarrer la connexion internet: <code> net-setup eth0 </code> | ==== Pour un système avec prise en charge de l'EFI : ==== |
| - 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. | 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. |
| |
| Pour quitter l'environnement, il suffit d'un : <code>exit</code> | 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 |
| |
| Pour démonter la partition racine du système endommagé : <code>sudo umount /media/system/dev | |
| sudo umount /media/system/proc | |
| sudo umount /media/system/sys | |
| sudo umount /media/system/run | |
| sudo umount /media/system</code> | |
| ==== Exemple pratique avec une version 17.10 et 18.04 ainsi qu'en version 20.04==== | |
| Le plus souvent, cette utilisation est faite à partir d'une clé USB d'installation de 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 à frapper cette commande</code> | |
| L'identification de la partition système à cibler sera plus aisée en frappant la commande | |
| <code>fdisk -l</code> | |
| Le montage de la partition système à cibler se fera en frappant la commande (pensez à remplacer XXXX par la bonne valeur). | |
| <code>mount /dev/XXXX /mnt</code> | |
| 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 /sys /mnt/sys | sudo mount --bind /run /media/system/run |
| mount --bind /etc/resolv.conf /mnt/etc/resolv.conf | sudo mount --bind /etc/resolv.conf /media/system/etc/resolv.conf |
| modprobe efivars </code> | sudo modprobe efivars |
| Le changement d'environnement se fera avec cette commande | </code> |
| <code> chroot /mnt</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 |
| Vous pouvez alors passer à la réparation proprement dite qui a justifié cette opération. | </code> |
| 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>reboot</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 |
| |
| | ---- |
| |
| ==== Pour un ubuntu installé dans une partition BTRFS==== | 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 1 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 |
| |
| [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22031607#p22031607|c'est là]] | ==== Multi-architecture ==== |
| |
| ==== Utiliser un environnement 32 bits sur une installation 64 bits ==== | 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. | 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.\\ | 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 |
| | 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 |
| |
| Sinon, voir le tutoriel [[tutoriel:chroot32bits]] | en remplaçant ''<BLOCK_DEVICE_PARTITION_SYSTEME>'' par le //block device// correspondant à votre partition système endommagée. |
| ==== Convertir un environnement 32 bits en environnement 64 bits ==== | sudo arch-chroot /mnt |
| 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>apt update && apt upgrade</code> | |
| Puis de procéder à l'installation des modules 64 bits absents avec ces commandes: | |
| <code>dpkg --add-architecture amd64 | |
| apt-get update | |
| apt-get install linux-image-amd64:amd64 </code> | |
| |
| ===== Liens ===== | ===== Voir aussi ===== |
| |
| * [[schroot|schroot]] | * [[:schroot]] |
| * [[http://linuxfr.org/news/care-et-la-reproductibilite-des-executions|care]] | * commande ''[[man>fakeroot-sysv|fakeroot]]'' |
| * [[http://linuxfr.org/tags/cde/public|cde]] | * [[https://linuxfr.org/news/care-et-la-reproductibilite-des-executions|care]] |
| | * [[https://linuxfr.org/tags/cde/public|cde]] |
| |
| ---- | ---- |
| |
| //Contributeurs : [[utilisateurs:Id2ndR]].// | //Contributeurs : [[:utilisateurs:Id2ndR]].// |