366
Sistema Operacional GNU/Linux ® Hélio Marques Sobrinho

booklinux-a4

Embed Size (px)

Citation preview

Page 1: booklinux-a4

Sistema OperacionalGNU/Linux ®

Hélio Marques Sobrinho

Page 2: booklinux-a4

Sistema Operacional GNU/Linux 2

Page 3: booklinux-a4

Sistema Operacional GNU/Linux 3

Sistema Operacional GNU/Linux:Instalação, Configuração, Utilização

e Administração

Hélio Marques Sobrinho

Belo Horizonte

Page 4: booklinux-a4

Sistema Operacional GNU/Linux 4

Marques Sobrinho, Hélio.Sistema Operacional GNU/Linux:Instalação,

Configuração, Utilização e Administração / Hélio Marques . Belo Horizonte - MG - 2010.

Edição: Hélio MarquesRevisão de texto: Starix Informática, R2M Studio Design, e Hélio MarquesEditoração eletrônica: InterLinux, Hélio MarquesProdução gráfica: Capa:

Page 5: booklinux-a4

Sistema Operacional GNU/Linux 5

Copyright © 2001-2010 Helio Marques Sobrinho

Este material é de propriedade de Hélio Marques é utilizado nos cursos ministrados por ele, proibida sua reprodução sem sua autorização por escrito. Foi produzido utilizando o ApplixWare SuSE Linux.

Linux é marca registrada de Linus Torvalds.SuSE, openSuSE e YaST são marcas registradas de Novell Inc.Unix é marca registrada de X/Open Company Limited.XFree86 é marca registrada de The XFree86 Project.Xorg é marca registrada do XConsortion.MS-DOS, Windows, Windows NT , Windows 95, Windows 98, Windows Me, Windows

Windows XP e outros são marcas registradas da Microsoft Corporation.

Outros produtos citados neste material podem ter suas marcas registradas por seus respectivos fabricantes.

Hélio Marques Sobrinhohttp://www.linuxsupport.com.bre-mail: [email protected]

Page 6: booklinux-a4

Sistema Operacional GNU/Linux 6

Revisões

1.00 abril/2001 Starix - versão inicial c/ ~ 100 páginas1.01 maio/2001 Interlinux (http://www.interlinux.com.br)1.02 junho/2001 Starix - inclusão de capítulos1.03 julho/2001 Starix - inclusão de capítulos1.04 junho/2002 Starix - inclusão de capítulos2.00 julho/2002 Starix - reformatação e atualização2.01 novembro/2002 R2M Studio Design - revisão e imagens3.00 janeiro/2003 Starix - inclusão de capítulos3.01 abril/2003 Starix - inclusão capítulo gerenciamento3.02 maio/2003 Starix - configuração do apache3.03 fevereiro/2004 Starix - atualização e mais tópicos3.04 julho/2004 Starix - atualizações e mais tópicos3.05 setembro/2005 Starix - atualizações e mais tópicos3.06 novembro/2006 HMarx - atualizações e mais tópicos4.00 novembro/2008 HMarx - remoção de referências à Starix4.01 junho/2009 HMarx - atualizações e mais capítulos4.02 dezembro/2009 HMarx - inclusão capítulo jogos4.03 janeiro/2010 HMarx - revisão e mais ópicos

Page 7: booklinux-a4

Sistema Operacional GNU/Linux 7

Sobre os autores

Hélio Marques SobrinhoEngenheiro Eletricista pela EE-UFMG

Ênfase em Eletrônica IndustrialMestre em Ciência da Computação pelo DCC-UFMG

Ênfase em Tecnologia de Hardware

Agradecimentos

Agradeço a colaboracão dos seguintes profissionais, que me auxiliaram na concepcão deste livro:

Flávia de Castro Mendes MarquesBacharel em Ciência da Computação pelo DCC-UFMG

Ênfase em Software Básico

Frederico Machado BastosBacharel em Ciência da Computação pela PUC-MGMestre em Ciência da Computação pelo DCC-UFMG

Ênfase em Gerenciamento de Redes

Breno Silveira SoaresBacharel em Ciência da Computação pela PUC-MGLPI Certified

Page 8: booklinux-a4

Sistema Operacional GNU/Linux 8

Convenções tipográficas

Neste livro são utilizadas as seguintes convenções:

Convenção Uso Exemplonegrito indica um comando a ser digitado

ou de uma funçãoman lsstartx()

itálico palavras em um idioma diferente do português

O kernel do Linux

reticências ( ... ) indica repetição dos argumentos ls [ opcões ] [ arq ... ]colchetes ( [ ] ) itens opcionais ls [ opcões ] [ arq ... ]chaves ( { } ) itens alternativos route { add | del } ...asterisco ( { }* ) permite mais de uma alternativa { u | g | o | a} *barra vertical ( | ) separador das opções alternativas route { add | del } ...

courier nome de um arquivo ou diretório /usr/src/linux

itálico-sublinhado valor ou opção que deve ser substituído pelo valor real ou por uma constante

--radix=r¦+D pressionar as teclas dadas simultaneamente

¦+D

Page 9: booklinux-a4

PrefácioSistema Operacional GNU/Linux 9

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 torno de 1988 como nome do sistema operacional Unix-like para o supermicrocomputador DCC-2600, a ser desenvolvido como trabalho de mestrado da Flávia no Departamento de Ciência da Computação da UFMG - DCC.

O DCC-2600 foi meu projeto de mestrado no DCC, iniciado em 1982 e concluido em 1986 sob a orientação do Dr. Wilson P. Pádua, e consistia de um sistema multiprocessado SMP utilizando processadores 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 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 Micnet® do SCO Xenix®, permitindo troca de arquivos, mail e execução remota entre o DOS e o Xenix. Adquirimos em 1985, o PCNX® da Wendin Inc., que era 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.

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 micnicomputador DEC PDP-11, e posteriormente, por falta de um compilador Modula-2, traduzido para Turbo Pascal. As compilações e testes eram feitas durante o desenvolvimento do hardware do DCC-2600.

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 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 1988 um projeto para criar um 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 Star-ix e diversos aplicativos estariam rodando no DCC-2600, ou mesmo no DCC-2800 (que seria uma evolução do DCC-2600 utilizando processadores Intel 80386) no início de 1990 e estaria entre os sistemas open source como o Linux e o FreeBSD.

Page 10: booklinux-a4

Sistema Operacional GNU/Linux 10

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.

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.

Page 11: booklinux-a4

Sistema Operacional GNU/Linux 11

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.

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 Marquesjam/2010

Page 12: booklinux-a4

Sistema Operacional GNU/Linux 12

Page 13: booklinux-a4

Conteúdo

Sistema Operacional GNU/Linux 13

Prefácio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Conteúdo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131. Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . 15

O que é Linux ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Histórico da Computação . . . . . . . . . . . . . . . . . . . . . . 16Histórico - do Unix ao Linux . . . . . . . . . . . . . . . . . . . 20

2. Hardware e Arquitetura. . . . . . . . . . . . . . . . 23Arquitetura dos Sistemas Unix-Like. . . . . . . . . . . . . . 25Dispositivos de armazenamento . . . . . . . . . . . . . . . . . 26Sistema de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . 26Diretórios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Alguns diretórios padrão do SVR4 e do Linux. . . . . . 30Alguns arquivos padrão. . . . . . . . . . . . . . . . . . . . . . . . 30O sistema de arquivos /proc . . . . . . . . . . . . . . . . . . . . 31Dispositivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Dispositivos Especiais. . . . . . . . . . . . . . . . . . . . . . . . . 33Dispositivos Padrão. . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3. Iniciando o Linux . . . . . . . . . . . . . . . . . . . . 37Do boot ao Login. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Tabela de ações utilizadas no initttab . . . . . . . . . . . . . 38Níveis de execução padrão . . . . . . . . . . . . . . . . . . . . . 38Sessões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4. Utilizando o Linux. . . . . . . . . . . . . . . . . . . . 43Interpretador de comandos . . . . . . . . . . . . . . . . . . . . . 43Metacaracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45O Bash - Bourne-Again Shell . . . . . . . . . . . . . . . . . . . 46Comandos básicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Meta-teclas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Backup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Operadores do bash. . . . . . . . . . . . . . . . . . . . . . . . . . . 96Comandos Administrativos. . . . . . . . . . . . . . . . . . . . 106

Page 14: booklinux-a4

Sistema Operacional GNU/Linux 14

Tratamento dos Sistemas de Arquivos . . . . . . . . . . . 110Módulos de dispositivos e serviços. . . . . . . . . . . . . . 120Mensagens do sistema Linux . . . . . . . . . . . . . . . . . . 126

5. Instalando o Linux. . . . . . . . . . . . . . . . . . . 129Instalação do Linux. . . . . . . . . . . . . . . . . . . . . . . . . . 129O Boot do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Instalação do SuSE Linux. . . . . . . . . . . . . . . . . . . . . 131Instalação de outros aplicativos no Linux. . . . . . . . . 138Utilizando o RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

6. O Sistema X Window . . . . . . . . . . . . . . . . 149O Sistema X Window . . . . . . . . . . . . . . . . . . . . . . . . 149O X Window no Linux . . . . . . . . . . . . . . . . . . . . . . . 152Configuração do XFree86. . . . . . . . . . . . . . . . . . . . . 153Gerenciadores de janelas. . . . . . . . . . . . . . . . . . . . . . 154O KDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

7. Redes em Unix. . . . . . . . . . . . . . . . . . . . . . 165Redes em Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Servidores, Estações e Terminais . . . . . . . . . . . . . . . 171Endereçamento IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . 172Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174Roteamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175Ferramentas para configuração e diagnóstico. . . . . . 176Endereçamento IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . 184Internet e Intranet . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

8. Serviços de Redes . . . . . . . . . . . . . . . . . . . 187Domínios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187DNS - Domain Name System. . . . . . . . . . . . . . . . . . 189Software DNS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193NIS - Network Information System . . . . . . . . . . . . . 207LDAP - Lightweight Directory Access Protocol. . . . 211Servidor WEB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Servidor de proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . 227Correio eletrônico - e-mail . . . . . . . . . . . . . . . . . . . . 234Protocolos de e-mail . . . . . . . . . . . . . . . . . . . . . . . . . 236Configuração do sistema de e-mail. . . . . . . . . . . . . . 238Configuração do sendmail. . . . . . . . . . . . . . . . . . . . . 238

Page 15: booklinux-a4

Sistema Operacional GNU/Linux 15

FTP - File Transfer Protocol . . . . . . . . . . . . . . . . . . . 243Sessões remotas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244PPP - Point to Point Protocol . . . . . . . . . . . . . . . . . . 245Comunicação e Telefonia . . . . . . . . . . . . . . . . . . . . . 250Interconectividade. . . . . . . . . . . . . . . . . . . . . . . . . . . 251Interconectividade DOS/Windows . . . . . . . . . . . . . . 251Interconectividade Novell® Netware®. . . . . . . . . . . 255Interconectividade Apple® Macintosh®. . . . . . . . . . 256

9. O Kernel Linux . . . . . . . . . . . . . . . . . . . . . 257Configuração do kernel Linux. . . . . . . . . . . . . . . . . . 257

10. Segurança . . . . . . . . . . . . . . . . . . . . . . . . 261Segurança no Linux. . . . . . . . . . . . . . . . . . . . . . . . . . 261Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265VPN - Virtual Private Network. . . . . . . . . . . . . . . . . 274PGP - Pretty Good Privacy . . . . . . . . . . . . . . . . . . . . 278Critérios de segurança do DoD . . . . . . . . . . . . . . . . . 281Mantendo o sistema seguro. . . . . . . . . . . . . . . . . . . . 283

11. Gerência de Redes em Linux . . . . . . . . . . 285Instalação física. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286Gerenciamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288SNMP e MIB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

12. Ambiente de Execução e Desenvolvimento de Aplicativos em Linux. . . . . . . . . . . . . . . . . . . 299

Formato de arquivos executáveis . . . . . . . . . . . . . . . 303Executando programas para Windows no Linux. . . . 304Emuladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305Compilando fontes de aplicativos no Linux . . . . . . . 310Os arquivos Makefile . . . . . . . . . . . . . . . . . . . . . . . . 311Gerando pacotes RPM. . . . . . . . . . . . . . . . . . . . . . . . 312Exemplo de pacote RPM. . . . . . . . . . . . . . . . . . . . . . 314

13. Expressões Regulares . . . . . . . . . . . . . . . 319Expressões Regulares . . . . . . . . . . . . . . . . . . . . . . . . 319

14. O Editor de Textos VI. . . . . . . . . . . . . . . 321O editor de textos vi . . . . . . . . . . . . . . . . . . . . . . . . . 321Opções do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

Page 16: booklinux-a4

Sistema Operacional GNU/Linux 16

15. Criando Disquetes de Boot . . . . . . . . . . . 327Criando Disquetes de Boot . . . . . . . . . . . . . . . . . . . . 327

16. Sistemas de Numeração . . . . . . . . . . . . . . 33117. Introdução à Computação Forense. . . . . . 332

Conceitos iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Procura por evidências . . . . . . . . . . . . . . . . . . . . . . . 334Plano de batalha . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334Reconstrução das fábulas . . . . . . . . . . . . . . . . . . . . . 334Quem contactar ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . 335Investigação na prática . . . . . . . . . . . . . . . . . . . . . . . 335

18. Entretenimento e Aprendizado. . . . . . . . . 337Linux também é cultura e diversão !. . . . . . . . . . . . . 337

Bibliografia. . . . . . . . . . . . . . . . . . . . . . . . . . . 349Livros e outras publicações. . . . . . . . . . . . . . . . . . . . 349Sites na Internet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

Glossário. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353Índice remissivo . . . . . . . . . . . . . . . . . . . . . . . 356

Page 17: booklinux-a4

1. IntroduçãoSistema Operacional GNU/Linux 17

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.

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.

Page 18: booklinux-a4

Sistema Operacional GNU/Linux 18

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.

Histórico da ComputaçãoA 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.

Provavelmente o primeiro computador feito pelo homem foi Stonehenge (Salisbury, UK). Sua construção é estimada entre 2600 e 1799 AC.

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.

m 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.

Page 19: booklinux-a4

Von Newman e o EDVAC

Sistema Operacional GNU/Linux 19

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, W. S. Burroughs construiu a primeira máquina com teclado para somar e imprimir. Neste mesmo ano, Hollerith construiu uma máquina tabuladora com cartões de papel perfurados para realizar o censo dos EUA. Sua empresa foi transformada na IBM em 1924.

Em 1937, Howard Aiken construiu uma avançada máquina para cálculos integrais e diferenciais, o Mark I. Este seria o primeiro computador programável.

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, Plakalkü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 Pentium atuais.

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).

E 1948, surge o EDVAC (Electronic Discrete Variable Automatic Computer).

Em 1951, é produzido o primeiro computador comercial: o UNIVAC I.

Page 20: booklinux-a4

Sistema Operacional GNU/Linux 20

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.

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/M-80, 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).

Page 21: booklinux-a4

Sistema Operacional GNU/Linux 21

O finlandês Linus Torvalds cria o Linux em 1991. Tendo os fontes disponíveis gratuitamente, o Linux acompanha então a evolução dos processadores, utilizando o máximo dos recursos do computador. 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 da IBM

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.

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. Também em 2005 é anunciado o Windows Vista, lançado em 2006. Em 2009 foi lançado o Windows 7.

Page 22: booklinux-a4

Sistema Operacional GNU/Linux 22

Histórico - do Unix ao LinuxO 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 version of 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.

Abaixo, uma foto histórica de Dennis Ritchie (em pé) e Ken Thompson utilizando um PDP-11.

Page 23: booklinux-a4

Sistema Operacional GNU/Linux 23

A partir daí, após a 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, Linus Torvalds (à esquerda), inspirado no sistema operacional Minix de Andrew 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 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.

Page 24: booklinux-a4

Sistema Operacional GNU/Linux 24

Linha de produtos da Novell

A Novell disponibiliza diversos produtos baseados em SuSE Linux Enterprise. Alguns deles são descritos abaixo.

SuSE Linux Enterprise ServerServidor corporativo altamente estável, seguro e escalável

SuSE Linux Enterprise High availability extesionConjunto 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 DesktopAmbiente seguro e fácil de usar para as estações de trabalho suportando ampla gama de dispositivos e diversos aplicativos.

SuSE Linux Enterprise Thin ClientSolução Linux corporativa segura e de baixo custo para a utilização de estações leves.

SuSE Linux Enterprise JeOSUma 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.

Page 25: booklinux-a4

2. Hardware e ArquiteturaSistema Operacional GNU/Linux 25

O sistema operacional 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.

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.

Page 26: booklinux-a4

