quarta-feira, 18 de janeiro de 2012

[2012] Aula 8

Hoje não teve apresentação porque a pessoa que iria apresentar não foi :-/

Vamos logo para aula de hoje que está disponível aqui.

Links

Symbolic links

É um arquivo especial no disco (do tipo link) que tem como conteúdo o caminho para chegar até o arquivo alvo.
Quando você cria um link simbólico, você está criando link de um novo arquivo para um arquivo já existente. É apenas um arquivo novo, cujo conteúdo referencia outro arquivo. Para verificar que trata-se de uma referência de conteúdo e não um "link" para um arquivo, crie um arquivo temporário, em seguida crie um link simbólico para o mesmo utilizando o comando ln -s < nome_do_arquivo > < nome_do_link_simbólico > e com o comando ls -li verifique os inodes (1ª coluna). Note que os inodes são diferentes, logo são arquivos diferentes..

Características:

* Podem ser criados links simbólicos para arquivos e diretórios.
* O link simbólico e o arquivo alvo não precisam estar no mesmo sistema de arquivos.
* Se o link simbólico for apagado/movido, somente o link será apagado/movido, ou seja, a exclusão de um link simbólico não exclui o diretório ou arquivo original.
* A exclusão do arquivo ou diretório original não remove automaticamente nenhum link simbólico. Neste caso o link fica "quebrado", ou seja, não aponta para lugar algum.
* Ao mover-se o arquivo original, o link simbólico também fica "quebrado".
* Quando a referência do link simbólico for relativa, ao mover-se o link para outro lugar, perde-se a referência do conteúdo.

Caminho absoluto: é o caminho completo de um arquivo (diretório, arquivo regular, etc) desde o ponto de origem do sistema, isto é, o diretório raiz "/".
Caminho relativo: é o caminho que deve ser seguido na árvore de sistemas de arquivos em relação a um ponto referencial inicial.


* É identificado pela letra "l" e a sua configuração de permissões de acesso não é utilizada (aparecem sempre como "lrwxrwxrwx"). São as permissões do arquivo referenciado pelo link que na verdade realizam o controle de acesso.
* O comando chmod não muda as permissões de links simbólicos, as permissões devem ser mudadas no arquivo alvo do link.

Utilização dos links simbólicos

1) Os links simbólicos são utilizados nos scripts de inicialização do Linux, localizados em /etc/rcx.d (0 <= x <= 6). Os arquivos contidos neste diretório são na verdade links simbólicos para os arquivos verdadeiros em /etc/init.d. Dessa forma, se for necessário fazer alguma alteração nesses scripts, elas são feitas apenas nos arquivos em init.d e as mudanças terão efeito em todos os links em rcx.d. Ou seja, uma alteração apenas tem efeito em diversos locais, economizando tempo e evitando inconsistências.
Observação: <= significa menor ou igual

2) No Debian Releases, os nomes "testing" e "stable" são na verdade links simbólicos para os codinomes das versões atualmente em uso. Por exemplo, caso você deseje estar sempre atualizado, mas é uma pessoa cuidadosa e deseja ter sempre a última distribuição estável do Debian, modifique o arquivo /etc/apt/sources.list e coloque stable como versão. Assim que a nova versão for lançada, os links serão alterados passando a apontar para a nova versão e você terá seu sistema atualizado.

Hard links

É uma entrada de diretório que aponta para o inode do arquivo alvo, sendo assim, os dois arquivos serão os mesmos.

Características:

* Não é possível criar um hard link para um diretório. A exceção fica por conta das entradas de diretório especiais em um diretório para o próprio diretório e seu pai (. e ..), que tem hard links que mantém a contagem do número de subdiretórios.
* O hard link e o arquivo alvo precisam estar no mesmo sistema de arquivos, pois os hard links apontam para um inode, e os inodes são exclusivos apenas em um determinado sistema de arquivos.
* Se um arquivo tiver vários hard links, o arquivo será excluído apenas quando o último link que aponta para o inode for excluído, e a contagem de links for zerada.
Se o link simbólico for apagado/movido, somente o link será apagado/movido, ou seja, a exclusão de um link simbólico não exclui o diretório ou arquivo original.
* Hard links não ocupam espaço no sistema de arquivos.

Utilização dos hard links

1) Hard links podem ser úteis quando se deseja ter a segurança de que se o arquivo original for apagado o conteúdo continue acessível.
2) Criar cópias de arquivos comuns para usuários, sem revelar (diretamente) onde esse arquivo está instalado, além de promover economia de espaço.
3) Diminuir a quantidade de inodes no disco.
4) Acelerar o acesso ao arquivo.
5) Manter backup dos ponteiros dos arquivos.

Utilizando hard links para obter vídeos da Internet

Identificando links

Em muitos sistemas hoje, o comando ls tem o alias definido para ls --color=auto, que imprime tipos diferentes de objetos de sistema de arquivos em cores diferentes. Embora as cores possam ser convenientes para pessoas com boa visão que conseguem distingui-las, elas não são de muita utilidade para outros e certamente também não são de muita utilidade para shell scripts ou programas.

Nas informações fornecidas por uma listagem longa que usa o comando ls -l, a 2ª coluna da saída é uma contagem de links que mostra o número de hard links para esse arquivo. Se você excluir um arquivo que tenha uma contagem de link maior que 1, a contagem no inode será reduzida em 1, mas o arquivo não será excluído até a contagem chegar a zero (0). Todos os outros links físicos para o mesmo arquivo mostrarão uma contagem de link agora reduzida em 1.

Na 1ª coluna da saída, é possível ver que o primeiro caractere é um 'l' (L minúsculo) para links simbólicos. É possível também ver o destino do link exibido após os caracteres ->. Observe que as contagens de link na listagem de diretório não são atualizadas para links simbólicos. Excluir o link não afeta o arquivo alvo.

É possível usar a opção -i do comando ls para exibir números de inode para entradas de arquivo e diretório. Os objetos que tenham o mesmo inode, representam o mesmo objeto.

É possível usar o comando find para procurar links simbólicos usando a expressão -type l.

Veja mais sobre links aqui.

Localizando arquivos

Comando find

Vantagem: buscas mais completas e precisas.
Desvantagem: tempo necessário para pesquisa.

Comando locate

Vantagens: buscas instantâneas, pode retornar qualquer tipo de arquivo e diretório, não tem restrição em suas buscas, possibilidade de utilização de willcards em suas buscas.
Desvantagens: desatualização do banco de dados em poucos dias, necessidade de executar o comando updatedb (como root) afim de incluir as últimas modificações.

Veja nos links abaixo como você pode agendar a execução do updatdb para um determinado período:

Tarefas automáticas de manutenção do sistema
Usando cron e crontab para agendar tarefas

Shell

Exemplos de shell: bash, csh (sintaxe similar à liguagem C), ksh, dash, etc.

O dash é utilizado em algumas distribuições como Debian e Ubuntu para acelerar o processo de inicialização (boot) do sistema.

terça-feira, 17 de janeiro de 2012

[2012] Aula 7

Oi, a aula de hoje não começou com apresentação como de costume pois o Daniel se atrasou...então vamos logo dar início a aula cujo material se encontra disponível aqui.

Controle de Acesso

Por padrão, quando um novo usuário é criado e não especificar nenhum grupo, ele pertencerá ao grupo de mesmo nome do seu grupo primário (este comportamento é controlado pelo parâmetro USERGROUPS=yes do arquivo /etc/adduser.conf). Veja mais aqui.

Na representação das permissões na forma de mnemônicos, quando há um "-" no lugar da letra, significa que não há essa permissão, ou seja, significa que essa permissão não foi setada.

Ainda na representação das permissões na forma de mnemônicos, o primeiro caracter indica qual é o tipo do arquivo.
- = arquivo comum
d = diretório
c = arquivo especial de caracter
b = arquivo especial de bloco
l = link simbólico
p = named pipe ou FIFO
s = socket

