UNIX operētājsistēmu Chroot ir operācija, kas maina šķietamo saknes direktoriju pašreizējam skriešanas procesam un tā bērniem. Programmas, kas darbojas šajā modificētajā vidē, nevar piekļūt failiem, kas atrodas ārpus norādītā direktorija koka. Tas būtībā ierobežo viņu piekļuvi direktoriju kokam un tādējādi viņi iegūst vārdu “Chroot cietums”.
Ideja ir tāda, ka jūs izveidojat direktoriju koku, kurā kopējat vai sasaistīsit visus sistēmas failus, kas nepieciešami palaišanas procesam. Pēc tam jūs izmantojat Chroot System zvanu, lai mainītu saknes direktoriju, lai būtu šī jaunā koka pamatnē, un sākat procesu, kas darbojas šajā sakropļotā vidē. Tā kā tas faktiski nevar atsaukties uz ceļiem ārpus modificētās saknes, tas nevar ļaunprātīgi lasīt vai rakstīt uz šīm vietām.
Kāpēc tas ir nepieciešams un kā tas atšķiras no virtuālajām mašīnām?
Šī ir operatīvās sistēmas līmeņa virtualizācija, un to bieži izmanto virtuālo mašīnu vietā, lai izveidotu vairākus izolētus resursdatora OS gadījumus. Šī ir kodola līmeņa virtualizācija, un tai praktiski nav pieskaitāmu izmaksu, salīdzinot ar virtuālajām mašīnām, kuras ir lietojumprogrammu slāņa virtualizācija, kā rezultātā tā nodrošina ļoti labu metodi vairāku izolētu gadījumu izveidošanai vienā un tajā pašā aparatūrā. Virtuālā mašīna (VM) ir mašīnas programmatūras ieviešana, un viņi bieži izmanto tā dēvēto aparatūras virtualizāciju, lai padarītu darba operētājsistēmas virtuālu attēlu.
Kā izmantot Chroot cietumu
Pamata komanda, lai izveidotu chroot cietumu, ir šāda:
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
Piezīme: Chroot sistēmas zvanu var izmantot tikai saknes/priviliģēts lietotājs. Lietotājs, kas nav privilēģija, ar piekļuvi komandai var apiet Chroot cietumu.
Soļi, lai izveidotu mini sprādzi komandai “bash” un “ls”
1. Izveidojiet direktoriju, kas darbosies kā komandas sakne.
virkne līdz veselam skaitlim
$ mkdir jailed
$ cd jailed
2. Izveidojiet visus būtiskos direktorijus komandai, lai palaistu: Atkarībā no operētājsistēmas var mainīties nepieciešamie direktoriji. Loģiski, ka mēs izveidojam visus šos direktorijus, lai saglabātu nepieciešamo bibliotēku kopiju. Lai redzētu, kādi ir nepieciešami visi direktoriji, skat. 4. darbību.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu3. Izrunā komanda: Palaidiet komandu “Kura”, lai atrastu LS un Bash komandu atrašanās vietu. Pēc tam, kad tiek palaista komandu kopija mūsu cietuma “bin” direktorijā. Pārliecinieties, ka jums nav nevienas no šīm komandām, kas ir aliased. Turpmāk mēs savu direktoriju dēvētu par "Ieslodzīts" direktorijs ērtības labad.
$ 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. Kopēt atbilstošās bibliotēkas/objektus : Par izpildāmiem mūsu Ieslodzīts Darba direktorija mums ir jākopē atbilstošās bibliotēkas/objekti ieslodzītajā direktorijā. Pēc noklusējuma izpildāmā aplūkošana tiek apskatīta vietās, kas sākas ar '/'. Lai atrastu atkarības, mēs izmantojam komandu “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)
Palaidiet šīs komandas, lai izveidotu atbilstošus direktorijus.
$ 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/
Līdzīgi attiecībā uz 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/
Galīgajai direktoriju struktūrai jābūt līdzīgai šai

5. Sudo Chroot: Palaidiet šo komandu, lai mainītu sakni uz ieslodzīto direktoriju kopā ar ceļu uz apvalku. Pēc noklusējuma tas mēģinās ielādēt '/bin/sh' apvalku.
$ cd ..
$ sudo chroot jailed /bin/bash
Jūs varētu saskarties ar šo kļūdu, palaižot Chroot komandu
chroot: failed to run command `/bin/bash': No such file or directoryTas var būt saistīts ar diviem iemesliem, kāpēc fails neeksistē (kas ir acīmredzams), vai arī tad, ja ielādēšanas bibliotēka neizdodas vai nav pieejama. Divkāršs pārbaudiet, ja bibliotēkas atrodas pareizā vietā.
6. Jābūt jaunam apvalkam: Tā ir mūsu ieslodzītā bash. Pašlaik mums ir tikai 2 komandas instalētas bash un ls. Par laimi CD un PWD tiek būvētas komandas bash apvalkā, un tāpēc jūs varat arī tās izmantot.
Klīst pa direktoriju, mēģiniet piekļūt “CD /../” vai kaut ko līdzīgu. Mēģiniet salauzt cietumu, iespējams, jūs to nevarēsit. :)
Lai izietu no cietuma
$ exitVissvarīgākā un interesantākā daļa ir tā, ka, skrienot
$ ps auxun atrodiet procesu, kuru jūs atradīsit, ka ir tikai viens process
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bashInteresanti, ka procesi ieslodzītajā apvalkā darbojas kā vienkāršs šī apvalka bērnu process. Visi procesi ieslodzītajā vidē ir tikai vienkāršs lietotāja līmeņa process resursdatora OS, un tos izolē kodola nodrošinātās nosaukumvietas, tādējādi ir minimālas pieskaitāmās izmaksas un kā papildu ieguvumu mēs iegūstam izolēt.
Līdzīgi jūs varat pievienot vairāk komandu virtuālā cietuma vide. Lai pievienotu sarežģītākas programmas, jums, iespējams, vajadzēs izveidot vairāk direktoriju, piemēram, “/proc” un “/dev”. Tie palielina procesa sarežģītību. Cerams, ka mēs to neprasīsim savam mērķim.
Tas ir viss, kas jums jāzina par Chroot un direktoriju ieslodzīšanu. Mūsu galvenais mērķis ir saprast, kas ir konteineri un kā ir tādi pakalpojumi kā AWS (Amazon Web Services) Google Cloud un Docker, kas pēc pieprasījuma var nodrošināt tik daudz virtuālo operētājsistēmu gadījumu. Kā arī vienas fiziskās mašīnas sys-admin darbojas vairākus tīmekļa serverus vairākiem domēniem. Tas bija tikai viens solis, lai to izprastu