Sistema Operacional GNU/Linux 26

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 Informa ção/proc/cpuinfo Modelo e características do(s) processadore(s)/proc/ioports Portos de E/S/proc/interrupts Interrupções e dispositivos associados/proc/dma Canais de DMA utilizados/proc/meminfo Memória principal e swap/proc/devices Dispositivos tipo caracter e bloco/proc/scsi/* Barramentos e dispositivos SCSI /proc/ide/* Barramentos e dispositivos IDE/proc/modules Módulos carregados/proc/iomem Mapa de memória principal e de dispositivos/proc/bus/* Barramentos e dispositivos (USB, PCI, PCMCIA, ISA, ...)/proc/driver/* Dispositivos especiais (RTC, nvidia, thinkpad, ...)

Page 27: booklinux-a4

Sistema Operacional GNU/Linux 27

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.

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.

Page 28: booklinux-a4

Sistema Operacional GNU/Linux 28

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).

Page 29: booklinux-a4

Sistema Operacional GNU/Linux 29

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.

Sistema de ArquivosO 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.

Page 30: booklinux-a4

hmarx@thor:~ > ls -lid Diretorio 8392 drwxr-xr-x 2 hmarx starix 1024 Mar 24 10:07 Diretorio hmarx@thor:~ > ls /home analia breno flavia fred hmarx www hmarx@thor:~ > oSistema Operacional GNU/Linux 30

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

As informações do inodo podem ser vistas através do comando ls:

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.

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.

Page 31: booklinux-a4

Sistema Operacional GNU/Linux 31

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.

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.

Page 32: booklinux-a4

hmarx@thor:~/arqs > ls -la total 15 drwxr-xr-x 2 hmarx starix 1024 Feb 11 13:22 . drwxr-xr-x 111 hmarx starix 6144 Feb 11 09:34 .. -rwxr-xr-x 2 hmarx starix 8273 Feb 11 13:22 Arquivo Normal drw-r--r-- 2 hmarx starix 1024 Mar 24 08:35 Diretorio crw-r--r-- 1 hmarx starix 30, 40 Mar 24 08:35 Dispositivo prw-r--r-- 1 hmarx starix 0 Mar 24 08:40 FIFO lrwxrwxrwx 1 hmarx starix 11 Mar 24 09:08 Link p sh -> /usr/sh hmarx@thor:~/arqs > oSistema Operacional GNU/Linux 32

DiretóriosUm 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 sub-diretó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.

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

Page 33: booklinux-a4

✍ É 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/

Sistema Operacional GNU/Linux 33

Alguns diretórios padrão do SVR4 e do Linux

/ diretório raiz/bin utilitários padrão/boot arquivos utilizados no boot do Linux/dev dispositivos/etc configuração do sistema/usr utilitários da plataforma, interface X Window, .../tmp arquivos temporários/usr/bin outros utilitários gerais/usr/spool ou/var/spool spool de impressão, mail, fax, .../sbin boot, configuração e administração/etc/rc.dou/etc/init.d

scripts de inicialização

/optou/usr/local

utilitários ou arquivos opcionais

/var/log arquivos de log do sistema (kernel e serviços)/proc diretório virtual com informações do kernel Linux

Alguns arquivos padrão/vmlinuz ou boot/vmlinuz kernel do Linux (o z indica que o kernel está comprimido)/var/spool/mail/username caixa postal do usuário username/etc/passwd descrição dos usuários locais do sistema/etc/shadow senhas dos usuários locais do sistema/etc/group descrição dos grupos/etc/inittab serviços definidos para cada nível de execução/etc/fstab sistemas de arquivos montáveis/etc/printcap configuração das impressoras/etc/syslog.conf configuração do syslogd/etc/lilo.conf configuração do LILO (LI nux LOader)/boot/initrd RAM disk para a inicialização do Linux/boot/grub/menu.lst configuração do GRUB (GRand Unified Bootloader)

Page 34: booklinux-a4

Sistema Operacional GNU/Linux 34

Page 35: booklinux-a4

hmarx@thor:~> cat /proc/filesystemsnodev rootfsnodev bdevnodev procnodev sockfsnodev tmpfsnodev shmnodev pipefs ext2 minix iso9660nodev nfsnodev devpts vfat hmarx@thor:~> oSistema Operacional GNU/Linux 35

O sistema de arquivos /procAlé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 Informações/proc/sys/* Parâmetros do kernel e serviços

/proc/net/* Parâmetros de rede

/proc/filesystems Sistemas de arquivos suportados pelo kernel

/proc/swaps Áreas de swap em uso

/proc/stat Estatísticas do kernel

/proc/slabinfo Informações sobre gerenciamento de recursos

/proc/pid/* Informações sobre o processo de PID pid

/proc/self/* Informações sobre o processo corrente

/proc/partitions Partições de disco reconhecidas pelo kernel

/proc/config.gz Configuração geral do kernel na compilação

/proc/version Versão do kernel e dados sobre a compilação

/proc/cmdline 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 !

Por exemplo, para obter a informações sobre quais sistemas de arquivos o kernel suporta, com os módulos carregados no momento, utilizamos:

Page 36: booklinux-a4

hmarx@thor:~> cat /proc/self/status Name: catState: R (running)Tgid: 9267Pid: 9267PPid: 7779TracerPid: 0Uid: 3001 3001 3001 3001Gid: 3000 3000 3000 3000FDSize: 256Groups: 3000 6 14 16VmSize: 1544 kBVmLck: 0 kBVmRSS: 520 kBVmData: 36 kBVmStk: 24 kBVmExe: 12 kBVmLib: 1224 kBSigPnd: 0000000000000000SigBlk: 0000000080000000SigIgn: 8000000000000000SigCgt: 0000000000000000CapInh: 0000000000000000CapPrm: 0000000000000000CapEff: 0000000000000000hmarx@thor:~> oSistema Operacional GNU/Linux 36

Para saber as informações sobre o próprio processo cat durante sua execução, utilizamos:

Page 37: booklinux-a4

hmarx@thor:~/arqs > ls -l /dev/lp0 /dev/ttyS1 /dev/hda brw-rw-rw- 1 root disk 3, 0 Feb 04 19:50 /dev/hda crw-rw-rw- 1 root lp 6, 0 Feb 04 09:50 /dev/lp0 crw-rw-rw- 1 uucp uucp 5, 65 Mar 22 18:45 /dev/ttyS1 hmarx@thor:~/arqs > o hmarx@thor:~/arqs > ls -l /dev/xconsole /dev/log srw-rw-rw- 1 root root 0 Oct 25 01:44 /dev/log pr-------- 1 hmarx tty 0 Oct 28 17:50 /dev/xconsole hmarx@thor:~/arqs > oSistema Operacional GNU/Linux 37

DispositivosOs 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 - blocoIndica que as transferências de dados são em blocos (como os setores de um disco)

• c - caracterIndica 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, ...)

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.

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.

Page 38: booklinux-a4

Sistema Operacional GNU/Linux 38

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.

Exemplos de dispositivos mais comuns :

Tipo Arquivos em /devDiscos IDE em kernels antigos /dev/hda, /dev/hdb, /dev/hdc, ...Discos (SCSI, USB, IDE ou SATA) /dev/sda, /dev/sdb, /dev/sdc, ....Partições nos discos /dev/hda1, /dev/sdc2, ...Portas seriais (COM1, COM2, ...) /dev/ttyS0, /dev/ttyS1. ...Portas paralelas (LPT1, LPT2, ...) /dev/lp0, /dev/lp1, ...Terminais texto virtuais /dev/tty1, /dev/tty2, ...Disquetes (A:, B:, ...) /dev/fd0, /dev/fd1, ...XTerms ou terminais virtuais e remotos

/dev/pts/0, /dev/pts/1, ...

Page 39: booklinux-a4

hmarx@thor:~ > lsdevDevice DMA IRQ I/O Ports------------------------------------------------acpi 9cascade 4 2dma 0080-008fdma1 0000-001fdma2 00c0-00dfeepro100 1440-147fES1938 5ESS 1400-1407 14b0-14bf 14c0-14cf 14d8-14db 14dc-

14dfeth0 11fpu 00f0-00ffi82365 11ide0 14 01f0-01f7 03f6-03f6 14a0-14a7ide1 15 0170-0177 0376-0376 14a8-14afkeyboard 1 0060-006fparport0 0378-037a 037b-037fPCI 0cf8-0cff 1000-10ff 1400-143f 1440-147f 1480-

149f 14a0-14af 14b0-14bf 14c0-14cf 14d0-14d7 14d8-14db 14dc-14df 2180-219f 8000-803f 9000-9fff 9000-90ffpic1 0020-003fpic2 00a0-00bfPS/2 Mouse 12rtc 8 0070-007fserial 03f8-03fftimer 0 0040-005fvesafb 03c0-03dfusb-uhci 11 1480-149fhmarx@thor:~ > ohmarx@thor:~ > lsusbBus 002 Device 002: ID 05e3:070e Genesys Logic, Inc.Bus 002 Device 001: ID 0000:0000Bus 001 Device 002: ID 05a9:a511 OmniVision Technologies, Inc. OV511+ WebCamBus 001 Device 001: ID 0000:0000hmarx@thor:~ > oSistema Operacional GNU/Linux 39

O comando lsdev pode ser utilizado para ver as informações sobre o hardware instalado:

O comando lsusb pode ser utilizado para ver as informações sobre o barramento USB e dispositivos conectados instalado:

Veja mais detalhes destes comandos no capítulo 4, Utilizando o Linux.

Page 40: booklinux-a4

Sistema Operacional GNU/Linux 40

Page 41: booklinux-a4

3. Iniciando o Linux

Sistema Operacional GNU/Linux 41

Do boot ao LoginAo ser ligado (ou reiniciado) um computador do tipo PC, o primeiro programa a ser executado é o BIOS, 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 .

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.

Page 42: booklinux-a4

Sistema Operacional GNU/Linux 42

Tabela de ações utilizadas no initttabAção Significadorespawn O processo será redisparado se terminar.wait O init esperará o processo terminar.once O processo será executado na entrada do runlevel.boot O processo será executado durante o boot.bootwait O init esperará, no boot, o processo terminar.off Não será executado.ondemand O processo será executado sob demanda sem alterar o runlevel.initdefault Runlevel inicial após o boot.sysinit O processo será executado antes dos processos de boot.powerwait O processo será executado quando há queda de energia. O init irá

esperar o processo terminar.powerfail O processo será executado quando há queda de energia. O init não irá

esperar o processo terminar.powerokwait O processo será executado quando do retorno da energia.powerfailnow O processo será executado quando a bateria de uma UPS estiver quase

descarregada.resume O processo será executado quando o kernel informar ao init que a

máquina foi restaurada de um Suspend por software.ctrlaltdel O processo será executado quando for pressionada a sequência ¦+¥+Â.kbrequest O processo será executado quando for pressionada a sequência

definida no keymap como KeyboardSignal. O default é ¥+È.

Níveis de execução padrãorunlevel Significado

0 Pára o sistema (halt)1 Modo monousuário (single)2 Multiusuário sem rede3 Multiusuário com rede4 - não utilizado -5 Multiusuário, com rede e interface gráfica6 Reinicializa o sistema (reboot)A \B > Sob demandaC /I InicializaçãoS Modo supervisor - single (usado por scripts)

Page 43: booklinux-a4

id:5:initdefault:

l5:5:wait:/etc/init.d/rc 5

1:2345:respawn:/sbin/mingetty --noclear tty1

thor:~# init 5

Sistema Operacional GNU/Linux 43

Por exemplo, considerando a linha:

o init irá executar o definido pela linha do nível 5:

e demais linhas que contiverem 5 na segunda coluna, como:

que habilita o terminal 1 (/dev/tty1 ) , ativando um processo para login.

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/rc i .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/rc j .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.

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 AçãoSIGHUP Muda o runlevel para o contido no arquivo /etc/initrunlvl ou

/var/log/initrunlvlSIGUSR1 Fecha e reabre o /dev/initctrl (útil em scripts de inicialização que

remontam o /dev )SIGINT Ativa a ação ctrlaltdel (também quando pressionadas as teclas ¦+¥+Â)SIGWINCH Ativa a ação kbrequest

Page 44: booklinux-a4

Sistema Operacional GNU/Linux 44

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.

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.

Page 45: booklinux-a4

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:~ > oSistema Operacional GNU/Linux 45

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).

No modo texto, um início de sessão típico é:

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.

Page 46: booklinux-a4

Sistema Operacional GNU/Linux 46

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).

Para desligar o computador, deve-se dar 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, aparecerá uma janela na qual o usuário deverá, normalmente, informar a senha do root para poder confirmar a operação de Shutdown, desligando ou reiniciando o computador.

Page 47: booklinux-a4

4. Utilizando o Linux

Ä 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.

Sistema Operacional GNU/Linux 47

Interpretador de comandosO 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. 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.

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.

Page 48: booklinux-a4

hmarx@thor:~> alias ver=’uname -s -r’ hmarx@thor:~> ver Linux 2.4.10-64GB-SMP hmarx@thor:~> unalias ver hmarx@thor:~> oSistema Operacional GNU/Linux 48

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 = ls» opções = -l --inode» argumentos = /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.

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.

Page 49: booklinux-a4

hmarx@thor:~/docs> ls * chap1 chap2 chap3 programA programB1 programB2 hmarx@thor:~/docs> ls *[1-3] chap1 chap2 chap3 programB1 programB2 hmarx@thor:~/docs> ls *[!1-3] programaA hmarx@thor:~/docs> ls *[A-B]? programB1 programB2 hmarx@thor:~/docs> oSistema Operacional GNU/Linux 49

MetacaracteresAlguns caracteres ou seqüências de caracteres são tratados pelo shell e substituídos antes de

serem passados para o <comando>.

Alguns exemplos:

* qualquer cadeia de caracteres O shell expande conforme os arquivos presentes no diretório

? qualquer caracter[ <conjunto> ] um caracter do conjunto

Exemplo: [a-z] : letras minúsculas[ ! <conjunto> ] um caracter que não esteja presente no conjunto

Exemplo: [!0-9] : não seja um dígito

Exemplos:

Veja mais detalhes no capítulo Expressões Regulares.

Page 50: booklinux-a4

hmarx@thor:~/arqs> PESSOA=Heliohmarx@thor:~/arqs> EMPRESA="Starix Informatica"hmarx@thor:~/arqs> echo $PESSOA da $EMPRESAHelio da Starix Informaticahmarx@thor:~/arqs> echo "$PESSOA"Heliohmarx@thor:~/arqs> echo ’$PESSOA’$PESSOAhmarx@thor:~/arqs> oSistema Operacional GNU/Linux 50

O Bash - Bourne-Again ShellO 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 (‘ ´’ ).

Variáveis padrão

O bash possui algumas variáveis pré-definidas e que podem ser redefinidas pelo usuário.

Exemplos:

PATH caminho default para procura de executáveisPS1 prompt primárioPS2 prompt de continuação, indica que o comando anterior precisa de

complementoPS3 prompt do comando selectHOSTNAME nome do computadorHOME diretório pessoal do usuário, ou home directoryUSER username ou login do usuárioTERM modelo do terminal do usuário (linux, xterm, ansi, ...)LANG língua para mensagens e determinação de formatos de data e númerosCDPATH caminho para procura utilizado pelo comando cdIFS caracter separador de argumentos para $*

Page 51: booklinux-a4

hmarx@thor:~> dateFri Sep 23 20:39:37 BRT 2005hmarx@thor:~> LANG=pt_BR dateSex Set 23 20:39:39 BRT 2005hmarx@thor:~> dateFri Sep 23 20:39:42 BRT 2005marx@thor:~> oSistema Operacional GNU/Linux 51

O bash possui ainda variáveis que não podem ser redefinidas pelo usuário, como:

? status do último comando executado, em decimal! PID do último comando executado em background0 primeira palavra da linha de comando (o comando)

1 .. 9 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

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.

Page 52: booklinux-a4

Sistema Operacional GNU/Linux 52

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 Valor retornado${parâmetro} valor do parâmetro${parâmetro:-palavra} palavra se parâmetro nulo${parâmetro:=valor} se parâmetro nulo atribui valor ao parâmetro${parâmetro:?erro} Exibe erro se parâmetro for nulo${parâmetro:+palavra} palavra se o parâmetro não for nulo${parâmetro:offset} substring do parâmetro começando em offset${parâmetro:offset:tamanho-}

substring de tamanho caracteres do parâmetro começando em offset

${#parâmetro} número de caracteres do parâmetro${parâmetro#padrão} remove o menor texto, que bate com o padrão, do início do

valor do parâmetro${parâmetro##padrão} remove o maior texto, que bate com o padrão, do início do

valor do parâmetro${parâmetro%valor} remove o menor texto, que bate com o padrão, do fim do

valor do parâmetro${parâmetro%%valor} remove o maior texto, que bate com o padrão, do fim do

valor do parâmetro

Operadores extras (cont.)

Formato Valor retornado${parâmetro/padrão/texto} substitui a primeira ocorrência do

padrão no valor do parâmetro por texto

${parâmetro//padrão/texto} substitui todas as ocorrências de padrão no valor do parâmetro por texto

${! parâmetro} indireção : valor do valor do parâmetro

Page 53: booklinux-a4

hmarx@thor:~> unset Ahmarx@thor:~> echo ${A:-texto}textohmarx@thor:~> echo ${A:?Variável não definida}bash: A: Variável não definidahmarx@thor:~> A="Um texto muito longo"hmarx@thor:~> echo ${#A}20hmarx@thor:~> echo ${A:3:11}texto muitohmarx@thor:~> echo ${A/muito/quase}Um texto quase longohmarx@thor:~> A=/x/y/z/w/xhmarx@thor:~> echo ${A%/x}/x/y/z/whmarx@thor:~> echo ${A#/x}/y/z/w/xhmarx@thor:~> A=Bhmarx@thor:~> B=1234hmarx@thor:~> echo $ABhmarx@thor:~> echo ${!A}1234hmarx@thor:~> oSistema Operacional GNU/Linux 53

Exemplos:

Page 54: booklinux-a4

hmarx@thor:~> help casecase: case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac Selectively execute COMMANDS based upon WORD matching PATTERN.The ‘|’ is used to separate multiple patterns. hmarx@thor:~> ohmarx@thor:~> man -k gzip

gzip (1) - compress or expand files zforce (1) - force a ’.gz’ extension on all gzip filesMIME::Decoder::Gzip64 (3pm) - decode a "base64" gzip streamhmarx@thor:~> oSistema Operacional GNU/Linux 54

Comandos básicosAo 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 ]

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

Além da opção -k, outras opções interessantes do man são:

-h, --help Exibe a ajuda das opções-a, --all Exibe todas as páginas referentes ao

comando-w, --where Exibe o diretório do arquivo do manual do

comando-T disp Utiliza o groff para formatar as páginas para

o dispositivo disp.-V, --version Exibe a versão do man.

Page 55: booklinux-a4

hmarx@thor:~> pwd /home/hmarx hmarx@thor:~> o hmarx@thor:~> echo $MACHINE i686 hmarx@thor:~> o

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:~> oSistema Operacional GNU/Linux 55

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.

pwd

Mostra o diretório corrente.

echo [ -n ] texto

Imprime a linha de texto, opcionalmente (-n) sem mudar de linha.

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 número de caracteres Número de caracteres a ler

Page 56: booklinux-a4

test -e /etc/sysconfig/network/config && . /etc/sysconfig/network/config

Sistema Operacional GNU/Linux 56

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:

que processa o arquivo /etc/sysconfig/network/config caso ele exista.

Page 57: booklinux-a4

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> oSistema Operacional GNU/Linux 57

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 caracter diretório darquivo normal -dispositivo bloco bdispositivo caracter cpipe ou FIFO psymbolic link lsocket s

Exemplos:

Page 58: booklinux-a4

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> oSistema Operacional GNU/Linux 58

mkdir [ opções ] diretório [ diretório ] ...

Cria diretórios.Algumas opções:

-p, --parents Cria todos os diretórios do path-v, --verbose Exibe cada diretório criado-m, --mode=modo Permissão como em chmod

rmdir [ opções ] diretório ...

Remove diretórios.Algumas opções:

-v, --verbose Imprime mensagem a cada diretório-p, --parents 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.

Page 59: booklinux-a4

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:~> oSistema Operacional GNU/Linux 59

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.

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+n Utiliza o n-ésimo diretório da contado a

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

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+n Utiliza o n-ésimo diretório da contado a

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

Page 60: booklinux-a4

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> oSistema Operacional GNU/Linux 60

comando dirs

dirs [ -clp ] [ +n | -n ]

Algumas opções:-c Limpa a pilha-l Imprime a lista no formato longo (não usa o

caracter ~ para o diretório pessoal).-p Imprime um diretório por linha-v Imprime um diretório por linha prefixado

pelo índice posicional +n Imprime o n-ésimo diretório da contado a

partir da esquerda na lista mostrada pelo comando dirs utilizado sem argumentos

-n Imprime o n-ésimo diretório da contado a partir da direita na lista mostrada pelo comando dirs utilizado sem argumentos

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

Tome cuidado com os meta-caracteres e com as expressões regulares. Você poderá sobrescrever arquivos não intencionalmente.

Page 61: booklinux-a4

hmarx@thor:~/test> cat -TE Texto$ ^IApós um tab$ Após brancos$ $ hmarx@thor:~/test> oSistema Operacional GNU/Linux 61

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

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

tail [ opções ] [ arquivos ] ...

Exibe as últimas10 linhas (ou o número especificado) do(s) arquivo(s).Algumas opções:

-n n, ---lines=n Exibe as últimas n linhas-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).

Page 62: booklinux-a4

hmarx@thor:~> ps aux | wc 120 1509 11862 hmarx@thor:~> oSistema Operacional GNU/Linux 62

od [ opções ] [ arquivos ] ...

Exibe o(s) arquivo(s) em octal e/ou outros formatosAlgumas 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 char-b, -t oC octal-c, -t c ASCII ou escaped chars-d, -t u2 unsigned short em decimal-f, -t fF float-h, -t x2 unsigned short em hexadecimal-i, -t d2 short em decimal-l, -t d4 long em decimal-o, -t o2 short em octal-x, -t x2 short em hexadecimal-t x4 long em hexadecimal-t f4 float de 4 bytes-t f8 float de 8 bytes

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

Page 63: booklinux-a4

Sistema Operacional GNU/Linux 63

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-m, -nm, --bytes=m Considera cadeias de no mínimo m

caracteres (o default é 4)-t r, --radix=r Imprime o offset na base definida por 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

Os conjuntos são cadeias de caracteres como:

\NNN Caracter com código octal NNN\\ Barra invertida\a beep\b backspace\r CR\n LF\t tabulação horizontal\v tabulação verticalc1-c2 Todos os caracteres de c1 até c2[c*] No conjunto1, repete o caracter c até o

tamanho do conjunto2[c*n] Repete n vezes o caracter c[:alnum:] Todas as letras e dígitos[:alpha:] Todas as letras[:blank:] Todos os espaços horizontais em branco[:cntrl:] Todos os caracteres de controle[:digit:] Todos os dígitos[:graph:] Todos os caracteres imprimíveis, exceto o

espaço em branco[:lower:] Todas as letras minúsculas[:print:] Todos os caracteres imprimíveis, incluindo o

espaço em branco[:punct:] Todos os caracteres de pontuação[:space:] Todos os espaços horizontais e verticais[:upper:] Todas as letras maiúsculas[:xdigit:] Todos os dígitos hexadecimais[=c=] Todos os caracteres equivalentes a c

Page 64: booklinux-a4

hmarx@thor:~> tr "[A-Z]" "[a-z]" < arq.orig > arq.novo

hmarx@thor:~> grep -v "^[ ^I]*$" arquivo.txt

Sistema Operacional GNU/Linux 64

O comando

passará todo o texto do arq.orig para minúsculas gerando arq.novo.

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-e re, --regexp=re Usa re como expressão regular

Por exemplo, o comando

mostrará as linhas que não estejam em branco ou que não estejam vazias do arquivo arquivo.txt .

Page 65: booklinux-a4

hmarx@thor:~> cat ARQAAAAA 1111111BBBBB 2222222CCCCC 3333333DDDDD 4444444hmarx@thor:~> sed -e "s/ ^\([^ ]*\)[ ]*\(.*\)$/\2 | \1" < ARQ1111111 | AAAAA2222222 | BBBBB3333333 | CCCCC4444444 | DDDDD hmarx@thor:~> oSistema Operacional GNU/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-f sf, --file=sf Usa os comandos contidos no arquivo de

nome sf para processar a entradaAlguns comandos do sed

: label Label para comandos b e t#comentário Comentários{ Início de bloco} Fim de blocoa Append - adiciona texto no finali Insert - insere textod Delete - apaga o padrãoq Quit - abandona imediatamenteb label Branch - salta para labelt label Salta para label em caso de uma substituição com

sucessoD Apaga até o fim da linhah Hold - copia o padrão p/ o bufferH Adiciona o padrão ao bufferg Copia o buffer para o padrão G Adiciona o buffer ao padrãox Troca os conteúdos do buffer c/ o padrãos/regexp/substituto/ Substitui a expressão regexp pelo substitutoy/origem/destino/ Traduz os caracteres de origem para os

correspondentes em destinow arquivo Escreve o padrão no arquivo de nome arquivo

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:

$ Última linha do texton Especifica a linha de número nlinha~passo Linha inicial e passo. Assim, 1~2 indica todas as

linhas ímpares/regexp/ Linha que contém um padrão para a expressão

regular regexp

Page 66: booklinux-a4

Sistema Operacional GNU/Linux 66

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-F fs, --field-separator fs Separador de campos-v var=val, --assign var=val Assinalamento do valor val à

variável var-W help, --help Ajuda sumária-W dump=arq Imprime as variáveis globais e seus

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 Executado antes de ler o arquivoEND Executado após tratar o arquivo/regexp/ Uma expressão regularpadrão1 && padrão2padrão1 || padrão2padrão1 ? padrão2 : padrão3( padrão )! padrãopadrão1, padrão2

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.

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.

Page 67: booklinux-a4

Sistema Operacional GNU/Linux 67

Os comandos de controle são:

if ( condição ) comando [ else comando ]while ( condição ) comandodo comando while ( condição )for ( variável in arranjo ) comandobreakcontinuedelete 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 varnextnextfileprint [ lista de expressões > arquivo ]print [ lista de expressões >> arquivo ]print [ lista de expressões | arquivo ]print [ lista de expressões >& arquivo ]printf formato, lista de expressões [ > arquivo ]printf formato, lista de expressões [ >> arquivo ]printf formato, lista de expressões [ | arquivo ]printf formato, lista de expressões [ >& 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 à esquerdaespaço Espaço para números positivos e - para

negativos+ Sinal: + para números positivos e - para

negativos# Controle alternativo para preencher com

zeros0 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]).

Page 68: booklinux-a4

hmarx@thor:~> awk ’BEGIN { print "hello world !" }’ hello world ! hmarx@thor:~> o hmarx@thor:~> I=135 hmarx@thor:~> I=‘expr $I + 1‘ hmarx@thor:~> echo $I 136 hmarx@thor:~> oSistema Operacional GNU/Linux 68

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]"

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:

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-regularsubstr string posição tamanhoindex string caractereslength string quote token

O comando expr é muito útil quando operamos com variáveis que representam números no bash:

Page 69: booklinux-a4

Sistema Operacional GNU/Linux 69

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 ] ) comandobreakcontinuehaltreturn [ ( 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.

Page 70: booklinux-a4

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 } }

Sistema Operacional GNU/Linux 70

Por exemplo, a função exponencial da biblioteca matemática pode ser definida no bc padrão POSIX como:

Page 71: booklinux-a4

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> mv passwd PassWord hmarx@thor:~/test> ls -l total 1 -rw-r--r-- 1 hmarx starix 4094 Mar 27 00:00 PassWord drwxr-xr-x 2 hmarx starix 1024 Mar 26 23:54 sub1 hmarx@thor:~/test> o

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:~> oSistema Operacional GNU/Linux 71

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

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-r, --recursive Recursivo CUIDADO !!!

Para evitar remoções não intencionais, pode-se definir um alias rm=’rm -i’ .

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

Page 72: booklinux-a4

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:~> oSistema Operacional GNU/Linux 72

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-d str, --date=str Usa data/hora em str em vez da corrente

str no formato padrão de data e hora-t str Usa data/hora em str em vez da corrente

str no formato [CC[YY]]MMDDhhmm-r arq, --reference=arq Usa data/hora do arquivo arq em vez da

corrente

more [ opções ] [ arquivo ] ...

Pagina arquivo(s) para a saída padrão.Algumas opções:

-num Número de linhas da tela-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.

Page 73: booklinux-a4

Sistema Operacional GNU/Linux 73

cut [ opções ] [ arquivo ] ...

Imprime na saída padrão as partes selecionadas do(s) arquivo(s).Algumas opções:

-d c, --delimiter=c Usa c como delimitador em vez de TAB-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

delimitadoresAs 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 campoN- Do N-ésimo byte, caracter ou campo até o

fim da linhaN-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:

-d c, --delimiter=c Usa c como delimitador em vez de TAB-s, --serial Processa um arquivo por vez

Page 74: booklinux-a4

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:~> oSistema Operacional GNU/Linux 74

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:

-a n Imprime linhas não casadas do arquivo do lado n

-i, --ignore-case Ignora maiúsculas e minúsculas-1 campo Usa o campo do arquivo1 como junção-2 campo Usa o campo do arquivo2 como junção-t c Usa o caracter c como separator de campos-v n Imprime somente as linhas não casadas do

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.

Page 75: booklinux-a4

Sistema Operacional GNU/Linux 75

sort [ opções ] [ arquivo ] ...

Ordena as linhas dos arquivos concatenados.Algumas opções:

-k pos1 [, -pos2 ] Usa chave que começa em pos1 e termina 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-w n, --check-chars=n Compara no máximo n caracteres na linha

diff [ opções ] arquivo arquivo

Compara dois arquivos.Algumas opções:

-a, --text Trata os arquivos como texto-v Ignora diferença em número de espaços-B, --ignore-blank-lines Ignora linhas em branco inseridas ou

removidas-i, --ignore-case Ignora maiúsculas e minúsculas-e, --ed Gera um script ed como saída-r, --recursive Compara diretórios recursivamente-t Expande TABs na saída-y, --side-by-side Exibe em duas colunas-W cols, --width=cols Usa cols colunas para exibir a saída

Page 76: booklinux-a4

hmarx@thor:~> whohmarx :0 Mar 30 16:02 (console) hmarx pts/0 Mar 30 22:30root pts/5 Apr 4 14:39 (acer.starix.br)hmarx pts/6 Apr 4 16:03 hmarx@thor:~> oSistema Operacional GNU/Linux 76

diff3 [ opções ] arquivo arquivo

Compara três arquivosAlgumas opções:

-a, --text Trata os arquivos como texto-v, --version Mostra a versão do diff3-E, --show-overlap Mostra alterações sobrepostas, ressaltando

conflitos-A, --show-all Mostra todas as alterações, ressaltando os

conflitos-e, --ed Gera um script ed como saída-i Gera os comandos ´w´ e ´q´ ao final do

para o script ed.-m, --merge Produz o arquivo em vez do script ed.-T, --initial-tab Alinha TABs inserindo TABs nas linhas.

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

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 ] [ nome ... ] [ tty ... ]

Mostra a lista das últimas sessões de usuários de nome nome nos terminais tty. O usuário especial reboot mostra as reinicializações.Algumas opções:

-n, -n n Mostra n linhas-a Mostra o nome da máquina na última

coluna-R Não mostra o nome da máquina

Page 77: booklinux-a4

hmarx@thor:~> id -G -n hmarx starix root uucp users disk trusted develop audio hmarx@thor:~> id -g -n hmarx starix hmarx@thor:~> o

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:~> oSistema Operacional GNU/Linux 77

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

finger [ opções ] [ usuário ... ]

Imprime informações sobre usuário(s) locais ou remotosAlgumas 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

Page 78: booklinux-a4

hmarx@thor:~> su - Password: thor:~ # oSistema Operacional GNU/Linux 78

passwd [ -f | -s ] [ usuário ] passwd [ -g ] [ -r | -R ] grupopasswd [ -x max ] [ -n min ] [ -w aviso ] [ -i inativo ] usuáriopasswd { -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-x max Número máximo de dias com a mesma

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-i inativo Número de dias para desabilitar o usuário

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

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-s, --shell=shell Executa o shell especificado

newgrp [ -l ] [ grupo ] sg grupo -c comando

- , -l, --login Transforma o shell no login shell-c, --command=comando Passa o comando para o shell

Executa um shell como um grupo substituto (ou como root).O comando sg não substitui o shell do usuário.

Page 79: booklinux-a4

hmarx@thor:~> uname -aLinux thor 2.4.10-64GB-SMP #1 SMP Fri Sep 28 17:26:36 GMT 2001 i686

unknownhmarx@thor:~> oSistema Operacional GNU/Linux 79

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-u usuário Executa como usuário (nome ou UID) e

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

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

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

Page 80: booklinux-a4

hmarx@thor:~> tty/dev/pts/2hmarx@thor:~> oSistema Operacional GNU/Linux 80

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

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:

-term nome Usa nome em vez do conteúdo de TERM-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-dump n Salva o conteúdo da tela da console virtual

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).

-powersave on | vsync Colocar o monitor no modo de suspensão 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-powerdown n Define em n minutos (1 a 60) o tempo de

desligamento do monitor, ou inibe o desligamento do monitor se n = 0

Page 81: booklinux-a4

Sistema Operacional GNU/Linux 81

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 dispositivocaracterística valor

As características mais comuns são:

Característica Significado defaulteof c Caracter para fim de arquivo ¦+Deol c Caracter para fim de linha não definidoerase c Caracter para apagar tecla digitada ¦+? ou Âintr c Caracter para enviar o sinal SIGINT ¦+Clnext c Para enviar o próximo caracter sem tratar ¦+Vkill c Caractrer para limpar a linha corrente ¦+Uquit c Caracter para enviar o sinal SIGQUIT ¦+\ rprnt c Caracter para reimprimir a linha ¦+Rstart c Caracter para resumir a saída ¦+Qstop c Caracter para suspender a saída ¦+Ssusp c Caracter para enviar o sinal SIGSUSP ¦+Zwerase c Caracter para apagar a última palavra ¦+Wcols Ncolumns N

Informa ao kernel que o terminal tem N colunas não definido

N Muda o baud rate para N não definidoispeed N Muda o baud rate de recepção para N não definidoospeed N Muda o baud rate de transmissão para N não definidospeed Mostra a velocidade do terminal não definido

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.

Page 82: booklinux-a4

Sistema Operacional GNU/Linux 82

Os modos mais comuns são:

Modo Significadoclocal Desabilita o controle de modemcread Permite a entrada de caracteres (não pode ser usado na entrada padrão)crtscts Habilita o controle de fluxo através de CTS e RTScstopb Usa 2 bits de stop (ou 1 se desabilitado)hup Envia hangup quando o último processo fechar o terminalparenb Gera e testa o bit de paridadeparodd Gera paridade ímparbrkint Envia um break na linhaicrnl Traduz CR (carriage return) para LF (line feed) na entradaigncr ignora o CRignpar Ignora caracteres com erro de paridadeinlcr Tarduz LF para CR na entradainpck Habilita verificação de paridadeistrip Zera o bit 7 na entradaixoff Habilita o envio de XON/XOFFixon Habilita o controle de fluxo XON/XOFFocrnl Traduz CR para LF na saídaonlcr Traduz LF para LF-CR na saídaonlret O caracter LF gera a volta do cursor (CR)onocr Não imprime CR na primeira colunacrterase Apaga caracteres usando backspace-espaço-backspaceecho Ecoa os caracteres digitadosiuclc Converte maiúsculas para minúsculasolcuc Converte minúsculas para maiúsculasixany Permite qualquer caracter resumir a saida (e não apenas o definido em start)icanon Habilita os caracteres especiais definidos em erase, kill , werase, e rprnt

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.

Page 83: booklinux-a4

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:~> oSistema Operacional GNU/Linux 83

Pode ser utilizado ainda o comando reset ou o comando tset.

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 Informações mais detalhadas-V Mostra a versão do lpq-c Limpa a tela antes de exibir-a Todas as impressoras-t tempo entre atualizações Intervalo entre exibições repetidas

Page 84: booklinux-a4

Sistema Operacional GNU/Linux 84

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--columns=n Imprime em n colunas--rows=n Número de linhas por página-1, -2, ..., -9 Tamanho de fonts pré-definidos-j, --borders Imprime bordas-f n, --font-size=n Tamanho do font-b texto, --header=texto Cabeçalho-B, --no-header Não imprime cabeçalho--footer=texto Rodapé-u texto, --underlay=texto Rodapé de cada página-a páginas, --pages=páginas Páginas a imprimir-n n, --copies=n Número de cópias--toc=texto Gera índice-P impr, --printer=impr Envia saída para a fila de impressão

impr

Page 85: booklinux-a4

Sistema Operacional GNU/Linux 85

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

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

Page 86: booklinux-a4

Sistema Operacional GNU/Linux 86

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çãov Memória virtualu Orientado a usuáriox Processos sem ttya Inclui outros terminais e processosg Inclui líderes de grupoe 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-H pid Ressalta o processo pid e antecessores-G Utiliza caracteres semi-gráficos VT-100

pidof [ opções ] programa ...

Mostra o PID de cada programa especificadoAlgumas opções:

-s Mostra apenas 1 PID-x Mostra PIDs de scripts-o PID Omite o PID especificado

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).

Page 87: booklinux-a4

Sistema Operacional GNU/Linux 87

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çãoAlgumas 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-f arq Lê o job do arquivo arq e não da entrada

padrão

crontab [ -u usuário ] arquivocrontab [ -u usuário ] { -l | -r | -e}

Manipula os arquivos do cron dos arquivosAlgumas 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 0-59horas 0-23dias-do-mês 0-31mês 0-12 (ou nomes)dia-da-semana 0-7 (0 ou 7 é domingo ou nomes)comando

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.

Page 88: booklinux-a4

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 USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 851 hmarx 5 0 2360 1164 736 S 7.9 0.9 166:50 kdeinit 11572 hmarx 18 0 1092 1092 868 R 2.1 0.8 0:00 top 720 root 20 0 32736 22M 920 S 1.1 18.5 128:59 X 7610 hmarx 20 0 1640 60 44 R 0.2 0.0 3:29 kdeinit 11422 hmarx 20 0 4664 4664 3284 S 0.2 3.6 0:01 kvt 1 root 20 0 76 64 44 S 0.0 0.0 0:03 init 2 root 20 0 0 0 0 SW 0.0 0.0 0:03 keventd 4 root 20 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0 5 root 19 0 0 0 0 SW 0.0 0.0 0:14 kswapd 6 root 2 0 0 0 0 SW 0.0 0.0 0:00 bdflush 7 root 20 0 0 0 0 SW 0.0 0.0 0:00 kupdated 8 root 20 0 0 0 0 SW 0.0 0.0 0:02 kinoded 9 root 0 -20 0 0 0 SW< 0.0 0.0 0:00 mdrecoveryd 360 root 20 0 256 216 144 S 0.0 0.1 0:00 syslogd 363 root 20 0 640 4 0 S 0.0 0.0 0:00 klogd 445 bin 20 0 88 4 0 S 0.0 0.0 0:00 portma p

Sistema Operacional GNU/Linux 88

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çõesp número do processo Número de processos a exibirb Modo batchs Modo seguro

(inibe comandos perigosos)C Totaliza estado das CPUsk Envia um sinal a um processor Altera a prioridade (renice) de um process

Teclando-se h é exibida uma tela com os comandos para alterar a exibição.

Page 89: booklinux-a4

Sistema Operacional GNU/Linux 89

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-s nome do sinal Envia o sinal de nome dado-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.-s nome do sinal Envia o sinal especificado-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

renice prioridade [ [-p] pid ... ] [ [-g] pgid ... ] [ [-u] users ... ]

Altera a prioridade de um comando em execução.Algumas opções:

-p pid Número(s) do(s) processo(s)-g pgid GID dos processos-u user Nome(s) do(s) usuário(s)

Page 90: booklinux-a4

hmarx@thor:~> echo A B C D E | xargs -n 2 echo "Argumentos = "Argumentos = A BArgumentos = C DArgumentos = Ehmarx@thor:~> ls *.aw | xargs -n 1 wc10650 56164 439209 ApostilaLinux.aw15870 84192 651345 apcaixa.aw15870 84192 651345 apcaixa.orig.aw 229 914 8309 apcapa.aw 1098 5414 35950 appendix.aw 734 3897 26070 apresentacao_starix.aw hmarx@thor:~> oSistema Operacional GNU/Linux 90

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

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-l [ n ], --max-lines [=n ] Usa no máximo n linhas para cada

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

Page 91: booklinux-a4

Sistema Operacional GNU/Linux 91

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 ou -not exprexpr1 -a expr2 ou expr1 -and expr2expr1 -o expr2 ou expr1 -or expr2

E pode incluir opções como:

-name padrão -links número-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 ]-okcomando ; -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.

chown [ opções ] dono [ { . | : } grupo ] arquivoschown [ opções ] { . | : } grupo arquivoschgrp [ 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

Page 92: booklinux-a4

O comando ls irá mostrar, no lugar do x correspondente:

S p/ SUID ou SGIDs p/ SUID ou SGID e executeT p/ Sticky bitt 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> oSistema Operacional GNU/Linux 92

chmod [ opções ] modo [, modo ] ... arquivoschmod [ opções ] modo em octal ... arquivos

Altera a permissão de arquivos e diretóriosAlgumas 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 = executet = 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 Significado11 sticky bit10 SGID

9 SUID8 r para o dono7 w para o dono6 x para o dono5 r para o grupo4 w para o grupo3 x para o grupo2 r para os outros1 w para os outros0 x para os outros

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.

Page 93: booklinux-a4

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 hmarx@thor:~/test> basename /x/y/z/w/arquivo.dat arquivo.dat hmarx@thor:~/test> basename /x/y/z/w/arquivo.dat .dat arquivo hmarx@thor:~/test> o

hmarx@thor:~/test> dirname /x/y/z/w/arquivo.dat /x/y/z/w hmarx@thor:~/test> dirname ~hmarx /home hmarx@thor:~/test> oSistema Operacional GNU/Linux 93

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

file [ opções ] [ arquivo ] ...

Determina o tipo dos arquivos utilizando as definições em /usr/share/misc/magic .Algumas opções:

-f arq Lê os nomes dos arquivos de arq-z Pesquisa em arquivos comprimidos-L Segue symbolic links

basename nome [ sufixo ]

Imprime o nome retirando os diretórios e opcionalmente o sufixo

dirname nome

Imprime o nome retirando o último componente do diretório.

Page 94: booklinux-a4

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:~> oSistema Operacional GNU/Linux 94

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-d offset Apaga a entrada offset do histórico

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.

Page 95: booklinux-a4

Sistema Operacional GNU/Linux 95

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 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¸+b volta para o início da palavra anterior¸+f avança para o fim da palavra¸+d apaga a palavra da frente¸+Ì apaga a palavra de trás¸+< volta ao início do history¸+> vai para o fim do history¸+¦+E expande a linha (variáveis e aliases)¸+u passa a palavra seguinte para maiúsculas¸+l passa a palavra seguinte para minúsculas¸+c passa a primeira letra da palavra seguinte para maiúscula e as demais para minúsculas.

Page 96: booklinux-a4

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 starix 1474560 Jun 12 15:29 floppy.image hmarx@thor:~/test> oSistema Operacional GNU/Linux 96

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 escritacbs=número de bytes a converter de cada vezconv=lista de conversões separadas por vírgulas

ascii de EBCDIC para ASCIIebcdic de ASCII para EBCDIClcase transforma em minúsculasucase transforma em maiúsculasswab troca cada par de bytes

ibs=número de bytes do bloco para leituraif=arquivo de entradaobs=número de bytes do bloco para escritaof=arquivo de saídaskip=número de blocos a saltar na entradaseek=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 byte5w 5 palavras (2 bytes)8b 8 blocos de 512 bytes15k 15 blocos de 1024 bytes3M 3.145.728 bytes (3 Mbytes)

Page 97: booklinux-a4

hmarx@venus:~/test> ls -lh file.dat-rw-r----- 1 hmarx linuxtech 2.8M 2009-07-20 13:10 file.dathmarx@venus:~/test> split -b 1024k file.dat part-hmarx@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-achmarx@venus:~/test> cat part-aa part-ab part-ac > all-parts.dathmarx@venus:~/test> ls -lh all-parts.dat-rw-rw---- 1 hmarx linuxtech 2.8M 2009-07-20 13:12 all-parts.dathmarx@venus:~/test> diff all-parts.dat file.dathmarx@thor:~/test> oSistema Operacional GNU/Linux 97

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-C tam, --line-bytes=tam Gera no máximo tam bytes sem quebrar

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:

Page 98: booklinux-a4

Sistema Operacional GNU/Linux 98

Backuptar opções [ arquivos ] ...

TAR : Tape Archive and Restore É o programa padrão de backups do Unix.

Algumas opções:t Lista o backupx Extrai o conteúdo do backupc Cria um backupz Faz backup comprimido com gzipj Faz backup comprimido bzip2f Informa arquivo ou dispositivo de backupv Prolixo (verbose)u Atualiza o backup

zip opções [ arquivos ] ...

Cria arquivos .ZIPAlgumas opções:

-T Testa o arquivo.ZIP-v Prolixo (verbose)-c Cria comentários-r Recursivo-f Apenas arquivos alterados (freshen)-m Move os arquivos-u Apenas arquivos alterados ou novos

unzip opções [ arquivos ] ...

Extrai conteúdo de arquivos .ZIPAlgumas opções:

-t Testa o arquivo.ZIP-v Prolixo (verbose)-q Modo silencioso-p Extrai para saída padrão (útil em pipes)

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-S .suf, --suffix .suf Utiliza o sufixo .suf na compressão-v, --verbose Modo verboso

Page 99: booklinux-a4

Sistema Operacional GNU/Linux 99

bzip2 [ opções ] [ arquivos ] ...bunzip2 [ opções ] [ arquivos ] ...bzcat [ -s ] [ arquivos ] ...

Comprime ou descomprime arquivosAlgumas 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

compress opções [ arquivos ] ...uncompress opções [ arquivos ] ...

Comprime ou descomprime arquivosAlgumas 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 fsfbsf status erase eomdatcompression offline setdensitytell seek ...

Há ainda diversos aplicativos para comprimir/descomprimir arquivos como lha, rar , unace, freeze e zoo.

Page 100: booklinux-a4

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

hmarx@thor:~/arqs> echo "Maria e José" | rev ésoJ e airaM hmarx@thor:~/arqs> oSistema Operacional GNU/Linux 100

Operadores do bashRedirecionamento 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:

< redireciona a entrada padrão> redireciona a saída padrão

>> concatena a saída padrão2> redireciona a saída de erros

>& n redireciona a saída padrão e a de erros, opcionalmente para a saída do descritor n

m>& n redireciona a saída do descritor m para a mesma saída do descritor n<<texto trata a entrada padrão até encontrar texto.

Os descritores padrão são:0 - entrada padrão1 - saída padrão2 - saída de erros

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.

Page 101: booklinux-a4

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 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 hmarx@thor:~> A=outer ; { A=inner; echo $A } ; echo $A inner inner hmarx@thor:~> oSistema Operacional GNU/Linux 101

Separador de comandos

Você pode digitar diversos comandos em uma única linha: basta separá-los por ";".

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.

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 ; ... }

Page 102: booklinux-a4

hmarx@thor:~> pwd; (cd /usr/local/bin; pwd); pwd /home/hmarx /usr/local/bin /home/hmarx hmarx@thor:~> o hmarx@thor:~> A=outer ; ( A=inner; echo $A ) ; echo $A inner outer hmarx@thor:~> ohmarx@thor:~> A=123hmarx@thor:~> A=‘expr $A + 1‘hmarx@thor:~> echo $A124hmarx@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áquinahmarx@thor:~> oSistema Operacional GNU/Linux 102

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 ; ... )

Note a diferença do agrupamento de comandos:

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.

Page 103: booklinux-a4

hmarx@thor:~> echo $((( 3 * 17 )))51hmarx@thor:~> echo $((( 2 ** 9 )))512hmarx@thor:~> A=10hmarx@thor:~> (( ++A ))hmarx@thor:~> echo A=$AA=11hmarx@thor:~> B=34; echo $((( A + B )))45hmarx@thor:~> echo $((( 012 | 027 )))31hmarx@thor:~> echo $((( 012 & 027 )))2

hmarx@thor:~> oSistema Operacional GNU/Linux 103

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 Significadoid++ id-- Pós-incremento e Pós-decremento da variável id++id --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)

expr ? expr : expr Expressão condicional= *= /= += -= <<= >>=

&= ^= |=Assinalamentow

expr1 , expr2 Execução sequencial

Exemplos:

Page 104: booklinux-a4

TRUE = Verdade é zero ! FALSE = Falso é qualquer valor diferente de 0 !

Sistema Operacional GNU/Linux 104

Expressões condicionais

O comando:

$ [[ expressão ]]

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 Significado-a arquivo O arquivo de nome arquivo existe-b arquivo O arquivo existe e é dispositivo tipo bloco-c arquivo O arquivo existe e é dispositivo tipo caracter-d arquivo O arquivo arquivo é diretório-e arquivo O arquivo arquivo existe-f arquivo O arquivo arquivo existe e é um arquivo normal-g arquivo O arquivo arquivo existe e tem atributo SGID-h arquivo O arquivo arquivo existe e é um link simbólico-k arquivo O arquivo arquivo existe e tem atributo sticky-p arquivo O arquivo arquivo existe e um named pipe-r arquivo O arquivo arquivo existe e tem permissão de leitura-s arquivo O arquivo arquivo existe e tem tamanho maior que zero-t fd O descritor de arquivos fd está aberto e é um terminal-u arquivo O arquivo arquivo existe e tem atributo SUID-w arquivo O arquivo arquivo existe e tem permissão de escrita-x arquivo O arquivo arquivo existe e tem permissão de execução-O arquivo O arquivo arquivo existe e pertence ao usuário-G arquivo O arquivo arquivo existe e pertence ao grupo-L arquivo O arquivo arquivo existe e é um link simbólico-S arquivo O arquivo arquivo existe e é um socket-N arquivo O arquivo arquivo existe e foi modificado após a última vez que foi lido-o opção A opção opção do shell está habilitadas-z string O tamanho do string é zero-n string O tamanho do string não é zerostring O tamanho do string não é zero

Operador Significadoarquivo1 -nt arquivo2 O arquivo1 é mais novo que o arquivo2arquivo1 -ot arquivo2 O arquivo1 é mais antigo que o arquivo2arquivo1 -ef arquivo2 Os arquivos arquivo1 e arquivos2 são o mesmo inodo do mesmo

dispositivostring1 == string2 O string1 é igual ao string2string1 != string2 O string1 é diferente do string2string1 < string2 O string1 é lexicograficamente menor que o string2string1 > string2 O string1 é lexicograficamente maior que o string2

arg1 -eq arg2 Os argumentos arg1 e arg2 são aritmeticamente iguaisarg1 -ne arg2 Os argumentos arg1 e arg2 são aritmeticamente diferentesarg1 -lt arg2 arg1 é aritmeticamene menor que arg2arg1 -le arg2 arg1 é aritmeticament menor ou igual a arg2arg1 -gt arg2 arg1 é aritmeticament maior que arg2arg1 -ge arg2 arg1 é aritmeticament maior ou igual a arg2

Page 105: booklinux-a4

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

Lembre-se:

TRUE = Verdade é zero ! FALSE = Falso é qualquer valor diferente de 0 !

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:~> oSistema Operacional GNU/Linux 105

Exemplos:

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.

Condicional simples:

if condição ;then comandos ;fi

Condicional composto tipo 1:

if condição ;then comandos1 ; else comandos2 ;fi

Page 106: booklinux-a4

Testes repetidos !

Sistema Operacional GNU/Linux 106

Condicional composto tipo 2:

if condição1 ;then comandos1 ;elif condição2 ; then comandos2 ;else comandosn ;fi

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

Page 107: booklinux-a4

hmarx@thor:~> for i in A B C D > do > echo $i > done A B C D hmarx@thor:~> o

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:~> oSistema Operacional GNU/Linux 107

Comandos iterativos

Teste de continuação do loop

while condiçãodo comandosdone

Teste de fim do loop

until condiçãodo comandosdone

Loop controlado

for nome [ in lista de palavras ]do comandosdone

Comando de seleção múltipla

case valor padrão-1 )

comandos-1 ;; padrão-2 )

comandos-2 ;; ...esac

Page 108: booklinux-a4

...case $OPT in help|ajuda)

Help;;

start|iniciar)StartService;;

stop|parar)StopService;;

*)echo "Use $0 {help | start | stop}"echo " $0 {ajuda | iniciar | parar}";;

esac

...

Sistema Operacional GNU/Linux 108

Diversos padrões podem ser separados por | em um ítem do case.

Exemplo:

Page 109: booklinux-a4

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

hmarx@thor:~> [ -e /etc/named.conf ] && echo O BIND está instalado O BIND está instalado hmarx@thor:~> oSistema Operacional GNU/Linux 109

Comando para geração de menu

select nome [ in lista de palavras ]do

comandos;done

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.

Page 110: booklinux-a4

Sistema Operacional GNU/Linux 110

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

Page 111: booklinux-a4

usuário:x:uid:gid:Nome[,outras informações]:diretóriopessoal:shell

usuário:senha criptografada:t1:t2:t3:t4:t5:t6:t7

Sistema Operacional GNU/Linux 111

useradd [ opções ] login

Cria um usuário.Algumas opções:

-c comentário Campo de comentário do /etc/passwd.

-d dir Define dir como diretório pessoal.-e data Define a data de expiração no formato

YYYY-MM-DD .-f tempo Define em quantos dias a conta do usuário

será desabilitada após a expiração da senha.

-g grupo Define o grupo inicial (de login).-G grupo, ... Define a lista de grupos adicionais.-m Cria o diretório pessoal e copia o esqueleto

para ele, se não existir.-p senha Senha criptografada. O default é desabilitar

a conta.-s shell Define o login shell.-u uid Define o número do usuário UID (maior

que 99 e que qualquer outro UID existente

-k skel-dir Define o diretório do esqueleto. O default é o /etc/skel .

-o 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:

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 !.

O arquivo /etc/shadow tem o seguinte formato:

onde:a senha é criptografada utilizando DES - Data Encryption Standard, ou opcionalmente

MD5 - Message Digest 5.t1 é o data da última alteração da senhat2 é o número de dias até que a senha possa ser trocadat3 é o número de dias até que a senha deva ser trocadat4 é o número de dias anterior a expiração da senhat5 é o número de dias para desabilitar a conta após a expiração da senhat6 é o data de desabilitação da contat7 é um campo reservado

Page 112: booklinux-a4

usuario:$1$BziEuHN8$doX0S7wNN5U7bm5fQI1RR/:11697:0:99999:7:::

usuario:$2a$10$bAo0qgHv61OYmYdkqscQN.wew4h4mgYVcY5Uj.fuXQI1RNgHYFO6G:13313:0:99999:7:::

usuario:Ak9K.CWRx7Fnk:11697:0:99999:7:::

Sistema Operacional GNU/Linux 112

Uma entrada com a senha criptografada em MD5 tem o formato parecido com o abaixo:

Uma entrada com a senha criptografada em Blowfish tem o formato parecido com o abaixo:

Já uma entrada com senha criptografada em DES tem o formato parecido com o abaixo:

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 .

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-b dir Prefixo para o diretório pessoal. O login

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.-s shell Define o login 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.

Page 113: booklinux-a4

Sistema Operacional GNU/Linux 113

usermod [ opções ] login

Modifica um usuário.Algumas opções:

-c comentário Campo de comentário do /etc/passwd.

-d dir Define dir como diretório pessoal.-e data Define a data de expiração no formato

YYYY-MM-DD .-f tempo Define em quantos dias a conta do usuário

será desabilitada após a expiração da senha.

-g grupo Define o grupo inicial (de login).-G grupo, ... Define a lista de grupos adicionais.-m Cria o diretório pessoal e copia o esqueleto

para ele, se não existir.-p senha Senha criptografada. O default é desabilitar

a conta.-s shell Define o login shell.-u uid Define o número do usuário UID (maior

que 99 e que qualquer outro UID existente

-l novo-login Define o novo login.-L Bloqueia o usuário (colocando ! no campo

de senha)-U 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 .

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:-f nome completo Nome do usuário-w telefone Telefone do trabalho-r sala Número da sala-h telefone Telefone pessoal-o info Outra informação não definida pelo campo

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.

Page 114: booklinux-a4

thor:~ # fdisk -l /dev/sdc

Disk /dev/sdc: 255 heads, 63 sectors, 1116 cylindersUnits = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System/dev/sdc1 1 17 136521 82 Linux swap/dev/sdc2 18 81 514080 83 Linux/dev/sdc3 82 1116 8313637+ 5 Extended/dev/sdc5 82 273 1542208+ 83 Linux/dev/sdc6 74 465 1542208+ 83 Linux/dev/sdc7 66 720 2048256 83 Linux/dev/sdc8 721 912 1542208+ 83 Linux/dev/sdc9 913 1116 1638598+ 83 Linuxthor:~ # oSistema Operacional GNU/Linux 114

Tratamento dos Sistemas de Arquivosmknod [ 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:-m, --mode=modo Define modo de permissão--help Exibe uma ajuda--version Apenas exibe a versão

fdisk [ -u ] [ -b tam ] dispfdisk -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.

-s partição Exibe o tamanho da partição em blocos.-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.

Page 115: booklinux-a4

Sistema Operacional GNU/Linux 115

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.

Existem ainda comandos específicos para alguns sistema de arquivos como o ext2, o msdos e o reiserfs.

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.-N n Define manualmente o número de inodos do

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.

Page 116: booklinux-a4

Sistema Operacional GNU/Linux 116

mkdosfs [ 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).-F tam Tamanho da FAT (12, 16 ou 32). Pelo tamanho

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).

-n label Define o label do sistema de arquivos (no máximo 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.

-s spc Usa spc setores por cluster. Deve ser potência de 2 (1, 2, 4, 8, ..., 128).

-S bps Número de bytes por setor lógico (512, 1024, 2048, 8192, 16384 ou 32768).

-R reserva Número de setores reservados. O default é 32 para FAT 32, e 1 para FAT 12 ou 16.

-v Modo verboso.

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.

Page 117: booklinux-a4

thor:~ # swapon -sFilename Type Size Used Priority/dev/sda1 partition 530104 51976 42/dev/sdb1 partition 506008 51852 42/dev/sdc1 partition 506008 51736 42/dev/sdd1 partition 506008 52036 42thor:~ # oSistema Operacional GNU/Linux 117

swapon [ -h | -V ]

Algumas opções:-h Exibe uma ajuda.-V Exibe a versão

swapon -a [ -v ]

Ativa todas os dispositivos definidos como swap em /etc/fstab .Algumas opções:

-v Modo verboso.

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.

swapoff [ -h | -V ]

Algumas opções:-h Exibe uma ajuda.-V 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.

Page 118: booklinux-a4

Sistema Operacional GNU/Linux 118

quota [ -F formato ] [ { -g | -u | -v | -s } | -q ]quota [ -F formato ] [ { -u | -v | -s } | -q ] usuárioquota [ -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

quotaon [ -v | -u | -g | -f ] fsquotaon -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 ] fsquotaoff -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

Page 119: booklinux-a4

Sistema Operacional GNU/Linux 119

repquota [ -v | -u | -g | { -t | -n } ] [ -F formato ] fsrepquota -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 Edita as quotas em máquinas remotas-u Trata quotas de usuários-g Trata quotas de grupos-F formato Exibe a quota para o formato especificado,

(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.

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 softbhl Limite de blocos hardisl Limite de inodos softihl Limite de inodos hardbgrl Limite de blocos graceigrl 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-F formato Exibe a quota para o formato especificado,

(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

Page 120: booklinux-a4

Sistema Operacional GNU/Linux 120

quotacheck [ -u | -g | -b | -c | -f | -i | -n | -v | -d | -M | -m | -R ] [ -F formato ] -aquotacheck [ -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 quotaAlgumas 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-F formato Exibe a quota para o formato especificado,

(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.

Page 121: booklinux-a4

Sistema Operacional GNU/Linux 121

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

Page 122: booklinux-a4

Sistema Operacional GNU/Linux 122

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 arquivosremount 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.

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.

Page 123: booklinux-a4

Sistema Operacional GNU/Linux 123

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.

Page 124: booklinux-a4

Sistema Operacional GNU/Linux 124

Módulos de dispositivos e serviçoslspci [ opções ]

Lista todos os dispositivos do barramento PCIAlgumas 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-s [[bus]:[slot]] .[função]] Mostra apenas os dispositivos especidicado

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.

-P diretório Especifica outro diretório, o default é o /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 USBAlgumas 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

Page 125: booklinux-a4

Sistema Operacional GNU/Linux 125

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

Page 126: booklinux-a4

thor:~ # lsdevDevice DMA IRQ I/O Ports------------------------------------------------0000:00:04.1 0170-0177 01f0-01f7 0376-0376 03f6-03f6 d800-

d80f0000:00:04.2 d400-d41f0000:00:04.3 d000-d01f0000:00:04.4 e800-e80f0000:00:06.0 b800-b8ff0000:00:08.0 b400-b4ff0000:00:09.0 b000-b0ff0000:00:0a.0 a800-a83facpi 9ACPI e400-e403 e404-e405 e408-e40b e410-e415 e420-

e423aic7xxx 10cascade 4 2dma 0080-008fdma1 0000-001fdma2 00c0-00dfEnsoniq a800-a83fEnsoniq AudioPCI 11

Sistema Operacional GNU/Linux 126

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).

lsmod [ opções ]

Lista os módulos carregados.Algumas opções:

-h, --help Ajuda-V, --version Exibe a versão do lsmod

Page 127: booklinux-a4

Sistema Operacional GNU/Linux 127

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-o nome, --name=nome Define explicitamente o nome do módulo,

não utilizando o nome do arquivo objeto-h, --help Ajuda sumária-V, --version Exibe a versão do insmod

rmmod [ { -a | -e | -r | -s | -h | -v | -V } ] [ -o opções ] { disp | dir }

Remove módulos carregados do kernel em execuçãoAlgumas 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

Page 128: booklinux-a4

Sistema Operacional GNU/Linux 128

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áveisAlgumas 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-b dir Usa o diretório dir em vez do diretório

/lib/modules-C arquivo Usa o arquivo de configuração arquivo, em

vez de /etc/modules.conf-F simbolos Define o arquivo com o mapa de símbolos

do kernel.-V Exibe a versão do depmod

modprobe [ { -a | -d | -n | -q | -v } ] [ -C arq ] módulo [ symbol=valor ... ]modprobe [ { -a | -d | -n | -q | -v } ] [ -C arq ] [ -t tipo ] padrãomodprobe -l [ -C arq ] [ -t tipo ] padrãomodprobe -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 /

-C arq, --config arq Utiliza o arquivo arq em vez do arquivo /etc/modules.conf

-h Ajuda-V, --version Exibe a versão do lsmod

Page 129: booklinux-a4

thor:~ # modinfo -n ne/lib/modules/2.4.10-smp/kernel/drivers/ne.othor:~ # modinfo nefilename: /lib/modules/2.4.21-99-default/kernel/drivers/net/ne.odescription: "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 " neA licença do módulo "NE1000/NE2000 ISA/PnP Ethernet driver" é "GPL"thor:~ # oSistema Operacional GNU/Linux 129

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-f str, --format str Exibe as informações definidas no

formato str-p, --parameters Exibe os parâmetros do módulo-V, --version Exibe a versão do modinfo-h, --help Exibe ajudaO formato str pode conter as especificações:

%l licensa%a autor%d descrição%p parâmetros

Page 130: booklinux-a4

Sistema Operacional GNU/Linux 130

Mensagens do sistema LinuxNormalmente, 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 .

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 ’;’.

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.

Page 131: booklinux-a4

*.* /dev/tty12mail.* -/var/log/mail*.=crit;kern.none /var/log/criticalkern.crit @logserverlocal6.* jose, pedro

(exemplos do logfiles)

/var/log/messages +4096k 640 root.root/var/squid/logs/access.log +4096k 640 squid.root squid

(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}

Sistema Operacional GNU/Linux 131

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:

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.

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.

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-s tamanho Define um buffer de tamanho bytes-n nível Define o nível das mensagens exibidas

Page 132: booklinux-a4

Sistema Operacional GNU/Linux 132

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-f arq Utiliza o arquivo arq em vez do arquivo

/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.

-p socket Especifica socket alternativo ao /dev/log-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 Reinicializa o syslogdSIGTERM Termina o syslogSIGINT, SIGQUIT Se habilitado, ignora o modo debug, senão

termina o syslogSIGUSR1 Habilita/desabilita o modo debugSIGCHLD Espera pelos processos gerados por

mensagens enviadas para todos

Page 133: booklinux-a4

5. Instalando o Linux

Sistema Operacional GNU/Linux 133

Instalação do LinuxComo 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 , 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-ROM, site FTP, diretório acessível do disco, disquete, ou servidor NFS.

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 de aplicativos, processamento de imagens, ...

• 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

Page 134: booklinux-a4

Sistema Operacional GNU/Linux 134

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.

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 !

O Boot do LinuxVocê 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 - LI nux 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.

Page 135: booklinux-a4

Sistema Operacional GNU/Linux 135

Instalação do SuSE LinuxO 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 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), há 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 compatível com SuperVGA (800x600 ou 1024x768). As resoluções suportadas são automaticamente detectadas.

Deve-se garantir o perfeito funcionamentto em equipamentos novos. Sugere-se execução do teste de memória (selecionável no menu da tela inicial mostrada acima) por pelo menos umas 14 horas (considerando equipamentos atuais com cerca de 2 a 4 GB de RAM),

Selecione o modo de instalação no menu, e simplesmente tecle ©.

Page 136: booklinux-a4

Sistema Operacional GNU/Linux 136

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.

Page 137: booklinux-a4

Sistema Operacional GNU/Linux 137

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.

Page 138: booklinux-a4

Sistema Operacional GNU/Linux 138

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.

Page 139: booklinux-a4

(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

Sistema Operacional GNU/Linux 139

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ê.

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 LI nux LOader.

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.

Page 140: booklinux-a4

(exemplo de arquivo /boot/grub/menu.lst)

color white/blue black/light-graydefault 0timeout 8gfxmenu (hd0,0)/messagetitle 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

Sistema Operacional GNU/Linux 140

Caso utilize o GRUB, o arquivo com a configuração é o /boot/grub/menu.lst.

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)

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.

Page 141: booklinux-a4

Sistema Operacional GNU/Linux 141

Diversos serviços serão disparados e você poderá então iniciar uma sessão no Linux.

Page 142: booklinux-a4

Sistema Operacional GNU/Linux 142

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.

Pode-se gerar o pacote RPM binário utilizando 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 aplicativo-versã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.

Page 143: booklinux-a4

Sistema Operacional GNU/Linux 143

Utilizando o RPMO RPM (Red Hat Package Manager) é um gerenciador de pacotes que permite a

administração da instalação de aplicativos compatíveis com o LSB- Linux 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 Exibe uma ajuda--version Exibe a versão do rpm--rcfile arquivo Especifica arquivo alternativo ao

/etc/rpmrc e ~/.rpmrc-v Verboso-vv 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 Ignora assinaturas pgp--nogpg Ignora assinaturas GPG--nomd5 Ignora assinaturas MD5

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 Significado

5 MD5 checksumS Tamanho do arquivoL Link simbólicoT Modificação do arquivoD DeviceU UsuárioG GrupoM Modo (inclui permissões e tipo de arquivo)

Page 144: booklinux-a4

hmarx@thor:~> rpm -V netcfgS.5....T c /etc/HOSTNAMES.5....T c /etc/aliasesS.5....T c /etc/defaultdomainS.5....T c /etc/exportsS.5....T c /etc/hostsS.5....T c /etc/hosts.lpdS.5....T c /etc/inetd.confS.5....T c /etc/networkshmarx@thor:~> o

hmarx@thor:~> rpm -v --checksig /cdrom/suse/i586/telnet-1.0-291.i586.rpmtelnet-1.0-291.i586.rpm:MD5 sum OK: 901045fd4c9fee03c03e33f310c603b9gpg: 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 9C800ACAgpg: 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 0ACAhmarx@thor:~> oSistema Operacional GNU/Linux 144

Verificação de Integridade

Vericando os arquivos do pacote netcfg :

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 :

Page 145: booklinux-a4

thor:~ # rpm -ivh apache- 1.3.26-57.i586.rpmapache ############################thor:~ # oSistema Operacional GNU/Linux 145

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 Ignora os arquivos do caminho dado--relocate velho=novo Reloca os arquivos do caminho

velho para o novo--prefix dir Reloca o pacote para o diretório dir--dbpath dir Usa o diretório dir como base de

dados--excludedocs Não instala a documentação--force Um sinônimo para o uso das opções

--replacefiles e --replacepkgs--allfiles Instala todos os arquivos--ignorearch Não verifica a arquitetura--ignoresize Não verifica o espaço em disco--ignoreos Não verifica o sistema operacional--includedocs Instala a documentação--justdb Apenas atualiza a base de dados--nodeps Não verifica a dependência--noorder Não reordena a instalação do pacote

para satisfazer as dependências--noscripts Não executa qualquer script de

instalação--notriggers Não executa qualquer script que for

disparado por este pacote--percent Exibe percentuais enquanto instala--replacefiles Instala mesmo se o pacote substitua

arquivos instalados--replacepkgs Reinstala se já estiver instalado--test Não instala, apenas verifica se a

instalação iria funcionar ou não--root dir Usa dir como diretório raiz

--hash, -h Imprime ’#’ durante o tratamento do pacote

Exemplo:

Page 146: booklinux-a4

thor:~ # rpm -Uvh apache- 1.3.26-57.i586.rpmapache ############################thor:~ # oSistema Operacional GNU/Linux 146

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:

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 Remove todos os pacotes que combinam com o pacote

--dbpath dir Usa o diretório dir como base de dados

--justdb Apenas atualiza a base de dados--nodeps Não verifica a dependência--noorder Não reordena a instalação do pacote

para satisfazer as dependências--noscripts Não executa qualquer script de

desinstalação--notriggers Não executa qualquer script que for

disparado por este pacote--root dir Usa dir como diretório raiz

Page 147: booklinux-a4

hmarx@thor:~> rpm -q apacheapache-1.3.26-57hmarx@thor:~> oSistema Operacional GNU/Linux 147

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 Consulta todos os pacotes instalados--root dir Usa dir como diretório raiz--dbpath dir Usa o diretório dir como base de

dados--queryformat fmt Usa fmt para exibir as informações-f arquivo Consulta pelo pacote contendo o

arquivo arquivo-p pacotes Consulta o pacote pacote (não

instalado)--triggeredby pkt Consulta pacotes disparados por pkt--whatprovides atrib Consulta pacotes que provêm o

atributo virtual atrib--whatrequires atrib Consulta pacotes que requerem o

atributo virtual atrib-i Exibe informações sobre o pacote--changelog Exibe log de alterações-l Exibe a lista de arquivos do pacote-s Exibe o status dos arquivos-d Exibe apenas os arquivos de

documentação do pacote-c Exibe apenas os arquivos de

configuração do pacote--provides Lista atributos providos pelo pacote-R, --requires Lista as dependências do pacote--scripts Lista os scripts de (des)instalação --triggers Lista os scripts disparado

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 :

Page 148: booklinux-a4

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.gzhmarx@thor:~> ohmarx@thor:~> rpm -qf /etc/inittabaaa_base-2002.9.12-1hmarx@thor:~> ohmarx@thor:~> rpm -qip /cdrom/suse/i586/lsb-1.2-31.i586.rpmName : lsb Relocations: /usrVersion : 1.2 Vendor: SuSE Linux AG, Nuernberg, GermanyRelease : 31 Build Date: Mon Sep 9 16:59:155 2002Install date: (not installed) Build Host: Bloembergen.suse.deGroup : System/Fhs Source RPM: lsb-1.2-31.src.rpmSize : 16214 License: GPLPackager : http://www.suse.de/feedbackURL : http://www.linuxbase.org/Summary : Linux Standard Base toolsDescription :For the Linux Standard Base (LSB) necessary tools, links and dependencies.Distribution: SuSE Linux 8.1 (i386)hmarx@thor:~> oSistema Operacional GNU/Linux 148

Consulta os arquivos do pacote inetd instalado :

Consulta qual pacote possui o arquivo /etc/inittab :

Consulta as informações do pacote lsb :

Page 149: booklinux-a4

Sistema Operacional GNU/Linux 149

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 On-line Update), zypper ou smart.

Utilizando o zypper

O zypper utiliza os repositórios cadastrados no Yast. Os comandos mais comuns do zypper são:

Ajudazypper { help | ? | --help }

Listar repositórioszypper { repos | lr } [ repositório ]

Procurar pacoteszypper { search | se } padrão

Instalar pacoteszypper { install | in } padrão

Remover pacoteszypper { remove | rm } padrão

Atualizar pacoteszypper { update | up } [ padrão ]

Utilizando o Smart

O smart tem seus repositórios cadastrados nos arquivos com extensão .channel no diretório /etc/smart/channels/Os comandos mais comuns do smart são:

Ajudasmart { -h | --help }

Listar repositóriossmart channel --show

Procurar pacotessmart search padrão

Instalar pacotessmart install padrão

Remover pacotessmart remove padrão

Atualizar pacotessmart upgrade [ pacote ]

Atualizar lista de pacotes de canaissmart update [ canal ]

Page 150: booklinux-a4

Name: simple-packageVersion: 1.0Release: 0.1Source: simple-package-1.0.tar.bz2Summary: Simple PackageLicense: GPLDistribution: openSuSEGroup: Applications%descriptionSimple package to demonstrate the RPM build process%description -l pt_BRPacote simples para demonstrar o processo de criar RPM%prep%setup -q%buildmake%installrm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT/usr/local/pacoteinstall -m 755 prog $RPM_BUILD_ROOT/usr/local/pacote/proginstall -m 644 arq.txt $RPM_BUILD_ROOT/usr/local/pacote/arq.txtinstall -m 644 img.png $RPM_BUILD_ROOT/usr/local/pacote/img.png%cleanrm -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 versionSistema Operacional GNU/Linux 150

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/prog.c simple-package-1.0/arq.txt simple-package-1.0/img.pngO arquivo simple-package.spec :

Page 151: booklinux-a4

Name : simple-package Relocations: (not relocatable)Version : 1.0 Vendor: (none)Release : 0.1 Build Date: Tue 08 Dec 2009 02:12:01 PM BRSTInstall Date: (not installed) Build Host: venus.starix.brGroup : Applications Source RPM: simple-package-1.0-0.1.src.rpmSize : 27517 License: GPLSignature : (none)Summary : Simple PackageDescription : Simple package to demonstrate the RPM build processDistribution: openSuSESistema Operacional GNU/Linux 151

Para criar o arquivo simple-package-1.0-0.1.i586.rpm no diretório

/usr/src/packages/RPMS/i58para 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 no diretório/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:

E com o comando

rpm -qpl simple-package-1.0-0.1.i586.rpm

podemos ver o conteúdo do pacote gerado:/usr/local/pacote/usr/local/pacote/arq.txt/usr/local/pacote/img.png/usr/local/pacote/prog

Page 152: booklinux-a4

Sistema Operacional GNU/Linux 152

Page 153: booklinux-a4

6. O Sistema X Window

Sistema Operacional GNU/Linux 153

O Sistema X WindowO 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:

XX Window System

X Version 11X 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).

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.

Page 154: booklinux-a4

Sistema Operacional GNU/Linux 154

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.

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 1 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 ¥+­):

Page 155: booklinux-a4

Sistema Operacional GNU/Linux 155

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:

-display display Especifica o servidor X a ser utilizado-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-bw n, --borderwidth n Define a borda com n pixels-bd cor, --bordercolor cor Define a cor da borda-title título Especifica o título da janela

Page 156: booklinux-a4

Sistema Operacional GNU/Linux 156

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.

Existem aindas diversas ferramentas para configuração manual do XFree86:

SuperProbeAuxílio na identificação da placa de vídeo, chipset e tamanho da memória de vídeo

xf86configConfiguração em modo texto. Você precisa conhecer aspectos técnicos das interfaces gráficas.

XF86SetupConfiguração em modo gráfico.

SAX2 - SuSE Advanced X Configuration Tool

Page 157: booklinux-a4

:0 local /usr/X11R6/bin/X :0 vt07:1 local /usr/X11R6/bin/X :1 vt08:2 local /usr/X11R6/bin/X :2 vt09 -bpp 16

Sistema Operacional GNU/Linux 157

Configuração do XFree86O 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 Configurações do teclado do PC/etc/X11/fs/config Configuração do servidor de fonts/etc/X11/xdm/Xservers Definição dos displays a serem criados/etc/X11/xdm/Xaccess Controle de acesso a conexões XDMCP/etc/X11/xdm/xdm-config Configuração do XDM/etc/X11/xdm/Xsetup Trata das consoles locais e remotas/etc/X11/xdm/RunChooser Trata as consoles remotas/etc/X11/xdm/Xreset Trata o logout de usuário remoto/etc/X11/xdm/Xresources Definição do comportamento da interface X (incluindo o

teclado)/etc/X11/fvwm2/* Configurações do fvwm2/etc/X11/xkb/* Configurações dos teclados

Por exemplo, para que você possua mais de um display, 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):

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.

Abaixo, uma tela do sistema X Window com o gerenciador de janelas KDE versão 3.x.

Page 158: booklinux-a4

Sistema Operacional GNU/Linux 158

Gerenciadores de janelasExistem hoje mais de 14 gerenciadores diferentes para o Linux. Os mais conhecidos são:

fvwm e fvwm2Gerenciador original do XFree86

fvwm95Configuração do fvwm para imitar a interface do Windows 95

KDE - K Desktop EnvironmentInterface 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 EnvironmentOutra interface famosa do Linux. Utiliza o ORBit, uma implementação

CORBA da RedHat.

mlvwmInterface semelhante ao Macintosh da Apple.

cdesimImita a interface CDE (Common Desktop Environment), muito utilizada pelas

estações Sun.

afterstepInterface semelhante ao NeXTStep.

amiwmInterface semelhante ao AMIGA.

enlightenmentInterface poderosa e configurável. Faz uso intensivo do modo gráfico.

icewmInterface que pode emular as interfaces do Windows 95, OS/2 e Motif.

twmUma interface bem simples.

qvwmMais uma interface, com ícones animados, emulando a interface do Windows 9x e

Me.

windowmakerMais 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.

Page 159: booklinux-a4

Seleção de Desktops no KDE

Sistema Operacional GNU/Linux 159

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.

O KDE tem ainda o kpager que exibe um excelente preview dos desktops e permite arrastar as janelas entre os desktops.

Page 160: booklinux-a4

Painel do KDE3 no SuSE Linux

Sistema Operacional GNU/Linux 160

O KDEO 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.

Através da barra do painel (gerado pelo kicker no KDE3 ou pelo plasma-desktop no KDE4), 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.

Page 161: booklinux-a4

KolourPaint - o similar do PaintBrush do Windows

KSCD - CD Player no KDE4

FREEAMP - Similar ao winamp

XMMS

Sistema Operacional GNU/Linux 161

Outros aplicativos são bem semelhantes aos existentes no ambiente Windows, como o kolourpaint mostrado abaixo:

Para multimedia, existem diversos aplicativos. Programas como o kscd, freeamp, xmss são incluídos no kit SuSE Linux.

Page 162: booklinux-a4

XINE

Amarok no KDE4

Sistema Operacional GNU/Linux 162

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.

Para tocar audio (DVDs, CDs, MP3s, estacões de rádio, ...) há o Amarok com uma interface muito amigável.

Page 163: booklinux-a4

Sistema Operacional GNU/Linux 163

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.

Page 164: booklinux-a4

Sistema Operacional GNU/Linux 164

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.

Page 165: booklinux-a4

Sistema Operacional GNU/Linux 165

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).

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.

Page 166: booklinux-a4

axcalc - Planilha do Applixware

oocalc - Planilha do OpenOffice

Sistema Operacional GNU/Linux 166

Page 167: booklinux-a4

Sistema Operacional GNU/Linux 167

Você poderá ainda configurar e administrar o SuSE Linux através do KDE utilizando o KDE Control Center e os módulos do YaST.

Page 168: booklinux-a4

Sistema Operacional GNU/Linux 168

Page 169: booklinux-a4

7. Redes em Unix

Sistema Operacional GNU/Linux 169

Redes em UnixColocar 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 Programas de aplicação que utilizam a rede6. Apresentação Padroniza a representação dos dados para as aplicações5. Sessão Gerencia as sessões entre as aplicações4. Transporte Trata da detecção e correção de erro fim a fim3. Rede Trata das conexões através da rede2. Enlace Trata da confiabilidade da transferência dos dados pelo meio

físico. Define como as variações da camada física formam os dados.

1. Física Define as características físicas do meio (mecânicas e eletromagnéticas)

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 1516 31

Porto de origem Porto de destinoTamanho Checksum

Dados

Page 170: booklinux-a4

Sistema Operacional GNU/Linux 170

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.

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 ---------------------------------------------->

0 4 8 12 16 20 24 28 31

Versão IHL ToS Tamanho total

Identificação Flags Offset de fragmentacão

TTL Protocolo Checksum do cabecalho

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.

Page 171: booklinux-a4

Sistema Operacional GNU/Linux 171

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).

Na camada física são definidos os tipos e formatos de conectores, cabos, antenas, pinagens, etc.

Page 172: booklinux-a4

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l

Sistema Operacional GNU/Linux 172

No TCP/IP são definidas diversas aplicações, conhecidas como serviços TCP/IP. Os mais comuns são:

Serviço Exemplo

• correio eletrônico e-mail• transferência de arquivos ftp• login em máquinas remotas telnet• execução remota de programas rsh ou rexec• compartilhamento de arquivos NFS• compartilhamento de dispositivos impressora remota, fax, ...

Estes serviços são tratados por aplicativos que podem rodar em modo standalone ou no modo inetd (ou atualmente) xinetd.

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 protocolo flags usuario aplicativo argumentos

serviço nome do serviço em /etc/servicessocket tipo do socket

stream, dgram, raw, rdm ou seqpacketprotocolo nome do protocolo em /etc/protocols

tcp, udp, tcp4, udp4, tcp6, udp6, ...flags modo de utilização do socket

wait, nowaitusuário nome do usuário do processo que trata o serviçoaplicativo caminho completo do aplicativo a ser executadoargumentos argumentos a serem passados para o aplicativo

Por exemplo, o serviço FTP pode ser disparado usando o inetd através de:

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).

Page 173: booklinux-a4

service nome_do_servi ço{

atributo operador valor valor ......

}

Sistema Operacional GNU/Linux 173

O inetd pode ser 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

O operador de assinalamento pode ser =, += e -=. A maioria dos atributos somente suporta o operador =.

Os atributos são:

Atributo Descrição / valores aceitosid Identificação única para o serviço

type Qualquer combinação de RPC, INTERNAL ou UNLISTEDflags Qualquer combinação de REUSE, INTERCEPT , NORETRY ,

IDONLY , NAMEINARGS , e NODELAYsocket_type stream, dgram, raw ou seqpacketprotocol Qualquer protocolo descrito em /etc/protocols

wait yes ou nouser Usuário para o processo que deve existir em /etc/passwd

group Grupo para o processo que deve existir em /etc/group

instances Número máximo de serviços que podem estar ativos

nice Prioridade do serviço

server Path completo do programa a executar para o serviço

server_args Argumentos para o programa

only_from Lista de IPs de máquinas ou rede para os quais o serviço estará disponível

no_access Lista de IPs de máquinas para os quais o serviço não estará disponível

access_times Intervalo na forma h1:m1-h2:m2 no qual o serviço estará disponível

log_type Determina a forma do log: SYSLOG facility level FILE filename soft-limit hard-limit

log_on_success Determina as informações que serão colocadas no log quando o serviço é iniciado e terminado. PID, HOST, USERID, EXIT , DURATION

log_on_failure Determina as informações que serão colocadas no log quando o serviço não pode ser iniciado. HOST, USERID, ATTEMPT , RECORD

rpc_version Versão do RPC no formato número-número

rpc_number Número para serviços UNLISTED RPC

env Lista de definições de variáveis de ambientes, no formato nome=valor, que serão adicionadas ao ambiente ao iniciar o serviço

Page 174: booklinux-a4

# SWAT is the Samba Web Admin Toolservice swat{

socket_type = streamprotocol = tcpwait = nouser = rootserver = /usr/sbin/swatonly_from = 127.0.0.1disable = no

}

Sistema Operacional GNU/Linux 174

Atributos do xinetd (cont.)

passenv Lista de variáveis de ambiente do xinetd que serão passadas para o serviço

port Porto do serviço, listado em /etc/services

redirect 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.

bind IP da interface pela qual o serviço será disponibilizado

interface Sinônimo de bindbanner Nome do arquivo com o texto a ser transmitido à máquina remota após a

conexão ao serviço ser estabelecidabanner_success Nome do arquivo com o texto a ser transmitido à máquina remota

quando o serviço é permitidobanner_fail Nome do arquivo com o texto a ser transmitido à máquina remota

quando o serviço é negadoper_source Número de instâncias do serviço por IP ou UNLIMITEDcps Limite de conexões por segundo

max_load Carga do sistema acima da qual conexões para o serviço são recusadas

disable 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 :

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)

Page 175: booklinux-a4

Sistema Operacional GNU/Linux 175

Servidores, Estações e TerminaisOs 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.

Page 176: booklinux-a4

Sistema Operacional GNU/Linux 176

Endereçamento IPv4A 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

Para facilitar a administração, o espaço de endereços IPv4 foi dividido m classes. Considerando o valor de w, temos:

Classe Valores de w Net Id HostId No. de redes

No. de nodos

A 1 - 126 w x.y.z 126 16.777.214B 128 - 191 w.x y.z 16.384 65.534C 192 - 223 w.x.y z 2.097.151 254D 224 - 239 Endereços de MulticastE 240 - 247 Reservada para uso futuroF experimentais e/ou reservados para uso futuro

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

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 Faixa de endereços Nome do blocoA 10.0.0.0 a 10.255.255.255 24-bit blockB 172.16.0.0 a 172.31.255.255 20-bit blockC 192.168.0.0 a 192.168.255.255 16-bit block

Page 177: booklinux-a4

# /etc/host.conforder hosts bindmulti on

# /etc/hosts127.0.0.1 localhost192.168.200.3 thor.starix.br thor

# /etc/networksloopback 127.0.0.0starix.local 192.168.200.0

# /etc/resolv.confnameserver 192.168.200.3search starix.br

# /etc/nsswitch.confpasswd: compatgroup: compathosts: files dnsnetworks: files dnsservices: filesprotocols: filesrpc: filesethers: filesnetmasks: filesnetgroup: filespublickey: filesbootparrms: filesautomout: files nisaliases: files

Sistema Operacional GNU/Linux 177

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.

Exemplos do conteúdo destes arquivos podem ser vistos abaixo.

Page 178: booklinux-a4

Sistema Operacional GNU/Linux 178

SubclassesUm 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.

Page 179: booklinux-a4

Sistema Operacional GNU/Linux 179

RoteamentoPara 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.

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 Gateway Máscara Interface192.168.201.0 * 255.255.255.0 eth0loopback * 255.0.0.0 lodefault 192.168.201.1 255.255.255.0 eth0

O gateway nesta rede terá a seguinte tabela de roteamento:

Destino Gateway Máscara Interface192.168.201.0 * 255.255.255.0 eth0192.168.200.0 * 255.255.255.0 eth1loopback * 255.0.0.0 lodefault 192.168.200.2 255.255.255.0 eth1

Page 180: booklinux-a4

thor:~ # ifconfig eth0eth0 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:0xb800thor:~ # o

thor:~ # ping -c 4 tigerPING 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 usec64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=2 ttl=32 time=929 usec64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=3 ttl=32 time=978 usec64 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 3023msrtt min/avg/max/mdev = 0.868/0.931/0.978/0.045 ms thor:~ # oSistema Operacional GNU/Linux 180

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.

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.

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:-c num número de pacotes a serem enviados-n apena numérico (não resolverá nomes)-i num intervalo entre pacotes em segundos

pode ser fracionário-w num timeout em segundos (pode ser fracionário)-b permite ping em endereço de broadcast

Page 181: booklinux-a4

Sistema Operacional GNU/Linux 181

Page 182: booklinux-a4

thor:~ # route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface200.150.13.176 192.168.200.2 255.255.255.248 UG 0 0 0 eth0192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 eth00.0.0.0 192.168.200.147 0.0.0.0 UG 0 0 0 eth0thor:~ # oSistema Operacional GNU/Linux 182

route [ opções ] [ { add | del | flush } parâmetros ]

Ferramenta para configuração e verificação da tabela de roteamento. Veja também netstat.

Ref é o número de referências a esta rota e não é utilizada pelo kernel do Linux. Use é numero de utilizacã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 dinamicamenteD - a rota é dinâmicaM - a rota foi modificada por um daemon ou por redirecionamentoA - a rota foi instalada por configuracão de enderecoC - a entrada é cache! - a rota é rejeitada

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.

Page 183: booklinux-a4

thor:~ # netstat -suUdp: 11924335 packets received 2739 packets to unknown port received. 27 packet receive errors 11907991 packets sentthor:~ # o

thor:~ # arp -aatlas.starix.br (192.168.200.31) at 00:01:02:EC:22:AD [ether] on eth0wolf.starix.br (192.168.200.35) at 00:00:B4:A6:A1:CC [ether] on eth0spider.starix.br (192.168.200.222) at 00:00:B4:A7:FF:1E [ether] on eth0apollo.starix.br (192.168.200.2) at 00:E0:7D:A5:EB:21 [ether] on eth0diana.starix.br (192.168.200.147) at 00:80:C8:7C:7E:16 [ether] on eth0tiger.starix.br (192.168.200.1) at 00:40:C7:94:11:53 [ether] on eth0 thor:~ # oSistema Operacional GNU/Linux 183

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

arp [ opções parâmetros ]

Manipula o cache de ARP (Address Resolution Protocol), mapeamento de endereços ethernet e IPs.

rarp [ opções parâmetros ]

Manipula a tabela RARP do sistema (Reverse Address Resolution Protocol).

Page 184: booklinux-a4

thor:~ # ipcalc 192.168.10.0 - 192.168.11.31deaggregate 192.168.10.0 - 192.168.11.31192.168.10.0/24192.168.11.0/27thor:~ # ipcalc 201.17.0.0/16Address: 201.17.0.0 11001001.00010001. 00000000.00000000Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000Wildcard: 0.0.255.255 00000000.00000000. 11111111.11111111=>Network: 201.17.0.0/16 11001001.00010001. 00000000.00000000HostMin: 201.17.0.1 11001001.00010001. 00000000.00000001HostMax: 201.17.255.254 11001001.00010001. 11111111.11111110Broadcast: 201.17.255.255 11001001.00010001. 11111111.11111111Hosts/Net: 65534 Class C

thor:~ # othor:~ # geoiplookup linuxtech.com.brGeoIP Country Edition: BR, Brazilthor:~ # geoiplookup 201.17.146.157GeoIP Country Edition: BR, Brazilthor:~ # geoiplookup suse.deGeoIP Country Edition: DE, Germanythor:~ # oSistema Operacional GNU/Linux 184

ipcalc [ opções ] endereço [ [ / ] máscara ] [ máscara ]

Calcula endereços de broadcast, rede, máscaras, sub-redes

geoiplookup { ip | nome }

Localiza geograficamente o endereço fornecido

Page 185: booklinux-a4

thor:~ # tcpdump -n -l -i eth0 -c 4tcpdump: listening on eth022:23:49.195111 arp who-has 192.168.200.41 tell 192.168.200.322:23:49.195275 arp reply 192.168.200.41 is-at 0:e0:7d:b7:88:4b22: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:~ # oSistema Operacional GNU/Linux 185

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.

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.

Page 186: booklinux-a4

Sistema Operacional GNU/Linux 186

Para o modo gráfico existem diversas ferramentas, entre elas:

xtraceroute

Interface para visualização da rota através do globo terrestre, utilizando o traceroute.

ethereal

Poderoso analisador de protocolos com possibilidades de filtros e visualização em tempo real do conteúdo dos pacotes.

Page 187: booklinux-a4

Sistema Operacional GNU/Linux 187

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 bindaddress/bindport serão redirecionadas para 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 IPsdeny 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.

Page 188: booklinux-a4

Sistema Operacional GNU/Linux 188

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.

Page 189: booklinux-a4

Sistema Operacional GNU/Linux 189

Endereçamento IPv6Os 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 Fração do espaço de endereçamentoreservadonão assinalado

0000 00000000 0001

1/2561/256

reservado para NSAPreservado para IPX

0000 0010000 010

1/1281/64

não assinaladonão assinaladonão assinalado

0000 0110000 10001

1/321/161/8

endereços de unicast global agregáveis

001 1/8

não assinaladonão assinaladonão assinaladonão assinaladonão assinaladonão assinaladonão assinaladonão assinaladonão assinaladonão assinalado

01001110010111011101111 01111 101111 1101111 1110 0

1/81/81/81/81/81/161/321/641/1281/512

endereço de unicast local de link endereço de unicast local de site

1111 1110 101111 1110 11

1/10241/1024

endereços de multicast 1111 1111 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.

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 13 bits 32 bits 16 bits 64 bits001 TLA

IDNLA ID SLA ID interface ID

<--------------- topologia pública ------------>topologia

<----------->do site

identificador <-------------------------------------->

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.

Page 190: booklinux-a4

Sistema Operacional GNU/Linux 190

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.

80 bits 16 bits 32 bits0000 . . . . . . . . . . 0000 FFFF Endereço IPv4

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.

80 bits 16 bits 32 bits0000 . . . . . . . . . . 0000 0000 Endereço IPv4

Um endereco IPv6 com 127 bits em 0 e 1 bit em 1, escrito como ::1 é o endereco de loopback.

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 54 bits 64 bits1111111010 0000 . . . . . . . . . 0000 interface ID

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 38 bits 16 bits 64 bits11111111011 0000 . . . . . 0000 SLA ID interface ID

Endereços de multicast

São endereços que possuem o prefixo 1111 1111, ou seja, começam com ff .

Page 191: booklinux-a4

Sistema Operacional GNU/Linux 191

Ferramentas de diagnóstico

Podem ser utilizadas ferramentas como o ping6, traceroute6 e tracepath6 para diagnóstico de redes utilizando IPv6.

Internet e IntranetUma 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 .

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.

Page 192: booklinux-a4

1 YP é marca registrada da British Telecom._________________________

8. Serviços de Redes

Sistema Operacional GNU/Linux 192

DomíniosPara 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).

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.

Page 193: booklinux-a4

Sistema Operacional GNU/Linux 193

DNS - Domain Name SystemNo 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 Número de nodos Data Número de nodos1969 4 10/1990 313.0001971 15 01/1991 376.000

01/1973 35 07/1991 535.00009/1973 40 10/1991 617.000

1977 111 01/1992 727.00008/1981 213 1993 1.300.00005/1982 235 1994 2.200.00008/1983 562 1995 4.900.00010/1984 1.024 1996 9.500.00010/1985 1.961 1997 18.000.00002/1986 2.308 1998 30.000.0011/1986 5.089 1999 42.000.00012/1987 28.174 2000 70.000.00007/1988 33.000 2001 110.000.00010/1988 56.000 2002 162.000.00001/1989 80.0007 2003 172.000.00007/1989 130.000 2004 317.000.00010/1989 159.000 2005 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

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 .

Page 194: booklinux-a4

Sistema Operacional GNU/Linux 194

Em setembro de 2009, o número de usuários da Internet no mundo é estimado em mais de 1.7 bilhões.

Page 195: booklinux-a4

Sistema Operacional GNU/Linux 195

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.

Page 196: booklinux-a4

hmarx@thor:~> host lithium.cchem.berkeley.edu.lithium.cchem.berkeley.edu has address 128.32.198.12hmar@thor:~> o

Sistema Operacional GNU/Linux 196

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 :

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 o domínio de primeiro nível da Alemanha.suse.de o domínio da SuSE, hoje da empresa Novell, Inc.www.suse.de (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.

Page 197: booklinux-a4

Sistema Operacional GNU/Linux 197

Software DNSO 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ínioMuda a origem do domínio para as definições subsequentes

$INCLUDE arquivoInclui o arquivo arquivo que deve conter entradas de controle e registros do DNS.

$TTL ttlDefine 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.

Page 198: booklinux-a4

Sistema Operacional GNU/Linux 198

Formato dos registros do DNS

O formato do registro (chamado de RR - Resource Record) é:

[ nome ] [ ttl ] [ classe ] tipo dados

onde:nome é o objeto definido (domínio, servidor, ...)ttl é o tempo de vida da informacão (Time To Live)classe pode ser:

IN InternetHS HesioId (MTI Service protocol) CH Chaos (MIT LAN protocol)

Geralmente, apenas a classe IN é utilizada.tipo é 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.

Page 199: booklinux-a4

meudominio.com. IN SOA meudominio.com. root.dominio.com. (2009110305 ; serial Nov 3, 2009, revision #52D ; refresh in 2 days4H ; retry in 4 hours2W ; expire in 2 weeks1W ; minumin 1 week)

IN NS ns1.meudominio.com.

server.meudominio.com. IN A 192.168.10.17

Sistema Operacional GNU/Linux 199

Os formatos dos principais tipos de registros são:

1. Start of Authority

SOA dominio email ( serialrefreshretryexpireminimum

)onde

serial é um número sequencial sempre crescente. É 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;expire é o limite de validade das informações sobre o domínio;minimum é o tempo que respostas negativas (tipo domínio inexistente) pode

estar no cache de servidores de DNS secundários.

2. Name server

NS servidoronde

é o nome ou o IP do servidor de nomes do domínio.

3. Name to address mapping

A ipv4onde

ipv4 é o IPv4, formado por 4 números de 8 bits separados por ’.’.

Page 200: booklinux-a4

IN AAAA 2001:0780:0:1::1

www.meudominio.com. IN A6 96 ::fef7:6d2c ipv6.provedor.com.

ipv6.provedor.com. IN A6 0 3ffe:1900:4545:2:2d0:9ff::

17.10.168.192.in-addr.arpa.IN PTR server.meudominio.com.

$ORIGIN meudominio.com.mail IN CNAME servidor

Sistema Operacional GNU/Linux 200

4, Name to IPv6 address mapping

AAAA ipv6onde

ipv6 é o IPv6, de acordo com as regras definidas no capítulo anterior, Rede em Unix.

5. Name to IPv6 address mapping (experimental)

A6 prefixo ipv6 [ nome ]onde

prefixo é o número de bits do prefixo;ipv6 é o IPv6;nome é o nome de referência.

6. Address to name mapping

PTR nomeonde

nome é o nome.

7. Cannonical name (aliases)

CNAME nomeonde

nome é o apelido para o objeto.

Page 201: booklinux-a4

mail IN TXT "Servidor de e-mails"

IN RP root.meudominio.com. meudominio.com.

IN MX 10 mail.meudominio.com.IN MX 20 mail.provedor.com.

www IN HINFO "Quad Xeon" "SuSE Linux"

Sistema Operacional GNU/Linux 201

8. Textual information

TXT " texto"onde

texto é um texto livre.

9. Responsible person

RP email domínioonde

email é o e-mail do responsável;domínio é o domínio associado ao responsável.

10. Mail exchange

MX ordem servidoronde

ordem é o número de preferência do servidor de email. Número menor tem maior preferência;

servidor é o nome do servidor que recebe e-mails para o o objeto (tipicamente um domínio).

11. Host information

HINFO hardware softwareonde

hardware é uma descricão do equipamento;software é uma descricão do ambiente operacional do equipamento.

Page 202: booklinux-a4

IN MINFO mailadm.meudominio.com. mailerr.meudominio.com.

IN LOC 44 0 0.000 S 19 30 0.000 W 860.00m 0.00m 10000m 10m

IN WKS tcp http pop3 smtp

Sistema Operacional GNU/Linux 202

12. Mailbox or Mail list information

MINFO admin erroronde

admin é o e-mail do administrador;error é o e-mail para onde vão os erros.

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;lat-m são os minutos da latitude;lat-s são os segundos da latitude;long-d são os graus da longitude;long-m são os minutos da longitude;long-s são os segundos da longitude;alt é a altitude em metros;size é o diâmetro do círculo representando a precisão em metros da

localização;hp é a precisão horizontal em metros;vp é a precisão vertical em metros.

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.

Page 203: booklinux-a4

IN SRV 0 5 80 www.meudominio.com.

linuxtech.com.br. IN DNSKEY 256 3 5 ( AwEAAchq3AcolVSob3ZC3H4YwSYDx6R2V0I1ivfKff0SLWmTQklYjuAT uZZrZWqMMU3J5sXxSo7gT91vNONPvwNsRh089wjF0dJA3/rdGSVt8M0R 1O1wG/pLFiQTE8mjAjBY5TpOAlJgJNWUlQU6xkUmvgOCw+ysw8KFbrgN FyQm5p4T)

Sistema Operacional GNU/Linux 203

15. SRV - Available Services

srvce.proto [ .nome] [ ttl ] IN SRV ordem peso porto objetoonde

srvce nome simbólico do serviço como _http, _ftp, _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;porto é o número do porto do serviço;objeto é o nome do servidor destino.

16. DNSKEY - DNS Public key

DNSKEY flags proto algo dadosonde

flags número de 16 bits (0, 256 ou 257):bits 0-6 não usados, devem ser 0bit 7 indica assinatura de zonabits 8-14 não usados, devem ser 0bit 15 indica ponto de segurança

proto código do protocolo (somente 3 é atualmetne valido)algor código do algoritmo

0: reservado1: RSA-MD52: Diffie-Helmann3: DSA-SHA-14: Elliptic curve5: RSA-SHA-16-251: não assinalado252: Indirect253: URI privada254: OID privada255: reservado

dados chave no codificada em base64

Page 204: booklinux-a4

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= )

)

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

Sistema Operacional GNU/Linux 204

17. RRSIG - Signature Record

RRSIG tipo algo nome ottl expira inicio keytag dono assinaturaonde

tipo registro RRalgo código do algoritmo como em DNSKEYnomes número de componentes no nome do objetoottl tempo de vida do objetoexpira data de expiração do RRSIGinicio data inicialkeytag código de verificação da assinaturadono objeto dono da chave privadaassinaturaassinatura 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= )

18. NSEC - Next secure record

NSEC próximo ( lista_rr )onde

próximo próximo nome de servidor no arquivo de zonalista_rr lista de registros para o nome

Page 205: booklinux-a4

# # /etc/resolv.conf # search meudominio.com nameserver 192.168.1.1

Sistema Operacional GNU/Linux 205

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.

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 Endereço IP Funçãons 192.168.1.1 servidor de nomesmail 192.168.1.2 servidor de e-mailmaq1 192.168.1.3 estação 1maq2 192.168.1.4 estação 2www 192.168.1.5 servidor web

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.

Page 206: booklinux-a4

# # 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/LinuxSupport200.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; }; };

Sistema Operacional GNU/Linux 206

O arquivo /etc/named.conf pode então conter :

Page 207: booklinux-a4

; Zone meudominio.com $ORIGIN br. $TTL 1D meudominio IN SOA meudominio.com. root.meudominio.com. ( 2001030101 ; serial 3H ; refresh

1H ; retry1W ; expire1D ) ; TTL minimoIN NS ns.meudominio.com.IN A 192.168.1.1IN 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.00mIN WKS192.168.1.1 tcp domainIN WKS192.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

; Zone 1.168.192.in-addr.arpa $TTL 1D @ IN SOA meudominio.com. root.meudominio.com. (

2001030101 ; serial3H ; refresh1H ; retry1W ; expire1D ) ; TTL minimoIN NS ns.meudominio.com.IN A 192.168.1.1IN 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.

Sistema Operacional GNU/Linux 207

O arquivo meudominio.zone que define o domínio meudominio.com pode ser:

De forma semelhante, o arquivo 192.168.1.zone que define o domínio reverso 1.168.192.in-addr.arpa pode ser:

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.".

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.

Page 208: booklinux-a4

root@thor:/var/lib/named/master # dnssec-keygen -a RSASHA1 -b 512 -n zone neudominio.com

Kmeudominio.com.+005+12906root@thor:/var/lib/named/master # o

meudominio.com. IN DNSKEY 256 3 5 ( AwEAAaPF9T2ArDW8xtD8fguk/x44WQTtB5rhwZv8LFugnzbtotJvhnmB RgNjtaS9N3e8crJ5LCu5+oxKiRDwcFceCkU= )

Private-key-format: v1.2Algorithm: 5 (RSASHA1)Modulus:

o8X1PYCsNbzG0Px+C6T/HjhZBO0HmuHBm/wsW6CfNu2i0m+GeYFGA2O1pL03d7xysnksK7n6jEqJEPBwV-x4KRQ==

PublicExponent: AQABPrivateExponent:

IVvAES/1Y9i40naroemQwXIOx88T/ns/eWtLCbrU01YOntZQdkWy/eb6DoviEf1JguBvEzCtlGuFpBytLZNfgQ==Prime1: 09YtwfUYEUl+S5/mkepX7pQbL5SOc6CFy1MeTKsUeWE=Prime2: xeqdaTijQEdUoAM6jKmToCI99hPPImj1AnsFB+EIh2U=Exponent1: sUX/LN0qsuzJ4AeEMH/n7iPLTFoJjAG9dZWtOYPBsoE=Exponent2: MQ10FCcgdwb2123VbhV9bDvwZXQFa37d8s5wscI5be0=Coefficient: 0pT8G7+m1148EqLEyg9UdFiPYtWm9bmznyUyVaRPpjc=

root@thor:/var/lib/named/master # dns-signzone -o meudominio.com meudominio.com.zone Kstarix.br.+005+13026.key

meudominio.com.zone.signedroot@thor: /var/lib/named/master # oSistema Operacional GNU/Linux 208

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,

Serão gerados dois arquivos. O registro DNSSEC com a chave pública está no arquivo com a extensão .key (Kmeudominio.com.*.key):

Este texto deverá ser inserido no arquivo que descreve o domínio que fica normalmente no diretório /var/lib/named/master/ .

E a chave privada está no arquivo com a extensão .private (Kmeudominio.com.*.private)

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.

Page 209: booklinux-a4

hmarx@thor: ~> nslookupDefault Server: thor.starix.brAddress: 192.168.200.3

> ls linuxtech.br[thor.starix.br]#$ORIGIN linuxtech.br.@ 1D IN A 192.168.200.3thor 1D IN A 192.168.200.3www 1D IN A 192.168.200.3> server ns.linuxsupport.com.brDefault Server: ns.linuxsupport.com.brAddress: 201.17.146.157

> www.linuxsupport.com.brServer: ns.linuxsupport.com.brAddress: 201.17.146.157

Name: www.linuxsupport.com.brAddressL 201.17.146.157

> ^Dhmarx@thor: ~> ohmarx@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 = INstarix.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.178master.softaplic.com.br. 1D IN A 200.162.94.241ns.starix.com.br. 1D IN A 200.150.13.178ns2.starix.com.br. 1D IN A 200.150.13.177hmarx@thor: ~> oSistema Operacional GNU/Linux 209

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.

dnsquery

Pesquisa em servidores de DNS

Page 210: booklinux-a4

hmarx@thor: ~> host linuxsupport.com.brlinuxsupport has address 201.17.146.157linuxsupport.com.br mail is handled (pri=10) by mail.linuxsupport.com.brlinuxsupport.com.br mail is handled (pri=20) by master.softaplic.com.brhmarx@thor: ~> o

thor:~ # named-xfer -z starix.com.br -f starix.zone ns.starix.com.brnamed-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:~ # oSistema Operacional GNU/Linux 210

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.

named-xfer

Transferência de definição de domínios.

Page 211: booklinux-a4

#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

Sistema Operacional GNU/Linux 211

NIS - Network Information SystemEm 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::

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.

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.

Page 212: booklinux-a4

hmarx@thor: ~> ypdomainnameTREINAMENTOhmarx@thor: ~> o

hmarx@thor: ~> ypwhichspider.starix.brhmarx@thor: ~> oSistema Operacional GNU/Linux 212

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.

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.

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 Especifica o domínio NIS desejado-t Evita a tradução do nome do mapa para o apelido-m mapa Procura o servidor NIS para o mapa especificado-Vn Define a versão do NIS (default é 2)-x Exibe a tabela de tradução de apelidos de mapas

Page 213: booklinux-a4

hmarx@thor: ~> yppasswd -fChanging 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 emptyfield, 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: ~> ohmarx@thor: ~> ypcat -xUse "ethers" for map "ethers.byname"Use "aliases" for map "mail.aliases"Use "services" for map "services.byname"Use "protocols" for map "protocols.bynumber"Use "hosts" for map "hosts.byname"Use "networks" for map "networks.byaddr"Use "group" for map "group.byname"Use "shadow" for map "shadow.byname"Use "passwd" for map "passwd.byname"hmarx@thor: ~> oSistema Operacional GNU/Linux 213

yppasswd [ -f ] [ -l ] [ -p ] usuárioypchfn usuárioypchsh 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 Altera os campos GECOS (equivalente a ypchfn)-l Altera o login shell (equivalente a ypchsh)-p Altera a senha

ypcat [ -kt ] [ -d domínio ] mapa | -x

Exibe valores das chave de uma base NIS. Algumas opções:

-d domínio Especifica o domínio NIS desejado-k Exibe as chaves do mapa-Vn Define a versão do NIS (default é 2)-x Exibe a tabela de tradução de apelidos de mapas

Page 214: booklinux-a4

hmarx@thor: ~> ypmatch hmarx flavia passwdhmarx:$1$pYJmDsRl$5Nzq713I0x5G60nYW7hfh/:1000:3000:Helio MarquesSobrinho,Starix,3284-3001:/home/hmarx:/bin/bashflavia:$1$m4ZTl.qN$/1xPFnxJhtYwPi9t4oNVL.:502:3000:Flavia de Castro

Mendes Marques,,3284-3001:/home/flavia:/bin/bash

Sistema Operacional GNU/Linux 214

ypmatch [ -d domínio ] [ -kt ] chave ... mapa | -x

Exibe as informações de uma ou mais chaves de um mapa NIS. Algumas opções:

-d domínio Especifica o dominio NIS desejado-k Mostra aas chaves do mapa-t Evita a tradução do nome do mapa para o apelido-x Evita a tradução do nome do mapa para o apelido

Manualmente, a base de dados poderá ser inicializada pelo aplicativo 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 aplicativo ypserv ou o script rcypserv.

Os servidores escravos são inicializados utilizando o comando:

/usr/lib/yp/ypinit -s mestre

Page 215: booklinux-a4

Sistema Operacional GNU/Linux 215

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 Distinguished NameRDN Relative Distinguished NameDIT Directory Information TreeLDIF LDAP Data Interchange FormatOID 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

Page 216: booklinux-a4

Sistema Operacional GNU/Linux 216

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.

Os atributos definidos no RFC2256 são:

uid User Idcn Common Namesn Surnamel Locationou Organizational Unito Organizationdc Domain Componentst Statec Country

Page 217: booklinux-a4

dn: uid=hmarx,ou=People,dc=linuxtech,dc=com,dc=br

uid: hmarxcn: Helio Marquesobjectclass: accountobjectclass: posixAccountobjectclass: toploginshell: /bin/bashuidnumber: 1000gidnumber: 3001homedirectory: /home/hmarxgecos: Helio Marques,,,,

userpassword: {crypt}dF35L2K2TmOVU

Sistema Operacional GNU/Linux 217

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

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).

Page 218: booklinux-a4

## See slapd.conf(5) for details on configuration options.# This file should NOT be world readable.#include /etc/openldap/schema/core.schemainclude /etc/openldap/schema/cosine.schemainclude /etc/openldap/schema/inetorgperson.schemainclude /etc/openldap/schema/rfc2307bis.schemainclude /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 /var/run/slapd/slapd.pidargsfile /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

Sistema Operacional GNU/Linux 218

Utilizando o modelo master/slave é possível implementar replicação dos dados::

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:

Page 219: booklinux-a4

Sistema Operacional GNU/Linux 219

Page 220: booklinux-a4

# 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!

Sistema Operacional GNU/Linux 220

2) Política de controle de acesso (ACLs):

Page 221: booklinux-a4

############################################################# BDB database definitions############################################################

database bdbsuffix "dc=my-domain,dc=com"checkpoint 1024 5cachesize 10000rootdn "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 maintainindex objectClass eq

root@thor: # /etc/init.d/slapd start

root@thor: # rcldap start

root@thor: # chkconfig slapd on

Sistema Operacional GNU/Linux 221

3) Definicão da base de dadosAqui o domínio deve ser alterado para o escolhido.

Uma vez configurado, o servidor poderá ser iniciado através do comando:

ou, no openSuSE,

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:

Page 222: booklinux-a4

ldappasswd -W -D ’uid=hmarx,ou=People, dc=linuxtech,dc=com,dc=br’ ’uid=hmarx’

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’

ldapmodify -W -r -D "cn=Manager, c=linuxtech,dc=com,dc=br" < hmarx.ldif

Sistema Operacional GNU/Linux 222

Utilização do Servidor LDAP

Para alterar a senha de uma entrada no LDAP utiliza-se o comando ldappasswd, por exemplo:

Pesquisas são feitas utilizando o comando ldapsearch. Exemplos:

Alterações podem ser feitas utilizando o comando ldapmodify. Exemplo:

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

Page 223: booklinux-a4

Sistema Operacional GNU/Linux 223

Servidor WEBO 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.

Page 224: booklinux-a4

Sistema Operacional GNU/Linux 224

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 SignificadoServerType Modo do disparo do httpd (standalone ou inetd)

ServerRoot Diretório raiz do servidor

Timeout Tempo em segundos antes de enviar ou receber timeout

KeepAlive Permite conexões persistentes (atende mais de uma requisição por conexão)

MaxKeepAliveRequests Número máximo de requisições por conexão

KeepAliveTimeout Espera em segundos pela próxima requisição do mesmo cliente antes de fechar uma conexão

MinSpareServers Número mínimo de processos httpd aguardando requisições

MaxSpareServers Número máximo de processos httpd aguardando requisições

StartServers Número inicial de processos httpd disparados

MaxClients Número máximo de clientes simultâneos

MaxRequestPerChild Número máximo de requisições por processo

Listen Portos/IPs adicionais aos default

LoadModule Módulos carregados pelo apache

AddModule Reconstrução dos módulos definidos em LoadModule

ExtendedStatus Habilita informações completas exibidas em server-status

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 SignificadoPort Porto para o protocolo HTTP (padrão : 80)Listen Portos e IPs adicionais (padrão : 80 para HTTP e 443 para

HTTPS)User Usuário dos processos disparados (wwwrun)Group Grupo dos processos disparados (nogroup)ServerAdmin Endereço de e-mail para envio de problemas. É colocado em

páginas de erro geradas pelo apacheServerName Nome do servidor enviado aos clientes. Este nome deve ser

resolvido no DNSDocumentRoot Raiz para os documentos (páginas WEB)UserDir Diretório das páginas pessoais (em ~usuário)DirectoryIndex Arquivo(s) de índice default (padrão: index.html)AccessFileName Arquivos para o controle de acesso a cada diretórioHostNameLookups Resolve o nome dos IPs dos clientes (DNS reverso)TypesConfig Arquivo para definição dos tipos de arquivos pela extensão

(padrão:/etc/httpd/mimes.types )DefaultType Tipo a ser enviado ao cliente para arquivos desconhecidos

(padrão:text/plain)

MIMEMagicFile Arquivo para descoberta do tipo do documento (padrão:/etc/httpd/magic )

Page 225: booklinux-a4

Sistema Operacional GNU/Linux 225

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 IP ou nome do computador remoto

%a IP do cliente

%l Identificação do usuário remoto (via identd)

%u Identificação do usuário autenticado ou -

%t Horário de acesso

%r Método, URI e versão do HTTP (primeira linha da requisição)

%s Código de erro (por exemplo, 200 = OK e 404 = documento não encontrado)

%b Número de bytes transferidos

%U O caminho da URL

%{Referer}i URL que causou a referência à requisição

%{User-Agent}i Identificação completa do cliente (browser e plataforma)

Os arquivos de log podem ser definidos pelas diretivas:

Diretiva SignificadoErrorLog Arquivo padrão para log de erros

(padrão:/var/log/httpd/error_log )

LogLevel Nível das mensagens de erro (debug, info, notice, warn, crit , alert, emerg) (padrão:warn)

LogFormat Definição de formatos de log para CustomLog

CustomLog Arquivo e formato do log de acesso (padrão:/var/log/httpd/access_log e common)

Page 226: booklinux-a4

Sistema Operacional GNU/Linux 226

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 SignificadoAuthUserFile Nome do arquivo texto com usuários e senhas

AuthGroupFile Nome do arquivo texto com os grupos

AuthUserDBMFile Nome do arquivo DBM com usuários e senhas

AuthGroupDBMFile Nome do arquivo DBM com grupos

Options Opções de acesso precedidas ou não por + ou - (None, All , Indexes, Includes, FollowLinks , ExecCGI e Multiviews )

AllowOverride Opções que podem ser alteradas no arquivo definido em AccessFileName (None, All , Options, FileInfo , AuthConfig e Limit )

Order Ordem de processamento das diretivas Allow from e Deny from

Allow from Clientes com acesso permitido

Deny from Clientes com acesso negado

Satisfy Valida todas as diretivas Allow from e Deny from

Page 227: booklinux-a4

HEAD /index.html HTTP/1.0Connection: Keep-AliveUser-Agent: Mozilla/3.01 (X11; Linux 2.4.19-4GB i686)Host: www.starix.com.brAccept: image/gif, image/jpeg, */*

