GeeksforGeeks

Hva er en chroot Fengsel?

en chroot på unix-operativsystemer er en operasjon som endrer den tilsynelatende rotkatalogen for den nåværende kjørende prosessen og dens barn. Programmene som kjører i dette endrede miljøet, får ikke tilgang til filene utenfor det angitte katalogtreet. Dette begrenser i hovedsak deres tilgang til et katalogtre, og dermed får de navnet «chroot jail».

tanken er at du oppretter et katalogtre der du kopierer eller kobler i alle systemfilene som trengs for at en prosess skal kjøre. Du bruker deretter chroot – systemkallet til å endre rotkatalogen til å være ved foten av dette nye treet og starte prosessen som kjører i det chrooted miljøet. Siden den ikke kan referere til baner utenfor den modifiserte roten, kan den ikke skadelig lese eller skrive til disse stedene.

hvorfor er det nødvendig og hvordan er det forskjellig fra de virtuelle maskinene?
dette er en Virtualisering På Operativsystemnivå og brukes ofte i stedet for virtuelle maskiner for å opprette flere isolerte forekomster av vertsoperativsystemet. Dette er en kjernevirtualisering og har praktisk talt ingen overhead i forhold til Virtuelle Maskiner, som er en applikasjonslag virtualisering, som et resultat det 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 Maskinvarevirtualisering for å gjengi virtuelle bilder av et fungerende operativsystem.

hvordan bruker jeg det?
den grunnleggende kommandoen for å lage et chroot fengsel er som følger:

 chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /path/to/new/root /path/to/server

Merk: Bare en rot / privilegert bruker kan bruke chroot systemanrop. En ikke-privilegert bruker med tilgang til kommandoen kan omgå chroot fengsel.

Trinn for å opprette en 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 kommandoen å kjøre: avhengig av operativsystemet, kan de nødvendige katalogene endres. Logisk lager vi alle disse katalogene for å beholde en kopi av nødvendige biblioteker. Hvis du vil se Hva alle kataloger kreves, kan Du se Trinn 4.

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

3.Kjør kommandoen ‘which’: Kjør kommandoen’ which ‘ for å finne plasseringen av ls og bash-kommandoen. Etter å ha kjørt hvilken kommando, kopier de binærfilene i’ bin ‘ – katalogen i fengselet vårt. Pass på at du ikke har noen av disse kommandoene aliasert. Fra nå av vil vi henvise til vår katalog 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 aktuelle biblioteker / objekter: for kjør i Vår Fengslet katalogen til å fungere må vi kopiere de aktuelle biblioteker / objekter i FENGSLET katalogen. Som standard ser den kjørbare på stedene som starter 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 å opprette passende kataloger.

$ 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/

På Samme måte 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-liux-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,

 Chroot Jail

5. Sudo chroot: Kjør denne kommandoen for å endre roten til DEN FENGSLEDE katalogen, sammen med banen til skallet. Som standard vil det 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 2 grunner, enten filen ikke eksisterer (som er åpenbart), eller når lastebiblioteket mislykkes eller ikke er tilgjengelig. Dobbeltsjekk om bøkene er på riktig sted.

6. Et nytt skall må dukke opp: det er vår fengslede bash. Vi har for tiden bare 2 kommandoer installert, bash og ls. Heldigvis er cd og pwd innebygde kommandoer i bash shell, og så kan du også bruke dem.

Streife rundt katalogen, prøv å få tilgang til ‘ cd/../ ‘eller noe lignende. Prøv å bryte fengselet, sannsynligvis vil du ikke kunne. 🙂

for å gå ut av fengselet,

 $ exit

Den viktigste og mest interessante delen er at når du kjører,

 $ ps aux

og finne prosessen, vil du finne at det er bare en prosess,

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

Interessant, prosesser i fengslet skallet kjøre som en enkel barn prosessen med dette skallet. Alle prosessene inne I FENGSLET miljø, er bare enkel brukernivå prosess i verten OS og er isolert av navnerom levert av kjernen, og dermed er det minimal overhead og som en ekstra fordel får vi isolasjon.

en kopi av fengslet-bash-katalogen forklart her kan lastes ned herfra.

på Samme måte kan du legge til flere kommandoer i det virtuelle fengslede miljøet. For å legge til mer komplekse programmer, må du kanskje opprette flere kataloger, som ‘/ proc ‘ og ‘/dev’. Dette øker kompleksiteten i prosessen. Forhåpentligvis trenger vi ikke det for 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 web-servere for flere domener på en enkelt fysisk maskin. Dette var bare ett skritt mot å forstå det 🙂

  • https://help.ubuntu.com/community/DebootstrapChroot
  • https://wiki.archlinux.org/index.php/Install_from_existing_Linux
  • http://serverfault.com/questions/162362/chroot-fails-cannot-run-command-bin-bash-no-such-file-or-directory
  • https://wiki.archlinux.org/index.php/change_root

Om Forfatteren:
Pinkesh Badjatiya kommer fra Iiit Hyderabad. Han er en geek på hjertet med rikelig prosjekter verdt å se etter. Hans prosjektarbeid kan ses her.

hvis du også ønsker å vise frem bloggen din her, kan Du se GBlog for gjestebloggskriving På GeeksforGeeks.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.