Na representação das permissões em binário temos 4 grupos de 3 bits. O 1º grupo refere-se aos bits especiais (SUID, SGID, Sticky), o 2º grupo refere-se ao dono/proprietário do arquivo, o 3º grupo refere-se aos usuários que fazem parte do grupo do dono do arquivo e o 4º grupo refere-se a todos os usuários que não são os proprietários e nem fazem parte do grupo.

Com a permissão SUID setada, o usuário executa o arquivo ou acessa o diretório como se fosse o dono. Exemplo de aplicação: Para um usuário alterar sua senha ele chama o comando passwd. Esse comando precisa remover a senha antiga e inserir a senha nova no arquivo /etc/shadow. Porém, esse arquivo normalmente só pode ser alterado pelo root. Como fazer isso, se o passwd foi chamado pelo usuário comum? A resposta é ativar o bit SUID. Com esse bit ativado o programa passa a rodar com as permissões do usuário dono do arquivo, e não mais de quem o invocou.

Executando o comando ls -l /usr/bin/passwd temos:

-rwsr-xr-x 1 root root 34740 Fev 15 2011 /usr/bin/passwd

O mnemônico em vermelho corresponde ao bit SUID setado.

Exemplos de binários que geralmente possuem o bit SUID ligado: mount, ping

Com a permissão SGID setada, o usuário executa o arquivo ou acessa o diretório como se fosse membro do grupo ao qual pertence o arquivo/diretório. Exemplo: Se o diretório /bla tem o grupo g1 e tem o SGID habilitado, então todos os arquivos dentro do diretório /bla serão criados com o grupo g1.
Este é um importante atributo para uma equipe, assumindo que todos os arquivos compartilhados devem ter o mesmo grupo.
O bit Sticky era bastante utilizado para realizar otimizações de acesso a conteúdos, entretanto, a partir da série 2.6 do kernel do linux essa tarefa passou a ser realizada diretamente pelo kernel.

Mas então qual a utilidade do bit Sticky atualmente?
Em diretórios, impede que outros usuários removam arquivos dos quais não são donos. Isto é chamado de colocar o diretório em modo append-only. Um exemplo de diretório que se encaixa perfeitamente nesta condição é o /tmp, todos os usuários devem ter acesso para que seus programas possam criar os arquivos temporários lá, mas nenhum pode apagar arquivos dos outros.

Na representação das permissões na forma de mnemônicos, quando as letras s e/ou t aparecem em minúsculo significa que a permissão "x" está habilitada naquela classe. Quando aparecem em maiúsculo significa que a permissão "x" não está habilitada naquela classe.

rwxr-xr-T = 001111101100 (Binário) = 1754 (Octal)

Uma pequena prática:
* mkdir /tmp/dir - Cria o diretório /dir dentro do diretório /tmp (Permissão do diretório /dir: rwxr-xr-x)
* chmod o-r /tmp/dir - Retira para outros usuários a permissão de leitura do diretório /dir, ou seja, para outros usuários não é possível listar o conteúdo do diretório (Permissão do diretório /dir: rwxr-x--x)
* chmod o-x /tmp/dir - Retira para outros usuários a permissão de execução do diretório /dir, ou seja, para outros usuários não é possível acessar o diretório (Permissão do diretório /dir: rwxr-x---)
* chmod o+r /tmp/dir - Adiciona para outros usuários a permissão de leitura do diretório /dir (Permissão do diretório /dir: rwxr-xr--)

Verifique as permissões dos diretórios abaixo utilizando o comando stat:
/home rwxr-xr-x
/etc/passwd rw-r--r--
/bin/bash rwxr-xr-x
/tmp rwxrwxrwt

Quando novos arquivos são criados, eles são criados com as permissões definidas pela configuração do sistema (PAM - Pluggable Authentication Modules) ou do usuário (editando o arquivo /etc/profile ou ~/.profile).

A umask é um número octal de três algarismos que define a permissão inicial que os arquivos e diretórios receberão quando forem criados.

Digitando o comando umask sem parâmetros é retornado o valor de sua umask atual. A umask padrão no sistema Debian é a 022 .

No Linux, as permissões padrão para criação de arquivos e diretórios para todos os usuários são 666(-rw-rw-rw-) e 777 (drwxrwxrwx), respectivamente. Então, assumindo que o umask tenha o valor 022, qualquer novo arquivo será criado com a permissão 644 (-rw-r--r--) e qualquer novo diretório com a permissão 755 (drwxr-xr-x).

Decimal rwx
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

666
022 -
---
644 (octal) = 110 100 100 (binário) = -rw-r--r--

777
022 -
---
755 (octal) = 111 101 101 (binário) = drwxr-xr-x

Outros exemplos:

1) Assumindo que o umask tenha o valor 002, qualquer novo arquivo será criado com a permissão 664 (-rw-rw-r--).
666
002 -
---
664 (octal) = 110 110 100 (binário) = -rw-rw-r--

2) Assumindo que o umask tenha o valor 001, qualquer novo arquivo será criado com a permissão 665 (-rw-rw-r-x).
666
001 -
---
665 (octal) = 110 110 101 (binário) = -rw-rw-r-x

3) Assumindo que o umask tenha o valor 077, qualquer novo diretório será criado com a permissão 700 (drwx------).
777
077 -
---
700 (octal) = 111 000 000 (binário) = drwx------

Veja mais sobre permissões em Unix e Linux aqui.

Exercitando o uso do comando chmod na sintaxe com letras

1) Suponha que o arquivo file01 tenha sido criado no diretório /tmp com a seguinte permissão (-r--r--r--), mostre como fica a permissão após a execução de cada um dos comandos abaixo. Considere que os comandos abaixo estão sendo executados em seqüência.

a) chmod +w /tmp/file01 => Teoricamente, a permissão deveria ficar -rw-rw-rw-, mas a permissão ficou -rw-r--r--. Não sei explicar o motivo, pois tanto em aula como em fontes na internet é dito que caso não seja especificada a classe dos usuários para os quais se está alterando as permissões, o sistema usa a opção "a" (todos os usuários), entretanto não é isto que está acontecendo tanto para arquivos quantos para diretórios.
Quando souber o motivo atualizo a postagem :)
Por hora recomendo sempre especificar a classe dos usuários para os quais se está alterando as permissões.
Para que a permissão ficasse como deveria ser em teoria deveríamos executar o comando chmod a+w /tmp/file01
.

b) chmod o - w /tmp/file01 => -rw-rw-r--

c) chmod a = rw /tmp/file01 => -rw-rw-rw-

d) chmod a = r /tmp/file01 => -r--r--r--

e) chmod o = rw /tmp/file01 => -r--r--rw-

f) chmod u + s /tmp/file01 => -r-Sr--rw-
Note que o "S" que representa a permissão SUID (4ª posição) é maiúsculo, indicando que a permissão "x" (escrita) NÃO está habilitada.


g) chmod g + s /tmp/file01 => -r-Sr-Srw-
Note que o "S" que representa a permissão SGID (7ª posição) é maiúsculo, indicando que a permissão "x" (escrita) NÃO está habilitada.


h) chmod ugo + x /tmp/file01 => -r-sr-srwx
Note que os "s" que representam a permissão SUID (4ª posição) e SGID (7ª posição) são minúsculos, indicando que a permissão "x" (escrita) está habilitada.
O comando chmod a+x /tmp/file01 teria o mesmo efeito.


i) ug + x => Não afeta a permissão anterior.

