debootstrap + unshare + chroot
Construir um “mini‑container” sem Docker para entender:
- isolamento por namespaces (UTS/PID/NET/MOUNT/IPC/USER)
- Debian em VM com Internet e
sudofuncionando - Espaço livre: ~1–2 GB
- Rootfs do lab: /debian
sudo apt update
sudo apt install -y debootstrap util-linux iproute2 procpsValide:
sudo debootstrap --help | head
unshare --help | head
ip a | head
ps aux | headsudo mkdir -p /debian
sudo chmod 0755 /debian
sudo debootstrap stable /debian http://deb.debian.org/debianChecagens:
ls /debian | head
test -f /debian/bin/bash && echo "OK: bash existe"sudo unshare --user --map-root-user --mount --uts --ipc --pid --fork chroot /debian bashChecagem dentro do ambiente:
whoami
idVocê deve ver root/uid=0 dentro, mas isso não te transforma em root no host.
Observação:
--map-root-userdepende de--user(user namespace).
Dentro do ambiente:
mount -t proc proc /proc
ps aux | head
cat /proc/uptimePor que isso importa?
/procé pseudo‑filesystem do kernel;ps/top/uptime/freeleem dele.- Sem montar, esses comandos falham ou mostram saída incompleta.
Dentro:
hostname
hostname mini-ns
hostnameNo host (outro terminal):
hostnameDentro muda; no host não muda.
Dentro:
echo $$
ps -p 1 -o pid,comm,args
ps -ef | headNo host (achar o processo):
ps -ef | grep "chroot /debian bash" | grep -v grepA ideia aqui é comparar a saída do ip a em dois cenários.
- Saia do ambiente:
exit- Entre SEM
--nete observe interfaces:
unshare --user --map-root-user --mount --uts --ipc --pid --fork chroot /debian bash
ip a
exit- Entre COM
--nete observe o isolamento:
unshare --user --map-root-user --mount --uts --ipc --pid --net --fork chroot /debian bash
ip a
exitEsperado:
- Sem
--net: você enxerga as interfaces do host (mesmo net namespace). - Com
--net: você enxerga um estado isolado (geralmente sólo).
Envie prints com comando + output, numerados E1…E5:
- E1:
whoamieiddentro do ambiente (root mapeado) - E2:
hostnamedentro ehostnameno host - E3:
ps -p 1 -o pid,comm,argsdentro - E4:
/procmontado:cat /proc/uptime+ps aux | headdentro - E5:
ip asem--neteip acom--net(comparação)
No host:
sudo umount -l /debian/proc 2>/dev/null || true
sudo rm -rf /debianOperation not permittedao criar user namespace → use o fallback comsudo.ps/topfalhando dentro → confirmemount -t proc proc /proc.- Algo travou →
exite desmonte/debian/{proc,sys}no host.