Een chroot op UNIX -besturingssystemen is een bewerking die de schijnbare hoofdmap verandert voor het huidige loopproces en zijn kinderen. De programma's die in deze gewijzigde omgeving worden uitgevoerd, hebben geen toegang tot de bestanden buiten de aangewezen directory -boom. Dit beperkt in wezen hun toegang tot een directory -boom en krijgen dus de naam 'Chroot gevangenis'.
Het idee is dat u een directory -boom maakt waar u alle systeembestanden kopieert of koppelt om een proces te laten uitvoeren. Vervolgens gebruikt u de chroot -systeemoproep om de hoofdmap te wijzigen om aan de basis van deze nieuwe boom te staan en het proces in die gechrootte omgeving te starten. Omdat het daadwerkelijk niet verwijzen naar paden buiten de gewijzigde root, kan het die locaties niet kwaadwillig lezen of schrijven.
Waarom is het vereist en hoe is het anders dan de virtuele machines?
Dit is virtualisatie op het besturingssysteem en wordt vaak gebruikt in plaats van virtuele machines om meerdere geïsoleerde instanties van het host-besturingssysteem te maken. Dit is een virtualisatie op kernelniveau en heeft praktisch geen overhead in vergelijking met virtuele machines die virtualisatie van applicatiesaags zijn, het biedt een zeer goede methode voor het maken van meerdere geïsoleerde instanties op dezelfde hardware. Een virtuele machine (VM) is een software -implementatie van een machine en ze maken vaak gebruik van wat bekend staat als hardwarevirtualisatie om een virtueel beeld van een werkend besturingssysteem te maken.
Hoe u Chroot -gevangenis kunt gebruiken
Het basisopdracht om een chroot -gevangenis te maken is als volgt:
chroot /path/to/new/root command
OR
chroot /path/to/new/root /path/to/server
OR
chroot [options] /path/to/new/root /path/to/server
Opmerking: alleen een root/bevoorrechte gebruiker kan de chroot -systeemoproep gebruiken. Een niet-bevoorrechte gebruiker met de toegang tot de opdracht kan de chroot-gevangenis omzeilen.
Stappen om een mini-jail te maken voor de opdracht 'bash' en het 'ls'
1. Maak een map die zal fungeren als de wortel van het commando.
$ mkdir jailed
$ cd jailed
2. Maak alle essentiële mappen voor het uitvoeren van de opdracht: Afhankelijk van uw besturingssysteem kunnen de vereiste mappen veranderen. Logisch gezien maken we al deze mappen om een kopie van de vereiste bibliotheken te behouden. Zie Stap 4 om te zien wat alle mappen nodig zijn.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu3. Run het 'welke' commando: Voer het 'Welkcommando' uit om de locatie van LS en Bash Command te vinden. Na het uitvoeren van die binaire bestanden in de 'bin' -directory van onze gevangenis. Zorg ervoor dat u geen van deze opdrachten aliased hebt. Vanaf nu zouden we verwijzen naar onze directory als 'Gevangen gezet' Directory voor gemak.
$ unalias ls # Required only if you have aliased ls command
$ unalias bash # Required only if you have aliased bash command
$ cp $(which ls) ./bin/
$ cp $(which bash) ./bin/
4. Kopieer geschikte bibliotheken/objecten : Voor de uitvoerbare bestanden in onze Gevangen Directory To Work We moeten de juiste bibliotheken/objecten in de Jailed Directory kopiëren. Standaard kijkt het uitvoerbare bestand naar de locaties die beginnen met '/'. Om de afhankelijkheden te vinden, gebruiken we de opdracht 'LDD'
$ ldd $(which bash)
linux-vdso.so.1 => (0x00007ffc75dd4000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000)
/lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)
Voer de volgende opdrachten uit om geschikte mappen te maken.
$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/
Evenzo voor LS
$ ldd $(which ls)
linux-vdso.so.1 => (0x00007fff4f05d000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000)
/lib64/ld-linux-x86-64.so.2 (0x000055e836c69000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/
$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/
De uiteindelijke directorystructuur moet hiermee vergelijkbaar zijn

5. Sudo Chroot: Voer dit commando uit om de wortel te wijzigen in de gevangenismap, samen met het pad naar de schaal. Standaard probeert het '/bin/sh' shell te laden.
$ cd ..
$ sudo chroot jailed /bin/bash
U kunt deze fout onder ogen zien tijdens het uitvoeren van het chroot -opdracht
chroot: failed to run command `/bin/bash': No such file or directoryDit kan te wijten zijn aan 2 redenen waarom het bestand niet bestaat (wat duidelijk is) of wanneer de laadbibliotheek mislukt of niet beschikbaar is. Controleer dubbel als de bibliotheken zich op de juiste locatie bevinden.
6. Er moet een nieuwe schaal opduiken: Het is onze gevangene bash. We hebben momenteel slechts 2 opdrachten geïnstalleerd Bash en LS. Gelukkig zijn CD en PWD gebouwde opdrachten in Bash Shell en dus kunt u ze ook gebruiken.
Groeste rond de map Probeer toegang te krijgen tot 'CD /../' of iets dergelijks. Probeer de gevangenis te breken, waarschijnlijk niet in staat dat niet kan. :)
Om uit de gevangenis te gaan
$ exitHet belangrijkste en interessante deel is dat wanneer je rent
$ ps auxen vind het proces dat u zult merken dat er maar één proces is
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bashInteressant is dat processen in de gevangenis die Shell wordt uitgevoerd als een eenvoudig kindproces van deze schaal. Alle processen in de gevangenisomgeving zijn gewoon een eenvoudig proces van gebruikersniveau in het host -besturingssysteem en worden geïsoleerd door de naamruimten die door de kernel worden geboden, dus er is minimale overhead en als een extra voordeel krijgen we isolatie.
Evenzo kunt u meer opdrachten toevoegen aan uw virtuele gevangenisomgeving. Om meer complexe programma's toe te voegen, moet u mogelijk meer mappen maken zoals '/proc' en '/dev'. Deze vergroten de complexiteit van het proces. Hopelijk hebben we het niet nodig voor ons doel.
Dit is alles wat je moet weten over chroot en de gevangenisstraf van mappen. Ons ultieme doel is om te begrijpen wat containers zijn en hoe diensten zoals AWS (Amazon Web Services) Google Cloud en Docker in staat zijn om zoveel virtuele exemplaren van besturingssystemen op aanvraag te bieden. Ook hoe voert SYS-Admin meerdere web-servers uit voor meerdere domeinen op een enkele fysieke machine. Dit was slechts een stap om het te begrijpen