domingo, 22 de março de 2009

Entendendo Estrutura de Diretório GNU/Linux

Diretório é o local utilizado para armazenar conjuntos arquivos para melhor organização e localização. O diretório, como o arquivo, também é "Case Sensitive" (diretório /teste é completamente diferente do diretório /Teste).

Não podem existir dois arquivos com o mesmo nome em um diretório, ou um sub-diretório com um mesmo nome de um arquivo em um mesmo diretório.

Um diretório nos sistemas Linux/UNIX são especificados por uma "/" e não uma "\" como é feito no DOS.

Diretório Raíz
Este é o diretório principal do sistema. Dentro dele estão todos os diretórios do sistema. O diretório Raíz é representado por uma "/", assim se você digitar o comando cd / você estará acessando este diretório.

Nele estão localizados outros diretórios como o /bin, /sbin, /usr, /usr/local, /mnt, /tmp, /var, /home,sub-diretórios pois estão dentro do diretório "/". A estrutura de diretórios e sub-diretórios pode ser identificada da seguinte maneira: etc. Estes são chamados de

/

/bin

/sbin

/usr

/usr/local

/mnt

/tmp

/var

/home

A estrutura de diretórios também é chamada de Árvore de Diretórios porque é parecida com uma árvore de cabeça para baixo. Cada diretório do sistema tem seus respectivos arquivos que são armazenados conforme regras definidas pela FHS (FileSystem Hierarchy Standard - Hierarquia Padrão do Sistema de Arquivos) versão 2.0, definindo que tipo de arquivo deve ser armazenado em cada diretório.

Diretório atual
É o diretório em que nos encontramos no momento. Você pode digitar pwd para verificar qual é seu diretório atual.

O diretório atual também é identificado por um "." (ponto). O comando comando ls . pode ser usado para listar seus arquivos (é claro que isto é desnecessário porque se não digitar nenhum diretório, o comando ls listará o conteúdo do diretório atual).

Diretório home
Também chamado de diretório de usuário. Em sistemas GNU/Linux cada usuário (inclusive o root) possui seu próprio diretório onde poderá armazenar seus programas e arquivos pessoais.

Este diretório está localizado em /home/[login], neste caso se o seu login for "joao" o seu diretório home será /home/joao. O diretório home também é identificado por um ~(til), você pode digitar tanto o comando ls /home/joao como ls ~ para listar os arquivos de seu diretório home.

O diretório home do usuário root (na maioria das distribuições GNU/Linux) está localizado em /root.

Dependendo de sua configuração e do número de usuários em seu sistema, o diretório de usuário pode ter a seguinte forma: /home/[1letra_do_nome]/[login], neste caso se o seu login for "joao" o seu diretório home será /home/j/joao

Diretório Superior
O diretório superior (Upper Directory) é identificado por .. (2 pontos).

Caso estiver no diretório /usr/local e quiser listar os arquivos do diretório /usr você pode digitar, ls .. Este recurso também pode ser usado para copiar, mover arquivos/diretórios, etc.

Diretório Anterior
O diretório anterior é identificado por "-". É útil para retornar ao último diretório usado.

Se estive no diretório /usr/local e digitar cd /lib, você pode retornar facilmente para o diretório /usr/local usando cd -.
Estrutura básica de diretórios do Sistema Linux

