Baixe o app para aproveitar ainda mais
Prévia do material em texto
0 1 Manual Completo de Redes de Computadores com Debian GNU/Linux Nota Todo o material está fundamentado em uma distribuição GNU/Linux Debian 10 de 32 bits por ter maior portabilidade com equipamentos antigos, caso queira atuar com a versão 64 bits deve-se estar atento a problemas não conhecidos pois não foi homologado. Versão WEB deste material sempre atualizado (trabalho todos os dias neste documento): https://docs.google.com/document/d/14S8MAcjspdbBWsja-Ijb_GQfs4C1PzJ mDcTJ3bYXyeQ/edit?usp=sharing Inscreva-se no canal AIEDONLINE no Youtube clicando neste link. Contato pelo Telegram: https://t.me/joinchat/Plabo1TylY2GEPJQ1eJ9IQ Como obter o certificado de conclusão do curso de Sistemas Operacionais e Redes de Computadores, é gratuito: https://youtu.be/Yehl7DKsXOg Também não deixe de acompanhar o desenvolvimento do nosso segundo material: Hacker, entre a luz e as trevas neste link: https://docs.google.com/document/d/17R67zmmJw46yMGYpqt9WOjdo4mLC BjNQbmCNcQuLDlc/edit?usp=sharing https://docs.google.com/document/d/14S8MAcjspdbBWsja-Ijb_GQfs4C1PzJmDcTJ3bYXyeQ/edit?usp=sharing https://docs.google.com/document/d/14S8MAcjspdbBWsja-Ijb_GQfs4C1PzJmDcTJ3bYXyeQ/edit?usp=sharing https://www.youtube.com/c/aiedonline?sub_confirmation=1 https://www.youtube.com/c/aiedonline?sub_confirmation=1 https://t.me/joinchat/Plabo1TylY2GEPJQ1eJ9IQ https://youtu.be/Yehl7DKsXOg https://docs.google.com/document/d/17R67zmmJw46yMGYpqt9WOjdo4mLCBjNQbmCNcQuLDlc/edit?usp=sharing https://docs.google.com/document/d/17R67zmmJw46yMGYpqt9WOjdo4mLCBjNQbmCNcQuLDlc/edit?usp=sharing 2 Manual Completo de Redes de Computadores com Debian GNU/Linux Sumário Sumário 2 Links para Download 13 1 Considerações e Ambiente (finalizado) 15 1.1 Tecnologias utilizadas e Download de arquivos 15 1.2 Importando e configurando uma Máquina Virtual 16 1.3 Criando uma Virtual Machine a partir de uma instalação 18 1.4 Validação de práticas por meio de Robô e suporte 31 1.5 Configuração do Adaptador de rede no VirtualBox 34 1.5.1 Adaptador em NAT 35 1.5.2 Modo Bridge 36 1.5.3 Rede Interna 36 1.6 Divisão dos Capítulos 37 1.7 Curso gratuito com certificado 37 2 Arquitetura e Sistema Operacional (atuando) 42 2.1 Arquitetura de um computador 42 2.1.1 North and Southbridge 43 2.1.2 Acesso direto à memória 43 2.1.3 Memória Volátil (RAM) 44 2.1.4 Arquiteturas de CPU 44 2.2 Sistema Operacional 46 2.2.1 Gerenciamento de processo 46 2.2.2 Gerencimaento de memória 46 2.2.3 Sistema de Arquivos 46 2.2.4 Sistema de E/S 46 2.3 Estrutrua de Dados 46 2.3.1 Tipos básicos de estruturas 47 2.3.2 Tipos complexos 47 3 Virtualização (finalizado) 48 3.1 Recursos do capítulo 48 3.2 Introdução a Virtualização 48 3.3 Hypervisors 49 3.4 Tipos de virtualização 50 3.4.1 Virtualização de desktop 50 3.4.2 Virtualização de rede 51 3.4.3 Virtualização de armazenamento 51 3.4.4 Virtualização de dados 51 3.4.5 Virtualização de aplicativos 51 3.4.6 Virtualização de CPU 52 3.4.7 Virtualização de GPU 52 3.4.8 Virtualização de nuvem 53 3.6 Práticas da aula 53 3.6.1 Prática 98a917ce 01: Criando o ambiente da aula 53 3 Manual Completo de Redes de Computadores com Debian GNU/Linux 4 Sistema de arquivos no GNU/Linux e principais diretórios 54 4.1 Recursos do capítulo 54 4.2 Virtual File System 55 4.3 Diretórios padrões de um GNU/Linux Debian 57 4.4 Conceito de i-node 61 4.5 Tipos de arquivos 63 4.6 Navegando no sistema de Arquivos (cd, pwd, ls) 69 4.7 Copiando e movendo arquivos (mv e cp) 71 4.8 Lendo e editando arquivos (cat, tac, more, sed, tail, split, nano, vim) 74 4.9 Obtendo informações sobre o arquivo (file, cksum, cmp) 78 4.10 Criando e removendo diretórios e arquivos (touch, rm, mkdir, rmdir) 80 4.11 Permissão de acesso e dono (chmod, chown, chgrp) 82 4.12 SetUID, SetGID e Sticky Bits 85 4.12.1 Bit SetUID 86 4.12.2 Bit SetGID 86 4.12.3 Bit Sticky 87 4.13 Link simbólico e Hard Link (ln e ln -s) 87 4.13.1 Hard Link 88 4.13.2 Symbolic links 89 4.14 Práticas da aula de Sistema de Arquivos 90 4.14.1 Prática 8e9c361c 01: Criando diretórios e arquivos no GNU/Linux 91 4.14.2 Prática 8e9c361c 02: Copiando arquivo, removendo arquivo e movendo arquivo 92 4.14.3 Prática 8e9c361c 03: Criar links 93 4.14.4 Prática 8e9c361c 04: Diretório e arquivos com permissão especial 94 5 Usuários GNU/Linux (finalizado) 95 5.1 Recurso do Capítulo 95 5.2 Multitarefas 95 5.3 Usuários do GNU/Linux 96 5.4 O arquivo /etc/passwd 97 5.5 O arquivo /etc/shadow 99 5.6 Arquivo /etc/group 100 5.7 Adicionando usuários no GNU/Linux com adduser 101 5.8 Adicionando grupos com adduser e addgroup 102 5.9 Editando um usuário com usermod 103 5.9.1 Adicionar um usuário a um grupo 103 5.9.2 Alterar o grupo default do usuário 103 5.9.3 Alteração das informações do usuário 104 5.9.4 Alterando um diretório inicial do usuário 104 5.9.5 Mudando um Shell Padrão do Usuário 105 5.9.6 Alterando um UID de usuário 105 5.9.7 Alterar um nome de usuário 105 5.9.8 Definir uma data de expiração do usuário 105 5.9.9 Bloqueio e desbloqueio de uma conta de usuário 106 4 Manual Completo de Redes de Computadores com Debian GNU/Linux 5.10 Alterando a senha de um usuário 106 5.10.1 Altere sua senha de usuário 107 5.10.2 Alterar a senha de outro usuário 108 5.10.3 Forçar o usuário a alterar a senha no próximo login 108 5.11 Obtendo informações de usuários com finger 108 5.12 Práticas do capítulo usuários GNU/Linux 109 5.14.1 Prática fcb0b800 01: Criando usuários e grupos 109 5.14.2 Prática fcb0b800 02: Editando usuários 110 5.14.3 Prática fcb0b800 03: Alterar arquivo passswd e shadow 111 5.14.4 Prática fcb0b800 04: Usuário tomcat para o serviço tomcat 112 6 Formatando e montando um dispositivo de bloco no GNU/Linux 113 6.1 Recursos do capítulo 113 6.2 Adicionando um novo disco no VirtualBox 113 6.3 Dispositivo especial de bloco 115 6.4 Tabela de Partição 116 6.5 BIOS e UEFI 117 6.6 Tipos de sistemas de arquivos Linux 118 6.6.1 Padrão ext2 118 6.6.2 Padrão ext3 119 6.6.3 Padrão ext4 120 6.7 Listando dispositivos especiais de bloco com lsblk 120 6.8 Obtendo informações sobre dispositivos de Bloco com blkid 122 6.9 Criando partições em discos com fdisk 122 6.10 Listar Partições no GNU/Linux 123 6.11 Criando Tabela de Partição 123 6.12 Formatando uma partição para uso com mkfs 125 6.13 Montando e desmontando um dispositivo no Sistema de Arquivos com mount e umount 126 6.14 O arquivo /etc/fstab 127 6.15 Prática do capítulo de Formatação 130 6.15.1 Prática 8b65b431 01: Adicionando um novo disco 130 6.15.2 Prática 8b65b431 02: Adicionando um cdrom 131 7 Gerenciamento de Processos no GNU/Linux (atuando) 132 7.1 Recursos do capítulo 132 7.2 Arquivos executáveis 132 7.3 Compiladores 134 7.3.1 Tipos de compiladores 134 7.3.2 Compilando Versus Interpretando 134 7.4 Criando um executável com GCC 135 7.4.1 O GCC – GNU Compiler Collection 136 7.4.2 Compilação no GCC 137 7.4.3 Assembler do Código no gcc 138 7.4.4 Linker do código com as bibliotecas 138 7.5 A implementação de threads no Linux 140 5 Manual Completo de Redes de Computadores com Debian GNU/Linux 7.5.1 Threads de kernel 141 7.5.2 Implementando uma thread em C++ 141 7.6 Criando e gerenciando processos filho em C++ 142 7.6.1 Função fork() 142 7.6.2 Aguardando finalização de procedimento filho com wait() e waitpid() 144 7.6.3 Executando comandos de Shell com system() popen() e exec() 148 7.7 Sinais POSIX 150 7.7.1 Enviando um sinal para um processo 152 7.7.2 Tratando sinais em processos 154 7.8 Escalonamento (Scheduling) 159 7.8.2 Policy 160 7.8.3 Prioridade de Processo 161 7.8.4 Timeslice (Quantum) 161 7.8.5 Preempção de processo 162 7.8.6 A política de agendamento em ação 162 7.8.7 O Algoritmo do Schedule 163 7.8.8 Runqueues 163 7.8.9 Matrizes de prioridade 165 7.8.10 Recalculando timeslice 166 7.8.11 Schedule 167 7.8.12 Calculando a Prioridade e o timeslice 167 7.8.13 Dormir e acordar 169 6.8.14 Preempção e troca de contexto 171 7.8.15 Preempção do usuário 171 7.8.16 Preempção de kernel 172 7.8.17 Tempo real (real-time) 173 7.8.18 Chamadas do sistema relacionadas aoagendador 174 7.9 Comunicação Inter-Processo 174 7.10 Comando top 175 7.10.1 Comandos interativos 175 7.10.2 Ordenação 176 7.10.3 Header do comando top 176 7.10.4 Listagem do comando top 177 7.10.5 Exibir processo de usuário específico 177 7.10.6 Salvar resultados do comando top 177 7.11 Comando ps 177 7.12 Comando kill e pkill 177 7.13 Práticas do capítulo 178 7.13.1 Prática prc0001 01: Listar processos python 178 8 Configurando interface de Redes em Linux (finalizado) 179 8.1 Recursos do capítulo 179 8.2 Faixas de IPs reservados para LAN 179 8.2.1 Definindo uma configuração para a LAN 179 8.2.2 Segmentação da LAN 180 6 Manual Completo de Redes de Computadores com Debian GNU/Linux 8.3 Comando lspci 181 8.4 Comando ip 181 8.5 Arquivo /etc/network/interfaces 183 8.6 Comando Netstat 184 8.7 Realizando download com CURL ou WGET 187 8.8 Práticas do capítulo 187 8.8.1 Prática 0002 checkpoint03: Configurando o arquivo de Interfaces 187 8.8.2 Prática 0002 checkpoint04: Configurando por comandos 188 8.8.3 Prática 0002 checkpoint05: Baixando arquivos com wget 189 9 Instalação de Programas e pacotes (finalizado) 190 9.1 Recursos do capítulo 190 9.2 Comando make 190 9.2.1 Arquivo Makefile 191 9.3 Instalação de baixo nível 194 9.3.1 Criando um pacote .deb com dpkg-deb 194 9.3.2 Instalando um pacote com dpkg -i 197 9.3.3 Obtendo informações de pacotes instalados 198 9.3.4 Removendo pacotes com dpkg 198 9.4.5 Log de operações do dpkg 199 9.4.6 Procurar nos meta-dados do pacote 199 9.4 Instalação de alto nível 199 9.4.1 Arquivo de repositórios sources.list 200 9.4.2 Adicionando PPA com add-apt-repository (falta) 202 9.4.3 Listando todos os pacotes de um repositório 202 9.4.4 Atualizando pacotes com APT 203 9.4.5 Adicionando pacotes com APT 203 9.4.5 Removendo pacotes com AP 204 9.5 Práticas do capítulo 204 9.5.1 Prática 092900 01: Criando e instalando um pacote 204 9.5.2 Prática 092900 02: Removendo um pacote com dpkg 205 9.5.4 Prática 092900 03: Instalando o pacote net-tools com apt 205 10 Shell Script e Bash (finalizado) 207 10.1 Recurso do Capítulo 207 10.2 Como criar um script no Linux 207 10.2.1 Variável de ambiente PATH 208 10.3 O Interpretador /bin/bash 208 9.3.1 Variáveis do ambiente (Environment) 208 10.4 Como criar um script 209 10.5 Shell Script BASH /bin/bash 211 10.5.1 Declarações Globais 212 10.5.2 Parando um Script 212 10.5.3 Descritores Input, Output e Error no Linux 213 10.5.3.1 Redirecionando o output 213 10.5.3.2 Redirecionando o input 214 7 Manual Completo de Redes de Computadores com Debian GNU/Linux 10.5.3.3 Redirecionando error 214 10.5.3.4 Redirecionando o output e o error 214 10.5.3.5 Anexando em arquivos existentes 215 10.5.3.6 Suprimindo o output ou error 215 10.5.4 Uso de comandos no script 215 10.5.5 Variáveis 216 10.5.6 Variáveis Predefinidas 219 10.5.7 Exports 219 10.5.7 Arrays 221 10.5.8 Expressões e test 222 10.5.9 Comando if 226 10.5.10 Comando case 227 10.5.11 Comando while 228 10.5.12 Comando until 229 10.5.13 Comando for 230 10.6 Práticas do capítulo 231 10.6.1 Prática 8ab001 01: Imprimindo na tela 231 10.6.2 Prática 8ab001 02: Uma variável 231 10.6.3 Prática 8ab001 03: Imprimindo mas com python2 232 10.6.4 Prática 8ab001 04: Script que valida par ou ímpar com if 233 10.6.5 Prática 8ab001 05: Script que valida se um número é maior que 10 234 11 Python para Sistemas Operacionais (atuando) 235 11.1 Listando versões de Python no Linux 235 11.2 Python em modo interativo 236 11.3 Python em scripts 237 11.4 Importando módulos Python 237 11.5 Módulo OS, SYS e SHUTIL 240 11.5.1 Dados do Sistema Operacional e do Environment 240 11.5.2 Comandos clássicos GNU/Linux e Windows no python 243 11.5.3 Trabalhando com PATH 244 11.5.4 Manipulando arquivos 247 11.6 Módulo subprocess 248 11.6.1 subprocess.run() 249 11.6.2 subprocess.popen() 251 11.5 Scripts profissionais em Python 252 11.5.1 Trabalhando com parâmetros 253 11.5.2 Output profissional 257 11.5.3 Manipulando arquivos 261 11.5.4 Instalando dependências 261 11.5.5 Obtendo dados do Sistema Operacional 262 11.5.6 Controlando a execução do script 262 11.5.7 Adicionando documentação no man 262 11.6 Práticas do capítulo 262 11.6.1 Prática py0001 checkpoint01: Preparando o ambiente 263 8 Manual Completo de Redes de Computadores com Debian GNU/Linux 11.6.2 Prática py0001 checkpoint02: Imprimindo o usuário corrente do Environment 263 11.6.3 Prática py0001 checkpoint03: Criando uma hash em MD5 do primeiro argumento 264 11.6.4 Prática py0001 checkpoint04: Listando usuários com shell /bin/bash 264 11.6.5 Prática py0001 checkpoint05: Persistir um arquivo 265 12 Adicionando um serviço na inicialização do GNU/Linux (atuando...) 266 12.1 Recurso do Capítulo 266 12.2 Passos executados pela BIOS ou UEFI 266 12.3 MBR e GPT 268 12.4 Bootloaders 268 12.4.1 GNU GRUB 269 13 Agendamento de tarefas com cron, crontab e at no GNU/Linux (finalizado) 270 13.1 Recurso do Capítulo 270 13.2 Daemon cron e comando crontab 270 13.2.1 Daemon cron 270 13.2.1 Comando crontab 271 13.2.2 Formato de entradas cronjob na crontab de usuário 273 13.2.3 A crontab do sistema 274 13.2.4 Execuções de comandos 275 13.2.5 Permissão de acesso ao crontab 275 13.3 Comando at 276 13.3.1 Criando um agendamento com at 276 13.3.2 Especificando o tempo de execução 277 13.3.3 Listagem de tarefas pendentes 278 13.3.4 Removendo trabalhos pendentes 278 13.3.5 Restringindo usuários 278 13.4 Práticas do capítulo 279 13.4.1 Prática 4d4f6ae 01: Instalação do comando apt e um agendamento 279 13.4.2 Prática d7a527b 01: Um script de backup 279 14 Openssh-server (finalizado) 280 14.1 Recurso do Capítulo 280 14.2 Introdução OpenSSH e Protocolo SSH 280 14.2 Instalando e configurando o openssh-server 285 14.3 Instalando o serviço SSH 286 14.4 Acessando o terminal por uso de cliente SSH 287 14.4 Transferindo arquivos 289 14.5 Práticas do capítulo 291 14.5.1 Prática 57671beb 01: Configurando o serviço Openssh-server 291 15 Serviço de Internet com Gateway (finalizado) 293 15.1 Recurso do Capítulo 293 15.2 Configurando o ambiente virtual e a rede virtual no VirtualBox 293 15.3 Configurando as Interfaces de rede 298 15.4 Configurando o servidor Gateway 303 9 Manual Completo de Redes de Computadores com Debian GNU/Linux 15.5 Monitorando tráfego da rede interna 308 15.6 Práticas do capítulo 309 15.6.1 Prática acb1b800 01: Configurando interfaces de rede do Gateway 309 15.6.2 Prática acb1b800 02: Ativando o serviço de Gateway 310 15.6.3 Prática acb1b800 03: Configurando a interface de rede do Cliente 311 16 Serviço WEB com Tomcat e Java (finalizado) 313 16.1 Recurso do Capítulo 314 16.2 Instalando o Java no Linux Terminal 314 16.3 Criando um ambiente seguro para seu container 315 16.4 Instalar o Tomcat 315 16.5 Configurando as permissões para o serviço 318 16.6 Adicionando o Tomcat na inicialização do Linux 318 16.7 Configurar a interface de gerenciamento da Web do Tomcat 321 16.8 Acessando a interface da Web 324 16.8.1 Raiz do Tomcat 325 16.8.2 Gerenciador de aplicativos da web Tomcat 325 16.9 Prática do capítulo 325 16.9.1 Prática 0001 tomcat: Configurando o serviço WEB com Tomcat e Java 325 17 Serviço WEB com Apache e PHP (finalizado) 327 17.1 Recurso do Capítulo 328 17.2 Instalando e configurando o Apache2 328 17.3. Instalando certificado digital 330 17.4 Testando o PHP Instalado 332 17.5 Prática do capítulo 333 17.5.1 Prática bn13la21 01: Configurando o serviço WEB com Apache e PHP 334 18 Serviço DHCP (finalizado) 335 18.1 Recurso do Capítulo 337 18.2 No VirtualBox 337 18.3 Instalando e Configurando o DHCP Server 338 18.3.1 Configurando o IP do servidor DHCP 338 18.3.2 Instalando o servidor DHCP 340 18.3.3 Arquivos de Configuração do Serviço DHCP 342 18.4 Configurando Debian Cliente 346 18.5 Práticas do capítulo 347 18.5.1 Prática 57t90021 01: Validando o serviço DHCP 348 18.5.2 Prática 57t90021 02: Cliente DHCP 349 19 Serviço DNS com Bind9 (finalizado) 350 19.1 Recursos do capítulo 351 19.2 Configurando o nome das máquinas 351 19.3 Instalando recursosem ns1 e ns2 352 19.4 Configurando Vincular ao Modo IPv4 em ns1 e ns2 352 19.5 Configurando o servidor DNS primário em ns1 353 19.5.1 Configurando o Arquivo de Opções 353 19.5.2 Configurando o Arquivo Local 354 10 Manual Completo de Redes de Computadores com Debian GNU/Linux 19.5.3 Criação do arquivo de zona de encaminhamento 355 19.5.4 Criando o (s) arquivo (s) de zona reversa 357 19.5.5 Verificando a sintaxe de configuração do BIND 358 19.6 Configurando o servidor DNS secundário ns2 359 19.7 Cliente Debian host1 361 19.8 Práticas do capítulo de DNS com GNU/Linux 363 19.8.1 Prática 1ae1b810 01: Validando a configuração do servidor ns1 363 19.8.2 Prática 1ae1b810 01: Validando a configuração do servidor ns2 364 19.8.3 Prática 1ae1b810 03: Validando a configuração no host1 364 20 Iptables e Firewall e UFW (atuando) 366 20.1 Recursos do capítulo 367 20.2 A organização das regras 367 20.3 Fluxo de pacotes de rede e hook points para tabela NAT 368 20.3.1 Source NAT e Masquerading 368 20.3.2 Destination NAT 369 20.3.3 Transparent Proxying 369 20.3.4 Balanceamento de carga 370 20.4 Fluxo de pacotes de rede e tabela filtering 370 20.5 Firewalls de rede 371 20.5.1 Filtrando requisição entre redes - um firewall para Internet 371 20.5.2 Permitindo acesso a um Processo local 373 20.5.3 Permitindo a saída de pacotes 374 20.5.4 Permitindo conexão de processos locais com processos locais 375 20.5.5 Alterando as regras padrões para negação 375 20.5.6 Limpando regras 376 20.5.7 Monitorando portas com nmap 376 20.6 UFW (falta) 378 20.7 Práticas do capítulo 378 20.7.1 Prática ipt0001 checkpoint01: Configurando uma rota FORWARD para um container WEB 378 21 Serviço NTP (finalizado) 380 21.1 Recursos do capítulo 381 21.2 Instalação do servidor NTP (máquina NtpServer) 382 21.3 Configuração do servidor NTP 382 21.3.1 Brasil br.pool.ntp.org 382 21.3.2 Restringindo acesso ao NTP Server local 383 21.4 Monitorando 384 21.5 Configuração do Cliente 385 21.5.1 Criando um script de inicialização 386 21.6 Práticas do capítulo 387 21.6.1 Prática i0721ax 01: Configurando o serviço NTP 387 21.6.2 Prática i0721ax 02: Configurando o cliente 388 22 Samba (finalizado) 390 22.1 Recursos do capítulo 391 11 Manual Completo de Redes de Computadores com Debian GNU/Linux 22.2 Configurando o servidor Samba 391 22.3 Acessando o recurso 395 22.3.1 Acessando com o cliente gráfico no MAC OS 395 22.3.2 Acessando com o cliente gráfico no Ubuntu GNU/Linux 397 22.3.3 Acessando com o cliente gráfico no Windows 398 22.4 Práticas do capítulo 399 22.4.1 Prática 927a3ik 01: Configurando o serviço SMB 400 22.4.2 Prática 927a3ik 02: Criando um diretório e acessando 400 23 Proxy Squid-cache (finalizado) 402 23.1 Recursos do capítulo 402 23.2 Cenário 402 23.3 Instalando o squid 404 23.4 Configurando a permissão de acesso ao Proxy 404 23.4.1 Permissão para todos que podem acessar o servidor 405 23.4.2 Permitindo acesso apenas para uma determinada rede/subrede 405 23.4.3 Permitindo acesso para apenas uma máquina específica 406 23.5 Ativando cache 406 23.6 Alterando a porta serviço proxy 407 23.7 Habilitando comunicação por portas para clientes 408 23.8 Lista de controle de acesso 408 23.8.1 Bloqueando sites 408 23.8.2 Criando uma lista de sites permitidos 411 23.9 Configurando Proxy + DHCP server 412 23.10 Configurando Clientes por Proxy Transparente para porta 80 413 23.11 SquidGuard e listas de negação 416 23.12 Validando e recarregando a configuração 419 23.13 Configurando uma máquina cliente na abordagem 1 420 23.13.1 GNU/Linux Ubuntu Gráfico 420 23.13.2 Microsoft Windows 10 421 23.13.3 GNU/Linux Debian Terminal 423 23.14 Configurando uma máquina cliente na abordagem 2 424 23.15 Configurando uma máquina cliente na abordagem 3 424 23.16 Práticas do capítulo 424 23.16.1 Prática 30x498c 01: Configurando o Squid na Abordagem 1 424 23.16.2 Prática 30x498c 02: Negando redes sociais 425 23.16.3 Prática 4a2f8c 01: Configurando o Squid para atender 192.168.200.0/24 426 23.16.4 Prática 4a2f8c 02: Bloqueando sites Pornogrâficos 427 23.16.5 Prática ccd6973c 01: Configurando Squid + DHCP 428 24 Proxy Reverso Nginx (finalizado) 430 24.1 Recursos do capítulo 432 24.2 Prática de Nginx 432 24.3 Instalando e configurando o servidor Apache2 432 24.4 Instalando o Nginx 432 24.4.1 Sites available e sites enabled 434 12 Manual Completo de Redes de Computadores com Debian GNU/Linux 24.4.2 Balanceamento de Carga 435 24.5 Configurando o hosts da máquina real 435 24.5.1 Configurando o /etc/hosts no GNU/Linux e MAC OS 436 24.5.2 Configurando o C:\windows\system32\drivers\etc\hosts no Microsoft Windows 436 24.6 Práticas do capítulo 438 24.6.1 Prática 09a378b 01: Configurando o Gateway + Nginx 438 24.6.2 Prática 09a378b 02: Configurando o serviço Apache 439 25 Serviço de mail com Postfix (finalizado) 441 25.1 Recursos do capítulo 441 25.2 Instalação e Configuração Postfix 441 25.3 Testando o serviço com TELNET 443 25.4 Enviando e-mail com PHP 444 25.5 Práticas do capítulo 446 25.5.1 Prática ptf0001 01: Configurando o servidor de e-mail postfix 446 25.5.2 Prática ptf0001 02: Enviar um e-mail com telnet 447 25.5.3 Prática ptf0001 03: Enviando e-mail com PHP 447 26 Serviço FTP (finalizado) 449 26.1 Recursos do capítulo 449 26.2 O protocolo FTP 449 26.2.1 Comunicação em modo passivo 449 26.2.2 Comunicação em modo ativo 450 26.3 Preparando o ambiente 451 26.4 Instalando o serviço FTP 451 26.5 Configuração do serviço 452 26.6 Acessando o serviço FTP 453 26.6.1 Cliente FTP gráfico FILEZILLA 453 26.6.2 Cliente FTP Command Line 454 26.7 Configurando um servidor no modo Passivo 455 26.8 Uso de certificado ssl 455 26.9 Análise da comunicação FTP 456 26.9.1 Conexão ativa 456 26.9.2 Conexão passiva 459 26.9.3 Uso de certificados 459 26.10 Práticas do capítulo 460 26.10.1 Prática ftp0001 01: Configurando um serviço FTP 460 27 Banco de Dados 461 28 Versionadores de código 461 28.1. Versionamento de código 461 28.2 Subversion 461 28.3 Git 462 27 Servidor de Virtualização 463 27 OpenVPN (ATUANDO) 470 27.1 Recursos do capítulo 470 13 Manual Completo de Redes de Computadores com Debian GNU/Linux 27.2 O ambiente 471 27.3 Easy-rsa 472 27.4 Criando certificados para uso no OpenVPN 473 27.5 Configurando o servidor Openvpn 477 27.6 Utilizando em um cliente VPN 480 28 Serviço de controle de Domínio OpenLDAP (atuando) 486 28.1 X.500 486 28.1.1 Object Entry 486 28.2 LDAP 488 28.2.1 Directory Service e Entry 488 29 Ansible (atuando) 494 LAB I Gateway completo com IPCOP (falta formatar) 495 LAB II Enterprise Service Bus (Finalizado) 515 1 Recursos do capítulo 516 2 Preparando o ambiente 516 3 Instalando e configurando o Gateway + Iptables 517 4 Instalando o WSO2 520 4.1 Instalando o Java 8 521 4.2 Instalando o WSO2 522 4.4 Segurança do serviço 524 4.5 Gerar um script de inicialização 526 4.6 Utilizando o painel do Enterprise Service Bus 527 4.6.1 Acessando a interface de manutenção 527 5 Instalando o Apache um provedor de dados 528 6 Configurando um serviço no ESB 529 7 Testando o serviço 533 8 Práticas do capítulo 534 8.1 Prática esb001 01: Configurando o Gateway 534 8.2 Prática esb001 02: Configurando o Enterprise Service Bus 535 8.3 Prática esb001 03: Configurando o serviço WEB com Apache e PHP 536 Referências 538 9.6.3 Prática 8ab001 03: Imprimindo mas com python2 538 Links para Download No texto os links abaixo serão referenciados pelo número, são estes: Link 1 - Download do VirtualBox 6: http://www.aied.com.br/site/pages/redirecionar.php?id=8ddf9d44-e504-e5fa-d062-a494bbf7b 579 http://www.aied.com.br/site/pages/redirecionar.php?id=8ddf9d44-e504-e5fa-d062-a494bbf7b579 http://www.aied.com.br/site/pages/redirecionar.php?id=8ddf9d44-e504-e5fa-d062-a494bbf7b579 14 Manual Completo de Redes de Computadores com Debian GNU/Linux Link 2 - Imagem do Instalador do sistema operacional escolhido - Imagem ISO do Debian 10.6 64 bits: https://cdimage.debian.org/cdimage/archive/10.12.0/amd64/iso-cd/debian-10.12.0-a md64-netinst.iso Link 3 - Virtual Machine- VM com o Debian 10.6 e 64 bits VERSÃO 5 instalado e pronto: Debian_10_64bits_root_123456_usuario_123456_ver5.ova Observação: A VM (32 bits) acima está com aied versão 7, basta executar ele 1 vez e ele se auto atualiza. Já a VM (64 bits) já está atualizada, recomendo a 64 bits então. O capítulo 1 aborda o uso destes arquivos e como o leitor deve utilizar o ambiente. https://cdimage.debian.org/cdimage/archive/10.12.0/amd64/iso-cd/debian-10.12.0-amd64-netinst.iso https://cdimage.debian.org/cdimage/archive/10.12.0/amd64/iso-cd/debian-10.12.0-amd64-netinst.iso https://drive.google.com/file/d/1GKGIx3zKwmBGg4di2IB5aXRzlmD4qy1g/view?usp=sharing 15 Manual Completo de Redes de Computadores com Debian GNU/Linux 1 Considerações e Ambiente (finalizado) Neste capítulo os autores descrevem como preparar o ambiente e observações importantes que o leitor deve estar atento antes de iniciar as práticas do material. Mas antes de confirmar se seu equipamento permite virtualização, veja a mídia externa. Ativando a Virtualização do Processador da Intel | PT - BR: https://youtu.be/CSNRi9HhWi8 1.1 Tecnologias utilizadas e Download de arquivos Para iniciar vamos utilizar o seguinte ambiente devidamente configurado: ● VirtualBox versão (preferência 6.1 mas pode instalar versões mais atuais) para virtualizar as práticas; ● Debian versão 10 32bits ou 64bits Terminal para operar as práticas que são todas em GNU/Linux; ● Putty e WinSCP para acessar remotamente as máquinas virtuais caso queira usar recurso CTRL+C e CTRL+V; O processo de instalação do VirtualBox é fácil, entre no site e veja que em Downloads a versão Windows está bem visível, clique e sem nenhum tipo de cadastro obtenha a VirtualBox para ser instalada. O padrão de instalação é Next > Next > Finish, sem complexidade tecnológica envolvida na instalação padrão. A única observação que deve ser feita é que precisa ser um administrador da máquina para instalar, mas isso é trivial para este curso. Esta é a interface do VirtualBox 6. https://youtu.be/CSNRi9HhWi8 16 Manual Completo de Redes de Computadores com Debian GNU/Linux Agora o leitor deve obter a Imagem virtual que será utilizada para criar em cada prática as máquinas virtuais, neste material será adotado um Debian 10.6 de 32 bits, será usado 32 bits para se manter compatibilidade com as máquinas dos alunos, pois nem toda máquina é capaz de virtualizar uma Virtual Machine de 64 bits. O leitor pode obter a imagem do sistema operacional e fazer sua própria instalação, mas deve estar atento a versão, pois a plataforma GNU/Linux sofre constantes evoluções e naturalmente arquivos podem deixar de existir ou serem alterados. Neste ponto do material você deve fazer o download dos seguintes links que estão na tabela de Links: Link 1, Link 2 e Link 3. Se o leitor quiser fazer sua própria Virtual Machine então deve instalar o Robô Tutor AIED conforme o tópico 1.4 deste material, caso utilize uma Virtual Machine distribuída aqui então o Robô Tutor AIED não precisará instalar pois já está instalado. 1.2 Importando e configurando uma Máquina Virtual O processo de importação é simples, cada prática vai iniciar passando detalhes da configuração, tal como Adaptador de Rede, quantidade de Memória, USB, etc.. Após fazer download do Link 3, no VirtualBox vá até o menu principal e pressione File > Import Appliance... Você deverá escolher o arquivo .ova que obteve no Link 3 e editar a configuração conforme cada prática pede, recomendo que antes de iniciar uma prática esteja atento a isso. 17 Manual Completo de Redes de Computadores com Debian GNU/Linux O usuário e a senha estão em Description, conforme figura abaixo. Repare que a Virtual Machine possui 2 usuário, como deve ser1, veja o vídeo onde a é explicado da importância de se ter um usuário diferente do root no recurso de mídia abaixo. Usuários Linux Parte 1: https://youtu.be/wRSXIIfwMgg Usuários Linux Parte 2: https://youtu.be/h2PUbJ2u1uI Alguns problemas podem ocorrer, o mais grave é a impossibilidade do Hardware de fazer a virtualização, algumas máquinas possuem na BIOS a configuração adequada de virtualização, caso precise adaptar acesse o SETUP e faça a configuração conforme descrição do fabricante de seu computador. Outro problema que pode ocorrer é o USB Controller, caso tenha problemas, pode desabilitar pois não vamos precisar em nossas aulas deste recurso e você poderá transferir arquivos pela rede ou por SSH. 1 Não é referência a The Mandalorian https://youtu.be/wRSXIIfwMgg https://youtu.be/h2PUbJ2u1uI 18 Manual Completo de Redes de Computadores com Debian GNU/Linux Para isso clique na máquina virtual e em configurações da máquina virtual escolha a opção USB conforme figura acima, desmarque a opção “Enable USB Controller”. 1.3 Criando uma Virtual Machine a partir de uma instalação Caso não queira atuar com a máquina virtual oferecida, o leitor pode criar sua própria máquina virtual, utilizando para isso o Link 2 descrito na tabela de links. Caso queira operar com outra distribuição ou versão não garantimos a compatibilidade do layout dos arquivos pois o GNU/Linux está sempre em evolução. No menu principal clique em Machine > New ou pressione o borrão azul conforme figura abaixo. Dê um nome sugestivo, e selecione Type Linux e Version Debian (32-bit) conforme figura abaixo para a VM oferecida no Link 2. Clique em Next >, no próximo passo informe que precisará de 1024 MB de memória, isso é suficiente para um GNU/Linux Debian 10, no Debian 9 eram precisos apenas 512 MB de memória. 19 Manual Completo de Redes de Computadores com Debian GNU/Linux Na próxima sequência de telas, crie um arquivo .vdi de 18GB, mas fique tranquilo que ele vai criar um arquivo pequeno, este arquivo se expande com o passar do tempo, mas nossas práticas são curtas e as VMs criadas são apagadas. Após criar a Virtual Machine, é só selecionar ela na lista e clicar em Start conforme figura abaixo. Selecione a ISO apropriada, obtida no Link 2 e inicie o processo de instalação do GNU/Linux. 20 Manual Completo de Redes de Computadores com Debian GNU/Linux Proceda com a instalação conforme o seguinte recurso de vídeo: Como instalar um GNU/Linux por terminal: https://youtu.be/uIf7ip5KaSw Durante a inicialização o primeiro passo é escolher o mono não gráfico para evitar o uso desnecessário de memória. O GNU/Linux foi desenvolvido e testado em Inglês, então evite escolher Portugues do Brasil no próximo passo, saiba que uma coisa é a linguagem do Sistema Operacional, outra coisa é a Localização do seu computador. https://youtu.be/uIf7ip5KaSw 21 Manual Completo de Redes de Computadores com Debian GNU/Linux Agora no próximo passo vamos localizar a nossa máquina no Brasil, para isso escolha Other > South America > Brazil conforme figura abaixo. O próximo passo é escolher o Charset do sistema operacional, tanto o Python quanto o Mysql agradecem o uso de UTF-8 e o padrão de charset English. 22 Manual Completo de Redes de Computadores com Debian GNU/Linux No próximo passo deve-se definir qual o nome do host que será utilizado, deve-se definir nomes únicos na rede para garantir que quando este host for mapeado pelo servidor DNS não tenhamos ambiguidade de máquinas na rede. Na figura abaixo será solicitado um domínio, ou seja, se a máquina está sob controle de um agente LDAP, exemplo: Microsoft Active Directory e OpenLDAP. 23 Manual Completo de Redes de Computadores com Debian GNU/Linux Embora o root seja um usuário que possui restrição de logon, deve-se definir uma senha robusta para que outros usuários ... ou executar em seu nome o comando SUDO ou o comando SU. Após informar a senha do usuário ROOT, então o instalador deverá solicitar um nome de usuário, informe que quer criar o usuário chamado2: usuario 2 Todas as práticas do material estão direcionadas ao GNU/Linux Debian 10 e para o usuário usuario. 24 Manual Completo de Redes de Computadores com Debian GNU/Linux 25 Manual Completo de Redes de Computadores com Debian GNU/Linux 26 ManualCompleto de Redes de Computadores com Debian GNU/Linux 27 Manual Completo de Redes de Computadores com Debian GNU/Linux 28 Manual Completo de Redes de Computadores com Debian GNU/Linux O próximo passo é escolher quais pacotes serão instalados pelo gerenciador tasksel, veja que foi apenas marcado a opção “Standard System Utilities”, só……. 29 Manual Completo de Redes de Computadores com Debian GNU/Linux A escolha da forma em que vamos formatar o disco deverá ser o modo automático e todo o disco conforme figura abaixo, após o aluno completar parte do curso será demonstrado como realizar a formatação por meio de fdisk e a devida explanação sobre formatação lógica. Sim, vamos utilizar o GRUB para carregar a imagem do sistema operacional GNU/Linux. 30 Manual Completo de Redes de Computadores com Debian GNU/Linux E escolha o sistema de arquivo recém criado com a imagem do GNU/Linux selecionando a opção sda. Várias práticas precisam de comandos que precisam de privilégios, não recomendo o uso da conta do usuário privilegiado root, recomendo o uso de SUDO, para isso siga a configuração do sudo conforme recurso de vídeo: Instalando o SUDO e configurando: https://youtu.be/_B5zdj0871o Após a instalação e configuração do SUDO (ver tópico: Instalando e configurando o SUDO) execute a configuração do Aied conforme tópico: Validação de práticas por meio de Robô e suporte. https://youtu.be/_B5zdj0871o 31 Manual Completo de Redes de Computadores com Debian GNU/Linux 1.4 Validação de práticas por meio de Robô e suporte Como na educação a distância mediada pela Internet o modelo de transferência de conhecimento em grande parte é assíncrona, faz-se referência até ao Tanenbaum neste momento, a validação das práticas devem ser realizadas por intermédio de um agente dotado de validadores que são capazes de explicar ao aluno o ponto em que está errando. Aied.com.br desenvolveu um conjunto de ferramentas que validam as práticas dos alunos realizadas neste material, e naturalmente abrangendo os erros clássicos observados nos últimos anos, trata-se de um agente que envia dados para um servidor de validação, e por este motivo é importante que só seja instalado dentro de uma Máquina Virtual e para fins educacionais. Instalando o Robô de validação de práticas GNU/Linux AIED acessando este link. Quando se obtém a Máquina Virtual disponível no Link 3 todo o ambiente já está devidamente instalado e configurado, nenhuma ação será necessária, mas, caso parta de uma nova instalação do Debian 10 32 bits pelo Link 2, então é necessário instalar o Robô de validação, para isso obtenha o script de instalação com o comando wget descrito no código abaixo. 1. wget -O /tmp/install.py http://www.aied.com.br/linux/download/install.py Onde em 1: wget é o comando que faz uma requisição HTTP e obtém o arquivo de instalação; -O (OOOOOHHHHH maiúsculo)parâmetro que informa onde será salvo o arquivo bem como o nome; Veja no terminal. O que tem no arquivo de instalação? vamos descrever: 1. #!/usr/bin/python3 2. 3. # o aluno baixa este script e este script faz a instalacao 4. import os; 5. import sys 6. import platform 7. 8. machine2bits = {'AMD64': 64, 'x86_64': 64, 'i386': 32, 'x86': 32, 'i686' : 32} http://www.aied.com.br/site/pages/redirecionar.php?id=009bf1c1-8dcd-2e4d-67c6-e74771b49b53 32 Manual Completo de Redes de Computadores com Debian GNU/Linux 9. os_version = machine2bits.get(platform.machine(), None) 10. 11. 12. os.system("apt install libjsoncpp-dev -y"); 13. os.system("apt install g++ -y"); 14. os.system("rm -r /etc/aied"); 15. os.system("rm -r /etc/aied"); 16. os.system("mkdir /etc/aied"); 17. os.system("wget -O /tmp/aied.tar.gz http://www.aied.com.br/linux/download/aied_"+ str(os_version) +".tar.gz" ); 18. os.system("tar -xzvf /tmp/aied.tar.gz -C /etc/aied/"); 19. os.system("rm /usr/sbin/aied"); 20. os.system("rm /usr/bin/aied.py"); 21. os.system("ln -s /etc/aied/aied_"+ str(os_version) +" /usr/bin/aied"); 22. os.system("chmod +x /etc/aied/aied_" + str(os_version) ); Onde; As linhas 14, 15, 16, 19 e 20 limpam possíveis versões anteriores do AIED; As linhas 12 e 13 instalam dependências do programa AIED que é escrito em Linguagem C; A linha 17 faz download do binário; A linha 18 descompacta o arquivo em /etc/aied/; A linha 21 cria um link simbólico para aied_(VERSÃO DO OS) no diretório de comandos; Então agora que conhece o script, execute utilizando o Python (TEM QUE ESTAR COMO ROOT ou UTILIZE SUDO): 1. sudo python3 /tmp/install.py O procedimento deverá ser executado. Para testar o ambiente é simples, digite o comando: sudo aied validar 0000 ola Onde: aied é o programa escrito em Linguagem C obtido com o auxílio do instalador; 33 Manual Completo de Redes de Computadores com Debian GNU/Linux validar é a ação que o programa deverá executar; 0000 ola é o script utilizado para validação pela ferramenta, é o clássico hello world, estes dados serão informados durante as práticas e em destaque. Veja na imagem abaixo que o script 000 ola se chama “Validação do mecanismo, é um teste apenas” e o mais importante, é exibido uma informação de Atenção. Respeitando o aluno e mesmo sabendo que este script está sendo executado em uma Máquina Virtual isolada é informado os comando que serão executados pelo script e que o resultado da saída destes comandos serão enviados para o servidor de validação aied.com.br. Se for aceito então o procedimento executa as operações citadas, que no exemplo acima é apenas um comando e envia para validação. Na figura acima, após ser executado o comando é enviado então para o servidor de validação que fez a validação e no item 1.1 confirmou que está tudo OK ao utilizar a cor VERDE. Algumas práticas serão muito complexas, este mecanismo poderá ajudar o aprendiz a localizar erros difíceis de serem localizados pois executam uma série de testes, como no exemplo abaixo. 34 Manual Completo de Redes de Computadores com Debian GNU/Linux Observe que se um item não for satisfeito então o validador informa com um texto curto como resolver e que se o aluno quiser existe um arquivo de dica específico para este problema, geralmente um texto curto de menos de 1 lauda, com o objetivo de ser dinâmico. 1.5 Configuração do Adaptador de rede no VirtualBox Nas práticas será comum a configuração de redes entre as máquinas virtuais e a própria rede física do aluno. Para configurar uma placa de rede de uma máquina virtual, primeiro deve-se conectar ela na rede, para isso selecione a máquina virtual e clique em configurações. Depois na aba REDE, selecione os adaptadores, o correto é configurar somente a quantidade exata de adaptadores que é requisitado por prática. 35 Manual Completo de Redes de Computadores com Debian GNU/Linux As configurações necessárias para o livro serão: ● Adaptador em modo NAT; ● Adaptador em modo Bridge; ● Adaptador em modo Rede Interna; Mas estas configurações, mesmo demonstradas abaixo, serão solicitadas por prática, afinal cada prática é diferente uma da outra. 1.5.1 Adaptador em NAT Uma configuração padrão é a que menos exige do leitor é a configuração em modo NAT, nesta configuração a Virtual Machine não acessa diretamente a rede LAN do usuário e fica confinada em uma rede interna do VirtualBox com um gateway virtual. Esta configuração é ideal quando não é preciso acessar nenhum serviço na Virtual Machine como um serviço na rede local, ou seja, quando ela fica isolada dentro do Host mas com acesso aos serviços da rede. Configurando o adaptador em NAT https://youtu.be/f72vyMnyl9s Neste cenário a Máquina Real fica isolada da Máquina Virtual não havendo comunicação entre estas, ideal para cenários onde é necessário se preservar a segurança. http://www.aied.com.br/site/pages/redirecionar.php?id=05fef735-c718-574b-ffba-9cc5c0f072db 36 Manual Completo de Redes de Computadores com Debian GNU/Linux 1.5.2 Modo Bridge Com o Adaptador em Bridge o VirtualBox usa um driver de dispositivo real em seu host físico para se conectar na rede local real, para isso utilizaum driver denominado driver de filtro de rede. Isso permite que o VirtualBox intercepte dados da rede física ou envie dados para ela, criando efetivamente uma nova interface de rede no software. Quando uma máquina virtual está usando essa nova interface virtual, parece ao sistema host como se a máquina virtual estivesse fisicamente conectado à interface por meio de um cabo de rede real. O host pode enviar dados para a máquina virtual por meio dessa interface e receber dados dele, isso significa que você pode configurar o roteamento ou a ponte entre a máquina virtual e o resto da sua rede. Configurando o adaptador em bridge https://youtu.be/GzCgHd5wJxI 1.5.3 Rede Interna As redes internas são criadas automaticamente conforme necessário, não há configuração central. Cada rede interna é identificada simplesmente por seu nome (ID). Quando houver mais de um Adaptador virtual ativo com a mesma ID de rede interna, o driver de suporte do VirtualBox conectará automaticamente as placas e atuará como um switch de rede. Utiliza-se esta rede para fazer uma configuração de LAN privada virtual entre as máquinas virtuais. http://www.aied.com.br/site/pages/redirecionar.php?id=c9b29b80-f34a-0173-094f-09764d1e216c 37 Manual Completo de Redes de Computadores com Debian GNU/Linux Configurando o adaptador em rede interna https://youtu.be/1OgTzFyO_Vk 1.6 Divisão dos Capítulos Este material engloba toda a prática de Linux bem como sua implementação em uma rede de computadores, consumindo e disponibilizando serviços, segmento este conteúdo em 2 momentos que devem ser seguidos conforme a prática se revelou ao longo dos anos, são estes: Sistemas Operacionais prático com GNU/Linux: Conteúdo sobre o GNU/Linux em si, este naturalmente isolado, para isso deve-se aplicar do capítulo 2 ao capítulo 13; Redes de Computadores prático com GNU/Linux: Conteúdo sobre como o GNU/Linux se comporta em uma rede de computadores e como estes interagem consumindo ou prestando serviços na rede, aplica-se do capítulo 14 em diante; 1.7 Curso gratuito com certificado O material conta com um Ambiente Virtual de Aprendizagem (AVA) próprio, neste ambiente o aluno pode entregar as práticas e por meio de automação a ferramenta vai validar todos os exercícios, o link do ambiente é: http://universidadegratuitaead.com.br/aied Realize o cadastro, os campos abaixo não poderão ser alterados depois pois um aluno poderia emitir certificado para várias pessoas se isso fosse possível, então os dados que utilizar neste formulário de cadastro serão utilizados para gerar o certificado. http://www.aied.com.br/site/pages/redirecionar.php?id=290a3fb7-6d7b-d7d3-0521-5605a71502cf http://universidadegratuitaead.com.br/aied 38 Manual Completo de Redes de Computadores com Debian GNU/Linux Após cadastrar pode realizar o login direto, pois não há necessidade de confirmar e-mail, pode-se até utilizar e-mail avulso se quiser. Ao entrar, caso queira realizar as disciplinas deste livro, então clique em Cadastro disciplina isolada conforme figura abaixo. Será necessário usar um código, o material é dividido em duas disciplinas, conforme tópico Divisão dos Capítulos. Os códigos são: 5AX31P Sistemas Operacionais prático com GNU/Linux; 7Tz289A Redes de Computadores prático com GNU/Linux; 39 Manual Completo de Redes de Computadores com Debian GNU/Linux Digite o código e clique em Cadastrar, pronto, agora pode acessar Minhas Turmas (ver menu abaixo) e acessar a disciplina que acaba de se cadastrar. ATENÇÃO: Na explicação o autor vai utilizar como exemplo a disciplina de Redes de Computadores prático. Acesse a disciplina, na tela inicial da disciplina o aluno encontra uma lista de aulas que deve realizar, no exemplo abaixo, pressione o link da primeira aula. A aula deve ser iniciada, cada aula exige que o aluno fique no mínimo 3 horas, afinal tem texto para se ler, práticas para se fazer e dúvidas para se tirar com outros membros. 40 Manual Completo de Redes de Computadores com Debian GNU/Linux Toda aula o aluno encontra uma descrição da aula, e uma lista de atividades para se fazer, então o aluno deve clicar uma a uma, acessar a atividade e realizar a prática. Cada prática GNU/LINUX tem um código individual (por aluno), conforme figura abaixo, após o aluno realizar o que se deve fazer (ver figura abaixo) esse código individual deve ser digitado no GNU/LINUX para validar a prática. Veja, na figura abaixo, após realizar a prática completa, o código individual foi digitado. O robô de validação vai executar seu procedimento e no final, no GNU/Linux vai exibir a saída básica com o resultado do aluno. 41 Manual Completo de Redes de Computadores com Debian GNU/Linux Se o aluno atualizar a página WEB do aied (da prática), então a ferramenta deverá exibir esse total de acertos também na interface WEB. Veja que na interface WEB aparece o mesmo resultado. Considere assim a prática entregue. 42 Manual Completo de Redes de Computadores com Debian GNU/Linux 2 Arquitetura e Sistema Operacional (atuando) 2.1 Arquitetura de um computador Um PC é composto de placas de circuito impresso que interconectam vários componentes e fornecem conectores para dispositivos periféricos. A placa principal neste tipo de sistema, a placa-mãe, fornece as conexões que permitem a comunicação dos componentes do sistema. Esses canais de comunicação são normalmente chamados de barramentos de computador. Esta seção destaca os componentes e barramentos com os quais um investigador deve estar familiarizado. A Figura abaixo ilustra como os diferentes componentes discutidos nesta seção são normalmente organizados. Os dois componentes mais importantes da placa-mãe são o processador, que executa os programas, e a memória principal, que armazena temporariamente os programas executados e seus dados associados. O processador é comumente referido como unidade central de processamento (CPU). A CPU acessa a memória principal para obter suas instruções e, em seguida, executa essas instruções para processar os dados. Ler da memória principal costuma ser dramaticamente mais lento do que ler da própria memória da CPU. Como resultado, os sistemas modernos aproveitam várias camadas de memória rápida, chamadas caches, para ajudar a compensar essa disparidade. Cada nível de cache (L1, L2 e assim por diante) é relativamente mais lento e maior do que seu predecessor. Na maioria dos sistemas, esses caches são integrados ao processador e a cada um de seus núcleos. Se os dados não forem encontrados em um determinado cache, eles devem ser buscados no cache de próximo nível ou na memória principal. A CPU depende de sua unidade de gerenciamento de memória (MMU) para ajudar a encontrar onde os dados estão armazenados. A MMU é a unidade de hardware que traduz o endereço que o processador solicita para seu endereço correspondente na memória principal. Conforme descreveremos mais adiante neste capítulo, as estruturas de dados para gerenciar a tradução de endereços também são armazenadas na memória principal. 43 Manual Completo de Redes de Computadores com Debian GNU/Linux Como uma determinada tradução pode exigir várias operações de leitura de memória, o processador usa um cache especial, conhecido como buffer lookaside de tradução (TLB), para a tabela de tradução MMU. Antes de cada acesso à memória, o TLB é consultado antes de solicitar à MMU para realizar uma operação de tradução de endereço cara. 2.1.1 North and Southbridge A CPU depende do controlador de memória para gerenciar a comunicação com a memória principal. O controlador de memória é responsável por mediar solicitações potencialmente simultâneas de memória do sistema do (s) processador (es) e dispositivos. O controlador de memória pode ser implementado em um chip separado ou integrado no próprio processador. Em PCs mais antigos, a CPU conectava-se à ponte norte (hub controlador de memória) usando o barramento frontal e a ponte norte conectada à memória principal por meio do barramento de memória. Dispositivos (por exemplo, placas de redee controladores de disco) foram conectados por meio de outro chip, chamado ponte sul ou hub controlador de entrada / saída, que tinha uma única conexão compartilhada com a ponte norte para acesso à memória e à CPU. Para melhorar o desempenho e reduzir os custos dos sistemas mais novos, a maioria dos recursos associados ao hub do controlador de memória agora estão integrados ao processador. A funcionalidade restante do chipset, previamente implementada na ponte sul, está concentrada em um chip conhecido como hub controlador da plataforma. 2.1.2 Acesso direto à memória Para melhorar o desempenho geral, a maioria dos sistemas modernos fornece aos dispositivos de E/S a capacidade de transferir diretamente os dados armazenados na memória do sistema sem intervenção do processador. Esse recurso é chamado de acesso direto à memória (DMA). Antes de o DMA ser introduzido, a CPU era totalmente consumida durante as transferências de E/S e frequentemente agia como intermediária. Em arquiteturas modernas, a CPU pode iniciar uma transferência de dados e permitir que um controlador DMA gerencie a transferência de dados, ou um dispositivo de E/S pode iniciar uma transferência independente da CPU. Além de seu impacto óbvio no desempenho do sistema, o DMA também tem ramificações importantes para a análise forense de memória. Ele fornece um mecanismo para acessar diretamente o conteúdo da memória física de um dispositivo periférico sem envolver o software não confiável em execução na máquina. Por exemplo, o barramento PCI oferece suporte a dispositivos que atuam como mestres de barramento, o que significa que eles podem solicitar o controle do barramento para iniciar transações. Como resultado, um dispositivo PCI com funcionalidade bus master e suporte DMA pode acessar a memória do sistema sem envolver a CPU. Outro exemplo é a interface IEEE 1394, comumente conhecida como Firewire. O chip controlador de host IEEE 1394 fornece um barramento de expansão serial ponto a ponto destinado a conectar dispositivos periféricos de alta velocidade a um PC. Embora a 44 Manual Completo de Redes de Computadores com Debian GNU/Linux interface IEEE 1394 seja normalmente encontrada nativamente apenas em sistemas de ponta, você pode adicionar a interface a ambos desktops e laptops usando placas de expansão. 2.1.3 Memória Volátil (RAM) A memória principal de um PC é implementada com memória de acesso aleatório (RAM), que armazena o código e os dados que o processador acessa e armazena ativamente. Em contraste com o armazenamento de acesso sequencial normalmente associado a discos, o acesso aleatório se refere à característica de ter um tempo de acesso constante, independentemente de onde os dados estão armazenados na mídia. A memória principal na maioria dos PCs é RAM dinâmica (DRAM). É dinâmico porque aproveita a diferença entre um estado carregado e descarregado de um capacitor para armazenar um pouco de dados. Para que o capacitor mantenha esse estado, ele deve ser atualizado periodicamente - uma tarefa que o controlador de memória normalmente executa. A RAM é considerada memória volátil porque requer energia para que os dados permaneçam acessíveis. Assim, exceto no caso de ataques de inicialização a frio (https://citp.princeton.edu/research/memory), depois que um PC é desligado, a memória volátil é perdida. Esta é a principal razão pela qual a tática de resposta a incidentes "puxar a tomada" não é recomendada se você planeja preservar as evidências sobre o estado atual do sistema. 2.1.4 Arquiteturas de CPU Como mencionado anteriormente, a CPU é um dos componentes mais importantes de um sistema de computador. Para extrair com eficácia a estrutura da memória física e compreender como o código malicioso pode comprometer a segurança do sistema, você deve ter um conhecimento sólido do modelo de programação que a CPU fornece para acessar a memória. Embora a seção anterior tenha enfocado a organização física do hardware, esta seção enfoca a organização lógica exposta ao sistema operacional. Esta seção começa discutindo alguns tópicos gerais que pertencem às arquiteturas de CPU e, em seguida, destaca os recursos relevantes para a análise de memória. Em particular, esta seção enfoca a organização de 32 bits (IA-32) e 64 bits (Intel 64), conforme especificado no Intel 64 and IA-32 Architecture Software Developer. Para que a CPU execute instruções e acesse os dados armazenados na memória principal, ela deve especificar um endereço único para esses dados. Os processadores discutidos neste livro aproveitam o endereçamento de bytes e a memória é acessada como uma sequência de bytes. O espaço de endereço se refere a um intervalo de endereços válidos usados para identificar os dados armazenados em uma alocação finita de memória. Em particular, este livro se concentra em sistemas que definem um byte como uma quantidade de 8 bits. Este esquema de endereçamento geralmente começa com o byte 0 e termina no deslocamento do byte final de memória na alocação. O único espaço de endereço contínuo exposto a um programa em execução é conhecido como espaço de endereço linear. Com base nos modelos de memória discutidos no livro e 45 Manual Completo de Redes de Computadores com Debian GNU/Linux seu uso de paginação, usamos os termos endereços lineares e endereços virtuais alternadamente. Usamos o termo espaço de endereço físico para nos referir aos endereços que o processador solicita para acessar a memória física. A arquitetura IA-32 geralmente se refere à família de arquiteturas x86 que oferecem suporte à computação de 32 bits. Em particular, ele especifica o conjunto de instruções e o ambiente de programação para os processadores de 32 bits da Intel. O IA-32 é uma pequena máquina endian que usa endereçamento de bytes. O software executado em um processador IA-32 pode ter um espaço de endereço linear e um espaço de endereço físico de até 4 GB. Como você verá posteriormente, você pode expandir o tamanho da memória física para 64 GB usando o recurso IA-32 Physical Address Extension (PAE). Esta seção e o restante do livro enfocam a operação de modo protegido da arquitetura IA-32, que é o modo operacional que fornece suporte para recursos como memória virtual, paginação, níveis de privilégio e segmentação. Este é o estado principal do processador e também o modo em que a maioria dos sistemas operacionais modernos são executados. A arquitetura IA-32 define uma pequena quantidade de memória extremamente rápida, chamada de registradores, que a CPU usa para armazenamento temporário durante o processamento. Cada núcleo do processador contém oito registros de uso geral de 32 bits para realizar operações lógicas e aritméticas, bem como vários outros registros que controlam o comportamento do processador. Esta seção destaca alguns dos registros de controle relevantes para a análise de memória. O registro EIP, também conhecido como contador de programa, contém o endereço linear da próxima instrução a ser executada. A arquitetura IA-32 também possui cinco registros de controle que especificam a configuração do processador e as características da tarefa de execução. CR0 contém sinalizadores que controlam o modo de operação do processador, incluindo um sinalizador que ativa a página CR1 é reservado e não deve ser acessado. CR2 contém o endereço linear que causou uma falha de página. CR3 contém o endereço físico da estrutura inicial usada para tradução de endereço. Ele é atualizado durante as mudanças de contexto quando uma nova tarefa é agendada. CR4 é usado para habilitar extensões arquitetônicas, incluindo PAE. Os processadores IA-32 implementam dois mecanismos de gerenciamento de memória: segmentação e paginação. A segmentação divide o espaço de endereço linear de 32 bits em vários segmentos de comprimento variável. Todas as referências de memória IA-32 são endereçadas usando um seletor de segmento de 16 bits, que identifica um descritor de segmento específico e um deslocamento de 32 bits no segmento especificado. Um descritor de segmento é uma estruturade dados residente na memória que define a localização, tamanho, tipo e permissões para um determinado segmento. Cada núcleo do processador contém dois registros especiais, GDTR e LDTR, que apontam para tabelas de descritores de segmento, chamadas de Tabela de Descritores Globais (GDT) e Tabela de Descritores Locais, respectivamente. Os registros de segmentação CS (para código), SS (para pilha) e DS, ES, FS e GS (cada um para dados) devem sempre conter seletores de segmento válidos. Embora a segmentação seja obrigatória, os sistemas operacionais discutidos neste livro ocultam o endereçamento segmentado, definindo um conjunto de segmentos sobrepostos 46 Manual Completo de Redes de Computadores com Debian GNU/Linux com endereço de base zero, criando assim a aparência de um único espaço de endereço linear "plano" contínuo. No entanto, as proteções de segmentação ainda são aplicadas para cada segmento e descritores de segmento separados devem ser usados para referências de código e dados. A paginação fornece a capacidade de virtualizar o espaço de endereço linear. Ele cria um ambiente de execução no qual um grande espaço de endereço linear é simulado com uma quantidade modesta de memória física e armazenamento em disco. Cada espaço de endereço linear de 32 bits é dividido em seções de comprimento fixo, chamadas de páginas, que podem ser mapeadas na memória física em uma ordem arbitrária. Quando um programa tenta acessar um endereço linear, esse mapeamento usa diretórios de páginas residentes na memória e tabelas de páginas para converter o endereço linear em um endereço físico. No cenário típico de uma página de 4 KB, conforme mostrado na Figura 1-2, o endereço virtual de 32 bits é dividido em três seções, cada uma delas usada como um índice na hierarquia da estrutura de paginação ou na página física associada. A arquitetura IA-32 também suporta páginas de 4 MB, cuja tradução requer apenas um diretório de página. Ao usar diferentes estruturas de paginação para diferentes processos, um sistema operacional pode fornecer a cada processo a aparência de um ambiente de programação única por meio de um espaço de endereço linear virtualizado. A Figura 1-3 mostra uma divisão mais detalhada dos bits que traduzem um endereço virtual em um deslocamento na memória física. 2.2 Sistema Operacional 2.2.1 Gerenciamento de processo 2.2.2 Gerencimaento de memória 2.2.3 Sistema de Arquivos 2.2.4 Sistema de E/S 2.3 Estrutrua de Dados 47 Manual Completo de Redes de Computadores com Debian GNU/Linux 2.3.1 Tipos básicos de estruturas 2.3.2 Tipos complexos 48 Manual Completo de Redes de Computadores com Debian GNU/Linux 3 Virtualização (finalizado) A virtualização usa software para criar uma camada de abstração sobre o hardware do computador que permite que os elementos de hardware de um único computador - processadores, memória, armazenamento e muito mais - sejam divididos em vários computadores virtuais, comumente chamados de Máquinas Virtuais (VMs). Cada VM executa seu próprio sistema operacional (SO) e se comporta como um computador independente, embora esteja sendo executado em apenas uma parte do hardware do computador subjacente real. 3.1 Recursos do capítulo Todo o conteúdo externo ao texto pode ser obtido no link abaixo. Os recursos externos podem ser obtidos neste link. 3.2 Introdução a Virtualização A idéia de abstração é comum na área da Computação, veja que segundo Tanenbaum o Sistema Operacional (SO) é uma abstração do hardware e naturalmente uma simplificação da complexidade do Hardware. Em outro capítulo Tanenbaum afirma que estas abstrações permite que se faça um isolamento de processos em "Caixas de Areia" utilizando abstrações em abstrações. A Virtualização de Sistemas Operacionais permite: ● Que se crie ambientes controlados para testes e experimentações; ● Isolar aplicações com algum risco negativo para o ambiente; ● Se execute aplicações legadas para Sistemas Operacionais descontinuados; ● Redução de parque de computadores reais com uso de Virtualização; ● Upgrade de sistemas; ● Aprendizado; Hoje, a virtualização é uma prática padrão na arquitetura de TI corporativa. É também a tecnologia que impulsiona a economia da computação em nuvem. A virtualização permite que os provedores de nuvem atendam aos usuários com seu hardware físico de computador existente; ele permite que os usuários da nuvem comprem apenas os recursos de computação de que precisam, quando precisam, e escalem esses recursos de maneira econômica conforme suas cargas de trabalho aumentam. A virtualização traz vários benefícios para operadoras de data center e provedores de serviços: Eficiência de recursos: antes da virtualização, cada servidor de aplicativo exigia sua própria CPU física dedicada - a equipe de TI comprava e configurava um servidor separado para cada aplicativo que desejava executar. (TI preferia um aplicativo e um sistema 49 Manual Completo de Redes de Computadores com Debian GNU/Linux operacional (SO) por computador por motivos de confiabilidade.) Invariavelmente, cada servidor físico seria subutilizado. Por outro lado, a virtualização de servidor permite executar vários aplicativos - cada um em sua própria VM com seu próprio sistema operacional - em um único computador físico (normalmente um servidor x86) sem sacrificar a confiabilidade. Isso permite a utilização máxima da capacidade de computação do hardware físico. Gerenciamento mais fácil: substituir computadores físicos por VMs definidas por software torna mais fácil usar e gerenciar políticas escritas no software. Isso permite que você crie fluxos de trabalho automatizados de gerenciamento de serviços de TI. Por exemplo, ferramentas automatizadas de implantação e configuração permitem que os administradores definam coleções de máquinas virtuais e aplicativos como serviços, em modelos de software. Isso significa que eles podem instalar esses serviços repetidamente e de forma consistente, sem incômodos e demorados, e configuração manual sujeita a erros. Os administradores podem usar políticas de segurança de virtualização para impor certas configurações de segurança com base na função da máquina virtual. As políticas podem até aumentar a eficiência dos recursos desativando as máquinas virtuais não utilizadas para economizar espaço e capacidade de computação. Tempo de inatividade mínimo: travamentos do sistema operacional e de aplicativos podem causar tempo de inatividade e prejudicar a produtividade do usuário. Os administradores podem executar várias máquinas virtuais redundantes lado a lado e fazer failover entre elas quando surgem problemas. Executar vários servidores físicos redundantes é mais caro. Provisionamento mais rápido: comprar, instalar e configurar hardware para cada aplicativo consome muito tempo. Desde que o hardware já esteja instalado, o provisionamento de máquinas virtuais para executar todos os seus aplicativos é significativamente mais rápido. Você pode até automatizá-lo usando um software de gerenciamento e incorporá-lo aos fluxos de trabalho existentes. As máquinas virtuais (VMs) são ambientes virtuais que simulam uma computação física na forma de software. Eles normalmente incluem vários arquivos contendo a configuração da VM, o armazenamento para o disco rígido virtual e alguns instantâneos da VM que preservam seu estado em um determinado momento. 3.3 Hypervisors Um hipervisor é a camada de software que coordena as VMs. Ele serve como uma interface entre a VM e o hardware físico subjacente, garantindo que cada um tenha acesso aos recursos físicos de que precisa para executar. Também garante que as VMs não interfiram umas com as outras interferindo no espaço de memória ou nos ciclos de computação umas das outras. Existem dois tipos de Hypervisors: ● Os hypervisors tipo 1 ou “bare-metal” interagem com os recursos físicos subjacentes, substituindo o sistema operacional tradicional por completo. Eles geralmente aparecem em cenários de servidor virtual. ● Os hypervisors tipo 2 são executados como um aplicativoem um sistema operacional existente. Mais comumente usados em dispositivos terminais para executar sistemas operacionais alternativos, eles carregam uma sobrecarga de 50 Manual Completo de Redes de Computadores com Debian GNU/Linux desempenho porque devem usar o sistema operacional host para acessar e coordenar os recursos de hardware subjacentes. 3.4 Tipos de virtualização Nesta seção, abordaremos os seguintes tipos de virtualização: ● Virtualização de desktop ● Virtualização de rede ● Virtualização de armazenamento ● Virtualização de dados ● Virtualização de aplicativos ● Virtualização de data center ● Virtualização de CPU ● Virtualização de GPU ● Virtualização Linux ● Virtualização de nuvem 3.4.1 Virtualização de desktop A virtualização de desktop permite que você execute vários sistemas operacionais de desktop, cada um em sua própria VM no mesmo computador. Existem dois tipos de virtualização de desktop, a infraestrutura de desktop virtual (VDI) executa vários desktops em VMs em um servidor central e os transmite para usuários que fazem login em dispositivos thin client. Desta forma, o VDI permite que uma organização forneça a seus usuários acesso a uma variedade de sistemas operacionais a partir de qualquer dispositivo, sem instalar sistemas operacionais em nenhum dispositivo. A virtualização de desktop local executa um hipervisor em um computador local, permitindo ao usuário executar um ou mais sistemas operacionais adicionais naquele computador e alternar de um sistema operacional para outro conforme necessário, sem alterar nada no sistema operacional principal. 51 Manual Completo de Redes de Computadores com Debian GNU/Linux 3.4.2 Virtualização de rede A virtualização de rede usa software para criar uma “visão” da rede que um administrador pode usar para gerenciar a rede a partir de um único console. Ele abstrai elementos e funções de hardware (por exemplo, conexões, switches, roteadores, etc.) e os abstrai em software executado em um hipervisor. O administrador da rede pode modificar e controlar esses elementos sem tocar nos componentes físicos subjacentes, o que simplifica drasticamente o gerenciamento da rede. Os tipos de virtualização de rede incluem rede definida por software (SDN), que virtualiza hardware que controla o roteamento de tráfego de rede (chamado de "plano de controle") e virtualização de função de rede (NFV), que virtualiza um ou mais dispositivos de hardware que fornecem uma rede específica (por exemplo, um firewall, balanceador de carga ou analisador de tráfego), tornando esses dispositivos mais fáceis de configurar, provisionar e gerenciar. Wellington, falar de GNS3 3.4.3 Virtualização de armazenamento A virtualização de armazenamento permite que todos os dispositivos de armazenamento na rede - sejam eles instalados em servidores individuais ou unidades de armazenamento autônomas - sejam acessados e gerenciados como um único dispositivo de armazenamento. Especificamente, a virtualização de armazenamento agrupa todos os blocos de armazenamento em um único pool compartilhado, a partir do qual eles podem ser atribuídos a qualquer VM na rede, conforme necessário. A virtualização de armazenamento facilita o provisionamento de armazenamento para VMs e aproveita ao máximo todo o armazenamento disponível na rede. 3.4.4 Virtualização de dados As empresas modernas armazenam dados de vários aplicativos, usando vários formatos de arquivo, em vários locais, desde a nuvem até hardware e sistemas de software no local. A virtualização de dados permite que qualquer aplicativo acesse todos esses dados - independentemente da fonte, formato ou localização. As ferramentas de virtualização de dados criam uma camada de software entre os aplicativos que acessam os dados e os sistemas que os armazenam. A camada traduz a solicitação de dados de um aplicativo ou consulta conforme necessário e retorna resultados que podem abranger vários sistemas. A virtualização de dados pode ajudar a quebrar os repostiŕorios de dados quando outros tipos de integração não são viáveis, desejáveis ou acessíveis. 3.4.5 Virtualização de aplicativos A virtualização de aplicativos executa o software do aplicativo sem instalá-lo diretamente no sistema operacional do usuário. Isso difere da virtualização de desktop completa 52 Manual Completo de Redes de Computadores com Debian GNU/Linux (mencionada acima) porque apenas o aplicativo é executado em um ambiente virtual - o sistema operacional no dispositivo do usuário final é executado normalmente. Existem três tipos de virtualização de aplicativos: Virtualização de aplicativo local: O aplicativo inteiro é executado no dispositivo endpoint, mas é executado em um ambiente de tempo de execução em vez de no hardware nativo. Streaming do aplicativo: o aplicativo reside em um servidor que envia pequenos componentes do software para serem executados no dispositivo do usuário final quando necessário. Virtualização de aplicativo baseada em servidor O aplicativo é executado inteiramente em um servidor que envia apenas sua interface de usuário ao dispositivo cliente. Virtualização de data center abstrai a maior parte do hardware de um data center em software, permitindo que um administrador divida um único data center físico em vários data centers virtuais para clientes diferentes. Cada cliente pode acessar sua própria infraestrutura como serviço (IaaS), que seria executada no mesmo hardware físico subjacente. Os data centers virtuais oferecem uma entrada fácil na computação baseada em nuvem, permitindo que uma empresa configure rapidamente um ambiente de data center completo sem comprar hardware de infraestrutura. 3.4.6 Virtualização de CPU A virtualização da CPU (unidade central de processamento) é a tecnologia fundamental que torna possíveis os hipervisores, as máquinas virtuais e os sistemas operacionais. Ele permite que uma única CPU seja dividida em várias CPUs virtuais para uso por várias VMs. No início, a virtualização da CPU era totalmente definida por software, mas muitos dos processadores de hoje incluem conjuntos de instruções estendidas que suportam a virtualização da CPU, o que melhora o desempenho da VM. 3.4.7 Virtualização de GPU Uma GPU (unidade de processamento gráfico) é um processador multi-core especial que melhora o desempenho geral da computação, assumindo o processamento gráfico ou matemático pesado. A virtualização de GPU permite que várias VMs usem todo ou parte do poder de processamento de uma única GPU para vídeo mais rápido, inteligência artificial (IA) e outros aplicativos gráficos ou matemáticos. As GPUs de passagem disponibilizam toda a GPU para um único sistema operacional convidado. As vGPUs compartilhadas dividem os núcleos físicos da GPU entre várias GPUs virtuais (vGPUs) para uso por VMs baseadas em servidor. Virtualização Linux O Linux inclui seu próprio hipervisor, chamado de máquina virtual baseada em kernel (KVM), que suporta extensões de processador de virtualização da Intel e AMD para que você possa criar VMs baseadas em x86 a partir de um sistema operacional Linux host. 53 Manual Completo de Redes de Computadores com Debian GNU/Linux Como um sistema operacional de código aberto, o Linux é altamente personalizável. Você pode criar VMs executando versões do Linux personalizadas para cargas de trabalho específicas ou versões com segurança reforçada para aplicativos mais confidenciais. 3.4.8 Virtualização de nuvem Conforme observado acima, o modelo de computação em nuvem depende da virtualização. Ao virtualizar servidores, armazenamento e outros recursos físicos de data center, os provedores de computação em nuvem podem oferecer uma variedade de serviços aos clientes, incluindo o seguinte: Infraestrutura como serviço (IaaS): recursos virtualizados de servidor, armazenamento e rede que você pode configurar com base em seus requisitos. Plataforma como serviço (PaaS): ferramentas de desenvolvimento virtualizadas, bancos de dados e outros serviços baseados em nuvem que você pode usar para construir seuspróprios aplicativos e soluções baseados em nuvem. Software como serviço (SaaS): aplicativos de software que você usa na nuvem. SaaS é o serviço baseado em nuvem mais abstraído do hardware. 3.6 Práticas da aula Nesta sessão o aluno deve realizar as práticas na sequência, caso ocorra problemas é possível que o mesmo deva ter a conhecimento para desfazer, isto já é levado em consideração. 3.6.1 Prática 98a917ce 01: Criando o ambiente da aula Nesta prática o aluno deve utilizar instalar os softwares necessários e instalar o Debian: 1. Faça download (ver tópico de links neste Livro): a. VirtualBox; b. Cd de instalação do Debian; 2. Instale o Debian e configure da seguinte forma (utilize este link https://youtu.be/uIf7ip5KaSw): a. English; b. usuário: usuario c. senha: 123456 3. Instale o sudo, utilize este link: https://youtu.be/_B5zdj0871o 4. Instale o programa aied, utilize este link: https://youtu.be/dG6Reqp2ukc Execute o robô de validação aied conforme comando abaixo. sudo aied validar 98a917ce checkpoint01 https://youtu.be/uIf7ip5KaSw https://youtu.be/_B5zdj0871o https://youtu.be/dG6Reqp2ukc 54 Manual Completo de Redes de Computadores com Debian GNU/Linux 4 Sistema de arquivos no GNU/Linux e principais diretórios ATENÇÃO WELLINGTON, ADICIONAR STAT Um sistema de arquivos GNU/Linux é uma coleção estruturada de arquivos em uma unidade de armazenamento secundário, uma partição é um segmento da memória e contém alguns dados específicos e em nossa máquina, pode haver várias partições da memória. Sistema de Arquivos no Linux Teoria e prática completa - Parte 1 O sistema de computador de uso geral precisa armazenar dados sistematicamente para que possamos acessar facilmente os arquivos em menos tempo. Ele armazena os dados em sistemas secundários de armazenamento, tal como um HD, um SSD, Pendrive, etc.. O computador salva os dados no armazenamento principal3 (Memória RAM) e ele pode perder os dados se for desligado, o armazenamento de dados é preferido em sistemas secundários que em comparação com a RAM padrão não perde dados após um desligamento. Escrita em um sistema de arquivos 4.1 Recursos do capítulo Todo o conteúdo externo ao texto pode ser obtido no link abaixo. Os recursos externos podem ser obtidos neste link. 3 No início os processos foram projetados para serem executados por inteiro na posição 0 de uma memória, e naturalmente isto exige que todos os dados estejam nesta, o aluno deve ler o capítulo 1 do livro: Sistemas Operacionais Modernos do autor Tanenbaum. https://www.youtube.com/watch?v=8AQVVeJbvEI http://www.aied.com.br/site/pages/recurso.php?id=b70bde2f-3894-408a-45c1-4f98a9ad912a 55 Manual Completo de Redes de Computadores com Debian GNU/Linux 4.2 Virtual File System O sistema de arquivos GNU/Linux é geralmente uma camada embutida de um sistema operacional Linux usada para lidar com o gerenciamento de dados do armazenamento. Isso ajuda a organizar o arquivo no armazenamento em disco. Ele gerencia o nome do arquivo, o tamanho do arquivo, a data de criação e muito mais informações sobre um arquivo. O sistema de arquivos do GNU/Linux tem uma estrutura de arquivos hierárquica, pois contém um diretório raiz e seus subdiretórios e todos os outros diretórios podem ser acessados a partir do diretório raiz a partir de comandos de navegação, um detalhe importante é que uma partição geralmente possui apenas um sistema de arquivos. Camada de abstração que ofusca a complexidade do hardware Um sistema de arquivos é projetado de forma que possa gerenciar e fornecer espaço para dados de armazenamento não voláteis. Todos os sistemas de arquivos exigiam um namespace que é uma metodologia de nomenclatura e organização. O namespace define o processo de nomenclatura, o comprimento do nome do arquivo ou um subconjunto de caracteres que podem ser usados para o nome do arquivo. Ele também define a estrutura lógica dos arquivos em um segmento de memória, como o uso de diretórios para organizar os arquivos específicos. Depois que um namespace é descrito, uma descrição de metadados deve ser definida para esse arquivo específico. No GNU/Linux a montagem do sistema de arquivo está codificada na biblioteca fs.h e com esta biblioteca pode-se montar ou desmontar qualquer hardware devidamente acoplado e operacional. 1. #include <linux/fs.h> 2. 3. extern int register_filesystem(struct file_system_type *); 4. extern int unregister_filesystem(struct file_system_type *); Quando uma solicitação é feita para montar um sistema de arquivos em um diretório em seu namespace, o Virtual File System chamará o método mount() apropriado para o sistema de arquivos específico. A estrutura de dados precisa oferecer suporte a uma estrutura de diretório hierárquica; esta estrutura é usada para descrever o espaço em disco disponível e usado para um 56 Manual Completo de Redes de Computadores com Debian GNU/Linux determinado bloco. Também contém outros detalhes sobre os arquivos, como tamanho do arquivo, data e hora de criação, atualização e última modificação. Além disso, ele armazena informações avançadas sobre a seção do disco, como partições e volumes. Os dados avançados e as estruturas que eles representam contêm as informações sobre o sistema de arquivos armazenado na unidade; é distinto e independente dos metadados do sistema de arquivos. O sistema de arquivos Linux contém uma arquitetura de implementação de software do sistema de arquivos em duas partes. Considere a imagem abaixo: Na figura acima o Virtual File System fornece um único conjunto de comandos para o kernel e os desenvolvedores acessarem o sistema de arquivos. Este sistema de arquivos virtual requer o driver de sistema específico para fornecer uma interface com o sistema de arquivos. O sistema de arquivos requer uma API para acessar as chamadas de função para interagir com os componentes do sistema de arquivos, como arquivos e diretórios. API facilita tarefas como criação, exclusão e cópia de arquivos. Ele facilita um algoritmo que define a organização dos arquivos em um sistema de arquivos. 1. struct super_operations { 2. struct inode *(*alloc_inode)(struct super_block *sb); 3. void (*destroy_inode)(struct inode *); 4. void (*dirty_inode) (struct inode *, int flags); 5. int (*write_inode) (struct inode *, int); 6. void (*drop_inode) (struct inode *); 7. void (*delete_inode) (struct inode *); 8. void (*put_super) (struct super_block *); 9. int (*sync_fs)(struct super_block *sb, int wait); 10. int (*freeze_fs) (struct super_block *); 11. int (*unfreeze_fs) (struct super_block *); 12. int (*statfs) (struct dentry *, struct kstatfs *); 13. int (*remount_fs) (struct super_block *, int *, char *); 14. void (*clear_inode) (struct inode *); 15. void (*umount_begin) (struct super_block *); 57 Manual Completo de Redes de Computadores com Debian GNU/Linux 16. int (*show_options)(struct seq_file *, struct dentry *); 17. ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); 18. ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); 19. int (*nr_cached_objects)(struct super_block *); 20. void (*free_cached_objects)(struct super_block *, int); 21. }; Onde: alloc_inode: este método é chamado por alloc_inode() para alocar memória para struct inode e inicializá-lo; destroy_inode: este método é chamado por destroy_inode() para liberar recursos alocados para struct inode; dirty_inode: este método é chamado pelo VFS para marcar um inode sujo e naturalmente poderá ser descartado. write_inode: este método é chamado quando o VFS precisa gravar um inode no disco; drop_inode: chamado quando o último acesso ao inode é descartado, elimina o inode; delete_inode: chamado quando o VFS deseja excluir um inode; put_super: chamado quando o VFS deseja liberar o superbloco (ou seja, desmontar); sync_fs: chamado quando o VFS está gravando todos os dados sujos associados a um superbloco; freeze_fs: chamado quando o VFS está bloqueando um sistema de arquivos e forçando-o a um estado consistent; unfreeze_fs: chamado
Compartilhar