ARC60808-2014-2

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

Professores: Odilson Tadeu Valle e Tulio Alberton Ribeiro
Encontros: 2ª feira, 4ª feira e 6ª feira entre 13h30 às 15h20 turma A e 15h40 às 17h30 turma B
Atendimento paralelo: Odilson 3ª feira das 9h40 às 10h35 e 4ª das 14h25 às 15h20. Local: Lab. de Desenvolvimento.
Email: odilson@ifsc.edu.br e tulio.alberton@ifsc.edu.br
IMPORTANTE: o direito de recuperar uma avaliação em que se faltou somente existe mediante justificativa reconhecida pela coordenação. Assim, deve-se protocolar a justificativa no prazo de 48 horas, contando da data e horário da avaliação e aguardar o parecer da coordenação.

Referências bibliográficas

Material de Apoio

Site para treinar comandos básicos. Simula um terminal shell do Linux. Não apresenta todas as funcionalidades do shell normal.

Site para treinar desenvolvimento de shell scripts.

Cronograma de atividades

Diário de aulas proposto
Aula Data Horas Conteúdo Recursos
1 30/7 2 Apresentação da Disciplina Sala de Aula, projetor multimídia, wiki
2 1/8 2 Revisão comandos básicos em Linux Sala de Aula/Lab, Projetor Multimídia, máquinas virtuais
3 4/8 2 Revisão comandos básicos em Linux Lab, Projetor multimídia, máquinas virtuais
4 6/8 2 Revisão comandos básicos em Linux Lab, Projetor multimídia, máquinas virtuais
5 11/8 2 Editor VI Lab, Projetor multimídia, máquinas virtuais
6 13/8 2 Lógica de programação Lab, Projetor multimídia, máquinas virtuais
7 15/8 2 Shell Script lab, Projetor multimídia, máquinas virtuais
8 18/8 2 Shell Script lab, Projetor multimídia, máquinas virtuais
9 20/8 2 Exercícios: revisão e esclarecimento de dúvidas para a primeira avaliação. lab, Projetor multimídia, máquinas virtuais
10 22/8 2 Avaliação 1 lab, Projetor multimídia, máquinas virtuais
11 25/8 2 Administração de usuários e grupos. lab, Projetor multimídia, máquinas virtuais
12 27/8 2 Administração de usuários e grupos. lab, Projetor multimídia, máquinas virtuais
13 29/8 2 Permissão de acesso à arquivos. lab, Projetor multimídia, máquinas virtuais
14 1/9 2 Instalação de Programas. lab, Projetor multimídia, máquinas virtuais
15 3/9 2 Sistemas de Arquivos. lab, Projetor multimídia, máquinas virtuais
16 5/9 2 Sistemas de Arquivos. lab, Projetor multimídia, máquinas virtuais
17 8/9 2 Cotas em disco para usuários e grupos. lab, Projetor multimídia, máquinas virtuais
18 10/9 2 Agendamento de Tarefas. lab, Projetor multimídia, máquinas virtuais
19 12/9 2 Arquivos de registros de logs. lab, Projetor multimídia, máquinas virtuais
20 15/9 2 Políticas de backup. lab, Projetor multimídia, máquinas virtuais
21 17/9 2 Configuração de interface de rede. Lab, Projetor multimídia, máquinas virtuais
22 19/9 2 Ferramentas de caprura de pacotes. lab, Projetor multimídia, máquinas virtuais
23 22/9 2 Configuração de sub-redes. lab, Projetor multimídia, máquinas virtuais
24 24/9 2 NAT. lab, Projetor multimídia, máquinas virtuais
25 26/9 2 Exercícios. Revisão antes da avaliação e esclarecimento de dúvidas. lab, Projetor multimídia, máquinas virtuais
26 29/9 2 Avaliação 2. lab, Projetor multimídia, máquinas virtuais
27 1/10 2 DNS. lab, Projetor multimídia, máquinas virtuais
28 3/10 2 DNS. lab, Projetor multimídia, máquinas virtuais
29 6/10 2 Servidor correio eletrônico (Postfix). lab, Projetor multimídia, máquinas virtuais
30 8/10 2 Servidor correio eletrônico (Postfix). lab, Projetor multimídia, máquinas virtuais
31 10/10 2 Webmail (RoundCUbe). lab, Projetor multimídia, máquinas virtuais
32 13/10 2 Servidor web (Apache). lab, Projetor multimídia, máquinas virtuais
33 15/10 2 FTP. lab, Projetor multimídia, máquinas virtuais
34 17/10 2 SMB e NFS. lab, Projetor multimídia, máquinas virtuais
35 20/10 2 SMB e NFS. lab, Projetor multimídia, máquinas virtuais
36 22/10 2 DHCP. lab, Projetor multimídia, máquinas virtuais
37 24/10 2 Exercícios. Revisão antes da avaliação e esclarecimento de dúvidas. lab, Projetor multimídia, máquinas virtuais
38 27/10 2 Avaliação 3. lab, Projetor multimídia, máquinas virtuais
39 29/10 2 SSH. lab, Projetor multimídia, máquinas virtuais
40 31/10 2 Proxy/Cache (squid) lab, Projetor multimídia, máquinas virtuais
41 3/11 2 Proxy/Cache (squid) Lab, Projetor multimídia, máquinas virtuais
42 5/11 2 Firewall com iptables Lab, Projetor multimídia, máquinas virtuais
43 7/11 2 Firewall com iptables Lab, Projetor multimídia, máquinas virtuais
44 10/11 2 VPN. Lab, Projetor multimídia, máquinas virtuais
45 12/11 2 Exercícios. Revisão antes da avaliação e esclarecimento de dúvidas. Lab, Projetor multimídia, máquinas virtuais
46 14/11 2 Avaliação 4. Lab, Projetor multimídia, máquinas virtuais
47 17/11 2 Projeto Integrador
48 19/11 2 Projeto Integrador
49 21/11 2 Projeto Integrador
50 24/11 2 Projeto Integrador
51 26/11 2 Projeto Integrador
52 28/11 2 Projeto Integrador
53 1/12 2 Projeto Integrador
54 3/12 2 Projeto Integrador
55 5/12 2 Projeto Integrador
56 8/12 2 Dúvidas para recuperação
57 10/12 2 Provas de recuperação
TOTAL 118


Diário de aulas

Aula 1 - 30/7/14: Apresentação da disciplina
  1. Auto apresentação
  2. Apresentação da Wiki
  3. Divisão da turma -- A e B
  4. Apresentação do modelo de aulas a ser adotado -- laboratório
  5. Visão geral de Gerência de Redes
    1. Ementa da disciplina
    2. Ementa detalhada
    3. Explanar os três blocos da disciplina: servidor, serviços, segurança e monitoramento de redes
  6. Avaliação
    1. Teórica
    2. Prática
    3. Recuperação de conteúdo e reavaliações
  7. Relação com outras disciplinas do curso
    1. Redes de Computadores I: Modelo Cliente/Servidor. Até agora o curso foi focado no cliente, em ARC o foco muda para o lado do servidor (o lado de dentro do balcão :) )
  8. Conceituação das máquinas virtuais e seu uso
    1. Motivo de uso no laboratório
  9. Recapitulação do processo de boot
Aula 2,3,4 - 1,4,6/8/14: Revisão dos comandos básicos
Objetivo: Revisão dos comandos básicos, familiarização e fixação do conteúdo.

Material Auxiliar (Comandos básicos 01) (Comandos básicos 02 ) ( Slides Aula Introdução ao Linux Tulio.)

  1. Abra um terminal, no qual todos os passos a seguir serão executados.
  2. Execute o comando history -c.
  3. Execute o comando pwd. Escreva a saída resultante deste comando. Este será o seu diretório raiz.
  4. Crie um diretório que identifique a qual turma você pertence. Por exemplo, se você pertence a turma A, execute mkdir turmaA. Se você pertence a turma B, execute mkdir turmaB. OBS: todos os diretórios e arquivos que você for trabalhar daqui para frente, faça dentro da sua pasta TURMA.
  5. A partir do seu diretório turma, diretório do item 4, crie a seguinte árvore de diretórios, utilizando o comando mkdir e o conceito de caminho relativo.
    1. Brasil
      1. regiaoNorte
        1. amazonas
        2. acre
      2. regiaoSul
        1. parana
        2. santaCatarina
  6. Entre no diretório regiaoNorte.
  7. Liste os diretórios existentes dentro do diretório atual, e anote a saída.
  8. Copie o diretório amazonas com o nome para.
  9. Execute o comando ls, e escreva abaixo a saída resultante deste comando.
  10. Entre no diretório regiaoSul, e renomeie o diretório parana para o nome rioGrandeSul.
  11. Liste os diretórios e escreva abaixo a saída resultante deste comando.
  12. Volte para o diretório raiz. Escreva abaixo o comando que você utilizou para executar esta tarefa.
  13. Liste o conteúdo do diretório raiz e redirecione a saída para um arquivo com o nome saidaDirRaiz.arq e que este arquivo fique dentro do diretório amazonas.
  14. Liste o conteúdo do seu diretório turma, criado no item 4, e redirecione a saída para um arquivo com o nome saidaTurma.arq e que este arquivo fique dentro do diretório amazonas.
  15. Liste o conteúdo do diretório regiaoSul e redirecione sua saída para um arquivo com o nome estados.sul e que este arquivo fique dentro do diretório amazonas.
  16. Vá até o diretório amazonas, execute o comando cat /etc/services e more /etc/services (um de cada vez). Qual a diferença entre os dois comandos?
  17. Ainda com o comando cat e utilizando o conceito de *, visualize todos os arquivos terminados em .arq.
  18. Apague os arquivos terminados em .arq e .sul.
  19. Verifique qual é o diretório corrente e, caso não seja o diretório home do seu usuário, vá para o mesmo.
  20. Liste o conteúdo do diretório home do seu usuário.
  21. Crie dois diretórios com nomes aula1 e aula2 no diretório home do seu usuário.
  22. Crie três subdiretórios em cada um dos diretórios criados acima, com nomes aula11, aula12 e aula13 no diretório aula1, e aula21, aula22 e aula23 no diretório aula2.
  23. Remova os subdiretórios aula13 e aula23.
  24. Crie um arquivo vazio dentro do diretório aula12 com o nome texto1.
  25. Copie o arquivo texto1 para o diretório aula22 com o nome texto2.
  26. Altere o conteúdo do arquivo texto1, colocando agora alguma saída de algum comando como conteúdo. Dica: utilize redirecionamento.
  27. Mova o arquivo texto1 para o diretório aula11.
  28. Copie o arquivo /etc/passwd para o diretório aula2 com o nome usuarios.
  29. Copie o arquivo /etc/protocols para o diretório aula1 com o nome protocolos.
  30. Crie um link simbólico do arquivo texto1 no diretório home do seu usuário com o nome linktexto1.
  31. Verifique o conteúdo do arquivo de link linktexto1 e veja se confere com o conteúdo do arquivo texto1.
  32. Com o comando find, busque, a partir do diretório home do seu usuário, os arquivos com o nome aula.
  33. Verifique se há a ocorrência da palavra “Protocol” no arquivo protocolos.
  34. Liste as doze primeiras linhas do arquivo usuarios.
  35. Liste as quinze últimas linhas do arquivo protocolos.
  36. Mostre quantas linhas, palavras e caracteres possui o arquivo protocolos.
  37. Liste por ordem ascendente o arquivo usuarios.
  38. Liste por ordem descendente o arquivo protocolos.
  39. Liste pausadamente o arquivo protocolos.
  40. Liste o arquivo protocolos, ocultando todas as colunas do arquivo a partir do caractere #.
  41. Mostre somente os primeiros 6 caracteres de cada linha do arquivo usuarios.
  42. Verifique quais os processos que estão rodando no computador.
  43. Mostre o calendário do mês atual do seu terminal e, depois, limpe a tela do seu terminal.
  44. No diretório aula22, crie 11 arquivos com os seguintes nomes: trabalho1, trabalho2, trabalho3, teste1, teste2, exame1, exame2, texto1, texto3, notas e anotacoes, e coloque nomes de pessoas diferentes, palavras aleatórias, etc ... em cada um dos arquivos.
  45. Liste o diretório aula22 apresentando somente os arquivos que comecem com a letra t.
  46. Liste o diretório aula22 apresentando somente os arquivos cujo terceiro caractere seja a letra a.
  47. Liste o diretório aula22 apresentando somente os arquivos que termine com o caractere 2.
  48. Liste o diretório aula22 apresentando somente os arquivos que possuam a substring nota em seu nome.
  49. Liste o diretório aula22 apresentando somente os arquivos que possuam x no seu nome.
  50. Liste o conteúdo dos arquivos que comecem com tr do diretório aula22.
  51. Liste o conteúdo dos arquivos que terminem com e2 do diretório aula22.
  52. Liste o conteúdo de todos os arquivos do diretório aula22.
  53. Liste o conteúdo de todos os arquivos que possuam a substring ex no nome do arquivo do diretório aula22.
  54. Liste o diretório do seu usuário, de forma detalhada (-l) redirecionando a saída para um arquivo com o nome de ConteudoDir.
  55. Acrescente no final do arquivo (“append”) do arquivo ConteudoDir a data atual (utilizando o comando date com redireção de saída).
  56. A partir do diretório do seu usuário, aplique um comando ls ao diretório /eetc (intencionalmente errado) redirecionando a saída de erro para o arquivo Erro.
  57. Copie o conteúdo do arquivo /etc/group para o arquivo grupos dentro do diretório aula22.
  58. Utilizando pipes, mostre apenas o dia da semana, mostrado no comando date.
  59. Quantos caracteres têm as cinco primeiras linhas do arquivo /etc/passwd.
  60. Quantas palavras têm as 8 ultimas linhas do arquivo /etc/protocols.
  61. Mostre as linhas de 6 a 10 do arquivo /etc/protocols.
  62. Mostre as 50 primeiras linhas do arquivo /etc/protocols na ordem alfabética inversa.
  63. Liste os processos que estão rodando, ondenando alfabeticamente inversa.
  64. Mostre as 10 últimas linhas do arquivo /etc/passwd na ordenado alfabeticamente.
  65. Mostre na tela quantos usuários estão logados no momento.
  66. Entre os processos que estão rodando, mostre os que possuem a string “usr”.
  67. Dentre as 30 primeiras linhas do arquivo /etc/protocols, mostre as linhas que possuem a string “protocol”.
  68. Dentre as 20 ultimas linhas do arquivo /etc/protocols, mostre as linhas que possuem a string “Protocol”.
  69. Mostre apenas as 5 ultimas linhas que possuem a string “Protocol” do arquivo /etc/protocols.
  70. Liste as 40 primeiras linhas do arquivo /etc/protocols, mostrando apenas as colunas do arquivo a partir do caractere #.
  71. Mostre apenas os primeiros 8 caracteres das 8 ultimas linhas do arquivo /etc/passwd.
  72. Dentre as 20 primeiras linhas do arquivo /etc/protocols, mostre as linhas que possuem a string “protocol”, na ordem alfabética invertida.
  73. Mostre quantas palavras possui entre as linhas de número 25 e 50 do arquivo /etc/protocols.
  74. Conte quantos caracteres possui os primeiros 2 campos das ultimas 5 linhas do arquivo /etc/protocols.
  75. Conte quantas linhas possuem a palavra “root” dentre os processos que estão rodando.
  76. Liste as linhas de 18 a 30 do arquivo /etc/protocols, mostrando apenas as colunas do arquivo antes do caracter #, em ordem alfabética inversa.
  77. Liste apenas os 4 primeiros processos que estão rodando que possuem a string “usr” em ordem alfabética inversa.

Gabarito aproximado

Aula 5 - 8/8/14: Editor VI

(Material de Apoio)

Objetivo: Familiarização com o editor e ser capaz de executar comandos simples, porém úteis para manipulação de arquivos.

Este roteiro não é para entregar, mas é para fazer e guardar consigo, pois poderá servir de consulta para exercícios futuros, e as provas serão baseadas naquilo feito em sala de aula.

  1. Crie um arquivo com o editor VI com o nome de poema.txt, e que dentro dele esteja o texto abaixo:

Desejo que você Não tenha medo da vida, tenha medo de não vivê-la. Não há céu sem tempestades, nem caminhos sem acidentes. Só é digno do pódio quem usa as derrotas para alcançá-lo. Só é digno da sabedoria quem usa as lágrimas para irrigá-la. Os frágeis usam a força; os fortes, a inteligência. Seja um sonhador, mas una seus sonhos com disciplina, Pois sonhos sem disciplina produzem pessoas frustradas. Seja um debatedor de ideias. Lute pelo que você ama.</syntaxhighlight>

  1. Salve o arquivo e saia do editor.
  2. Copie o arquivo do item anterior com o nome editadoPoema.txt.
  3. Entre no arquivo editadoPoema.txt, e saia sem salvar.
  4. Entre novamente no arquivo editadoPoema.txt, e no modo insert, faça uma alteração qualquer (Ex: deixe duas linhas em branco no início do arquivo). Saia do editor sem salvar a alteração feita.
  5. Entre no arquivo editadoPoema.txt, copie todo o poema e cole logo abaixo, sem deixar espaço entre os textos, utilizando os comandos nyy e p. Salve e saia do editor.
  6. Entre no arquivo editadoPoema.txt e exclua as 2 primeiras linhas. Desfaça a alteração, salve e saia do editor.
  7. Entre no arquivo editadoPoema.txt e exclua as 9 primeiras linhas. Salve as alterações e saia do editor.
  8. Entre no arquivo poema.txt e procure pela palavra sonhos, utilizando o comando /palavra_procurada. Navegando pela pesquisa com o comando n, responda quantas ocorrências dessa palavra existem no texto?
  9. No modo last line, substitua a palavra produzem por geram do arquivo poema.txt.
  10. No arquivo poema.txt, substitua todas as ocorrências da palavra digno por DIGNO.
  11. No arquivo editatoPoema.txt, copie todo o texto e cole 3 vezes, um embaixo do outro. Salve e saia do editor.
  12. Com o comando grep, procure pela palavra sonhos no arquivo do item acima. Em quantas linhas esta palavra aparece?
  13. Utilize o comando head para visualizar o começo do texto do arquivo editadoPoema.txt.
  14. Com o comando tail visualize o final do texto do arquivo editadoPoema.txt.
  15. No arquivo editadoPoema.txt, utilizando o comando sed substitua a palavra disciplina por DISCIPLINA. Em seguida, visualize o conteúdo do arquivo e responda: as alterações feitas pelo comando foram salvas no arquivo?
  16. Com o comando sort, ordene alfabeticamente o texto do arquivo editadoPoema.txt e redirecione a saída deste comando para um novo arquivo, chamado de poemaOrdenado.txt.
  17. Quantas linhas possui o arquivo poemaOrdenado.txt?
  18. Entre no arquivo editadoPoema.txt e insira o conteúdo do arquivo poemaOrdenado.txt logo abaixo do texto que ele já contém.
  19. Entre no arquivo poema.txt e salve-o com outro nome.

Gabarito 1 vi poema.txt editar texto ESC :wq ==> salva e sai 2 cp poema.txt editadoPoema.txt 3 ESC :q 4 ESC :q! 5 ESC 20yy ==> copia 20 linhas ESC G ==> vai ao final do arquivo ESC p ==> cola o texto 6 ESC 2dd ==> apaga 2 linhas ESC u ==> desfaz (undo) o último comando ESC wq! 7 ESC 9dd ESC wq! 8 ESC /sonhos 9 ESC :s/produzem/geram 10 ESC :%s/digno/DIGNO/g 11 ESC 30yy ESC p ESC p ESC p ESC wq 12 grep sonhos editadoPoema.txt | wc -l 13 head editadoPoema.txt 14 tail editadoPoema.txt 15 sed 's/disciplina/DISCIPLINA/g' Não sed -i 's/disciplina/DISCIPLINA/g' Sim 16 sort editadoPoema.txt > poemaOrdenado.txt 17 wc -l poemaOrdenado.txt 18 vi editadoPoema.txt ESC :r poemaOrdenado.txt 19 vi poema.txt ESC w outroNome.txt </syntaxhighlight>

Aula 6 - 11/8/14: Lógica de Programação

Introdução à Lógica de Programação Introdução ao Shell (Slides Prof. Gustavo Introdução ao Shell, Slides Prof. Glauco Introdução ao Shell).

Objetivo: Criar um script Shell com comandos básicos e que seja capaz de executar tarefas simples.

Este roteiro não é para entregar, mas é para fazer e guardar consigo, pois poderá servir de consulta para exercícios futuros, e as provas serão baseadas naquilo feito em sala de aula.

ROTEIRO:

  1. Crie um arquivo com o editor VI com o nome primeiroScript.sh. Este arquivo/script deve estar dentro da sua pasta turma.
  2. Coloque na primeira linha do arquivo, criado no item anterior, #!/bin/bash para que o sistema saiba que é o SHELL que deve interpretar os comandos a seguir.
  3. Crie três variáveis e atribua valores a elas (podem ser variáveis numéricas ou strings, você escolhe!).
  4. Agora, com o comando echo imprima na tela uma frase, e que no meio da frase as variáveis do item anterior sejam chamadas (Você pode escolher qualquer frase que faça sentido junto com as variáveis escolhidas!). Ex: As variáveis são: nome=”juliana”; idade=23; disciplina=”ARC”. A frase escolhida foi: Meu nome é juliana, tenho 23 anos e frequento a disciplina de ARC.
  5. Salve o script e saia do editor.
  6. De permissão de execução primeiroScript.sh para o script com o comando chmod +x primeiroScript.sh.
  7. Execute o script, observe se a saída dele era a saída que você esperava (se caso não for, verifique qual o erro do script).
  8. Crie um outro scritp, também dentro de sua pasta turma, agora com o nome criaDiretorios.sh. Este script deve receber dois parâmetros (que serão os diretórios criados): santaCatarina e florianopolis. A partir dos parâmetros passados o seu script deve fazer:
    1. criar um diretório com o nome do primeiro parâmetro;
    2. criar um subdiretorio, dentro do primeiro criado acima, com o nome do segundo parâmetro;
    3. mover o arquivo primeiroSript.sh para dentro do subdiretório com o nome do segundo parâmetro;
    4. Imprimir na tela frases que digam o que está sendo feito no script (úteis para debugs de programas.).
  9. Com o script feito, salve, saia do editor e execute-o. (Lembre-se de dar permissão de execução).

Gabarito:

  1. !/bin/bash
echo Entre com o nome do primeiro diretorio a ser criado:
read dir1
echo Entre com o nome do segundo diretorio a ser criado:
read dir2
echo criando diretorio $dir1
mkdir $dir1
echo criando diretorio $dir2 dentro do $dir1
mkdir $dir1/$dir2
echo movendo script para o $dir2
mv primeiroSript.sh $dir1/$dir2
echo listando o conteudo do $dir1/$dir2
echo `ls $dir1/$dir2` </syntaxhighlight>
Aula 7,8,9 - 13,15,18/8/14: Shell Script

Objetivo: Ser capaz de implementar as estruturas de teste if, while e for, para a execução de tarefas simples no Linux.

ROTEIRO:

  1. Crie um script, dentro da pasta turma, com o nome de comparador.sh. Este script deve receber 2 valores (números) como parâmetro. Os números devem ser passados juntos com a chamado do script, por exemplo: comaparador.sh 4 5. O script deve compará-los e retornar na tela se:
    1. o parâmetro $1 é maior que o parâmetro $2;
    2. o parâmetro $1 é igual ao parâmetro $2;
    3. o parâmetro $1 é menor do que o parâmetro $2.
  2. Após terminar o script, lembrando de verificar se todas as hipóteses estão funcionando corretamente.
  3. Modifique o script 1 de tal modo que agora ele, depois de rodar, peça os valores das variáveis com perguntas feitas no terminal, por exemplo: entre com o valor da variável 1 .
  4. Crie um outro script, com o nome zerador.sh. Este script deve receber como parâmetro um número qualquer, e o script deve subtrair uma unidade por vez deste valor, até que chegue a zero. Faça também que os valores sejam impressos na tela a cada interação, ou seja, até chegar a zero.
  5. Crie um último scritp, também dentro de sua pasta turma, agora com o nome criaNDiretorios.sh. Este script deve criar quantos diretórios que você deseja, sem que seja executado comando por comando, ou seja, um único comando é executado, mas ele se repete quantas vezes for necessário. Os diretorios devem ser chamados: diretorio1 diretorio2 diretorio3 … e assim por diante até o número que você escolheu.

Gabarito Ex. 3:

  1. !/bin/bash

echo "Entre com o primeiro valor ==> " read val1 echo "Entre com o segundo valor ==> " read val2 if [ $val1 -gt $val2 ] then echo "Primeiro valor é MAIOR que o segundo" fi if [ $val1 -lt $val2 ] then echo "Primeiro valor é MENOR que o segundo" fi if [ $val1 -eq $val2 ] then echo "Os valores são IGUAIS"; fi </syntaxhighlight>

Gabarito Ex. 4: baseado no comando FOR


  1. !/bin/bash

a=$1 for i in `seq 0 $1` do echo $a let a=$a-1 done </syntaxhighlight>

Gabarito Ex. 4: baseado no comando WHILE

  1. !/bin/bash

a=$1 while test $a -gt 0 do echo $a let a=$a-1 done </syntaxhighlight>

Gabarito Ex. 4: Solução do Tiago Mayer

  1. !/bin/bash
  2. zerador.sh

