18 de outubro de 2009

Horário de Verão

Depois de artigos pesados... sobre firewall e rede em massa.Escrevi um artigo mais light que também é importante: O Horário de verão.

O Horário de verão começou a alguns instantes... Então como fazer seu pinguim ficar no horário certinho?? Pra máquina de casa isso não é tão importante...Porém pra servidores é essencial. Vamos começar!!!

É super importante saber que o seu horário advém de um servidor NTP (se por acaso, você não tenha idéia do que seja um servidor ntp, então clique aqui).

Você tem duas alternativas:
  • Você vai até o servidor NTP (maneira recursiva)
  • O NTP vem até a sua máquina local (maneira natural)


  1. Forma Recursiva
Antes, do sync veja o local ou o seu GMT em /etc/timezone
# ntpdate ip_ntp_server

### :: NTP BR :: ###
a.ntp.br 200.160.0.8
b.ntp.br 200.189.40.8
c.ntp.br 200.192.232.8

### :: NTPs da MICROSOFT :: ###
207.126.103.202
208.184.49.129
216.200.93.8

### :: NTP de UNIVERSIDADES :: ###

ntp.usp.br 143.107.151.117
ntp.ufsc.br 150.162.1.8
ntp.unicamp.br 143.106.2.3




2. Forma Natural


1. Verificar a existência do arquivo ‘/etc/localtime’. Se este arquivo existir verifique se ele é um link simbólico. Uma das formas de fazer esta verificação é executar o seguinte comando:


$ file /etc/localtime
localtime: timezone data


Não é recomendado possuir o arquivo /etc/localtime como link simbólico. Sistemas cujo diretório /usr é acessivel (não tiver sido montado, por exemplo) no momento de inicialização a máquina, os dados do arquivo localtime não serão lidos.


2. Verificar se existe algum arquivo no diretório /usr/share/zoneinfo/Brazil que contenha informações relativas a outros anos. Normalmente este arquivo tem extensão ZIC (.zic).


a) Se não existir um arquivo com tais dados então crie um novo (verao.2009.zic por exemplo) no diretório /usr/share/zoneinfo/Brazil/. Este arquivo deverá conter as seguintes linhas:


Rule Brazil 2009 only - Oct 18 00:00 1 S
Rule Brazil 2010 only - Feb 21 00:00 0 -
Zone Brazil/East -3:00 Brazil BR%sT


b) Se existir um arquivo com dados de outros anos basta inserir as linhas acima ao final do arquivo existente.


As duas primeiras linhas de configuração acima informam quando se inicia o horário de verão, quando termina e qual é a ação tomada. Lembre-se de que no início do horário de verão a hora local é acrescida em uma (1) hora.


A última linha informa qual arquivo será modificado pelo comando ‘zic’. No exemplo acima será o arquivo ‘East’ (dentro do diretório Brazil). Esta linha também informa qual o timezone original da região - no caso de São Paulo (East) temos UTC-3. Caso você esteja utilizando um timezone diferente do adotado em São Paulo (East) modifique estes parâmetros para o timezone de sua região:


#Fuso horario do Arquipelago de Fernando de Noronha:
Zone Brazil/DeNoronha -2:00 Brazil FN%sT

#Fuso horario dos estados a Leste
Zone Brazil/East -3:00 Brazil BR%sT

#Fuso horario dos estados a Oeste (AC, AM, RO, RR, MS, MT)
Zone Brazil/West -4:00 Brazil AM%sT


3. Uma vez feitos os devidos ajustes no arquivo ‘verao.2009.zic’ execute ocomando ‘zic’:


# zic verao.2009.zic


Neste caso em particular o comando atualizará o arquivo East.

4. Para verificar se as configurações corretas foram feitas execute o comando ‘zdump’, conforme as orientações abaixo (troque East pelo timezone de sua região):


# zdump -v Brazil/East


Você deverá obter uma saída como esta:

Brazil/East Sun Oct 19 02:59:59 2009 UTC = Sat Oct 17 23:59:59 2009 BRT isdst=0 gmtoff=-10800
Brazil/East Sun Oct 19 03:00:00 2009 UTC = Sun Oct 18 01:00:00 2009 BRST isdst=1 gmtoff=-7200
Brazil/East Sun Feb 16 01:59:59 2010 UTC = Sat Feb 20 23:59:59 2010 BRST isdst=1 gmtoff=-7200
Brazil/East Sun Feb 16 02:00:00 2010 UTC = Sat Feb 20 23:00:00 2010 BRT isdst=0 gmtoff=-10800


Note que em “Sat Oct 17 23:59:59 2009 BRT” o sistema ainda não está no horário de verão (indicacao ‘BRT’). No segundo seguinte as modificações do horário de verão entram em vigor, adiantando o localtime em uma hora: “Sun Oct 18 01:00:00 2009 BRST” (O horário mostrado ao usuário passará para 1 da manhã e não para meia-noite, mostrando o adiantamento do horário).


Em “Sat Feb 20 23:59:59 2010 BRST”, o horário de verão terminará no segundo seguinte, com o localtime sendo então atrasado em 1 hora: “Sat Feb 20 23:00:00 2010 BRT” (o horário mostrado ao usuário voltará para 23:00).


5. Por último, se o arquivo /etc/localtime não for um link para o arquivo /usr/share/zoneinfo/Brazil/East, deve-se copiar o arquivo East para /etc/localtime


$ cp East /etc/localtime



É isso pessoal! Moleza né?!