j) O que aconteceria se o comando chmod u = X /tmp/file01 fosse aplicado em um arquivo cuja permissão é (-r--r--r--)? Observação: O "X" é maiúsculo.
A permissão ficaria ----r--r--. Nesse caso não é aplicada a permissão de execução ao dono do arquivo e apenas retirada a permissão de leitura. Se já tivesse permissão de execução para o grupo ou outros usuários, além de retirada a permissão para leitura, seria aplicada a permissão de execução. Se o "x" fosse minúsculo também seria retirada a permissão para leitura e aplicada a permissão de execução

AGORA VAMOS PRATICAR!!!!!

1) Criar novo usuário:

Execute o comando adduser < nome_do_usuario >
Em seguida deve-se digitar e confirmar uma senha. Os campos nome completo, número da sala, fone de trabalho, fone doméstico e outro podem ser deixados em branco...basta pressionar Enter. Por fim, confirma as informações digitando 'S'.


2) Solicite do sistema um novo console em modo texto combinando as teclas Ctrl + F2, por exemplo. Para voltar ao console anterior basta pressionar Ctrl + F1. Deve-se utilizar o Ctrl do lado direito e pode-se usar até o F6.

Pra quem está fazendo as práticas direitinho agora temos dois usuários não-root que representarei aqui por usuário 1 (U1) e usuário 2 (U2).

Faça o login de U1 e U2, um em cada console e execute os seguintes comandos:
Observação: Destacarei de vermelho ao lado dos diretórios e arquivos criados a permissão de cada um. E para cada bloco de comandos, de forma breve, explicarei o que ocorreu.

U1: mkdir teste (drwxr-xr-x)
U1: touch teste/arqtxt (-rw-r--r--)
U2: cd /home/< U1 >/teste
U2: ls -l

Note que o diretório teste tem permissão de leitura e execução para outros usuários, portanto U2 consegue acessar o diretório e listar o seu conteúdo. Além disso, o dono é U1 e o grupo U1, tanto para o arquivo quanto para o diretório.

U1: chmod o-r teste (drwxr-x--x)
U2: cd
U2: cd /home/< U1 >/teste
U2: ls -l

Note que foi retirada a permissão de leitura para o diretório teste, portanto U2 conseguirá acessar o diretório, entretanto não poderá listar seu conteúdo.

U1: chmod o+r, o-x teste (drwxr-xr--)
U2: cd
U2: cd /home/< U1 >/teste
U2: ls -l /home/< U1 >/teste

Nesse caso para U2 só é possível listar o conteúdo do diretório teste. Permissão negada para acessar o diretório utilizando o comando cd.

U1: chmod a+rwx teste (drwxrwxrwx)
U2: touch /home/< U1 >/teste/arq2txt (-rw-r--r--)
U2: ls -l /home/< U1 >/teste/arq2txt

Foi dada permissão de leitura, escrita e execução no diretório teste para todos. Sendo assim, torna-se possível que outro usuário crie e remova arquivos dentro do diretório teste.
O arquivo arq2txt criado por U2 tem como dono U2 e como grupo U2 também.


U1: chmod g+s teste (drwxrwsrwx)
U2: touch /home/< U1 >/teste/arq3txt (-rw-r--r--)
U2: ls -l /home/< U1 >/teste/arq3txt

Foi ativado o bit SGID. O arquivo arq3txt criado por U2 tem como dono U2 e como grupo U1.

U1: chown -R < U1 >.< U1 > teste

Permissão negada. Apenas o root tem permissão para executar o comando chown.
Então deveríamos fazer como root chown -R < U1 >.< U1 > /home/< U1 >/teste


Em tempo: Fiz uns testes e parece que os comandos chown e chgrp só funcionam com o root. Vou verificar se essa informação procede e depois atualizar aqui :)

E assim terminou os assuntos da aula de hoje!

Em seguida tivemos a apresentação de Daniel sobre o Projeto GNU e a FSF. Você pode ver os slides aqui.

sexta-feira, 13 de janeiro de 2012

[2012] Aula 5

Demorou mais chegou hein sexta-feira? :)

Hoje também teve apresentação...nem sabia o.O

A apresentação de hoje foi feita por Carlos e foi sobre UEFI e GPT. Achei muita boa a apresentação, muito clara. Vou deixar aqui os principais pontos abordados.

UEFI - Unified Extensibly Firmeware Interface
EFI - Intel/HP
Originalmente destinado ao Itanium (IA-64)

Benefícios
* Suporte a Device Drives
* Boot Loader integrado
* Shell
* Suporte a GPT

GPT - GUID Partition Table
Sistema baseado em chaves GUID (Globally Unique Identifier)

Organização
Quando se fala em MBR tem o conceito do disco rígido dividido em cilindro, setor e trilha. Em GPT tem-se o conceito do disco rígido dividido em blocos lógicos.

MBR x GPT

MBR:
* cabeçalho 512 bytes
* 4 partições primárias
* 2 TiB/partição

GPT:
* cabeçalho maior que 512 bytes
* 128 partições primárias
* mais de 2 TiB/partição
* redundância

Veja também:
UEFI
Guia de instalação de SO em discos GPT (Intel)

PRÓXIMA APRESENTAÇÃO: Daniel
Tema: Projeto Gnu e Free Software Foundation (FSF)
Data: 17/01

ASSUNTOS DA PROVA (prática + teórica):
* Instalação do Debian
* Hardware/Módulos do Kernel
* Sistema de Inicialização
* Disco/Particionamento/Filesystem

Vamos colocar a mão na massa? :D
O processo de particionamento realizado em aulas anteriores foi o mais simplista possível (automático), porém não é o mais utilizado no dia a dia. Nessa prática faremos o particionamento manual, além de praticar outras coisas que já vimos no decorrer do curso.

Criar outra máquina virtual com o nome Debian2
Veja como fazer acessando os slides da aula 1.
Instalar utilizando método de particionamento manual.
Adotar as seguintes configurações:
/boot (ext2) 100 MB
/ (ext3) 400 MB
/usr (ext3) 600 MB
/var (ext3) 600 MB
swap 300 MB

Note que temos 5 partições e no máximo podemos ter 4 partições primárias no disco. Então uma solução é criar 3 partições primárias e 2 lógicas.

Em seguida instalar o VIM pois o editor pode ser necessário para alterações em arquivos de configuração. Utilize o comando aptitude install vim

Adicionar outro disco utilizando o Virtual Box
Passo-a-passo: Desligar a máquina virtual --> Clica na máquina virtual na qual se deseja criar o disco --> Configurações --> Armazenamento --> Controladora SATA --> Adicionar disco rígido --> Criar novo disco --> VDI --> Next --> Dinamicamente alocado --> Next --> 1 GB --> Criar --> Ok

Criar duas partições
Para a criação de partições utilizar o cfdisk. As novas partições deverão ter as seguintes configurações, de forma que cada uma dela seja montada automaticamente no boot nos diretórios indicados:
* 1 GB (XFS) /home
* 500 MB (ext2) /tmp

Execute cfdisk /dev/sdb e crie as duas partições.

Para formatar com o sistema de arquivos XFS é necessário instalar o xfsprogs. Então faça aptitude install xfsprogs.

Em seguida formate as partições executando os comandos a seguir:
mkfs -t xfs /dev/sdb1
mkfs -t ext2 /dev/sdb2

Agora para que as partições sejam montadas automaticamente no boot nos diretórios indicados é necessário editar o aquivo /etc/fstab adicionando as linhas a seguir:

/dev/sdb1 /home xfs defaults 0 0
/dev/sdb2 /tmp ext2 defaults 0 0

Pronto!
Quem terminou tá liberado :P

quinta-feira, 12 de janeiro de 2012

[2012] Aula 4

Olá pessoas...
A aula de hoje começou com a apresentação de Rodrigo sobre NTP. Achei boa a apresentação :)
Faça download dos slides da apresentação aqui.
Irei colocar aqui os principais pontos abordados na apresentação.

