Sistema Operacional GNU/Linux

Transcrição

Sistema Operacional GNU/Linux
Sistema Operacional
GNU/Linux®
Instalação, Configuração, Utilização e Administração
Hélio Marques Sobrinho
Sistema Operacional GNU/Linux:
Instalação, Configuração, Utilização
e Administração
Hélio Marques Sobrinho
Belo Horizonte
Edição: Hélio Marques
Revisão de texto:
Starix Informática,
Interlinux/Art&Soft,
R2M Studio Design,
Hélio Marques
Editoração eletrônica: Interlinux, Hélio Marques
Produção gráfica:
Capa:
Marques Sobrinho, Hélio.
Sistema Operacional GNU/Linux:Instalação,
Configuração, Utilização e Administração.
Belo Horizonte - MG - 2012.
Direitos Autorais
Copyright © 2001-2012 Hélio Marques Sobrinho
Este material é de propriedade de Hélio Marques Sobrinho e é utilizado
nos cursos ministrados por ele, sendo proibida sua reprodução sem sua
autorização por escrito. Foi produzido utilizando o ApplixWare 5.0 no SuSE
Linux.
Applixware é marca registrada da VistaSource, Inc.
Linux é marca registrada de Linus Torvalds.
MS-DOS, Windows, Windows NT, Windows 95, Windows 98,
Windows Me, Windows 2000, Windows XP e outros são marcas registradas da
Microsoft Corporation.
SuSE, openSuSE e YaST são marcas registradas de Novell Inc.
Unix é marca registrada de X/Open Company Limited.
VMware é marca registrada da VMware Inc.
XFree86 é marca registrada de The XFree86 Project.
Xorg é marca registrada do XConsortion.
Outros produtos citados neste material podem ter suas marcas registradas
por seus respectivos fabricantes.
Hélio Marques Sobrinho
http://www.linuxsupport.com.br
e-mail: [email protected]
i
Revisões
Revisões
1.00
1.01
1.02
1.03
1.04
2.00
2.01
3.00
3.01
3.02
3.03
3.04
3.05
3.06
4.00
4.01
4.02
4.03
4.04
4.05
abril/2001
maio/2001
junho/2001
julho/2001
junho/2002
julho/2002
novembro/2002
janeiro/2003
abril/2003
maio/2003
fevereiro/2004
julho/2004
setembro/2005
novembro/2006
novembro/2008
junho/2009
dezembro/2009
janeiro/2010
setembro/2010
janeiro/2012
Starix - versão inicial c/ ~ 100 páginas
Interlinux (http://www.interlinux.com.br)
Starix - inclusão de capítulos
Starix - inclusão de capítulos
Starix - inclusão de capítulos
Starix - reformatação e atualização
R2M Studio Design - revisão e imagens
Starix - inclusão de capítulos
Starix - inclusão capítulo gerenciamento
Starix - configuração do apache
Starix - atualização e mais tópicos
Starix - atualizações e mais tópicos
Starix - atualizações e mais tópicos
HMarx - atualizações e mais tópicos
HMarx - remoção de referências à Starix
HMarx - atualizações e mais capítulos
HMarx - inclusão capítulo jogos
HMarx - revisão e mais tópicos
HMarx - revisão e mais tópicos
HMarx - revisões e atualizações
Sobre o autor
Hélio Marques Sobrinho
Engenheiro Eletricista pela EE-UFMG
Ênfase em Eletrônica Industrial
Mestre em Ciência da Computação pelo DCC-UFMG
Ênfase em Tecnologia de Hardware
Consultor em Tecnologia da Informação
Análise de sistemas
Seleção de software e hardware
Projeto de software e hardware
Desenvolvimento de sistemas nativos e web
Instalação e configuração de sistemas
Segurança e desempenho de sistemas
Treinamento
Cursos ministrados
Instituições: Starix Informática / InterLinux / Instituto On-line
Sistema Operacional SuSE Linux
Instituições: FAFI-BH / Fundac-bh / Uni-BH
Software básico e de suporte, Sistemas Operacionais
Gerência de Sistemas e Redes
Segurança em Sistema Operacional Livre
(pós graduação GSTI)
Instituições: PUC Minas (graduação)
Informática I
Arquitetura de Computadores I e II
Projeto de Algoritmos
Algorítmos e Estruturas de Dados III
Avaliação de Sistemas Computacionais
Agradecimentos
iii
Agradecimentos
Agradeço a colaboracão dos seguintes profissionais, que me
auxiliaram na concepção deste livro:
Flávia de Castro Mendes Marques
Bacharel em Ciência da Computação pelo DCC-UFMG
Ênfase em Software Básico
Frederico Machado Bastos
Bacharel em Ciência da Computação pela PUC-MG
Mestre em Ciência da Computação pelo DCC-UFMG
Ênfase em Gerenciamento de Redes
Breno Silveira Soares
Bacharel em Ciência da Computação pela PUC-MG
LPI Certified
Agradeço ainda ao Edson Barbosa Duarte da Art&Soft,
http://artsoft.com.br,
pela inestimável ajuda nas formatações, revisões e impressões deste
livro.
Hélio Marques Sobrinho
iv
Convenções tipográficas
Convenções tipográficas
Neste livro são utilizadas as seguintes convenções:
Convenção
negrito
itálico
reticências ( ... )
colchetes ( [ ] )
chaves ( { } )
asterisco ( { }*)
barra vertical ( | )
courier
itálico-sublinhado
¦
+D
Uso
indica um comando a ser
digitado ou de uma função
palavras em um idioma
diferente do português
indica repetição dos
argumentos
itens opcionais
itens alternativos
permite mais de uma
alternativa
separador das opções
alternativas
nome de um arquivo ou
diretório
valor ou opção que deve
ser substituído pelo valor
real ou por uma constante
pressionar as teclas dadas
simultaneamente
Exemplo
man ls
startx()
O kernel do Linux
ls [ opcões ] [ arq ... ]
ls [ opcões ] [ arq ... ]
route { add | del } ...
{ u | g | o | a}*
route { add | del } ...
/usr/src/linux
--radix=r
¦
+D
Prefácio
v
Prefácio
Este livro começou a ser escrito como uma apostila dos cursos de SuSE
Linux® ministrados na minha ex-empresa Starix Informática®.
Muitos perguntam o que significa o nome Starix. Este nome surgiu em
1988 como nome do sistema operacional Unix-like que seria desenvolvido como
trabalho de mestrado da Flávia no Departamento de Ciência da Computação da
UFMG - DCC para o super microcomputador DCC-2600.
O projeto dos módulos de processamento do DCC-2600 foi meu trabalho
de mestrado no DCC, iniciado em 1982 e concluido em 1986 sob a orientação do
Dr. Wilson P. Pádua. Outros módulos como memória e E/S foram implementados
por Luiz Fernando Costa. O DCC-2600 consistia de um sistema multiprocessado
SMP utilizando processadores de 16 bits Intel 8086 em um barramento Intel
Multibus. O sistema suportava até 16 processadores, compartilhando memória,
discos e barramentos de E/S. Durante o projeto, construção e testes deste sistema
foi utilizado o sistema operacional IBM PC-DOS, no qual foram desenvolvidos
diversos programas para a depuração do hardware. Foi projetado e
implementado um ROM-BIOS compatível com o IBM PC BIOS, apesar das
grandes diferenças no hardware, para que o PC-DOS (até a versão 3.30) e alguns
de seus aplicativos fossem suportados. Foi implementado também um
subconjunto dos aplicativos da rede Micnet® do SCO Xenix®, permitindo troca
de arquivos, mail e execução remota entre o DOS e o Xenix através de uma
conexão RS-232C.
Adquirimos em 1985, o PCNX® da Wendin Inc., um ambiente Unix-like
que rodava sobre o PC-DOS e incluia fontes de diversos aplicativos básicos do
Unix como o shell, ls, ps, cp, etc. Após alterações nos fontes do PCNX (devido
ao hardware), ele funcionou bem em modo monoprocessado no DCC-2600 com
512KB de memória e com 5 terminais seriais.
vi
Prefácio
Houve também no DCC, o projeto de mestrado de Alberto Avritzer
definindo um sistema operacional, DCC/ix, em Modula-2, baseado nos fontes
originais em C do Unix versão 7 para o minicomputador DEC PDP-11.
Posteriormente, por falta de um compilador Modula-2, o DCC/ix foi
traduzido para o Turbo Pascal da Borland Inc. As compilações mno Turbo Pascal
e testes do DCC/ix eram feitas no DCC-2600, durante o desenvolvimento e testes
do próprio hardware. Confesso que isto atrasou bastante o projeto. O DCC/is
nunca chegou a funcionar satisfatoriamente.
Prefácio
vii
A revista "Isto é" de 01/jan/1986 anuncia, nas páginas 46 e 48, as
pesquisas pioneiras das equipes brasileiras.
viii
Prefácio
Na foto, de pé estão os doutores do DCC-UFMG, Dr. Wilson P. Pádua (meu orientador) e
Dr. Ivan Moura Campos e, sentados, a Flávia e eu.
Outros projetos em multiprocessamento estavam também sendo
desenvolvidos pela USP em São Paulo e pelo NCE no Rio de Janeiro, ambos
utilizando processadores Motorola.
Prefácio
ix
Os projetos do DCC-2600 (hardware) e do DCC/ix (software) foram
apresentados no 1o Simpósio Brasileiro de Processamento Paralelo (I-SBPP) da
SBC em 1987, na cidade de Gramado, RS. Este ano foi também o da minha saída
da UFMG e dos projetos do então chamado LAC - Laboratório de Arquitetura de
Computadores do DCC.
Como a implementação em Pascal do DCC/ix não permitia a exploração
do hardware multiprocessado do DCC-2600, além de ter baixo desempenho e
pouca estabilidade, eu e a Flávia iniciamos em meados de 1988 um projeto para
reimplementar o sistema operacional em C a partir dos fontes originais do Unix
com alterações devido ao multiprocessamento e às grandes diferenças de
hardware do DCC-2600 em relação ao DEC PDP-11. Este projeto foi batizado
como *-ix ou simplesmente Star-ix, sugerindo multiplicidade (*) e Unix, e foi
apresentado como proposta de dissertação de mestrado da Flávia em março de
1989.
Infelizmente não houve interesse dos doutores do DCC pelo projeto.
Além da dificuldade de encontrar um orientador para o projeto, o DCC-2600 teve
um problema de hardware que, por desinteresse, não foi solucionado pela equipe
do Laboratório Professor Dr. Newton A. C. Lages (novo nome do LAC em
homenagem ao falecido professor).
Caso fosse dado continuidade pelo DCC, o sistema operacional (*-ix), e
diversos aplicativos estariam rodando no DCC-2600, e mesmo no DCC-2800 (que
seria uma evolução do DCC-2600 utilizando processadores Intel 80386), talvez
no início de 1990 e estaria entre os sistemas open source como o Linux e o
FreeBSD.
x
Prefácio
E, em novembro de 1989, na Comdex Las Vegas, a Corollary lança o
primeiro projeto de um computador multiprocessado baseado no i486 da Intel.
Porque não foi o Brasil ?
Prefácio
xi
Após diversas atividades como consultores autônomos, analistas,
pesquisadores e gerentes de algumas empresas, eu e a Flávia decidimos em 1998
abrir nossa própria empresa focando em soluções Unix/Linux e de
interconectividade. Nada mais sugestivo do que o *-ix, gerando então o nome
Starix. Como já utilizávamos Linux desde 1992 e o SuSE Linux desde a sua
versão 5.0, o escolhemos como ambiente operacional da empresa para
desenvolvimento de aplicativos e sistemas.
A Starix, além do desenvolvimento de sistemas, também atuava nas áreas
de suporte, consultoria e treinamento. Para os cursos de SuSE Linux, foi
produzida uma apostila de cerca de 100 páginas (que foi a semente deste livro).
A Starix tornou-se então a primeira revenda brasileira da empresa alemã
SuSE GmbH (Software und System-Entwicklung - Desenvolvimento de software
e sistemas), importando o kit com os manuais em inglês, a partir da versão SuSE
Linux 6.0.
O trabalho de criação deste livro começou quando a equipe da Starix
decidiu traduzir o manual do SuSE Linux 6.2. Após traduzir 8 capítulos, o
material foi apresentado a um representante da SuSE GmbH na LinuxExpo 2000
em São Paulo. Este representante nos informou que o trabalho de tradução já
havia iniciado com a participação de uma das então revendas da SuSE no Brasil.
Assim, cancelamos o trabalho de tradução e resolvemos produzir uma apostila
para os cursos de SuSE Linux ministrados pela Starix.
A apostila inicial (com cerca de 100 páginas) era impressa por demanda
em uma impressora laser HP. Com o aumento da demanda, a apostila foi revisada
chegando a mais de 130 páginas e assim optamos por imprimí-la na Engesoft com
o auxílio da editoração e formatação da empresa Interlinux.
xii
Prefácio
A partir da versão 7.1, a SuSE alemã decidiu não mais produzir o manual
em português. Resolvemos então transformar a apostila dos cursos em um livro
que pudesse suprir a necessidade dos nossos clientes e também complementasse o
kit SuSE Linux. Na Inforuso 2002, feira de informática que ocorre em Belo
Horizonte, aliada a parceria com a Livraria Livro Arbítrio, decidimos então
terminar este livro de forma que ele fosse produzido e distribuído em livrarias.
Isto nunca chegou a se concretizar. A Starix saiu da rede de revendas da SuSE
Linux, e manteve seu foco em desenvolvimento, consultoria e treinamento,
utilizando soluções de alta tecnologia, principalmente para a plataforma Linux.
Em 2005, a Starix encerrou suas atividades e este material passou a ser
atualizado por mim e utilizado ocasionalmente como apostila de referência para
alguns cursos Linux para empresas.
Este material também pode ser utilizado nos estudos preparatórios para
exames de certificação em Linux. Ele contém informações que cobrem desde a
utilização até tópicos de administração avançada de redes e servidores.
Hélio Marques Sobrinho
xiii
Conteúdo
Conteúdo
Prefácio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
Conteúdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
1. Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
O que é Linux ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Histórico da Computação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Histórico - do Unix ao Linux . . . . . . . . . . . . . . . . . . . . . . . . 10
O United Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
O SuSE Linux e a Novell . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2. Hardware e Arquitetura . . . . . . . . . . . . . . . . . . 16
Arquitetura dos Sistemas Unix-Like. . . . . . . . . . . . . . . . . . .
Dispositivos de armazenamento . . . . . . . . . . . . . . . . . . . . . .
Sistema de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diretórios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alguns diretórios padrão do SVR4 e do Linux. . . . . . . . . . .
Alguns arquivos padrão . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O sistema de arquivos /proc . . . . . . . . . . . . . . . . . . . . . . . . .
Dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
20
21
25
26
27
28
30
3. Iniciando o Linux . . . . . . . . . . . . . . . . . . . . . . 34
Do boot ao Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tabela de ações utilizadas no initttab . . . . . . . . . . . . . . . . . .
Níveis de execução padrão . . . . . . . . . . . . . . . . . . . . . . . . . .
Processos disparados pelo init . . . . . . . . . . . . . . . . . . . . . . .
Sessões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Encerrando a sessão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Desligando o computador . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
35
36
38
39
41
41
Conteúdo
xiv
4. Utilizando o Linux . . . . . . . . . . . . . . . . . . . . . . 42
Interpretador de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
O Bash - Bourne-Again Shell . . . . . . . . . . . . . . . . . . . . . . . . 45
Comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Operadores do bash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Comandos Administrativos. . . . . . . . . . . . . . . . . . . . . . . . . 128
Tratamento dos Sistemas de Arquivos . . . . . . . . . . . . . . . . 134
Módulos de dispositivos e serviços . . . . . . . . . . . . . . . . . . 147
Mensagens do sistema Linux . . . . . . . . . . . . . . . . . . . . . . . 155
5. Instalando o Linux . . . . . . . . . . . . . . . . . . . . . 160
Instalação do Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O Boot do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instalação do SuSE Linux. . . . . . . . . . . . . . . . . . . . . . . . . .
Instalação de outros aplicativos no Linux. . . . . . . . . . . . . .
Utilizando o RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
160
162
163
171
173
6. O Sistema X Window. . . . . . . . . . . . . . . . . . . 188
O Sistema X Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O X Window no Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuração do XFree86. . . . . . . . . . . . . . . . . . . . . . . . . .
Gerenciadores de janelas . . . . . . . . . . . . . . . . . . . . . . . . . .
O KDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188
192
194
196
199
7. Redes em Unix . . . . . . . . . . . . . . . . . . . . . . . . 210
Redes em Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Servidores, Estações e Terminais . . . . . . . . . . . . . . . . . . . .
Endereçamento IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Subclasses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Roteamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ferramentas para configuração e diagnóstico . . . . . . . . . . .
Endereçamento IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Internet e Intranet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
210
219
220
224
225
227
242
246
xv
Conteúdo
8. Serviços de Redes . . . . . . . . . . . . . . . . . . . . . 248
Domínios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DNS - Domain Name System . . . . . . . . . . . . . . . . . . . . . . .
Software DNS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NIS - Network Information System . . . . . . . . . . . . . . . . . .
LDAP - Lightweight Directory Access Protocol . . . . . . . .
Servidor WEB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Servidor de proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Correio eletrônico - e-mail . . . . . . . . . . . . . . . . . . . . . . . . .
Protocolos de e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Configuração do sistema de e-mail. . . . . . . . . . . . . . . . . . .
Configuração do sendmail . . . . . . . . . . . . . . . . . . . . . . . . .
FTP - File Transfer Protocol. . . . . . . . . . . . . . . . . . . . . . . .
Sessões remotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PPP - Point to Point Protocol . . . . . . . . . . . . . . . . . . . . . . .
Comunicação e Telefonia . . . . . . . . . . . . . . . . . . . . . . . . . .
Interconectividade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interconectividade DOS/Windows . . . . . . . . . . . . . . . . . . .
Interconectividade Novell® Netware® . . . . . . . . . . . . . . .
Interconectividade Apple® Macintosh® . . . . . . . . . . . . . .
248
250
255
275
281
290
301
311
314
316
317
322
323
324
330
331
331
336
337
9. O Kernel Linux . . . . . . . . . . . . . . . . . . . . . . . 338
Configuração do kernel Linux . . . . . . . . . . . . . . . . . . . . . . 338
Compilação do kernel e seus módulos . . . . . . . . . . . . . . . . 341
10. Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Segurança no Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Formas de ataque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algumas ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VPN - Virtual Private Network . . . . . . . . . . . . . . . . . . . . .
PGP - Pretty Good Privacy . . . . . . . . . . . . . . . . . . . . . . . . .
Clusters e Grids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Critérios de segurança do DoD . . . . . . . . . . . . . . . . . . . . . .
Mantendo o sistema seguro. . . . . . . . . . . . . . . . . . . . . . . . .
344
345
350
352
365
371
374
377
380
Conteúdo
xvi
11. Gerência de Redes em Linux . . . . . . . . . . . . 381
Sistema de computação. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instalação física . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Instalação elétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Topologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gerenciamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SNMP e MIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Firewalls como ferramentas de gerenciamento. . . . . . . . . .
381
382
383
384
385
386
392
398
12. Ambiente de Execução e Desenvolvimento de
Aplicativos em Linux . . . . . . . . . . . . . . . . . . . . . 403
Formato de arquivos executáveis . . . . . . . . . . . . . . . . . . . .
Executando programas para Windows no Linux . . . . . . . .
Emuladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compilando fontes de aplicativos no Linux . . . . . . . . . . . .
Os arquivos Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gerando pacotes RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Assinando um RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemplo de pacote RPM . . . . . . . . . . . . . . . . . . . . . . . . . .
409
410
411
416
417
420
423
424
13. Expressões Regulares. . . . . . . . . . . . . . . . . . 429
Expressões Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
14. O Editor de Textos VI . . . . . . . . . . . . . . . . . 433
O editor de textos vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Opções do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
15. Criando Disquetes de Boot. . . . . . . . . . . . . . 439
Criando Disquetes de Boot . . . . . . . . . . . . . . . . . . . . . . . . 439
16. Sistemas de Numeração . . . . . . . . . . . . . . . . 446
Notação posicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Números em um computador digital. . . . . . . . . . . . . . . . . .
Números naturais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Números inteiros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Números de ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . .
446
449
449
449
451
xvii
Conteúdo
17. Introdução à Computação Forense . . . . . . . . 452
Conceitos iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Procura por evidências . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plano de batalha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reconstrução das fábulas . . . . . . . . . . . . . . . . . . . . . . . . . .
Quem contactar ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Investigação na prática . . . . . . . . . . . . . . . . . . . . . . . . . . . .
452
453
454
454
454
455
18. Clusters e Grids . . . . . . . . . . . . . . . . . . . . . . 458
Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Implementando um cluster HPC. . . . . . . . . . . . . . . . . . . . . 459
Implementando um cluster HA. . . . . . . . . . . . . . . . . . . . . . 461
19. Entretenimento e Aprendizado . . . . . . . . . . . 466
Linux também é cultura e diversão !. . . . . . . . . . . . . . . . . . 466
Jogos de ação (3D) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Jogos para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Livros e outras publicações. . . . . . . . . . . . . . . . . . . . . . . . . 480
Sites na Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Livros e outras publicações. . . . . . . . . . . . . . . . . . . . . . . . . 486
Sites na Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Glossário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Índice Remissivo. . . . . . . . . . . . . . . . . . . . . . . . . 498
Introdução
1
1. Introdução
O que é Linux ?
Quando falamos de ‘‘Linux’’, precisamos definir
exatamente o que queremos dizer com o termo. O ‘‘Linux
propriamente dito’’ é o kernel, o ‘‘coração’’ de todo sistema
operacional GNU, mas o kernel sozinho não é um sistema
operacional utilizável.
Na verdade, o Linux (kernel) é parte do projeto GNU, idealizado
por Richard Stallman, cujo objetivo era criar todo um sistema
free, e não somente o kernel do sistema
operacional, e dar aos usuários de
computadores a liberdade que muitos haviam
perdido. Deste ponto de vista, o Linux deveria ser chamando
de GNU/Linux. GNU é a sigla para GNU is Not Unix. A base
legal dos aplicativos GNU é a GPL - GNU General Public
License da Free Software Foundation, FSF.
Para um sistema Unix® existe uma série de pacotes de software
conhecidos como ferramentas Unix. No Linux, bem como em outros sistemas
operacionais, estes programas estão disponíveis como pacotes de software
gratuitos em suas versões GNU. A maioria deles oferece características
melhoradas em relação aos originais. Destes, o compilador GNU C/C++, que
algumas pessoas acreditam ser um dos melhores compiladores disponíveis
atualmente, é provavelmente o programa mais famoso, talvez com a exceção do
Emacs.
2
Introdução
O que torna o Linux completo é sua interface gráfica através do
XWindow. As primeiras versões utilizavam o XFree86 (atualmente na versão
4.6.0). Este é um Sistema X Window X11R6.6) para sistemas UNIX para PCs. As
versões mais recentes das distribuições Linux estão adotando o X.org. Este é o
porte da distribuição oficial do Sistema X Window X11R7.1 do X Consortium,
Inc. e, portanto, completamente compatível com o padrão.
Todos estes componentes, juntos com muitas outras ferramentas,
aplicativos e entretenimentos, criam o sistema conhecido como Linux. Existe uma
grande quantidade de software gratuito disponível, e muitas maneiras de montar
uma distribuição do sistema Linux.
Uma distribuição irá conter o kernel do Linux, aplicativos e utilitários,
ferramentas para instalação, configuração e administração do Linux. Existem
diversas distribuições do Linux. Entre as mais conhecidas estão Slackware,
Debian, Red Hat, Corel, Turbo Linux, Caldera (hoje Linux), SuSE e, no Brasil, a
Conectiva (derivada da Red Hat). Em 2003 a Red Hat descontinuou o Red Hat
Linux e passou a manter apenas o Red Hat Enterprise Linux e o Projeto Fedora.
A distribuição Debian é a única distribuição GNU pura porque só contém
aplicativos com licença GPL. Esta distribuição já possui mais de 8700 pacotes.
No final das contas, a escolha de uma distribuição do Linux é uma decisão
filosófica que divide a comunidade Linux em diversas ideologias.
A distribuição Linux criada pela empresa alemã SuSE tem
sido considerada a melhor, por ser a mais completa, mais
estável e mais fácil de administrar. Ela se tornou a base do
United Linux. Hoje o SuSE Linux é propriedade da Novell.
O projeto openSuSE pode ser encontrado em
http://opensuse.org. São disponibilizadas as imagens de
CD ou DVD e muita documentação.
Introdução
3
Histórico da Computação
A necessidade do ser humano de um sistema de numeração surgiu ainda
na pré-história. Os homens da caverna começaram a associar pedras às suas
posses.
Com o passar dos anos, o aumento das posses tornou o
transporte de suas "economias" bastante difícil, e assim foram
criados símbolos para representar uma determinada quantidade
de elementos. Um exemplo típico é a escrita cuneiforme dos
babilônios e assírios há mais de 5000 anos.
A partir de 300 AC, surgiram os primeiros ábacos. São
instrumentos de cálculo simples e altamente eficientes.
São utilizados até hoje no Japão e China.
Em 1617, John Napier, inventor dos logaritmos,
projetou uma máquina de multiplicar através de
cilindros. Em 1642, Blaise Pascal construiu uma
máquina de somar e subtrair utilizando
engrenagens.
Em 1673, Gottfried Willhelm Leibniz projetou uma
máquina para realizar multiplicações através de somas
sucessivas, que só pôde ser construída em 1694.
Em 1728, Basile Bouchon construiu um tear mecânico com
folha giratória de papel perfurado. Em 1801, Joseph Jacquard
criou a máquina de tecer com cartões perfurados.
4
Introdução
Em 1812, Charles Babbage projetou uma
máquina de cálculos de tabelas
matemáticas. Em 1859, ele projetou uma
máquina diferencial. Ela apenas foi
construída em 1991.
Em 1890, William Seward Burroughs I construiu
a primeira máquina com teclado para somar e
imprimir.
Neste mesmo ano, Herman Hollerith
construiu uma máquina tabuladora
com cartões de papel perfurados para
realizar o censo dos EUA.
Em 1911, a fusão de 4 empresas, incluindo a de
Hollerith, formaram a Computing Tabulation Recording
Corporation (CTR). Em 1924, sob a presidência de Thomas
J. Watson, ela foi renomeada para International Business
Machines Corporation (IBM),
Introdução
5
Em 1937, Howard Hathaway Aiken construiu uma avançada
máquina para cálculos integrais e diferenciais, o IBM Automatic
Sequence Controlled Calculator (ASCC), chamado de Mark I pela
universidade de Harvard. O primeiro computador programável.
O Mark I
Em um gabinete de aco com 2.5m de altura, 16m de largura e 6cm de
profundidade, com 765 mil componentes e pesando 4500kg, o Mark I era
alimentado por um motor elétrico de 4kW. Realizava uma multiplicacão em 6 s e
uma divisão em 15.3s. Uma funcão logatitmica ou trigonométrica demorava cerca
de 1 minuto.
6
Introdução
Em 1941, Konrad Zuse criou Z3, primeiro computado controlado por
um programa, armazenado em fita perfurada. Ele também projetou a
primeira linguagem de programação de alto nível em 1946,
PlanKalkül.
Abaixo um programa para verificação de lógica em PlanKalkül.
Em 1943, Alan Turing participou da
construção do Colossus, um computador
com 1800 válvulas. Seu projeto para
quebrar criptografia foi tão bem feito
que sua velocidade não poderia ser
batida por programas convencionais
rodando nos processadores Intel Pentium atuais.
Introdução
7
Em 1946, surge o ENIAC (Electronic Numeric
Integrator And Calculator). Com 18800 válvulas, ocupava 3
salas em um total de 72 m2, pesava 30 toneladas e era
refrigerado por dois ventiladores movidos por motores
Crysler de 12 CV. Tinha uma avaria a cada 6 horas. Surge,
então, o conceito da arquitetura Von Newman (processador
de instruções tratando uma entrada e produzindo uma saída).
Em 1948, surge o EDVAC (Electronic
Discrete Variable Automatic Computer).
Em 1951, é produzido o primeiro
computador comercial: o UNIVAC I.
Von Newman e o EDVAC
Em meados de 1960, é lançado o IBM
System/360, um marco na história dos
mainframes. Sua arquitetura evoluiu até o atual
S/390, que executa Linux utilizando o modelo de
máquinas virtuais.
Em 1970, a Digital Equipment Corporation, DEC, lança a
linha PDP. A arquitetura do minicomputador PDP-11
influenciou significativamente a criação dos primeiros
microcomputadores.
Em 1972, a Intel lança o 8080 no microcomputador
Altair. Surgem os microcomputadores de 8 bits
rodando o sistema CP/M-80.
8
Introdução
Em 1970, surge o UNIX escrito em linguagem de montagem do DEC
PDP-7. Em 1973, o Unix foi reescrito em C, linguagem criada por Dennis Ritchie.
O Unix se espalhou por diversos mainframes e minicomputadores.
Em 1979, a Intel lança o 8086 e o 8088. Começa a
era do IBM PC, executando o PC-DOS. Este sistema
operacional herdou milhares de programas do CP/M80, porque sua arquitetura interna foi baseada nele.
Em 1983, a Intel produz o 80286 e a IBM lança o
IBM PC/AT.
Em 1985, com o lançamento do Intel 80386, o Unix
pode
então
encontrar
seu
lugar
em
microcomputadores. A versão SCO Xenix foi a mais
marcante.
Em 1990, foi definido o Unix System V Release 4. Através do documento
System V Interface Definition (ou simplesmente SVID), diversas versões de Unix
foram convergindo para um padrão (SCO Unix, HP-UX, IBM AIX, Dec Ultrix, e
outros).
O finlandês Linus Torvalds cria o Linux em 1991. Com os
fontes disponíveis gratuitamente, o Linux acompanha então
a evolução dos processadores, utilizando o máximo dos
recursos do computador.
Em 1992, a Intel lança o processador Pentium. A
Microsoft começa a linha de seus sistemas Win32 (Windows
NT 3.x em 1993, Windows 95 em 1995, Windows NT 4.0
em 1996). A Intel cria o Pentium II em 1997 e o Pentium III
em 1999, ao mesmo tempo que apresenta a arquitetura IA64.
Em 2000 são lançados o Windows 2000 e o Windows Me.
Introdução
9
Surge então o Pentium IV. Em 2001 é lançado o Windows
XP. Em 2003 são lançados o Windows 2003 e a versão 64
bits do Windows XP, cuja versão Professional só é
liberada em 2005. Em 2005 é anunciado o Windows Vista,
lançado em 2006. Processadores como o Celeron, o Core
2, Core 2 Duo, Atom r o Itanium evoluem ultrapassando a
frequência de 3 GHz, Em 2008 surgem os processadores
i3, i5 e i7. Em 2009 foi lançado o Windows 7. Em 2011 a Intel lança a segunda
geração do Intel Core Sandy Bridge. O Linux roda perfeitamente em todos os
processadores.
Os processadores AMD também são suportados
pelo Linux: o K5 lançado em 1995, o K6 e o K62 em
1997, o K7 (Athlon , Duron e Sempron) em 1999, o
K8 (Opteron, Turion e Athlon X2 FX) em 2003, e o
K10 ( Phenom FX, Athlon II, Turion II) em 2007.
Além disso, o Linux suporta também os
clusters e grids, permitindo configurações de
alta disponibilidade e/ou alto desempenho.
Veja mais no capítulo Clusters e Grids.
Hoje, além da plataforma x86, o Linux
é disponível para os processadores MIPS,
PowerPC, Sparc, DEC Alpha, Motorola 68xxx,
e mesmo o S/390 e o BlueGene/L da IBM.
10
Introdução
Histórico - do Unix ao Linux
O sistema operacional Unix teve sua origem no
projeto MULTICS - Multiplexed Information and
Computing Service - da Bell Labs, MIT e General
Electric, iniciado em 1964. O MULTICS rodava
originalmente em um GE645, tendo explorado o uso de
segmentação e paginação no gerenciamento de memória
e informação.
Ken Thompson, Dennis Ritchie e Brian Kernigham, à
direita, divertiam-se com o jogo Space Travel no GE645, para o
qual pagavam US$75 por jogada. Utilizando um PDP-7 rejeitado
pela Bell, os três programadores portaram o jogo para ele e
escreveram um pequeno sistema operacional, que Brian denominou
UNICS - Uniplexed information and computing system baseado no nome do
MULTICS. Inicialmente escrito em linguagem de montagem do PDP-7, em 1973
ele foi praticamente todo reescrito em C (no padrão definido por Kernigham e
Ritchie). A Bell Labs gostou da idéia e Peter Neumann sugeriu que o nome fosse
modificado para Unix.
Foto de um PDP-7
restaurado em Oslo,
Noruega, 2005
Introdução
11
Abaixo, uma foto histórica de Dennis Ritchie (em pé) e Ken Thompson
utilizando um PDP-11.
12
Introdução
A partir da liberação dos fontes para as universidades, apareceram
diversas versões de sistemas compatíveis com o Unix. Por ser de extrema
portabilidade, o Unix passou a rodar em diversas máquinas de diversos
fabricantes. Em 1977 o Unix já rodava em mais de 500 entidades em mais de 10
paises. Versões comerciais, como o Xenix da SCO, o HP-UX da HP, o AIX da
IBM, BSD de Berkeley, SunOS da Sun, o AT&T Unix, entre outros, rapidamente
dominaram o mercado de servidores. Em 1990, a AT&T (antiga Bell Labs)
escreveu o documento SVID (System V Interface Definition), criando o padrão
SVR4 (System V Release 4).
Em 1991, o finlandês Linus Torvalds (à
esquerda), inspirado no sistema operacional
Minix de Andrew S. Tanenbaum (à direita),
decidiu escrever um sistema operacional
"melhor que o Minix". Em 5 de outubro, liberou
a primeira versão na Internet. Hoje o kernel do
Linux conta com milhares de analistas e
programadores do mundo inteiro. Incluindo aplicativos GNU e
outros comerciais, existem hoje distribuições com mais de 3.000 aplicativos. O
Linux possui características básicas do BSD e do Unix System V.
Em 2001, o kernel Linux, em sua versão 2.4 na distribuição SuSE 8.0 com
mais de 4.000 aplicativos, já está sendo utilizado facilmente por usuários de
diversos níveis. Ele substitui, com muitas vantagens, qualquer ambiente
operacional (redes Novell, Unix, Windows, e outros), ou mesmo se integra a
redes com estes ambientes, transparentemente. Paralelamente, eram
desenvolvidas as versões 2.5 e 2.6 do kernel Linux. Em dezembro de 2003 a
versão 2.6 do kernel foi liberada trazendo ao Linux a verdadeira capacidade para
aplicações empresariais.
O ambiente operacional GNU/Linux amplia sua utilização a cada dia em
supercomputadores, servidores, estações de trabalho e diversos equipamentos
eletrônicos. Ele é também amplamente utilizado em soluções de clusters de alto
desempenho ou alta disponibilidade. Com diversas interfaces gráficas amigáveis e
com suporte a milhares de aplicativos e sua segurança inerente, ele agrada cada
vez mais os mais exigentes usuários.
Introdução
13
O United Linux
Em 25 de julho de 2002, os líderes da indústria
do Linux (Caldera, Conectiva, SuSE Linux e
TurboLinux) anunciaram o planejamento do
UnitedLinux e o provável lançamento para novembro. Este sistema operacional,
seguindo a especificação técnica definida pelas 4 distribuidoras de Linux, deverá
ser o padrão adotado pelas empresas, facilitando sua manutenção e administração.
Diversas empresas, como a AMD, Borland, Fujitso, IBM, NEC e SAP, já
manifestaram seu apoio comentando a facilidade para a criação de um ambiente
Linux de alto desempenho e a facilidade para o desenvolvimentro de hardware e
software.
A Caldera foi adquirida pela SCO que substituiu a Caldera no grupo
UnitedLinux. Devido às ações da SCO contra a IBM relativas a supostas
propriedades intelectuais de códigos fornecidos pela IBM aos desenvolvedores do
Linux, o grupo UnitedLinux foi dissolvido em 2004. Posição das SuSE: "A SuSE
Linux continuará a suportar incondicionalmente o UnitedLinux, honrando os
compromissos com os clientes".
O SuSE Linux e a Novell
A empresa alemã SuSE foi adquirida em janeiro de 2004 pela
Novell. A distribuição Novell/SuSE Linux é considerada uma das
mais completas e seguras do mundo. São oferecidas diversas
soluções Linux variando do uso pessoal até o uso corporativo.
Além das solucões corporativas da linha SuSE Linux Enterprise, há a
distribuição openSuSE, projeto criado para disponibilizar solucões de código
aberto para a comunidade Linux.
14
Introdução
Linha de produtos da Novell
A Novell disponibiliza diversos produtos baseados em
SuSE Linux Enterprise. Alguns deles são descritos abaixo.
SuSE Linux Enterprise Server
Servidor corporativo altamente estável, seguro e escalável
SuSE Linux Enterprise High availability extesion
Conjunto de aplicativos para a implementação de clusters de alta
disponibilidade
SuSE Linux Enterprise Enterprise Real Time Extension
Extensão do SuSE Linux Enterprise Server para aplicacões de
tempo real
SuSE Linux Enterprise Desktop
Ambiente seguro e fácil de usar para as estações de trabalho
suportando ampla gama de dispositivos e diversos aplicativos.
SuSE Linux Enterprise Thin Client
Solução Linux corporativa segura e de baixo custo para a
utilização de estações leves.
SuSE Linux Enterprise JeOS
Uma versão reduzida do SuSE Linux Enterprise (Just-enough
Operating System) adequada para a utilizaçãoem soluções
virtuais ou aplicações embutidas.
A Novell, a IBM, a HP, a SGI, a Nokia e muitas outras empresas, estão
apoiando e incentivando o uso do Linux e de soluções de código aberto.
Hardware e Arquitetura
15
2. Hardware e
Arquitetura
O ambiente operacional GNU/Linux está disponível para diversas
plataformas, cada qual com suas idiossincrasias de configuração e
gerenciamento de dispositivos. A plataforma mais comum é a da
família de processadores Intel e seus similares (AMD e Cyrix). Há
ainda versões para processadores RISC, como o Alpha da Compaq
(anteriormente DEC) e o HP PA, processadores Motorola 68K, Sun
Sparc, ARM, MIPS, PowerPC, e para o IBM S/390.
Vários barramentos são suportados. Os mais comuns são: ISA,
VLB, EISA, PCI, MCA do PS/2, e VME. Veja os comandos lspci,
lsusb e pnpdump no capítulo 4, Utilizando o Linux.
Vamos considerar neste capítulo a família Intel e
computadores baseados na arquitetura do IBM PC, o Personal
Computer. Muitos servidores, mesmo os multiprocessados (SMP Symetric Multi Processing), possuem a arquitetura do IBM PC.
Nestes computadores existe o BIOS (Basic Input/Output System), que provê a
interface entre o hardware e os sistemas operacionais. Normalmente, o BIOS
também oferece uma interface para a configuração das características do
hardware instalado no computador.
Muitas das configurações do BIOS podem afetar o comportamento do
computador e do sistema operacional. As informações fornecidas pelo BIOS ao
sistema operacional podem influir no funcionamento correto e no desempenho de
todo o ambiente computacional. Configurações típicas incluem data e hora, tipos
e geometrias de discos IDE e SCSI, a configuração de portas seriais e paralelas
padrão e portas USB.
16
Hardware e Arquitetura
O kernel Linux possui módulos (drivers) para a grande marioria dos
dispositivos encontrados nos computadores tradicionais. Estes drivers fazem parte
do kernel e normalmente são compilados como módulos dinamicamente
carregados quando da identificação do hardware, durante a carga do kernel ou da
primeira utilização do dispositivo.
Devem ser evitados dispositivos como os WinModems. Para realizar sua
função, estes dispositivos utilizam programas geralmente só disponíveis para
Windows, que fazem uso intensivo da CPU. Para o caso dos WinModems,
especificamente, há o site http://www.linmodems.org onde podem ser
encontradas implementações de módulos para Linux de drivers de algumas
marcas.
O hardware detectado pode ser visto através das informações
disponibilizadas pelo kernel no sistema de arquivos virtual proc montado no
diretório /proc. Veja ainda o comando lsdev do SuSE Linux.
Alguns exemplos são:
Arquivo
/proc/cpuinfo
/proc/ioports
/proc/interrupts
/proc/dma
/proc/meminfo
/proc/devices
/proc/scsi/*
/proc/ide/*
/proc/modules
/proc/iomem
/proc/bus/*
/proc/driver/*
Informação
Modelo e características do(s) processadore(s)
Portos de E/S
Interrupções e dispositivos associados
Canais de DMA utilizados
Memória principal e swap
Dispositivos tipo caracter e bloco
Barramentos e dispositivos SCSI
Barramentos e dispositivos IDE
Módulos carregados
Mapa de memória principal e de dispositivos
Barramentos e dispositivos
(USB, PCI, PCMCIA, ISA, ...)
Dispositivos especiais
(RTC, nvidia, thinkpad, ...)
Hardware e Arquitetura
17
Arquitetura dos Sistemas Unix-Like
Um sistema Unix-like (como o FreeBSD, o
Solaris, e o Linux) se caracteriza basicamente pela
portabilidade. Somente o kernel deve fazer acesso ao
hardware. Um sistema Unix-like é implicitamente
multitarefa e multiusuário. O kernel trata de
coordenar as execuções dos processos e as operações
sobre o hardware.
Os kernels dos sistemas Unix-like atuais não são mais
monolíticos. Alguns deles, como o Linux, possuem
módulos que podem ser adicionados e removidos
dinamicamente. Assim, drivers para dispositivos novos
podem ser incluídos no sistema de acordo com a demanda,
ou excluídos conforme a necessidade.
Em equipamentos que suportam componentes hot-swap, a troca de
dispositivos pode ser feita sem desligá-lo. Por exemplo, se o equipamento permite
placas de rede hot-swap, a placa nova poderá ser de fabricante diferente da
anterior. O administrador deverá apenas reconfigurar os parâmetros da nova
interface de rede e, às vezes, reiniciar os serviços de rede.
Sobre o kernel há uma biblioteca de funções bem
definida para que aplicativos nativos ou scripts
interpretados pelo shell possam ser executados e,
independentemente do hardware, prover uma interface
uniforme para o usuário.
18
Hardware e Arquitetura
Quando se desenvolve
um aplicativo para Unix, os
analistas e programadores
raramente se preocupam com
o tipo de processador e com a
arquitetura
básica
do
computador no qual este
aplicativo será executado. As
bibliotecas do sistema criam
uma arquitetura única virtual
que, através do kernel, e de
seus módulos, utiliza todos
os recursos disponíveis no
hardware e arquitetura real.
Até mesmo ambientes operacionais não Unix-like como o Microsoft
Windows permitem, através de subsistemas POSIX, criar um ambiente de
programação e execução virtual de aplicativos que seguem a arquitetura ortogonal
do Unix. Isto permite a alta portabilidade de aplicativos, além da facilidade de
execução no Linux de arquivos binários compilados para outros Unix como o
SCO Xenix, o SCO Unix, o SCO Unixware e o Sun Solaris.
Em termos de arquitetura de hardware, um programa POSIX não precisa
preocupar com tipos de interface de discos, redes, mouse, placas de som, placas
gráficas, monitores e as resoluções de vídeo (veja o capítulo 6 - O Sistema X
Window).
Hardware e Arquitetura
19
Dispositivos de armazenamento
Para utilizar qualquer dispositivo de armazenamento no
Linux, este deverá conter um sistema de arquivos reconhecível
pelo Linux. Um dispositivo de armazenamento pode ser um disco,
uma partição do disco, um disquete, um CD, um DVD, um ZIP ou
mesmo um arquivo dentro de um sistema de arquivos.
Além dos tipos sistemas de arquivos nativos do Linux como o minix, ext,
ext2, ext3 e o reiserfs, são suportadas uma grande variedade de sistemas de
arquivos de outros sistemas operacionais. Entre eles estão os tipos msdos (FAT12
e FAT16), vfat (FAT32), ntfs, ncpfs, smbfs, umsdos, nfs, adfs, affs, hfs, hpfs,
xenix, sysv, coherent, qnx4, jfs, xfs, xiafs, udf, ufs, iso9660 e romfs.
Normalmente o suporte a estes tipos é feito através de módulos do kernel. Note
que um sistema de arquivos remoto será visto virtualmente através de seu
protocolo, independente do tipo de formatação do dispositivo. Assim, um sistema
de arquivos ext2 ou reiserfs será tratado de forma transparente por máquinas
remota utilizand, por exemplo, o tipo nfs - Network File System.Para máquinas
Windows, qualquer tipo de sistema de arquivos pode ser compartilhado através do
smbfs.
Após a formatação do dispositivo de armazenamento, deve ser gerado o
sistema de arquivos utilizando o programa mkfs que é um front-end para
programas mkfs.tipo. O mkfs irá criar no dispositivo as informações de controle
para que o Linux encontre o sistema de arquivos hierárquico e os atributos de
arquivos e diretórios. Para os sistemas de arquivos mais utilizados ext2, msdos e
reiserfs existem os programas mke2fs, mkdosfs e mkreiserfs para facilitar a
utilização. Veja os comandos de tratamento de sistemas de arquivos no capítulo 4.
Alguns discos possuem a tecnologia S.M.A.R.T., ou simplesmente
SMART (Self-Monitoring, Analysis and Reporting Technology) que é um sistema
de monitoramento para detectar e reportar vários indicadores de confiabilidade e
possivelmente antecipar falhas dos discos. O Linux possui o serviço smartd que
controla e monitora estes discos. Ele é totalmente configurável. Os eventos
selecionados podem ser enviados para um e-mail.
20
Hardware e Arquitetura
Sistema de Arquivos
O Linux, assim como qualquer sistema Unix-like, não
impõe nenhum formato para um arquivo. Para ele, um arquivo
é apenas um conjunto de bytes armazenados em algum
dispositivo. Para os usuários, um arquivo é identificado pelo
seu nome.
Independente do tipo do sistema de arquivos no dispositivo de
armazenamento, os aplicativos tratarão de forma ortogonal os arquivos e
diretórios nele presente. Este sistema é denominado Virtual File System ou
simplesmente vfs e provê a transparência entre os tipos de sistemas de arquivos
nos dispositivos de armazenamento, incluindo os compartilhamentos de rede.
Um arquivo é uma sequência de bytes em, identificada por
um número chamado inode ou inodo. O nome (ou os nomes) deste
arquivo estará(ão) armazenado(s) em um arquivo de tipo diretório.
Isto permite que um mesmo arquivo (conjunto de bytes) possua
diversos nomes localizados em diversos diretórios.
Um inodo contém informações referentes aos bytes armazenados, tais
como:
•
•
•
•
•
•
Tipo do arquivo: normal, diretório, dispositivo, socket, named pipe
(FIFO), link, ...
Permissões de acesso para o dono, grupo e outros
links : número de nomes para este inode
UID (User ID) e GID (Group ID) do dono
tamanho
datas e horas de criação, última modificação e último acesso
Hardware e Arquitetura
21
As informações do inodo podem ser vistas através do comando ls:
hmarx@thor:~ > ls -lid Diretorio
8392 drwxr-xr-x
2 hmarx
starix
hmarx@thor:~ > ls /home
analia
breno
flavia
fred
hmarx@thor:~ >
o
1024 Mar 24 10:07 Diretorio
hmarx
www
No exemplo acima, o inodo de Diretorio é 8392, que é um diretório
(d), tem permissão de leitura, escrita e "execução" para o dono (rwx) e apenas
leitura e "execução" (r-x) para o grupo e para os outros, tem 2 links, pertence ao
usuário hmarx e ao grupo starix, tem o tamanho de 1024 bytes e foi
modificado em 24 de março às 10:07. Veja mais detalhes do comando ls no
Capítulo 4.
@ Um diretório recém criado terá 2 links, isto é 2 nomes. Você seria capaz de
identificar quais são os dois nomes dados ao inodo que armazenará o
diretório ?
Dica: Para cada sub-diretório que você criar neste diretório recém criado,
o número de links do diretório será incrementado.
22
Hardware e Arquitetura
Os arquivos são organizados de forma hierárquica, isto é, em uma árvore
de diretórios e arquivos. O diretório raiz é designado pelo símbolo "/". Em um
dispositivo (real ou virtual), seja ele um disco, disquete, partição primária ou
lógica, um conjunto de diretórios, sub-diretórios e arquivos é denominado
sistema de arquivos ou file system.
A partir de um sistema de arquivos inicial (denominado root filesystem)
que é montado na raiz "/", outros sistemas de arquivos podem ser montados em
sub-diretórios. Isto formará uma coleção de file systems. Nesta coleção, os
diretórios e arquivos serão acessíveis de forma ortogonal pelas aplicações, como
se estivessem em um único dispositivo. Um ou mais sistemas de arquivos nesta
coleção pode até mesmo residir em um outro computador, executando outro
sistema operacional.
O sub-diretório sob o qual é montado um sistema de arquivos é
denominado mount point. Um mount point (ou ponto de montagem) é
normalmente um diretório vazio. Caso um sistema de arquivos seja montado
sobre um diretório não vazio, isto ocultará temporariamente seus arquivos e
subdiretórios até que o sistema de arquivos seja desmontado.
Hardware e Arquitetura
23
No exemplo abaixo, o diretório /opt é o mount point para o segundo
sistema de arquivos.
O sistema de arquivos montado pode estar em qualquer unidade de
armazenamento e até em um arquivo dentro de um sistema de arquivos. Ele pode
também em outro computador em uma rede (que pode estar executando outro
sistema operacional). O Linux pode ainda montar compartilhamentos de
máquinas Windows, Novell e Apple Macintosh. Esta montagem pode ser feita
através de protocolos como NFS, SMBFS (ou CIFS), NCPFS, HFS, entre outros.
Mais detalhes serão vistos no capítulo 8, Serviços de Rede - Interconectividade.
24
Hardware e Arquitetura
Diretórios
Um diretório é basicamente um conjunto de nomes para
arquivos. De forma simples, ele associa um número de inode a um
nome de arquivo. Isto permite que um arquivo possua diversos
nomes. Os nomes poderão estar em diretórios diferentes. Os
diversos nomes de um mesmo arquivo são chamados de links (ou
hard links) ou de symbolic links. Quando há necessidade de colocar um nome de
um arquivo em um diretório que reside em um sistema de arquivos diferente do
arquivo em si (outra partição, disco ou mesmo computador), cria-se um link
simbólico, symbolic link. Um link ou hard link apenas irá incrementar o campo
links do inodo. Um symbolic link alocará um inodo no sistema de arquivos que
conterá o nome do arquivo referenciado.
Um arquivo pode ser referenciado por um caminho ou path. O caminho
pode ser absoluto ou relativo. O caminho absoluto contém todos os subdiretórios desde a raiz até o nome do arquivo. O caminho relativo faz referência
ao diretório de trabalho corrente. Se o caminho não começa com "/", ele é
relativo.
hmarx@thor:~/arqs > ls -la
total 15
drwxr-xr-x
2 hmarx starix
1024
drwxr-xr-x 111 hmarx starix
6144
-rwxr-xr-x
2 hmarx starix
8273
drw-r--r-2 hmarx starix
1024
crw-r--r-1 hmarx starix 30, 40
prw-r--r-1 hmarx starix
0
lrwxrwxrwx
1 hmarx starix
11
hmarx@thor:~/arqs >
o
Feb
Feb
Feb
Mar
Mar
Mar
Mar
11
11
11
24
24
24
24
13:22
09:34
13:22
08:35
08:35
08:40
09:08
.
..
Arquivo Normal
Diretorio
Dispositivo
FIFO
Link p sh -> /usr/sh
Hardware e Arquitetura
Alguns nomes são especiais, como:
/
.
..
~
diretório raiz
Também utilizado para separar sub-diretórios em um path
diretório corrente
diretório anterior ou diretório pai
diretório pessoal ou home directory
Exemplo: ~hmarx é o diretório pessoal do usuário hmarx
Alguns diretórios padrão do SVR4 e do Linux
/
/bin
/boot
/dev
/etc
/usr
/tmp
/usr/bin
/usr/spool
ou
/var/spool
/sbin
/etc/rc.d
ou
/etc/init.d
/opt
ou
/usr/local
/var/log
/proc
diretório raiz
utilitários padrão
arquivos utilizados no boot do Linux
dispositivos
configuração do sistema
utilitários da plataforma, interface X Window, ...
arquivos temporários
outros utilitários gerais
spool de impressão, mail, fax, ...
boot, configuração e administração
scripts de inicialização
utilitários ou arquivos opcionais
arquivos de log do sistema (kernel e serviços)
diretório virtual com informações do kernel Linux
25
26
Hardware e Arquitetura
Alguns arquivos padrão
/vmlinuz ou boot/vmlinuz
/var/spool/mail/username
/etc/passwd
/etc/shadow
/etc/group
/etc/inittab
/etc/fstab
/etc/printcap
/etc/syslog.conf
/etc/lilo.conf
/boot/initrd
/boot/grub/menu.lst
kernel do Linux (o z indica que o kernel está
comprimido)
caixa postal do usuário username
descrição dos usuários locais do sistema
senhas dos usuários locais do sistema
descrição dos grupos
serviços definidos para cada nível de
execução
sistemas de arquivos montáveis
configuração das impressoras
configuração do syslogd
configuração do LILO (LInux LOader)
RAM disk para a inicialização do Linux
configuração do GRUB (GRand Unified
Bootloader)
✍ É possível ter diversas versões de kernel instalados no GNU/Linux.
Desta forma, cada arquivo do kernel e do initrd terão seus nomes
seguidos da versão, como por exemplo,
/boot/vmlinuz-2.6.22.19-0.1-default
/boot/initrd-2.6.22.19-0.1-default
E os módulos de cada kernel serão instalados em diretórios diferentes,
por exemplo, em:
/lib/modules/2.6.22.19-0.1-default/
Hardware e Arquitetura
27
O sistema de arquivos /proc
Além dos mapeamentos de hardware, no diretório /proc é montado o
sistema de arquivos virtual proc que possui informações sobre o sistema
operacional, seus serviços e processos. As informações mais importantes são:
Arquivos
/proc/sys/*
/proc/net/*
/proc/filesystems
/proc/swaps
/proc/stat
/proc/slabinfo
/proc/pid/*
/proc/self/*
/proc/partitions
/proc/config.gz
/proc/version
/proc/cmdline
Informações
Parâmetros do kernel e serviços
Parâmetros de rede
Sistemas de arquivos suportados pelo kernel
Áreas de swap em uso
Estatísticas do kernel
Informações sobre gerenciamento de recursos
Informações sobre o processo de PID pid
Informações sobre o processo corrente
Partições de disco reconhecidas pelo kernel
Configuração geral do kernel na compilação
Versão do kernel e dados sobre a compilação
Argumentos passados no boot
Algumas informações em /proc são apenas de leitura. Outras
informações podem ser escritas e alteram o comportamento do
kernel. Tome muito cuidado ao alterar o valor de algum parâmetro
do kernel. O sistema poderá funcionar de forma errática ou mesmo
travar !
28
Hardware e Arquitetura
Por exemplo, para obter a informações sobre quais sistemas de arquivos o
kernel suporta, com os módulos carregados no momento, utilizamos:
hmarx@thor:~> cat /proc/filesystems
nodev
rootfs
nodev
bdev
nodev
proc
nodev
sockfs
nodev
tmpfs
nodev
shm
nodev
pipefs
ext2
minix
iso9660
nodev
nfs
nodev
devpts
vfat
hmarx@thor:~>
o
Para saber as informações sobre o próprio processo cat durante sua
execução, utilizamos:
hmarx@thor:~> cat /proc/self/status
Name:
cat
State: R (running)
Tgid:
9267
Pid:
9267
PPid:
7779
TracerPid:
0
Uid:
3001
3001
3001
3001
Gid:
3000
3000
3000
3000
FDSize: 256
Groups: 3000 6 14 16
VmSize:
1544 kB
VmLck:
0 kB
VmRSS:
520 kB
VmData:
36 kB
VmStk:
24 kB
VmExe:
12 kB
VmLib:
1224 kB
SigPnd: 0000000000000000
SigBlk: 0000000080000000
SigIgn: 8000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
hmarx@thor:~>
o
Hardware e Arquitetura
29
Dispositivos
Os dispositivos do computador, tais como
memória, portas paralelas, portas seriais, discos
IDE, discos SCSI, CD-ROMs, câmeras, pen
drives, interfaces de vídeo, mouse, entre outros,
são representados por arquivos especiais,
normalmente localizados no diretório /dev.
Estes arquivos são basicamente de dois
tipos:
•
b - bloco
Indica que as transferências de dados são em blocos (como os setores de
um disco)
•
c - caracter
Indica que podem ser feitas transferências byte a byte (como as
impressoras)
A eles são designados dois números: major e minor. O major number
indica a classe do dispositivo (porta paralela, porta serial, disco IDE, ...) e o minor
number indica o índice do dispositivo (primeira porta, segundo disco, ...)
hmarx@thor:~/arqs > ls
brw-rw-rw1 root
crw-rw-rw1 root
crw-rw-rw1 uucp
hmarx@thor:~/arqs >
o
-l /dev/lp0 /dev/ttyS1 /dev/hda
disk
3,
0 Feb 04 19:50 /dev/hda
lp
6,
0 Feb 04 09:50 /dev/lp0
uucp
5, 65 Mar 22 18:45 /dev/ttyS1
No diretório /dev podem existir também links para outros arquivos no
diretório /dev ou para diretórios virtuais em /proc, como ocorre com o
diretório /dev/snd que possui dispositivos diferentes para cada modelo de placa
de som.
30
Hardware e Arquitetura
Dispositivos Especiais
Há diversos dispositivos especiais que mapeiam estruturas de dados ou
processos do kernel. Entre eles estão o socket, representado pelo tipo s e o pipe,
representado pelo tipo p.
hmarx@thor:~/arqs > ls -l /dev/xconsole /dev/log
srw-rw-rw1 root
root
0 Oct 25 01:44
pr-------1 hmarx tty
0 Oct 28 17:50
hmarx@thor:~/arqs >
o
/dev/log
/dev/xconsole
Dispositivos Padrão
Os dispositivos de armazenamento (tipo bloco), como disquetes, discos e
CD-ROMs (que possuem arquivos e diretórios), devem ser montados para que
possam ser utilizados pelos aplicativos típicos do Linux. Dispositivos com
sistemas de arquivos FAT ou VFAT (formatados para DOS e Windows) podem
ser utilizados, sem a necessidade da montagem, através dos utilitários mtools.
Na console (vídeo e teclado do computador), são criados 12 terminais
texto virtuais acessíveis através das teclas ¥+¬ a ¥+·.
Normalmente, o terminal virtual 7 (/dev/tty7) é desabilitado, dando
lugar ao terminal gráfico do sistema X Window. Os terminais 8 a 12 não estão
habilitados por default. O terminal 10 (/dev/tty10) é utilizado normalmente
para a saída de logs do sistema. Para comutar para um terminal texto virtual
estando em uma sessão gráfica no X Window, utiliza-se as combinacões
¦+¥+¬ a ¦+¥+·. Sessões gráficas adicionais irão utilizar os terminais a
partir do terminal virtual 8.
Hardware e Arquitetura
31
Exemplos de dispositivos mais comuns :
Tipo
Discos IDE em kernels antigos
Discos (SCSI, USB, IDE ou SATA)
Partições nos discos
Portas seriais (COM1, COM2, ...)
Portas paralelas (LPT1, LPT2, ...)
Terminais texto virtuais
Disquetes (A:, B:, ...)
XTerms ou
terminais virtuais e remotos
Arquivos em /dev
/dev/hda, /dev/hdb, /dev/hdc, ...
/dev/sda, /dev/sdb, /dev/sdc, ....
/dev/hda1, /dev/sdc2, ...
/dev/ttyS0, /dev/ttyS1. ...
/dev/lp0, /dev/lp1, ...
/dev/tty1, /dev/tty2, ...
/dev/fd0, /dev/fd1, ...
/dev/pts/0, /dev/pts/1, ...
O comando lsdev pode ser utilizado para ver as informações sobre o
hardware instalado:
hmarx@thor:~ > lsdev
Device
DMA
IRQ I/O Ports
-----------------------------------------------acpi
9
cascade
4
2
dma
0080-008f
dma1
0000-001f
dma2
00c0-00df
eepro100
1440-147f
ES1938
5
ESS
1400-1407 14b0-14bf
14dc-14df
eth0
11
fpu
00f0-00ff
i82365
11
ide0
14 01f0-01f7 03f6-03f6
ide1
15 0170-0177 0376-0376
keyboard
1 0060-006f
parport0
0378-037a 037b-037f
PCI
0cf8-0cff 1000-10ff
1480-149f 14a0-14af 14b0-14bf 14c0-14cf 14d0-14d7
2180-219f 8000-803f 9000-9fff 9000-90ff
pic1
0020-003f
pic2
00a0-00bf
PS/2 Mouse
12
rtc
8 0070-007f
serial
03f8-03ff
timer
0 0040-005f
vesafb
03c0-03df
usb-uhci
11 1480-149f
hmarx@thor:~ >
o
14c0-14cf 14d8-14db
14a0-14a7
14a8-14af
1400-143f 1440-147f
14d8-14db 14dc-14df
32
Hardware e Arquitetura
O comando lsusb pode ser utilizado para ver as informações sobre o
barramento USB e dispositivos conectados instalado:
hmarx@thor:~ >
Bus 002 Device
Bus 002 Device
Bus 001 Device
Bus 001 Device
hmarx@thor:~ >
lsusb
002: ID
001: ID
002: ID
001: ID
o
05e3:070e Genesys Logic, Inc.
0000:0000
05a9:a511 OmniVision Technologies, Inc. OV511+ WebCam
0000:0000
Veja mais detalhes destes comandos no capítulo 4, Utilizando o Linux.
Iniciando o Linux
33
3. Iniciando o Linux
Do boot ao Login
Ao ser ligado (ou reiniciado) um computador do tipo PC, o
primeiro programa a ser executado é o BIOS (Basic Input Output
System) , localizado em uma memória ROM ou Flash. Daí o
nome ROM BIOS ou Flash BIOS. Este programa realiza o teste
do hardware (Power On Self Test, ou simplesmente POST). São
verificados o processador, memória, dispositivos básicos de E/S
e armazenamento. A seguir, ele carrega o primeiro setor do dispositivo de boot
(normalmente disquete, CD ou disco rígido). Este setor, denominado master boot
record (MBR), contém um pequeno programa (ou parte inicial dele) cujo
objetivo é carregar o sistema operacional. Alguns setores de boot contém
programas que permitem a seleção do sistema operacional a ser carregado. Na
realidade, ele irá carregar o setor de boot da partição do sistema operacional
escolhido. Para o Linux existe o LILO (LInux LOader), o GRUB (GRand
Unified Bootloader), e outros. O openSuSE Linux utiliza como padrão o LILO
nas versões até 7.3, e o GRUB a partir da versão 8.x..
No caso de um sistema Unix-like, como o Linux, o setor de boot carrega o
kernel, que é responsável por inicializar o hardware e executar o processo inicial
do sistema operacional, o init, e controlar todo o ambiente operacional do
computador. O processo init recebe o process ID (PID) 1. Então, através das
definições no arquivo /etc/inittab, ele irá disparar os outros processos.
O Linux, como todo Unix, possui diferentes níveis de execução,
chamados de runlevels. O runlevel é identificado por um caracter, que
pode ser de 0 a 6, A, B, C, I ou S. O nível inicial é o definido pela linha
initdefault do arquivo /etc/inittab.
34
Iniciando o Linux
No arquivo /etc/inittab há entradas no seguinte formato:
id:runlevels:ação:processo
O id é uma sequência única de 1 a 4 caracteres que identifica a entrada no
arquivo /etc/inittab, runlevels é a lista de níveis de execução para o qual a
ação é tomada, e processo é o processo a ser executado.
Tabela de ações utilizadas no initttab
Ação
respawn
wait
once
boot
bootwait
off
ondemand
initdefault
sysinit
powerwait
powerfail
powerokwait
powerfailnow
resume
ctrlaltdel
kbrequest
Significado
O processo será redisparado se terminar.
O init esperará o processo terminar.
O processo será executado na entrada do runlevel.
O processo será executado durante o boot.
O init esperará, no boot, o processo terminar.
Não será executado.
O processo será executado sob demanda sem alterar o
runlevel.
Runlevel inicial após o boot.
O processo será executado antes dos processos de boot.
O processo será executado quando há queda de energia.
O init irá esperar o processo terminar.
O processo será executado quando há queda de energia.
O init não irá esperar o processo terminar.
O processo será executado quando do retorno da
energia.
O processo será executado quando a bateria de uma
UPS estiver quase descarregada.
O processo será executado quando o kernel informar ao
init que a máquina foi restaurada de um Suspend por
software.
O processo será executado quando forem pressionadas
juntas as teclas ¦+¥+Â.
O processo será executado quando for pressionada a
sequência definida no keymap como KeyboardSignal. O
default é ¥+È.
Iniciando o Linux
35
Níveis de execução padrão
runlevel
0
1
2
3
4
5
6
A
B
C
I
S
Significado
Pára o sistema (halt)
Modo monousuário (single)
Multiusuário sem rede
Multiusuário com rede
- não utilizado Multiusuário, com rede e interface gráfica
Reinicializa o sistema (reboot)
\
> Sob demanda
/
Inicialização
Modo supervisor - single (usado por scripts)
Por exemplo, considerando a linha:
id:5:initdefault:
o init irá executar o definido pela linha do nível 5:
l5:5:wait:/etc/init.d/rc 5
e demais linhas que contiverem 5 na segunda coluna, como:
1:2345:respawn:/sbin/mingetty --noclear tty1
que habilita o terminal 1 (/dev/tty1) , ativando um processo para login.
36
Iniciando o Linux
O script /etc/init.d/rc é utilizado sempre que o nível de execução
é alterado. Para iniciar os serviços do runlevel 5, irá executar os scripts Sxx*
existentes no diretório /etc/init.d/rc5.d. Na mudança de um runlevel i
para o j, ele irá executar os scripts Kxx* do diretório /etc/init.d/rci.d
para os serviços que estão em execução no nível i e não serão executados no nível
j, e os scripts Sxx* do diretório /etc/init.d/rcj.d para os serviços que não
estão em execução no nível i e que deverão ser executados no nível j.
Essencialmente, estes scripts são na realidade links para os arquivos em
/etc/init.d. O rc passará o argumento start para os scripts Sxx* e stop para
os scripts Kxx*. O número xx irá definir a ordem de execução dos scripts.
Assim, por exemplo, o serviço httpd em um servidor WEB, é disparado
pelo script /etc/init.d/apache. No diretório /etc/init.d/rc3.d
estarão, por exemplo, os links simbólicos K03apache e S21apache para o
script ../apache.
O super usuário poderá mudar o nível de execução do sistema utilizando o
programa init, passando o novo runlevel. O programa init (PID 1) em execução
será sinalizado para que seja feita a mudança de runlevel.
thor:~# init 5
Quando é feita uma alteração no arquivo /etc/initab, para a inserção,
remoção ou alteração de um serviço, o programa init deverá ser também
informado, utilizando init Q.
O init também reage a alguns sinais:
Sinal
SIGHUP
SIGUSR1
SIGINT
SIGWINCH
Ação
Muda o runlevel para o contido no arquivo
/etc/initrunlvl ou /var/log/initrunlvl
Fecha e reabre o /dev/initctrl (útil em scripts
de inicialização que remontam o /dev)
Ativa a ação ctrlaltdel (também quando pressionadas
as teclas ¦+¥+Â)
Ativa a ação kbrequest
Iniciando o Linux
37
Processos disparados pelo init
Alguns dos processos disparados pelo init serão responsáveis pelo
tratamento dos "terminais", através dos quais os usuários irão interagir com o
sistema operacional. Classicamente, os processos que irão tratar esses terminais
são chamados de getty. Cada "terminal", real ou virtual, terá um processo getty
associado. Dependendo da forma da interface com o usuário, o getty irá executar
o processo de login, disparando a seguir o chamado login shell.
No Linux, existem diversos tipos de getty. O mais simples é utilizado nos
terminais virtuais acessíveis via ¥+¬ a ¥+·. Os terminais ativos são definidos
no /etc/inittab. Este getty irá mostrar uma tela de login, identificando o
sistema e o terminal. Quando o usuário começa a digitar seu username, o
processo login entra em ação. Após a identificação do usuário, o login irá
executar o login shell, normalmente o /bin/bash. O shell irá então exibir
algumas mensagens e o prompt, indicando ao usuário que ele está pronto para
receber comandos.
Quando se instala a interface gráfica X Window, o processo de login é
semelhante. Ele é chamado genericamente de XDM (X Desktop Manager). No
KDE ele é o KDM. Após a identificação do usuário (username/password), o
login shell será o gerenciador de janelas escolhido (KDE, fvwm2, gnome, ...). O
KDE não é apenas um gerenciador de janelas. Ele é um ambiente de trabalho
completo (K Desktop Environment), com muitas características semelhantes às
encontradas no Microsoft Windows e no MacOS.
38
Iniciando o Linux
Sessões
Para utilizar os recursos do Linux, um usuário precisa
abrir uma sessão. Para isto, ele deve se identificar
através de um código (username) e de uma senha
(password). A cada usuário estão associados dois
números: o user id, UID e o group id, GID. Estes dois
números, gerados ou assinalados na criação do usuário,
serão utilizados pelo Linux para verificar as permissões
de acesso deste usuário.
Um usuário pode pertencer a diversos grupos, sendo que um deles é o
primário. Há um usuário especial, o super usuário, chamado root, que possui
privilégios especiais.
Um sistema Unix-like como o Linux possui um esquema de
segurança que permite a um usuário normal utilizá-lo sem medo.
Não há riscos de danificar o sistema apagando arquivos
essenciais. Ao contrário, nenhuma verificação é feita se o usuário
é o root. Assim, procure utilizar sempre um usuário normal para
suas tarefas. Apenas utilize o usuário root quando precisar instalar,
configurar ou administrar o sistema.
Um usuário pode iniciar uma sessão em modo texto, em um terminal ou console
virtual (local ou remoto), ou ainda uma sessão em modo gráfico utilizando a
interface X Window (veja o capítulo 6).
Iniciando o Linux
39
No modo texto, um início de sessão típico é:
Welcome to SuSE Linux 9.3 (i586) - Kernel 2.6.11.4-21.14-smp (tty3).
thor login: hmarx
Password:
Last login: Wed Oct 11 17:31:50 from thor.starix.br
Have a lot of fun...
We’re deep into the holiday gift-giving season, as you can tell from
the fact that everywhere you look, you see jolly old St. Nick urging
you to purchase things, to the point where you want to slug him right
in his bowl full of jelly.
-- Dave Barry, "Simple, Homespun Gifts"
hmarx@thor:~ >
o
O kdm (KDE Desktop Manager) irá exibir uma tela de login mais
agradável.
Note que, por default, a senha não é ecoada. O administrador poderá
configurar o KDM para ecoar 1 ou 3 caracteres.
40
Iniciando o Linux
Encerrando a sessão
Um usuário deve sempre fechar a sua sessão após o término de suas
atividades. Por motivo de segurança, sempre que ausentar-se ou afastar-se do
terminal, ele deve travar ou fechar sua sessão.
Em um terminal texto, basta apenas terminar o shell utilizando o comando
exit, logout ou simplesmente digitando ¦+D (sequência padrão para fim de
arquivo ou EOF - veja o comando stty).
Desligando o computador
Para desligar o computador, deve ser utilizado o comando
shutdown. Assim, o sistema irá terminar todos os
processos, fechar os arquivos, garantindo a integridade dos
dados nos discos. O shutdown tem a opção de parar (-h)
ou reiniciar (-r) o computador. Em computadores com
fonte ATX, o Linux desligará automaticamente o
computador após parado (atingido o nível de execução 0).
Dependendo da configuração, apenas o super usuário poderá realizar o
shutdown. Na interface gráfica do KDM, ao selecionar Logout para ecerrar a sua
sessão, aparecerá uma janela na qual o usuário deverá, normalmente, informar a
senha do root para poder confirmar a operação de Shutdown ou Reboot, para
desligar ou reiniciar o computador, respectivamente.
Utilizando o Linux
41
4. Utilizando o Linux
Interpretador de comandos
O interpretador de comandos em modo texto do Linux, como em
qualquer sistema Unix-like, é denominado shell.
Existem diversos tipos à sua escolha: bash, sh, ksh, csh, tcsh, pdksh, zsh,
ash. A sintaxe dos comandos são ligeiramente diferentes, mas a função do shell é
a mesma: servir de interface entre o operador e o ambiente operacional. Na
interface gráfica pode ser utilizado um terminal virtual (xterm, gnome-terminal,
konsole, entre outros) para executar o shell. O shell padrão do Linux é o bash Bourne Again Shell. O shell não é apenas um simples interpretador de comandos:
ele é também uma poderosa linguagem de programação.
Normalmente, após o login, é disparado o shell definido no
/etc/passwd para o usuário. Ele exibe o seu prompt, indicando estar pronto
para aceitar comandos. O prompt é diferente para cada shell, e pode ser alterado
pelo usuário.
Ä Utilizaremos o prompt genérico $ a partir de agora. Textos entre
os símbolos [ e ] são opcionais. Textos da forma opção devem ser
substituídos pelo valor real. Se for necessário executar o comando
como usuário root, utilizaremos o prompt #.
Nos exemplos, o prompt será hmarx@thor:path > indicando o
usuário hmarx utilizando a máquina thor no diretório corrente path.
42
Utilizando o Linux
A sintaxe geral de um comando a ser digitado no prompt de um shell é:
$ comando [ opções ] [ argumentos ]
O comando pode ser um built-in (comando reconhecido e interpretado
pelo shell), um nome de um programa ou de uma função definida. Um mesmo
comando pode existir na instalação como um built-in do bash, um programa ou
uma função, e podem produzir saídas diferentes. Um exemplo é o comando time
e o executável /usr/bin/time.
As opções são normalmente da forma -caracter ou --texto. Os
argumentos são informações a serem tratadas pelo comando, como nomes de
arquivos ou diretórios.
Assim, para o comando:
$ ls -l --inode /bin /tmp
Temos:
» comando
» opções
» argumentos
= ls
= -l --inode
= /bin /tmp
A opção --inode é equivalente à opção -i !
Através do comando alias pode ser definido um sinônimo para um
comando. Este pode ser removido através do comando unalias.
hmarx@thor:~> alias ver=’uname -s -r’
hmarx@thor:~> ver
Linux 2.4.10-64GB-SMP
hmarx@thor:~> unalias ver
hmarx@thor:~> o
Digitando apenas alias, serão exibidos os sinônimos definidos. As
definições são voláteis. Para criar definições permanentes crie o arquivo
~/.alias com os comandos alias desejados.
Utilizando o Linux
43
Metacaracteres
Alguns caracteres ou seqüências de caracteres são tratados pelo shell e
substituídos antes de serem passados para o <comando>.
Alguns exemplos:
*
?
[ <conjunto> ]
[ ! <conjunto> ]
qualquer cadeia de caracteres
O shell expande conforme os arquivos presentes
no diretório
qualquer caracter não nulo
um caracter do conjunto
Exemplo: [a-z] : letras minúsculas
[YN] : Y ou N
um caracter que não esteja presente no conjunto
Exemplo: [!0-9] : não seja um dígito
Exemplos:
hmarx@thor:~/docs> ls *
chap1
chap2
chap3
programA
hmarx@thor:~/docs> ls *[1-3]
chap1
chap2
chap3
programB1
hmarx@thor:~/docs> ls *[!1-3]
programaA
hmarx@thor:~/docs> ls *[A-B]?
programB1
programB2
hmarx@thor:~/docs>
programB1
programB2
o
Veja mais detalhes no capítulo Expressões Regulares.
programB2
44
Utilizando o Linux
O Bash - Bourne-Again Shell
O bash é um shell poderoso com sintaxe semelhante à
linguagem de programação C. Ele foi baseado no shell original do
Unix Bourne shell, ou simplesmente sh.
Variáveis
Variáveis são definidas a partir de uma atribuição:
variável=texto
Caso texto contenha caracteres especiais como os metacaracteres ou
espaços em branco, você deverá colocá-lo entre aspas (‘"’) ou apóstrofos (‘´’).
Ou, ainda, preceder o caracter especial por ´\´. O valor de uma variável pode ser
obtido através de $variável. Por convenção, os nomes das variáveis são dados em
letras maiúsculas. O bash não irá expandir textos da forma $variável em cadeias
utilizando apóstrofos (‘´ ’).
hmarx@thor:~/arqs> PESSOA=Helio
hmarx@thor:~/arqs> EMPRESA="Starix Informatica"
hmarx@thor:~/arqs> echo $PESSOA da $EMPRESA
Helio da Starix Informatica
hmarx@thor:~/arqs> echo "$PESSOA"
Helio
hmarx@thor:~/arqs> echo ’$PESSOA’
$PESSOA
hmarx@thor:~/arqs>
o
Utilizando o Linux
45
Variáveis padrão
O bash possui algumas variáveis pré-definidas e que podem ser
redefinidas pelo usuário.
Exemplos:
PATH
PS1
PS2
PS3
HOSTNAME
HOME
USER
TERM
LANG
CDPATH
IFS
caminho default para procura de executáveis
prompt primário
prompt de continuação, indica que o comando anterior
precisa de complemento
prompt do comando select
nome do computador
diretório pessoal do usuário, ou home directory
username ou login do usuário
modelo do terminal do usuário (linux, xterm, ansi, ...)
língua para mensagens e determinação de formatos de
data e números
caminho para procura utilizado pelo comando cd
caracter separador de argumentos para $*
O bash possui ainda variáveis que não podem ser redefinidas pelo usuário,
como:
?
!
0
1 .. 9
@
*
#
$
status do último comando executado, em decimal
PID do último comando executado em background
primeira palavra da linha de comando (o comando)
opções e argumentos da linha de comando
todas as opções e argumentos da linha de comando
todos as opções e argumentos separados por $IFS
número de argumentos
PID do shell
46
Utilizando o Linux
O comando env pode ser utilizado para exibir as variáveis do ambiente. O
comando set pode ser utilizado para alterar opções do shell ou visualizar as
variáveis e funções definidas. Este comando possui diversas opções que alteram o
comportamento do shell. O comando unset serve para remover a definição de
uma variável ou função.
Variáveis podem ser exportadas para sub-shells através do comando
export. Utilizando somente export ou export -p você pode visualizar as
variáveis exportadas.
Uma variável pode ser definida no escopo da execução de um programa.
hmarx@thor:~> date
Fri Sep 23 20:39:37 BRT 2005
hmarx@thor:~> LANG=pt_BR date
Sex Set 23 20:39:39 BRT 2005
hmarx@thor:~> date
Fri Sep 23 20:39:42 BRT 2005
marx@thor:~>
o
Utilizando o Linux
47
Expansão de parâmetros
O sinal $ introduz a expansão de parâmetros, a substituição de comandos e
a expansão aritmética do bash. O parâmetro pode estar entre chaves { } evitando
que caracteres especiais sejam tratados como nomes de variáveis. O valor
retornado é normalmente o valor do parâmetro.
Utilizando operadores extras podemos ainda aumentar o poder desta
expansão, como visto abaixo:
Formato
${parâmetro}
${parâmetro:-palavra}
${parâmetro:=valor}
${parâmetro:?erro}
${parâmetro:+palavra}
${parâmetro:offset}
${parâmetro:offset:tamanho}
${#parâmetro}
${parâmetro#padrão}
${parâmetro##padrão}
${parâmetro%valor}
${parâmetro%%valor}
Valor retornado
valor do parâmetro
palavra se parâmetro nulo
se parâmetro nulo atribui valor ao
parâmetro
Exibe erro se parâmetro for nulo
palavra se o parâmetro não for nulo
substring do parâmetro começando em
offset
substring de tamanho caracteres do
parâmetro começando em offset
número de caracteres do parâmetro
remove o menor texto, que bate com o
padrão, do início do valor do
parâmetro
remove o maior texto, que bate com o
padrão, do início do valor do
parâmetro
remove o menor texto, que bate com o
padrão, do fim do valor do parâmetro
remove o maior texto, que bate com o
padrão, do fim do valor do parâmetro
48
Utilizando o Linux
Operadores extras (cont.)
Formato
${parâmetro/padrão/texto}
${parâmetro//padrão/texto}
${!parâmetro}
Valor retornado
substitui a primeira ocorrência do
padrão no valor do parâmetro por
texto
substitui todas as ocorrências de
padrão no valor do parâmetro por
texto
indireção : valor do valor do parâmetro
Exemplos:
hmarx@thor:~> unset A
hmarx@thor:~> echo ${A:-texto}
texto
hmarx@thor:~> echo ${A:?Variável não definida}
bash: A: Variável não definida
hmarx@thor:~> A="Um texto muito longo"
hmarx@thor:~> echo ${#A}
20
hmarx@thor:~> echo ${A:3:11}
texto muito
hmarx@thor:~> echo ${A/muito/quase}
Um texto quase longo
hmarx@thor:~> A=/x/y/z/w/x
hmarx@thor:~> echo ${A%/x}
/x/y/z/w
hmarx@thor:~> echo ${A#/x}
/y/z/w/x
hmarx@thor:~> A=B
hmarx@thor:~> B=1234
hmarx@thor:~> echo $A
B
hmarx@thor:~> echo ${!A}
1234
hmarx@thor:~>
o
Utilizando o Linux
49
Comandos básicos
Ao ser digitado um comando, o bash irá verificar se ele é um comando
intrínseco, uma função definida ou um programa executável (script ou compilado)
que esteja em algum diretório especificado na variável PATH. Os diretórios são
separados por ":". A procura no PATH é feita da esquerda para a direita. Para
tornar a procura eficiente, obash utiliza uma tabela hash para guardar o caminho
dos programas executados. Veja os comandos hash e rehash.
Mostraremos a seguir os principais comandos do Linux. A maioria deles
possui muitas opções. Serão dadas algumas das opções mais utilizadas. Para os
comandos do bash, a sintaxe geral pode ser vista através de
$ help [ comando ]
hmarx@thor:~> help case
case: case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac
Selectively execute COMMANDS based upon WORD matching PATTERN.The
‘|’ is used to separate multiple patterns.
hmarx@thor:~>
o
A maioria dos comandos externos aceita ainda a opção --help, que mostra
um sumário da sintaxe e opções. Para uma explicação mais detalhada, utilize o
man:
$ man [ opções ] [ seção ] comando
Para se obter uma lista das seções dos manuais que se referem a um
comando, utilize o man com a opção -k (ou apenas o comando apropos):
$ man -k comando
hmarx@thor:~> man -k gzip
gzip (1)
- compress or expand files
zforce (1)
- force a ’.gz’ extension on all gzip files
MIME::Decoder::Gzip64 (3pm) - decode a "base64" gzip stream
hmarx@thor:~>
o
50
Utilizando o Linux
Além da opção -k, outras opções interessantes do man são:
-h, --help
-a, --all
-w, --where
-T disp
-V, --version
Exibe a ajuda das opções
Exibe todas as páginas referentes ao
comando
Exibe o diretório do arquivo do manual do
comando
Utiliza o groff para formatar as páginas para
o dispositivo disp.
Exibe a versão do man.
Outra forma de obter auxílio é através do comando info que permite
caminhar por páginas de menus referentes ao comando escolhido.
$ info [ opções ] comando
hash [ opções ] [ comando ] ...
Exibe ou atualiza a tabela hash que contém o caminho dos comandos.
Algumas opções:
-l
Exibe a tabela hash
-d
Esquece o caminho dos
comandos
-t
Exibe a tabela com o número
de utilizações
-r
Limpa a tabela hash
rehash
Limpa a tabela hash do bash forçando assim a procura dos executáveis no
PATH.
Utilizando o Linux
51
pwd
Mostra o diretório corrente.
hmarx@thor:~> pwd
/home/hmarx
hmarx@thor:~>
o
echo [ -n ] texto
Imprime a linha de texto,
opcionalmente (-n) sem mudar
de linha.
hmarx@thor:~> echo $MACHINE
i686
hmarx@thor:~>
o
read [ opções ] [ variável ...]
Lê uma linha da entrada padrão, atribuindo cada palavra às variáveis dadas.
As palavras restantes são atribuidas à última variável dada. O separador entre
as palavras é, por default, o valor da variável IFS. Se nenhuma variável for
dadas, é utilizada a variável REPLY.
Algumas opções:
-t timeout em segundos
-p prompt
Exibe o prompt antes de ler
-d delimitador
Lê até encontrar o primeiro
caracter de delimitador
-s
Não ecoa
Número de caracteres a ler
-n número de caracteres
hmarx@thor:~> echo -n "Qual é o seu nome ? " ; read NAME
Qual o seu nome ? Hélio
hmarx@thor:~ > echo Seu nome é $NAME.
Seu nome é Hélio.
hmarx@thor:~>
o
52
Utilizando o Linux
source arquivo
. arquivo
Lê e executa os comandos do arquivos arquivo.
Este comando é muito utilizado nos scripts de inicialização dos serviços do
Linux para ler os parâmetros de configuração definidos em varíáveis do bash.
Por exemplo, no script /sbin/SuSEfirewall2 encontramos:
test -e /etc/sysconfig/network/config && . /etc/sysconfig/network/config
que processa o arquivo /etc/sysconfig/network/config caso ele
exista.
Utilizando o Linux
53
ls [ opções ] ... [ arquivos | diretórios ]
Lista o conteúdo dos diretórios ou atributos dos arquivos e diretórios.
Algumas opções:
-l
Formato longo
-i, --inode
Exibe o número do inodo
-s, --size
Exibe o tamanho do arquivo
-a, --all
Exibe arquivos "ocultos" (iniciados por .)
-A, --almost-all
Exibe arquivos "ocultos", exceto o . e o ..
-d, --directory
Exibe informações sobre o diretório e não
sobre seu conteúdo
-R, --recursive
Recursivo
-F, --classify
Mostra *, /, =, * ou | conforme o tipo do
arquivo
-c
Ordena e mostra pela data de modificação
-x
Exibe entradas por linhas
-C
Exibe entradas por colunas
-1
Exibe entradas em 1 coluna
-q
Exibe ? no lugar de caracteres de controle
-Q
Lista os nomes entre aspas (")
--si
Lista tamanhos em potência de 1000
--full-time
Exibe data/hora no formato completo
-h, --human-readable
Lista tamanhos em potência de 1024
Na listagem longa é exibido um caracter representando o tipo do inodo
antes dos caracteres rwx das permissões:
Tipo do inodo
diretório
arquivo normal
dispositivo bloco
dispositivo caracter
pipe ou FIFO
symbolic link
socket
caracter
d
b
c
p
l
s
54
Utilizando o Linux
Exemplos:
hmarx@thor:/usr/src> ls -l
total 4
drwxr-xr-x 10 root root 1024 Mar 14 18:51 epca
lrwxrwxrwx
1 root root
17 Nov 8 06:46 linux -> linux-2.4.19.SuSE
drwxr-xr-x 15 root root 4096 Jan 26 14:30 linux-2.4.19.SuSE
drwxr-x--7 root root 1024 Dec 22 2001 packages
hmarx@thor:/usr/src> ls -la
total 6
drwxr-xr-x
5 root roor 1024 Sep 22 2001 .
drwxr-xr-x 31 root root 1024 Jul 25 11:02 ..
drwxr-xr-x 10 root root 1024 Mar 14 18:51 epca
lrwxrwxrwx
1 root root
17 Nov 8 06:46 linux -> linux-2.4.19.SuSE
drwxr-xr-x 15 root root 4096 Jan 26 14:30 linux-2.4.19.SuSE
drwxr-x--7 root root 1024 Dec 22 2001 packages
hmarx@thor:/usr/src> ls -F
epca/
linux@
linux-2.4.19.SuSE/ packages/
hmarx@thor:/usr/src> ls -QF
"epca"/
"linux"@
"linux-2.4.19.SuSE"/ "packages"/
hmarx@thor:/usr/src> ls --full-time -d
drwxr-xr-x 7 root root 1024 2001-12-22 09:33:07.000000000 -0300 packages/
hmarx@thor:/usr/src>
o
Utilizando o Linux
55
mkdir [ opções ] diretório [ diretório ] ...
Cria diretórios.
Algumas opções:
-p, --parents
-v, --verbose
-m, --mode=modo
Cria todos os diretórios do path
Exibe cada diretório criado
Permissão como em chmod
hmarx@thor:~/test> ls -l
total 0
hmarx@thor:~/test> mkdir sub1
hmarx@thor:~/test> ls -l
total 1
drwxr-xr-x
2 hmarx
starix 1024 Mar 26 23:54 sub1
hmarx@thor:~/test> mkdir -p X/Y/Z
hmarx@thor:~/test> ls -R
.:
X sub1
./X:
Y
./X/Y:
Z
./X/Y/Z:
./sub1:
hmarx@thor:~/test>
o
rmdir [ opções ] diretório ...
Remove diretórios.
Algumas opções:
-v, --verbose
-p, --parents
Imprime mensagem a cada diretório
Remove todo o path.
No SuSE Linux são definidos os apelidos:
alias md=’mkdir -p’
alias rd=’rmdir’
para simplificar a migração de ambientes MS-DOS/Windows para Linux.
56
Utilizando o Linux
cd [ diretório ]
Muda para o diretório especificado, ou para o home directory caso diretório
não seja fornecido. Pode-se utilizar o diretório - para voltar ao diretório
anterior.
hmarx@thor:~/test> pwd
/home/hmarx/test
hmarx@thor:~/test> cd sub1
hmarx@thor:~/test/sub1> pwd
/home/hmarx/test/sub1
hmarx@thor:~/test/sub1> cd /home/hmarx/test
hmarx@thor:~/test> cd
hmarx@thor:~> pwd
/home/hmarx
hmarx@thor:~>
o
O bash possui diversos comandos para facilitar o caminhamento pelos
diretórios do Linux. Os mais comuns são:
pushd [ -n ] [ diretório | +n |-n ]
Muda para o diretório salvando o anterior em uma pilha (variável
DIRSTACK)
Algumas opções:
-n
Não muda de diretório, apenas manipula a
pilha em DIRSTACK
Utiliza o n-ésimo diretório da contado a
+n
partir da esquerda na lista mostrada pelo
comando dirs
-n
Utiliza o n-ésimo diretório da contado a
partir da direita na lista mostrada pelo
comando dirs
Utilizando o Linux
57
popd [ -n ] [ +n | -n ]
Remove o n-ésimodiretório da pilha em DIRSTACK.
Algumas opções:
-n
Não muda de diretório, apenas manipula a
pilha em DIRSTACK
Utiliza o n-ésimo diretório da contado a
+n
partir da esquerda na lista mostrada pelo
comando dirs
-n
Utiliza o n-ésimo diretório da contado a
partir da direita na lista mostrada pelo
comando dirs
dirs [ -clp ] [ +n | -n ]
Algumas opções:
-c
-l
-p
-v
+n
-n
Limpa a pilha
Imprime a lista no formato longo (não usa o
caracter ~ para o diretório pessoal).
Imprime um diretório por linha
Imprime um diretório por linha prefixado
pelo índice posicional
Imprime o n-ésimo diretório da contado a
partir da esquerda na lista mostrada pelo
comando dirs utilizado sem argumentos
Imprime o n-ésimo diretório da contado a
partir da direita na lista mostrada pelo
comando dirs utilizado sem argumentos
58
Utilizando o Linux
cp [ opções ] fonte ... destino
Copia arquivo(s) fonte para o destino. Múltiplos arquivos podem ser copiados
para um diretório destino.
Algumas opções:
-v, --verbose
Exibe mensagens durante a cópia
-p
Preserva os atributos do arquivo
-R, --recursive
Copia diretórios recursivamente
-d, --no-dereference
Não segue links simbólicos
-f, --force
Força a cópia
-P, --parents
Concatena diretório de origem ao destino
-s, --symbolic-link
Cria links simbólicos
-i, -- interactive
Pergunta antes de sobrescrever arquivos
-x, --one-file-system
Permanece no sistema de arquivos origem
-l, --link
Cria hard links
hmarx@thor:~/test> ls -l
total 1
drwxr-xr-x
2 hmarx
starix
1024 Mar 26 23:54 sub1
hmarx@thor:~/test> cp /etc/passwd .
hmarx@thor:~/test> ls -l
total 1
-rw-r--r-1 hmarx
starix
4094 Mar 27 00:00 passwd
drwxr-xr-x
2 hmarx
starix
1024 Mar 26 23:54 sub1
hmarx@thor:~/test>
o
Tome cuidado com os meta-caracteres e com as
expressões regulares. Você poderá sobrescrever arquivos
não intencionalmente.
Utilizando o Linux
59
cat [ opções ] [ arquivo ] ...
Concatena o(s) arquivo(s) ou a entrada padrão para a saída padrão.
Algumas opções:
-A, --show-all
Equivalente a -vET
-n, --number
Numera as linhas
-v, --show-nonprinting
Exibe caracteres especiais usando ^ e M(exceto para CR/LF e TAB)
-E, --show-ends
Mostra $ no fim das linhas
-T, --show-tabs
Mostra TABs como ^I
hmarx@thor:~/test> cat -TE
Texto$
^IApós um tab$
Após brancos$
$
hmarx@thor:~/test>
o
tee [ opções ] ... [ arquivos ] ...
Copia a entrada padrão para a saída padrão e para o(s) arquivo(s).
Algumas opções:
-a, --append
Adiciona ao fim do(s) arquivo(s)
-i, --ignore-interrupts
Ignora sinais de interrupção
head [ opções ] [ arquivos ] ...
Exibe as primeiras 10 linhas (ou o número especificado) do(s) arquivo(s).
Algumas opções:
-n
n, ---lines=n
Exibe as primeiras n linhas
-c
n, --bytes=n
Exibe os primeiros n bytes
-v,
--verbose
Exibe cabeçalhos com os nomes dos
arquivos
60
Utilizando o Linux
tail [ opções ] [ arquivos ] ...
Exibe as últimas10 linhas (ou o número especificado) do(s) arquivo(s).
Algumas opções:
Exibe as últimas n linhas
-n n, ---lines=n
-f, --follow
Exibe continuamente o(s) arquivo(s)
crescentes
-c s, --bytes=n
Exibe os últimos n bytes
-v, --verbose
Exibe cabeçalhos com os nomes dos
arquivos
Este comando é muito utilizado para acompanhar mensagens de log
(utilizando a opção -f).
od [ opções ] [ arquivos ] ...
Exibe o(s) arquivo(s) em octal e/ou outros formatos
Algumas opções:
-A, --address-radix=r
Muda a base dos offsets do(s) arquivo(s)
para r
-t t, --format=t
Usa formato t
-N n, --read-bytes=n
Exibe apenas n bytes de cada arquivo
-j n, --skip-bytes=n
Salta n bytes de cada arquivo
Formatos:
-a, -t a
-b, -t oC
-c, -t c
-d, -t u2
-f, -t fF
-h, -t x2
-i, -t d2
-l, -t d4
-o, -t o2
-x, -t x2
-t x4
-t f4
-t f8
char
octal
ASCII ou escaped chars
unsigned short em decimal
float
unsigned short em hexadecimal
short em decimal
long em decimal
short em octal
short em hexadecimal
long em hexadecimal
float de 4 bytes
float de 8 bytes
Utilizando o Linux
61
patch [ opções ] [ arquivo original [ patchfile ] ]
patch -pn < pathfile
Aplica alterações em um arquivo.
Algumas opções:
-b, --backup
Cria backups
--binary
Lê arquivos em modo binário
-e, --ed
Usa o pathfile como script ed
-l, --ignore-whitespace
Ignora espaços
-pn, --strip=n
Elimina prefixo contendo n barras
wc [ opções ] [ arquivos ] ...
Conta linhas, palavras e caracteres dos arquivos ou a entrada padrão.
Algumas opções:
-l, --lines
Exibe número de linhas
-w, --words
Exibe número de palavras
-c, --bytes
Exibe número de bytes
-m, --chars
Exibe número de caracteres
-L, --max-line-length
Exibe tamanho da maior linha
hmarx@thor:~> ps aux | wc
120
1509
11862
hmarx@thor:~>
o
62
Utilizando o Linux
strings [ opções ] [ arquivo ] ...
Imprime as cadeias de caracteres existentes no(s) arquivo(s).
Algumas opções:
-a, --all
Percorre todo o arquivo
-f, --print-file-name
Imprime o nome do arquivo
Considera cadeias de no mínimo m
-m, -nm, --bytes=m
caracteres (o default é 4)
Imprime o offset na base definida por r
-t r, --radix=r
(d: decimal, o: octal, x: hexadecimal)
antes das cadeias de caracteres encontradas
tr [ opções ] conjunto1 [ conjunto2 ]
Traduz, comprime ou exclui caracteres da entrada padrão.
Algumas opções:
-c, --complement
Complementa primeiro o conjunto1
-d, --delete
Não traduz. Remove os caracteres do
conjunto1
-s, --squeeze-repeats
Substitui caracteres repetidos por um único
-t, --truncate-set1
Trunca o conjunto1 para o tamanho do
conjunto2
hmarx@thor:~> echo "Um
texto com
Um texto com brancos excessivos
hmarx@thor:~>
o
brancos
excessivos" | tr -s " "
Utilizando o Linux
63
Os conjuntos são cadeias de caracteres como:
\NNN
\\
\a
\b
\r
\n
\t
\v
c1-c2
[c*]
[c*n]
[:alnum:]
[:alpha:]
[:blank:]
[:cntrl:]
[:digit:]
[:graph:]
[:lower:]
[:print:]
o
[:punct:]
[:space:]
[:upper:]
[:xdigit:]
[=c=]
Caracter com código octal NNN
Barra invertida
beep
backspace
CR
LF
tabulação horizontal
tabulação vertical
Todos os caracteres de c1 até c2
No conjunto1, repete o caracter c até o
tamanho do conjunto2
Repete n vezes o caracter c
Todas as letras e dígitos
Todas as letras
Todos os espaços horizontais em branco
Todos os caracteres de controle
Todos os dígitos
Todos os caracteres imprimíveis, exceto o
espaço em branco
Todas as letras minúsculas
Todos os caracteres imprimíveis, incluindo
espaço em branco
Todos os caracteres de pontuação
Todos os espaços horizontais e verticais
Todas as letras maiúsculas
Todos os dígitos hexadecimais
Todos os caracteres equivalentes a c
O comando
hmarx@thor:~> tr "[A-Z]" "[a-z]" < arq.orig > arq.novo
passará todo o texto do arq.orig para minúsculas gerando arq.novo.
64
Utilizando o Linux
grep [ opções ] padrão [ arquivo ] ...
Imprime linhas do(s) arquivo(s) que contêm (ou não) o padrão. O padrão é
uma expressão regular. Para mais detalhes veja o capítulo "Expressões
Regulares".
Algumas opções:
-i, --ignore-case
Ignora maiúsculas/minúsculas
-l, --files-with-match
Imprime apenas nomes de arquivos
-n, --line-number
Numera as linhas encontradas
-r, --recursive
Procura recursiva em diretórios
-v, --invert-match
Mostra as linhas que não contêm o padrão
-c, --count
Imprime o número de linhas
Usa re como expressão regular
-e re, --regexp=re
Por exemplo, o comando
hmarx@thor:~> grep -v "^[ ^I]*$"
arquivo.txt
mostrará as linhas que não estejam em branco ou que não estejam vazias do
arquivo arquivo.txt.
Utilizando o Linux
65
sed [ opções ] [ arquivo ] ...
O sed é um Stream Editor. Ele é utilizado para transformar textos em um
arquivo ou em um pipeline.
Algumas opções:
-q, --quiet, --silent
Só imprime se explicitamente especificado
(comando p)
-e s, --expression=s
Utiliza o script s para processar a entrada
Usa os comandos contidos no arquivo de
-f sf, --file=sf
nome sf para processar a entrada
Alguns comandos do sed
: label
#comentário
{
}
a
i
d
q
b label
t label
D
h
H
g
G
x
s/regexp/substituto/
y/origem/destino/
w arquivo
Label para comandos b e t
Comentários
Início de bloco
Fim de bloco
Append - adiciona texto no final
Insert - insere texto
Delete - apaga o padrão
Quit - abandona imediatamente
Branch - salta para label
Salta para label em caso de uma substituição com
sucesso
Apaga até o fim da linha
Hold - copia o padrão p/ o buffer
Adiciona o padrão ao buffer
Copia o buffer para o padrão
Adiciona o buffer ao padrão
Troca os conteúdos do buffer c/ o padrão
Substitui a expressão regexp pelo substituto
Traduz os caracteres de origem para os
correspondentes em destino
Escreve o padrão no arquivo de nome arquivo
66
Utilizando o Linux
Os comandos do sed podem ser dados para uma determinada faixa de
endereços. Caso não seja dada nenhuma faixa, os comandos serão executados
para todas as linhas da entrada.
A faixa de endereços é da forma endereço1[, endereço2]. Cada endereço
pode ser:
$
n
linha~passo
Última linha do texto
Especifica a linha de número n
Linha inicial e passo. Assim, 1~2 indica todas as
linhas ímpares
Linha que contém um padrão para a expressão
regular regexp
/regexp/
Abaixo um exemplo para trocar duas colunas e ainda incluir um separador
entre elas:
hmarx@thor:~> cat ARQ
AAAAA 1111111
BBBBB 2222222
CCCCC 3333333
DDDDD 4444444
hmarx@thor:~> sed -e "s/ ^\([^ ]*\)[ ]*\(.*\)$/\2 | \1" < ARQ
1111111 | AAAAA
2222222 | BBBBB
3333333 | CCCCC
4444444 | DDDDD
hmarx@thor:~>
o
Utilizando o Linux
67
awk [ opções ] [ arquivo ] ...
Linguagem de processamento de padrões. Awk são as iniciais de seus autores:
Alfred Aho. Weinberger e Brian Kernigham.
Algumas opções:
-f arq, --file arq
Arquivo de programa
Separador de campos
-F fs, --field-separator fs
-v var=val, --assign var=val
Assinalamento do valor val à
variável var
-W help, --help
Ajuda sumária
Imprime as variáveis globais e seus
-W dump=arq
valores finais no arquivo arq
Um programa awk consiste de uma sequência de comandos de ações sobre
padrões e de definições opcionais de funções:
padrão { comandos }
function nome ( parâmetros ) { comandos }
Um padrão pode ser:
BEGIN
END
/regexp/
padrão1 && padrão2
padrão1 || padrão2
padrão1 ? padrão2 : padrão3
( padrão )
! padrão
padrão1, padrão2
Executado antes de ler o arquivo
Executado após tratar o arquivo
Uma expressão regular
São definidas diversas classes POSIX como [:alpha:], [:alnum:], [:lower:],
[:upper:], e [:digit:] que representam os caracteres alfabéticos, alfanuméricos,
letras minúsculas, letras maiúsculas e os dígitos, respectivamente.
68
Utilizando o Linux
Podem ser utilizados operadores semelhantes aos da linguagem C, como:
++, --, ^, +, -, *, /, %, <, >, <=, >=, !=, ==, ~, !~, &&, ||, ?, :, =, +=, -=, *=, /=,
%= e ^=, listados em ordem de precedência.
Comandos de assinalamento são da forma:
l-value operador expressão
l-value pode ser uma variável ou uma referência a um elemento de um
arranjo. O awk permite definição de arranjos multidimensionais.
Os comandos de controle são:
if ( condição ) comando [ else comando ]
while ( condição ) comando
do comando while ( condição )
for ( variável in arranjo ) comando
break
continue
delete arranjo [ indice ]
delete arranjo
exit [ expressão ]
{ comandos }
Os comandos de e entrada e saída são
close ( arquivo [, { to | from } ])
getline [ < arquivo ]
getline var
next
nextfile
print [ lista de expressões > arquivo ]
print [ lista de expressões >> arquivo ]
print [ lista de expressões | arquivo ]
print [ lista de expressões >& arquivo ]
Utilizando o Linux
printf
printf
printf
printf
formato, lista de expressões
formato, lista de expressões
formato, lista de expressões
formato, lista de expressões
69
[ > arquivo ]
[ >> arquivo ]
[ | arquivo ]
[ >& arquivo ]
Podem ser utilizadas as especificações de formato conhecidas da linguagem de
programação C: %d, %c, %i, %e, %E, %f, %g, %G, %o, %u, %s, %x, %X e
%%.
Entre o % e o caracter do formato podem estar:
largura
Largura do campo
. precisão
Precisão ou número máximo de caracteres
Ajuste à esquerda
espaço
Espaço para números positivos e - para
negativos
+
Sinal: + para números positivos e - para
negativos
#
Controle alternativo para preencher com
zeros
0
Preenche com zeros
fflush ( [ arquivo ] )
system ( comando )
São suportadas funções matemáticas como: atan2(y, x), cos(expr),
exp(expr), int(expr), log(expr), rand(), sin(expr), sqrt(expr) e srand([expr]).
E ainda as funções sobre cadeias de caracteres: asort(s [, d]), gensubr(r,
s, h [, t ]), gsub(r, s, [ t, ] ), index(s, t), length([s]), match(s, r [ , a ]), split(s, a [
,r]), sprintf(formato, lista-de-expressões), strtonum(str), sub(r, s [, t]), substr(s,
i [, n ]), tolower(str), toupper(str).
Para processar data e hora, o awk fornece: mktime(data), strftime([
formato[ , timestamp] ]), systime(). A data é um string no formato "YYYY MM
DD HH MM SS [tz]"
70
Utilizando o Linux
Para manipulação bit a bit, awk ainda fornece: and(v1, v2), compl(x),
lshift(val, n), or(v1, v2), rshift(val, n), e xor(v1, v2).
Um programa bem conhecido pode ser escrito em awk:
hmarx@thor:~> awk ’BEGIN { print "hello world !" }’
hello world !
hmarx@thor:~>
o
expr expressão
Avalia expressões aritméticas e lógicas, imprimindo o resultado na saída
padrão.
Uma expressão pode conter os operadores |, &, <, <=, =, !=, >=, >, +, -, *, /,
% e ainda estar entre parenteses: ( expressão ).
Para tratamento de cadeias de caracteres, podem ser utilizados:
string : expressão-regular
ou match string expressão-regular
substr string posição tamanho
index string caracteres
length string
quote token
O comando expr é muito útil quando operamos com variáveis que
representam números no bash:
hmarx@thor:~> I=135
hmarx@thor:~> I=‘expr $I + 1‘
hmarx@thor:~> echo $I
136
hmarx@thor:~>
o
Utilizando o Linux
71
bc [ opções ] [ arquivo ] ...
Calculadora de precisão arbitrária.
Algumas opções:
-l, --mathlib
Define biblioteca matemática padrão
-w, --warn
Exibe avisos de incompatibilidade POSIX
-q, --quiet
Não exibe o texto introdutório
O bc trabalha com números inteiros e fracionários de precisão arbitrária,
em qualquer base. São aceitos os operadores padrão: ++, --, ^, +, -, *, /, %, <, >,
<=, >=, !=, ==, ~, !~, &&, ||, ?, :, =, +=, -=, *=, /=, %= e ^=. Uma expressão
pode estar entre parenteses. Estão disponíveis as funções padrão:
length(expressão), read(), scale(expressão) e sqrt(expressão).
São ainda aceitos os comandos
if ( expressão ) comando [ else comando ]
while ( expressão ) comando
for ( [ expressão1 ] ; [ expressão1 ] ; [ expressão1 ] ) comando
break
continue
halt
return [ ( expressão ) ]
{ comandos }
As funções matemáticas seno, cosseno, arcotangente, logaritmo,
exponencial e bessel são representadas, respectivamente, por s(expressão),
c(expressão), a(expressão), l(expressão), e(expressão), j(n, expressão).
Uma nova função pode ser definida utilizando:
define nome (parâmetros) { [ auto nome ... ; ] comandos }
As variáveis especiais scale, ibase, obase e last podem ser utilizadas para
representar a precisão, a base de entrada, a base da saída e o último valor,
respectivamente.
72
Utilizando o Linux
Por exemplo, a função exponencial da biblioteca matemática pode ser definida
no bc padrão POSIX como:
scale = 20
/*
* Usa o fato de que e^x = (e ^ (x/2))^2
* Se x é um valor pequeno, usamos a série
* e^x = 1 + x + x^2/2! + x^3/3! + ...
*/
define e(x)
{
auto a, d, e, f, i, m, v, z;
/* Verifica o sinal de x */
if (x < 0) { m = 1; x = -x; }
/* Pre-condiciona x. */
z = scale;
scale = 4 + z + .44*x;
while (x > 1) { f += 1; x /= 2; }
/* Inicializa as variáveis */
v=1+x
a=x
d=1
for (i = 2; 1; i++)
{
e = (a *= x) / ( d *= i)
if (e == 0)
{
if (x > 0)
while (f--) v = v*v;
scale = z
if (m) return(1/v);
return(v/1);
}
v += e
}
}
Utilizando o Linux
73
mv [ opções ] [ arquivo ] ...
Renomeia um arquivo ou move arquivos para outro diretório, se o último
arquivo for um diretório.
Algumas opções:
-f, --force
-v, --verbose
-i, --interactive
hmarx@thor:~/test> ls
total 1
-rw-r--r-- 1 hmarx
drwxr-xr-x 2 hmarx
hmarx@thor:~/test> mv
hmarx@thor:~/test> ls
total 1
-rw-r--r-- 1 hmarx
drwxr-xr-x 2 hmarx
hmarx@thor:~/test>
o
-l
starix
4094
starix
1024
passwd PassWord
-l
Mar 27 00:00 passwd
Mar 26 23:54 sub1
starix
starix
Mar 27 00:00 PassWord
Mar 26 23:54 sub1
4094
1024
Se os argumentos são 2 nomes arquivos e o segundo
existe, o comando mv irá sobrescrevê-lo com o
conteúdo do primeiro
rm [ opções ] [ arquivo ] ...
Remove arquivos ou diretórios. Um arquivo removido não pode ser
recuperado.
Algumas opções:
-f, --force
Ignora arquivos não existentes e erros
-v, --verbose
Exibe mensagens durante a remoção
-i, --interactive
Modo interativo
CUIDADO !!!
-r, --recursive
Recursivo
Para evitar remoções não intencionais, pode-se definir um alias rm=’rm -i’ .
74
Utilizando o Linux
ln [ opções ] [ destino ] ... [ nome ]
Cria um link para o arquivo destino com nome nome. Com vários destinos,
nome deve ser um diretório onde os links serão criados.
Algumas opções:
-f, --force
Remove arquivo destino existente
-s, --symbolic
Cria symbolic link em vez de hard link
-v, --verbose
Imprime o nome de cada arquivo
-i, --interactive
Confirma remoção de destino
-n, --no-dereference
Trata symbolic link para diretório como se
fosse um arquivo
hmarx@thor:~> ln -s /bin/bash shell
hmarx@thor:~> ls -li /bin/bash shell
56230 -rwxr-xr-x
1 root
root
432000 Aug 5 2000 /bin/bash
2104
lrwxrwxrwx 1 hmarx
starix
9 Apr 4 13:29 shell -> /bin/bash
hmarx@thor:~>
o
touch [ opções ] [ arquivo ] ...
Atualiza data e hora de acesso e modificação de arquivos. Cria arquivos caso
não existam.
Algumas opções:
-a
Altera apenas data/hora de acesso
-m
Altera apenas data/hora de modificação
-c, --no-create
Não cria arquivos
Usa data/hora em str em vez da corrente
-d str, --date=str
str no formato padrão de data e hora
Usa data/hora em str em vez da corrente
-t str
str no formato [CC[YY]]MMDDhhmm
Usa data/hora do arquivo arq em vez da
-r arq, --reference=arq
corrente
hmarx@thor:~> touch -d "Dec 25 2002 23:59:59" Natal
hmarx@thor:~> ls -l --full-time Natal
-rw-r--r-- 1 hmarx
starix
0 Wed Dec 25 23:59:59 2002 Natal
hmarx@thor:~>
o
Utilizando o Linux
75
more [ opções ] [ arquivo ] ...
Pagina arquivo(s) para a saída padrão.
Algumas opções:
Número de linhas da tela
-num
-s
Agrupa múltiplas linhas em branco em
uma única linha
+num
Começa a exibir a partir da linha num
less [ opções ] [ arquivo ] ...
Equivalente ao more mas permite caminhar pelo(s) arquivo(s) para frente e
para trás e scroll lateral com as setas. Permite ainda marcar posição no texto,
procurar por padrões e abrir outros arquivos. Para ver o sumário dos
comandos do less pode ser usado o comando h ao caminhar por um arquivo.
Algumas opções:
-c, --clear-screen
Limpa a tela
-e, --quit-at-eof
Sai após atingir o fim de arquivo pela
segunda vez
-g, ---hilite-search
Ressalta apenas o texto atual na procura
-i, --ignore-case
Ignora maiúsculas e minúsculas
vi [ opções ] [ arquivo ] ...
Poderoso editor de textos disponível em qualquer Unix.
Veja mais no capítulo 13: O editor de textos VI.
ex [ opções ] [ arquivo ] ...
Editor de textos em modo linha. É o mesmo editor vi em modo linha. O
comando Q no vi o faz comutar para o modo ex. Utilize o comando :visual para
voltar ao modo normal.
76
Utilizando o Linux
cut [ opções ] [ arquivo ] ...
Imprime na saída padrão as partes selecionadas do(s) arquivo(s).
Algumas opções:
Usa c como delimitador em vez de TAB
-d c, --delimiter=c
-b lista, --bytes=lista
Extrai os bytes especificados pela lista
-c lista, --characters=lista
Extrai os caracteres especificados pela lista
-f lista, --fields=lista
Extrai os campos especificados pela lista
-s, --only-delimited
Só imprime as linhas que contenham os
delimitadores
As opções -c, -b e -f não podem coexistir.
A lista pode conter uma ou mais faixas separadas por , e cada faixa pode ser:
N
N-ésimo byte, caracter ou campo
Do N-ésimo byte, caracter ou campo até o
Nfim da linha
N-M
Do N-ésimo até o M-ésimo byte, caracter
ou campo, inclusive
-M
Do início da linha até o M-ésimo byte,
caracter ou campo, inclusive
paste [ opções ] [ arquivo ] ...
Imprime linhas utilizando informações sequencialmente correspondentes às
linhas dos arquivos.
Algumas opções:
Usa c como delimitador em vez de TAB
-d c, --delimiter=c
-s, --serial
Processa um arquivo por vez
Utilizando o Linux
77
join [ opções ] arquivo1 arquivo2
Imprime uma linha para cada par de linhas dos arquivos com campos de
junção idênticos. O campo de junção default é o primeiro delimitado por
espaço.
Algumas opções:
Imprime linhas não casadas do arquivo do
-a n
lado n
-i, --ignore-case
Ignora maiúsculas e minúsculas
-1 campo
Usa o campo do arquivo1 como junção
Usa o campo do arquivo2 como junção
-2 campo
-t c
Usa o caracter c como separator de campos
Imprime somente as linhas não casadas do
-v n
arquivo do lado n
-o f
Usa o formato f para construir a linha
O formato é composto por uma lista de especificações n.campo separadas por
vírgula ou branco.
hmarx@thor:~> cat Nomes
1:Amélia
2:Beatriz
3:Cláudia
4:Débora
hmarx@thor:~> cat Fones
1:3441-2233:Santa Lúcia
2:3228-1234:Anchieta
3:3429-8723:Pampulha
hmarx@thor:~> cut Nomes -d: -f2
Amélia
Beatriz
Cláudia
Débora
hmarx@thor:~> paste -d: Nomes Fone
1:Amélia:1:3441-2233:Santa Lúcia
2:Beatriz:2:3228-1234:Anchieta
3:Cláudia:3:3429-8723:Pampulha
4:Débora:
hmarx@thor:~> join -t: Nomes Fone -o1.2,2.3,2.2
Amélia:Santa Lúcia:3441-2233
Beatriz:Anchieta:3228-1234
Cláudia:Pampulha:3429-8723
hmarx@thor:~>
o
78
Utilizando o Linux
sort [ opções ] [ arquivo ] ...
Ordena as linhas dos arquivos concatenados.
Algumas opções:
Usa chave que começa em pos1 e termina
-k pos1 [, -pos2 ]
em pos2
-b
Ignora brancos no início das chaves
-c
Verifica se os arquivos já estão ordenados
-M
Compara ’JAN’ < ... < ’DEC’
-n
Ordena pelo valor numérico
-t sep
Usa sep como separador
-r
Inverte o resultado de comparações
-f
Converte minúsculas para maiúsculas na
comparação
-i
Considera apenas caracteres imprimíveis
nas chaves
-d
Considera apenas brancos e caracteres
alfanuméricos nas chaves
-m
Apenas junta os arquivos (merge)
pos é dado no formato f[.c][opts], onde f é o número do campo, c é a posição
do caracter no campo e opts é uma combinação das opções Mbdfinr.
uniq [ opções ] [ entrada [ saída ] ]
Imprime apenas linhas únicas do arquivo entrada ordenado, no arquivo saída
ou na saída padrão.
Algumas opções:
-c, --count
Mostra o número de ocorrências no início
de cada linha
-d, --repeated
Exibe apenas linhas duplicadas
-n, -f n, --skip-fields=n
Não compara os primeiros n campos
-i, --ignore-case
Ignora maiúsculas e minúsculas
-u, --unique
Exibe apenas linhas únicas
+n, -s n, --skip-chars=n
Não compara os primeiros n caracteres
Compara no máximo n caracteres na linha
-w n, --check-chars=n
Utilizando o Linux
79
diff [ opções ] arquivo arquivo
Compara dois arquivos.
Algumas opções:
-a, --text
-v
-B, --ignore-blank-lines
-i, --ignore-case
-e, --ed
-r, --recursive
-t
-y, --side-by-side
-W cols, --width=cols
Trata os arquivos como texto
Ignora diferença em número de espaços
Ignora linhas em branco inseridas ou
removidas
Ignora maiúsculas e minúsculas
Gera um script ed como saída
Compara diretórios recursivamente
Expande TABs na saída
Exibe em duas colunas
Usa cols colunas para exibir a saída
diff3 [ opções ] arquivo arquivo
Compara três arquivos
Algumas opções:
-a, --text
-v, --version
-E, --show-overlap
-A, --show-all
-e, --ed
-i
-m, --merge
-T, --initial-tab
Trata os arquivos como texto
Mostra a versão do diff3
Mostra alterações sobrepostas, ressaltando
conflitos
Mostra todas as alterações, ressaltando os
conflitos
Gera um script ed como saída
Gera os comandos ´w´ e ´q´ ao final do
para o script ed.
Produz o arquivo em vez do script ed.
Alinha TABs inserindo TABs nas linhas.
80
Utilizando o Linux
who [ opções ] [ arquivo ] [ arg1 arg2 ]
Mostra quem está logado ou quem é você (arg1 e arg2 são "am I" ou "mom
likes").
Algumas opções:
-H, --heading
Exibe cabeçalho
-q, --count
Exibe o número de usuários
-T, --message, --writable
Exibe + se envio de mensagem está
habilitada
-i, --idle
Exibe tempo ocioso hh:mm
hmarx@thor:~> who
hmarx
:0
hmarx
pts/0
root
pts/5
hmarx
pts/6
hmarx@thor:~>
o
Mar 30
Mar 30
Apr 4
Apr 4
16:02 (console)
22:30
14:39 (acer.starix.br)
16:03
w [ opções ] [ usuário ]
Mostra quem está logado e o que está fazendo.
Algumas opções:
-h
Não mostra o cabeçalho
-l
Listagem longa (default)
-s
Listagem curta
-V
Mostra a versão
last [ opções ] [ usuário ... ] [ tty ... ]
Lista as últimas sessões (do(s) usuário(s)s) nos terminais tty. O usuário
especial reboot mostra as reinicializações do sistema.
Algumas opções:
Mostra n linhas
-n, -n n
-a
Mostra o nome da máquina na última
coluna
-R
Não mostra o nome do terminal ou d
a máquina utilizada
Utilizando o Linux
81
id [ opções ] [ usuário ]
Imprime informações sobre o usuário (ou o corrente)
Algumas opções:
-g, --group
Exibe o ID do grupo do usuário
-G, --groups
Exibe os IDs grupos do usuário
-n, --name
Exibe o nome em vez do(s) ID(s)
-u, --user
Exibe o ID do usuário
hmarx@thor:~> id -G -n hmarx
starix root uucp users disk trusted develop audio
hmarx@thor:~> id -g -n hmarx
starix
hmarx@thor:~>
o
finger [ opções ] [ usuário ... ]
Imprime informações sobre usuário(s) locais ou remotos
Algumas opções:
-l
Formato longo
-s
Formato curto
-o
Exibe escritório (com -s)
-p
Não imprime o .plan e .project
-m
Não imprime os nomes (apenas login)
-M
Imprime os nomes
hmarx@thor:~> finger -p hmarx
Login: hmarx
Name: Helio Marques Sobrinho
Directory: /home/hmarx
Shell: /bin/bash
Office: Starix, 3284-3001
On since Wed Jul 10 18:40 (BRT) on pts/5 (messages off)
No Mail.
hmarx@thor:~>
o
82
Utilizando o Linux
passwd
passwd
passwd
passwd
[ -f | -s ] [ usuário ]
[ -g ] [ -r | -R ] grupo
[ -x max ] [ -n min ] [ -w aviso ] [ -i inativo ] usuário
{ -l | -u | -d | -S } usuário
Altera a senha ou atributos de usuário ou grupo. Apenas o root pode alterar a
senha de outros usuários e os atributos de uma senha.
Algumas opções:
-f
Altera todas as informações do usuário
-s
Altera o shell do usuário
-g
Altera informações de grupo
-r
Remove a senha do grupo
-R
Restringe o grupo a todos os usuários
Número máximo de dias com a mesma
-x max
senha
-n min
Número mínimo de dias para a alteração
da senha
-w aviso
Número de dias antes da expiração da
senha
Número de dias para desabilitar o usuário
-i inativo
após a expiração da senha
-l
Desabilita o usuário através de uma senha
impossível
-u
Reabilita um usuário restaurando sua senha
-d
Remove a senha do usuário
-S
Exibe status da senha do usuário
Utilizando o Linux
83
su [ opções ] ... [ - ] [ usuário ]
Executa um shell como um usuário substituto (ou como root).
Algumas opções:
- , -l, --login
Transforma o shell no login shell
-c, --command=comando
Passa o comando para o shell
-f, --fast
Passa o -f para o shell
-m
Preserva o ambiente do shell
Executa o shell especificado
-s, --shell=shell
hmarx@thor:~> su Password:
thor:~ #
o
newgrp [ -l ] [ grupo ]
sg grupo -c comando
- , -l, --login
Transforma o shell no login shell
Passa o comando para o shell
-c, --command=comando
Executa um shell como um grupo substituto (ou como root).
O comando sg não substitui o shell do usuário.
sudo [ opções ] ... comando
Executa um comando como outro usuário (ou como root). O usuário deverá
ser incluido em /etc/sudoers.
Algumas opções:
-l
Lista os comandos executáveis via sudo
-L
Lista as opções definíveis para o sudo
Executa como usuário (nome ou UID) e
-u usuário
não o root
-p prompt
Exibe o prompt para pedir a senha
-b
Executa em background
-k
Invalida a temporização da senha do
usuário
84
Utilizando o Linux
gpasswd grupo
gpasswd -a usuário grupo
gpasswd -d usuário grupo
gpasswd -R grupo
gpasswd -r grupo
gpasswd [ -A usuário, ... ] [ -M usuário, ... ] grupo
Administra grupos de usuários. É utilizado sem opções para alterar a senha de
um grupo.
Opções:
-a
Adiciona o usuário ao grupo grupo
-d
Remove o usuário do grupo grupo
-r
Remove a senha do grupo grupo
-R
Inibe o acesso ao grupo através de newgrp
-A
Define administradores do grupo grupo
-M
Define membros do grupo grupo
Utilizando o Linux
85
uname [ opções ]
Exibe informações sobre o sistema.
Algumas opções:
-s, --sysname
Exibe o nome do sistema operacional
-r, --release
Exibe o release do sistema operacional
-v, --version
Exibe a versão do sistema operacional
-m, --machine
Exibe o tipo da CPU
-n, --nodename
Exibe o nome da máquina na rede
-p, --processor
Exibe o modelo do processador
-a, --all
Exibe todas as informações
hmarx@thor:~> uname -a
o
Linux thor 2.4.10-64GB-SMP #1 SMP Fri Sep 28 17:26:36 GMT 2001 i686 unknown
hmarx@thor:~>
tty [ opções ]
Exibe o nome do terminal ou apenas retorna código de erro.
Algumas opções:
-s, --silent, ---quiet
Apenas retorna o código de erro
--help
Exibe uma ajuda sumária
--version
Exibe a versão do tty
hmarx@thor:~> tty
/dev/pts/2
hmarx@thor:~>
o
86
Utilizando o Linux
setterm [ opções ]
Altera atributos de um terminal definido na variável TERM através de uma
cadeia de caracteres definida pelas suas características no terminfo.
Características não suportadas são ignoradas.
Algumas opções:
Usa nome em vez do conteúdo de TERM
-term nome
-clear
Limpa a tela e coloca o cursor na primeira
linha e coluna.
-reset
Reinicializa o terminal
-cursor [on | off ]
Habilita ou desabilita o cursor
-repeat [on | off ]
Habilita ou desabilita repetição do teclado
Salva o conteúdo da tela da console virtual
-dump n
n no arquivo screen.dump ou no definido
pela opção -file
-append n
Adiciona o conteúdo da tela da console
virtual n no arquivo screen.dump ou
no definido pela opção -file
-file arq
Define o arquivo de saída para as opções
-dump e -append
-msg [ on | off ]
Habilita ou desabilita mensagens do kernel
no terminal
-msglevel n
Muda o nível de log das mensagens para n
(de 1 a 8).
Colocar o monitor no modo de suspensão
-powersave on | vsync
VESA vsync
-powersave hsync
Colocar o monitor no modo de suspensão
VESA hsync
-powersave powerdown
Colocar o monitor no modo de suspensão
VESA powerdown
-powesave off
Inibe o modo de suspensão do monitor
Define em n minutos (1 a 60) o tempo de
-powerdown n
desligamento do monitor, ou inibe o
desligamento do monitor se n = 0
Utilizando o Linux
87
stty [ opções ]
Exibe ou altera as características e modo de operação do terminal.
Algumas opções:
-a, --all
-g, --save
-F dispositivo, --file dispositivo
característica valor
As características mais comuns são:
Característica
eof c
eol c
erase c
intr c
lnext c
kill c
quit c
rprnt c
start c
stop c
susp c
werase c
cols N
columns N
N
ispeed N
ospeed N
speed
Significado
Caracter para fim de arquivo
Caracter para fim de linha
Caracter para apagar tecla digitada
Caracter para enviar o sinal SIGINT
Para enviar o próximo caracter sem
tratar
Caractrer para limpar a linha corrente
Caracter para enviar o sinal SIGQUIT
Caracter para reimprimir a linha
Caracter para resumir a saída
Caracter para suspender a saída
Caracter para enviar o sinal SIGSUSP
Caracter para apagar a última palavra
Informa ao kernel que o terminal tem
N colunas
Muda o baud rate para N
Muda o baud rate de recepção para N
Muda o baud rate de transmissão para
N
Mostra a velocidade do terminal
default
¦
+D
não definido
¦+? ou Â
+C
¦ +V
¦
+U
¦ +\
¦ +R
¦ +Q
¦ +S
¦ +Z
¦ +W
¦
não definido
não definido
não definido
não definido
não definido
88
Utilizando o Linux
O modo de operação pode ser alterado através de características especiais
denominadas modo. Um modo pode ser precedido ou não por um hífen. O uso de
um hífen complementa o significado do modo de operação.
Os modos mais comuns são:
Modo
clocal
cread
crtscts
cstopb
hup
parenb
parodd
brkint
icrnl
igncr
ignpar
inlcr
inpck
istrip
ixoff
ixon
ocrnl
onlcr
onlret
onocr
crterase
echo
iuclc
olcuc
ixany
icanon
Significado
Desabilita o controle de modem
Permite a entrada de caracteres (não pode ser usado na entrada
padrão)
Habilita o controle de fluxo através de CTS e RTS
Usa 2 bits de stop (ou 1 se desabilitado)
Envia hangup quando o último processo fechar o terminal
Gera e testa o bit de paridade
Gera paridade ímpar
Envia um break na linha
Traduz CR (carriage return) para LF (line feed) na entrada
ignora o CR
Ignora caracteres com erro de paridade
Tarduz LF para CR na entrada
Habilita verificação de paridade
Zera o bit 7 na entrada
Habilita o envio de XON/XOFF
Habilita o controle de fluxo XON/XOFF
Traduz CR para LF na saída
Traduz LF para LF-CR na saída
O caracter LF gera a volta do cursor (CR)
Não imprime CR na primeira coluna
Apaga caracteres usando backspace-espaço-backspace
Ecoa os caracteres digitados
Converte maiúsculas para minúsculas
Converte minúsculas para maiúsculas
Permite qualquer caracter resumir a saida (e não apenas o
definido em start)
Habilita os caracteres especiais definidos em erase, kill,
werase, e rprnt
Utilizando o Linux
E, em especial, para restaurar as características do terminal:
sane
o mesmo que
cread -ignbrk brkint -inlcr -igncr icrnl
-ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl
onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
vt0 ff0 isig icanon iexten echo echoe echok -echonl
-noflsh -xcase -tostop -echoprt echoctl echoke,
e todos os caracteres especiais para os valores default.
Pode ser utilizado ainda o comando reset ou o comando tset.
hmarx@thor:~> stty -a
speed 9600 baud; rows 36; columns 79; line = 0;
intr = ^C; quit = \^; erase = ^?; kill = ^U; eof = ^D; eol = <undef>:
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W;
lnext - ^V; flush = ^O; min = 1; time = 0;
-parenbl -parodd cs8 ignpar -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany imaxbel
opost -olcuc-ocrnl onlcr -onocr -onlret -ofill -odel nl0 cr0 tab0
bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt echoctl echoke
hmarx@thor:~> stty -g
2506:5:bd:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:2f:0:0:0:0:0: 0:0:0:0:0:0:0:0
hmarx@thor:~>
o
89
90
Utilizando o Linux
pr [ opções ] [ arquivos ] ...
Prepara arquivos (ou a entrada padrão) para a impressão.
Algumas opções:
+primeira página [ :última página]
--columns=número de colunas
--width=largura da página
--header=cabeçalho
lpr [ opções ] [ arquivo ] ...
Envia os arquivo(s) (ou a entrada padrão) para a fila de impressão definida.
Algumas opções:
-Pimpressora[@máquina]
Definida a fila de impressão (local
ou remota
-K número de cópias
-w largura da página
-Z opções para o filtro
-m e-mail para status de erro
lpq [ opções ]
Mostra itens na(s) fila(s) de impressão.
Algumas opções:
-Pimpressora[@máquina]
-L
-V
-c
-a
-t tempo entre atualizações
Informações mais detalhadas
Mostra a versão do lpq
Limpa a tela antes de exibir
Todas as impressoras
Intervalo entre exibições repetidas
Utilizando o Linux
91
lprm [ opções ] ( jobid | usuário | all )
Retira iten(s) da(s) fila(s) de impressão.
Algumas opções:
-Pimpressora [ @máquina]
-V
Mostra a versão
-a
Todas as impressoras
-U usuário
Roda como <usuário>
-D nível de depuração
a2ps [ opções ] [ arquivo ] ...
Formata arquivo(s) para impressão em uma impressora PostScript.
Algumas opções:
-M papel, --medium=papel
Tamanho do papel (A4, letter, ...)
-r, --landscape
Paisagem
-R, --portrait
Retrato
Imprime em n colunas
--columns=n
Número de linhas por página
--rows=n
-1, -2, ..., -9
Tamanho de fonts pré-definidos
-j, --borders
Imprime bordas
-f n, --font-size=n
Tamanho do font
Cabeçalho
-b texto, --header=texto
-B, --no-header
Não imprime cabeçalho
Rodapé
--footer=texto
-u texto, --underlay=texto
Rodapé de cada página
Páginas a imprimir
-a páginas, --pages=páginas
-n n, --copies=n
Número de cópias
Gera índice
--toc=texto
-P impr, --printer=impr
Envia saída para a fila de impressão
impr
92
Utilizando o Linux
df [ opções ] arquivos
Mostra as informações sobre o sistema de arquivos onde os arquivos estão.
Algumas opções:
-h, --human-readable
Exibe tamanhos em potência de 1024
-k, --kilobytes
Utiliza bloco de 1024 bytes
-H, --si
Exibe tamanhos em potência de 1000
-l, --local
Limita aos sistemas de arquivos locais
-m, --megabytes
Exibe tamanhos em Megabytes
-T, --print-type
Exibe o tipo dos sistemas de arquivos
-i, --inodes
Exibe informações sobre inodos
du [ opções ] arquivos
Resume a utilização do disco de cada arquivo e diretórios.
Algumas opções:
-a, --all
Contabiliza todos os tipos de arquivos
-h, --human-readable
Exibe tamanhos em potência de 1024
-k, --kilobytes
Utiliza bloco de 1024 bytes
-H, --si
Exibe tamanhos em potência de 1000
-b, --bytes
Exibe tamanho em bytes
-c, --total
Exibe total
-m, --megabytes
Exibe tamanho em Megabytes
-s, --sumarize
Exibe sub-totais
-L, --dereference
Dereferencia os symbolic links
Utilizando o Linux
93
free [ opções ]
Exibe o total de memória física e de swap livre, incluindo a memória
compartilhada e buffers usados pelo kernel.
Algumas opções:
-b
Total em bytes
-k
Total em kilobytes
-m
Total em megaytes
-o
Inibe impressão da linha de ajuste de
buffers (subtraido/adicionado à memória)
-t
Exibe o total
-s segundos
Exibe continuamente de segundos em
segundos
94
Utilizando o Linux
ps [ opções ] [ PID ] ...
Mostra os processos (de identificação PID) e seus estados.
Algumas opções:
-A
Todos os processos
-u usuário
Processos do usuário usuário
-t tty
Processos do terminal tty
-V
Mostra a versão
-w
Saída mais ampla
-l
Saída longa
-r
Mostra apenas processos em execução
v
Memória virtual
u
Orientado a usuário
x
Processos sem tty
a
Inclui outros terminais e processos
g
Inclui líderes de grupo
e
Mostra variáveis de ambiente
pstree [ opções ] [ PID | usuário ]
Mostra a árvore de processos (a partir do processo PID).
Algumas opções:
-a
Mostra a linha de comandos
-p
Mostra os PIDs
-u
Mostra a transição de usuário
-l
Não trunca linhas longas
-h
Ressalta processo corrente e antecessores
Ressalta o processo pid e antecessores
-H pid
-G
Utiliza caracteres semi-gráficos VT-100
pidof [ opções ] programa ...
Mostra o PID de cada programa especificado
Algumas opções:
-s
Mostra apenas 1 PID
-x
Mostra PIDs de scripts
-o PID
Omite o PID especificado
Utilizando o Linux
95
fg [ job ]
% [ job ]
Coloca o job especificado (nome do processo ou número) em foreground.
bg [ job ]
Coloca o job especificado em background. É muito útil quando um
processo em foreground é suspenso por ¦+Z (que gera o sinal SIGSTOP).
jobs [ opções ] [ job ]
Lista os processos ativos, disparados em background.
Algumas opções:
-l
Exibe o PID e outras informações
-p
Exibe apenas o PID
-r
Exibe apenas os jobs em execução
-s
Exibe apenas os jobs parados (stopped)
at [ -V ] [ -q fila ] [ -f arq ] [ -mldbv ] hora
atq -c job [ job ] ...
atrm [ -V ] job [ job ] ...
Enfilera, lista ou remove processos para execução
Algumas opções:
-q fila
Usa a fila fila.Deve ser uma letra do
conjunto [a-zA-Z].
-m
Envia um e-mail ao usuário quando o job
terminar
-d
Apelido para atrm (remove processos)
-l
Apelido para atq (lista processos)
-v
Mostra a hora que o job será executado
Lê o job do arquivo arq e não da entrada
-f arq
padrão
96
Utilizando o Linux
crontab [ -u usuário ] arquivo
crontab [ -u usuário ] { -l | -r | -e}
Manipula os arquivos do cron dos arquivos
Algumas opções:
-u usuário
Edita a tabela do usuário
-l
Lista a tabela
-r
Remove a tabela
-e
Edita a tabela
Os arquivos crontab contém instruções para o comando cron para que
este execute um determinado comando em uma determinada hora de uma
determinada data. Os comandos são executados como os usuários donos dos
arquivos.
Uma linha do arquivo crontab pode ser uma atribuição a uma variável
de ambiente na forma:
nome = valor
ou um comando para o cron na forma com 6 campos:
minutos
horas
dias-do-mês
mês
dia-da-semana
comando
0-59
0-23
0-31
0-12 (ou nomes)
0-7 (0 ou 7 é domingo ou nomes)
Cada um dos primeiros cinco campos pode conter uma lista de faixas
separadas por vírgula. Uma faixa pode ser seguida por /número que significa
saltar o número dentro da faixa. Por exemplo, 0-8/2 significa 0, 2, 4, 6, 8.
Utilizando o Linux
97
top [ opções ]
Mostra os processos em execução. Permite enviar um sinal a um processo ou
ainda alterar a prioridade dele.
Algumas opções:
d atraso em segundos
Tempo entre exibições
Número de processos a exibir
p número do processo
b
Modo batch
s
Modo seguro
(inibe comandos perigosos)
C
Totaliza estado das CPUs
k
Envia um sinal a um processo
r
Altera a prioridade (renice) de um
process
11:11pm up 1 day, 18:53, 4 users, load average: 0.46, 0.49, 0.67
67 processes: 65 sleeping, 2 running, 0 zombie, 0 stopped
CPU states: 8.7% user, 2.8% system, 0.0% nice, 88.4% idle
Mem: 126448K av, 121332K used,
5116K free,
0K shrd,
2476K buff
Swap: 104412K av, 70488K used, 33924K free
27848K cache
PID
851
11572
720
7610
11422
1
2
4
5
6
7
8
9
360
363
445
USER
hmarx
hmarx
root
hmarx
hmarx
root
root
root
root
root
root
root
root
root
root
bin
PRI NI SIZE RSS SHARE STAT %CPU %MEM
TIME COMMAND
5
0 2360 1164
736 S
7.9 0.9 166:50 kdeinit
18
0 1092 1092
868 R
2.1 0.8
0:00 top
20
0 32736 22M
920 S
1.1 18.5 128:59 X
20
0 1640
60
44 R
0.2 0.0
3:29 kdeinit
20
0 4664 4664 3284 S
0.2 3.6
0:01 kvt
20
0
76
64
44 S
0.0 0.0
0:03 init
20
0
0
0
0 SW
0.0 0.0
0:03 keventd
20 19
0
0
0 SWN
0.0 0.0
0:00 ksoftirqd_CPU0
19
0
0
0
0 SW
0.0 0.0
0:14 kswapd
2
0
0
0
0 SW
0.0 0.0
0:00 bdflush
20
0
0
0
0 SW
0.0 0.0
0:00 kupdated
20
0
0
0
0 SW
0.0 0.0
0:02 kinoded
0 -20
0
0
0 SW<
0.0 0.0
0:00 mdrecoveryd
20
0
256 216
144 S
0.0 0.1
0:00 syslogd
20
0
640
4
0 S
0.0 0.0
0:00 klogd
20
0
88
4
0 S
0.0 0.0
0:00 portmap
Teclando-se h é exibida uma tela com os comandos para alterar a exibição.
98
Utilizando o Linux
kill [ -s nome do sinal | -n número do sinal | -sinal] pid ...
kill -l [ sinal ]
Envia um sinal para o(s) processo(s) ou lista o(s) sinai(s) definidos.
Algumas opções:
-l, --list
Exibe os sinais disponíveis
Envia o sinal de nome dado
-s nome do sinal
-n número do sinal
Envia o sinal de número dado
-p
Apenas imprime os PIDs
Normalmente, as teclas ¦+Z, ¦+\ e ¦+C são definidas para os
sinais SIGSTOP, SIGQUIT e SIGINT respectivamente (veja stty).
killall [ opções ] nome
Envia um sinal para o(s) processo(s) de nome nome, comparando por default,
os 15 primeiros caracteres.
Algumas opções:
-l, --list
Exibe os sinais disponíveis
-e, --exact
Compara todo o nome do processo.
Envia o sinal especificado
-s nome do sinal
-i, --interactive
Pede confirmação
-v, -verbose
Exibe informações sobre o envio do sinal
-w, --wait
Espera o(s) processo(s) terminar(em)
nice [ opções ] [ comando ] [ argumentos ]
Executa o comando comando com ajuste de prioridade selecionada. O ajuste
pode ser de -20 (maior prioridade) até 19 (menor prioridade). O default é 10.
Algumas opções:
-n ajuste, --adjustment=ajuste
--version
--help
Utilizando o Linux
renice prioridade [ [-p] pid ... ] [ [-g] pgid ... ] [ [-u] users ... ]
Altera a prioridade de um comando em execução.
Algumas opções:
Número(s) do(s) processo(s)
-p pid
-g pgid
GID dos processos
Nome(s) do(s) usuário(s)
-u user
time
[ -p ] comando [ argumentos ]
Temporiza a execução de um comando.
Algumas opções:
-p
Imprime no formato POSIX
/usr/bin/time
[ opções ] comando [ argumentos ]
Temporiza a execução de um comando.
Algumas opções:
-p
Imprime no formato POSIX
-f frmt, --format=frmt
Usa o formato frmt
-o arq, --output arq
Envia a saída para o arquivo arq
-a, --append
Adiciona a saída no arquivo
-v, --verbose
Imprime informações adicionais
99
100
Utilizando o Linux
xargs
[ opções ] [ comando [ argumentos ] ]
Cria e executa linhas de comandos a partir da entrada padrão. O comando
default é o echo.
Algumas opções:
-p, -- interactive
Modo interativo
-t, --verbose
Modo verboso
-e [ eof-str ], --eof [=eof-str ]
Define a cadeia para fim de arquivo
Usa no máximo n linhas para cada
-l [ n ], --max-lines [=n ]
linha de comando (default = 1).
-n n, --max-args=n
Usa no máximo n argumentos para
cada linha de comando
-s n, --max-chars=n
Usa no máximo n caracteres para
cada linha de comando
-r, --no-run-if-empty
Não executa o comando se a
entrada padrão gerar uma linha
em branco.
-P n, --max-procs=n
Limita ao máximo de n processos
por vez (default é 1)
-x, --exit
Termina se o tamanho definido na
opção -s é excedido
hmarx@thor:~> echo A B C D E | xargs -n 2 echo "Argumentos = "
Argumentos = A B
Argumentos = C D
Argumentos = E
hmarx@thor:~> ls *.aw | xargs -n 1 wc
10650
56164 439209 ApostilaLinux.aw
15870
84192 651345 apcaixa.aw
15870
84192 651345 apcaixa.orig.aw
229
914
8309 apcapa.aw
1098
5414
35950 appendix.aw
734
3897
26070 apresentacao_starix.aw
hmarx@thor:~>
o
Utilizando o Linux
101
find [ caminho ] [ expressão ]
Encontra arquivos e executa a expressão. O caminho default é o diretório
corrente.
A expressão pode ser:
( expr )
! expr
expr1 -a expr2
expr1 -o expr2
ou
ou
ou
-not expr
expr1 -and expr2
expr1 -or expr2
E pode incluir opções como:
-links número
-name padrão
-atime número
-ctime número
-mtime número
-cnewer arquivo
-type tipo
-uid UID
-printf formato
-inum número
-print
-empty
-true
-false
-size número [ b | c | k | w ]
-ok comando ;
-exec comando ;
A cadeia de caracteres {}, no comando, será substituída pelo nome de cada
arquivo encontrado. Note que deverá ser utilizado \; no prompt do bash para
que o ; não seja interpretado como separador de comandos.
locate [ opções ] padrão ...
Lista os arquivos da base de dados /var/lib/locatedb que
combinam com o(s) padrões fornecidos
Algumas opções são:
-e. --existing
Imprime os arquivos que existem
-i, --ignore-case
Ignora maiúsculas e minúsculas
O programa /usr/bin/updatedb atualiza a base de dados do locate.
Normalmente ele é disparado pelo cron.
102
Utilizando o Linux
chown [ opções ] dono [ { . | : } grupo ] arquivos
chown [ opções ] { . | : } grupo arquivos
chgrp [ opções ] grupo arquivos
Muda o dono e/ou o grupo de arquivo(s) e diretórios.
Algumas opções:
-R, --recursive
Modo recursivo
-f, --silent
Suprime mensagens de erro
-v, --verbose
Exibe mensagens durante o
processo
-h, --no-dereference
Altera o symbolic link e não o
arquivo
-c, --changes
Exibe mensagens apenas quando há
alguma alteração
Utilizando o Linux
103
chmod [ opções ] modo [, modo ] ... arquivos
chmod [ opções ] modo em octal ... arquivos
Altera a permissão de arquivos e diretórios
Algumas opções:
-v, --verbose
Exibe mensagens durante o processo
-R, --recursive
Modo recursivo
-f, --silent, --quiet
modo { u | g | o | a }* { + | - | = } { r | w | x | X | s | t | u | g | o }*
r = read
w = write
x = execute
t = stick
s = SUID ou SGID
modo em octal é um número na base 8 representando os modos.
Este número poderá variar de 0000 a 7777.
Normalmente apenas os modos rwx são modificados.
Bits
11
10
9
8
7
6
5
4
3
2
1
0
Significado
sticky bit
SGID
SUID
r para o dono
w para o dono
x para o dono
r para o grupo
w para o grupo
x para o grupo
r para os outros
w para os outros
x para os outros
O comando ls irá mostrar, no
lugar do x correspondente:
S
s
T
t
p/ SUID ou SGID
p/ SUID ou SGID e execute
p/ Sticky bit
para Sticky bit e execute
hmarx@thor:~/test> ls -l arquivo
-rw------- 2 hmarx
starix
1736 Mar 26 12:27 arquivo
hmarx@thor:~/test > chmod 644 arquivo
hmarx@thor:~/test> ls -l arquivo
-rw-r--r-- 2 hmarx
starix
1736 Mar 26 12:27 arquivo
hmarx@thor:~/test> chmod g+w,o-r arquivo
hmarx@thor:~/test> ls -l arquivo
-rw-rw---- 2 hmarx
starix
1736 Mar 26 12:27 arquivo
hmarx@thor:~/test>
o
104
Utilizando o Linux
Um diretório "executável" permite caminhar para ele. Um diretório com
sticky só permite que seus arquivos sejam apagados por seus respectivos donos.
Um diretório SGID faz com que os arquivos nele criados herdem o grupo do
diretório.
which [ opções ] [ programa ] ...
type [ opções ] [ programa ] ...
Mostra o caminho completo de programas.
Algumas opções:
-a
Identifica aliases e programas
-t
Mostra o tipo
hmarx@thor:~/test> which ls
/bin/ls
hmarx@thor:~/test> type -a ls
ls is aliased to ‘ls $LS_OPTIONS‘
ls is /bin/ls
hmarx@thor:~/test> which passwd
/usr/bin/passwd
hmarx@thor:~/test> o
file [ opções ] [ arquivo ] ...
Determina o tipo dos arquivos utilizando as definições
/usr/share/misc/magic.
Algumas opções:
Lê os nomes dos arquivos de arq
-f arq
-z
Pesquisa em arquivos comprimidos
-L
Segue symbolic links
em
Utilizando o Linux
105
basename nome [ sufixo ]
Imprime o nome retirando os diretórios e opcionalmente o sufixo
hmarx@thor:~/test> basename /x/y/z/w/arquivo.dat
arquivo.dat
hmarx@thor:~/test> basename /x/y/z/w/arquivo.dat
arquivo
hmarx@thor:~/test>
o
dirname nome
Imprime o nome retirando o último componente do diretório.
hmarx@thor:~/test> dirname /x/y/z/w/arquivo.dat
/x/y/z/w
hmarx@thor:~/test> dirname ~hmarx
/home
hmarx@thor:~/test>
o
.dat
106
Utilizando o Linux
history [ -c ] [ -d offset ] [ n ]
history [ -w ] [ -r ]
Mostra os últimos n comandos executados, ou apaga o comando de número n
do histórico. Um comando anterior pode ser referenciado utilizando o
operador !, seguido do número do comando.
Algumas opções:
-w arquivo
Salva o histórico no arquivo arquivo
-r arquivo
Lê o histórico do arquivo arquivo
-a arquivo
Adiciona o histório ao arquivo arquivo
-c
Apaga o histórico
Apaga a entrada offset do histórico
-d offset
hmarx@thor:~> history 5
512 cd
513 basename /x/y/z/w/arquivo.dat
514 basename /x/y/z/w/arquivo.dat .dat
515 dirname /x/y/z/w/arquivo.dat
516 dirname ~hmarx
hmarx@thor:~> !514
basename /x/y/z/w/arquivo.dat .dat
arquivo
hmarx@thor:~>
o
Utilize as setas para cima e para baixo para percorrer os comandos no
histórico.
Pode-se começar a digitação de um comando e pressionar a tecla º. O bash
tentará completar o comando utilizando os executáveis encontrados no
PATH. Caso sejam encontrados mais de um nome, soará um beep.
Pressionando º novamente, fará com que o bash liste os comandos
encontrados. Utilizando as teclas Å e Æ, pode-se caminhar pelos comandos
que iniciam com os caracteres digitados.
Utilizando o Linux
107
Meta-teclas
A tecla ¸ indica que a próximo caracter teclado será uma meta-tecla. São
representadas por M-x nas documentações do bash. As mais utilizadas são:
+t
¸+*
¸
¸
+{
+b
¸+f
¸+d
¸+Ì
¸+<
¸+>
¸+¦ +E
¸+u
¸+l
¸+c
¸
troca as duas palavras anteriores
expande os nomes de arquivos iniciados pela palavra
anterior
expande os nomes de arquivos iniciados pela palavra
anterior usando expressões regulares
volta para o início da palavra anterior
avança para o fim da palavra
apaga a palavra da frente
apaga a palavra de trás
volta ao início do history
vai para o fim do history
expande a linha (variáveis e aliases)
passa a palavra seguinte para maiúsculas
passa a palavra seguinte para minúsculas
passa a primeira letra da palavra seguinte para
maiúscula e as demais para minúsculas.
108
Utilizando o Linux
dd [ opções ] ...
Copia um arquivo, convertendo ou formatando de acordo com as opções.
(Note que um arquivo pode ser um dispositivo.)
Algumas opções:
bs=tamanho do bloco em bytes para leitura e escrita
cbs=número de bytes a converter de cada vez
conv=lista de conversões separadas por vírgulas
ascii
de EBCDIC para ASCII
ebcdic
de ASCII para EBCDIC
lcase
transforma em minúsculas
ucase
transforma em maiúsculas
swab
troca cada par de bytes
ibs=número de bytes do bloco para leitura
if=arquivo de entrada
obs=número de bytes do bloco para escrita
of=arquivo de saída
skip=número de blocos a saltar na entrada
seek=número de blocos a saltar na saída
Os blocos e bytes podem ser dados com sufixos multiplicativos como:
10c
10 caracteres de 1 byte
5w
5 palavras (2 bytes)
8b
8 blocos de 512 bytes
15k
15 blocos de 1024 bytes
3M
3.145.728 bytes (3 Mbytes)
hmarx@thor:~/test> dd if=/dev/fd0 of=floppy.image
2880+0 records in
2880+0 records out
hmarx@thor:~/test> ls -l floppy.image
-rw-r--r--
1
hmarx
hmarx@thor:~/test>
o
starix
1474560 Jun 12 15:29 floppy.image
Utilizando o Linux
109
split [ opções ] [ entrada [ prefixo ] ]
Gera partes da entrada em arquivos começando com o prefixo e terminando
sequencialmente em aa, ab, ac, ...
Algumas opções:
-b tam, --bytes=tam
Gera arquivos de tamanho tam bytes
Gera no máximo tam bytes sem quebrar
-C tam, --line-bytes=tam
linhas
-n, -l n, --lines=n
Gera n linhas por arquivo
O tamanho pode ter um sufixo multiplicador: b para 512, k para 1K e m
para 1 Mega.
Para reunir as partes recompondo o arquivo original utiliza-se o comando
cat. Veja o exemplo abaixo:
hmarx@venus:~/test> ls -lh file.dat
-rw-r----- 1 hmarx linuxtech 2.8M 2009-07-20 13:10 file.dat
hmarx@venus:~/test> split -b 1024k file.dat parthmarx@venus:~/test> ls -lh part-a*
-rw-rw---- 1 hmarx linuxtech 1.0M 2009-07-20 13:12 part-aa
-rw-rw---- 1 hmarx linuxtech 1.0M 2009-07-20 13:12 part-ab
-rw-rw---- 1 hmarx linuxtech 775K 2009-07-20 13:12 part-ac
hmarx@venus:~/test> cat part-aa part-ab part-ac > all-parts.dat
hmarx@venus:~/test> ls -lh all-parts.dat
-rw-rw---- 1 hmarx linuxtech 2.8M 2009-07-20 13:12 all-parts.dat
hmarx@venus:~/test> diff all-parts.dat file.dat
hmarx@thor:~/test>
o
110
Utilizando o Linux
Backup
tar opções [ arquivos ] ...
TAR : Tape Archive and Restore
É o programa padrão de backups do Unix.
Algumas opções:
t
Lista o backup
x
Extrai o conteúdo do backup
c
Cria um backup
z
Faz backup comprimido com gzip
j
Faz backup comprimido bzip2
f
Informa arquivo ou dispositivo de backup
v
Prolixo (verbose)
u
Atualiza o backup
zip opções [ arquivos ] ...
Cria arquivos .ZIP
Algumas opções:
-T
-v
-c
-r
-f
-m
-u
Testa o arquivo.ZIP
Prolixo (verbose)
Cria comentários
Recursivo
Apenas arquivos alterados (freshen)
Move os arquivos
Apenas arquivos alterados ou novos
unzip opções [ arquivos ] ...
Extrai conteúdo de arquivos .ZIP
Algumas opções:
-t
Testa o arquivo.ZIP
-v
Prolixo (verbose)
-q
Modo silencioso
-p
Extrai para saída padrão (útil em pipes)
Utilizando o Linux
111
gzip [ opções ] [ arquivos ] ...
gunzip [ opções ] [ arquivos ] ...
zcat [ opções ] [ arquivos ] ...
Comprime ou expande arquivos utilizando o algoritmo LZW. Cada arquivo é
substituído pela versão comprimida ou expandida.
Algumas opções:
-c, --stdout
Comprime ou expande para a saída padrão
-d, --decompress
Expande os arquivos (bunzip2)
-t, --test
Testa a integridade dos arquivos
-l, --list
Exibe informações sobre os arquivos
-1, --fast
Comprime mais rápido
-9, --best
Comprime melhor
-r, --recursive
Opera recursivamente em diretórios
Utiliza o sufixo .suf na compressão
-S .suf, --suffix .suf
-v, --verbose
Modo verboso
bzip2 [ opções ] [ arquivos ] ...
bunzip2 [ opções ] [ arquivos ] ...
bzcat [ -s ] [ arquivos ] ...
Comprime ou descomprime arquivos
Algumas opções:
-c, --stdout
Descomprime para saída padrão (bzcat)
-d
Descomprime (bunzip2)
-t, --test
Testa a integridade dos arquivos
-k, --keep
Mantém os arquivos originais
xz [ opções ] [ arquivos ] ...
unxz [ opções ] [ arquivos ] ...
xzcat [ -s ] [ arquivos ] ...
Comprime ou descomprime arquivos
Opções similares ao gzip e bzip2
112
Utilizando o Linux
compress opções [ arquivos ] ...
uncompress opções [ arquivos ] ...
Comprime ou descomprime arquivos
Algumas opções:
-d
Descomprime
-c
Apenas mostra na saída padrão
-v
Imprime estatística de compressão
-r
Recursivo
mt [ opções ] operação [ contador ]
MT : Magnetic Tape
Operações com fita magnética
Algumas opções:
-f dispositivo, --file=dispositivo
-V, --version
Operações:
rewind
retension
weof
bsf
status
erase
datcompression
offline
setdensity
tell
seek
...
fsf
eom
Há ainda diversos aplicativos para comprimir/descomprimir arquivos como
lha, unrar, unace, freeze e zoo.
Utilizando o Linux
113
Operadores do bash
Redirecionamento de E/S
O bash permite que a entrada ou a saída de um processo seja
redirecionada para um arquivo. Para isto, são utilizados os operadores abaixo:
<
>
>>
2>
>&n
m>&n
<<texto
redireciona a entrada padrão
redireciona a saída padrão
concatena a saída padrão
redireciona a saída de erros
redireciona a saída padrão e a de erros, opcionalmente
para a saída do descritor n
redireciona a saída do descritor m para a mesma saída do
descritor n
trata a entrada padrão até encontrar texto.
Os descritores padrão são:
0 - entrada padrão
1 - saída padrão
2 - saída de erros
hmarx@thor:~/arqs> echo Este é um teste. > mensagem
hmarx@thor:~/arqs> cat mensagem
Este é um teste.
hmarx@thor:~/arqs> echo Mais testes. >> mensagem
hmarx@thor:~/arqs> cat mensagem
Este é um teste.
Mais testes.
hmarx@thor:~/arqs> cat <<_fim_do_texto_ > mensagem
> Uma linha de texto
> Duas linhas de texto
> _fim_do_texto_
hmarx@thor:~/arqs> cat mensagem
Uma linha de texto
Duas linhas de texto
hmarx@thor:~/arqs>
o
114
Utilizando o Linux
Pipeline
A saída de um programa pode se tornar a entrada para outro. Basta utilizar
o operador "|". Pode-se então gerar um pipeline ou linha de montagem:
$ programa1 | programa2 | programa 3 | ...
Cada programa processa a saída do anterior e fornece a entrada para o
próximo. Tarefas complexas podem ser feitas utilizando diversos aplicativos
simples com funções específicas.
hmarx@thor:~/arqs> echo "Maria e José" |
ésoJ e airaM
hmarx@thor:~/arqs>
rev
o
Separador de comandos
Você pode digitar diversos comandos em uma única linha: basta separálos por ";".
hmarx@thor:~/arqs> pwd
/home/hmarx
hmarx@thor:~/arqs> date
Fri Mar 30 19:38:39 BRT 2001
hmarx@thor:~/arqs> pwd ; date ; who
/home/hmarx
Fri Mar 30
19:38:48 BRT 2001
root
:0
Mar 30
18:12 (console)
root
ttyp0
Mar 30
18:45
hmax
ttyp1
Mar 30
16:06
hmarx@thor:~/arqs>
o
Utilizando o Linux
115
Disparando processos em background
Um processo que vai demorar muito tempo, ou que não requer
interatividade com o usuário, pode ser disparado em background. Basta incluir
um "&" após o comando. O bash irá executá-lo em background, informando o
número do job e seu PID.
hmarx@thor:~> cc -o programa programa.c &
[1] 22851
hmarx@thor:~> ps
22768
p7 S 0:33 bash
22773
p1 S 0:27 bash
22851
p1 S 0:00 cc -o programa programa.c
22853
p1 R 0:00 ps
hmarx@thor:~>
o
116
Utilizando o Linux
Agrupando comandos
Um conjunto de comandos pode ser agrupado para que o resultado seja
equivalente a um só utilizando chaves, "{" e "}". Um uso típico é o
redirecionamento da saída de todos os comandos do conjunto. Os comandos serão
executados pelo mesmo shell.
$ { comando1 ; comando2 ; ... }
hmarx@thor:~> A=outer ; { A=inner; echo $A ; } ; echo $A
inner
inner
hmarx@thor:~>
o
Agrupando processos em um subshell
Algumas vezes é necessário disparar um subshell para executar uma
sequência de comandos (para criar um novo ambiente ou para trabalhar
temporáriamente em outro diretório). Para isto basta colocar os comandos entre
parêntesis, "(" e ")".
$ ( comando1 ; comando2 ; ... )
hmarx@thor:~> pwd; (cd /usr/local/bin; pwd); pwd
/home/hmarx
/usr/local/bin
/home/hmarx
hmarx@thor:~>
o
Note a diferença do agrupamento de comandos:
hmarx@thor:~> A=outer ; ( A=inner; echo $A ) ; echo $A
inner
outer
hmarx@thor:~>
o
Utilizando o Linux
117
Substituição de comandos
A saída de um comando pode substituir um comando utilizando as formas
$(comando) ou ‘comando‘ (crases). A primeira forma é mais interessante por
permitir aninhamento. Isto é muito utilizado em avaliações de expressões a serem
assinaladas a variáveis.
hmarx@thor:~> A=123
hmarx@thor:~> A=‘expr $A + 1‘
hmarx@thor:~> echo $A
124
hmarx@thor:~> echo Estamos no ano de $(date +%Y) \!
Estamos no ano de 2009 !
hmarx@thor:~> echo "$(host -t A $(uname -n) |
> sed ’s/^[^0-9]*//’) é o IP da minha máquina"
192.168.200.3 é o IP da minha máquina
hmarx@thor:~>
o
118
Utilizando o Linux
Expressões aritméticas
O comando:
$ (( expressão ))
retornará 0 se a expressão retornar um valor diferente de 0. Podem ser
utilizados também os operadores da linguagem C. Abaixo são listados os
operadores aceitos pelo bash em ordem de precedência descendente.
Operadores
id++
id-++id
--id
+
!
~
**
*
/
%
+
<<
>>
<= >= < >
==
!=
&
^
|
&&
||
expr ? expr : expr
= *= /= += -=
<<=
>>=
&=
^=
|=
expr1 , expr2
Significado
Pós-incremento e Pós-decremento da variável id
Pré-incremento e Pré-decremento da variável id
Sinais unários mais e menos
Negação lógica bit a bit, AND
Exponenciação
Multiplicação, divisão e módulo (resto da
divisão)
Adição e subtração
Deslocamento para a esquerda e direita
Comparação de desigualdade
Comparação de igualdade
Operador E bit a bit (AND)
Operador OU exclusivo (XOR)
Operador OU inclusivo bit a bit (OR)
Operador E lógico (AND)
Operador OU lógico (OR)
Expressão condicional
Assinalamento
Execução sequencial
Utilizando o Linux
119
Exemplos:
hmarx@thor:~>
51
hmarx@thor:~>
512
hmarx@thor:~>
hmarx@thor:~>
hmarx@thor:~>
A=11
hmarx@thor:~>
45
hmarx@thor:~>
31
hmarx@thor:~>
2
hmarx@thor:~>
hmarx@thor:~>
21
hmarx@thor:~>
echo $((( 3 * 17 )))
echo $((( 2 ** 9 )))
A=10
(( ++A ))
echo A=$A
B=34; echo $((( A + B )))
echo $((( 012 | 027 )))
echo $((( 012 & 027 )))
X=$((( 3 * 7 )))
echo $X
o
120
Utilizando o Linux
Expressões condicionais
O comando:
$ [[ expressão ]]
TRUE = Verdade é zero !
FALSE = Falso é qualquer valor
diferente de 0 !
retornará 0 se a expressão for verdadeira ou 1 se a expressão for falsa. Podem ser
utilizadas as seguintes opções e operadores na montagem das expressões:
Opção
-a arquivo
-b arquivo
-c arquivo
-d arquivo
-e arquivo
-f arquivo
-g arquivo
-h arquivo
-k arquivo
-p arquivo
-r arquivo
-s arquivo
-t fd
-u arquivo
-w arquivo
-x arquivo
-O arquivo
-G arquivo
-L arquivo
-S arquivo
-N arquivo
-o opção
-z string
-n string
string
Significado
O arquivo de nome arquivo existe
O arquivo existe e é dispositivo tipo bloco
O arquivo existe e é dispositivo tipo caracter
O arquivo arquivo é diretório
O arquivo arquivo existe
O arquivo arquivo existe e é um arquivo normal
O arquivo arquivo existe e tem atributo SGID
O arquivo arquivo existe e é um link simbólico
O arquivo arquivo existe e tem atributo sticky
O arquivo arquivo existe e um named pipe
O arquivo arquivo existe e tem permissão de leitura
O arquivo arquivo existe e tem tamanho maior que zero
O descritor de arquivos fd está aberto e é um terminal
O arquivo arquivo existe e tem atributo SUID
O arquivo arquivo existe e tem permissão de escrita
O arquivo arquivo existe e tem permissão de execução
O arquivo arquivo existe e pertence ao usuário
O arquivo arquivo existe e pertence ao grupo
O arquivo arquivo existe e é um link simbólico
O arquivo arquivo existe e é um socket
O arquivo arquivo existe e foi modificado após a última
vez que foi lido
A opção opção do shell está habilitadas
O tamanho do string é zero
O tamanho do string não é zero
O tamanho do string não é zero
Utilizando o Linux
Operador
arquivo1 -nt arquivo2
arquivo1 -ot arquivo2
arquivo1 -ef arquivo2
string1 == string2
string1 != string2
string1 < string2
string1 > string2
arg1 -eq arg2
arg1 -ne arg2
arg1
arg1
arg1
arg1
-lt
-le
-gt
-ge
arg2
arg2
arg2
arg2
121
Significado
O arquivo1 é mais novo que o arquivo2
O arquivo1 é mais antigo que o arquivo2
Os arquivos arquivo1 e arquivos2 são o
mesmo inodo do mesmo dispositivo
O string1 é igual ao string2
O string1 é diferente do string2
O string1 é lexicograficamente menor que o
string2
O string1 é lexicograficamente maior que o
string2
Os argumentos arg1 e arg2 são
aritmeticamente iguais
Os argumentos arg1 e arg2 são
aritmeticamente diferentes
arg1 é aritmeticamene menor que arg2
arg1 é aritmeticament menor ou igual a arg2
arg1 é aritmeticament maior que arg2
arg1 é aritmeticament maior ou igual a arg2
Exemplos:
hmarx@thor:~> [[ ! -a DIR ]] && mkdir DIR && echo Diretório DIR criado
Diretório DIR criado
hmarx@thor:~> [[ abacate < abacaxi ]] && echo Abacate precede Abacaxi
Abacate precede Abacaxi
hmarx@thor:~> [[ laranja > banana ]] || echo Laranja precede Banana
hmarx@thor:~> [[ -N /var/spool/mail/hmarx ]] && eho Tenho e-mail novo
Tenho e-mail novo
hmarx@thor:~>
o
122
Utilizando o Linux
Comandos condicionais
Como uma linguagem de programação, o bash possui mecanismos para
tomadas de decisão ao executar os comandos. Convenciona-se que verdade é 0
(zero) e falso é qualquer valor diferente de 0. Isto vem do fato que a condição
pode ser, e normalmente é, o resultado da execução de um programa. O valor 0
(zero) significa nenhum erro.
Lembre-se:
Condicional simples:
if condição ;
then
comandos ;
fi
TRUE = Verdade é zero !
FALSE = Falso é qualquer valor
diferente de 0 !
Condicional composto tipo 1:
if condição ;
then
comandos1 ;
else
comandos2 ;
fi
hmarx@thor:~> true ; echo $?
0
hmarx@thor:~> false ; echo $?
1
hmarx@thor:~> if expr 3 \> 4
> then
>
ls
> else
>
ps
> fi
22768
p7 S 0:33 bash
27773
p1 S 0:27 bash
28003
p1 R 0:00 ps
hmarx@thor:~>
o
Utilizando o Linux
123
Condicional composto tipo 2:
if condição1 ;
then
comandos1 ;
elif condição2 ;
then
comandos2 ;
else
comandosn ;
fi

 Testes repetidos !

Execução condicional
Podem ser utilizados os operadores lógicos && e ||, significando E e OU,
respectivamente.
Assim, em:
$ comando1 && comando2
o comando2 só será executado se o comando1 retornar 0 (execução OK).
É equivalente ao comando:
if comando1 ; then comando2 ; fi
E em:
$ comando1 || comando2
o comando2 só será executado se o comando1 retornar um valor diferente
de 0 (falhar). É equivalente ao comando:
if ! comando1 ; then comando2 ; fi
124
Utilizando o Linux
Comandos iterativos
Teste de continuação do loop
while condição
do
comandos
done
Teste de fim do loop
until condição
do
comandos
done
hmarx@thor:~> for i in A B C D
> do
>
echo $i
> done
A
B
C
D
hmarx@thor:~>
o
Loop controlado
for nome [ in lista de palavras ]
do
comandos
done
Comando de seleção múltipla
case valor
padrão-1 )
comandos-1
;;
padrão-2 )
comandos-2
;;
...
esac
hmarx@thor:~> cat que_e
#!/bin/bash
case $1 in
[a-z]) echo $1 é letra minúscula ;;
[A-Z]) echo $1 é letra maiúscula ;;
[0-9]) echo $1 é numérico ;;
*)
echo $1 é caracter especial;;
esac
hmarx@thor:~ > que_e R
R é letra maiúscula
hmarx@thor:~>
o
Utilizando o Linux
Diversos padrões podem ser separados por | em um ítem do case.
Exemplo:
...
case $OPT in
help|ajuda)
Help
;;
start|iniciar)
StartService
;;
stop|parar)
StopService
;;
*)
echo "Use $0 {help | start | stop}"
echo "
$0 {ajuda | iniciar | parar}"
;;
esac
...
125
126
Utilizando o Linux
Comando para geração de menu
select nome [ in lista de palavras ]
do
comandos;
done
hmarx@thor:~> PS3="Escolha a fruta :"
hmarx@thor:~> select fruta in uva maçã pera nenhuma
> do
>
if [ $fruta == nenhuma ]
>
then
>
break
>
fi
>
echo Você escolheu $fruta
> done
1) uva
2) maçã
3) pera
4) nenhuma
Escolha a fruta :2
Você escolheu maçã
1) uva
2) maçã
3) pera
4) nenhuma
Escolha a fruta :4
hmarx@thor:~>
o
Utilizando o Linux
127
test [ expressão ]
test [ --help | --version ]
[ expressão ]
Comando interno do bash que avalia a expressão condicional expressão
retornando o resultado. O comando [ é um sinônimo para o comando test mas que
obriga a existência do ] para fechar o comando. Veja Expressões condicionais
para as opções e operadores utilizados na expressão.
hmarx@thor:~> [ -e /etc/named.conf ] && echo O
BIND está instalado
O BIND está instalado
hmarx@thor:~>
o
128
Utilizando o Linux
Comandos Administrativos
A seguir são mostrados alguns comandos principais utilizados para a
administração do sistema Linux. Alguns deles só pode ser executado pelo super
usuário.
umask [ -p ] [ -S ] [ modo ]
Comando interno do bash exibe ou define a máscara de criação de
arquivos. O modo pode ser dado na forma de um número octal ou
utilizando uma lista utilizando o formato u=rwx,g=rwx, o=rwx
Algumas opções:
-S
Exibe a máscara no formato t=rwx
-p
Exibe apenas a máscara no formato octal
ulimit [ opções ] [ limite ]
Comando interno do shell exibe ou altera os limites impostos na utilização
dos recursos do sistema pelos processos disparados pelo shell.
Algumas opções:
-S
Utiliza o limite soft
-H
Utiliza o limite hard
-a
Exibe todos os limites
-c
Tamanho do arquivo core
-d
Tamanho máximo do segmento de dados
-f
Tamanho máximo dos arquivos criados
-l
Tamanho da memória travada
-m
Tamanho máximo da memória residente
-n
Número máximo de arquivos abertos
-p
Tamanho do buffer do pipe
-s
Tamanho máximo da pilha
-t
Tempo máximo de uso de CPU
-u
Número máximo de processos
-v
Tamanho da memória virtual
Utilizando o Linux
129
useradd [ opções ] login
Cria um usuário.
Algumas opções:
-c comentário
-d dir
-e data
-f tempo
-g grupo
-G grupo, ...
-m
-p senha
-s shell
-u uid
-k skel-dir
-o
Campo de comentário do
/etc/passwd.
Define dir como diretório pessoal.
Define a data de expiração no formato
YYYY-MM-DD.
Define em quantos dias a conta do usuário
será desabilitada após a expiração da
senha.
Define o grupo inicial (de login).
Define a lista de grupos adicionais.
Cria o diretório pessoal e copia o esqueleto
para ele, se não existir.
Senha criptografada. O default é desabilitar
a conta.
Define o login shell.
Define o número do usuário UID (maior
que 99 e que qualquer outro UID
existente
Define o diretório do esqueleto. O default é
o /etc/skel.
Em conjunto com -u força a criação do
UID, mesmo que não único.
As informações são armazenadas nos arquivos /etc/passwd e
/etc/shadow. O arquivo /etc/passwd tem o seguinte formato:
usuário:x:uid:gid:Nome[,outras informações]:diretóriopessoal:shell
O x indica o uso do shadow suite, armazenando informações sobre as
senhas no arquivo /etc/shadow. Em sistemas antigos, no lugar do x era
colocada a própria senha criptografada do usuário. Um usuário poderá ser
desabilitado substituindo o x por !.
130
Utilizando o Linux
O arquivo /etc/shadow tem o seguinte formato:
usuário:senha criptografada:t1:t2:t3:t4:t5:t6:t7
onde:
a senha é criptografada utilizando DES - Data Encryption Standard,
ou opcionalmente MD5 - Message Digest 5.
t1 é o data da última alteração da senha
t2 é o número de dias até que a senha possa ser trocada
t3 é o número de dias até que a senha deva ser trocada
t4 é o número de dias anterior a expiração da senha
t5 é o número de dias para desabilitar a conta após a expiração da
senha
t6 é o data de desabilitação da conta
t7 é um campo reservado
Uma entrada com a senha criptografada em MD5 tem o formato parecido
com o abaixo:
usuario:$1$BziEuHN8$doX0S7wNN5U7bm5fQI1RR/:11697:0:99999:7:::
Uma entrada com a senha criptografada em Blowfish tem o formato
parecido com o abaixo:
usuario:$2a$10$bAo0qgHv61OYmYdkqscQN.wew4h4mgYVcY5Uj.fuXQI1RNgHYFO6G:13313:0:99999:7:::
Já uma entrada com senha criptografada em DES tem o formato parecido
com o abaixo:
usuario:Ak9K.CWRx7Fnk:11697:0:99999:7:::
O método de criptografia (des, md5, blowfish) pode ser definido no
arquivo /etc/default/passwd. Parâmetros adicionais de segurança podem
ser definidos em /etc/security/pam_pwcheck.conf.
Utilizando o Linux
131
useradd -D [ opções ]
Exibe ou atualiza a informação default para usuário novo. Estas
informações são armazenadas em /etc/default/useradd.
Algumas opções:
-D
Exibe as informações default atuais
Prefixo para o diretório pessoal. O login
-b dir
será adicionado automaticamente.
-e data
Data de expiraçãoda conta.
-f dias
Número de dias para desabilitar a conta
após a expiração da senha.
-g grupo
Grupo inicial.
Define o login shell.
-s shell
userdel [ -r ] login
Remove o usuário local login, e, se -r for especificado, todo o diretório
pessoal dele e sua caixa postal. O sistema não permite remover um usuário
que está logado.
groupadd [ -g gid [ -o ]] grupo
Cria um grupo com nome grupo e valor numérico gid, que deve ser único
se a opcão -o não for especificada.
groupdel grupo
Remove o grupo de nome grupo.
132
Utilizando o Linux
usermod [ opções ] login
Modifica um usuário.
Algumas opções:
-c comentário
-d dir
-e data
-f tempo
-g grupo
-G grupo, ...
-m
-p senha
-s shell
-u uid
-l novo-login
-L
-U
Campo de comentário do
/etc/passwd.
Define dir como diretório pessoal.
Define a data de expiração no formato
YYYY-MM-DD.
Define em quantos dias a conta do usuário
será desabilitada após a expiração da
senha.
Define o grupo inicial (de login).
Define a lista de grupos adicionais.
Cria o diretório pessoal e copia o esqueleto
para ele, se não existir.
Senha criptografada. O default é desabilitar
a conta.
Define o login shell.
Define o número do usuário UID (maior
que 99 e que qualquer outro UID
existente
Define o novo login.
Bloqueia o usuário (colocando ! no campo
de senha)
Desbloqueia o usuário (retirando o ! do
campo o de senha)
groupmod [ -g gid [ -o ]] [ -n novonome ] grupo
Altera a identificacão do grupo grupo para gid e/ou o nome do grupo
grupo para novonome .
Utilizando o Linux
133
chfn [ opções ] login
Altera as informações do usuário login no arquivo /etc/passwd. Se
não for dada nenhuma opção, o chfn exibirá ps valores de cada campo,
permitindo que seja alterado ou não.
Algumas opções:
Nome do usuário
-f nome completo
-w telefone
Telefone do trabalho
Número da sala
-r sala
-h telefone
Telefone pessoal
Outra informação não definida pelo campo
-o info
GCOS.
chsh [ -s shell ] [ login ]
Altera o login shell do usuário login ou do usuário corrente. O shell deve
estar definido em /etc/shells. Se não for informado o shell, chsh irá
exibir o corrente e permitirá que seja alterado ou não.
134
Utilizando o Linux
Tratamento dos Sistemas de Arquivos
mknod [ opções ] nome tipo major minor
Cria um arquivo especial (nodo), chamado nome, e tipo tipo. Major e
minor são os números que definem o arquivo especial (entrada na tabela
de estratégia do kernel e identificador do dispositivo). Estes números não
podem ser informados para o tipo p.
Os tipos são:
b
arquivo tipo bloco (com buffer)
c, u
arquivo tipo caracter (sem buffer)
p
arquivo tipo FIFO
Algumas opções:
Define modo de permissão
-m, --mode=modo
--help
Exibe uma ajuda
--version
Apenas exibe a versão
Utilizando o Linux
135
fdisk [ -u ] [ -b tam ] disp
fdisk -l [ -u ] [ -b tam ] disp ...
fdisk -s partição ...
Exibe ou manipula as partições dos discos.
Algumas opções:
-u
Mostra tamanho em setores e não em
cilindros.
-l
Apenas lista a tabela de partição dos
dispositivos especificados.
Exibe o tamanho da partição em blocos.
-s partição
-b tam
Define o tamanho do setor (512, 1024 ou
2048). Obs: kernels atuais já sabem o
tamanho do setor
-v
Exibe a versão do fdisk.
thor:~ # fdisk -l /dev/sdc
Disk /dev/sdc: 255 heads, 63 sectors, 1116 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot
/dev/sdc1
/dev/sdc2
/dev/sdc3
/dev/sdc5
/dev/sdc6
/dev/sdc7
/dev/sdc8
/dev/sdc9
thor:~ #
o
Start
1
18
82
82
74
66
721
913
End
17
81
1116
273
465
720
912
1116
Blocks
136521
514080
8313637+
1542208+
1542208+
2048256
1542208+
1638598+
Id
82
83
5
83
83
83
83
83
System
Linux swap
Linux
Extended
Linux
Linux
Linux
Linux
Linux
136
Utilizando o Linux
mkfs [ -V ] [ -t tipo ] [ opções ] disp [ blocos ]
Cria o sistema de arquivos de tipo tipo no dispositivo disp utilizando
blocos blocos, com as opções específicas do tipo definido. O número de
blocos por default é o tamanho de disp.
Algumas opções:
-V
Modo verboso.
Há mkfs.tipo (mkfs.ext2, mkfs.ext3, mkfs.vfat, mkfs.reiserfs, etc) que
podem ser utilizados para criar o sistema especificado.
mke2fs
[ opções ] disp [ blocos ]
Cria um sistema de arquivos ext2.
Algumas opções:
-c
Verifica o dispositivo por setores defeituosos no
dispositivo (bad-blocks).
-b tam
Usa tam (1024, 2048 ou 4096) como tamanho do
bloco.
-i b
Usa b bytes por inodo.
-L label
Define o label do volume.
-j
Cria um sistema journal ext3.
-J opções
Opções para o sistema journal ext3.
-n
Não cria o sistema de arquivos, apenas exibe o que
vai ser feito.
Define manualmente o número de inodos do
-N n
sistema de arquivos (que é normalmente baseado
no número de blocos e no número de bytes por
inodo).
-f tam
Define o tamanho do fragmento em bytes.
-v
Modo verboso.
Utilizando o Linux
mkdosfs
137
[ opções ] disp [ blocos ]
Cria um sistema de arquivos MS-DOS.
Algumas opções:
-A
Cria uma variante do Atari.
-b setor
Define o setor de backup do setor de boot para
FAT32.
-c
Verifica se há setores defeituosos no dispositivo.
-C
Cria um arquivo
-f n
Cria n (1 ou 2) FATs (default é 2).
Tamanho da FAT (12, 16 ou 32). Pelo tamanho
-F tam
do sistema de arquivos, será automaticamente
selecionado 12 ou 16. O tamanho de FAT 32
deve ser definido explicitamente, caso desejado.
-i volid
Define o identificador de volume (32 digitos em
hexadecimal).
Define o label do sistema de arquivos (no máximo
-n label
11 caracteres).
-r rootdir
Número de entradas do diretório raiz. O default é
112 ou 224 para disquetes e 512 para discos
rígidos.
Usa spc setores por cluster. Deve ser potência de
-s spc
2 (1, 2, 4, 8, ..., 128).
-S bps
Número de bytes por setor lógico (512, 1024,
2048, 8192, 16384 ou 32768).
Número de setores reservados. O default é 32 para
-R reserva
FAT 32, e 1 para FAT 12 ou 16.
-v
Modo verboso.
138
Utilizando o Linux
mkreiserfs [ opções ] disp [ blocos ]
Algumas opções:
-h { r5 | tea | rupasov}
Especifica a função hash para os nomes de
arquivos. O default é r5.
-v { 3.5 | 3.6}
Versão do formato do reiserfs.
-j path, --jounal-device path Caminho para o local de armazenamento
do jornal.
-s tam, --journal-size tam
Tamanho em blocos do jornal.
-t max, --transaction-max-size max
Tamanho máximo do jornal de transações.
mkswap [ opções ] disp [ tamanho ]
Cria uma área de swap no dispositivo ou arquivo disp.
Algumas opções:
-c
Verifica o dispositivo por blocos
defeituosos.
-p tam
Define o tamanho da página.
-v0
Cria uma área de swap com estilo antigo.
-v1
Cria uma área de swap com estilo novo.
swapon [ -h | -V ]
Algumas opções:
-h
-V
Exibe uma ajuda.
Exibe a versão
swapon -a [ -v ]
Ativa todas os dispositivos definidos como swap em /etc/fstab.
Algumas opções:
-v
Modo verboso.
Utilizando o Linux
139
swapon [ -v ] [ -p pri ] disp ...
Ativa a área de swap em disp com prioridade pri. A prioridade é um
número inteiro de 0 a 32767.
Algumas opções:
-v
Modo verboso.
swapon -s
Exibe o sumário de uso da(s) áreas de swap ativas.
thor:~ # swapon -s
Filename
/dev/sda1
/dev/sdb1
/dev/sdc1
/dev/sdd1
thor:~ #
o
Type
partition
partition
partition
partition
Size
530104
506008
506008
506008
Used
51976
51852
51736
52036
Priority
42
42
42
42
swapoff [ -h | -V ]
Algumas opções:
-h
-V
Exibe uma ajuda.
Exibe a versão
swapoff -a
Desativa todas os dispositivos definidos como swap em /etc/fstab.
swapoff disp
Desativa a área de swap em disp.
140
Utilizando o Linux
de quota
Para que um sistema de arquivos possa ter o controle do uso do espaço em
disco, le deve ser montado com a opção usrquota. Esta opção pode ser
incluída no arquivo /etc/fstab., como o exemplo abaixo:
/dev/disk/by-id/ata-ST3160215A_9RAB8FSE-part2 /work ext3,defaults,usrquota
Veja o comando mount mais a frente.
quota [ -F formato ] [ { -g | -u | -v | -s } | -q ]
quota [ -F formato ] [ { -u | -v | -s } | -q ] usuário
quota [ -F formato ] [ { -g | -v | -s } | -q ] grupo
Exibe a utilização e os limites do uso do disco e sistema de arquivos.
Algumas opções:
-F formato
Exibe a quota para o formato especificado,
(vfsold, vfsv0, rpc e xfs)
-g
Exibe a quota para grupos dos quais o
usuário é membro
-u
Exibe a quota dos usuários
-v
Exibe a quota em sistemas de arquivos que
não possuem área alocada
-s
Tenta escolher unidades para exibição das
quotas
-q
Exibe mensagens apenas para quotas
excedidas
Utilizando o Linux
141
quotaon [ -v | -u | -g | -f ] fs
quotaon -a [ -v | -u | -g | -f ]
Habilita o sistema de quotas no sistema de arquivos fs (ou em todos os
definidos em /etc/fstab). Os arquivos de controle de quotas devem
existir no diretório raíz do sistema de arquivos.
Algumas opções:
-a
Habilita quota para todos os sistemas de
arquivos não remotos (não NFS)
automaticamente montados
-v
Exibe mensagem para cada sistema de
arquivos tratado
-u
Trata quota de usuários
-g
Trata quota de grupos
-f
Equivale a quotaoff
quotaoff [ -v | -u | -g ] fs
quotaoff -a [ -v | -u | -g ]
Desabilita o sistema de quotas no sistema de arquivos fs (ou em todos os
definidos em /etc/fstab). Os arquivos de controle de quota devem
existir no diretório raíz do sistema de arquivos.
Algumas opções:
-a
Habilita quota para todos os sistemas de
arquivos não remotos (não NFS)
automaticamente montados
-v
Exibe mensagem para cada sistema de
arquivos tratado
-u
Trata quota de usuários
-g
Trata quota de grupos
142
Utilizando o Linux
repquota [ -v | -u | -g | { -t | -n } ] [ -F formato ] fs
repquota -a [ -v | -u | -g | -s | { -t | -n } ] [ -F formato ]
Sumariza as quotas de um sistema de arquivos.
Algumas opções:
-a
Reporta todos os sistemas de arquivos em
/etc/mtab
-v
Exibe todas as quotas e de forma mais
verbosa
-u
Trata quota de usuários
-g
Trata quota de grupos
-F formato
Exibe a quota para o formato especificado,
(vfsold, vfsv0, rpc e xfs)
-t
Trunca nome com mais de 9 caracteres
-n
Não resolve UID e GID
-s
Tenta exibir a quota em unidades mais
apropriadas
edquota [ -p protótipo | -u | -g | -r ] [ -F formato ] usuário ...
edquota [ -u | -g ] [ -F formato ] -t
Edita a quota de usuários.
Algumas opções:
-r
-u
-g
-F formato
-p protótipo
-t
Edita as quotas em máquinas remotas
Trata quotas de usuários
Trata quotas de grupos
Exibe a quota para o formato especificado,
(vfsold, vfsv0, rpc e xfs)
Duplica a quota do usuário protótipo para
os usuários especificados
Edita os limites de tempo soft.
Utilizando o Linux
143
setquota [ -r | -u | -g ] [ -F formato ] nome bsl bhl isl ihl { -a | fs}
setquota [ -r | -u | -g ] [ -F formato ] [ -p protótipo ] nome { -a | fs}
setquota -t [ -r | -u | -g ] [ -F formato ] bgrl igrl nome { -a | fs}
Estabelece quotas para usuários ou grupos para o sistema de arquivos fs.
Os limites são:
bsl
Limite de blocos soft
bhl
Limite de blocos hard
Limite de inodos soft
isl
ihl
Limite de inodos hard
Limite de blocos grace
bgrl
igrl
Limite de inodos grace
Algumas opções:
-r
Edita as quotas em máquinas remotas
-u
Trata quotas de usuários
-g
Trata quotas de grupos
Exibe a quota para o formato especificado,
-F formato
(vfsold, vfsv0, rpc e xfs)
-p protótipo
Duplica a quota do usuário protótipo para
os usuários especificados
-t
Edita os limites de tempo soft.
-a
Trata todos os sistemas de arquivos em
/etc/mtab
144
Utilizando o Linux
quotacheck [ -u | -g | -b | -c | -f | -i | -n | -v | -d | -M | -m | -R ] [ -F formato ] -a
quotacheck [ -u | -g | -b | -c | -f | -i | -n | -v | -d | -M | -m | -R ] [ -F formato ] fs
Verifica o sistema de arquivos, cria e repara os arquivos de quota
Algumas opções:
-b
Força a criação de arquivos de backup
-v
Modo verboso
-d
Modo de depuração
-u
Verifica apenas usuários em /etc/mtab
-g
Verifica apenas grupos em /etc/mtab
-c
Cria novos arquivos de quota
-f
Força a verificação de sistemas com o
o sistema de quotas já habilitado
-M
Força a verificação de sistemas de arquivos
montados read/write
-m
Não tenta montar um sistema read-only
-i
Modo interativo
-n
Duplica entradas para um usuário ou grupo
na reparação dos arquivos de quotas
-a
Verifica todos os sistemas de arquivos não
remotos (não NFS)
-R
Exclui o sistema de arquivos raiz
Exibe a quota para o formato especificado,
-F formato
(vfsold, vfsv0, rpc e xfs)
Duplica a quota do usuário protótipo para
-p protótipo
os usuários especificados
-t
Edita os limites de tempo soft.
Utilizando o Linux
145
mount [ { -l | -h | V } ]
Exibe os sistemas montados, uma ajuda ou a versão.
Algumas opções:
-l
Exibe o label se existir
-h
Ajuda sumária
-V
Versão do mount
--help
Exibe uma ajuda
mount -a [ { -f | -F | -n | -r | -s | -v | -w } ] [ -t tipo ]
Monta todos os sistemas de arquivos definidos em /etc/fstab,
opcionalmente do tipo tipo, que não possuam a opção noauto.
Algumas opções:
-f
Simula (fake). Útil com -v para ver o que o
mount irá fazer.
-F
Executa um fork, montando os sistemas de
arquivos simultaneamente.
-n
Monta os sistemas de arquivos sem gravar
as informações no arquivo /etc/mtab.
-r
Monta apenas para leitura (read-only).
Equivalente a -o ro
-s
Ignora opções não suportadas pelo sistema
de arquivos.
-v
Modo verboso.
-w
Monta em modo normal de leitura e escrita
(read/write). Equivalente a -o rw.
O Linux suporta atualmente diversos tipos de sistemas de arquivos. Entre eles
estão: adfs, affs, coherent, coda, devpts, ext, ext2, ext3, fat, hfs, hpfs,
iso9960, jffs, jfs, minix, msdos, ncp, nfs, ntfs, proc, qnx4, reiserfs, romfs,
smbfs, sysv, udf, ufs, umsdos, vfat, xenix, xfs, e xiafs.
É possível ainda montar uma parte do sistemas de arquivos em outra com
a opção --bind. As informações ficarão disponívis em dois lugares:
mount --bind diretório1 diretório2
146
Utilizando o Linux
mount [ { -f | -n | -r | -s | -v | -w } ] [ -o opções ] { disp | dir }
Monta o sistema de arquivos definido em /etc/fstab pelo dispositivo
disp, ou pelo diretório dir utilizando as opções opções.
Algumas opções de -o (que podem ser definidas em /etc/fstab):
rw
Normal de leitura e escrita.
ro
Apenas leitura.
[no]async
(Não) realiza operações de E/S de forma
assíncronas.
[no]auto
(Não) faz a montagem automática com a
opção -a
[no]exec
(Não) permite execução de arquivos
binários.
defaults
Equivale a rw, suid, dev, exec, auto,
nouser, e async.
[no]atime
(Não) atualiza tempo de acesso dos inodos.
[no]dev
(Não) interpreta arquivos especiais
[no]suid
(Não) permite atributos SUID e SGID nos
inodos.
[no]user
(Não) permite que usuários comuns
montem o sistema de arquivos
remount
Tenta remontar um sistema de arquivos já
montado.
loop[=dev]
Utiliza o loop device dev
Dependendo do tipo do sistema de arquivos, há outras opções disponíveis.
Utilize man mount para verificar as opções para cada tipo suportado pela
versão do kernel do Linux que esteja utilizando.
mount [ { -f | -n | -r | -s | -v | -w } ] [ -t tipo ] [ -o opções ] disp dir
Monta o sistema de arquivos do tipo tipo no dispositivo disp no diretório
dir, utilizando as opções opções.
Utilizando o Linux
147
umount [ { -h | -V } ]
Exibe uma ajuda ou a versão.
Algumas opções:
-h
Ajuda
-V
Versão do mount
umount -a [ { -n | -r | -v | -f } ] [ -t tipo ]
Desmonta todos os sistemas de arquivos, opcionalmente do tipo tipo,
definidos em /etc/fstab.
Algumas opções:
-n
Desmonta sem escrever em /etc/mtab.
-r
Em caso de falha, tenta remontar somente
para leitura.
-f
Força a desmontagem.
-v
Modo verboso.
umount [ { -n | -r | -v | -f} ] { disp | dir } ...
Desmonta os sistemas de arquivos montados do dispositivo disp ou no
diretório dir.
Algumas opções:
-n
Desmonta sem escrever em /etc/mtab.
-r
Em caso de falha, tenta remontar somente
para leitura.
-f
Força a desmontagem.
-v
Modo verboso.
148
Utilizando o Linux
Módulos de dispositivos e serviços
dmidecode [ opções ]
Lista a tabela DMI (Desktop Management Interface), que contem a
descrição dos componentes de hardware.
Algumas opções:
-h
Ajuda
-V
Versão do dmidecode
-d dev-mem
Lê a memória do dispositivo dev-mem
-q
Silencioso
-s texto
Exibe apenas entradas com o texto
-u
Não decodifica
-t tipo
Só exibe entrada do tipo especificado
Tipos válidos: bios, system, baseboard, chassis,
processor, memory, cache, connector e slot
venus:~ # dmidecode
# dmidecode 2.10
SMBIOS 2.3 present.
Handle 0x0001, DMI type 1, 25 bytes
System Information
Manufacturer: System Manufacturer
Product Name: System Name
Version: System Version
Serial Number: SYS-1234567890
UUID: Not Settable
Wake-up Type: Power Switch
Handle 0x002E, DMI type 32, 11 bytes
System Boot Information
Status: No errors detected
Utilizando o Linux
149
lspci [ opções ]
Lista todos os dispositivos do barramento PCI
Algumas opções:
-v
Verboso
-n
Mostra a identificação numérica
-t
Mostra a árvore dos dispositivos
-x
Mostra um dump em hexadecimal da área
de configuração do dispositivo
Mostra apenas os dispositivos especidicado
-s [[bus]:[slot]].[função]]
pelo barramento bus, slot e função, onde
o sinal * siginifica qualquer valor
-d [fornecedor]:[dispositivo] Mostra apenas os dispositivos identificados
com o ID do fornecedor e dispositivo.
Especifica outro diretório, o default é o
-P diretório
/proc/bus/pci
-M
Habilita o mapeamento do barramento
-G
Habilita depuração do acesso ao PCI
lsusb [ opções ]
Lista todos os dispositivos do barramento USB
Algumas opções:
-v, -vv
Verboso e mais verboso
-t
Mostra a árvore dos dispositivos
-p diretório
Especifica outro diretório, o default é o
/proc/bus/usb
-s [[bus]:[dispositivo]]
Mostra apenas os dispositivos especidicado
pelo barramento bus, e dispositivo.
-d [fornecedor]:[dispositivo] Mostra apenas os dispositivos identificados
com o ID do fornecedor e dispositivo.
-D dispositivo
Mostra apenas as informações sobre o
dispositivo especificado
150
Utilizando o Linux
usbview
Lista todos os dispositivos USB em modo gráfico.
pnpdump [ opções ] [ [ n ] porto ]
Mostra as informações sobre os n dispositivos Plug-And-Play do
barramento ISA através do porto porto. O porto deve estar na faixa 0x203 a 0x3ff.
Algumas opções:
-h, --help
Ajuda
-c, --config
Procura determinar a melhor configuração
-d, --dumpregs
Exibe o conteúdo de todos os registradores
de configuração
-i, --ignorecsum
Ignora erros de checksum.
-v, --version
Exibe a versão do pnpdump
-m, --mask
Exibe a máscara de DMAs e IRQs no lugar
da lista de números de DMA e IRQ
-o arq, --outpputfile=arq
Gera a saída no arquivo arq e não na saída
padrão
Utilizando o Linux
151
isapnp [ opções ] arq
Configura dispositivos do barramento ISA PnP a partir do arquivo de
configuração arq.
Algumas opções:
-h, --help
Ajuda
-c, --config
Procura determinar a melhor configuração
lsdev
Lista as informacões sobre o hardware instalado (DMA, IRQ e portos de I/O).
thor:~ # lsdev
Device
DMA
IRQ I/O Ports
-----------------------------------------------0000:00:04.1
0170-0177 01f0-01f7 0376-0376 03f6-03f6 d800-d80f
0000:00:04.2
d400-d41f
0000:00:04.3
d000-d01f
0000:00:04.4
e800-e80f
0000:00:06.0
b800-b8ff
0000:00:08.0
b400-b4ff
0000:00:09.0
b000-b0ff
0000:00:0a.0
a800-a83f
acpi
9
ACPI
e400-e403 e404-e405 e408-e40b e410-e415 e420-e423
aic7xxx
10
cascade
4
2
dma
0080-008f
dma1
0000-001f
dma2
00c0-00df
Ensoniq
a800-a83f
Ensoniq AudioPCI
11
152
Utilizando o Linux
lsmod [ opções ]
Lista os módulos carregados.
Algumas opções:
-h, --help
Ajuda
-V, --version
Exibe a versão do lsmod
insmod [ opções ] módulo [ symbol=valor ... ]
Insere um módulo carregável no kernel em execução.
Algumas opções:
-f, --force
Tenta carregar o módulo independente da
versão do kernel
-k, --autoclean
Torna o módulo auto removível quando
não utilizado por um período de tempo
pelo kerneld (normalmente 1 minuto)
-L, --lock
Utiliza o flock para evitar a carga
simultâneas do mesmo módulo
-m, --map
Exibe um mapa da carga
-n, --noload
Não carrega o módulo
-p, --probe
Testa se o módulo foi carregado com
sucesso
-s, --syslog
Envia a saída para o syslog
-X, --export
Exporta os símbolos externos do módulo
-x, --noexport
Não exporta os símbolos externos do
módulo
Define explicitamente o nome do módulo,
-o nome, --name=nome
não utilizando o nome do arquivo objeto
-h, --help
Ajuda sumária
-V, --version
Exibe a versão do insmod
Utilizando o Linux
153
rmmod [ { -a | -e | -r | -s | -h | -v | -V } ] [ -o opções ] { disp | dir }
Remove módulos carregados do kernel em execução
Algumas opções:
-a, --all
Marca os módulos não utilizados como
auto-removíveis e remove os já marcados
-r, --stacks
Remove uma pilha de módulos
-s, --syslog
Envia a saída para o syslog
-e, --persist
Salva os dados persistentes do módulo sem
remover o módulo
-h, --help
Ajuda sumária
-v, --verbose
Modo verboso
-V
Exibe a versão do rmmod
154
Utilizando o Linux
depmod { -a | -A } [ opções ]
depmod [ opções ] módulo1.o módulo2.o ...
Trata a descrição de dependência entre módulos carregáveis
Algumas opções:
-a
Pesquisa por módulos em todos os
diretórios especificados no arquivo de
configuração /etc/modules.conf
ou /etc/modprobe.conf
-A
Compara a data/hora dos arquivos e, se for
necessário, opera como -a
-e
Exibe os símbolos não definidos
-n
Exibe a lista de dependências na saída
padrão em vez de gravar no diretório
/lib/modules
-s
Envia os erros para o syslog
-q
Modo silencioso
-r
Permite a carga de módulos que não sejam
do usuário root
-h
Ajuda
Usa o diretório dir em vez do diretório
-b dir
/lib/modules
-C arquivo
Usa o arquivo de configuração arquivo, em
vez de /etc/modules.conf
Define o arquivo com o mapa de símbolos
-F simbolos
do kernel.
-V
Exibe a versão do depmod
Utilizando o Linux
155
modprobe [ { -a | -d | -n | -q | -v } ] [ -C arq ] módulo [ symbol=valor ... ]
modprobe [ { -a | -d | -n | -q | -v } ] [ -C arq ] [ -t tipo ] padrão
modprobe -l [ -C arq ] [ -t tipo ] padrão
modprobe -c [ -C arq ]
modprobe -r [ { -d | -n | -q | -v } ] [ -C arq ] [ módulo ... ]
modprobe -V
Tratamento de alto nível dos módulos carregáveis.
Algumas opções:
-a, --all
Carrega todos os módulos definidos
-c, --showconfig
Mostra a configuração corrente utilizada
-d, --debug
Mostra informações sobre a representação
interna da pilha de módulos
-k, --autoclean
Marca os módulos como auto removíveis
-l, --list
Exibe os módulos definidos no padrão
-n, --show
Apenas exibe o que seria feito
-q, --quiet
Modo silencioso
-r, --remove
Remove os módulos ou faz a auto remoção
-s, --syslog
Envia a saída para o syslog
-t tipo, --type tipo
Considera apenas os módulos do tipo
encontrados em qualquer subdiretório
/tipo/
Utiliza o arquivo arq em vez do arquivo
-C arq, --config arq
/etc/modules.conf
-h
Ajuda
-V, --version
Exibe a versão do lsmod
156
Utilizando o Linux
modinfo [ opções ] módulo
Exibe informações sobre módulos carregáveis.
Algumas opções:
-a, --author
Exibe o autor do módulo
-d, --description
Exibe a descrição do módulo
-l, --license
Exibe a forma de licença do módulo
-n, --filename
Exibe o nome do arquivo do módulo
Exibe as informações definidas no
-f str, --format str
formato str
-p, --parameters
Exibe os parâmetros do módulo
-V, --version
Exibe a versão do modinfo
-h, --help
Exibe ajuda
O formato str pode conter as especificações:
%l
licensa
%a
autor
%d
descrição
%p
parâmetros
thor:~ # modinfo -n ne
/lib/modules/2.4.10-smp/kernel/drivers/ne.o
thor:~ # modinfo ne
filename:
/lib/modules/2.4.21-99-default/kernel/drivers/net/ne.o
description: "NE1000/NE2000 ISA/PnP Ethernet driver"
author:
<none>
license:
"GPL"
parm:
io int array (min = 1, max = 4), description "I/O base
address(es),required"
parm:
irq int array (min = 1, max = 4), description "IRQ number(s)"
parm:
bad int array (min = 1, max = 4), description "Accept card(s)
with bad signatures"
thor:~ # modinfo -f "A licenca do módulo %d é %p\n" ne
A licença do módulo "NE1000/NE2000 ISA/PnP Ethernet driver" é "GPL"
thor:~ #
o
Utilizando o Linux
157
Mensagens do sistema Linux
Normalmente, um sistema Unix-like e seus serviços não exibem
mensagens diretamente na console. Em vez disto eles utilizam o serviço syslogd.
Este serviço é configurável através do arquivo /etc/syslog.conf. ou pelo
arquivo /etc/syslog-ng/syslog-ng.conf.
O arquivo syslog.conf contém a definição dos tipos de mensagens e
a ação a ser tomada. Os tipos são definidos por uma lista de seletores compostos
por um serviço (ou facility) e uma prioridade (ou priority), separados por um
ponto (’.’).
Um serviço pode ser: auth, authpriv, cron, daemon, kern, lpr, mail, mark,
news, security (o mesmo que auth), syslog, user, uucp e local0 até local7. O
símbolo asterisco (’*’) representa todos os serviços.
Uma prioridade, em ordem crescente, pode ser debug, info, notice,
warning, warn (o mesmo que warning), err, error (o mesmo que err), crit, alert,
emerg, panic (o mesmo que emerg). De forma semelhante ao serviço, o símbolo
asterisco (’*’) representa todas as prioridades e a palavra none representa
nenhuma prioridade para o serviço especificado. As palavras error, warn e panic
são obsoletas. Serão registradas as mensagens com prioridade maior ou igual à
especificada. Uma prioridade pode ser precedida por ’=’ para especificar apenas
aquela prioridade ou por ’!’ para excluir prioridades maiores ou igual à
especificada.
Podem ser inseridas linhas com comentários, começadas por ’#’.
Múltiplos serviços com uma mesma prioridade podem ser separados por ’,’ e
múltiplos seletores podem ser utilizados separados por ’;’.
158
Utilizando o Linux
Uma ação pode ser um arquivo normal, um named pipe, um terminal,
uma máquina remota, uma lista de usuários ou ’*’.
Um arquivo normal é especificado pelo caminho (path) completo (iniciado
por ’/’). Quando precedido por ’-’, a escrita é assíncrona (informações podem ser
perdidas se ocorrer um crash no sistema antes da escrita no disco).
Quando precedida por ’|’, a ação é um named pipe que deve ser criado
por mkfifo antes de iniciar o syslogd. Isto é útil para depuração.
Se o arquivo é do tipo tty, ele é um terminal como /dev/console. Ele
é tratado de forma especial.
O log será feito em uma máquina remota quando a ação for da forma
@nome da máquina. Na máquina remota, o syslogd deve ser disparado com a
opção de aceitar mensagens remotas (-r)
Se a ação for uma lista de usuários separados por ’,’, o syslogd enviará a
mensagem para os terminais onde aqueles usuários estiverem logados. Um ’*’
representa todos os usuários logados.
Por exemplo, para mostrar todas as mensagens no terminal virtual tty12,
gravar as mensagens do sistema de mail em /var/log/mail e as mensagens
críticas (exceto as do kernel) no arquivo /var/log/critical, enviar as
mensagens críticas do kernel para o servidor logserver, e enviar as mensagens do
serviço LOCAL6 para os terminais onde estão sessões dos usuários jose e pedro,
podemos utilizar:
*.*
mail.*
*.=crit;kern.none
kern.crit
local6.*
/dev/tty12
-/var/log/mail
/var/log/critical
@logserver
jose, pedro
Utilizando o Linux
159
Através do cron.daily, os arquivos de log serão comprimidos quando
atingirem um determinado tamanho ou idade. Até o SuSE Linux 7.3, a definição
de quais arquivos devem ser comprimidos é feita através do arquivo
/etc/logfiles. Neste arquivo são também especificados o modo de criação
do novo arquivo e seu dono e grupo, além de opcionalmente o serviço para o qual
deve ser chamado o reload.
(exemplos do logfiles)
/var/log/messages
+4096k 640 root.root
/var/squid/logs/access.log +4096k 640 squid.root
squid
A partir do SuSE Linux 8.0, o cron.daily roda o /usr/sbin/logrotate que
utiliza o arquivo de configuracão /etc/logrotate.conf, que inclui
arquivos do diretório /etc/logrotate.d/. Neste diretório estão arquivos
com sessões para cada arquivo. Um arquivo de log pode ser comprimido, apagado
e até mesmo enviado por e-mail.
(exemplo de uma entrada em /etc/logrotate.d/aaa_base)
/var/squid/logs/access.log {
compress
dateext
maxage 365
rotate 99
size=+4096k
notifempty
missingok
create 640 squid.root
postrotate
/etc/init.d/squid reload
endscript
}
dmesg [ -c | -n nível | -s tamanho ] [ -C arq ]
Examina ou controla o buffer de mensagens do kernel.
Algumas opções:
-c
Limpa o buffer após a impressão
Define um buffer de tamanho bytes
-s tamanho
-n nível
Define o nível das mensagens exibidas
160
Utilizando o Linux
syslogd [ -a socket | -d | -f arq | -h | -l lista | -m intervalo | -n | -p socket |
-r | -s domínios | -t | -v ]
Utilitário de log do sistema linux.
Algumas opções:
-a socket
Define sockets adicionais a serem
utilizados pelo syslogd.
-d
Modo de depuração
Utiliza o arquivo arq em vez do arquivo
-f arq
/etc/syslog.conf
-h
Reencaminha mensagens remotas para as
máquinas definidas
-l lista
Definição de máquinas separadas por ’;’
-m intervalo
Intervalo entre marcas (-- MARK --). O
default é 20 minutos. O valor 0 desabilita
a geração de marcas.
Especifica socket alternativo ao /dev/log
-p socket
-r
Habilita a recepção de mensagens da rede
-s domínios
Especifica a lista de domínios a serem
eliminado dos nomes das máquinas,
separados por ’;’para o log .
-t
Marca as mensagens reencaminhadas com
o nome da máquina que a enviou.
-v
Exibe a versão do syslogd
O syslogd reage a alguns sinais (veja o comando kill):
SIGHUP
SIGTERM
SIGINT, SIGQUIT
SIGUSR1
SIGCHLD
Reinicializa o syslogd
Termina o syslog
Se habilitado, ignora o modo debug, senão
termina o syslog
Habilita/desabilita o modo debug
Espera pelos processos gerados por
mensagens enviadas para todos
Utilizando o Linux
161
No syslog-ng, são definidos os objetos do tipo source, destination,
log, filter, parser, rewrite rule e template. As definicões seguem o formato:
options { parâmetro1; parâmetro2; ... };
tipo identificador { parâmetro, parâmetro2; ... };
Os parâmetros definem
operações lógicas.
level, facility, message, podendo incluir
Alguns exemplos podem ser vistos no quadro abaixo.
options {
long hostnames(off); flush_lines(0);
perm(0640); stats_freq(3600);
};
source src { internal(); unix-dgram("/dev/log"); };
source chroots
filter f_mail { facility(mail); };
filter f_acpid { lrvrl(emerg..noticed) and message(‘^acpid:‘);
filter f_messages
{
not facility(news, mail) and not filter(f_iptables);
};
destination console {
file("/dev/tty12" owner(-1) group (-1) perm (-1));
destination(console);
};
log {
source(src); source (chroots);
filter(f_console);
destination (xconsole);
};
162
Utilizando o Linux
Lembre-se da importância de analisar periodicamente os logs do sistema.
Falhas em serviços ou dispositivos, escassez de recursos (memória e disco),
tentativas de invasão, etc, podem ser detectadas antes de se tornarem críticas ou
de tornar o sistema inutilizável.
Instalando o Linux
163
5. Instalando o Linux
Instalação do Linux
Como já dito anteriormente, existem diversas distribuições do Linux. O
processo de instalação pode variar um pouco dependendo da distribuição
utilizada. Os princípios, entretanto, são válidos para qualquer uma delas.
Das distribuições mais conhecidas internacionalmente (SuSE, Red Hat,
Debian, Slackware, Caldera, Turbo Linux, ...), utilizaremos a Novell SuSE Linux
e mais especificamente openSuSE Linux, criada pela empresa alemã SuSE
Linux AG. Ela é considerada a melhor distribuição por sua estabilidade,
facilidade de instalação e variedade de hardware suportado. Ela possui também
uma das maiores quantidades de aplicativos.
O Linux e os aplicativos podem ser instalados a partir de diversos meios:
CD/DVD-ROM, pen drive, site FTP, diretório acessível do disco, disquete, ou
servidor NFS.
Atualment são disponíveis as versões para 32 e 64 bits.
164
Instalando o Linux
Antes de iniciar a instalação propriamente dita, deve ser feito um
planejamento da instalação. Este planejamento consiste em:
•
Definição da função do equipamento
» Servidor ou Estação de trabalho
* isto irá definir quais pacotes você deve instalar
» Serviços a serem instalados
* ftp, http, e-mail, DNS, telnet, ...
» Aplicativos a serem instalados
* office, desktop publishing, desenvolvimento
aplicativos, processamento de imagens, ...
de
Instalando o Linux
165
•
Definição dos parâmetros de rede
» protocolos e interconectividade
* TCP/IP, IPX, SMB, AppleTalk, ...
» nomes e endereços
* domínio e máquina.
•
Definição do espaço em disco
» Partições do disco
* primárias e secundárias
* nativa Linux x DOS FAT
»» partição e mount points
* discos lógicos
* área de swap
»» função do tamanho da memória principal e dos
serviços e aplicativos em execução
O Linux poderá ser instalado em qualquer particão acessível pelo BIOS.
Utilizando-se o LILO (Linux Loader), ou o GRUB, apenas o primeiro estágio do
LILO (ou do GRUB) precisará estar em uma partição física acessível pelo BIOS.
Isto é, o Linux e seus aplicativos poderão estar em uma partição lógica, em outro
disco que não o primário e até mesmo em um disco de um servidor. Todas a
distribuições atuais utilizam o GRUB.
Se você tiver um disco com Windows em que não haja partição livre (não
alocada), o processo de instalação do SuSE Linux irá automaticamente sugerir a
redução da partição Windows e a criação de partições para o Linux no espaço
livre gerado. Você poderá modificar a sugestão redefinindo o particionamento do
disco.
Lembre-se de que os dados de uma partição alterada manualmente
serão perdidos !
166
Instalando o Linux
O Boot do Linux
Você pode compartilhar o disco de seu computador entre diversos
sistemas operacionais. Isto quer dizer que você poderá optar entre carregar o
Linux® ou o Windows® ou o DOS® ou qualquer outro sistema operacional que
esteja instalado em seu computador.
Para que o seu computador rode Linux, o BIOS - Basic Input/Output
System - deve ser capaz de carregar o kernel (ou o o primeiro estágio do LILO
ou do GRUB) a partir de um disquete, CD, DVD ou do disco rígido.
Existem duas formas básicas:
•
•
o BIOS carrega o loader do kernel
o BIOS carrega o LILO - LInux LOader ou o GRUB - GRand
Unified Bootloader.
Quando o BIOS carrega o kernel do Linux diretamente, você não terá a
chance de escolher o boot de outro sistema operacional que porventura esteja
instalado em seu computador.
Através do LILO ou do GRUB, você poderá facilmente escolher o
sistema operacional a ser carregado. O LILO poderá ser instalado no master boot
record, no boot record da partição raiz, ou em um disquete. O master boot
record é o primeiro setor do disco de boot de seu computador. Nele está um
pequeno programa que irá carregar o sistema operacional. Caso decida instalar o
LILO no boot record da partição raiz, o seu disco já deverá conter um programa
de boot no master boot record. Este pode ser, por exemplo, o setor de boot do
Windows NT®, o MultiBoot do OS2®.
Após carregado, o kernel do Linux irá identificar o hardware, carregar os
módulos necessários e inicializar os serviços instalados e configurados.
Instalando o Linux
167
Instalação do SuSE Linux
O SuSE Linux poderá ser instalado de diversas formas.
Supondo a instalação a partir de um kit, ele pode ser feito através de
boot de CD, DVD, pen drive, rede ou de disquete (quando o computador não
possui CD/DVD ou o BIOS não consegue dar boot de CD/DVD).
Tanto o CD/DVD quanto o disquete possuem o LILO (ou o GRUB
a partir da versão 8.1). Ele será carregado e exibirá um menu em uma tela gráfica.
Em versões antigas, o LILO exibe o prompt:
LILO Boot:
Nas versões mais recentes (a partir da 7.0), O GRUB exibe um menu
gráfico com a opção de instalação, boot do sistema já instalado ou recuperação de
uma instalação. Você poderá escolher se a instalação será feita em modo texto ou
modo gráfico em modo VGA (640x480) ou SuperVGA (800x600 ou 1024x768),
ou mesmo maior. As resoluções suportadas são automaticamente detectadas.
Selecione o modo de instalação no menu, e simplesmente tecle ©.
168
Instalando o Linux
Será então carregado o kernel do Linux, que executará o linuxrc. Este
programa standalone irá permitir que você configure a língua de instalação
(português, inglês, alemão, francês, ...), o tipo de monitor (colorido ou
monocromático), o fuso horário e o modelo do teclado. No SuSE Linux, a maioria
dos dispositivos será detectada automaticamente. Caso o CD/DVD esteja
acessível diretamente, será carregado o YaST. Em alguns casos você poderá
adicionar módulos para dispositivos que o kernel não detectou automaticamente
(como placa de rede, controladoras SCSI e CD-ROMs especiais). Alguns
módulos de dispositivos poderão requerer parâmetros, como porta de I/O e IRQ.
Para a instalação através de uma rede, forneça os parâmetros necessários:
endereço IP local, máscara, endereços IP dos servidores de nome e NFS, e caso
necessário, o gateway para acesso ao servidor NFS. Selecione então a fonte de
instalação (CD-ROM, NFS, FTP, ou diretório em disco). O linuxrc irá então
carregar o YaST - Yet Another Setup Tool. Esta ferramenta será utilizada para
instalar, configurar e administrar o sistema Linux. Até a versão SuSE Linux 7.3
existiam duas versões do YaST: a interface em modo texto, YaST1, e a interface
texto/gráfica, YaST2. A partir da versão 8.0, há apenas o YaST2, que irá
automaticamente detectar o modo de execução (texto ou gráfico). No início da
instalação, você poderá definir o modo em que o YaST2 irá trabalhar (incluindo a
resolução em modo gráfico). Os modos de operação texto ou gráfico seguem a
mesma semântica. Textos com caracteres ressaltados "simulam" os botões, menus
e checkboxes da interface gráfica. Tanto a interface gráfica quanto a texto são
muito simples e intuitivas, possuindo a mesma funcionalidade.
Instalando o Linux
169
Com o YaST, você pode instalar a partir do zero ou atualizar uma versão
de Linux já existente em seu computador. Se você está fazendo uma atualização,
o YaST detectará a instalação prévia. Em alguns casos você precisará informar
qual a partição raiz. Em uma instalação inicial, você precisa definir os discos e as
partições e seus mount points a serem utilizados pelo Linux. O YaST poderá fazer
automaticamente o particionamento se você quiser. O YaST possui uma
ferramenta para redimensionar partições do disco, muito útil quando o disco já
possui, por exemplo, o Windows ocupando todo o disco. O YaST já irá
apresentar uma sugestão para o redimencionamento.
170
Instalando o Linux
Mesmo tendo uma memória principal de bom tamanho, crie uma área de
swap. O tamanho desta área dependerá dos tipos de aplicações a serem
executadas concorrentemente no equipamento, e do tamanho da memória real
instalada. Uma estação de trabalho tem tipicamente entre 128 e 512MB de
memória, sendo sugerida uma área de swap de no mínimo 128 MB. Servidores
podem tipicamente ter entre 256 MB e 4 GB de memório, dependendo da
aplicação. Sugerimos uma área de swap de no mínimo 512 MB. A exigência de
memória das recentes aplicações gráficas e de banco de dados poderá exigir mais
memória principal e adicionar área de swap maior pode permitir que a aplicação
rode em detrimento da velocidade. Lembre-se que um equipamento com uma
CPU rápida (acima de 700MHz) poderá parecer muito lento se o sistema
necessitar da utilização constante da área de swap porque a velocidade de acesso a
disco é muitíssimo inferior às velocidades da CPU e da memória.
A decisão de criar apenas uma partição raiz ou dividir a instalação em
partições como /, /boot, /opt, /var, /usr, /home e outras, só depende da forma
que você prefere trabalhar e gerenciar seus arquivos e backups. Em servidores,
sugerimos dividir em partições para a melhor administração e controle do uso do
espaço em disco pelos serviços e usuários. Para melhor expansibilidade existe a
opção do LVM - Logical Volume Manager - que permite adicionar partições ou
discos dinamicamente aos sistemas de arquivos.
Durante a criação das partições, o YaST irá criar o sistema de arquivos.
Os sistemas de arquivos serão então montados nos mount points escolhidos.
Para selecionar os pacotes, você pode optar por carregar uma configuração
pré-definida pela SuSE ou alterar e criar a sua própria configuração. As
configurações pré-definidas contém pacotes previamente marcados conforme o
tipo de uso do computador (Estação de trabalho, servidor, sistema multimedia,
...). Você poderá também utilizar uma destas como base e incluir ou excluir
pacotes individualmente. Você terá disponível mais de 8000 aplicativos nos mais
de 3000 pacotes RPMs contidos nos CDs ou DVDs do SuSE Linux 10.1.
Dependências entre pacotes serão verificadas automaticamente pelo YaST
e após sua seleção, ele provavelmente marcará outros pacotes para a instalação.
Instalando o Linux
171
Quando estiver satisfeito com a seleção, basta aceitar para iniciar a
instalação. O YaST irá pedir para trocar os CDs quando necessário. Em alguns
equipamentos, o YaST instalará o básico e deixará para completar a instalação
após carregar o kernel instalado em seu disco. Para a instalação do kernel, o YaST
poderá pedir para colocar o CD 1. Escolha o kernel apropriado ao seu
equipamento. A partir do SuSE Linux 8.0, o kernel adequado será
automaticamente instalado. Você pode criar um disquete de boot, mas isto
raramente é necessário.
O YaST irá fazer tudo automaticamente. Ele pedirá a senha do root e dará
a opção para criar um usuário normal que deve ser utilizado para as tarefas
rotineiras. Desta forma após o término da instalação o sistema já estará pronto
para ser utilizado.
Os passos seguintes servem de guia para uma instalação e configuração
totalmente manuais. Lembre-se que o YaST já faz isto para você.
172
Instalando o Linux
Configuração do boot loader
O próximo passo é a configuração do boot loader. Aí você vai definir as
opções de boot em seu computador. Você pode incluir uma nova configuração
para cada opção de boot (Linux, Windows, SCO, ...). O nome escolhido (label)
poderá ser utilizado no prompt do LILO para selecionar o sistema a ser carregado.
Na versão 8.0 do SuSE Linux, o LILO será configurado automaticamente. Na
versão 8.1, é o GRUB também é configurado automaticamente. Você poderá
alterar a configuração sugerida.
Os parâmetros a definir para cada configuração são:
∗
a partição a carregar (o YaST irá identificar automaticamente as
partições Linux e Windows/DOS)
∗ os parâmetros adicionais para o kernel
• tamanho de memória, controladores de discos, placas de rede,
CDs, ...
∗ o tempo para o boot automático
Escolhe-se então o local para a instalação do LILO: master boot record ou
boot record da partição raiz. Após a confirmação, o YaST salvará as
configurações em /etc/lilo.conf e executará o programa lilo, que instalará o
LInux LOader.
(exemplo de arquivo /etc/lilo.conf)
# LILO configuration file
# Start of LILO global Section
boot=/dev/hda
vga=normal
timeout=100
# End LILO global Section
image = /boot/vmlinuz
root = /dev/hda1
label = Linux
other = /dev/hda2
label = Windows
table = /dev/hda
A primeira imagem definida será o boot default. Existem diversas opções que
poderão ser incluidas no arquivo /etc/lilo.conf para personalizar o LILO.
Instalando o Linux
173
Caso utilize o GRUB, o arquivo com a configuração é o /boot/grub/menu.lst.
(exemplo de arquivo /boot/grub/menu.lst)
color white/blue black/light-gray
default 0
timeout 8
gfxmenu (hd0,0)/message
title Linux
kernel (hd0,0)/vmlinuz root=/dev/hda3 vga=0x317 splash=silent desktop
showpts
initrd (hd0,0)/initrd
title Floppy
chainloader +1
title Failsafe
kernel (hd0,0)/vmlinuz root=/dev/hda3 showopts ide=nodma apm=off
acpi=off vga=normal nosmp noapic maxcpus=0 3
initrd (hd0,0)/initrd
O YaST, então, recarregará o kernel definido e começará a configurar a
instalação. Será pedido o timezone (região de fuso horário). Você poderá definir
se o relógio da máquina está com o horário local ou com o GMT. Com certeza,
você deverá selecionar horário local.
São então pedidos o nome da máquina e o nome do domínio. Pode-se então
configurar o ambiente de rede TCP/IP:
•
•
•
•
Endereço IP, máscara e gateway
Servidor de nomes (DNS)
Se será servidor de NFS (compartilhamento de recursos para a
rede)
Utilização do sendmail (serviço de e-mail)
174
Instalando o Linux
Agora você deverá escolher a senha do root. Este é o usuário mais
importante dos sistemas Unix-like. Escolha uma senha que seja difícil de ser
descoberta. Qualquer um que possuir esta senha terá acesso total e irrestrito aos
seus arquivos !
Caso não tenha sido detectado automaticamente, configure o seu mouse. Você
apenas precisa definir em que porta ele está conectado, e o tipo de protocolo a ser
utilizado (normalmente Microsoft®).
O YaST sugerirá a criação de um usuário comum local. Isto não será
necessário caso você esteja configurando uma estação de uma rede que trabalhe
com domínios NIS ou LDAP. Neste caso você deverá configurar o cliente NIS ou
LDAP, fornecendo o nome do domínio e o IP do servidor NIS ou do servidor
LDAP.
Diversos serviços serão disparados e você poderá então iniciar uma sessão
no Linux.
Instalando o Linux
175
Instalação de outros aplicativos no Linux
A instalação ou desinstalação de aplicativos contidos nos CDs ou no DVD
da distribuição SuSE é feita de forma semelhante à feita durante a instalação
inicial. Um aplicativo poderá ser instalado, reinstalado ou removido facilmente
através dos menus do YaST. Pode-se também obter um aplicativo através de
outros fornecedores ou através da Internet. Deve-se, em primeiro lugar, verificar a
compatibilidade do aplicativo com a distribuição SuSE, sua versão, versão do
kernel e de aplicativos de suporte como o XFree86, KDE e outros.
Um aplicativo poderá ser obtido em formato objeto e/ou com seus fontes,
normalmente na linguagem C ou C++. Os arquivos que compõem o aplicativo são
colocados em pacotes. Os pacotes podem estar em diversos formatos. Os mais
comuns (e indicados) são o TAR (comprimido ou não) e o RPM. Um pacote RPM
é mais simples de instalar porque possui informações de dependências e rotinas
de pré e pós instalação. Pacotes binários em formato TAR podem estar com os
arquivos distribuidos em diretórios relativos à raiz (/) ou em diretórios
temporários a partir do qual deverá ser executado um programa de instalação.
No caso de pacotes com os fontes, estes devem ser extraídos para um
diretório onde deverão ser compilados. Sugerimos utilizar sempre o gcc para
compilar estes fontes. Os pacotes RPM com fontes de aplicativos no formato
GNU, colocará um ou mais arquivos no formato TAR comprimido com bzip2, no
diretório /usr/src/packages/SOURCES e os arquivos SPEC no diretório
/usr/src/packages/SPECS.
176
Instalando o Linux
Pode-se gerar o pacote RPM binário a partir do pacote fonte, utilizando,
por exemplo, o comando
rpmbuild --rebuild arquivo.src.rpm
Para a compilação manual, utilize o comando tar com opção xj para
extrair os fontes do arquivo com extensão .tar.bz2. Os arquivos fontes serão
extraídos para um subdiretório, normalmente com o nome no formato aplicativoversão. Neste subdiretório deverá existir arquivos como INSTALL, README,
CREDITS, README.txt, entre outros, com instruções para a compilação,
instalação e utilização do aplicativo. Normalmente utilize o script configure para
a geração do arquivo Makefile com as opções corretas para a sua plataforma e a
instalação de SuSE Linux. O arquivo Makefile será utilizado pelo programa make
para a geração e instalação dos objetos. Veja no capítulo 11 como utilizar o
ambiente de desenvolvimento gcc e o make.
Pode-se também gerar o pacote RPM binário a partir do arquivo tar com
os fontes, utilizando, por exemplo, o comando
rpmbuild -ta arquivo.tar.bz2
Instalando o Linux
177
Utilizando o RPM
O RPM (Red Hat Package Manager) é um gerenciador de pacotes que
permite a administração da instalação de aplicativos compatíveis com o LSBLinux Standard Base. Os arquivos .rpm possuem, além dos componentes do
pacote, programas e informações para a instalação e remoção do pacote. O rpm
guarda informacões sobre pacotes instalados em uma base de dados localizada
em /var/lib/rpm.
O programa rpm possui três modos básicos de operação: 1) criação de
pacotes a partir de seus fontes para a instalação; 2) instalação, atualização e
remoção de pacotes; e 3) consultas de informações sobre os pacotes.
As opções gerais mais importantes do rpm são:
--help
--version
--rcfile arquivo
-v
-vv
Exibe uma ajuda
Exibe a versão do rpm
Especifica arquivo alternativo ao
/etc/rpmrc e ~/.rpmrc
Verboso
Mais verboso
Verificação de Pacotes
A verificação de um pacote provoca a comparação dos arquivos instalados
de um pacote com as informações localizadas nas bases de dados do RPM. A
verificação compara tamanho, MD5 sum, permissões, tipo, dono e grupo de cada
arquivo. Para esta verificação utilize a opção :
-V pacote
Verifica os arquivos do pacote
O modo de verificacão aceita as seguintes opções:
--nopgp
--nogpg
--nomd5
Ignora assinaturas pgp
Ignora assinaturas GPG
Ignora assinaturas MD5
178
Instalando o Linux
Este modo de verificação pode ser útil caso haja alguma suspeita de que a
base de dados RPM esteja corrompida. Esta verificação tem como saída para o
usuário uma string de 8 caracteres, possivelmente um caracter ’c’ indicando um
arquivo de configuração e depois o nome do arquivo. Cada um dos 8 caracteres
significa um dos atributos do arquivo comparado com os valores definidos na
base RPM, se ocorrer um ponto ’.’, significa que o atributo está OK. A tabela
abaixo mostra o significado dos caracteres :
Código
5
S
L
T
D
U
G
M
Significado
MD5 checksum
Tamanho do arquivo
Link simbólico
Modificação do arquivo
Device
Usuário
Grupo
Modo (inclui permissões e tipo de arquivo)
Exemplo:
Vericando os arquivos do pacote netcfg :
hmarx@thor:~> rpm -V netcfg
S.5....T c /etc/HOSTNAME
S.5....T c /etc/aliases
S.5....T c /etc/defaultdomain
S.5....T c /etc/exports
S.5....T c /etc/hosts
S.5....T c /etc/hosts.lpd
S.5....T c /etc/inetd.conf
S.5....T c /etc/networks
hmarx@thor:~>
o
Instalando o Linux
179
Verificação de Autenticidade
Após obter um pacote rpm a partir de um site na Internet ou de outra
fonte qualquer, deve-se verificar sua autenticidade através da assinatura PGP do
pacote. Para isto há a opção de verificação:
-K pacote, --checksig pacote
Verifica a assinatura do pacote
A SuSE inclui uma assinatura GPG em seus pacotes desde a versão 7.1.
Exemplo:
Verificando a assinatura do pacote telnet :
hmarx@thor:~> rpm -v --checksig /cdrom/suse/i586/telnet-1.0-291.i586.rpm
telnet-1.0-291.i586.rpm:
MD5 sum OK: 901045fd4c9fee03c03e33f310c603b9
gpg: Warning: unsafe permissions on directory "/usr/lib/rpm/gnupg"
gpg: Warning: unsafe permissions on file "/usr/lib/rpm/gnupg/pubring.gpg"
gpg: Signature made Mon Sep 9 19:27:35 2002 BRT using DSA key ID 9C800ACA
gpg: Good signature from "SuSE Package Signing Key <[email protected]>"
gpg: Warning: unsafe permissions on file "/usr/lib/rpm/gnupg/trustdb.gpg"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:
There is no indication that the signature belongs to the owner.
Fingerprint: 79C1 79B2 E1C8 20C1 890F 9994 A84E DAE8 9C80 0ACA
hmarx@thor:~>
o
180
Instalando o Linux
Instalação de Pacotes
A instalação de pacotes é feita através da opção -i ou, --install,
seguida pelos nomes dos arquivos .rpm. Uma instalaçãopode ser feita utilizando
simplesmente o comando rpm -i pacote.rpm.
Além das opções globais, podem ser utilizadas:
--excludepath caminho
--relocate velho=novo
--prefix dir
--dbpath dir
--excludedocs
--force
--allfiles
--ignorearch
--ignoresize
--ignoreos
--includedocs
--justdb
--nodeps
--noorder
--noscripts
--notriggers
--percent
--replacefiles
--replacepkgs
--test
--root dir
Ignora os arquivos do caminho dado
Reloca os arquivos do caminho
velho para o novo
Reloca o pacote para o diretório dir
Usa o diretório dir como base de
dados
Não instala a documentação
Um sinônimo para o uso das opções
--replacefiles e --replacepkgs
Instala todos os arquivos
Não verifica a arquitetura
Não verifica o espaço em disco
Não verifica o sistema operacional
Instala a documentação
Apenas atualiza a base de dados
Não verifica a dependência
Não reordena a instalação do pacote
para satisfazer as dependências
Não executa qualquer script de
instalação
Não executa qualquer script que for
disparado por este pacote
Exibe percentuais enquanto instala
Instala mesmo se o pacote substitua
arquivos instalados
Reinstala se já estiver instalado
Não instala, apenas verifica se a
instalação iria funcionar ou não
Usa dir como diretório raiz
Instalando o Linux
--hash, -h
181
Imprime ’#’ durante o tratamento do
pacote
Exemplo:
thor:~ # rpm -ivh apache-1.3.26-57.i586.rpm
apache
############################
thor:~ #
o
Atualização de Pacotes
A atualização de pacotes é feita através da opção -U ou, --upgrade,
seguida pelos nomes dos arquivos .rpm. Uma atualização pode ser feita
utilizando simplesmente o comando rpm -U pacote.rpm.
Além das opções globais, podem ser utilizadas as mesmas opções
disponíveis para a instalação, além de:
--oldpackage
Atualiza para uma versão anterior
Exemplo:
thor:~ # rpm -Uvh apache-1.3.26-57.i586.rpm
apache
############################
thor:~ #
o
182
Instalando o Linux
Remoção de Pacotes
A remoção de pacotes é feita através da opção -e ou, --erase, seguida
pelos nomes dos arquivos .rpm. Uma remoção pode ser feita utilizando
simplesmente o comando rpm -e pacote.
Além das opções globais, podem ser utilizadas:
--allmatches
--dbpath dir
--justdb
--nodeps
--noorder
--noscripts
--notriggers
--root dir
Remove todos os pacotes que
combinam com o pacote
Usa o diretório dir como base de
dados
Apenas atualiza a base de dados
Não verifica a dependência
Não reordena a instalação do pacote
para satisfazer as dependências
Não executa qualquer script de
desinstalação
Não executa qualquer script que for
disparado por este pacote
Usa dir como diretório raiz
Instalando o Linux
183
Consulta de Pacotes
A consulta de pacotes é feita através da opção -q ou, --query, seguida
por nomes completos de arquivos ou por pacotes.rpm.
Além das opções globais, podem ser utilizadas:
-a, --all
--root dir
--dbpath dir
--queryformat fmt
-f arquivo
-p pacotes
--triggeredby pkt
--whatprovides atrib
--whatrequires atrib
-i
--changelog
-l
-s
-d
-c
--provides
-R, --requires
--scripts
--triggers
Consulta todos os pacotes instalados
Usa dir como diretório raiz
Usa o diretório dir como base de
dados
Usa fmt para exibir as informações
Consulta pelo pacote contendo o
arquivo arquivo
Consulta o pacote pacote (não
instalado)
Consulta pacotes disparados por pkt
Consulta pacotes que provêm o
atributo virtual atrib
Consulta pacotes que requerem o
atributo virtual atrib
Exibe informações sobre o pacote
Exibe log de alterações
Exibe a lista de arquivos do pacote
Exibe o status dos arquivos
Exibe apenas os arquivos de
documentação do pacote
Exibe apenas os arquivos de
configuração do pacote
Lista atributos providos pelo pacote
Lista as dependências do pacote
Lista os scripts de (des)instalação
Lista os scripts disparado
184
Instalando o Linux
O formato fmt é uma versão modificada do formato do printf que aceita
ainda o campo %{nome}, onde nome é um dos tags reconhecíveis pelo rpm.
Utilize o comando rpm --querytags para obter uma lista destes tags.
Exemplos:
Consulta se o pacote apache está instalado e qual sua versão :
hmarx@thor:~> rpm -q apache
apache-1.3.26-57
hmarx@thor:~>
o
Consulta os arquivos do pacote inetd instalado :
hmarx@thor:~> rpm -ql inetd
/etc/init.d/inetd
/usr/sbin/inetd
/usr/sbin/rcinetd
/usr/share/doc/packages/inetd
/usr/share/doc/packages/inetd/AUTHORS
/usr/share/doc/packages/inetd/COPYING
/usr/share/doc/packages/inetd/NEWS
/usr/share/doc/packages/inetd/README
/usr/share/doc/packages/inetd/THANKS
/usr/share/man/man5/inetd.conf.5.gz
/usr/share/man/man8/inetd.8.gz
hmarx@thor:~>
o
Consulta qual pacote possui o arquivo /etc/inittab :
hmarx@thor:~> rpm -qf /etc/inittab
aaa_base-2002.9.12-1
hmarx@thor:~>
o
Instalando o Linux
185
Consulta as informações do pacote lsb :
hmarx@thor:~>
Name
:
Version
:
Release
:
Install date:
Group
:
Size
:
Packager
:
URL
:
Summary
:
Description :
For the Linux
Distribution:
hmarx@thor:~>
rpm -qip /cdrom/suse/i586/lsb-1.2-31.i586.rpm
lsb
Relocations: /usr
1.2
Vendor: SuSE Linux AG, Nuernberg, Germany
31
Build Date: Mon Sep 9 16:59:155 2002
(not installed) Build Host: Bloembergen.suse.de
System/Fhs
Source RPM: lsb-1.2-31.src.rpm
16214
License: GPL
http://www.suse.de/feedback
http://www.linuxbase.org/
Linux Standard Base tools
Standard Base (LSB) necessary tools, links and dependencies.
SuSE Linux 8.1 (i386)
o
No SuSE Linux, a atualização de pacotes (para novas implementações,
correções de bugs e vulnerabilidades) pode ser feita através do YOU (Yast Online Update), zypper ou smart.
Utilizando o zypper
O zypper utiliza os repositórios cadastrados no Yast. Os comandos mais
comuns do zypper são:
Ajuda
zypper { help | ? | --help }
Listar repositórios
zypper { repos | lr } [ repositório ]
Procurar pacotes
zypper { search | se } padrão
Instalar pacotes
zypper { install | in } padrão
Remover pacotes
zypper { remove | rm } padrão
Atualizar pacotes
zypper { update | up } [ padrão ]
186
Instalando o Linux
Utilizando o Smart
O smart tem seus repositórios cadastrados nos arquivos com extensão
.channel no diretório /etc/smart/channels/. Cada arquivo é composto
por sessões que definem o canal do repositório, como o exemplo abaixo para o
openSuSE 11.2.
[suse-oss]
type=rpm-md
baseurl=http://download.opensuse.org/distribution/11.2/repo/oss/suse/
enabled=1
Entre parênteses está o nome do cana (channel), no exemplo suse-oss
(repositório de pacotes open source do openSuSE Linux). A diretiva name define
o nome do repositório. A diretiva type define o formato do repositório, podendo
ser, por exemplo,
Tipo
apt-deb
apt-rpm
deb-dir
red-carpet
rpm-dir
rpm-hdl
rpm-md
slacksite
urpmi
yast2
Formato do repositório
Repositório APT-DEB
Repositório APT-RPM
Repositório de Debian ou Ubuntu
Canal Red Carpet
Diretório RPM - Fedora Core
Lista de cabecalhos de RPM
Metadados de RPMs
Repositório de Slackware
Repositrio de Mandriva
Repositório de openSuSE
Dependendo do tipo, define-se o baseurl que indica o endereço da base
do repositório.
Pode-se habilitar (enable=1) ou desabilitar (enable=0) o uso do
repositório.
Instalando o Linux
187
Quando desejar atualizar os pacotes, use os comandos smart update, para
atualizar a lista de pacotes e suas versões, e então smart upgrade para
baixar
efetivamente e atualizar os pacotes. Pode-se incluir a opcão --download para
apenas baixar os pacotes para o diretório /var/lib/smart/packages, sem
instalá-los.
Os comandos mais comuns do smart são:
Comando
smart { -h | --help }
smart channel --show
smart search padrão
smart info { [ padrão ] }
smart install padrão
smart remove padrão
smart update { [ canal ] }
smart upgrade { [ padrão ] }
smart clean
Significado
Ajuda
Lista repositórios definidos
Procura pacotes
Exibe informacões do pacotes
Instala pacotes
Remove pacotes
Atualizar lista de pacotes de canais
Atualiza pacote
Remove os arquivos baixados
Pode-se ainda usar o smart no modo shell através do comando
smart --shell
e então os comandos podem ser digitados no prompt smart>
root@thor: > smart --shell
Smart Package Manager 1.3 - Shell Mode
Loading cache...
Updating cache...
smart>
o
########################################## [100%]
188
Instalando o Linux
Além da interface texto, o smart possui uma interface gráfica que pode ser
utilizada usando o comando smart com a opcão --gui :
smart --gui [ comandos ]
Instalando o Linux
189
Criando pacotes RPM
Para se criar um pacote RPM é necessário criar o arquivo de especificação
que contém diversas informações sobre o pacote RPM e arquivos que o compõe.
Seja o arquivo simple-package-1.0.tar.bz2 com os sequintes arquivos:
simple-package-1.0/Makefile
simple-package-1.0/arq.txt
simple-package-1.0/prog.c
simple-package-1.0/img.png
O arquivo simple-package.spec :
Name:
Version:
Release:
Source:
Summary:
License:
Distribution:
Group:
simple-package
1.0
0.1
simple-package-1.0.tar.bz2
Simple Package
GPL
openSuSE
Applications
%description
Simple package to demonstrate the RPM build process
%description -l pt_BR
Pacote simples para demonstrar o processo de criar RPM
%prep
%setup -q
%build
make
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/pacote
install -m 755 prog $RPM_BUILD_ROOT/usr/local/pacote/prog
install -m 644 arq.txt $RPM_BUILD_ROOT/usr/local/pacote/arq.txt
install -m 644 img.png $RPM_BUILD_ROOT/usr/local/pacote/img.png
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root)
%dir %attr(755,root,root) /usr/local/pacote
/usr/local/pacote/prog
/usr/local/pacote/arq.txt
/usr/local/pacote/img.png
%changelog
* Tue Dec 8 2009 Helio Marques <[email protected]>
* Simple package - initial version
190
Instalando o Linux
Para criar o arquivo simple-package-1.0-0.1.i586.rpm em
/usr/src/packages/RPMS/i586 para a instalação do binário, use o
comando:
rpmbuild -bb simple-package.spec
Para criar o arquivo simple-package-1.0-0.1.src.rpm em
/usr/src/packages/SRPMS/ para a instalação dos fontes, use o comando:
rpmbuild -bs simple-package.spec
E para criar os dois arquivos RPM para instalacão dos fontes e do binário,
use o comando:
rpmbuild -ba simple-package.spec
Utilizando o comando
rpm -qpi simple-package-1.0-0.1.i586.rpm
podemos ver as informacões do pacote gerado:
Name
: simple-package
Relocations: (not relocatable)
Version
: 1.0
Vendor: (none)
Release
: 0.1
Build Date: Tue 08 Dec 2009 02:12:01 PM BRST
Install Date: (not installed)
Build Host: venus.starix.br
Group
: Applications
Source RPM: simple-package-1.0-0.1.src.rpm
Size
: 27517
License: GPL
Signature : (none)
Summary
: Simple Package
Description :
Simple package to demonstrate the RPM build process
Distribution: openSuSE
Para ver os arquivos que estão no pacote gerado, utilizamos o comando:
rpm -qpl simple-package-1.0-0.1.i586.rpm
/usr/local/pacote
/usr/local/pacote/arq.txt
/usr/local/pacote/img.png
/usr/local/pacote/prog
Instalando o Linux
@
191
Para manter a integridade da instalação, procure sempre instalar
pacotes pré-compilados compatíveis com a distribuição e versão do
Linux utilizadas.
192
O Sistema X Window
6. O Sistema X Window
O Sistema X Window
O sistema X Window é a interface gráfica padrão dos
sistemas Unix-like. Ele é baseado no protocolo X11, definido pela
DEC - Digital Equipment Corporation e pelo MIT (Massachusetts
Institute of Technology). A primeira versão é de 1987. Hoje, está na
versão X11R7.4. Este sistema também deve ser chamado de:
X
X Window System
X Version 11
X Window System, Version 11
X11
O protocolo X11 é orientado a rede e segue o modelo cliente / servidor.
Clientes:
Aplicações clientes são aquelas que utilizam recursos gráficos.
São as aplicações que normalmente precisam de muito recurso de
CPU e memória.
Servidores:
Equipamentos que provêm a interface gráfica ao usuário (entrada
e saída gráficas). Eles executam o X Server, e apenas tratam da
leitura dos dispositivos de entrada (mouse, teclado, light pen, ...) e
saída (vídeo, som, ...) enviando e recebendo, através do protocolo
X11, os eventos do usuário e dos clientes. Podem ser utilizados
computadores PC de baixo poder computacional que disponham
de interface adequada (principalmente mouse, teclado e vídeo).
O Sistema X Window
193
Assim, uma aplicação para X Window poderá ser executada em qualquer
máquina e ter sua saída gráfica em qualquer tela de um computador que esteja
executando um servidor X.
O X Window é hierarquicamente formado pelo Xserver, pelo gerenciador
de janelas (Window Manager), pelo gerenciador de área de trabalho (Desktop
manager), e pelas aplicações X.
O Xserver tem a função de fazer a interface com o hardware (placas
gráficas, mouse, teclado,...), e desenhar as primitivas (ponto, reta e
polígonos).
O desktop manager (inicialmente o XDM) é
responsável pelo controle de sessões. Através dele, o usuário se
identifica e escolhe o gerenciador de janelas. O KDM, KDE
desktop manager, e o GDM, Gnome desktop manager, são os
padrões no Linux.
194
O Sistema X Window
O window manager é responsável pela decoração das
janelas, tratamento das sobreposições, menus, ícones,
fundos de tela, desktops virtuais, etc.
Um X Server pode colocar disponível, para a utilização pelos
clientes, um ou mais displays. Na rede, estes displays são endereçados pelo
endereço ou nome do equipamento e pelo número display. Assim, se uma
máquina chamada tiger está executando um X Server para um display, ela terá
disponível o display tiger:0.0. A variável de ambiente do shell DISPLAY contém
o display corrente. Uma aplicação X pode ser disparada em qualquer máquina e
exibir sua interface gráfica na máquina tiger se os seguintes critérios forem
observados:
1) A máquina tiger é acessível através do protocolo X. Devem ser
verificados os endereços IP, as rotas, e a existência de regras de
firewall que podem filtrar os portos utilizados pelo X11.
2) Se a política de permissões do X Server permite à aplicação da máquina
cliente abrir o display na máquina tiger.
Deve ser verificada a política de X authority. Se a máquina tiger é uma
estação de trabalho, o usuário dela deve permitir o acesso do cliente (por
exemplo, phoenix), utilizando, por exemplo, o programa xhost para adicioná-lo à
lista de acessos. Para isto, pode ser utilizado o Run Command do KDE (acessível
através do menu ou de
¥+­
):
O Sistema X Window
195
Abaixo vemos uma tela de uma máquina rodando o KDE no SuSE Linux,
exibindo uma calculadora (dxcalc) rodando em Ultrix em uma Personal
DECstation e os processos xosview de duas máquinas SuSE Linux diferentes.
A maioria das aplicações gráficas que utilizam o X Toolkit aceitam opções
padrões, como por exemplo:
Especifica o servidor X a ser utilizado
-display display
-geometry geometria
Especifica o tamanho e as dimensões da
janela a ser exibida no formato:
larguraxaltura+x+y
-bg cor, --background cor
Especifica a cor de fundo da janela
-fg cor, --foreground cor
Especifica a cor dos textos e gráficos
Define a borda com n pixels
-bw n, --borderwidth n
-bd cor, --bordercolor cor
Define a cor da borda
Especifica o título da janela
-title título
196
O Sistema X Window
O X Window no Linux
Em 1994, foi fundado o projeto XFree86. O objetivo
era criar um servidor X gratuito para plataformas PC. É
gratuito, e está na versão 4.6.0 é compatível com X11R6.6.
No final de 2003 foram inseridas algumas restrições
na licensa do xfree86 levaram o x.org como o sucessor do
XConsortium. O x.org se tornou então o padrão para o Linux
e está hoje na versão X11R7.4.
O
arquivo
básico
de
configuração
do
X.org
é
o
/etc/X11/xorg.conf. Nas versões atuais do SuSE Linux ele é gerado
automaticamente. Ajustes na configuração do Xorg no SuSE Linux pode ser
facilmente realizada através do SaX2 - SuSE Advanced X Configurator. A partir
do SaX, você configura o mouse, teclado, placa de vídeo, monitor e resolução dos
desktops.
Em caso de uma placa não existente na lista, verifique a
compatibilidade com o padrão SVGA. Se o modelo de seu
monitor não for encontrado, você pode informar as faixas de
frequências horizontal e vertical. Cuidado: certifique-se de
informar valores corretos, que podem ser encontrados no
manual de seu monitor. Valores incorretos podem danificá-lo.
O Sistema X Window
197
Para a configuração manual do XFree86, existem aindas diversas ferramentas :
SuperProbe
Auxílio na identificação da placa de vídeo, chipset e tamanho da
memória de vídeo
xf86config
Configuração em modo texto. Você precisa conhecer aspectos técnicos
das interfaces gráficas.
XF86Setup
Configuração em modo gráfico.
SAX2 - SuSE Advanced X Configuration Tool
198
O Sistema X Window
Configuração do XFree86
O XFree86 4.x pode ser configurado através de parâmetros definidos nos
arquivos encontrados no diretório /etc/X11. Neste diretório, existem ainda
subdiretórios para a configuração dos componentes da interface do X Window.
Os principais arquivos são:
/etc/X11/Xmodmap
/etc/X11/fs/config
/etc/X11/xdm/Xservers
/etc/X11/xdm/Xaccess
/etc/X11/xdm/xdm-config
/etc/X11/xdm/Xsetup
/etc/X11/xdm/RunChooser
/etc/X11/xdm/Xreset
/etc/X11/xdm/Xresources
/etc/X11/fvwm2/*
/etc/X11/xkb/*
Configurações do teclado do PC
Configuração do servidor de fonts
Definição dos displays a serem criados
Controle de acesso a conexões XDMCP
Configuração do XDM
Trata das consoles locais e remotas
Trata as consoles remotas
Trata o logout de usuário remoto
Definição do comportamento da interface
X (incluindo o teclado)
Configurações do fvwm2
Configurações dos teclados
Por exemplo, para que você possua mais de um desktop virtual, inclua
uma linha para cada um deles no arquivo /etc/X11/xdm/Xservers, como
as seguintes (opcionalmente com a definição de profundidade de pixel):
:0
:1
:2
local
local
local
/usr/X11R6/bin/X :0
/usr/X11R6/bin/X :1
/usr/X11R6/bin/X :2
vt07
vt08
vt09 -bpp 16
Assim você terá 3 displays nas consoles tty7, tty8 e tty9, endereçados por
:0, :1 e :2 respectivamente. Lembre-se de que cada Xserver necessita de pelo
menos 32M memória para rodar eficientemente e que sua placa de vídeo e
monitor dever suportar a profundidade de pixel. Use + ¦+¬, ¦+­, ¦+®,
¦+¯, etc., para acessar o desktop virtual desejado.
O Sistema X Window
199
Abaixo, uma tela do sistema X Window com o gerenciador de janelas
KDE versão 3.x. Foi ressaltado o gerenciador com 6 desktops virtuais com um
quadrado vermelho.
200
O Sistema X Window
Gerenciadores de janelas
Existem hoje mais de 14 gerenciadores diferentes para o Linux. Os mais
conhecidos são:
fvwm e fvwm2
Gerenciador original do XFree86
fvwm95
Configuração do fvwm para imitar a interface do Windows 95
KDE - K Desktop Environment
Interface que se tornou o padrão de fato do Linux.
É muito poderosa e possui muitas das características
das interfaces encontradas nos sistemas Windows.
GNOME - GNU Network Object Model Environment
Outra interface famosa do Linux. Utiliza o ORBit,
uma implementação CORBA da RedHat.
mlvwm
Interface semelhante ao Macintosh da Apple.
cdesim
Imita a interface CDE (Common Desktop Environment), muito
utilizada pelas estações Sun.
afterstep
Interface semelhante ao NeXTStep.
amiwm
Interface semelhante ao AMIGA.
O Sistema X Window
201
enlightenment
Interface poderosa e configurável. Faz uso intensivo do modo
gráfico.
icewm
Interface que pode emular as interfaces do Windows 95, OS/2 e
Motif.
twm
Uma interface bem simples.
qvwm
Mais uma interface, com ícones animados, emulando a interface do
Windows 9x e Me.
windowmaker
Mais uma interface configurável com uso intensivo de apelo
visual.
O gerenciador pode ser escolhido em alguns Desktop Managers, como o
kdm do KDE e o gdm do GNOME. Há um menu para escolha do tipo de sessão
que inclui os gerenciadores instalados.
202
O Sistema X Window
Um gerenciador de janelas (Window Manager) provê normalmente
diversos desktops (áreas de trabalho). Alguns gerenciadores incluem programas
ou applets denominados pagers para a fácil seleção do desktop. O KDE permite a
configuração de até 16 desktops. A barra de ícones do KDE (chamada de kicker)
exibe os desktops. Um desktop pode ser selecionado clicando sobre o botão
correspondente. Este pode ser configurado para exibir o número, um texto (que
pode ser alterado pelo usuário) ou um preview das janelas em cada desktop. Basta
utilizar o botão da direita do mouse sobre a área dos botões para configurar suas
preferências. Com duplo click em um dos botões, você poderá alterar o nome.
Seleção de Desktops no KDE
O KDE tem ainda o kpager que exibe um excelente preview dos desktops
e permite arrastar as janelas entre os desktops.
kpager - Preview de Desktops
O Sistema X Window
203
O KDE
O KDE - K Desktop Environment - está se tornando a
interface gráfica padrão do Linux. A interface KDE é totalmente
configurável. Ela é baseada em URLs e MIME. O KDE inclui,
além do gerenciador de janelas, o gerenciador de displays e
centenas de aplicações integradas ao seu gerenciador.
O gerenciador de displays, kdm, é um login em modo gráfico que
substitui o xdm, o gerenciador padrão do sistema X Window. A partir dele, o
usuário poderá escolher o gerenciador de janelas com o qual irá trabalhar. O kdm
irá guardar o gerenciador de janelas escolhido por aquele usuário e,
posteriormente, ele será automaticamente selecionado por default quando o
usuário se identificar.
Entre as aplicações do KDE, há um poderoso gerenciador de arquivos, o
konqueror, que trata muitos formatos de arquivos diferentes. Ele possui
características de drag-and-drop e cut-and-paste. Além disto, ele também é um
browser WEB.
204
O Sistema X Window
Através da barra do painel (kicker), o usuário tem acesso fácil e rápido ao
menus de aplicativos, aos desktops virtuais, e a alguns aplicativos utilizados com
maior frequência (configuráveis pelo usuário), entre outros.
Painel do KDE no SuSE Linux
Outros aplicativos são bem semelhantes aos existentes no ambiente
Windows, como o kolourpaint mostrado abaixo:
KolourPaint - o similar do PaintBrush do Windows
O Sistema X Window
205
Para multimedia, existem diversos aplicativos. Programas como o kscd,
freeamp, xmss são incluídos no kit SuSE Linux.
KSCD - CD Player no KDE4
FREEAMP - Similar ao winamp
XMMS
206
O Sistema X Window
Para exibição de filmes em DVD, pode ser obtido, do site
http://sourceforge.net, o xine que possui personalização através de diversos temas
disponíveis na internet.
XINE
Para tocar audio (DVDs, CDs, MP3s, estacões de rádio, ...) há o Amarok
com uma interface muito amigável.
Amarok no KDE4
O Sistema X Window
207
Na área matemática, encontramos diversos aplicativos gráficos. Um
aplicativo muito conhecido no mundo Unix, que possui porte para Linux, é o
Maple V da Universidade de Waterloo, Ontario, Canada. O Maple trata
manipulação simbólica de expressões matemáticas complexas, permite avaliações
numéricas e plotagens de funções e superfícies.
208
O Sistema X Window
O kplot3d (do KDE2), que permite a exibição de superfícies a partir de
sua equação. e ainda rodá-la nos 3 eixos.
O Sistema X Window
209
Além dos pacotes tipo office gratuitos disponíveis, como o KOffice, o
StarOffice, e o OpenOffice, existem produtos comerciais como o Applixware,
da Vistasource, disponível para várias plataformas Unix. Todos estes pacotes
incluem editor de documentos, planilha eletrônica, editores gráficos, software de
apresentação, banco de dados, geradores de aplicativos, correio eletrônico. O
Applixware permite ainda a criação de novas características através de macros e
da linguagem ELF (Extended Language Facility). A maioria dos arquivos do
Microsoft Office pode ser lida sem problemas (incluindo .DOC, .XLS, .PPT).
Kword - Editor de documentos do KOffice
210
O Sistema X Window
Tentando manter a compatibilidade com o pacote office da Microsoft, o
OpenOffice está se sendo muito utilizado. A maioria dos documentos gerados
pelo Word, Excell e Powerpoint podem ser abertos e modificados nele sem
grandes problemas.
OpenOffice
oowrite - uma alternativa ao Microsoft Office
O Sistema X Window
211
axcalc - Planilha do Applixware
oocalc - Planilha do OpenOffice
212
O Sistema X Window
Você poderá ainda configurar e administrar o SuSE Linux através do KDE
utilizando o KDE Control Center e os módulos do YaST.
O Sistema X Window
213
A configuracão pessoal, incluindo a aparência dos desktops e dispositivos,
pode ser feita através da interface grafica:
214
O Sistema X Window
Rede em Unix
215
7. Redes em Unix
Redes em Unix
Colocar sistemas Unix-like em rede significa configurar a suite de
protocolos TCP/IP. O TCP/IP define os serviços das camadas de transporte e de
rede do modelo OSI - Open Systems Interconnection da ISO - International
Standard Organization, apesar de não seguir exatamente sua estrutura. TCP/IP é a
sigla para Transmission Control Protocol/Internet Protocol. Embora haja outros
protocolos na suite TCP/IP, o TCP e o IP são os mais importantes.
O modelo OSI define 7 camadas hierárquicas que realizam funções
utilizando a camada inferior e provêm serviços para a camada superior.
7. Aplicação
6. Apresentação
5.
4.
3.
2.
Sessão
Transporte
Rede
Enlace
1. Física
Programas de aplicação que utilizam a rede
Padroniza a representação dos dados para as
aplicações
Gerencia as sessões entre as aplicações
Trata da detecção e correção de erro fim a fim
Trata das conexões através da rede
Trata da confiabilidade da transferência dos dados
pelo meio físico. Define como as variações da
camada física formam os dados.
Define as características físicas do meio (mecânicas
e eletromagnéticas)
Redes em Unix
216
A arquitetura do protocolo TCP/IP implementa 4 camadas do modelo OSI:
Aplicação, Transporte, Internet e Controle de acesso ao meio físico.
O dado da aplicação no nodo de origem é encapsulado por cada camada
inferior para garantir sua integridade e adicionar informações para que sejam
recebidos pela aplicação no nodo destino.
Na camada de aplicação, encontramos os serviços comuns como http,
telnet, ftp, smtp, DNS, RIP e NFS.
Na camada de transporte o TCP/IP fornece, além do TCP - Transmission
Control Protocol, o UDP - User Datagram Protocol, que não faz verificações de
integridade fim a fim. Uma mensagem UDP é composta por 2 palavras de 32 bits
seguida pelos dados, como mostrado a seguir:
<-------------------------------------------- 32 bits ------------------------------------------>
0
15 16
31
Porto de origem
Tamanho
Porto de destino
Checksum
Dados
Apesar de não haver verificação da integridade dos dados, este protocolo é
utilizado devido ao seu baixo overhead, tornando a comunicação eficiente. A
verificacão é feita pela aplicação.
Rede em Unix
217
Na camada de rede está o IP - Internet Protocol (IPv4 - RFC 791 e IPv6
RFC 2460) que define os datagramas, o esquema de endereçamento, o esquema
de roteamento, a fragmentação e a recomposição dos datagramas.
O datagrama do protocolo IPv4 é composto de um cabecalho de 5 ou 6
palavras de 32 bits (definidas pelo campo IHL - Internet Header Length),
seguidas pelos dados.
<----------------------------------------------- 32 bits ---------------------------------------------->
4
8
12
16
20
24
28
31
0
IHL
ToS
Tamanho total
Versão
Flags
Offset de fragmentacão
Identificação
Protocolo
Checksum do cabecalho
TTL
Endereço de origem
Endereço de destino
Opções
Padding
Dados
O protocolo ICMP (Internet Control Message Protocol) faz parte do IP.
Ele é responsável pelo controle de fluxo, pela detecção do alcance do destino,
pelo redirecionamento de rotas e pela a verificação dos nodos. O comando ping
utiliza este protocolo.
Outros protocolos definidos em /etc/protocols são IGMP (Internet
Group Multicast Protocol), BGP (Border Gateway Protocol), EGP (Exterior
Gateway Protocol) e GGP (Gateway-gateway Protocol).
Na camada de controle ao meio físico são definidos os protocolos:
RFC 826: Address Resolution Protocol ou ARP, que mapeia endereços
IP em endereços Ethernet
RFC 894: A Standard for the Transmission of IP Datagrams over
Ethernet.
RFC 903: Reverse Address Resolution Protocol ou RARP, variante do
ARP que mapeia endereços Ethernet (MAC) em endereços IP.
Redes em Unix
218
Abaixo podemos ver como o TCP/IP se encaixa no modelo OSI:
Na camada de enlace estão as tecnologias com fio ou sem fio. Podemos
citar como exemplo a rede ethernet, a rede token ring, a FDDI (Fiber Distribution
Data Interface), as redes 802.11 (wireless, Wi-Fi ou WiMax), ou mesmo
interfaces seriais como RS-232C ou RS-422. São definidos parâmetors como as
temporizações, níveis de sinal, frequências, canais, protocolos de negociação do
meio, etc.
No TCP/IP, a camada de enlace possui 2 subcamadas: LLC (Logical Link
Control) e MAC (Media Access Control). Esta divisão é baseada no projeto 802
do IEEE que define muitas tecnologias de redes. A maioria das tecnologias de
redes locais utilizam o protocolo LLC 802.2 do IEEE. Na camada MAC, uma
rede ethernet usa o método CSMA/CD, enquanto uma rede token ring usa token
pass (passagem de ficha).
Rede em Unix
219
Na camada física são definidos os tipos e formatos de conectores, cabos,
antenas, pinagens, etc.
Serviços do TCP/IP
No TCP/IP são definidas diversas aplicações, conhecidas como serviços
TCP/IP. Os mais comuns são:
Serviço
•
•
•
•
•
•
correio eletrônico
transferência de arquivos
login em máquinas remotas
execução remota de programas
compartilhamento de arquivos
compartilhamento de dispositivos
Exemplo
e-mail
ftp
telnet
rsh ou rexec
NFS
impressora remota, fax, ...
Estes serviços são tratados por aplicativos que podem rodar em modo
standalone ou no modo inetd ou xinetd.
Redes em Unix
220
No modo inetd, o serviço é incluído no arquivo /etc/inetd.conf e
o aplicativo será executado quando uma conexão ao serviço for realizada.
Uma entrada no arquivo /etc/inetd.conf é uma linha contendo as
seguintes informações:
serviço socket
serviço
socket
protocolo
flags
usuário
aplicativo
argumentos
protocolo flags usuario aplicativo argumentos
nome do serviço em /etc/services
tipo do socket
stream, dgram, raw, rdm ou seqpacket
nome do protocolo em /etc/protocols
tcp, udp, tcp4, udp4, tcp6, udp6, ...
modo de utilização do socket
wait, nowait
nome do usuário do processo que trata o serviço
caminho completo do aplicativo a ser executado
argumentos a serem passados para o aplicativo
Por exemplo, o serviço FTP pode ser disparado usando o inetd através de:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l
O serviço FTP utiliza o wrapper tcpd que verifica os arquivos
/etc/hosts.allow e /etc/hosts.deny para controlar o acesso. Será
disparado como usuário root, com a opção -l (para registrar as sessões e as falhas
de abertura de sessão FTP). Obviamente após o disparo o socket poderá aceitar
novas conexões e não deve esperar a conexão terminar (flag nowait).
Rede em Unix
221
Para maior flexibilidade e controle o inetd foi substituido pelo xinetd
(extended inetd). O arquivo de configuracão é o /etc/xinetd.conf, que no
SuSE Linux inclui os arquivos no diretório /etc/xinetd.d. Os serviços são
normalmente configurados em arquivos sob o diretório /etc/xinetd.d.
As entradas têm o formato
service nome_do_serviço
{
atributo operador valor valor ...
...
}
O operador de assinalamento pode ser =, += e -=. A maioria dos atributos
somente suporta o operador =.
Os atributos são:
Atributo
id
type
flags
socket_type
protocol
wait
user
group
instances
nice
Descrição / valores aceitos
Identificação única para o serviço
Qualquer combinação de RPC, INTERNAL ou
UNLISTED
Qualquer combinação de REUSE, INTERCEPT,
NORETRY,
IDONLY,
NAMEINARGS,
e
NODELAY
stream, dgram, raw ou seqpacket
Qualquer protocolo descrito em /etc/protocols
yes ou no
Usuário para o processo que deve existir em
/etc/passwd
Grupo para o processo que deve existir em
/etc/group
Número máximo de serviços que podem estar ativos
Prioridade do serviço
Redes em Unix
222
Atributos do xinetd (cont.)
Atributo
server
server_args
only_from
no_access
access_times
log_type
log_on_success
log_on_failure
rpc_version
rpc_number
env
passenv
port
redirect
bind
interface
Descrição / valores aceitos
Path completo do programa a executar para o serviço
Argumentos para o programa
Lista de IPs de máquinas ou rede para os quais o
serviço estará disponível
Lista de IPs de máquinas para os quais o serviço não
estará disponível
Intervalo na forma h1:m1-h2:m2 no qual o serviço
estará disponível
Determina a forma do log:
SYSLOG facility level
FILE
filename soft-limit hard-limit
Determina as informações que serão colocadas no log
quando o serviço é iniciado e terminado.
PID, HOST, USERID, EXIT, DURATION
Determina as informações que serão colocadas no log
quando o serviço não pode ser iniciado.
HOST, USERID, ATTEMPT, RECORD
Versão do RPC no formato número-número
Número para serviços UNLISTED RPC
Lista de definições de variáveis de ambientes, no
formato nome=valor, que serão adicionadas ao
ambiente ao iniciar o serviço
Lista de variáveis de ambiente do xinetd que serão
passadas para o serviço
Porto do serviço, listado em /etc/services
Redireciona o serviço para outra máquina em outro
porto. Se for especificado um nome de máquina, o IP
será resolvido somente uma vez no disparo do xinetd.
IP da interface pela qual o serviço será disponibilizado
Sinônimo de bind
Rede em Unix
223
Atributos do xinetd (cont.)
Atributo
banner
banner_success
banner_fail
per_source
cps
max_load
disable
Descrição / valores aceitos
Nome do arquivo com o texto a ser transmitido à
máquina remota após a conexão ao serviço ser
estabelecida
Nome do arquivo com o texto a ser transmitido à
máquina remota quando o serviço é permitido
Nome do arquivo com o texto a ser transmitido à
máquina remota quando o serviço é negado
Número de instâncias do serviço por IP ou
UNLIMITED
Limite de conexões por segundo
Carga do sistema acima da qual conexões para o
serviço são recusadas
Indica se o serviço está desabilitado ou não
Por exemplo, o serviço SWAT - Samba Web Administration Tool - pode
ser disparado utilizando o xinetd através do arquivo /etc/xinetd.d/samba:
# SWAT is the Samba Web Admin Tool
service swat
{
socket_type
= stream
protocol
= tcp
wait
= no
user
= root
server
= /usr/sbin/swat
only_from
= 127.0.0.1
disable
= no
}
Nota: No SuSE Linux alguns serviços vêm desabilitados por motivo de
segurança. Certifique-se de configurá-los adequadamente antes de habilitá-los
(fazendo disable=no)
Redes em Unix
224
Servidores, Estações e Terminais
Os diversos computadores conectados a uma rede podem ser classificados
como:
Terminais:
Equipamentos que não executam aplicações. Apenas fazem a
interface com o usuário.
Estações de trabalho:
Equipamentos que podem executar
aplicações e podem utilizar recursos
compartilhados de um servidor.
Servidores:
Equipamentos que compartilham recursos computacionais
para os terminais e estações de trabalho.
Os primeiros compudadores executando UNIX eram
utilizados através de terminais texto "burros" conectados a
portas seriais (normalmente de placas multiseriais). O
computador central era o servidor, compartilhando todos os
seus recursos computacionais entre as aplicações e usuários.
Com a interface gráfica surgiram as estações de trabalho. As primeiras
estações eram baseadas em arquiteturas RISC ou MIPS, como a Sun SparcStation
e a SGI (Silicon Graphics). Na era dos microcomputadores, ao surgir a rede local,
os PCs foram se transformando em servidores e estações de trabalho. Muitos
servidores Linux são também estações de trabalho. Isto é permitido pelo uso
eficiente do hardware e da estabilidade do kernel e dos aplicativos. Assim, o que
distingue um servidor de uma estação de trabalho é apenas a execução ou não de
aplicativos servidores (programas que atendem requisições de serviços dos
clientes da rede). A instalação e configuração dos aplicativos é o que define se
uma máquina Linux será servidora ou estação de trabalho. Muitas distribuições
oferecem kits diferenciados para a utilização em servidores e estações de trabalho.
A diferença está, basicamente, na existência ou não de pacotes de aplicativos para
as funções de servidor.
Rede em Unix
225
Endereçamento IPv4
A base do protocolo TCP/IP é o endereço IP. A versão atualmente
utilizada é chamada de IPv4. O endereço IPv4 é um número de 32 bits (4 bytes).
Para facilitar sua leitura e a memorização, este número é expresso como 4
números decimais separados por um ponto: w.x.y.z
Por exemplo, o IP 192.168.200.3 é armazenado em 4 bytes consecutivos
como abaixo:
byte 3
192
byte 2
168
byte 1
200
byte 0
3
decimal = 192*2563 + 168*2562 + 200*2561 +3*2560 = 3232286723
E é o número decimal 3232286723 em 32 bits. Pode-se utilizar o
programa ping tanto quanto com a representação do IPv4 quanto seu valor
decimal. Veja o exemplo abaixo :
root@thor:~ # ping -c 3 3232286723
PING 3232286723 (192.168.200.3) 56(84) bytes of data.
64 bytes from 192.168.200.3: icmp_seq=1 ttl=64 time=0.502 ms
64 bytes from 192.168.200.3: icmp_seq=2 ttl=64 time=0.594 ms
64 bytes from 192.168.200.3: icmp_seq=3 ttl=64 time=0.508 ms
--- 3232286723 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.502/0.534/0.594/0.049 ms
root@thor:~ #
o
Note que o programa ping imprime o IP no formato w.x.y.z, a sequência
dos 3 pacotes ICMP (ping request) enviados icmp_seq e o tempo de resposta
time. Ao final são impressas as estatísticas dos pacotes transmitidos incluindo os
tempos de resposta.
Redes em Unix
226
Para facilitar a administração, o espaço de endereços IPv4 foi dividido m
classes. Considerando o valor de w, temos:
Classe
A
B
C
D
E
F
Valores de w
Net Id
HostId
No. de
redes
1 - 126
w
x.y.z
126
128 - 191
w.x
y.z
16.384
192 - 223
w.x.y
z
2.097.151
224 - 239
Endereços de Multicast
240 - 247
Reservada para uso futuro
experimentais e/ou reservados para uso futuro
No. de
nodos
16.777.214
65.534
254
Qualquer IPv4 é formado pela combinação w.x.y.z que é o agrupamento
do endereço de rede NetId com o endereço do nodo HostId.
Endereços especiais
O endereço 127.0.0.1 é denominado loopback. É o endereço IP que toda
máquina possui. É associado ao nome de máquina localhost.
Se todos os bits do HostId forem iguais a 1, o endereço é de broadcast.
Isto é, um pacote enviado para este endereço é destinado a todos os nodos da rede.
Se todos os bits do HostId forem iguais a 0, o endereço é de rede.
A máscara é gerada colocando todos os bits do NetId em 1, e todos os bits
do HostId em 0. Assim, a máscara para a classe A é 255.0.0.0, para a classe B é
255.255.0.0 e para a classe C é 255.255.255.0. O endereço da rede pode ser
especificado no formato endereço da rede/número de bits do NetId. Desta forma,
podemos apenas informar um endereço de uma rede C como 192.168.1.0/24, e
saberemos que a máscara é 255.255.255.0
Rede em Unix
227
Endereços privados
Foram reservadas algumas faixas do espaço de endereçamento IP para
máquinas que nunca serão acessíveis diretamente através da Internet. Eles devem
ser utilizados em redes privadas. Máquinas com estes IPs somente conseguem
acessar a Internet através de um gateway que faça a tradução do endereço de rede
(NAT ou Masquerading).
Classe
A
B
C
Faixa de endereços
10.0.0.0
a 10.255.255.255
172.16.0.0 a 172.31.255.255
192.168.0.0 a 192.168.255.255
Nome do bloco
24-bit block
20-bit block
16-bit block
Utilização de nomes de nodos
Para facilitar a identificação de nodos e de redes, os endereços IP podem
ser colocados nos arquivos /etc/hosts e /etc/networks, ou ainda serem
resolvidos pelo DNS.
A decisão e ordem de pesquisa por nomes é definida pelos arquivos
/etc/host.conf e /etc/nsswitch.conf (utilizando, por exemplo,
files, dns e nis).
Quando é utilizado o DNS, o(s) servidor(es) de nomes e o(s) domínio(s)
default é/são definidos no arquivo /etc/resolv.conf. Este arquivo pode ser
dinamicamente alterado em conexões que utilizam PPP, DHCP ou por BOOTP.
F
Veja mais sobre DNS e NIS no capítulo Serviços de Rede.
Redes em Unix
228
Exemplos do conteúdo destes arquivos podem ser vistos abaixo.
# /etc/host.conf
order hosts bind
multi on
# /etc/hosts
127.0.0.1
localhost
192.168.200.3 thor.starix.br thor
# /etc/networks
loopback 127.0.0.0
starix.local 192.168.200.0
# /etc/resolv.conf
nameserver 192.168.200.3
search
starix.br
# /etc/nsswitch.conf
passwd:
compat
group:
compat
hosts:
files dns
networks:
files dns
services:
files
protocols: files
rpc:
files
ethers:
files
netmasks:
files
netgroup:
files
publickey: files
bootparrms: files
automout:
files nis
aliases:
files
Rede em Unix
229
Subclasses
Um endereço IPv4 tem 32 bits. Para uma classe X qualquer, sendo H o
número de bits do HostId, teremos sempre R = 32 - H bits para o NetId. Assim,
para a classe A temos 8 bits para o NetId e 24 bits para o HostId, para a classe B,
16 bits para o NetId e 16 bits para o HostId e para a classe C, 24 bits para o NetId
e 8 bits para o HostId.
<-------------------------------- 32 bits --------------------------------->
<----------- R bits --------------> <-------------- H bits -------------->
NetId
HostId
Uma classe X qualquer do IPv4 pode ser subdividida em subclasses. Na
subclasse, N bits do HostId são acrescentados ao NetId. Logo teremos, em relação
à classe original, H-N bits para o HostId e R+N bits para o NetId. Como são N bits
’
adicionais, criamos 2N subclasses X i da classe X com 2H - N IPs.
<---------------------------------- 32 bits -------------------------------->
<----------- R bits --------------> <-- N bits --> <--- H - N bits --->
NetId
HostId
Exemplo:
Sendo a classe C 192.168.1.0/24, podemos criar uma subclasse
’
acrescentando 2 bits ao NetId, formando 22 = 4 subclasses C i da classe C com
28-2 = 26 = 64 IPs. A máscara de 24+2 = 26 bits será 255.255.255.192, e os
endereços das 4 subclasses serão 192.168.1.0/26, 192.168.1.64/26,
192.168.1.128/26 e 192.168.1.192/26. Note que sempre podemos obter o último
número da máscara fazendo
2H - 2H - N = 28 - 26 = 256 - 64 = 192.
Redes em Unix
230
Roteamento
Para que um pacote chegue ao seu destino, é necessário saber a rota a ser
utilizada. Para isto, são definidos:
∗ o endereço do destino, que pode ser uma rede ou um nodo;
∗ o gateway, equipamento roteador caso o destino não seja diretamente
acessível através da interface de rede;
∗ a máscara que define o endereço do destino;
∗ a métrica, que é o custo da rota.
Exemplo
Seja uma rede local com endereço classe C 192.168.201.0 e que tenha um
gateway que possui uma interface de rede eth0 com endereço 192.168.201.1. O
gateway também possui acesso a outras máquinas em outra rede local com
endereço classe C 192.168.200.0. Nesta rede, ele possui uma interface de rede
eth1 com endereço 192.168.200.222. Há também um roteador com endereço
192.168.200.2 na segunda rede. Todos os endereços das redes locais são
acessíveis diretamente através das interfaces de rede, por exemplo, eth0.
Rede em Unix
231
Para endereços fora da rede local, os nodos deverão utilizar o gateway.
Para esta configuração, os nodos da rede 192.168.201.0 deverão ter uma tabela de
rota mínima como a seguinte:
Destino
192.168.201.0
loopback
default
Gateway
*
*
192.168.201.1
Máscara
255.255.255.0
255.0.0.0
255.255.255.0
Interface
eth0
lo
eth0
O gateway nesta rede terá a seguinte tabela de roteamento:
Destino
192.168.201.0
192.168.200.0
loopback
default
Gateway
*
*
*
192.168.200.2
Máscara
255.255.255.0
255.255.255.0
255.0.0.0
255.255.255.0
Interface
eth0
eth1
lo
eth1
Redes em Unix
232
Ferramentas para configuração e diagnóstico
ifconfig [ opções ] [ interface ] [ parâmetros ]
Utilizada para configuração e verificação das interfaces de rede.
Podem ser configurados endereços de memória/IO, interrupções,
tipos de media, endereços IPv4, IPv6, IPX, X25, parâmetros da
interface, além de ativação e desativação de protocolos e
interfaces. Podem também serem visualizados os erros e os
números de pacotes recebidos e transmitidos pelas interfaces.
thor:~ # ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:01:02:EC:22:9A
inet addr:192.168.200.3 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::201:2ff:feec:229a/10 Scope:Link
IPX/Ethernet II addr:00000022:000102EC229A
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25772210 errors:60736 dropped:0 overruns:3 frame:91159
TX packets:36766592 errors:0 dropped:0 overruns:0 carrier:88
collisions:0 txqueuelen:100
RX bytes:2616349475 (2495.1 Mb) TX bytes:152546778 (145.4 Mb)
Interrupt:18 Base address:0xb800
thor:~ #
o
Diversos IPs podem ser assinalados a uma única interface utilizando o
nome da interface seguida de :label, como por exemplo eth0:1 ou eth1:ext.
Rede em Unix
233
ping [ opções ] destino
Utiliza os pacotes ICMP ECHO REQUEST e ECHO REPLY e
pode ser útil na verificação da configuração de endereços IP,
roteamento e tempos de resposta. É muito utilizado para saber se
um host está ativo e respondendo. Entretanto uma falta de
resposta não indica necessariamente que o host está inativo ou
inacessível: um firewall poderá barrar ou descartar pacotes ICMP.
Podem ser definidos o tamanho do pacote, a quantidade de pacotes
a serem enviados, intervalo entre pacotes, além de diversos
parâmetros do protocolo IP.
Algumas opções mais utilizadas são:
número de pacotes a serem enviados
-c num
-n
apena numérico (não resolverá nomes)
intervalo entre pacotes em segundos
-i num
pode ser fracionário
-w num
timeout em segundos (pode ser fracionário)
-b
permite ping em endereço de broadcast
thor:~ # ping -c 4 tiger
PING tiger.starix.br (192.168.200.1) from 192.168.200.3 : 56(84) bytes of data.
64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=1 ttl=32 time=950 usec
64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=2 ttl=32 time=929 usec
64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=3 ttl=32 time=978 usec
64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=4 ttl=32 time=868 usec
--- tiger.starix.br ping statistics --4 packets transmitted, 4 received, 0% loss, time 3023ms
rtt min/avg/max/mdev = 0.868/0.931/0.978/0.045 ms
thor:~ #
o
Redes em Unix
234
route [ opções ] [ { add | del | flush } parâmetros ]
Ferramenta para configuração e/ou verificação da tabela de
roteamento. Veja também netstat.
thor:~ # route -n
Kernel IP routing table
Destination
Gateway
201.17.146.0
0.0.0.0
192.168.200.0 0.0.0.0
127.0.0.0
0.0.0.0
0.0.0.0
201.17.146.1
thor:~ #
o
Genmask
255.255.255.0
255.255.255.0
255.255.0.0
0.0.0.0
Flags
U
U
U
UG
Metric
0
0
0
0
Ref
0
0
0
0
Use
0
0
0
0
Iface
eth0
eth1
lo
eth0
Ref é o número de referências a esta rota e não é utilizada pelo kernel do
Linux. Use é numero de utilização desta rota.
Os flags exibidos são:
U - a rota está ativa (Up)
H - a rota é para uma máquina (Host)
R - a rota é refeita dinamicamente
D - a rota é dinâmica
M - a rota foi modificada por um daemon ou por redirecionamento
A - a rota foi instalada por configuracão de endereço
C - a entrada é cache
! - a rota é rejeitada
Rede em Unix
235
ip [ opções ] { link | addr | route | rule | neigh | tunnel | maddr | mroute |
monitor } { comando | flush } [ parâmetros ]
Poderosa ferramenta para configuração e verificação dos diversos
parâmetros dos protocolos de rede.
root@thor:~ # ip link
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: sit0: <NOARP> mtu 1480 qdisc noqueue
link/sit 0.0.0.0 brd 0.0.0.0
3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:00:e8:4d:4f:a7 brd ff:ff:ff:ff:ff:ff
4: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:01:02:ec:22:9a brd ff:ff:ff:ff:ff:ff
root@thor:~ # ip route
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.11
201.17.146.0/24 dev eth0 proto kernel scope link src 201.17.146.157
192.168.200.0/24 dev eth1 proto kernel scope link src 192.168.200.3
169.254.0.0/16 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 201.17.146.1 dev eth0
root@thor:~ # ip neigh
201.17.146.1 dev eth0 lladdr 00:13:5f:05:67:05 DELAY
192.168.200.190 dev eth1 lladdr 00:e0:7d:c2:d2:17 DELAY
192.168.200.200 dev eth1 lladdr 00:16:76:90:c1:94 REACHABLE
192.168.200.41 dev eth1 lladdr 00:06:4f:48:da:74 REACHABLE
root@thor:~ #
o
Redes em Unix
236
netstat [ opções ] [ { sockets ... | Af } ]
Ferramenta genérica para verificação do status de conexões de
rede, interfaces e roteamentos.
Algumas opções mais utilizadas são:
-r
exibe a tabela de rotas
-i
exibe a tabela das interfaces
-s [t | u]
exibe estatísticas de protocolo TCP e/ou
UDP
-n
não resolver os nomes
Os sockets podem ser:
{ -t | --tcp } { -u | --udp } { -w | --raw } { -x | --unix }
--ax25 --ipx --netrom
A família de endereços Af pode ser:
--inet
DARPA
--inet6
IPv6
--ax25
AMPR AX.25
--netrom
AMPR NET/ROM
---ipx
Novell IPX
--ddp
Appletalk
--x25
CCITT X.25
thor:~ # netstat -su
Udp:
11924335 packets received
2739 packets to unknown port received.
27 packet receive errors
11907991 packets sent
thor:~ #
o
Rede em Unix
237
arp [ opções parâmetros ]
Manipula o cache de ARP (Address Resolution Protocol),
mapeamento de endereços ethernet e IPs.
thor:~ # arp -a
atlas.starix.br (192.168.200.31) at 00:01:02:EC:22:AD [ether] on eth0
wolf.starix.br (192.168.200.35) at 00:00:B4:A6:A1:CC [ether] on eth0
spider.starix.br (192.168.200.222) at 00:00:B4:A7:FF:1E [ether] on eth0
apollo.starix.br (192.168.200.2) at 00:E0:7D:A5:EB:21 [ether] on eth0
diana.starix.br (192.168.200.147) at 00:80:C8:7C:7E:16 [ether] on eth0
tiger.starix.br (192.168.200.1) at 00:40:C7:94:11:53 [ether] on eth0
thor:~ #
o
rarp [ opções parâmetros ]
Manipula a tabela RARP do sistema (Reverse Address Resolution
Protocol).
Redes em Unix
238
ipcalc [ opções ] endereço [ [ / ] máscara ] [ máscara ]
Calcula endereços de broadcast, rede, máscaras, sub-redes,
agregados, etc. Use ipcalc --help para maiores informações.
thor:~ # ipcalc 192.168.10.0 - 192.168.11.31
deaggregate 192.168.10.0 - 192.168.11.31
192.168.10.0/24
192.168.11.0/27
thor:~ # ipcalc 201.17.0.0/16
Address: 201.17.0.0
11001001.00010001. 00000000.00000000
Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000
Wildcard: 0.0.255.255
00000000.00000000. 11111111.11111111
=>
Network: 201.17.0.0/16
11001001.00010001. 00000000.00000000
HostMin: 201.17.0.1
11001001.00010001. 00000000.00000001
HostMax: 201.17.255.254
11001001.00010001. 11111111.11111110
Broadcast: 201.17.255.255
11001001.00010001. 11111111.11111111
Hosts/Net: 65534
Class C
thor:~ #
o
geoiplookup { ip | nome }
Localiza geograficamente o endereço fornecido
thor:~ # geoiplookup linuxtech.com.br
GeoIP Country Edition: BR, Brazil
thor:~ # geoiplookup 201.17.146.157
GeoIP Country Edition: BR, Brazil
thor:~ # geoiplookup suse.de
GeoIP Country Edition: DE, Germany
thor:~ #
o
Rede em Unix
239
traceroute [ opções ] destino
Mostra a rota seguida por um pacote TCP/IP da origem até o
destino, incluindo os tempos de resposta.
tcpdump [ opções ] [ expressão ]
Poderosa ferramenta para exibir o tráfego de pacotes na rede.
Além do TCP/IP, suporta protocolos SMB e IPX. Podem ser
fornecidos filtros para os pacotes (origem, destino, protocolo, tipo)
utilizando expressões booleanas.
thor:~ # tcpdump -n -l -i eth0 -c 4
tcpdump: listening on eth0
22:23:49.195111 arp who-has 192.168.200.41 tell
192.168.200.3
22:23:49.195275 arp reply 192.168.200.41 is-at
0:e0:7d:b7:88:4b
22:23:49.200012 192.168.200.41.405252435 >
192.168.200.3.2049:100 getattr [|nfs] (DF)
22:23:49.200432 192.168.200.3.2049 >
192.168.200.41.405252435: reply ok 112 getattr DIR
40700 ids 3009/100 [|nfs] (DF)
thor:~ #
o
bing [ opções ] nodo1 nodo2
Variação do ping para medida de taxa de transferência entre dois
nodos de uma rede.
Outros aplicativos como o snort, o tracepath, e iptraf podem auxiliar a
análise do fluxo de informações nas diversas interfaces de rede. Aplicativos como
socklist e rpcinfo mostram os serviços e portos associados aos processos. O
aplicativo nmap auxilia a identificaçãode portos abertos.
Redes em Unix
240
O iptraf sendo utilizado para monitoramento de conexões:
Tráfego de conexões
Rede em Unix
241
O iptraf sendo utilizado para monitoramento do tráfego de dados.
Tráfego de bytes e pacotes
Redes em Unix
242
Para o modo gráfico existem diversas ferramentas, entre elas:
ethereal ou wireshark
Poderoso analisador de protocolos com possibilidades de filtros e
visualização em tempo real do conteúdo dos pacotes.
xtraceroute
Visualização da rota através do globo terrestre, utilizando o
traceroute.
Rede em Unix
243
A ferramenta nmap é bastante útil na identificação de serviços disponíveis
em um servidor:
hmarx@venus: ~> nmap -sT -P0 thor
Starting Nmap 5.00 ( http://nmap.org ) at 2010-09-09 23:54 BRT
Interesting ports on thor.starix.br (192.168.200.3):
Not shown: 978 closed ports
PORT
STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
111/tcp open rpcbind
139/tcp open netbios-ssn
143/tcp open imap
199/tcp open smux
444/tcp open snpp
445/tcp open microsoft-ds
631/tcp open ipp
993/tcp open imaps
2049/tcp open nfs
2222/tcp open unknown
3306/tcp open mysql
3551/tcp open unknown
8008/tcp open http
10000/tcp open snet-sensor-mgmt
16001/tcp open unknown
32768/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds
hmarx@venus:~> o
Redes em Unix
O nmap possui a ferramenta gráfica zenmap, mostrada abaixo.
244
Rede em Unix
245
Redirecionamento de conexão TCP/IP
Em determinadas ocasiões, é necessário que uma conexão para um
determinado IP/porto seja redirecionada a outro IP/porto. Um exemplo típico é ter
um servidor WWW em uma rede com IPs privados não acessíveis pela Internet.
O redirecionamento pode ser feito por meio do firewall ou de um software
de redirecionamento. Entre os diversos pacotes, o mais simples é o rinetd. Sua
configuração é feita no arquivo /etc/rinetd.conf. Neste arquivo são
definidos os redirecionamentos e os controles de permissão.
Redirecionamento:
bindaddress bindport
connectaddress
connectport
Todas
as
conexões
que
forem
feitas
para
serão
redirecionadas
para
bindaddress/bindport
connectaddress/connectport.
Os argumentos bindaddress e connectaddress podem ser
fornecidos como endereço IP ou por um nome de host. Os
argumentos bindport e connectport podem ser fornecidos como
número ou nomes de serviços dados em /etc/services. No
caso do servidor ter diversos IPs, pode ser utilizado o IP 0.0.0.0
como bindaddress.
Permissões:
allow padrões de IPs
deny padrões de IPs
Regras de permissões a serem subsequentemente seguidas.
Os padrões de IPs são formados por dígitos ‘0‘ a ‘9‘, ‘.‘, ‘? ‘ e
‘*‘. Os caracteres ? e * são utilizados como metacaracteres que
combinam com um caracter ou com uma sequência de caracteres
qualquer.
Redes em Unix
O rinetd pode gerar um log em um arquivo definido por:
logfile arquivo de log
Para um log no formato de um servidor WEB, basta adicionar a linha:
logcommon
Para a utilização do syslog, adicione a linha:
syslog facilidade prioridade
A facilidade/prioridade default é daemon/info.
246
Rede em Unix
247
Endereçamento IPv6
Os enderecos IPv são números de 128 bits, normalmente escritos como
16 números em hexadecimal. Não há classes como no IPv4. Os bits de mais alta
ordem, denominados prefixo, definem o tipo do endereço.
Tipo de endereço
prefixo
reservado
não assinalado
reservado para NSAP
reservado para IPX
não assinalado
não assinalado
não assinalado
endereços de unicast global agregáveis
não assinalado
não assinalado
não assinalado
não assinalado
não assinalado
não assinalado
não assinalado
não assinalado
não assinalado
não assinalado
endereço de unicast local de link
endereço de unicast local de site
endereços de multicast
0000 0000
0000 0001
0000 001
0000 010
0000 011
0000 1
0001
001
010
011
100
101
110
1110
1111 0
1111 10
1111 110
1111 1110 0
1111 1110 10
1111 1110 11
1111 1111
Fração do espaço
de endereçamento
1/256
1/256
1/128
1/64
1/32
1/16
1/8
1/8
1/8
1/8
1/8
1/8
1/8
1/16
1/32
1/64
1/128
1/512
1/1024
1/1024
1/256
Notas:
1. Os endereços não especificados, o endereço de loopback, e os
endereços IPv4 embutidos no IPv6 são assinalados com prefixo
binário 0000 0000.
2. O IANA limita, por enquanto, a alocação de endereços unicast à faixa
de endereços que começam com o valor binário 001. O espaço
restante (aprox. 85% do espaço de endereçamento IPv6) está
reservado para definições futuras.
Redes em Unix
248
Os enderecos mais importantes são os de unicast global agregáveis, que
irão substituir as classes A, B e C do IPv4. O formato destes endereços é:
3
001
13 bits
TLA
ID
32 bits
NLA ID
16 bits
SLA ID
64 bits
interface ID
topologia
identificador
<--------------- topologia pública ------------> <-----------> <-------------------------------------->
do site
da interface
TLA ID é o identificador do agregado de primeriro nível, NLA é o
identificador do agregado do próximo nível e SLA é o identificador do agregado
do nível do site, ou também chamado de identificador da subrede (subnet ID).
O identificador da interface é um super conjunto do espaco de enderecos
do MAC de 48 bits definidos pelo IEEE 802 que são assinalados à marioria das
placas de rede.
Para os testes dos protocolos IPv6 foi definido o 6bone. O byte de mais
alta ordem é 5F (0101 1111). Os próximos 2 bytes é o ASN (Autonomous System
Number) assinalado à empresa ou ao seu ISP. O próximo campo, de 3 bytes, são
os 24 bits de mais alta ordem do IPv4. O endereço da subrede é definido pela
empresa e o endereço da interface é normalmente o endereço MAC de 48 bits.
Mapeando endereços IPv4 em endereços IPv6
Os endereços IPv4 podem ser mapeados em endereços IPv6 colocando os
80 bits de mais alta ordem em 0, seguidos de 16 bits em 1 e então o endereço IPv4
nos 32 bits de mais baixa ordem. Assim, na notacão IPv6, o IP 200.157.187.34
poderá ser escrito como 0:0:0:0:FFFF:200.157.187.34, ou de forma abreviada
::FFFF:200.157.187.34.
0000 .
.
.
.
80 bits
. . .
. . . 0000
16 bits
FFFF
32 bits
Endereço IPv4
Rede em Unix
249
Endereços IPv4 compatíveis com endereços IPv6
Para a transição de IPv4 para IPv6, colocam-se os 96 bits de mais alta
ordem em 0 e então o endereço IPv4 nos 32 bits de mais baixa ordem. Estes
endereços podem ser colocados na base DNS em registros AAAA, no formato
semelhante a ::200.157.187.34.
0000 .
.
.
.
80 bits
. . .
16 bits
0000
. . . 0000
32 bits
Endereço IPv4
Um endereco IPv6 com 127 bits em 0 e 1 bit em 1, escrito como ::1 é o
endereco de loopback, exibido pelo ifconfig como:
inet6 addr: ::1/128 Scope:Host
Endereço não especificado
É um endereço IPv6 com todos os 128 bits em 0, escrito como 0::0 ou
apenas ::.
Endereços de link locais
Um endereço em um link local é utilizado quando não há necessidade de
reencaminhamento (forward). Ele é formado pelo prefixo de 10 bits 1111 1110
10, seguido de 54 bits em 0 e 64 bits da identificação da interface. Estes
endereços sempre começam com fe8 a feb. Assim, uma interface ethernet com
endereço MAC 00:01:02:EC:22:9A, terá o IPv6 de escopo link local
fe80::201:2ff:feec:229a.
10 bits
1111111010
54 bits
0000 . . . . . . . .
. 0000
64 bits
interface ID
Quando o IPv6 está habilitado, usando o ifconfig podemos ver o IPv6 de
scopo local em uma linha parecida com:
inet6 addr: fe80::201:2ff:feec:229a/64 Scope:Link
Redes em Unix
250
Endereços de sites locais
Os endereços IPv6 para sites locais são formados pelo prefixo de 10 bits
1111 1110 11, seguidos por 38 bits em 0, seguidos pela identificação da subrede
de 16 bits, e pelos 64 bits da identificação da interface. Estes endereços sempre
começam com fec0 a feff. Os roteadores IPv6 não podem encaminhar datagramas
com estes endereços para fora do site.
10 bits
11111111011
38 bits
0000 . . . . . 0000
16 bits
SLA ID
64 bits
interface ID
Endereços de multicast
São endereços que possuem o prefixo 1111 1111, ou seja, na base
hexadecimal, começam com ff.
Ferramentas de diagnóstico
Podem ser utilizadas ferramentas como o ping6, traceroute6 e
tracepath6 para diagnóstico de redes utilizando IPv6.
Rede em Unix
251
Internet e Intranet
Uma internet é o termo utilizado para uma interligação de redes :
interconnected networks. A Internet é a rede global interligando milhões de
computadores em todo o mundo. Uma intranet é uma internet local com os
serviços típicos da Internet.
Com a necessidade de interligar computadores diferentes, com sistemas
operacionais diferentes, foi criado o protocolo TCP/IP. Uma internet é uma rede
TCP/IP.
A Internet é definida e controlada por uma grande comunidade
internacional aberta de projetistas de rede, operadores, vendedores e
pesquisadores denominada IETF - Internet Engineering Task Force. Esta
comunidade é organizada em grupos de trabalho em diversas áreas (como
roteamento, transporte, segurança, ...). Em 1986 foi criado o IAB - Internet
Architecture Board - que define a arquitetura da Internet. A gerência das
atividades técnicas do IETF é feita pelo IESG - Intenet Engineering Steering
Group, que também define os padrões da Internet. As políticas de uso da Internet
são definidas pela ISOC - Internet Society, uma organização de membros
especialistas da Internet. O IANA - Internet Assigned Numbers Authority - é
responsável pela atribuição de todos os parâmetros únicos da Internet como
endereços IP, protocolos e portos.
No Brasil, as regras da Internet são definidas pelo Comitê Gestor da
Internet no Brasil (CGI.br), subordinado ao Ministério de Ciência e Tecnologia. O
CGI.br foi criado pelo decreto presidencial Nº 4.829, em 3 de setembro de 2003 e
é responsável pelo domínio de primeiro nível .br.
Redes em Unix
252
Os serviços padrão de uma rede internet são:
•
•
•
•
•
DNS - para servir nomes
Páginas HTML - HyperText Markup Language - para divulgação de
informações
e-mail, para comunicação entre os usuários
ftp, para a transferência de arquivos
outros serviços (chat, telnet, video-conferência, ...)
A configuração básica de uma internet (uma intranet ou um conjunto de
redes a serem conectadas à Internet) segue as mesmas regras de configuração dos
parâmetros da rede TCP/IP.
No capítulo seguinte serão estudados os mais importantes serviços e suas
configurações.
Serviços de Redes
253
8. Serviços de Redes
Domínios
Para facilitar a administração de máquinas em uma rede Unix, elas são
agrupadas em domínios. Em um domínio podem existir servidores primários e
secundários. Estes servidores irão prover as informações para as máquinas do
domínio. Uma mesma máquina poderá pertencer a mais de um domínio.
Existem diversos tipos de domínios. Em redes Microsoft, por exemplo,
existem os domínios SMB e AD; em redes Novell, os domínios Bindery e NDS.
Em redes TCP/IP, os dois domínios mais comuns são o DNS, NIS (também
chamado de YP) e LDAP. Todos eles têm função básica de identificar e/ou
autenticar serviços e usuários comuns em relação a um grupo (de máquinas ou
usuários).
254
Serviço de Redes
Estudaremos aqui os domínios DNS, NIS e LDAP:
DNS - Domain Name System
Base hierárquica distribuída para resolução de nomes. É baseada na
arquitetura cliente/servidor, onde seus componentes são chamados de resolvers e
name servers.
NIS - Network Information System
Também conhecido como YP© - Yellow Page1 - é uma base de dados
distribuída para configuração de usuários, grupos, senhas, permissões, ... É
bastante utilizado na administração centralizada de usuários em uma rede local
onde também há compartilhamento de diretórios através de NFS.
LDAP - Lightweight Directory Access Protocol
Baseado no protocolo X.500, o LDAP é um serviço de diretório que
armazena dados baseados em atributos. Utiliza o modelo cliente-servidor através
do protocolo TCP. É utilizado para a gerência centralizada de usuários, grupos e
outras informações.
_________________________
1 YP é marca registrada da British Telecom.
Serviços de Redes
255
DNS - Domain Name System
No princípio da ARPANET, em 1970, os nomes dos computadores eram
mantidos em um arquivo denominado HOSTS.TXT, que deu origem ao
/etc/hosts. Com o crescimento da rede, em 1984 foi definido o DNS nos
RFCs 882 e 883. As definições atuais estão nos RFCs 1034, 1035 e 3536 (as
extensões para o IPv6) (veja http://www.faqs.org/rfcs).
O DNS é uma base hierárquica distribuída de nomes cuja raiz é o ’.’.
Curiosidade: Crescimento da Internet desde os primeiros anos
Data
1969
1971
01/1973
09/1973
1977
08/1981
05/1982
08/1983
10/1984
10/1985
02/1986
11/1986
12/1987
07/1988
10/1988
01/1989
07/1989
10/1989
Número de
nodos
4
15
35
40
111
213
235
562
1.024
1.961
2.308
5.089
28.174
33.000
56.000
80.0007
130.000
159.000
Data
10/1990
01/1991
07/1991
10/1991
01/1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
Número de
nodos
313.000
376.000
535.000
617.000
727.000
1.300.000
2.200.000
4.900.000
9.500.000
18.000.000
30.000.00
42.000.000
70.000.000
110.000.000
162.000.000
172.000.000
317.000.000
355.000.000
Em 2003 o número de domínios ultrapassou 31.000.000, dos quais 78%
são .COM. Em 2004 o número de domínios ultrapassou 80.000.000 !
Dados do Internet Systems Consortium - www.isc.org
256
Serviço de Redes
No início de 2010, o número de domínios ativos ultrapassou os 113
mihões. São registrados diariamente mais de 72 mil domínios.
O registro.br reporta 1950064 domínios, dos quais 1753136 são
.com.br. São registrados diariamente mais de 380 domínios no
registro.br.
Em setembro de 2009, o número de usuários da Internet no mundo é
estimado em mais de 1.7 bilhões.
Serviços de Redes
257
Estrutura hierárquica do DNS
O IETF - Internet Engineering Task Force, através do IANA - Internet
Assigned Numbers Authority, define os domínios de primeiro nível (top level
domains ou TLD) da Internet: Os TLDs genéricos são, por exemplo, .com, .edu,
.org, .mil, .int, net. Para cada país, foram definidos os códigos de TLD como, por
exemplo: .br, .us, .uk, .ca, .au, .de, .fr, .. Em cada país, há um órgão responsável
pelo registro de sub-domínios, como .com.br, .co.uk, .net.br, .net.au, ...
No Brasil, o órgão responsável é o REGISTRO.BR (http://registro.br).
Qualquer empresa que queira ter um domínio na Internet deve primeiramente
consultar o REGISTRO.BR para verificar a disponibilidade do nome do domínio
(Exemplo : minhaempresa.com.br). Caso esteja disponível, deverá configurar
pelo menos 2 servidores de nome (um master e um slave), resolvendo o domínio
para poder cadastrá-lo no REGISTRO.BR. Após um certo tempo, o cadastro será
publicado para a Internet. A informação irá aos poucos se propagar pelos diversos
servidores de nome da Internet. Poderá demorar alguns dias para que a maioria
das máquinas da Internet conheçam o novo domínio.
258
Serviço de Redes
Lendo nome de domínios
A leitura de um nome de máquina completo, incluindo o domínio, é feita
de trás para frente.
Seja, por exemplo, o nome
lithium.cchem.berkeley.edu.
De .edu, sabemos que é o domínio educacional de primeiro nível
(top-level domain).
De berkeley.edu, sabemos que é o domínio da Universidade da Califórnia
em Berkeley
.
De cchem.berkeley.edu, sabemos que é o sub-domínio do Departamento
de Química
E lithium é o nome de uma máquina do Departamento de Química.
Assim, lithium.cchem.berkeley.edu é o nome completo (FQDN - Fully
Qualified Domain Name) de uma máquina do departamento de química da
Universidade da Califórnia em Berkeley e deve ser resolvido para um ou mais
IPs:
Uma consulta ao DNS usando o comando host revela o IP 128.32.198.12 :
hmarx@thor:~> host lithium.cchem.berkeley.edu.
lithium.cchem.berkeley.edu has address 128.32.198.12
hmar@thor:~>
o
Serviços de Redes
259
Servidores de Nomes
Existem dois tipos de servidores de nome: o primário e o secundário ) ou
escravo) (primary master e secondary master ou slave). As informações sobre os
domínios são feitas através de transferências denominadas zone transfer. A
resolução dos nomes é feita do topo para o nome da máquina, e deverá resultar
em um endereço IP.
Assim, o nome www.suse.de é resolvido:
.de
suse.de
www.suse.de
o domínio de primeiro nível da Alemanha.
o domínio da SuSE, hoje da empresa Novell, Inc.
(provavelmente) a máquina servidora de páginas
web do domínio suse.de Este nome será mapeado
para um endereço IP.
Resolução de endereços
Além do domínio de nomes, os endereços também
são resolvidos (mapeados para nome). Os
endereços IP estão no sub-domínio in-addr.arpa.
Seja, por exemplo, www.suse.de, que tem
endereço 195.135.220.3. Logo, o mapeamento está
no domínio reverso 3.220.135.195.in-addr.arpa.
260
Serviço de Redes
Software DNS
O software mais utilizado para resolução de nomes é o BIND - Berkeley
Internet Name Domain. Inicialmente desenvolvido para sistemas Unix, hoje é
disponível para diversos sistemas operacionais. O programa é o /usr/sbin/named.
A configuração do BIND é feita através de alguns arquivos. O arquivo
principal é o /etc/named.boot na versão BIND4, ou o
/etc/named.conf na versão BIND8 ou superior. Este arquivo irá definir na
sessão options o diretório da base de dados do DNS e, nas sessões zone, os
parâmetros para definição dos domínios e sub-domínios (denominados zones).
No diretório definido (o default é /var/named para as versões até o
BIND8 e /var/lib/named para a versão BIND9 ou superior), estão os
arquivos que descrevem os domínios. Estes arquivos são formados por entradas
de controle e registros. Comentários podem ser inseridos por ";".
Entradas de controle
$ORIGIN subdomínio
Muda a origem do domínio para as definições subsequentes
$INCLUDE arquivo
Inclui o arquivo arquivo que deve conter entradas de controle e
registros do DNS.
$TTL ttl
Define ttl o tempo de vida default em segundos. Podem ser
utilizados os sufixos M, H, D, W para indicar minutos, horas, dias
ou semanas.
$GENERATE faixa lhs [ ttl ] [ classe ] tipo rhs [ comentário ]
Gera registros de acordo com a faixa fornecida. classe e tipo serão
definidos no tópico ¨Formato dos registros do DNS¨.
lhs pode ser $ ou ${offset[,width[,base]]}. O $ representará o valor
da iteração que pode ser somado a offset, com 3 posições e na base
numérica base. rhs é tratado da mesma forma do lhs.
Serviços de Redes
261
Formato dos registros do DNS
O formato do registro (chamado de RR - Resource Record) é:
[ nome ] [ ttl ] [ classe ] tipo dados
onde:
nome
ttl
classe
tipo
é o objeto definido (domínio, servidor, ...)
é o tempo de vida da informacão (Time To Live)
pode ser:
IN
Internet
HS
HesioId (MTI Service protocol)
CH Chaos (MIT LAN protocol)
Geralmente, apenas a classe IN é utilizada.
é o tipo do registro.
O formato dos dados varia conforme o tipo do registro.
O nome deve ser terminado por ´.´. Caso contrario, será concatenado com
a origem: domínio que está sendo definido ou o alterado pelo controle $ORIGIN.
´@´ é o domínio que está sendo definido em zone no arquivo
/etc/named.conf. Substitui-se então o ´@´ do email nos dados dos registros
por ´.´.
Se nome não for especificado (deixado em branco), as informações são
relacionadas ao último nome anteriormente definino.
262
Serviço de Redes
Os formatos dos principais tipos de registros são:
1. Start of Authority
SOA dominio email (
serial
refresh
retry
expire
minimum
)
onde
é um número sequencial sempre crescente. É
serial
usado para verificar alterações nos dados
definidos. É comum usar a data de última
alteração no formato AAAAMMDDss, onde ss
é incrementado a cada alteração do dia;
refresh
é o tempo entre atualizações dos servidores de
DNS secundários;
retry
é o tempo entre tentativas de atualização dos
servidores de DNS secundários em caso de
falha na conexão com o primário;
é o limite de validade das informações sobre o
expire
domínio;
minimum é o tempo que respostas negativas (tipo domínio
inexistente) pode estar no cache de servidores
de DNS secundários.
meudominio.com.
2009110305
2D
4H
2W
1W
)
IN SOA meudominio.com. root.dominio.com. (
; serial Nov 3, 2009, revision #5
; refresh in 2 days
; retry in 4 hours
; expire in 2 weeks
; minumin 1 week
Serviços de Redes
263
2. Name server
NS servidor
onde
é o nome ou o IP do servidor de nomes do
domínio.
IN
NS ns1.meudominio.com.
3. Name to address mapping
A ipv4
onde
ipv4
server.meudominio.com.
é o IPv4, formado por 4 números de 8 bits
separados por ’.’.
IN A 192.168.10.17
4, Name to IPv6 address mapping
AAAA ipv6
onde
ipv6
IN
é o IPv6, de acordo com as regras definidas no
capítulo anterior, Rede em Unix.
AAAA 2001:0780:0:1::1
264
Serviço de Redes
5. Name to IPv6 address mapping (experimental)
A6 prefixo ipv6
onde
prefixo
ipv6
nome
[ nome ]
é o número de bits do prefixo;
é o IPv6;
é o nome de referência.
www.meudominio.com.
IN A6 96 ::fef7:6d2c ipv6.provedor.com.
ipv6.provedor.com.
IN A6 0 3ffe:1900:4545:2:2d0:9ff::
6. Address to name mapping
PTR nome
onde
nome
é o nome.
17.10.168.192.in-addr.arpa. IN PTR server.meudominio.com.
7. Cannonical name (aliases)
CNAME nome
onde
nome
$ORIGIN meudominio.com.
mail IN CNAME servidor
é o apelido para o objeto.
Serviços de Redes
265
8. Textual information
TXT "texto"
onde
texto
é um texto livre.
mail IN TXT "Servidor de e-mails"
9. Responsible person
RP email domínio
onde
email
é o e-mail do responsável;
domínio é o domínio associado ao responsável.
IN RP root.meudominio.com. meudominio.com.
10. Mail exchange
MX ordem servidor
onde
é o número de preferência do servidor de email.
ordem
Número menor tem maior preferência;
servidor é o nome do servidor que recebe e-mails para o
o objeto (tipicamente um domínio).
IN MX 10 mail.meudominio.com.
IN MX 20 mail.provedor.com.
266
Serviço de Redes
11. Host information
HINFO hardware software
onde
hardware é uma descricão do equipamento;
software é uma descricão do ambiente operacional do
equipamento.
www IN HINFO "Quad Xeon" "SuSE Linux"
12. Mailbox or Mail list information
MINFO admin error
onde
é o e-mail do administrador;
admin
error
é o e-mail para onde vão os erros.
IN MINFO mailadm.meudominio.com. mailerr.meudominio.com.
Serviços de Redes
267
13. Geographical location
LOC lat-d [ lat-m [ lat-s ] ] N | S long-d [ long-m [ long-s ] ]
E | W alt [ m] [ size [ m] [ hp [ m ] [ vp [ m ] ] ] ]
onde
lat-d
sào os graus da latitude;
são os minutos da latitude;
lat-m
lat-s
são os segundos da latitude;
são os graus da longitude;
long-d
long-m
são os minutos da longitude;
são os segundos da longitude;
long-s
alt
é a altitude em metros;
é o diâmetro do círculo representando a precisão
size
em metros da localização;
é a precisão horizontal em metros;
hp
vp
é a precisão vertical em metros.
IN LOC 44 0 0.000 S 19 30 0.000 W 860.00m 0.00m 10000m 10m
14. Well known services
WKS ip protocolo serviço [ { serviço } ]
onde
ip
é o IP do objeto;
protocolo é o protocolo dos serviços (tcp ou udp);
serviço
são os serviços conhecidos neste objeto.
IN WKS tcp http pop3 smtp
268
Serviço de Redes
15. SRV - Available Services
srvce.proto [ .nome] [ ttl ] IN SRV ordem peso porto objeto
onde
nome simbólico do serviço como _http, _ftp,
srvce
_sip e _ldap;
proto
é o nome simbólico do protocolo como _tcp e
_udp;
nome
nome do objeto ou o definido anteriormente ou
em $ORIGIN;
ttl
é o tempo de vida;
ordem
é o número de prioridade. Quanto mento maior
a prioridade;
peso
é o peso relativo entre objetos;
é o número do porto do serviço;
porto
objeto
é o nome do servidor destino.
IN SRV
0 5 80 www.meudominio.com.
Serviços de Redes
269
16. DNSKEY - DNS Public key
DNSKEY flags proto algo dados
onde
número de 16 bits (0, 256 ou 257):
flags
bits 0-6
não usados, devem ser 0
bit 7
indica assinatura de zona
bits 8-14
não usados, devem ser 0
bit 15
indica ponto de segurança
proto
código do protocolo (somente 3 é atualmetne
valido)
algor
código do algoritmo
0:
reservado
1:
RSA-MD5
2:
Diffie-Helmann
3:
DSA-SHA-1
4:
Elliptic curve
5:
RSA-SHA-1
6-251: não assinalado
252: Indirect
253: URI privada
254: OID privada
255: reservado
chave no codificada em base64
dados
linuxtech.com.br.
IN DNSKEY 256 3 5 (
AwEAAchq3AcolVSob3ZC3H4YwSYDx6R2V0I1ivfKff0SLWmTQklYjuAT
uZZrZWqMMU3J5sXxSo7gT91vNONPvwNsRh089wjF0dJA3/rdGSVt8M0R
1O1wG/pLFiQTE8mjAjBY5TpOAlJgJNWUlQU6xkUmvgOCw+ysw8KFbrgN
FyQm5p4T
)
270
Serviço de Redes
17. RRSIG - Signature Record
RRSIG tipo algo nome ottl expira inicio keytag dono assinatura
onde
registro RR
tipo
algo
código do algoritmo como em DNSKEY
número de componentes no nome do objeto
nomes
tempo de vida do objeto
ottl
expira
data de expiração do RRSIG
data inicial
inicio
keytag
código de verificação da assinatura
objeto dono da chave privada
dono
assinatura assinatura digital no formato base64
86400 RRSIG SOA 5 3 86400 20100202004030 (
20100103004030 43461 linuxtech.com.br.
KNZkSgaxBqf6kREdbegt+SaVLEgs4xlPBZ1d
egRU1x3Gc12paIZ9426NxDT1yOhHrMz4lP1x
dtc9jUEyDPXHxt+w7Rr/PbTYbxKS72SFQTgd
uCWz1xexI2I511geITmr3mga8V5skgS08T0i
lmt+8XKZ2V9WWVF5FK+OrCPCx/4= )
linuxtech.com.br.
)
IN RRSIG SOA 5 3 86400 20100202004030 (
20100103004030 43461 linuxtech.com.br.
KNZkSgaxBqf6kREdbegt+SaVLEgs4xlPBZ1d
egRU1x3Gc12paIZ9426NxDT1yOhHrMz4lP1x
dtc9jUEyDPXHxt+w7Rr/PbTYbxKS72SFQTgd
uCWz1xexI2I511geITmr3mga8V5skgS08T0i
lmt+8XKZ2V9WWVF5FK+OrCPCx/4= )
Serviços de Redes
271
18. NSEC - Next secure record
NSEC próximo ( lista_rr )
onde
próximo próximo nome de servidor no arquivo de zona
lista de registros para o nome
lista_rr
IN NSEC www ( A TXT MX NSEC RRSIG )
www IN A 192.168.10.15
IN TXT "Servidor WEB"
IN MX 10 mail.meudominio.com.
IN RRSIG
272
Serviço de Redes
Exemplo de configuração
A resolução de nomes utiliza o arquivo /etc/resolv.conf que define
o(s) domínio(s) para nomes não qualificados e o(s) servidor(es) de nome default
para o cliente do DNS.
#
# /etc/resolv.conf
#
search meudominio.com
nameserver 192.168.1.1
Seja o domínio meudominio.com. Neste domínio, temos diversas
máquinas, cujos endereços e funções são vistos abaixo:
Nome da máquina
ns
mail
maq1
maq2
www
Endereço IP
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
Função
servidor de nomes
servidor de e-mail
estação 1
estação 2
servidor web
Serviços de Redes
273
Suponha que o servidor seja também escravo (um DNS secundário) do
domínio outrodominio.br, resolvido pelo servidor primário com IP 192.168.2.1.
O arquivo /etc/named.conf pode então conter :
#
# Arquivo de configuração exemplo, simplificado do BIND 9.2
#
options {
directory "/var/lib/named";
check-names master warn;
pid-file "/var/run/named.pid";
files unlimited;
recursion yes;
multiple-cnames no;
forwarders {
200.150.13.178;
# Starix/LinuxSupport
200.150.4.5;
# Way Internet
};
};
zone "localhost" in {
type master;
file "localhost.zone";
check-names fail;
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.zone";
check-names fail;
allow-update { none; };
};
zone ¨.¨ in {
type hint;
file "root.hint";
};
zone
"meudominio.com" in {
type master;
file "master/meudominio.com.zone";
allow-transfer { any; };
notify yes;
};
zone "1.168.192.in-addr.arpa" in {
type master;
file "master/192.168.1.zone";
check-names fail;
allow-update {none;};
};
zone "outrodominio.br" in {
type slave
file "slave/outrodominio.zone";
masters { 192.168.2.1; };
};
274
Serviço de Redes
O arquivo meudominio.zone que define o domínio meudominio.com
pode ser:
; Zone meudominio.com
$ORIGIN br.
$TTL
1D
meudominio
IN SOA meudominio.com. root.meudominio.com. (
2001030101
; serial
3H
; refresh
1H
; retry
1W
; expire
1D )
; TTL minimo
IN NS ns.meudominio.com.
IN A 192.168.1.1
IN MX 10
mail.meudominio.com.
IN RP
root.meudominio.com. root.meudominio.com.
IN LOC 19 55 00.000 S 43 57 00.000 W 858.00m 0.00m 10000.00m 10.00m
IN WKS 192.168.1.1 tcp domain
IN WKS 192.168.1.1 udp domain
$ORIGIN meudominio.com.
ns
IN A 192.168.1.1
mail IN A 192.168.1.2
maq1 IN A 192.168.1.3
maq2 IN A 192.168.1.4
www
IN A 192.168.1.5
De forma semelhante, o arquivo 192.168.1.zone que define o
domínio reverso 1.168.192.in-addr.arpa pode ser:
; Zone 1.168.192.in-addr.arpa
$TTL
1D
@
IN SOA meudominio.com. root.meudominio.com. (
2001030101
; serial
3H
; refresh
1H
; retry
1W
; expire
1D )
; TTL minimo
IN NS ns.meudominio.com.
IN A
192.168.1.1
IN MX 10 mail.meudominio.com.
IN RP
root.meudominio.com. root.meudominio.com.
$ORIGIN 1.168.192.in-addr.arpa.
1
IN PTR ns.meudominio.com.
2
IN PTR mail.meudominio.com.
3
IN PTR maq1.meudominio.com.
4
IN PTR maq2.meudominio.com.
5
IN PTR www.meudominio.com.
Note que o símbolo @ utilizado no registro SOA acima é substituído pelo
domínio do arquivo definido em /etc/named.conf. Assim, o @ é equivalente
a "1.168.192.in-addr.arpa.".
Serviços de Redes
275
O arquivo slave/outrodominio.zone será criado automaticamente
por transferência de zona do servidor primário. O servidor primário 192.168.2.1,
deverá permitir a transferência da zona utilizando a diretiva allow-transfer.
Segurança no DNS
Para a geração das chaves é utilizado o aplicativo dnssec-keygen. Para a
geração da assinatura é utilizado o aplicativo dnssec-signzone. Para gerar a
assinatura para o dominio meudominio.com, utilizamos, por exemplo,
root@thor:/var/lib/named/master # dnssec-keygen -a RSASHA1 -b 512 \
-n zone neudominio.com
Kmeudominio.com.+005+12906
root@thor:/var/lib/named/master # o
Serão gerados dois arquivos. O registro DNSSEC com a chave pública
está no arquivo com a extensão .key (Kmeudominio.com.*.key):
meudominio.com. IN DNSKEY 256 3 5 (
AwEAAaPF9T2ArDW8xtD8fguk/x44WQTtB5rhwZv8LFugnzbtotJvhnmB
RgNjtaS9N3e8crJ5LCu5+oxKiRDwcFceCkU=
)
Este texto deverá ser inserido no arquivo que descreve o domínio que fica
normalmente no diretório /var/lib/named/master/.
276
Serviço de Redes
E a chave privada está no arquivo com a extensão .private
(Kmeudominio.com.*.private) :
Private-key-format: v1.2
Algorithm: 5 (RSASHA1)
Modulus:
o8X1PYCsNbzG0Px+C6T/HjhZBO0HmuHBm/wsW6CfNu2i0m+GeYFGA2O1pL03d7xysnksK7n6jEqJEPBwVx4KRQ==
PublicExponent: AQAB
PrivateExponent:
IVvAES/1Y9i40naroemQwXIOx88T/ns/eWtLCbrU01YOntZQdkWy/eb6DoviEf1JguBvEzCtlGuFpBytLZNfgQ==
Prime1: 09YtwfUYEUl+S5/mkepX7pQbL5SOc6CFy1MeTKsUeWE=
Prime2: xeqdaTijQEdUoAM6jKmToCI99hPPImj1AnsFB+EIh2U=
Exponent1: sUX/LN0qsuzJ4AeEMH/n7iPLTFoJjAG9dZWtOYPBsoE=
Exponent2: MQ10FCcgdwb2123VbhV9bDvwZXQFa37d8s5wscI5be0=
Coefficient: 0pT8G7+m1148EqLEyg9UdFiPYtWm9bmznyUyVaRPpjc=
Para gerar os registros RRSIG com as assinaturas para um domínio
utiliza-se o aplicativo dnssec-sigzone. Será gerado o arquivo com extensão
.signed que contém os registros RRSIG para todos os objetos definidos no
domínio.
root@thor:/var/lib/named/master # dns-signzone -o meudominio.com \
meudominio.com.zone Kstarix.br.+005+13026.key
meudominio.com.zone.signed
root@thor:/var/lib/named/master # o
Serviços de Redes
277
Ferramentas de diagnóstico
Para diagnosticar problemas no DNS, existem diversas ferramentas
disponíveis:
dnsdomainname
Exibe o domínio DNS
nslookup
Pesquisa interativa de nomes e IPs. O exemplo abaixo utiliza o
nslookup do BIND versão 8 por ser mais completo.
hmarx@thor: ~> nslookup
Default Server:
thor.starix.br
Address:
192.168.200.3
> ls linuxtech.br
[thor.starix.br]
#$ORIGIN linuxtech.br.
@
1D IN A
192.168.200.3
thor
1D IN A
192.168.200.3
www
1D IN A
192.168.200.3
> server ns.linuxsupport.com.br
Default Server:
ns.linuxsupport.com.br
Address:
201.17.146.157
> www.linuxsupport.com.br
Server: ns.linuxsupport.com.br
Address: 201.17.146.157
Name:
www.linuxsupport.com.br
AddressL 201.17.146.157
> ^D
hmarx@thor: ~>
o
278
Serviço de Redes
dnsquery
Pesquisa em servidores de DNS
hmarx@thor: ~> dnsquery -n ns.linuxtech.com.br -t mx starix.com.br
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42483
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 4
;;
starix.com.br, type = MX, class = IN
starix.com.br.
1D IN MX
10 mail.linuxsupport.com.br.
starix.com.br.
1D IN MX
20 master.softaplic.com.br.
starix.com.br.
1D IN NS
ns.starix.com.br.
starix.com.br.
1D IN NS
ns2.starix.com.br.
starix.com.br.
1D IN NS
master.softaplic.com.br.
mail.linuxsupport.com.br. 1D IN A 200.150.13.178
master.softaplic.com.br. 1D IN A 200.162.94.241
ns.starix.com.br.
1D IN A
200.150.13.178
ns2.starix.com.br.
1D IN A
200.150.13.177
hmarx@thor: ~>
o
traceroute
Da mesma forma, o traceroute utilizará o DNS para exibir o nome
dos nodos.
dig
Faz pesquisas em servidores de nome.
dnsquery
Pesquisa servidores de nome usando o resolver.
host
Exame de nomes de nodos no DNS.
hmarx@thor: ~> host linuxsupport.com.br
linuxsupport has address 201.17.146.157
linuxsupport.com.br mail is handled (pri=10) by mail.linuxsupport.com.br
linuxsupport.com.br mail is handled (pri=20) by master.softaplic.com.br
hmarx@thor: ~>
o
Serviços de Redes
named-xfer
Transferência de definição de domínios.
thor:~ # named-xfer -z starix.com.br -f starix.zone ns.starix.com.br
named-xfer[30426]: send AXFR query 0 to 201.17.146.157
thor:~ # head starix.zone
; BIND version named 8.2.4-REL Thu Sep 20 04:20:40 GMT 2001
;BIND version root@knox:/usr/src/packages/BUILD/bind8-8.2.4/bin/named
;zone ´starix.com.br´ first transfer
;from 201.17.146.157:53 (local 192.168.200.3) using AXFR at Wed Nov 18
14:08:24 2009
$ORIGN com.br.
starix 86400 IN
SOA starix.com.br. hmarx.starix.com.br. (
2002091201 43200 3600 3600000 86400 )
86400 IN
NS
ns.starix.com.br.
86400 IN
NS
ns2.starix.com.br.
86400 IN
NS
master.softaplic.com.br.
thor:~ #
o
279
280
Serviço de Redes
NIS - Network Information System
Em um sistema de computação distribuído, sempre existe um problema de
ter cópias de arquivos de configuração comuns nas diversas máquinas. Arquivos
como os de password, grupo, hosts, etc., podem ser mantidos em uma base de
dados com administração centralizada.
A base de dados do NIS contém informações dos arquivos
/etc/passwd, /etc/group, /etc/ethers, etc., que serão recuperadas
pelas máquinas que estão utilizando NIS.
O NIS segue o modelo cliente/servidor. Um servidor NIS é uma máquina
que possui os arquivos de dados do NIS, denominados maps. Clientes são
máquinas que fazem requisições aos servidores. Os servidores são divididos em
mestre (master) e escravos (slaves). O servidor mestre é o único que contém a
base de dados e pode modificá-la. Os escravos não modificam a base, apenas
tratam as requisições dos clientes.
Utilizando o SuSE Linux até a versão 7.3, a configuração básica do NIS
pode ser feita pelo YaST ou alterando manualmente o arquivo
/etc/rc.config. A partir da versão 8.0, você pode configurar o servidor NIS
através do arquivo /etc/sysconfig/ypserv, e o cliente NIS através do
arquivo /etc/sysconfig/ypbind. Você pode utilizar os scripts rcypserv e
rcypclient (ou rcypbind a partir do SUSE Linux 8.0) para iniciar ou parar o
serviço NIS.
Para configurar um NIS master, você deve inicialmente definir o nome do
domínio. Note que este nome nada tem a ver com o nome do domínio do DNS.
Você pode utilizar o programa domainname para isto. Note que este programa é
equivalente ao ypdomainname ou nisdomainname e não o dnsdomainname.
Para que usuários da base NIS não tenham acesso local ao servidor NIS,
certifique-se de que o /etc/passwd no NIS master não contenha a linha:
+::0:0::
Serviços de Redes
281
A base de dados NIS normalmente é colocada sob o diretório /var/yp.
Neste diretório você encontrará um arquivo Makefile que é utilizado para a
construção da base de mapas. Você poderá editá-lo para definir quais mapas serão
colocados na base NIS. Procure pelo destino all: e utilize as dependências que
desejar. Abaixo você pode ver o trecho do arquivo Makefile onde serão criados os
mapas para passwd, group, rpc, services, netid e ypservers.
#all:
passwd group hosts rpc services netid protocols netgrp mail \
# shadow publickey # networks ethers bootparams printcap \
# amd.home auto.master auto.home auto.local passwd.adjunct \
# timezone locale netmasks
all: passwd group rpc services netid ypservers
Utilize o make. Automaticamente serão criados os mapas sob o diretório
com o nome do domínio definido pelo comando ypdomainname.
Os mapas criados possuem nomes como passwd.byname,
passwd.byuid, services.byname, services.byservicename,
hosts.byaddr, ... Estes mapas ficam no diretório /var/yp/domínio em
arquivos com o mesmo nome do mapa. Alguns mapas podem ser referenciados
por um apelido. O mapa passwd.byname pode ser referenciado simplesmente
como passwd.
Nos clientes, inclua nos arquivos base (por exemplo, /etc/passwd) a
linha:
+::0:0::
Habilite o cliente NIS através do programa ypbind ou pelo script
rcypbind.
Para permitir que os clientes NIS possam alterar suas senhas no servidor
NIS, há o serviço yppasswdd. Ele é disparado no servidor mestre.
282
Serviço de Redes
Existem diversas ferramentas para a manipulação das informações da base
do NIS.
ypdomainname [ domínio ]
domainname
Exibe ou altera o domínio NIS.
hmarx@thor: ~> ypdomainname
TREINAMENTO
hmarx@thor: ~>
o
ypwhich [ -d domínio ] [ [ -t ] -m [ mapa ] | [ -Vn ] máquina ] | -x
Exibe o nome do servidor NIS de um domínio ou o servidor mestre de um
mapa, opcionalmente para uma determinada máquina.
Algumas opções:
-d domínio
-t
-m mapa
-Vn
-x
Especifica o domínio NIS desejado
Evita a tradução do nome do mapa para o apelido
Procura o servidor NIS para o mapa especificado
Define a versão do NIS (default é 2)
Exibe a tabela de tradução de apelidos de mapas
hmarx@thor: ~> ypwhich
spider.starix.br
hmarx@thor: ~>
o
Serviços de Redes
283
yppasswd [ -f ] [ -l ] [ -p ] usuário
ypchfn usuário
ypchsh usuário
O programa yppasswd é utilizado para alterar a senha de usuário ou
informações na base NIS. O usuário deverá ter aberto uma sessão validada pelo
NIS. Note que apenas o root pode alterar as informações de outro usuário.
Algumas opções:
-f
-l
-p
Altera os campos GECOS (equivalente a ypchfn)
Altera o login shell (equivalente a ypchsh)
Altera a senha
hmarx@thor: ~> yppasswd -f
Changing NIS account information for hmarx on thor.starix.br.
Please enter password:
Changing full name for hmarx onm thor.starix.com.br.
To accept the default, simply press return. To enter an empty
field, type the word "none".
Name: [Helio Marques Sobrinho]:
Location [Starix]:
Office Phone [3284-3001]:
Home Phone []:
The GECOS information has been changed on thor.starix.br.
hmarx@thor: ~>
o
284
Serviço de Redes
ypcat [ -kt ] [ -d domínio ] mapa | -x
Exibe valores das chave de uma base NIS.
Algumas opções:
-d domínio
-k
-Vn
-x
Especifica o domínio NIS desejado
Exibe as chaves do mapa
Define a versão do NIS (default é 2)
Exibe a tabela de tradução de apelidos de mapas
hmarx@thor: ~> ypcat -x
Use "ethers"
for map
Use "aliases"
for map
Use "services" for map
Use "protocols" for map
Use "hosts"
for map
Use "networks" for map
Use "group"
for map
Use "shadow"
for map
Use "passwd"
for map
hmarx@thor: ~>
o
"ethers.byname"
"mail.aliases"
"services.byname"
"protocols.bynumber"
"hosts.byname"
"networks.byaddr"
"group.byname"
"shadow.byname"
"passwd.byname"
ypmatch [ -d domínio ] [ -kt ] chave ... mapa | -x
Exibe as informações de uma ou mais chaves de um mapa NIS.
Algumas opções:
Especifica o dominio NIS desejado
Mostra aas chaves do mapa
Evita a tradução do nome do mapa para o apelido
Evita a tradução do nome do mapa para o apelido
-d domínio
-k
-t
-x
hmarx@thor: ~> ypmatch hmarx flavia passwd
hmarx:$1$pYJmDsRl$5Nzq713I0x5G60nYW7hfh/:1000:3000:Helio Marques
Sobrinho,Starix,3284-3001:/home/hmarx:/bin/bash
flavia:$1$m4ZTl.qN$/1xPFnxJhtYwPi9t4oNVL.:502:3000:Flavia de Castro Mendes
Marques,,3284-3001:/home/flavia:/bin/bash
hmarx@thor: ~>
o
Serviços de Redes
285
Manualmente, a base de dados poderá ser inicializada pelo programa
ypinit:
/usr/lib/yp/ypinit -m
O ypinit irá criar um diretório para o domínio em /var/yp, com os
mapas e pedir os nomes dos servidores NIS. Você só pode ter um servidor mestre.
Caso queira aumentar o desempenho em uma rede grande, você poderá criar
servidores escravos. Dispare o servidor NIS utilizando o programa ypserv ou o
script rcypserv.
Os servidores escravos são inicializados utilizando o comando:
/usr/lib/yp/ypinit -s mestre
286
Serviço de Redes
LDAP - Lightweight Directory Access Protocol
Originalmente o LDAP foi criado como um front end para o protcolo
X.500, pela Universidade de Michigan, implementando a maioria das suas
funcionalidades com menor custo. Foram removidas as redundâncias e as
operacões raramente utilizadas.
O protocolo LDAP é otimizado para leitura e não possui controle de
transações ou rollbacks. É estensível através de modificações em seus esquemas.
Ele permite a distribuição de servidores e replicação de informações em múltiplos
locais. As informações são armazenadas em atributos. O LDAP é melhor no
tratamento de informações pequenas e normalmente com transações simples em
uma única entrada.
Definições
DN
RDN
DIT
LDIF
OID
Distinguished Name
Relative Distinguished Name
Directory Information Tree
LDAP Data Interchange Format
Object Identifier
Um DN é composto por 2 partes. A parte mais à esquerda é um RDNe o
restante é um DN base. O DNS é utilizado para gerar o DN base.
Por exemplo, em
uid=hmarx,ou=People,dc=linuxtech,dc=com,dc=br
O RDN é
uid=hmarx
e o DN base é
ou=People,dc=linuxtech,dc=com,dc=br
Serviços de Redes
287
Estrutura hierárquica
As entradas são armazenadas em uma estrutura em árvore chamada
Directory Information Tree. O DIT é similar ao sistema de arquivos hierárquivo
do Unix. Cada entrada pode conter dados e/ou conter informacões sobre outras
entradas. Cada servidor contém uma sub-árvore.
Esquemas
Um esquema é um conjunto de regras que descreve o tipo de dado a ser
armazenado, Ele mantém a consistência e a qualidade do dado. Um bom esquema
reduz a duplicidade dos dados e mantém uma interface consistente entre as
aplicacões e os dados.
Um esquema contém atributos requeridos, atributos permitidos,
informações de como comparar atributos, limites e restrições de atributos. Um
atributo tem um nome (identificador único), um identificador de objeto OID
(sequência de números inteiros separados por ’.’, a sintaxe do atributo e se o
atributo é multivalorado ou não.
288
Serviço de Redes
Os atributos definidos no RFC2256 são:
uid
cn
sn
l
ou
o
dc
st
c
User Id
Common Name
Surname
Location
Organizational Unit
Organization
Domain Component
State
Country
LDIF
As entradas do LDAP podem ser representadas em um arquivo texto com
o formato LDIF - LDAP Data Interchange Format. Isto permite alterações fáceis
no dados, backups e transferências de informaçÕes para outros sistemas. Podem
ser utilizados os aplicativos ldbmcat e slapcat para converter de base da dados
ldbm para LDIF ou os aplicativos ldif2ldbm e slapadd para converter de LDIF
para a base de dados ldbm.
Exemplo de LDIF
dn: uid=hmarx,ou=People,
dc=linuxtech,dc=com,dc=br
uid: hmarx
cn: Helio Marques
objectclass: account
objectclass: posixAccount
objectclass: top
loginshell: /bin/bash
uidnumber: 1000
gidnumber: 3001
homedirectory: /home/hmarx
gecos: Helio Marques,,,,
userpassword: {crypt}dF35L2K2TmOVU
Serviços de Redes
289
Servidor LDAP
A implementação utilizada no Linux é o Openldap que implementa o
LDAPv3 com funcionalidades adicionais. O programa slapd é o servidor LDAP
que atende as requisições dos clientes e manipula a base de diretórios (DIT).
Utilizando o modelo master/slave é possível implementar replicação dos
dados:
290
Serviço de Redes
O arquivo de configuraçõa é o /etc/openldap/slapd.conf que
inclui os esquemas básicos e define os parâmetros de acesso e funcionamento do
servidor LDAP.
O arquivo ladpd.conf (padrão do openSuSE Linux) é mostrado aqui por partes:
1) Inclusãodos esquemas básicos, móduloes e definição de arquivos de
controle dos processos slapd:
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include
/etc/openldap/schema/core.schema
include
/etc/openldap/schema/cosine.schema
include
/etc/openldap/schema/inetorgperson.schema
include
/etc/openldap/schema/rfc2307bis.schema
include
/etc/openldap/schema/yast.schema
# Define global ACLs to disable default read access.
# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral
ldap://root.openldap.org
pidfile
argsfile
/var/run/slapd/slapd.pid
/var/run/slapd/slapd.args
# Load dynamic backend modules:
# modulepath /usr/lib/openldap/modules
# moduleload back_bdb.la
# moduleload back_hdb.la
# moduleload back_ldap.la
Serviços de Redes
2) Política de controle de acesso (ACLs):
# Sample access control policy:
#
Root DSE: allow anyone to read it
#
Subschema (sub)entry DSE: allow anyone to read it
#
Other DSEs:
#
Allow self write access to user password
#
Allow anonymous users to authenticate
#
Allow read access to everything else
#
Directives needed to implement policy:
access to dn.base=""
by * read
access to dn.base="cn=Subschema"
by * read
access to attrs=userPassword,userPKCS12
by self write
by * auth
access to attrs=shadowLastChange
by self write
by * read
access to *
by * read
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
291
292
Serviço de Redes
3) Definicão da base de dados
Aqui o domínio deve ser alterado para o escolhido.
############################################################
# BDB database definitions
############################################################
database
bdb
suffix
"dc=my-domain,dc=com"
checkpoint 1024 5
cachesize
10000
rootdn
"cn=Manager,dc=my-domain,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw
secret
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory
/var/lib/ldap
# Indices to maintain
index objectClass eq
Uma vez configurado, o servidor poderá ser iniciado através do comando:
root@thor: # /etc/init.d/slapd start
ou, no openSuSE,
root@thor: # rcldap start
Serviços de Redes
293
De forma similar aos outros serviços, pode-se habilitar o slapd para que
ele inicie automaticamente durante o processo de boot, através de:
root@thor: # chkconfig slapd on
Utilização do Servidor LDAP
Para alterar a senha de uma entrada no LDAP utiliza-se o comando
ldappasswd, por exemplo:
ldappasswd -W -D ’uid=hmarx,ou=People, dc=linuxtech,dc=com,dc=br’ \
’uid=hmarx’
Pesquisas são feitas utilizando o comando ldapsearch. Exemplos:
ldapsearch -L ’uid=*’
ldapsearch -L ’objectclass=posixGroup’
ldapsearch -L ’objectclass=posixAccount’
ldapsearch -D ’uid=hmarx,ou=People, dc=linuxtech,dc=com,dc=br’ -W -L \
’uid=hmarx’
Alterações podem ser feitas utilizando o comando ldapmodify. Exemplo:
ldapmodify -W -r -D "cn=Manager, c=linuxtech,dc=com,dc=br" < hmarx.ldif
294
Serviço de Redes
A autenticação de usuários no Linux pode utilizar o LDAP através do
PAM (pluggable authentication module. Outros serviços, como o sendmail,
apache, squid, podem utilizar o LDAP, alterando seus respectivos arquivos de
configuração.
Para o gerenciamento do LDAP através de interface gráfica via WEB há
o pacote RPM ldap-account-manager (LAM).
No
openSuSE
o
LAM
é
instalado
no
diretório
/srv/www/htdocs/lam. Ele deve ser configurado utilizando o script
configure dentro deste diretório. Utilizando o servidor WEB (apache), o LAM
será acessível através da URL:
http://localhost/lam
ldapmodify -W -r -D "cn=Manager, c=linuxtech,dc=com,dc=br" < hmarx.ldif
Serviços de Redes
295
Servidor WEB
O servidor WEB é um programa que atende requisições do protocolo
HTTP - HyperText Transfer Protocol. No Linux, o servidor padrão é o apache.
Documentos no padrão HTML, formados por textos, imagens, sons e vídeos, são
gerenciados e transferidos aos clientes (browsers) que os requisita.
Para tornar as páginas dinâmicas, são utilizados programas. Estes
programas são chamados scripts, ou simplesmente CGIs (Common Gateway
Interface). Os CGIs podem ser escritos em qualquer linguagem de programação
(interpretada ou compilada). As mais comuns são: C, C++, perl, java, ou mesmo
shell scripts.
Para melhorar o desempenho e controlar o acesso a documentos e sites
HTML, utiliza-se um programa proxy. No Linux, o proxy padrão é o squid.
Configuração do Apache
A configuração básica do apache é feita no arquivo
/etc/httpd/httpd.conf. A configuração do apache2 está em arquivos
no diretório /etc/apache2. O arquivo /etc/apache2/httpd.conf
inclui diversos arquivos de configuração. Nestes arquivos são definidos o modo
de carga do httpd (standalone ou inetd), os diretórios dos documentos, imagens,
scripts CGI, etc. São definidos também os portos TCP/UDP (normalmente 80
para http e 443 para https). Os arquivos padrão a serem transferidos
(index.htm[l], por exemplo), as permissões e seguranças também são
definidos.
Podem ser criados hosts virtuais. Cada um pode ter seu diretório com os
documentos HTML e programas CGI.
O httpd pode ser disparado em modo standalone. São disparados
processos httpd, que aguardam uma conexão nos portos definidos. No modo
inetd, o httpd só será disparado caso a conexão seja requisitada por um cliente.
296
Serviço de Redes
O arquivo /etc/httpd/httpd.conf é dividido em sessões.
Na sessão 1 são definidos os parâmetros globais. As principais diretivas da
sessão 1 são:
Diretiva
Significado
ServerType
Modo do disparo do httpd (standalone ou
inetd)
Diretório raiz do servidor
Tempo em segundos antes de enviar ou
receber timeout
Permite conexões persistentes (atende mais de
uma requisição por conexão)
Número máximo de requisições por conexão
Espera em segundos pela próxima requisição
do mesmo cliente antes de fechar uma conexão
Número mínimo de processos httpd
aguardando requisições
Número máximo de processos httpd
aguardando requisições
Número inicial de processos httpd disparados
Número máximo de clientes simultâneos
Número máximo de requisições por processo
Portos/IPs adicionais aos default
ServerRoot
Timeout
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
MinSpareServers
MaxSpareServers
StartServers
MaxClients
MaxRequestPerChild
Listen
LoadModule
AddModule
ExtendedStatus
Módulos carregados pelo apache
Reconstrução dos módulos definidos em
LoadModule
Habilita informações completas exibidas em
server-status
Serviços de Redes
297
A sessão 2 configura o servidor principal (default) e opções não definidas
nos hosts virtuais (sessão 3). As principais diretivas da sessão 2 são:
Diretiva
Significado
Port
Listen
Porto para o protocolo HTTP (padrão : 80)
Portos e IPs adicionais (padrão : 80 para HTTP e
443 para HTTPS)
Usuário dos processos disparados (wwwrun)
Grupo dos processos disparados (nogroup)
Endereço de e-mail para envio de problemas. É
colocado em páginas de erro geradas pelo apache
Nome do servidor enviado aos clientes. Este nome
deve ser resolvido no DNS
Raiz para os documentos (páginas WEB)
Diretório das páginas pessoais (em ~usuário)
Arquivo(s) de índice default (padrão: index.html)
Arquivos para o controle de acesso a cada diretório
Resolve o nome dos IPs dos clientes (DNS
reverso)
Arquivo para definição dos tipos de arquivos pela
extensão (padrão:/etc/httpd/mimes.types)
Tipo a ser enviado ao cliente para arquivos
desconhecidos (padrão:text/plain)
Arquivo para descoberta do tipo do documento
(padrão:/etc/httpd/magic)
User
Group
ServerAdmin
ServerName
DocumentRoot
UserDir
DirectoryIndex
AccessFileName
HostNameLookups
TypesConfig
DefaultType
MIMEMagicFile
298
Serviço de Redes
O apache pode gerar logs de acesso e erro. Os logs de acesso podem ser
definidos em diversos formatos. O formato do log de acesso é uma cadeia de
caracteres que pode incluir pseudo-variáveis como:
Variável
Significado
%h
%a
%l
%u
%t
%r
IP ou nome do computador remoto
IP do cliente
%s
%b
%U
%{Referer}i
%{User-Agent}i
Identificação do usuário remoto (via identd)
Identificação do usuário autenticado ou Horário de acesso
Método, URI e versão do HTTP (primeira linha da
requisição)
Código de erro (por exemplo, 200 = OK e 404 =
documento não encontrado)
Número de bytes transferidos
O caminho da URL
URL que causou a referência à requisição
Identificação completa do cliente (browser e
plataforma)
Os arquivos de log podem ser definidos pelas diretivas:
Diretiva
Significado
ErrorLog
Arquivo
padrão
para
log
de
erros
(padrão:/var/log/httpd/error_log)
Nível das mensagens de erro (debug, info, notice,
warn, crit, alert, emerg) (padrão:warn)
Definição de formatos de log para CustomLog
Arquivo e formato do log de acesso
(padrão:/var/log/httpd/access_log
e
common)
LogLevel
LogFormat
CustomLog
Serviços de Redes
299
Cada diretório acessível pelo apache pode ter o seu acesso controlado
através de diretivas incluídas entre os tags <Directory diretório> e </Directory>.
As principais diretivas de controle de acesso são:
Diretiva
Significado
AuthUserFile
AuthGroupFile
AuthUserDBMFile
AuthGroupDBMFile
Options
Nome do arquivo texto com usuários e senhas
Nome do arquivo texto com os grupos
Nome do arquivo DBM com usuários e senhas
Nome do arquivo DBM com grupos
Opções de acesso precedidas ou não por + ou (None, All, Indexes, Includes, FollowLinks,
ExecCGI e Multiviews)
Opções que podem ser alteradas no arquivo
definido em AccessFileName (None, All,
Options, FileInfo, AuthConfig e Limit)
Ordem de processamento das diretivas Allow
from e Deny from
Clientes com acesso permitido
Clientes com acesso negado
AllowOverride
Order
Allow from
Deny from
Satisfy
Valida todas as diretivas Allow from e Deny
from
No
apache2,
os
arquivos
incluidos
pelo
/etc/apache2/httpd.conf contém as configuracões de cada sessão:
default-server.conf
server-tuning.conf
errors.conf
listen.conf
uid.conf
vhosts.d/*.conf
mod_autoindex-defaults.conf
mod_status.conf
mod_info.conf
mod_tidy.conf
ssl-global.conf
mod_log_config.conf
mod_userdir.conf
mod_mime-defaults.conf
mod_usertrack.conf
300
Serviço de Redes
Uma requisição de um cliente é formada por 3 seções: a primeira linha da
mensagem contém o comando HTTP, conhecido como método, a URI (Uniform
Resource Identifier) que identifica o arquivo requisitado e a versão do HTTP.
Além dos 3 métodos mais comuns (GET, HEAD e POST), há ainda os métodos
LINK, UNLINK, PUT, DELETE, OPTIONS, TRACE, CONNECT e
PROPFIND. O método GET é o mais utilizado pelos browsers para obter os
documentos. O método HEAD é equivalente ao GET exceto que os dados (por
exemplo, o corpo da página) não são enviados. O método POST permite que
sejam enviados dados para o servidor. Ele é utilizado em forms onde os dados
são transformados em uma lista de variáveis e valores a serem processados por
um CGI.
Por exemplo, a requisição:
HEAD /index.html HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/3.01 (X11; Linux 2.4.19-4GB i686)
Host: www.starix.com.br
Accept: image/gif, image/jpeg, */*
Gera uma resposta do servidor como a seguinte:
HTTP/1.1 200 OK
Date: Wed, 03 Jun 2003 14:23:53 GMT
Server: Apache/1.3.26 (Linux/SuSE) PHP/4.2.2 mod_perl/1.27
Last-Modified: Sat, 31 May 2003 17:16:42 GMT
ETag: "113b69-d1-3e8e37a"
Accept-Ranges: bytes
Content-Length: 2857
Content-Type: text/html
Serviços de Redes
301
Métodos de acessos a páginas WEB podem ter acessos limitados incluindo
diretivas de controle entre <Limit métodos> e </Limit> ou <LimitExcept
métodos> e </LimitExcept>.
Para controlar a visibilidade de arquivos basta incluir diretivas de de
controle entre <Files arquivos> e </Files>. Um exemplos típico inclui os
arquivos de controle de acesso (que comecam com .ht) , por default,
.htaccess:
<Files ~ "^\.ht">
Order allow, deny
Deny from all
Satisfy All
</Files>
Alguns caminhos na URL não são exatamente os caminhos dos diretórios
a partir da raiz do site (DocumentRoot). Alguns exemplos são o diretório dos
CGIs, o diretório dos ícones e o manual do apache:
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
Alias
/icons/
"/srv/www/icons/"
Alias
/manual/ "/usr/local/httpd/manual/"
Outros exemplos são páginas geradas pelo próprio apache como os
handlers de /server-status e /server-info.
302
Serviço de Redes
Sites Virtuais
Páginas para domínios virtuais podem ser definidas através de diretivas
inseridas entre <VirtualHost nome> e </VirtualHost>.
Deve ser definida a diretiva NameVirtualHost para que o apache
selecione o site web a partir do nome. O nome deverá ser resolvido pelo DNS. O
nome pode ser substituído por um IP, por IP:porto, por * ou *:porto, definindo a
partir de que IP/porto o domínio virtual estará disponível. O nome será resolvido
para o IP utilizando o DNS.
No SuSE Linux, os domínios virtuais são definidos nos arquivos *.conf
do diretório /etc/apache2/vhosts.d/. Crie um arquivo para cada domínio
virtual.
Para que um site seja acessível tanto por
http://www.meudominio.com
quanto por
http://meudominio.com
os nomes
www.meudominio.com
e
meudominio.com
devem ser resolvidos para um IP no DNS (registro A). Estes e outros apelidos
podem ser definidos na sessão <VirtualHost www.meudominio.com> diretiva
ServerAlias, como mostrado a seguir.
Serviços de Redes
Arquivo /etc/apache2/vhosts.d/meudominio.com.conf
<VirtualHost www.meudominio.com>
ServerName www.meudominio.com
ServerAlias meudominio.com
DocumentRoot /srv/www/meudominio.com/htdocs
ErrorLog
logs/meudominio-error.log
CustomLog logs/meudominio-access.log
ScriptAlias
/cgi-bin/ "/srv/www/meudominio.com/cgi-bin/"
Alias
/icons/ "/srv/www/icons/"
<Directory "/srv/www/meudominio.com/htdocs/private">
AllowOverride None
AuthType
Basic
AuthName
"Acesso restrito"
AuthUserFile /srv/www/meudominio.com/users
require valid-user
</Directory>
</VirtualHost>
303
304
Serviço de Redes
O arquivo de autenticação definido pela diretiva AuthUserFile é criado e
atualizado pelo programa /usr/bin/htpasswd ou /usr/sbin/htpasswd2. Para o
arquivo definido pela diretiva AuthDBMUserFile, é utilizado o programa
/usr/bin/dbmmanage ou /usr/sbin/dbmmanage2.
O apache pode também gerar páginas automaticamente para alguns
caminhos especiais da URL definidos entre <Location caminho> e </Location>.
A diretiva SetHandler define como o caminho será tratado, por exemplo:
<Location /cgi-bin>
AllowOverride None
Options +ExecCGI - Includes
SeHandler cgi-script
</Location>
Outros caminhos virtuais são o /server-info, o /server-status
e o /backhand. Os módulos devem ser habilitados nos arquivos de
configuração do Apache (ou na variável APACHE_MODULES do arquivo
/etc/sysconfig/apache2).
Até o SuSE Linux 7.3, para que o apache seja disparado
automaticamente, coloque START_HTTP=yes no arquivo /etc/rc.config.
e
algumas
opções
esão
definidas
em
/etc/rc.config.apache.rc.config. A partir do SuSE Linux 8.0 as
configurações
estão
em
/etc/sysconfig/apache
ou
/etc/sysconfig/apache2 (executando depois o SuSEconfig) e você
deverá definir os runlevels em que o apache irá rodar. Utilize o YaST para
simplificar este processo. Você pode utilizar o script rcapache para iniciar,
parar, reinicializar ou recarregar a configuração do apache manualmente.
Conforme definido em /etc/httpd/httpd.conf (ou no arquivo
/etc/apache2/httpd.conf),
arquivos
como
.htpasswd
(ou
.htaccess) podem existir nos diretórios dos documentos WEB para controle
de acesso com senha por usuários ou grupos. Note que diretivas de controle de
acesso podem também ser definidas para cada VirtualHost.
Serviços de Redes
305
O apache gera diversos logs que podem ser analisados por programas
como o webalizer que cria relatórios e gráficos de acessos para páginas WEB:
306
Serviço de Redes
Servidor de proxy
O software padrão de proxy é o squid.
Além de acelerador para acesso as páginas WEB,
ele serve também para controlar e registrar os
acessos a elas.
O arquivo de configuração do squid é o /etc/squid.conf até o SuSE
7.3 e o /etc/squid/squid.conf a partir do SuSE 8.0. Este arquivo contém
diversos parâmetros para configurar a utilização de memória e de espaço em disco
pelos objetos armazenados pelo squid. Além disto, ele contém regras de controle
de acesso às páginas WEB.
Um proxy é normalmente utilizado em conjunto com um firewall.
Utilizando transparent proxy pode-se acelerar e controlar o acesso a páginas
WEB mesmo que o usuário do browser não defina a utilização de proxy.
Para controle de acesso deve-se primeiro definir o que vai ser controlado.
Isto é feito através das acls (Access Control Lists). Uma acl é definida por uma
das seguintes sintaxes globais:
acl nome tipo argumentos
acl nome tipo " arquivo"
O tipo define elementos para o controle: src, dst, srcdomain, dstdomain,
time, port, proto, method, browser, user, srcdom_regex, dstdom_regex,
maxconn, snmp_community, ... O formato do(s) argumento(s) irá depender do
tipo da acl. Assim, por exemplo, src requer um argumento tipo ip/máscara,
srcdomain requer um domínio (como .starix.com.br), port pode ser definido
pelo seu número ou por uma faixa (0-1024, por exemplo), e method pode ser, por
exemplo, GET, PUT ou POST.
Serviços de Redes
307
Os argumentos de uma acl podem ser colocados no arquivo, um em cada
linha. As acls podem ser utilizadas nos controles de acesso ao porto http
(http_access) ou ao porto icp (icp_access), utilizando as sintaxes:
http_access { allow | deny } [ ! ] nome-da-acl ...
icp_access { allow | deny } [ ! ] nome-da-acl ...
O símbolo ! indica negação da acl. Estas regras de controle são
processadas sequencialmente até que alguma seja válida, permitindo ou negando
o acesso. Caso nenhuma regra http_access (ou icp_access) seja satisfeita pelas
condições de acesso, o squid assumirá o contrário do definido pela última regra.
É uma boa prática definir http_access allow all ou http_access deny all como
última regra para evitar confusões.
Por exemplo, para permitir o acesso apenas para a rede local, durante o
horário de serviço a sites cujas URLs que não possuam palavras restritas contidas
no arquivo /etc/squid/bad_words, o controle de acesso pode ser:
# listas de controle de acesso
acl bad_words urlpath_regex "/etc/squid/bad_words"
acl local_net src 192.168.200.0/24
acl workdays M-F 08:00-17:59
# acessos http
http_access deny bad_words
http_access deny ! local_net
http_access allow workdays
http_access deny all
O squid mantém o cache das páginas em um diretório, normalmente
/var/squid/cache (versões do SuSE Linux anteriores a 8.0) ou
/var/cache/squid (versão SuSE Linux 8.0 ou superior). Este diretório é
definido pela diretiva cache_dir. Podem ser definidos vários diretórios utilizando
uma linha cache_dir para cada diretório. Para os tipos ufs (mais utilizado), aufs e
diskd, podem ser definidos o número de diretórios no primeiro e segundo nível.
Os default são 16 diretórios no primeiro nível e 256 no segundo, reservando
100MB. Eles pode ser criados através de squid -z.
308
Serviço de Redes
O squid gera logs no diretório /var/squid/logs (versão SuSE Linux
antes da 8.0) ou /var/log/squid (versão SuSE Linux 8.0 ou superior) que
podem ser analisados por programas como o calamaris para a geração de
relatórios de acessos.
Entradas
no
arquivo
de
log
de
acesso
do
squid
(/var/log/squid/access.log) contém o instante do acesso o número de
bytes, o IP de origem, o status da requiisicão e a URL acessada. Alguns exemplos
podem ser vistos abaixo:
1262558475.147 1752 192.168.200.41 TCP_MISS/200 17375 GET http://www.linux.org/ DIRECT/198.182.196.56 text/html
1262558489.078 1034 192.168.200.41 TCP_REFRESH_HIT/200 1509 GET
http://pagead2.googlesyndication.com/pagead/abglogo/abg-en-100c-000000.png DIRECT/66.249.80.164 image/png
1262558531.075 28 192.168.200.41 TCP_HIT/200 622 GET
http://www.google.com/images/icons/sectionized_ui/play_c.gif - NONE/- image/gif
1262558670.032 5093 192.168.200.41 TCP_REFRESH_MISS/200 109887 GET
http://www.kde.org/dot/kde-apps-content.rdf - DIRECT/62.70.27.118 text/rdf
1262561636.080
2 192.168.200.41 TCP_DENIED/403 1428 GET http://www.playboy.com/
- NONE/- text/html
Serviços de Redes
309
Calamaris
O calamaris é usado para analisar os logs de acesso do squid e gerar uma
página WEB com os relatórios. Os relatórios gerados são:
Summary
Incoming requests by method
Incoming UDP-requests by status
Incoming TCP-requests by status
Outgoing requests by status
Outgoing requests by destination
Request-destinations by 2nd-level-domain
Request-destinations by toplevel-domain
TCP-Request-protocol
Requested content-type
Requested extensions
Incoming UDP-requests by host
Incoming TCP-requests by host
Distribution Histogram
Performance in 1 hour steps
310
Serviço de Redes
O script bash abaixo pode ser utilizado via cron para periodicamente
atualizar o relatório de acesso utilizando o calamaris. Altere as variáveis de
configuracão para o seu domínio.
#!/bin/sh
#
# Script para gerar relatorio do Squid
#
# Helio Marques <[email protected]>
# (C) 2002-2010 HMarx
#---------------------------------------------------------------------------------# Configuration
TITLE="Linuxtech"
CAT=‘which cat‘
CALAMARIS=‘which calamaris‘
ACCESSFILE=/var/log/squid/access.log
CACHE_FILE=/var/log/squid/calamaris_cache.db
REP_FILE=/srv/www/linuxtech.com.br/htdocs/proxy/index.html
#---------------------------------------------------------------------------------if [ -f $CACHE_FILE ]
then
$CAT $ACCESSFILE | $CALAMARIS -F ’html’ -H "$TITLE" -a -u -i $CACHE_FILE o $CACHE_FILE > $REP_FILE
else
$CAT $ACCESSFILE | $CALAMARIS -F ’html’ -H "$TITLE" -a -u > $REP_FILE
fi
Serviços de Redes
A seguir podem ser vistos alguns dos relatórios gerados.
311
312
Serviço de Redes
Serviços de Redes
313
314
Serviço de Redes
Serviços de Redes
315
squidGuard
Há ainda o plugin squidGuard para o squid que permite a definição de
filtros, redirecionamento e controle de acesso. Ele é facilmente configurado
através do arquivo /etc/squidguard.conf.
Você poderá encontrar exemplos de configuração nos arquivos do
diretório /usr/share/doc/packages/squidgrd.
Após configurá-lo, altere o programa de redirecionamento do squid para o
squidGuard na diretiva redirect_program no arquivo squid.conf.
redirect_program /usr/sbin/squidGuard -c /etc/squidguard.conf
Normalmente o squidGuard utiliza os arquivos de dados do diretório
/var/lib/squidGuard/db, e gera os logs em /var/log/squidGuard.
316
Serviço de Redes
Correio eletrônico - e-mail
Um usuário de um sistema Unix-like possui um endereço eletrônico na
forma:
usuário@máquina ou domínio
O símbolo @ é chamado (e lido) at em inglês, o que significa em. Por
exemplo, [email protected] é o endereço eletrônico do usuário hmarx
no domínio starix.com.br. No Brasil, o símbolo @ é chamado de arroba.
Todo usuário local possui uma caixa postal onde os seus e-mails de
chegada são armazenados. Os e-mails do usuário usuário são processados pelo
procmail. Normalmente são armazenados diretamente no arquivo
/var/spool/mail/usuário. O comportamento do procmail pode ser
alterado através do arquivo .procmailrc residente no diretório do usuário
(~usuário).
O sistema de e-mail é formado por três componentes:
MUA - Mail User Agent
Esta é a interface utilizada pelo usuário para ler e
escrever e-mails. Hoje existem centenas de
aplicativos que são ou incluem o MUA. Alguns
exemplos são: mail, mutt, pine, elm, xfmail,
coolmail,
Kmail,
Netscape
Messenger,
Applixware, StarOffice, entre outros.
MDA - Mail Delivery Agent
Responsável pela entrega do e-mail ao usuário. O
mais comum é o procmail já citado acima. O
comportamento
default
do
procmail
é
simplesmente colocar o e-mail na caixa de entrada
do usuário, adicionando-o ao fim do arquivo que
representa a caixa postal de entrada daquele
usuário (/var/spool/mail/usuário).
Serviços de Redes
317
MTA - Mail Transport Agent
São os programas que tratam da transmissão e
recepção de e-mails. Os mais utilizados são o
sendmail, o smail, o exim, o postfix e o qmail.
Todos estes programas são totalmente
configuráveis às necessidades do sistema de email.
Há ainda programas que aceitam conexões dos MUAs para que o usuário
possa ler seus e-mails. A conexão pode ser através de protocolo POP (Post
Office Protocol) ou IMAP (Internet Message Access Protocol). Com o protocolo
POP, os e-mails são transferidos da caixa de entrada para folders do computador
rodando o MUA. Na utilização de IMAP, os e-mail permanecem no servidor. A
decisão de apagar ou não as mensagens lidas (ou não) é feita normalmente por
configuração do MUA.
Hoje é muito comun a utilização do chamado webmail. Neste caso os emails são enviados e recebidos através de páginas WEB. Os e-mails permanecem
no servidor e podem ser lidos de qualquer lugar e máquina. Os programas que
implementam um webmail pode utilizar protocolos como o POP ou IMAP, ou
ainda tratar diretamente o arquivo da caixa de entrada do usuário.
318
Serviço de Redes
Exemplo de MUA:
Kmail - a interface do usuário no ambiente gráfico KDE.
Mutt - um dos diversos MUAs com interface texto
Serviços de Redes
319
Protocolos de e-mail
Existem dois protocolos básicos: o de envio e o de recebimento ou leitura
de e-mail. O protocolo de envio de e-mail é o SMTP - Simple Mail Transfer
Protocol. O roteamento de mensagens é tratado pelas máquinas Mail Exchange
(definidas nos registros MX do DNS). O protocolo de leitura de e-mails é
normalmente o POP (hoje na sua versão POP3). O protocolo POP é basicamente
configurado no MUA.
Um e-mail no diretório de spool
/
|
Cabeçalho /
\
|
\
Corpo
/
|
/
\
|
\
From [email protected] Sun Jan 16 14:08:42 2000
Return-Path: <[email protected]>
Received: (from [email protected]>)
by thor.starix.com.br (8.9.3/8.9.3) id OAA14834
for hmarx; Sun, 16 Jan 2000 14:08:41 -0200
Date: Sun, 16, Jan 2000 14:08:41 -0200
From: Flavia de Castro Mendes Marques<[email protected]>
Message-Id: <[email protected]>
To: [email protected]
Subject: Um simples e-mail
Hi Hmarx !
Como vai ? E os projetos ?
Abraços,
Flavia
Uma mensagem eletrônica é, normalmente,
transferida em formato texto, mesmo contendo arquivos binários anexos. Esta
mensagem é armazenada no arquivo de spool e é composta por um cabeçalho e
um corpo.
O cabeçalho contém informações como a origem, destino, assunto, data e
nomes de arquivos anexos. O corpo contém o texto da mensagem e os arquivos
anexos.
Note que, entre o cabeçalho e o corpo, há uma linha em branco.
320
Serviço de Redes
Estudaremos aqui o sendmail, o MTA mais utilizado em plataformas
Unix.
Protocolo do sendmail
Quando um usuário em uma máquina (local) quer enviar um e-mail para
um usuário em outra máquina (remota), é estabelecida uma conexão SMTP. O
protocolo SMTP é muito simples. A máquina local se identifica, informa o
remetente do e-mail, o destinatário do e-mail e o conteúdo (corpo) da mensagem.
A máquina remota pode realizar verificações aceitando ou não as diversas
informações.
Veja abaixo um diagrama simples desta conversação.
Serviços de Redes
321
Configuração do sistema de e-mail
Existem diversos níveis de configuração.
No MUA, o usuário irá informar sua identidade (nome, e e-mails) e os
servidores para envio e recepção de mensagens. Ele pode decidir se as mensagens
irão ou não ser removidas do servidor após serem transferidas para o MUA.
Um usuário local pode fazer um re-encaminhamento automático de suas
mensagens criando o arquivo .forward em seu diretório pessoal contendo:
• usuário2
Apenas redireciona para o usuário requerido
• \usuário,usuário2
Redireciona para o usuário2, mantendo uma cópia para o usuário
• \usuário, "| programa"
Mantém uma cópia para o usuário e passa a mensagem como entrada
para o programa
Você pode criar apelidos para um usuário no arquivo /etc/aliases.
Após modificá-lo, execute o programa newaliases (ou sendmail -bi). Ele irá
reconstruir o arquivo /etc/aliases.db.
Usuários em domínios virtuais podem ser definidos em
/etc/mail/virtusertable. Deve ser utilizado o programa makemap para
atualizar a base de dados toda vez que este arquivo for alterado. Isto é feito
automaticamente pelo SuSEconfig.
Os arquivos texto no diretório /etc/mail podem ser convertidos nas
bases de dados .db no mesmo diretório utilizando-se o make. O arquivo
/etc/mail/Makefile já está configurado para executar os programas
necessários para reconstruir a base de dados do sistema de e-mail.
322
Serviço de Redes
Configuração do sendmail
O sendmail é o programa mais usado como MTA.
Sua configuração básica está no
arquivo
/etc/sendmail.cf. Podem ser configuradas
informações como os nomes da máquina local (nome e/ou
domínio), regras de tratamento dos e-mails (chamadas de
regras de reescrita), seguranças e limitações. Este arquivo
utiliza diversos arquivos texto e .db localizados em
/etc/mail.
Abaixo pode ser visto um diagrama simplificado do fluxo das regras de
tratamento dos e-mails:
As regras e os valores pré-definidos pela SuSE são bastante razoáveis. A
configuração do SuSE Linux através do YaST já modifica alguns dos parâmetros
principais nos arquivos de configuração. Você pode também alterar os valores das
variáveis definidas diretamente nos arquivos /etc/rc.config e
/etc/rc.config.d/sendmail.rc.config para o SuSE Linux 7.x, ou
nos arquivos /etc/sysconfig/mail e /etc/sysconfig/sendmail
para o SuSE Linux 8.x ou superiores. Execute o SuSEconfig para efetivar as
alterações.
Serviços de Redes
323
Algumas variáveis importantes são:
Em /etc/sysconfig/mail:
MAIL_CREATE_CONFIG
Variável
Valores
yes | no
FROM_HEADER
<domínio>
SMTPD_LISTEN_REMOTE
yes | no
CONF_TYPE
standard |
advanced |
undef
yes | no
SENDMAIL_EXPENSIVE
Significado
O SuSEconfig gerará o
arquivo sendmail.cf
Domínio default para
FROM
Aceita conexões
remotas ?
Tipo de configuracão do
servidor de e-mail
só despacha e-mail se
o sendmail for
disparado manualmente
Estas opcões são independentes do MUA (no openSuSE, sendmail ou
postfix).
324
Serviço de Redes
Em /etc/sysconfig/sendmail:
Variável
SENDMAIL_LOCALHOST
SENDMAIL_SMARTHOST
SENDMAIL_NOCANONIFY
SENDMAIL_ARGS
SENDMAIL_CLIENT_ARGS
MASQUERADE_DOMAINS
Valores
localhost
...
<servidor do
provedor>
yes | no
-L sendmail
-Am -bd -q30m om
-L sendmail-client
-Ac -q30m
<dominio>
...
SENDMAIL_EXPENSIVE
yes | no
SMTP_AUTH_MECHANISMS
gssapi | otp | login |
plain | digest-md5 |
cram-md5 | all
gssapi | otp | login |
plain | digest-md5 |
cram-md5 | all
server | client |
both
<rbl-server> ...
SMTP_AUTH_SERVER
STARTTLS
SENDMAIL_DNSRBL
Significado
Nomes da máquina local
Servidor opcional que
transporta seus e-mails
Transforma os e-mails na
forma canônica (requer
pesquisas no DNS)
Opções de execução do
sendmail
Opções de execução do
sendmail client
Domínios a serem
mascarados com
$FROM_HEADER
Só despacha e-mail se o
sendmail for disparado
manualmente
Lista de mecanismos de
autenticação como
cliente
Lista de mecanismos de
autenticação como
servidor
Uso da certificação
Servidores de pesquisa
em DNS por open relays
Alguns parâmetros como temporizações, limite de tamanho de mensagens,
limite de conexões, limite de processos e filas de e-mail devem ser modificados
diretamente no arquivo /etc/sendmail.cf.
Serviços de Redes
325
Configurações mais complexas
Caso queira configurar o sendmail manualmente, você deve fazer
SENDMAIL_TYPE="no", criar ou modificar o sendmail.cf (use o
/etc/mail/linux.mc como template) e executar o SuSEconfig.
Exemplo:
thor:~ # cp /etc/mail/linux.mc mylinux.mc
thor:~ # p
<edite o mylinux.mc>
thor:~ # m4 mylinux.mc > /etc/sendmail.cf
thor:~ #
p
Você pode ainda precisar editar alguns arquivos como:
Arquivo
/etc/mail/virtusertable
/etc/mail/relay-domains
/etc/mail/access
/etc/mail/genericstable
/etc/mail/mailertable
/etc/mail/local-host-names
Definição
mapeamento de usuários
de domínios virtuais
definição de dominios para
o qual será aceito relay
políticas de acesso
mapeamento de usuários
não qualificados
definição de
transportadores de e-mail
nomes de hosts e domínios
considerados locais
Não se esqueça de atualizar os arquivos .db utilizando o make no
diretório /etc/mail (ou executando o SuSEconfig).
326
Serviço de Redes
Programas adicionais ao sistema de e-mail
Hoje há uma preocupação muito grande com os
vírus transmitidos através de e-mails. Para isto pode ser
utilizado o amavis que é um programa que decompõe um
e-mail em suas partes e ativa um anti-vírus à sua escolha
para verificar a existência e eliminar os vírus. Versões
atualizadas do amavis são disponíveis no site
http://www.amavis.org. Além do anti-vírus a ser utilizado
(como antivir da H+BEDV e o uvscan da McAfee, entre outros), ele permite a
configuração de que avisos e para quem deverá ser enviado (destinatário,
remetente e administrador ou postmaster).
Para que a verificação de um sistema anti-vírus seja eficaz, ele
deverá ser atualizado com frequência.
É comum uma empresa possuir um link com
um provedor de acesso à Internet compartilhando este acesso
através de um gateway. Esta empresa poderá ter um servidor de email local, muitas vezes inacessível pela Internet. Este servidor
permitirá que uma estação de trabalho local (principalmente com
sistemas Microsoft Windows) faça o envio de e-mails de forma mais eficiente
(utilizando a velocidade da rede local), liberando a máquina para a execução de
outros aplicativos. Este servidor poderá executar ainda o fetchmail que, com uma
frequência definível, busca os e-mails de um provedor da Internet para as caixas
locais dos usuários. Neste processo, o fetchmail também irá utilizar o sendmail
para o envio local, utilizando assim o amavis para a verificação de existência de
vírus. Logo, nenhum e-mail sai ou entra na empresa contendo vírus.
Fila de e-mails
Você poderá ver a fila de e-mails através do programa mailq. O
processamento da fila poderá ser forçado chamando o sendmail com a opção -q,
normalmente utilizada em conjunto com -v para acompanhar o tratamento das
mensagens.
Serviços de Redes
327
FTP - File Transfer Protocol
Para transferir arquivos de uma máquina para outra, normalmente é
utilizado o protocolo FTP. Existem diversos servidores disponíveis para o Linux:
ftpd, wu-ftpd, protftp,... Existe uma versão mais simples do protocolo FTP,
denominada TFTP - Trivial File Transfer Protocol, usado pelo bootp - protocolo
de boot remoto.
A configuração do FTP é feita através dos seguintes arquivos, encontrados
no diretório /etc:
Arquivo
/etc/ftpaccess
/etc/ftpusers
/etc/ftpconversions
/etc/ftpwelcome
/etc/ftpchroot
Significado
define o comportamento do serviço de ftp
usuários que não podem se conectar ao
serviço de ftp
conversões conhecidas pelo servidor de
ftp
mensagem de boas vindas
usuários cuja sessão FTP terá o diretório
pessoal como raiz
No diretório pessoal do usuário ftp, normalmente /usr/local/ftp, no
sub-diretório msgs, podem ser criados arquivos com mensagens especiais
(como welcome.msg e msg.dead).
Note que, quando um usuário é chrooted, ele deve ter em seu diretório
os arquivos mínimos para que todos os comandos FTP funcionem corretamente
(como o bin/ls e as bibliotecas utilizadas, em lib/).
Clientes FTP
Além de navegadores como o Lynx, o Netscape, o Konqueror e o
StarOffice, existem diversos clientes, como o tradicional ftp, o xftp e o ncftp.
328
Serviço de Redes
Sessões remotas
Ao contrário da maioria dos sistemas operacionais, você não precisa estar
na console do computador para executar programas nele. Você pode utilizar um
terminal em modo texto ou gráfico, estando até mesmo a quilômetros de distância
do computador. Para isto, existem programas servidores como o telnetd , o rlogin
e o sshd, além e XServers para diversas plataformas.
Um terminal modo texto ou semi-gráfico pode ser conectado a um
computador através de uma porta serial, um modem ou mesmo uma rede
TCP/IP. Um computador qualquer pode ser utilizado como terminal através de
um programa emulador.
Para aplicações em modo texto ou semi-gráfico, existem emuladores de
terminais tipo VT-100, ANSI e outros.
Em modo gráfico, normalmente são utilizados os
Xterminals (terminal com protocolo X11 ou terminal do X
Window). Um computador em rede pode executar um XServer e
assim ser transformado em um Xterminal. Existem diversos
aplicativos X Window que emulam um terminal texto (como o
xterm, o kvt, o konsole, e o rxvt). Alguns destes permitem cores
e até imagens de fundo.
Para uma sessão segura há o SSH - Secure shell, que
criptografa toda a comunicação e utiliza autenticação RSA. A
configuração
básica
é
feita
através
do
arquivos
/etc/ssh_config na versão 1 ou /etc/ssh/ssh_config
na a versão 2.
Para permitir a execução remota de um aplicativo X gráfico pode-se
utilizar o ssh com a opcão -X (Enable X Forwarding). A inclusão da opção -C
habilita a compressão dos dados na conexão SSL.
Serviços de Redes
329
PPP - Point to Point Protocol
Para o estabelecimento de conexões ponto a ponto, incluindo
negociação de parâmetros de comunicação, foi criado o protocolo
PPP. Este é o protocolo utilizado quando se faz uma conexão discada
a um provedor de acesso à Internet.
O PPP basicamente trata do envio de datagramas de um nodo a outro.
Normalmente, o PPP é usado em linhas seriais diretas ou discadas. Ele estabelece
uma conexão TCP/IP entre um equipamento e outro.
Para estabelecer a conexão física e de enlace, o ppp utiliza o programa
chat. O chat é responsável, por exemplo, por discar o número do provedor e
esperar que o modem estabeleça a portadora. Entra então o pppd, que valida a
conexão e negocia todos os parâmetros do TCP/IP até o início da sessão. O
usuário pode ser validado através de login, PAP ou CHAP.
Configuração do serviço PPP
O arquivo principal de configuração do serviço PPP é o
/etc/ppp/options. Para cada dispositivo específico, pode haver também um
arquivo com nome /etc/ppp/options.dispositivo (por exemplo,
/etc/ppp/options.ttyS2 para o dispositivo /dev/ttyS2). No arquivo
/etc/options são definidas as opções globais ou default. Nos arquivos
/etc/ppp/options.dispositivo, são definidas as opções específicas
para a conexão através daqueles dispositivos.
O pppd procura por suas opções nos arquivos /etc/ppp/options,
/etc/ppp/options.dispositivo, e ~/.ppprc antes de processar as
opções passadas como argumento na linha de comando. A única opção da linha de
comando tratada antes é o nome do dispositivo para que o pppd monte o nome do
arquivo options.dispositivo. O pppd remove o prefixo /dev/ e
converte ’/’ restantes em ’.’.
330
Serviço de Redes
Entre as opções mais importantes estão:
noipdefault ou iplocal:ipremoto
modem ou local
ipcp-accept-local
ipcp-accept-remote
ms-dns servidorDNS
[no]defaultroute
[no]replacedefaultroute
[no]auth
Define os IPs local e remoto
Utilização ou não dos sinais de
controle de modem
Aceita o IP local dado pelo peer
Aceita o IP remoto dado pelo peer
Servidor(es) de DNS
Adiciona (ou não) rota default
Substitui (ou não) a rota default
Autentica (ou não) o peer
Conexão discada com a Internet
Para a realização de uma conexão discada a um provedor de acesso à
Internet, sua máquina deverá ter um modem. A instalação de um modem é feita
de forma simples através do YaST. Normalmente um modem (interno ou
externo) é acessível através de uma interface serial padrão associada a ele. Será
criado um link do dispositivo real (/dev/ttySi) para /dev/modem. Nada
mais além da porta de E/S e a interrupção são necessárias ao Linux.
Para a verificação do acesso e funcionamento do modem, você poderá
utilizar os comandos texto minicom ou kermit. O kermit é um aplicativo
tradicional de comunicação que possui porte para diversos sistemas operacionais.
Ambos possuem funções como emulação de terminal e de transferência de
arquivos. Outro aplicativo para detecção e testes de conexão discada à Internet é o
wvdial, que também é utilizado pelo YaST.
A utilização dos comandos do modem (por exemplo, o padrão AT Hayes)
é feita pelo aplicativo. Existem vários programas que facilitam a configuração da
conexão de uma estação de trabalho Linux à Internet. Em modo gráfico, KDE,
existem os programas kppp e kinternet. Nestes programas você informa os
dados necessários à conexão a um provedor de acesso (basicamente número a ser
discado, login e senha).
Serviços de Redes
331
kppp - conexão dial-up
Um uso comum do pppd é a discagem para um provedor de Internet. Ele
pode ser feito simplesmente através da chamada:
$ pppd call provedor
onde o arquivo /etc/ppp/peers/provedor contém, por exemplo:
ttyS2 38400 crtscts
connect ’/usr/sbin/chat -v -f /etc/ppp/chat-provedor’
noauth
e o arquivo /etc/ppp/chat-provedor tem algo como:
ABORT ¨NO CARRIER¨
ABORT ¨NO DIAL TONE¨
ABORT ¨ERROR¨
ABORT ¨NO ANSWER¨
ABORT ¨BUSY¨
ABORT ¨Username/Password Incorrect¨
¨¨ ¨at¨
OK ¨atd0&c1¨
OK ¨atdt123456¨
¨name:¨ ¨^Umeulogin¨
¨word:¨ ¨\qminhasenha¨
¨ispts¨ ¨\a^Uppp¨
¨~-^Uppp-~¨
332
Serviço de Redes
Os usuários, máquinas, senhas e endereços IPs para as validações PAP e
CHAP estão respectivamente nos arquivos /etc/ppp/pap-secrets e
/etc/ppp/chap-secrets.
Durante a negociação dos parâmetros, o pppd dispara alguns scripts
localizados em /etc/ppp, passando argumentos que podem ser utilizados, por
exemplo, para acertos de tabelas de roteamento ou contabilização:
• auth-up interface peer usuário dispositivo velocidade
Chamado logo que (e se) a autenticação do peer seja feita.
• auth-down interface peer usuário dispositivo velocidade
Chamado logo que a sessão seja terminada.
• ip-up interface dispositivo velocidade iplocal ipremoto parms
Chamado logo que os endereços IPs estejam negociados.
• ip-down interface dispositivo velocidade iplocal ipremoto parms
Chamado logo que os endereços IPs sejam liberados.
Uma porta que aceita uma conexão PPP em uma porta serial ou modem
pode ser configurada de diversas formas:
• O pppd pode ser disparado diretamente na porta (utilizado normalmente
em linhas privadas).
• O pppd pode ser disparado manualmente ou automaticamente após o
login (há um getty na porta e opcionalmente o shell é o pppd).
• O pppd pode ser disparado automaticamente quando necessário pelo
mgetty
(basta ativar a opção /AutoPPP/ no arquivo
/etc/mgetty+sendfax/login.config).
Serviços de Redes
333
Conexão por demanda
Para conexões por demanda pode ser utilizado o diald. Este programa é
configurado através do arquivo /etc/diald.conf. Neste arquivo você define
o dispositivo de conexão, velocidade, modo de conexão e parâmetros para o
pppd. Um exemplo simples pode ser visto abaixo.
mode ppp
device /dev/modem
speed 115200
modem
lock
crtscts
local 192.168.0.1
remote 192.168.0.2
defaultroute
debug 0x0018
dynamic
include /usr/lib/diald/standard.filter
connect /usr/lib/diald/connect
pppd-options noauth noipdefault ipcp-accept-local
ipcp-accept-remote user usuario
Neste exemplo, será utilizada uma conexão discada (através do script
/usr/lib/diald/connect) com IP dinâmico, incluindo a rota default). No
diretório /usr/lib/diald estão diversos arquivos. O arquivo diald.defs
é o primeiro arquivo lido quando o diald é disparado. O arquivo
/usr/lib/diald/standard.filter contém definições das regras para
ativação e desativação da conexão (como por exemplo, que tipo de pacote TCP
irá iniciar uma discagem para o provedor). O script connect é utilizado para
discar e estabelecer a conexão ppp com o provedor de acesso. O wvdial também
pode ser utilizado como programa de conexão no lugar do script connect.
O diald criará uma interface virtual (normalmente como tapi ou sli para
está qual a rota default. Após a conexão com o provedor ser estabelecida, esta
interface dará lugar à criada pelo pppd (normalmente como pppi ).
334
Serviço de Redes
Você poderá utilizar os aplicativos diald-top-server e diald-top para
obter estatísticas e controlar as conexões do diald. O diald-top deverá ser
executado somente se o diald-top-server estiver rodando e o diald-top-server só
deve ser disparado após o diald ter criado a interface virtual tapi ou sli.
Veja os manuais de diald, diald-top e ainda de diald-examples para
maiores detalhes a respeito da configuração do serviço de discagem por demanda.
Conexão ADSL
Existem basicamente 2 tipos de conexão ADSL: a pppoe, PPP-overethernet e a pppoa, PPP-over-ATM. Na conexão pppoa, o modem ADSL
estabelece a conexão PPP com o provedor e age como roteador/bridge e como
servidor DHCP fornecendo um IP ao cliente conectado a ele. Os serviços ADSL
mais conhecidos no Brasil são o Velox da Telemar e o Speedy da Telefônica.
Na conexão pppoe o cliente estabelece uma conexão PPP diretamente
com o provedor e o modem apenas estabelece o enlace ATM com o provedor.
Após a conexão, é criada uma interface pppi (normalmente ppp0) da mesma
forma que uma conexão discada normal tipo V9x.
Para o tipo pppoe, há o pacote rp-pppoe, uma implementação da Roaring
Penguin. A configuração do pppoe pode ser feita pelo script adsl-setup. Ela será
gravada no arquivo /etc/ppp/pppoe.conf. Os scripts adsl-start e adslstop podem ser utilizados para iniciar e parar a conexão ADSL.
No Velox da Telemar, após a conexão PPP ter sido estabelecida, o cliente
deverá ser autenticado em seu provedor utilizando um browser (através da página
http://www.veloxzone.com.br) para poder ter acesso à Internet.
Serviços de Redes
335
Comunicação e Telefonia
O Linux possui diversos programas
para comunicacão através da Internet. Um
dos mais utilizado é o kopete que permite
a conexão com ICQ, MSN, AIM, IRC,
Jabber e outros. Ele é totalmente
personalizado e faz parte do KDE.
kopete
skype
O Skype é um sistema VOIP (voz
sobre IP). Permite SMS, corrreio de
voz e também redirecionamento de
chamadas. O serviço para realização
de chamadas requer créditos que
podem ser obtidos através do site do
Skype: http://www.skype.com.
Além disto existem diversos programas que falam protocolos H323 e SIP
permitindo facilmente a criação de sistemas de audio e vídeoconferência.
336
Serviço de Redes
Interconectividade
Interconectividade DOS/Windows
O kernel do Linux suporta os sistemas de arquivos msdos, vfat, ntfs e
smbfs. Uma partição FAT ou VFAT pode ser montada na estrutura hierárquica de
sistemas de arquivos do Linux. Assim, você pode transferir arquivos facilmente
entre os sistemas de arquivos DOS/Windows e Linux em discos ou disquetes.
Utilize os comandos tradicionais, como o cp e mv, do Unix. Não se esqueça de
desmontar os sistemas de arquivos removíveis (como disquetes e zip drives) antes
de remover a media.
Você pode utilizar ainda os comandos mtools (como mattrib, mcd,
mcopy, mdel, mdeltree, mdir, mformat, mmd, mrd, mmove, mren e mtype)
para tratar diretamente arquivos e diretórios em disquetes ou partições FAT ou
VFAT.
hmarx@thor:~> mdir a:
Volume in drive A is SuSE Linux (abbr=SUSE LINUX )
Volume Serial Number is 5377-BBE2
Directory for A:/
chapte~1 aw
33302 07-04-2002 17:30
chapte~2 aw
295888 07-04-2002 17:31
biblio~1 aw
15343 07-04-2002 17:31
3 files
344 533 bytes
1 112 576 bytes
hmarx@thor:~>
p
chapter_01.aw
chapter_08.aw
bibliography.aw
free
Serviços de Redes
337
Configure os mapeamentos das letras dos discos no arquivo
/etc/mtools.conf. Um trecho deste arquivo pode ser visto abaixo:
drive a: file="/dev/fd0" exclusive mformat_only cylinders=80 heads=2 sectors=18
drive b: file="/dev/fd1" exclusive mformat_only cylinders=80 heads=2 sectors=18
drive c: file="/dev/hda1"
drive z: file="/dev/sda4" 11
drive m: file="/var/lib/dosemu/diskimage"
mtools_lower_case=1
Você deverá ter acesso de leitura e/ou escrita à partição ou dispositivo no
Linux para conseguir ler e/ou gravar arquivos através dos aplicativos mtools.
338
Serviço de Redes
O Linux como servidor de uma rede Windows
Através do Samba, o Linux pode emular um servidor Window NT para
clientes Lan Manager, Windows 3.x, 9x, Me, 2000, NT e XP. O Samba
implementa os protocolos NetBIOS, SMB e NMB sobre o TCP/IP. O NMB é
utilizado para o serviço de browsing. Ele pode ainda executar o serviço de
netlogon e de time server (sincronismo de relógio das estações com o servidor).
O arquivo de configuração do Samba é o /etc/samba/smb.conf.
Neste arquivo você define o domínio, os compartilhamentos, a segurança, a forma
do servidor atuar (master browser, domain controller, etc), e demais parâmetros
da rede. As informações mínimas a serem configuradas no Samba, para que uma
máquina Linux com IP 192.168.1.1 seja vista como um servidor NT, validando
usuários e compartilhando o diretório pessoal e o diretório /work como
Trabalho em uma rede local são:
; /etc/samba/smb.conf
[global]
workgroup = nome_do_domínio
os level = 2
security = user
encrypt passwords = yes
protocol = NT1
interfaces = 192.168.1.1/255.255.255.0
bind interfaces only = yes
local master = yes
domain logons = yes
domain master = yes
smb passwd file= /etc/samba/smbpasswd
wins support = yes
logon script = scripts\%U.bat
server string = SuSE Linux Samba %v
message command = bash -c ’echo From: %f, To: %t $(cat %s) | \
/usr/X11/bin/xmessage -file -;rm %s’ &
browseable = yes
[netlogon]
path=/etc/samba/netlogon
read only = yes
locking = no
hosts allow = 192.168.1.
[homes]
comment = Diretório pessoal
read only = no
create mode = 0750
[Trabalho]
comment = Diretório de trabalho
path = /work
create mode = 770
Serviços de Redes
339
O compartilhamento especial homes será substituído pelo diretório
pessoal do usuário (~usuário). O logon script poderá ser também por estação,
utilizando, por exemplo, a metavariável %M:
logon script = scripts\%M.bat
O compartilhamento especial printers, definido no arquivo
/etc/samba/smb.conf, tornará as impressoras configuradas no Linux
disponíveis para as estações Windows.
[printers]
comment = Todas as impressoras
printable = yes
public = no
read only = yes
create mode = 0700
directory = /tmp
Utilizando o script printfax.pl, um dispositivo fax modem poderá ser
disponibilizado para estações Windows como uma impressora PostScript:
[fax]
comment = Servidor de FAX
postscript = yes
print command = ( /usr/bin/printfax.pl %I %s %U %m; rm %s ) &
printable = yes
writeable = no
path = /var/spool/faxserver
No SuSE Linux, o servidor Samba pode então ser disparado pelo script
rcsmb (ou rcsamba). Serão disparados o smbd e o nmbd, servidores SMB e de
nome NetBIOS, respectivamente.
O samba pode ser administrado facilmente pelo SWAT - Samba Web
Administration Tool - através de um navegador WEB utilizando uma conexão no
porto 901 (http://localhost:901). Para isto, o swat deve ser habilitado
no /etc/inetd.conf.
340
Serviço de Redes
Usuários Linux e os clientes de uma rede Windows
O conjunto de usuários do Samba é um sub-conjunto dos usuários do
Linux. Isto é, os usuários do Samba já deverão estar cadastrados no Linux. Você
deve incluir os usuários do Samba através do programa smbpasswd. Além disto,
o smbpasswd serve para criar contas de estações de trabalho, se unir a um
domínio, habilitar, desabilitar ou excluir uma conta do Samba. As informações
destas contas serão armazenadas no arquivo /etc/samba/smbpasswd.
Pode ser feito também o mapeamento de usuários através do arquivo
/etc/samba/smbusers (ou no arquivo definido pela opção username map
em /etc/samba/smb.conf).
O Linux como cliente de uma rede Windows
O Linux pode utilizar recursos compartilhados por uma máquina
Windows. Basta que o kernel tenha suporte ao smbfs e você poderá utilizar o
comando mount com a opção -t smbfs e a sintaxe //servidor/recurso para
especificar o compartilhamento. Você pode ainda utilizar o aplicativo smbclient
(do pacote samba-client) que permite também utilizar os serviços de envio
de mensagens (popup messages) e utilização dos serviços de impressão de
máquinas Windows. O script samba_print utiliza o smbclient para serviços de
impressão.
No modo gráfico, você pode utilizar diversos aplicativos. O LISa (Lan
Information Server) e os utilitários do Samba como o nmblookup, servem para
obter as informações sobre sua rede SMB. No Konqueror você poderá utilizar a
URL smb://servidor para navegar através de sua rede Windows. O
aplicativo LinNeighborhood se assemelha ao "Ambiente de rede" do Windows.
Com ele você poderá montar compartilhamentos de máquinas Windows na
estrutura de árvore de sistemas de arquivos do Linux.
Serviços de Redes
341
Interconectividade Novell® Netware®
O kernel do Linux suporta o sistema de arquivos ncpfs. Assim, você pode
montar os volumes Netware. Utilizando utilitários como slist, nwlogin, nwprint,
nwuserlist, nwgrant, nwdir, nwfstime, nwfsinfo, nwpasswd, nwrights,
nwbols, e outros, você pode utilizar um servidor Netware através do Linux. O
kernel deverá ter suporte ao protocolo IPX.
Há ainda o emulador do kernel do Netware 3.11/3.12, marsnwe, cujo
arquivo de configuração é o /etc/nwserv.conf. Basta ter os volumes do
Netware em diretórios do Linux, e o Linux passa a ser visto como um servidor
Novell na rede. O Caldera Netware® for Linux possui os volumes do Netware
4.1x. Você pode até mesmo gerar os volumes em diretórios do sistema de
arquivos padrão do Linux. Nos exemplos seguintes utilizamos o marsnwe para
representar o servidor Netware, rodando na própria máquina Linux.
hmarx@thor:~> slist
Known NetWare File Servers
Network
Node Address
----------------------------------------------------------------THOR
C0A8C803 000000000001
hmarx@thor:~> nwvolinfo -S thor -v SYS -U hmarx
Logging into THOR as HMARX
Password:
Total
: 2020332K
Free
: 115276K
Purgable : 0K
No Purg. : 0K
Dirs
: 522240
Free dirs: 407674
hmarx@thor:~>
p
Você poderá utilizar o ncpmount para montar volumes de servidores
Netwareno Linux.
thor:~# ncpmount -S thor -V SYS /mnt
Logging into THOR as SUPERVISOR
Password:
thor:~# mount | grep ncpfs
THOR/SUPERVISOR on /mnt type ncpfs (rw)
thor:~#
p
342
Serviço de Redes
Interconectividade Apple® Macintosh®
O Linux também se integra a redes com máquinas
Apple Macintosh. O kernel suporta a família de protocolos
AppleTalk (RTMP, NBP, ZIP e AEP). Os arquivos de
configuração do AppleTalk ficam no diretório /etc/atalk.
O aplicativo atalkd, configurado no arquivo atalkd.conf,
é responsável pelo gerenciamento da rede ApplelTalk. Ele
inclui roteamento, registro e procura de nomes e domínios. No
arquivo netatalk.conf você configura quais serviços serão disparados, o
número máximo de clientes e a forma de execução dos serviços.
O Linux pode compartilhar arquivos através do afpd (Apple Filing
Protocol Daemon) e impressoras através do papd (Printer Access Protocol
Daemon). Podem ser criados diversos servidores afpd virtuais cuja configuração
é feita no arquivo afpd.conf. Você pode definir quais sistemas de arquivos
serão compartilhados e com que permissões através dos arquivos
AppleVolumes.default e AppleVolumes.system.
O compartilhamento de impressoras é configurado no arquivo
papd.conf. Este arquivo não é necessário porque o papd compartilha o
mesmo que o lpd.
Uma vez configurado, o AppleTalk pode ser disparado através do script
rcatald (como os demais serviços no Linux).
Aplicativos como o getzones, afppasswd, achfile, aecho, accleandir,
pap e papstatus podem ser utilizados para manipular sistemas de arquivos e
impressoras em uma rede AppleTalk.
O kernel Linux
343
9. O Kernel Linux
Configuração do kernel Linux
Como sistema de fonte aberto, o sistema operacional Linux pode
ser modificado e adequado à arquitetura e configuração de
hardware de um computador específico ou de serviços suportados
pelo kernel. Para isto, é necessária a instalação dos fontes do kernel.
Os fontes são normalmente instalados em /usr/src/linux. A versão mais atualizada
pode ser obtida de http://kernel.org. Consideraremos um kernel 2.6.x nos
exemplos.
Drivers para dispositivos muito recentes podem não estar, ainda, incluídos
nos fontes do kernel. Em alguns casos, eles podem estar disponíveis em sites na
Internet. Mesmo alguns fabricantes já disponibilizam fontes de drivers mais
atualizados para seus produtos. Siga as instruções que normalmente acompanham
os arquivos baixados do site. Nos casos em que os drivers são disponibilizados
em formato objeto, certifique-se de escolher o driver para a versão correta do
kernel. Os módulos objetos, carregáveis dinamicamente, são geralmente copiados
para um subdiretório do diretório /lib/modules/versão_do_kernel.
Quando há necessidade de recompilação, os
básico em C deverão estar instalados (como o gcc,
devel). Se a instalação for feita através YaST no
pacotes serão automaticamente selecionados com
desenvolvimento.
pacotes de desenvolvimento
o make, o ld, e o ncursesSuSE Linux, alguns destes
a seleção do ambiente de
Você poderá configurar os fontes do kernel para adequar ou incluir um
driver ou serviço, e até mesmo definir quais drivers ou serviços deverão ser
suportados pelo kernel. Diversos drivers e serviços poderão ser compilados como
módulos (a serem carregados sob demanda).
344
O Kernel Linux
Para reconfigurar e compilar o kernel e seus módulos, vá para o diretório
onde se encontram os fontes do kernel (normalmente em /usr/src/linux) e utilize
um dos seguintes comandos:
Comando
make help
make config
make menuconfig
make xconfig
make cloneconfig
Objetivo
Ver as opções definidas no Makefile
Realizar a configuração em modo texto linha
a linha
Realizar configuração em modo texto com
janelas
Realizar a configuração em modo gráfico,
no sistema X Window
Obter a configuração do kernel atual em
execução a partir de /proc/config.gz
Através das perguntas ou menus, você pode configurar o tipo de
processador(es), memória, drivers de dispositivos, otimizações, serviços e
protocolos suportados pelo kernel. Algumas opções permitem compilação como
módulos carregáveis dinamicamente. A configuração é salva, por default, no
arquivo .config.
Tipicamente, as alterações mais comuns são:
• tipo de processador
• suporte a multiprocessamento
• suporte a formato de sistemas de arquivos
• suporte a características personalizadas de protocolos de redes
• suporte a componentes e periféricos do computador
Note que na distribuição SuSE Linux o kernel é automaticamente
selecionado durante a instalação conforme as características de seu computador.
Além disto o kernel do SuSE Linux foi compilado para suportar, através de
módulos, a grande maioria dos componentes e arquiteturas de hardware e
serviços existentes.
O kernel Linux
Configurando o kernel com o comando make xconfig
345
346
O Kernel Linux
Compilação do kernel e seus módulos
Após salvar a configuração, utilize a sequência abaixo para realizar a
recompilação total do kernel e seus módulos:
Comando
make clean
make mrproper
make all
make vmlinux
make modules
make modules_install
Objetivo
Apagar os arquivos objetos antigos
mantendo a configuração
Apagar todos os arquivos objetos antigos
incluindo a configuração
Compila tudo que é necessário
Compila apenas o kernel
Compilar todos os módulos definidos na
configuração
Instalar
os
módulos
no
diretório
/lib/modules/versão do kernel
Caso tenha alterado o kernel, reinicialize o sistema para carregar o novo
kernel. Caso tenha apenas recompilado um módulo, basta remover a versão
anterior e inserir a versão nova. Veja também modinfo, rmmod, modprobe e
insmod.
O kernel Linux
347
Lembre-se de manter sempre uma cópia funcional do kernel e dos módulos
(normalmente os que foram instalados através dos CDs), facilmente carregável
através do LILO ou GRUB, para os casos de um driver ou serviço recompilado
não estar funcionando corretamente.
Pode ser útil ter uma entrada de segurança, por exemplo, no arquivo
/etc/lilo.conf como a gerada automaticamente durante à instalação do
SuSE Linux:
image=/boot/vmlinuz.suse
label=failsafe
root=/dev/hda1
initrd=/boot/initrd.suse
append="disableapic ide=nodma apm=off"
Para o GRUB, o arquivo /boot/grub/menu.lst
title Failsafe -- SUSE LINUX 9.3
kernel (hd0,2)/vmlinuz root=/dev/hda5 showopts ide=nodma apm=off
acpi=off vga=normal noresume selinux=0 barrier=off nosmp noapic
maxcpus=0 3
initrd (hd0,2)/initrd
Você pode também gerar disquetes do boot para recuperação em caso de mau
funcionamento ou funcionamento errático do sistema devido a uma recompilação
do kernel ou algum módulo. Isto pode ser feito através do YaST ou manualmente.
Veja como criar manualmente um conjunto de disquetes de boot no apêndice B:
Criando Disquetes de Boot.
348
O Kernel Linux
Segurança
349
10. Segurança
Devemos inicialmente definir alguns conceitos relacionados a segurança
de equipamentos, processos e informações (que chamaremos de objetos):
integridade, disponibilidade, confiabilidade e privacidade. Integridade é a
permanência útil e funcional dos objetos. Disponibilidade é o tempo em que os
objetos estão acessíveis para a utilização. Confiabilidade é a certeza de que os
objetos estão corretos (funcionam corretamente e/ou não foram alterados).
Privacidade é a certeza que os objetos só estão disponíveis aos usuários, grupos
ou outros objetos aos quais pertencem ou foram dadas permissões. Para isto o
sistema deve ter controle de acesso e auditoria para que se possa identificar quem,
quando e o que fez, nos casos da ocorrência de algum evento incorreto ou
malicioso.
Segurança no Linux
A segurança em sistemas Unix-like é uma questão
de confiança. É importante definir bem os grupos
de usuários e as regras de utilização de senhas.
Deve ser tomado um cuidado especial com o
usuário root e aplicativos suid root.
Um furo de segurança pode começar com um acesso indevido utilizando
uma senha de um usuário comum. A partir daí, um invasor poderá, às vezes sem
muito esforço, adquirir privilégios do root. No mínimo, este invasor poderá
consumir recursos do sistema como uso de CPU, memória e espaço em disco.
350
Segurança
Formas de ataque
O acesso físico a um equipamento com informações críticas e/ou
confidenciais deverá também ser restrito. Um simples reset poderá comprometer
a integridade das informações. Se o invasor puder reinicializar a máquina através
de um disquete ou CD, a festa fica completa. Outro meio de se furar a segurança
são os links de comunicação. Deve-se prestar muita atenção aos links de acesso
dedicado ou modems para acesso discado.
Defina bem a função do equipamento no qual você está instalando o
Linux. Selecione os serviços que você realmente deseja disponibilizar (telnet, ftp,
http, mail, ...). Instale apenas os necessários e/ou desabilite os outros.
Cavalos de Tróia
O nome "Cavalo de Tróia" vem da mitologia (também
referenciado como o presente de grego). Ele é dado a
programas que aparentam fazer alguma coisa mas fazem outra
coisa, normalmente maliciosa. Normalmente eles são enviado
através de e-mail ou disponibilizados em sites de download
gratuitos. Nunca rode programas de fontes duvidosas. Nunca
execute programas executáveis a não ser que você confie em
quem enviou (pessoa ou site). Sempre verifique todo
programa interpretado (por exemplo, os scripts) antes de executá-lo. Lembre-se
que erros (não intencionais) também podem ser muito prejudiciais.
Tome cuidado com o PATH ! Garanta que o comando que você digita
executará realmente o programa desejado. Um executável chamado ls instalado
no diretório pessoal de um usuário que utilize o shell com a variável PATH
contendo o diretório pessoal ($HOME) ou o diretório corrente (.) antes dos
diretórios do sistema, pode não "listar o diretório" ou não apenas "listar o
diretório" !
Cuidado com as permissões do diretório pessoal. Os arquivos de
inicialização (como ~/.bashrc, ~/.profile, ~/.vimrc, ~/.forward
e ~/ .procmailrc) podem ser alvos para a inserção de "cavalos de tróia".
Um diretório pessoal deve ter as permissões rwx------, ou seja 0700, garantindo
segurança e privacidade.
Segurança
351
352
Segurança
Scripts CGI
Tenha uma especial atenção na escrita de
scripts WEB. A maioria dos furos de segurança não
são intencionais. Nunca confie no browser do
usuário. Apesar das limitações impostas por tags
HTML, um campo poderá exceder as capacidades
das variáveis do script. Os textos poderão conter
metacaracteres ou caracteres especiais como uma
crase (‘) que podem ser interpretadas, por exemplo, pelo shell ou pelo perl e
permitir a execução de comandos externos. Nunca permita que usuários comuns
coloquem scripts CGI em seu servidor sem que um profissional de segurança
tenha testado todo o script e provado que ele não oferece riscos ao seu sistema.
Variáveis globais podem também oferecer informações valiosas para os
atacantes. Estas informações poderão ser exibidas no browser ou facilmente
enviadas por e-mail.
Uma atenção especial deve ser dada aos scripts interpretados pelo
servidor. Os scripts comumente escritos em linguagem shell, perl ou php, por
exemplo, devem ser rigorosamente testados antes de publicados. Os scripts java
ou vb, que são interpretados pelo browser, normalmente são mais prejudiciais à
segurança do cliente. Estes devem também ser verificados para não exporem
informações indesejáveis do servidor para os clientes (browsers).
Segurança
353
Vírus
Um vírus de computador é um programa capaz de
"infectar" outros aplicativos e de se espalhar (replicar) por
outros aplicativos. Uma instalação Linux pura é
intrinsecamente imune a vírus. Um usuário comum
normalmente não possui permissão para escrita nos
diretórios do sistema. Assim a "infecção" ficaria restrita
aos seus arquivos. Além disto, escrever um vírus que
contamine programas em qualquer versão, distribuição ou configuração do Linux
é extremamente difícil (e por que não dizer praticamente impossível).
Um arquivo anexo em um e-mail não possui atributo executável e o
usuário, somente se desejar, irá salvá-lo e alterar as permissões para que ele possa
ser executado. Um bom administrador nunca iria fazê-lo com qualquer arquivo
vindo da Internet. Esta abordagem de contaminação de máquinas Unix/Linux é
denominada de vírus social: um educado vírus que pede para ser salvo, ter seus
atributos alterados para executável e ainda executá-lo como root !
Porém, se uma máquina é utilizada como servidor de arquivos/discos,
arquivos inofensivos para o Linux se tornam extremamente perigosos para as
estações de trabalho DOS, Windows, MacOS ou Netware. Existem programas
anti-vírus para o Linux para varrer estes arquivos e diretórios compartilhados e
detectar a presença de padrões de vírus neles. Para os anexos de e-mails pode ser
utilizado o programa amavis em conjunto com um software anti-vírus (tanto no
envio quanto na recepção). O software anti-vírus deve ser atualizado
periódicamente e, quando possível, automaticamente.
As mesmas precauções tomadas em relação aos cavalos de tróia, quanto
ao PATH e ao diretório pessoal, devem também serem tomadas em relação aos
problemas de vírus.
354
Segurança
Vermes (worms)
Como qualquer sistema operacional, o Linux não é
imune a uma classe de programas, denominados de
vermes,
que
simplesmente
gastam
recursos
exageradamente. Isto degrada o desempenho do sistema,
provocando até o trashing. O trashing não é um crash.
No trashing, o equipamento torna-se tão lento que na
maioria das vezes fica impossível utilizá-lo. Quando
detectado cedo, é até fácil controlá-lo e eliminá-lo. Basta "matar" o processo
guloso de recursos. Para minimizar a possibilidade de degradação do sistema pelo
gasto de recursos, pode-se configurar limites de utilização de área em disco com o
sistema de quotas, e limites de tempo de processamento, abertura de arquivos e
uso de memória com o ulimit.
As mesmas precauções tomadas em relação aos cavalos de tróia e vírus
quanto ao PATH e ao diretório pessoal devem também serem tomadas em relação
aos worms.
Ataques
Um sistema pode ser atacado de diversas formas. A confidencialidade das
informações pode ser anulada através de escuta em conexões (rede, modem ou
conexões seriais). Quando não há alteração da informação, é muito difícil detectar
a presença de um "man in the middle".
Uma forma de ataque semelhante ao verme é chamada hoje de Denial of
Service (ou DoS). Ela consiste em sobrecarregar um ou mais serviços. Seja por
exemplo um site WEB. Se alguém gera, constantemente, muitas requisições para
obter as páginas deste site, outras pessoas podem não conseguir navegar pelo site.
Esta forma se torna mais perigosa se vier simultaneamente de várias origens da
Internet, conhecida então como DDoS (Distributed Denial of Service).
Outra forma de ataque é a alteração da origem dos pacotes, enganando o
TCP/IP. Isto é conhecido como IP spoofing.
Segurança
355
Algumas ferramentas
Existem centenas de ferramentas para
melhorar a segurança e diagnosticar possíveis
invasões. A implementação de um firewall pode
diminuir consideravelmente a probabilidade de
invasão.
O uso de TCP wrappers pode também ajudar
nesta redução além de facilitar a detecção de ataques.
A função principal dos wrappers é registrar e controlar os acessos aos serviços de
rede. Por exemplo, o tcpd pode ser utilizado no arquivo /etc/inetd.conf
para verificar e controlar os acessos aos serviços de rede. As permissões de acesso
para o tcpd são configuradas nos arquivos /etc/hosts.allow e
/etc/hosts.deny. Utilizando o xinetd, os arquivos no diretório
/etc/xinetd.d/ podem conter diversas opções para evitar e diagnosticar
ataques, como:
only_from
no_access
access_times
cps
max_load
rlimit_as
rlimit_cpu
rlimit_rss
rlimit_stack
log_on_success
log_on_failure
lista de IPs
lista de IPs
faixa de horário permitida
número máximo conexões por segundo
carga máxima do servidor
espaço de endereçamento máximo
tempo máximo de CPU em segundos
uso máximo de memória residente
tamanho máximo da pilha
informações para log em caso de sucesso
informações para log em caso de falha
Ataques podem ser facilmente detectados apenas analisando os logs do
sistema. Tentativas de abertura de sessão com usuários inválidos ou múltiplas
tentativas de abertura de sessão com senhas inválidas indicam um ataque em
potencial.
356
Segurança
Um ataque vindo da rede local ou da Internet começa através de um porto
inseguro aberto. Alguns atacantes utilizam programas denominados portscan,
que varrem os portos de uma máquina ou conjunto de máquinas à procura de
portos abertos. Estes mesmos programas podem ser utilizados para verificar a
segurança de uma instalação. Pacotes como o snort e o saint são muito utilizados
na detecção de tentativas de ataque. Todos estes aplicativos também geram logs
que devem ser frequentemente analisados pelos administradores de redes e
segurança.
A primeira barreira para os ataques é o denominado firewall (derivado do
nome da porta corta fogos).
Segurança
357
Firewalls
As principais funções de um firewall são a proteção entre
redes locais/privadas e redes públicas, como a Internet, e a geração
de logs de atividades, tráfego e acessos devidos e indevidos.
Existem diversas arquiteturas de firewall. A mais simples é a que utiliza
um equipamento interligando duas redes (chamado de dual homed host). Este
equipamento possui duas interfaces de rede: uma para a rede local privada e outra
para a rede pública (normalmente a Internet).
Esta arquitetura permite maior controle de acesso porque todos os pacotes
passam pelo firewall. Ele sempre atua como proxy. As estações na rede privada
não têm acesso direto a serviços na rede pública.
358
Segurança
Uma derivação desta arquitetura é a inserção de uma interface para uma
rede denominada DMZ (DeMilitarized Zone). A DMZ somente é acessível pelo
firewall e provê serviços como http e mail para as redes privada e pública.
A proteção contra acessos indevidos, tanto da rede local para a pública
quanto da rede pública para a local, é feita através de filtros de pacotes.
Filtros
As regras do firewall levam em consideração a direção (Inbound,
Outbound, Either), o endereço e porto de origem, o endereço e porto de destino, o
protocolo e definem a ação (Accept, Deny, Reject, Masq, Redirect ou Return). O
porto de destino especifica basicamente o serviço requisitado. Este serviço
normalmente é implementado na camada de aplicação (mail, telnet, ftp, ...). Um
bom firewall conhece o encapsulamento dos dados para os serviços definidos
desde a camada física (meio de acesso à rede: ethernet, FDDT, ATM, ...) até a
camada de aplicação.
Segurança
359
NAT - Network Address Translation
Outra função de um firewall é permitir que uma máquina local com
endereços privados acesse serviços e máquinas na Internet. O firewall faz a
tradução de endereços privados para endereços válidos na Internet. Isto também é
conhecido como masquerading.
Quando a tradução é feita no endereço de origem, o processo é chamado
SNAT e quando a tradução é feita no endereço de destino, o processo é chamado
de DNAT.
Implementação do firewall
O firewall pode ser implementado por um software em um computador
comum com pelo menos duas interfaces de rede. Este computador é chamado de
multihomed, tendo uma interface com a rede local e outra com a rede pública.
360
Segurança
Software de firewall - IPCHAINS
Até a versão 2.2 do kernel, o software padrão do Linux é o ipchains. No
SuSE Linux, ele é facilmente configurado utilizando o arquivo
/etc/rc.config.d/firewall.rc.config. Nele são definidas as
interfaces, os endereços e serviços válidos, tanto na rede privada quanto na
pública. Para que o ipchains seja executado, é necessário definir
START_FW="yes" no /etc/rc.config. A execução do firewall utilizando
rcSuSEfirewall
(ou
apenas
rcfirewall),
que
rodará
o
script
/sbin/SuSEfirewall, gerará chamadas ao ipchains para a inclusão de
filtros ou regras de firewall. As regras poderão ser vistas utilizando o comando:
thor:~ # rcSuSEfirewall status
ou simplesmente
thor:~ # ipchains -L
As regras podem ser tratadas manualmente através do comando ipchains.
A sintaxe geral é :
# ipchains -{A | D | C } cadeia especificação [ opções ]
Para adicionar, remover ou verificar uma regra
# ipchains - { R | I } cadeia número especificação [ opções ]
Para Incluir ou substituir uma regra
Segurança
361
Os parâmetros podem especificar os protocolos, endereços de origem,
endereços de destino, interfaces de entrada ou saída:
-p [ ! ] protocolo
--protocol [ ! ] protocolo
Especifica o protocolo da regra ou do pacote
-s [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ]
--source [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ]
Especifica o endereço de origem e opcionalmente o porto
--source-port [ ! ] [ porto [ : porto] ]
Especifica somente o porto de origem
-d [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ]
--destination [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ]
Especifica o endereço de destino e opcionalmente o porto
--destination-port [ ! ] [ porto [ : porto] ]
Especifica somente o porto de destino
-i [ ! ] nome
--interface [ ! ] nome
Especifica o nome da interface pela qual o pacote é recebido ou enviado
(por cadeias de entrada ou saída)
-j alvo
--jump alvo
Especifica o alvo da regra
O protocolo pode ser tcp, udp, icmp ou all, ou número ou um nome
definido em /etc/protocols. O porto pode ser um número ou um nome
definido em /etc/services. Um endereço pode ser um nome de máquina,
rede ou um endereço IP. Uma máscara pode ser uma máscara de rede (como
255.255.255.0 da classe C) ou o número de 1s da máscara (como 24 para a
máscara 255.255.255.0).
362
Segurança
Um alvo pode ser uma cadeia definida pelo usuário ou um valor especial
como ACCEPT, DENY, REJECT, MASQ, REDIRECT ou RETURN. O símbolo
´!´ é utilizado para inverter o significado da especificação.
Desta forma, se um gateway (com interface pública eth1) só precisa fazer
NAT, basta a inserção da regra:
thor:~ # ipchains -A forward -j MASQ -i eth1
Segurança
363
Software de firewall - IPTABLES
De forma semelhante, a partir da versão 2.4 do kernel, o software padrão é
o iptables. Até o SuSE Linux 7.3, ele é facilmente configurado alterando o
arquivo /etc/rc.config.d/firewall2.rc.config.
A partir da versão 8.0, a configuração é feita alterando o arquivo
/etc/sysconfig/SuSEfirewall2. Este arquivo tem basicamente as
mesmas informações presentes nas versões anteriores (no arquivo
/etc/rc.config.d/firewall2.rc.config). A ativação do firewall
utilizando rcSuSEfirewall2, que rodará o script /sbin/SuSEfirewall2,
gerará chamadas ao iptables para a inclusão de filtros ou regras de firewall.
As regras poderão ser vistas utilizando os comandos:
thor:~ # rcSuSEfirewall2 status
ou simplesmente
thor:~ # iptables -L
As regras podem ser tratadas manualmente através do comando iptables.
A sintaxe geral é parecida com o do ipchains :
# iptables -{A | D | C } cadeia especificação [ opções ]
Para adicionar, remover ou verificar uma regra
# iptables - { R | I } cadeia número especificação [ opções ]
Para Incluir ou substituir uma regra
364
Segurança
Os parâmetros especificam mais precisamente os endereços, protocolos,
portos e interfaces de origem e destino:
-p [ ! ] protocolo
--protocol [ ! ] protocolo
Especifica o protocolo da regra ou do pacote
-s [ ! ] endereço [ / máscara ]
--source [ ! ] [ endereço / máscara ]
Especifica o endereço de origem
--source-port [ ! ] [ porto [ : porto] ]
Especifica somente o porto de origem
-d [ ! ] endereço [ / máscara ]
--destination [ ! ] endereço [ / máscara ]
Especifica o endereço de destino
--destination-port [ ! ] [ porto [ : porto] ]
Especifica somente o porto de destino
-i [ ! ] nome
--in-interface [ ! ] nome
Especifica o nome da interface pela qual o pacote é recebido
-o [ ! ] nome
--out-interface [ ! ] nome
Especifica o nome da interface pela qual o pacote é enviado
-j alvo
--jump alvo
Especifica o alvo da regra
Segurança
365
--tcp-flags [ ! ] máscara ativos
Especifica listas de flags do TCP. máscara contém os flags que devem estar
inativos e ativos os flags que dever estar ativos.
--mac-source [ ! ] endereço
Endereço MAC de origem de interfaces ethernet nas cadeias
PREROUTING, INPUT e FORWARD.
--limit taxa [ /sufixo ]
Especifica a taxa média máxima. O sufixo pode ser second, minute, hour
ou day. O limite default é 3/hour.
--limit-burst número
Especifica o número máximo de pacotes iniciais. O default é 5.
--tos tos
Especifica os bits do campo TOS do cabecalho do TCP/IP. Pode ser um
número ou um nome.
O protocolo pode ser tcp, udp, icmp ou all, ou um nome ou número
representando de /etc/protocols. Um endereço pode ser um nome de
máquina, rede ou um endereço IP. Uma máscara pode ser uma máscara de rede
(como 255.255.255.0 da classe C) ou o número de 1s da máscara (como 24 para a
máscara 255.255.255.0). Um alvo de --jump pode ser uma cadeia definida pelo
usuário ou um valor especial como LOG, MARK, REJECT, TOS, MIRROR,
SNAT, DNAT, MASQUERADE, REDIRECT. O nome da interface pode
terminar com + indicando todas as interfaces que começam com nome. Os flags
do TCP são SYN, ACK, FIN, RST, URG, PSH, ALL e NONE.
Os nomes dos bits do campo tipo de serviço (e seus números) são:
Minimize-Delay
0x10
Maximize-Throughput
0x08
Maximize-Reliability
0x04
Minimize-Cost
0x02
Normal-Service
0x00
366
Segurança
Se um gateway (com interface pública eth1) só precisa fazer NAT, basta a
inserção das regras:
thor:~ # iptables -A POSTROUTING -t nat -j MASQUERADE -o eth1
thor:~ # echo 1 > /proc/sys/net/ipv4/ip_forward
E para o mínimo de segurança:
thor:~ # iptables -A INPUT -j DROP -m state --state NEW, INVALID -i eth1
thor:~ # iptables -A FORWARD -j DROP -m state --state NEW, INVALID -i eth1
O SuSEfirewall
A distribuição SuSE Linux contém uma forma mais simples de definição
das regras básicas de firewall. Nas versões que utilizam o ipchains ele é chamado
de SuSEfirewall e nas versões que utilizam o iptables ele é chamado de
SuSEfirewall2. Os arquivos de configuração são bastante semelhantes e contém
definições de variáveis utilizadas pelo script /sbin/SuSEfirewall ou
/sbin/SuSEfirewall2. O script bash lê o arquivo de configuração e faz as
devidas chamadas ao ipchains ou iptables com as regras de firewall.
Chamaremos a partir de agora simplesmente de SuSEfirewall.
A arquitetura do SuSEfirewall define as três classes de redes básicas:
interna, externa e DMZ. Podem existir várias interfaces de rede em cada classe.
No arquivo de configuração as interfaces são definidas pelas variáveis
FW_DEV_INT, FW_DEV_EXT e FW_DEV_DMZ. A variável FW_ROUTE
define se haverá ou não roteamento de pacotes entre as interfaces definidas.
FW_MASQUERADE permite a tradução de endereços (NAT) para os IPs das
interfaces definidas em FW_MASQ_DEV. Apenas os endereços pertencentes às
redes definidas em FW_MASQ_NETS serão mascarados.
Segurança
367
Os serviços do firewall estarão disponíveis para as máquinas da(s) rede(s)
internas somente se FW_PROTECT_FROM_INTERNAL for desabilitado. O
default é habilitado e somente os serviços explicitamente especificados poderão
ser acessados por máquinas explicitamente definidas. Os serviços em execução no
firewall podem ser protegidos das redes internas, externas e DMZ, definindo-se as
seguintes variáveis para os protocolos TCP, UDP e IP:
Redes Internas
Redes Externas
Redes DMZ
FW_SERVICES_INT_TCP
FW_SERVICES_EXT_TCP
FW_SERVICES_DMZ_TCP
FW_SERVICES_INT_UDP
FW_SERVICES_EXT_UDP
FW_SERVICES_DMZ_UDP
FW_SERVICES_INT_IP
FW_SERVICES_EXT_IP
FW_SERVICES_DMZ_UDP
Nestas variáveis podem ser informados números ou nomes de portos
(dados em /etc/services). Podem ser especificadas faixas de portos como
1:1023.
Redes e serviços confiáveis podem ser informados na variável
FW_TRUSTED_NETS. Portos altos podem ser permitidos pelas variáveis:
FW_ALLOW_INCOMING_HIGHPORTS_TCP
FW_ALLOW_INCOMING_HIGHPORTS_UDP
Os serviços em execução podem ser detectados automaticamente
habilitando a variável FW_SERVICE_AUTODETECT. Somente os serviços
habilitados nas seguintes variáveis serão auto-detectados:
FW_SERVICE_DNS
FW_SERVICE_SQUID
FW_SERVICE_DHCPD
FW_SERVICE_DHCLIENT
FW_SERVICE_SAMBA
Serviços na rede interna ou DMZ podem ser acessíveis diretamente se
definidos através de redirecionamento na variável FW_FORWARD. Para
utilização através de NAT, use a variavel FW_FORWARD_MASQ. Podem ser
definidos IPs de máquinas ou redes, protocolos e portos. Use com cautela porque
você poderá estar abrindo uma porta para invasores e exploradores de falhas
nestes servidores.
368
Segurança
Acessos a alguns serviços podem ser redirecionados para portos locais no
firewall através da definição na variável FW_REDIRECT. Isto pode ser utilizado
para o redirecionamento transparente dos acessos a um servidor WEB seguro,
para o uso de um proxy transparente, e também para a utilização de seu servidor
de envio e-mails com proteção antivirus e/ou antispam.
O nível de informações exibidas no log pode ser controlada pelas
definições das variáveis:
Variável
Significado
FW_LOG_DROP_CRIT
Registra no log os pacotes críticos descartados
FW_LOG_DROP_ALL
Registra no log todos os pacotes críticos
FW_LOG_ACCEPT_CRIT
Registra no log os pacotes críticos aceitos
FW_LOG_ACCEPT_ALL
Registra no log todos os pacotes aceitos
FW_LOG
Define as opções do log
Características de segurança do TCP/IP podem ser habilitadas definindo a
variável FW_KERNEL_SECURITY. Serão habilitadas opções do kernel como:
icmp_ignore_bogus_error_responses
ip_local_port_range
icmp_echoreply_rate
log_martians
icmp_destunreach_rate
mc_forwarding
icmp_paramprob_rate
mc_forwarding
icmp_timeexceed_rate
rp_filter
route_flush
Quando o firewall é desativado, o roteamento de pacotes entre as redes
pode ou não ser mantido conforme o valor da variável:
FW_STOP_KEEP_ROUTING_STATE
Você pode definir se o firewall aceita ping ou permite ping na rede DMZ
ou na Internet através das variáveis:
FW_ALLOW_PING_FW
FW_ALLOW_PING_DMZ
FW_ALLOW_PING_EXT
Segurança
369
A permissão da visualização da rota através do firewall, utilizando o
traceroute, por exemplo, é definida na variável FW_ALLOW_TRACEROUTE.
Quando os buffers de mensagens estão cheios e o firewall não pode
encaminhar a mensagem, ele pode ser enviada um pacote ICMP source_quench
avisando a origem da mensagem para diminuir sua taxa de envio. A permissão
para o envio deste pacote ICMP é feita através da variável
FW_ALOW_FW_SOURCEQUENCH.
A permissão de pacotes de broadcast é feita através da variável
FW_ALLOW_FW_BROADCAST. O log destes pacotes pode ser inibido através
da variável FW_IGNORE_FW_BROADCAST.
Para permitir roteamento entre redes da mesma classe utilize a variável
FW_ALLOW_CLASS_ROUTING.
Regras específicas de firewall podem ser incluídas no arquivo definido
pela variável FW_CUSTOMRULES. Utilizando diretamente o comando ipchains
ou iptables, as regras podem ser incluídas nas seguintes funções definidas neste
arquivo:
Função
Descrição
fw_custom_before_antispoofing
Antes das regras anti-spoofing
fw_custom_after_antispoofing
Depois das regras anti-spoofing
fw_custom_before_port_handling
Antes do tratamento dos portos
fw_custom_before_masq
Antes do mascaramento
fw_custom_before_denyall
Antes de negar tudo
Veja o script /sbin/SuSEfirewall ou /sbin/SuSEfirewall2
para entender a utilização destas funções e de variáveis úteis como input_ext,
input_int, forward_int e forward_ext.
370
Segurança
VPN - Virtual Private Network
Utilizando uma rede pública como meio de transporte, pode-se construir
uma rede privada virtual. A segurança dos dados deve ser mantida em todos os
seus aspectos (veja a introdução deste capítulo). Uma VPN é criada criando-se de
um túnel através da rede da rede pública (normalmente a Internet).
Existem diversas implementações utilizando o Linux.
Uma forma simples é utilizar o SSH para criptografar uma conexão PPP.
Há ainda pacotes como o CIPE e o FreeS/WAN. O CIPE criptografa o IP sobre
UDP. O FreeS/WAN utiliza o IPsec (IP security), um conjunto de protocolos para
segurança IP que provê criptografia e autenticação. Ambos utilizam chaves RSA
para autenticação.
O protocolo PPTP (Point-to-Point Tunneling Protocol) da Microsoft
também é suportado pelo Linux, mas sabe-se que tem sérios problemas de
segurança. Mais informações e exemplos podem ser vistos nos arquivos VPNHOWTO.gz e VPN-Masquerade-HOWTO.gz, encontrados no diretório
/usr/share/doc/howto/en.
Segurança
371
A composição do túnel que forma a VPN pode envolver uma única
máquina (host) ou uma rede (net). Assim temos 3 tipos de composição:
Composição
host-to-host
host-to-net
net-to-net
Descrição
Interliga duas máquinas
Interliga uma máquina a uma rede
Interliga duas redes
Quando o meio é a Internet, uma das partes deve ter IP fixo para que a
outra parte inicie a formação do túnel. A outra parte pode ter IP dinâmico. Existe
a possibilidade de utilizar IP dinâmico nas duas partes através de atualização de
um servidor de DNS dinâmico. Porém sempre haverá uma janela, após a mudança
dos IPs, até a atualização do(s) servidor(es) de DNS. Nesta janela a formação do
túnel não será possível e as partes estarão desconectadas. Há ainda um fator de
insegurança nesta janela quando uma das partes poderá tentar estabelecer o túnel
com outra entidade que por ventura tenha obtido o IP dinâmico que pertencia a
outra parte. Não se deve reduzir muito o TTL do registro no DNS para não
aumentar o tráfego na Internet com as atualizações do DNS.
O firewall tem um papel importante no funcionamento de uma VPN. Ele
irá encaminhar os pacotes da rede privada para dentro do túnel e não permitir que
as máquinas da rede privada sejam acessadas por máquinas da rede pública.
372
Segurança
Configurando uma VPN utilizando o Openswan
O Openswan (derivado do FreeS/wan) é uma implementação do IPsec
no Linux. São utilizados 3 protocolos:
AH (Authentication Header)
ESP (Encapsulating Security Payload)
IKE (Internet Key Exchange)
Os procolos AH e ESP são implementados pelo KLIPS (kernel IPsec). O
procolo IKE é implementado pelo serviço pluto. O KLIPS é opcional no IPv4 e
obrigatório no IPv6. Para o IPv4, verifique se o kernel foi compilado para
suportar o IPsec. Isto pode ser feito facilmente através do comando:
hmarx@thor:~> zcat /proc/config.gz | grep -i ipsec
CONFIG_IPSEC=m
CONFIG_IPSEC_DEBUG=y
CONFIG_IPSEC_DEBUG_DISABLE_DEFAULT=y
CONFIG_IPSEC_TUNNEL=y
CONFIG_IP_IPSEC=m
CONFIG_IPV6_IPSEC=y
CONFIG_IPV6_IPSEC_TUNNEL=y
hmarx@thor:~> ❏
Você pode notar que o kernel do exemplo acima foi compilado com
suporte a IPsec através de módulos carregáveis. Quando o Openswan for ativado,
o módulo ipsec será carregado.
Segurança
373
Considere o modelo mais comum de conexão, o net-to-net:
O ipsec irá criar uma interface virtual ipseci em cada um dos gateways.
Através da interface externa (a que está conectada ao roteador), o ipsec irá fazer
a autenticação e negociar a chave para a criptografia dos pacotes que serão
enviados através da interface ipseci. Esta interface deve ser incluida na lista de
interfaces externas na configuração do firewall e os pacotes não devem ser
mascarados e sim encaminhados para ela. Os portos UDP 500 (isakmp) e o
protocolo IP 50 (esp) devem ser permitidos nas interface externas.
Iniciaremos a configuração pelo firewall.
374
Segurança
Considere que em cada gateway a interface interna seja eth0 e que a
interface externa seja eth1, e que a interface virtual seja o ipsec0. Considere
ainda que estamos utilizando um SuSE Linux 8.0 ou superior. Assim, para o
gateway 1 do modelo acima, no SuSEfirewall teremos as seguintes definições
mínimas:
FW_DEV_INT="eth0"
FW_DEV_EXT="eth1 ipsec0"
FW_MASQUERADE="yes"
FW_MASQ_DEV="eth1"
FW_MASW_NETS="192.168.1.0/24"
FW_SERVICES_EXT_UDP="500"
FW_SERVICES_EXT_IP="50"
FW_SERVICES_INT_TCP="domain smtp ssh 3128"
FW_SERVICES_INT_UDP="domain"
FW_PROTECT_FROM_INTERNAL="yes"
FW_AUTOPROTECT_SERVICES="yes"
FW_FORWARD="192.168.1.0/24,192.168.2.0/24 192.168.1.0/24,192.168.2.0/24"
Devemos desabilitar o rp_filter fazendo uma pequena alteração no script
/etc/init.d/ipsec. Deve-se incluir as linhas em negrito abaixo na opção
start antes do exit:
...
echo -e $return
fi
SUSEFWCFG="/etc/syscofig/SuSEfirewall2"
test -f $SUSEFWCFG && {
. $SUSEFWCFG
for i in $FW_DEV_EXT; do
echo 0 > /proc/sys/net/upv4/conf/$i/rp_filter 2> /dev/null
done
}
exit $st
;;
...
Segurança
375
Alterar o script /sbin/SuSEfirewall2, na sessão "Configuring
more kernel stuff¨":
...
echo 0 >
done
$i/mc_forwarding 2 > /dev/null
test -z "$FW_DEV_IPSEC" || for i in $FW_DEV_EXT; do
echo 0 > /proc/sys/net/ipv4/conf/$i/rp_filter 2> /dev/null
done
test "$FW_KERNEL_SECURITY" = no || {
...
Habilitar o uso de regras de firewall personalizadas:
FW_CUSTOMRULES="/etc/sysconfig/SuSEfirewall2-custom"
No arquivo /etc/sysconfig/SuSEfirewall2-custom inserir as
linhas em negrito na função fw_custom_before_masq():
...
# this ...
DEV_IPSEC=ipsec0
IPSEC_OK=‘$IFCONFIG $DEV_IPSEC 2>/dev/null‘
if [ -z "$IPSEC_OK" ]; then
echo -e "Interface $DEV_IPSEC não está ativa !!!"
else
for chain in forward_int; do
$LAA $IPTABLES -A $chain -j LOG ${LOG}"-FORWARD-INT-IPSEC " -o $DEV_IPSEC
$IPTABLES -A $chain -j "$ACCEPT" -o $DEV_IPSEC
done
for chain in forward_ext; do
$LAA $IPTABLES -A $chain -j LOG ${LOG}"-FORWARD-IPSEC-INT " -i $DEV_IPSEC
$IPTABLES -A $chain -j "$ACCEPT" -i $DEV_IPSEC
done
fi
true
}
...
376
Segurança
PGP - Pretty Good Privacy
O PGP é um sistema de criptografia de chave pública
para proteger arquivos de dados e e-mails. Ele é baseado
no algoritmo RSA (Rivest, Shamir, Adleman), que não
requer troca de senhas entre os elementos.
O funcionamento do RSA
O algoritmo RSA utiliza 5 números:
p
Número primo bem grande
q
Outro número primo bem grande
n
Produto dos números : n = p * q
e
Chave de criptografia que é um primo qualquer relativo ao valor de
(p -1) * (q -1), ou seja, não têm divisores em comum
d
Chave de decriptografia que é derivada de p, q e e:
d = e-1 (m od (p - 1) * (q- 1))
A segurança do RSA depende dos números p e q nunca serem revelados.
Após a geração de n, e e d, os números p e q podem ser destruídos. A
informação a ser criptografada deverá ser um número menor que n. Seja m o
número que você quer criptografar.
Para produzir o texto criptografado c, é utilizada a seguinte fórmula:
c = me mod n
Para decriptografar a mensagem, é utilizada a fórmula:
m = cd mod n
Assim, para criptografar uma mensagem você precisa dos números n e
e; para decriptografá-la, você precisa dos números n e e. Na prática, o PGP
cria a chave pública (n, e) e a chave privada (d). O número n é derivado da
chave pública.
Segurança
377
Uso da criptografia de chave pública
Suponha que José queira enviar um documento para Maria. Tanto José
quanto Maria devem ter gerado um par de chaves. Uma das chaves é a chave
privada, que deve ser guardada em lugar seguro. A outra é a chave pública, que
pode ser disponibilizada a qualquer um. Normalmente elas são publicadas em
sites de organizações confiáveis como Verisign, DigitalID ou Thawte.
O documento é dividido em duas partes: o conteúdo e a assinatura. Para
garantir a autenticidade da origem do documento, José criptografa a assinatura
utilizando sua chave privada. Desta forma, qualquer pessoa poderá, utilizando a
chave pública de José, decriptografar a assinatura e certificar que o documento foi
gerado por José. Nenhuma outra pessoa poderá ter criptografado a assinatura,
senão José.
Para que o conteúdo do documento só seja acessível por Maria, José
criptografa o conteúdo utilizando a chave pública de Maria. Assim, somente
Maria, que contém a chave privada complementar, poderá decriptografar o
conteúdo do documento.
378
Segurança
O software PGP
Utilizando o software pgp, você pode gerar pares de chaves, extrair
chaves, ver chaves, assinar chaves e documentos, criptografar documentos e
verificar chaves, assinaturas e certificados.
Uma sessão típica de geração de um par de chaves de 1024 bits é:
info@thor:~> pgp -kg 1024
Pretty Good Privacy(tm) 2.6.3in - Public-key encryption for the masses.
(c) 1990-96 Philip Zimmermann, Phil’s Pretty Good Software. 2000-10-07
International version - not for use in the USA. Does not use RSAREF.
Current time: 2002/10/31 04:05 GMT
Generating an RSA key with a 1024-bit modulus.
You need a user ID for your public key. The desired form for this
user ID is your name, followed by your E-mail address enclosed in
<angle brackets>, if you have an E-mail address.
Form: Real Name (comment) <email> (options)
Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd
Enter a user ID for your public key:
[email protected]
You need a pass phrase to protect your RSA secret key.
Your pass phrase can be any sentence or phrase and may have many
words, spaces, punctuation, or any other printable characters.
Enter pass phrase:
Enter same pass phrase again:
Note that key generation is a lengthy process.
We need to generate 1120 random bits. This is done by measuring the
time intervals between your keystrokes. Please enter some random text
on your keyboard until you hear the beep:
0 * -Enough, thank you.
.....................................................................
.................................................................****
.........****
Advisory warning: This RSA secret key is not protected by a passphrase.
Just a moment....
Key signature certificate added.
Key generation completed.
info@thor:~> ❏
Você pode ver as chaves utilizando o comando pgp -kvv, assiná-las
utilizando o comando pgp -ks. Assinaturas podem ser removida utilizando o
comando pgp -krs. Chaves podem ser removidas utilizando pgp -kr. Veja mais
opções utilizando pgp -h.
Segurança
379
Clusters e Grids
Para garantir a disponibilidade das informações e serviços e também a
integridade dos dados, pode-se criar um aglomerado de computadores que são
chamados de cluster ou grid. Normalmente dá-se o nome de cluster a um
aglomerado local, e o nome de grid a um aglomerado na Internet ou em outra rede
geográficamente distribuida. O uso de um grid é também conhecido como
computação nas nuvens (cloud computing).
Veja mais detalhes no capítulo Clusters e Grids.
380
Segurança
SAN e NAS
Considerando a estrutura de armazenamento, pode-se optar por uma rede
de armazenamento (SAN - Storage Area Network) e uma arquitetura NAS
(Network Storage Access). Nesta rede podem estar conectados diversos tipos
de dispositivos como discos, CDs ou DVDs, Fitas (DAT, cartucho, streamer,
DLT, LTO, ...) entre outros. Pode-se também utilizar RAID para redundância
e/ou melhoria de desempenho.
A figura abaixo ilustra uma topologia utilizando SAN. Nenhuma estação
ou servidor acessa diretamente os dispositivos de armazenamento. Eles são
acessados pelos servidores através da rede SAN, normalmente usando protocolo
TCP/IP.
Segurança
381
RAID
RAID é a sigla para Redundant Array of Inexpensive Disks ou Redundant
Array of Independent Disks e significa a utilização de discos baratos ou
independentes para obter redundância. O RAID por hardware significa que a
controladora de discos trata o protocolo RAID e disponibiliza para o sistema
operacional o volume como um disco virtual. Disponível geralmente em
controladoras SCSI.
No RAID por software, o
sistema operacional cria o RAID a partir dos discos/partições físicas/lógicas e
apresenta o disco virtual para as aplicações.
Os níveis definidos são
RAID 0 = striping (min. 2 discos)
RAID 1 = mirroring (min.2 discos)
RAID 2 = bit level striping + dedicated hamming parity (min. 3 discos)
RAID 3 = byte level striping + dedicated parity (min. 3 discos)
RAID 4 = block level striping + dedicated parity (min. 3 discos)
RAID 5 = block level striping + distributed parity (min. 3 discos)
RAID 6 = block level striping + double distributed parity (min. 4 discos)
O uso de striping melhora o desempenho e o mirror garante a
redundância. A integridade é verificada usando paridade. No caso de RAID 5 ou
6, com a falha de 1 disco, o sistema continua funcionando normalmente. Após a
substituição do disco, as informações do RAID são reconstruídas.
Pode-se ainda utilizar as combinações RAID 0+1, RAID 1+0 e RAID 5+1.
A escolha da ordem 0+1 ou 1+0 é função da relacão desempenho/confiabilidade.
382
Segurança
Critérios de segurança do DoD
Em dezembro de 1985, o centro nacional de segurança de computadores
NCSC (National Computer Security Center) da agência nacional de segurança
NSA (National Security Agency) criou um conjunto de padrões para o
departamento de defesa americano (Defense Departament, ou simplesmente DoD)
intitulado "Trusted Computer Systems Evaluation Criteria", comumente
conhecido como "Orange Book" (porque foi publicado com uma capa laranja).
Este documento definiu quatro classes de níveis de segurança, com critérios
crescentes:
D
Segurança mínima
C
Proteção facultativa
B
Proteção mandatória
A
Proteção verificada
Os sistemas tradicionais do PC como o DOS e o Windows são classe D. A
classe C contém os subníveis C1 e C2. Na classe C1, os sistemas separam
usuários e seus dados. Sistemas como o UNIX e o Windows NT se classificam na
classe C2 por terem maior controle de acesso e procedimentos mais rígidos de
login e auditoria. A classe B contém os subníveis B1, B2 e B3. Na classe B1
devem ser adicionados labels de sensibilidade à segurança a cada objeto do
sistema. Na classe B2, o sistema deve controlar todos os objetos e nenhuma
informação, incluindo as criptografadas, pode ficar disponível após liberada ao
sistema. Na classe B3, o sistema deve ser totalmente imune a invasões e deve
sinalizar eventos de segurança. A classe A contém um único subnível A1. A
classe A1 é funcionalmente equivalente à B3, mas todos os critérios devem ser
formalmente definidos e documentados.
Apesar de não ter sido formalmente avaliado pelo DoD, o Linux é classe
C2. Para o Linux existe o projeto RSBAC (Rule Set Based Access Control) cujo
objetivo é fazer com que o Linux atenda a especificação no nível B1 do "Orange
Book".
Segurança
383
A classificação definida no Orange Book tornou-se obsoleta
quando, em janeiro de 1996, foram definidos novos critérios de avaliação.
Os Estados Unidos, Inglaterra, Alemanha, França e Canadá desenvolverm
o padrão de avaliação denominado Common Criteria for Information
Technology Security Evaluation - CCITSE, ou simplesmente "Common
Criteria", CC. O CCITSE define os EALs (Evaluation Assurance Levels).
Estes níveis de garantia definem uma escala para medir o critério para a
avaliação de perfis de proteção - PPs (Protection Profiles) e de alvos de
segurança - STs (Security Targets). Eles são construidos a partir de
componentes do . É uma escala uniformemente crescente que equilibra o
nível de segurança obtido com o custo plausível para adquirir aquele nível
de garantia.
Nível
EAL1
EAL2
EAL3
EAL4
EAL5
EAL6
EAL7
Significado
Testado funcionalmente
Testado estruturalmente
Metodicamente testado e verificado
Metodicamente projetado, testado e revisado
Projetado semi-formalmente e testado
Projeto semi-formalmente verificado e testado
Projeto formalmente verificado e testado
EAL4 é o nível mais alto economicamente viável para realimentar uma
linha de produtos.
Os critérios de avaliação fazem parte de um programa de avaliação de
produtos confiáveis (Trusted Product Evaluation Program - TPEP). Mais
informações podem ser obtidas em
http://www.radium.ncsc.mil/tpep/tpep.html
Em fevereiro de 2005, o SuSE Linux Enterprise Server 9 atingiu o nível
EAL4+ em eServer IBM. Foi o sistema Linux a obter esta classificação. O
anúncio pode ser visto em
http://www.atsec.com
384
Segurança
CAPP/EAL4+ security evaluation for SUSE LINUX
AUSTIN, Texas, and MUNICH - 15 February 2005 -- atsec information
security has completed a Common Criteria (CC) evaluation of Novell/SUSE
Linux Enterprise Server 9 (SLES 9) on IBM eServers, which will result in
first-time Evaluation Assurance Level 4+ (EAL4+) certification of the
enterprise operating system platform. The anticipated certification will
enable SLES 9 to be adopted by governments and government agencies for
mission-critical and command-and-control operations, and also reinforces to
the private sector that Linux is a secure, tested platform for essential
enterprise applications.
The first Linux Common Criteria certification (Novell/SUSE Linux
Enterprise Server 8 on the IBM xServer platform) was completed in August
2003 at the EAL2+ level. In the 18 months following initial certification, six
additional evaluations have tested versions of Red Hat Linux and
Novell/SUSE Linux software on a range of IBM and HP hardware platforms
at progressively more secure Common Criteria levels. Gordon McIntosh,
Lab Manager of atsec’s Common Criteria Testing Laboratory in Austin,
Texas, notes, "No other commercial operating system has had security
scrutinized and tested as regularly, on such a large number of hardware
platforms, as Linux."
The scrutiny of Linux will not end with the successful evaluation of SLES 9
on IBM eServers at the EAL4+ level. Vendors continue to demonstrate their
firm commitment to secure operating system platforms by pursuing
Common Criteria certification of new Linux versions on a full range of
current and emerging hardware platforms.
Formal announcement of the successful EAL4+ evaluation completion on
SLES 9 was made at the opening of LinuxWorld in Boston on 15 February
2005.
Segurança
385
Mantendo o sistema seguro
Para garantir sempre a segurança de um sistema de computação, o
administrador deverá sempre atualizar o software que implementa os serviços. Em
especial, ele deve consultar frequentemente os sites dos fornecedores de antivírus, e os sites de anúncios de segurança como o do CERT (Computer
Emergency Response Team) - http://www.cert.org. Lembre-se que os
invasores são frequentemente mais rápidos na atualização que os administradores
de sistemas. Sites já foram atacados em menos de 6 horas após a publicação um
conselho de segurança do CERT!
Há ainda diversos sites de segurança como:
http://www.nsa.org
http://www.rootprompt.org
http://www.linuxsecurity.com
http://www.pulhas.org
http://www.sans.org
Além de diversas listas de discussão sobre segurança. Você pode se
subscrever na lista de segurança do SuSE Linux através de um e-mail para:
[email protected]
O YaST Online Update (ou simplesmente YOU) pode ser utilizado para
manter atualizados os pacotes do SuSE Linux.
Para reportar furos de segurança no SuSE Linux utilize o e-mail
[email protected]
386
Gerência de Redes em Linux
11. Gerência de Redes
em Linux
O profissional encarregado de gerenciar um servidor Linux, ou mesmo um
rede de computadores (sistema de computação), tem a principal tarefa de manter a
funcionalidade, eficiência e eficácia de todos os processos e entidades envolvidas.
Sistema de computação
Um sistema de computação é formado por elementos de hardware, de
software e de pessoas (que denominamos peopleware).
O hardware é formado por peças físicas como gabinetes, placas,
processadores, memórias, dispositivos de armazenamento (discos, fitas, CDs,
disquetes, ...), dispositivos de entrada e saída (monitores, teclados, mice, tablets,
impressoras, scanners, ...) e dispositivos de comunicação (placas de rede,
modems, hubs, switches, roteadores, rádios, antenas, ...).
O software compreende programas desde o firmware, o sistema
operacional com os drivers dos dispositivos periféricos, os utilitários e os
aplicativos gerais. O firmware é um software especializado que controla um
determinado dispositivo e normalmente já vem gravado de fábrica em uma
PROM, EPROM ou FLASH, instalada na controladora do dispositivo ou do
barramento que o liga ao conjunto processador.
O peopeware inclui todos os seres humanos envolvidos no sistema de
computação: os fornecedores de equipamentos e software (analistas e
programadores), os técninicos de manutenção de hardware e software, os
gerentes do departamento e os usuários do sistema. A formaçãode cada elemento
e seu comportamento da utilização do sistema influem bastante no modo de
gerenciamento do sistema.
Gerência de Redes em Linux
387
Para se ter um sistema de computação estável e fácil de gerenciar, a tarefa
começa bem antes da aquisição de seus componentes. Devem ser analisadas todas
as funcionalidades desejáveis para o sistema para que a seleção (ou o
desenvolvimento/construção) de seus componentes seja feita de forma adequada.
Desta forma não será adquirido um supercomputador de milhões de dólares para
substituir uma máquina de escrever, ou adquidir um microcomputador bem barato
para ser o servidor de bases de dados de altíssima importância para a entidado.(O
que, guardando as devidas proporções, acontece com muita frequência em
empresas que decidem se informatizar ou automatizar sem a consulta a um
analista ou consultor da área).
Para que o sistema de computação funcione, ele deverá ser escolhido,
instalado e configurado de forma correta. Isto deve ser uma preocupação desde a
fixação mecânica dos componentes de hardware em locais e ambientes físicos
adequados, escolha do ambiente operacional, utilitários e aplicativos, até a
configuração do ambiente operacional, de parâmetros e de bases de dados dos
aplicativos.
Instalação física
Os componentes de hardware de um sistema de
computação normalmetne possuem partes móveis
que, em alguns casos, são bastante sensíveis a
trepidações ou impactos (como os discos e
unidades de CD/DVD). Mesmo o nivelamento de
alguns componentes poderá afetar o seu
desempenho e até mesmo sua funcionalidade.
Cita-se como exemplo alguns discos e plotters. Os
fatores ambientais como temperatura, poluicão e
umidade são igualmente importantes.
388
Gerência de Redes em Linux
Instalação elétrica
Por serem eletrônicos, os componentes de
hardware também dependem da boa
qualidade do sistema elétrico que os
alimenta. Deve ser analisada a carga a ser
instalada (medida em VA - Volt-Ampère),
o cabeamento elétrico, as tomadas, os
disjuntores, estabilizadores, short-breaks,
no-breaks, e também o sistema de
aterramento da instalação. Uma instalação
elétrica inadequada frequentemente é causa
de falhas no software por erros de hardware (interpretação errônea de instruções
pelos processadores ou alteração de dados em memória ou dispositivos de
armazenamento) que podem resultar em alteração ou mesmo perda de
informações muitas vezes valiosas.
Os componentes eletrônicos, além de dissiparem muito calor, foram
projetados para funcionar a uma determinada faixa de temperaturas. Para evitar
erros eletrônicos, deve-se tentar manter uma temperatura constante. Por razões
físicas, é mais fácil manter uma temperatura ambiental baixa constante (entre 17 a
28 graus) do que manter uma temperatura alta constante. Daí o motivo de termos
ambientes refrigerados (o famoso ar condicionado) em salas com computadores
(principalmente servidores que devem ter alta disponibilidade).
Água e outros agentes químicos podem danificar componentes do
hardware e meios de armazenamento (incluindo listagens em papel).
Gases ácidos expelidos por baterias de no-breaks além de nocivos à
saúde podem corroer componentes e cabeamentos. Poeira, fumaça e
outras formas poluentes devem também ser evitadas. Uma atenção
especial deve ser dada a equipamentos que precisam ser instalados em áreas
externas ou em áreas sem supervisão humana constante (como centrais de
supervisão sem operadores).
Gerência de Redes em Linux
389
Medidas de segurança incluem a proteção física e equipamentos
como extintores (que devem ser do tipo adequado à extinção de
incêndio em equipamentos elétricos e outros materiais existentes nos
ambientes computacionais)
Topologia
Topologia é o estudo da localização e interconexão dos componentes do
sistema. Em sistemas de computação, ela define a forma em que os componentes
estão conectados, como os barramentos que interligam os componentes internos
de um computador e seus periféricos e as formas de conexão de redes. Os
elementos de rede e a forma que eles são interligados também geram entidades
foco de atenção para o gerente. Os pontos de conexão são frequentes causas de
problemas envolvendo desempenho, disponibilidade e segurança.
As topologias básicas de redes são: barramento, anel, estrela
e broadcast. No barramento, todos os nodos compartilham no
tempo, um meio físico de uso exclusivo. Isto é, apenas um nodo
pode estar transmitindo uma informação que é recebida por todos os
outros. No anel, os nodos formam uma cadeia na qual a informação circula até
chegar ao nodo de destino. Na estrela há um nodo central ao qual os outros nodos
são ligados. Assim, toda informação deve passar pelo nodo central. O broadcast
utiliza um meio comum compartilhado onde a informação não é
endereçada especificamente a um nodo, mas simplesmente jogada no
meio de transmissão. Exemplos típicos de broadcast são redes de
rádio e TV.
390
Gerência de Redes em Linux
Funcionalidades
Além dos componentes do computador (processador, memória, discos, ...),
e das interfaces de rede (placas ethernet, seriais, USB, ...), há ainda diversos
dispositivos para compor uma rede.
Modems são componentes que fazem a conversão de sinais
ou de protocolos de enlace. A palavra vem de
modulador/demodulador. Existem os modems para conexão discada
a provedores que normalmente são assíncronos e atingem até
56Kbps em linhas telefônicas normais. Modems equivalentes para linhas privadas
são normalmente síncronos e possuem uma ampla faixa de velocidades. Há aindas
os modems ISDN (tipicamente 64 ou 128Kbps) e ADSL (tipicamente 256 ou
512Kbps, mas que podem atingir até 8Mbps).
Hubs são equipamentos que permitem a conexão de diversos segmentos
de rede e fazem a retransmissão entre estes segmentos de forma passiva. O dado
que chega em uma porta é retransmitido para todas as outras. Os mais comuns são
os hubs para redes TP utilizando cabos CAT5, CAT5e ou CAT6. Normalmente
trabalham em 10 ou 100 Mbps.
Switches são equipamentos semelhante aos hubs mas que identificam os
nodos pelos seu endereço MAC e somente transmitem o dado para a porta onde
foi identificado o endereço MAC do nodo de destino. Também trabalham
tipicamente em 10 ou 100 Mbps.
Roteadores são equipamentos mais sofisticados que passam pacotes de
uma rede para outra. Normalmente trabalham no nível da camada de rede e
suportam o IP e o IPX. Existem ainda roteadores que permitem filtro através de
parâmetros das camandas de transporte e aplicação. Trabalham em uma ampla
faixa de velocidades. São altamentes configuráveis e gerenciaveis através de
protocolos como o SNMP e o HTTP.
Bridges são equipamentos que fazem tradução de protocolos. Eles podem
reencapsular um protocolo utilizando qualquer tipo de rede ou enlace.
Gerência de Redes em Linux
391
Gerenciamento
A ISO - International Standards Organization - define 5
áreas funcionais para o gerenciamento de redes no modelo OSI Open Systems Interconnection, conhecidas como áreas funcionais
específicas de gerenciamento (OSI - Specific Management Function
Areas). Estas áreas são:
Gerenciamento de falhas
Responsável pela localização de problemas ou falhas na rede ou em
seus elementos, envolvendo a descoberta, o isolamento e a resolução
do problema.
Gerenciamento de Configuração
Processo responsável por identificar e configurar dispositivos
críticos que controlam o comportamento da rede. Inclui, além disso,
o provisionamento (instalação e disponibilização) de recursos e
serviços.
Gerenciamento de Segurança
Responsável pelo controle de acesso à informação e aos dispositivos
da rede, protegendo-os de abusos intencionais ou acidentais.
Gerenciamento de Desempenho
Endereça os processos que garantem a utilização mais eficiente dos
recursos da rede e sua habilidade para atingir os objetivos do nível
de serviço, envolvendo a medição do desempenho de software,
hardware e meios de comunicação da rede.
Gerenciamento de Contabilização
É a area que processa e manipula os registros de utilização de
recursos e serviços.
392
Gerência de Redes em Linux
O gerenciamento de um sistema de computação deve garantir os seguintes
aspectos:
Integridade
O sistema deverá se manter intacto, sem defeitos ou
falhas, sejam pelo tempo de uso, seja pela violação
física ou lógica. Verificações periódicas no estado
dos componentes e nos ítens de proteção são muito
importantes.
Disponibilidade
O sistema deve ter o maior tempo de
disponibilidade para utilização. Deve ser
minimizado o tempo para atualizações ou reparos.A
qualidade dos componentes e dos ítens de proteção
são fatores decisivos para alcançar este objetivo.
Confiabilidade
Todos os componentes do sistema dever estar
funcionando corretamente. Nenhum procedimento
ou informação poderá ser maliciosamente alterado.
Rotinas de diagnóstico devem ser realizadas para
que isto seja conseguido.
Privacidade
Dados, procedimentos e informações só devem ser
disponibilizadas quando e para quem ou o que for
necessário.
Os quatro aspectos acima estão diretamente relacionados com a segurança
do sistema. Um ataque que reduz o desempenho de um sistema (por exemplo,
através sobrecarga de serviços - Denial of Services ou DoS) está comprometendo
diretamente a disponibilidade do sistema. Um virus pode comprometer a
integridade e a confiabilidade do sistema, e em alguns casos, a privacidade das
informações (quando, por exemplo, envia documentos contidos em discos locais
por e-mail ou ftp para outros sites).
Gerência de Redes em Linux
393
Mesmo um usuário comum pode comprometer qualquer aspecto do
sistema, da mesma forma que um hardware ou software com defeitos o fazem.
Uma utilização errada ou maliciosa do sistema tem efeito igualmente devastador
em todos os aspectos. Um ponto comum de falha de segurança é a senha dos
usuários. Senhas fáceis podem ser descobertas por outros e assim serem utilizadas
para a invasão e utilização não autorizada (e na maioria maliciosa) do sistema.
Entidades a gerenciar e atribuições do gerente
Qualquer entidade que compõe um sistema é passível de gerenciamento. O
gerenciamento envolve desde o controle de qualidade do hardware e do software
até o controle dos usuários. A função do gerente é controlar a utilização destas
entidades que, como em sistemas operacionais, denominamos recursos. Alguns
recursos somente fornecem informações e não possuem parâmetros ajustáveis.
Outros são parametrizáveis e possuem mecanismos para que se ajustem à meta de
qualidade de serviço do sistema.
O gerente deve definir quem, quando, o que e quanto será alocado. Ele
deve avaliar, por exemplo, quando e se é necessário um upgrade ou substituição
de um hardware ou software para solucionar problemas relacionados ao
desempenho ou segurança do sistema. Para isto ele tem o auxílio de diversas
metodologias e parâmetros que podem ser ajustados para atingir suas metas.
Um sistema de computação, ou conjunto de sistemas de computação,
deverá ser dividido em subsistemas que terão suas entidades individuais a serem
gerenciadas. O desempenho total será então avaliado pelo comportamento de cada
subsistema. Por exemplo, em uma rede de computadores definimos as entidades
de cada computador e dos elementos de conexão.
394
Gerência de Redes em Linux
Em um computador identificamos seus componentes de hardware e
de software como também suas funções na rede. São medidos o
uso do(s) processador(es), o uso da memória, o uso do espaço em
disco, as taxas de transferência entre os dispositivos e o
desempenho de cada software nele em execução. São ainda verificados os
diversos aspectos da segurança (física e lógica), como usuários e
suas senhas, processos em execução, serviços disponíveis (portos
abertos), acesso físico, sessões abertas, conectividade externa
(modems, links de comunicação, ...), programas, arquivos e
documentos disponíveis.
No subsistema de rede, identificamos todos os pontos de conexão, os
equipamentos de conexão e o cabeamento. Além da integridade e desempenho de
cada entidade, verificamos também os aspectos de segurança física e lógica.
Pontos de rede em locais de acesso público podem se tornar uma entrada fácil
para invasores. Equipamentos gerenciáveis como os roteadores devem ter suas
configurações analisadas e, se necessário, reconfiguradas para melhorar o
desempenho e a segurança.
Os serviços em execução também possuem parâmetros que afetam o
desempenho e a segurança, como a quantidade de memória e disco utilizáveis,
número de conexões simultâneas, tamanhos de pacotes, interfaces por onde as
requisições podem ser atendidas, identificação de usuários, máquinas e domínios
que podem utilizar o serviço, etc.
Diversos serviços geram relatórios de acesso que podem ser utilizados
pelo gerente para avaliar o seu funcionamento e, se necessário, adequar os
parâmetros para atingir a meta de desempenho. Por exemplo, o apache - servidor
HTTP padrão do Linux - gera logs de acesso e erro que podem ser analisados pelo
webalizer informando as páginas acessadas, os arquivos transferidos, o número
de bytes e a origem das requisições, além dos erros de acesso (como páginas ou
objetos não encontrados). O squid - servidor proxy padrão do Linux - também
gera logs que podem ser analisados pelo calamaris e informa, por exemplo, que
objetos foram obtidos em memória, disco ou diretamente do site destino e por
qual origem.
Gerência de Redes em Linux
395
Protocolos e métodos de gerenciamento
De qualquer sistema podemos obter alguns medidores de
desempenho:
MTTF
Mean Time To Failure: é o tempo médio para o defeito
inicial. É também uma medida da garantia ou da validade
do componente até a necessidade de uma revisão
(preventiva ou corretiva) ou de uma atualização.
MTBF
Mean Time Between Failures:é o tempo médio entre falhas.
É uma medida da qualidade do componente. Este tempo
pode reduzir com o tempo de uso (idade) do componente.
Em alguns componentes, como no software, há um período
quando este tempo torna-se bem grande, e alguns casos até
infinito. É o período de estabilidade do componente.
MTTR
Mean Time To Recover ou Mean Time To Repair: é o
tempo médio para consertar o componente falho. Deve ser
minimizado em componentes críticos que afetam todo o
sistema. Isto é conseguido utilizando a redundância
Dependendo do grau de criticidade na falha do
componente, pode ser utilizada até redundância tripla ou
quádrupla.
Medindo-se cada taxa de falhas FRi obtemos:
MTBF =
1
∑FRi
i
e a disponibilidade do sistema é:
A=
MTBF
MTBF + MTTR
396
Gerência de Redes em Linux
Em um sistema de computação podem ser consideradas as falhas de
leitura ou escrita em dispositivos de armazenamento ou de entrada e saída, as
falhas de comunicação por indisponibilidade ou erro dos componentes. Os erros
de comunicação (como perdas de pacotes ou erros de CRC) irão causar
retransmissões que causarão grande impacto no desempenho do subsistema de
comunicação e ainda na disponibilidade de serviços do sistema (como, por
exemplo, em servidores HTTP acessíveis através de placas de rede, hubs,
switches ou roteadores falhos).
Alguns equipamentos são gerenciados através de uma abertura de sessão
para acesso a aplicativos de monitoração ou configuração. A grande maioria deles
possuem acesso através do protocolo telnet. Este protocolo é inseguro por trafegar
informações em sua forma não criptografada que podem ser observadas (e às
vezer modificadas) por "escutas" em ataques denominados "man in the middle".
Deve ser tomado o cuidado com os usuários e senhas cadastradas nestes
equipamentos e com os acessos a eles, principalmente através de conexões
públicas (modems e conexões com a Internet, por exemplo). Estão se tornando
muito comuns os equipamentos configuráveis e gerenciaveis utilizando
navegadores web, através de protocolo HTTP. Quando possível deverá ser
configurados acessos utilizando SSL - secure socket layer, como o SSH e o
HTTPS. Assim as informações trafegarão na forma criptografada e autenticada e
serão lixo para as "escutas"..
O TCP/IP possui ainda protocolos de gerenciamento como:
ICMP
Internet Control Message Protocol: utilizado para reportar
o estado e erros de roteamento de datagramas. Obtemos
com ele informações importantes sobre a capacidade de
alcance a um destino, roteamento e tráfego. O protocolo
ICMP é descrito no RFC 792.
IGMP
Internet Group Multicast Protocol: utilizado no controle de
multicast cujo propósito é o envio de um pacote a mais de
um destino.
Gerência de Redes em Linux
397
O TCP/IP possui ainda seviços como:
BGP
Border Gateway Protocol: Descrito no RFC 1771.
OSPF
Open Shortest Path First: O OSPF versão 2 é descrito no
RFC 1583.
SNMP
Simple Network Management Protocol: protocolo simples
de gerenciamento de redes baseado na filosofia fetch/store
para a busca de informações e configuração de
equipamentos. As informações são descritas na MIB do
equipamento. A MIB é descrita no RFC 1066 e o protocolo
SNMP é descrito no RFC 1157.
SNMP e MIB
A MIB - Management Information Base - descreve variáveis para o
gerenciamento de uma entidade utilizando o protocolo SNMP. A documentação
de uma MIB é descrita em ASN.1 - Abstract Syntax Notation 1 - uma linguagem
formal definida pela ISO com o objetivo da exatidão. A definição de uma variável
utilizando a notação ASN.1 não pemite ambiguidades em seu significado ou
representação. Como não há necessidade de interpretação, ela pode ser tratada
diretamente pelos programas nos equipamentos.
Uma variável na MIB pertence a um namespace. Os namespaces da
Internet são administrados pela ISO o que garante uma identificacão única
mundial para um objeto. Os objetos são identificados de forma hierárquica. Nesta
árvore, o namespace é chamado nodo. Existem nodos abrangentes definidos pela
ISO que delega a administração de sub-árvores específicas a outras entidades:
ISO ----- País -+---------- Alemanha
+---------- Brasil
+---------- China
+---------- ...
+---------- Zâmbia
398
Gerência de Redes em Linux
A Internet está na seguinte sub-árvore (que mostra o identificador
numérico do nodo entre parentesis):
iso (1) ---- org (3) ----- dod (6) --- internet (1)
A MIB está na seguinte sub-árvore:
internet (1) -+----- dir (1)
+----- mgmt (2) ---- mib-2 (1) +--- system(1)
|
+--- interfaces(2)
|
+--- at (3)
|
+--- ip (4)
|
+--- icmp (5)
|
+--- tcp (6)
|
+--- udp (7)
|
+--- snmp (8)
+---- exp (3)
+---- pri (4)
Assim, uma variável pode ser obtida pelo seu identificador numérico ou
textual. Por exemplo, a variável
iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0
tem a representação numérica
.1.3.6.1.2.1.1.1.0
Gerência de Redes em Linux
399
Um exemplo de definição da MIB public em ASN.1 pode ser encontrada
no Linux em /usr/share/mibs/ietf/RFC1158-MIB. Abaixo vemos a
definição das 2 primeiras variáveis , system.sysDescr.0 e system.sysObjectID.0:
RFC1158-MIB DEFINITIONS ::= BEGIN
IMPORTS
mgmt, OBJECT-TYPE, NetworkAddress, IpAddress,
Counter, Gauge, TimeTicks
FROM RFC1155-SMI;
DisplayString ::=
OCTET STRING
mib-2
OBJECT IDENTIFIER ::= { mgmt 1 }
-- (same prefix as MIB-I)
-- MIB-II
system OBJECT IDENTIFIER ::= { mib-2 1 }
interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
at
OBJECT IDENTIFIER ::= { mib-2 3 }
ip
OBJECT IDENTIFIER ::= { mib-2 4 }
icmp
OBJECT IDENTIFIER ::= { mib-2 5 }
tcp
OBJECT IDENTIFIER ::= { mib-2 6 }
udp
OBJECT IDENTIFIER ::= { mib-2 7 }
egp
OBJECT IDENTIFIER ::= { mib-2 8 }
-- cmot OBJECT IDENTIFIER ::= { mib-2 9 }
transmission OBJECT IDENTIFIER ::= { mib-2 10 }
snmp
OBJECT IDENTIFIER ::= { mib-2 11 }
-- object types
-- the System group
sysDescr OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-only
STATUS mandatory
::= { system 1 }
sysObjectID OBJECT-TYPE
SYNTAX OBJECT IDENTIFIER
ACCESS read-only
STATUS mandatory
::= { system 2 }
...
END
400
Gerência de Redes em Linux
Aplicativos SNMP
Para a utilização do protocolo SNMP sem a necessidade de
desenvolver aplicativos utilizando a API, diversos sistemas
operacionais (principalmente os UNIX-like) disponibilizam
utilitários para gerenciar elementos de redes.
Para o Linux há, por exemplo, o pacote ucdsnmp que inclui o servidor
snmpd, bibliotecas e interfaces para desenvolvimento de aplicativos SNMP e
diversos utilitários. Entre estes utilitários estão:
snmpget
snmpset
snmpstatus
snmpwalk
snmptable
snmpnetstat
snmptest
snmptranslate
snmptrap,
snmpinform
snmpdelta
obtém valores de variáveis da base MIB a partir da
identificação do objeto (objetcID) utilizando o método
GET do SNMP.
atribui valores a variáveis da base MIB utilizando o
método SET do SNMP.
obtém informações sobre uma entidade de rede.
obtém variáveis da base MIB utilizando o método
NEXT do SNMP.
obtém e imprime uma tabela SNMP.
obtém informacões sobre a rede usando o SNMP.
gerencia a base MIB. Inicialmente utiliza método GET.
Com os comandos $G, $S e $N o método pode ser
alterado para GET, SET e NEXT, respectivamente.
traduz objetos SNMP em informações mais úteis.
envia um trap para um gerente SNMP.
monitora alterações de valores inteiros de variáveis da
base MIB.
Gerência de Redes em Linux
401
Assim, para ver a definicão da sub-árvore system podemos utilizar o
comando snmptranslate, como a seguir:
hmarx@thor:~> snmptranslate -Tp -OS .iso.org.dod.internet.mgmt.mib-2.system
+--system(1)
|
+-- -R-- String
sysDescr(1)
|
Textual Convention: DisplayString
|
Size: 0..255
+-- -R-- ObjID
sysObjectID(2)
+-- -R-- TimeTicks sysUpTime(3)
+-- -RW- String
sysContact(4)
|
Textual Convention: DisplayString
|
Size: 0..255
+-- -RW- String
sysName(5)
|
Textual Convention: DisplayString
|
Size: 0..255
+-- -RW- String
sysLocation(6)
|
Textual Convention: DisplayString
|
Size: 0..255
+-- -R-- INTEGER
sysServices(7)
|
Range: 0..127
+-- -R-- TimeTicks sysORLastChange(8)
|
Textual Convention: TimeStamp
|
+--sysORTable(9)
|
+--sysOREntry(1)
| Index: sysORIndex
|
+-- ---- INTEGER
sysORIndex(1)
|
Range: 1..2147483647
+-- -R-- ObjID
sysORID(2)
+-- -R-- String
sysORDescr(3)
|
Textual Convention: DisplayString
|
Size: 0..255
+-- -R-- TimeTicks sysORUpTime(4)
Textual Convention: TimeStamp
hmarx@thor:~>
o
402
Gerência de Redes em Linux
Por exemplo, utilizando os utilitário snmpwalk em uma máquina
chamada thor, podemos obter, por exemplo, as primeiras 8 variáveis definidas na
comunidade public da MIB de uma máquina eagle:
hmarx@thor:~> snmpwalk eagle public | head -8
system.sysDescr.0 = Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002
i686
system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linux
system.sysUpTime.0 = Timeticks: (7868) 0:0
system.sysContact.0 = Sysadmin (root@localhost)
system.sysName.0 = eagle
system.sysLocation.0 = Server Room
system.sysORLastChange.0 = Timeticks: (5) 0:0
system.sysORTable.sysOREntry.sysORID.1 = OID: ifMIB
hmarx@thor: ~> snmpget eagle public system.sysName.0
system.sysName.0 = eagle
hmarx@thor: > snmpstatus eagle public
[192.168.200.5]=>[Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002 i686]
Up: 0:0
Interfaces: 0, Recv/Trans packets: 17830/17830 | IP: 17926/20383
hmarx@thor:~> snmptest eagle public
Variable: system.sysDescr.0
Variable: system.sysName.0
Variable:
Received Get Response from 192.168.200.5
requestid 0x370E3B1A errstat 0x0 errindex 0x0
system.sysDescr.0 = Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002 i686
system.sysName.0 = eagle
Variable: ^DQuitting, Goobye
hmarx@thor:~> r
o
Gerência de Redes em Linux
403
Firewalls como ferramentas de gerenciamento
Uma das ferramentas mais utilizadas para o gerenciamento
de serviços em redes é o firewall. Além de prover a segurança da
rede, incluindo os aspectos de desempenho através de controle de
banda e priorização por tipo de serviço (QoS), o firewall também
é utilizado para análise de tráfego. Ele gera logs contendo informações sobre os
pacotes com sua origem, destino, protocolo, porto, tamanho e a política aplicada
ao pacote (ACCEPT, DROP, DENY, REDIRECT, MASQ, FORWARD, ...).
O firewall utiliza filtros de pacotes a partir das diversas informações do
pacote. Para sua configuração, deve-se conhecer as diversas camadas envolvidas
(enlace, rede, transporte e aplicação), seus respectivos protocolos e portos, em
cada interface de rede do equipamento firewall.
A partir dos logs é possível identificar possíveis tentativas de invasão e
analisar o desempenho do firewall. Como visto no capítulo 10, no Linux (kernel
2.4.x ou superior) é utilizado o software iptables que manipula tabelas de filtros
de pacotes do kernel.
Outros aplicativos
Os gerentes e analistas de desempenho de rede utilizam ainda diversos
aplicativos. Alguns deles são igualmente utilizados por hackers e crackers para
identificar os pontos vulneráveis e furos de segurança dos sistemas de
computação.
Os mais conhecidos são os sniffers e os port scanners. Os sniffers são
utilizados para capturar as informações que trafegam pela rede. Programas como
tcpdump, snort e ethereal disponíveis no Linux capturam e exibem os pacotes
identificando suas diversas partes. Podem ser utilizados filtros para selecionar os
valores dos diversos campos dos pacotes. Os port scanners são aplicativos que
tentam detectar os portos abertos em um sistema de computação. O nmap é um
dos mais utilizados. Os utilitários socklist e rpcinfo podem ser utilizados para
identificar os processos associados a portos abertos em um sistema. Há ainda o
icmpinfo que interpreta as mensagens ICMP recebidas pela máquina local.
404
Gerência de Redes em Linux
Ferramentas básicas como o ping, arp, rarp podem ser utilizadas para
identificar os endereços das máquinas em uma rede e seu alcance. Há ainda o
bing (bandwidth ping) que mede a banda entre dois equipamentos utilizando
pacotes de dois tamanhos.
Para controlar o acesso a serviços é utilizado o tcpd. Ele pode monitorar
os acessos a serviços como telnet, ftp, pop3, smtp, rlogin, finger, rsh, registrar o
acesso e, de acordo com sua configuração, executar o programa servidor
apropriado. Normalmente estes serviços são configurados no arquivo
/etc/inetd.conf. O processo inetd receberá a conexão no porto
especificado e executará o processo correspondente. O processo é definido como
tcpd que recebe o nome do processo servidor como argumento. Se os arquivos
/etc/hosts.allow e /etc/hosts.deny permitirem a conexão, o tcpd
dispara o servidor, repassando a conexão.
Um serviço típico do inetd é o protocolo POP3, e no arquivo
/etc/inetd.conf podemos ver a seguinte linha:
pop3 stream tcp
nowait root /usr/sbin/tcpd /usr/sbin/popper -s
que indica que o programa /usr/sbin/tcpd será disparado quando houver
um acesso ao porto pop3 pelo socket stream do protocolo tcp com usuário root. O
tcpd, após registrar e verificar a segurança, irá disparar o servidor
/usr/sbin/popper passando o argumento -s.
Gerência de Redes em Linux
405
Utilizando o xinetd, o arquivo /etc/xinetd.d/qpopper contém as
mesmas informações em um formato mais estruturado:
service pop3
{
disable
= no
socket_type = stream
protocol
= tcp
wait
= no
user
= root
server
= /usr/sbin/popper
server_args = -s
#server_args = -s -l1 -p2 -f /etc/mail/certs/qpop.conf
flags
= IPv4
}
Os portos de serviços, como o de nome pop3 (110), são definidos em
/etc/services.
A geração de logs é configurada normalmente para utilizar o syslogd que
é configurado em /etc/syslog.conf. Neste arquivo são definidos como e
onde as mensagens serão registradas (em um arquivo, em um terminal, ou
enviadas para um usuário logado ou mesmo para um servidor remoto). No Linux,
a maioria dos arquivos de log se encontra no diretório /var/log. O bom
administrador deve verificar com frequência estes arquivos (e demais arquivos de
log de cada serviço configurado) para identificar possíveis falhas. Eventos críticos
podem ainda ser tratados automaticamente por aplicativos específicos, gerando,
por exemplo, mensagens SMS (por exemplo, pagers e celulares) para equipes de
suporte, ou redisparando serviços.
Podem ainda serem geradas páginas WEB com relatórios e gráficos
derivados destes logs. Por motivo de segurança (principalmente inferência), tais
páginas devem ter acesso controlado através de usuário e senha e ser acessível
através de protocolo HTTPS. Em alguns casos somente acessíveis de algumas
máquinas específicas.
406
Gerência de Redes em Linux
São disponíveis para o ambiente GNU/Linux diversos sistemas para
monitoramento e gerenciamento dos recursos de redes. Os mais comuns são o
mon, o monit e o Nagios.
Gerência de Redes em Linux
407
408
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
12. Ambiente de
Execução e
Desenvolvimento de
Aplicativos em Linux
Desde sua criação, a plataforma Unix definiu um padrão de chamadas às
funções do sistema operacional através de um conjunto de bibliotecas. Estas
bibliotecas, como também quase todos os sistemas Unix-like e seus aplicativos,
foram escritas na linguagem C.
A linguagem C foi definida por Brian Kernigham e Dennis Ritchie em
1978. Nesta mesma época, o Unix foi traduzido da linguagem de montagem do
DEC PDP-7 para ela. Na criação do padrão Unix System V, pela AT&T, no
documento SVID (System V Interface Definition), foram definidas as funções,
suas interfaces e comportamento. Assim, qualquer programa que fosse escrito
utilizando este padrão poderia ser facilmente portado para outro Unix e mesmo
para outra arquitetura que suportasse o Unix. Bastava a recompilação dos fontes
para a geração do código executável na nova plataforma.
O projeto GNU criou então o compilador gcc, e o Linux utiliza este
compilador como padrão. O gcc é considerado o melhor compilador existente. Ele
utiliza o conceito de linguagens de máquinas virtuais hierárquicas. O programa na
linguagem C/C++ é compilado para uma linguagem de máquina virtual Linux. O
código produzido é otimizado, e então traduzido para a linguagem de máquina
alvo (Intel, M68K, S390, etc). Este código pode ser então otimizado de acordo
com a arquitetura do processador alvo, gerando o código objeto final.
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
409
Diversos compiladores para outras linguagens, disponíveis para o Linux,
utilizam a estrutura do gcc. Alguns compiladores até fazem uma tradução para a
linguagem C e utilizam o próprio gcc para a geração do código final. Os portes
iniciais do Pascal (p2c) e do Fortran (f2c) para o Linux seguiram esta filosofia.
As versões atuais já compilam diretamente para a linguagem da máquina virtual
Linux.
Para o desenvolvimento de aplicativos em modo gráfico há o KDevelop.
Ele é um ambiente integrado com muitas características semelhantes ao Microsoft
Visual Studio e ao Borland Delphi. Ele utiliza as ferramentas GNU para a
compilação, linkedição e depuração. Para o desenho da interface gráfica são
utilizados a QtLib e o QtDesigner da TrollTech.
410
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Um programa executável não é um código monolítico auto-contido. Ele
utiliza diversas funções contidas em bibliotecas já existentes no Linux ou em
pacotes adicionais (bibliotecas gráficas, multimedia, comunicação, bancos de
dados, etc). A linguagem C possui até uma biblioteca chamada de Standard C
Library (biblioteca C padrão). Ela contém funções definidas pela máquina virtual
Unix e está disponível em todos os sistemas Unix-like e todos os sistemas que
possuem um compilador de C.
Na geração do código executável para um determinado tipo de
processador, o desenvolvedor pode optar por utilizar linkedição estática ou
dinâmica. Na linkedição estática, todas as funções utilizadas pelo programa são
colocadas no arquivo que contém o código executável. Assim, o programa
funcionará em qualquer instalação do Linux em máquinas com o mesmo tipo de
processador (i386, MIPS, ARM, 390, ...). Deve-se observar que o formato do
arquivo executável pode também variar e deve ser suportado pelo kernel Linux
instalado.
Na linkedição dinâmica, o arquivo executável contém apenas as chamadas
a pontos de entrada para as bibliotecas compartilhadas (shared libraries). Este
conceito é o equivalente às DLLs (Dynamic Linked Libraries) da plataforma
Windows. O arquivo executável ficará menor porque apenas contém chamadas
para os pontos de entrada das funções das bibliotecas. Utilizando o ldd, pode-se
ver a dependência e a versão das bibliotecas compartilhadas utilizadas pelo
programa:
hmarx@thor ~> ldd /usr/bin/gcc
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7555000)
/lib/ld-linux.so.2 (0xb76ed000)
hmarx@thor ~> ❏
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
411
Para a depuração de programas pode ser utilizado o GNU debugger, gdb.
Ele pode ser utilizado para executar um programa passo a passo, examinar
variáveis e registradores, estabelecer condições para a interrupção da execução
em pontos para a depuração e também alterar valores durante a execução. Ele
permite também iniciar a depuração de um programa que já estava em execução
através de seu comando attach. Existem interfaces gráficas como front end para o
gdb, tais como o ddd, o kdbg e o módulo de depuração do kdevelop.
Outros aplicativos úteis na depuração de programas e auditoria de uso de
recursos do sistema são:
Aplicativo
lsof
Descrição
Lista arquivos abertos pelos processos
fuser
socklist
Identifica processos utilizando os arquivos e sockets. Permite
o envio de sinal para eles.
Exibe os sockets abertos e os portos associados
rpcinfo
Exibe informações sobre RPC (Remote Procedure Call)
ipcs
Exibe informações sobre IPC (Interprocess Communication)
strace
Exibe as chamadas de sistema e sinais na execucão de um
programa
Exibe as chamadas a bibliotecas dinâmicas na execucão de
um programa
ltrace
412
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Os aplicativos strace e ltrace, além das opções, recebem como argumento
o programa a ser executado.
hmarx@venus:~> ltrace ./hello
__libc_start_main(0x8048454, 1, 0xbfd42424, 0x8048490, 0x8048480 <unfinished
...>
puts("Hello world!"Hello world!
)
= 13
exit(0 <unfinished ...>
+++ exited (status 0) +++
hmarx@venus:~>❏
hmarx@venus:~> strace ./hello
execve("./hello", ["./hello"], [/* 111 vars */]) = 0
brk(0)
= 0x804b000
access("/etc/ld.so.preload", R_OK)
= -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY)
= 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=240452, ...}) = 0
mmap2(NULL, 240452, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7899000
close(3)
= 0
open("/lib/libc.so.6", O_RDONLY)
= 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 l\1\0004\0\0\0"...,
512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1430104, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7898000
mmap2(NULL, 1440072, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb7738000
fadvise64(3, 0, 1440072, POSIX_FADV_WILLNEED) = 0
mprotect(0xb7891000, 4096, PROT_NONE)
= 0
mmap2(0xb7892000, 12288, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x159) = 0xb7892000
mmap2(0xb7895000, 10568, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7895000
close(3)
= 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7737000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb77376c0, limit:1048575,
seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1,
seg_not_present:0, useable:1}) = 0
mprotect(0xb7892000, 8192, PROT_READ)
= 0
mprotect(0x8049000, 4096, PROT_READ)
= 0
mprotect(0xb78f2000, 4096, PROT_READ)
= 0
munmap(0xb7899000, 240452)
= 0
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 14), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb78d3000
write(1, "Hello world!\n", 13Hello world!
)
= 13
exit_group(0)
= ?
hmarx@venus:~> ❏
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
413
Alguns exemplos:
thor:~ # lsof /var/log/{mail,warn,messages}
COMMAND PID USER
FD
TYPE DEVICE
SIZE
syslogd 361 root
4w
REG
3,65 219397
syslogd 361 root
8w
REG
3,65 455344
syslogd 361 root
9w
REG
3,65 455344
syslogd 361 root
10w
REG
3,65 3405056
thor:~ # ❏
NODE
580836
583175
583175
580834
NAME
/var/log/mail
/var/log/warn
/var/log/warn
/var/log/messages
thor:~ # fuser -uv /dev/pts/5
USER
PID ACCESS COMMAND
/dev/pts/5: hmarx
15186 F.... (hmarx)tail
hmarx
16126 F.... (hmarx)konsole
hmarx
16160 F.... (hmarx)bash
thor:~ # ❏
thor:~ # rpcinfo -p
program vers proto
100000
2
tcp
100000
2
udp
100005
1
udp
100005
2
udp
100005
1
tcp
100005
2
tcp
100003
2
udp
100003
2
tcp
thor:~ # ❏
port
111
111
860
860
863
863
2049
2049
portmapper
portmapper
mountd
mountd
mountd
mountd
nfs
nfs
thor:~ # ipcs -a
------ Shared Memory Segments -------key
shmid
owner
perms
0x5b410ec3 0
root
644
0x00000000 73531393
hmarx
777
bytes
1048576
196608
------ Semaphore Arrays -------key
semid
owner
perms
0x5b410ec5 0
root
666
nsems
14
------ Message Queues -------key
msqid
owner
thor:~ # ❏
perms
used-bytes
nattch
1
2
status
dest
status
messages
414
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Formato de arquivos executáveis
O formato de executável padrão do Linux é o ELF - Executable and
Linkable Format. Até o kernel 2.4, o Linux suportava diversos fomatos de
executáveis. Além do ELF, o Linux suportava o antigo A.OUT e binários de
outras plataformas, como o Intel COFF (Common Object File Format), X.OUT,
SCO ISC, UnixWare 7, Solaris e Wyse V/386. O suporte a estes formatos era
normalmente feito através de módulos carregáveis do kernel. A partir do kernel
2.6, o único formato suportado é o ELF.
O Linux pode também executar aplicativos DOS (.COM e .EXE) através
do dosemu, ou aplicativos Windows através do wine ou do wabi da Caldera.
O dosemu e o wine não são realmente emuladores. Eles criam uma
máquina virtual para o DOS e para o Windows, respectivamente. O dosemu
requer uma cópia do DOS, e por isto é incluido o FreeDos. Outras versões
proprietárias do DOS (como o PC-DOS, DR-DOS e MS-DOS) podem ser
instaladas e configuradas no dosemu.
dosemu no SuSE Linux
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
415
Executando programas para Windows no Linux
O wine pode executar aplicativos DOS, Windows 3.x e
Win32 (Win9x/NT) da plataforma Intel. O wine cria uma camada
entre a API (Application Program Interface) do Windows e o
sistema X Window. Ele suporta aplicativos escritos para todas as
versões do Windows (Windows 3.x, Windows 9x, Windows NT, Windows Mem
Windows 2K e XP). A maior parte da API do Windows e de suas DLLs já é
suportada nativamente. No SuSE Linux, um aplicativo Windows pode ser
executado através da interface gráfica KDE. O wine será automaticamente
iniciado. Ele utilizará a configuração personalizada definida no diretório
~/.wine. Na primeira vez, ele criará um ambiente Windows simulado a partir
do diretório ~/.wine/fake_windows.
Paint Brush e Clock do Windows 3.11 no Wine
416
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Emuladores
Existem ainda para o Linux diversos programas emuladores de hardware
que permitem a instalação e a execução de um ambiente operacional completo.
O VMware, da empresa VMware Inc.,
cria uma máquina virtual com o mesmo tipo
de processador da máquina hospedeira com
acesso a quase todos os dispositivos
disponíveis em uma máquina real. A máquina virtual tem uma interface de rede
que por meio de um bridge possibilita o acesso à máquina hospedeira ou até
mesmo à sua rede local. O VMware possibilita a instalação e execução perfeita
do FreeBSD, do DOS, do Netware5 e de todas as versões do Windows (do 3.1 ao
XP).
Windows 95 sendo executado pelo VMWare
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
417
O pose (Palm OS Emulator) é capaz de
emular diversos modelos do Palm da 3COM,
bastando para isto ter a ROM do modelo correto.
Ele pode rodar o PalmOS ou o Linux para Palm.
Utilizando o compilador cruzado (crosscompiler) gcc (m68k-palmos-coff-gcc) podem
ser desenvolvidos e testados aplicativos (através
do gdb) para o PalmOS utilizando o próprio
Linux, sem a necessidade de transferir o
programa para um PalmPilot real. Note que o
PalmOS não utiliza a biblioteca C padrão.
Existem ainda
realização do HotSync.
aplicativos
para
O hercules é um emulador
de diversas arquiteturas da IBM,
indo do 360 ao z900 (nos modos
S/370, ESA/390 e zArchitecture).
Ele executa facilmente o OS 360,
o VM 370, o zOS, o Linux/390 e o
Linux para zSeries. Ele emula o
hardware do mainframe utilizando
os dispositivos do PC. Por
exemplo, um DASD 3390 pode
ser emulado por um arquivo no
disco e os terminais 3270 podem
ser utilizados através do x3270 ou
do tn3270 (aplicativos disponíveis para o Linux para acesso a mainframes IBM).
a
418
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
O simh de Robert M. Supnik é um emulador genérico capaz de simular
diversas arquiteturas. Estão disponíveis configurações para vários modelos da
série PDP da DEC, do HP2100 da Hewlet Packard, do IBM 1130, do IBM S/3, do
Altair 8800, do Interdata I4, do Honeywell H316/H516, e do VAX. Emulando o
pdp-11, o simh pode executar facilmente o RT11, o RSX11, e mesmo as versões
originais do Unix de Thompson, Kernigham e Richie.
PDP-11 simulator V2.9-2 rodando o RT11 V05.03
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
419
420
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Há ainda o BasiliskII de Christian Bauer que simula máuinas Macintosh
com CPUs 68000. Nele pode ser executado o MacOS e todos os seus aplicativos.
O Mac emulado pode utilizar recursos do Linux nativo ou através da rede com o
protocolo AppleTalk (pacote netatalk).
BasiliskII rodando MacOS 7.5.5
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
421
Compilando fontes de aplicativos no Linux
Os fontes de um aplicativo podem ser obtidos em formato .tar
(normalmente arquivos .tar, .tgz ou .tar.gz) ou em formato rpm (RedHat Package
Manager). É necessário então compilá-los para se obter o(s) arquivo(s)
executável(eis).
O primeiro passo é a instalação dos fontes. Para o formato rpm pode-se
utilizar o comando rpm:
$ rpm -i nome do pacote src.rpm
Nomalmente será instalado no diretório /usr/src/packages/SOURCES, um
arquivo no formato .tar (provavelmente com a extensão .tar.gz ou .tar.bz2).
Deve-se então extrair os arquivos utilizando o comando:
$ tar xvfz nome do arquivo tar.gz
ou
$ tar xvfj nome do arquivo tar.bz2
Serão criados um diretório e diversos sub-diretórios e arquivos sob este
diretório. Mude para este diretório e verifique se existe algum arquivo executável
com o nome configure. Caso exista, execute-o. Ele irá verificar a sua instalação
do Linux e configurar os fontes para ela. Será gerado então um arquivo com o
nome Makefile. Este arquivo será utilizado pelo programa make que irá compilar
os fontes e gerar o(s) executável(eis). Alguns aplicativos podem requerer
argumentos especiais para o configure ou ainda a alteração do arquivo Makefile.
Após a certeza da geração adequada do arquivo Makefile, simplesmente digite:
$ make
O make irá automaticamente executar o gcc para compilar o(s) arquivo(s)
fontes e o ld para gerar o(s) executável(is).
Se tudo estiver correto, você poderá instalar o aplicativo utilizando:
# make install
422
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Os arquivos Makefile
O programa make utiliza arquivos chamados de makefile que dizem o
que fazer para produzir um determinado resultado. Este resultado é normalmente
compilar e linkeditar um programa gerando seu executável.
Um arquivo makefile contém regras para a geração de resultados a partir
de suas dependências. Um destino pode ser um arquivo ou uma ação. O arquivo
makefile pode conter linhas com definições de variáveis, e diretivas para inclusão
de arquivos ou montagens condicionais. Textos após o caracter # são comentários
e serão ignorados pelo make.
As definições de variáveis são semelhantes à do bash:
variável= texto
Um <texto> poderá continuar em outra linha se terminado pela barra
invertida (’\’).
As regras de dependência têm o seguinte formato geral:
resultado : lista de dependências
comando
...
O resultado normalmente é um ou mais arquivos a serem gerados a partir
da lista de dependências. Esta lista, que pode ser vazia, pode ser formada por
nomes de arquivos ou de resultados. O(s) comando(s) são ações que devem ser
executadas para produzir o resultado. O resultado default é o primeiro encontrado
no arquivo makefile. Normalmente é criado um alvo do tipo all ou default com os
resultados a serem gerados na lista de dependências.
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
423
A diretiva include fará o make incluir o(s) arquivo(s) especificado(s). Os
nomes podem incluir padrões do shell como "*.mk".
include lista de nomes de arquivos
As diretiva ifeq e ifneq permitem a alteração condicional do processo de
geração dos resultados. Note que o else é opcional:
{ ifeq | ifneq } (string1, string2)
comandos1
[
else
comandos2
]
endif
As diretiva ifdef e ifndef permitem verificar se uma varável está ou não
definida.
{ ifdef | ifndef } variável
comandos1
[
else
comandos2
]
endif
424
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Um exemplo simples de um arquivo Makefile para compilar o famoso
programa hello.c que imprime "Hello World!":
# Makefile para o programa hello
CC=gcc
COPT=-Wall
all:
hello
clean:
@-rm hello.o hello
hello:
hello.o
$(CC) $(COPT) -o hello hello.o
hello.o: hello.c
$(CC) $(COPT) -c -o hello.o hello.c
No prompt do shell, basta digitar "make" para produzir o programa hello.
O ’@’ no comando rm indica não impressão do comando a ser executado. O ’-’
indica ignorar erro de retorno do comando rm caso os arquivos não existam.
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
425
Gerando pacotes RPM
Para gerar um pacote RPM é necessário criar o arquivo com a
especificação. Este arquivo é no formato texto tem a extensão .spec. Ele é
composto de sessões que definem o pacote, seu conteúudo e diretivas para a
instalação, atualização ou remoção do pacote.
A primeira sessão do arquivo descreve o pacote e contém tags no formato:
tag [ ( fase ) ] :
texto
Os tags principais são:
Tag
Name
Version
Release
Source
Sumary
License
Distribution
Group
BuildArch
BuildRoot
BuildRequires
Requires
Descrição
Nome do pacote
Número da Versão
Número do Release
Localização do arquivo com os fontes
Descrição sumária
Forma de licenciamento
Distribuição Linux
Nome do grupo do aplicativo
Arquitetura
Diretódio temporário para criação do pacote
Dependências para a criação do pacote
Dependências para instalação
As fases, utilizadas nos tags Requires ou BuildRequires , são:
Fase
pre
post
preun
postun
Descrição
Pré instalação do pacote
Pós instalação do pacote
Pré remoção do pacote
Pós remoção do pacote
426
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
A sessões seguintes fornecem informações adicionais para a criação do
pacote e têm o formato:
%tag
texto
linhas com informações sobre o tag
...
Os principais tags das sessões são:
1. Descrição mais completa do pacote
%description [ -n nome-do-pacote ] [ -l lingua ]
2. Preparacão para instalaçao do pacote
%prep
%setup -q
3. Criação do pacote
%build
make
4. Instalação do pacote
%install
comandos shell para instalação do pacote
5. Remoção de arquivos temporários
%clean
comandos para remoção de arquivos e diretórios temporários
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
427
6. Arquivos
%files
[ %defattr (permissões, usuário, grupo) ]
[ %dir %attr (permissões, usuário, grupo) caminho ]
lista de arquivos com o caminho
7. Histórico de atualizações
%changelog
{
* dia-da-semana mês dia ano responsável <email>
{ * texto descritivo }
}
Algumas diretivas ou macros como:
%{name}
%{version}
%{_tmppath}
%{buildroot}
%{suse_version}
%(linha de comando)
%{release}
%{_bindir}
podem ser utilizadas no arquivo .spec para melhor parametrizar o
pacote.
O fonte do pacote é um arquivo tar cujo nome deve seguir o formato
nome-do-pacote-%{version}.tar.{ gz | bz2 }
Este arquivo deve conter os arquivos necessários para criação do pacote.
428
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Assinando um RPM
Para garantir a atenticidade de um pacote RPM utiliza-se uma assinatura
utilizando uma chave privada PGP. O par de chaves pode ser gerada pelo gpg.
Um desenvolvedor pode criar o arquivo .rpmmacros em seu diretório
pessoal para especificar a chave que será utilizada na assinatura dos pacotes
gerados por ele.
Por exemplo:
%_signature gpg
%_gpg_path ~/.gnupg
%_gpg_name Helio Marques <[email protected]>
%_gpgbin /usr/bin/gpg
Assim, o desenvolvedor poderá utilizar o comando
rpm -v --addsign pacote.rpm
ou
rpmsign -v --addsign pacote.rpm
Será pedida a senha da chave privada do desenvolvedor.
Para verificar um pacote RPM, utilize o comando
rpm -K pacote.rpm
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
429
Exemplo de pacote RPM
A seguir é mostrado o arquivo .spec para um pacote simples chamado
simple-package. O pacote irá instalar os arquivos
/usr/local/pacote/prog
/usr/local/pacote/arq.txt
/usr/local/pacote/img.png
O executável prog é gerado a partir do seu fonte em C, prog.c.
O arquivo tar da versão 1.0, criado com o conteúdo do diretório
simple-package-1.0/, para o pacote simple-package contém:
hmarx@venus:/usr/src/packager/SOURCES> tar tvfj simple-package-1.0.tar.bz2
drwxrwx--- hmarx/linuxtech
0 2009-12-08 13:58 simple-package-1.0/
-rw-rw---- hmarx/linuxtech 32 2009-12-08 13:57 simple-package-1.0/Makefile
-rw-rw---- hmarx/linuxtech 66 2009-12-08 13:57 simple-package-1.0/prog.c
-rw-rw---- hmarx/linuxtech 28 2009-12-08 13:58 simple-package-1.0/arq.txt
-rw-r----- hmarx/linuxtech 17454 2009-12-08 13:58 simple-package-1.0/img.png
hmarx@venus:/usr/src/packager/SOURCES>
O processo de criação do RPM irá extrair todos os arquivos do arquivo
simple-package-1.0.tar.bz2
no diretório
/usr/src/packages/BUILD
e executará o script descrito em %build gerando o arquivo RPM no diretório
/usr/src/packages/RPMS/i586/
A arquitetura i586 (default) foi definida no tag BuildArch.
430
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Arquivo .spec para o pacote simple-package
Name:
Version:
Release:
Source:
Summary:
License:
Distribution:
Group:
BuildArch:
simple-package
1.0
0.1
simple-package-1.0.tar.bz2
Simple Package
GPL
openSuSE
Applications
i586
%description
Simple package to demonstrate the RPM build process
%description -l pt_BR
Pacote simples para demonstrar o processo de criar RPM
%prep
%setup -q
%build
make
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/pacote
install -m 755 prog $RPM_BUILD_ROOT/usr/local/pacote/prog
install -m 644 arq.txt
$RPM_BUILD_ROOT/usr/local/pacote/arq.txt
install -m 644 img.png
$RPM_BUILD_ROOT/usr/local/pacote/img.png
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root)
%dir %attr(755,root,root) /usr/local/pacote
/usr/local/pacote/prog
/usr/local/pacote/arq.txt
/usr/local/pacote/img.png
%changelog
* Tue Dec 8 2009 Helio Marques <[email protected]>
* Simple package - initial version
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
431
Após gerado o pacote, podemos verificar sua autenticidade utilizando o
comando:
hmarx@venus:~> rpm -K simple-package-1.0-0.1.i586.rpm
simple-package-1.0-0.1.i586.rpm: rsa sha1 (md5) pgp (md5) pgp md5 OK
hmarx@venus:~> ❏
Note que a chave pública deve ser importada para a base de dados RPM,
através do comando
root@venus:~# rpm --import hmarx-pubkey.asc
root@venus:~# ❏
432
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
Tendo os dois arquivos
simple-package-1.0.tar.bz2
simple-package.spec
basta executar o aplicativo rpmbuild para construir o pacote. Abaixo as
formas de gerar os pacotes:
Pacote a ser gerado
binário
fonte
ambos
Comando
rpmbuild -bb aquivo.spec
rpmbuild -bs aquivo.spec
rpmbuild -ba aquivo.spec
Os arquivos gerados serão em:
/usr/src/packages/SRPMS/simple-package-1.0-0.1.src.rpm
/usr/src/packages/RPMS/i586/simple-package-1.0-0.1.i586.rpm
Listando as informações do pacote, temos:
root@thor:~ # rpm -qpi /usr/src/packages/RPMS/i586/simple-package-1.0-0.1.i586.rpm
Name
: simple-package
Relocations: (not relocatable)
Version
: 1.0
Vendor: (none)
Release
: 0.1
Build Date: Mon 04 Jan 2010 09:53:15 AM BRST
Install Date : (not installed)
Build Host: thor.linuxtech.com.br
Group
: Applications
Source RPM: simple-package-1.0-0.1.src.rpm
Size
: 27517
License: GPL
Signature : (none)
Summary : Simple Package
Description :
Simple package to demonstrate the RPM build process
Distribution: openSuSE
root@thor:~ # ❏
Ambiente de Execução e Desenvolvimento de Aplicativos em Linux
O pacote poderá ser instalado utilizando o comando rpm.
root@thor:~ # rpm -ivh simple-package-1.0-0.1.i586.rpm
Preparing...
########################################### [100%]
1:simple-package
########################################### [100%]
root@thor:~ # ❏
Quando for atualizar o pacote:
root@thor:~ # rpm -Uvh simple-package-1.0-0.3.i586.rpm
Preparing...
########################################### [100%]
1:simple-package
########################################### [100%]
thor@thor:~ # ❏
Ou quando for remover o pacote:
root@thor:~ # rpm -e simple-package
root@thor:~ # ❏
433
434
Expressões Regulares
13. Expressões
Regulares
Expressões Regulares
O useo de expressões regulares é uma ferramenta muito
poderosa utilizada em diversos aplicativos, incluindo shells,
como o bash, editores de texto, como o vi, utilitários como o
grep, sed e find, e diversas linguagens de programação, como
Perl. Estas expressões são cadeias de caracteres que formam um
padrão a ser comparado em um texto. Expressões regulares são também chamadas
de pattern matching ou simplesmente regex.
As expressões regulares são formadas por dois tipos de caracteres:
caracteres especiais, denominados metacaracteres, e os literais, ou caracteres
normais. Metacaracteres possuem significado especial e são interpretados pelo
aplicativo. Assim, uma cadeia de caracteres normais como "linux" é uma
expressão regular que deve ser lida como o caracter l, seguido do caracter i,
seguido do caracter n, seguido do caracter u, seguido do caracter x. A cadeia
"*doc*" contém o caracter especial * deve ser lida como zero ou mais
caracteres, seguidos do caracted d, seguido do caracted o, seguido do caracter c,
seguido de zero ou mais caracteres.
Os metacaracteres podem ter semânticas diferentes dependendo do
aplicativo utilizado (shell, grep, sed, perl, ...).
Expressões Regulares
435
Os metacaracteres mais utilizados são:
Metacaracter
Nome
Significado
ponto
classe de caracteres
classe negada
qualquer caracter
qualquer caracter da classe
qualquer caracter não listado
\c
escaped char
caracter c literalmente
^
$
\<
\>
circunflexo
dólar (cifrão)
barra-invertida menor
barra-invertida maior
início da linha
fim da linha
início de uma palavra
fim de uma palavra
barra-em-pé
parêntesis
separa expressões alternativas
define escopo da expressão
.
[ ... ]
[^... ]
|
( ... )
Alguns metacaracteres são quantificadores ou de repetição:
Metacaracter
?
*
+
{ mín, máx }
Nome
Significado
interrogação
asterisco
mais
0 ou 1 caracter
0 ou mais caracteres
1 ou mais caracteres
faixa de quantidades
Requer mín, Limite máx
436
Expressões Regulares
As expressões regulares são utilizadas, por exemplo, para procurar um
número em um texto. Para um número específico, como 12345, a expressão
regular é a cadeia formada pelos caracteres do número, ou seja, 12345.
Se a procura for por um número qualquer, utilizamos os metacaracteres
para definir um número, ou seja, uma sequência de dígitos. Assim, um número
qualquer (1 ou mais dígitos) pode ser definido por qualquer uma das seguintes
expressões regulares:
[0-9]+
[0-9][0-9]*
dígito repetido 1 ou mais vezes
um dígito seguido de 0 ou mais dígitos
Uma cadeia entre aspas pode ser definida como:
"[^"]*"
aspas, seguido de 0 ou mais caracteres que não
sejam as aspas, seguido de aspas.
Às vezes, é necessário referenciar uma cadeia encontrada por uma
subexpressão agrupada por parêntesis, \( e \). São utilizados então os
metacaracteres \1, \2, ..., equivalentes às cadeias que combinam com as
expressões associadas à primeira expressão, segunda expressão, ...,
respectivamente. Assim, utilizando o sed, podemos substituir todo assinalamento
da forma variável := número por número ==> variável utilizando o comando:
$ sed "/\([a-z]\+\) := \([0-9]\+\)/s//\2 ==> \1/" arquivo > arquivo.novo
Para listar as palavras começadas com x (maiúsculo ou minúsculo) do
dicionário podemos utilizar:
$ grep "^\(x\|X\)" /usr/share/dict/words
Para listar o remetente e o assunto de e-mails em uma caixa postal do
usuário jose podemos utilizar simplesmente:
$ grep "^\(From\|Subject\):" /var/spool/mail/jose
Expressões Regulares
437
438
O Editor de textos VI
14. O Editor de Textos
VI
O editor de textos vi
O editor de textos padrão dos sistemas Unix-like é o vi (visual). Este é um
editor muito poderoso. A interface com o usuário pode parecer complicada
devido à grande quantidade de comandos. Porém, considerando a língua inglesa,
os comandos são bastante intuitivos. Veremos aqui apenas alguns comandos mais
importantes.
O vi trabalha em três modos: comando, edição e comando de uma linha.
No modo comando, cada caracter digitado será interpretado pelo vi como um
comando. No modo edição, os caracteres serão inseridos (ou substituídos ) no
texto. No modo comando de linha, um comando completo é digitado e será
executado ao pressionar o ©.
Para iniciar o vi, entre em um terminal (ou um xterm) e digite:
$ vi
ou, para editar arquivo(s) existente(s),
$ vi nome_do_arquivo ...
O vi será iniciado no modo comando. Mostrará o conteúdo do arquivo,
seguido de linhas com o caracter "~" na primeira coluna para indicar onde o
arquivo termina.
Introdução à Computação Forense
439
Para entrar em modo edição, pode-se utilizar um dos seguintes comandos:
insere a partir da posição atual do cursor
insere a partir do início da linha
insere após a posição atual do cursor
insere após o fim da linha
cria uma linha nova após a atual e começa a inserção
cria uma linha nova antes da atual e começa a inserção
apaga da posição atual do cursor até o fim da linha e
começa a inserção
i
I
a
A
o
O
C
Para sair do modo de edição, e voltar ao modo comando, use a tecla ¸.
Para caminhar pelo texto, utilize:
h
j
k
l
0
$
H
L
M
nG
%
n|
w
W
b
B
fc
Fc
tc
ou Ç (seta para a esquerda), volta o cursor uma coluna
ou Ê (seta para baixo), avança o cursor uma linha
ou È (seta para cima), volta o cursor uma linha
ou É (seta para a direita), avança o cursor uma coluna
ou Ã, vai para o início da linha
ou Ä, vai para o fim da linha
vai para o início da primeira linha da tela
vai para o início da última linha da tela
vai para o início da linha do meio da tela
vai para a linha n ou para o fim do texto
posiciona no ( , ), {, }, [ ou ] correspondente
posiciona na coluna n
vai para o início da próxima palavra
vai para o início da próxima palavra, ignorando caracteres
especiais
vai para o início da palavra anterior
vai para o início da palavra anterior, ignorando caracteres
especiais
posiciona o cursor na próxima ocorrência do caracter c
posiciona o cursor na ocorrência anterior do caracter c
posiciona o cursor antes da próxima ocorrência do
caracter c
440
O Editor de textos VI
posiciona o cursor após a ocorrência anterior do caracter c
Tc
+B
¦ +F
¦ +U
¦ +D
¦
rola a tela para cima (igual a Å)
rola a tela para baixo (igual a Æ)
rola a tela para cima
rola a tela para baixo
Para excluir ou copiar textos, existem os seguintes comandos:
nx
nX
d
y
p
P
nrc
R
~
u
U
ou nÂ, apaga os próximos n caracteres a partir do cursor
apaga os n caracteres anteriores
inicia a sequência para apagar, exemplos:
apaga n linhas (default n=1)
ndd
apaga n palavras
ndw
inicia a sequência para salvar, exemplos:
salva n linhas a partir da corrente
nyy
salva
as próximas n palavras
ynw
insere o texto salvo após a posição corrente
insere o texto salvo antes da posição corrente
substitui os próximos n caracteres por c
inicia modo de sobrescrever (oveRwrite)
troca a caixa do caracter (maiúscula <-> minúscula)
desfaz a última alteração
desfaz as alterações feitas na linha
Utilizando-se a sequência "c antes dos comandos, o texto salvo ou
removido é colocado em um buffer identificado por c. Este buffer pode ser, por
exemplo, inserido após a posição do cursor com o comando:
"cp
Introdução à Computação Forense
441
Para procurar um texto (que pode ser uma expressão regular), podemos
utilizar:
procura o texto para frente
/texto
procura o texto para trás
?texto
procura a próxima ocorrência
n
procura a ocorrência anterior
N
Pode-se marcar um texto, para executar um comando, utilizando:
inicia a marcação caracter a caracter
v
inicia a marcação de linhas
V
inicia a marcação de colunas
¦ +V
marca a linha com o caracter c (invisível)
mc
vai para o início da linha marcada com o caracter c
’c
(invisível)
‘c
vai para a posição marcada com o caracter c
executa o comando cmd e substitui o texto marcado
!cmd
pela saída do comando.
Ao teclar ":", o vi entra no modo comando de uma linha. O vi colocará na
última linha da tela o prompt ":", onde você pode digitar diversos comandos do
vi. Veja alguns exemplos:
:faixap
:faixad
:n
:prev
:n arquivos
:shell
:!comando
:x
:q
:w arquivo
:e arquivo
:r arquivo
:q!
imprime as linhas da faixa
apaga as linhas da faixa
passa para o próximo arquivo a editar
volta ao arquivo anterior
define nova lista de arquivos a editar
abre uma sessão shell. Ao terminar o shell,
volta à edição
executa o comando
salva e sai do vi
abandona a edição e sai do vi
escreve o texto no arquivo
carrega o arquivo para edição
lê o arquivo após a posição corrente
abandona o vi, ignorando alterações feitas
442
O Editor de textos VI
Podem ser utilizados os comandos:
¦+6
¦+G
¦+L
.
para alternar entre dois arquivos
para exibir o nome do arquivo e linha corrente
para redesenhar a tela
para repetir o último comando de inserção, alteração ou
deleção
Alguns comandos podem receber uma faixa para definir o escopo dos
comandos, como os dois primeiros acima. Esta faixa pode ser dado pelos números
das linhas inicial e/ou final, ou por expressões regulares para procura de textos
nas linhas inicial e/ou final.
:2,8p
:1,$p
:/txt1/,/txt2/d
:.,.+3p
imprime as linhas de 2 a 8
imprime da linha 1 ao final do texto
apaga da linha contendo txt1 até a contendo txt2
imprime a linha atual e as 3 seguintes
O comando de linha para substituição é muito poderoso. Por exemplo, o
comando:
:10,105g/txt1/s/txt2/txt3/g
substitui (s) todas as ocorrências (g no final do comando) de txt2 por txt3
em todas as linhas entre 10 e 105 que contenham (g no início do comando) o texto
txt1 .
Os seguintes comandos podem ser utilizados para saída rápida do vi.
ZZ
ZQ
salva e sai do vi
abandona a edição, ignorando alterações feitas
Introdução à Computação Forense
443
Um texto, opcionalmente marcado, pode ser indentado utilizando:
n<<
n>>
arreda o texto das n próximas linhas para a
esquerda
arreda o texto das n próximas linhas para a
direita
Para esta indentação, o vi irá utilizar o valores estabelecidos pelas opções
shiftwidth e tabstop (veja :set ts e :set sw abaixo). Ele irá utilizar TABs ou
espaços em branco para que o texto atinja a coluna desejada.
Opções do vi
O vi possui ainda diversas opções que podem ser alteradas através do
comandos:
:set opção = valor
:set opção
:set noopção
O estado atual das opções pode ser visto com:
:set
:set all
Algumas das opções mais usadas são:
:set number
:set nowrap
:set ic
:set sw=2
:set list
:set ts=2
:set sw=4
mostra o número das linhas
não mostra linhas longas em várias linhas
ignora maiúsculas/minúsculas nas procuras
altera o número de colunas para indentação
para 2
visualiza os caracteres especiais tipo TAB e
fim de linha
altera o TAB para parar de 2 em 2 colunas
altera o deslocamento dos comandos << e >>
444
Criando disquetes de Boot
15. Criando Disquetes
de Boot
Criando Disquetes de Boot
O Linux pode ser carregado de disquete com ou sem o LILO
ou Grub.
Utilizando o LILO
Você deve criar um arquivo de configuração /etc/lilo.conf, como
o seguinte:
boot = /dev/fd0
install = /boot/boot.b
map = /boot/map
read-write
prompt
image = /boot/kernel
label = Bootdisk
root = /dev/fd0
Para isto, você precisa de um kernel compilado (através de make zImage,
por exemplo). Veja o tamanho em blocos do kernel e some 50 (número
aproximado de blocos para os inodos do sistema de arquivos no disquete).
Chamaremos este número de KERNEL_BLOCKS. Note que kernel é o
vmlinuz gerado na compilação. Um kernel Linux que cabe em um disquete,
preparado por Adam Jensen <[email protected]> , pode ser encontrado em
http://linuxguy.org/docs/linuxdisk
Criando disquetes de Boot
445
Para saber o tamanho do kernel, utilize:
# ls -s kernel
Crie um sistema de arquivos ext2 no disquete reservando os blocos
calculados. Monte o disquete para copiar os arquivos necessários e executar o lilo.
Veja um exemplo do procedimento abaixo.
# mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS
# mount /dev/fd0 /mnt
# rm -rf /mnt/lost+found
# mkdir /mnt/{boot,dev}
# cp -R /dev/{null, fd0} /mnt/dev
# cp /boot/boot.b kernel /mnt/boot
# cp bdlilo.conf /mnt
# lilo -v -C bdlilo.conf -r /mnt
Sem o LILO ou Grub
Copie o kernel para o início do disquete:
# dd if=kernel of=/dev/fd0 bs=1k
375+1 records in
375+1 record out
Neste exemplo o kernel ocupou 376 blocos do disquete ao qual
chamaremos de KERNEL_BLOCKS.
Informe ao kernel (neste caso no disquete), que o dispositivo raiz é o
próprio disquete e que ele será carregado read/write.
# rdev /dev/fd0 /dev/fd0
# rdev -R /dev/fd0 0
446
Criando disquetes de Boot
Informando ao kernel sobre o sistema de arquivos raiz
Na imagem do kernel há uma palavra que informa onde o root filesystem
deve ser encontrado. Esta palavra é acessível através do comando rdev e deve ser
interpretada como:
Bits
0-10
11-13
14
15
Descrição
Offset do ramdisk em blocos de 1024 bytes
não utilizado
Indica que um ramdisk deve ser carregado
Indica que deve dar pausa antes da carga do root filesystem
Se o bit 15 estiver em 1, o processo de boot irá pedir o disquete com o
root filesystem. Isto é necessário se você criar os discos de boot e rootfs
separados.
No caso do disquete contendo o kernel e o sistema de arquivos, o offset do
rootfs será o primeiro bloco livre após o kernel (o mesmo que
KERNEL_BLOCKS). Ou seja, o valor será KERNEL_BLOCKS + 214.
No caso do conjunto de dois discos, boot+root, o offset do rootfs será 0.
Assim, o valor será 214 + 215, isto é, 49152.
Utilizando o comando rdev faremos:
# rdev -r /dev/fd0 valor
ou
# rdev -r /mnt/kernel
Desmonte o disquete:
# umount /mnt
valor
Criando disquetes de Boot
447
Criando o root filesystem
Para criar o sistema de arquivos raiz, pode ser utilizado um arquivo que
será transferido para o disquete de boot ou rootfs.
Crie um sistema de arquivos ext2 em um arquivo, que chamaremos de
ROOTFS:
# dd if=/dev/zero of=ROOTFS bs=1k count=2048
# mke2fs -m 0 -i 2000 ROOTFS
Monte o arquivo para preencher o sistema de arquivos raiz:
# mount -o loop ROOTFS /mnt
Copie para lá os diretórios necessários. Lembre de utilizar a opção -R para
copiar os devices em /dev.
Os diretórios básicos são: /dev, /proc, /etc, /sbin, /bin, /lib,
/mnt e /usr. Copie apenas o necessário devido à limitação do espaço em
disquete. Lembre-se de criar os arquivos de inicialização corretamente:
/etc/inittab, /etc/fstab, /etc/rc, entre outros.
Desmonte o arquivo ROOTFS e compacte-o.
# umount /mnt
# gzip ROOTFS
Transfira o arquivo compactado para o disquete:
# dd if=ROOTFS.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
Os disquetes estão prontos para serem utilizados. Teste-os para verificar
se todos os procedimentos foram corretamente seguidos e se o rootfs contém
todos os arquivos necessários e corretamente configurados.
448
Criando disquetes de Boot
Utilizando o Grub
Crie o arquivo menu.lst com a definição da entrada para o boot do
kernel instalado. Por convenção, utilize a versão do kernel para identificar a
versão do kernel instalado, similar ao mostrado abaixo.
#--default 0
timeout 5
title Linux - versão do kernel
root (fd0, 0)
kernel /vmlinuz-versão do kernel root=/dev/fd0
initrd /initrd-versão do kernel
Formate o disquete usando FAT.
# mkfs -t vfat /dev/fd0
Monte o disquete e crie os diretórios boot e grub
# mount /dev/fd0 /mnt
# mkdir -p /mnt/{boot,boot/grub}
Copie o kernel para o disquete.
# cp vmlinuz do kernel /mnt/boot
Criando disquetes de Boot
449
Desmonte o disquete .
# umount /dev/fd0
Instale o grub no disquete:
# grub
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
grub> device (fd0) /dev/fd0
grub> root (fd0)
Filesystem type is fat, using whole disk
grub> setup (fd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/fat_stage1_5" exists... yes
Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal)
Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal)
Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p
/boot/grub/menu.lst "... succeeded
Done.
grub> quit
#
r
E pronto !
450
Criando disquetes de Boot
16. Sistemas de
Numeração
Provavelmente, a necessidade do ser humano utilizar
um sistema de numeração surgiu na pré-história. Inicialmente o
homem das cavernas deve ter associado pedras a suas posses.
Quando suas posses começaram a aumentar, a quantidade de
pedras tournou-se incômoda para o transporte.
Notação posicional
Um número é um conjunto de símbolos associado a uma
determinada quantidade. Hoje utilizamos uma notação
posicional em que cada símbolo tem um valor diferente
conforme sua posição no número. Assim, o número 347, na base 10, representa
três centenas, quarenta e sete dezenas e sete unidades.
Se considerarmos uma base β qualquer, uma determinada quantidade Q
será representada pelo número N na base β, cuja representação é:
N = ...DCBA.abcd...β,
onde os símbolos { ..., D, C, B, A, a, b, c, ...} representam quantidades de
0 a β - 1. Note que para qualquer base β, a quantidade β é sempre representada
pelo número 10β.
Logo,
Q = ... + Dβ3 + Cβ2 + Bβ1 + Aβ0 + aβ-1 + bβ-2 + cβ-3 + dβ-4 + ...
Consideremos inicialmente os números naturais (inteiros sem sinal).
Por exemplo, 34710 representa a quantidade
Q = 3*102 + 4 * 101 + 7*100 = 3*100 + 4*10 + 7 = 347 !
Se efetuarmos as operações em uma base diferente, digamos δ, teremos a
representação de Q na base δ.
Se quisermos representar a quantidade trezentos e quarenta e sete, 34710,
em octal (base 8) temos:
☞
Para toda base β, a representacão da quantidade β será 10.
δ = 8 ∴ a quantidade 8 na base 8 é 10 !
Logo, realizando as operações na base 8, teremos:
Q = 3*122 + 4*121 + 7*120 = 3 * 144 + 50 + 7 = 454 + 50 + 7 = 533 !
Note que 1010 é igual a 128.
N = 5338 = 5*82 + 3*81 + 3*80 = 34710
Lembre-se que na base 8, 7 + 1 = 10 !
Alternativamente, a conversão de um número na base 10 para uma base β
pode ser feita pelo método das divisões sucessivas:
347 | 8
27 43 | 8
3
3 5 | 8
5 0
Lendos os restos de forma inversa temos o número 533.
Se δ é potência de β, digamos βN podemos agrupar N dígitos do número
na base β para formar 1 dígito na base δ. Assim, cada dígito na base 8 (23) pode
ser representado por 3 dígitos binários (base 2), chamados simplesmente de bits.
Na computação digital são comuns as representações nas bases 2, 8 e 16,
chamadas de binário, octal e hexadecimal, respectivamente.
Consequentemente, uma quantidade Q irá necessitar de N dígitos na base
β para representá-la, onde
N = teto
( )
log(Q)
log(β)
A função teto(x) é o menor inteiro maior ou igual a x.
Assim, o número 987610 necessita de 5 dígitos na base 8:
teto
(
)
log(9876)
= teto (4.423237040381) = 5
log(8)
E o número 987610 necessita de 14 dígitos na base 2 (14 bits):
teto
(
)
log(9876)
= teto (13.179287104600357492) = 14
log(2)
Números em um computador digital
Os computadores digitais atuais utilizam componentes que representam os
valores 0 e 1 que também significam falso e verdadeiro. A magnitude de um
número que um computador consegue representar é limitada, normalmente ao
número de bits que o maior registrador do processador consegue armazenar.
Assim, tipicamente, temos números naturais e inteiros de 8, 16 32 ou 64 bits e
números de ponto flutuante de 32, 64 e 80 bits.
Números naturais
Para os números naturais precisamos de k bits para representar 2k valores
k
(0 a 2 -1). Assim, por exemplo, com 32 bits representamos de 0 a 4294967295.
Números inteiros
Utilizando k bits para representamos 2k valores inteiros (positivos e
negativos). As 3 representações comuns são sinal magnitude, complemento de 1 e
complemento de 2.
Sinal magnitude
Reservamos 1 bit para o sinal (0 positivo e 1 negativo) e assim sobram k 1 bits representando 2k-1 valores. Problema: teremos o +0 e o -0. Através de
circuitos especiais podem zerar o bit de sinal quando todos os outros k-1 bits
forem iguais a zero. Veja abaixo as representações de +79 e -93 e a soma, -14,
utilizando 8 bits. São válidas as representações dos números -127...-0, +0 ... +127.
Número
+79
-93
-14
7
0
1
1
6
1
1
0
5
0
0
0
bits
4
0
1
0
3
1
1
1
2
1
1
1
1
1
0
1
0
1
1
0
Complemento de 1
Representamos o números positivos convertendo o número para a base 2.
Se o número for negativo, convertemos o número e complementamos os bits.
Veja abaixo as representações de +79 e -93 e a soma, -14, utilizando 8 bits. São
válidas as representações dos números -127...-0, +0 ... +127.
Número
+79
-93
-14
7
0
1
1
6
1
0
1
5
0
1
1
bits
4
0
0
1
3
1
0
0
2
1
0
0
1
1
1
0
0
1
0
1
Complemento de 2
Representamos o números positivos convertendo o número para a base 2.
Se o número for negativo, convertemos o número, complementamos os bits e
somamos 1. Veja abaixo as representações de +79 e -93 e a soma, -14, utilizando
8 bits. São válidas as representações dos números -128..., 0, ... +127.
Número
+79
-93
-14
7
0
1
1
6
1
0
1
5
0
1
1
bits
4
0
0
1
3
1
0
0
2
1
0
0
1
1
1
1
0
1
1
0
Note que apenas nesta representação a adição produzirá o resultado
correto.
Números de ponto flutuante
Considerando um número decimal, representado por:
+/- a.bcdefg....* 10k
onde a,b,c,... são dígitos decimais (0 a 9) e k um número inteiro (positivo
ou negativo), em binário, após normalizá-lo teremos:
+/- 0.xyzkw... * 2E
Com N bits podemos representar este número utilizando 3 partes: S: o sinal da
mantissa, o expoente com e bits e o valor absoluto da mantissa com m bits.
1 bit
S
e bits
expoente
m bits
mantissa
O expoente é normalmente representado pelo pelo excesso de 2e-1-1
O valor de x é sempre 1, assim ele pode ser oculto (não representado).
Desta forma a mantissa será m+1 bits. O bit em 1 é chamado na literatura de
hidden bit (bit oculto).
Introdução à Computação Forense
457
17. Introdução à
Computação Forense
Conceitos iniciais
A computação forense é a obtenção e análise de dados, livre de distorções
ou divergências, para a reconstrução de informações ou eventos que ocorreram no
sistema. Devemos ter sempre em mente que os sistemas são imensos, complexos
e sofrem alterações constantemente. Dados podem estar ocultos em qualquer
local. Há pouca informação técnica disponível. Não há software disponível. O
mais importante é o conhecimento e a experiência. A obtenção dos dados às vezes
é fácil. A análise é difícil e gasta muito tempo. O amazenamento das informações
obtidas requer muito espaço.
Os requisitos básicos de um detetive digital são:
♦ Conhecimento técnico
♦Conhecimento das implicações técnicas de suas ações
♦ Εsperteza e mente aberta
♦ Εducação contínua e conhecimento histórico
♦ Uso altamente redundande de fontes de informação nas suas conclusões
Ao se deparar com um caso:
♦ Assegure e isole
♦ Registre o cenário
♦ Procure evidências sistematicamente
♦ Colecione e empacote as evidências
♦ Mantenha uma linha de custódias
458
Introdução à Computação Forense
Há ainda alguns lemas:
♦ Velocidade é essencial - mas não exagere
♦ Tudo o que você fizer no sistema o perturba
♦ Nunca confie no sistema
♦ Suas políticas devem sempre ser consideradas
♦ Mantenha uma linha de custódias
♦ Espere por falhas
♦ Prepare-se para surpresas
Procura por evidências
Na procura por evidências deve-se sempre preservar o estado. Nunca
conhecemos o passado. Mesmo o presente pode ser capcioso. Sempre capture os
dados na ordem de sua volatilidade.
1
2
3
4
5
6
7
Ordem de volatilidade de informações
Registradores, memórias de periféricos, caches, etc.
Memória (do kernel e física)
Estado da rede
Processos em execução
Discos
Disquetes, medias de backup, etc.
CD-ROMs, impressões, etc.
Os maiores problemas são:
♦ Falta de clareza
♦ Não conhecer o que aconteceu
♦ Não conhecer o que ou quem está combatendo
♦ Não saber em que confiar
♦ Problemas mais difíceis requerem maior preparo
♦ O legado de Heisenberg !
Introdução à Computação Forense
459
Se você não conhece o sistema:
♦ Conheça as limitações
♦ É muito fácil danificar uma evidência
♦ Se existe automação, a coleta de informações é possível
♦ Mesmo a análise mais simples é perigosa
♦ Peça ajuda !
Plano de batalha
♦ Pense ! Digitar rapidamente não irá ajudar !
♦ Há alguma política de segurança ?
♦ Defina objetivos
♦ Há alguma pessoa de contato ?
♦ Assuma o pior
♦ Trabalhe o mínimo possível com os dados originais
Reconstrução das fábulas
A maioria das informações têm componentes temporais. Algumas
temporizações são mais raras que outras. Construa uma linha de tempo. Examine
um pequeno período de cada vez. Tente determinar o que aconteceu.
Quem contactar ?
♦ A equipe de segurança de sua empresa
♦ A gerência
♦ O CERT ?
♦ O FBI, a polícia, etc. ?
460
Introdução à Computação Forense
Lembre-se sempre que:
Um alvo pode ser atingido duas vezes por um raio. Múltiplos eventos de
cada vez podem gerar confusão. Um mesmo incidente pode envolver várias
partes. Incidentes isolados podem envolver várias partes. Deve-se interligar os
eventos ao fluxo de dados. Múltiplos investigadores devem juntar suas
evidências.
Investigação na prática
Algumas precauções devem ser tomadas para não apagar as evidências ao
investigar o conteúdo de um sitema de computação. Devemos sempre lembrar
que:
1. As informações volátes (conteúdo de memória RAM, estado do
processador e de dispositivos de E/S) são extremamente difíceis de serem obtidas
sem alterá-las.
2. As informações não volátes (armazenadas em disco, disquete, pen
drives, CDs, DVDs, e impressões) são mais fáceis de serem obtidas.
3. Horários da máquina, de arquivos e locais são ítens imprecindíveis à
inverstigação.
4. Em caso de acesso externo, você deve contar com a ajuda dos
provedores de acesso para obter informações sobre as conexões executadas pelo
invasor. Verifique o período das sessões suspeitas.
5. Observe bem o sistema antes de iniciar a investigação. Nunca inicialize
o computador utilizando o disco em investigação. Utilize outro computador para
suas análises. Utilize uma cópia dos discos e/ou partições (por exemplo através do
utilitário dd) e sempre monte as partições no modo read-only (utilizando a opção
-o ro do utilitário mount). Lembre-se que a área de swap também pode conter
informações valiosas. Nunca utilize esta área como swap durante sua
investigação. Faça uma cópia e utilize a cópia para análise.
Introdução à Computação Forense
461
6. Simples ferramentas como o find, grep, strings, dentre outras, podem
ser bastante úteis para procura de evidências. Os arquivos de log, arquivos
temporários e core dumps podem ser pistas importantes. Veja também o cadastro
de usuários (/etc/passwd
e /etc/shadow) e também o
/var/log/lastlog.
Nota: Se a partição sob análise está montada em /Analise, por exemplo,
estes
arquivos
estarão
em
/Analise/etc/passwd,
/Analise/etc/shadow e /Analise/var/log/lastlog
7. Registre todos os seus procedimentos. Os métodos de investigação
também são levados em conta em um tribunal. Uma prova poderá facilmente ser
invalidada se o método para obtê-la não for correto e puder causar alterações em
seu conteúdo. Lembre-se que a simples cópia de um arquivo de um sistema de
arquivos montado read-write e sem opção noatime altera a sua data e hora de
acesso.
462
Introdução à Computação Forense
Entretenimento e Aprendizado
463
18. Clusters e Grids
Conceitos
Com o aumento da complexidade dos problemas, e o tempo necessário
para resolvê-lo, surgiu a necessidade de agrupar vários processadores,
distribuindo o trabalho e assim tornando a utilização de computadores factíve.
Diversas arquiteturas foram definidas conforme o tipo de problema.
Um grid é um sistema computacional distribuido que
possui fraco acoplamento. Os processos não se interagem
ou interagem muito pouco. Os processadores podem ser
heterogêneos e também geograficamente dispersos. Um
bom exemplo é o grid do Google que possui cerca de 900
mil computadores distribuídos pelo globo.
Um cluster também é um sistema computacional distribuido mas que
possui acoplamento alto e com alta interacão entre os processos. O cluster pode
ser visto como um sistema único. Os componentes do cluster (chamados nodos)
são normalmetne interligados por uma rede local rápida. Há 2 tipos de aplicacão
para os clusters: alto desempenho e alta disponibilidade.
Um cluster de alto desempenho (simplesmente referido como HPC)
distriibui as tarefas entre os processadores dos nodos. Um cluster de alta
disponibilidade (simplesmente referino como HA), tem nodos ativos e nodos em
hot-standby. No caso de falha de um nodo, seus processos são imediatamente
assumidos por um node em standby.
464
Entretenimento e Aprendizado
O cluster HA mais simples e formado por 2 nodos. Um nodo é ativo,
chamado de primário, e provê servicos aos clienter. O outro nodo, chamado de
secundário) fica em standby. Os dados críticos são duplicados continuamente do
nodo primário para o nodo secundário.
Implementando um cluster HPC
Um cluste HPC pode ser criado a partir de computadores comuns
interligados através de uma rede rápida (gigabit ou infiniband). Aplicações
devem ser desenvolvidas utilizando chamadas a funções de bibliotecas para a
comunicação entre suas threads ou processos sendo executados em quaisquer dos
nodos do cluster. Uma camada de software rodando em um nodo (Head) gerencia
os nodos de processamento e as threads e processos que podem migrar de um
nodo para outro conforme critérios de equilíbrio de carga ou disponibilidade de
recursos computacionais. O acesso ao cluster é feito por um nodo de login.
Entretenimento e Aprendizado
465
Em computadores especiais que possuem memórias compartilhadas, a
implementação é mais simples e eficiente. A memória pode ser dividida em
blocos com acessos exclusivos a cada bloco ou ter multiplos canais de acesso (e
possivelmente por bloco). Abaixo é visto um diagrama simplificado do
processador AMD MagnyCours com 12 núcleos.
466
Entretenimento e Aprendizado
Implementando um cluster HA
Supondo um cluster HA simples de 2 nodos, utilizaremos o DRBD e o
Pacemaker para implementá-lo. São utilizados 2 computadores com 2 interfaces
de rede cada. Uma interface de rede será utilizada para o sincronismo e o controle
do cluster. A outra interface será utilizada para o acesso ao cluster. Além dos IPs
para cada interface, definiremos um IP flutuante que será adicionado ao nodo
ativo (primário).
Cada computador tem seus discos e para os dados críticos podem ser
criados volumes (LVM para facilitar a escalabilidade) e que serão duplicados
automaticamente. Os volumes deverão ser de tamanhos idênticos. Sugiro não
fazer duplicação do sistetma operacional e aplicativos. Em caso de atualização ou
instalação de pacotes instáveis (principalmente o kernel), o outro nodo não será
afetado e poderá ser promovido a primário mantendo a alta disponibilidade.
As interfaces N1 e N2 dos computadores deverm ser de alta velocidade
(gigabit) interligadas por um cabo cross-over. Cada nodo tem seu IP (IP1 e IP2)
que podem ser utilizados para configuração e manutenção. O IPcluster será o IP
flutuante. As estações sempre farão o acesso aos serviços do cluster por este IP.
Entretenimento e Aprendizado
467
Devem ser definidas quais informações deverão ser espelhadas
automaticamente. Alguns volumes não devem ser espelhados. Por exemplo, o que
contém o sistema operacional e seus aplicativos. Analise o caso de uma
atualização falha no nodo primário: pode-se comutar p/ um nodo secundário e
reparar a atualização. Na partição fictícia à direita, apenas os volumes /home,
/data1 e /data2 são bons candidatos à replicação. Os volumes (discos ou
partições) que serão redundantes deverão ser idênticos. Isto é, as particões que
compõem o volume /home nos discos dos nodos primário e secundário devem ter
o mesmo tamanho.
DRBD
O arquivo de configuração do DRBD é o /etc/drbd.conf. Este
arquivo contém sessões que definem o modo de tratamento dos recursos e as
definicões dos recursos do cluster.
O formato típico da definição de um recurso é como o mostrado abaixo.
Os ítens em itálico devem ser substituídos pelos valores reais.
{
}
resource "nomedorecurso" {
protocol { A | B | C }}; # Use C para aplicações críticas
incon-degr-cmd "comando shell"
startup { wfc-timeout timeout de conexão; degr-wfc-timeout timeout; }
disk { on-io-error { pass_on | panic | detach }; size tamanho }
net { on-disconnect { reconnect | stand_alone | freeze_io }} };
syncer { rate MBytesps; }
on nomedonode {
device /dev/drbdi;
disk volume;
address ip_do_nodo;
metadisk {{ internal | disco };
}
}
No exemplo a seguir, considere os nodos nodo1 e nodo2 e o volume
/dev/drbd0 criado em ambos os nodos o qual será montado em /data1.
468
Entretenimento e Aprendizado
Abaixo é mostrada uma parte do arquivo de configuração do DRBD:
# parte do arquivo /etc/drbd.conf
resource "data1" {
protocol B;
incon-degr-cmd
"echo !DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
startup { wft-timeout 10; degr-wfc-timeout 120;}
disk { on-io-error panic; size 10GB; }
net { on-disconnect reconnect };
syncet { rate 10M; }
on nodo1 {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.1.1:7788;
meta-disk internal;
}
on nodo2 {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.1.2:7788;
meta-disk internal;
}
}
A criação do volume em cada nodo é feito normalmente pelo
particionador fdisk. Pode-se criar volume LVM ou RAID por software ou
hardware. Configurado o arquivo /etc/drbd.conf, inicia-se o serviço drbd
(por exemplo, usando rcdrbd start, no openSuSE Linux.
Para cada volume criado, cria-se o metadata utilizando a opção create-md
do aplicativo drbdadm. No nodo primário, pode-se criar o sistema de arquivos
em cada volume, utilizando o dispositivo (/dev/drbdi) e montá-los. O nodo
secundário terá seu volume sincronizado automaticamente. Na primeira vez, todos
os blocos do volume são sincronizados e processo pode demorar horas
dependendo do tamanho do volume e da velocidade do enlace entre os nodos.
Entretenimento e Aprendizado
469
Heartbeat
O arquivo básico de configuração do hearbeat é o /etc/ha.d/ha.cf.
Podem ser configurados os arquivos de log, timeouts, interfaces e forma de
comunicação e mudança de função dos nodos. A interface de comunicãção pode
ser serial ou ethernet (que pode ser a mesma utilizada pelo drbd). Os nomes dos
nodos são listados na opcão node e devem ser os mesmos mostrados com o
comando uname -n.
No arquivo /etc/ha.d/authkeys são definidos os métodos e as
chaves para autenticação dos nodos. No caso de um enlace seguro e dedicado ao
heartbeat (e o drbd), pode-se utilizar apenas o CRC, melhorando o desempenho.
Em outros casos pode-se definir uma senha SHA1 ou MD5. Os recursos são
definidos no arquivo /etc/ha.d/resources, em uma linha o nodo primário
preferencial e os recursos que serão comutados na troca da função dos nodos.
A sintaxe geral é:
nodoprimário { lista de recursos separados por espaço }
onde cada ada recurso tem o formato recurso::parâmetro. Os recursos,
tratados pelos scripts em /etc/ha.d/resource.d são:
IpAddr::ipv4 ou ipv4
drbddisk
Filesystem::device::mountpoint::filesystemtype
serviço
Exemplo:
nodo1 192.168.1.5 drbddisk Filesystem::/dev/drbd0::/home::ext3
Filesystem::/dev/drbd1::/data1::ext3 Filesystem::/dev/drbd2::/data2::ext3
apache2 named mysql sendmail ntp
470
Entretenimento e Aprendizado
Após o sincronismo, o status do cluster pode ser visto utilizando o script
/etc/init.d/drbd status(ou simplesmente rcdrbd status no openSuSE Linux).
Iniciando o hearbeat (rcheartbeat start no openSuSE), o cluster está
operacional. Ele pode ser habilitado no init.
Por exemplo, criando e definindo 3 volumes DRBD (/home, /data1 e
/data2), veremos:
node1:/etc # rcdrbd status
drbd driver loaded OK; device status:
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by phil@fat-tyre,
2009-10-06 14:36:06
m:res
cs
ro
ds
p mounted fstype
0:home
Connected Primary/Secondary UpToDate/UpToDate B /home
ext3
1:data1
Connected Primary/Secondary UpToDate/UpToDate B /data1
ext3
2:data2
Connected Primary/Secondary UpToDate/UpToDate B /data2
ext3
As siglas mostradas são:
m : module drbd
res : resource
cs : connection status
ro : role
ds : device status
p : protocol
(dispositivo drbdi)
(recurso)
(função)
Obtendo o status no nodo primário (nodo1), a função Primary é mostrada
à esquerda e a do nodo secundário (nodo2), a função Secondary é mostrado à
direita.
Entretenimento e Aprendizado
471
19. Entretenimento e
Aprendizado
Linux também é cultura e diversão !
O ambiente operacional GNU/Linux possui também diversos aplicativos
para o seu seu entretenimento e aprendizado. Quase todas as distribuições Linux
incluem um pacote conhecido com bsd-games que contém programas
educativos e jogos em modo texto. Abaixo vemos os conhecidos arithmetic,
primes e factor.
hmarx@thor:~> arithmetic
7 - 7 =
0
Right!
5 + 0 =
5
Right!
6 - 4 =
2
Right!
10 - 5 = 5
Right!
8 - 3 =
5
Right!
1 + 10 = ❑
hmarx@venus:~> primes 55555 55666
55579
55589
55603
55609
55619
55621
55631
55633
55639
55661
55663
hmarx@venus:~> ❑
hmarx@venus:~> factor
8
8: 2 2 2
111
111: 3 37
1111
1111: 11 101
11111
11111: 41 271
99999
99999: 3 3 41 271
1234321
1234321: 11 11 101 101
❑
472
Entretenimento e Aprendizado
Entre os jogos do pacote bsd-games, encontramos jogos clássicos da
década de 1970 como Colossal Cave Adventure (ou simplesmente Adventure) e
o Star Trek (ou simplesmente Trek).
No Adventure o jogador teria que utilizar sua imaginação para se
localizar em um imensa caverna cheia de passagens, objetos e criaturas com
interessantes eventos, navegando por comandos textuais como os de movimento
(north, south, east, west) ou pegando/largando objetos (get, drop), entre outros.
hmarx@thor:~> adventure
Welcome to Adventure!! Would you like instructions ?
yes
Somewhere nearby is Colossal Cave, where others have found fortunes in
treasure and gold, though it is rumored that some who enter are never
seen again. Magic is said to work in the cave. I will be your eyes
and hands. Direct me with commands of 1 or 2 words. I should warn
you that I look at only the first five letters of each word, so you’ll
have to enter "northeast" as "ne" to distinguish it from "north".
(Should you get stuck, type "help" for some general hints. For
information on how to end your adventure, etc., type "info".)
This program was originally developed by Will Crowther. Most of the
features of the current program were added by Don Woods. Address
complaints about the UNIX version to Jim Gillogly ([email protected]).
You are standing at the end of a road before a small brick building.
Around you is a forest. A small stream flows out of the building and
down a gully.
east
You are inside a building, a well house for a large spring.
There are some keys on the ground here.
There is a shiny brass lamp nearby.
There is food here.
There is a bottle of water here.
get keys
OK
get lamp
OK
❑
Entretenimento e Aprendizado
473
No jogo Trek, o jogador já dispõe de mapas em modo texto com a
posição da nave Enterprise, de bases estelares, estrelas e das naves Klingon.
hmarx@venus:~> trek
* * *
S T A R
T R E K
* * *
Press return to continue.
What length game: short
What skill game: good
Enter a password: hmarx
15 Klingons
2 starbases at 0,1, 0,7
It takes 550 units to kill a Klingon
Command: s
Short range sensor scan
0 1 2 3 4 5 6 7 8 9
0 . . E @ . . . . . . 0
1 . . . . . . . . . . 1
2 . . . . . . . . . . 2
3 . . . . . . . . . . 3
4 . . . . . . . . * * 4
5 . . . . . . . . . . 5
6 . . . . . . . . . . 6
7 . . . . . . . . . . 7
8 . . . . . . . . . # 8
9
. . . . . . . . . 9
0 1 2 3 4 5 6 7 8 9
Starsystem Elysium I
stardate
condition
position
warp factor
total energy
torpedoes
shields
Klingons left
time left
life support
2100.00
GREEN
0,1/0,2
5.0
5000
10
up, 100%
15
8.00
active
Command: m
Course: 6
Distance: .5
Computer applies full reverse power to avoid hitting the
negative energy barrier. A space warp was entered.
You are now in quadrant 4,7. It is stardate 2100.22
Command: ❑
O conhecido jogo da forca, hangman, também está presente:
______
|
|
|
O
|
/|
|
|
|
/
__|_____
|
|___
|_________|
Word: interdependence
Guess:
You got it!
Another word? ❑
Guessed:
acdefimnoprst
Word #:
Current Average:
Overall Average:
1
5.000
0.000
474
Entretenimento e Aprendizado
Em modo gráfico, alguns programas como o xeyes, amor e oneko
podem ser classificados como para entretenimento.
O xeyes acompanha o movimento do mouse. O amor mostra um objeto
ou personagem fixo ou animado sobre uma janela ou barra de tarefas. O oneko
faz um gato ou um cachorro perseguir o seu mouse.
xeyes
O kmahjongg tem um visual mais tridimensional.
oneko
Entretenimento e Aprendizado
475
O kpat implementa diversos jogos tipo paciência:
E o KGoldRunner relembra o velho lodrunner dos computadores
Apple-II.
476
Entretenimento e Aprendizado
Além de muitos programas educativos e jogos em modo texto, hoje podem
ser encontrados milhares em modo gráfico 2D e 3D. O KDE, por exemplo, tem
diversos aplicativos em diversas áreas.
O ktouch, para o aprendizado de digitação, indica imediatamente
quando você comete um erro. Ele calcula também sua velocidade de digitação.
Entretenimento e Aprendizado
477
Para as crianças aprenderem a desenhar, existe o TuxPaint que possui
diversas ferramentas para desenho e pintura, além de imagens (que podem ser
usadas como carimbos) qe podem ter sons associados. Podem ser facilmente
adicionadas novas imagens e associá-las a novos sons.
O gcompris inclui diversas brincadeiras educativas para crianças.
478
Entretenimento e Aprendizado
O kgeography pode ser utilizado no aprendizado de mapas de paises,
seus estados e capitais.
kgeography
Entretenimento e Aprendizado
479
Para o estudo dos elementos químicos e suas propriedades, o kalzium é
um aplicativo completo, incluindo cálculos de fórmulas
Kalzium
Em geometria, há o kig que inclui diversas operações com os elementos
planos.
kig
480
Entretenimento e Aprendizado
Para o aprendizado e projeto de circuitos lógicos e Algebra de Boole, um
programa muito interessante é o LogiSim, mostrado abaixo. Ele possui uma
biblioteca de componentes e permite simulação de circuitos.
Entretenimento e Aprendizado
481
Jogos de ação (3D)
Diversos jogos de ação em 3D como os da empresa Id Software (Doom,
Heretic, Hexen e Quake) também estão disponíveis para Linux.
Heretic
Doom
Quake 3
482
Entretenimento e Aprendizado
O jogos pingus (relembrando o lemmings), o Frozen Bubble e o
kasteroids são clássicos em Linux:
Pingus
Frozen Bubble
Após o desligamento errôneo (sem utilizar o comando shutdown), o boot
do openSuSE exibe uma tela similar ao do pingus em terra gelada (similar à
imagem acima). Uma forma lúdica de informar que o sistema não foi desligado
corretamente.
O reversi e o kasteoids são também jogos tradicionais:
Reversi
kasteroids
Entretenimento e Aprendizado
483
Diversos jogos de Xadrez, como o 3D chess, e o Brutal Chess
estão disponíveis:
3D chess
Brutal Chess
484
Entretenimento e Aprendizado
Jogos para Windows
Mesmo alguns jogos para o sistema operacional Microsoft Windows
podem ser executados utilizando o Wine.
Abaixo uma das telas do jogo instrutivo The Incredible Machine
de 2001:
Assim, como já exibia o SuSE Linux desde suas primeiras versões:
Have a lot of fun !
Entretenimento e Aprendizado
485
486
Entretenimento e Aprendizado
Entretenimento e Aprendizado
487
Bibliografia
Livros e outras publicações
[AVRITZER]
Alberto Avritzer, Dissertação de Mestrado: "Um sistema
operacional com suporte para multiprocessamento e
tempo compartilhado", DCC-UFMG, 1983.
[CRYPT]
Neal Koblitz, A course in Number Theory and
Cryptograpy, Springer, Washington, USA, 1994.
[DNS_BIND]
Paul Albitz & Cricket Liu, DNS and Bind - 2nd edition,
O’Reilly & Associates, California, USA, 1996.
[FMBASTOS] Frederico M. Bastos, Dissertação de Mestrado: "Modelo
de Contabilização e Negociação de Preços para Serviços
com QoS", DCC-UFMG, 2003.
[HMARX]
Hélio Marques Sobrinho, Dissertaçao de Mestrado: "Um
processador central de 16 bits apropriado para
multiprocessamento", DCC-UFMG, 1986.
[INTFW]
D. Brant Chapman & Elizabeth D. Zwicky, Building
Internet Firewalls, O’Reilly & Associates, California,
USA, 1995.
[LPI101]
Emmett Dulaney, LPI: General Linux I - Exam 101,
Coriolis Group, Arizona, USA, 2001.
[LPI102]
Emmett Dulaney, LPI: General Linux II - Exam 102,
Coriolis Group, Arizona, USA, 2001.
488
Entretenimento e Aprendizado
[MAXSEC1]
Anonymous, "Maximum Security", Sams Publishing,
USA, 1998.
[MAXSEC2]
Anonymous, "Linux Maximum Security", Sams
Publishing, USA, 2000.
[MINIX]
Andrew S. Tanenbaum & Al Woodhull, Operating
Systems: Design and Implementation - 2nd edition,
Prentice-Hall, USA, 2000.
[NAG]
Olaf Kirch, "Linux Network Administrator’s Guide",
SSC, USA, 1994.
[PGP]
Simson Garfinkel, PGP Pretty Good Privacy, O’Reilly
& Associates, , California, USA,1995.
[PPP]
Andrew Sun, Using and Managing PPP, O’Reilly &
Associates, California, USA, 1997.
[PRODNS]
Ron Aitchson, Pro DNS and BIND, Apress, New York,
USA, 2005.
[SENDMAIL] Bryan Costales & Erik Allman, Sendmail - 2nd edition,
O’Reilly & Associates, California, USA, 1997.
[SuSE80APP]
SuSE, SuSE Linux 8.0 Applications, SuSE Linux AG,
Nuremberg, Germany, 2002.
[SuSE80BAS] SuSE Linux AG, SuSE Linux 8.0 Basics, Nuremberg,
Germany, 2002.
[SuSE80REF]
SuSE, SuSE Linux 8.0 Reference, SuSE Linux AG,
Nuernberg, Germany, 2002.
[TCPADM]
Craig Hunt, TCP/IP Network Administration - 2nd
edition, O’Reilly & Associates, California, USA,1997.
Entretenimento e Aprendizado
489
[UNIXSEC]
Simson Garfinkel & Gene Spafford, Practical UNIX &
Internet Security - 2nd edition, O’Reilly & Associates,
California, USA, 1996.
[VPN]
Charlie Scott & ali., Virtual Private Networks - 2nd
edition, O Reilly & Associates, California, USA, 1999.
[XWIN]
*, The Definitive Guides to the X Window System,
Volumes 0 a 8, O’Reilly & Associates, California, USA.
490
Entretenimento e Aprendizado
Sites na Internet
http://www.kernel.org
Site oficial do kernel Linux, criado por Linus Torvalds
http://gnu.org
Projeto GNU da Free Software Foundation criado por Richard
Stallman
http://www.minix3.org
Site dedicado ao MINIX de Andrew S. Tanenbaum
http://www.linux.org
Página oficial do sistema operacional Linux. Há uma
lista de diversos aplicativos para o Linux
http://linmodems.org
Drivers de softmodems (conhecidos também como
Winmodems) para o Linux
http://www.ora.com
Página da editora O’Reilly especializada em livros tecnicos.
Possui muitos livros sobre Unix e Linux
http://www.suse.de
Site original da empresa alemâ SuSE Linux AG, criadora da
distribuição SuSE Linux. Atualmente é redirecionada para o site
da Novell
http://www.vmware.com
Os aplicativos de virtualização mais conhecidos e
utilizados no mundo
Entretenimento e Aprendizado
491
http://www.hercules-390.org
http://www.jaymoseley.com/hercules/
Hercules, um emulador das arquiteturas IBM System/370,
ESA/390 e zSeries
http://sourceforge.net
Maior site de projetos Open Source
Exemplos: xine.sourceforge.net, bochs.sourceforge.net, ...
http://www.linas.org/linux
Parte do site de Linas Vepstasmostrando diversas
aplicações comerciais do Linux e estudos de caso.
http://www.linuxsecurity.com
Site sobre aspectos de seguranca em Linux
http://www.maplesoft.com
Software científicos (como o Maple) da Universidade
de Waterloo, Ontario, Canada.
http://www.ipv6.org
Informações sobre o protocolo IPv6
http://www.ietf.org
Site da força tarefa da Engenharia da Internet (Internet
Engineering Task Force). É uma comunidade internacional
que cuida da evolução da arquitetura da Internet
http://www.gnupg.org
Implementacão do OpenPGP, Pretty Good Privacy
http://pgp.mit.edu
Servidor público de chaves PGP do MIT
492
Entretenimento e Aprendizado
http://www.faqs.org/rfcs
Grande acervo de documentações e padrões, incluindo
os RFCs, Request for Comments. Contém links para
ISOC, IANA, IAB e outros.
http://www.linuxsupport.com.br
Dicas de configuração e suporte SuSE Linux
http://www.opensuse.org
Site da distribuição openSuSE, criada pela Novell
Bibliografia
493
Bibliografia
Livros e outras publicações
[AVRITZER]
Alberto Avritzer, Dissertação de Mestrado: "Um sistema
operacional com suporte para multiprocessamento e
tempo compartilhado", DCC-UFMG, 1983.
[CRYPT]
Neal Koblitz, A course in Number Theory and
Cryptograpy, Springer, Washington, USA, 1994.
[DNS_BIND]
Paul Albitz & Cricket Liu, DNS and Bind - 2nd edition,
O’Reilly & Associates, California, USA, 1996.
[FMBASTOS] Frederico M. Bastos, Dissertação de Mestrado: "Modelo
de Contabilização e Negociação de Preços para Serviços
com QoS", DCC-UFMG, 2003.
[HMARX]
Hélio Marques Sobrinho, Dissertaçao de Mestrado: "Um
processador central de 16 bits apropriado para
multiprocessamento", DCC-UFMG, 1986.
[INTFW]
D. Brant Chapman & Elizabeth D. Zwicky, Building
Internet Firewalls, O’Reilly & Associates, California,
USA, 1995.
[LPI101]
Emmett Dulaney, LPI: General Linux I - Exam 101,
Coriolis Group, Arizona, USA, 2001.
[LPI102]
Emmett Dulaney, LPI: General Linux II - Exam 102,
Coriolis Group, Arizona, USA, 2001.
494
Bibliografia
[MAXSEC1]
Anonymous, "Maximum Security", Sams Publishing,
USA, 1998.
[MAXSEC2]
Anonymous, "Linux Maximum Security", Sams
Publishing, USA, 2000.
[MINIX]
Andrew S. Tanenbaum & Al Woodhull, Operating
Systems: Design and Implementation - 2nd edition,
Prentice-Hall, USA, 2000.
[NAG]
Olaf Kirch, "Linux Network Administrator’s Guide",
SSC, USA, 1994.
[PGP]
Simson Garfinkel, PGP Pretty Good Privacy, O’Reilly
& Associates, , California, USA,1995.
[PPP]
Andrew Sun, Using and Managing PPP, O’Reilly &
Associates, California, USA, 1997.
[PRODNS]
Ron Aitchson, Pro DNS and BIND, Apress, New York,
USA, 2005.
[SENDMAIL] Bryan Costales & Erik Allman, Sendmail - 2nd edition,
O’Reilly & Associates, California, USA, 1997.
[SuSE80APP]
SuSE, SuSE Linux 8.0 Applications, SuSE Linux AG,
Nuremberg, Germany, 2002.
[SuSE80BAS] SuSE Linux AG, SuSE Linux 8.0 Basics, Nuremberg,
Germany, 2002.
[SuSE80REF]
SuSE, SuSE Linux 8.0 Reference, SuSE Linux AG,
Nuernberg, Germany, 2002.
[TCPADM]
Craig Hunt, TCP/IP Network Administration - 2nd
edition, O’Reilly & Associates, California, USA,1997.
Bibliografia
495
[UNIXSEC]
Simson Garfinkel & Gene Spafford, Practical UNIX &
Internet Security - 2nd edition, O’Reilly & Associates,
California, USA, 1996.
[VPN]
Charlie Scott & ali., Virtual Private Networks - 2nd
edition, O Reilly & Associates, California, USA, 1999.
[XWIN]
*, The Definitive Guides to the X Window System,
Volumes 0 a 8, O’Reilly & Associates, California, USA.
496
Bibliografia
Sites na Internet
http://www.kernel.org
Site oficial do kernel Linux, criado por Linus Torvalds
http://gnu.org
Projeto GNU da Free Software Foundation criado por Richard
Stallman
http://www.minix3.org
Site dedicado ao MINIX de Andrew S. Tanenbaum
http://www.linux.org
Página oficial do sistema operacional Linux. Há uma
lista de diversos aplicativos para o Linux
http://linmodems.org
Drivers de softmodems (conhecidos também como
Winmodems) para o Linux
http://www.ora.com
Página da editora O’Reilly especializada em livros tecnicos.
Possui muitos livros sobre Unix e Linux
http://www.suse.de
Site original da empresa alemâ SuSE Linux AG, criadora da
distribuição SuSE Linux. Atualmente é redirecionada para o site
da Novell
http://www.vmware.com
Os aplicativos de virtualização mais conhecidos e
utilizados no mundo
Bibliografia
497
http://www.hercules-390.org
http://www.jaymoseley.com/hercules/
Hercules, um emulador das arquiteturas IBM System/370,
ESA/390 e zSeries
http://sourceforge.net
Maior site de projetos Open Source
Exemplos: xine.sourceforge.net, bochs.sourceforge.net, ...
http://www.linas.org/linux
Parte do site de Linas Vepstasmostrando diversas
aplicações comerciais do Linux e estudos de caso.
http://www.linuxsecurity.com
Site sobre aspectos de seguranca em Linux
http://www.maplesoft.com
Software científicos (como o Maple) da Universidade
de Waterloo, Ontario, Canada.
http://www.ipv6.org
Informações sobre o protocolo IPv6
http://www.ietf.org
Site da força tarefa da Engenharia da Internet (Internet
Engineering Task Force). É uma comunidade internacional
que cuida da evolução da arquitetura da Internet
http://www.gnupg.org
Implementacão do OpenPGP, Pretty Good Privacy
http://pgp.mit.edu
Servidor público de chaves PGP do MIT
498
Bibliografia
http://www.faqs.org/rfcs
Grande acervo de documentações e padrões, incluindo
os RFCs, Request for Comments. Contém links para
ISOC, IANA, IAB e outros.
http://www.linuxsupport.com.br
Dicas de configuração e suporte SuSE Linux
http://www.opensuse.org
Site da distribuição openSuSE, criada pela Novell
Glossário
499
Glossário
AGP
ANSI
ARM
ARP
ASCII
ATA
BIND
BIOS
BOOTP
CHAP
CISC
CRISC
DDoS
DEC
DES
DHCP
Accelerated Graphics Port
American National Standards Institute
Advanced Risc Machine
Address Resolution Protocol
American Standard Code for Information Interchange
Advanced Technology Attachment (ou IDE)
Berkeley Internet Name Domain
Basic Input/Output System - Programa normalmente
gravado em uma ROM ou Flash que faz a carga e
interface de alguns Sistemas Operacionais com o
hardware.
Bootstrap Protocol
Challenge Handshake Authentication Protocol - Protocolo
de autenticação de utilizado em PPP que requer uma
pergunta e uma resposta
Complex Instruction Set Computer - Arquitetura
tradicional dos processadores e microprocessadores, com
instruções complexas como MUL EAX, [BX+4000] do
Intel 80386. Veja também RISC e CRISC
Complex/Reduced Instruction Set Computer - Arquitetura
mista parte RISC e parte CRISC, utilizada nos
processadores Intel Pentium atuais (II, III e IV)
Distributed Denial of Service - ataque distribuído causando
sobrecarga nos serviços
Digital Equipment Corporation - Empresa que projetou o
minicomputador PDP, cuja arquitetura ortogonal
influenciou muitos dos microprocessadores atuais.
Data Encryption Standard - Padrão de criptografia utilizada
pelo sistema de senhas padrão do Unix. Veja também MD5
Dynamic Host Configuration Protocol - protocolo de
configuração dinâmica de computadores (endereços,
nomes, DNS, boot, ...)
500
Glossário
DoD
DoS
DRAM
DMA
DMZ
EBCDIC
EISA
ESP
FAT
FIFO
GMT
GNU
HTTP
IAB
IANA
IDE
IESG
IETF
IKE
IPC
IPsec
IPX
IRQ
ISA
Department of Defense - Departamento de Defesa dos
Estados Unidos da América
Denial of Service - ataque causando sobrecarga nos
serviços. Veja também DDoS
Dynamic Random Access Memory
Direct Memory Access - Acesso direto à Memória
DeMilitarized Zone - Zona desmilitarizada
Extended Bynary-Coded-Decimal Interchange Code,
codificação utilizada em alguns mainframes como o B6700
e a série A da Unisys
Extended Industry Standard Architecture
Encapsulated Security Payload - protocolo para
autenticação e criptografia do IPsec
File Allocation Table - Tabela de alocação de arquivos
utilizada pelo DOS e Windows
First In First Out, também conhecido como PIPE, uma
estrutura de dados que implementa uma fila real.
Greenwich Mean Time - Horário padrão internacional do
meridiano 0, que passa pela cidade de Greenwich.
GNU is Not Unix
HyperText Transfer Protocol - Protocolo de transferência
de hipertexto
Internet Architecture Board
Internet Assigned Numbers Authority
Integrated Disk Electronics - Interface utilizada nos discos
padrão do PC. Também conhecida como ATA.
Internet Engineering Steering Group
Internet Engineering Task Force
Internet Key Exchange - protocolo de negociação de
chaves e parâmetros de conexão do IPsec.
InterProcess Communication
Internet Protocol Security
Internetwork Packet eXchange
Interrupt ReQuest - Sinal de requisição de interrupção para
o(s) processador(es) de um computador.
Insdustry Standard Architecture
Glossário
ISAKMP
ISOC
LDAP
LED
MD5
MIB
MIME
MIPS
MIPS
NBT
NCP
NetBIOS
NFS
NMB
NSA
PAP
PATA
PC
PCI
PCMCIA
PDP-11
Pixel
POP
501
Internet Security Association and Key Management
Protocol
Internet Society
Lightweighty Directory Access Protocol
Light Emitting Diode
Message Digest 5 - Algoritmo de autenticação e
criptografia atualmente muito utilizado em senhas do Unix
Management Information Base. Veja também SNMP
Multipurpose Internet Mail Extensions - Padrão de
encapsulamento de arquivos em e-mails
1Microprocessor without Interlocked Pipeline Stages 2Millions of Instructions Per Second - milhões de
instruções por segundo
NetBIOS over TCP/IP - Protocolo criado pela Microsoft
encapsulando o NMB sobre o TCP/IP para o Windows
NT/9x tornando o NetBIOS roteável através de IP
Netware Core Protocol
Network Basic Input/Output System
Network File System - Sistema de arquivos em rede
Servidor de nomes para o NetBIOS.
National Security Agency - Agência Nacional de
Segurança
Password Authentication Protocol - Protocolo de
autenticação utilizado em PPP através de um usuário e
senha.
Parallel ATA - veja IDE
Personal Computer - Computador pessoal. Termo criado a
partir dos microcomputadores e popularizado com o
lançamento do microcomputador IBM-PC
Peripheral Component Interconnect
Personal Computer Memory Card Industry Association
Programmed Data Processor - Minicomputador da Digital
Equipment Corporation utilizado nas primeiras versões do
Sistema Operacional Unix
Picture Element - cada ponto na tela representado por n
bits, permitindo assim até 2n cores
Post Office Protocol
502
Glossário
PPP
PPTP
QoS
RAM
RARP
RIP
RISC
ROM
RPC
RPM
RSA
RT-11
SAS
SATA
SCSI
SGID
SMB
SMP
SMTP
SNMP
SPOOL
SSL
SUID
SuSE
SVGA
SWAP
URL
USB
VESA
VFAT
Point-to-Point Protocol - Protocolo ponto a ponto, muito
utilizado tanto em conexões discadas quanto dedicadas
Point-to-Point Tunneling Protocol
Quality of Service
Random Access Memory
Reverse Address Resolution Protocol - veja ARP
Routing Information Protocol
Reduced Instruction Set Computer
Read Only Memory - memória apenas de leitura.
Remote Procedure Call - chamada remota de procedimento
RedHat Package Manager
Rivest, Shamir & Adleman - Iniciais dos criadores do
esquema de autenticação/criptografia de chave pública
Sistema operacional Real Time para o PDP-11 da DEC
Serial Attached SCSI - veja SCSI
Serial ATA - veja ATA / IDE
Small Computer Systems Interface - Interface de discos
muito utilizada em servidores e estações profissionais de
trabalho
Set Group IDentification
Server Message Block
Symetric Multi Processing
Simple Mail Transfer Protocol
Simple Network Management Protocol. Veja também MIB
Simultaneous Peripheral Operations On-Line
Secure Sockets Layer
Set User IDentification
Software und Systeme Entwicklung (Desenvolvimento de
software e sistemas) - Sigla da Empresa alemã criadora da
distribuição SuSE Linux
Super VGA
Área de memória virtual, normalmente em disco
Uniform Resource Locator
Universal Serial Bus
Video Electronics Standards Association
Virtual File Allocation Table
Glossário
XDR
VGA
WiFi
WWW
WUXGA
WXGA
XGA
503
eXternal Data Representation. Veja também RPC
Video Graphics Array
Wireless Fidelity
World Wide Web
Wide Ultra Extended Graphics Array
Wide XGA
eXtended VGA
504
505
Índice Remissivo
Índice Remissivo
A
Andrew S. Tanenbaum
ASN.1 389
9
B
Backup 108
bunzip2 109
bzcat 109
bzip2 109
compress 110
fita magnética 110
gunzip 109
gzip 109
mt 110
tar 108
unzip 108
zcat 109
zip 108
Bash 42
Expansão de parâmetros 45
history 104
meta-teclas 105
redirecionamento de E/S 111
Separador
; 112
Separador de comandos 112
variáveis 42
Variáveis padrão 43
BGP 389
Boot do Linux 159
configuração do GRUB 166
configuração do LILO 165
Bridges 382
C
Calamaris 301
Comandos
ajuda
help 47
info 48
man 47
algébricos
bc 69
expr 68
arquivos
basename 103
cat 57
cp 56
dd 106
dirname 103
discos 106
file 102
find 99
head 57
less 73
Índice Remissivo
ln 72
locate 99
more 73
mv 71
od 58
patch 59
rm 71
split 107
tail 58
tee 57
touch 72
type 102
updatedb 99
which 102
case 122
diretório
cd 54
dirs 55
ls 51
mkdir 53
popd 55
pushd 54
pwd 49
rmdir 53
discos
df 90
du 90
hash 48
impressão
a2ps 89
lpq 88
lpr 88
lprm 89
pr 88
memória
free 91
top 95
permissões
506
chgrp 100
chmod 101
chown 100
processos
% 93
at 93
atq 93
atrm 93
bg 93
crontab 94
fg 93
GNU time 97
jobs 93
kill 96
killall 96
nice 96
pidof 92
ps 92
pstree 92
renice 97
sudo 81
time 97
top 95
xargs 98
rehash 48
select 124
sistema
top 95
uname 83
terminais
setterm 84
stty 85
tty 83
texto
. 50
awk 65
cut 74
diff 77
507
diff3 77
echo 49
ex 73
grep 62
join 75
paste 74
read 49
sed 63
sort 76
source 50
strings 60
tr 60
uniq 76
vi 73
wc 59
until 122
usuários
finger 79
gpasswd 82
id 79
last 78
newgrp 81
passwd 80
sg 81
su 81
w 78
who 78
Comandos administrativos 125
chfn 130
chsh 130
depmod 149
dmesg 154
edquota 139
fdisk 132
groupadd 128
groupdel 128
groupmod 129
init 34
Índice Remissivo
insmod 147
iptraf 231
isapnp 146
lsdev 146
lsmod 147
lspci 144
lsusb 144
mkdosfs 134
mke2fs 133
mkfs 133
mknod 131
mkreiserfs 135
mkswap 135
modinfo 151
modprobe 150
mount 141-142
nmap 231
pnpdump 145
quota 137
quotacheck 140
quotaoff 138
quotaon 137
repquota 138
rmmod 148
rpcinfo 231
rpm 170
atualização de pacotes
174
consulta de pacotes
176
criando pacotes 182
instalação de pacotes
173
remoção de pacotes
175
utilzando o smart 179
utilzando o zypper 178
Índice Remissivo
verificação de
autenticidade 172
verificação de pacotes
170
setquota 139
snort 231
socklist 231
swapoff 136
swapon 135-136
syslogd 155
ulimit 125
umask 125
umount 143
usbview 145
useradd 126, 128
userdel 128
usermod 129
Comandos básicos 47
Comandos condicionais 120
if/then/elif/then/.../fi 121
if/then/else/fi 120
if/then/fi 120
test 124
Comandos iterativos 122
for 122
while 122
compilação 413
Configuração do kernel 335
Correio eletrônico 308
anti-virus 318
MTA 308
MUA 308
POP 311
Protocolos 311, 313
sendmail 312
Configuração 314
SMTP 311
508
D
Depuração
ddd 402
gdb 402
kdbg 402
ltrace 403
strace 403
Desenvolvimento
gcc 400
kdevelop 401
ldd 402
qtdesigner 401
Diretório 22
Dispositivos 27
DNS 247
BIND 252
Configuração 264
Registros 252
Segurança 267
Ferramentas
dnsdomainname 269
dnsquery 270
nslookup 269
Ferramentas de diagnóstico
269
dig 270
dnsquery 270
host 270
named-xfer 271
traceroute 270
Lendo nomes de domínios 250
Resource Record 253
RR 253
Servidores de Nomes 251
Domínios 245
DNS 247
LDAP 278
509
Índice Remissivo
NIS
272
entidades
getty 35
GPL 1
E
Emuladores
dosemu 406
pose 409
simh 410
vmware 408
wine 406-407
H
Hard link 22
hardware 378
Histórico - do Unix ao Linux 8
Histórico da Computação 3
hot-swap 15
Hubs 382
F
Firewall 349
filtros 350
Implementação 351
ipchains 352
iptables 355
NAT 351
SuSEfirewall 358
Firewalls 395
Formato de arquivos
/etc/passwd 126
/etc/shadow 127
/etc/syslog.conf 152
crontab 94
inittab 32
FSF 1
FTP 319
Clientes 319
Configuração 319
Servidores 319
Funcionalidades 382
fuser 403
I
G
Gerenciamento 383
Áreas funcionais ISO
aspectos 384
atribuições 385
385
383
ICMP 388
IGMP 388
inetd 212
init 31
inode 18
inodo 18
Instalacão do Linux 160
Instalacão de Aplicativos 168
Instalacão do Linux 157
Instalação física
incêndio 380
temperatura 380
umidade 380
Interconectividade 328, 333-334
Apple Macintosh 334
Netware
ncpfs 333
Internet
estatísticas 247
Órgãos reguladores 249
Internet e Intranet 196, 243
Interpretador de comandos 39
ipcs 403
Índice Remissivo
510
L
LDAP
278
Definições 278
Esquemas 279
Hierarquia 279
LDIF 280
servidor 281
utilização 285
LILO 159
Linus Torvalds 9
login shell 35
Logs 397
lsof 403
M
make 414
Mensagens do sistema Linux 152
Metacaracteres 41
MIB 389
Minix 9
Modems 382
Módulos de dispositivos e serviços
144
mount point 20
MTBF 387
MTTF 387
MTTR 387
MULTICS 7
Multitarefa 15
Multiusuário 15
N
NIS
272
cliente/servidor 272
Configuração 272
domainname 274
ypcat 276
ypchfn 275
ypchsh 275
ypdomainname 274
ypmatch 276
yppasswd 275
yppasswdd 273
ypwhich 274
O
openSuSE 10
Operadores
condicional
&& 121
|| 121
Execução condicional 121
Expressões aritméticas 116
Expressões condicionais 118
Grupo de comandos 114
Pipeline 112
Processos em background 113
& 113
Processos em subshell 114
substituição de comandos 115
| 112
OSPF 389
Outros aplicativos 395
P
Pacotes RPM 417
path 22
PDP-11 8
peopleware 378
Plakalkül 4
POSIX 16
PPP 321
Conexão ADSL 326
Conexão discada 322
Conexão por demanda 325
511
prompt 39
Protocolo PPP 320-321
Configuração 321
Protocolos e métodos 387
Índice Remissivo
Servidor HTML
Apache 287
Configuração 287, 296
controle de acesso 291
logs de acesso 290
R
métodos 291
Redes em Unix 207
parâmetros globais 288
IPv4 217
servidor principal 289
Classes 218
sites virtuais 294
Endereços especiais
proxy 298
218
squid 287
Endereços privados
webalizer 297
219
Servidor WEB 287
Roteamento 222
Sessões 36
IPv6 239
Sessões remotas 320
Subclasses 221
SSH 320
TCP/IP 207
Xterminals 320
Ferramentas 224
Shell 39
Redirecionamento 237 Sistema de arquivos 18
Serviços 211
Sistemas de arquivos
Richard Stallman 1
/proc 14, 25
Roteadores 382
SLES
rpcinfo 403
SuSE Linux Enterprise 11
SMART 17
S
SMP
S.M.A.R.T. 17
Symetric Multi Processing 13
Samba 330
SNMP 389
Segurança 341
Aplicativos 392
Ataques 346
snmpdelta 392
Cavalos de Tróia 342
snmpget 392
Ferramentas 347
snmpinform 392
PGP 368
snmpnetstat 392
Virus 345
snmpset 392
VPN 362, 365, 374, 377
snmpstatus 392
configuração 364
snmptable 392
FreeSwan 364
snmptest 392
Sendmail
snmptranslate 392
Configuração manual 317
snmptrap 392
Índice Remissivo
512
squidGuard 307
super usuário 36
SuSE ix
Switches 382
Symbolic link 22
T
TCP/IP
Ferramentas
arp 229
ethereal 234
geoiplookup 230
ifconfig 224
ip 227
ipcalc 230
netstat 228
ping 225
rarp 229
route 226
tcpdump 231
traceroute 231
xtraceroute 234
Tratamento de sistemas de arquivos
131
X
X Window 185
desktop manager 186
Gerenciadores de janelas
afterstep 193
amiwm 193
CDE 193
fvwm 193-194
fvwm95 193
Gnome 193
icewm 194
KDE 193
mlvm 193
193
qvwm 194
twm 194
windowmaker 194
Protocolo X11 185
window manager 186
desktops virtuais 186
X server 186
XFree86 189, 191
SuperProbe 190
XF86Setup 190
xinetd 213