16 de outubro de 2009

Firewall e Iptables - conceitos

Por Lucas Sabino

No meu último post possui muitas informações sobre iptables, tabela mangle e etc. Muitas pessoas que viram o artigo me contactaram pedindo um artigo mais básico, mas simples. Para que, só após isso compreendessem o sentido do artigo do MTU. Então irei começar lá do início... Com alguns conceitos.

1. O que é um firewall?
2. O que é netfilter/iptables?
3. Termos: Statefull e Stateless
4. O Iptables
5. IPTABLES: Tables, Chains e sua arquitetura
6. Iptables e seus Estados de Conexão
7. Como funciona o Iptables
8. Bibliografia



1. O que é um firewall?
Firewall é o nome dado ao dispositivo de uma rede de computadores que tem por objetivo aplicar uma política de segurança a um determinado ponto de controle da rede. Sua função consiste em regular o tráfego de dados entre redes distintas e impedir a transmissão e/ou recepção de acessos nocivos ou não autorizados de uma rede para outra. Este conceito inclui os equipamentos de filtros de pacotes e de proxy de aplicações, comumente associados a redes TCP/IP.


2. O que é netfilter/iptables?
O netfilter é um módulo que fornece ao sistema operacional Linux as funções de firewall, NAT e log dos dados que trafegam por rede de computadores. Iptables é o nome da ferramenta do espaço do usuário que permite a criação de regras de firewall e NATs. Apesar de, tecnicamente, o iptables ser apenas uma ferramenta que controla o módulo netfilter, o nome "iptables" é frequentemente utilizado como referência ao conjunto completo de funcionalidades do netfilter.


3. Termos: Statefull e Stateless
A diferença entre Stateful e Stateless é básica: O firewall que é Stateful vai guardar o estado dos objetos/conexões, enquanto o firewall Stateless vai reconhecer a cada requisição como uma nova conexão.


4. O iptables
A partir do kernel do Linux 2.4 foi introduzido o firewall iptables em substituição ao ipchains que estava embutido nos kernels da série 2.2. O novo firewall tem como vantagem ser muito estável, confiável, permite muita flexibilidade na programação de regras pelo administrador do sistema, mais opções disponíveis ao administrador para controle do tráfego, controle independente do tráfego local, entre redes e de interfaces devido a nova organização das etapas de roteamento de pacotes.

O iptables é um firewall em nível de pacotes e funciona baseado nos endereços de origem e destino, nas portas de origem e destino, prioridades e outros. Ao receber os pacotes o iptables os submete a uma comparação com as regras estabelecidas pelo administrador para saber se um pacote tem ou não permissão para passar. Em firewalls mais restritivos o pacote ao ser bloqueado é registrado em um arquivo de log para posterior análise do administrador do sistema.

Outras funções do iptables podem ser usadas para modificar e monitorar o tráfego da rede, fazer NAT, redirecionamento de pacotes, marcação de pacotes, modificar a prioridade dos pacotes que chegam e saem do sistema, contagem de bytes, divisão de tráfego entre máquinas, criar proteções anti-spoofing, contra syn flood, DoS, o tráfego vindo de máquinas desconhecidas da rede pode ser bloqueado e registrado através do uso de regras simples.

As possibilidades oferecidas pelo iptables juntamente com as ferramentas UNIX maduras dá ao administrador do sistema possibilidades quase que infinitas na criação das regras, ficando a cargo de sua imaginação definir quais recursos utilizar. Para criar regras realmente efetivas precisamos ter informações como o que é necessário bloquear, quais interfaces o sistema possui, o que tem acesso garantido, quais serviços devem estar acessíveis para cada rede, e a partir daí começar a montar o firewall.


5. IPTABLES: Tables, Chains e sua arquitetura
O iptables é considerado um firewall de primeira geração, pois possui comportamentos diferente de seus antecessores ip-chains e ipfwadm, que funcionavam apenas como filtro de pacotes stateless. Funcionando como um filtro de pacotes statefull o iptables possui a capacidade de atuar sobre as camadas do protocolo TCP. Apesar da implementação do firewall stateless ser mais simples, ele apresenta uma configuração mais trabalhosa, além de ser menos seguro se comparado aos filtros baseados em estado de conexão (Statefull).

Para o filtro de pacotes stateless todo pacote recebido é considerado novo, independente do fluxo de informação em questão (requisição ou resposta). Já com o iptables é possível trabalhar com um filtro de pacotes statefull, através da definição de regras como: nova(NEW), estabelecida (ESTABLISHED), reincidente (RELATED) ou inválida (INVALID), que permitem identificar os “estados de conexão”.

Outra característica do iptables é a modularização o que permite adicionar novas funcionalidades de maneira extremamente simples, ficando assim, a cargo do administrador decidir que módulos atendem melhor suas necessidades.

O iptables possui uma organização baseada em três tipos de tabelas (filter, nat e mangle), e cada tabela possui suas respectivas chains (prerouting, postrouting, input, forward, output) de acordo com a sua funcionalidade. Nesse caso podemos classificar chain como um conjunto de regras com objetivos semelhantes. Para melhor entendimento temos:

• A chain INPUT é responsável por definir as regras que farão a filtragem de pacotes cujo endereço de destino é o firewall.

• A chain FORWARD é responsável por comportar as regras que farão a filtragem dos pacotes que passarão pelo firewall, ou seja, que possuem como endereço de destino algum host fora da rede interna.