NTP - Network Time Protocol
O NTP é um protocolo para sincronização dos relógios dos computadores baseado no UDP para sincronização de um conjunto de computadores em redes de dados com latência variável, permitindo manter o relógio de um computador com a hora sempre certa e com grande exatidão.

Importância
É importante do ponto de vista de segurança de redes que os relógios dos computadores estejam sincronizados. Investigações relacionadas a incidentes de segurança tornam-se impossíveis caso os servidores envolvidos e os diversos arquivos de log discordem entre si em relação às estampas de tempo dos eventos.
Para algumas aplicações exatidão da ordem de segundos pode ser suficiente. Para outras, é necessário manter os relógios com diferenças na ordem dos milisegundos entre si e em relação à hora certa. Por exemplo, a sincronização de servidores DNS é muito importante.

Tempo: formas de medição
* Sol;
* Rotação da Terra;
* Translação da Terra;
* Rotações dos elétrons;
* Cristais de quartzo (principal matéria prima do computador);

Propriedades do relógio
* Exatidão
* Monotonicidade
* Sincronização
* Sintonização

Funcionamento NTP
Os servidores NTP formam uma topologia hierárquica, dividida em camadas ou estratos numerados de 0 a 16. O estrato 0 representa a referência primária de tempo, que é geralmente um receptor do Sistema de Posicionamento Global (GPS) ou um relógio atômico. O estrato 16 indica que um determinado servidor está inoperante.
O estrato 0, ou relógio de referência, fornece o tempo correto para o estrato 1, que por sua vez fornece o tempo para o estrato 2 e assim por diante. O NTP é então, simultaneamente, servidor (fornece o tempo) e cliente (consulta o tempo), formando uma topologia em árvore.

Tipos de associações possíveis
* permanentes
* priorizáveis
* efêmeras ou transitórias
* cliente-servidor
* modo simétrico
* broadcast ou multicast

Veja mais aqui.

Em seguida foi dado início a aula utilizando os slides que estão aqui. Foi uma continuidade dos assuntos trabalhados na aula 3.

Sistema de arquivos
Única hierarquia de diretórios: / (raiz)

Rogério mandou fazermos o teste do comando mount na partição que criamos ontem, mas como ontem tínhamos formatado ela como uma partição swap, tivemos antes de formatá-la para uma partição com sistema de arquivos ext3 por exemplo, pois partições swap não podem ser montadas/desmontadas utilizando os comandos mount/umount e sim os comandos swapon/swapoff. Então fizemos o seguinte:

mkfs -t ext3 /dev/sdb1
mount /dev/sdb1 /mnt


O comando mount sem parâmetros mostra as partições montadas no sistema.

Por default as partições já são montadas no modo leitura e escrita.

Alguns comentários dentre as opções de montagem:
* async/sync: No modo sync as informações são gravadas imediatamente, já no modo async o sistema escolhe o melhor momento para realizar as gravações. O modo sync tem perda de desempenho quando comparado ao modo async, entretanto o risco de perda de dados é menor, propiciando maior segurança aos dados.
* auto/noauto: Refere-se à montagem durante o boot.
* dev/nodev: Refere-se à permissão para criação de dispositivos do tipo dev na partição. Aumenta segurança do sistema.
* exec/noexec: Refere-se à permissão para execução de binários na partição. Também aumenta a segurança do sistema.
* suid/nosuid: Refere-se à permissão da presença de arquivos com bit s. Arquivos que tenham o bit s ativado indicam que todos os que acessarem esse arquivo o estarão fazendo com os privilégios do proprietário do arquivo. Entenderemos isso melhor na aula de shell script.
* user/users: A opção user permite que apenas o usuário que montou o sistema de arquivos o desmonte. Já a opção users permite que qualquer usuário monte e desmonte o sistema de arquivos.

Qual a importância de desmontar?
Quando um dispositivo está montado no Linux, todas as informações vão sendo guardadas num buffer que o Linux espera ficar cheio para realizar a transferência para o disco. Assim, quando fazemos unmount dizemos pro Linux que não temos mais nada a acrescentar no disco e ele se obriga a realizar a transferência mesmo com o buffer parcialmente cheio.
Por exemplo, se você remover um pen drive sem desmontá-lo, poderá depois ver que alguns arquivos não foram copiados ou salvos, ou não por completo, causando erros.
Antigamente no linux, só era possível retirar um cd do driver após desmontar a unidade.

No Linux todos dispositivos são devidamente desmontados antes do desligamento.

Ao editar o nome do dispositivo no arquivo de configuração do sistema de arquivos do /etc/fstab, podem ocorrer problemas na detecção dos nomes dos dispositivos. Se você tiver mais de um controlador de discos SATA/SCSI ou IDE, eles são adicionados em ordem aleatória. Isso pode resultar em nomes como hdX e hdY fazendo rodízio a cada boot. O mesmo vale para sdX e sdY. Para solucionar esse problema é recomendado utilizar a nomeação persistente através da UUID.
Para visualizar a UUID de cada dispositivo você pode executar os seguintes comandos:
cat /etc/fstab
ou
ls -l /dev/disk/by-uuid (lista completa, mais recomendado)

Na configuração do sistema de arquivos em /etc/fstab, manter o 3º campo como auto, permite identificar automaticamente o sistema de arquivos.

O 5º campo da configuração do sistema de arquivos em /etc/fstab, corresponde à freqüência de dump, deixá-lo como 0 significa que não será realizado backup do sistema de arquivos, deixá-lo como 1 significa que será realizado backup do sistema de arquivos.

NFS é um exemplo de sistema de arquivos de rede.

Como fazer com que um dispositivo seja montado automaticamente no boot?
Para isso temos que editar o arquivo /etc/fstab. Façamos o seguinte:
vim /etc/fstab
Em seguida, coloca o cursor na última linha do arquivo, digita o e o vim entrará em modo de edição. No arquivo adicionamos a linha a seguir:
/dev/sdb1 /mnt ext2 defaults 0 0
Teclamos ESC e digitamos :x para sair e salvar. Feito isso, reiniciamos a máquina virtual e as novas configurações serão aplicadas. Para verificarmos os dispositivos montados usamos o comando mount.

/usr é um exemplo de diretório em que os dados são compartilháveis.

A imagem do kernel é um tipo de dado estático pois é alterada apenas quando o sistema é atualizado.

Sobre a árvore de diretórios
O Linux tem uma estrutura de diretórios peculiar, objeto de uma série de padronizações e similar à que pode ser encontrada em versões comerciais de Unix.
E quem garante que cada distribuição de Linux vá obedecer aos padrões existentes?
Ninguém. Mas os usuários esperam isso – desrespeitar os padrões significa que softwares desenvolvidos levando em conta os padrões existentes não irão funcionar na sua distribuição.
O desrespeito aos padrões pode levar a problemas sérios: uma versão relativamente antiga de uma distribuição de Linux bastante usada no Brasil gravava seu arquivo de definição de fusos horários dentro do diretório /usr. Quando algum administrador de sistemas experiente optava por gravar o diretório /usr em uma partição ou disco separado (respeitando o padrão), o arquivo deixava de estar disponível durante o boot. Resultado? Um erro difícil de identificar, que resultava em
problemas principalmente durante o horário de verão.
Assim, as distribuições que desejam participar do mercado corporativo tendem a aderir aos padrões, evitando causar problemas desnecessários aos administradores.
Da mesma forma, desenvolvedores de software devem respeitar e levar em conta os padrões existentes na estrutura de diretórios do sistema.
Fonte: Introdução ao Linux (Capítulo 9 - Quem garante?)

Bash é um shell.

Segundo a documentação oficial, o /root é um diretório opcional, mas é considerado recomendável por questões de segurança.

