Upload
ruda-moura
View
5.414
Download
1
Embed Size (px)
DESCRIPTION
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.
Citation preview
Criação de ambientes em chroot
Rudá MouraNovembro de 2009
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.
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.
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!
Матрёшка (Matrioshka)
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!
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)
chroot com o Busybox
$ 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 ///bin/bin/busybox
“busybox.i386 : Statically linked binary providing simplified versions of system commands” (yum)
Estou no chroot!
/ $ /bin/busybox ps PID Uid VmSize Stat Commandps: unable to open `/proc': No such file or directory
Cadê o /proc?
$ sudo mkdir -p /var/chroot/etc$ sudo cp -a /etc/fstab /var/chroot/etc/ Origem
/ $ /bin/busybox mkdir /proc/ $ /bin/busybox mount /proc/ $ /bin/busybox ps PID Uid VmSize Stat Command 1 0 648 S init [5] 2 0 SW< [migration/0] 3 0 SWN [ksoftirqd/0]…
Voltamos ao chroot
Todos os processos!
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)
$ 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/libtermcap.so.2* /var/chroot/lib/
Para não copiar
somente links!
/ $ bashbash-3.2#
Finalmente
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
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/)
$ sudo rpm --root /var/chroot -ihv basesystem-8.0-5.1.1.el5.centos.noarch.rpm error: Failed dependencies: setup is needed by basesystem-8.0-5.1.1.el5.centos.noarch 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 setup-2.5.58-7.el5.noarch.rpm
$ rpm --root /var/chroot -ihv rpm-4.4.2.3-18.el5.i386.rpm(uma lista enorme!)
Satisfazendo as deps
Oops, o pacote depende de
outros!
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.
O yum é seu amigo
$ sudo mkdir -p /var/chroot/var/lib/rpm$ sudo rpm --root /var/chroot --initdb
$ sudo rpm --root /var/chroot -ihv --nodeps centos-release-5-4.el5.centos.1.i386.rpm
$ sudo yum -y --installroot=/var/chroot install rpm
Cria o banco do RPM
A mágica está aqui
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)