Wat is een chroot Jail?
een chroot op Unix-besturingssystemen is een bewerking die de schijnbare root-map verandert voor het huidige draaiende proces en zijn kinderen. De programma ‘ s die in deze gewijzigde omgeving draaien, kunnen geen toegang krijgen tot de bestanden buiten de aangewezen mapstructuur. Dit beperkt in wezen hun toegang tot een directory tree en zo krijgen ze de naam “chroot jail”.
het idee is dat u een mapstructuur maakt waarin u alle systeembestanden kopieert of linkt die nodig zijn om een proces uit te voeren. Je gebruikt dan de chroot systeem aanroep om de root directory aan de basis van deze nieuwe boom te veranderen en het proces te starten in die gechrooteerde omgeving. Omdat het geen paden buiten de gewijzigde root kan verwijzen, kan het niet kwaadwillig lezen of schrijven naar die locaties.
Waarom is het nodig en hoe verschilt het van de virtuele machines?
dit is een virtualisatie op Besturingssysteem niveau en wordt vaak gebruikt in plaats van virtuele machines om meerdere geïsoleerde exemplaren van het host-besturingssysteem te maken. Dit is een kernel niveau virtualisatie en heeft praktisch geen overhead in vergelijking met virtuele Machines, die een applicatielaag virtualisatie zijn, als gevolg daarvan biedt het een zeer goede methode voor het maken van meerdere geïsoleerde instanties op dezelfde hardware. Een virtuele machine (VM) is een software-implementatie van een machine en ze vaak exploiteren wat bekend staat als de Hardware virtualisatie om een virtuele beelden van een werkend besturingssysteem te maken.
Hoe gebruik ik het?
het basis commando om een chroot jail aan te maken is als volgt:
chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /path/to/new/root /path/to/server
opmerking: Alleen een root / geprivilegieerde gebruiker kan de chroot systeemaanroep gebruiken. Een niet-geprivilegieerde gebruiker met de toegang tot het commando kan de chroot jail omzeilen.
stappen om een mini-jail te maken voor de opdracht’ bash ‘en’ ls ‘
1. Maak een directory aan die zal fungeren als de root van het commando.
$ mkdir jailed $ cd jailed
2. Maak alle essentiële directory ’s aan voor het uit te voeren commando: afhankelijk van uw besturingssysteem kunnen de benodigde directory’ s veranderen. Logischerwijs maken we al deze mappen om een kopie van de vereiste bibliotheken te bewaren. Om te zien wat alle mappen nodig zijn, zie stap 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu
3.Voer het commando’ which ‘uit : voer het commando’ which ‘ uit om de locatie van het commando ls en bash te vinden. Na het uitvoeren van welk commando, kopieer die binaries in de’ bin ‘ directory van onze jail. Zorg ervoor dat je geen van deze commando ‘ s aliased. Vanaf nu, zouden we verwijzen naar onze directory als ‘Jailed’ directory voor het gemak.
$ 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. Copy appropriate libraries/objects : om de uitvoerbare bestanden in onze Jailed directory te laten werken, moeten we de juiste libraries/objects in de JAILED directory kopiëren. Standaard kijkt het uitvoerbare bestand naar de locaties die beginnen met’/’. Om de afhankelijkheden te vinden gebruiken we het commando ‘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)
Voer de volgende commando ‘ s uit om de juiste mappen te maken.
$ 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/
evenzo voor 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/
de uiteindelijke mapstructuur moet vergelijkbaar zijn met deze,
5. Sudo chroot: voer dit commando uit om de root naar de JAILED directory te veranderen, samen met het pad naar de shell. Standaard zal het proberen om’/bin / sh ‘ shell te laden.
$ cd .. $ sudo chroot jailed /bin/bash
deze fout kan optreden tijdens het uitvoeren van het chroot-Commando,
chroot: failed to run command `/bin/bash': No such file or directory
dit kan te wijten zijn aan 2 redenen, ofwel het bestand bestaat niet(wat duidelijk is), of wanneer de laadbibliotheek mislukt of niet beschikbaar is. Controleer of de libaries op de juiste locatie zijn.
6. Een nieuwe shell moet opduiken: het is onze gevangen bash. We hebben momenteel slechts 2 Commando ‘ s geïnstalleerd, bash en ls. Gelukkig zijn cd en pwd ingebouwde commando ‘ s in bash shell, en dus kun je ze ook gebruiken.
zwerven door de map, probeer toegang te krijgen tot ‘cd/..of iets dergelijks. Probeer de gevangenis te doorbreken, dat zal je waarschijnlijk niet kunnen. 🙂
om uit de gevangenis te komen,
$ exit
het belangrijkste en interessantste deel is dat, wanneer je,
$ ps aux
en als je het proces vindt, zul je zien dat er maar één proces is,
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash
interessant is dat processen in de jailed shell worden uitgevoerd als een eenvoudig dochterproces van deze shell. Alle processen in de JAILED omgeving, zijn gewoon eenvoudig gebruikersniveau proces in de host OS en worden geà soleerd door de namespaces die door de kernel, dus er is een minimale overhead en als een extra voordeel krijgen we isolatie.
een kopie van de hier beschreven jailed-bash-directory kan hier worden gedownload.
op dezelfde manier kunt u meer opdrachten toevoegen aan uw virtuele jailed-omgeving. Om meer complexe programma ’s toe te voegen, moet je misschien meer mappen aanmaken, zoals’ /proc ‘en’/dev’. Deze verhogen de complexiteit van het proces. Hopelijk hebben we het niet nodig voor ons doel.
dit is alles wat u moet weten over chroot en het jailen van mappen. Ons uiteindelijke doel is om te begrijpen wat zijn containers en hoe zijn diensten zoals AWS( Amazon Web Services), Google Cloud en Docker in staat om zo veel virtuele exemplaren van besturingssystemen op de vraag. Ook, Hoe werkt sys-admin draaien meerdere web-servers voor meerdere domeinen op een enkele fysieke machine. Dit was slechts een stap om het te begrijpen 🙂
- 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
over de auteur:
Pinkesh Badjatiya komt uit IIIT Hyderabad. Hij is een geek in hart en nieren met ruime projecten het zoeken waard. Zijn projectwerk is hier te zien.
als u ook uw blog hier wilt laten zien, raadpleeg dan GBlog voor het schrijven van gastblog op GeeksforGeeks.