Hvad er en chroot Fængsel?
en chroot er en operation, der ændrer den tilsyneladende rodmappe for den aktuelle kørende proces og dens børn. De programmer, der kører i dette ændrede miljø, kan ikke få adgang til filerne uden for det udpegede mappetræ. Dette begrænser i det væsentlige deres adgang til et katalogtræ, og dermed får de navnet “chroot jail”.
ideen er, at du opretter et katalogtræ, hvor du kopierer eller linker i alle de systemfiler, der er nødvendige for, at en proces kan køre. Du bruger derefter chroot-systemopkaldet til at ændre rodmappen til at være i bunden af dette nye træ og starte processen, der kører i det chrootede miljø. Da det faktisk ikke kan henvise til stier uden for den ændrede rod, kan den ikke skadeligt læse eller skrive til disse placeringer.
Hvorfor er det nødvendigt, og hvordan er det anderledes end de virtuelle maskiner?
dette er en virtualisering på operativsystemniveau og bruges ofte i stedet for virtuelle maskiner til at oprette flere isolerede forekomster af værts-operativsystemet. Dette er en virtualisering på kerneniveau og har praktisk talt ingen overhead sammenlignet med virtuelle maskiner, som er en virtualisering af applikationslag, hvilket giver en meget god metode til at oprette flere isolerede forekomster på det samme udstyr. En virtuel maskine (VM) er en programmel implementering af en maskine, og de udnytter ofte, hvad der er kendt som udstyr virtualisering til at gøre en virtuel billeder af et fungerende operativsystem.
Hvordan bruger jeg det?
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 /path/to/new/root /path/to/server
Bemærk: Kun en root / privilegeret bruger kan bruge chroot-systemopkaldet. En ikke-privilegeret bruger med adgang til kommandoen kan omgå chroot-fængslet.
trin til at oprette et mini-fængsel til kommandoen ‘bash’ og ‘ls’
1. Opret en mappe, der vil fungere som roden af 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 nødvendige mapper ændres. Logisk set opretter vi alle disse mapper for at opbevare en kopi af krævede biblioteker. For at se, hvad alle mapper er påkrævet, se trin 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu
3.Kør kommandoen’ hvilken’: Kør kommandoen ‘hvilken’ for at finde placeringen af kommandoen ls og bash. Efter at have kørt hvilken kommando, skal du kopiere disse binære filer i ‘bin’ – mappen i vores Fængsel. Sørg for, at du ikke har nogen af disse kommandoer aliaseret. Fra nu af vil vi henvise til vores bibliotek som ‘fængslet’ bibliotek 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 at eksekverbare filer i Vores fængslede bibliotek skal fungere, skal vi kopiere de relevante biblioteker / objekter i den fængslede mappe. Som standard ser den eksekverbare på de steder, der starter med’/’. For at finde afhængighederne 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.
$ 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-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 mappestruktur skal svare til denne,
5. Sudo chroot: Kør denne kommando for at ændre roden til den fængslede mappe 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 ikke (hvilket er indlysende), eller når indlæsningsbiblioteket fejler eller ikke er tilgængeligt. Dobbelttjek, om libaries er i korrekt placering.
6. En ny skal skal dukke op: det er vores fængslede bash. Vi har i øjeblikket kun 2 kommandoer installeret, bash og ls. Heldigvis er cd og PV indbygget kommandoer i bash shell, og så kan du også bruge dem.
gå rundt i biblioteket, prøv at få adgang til ‘cd /..eller noget lignende. Prøv at bryde fængslet, sandsynligvis vil du ikke kunne. Kære
at forlade fængslet,
$ exit
den vigtigste og mest interessante del er, at når du løber,
$ ps aux
og find processen, vil du opdage, at der kun er en proces,
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash
interessant nok kører processer i den fængslede skal som en simpel børneproces af denne skal. Alle processer inde i fængslet miljø, er bare simpel brugerniveau proces i værten OS og er isoleret af de navneområder, der leveres af kernen, således er der minimal overhead og som en ekstra fordel får vi isolation.
en kopi af fængslet-bash-mappe forklaret her kan hentes herfra.
på samme måde kan du tilføje flere kommandoer til dit virtuelle fængslede 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 har vi ikke brug for det til vores formål.
dette er alt hvad du behøver at vide om chroot og fængsling af mapper. Vores ultimative mål er at forstå, hvad der er containere, og hvordan er tjenester som f.eks. Hvordan kører sys-admin flere internetservere til flere domæner på en enkelt fysisk maskine. Dette var kun et skridt i retning af at 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 nørd i hjertet med rigelige projekter, der er værd at kigge efter. Hans projektarbejde kan ses her.
hvis du også ønsker at fremvise din blog her, se venligst GBlog for gæsteblogskrivning på GeeksforGeeks.