Nos sub-diretórios /sbin, /usr/sbin e /usr/local/sbin apenas o usuário root tem permissão de escrita e correspondem aos locais onde encontram-se os utilitários usados pela administração do sistema. Já nos sub-diretórios /bin, /usr/bin e /usr/local/bin qualquer usuário pode ter permissão de escrita. Isso é definido pela variável de ambiente denominada PATH. Mesmo alterando essa variável de ambiente, pode ser possível ter permissão de leitura, mas não de gravação.

Os sub-diretórios /usr e /usr/local possuem a mesma hierarquia.

Segundo a documentação oficial, os sub-diretórios /var/tmp e /tmp tem a mesma finalidade, porém após a inicialização do sistema, o sub-diretório /tmp tem seus arquivos apagados, ao passo que os arquivos do sub-diretório /var/tmp tem seus arquivos mantidos após a inicialização.

Não deu para realizar a prática por falta de tempo, fica para amanhã!!!

E assim terminou a aula 4 :)

quarta-feira, 11 de janeiro de 2012

[2012] Aula 3

Oi gente :)
Antes de começar a escrever sobre a aula de hoje vamos esclarecer algumas coisas:
1) Rodrigo realmente vai fazer a apresentação sobre NTP na quinta, ou seja, amanhã :D
2) Eu não sou totalmente doida \o/. Realmente teve uma apresentação hoje, mas o "palestrante" foi Ive.

AVISO IMPORTANTE: No dia 16/01 haverá avaliação com os assuntos dados nos dias 09/01 a 13/01.

Agora vamos começar!!!

A aula de hoje iniciou com a apresentação de Ive sobre virtualização. Achei que a apresentação teve pontos interessantes, no entanto algumas definições ficaram a desejar :/ (na minha opinião)
Vou fazer aqui um pequeno esquema com pontos abordados na apresentação e outros que julguei interessantes após realizar uma pesquisa na internet (não estou utilizando necessariamente as mesmas fontes utilizadas por Ive).

VIRTUALIZAÇÃO
A virtualização permite que em uma mesma máquina sejam executadas simultaneamente dois ou mais ambientes distintos e isolados. Antigamente o interesse na virtualização estava no fato de se permitir o uso de um mesmo sistema por vários usuários concomitantemente, mas atualmente, os principais interesses são a segurança, confiabilidade e disponibilidade, custo, adaptabilidade, balanceamento de carga e suporte a aplicações legadas.

Algumas definições
* Instruções privilegiadas x instruções não-privilegiadas
* Modos de operação do computador: modo usuário x modo supervisor
* Sistema Operacional Hospedeiro x Sistema Operacional Visitante
* Virtual Machine Monitor ou Hypervisor
* Virtualização x Emulação

Vantagens
Segurança, confiança e disponibilidade, redução de custos, adaptação às diferentes cargas de trabalho, balanceamento de carga e suporte às aplicações legadas.

Desvantagens
Segurança, gerenciamento e desempenho.

Limitações
O hardware pode se tornar o gargalo da virtualização, pois o processamento, a capacidade de armazenamento da memória virtual e o espaço em disco da máquina são compartilhados pelos ambientes virtuais.

Usos/Aplicações da virtualização
* Consolidação de servidores
* Virtualização da infra-estrutura de TI
* Laboratórios de ensino
* Desenvolvimento de softwares

Softwares de virtualização mais populares
* VMWare
* Xen
* Virtual Box
* etc

Podem ver mais em:
Virtualização: VMWare e Xen
Virtualização como alternativa para ambiente de servidores
Grupo Brasileiro de Usuários Xen
Virtualização: da teoria a soluções
Análise de comportamento de malwares utilizando máquinas virtuais

Em seguida foi dado início a aula utilizando os slides que estão aqui.

Particionamento
Por que particionar o disco rígido?
* Organização: manter separados sistemas operacionais, aplicações e dados. Dessa forma, podem-se instalar vários sistemas operacionais em partições diferentes, colocar os dados em uma partição separada para facilitar o backup e a instalação de novos sistemas operacionais.
* Otimização: recuperar o espaço perdido por clusters ineficientes, utilizando partições menores. Ter diversos sistemas de arquivos em partições diferentes.
* Segurança: separar dados das aplicações e do sistema operacional. Colocar dados sigilosos em partições que podem ser escondidas por utilitários.

O boot loader é o aplicativo que vai carregar o sistema operacional (GRUB, LILO). Nas máquinas virtuais que estamos usando no curso, o GRUB está sendo utilizado.

A partição extendida serve para contornar o problema de limitação do número de partições primárias.

Devido a limitação de tamanho máximo das partições a 2 TiB pelo MBR, foi criada a interface EFI, atualmente mantida por um consórcio de empresas (Intel, IBM, Apple, Microsoft, etc), a UEFI, cujo principal objetivo é substituir o BIOS. Nesse contexto, surge o conceito de partionamento GPT. O Linux já tem suporte a esta nova tecnologia.

Sempre que possível usar partições primárias para instalar sistemas operativos, a não ser que queira ter mais de 4 partições.

A partição extendida é um tipo especial de partição primária que não pode conter um sistema de arquivos. Nela residem as partições lógicas.

Como adicionar um disco utilizando o Virtual Box?
Passo-a-passo: Desligar a máquina virtual --> Clica na máquina virtual na qual se deseja criar o disco --> Configurações --> Armazenamento --> Controladora SATA --> Adicionar disco rígido --> Criar novo disco --> VDI --> Next --> Dinamicamente alocado --> Next --> 1 GB --> Criar --> Ok

Gerenciando partições
Usando o comando fdisk quando se quer utilizar valores default para o início e o fim da partição, pressiona-se Enter.

Usando o comando cfdisk quando criamos mais de uma partição deve-se gravar cada uma individualmente.

O parâmetro -z no comando cfdisk mostra como se as partições não existissem. Se gravarmos essa visualização, excluimos todas as partições que existirem.

Sistema de arquivos
ISO 9660 - sistema de arquivos para discos ópticos
ZFS - sistema de arquivos da Sun Mycrosystems incorporado no FreeBSD
ext3 - sistema de arquivos padrão do Linux

O parâmetro [-t fstype] no comando mkfs especifica o tipo de sistema de arquivos a ser construído, se não for especificado o sistema de arquivos ext2 é usado.

Habilitar partição swap: comando swapon

Desabilitar partição swap: comando swapoff

Como visualizar as partições swap que estão sendo utilizadas pelo sistema?
cat /proc/swaps
swapon -s


No comando du o parâmetro s exibe o espaço total utilizado sem considerar os sub-diretórios.

