Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
chroot [Le 14/10/2013, 15:39] 82.242.9.138 [Changer de système] |
chroot [Le 31/08/2025, 09:15] (Version actuelle) iznobe [Pour un système avec prise en charge de l ' EFI :] |
||
|---|---|---|---|
| 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é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). |
| - | * 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. | ||
| + | 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> | ||
| + | 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. | ||
| + | |||
| + | 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> | ||
| - | ==== Changer de système ==== | + | ===== Changer de système ===== |
| - | Cette technique est le plus souvent utilisée pour récupérer une installation endommagée. | + | 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 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é : <code>sudo mkdir -v /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" | 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 | - Préparez les dossiers spéciaux /proc et /dev : <code>sudo mount --bind /dev /media/system/dev | ||
| Ligne 34: | Ligne 44: | ||
| - 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> | - 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> | - 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>. | + | - 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 : <code>exit</code> | ||
| Ligne 46: | Ligne 55: | ||
| sudo umount /media/system/run | sudo umount /media/system/run | ||
| sudo umount /media/system</code> | sudo umount /media/system</code> | ||
| - | ==== Utiliser un environnement 32 bits sur une installation 64 bits ==== | + | |
| + | ==== 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 --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 | ||
| + | mount /dev/<PARTITION_EFI> /boot/efi | ||
| + | </code> | ||
| + | Bien sur , ne pas oublier de remplacer : " <PARTITION_SYSTEM> " et " <PARTITION_EFI> " par ce qui convient . | ||
| + | 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. | ||
| + | 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 | ||
| + | mount /dev/mapper/chiffre /mnt ### Si chiffrée | ||
| + | ou | ||
| + | zpool import -a -f -l -R /mnt ### Si partition zfs standard</code> | ||
| + | Le montage des répertoires se fera avec ces commandes (copier/coller). | ||
| + | <code> mount -t proc /proc /mnt/proc | ||
| + | mount -t sysfs /sys /mnt/sys | ||
| + | mount --bind /dev /mnt/dev | ||
| + | mount --bind /run /mnt/run | ||
| + | mount --bind /etc/resolv.conf /mnt/etc/resolv.conf | ||
| + | modprobe efivars </code> | ||
| + | Le changement d'environnement se fera avec cette commande | ||
| + | <code> chroot /mnt</code> | ||
| + | Quelques contrôles seront à faire par exemple | ||
| + | <code>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>reboot</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. | Cette option devient de plus en plus désuète puisque la plupart des machines sont maintenant en 64 bits. | ||
| Ligne 52: | Ligne 133: | ||
| CD Live 32bit pour une installation système 32bits et de même pour 64bits. | CD Live 32bit pour une installation système 32bits et de même pour 64bits. | ||
| - | Sinon, voir le tutoriel [[tutoriel:chroot32bits]] | + | <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>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> | ||
| + | |||
| + | |||
| + | ==== Pour un ubuntu intallé 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.]] | ||
| + | ===== 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. | ||
| + | |||
| + | <note tip>À faire [[https://www.vincentliefooghe.net/content/mise-place-dun-serveur-ftp-cloisonn%C3%A9|Lien externe]]</note> | ||
| ===== Liens ===== | ===== Liens ===== | ||
| * [[schroot|schroot]] | * [[schroot|schroot]] | ||
| + | * [[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]].// | ||