O propósito dessa palestra é:
* Entender o que é um ambiente chroot;
* Criar um ambiente chroot;
* Dar subsídios para a pessoa saber criar seus próprios ambientes em chroot.
2. Quem sou eu?
• Trabalhei de 1999 à 2001 no desenvolvimento
de uma distribuição Linux (Conectiva Linux);
• Passei a década de 2000 inteira trabalhando
com Linux;
• Agora eu uso o Mac OS X no desktop, mas
trabalho com Linux em servidores.
3. Propósito da
apresentação
• Entender o que é um ambiente chroot;
• Criar um ambiente chroot;
• Dar subsídios para a pessoa saber criar seus
próprios ambientes em chroot.
4. O que é um chroot?
• É uma chamada de sistema (chroot syscall);
• É um comando do Unix (chroot);
• Permite trocar o root do sistema de arquivos
para um outro diretório;
• Na prática, permite isolar,em uma gaiola um
programa, serviço ou distribuição;
• Não é virtualização ou paravirtualização!
6. Para que serve?
• Permite criar ambientes isolados (gaiolas) de
desenvolvimento, sem contaminar o ambiente
original;
• Permite criar gaiolas para rodar serviços (ssh,
httpd, dns) em separado e protegido;
Não existe
mecanismo
100% seguro!
7. Executando o chroot
• chroot em /var/chroot (tanto faz o lugar)
• /usr/sbin/chroot /var/chroot
• /usr/sbin/chroot /var/chroot /bin/bash
• O /var/chroot/ vira o / para o bash (do chroot)
8. chroot com o Busybox
“busybox.i386 : Statically linked binary providing simplified
versions of system commands” (yum)
$ sudo mkdir -p /var/chroot/bin
$ sudo cp -a /sbin/busybox /var/chroot/bin/
$ sudo /usr/sbin/chroot /var/chroot/ busybox ash
/ $ /bin/busybox find /
/ Estou no
/bin chroot!
/bin/busybox
9. / $ /bin/busybox ps
PID Uid VmSize Stat Command Cadê o /
ps: unable to open `/proc': No such file proc?
or directory
$ sudo mkdir -p /var/chroot/etc
$ sudo cp -a /etc/fstab /var/chroot/etc/ Origem
/ $ /bin/busybox mkdir /proc Voltamos
/ $ /bin/busybox mount /proc ao chroot
/ $ /bin/busybox ps
PID Uid VmSize Stat Command
10 648 S init [5]
20 SW< [migration/0] Todos os
processos!
30 SWN [ksoftirqd/0]
…
10. chroot com o GNU
Bash
O Bash não é um binário estático, depende de libs
dinâmicas! Só copiar o binário para o chroot não vai
funcionar!
$ ldd /bin/bash
linux-gate.so.1 => (0x0024c000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x06468000)
libdl.so.2 => /lib/libdl.so.2 (0x00a49000)
libc.so.6 => /lib/libc.so.6 (0x008d9000)
/lib/ld-linux.so.2 (0x008b6000)
11. $ sudo cp -a /bin/bash /var/chroot/bin/bash
$ sudo mkdir -p /var/chroot/lib
$ sudo cp -a /lib/libc.* /lib/libc-* /lib/libdl* /lib/ Para não
libtermcap.so.2* /var/chroot/lib/ copiar
somente
links!
/ $ bash
Finalmente
bash-3.2#
12. Melhorando o ambiente
É importante copiar alguns arquivos do /etc e os
arquivos de dispositivos (/dev).
$ sudo cp -a /etc/passwd /etc/group /etc/hosts /etc/
resolv.conf /var/chroot/etc/
$ sudo /dev/MAKEDEV -d /var/chroot/dev/ -v generic
13. chroot com o RPM
$ sudo mkdir -p /var/chroot/var/lib/rpm
$ sudo rpm --root /var/chroot/ --initdb
Vamos precisar de RPMs para instalar (http://
centos.pop.com.br/5.4/os/i386/CentOS/)
14. $ sudo rpm --root /var/chroot -ihv
basesystem-8.0-5.1.1.el5.centos.noarch.rpm
error: Failed dependencies: Oops, o pacote
setup is needed by depende de
basesystem-8.0-5.1.1.el5.centos.noarch outros!
filesystem is needed by
basesystem-8.0-5.1.1.el5.centos.noarch
$ sudo rpm --root /var/chroot -ihv
basesystem-8.0-5.1.1.el5.centos.noarch.rpm
filesystem-2.4.0-2.el5.centos.i386.rpm Satisfazendo as
setup-2.5.58-7.el5.noarch.rpm deps
$ rpm --root /var/chroot -ihv rpm-4.4.2.3-18.el5.i386.rpm
(uma lista enorme!)
15. Considerações sobre o
RPM em chroot
• Nunca esqueça de passar o parâmetro --root
(cuidado para não estragar o seu sistema);
• O processo inteiro para ter o RPM instalado
envolve instalar e satisfazer as dependências de
pacote, algumas deps são óbvias;
• Exige um pouco de “manha” para saber qual
pacote tem o que, mas só se aprende fazendo;
• Pode-se fazer instalações parciais, por exemplo,
instalar até o Bash (via RPMs) e depois até o
RPM.
16. O yum é seu amigo
$ sudo mkdir -p /var/chroot/var/lib/rpm Cria o banco
$ sudo rpm --root /var/chroot --initdb do RPM
$ sudo rpm --root /var/chroot -ihv --nodeps
centos-release-5-4.el5.centos.1.i386.rpm
$ sudo yum -y --installroot=/var/chroot A mágica
install rpm está aqui
17. Para ver depois…
• rpm -q --requires | --whatrequires | --provides |
--whatprovides
• mount --bind /home /var/chroot/home/
• Filesystem Hierarchy Standard
• Welcome to Linux From Scratch
• Montar chroot para outros sistemas (Ubuntu
em CentOS)