- 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ů.

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?

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
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.
Základní příklad: vězení v /opt/chroot_dir pro spuštění ls

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

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.
Použití chrootu se specifickými ID: –userspec a kontrola /etc/passwd

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
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 :
- Vytvořte pracovní adresář, kam připojíte cílový souborový systém.
- Připojte kořenový oddíl systému, který chcete opravit (například /dev/sda1).
- Pro správnou funkci nástrojů v chrootu navažte mount /proc, /dev a /sys.
- 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í.
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.
Vášnivý spisovatel o světě bytů a technologií obecně. Rád sdílím své znalosti prostřednictvím psaní, a to je to, co budu dělat v tomto blogu, ukážu vám všechny nejzajímavější věci o gadgetech, softwaru, hardwaru, technologických trendech a dalších. Mým cílem je pomoci vám orientovat se v digitálním světě jednoduchým a zábavným způsobem.