if [ $# -lt 1 ] then echo "Insira um número e tente novamente." else

       echo "Contando até zero a partir de $1"
       echo
       echo $1
       echo
       valor=$1
       if [ $valor -gt 0 ]
       then
               while [ $valor -gt 0 ]
               do
               valor=$((valor-1))
               echo $valor
               echo
               done
       else
               while [ $valor -lt 0 ]
               do
               valor=$((valor+1))
               echo $valor
               echo
               done
       fi

fi </syntaxhighlight>

Gabarito Ex. 5:

  1. !/bin/bash

echo Entre com a quantidade de diretórios read qtde echo Entre com o nome dos diretórios read nome for i in $(seq $qtde) do echo criando o diretório $nome$i ... mkdir $nome$i done ls -l </syntaxhighlight>

Exemplo de comandos Script: Comandos.sh.zip

Aula 10 - 20/8/14: Dúvidas e preparação para avaliação
Aula 11 - 22/8/14: Dúvidas e Festival de Música
Aula 12 - 25/8/14: Usuários e grupos

Criação de contas de usuários e de grupos, e seu uso para conferir permissões de acesso a arquivos, diretórios e recursos do sistema operacional. Apostila, páginas 61 a 65.

Slides Aula Tulio: Slides Aula Usuários, Grupos e Permissões

Um usuário no Linux (e no Unix em geral) é definido pelo seguinte conjunto de informações:

  • Nome de usuário (ou login): um apelido que identifica o usuário no sistema
  • UID (User Identifier): um número único que identifica o usuário
  • GID (Group Identifier): o número do grupo primário do usuário
  • Senha (password): senha para verificação de acesso
  • Nome completo (full name): nome completo do usuário
  • Diretório inicial (homedir): o subddiretório pessoal do usuário, onde ele é colocado ao entrar no sistema
  • Shell: o programa a ser executado quando o usuário entrar no sistema

As contas de usuários, que contêm as informações acima, podem ficar armazenadas em diferentes bases de dados (chamadas de bases de dados de usuários). Dentre elas, a mais simples é composta pelo arquivo /etc/passwd:

root:x:0:0:root:/root:/bin/bash
sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false
suse-ncc:x:105:107:Novell Customer Center User:/var/lib/YaST2/suse-ncc-fakehome:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
roberto:x:1001:100:Roberto de Matos:/data1/roberto:/bin/bash

Acima um exemplo de arquivo /etc/passwd

Cada linha desse arquivo define uma conta de usuário no seguinte formato:

nome de usuário:senha:UID:GID:Nome completo:Diretório inicial:Shell

O campo senha em /etc/passwd pode assumir os valores:

  • x: significa que a senha se encontra em /etc/shadow
  • *: significa que a conta está bloqueada
  • senha encriptada: a senha de fato, porém encriptada usando algoritmo hash MD5 ou crypt. Porém usualmente a senha fica armazenada no arquivo /etc/shadow.

O arquivo /etc/shadow armazena exclusivamente as informações relativas a senha e validade da conta. Nele cada conta possui as seguintes informações:

  • Nome de usuário
  • Senha encriptada (sobrepõe a senha que porventura exista em /etc/passwd)
  • Data da última modificação da senha
  • Dias até que a senha possa ser modificada (validade mínima da senha)
  • Dias após que a senha deve ser modificada
  • Dias antes da expiração da senha em que o usuário deve ser alertado
  • Dias após a expiração da senha em que a conta é desabilitada
  • Data em que a conta foi desabilitada

Um exemplo do arquivo /etc/shadow segue abaixo:

root:$2a$05$8IZNUuFTMoA3xv5grggWa.oBUBfvrE4MfgRDTlUI1zWDXGOHi9dzG:13922::::::
suse-ncc:!:13922:0:99999:7:::
uucp:*:13922::::::
wwwrun:*:13922::::::
roberto:$1$meoaWjv3$NUhmMHVdnxjmyyRNlli5M1:14222:0:99999:7:::

Exercício: quando a senha do usuário roberto irá expirar ?

Um grupo é um conjunto de usuários definido da seguinte forma:

  • Nome de group (group name): o nome que identifica o grupo no sistema
  • GID (Group Identifier): um número único que identifica o grupo
  • Lista de usuários: um conjunto de usuários que são membros do grupo

Assim como as contas de usuários, os grupos ficam armazenados em bases de dados de usuários, sendo o arquivo /etc/group a mais simples delas:

root:x:0:
trusted:x:42:
tty:x:5:
utmp:x:22:
uucp:x:14:
video:x:33:roberto
www:x:8:roberto
users:x:100:
radiusd:!:108:
vboxusers:!:1000:

Os membros de um grupo são os usuários que o têm como grupo primário (especificado na conta do usuário em /etc/passwd), ou que aparecem listados em /etc/group.

Gerenciamento de usuários e grupos

Para gerenciar usuários e grupos podem-se editar diretamente os arquivos /etc/passwd, /etc/shadow e /etc/group, porém existem utilitários que facilitam essa tarefa:

  • useradd ou adduser: adiciona um usuário
    • Ex: useradd -m roberto : cria o usuário roberto juntamente com o diretório (-m --makedir).
    • Ex: useradd -c "Roberto de Matos" -m roberto : cria o usuário roberto com nome completo "Roberto de Matos"
    • Ex: useradd -c "Roberto de Matos" -g users -m -d /usuarios/roberto -s /bin/tcsh roberto : cria o usuário roberto com nome completo "Roberto de Matos", grupo users, diretório inicial /usuarios/roberto e shell /bin/tcsh
  • userdel: remove um usuário
    • Ex: userdel roberto : remove o usuário roberto, porém preservando seu diretório home
    • Ex: userdel -r roberto : remove o usuário roberto, incluindo seu diretório home
  • usermod: modifica as informações da conta de um usuário
    • Ex: usermod -g wheel roberto : modifica o GID do usuário roberto
    • Ex: usermod -G users,wheel roberto : modifica os grupos secundários do usuário roberto
    • Ex: usermod -d /contas/roberto roberto : modifica o diretório inicial do usuário roberto (mas não copia os arquivos ...)
    • Ex: usermod -l robertomatos roberto : modifica o login do usuário roberto
    • Ex: usermod -m ... : cria o diretório home do usuário roberto
    • Ex: usermod -c "Roberto Matos, R. dos Navegantes, 33333333" : atribui comentários ao usuário roberto
  • passwd: modifica a senha de usuário
    • Ex: passwd roberto
  • login: logo como outro usuário. Tem de estar como root
    • Ex: login roberto
  • groupadd: adiciona um grupo
    • Ex: groupadd ger: cria o grupo ger
  • groupdel: remove um grupo
    • Ex: groupdel ger: remove o grupo ger

Esses utilitários usam os arquivos /etc/login.defs e /etc/default/useradd para obter seus parâmetros padrão. O /etc/adduser.conf tem o mesmo intuito mas é seta exclusivamente os parâmetros do comando adduser. O arquivo /etc/login.defs contém uma série de diretivas e padrões que serão utilizados na criação das próximas contas de usuários. Seu principal conteúdo é:

MAIL_DIR dir # Diretório de e-mail
PASS_MAX_DAYS	99999 #Número de dias até que a senha expire
PASS_MIN_DAYS	0 #Número mínimo de dias entre duas trocas senha
PASS_MIN_LEN 5	#Número mínimo de caracteres para composição da senha
PASS_WARN_AGE 7 #Número de dias para notificação da expiração da senha
UID_MIN 500 #Número mínimo para UID
UID_MAX 60000 #Número máximo para UID
GID_MIN 500 #Número mínimo para GID
GID_MAX 60000 #Número máximo para GID
CREATE_HOME yes #Criar ou não o diretório home

Como o login.defs o arquivo /etc/default/useradd contém padrões para criação de contas. Seu principal conteúdo é:

GROUP=100 #GID primário para os usuários criados 
HOME=/home #Diretório a partir do qual serão criados os “homes”
INACTIVE=-1 #Quantos dias após a expiração da senha a conta é desativada
EXPIRE=AAAA/MM/DD #Dia da expiração da conta
SHEL=/bin/bash #Shell atribuído ao usuário.
SKEL=/etc/skel #Arquivos e diretórios padrão para os novos usuários.
GROUPS=video,dialout
CREATE_MAIL_SPOOL=no

O /etc/adduser.conf também possui uma série de padrões que funcionam especificamente para o comando adduser:

DSHELL=/bin/bash #Shell atribuído ao usuário.
DHOME=/home #Diretório a partir do qual serão criados os “homes”
SKEL=/etc/skel #Arquivos e diretórios padrão para os novos usuários.
FIRST_UID=1000 #Número mínimo para UID
LAST_UID=29999 #Número máximo para UID
FIRST_GID=1000 #Número mínimo para GID
LAST_GID=29999 #Número máximo para GID
QUOTAUSER="" #Se o sistema de cotas estiver funcional, pode atribuir quota ao usuário criado.

Atividade

Obs.: Na máquina virtual (ARC-2-servidor) é possível ter vários usuários logados simultaneamente, para isto basta logar o primeiro usuário (aluno) normalmente e, para os demais usuários, abrir novos terminais com as teclas: <Alt> + <F2>, <Alt> + <F3>, <Alt> + <F4> .... Para retornar a um dos usuários logados basta digitar o conjunto de teclas (<Alt> + <F?>) do respectivo usuário.

  1. Crie o grupo turma.
  2. Crie o diretório /home/contas.
  3. Copie dos arquivos /etc/login.defs, /etc/default/useradd e /etc/adduser.conf para o /home/aluno.
  4. Modificando os arquivos /etc/login.defs, /etc/default/useradd e/ou /etc/adduser.conf, faça com que os usuários sejam criados com o seguinte perfil, por padrão:
    1. O diretório home dos usuários seja /home/contas;
    2. Expiração de senha em 15 dias a partir da criação da conta;
    3. Usuário possa alterar senha a qualquer momento;
    4. Data do bloqueio da conta em 7 dias após a expiração da senha.
    5. Inicie os avisos de expiração da senha 4 dia antes de expirar.
    6. Iniciar a numeração de usuários (ID) a partir de 1500.
  5. Crie um usuário com o nome de manoel, pertencente ao grupo turma.
  6. Dê ao usuário manoel a senha mane123.
  7. Acrescente ao perfil do usuário seu nome completo e endereço: Manoel da Silva, R. dos Pinheiros, 2476666.
  8. Verifique o arquivo /etc/passwd.
  9. Mude, por comandos, o diretório home do manoel de /home/contas/manoel para /home/manoel.
  10. Mude o login do manoel para manoelsilva.
  11. Logue como manoelsilva.
  12. Recomponha os arquivos originais do item 3.
Aula 13 - 27/8/14: Primeira avaliação
Aula 14 - 29/8/14: Permissões

Há uma maneira de restringir o acesso aos arquivos e diretórios para que somente determinados usuários possam acessá-los. A cada arquivo e diretório é associado um conjunto de permissões. Essas permissões determinam quais usuários podem ler, e escrever (alterar) um arquivo e, no caso de ser um arquivo executável, quais usuários podem executá-lo. Se um usuário tem permissão de execução para um diretório, significa que ele pode realizar buscas dentro daquele diretório, e não executá-lo como se fosse um programa.

Quando um usuário cria um arquivo ou um diretório, o LINUX determina que ele é o proprietário (owner) daquele arquivo ou diretório. O esquema de permissões do LINUX permite que o proprietário determine quem tem acesso e em que modalidade eles poderão acessar os arquivos e diretórios que ele criou. O super-usuário (root), entretanto, tem acesso a qualquer arquivo ou diretório do sistema de arquivos.

O conjunto de permissões é dividido em três classes: proprietário, grupo e usuários. Um grupo pode conter pessoas do mesmo departamento ou quem está trabalhando junto em um projeto. Os usuários que pertencem ao mesmo grupo recebem o mesmo número do grupo (também chamado de Group Id ou GID). Este número é armazenado no arquivo /etc/passwd junto com outras informações de identificação sobre cada usuário. O arquivo /etc/group contém informações de controle sobre todos os grupos do sistema. Assim, pode -se dar permissões de acesso diferentes para cada uma destas três classes.

Quando se executa ls -l em um diretório qualquer, os arquivos são exibidos de maneira semelhante a seguinte:

> ls -l
total 403196
drwxr-xr-x 4 odilson admin 4096 Abr 2 14:48 BrOffice_2.1_Intalacao_Windows/
-rw-r--r-- 1 luizp admin 113811828 Out 31 21:28 broffice.org.2.0.4.rpm.tar.bz2
-rw-r--r-- 1 root root 117324614 Dez 27 14:47 broffice.org.2.1.0.rpm.tar.bz2
-rw-r--r-- 1 luizp admin 90390186 Out 31 22:04 BrOo_2.0.4_Win32Intel_install_pt-BR.exe
-rw-r--r-- 1 root root 91327615 Jan 5 21:27 BrOo_2.1.0_070105_Win32Intel_install_pt-BR.exe
>

As colunas que aparecem na listagem são:

  1. Esquema de permissões;
  2. Número de ligações do arquivo;
  3. Nome do usuário dono do arquivo;
  4. Nome do grupo associado ao arquivo;
  5. Tamanho do arquivo, em bytes;
  6. Mês da criação do arquivo; Dia da criação do arquivo;
  7. Hora da criação do arquivo;
  8. Nome do arquivo;

O esquema de permissões está dividido em 10 colunas, que indicam se o arquivo é um diretório ou não (coluna 1), e o modo de acesso permitido para o proprietário (colunas 2, 3 e 4), para o grupo (colunas 5, 6 e 7) e para os demais usuários (colunas 8, 9 e 10).

Existem três modos distintos de permissão de acesso: leitura (read), escrita (write) e execução (execute). A cada classe de usuários você pode atribuir um conjunto diferente de permissões de acesso. Por exemplo, atribuir permissão de acesso irrestrito (de leitura, escrita e execução) para você mesmo, apenas de leitura para seus colegas, que estão no mesmo grupo que você, e nenhum acesso aos demais usuários. A permissão de execução somente se aplica a arquivos que podem ser executados, obviamente, como programas já compilados ou script shell. Os valores válidos para cada uma das colunas são os seguintes:

  • 1 d se o arquivo for um diretório; -se for um arquivo comum;
  • 2,5,8 r se existe permissão de leitura; - caso contrário;
  • 3,6,9 w se existe permissão de alteração; - caso contrário;
  • 4,7,10 x se existe permissão de execução; - caso contrário;

A permissão de acesso a um diretório tem outras considerações. As permissões de um diretório podem afetar a disposição final das permissões de um arquivo. Por exemplo, se o diretório dá permissão de gravação a todos os usuários, os arquivos dentro do diretório podem ser removidos, mesmo que esses arquivos não tenham permissão de leitura, gravação ou execução para o usuário. Quando a permissão de execução é definida para um diretório, ela permite que se pesquise ou liste o conteúdo do diretório.

A modificação das permissões de acesso a arquivos e diretórios pode ser feita usando-se os utilitários:

  • chmod: muda as permissões de acesso (também chamado de modo de acesso). Somente pode ser executado pelo dono do arquivo ou pelo superusuário
    • Ex: chmod +x /home/usuario/programa : adiciona para todos os usuários a permissão de execução ao arquivo /home/usuario/programa
    • Ex: chmod -w /home/usuario/programa : remove para todos os usuários a permissão de escrita do arquivo /home/usuario/programa
    • Ex: chmod o-rwx /home/usuario/programa : remove todas as permissões de acesso ao arquivo /home/usuario/programa para todos os usuários que não o proprietário e membros do grupo proprietário
    • Ex: chmod 755 /home/usuario/programa : define as permissões rwxr-xr-x para o arquivo /home/usuario/programa
  • chown: muda o proprietário de um arquivo. Somente pode ser executado pelo superusuário.
    • Ex: chown roberto /home/usuario/programa: faz com que o usuário roberto seja o dono do arquivo
  • chgrp: muda o grupo dono de um arquivo. Somente pode ser executado pelo superusuário.
    • Ex: chgrp users /home/usuario/programa: faz com que o grupo users seja o grupo dono do arquivo /home/usuario/programa

Há também o utilitário umask, que define as permissões default para os novos arquivos e diretórios que um usuário criar. Esse utilitário define uma máscara (em octal) usada para indicar que permissões devem ser removidas. Exemplos:

  • umask 022: tira a permissão de escrita para group e demais usuários
  • umask 027: tira a permissão de escrita para group, e todas as permissões para demais usuários

Atividade

  1. Crie a partir do /home 3 diretórios, um com nome aln (aluno), outro prf (professor) e o último svd (servidor).
  2. Crie 3 grupos com os mesmos nomes acima.
  3. Crie 3 contas de usuários pertencentes ao grupo aln: aluno1, aluno2, aluno3. Estas contas deverão ter seus diretórios homes criados por comando dentro do diretório /home/aln/. Por exemplo para o aluno1 teremos /home/aln/aluno1.
  4. Crie 3 contas pertencentes ao grupo prf: prof1, prof2, prof3. Estas contas deverão ter seus diretórios homes criados por comando dentro do diretório /home/prf/.
  5. Crie 3 contas pertencentes ao grupo svd: serv1, serv2, serv3. Estas contas deverão ter seus diretórios homes criados por comando dentro do diretório /home/svd/.
  6. Os diretórios dos alunos, e todo o seu conteúdo, devem ser visíveis e editáveis aos membros do próprio grupo, visíveis mas não apagáveis a todos os demais usuários da rede.
  7. Já os diretórios dos professores e servidores, devem ser mutuamente visíveis, mas não apagáveis, entre os membros dos grupos professores e servidores mas não deve ser sequer visível aos membros do grupo alunos.
Aula 15 (1/09/2014): Instalação de Pacotes

Slide). Página oficial do apt-get

É necessário estar com e rede funcional ifconfig eth0 192.168.2.1X route add -net default gw 192.168.2.1 vi /etc/resolv.conf

    nameserver 200.135.37.65 </syntaxhighlight>
  1. Com o --help veja quais as opções possíveis que o apt-get fornece.
  2. Sincronize o sistema.
  3. Atualize as versões de todos os pacotes instalados no sistema.
  4. Com o apt-cache search procure por sudoku, escolha o sudoku (nenhum outro) e instale-o. Após a instalação execute o programa instalado (digite o nome do pacote instalado) e veja se foi instalado corretamente (se rodou).
  5. Remova o programa instalado no item anterior. Confira se ele realmente foi removido.
Aula 16 (3/09/2014): Sistema de arquivos

Material para consulta: Gerência de Redes páginas 51 a 57. (Slide Prof. Glauco [1])

Comandos importantes:

cfdisk: aplicativo para particionamento de discos. Ex: cfdisk /dev/sdb. Obs.: clique em Gravar ao final.

mkfs.ext4: formata uma determinada partição com o sistema de arquivos do tipo ext4. Ex: mkfs.ext4 /dev/sdb1.

mount: monta partição. Ex: mount /dev/sdb1 /dados.

umount: desmonta partição. Ex: umount /dados.

df: mostra as partições montadas e seus pontos (diretórios) de montagem. Ex: df -h

No Ubuntu o tipo de padrão de arquivos mudou de relatime (apostila) para defaults. Portanto, sempre que se ver relatime na apostila leia-se defaults.

Roteiro de atividades

  1. Após inicializar a máquina virtual crie um snapshots (ícone no canto superior direito do VirtualBox). Isto criará uma imagem da máquina virtual, caso se cometa algum erro fatal na formatação de discos.
  2. Na máquina virtual use o cfdisk para particionar o disco /dev/sdb. Crie duas partições uma com tamanho de 300 MB e outra com tamanho 500 MB.
  3. Crie dois diretórios: /dados e /teste.
  4. Em /dados crie 2 arquivos: dados1 e dados2. Em /teste crie 2 arquivos: teste1 e teste2.
  5. Siga o roteiro da apostila para execução das próximas etapas (6, 7, 10 e 12).
  6. Formate as partições criadas com o sistema de arquivos ext4.
  7. Monte estas partições em /dados e /teste.
  8. Responda:
    1. Qual o significado da letra após o sd? Ex.: sda e sdb.
    2. Qual o significado do número após o sda ou sdb? Ex.: sda5, sda6, sda7 etc.
  9. Visualize o conteúdos destes diretórios. Onde estão os arquivos dados1, dados2, teste1 e teste2?
  10. Em /dados crie 2 arquivos: dados3 e dados4. Em /teste crie 2 arquivos: teste3 e teste4.
  11. Desmonte as partições.
  12. Visualize o conteúdos destes diretórios. Onde estão os arquivos dados3, dados4, teste3 e teste4?
  13. Configure o sistema para que sempre monte estas novas partições, a cada reboot. Teste.
Aula 17 (5/9/2014): Cotas em Disco

Material para consulta: Gerência de Redes páginas 68 à 70.

  1. Crie,formate e monte uma nova partição (/dev/sdb) com tamanho de 500 MB, seguindo o roteiro apresentado em sistemas de arquivos.
  2. Nesta partição atribua cotas para usuários e grupos.
  3. Crie um grupo de nome part.
  4. Crie 3 usuários com os nomes user1, user2 e user3 pertencentes ao grupo primário part.
  5. Atribua cota de 1 MB para cada usuário e 2 MB para o grupo.
  6. Verifique se todas as cotas foram criadas adequadamente.
  7. Crie 3 pastas na nova partição criada: dirUser1, dirUser2 e dirUser3. Defina as devidas permissões, usuário e grupo associado às pastas.
  8. Logue com um dos usuários e copie todo o conteúdo do /etc para nova pasta deste usuário. Algum erro?
  9. Repita o procedimento acima para outro usuário. Algum erro?
  10. Repita o procedimento acima para o terceiro usuário. Algum erro?
Aula 18 (8/9/2014): Agendamento de Tarefas

Material para consulta: Apostila, capítulo 19.

Utilize o crontab para executar as seguintes tarefas:

  1. Executar o comando date, salvando (adicionando/anexando) o seu conteúdo em /tmp/lixo.txt, sendo que esta atividade deve ser executada a cada minuto.
  2. Verifique o log do sistema: cat /var/log/syslog.
  3. Apagar o arquivo /tmp/lixo.txt toda segunda-feira, de hora em hora aos 30 minutos, no intervalo das 4h às 10h.
  4. Contar quantos usuários há no arquivo /etc/passwd com periodicidade de 5 em 5 dias, sempre as 19h45.
  5. Pressuponha que o script /root/abacaxi.sh exista, agende o mesmo para ser executado:
    1. De dois em dois dias às 11 h e 55 min.
    2. Todo dia 5 às 3 h e 50 min.
    3. No dia 14 de cada mês entre as 8 e 18 h, de hora em hora.
    4. Verifique o log do sistema.
  6. Faça um script que faça o backup de todo o conteúdo do diretório /home, utilizando o comando tar. Agende este script para executar toda a meia noite de segunda a sexta-faira. O nome do arquivo de backup deve conter o nome do dia da semana.
  7. Confira o log do cron. Quais são os detalhes deste arquivo?
Aula 19 (10/9/2014): Políticas de Backup

Apostila, capítulo 20.

AMANDA, the Advanced Maryland Automatic Network Disk Archiver

Bacula ® - The Open Source Network Backup Solution

Aula 20 (12/9/2014): Interfaces de rede e rotas estáticas

Apostila, capítulo 22.

Interface de rede é qualquer dispositivo (físico ou lógico) capaz de transmitir e receber datagramas IP. Interfaces de rede ethernet são o exemplo mais comum, mas há também interfaces PPP (seriais), interfaces tipo túnel e interfaces loopback. De forma geral, essas interfaces podem ser configuradas com um endereço IP e uma máscara de rede, e serem ativadas ou desabilitadas. Em sistemas operacionais Unix a configuração de interfaces de rede se faz com o programa ifconfig:

Para mostrar todas as interfaces:

root@gerencia:~> ifconfig -a
dsl0      Link encap:Point-to-Point Protocol
          inet addr:189.30.70.200  P-t-P:200.138.242.254  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:34260226 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37195398 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:19484812547 (18582.1 Mb)  TX bytes:10848608575 (10346.0 Mb)

eth1      Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37283974 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42055625 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20939614658 (19969.5 Mb)  TX bytes:18284980569 (17437.9 Mb)
          Interrupt:16 Base address:0xc000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:273050 errors:0 dropped:0 overruns:0 frame:0
          TX packets:273050 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:21564572 (20.5 Mb)  TX bytes:21564572 (20.5 Mb)
root@gerencia:~>

Para configurar uma interface de rede (que fica automaticamente ativada):

root@gerencia:~> ifconfig eth1 192.168.1.100 netmask 255.255.255.0

Os scripts ifup e ifdown servem para ativar ou parar interfaces específicas, fazendo todas as operações necessárias para isto:

# Ativa a interface eth1
ifup eth1

# Desativa a interface eth0
ifdown eth0

Ao se configurar uma interface de rede, cria-se uma rota automática para a subrede diretamente acessível via aquela interface. Isto se chama roteamento mínimo.

root@gerencia:~> ifconfig eth1 192.168.10.0 netmask 255.255.0.0
root@gerencia:~> netstat -rn (ou: route -n)
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
root@gerencia:~>

Pode-se associar mais de um endereço a uma mesma interface de rede. Isto se chama IP alias:

root@gerencia:~> ifconfig eth1:0 192.168.1.110 netmask 255.255.255.0
root@gerencia:~> ifconfig eth1:1 192.168.2.100 netmask 255.255.255.0
root@gerencia:~> ifconfig -a
eth1      Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37295731 errors:0 dropped:0 overruns:0 frame:0
          TX packets:42068558 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20942258027 (19972.0 Mb)  TX bytes:18294794452 (17447.2 Mb)
          Interrupt:16 Base address:0xc000

eth1:0    Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.1.110  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 Base address:0xc000

eth1:1    Link encap:Ethernet  HWaddr 00:19:D1:7D:C9:A9
          inet addr:192.168.2.100  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 Base address:0xc000
root@gerencia:~>

Configuração no boot

Todo sistema operacional possui alguma forma de configurar suas interfaces de rede, para que sejam automaticamente ativadas no boot com seus endereços IP. Por exemplo, em sistemas Linux Ubuntu (descrito em maiores detalhes em seu manual online).

A configuração de rede se concentra no arquivo /etc/network/interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth1
iface lo inet loopback
        address 127.0.0.1
        netmask 255.0.0.0

# a interface ethernet eth1
iface eth1 inet static
	address 192.168.1.100
	netmask 255.255.255.0
	gateway 192.168.1.254
        dns-nameservers 200.135.37.65

# apelido para eth1
iface eth1:0 inet static
       address 192.168.5.100
       netmask 255.255.255.0

Para ativar, desativar ou recarregar as configurações de todas as interfaces de rede:

# desativa todas as interfaces de rede
sudo /etc/init.d/networking stop

# ativa todas as interfaces de rede
sudo /etc/init.d/networking start

# recarrega as configurações de todas as interfaces de rede
sudo /etc/init.d/networking restart

Rotas estáticas

Ver capítulo 23 da apostila.

Rotas estáticas podem ser adicionadas a uma tabela de roteamento. Nos sistemas operacionais Unix, usa-se o programa route:

# adiciona uma rota para a rede 10.0.0.0/24 via o gateway 192.168.1.254
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.254

# adiciona uma rota para a rede 172.18.0.0/16 via a interface PPP pp0
route add -net 172.18.0.0 netmask 255.255.0.0 dev ppp0

# adiciona a rota default via o gateway 192.168.1.254
route add -net default gw 192.168.1.254

# adiciona uma rota para o host 192.168.1.101 via o gateway 192.168.1.253
route add -host 192.168.1.101 gw 192.168.1.253

Para configurar a máquina para repassar pacotes entre as interfaces (rotear) deve-se setar o bit do ip_forward, com o comando:

echo 1 > /proc/sys/net/ipv4/ip_forward

A tabela de rotas pode ser consultada com o programa netstat:

root@gerencia:~> netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.0.0        192.168.1.254   255.255.255.0   U         0 0          0 eth1
192.168.1.101   192.168.1.253   255.255.255.0   UH        0 0          0 eth1
172.18.0.0      0.0.0.0         255.255.0.0     U         0 0          0 ppp0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.1.254   0.0.0.0         U         0 0          0 eth1

Rotas podem ser removidas também com route:

# remove a rota para 10.0.0.0/24
route delete -net 10.0.0.0 netmask 255.255.255.0

# remove a rota para o host 192.168.1.101
route delete -host 192.168.1.101

Coleta e análise de tráfego

Uma ferramenta básica de análise de tráfego de rede faz a coleta das PDUs por interfaces de rede, revelando as informações nelas contidas. Dois programas bastante populares para essa finalidade são:

  • tcpdump: um analisador de tráfego em modo texto
    lab01:/data/tmp # tcpdump -i dsl0 -ln tcp port 80
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on dsl0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
    22:14:37.797702 IP 74.125.47.136.80 > 201.35.226.9.21688: F 3660173220:3660173220(0) ack 4262495618 win 122 <nop,nop,timestamp 403588225 348814601>
    22:14:37.836844 IP 201.35.226.9.21688 > 74.125.47.136.80: . ack 1 win 54 <nop,nop,timestamp 348874613 403588225>
    22:14:38.410477 IP 201.35.226.9.21688 > 74.125.47.136.80: F 1:1(0) ack 1 win 54 <nop,nop,timestamp 348874756 403588225>
    22:14:38.770653 IP 74.125.47.136.80 > 201.35.226.9.21688: . ack 2 win 122 <nop,nop,timestamp 403589203 348874756>
    22:14:39.906734 IP 64.233.163.83.80 > 201.35.226.9.23018: P 534213879:534214123(244) ack 1779175654 win 133 <nop,nop,timestamp 2294865159 348870211>
    
  • wireshark: o equivalente em modo gráfico (porém com muitas outras funcionalidades)

Outros programas úteis (ou ao menos interessantes):

  • iptraf: gera estatísticas de tráfego por interfaces de rede
  • iftop: mostra os fluxos em uma interface de rede
  • nstreams: analisa a saída do tcpdump, e revela os fluxos em uma rede
  • driftnet: analisa o tráfego em uma interface, e captura imagens, videos e audio

NAT

A tradução de endereço de rede (NAT - Network Address Translation), proposta pela RFC 1631 em 1994, é uma função de rede criada para contornar o problema da escassez de endereços IP. Com a explosão no crescimento da Internet, e o mau aproveitamento dos endereços IP (agravado pelo endereçamento hierárquico), percebeu-se que o esgotamento de endereços poderia ser logo alcançado a não ser que algumas medidas fossem tomadas. Esse problema somente seria eliminado com a reformulação do protocolo IP, de forma a aumentar o espaço de endereços, que resultou na proposta do IPv6 em 1998. Porém no início dos anos 1990 a preocupação era mais imediata, e pensou-se em uma solução provisória para possibilitar a expansão da rede porém reduzindo-se a pressão por endereços IP. O NAT surgiu assim como uma técnica com intenção de ser usada temporariamente, enquanto soluções definitivas não se consolidassem. Ainda hoje NAT é usado em larga escala, e somente deve ser deixado de lado quando IPv6 for adotado mundialmente (o que deve demorar).

NAT parte de um princípio simples: endereços IP podem ser compartilhados por nodos em uma rede. Para isto, usam-se endereços IP ditos não roteáveis (também chamados de inválidos) em uma rede, sendo que um ou mais endereços IP roteáveis (válidos) são usados na interface externa roteador que a liga a Internet. Endereços não roteáveis pertencem às subredes 10.0.0.0/8, 192.168.0.0/16 e 172.16.0.0/12, e correspondem a faixas de endereços que não foram alocados a nenhuma organização e, portanto, não constam das tabelas de roteamento dos roteadores na Internet. A figura abaixo mostra uma visão geral de uma rede em que usa NAT:

Nat-exemplo.png

Para ser possível compartilhar um endereço IP, NAT faz mapeamentos (IP origem, port origem, protocolo transporte) -> (IP do NAT, port do NAT, , protocolo transporte), sendo protocolo de transporte TCP ou UDP. Assim, para cada par (IP origem, port origem TCP ou UDP) o NAT deve associar um par (IP do NAT, port do NAT TCP ou UDP) (que evidentemente deve ser único). Assim, por exemplo, se o roteador ou firewall onde ocorre o NAT possui apenas um endeerço IP roteável, ele é capaz em tese de fazer até 65535 mapeamentos para o TCP (essa é a quantidade de ports que ele pode possui), e o mesmo para o UDP. Na prática é um pouco menos, pois se limitam os ports que podem ser usados para o NAT. Note que o NAT definido dessa forma viola a independência entre camadas, uma vez que o roteamento passa a depender de informação da camada de transporte.

NAT no Linux

Ver capítulo 35, seção 4, da apostila.

O NAT no Linux se configura com iptables. As regras devem ser postas na tabela nat, e aplicadas a chain POSTROUTING, como no seguinte exemplo:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE ;Habilita o NAT
iptables -t nat -L ;Lista as atuais regras da tabela NAT

A regra acima faz com que todo o tráfego originado em 192.168.1.0/24, e que sai pela interface eth0 deve ser mascarado com o endereço IP dessa interface. Esta regra diz o seguinte: todos os pacotes que passarem (POSTROUTING) por esta máquina com origem de 192.168.1.0/24 e sairem pela interface eth0 serão mascarados, ou seja sairão desta máquina com o endereço de origem como sendo da eth0. O alvo MASQUERADE foi criado para ser usado com links dinâmicos (tipicamente discados ou ADSL), pois os mapeamentos se perdem se o link sair do ar.

Atividade

A) Configurar interface de rede

  1. Verifique a configuração de sua interface de rede eth0, na sua máquina virtual. Se necessário corrija-a assim: ip 192.168.2.X, sendo X o número do computador + 100 (exemplo: para o micro 2 (M2) X=102), roteador default = 192.168.2.1. Nameserver 200.135.37.65.
    1. Teste a comunicação do seu computador, fazendo ping 192.168.2.1. Tente pingar outras máquinas da rede.
    2. Tente também pingar o IP 200.135.37.65.
    3. Veja a tabela de rotas, usando netstat -rn ou route -n.
    4. Verifique a rota seguida pelos datagramas enviados, usando traceroute -n 200.135.37.65. Se o traceroute não estiver instalado insta-le-o (apt-get install traceroute).
  2. Configure sua máquina virtual servidora para que a informação de rede, configurada manualmente acima, fique permanente. Quer dizer, no próximo boot essa configuração deve ser ativada automaticamente.
  3. Adicione um IP alias a sua interface eth0. Esse novo IP deve ser configurado para 10.0.0.X/24 (X = item 1).
    1. Tente pingar os computadores de seus colegas, usando ambos endereços: da rede 192.168.2.0/24 e da rede 10.0.0/24.
    2. Enquanto acontecem os pings, visualize o tráfego pela interface eth0, usando o programa tcpdump:
      # Mostra o tráfego ICMP que passa pela interface eth1
      tcpdump -i eth1 -ln icmp
      
    3. Pense em uma utilidade para IP alias ...

B) Coleta de tráfego

  1. Faça um ou mais pings para algum(ns) sítios e, com o uso de parâmetros apropriados, faça com que o tcpdump:
    1. Capture todos os pacotes da rede.
    2. Capture somente os pacotes gerados por sua máquina.
    3. Capture somente pacotes destinados à sua máquina.
    4. Capture pacotes destinados ou originados da máquina 200.135.37.65.
    5. Faça com que os pacotes capturados anteriormente sejam salvos num arquivo, chamado “pacotes_capturados“.

C) Tabelas estáticas de roteamento

Diagrama para construir tabelas de roteamento com maquinas virtuais-rede-2.jpg

  1. Configure as interfaces de rede (uma interface virtual – ip alias) de sua máquina servidora, conforme números de IPs sugeridos na Figura. Todas as máscaras de rede devem ser 255.255.255.0 ou /24. Não configure gateway.
  2. Configure sua máquina virtual servidora para rotear pacotes.
  3. Configure sua máquina virtual cliente para ser seu cliente de rede, conforme Figura.
  4. Montar as tabelas estáticas de roteamento para todas as redes de todos os seus colegas, de modo que todas as máquinas cliente tenham acesso entre si (“pingando” ente elas).
  5. Faça testes. Se houver problemas usar tcpdump para monitorar individualmente as interfaces e verificar onde está o problema. Lembre-se que os pacotes devem ter rota de ida e volta, portanto o problema pode ser no seu roteador ou de seu vizinho. Uma boa sequência de testes é:
    1. Pingar entre cliente e roteador (servidor).
    2. Do cliente pingar a interface externa do roteador.
    3. Do cliente pingar a máquina do professor. Se funcionar até aqui seu roteador estará corretamente configurado.
    4. Do roteador pingar a interface externa de outro roteador.
    5. Do roteador pingar outro cliente.
    6. Do seu cliente pingar outro cliente.

D) NAT

  1. Desfaça as tabelas de roteamento e configure a máquina servidora para fazer NAT, nos mesmos moldes do item C).
  2. A partir do cliente faça testes “pingando” para redes externas e para as redes dos colegas.
  3. Qual é a diferença de “comportamento” quando comparado ao cenário das tabelas estáticas de roteamento?
Aula 21 - 15/9/14: Aula supensa: reformulação do técnico
Aula 22 - 17/9/14: Configuração interface de rede
Aula 23 - 19/9/14: Configuração interface de rede
Aula 24 - 22/9/14: Tabelas estáticas de roteamento
Aula 25 - 24/9/14: NAT e Dúvidas para avaliação 2
Aula 26 - 26/9/14: Dúvidas para avaliação 2
Aula 27 - 29/9/14: Avaliação 2
Aula 28 - 1/10/14: DNS

Ver capítulo 25 da apostila.

DNS (Domain Name System) é uma base de dados distribuída e hierárquica. Nela se armazenam informações para mapear nomes de máquinas da Internet para endereços IP e vice-versa, informação para roteamento de email, e outros dados utilizados por aplicações da Internet.

A informação armazenada no DNS é identificada por nomes de domínio que são organizados em uma árvore, de acordo com as divisões administrativas ou organizacionais. Cada nodo dessa árvore, chamado de domínio, possui um rótulo. O nome de domínio de um nodo é a concatenação de todos os rótulos no caminho do nodo até a raiz. Isto é representado como uma string de rótulos listados da direita pra esquerda e separados por pontos (ex: ifsc.edu.br, sj.ifsc.edu.br). Um rótulo precisa ser único somente dentro do domínio pai a que pertence.

Por exemplo, um nome de domínio de uma máquina no IFSC pode ser mail.ifsc.edu.br., em que o "." (último) significa o root level domain .br é o domínio do topo da hierarquia (no Brasil feito em [2])ao qual mail.sj.ifsc.edu.br pertence. .ifsc.edu é um subdomínio de .br., e mail o nome da máquina em questão.

Por razões administrativas, o espaço de nomes é dividido em áreas chamadas de zonas, cada uma iniciando em um nodo e se estendendo para baixo para os nodos folhas ou nodos onde outras zonas iniciam. Os dados de cada zona são guardados em um servidor de nomes, que responde a consultas sobre uma zona usando o protocolo DNS.

Clientes buscam informação no DNS usando uma biblioteca de resolução (resolver library), que envia as consultas para um ou mais servidores de nomes e interpreta as respostas.

Hierarquia-DNS.gif

(tirado do manual do BIND9)

Ver também o livro sobre DNS e BIND da O'Reilly.

Registros DNS

Cada rótulo na hierarquia DNS possui um conjunto de informações associadas a si. Essas informações são guardas em registros de diferentes tipos, dependendo de seu significado e propósito. Cada consulta ao DNS retorna assim as informações do registro pedido associado ao rótulo. Por exemplo, para ver o registro de endereço IP associado a www.ifsc.edu.br pode-se executar esse comando (o resultado teve alguns comentários removidos):

root@freeman:~$ dig sj.ifsc.edu.br mx

;; QUESTION SECTION:
;sj.ifsc.edu.br.			IN	MX

;; ANSWER SECTION:
sj.ifsc.edu.br.		3600	IN	MX	10 hendrix.sj.ifsc.edu.br.