• A chain OUTPUT fica responsável por estabelecer as regras para a filtragem dos pacotes que são originados pelo próprio firewall.

• A chain PREROUTING é responsável por definir regras específicas de roteamento antes que o pacote seja enviado para a chain INPUT ou FORWARD, podendo realizar algum redirecionamento de conexão (através do alvo DNAT) ou de porta (através do REDIRECT).

• A chain POSTROUTING fica responsável por regras específica de roteamento após o pacote ter passado pelas chains PREROUTING, INPUT ou FORWARD ou OUTPUT, podendo realizar algum tipo de filtro ou troca de endereços IPs de origem, através do alvo SNAT ou MASQUERADE.

As chains são organizadas por tabelas, ou seja, cada tabela possui um conjunto de chains variando de acordo com a sua funcionalidade, para melhor entendimento temos:

• A tabela filter define as principais regras de permissões de acessos (filtros) do firewall, e comporta as chains INPUT, FORWARD e OUTPUT.

• A tabela nat é responsável pela implementação do NAT, e através dela podemos realizar redirecionamento de conexões e acessos compartilhados. A tabela nat comporta as chains PREROUTING e POSTROUTING.

• A tabela mangle é utilizada para aplicar regras de acesso a qualquer pacote recebido pelo firewall, podendo também marcar pacotes para realização de balanceamento de carga, além de muitas outras possibilidades. A tabela mangle nas versões de kernel mais atuais comporta todas as chains (PREROUTING, INPUT, OUTPUT, FORWARD e POSTROUTING).

- A tabela raw - Essa tabela é usada principalmente para a configuração de isenções de monitoramento de conexão, em combinação com o NOTRACK. Ele registra no netfilter hooks com maior prioridade e é assim chamado antes ip_conntrack, ou qualquer outro IP tables. As suas chains são as seguintes: PREROUTING (para pacotes que chegam através de qualquer interface de rede) e OUTPUT (para pacotes gerados por processos locais).


6. Iptables e seus Estados de Conexão
O iptables inclui um módulo que permite aos administradores inspecionar e restringir conexões a serviços disponíveis numa rede interna, usando um método chamado registro de conexão (connection tracking). O registro de conexão armazena as conexões numa tabela, que permite aos administradores permitir ou negar acesso baseado nos seguintes estados de conexão:


/NEW (nova) — Um pacote requisitando uma nova conexão, como um pedido HTTP.

/ESTABLISHED (estabelecida) — Um pacote que é parte de uma conexão existente.

/RELATED (relacionado) — Um pacote solicitando uma nova conexão, mas que é parte de uma conexão existente, como conexões FTP passivas, nas quais a porta de conexão é 20, mas a porta de transferência pode ser qualquer uma (de 1024 para cima) não usada.

/INVALID (inválido) — Um pacote que não faz parte de nenhuma das conexões da tabela de registro das conexões.

Você pode usar a funcionalidade de estado do registro de conexões do iptables com qualquer protocolo de rede, mesmo que o próprio protocolo seja sem estado/'stateless' (como o UDP).


7. Como funciona o IPTABLES
Com o passar do tempo e a evolução dos ataques o filtro de pacotes estático (static packet filtering) passou a não ser tão eficiente no confronto às novas modalidades de ataques. Para resolver esse problema o filtro de pacote estático teve que passar por uma reformulação, dando origem a um novo conceito em filtragem de pacotes. Conhecido como filtro de pacotes dinâmico (dynamic packet filtering) ou filtro de inspeção de estados (stateful inspection), o novo firewall toma decisões de filtragem baseado nas informações dos pacotes de dados e da sua tabela de estados, além de levar em consideração todos os dados do pacote, e não apenas o cabeçalho.
O IPTABLES por ser considerado um filtro de pacotes dinâmico, incorpora todas as características citadas acima, e funciona da seguinte maneira:



Passo 1: No cenário ilustrado acima quando um usuário deseja iniciar uma conexão ele envia um pacote SYN para o firewall;

Passo 2: o firewall ao receber o pacote SYN o submete à tabela de regras definida pelo administrador da rede;

Passo 3: se o pacote não passar por uma das regras ele é descartado e a conexão é rejeitada;

Passo 4: no caso do pacote passar sem problemas por todas as regras, a sessão é cadastrada na tabela de estados do firewall que se encontra na memória do kernel;

Passo 5: após o cadastro na tabela de estados o pacote é enviado para o destino. A partir do momento que a sessão está cadastrada os próximos pacotes são submetidos diretamente à tabela de estados, e se fizerem parte de alguma sessão da tabela são liberados, senão são descartados.




8. Bibliografia
- JUCÁ, Humberto L. Técnicas Avançadas de Conectividade e Firewall em GNU/LINUX. 1. Ed. Rio de Janeiro: Brasport, 2005.

- SILVA, Gleydson Mazioli. Guia Foca GNU/Linux. Versão 5.60. Espírito Santo: Vitória, 2007.

- NAKAMURA, Emilio Tissato.(2000). Um Modelo de Segurança de Redes para Ambientes Cooperativos. Dissertação (mestrado) – Unicamp, 2000.


http://pt.wikipedia.org/wiki/Netfilter
http://netfilter.org
http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-pt_br-4/s1-firewall-state.html
http://under-linux.org/f46832-estado-de-conexoes
http://pt.wikipedia.org/wiki/Firewall
http://en.wikipedia.org/wiki/Stateful_firewall
http://www.akadia.com/services/pppoe_iptables.html