O comando du -h /* mostra o espaço utilizado por todos os diretórios do sistema.

Veja sobre curingas aqui.

terça-feira, 10 de janeiro de 2012

[2012] Aula 2

Vamos agora para a aula 2 :)
Nesta aula usamos o material que se encontra disponível aqui.

Aqui na postagem eu só vou tratar de coisas interessantes que foram explanadas em aula e não constam nos slides :)
Em vermelho virá o título do slide e abaixo os comentários que foram feitos acerca de algum assunto tratado no slide de mesmo título. Os comentários...digamos...soltos, vou colocar no final isolados com asteriscos (*). Isso será um padrão daqui pra frente :)

Sistema de arquivo /proc
O que é DMA? Essa quem fez Arquitetura de Computadores sabe!!! (lalala) São canais de acesso a memória sem intervenção do processador. No Linux, os canais de DMA em uso no sistema podem ser visualizados através do comando cat /proc/dma. Veja mais sobre o comando cat aqui.

Dispositivos USB
Apesar da maior parte dos dispositivos de armazenamento USB serem detectados poucos segundos após serem plugados na máquina, é recomendável que os profissionais que atuam nesta área estejam preparados para acessar esses dispositivos manualmente, quando as ferramentas de detecção automática falharem ou para o caso de se depararem com equipamentos mais antigos (servidores e máquinas limitadas, por exemplo) que não usufruem das facilidades dos novos sistemas.

Manipulando os módulos do Kernel
E o kernel? O que é afinal? Em poucas palavras, o kernel é a base do sistema operacional que controla o hardware e faz a interação entre os aplicativos e a máquina.

E os módulos? São partes do kernel que são carregadas somente quando solicitadas por algum dispositivo ou aplicativo e descarregadas da memória quando não são mais necessárias, evitando a construção de um kernel que ocupe grande parte da memória. Podem ser carregados automática ou manualmente.
É uma forma de estender o kernel sem precisar recompilá-lo. Podem ser carregados estaticamente.
Veja mais aqui.

Algumas vezes, um módulo depende de outro para realizar determinadas operações. Se o módulo B depende de A, este deve ser carregado antes de ser possível carregar B. O comando insmod carrega um módulo sem verificar as dependências correspondentes. Da mesma forma, o comando rmmod remove módulos carregados sem verificar as dependências correspondentes. Para facilitar o gerenciamento de dependências o kernel provê o comando modprobe. Ao tentar carregar o módulo ms-dos, o mais apropriado é utilizar o comando modprobe, pois o módulo ms-dos depende do módulo fat e a tentativa de uso do comando insmod acarretaria em erro.

Por default o comando modprobe funciona de maneira similar ao comando insmod, carregando módulos. Quando for necessário descarregar módulos utilizando o comando modprobre usa-se o parâmetro -r (modprobe -r).

Passagem de parâmetros para o kernel
No disco rígido existe um setor chamado trilha 0 e nele está gravado o MBR (Master Boot Record) que significa Registro de Inicialização Mestre, onde são armazenadas informações sobre como está dividido o disco (no sentido lógico). Ao ser localizada uma partição ativa, os softwares boot loader (GRUB, LILO) se encarregam de inicializar o sistema. O LILO está em desuso por apresentar desvantagens que foram corrigidas no GRUB. Veja mais sobre o processo de inicialização aqui.

Configuração dos módulos do kernel
Os sistemas Red Hat geralmente utilizam o arquivo /etc/modules.conf para configurar os módulos do kernel, ao passo que os sistemas Debian utilizam o arquivo /etc/modprobe.d/something.conf. No Debian ainda é possível barrar módulos do kernel (módulo que cause problemas com seu hardware ou conflito de drivers)usando a sintaxe .blaclist=yes fazendo com que o módulo seja barrado em /etc/modprobe.d/blacklist.local tanto durante a instalação quanto para o sistema instalado.

Para ativar o módulo xfs durante a inicilização do sistema fizemos uma prática utilizando o comando vim /etc/modules, teclamos Insert para habilitar o modo de edição, digitamos xfs, em seguida digitamos :x para sair e salvar. Para visualizar se foi habilitado o xfs durante a inicialização utilizamos o comando lsmod | grep xfs.

Runlevels
Init é o primeiro processo a ser inicializado após o boot.

Diretório /etc
/etc/rc2.d/k10apache --> significa que no runlevel 2 será chamado o processo apache passando o parâmetro stop
/etc/rc2.d/s10apache --> significa que no runlevel 2 será chamado o processo apache passando o parâmetro start
O número após a letra k ou s indica a ordem na qual o script é executado. Scripts de menor valor numérico são executados primeiro.

O carregamento paralelo de scripts é possível quando os processos não possuem dependência entre si.

O comando shutdown
Veja mais sobre o comando shutdown aqui.

***************
Para se ter acesso ao manual dos comandos podemos usar (e vamos usar) os comandos comando man e comando info.

Um comando legal também é o apropos que faz uma busca e mostra todos os comandos que contenham determinada descrição.

Para listar hardwares disponíveis na máquina podemos usar o comando lshw

O comando less faz a paginação de saídas muito extensas exibindo uma tela por vez. Para redirecionar a saída de outro comando para o less efetuar a paginação, use o "|" (pipe) conforme exemplo "ls -l | less".
Veja também redirecionamento e pipe.

O comando grep procura por um texto dentro de um arquivo(s) ou no dispositivo de entrada padrão. Também pode ser usado em conjunto com pipe "|" para redirecionar a ssaída de outro comando para o grep. Exemplo: lsmod | grep xfs

Ctrl+C --> Cancela o processo em execução
Ctrl+L --> Limpa a tela do terminal
Tab --> Auto-completa o caminho ou nome
Reboot --> Reiniciar o sistema
***************

Assim encerrou a aula 2, fizemos algumas práticas rápidas com os comandos aprendidos para fixar e só. Ahhhhh, Rogério no final sorteou um aluno aleatoriamente para fazer uma apresentação de 10 minutos sobre um tema. O sorteado foi Rodrigo (o que me ajudou na aula de ontem) e ele vai falar sobre NTP. A apresentação será na aula da quinta (detalhe que eu entendi que seria na aula de amanhã). Pois bem, amanhã fico sabendo quando é afinal :D

[2012] Aula 1

Olá...
Eu sei que não estou sendo assídua com minhas postagens. O curso começou ontem (09/01) e eu não postei nada, mas deixa eu contar o que houve: ontem peguei o buzu de 14h40min e levei 2h30min para realizar um trajeto que levo em média 1h. Resultado: não pude comparecer à primeira aula e agradeço isso a Via Bahia.
Ontem eu perdi a instalação do Debian Squeeze em uma máquina virtual utilizando o VirtualBox como solução de virtualização.
Você pode estar se perguntando o que eu fiz para correr atrás do prejuízo. Hoje (10/01) cheguei mais cedo na UFBA para que Rodrigo pudesse me ajudar a realizar a instalação do sistema já que o mesmo será utilizado durante a realização do curso.
Foi bastante simples, basta seguir os slides que foram disponibilizados. Veja os slides aqui.
Ao final da instalação do sistema ainda era necessário instalar o editor de textos VIM. Para isso bastava logar como usuário root e usar o comando aptitude install vim.
Feito isso conclui as atividades que foram realizadas na primeira aula. Só não pude trazer nesse primeiro post detalhes que possam ter sido discutidos na aula. Ahhhh, e levei uma falta básica.

Além disso, antes de começar efetivamente a aula do dia 10/01, aprendi umas coisinhas básicas que foram:

* Comando su
* Poderes de root

domingo, 8 de janeiro de 2012

Linux no pendrive

Essa semana navegando na rede encontrei esse site que tem tudo para quem quer instalar o Linux em um pendrive.

Clique aqui para visualizar o site

Guia Foca Linux

Esse material aqui também é interessante para quem quer aprender Linux. Estão disponíveis guias para níveis iniciante, intermediário e avançado. Vale a pena conferir.

Veja aqui o Guia Foca Linux

Configuração de gateway - não enviar ICMP redirects

Esse post aqui é o último que traz material que foi utilizado nos cursos passados do Graco. Os posts acima serão relacionados ao curso ministrado em 2012.1 e outras coisas que tiverem a ver com Linux e Administração de Redes que eu julgar interessante. Alguns materiais nem coloquei o link aqui pois estão off. Inclusive, em virtude disso, vou criar um disco virtual para armazenar alguns documentos.

Agora veja como configurar o gateway para não enviar ICMP redirect nos links abaixo:

Link 1

Link 2

Vídeo - Encaminhamento de pacotes e Roteamento

Faça o download do vídeo aqui

GNS3 - Simulador de Redes

Segue link para material elaborado por Humberto Galiza em 2009.2 para a disciplina Redes de Computadores I.

Veja slides aqui

"Bit s" e Shell-script

Como contornar o problema do 'bit s' ser desabilitado por script? [1]

1 - Criar um arquivo chamado mypasswd.c com o seguinte conteúdo:
#include

int main(){
setuid(0);
return(system("/usr/local/lib/mypasswd/mypasswd.sh"));
}
2 - O script gerado deverá ser chamado mypasswd.sh
3 - Na instalação (target install), deve-se copiar o script que vocês
fizeram para o /usr/local/lib/mypasswd/mypasswd.sh; compilar o código
C acima, gerando o binário mypasswd; copiar o binário mypasswd para o
/usr/local/bin/mypasswd, sentando as permissões corretas.
4 - na remoção, remover também o binário.

Para compilar: gcc -o mypasswd mypasswd.c

Mas vejam que dessa forma [com a presença do setuid()] alguns comandos como whoami podem não retornar o valor que vocês esperavam... Daí a dica é procurar nas
variáveis de ambiente.

[1] Veja aqui que o 'bit s' é desabilitado em scripts por motivo de segurança.

PS: eu não testei isso aqui!!

Curso de Introdução ao IPv6

Segue link para Curso de Introdução ao IPv6 em formato e-learning:

Clique aqui para visualizar o curso

Outras fontes:

Sítio IPv6 do PoP-BA

Curso sobre IPv6 do projeto 6DEPLOY

sábado, 7 de janeiro de 2012

Avaliação sobre Virtualização

A avaliação da aula sobre virtualização será realizada em duas etapas:

1. Uma pesquisa sobre Virtualização, procurando abordandar os
conceitos teóricos do assunto de forma independente de qualquer
ferramenta.

2. Uma atividade prática descrita a seguir. Os alunos terão 100 minutos para
configurar o cenário descrito e a atividade poderá ser feita em dupla.

* Configurar um servidor Xen (dom0) com duas interfaces de rede
(10.1.151.*/24 e 192.168.10.*/24);
* Criar e configurar uma VM no Xen (domU) com a seguinte configuração:
* HD de 4GB;
* 256MB de memória SWAP
* 256MB de memória RAM
* Uma interface de rede com IP (192.168.10.100/24) no modo route
* Distribuição Debian Lenny
* Instalar e configurar um dos serviços abordados no curso (LDAP,
Web, SSH, FTP, etc)
* Configurar regras no dom0 para:
* Fazer um NAT para o domU (permitindo que este acesse redes
externas, como a internet)
* Redirecionar todas as requisições destinadas à porta 1234
para o serviço instalado no domU

