Jak krok za krokem vytvořit chroot jail ve WSL2

Poslední aktualizace: 27/08/2025
Autor: Isaac
  • Chroot izoluje procesy změnou kořenového adresáře jejich souborů na adresář.
  • Vězení vyžaduje zkopírování binárních souborů a knihoven pomocí ldd.
  • Lze jej použít pro testování, omezené služby a obnovu.
  • Ve WSL2 to funguje stejně, s praktickými nuancemi tras a úchytů.

Průvodce Chrootem ve WSL2

Vytvoření chroot jailu ve WSL2 je jednoduchý a účinný způsob, jak izolovat procesy v rámci vaší linuxové distribuce na Windows ( povolení vývojářského režimu ve Windows 11 ), ideální pro testování bez obav z poškození. I když se nejedná o virtuální stroj ani kontejner, při správné konfiguraci umožňuje omezit rozsah příkazů a aplikací na konkrétní adresářový strom.

V následujících řádcích najdete podrobného návodu krok za krokem , který integruje klasické postupy chroot v Linuxu (kopírování binárních souborů a závislostí pomocí ldd, připojení /proc, /dev a /sys v případě potřeby, úprava promptu atd.) spolu s nuancemi a užitečnými zkratkami ve WSL2. Uvidíte typické použití, omezení, kterých je třeba si být vědom, a různé způsoby, jak vstoupit do prostředí chroot v závislosti na vaší situaci.

Co je to chroot cage a kdy je nejlepší ji použít?

Koncept chrootu

Příkaz chroot změní kořenový adresář souborového systému procesu na vámi zvolený adresář; od tohoto okamžiku proces „věří“, že jeho / je adresář chroot . V praxi se používá v několika velmi užitečných scénářích:

  • Testovací sandbox spouštět podezřelé nebo nedůvěryhodné programy, aniž by to ovlivnilo ostatní.
  • Izolace síťových služeb, například FTP server nebo dokonce webový server, což omezuje to, co můžete vidět a čeho se můžete dotknout.
  • Omezená prostředí na zařízeních nebo systémech, kde by uživatelé měli mít k dispozici pouze minimální sadu funkcí.
  • Obnova systémůNabootujete z LiveCD, chrootnete poškozený systém a opravíte ho zevnitř.

Před vytvořením chrootu je třeba dodržovat zlaté pravidlo: uvnitř prostředí chroot musíte umístit vše, co budete používat (binární soubory, knihovny, konfigurační soubory a v případě potřeby pseudosystémy jako /proc, /dev a /sys připojené pomocí bind). Pokud v prostředí chroot není k dispozici utilita, nebude fungovat.

Klíčové požadavky a koncepty před zahájením

Požadavky Chroot

Pro práci s chrootem na jakémkoli linuxovém systému (včetně distribuce v rámci WSL2) potřebujete root oprávnění . Ve WSL2 se můžete přihlásit jako root spuštěním následujícího příkazu ve Windows: `wsl -d NázevDistribuce -u root` nebo zvýšením root oprávnění v rámci relace pomocí `su -`, pokud to máte nakonfigurováno.

Dále je důležité si uvědomit, že chroot není stoprocentně spolehlivé bezpečnostní řešení : izoluje vás na úrovni souborového systému, ale není ekvivalentem robustního sandboxu, jako jsou kontejnery s jmennými prostory/cgroups. I tak je pro výše popsané scénáře neuvěřitelně praktický a jeho nastavení je rychlé.

Nakonec nezapomeňte, že ne všechny démony a programy fungují v prostředí chroot dobře . Některé očekávají systémové struktury, sockety nebo služby, které nejsou přítomny. Sendmail je klasickým příkladem programu, který může způsobovat problémy.

  Jak stáhnout a používat nástroj pro tvorbu médií ve Windows 11

Základní příklad: vězení v /opt/chroot_dir pro spuštění ls

Základní příklad chrootu

Začněme jednoduchým příkladem: vytvořením adresáře chroot v /opt/chroot_dir , kde můžeme spustit ls (a bash) a zkopírovat potřebné knihovny. Toto funguje stejně dobře ve WSL2 i v jakékoli standardní linuxové distribuci.

Identifikujte binární závislosti pomocí ldd. Je velmi pohodlné dívat se současně na bash a ls:

ldd /bin/bash /bin/ls

Uvidíte výstup podobný následujícímu, který bude indikovat, které dynamické knihovny je třeba zkopírovat do jailu: libtinfo.so.6, libdl.so.2, libc.so.6, dynamický zavaděč ld-linux atd. Zde je příklad toho, co byste mohli získat:

linux-gate.so.1 => (0x0013c000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2

Dále vytvořte adresářovou strukturu a zkopírujte binární soubory a knihovny do jádra. Upravte cesty podle vašeho systému (ldd vám poskytne přesné vodítko):

mkdir -p /opt/chroot_dir/{bin,lib,lib64,usr/lib}
cp /bin/bash /opt/chroot_dir/bin/
cp /bin/ls   /opt/chroot_dir/bin/
cp /lib/x86_64-linux-gnu/libtinfo.so.6 /opt/chroot_dir/lib/
cp /lib/x86_64-linux-gnu/libdl.so.2    /opt/chroot_dir/lib/
cp /lib/x86_64-linux-gnu/libc.so.6     /opt/chroot_dir/lib/
cp /lib64/ld-linux-x86-64.so.2         /opt/chroot_dir/lib64/

Není to povinné, ale můžete si výzvu v chrootu přizpůsobit tak, aby ji systém okamžitě rozpoznal. Například nastavením PS1 s charakteristickým prefixem :

echo "PS1='JAULA $ '" | sudo tee /opt/chroot_dir/etc/bash.bashrc

Vstupte do klece spuštěním bash jako úvodního procesu :

chroot /opt/chroot_dir /bin/bash

Od té chvíle bude vše, co spustíte uvnitř, omezeno na strom /opt/chroot_dir; nebude to mít vliv na procesy mimo kleci a pokud nějaká závislost chybí, okamžitě to poznáte, protože binární soubor se nespustí.

Vězení pro jednotlivé uživatele: přihlašovací skript a minimální struktura v /home

Klec na uživatele

Dalším přístupem je vytvoření samostatného prostředí pro konkrétního uživatele . Představte si, že chcete uživatele „bird“ omezit na /home/bird s přístupem k bash a základním utilitám, jako jsou ls a cp.

Nejprve vytvořte uživatele ( z root účtu ):

su -
adduser pajaro
passwd pajaro

Dále nastavte „wrapper“ shell, který spustí chroot po přihlášení. Upravte /bin/jaula ve svém oblíbeném editoru a přidejte tento obsah:

vim /bin/jaula
#!/bin/bash
/usr/sbin/chroot /home/pajaro /bin/bash

Udělte skriptu oprávnění ke spuštění , aby mohl být použit jako shell. To je nezbytné pro to, aby jej usermod akceptoval.

chmod a+x /bin/jaula

Nyní vytvořte základní adresářovou strukturu v domovském adresáři uživatele a připravte závislosti. Nezapomeňte, že v závislosti na architektuře budete kromě knihovny lib možná potřebovat i knihovnu lib64.

mkdir -p /home/pajaro/{bin,lib,lib64,usr/lib}

Prohlédněte závislosti v bash a zkopírujte vše, co je uvedeno v ldd:

ldd /bin/bash
cp /bin/bash /home/pajaro/bin/
cp /lib/x86_64-linux-gnu/libtinfo.so.6 /home/pajaro/lib/
cp /lib/x86_64-linux-gnu/libdl.so.2    /home/pajaro/lib/
cp /lib/x86_64-linux-gnu/libc.so.6     /home/pajaro/lib/
cp /lib64/ld-linux-x86-64.so.2         /home/pajaro/lib64/

Obsahuje také často používané utility jako ls a cp a jejich knihovny. Pomocí ldd si ověřte, které soubory byste si měli vzít :

cp /bin/ls /home/pajaro/bin/
cp /bin/cp /home/pajaro/bin/
ldd /bin/ls
ldd /bin/cp

Aby uživatel mohl vstoupit do vězení přímo po přihlášení, přiřaďte mu výchozí shell :

usermod -s /bin/jaula pajaro

Hotovo: Po přihlášení se bird ocitne v chroot adresáři /home/bird a spustí se s minimální sadou nástrojů, které jste zkopírovali.

  Jak rychle získat svou pracovní historii ve formátu PDF z mobilního telefonu

Použití chrootu se specifickými ID: –userspec a kontrola /etc/passwd

chroot s uživatelskou specifikací

Někdy je užitečné vstoupit do prostředí chroot pomocí specifického UID a GID, například pro testování s oprávněními. V chrootu to můžete provést pomocí `--userspec=UID:GID`.

Nejprve identifikujte ID cílového uživatele v souboru /etc/passwd ; k jeho rychlému nalezení můžete použít příkaz grep:

cat /etc/passwd | grep ${usuario}

Pole jsou oddělena dvojtečkami a třetí a čtvrté pole odpovídají UID a GID . S těmito hodnotami spusťte chroot a zadejte požadované ID jailu a ID. Například pokud má jail uživatel UID 1002 a GID 1003 a váš jail se nachází v /usr/src/jaula:

chroot --userspec=1002:1003 /usr/src/jaula/

Pokud se při pokusu o přihlášení zobrazí chybová zpráva, že bash nebyl nalezen v jailu , znamená to, že jste ještě nezkopírovali binární soubor a jeho knihovny do jailované struktury. Opakujte proces ldd na /bin/bash a /bin/ls a přesuňte závislosti na správná místa.

Obnova systému: Chrootování z Live CD

Obnova pomocí LiveCD a chrootu

Další velmi častou situací je použití chrootu k opravě systému nainstalovaného na disku, a to tak, že se nejprve systém nabootuje z LiveCD. To vám umožní přihlásit se do systému, jako byste jej spustili normálně, ale z živého prostředí.

Obecné kroky by byly :

  1. Vytvořte pracovní adresář, kam připojíte cílový souborový systém.
  2. Připojte kořenový oddíl systému, který chcete opravit (například /dev/sda1).
  3. Pro správnou funkci nástrojů v chrootu navažte mount /proc, /dev a /sys.
  4. Spusťte chroot do adresáře mount.
mkdir /media/jaula
mount /dev/sda1 /media/jaula
mount --bind /proc /media/jaula/proc
mount --bind /dev  /media/jaula/dev
mount --bind /sys  /media/jaula/sys
chroot /media/jaula

Volba –bind zpřístupňuje stejný souborový systém na obou místech a zachovává tak prostředí nezbytné pro normální fungování příkazů jako apt, update-initramfs nebo editorů v chrootu.

Užitečné funkce, pokud pracujete ve WSL2

Odlehčený virtuální počítač : Ve WSL2 spouštíte Linux uvnitř odlehčeného virtuálního počítače, ale všechny předchozí kroky platí téměř stejně. Zde je několik praktických tipů, které vám v tomto prostředí usnadní život a které odpovídají tomu, co jsme již probrali:

  • Rychlé přihlášení jako rootVe Windows použijte wsl -d YourDistro -u root k otevření přímé relace root a bezproblémovému připojení jailu.
  • Trasy a montáže: Pokud potřebuješ přístup k souborům Windows, nezapomeňte, že se nacházejí v adresářích /mnt/c, /mnt/d atd. Není obvyklé je připojovat uvnitř chrootu, ale můžete to udělat, pokud to váš případ vyžaduje.
  • /proc, /sys a /devPři přípravě jailu pro spuštění systémových nástrojů v rámci WSL2 můžete použít mount –bind, jak je popsáno v sekci LiveCD, aby vše fungovalo.
  • Skripty a shellVzorec vytvoření /bin/jail a jeho přiřazení pomocí usermod -s funguje ve WSL2 stejně; jen se ujistěte, že jste zkopírovali binární soubory a knihovny kontrolou ldd jako obvykle a vytvářet skripty v bash adekvátní.
  Jak umístit bílé pozadí na Instagram Stories Můžete změnit barvu Instagram Stories.

Přestože WSL2 nabízí izolaci od Windows, chroot jail funguje přímo v distribuci . Pokud hledáte silnější izolaci na úrovni jádra, zvažte její doplnění o vyhrazené kontejnery nebo sandboxy, případně si prostudujte, jak nakonfigurovat WSL2 s vlastním jádrem.

Rozšíření, limity a triky pro kompletnější klec

Pokud vám „klec“ nestačí, v Debianu můžete použít debootstrap k uzavření celého systému do adresáře, čímž se instalace podobá minimální. Je to velmi čistý způsob, jak mít v rámci vaší distribuce uzavřené prostředí, a to i ve WSL2.

Nezapomeňte na již zmíněnou nuanci: ne všechny služby jsou připraveny pro chroot bez další konfigurace (cesty, sockety, stavové soubory atd.). Sendmail je klasickým příkladem. Pro moderní služby může být vhodnější kontejner nebo služba systemd-nspawn, pokud potřebujete něco velmi blízkého minisystému.

Užitečným postupem, jak se vyhnout nejasnostem, je jasně označit příkazový řádek v rámci chroot jail (jak jsme to udělali u PS1) a umístit protokoly a konfigurace do konzistentních cest. Tímto způsobem, ať už se přihlásíte pomocí `chroot --userspec` nebo přes shell `/bin/jaula`, budete vždy vědět, že jste uvnitř.

Pro ukončení prostředí chroot jednoduše spusťte příkaz `exit` v bash relaci, kterou jste spustili pomocí `chroot`; okamžitě se vrátíte do svého normálního prostředí bez jakýchkoli vedlejších účinků, pokud jste zkopírovali pouze to, co bylo nutné.

Pokud chcete do vězení přidat další příkazy, opakujte postup : vyhledejte potřebný binární soubor, prozkoumejte jeho závislosti pomocí ldd a vše zkopírujte do ekvivalentních cest v rámci vězení. Binární soubory obvykle jdou do adresáře bin nebo usr/bin; knihovny jdou do adresáře lib nebo lib64, podle potřeby.

Nakonec budete mít uzavřené prostředí, kde můžete spouštět specifické utility, izolovat jednoduché služby nebo provádět administrativní úlohy bez obav z poškození hlavního systému. S WSL2 je celý proces stejně přímočarý a velmi pohodlný pro testování na Windows bez nutnosti nastavovat náročné virtuální počítače.

Nastavení vývojového prostředí se subsystémem Windows pro Linux
Související článek:
Nastavení vývojového prostředí s WSL ve Windows