man pages linux iptables




Bom, é isso pessoal! Acho que o basicão está aí
flw!

11 de outubro de 2009

O Problema do MTU do PPPoE

Por Lucas Sabino


Caros leitores, se você nunca ficou sabendo de tal coisa é necessário ler e aprender. Eu não tinha a mínima idéia (ideia para quem já está seguindo à risca a nova língua portuguesa) que isso existia. Mas, existe. Meu chefe (meus dois chefes) mandaram eu fazer um monte de firewall em um monte de servidores pelo Brasil a fora (esse a fora foi exagero, é só Brasil mesmo) (devo mais essa pro SSH, imagina eu indo pro Acre, Curitiba ou sei lá mais onde!!??). Acho que são uns 15 firewall. Na realidade não preciso fazer propriamente dito, preciso traduzir do modelo FERM (For Easy Rule Making) para o modelo Iptables. Bom esse ferm até que em bem mais fácil. Você configura um firewall em 20 linhas.

Enquanto no iptables você faria isso numas 50. Mas, ainda sim, sou mais o grande IPTABLES. Me deparei com a seguinte linha no conf fo FERM: "table mangle { chain FORWARD { interface $LAN_IF proto tcp tcp-flags (SYN RST) SYN TCPMSS clamp-mss-to-pmtu;" Aí eu falei, fudeu!! E agora??? que bagaça é essa???? mangle blz é table mas TCPMSS, mss pmtu mtu??? que que é isso? Bom, vamos ao que interessa, a introdução já foi feita! O PROBLEMA DO EMPACOTAMENTO DA PPPoE A fonte desse texto eu traduzi do link a seguir --> http://www.akadia.com/services/pppoe_iptables.html. Quem quiser poderá ler em sua fonte original em inglês. Quem não quiser leia a tradução aqui mesmo.  


Alguns termos devem estar na ponta da língua: MTU PPP PPPoE.  

MTU
Em redes de computadores, MTU significa Unidade Máxima de Transmissão, e refere-se ao tamanho do maior datagrama que uma camada de um protocolo de comunicação pode transmitir. O protocolo IP permite a fragmentação de pacotes, possibilitando que um datagrama seja dividido em pedaços.

PPP
O protocolo ponto-a-ponto (point-to-point protocol, em inglês), também conhecido como PPP, foi desenvolvido e padronizado através da RFC 1661(1993) com o objetivo de transportar todo o tráfego entre 2 dispositivos de rede através de uma conexão física única. Na prática, a interface PPP é implementada através de conexões físicas do tipo RS-232 ou modens. Atualmente é possível usar conexões PPP até sobre Ethernet (PPPoE). Em suma, é a conexão discada slowmotion que todo mundo conhece só pelo barulinho agradável.

PPPoE
PPPoE (Point-to-Point Protocol over Ethernet) é um protocolo para conexão de usuários em uma rede Ethernet a Internet. Seu uso é típico nas conexões de um ou múltiplos usuários em uma rede LAN à Internet através de uma linha DSL, de um dispositivo wireless (sem fio) ou de um modem de cabo broadband comum. O protocolo PPPoE deriva do protocolo PPP. O PPPoE estabelece a sessão e realiza a autenticação com o provedor de acesso a Internet. Em suma, é o Speedy (SP) ou Velox (RJ, MG, nordeste, aonde a Oi é operadora padrão).


Com esses termos na ponta da língua, vamos ao texto: O PROBLEMA MTU

Uma interface Ethernet pode ter um pacote que tem no máximo 1518 bytes. 14 bytes desses são usados pelo cabeçalho, e 4 para uma seqüência de pacotes de checagem. Ou seja, temos ainda 1500 bytes a serem usados. 1500 é o padrão para conexões PPPoE.

Esse é o tamanho que o pacote PPPoE possui quando a interface não fragmenta ele. A conexão PPPoE adiciona outros 6 bytes a essa perda, além do protocolo PPP consumir 2 bytes. Assim, nosso datagrama possui 1492 bytes. O MTU da conexão PPPoE é então 1492 bytes.

Quando uma conexão TCP é inicializada, cada lado dos agentes/clientes do TCP pode ter o seu próprio tamanho de fragmentação do seu pacote (MSS - Maximum Segment Size). O TCP é respnsável por ouvir/conversar com esses fragmentos, enquanto o MSS determina o tamanho máximo para que ele seja aceito. Por padrão, o MSS é escolhido como o MTU a partir de uma interface de saída menos usual do TCP e cabeçalhos IP (40 bytes), que resulta num MSS de 1460 bytes para a interface de Ethernet.

O TCP não quer fragmentação, quanto menos pra ele melhor! Então, ele usa o MSS para não causar fragmentações a mais na sua interfae de saída. Eventualmente, eles podem trabalhar como MTU causando uma fragmentação nos seus pacotes. O TCP descobre o caminho MTU. No caminho da descoberta do MTU, uma pilha TCP define um especial ponto de "não fragmente" (DF) em datagramas IP. Roteadores que não pode encaminhar o datagrama sem fragmentá-lo é suposto largá-lo e enviar um ICMP Fragmentation "necessário" datagrama ao host de origem.

Nesse estágio, os hosts de origem tentam um valor baixo para MTU. Eventualmente, muitos roteadores são "anti-sociais" e não geram a fragmentação dos datagramas como foi mandado. Eles são rebeldes! (rs). Muitos Firewall são igualmente anti-sociais e bloqueiam todos os pacotes ICMP.

