Criação de ambientes em chroot

5,855 views
5,656 views

Published on

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.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,855
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
50
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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)

×