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 02/06/2011, 03:38]
YannUbuntu [Liens] lien mort
chroot [Le 14/02/2024, 18:01] (Version actuelle)
78.241.30.175 24.04 zfs
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.+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).
  
-Cette opération peut être utilisée dans divers cas : +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]] 
-  * prison : empêche ​un utilisateur ou un programme de remonter dans l'arborescence et le cantonne à une nouvelle arborescence restreinte. +<​code>​printenv</​code>​ 
-  * changement ​d'​environnement ​: permet ​de basculer vers un autre système ​linux (autre architecture,​ autre distribution,​ autre version). Nous détaillerons ici cette technique.+une arborescence et les ressources logicielles ​de contrôle du matériel du système ​d'​exploitation.
  
-===== Utilisation =====+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]].
  
-==== 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 /​media/​system
-sudo mount </​dev/​partition>​ /​media/​system</​code>​+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
 sudo mount -t proc /proc /​media/​system/​proc</​code>​ 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>​ **Note : ** Vous pourriez aussi avoir besoin de monter /sys : <​code>​sudo mount -t sysfs /sys /​media/​system/​sys</​code>​
Ligne 33: Ligne 41:
   - 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>​ 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 43: Ligne 50:
 sudo umount /​media/​system/​proc sudo umount /​media/​system/​proc
 sudo umount /​media/​system/​sys sudo umount /​media/​system/​sys
 +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 ==== 
  
-Voir le tutoriel [[tutoriel:​chroot32bits]]+ 
 +==== 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'​installationd'​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>​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 frappant 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 ​  /​sys ​              /​mnt/​sys 
 +   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. 
 +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>​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 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à.]] 
 + 
 +===== 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]].//​
  • chroot.1306978698.txt.gz
  • Dernière modification: Le 15/12/2011, 15:18
  • (modification externe)