Agora vamos considerar uma estação cliente conectada de uma Ethernet LAN até um gateway PPPoE. O cliente abre, depois de conectado, uma conexão para com um servidor web. Ele sugere um MSS de 1460 bytes porque seu MTU é 1500. O servidor web possui também uma interface Ethernet e sugere um MSS de 1460. A máquina cliente então pede a página web. Essa requisição é tipicamente pequena e aproxima o servidor web. O servidor responde com muitos fragmentos TCP, a maioria sendo do tamanho 1460 bytes.

O tamanho máximo de fragmentação do pacote é 1500 bytes no datagrama IP, porém o pacote é segmentado em menos bytes por eles. E daí vai para o provedor DSL que não manda ICMP para o servidor web.

A internet silencia o pacote, ele é dropado (rejeitado, apagado). O cliente web fica esperando pelos dados, e o servidor web transmite os dados finalmente, ou a conexão é fechada pelo usuário.

Uma maneira de contornar isso é criar um outro MSS para definir a rota padrão em todos os hosts LAN atrás do gateway PPPoE. Isso é chato, pois requer mudanças em cada host. Em vez disso, RP-PPPoE "em escuta" sobre a negociação MSS e modifica a MSS se for demasiado grande. Ajustar o MSS é um hack. Ela quebra o conceito de transporte da camada ser final-para-final (client-server). Não vai funcionar com o IPSec, IPSec, porque não vai deixar você danos pacotes IP (eles não conseguirão autenticar.) No entanto, é uma solução bastante eficaz para um problema , e é usado por padrão no RP-PPPoE."

- Mas, ok ok ok... Mas, Sabino você não disse como resolve no Iptables!

- Calma Pequeno gafanhoto... Espere um pouco...



Agora! Vamos à solução no Iptables:

iptables -t filter -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

ou

iptables -t nat -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu TCPMSS --clamp-mss-to-pmtu -o ppp0

ou

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -o eth1 -j TCPMSS --set-mss 1472
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -o eth1 -j TCPMSS --clamp-mss-to-pmtu
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o eth1 -j TCPMSS --set-mss 1472
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o eth1 -j TCPMSS --clamp-mss-to-pmtu


Vai depender do que você quer fazer e como você quer fazer. Depende da sua tabela, se é filter | nat | mangle.

Espero ter ajudado! flw!

2 de outubro de 2009

Processos

Características:
­ Proprietário do processo;
­ Estado do processo (em espera, em execução, etc);
­ Prioridade de execução;
­ Recursos de memória.


Atributos de um processo
­ PID (identificação do processo)
­ PPID (identificação do processo pai)
­ UID (identificação do usuário que criou o processo)
­ GID (identificação do grupo ao qual pertence o processo)


Estado de processos
Um processo pode passar por vários estados. Quando um processo é criado, isso não significa que ele será imediatamente executado. Alguns processos podem ser temporariamente parados para que o processador possa executar um processo com maior prioridade.

O Linux trabalha com quatro tipos de estados:

/Executável (running): o processo pode ser executado imediatamente;

/Dormente (waiting): o processo precisa aguardar alguma coisa para ser
executado. Só depois dessa "coisa" acontecer é que ele passa para o estado
executável;

/Zumbi (zombie): o processo é considerado "morto", mas, por alguma razão,
ainda existe;

/Parado (stopped): o processo está "congelado", ou seja, não pode ser
executado.



Classificação de processos quanto a execução

/Foreground (primeiro plano): são inicializados no terminal de comandos, podem interagir com os usuários e exibem sua execução na tela. A desvantagem
desse tipo de processo é que ele prende o prompt e isso impede a execução de novos processos nesse terminal.

/Background (segundo plano): são inicializados no terminal de comandos, NÃO podem interagir com os usuários e NÃO exibem sua execução na tela. A vantagem desse tipo de processo é que ele NÃO prende o prompt e isso NÃO impede a execução de um novo processo nesse terminal.

/Interativo: são inicializados a partir de um terminal do usuário e são controlados por ele, usamos os comandos CTRL + Z, CTRL + X, fg, bg e jobs para trabalhar com esse tipo de processo.

/Lote (batch): são processo controlados pelos comandos at, batch e cron.




Gerenciando os Processos do seu Servidor


\ps
O comando ps exibe todos os processos sendo executados no servidor.

# ps ­e => exibe todos os processos em execução com seus respectivos PID.
# ps ­t tty[n] => exibe todos os processos em execução no referido terminal.
# ps ­u login_name => exibe todos os processos em execução pelo referido usuário.
# ps ­f => exibe informação completa dos processos rodando.

# ps aux
É opção mais usada para verificar processos.
a ­ mostra todos os processos existentes;
u ­ exibe o nome do usuário que iniciou determinado processo e a hora em que isso ocorreu;
x ­ exibe os processos que não estão associados a terminais;

Campo Conteúdo
USER Nome do usuário do proprietário do processo.
PID ID (identificador) do processo.
%CPU Porcentagem de recursos de CPU que este processo usa.
%MEM Porcentagem de memória real que este processo usa.
VSZ Tamanho virtual do processo.
RSS Resident Set Size (número de páginas na memória)
TTY ID de terminal (? ­ Não depende de terminal)
STAT Estado do processo. (R, S, Z, D, T )
START Horário em que o processo foi iniciado
TIME Tempo de CPU que o processo consumiu
COMMAND Nome do comando e argumentos
STAT ­ indica o estado atual do processo, sendo representado por uma letra:
R ­ executável;
D ­ em espera no disco;
S ­ Suspenso;
T ­ interrompido;
Z ­ Zumbi.
W ­ processo paginado em disco;
< ­ processo com prioridade maior que o convencional;
N ­ processo com prioridade menor que o convencional;
L ­ processo com alguns recursos bloqueados no kernel.