O sistema GNU/Linux possui a seguinte estrutura básica de diretórios organizados segundo o FHS (Filesystem Hierarchy Standard):
/bin
Contém arquivos programas do sistema que são usados com frequência pelos usuários.
/boot
Contém arquivos necessários para a inicialização do sistema.
/cdrom
Ponto de montagem da unidade de CD-ROM.
/dev
Contém arquivos usados para acessar dispositivos (periféricos) existentes no computador.
/etc
Arquivos de configuração de seu computador local.
/floppy
Ponto de montagem de unidade de disquetes
/home
Diretórios contendo os arquivos dos usuários.
/lib
Bibliotecas compartilhadas pelos programas do sistema e módulos do kernel.
/lost+found
Local para a gravação de arquivos/diretórios recuperados pelo utilitário fsck.ext2. Cada partição possui seu próprio diretório lost+found.
/mnt
Ponto de montagem temporário.
/proc
Sistema de arquivos do kernel. Este diretório não existe em seu disco rígido, ele é colocado lá pelo kernel e usado por diversos programas que fazem sua leitura, verificam configurações do sistema ou modificar o funcionamento de dispositivos do sistema através da alteração em seus arquivos.
/root
Diretório do usuário root.
/sbin
Diretório de programas usados pelo superusuário (root) para administração e controle do funcionamento do sistema.
/tmp
Diretório para armazenamento de arquivos temporários criados por programas.
/usr
Contém maior parte de seus programas. Normalmente acessível somente como leitura.
/var
Contém maior parte dos arquivos que são gravados com frequência pelos programas do sistema, e-mails, spool de impressora, cache, etc.

Nomeando Arquivos e Diretórios
No GNU/Linux, os arquivos e diretórios pode ter o tamanho de até 255 letras. Você pode identifica-lo com uma extensão (um conjunto de letras separadas do nome do arquivo por um ".").

Os programas executáveis do GNU/Linux, ao contrário dos programas de DOS e Windows, não são executados a partir de extensões .exe, .com ou .bat. O GNU/Linux (como todos os sistemas POSIX) usa a permissão de execução de arquivo para identificar se um arquivo pode ou não ser executado.

No exemplo anterior, nosso trabalho de história pode ser identificado mais facilmente caso fosse gravado com o nome trabalho.text ou trabalho.txt. Também é permitido gravar o arquivo com o nome Trabalho de Historia.txt mas não é recomendado gravar nomes de arquivos e diretórios com espaços. Porque será necessário colocar o nome do arquivo entre "aspas" para acessa-lo (por exemplo, cat "Trabalho de Historia.txt"). Ao invés de usar espaços, prefira capitalizar o arquivo (usar letras maiúsculas e minúsculas para identifica-lo): TrabalhodeHistoria.txt.

Fonte: Guia Foca GNU/Linux

Abraços.

Video Tutorial: Monte sua Rede – Curso INFO

Aprenda a montar e configurar uma rede com um servidor e cinco computadores clientes para pequenos escritórios, acompanhando este vídeo tutorial da INFO que rodará dentro de seu browser.


Fonte: Info Online

segunda-feira, 9 de março de 2009

Usando IpTables

O IPTables é um firewall SPF (Statefull Packet Filter, ou ainda, Filtro de Pacote por Estado), é um dos mais poderosos tipos de firewall, pois ele segue regras dadas pelo Admin, e ainda verifica o estado (Ex: Vê se o pacote foi solicitado).

O IPTables possue três tabelas, a primeira é a "filter", ela é a tabela defaut, controla o tráfego de dados sem ocorrencia de NAT. Aceita as Chains INPUT, OUTOUT e FOWARD. A segunda é a NAT, ela é utilizado quando se tem NAT (Ex: Um pacote sai da rede interna pra interet), aceita as Chains PREROUTING, OUTPOST e POSTROUTING. A terceira, última, e menos usada é a Mangle, ela trabalha basicamente com marcação de pacotes QoS.

Podemos dividir os tipos de firewall basicamente em dois tipos (retirado do foca-linux):

1 - Firewall de Aplicação: Este tipo de firewall analisam o conteúdo do pacote para tomar suas decisões de filtragem. Servidores proxy, como o Squid, são um exemplo deste tipo de firewall.

2) Firewall de Pacotes: Este tipo de firewall toma as decisòes baseadas nos parametros dos pacotes como porta/endereço de origem/destino, estado da conexão e, e outros parametros do pacote. Exemplos são o próprio iptables, ipfw, ipfilter e o Pix.


O iptables trouxe o conceito de arquitetura modular, agora user-code módulos são possíveis. Os modulos são programados no nível do kernel mas podem ser carregados no espaço no usuario com o uso do comando modprobe.

