17
Criação de ambientes em chroot Rudá Moura Novembro de 2009

Criação de ambientes em chroot

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

Page 1: Criação de ambientes em chroot

Criação de ambientes em chroot

Rudá MouraNovembro de 2009

Page 2: Criação de ambientes em chroot

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.

Page 3: Criação de ambientes em chroot

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.

Page 4: Criação de 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!

Page 5: Criação de ambientes em chroot

Матрёшка (Matrioshka)

Page 6: Criação de ambientes em chroot

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!

Page 7: Criação de ambientes em chroot

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)

Page 8: Criação de ambientes em 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!

Page 9: Criação de ambientes em 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!

Page 10: Criação de ambientes em chroot

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)

Page 11: Criação de ambientes em chroot

$ 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

Page 12: Criação de ambientes em chroot

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

Page 13: Criação de ambientes em chroot

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/)

Page 14: Criação de ambientes em chroot

$ 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!

Page 15: Criação de ambientes em chroot

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.

Page 16: Criação de ambientes em chroot

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

Page 17: Criação de ambientes em chroot

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)