\pstree
O comando pstree é usado para visualizar a árvore de processos.
# pstree



\top
O comando top é um monitor do sistema que mostra a atividade do processador em tempo real. Exibindo uma lista das tarefas no sistema que usam com mais intensidade a CPU e fornecendo uma interface interativa para manipulação dos processos.

Opções do Top
# top d [tempo] – Atualiza a tela após o tempo determinado
s – Diz ao top para ser executado em modo seguro
i – Inicia o top ignorando o tempo de processos zumbis
c – Mostra a linha de comando ao invés do nome do programa



\jobs
O comando jobs lista os processos em execução pelo shell que estão em background. Veja a sintaxe:
# jobs ­l
[2]­ 1245 Running asmixer &
[3]+ 1333 Running openoffice &



\fg
Permite fazer um programa rodando em segundo plano ou parado, rodar em primeiro plano. Você deve usar o comando jobs para pegar o número do processo
rodando em segundo plano ou interrompida, este número será passado ao comando fg para ativá­lo em primeiro plano.
Exemplos:
# jobs ­l
[2]­1245 Running asmixer &
# fg 2
asmixer



\bg
Permite fazer um programa rodando em primeiro plano ou parado, rodar em segundo plano. Para fazer um programa em primeiro plano rodar em segundo, devemos primeiro interromper a execução do comando com CTRL+Z; será mostrado o número da tarefa interrompida. Use este número com o bg para iniciar a execução em segundo plano.

Exemplos:
# fg 2
asmixer
Interropendo: CTRL+Z => [2]+ Stopped asmixer)
# bg 2



\fuser
Mostra qual processo faz uso de um determinado arquivo ou diretório.
Sua sintaxe é:
# fuser ­opção caminho (do arquivo ou diretório)

Opções:
­k ­ finaliza o processo que utiliza o arquivo/diretório em questão;
­i ­ deve ser usada em conjunto com a opção k e serve para perguntar se a finalização do processo deve ser feita;
­u ­ mostra o proprietário do processo;
­v ­ o resultado é mostrado em um padrão de exibição semelhante ao comando ps.


Por exemplo, para ver quem está acessando o cd­rom, digite:
# fuser ­u /mnt/cdrom



\nohup
Executa um comando ignorando os sinais de interrupção. O comando poderá ser executado até mesmo em segundo plano caso seja feito o logout do sistema.
Com o nohup você NÃO fica preso ao terminal, assim poderá colocar qualquer processo em execução e fechar o terminal ou shell.

Exemplos:
# nohup [_comando a ser executado_]
# nohup cp ­a /etc /tmp

OBS: As mensagens de saída do “nohup” são direcionadas para o arquivo nohup.out do diretório corrente.



\nice
Configura a prioridade da execução de um comando ou programa.

Exemplo:
# nice ­n [número]

A prioridade de execução de um Programa/comando pode ser ajustada de ­20 (a mais alta) até 19 (a mais baixa). A regra é inversamente proporcional, quanto menor for o número maior sua prioridade.

Exemplo:
# nice ­n ­19 find / ­name apropos


\renice
Configura a prioridade da execução de um comando ou programa que já está em execução. O renice segue o mesmo intervalo de prioridades que o nice, mas precisamos passar o PID do processo que será priorizado.

Exemplo:

#renice ­20 ­p PID
Para obter o PID do processo, use os comandos já visto anteriormente.


\kill
Esse comando permite cancelar processo em execução, desde que você tenha permissão para isso, ou seja, que você seja superusuário ou dono do processo.

Exemplo:
# kill PID
# kill ­9 385

Onde :
­9 – É a opção do kill que força o processo ser fechado independente de qualquer coisa.
385 – É o número do processo obtido pelo comando ps ­aux, que você deseja cancelar


\killall
Ele é idêntico ao kill, mas ele finaliza processo através do nome, ou seja, última coluna do comando ps.

# killall [_processo_]

Exemplo:
# killall ­9 inetd

Syslog

Syslog é o superfodástico do Linux. Porque no Linux há log fácil!


LOG do Sistema

# /etc/syslog.conf



Como ele trabalha?

Recurso | Prioridade | Ação >> Sistema


Recurso
auth – Mensagens sobre segurança
authpriv – Conexões estabelecidas e controle de acesso
kern – Mensagens do kernel
cron – Mensagens do Crond
daemon – Mensagens de todos os servidores
user – Mensagens relacionadas com usuarios
mail – Mensagens do servidores de e-mail
local0 – Mensagens locais
local7 – Mensagens de boot


Prioridade
debug – Mensagens de depuração
info – Mensagens de informativas
notice – Mensagens de noticias significantes
warning – Mensagens de Alerta
err – Mensagens de erro
crit – Mensagens criticas
alert – Um solução deve ser toma imediatamente
emerg – O sistema está inutilizável



Ação
Geralmente ação é o caminho aonde o log irá ser encontrado.

Exs: kern.* /dev/console

authpriv.* /var/log/secure


Exemplo
Então vamos fazer de conta que eu pretendo armazenar todas as informações criticas relacionadas a meu servidor de e-mail, para um arquivo chamado /var/log/maillog

