PJI11103-2016-1

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

PJI11103-2015-2

Diário de aula de PJI - 2016-1 - Prof. Simara Sonaglio

Dados Importantes

Professora: Simara Sonaglio
Email: simara.sonaglio@ifsc.edu.br
Encontros: terças e sextas das 18:45 às 22:15 horas.

  • Avaliação
    • Avaliações individuais em cada etapa do projeto com conceito por letras: A, B, C e D. Conceito mínimo necessário em cada avaliação: C.
    • Avaliação baseada no projeto. Avaliação individual com acesso ao servidor da equipe e com questões relativas aos serviços e configurações do mesmo.
    • Um ou mais conceitos D implica na realização da reavaliação: uma única avaliação a ser realizada no último dia de aula.

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.

Plano de Ensino

Diário de aulas

Projeto-PJI11103-2015-2.png


IPs e sub-domínios DNSs destinados às respectivas equipes:

  1. 200.135.37.121 - prji1.sj.ifsc.edu.br
  2. 200.135.37.122 - prji2.sj.ifsc.edu.br
  3. 200.135.37.123 - prji3.sj.ifsc.edu.br


Aula 1 - 22/03/16: Apresentação da disciplina e revisão de Linux

Apresentação
  • Apresentação da disciplina, plano de aula, trabalhos e métodos de avaliação.
  1. Auto apresentação
  2. Apresentação da Wiki
  3. Ementa
  4. Proposta de Cronograma de atividades
  5. Apresentação do modelo de aulas a ser adotado
    1. Projeto
  6. Avaliações
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 pwd. Escreva a saída resultante deste comando. Este será o seu diretório raiz.
  3. Crie um diretório de trabalho, por exemplo execute mkdir revisao. OBS: todos os diretórios e arquivos que você for trabalhar daqui para frente, faça dentro da sua pasta REVISAO.
  4. A partir do seu diretório REVISAO, 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
  5. Entre no diretório regiaoNorte.
  6. Liste os diretórios existentes dentro do diretório atual, e anote a saída.
  7. Copie o diretório amazonas com o nome para.
  8. Execute o comando ls, e escreva abaixo a saída resultante deste comando.
  9. Entre no diretório regiaoSul, e renomeie o diretório parana para o nome rioGrandeSul.
  10. Liste os diretórios e escreva abaixo a saída resultante deste comando.
  11. Volte para o diretório raiz.
  12. 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.
  13. Liste o conteúdo do seu diretório REVISAO, e redirecione a saída para um arquivo com o nome saidaRevisao.arq e que este arquivo fique dentro do diretório amazonas.
  14. 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.
  15. 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?
  16. Apague os arquivos terminados em .arq e .sul.
  17. Verifique qual é o diretório corrente e, caso não seja o diretório home (/home/aluno) do seu usuário, vá para o mesmo.
  18. Liste o conteúdo do diretório home do seu usuário.
  19. Verifique se há a ocorrência da palavra “Protocol” no arquivo /etc/protocols.
  20. Liste as doze primeiras linhas do arquivo /etc/protocols.
  21. Liste as quinze últimas linhas do arquivo /etc/protocols.
  22. Mostre quantas linhas, palavras e caracteres possui o arquivo /etc/protocols.
  23. Quantos caracteres têm as cinco primeiras linhas do arquivo /etc/passwd.
  24. Quantas palavras têm as 8 ultimas linhas do arquivo /etc/protocols.
  25. Mostre as linhas de 6 a 10 do arquivo /etc/protocols.
  26. Mostre as 50 primeiras linhas do arquivo /etc/protocols na ordem alfabética inversa.
  27. Mostre as 10 últimas linhas do arquivo /etc/passwd na ordenado alfabeticamente.
  28. Entre os processos que estão rodando, mostre os que possuem a string “usr”.
  29. Dentre as 30 primeiras linhas do arquivo /etc/protocols, mostre as linhas que possuem a string “protocol”.
  30. Dentre as 20 ultimas linhas do arquivo /etc/protocols, mostre as linhas que possuem a string “Protocol”.
  31. Mostre apenas as 5 ultimas linhas que possuem a string “Protocol” do arquivo /etc/protocols.
  32. Conte quantas linhas possuem a palavra “root” dentre os processos que estão rodando.
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.

  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 2 - 25/03/16: Feriado