HTTP/1.1 200 OKDate: Wed, 03 Jun 2003 14:23:53 GMTServer: Apache/1.3.26 (Linux/SuSE) PHP/4.2.2 mod_perl/1.27 Last-Modified: Sat, 31 May 2003 17:16:42 GMTETag: "113b69-d1-3e8e37a"Accept-Ranges: bytesContent-Length: 2857Content-Type: text/html

Sistema Operacional GNU/Linux 227

No apache2, os arquivos incluidos pelo /etc/apache2/httpd.conf contém as configuracões de cada sessão:

default-server.conf server-tuning.conferrors.conf listen.confuid.conf vhosts.d/*.confmod_autoindex-defaults.conf mod_status.conf mod_info.confmod_tidy.conf ssl-global.confmod_log_config.conf mod_userdir.confmod_mime-defaults.conf mod_usertrack.conf

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:

Gera uma resposta do servidor como a seguinte:

Page 228: booklinux-a4

<Files ~ "^\.ht"> Order allow, deny Deny from all Satisfy All</Files>

Sistema Operacional GNU/Linux 228

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 :

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 .

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.

Page 229: booklinux-a4

<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>

<Location /cgi-bin> AllowOverride None Options +ExecCGI - Includes SeHandler cgi-script</Location>

Sistema Operacional GNU/Linux 229

Arquivo /etc/apache2/vhosts.d/meudominio.com.conf

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:

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.

Page 230: booklinux-a4

Sistema Operacional GNU/Linux 230

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:

Page 231: booklinux-a4

# listas de controle de acessoacl bad_words urlpath_regex "/etc/squid/bad_words"acl local_net src 192.168.200.0/24acl workdays M-F 08:00-17:59# acessos httphttp_access deny bad_wordshttp_access deny ! local_nethttp_access allow workdayshttp_access deny all

Sistema Operacional GNU/Linux 231

Servidor de proxyO 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 argumentosacl 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.

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:

Page 232: booklinux-a4

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/rdf1262561636.080 2 192.168.200.41 TCP_DENIED/403 1428 GET http://www.playboy.com/ - NONE/- text/html

Sistema Operacional GNU/Linux 232

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.

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:

Page 233: booklinux-a4

#!/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.logCACHE_FILE=/var/log/squid/calamaris_cache.dbREP_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_FILEelse $CAT $ACCESSFILE | $CALAMARIS -F ’html’ -H "$TITLE" -a -u > $REP_FILEfi

Sistema Operacional GNU/Linux 233

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:

SummaryIncoming 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

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.

Page 234: booklinux-a4

Sistema Operacional GNU/Linux 234

A seguir podem ser vistos alguns dos relatórios gerados.

Page 235: booklinux-a4

Sistema Operacional GNU/Linux 235

Page 236: booklinux-a4

Sistema Operacional GNU/Linux 236

Page 237: booklinux-a4

redirect_program /usr/sbin/squidGuard -c /etc/squidguard.conf

Sistema Operacional GNU/Linux 237

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 .

Normalmente o aplicativo squidGuard utiliza os arquivos de dados do diretório /var/lib/squidGuard/db , e gera os logs em /var/log/squidGuard .

Page 238: booklinux-a4

Sistema Operacional GNU/Linux 238

Correio eletrônico - e-mailUm 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 AgentEsta é 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 AgentResponsá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 ).

MTA - Mail Transport AgentSã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 e-mail.

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 e-mails 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.

Page 239: booklinux-a4

Kmail - a interface do usuário no ambiente gráfico KDE.

Mutt - um dos diversos MUAs com interface texto

Sistema Operacional GNU/Linux 239

Exemplo de MUA:

Page 240: booklinux-a4

From [email protected] Sun Jan 16 14:08:42 2000Return-Path: <[email protected]>Received: (from [email protected]>)

by thor.starix.com.br (8.9.3/8.9.3) id OAA14834for hmarx; Sun, 16 Jan 2000 14:08:41 -0200

Date: Sun, 16, Jan 2000 14:08:41 -0200From: Flavia de Castro Mendes Marques<[email protected]>Message-Id: <[email protected]>To: [email protected]: Um simples e-mail

Hi Hmarx !

Como vai ? E os projetos ?

Abraços,

Flavia

/ |Cabeçalho / \ | \

/ | Corpo / \ | \

Sistema Operacional GNU/Linux 240

Protocolos de e-mailExistem 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

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.

Estudaremos aqui o sendmail, o MTA mais utilizado em plataformas Unix.

Page 241: booklinux-a4

Sistema Operacional GNU/Linux 241

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.

Page 242: booklinux-a4

Sistema Operacional GNU/Linux 242

Configuração do sistema de e-mailExistem 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ário2Apenas redireciona para o usuário requerido

• \usuário,usuário2Redireciona 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.

Configuração do sendmailO 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 .

Page 243: booklinux-a4

Sistema Operacional GNU/Linux 243

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.

Algumas variáveis importantes são:

Em /etc/sysconfig/mail :

Variável Valores SignificadoMAIL_CREATE_CONFIG yes | no O SuSEconfig gerará o arquivo

sendmail.cfFROM_HEADER <domínio> Domínio default para FROMSMTPD_LISTEN_REMOTE yes | no Aceita conexões remotas ?CONF_TYPE standard |

advanced |undef

Tipo de configuracão do servidor de e-mail

SENDMAIL_EXPENSIVE yes | no só despacha e-mail se o sendmail for disparado manualmente

Estas opcões são independentes do MUA (no openSuSE, sendmail ou postfix).

Page 244: booklinux-a4

Sistema Operacional GNU/Linux 244

Em /etc/sysconfig/sendmail :

Variável Valores SignificadoSENDMAIL_LOCALHOST localhost

...Nomes da máquina local

SENDMAIL_SMARTHOST <servidor do provedor>

Servidor opcional que transporta seus e-mails

SENDMAIL_NOCANONIFY yes | no Transforma os e-mails na forma canônica (requer pesquisas no DNS)

SENDMAIL_ARGS -L sendmail-Am -bd -q30m -om

Opções de execução do sendmail

SENDMAIL_CLIENT_ARGS -L sendmail-client-Ac -q30m

Opções de execução do sendmail client

MASQUERADE_DOMAINS <dominio> ...

Domínios a serem mascarados com $FROM_HEADER

SENDMAIL_EXPENSIVE yes | no Só despacha e-mail se o sendmail for disparado manualmente

SMTP_AUTH_MECHANISM-S

gssapi | otp | login | plain | digest-md5 | cram-md5 | all

Lista de mecanismos de autenticação como cliente

SMTP_AUTH_SERVER gssapi | otp | login | plain | digest-md5 | cram-md5 | all

Lista de mecanismos de autenticação como servidor

STARTTLS server | client | both

Uso da certificação

SENDMAIL_DNSRBL <rbl-server> ... 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 .

Page 245: booklinux-a4

thor:~ # cp /etc/mail/linux.mc mylinux.mcthor:~ # p

<edite o mylinux.mc>

thor:~ # m4 mylinux.mc > /etc/sendmail.cfthor:~ # pSistema Operacional GNU/Linux 245

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:

Você pode ainda precisar editar alguns arquivos como:

Arquivo Definição/etc/mail/virtusertable mapeamento de usuários de domínios virtuais/etc/mail/relay-domains definição de dominios para o qual será aceito

relay/etc/mail/access políticas de acesso/etc/mail/genericstable mapeamento de usuários não qualificados/etc/mail/mailertable definição de transportadores de e-mail/etc/mail/local-host-names 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).

Page 246: booklinux-a4

Sistema Operacional GNU/Linux 246

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 e-mail 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.

Page 247: booklinux-a4

Sistema Operacional GNU/Linux 247

FTP - File Transfer ProtocolPara 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 Significado/etc/ftpaccess define o comportamento do serviço de ftp/etc/ftpusers usuários que não podem se conectar ao serviço de ftp/etc/ftpconversions conversões conhecidas pelo servidor de ftp/etc/ftpwelcome mensagem de boas vindas/etc/ftpchroot 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 é chroot ed, 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.

Page 248: booklinux-a4

Sistema Operacional GNU/Linux 248

Sessões remotasAo 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.

Page 249: booklinux-a4

Sistema Operacional GNU/Linux 249

PPP - Point to Point ProtocolPara 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 ’.’.

Entre as opções mais importantes estão:

noipdefault ou iplocal:ipremoto Define os IPs local e remotomodem ou local Utilização ou não dos sinais de

controle de modemipcp-accept-local Aceita o IP local dado pelo peeripcp-accept-remote Aceita o IP remoto dado pelo peerms-dns servidorDNS Servidor(es) de DNS[no]defaultroute Adiciona (ou não) rota default[no]replacedefaultroute Substitui (ou não) a rota default[no]auth Autentica (ou não) o peer

Page 250: booklinux-a4

kppp - conexão dial-up

Sistema Operacional GNU/Linux 250

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/ttyS i ) 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).

Page 251: booklinux-a4

$ pppd call provedor

ttyS2 38400 crtsctsconnect ’/usr/sbin/chat -v -f /etc/ppp/chat-provedor’noauth

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:¨ ¨\q minhasenha ¨¨ispts¨ ¨\a^Uppp¨¨~-^Uppp-~¨

Sistema Operacional GNU/Linux 251

Um uso comum do pppd é a discagem para um provedor de Internet. Ele pode ser feito simplesmente através da chamada:

onde o arquivo /etc/ppp/peers/provedor contém, por exemplo:

e o arquivo /etc/ppp/chat-provedor tem algo como:

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 velocidadeChamado logo que (e se) a autenticação do peer seja feita.

• auth-down interface peer usuário dispositivo velocidadeChamado logo que a sessão seja terminada.

• ip-up interface dispositivo velocidade iplocal ipremoto parmsChamado logo que os endereços IPs estejam negociados.

• ip-down interface dispositivo velocidade iplocal ipremoto parmsChamado logo que os endereços IPs sejam liberados.

Page 252: booklinux-a4

mode pppdevice /dev/modemspeed 115200modemlockcrtsctslocal 192.168.0.1remote 192.168.0.2defaultroutedebug 0x0018dynamicinclude /usr/lib/diald/standard.filterconnect /usr/lib/diald/connectpppd-options noauth noipdefault ipcp-accept-local ipcp-accept-remote user usuario

Sistema Operacional GNU/Linux 252

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 ).

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.

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 ).

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.

Page 253: booklinux-a4

Sistema Operacional GNU/Linux 253

Conexão ADSL

Existem basicamente 2 tipos de conexão ADSL: a pppoe, PPP-over-ethernet 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 adsl-stop 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.

Page 254: booklinux-a4

kopete

skype

Sistema Operacional GNU/Linux 254

Comunicação e TelefoniaO 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.

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.

Page 255: booklinux-a4

hmarx@thor:~> mdir a: Volume in drive A is SuSE Linux (abbr=SUSE LINUX ) Volume Serial Number is 5377-BBE2Directory for A:/

chapte~1 aw 33302 07-04-2002 17:30 chapter_01.awchapte~2 aw 295888 07-04-2002 17:31 chapter_08.awbiblio~1 aw 15343 07-04-2002 17:31 bibliography.aw

3 files 344 533 bytes 1 112 576 bytes freehmarx@thor:~> p

drive a: file="/dev/fd0" exclusive mformat_only cylinders=80 heads=2 sectors=18drive b: file="/dev/fd1" exclusive mformat_only cylinders=80 heads=2

sectors=18drive c: file="/dev/hda1" drive z: file="/dev/sda4" 11drive m: file="/var/lib/dosemu/diskimage"mtools_lower_case=1

Sistema Operacional GNU/Linux 255

Interconectividade

Interconectividade DOS/WindowsO 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.

Configure os mapeamentos das letras dos discos no arquivo /etc/mtools.conf . Um trecho deste arquivo pode ser visto abaixo:

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.

Page 256: booklinux-a4

; /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

logon script = scripts\%M.bat

Sistema Operacional GNU/Linux 256

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:

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:

Page 257: booklinux-a4

[printers] comment = Todas as impressoras printable = yes public = no read only = yes create mode = 0700 directory = /tmp

[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

Sistema Operacional GNU/Linux 257

O compartilhamento especial printers , definido no arquivo /etc/samba/smb.conf, tornará as impressoras configuradas no Linux disponíveis para as estações Windows.

Utilizando o script printfax.pl , um dispositivo fax modem poderá ser disponibilizado para estações Windows como uma impressora PostScript:

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 .

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 ).

Page 258: booklinux-a4

Sistema Operacional GNU/Linux 258

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.

Page 259: booklinux-a4

hmarx@thor:~> slistKnown NetWare File Servers Network Node Address-----------------------------------------------------------------THOR C0A8C803 000000000001 hmarx@thor:~> nwvolinfo -S thor -v SYS -U hmarxLogging into THOR as HMARXPassword:Total : 2020332KFree : 115276KPurgable : 0KNo Purg. : 0KDirs : 522240Free dirs: 407674hmarx@thor:~> p

thor:~# ncpmount -S thor -V SYS /mntLogging into THOR as SUPERVISORPassword:thor:~# mount | grep ncpfsTHOR/SUPERVISOR on /mnt type ncpfs (rw)thor:~# pSistema Operacional GNU/Linux 259

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.

Você poderá utilizar o ncpmount para montar volumes de servidores Netwareno Linux.

Page 260: booklinux-a4

Sistema Operacional GNU/Linux 260

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.

Page 261: booklinux-a4

9. O Kernel Linux

Sistema Operacional GNU/Linux 261

Configuração do kernel LinuxComo 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 pacotes de desenvolvimento básico em C deverão estar instalados (como o gcc, o make, o ld, e o ncurses-devel). Se a instalação for feita através YaST no SuSE Linux, alguns destes pacotes serão automaticamente selecionados com a seleção do ambiente de desenvolvimento.

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).

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 Objetivomake help Ver as opções definidas no Makefile

make config Realizar a configuração em modo texto linha a linha

make menuconfig Realizar configuração em modo texto com janelas

make xconfig Realizar a configuração em modo gráfico, no sistema X Window

make cloneconfig 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 .

Page 262: booklinux-a4

Configurando o kernel com o comando make menuconfig

Configurando o kernel com o comando make xconfig

Sistema Operacional GNU/Linux 262

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.

Page 263: booklinux-a4

image=/boot/vmlinuz.suselabel=failsaferoot=/dev/hda1initrd=/boot/initrd.suseappend="disableapic ide=nodma apm=off"

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

Sistema Operacional GNU/Linux 263

Após salvar a configuração, utilize a sequência abaixo para realizar a recompilação total do kernel e seus módulos:

Comando Objetivomake clean Apagar os arquivos objetos antigos mantendo a configuração

make mrproper Apagar todos os arquivos objetos antigos incluindo a configuração

make all Compila tudo que é necessário

make vmlinux Compila apenas o kernel

make modules Compilar todos os módulos definidos na configuração

make modules_install 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.

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:

Para o GRUB, o arquivo /boot/grub/menu.lst

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.

Page 264: booklinux-a4

Sistema Operacional GNU/Linux 264

Page 265: booklinux-a4

10. Segurança

Sistema Operacional GNU/Linux 265

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.

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.

Page 266: booklinux-a4

Sistema Operacional GNU/Linux 266

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.

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 a 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).

Page 267: booklinux-a4

Sistema Operacional GNU/Linux 267

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 somente se o usuário desejar, ele irá salvar o arquivo 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 como root !

Porém, quando uma máquina é utilizada como servidor de arquivos/disco, arquivos inofensivos para o Linux se tornam extremamente perigosos para as estações de trabalho DOS, Windows 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 nos arquivos. Para os anexados a 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, se 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 problema de vírus.

Vermes (worms)

Como qualquer sistema operacional, o Linux não é imune a uma classe de programas que 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.

Page 268: booklinux-a4

Sistema Operacional GNU/Linux 268

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 lista de IPsno_access lista de IPsaccess_times faixa de horário permitidacps número máximo conexões por segundomax_load carga máxima do servidorrlimit_as espaço de endereçamento máximorlimit_cpu tempo máximo de CPU em segundosrlimit_rss uso máximo de memória residenterlimit_stack tamanho máximo da pilhalog_on_success informações para log em caso de sucessolog_on_failure 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.

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. Eles também geram logs que devem ser frequentemente analisados pelos administradores de redes e segurança.

Page 269: booklinux-a4

Sistema Operacional GNU/Linux 269

FirewallsAs principais funções de um firewall são a proteção entre uma rede

local/privada e uma rede pública, 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.

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.

Page 270: booklinux-a4

Sistema Operacional GNU/Linux 270

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, FDDI, ATM, ...) até a camada de aplicação.

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.

Page 271: booklinux-a4

thor:~ # rcSuSEfirewall status

thor:~ # ipchains -L

# 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

Sistema Operacional GNU/Linux 271

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:

ou simplesmente

As regras podem ser tratadas manualmente através do comando ipchains. A sintaxe geral é :

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

Page 272: booklinux-a4

thor:~ # ipchains -A forward -j MASQ -i eth1

Sistema Operacional GNU/Linux 272

-i [ ! ] nome--interface [ ! ] nomeEspecifica 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).

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:

Page 273: booklinux-a4

thor:~ # rcSuSEfirewall2 status

thor:~ # iptables -L

# 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

Sistema Operacional GNU/Linux 273

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:

ou simplesmente

As regras podem ser tratadas manualmente através do comando iptables. A sintaxe geral é parecida com o do ipchains :

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

Page 274: booklinux-a4

Sistema Operacional GNU/Linux 274

--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

--tcp-flags [ ! ] máscara ativosEspecifica 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çoEndereç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úmeroEspecifica o número máximo de pacotes iniciais. O default é 5.

--tos tosEspecifica 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 0x10Maximize-Throughput 0x08Maximize-Reliability 0x04Minimize-Cost 0x02Normal-Service 0x00

Page 275: booklinux-a4

thor:~ # iptables -A POSTROUTING -t nat -j MASQUERADE -o eth1 thor:~ # echo 1 > /proc/sys/net/ipv4/ip_forward

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

Sistema Operacional GNU/Linux 275

Se um gateway (com interface pública eth1) só precisa fazer NAT, basta a inserção das regras:

E para o mínimo de segurança:

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.

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 DMZFW_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

Page 276: booklinux-a4

Sistema Operacional GNU/Linux 276

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.

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 SignificadoFW_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

Page 277: booklinux-a4

Sistema Operacional GNU/Linux 277

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.

Page 278: booklinux-a4

Sistema Operacional GNU/Linux 278

VPN - Virtual Private NetworkUtilizando 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 VPN-HOWTO.gz e VPN-Masquerade-HOWTO.gz , encontrados no diretório /usr/share/doc/howto/en .

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 Descriçãohost-to-host Interliga duas máquinashost-to-net Interliga uma máquina a uma redenet-to-net 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.

Page 279: booklinux-a4

hmarx@thor:~> zcat /proc/config.gz | grep -i ipsecCONFIG_IPSEC=mCONFIG_IPSEC_DEBUG=yCONFIG_IPSEC_DEBUG_DISABLE_DEFAULT=yCONFIG_IPSEC_TUNNEL=yCONFIG_IP_IPSEC=mCONFIG_IPV6_IPSEC=yCONFIG_IPV6_IPSEC_TUNNEL=yhmarx@thor:~> ❏

Sistema Operacional GNU/Linux 279

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:

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.

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 ipsec i . 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.

Page 280: booklinux-a4

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"

... echo -e $returnfiSUSEFWCFG="/etc/syscofig/SuSEfirewall2"test -f $SUSEFWCFG && {. $SUSEFWCFGfor i in $FW_DEV_EXT; do echo 0 > /proc/sys/net/upv4/conf/$i/rp_filter 2> /dev/nulldone}exit $st;;...

... echo 0 > $i/mc_forwarding 2 > /dev/nulldonetest -z "$FW_DEV_IPSEC" || for i in $FW_DEV_EXT; do echo 0 > /proc/sys/net/ipv4/conf/$i/rp_filter 2> /dev/nulldonetest "$FW_KERNEL_SECURITY" = no || {...

Sistema Operacional GNU/Linux 280

Iniciaremos a configuração pelo firewall.

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:

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:

Alterar o script /sbin/SuSEfirewall2 , na sessão "Configuring more kernel stuff¨":

Page 281: booklinux-a4

FW_CUSTOMRULES="/etc/sysconfig/SuSEfirewall2-custom"

...# this ...DEV_IPSEC=ipsec0IPSEC_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 donefitrue}...

Sistema Operacional GNU/Linux 281

Habilitar o uso de regras de firewall personalizadas:

No arquivo /etc/sysconfig/SuSEfirewall2-custom inserir as linhas em negrito na função fw_custom_before_masq():

Page 282: booklinux-a4

Sistema Operacional GNU/Linux 282

PGP - Pretty Good PrivacyO 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 grandeq Outro número primo bem granden 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 comumd 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.

Page 283: booklinux-a4

Sistema Operacional GNU/Linux 283

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.

Page 284: booklinux-a4

info@thor:~> pgp -kg 1024Pretty Good Privacy(tm) 2.6.3in - Public-key encryption for the masses.(c) 1990-96 Philip Zimmermann, Phil’s Pretty Good Software. 2000-10-07International 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 thisuser 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-ddEnter 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 manywords, 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 thetime intervals between your keystrokes. Please enter some random texton 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:~> ❏

Sistema Operacional GNU/Linux 284

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 é:

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.

Page 285: booklinux-a4

Sistema Operacional GNU/Linux 285

Critérios de segurança do DoDEm 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".

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 CCITES 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 SignificadoEAL1 Testado funcionalmenteEAL2 Testado estruturalmenteEAL3 Metodicamente testado e verificadoEAL4 Metodicamente projetado, testado e

revisadoEAL5 Projetado semi-formalmente e testadoEAL6 Projeto semi-formalmente verificado e

testado EAL7 Projeto formalmente verificado e testado

EAL4 é o nível mais alto economicamente viável para realimentar uma linha de produtos.

Page 286: booklinux-a4

Sistema Operacional GNU/Linux 286

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

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.

Page 287: booklinux-a4

Sistema Operacional GNU/Linux 287

Mantendo o sistema seguroPara 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 anti-ví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.orghttp://www.rootprompt.orghttp://www.linuxsecurity.comhttp://www.pulhas.orghttp://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]

Page 288: booklinux-a4

Sistema Operacional GNU/Linux 288

Page 289: booklinux-a4

11. Gerência de Redes em Linux

Sistema Operacional GNU/Linux 289

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.

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.

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.

Page 290: booklinux-a4

Sistema Operacional GNU/Linux 290

Instalação físicaOs componentes de hardware de um sistema de computação 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 e umidade são igualmente importantes.

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).

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.

Page 291: booklinux-a4

Sistema Operacional GNU/Linux 291

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.

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.

Page 292: booklinux-a4

Sistema Operacional GNU/Linux 292

GerenciamentoA 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 falhasResponsá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çãoProcesso 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çaResponsável pelo controle de acesso à informação e aos dispositivos da rede, protegendo-os de abusos intencionais ou acidentais.

Gerenciamento de DesempenhoEndereç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.

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).

Page 293: booklinux-a4

Sistema Operacional GNU/Linux 293

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.

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.

Page 294: booklinux-a4

MTBF =1

∑FRi

i

A =MTBF

MTBF +MTTR

Sistema Operacional GNU/Linux 294

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:

e a disponibilidade do sistema é:

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".

Page 295: booklinux-a4

Sistema Operacional GNU/Linux 295

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.

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 MIBA 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

Page 296: booklinux-a4

Sistema Operacional GNU/Linux 296

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

Page 297: booklinux-a4

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 } -- MIB-II -- (same prefix as MIB-I)

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

Sistema Operacional GNU/Linux 297

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:

...

Page 298: booklinux-a4

Sistema Operacional GNU/Linux 298

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 obtém valores de variáveis da base MIB a partir da identificação do objeto (objetcID) utilizando o método GET do SNMP.

snmpset atribui valores a variáveis da base MIB utilizando o método SET do SNMP.

snmpstatus obtém informações sobre uma entidade de rede.snmpwalk obtém variáveis da base MIB utilizando o método NEXT do SNMP.snmptable obtém e imprime uma tabela SNMP.snmpnetstat obtém informacões sobre a rede usando o SNMP.snmptest 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.

snmptranslate traduz objetos SNMP em informações mais úteis.snmptrap,snmpinform

envia um trap para um gerente SNMP.

snmpdelta monitora alterações de valores inteiros de variáveis da base MIB.

Page 299: booklinux-a4

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: TimeStamphmarx@thor:~> ❒

Sistema Operacional GNU/Linux 299

Assim, para ver a definicão da sub-árvore system podemos utilizar o comando snmptranslate, como a seguir:

Page 300: booklinux-a4

hmarx@thor:~> snmpwalk eagle public | head -8system.sysDescr.0 = Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002

i686system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linuxsystem.sysUpTime.0 = Timeticks: (7868) 0:0system.sysContact.0 = Sysadmin (root@localhost)system.sysName.0 = eaglesystem.sysLocation.0 = Server Roomsystem.sysORLastChange.0 = Timeticks: (5) 0:0 system.sysORTable.sysOREntry.sysORID.1 = OID: ifMIB hmarx@thor: ~> snmpget eagle public system.sysName.0system.sysName.0 = eaglehmarx@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:0Interfaces: 0, Recv/Trans packets: 17830/17830 | IP: 17926/20383 hmarx@thor:~> snmptest eagle publicVariable: system.sysDescr.0Variable: system.sysName.0Variable:Received Get Response from 192.168.200.5requestid 0x370E3B1A errstat 0x0 errindex 0x0system.sysDescr.0 = Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002 i686system.sysName.0 = eagleVariable: ̂ DQuitting, Goobye hmarx@thor:~> ❒

Sistema Operacional GNU/Linux 300

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:

Page 301: booklinux-a4

pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s

Sistema Operacional GNU/Linux 301

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.

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:

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.

Page 302: booklinux-a4

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 }

Sistema Operacional GNU/Linux 302

Utilizando o xinetd, o arquivo /etc/xinetd.d/qpopper contém as mesmas informações em um formato mais estruturado:

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.

Page 303: booklinux-a4

12. Ambiente de Execução e Desenvolvimento de

Aplicativos em Linux

Sistema Operacional GNU/Linux 303

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.

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.

Page 304: booklinux-a4

QT Designer

Sistema Operacional GNU/Linux 304

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.

Page 305: booklinux-a4

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 ~> ❏

thor:~ # lsof /var/log/{mail,warn,messages}COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEsyslogd 361 root 4w REG 3,65 219397 580836 /var/log/mailsyslogd 361 root 8w REG 3,65 455344 583175 /var/log/warnsyslogd 361 root 9w REG 3,65 455344 583175 /var/log/warnsyslogd 361 root 10w REG 3,65 3405056 580834 /var/log/messagesthor:~ # ❏

thor:~ # rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100005 1 udp 860 mountd 100005 2 udp 860 mountd 100005 1 tcp 863 mountd 100005 2 tcp 863 mountd 100003 2 udp 2049 nfs 100003 2 tcp 2049 nfs

thor:~ # ❏

Sistema Operacional GNU/Linux 305

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:

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 Descriçãolsof Lista arquivos abertos pelos processosfuser Identifica processos utilizando os arquivos e sockets strace Exibe as chamadas de sistema e sinaisltrace Exibe as chamadas a bibliotecas dinâmicassocklist Exibe os sockets abertos e os portos associadosrpcinfo Exibe informações sobre RPC (Remote Procedure Call)ipcs Exibe informações sobre IPC (Interprocess Communication)

Alguns exemplos:

Page 306: booklinux-a4

thor:~ # ipcs -a

------ Shared Memory Segments --------key shmid owner perms bytes nattch status0x5b410ec3 0 root 644 1048576 10x00000000 73531393 hmarx 777 196608 2 dest

------ Semaphore Arrays --------key semid owner perms nsems status0x5b410ec5 0 root 666 14

------ Message Queues --------key msqid owner perms used-bytes messagesthor:~ # ❏

Sistema Operacional GNU/Linux 306

Page 307: booklinux-a4

dosemu no SuSE Linux

Sistema Operacional GNU/Linux 307

Formato de arquivos executáveisO 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.

Page 308: booklinux-a4

Paint Brush e Clock do Windows 3.11 no Wine

Sistema Operacional GNU/Linux 308

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 .

Page 309: booklinux-a4

Windows 95 sendo executado pelo VMWare

Sistema Operacional GNU/Linux 309

EmuladoresExistem 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).

Page 310: booklinux-a4

VM/370 no Hercules

Sistema Operacional GNU/Linux 310

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 (cross-compiler) 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 aplicativos para a realização do HotSync.

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).

Page 311: booklinux-a4

PDP-11 simulator V2.9-2 rodando o RT11 V05.03

Sistema Operacional GNU/Linux 311

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.

Page 312: booklinux-a4

Vax 11/780 rodando OpenVMS 7.3

Sistema Operacional GNU/Linux 312

Page 313: booklinux-a4

Basilisk II rodando MacOS 7.5.5

Sistema Operacional GNU/Linux 313

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).

Page 314: booklinux-a4

Sistema Operacional GNU/Linux 314

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.gzou

$ 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

Page 315: booklinux-a4

variável= texto

resultado : lista de dependências comando ...

include lista de nomes de arquivos

ifeq (string1, string2) comandos1 [ else comandos2 ] endif

Sistema Operacional GNU/Linux 315

Os arquivos MakefileO 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:

Um <texto> poderá continuar em outra linha se terminado pela barra invertida (’\’).

As regras de dependência têm o seguinte formato geral:

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.

A diretiva include fará o make incluir o(s) arquivo(s) especificado(s). Os nomes podem incluir padrões do shell como "*.mk".

A diretiva ifeq permite a alteração condicional do processo de geração dos resultados.

Page 316: booklinux-a4

# Makefile para o programa helloCC=gccCOPT=-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

Sistema Operacional GNU/Linux 316

Um exemplo simples de um arquivo Makefile para compilar o famoso programa hello.c que imprime "Hello World!":

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.

Gerando pacotes RPMPara 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 DescriçãoName Nome do pacoteVersion Número da Versão Release Número do ReleaseSource Localização do arquivo com os fontesSumary Descrição sumáriaLicense Forma de licenciamentoDistribution Distribuição Linux Group Nome do grupo do aplicativoBuildArch ArquiteturaBuildRoot Diretódio temporário para criação do pacoteBuildRequires Dependências para a criação do pacoteRequires Dependências para instalação

Page 317: booklinux-a4

Sistema Operacional GNU/Linux 317

As fases, utilizadas nos tags Requires ou BuildRequires , são:

Fase Descriçãopre Pré instalação do pacotepost Pós instalação do pacotepreun Pré remoção do pacotepostun Pós remoção do pacote

A sessões seguintes fornecem informações adicionais para a criação do pacote e têm o formato:

%tag textolinhas 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

%buildmake

4. Instalação do pacote

%installcomandos shell para instalação do pacote

5. Remoção de arquivos temporários

%cleancomandos para remoção de arquivos e diretórios temporários

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 }}

Page 318: booklinux-a4

hmarx@venus:/usr/src/packager/SOURCES> tar tvfj simple-package-1.0.tar.bz2drwxrwx--- 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.pnghmarx@venus:/usr/src/packager/SOURCES> ❏

Sistema Operacional GNU/Linux 318

Algumas diretivas ou macros como:

%{name} %{version} %{release}%{_tmppath} %{buildroot} %{_bindir}%{suse_version}%(linha de comando)

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.

Exemplo de pacote RPMA 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:

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.

Page 319: booklinux-a4

Name: simple-packageVersion: 1.0Release: 0.1Source: simple-package-1.0.tar.bz2Summary: Simple PackageLicense: GPLDistribution: openSuSEGroup: ApplicationsBuildArch: 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

%buildmake

%installrm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT/usr/local/pacoteinstall -m 755 prog $RPM_BUILD_ROOT/usr/local/pacote/proginstall -m 644 arq.txt $RPM_BUILD_ROOT/usr/local/pacote/arq.txtinstall -m 644 img.png $RPM_BUILD_ROOT/usr/local/pacote/img.png

%cleanrm -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

Sistema Operacional GNU/Linux 319

Arquivo .spec para o pacote simple-package

Page 320: booklinux-a4

/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

root@thor:~ # rpm -qpi /usr/src/packages/RPMS/i586/simple-package-1.0-0.1.i586.rpmName : simple-package Relocations: (not relocatable)Version : 1.0 Vendor: (none)Release : 0.1 Build Date: Mon 04 Jan 2010 09:53:15 AM BRSTInstall Date : (not installed) Build Host: thor.linuxtech.com.brGroup : Applications Source RPM: simple-package-1.0-0.1.src.rpmSize : 27517 License: GPLSignature : (none)Summary : Simple PackageDescription : Simple package to demonstrate the RPM build processDistribution: openSuSEroot@thor:~ # ❏

Sistema Operacional GNU/Linux 320

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 Comandobinário rpmbuild -bb aquivo.specfonte rpmbuild -bs aquivo.specambos rpmbuild -ba aquivo.spec

Os arquivos gerados serão em:

Listando as informações do pacote, temos:

Page 321: booklinux-a4

root@thor:~ # rpm -ivh simple-package-1.0-0.1.i586.rpmPreparing... ########################################### [100%] 1:simple-package ########################################### [100%]root@thor:~ # ❏

root@thor:~ # rpm -Uvh simple-package-1.0-0.3.i586.rpmPreparing... ########################################### [100%] 1:simple-package ########################################### [100%]thor@thor:~ # ❏

root@thor:~ # rpm -e simple-packageroot@thor:~ # ❏

Sistema Operacional GNU/Linux 321

O pacote poderá ser instalado utilizando o comando rpm .

Quando for atualizar o pacote:

Ou quando for remover o pacote:

Page 322: booklinux-a4

Sistema Operacional GNU/Linux 322

Page 323: booklinux-a4

13. Expressões Regulares

Sistema Operacional GNU/Linux 323

Expressões RegularesExpressões regulares são 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.

Elas são formadas por dois tipos de caracteres: caracteres especiais, denominados metacaracteres, e os literais, ou caracteres normais. 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* 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 mais utilizados são:

Metacaracter Nome Significado

.[ ... ][^ ... ]

pontoclasse de caracteresclasse negada

qualquer caracterqualquer caracter da classequalquer caracter não listado

\ c escaped char caracter c literalmente

^$\<\>

circunflexodólar (cifrão)barra-invertida menorbarra-invertida maior

início da linhafim da linhainício de uma palavrafim de uma palavra

|( ... )

barra-em-péparêntesis

separa expressões alternativasdefine escopo da expressão

Page 324: booklinux-a4

Sistema Operacional GNU/Linux 324

Alguns metacaracteres são quantificadores ou de repetição:

Metacaracter Nome Significado

?*+

interrogaçãoasteriscomais

0 ou 1 caracter 0 ou mais caracteres1 ou mais caracteres

{ mín, máx } faixa de quantidades Requer mín, Limite máx

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]+ dígito repetido 1 ou mais vezes[0-9][0-9]* 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

Page 325: booklinux-a4

14. O Editor de Textos VISistema Operacional GNU/Linux 325

O editor de textos viO 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.

Para entrar em modo edição, pode-se utilizar um dos seguintes comandos:

i insere a partir da posição atual do cursorI insere a partir do início da linhaa insere após a posição atual do cursorA insere após o fim da linhao cria uma linha nova após a atual e começa a inserçãoO cria uma linha nova antes da atual e começa a inserçãoC apaga da posição atual do cursor até o fim da linha e começa a

inserção

Para sair do modo de edição, e voltar ao modo comando, use a tecla ¸.

Page 326: booklinux-a4

Sistema Operacional GNU/Linux 326

Para caminhar pelo texto, utilize:

h ou Ç (seta para a esquerda), volta o cursor uma colunaj ou Ê (seta para baixo), avança o cursor uma linhak ou È (seta para cima), volta o cursor uma linhal ou É (seta para a direita), avança o cursor uma coluna0 ou Ã, vai para o início da linha $ ou Ä, vai para o fim da linhaH vai para o início da primeira linha da telaL vai para o início da última linha da telaM vai para o início da linha do meio da telan-G

vai para a linha n ou para o fim do texto

% posiciona no ( , ), {, }, [ ou ] correspondenten| posiciona na coluna nw vai para o início da próxima palavraW vai para o início da próxima palavra, ignorando caracteres especiaisb vai para o início da palavra anteriorB vai para o início da palavra anterior, ignorando caracteres especiaisfc posiciona o cursor na próxima ocorrência do caracter cFc posiciona o cursor na ocorrência anterior do caracter ctc posiciona o cursor antes da próxima ocorrência do caracter c

Tc posiciona o cursor após a ocorrência anterior do caracter c¦+B rola a tela para cima (igual a Å)¦+F rola a tela para baixo (igual a Æ) ¦+U rola a tela para cima¦+D rola a tela para baixo

Page 327: booklinux-a4

Sistema Operacional GNU/Linux 327

Para excluir ou copiar textos, existem os seguintes comandos:

nx ou nÂ, apaga os próximos n caracteres a partir do cursornX apaga os n caracteres anterioresd inicia a sequência para apagar, exemplos: ndd apaga n linhas (default n=1) ndw apaga n palavrasy inicia a sequência para salvar, exemplos:

nyy salva n linhas a partir da correnteynw salva as próximas n palavras

p insere o texto salvo após a posição correnteP insere o texto salvo antes da posição corrente

nrc substitui os próximos n caracteres por cR inicia modo de sobrescrever (oveRwrite)~ troca a caixa do caracter (maiúscula <-> minúscula)u desfaz a última alteraçãoU 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

Page 328: booklinux-a4

Sistema Operacional GNU/Linux 328

Para procurar um texto (que pode ser uma expressão regular), podemos utilizar:

/texto procura o texto para frente?texto procura o texto para trás

n procura a próxima ocorrênciaN procura a ocorrência anterior

Pode-se marcar um texto, para executar um comando, utilizando:

v inicia a marcação caracter a caracterV inicia a marcação de linhas¦+V inicia a marcação de colunasmc marca a linha com o caracter c (invisível)’c vai para o início da linha marcada com o caracter c

(invisível)‘c vai para a posição marcada com o caracter c

!cmd executa o comando cmd e substitui o texto marcado 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 imprime as linhas da faixa:faixad apaga as linhas da faixa:n passa para o próximo arquivo a editar:prev volta ao arquivo anterior:n arquivos define nova lista de arquivos a editar:shell abre uma sessão shell. Ao terminar o shell,

volta à edição:!comando executa o comando:x salva e sai do vi:q abandona a edição e sai do vi:w arquivo escreve o texto no arquivo:e arquivo carrega o arquivo para edição:r arquivo lê o arquivo após a posição corrente:q! abandona o vi, ignorando alterações feitas

Podem ser utilizados os comandos:¦+6 para alternar entre dois arquivos¦+G para exibir o nome do arquivo e linha corrente¦+L para redesenhar a tela

. para repetir o último comando de inserção, alteração ou deleção

Page 329: booklinux-a4

Sistema Operacional GNU/Linux 329

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 imprime as linhas de 2 a 8:1,$p imprime da linha 1 ao final do texto:/txt1/,/txt2/d apaga da linha contendo txt1 até a contendo txt2:.,.+3p 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 salva e sai do viZQ abandona a edição, ignorando alterações feitas

Um texto, opcionalmente marcado, pode ser indentado utilizando:

n<< arreda o texto das n próximas linhas para a esquerdan>> 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.

Page 330: booklinux-a4

Sistema Operacional GNU/Linux 330

Opções do viO 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 mostra o número das linhas:set nowrap não mostra linhas longas em várias linhas:set ic ignora maiúsculas/minúsculas nas procuras:set sw=2 altera o número de colunas para indentação para 2:set list visualiza os caracteres especiais tipo TAB e fim de linha:set ts=2 altera o TAB para parar de 2 em 2 colunas:set sw=4 altera o deslocamento dos comandos << e >>

Page 331: booklinux-a4

15. Criando Disquetes de Boot

boot = /dev/fd0 install = /boot/boot.b map = /boot/map read-write prompt image = /boot/kernel label = Bootdisk root = /dev/fd0

Sistema Operacional GNU/Linux 331

Criando Disquetes de Boot O Linux pode ser carregado de disquete com ou sem o LILO.

Utilizando o LILO

Utilizando o LILO, você deve criar um arquivo de configuração /etc/ lilo.conf , como o seguinte:

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.

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

Page 332: booklinux-a4

Sistema Operacional GNU/Linux 332

Sem o LILO

Copie o kernel para o início do disquete:

# dd if=kernel of=/dev/fd0 bs=1k375+1 records in375+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

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 Descrição0-10 Offset do ramdisk em blocos de 1024 bytes

11-13 não utilizado14 Indica que um ramdisk deve ser carregado15 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 valor

Desmonte o disquete:

# umount /mnt

Page 333: booklinux-a4

Sistema Operacional GNU/Linux 333

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.

Page 334: booklinux-a4

Sistema Operacional GNU/Linux 334

Page 335: booklinux-a4

16. Sistemas de Numeração

Sistema Operacional GNU/Linux 335

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.

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 + ...

Por exemplo, 34710 representa a quantidade

Q = 3*102 + 4 * 101 + 7*100 = 3*100 + 4*10 + 7 = 347 !

Se efetuarmos todas as operações em uma base diferente, digamos δ, teremos a representação de Q na base δ.

Page 336: booklinux-a4

17. Introdução à Computação Forense

Sistema Operacional GNU/Linux 336

Se quisermos representar a quantidade trezentos e quarenta e sete, 34710, em octal (base 8) temos:

δ = 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.

Em 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

teto( )log(Q)log(β)

dígitos na base β para representá-la. 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)log(8)

= teto(4.423237040381) = 5

Page 337: booklinux-a4

Sistema Operacional GNU/Linux 337

Conceitos iniciaisA 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

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

Page 338: booklinux-a4

Sistema Operacional GNU/Linux 338

Procura por evidênciasNa 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.

Ordem de volatilidade de informações1 Registradores, memórias de periféricos, caches, etc.2 Memória (do kernel e física)3 Estado da rede4 Processos em execução5 Discos6 Disquetes, medias de backup, etc.7 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 !

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ábulasA 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.

Page 339: booklinux-a4

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

Sistema Operacional GNU/Linux 339

Quem contactar ?♦ A equipe de segurança de sua empresa♦ A gerência♦ O CERT ?♦ O FBI, a polícia, etc. ?

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áticaAlgumas 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.

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 .

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.

Page 340: booklinux-a4

Sistema Operacional GNU/Linux 340

Page 341: booklinux-a4

18. Entretenimento e Aprendizado

hmarx@venus:~> primes 55555 556665557955589556035560955619556215563155633556395566155663hmarx@venus:~> ❑

hmarx@thor:~> arithmetic7 - 7 = 0Right!5 + 0 = 5Right!6 - 4 = 2Right!10 - 5 = 5Right!8 - 3 = 5Right!1 + 10 = ❑

hmarx@venus:~> factor88: 2 2 2111111: 3 3711111111: 11 1011111111111: 41 2719999999999: 3 3 41 27112343211234321: 11 11 101 101❑

Sistema Operacional GNU/Linux 341

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 .

Page 342: booklinux-a4

hmarx@thor:~> adventure

Welcome to Adventure!! Would you like instructions ?yes

Somewhere nearby is Colossal Cave, where others have found fortunes intreasure and gold, though it is rumored that some who enter are neverseen again. Magic is said to work in the cave. I will be your eyesand hands. Direct me with commands of 1 or 2 words. I should warnyou that I look at only the first five letters of each word, so you’llhave to enter "northeast" as "ne" to distinguish it from "north".(Should you get stuck, type "help" for some general hints. Forinformation on how to end your adventure, etc., type "info".)

This program was originally developed by Will Crowther. Most of thefeatures of the current program were added by Don Woods. Addresscomplaints 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 anddown 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

OKget lamp

OK❑

Sistema Operacional GNU/Linux 342

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.

Page 343: booklinux-a4

hmarx@venus:~> trek

* * * S T A R T R E K * * *

Press return to continue.

What length game: shortWhat skill game: goodEnter a password: hmarx15 Klingons2 starbases at 0,1, 0,7It takes 550 units to kill a Klingon

Command: s

Short range sensor scan 0 1 2 3 4 5 6 7 8 90 . . E @ . . . . . . 0 stardate 2100.001 . . . . . . . . . . 1 condition GREEN2 . . . . . . . . . . 2 position 0,1/0,23 . . . . . . . . . . 3 warp factor 5.04 . . . . . . . . * * 4 total energy 50005 . . . . . . . . . . 5 torpedoes 106 . . . . . . . . . . 6 shields up, 100%7 . . . . . . . . . . 7 Klingons left 158 . . . . . . . . . # 8 time left 8.009 . . . . . . . . . 9 life support active 0 1 2 3 4 5 6 7 8 9Starsystem Elysium I

Command: mCourse: 6Distance: .5Computer 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 Guessed: acdefimnoprst | /| | | Word #: 1 | / Current Average: 5.000 __|_____ Overall Average: 0.000 | |___ |_________|

Word: interdependenceGuess:You got it!Another word? ❑

Sistema Operacional GNU/Linux 343

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.

O conhecido jogo da forca, hangman, também está presente:

Page 344: booklinux-a4

amorxeyesoneko

Sistema Operacional GNU/Linux 344

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.

O kmahjongg tem um visual mais tridimensional.

Page 345: booklinux-a4

Sistema Operacional GNU/Linux 345

O kpat implementa diversos jogos tipo paciência:

E o KGoldRunner relembra o velho lodrunner dos computadores Apple-II.

Page 346: booklinux-a4

Sistema Operacional GNU/Linux 346

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.

Page 347: booklinux-a4

TuxPaint

Gcompris

Sistema Operacional GNU/Linux 347

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.

Page 348: booklinux-a4

kgeography

Sistema Operacional GNU/Linux 348

O kgeography pode ser utilizado no aprendizado de mapas de paises, seus estados e capitais.

Page 349: booklinux-a4

Kalzium

kig

Sistema Operacional GNU/Linux 349

Para o estudo dos elementos químicos e suas propriedades, o kalzium é um aplicativo completo, incluindo cálculos de fórmulas

Em geometria, há o kig que inclui diversas operações com os elementos planos.

Page 350: booklinux-a4

Doom Heretic

Quake 3

Sistema Operacional GNU/Linux 350

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.

Page 351: booklinux-a4

Pingus Frozen Bubble

kasteroids

Sistema Operacional GNU/Linux 351

O jogos pingus (relembrando o lemmings), o Frozen Bubble e o kasteroids são clássicos em Linux:

Page 352: booklinux-a4

The Incredible Machine

Sistema Operacional GNU/Linux 352

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 !

Page 353: booklinux-a4

BibliografiaSistema Operacional GNU/Linux 353

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.

[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.

Page 354: booklinux-a4

Sistema Operacional GNU/Linux 354

[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.

[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.

Page 355: booklinux-a4

Sistema Operacional GNU/Linux 355

Sites na Internethttp://www.kernel.orgSite oficial do kernel Linux, criado por Linus Torvalds

http://gnu.orgProjeto GNU da Free Software Foundation criado por Richard Stallman

http://www.minix3.orgSite dedicado ao MINIX de Andrew S. Tanenbaum

http://www.linux.orgPágina oficial do sistema operacional Linux. Há uma lista de diversos aplicativos para o Linux

http://linmodems.orgDrivers de softmodems (conhecidos também como Winmodems) para o Linux

http://www.ora.comPágina da editora O’Reilly especializada em livros tecnicos. Possui muitos livros sobre Unix e Linux

http://www.suse.deSite original da empresa alemâ SuSE Linux AG, criadora da distribuição SuSE Linux. Atualmente é redirecionada para o site da Novell

http://www.vmware.comOs aplicativos de virtualização mais conhecidos e utilizados no mundo

http://www.hercules-390.orghttp://www.jaymoseley.com/hercules/Hercules, um emulador das arquiteturas IBM System/370, ESA/390 e zSeries

http://sourceforge.netMaior site de projetos Open SourceExemplos: xine.sourceforge.net, bochs.sourceforge.net, ...

http://www.linas.org/linuxParte do site de Linas Vepstasmostrando diversas aplicações comerciais do Linux e estudos de caso.

http://www.linuxsecurity.comSite sobre aspectos de seguranca em Linux

Page 356: booklinux-a4

Sistema Operacional GNU/Linux 356

http://www.maplesoft.comSoftware científicos (como o Maple) da Universidade de Waterloo, Ontario, Canada.

http://www.ipv6.orgInformações sobre o protocolo IPv6

http://www.ietf.orgSite 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.orgImplementacão do OpenPGP, Pretty Good Privacy

http://pgp.mit.eduServidor público de chaves PGP do MIT

http://www.faqs.org/rfcsGrande 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.brDicas de configuração e suporte SuSE Linux

http://www.opensuse.orgSite da distribuição openSuSE, criada pela Novell

Page 357: booklinux-a4

Glossário

Sistema Operacional GNU/Linux 357

AGP Accelerated Graphics PortANSI American National Standards InstituteARM Advanced Risc MachineARP Address Resolution ProtocolASCII American Standard Code for Information InterchangeATA Advanced Technology Attachment (ou IDE )BIND Berkeley Internet Name DomainBIOS 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.

BOOTP Bootstrap ProtocolCHAP Challenge Handshake Authentication Protocol - Protocolo de autenticação de

utilizado em PPP que requer uma pergunta e uma respostaCISC 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

CRISC Complex/Reduced Instruction Set Computer - Arquitetura mista parte RISC e parte CRISC, utilizada nos processadores Intel Pentium atuais (II, III e IV)

DDoS Distributed Denial of Service - ataque distribuído causando sobrecarga nos serviços

DEC Digital Equipment Corporation - Empresa que projetou o minicomputador PDP, cuja arquitetura ortogonal influenciou muitos dos microprocessadores atuais.

DES Data Encryption Standard - Padrão de criptografia utilizada pelo sistema de senhas padrão do Unix. Veja também MD5

DHCP Dynamic Host Configuration Protocol - protocolo de configuração dinâmica de computadores (endereços, nomes, DNS, boot, ...)

DoD Department of Defense - Departamento de Defesa dos Estados Unidos da América

DoS Denial of Service - ataque causando sobrecarga nos serviços. Veja também DDoS

DRAM Dynamic Random Access MemoryDMA Direct Memory Access - Acesso direto à MemóriaDMZ DeM ilitarized Zone - Zona desmilitarizadaEBCDIC Extended Bynary-Coded-Decimal Interchange Code, codificação utilizada

em alguns mainframes como o B6700 e a série A da UnisysEISA Extended Industry Standard ArchitectureESP Encapsulated Security Payload - protocolo para autenticação e criptografia do

IPsecFAT File Allocation Table - Tabela de alocação de arquivos utilizada pelo DOS e

WindowsFIFO First In First Out, também conhecido como PIPE, uma estrutura de dados que

implementa uma fila real.GMT Greenwich Mean Time - Horário padrão internacional do meridiano 0, que

passa pela cidade de Greenwich.GNU GNU is Not UnixHTTP HyperText Transfer Protocol - Protocolo de transferência de hipertextoIAB Internet Architecture Board

Page 358: booklinux-a4

Sistema Operacional GNU/Linux 358

IANA Internet Assigned Numbers AuthorityIDE Integrated Disk Electronics - Interface utilizada nos discos padrão do PC.

Também conhecida como ATA .IESG Internet Engineering Steering GroupIETF Internet Engineering Task ForceIKE Internet Key Exchange - protocolo de negociação de chaves e parâmetros de

conexão do IPsec.IPC InterProcess CommunicationIPsec Internet Protocol SecurityIPX Internetwork Package eXchangeIRQ Interrupt ReQuest - Sinal de requisição de interrupção para o(s)

processador(es) de um computador.ISA Insdustry Standard ArchitectureISAKMP Internet Security Association and Key Management ProtocolISOC Internet SocietyLDAP L ightweighty Directory Access ProtocolLED L ight Emitting DiodeMD5 Message Digest 5 - Algoritmo de autenticação e criptografia atualmente muito

utilizado em senhas do UnixMIB Management Information Base. Veja também SNMPMIME Multipurpose Internet Mail Extensions - Padrão de encapsulamento de

arquivos em e-mailsMIPS 1M icroprocessor without Interlocked Pipeline Stages - MIPS 2M illions of Instructions Per Second - milhões de instruções por segundoNBT 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

NCP Netware Core ProtocolNetBIOS Network Basic Input/Output SystemNFS Network File System - Sistema de arquivos em redeNMB Servidor de nomes para o NetBIOS.NSA National Security Agency - Agência Nacional de SegurançaPAP Password Authentication Protocol - Protocolo de autenticação utilizado em

PPP através de um usuário e senha.PATA Parallel ATA - veja IDEPC Personal Computer - Computador pessoal. Termo criado a partir dos

microcomputadores e popularizado com o lançamento do microcomputador IBM-PC

PCI Peripheral Component InterconnectPCMCIA Personal Computer Memory Card Industry AssociationPDP-11 Programmed Data Processor - Minicomputador da Digital Equipment

Corporation utilizado nas primeiras versões do Sistema Operacional UnixPixel Picture Element - cada ponto na tela representado por n bits, permitindo assim

até 2n coresPOP Post Office ProtocolPPP Point-to-Point Protocol - Protocolo ponto a ponto, muito utilizado tanto em

conexões discadas quanto dedicadasPPTP Point-to-Point Tunneling ProtocolQoS Quality of ServiceRAM Random Access MemoryRARP Reverse Address Resolution Protocol - veja ARPRIP Routing Information ProtocolRISC Reduced Instruction Set Computer

Page 359: booklinux-a4

Sistema Operacional GNU/Linux 359

ROM Read Only Memory - memória apenas de leitura.RPC Remote Procedure Call - chamada remota de procedimentoRPM RedHat Package ManagerRSA Rivest, Shamir & Adleman - Iniciais dos criadores do esquema de

autenticação/criptografia de chave públicaRT-11 Sistema operacional Real Time para o PDP-11 da DECSAS Serial Attached SCSI - veja SCSISATA Serial ATA - veja ATA / IDESCSI Small Computer Systems Interface - Interface de discos muito utilizada em

servidores e estações profissionais de trabalhoSGID Set Group IDentificationSMB Server Message BlockSMP Symetric Multi ProcessingSMTP Simple Mail Transfer ProtocolSNMP Simple Network Management Protocol. Veja também MIBSPOOL Simultaneous Peripheral Operations On-L ineSSL Secure Sockets LayerSUID Set User IDentificationSuSE Software und Systeme Entwicklung (Desenvolvimento de software e

sistemas) - Sigla da Empresa alemã criadora da distribuição SuSE LinuxSVGA Super VGASWAP Área de memória virtual, normalmente em discoURL Uniform Resource LocatorUSB Universal Serial BusVESA Video Electronics Standards AssociationVFAT Virtual File Allocation TableXDR eXternal Data Representation. Veja também RPCVGA Video Graphics ArrayWiFi Wi reless FidelityWWW World Wide WebWUXGA Wide Ultra Extended Graphics ArrayWXGA Wide XGAXGA eXtended VGA

Page 360: booklinux-a4

Índice remissivo

Sistema Operacional GNU/Linux 360

AAndrew S. Tanenbaum 21ASN.1 291

BBackup 94

bunzip2 95bzcat 95bzip2 95compress 95fita magnética 95gunzip 94gzip 94mt 95tar 94unzip 94zcat 94zip 94

Bash 46Expansão de parâmetros 48history 90meta-teclas 91redirecionamento de E/S 96Separador

; 97Separador de comandos 97variáveis 46Variáveis padrão 46

BGP 291Boot do Linux 37, 130

configuração do GRUB 136configuração do LILO 135

Bridges 287

CCalamaris 229Comandos

ajudahelp 50info 51man 50

algébricosbc 65expr 64

arquivosbasename 89cat 57cp 56dd 92dirname 89discos 92file 89find 87head 57less 68ln 67locate 87more 68mv 67od 58patch 58rm 67split 93tail 57tee 57touch 68type 89updatedb 87which 89

case 103diretório

cd 55dirs 56ls 53mkdir 54popd 55pushd 55pwd 51rmdir 54

discosdf 81du 81

hash 51impressão

a2ps 80lpq 79lpr 79lprm 80pr 79

memória

Page 361: booklinux-a4

Sistema Operacional GNU/Linux 361

free 81top 84

permissõeschgrp 87chmod 88chown 87

processos% 82at 83atq 83atrm 83bg 82crontab 83fg 82GNU time 86jobs 83kill 85killall 85nice 85pidof 82ps 82pstree 82renice 85sudo 75time 86top 84xargs 86

rehash 51select 105sistema

top 84uname 75

terminaissetterm 76stty 77tty 76

texto. 52awk 62cut 69diff 71diff3 72echo 51ex 68grep 60join 70paste 69read 51sed 61sort 71source 52strings 59tr 59uniq 71vi 68wc 58

until 103

usuáriosfinger 73gpasswd 75id 73last 72newgrp 74passwd 74sg 74su 74w 72who 72

Comandos administrativos 106chfn 109chsh 109depmod 124dmesg 127edquota 115fdisk 110groupadd 108groupdel 108groupmod 109init 39insmod 123iptraf 180isapnp 122lsdev 122lsmod 122lspci 120lsusb 120mkdosfs 112mke2fs 111mkfs 111mknod 110mkreiserfs 112mkswap 112modinfo 125modprobe 124mount 117-118nmap 180pnpdump 121quota 114quotacheck 116quotaoff 114quotaon 114repquota 115rmmod 123rpcinfo 180rpm 139

atualização de pacotes 142consulta de pacotes 143criando pacotes 146instalação de pacotes 141remoção de pacotes 142utilzando o smart 145utilzando o zypper 145verificação de autenticidade 140

Page 362: booklinux-a4

Sistema Operacional GNU/Linux 362

verificação de integridade 140verificação de pacotes 139

setquota 115snort 180socklist 180swapoff 113swapon 113syslogd 128ulimit 106umask 106umount 118-119usbview 121useradd 107-108userdel 108usermod 109

Comandos básicos 50Comandos condicionais 101

if/then/elif/then/.../fi 102if/then/else/fi 101if/then/fi 101test 105

Comandos iterativos 103for 103while 103

compilação 310Configuração do kernel 257Correio eletrônico 234

anti-virus 242MTA 234MUA 234POP 236Protocolos 236, 238sendmail 237

Configuração 238SMTP 236

DDepuração

ddd 301gdb 301kdbg 301ltrace 301strace 301

Desenvolvimentogcc 299kdevelop 299ldd 300qtdesigner 299

Diretório 29Dispositivos 33DNS 189

BIND 193Configuração 201Registros 193Segurança 204

Ferramentas

dnsdomainname 205dnsquery 205nslookup 205

Ferramentas de diagnóstico 205dig 206dnsquery 206host 206named-xfer 206traceroute 206

Lendo nomes de domínios 192Resource Record 194RR 194Servidores de Nomes 192

Domínios 187DNS 189LDAP 211NIS 207

EEmuladores

dosemu 303pose 306simh 307vmware 305wine 303-304

FFirewall 265

filtros 266Implementação 266ipchains 267iptables 269NAT 266SuSEfirewall 271

Firewalls 297Formato de arquivos

/etc/passwd 107/etc/shadow 107/etc/syslog.conf 126crontab 83

FSF 15FTP 243

Clientes 243Configuração 243Servidores 243

Funcionalidades 287fuser 301

GGerenciamento 288

Áreas funcionais ISO 288aspectos 288atribuições 289entidades 289

getty 40GPL 15

Page 363: booklinux-a4

Sistema Operacional GNU/Linux 363

HHard link 29hardware 285Histórico - do Unix ao Linux 20Histórico da Computação 16hot-swap 25Hubs 287

IICMP 291IGMP 291inetd 168init 37inode 26inodo 26Instalacão do Linux 131Instalacão de Aplicativos 138Instalacão do Linux 129Instalação física

incêndio 286temperatura 286umidade 286

Interconectividade 251, 255-256Apple Macintosh 256Netware

ncpfs 255Internet

estatísticas 189Órgãos reguladores 191

Internet e Intranet 156, 186Interpretador de comandos 43ipcs 301

LLDAP 211

Definições 211Esquemas 212Hierarquia 212LDIF 213servidor 213utilização 218

LILO 130Linus Torvalds 21login shell 40Logs 298lsof 301

Mmake 311Mensagens do sistema Linux 126Metacaracteres 45MIB 291Minix 21Modems 287Módulos de dispositivos e serviços 120

mount point 28MTBF 290MTTF 290MTTR 290MULTICS 19Multitarefa 25Multiusuário 25

NNIS 207

cliente/servidor 207Configuração 207domainname 208ypcat 209ypchfn 209ypchsh 209ypdomainname 208ypmatch 210yppasswd 209yppasswdd 208ypwhich 208

OopenSuSE 21Operadores

condicional&& 102|| 102

Execução condicional 102Expressões aritméticas 99Expressões condicionais 100Grupo de comandos 97Pipeline 96Processos em background 97

& 97Processos em subshell 98substituição de comandos 98| 96

OSPF 291Outros aplicativos 297

PPacotes RPM 312path 29PDP-11 20peopleware 285Plakalkül 17POSIX 25PPP 245

Conexão ADSL 249Conexão discada 246Conexão por demanda 248

prompt 43Protocolo PPP 244-245

Configuração 245Protocolos e métodos 290

Page 364: booklinux-a4

Sistema Operacional GNU/Linux 364

RRedes em Unix 165

IPv4 172Classes 172Endereços especiais 172Endereços privados 172Roteamento 175

IPv6 184Subclasses 174TCP/IP 165

Ferramentas 176Redirecionamento 182Serviços 168

Richard Stallman 15Roteadores 287rpcinfo 301

SS.M.A.R.T. 26Samba 252Segurança 261

Ataques 263Cavalos de Tróia 262Ferramentas 264PGP 278Vermes 263Virus 263VPN 274-275, 281, 283

configuração 275FreeSwan 275

SendmailConfiguração manual 241

Servidor HTMLApache 219

Configuração 219, 225controle de acesso 222logs de acesso 221métodos 223parâmetros globais 220servidor principal 220sites virtuais 224

proxy 227squid 219webalizer 226

Servidor WEB 219Sessões 40Sessões remotas 244

SSH 244Xterminals 244

Shell 43Sistema de arquivos 26Sistemas de arquivos

/proc 23, 31SLES

SuSE Linux Enterprise 22

SMART 26SMP

Symetric Multi Processing 23SNMP 291

Aplicativos 294snmpdelta 294snmpget 294snmpinform 294snmpnetstat 294snmpset 294snmpstatus 294snmptable 294snmptest 294snmptranslate 294snmptrap 294

squidGuard 233super usuário 41SuSE 9Switches 287Symbolic link 29

TTCP/IP

Ferramentasarp 178ethereal 181geoiplookup 179ifconfig 176ip 177ipcalc 179netstat 178ping 176rarp 178route 177tcpdump 180traceroute 180xtraceroute 181

Tratamento de sistemas de arquivos 110

XX Window 149

desktop manager 150Gerenciadores de janelas 154

afterstep 154amiwm 154CDE 154fvwm 154fvwm95 154Gnome 154icewm 154KDE 154mlvm 154qvwm 154twm 154windowmaker 154

Protocolo X11 149

Page 365: booklinux-a4

Sistema Operacional GNU/Linux 365

window manager 150desktops virtuais 150

X server 149XFree86 152-153

SuperProbe 152XF86Setup 152

xinetd 169

Page 366: booklinux-a4

Sistema Operacional GNU/Linux 366