Essa linha teria que ficar assim:
mail.crit /var/log/maillog


Para os sysadmins
Logs importantes:

/var/log/messages – Guarda todas as mensagens de nivel info, para cima
/var/log/secure - Guarda mensagens de autenticação
/var/log/maillog – Guarda todas os logs relacionados ao servidor de e-mails


Log Remotos
# vi /etc/init.d/syslog.
Devemos localizar a linha:
SYSLOGD_OPTIONS=
e colocar o valor:
SYSLOGD_OPTIONS=”-r -m 0”
Para exportarmos os logs do nosso servidor cliente devemos editar o arquivo:
# vi /etc/syslogd.conf
E adcionar a linha:
*.* @hostname.domain



SYSLOG-NG

A família LAST

last => Exibe informações sobre logins e logouts armazenados em /var/log/wtmp.
lastb => Informações sobre possíveis erros de login que estão armazenadas em /var/log/btmp.
lastlog => Infos sobre o tempo de login do usuário que estão armazenadas em /var/log/lastlog.
lastcom => Infos sobre todos os comandos executados no sistema em /var/log/pacct.

Obs: Esses arquivos de log criados pela família LAST* não são arquivos simples, portanto só podem ser visualizados com os próprios comandos last*



Recurso ou Facilities do Syslog-NG
auth
lpr
authpriv
mail
cron
mark
daemon
news
ftp
syslog
kern
user
local0-7
uucp

auth – Comandos relacionados a segurança e autorização
authpriv – Mensagens de segurança confidenciais
cron – Mensangens relacionadas ao serviço cron (agendador de tarefas)
daemon – Outros daemons do sistema ex:(sshd, inetd, pppd, ...)
ftp – O daemon do servidor FTP do sistema
kern – Mensagens relacionadas ao kernel (Núcleo do sistema)
local0-7 – Oito variantes de mensagens locais
lpr – O sistema de spool de impressão (Fila de Impressão, etc)
mail – Serviços relacionados com e-mail (qmail, sendmail, postfix)
mark – Timestamps gerados em intervalos regulares.1
news – Mensagens de notícias da usenet
syslog – Mensangens internas do servidor de LOG.
user – Todo o tipo de mensagem a nível de usuário.
uucp – Reservado para o UUCP (abreviação para “Cópia Unix para Unix'')



Priorities
Maior Gravidade
| emerg
| alert
| crit
| err
| warning
| notice
| info
| debug

Menor Gravidade


emerg – Situações de Pânicos (O sistema está inutilizável)
alert – Situações Urgentes (Deverá ser providenciada algum tipo
de ação logo de imediato)
crit – Condições Críticas
err – Condições de Erros.
warning – Mensagens de Alerta
notice – Coisas que podem merecer investigação.
info – Mensagens informativas
debug – Somente para depuração

Cron

É uma agenda do nosso sistema onde você pode marcar seus compromissos administrativos. Como por exemplo uma rotina de backup. O Cron é responsável por avisar o shell a executar os comandos.

Cron --> Chefe
Crontab --> A agenda que o chefe usa
shell --> Funcionário que executa os compromissos

/etc/crontab (só root)
/var/spool/cron/crontabs (cada usuário acessa sua própria agenda)

Comando para agendar uma tarefa:
#crontab –e
-e: edit

Sintaxe do Cron:
mm hh DD MM DOW COMMAND

mm – minuto (0 até 59)
hh – hora (0 até 23)
DD – dia do mês (1 até 31)
MM – mês (1 até 12)
DOW – dia da semana (0 até 7)
COMMAND – tarefa que irá executar

0 = domingo
1 = segunda-feira
2 = terça-feira
3 = quarta-feira
4 = quinta-feira
5 = sexta-feira
6 = sábado
7 = domingo


O coringa "*"
Vamos executar uma tarefa (echo “Estou testando o cron : )” > /dev/tty1), enviando a saída desse comando para o terminal 1 em cada hora, ou seja, às 13:10, às 14:10, e assim por diante!
10 * * * * echo “Estou testando o cron : )” > /dev/tty1

O coringa "/"
Com esse coringa, podemos executar por exemplo uma tarefa de 5 em 5 minutos:
*/5 * * * * echo “Estou testando o cron : )” > /dev/tty1

O coringa "-"
Aqui, podemos executar uma tarefa dentro de um certo intervalo... por exemplo... de 0 à 5 minutos:
0-5 * * * * echo “Estou testando o cron : )” > /dev/tty1

O coringa "-" e o "/"
Aqui, juntamos 2 coringas para executar uma tarefa!
Por exemplo: executar uma tarefa de 5 em 5 minutos durante os 30 primeiros minutos:
0-30/5 * * * * echo “Estou testando o cron : )” > /dev/tty1

O coringa ","
Esse é um coringa onde podemos executar uma tarefa em tempos intercalados!
Por exemplo, no minuto 1, 3 e 5:
1,3,5 * * * * echo “Estou testando o cron :)” > /dev/tty1

Toda sexta, às 18, seja feito o backup do diretório /etc, usando o tar com o gzip!
00 18 * * 5 tar -cvzf bkp_etc.tgz /etc

Lembrando que ele sempre obedece uma condição. Exemplo: quero que seja mostrado na tela às 17 horas a seguinte mensagem: “hoje é Sex Jul 29 17:00:00 BRT 2005”; ou seja, mostre a saída do comando date; porém, o dia tem que ser sexta e tem que ser no mês 07, no dia 29 e tem que ser 17 horas!
Ficaria assim:
0 17 29 7 5 echo “Hoje é `date`”