;; AUTHORITY SECTION:
sj.ifsc.edu.br.		3600	IN	NS	ns.pop-udesc.rct-sc.br.
sj.ifsc.edu.br.		3600	IN	NS	ns.pop-ufsc.rct-sc.br.
sj.ifsc.edu.br.		3600	IN	NS	hendrix.sj.ifsc.edu.br.

;; ADDITIONAL SECTION:
hendrix.sj.ifsc.edu.br.	3600	IN	A	200.135.37.65
ns.pop-ufsc.rct-sc.br.	11513	IN	A	200.135.15.3
ns.pop-udesc.rct-sc.br.	37206	IN	A	200.135.14.1

Cada uma das informações acima mostra um determinado registro e seu conteúdo, como descrito na tabela abaixo:

Nome TTL Classe Registro Conteúdo do registro
hendrix.sj.ifsc.edu.br. 3600 IN A 200.135.37.65
sj.ifsc.edu.br. 3600 IN NS hendrix.sj.ifsc.edu.br.
sj.ifsc.edu.br. 3600 IN MX 10 hendrix.sj.ifsc.edu.br.

Obs: TTL (Time To Live) é o tempo de validade (em segundos) da informação retornada do servidor de nomes, e classe é o tipo de endereço (no caso IN equivale a endereços Internet).

Os tipos de registros mais comuns são:

Registro Descrição Exemplo
A Endereço (Address) www.sj.ifsc.edu.br IN A 200.135.37.66
NS Servidor de nomes (Name Server) sj.ifsc.edu.br IN NS hendrix.sj.ifsc.edu.br.
CNAME Apelido (Canonical Name) mail.sj.ifsc.edu.br IN CNAME hendrix.sj.ifsc.edu.br.
MX Roteador de email (Mail Exchanger) sj.ifsc.edu.br IN MX mail.sj.ifsc.edu.br.
SOA dados sobre o domínio (Start of Authority) sj.ifsc.edu.br IN SOA hendrix.sj.ifsc.edu.br. root.sj.ifsc.edu.br. 2009120102 1200 120 604800 3600
PTR Ponteiro para nome (Pointer) 65.37.135.200.in-addr.arpa IN PTR hendrix.sj.ifsc.edu.br.
TXT Texto genérico (Text) sj.ifsc.edu.br IN TXT "v=spf1 a mx ~all"

Uma zona assim é composta de um conjunto de registros com todas as informações dos domínios nela contidos. O conteúdo de uma zona, contendo o domínio example.com, pode ser visualizado abaixo:

example.com  86400  IN	 SOA ns1.example.com.	hostmaster.example.com. (
			      2002022401 ; serial
			      10800 ; refresh
			      15 ; retry
			      604800 ; expire
			      10800 ; minimum
			     )
       IN  NS     ns1.example.com.
       IN  NS     ns2.smokeyjoe.com.
       IN  MX  10 mail.another.com.
       IN  TXT   "v=spf1 mx -all"

ns1    IN  A      192.168.0.1
www    IN  A      192.168.0.2
ftp    IN  CNAME  www.example.com.

bill   IN  A      192.168.0.3
fred   IN  A      192.168.0.4

Atividade

O objetivo é montar a seguinte estrutura:

Diagrama DNS redesII.png

Vamos configurar e testar um servidor DNS. Para tanto montaremos a estrutura indicada no diagrama, onde cada máquina será um servidor DNS, com um domínio próprio e, ao mesmo tempo, será cliente do servidor DNS da máquina 192.168.2.101. Esta, por sua vez, será servidor: um servidor master do domínio redes.edu.br e servidor escravo, recebendo automaticamente uma cópia das zonas dos servidores masters, de todos os demais domínios criados. Esta, será também a única máquina com servidor DNS com zona reversa. Sendo assim todos os domínios, diretos e reversos, serão visíveis por meio deste servidor.

  1. Entendendo o serviço DNS. Antes de qualquer reconfiguração faça testes usando a ferramenta “dig”:
    dig -x 150.162.12.25             ; consulta ao DNS reverso
    dig www.das.ufsc.br              ; consulta ao DNS direto
    dig +trace www.polito.it         ; consulta ao DNS direto mostrando toda a árvore de DNS consultados
    dig @200.135.37.65 www.polito.it ; consulta ao servidor DNS 200.135.37.65
    dig ufsc.br ANY                  ; consulta "total" ao domínio
    
  2. Inicialize o servidor DNS, criando o domínio redesX.edu.br (onde X é o último dígito do ip de sua máquina). Por questões práticas, acima mencionadas, não crie zona reversa. Adaptações para a nova versão do Bind juntamente com Ubuntu:apt-get install bind9. Instalando o Bind.</syntaxhighlight>
  3. O servidor DNS deverá responder pelos nomes: da própria máquina: m2 à m15, www, ftp, ns e mail, todos apontando para o mesmo IP e para a máquina virtual apontando para um apelido de ip (ip alias). A solução abaixo é relativa a máquina fictícia M18 com interface de rede eth6, faça as adaptações necessárias para o seu caso, por exemplo M5 e eth0. Primeiramente vamos criar o apelido ip:

ifconfig eth6:0 192.168.2.180 </syntaxhighlight>

  1. Esta máquina ficaria com os IPs 192.168.2.118 e 192.168.2.180
  2. vi /etc/bind/named.conf.local

zone "redes18.edu.br" {

 type master;
 file "/etc/bind/db.redes18";
 allow-transfer {
   192.168.2.101;
 };

};</syntaxhighlight>

  1. vi /etc/bind/db.redes18

$TTL 86400 @ IN SOA ns.redes18.edu.br. admin.redes18.edu.br. (

                             2014040902; serial
                             3H ; refresh
                             60 ; retry
                             1W ; expire
                             3W ; minimum
                            )

@ IN NS ns.redes18.edu.br. ; este é o servidor master deste domínio @ IN MX 10 mail.redes18.edu.br. $ORIGIN redes18.edu.br. m80 A 192.168.2.118 mail A 192.168.2.118 www A 192.168.2.118 ftp A 192.168.2.118 ns A 192.168.2.118 virtual A 192.168.2.180 </syntaxhighlight>

  1. vi /etc/resolv.conf

nameserver 192.168.2.101 </syntaxhighlight>

  1. Utilitário para testar o arquivo que contém o conteúdo de uma zona: named-checkzone nome_do_dominio arquivo_da_zona ==> Aponta possíveis erros no arquivo de configuração. named-checkzone redes18.edu.br /etc/bind/db.redes18</syntaxhighlight>
  2. Utilitário para testar a configuração do BIND: named-checkconf -z </syntaxhighlight>
  3. Restart do serviço: service bind9 restart </syntaxhighlight>
  4. Verificando se está tudo certo: tail -n 200 /var/log/syslog. Se necessário filtre por named. </syntaxhighlight>
  • Seqüênica de Testes:
ping www.redes18.edu.br
ping m80.redes18.edu.br
ping virtual.redes18.edu.br
ping www.redesXX.edu.br ; dos seus colegas
dig @localhost m18.redes18.edu.br
dig @192.168.2.101 m7.redes7.edu.br
dig redesX.edu.br ANY
  • Teste o DNS reverso. Faça testes usando a ferramenta “dig”:
    dig -x 192.168.2.1X
    

Arquivos na máquina Professor, somente para exemplificar

mkdir /var/cache/bind/slaves
chown bind:bind /var/cache/bind/slaves

/etc/bind/named.conf.local // // Do any local configuration here //

// Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918";

zone "redes1.edu.br" {

       type master;
       file "/etc/bind/db.redes1";

}; zone "2.168.192.in-addr.arpa" IN {

       type master;
       file "/etc/bind/db.2.168.192";

};

zone "redes2.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes2";
       masters { 192.168.2.102; };

};

zone "redes3.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes3";
       masters { 192.168.2.103; };

};

zone "redes4.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes4";
       masters { 192.168.2.104; };

};

zone "redes5.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes5";
       masters { 192.168.2.105; };

};

zone "redes6.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes6";
       masters { 192.168.2.106; };

};

zone "redes7.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes7";
       masters { 192.168.2.107; };

};

zone "redes8.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes8";
       masters { 192.168.2.108; };

};

zone "redes9.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes9";
       masters { 192.168.2.109; };

};

zone "redes10.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes10";
       masters { 192.168.2.110; };

};

zone "redes11.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes11";
       masters { 192.168.2.111; };

}; zone "redes12.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes12";
       masters { 192.168.2.112; };

};

zone "redes13.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes13";
       masters { 192.168.2.113; };

};

zone "redes14.edu.br" IN {

       type slave;
       file "/var/cache/bind/slaves/db.redes14";
       masters { 192.168.2.114; };

}; </syntaxhighlight> /etc/bind/db.redes1

BIND reverse data file for empty rfc1918 zone
DO NOT EDIT THIS FILE - it is used for multiple zones.
Instead, copy it, edit named.conf, and use that copy.