Aula 3 - 29/03/16: Criação de usuários e grupos e permissionamento de arquivos

Criação de 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

Usuários e grupos

Um usuário Linux é uma entidade que possui uma identificação no sistema onde os principais parâmetros são: login, senha, e número de identificação. Estas informações permitem ao Linux controlar como o acesso é garantido aos usuários e o que eles podem fazer depois de obter a permissão de acesso. Um grupo é um conjunto de usuários. Cada grupo também possui identificação única no sistema, um nome e um número. O administradores de sistemas normalmente fazem controle de acesso por meio dos grupos.

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

Esta parte da atividade cada aluno executa individualmente em sua máquina, fazendo uso da devida máquina virtual (1-Grafico ou 1-Servidor).


  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/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.
  5. Crie um usuário com o nome de jose usando o comando adduser, pertencente ao grupo turma.
  6. Dê ao usuário manoel a senha jose123.
  7. Confirme a correta criação do usuário jose.
     tail /etc/passwd
    
  8. Confirme se o diretório home de jose foi criado corretamente dentro de /home/contas.
  9. Crie o diretório manoel em /home/contas.
  10. Crie um usuário com o nome de manoel usando o comando useradd. Deve-se ao criar o usuário definir os seguintes parâmentros:
    1. Pertencer ao grupo turma;
    2. O diretório home deve ser /home/contas/manoel;
    3. Configurar o shell do usuário como sendo /bin/bash;
    4. Observar qual a diferença entre os comandos adduser e useradd.
       useradd -g turma -d /home/contas/manoel -s /bin/bash manoel
      
  11. Dê ao usuário manoel a senha mane123.
     passwd manoel
    
  12. Acrescente, por comandos, ao perfil do usuário seu nome completo e endereço: Manoel da Silva, R. dos Pinheiros, 2476666.
     usermod -c "Manoel da Silva, R. dos Pinheiros, 2476666" manoel
    
  13. Verifique o arquivo /etc/passwd e confirme se o usuário manoel está OK.
  14. Mude, por comandos, o diretório home do manoel de /home/contas/manoel para /home/manoel.
     usermod -d /home/manoel manoel
    
  15. Verifique o arquivo /etc/passwd e confirme a alteração.
  16. Logue como manoel e verifique as mensagens na tela.
     login manoel
    
  17. Crie o diretório /home/manoel e tente logar novamente.
  18. Mude o login do manoel para manoelsilva.
     usermod -l manoelsilva manoel
    
  19. Crie o diretório /home/manoel e tente logar novamente.
  20. Logue como manoelsilva.
  21. Recomponha os arquivos originais do item 3.
Permissionamento de arquivos

Permissionamento

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. Configure a shell dos usuários como /bin/bash.
  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/. Configure a shell dos usuários como /bin/bash.
  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/. Configure a shell dos usuários como /bin/bash.
  6. Crie senhas para os usuários.
  7. Logue com o usuário aluno1 e crie um arquivo com o comando touch chamado aluno1.txt. Execute o comando echo "Teste aluno1" > aluno1.txt. Saia do usuário aluno1.
  8. 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.
  9. Logue com a conta Aluno2. De um ls -l dentro do diretório home do usuário Aluno1. Dê um cat no arquivo aluno1.txt.
  10. Posteriormente, tente dar um echo "Teste Aluno2" >> aluno1.txt. Foi possível executar este comando? Se não, por quê?
  11. Deslogue do usuário Aluno2
  12. Logue com Prf1 e crie um arquivo com o comando touch chamado prf1.txt. Execute o comando echo "Teste prf1" > prf1.txt. Saia do usuário Prf1.
  13. 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.
  14. Logue com um outro usuário Prf e teste se você consegue listar o conteúdo do diretório home do usuário Prf1, exibir o conteúdo do arquivo criado acima e escrever algo neste mesmo arquivo.
  15. Logue com o usuário servidor1 e de um ls -l dentro do diretório home do usuário prf1. Dê um cat no arquivo prf1.txt. Tente editar o arquivo.
  16. Logue com um usuário aluno e de um ls -l dentro do diretório home do usuário prf1. Foi possível executar este comando? Se não, por quê?