Dois móulos são interessantes pois fazem uma inspeção em todo o payload do pacote e elevam a funcionalidade do iptables para além de uma simples inspeção do modelo TCP/IP: Modulo String e Módulo Pkttype.


1) Modulo String:
Disponivel no Iptables desde a versão 1.2.3 (antes era experimental). O uso deste módulo permite elevar o iptables para filtragem no layer 7 (aplicação) e torna a filtragem muito mais rápida (3 a 10 vezes) em relação a um proxy como squid.

## Bloqueando acesso a pacotes que contem “playboy” e gerando log
iptables -A FORWARD -m string –string “playboy” -j LOG — log-prefix ”
Acesso a Playboy”
iptables -A FORWARD -m string –string “playboy” -j DROP

## Limitando acesso a qualquer dados que contenham no payload “orkut” a 1/m


iptables -A FORWARD -m string –string “orkut” -m limit –limit 1/m -j ACCEPT

## Bloqueando o acesso a mp3 e logando
iptables -A FORWARD -m string –string “.mp3″ -j LOG –log-prefix


“Download: mp3″
iptables -A FORWARD -m string –string “.mp3″ -j DROP


2) Modulo lenght:
Este módulo permite limitar o tamanho dos pacotes que passam pelo firewall. Assim como os outros módulos podem ser usados em conjunto com os módulos mais conhecidos. Pode ser usado para limitar downloads, por exemplo.

## Bloqueia qualquer pacote UDP maior que 10kb
iptables -A FORWARD -p udp -m length –lentgh 10000 -j DROP


## Bloqueia qualquer pacote icmp vindo da eth0 entre 1 e 15kb
iptables -A FORWARD -p icmp -i eth0 -m lenght –length 1000:15000


Outro módulo que trabalha no nível de aplicação:
Modulo Owner: Permite um controle em cima do usuario que inicia a conexão, tomando como paramentros o UID, GID e PID.


Vamos a alguns exemplos práticos:

Vamos definir algumas regras que permitirão que uma rede acesse a internet de forma irrestrita porém segura, não permitindo tráfego vindo da internet.
Sendo a rede local: 192.168.1.0/24 conectada a placa eth0 e a conexão com a internet à placa eth1.

#Definindo a política padrão (-P)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP


#Permitindo acesso a serviços no servidor local
iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

#Permitindo a saida de pacotes da rede local para a internet
iptables -A FORWARD -s 192.168.1.0/24 -d 0.0.0.0/0 -j ACCEPT

#Habilitando o mascaramento da rede local na saida para a internet
iptables - t nat -A POSTROUTING -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQUERADE -o eth1


To Be Continuos...

domingo, 15 de fevereiro de 2009

Curso SELinux - Parte I

Olá este é a primeira parte do curso SELinux, que iremos apordar neste momento.
Este curso foi tirado do portal: http://comunidade.cdtc.org.br/


SELinux - Parte I
Introdução

O SELinux ("Security-Enhanced Linux") foi desenvolvido pela agência nacional de segurança dos EUA, a NSA (National Security Agency), e toma como base o princípio do mínimo privilégio ao extremo, restringindo até o usuário root.

SELinux foi implementado usando uma flexível e refinada arquitetura MAC ("Mandatory Access Control"). Desta forma, ele provê uma política de segurança sobre todos os processos e objetos do sistema. Suas decisões são baseadas em labels, e contém uma variedade de informações relevantes à segurança. A lógica da política de tomada de decisões é encapsulada dentro de um simples componente conhecido como servidor de segurança ("security server") com uma interface geral de segurança.

Ele foi integrado ao Kernel do Linux usando o "framework" LSM ("Linux Security Modules").

Inicialmente sua implementação utilizou os identificadores (IDs ou PSIDs) armazenados nos inodes livres do sistema de arquivos ext2. Tal representação numérica era mapeada pelo SELinux como um label do contexto de segurança. Porém, isso necessitaria de uma modificação em cada sistema de arquivo para suportar os PSIDs, o que não é uma solução escalável.