Observem que será avaliados conhecimentos anteriores, abordados no curso e algo além do ensino em sala. Assim recomendo que estudem algo relacionado à gerenciamento de interfaces de rede no Xen.

Mini-Teste

Mini Teste 02/05/09
Curso Extensão GRACO 2009.1


1. No linux, o kernel é o software central que detém e gerencia o seu sistema. Ele controla o hardware, a memória e o agendamento de processos, e fornece uma interface para os programas acessarem indiretamente os recursos de hardware.
Kernels monolí­ticos tem suporte interno para diversos dispositivos do sistema, assim dizemos que tais características estão built-in. Mas esse tipo de kernel não é muito flexível e pode ficar sobrecarregado com suporte a dispositivos que não estejam fisicamente instalados.
Dessa inflexibilidade e perda de performace, surgiram os kernels modulares, que permitem que drivers de dispositivos sejam inseridos/removidos no kernel em execução. A criação de um ví­nculo do módulo com o kernel é feita de forma dinâmica, assim que o módulo é carregado.
Tendo isso em mente, supondo-se que queiramos oferecer suporte a montagem de diretórios remoto fazendo uso do shfs e que tal módulo já tenha sido criado, o que é preciso para carregar tal módulo ao kernel? Como visualizar que o mesmo foi de fato carregado? Como garantir que o mesmo seja carregado depois de um reboot do sistema?

2. Supondo-se que se deseja deixar disponí­vel os diretórios pessoais de usuários num servidor de arquivos remoto, onde apenas o serviço de http (porta 80) e o de ssh (porta 22) estejam acessíveis, qual sistema de arquivos de rede deveria ser escolhido, que não necessitasse de nenhuma alteração no lado do servidor? Justifique sua resposta dando enfoque no quesito segurança.

3. O GRACO decidiu disponibilizar arquivos que seriam úteis nas salas 151, 152 e 154, para que sempre que algum aluno da Rede DCC se autenticasse numa estação cliente nessas salas, o diretório /home/$USER/pub/sala ficasse disponível para cada aluno (via /etc/fstab). E para facilitar no trabalho, nomes no seu DNS interno foram criados, seguindo o padrão:
s???pc??.dcc.ufba.br

s154pc05.dcc.ufba.br -> IP 10.1.154.105

Decidiu-se fazer isso utilizando o NFS (Network File System).
Como você editaria o /etc/exports no lado do servidor, para que todos tivessem acesso somente leitura (ro), acesso root não aceito (root_squash) e que cada sala pudesse exportar somente o seu diretório correspondente (noaccess)?

A estrutura de diretórios no lado do servidor é:
/pub
/pub/sala151
/pub/sala152
/pub/sala153

Mais materiais do CERT.br

Segue os links para mais alguns materiais do CERT.br

Manual de Práticas de Segurança para Administradores de Redes Internet - Checklist

Cartilha de Segurança para Internet

Curso de Redes

Material sobre a parte teórica do modelo TCP/IP, OSI, etc.

Clique aqui para visualizar o curso de redes

Mais atividades

Curso de Extensão 2009.1
Aula do dia 04-04-09


1. Seja a máquina com hostname cursograco e que ele esteja na rede 192.168.1.0/24 e tem endereço IP atribuí­do estaticamente em 192.168.1.10.
Mostre os passos necessários para que ele seja o servidor de nomes primário da zona universidade.bahia.br

O nome do arquivo de zona referente ao domí­nio supracitado deve ter o nome db.cursograco
Tal domÃínio deverá ter os campos do registro SOA preenchidos com os valores passados no final da questão.
Além disso, deverá ter também dois MX , mailp e mails, com pesos 0 e 10 e endereços IP 192.168.1.30 e 192.168.1.31, respectivamente.
O registro A para o domí­nio deverá apontar para 192.168.1.5 e 192.168.1.4 Um alias de www.universidade.bahia.br deverá apontar para www.bahia.org

ttl => 1 dia
refresh => 172800
retry => 900
expire => 1209600
min ttl => 3600

2. O que é preciso fazer sempre quando alterações são feitas em algum arquivo de zona? E o que é recomendado de se fazer, mas não é obrigatório?

3. Discorra sobre os seguintes tipos de registros DNS:
a. A
b. MX
c. HINFO
d. CNAME
e. NS
f. SOA
g. TXT

4. Explique o uso dos arquivos /etc/hosts, /etc/resolv.conf e /etc/nsswitch.conf para o mapeamento de nomes para endereços IP numa máquina rodando GNU/Linux

5. Quando se configura um Servidor DNS com privilégios de execução mí­nimo (o processo do servidor de nomes é iniciado por um usuário não root com privilégio limitados), qual o impacto dessa atitude na segurança do servidor?

Bind - Servidor de nomes

Segue links para algumas sugestões de leitura sobre o Bind, software mais usado para implementar um servidor de nomes.

Link 1
Link 2

Atividades

Vamos praticar um pouco?

1. Como vimos na última aula, no arquivo /etc/inittab, onde o processo init lê as configurações iniciais de carregamento do sistema, tem a seguinte sintaxe:

:Identifier:RunLevel:Action:Command

Pesquisar sobre as Actions disponíveis: respawn, once, sysinit, boot, bootwait, wait, off, ondemand, initdefault, powerfail, powerwait, ctrlaltdel

2. Tentar praticar o esquema de colocar um disco/partição no ar:

particionamento (tamanho, tipo e flag de inicialização); formatação (criação da infraestrutura do sistema de arquivos desejado) e montagem (momentânea e quando da inicialização do sistema).