Aula 4 - 01/04/16: Permissionamento de arquivos e SSH

Permissionamento de arquivos

Permissionamento

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. Configure a shell dos usuários como /bin/bash.
  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/. Configure a shell dos usuários como /bin/bash.
  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/. Configure a shell dos usuários como /bin/bash.
  6. Crie senhas para os usuários.
  7. Logue com o usuário aluno1 e crie um arquivo com o comando touch chamado aluno1.txt. Execute o comando echo "Teste aluno1" > aluno1.txt. Saia do usuário aluno1.
  8. 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.
  9. Logue com a conta Aluno2. De um ls -l dentro do diretório home do usuário Aluno1. Dê um cat no arquivo aluno1.txt.
  10. Posteriormente, tente dar um echo "Teste Aluno2" >> aluno1.txt. Foi possível executar este comando? Se não, por quê?
  11. Deslogue do usuário Aluno2
  12. Logue com Prf1 e crie um arquivo com o comando touch chamado prf1.txt. Execute o comando echo "Teste prf1" > prf1.txt. Saia do usuário Prf1.
  13. 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.
  14. Logue com um outro usuário Prf e teste se você consegue listar o conteúdo do diretório home do usuário Prf1, exibir o conteúdo do arquivo criado acima e escrever algo neste mesmo arquivo.
  15. Logue com o usuário servidor1 e de um ls -l dentro do diretório home do usuário prf1. Dê um cat no arquivo prf1.txt. Tente editar o arquivo.
  16. Logue com um usuário aluno e de um ls -l dentro do diretório home do usuário prf1. Foi possível executar este comando? Se não, por quê?
SSH

Ver capítulo 33 da apostila. Gabarito da atividade sobre SSH.

Habilitando acesso remoto com SSH

Em informática, o Secure Shell ou SSH é, simultaneamente, um programa de computador e um protocolo de rede que permite a conexão com outro computador na rede, de forma a executar comandos de uma máquina remota. Possui as mesmas funcionalidades do TELNET, com a vantagem da conexão entre o cliente e o servidor ser criptografada, ou seja, mais segura. O SSH faz parte da suíte de protocolos TCP/IP que torna segura a administração remota de um servidor Linux/Unix.

O scp (Secure Copy) é uma maneira segura de fazer cópias de arquivos e diretórios usando o protocolo SSH.

Atividade

Atividade individual, cada aluno em sua máquina virtual (1-Servidor)

  1. Instale o SSH em sua máquina.
  2. De sua máquina real conecte na máquina virtual.
     ssh aluno@192.168.2.X
    
  3. Deslogue da máquina remota.
  4. Crie uma senha para o usuário root utilizando o comando passwd.
  5. Tente logar com o usuário root na máquina remota. Foi possível?
  6. Habilite o login do root.
     vi /etc/ssh/sshd_config 
       PermitRootLogin yes
    
  7. Reinicie o serviço
     service ssh restart
    
  8. Tente logar como root e em sequência deslogue.
  9. Desfaça a alteração em PermitRootLogin.
  10. Tente logar com o usuário root novamente. Foi possível?
  11. Remova a senha do usuário root para que não seja mais possível logar utilizando-a.
  12. De sua máquina real conecte e faça testes diversos.
     ssh aluno@192.168.2.X
    
  13. Habilite o acesso somente para um conjunto de usuários (desafio).
  14. Teste.
  15. Desfaça o anterior. Bloqueie o acesso para um conjunto de usuários (desafio).
  16. Teste.
  17. Instale o SSH em sua máquina virtual com ambiente gráfico, Ip 192.168.2.X.
  18. Habilite e desabilite o X11Forwarding.
  19. Da máquina real teste esta funcionalidade:
     ssh -X aluno@192.168.2.X 
      firefox
    
  20. Teste a funcionalidade do scp, copiando arquivos locais para o servidor e vice-versa.
  21. Teste a execução de comandos no seu servidor, sem "sair" do cliente.
  22. Faça testes fornecendo usuário e/ou senha errados e verifique o log:
     tail /var/log/auth.log
    
  23. Permitindo acesso ao serviço somente para algumas máquinas:

vi /etc/hosts.allow

     sshd: 192.168.X.X

vi /etc/hosts.deny

     sshd: ALL

Aula 5 - 05/04/16: Formatação, instalação e início da configuração do servidor principal

Formatação, instalação e início da configuração do servidor principal

O objetivo inicial é instalar e configurar basicamente o sistema operacional na máquina que atuará como principal servidor da rede.

Instalando o sistema operacional

As etapas básicas consistem em:

  1. Conectar todos os periféricos mínimos na torre recebida e ligá-la à tomada.
  2. Instalar o sistema operacional lendo com atenção todas as mensagens recebidas e escolhendo adequadamente as opções, com as seguintes características:
    1. Na etapa de formação escolha formatação manual ou avançada e crie a seguinte tabela de partição: i) / 30 GB ext4; i) /home 30 GB ext4; i) swap 4 GB swap; /var "espaço restante" ext4.
    2. Se necessário configure manualmente os IPs, conforme passado pelo prof.
    3. Opte por atualizar automaticamente e baixar aplicativos de terceiros.
    4. Crie uma conta (que será definitiva) para um dos usuários da equipe, com o respectivo login e senha.
    5. Aguarde a finalização da instalação e reinicie a máquina.
  3. Logue na máquina com a conta criada.
Outras configurações no servidor

Configuração básica da interface de rede do servidor

Ver capítulo 22 da apostila.

  1. vi /etc/network/interfaces
  2. This file describes the network interfaces available on your system
  3. and how to activate them. For more information, see interfaces(5).
  1. The loopback network interface

auto lo iface lo inet loopback

       address 127.0.0.1
       netmask 255.0.0.0

  1. a interface ethernet eth0

auto eth0 iface eth0 inet static address 200.135.37.12X netmask 255.255.255.192 gateway 200.135.37.126

       dns-nameservers 200.135.37.65

</syntaxhighlight>

Onde X varia de 1 a 3. Ou seja, o primeiro servidores terá o IP de final .121, o segundo .122 e o terceiro .123.

  1. ifdown -a && ifup -a

Conferindo e aprendendo sobre instalação de pacotes

Slide). Página oficial do apt-get

É necessário estar com a rede funcional. Teste com o comando:

ping www.ifsc.edu.br
  1. Com o apt-get --help veja quais as opções possíveis que o instalador de pacotes do Ubuntu 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.

Instalar o SSH no servidor

Com o comando apt-get instale o SSH e teste a conexão remotamente.

Criar usuários no servidor

Com os membros da equipe proponham e criem:

  1. Criem uma conta para cada membro da equipe com poder de comando sudo.
  2. Política de segurança a ser empregada para os usuários as serem criados por convite dos membros da equipe (familiares e amigos). Criem uma conta neste padrão, por hora denominada visitante.
  3. Uma conta para a professora, com direito a executar comandos via sudo.

Liberação de acesso SSH

Liberem o acesso SSH somente para pessoal autorizado (membros do grupo e professora). Estes acesso devem ser possíveis somente através chaves de autenticação.

Testem o acesso.

