Hoe Chroot in Linux te gebruiken en je kapotte systeem te repareren?

Chroot is een Linux/Unix-hulpprogramma dat het rootbestandssysteem kan wijzigen of wijzigen. Met de hulp van de chroot commando, kunt u eenvoudig een geïsoleerd bestandssysteem maken binnen uw primaire bestandssysteem. Chroot is vooral handig om uw werk- en thuisomgeving gescheiden te houden of als u een testomgeving wilt om software geïsoleerd te testen.

Verschil tussen Chroot en virtuele machine

Op het eerste gezicht kun je chroot zien als vergelijkbaar met een virtuele machine of een gecontaineriseerd systeem zoals docker. Het lijkt een beetje op elkaar, maar chroot is een veel lichtere oplossing dan een virtuele machine. De virtuele machine heeft een hypervisor nodig om een ​​aparte kernel te installeren en ermee te werken, die verschilt van de hostmachine. In tegenstelling tot een virtuele machine deelt chroot dezelfde kernel en processen, maar creëert een jail in het bestandssysteem. Binnen in de gevangenis is het niet mogelijk om naar buiten te kijken zonder root-toestemming. Daarom wordt het geïsoleerde bestandssysteem ook wel chroot jail genoemd.

Verschillende gebruiksscenario’s van Chroot

  1. Geïsoleerde bouwomgeving in CI/CD-pijplijn: Chroot wordt gebruikt om een ​​geïsoleerde bouwomgeving te creëren voor toepassingen in de CI/CD-pijplijn. Dit helpt bij het bouwen van uw toepassing met unieke afhankelijkheden en is volledig geïsoleerd van alle andere bouwomgevingen om mogelijke conflicten te verwijderen.
  2. Aparte ontwikkel- en testomgeving: Vaak werkt software die werkt op de ontwikkelmachine niet op het apparaat van de eindgebruiker. Dit komt omdat de ontwikkelaar veel tools en afhankelijkheden op zijn systeem heeft geïnstalleerd. Normale mensen hebben niet al die afhankelijkheden op hun machines geïnstalleerd. Dus om de software te testen, als deze op alle apparaten werkt, kan de ontwikkelaar of tester eenvoudig een eenvoudige vanille-omgeving maken met chroot om hun software te testen.
  3. Verminder het risico voor de ontwikkelaar: Als ontwikkelaar maken we vaak een aantal programma’s die interactie hebben met onze systeembestanden zonder enige goede sandboxing. Daarom, als we een fout maken, kan onze software onze belangrijke gegevens gemakkelijk van ons apparaat wissen. Om dergelijke risico’s te verminderen, gebruikt de ontwikkelaar vaak chroot om een ​​nieuwe werkomgeving te creëren en het risico op gegevensverlies te verkleinen.
  4. Een andere versie van dezelfde software: Soms moet u voor ontwikkelingsdoeleinden een zeer oude of zeer recente versie van bepaalde software of afhankelijkheid installeren. Maar het gebruik van zo’n tegenstrijdige afhankelijkheid kan uw systeem in de war brengen. Deze situatie kan eenvoudig worden overwonnen door chroot-jail te gebruiken.
  5. Een kapot systeem repareren: Als je een kapot systeem hebt, kun je dit eenvoudig repareren met behulp van chroot. Start gewoon een live Linux-omgeving op het apparaat en koppel het bestandssysteem. Met dit koppelpunt kunt u verschillende opdrachten uitvoeren om uw probleem op te lossen. We zullen er later in het artikel over praten.
  6. Veilig een FTP-server draaien: FTP staat voor bestandsoverdrachtprotocol. Het runnen van een FTP-server geeft je de controle om alleen die bestanden te delen die je wilde. Daarom kan geen externe peer uw hostbestandssysteem zien en er toegang toe krijgen.

Een Chroot-omgeving maken

Dit is een korte handleiding voor het maken van een chroot-omgeving in uw systeem. U kunt diepgaande informatie krijgen op de boogwiki.

  1. Om een ​​chroot-omgeving te maken, maakt u een nieuwe map in uw thuismap. In deze map zal ons geïsoleerde bestandssysteem in de toekomst aanwezig zijn. In deze zelfstudie heb ik de map de naam “mte” gegeven.
  1. Vervolgens zullen we een zeer minimale Linux-omgeving creëren. Wij installeren bash als een shell in de chroot-omgeving en installeer ls, rmen touch om respectievelijk bestanden weer te geven, te verwijderen en aan te maken. Laten we nu de vereiste mappen maken in onze “mte” -map.
cd ~/mte
mkdir bin
mkdir lib
mkdir lib64
  1. Kopieer de vereiste binaire bestanden van onze reguliere “/bin” map naar onze “~/mte” chroot-omgeving.
cp /bin/bash ~/mte/bin
cp /bin/touch ~/mte/bin
cp /bin/ls ~/mte/bin
cp /bin/rm ~/mte/bin
  1. Het kopiëren van de binaire bestanden is niet voldoende. We moeten ook hun afhankelijkheden kopiëren naar de map “mte”. Om de vereiste afhankelijkheden te kennen, gebruiken we de ldd opdracht. Als je de afhankelijkheid van bash wilt weten, voer dan

We krijgen deze uitvoer van de bovenstaande opdracht.

Chroot Ldd, zelf gevangen genomen
  1. Nu die afhankelijkheden opsommen en ze een voor een kopiëren, zal uiterst traag en saai zijn. Om dit proces te automatiseren, zullen we daarom een ​​bash-script gebruiken. Maak een bestand met de naam “copydependancy.sh” en schrijf deze shell-opdrachten erin.
