Voor Linux OS is er een tool beschikbaar, bekend als chroot, die een eenvoudigere en snellere manier biedt om een applicatie te sandboxen. Met chroot kun je elke applicatie installeren en testen zonder de rest van het systeem te beïnvloeden.
In dit artikel wordt uitgelegd hoe u chroot gebruikt in Debian 10 Buster, samen met enkele voorbeelden. Ter verduidelijking zullen we een chroot-omgeving maken voor de bash en enkele van de commando's, zoals de commando's "ls", "ip" en "pwd".
Wat is chroot?
De chroot-tool is een opdracht in Linux die de hoofdmap van een toepassing naar een andere map verandert. Processen die in deze nieuwe hoofdmap worden uitgevoerd, hebben geen toegang tot de bestanden daarbuiten. Daarom isoleert het de bewerkingen van applicaties van de rest van het systeem.
Hoe werkt chroot??
Chroot werkt door de toepassing en al zijn uitvoerbare bestanden en afhankelijkheden in de alternatieve hoofdmap te kopiëren. Vervolgens voert het de toepassing uit vanuit deze alternatieve hoofdmap, waardoor de toepassing deze als de oorspronkelijke hoofdmap beschouwt. De hoofdmap is de bovenste map in de hiërarchie en geen enkele toepassing kan hoger komen dan deze map, dus dit is hoe chroot de toepassing isoleert van de rest van het systeem.
Gebruiksgevallen
- Opzetten van een testomgeving
- 32-bits programma's uitvoeren op een 64-bits systeem
- Oudere programmaversies uitvoeren op de nieuwste versie van het besturingssysteem
- Wachtwoord herstel
Syntaxis
Het volgende is de basissyntaxis voor het chroot-commando:
$ chrootVolg de onderstaande stappen om het chroot-commando in Debian te gebruiken om een chroot-omgeving in te stellen.
1. Een alternatieve hoofdmap maken
Maak eerst een alternatieve root-directory die moet worden gebruikt voor de chroot-omgeving.
$ sudo mkdir ~/new_rootDe bovenstaande opdracht maakt de nieuwe_root map onder de Huis directory, die zal worden gebruikt als de rootdirectory in de chroot-omgeving.
2. Essentiële mappen toevoegen
Maak de mappen "bin", "lib" en "lib64" aan onder de ~/nieuwe_root map:
$ sudo mkdir -p ~/new_root/bin,lib,lib643. Programma-binaire bestanden kopiëren
Alles wat nodig is om een toepassing in de chroot-omgeving uit te voeren, moet in de alternatieve hoofdmap staan. In dit artikel zullen we een chroot-omgeving maken voor de bash en enkele opdrachten, waaronder de opdrachten "ls", "ip" en "pwd". Daarom zullen we de binaire bestanden kopiëren van de /bin map naar de alternatieve ~/new_root/bin map. Om de binaire bestanden van de opdrachten te vinden, gebruikt u de opdracht welke:
$ welke bash is ip pwd
Kopieer vervolgens de binaire bestanden van de opdrachten naar de to ~/new_root/bin map.
$ sudo cp -v /bin/bash,ls,ip,pwd ~/new_root/bin
4. Programma-afhankelijkheden kopiëren
We zullen ook moeten uitzoeken welke afhankelijkheden ons programma nodig heeft. Eerst moeten we uitzoeken wat die afhankelijkheden zijn, en dan zullen we ze kopiëren naar de ~/new_root/lib map.
Afhankelijkheden kopiëren voor bash
Ontdek eerst de afhankelijkheden voor het bash-programma:
$ ldd /bin/bash
Kopieer deze afhankelijkheden vervolgens naar de ~/new_root/lib map.
$ cp -v /lib/x86_64-linux-gnu/libtinfo.zo.6,libdl.zo.2,libc.zo.6 ~/new_root/libKopieer de /lib64-bestanden naar de ~/new_root/lib64 map.
$ cp -v /lib64/ld-linux-x86-64.zo.2 ~/new_root/lib64Afhankelijkheden kopiëren voor ls Command
Zoek eerst de afhankelijkheden voor de opdracht ls:
$ ldd /bin/ls
Kopieer deze afhankelijkheden vervolgens naar de ~/new_root/lib map.
$ sudo cp -v /lib/x86_64-linux-gnu/libselinux.zo.1,libc.zo.6,libpcre.zo.3,libdl.zo.2, libpthread:.zo.0 /lib64/ld-linux-x86-64.zo.2 ~/new_root/lib
Kopieer de /lib64-bestanden naar de ~/new_root/lib64 map.
$ sudo cp -v /lib64/ld-linux-x86-64.zo.2 ~/new_root/lib64Afhankelijkheden kopiëren voor ip-opdracht
Ontdek eerst de afhankelijkheden voor de ip-opdracht:
$ ldd /bin/ip
Kopieer deze afhankelijkheden vervolgens naar de ~/new_root/lib map.
$ cp -v /lib/x86_64-linuxgnu/libselinux.zo.1, laster.zo.1,libmnl.zo.0,libcap.zo.2,libdl.zo.2,libc.zo.6,
libpcre.zo.3,libz.zo.1,libpthread.zo.0 ~/new_root/lib
Kopieer de /lib64-bestanden naar de ~/new_root/lib64 map.
$ sudo cp -v /lib64/ld-linux-x86-64.zo.2 ~/new_root/lib64Afhankelijkheden kopiëren voor pwd Commandd
Zoek eerst de afhankelijkheden voor het pwd-commando:
$ ldd /bin/pwd
Kopieer deze afhankelijkheden vervolgens naar de ~/new_root/lib map.
$ sudo cp -v /lib/x86_64-linux-gnu/libc.zo.6 ~/new_root/libKopieer de /lib64-bestanden naar de ~/new_root/lib64 map.
$ sudo cp -v /lib64/ld-linux-x86-64.zo.2 ~/new_root/lib64Gebruik de volgende opdracht om alle mappen in de alternatieve hoofdmap te bekijken:
$ ls -R
5. Overschakelen naar alternatieve hoofdmap
Nu zijn we eindelijk klaar om over te stappen naar onze nieuwe chroot-omgeving. Om de hoofdmap te wijzigen, voert u de volgende opdracht in de shell uit met rootrechten:
$ sudo chroot ~/new_root /bin/bashWaar ~/nieuwe_root is onze alternatieve hoofdmap en /bin/bash is de applicatie die we hebben gebruikt om de chroot-omgeving in te stellen.
Nadat u de bovenstaande opdracht hebt uitgevoerd, ziet u dat de bash-prompt is gewijzigd in: bash-x.ja wat in ons geval is bash-5.0 (waar 5.0 is het bash-versienummer).
Opmerking: u kunt de volgende fout tegenkomen na het uitvoeren van de chroot-opdracht, zoals ik deed:
Als deze fout optreedt, controleer dan of u alle bibliotheken en uitvoerbare bestanden met betrekking tot het vereiste programma hebt toegevoegd aan de nieuwe hoofdmap.
Nadat je de chroot-omgeving hebt betreden, heb je alleen toegang tot het bestand erin. Probeer de commando's uit te voeren die je hebt ingesteld voor je chroot-omgeving, inclusief enkele ingebouwde commando's. U kunt de ingebouwde commando's vinden door de helpen commando in de shell.
Je kunt zien dat we de commando's "ls", "pw" en "ip" hebben geprobeerd, en ze zijn allemaal gelukt. Als we een ander commando uitvoeren dan deze drie commando's en de ingebouwde commando's, zal het commando mislukken, omdat we het niet hebben ingesteld voor de chroot-omgeving. Zoals je kunt zien in de volgende schermafbeelding, hebben we geprobeerd de commando's "touch", "ping" en "clear" uit te voeren, en ze zijn allemaal mislukt.
6. chroot afsluiten
Gebruik de om de chroot-omgeving te verlaten Uitgang opdracht.
Conclusie
In dit artikel heb je geleerd wat chroot is en hoe het werkt in Linux. Dit artikel liet je stap voor stap zien hoe je chroot in Debian 10 Buster gebruikt om een chroot-omgeving te creëren voor bash en andere commando's. Nu zou u vertrouwd moeten zijn met het gebruik van de chroot-opdracht om de hoofdmap van een proces en zijn subprocessen te wijzigen en deze te isoleren van de rest van het systeem.