Mais uma prática: Criar uma partição que possa ser usável em dois sistemas, em particular GNU/Linux e Windows. Tem um projeto bem legal e estável (veja aqui) que adiciona suporte à escrita para partições com NTFS no GNU/Linux. Tentem criar uma partição com aquele FS e montar e usar no GNU/Linux.

OBS: Atentem-se pra dizer explicitamente ao mount que você quer usar aquele módulo (com um -t ntfs-3g).

Algumas leituras: sistema de arquivos e processo de boot

Sistema de arquivos:

Link 1
Link 2
Link 3
Link 4

Processo de boot:

Link 5
Link 6
Link 7
Link 8

Apostila de Introdução ao Shell Script

Recomendada fortemente a leitura desta apostila principalmente para os que ainda estão se habituando ao Shell.

Clique aqui para visualizar a apostila

Materiais das aulas

No link abaixo é possível encontrar slides, exercícios e práticas que foram utilizados ao longo dos cursos ministrados em 2009.1, 2010.1 e 2011.1.

Clique aqui para visualizar o material

Temas de Seminário

Alguns temas que já foram apresentados em seminários:

Tema 1: Alta disponibilidade em servidores Linux (físicos e também usando pára-virtualização)

Motivação: A Alta Disponibilidade está ligada diretamente a nossa crescente dependência aos computadores. Com o avanço das atividades que contam com recursos computacionais, é cada vez maior o transtorno causado pela eventual falha destes sistemas. Desde o sistema bancário até supermercados, os computadores tem papel crítico. Mas não apenas em tais tipos de serviços, mas principalmente em empresas cuja maior funcionalidade é exatamente a oferta de algum serviço computacional, como e-business, notícias, sites web, etc. Veja um exemplo aqui

Objetivos: Compreender o que é e como funciona a alta disponibilidade de servidores usando GNU/Linux; Manusear as ferramentas livres
existentes para este tipo de serviço.

Tema 2: Segurança em sistemas GNU/Linux: Como atacar e se defender num ambiente hostil

Motivação:

Objetivos: Entender como usar "xploit's" para atacar um determinado bug; Entender a importância de manter seu sistema atualizado contra possíveis ataques; Entender a importância de uma boa política de segurança para a rede usando ferramentas como firewall's; Entender IPS e IDS; Aplicar boas práticas de segurança em redes Wireless;

Tema 3: Servidor de e-mails GNU/Linux: uma visão geral

Motivação:

Objetivos: Entender qual o papel de cada um dos serviços que compõe um
servidor de e-mail GNU/Linux; Entender táticas de defesa contra spams;
Entender como ocorre o relay de mensagens entre servidores de e-mail;

Tema 4: Construindo Super Computadores com GNU/Linux

Motivação:

Objetivos: Entender os principais tipos de cluster; Entender as diferenças entre os tipos de cluster; Entender o que são grids computacionais;

Tema 5: Entendendo o kernel do Linux

Motivação:

Objetivos: Entender o core do kernel linux. Compilar um kernel do "zero"; Aplicar patches no kernel; Entender como funciona a rede a nível de kernel.

Outras sugestões:

* GIT (software de controle de versão distribuído)
* Uso de virtualização para análise forense - detecção de intrusão
* Segurança em Redes P2P

RAID, LVM e Virtualização

Segue material que foi utilizado no curso em 2007.

Clique aqui para visualizar o material

Apostila sobre Administração de Sistemas GNU/Linux

Segue o link de uma ótima apostila de Administração de Sistemas GNU/Linux.

Clique aqui para visualizar a apostila

Lista de Exercícios 01 - Shell-script Básico

Uma lista de exercícios para fixar melhor a programação em Shell-script:

Exercício 1 − relacao.sh
Recebe dois números como parâmetro e mostra a relação entre eles. Exemplo:
prompt$ ./relacao.sh 3 5
3 é menor 5
prompt$ ./relacao.sh 5 3
5 é maior 3
prompt$ ./relacao.sh 5 5
5 é igual 5

Exercício 2 − zerador.sh
Recebe um número como parâmetro e o diminui até chegar a zero, mostrando na
tela cada passo, numa mesma linha. Exemplo:
prompt$ ./zerador.sh 5
543210
prompt$ ./zerador.sh 10
10 9 8 7 6 5 4 3 2 1 0

Exercício 3 − substring.sh
Recebe duas palavras como parâmetro e checa se a primeira palavra está contida
dentro da segunda. Só mostra mensagem informativa em caso de sucesso, do
contrário não mostra nada. Exemplo:
prompt$ ./substring.sh ana banana
ana está contida em banana
prompt$ ./substring.sh banana maria
prompt$ ./substring.sh banana
prompt$ ./substring.sh
prompt$
Dica: Pesquisa sobre o comando grep

Exercício 4 − juntatudo.sh
Mostra na tela "grudados" todos os parâmetros recebidos na linha de comando,
como uma única palavra. Exemplo:
prompt$ ./juntatudo.sh a b c d e f verde azul
abcdefverdeazul
Dica: Pesquise sobre o comando tr

Exercício 5 − users.sh
Do arquivo /etc/passwd, mostra o usuário e o nome completo de cada usuário do
sistema (campos 1 e 5) separados por um TAB. Exemplo:
prompt$ ./users.sh
ftp FTP User
nobody Nobody
named Domain name server
xfs X Font Server
mysql MySQL server
aurelio Aurelio Marinho Jargas
Dica: Pesquise sobre o comando cut

Exercício 6 − shells.sh
Do arquivo /etc/passwd, mostra todos os shells (último campo) que os usuários
usam. Não mostrar linhas repetidas. Exemplo:
prompt$ ./shells.sh
/bin/bash
/bin/false
/bin/sync
/sbin/halt
/sbin/shutdown
Dica: Pesquisa sobre o comando uniq

Exercício 7 − parametros.sh
Mostra na tela todos os parâmetros recebidos na linha de comando, contando−os.
Exemplo:
prompt$ ./parametros.sh a b c d e f
Parâmetro 1: a
Parâmetro 2: b
Parâmetro 3: c
Parâmetro 4: d
Parâmetro 5: e
Parâmetro 6: f
Dica: Pesquise sobre o comando shift

Manual de Segurança do CERT.br

Segue o link para o manual de Práticas de Segurança para Administradores de Redes Internet do Centro de Estudos, Resposta e Tratamento a Incidentes de Segurança (CERT.br).

Alta Disponibilidade em Correio Eletrônico

Artigo interessante sobre Alta Disponibilidade (HA) de servidores de e-mail.

Programação de sockets em C

Aqui vai o link de um material básico de programação de sockets em C. É bem explicado, um texto leve e considerado ideal pra quem tá começando.

Clique aqui para visualizar o material

Computação em cluster

Enquanto o curso não começa [início: 09/01/2012] resolvi pegar materiais e links interessantes que foram utilizados e recomendados nos cursos anteriores e colocar tudo aqui para facilitar a busca quando me for necessário :)

Lembrando que tudo foi retirado da lista de discussão do Curso oferecido pelo Graco, então os créditos ficam para as pessoas que fizeram as postagens lá. Estou apenas reunindo o material aqui.

Veja todas as postagens aqui

Primeiramente vai um artigo básico para quem quiser se aprofundar mais em clusters de computadores 'domésticos'.

Começando...

No final de 2011 recebi da Estudantes-comp o e-mail dos Gestores da Rede Acadêmica de Computação da UFBA informando sobre a oferta do curso de extensão em Administração de Sistemas GNU/Linux. Resolvi me inscrever. Fiquei durante 15 dias na ansiedade para saber se fui ou não selecionada, até que hoje recebi o e-mail com a confirmação de minha inscrição.
Sempre tive vontade de aprender mais sobre o sistema e agora que tenho essa oportunidade vou aproveitar ao máximo :)
Para registrar as minhas primeiras experiências, digamos...mais efetivas com o sistema, estou criando esse blog para deixar tudo registrado.