logo

Linux virtualisering - Chroot Fængsel

En CHROOT på UNIX -operativsystemer er en operation, der ændrer det tilsyneladende rodkatalog til den aktuelle kørselsproces og dens børn. Programmerne, der kører i dette ændrede miljø, kan ikke få adgang til filerne uden for det udpegede katalogtræ. Dette begrænser i det væsentlige deres adgang til et katalogtræ, og derfor får de navnet 'chroot fængsel'.

Ideen er, at du opretter et katalogtræ, hvor du kopierer eller linker i alle de systemfiler, der er nødvendige for en proces at køre. Derefter bruger du Chroot -systemopkaldet til at ændre rodkataloget til at være i bunden af ​​dette nye træ og starte processen med at køre i det chrootede miljø. Da det faktisk ikke kan referere stier uden for den modificerede rod, kan det ikke ondsindet læse eller skrive til disse placeringer.



Hvorfor kræves det, og hvordan er det anderledes end de virtuelle maskiner?

Dette er virtualisering på driftssystemniveau og bruges ofte i stedet for virtuelle maskiner til at skabe flere isolerede tilfælde af værts-OS. Dette er en virtualisering på kerneliveau og har praktisk talt ingen overhead sammenlignet med virtuelle maskiner, der er applikationslagets virtualisering som et resultat, det giver en meget god metode til at skabe flere isolerede tilfælde på den samme hardware. En virtuel maskine (VM) er en softwareimplementering af en maskine, og de udnytter ofte det, der er kendt som hardware -virtualisering, for at gøre et virtuelt billede af et fungerende operativsystem.

Hvordan man bruger chroot fængsel

Den grundlæggende kommando til at oprette et Chroot -fængsel er som følger:

 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

Bemærk: Kun en rod/privilegeret bruger kan bruge Chroot -systemopkaldet. En ikke-privilegeret bruger med adgangen til kommandoen kan omgå Chroot-fængslet.



i streng i java

Trin til at skabe et mini-fængsel til kommandoen 'bash' og 'ls'


1. Opret et bibliotek, der fungerer som roden til kommandoen.

 $ mkdir jailed  
$ cd jailed

2. Opret alle de væsentlige mapper for kommandoen til at køre: Afhængigt af dit operativsystem kan de krævede mapper ændres. Logisk set opretter vi alle disse mapper for at opbevare en kopi af de krævede biblioteker. For at se, hvad alle mapper kræves, se trin 4.

 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3. Run 'Hvilken' kommando: Kør kommandoen 'hvilken' kommando for at finde placeringen af ​​ls og bash -kommandoen. Efter at køre, hvilken kommandocopy disse binære filer i 'bin' -biblioteket i vores fængsel. Sørg for, at du ikke har nogen af ​​disse kommandoer aliaseret. Fra nu af henviste vi til vores bibliotek som 'Fængslet' Katalog for nemheds skyld.



 $ 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. Kopier passende biblioteker/objekter : For eksekverbare computere i vores Fængslet Katalog til arbejde, vi har brug for for at kopiere de relevante biblioteker/objekter i det fængslede bibliotek. Som standard ser det eksekverbare på de steder, der starter med '/'. For at finde de afhængigheder bruger vi kommandoen '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)

Kør følgende kommandoer for at oprette passende mapper.

sara ali khan alder
$ 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/

Tilsvarende for 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/


Den endelige katalogstruktur skal svare til dette

Chroot fængsel' title=

5. Sudo Chroot: Kør denne kommando for at ændre roden til det fængslede bibliotek sammen med stien til skallen. Som standard vil det forsøge at indlæse '/bin/sh' shell.

 $ cd ..  
$ sudo chroot jailed /bin/bash

Du står muligvis over for denne fejl, mens du kører Chroot -kommandoen 

chroot: failed to run command `/bin/bash': No such file or directory

Dette kan skyldes 2 grunde, enten findes filen (hvilket er indlysende), eller når indlæsningsbiblioteket mislykkes eller ikke er tilgængeligt. Dobbeltkontrol, om bibliotekerne er i korrekt placering.

6. En ny skal dukke op: Det er vores fængslede bash. Vi har i øjeblikket kun 2 kommandoer installeret bash og ls. Heldigvis er CD og PWD indbyggede kommandoer i Bash Shell, og derfor kan du også bruge dem.

Roam rundt på kataloget, prøv at få adgang til 'CD /../' eller noget lignende. Prøv at bryde fængslet sandsynligvis ikke kan du ikke være i stand til det. )

For at forlade fængslet 

 $ exit

Den vigtigste og interessante del er, at når du løber 

 $ ps aux

og find processen, du finder ud af, at der kun er en proces 

root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash

Interessant processer i det fængslede skalløb som en simpel børneproces for denne skal. Alle processer inde i det fængslede miljø er bare enkel brugerniveauproces i værts -OS og er isoleret af navneområdet leveret af kernen, således er der minimal overhead, og som en ekstra fordel får vi isolering.

hvad er forskellen mellem en megabyte og en gigabyte

Tilsvarende kan du tilføje flere kommandoer til dig virtuelt fængslet miljø. For at tilføje mere komplekse programmer skal du muligvis oprette flere mapper som '/proc' og '/dev'. Disse øger kompleksiteten af ​​processen. Forhåbentlig kræver vi ikke det til vores formål.

Dette er alt hvad du behøver at vide om Chroot og fængslet af mapper. Vores ultimative mål er at forstå, hvad der er containere, og hvordan er tjenester som AWS (Amazon Web Services) Google Cloud og Docker i stand til at levere så mange virtuelle forekomster af operativsystemer efter behov. Hvordan kører SYS-Admin flere webservere til flere domæner på en enkelt fysisk maskine. Dette var kun et skridt hen imod at forstå det