En chroot på UNIX -operativsystemer er en operasjon som endrer den tilsynelatende rotkatalogen for den nåværende løpsprosessen og dens barn. Programmene som kjører i dette modifiserte miljøet har ikke tilgang til filene utenfor det angitte katalogtreet. Dette begrenser i hovedsak deres tilgang til et katalogtre, og dermed får de navnet 'Chroot fengsel'.
Tanken er at du oppretter et katalogtre der du kopierer eller kobler inn alle systemfilene som trengs for at en prosess skal kjøres. Du bruker deretter chroot -systemanropet for å endre rotkatalogen for å være ved foten av dette nye treet og starte prosessen som kjører i det chrootte miljøet. Siden den faktisk ikke kan referere til stier utenfor den modifiserte roten, kan den ikke lest eller skrive eller skrive til disse stedene.
Hvorfor kreves det og hvordan er det forskjellig fra de virtuelle maskinene?
Dette er virtualisering av operativsystemnivå og brukes ofte i stedet for virtuelle maskiner for å lage flere isolerte forekomster av verts OS. Dette er en virtualisering av kjernenivå og har praktisk talt ingen overhead sammenlignet med virtuelle maskiner som er applikasjonslagsvirtualisering som et resultat av at den gir en veldig god metode for å lage flere isolerte forekomster på samme maskinvare. En virtuell maskin (VM) er en programvareimplementering av en maskin, og de utnytter ofte det som kalles virtualisering av maskinvare for å gjengi et virtuelt bilde av et fungerende operativsystem.
Hvordan bruke Chroot fengsel
Den grunnleggende kommandoen for å opprette et chroot fengsel 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
Merk: Bare en rot/privilegert bruker kan bruke chroot -systemanropet. En ikke-privilegert bruker med tilgang til kommandoen kan omgå Chroot-fengselet.
java lenket liste
Trinn for å lage et mini-fengsel for 'bash' og 'ls' -kommandoen
1. Opprett en katalog som vil fungere som roten til kommandoen.
$ mkdir jailed
$ cd jailed
2. Lag alle de essensielle katalogene for at kommandoen skal kjøre: Avhengig av operativsystemet ditt kan de nødvendige katalogene endre seg. Logisk lager vi alle disse katalogene for å oppbevare en kopi av nødvendige biblioteker. For å se hva alle kataloger kreves, se trinn 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu
3. Kommando 'som er' som ': Kjør 'hvilken' kommandoen for å finne plasseringen av LS og bash -kommandoen. Etter å ha kjørt som kommandoer disse binærene i 'bin' -katalogen i fengselet vårt. Forsikre deg om at du ikke har noen av disse kommandoene aliaset. Fra nå av vil vi referere til katalogen vår som 'Fengslet' Katalog for enkelhets 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 kjørbare filer i vår Fengslet Katalog for å jobbe vi må kopiere de aktuelle bibliotekene/objektene i den fengslede katalogen. Som standard ser de kjørbare på stedene som begynner med '/'. For å finne avhengighetene bruker 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)
Kjør følgende kommandoer for å lage passende kataloger.
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 katalogstrukturen må være lik denne
5. Sudo Chroot: Kjør denne kommandoen for å endre roten til den fengslede katalogen sammen med banen til skallet. Som standard vil den prøve å laste '/bin/sh' shell.
$ cd ..
$ sudo chroot jailed /bin/bash
Du kan møte denne feilen mens du kjører Chroot -kommandoen
chroot: failed to run command `/bin/bash': No such file or directory
Dette kan skyldes to grunner til at filen ikke eksisterer (noe som er åpenbart) eller når lastebiblioteket mislykkes eller ikke er tilgjengelig. Dobbeltsjekk hvis bibliotekene er på riktig sted.
6. Et nytt skall må dukke opp: Det er vår fengslede bash. Vi har foreløpig bare to kommandoer installert bash og LS. Heldigvis er CD- og PWD -kommandoer i bash shell, og du kan også bruke dem.
Roam rundt katalogen, prøv å få tilgang til 'CD /../' eller noe lignende. Forsøk å bryte fengselet, sannsynligvis vil du ikke kunne. : :)
Å gå ut av fengselet
$ exit
Den viktigste og interessante delen er at når du løper
$ ps aux
og finn prosessen du finner at det bare er en prosess
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash
Interessant er prosesser i det fengslede skallet som en enkel barneprosess for dette skallet. Alle prosessene i det fengslede miljøet er bare enkel brukernivåprosess i verts OS og er isolert av navneområdene levert av kjernen, og det er minimalt overhead, og som en ekstra fordel får vi isolasjon.
eksempler på binære trær
På samme måte kan du legge til flere kommandoer til ditt virtuelle fengslede miljø. For å legge til mer komplekse programmer kan du kanskje lage flere kataloger som '/proc' og '/dev'. Disse øker kompleksiteten i prosessen. Forhåpentligvis krever vi ikke det til vårt formål.
Dette er alt du trenger å vite om Chroot og fengsling av kataloger. Vårt endelige mål er å forstå hva som er containere og hvordan er tjenester som AWS (Amazon Web Services) Google Cloud og Docker i stand til å gi så mange virtuelle forekomster av operativsystemer på forespørsel. Også hvordan kjører Sys-Admin flere webservere for flere domener på en enkelt fysisk maskin. Dette var bare ett skritt mot å forstå det