Aula 6 - 08/04/16: SSH utilizando chaves de autenticação / Configuração do servidor / Interfaces de rede

SSH utilizando chaves de autenticação

Texto retirado de Dominando o SSH

Por mais seguras que sejam suas senhas, sempre existe uma pequena possibilidade de que um atacante descubra alguma delas. Diante deste problema, o SSH permite o uso de chaves de autenticação. Em vez de depender unicamente da senha como forma de autenticação, você pode utilizar um par de chaves de autenticação, onde a chave pública é instalada nos servidores que serão acessados e a chave privada (que nunca sai da sua máquina) é protegida por uma passphrase, sem a qual a chave se torna inútil.

Nesse caso, temos uma segurança de dois níveis, em que é preciso saber a passphrase e, além dela, ter a chave privada, um arquivo salvo no HD ou em um pendrive, algo similar ao sistema bancário, onde você precisa ter o cartão e saber a senha.

Atividade

Realizar esta atividade utilizando um terminal na sua máquina real (que será nosso cliente SSH) e uma máquina virtual que possua o servidor SSH instalado.

  1. Gerar o par de chaves no cliente e informar uma passphrase quando solicitado: ssh-keygen -t rsa </syntaxhighlight>
  2. Verificar se o para de chaves foi criado corretamente: simara.sonaglio@sj-meiostele-000002:~$ ls -la .ssh/

total 20 drwx------ 2 simara.sonaglio Domain Users 4096 Abr 8 14:45 . drwx------ 50 simara.sonaglio Domain Users 4096 Abr 8 15:44 .. -rw------- 1 simara.sonaglio Domain Users 1766 Abr 8 14:45 id_rsa -rw-r--r-- 1 simara.sonaglio Domain Users 417 Abr 8 14:45 id_rsa.pub -rw-r--r-- 1 simara.sonaglio Domain Users 3108 Abr 8 15:27 known_hosts </syntaxhighlight>

  1. Instalar a chave pública no servidor: ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ip_servidor_ssh </syntaxhighlight>
  2. Testar o acesso: ssh usuario@ip_servidor_ssh </syntaxhighlight>
  3. Caso ainda não exista, criar um segundo e terceiro usuários para testes no servidor SSH
  4. Copiar a chave pública para o home deste novo usuário: scp id_dsa.pub usuario-novo@ip_servidor_ssh:usuario-novo </syntaxhighlight>
  5. Acesse o servidor com este usuário: ssh usuario-novo@ip_servidor_ssh </syntaxhighlight>
  6. Crie o diretório .ssh dentro de /home/usuario-novo: mkdir .ssh </syntaxhighlight>
  7. Escreva o conteúdo do arquivo id_rsc.pub em .ssh/authorized_keys: cat id_dsa.pub >> .ssh/authorized_keys </syntaxhighlight>
  8. Deslogue
  9. No servidor SSH alterar os seguintes campos: id_dsa.pub >> /home/rodrigo/.ssh/authorized_keys

PasswordAuthentication no UsePAM no </syntaxhighlight>

  1. Restartar o serviço: service ssh restart </syntaxhighlight>
  2. Teste o acesso SSH com os dois usuários habilitados. Teste o acesso SSH com o terceiro usuário criado e que não possui a chave. Qual o resultado?
  3. Abra uma nova máquina virtual. Esta máquina também será utilizada como cliente SSH.
  4. Copie o arquivo id_rsa para esta máquina.
  5. Acesse o servidor SSH a partir desta máquina: ssh -i caminho-arquivo-id_rsa usuario@ip_servidor_ssh</syntaxhighlight>


Após aprendermos a tornar nossos acessos via SSH mais seguros, podemos dar sequência a configuração do servidor. Assim, cada equipe deve definir como implementar em seu servidor os pontos solicitados na aula passada em relação a usuários e grupos, permissionamento de acesso e acesso remoto via SSH.


Interfaces de rede e rotas estáticas