Virtualização Conceitos e Prática Tópicos em Sistemas de Computação 2014 Prof. Dr. Adriano Mauro Cansian adriano@acmesecurity.org Estagiário Docente: Vinícius Oliveira viniciusoliveira@acmesecurity.org
Agenda Objetivos. Introdução. Virtualização: conceitos. VirtualBox: Princípios básicos; Instalação; Criando uma máquina virtual: Utilizando interface gráfica (GUI); Utilizando linha de comando (CLI); Guest Additions; Disposições finais.
Agenda Objetivos. Introdução. Virtualização: conceitos. VirtualBox: Princípios básicos; Instalação; Criando uma máquina virtual: Utilizando interface gráfica (GUI); Utilizando linha de comando (CLI); Guest Additions; Disposições finais.
Objetivos Aprender conceitos sobre virtualização. Entender o funcionamento das plataformas virtualizadas, amplamente em uso. Aprender a criar e gerenciar máquinas virtuais com o VirtualBox.
Introdução (1) O que é Virtualização? Não há um consenso. Engloba: Emulação; Simulação; Na computação, é um mecanismo capaz de executar em um mesmo computador dois ou mais sistemas, distintos ou não, de maneira isolada.
Introdução (2) Um pouco de história: A virtualização de hoje é resultado de pesquisas realizadas pela IBM na década de 60 e 70. O intuito era criar um sistema capaz de fornecer multiprogramação e máquina estendida (alto nível). Década de 80 e 90: virtualização era pouco utilizada. Muito do que temos atualmente sobre virtualização com x86 é consequência destas pesquisas. Atualmente a virtualização é uma tendência, sendo muito utilizada em diferentes segmentos, principalmente de infraestrutura.
Introdução (3) Mainframes: centralizando a computação. VS
Introdução (4) Por que utilizar virtualização? Consolidação de servidores: Redução do número e dos tipos de servidores; Diminuição de custos (manutenção, refrigeração, energia e etc); Melhor uso dos recursos computacionais; Facilidade de gerenciamento de um número reduzido de servidores. Confiabilidade; Disponibilidade; Encapsulamento; Dentre outros.
Virtualização: conceitos (1) Virtualizar: Executar simultaneamente múltiplos sistemas operacionais em uma mesma máquina física. Monitor de máquinas virtuais (MMV): Gerencia a distribuição dos recursos de hardware a cada sistema operacional convidado. Máquina virtual: Ambiente isolado criado pela MMV para cada sistema operacional convidado.
Virtualização: conceitos (2) Instruções não privilegiadas: Não modificam a alocação ou o estado de recursos compartilhados por vários processos simultâneos. Instruções privilegiadas: Podem alterar o estado e a alocação dos recursos compartilhados. Estados de operação de um computador: Modo usuário; Modo de supervisor;
Virtualização: conceitos (3) Sistema operacional hospedeiro (Host Operating System) : Sistema operacional nativo da máquina; Executado diretamente sobre o hardware físico; Sistema operacional visitante (Guest Operating System): Sistema operacional que é executado na máquina virtual; Geralmente executado sobre o hardware virtual;
Virtualização: conceitos (4) Monitor de Máquina Virtual (MMV) ou Hypervisor: Camada de software responsável por aplicar e monitorar políticas para as máquinas virtuais; Responsável pela virtualização e controle de acesso aos recursos compartilhados para as máquinas virtuais; Máquinas virtuais executam no modo usuário, sendo que o MMV executa no modo supervisor; Para uma máquina virtual executar uma instrução privilegiada, o MMV é necessário;
Virtualização: conceitos (5)
Virtualização: conceitos (6) Tipos de virtualização: Virtualização total ou completa: MMV cria uma réplica do hardware da máquina hospedeira; MMV cria drivers genéricos para traduzir os elementos de hardware da máquina hospedeira. Cada instrução é testado pelo MMV e depois disso é executada em hardware, o que causa uma perda de performance. Se a instrução for privilegiada, ela é simulada pelo MMV; Não há modificações no sistema operacional visitante. Com isso, a grande maioria dos sistemas operacionais existentes podem ser virtualizados.
Virtualização: conceitos (7) Tipos de virtualização: Virtualização total ou completa:
Virtualização: conceitos (8) Tipos de virtualização: Para-virtualização: Não utiliza drivers genéricos, acessa diretamente o hardware (ganho de performance); Uma instrução só é processada pelo MMV se ela for privilegiada, ou seja, se alterar o estado do sistema; MMV não testa instrução por instrução como na virtualização total; Sistema operacional visitante é modificado; Reduz o número de sistemas os quais podem ser virtualizados;
Virtualização: conceitos (9) Tipos de virtualização: Para-virtualização:
Virtualização: conceitos (10) Tipos de virtualização: Virtualização assistida por hardware: Semelhante ao modelo de virtualização total; Entretanto, não precisa testar todas instruções; Processador fornece um ambiente restrito para a execução de instruções das máquinas virtuais; Há um aumento de performance considerável; Intel VT e AMD-V são processadores que possuem essa característica;
Virtualização: conceitos (11) Tipos de virtualização: Virtualização assistida por hardware:
VirtualBox (1) O VirtualBox é uma poderosa coleção de ferramentas para máquinas virtuais. Pode ser usado em computadores pessoais, servidores ou sistemas mais específicos (embarcados). Possibilita a virtualização de sistemas operacionais 32- bit e 64-bit, tanto em processadores Intel quanto AMD. Pode ser totalmente em software (virtualização total); Pode usar recursos de hardware para virtualização (virtualização assistida por hardware); Desenvolvido pela Oracle e disponibilizado sob licença GPL. http://www.virtualbox.org/
VirtualBox (2) Outras características: Portabilidade; Arquitetura simples; Não é necessário o suporte para virtualização assistida por hardware. Guest Additions (adições de convidado); Suporte de hardware avançado (USB, discos, som, etc.); Suporte a pontos de restauração de sistema (snapshots); Acesso remoto via VRDP (desktop remoto);
VirtualBox (3) Sistemas hospedeiros suportados: Windows XP (32-bit), Windows Server 2003 (32-bit), Windows Vista (32-bit e 64-bit), Windows Server 2008 (32-bit e 64-bit), Windows 7 (32-bit e 64-bit); Apple Mac OS X: processador Intel como requisito. Linux (32-bit e 64-bit): Debian GNU/Linux 3.1, 4.0 e 5.0; Fedora Core 4 ao 11; Gentoo Linux; Redhat Enterprise Linux 4 e 5; SUSE Linux 9 e 10, opensuse 10.3, 11.0 e11.1 Ubuntu 6.06, 6.10, 7.04, 7.10, 8.04, 8.10, 9.04, 10.04 e 10.10. Mandriva 2007.1, 2008.0 e 2009.1 Solaris: Open Solaris e Solaris 10.
VirtualBox (4) Sistemas visitantes suportados: DOS, Windows 3.X, Windows 95, Windows 98, Windows ME, Windows NT 4.0, Windows 2000, Windows XP, Windows Vista, Windows Server 2008, Windows 7; Linux 2.4 e 2.6; Solaris 10 e OpenSolaris; FreeBSD e OpenBSD; OS/2 Warp 4.5; Mac OS X e Mac OS X Server;
Princípios básicos (1) O sistema que roda o VirtualBox é denominado host (sistema hospedeiro). O sistema virtual, instalado dentro do VirtualBox, é denominado guest (sistema visitante). O VirtualBox é capaz de fornecer virtualização de duas maneiras: Inteiramente em software: Todas as chamadas são interceptadas pelo VMM que fornece uma abstração. Usando recursos assistidos por hardware, em processadores especiais: IntelVT-x e AMD-V. ESTE SUPORTE DEVE SER HABILITADO NO BIOS.
Princípios básicos (2) Sistemas 64-bit como visitante: Se a arquitetura do hospedeiro for 64-bit pode-se instalar sistemas 64-bit como visitante normalmente: Habilitar o suporte para virtualização assistida em hardware; Configurar a MV para utilizar este recurso; Se a arquitetura do hospedeiro for 32-bit, ainda pode-se utilizar um sistema visitante 64-bit: Cria-se um overhead no MMV. Se as MVs forem criadas utilizando a interface gráfica, muitas destas configurações são feitas automaticamente; MVs 64-bit só funciona adequadamente com virtualização assistida em hardware.
Instalação (1) Existem diversos sistemas e maneiras para instalar o VirtualBox (Windows, Mac Os X, Linux, etc.). A base será uma instalação no sistema Linux (Ubuntu), utilizando um repositório de pacotes do VirtualBox. OBS.: para sistemas Linux é recomendável utilizar um gerenciador de pacotes do sistema (apt, yum, urpmi, etc) por motivos de manutenção da ferramenta; Antes de instalar, deve-se verificar algumas dependências: Pacote de headers (linux-headers) do kernel para a compilação do módulo do VirtualBox. apt-get install linux-headers-$(uname -r) A versão do linux-headers deve ser a mesma do kernel em uso. Pacote DKMS apt-get install dkms É um pacote capaz de recompilar automaticamente drivers quando há mudança de um kernel (MUITO IMPORTANTE).
Instalação (2) Utilizando o sistema apt: Adicionar source oficial do VirtualBox no arquivo /etc/apt/sources.list no Ubuntu 14.04: deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free Adicionar as chaves do repositório, atualizar base e instalar: usuario@maquina:~$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- sudo apt-key add - usuario@maquina:~$ apt-get update usuario@maquina:~$ apt-get install virtualbox-4.3
Criando uma máquina virtual (1) Existem duas maneiras de criar máquinas virtuais: Usando uma interface gráfica (GUI): Mais rápido e prático; Configura automaticamente e corretamente diversos parâmetros,; Necessita de um ambiente gráfico. Usando linha de comando (CLI): Nada prático; Requer um esforço maior nas configurações mas fornece todos os parâmetros para otimização das máquinas virtuais; Não necessita um ambiente gráfico (servidores); Nesse caso a máquina virtual é iniciada e pode ser acessada via desktop remoto (RDP).
Criando uma máquina virtual (2) Logs VBox.log VBox.log.1 VM1 Snapshots {0bf...8b}.vdi 2014 Z.sav $HOME VirtualBox VMs VM2 VM2.vbox VM2.vbox-prev VMn VM2.vdi
Utilizando uma interface gráfica (GUI) (1)
Utilizando uma interface gráfica (GUI) (2)
Utilizando uma interface gráfica (GUI) (3) Informações requisitadas na criação da máquina virtual: Nome da máquina virtual; Tipo de sistema operacional visitante: Utilizado para definir diversas otimizações para o sistema visitante, além de habilitar algumas configurações tais como virtualização assistida para sistemas 64-bit. Quantidade de memória: Este espaço será reservado para o VirtualBox e não poderá ser usado pelo sistema hospedeiro durante o tempo que a máquina virtual executar. Portanto, cuidado ao definir a quantidade memória.
Utilizando uma interface gráfica (GUI) (4)
Utilizando uma interface gráfica (GUI) (5) Importante: o disco virtual é independente da máquina virtual. O disco é registrado para uma máquina virtual e quando ela é apagada, o disco virtual pode permanecer.
Utilizando uma interface gráfica (GUI) (6)
Utilizando uma interface gráfica (GUI) (7) 1 2
Utilizando uma interface gráfica (GUI) (8) Interface do VirtualBox com a máquina virtual criada:
Utilizando uma interface gráfica (GUI) (9) Visualização de opções da máquina virtual:
Utilizando uma interface gráfica (GUI) (10) Visualização das opções de sistema:
Utilizando uma interface gráfica (GUI) (11) Visualização das opções de rede:
Utilizando uma interface gráfica (GUI) (12) Snapshots: permite salvar o estado de uma máquina virtual. 1 3 2 4
Utilizando uma interface gráfica (GUI) (13) Snapshots: 4 2 1 3 Restaurar snapshot; Excluir snapshot; ou Exibir detalhes do snapshot.
Utilizando uma interface gráfica (GUI) (14) Ao iniciar uma máquina virtual é possível acessá-la clicando com o mouse dentro de sua janela. Para sair do controle dessa máquina virtual, existem alguns atalhos de teclado: O padrão é o CTRL da direita. Retorna o mouse para o sistema hospedeiro.
Utilizando uma interface gráfica (GUI) (15) Para desligar uma máquina virtual Maneira convencional, desligando o sistema visitante: Fechando a janela da máquina virtual;
Utilizando linha de comando (CLI) (1) Command Line Interface (CLI): uma alternativa para a interface gráfica é a utilização de comandos para a criar e controlar máquinas virtuais. No VirtualBox o principal comando é o VBoxManage. Tudo que é realizado no ambiente gráfico GUI, também pode ser realizado através de CLI, permitindo maior especificidade. Serão mostrados alguns passos básicos para a criação de uma máquina virtual em CLI.
Utilizando linha de comando (CLI) (2) Para criar uma MV (arquivo xml utilizado pelo VirtualBox) registrando-a para o usuário em questão: usuario@maquina:~$ VBoxManage createvm --name Meu Windows --ostype WindowsXP --register --name: permite especificar o nome da máquina virtual. --ostype: permite especificar o tipo de sistema operacional. Os tipos suportados podem ser vistos com o comando VBoxManage list ostypes. --register: registra a máquina virtual criada para o ambiente do VirtualBox do usuário.
Utilizando linha de comando (CLI) (3) Para modificar algumas configurações: usuario@maquina:~$ VBoxManage modifyvm "Meu Windows" --memory 512 --vram 64 --acpi on --boot1 dvd --nic1 bridged -- bridgeadapter1 eth0 --vrde on --memory: a quantidade de memória alocada para a máquina virtual. --vram: a quantidade de memória de vídeo alocada para a máquina virtual. --acpi: gerenciamento de energia. --boot1: primeiro dispositivo de boot, se houver mídia no dispositivo. --dvd: indica o dispositivo no sistema hospedeiro. --nic1: insere uma interface de rede na máquina virtual, no modo bridge (pode ser host-only e nat). --eth0: no caso de bridge, qual a interface do hospedeiro utilizar. --vrde: habilita controle da MV por desktop remoto. Para uso deste recurso é necessário instalar o pacote de extensão Oracle VM VirtualBox Extension Pack junto ao VirtualBox.
Utilizando linha de comando (CLI) (4) Criando o disco virtual: usuario@maquina:~$ VBoxManage createhd --filename HD_MeuWindows.vdi --size 10000 --filename: nome do arquivo que conterá o disco virtual. --size: tamanho em MB (10000 10 GB). Precisamos anexar um disco a nossa máquina: usuario@maquina:~$ VBoxManage storagectl "Meu Windows" --name "SATA Controller" --add sata Vinculando o disco virtual criado com o disco anexado a máquina virtual: usuario@maquina:~$ VBoxManage storageattach Meu Windows --storagectl "SATA Controller" --port 0 -- device 0 --type hdd --medium <ENDEREÇO_HD_VDI>
Utilizando linha de comando (CLI) (5) Precisamos agora anexar uma mídia CD/DVD a nossa máquina: usuario@maquina:~$ VBoxManage storagectl Meu Windows --name "IDE Controller" --add ide Vinculando uma imagem.iso à mídia anexada a máquina virtual: usuario@maquina:~$ VBoxManage storageattach Meu Windows --storagectl "IDE Controller" --port 0 -- device 0 --type dvddrive medium <ENDEREÇO_IMAGEM_ISO>
Utilizando linha de comando (CLI) (6) Uma vez criada a máquina virtual, é possível iniciá-la. Como nesse caso é utilizado um ambiente sem terminal gráfico, o comando utilizado para iniciar uma MV é o VBoxHeadless: usuario@maquina:~$ VBoxHeadless -startvm Meu Windows Observações: Ao iniciar a MV, o efeito é o de dar boot por meio da imagem.iso associada. Como acessar a MV? Para o primeiro acesso a melhor opção é por Desktop remoto, entretanto, é necessário que o VirtualBox contenha o pacote de extensão Oracle VM VirtualBox Extension Pack.
Utilizando linha de comando (CLI) (7) O acesso às máquinas virtuais pode ser realizado com ferramentas de desktop remoto que utilizam o protocolo RDP: O Windows possui um utilitário nativo de desktop remoto. No linux, recomenda-se o rdesktop. usuario@maquina:~$ rdesktop-vrdp <IP>:<Porta> Para desligar a máquina virtual: usuario@maquina:~$ VBoxManage controlvm Meu Windows poweroff
Guest Additions (1) O Guest Additions é um pacote de ferramentas que otimizam um sistema visitante. Deve ser instalado em cada sistema visitante. Drivers de dispositivos. Aplicações do sistema. Melhoram não só a performance, mas também a usabilidade. Melhora o vídeo; Permitem várias ações com o mouse. Pode ser baixado no site do próprio VirtualBox como um arquivo.iso. No Linux Ubuntu, pode-se instalar o pacote virtualboxguest-additions que já possui a imagem.iso. apt-get install virtualbox-guest-additions
Guest Additions (2) Instalação em sistema visitante Windows: Carregar a imagem (.iso) do Guest Additions: Caso não exista a opção, escolher manualmente a.iso:
Guest Additions (3) Seguir os passos como na instalação de qualquer programa em Windows:
Guest Additions (4) 1 2 4 3 5
Guest Additions (5) Instalação em Windows:
Guest Additions (6) Instalação para sistema visitante Linux: Selecionar a imagem do Guest Additions igual ao processo realizado no Windows; Montar o CD-ROM no sistema visitante: root@bt:~# mount /media/cdrom1 root@bt:~# ls /media/cdrom1... autorun.sh... VBoxLinuxAdditions.run... root@bt:~# cd /media/cdrom1
Guest Additions (7) Depois de montada a imagem no sistema Linux visitante: root@bt:~#./vboxlinuxadditions.run Uncompressing VirtualBox 4.0.6 Guest Additions for Linux... VirtualBox Guest Additions installer... Do you wish to continue anyway? [yes or no] Ou utilizar o autorun: root@bt:~#./autorun.sh
Guest Additions (8) Pastas compartilhada com GUI: Criar a pasta que será compartilhada no sistema hospedeiro. usuario@maquina:~$ mkdir pasta_hospedeiro Selecionar as opções da máquina virtual no VirtualBox: 2 1
Guest Additions (9) Criar a pasta compartilhada no sistema visitante: 2 1 3 4
Guest Additions (10) Acessar o local da pasta compartilhada no sistema visitante Windows: \\Vboxsvr 1 2 Acessar o local da pasta compartilhada no sistema visitante Linux: sudo mount -t vboxsf -o uid=$uid,gid=$(id -g) pasta_compartilhada pasta_visitante Monta a pasta compartilhada com permissão para o usuário. UUID e GID podem ser consultados com id usuário.
Guest Additions (11) Configurando uma pasta com CLI: usuario@maquina:~$ mkdir ~/hospedeiro usuario@maquina:~$ VBoxManage sharedfolder add Meu Windows -- name compartilhada --hostpath ~/hospedeiro --name: um nome para o compartilhamento, registrado na máquina virtual (sistema visistante) em questão (podem existir várias pastas compartilhadas). --hostpath: o caminho do diretório dentro do sistema hospedeiro. Estes compartilhamentos são acessados dentro do ambiente de rede do sistema hospedeiro.
Disposições finais (1) Virtualização é um conceito antigo, mas também um tema atual; É crescente a utilização de virtualização na área de TI, notadamente na parte de infraestruturas; Atualmente existe um aumento do número de soluções virtualizadas, tais como appliances; Torna-se visível uma mudança no paradigma de vendas e implementação de soluções de TI;
Disposições finais (2) Entretanto, sempre há perda de desempenho; O MMV (hypervisor) e o Guest Addition é um software e todo software está sujeito a falhas: Se o MMV estiver vulnerável, todas as máquinas virtuais também estarão! Por exemplo: Sun VirtualBox Guest Additions Denial of Service Vulnerability (16 de novembro de 2009).