Kommandot chroot skapar en isolerad miljö på Linux genom att ändra rotkatalogen för alla pågående processer.
Vill du köra applikationer eller tjänster i ett isolerat utrymme på Linux? Eller kanske du vill testa och felsöka ett program utan att det stör resten av ditt system? I så fall vill du lära dig mer om chroot, en kraftfull mekanism inbyggd i Linux som låter dig skapa en separat miljö i ditt system.
Låt oss utforska chroot i detalj, lära oss om dess fördelar, användningsfall, hur man ställer in det på ett Linux-system och om det behövs, hur man undviker det.
Vad är chroot i Linux?
chroot eller change-root är utan tvekan en av de enklaste och uråldriga formerna av containeriseringsprogramvara som tillåter en användare att säkert sandboxa applikationer och tjänster. Sandboxing, i datortermer, är processen att isolera ett program i ett begränsat utrymme med fördefinierade resurser.
Om du är bekant med Docker och hur det fungerar, du kan tänka på chroot som en kraftigt avskalad version av den. chroot fungerar genom att ändra rotkatalogen för ett program, begränsa åtkomst och synlighet och på så sätt ge ett extra lager av isolering och säkerhet.
I huvudsak skapar du en separat katalog, kopierar över alla programmets beroenden till den nya katalogen och kör sedan kommandot chroot. Detta gör att programmet fungerar korrekt utan att ha tillgång till basfilsystemet.
att chroota ett program är ett utmärkt sätt att testa dess tillförlitlighet på ett säkert utrymme utan att ändra själva systemets filer. Dessutom kan du också minska säkerhetsrisken som orsakas av ett komprometterat paket, eftersom i en chrootad miljö kommer det komprometterade paketet inte att kunna komma åt och ändra känsliga systemfiler.
Programmet kommer bara att kunna komma åt och visa filer som importerats till den chrootade katalogen, även känd som "chroot jail". Detta hindrar programmet och dess delprocesser från att störa bassystemet.
Vad är ett chroot-fängelse?
Ett chroot-fängelse är en isolerad miljö där chroot-program finns och körs. Termen chroot jail kommer från konceptet att processen och dess delprocesser inuti den chrooted miljön har ingen åtkomst eller synlighet till basfilsystemet och är fångade inom gränserna för chroot med förutbestämda Resurser.
Nu när begreppet chroot är klart för dig, låt oss komma igång och lära oss hur du kan skapa ett chroot-fängelse och skapa processer i det.
Hur man skapar ett chroot-fängelse och kör program i det
Ett chroot-fängelse är i huvudsak en katalog som innehåller alla nödvändiga resurser, filer, binärer och andra beroenden som ett program skulle behöva för att fungera korrekt.
Men till skillnad från i en vanlig Linux-miljö är chroot-fängelsets miljö mycket begränsad och programmet kan inte komma åt externa eller ytterligare filer och systemresurser.
Till exempel, för att köra Bash-skalet i ett chroot-fängelse, skulle du behöva kopiera över Bash-binären och alla dess beroenden till chroot-katalogen.
Här är stegen för att skapa ett chroot-fängelse och skapa ett Bash-skal:
- För att ett program ska köras framgångsrikt måste du kopiera alla dess beroenden till den chrootade katalogen. Låt oss hitta binären, i det här fallet, Bash, och platsen för alla dess beroenden med hjälp av vilka och ldd-kommandona:
vilken bash
ldd /usr/bin/bash - Nu när du känner till placeringen av binären och dess beroenden, kopiera dem till katalogen som du vill förvandla till ett chroot-fängelse. Använd kommandot mkdir skapa de nödvändiga katalogerna och använd kommandot cp, kopiera alla filer till motsvarande kataloger:
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
- Slutligen, med programmet och dess beroenden kopierade, kan du köra chroot-kommandot med förhöjda privilegier genom att använda prefixet sudo för att skapa chroot-miljön i den valda katalogen. Som standard kommer det att skapa ett Bash-skal. Här är kommandot att skriva in:
sudo chroot katalognamn
Det är alla stegen för att skapa ett chroot-fängelse och köra ett program inuti det.
Hur man bryter sig ur ett chroot-fängelse
Även om chroot-fängelser är bra för att testa instabil programvara, är de också användbara vid hantering av SSH-anslutningar eftersom chroot av anslutna användare är en av många sätt att säkra din SSH-server.
Å andra sidan, om du är en penetrationstestare och har loggat in på ditt måls SSH-server, kan det vara frustrerande att upptäcka att det är en chrooted miljö och kännas som en återvändsgränd.
Det finns dock ganska många sätt att fly ut ur ett felkonfigurerat chroot-fängelse, vissa kräver C-programmeringskunskaper medan andra kan automatiseras med verktyg. Några enkla sätt att chroot escape är:
- Kapslade chroot-samtal
- Kapslade chroot-samtal med sparad filbeskrivning
- Montera rotmetoden
- procfs fly
- ptrace flykt
Observera att för att utföra chroot-escape med någon av dessa metoder, måste du ha eskalerade privilegier i systemet. Lär dig mer om dessa flyktmetoder genom att gå över till chw00ts GitHub-förråd, ett chroot escape-automatiseringsverktyg.
Nu vet du allt om chroot i Linux
Nu när du vet vad chroot är, hur det fungerar och hur man implementerar det, bör du kunna sandboxa applikationer utan ansträngning från terminalen. Tänk på att det som du vet finns flera sätt att bryta sig ur en chrooted miljö.
Detta visar att chroot inte på något sätt var designat för att implementeras som en säkerhetsfunktion. Så du bör använda chroot med stor försiktighet eftersom en felaktig konfiguration kan sluta med att slå tillbaka och äventyra säkerheten för ditt system.
Det är bäst att hålla sig till dedikerade sandlådelösningar som containeriseringsprogram eller virtuella maskiner. Båda är centrerade kring sandboxning och säkerhet, så om det inte finns en ny nolldag i stan, skulle du inte behöva oroa dig för säkerheten och integriteten hos ditt system.
Om du är osäker på vilken du ska välja mellan containerisering och virtualiseringsprogram, bör du prova båda och själv se vilken som är bäst.