| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| chroot [Le 26/06/2025, 21:58] – [Exemple pratique avec une version 17.10 , 18.04 , 20.04 , 21.04 , 22.04 et 24.04] iznobe | chroot [Le 01/04/2026, 08:40] (Version actuelle) – [Procédure pas à pas] iznobe |
|---|
| {{tag>système sécurité conteneur}} | {{tag>système sécurité conteneur}} |
| ---- | |
| |
| ====== Chroot : changement d'environnement ====== | ====== 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. |
| |
| 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). | <code>chroot arborescence shell/application</code> |
| | |
| 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. | <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 (premier environnement d'exécution shell utilisateurs ou d'applications) vers un nouvel environnement d'exécution. | ===== Utilisations courantes ===== |
| | |
| <code>chroot arborescence shell/application</code> | |
| |
| 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 |
| | 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]]. |
| |
| 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]]. | Dans cette documentation nous traitons de la mise en place avec **chroot**. |
| |
| ===== Changer de système ===== | 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]]. |
| |
| 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. | <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> |
| |
| 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. | ===== La pratique : Changer de système ===== |
| |
| Astuce : Vous pouvez taper <code>sudo -i</code> avant de faire les opérations suivantes pour devenir "root" et ne pas devoir entrer "sudo". | 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. |
| - 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 | |
| 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> | 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. |
| |
| - Pour démarrer la connexion internet: <code> net-setup eth0 </code> | - Démarrez sur un système sain. Par exemple : un //live USB// |
| - 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> | - Montez la partition racine du système endommagé :<code>sudo mkdir -v /media/system |
| - Changez d'environnement : <code>sudo chroot /media/system</code> | sudo mount </dev/partition> /media/system |
| - En cas d'erreur à propos de "/bin/zsh" remplacer cette commande par<code>sudo chroot /media/system /bin/bash</code>. | </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. | 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 monte le nécessaire pour prendre en charge l' EFI . | |
| le chroot ( en condensé ) : | |
| <code> | |
| sudo mount --mkdir -v /dev/<PARTITION_SYSTEM> /media/system && 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 : | 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> | * 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 |
| mount -t efivarfs none /sys/firmware/efi/efivars | |
| mount /dev/<PARTITION_EFI> /boot/efi | |
| </code> | </code> |
| Bien sur , ne pas oublier de remplacer : " <PARTITION_SYSTEM> " et " <PARTITION_EFI> " par ce qui convient . | * le nécessaire pour prise en charge EFI :<code>mount -t efivarfs none /sys/firmware/efi/efivars</code> |
| il est possible d ' obtenir les informations de partitions préalablement avec la commande suivante : | |
| <code>lsblk -fe7</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 |
| |
| ==== 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 chiffre</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 | |
| ou | ou |
| mount /dev/mapper/chiffre /mnt ### Si chiffrée | sudo mount /dev/mapper/part_dechiffree /media/system ### Si chiffrée |
| ou | ou |
| 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 |
| |
| | ---- |
| |
| ==== Multi architecture ==== | 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 |
| |
| 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]]. | ==== Multi-architecture ==== |
| |
| Pour cela il vous faut installer [[apt>binfmt-support]] et [[apt>qemu-user-static]]. | 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 : | 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> |
| |
| 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 | <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 est préférable de mettre à jour le logiciel de façon classique. | Il faut d'abord utiliser ''chroot'' tel que décrit ci-dessus. |
| <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> | |
| |
| | Il est préférable de mettre à jour le logiciel de façon classique. |
| | sudo apt update && sudo apt upgrade |
| |
| ==== Pour un ubuntu intallé dans une partition BTRFS ==== | 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> |
| |
| [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22031607#p22031607|c'est là]] ou [[:timeshift#restauration_depuis_une_autre_instance|là.]] | ==== Pour un Ubuntu installé dans une partition BTRFS ==== |
| 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. | 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]]. |
| Pour cela on peut utiliser chroot, [[https://doc.ubuntu-fr.org/virtualisation|les conteneurs ou la virtualisation matérielle]]. | |
| | ==== 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 |
| |
| Dans cette documentation nous traitons de la mise en place avec chroot. | 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]] |
| ---- | ---- |
| |
| //Contributeurs : [[utilisateurs:Id2ndR]].// | //Contributeurs : [[:utilisateurs:Id2ndR]].// |