#Setting the chroot directory
mte="~/mte"
 
# enter your binary name
echo -e "Please enter your binary name n"
 
#Reading from terminal input
read binaryname
 
# Listing all the dependencies
list="$(ldd /bin/$binaryname | egrep -o '/lib.*.[0-9]')"
 
# Looping through the dependency list
for i in $list; do cp -v --parents "$i" "${mte}"; done

Laten we begrijpen wat dit script doet. In eerste instantie vraagt ​​dit shellscript om de binaire naam. Dan neemt het deze binaire naam en vindt alle afhankelijkheid van dat binaire bestand en slaat het op in een lijstvariabele. Vervolgens voert het een for-loop uit die op elk item van de lijst draait en de afhankelijkheid kopieert van ons normale “/bin” -bestand naar onze “mte” chroot-directory.

Sla dit script ergens anders op en verwijs ernaar wanneer u een nieuwe chroot-omgeving maakt.

Wijzig vervolgens de toestemming van het script en voer het uit in onze terminal.

chmod +x copydependancy.sh
  1. Aangezien alle afhankelijkheden in ons systeem zijn geïnstalleerd, laten we onze chroot-omgeving activeren. Het standaard chroot-commando ziet er als volgt uit.
chroot [-OPTION] [PATH FOR NEW ROOT] [PATH FOR SERVER]

Maar om ons doel te bereiken, voeren we de volgende opdracht uit om onze chroot-omgeving te activeren.

sudo chroot ~/mte /bin/bash

De bovenstaande opdracht activeert een chroot-omgeving in de map “~/mte” en specificeert om een ​​bash-shell uit te voeren. Nu kunt u een verandering zien in uw terminalprompt en u kunt nu de . gebruiken touch, rmen ls commando’s om respectievelijk bestanden aan te maken, te verwijderen en weer te geven.

Om de chroot-omgeving te verlaten, kunt u de exit commando om de chroot-omgeving te verlaten.

Als u de chroot-omgeving volledig wilt verwijderen, kunt u eenvoudig de map “mte” uit uw bestandssysteem verwijderen.

Een kapotte bootloader repareren met Chroot

Het meest fascinerende aan chroot is dat je een kapot systeem kunt invoeren en er een commando in kunt uitvoeren. Daarom kun je met behulp van chroot eenvoudig een kritieke update installeren om een ​​systeem te repareren of de hele bootloader opnieuw installeren om het probleem op te lossen.

Maar daarvoor moet je een live Linux-omgeving hebben. Maak een opstartbare USB door een Linux ISO te downloaden en op te starten vanaf de USB. Het geeft je een live omgeving om mee te werken. Koppel nu uw systeempartitie om met chroot te werken.

sudo mount -t ext4 /dev/sda /mnt

Wijzig hier de “/dev/sda” met de naam van uw beoogde systeempartitie waarmee u wilt werken. Laat de grub-bootloader nu de informatie vinden die nodig is om het probleem met de bootloader op te lossen.

sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys

Laten we nu naar de map “/mnt” chrooten en het kapotte systeem invoeren.

Installeer, controleer en update nu de grub-bootloader in uw systeem. Zorg ervoor dat u de juiste stationsnaam gebruikt. Kopieer en plak deze opdracht niet blindelings.

grub-install /dev/sda
grub-install --recheck /dev/sda
update-grub

Verlaat vervolgens de shell met het exit-commando. We noemden het eerder. Ontkoppel nu de eerder bind-directory’s en ontkoppel het bestandssysteem. Voer die opdrachten een voor een achter elkaar uit.

sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo umount /mnt

Start nu uw pc opnieuw op en koppel de live-USB los. Wanneer de computer opstart, zal je grub-bootloader als nieuw schitteren en zou alles perfect moeten werken.

Veel Gestelde Vragen

Is Chroot veilig?

Chroot impliceert geen veiligheid. Het is nooit de bedoeling geweest om er een te worden. Voor de veiligheid kun je SELinux gebruiken. Als je iemand in een chroot-directory plaatst, hebben ze geen toegang tot het rootbestandssysteem. Maar het betekent niet dat het uw systeem onbreekbaar maakt. Chroot betekent niet ook minder veiligheid. Het vertegenwoordigt gewoon een gelijke hoeveelheid beveiliging als uw hoofdsysteem. Niets meer niets minder.

Wat zijn de beperkingen van Chroot-systemen?

Het Chroot-systeem is niet bedoeld om te beschermen tegen opzettelijk temperen door de rootgebruiker. In sommige systemen kunnen chroot-programma’s voldoende rechten krijgen om hun eigen chroot-omgeving te creëren en uit de chroot-gevangenis te ontsnappen. Cheroot betekent niet volledige isolatie. U kunt meestal doen wat u wilt doen in de gebruikersruimte. Je hebt toegang tot hardware-apparaten, je kunt alles mounten en lezen. Dit is op voorwaarde dat je geen ander programma hoeft te installeren, dan heb je het root-privilege nodig dat je niet hebt.

Waarom wordt Chroot gevangenis genoemd?

Chroot wordt een gevangenis genoemd omdat het je opsluit in een geïsoleerde omgeving. Je kunt binnen deze gevangenis doen wat je wilt, maar je kunt er niet buiten blijven zonder de toestemming van de rootgebruiker. Ook heb je een beperkte voorraad hulpprogramma’s die door de rootgebruiker worden geleverd en je kunt niets voor jezelf installeren. Voor al die beperkingen wordt het chroot jail genoemd.

Is dit artikel nuttig?

Abonneer op onze nieuwsbrief!

Onze nieuwste tutorials rechtstreeks in je inbox

Leave a Comment