O cron (chefe) vai consultar o que foi escrito no crontab (agenda do chefe) para ver se o que pedimos vai ser executado pelo funcionário (shell).
Para ver então essa agenda, usamos o comando:
# crontab –l
-l : list

Limpar os compromissos da agenda inteira:
# crontab –r
-r: remove

# crontab –l –u (apenas como root)
-l : list
-u: user

VI - O Editor de Texto MASTER

VI - Editor de Texto


O vi possui 3 modos, que são os estados do editor:

Comandos: Uma sessão de edição sempre começa nesse modo de operação. Quando estamos no modo comandos, podemos caminhar pela tela de edição e utilizar os comandos para manipular o texto.

Inserção: Somente nesse modo podemos alterar um texto na tela...

Linha de comando: Alguns comandos de edição devem ser digitados na última linha da tela. O caractere “:” é usado para indicar ao editor que vamos usar um comando de linha


Modo Inserção
É o modo que podemos inserir os caracteres, ou seja, o modo onde podemos editar as informações (retirando, acrescentando, etc.). As teclas utilizadas são:
i => insere texto antes do cursor.
I => insere texto no início da linha atual.
a => insere texto após o cursor.
A => insere texto no final da linha atual.
o => insere texto no início da próxima linha, inserindo uma nova linha.
O => insere texto no início da linha anterior, inserindo uma nova linha.



Apagando caracteres
Del ou Delete => apaga a letra que está na frente do cursor.
x => deleta a letra em que o cursor está (nx deleta as próximas n letras).
dw => deleta o restante da palavra atual (ndw deleta as n próximas palavras).
u => undelete (volta o que foi apagado por último ou apaga o que foi inserido por último).
dd => deleta a linha atual (ndd deleta n linhas a partir da atual).



Substituindo caracteres
s => substitui a letra atual (e entra no modo de inserção).
S => substitui a linha atual (e entra no modo de inserção).
r => substitui a letra atual (nao entra no modo de inserção).
R => entra no modo de substituição (sai com ).
~ => substitui maiúsculo/minúsculo.
:1,$s/palavra1/palavra2/g => substitui a palavra1 pela palavra2


Copiar, Recortar e Colar
nyy => copia as n linhas posteriores (copiar).
nY => copia as n linhas anteriores (copiar).
ncc => recorta as n linhas (a partir da atual)
p => cola as N após a linha atual.
P => cola as N antes da linha atual.
Obs: O “N”, é a quantidade de linhas ou caracteres que você deseja editar! ;



Navegando no Texto
j => uma linha para baixo.
h => uma letra para a esquerda.
b => volta no início da palavra.
e => vai para o fim da palavra.
$ => fim da linha.
+n => vai n linhas para baixo.
k => uma linha para cima.
l => uma letra para a direita.
w => vai pra a próxima palavra.
0 => início da linha.
nG => vai para a linha n.


Realizando buscas com o VI
É possível realizar buscas utilizando o vi. Esse recurso é útil quando você está editando um arquivo muito extenso e não quer ficar lendo tudo. Para utilizar essa facilidade do vi, utilize as opções abaixo:
/palavra => procura palavra a partir Linha da atual.
?palavra => procura palavra (voltando no início do arquivo).
n => procura a próxima ocorrência (na mesma direção de busca).
:set number => coloca a numeração de linhas


Salvar e sair
Para isso, basta utilizar uma das opções abaixo:
:w => salva o arquivo.
:q => sai do arquivo.
:q! => sai sem salvar as modificações do arquivo.
:wq => salva e sai do arquivo editado.
ZZ => em modo de comando, salva e sai do arquivo editado.
:x => salva e sai do arquivo editado.

Módulos

Os módulos têm que estar sempre em alerta no momento em que o kernel passa uma ordem vinda do dispositivo para eles. Só que entre os módulos existem algumas diferenças: existem aqueles que ficam sempre disponíveis desde o momento do boot do sistema. Por essa razão, esses módulos que estão intrínsecos no kernel são denominados built­in.

Para verificar os módulos que são built­in, temos que analisar tudo o que o kernel carrega na inicialização, com o comando dmesg:

# dmesg


Localização dos módulos
/lib/modules//kernel/drivers.

modinfo - info do módulo
lsmod - listar módulo
modprobe - upa o módulo com depedências
insmod - up o módulo individualmente
rmmod - rm o módulo

Pirataria e o Software Livre

eae galera que lê o Sabinux Beleuza???

Primeiro gostaria de agradacer. Estava vendo as estatísticas de Acesso e o mês de Setembro foi bom. Mais de 800 visitas.

Escrevi um artigo promovendo o seguinte tópico: A Pirataria e o Software Livre.

O que essas duas palavras tem em comum? O que tem de opostas...

como está o governo em relação a isso? O que o governo faz para acabar com a pirataria.. o que ele faz para promover o Linux?

Será que o Brasil colabora bastante ou é meio parado? Nós Brasileiros sabemos se e quando usamos o Linux????

Quais empresas brasileiras usam o Linux full? Quais internacionais usam o Linux?

Enfim.. essas são algumas das perguntas respondidas pelo artigo.
Segue o link para download do arquivo em .pdf

DOWNLOAD NOW


Muito obrigado pela "audiência" do sabinux.