Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Criação de ambientes em chroot

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.

  • Login to see the comments

Criação de ambientes em chroot

  1. 1. Criação de ambientes em chroot Rudá Moura Novembro de 2009
  2. 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. 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. 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!
  5. 5. Матрёшка (Matrioshka)
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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)

×