$TTL 86400 @ IN SOA m1.redes1.edu.br. root ( 2014040900 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL

@ IN NS m1.redes1.edu.br. @ IN MX 10 mail.redes1.edu.br. $ORIGIN redes1.edu.br. m1 A 192.168.2.101 www A 192.168.2.101 ftp A 192.168.2.101 mail A 192.168.2.101 </syntaxhighlight>

/etc/bind/db.2.168.192 (Zona reversa) $TTL 86400 @ IN SOA m1.redes1.edu.br. root ( 2014040900 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL

IN NS m1.redes1.edu.br. 101 IN PTR m1.redes1.edu.br. 102 IN PTR m2.redes2.edu.br. 103 IN PTR m3.redes3.edu.br. 104 IN PTR m4.redes4.edu.br. 105 IN PTR m5.redes5.edu.br. 106 IN PTR m6.redes6.edu.br. 107 IN PTR m7.redes7.edu.br. 108 IN PTR m8.redes8.edu.br. 109 IN PTR m9.redes9.edu.br. 110 IN PTR m10.redes10.edu.br. 111 IN PTR m11.redes11.edu.br. 112 IN PTR m12.redes12.edu.br. 113 IN PTR m13.redes13.edu.br. 114 IN PTR m14.redes14.edu.br. </syntaxhighlight>

Aula 29 - 3/10/14: DNS
Aula 30 - 6/10/14: Email

Ver capítulo 27 da apostila.

O correio eletrônico (email) é um dos principais serviços na Internet. De fato foi o primeiro serviço a ser usado em larga escala. Trata-se de um método para intercâmbio de mensagens digitais. Os sistemas de correio eletrônico se baseiam em um modelo armazena-e-encaminha (store-and-forward) em que os servidores de email aceitam, encaminham, entregam e armazenam mensagens de usuários.

Uma mensagem de correio eletrônico se divide em duas partes:

  • Cabeçalhos: contém informações de controle e atributos da mensagem
  • Corpo: o conteúdo da mensagem
From: Roberto de Matos <roberto@eel.ufsc.br>
Content-Type: text/plain;
	charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
X-Smtp-Server: smtp.ufsc.br:roberto.matos@posgrad.ufsc.br
Subject: =?iso-8859-1?Q?Teste_Ger=EAncia?=
Message-Id: <0595A764-EEAE-41E7-99F0-80DC11FB5327@eel.ufsc.br>
X-Universally-Unique-Identifier: 684c3833-bbbe-420b-8b66-d92d9a419bc0
Date: Wed, 20 Nov 2013 11:36:35 -0200
To: Roberto de Matos <roberto.matos@ifsc.edu.br>
Mime-Version: 1.0 (Mac OS X Mail 6.6 \(1510\))

Ol=E1 Pessoal,

Hoje vamos aprender o funcionamento do Email!!

Abra=E7o,

Roberto=

Na mensagem acima, os cabeçalhos são as linhas iniciais. Os cabeçalhos terminam quando aparece uma linha em branco, a partir de que começa o corpo da mensagem.

Funcionamento do email

Os componentes da infraestrutura de email são:

  • MUA (Mail User Agent): o aplicativo que o usuário usa para envio e acesso a mensagens. Atualmente é bastante comum MUA do tipo webmail, mas existem outros como Mozilla Thunderbird, KMail e Microsoft Outlook.
  • MDA (Mail Delivery Agent): o servidor responsável por receber dos usuários mensagens a serem enviadas. Assim, quando um usuário quer enviar uma mensagem, usa um MUA que contata o MDA para fazer o envio. Exemplos de software são Postfix, Sendmail, Qmail e Microsoft Exchange.
  • MTA (Mail Transport Agent): o servidor responsável por transmitir mensagens até seu destino, e receber mensagens da rede para seus usuários. Comumente faz também o papel de MDA. Exemplos de softwares são Postfix, Sendmail, Qmail e Microsoft Exchange.

A figura abaixo ilustra uma infraestrutura de email típica.

Email-intro.png

Os protocolos envolvidos são:

  • SMTP (Simple Mail Transfer Protocol): usado para envios de mensagens entre MTAs, e entre MUA e MDA/MTA.
  • IMAP (Internet Mail Access Protocol): usado por MUAs para acesso a mensagens armazenadas em caixas de email em servidores.
  • POP (Post Office Protocol): mesma finalidade que IMAP, porém com funcionalidade mais limitada. Se destina a situações em que o normal é copiar as mensagens parao computador do usuário, e então removê-las do servidor.
  • LMTP (Local Mail Transfer Protocol): usado para entrega de mensagens entre MTA e MDA/MTA, sendo que o servidor de destino não mantém uma fila de mensagens (quer dizer, ele entrega diretamente na caixa de entrada de um usuário ou a encaminha imediatamente).

Endereçamento

Endereços de email estão intimamente ligados ao DNS. Cada usuário de email possui um endereço único mundial, definido por um identificador de usuário e um domínio de email, escritos usando-se o símbolo especial @ (lê-se at, do original em inglês) para conectá-los:

tele@ifsc.edu.br

Nesse exemplo, o identificador de usuário é tele, e o domínio é ifsc.edu.br.

Os domínios de email tem correspondência direta com domínios DNS. De fato, para criar um domínio de email deve-se primeiro criá-lo no DNS. Além disto, o domínio DNS deve ter associado a si um ou mais registros MX (Mail exchanger) para apontar os MTAs responsáveis por receber emails para o domínio. Por exemplo, o domínio DNS ifsc.edu.br possui esse registro MX:

> dig ifsc.edu.br mx

;; QUESTION SECTION:
;ifsc.edu.br.                   IN      MX

;; ANSWER SECTION:
ifsc.edu.br.            3581    IN      MX      5 hermes.ifsc.edu.br.

... e o domínio gmail.com:

> dig gmail.com mx

;; QUESTION SECTION:
;gmail.com.                     IN      MX

;; ANSWER SECTION:
gmail.com.              3600    IN      MX      20 alt2.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      30 alt3.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      40 alt4.gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              3600    IN      MX      10 alt1.gmail-smtp-in.l.google.com.

MTA Postfix

O primeiro software MTA usado em larga escala na Internet foi o sendmail. Esse MTA possui muitas funcionalidades, e enfatiza a flexibilidade em sua configuração. No entanto, configurá-lo e ajustá-lo não é tarefa fácil. Além disto, houve vários problemas de segurança no passado envolvendo esse software. Assim outras propostas surgiram, como qmail e postfix. Tanto qmail quanto postfix nasceram como projetos preocupados com a segurança nas operações de um MTA, e também se apresentaram como MTAs mais simples de configurar e operar. Em nossas aulas será usado o postfix, mas recomenda-se experimentar usar as outras duas opcões citadas.

O postfix é um MTA modularizado, que divide as tarefas de processamento das mensagens em diversos componentes que rodam como processos separados. Isto difere bastante do sendmail, que se apresenta como um software monolítico. No postfix, um conjunto de subsistemas cuida de processar cada etapa da recepção ou envio de uma mensagem, como mostrado na figura abaixo:

Postfix architecture.gif

Configuração

A configuração do postfix é armazenada em arquivos, que normalmente residem no diretório /etc/postfix. Os dois principais são:

  • master.cf: configurações para execução dos subsistemas do Postfix (define que subsistemas estão ativados, quantas instâncias rodar de cada um, e seus argumentos de execução)
  • main.cf: configurações usadas pelos subsistemas

No Ubuntu deve-se iniciar o uso do Postfix com esses comandos:

sudo apt-get install -y postfix

# O comando abaixo deve ser usado se o postfix já foi instalado, mas deseja-se recriar sua configuração
sudo dpkg-reconfigure postfix

As configurações iniciais informadas na instalação são suficientes para que o postfix possa ser iniciado. No entanto muitos detalhes provavelmente precisarão ser ajustados para que ele opere como desejado.

Para um rápido teste do postfix pode-se fazer a sequência abaixo:

> sudo service postfix restart
> telnet localhost 25
220 ger ESMTP postfix (Ubuntu)
helo mail
250 ger
mail from: aluno@ifsc.edu.br
250 2.1.0 OK
rcpt to: postmaster@ger.edu.br
250 2.1.5 OK
data
354 End data with <CR><LF>.<CR><LF>
subject: Teste

blabla
.
250 2.0.0 OK: queued as 71259CCA3
quit
221 2.0.0 Bye
Connection closed by foreign host
>

O resultado do teste (a mensagem entreguepara o usuário postmaster) pode ser visto no arquivo de log do postfix. No Ubuntu esse arquivo é /var/log/mail.log :

> tail /var/log/mail.log
May  2 17:29:42 ger postfix/smtpd[1965]: 71259CCA3: client=localhost[127.0.0.1]
May  2 17:30:48 ger postfix/cleanup[1970]: 71259CCA3: message-id=<20100502202942.71259CCA3@ger>
May  2 17:30:48 ger postfix/qmgr[1894]: 71259CCA3: from=<aluno@ifsc.edu.br>, size=323, nrcpt=1 (queue active)
May  2 17:30:48 ger postfix/local[1972]: 71259CCA3: to=<root@ger.edu.br>, orig_to=<postmaster@ger.edu.br>, relay=local, delay=102, delays=102/0.05/0/0.03, dsn=2.0.0, status=sent (delivered to mailbox)
May  2 17:30:48 ger postfix/qmgr[1894]: 71259CCA3: removed
May  2 17:31:25 ger postfix/smtpd[1965]: disconnect from localhost[127.0.0.1]
>

A mensagem de teste foi entregue em /var/mail/root:

> sudo cat /var/mail/root
From aluno@ifsc.edu.br  Sun May  2 17:30:48 2010
Return-Path: <aluno@ifsc.edu.br>
X-Original-To: postmaster@ger.edu.br
Delivered-To: postmaster@ger.edu.br
Received: from mail (localhost [127.0.0.1])
        by ger (Postfix) with SMTP id 71259CCA3
        for <postmaster@ger.edu.br>; Sun,  2 May 2010 17:29:06 -0300 (BRT)
Subject: teste
Message-Id: <20100502202942.71259CCA3@ger>
Date: Sun,  2 May 2010 17:29:06 -0300 (BRT)
From: aluno@ifsc.edu.br
To: undisclosed-recipients:;

blabla

Outra maneira para testar e um pouco mais amigável é utilizar a ferramenta mail. Instale o pacote:

apt-get install mailutils

Para enviar uma mensagem proceda do seguinte modo: mail usuario@redesX.edu.br <Enter>, inserir o subjet <Enter>, inserir a mensagem, <Enter> <Ctrl>+<d>. //Finaliza e encaminha o Email </syntaxhighlight> Verifique o encaminhamento ou não em:

tail -f /var/log/mail.log

Atividades

  1. Tenha certeza que seu serviço DNS esteja funcionando corretamente.
  2. Instale o postfix em sua máquina virtual: apt-get install postfix. Escolha Site Internet e nome como mail.redesx.edu.br.
  3. Configure-o para que se comunicar na Internet, criando o domínio de email redeX.edu.br. Edite o arquivo /etc/postfix/main.cf e crie ou edite os seguintes parâmetros, deixando-os da seguinte forma:
    myhostname = mail.redesX.edu.br
    mydomain = redesX.edu.br
    myorigin = $mydomain
    inet_interfaces = all
    mynetworks = 192.168.2.0/24, 127.0.0.0/8
    mynetworks_style = subnet
    mydestination = $myhostname, $mydomain
    
  4. Reinicie o serviço: service postfix restart
  5. Verifique se o servidor "subiu" corretamente: tail /var/log/syslog
  6. Verifique se não houve erros de configuração: tail -n 30 /var/log/mail.log
  7. Instale um cliente de Email: apt-get install mailutils
  8. Envie um email:
    mail aluno@redesX.edu.br
    Cc: 
    Subject: Teste de email
    Isto é somente um teste...
    ... para sair, em uma linha em branco digite: CTRL d
    
  9. Verifique se o email foi perfeitamente encaminhado procurando pela string sent no /var/log/mail.log
  10. Para ler email, logado com o usuário desejado, execute o comando mail e digite o número da mensagem desejada.
  11. Teste o envio de mensagens para usuários dos domínios de seus colegas. Acompanhe o processamento das mensagens olhando o log.

Dicas

Atenção para vários problemas comuns na implantação do correio eletrônico:

  • Domínio DNS sem registro MX: sem isso os MTAs não sabem como enviar mensagens para esse domínio
  • Registro MX aponta um nome de host desconhecido: causa o mesmo problema acima
  • Nome de host configurado como localhost no Postfix: o nome de host (parâmetro myhostname em /etc/postfix/main.cf) deve ser o nome DNS do servidor onde roda o Postfix.
  • Erros de configuração (sintaxe) em /etc/postfix/main.cf: tais erros podem fazer com que um dos subsistemas do Postfix aborte sua execução, impedindo que se processe uma mensagem. Por exemplo, se um parâmetro usado pelo subsistema smtpd (que recebe mensagens com protocolo SMTP) estiver errado, o smtpd não iniciam, ou termina abruptamente, abortando a recepção de mensagens.

Passo a passo para criar uma aliases (apelidos/grupos): vi /etc/postfix/main.cf

    alias_maps = hash:/etc/postfix/aliases
    alias_database = hash:/etc/postfix/aliases

vi /etc/postfix/aliases

    todos: root, aluno
    batman: aluno

postalias /etc/postfix/aliases service postfix reload </syntaxhighlight>

  1. Teste os apelidos enviando email para todos e batman e verifique quais usuários receberam as respectivas mensagens.
Aula 31 8/10/14: Postfix
Aula 32 10/10/14: Webmail

O objetivo é instalar o Webmail RoundCube. Pré-requisitos: DNS e Postfix rodando.

Pré-configuração:

  1. Atualize a base apt: apt-get update
  2. Instale o Apache:
     apt-get install apache2
    
  3. Para facilitar a configuração instale o servidor ssh em sua máquina:
    apt-get install ssh
    
  4. Na máquina real abra um terminal e faça uma conexão ssh com sua máquina virtual:
    ssh aluno@192.168.2.X
    

Assim pode-se usar este terminal para configurar seu servidor. Neste terminal é possível usar os comando copy (CTRL + SHIFT + C) e paste (CTRL + SHIFT + V).


Instalando o RoundCube

  1. Vá para o diretório html: cd /var/www/html
  2. Baixar o pacote do RoundCube: wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.0.3/roundcubemail-1.0.3.tar.gz
  3. Desempacote: tar -zxvf roundcubemail-1.0.3.tar.gz
  4. Renomeie para webmail: mv roundcubemail-1.0.3 webmail
  5. Instalar o Dovecot. Dovecot é um MDA de fácil instalação que suporta acessos com IMAP e POP3. As caixas de entrada podem ser armazenadas nos formatos mailbox ou Maildir.: apt-get install -y dovecot-imapd dovecot-pop3d. Nas janelas: OK, SIM, OK, nome da máquina: mail.redesX.edu.br.
  6. Configurar o Dovecot: vi /etc/dovecot/dovecot.conf e ajustar/criar os seguintes parâmetros:
    protocols = pop3 pop3s imap imaps
    pop3_uidl_format = %08Xu%08Xv
    mail_location = maildir:~/Maildir
    
  7. Force a releitura do arquivo de configuração: dovecot reload
  8. Reconfigurar a conta do aluno com os comandos (isto deve ser feito a todos os usuários do sistema aos quais deseja-se usar o webmail, evidentemente trocando aluno pelo nome equivalente):
    maildirmake.dovecot /home/aluno/Maildir
    maildirmake.dovecot /home/aluno/Maildir/.Drafts
    maildirmake.dovecot /home/aluno/Maildir/.Sent
    maildirmake.dovecot /home/aluno/Maildir/.Trash
    maildirmake.dovecot /home/aluno/Maildir/.Templates
    chown -R aluno /home/aluno/Maildir/
    chmod -R go-rwx /home/aluno/Maildir
    
  9. Reconfigure o Postfix: vi /etc/postfix/main.cf acrescentando a diretiva:
    home_mailbox = Maildir/
    
  10. Reinicie os serviços: service dovecot restart e service postfix restart
  11. Instale os pacotes e dependências necessárias: apt-get install -y php5 sqlite php5-sqlite php-net-smtp php-mail-mime php-mdb2
  12. Dentro de /var/www/html/webmail mudar as permissões: chmod 777 temp/ logs/
  13. Mude as permissões: chmod 755 /var/www/html/webmail e chmod 777 /var/www/html/webmail/SQL/
  14. Atribua o nome de máquina no servidor Apache, acrescentando ao final do arquivo /etc/apache2/apache2.conf:

ServerName www.redesX.edu.br</syntaxhighlight>

  1. Reinicie o Apache2: service apache2 restart
  2. Acesso com um navegador a página: http://192.168.2.X/webmail/installer/
  3. Verifique se há alguma pendência NÃO opcional (procure pela string optional nos cabeçalhos das seções), se houver resolva!
  4. Clique em Next.
  5. Na seção (quadro) Database setup ajuste exatamente assim:
     SQLite Database type
     "em branco"                     Database server (omit for sqlite)
     /var/www/html/webmail/SQL/sqlite.db  DataBase name (use absolute path and filename for sqlite)
     "em branco"                     Database user name (omit for sqlite)
     "em branco"                     Database password (omit for sqlite)
    
  6. Clique em CREATE CONFIG.
  7. Copie ou baixe a conteúdo da configuração apresentada para /var/www/html/webmail/config/config.inc.php. Clique em CONTINUE.
  8. Tenha CERTEZA que tudo esteja correto.
  9. Acesse a página http://ip_do_seu_server/webmail/ e forneça o login e senha do aluno.
  10. Faça testes enviando mensagens aos colegas. É possível enviar também para contas externas desde que não haja bloqueio por domínio inválido.
Aula 33 15/10/14: Apache
Aula 34 17/10/14: Apache

Ver capítulo 26 da apostila.

O servidor Apache (Apache server) é o mais bem sucedido servidor web livre. Foi criado em 1995 por Rob McCool, então funcionário do NCSA (National Center for Supercomputing Applications), Universidade de Illinois. Ele descende diretamente do NCSA httpd, um servidor web criado e mantido por essa organização. Seu nome vem justamente do reaproveitamento do NCSA httpd (e do fator de tê-lo tornado modular) fazendo um trocadilho com a expressão "a patchy httpd (um httpd remendável). Para ter ideia de sua popularidade, em maio de 2010, o Apache serviu aproximadamente 54,68% de todos os sites e mais de 66% dos milhões de sites mais movimentados. O servidor é compatível com o protocolo HTTP versão 1.1. Suas funcionalidades são mantidas através de uma estrutura de módulos, podendo inclusive o usuário escrever seus próprios módulos — utilizando a API do software. É disponibilizado em versões para os sistemas Windows, Novell Netware, OS/2 e diversos outros do padrão POSIX (Unix, GNU/Linux, FreeBSD, etc).

Um servidor web é capaz de atender requisições para transferência de documentos. Essas requisições são feitas com o protocolo HTTP (HyperText Transfer Protocol), e se referem a documentos que podem ser de diferentes tipos. Uma requisição HTTP simples é mostrada abaixo:

GET / HTTP/1.1 Host: www.ifsc.edu.br

Para o servidor Web, os principais componentes de uma requisição HTTP são o método HTTP a executar e o localizador do documento a ser retornado (chamado de URI - Uniform Resource Indicator). No exemplo acima, a requisição pede o método GET aplicado à URI /. O resultado é composto do status do atendimento, cabeçalhos informativos e o conteúdo da resposta. No exemplo, o status é a primeira linha (HTTP/1.1 200 OK), com os cabeçalhos logo a seguir. Os cabeçalhos terminam ao aparecer uma linha em branco, e em seguida vem o conteúdo (ou corpo) da resposta.

Todo documento possui um especificador de tipo de conteúdo, chamado de Internet media Type. O cabeçalho de resposta Content-type indica o media type, para que o cliente HTTP (usualmente um navegador web) saiba como processá-lo. No exemplo acima, o documento retornado é do tipo text/html, o que indica ser um texto HTML. Outros possíveis media types são: text/plain (texto simples), application/pdf (um texto PDF), application/x-gzip (um conteúdo compactado com gzip).

Um documento no contexto do servidor web é qualquer conteúdo que pode ser retornado como resposta a uma requisição HTTP. No caso mais simples, um documento corresponde a um arquivo em disco, mas também podem ser gerados dinamicamente. Existem diversas tecnologias para gerar documentos, tais como PHP, JSP, ASP, CGI, Python, Perl, Ruby, e possivelmente outras. Todas se caracterizam por uma linguagem de programação integrada intimamente ao servidor web, obtendo dele informação sobre como gerar o conteúdo da resposta. Atualmente, boa parte dos documentos que compõem um site web são gerados dinamicamente, sendo PHP, JSP e ASP as tecnologias mais usadas.

Informações gerais sobre Apache no Ubuntu

  • Instalação:
    sudo apt-get install apache2
    
  • Arquivos de configuração ficam em /etc/apache2:
    • apache2.conf: a configuração inicia aqui
    • Diretório sites-available: configurações de hosts virtuais
    • Diretório sites-enabled: hosts virtuais atualmente ativados
  • Para iniciar o Apache:
    sudo service apache2 start
    
  • Para testar o Apache: com um navegador acesse a URL http://192.168.2.1X/ (X é 02 para o micro 2, 03 para o 3, e assim por diante).

Uma configuração básica

O servidor Apache precisa de algumas informações básicas para poder ativar um site:

  • Qual seu nome de servidor: seu nome DNS , como www.redesX.edu.br
  • Em que portas ele atende requisições: as portas TCP onde ele recebe requisições HTTP. Por default é a porta 80, mas outras portas podem ser especificadas.
  • Onde estão os documentos que compõem o site hospedado: o caminho do diretório onde estão esses documentos
  • Quem pode acessar os documentos: restrições baseadas em endereços IP de clientes e/ou nomes de usuários e grupos.

No exemplo abaixo, define-se um servidor WWW chamado www.arc.edu.br, que atende requisições no ports 8080.

  1. Crie um arquivo vi /etc/apache2/sites-available/arc.conf, com o seguinte conteúdo:
    # O nome de servidor
    ServerName www.arc.edu.br
    # As portas onde se atendem requisições HTTP
    Listen 8080
    # Onde estão os documentos desse site
    DocumentRoot /var/www/html/arc
    # As restrições de acesso aos documentos
    <Directory /var/www/html/arc>
      Options Indexes
      DirectoryIndex index.html index.php
      order allow,deny
      allow from all
    </Directory>
    
  2. Crie um link simbólico para o arquivo arc:
     ln -s /etc/apache2/sites-available/arc.conf /etc/apache2/sites-enabled/
    
  3. Edite o arquivo /etc/hosts e acrescente:
     192.168.2.1X   www.arc.edu.br
    
  4. Crie o diretório /var/www/html/arc e crie um arquivo de nome index.html com o seguinte conteúdo:
     <html><body><h1>ARC!</h1>
     <p>Esta e minha pagina.</p>
     </body></html>
    
  5. Restarte o Apache:
     service apache2 restart
    
  6. Com o navegador acesse: 192.168.2.1X e 192.168.2.1X:8080
  7. Crie uma página personalizada e coloque em /var/www/html/pessoal/index.html. Acesse 192.168.2.1X/pessoal e visualize a mesma.
Aula 35 20/10/14: Compartilhamento de arquivos

Ver capítulo 28 e 30 da apostila.

Um servidor de arquivos compartilha volumes (sistemas de arquivos) via rede. Para os computadores que acessam o servidor de arquivos, os volumes compartilhados parecem ser locais e se integram transparentemente às suas árvores de diretórios.

Um serviço de compartilhamento de sistema de arquivos possui algumas implicações:

  • Segurança: o servidor de arquivos deve impor mecanismos para controle de acesso dos usuários remotos aos arquivos dos volumes compartilhados, de forma consistente com as restrições e direitos concedidos aos usuários locais. Para isso ser efetivo, torna-se necessário que os usuários da rede estejam definidos em um domínio administrativo.
  • Desempenho: os acessos remotos aos arquivos são efetuados no nível de sistema de arquivos, o que significa que as transferências de dados são orientadas a blocos. Como a leitura e escrita de blocos se faz via mensagens na rede, há que cuidar para que o tamanho de blocos seja adequado para agilizar as transferências. Além disso, demais características no acesso ao sistema de arquivos remoto (atualização de atributos, gravação síncrona ou assíncrona) precisam ser ajustadas para reduzir os atrasos nas operações sobre arquivos e diretórios.
  • Integridade de dados: sendo o sistema de arquivos remoto, e podendo ser acessado por mais de um cliente simultaneamente, são necessários mecanismos para evitar inconsistências dos dados vistos pelos diversos clientes. Outro detalhe a se cuidar trata de erros de transmissão e quedas ou interrupções momentâneas no servidor de arquivos.

Existem muitos tipos de sistemas de arquivos de rede, como NFS, Coda, Andrew FS, SMB/CIFS, porém nos concentraremos nos dois mais usados:

  • NFS (Network File System): sistema de arquivos de rede nativo de muitos sistemas operacionais Unix
  • SMB/CIFS (Server Message Block/Common Internet File System): mais conhecido como compartilhamento de arquivos e impressoras do Windows

Servidor de arquivos: NFS

Ver capítulo 30 da apostila.

NFS é um sistema de arquivos de rede criado pela Sun Microsystems em 1989, e descrito na RFC 1094. Seu uso predomina em sistemas operacionais Unix, porém há implementações para outras famílias de sistemas operacionais.

No NFS, um servidor compartilha um ou mais diretórios. Cada diretório compartilhado está sujeito a várias opções e restrições de acesso, como:

  • clientes permitidos
  • se são permitidos acessos como superusuário (root)
  • se modificações são síncronas ou assíncronas
  • protocolo de transporte usado (TCP ou UDP)
  • tamanho de bloco para leitura ou escrita
  • ... e outras

Configurações no servidor

  1. Para ter suporte ao serviço NFS, deve-se instalar o pacote nfs-kernel-server:
    apt-get install -y nfs-kernel-server
    
  2. Crie o diretório /data para ser compartilhado e insira alguns arquivos:
    mkdir /data
    cp -rf /etc/a* /data
    
  3. Um computador pode ser tanto servidor como cliente. Para o papel de servidor, uma tabela lista os diretórios a serem compartilhados e suas opções de compartilhamento. De forma geral, nos sistemas Unix essa tabela fica no arquivo /etc/exports, como neste exemplo: vi /etc/exports
    # Compartilha /home para os computadores da rede 192.168.2.0/24, em modo leitura-escrita, com acessos 
    # para os usuários comuns, com as devidas permissões, mas não como superusuário. Modificações em modo assíncrono.
    /home 192.168.2.0/24(rw,root_squash,async,no_subtree_check)
    
    # Compartilha /data para os computadores da rede 192.168.2.0/24, em modo leitura-escrita, porém sem acessos 
    # como root. Modificações em modo assíncrono. Porém para 192.168.3.101 se permitem  acessos
    # como  root.
    /data 192.168.2.101(rw,no_root_squash,no_subtree_check) 192.168.2.0/24(ro,root_squash,async,no_subtree_check)
    
  4. Após editar esse arquivo, reiniciar e atualizar o serviço NFS com o comando exportfs:
    service nfs-kernel-server restart
    exportfs -r
    
  5. Podem-se ver os diretórios exportados com o comando showmount:
    showmount -e
    

Testes no cliente

  1. Use máquina virtual com ambiente gráfico como cliente.
  2. Para o lado cliente, primeiramente deve-se instalar um pacote para acesso remoto: apt-get install nfs-common
  3. Os sistemas de arquivos de rede a serem acessados são montados de forma semelhante a sistemas de arquivos locais (portanto, usando o comando mount e podendo ser incluídos em /etc/fstab caso dese-se que sempre sejam montados no boot).
  4. Crie 2 diretórios para montar os diretórios montados em seu servidor:
    mkdir /home/aluno/home_do_server_root
    mkdir /home/aluno/data_do_server_root
    mkdir /home/aluno/home_do_server_aluno
    mkdir /home/aluno/data_do_server_aluno
    
  5. Monte os diretórios remotos:
    $ mount 192.168.2.1X:/home /home/aluno/home_do_server_root   Como root
    $ mount 192.168.2.1X:/data /home/aluno/data_do_server_root   Como root
    $ sudo mount 192.168.2.1X:/home /home/aluno/home_do_server_aluno   Como aluno
    $ sudo mount 192.168.2.1X:/data /home/aluno/data_do_server_aluno   Como aluno
    
  6. Nos diretórios home_do_server e data_do_server tente criar e apagar arquivos. Conseguiu? Por quê?

Servidor de arquivos: Samba

Ver capítulo 28 da apostila.

Samba é originalmente uma implementação de código aberto para o serviço de compartilhamento de arquivos e impressoras do Microsoft Windows. Porém atualmente esse software evoluiu a tal ponto que pode ser usado como controlador de domínio Windows, além de possuir algumas funções e recursos não existentes no Windows (integração com Unix, flexibilidade de uso de diferentes bases administrativas, entre outros). Além de funcionar como um servidor, pode ter também papel de cliente e usar o serviço de autenticação de um servidor Windows. Seu uso se mostra razoavelmente simples, com complexidade proporcional à configuração desejada. Assim, Samba tem grande popularidade por possibilitar integrar os mundos do Windows e do Unix.

O Samba é dividido a grosso modo em duas partes principais:

  • Servidor de arquivos, impressoras, e de autenticação (serviços SMB/CIFS): programa smbd
  • Servidor de nomes WINS (Windows Name Service): programa nmbd

Configurações no Servidor

  1. Esse software pode ser instalado tanto a partir do código-fonte, obtido no site oficial, quanto por pacote pre-compilado. No caso do Ubuntu, sua instalação pode ser feita assim:
    apt-get install -y samba cifs-utils
    
  2. Crie o diretório /dados/software e copie alguns arquivos dentro dele.

mkdir -p /dados/software cp -rf /etc/* /dados/software </syntaxhighlight>

  1. A configuração do Samba se faz por meio de arquivos, que normalmente ficam em /etc/samba. O principal deles se chama smb.conf, e uma configuração muito simplificada segue abaixo. vi /etc/samba/smb.conf (deixe somente o conteúdo abaixo):
    [global]
       workgroup = ArcX
       server string = Servidor %h (ARC - IFSC)
       netbios name = ServidorX
       dns proxy = no
       log file = /var/log/samba/log.%m
       encrypt passwords = true
       passdb backend = tdbsam
       obey pam restrictions = yes
    
    [homes]
       comment = Diretorios dos usuarios
       browseable = no
       read only = no
       create mask = 0700
       directory mask = 0700
    
    [software]
            comment = Softwares
    	path = /dados/software
    	valid users = aluno
    	force user = aluno
    	force group = aluno
    	force create mode = 0555
    	force directory mode = 0555
    	writable = yes
    
  2. Crie contas de usuários samba, usando esse comando smbpasswd para todos os usuários desejados. Para o usuário aluno:
    smbpasswd -a aluno
    
  3. Ative o Samba:
    service smbd restart
    service nmbd restart
    

Teste no cliente

  1. Teste o acesso a seus compartilhamentos de sua máquina virtual gráfica. Instale os pacotes:
    apt-get install cifs-utils
    
  2. Para listar os compartilhamentos de seu servidor você pode usar esse comando:
    smbclient -L 192.168.2.1X -U aluno
    
  3. Para acessar um compartilhamento
    smbclient //192.168.2.1X/software -U aluno     vai abrir um terminal SMB
    dir      Lista os arquivos do comaprtilhamento
    quit
    
  4. Para acessar um compartilhamento no modo gráfico
    Abra o navegador de arquivos do Linux.
    digite: <Ctrl>+<L>      Vai abrir uma linha digitável no topo da janela.
    digite: smb://192.168.2.X/software   Vai abrir o diretório compartilhado
    
  5. Monte um compartilhamento em sua árvore de diretórios. Para isso, use o tipo de sistema de arquivos cifs no comando mount:
    mkdir /home/aluno/smb_mount_software
    mount -t cifs -o username=aluno,password=aluno //192.168.2.1X/software /home/aluno/smb_mount_software
    
  6. Verifique a montagem
    df -h
    
  7. Monte o compartilhamento aluno.
  8. Entre no diretório montado e tente criar e/ou apagar arquivos. Conseguiu? Por quê?
Aula 36 22/10/14: FTP

Ver capítulo 32 da apostila.

  1. Instale o servidor FTP e habilite o acesso como anonymous
     apt-get install vsftpd 
    vi /etc/vsftpd.conf
        anonymous_enable=YES
    
  2. Teste conectando do terminal da máquina real, como anonymous e senha em branco. Tente criar arquivos e pastas. Verifique o conteúdo do diretório da máquina remota e também da máquina local. Digite help no terminal ftp para saber como.
     ftp 192.168.2.1X
    
  3. Configure o diretório padrão do anonymous para /vsftpd, crie este dirtório e coloque alguns arquivo não vazios nestes diretórios.
    vi /etc/vsftpd.conf
           anon_root=/vsftpd
    mkdir /vsftpd
    
  4. Reinicie o serviço
    service vsftpd restart
    
  5. Do cliente, acesse novamente como anonymous, faça o download de arquivos.
  6. Configure para os usuários cadastrados no seu servidor poderem acessar o FTP
     
    vi /etc/vsftpd.conf
          local_enable=YES
    
  7. Reinicie o serviço
    service vsftpd restart
    
  8. Do cliente, acesse como aluno, baixe algum arquivo. Tente fazer o upload de um arquivo.
  9. Observe o log e veja possíveis falhas de autenticação
    tail /var/log/vsftpd.log
    
Aula 37 24/10/14: Instalação do servidor para o projeto integrador

Instalar o Ubuntu 14.04, atendendo as seguintes características:

  1. Particionar o disco rígido e aproximadamente 4 partes iguais e configurar as seguintes partições:
    1. / com sistema de arquivos ext4.
    2. swap de 2GB com sistema de arquivos swap. Esta é uma partição obrigatória no Ubuntu que serve para, eventualmente, fazer o descarrego de memória para o disco rígido.
    3. /home com sistema de arquivos ext4.
    4. /var com sistema de arquivos ext4.
    5. Deixar o restante do espaço livre
  2. Adicionar um usuário para cada um dos membros da equipe e dar permissão de sudo aos mesmos.
  3. Configurar a interface de rede. Após o computador ser colocado no rack do laboratório de Redes I, não se terá mais acesso físico ao mesmo, somente acesso remoto:
    1. Configure a interface com os parâmetros passados pelo Prof. Ederson, Ip roteável, máscara, DNS e roteador padrão.
    2. Configure um ip alias, para testes locais. IP: 192.168.2.2X, DNS: 200.135.37.65, Roteador padrão: 192.168.2.1 (X=02, 03,..., 13, 14)
  4. Instalar o serviço SSH, atendendo as seguintes características:
    1. Permitir acesso remoto a aplicativos gráficos (X11).
    2. Não permitir a conexão direta como usuário root.
    3. Liberar o acesso remoto com alusão explícita aos membros da equipe, ou seja, nenhum outro usuário, mesmo que exista no sistema, pode acessar remotamente.
Aula 38 29/10/14: DHCP

Ver capítulo 31 da apostila.

Em nosso experimento será usado o servidor DHCP desenvolvido pelo ISC. Para usá-lo devem-se seguir os passos descritos abaixo.

  1. Instalar o serviço:
    apt-get install -y dhcp3-server
    
  2. Configurar em /etc/dhcp/dhcpd.conf. Definir as configurações globais e as redes onde o servidor DHCP irá ofertar endereços. Apague todo o conteúdo do arquivo original:
    default-lease-time 600;
    max-lease-time 7200;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.2.255;
    option routers 192.168.2.1;
    option domain-name-servers 200.135.37.65;
    option domain-name "arc.edu.br";
    
    subnet 192.168.2.0 netmask 255.255.255.0 {
       range 192.168.2.X1 192.168.2.X9;
    }
    
  3. Editar a interface que vai atender ao DHPD:
    vi /etc/default/isc-dhcp-server
         INTERFACES="eth0"
    
  4. Iniciar o servidor DHCP:
    service isc-dhcp-server restart
    
  5. Use o utilitário o dhclient de sua máquina virtual com ambiente gráfico como cliente para testes
    dhclient -v eth0
    
  6. Verifique o log e observe a troca de mensagens entre o cliente e o servidor:
     tail /var/log/syslog
    
  7. Verifique os aluguéis no seu servidor com:
    cat /var/lib/dhcp/dhcpd.leases
    

Maiores detalhes sobre esse servidor DHCP:

Aula 39 31/10/14: Aula de dúvidas para avaliação
Aula 40 3/11/14: Terceira avaliação
Aula 41 5/11/14: SSH

Ver capítulo 33 da apostila.

  1. Instale o SSH em sua máquina.
  2. Habilite e desabilite o login do root.
    vi /etc/ssh/sshd_config
       PermitRootLogin yes
    
  3. Reinicie o serviço
    service ssh restart
    
  4. De sua máquina real conecte e faça testes.
    ssh aluno@192.168.2.1X
    
  5. Habilite o acesso somente para um conjunto de usuários (desafio).
  6. Teste.
  7. Desfaça o anterior. Bloqueie o acesso para um conjunto de usuários (desafio).
  8. Teste.
  9. Instale o SSH em sua máquina virtual com ambiente gráfico, Ip 192.168.2.2X.
  10. Habilite e desabilite o X11Forwarding.
  11. Da máquina real teste esta funcionalidade:
    ssh -X aluno@192.168.2.2X 
       firefox
    
  12. Teste a funcionalidade do scp, copiando arquivos locais para o servidor e vice-versa.
  13. Configure seu par de máquinas, cliente e servidor, para conexão direta, sem pedido de senha (desafio).
  14. Teste a conexão direta.
  15. Teste a execução de comandos no seu servidor, sem "sair" do cliente.
  16. Faça testes fornecendo usuário e/ou senha errados e verifique o log:
    tail /var/log/auth.log
    
  17. Permitindo acesso ao serviço somente para algumas redes:
    vi /etc/hosts.allow
          sshd: 1.2.3.0/255.255.255.0
          sshd: 192.168.0.0/255.255.255.0
    vi /etc/hosts.deny
          sshd: ALL
    
Aula 42 7/11/14: Servidor Proxy/Cache

Ver capítulo 34 da apostila.

  1. Instalar o Squid no Servidor:
    apt-get install squid
    
  2. Reiniciar o serviço:
    service squid3 restart
    
  3. Verificar os logs do mesmo:
    tail /var/log/squid3/cache.log
    tail /var/log/squid3/access.log
    tail /var/log/upstart/squid3.log
    
  4. Edite o /etc/squid3/squid.conf e descomente as regras explicitadas na apostila.
  5. Edite o /etc/squid3/squid.conf e inclua as regras abaixo. Observe que a primeira regra de cada bloco já exite no arquivo, crie as demais. A ordem sequencial é fundamental.
    .....
    acl localhost src 127.0.0.1/32 ::1
    acl redelocal src 192.168.2.0/24
    .....
    http_access allow localhost
    http_access allow redelocal
    
  6. Restarte o serviço
  7. Siga o roteiro da apostila a configure o navegador da máquina ubuntu gráfico (cliente) para utilizar o Squid de seu servidor, substituindo localhost por 192.168.2.1X.
  8. No cliente faça o download de algum arquivo que não seja maior que o maximum_object_size configurado.
  9. No servidor procure o mesmo (por tamanho) no /var/spool/squid3 com os comandos:
    du -sh /var/spool/squid3/*
    du -sh /var/spool/squid3/00/*
    
  10. No servidor faça testes de bloqueio para algum sítio de sua preferência.
  11. Teste no cliente.
  12. No servidor bloqueie o acesso a sítios que contenham a palavra uol.
  13. No cliente teste acessando http://www.folha.uol.com.br/.
  14. No servidor bloqueie o acesso à rede no horário atual (veja a hora de sua máquina).
  15. Teste no cliente.
Aula 43 10/11/14: Firewall com iptables

Ver capítulo 35 da apostila.

Vamos trabalhar com sub-redes e para isto precisamos fazer com que o nosso cliente navegue "através" de nosso servidor.

  1. No ubuntu server (servidor) crie uma nova interface de rede através do ipaliases: 10.0.X.1
  2. Configure seu servidor como roteador (roteiro já apresentado).
  3. Configure seu servidor para mascarar os pacotes de seu cliente (roteiro já apresentado).
  4. No ubuntu gráfico (cliente) configure a interface de rede como 10.0.X.10, gw 10.0.X.1 e nameserver 200.135.37.65.
  5. Teste a conexão de rede de seu cliente. Se houver problemas os corrija.
  6. Instale o iptables no seu servidor.
    apt-get install iptables
    
  7. Configure uma regra que impeça seu cliente de acessar qualquer porta da máquina www.ifsc.edu.br.
  8. Teste a partir de seu cliente.
  9. Repita a regra, mas agora mandando um aviso ao cliente.
  10. Teste a partir de seu cliente.
  11. Proíba o seu cliente de fazer ping para qualquer máquina, liberando todos os demais serviços.
  12. Teste a partir de seu cliente.
  13. Limpe as regras anteriores.
  14. Permita que seu cliente acesse qualquer máquina na porta 80, mas somente nesta porta.
  15. Teste a partir de seu cliente.
  16. Limpe todas as regras.
  17. Mude a política para DROP e permita que o seu cliente acesse somente www.ifsc.edu.br.
  18. Teste a partir de seu cliente.
  19. De seu cliente, faça um ataque do tipo ping of death em seu servidor:
    ping -f 192.168.2.1X
    
  20. Iniba ataques do tipo ping of death na chain INPUT do seu servidor.
  21. Teste novamente com seu cliente e tente perceber a diferença no comportamento dos dois ataques.
  22. Configure uma regra em seu servidor que proíba (REJECT) pings oriundos da máquina 192.168.2.1.
Aula 44 12/11/14: Firewall com iptables e dúvidas
Aula 45 14/11/14: Quarta Avaliação

Exercícios de fixação / Desafios

Exercício / Desafio 1
  • Partindo do princípio que você já se familiarizou com o sistema Linux e possui alguns conhecimentos sobre o editor vi.
  1. Procure na Internet como executar uma tarefa periodicamente no Linux, em específico Ubuntu.
  2. Após descobrir a resposta, faça um Shell script para que a cada minuto, seja escrita a saída da última linha dos comandos abaixo, no arquivo com o seguinte nome: monitorSaidaLog.txt e deve ser armazenado na pasta ~/meusLogs

Crie os arquivos abaixo na pasta ~/meusLogs e preencha com conteúdo aleatório.

tail -n 1 ~/meusLogs/arq1
head -n 1 ~/meusLogs/outroArq
ls -lat ~/meusLogs/

A saída dos comandos devem ser colocados em variáveis e só então redirecionados para o arquivo.

Ex.: VAR1=` comando a ser executado` 
Ex.: VAR2=`...` 

Para acessar uma variável utiliza o caracter $

Ex.: echo $VAR1

Sendo que, você irá identificar a cada chamada do script, em qual dia, mês, ano, hora, minuto e segundo o script foi chamado e colocar no topo de cada saída gerada a seguinte informação: Log gerado em: 07-08-2014_17:25:36, olhar exemplo no final do exercício.

Dicas: você irá utilizar o comando 'date' para gerar a saída no formato desejado e redirecionar a saída para o arquivo em questão com >>.

O arquivo monitorSaidaLog.txt deve estar em ~/meusLogs/monitorSaidaLog.txt, ou seja, dentro do home do usuário criar a pasta meusLogs e redirecionar a saída do script para lá...


Significado do formato desejado para utilizar com o comando 'date':

d-m-Y_HMS
d = dia atual, 0-31
m = mês atual, 1-12
Y = ano atual, 1900 - hoje
H = hora atual, 0-23
M = minuto atual, 0-59
S = segundo atual, 0-59


Exemplo do conteúdo do arquivo monitorSaidaLog.txt

Log gerado em:  07-08-2014_17:25:36
Aug 7 17:13:22 wrl -- MARK --
Aug 7 13:15:01 wrl kernel: [ 111.330006] eth0: no IPv6 routers present
Aug 7 16:13:42 wrl su[8856]: + /dev/pts/1 worm:root
Log gerado em:  07-08-2014_17:26:34
Aug 7 17:13:22 wrl -- MARK --
Aug 7 13:15:01 wrl kernel: [ 111.330006] eth0: no IPv6 routers present
Aug 7 16:13:42 wrl su[8856]: + /dev/pts/1 worm:root


Logo após tudo feito, vamos testar. Para testar utilize o comando tail -f e monitore o arquivo monitorSaidaLog.txt

Se tudo correr bem, a cada 60 segundos, o arquivo deve ser incrementado com o novo conteúdo.


Possível resolução do exercício: Media:scriptLogMonitors.sh.zip


Exercício / Desafio 2

Fazer um Script com o nome scriptBackupDir.sh para gerar o backup de um diretório.

O script de backup deve ser executado a cada 2 minutos.

Você deve salvar informações sobre o backup em um arquivo de log.

Você deve a cada nova execução, se tudo correr bem, apagar o penúltimo backup feito, de tal forma que só o último backup gerado permaneça salvo.

Você deve solicitar ao usuário de qual diretório deve ser feito backup.


Algumas variáveis que serão padrão:

read DIR_BKP_NOME #ou através de parâmetros

A variável DIR_BKP_NOME deve ser colocada no topo do script, na primeira linha.

diretório de destino do backup.

DIR_DEST="~/Backup_Dir/"

nome do backup com esse formato:

BKP_NOME=15-08-2014-12-47-22.tar.gz"
echo "Backup salvo em:" 
NOME_SALVAR=
echo $NOME_SALVAR 

colocar lógica aqui...


Comandos que você irá usar.

tar -cvvzf $NOME_SALVAR $DIR_BKP_NOME > /dev/null 2> /dev/null
REMOVE_LAST=`cat $DIR_DEST"NomeArquivoLog.log"` 
echo $VAR_COM_NOME_COMPLETO > $DIR_DEST"NomeArquivoLog.log" 
Exercício / Desafio 3
Faça um shellScript que compacte todos arquivos passados como parâmetros (separadamente).
Seu script deve ter no máximo 5 linhas.
Utilize o gzip para compactar.
Exemplo de chamada do script: meuScriptCompactador.sh aqruivo1 outroArquivo file3 

Exercício / Desafio 4
Faça um shellScript que a partir de um arquivo de entrada, leia linha a linha desse arquivo
e retorne a média.

Exemplo Arquivo entrada:

João 7 8 9
Marcelo 6 8 10
Maria 5 9 8
Fernando 4 7 9

Exemplo saída esperada:

João 8
Marcelo 8
...

Dica, utilizar o comando awk.

Exercício / Desafio 5 - Calculadora

Faça um shellScript chamado calcular.sh que a partir de três parâmetros, faça o cálculo desejado, exemplo:

./calcular.sh valor1 + valor2
./calcular.sh 10 + 3 

Após fazer o cálculo o shellScript deve perguntar se o usuário quer fazer outra operação ou terminar.


Exercício / Desafio 6 - Instalação de Pacotes Manual

No diretório home baixar o programa de FTP proftpd:

$wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.5.tar.gz

Verificar integridade do pacote:

$md5sum proftpd-1.3.5.tar.gz
aff1bff40e675244d72c4667f203e5bb  proftpd-1.3.5.tar.gz

Descompactar:

$tar -zxvf proftpd-1.3.5.tar.gz

Entrar no diretório:

$cd proftpd-1.3.5/
$./configure --prefix=/home/aluno/proftpd
$make
$sudo make install
$sudo /home/aluno/proftpd/sbin/proftpd

Edite o arquivo /home/aluno/proftpd/etc/proftpd.conf usando sudo.

Procure pela linha: "DefaultRoot ~" e descomente.

Para testar acesse o navegador e entre com o endereço abaixo, subtituindo o xxx pelo seu ip:

ftp://192.168.2.xxx

Logo após acessar usando o navegador, crie o usuário ftp e tente acessar novamente, o que aconteceu? Lembrando que é necessário reiniciar o proftpd.

Agora faça o acesso via terminal através do comando ftp.

$ftp 192.168.2.xxx
Entre com seu login e senha. 
Você pode navegar pelos arquivos. 
Digite help para ver os comandos existentes.
Para baixar e enviar arquivos use "get nomeDoArquivo" e "put nomeDoArquivo" respectivamente.

Ao final do processo compartilhe seu ip com seus colegas. Crie um arquivo e renomeie com o seu nome completo. Tente enviar o arquivo com seu nome para um colega através do terminal.

$put TulioAlbertonRibeiro.txt


Desafio:

Faça com que quando o usuário aluno acessar o sistema, ele somente consiga acessar a pasta
"~public_FTP"


Introdução TCP-IP / Redes & Sub-Redes 19/09/2014

Slides TCP/IP Redes

Solução para o exercício 10.1.2.0/28

      netID|hostID
10.1.2.0000|0000 1 - 14
10.1.2.0001|0000 16 - 30
10.1.2.0010|0000 32 - 46
10.1.2.0011|0000 48 - 62
10.1.2.0100|0000 64 - 78
10.1.2.0101|0000 80 - 94
10.1.2.0110|0000 96 - 110
10.1.2.0111|0000 112 - 126 
10.1.2.1000|0000 128 - 142
10.1.2.1001|0000 144 - 158
10.1.2.1010|0000 160 - 174
10.1.2.1011|0000 176 - 190
10.1.2.1100|0000 192 - 206
10.1.2.1101|0000 208 - 222
10.1.2.1110|0000 224 - 238
10.1.2.1111|0000 240 - 254

BroadCasts: 15, 31, 47, 63, 79, 95, 111, 127, 143, 159, 175, 191, 207, 223, 239, 255.

Sub-Redes: 2^n = 2^4 = 16 sub-redes válidas.

Hosts: 2^n-2 = 2^4-2 = 14 hosts válidos.

O Primeiro endereço de cada sub-rede é para a rede e o último é para o broadcast.


Trabalho Redes, cálculo de redes.

Baseado na aula passada (Introdução TCP-IP / Redes & Sub-Redes 19/09/2014), imaginem quatro redes:

Sendo elas; 10.1.2.0, 192.168.2.0, 172.31.2.0, 172.16.5.0.

OBS.: dentro da rede 172.16.5.0 deve haver quatro sub-redes; 
Você que deve definir os endereços das quatro sub-redes.
Dentro de cada sub-rede deve conter 4 hosts.

Faça o desenho das redes utilizando alguma ferramenta de desenho.

Identifique os hosts, gateways, e as redes.

Faça os cálculos de cada uma.

Cada uma dessas redes deve ter quatro dispositivos conectados. Identifique os dispositivos na rede.

Monte a tabela de roteamento.

Coloque tudo em um arquivo .pdf e entregue com nome e devidas informações necessárias a um trabalho. Nome, Instituição, data, disciplina, etc...

Pode ser feito em dupla.

Dovecot - IMAP/POP recebimento de e-mail.

Adicionar os serviços smtp, imap e pop no dns. Verificar funcionalidade (nslookup).


Dovecote:

Baixar o dovecot dentro do diretório home.

$wget http://www.dovecot.org/releases/2.2/dovecot-2.2.13.tar.gz
$tar -zxvf postfix-2.10.3.tar.gz
$./configure --prefix=/home/aluno/dovecot --with-shadow
$make ; make install


Configuração do Sistema:

* Crie os usuários e grupos *dovecot* e *dovenull*
  O usuário dovecot e dovenull serão utulizados para uso interno pelo  dovecot. 
  Eles não precisam ter shell nem homedir.

* Crie o usuário e grupo *vmail*. Este será o usuário e grupo utilizado para acessar
   os e-mails.
   
* Crie  o diretório '/home/vmail' e mude o dono e grupo para vmail:vmail. 
   Os e-mails recebidos por todos os usuarios serão armazenados sob esse diretório.
   
* Crie os arquivos '/var/log/dovecot.log' e '/var/log/dovecot-info.log' 
   e mude o dono e grupo para vmail:vmail.


dovecot.conf

---%<-------------------------------------------------------------------------
protocols = imap pop3
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
ssl = no
disable_plaintext_auth = no
mail_location = maildir:~/Maildir
pop3_uidl_format = %g
# Configuração dos métodos de autenticação:
auth_verbose = yes
auth_mechanisms = plain login cram-md5 
userdb {
 driver = passwd
 args = home=/home/%u mail=maildir:/home/%u/Maildir
}
passdb {
 driver = passwd-file
 args = /etc/dovecot/passwd
}
userdb {
 driver = static
 args = uid=vmail gid=vmail home=/home/vmail/%u
}
default_login_user = dovenull
default_internal_user = dovecot
---%<-------------------------------------------------------------------------

Para iniciar o serviço do dovecot, entrar na pasta /home/aluno/dovecot/sbin e rodar o programa:

$sudo dovecot

Importante lembrar que após a execução do comando, você pode reiniciar o processo utilizando o comando killall, o comando killall quando passado o parâmetro -HUP diz ao processo que ele deve se reiniciar. Quando um processo se re-inicia através de chamadas internas, não tem perigo de perda de dados por eventual queda, com o comando (kill -9 pid) pode haver perdas.

Então utiliza-se para reiniciar o serviço com segurança:

#killall -HUP dovecot


Criar o arquivo /etc/dovecot/passwd

$touch /etc/dovecot/passwd
$doveadm pw -s cram-md5 -u aluno

a execução do comando acima, gerará uma saída semelhante a abaixo:

{CRAM-MD5}d7d1c05282c8e083bf7e7d487acf0487ec358544f31827fa5d9ef47e99d7e4c7

colocar dentro de /etc/dovecot/passwd concatenando com o usuário aluno

aluno:{CRAM-MD5}81ffd82426a10fa62e9e23f185c772c9aa87237eed26429cb1ab58bbf8701da3

ou sem usar encriptação, não é aconselhável.

aluno:{PLAIN}minhaSenha

Você utilizará a senha definida no arquivo /etc/dovecot/passwd como a senha de recebimento dos e-mails.

Postfix:

No arquivo /etc/postfix/main.cf, lembrando que as diretivas: myhostname, myorigin, mynetworks, alias_maps e alias_database devem ser alteradas com os respectivos valores utilizados em sua configuração.

---%<-------------------------------------------------------------------------
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = m210.redes1.edu.br 
mydomain = redes1.edu.br
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
      mail.$mydomain, www.$mydomain, ftp.$mydomain
local_recipient_maps = unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
mynetworks_style = subnet
mynetworks = 192.168.2.0/24, 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
       PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
        ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
sample_directory = /etc/postfix
inet_protocols = ipv4
---%<-------------------------------------------------------------------------



Você precisa poder receber e-mails utilizando vários nomes. Por exemplo: joao@kirat.br maria@kirat.br devem ser recebidos na mesma caixa postal. Como você faria isso?


Editar o arquivo /etc/mail/aliases ou /etc/aliases ou em outro local, e colocar as linhas abaixo:

# Basic system aliases -- these MUST be present.
MAILER-DAEMON:  postmaster
postmaster:     root
tulio:          aluno
joao:           aluno


Exercício - Apache: Virtual Hosts e Controle de Acesso. .

Configurar eth0 e criar rotas.

Lembrete: ifconfig eth0... e route add default...

Verificar conectividade DNS, Apache, eth0 com (nslookup, dig, ping, netstat).

Desativar dhcp (network-manager stop).

/etc/resolv.conf

Desabilitar a resolução de nomes utilizando o servidor de nomes do professor.
Utilizar apenas o seu. 

Criar três usuários: fulano, cic?ano e beltrano.

Dentro do home (~) de cada usuário deve conter:

~/public_html/file.txt
~/public_html/jv.html
~/public_html/privado/confidencial.txt

A pasta privado só deve ser acessada mediante senha (dica .htaccess).

O Acesso deve poder ser feito de duas formas.

http://192.168.2.xxx/~fulano
http://www.fulano.com.br


Dica, Ler / Pesquisar sobre: .htaccess, Módulos UserDir e VirtualHost do Apache. 
Ler os arquivos LEIA-ME (geralmente encontrado na documentação).


Exemplos de VirtualHost:

<VirtualHost *:80>
   DocumentRoot /www/jose
   ServerName www.joao.com  
   # Outras diretivas aqui!
</VirtualHost>
<VirtualHost *:80>
   DocumentRoot /www/joao
   ServerName www.jose.org
   # Outras diretivas aqui!
</VirtualHost>
<VirtualHost 192.168.1.1 172.20.30.40>
   DocumentRoot /www/server1
   ServerName server.example.com
   ServerAlias server
</VirtualHost>


Para controle de acesso, ler:

http://httpd.apache.org/docs/2.2/pt-br/howto/htaccess.html