Assim, a próxima etapa da evolução do SELinux foi um módulo carregável no Kernel 2.4 que armazenava os PSIDs em um arquivo normal fazendo com que suportasse mais sistemas de arquivos.

Entretanto, essa solução não possibilitava a ideal perfomance do sistema.

Então o código do SELinux finalmente foi integrado ao kernel 2.6.x com total suporte por LSM e contendo atributos (xattrs) no sistema de arquivos ext3. E o SELinux foi alterado para usar xattrs como forma de armazenamento da informação do contexto de segurança.

Atualmente, vem sendo realizado um extenso trabalho com o objetivo de deixar o kernel pronto para o SELinux bem como seu subseqüente desenvolvimento em esforços conjuntos da NSA, Red Hat, IBM e a comunidade de desenvolvedores do SELinux.

O MAC mostra-se bem superior ao tradicional DAC ("Discretionary Access Control"), pois este possui diversas limitações.

Caso utilize somente o DAC, o dono de um arquivo/objeto provê um potencial risco de corrompê-lo. Um usuário pode expor arquivos ou diretórios à brechas de segurança utilizando incorretamente o comando chmod e uma não esperada propagação dos direitos de acesso. Um processo inicializado pelo usuário como um script CGI pode fazer tudo que quiser com quaisquer arquivos possuídos por este usuário. Por exemplo um Servidor HTTP pode realizar qualquer operação sobre arquivos que estão no grupo web ou softwares maliciosos podem conquistar nível root de acesso rodando como processo de root ou utilizando setuid ou setgid.

 

O DAC prevê apenas duas grandes categorias de usuários: Administradores e Não-administradores. Para alguns serviços e programas rodarem com nível elevado de privilégio as escolhas são poucas e tipicamente resolvidas dando completo acesso de administrador.

 

O MAC permite que sejam definidas permissões de como os processos irão interagir com outras partes do sistema como arquivos, devices, sockets, portas e outros processos (todos chamados de objetos para o SELinux).

 

Isso é feito através de uma política de segurança definida administrativamente sobre todos os processos e objetos. Estes processos e objetos são controlados pelo Kernel e a decisão de segurança é tomada com todas as informações disponíveis ao invés de utilizar somente a identidade do usuário. Com este modelo os processos podem garantir apenas permissões necessárias pela funcionalidade seguindo um princípio de poucos privilégios.

 

Sobre MAC, por exemplo, usuários que expõem seus dados utilizando chmod estão protegidos pelo fato de seus dados têm um tipo único associado com seu diretório "home" e outros processos não podem tocar nestes dados sem devida permissão dentro da política.


É muito importante ter habilidade de aprender termos técnicos e colocá-los em prática. Também é importante que já tenha uma idéia do que pretende fazer, como administrar configurações de serviços básicos, satisfazer o usuário /home/servidor via Apache HTTP, manipular o policiamento da aplicação web PHP, ou realizar um policiamento que permita que certa aplicação seja protegida pelo SELinux.

Para isso, é necessário ter:

  • Elevado conhecimento em Linux
  • Se pretende administrar serviços, manipular ou analisar policiamento, conhecimento em nível de administrador e a experiência necessária.
  • Conhecimento em segurança no sistema Linux/UNIX
  • Conhecimento sobre como o sistema Linux/UNIX opera em baixo-nível, tal como são realizadas as chamadas ao Kernel para operações (entrada, saída, ler, escrever, etc.)
  • Conhecimento de programação e da teoria do sistema que é usado no policiamento.
  • Familiaridade com a linguagem M4, o que ajudaria a entender algumas partes do policiamento SELinux
  • Privilégios de administrador no sistema
Algum local para examinar e testar o policiamento.Pode ser uma máquina de teste ou desenvolvimento, ou uma estação de trabalho.



Bem pessoal, por enquanto é só! Na segunda parte falaremos sobre sistemas de arquivos e instalação de pacotes adicionais.


Abs.


Jamildo