Sistema Operacional GNU/Linux
Transcrição
Sistema Operacional GNU/Linux
Sistema Operacional GNU/Linux® Instalação, Configuração, Utilização e Administração Hélio Marques Sobrinho Sistema Operacional GNU/Linux: Instalação, Configuração, Utilização e Administração Hélio Marques Sobrinho Belo Horizonte Edição: Hélio Marques Revisão de texto: Starix Informática, Interlinux/Art&Soft, R2M Studio Design, Hélio Marques Editoração eletrônica: Interlinux, Hélio Marques Produção gráfica: Capa: Marques Sobrinho, Hélio. Sistema Operacional GNU/Linux:Instalação, Configuração, Utilização e Administração. Belo Horizonte - MG - 2012. Direitos Autorais Copyright © 2001-2012 Hélio Marques Sobrinho Este material é de propriedade de Hélio Marques Sobrinho e é utilizado nos cursos ministrados por ele, sendo proibida sua reprodução sem sua autorização por escrito. Foi produzido utilizando o ApplixWare 5.0 no SuSE Linux. Applixware é marca registrada da VistaSource, Inc. Linux é marca registrada de Linus Torvalds. MS-DOS, Windows, Windows NT, Windows 95, Windows 98, Windows Me, Windows 2000, Windows XP e outros são marcas registradas da Microsoft Corporation. SuSE, openSuSE e YaST são marcas registradas de Novell Inc. Unix é marca registrada de X/Open Company Limited. VMware é marca registrada da VMware Inc. XFree86 é marca registrada de The XFree86 Project. Xorg é marca registrada do XConsortion. Outros produtos citados neste material podem ter suas marcas registradas por seus respectivos fabricantes. Hélio Marques Sobrinho http://www.linuxsupport.com.br e-mail: [email protected] i Revisões Revisões 1.00 1.01 1.02 1.03 1.04 2.00 2.01 3.00 3.01 3.02 3.03 3.04 3.05 3.06 4.00 4.01 4.02 4.03 4.04 4.05 abril/2001 maio/2001 junho/2001 julho/2001 junho/2002 julho/2002 novembro/2002 janeiro/2003 abril/2003 maio/2003 fevereiro/2004 julho/2004 setembro/2005 novembro/2006 novembro/2008 junho/2009 dezembro/2009 janeiro/2010 setembro/2010 janeiro/2012 Starix - versão inicial c/ ~ 100 páginas Interlinux (http://www.interlinux.com.br) Starix - inclusão de capítulos Starix - inclusão de capítulos Starix - inclusão de capítulos Starix - reformatação e atualização R2M Studio Design - revisão e imagens Starix - inclusão de capítulos Starix - inclusão capítulo gerenciamento Starix - configuração do apache Starix - atualização e mais tópicos Starix - atualizações e mais tópicos Starix - atualizações e mais tópicos HMarx - atualizações e mais tópicos HMarx - remoção de referências à Starix HMarx - atualizações e mais capítulos HMarx - inclusão capítulo jogos HMarx - revisão e mais tópicos HMarx - revisão e mais tópicos HMarx - revisões e atualizações Sobre o autor Hélio Marques Sobrinho Engenheiro Eletricista pela EE-UFMG Ênfase em Eletrônica Industrial Mestre em Ciência da Computação pelo DCC-UFMG Ênfase em Tecnologia de Hardware Consultor em Tecnologia da Informação Análise de sistemas Seleção de software e hardware Projeto de software e hardware Desenvolvimento de sistemas nativos e web Instalação e configuração de sistemas Segurança e desempenho de sistemas Treinamento Cursos ministrados Instituições: Starix Informática / InterLinux / Instituto On-line Sistema Operacional SuSE Linux Instituições: FAFI-BH / Fundac-bh / Uni-BH Software básico e de suporte, Sistemas Operacionais Gerência de Sistemas e Redes Segurança em Sistema Operacional Livre (pós graduação GSTI) Instituições: PUC Minas (graduação) Informática I Arquitetura de Computadores I e II Projeto de Algoritmos Algorítmos e Estruturas de Dados III Avaliação de Sistemas Computacionais Agradecimentos iii Agradecimentos Agradeço a colaboracão dos seguintes profissionais, que me auxiliaram na concepção deste livro: Flávia de Castro Mendes Marques Bacharel em Ciência da Computação pelo DCC-UFMG Ênfase em Software Básico Frederico Machado Bastos Bacharel em Ciência da Computação pela PUC-MG Mestre em Ciência da Computação pelo DCC-UFMG Ênfase em Gerenciamento de Redes Breno Silveira Soares Bacharel em Ciência da Computação pela PUC-MG LPI Certified Agradeço ainda ao Edson Barbosa Duarte da Art&Soft, http://artsoft.com.br, pela inestimável ajuda nas formatações, revisões e impressões deste livro. Hélio Marques Sobrinho iv Convenções tipográficas Convenções tipográficas Neste livro são utilizadas as seguintes convenções: Convenção negrito itálico reticências ( ... ) colchetes ( [ ] ) chaves ( { } ) asterisco ( { }*) barra vertical ( | ) courier itálico-sublinhado ¦ +D Uso indica um comando a ser digitado ou de uma função palavras em um idioma diferente do português indica repetição dos argumentos itens opcionais itens alternativos permite mais de uma alternativa separador das opções alternativas nome de um arquivo ou diretório valor ou opção que deve ser substituído pelo valor real ou por uma constante pressionar as teclas dadas simultaneamente Exemplo man ls startx() O kernel do Linux ls [ opcões ] [ arq ... ] ls [ opcões ] [ arq ... ] route { add | del } ... { u | g | o | a}* route { add | del } ... /usr/src/linux --radix=r ¦ +D Prefácio v Prefácio Este livro começou a ser escrito como uma apostila dos cursos de SuSE Linux® ministrados na minha ex-empresa Starix Informática®. Muitos perguntam o que significa o nome Starix. Este nome surgiu em 1988 como nome do sistema operacional Unix-like que seria desenvolvido como trabalho de mestrado da Flávia no Departamento de Ciência da Computação da UFMG - DCC para o super microcomputador DCC-2600. O projeto dos módulos de processamento do DCC-2600 foi meu trabalho de mestrado no DCC, iniciado em 1982 e concluido em 1986 sob a orientação do Dr. Wilson P. Pádua. Outros módulos como memória e E/S foram implementados por Luiz Fernando Costa. O DCC-2600 consistia de um sistema multiprocessado SMP utilizando processadores de 16 bits Intel 8086 em um barramento Intel Multibus. O sistema suportava até 16 processadores, compartilhando memória, discos e barramentos de E/S. Durante o projeto, construção e testes deste sistema foi utilizado o sistema operacional IBM PC-DOS, no qual foram desenvolvidos diversos programas para a depuração do hardware. Foi projetado e implementado um ROM-BIOS compatível com o IBM PC BIOS, apesar das grandes diferenças no hardware, para que o PC-DOS (até a versão 3.30) e alguns de seus aplicativos fossem suportados. Foi implementado também um subconjunto dos aplicativos da rede Micnet® do SCO Xenix®, permitindo troca de arquivos, mail e execução remota entre o DOS e o Xenix através de uma conexão RS-232C. Adquirimos em 1985, o PCNX® da Wendin Inc., um ambiente Unix-like que rodava sobre o PC-DOS e incluia fontes de diversos aplicativos básicos do Unix como o shell, ls, ps, cp, etc. Após alterações nos fontes do PCNX (devido ao hardware), ele funcionou bem em modo monoprocessado no DCC-2600 com 512KB de memória e com 5 terminais seriais. vi Prefácio Houve também no DCC, o projeto de mestrado de Alberto Avritzer definindo um sistema operacional, DCC/ix, em Modula-2, baseado nos fontes originais em C do Unix versão 7 para o minicomputador DEC PDP-11. Posteriormente, por falta de um compilador Modula-2, o DCC/ix foi traduzido para o Turbo Pascal da Borland Inc. As compilações mno Turbo Pascal e testes do DCC/ix eram feitas no DCC-2600, durante o desenvolvimento e testes do próprio hardware. Confesso que isto atrasou bastante o projeto. O DCC/is nunca chegou a funcionar satisfatoriamente. Prefácio vii A revista "Isto é" de 01/jan/1986 anuncia, nas páginas 46 e 48, as pesquisas pioneiras das equipes brasileiras. viii Prefácio Na foto, de pé estão os doutores do DCC-UFMG, Dr. Wilson P. Pádua (meu orientador) e Dr. Ivan Moura Campos e, sentados, a Flávia e eu. Outros projetos em multiprocessamento estavam também sendo desenvolvidos pela USP em São Paulo e pelo NCE no Rio de Janeiro, ambos utilizando processadores Motorola. Prefácio ix Os projetos do DCC-2600 (hardware) e do DCC/ix (software) foram apresentados no 1o Simpósio Brasileiro de Processamento Paralelo (I-SBPP) da SBC em 1987, na cidade de Gramado, RS. Este ano foi também o da minha saída da UFMG e dos projetos do então chamado LAC - Laboratório de Arquitetura de Computadores do DCC. Como a implementação em Pascal do DCC/ix não permitia a exploração do hardware multiprocessado do DCC-2600, além de ter baixo desempenho e pouca estabilidade, eu e a Flávia iniciamos em meados de 1988 um projeto para reimplementar o sistema operacional em C a partir dos fontes originais do Unix com alterações devido ao multiprocessamento e às grandes diferenças de hardware do DCC-2600 em relação ao DEC PDP-11. Este projeto foi batizado como *-ix ou simplesmente Star-ix, sugerindo multiplicidade (*) e Unix, e foi apresentado como proposta de dissertação de mestrado da Flávia em março de 1989. Infelizmente não houve interesse dos doutores do DCC pelo projeto. Além da dificuldade de encontrar um orientador para o projeto, o DCC-2600 teve um problema de hardware que, por desinteresse, não foi solucionado pela equipe do Laboratório Professor Dr. Newton A. C. Lages (novo nome do LAC em homenagem ao falecido professor). Caso fosse dado continuidade pelo DCC, o sistema operacional (*-ix), e diversos aplicativos estariam rodando no DCC-2600, e mesmo no DCC-2800 (que seria uma evolução do DCC-2600 utilizando processadores Intel 80386), talvez no início de 1990 e estaria entre os sistemas open source como o Linux e o FreeBSD. x Prefácio E, em novembro de 1989, na Comdex Las Vegas, a Corollary lança o primeiro projeto de um computador multiprocessado baseado no i486 da Intel. Porque não foi o Brasil ? Prefácio xi Após diversas atividades como consultores autônomos, analistas, pesquisadores e gerentes de algumas empresas, eu e a Flávia decidimos em 1998 abrir nossa própria empresa focando em soluções Unix/Linux e de interconectividade. Nada mais sugestivo do que o *-ix, gerando então o nome Starix. Como já utilizávamos Linux desde 1992 e o SuSE Linux desde a sua versão 5.0, o escolhemos como ambiente operacional da empresa para desenvolvimento de aplicativos e sistemas. A Starix, além do desenvolvimento de sistemas, também atuava nas áreas de suporte, consultoria e treinamento. Para os cursos de SuSE Linux, foi produzida uma apostila de cerca de 100 páginas (que foi a semente deste livro). A Starix tornou-se então a primeira revenda brasileira da empresa alemã SuSE GmbH (Software und System-Entwicklung - Desenvolvimento de software e sistemas), importando o kit com os manuais em inglês, a partir da versão SuSE Linux 6.0. O trabalho de criação deste livro começou quando a equipe da Starix decidiu traduzir o manual do SuSE Linux 6.2. Após traduzir 8 capítulos, o material foi apresentado a um representante da SuSE GmbH na LinuxExpo 2000 em São Paulo. Este representante nos informou que o trabalho de tradução já havia iniciado com a participação de uma das então revendas da SuSE no Brasil. Assim, cancelamos o trabalho de tradução e resolvemos produzir uma apostila para os cursos de SuSE Linux ministrados pela Starix. A apostila inicial (com cerca de 100 páginas) era impressa por demanda em uma impressora laser HP. Com o aumento da demanda, a apostila foi revisada chegando a mais de 130 páginas e assim optamos por imprimí-la na Engesoft com o auxílio da editoração e formatação da empresa Interlinux. xii Prefácio A partir da versão 7.1, a SuSE alemã decidiu não mais produzir o manual em português. Resolvemos então transformar a apostila dos cursos em um livro que pudesse suprir a necessidade dos nossos clientes e também complementasse o kit SuSE Linux. Na Inforuso 2002, feira de informática que ocorre em Belo Horizonte, aliada a parceria com a Livraria Livro Arbítrio, decidimos então terminar este livro de forma que ele fosse produzido e distribuído em livrarias. Isto nunca chegou a se concretizar. A Starix saiu da rede de revendas da SuSE Linux, e manteve seu foco em desenvolvimento, consultoria e treinamento, utilizando soluções de alta tecnologia, principalmente para a plataforma Linux. Em 2005, a Starix encerrou suas atividades e este material passou a ser atualizado por mim e utilizado ocasionalmente como apostila de referência para alguns cursos Linux para empresas. Este material também pode ser utilizado nos estudos preparatórios para exames de certificação em Linux. Ele contém informações que cobrem desde a utilização até tópicos de administração avançada de redes e servidores. Hélio Marques Sobrinho xiii Conteúdo Conteúdo Prefácio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Conteúdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii 1. Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 O que é Linux ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Histórico da Computação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Histórico - do Unix ao Linux . . . . . . . . . . . . . . . . . . . . . . . . 10 O United Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 O SuSE Linux e a Novell . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2. Hardware e Arquitetura . . . . . . . . . . . . . . . . . . 16 Arquitetura dos Sistemas Unix-Like. . . . . . . . . . . . . . . . . . . Dispositivos de armazenamento . . . . . . . . . . . . . . . . . . . . . . Sistema de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diretórios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alguns diretórios padrão do SVR4 e do Linux. . . . . . . . . . . Alguns arquivos padrão . . . . . . . . . . . . . . . . . . . . . . . . . . . . O sistema de arquivos /proc . . . . . . . . . . . . . . . . . . . . . . . . . Dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 20 21 25 26 27 28 30 3. Iniciando o Linux . . . . . . . . . . . . . . . . . . . . . . 34 Do boot ao Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabela de ações utilizadas no initttab . . . . . . . . . . . . . . . . . . Níveis de execução padrão . . . . . . . . . . . . . . . . . . . . . . . . . . Processos disparados pelo init . . . . . . . . . . . . . . . . . . . . . . . Sessões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Encerrando a sessão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Desligando o computador . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 35 36 38 39 41 41 Conteúdo xiv 4. Utilizando o Linux . . . . . . . . . . . . . . . . . . . . . . 42 Interpretador de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 O Bash - Bourne-Again Shell . . . . . . . . . . . . . . . . . . . . . . . . 45 Comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Operadores do bash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Comandos Administrativos. . . . . . . . . . . . . . . . . . . . . . . . . 128 Tratamento dos Sistemas de Arquivos . . . . . . . . . . . . . . . . 134 Módulos de dispositivos e serviços . . . . . . . . . . . . . . . . . . 147 Mensagens do sistema Linux . . . . . . . . . . . . . . . . . . . . . . . 155 5. Instalando o Linux . . . . . . . . . . . . . . . . . . . . . 160 Instalação do Linux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O Boot do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalação do SuSE Linux. . . . . . . . . . . . . . . . . . . . . . . . . . Instalação de outros aplicativos no Linux. . . . . . . . . . . . . . Utilizando o RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 162 163 171 173 6. O Sistema X Window. . . . . . . . . . . . . . . . . . . 188 O Sistema X Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O X Window no Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuração do XFree86. . . . . . . . . . . . . . . . . . . . . . . . . . Gerenciadores de janelas . . . . . . . . . . . . . . . . . . . . . . . . . . O KDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 192 194 196 199 7. Redes em Unix . . . . . . . . . . . . . . . . . . . . . . . . 210 Redes em Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Servidores, Estações e Terminais . . . . . . . . . . . . . . . . . . . . Endereçamento IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Subclasses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Roteamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ferramentas para configuração e diagnóstico . . . . . . . . . . . Endereçamento IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Internet e Intranet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 219 220 224 225 227 242 246 xv Conteúdo 8. Serviços de Redes . . . . . . . . . . . . . . . . . . . . . 248 Domínios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DNS - Domain Name System . . . . . . . . . . . . . . . . . . . . . . . Software DNS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NIS - Network Information System . . . . . . . . . . . . . . . . . . LDAP - Lightweight Directory Access Protocol . . . . . . . . Servidor WEB. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Servidor de proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Correio eletrônico - e-mail . . . . . . . . . . . . . . . . . . . . . . . . . Protocolos de e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuração do sistema de e-mail. . . . . . . . . . . . . . . . . . . Configuração do sendmail . . . . . . . . . . . . . . . . . . . . . . . . . FTP - File Transfer Protocol. . . . . . . . . . . . . . . . . . . . . . . . Sessões remotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PPP - Point to Point Protocol . . . . . . . . . . . . . . . . . . . . . . . Comunicação e Telefonia . . . . . . . . . . . . . . . . . . . . . . . . . . Interconectividade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interconectividade DOS/Windows . . . . . . . . . . . . . . . . . . . Interconectividade Novell® Netware® . . . . . . . . . . . . . . . Interconectividade Apple® Macintosh® . . . . . . . . . . . . . . 248 250 255 275 281 290 301 311 314 316 317 322 323 324 330 331 331 336 337 9. O Kernel Linux . . . . . . . . . . . . . . . . . . . . . . . 338 Configuração do kernel Linux . . . . . . . . . . . . . . . . . . . . . . 338 Compilação do kernel e seus módulos . . . . . . . . . . . . . . . . 341 10. Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Segurança no Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formas de ataque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algumas ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VPN - Virtual Private Network . . . . . . . . . . . . . . . . . . . . . PGP - Pretty Good Privacy . . . . . . . . . . . . . . . . . . . . . . . . . Clusters e Grids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Critérios de segurança do DoD . . . . . . . . . . . . . . . . . . . . . . Mantendo o sistema seguro. . . . . . . . . . . . . . . . . . . . . . . . . 344 345 350 352 365 371 374 377 380 Conteúdo xvi 11. Gerência de Redes em Linux . . . . . . . . . . . . 381 Sistema de computação. . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalação física . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instalação elétrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Topologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gerenciamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SNMP e MIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Firewalls como ferramentas de gerenciamento. . . . . . . . . . 381 382 383 384 385 386 392 398 12. Ambiente de Execução e Desenvolvimento de Aplicativos em Linux . . . . . . . . . . . . . . . . . . . . . 403 Formato de arquivos executáveis . . . . . . . . . . . . . . . . . . . . Executando programas para Windows no Linux . . . . . . . . Emuladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compilando fontes de aplicativos no Linux . . . . . . . . . . . . Os arquivos Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gerando pacotes RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . Assinando um RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de pacote RPM . . . . . . . . . . . . . . . . . . . . . . . . . . 409 410 411 416 417 420 423 424 13. Expressões Regulares. . . . . . . . . . . . . . . . . . 429 Expressões Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 14. O Editor de Textos VI . . . . . . . . . . . . . . . . . 433 O editor de textos vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 Opções do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 15. Criando Disquetes de Boot. . . . . . . . . . . . . . 439 Criando Disquetes de Boot . . . . . . . . . . . . . . . . . . . . . . . . 439 16. Sistemas de Numeração . . . . . . . . . . . . . . . . 446 Notação posicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Números em um computador digital. . . . . . . . . . . . . . . . . . Números naturais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Números inteiros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Números de ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . 446 449 449 449 451 xvii Conteúdo 17. Introdução à Computação Forense . . . . . . . . 452 Conceitos iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Procura por evidências . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plano de batalha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reconstrução das fábulas . . . . . . . . . . . . . . . . . . . . . . . . . . Quem contactar ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Investigação na prática . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 453 454 454 454 455 18. Clusters e Grids . . . . . . . . . . . . . . . . . . . . . . 458 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Implementando um cluster HPC. . . . . . . . . . . . . . . . . . . . . 459 Implementando um cluster HA. . . . . . . . . . . . . . . . . . . . . . 461 19. Entretenimento e Aprendizado . . . . . . . . . . . 466 Linux também é cultura e diversão !. . . . . . . . . . . . . . . . . . 466 Jogos de ação (3D) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 Jogos para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Livros e outras publicações. . . . . . . . . . . . . . . . . . . . . . . . . 480 Sites na Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 Livros e outras publicações. . . . . . . . . . . . . . . . . . . . . . . . . 486 Sites na Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Glossário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 Índice Remissivo. . . . . . . . . . . . . . . . . . . . . . . . . 498 Introdução 1 1. Introdução O que é Linux ? Quando falamos de ‘‘Linux’’, precisamos definir exatamente o que queremos dizer com o termo. O ‘‘Linux propriamente dito’’ é o kernel, o ‘‘coração’’ de todo sistema operacional GNU, mas o kernel sozinho não é um sistema operacional utilizável. Na verdade, o Linux (kernel) é parte do projeto GNU, idealizado por Richard Stallman, cujo objetivo era criar todo um sistema free, e não somente o kernel do sistema operacional, e dar aos usuários de computadores a liberdade que muitos haviam perdido. Deste ponto de vista, o Linux deveria ser chamando de GNU/Linux. GNU é a sigla para GNU is Not Unix. A base legal dos aplicativos GNU é a GPL - GNU General Public License da Free Software Foundation, FSF. Para um sistema Unix® existe uma série de pacotes de software conhecidos como ferramentas Unix. No Linux, bem como em outros sistemas operacionais, estes programas estão disponíveis como pacotes de software gratuitos em suas versões GNU. A maioria deles oferece características melhoradas em relação aos originais. Destes, o compilador GNU C/C++, que algumas pessoas acreditam ser um dos melhores compiladores disponíveis atualmente, é provavelmente o programa mais famoso, talvez com a exceção do Emacs. 2 Introdução O que torna o Linux completo é sua interface gráfica através do XWindow. As primeiras versões utilizavam o XFree86 (atualmente na versão 4.6.0). Este é um Sistema X Window X11R6.6) para sistemas UNIX para PCs. As versões mais recentes das distribuições Linux estão adotando o X.org. Este é o porte da distribuição oficial do Sistema X Window X11R7.1 do X Consortium, Inc. e, portanto, completamente compatível com o padrão. Todos estes componentes, juntos com muitas outras ferramentas, aplicativos e entretenimentos, criam o sistema conhecido como Linux. Existe uma grande quantidade de software gratuito disponível, e muitas maneiras de montar uma distribuição do sistema Linux. Uma distribuição irá conter o kernel do Linux, aplicativos e utilitários, ferramentas para instalação, configuração e administração do Linux. Existem diversas distribuições do Linux. Entre as mais conhecidas estão Slackware, Debian, Red Hat, Corel, Turbo Linux, Caldera (hoje Linux), SuSE e, no Brasil, a Conectiva (derivada da Red Hat). Em 2003 a Red Hat descontinuou o Red Hat Linux e passou a manter apenas o Red Hat Enterprise Linux e o Projeto Fedora. A distribuição Debian é a única distribuição GNU pura porque só contém aplicativos com licença GPL. Esta distribuição já possui mais de 8700 pacotes. No final das contas, a escolha de uma distribuição do Linux é uma decisão filosófica que divide a comunidade Linux em diversas ideologias. A distribuição Linux criada pela empresa alemã SuSE tem sido considerada a melhor, por ser a mais completa, mais estável e mais fácil de administrar. Ela se tornou a base do United Linux. Hoje o SuSE Linux é propriedade da Novell. O projeto openSuSE pode ser encontrado em http://opensuse.org. São disponibilizadas as imagens de CD ou DVD e muita documentação. Introdução 3 Histórico da Computação A necessidade do ser humano de um sistema de numeração surgiu ainda na pré-história. Os homens da caverna começaram a associar pedras às suas posses. Com o passar dos anos, o aumento das posses tornou o transporte de suas "economias" bastante difícil, e assim foram criados símbolos para representar uma determinada quantidade de elementos. Um exemplo típico é a escrita cuneiforme dos babilônios e assírios há mais de 5000 anos. A partir de 300 AC, surgiram os primeiros ábacos. São instrumentos de cálculo simples e altamente eficientes. São utilizados até hoje no Japão e China. Em 1617, John Napier, inventor dos logaritmos, projetou uma máquina de multiplicar através de cilindros. Em 1642, Blaise Pascal construiu uma máquina de somar e subtrair utilizando engrenagens. Em 1673, Gottfried Willhelm Leibniz projetou uma máquina para realizar multiplicações através de somas sucessivas, que só pôde ser construída em 1694. Em 1728, Basile Bouchon construiu um tear mecânico com folha giratória de papel perfurado. Em 1801, Joseph Jacquard criou a máquina de tecer com cartões perfurados. 4 Introdução Em 1812, Charles Babbage projetou uma máquina de cálculos de tabelas matemáticas. Em 1859, ele projetou uma máquina diferencial. Ela apenas foi construída em 1991. Em 1890, William Seward Burroughs I construiu a primeira máquina com teclado para somar e imprimir. Neste mesmo ano, Herman Hollerith construiu uma máquina tabuladora com cartões de papel perfurados para realizar o censo dos EUA. Em 1911, a fusão de 4 empresas, incluindo a de Hollerith, formaram a Computing Tabulation Recording Corporation (CTR). Em 1924, sob a presidência de Thomas J. Watson, ela foi renomeada para International Business Machines Corporation (IBM), Introdução 5 Em 1937, Howard Hathaway Aiken construiu uma avançada máquina para cálculos integrais e diferenciais, o IBM Automatic Sequence Controlled Calculator (ASCC), chamado de Mark I pela universidade de Harvard. O primeiro computador programável. O Mark I Em um gabinete de aco com 2.5m de altura, 16m de largura e 6cm de profundidade, com 765 mil componentes e pesando 4500kg, o Mark I era alimentado por um motor elétrico de 4kW. Realizava uma multiplicacão em 6 s e uma divisão em 15.3s. Uma funcão logatitmica ou trigonométrica demorava cerca de 1 minuto. 6 Introdução Em 1941, Konrad Zuse criou Z3, primeiro computado controlado por um programa, armazenado em fita perfurada. Ele também projetou a primeira linguagem de programação de alto nível em 1946, PlanKalkül. Abaixo um programa para verificação de lógica em PlanKalkül. Em 1943, Alan Turing participou da construção do Colossus, um computador com 1800 válvulas. Seu projeto para quebrar criptografia foi tão bem feito que sua velocidade não poderia ser batida por programas convencionais rodando nos processadores Intel Pentium atuais. Introdução 7 Em 1946, surge o ENIAC (Electronic Numeric Integrator And Calculator). Com 18800 válvulas, ocupava 3 salas em um total de 72 m2, pesava 30 toneladas e era refrigerado por dois ventiladores movidos por motores Crysler de 12 CV. Tinha uma avaria a cada 6 horas. Surge, então, o conceito da arquitetura Von Newman (processador de instruções tratando uma entrada e produzindo uma saída). Em 1948, surge o EDVAC (Electronic Discrete Variable Automatic Computer). Em 1951, é produzido o primeiro computador comercial: o UNIVAC I. Von Newman e o EDVAC Em meados de 1960, é lançado o IBM System/360, um marco na história dos mainframes. Sua arquitetura evoluiu até o atual S/390, que executa Linux utilizando o modelo de máquinas virtuais. Em 1970, a Digital Equipment Corporation, DEC, lança a linha PDP. A arquitetura do minicomputador PDP-11 influenciou significativamente a criação dos primeiros microcomputadores. Em 1972, a Intel lança o 8080 no microcomputador Altair. Surgem os microcomputadores de 8 bits rodando o sistema CP/M-80. 8 Introdução Em 1970, surge o UNIX escrito em linguagem de montagem do DEC PDP-7. Em 1973, o Unix foi reescrito em C, linguagem criada por Dennis Ritchie. O Unix se espalhou por diversos mainframes e minicomputadores. Em 1979, a Intel lança o 8086 e o 8088. Começa a era do IBM PC, executando o PC-DOS. Este sistema operacional herdou milhares de programas do CP/M80, porque sua arquitetura interna foi baseada nele. Em 1983, a Intel produz o 80286 e a IBM lança o IBM PC/AT. Em 1985, com o lançamento do Intel 80386, o Unix pode então encontrar seu lugar em microcomputadores. A versão SCO Xenix foi a mais marcante. Em 1990, foi definido o Unix System V Release 4. Através do documento System V Interface Definition (ou simplesmente SVID), diversas versões de Unix foram convergindo para um padrão (SCO Unix, HP-UX, IBM AIX, Dec Ultrix, e outros). O finlandês Linus Torvalds cria o Linux em 1991. Com os fontes disponíveis gratuitamente, o Linux acompanha então a evolução dos processadores, utilizando o máximo dos recursos do computador. Em 1992, a Intel lança o processador Pentium. A Microsoft começa a linha de seus sistemas Win32 (Windows NT 3.x em 1993, Windows 95 em 1995, Windows NT 4.0 em 1996). A Intel cria o Pentium II em 1997 e o Pentium III em 1999, ao mesmo tempo que apresenta a arquitetura IA64. Em 2000 são lançados o Windows 2000 e o Windows Me. Introdução 9 Surge então o Pentium IV. Em 2001 é lançado o Windows XP. Em 2003 são lançados o Windows 2003 e a versão 64 bits do Windows XP, cuja versão Professional só é liberada em 2005. Em 2005 é anunciado o Windows Vista, lançado em 2006. Processadores como o Celeron, o Core 2, Core 2 Duo, Atom r o Itanium evoluem ultrapassando a frequência de 3 GHz, Em 2008 surgem os processadores i3, i5 e i7. Em 2009 foi lançado o Windows 7. Em 2011 a Intel lança a segunda geração do Intel Core Sandy Bridge. O Linux roda perfeitamente em todos os processadores. Os processadores AMD também são suportados pelo Linux: o K5 lançado em 1995, o K6 e o K62 em 1997, o K7 (Athlon , Duron e Sempron) em 1999, o K8 (Opteron, Turion e Athlon X2 FX) em 2003, e o K10 ( Phenom FX, Athlon II, Turion II) em 2007. Além disso, o Linux suporta também os clusters e grids, permitindo configurações de alta disponibilidade e/ou alto desempenho. Veja mais no capítulo Clusters e Grids. Hoje, além da plataforma x86, o Linux é disponível para os processadores MIPS, PowerPC, Sparc, DEC Alpha, Motorola 68xxx, e mesmo o S/390 e o BlueGene/L da IBM. 10 Introdução Histórico - do Unix ao Linux O sistema operacional Unix teve sua origem no projeto MULTICS - Multiplexed Information and Computing Service - da Bell Labs, MIT e General Electric, iniciado em 1964. O MULTICS rodava originalmente em um GE645, tendo explorado o uso de segmentação e paginação no gerenciamento de memória e informação. Ken Thompson, Dennis Ritchie e Brian Kernigham, à direita, divertiam-se com o jogo Space Travel no GE645, para o qual pagavam US$75 por jogada. Utilizando um PDP-7 rejeitado pela Bell, os três programadores portaram o jogo para ele e escreveram um pequeno sistema operacional, que Brian denominou UNICS - Uniplexed information and computing system baseado no nome do MULTICS. Inicialmente escrito em linguagem de montagem do PDP-7, em 1973 ele foi praticamente todo reescrito em C (no padrão definido por Kernigham e Ritchie). A Bell Labs gostou da idéia e Peter Neumann sugeriu que o nome fosse modificado para Unix. Foto de um PDP-7 restaurado em Oslo, Noruega, 2005 Introdução 11 Abaixo, uma foto histórica de Dennis Ritchie (em pé) e Ken Thompson utilizando um PDP-11. 12 Introdução A partir da liberação dos fontes para as universidades, apareceram diversas versões de sistemas compatíveis com o Unix. Por ser de extrema portabilidade, o Unix passou a rodar em diversas máquinas de diversos fabricantes. Em 1977 o Unix já rodava em mais de 500 entidades em mais de 10 paises. Versões comerciais, como o Xenix da SCO, o HP-UX da HP, o AIX da IBM, BSD de Berkeley, SunOS da Sun, o AT&T Unix, entre outros, rapidamente dominaram o mercado de servidores. Em 1990, a AT&T (antiga Bell Labs) escreveu o documento SVID (System V Interface Definition), criando o padrão SVR4 (System V Release 4). Em 1991, o finlandês Linus Torvalds (à esquerda), inspirado no sistema operacional Minix de Andrew S. Tanenbaum (à direita), decidiu escrever um sistema operacional "melhor que o Minix". Em 5 de outubro, liberou a primeira versão na Internet. Hoje o kernel do Linux conta com milhares de analistas e programadores do mundo inteiro. Incluindo aplicativos GNU e outros comerciais, existem hoje distribuições com mais de 3.000 aplicativos. O Linux possui características básicas do BSD e do Unix System V. Em 2001, o kernel Linux, em sua versão 2.4 na distribuição SuSE 8.0 com mais de 4.000 aplicativos, já está sendo utilizado facilmente por usuários de diversos níveis. Ele substitui, com muitas vantagens, qualquer ambiente operacional (redes Novell, Unix, Windows, e outros), ou mesmo se integra a redes com estes ambientes, transparentemente. Paralelamente, eram desenvolvidas as versões 2.5 e 2.6 do kernel Linux. Em dezembro de 2003 a versão 2.6 do kernel foi liberada trazendo ao Linux a verdadeira capacidade para aplicações empresariais. O ambiente operacional GNU/Linux amplia sua utilização a cada dia em supercomputadores, servidores, estações de trabalho e diversos equipamentos eletrônicos. Ele é também amplamente utilizado em soluções de clusters de alto desempenho ou alta disponibilidade. Com diversas interfaces gráficas amigáveis e com suporte a milhares de aplicativos e sua segurança inerente, ele agrada cada vez mais os mais exigentes usuários. Introdução 13 O United Linux Em 25 de julho de 2002, os líderes da indústria do Linux (Caldera, Conectiva, SuSE Linux e TurboLinux) anunciaram o planejamento do UnitedLinux e o provável lançamento para novembro. Este sistema operacional, seguindo a especificação técnica definida pelas 4 distribuidoras de Linux, deverá ser o padrão adotado pelas empresas, facilitando sua manutenção e administração. Diversas empresas, como a AMD, Borland, Fujitso, IBM, NEC e SAP, já manifestaram seu apoio comentando a facilidade para a criação de um ambiente Linux de alto desempenho e a facilidade para o desenvolvimentro de hardware e software. A Caldera foi adquirida pela SCO que substituiu a Caldera no grupo UnitedLinux. Devido às ações da SCO contra a IBM relativas a supostas propriedades intelectuais de códigos fornecidos pela IBM aos desenvolvedores do Linux, o grupo UnitedLinux foi dissolvido em 2004. Posição das SuSE: "A SuSE Linux continuará a suportar incondicionalmente o UnitedLinux, honrando os compromissos com os clientes". O SuSE Linux e a Novell A empresa alemã SuSE foi adquirida em janeiro de 2004 pela Novell. A distribuição Novell/SuSE Linux é considerada uma das mais completas e seguras do mundo. São oferecidas diversas soluções Linux variando do uso pessoal até o uso corporativo. Além das solucões corporativas da linha SuSE Linux Enterprise, há a distribuição openSuSE, projeto criado para disponibilizar solucões de código aberto para a comunidade Linux. 14 Introdução Linha de produtos da Novell A Novell disponibiliza diversos produtos baseados em SuSE Linux Enterprise. Alguns deles são descritos abaixo. SuSE Linux Enterprise Server Servidor corporativo altamente estável, seguro e escalável SuSE Linux Enterprise High availability extesion Conjunto de aplicativos para a implementação de clusters de alta disponibilidade SuSE Linux Enterprise Enterprise Real Time Extension Extensão do SuSE Linux Enterprise Server para aplicacões de tempo real SuSE Linux Enterprise Desktop Ambiente seguro e fácil de usar para as estações de trabalho suportando ampla gama de dispositivos e diversos aplicativos. SuSE Linux Enterprise Thin Client Solução Linux corporativa segura e de baixo custo para a utilização de estações leves. SuSE Linux Enterprise JeOS Uma versão reduzida do SuSE Linux Enterprise (Just-enough Operating System) adequada para a utilizaçãoem soluções virtuais ou aplicações embutidas. A Novell, a IBM, a HP, a SGI, a Nokia e muitas outras empresas, estão apoiando e incentivando o uso do Linux e de soluções de código aberto. Hardware e Arquitetura 15 2. Hardware e Arquitetura O ambiente operacional GNU/Linux está disponível para diversas plataformas, cada qual com suas idiossincrasias de configuração e gerenciamento de dispositivos. A plataforma mais comum é a da família de processadores Intel e seus similares (AMD e Cyrix). Há ainda versões para processadores RISC, como o Alpha da Compaq (anteriormente DEC) e o HP PA, processadores Motorola 68K, Sun Sparc, ARM, MIPS, PowerPC, e para o IBM S/390. Vários barramentos são suportados. Os mais comuns são: ISA, VLB, EISA, PCI, MCA do PS/2, e VME. Veja os comandos lspci, lsusb e pnpdump no capítulo 4, Utilizando o Linux. Vamos considerar neste capítulo a família Intel e computadores baseados na arquitetura do IBM PC, o Personal Computer. Muitos servidores, mesmo os multiprocessados (SMP Symetric Multi Processing), possuem a arquitetura do IBM PC. Nestes computadores existe o BIOS (Basic Input/Output System), que provê a interface entre o hardware e os sistemas operacionais. Normalmente, o BIOS também oferece uma interface para a configuração das características do hardware instalado no computador. Muitas das configurações do BIOS podem afetar o comportamento do computador e do sistema operacional. As informações fornecidas pelo BIOS ao sistema operacional podem influir no funcionamento correto e no desempenho de todo o ambiente computacional. Configurações típicas incluem data e hora, tipos e geometrias de discos IDE e SCSI, a configuração de portas seriais e paralelas padrão e portas USB. 16 Hardware e Arquitetura O kernel Linux possui módulos (drivers) para a grande marioria dos dispositivos encontrados nos computadores tradicionais. Estes drivers fazem parte do kernel e normalmente são compilados como módulos dinamicamente carregados quando da identificação do hardware, durante a carga do kernel ou da primeira utilização do dispositivo. Devem ser evitados dispositivos como os WinModems. Para realizar sua função, estes dispositivos utilizam programas geralmente só disponíveis para Windows, que fazem uso intensivo da CPU. Para o caso dos WinModems, especificamente, há o site http://www.linmodems.org onde podem ser encontradas implementações de módulos para Linux de drivers de algumas marcas. O hardware detectado pode ser visto através das informações disponibilizadas pelo kernel no sistema de arquivos virtual proc montado no diretório /proc. Veja ainda o comando lsdev do SuSE Linux. Alguns exemplos são: Arquivo /proc/cpuinfo /proc/ioports /proc/interrupts /proc/dma /proc/meminfo /proc/devices /proc/scsi/* /proc/ide/* /proc/modules /proc/iomem /proc/bus/* /proc/driver/* Informação Modelo e características do(s) processadore(s) Portos de E/S Interrupções e dispositivos associados Canais de DMA utilizados Memória principal e swap Dispositivos tipo caracter e bloco Barramentos e dispositivos SCSI Barramentos e dispositivos IDE Módulos carregados Mapa de memória principal e de dispositivos Barramentos e dispositivos (USB, PCI, PCMCIA, ISA, ...) Dispositivos especiais (RTC, nvidia, thinkpad, ...) Hardware e Arquitetura 17 Arquitetura dos Sistemas Unix-Like Um sistema Unix-like (como o FreeBSD, o Solaris, e o Linux) se caracteriza basicamente pela portabilidade. Somente o kernel deve fazer acesso ao hardware. Um sistema Unix-like é implicitamente multitarefa e multiusuário. O kernel trata de coordenar as execuções dos processos e as operações sobre o hardware. Os kernels dos sistemas Unix-like atuais não são mais monolíticos. Alguns deles, como o Linux, possuem módulos que podem ser adicionados e removidos dinamicamente. Assim, drivers para dispositivos novos podem ser incluídos no sistema de acordo com a demanda, ou excluídos conforme a necessidade. Em equipamentos que suportam componentes hot-swap, a troca de dispositivos pode ser feita sem desligá-lo. Por exemplo, se o equipamento permite placas de rede hot-swap, a placa nova poderá ser de fabricante diferente da anterior. O administrador deverá apenas reconfigurar os parâmetros da nova interface de rede e, às vezes, reiniciar os serviços de rede. Sobre o kernel há uma biblioteca de funções bem definida para que aplicativos nativos ou scripts interpretados pelo shell possam ser executados e, independentemente do hardware, prover uma interface uniforme para o usuário. 18 Hardware e Arquitetura Quando se desenvolve um aplicativo para Unix, os analistas e programadores raramente se preocupam com o tipo de processador e com a arquitetura básica do computador no qual este aplicativo será executado. As bibliotecas do sistema criam uma arquitetura única virtual que, através do kernel, e de seus módulos, utiliza todos os recursos disponíveis no hardware e arquitetura real. Até mesmo ambientes operacionais não Unix-like como o Microsoft Windows permitem, através de subsistemas POSIX, criar um ambiente de programação e execução virtual de aplicativos que seguem a arquitetura ortogonal do Unix. Isto permite a alta portabilidade de aplicativos, além da facilidade de execução no Linux de arquivos binários compilados para outros Unix como o SCO Xenix, o SCO Unix, o SCO Unixware e o Sun Solaris. Em termos de arquitetura de hardware, um programa POSIX não precisa preocupar com tipos de interface de discos, redes, mouse, placas de som, placas gráficas, monitores e as resoluções de vídeo (veja o capítulo 6 - O Sistema X Window). Hardware e Arquitetura 19 Dispositivos de armazenamento Para utilizar qualquer dispositivo de armazenamento no Linux, este deverá conter um sistema de arquivos reconhecível pelo Linux. Um dispositivo de armazenamento pode ser um disco, uma partição do disco, um disquete, um CD, um DVD, um ZIP ou mesmo um arquivo dentro de um sistema de arquivos. Além dos tipos sistemas de arquivos nativos do Linux como o minix, ext, ext2, ext3 e o reiserfs, são suportadas uma grande variedade de sistemas de arquivos de outros sistemas operacionais. Entre eles estão os tipos msdos (FAT12 e FAT16), vfat (FAT32), ntfs, ncpfs, smbfs, umsdos, nfs, adfs, affs, hfs, hpfs, xenix, sysv, coherent, qnx4, jfs, xfs, xiafs, udf, ufs, iso9660 e romfs. Normalmente o suporte a estes tipos é feito através de módulos do kernel. Note que um sistema de arquivos remoto será visto virtualmente através de seu protocolo, independente do tipo de formatação do dispositivo. Assim, um sistema de arquivos ext2 ou reiserfs será tratado de forma transparente por máquinas remota utilizand, por exemplo, o tipo nfs - Network File System.Para máquinas Windows, qualquer tipo de sistema de arquivos pode ser compartilhado através do smbfs. Após a formatação do dispositivo de armazenamento, deve ser gerado o sistema de arquivos utilizando o programa mkfs que é um front-end para programas mkfs.tipo. O mkfs irá criar no dispositivo as informações de controle para que o Linux encontre o sistema de arquivos hierárquico e os atributos de arquivos e diretórios. Para os sistemas de arquivos mais utilizados ext2, msdos e reiserfs existem os programas mke2fs, mkdosfs e mkreiserfs para facilitar a utilização. Veja os comandos de tratamento de sistemas de arquivos no capítulo 4. Alguns discos possuem a tecnologia S.M.A.R.T., ou simplesmente SMART (Self-Monitoring, Analysis and Reporting Technology) que é um sistema de monitoramento para detectar e reportar vários indicadores de confiabilidade e possivelmente antecipar falhas dos discos. O Linux possui o serviço smartd que controla e monitora estes discos. Ele é totalmente configurável. Os eventos selecionados podem ser enviados para um e-mail. 20 Hardware e Arquitetura Sistema de Arquivos O Linux, assim como qualquer sistema Unix-like, não impõe nenhum formato para um arquivo. Para ele, um arquivo é apenas um conjunto de bytes armazenados em algum dispositivo. Para os usuários, um arquivo é identificado pelo seu nome. Independente do tipo do sistema de arquivos no dispositivo de armazenamento, os aplicativos tratarão de forma ortogonal os arquivos e diretórios nele presente. Este sistema é denominado Virtual File System ou simplesmente vfs e provê a transparência entre os tipos de sistemas de arquivos nos dispositivos de armazenamento, incluindo os compartilhamentos de rede. Um arquivo é uma sequência de bytes em, identificada por um número chamado inode ou inodo. O nome (ou os nomes) deste arquivo estará(ão) armazenado(s) em um arquivo de tipo diretório. Isto permite que um mesmo arquivo (conjunto de bytes) possua diversos nomes localizados em diversos diretórios. Um inodo contém informações referentes aos bytes armazenados, tais como: • • • • • • Tipo do arquivo: normal, diretório, dispositivo, socket, named pipe (FIFO), link, ... Permissões de acesso para o dono, grupo e outros links : número de nomes para este inode UID (User ID) e GID (Group ID) do dono tamanho datas e horas de criação, última modificação e último acesso Hardware e Arquitetura 21 As informações do inodo podem ser vistas através do comando ls: hmarx@thor:~ > ls -lid Diretorio 8392 drwxr-xr-x 2 hmarx starix hmarx@thor:~ > ls /home analia breno flavia fred hmarx@thor:~ > o 1024 Mar 24 10:07 Diretorio hmarx www No exemplo acima, o inodo de Diretorio é 8392, que é um diretório (d), tem permissão de leitura, escrita e "execução" para o dono (rwx) e apenas leitura e "execução" (r-x) para o grupo e para os outros, tem 2 links, pertence ao usuário hmarx e ao grupo starix, tem o tamanho de 1024 bytes e foi modificado em 24 de março às 10:07. Veja mais detalhes do comando ls no Capítulo 4. @ Um diretório recém criado terá 2 links, isto é 2 nomes. Você seria capaz de identificar quais são os dois nomes dados ao inodo que armazenará o diretório ? Dica: Para cada sub-diretório que você criar neste diretório recém criado, o número de links do diretório será incrementado. 22 Hardware e Arquitetura Os arquivos são organizados de forma hierárquica, isto é, em uma árvore de diretórios e arquivos. O diretório raiz é designado pelo símbolo "/". Em um dispositivo (real ou virtual), seja ele um disco, disquete, partição primária ou lógica, um conjunto de diretórios, sub-diretórios e arquivos é denominado sistema de arquivos ou file system. A partir de um sistema de arquivos inicial (denominado root filesystem) que é montado na raiz "/", outros sistemas de arquivos podem ser montados em sub-diretórios. Isto formará uma coleção de file systems. Nesta coleção, os diretórios e arquivos serão acessíveis de forma ortogonal pelas aplicações, como se estivessem em um único dispositivo. Um ou mais sistemas de arquivos nesta coleção pode até mesmo residir em um outro computador, executando outro sistema operacional. O sub-diretório sob o qual é montado um sistema de arquivos é denominado mount point. Um mount point (ou ponto de montagem) é normalmente um diretório vazio. Caso um sistema de arquivos seja montado sobre um diretório não vazio, isto ocultará temporariamente seus arquivos e subdiretórios até que o sistema de arquivos seja desmontado. Hardware e Arquitetura 23 No exemplo abaixo, o diretório /opt é o mount point para o segundo sistema de arquivos. O sistema de arquivos montado pode estar em qualquer unidade de armazenamento e até em um arquivo dentro de um sistema de arquivos. Ele pode também em outro computador em uma rede (que pode estar executando outro sistema operacional). O Linux pode ainda montar compartilhamentos de máquinas Windows, Novell e Apple Macintosh. Esta montagem pode ser feita através de protocolos como NFS, SMBFS (ou CIFS), NCPFS, HFS, entre outros. Mais detalhes serão vistos no capítulo 8, Serviços de Rede - Interconectividade. 24 Hardware e Arquitetura Diretórios Um diretório é basicamente um conjunto de nomes para arquivos. De forma simples, ele associa um número de inode a um nome de arquivo. Isto permite que um arquivo possua diversos nomes. Os nomes poderão estar em diretórios diferentes. Os diversos nomes de um mesmo arquivo são chamados de links (ou hard links) ou de symbolic links. Quando há necessidade de colocar um nome de um arquivo em um diretório que reside em um sistema de arquivos diferente do arquivo em si (outra partição, disco ou mesmo computador), cria-se um link simbólico, symbolic link. Um link ou hard link apenas irá incrementar o campo links do inodo. Um symbolic link alocará um inodo no sistema de arquivos que conterá o nome do arquivo referenciado. Um arquivo pode ser referenciado por um caminho ou path. O caminho pode ser absoluto ou relativo. O caminho absoluto contém todos os subdiretórios desde a raiz até o nome do arquivo. O caminho relativo faz referência ao diretório de trabalho corrente. Se o caminho não começa com "/", ele é relativo. hmarx@thor:~/arqs > ls -la total 15 drwxr-xr-x 2 hmarx starix 1024 drwxr-xr-x 111 hmarx starix 6144 -rwxr-xr-x 2 hmarx starix 8273 drw-r--r-2 hmarx starix 1024 crw-r--r-1 hmarx starix 30, 40 prw-r--r-1 hmarx starix 0 lrwxrwxrwx 1 hmarx starix 11 hmarx@thor:~/arqs > o Feb Feb Feb Mar Mar Mar Mar 11 11 11 24 24 24 24 13:22 09:34 13:22 08:35 08:35 08:40 09:08 . .. Arquivo Normal Diretorio Dispositivo FIFO Link p sh -> /usr/sh Hardware e Arquitetura Alguns nomes são especiais, como: / . .. ~ diretório raiz Também utilizado para separar sub-diretórios em um path diretório corrente diretório anterior ou diretório pai diretório pessoal ou home directory Exemplo: ~hmarx é o diretório pessoal do usuário hmarx Alguns diretórios padrão do SVR4 e do Linux / /bin /boot /dev /etc /usr /tmp /usr/bin /usr/spool ou /var/spool /sbin /etc/rc.d ou /etc/init.d /opt ou /usr/local /var/log /proc diretório raiz utilitários padrão arquivos utilizados no boot do Linux dispositivos configuração do sistema utilitários da plataforma, interface X Window, ... arquivos temporários outros utilitários gerais spool de impressão, mail, fax, ... boot, configuração e administração scripts de inicialização utilitários ou arquivos opcionais arquivos de log do sistema (kernel e serviços) diretório virtual com informações do kernel Linux 25 26 Hardware e Arquitetura Alguns arquivos padrão /vmlinuz ou boot/vmlinuz /var/spool/mail/username /etc/passwd /etc/shadow /etc/group /etc/inittab /etc/fstab /etc/printcap /etc/syslog.conf /etc/lilo.conf /boot/initrd /boot/grub/menu.lst kernel do Linux (o z indica que o kernel está comprimido) caixa postal do usuário username descrição dos usuários locais do sistema senhas dos usuários locais do sistema descrição dos grupos serviços definidos para cada nível de execução sistemas de arquivos montáveis configuração das impressoras configuração do syslogd configuração do LILO (LInux LOader) RAM disk para a inicialização do Linux configuração do GRUB (GRand Unified Bootloader) ✍ É possível ter diversas versões de kernel instalados no GNU/Linux. Desta forma, cada arquivo do kernel e do initrd terão seus nomes seguidos da versão, como por exemplo, /boot/vmlinuz-2.6.22.19-0.1-default /boot/initrd-2.6.22.19-0.1-default E os módulos de cada kernel serão instalados em diretórios diferentes, por exemplo, em: /lib/modules/2.6.22.19-0.1-default/ Hardware e Arquitetura 27 O sistema de arquivos /proc Além dos mapeamentos de hardware, no diretório /proc é montado o sistema de arquivos virtual proc que possui informações sobre o sistema operacional, seus serviços e processos. As informações mais importantes são: Arquivos /proc/sys/* /proc/net/* /proc/filesystems /proc/swaps /proc/stat /proc/slabinfo /proc/pid/* /proc/self/* /proc/partitions /proc/config.gz /proc/version /proc/cmdline Informações Parâmetros do kernel e serviços Parâmetros de rede Sistemas de arquivos suportados pelo kernel Áreas de swap em uso Estatísticas do kernel Informações sobre gerenciamento de recursos Informações sobre o processo de PID pid Informações sobre o processo corrente Partições de disco reconhecidas pelo kernel Configuração geral do kernel na compilação Versão do kernel e dados sobre a compilação Argumentos passados no boot Algumas informações em /proc são apenas de leitura. Outras informações podem ser escritas e alteram o comportamento do kernel. Tome muito cuidado ao alterar o valor de algum parâmetro do kernel. O sistema poderá funcionar de forma errática ou mesmo travar ! 28 Hardware e Arquitetura Por exemplo, para obter a informações sobre quais sistemas de arquivos o kernel suporta, com os módulos carregados no momento, utilizamos: hmarx@thor:~> cat /proc/filesystems nodev rootfs nodev bdev nodev proc nodev sockfs nodev tmpfs nodev shm nodev pipefs ext2 minix iso9660 nodev nfs nodev devpts vfat hmarx@thor:~> o Para saber as informações sobre o próprio processo cat durante sua execução, utilizamos: hmarx@thor:~> cat /proc/self/status Name: cat State: R (running) Tgid: 9267 Pid: 9267 PPid: 7779 TracerPid: 0 Uid: 3001 3001 3001 3001 Gid: 3000 3000 3000 3000 FDSize: 256 Groups: 3000 6 14 16 VmSize: 1544 kB VmLck: 0 kB VmRSS: 520 kB VmData: 36 kB VmStk: 24 kB VmExe: 12 kB VmLib: 1224 kB SigPnd: 0000000000000000 SigBlk: 0000000080000000 SigIgn: 8000000000000000 SigCgt: 0000000000000000 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 hmarx@thor:~> o Hardware e Arquitetura 29 Dispositivos Os dispositivos do computador, tais como memória, portas paralelas, portas seriais, discos IDE, discos SCSI, CD-ROMs, câmeras, pen drives, interfaces de vídeo, mouse, entre outros, são representados por arquivos especiais, normalmente localizados no diretório /dev. Estes arquivos são basicamente de dois tipos: • b - bloco Indica que as transferências de dados são em blocos (como os setores de um disco) • c - caracter Indica que podem ser feitas transferências byte a byte (como as impressoras) A eles são designados dois números: major e minor. O major number indica a classe do dispositivo (porta paralela, porta serial, disco IDE, ...) e o minor number indica o índice do dispositivo (primeira porta, segundo disco, ...) hmarx@thor:~/arqs > ls brw-rw-rw1 root crw-rw-rw1 root crw-rw-rw1 uucp hmarx@thor:~/arqs > o -l /dev/lp0 /dev/ttyS1 /dev/hda disk 3, 0 Feb 04 19:50 /dev/hda lp 6, 0 Feb 04 09:50 /dev/lp0 uucp 5, 65 Mar 22 18:45 /dev/ttyS1 No diretório /dev podem existir também links para outros arquivos no diretório /dev ou para diretórios virtuais em /proc, como ocorre com o diretório /dev/snd que possui dispositivos diferentes para cada modelo de placa de som. 30 Hardware e Arquitetura Dispositivos Especiais Há diversos dispositivos especiais que mapeiam estruturas de dados ou processos do kernel. Entre eles estão o socket, representado pelo tipo s e o pipe, representado pelo tipo p. hmarx@thor:~/arqs > ls -l /dev/xconsole /dev/log srw-rw-rw1 root root 0 Oct 25 01:44 pr-------1 hmarx tty 0 Oct 28 17:50 hmarx@thor:~/arqs > o /dev/log /dev/xconsole Dispositivos Padrão Os dispositivos de armazenamento (tipo bloco), como disquetes, discos e CD-ROMs (que possuem arquivos e diretórios), devem ser montados para que possam ser utilizados pelos aplicativos típicos do Linux. Dispositivos com sistemas de arquivos FAT ou VFAT (formatados para DOS e Windows) podem ser utilizados, sem a necessidade da montagem, através dos utilitários mtools. Na console (vídeo e teclado do computador), são criados 12 terminais texto virtuais acessíveis através das teclas ¥+¬ a ¥+·. Normalmente, o terminal virtual 7 (/dev/tty7) é desabilitado, dando lugar ao terminal gráfico do sistema X Window. Os terminais 8 a 12 não estão habilitados por default. O terminal 10 (/dev/tty10) é utilizado normalmente para a saída de logs do sistema. Para comutar para um terminal texto virtual estando em uma sessão gráfica no X Window, utiliza-se as combinacões ¦+¥+¬ a ¦+¥+·. Sessões gráficas adicionais irão utilizar os terminais a partir do terminal virtual 8. Hardware e Arquitetura 31 Exemplos de dispositivos mais comuns : Tipo Discos IDE em kernels antigos Discos (SCSI, USB, IDE ou SATA) Partições nos discos Portas seriais (COM1, COM2, ...) Portas paralelas (LPT1, LPT2, ...) Terminais texto virtuais Disquetes (A:, B:, ...) XTerms ou terminais virtuais e remotos Arquivos em /dev /dev/hda, /dev/hdb, /dev/hdc, ... /dev/sda, /dev/sdb, /dev/sdc, .... /dev/hda1, /dev/sdc2, ... /dev/ttyS0, /dev/ttyS1. ... /dev/lp0, /dev/lp1, ... /dev/tty1, /dev/tty2, ... /dev/fd0, /dev/fd1, ... /dev/pts/0, /dev/pts/1, ... O comando lsdev pode ser utilizado para ver as informações sobre o hardware instalado: hmarx@thor:~ > lsdev Device DMA IRQ I/O Ports -----------------------------------------------acpi 9 cascade 4 2 dma 0080-008f dma1 0000-001f dma2 00c0-00df eepro100 1440-147f ES1938 5 ESS 1400-1407 14b0-14bf 14dc-14df eth0 11 fpu 00f0-00ff i82365 11 ide0 14 01f0-01f7 03f6-03f6 ide1 15 0170-0177 0376-0376 keyboard 1 0060-006f parport0 0378-037a 037b-037f PCI 0cf8-0cff 1000-10ff 1480-149f 14a0-14af 14b0-14bf 14c0-14cf 14d0-14d7 2180-219f 8000-803f 9000-9fff 9000-90ff pic1 0020-003f pic2 00a0-00bf PS/2 Mouse 12 rtc 8 0070-007f serial 03f8-03ff timer 0 0040-005f vesafb 03c0-03df usb-uhci 11 1480-149f hmarx@thor:~ > o 14c0-14cf 14d8-14db 14a0-14a7 14a8-14af 1400-143f 1440-147f 14d8-14db 14dc-14df 32 Hardware e Arquitetura O comando lsusb pode ser utilizado para ver as informações sobre o barramento USB e dispositivos conectados instalado: hmarx@thor:~ > Bus 002 Device Bus 002 Device Bus 001 Device Bus 001 Device hmarx@thor:~ > lsusb 002: ID 001: ID 002: ID 001: ID o 05e3:070e Genesys Logic, Inc. 0000:0000 05a9:a511 OmniVision Technologies, Inc. OV511+ WebCam 0000:0000 Veja mais detalhes destes comandos no capítulo 4, Utilizando o Linux. Iniciando o Linux 33 3. Iniciando o Linux Do boot ao Login Ao ser ligado (ou reiniciado) um computador do tipo PC, o primeiro programa a ser executado é o BIOS (Basic Input Output System) , localizado em uma memória ROM ou Flash. Daí o nome ROM BIOS ou Flash BIOS. Este programa realiza o teste do hardware (Power On Self Test, ou simplesmente POST). São verificados o processador, memória, dispositivos básicos de E/S e armazenamento. A seguir, ele carrega o primeiro setor do dispositivo de boot (normalmente disquete, CD ou disco rígido). Este setor, denominado master boot record (MBR), contém um pequeno programa (ou parte inicial dele) cujo objetivo é carregar o sistema operacional. Alguns setores de boot contém programas que permitem a seleção do sistema operacional a ser carregado. Na realidade, ele irá carregar o setor de boot da partição do sistema operacional escolhido. Para o Linux existe o LILO (LInux LOader), o GRUB (GRand Unified Bootloader), e outros. O openSuSE Linux utiliza como padrão o LILO nas versões até 7.3, e o GRUB a partir da versão 8.x.. No caso de um sistema Unix-like, como o Linux, o setor de boot carrega o kernel, que é responsável por inicializar o hardware e executar o processo inicial do sistema operacional, o init, e controlar todo o ambiente operacional do computador. O processo init recebe o process ID (PID) 1. Então, através das definições no arquivo /etc/inittab, ele irá disparar os outros processos. O Linux, como todo Unix, possui diferentes níveis de execução, chamados de runlevels. O runlevel é identificado por um caracter, que pode ser de 0 a 6, A, B, C, I ou S. O nível inicial é o definido pela linha initdefault do arquivo /etc/inittab. 34 Iniciando o Linux No arquivo /etc/inittab há entradas no seguinte formato: id:runlevels:ação:processo O id é uma sequência única de 1 a 4 caracteres que identifica a entrada no arquivo /etc/inittab, runlevels é a lista de níveis de execução para o qual a ação é tomada, e processo é o processo a ser executado. Tabela de ações utilizadas no initttab Ação respawn wait once boot bootwait off ondemand initdefault sysinit powerwait powerfail powerokwait powerfailnow resume ctrlaltdel kbrequest Significado O processo será redisparado se terminar. O init esperará o processo terminar. O processo será executado na entrada do runlevel. O processo será executado durante o boot. O init esperará, no boot, o processo terminar. Não será executado. O processo será executado sob demanda sem alterar o runlevel. Runlevel inicial após o boot. O processo será executado antes dos processos de boot. O processo será executado quando há queda de energia. O init irá esperar o processo terminar. O processo será executado quando há queda de energia. O init não irá esperar o processo terminar. O processo será executado quando do retorno da energia. O processo será executado quando a bateria de uma UPS estiver quase descarregada. O processo será executado quando o kernel informar ao init que a máquina foi restaurada de um Suspend por software. O processo será executado quando forem pressionadas juntas as teclas ¦+¥+Â. O processo será executado quando for pressionada a sequência definida no keymap como KeyboardSignal. O default é ¥+È. Iniciando o Linux 35 Níveis de execução padrão runlevel 0 1 2 3 4 5 6 A B C I S Significado Pára o sistema (halt) Modo monousuário (single) Multiusuário sem rede Multiusuário com rede - não utilizado Multiusuário, com rede e interface gráfica Reinicializa o sistema (reboot) \ > Sob demanda / Inicialização Modo supervisor - single (usado por scripts) Por exemplo, considerando a linha: id:5:initdefault: o init irá executar o definido pela linha do nível 5: l5:5:wait:/etc/init.d/rc 5 e demais linhas que contiverem 5 na segunda coluna, como: 1:2345:respawn:/sbin/mingetty --noclear tty1 que habilita o terminal 1 (/dev/tty1) , ativando um processo para login. 36 Iniciando o Linux O script /etc/init.d/rc é utilizado sempre que o nível de execução é alterado. Para iniciar os serviços do runlevel 5, irá executar os scripts Sxx* existentes no diretório /etc/init.d/rc5.d. Na mudança de um runlevel i para o j, ele irá executar os scripts Kxx* do diretório /etc/init.d/rci.d para os serviços que estão em execução no nível i e não serão executados no nível j, e os scripts Sxx* do diretório /etc/init.d/rcj.d para os serviços que não estão em execução no nível i e que deverão ser executados no nível j. Essencialmente, estes scripts são na realidade links para os arquivos em /etc/init.d. O rc passará o argumento start para os scripts Sxx* e stop para os scripts Kxx*. O número xx irá definir a ordem de execução dos scripts. Assim, por exemplo, o serviço httpd em um servidor WEB, é disparado pelo script /etc/init.d/apache. No diretório /etc/init.d/rc3.d estarão, por exemplo, os links simbólicos K03apache e S21apache para o script ../apache. O super usuário poderá mudar o nível de execução do sistema utilizando o programa init, passando o novo runlevel. O programa init (PID 1) em execução será sinalizado para que seja feita a mudança de runlevel. thor:~# init 5 Quando é feita uma alteração no arquivo /etc/initab, para a inserção, remoção ou alteração de um serviço, o programa init deverá ser também informado, utilizando init Q. O init também reage a alguns sinais: Sinal SIGHUP SIGUSR1 SIGINT SIGWINCH Ação Muda o runlevel para o contido no arquivo /etc/initrunlvl ou /var/log/initrunlvl Fecha e reabre o /dev/initctrl (útil em scripts de inicialização que remontam o /dev) Ativa a ação ctrlaltdel (também quando pressionadas as teclas ¦+¥+Â) Ativa a ação kbrequest Iniciando o Linux 37 Processos disparados pelo init Alguns dos processos disparados pelo init serão responsáveis pelo tratamento dos "terminais", através dos quais os usuários irão interagir com o sistema operacional. Classicamente, os processos que irão tratar esses terminais são chamados de getty. Cada "terminal", real ou virtual, terá um processo getty associado. Dependendo da forma da interface com o usuário, o getty irá executar o processo de login, disparando a seguir o chamado login shell. No Linux, existem diversos tipos de getty. O mais simples é utilizado nos terminais virtuais acessíveis via ¥+¬ a ¥+·. Os terminais ativos são definidos no /etc/inittab. Este getty irá mostrar uma tela de login, identificando o sistema e o terminal. Quando o usuário começa a digitar seu username, o processo login entra em ação. Após a identificação do usuário, o login irá executar o login shell, normalmente o /bin/bash. O shell irá então exibir algumas mensagens e o prompt, indicando ao usuário que ele está pronto para receber comandos. Quando se instala a interface gráfica X Window, o processo de login é semelhante. Ele é chamado genericamente de XDM (X Desktop Manager). No KDE ele é o KDM. Após a identificação do usuário (username/password), o login shell será o gerenciador de janelas escolhido (KDE, fvwm2, gnome, ...). O KDE não é apenas um gerenciador de janelas. Ele é um ambiente de trabalho completo (K Desktop Environment), com muitas características semelhantes às encontradas no Microsoft Windows e no MacOS. 38 Iniciando o Linux Sessões Para utilizar os recursos do Linux, um usuário precisa abrir uma sessão. Para isto, ele deve se identificar através de um código (username) e de uma senha (password). A cada usuário estão associados dois números: o user id, UID e o group id, GID. Estes dois números, gerados ou assinalados na criação do usuário, serão utilizados pelo Linux para verificar as permissões de acesso deste usuário. Um usuário pode pertencer a diversos grupos, sendo que um deles é o primário. Há um usuário especial, o super usuário, chamado root, que possui privilégios especiais. Um sistema Unix-like como o Linux possui um esquema de segurança que permite a um usuário normal utilizá-lo sem medo. Não há riscos de danificar o sistema apagando arquivos essenciais. Ao contrário, nenhuma verificação é feita se o usuário é o root. Assim, procure utilizar sempre um usuário normal para suas tarefas. Apenas utilize o usuário root quando precisar instalar, configurar ou administrar o sistema. Um usuário pode iniciar uma sessão em modo texto, em um terminal ou console virtual (local ou remoto), ou ainda uma sessão em modo gráfico utilizando a interface X Window (veja o capítulo 6). Iniciando o Linux 39 No modo texto, um início de sessão típico é: Welcome to SuSE Linux 9.3 (i586) - Kernel 2.6.11.4-21.14-smp (tty3). thor login: hmarx Password: Last login: Wed Oct 11 17:31:50 from thor.starix.br Have a lot of fun... We’re deep into the holiday gift-giving season, as you can tell from the fact that everywhere you look, you see jolly old St. Nick urging you to purchase things, to the point where you want to slug him right in his bowl full of jelly. -- Dave Barry, "Simple, Homespun Gifts" hmarx@thor:~ > o O kdm (KDE Desktop Manager) irá exibir uma tela de login mais agradável. Note que, por default, a senha não é ecoada. O administrador poderá configurar o KDM para ecoar 1 ou 3 caracteres. 40 Iniciando o Linux Encerrando a sessão Um usuário deve sempre fechar a sua sessão após o término de suas atividades. Por motivo de segurança, sempre que ausentar-se ou afastar-se do terminal, ele deve travar ou fechar sua sessão. Em um terminal texto, basta apenas terminar o shell utilizando o comando exit, logout ou simplesmente digitando ¦+D (sequência padrão para fim de arquivo ou EOF - veja o comando stty). Desligando o computador Para desligar o computador, deve ser utilizado o comando shutdown. Assim, o sistema irá terminar todos os processos, fechar os arquivos, garantindo a integridade dos dados nos discos. O shutdown tem a opção de parar (-h) ou reiniciar (-r) o computador. Em computadores com fonte ATX, o Linux desligará automaticamente o computador após parado (atingido o nível de execução 0). Dependendo da configuração, apenas o super usuário poderá realizar o shutdown. Na interface gráfica do KDM, ao selecionar Logout para ecerrar a sua sessão, aparecerá uma janela na qual o usuário deverá, normalmente, informar a senha do root para poder confirmar a operação de Shutdown ou Reboot, para desligar ou reiniciar o computador, respectivamente. Utilizando o Linux 41 4. Utilizando o Linux Interpretador de comandos O interpretador de comandos em modo texto do Linux, como em qualquer sistema Unix-like, é denominado shell. Existem diversos tipos à sua escolha: bash, sh, ksh, csh, tcsh, pdksh, zsh, ash. A sintaxe dos comandos são ligeiramente diferentes, mas a função do shell é a mesma: servir de interface entre o operador e o ambiente operacional. Na interface gráfica pode ser utilizado um terminal virtual (xterm, gnome-terminal, konsole, entre outros) para executar o shell. O shell padrão do Linux é o bash Bourne Again Shell. O shell não é apenas um simples interpretador de comandos: ele é também uma poderosa linguagem de programação. Normalmente, após o login, é disparado o shell definido no /etc/passwd para o usuário. Ele exibe o seu prompt, indicando estar pronto para aceitar comandos. O prompt é diferente para cada shell, e pode ser alterado pelo usuário. Ä Utilizaremos o prompt genérico $ a partir de agora. Textos entre os símbolos [ e ] são opcionais. Textos da forma opção devem ser substituídos pelo valor real. Se for necessário executar o comando como usuário root, utilizaremos o prompt #. Nos exemplos, o prompt será hmarx@thor:path > indicando o usuário hmarx utilizando a máquina thor no diretório corrente path. 42 Utilizando o Linux A sintaxe geral de um comando a ser digitado no prompt de um shell é: $ comando [ opções ] [ argumentos ] O comando pode ser um built-in (comando reconhecido e interpretado pelo shell), um nome de um programa ou de uma função definida. Um mesmo comando pode existir na instalação como um built-in do bash, um programa ou uma função, e podem produzir saídas diferentes. Um exemplo é o comando time e o executável /usr/bin/time. As opções são normalmente da forma -caracter ou --texto. Os argumentos são informações a serem tratadas pelo comando, como nomes de arquivos ou diretórios. Assim, para o comando: $ ls -l --inode /bin /tmp Temos: » comando » opções » argumentos = ls = -l --inode = /bin /tmp A opção --inode é equivalente à opção -i ! Através do comando alias pode ser definido um sinônimo para um comando. Este pode ser removido através do comando unalias. hmarx@thor:~> alias ver=’uname -s -r’ hmarx@thor:~> ver Linux 2.4.10-64GB-SMP hmarx@thor:~> unalias ver hmarx@thor:~> o Digitando apenas alias, serão exibidos os sinônimos definidos. As definições são voláteis. Para criar definições permanentes crie o arquivo ~/.alias com os comandos alias desejados. Utilizando o Linux 43 Metacaracteres Alguns caracteres ou seqüências de caracteres são tratados pelo shell e substituídos antes de serem passados para o <comando>. Alguns exemplos: * ? [ <conjunto> ] [ ! <conjunto> ] qualquer cadeia de caracteres O shell expande conforme os arquivos presentes no diretório qualquer caracter não nulo um caracter do conjunto Exemplo: [a-z] : letras minúsculas [YN] : Y ou N um caracter que não esteja presente no conjunto Exemplo: [!0-9] : não seja um dígito Exemplos: hmarx@thor:~/docs> ls * chap1 chap2 chap3 programA hmarx@thor:~/docs> ls *[1-3] chap1 chap2 chap3 programB1 hmarx@thor:~/docs> ls *[!1-3] programaA hmarx@thor:~/docs> ls *[A-B]? programB1 programB2 hmarx@thor:~/docs> programB1 programB2 o Veja mais detalhes no capítulo Expressões Regulares. programB2 44 Utilizando o Linux O Bash - Bourne-Again Shell O bash é um shell poderoso com sintaxe semelhante à linguagem de programação C. Ele foi baseado no shell original do Unix Bourne shell, ou simplesmente sh. Variáveis Variáveis são definidas a partir de uma atribuição: variável=texto Caso texto contenha caracteres especiais como os metacaracteres ou espaços em branco, você deverá colocá-lo entre aspas (‘"’) ou apóstrofos (‘´’). Ou, ainda, preceder o caracter especial por ´\´. O valor de uma variável pode ser obtido através de $variável. Por convenção, os nomes das variáveis são dados em letras maiúsculas. O bash não irá expandir textos da forma $variável em cadeias utilizando apóstrofos (‘´ ’). hmarx@thor:~/arqs> PESSOA=Helio hmarx@thor:~/arqs> EMPRESA="Starix Informatica" hmarx@thor:~/arqs> echo $PESSOA da $EMPRESA Helio da Starix Informatica hmarx@thor:~/arqs> echo "$PESSOA" Helio hmarx@thor:~/arqs> echo ’$PESSOA’ $PESSOA hmarx@thor:~/arqs> o Utilizando o Linux 45 Variáveis padrão O bash possui algumas variáveis pré-definidas e que podem ser redefinidas pelo usuário. Exemplos: PATH PS1 PS2 PS3 HOSTNAME HOME USER TERM LANG CDPATH IFS caminho default para procura de executáveis prompt primário prompt de continuação, indica que o comando anterior precisa de complemento prompt do comando select nome do computador diretório pessoal do usuário, ou home directory username ou login do usuário modelo do terminal do usuário (linux, xterm, ansi, ...) língua para mensagens e determinação de formatos de data e números caminho para procura utilizado pelo comando cd caracter separador de argumentos para $* O bash possui ainda variáveis que não podem ser redefinidas pelo usuário, como: ? ! 0 1 .. 9 @ * # $ status do último comando executado, em decimal PID do último comando executado em background primeira palavra da linha de comando (o comando) opções e argumentos da linha de comando todas as opções e argumentos da linha de comando todos as opções e argumentos separados por $IFS número de argumentos PID do shell 46 Utilizando o Linux O comando env pode ser utilizado para exibir as variáveis do ambiente. O comando set pode ser utilizado para alterar opções do shell ou visualizar as variáveis e funções definidas. Este comando possui diversas opções que alteram o comportamento do shell. O comando unset serve para remover a definição de uma variável ou função. Variáveis podem ser exportadas para sub-shells através do comando export. Utilizando somente export ou export -p você pode visualizar as variáveis exportadas. Uma variável pode ser definida no escopo da execução de um programa. hmarx@thor:~> date Fri Sep 23 20:39:37 BRT 2005 hmarx@thor:~> LANG=pt_BR date Sex Set 23 20:39:39 BRT 2005 hmarx@thor:~> date Fri Sep 23 20:39:42 BRT 2005 marx@thor:~> o Utilizando o Linux 47 Expansão de parâmetros O sinal $ introduz a expansão de parâmetros, a substituição de comandos e a expansão aritmética do bash. O parâmetro pode estar entre chaves { } evitando que caracteres especiais sejam tratados como nomes de variáveis. O valor retornado é normalmente o valor do parâmetro. Utilizando operadores extras podemos ainda aumentar o poder desta expansão, como visto abaixo: Formato ${parâmetro} ${parâmetro:-palavra} ${parâmetro:=valor} ${parâmetro:?erro} ${parâmetro:+palavra} ${parâmetro:offset} ${parâmetro:offset:tamanho} ${#parâmetro} ${parâmetro#padrão} ${parâmetro##padrão} ${parâmetro%valor} ${parâmetro%%valor} Valor retornado valor do parâmetro palavra se parâmetro nulo se parâmetro nulo atribui valor ao parâmetro Exibe erro se parâmetro for nulo palavra se o parâmetro não for nulo substring do parâmetro começando em offset substring de tamanho caracteres do parâmetro começando em offset número de caracteres do parâmetro remove o menor texto, que bate com o padrão, do início do valor do parâmetro remove o maior texto, que bate com o padrão, do início do valor do parâmetro remove o menor texto, que bate com o padrão, do fim do valor do parâmetro remove o maior texto, que bate com o padrão, do fim do valor do parâmetro 48 Utilizando o Linux Operadores extras (cont.) Formato ${parâmetro/padrão/texto} ${parâmetro//padrão/texto} ${!parâmetro} Valor retornado substitui a primeira ocorrência do padrão no valor do parâmetro por texto substitui todas as ocorrências de padrão no valor do parâmetro por texto indireção : valor do valor do parâmetro Exemplos: hmarx@thor:~> unset A hmarx@thor:~> echo ${A:-texto} texto hmarx@thor:~> echo ${A:?Variável não definida} bash: A: Variável não definida hmarx@thor:~> A="Um texto muito longo" hmarx@thor:~> echo ${#A} 20 hmarx@thor:~> echo ${A:3:11} texto muito hmarx@thor:~> echo ${A/muito/quase} Um texto quase longo hmarx@thor:~> A=/x/y/z/w/x hmarx@thor:~> echo ${A%/x} /x/y/z/w hmarx@thor:~> echo ${A#/x} /y/z/w/x hmarx@thor:~> A=B hmarx@thor:~> B=1234 hmarx@thor:~> echo $A B hmarx@thor:~> echo ${!A} 1234 hmarx@thor:~> o Utilizando o Linux 49 Comandos básicos Ao ser digitado um comando, o bash irá verificar se ele é um comando intrínseco, uma função definida ou um programa executável (script ou compilado) que esteja em algum diretório especificado na variável PATH. Os diretórios são separados por ":". A procura no PATH é feita da esquerda para a direita. Para tornar a procura eficiente, obash utiliza uma tabela hash para guardar o caminho dos programas executados. Veja os comandos hash e rehash. Mostraremos a seguir os principais comandos do Linux. A maioria deles possui muitas opções. Serão dadas algumas das opções mais utilizadas. Para os comandos do bash, a sintaxe geral pode ser vista através de $ help [ comando ] hmarx@thor:~> help case case: case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac Selectively execute COMMANDS based upon WORD matching PATTERN.The ‘|’ is used to separate multiple patterns. hmarx@thor:~> o A maioria dos comandos externos aceita ainda a opção --help, que mostra um sumário da sintaxe e opções. Para uma explicação mais detalhada, utilize o man: $ man [ opções ] [ seção ] comando Para se obter uma lista das seções dos manuais que se referem a um comando, utilize o man com a opção -k (ou apenas o comando apropos): $ man -k comando hmarx@thor:~> man -k gzip gzip (1) - compress or expand files zforce (1) - force a ’.gz’ extension on all gzip files MIME::Decoder::Gzip64 (3pm) - decode a "base64" gzip stream hmarx@thor:~> o 50 Utilizando o Linux Além da opção -k, outras opções interessantes do man são: -h, --help -a, --all -w, --where -T disp -V, --version Exibe a ajuda das opções Exibe todas as páginas referentes ao comando Exibe o diretório do arquivo do manual do comando Utiliza o groff para formatar as páginas para o dispositivo disp. Exibe a versão do man. Outra forma de obter auxílio é através do comando info que permite caminhar por páginas de menus referentes ao comando escolhido. $ info [ opções ] comando hash [ opções ] [ comando ] ... Exibe ou atualiza a tabela hash que contém o caminho dos comandos. Algumas opções: -l Exibe a tabela hash -d Esquece o caminho dos comandos -t Exibe a tabela com o número de utilizações -r Limpa a tabela hash rehash Limpa a tabela hash do bash forçando assim a procura dos executáveis no PATH. Utilizando o Linux 51 pwd Mostra o diretório corrente. hmarx@thor:~> pwd /home/hmarx hmarx@thor:~> o echo [ -n ] texto Imprime a linha de texto, opcionalmente (-n) sem mudar de linha. hmarx@thor:~> echo $MACHINE i686 hmarx@thor:~> o read [ opções ] [ variável ...] Lê uma linha da entrada padrão, atribuindo cada palavra às variáveis dadas. As palavras restantes são atribuidas à última variável dada. O separador entre as palavras é, por default, o valor da variável IFS. Se nenhuma variável for dadas, é utilizada a variável REPLY. Algumas opções: -t timeout em segundos -p prompt Exibe o prompt antes de ler -d delimitador Lê até encontrar o primeiro caracter de delimitador -s Não ecoa Número de caracteres a ler -n número de caracteres hmarx@thor:~> echo -n "Qual é o seu nome ? " ; read NAME Qual o seu nome ? Hélio hmarx@thor:~ > echo Seu nome é $NAME. Seu nome é Hélio. hmarx@thor:~> o 52 Utilizando o Linux source arquivo . arquivo Lê e executa os comandos do arquivos arquivo. Este comando é muito utilizado nos scripts de inicialização dos serviços do Linux para ler os parâmetros de configuração definidos em varíáveis do bash. Por exemplo, no script /sbin/SuSEfirewall2 encontramos: test -e /etc/sysconfig/network/config && . /etc/sysconfig/network/config que processa o arquivo /etc/sysconfig/network/config caso ele exista. Utilizando o Linux 53 ls [ opções ] ... [ arquivos | diretórios ] Lista o conteúdo dos diretórios ou atributos dos arquivos e diretórios. Algumas opções: -l Formato longo -i, --inode Exibe o número do inodo -s, --size Exibe o tamanho do arquivo -a, --all Exibe arquivos "ocultos" (iniciados por .) -A, --almost-all Exibe arquivos "ocultos", exceto o . e o .. -d, --directory Exibe informações sobre o diretório e não sobre seu conteúdo -R, --recursive Recursivo -F, --classify Mostra *, /, =, * ou | conforme o tipo do arquivo -c Ordena e mostra pela data de modificação -x Exibe entradas por linhas -C Exibe entradas por colunas -1 Exibe entradas em 1 coluna -q Exibe ? no lugar de caracteres de controle -Q Lista os nomes entre aspas (") --si Lista tamanhos em potência de 1000 --full-time Exibe data/hora no formato completo -h, --human-readable Lista tamanhos em potência de 1024 Na listagem longa é exibido um caracter representando o tipo do inodo antes dos caracteres rwx das permissões: Tipo do inodo diretório arquivo normal dispositivo bloco dispositivo caracter pipe ou FIFO symbolic link socket caracter d b c p l s 54 Utilizando o Linux Exemplos: hmarx@thor:/usr/src> ls -l total 4 drwxr-xr-x 10 root root 1024 Mar 14 18:51 epca lrwxrwxrwx 1 root root 17 Nov 8 06:46 linux -> linux-2.4.19.SuSE drwxr-xr-x 15 root root 4096 Jan 26 14:30 linux-2.4.19.SuSE drwxr-x--7 root root 1024 Dec 22 2001 packages hmarx@thor:/usr/src> ls -la total 6 drwxr-xr-x 5 root roor 1024 Sep 22 2001 . drwxr-xr-x 31 root root 1024 Jul 25 11:02 .. drwxr-xr-x 10 root root 1024 Mar 14 18:51 epca lrwxrwxrwx 1 root root 17 Nov 8 06:46 linux -> linux-2.4.19.SuSE drwxr-xr-x 15 root root 4096 Jan 26 14:30 linux-2.4.19.SuSE drwxr-x--7 root root 1024 Dec 22 2001 packages hmarx@thor:/usr/src> ls -F epca/ linux@ linux-2.4.19.SuSE/ packages/ hmarx@thor:/usr/src> ls -QF "epca"/ "linux"@ "linux-2.4.19.SuSE"/ "packages"/ hmarx@thor:/usr/src> ls --full-time -d drwxr-xr-x 7 root root 1024 2001-12-22 09:33:07.000000000 -0300 packages/ hmarx@thor:/usr/src> o Utilizando o Linux 55 mkdir [ opções ] diretório [ diretório ] ... Cria diretórios. Algumas opções: -p, --parents -v, --verbose -m, --mode=modo Cria todos os diretórios do path Exibe cada diretório criado Permissão como em chmod hmarx@thor:~/test> ls -l total 0 hmarx@thor:~/test> mkdir sub1 hmarx@thor:~/test> ls -l total 1 drwxr-xr-x 2 hmarx starix 1024 Mar 26 23:54 sub1 hmarx@thor:~/test> mkdir -p X/Y/Z hmarx@thor:~/test> ls -R .: X sub1 ./X: Y ./X/Y: Z ./X/Y/Z: ./sub1: hmarx@thor:~/test> o rmdir [ opções ] diretório ... Remove diretórios. Algumas opções: -v, --verbose -p, --parents Imprime mensagem a cada diretório Remove todo o path. No SuSE Linux são definidos os apelidos: alias md=’mkdir -p’ alias rd=’rmdir’ para simplificar a migração de ambientes MS-DOS/Windows para Linux. 56 Utilizando o Linux cd [ diretório ] Muda para o diretório especificado, ou para o home directory caso diretório não seja fornecido. Pode-se utilizar o diretório - para voltar ao diretório anterior. hmarx@thor:~/test> pwd /home/hmarx/test hmarx@thor:~/test> cd sub1 hmarx@thor:~/test/sub1> pwd /home/hmarx/test/sub1 hmarx@thor:~/test/sub1> cd /home/hmarx/test hmarx@thor:~/test> cd hmarx@thor:~> pwd /home/hmarx hmarx@thor:~> o O bash possui diversos comandos para facilitar o caminhamento pelos diretórios do Linux. Os mais comuns são: pushd [ -n ] [ diretório | +n |-n ] Muda para o diretório salvando o anterior em uma pilha (variável DIRSTACK) Algumas opções: -n Não muda de diretório, apenas manipula a pilha em DIRSTACK Utiliza o n-ésimo diretório da contado a +n partir da esquerda na lista mostrada pelo comando dirs -n Utiliza o n-ésimo diretório da contado a partir da direita na lista mostrada pelo comando dirs Utilizando o Linux 57 popd [ -n ] [ +n | -n ] Remove o n-ésimodiretório da pilha em DIRSTACK. Algumas opções: -n Não muda de diretório, apenas manipula a pilha em DIRSTACK Utiliza o n-ésimo diretório da contado a +n partir da esquerda na lista mostrada pelo comando dirs -n Utiliza o n-ésimo diretório da contado a partir da direita na lista mostrada pelo comando dirs dirs [ -clp ] [ +n | -n ] Algumas opções: -c -l -p -v +n -n Limpa a pilha Imprime a lista no formato longo (não usa o caracter ~ para o diretório pessoal). Imprime um diretório por linha Imprime um diretório por linha prefixado pelo índice posicional Imprime o n-ésimo diretório da contado a partir da esquerda na lista mostrada pelo comando dirs utilizado sem argumentos Imprime o n-ésimo diretório da contado a partir da direita na lista mostrada pelo comando dirs utilizado sem argumentos 58 Utilizando o Linux cp [ opções ] fonte ... destino Copia arquivo(s) fonte para o destino. Múltiplos arquivos podem ser copiados para um diretório destino. Algumas opções: -v, --verbose Exibe mensagens durante a cópia -p Preserva os atributos do arquivo -R, --recursive Copia diretórios recursivamente -d, --no-dereference Não segue links simbólicos -f, --force Força a cópia -P, --parents Concatena diretório de origem ao destino -s, --symbolic-link Cria links simbólicos -i, -- interactive Pergunta antes de sobrescrever arquivos -x, --one-file-system Permanece no sistema de arquivos origem -l, --link Cria hard links hmarx@thor:~/test> ls -l total 1 drwxr-xr-x 2 hmarx starix 1024 Mar 26 23:54 sub1 hmarx@thor:~/test> cp /etc/passwd . hmarx@thor:~/test> ls -l total 1 -rw-r--r-1 hmarx starix 4094 Mar 27 00:00 passwd drwxr-xr-x 2 hmarx starix 1024 Mar 26 23:54 sub1 hmarx@thor:~/test> o Tome cuidado com os meta-caracteres e com as expressões regulares. Você poderá sobrescrever arquivos não intencionalmente. Utilizando o Linux 59 cat [ opções ] [ arquivo ] ... Concatena o(s) arquivo(s) ou a entrada padrão para a saída padrão. Algumas opções: -A, --show-all Equivalente a -vET -n, --number Numera as linhas -v, --show-nonprinting Exibe caracteres especiais usando ^ e M(exceto para CR/LF e TAB) -E, --show-ends Mostra $ no fim das linhas -T, --show-tabs Mostra TABs como ^I hmarx@thor:~/test> cat -TE Texto$ ^IApós um tab$ Após brancos$ $ hmarx@thor:~/test> o tee [ opções ] ... [ arquivos ] ... Copia a entrada padrão para a saída padrão e para o(s) arquivo(s). Algumas opções: -a, --append Adiciona ao fim do(s) arquivo(s) -i, --ignore-interrupts Ignora sinais de interrupção head [ opções ] [ arquivos ] ... Exibe as primeiras 10 linhas (ou o número especificado) do(s) arquivo(s). Algumas opções: -n n, ---lines=n Exibe as primeiras n linhas -c n, --bytes=n Exibe os primeiros n bytes -v, --verbose Exibe cabeçalhos com os nomes dos arquivos 60 Utilizando o Linux tail [ opções ] [ arquivos ] ... Exibe as últimas10 linhas (ou o número especificado) do(s) arquivo(s). Algumas opções: Exibe as últimas n linhas -n n, ---lines=n -f, --follow Exibe continuamente o(s) arquivo(s) crescentes -c s, --bytes=n Exibe os últimos n bytes -v, --verbose Exibe cabeçalhos com os nomes dos arquivos Este comando é muito utilizado para acompanhar mensagens de log (utilizando a opção -f). od [ opções ] [ arquivos ] ... Exibe o(s) arquivo(s) em octal e/ou outros formatos Algumas opções: -A, --address-radix=r Muda a base dos offsets do(s) arquivo(s) para r -t t, --format=t Usa formato t -N n, --read-bytes=n Exibe apenas n bytes de cada arquivo -j n, --skip-bytes=n Salta n bytes de cada arquivo Formatos: -a, -t a -b, -t oC -c, -t c -d, -t u2 -f, -t fF -h, -t x2 -i, -t d2 -l, -t d4 -o, -t o2 -x, -t x2 -t x4 -t f4 -t f8 char octal ASCII ou escaped chars unsigned short em decimal float unsigned short em hexadecimal short em decimal long em decimal short em octal short em hexadecimal long em hexadecimal float de 4 bytes float de 8 bytes Utilizando o Linux 61 patch [ opções ] [ arquivo original [ patchfile ] ] patch -pn < pathfile Aplica alterações em um arquivo. Algumas opções: -b, --backup Cria backups --binary Lê arquivos em modo binário -e, --ed Usa o pathfile como script ed -l, --ignore-whitespace Ignora espaços -pn, --strip=n Elimina prefixo contendo n barras wc [ opções ] [ arquivos ] ... Conta linhas, palavras e caracteres dos arquivos ou a entrada padrão. Algumas opções: -l, --lines Exibe número de linhas -w, --words Exibe número de palavras -c, --bytes Exibe número de bytes -m, --chars Exibe número de caracteres -L, --max-line-length Exibe tamanho da maior linha hmarx@thor:~> ps aux | wc 120 1509 11862 hmarx@thor:~> o 62 Utilizando o Linux strings [ opções ] [ arquivo ] ... Imprime as cadeias de caracteres existentes no(s) arquivo(s). Algumas opções: -a, --all Percorre todo o arquivo -f, --print-file-name Imprime o nome do arquivo Considera cadeias de no mínimo m -m, -nm, --bytes=m caracteres (o default é 4) Imprime o offset na base definida por r -t r, --radix=r (d: decimal, o: octal, x: hexadecimal) antes das cadeias de caracteres encontradas tr [ opções ] conjunto1 [ conjunto2 ] Traduz, comprime ou exclui caracteres da entrada padrão. Algumas opções: -c, --complement Complementa primeiro o conjunto1 -d, --delete Não traduz. Remove os caracteres do conjunto1 -s, --squeeze-repeats Substitui caracteres repetidos por um único -t, --truncate-set1 Trunca o conjunto1 para o tamanho do conjunto2 hmarx@thor:~> echo "Um texto com Um texto com brancos excessivos hmarx@thor:~> o brancos excessivos" | tr -s " " Utilizando o Linux 63 Os conjuntos são cadeias de caracteres como: \NNN \\ \a \b \r \n \t \v c1-c2 [c*] [c*n] [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] o [:punct:] [:space:] [:upper:] [:xdigit:] [=c=] Caracter com código octal NNN Barra invertida beep backspace CR LF tabulação horizontal tabulação vertical Todos os caracteres de c1 até c2 No conjunto1, repete o caracter c até o tamanho do conjunto2 Repete n vezes o caracter c Todas as letras e dígitos Todas as letras Todos os espaços horizontais em branco Todos os caracteres de controle Todos os dígitos Todos os caracteres imprimíveis, exceto o espaço em branco Todas as letras minúsculas Todos os caracteres imprimíveis, incluindo espaço em branco Todos os caracteres de pontuação Todos os espaços horizontais e verticais Todas as letras maiúsculas Todos os dígitos hexadecimais Todos os caracteres equivalentes a c O comando hmarx@thor:~> tr "[A-Z]" "[a-z]" < arq.orig > arq.novo passará todo o texto do arq.orig para minúsculas gerando arq.novo. 64 Utilizando o Linux grep [ opções ] padrão [ arquivo ] ... Imprime linhas do(s) arquivo(s) que contêm (ou não) o padrão. O padrão é uma expressão regular. Para mais detalhes veja o capítulo "Expressões Regulares". Algumas opções: -i, --ignore-case Ignora maiúsculas/minúsculas -l, --files-with-match Imprime apenas nomes de arquivos -n, --line-number Numera as linhas encontradas -r, --recursive Procura recursiva em diretórios -v, --invert-match Mostra as linhas que não contêm o padrão -c, --count Imprime o número de linhas Usa re como expressão regular -e re, --regexp=re Por exemplo, o comando hmarx@thor:~> grep -v "^[ ^I]*$" arquivo.txt mostrará as linhas que não estejam em branco ou que não estejam vazias do arquivo arquivo.txt. Utilizando o Linux 65 sed [ opções ] [ arquivo ] ... O sed é um Stream Editor. Ele é utilizado para transformar textos em um arquivo ou em um pipeline. Algumas opções: -q, --quiet, --silent Só imprime se explicitamente especificado (comando p) -e s, --expression=s Utiliza o script s para processar a entrada Usa os comandos contidos no arquivo de -f sf, --file=sf nome sf para processar a entrada Alguns comandos do sed : label #comentário { } a i d q b label t label D h H g G x s/regexp/substituto/ y/origem/destino/ w arquivo Label para comandos b e t Comentários Início de bloco Fim de bloco Append - adiciona texto no final Insert - insere texto Delete - apaga o padrão Quit - abandona imediatamente Branch - salta para label Salta para label em caso de uma substituição com sucesso Apaga até o fim da linha Hold - copia o padrão p/ o buffer Adiciona o padrão ao buffer Copia o buffer para o padrão Adiciona o buffer ao padrão Troca os conteúdos do buffer c/ o padrão Substitui a expressão regexp pelo substituto Traduz os caracteres de origem para os correspondentes em destino Escreve o padrão no arquivo de nome arquivo 66 Utilizando o Linux Os comandos do sed podem ser dados para uma determinada faixa de endereços. Caso não seja dada nenhuma faixa, os comandos serão executados para todas as linhas da entrada. A faixa de endereços é da forma endereço1[, endereço2]. Cada endereço pode ser: $ n linha~passo Última linha do texto Especifica a linha de número n Linha inicial e passo. Assim, 1~2 indica todas as linhas ímpares Linha que contém um padrão para a expressão regular regexp /regexp/ Abaixo um exemplo para trocar duas colunas e ainda incluir um separador entre elas: hmarx@thor:~> cat ARQ AAAAA 1111111 BBBBB 2222222 CCCCC 3333333 DDDDD 4444444 hmarx@thor:~> sed -e "s/ ^\([^ ]*\)[ ]*\(.*\)$/\2 | \1" < ARQ 1111111 | AAAAA 2222222 | BBBBB 3333333 | CCCCC 4444444 | DDDDD hmarx@thor:~> o Utilizando o Linux 67 awk [ opções ] [ arquivo ] ... Linguagem de processamento de padrões. Awk são as iniciais de seus autores: Alfred Aho. Weinberger e Brian Kernigham. Algumas opções: -f arq, --file arq Arquivo de programa Separador de campos -F fs, --field-separator fs -v var=val, --assign var=val Assinalamento do valor val à variável var -W help, --help Ajuda sumária Imprime as variáveis globais e seus -W dump=arq valores finais no arquivo arq Um programa awk consiste de uma sequência de comandos de ações sobre padrões e de definições opcionais de funções: padrão { comandos } function nome ( parâmetros ) { comandos } Um padrão pode ser: BEGIN END /regexp/ padrão1 && padrão2 padrão1 || padrão2 padrão1 ? padrão2 : padrão3 ( padrão ) ! padrão padrão1, padrão2 Executado antes de ler o arquivo Executado após tratar o arquivo Uma expressão regular São definidas diversas classes POSIX como [:alpha:], [:alnum:], [:lower:], [:upper:], e [:digit:] que representam os caracteres alfabéticos, alfanuméricos, letras minúsculas, letras maiúsculas e os dígitos, respectivamente. 68 Utilizando o Linux Podem ser utilizados operadores semelhantes aos da linguagem C, como: ++, --, ^, +, -, *, /, %, <, >, <=, >=, !=, ==, ~, !~, &&, ||, ?, :, =, +=, -=, *=, /=, %= e ^=, listados em ordem de precedência. Comandos de assinalamento são da forma: l-value operador expressão l-value pode ser uma variável ou uma referência a um elemento de um arranjo. O awk permite definição de arranjos multidimensionais. Os comandos de controle são: if ( condição ) comando [ else comando ] while ( condição ) comando do comando while ( condição ) for ( variável in arranjo ) comando break continue delete arranjo [ indice ] delete arranjo exit [ expressão ] { comandos } Os comandos de e entrada e saída são close ( arquivo [, { to | from } ]) getline [ < arquivo ] getline var next nextfile print [ lista de expressões > arquivo ] print [ lista de expressões >> arquivo ] print [ lista de expressões | arquivo ] print [ lista de expressões >& arquivo ] Utilizando o Linux printf printf printf printf formato, lista de expressões formato, lista de expressões formato, lista de expressões formato, lista de expressões 69 [ > arquivo ] [ >> arquivo ] [ | arquivo ] [ >& arquivo ] Podem ser utilizadas as especificações de formato conhecidas da linguagem de programação C: %d, %c, %i, %e, %E, %f, %g, %G, %o, %u, %s, %x, %X e %%. Entre o % e o caracter do formato podem estar: largura Largura do campo . precisão Precisão ou número máximo de caracteres Ajuste à esquerda espaço Espaço para números positivos e - para negativos + Sinal: + para números positivos e - para negativos # Controle alternativo para preencher com zeros 0 Preenche com zeros fflush ( [ arquivo ] ) system ( comando ) São suportadas funções matemáticas como: atan2(y, x), cos(expr), exp(expr), int(expr), log(expr), rand(), sin(expr), sqrt(expr) e srand([expr]). E ainda as funções sobre cadeias de caracteres: asort(s [, d]), gensubr(r, s, h [, t ]), gsub(r, s, [ t, ] ), index(s, t), length([s]), match(s, r [ , a ]), split(s, a [ ,r]), sprintf(formato, lista-de-expressões), strtonum(str), sub(r, s [, t]), substr(s, i [, n ]), tolower(str), toupper(str). Para processar data e hora, o awk fornece: mktime(data), strftime([ formato[ , timestamp] ]), systime(). A data é um string no formato "YYYY MM DD HH MM SS [tz]" 70 Utilizando o Linux Para manipulação bit a bit, awk ainda fornece: and(v1, v2), compl(x), lshift(val, n), or(v1, v2), rshift(val, n), e xor(v1, v2). Um programa bem conhecido pode ser escrito em awk: hmarx@thor:~> awk ’BEGIN { print "hello world !" }’ hello world ! hmarx@thor:~> o expr expressão Avalia expressões aritméticas e lógicas, imprimindo o resultado na saída padrão. Uma expressão pode conter os operadores |, &, <, <=, =, !=, >=, >, +, -, *, /, % e ainda estar entre parenteses: ( expressão ). Para tratamento de cadeias de caracteres, podem ser utilizados: string : expressão-regular ou match string expressão-regular substr string posição tamanho index string caracteres length string quote token O comando expr é muito útil quando operamos com variáveis que representam números no bash: hmarx@thor:~> I=135 hmarx@thor:~> I=‘expr $I + 1‘ hmarx@thor:~> echo $I 136 hmarx@thor:~> o Utilizando o Linux 71 bc [ opções ] [ arquivo ] ... Calculadora de precisão arbitrária. Algumas opções: -l, --mathlib Define biblioteca matemática padrão -w, --warn Exibe avisos de incompatibilidade POSIX -q, --quiet Não exibe o texto introdutório O bc trabalha com números inteiros e fracionários de precisão arbitrária, em qualquer base. São aceitos os operadores padrão: ++, --, ^, +, -, *, /, %, <, >, <=, >=, !=, ==, ~, !~, &&, ||, ?, :, =, +=, -=, *=, /=, %= e ^=. Uma expressão pode estar entre parenteses. Estão disponíveis as funções padrão: length(expressão), read(), scale(expressão) e sqrt(expressão). São ainda aceitos os comandos if ( expressão ) comando [ else comando ] while ( expressão ) comando for ( [ expressão1 ] ; [ expressão1 ] ; [ expressão1 ] ) comando break continue halt return [ ( expressão ) ] { comandos } As funções matemáticas seno, cosseno, arcotangente, logaritmo, exponencial e bessel são representadas, respectivamente, por s(expressão), c(expressão), a(expressão), l(expressão), e(expressão), j(n, expressão). Uma nova função pode ser definida utilizando: define nome (parâmetros) { [ auto nome ... ; ] comandos } As variáveis especiais scale, ibase, obase e last podem ser utilizadas para representar a precisão, a base de entrada, a base da saída e o último valor, respectivamente. 72 Utilizando o Linux Por exemplo, a função exponencial da biblioteca matemática pode ser definida no bc padrão POSIX como: scale = 20 /* * Usa o fato de que e^x = (e ^ (x/2))^2 * Se x é um valor pequeno, usamos a série * e^x = 1 + x + x^2/2! + x^3/3! + ... */ define e(x) { auto a, d, e, f, i, m, v, z; /* Verifica o sinal de x */ if (x < 0) { m = 1; x = -x; } /* Pre-condiciona x. */ z = scale; scale = 4 + z + .44*x; while (x > 1) { f += 1; x /= 2; } /* Inicializa as variáveis */ v=1+x a=x d=1 for (i = 2; 1; i++) { e = (a *= x) / ( d *= i) if (e == 0) { if (x > 0) while (f--) v = v*v; scale = z if (m) return(1/v); return(v/1); } v += e } } Utilizando o Linux 73 mv [ opções ] [ arquivo ] ... Renomeia um arquivo ou move arquivos para outro diretório, se o último arquivo for um diretório. Algumas opções: -f, --force -v, --verbose -i, --interactive hmarx@thor:~/test> ls total 1 -rw-r--r-- 1 hmarx drwxr-xr-x 2 hmarx hmarx@thor:~/test> mv hmarx@thor:~/test> ls total 1 -rw-r--r-- 1 hmarx drwxr-xr-x 2 hmarx hmarx@thor:~/test> o -l starix 4094 starix 1024 passwd PassWord -l Mar 27 00:00 passwd Mar 26 23:54 sub1 starix starix Mar 27 00:00 PassWord Mar 26 23:54 sub1 4094 1024 Se os argumentos são 2 nomes arquivos e o segundo existe, o comando mv irá sobrescrevê-lo com o conteúdo do primeiro rm [ opções ] [ arquivo ] ... Remove arquivos ou diretórios. Um arquivo removido não pode ser recuperado. Algumas opções: -f, --force Ignora arquivos não existentes e erros -v, --verbose Exibe mensagens durante a remoção -i, --interactive Modo interativo CUIDADO !!! -r, --recursive Recursivo Para evitar remoções não intencionais, pode-se definir um alias rm=’rm -i’ . 74 Utilizando o Linux ln [ opções ] [ destino ] ... [ nome ] Cria um link para o arquivo destino com nome nome. Com vários destinos, nome deve ser um diretório onde os links serão criados. Algumas opções: -f, --force Remove arquivo destino existente -s, --symbolic Cria symbolic link em vez de hard link -v, --verbose Imprime o nome de cada arquivo -i, --interactive Confirma remoção de destino -n, --no-dereference Trata symbolic link para diretório como se fosse um arquivo hmarx@thor:~> ln -s /bin/bash shell hmarx@thor:~> ls -li /bin/bash shell 56230 -rwxr-xr-x 1 root root 432000 Aug 5 2000 /bin/bash 2104 lrwxrwxrwx 1 hmarx starix 9 Apr 4 13:29 shell -> /bin/bash hmarx@thor:~> o touch [ opções ] [ arquivo ] ... Atualiza data e hora de acesso e modificação de arquivos. Cria arquivos caso não existam. Algumas opções: -a Altera apenas data/hora de acesso -m Altera apenas data/hora de modificação -c, --no-create Não cria arquivos Usa data/hora em str em vez da corrente -d str, --date=str str no formato padrão de data e hora Usa data/hora em str em vez da corrente -t str str no formato [CC[YY]]MMDDhhmm Usa data/hora do arquivo arq em vez da -r arq, --reference=arq corrente hmarx@thor:~> touch -d "Dec 25 2002 23:59:59" Natal hmarx@thor:~> ls -l --full-time Natal -rw-r--r-- 1 hmarx starix 0 Wed Dec 25 23:59:59 2002 Natal hmarx@thor:~> o Utilizando o Linux 75 more [ opções ] [ arquivo ] ... Pagina arquivo(s) para a saída padrão. Algumas opções: Número de linhas da tela -num -s Agrupa múltiplas linhas em branco em uma única linha +num Começa a exibir a partir da linha num less [ opções ] [ arquivo ] ... Equivalente ao more mas permite caminhar pelo(s) arquivo(s) para frente e para trás e scroll lateral com as setas. Permite ainda marcar posição no texto, procurar por padrões e abrir outros arquivos. Para ver o sumário dos comandos do less pode ser usado o comando h ao caminhar por um arquivo. Algumas opções: -c, --clear-screen Limpa a tela -e, --quit-at-eof Sai após atingir o fim de arquivo pela segunda vez -g, ---hilite-search Ressalta apenas o texto atual na procura -i, --ignore-case Ignora maiúsculas e minúsculas vi [ opções ] [ arquivo ] ... Poderoso editor de textos disponível em qualquer Unix. Veja mais no capítulo 13: O editor de textos VI. ex [ opções ] [ arquivo ] ... Editor de textos em modo linha. É o mesmo editor vi em modo linha. O comando Q no vi o faz comutar para o modo ex. Utilize o comando :visual para voltar ao modo normal. 76 Utilizando o Linux cut [ opções ] [ arquivo ] ... Imprime na saída padrão as partes selecionadas do(s) arquivo(s). Algumas opções: Usa c como delimitador em vez de TAB -d c, --delimiter=c -b lista, --bytes=lista Extrai os bytes especificados pela lista -c lista, --characters=lista Extrai os caracteres especificados pela lista -f lista, --fields=lista Extrai os campos especificados pela lista -s, --only-delimited Só imprime as linhas que contenham os delimitadores As opções -c, -b e -f não podem coexistir. A lista pode conter uma ou mais faixas separadas por , e cada faixa pode ser: N N-ésimo byte, caracter ou campo Do N-ésimo byte, caracter ou campo até o Nfim da linha N-M Do N-ésimo até o M-ésimo byte, caracter ou campo, inclusive -M Do início da linha até o M-ésimo byte, caracter ou campo, inclusive paste [ opções ] [ arquivo ] ... Imprime linhas utilizando informações sequencialmente correspondentes às linhas dos arquivos. Algumas opções: Usa c como delimitador em vez de TAB -d c, --delimiter=c -s, --serial Processa um arquivo por vez Utilizando o Linux 77 join [ opções ] arquivo1 arquivo2 Imprime uma linha para cada par de linhas dos arquivos com campos de junção idênticos. O campo de junção default é o primeiro delimitado por espaço. Algumas opções: Imprime linhas não casadas do arquivo do -a n lado n -i, --ignore-case Ignora maiúsculas e minúsculas -1 campo Usa o campo do arquivo1 como junção Usa o campo do arquivo2 como junção -2 campo -t c Usa o caracter c como separator de campos Imprime somente as linhas não casadas do -v n arquivo do lado n -o f Usa o formato f para construir a linha O formato é composto por uma lista de especificações n.campo separadas por vírgula ou branco. hmarx@thor:~> cat Nomes 1:Amélia 2:Beatriz 3:Cláudia 4:Débora hmarx@thor:~> cat Fones 1:3441-2233:Santa Lúcia 2:3228-1234:Anchieta 3:3429-8723:Pampulha hmarx@thor:~> cut Nomes -d: -f2 Amélia Beatriz Cláudia Débora hmarx@thor:~> paste -d: Nomes Fone 1:Amélia:1:3441-2233:Santa Lúcia 2:Beatriz:2:3228-1234:Anchieta 3:Cláudia:3:3429-8723:Pampulha 4:Débora: hmarx@thor:~> join -t: Nomes Fone -o1.2,2.3,2.2 Amélia:Santa Lúcia:3441-2233 Beatriz:Anchieta:3228-1234 Cláudia:Pampulha:3429-8723 hmarx@thor:~> o 78 Utilizando o Linux sort [ opções ] [ arquivo ] ... Ordena as linhas dos arquivos concatenados. Algumas opções: Usa chave que começa em pos1 e termina -k pos1 [, -pos2 ] em pos2 -b Ignora brancos no início das chaves -c Verifica se os arquivos já estão ordenados -M Compara ’JAN’ < ... < ’DEC’ -n Ordena pelo valor numérico -t sep Usa sep como separador -r Inverte o resultado de comparações -f Converte minúsculas para maiúsculas na comparação -i Considera apenas caracteres imprimíveis nas chaves -d Considera apenas brancos e caracteres alfanuméricos nas chaves -m Apenas junta os arquivos (merge) pos é dado no formato f[.c][opts], onde f é o número do campo, c é a posição do caracter no campo e opts é uma combinação das opções Mbdfinr. uniq [ opções ] [ entrada [ saída ] ] Imprime apenas linhas únicas do arquivo entrada ordenado, no arquivo saída ou na saída padrão. Algumas opções: -c, --count Mostra o número de ocorrências no início de cada linha -d, --repeated Exibe apenas linhas duplicadas -n, -f n, --skip-fields=n Não compara os primeiros n campos -i, --ignore-case Ignora maiúsculas e minúsculas -u, --unique Exibe apenas linhas únicas +n, -s n, --skip-chars=n Não compara os primeiros n caracteres Compara no máximo n caracteres na linha -w n, --check-chars=n Utilizando o Linux 79 diff [ opções ] arquivo arquivo Compara dois arquivos. Algumas opções: -a, --text -v -B, --ignore-blank-lines -i, --ignore-case -e, --ed -r, --recursive -t -y, --side-by-side -W cols, --width=cols Trata os arquivos como texto Ignora diferença em número de espaços Ignora linhas em branco inseridas ou removidas Ignora maiúsculas e minúsculas Gera um script ed como saída Compara diretórios recursivamente Expande TABs na saída Exibe em duas colunas Usa cols colunas para exibir a saída diff3 [ opções ] arquivo arquivo Compara três arquivos Algumas opções: -a, --text -v, --version -E, --show-overlap -A, --show-all -e, --ed -i -m, --merge -T, --initial-tab Trata os arquivos como texto Mostra a versão do diff3 Mostra alterações sobrepostas, ressaltando conflitos Mostra todas as alterações, ressaltando os conflitos Gera um script ed como saída Gera os comandos ´w´ e ´q´ ao final do para o script ed. Produz o arquivo em vez do script ed. Alinha TABs inserindo TABs nas linhas. 80 Utilizando o Linux who [ opções ] [ arquivo ] [ arg1 arg2 ] Mostra quem está logado ou quem é você (arg1 e arg2 são "am I" ou "mom likes"). Algumas opções: -H, --heading Exibe cabeçalho -q, --count Exibe o número de usuários -T, --message, --writable Exibe + se envio de mensagem está habilitada -i, --idle Exibe tempo ocioso hh:mm hmarx@thor:~> who hmarx :0 hmarx pts/0 root pts/5 hmarx pts/6 hmarx@thor:~> o Mar 30 Mar 30 Apr 4 Apr 4 16:02 (console) 22:30 14:39 (acer.starix.br) 16:03 w [ opções ] [ usuário ] Mostra quem está logado e o que está fazendo. Algumas opções: -h Não mostra o cabeçalho -l Listagem longa (default) -s Listagem curta -V Mostra a versão last [ opções ] [ usuário ... ] [ tty ... ] Lista as últimas sessões (do(s) usuário(s)s) nos terminais tty. O usuário especial reboot mostra as reinicializações do sistema. Algumas opções: Mostra n linhas -n, -n n -a Mostra o nome da máquina na última coluna -R Não mostra o nome do terminal ou d a máquina utilizada Utilizando o Linux 81 id [ opções ] [ usuário ] Imprime informações sobre o usuário (ou o corrente) Algumas opções: -g, --group Exibe o ID do grupo do usuário -G, --groups Exibe os IDs grupos do usuário -n, --name Exibe o nome em vez do(s) ID(s) -u, --user Exibe o ID do usuário hmarx@thor:~> id -G -n hmarx starix root uucp users disk trusted develop audio hmarx@thor:~> id -g -n hmarx starix hmarx@thor:~> o finger [ opções ] [ usuário ... ] Imprime informações sobre usuário(s) locais ou remotos Algumas opções: -l Formato longo -s Formato curto -o Exibe escritório (com -s) -p Não imprime o .plan e .project -m Não imprime os nomes (apenas login) -M Imprime os nomes hmarx@thor:~> finger -p hmarx Login: hmarx Name: Helio Marques Sobrinho Directory: /home/hmarx Shell: /bin/bash Office: Starix, 3284-3001 On since Wed Jul 10 18:40 (BRT) on pts/5 (messages off) No Mail. hmarx@thor:~> o 82 Utilizando o Linux passwd passwd passwd passwd [ -f | -s ] [ usuário ] [ -g ] [ -r | -R ] grupo [ -x max ] [ -n min ] [ -w aviso ] [ -i inativo ] usuário { -l | -u | -d | -S } usuário Altera a senha ou atributos de usuário ou grupo. Apenas o root pode alterar a senha de outros usuários e os atributos de uma senha. Algumas opções: -f Altera todas as informações do usuário -s Altera o shell do usuário -g Altera informações de grupo -r Remove a senha do grupo -R Restringe o grupo a todos os usuários Número máximo de dias com a mesma -x max senha -n min Número mínimo de dias para a alteração da senha -w aviso Número de dias antes da expiração da senha Número de dias para desabilitar o usuário -i inativo após a expiração da senha -l Desabilita o usuário através de uma senha impossível -u Reabilita um usuário restaurando sua senha -d Remove a senha do usuário -S Exibe status da senha do usuário Utilizando o Linux 83 su [ opções ] ... [ - ] [ usuário ] Executa um shell como um usuário substituto (ou como root). Algumas opções: - , -l, --login Transforma o shell no login shell -c, --command=comando Passa o comando para o shell -f, --fast Passa o -f para o shell -m Preserva o ambiente do shell Executa o shell especificado -s, --shell=shell hmarx@thor:~> su Password: thor:~ # o newgrp [ -l ] [ grupo ] sg grupo -c comando - , -l, --login Transforma o shell no login shell Passa o comando para o shell -c, --command=comando Executa um shell como um grupo substituto (ou como root). O comando sg não substitui o shell do usuário. sudo [ opções ] ... comando Executa um comando como outro usuário (ou como root). O usuário deverá ser incluido em /etc/sudoers. Algumas opções: -l Lista os comandos executáveis via sudo -L Lista as opções definíveis para o sudo Executa como usuário (nome ou UID) e -u usuário não o root -p prompt Exibe o prompt para pedir a senha -b Executa em background -k Invalida a temporização da senha do usuário 84 Utilizando o Linux gpasswd grupo gpasswd -a usuário grupo gpasswd -d usuário grupo gpasswd -R grupo gpasswd -r grupo gpasswd [ -A usuário, ... ] [ -M usuário, ... ] grupo Administra grupos de usuários. É utilizado sem opções para alterar a senha de um grupo. Opções: -a Adiciona o usuário ao grupo grupo -d Remove o usuário do grupo grupo -r Remove a senha do grupo grupo -R Inibe o acesso ao grupo através de newgrp -A Define administradores do grupo grupo -M Define membros do grupo grupo Utilizando o Linux 85 uname [ opções ] Exibe informações sobre o sistema. Algumas opções: -s, --sysname Exibe o nome do sistema operacional -r, --release Exibe o release do sistema operacional -v, --version Exibe a versão do sistema operacional -m, --machine Exibe o tipo da CPU -n, --nodename Exibe o nome da máquina na rede -p, --processor Exibe o modelo do processador -a, --all Exibe todas as informações hmarx@thor:~> uname -a o Linux thor 2.4.10-64GB-SMP #1 SMP Fri Sep 28 17:26:36 GMT 2001 i686 unknown hmarx@thor:~> tty [ opções ] Exibe o nome do terminal ou apenas retorna código de erro. Algumas opções: -s, --silent, ---quiet Apenas retorna o código de erro --help Exibe uma ajuda sumária --version Exibe a versão do tty hmarx@thor:~> tty /dev/pts/2 hmarx@thor:~> o 86 Utilizando o Linux setterm [ opções ] Altera atributos de um terminal definido na variável TERM através de uma cadeia de caracteres definida pelas suas características no terminfo. Características não suportadas são ignoradas. Algumas opções: Usa nome em vez do conteúdo de TERM -term nome -clear Limpa a tela e coloca o cursor na primeira linha e coluna. -reset Reinicializa o terminal -cursor [on | off ] Habilita ou desabilita o cursor -repeat [on | off ] Habilita ou desabilita repetição do teclado Salva o conteúdo da tela da console virtual -dump n n no arquivo screen.dump ou no definido pela opção -file -append n Adiciona o conteúdo da tela da console virtual n no arquivo screen.dump ou no definido pela opção -file -file arq Define o arquivo de saída para as opções -dump e -append -msg [ on | off ] Habilita ou desabilita mensagens do kernel no terminal -msglevel n Muda o nível de log das mensagens para n (de 1 a 8). Colocar o monitor no modo de suspensão -powersave on | vsync VESA vsync -powersave hsync Colocar o monitor no modo de suspensão VESA hsync -powersave powerdown Colocar o monitor no modo de suspensão VESA powerdown -powesave off Inibe o modo de suspensão do monitor Define em n minutos (1 a 60) o tempo de -powerdown n desligamento do monitor, ou inibe o desligamento do monitor se n = 0 Utilizando o Linux 87 stty [ opções ] Exibe ou altera as características e modo de operação do terminal. Algumas opções: -a, --all -g, --save -F dispositivo, --file dispositivo característica valor As características mais comuns são: Característica eof c eol c erase c intr c lnext c kill c quit c rprnt c start c stop c susp c werase c cols N columns N N ispeed N ospeed N speed Significado Caracter para fim de arquivo Caracter para fim de linha Caracter para apagar tecla digitada Caracter para enviar o sinal SIGINT Para enviar o próximo caracter sem tratar Caractrer para limpar a linha corrente Caracter para enviar o sinal SIGQUIT Caracter para reimprimir a linha Caracter para resumir a saída Caracter para suspender a saída Caracter para enviar o sinal SIGSUSP Caracter para apagar a última palavra Informa ao kernel que o terminal tem N colunas Muda o baud rate para N Muda o baud rate de recepção para N Muda o baud rate de transmissão para N Mostra a velocidade do terminal default ¦ +D não definido ¦+? ou  +C ¦ +V ¦ +U ¦ +\ ¦ +R ¦ +Q ¦ +S ¦ +Z ¦ +W ¦ não definido não definido não definido não definido não definido 88 Utilizando o Linux O modo de operação pode ser alterado através de características especiais denominadas modo. Um modo pode ser precedido ou não por um hífen. O uso de um hífen complementa o significado do modo de operação. Os modos mais comuns são: Modo clocal cread crtscts cstopb hup parenb parodd brkint icrnl igncr ignpar inlcr inpck istrip ixoff ixon ocrnl onlcr onlret onocr crterase echo iuclc olcuc ixany icanon Significado Desabilita o controle de modem Permite a entrada de caracteres (não pode ser usado na entrada padrão) Habilita o controle de fluxo através de CTS e RTS Usa 2 bits de stop (ou 1 se desabilitado) Envia hangup quando o último processo fechar o terminal Gera e testa o bit de paridade Gera paridade ímpar Envia um break na linha Traduz CR (carriage return) para LF (line feed) na entrada ignora o CR Ignora caracteres com erro de paridade Tarduz LF para CR na entrada Habilita verificação de paridade Zera o bit 7 na entrada Habilita o envio de XON/XOFF Habilita o controle de fluxo XON/XOFF Traduz CR para LF na saída Traduz LF para LF-CR na saída O caracter LF gera a volta do cursor (CR) Não imprime CR na primeira coluna Apaga caracteres usando backspace-espaço-backspace Ecoa os caracteres digitados Converte maiúsculas para minúsculas Converte minúsculas para maiúsculas Permite qualquer caracter resumir a saida (e não apenas o definido em start) Habilita os caracteres especiais definidos em erase, kill, werase, e rprnt Utilizando o Linux E, em especial, para restaurar as características do terminal: sane o mesmo que cread -ignbrk brkint -inlcr -igncr icrnl -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke, e todos os caracteres especiais para os valores default. Pode ser utilizado ainda o comando reset ou o comando tset. hmarx@thor:~> stty -a speed 9600 baud; rows 36; columns 79; line = 0; intr = ^C; quit = \^; erase = ^?; kill = ^U; eof = ^D; eol = <undef>: eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext - ^V; flush = ^O; min = 1; time = 0; -parenbl -parodd cs8 ignpar -hupcl -cstopb cread -clocal -crtscts -ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany imaxbel opost -olcuc-ocrnl onlcr -onocr -onlret -ofill -odel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke hmarx@thor:~> stty -g 2506:5:bd:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:2f:0:0:0:0:0: 0:0:0:0:0:0:0:0 hmarx@thor:~> o 89 90 Utilizando o Linux pr [ opções ] [ arquivos ] ... Prepara arquivos (ou a entrada padrão) para a impressão. Algumas opções: +primeira página [ :última página] --columns=número de colunas --width=largura da página --header=cabeçalho lpr [ opções ] [ arquivo ] ... Envia os arquivo(s) (ou a entrada padrão) para a fila de impressão definida. Algumas opções: -Pimpressora[@máquina] Definida a fila de impressão (local ou remota -K número de cópias -w largura da página -Z opções para o filtro -m e-mail para status de erro lpq [ opções ] Mostra itens na(s) fila(s) de impressão. Algumas opções: -Pimpressora[@máquina] -L -V -c -a -t tempo entre atualizações Informações mais detalhadas Mostra a versão do lpq Limpa a tela antes de exibir Todas as impressoras Intervalo entre exibições repetidas Utilizando o Linux 91 lprm [ opções ] ( jobid | usuário | all ) Retira iten(s) da(s) fila(s) de impressão. Algumas opções: -Pimpressora [ @máquina] -V Mostra a versão -a Todas as impressoras -U usuário Roda como <usuário> -D nível de depuração a2ps [ opções ] [ arquivo ] ... Formata arquivo(s) para impressão em uma impressora PostScript. Algumas opções: -M papel, --medium=papel Tamanho do papel (A4, letter, ...) -r, --landscape Paisagem -R, --portrait Retrato Imprime em n colunas --columns=n Número de linhas por página --rows=n -1, -2, ..., -9 Tamanho de fonts pré-definidos -j, --borders Imprime bordas -f n, --font-size=n Tamanho do font Cabeçalho -b texto, --header=texto -B, --no-header Não imprime cabeçalho Rodapé --footer=texto -u texto, --underlay=texto Rodapé de cada página Páginas a imprimir -a páginas, --pages=páginas -n n, --copies=n Número de cópias Gera índice --toc=texto -P impr, --printer=impr Envia saída para a fila de impressão impr 92 Utilizando o Linux df [ opções ] arquivos Mostra as informações sobre o sistema de arquivos onde os arquivos estão. Algumas opções: -h, --human-readable Exibe tamanhos em potência de 1024 -k, --kilobytes Utiliza bloco de 1024 bytes -H, --si Exibe tamanhos em potência de 1000 -l, --local Limita aos sistemas de arquivos locais -m, --megabytes Exibe tamanhos em Megabytes -T, --print-type Exibe o tipo dos sistemas de arquivos -i, --inodes Exibe informações sobre inodos du [ opções ] arquivos Resume a utilização do disco de cada arquivo e diretórios. Algumas opções: -a, --all Contabiliza todos os tipos de arquivos -h, --human-readable Exibe tamanhos em potência de 1024 -k, --kilobytes Utiliza bloco de 1024 bytes -H, --si Exibe tamanhos em potência de 1000 -b, --bytes Exibe tamanho em bytes -c, --total Exibe total -m, --megabytes Exibe tamanho em Megabytes -s, --sumarize Exibe sub-totais -L, --dereference Dereferencia os symbolic links Utilizando o Linux 93 free [ opções ] Exibe o total de memória física e de swap livre, incluindo a memória compartilhada e buffers usados pelo kernel. Algumas opções: -b Total em bytes -k Total em kilobytes -m Total em megaytes -o Inibe impressão da linha de ajuste de buffers (subtraido/adicionado à memória) -t Exibe o total -s segundos Exibe continuamente de segundos em segundos 94 Utilizando o Linux ps [ opções ] [ PID ] ... Mostra os processos (de identificação PID) e seus estados. Algumas opções: -A Todos os processos -u usuário Processos do usuário usuário -t tty Processos do terminal tty -V Mostra a versão -w Saída mais ampla -l Saída longa -r Mostra apenas processos em execução v Memória virtual u Orientado a usuário x Processos sem tty a Inclui outros terminais e processos g Inclui líderes de grupo e Mostra variáveis de ambiente pstree [ opções ] [ PID | usuário ] Mostra a árvore de processos (a partir do processo PID). Algumas opções: -a Mostra a linha de comandos -p Mostra os PIDs -u Mostra a transição de usuário -l Não trunca linhas longas -h Ressalta processo corrente e antecessores Ressalta o processo pid e antecessores -H pid -G Utiliza caracteres semi-gráficos VT-100 pidof [ opções ] programa ... Mostra o PID de cada programa especificado Algumas opções: -s Mostra apenas 1 PID -x Mostra PIDs de scripts -o PID Omite o PID especificado Utilizando o Linux 95 fg [ job ] % [ job ] Coloca o job especificado (nome do processo ou número) em foreground. bg [ job ] Coloca o job especificado em background. É muito útil quando um processo em foreground é suspenso por ¦+Z (que gera o sinal SIGSTOP). jobs [ opções ] [ job ] Lista os processos ativos, disparados em background. Algumas opções: -l Exibe o PID e outras informações -p Exibe apenas o PID -r Exibe apenas os jobs em execução -s Exibe apenas os jobs parados (stopped) at [ -V ] [ -q fila ] [ -f arq ] [ -mldbv ] hora atq -c job [ job ] ... atrm [ -V ] job [ job ] ... Enfilera, lista ou remove processos para execução Algumas opções: -q fila Usa a fila fila.Deve ser uma letra do conjunto [a-zA-Z]. -m Envia um e-mail ao usuário quando o job terminar -d Apelido para atrm (remove processos) -l Apelido para atq (lista processos) -v Mostra a hora que o job será executado Lê o job do arquivo arq e não da entrada -f arq padrão 96 Utilizando o Linux crontab [ -u usuário ] arquivo crontab [ -u usuário ] { -l | -r | -e} Manipula os arquivos do cron dos arquivos Algumas opções: -u usuário Edita a tabela do usuário -l Lista a tabela -r Remove a tabela -e Edita a tabela Os arquivos crontab contém instruções para o comando cron para que este execute um determinado comando em uma determinada hora de uma determinada data. Os comandos são executados como os usuários donos dos arquivos. Uma linha do arquivo crontab pode ser uma atribuição a uma variável de ambiente na forma: nome = valor ou um comando para o cron na forma com 6 campos: minutos horas dias-do-mês mês dia-da-semana comando 0-59 0-23 0-31 0-12 (ou nomes) 0-7 (0 ou 7 é domingo ou nomes) Cada um dos primeiros cinco campos pode conter uma lista de faixas separadas por vírgula. Uma faixa pode ser seguida por /número que significa saltar o número dentro da faixa. Por exemplo, 0-8/2 significa 0, 2, 4, 6, 8. Utilizando o Linux 97 top [ opções ] Mostra os processos em execução. Permite enviar um sinal a um processo ou ainda alterar a prioridade dele. Algumas opções: d atraso em segundos Tempo entre exibições Número de processos a exibir p número do processo b Modo batch s Modo seguro (inibe comandos perigosos) C Totaliza estado das CPUs k Envia um sinal a um processo r Altera a prioridade (renice) de um process 11:11pm up 1 day, 18:53, 4 users, load average: 0.46, 0.49, 0.67 67 processes: 65 sleeping, 2 running, 0 zombie, 0 stopped CPU states: 8.7% user, 2.8% system, 0.0% nice, 88.4% idle Mem: 126448K av, 121332K used, 5116K free, 0K shrd, 2476K buff Swap: 104412K av, 70488K used, 33924K free 27848K cache PID 851 11572 720 7610 11422 1 2 4 5 6 7 8 9 360 363 445 USER hmarx hmarx root hmarx hmarx root root root root root root root root root root bin PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 5 0 2360 1164 736 S 7.9 0.9 166:50 kdeinit 18 0 1092 1092 868 R 2.1 0.8 0:00 top 20 0 32736 22M 920 S 1.1 18.5 128:59 X 20 0 1640 60 44 R 0.2 0.0 3:29 kdeinit 20 0 4664 4664 3284 S 0.2 3.6 0:01 kvt 20 0 76 64 44 S 0.0 0.0 0:03 init 20 0 0 0 0 SW 0.0 0.0 0:03 keventd 20 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0 19 0 0 0 0 SW 0.0 0.0 0:14 kswapd 2 0 0 0 0 SW 0.0 0.0 0:00 bdflush 20 0 0 0 0 SW 0.0 0.0 0:00 kupdated 20 0 0 0 0 SW 0.0 0.0 0:02 kinoded 0 -20 0 0 0 SW< 0.0 0.0 0:00 mdrecoveryd 20 0 256 216 144 S 0.0 0.1 0:00 syslogd 20 0 640 4 0 S 0.0 0.0 0:00 klogd 20 0 88 4 0 S 0.0 0.0 0:00 portmap Teclando-se h é exibida uma tela com os comandos para alterar a exibição. 98 Utilizando o Linux kill [ -s nome do sinal | -n número do sinal | -sinal] pid ... kill -l [ sinal ] Envia um sinal para o(s) processo(s) ou lista o(s) sinai(s) definidos. Algumas opções: -l, --list Exibe os sinais disponíveis Envia o sinal de nome dado -s nome do sinal -n número do sinal Envia o sinal de número dado -p Apenas imprime os PIDs Normalmente, as teclas ¦+Z, ¦+\ e ¦+C são definidas para os sinais SIGSTOP, SIGQUIT e SIGINT respectivamente (veja stty). killall [ opções ] nome Envia um sinal para o(s) processo(s) de nome nome, comparando por default, os 15 primeiros caracteres. Algumas opções: -l, --list Exibe os sinais disponíveis -e, --exact Compara todo o nome do processo. Envia o sinal especificado -s nome do sinal -i, --interactive Pede confirmação -v, -verbose Exibe informações sobre o envio do sinal -w, --wait Espera o(s) processo(s) terminar(em) nice [ opções ] [ comando ] [ argumentos ] Executa o comando comando com ajuste de prioridade selecionada. O ajuste pode ser de -20 (maior prioridade) até 19 (menor prioridade). O default é 10. Algumas opções: -n ajuste, --adjustment=ajuste --version --help Utilizando o Linux renice prioridade [ [-p] pid ... ] [ [-g] pgid ... ] [ [-u] users ... ] Altera a prioridade de um comando em execução. Algumas opções: Número(s) do(s) processo(s) -p pid -g pgid GID dos processos Nome(s) do(s) usuário(s) -u user time [ -p ] comando [ argumentos ] Temporiza a execução de um comando. Algumas opções: -p Imprime no formato POSIX /usr/bin/time [ opções ] comando [ argumentos ] Temporiza a execução de um comando. Algumas opções: -p Imprime no formato POSIX -f frmt, --format=frmt Usa o formato frmt -o arq, --output arq Envia a saída para o arquivo arq -a, --append Adiciona a saída no arquivo -v, --verbose Imprime informações adicionais 99 100 Utilizando o Linux xargs [ opções ] [ comando [ argumentos ] ] Cria e executa linhas de comandos a partir da entrada padrão. O comando default é o echo. Algumas opções: -p, -- interactive Modo interativo -t, --verbose Modo verboso -e [ eof-str ], --eof [=eof-str ] Define a cadeia para fim de arquivo Usa no máximo n linhas para cada -l [ n ], --max-lines [=n ] linha de comando (default = 1). -n n, --max-args=n Usa no máximo n argumentos para cada linha de comando -s n, --max-chars=n Usa no máximo n caracteres para cada linha de comando -r, --no-run-if-empty Não executa o comando se a entrada padrão gerar uma linha em branco. -P n, --max-procs=n Limita ao máximo de n processos por vez (default é 1) -x, --exit Termina se o tamanho definido na opção -s é excedido hmarx@thor:~> echo A B C D E | xargs -n 2 echo "Argumentos = " Argumentos = A B Argumentos = C D Argumentos = E hmarx@thor:~> ls *.aw | xargs -n 1 wc 10650 56164 439209 ApostilaLinux.aw 15870 84192 651345 apcaixa.aw 15870 84192 651345 apcaixa.orig.aw 229 914 8309 apcapa.aw 1098 5414 35950 appendix.aw 734 3897 26070 apresentacao_starix.aw hmarx@thor:~> o Utilizando o Linux 101 find [ caminho ] [ expressão ] Encontra arquivos e executa a expressão. O caminho default é o diretório corrente. A expressão pode ser: ( expr ) ! expr expr1 -a expr2 expr1 -o expr2 ou ou ou -not expr expr1 -and expr2 expr1 -or expr2 E pode incluir opções como: -links número -name padrão -atime número -ctime número -mtime número -cnewer arquivo -type tipo -uid UID -printf formato -inum número -print -empty -true -false -size número [ b | c | k | w ] -ok comando ; -exec comando ; A cadeia de caracteres {}, no comando, será substituída pelo nome de cada arquivo encontrado. Note que deverá ser utilizado \; no prompt do bash para que o ; não seja interpretado como separador de comandos. locate [ opções ] padrão ... Lista os arquivos da base de dados /var/lib/locatedb que combinam com o(s) padrões fornecidos Algumas opções são: -e. --existing Imprime os arquivos que existem -i, --ignore-case Ignora maiúsculas e minúsculas O programa /usr/bin/updatedb atualiza a base de dados do locate. Normalmente ele é disparado pelo cron. 102 Utilizando o Linux chown [ opções ] dono [ { . | : } grupo ] arquivos chown [ opções ] { . | : } grupo arquivos chgrp [ opções ] grupo arquivos Muda o dono e/ou o grupo de arquivo(s) e diretórios. Algumas opções: -R, --recursive Modo recursivo -f, --silent Suprime mensagens de erro -v, --verbose Exibe mensagens durante o processo -h, --no-dereference Altera o symbolic link e não o arquivo -c, --changes Exibe mensagens apenas quando há alguma alteração Utilizando o Linux 103 chmod [ opções ] modo [, modo ] ... arquivos chmod [ opções ] modo em octal ... arquivos Altera a permissão de arquivos e diretórios Algumas opções: -v, --verbose Exibe mensagens durante o processo -R, --recursive Modo recursivo -f, --silent, --quiet modo { u | g | o | a }* { + | - | = } { r | w | x | X | s | t | u | g | o }* r = read w = write x = execute t = stick s = SUID ou SGID modo em octal é um número na base 8 representando os modos. Este número poderá variar de 0000 a 7777. Normalmente apenas os modos rwx são modificados. Bits 11 10 9 8 7 6 5 4 3 2 1 0 Significado sticky bit SGID SUID r para o dono w para o dono x para o dono r para o grupo w para o grupo x para o grupo r para os outros w para os outros x para os outros O comando ls irá mostrar, no lugar do x correspondente: S s T t p/ SUID ou SGID p/ SUID ou SGID e execute p/ Sticky bit para Sticky bit e execute hmarx@thor:~/test> ls -l arquivo -rw------- 2 hmarx starix 1736 Mar 26 12:27 arquivo hmarx@thor:~/test > chmod 644 arquivo hmarx@thor:~/test> ls -l arquivo -rw-r--r-- 2 hmarx starix 1736 Mar 26 12:27 arquivo hmarx@thor:~/test> chmod g+w,o-r arquivo hmarx@thor:~/test> ls -l arquivo -rw-rw---- 2 hmarx starix 1736 Mar 26 12:27 arquivo hmarx@thor:~/test> o 104 Utilizando o Linux Um diretório "executável" permite caminhar para ele. Um diretório com sticky só permite que seus arquivos sejam apagados por seus respectivos donos. Um diretório SGID faz com que os arquivos nele criados herdem o grupo do diretório. which [ opções ] [ programa ] ... type [ opções ] [ programa ] ... Mostra o caminho completo de programas. Algumas opções: -a Identifica aliases e programas -t Mostra o tipo hmarx@thor:~/test> which ls /bin/ls hmarx@thor:~/test> type -a ls ls is aliased to ‘ls $LS_OPTIONS‘ ls is /bin/ls hmarx@thor:~/test> which passwd /usr/bin/passwd hmarx@thor:~/test> o file [ opções ] [ arquivo ] ... Determina o tipo dos arquivos utilizando as definições /usr/share/misc/magic. Algumas opções: Lê os nomes dos arquivos de arq -f arq -z Pesquisa em arquivos comprimidos -L Segue symbolic links em Utilizando o Linux 105 basename nome [ sufixo ] Imprime o nome retirando os diretórios e opcionalmente o sufixo hmarx@thor:~/test> basename /x/y/z/w/arquivo.dat arquivo.dat hmarx@thor:~/test> basename /x/y/z/w/arquivo.dat arquivo hmarx@thor:~/test> o dirname nome Imprime o nome retirando o último componente do diretório. hmarx@thor:~/test> dirname /x/y/z/w/arquivo.dat /x/y/z/w hmarx@thor:~/test> dirname ~hmarx /home hmarx@thor:~/test> o .dat 106 Utilizando o Linux history [ -c ] [ -d offset ] [ n ] history [ -w ] [ -r ] Mostra os últimos n comandos executados, ou apaga o comando de número n do histórico. Um comando anterior pode ser referenciado utilizando o operador !, seguido do número do comando. Algumas opções: -w arquivo Salva o histórico no arquivo arquivo -r arquivo Lê o histórico do arquivo arquivo -a arquivo Adiciona o histório ao arquivo arquivo -c Apaga o histórico Apaga a entrada offset do histórico -d offset hmarx@thor:~> history 5 512 cd 513 basename /x/y/z/w/arquivo.dat 514 basename /x/y/z/w/arquivo.dat .dat 515 dirname /x/y/z/w/arquivo.dat 516 dirname ~hmarx hmarx@thor:~> !514 basename /x/y/z/w/arquivo.dat .dat arquivo hmarx@thor:~> o Utilize as setas para cima e para baixo para percorrer os comandos no histórico. Pode-se começar a digitação de um comando e pressionar a tecla º. O bash tentará completar o comando utilizando os executáveis encontrados no PATH. Caso sejam encontrados mais de um nome, soará um beep. Pressionando º novamente, fará com que o bash liste os comandos encontrados. Utilizando as teclas Å e Æ, pode-se caminhar pelos comandos que iniciam com os caracteres digitados. Utilizando o Linux 107 Meta-teclas A tecla ¸ indica que a próximo caracter teclado será uma meta-tecla. São representadas por M-x nas documentações do bash. As mais utilizadas são: +t ¸+* ¸ ¸ +{ +b ¸+f ¸+d ¸+Ì ¸+< ¸+> ¸+¦ +E ¸+u ¸+l ¸+c ¸ troca as duas palavras anteriores expande os nomes de arquivos iniciados pela palavra anterior expande os nomes de arquivos iniciados pela palavra anterior usando expressões regulares volta para o início da palavra anterior avança para o fim da palavra apaga a palavra da frente apaga a palavra de trás volta ao início do history vai para o fim do history expande a linha (variáveis e aliases) passa a palavra seguinte para maiúsculas passa a palavra seguinte para minúsculas passa a primeira letra da palavra seguinte para maiúscula e as demais para minúsculas. 108 Utilizando o Linux dd [ opções ] ... Copia um arquivo, convertendo ou formatando de acordo com as opções. (Note que um arquivo pode ser um dispositivo.) Algumas opções: bs=tamanho do bloco em bytes para leitura e escrita cbs=número de bytes a converter de cada vez conv=lista de conversões separadas por vírgulas ascii de EBCDIC para ASCII ebcdic de ASCII para EBCDIC lcase transforma em minúsculas ucase transforma em maiúsculas swab troca cada par de bytes ibs=número de bytes do bloco para leitura if=arquivo de entrada obs=número de bytes do bloco para escrita of=arquivo de saída skip=número de blocos a saltar na entrada seek=número de blocos a saltar na saída Os blocos e bytes podem ser dados com sufixos multiplicativos como: 10c 10 caracteres de 1 byte 5w 5 palavras (2 bytes) 8b 8 blocos de 512 bytes 15k 15 blocos de 1024 bytes 3M 3.145.728 bytes (3 Mbytes) hmarx@thor:~/test> dd if=/dev/fd0 of=floppy.image 2880+0 records in 2880+0 records out hmarx@thor:~/test> ls -l floppy.image -rw-r--r-- 1 hmarx hmarx@thor:~/test> o starix 1474560 Jun 12 15:29 floppy.image Utilizando o Linux 109 split [ opções ] [ entrada [ prefixo ] ] Gera partes da entrada em arquivos começando com o prefixo e terminando sequencialmente em aa, ab, ac, ... Algumas opções: -b tam, --bytes=tam Gera arquivos de tamanho tam bytes Gera no máximo tam bytes sem quebrar -C tam, --line-bytes=tam linhas -n, -l n, --lines=n Gera n linhas por arquivo O tamanho pode ter um sufixo multiplicador: b para 512, k para 1K e m para 1 Mega. Para reunir as partes recompondo o arquivo original utiliza-se o comando cat. Veja o exemplo abaixo: hmarx@venus:~/test> ls -lh file.dat -rw-r----- 1 hmarx linuxtech 2.8M 2009-07-20 13:10 file.dat hmarx@venus:~/test> split -b 1024k file.dat parthmarx@venus:~/test> ls -lh part-a* -rw-rw---- 1 hmarx linuxtech 1.0M 2009-07-20 13:12 part-aa -rw-rw---- 1 hmarx linuxtech 1.0M 2009-07-20 13:12 part-ab -rw-rw---- 1 hmarx linuxtech 775K 2009-07-20 13:12 part-ac hmarx@venus:~/test> cat part-aa part-ab part-ac > all-parts.dat hmarx@venus:~/test> ls -lh all-parts.dat -rw-rw---- 1 hmarx linuxtech 2.8M 2009-07-20 13:12 all-parts.dat hmarx@venus:~/test> diff all-parts.dat file.dat hmarx@thor:~/test> o 110 Utilizando o Linux Backup tar opções [ arquivos ] ... TAR : Tape Archive and Restore É o programa padrão de backups do Unix. Algumas opções: t Lista o backup x Extrai o conteúdo do backup c Cria um backup z Faz backup comprimido com gzip j Faz backup comprimido bzip2 f Informa arquivo ou dispositivo de backup v Prolixo (verbose) u Atualiza o backup zip opções [ arquivos ] ... Cria arquivos .ZIP Algumas opções: -T -v -c -r -f -m -u Testa o arquivo.ZIP Prolixo (verbose) Cria comentários Recursivo Apenas arquivos alterados (freshen) Move os arquivos Apenas arquivos alterados ou novos unzip opções [ arquivos ] ... Extrai conteúdo de arquivos .ZIP Algumas opções: -t Testa o arquivo.ZIP -v Prolixo (verbose) -q Modo silencioso -p Extrai para saída padrão (útil em pipes) Utilizando o Linux 111 gzip [ opções ] [ arquivos ] ... gunzip [ opções ] [ arquivos ] ... zcat [ opções ] [ arquivos ] ... Comprime ou expande arquivos utilizando o algoritmo LZW. Cada arquivo é substituído pela versão comprimida ou expandida. Algumas opções: -c, --stdout Comprime ou expande para a saída padrão -d, --decompress Expande os arquivos (bunzip2) -t, --test Testa a integridade dos arquivos -l, --list Exibe informações sobre os arquivos -1, --fast Comprime mais rápido -9, --best Comprime melhor -r, --recursive Opera recursivamente em diretórios Utiliza o sufixo .suf na compressão -S .suf, --suffix .suf -v, --verbose Modo verboso bzip2 [ opções ] [ arquivos ] ... bunzip2 [ opções ] [ arquivos ] ... bzcat [ -s ] [ arquivos ] ... Comprime ou descomprime arquivos Algumas opções: -c, --stdout Descomprime para saída padrão (bzcat) -d Descomprime (bunzip2) -t, --test Testa a integridade dos arquivos -k, --keep Mantém os arquivos originais xz [ opções ] [ arquivos ] ... unxz [ opções ] [ arquivos ] ... xzcat [ -s ] [ arquivos ] ... Comprime ou descomprime arquivos Opções similares ao gzip e bzip2 112 Utilizando o Linux compress opções [ arquivos ] ... uncompress opções [ arquivos ] ... Comprime ou descomprime arquivos Algumas opções: -d Descomprime -c Apenas mostra na saída padrão -v Imprime estatística de compressão -r Recursivo mt [ opções ] operação [ contador ] MT : Magnetic Tape Operações com fita magnética Algumas opções: -f dispositivo, --file=dispositivo -V, --version Operações: rewind retension weof bsf status erase datcompression offline setdensity tell seek ... fsf eom Há ainda diversos aplicativos para comprimir/descomprimir arquivos como lha, unrar, unace, freeze e zoo. Utilizando o Linux 113 Operadores do bash Redirecionamento de E/S O bash permite que a entrada ou a saída de um processo seja redirecionada para um arquivo. Para isto, são utilizados os operadores abaixo: < > >> 2> >&n m>&n <<texto redireciona a entrada padrão redireciona a saída padrão concatena a saída padrão redireciona a saída de erros redireciona a saída padrão e a de erros, opcionalmente para a saída do descritor n redireciona a saída do descritor m para a mesma saída do descritor n trata a entrada padrão até encontrar texto. Os descritores padrão são: 0 - entrada padrão 1 - saída padrão 2 - saída de erros hmarx@thor:~/arqs> echo Este é um teste. > mensagem hmarx@thor:~/arqs> cat mensagem Este é um teste. hmarx@thor:~/arqs> echo Mais testes. >> mensagem hmarx@thor:~/arqs> cat mensagem Este é um teste. Mais testes. hmarx@thor:~/arqs> cat <<_fim_do_texto_ > mensagem > Uma linha de texto > Duas linhas de texto > _fim_do_texto_ hmarx@thor:~/arqs> cat mensagem Uma linha de texto Duas linhas de texto hmarx@thor:~/arqs> o 114 Utilizando o Linux Pipeline A saída de um programa pode se tornar a entrada para outro. Basta utilizar o operador "|". Pode-se então gerar um pipeline ou linha de montagem: $ programa1 | programa2 | programa 3 | ... Cada programa processa a saída do anterior e fornece a entrada para o próximo. Tarefas complexas podem ser feitas utilizando diversos aplicativos simples com funções específicas. hmarx@thor:~/arqs> echo "Maria e José" | ésoJ e airaM hmarx@thor:~/arqs> rev o Separador de comandos Você pode digitar diversos comandos em uma única linha: basta separálos por ";". hmarx@thor:~/arqs> pwd /home/hmarx hmarx@thor:~/arqs> date Fri Mar 30 19:38:39 BRT 2001 hmarx@thor:~/arqs> pwd ; date ; who /home/hmarx Fri Mar 30 19:38:48 BRT 2001 root :0 Mar 30 18:12 (console) root ttyp0 Mar 30 18:45 hmax ttyp1 Mar 30 16:06 hmarx@thor:~/arqs> o Utilizando o Linux 115 Disparando processos em background Um processo que vai demorar muito tempo, ou que não requer interatividade com o usuário, pode ser disparado em background. Basta incluir um "&" após o comando. O bash irá executá-lo em background, informando o número do job e seu PID. hmarx@thor:~> cc -o programa programa.c & [1] 22851 hmarx@thor:~> ps 22768 p7 S 0:33 bash 22773 p1 S 0:27 bash 22851 p1 S 0:00 cc -o programa programa.c 22853 p1 R 0:00 ps hmarx@thor:~> o 116 Utilizando o Linux Agrupando comandos Um conjunto de comandos pode ser agrupado para que o resultado seja equivalente a um só utilizando chaves, "{" e "}". Um uso típico é o redirecionamento da saída de todos os comandos do conjunto. Os comandos serão executados pelo mesmo shell. $ { comando1 ; comando2 ; ... } hmarx@thor:~> A=outer ; { A=inner; echo $A ; } ; echo $A inner inner hmarx@thor:~> o Agrupando processos em um subshell Algumas vezes é necessário disparar um subshell para executar uma sequência de comandos (para criar um novo ambiente ou para trabalhar temporáriamente em outro diretório). Para isto basta colocar os comandos entre parêntesis, "(" e ")". $ ( comando1 ; comando2 ; ... ) hmarx@thor:~> pwd; (cd /usr/local/bin; pwd); pwd /home/hmarx /usr/local/bin /home/hmarx hmarx@thor:~> o Note a diferença do agrupamento de comandos: hmarx@thor:~> A=outer ; ( A=inner; echo $A ) ; echo $A inner outer hmarx@thor:~> o Utilizando o Linux 117 Substituição de comandos A saída de um comando pode substituir um comando utilizando as formas $(comando) ou ‘comando‘ (crases). A primeira forma é mais interessante por permitir aninhamento. Isto é muito utilizado em avaliações de expressões a serem assinaladas a variáveis. hmarx@thor:~> A=123 hmarx@thor:~> A=‘expr $A + 1‘ hmarx@thor:~> echo $A 124 hmarx@thor:~> echo Estamos no ano de $(date +%Y) \! Estamos no ano de 2009 ! hmarx@thor:~> echo "$(host -t A $(uname -n) | > sed ’s/^[^0-9]*//’) é o IP da minha máquina" 192.168.200.3 é o IP da minha máquina hmarx@thor:~> o 118 Utilizando o Linux Expressões aritméticas O comando: $ (( expressão )) retornará 0 se a expressão retornar um valor diferente de 0. Podem ser utilizados também os operadores da linguagem C. Abaixo são listados os operadores aceitos pelo bash em ordem de precedência descendente. Operadores id++ id-++id --id + ! ~ ** * / % + << >> <= >= < > == != & ^ | && || expr ? expr : expr = *= /= += -= <<= >>= &= ^= |= expr1 , expr2 Significado Pós-incremento e Pós-decremento da variável id Pré-incremento e Pré-decremento da variável id Sinais unários mais e menos Negação lógica bit a bit, AND Exponenciação Multiplicação, divisão e módulo (resto da divisão) Adição e subtração Deslocamento para a esquerda e direita Comparação de desigualdade Comparação de igualdade Operador E bit a bit (AND) Operador OU exclusivo (XOR) Operador OU inclusivo bit a bit (OR) Operador E lógico (AND) Operador OU lógico (OR) Expressão condicional Assinalamento Execução sequencial Utilizando o Linux 119 Exemplos: hmarx@thor:~> 51 hmarx@thor:~> 512 hmarx@thor:~> hmarx@thor:~> hmarx@thor:~> A=11 hmarx@thor:~> 45 hmarx@thor:~> 31 hmarx@thor:~> 2 hmarx@thor:~> hmarx@thor:~> 21 hmarx@thor:~> echo $((( 3 * 17 ))) echo $((( 2 ** 9 ))) A=10 (( ++A )) echo A=$A B=34; echo $((( A + B ))) echo $((( 012 | 027 ))) echo $((( 012 & 027 ))) X=$((( 3 * 7 ))) echo $X o 120 Utilizando o Linux Expressões condicionais O comando: $ [[ expressão ]] TRUE = Verdade é zero ! FALSE = Falso é qualquer valor diferente de 0 ! retornará 0 se a expressão for verdadeira ou 1 se a expressão for falsa. Podem ser utilizadas as seguintes opções e operadores na montagem das expressões: Opção -a arquivo -b arquivo -c arquivo -d arquivo -e arquivo -f arquivo -g arquivo -h arquivo -k arquivo -p arquivo -r arquivo -s arquivo -t fd -u arquivo -w arquivo -x arquivo -O arquivo -G arquivo -L arquivo -S arquivo -N arquivo -o opção -z string -n string string Significado O arquivo de nome arquivo existe O arquivo existe e é dispositivo tipo bloco O arquivo existe e é dispositivo tipo caracter O arquivo arquivo é diretório O arquivo arquivo existe O arquivo arquivo existe e é um arquivo normal O arquivo arquivo existe e tem atributo SGID O arquivo arquivo existe e é um link simbólico O arquivo arquivo existe e tem atributo sticky O arquivo arquivo existe e um named pipe O arquivo arquivo existe e tem permissão de leitura O arquivo arquivo existe e tem tamanho maior que zero O descritor de arquivos fd está aberto e é um terminal O arquivo arquivo existe e tem atributo SUID O arquivo arquivo existe e tem permissão de escrita O arquivo arquivo existe e tem permissão de execução O arquivo arquivo existe e pertence ao usuário O arquivo arquivo existe e pertence ao grupo O arquivo arquivo existe e é um link simbólico O arquivo arquivo existe e é um socket O arquivo arquivo existe e foi modificado após a última vez que foi lido A opção opção do shell está habilitadas O tamanho do string é zero O tamanho do string não é zero O tamanho do string não é zero Utilizando o Linux Operador arquivo1 -nt arquivo2 arquivo1 -ot arquivo2 arquivo1 -ef arquivo2 string1 == string2 string1 != string2 string1 < string2 string1 > string2 arg1 -eq arg2 arg1 -ne arg2 arg1 arg1 arg1 arg1 -lt -le -gt -ge arg2 arg2 arg2 arg2 121 Significado O arquivo1 é mais novo que o arquivo2 O arquivo1 é mais antigo que o arquivo2 Os arquivos arquivo1 e arquivos2 são o mesmo inodo do mesmo dispositivo O string1 é igual ao string2 O string1 é diferente do string2 O string1 é lexicograficamente menor que o string2 O string1 é lexicograficamente maior que o string2 Os argumentos arg1 e arg2 são aritmeticamente iguais Os argumentos arg1 e arg2 são aritmeticamente diferentes arg1 é aritmeticamene menor que arg2 arg1 é aritmeticament menor ou igual a arg2 arg1 é aritmeticament maior que arg2 arg1 é aritmeticament maior ou igual a arg2 Exemplos: hmarx@thor:~> [[ ! -a DIR ]] && mkdir DIR && echo Diretório DIR criado Diretório DIR criado hmarx@thor:~> [[ abacate < abacaxi ]] && echo Abacate precede Abacaxi Abacate precede Abacaxi hmarx@thor:~> [[ laranja > banana ]] || echo Laranja precede Banana hmarx@thor:~> [[ -N /var/spool/mail/hmarx ]] && eho Tenho e-mail novo Tenho e-mail novo hmarx@thor:~> o 122 Utilizando o Linux Comandos condicionais Como uma linguagem de programação, o bash possui mecanismos para tomadas de decisão ao executar os comandos. Convenciona-se que verdade é 0 (zero) e falso é qualquer valor diferente de 0. Isto vem do fato que a condição pode ser, e normalmente é, o resultado da execução de um programa. O valor 0 (zero) significa nenhum erro. Lembre-se: Condicional simples: if condição ; then comandos ; fi TRUE = Verdade é zero ! FALSE = Falso é qualquer valor diferente de 0 ! Condicional composto tipo 1: if condição ; then comandos1 ; else comandos2 ; fi hmarx@thor:~> true ; echo $? 0 hmarx@thor:~> false ; echo $? 1 hmarx@thor:~> if expr 3 \> 4 > then > ls > else > ps > fi 22768 p7 S 0:33 bash 27773 p1 S 0:27 bash 28003 p1 R 0:00 ps hmarx@thor:~> o Utilizando o Linux 123 Condicional composto tipo 2: if condição1 ; then comandos1 ; elif condição2 ; then comandos2 ; else comandosn ; fi Testes repetidos ! Execução condicional Podem ser utilizados os operadores lógicos && e ||, significando E e OU, respectivamente. Assim, em: $ comando1 && comando2 o comando2 só será executado se o comando1 retornar 0 (execução OK). É equivalente ao comando: if comando1 ; then comando2 ; fi E em: $ comando1 || comando2 o comando2 só será executado se o comando1 retornar um valor diferente de 0 (falhar). É equivalente ao comando: if ! comando1 ; then comando2 ; fi 124 Utilizando o Linux Comandos iterativos Teste de continuação do loop while condição do comandos done Teste de fim do loop until condição do comandos done hmarx@thor:~> for i in A B C D > do > echo $i > done A B C D hmarx@thor:~> o Loop controlado for nome [ in lista de palavras ] do comandos done Comando de seleção múltipla case valor padrão-1 ) comandos-1 ;; padrão-2 ) comandos-2 ;; ... esac hmarx@thor:~> cat que_e #!/bin/bash case $1 in [a-z]) echo $1 é letra minúscula ;; [A-Z]) echo $1 é letra maiúscula ;; [0-9]) echo $1 é numérico ;; *) echo $1 é caracter especial;; esac hmarx@thor:~ > que_e R R é letra maiúscula hmarx@thor:~> o Utilizando o Linux Diversos padrões podem ser separados por | em um ítem do case. Exemplo: ... case $OPT in help|ajuda) Help ;; start|iniciar) StartService ;; stop|parar) StopService ;; *) echo "Use $0 {help | start | stop}" echo " $0 {ajuda | iniciar | parar}" ;; esac ... 125 126 Utilizando o Linux Comando para geração de menu select nome [ in lista de palavras ] do comandos; done hmarx@thor:~> PS3="Escolha a fruta :" hmarx@thor:~> select fruta in uva maçã pera nenhuma > do > if [ $fruta == nenhuma ] > then > break > fi > echo Você escolheu $fruta > done 1) uva 2) maçã 3) pera 4) nenhuma Escolha a fruta :2 Você escolheu maçã 1) uva 2) maçã 3) pera 4) nenhuma Escolha a fruta :4 hmarx@thor:~> o Utilizando o Linux 127 test [ expressão ] test [ --help | --version ] [ expressão ] Comando interno do bash que avalia a expressão condicional expressão retornando o resultado. O comando [ é um sinônimo para o comando test mas que obriga a existência do ] para fechar o comando. Veja Expressões condicionais para as opções e operadores utilizados na expressão. hmarx@thor:~> [ -e /etc/named.conf ] && echo O BIND está instalado O BIND está instalado hmarx@thor:~> o 128 Utilizando o Linux Comandos Administrativos A seguir são mostrados alguns comandos principais utilizados para a administração do sistema Linux. Alguns deles só pode ser executado pelo super usuário. umask [ -p ] [ -S ] [ modo ] Comando interno do bash exibe ou define a máscara de criação de arquivos. O modo pode ser dado na forma de um número octal ou utilizando uma lista utilizando o formato u=rwx,g=rwx, o=rwx Algumas opções: -S Exibe a máscara no formato t=rwx -p Exibe apenas a máscara no formato octal ulimit [ opções ] [ limite ] Comando interno do shell exibe ou altera os limites impostos na utilização dos recursos do sistema pelos processos disparados pelo shell. Algumas opções: -S Utiliza o limite soft -H Utiliza o limite hard -a Exibe todos os limites -c Tamanho do arquivo core -d Tamanho máximo do segmento de dados -f Tamanho máximo dos arquivos criados -l Tamanho da memória travada -m Tamanho máximo da memória residente -n Número máximo de arquivos abertos -p Tamanho do buffer do pipe -s Tamanho máximo da pilha -t Tempo máximo de uso de CPU -u Número máximo de processos -v Tamanho da memória virtual Utilizando o Linux 129 useradd [ opções ] login Cria um usuário. Algumas opções: -c comentário -d dir -e data -f tempo -g grupo -G grupo, ... -m -p senha -s shell -u uid -k skel-dir -o Campo de comentário do /etc/passwd. Define dir como diretório pessoal. Define a data de expiração no formato YYYY-MM-DD. Define em quantos dias a conta do usuário será desabilitada após a expiração da senha. Define o grupo inicial (de login). Define a lista de grupos adicionais. Cria o diretório pessoal e copia o esqueleto para ele, se não existir. Senha criptografada. O default é desabilitar a conta. Define o login shell. Define o número do usuário UID (maior que 99 e que qualquer outro UID existente Define o diretório do esqueleto. O default é o /etc/skel. Em conjunto com -u força a criação do UID, mesmo que não único. As informações são armazenadas nos arquivos /etc/passwd e /etc/shadow. O arquivo /etc/passwd tem o seguinte formato: usuário:x:uid:gid:Nome[,outras informações]:diretóriopessoal:shell O x indica o uso do shadow suite, armazenando informações sobre as senhas no arquivo /etc/shadow. Em sistemas antigos, no lugar do x era colocada a própria senha criptografada do usuário. Um usuário poderá ser desabilitado substituindo o x por !. 130 Utilizando o Linux O arquivo /etc/shadow tem o seguinte formato: usuário:senha criptografada:t1:t2:t3:t4:t5:t6:t7 onde: a senha é criptografada utilizando DES - Data Encryption Standard, ou opcionalmente MD5 - Message Digest 5. t1 é o data da última alteração da senha t2 é o número de dias até que a senha possa ser trocada t3 é o número de dias até que a senha deva ser trocada t4 é o número de dias anterior a expiração da senha t5 é o número de dias para desabilitar a conta após a expiração da senha t6 é o data de desabilitação da conta t7 é um campo reservado Uma entrada com a senha criptografada em MD5 tem o formato parecido com o abaixo: usuario:$1$BziEuHN8$doX0S7wNN5U7bm5fQI1RR/:11697:0:99999:7::: Uma entrada com a senha criptografada em Blowfish tem o formato parecido com o abaixo: usuario:$2a$10$bAo0qgHv61OYmYdkqscQN.wew4h4mgYVcY5Uj.fuXQI1RNgHYFO6G:13313:0:99999:7::: Já uma entrada com senha criptografada em DES tem o formato parecido com o abaixo: usuario:Ak9K.CWRx7Fnk:11697:0:99999:7::: O método de criptografia (des, md5, blowfish) pode ser definido no arquivo /etc/default/passwd. Parâmetros adicionais de segurança podem ser definidos em /etc/security/pam_pwcheck.conf. Utilizando o Linux 131 useradd -D [ opções ] Exibe ou atualiza a informação default para usuário novo. Estas informações são armazenadas em /etc/default/useradd. Algumas opções: -D Exibe as informações default atuais Prefixo para o diretório pessoal. O login -b dir será adicionado automaticamente. -e data Data de expiraçãoda conta. -f dias Número de dias para desabilitar a conta após a expiração da senha. -g grupo Grupo inicial. Define o login shell. -s shell userdel [ -r ] login Remove o usuário local login, e, se -r for especificado, todo o diretório pessoal dele e sua caixa postal. O sistema não permite remover um usuário que está logado. groupadd [ -g gid [ -o ]] grupo Cria um grupo com nome grupo e valor numérico gid, que deve ser único se a opcão -o não for especificada. groupdel grupo Remove o grupo de nome grupo. 132 Utilizando o Linux usermod [ opções ] login Modifica um usuário. Algumas opções: -c comentário -d dir -e data -f tempo -g grupo -G grupo, ... -m -p senha -s shell -u uid -l novo-login -L -U Campo de comentário do /etc/passwd. Define dir como diretório pessoal. Define a data de expiração no formato YYYY-MM-DD. Define em quantos dias a conta do usuário será desabilitada após a expiração da senha. Define o grupo inicial (de login). Define a lista de grupos adicionais. Cria o diretório pessoal e copia o esqueleto para ele, se não existir. Senha criptografada. O default é desabilitar a conta. Define o login shell. Define o número do usuário UID (maior que 99 e que qualquer outro UID existente Define o novo login. Bloqueia o usuário (colocando ! no campo de senha) Desbloqueia o usuário (retirando o ! do campo o de senha) groupmod [ -g gid [ -o ]] [ -n novonome ] grupo Altera a identificacão do grupo grupo para gid e/ou o nome do grupo grupo para novonome . Utilizando o Linux 133 chfn [ opções ] login Altera as informações do usuário login no arquivo /etc/passwd. Se não for dada nenhuma opção, o chfn exibirá ps valores de cada campo, permitindo que seja alterado ou não. Algumas opções: Nome do usuário -f nome completo -w telefone Telefone do trabalho Número da sala -r sala -h telefone Telefone pessoal Outra informação não definida pelo campo -o info GCOS. chsh [ -s shell ] [ login ] Altera o login shell do usuário login ou do usuário corrente. O shell deve estar definido em /etc/shells. Se não for informado o shell, chsh irá exibir o corrente e permitirá que seja alterado ou não. 134 Utilizando o Linux Tratamento dos Sistemas de Arquivos mknod [ opções ] nome tipo major minor Cria um arquivo especial (nodo), chamado nome, e tipo tipo. Major e minor são os números que definem o arquivo especial (entrada na tabela de estratégia do kernel e identificador do dispositivo). Estes números não podem ser informados para o tipo p. Os tipos são: b arquivo tipo bloco (com buffer) c, u arquivo tipo caracter (sem buffer) p arquivo tipo FIFO Algumas opções: Define modo de permissão -m, --mode=modo --help Exibe uma ajuda --version Apenas exibe a versão Utilizando o Linux 135 fdisk [ -u ] [ -b tam ] disp fdisk -l [ -u ] [ -b tam ] disp ... fdisk -s partição ... Exibe ou manipula as partições dos discos. Algumas opções: -u Mostra tamanho em setores e não em cilindros. -l Apenas lista a tabela de partição dos dispositivos especificados. Exibe o tamanho da partição em blocos. -s partição -b tam Define o tamanho do setor (512, 1024 ou 2048). Obs: kernels atuais já sabem o tamanho do setor -v Exibe a versão do fdisk. thor:~ # fdisk -l /dev/sdc Disk /dev/sdc: 255 heads, 63 sectors, 1116 cylinders Units = cylinders of 16065 * 512 bytes Device Boot /dev/sdc1 /dev/sdc2 /dev/sdc3 /dev/sdc5 /dev/sdc6 /dev/sdc7 /dev/sdc8 /dev/sdc9 thor:~ # o Start 1 18 82 82 74 66 721 913 End 17 81 1116 273 465 720 912 1116 Blocks 136521 514080 8313637+ 1542208+ 1542208+ 2048256 1542208+ 1638598+ Id 82 83 5 83 83 83 83 83 System Linux swap Linux Extended Linux Linux Linux Linux Linux 136 Utilizando o Linux mkfs [ -V ] [ -t tipo ] [ opções ] disp [ blocos ] Cria o sistema de arquivos de tipo tipo no dispositivo disp utilizando blocos blocos, com as opções específicas do tipo definido. O número de blocos por default é o tamanho de disp. Algumas opções: -V Modo verboso. Há mkfs.tipo (mkfs.ext2, mkfs.ext3, mkfs.vfat, mkfs.reiserfs, etc) que podem ser utilizados para criar o sistema especificado. mke2fs [ opções ] disp [ blocos ] Cria um sistema de arquivos ext2. Algumas opções: -c Verifica o dispositivo por setores defeituosos no dispositivo (bad-blocks). -b tam Usa tam (1024, 2048 ou 4096) como tamanho do bloco. -i b Usa b bytes por inodo. -L label Define o label do volume. -j Cria um sistema journal ext3. -J opções Opções para o sistema journal ext3. -n Não cria o sistema de arquivos, apenas exibe o que vai ser feito. Define manualmente o número de inodos do -N n sistema de arquivos (que é normalmente baseado no número de blocos e no número de bytes por inodo). -f tam Define o tamanho do fragmento em bytes. -v Modo verboso. Utilizando o Linux mkdosfs 137 [ opções ] disp [ blocos ] Cria um sistema de arquivos MS-DOS. Algumas opções: -A Cria uma variante do Atari. -b setor Define o setor de backup do setor de boot para FAT32. -c Verifica se há setores defeituosos no dispositivo. -C Cria um arquivo -f n Cria n (1 ou 2) FATs (default é 2). Tamanho da FAT (12, 16 ou 32). Pelo tamanho -F tam do sistema de arquivos, será automaticamente selecionado 12 ou 16. O tamanho de FAT 32 deve ser definido explicitamente, caso desejado. -i volid Define o identificador de volume (32 digitos em hexadecimal). Define o label do sistema de arquivos (no máximo -n label 11 caracteres). -r rootdir Número de entradas do diretório raiz. O default é 112 ou 224 para disquetes e 512 para discos rígidos. Usa spc setores por cluster. Deve ser potência de -s spc 2 (1, 2, 4, 8, ..., 128). -S bps Número de bytes por setor lógico (512, 1024, 2048, 8192, 16384 ou 32768). Número de setores reservados. O default é 32 para -R reserva FAT 32, e 1 para FAT 12 ou 16. -v Modo verboso. 138 Utilizando o Linux mkreiserfs [ opções ] disp [ blocos ] Algumas opções: -h { r5 | tea | rupasov} Especifica a função hash para os nomes de arquivos. O default é r5. -v { 3.5 | 3.6} Versão do formato do reiserfs. -j path, --jounal-device path Caminho para o local de armazenamento do jornal. -s tam, --journal-size tam Tamanho em blocos do jornal. -t max, --transaction-max-size max Tamanho máximo do jornal de transações. mkswap [ opções ] disp [ tamanho ] Cria uma área de swap no dispositivo ou arquivo disp. Algumas opções: -c Verifica o dispositivo por blocos defeituosos. -p tam Define o tamanho da página. -v0 Cria uma área de swap com estilo antigo. -v1 Cria uma área de swap com estilo novo. swapon [ -h | -V ] Algumas opções: -h -V Exibe uma ajuda. Exibe a versão swapon -a [ -v ] Ativa todas os dispositivos definidos como swap em /etc/fstab. Algumas opções: -v Modo verboso. Utilizando o Linux 139 swapon [ -v ] [ -p pri ] disp ... Ativa a área de swap em disp com prioridade pri. A prioridade é um número inteiro de 0 a 32767. Algumas opções: -v Modo verboso. swapon -s Exibe o sumário de uso da(s) áreas de swap ativas. thor:~ # swapon -s Filename /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 thor:~ # o Type partition partition partition partition Size 530104 506008 506008 506008 Used 51976 51852 51736 52036 Priority 42 42 42 42 swapoff [ -h | -V ] Algumas opções: -h -V Exibe uma ajuda. Exibe a versão swapoff -a Desativa todas os dispositivos definidos como swap em /etc/fstab. swapoff disp Desativa a área de swap em disp. 140 Utilizando o Linux de quota Para que um sistema de arquivos possa ter o controle do uso do espaço em disco, le deve ser montado com a opção usrquota. Esta opção pode ser incluída no arquivo /etc/fstab., como o exemplo abaixo: /dev/disk/by-id/ata-ST3160215A_9RAB8FSE-part2 /work ext3,defaults,usrquota Veja o comando mount mais a frente. quota [ -F formato ] [ { -g | -u | -v | -s } | -q ] quota [ -F formato ] [ { -u | -v | -s } | -q ] usuário quota [ -F formato ] [ { -g | -v | -s } | -q ] grupo Exibe a utilização e os limites do uso do disco e sistema de arquivos. Algumas opções: -F formato Exibe a quota para o formato especificado, (vfsold, vfsv0, rpc e xfs) -g Exibe a quota para grupos dos quais o usuário é membro -u Exibe a quota dos usuários -v Exibe a quota em sistemas de arquivos que não possuem área alocada -s Tenta escolher unidades para exibição das quotas -q Exibe mensagens apenas para quotas excedidas Utilizando o Linux 141 quotaon [ -v | -u | -g | -f ] fs quotaon -a [ -v | -u | -g | -f ] Habilita o sistema de quotas no sistema de arquivos fs (ou em todos os definidos em /etc/fstab). Os arquivos de controle de quotas devem existir no diretório raíz do sistema de arquivos. Algumas opções: -a Habilita quota para todos os sistemas de arquivos não remotos (não NFS) automaticamente montados -v Exibe mensagem para cada sistema de arquivos tratado -u Trata quota de usuários -g Trata quota de grupos -f Equivale a quotaoff quotaoff [ -v | -u | -g ] fs quotaoff -a [ -v | -u | -g ] Desabilita o sistema de quotas no sistema de arquivos fs (ou em todos os definidos em /etc/fstab). Os arquivos de controle de quota devem existir no diretório raíz do sistema de arquivos. Algumas opções: -a Habilita quota para todos os sistemas de arquivos não remotos (não NFS) automaticamente montados -v Exibe mensagem para cada sistema de arquivos tratado -u Trata quota de usuários -g Trata quota de grupos 142 Utilizando o Linux repquota [ -v | -u | -g | { -t | -n } ] [ -F formato ] fs repquota -a [ -v | -u | -g | -s | { -t | -n } ] [ -F formato ] Sumariza as quotas de um sistema de arquivos. Algumas opções: -a Reporta todos os sistemas de arquivos em /etc/mtab -v Exibe todas as quotas e de forma mais verbosa -u Trata quota de usuários -g Trata quota de grupos -F formato Exibe a quota para o formato especificado, (vfsold, vfsv0, rpc e xfs) -t Trunca nome com mais de 9 caracteres -n Não resolve UID e GID -s Tenta exibir a quota em unidades mais apropriadas edquota [ -p protótipo | -u | -g | -r ] [ -F formato ] usuário ... edquota [ -u | -g ] [ -F formato ] -t Edita a quota de usuários. Algumas opções: -r -u -g -F formato -p protótipo -t Edita as quotas em máquinas remotas Trata quotas de usuários Trata quotas de grupos Exibe a quota para o formato especificado, (vfsold, vfsv0, rpc e xfs) Duplica a quota do usuário protótipo para os usuários especificados Edita os limites de tempo soft. Utilizando o Linux 143 setquota [ -r | -u | -g ] [ -F formato ] nome bsl bhl isl ihl { -a | fs} setquota [ -r | -u | -g ] [ -F formato ] [ -p protótipo ] nome { -a | fs} setquota -t [ -r | -u | -g ] [ -F formato ] bgrl igrl nome { -a | fs} Estabelece quotas para usuários ou grupos para o sistema de arquivos fs. Os limites são: bsl Limite de blocos soft bhl Limite de blocos hard Limite de inodos soft isl ihl Limite de inodos hard Limite de blocos grace bgrl igrl Limite de inodos grace Algumas opções: -r Edita as quotas em máquinas remotas -u Trata quotas de usuários -g Trata quotas de grupos Exibe a quota para o formato especificado, -F formato (vfsold, vfsv0, rpc e xfs) -p protótipo Duplica a quota do usuário protótipo para os usuários especificados -t Edita os limites de tempo soft. -a Trata todos os sistemas de arquivos em /etc/mtab 144 Utilizando o Linux quotacheck [ -u | -g | -b | -c | -f | -i | -n | -v | -d | -M | -m | -R ] [ -F formato ] -a quotacheck [ -u | -g | -b | -c | -f | -i | -n | -v | -d | -M | -m | -R ] [ -F formato ] fs Verifica o sistema de arquivos, cria e repara os arquivos de quota Algumas opções: -b Força a criação de arquivos de backup -v Modo verboso -d Modo de depuração -u Verifica apenas usuários em /etc/mtab -g Verifica apenas grupos em /etc/mtab -c Cria novos arquivos de quota -f Força a verificação de sistemas com o o sistema de quotas já habilitado -M Força a verificação de sistemas de arquivos montados read/write -m Não tenta montar um sistema read-only -i Modo interativo -n Duplica entradas para um usuário ou grupo na reparação dos arquivos de quotas -a Verifica todos os sistemas de arquivos não remotos (não NFS) -R Exclui o sistema de arquivos raiz Exibe a quota para o formato especificado, -F formato (vfsold, vfsv0, rpc e xfs) Duplica a quota do usuário protótipo para -p protótipo os usuários especificados -t Edita os limites de tempo soft. Utilizando o Linux 145 mount [ { -l | -h | V } ] Exibe os sistemas montados, uma ajuda ou a versão. Algumas opções: -l Exibe o label se existir -h Ajuda sumária -V Versão do mount --help Exibe uma ajuda mount -a [ { -f | -F | -n | -r | -s | -v | -w } ] [ -t tipo ] Monta todos os sistemas de arquivos definidos em /etc/fstab, opcionalmente do tipo tipo, que não possuam a opção noauto. Algumas opções: -f Simula (fake). Útil com -v para ver o que o mount irá fazer. -F Executa um fork, montando os sistemas de arquivos simultaneamente. -n Monta os sistemas de arquivos sem gravar as informações no arquivo /etc/mtab. -r Monta apenas para leitura (read-only). Equivalente a -o ro -s Ignora opções não suportadas pelo sistema de arquivos. -v Modo verboso. -w Monta em modo normal de leitura e escrita (read/write). Equivalente a -o rw. O Linux suporta atualmente diversos tipos de sistemas de arquivos. Entre eles estão: adfs, affs, coherent, coda, devpts, ext, ext2, ext3, fat, hfs, hpfs, iso9960, jffs, jfs, minix, msdos, ncp, nfs, ntfs, proc, qnx4, reiserfs, romfs, smbfs, sysv, udf, ufs, umsdos, vfat, xenix, xfs, e xiafs. É possível ainda montar uma parte do sistemas de arquivos em outra com a opção --bind. As informações ficarão disponívis em dois lugares: mount --bind diretório1 diretório2 146 Utilizando o Linux mount [ { -f | -n | -r | -s | -v | -w } ] [ -o opções ] { disp | dir } Monta o sistema de arquivos definido em /etc/fstab pelo dispositivo disp, ou pelo diretório dir utilizando as opções opções. Algumas opções de -o (que podem ser definidas em /etc/fstab): rw Normal de leitura e escrita. ro Apenas leitura. [no]async (Não) realiza operações de E/S de forma assíncronas. [no]auto (Não) faz a montagem automática com a opção -a [no]exec (Não) permite execução de arquivos binários. defaults Equivale a rw, suid, dev, exec, auto, nouser, e async. [no]atime (Não) atualiza tempo de acesso dos inodos. [no]dev (Não) interpreta arquivos especiais [no]suid (Não) permite atributos SUID e SGID nos inodos. [no]user (Não) permite que usuários comuns montem o sistema de arquivos remount Tenta remontar um sistema de arquivos já montado. loop[=dev] Utiliza o loop device dev Dependendo do tipo do sistema de arquivos, há outras opções disponíveis. Utilize man mount para verificar as opções para cada tipo suportado pela versão do kernel do Linux que esteja utilizando. mount [ { -f | -n | -r | -s | -v | -w } ] [ -t tipo ] [ -o opções ] disp dir Monta o sistema de arquivos do tipo tipo no dispositivo disp no diretório dir, utilizando as opções opções. Utilizando o Linux 147 umount [ { -h | -V } ] Exibe uma ajuda ou a versão. Algumas opções: -h Ajuda -V Versão do mount umount -a [ { -n | -r | -v | -f } ] [ -t tipo ] Desmonta todos os sistemas de arquivos, opcionalmente do tipo tipo, definidos em /etc/fstab. Algumas opções: -n Desmonta sem escrever em /etc/mtab. -r Em caso de falha, tenta remontar somente para leitura. -f Força a desmontagem. -v Modo verboso. umount [ { -n | -r | -v | -f} ] { disp | dir } ... Desmonta os sistemas de arquivos montados do dispositivo disp ou no diretório dir. Algumas opções: -n Desmonta sem escrever em /etc/mtab. -r Em caso de falha, tenta remontar somente para leitura. -f Força a desmontagem. -v Modo verboso. 148 Utilizando o Linux Módulos de dispositivos e serviços dmidecode [ opções ] Lista a tabela DMI (Desktop Management Interface), que contem a descrição dos componentes de hardware. Algumas opções: -h Ajuda -V Versão do dmidecode -d dev-mem Lê a memória do dispositivo dev-mem -q Silencioso -s texto Exibe apenas entradas com o texto -u Não decodifica -t tipo Só exibe entrada do tipo especificado Tipos válidos: bios, system, baseboard, chassis, processor, memory, cache, connector e slot venus:~ # dmidecode # dmidecode 2.10 SMBIOS 2.3 present. Handle 0x0001, DMI type 1, 25 bytes System Information Manufacturer: System Manufacturer Product Name: System Name Version: System Version Serial Number: SYS-1234567890 UUID: Not Settable Wake-up Type: Power Switch Handle 0x002E, DMI type 32, 11 bytes System Boot Information Status: No errors detected Utilizando o Linux 149 lspci [ opções ] Lista todos os dispositivos do barramento PCI Algumas opções: -v Verboso -n Mostra a identificação numérica -t Mostra a árvore dos dispositivos -x Mostra um dump em hexadecimal da área de configuração do dispositivo Mostra apenas os dispositivos especidicado -s [[bus]:[slot]].[função]] pelo barramento bus, slot e função, onde o sinal * siginifica qualquer valor -d [fornecedor]:[dispositivo] Mostra apenas os dispositivos identificados com o ID do fornecedor e dispositivo. Especifica outro diretório, o default é o -P diretório /proc/bus/pci -M Habilita o mapeamento do barramento -G Habilita depuração do acesso ao PCI lsusb [ opções ] Lista todos os dispositivos do barramento USB Algumas opções: -v, -vv Verboso e mais verboso -t Mostra a árvore dos dispositivos -p diretório Especifica outro diretório, o default é o /proc/bus/usb -s [[bus]:[dispositivo]] Mostra apenas os dispositivos especidicado pelo barramento bus, e dispositivo. -d [fornecedor]:[dispositivo] Mostra apenas os dispositivos identificados com o ID do fornecedor e dispositivo. -D dispositivo Mostra apenas as informações sobre o dispositivo especificado 150 Utilizando o Linux usbview Lista todos os dispositivos USB em modo gráfico. pnpdump [ opções ] [ [ n ] porto ] Mostra as informações sobre os n dispositivos Plug-And-Play do barramento ISA através do porto porto. O porto deve estar na faixa 0x203 a 0x3ff. Algumas opções: -h, --help Ajuda -c, --config Procura determinar a melhor configuração -d, --dumpregs Exibe o conteúdo de todos os registradores de configuração -i, --ignorecsum Ignora erros de checksum. -v, --version Exibe a versão do pnpdump -m, --mask Exibe a máscara de DMAs e IRQs no lugar da lista de números de DMA e IRQ -o arq, --outpputfile=arq Gera a saída no arquivo arq e não na saída padrão Utilizando o Linux 151 isapnp [ opções ] arq Configura dispositivos do barramento ISA PnP a partir do arquivo de configuração arq. Algumas opções: -h, --help Ajuda -c, --config Procura determinar a melhor configuração lsdev Lista as informacões sobre o hardware instalado (DMA, IRQ e portos de I/O). thor:~ # lsdev Device DMA IRQ I/O Ports -----------------------------------------------0000:00:04.1 0170-0177 01f0-01f7 0376-0376 03f6-03f6 d800-d80f 0000:00:04.2 d400-d41f 0000:00:04.3 d000-d01f 0000:00:04.4 e800-e80f 0000:00:06.0 b800-b8ff 0000:00:08.0 b400-b4ff 0000:00:09.0 b000-b0ff 0000:00:0a.0 a800-a83f acpi 9 ACPI e400-e403 e404-e405 e408-e40b e410-e415 e420-e423 aic7xxx 10 cascade 4 2 dma 0080-008f dma1 0000-001f dma2 00c0-00df Ensoniq a800-a83f Ensoniq AudioPCI 11 152 Utilizando o Linux lsmod [ opções ] Lista os módulos carregados. Algumas opções: -h, --help Ajuda -V, --version Exibe a versão do lsmod insmod [ opções ] módulo [ symbol=valor ... ] Insere um módulo carregável no kernel em execução. Algumas opções: -f, --force Tenta carregar o módulo independente da versão do kernel -k, --autoclean Torna o módulo auto removível quando não utilizado por um período de tempo pelo kerneld (normalmente 1 minuto) -L, --lock Utiliza o flock para evitar a carga simultâneas do mesmo módulo -m, --map Exibe um mapa da carga -n, --noload Não carrega o módulo -p, --probe Testa se o módulo foi carregado com sucesso -s, --syslog Envia a saída para o syslog -X, --export Exporta os símbolos externos do módulo -x, --noexport Não exporta os símbolos externos do módulo Define explicitamente o nome do módulo, -o nome, --name=nome não utilizando o nome do arquivo objeto -h, --help Ajuda sumária -V, --version Exibe a versão do insmod Utilizando o Linux 153 rmmod [ { -a | -e | -r | -s | -h | -v | -V } ] [ -o opções ] { disp | dir } Remove módulos carregados do kernel em execução Algumas opções: -a, --all Marca os módulos não utilizados como auto-removíveis e remove os já marcados -r, --stacks Remove uma pilha de módulos -s, --syslog Envia a saída para o syslog -e, --persist Salva os dados persistentes do módulo sem remover o módulo -h, --help Ajuda sumária -v, --verbose Modo verboso -V Exibe a versão do rmmod 154 Utilizando o Linux depmod { -a | -A } [ opções ] depmod [ opções ] módulo1.o módulo2.o ... Trata a descrição de dependência entre módulos carregáveis Algumas opções: -a Pesquisa por módulos em todos os diretórios especificados no arquivo de configuração /etc/modules.conf ou /etc/modprobe.conf -A Compara a data/hora dos arquivos e, se for necessário, opera como -a -e Exibe os símbolos não definidos -n Exibe a lista de dependências na saída padrão em vez de gravar no diretório /lib/modules -s Envia os erros para o syslog -q Modo silencioso -r Permite a carga de módulos que não sejam do usuário root -h Ajuda Usa o diretório dir em vez do diretório -b dir /lib/modules -C arquivo Usa o arquivo de configuração arquivo, em vez de /etc/modules.conf Define o arquivo com o mapa de símbolos -F simbolos do kernel. -V Exibe a versão do depmod Utilizando o Linux 155 modprobe [ { -a | -d | -n | -q | -v } ] [ -C arq ] módulo [ symbol=valor ... ] modprobe [ { -a | -d | -n | -q | -v } ] [ -C arq ] [ -t tipo ] padrão modprobe -l [ -C arq ] [ -t tipo ] padrão modprobe -c [ -C arq ] modprobe -r [ { -d | -n | -q | -v } ] [ -C arq ] [ módulo ... ] modprobe -V Tratamento de alto nível dos módulos carregáveis. Algumas opções: -a, --all Carrega todos os módulos definidos -c, --showconfig Mostra a configuração corrente utilizada -d, --debug Mostra informações sobre a representação interna da pilha de módulos -k, --autoclean Marca os módulos como auto removíveis -l, --list Exibe os módulos definidos no padrão -n, --show Apenas exibe o que seria feito -q, --quiet Modo silencioso -r, --remove Remove os módulos ou faz a auto remoção -s, --syslog Envia a saída para o syslog -t tipo, --type tipo Considera apenas os módulos do tipo encontrados em qualquer subdiretório /tipo/ Utiliza o arquivo arq em vez do arquivo -C arq, --config arq /etc/modules.conf -h Ajuda -V, --version Exibe a versão do lsmod 156 Utilizando o Linux modinfo [ opções ] módulo Exibe informações sobre módulos carregáveis. Algumas opções: -a, --author Exibe o autor do módulo -d, --description Exibe a descrição do módulo -l, --license Exibe a forma de licença do módulo -n, --filename Exibe o nome do arquivo do módulo Exibe as informações definidas no -f str, --format str formato str -p, --parameters Exibe os parâmetros do módulo -V, --version Exibe a versão do modinfo -h, --help Exibe ajuda O formato str pode conter as especificações: %l licensa %a autor %d descrição %p parâmetros thor:~ # modinfo -n ne /lib/modules/2.4.10-smp/kernel/drivers/ne.o thor:~ # modinfo ne filename: /lib/modules/2.4.21-99-default/kernel/drivers/net/ne.o description: "NE1000/NE2000 ISA/PnP Ethernet driver" author: <none> license: "GPL" parm: io int array (min = 1, max = 4), description "I/O base address(es),required" parm: irq int array (min = 1, max = 4), description "IRQ number(s)" parm: bad int array (min = 1, max = 4), description "Accept card(s) with bad signatures" thor:~ # modinfo -f "A licenca do módulo %d é %p\n" ne A licença do módulo "NE1000/NE2000 ISA/PnP Ethernet driver" é "GPL" thor:~ # o Utilizando o Linux 157 Mensagens do sistema Linux Normalmente, um sistema Unix-like e seus serviços não exibem mensagens diretamente na console. Em vez disto eles utilizam o serviço syslogd. Este serviço é configurável através do arquivo /etc/syslog.conf. ou pelo arquivo /etc/syslog-ng/syslog-ng.conf. O arquivo syslog.conf contém a definição dos tipos de mensagens e a ação a ser tomada. Os tipos são definidos por uma lista de seletores compostos por um serviço (ou facility) e uma prioridade (ou priority), separados por um ponto (’.’). Um serviço pode ser: auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security (o mesmo que auth), syslog, user, uucp e local0 até local7. O símbolo asterisco (’*’) representa todos os serviços. Uma prioridade, em ordem crescente, pode ser debug, info, notice, warning, warn (o mesmo que warning), err, error (o mesmo que err), crit, alert, emerg, panic (o mesmo que emerg). De forma semelhante ao serviço, o símbolo asterisco (’*’) representa todas as prioridades e a palavra none representa nenhuma prioridade para o serviço especificado. As palavras error, warn e panic são obsoletas. Serão registradas as mensagens com prioridade maior ou igual à especificada. Uma prioridade pode ser precedida por ’=’ para especificar apenas aquela prioridade ou por ’!’ para excluir prioridades maiores ou igual à especificada. Podem ser inseridas linhas com comentários, começadas por ’#’. Múltiplos serviços com uma mesma prioridade podem ser separados por ’,’ e múltiplos seletores podem ser utilizados separados por ’;’. 158 Utilizando o Linux Uma ação pode ser um arquivo normal, um named pipe, um terminal, uma máquina remota, uma lista de usuários ou ’*’. Um arquivo normal é especificado pelo caminho (path) completo (iniciado por ’/’). Quando precedido por ’-’, a escrita é assíncrona (informações podem ser perdidas se ocorrer um crash no sistema antes da escrita no disco). Quando precedida por ’|’, a ação é um named pipe que deve ser criado por mkfifo antes de iniciar o syslogd. Isto é útil para depuração. Se o arquivo é do tipo tty, ele é um terminal como /dev/console. Ele é tratado de forma especial. O log será feito em uma máquina remota quando a ação for da forma @nome da máquina. Na máquina remota, o syslogd deve ser disparado com a opção de aceitar mensagens remotas (-r) Se a ação for uma lista de usuários separados por ’,’, o syslogd enviará a mensagem para os terminais onde aqueles usuários estiverem logados. Um ’*’ representa todos os usuários logados. Por exemplo, para mostrar todas as mensagens no terminal virtual tty12, gravar as mensagens do sistema de mail em /var/log/mail e as mensagens críticas (exceto as do kernel) no arquivo /var/log/critical, enviar as mensagens críticas do kernel para o servidor logserver, e enviar as mensagens do serviço LOCAL6 para os terminais onde estão sessões dos usuários jose e pedro, podemos utilizar: *.* mail.* *.=crit;kern.none kern.crit local6.* /dev/tty12 -/var/log/mail /var/log/critical @logserver jose, pedro Utilizando o Linux 159 Através do cron.daily, os arquivos de log serão comprimidos quando atingirem um determinado tamanho ou idade. Até o SuSE Linux 7.3, a definição de quais arquivos devem ser comprimidos é feita através do arquivo /etc/logfiles. Neste arquivo são também especificados o modo de criação do novo arquivo e seu dono e grupo, além de opcionalmente o serviço para o qual deve ser chamado o reload. (exemplos do logfiles) /var/log/messages +4096k 640 root.root /var/squid/logs/access.log +4096k 640 squid.root squid A partir do SuSE Linux 8.0, o cron.daily roda o /usr/sbin/logrotate que utiliza o arquivo de configuracão /etc/logrotate.conf, que inclui arquivos do diretório /etc/logrotate.d/. Neste diretório estão arquivos com sessões para cada arquivo. Um arquivo de log pode ser comprimido, apagado e até mesmo enviado por e-mail. (exemplo de uma entrada em /etc/logrotate.d/aaa_base) /var/squid/logs/access.log { compress dateext maxage 365 rotate 99 size=+4096k notifempty missingok create 640 squid.root postrotate /etc/init.d/squid reload endscript } dmesg [ -c | -n nível | -s tamanho ] [ -C arq ] Examina ou controla o buffer de mensagens do kernel. Algumas opções: -c Limpa o buffer após a impressão Define um buffer de tamanho bytes -s tamanho -n nível Define o nível das mensagens exibidas 160 Utilizando o Linux syslogd [ -a socket | -d | -f arq | -h | -l lista | -m intervalo | -n | -p socket | -r | -s domínios | -t | -v ] Utilitário de log do sistema linux. Algumas opções: -a socket Define sockets adicionais a serem utilizados pelo syslogd. -d Modo de depuração Utiliza o arquivo arq em vez do arquivo -f arq /etc/syslog.conf -h Reencaminha mensagens remotas para as máquinas definidas -l lista Definição de máquinas separadas por ’;’ -m intervalo Intervalo entre marcas (-- MARK --). O default é 20 minutos. O valor 0 desabilita a geração de marcas. Especifica socket alternativo ao /dev/log -p socket -r Habilita a recepção de mensagens da rede -s domínios Especifica a lista de domínios a serem eliminado dos nomes das máquinas, separados por ’;’para o log . -t Marca as mensagens reencaminhadas com o nome da máquina que a enviou. -v Exibe a versão do syslogd O syslogd reage a alguns sinais (veja o comando kill): SIGHUP SIGTERM SIGINT, SIGQUIT SIGUSR1 SIGCHLD Reinicializa o syslogd Termina o syslog Se habilitado, ignora o modo debug, senão termina o syslog Habilita/desabilita o modo debug Espera pelos processos gerados por mensagens enviadas para todos Utilizando o Linux 161 No syslog-ng, são definidos os objetos do tipo source, destination, log, filter, parser, rewrite rule e template. As definicões seguem o formato: options { parâmetro1; parâmetro2; ... }; tipo identificador { parâmetro, parâmetro2; ... }; Os parâmetros definem operações lógicas. level, facility, message, podendo incluir Alguns exemplos podem ser vistos no quadro abaixo. options { long hostnames(off); flush_lines(0); perm(0640); stats_freq(3600); }; source src { internal(); unix-dgram("/dev/log"); }; source chroots filter f_mail { facility(mail); }; filter f_acpid { lrvrl(emerg..noticed) and message(‘^acpid:‘); filter f_messages { not facility(news, mail) and not filter(f_iptables); }; destination console { file("/dev/tty12" owner(-1) group (-1) perm (-1)); destination(console); }; log { source(src); source (chroots); filter(f_console); destination (xconsole); }; 162 Utilizando o Linux Lembre-se da importância de analisar periodicamente os logs do sistema. Falhas em serviços ou dispositivos, escassez de recursos (memória e disco), tentativas de invasão, etc, podem ser detectadas antes de se tornarem críticas ou de tornar o sistema inutilizável. Instalando o Linux 163 5. Instalando o Linux Instalação do Linux Como já dito anteriormente, existem diversas distribuições do Linux. O processo de instalação pode variar um pouco dependendo da distribuição utilizada. Os princípios, entretanto, são válidos para qualquer uma delas. Das distribuições mais conhecidas internacionalmente (SuSE, Red Hat, Debian, Slackware, Caldera, Turbo Linux, ...), utilizaremos a Novell SuSE Linux e mais especificamente openSuSE Linux, criada pela empresa alemã SuSE Linux AG. Ela é considerada a melhor distribuição por sua estabilidade, facilidade de instalação e variedade de hardware suportado. Ela possui também uma das maiores quantidades de aplicativos. O Linux e os aplicativos podem ser instalados a partir de diversos meios: CD/DVD-ROM, pen drive, site FTP, diretório acessível do disco, disquete, ou servidor NFS. Atualment são disponíveis as versões para 32 e 64 bits. 164 Instalando o Linux Antes de iniciar a instalação propriamente dita, deve ser feito um planejamento da instalação. Este planejamento consiste em: • Definição da função do equipamento » Servidor ou Estação de trabalho * isto irá definir quais pacotes você deve instalar » Serviços a serem instalados * ftp, http, e-mail, DNS, telnet, ... » Aplicativos a serem instalados * office, desktop publishing, desenvolvimento aplicativos, processamento de imagens, ... de Instalando o Linux 165 • Definição dos parâmetros de rede » protocolos e interconectividade * TCP/IP, IPX, SMB, AppleTalk, ... » nomes e endereços * domínio e máquina. • Definição do espaço em disco » Partições do disco * primárias e secundárias * nativa Linux x DOS FAT »» partição e mount points * discos lógicos * área de swap »» função do tamanho da memória principal e dos serviços e aplicativos em execução O Linux poderá ser instalado em qualquer particão acessível pelo BIOS. Utilizando-se o LILO (Linux Loader), ou o GRUB, apenas o primeiro estágio do LILO (ou do GRUB) precisará estar em uma partição física acessível pelo BIOS. Isto é, o Linux e seus aplicativos poderão estar em uma partição lógica, em outro disco que não o primário e até mesmo em um disco de um servidor. Todas a distribuições atuais utilizam o GRUB. Se você tiver um disco com Windows em que não haja partição livre (não alocada), o processo de instalação do SuSE Linux irá automaticamente sugerir a redução da partição Windows e a criação de partições para o Linux no espaço livre gerado. Você poderá modificar a sugestão redefinindo o particionamento do disco. Lembre-se de que os dados de uma partição alterada manualmente serão perdidos ! 166 Instalando o Linux O Boot do Linux Você pode compartilhar o disco de seu computador entre diversos sistemas operacionais. Isto quer dizer que você poderá optar entre carregar o Linux® ou o Windows® ou o DOS® ou qualquer outro sistema operacional que esteja instalado em seu computador. Para que o seu computador rode Linux, o BIOS - Basic Input/Output System - deve ser capaz de carregar o kernel (ou o o primeiro estágio do LILO ou do GRUB) a partir de um disquete, CD, DVD ou do disco rígido. Existem duas formas básicas: • • o BIOS carrega o loader do kernel o BIOS carrega o LILO - LInux LOader ou o GRUB - GRand Unified Bootloader. Quando o BIOS carrega o kernel do Linux diretamente, você não terá a chance de escolher o boot de outro sistema operacional que porventura esteja instalado em seu computador. Através do LILO ou do GRUB, você poderá facilmente escolher o sistema operacional a ser carregado. O LILO poderá ser instalado no master boot record, no boot record da partição raiz, ou em um disquete. O master boot record é o primeiro setor do disco de boot de seu computador. Nele está um pequeno programa que irá carregar o sistema operacional. Caso decida instalar o LILO no boot record da partição raiz, o seu disco já deverá conter um programa de boot no master boot record. Este pode ser, por exemplo, o setor de boot do Windows NT®, o MultiBoot do OS2®. Após carregado, o kernel do Linux irá identificar o hardware, carregar os módulos necessários e inicializar os serviços instalados e configurados. Instalando o Linux 167 Instalação do SuSE Linux O SuSE Linux poderá ser instalado de diversas formas. Supondo a instalação a partir de um kit, ele pode ser feito através de boot de CD, DVD, pen drive, rede ou de disquete (quando o computador não possui CD/DVD ou o BIOS não consegue dar boot de CD/DVD). Tanto o CD/DVD quanto o disquete possuem o LILO (ou o GRUB a partir da versão 8.1). Ele será carregado e exibirá um menu em uma tela gráfica. Em versões antigas, o LILO exibe o prompt: LILO Boot: Nas versões mais recentes (a partir da 7.0), O GRUB exibe um menu gráfico com a opção de instalação, boot do sistema já instalado ou recuperação de uma instalação. Você poderá escolher se a instalação será feita em modo texto ou modo gráfico em modo VGA (640x480) ou SuperVGA (800x600 ou 1024x768), ou mesmo maior. As resoluções suportadas são automaticamente detectadas. Selecione o modo de instalação no menu, e simplesmente tecle ©. 168 Instalando o Linux Será então carregado o kernel do Linux, que executará o linuxrc. Este programa standalone irá permitir que você configure a língua de instalação (português, inglês, alemão, francês, ...), o tipo de monitor (colorido ou monocromático), o fuso horário e o modelo do teclado. No SuSE Linux, a maioria dos dispositivos será detectada automaticamente. Caso o CD/DVD esteja acessível diretamente, será carregado o YaST. Em alguns casos você poderá adicionar módulos para dispositivos que o kernel não detectou automaticamente (como placa de rede, controladoras SCSI e CD-ROMs especiais). Alguns módulos de dispositivos poderão requerer parâmetros, como porta de I/O e IRQ. Para a instalação através de uma rede, forneça os parâmetros necessários: endereço IP local, máscara, endereços IP dos servidores de nome e NFS, e caso necessário, o gateway para acesso ao servidor NFS. Selecione então a fonte de instalação (CD-ROM, NFS, FTP, ou diretório em disco). O linuxrc irá então carregar o YaST - Yet Another Setup Tool. Esta ferramenta será utilizada para instalar, configurar e administrar o sistema Linux. Até a versão SuSE Linux 7.3 existiam duas versões do YaST: a interface em modo texto, YaST1, e a interface texto/gráfica, YaST2. A partir da versão 8.0, há apenas o YaST2, que irá automaticamente detectar o modo de execução (texto ou gráfico). No início da instalação, você poderá definir o modo em que o YaST2 irá trabalhar (incluindo a resolução em modo gráfico). Os modos de operação texto ou gráfico seguem a mesma semântica. Textos com caracteres ressaltados "simulam" os botões, menus e checkboxes da interface gráfica. Tanto a interface gráfica quanto a texto são muito simples e intuitivas, possuindo a mesma funcionalidade. Instalando o Linux 169 Com o YaST, você pode instalar a partir do zero ou atualizar uma versão de Linux já existente em seu computador. Se você está fazendo uma atualização, o YaST detectará a instalação prévia. Em alguns casos você precisará informar qual a partição raiz. Em uma instalação inicial, você precisa definir os discos e as partições e seus mount points a serem utilizados pelo Linux. O YaST poderá fazer automaticamente o particionamento se você quiser. O YaST possui uma ferramenta para redimensionar partições do disco, muito útil quando o disco já possui, por exemplo, o Windows ocupando todo o disco. O YaST já irá apresentar uma sugestão para o redimencionamento. 170 Instalando o Linux Mesmo tendo uma memória principal de bom tamanho, crie uma área de swap. O tamanho desta área dependerá dos tipos de aplicações a serem executadas concorrentemente no equipamento, e do tamanho da memória real instalada. Uma estação de trabalho tem tipicamente entre 128 e 512MB de memória, sendo sugerida uma área de swap de no mínimo 128 MB. Servidores podem tipicamente ter entre 256 MB e 4 GB de memório, dependendo da aplicação. Sugerimos uma área de swap de no mínimo 512 MB. A exigência de memória das recentes aplicações gráficas e de banco de dados poderá exigir mais memória principal e adicionar área de swap maior pode permitir que a aplicação rode em detrimento da velocidade. Lembre-se que um equipamento com uma CPU rápida (acima de 700MHz) poderá parecer muito lento se o sistema necessitar da utilização constante da área de swap porque a velocidade de acesso a disco é muitíssimo inferior às velocidades da CPU e da memória. A decisão de criar apenas uma partição raiz ou dividir a instalação em partições como /, /boot, /opt, /var, /usr, /home e outras, só depende da forma que você prefere trabalhar e gerenciar seus arquivos e backups. Em servidores, sugerimos dividir em partições para a melhor administração e controle do uso do espaço em disco pelos serviços e usuários. Para melhor expansibilidade existe a opção do LVM - Logical Volume Manager - que permite adicionar partições ou discos dinamicamente aos sistemas de arquivos. Durante a criação das partições, o YaST irá criar o sistema de arquivos. Os sistemas de arquivos serão então montados nos mount points escolhidos. Para selecionar os pacotes, você pode optar por carregar uma configuração pré-definida pela SuSE ou alterar e criar a sua própria configuração. As configurações pré-definidas contém pacotes previamente marcados conforme o tipo de uso do computador (Estação de trabalho, servidor, sistema multimedia, ...). Você poderá também utilizar uma destas como base e incluir ou excluir pacotes individualmente. Você terá disponível mais de 8000 aplicativos nos mais de 3000 pacotes RPMs contidos nos CDs ou DVDs do SuSE Linux 10.1. Dependências entre pacotes serão verificadas automaticamente pelo YaST e após sua seleção, ele provavelmente marcará outros pacotes para a instalação. Instalando o Linux 171 Quando estiver satisfeito com a seleção, basta aceitar para iniciar a instalação. O YaST irá pedir para trocar os CDs quando necessário. Em alguns equipamentos, o YaST instalará o básico e deixará para completar a instalação após carregar o kernel instalado em seu disco. Para a instalação do kernel, o YaST poderá pedir para colocar o CD 1. Escolha o kernel apropriado ao seu equipamento. A partir do SuSE Linux 8.0, o kernel adequado será automaticamente instalado. Você pode criar um disquete de boot, mas isto raramente é necessário. O YaST irá fazer tudo automaticamente. Ele pedirá a senha do root e dará a opção para criar um usuário normal que deve ser utilizado para as tarefas rotineiras. Desta forma após o término da instalação o sistema já estará pronto para ser utilizado. Os passos seguintes servem de guia para uma instalação e configuração totalmente manuais. Lembre-se que o YaST já faz isto para você. 172 Instalando o Linux Configuração do boot loader O próximo passo é a configuração do boot loader. Aí você vai definir as opções de boot em seu computador. Você pode incluir uma nova configuração para cada opção de boot (Linux, Windows, SCO, ...). O nome escolhido (label) poderá ser utilizado no prompt do LILO para selecionar o sistema a ser carregado. Na versão 8.0 do SuSE Linux, o LILO será configurado automaticamente. Na versão 8.1, é o GRUB também é configurado automaticamente. Você poderá alterar a configuração sugerida. Os parâmetros a definir para cada configuração são: ∗ a partição a carregar (o YaST irá identificar automaticamente as partições Linux e Windows/DOS) ∗ os parâmetros adicionais para o kernel • tamanho de memória, controladores de discos, placas de rede, CDs, ... ∗ o tempo para o boot automático Escolhe-se então o local para a instalação do LILO: master boot record ou boot record da partição raiz. Após a confirmação, o YaST salvará as configurações em /etc/lilo.conf e executará o programa lilo, que instalará o LInux LOader. (exemplo de arquivo /etc/lilo.conf) # LILO configuration file # Start of LILO global Section boot=/dev/hda vga=normal timeout=100 # End LILO global Section image = /boot/vmlinuz root = /dev/hda1 label = Linux other = /dev/hda2 label = Windows table = /dev/hda A primeira imagem definida será o boot default. Existem diversas opções que poderão ser incluidas no arquivo /etc/lilo.conf para personalizar o LILO. Instalando o Linux 173 Caso utilize o GRUB, o arquivo com a configuração é o /boot/grub/menu.lst. (exemplo de arquivo /boot/grub/menu.lst) color white/blue black/light-gray default 0 timeout 8 gfxmenu (hd0,0)/message title Linux kernel (hd0,0)/vmlinuz root=/dev/hda3 vga=0x317 splash=silent desktop showpts initrd (hd0,0)/initrd title Floppy chainloader +1 title Failsafe kernel (hd0,0)/vmlinuz root=/dev/hda3 showopts ide=nodma apm=off acpi=off vga=normal nosmp noapic maxcpus=0 3 initrd (hd0,0)/initrd O YaST, então, recarregará o kernel definido e começará a configurar a instalação. Será pedido o timezone (região de fuso horário). Você poderá definir se o relógio da máquina está com o horário local ou com o GMT. Com certeza, você deverá selecionar horário local. São então pedidos o nome da máquina e o nome do domínio. Pode-se então configurar o ambiente de rede TCP/IP: • • • • Endereço IP, máscara e gateway Servidor de nomes (DNS) Se será servidor de NFS (compartilhamento de recursos para a rede) Utilização do sendmail (serviço de e-mail) 174 Instalando o Linux Agora você deverá escolher a senha do root. Este é o usuário mais importante dos sistemas Unix-like. Escolha uma senha que seja difícil de ser descoberta. Qualquer um que possuir esta senha terá acesso total e irrestrito aos seus arquivos ! Caso não tenha sido detectado automaticamente, configure o seu mouse. Você apenas precisa definir em que porta ele está conectado, e o tipo de protocolo a ser utilizado (normalmente Microsoft®). O YaST sugerirá a criação de um usuário comum local. Isto não será necessário caso você esteja configurando uma estação de uma rede que trabalhe com domínios NIS ou LDAP. Neste caso você deverá configurar o cliente NIS ou LDAP, fornecendo o nome do domínio e o IP do servidor NIS ou do servidor LDAP. Diversos serviços serão disparados e você poderá então iniciar uma sessão no Linux. Instalando o Linux 175 Instalação de outros aplicativos no Linux A instalação ou desinstalação de aplicativos contidos nos CDs ou no DVD da distribuição SuSE é feita de forma semelhante à feita durante a instalação inicial. Um aplicativo poderá ser instalado, reinstalado ou removido facilmente através dos menus do YaST. Pode-se também obter um aplicativo através de outros fornecedores ou através da Internet. Deve-se, em primeiro lugar, verificar a compatibilidade do aplicativo com a distribuição SuSE, sua versão, versão do kernel e de aplicativos de suporte como o XFree86, KDE e outros. Um aplicativo poderá ser obtido em formato objeto e/ou com seus fontes, normalmente na linguagem C ou C++. Os arquivos que compõem o aplicativo são colocados em pacotes. Os pacotes podem estar em diversos formatos. Os mais comuns (e indicados) são o TAR (comprimido ou não) e o RPM. Um pacote RPM é mais simples de instalar porque possui informações de dependências e rotinas de pré e pós instalação. Pacotes binários em formato TAR podem estar com os arquivos distribuidos em diretórios relativos à raiz (/) ou em diretórios temporários a partir do qual deverá ser executado um programa de instalação. No caso de pacotes com os fontes, estes devem ser extraídos para um diretório onde deverão ser compilados. Sugerimos utilizar sempre o gcc para compilar estes fontes. Os pacotes RPM com fontes de aplicativos no formato GNU, colocará um ou mais arquivos no formato TAR comprimido com bzip2, no diretório /usr/src/packages/SOURCES e os arquivos SPEC no diretório /usr/src/packages/SPECS. 176 Instalando o Linux Pode-se gerar o pacote RPM binário a partir do pacote fonte, utilizando, por exemplo, o comando rpmbuild --rebuild arquivo.src.rpm Para a compilação manual, utilize o comando tar com opção xj para extrair os fontes do arquivo com extensão .tar.bz2. Os arquivos fontes serão extraídos para um subdiretório, normalmente com o nome no formato aplicativoversão. Neste subdiretório deverá existir arquivos como INSTALL, README, CREDITS, README.txt, entre outros, com instruções para a compilação, instalação e utilização do aplicativo. Normalmente utilize o script configure para a geração do arquivo Makefile com as opções corretas para a sua plataforma e a instalação de SuSE Linux. O arquivo Makefile será utilizado pelo programa make para a geração e instalação dos objetos. Veja no capítulo 11 como utilizar o ambiente de desenvolvimento gcc e o make. Pode-se também gerar o pacote RPM binário a partir do arquivo tar com os fontes, utilizando, por exemplo, o comando rpmbuild -ta arquivo.tar.bz2 Instalando o Linux 177 Utilizando o RPM O RPM (Red Hat Package Manager) é um gerenciador de pacotes que permite a administração da instalação de aplicativos compatíveis com o LSBLinux Standard Base. Os arquivos .rpm possuem, além dos componentes do pacote, programas e informações para a instalação e remoção do pacote. O rpm guarda informacões sobre pacotes instalados em uma base de dados localizada em /var/lib/rpm. O programa rpm possui três modos básicos de operação: 1) criação de pacotes a partir de seus fontes para a instalação; 2) instalação, atualização e remoção de pacotes; e 3) consultas de informações sobre os pacotes. As opções gerais mais importantes do rpm são: --help --version --rcfile arquivo -v -vv Exibe uma ajuda Exibe a versão do rpm Especifica arquivo alternativo ao /etc/rpmrc e ~/.rpmrc Verboso Mais verboso Verificação de Pacotes A verificação de um pacote provoca a comparação dos arquivos instalados de um pacote com as informações localizadas nas bases de dados do RPM. A verificação compara tamanho, MD5 sum, permissões, tipo, dono e grupo de cada arquivo. Para esta verificação utilize a opção : -V pacote Verifica os arquivos do pacote O modo de verificacão aceita as seguintes opções: --nopgp --nogpg --nomd5 Ignora assinaturas pgp Ignora assinaturas GPG Ignora assinaturas MD5 178 Instalando o Linux Este modo de verificação pode ser útil caso haja alguma suspeita de que a base de dados RPM esteja corrompida. Esta verificação tem como saída para o usuário uma string de 8 caracteres, possivelmente um caracter ’c’ indicando um arquivo de configuração e depois o nome do arquivo. Cada um dos 8 caracteres significa um dos atributos do arquivo comparado com os valores definidos na base RPM, se ocorrer um ponto ’.’, significa que o atributo está OK. A tabela abaixo mostra o significado dos caracteres : Código 5 S L T D U G M Significado MD5 checksum Tamanho do arquivo Link simbólico Modificação do arquivo Device Usuário Grupo Modo (inclui permissões e tipo de arquivo) Exemplo: Vericando os arquivos do pacote netcfg : hmarx@thor:~> rpm -V netcfg S.5....T c /etc/HOSTNAME S.5....T c /etc/aliases S.5....T c /etc/defaultdomain S.5....T c /etc/exports S.5....T c /etc/hosts S.5....T c /etc/hosts.lpd S.5....T c /etc/inetd.conf S.5....T c /etc/networks hmarx@thor:~> o Instalando o Linux 179 Verificação de Autenticidade Após obter um pacote rpm a partir de um site na Internet ou de outra fonte qualquer, deve-se verificar sua autenticidade através da assinatura PGP do pacote. Para isto há a opção de verificação: -K pacote, --checksig pacote Verifica a assinatura do pacote A SuSE inclui uma assinatura GPG em seus pacotes desde a versão 7.1. Exemplo: Verificando a assinatura do pacote telnet : hmarx@thor:~> rpm -v --checksig /cdrom/suse/i586/telnet-1.0-291.i586.rpm telnet-1.0-291.i586.rpm: MD5 sum OK: 901045fd4c9fee03c03e33f310c603b9 gpg: Warning: unsafe permissions on directory "/usr/lib/rpm/gnupg" gpg: Warning: unsafe permissions on file "/usr/lib/rpm/gnupg/pubring.gpg" gpg: Signature made Mon Sep 9 19:27:35 2002 BRT using DSA key ID 9C800ACA gpg: Good signature from "SuSE Package Signing Key <[email protected]>" gpg: Warning: unsafe permissions on file "/usr/lib/rpm/gnupg/trustdb.gpg" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Fingerprint: 79C1 79B2 E1C8 20C1 890F 9994 A84E DAE8 9C80 0ACA hmarx@thor:~> o 180 Instalando o Linux Instalação de Pacotes A instalação de pacotes é feita através da opção -i ou, --install, seguida pelos nomes dos arquivos .rpm. Uma instalaçãopode ser feita utilizando simplesmente o comando rpm -i pacote.rpm. Além das opções globais, podem ser utilizadas: --excludepath caminho --relocate velho=novo --prefix dir --dbpath dir --excludedocs --force --allfiles --ignorearch --ignoresize --ignoreos --includedocs --justdb --nodeps --noorder --noscripts --notriggers --percent --replacefiles --replacepkgs --test --root dir Ignora os arquivos do caminho dado Reloca os arquivos do caminho velho para o novo Reloca o pacote para o diretório dir Usa o diretório dir como base de dados Não instala a documentação Um sinônimo para o uso das opções --replacefiles e --replacepkgs Instala todos os arquivos Não verifica a arquitetura Não verifica o espaço em disco Não verifica o sistema operacional Instala a documentação Apenas atualiza a base de dados Não verifica a dependência Não reordena a instalação do pacote para satisfazer as dependências Não executa qualquer script de instalação Não executa qualquer script que for disparado por este pacote Exibe percentuais enquanto instala Instala mesmo se o pacote substitua arquivos instalados Reinstala se já estiver instalado Não instala, apenas verifica se a instalação iria funcionar ou não Usa dir como diretório raiz Instalando o Linux --hash, -h 181 Imprime ’#’ durante o tratamento do pacote Exemplo: thor:~ # rpm -ivh apache-1.3.26-57.i586.rpm apache ############################ thor:~ # o Atualização de Pacotes A atualização de pacotes é feita através da opção -U ou, --upgrade, seguida pelos nomes dos arquivos .rpm. Uma atualização pode ser feita utilizando simplesmente o comando rpm -U pacote.rpm. Além das opções globais, podem ser utilizadas as mesmas opções disponíveis para a instalação, além de: --oldpackage Atualiza para uma versão anterior Exemplo: thor:~ # rpm -Uvh apache-1.3.26-57.i586.rpm apache ############################ thor:~ # o 182 Instalando o Linux Remoção de Pacotes A remoção de pacotes é feita através da opção -e ou, --erase, seguida pelos nomes dos arquivos .rpm. Uma remoção pode ser feita utilizando simplesmente o comando rpm -e pacote. Além das opções globais, podem ser utilizadas: --allmatches --dbpath dir --justdb --nodeps --noorder --noscripts --notriggers --root dir Remove todos os pacotes que combinam com o pacote Usa o diretório dir como base de dados Apenas atualiza a base de dados Não verifica a dependência Não reordena a instalação do pacote para satisfazer as dependências Não executa qualquer script de desinstalação Não executa qualquer script que for disparado por este pacote Usa dir como diretório raiz Instalando o Linux 183 Consulta de Pacotes A consulta de pacotes é feita através da opção -q ou, --query, seguida por nomes completos de arquivos ou por pacotes.rpm. Além das opções globais, podem ser utilizadas: -a, --all --root dir --dbpath dir --queryformat fmt -f arquivo -p pacotes --triggeredby pkt --whatprovides atrib --whatrequires atrib -i --changelog -l -s -d -c --provides -R, --requires --scripts --triggers Consulta todos os pacotes instalados Usa dir como diretório raiz Usa o diretório dir como base de dados Usa fmt para exibir as informações Consulta pelo pacote contendo o arquivo arquivo Consulta o pacote pacote (não instalado) Consulta pacotes disparados por pkt Consulta pacotes que provêm o atributo virtual atrib Consulta pacotes que requerem o atributo virtual atrib Exibe informações sobre o pacote Exibe log de alterações Exibe a lista de arquivos do pacote Exibe o status dos arquivos Exibe apenas os arquivos de documentação do pacote Exibe apenas os arquivos de configuração do pacote Lista atributos providos pelo pacote Lista as dependências do pacote Lista os scripts de (des)instalação Lista os scripts disparado 184 Instalando o Linux O formato fmt é uma versão modificada do formato do printf que aceita ainda o campo %{nome}, onde nome é um dos tags reconhecíveis pelo rpm. Utilize o comando rpm --querytags para obter uma lista destes tags. Exemplos: Consulta se o pacote apache está instalado e qual sua versão : hmarx@thor:~> rpm -q apache apache-1.3.26-57 hmarx@thor:~> o Consulta os arquivos do pacote inetd instalado : hmarx@thor:~> rpm -ql inetd /etc/init.d/inetd /usr/sbin/inetd /usr/sbin/rcinetd /usr/share/doc/packages/inetd /usr/share/doc/packages/inetd/AUTHORS /usr/share/doc/packages/inetd/COPYING /usr/share/doc/packages/inetd/NEWS /usr/share/doc/packages/inetd/README /usr/share/doc/packages/inetd/THANKS /usr/share/man/man5/inetd.conf.5.gz /usr/share/man/man8/inetd.8.gz hmarx@thor:~> o Consulta qual pacote possui o arquivo /etc/inittab : hmarx@thor:~> rpm -qf /etc/inittab aaa_base-2002.9.12-1 hmarx@thor:~> o Instalando o Linux 185 Consulta as informações do pacote lsb : hmarx@thor:~> Name : Version : Release : Install date: Group : Size : Packager : URL : Summary : Description : For the Linux Distribution: hmarx@thor:~> rpm -qip /cdrom/suse/i586/lsb-1.2-31.i586.rpm lsb Relocations: /usr 1.2 Vendor: SuSE Linux AG, Nuernberg, Germany 31 Build Date: Mon Sep 9 16:59:155 2002 (not installed) Build Host: Bloembergen.suse.de System/Fhs Source RPM: lsb-1.2-31.src.rpm 16214 License: GPL http://www.suse.de/feedback http://www.linuxbase.org/ Linux Standard Base tools Standard Base (LSB) necessary tools, links and dependencies. SuSE Linux 8.1 (i386) o No SuSE Linux, a atualização de pacotes (para novas implementações, correções de bugs e vulnerabilidades) pode ser feita através do YOU (Yast Online Update), zypper ou smart. Utilizando o zypper O zypper utiliza os repositórios cadastrados no Yast. Os comandos mais comuns do zypper são: Ajuda zypper { help | ? | --help } Listar repositórios zypper { repos | lr } [ repositório ] Procurar pacotes zypper { search | se } padrão Instalar pacotes zypper { install | in } padrão Remover pacotes zypper { remove | rm } padrão Atualizar pacotes zypper { update | up } [ padrão ] 186 Instalando o Linux Utilizando o Smart O smart tem seus repositórios cadastrados nos arquivos com extensão .channel no diretório /etc/smart/channels/. Cada arquivo é composto por sessões que definem o canal do repositório, como o exemplo abaixo para o openSuSE 11.2. [suse-oss] type=rpm-md baseurl=http://download.opensuse.org/distribution/11.2/repo/oss/suse/ enabled=1 Entre parênteses está o nome do cana (channel), no exemplo suse-oss (repositório de pacotes open source do openSuSE Linux). A diretiva name define o nome do repositório. A diretiva type define o formato do repositório, podendo ser, por exemplo, Tipo apt-deb apt-rpm deb-dir red-carpet rpm-dir rpm-hdl rpm-md slacksite urpmi yast2 Formato do repositório Repositório APT-DEB Repositório APT-RPM Repositório de Debian ou Ubuntu Canal Red Carpet Diretório RPM - Fedora Core Lista de cabecalhos de RPM Metadados de RPMs Repositório de Slackware Repositrio de Mandriva Repositório de openSuSE Dependendo do tipo, define-se o baseurl que indica o endereço da base do repositório. Pode-se habilitar (enable=1) ou desabilitar (enable=0) o uso do repositório. Instalando o Linux 187 Quando desejar atualizar os pacotes, use os comandos smart update, para atualizar a lista de pacotes e suas versões, e então smart upgrade para baixar efetivamente e atualizar os pacotes. Pode-se incluir a opcão --download para apenas baixar os pacotes para o diretório /var/lib/smart/packages, sem instalá-los. Os comandos mais comuns do smart são: Comando smart { -h | --help } smart channel --show smart search padrão smart info { [ padrão ] } smart install padrão smart remove padrão smart update { [ canal ] } smart upgrade { [ padrão ] } smart clean Significado Ajuda Lista repositórios definidos Procura pacotes Exibe informacões do pacotes Instala pacotes Remove pacotes Atualizar lista de pacotes de canais Atualiza pacote Remove os arquivos baixados Pode-se ainda usar o smart no modo shell através do comando smart --shell e então os comandos podem ser digitados no prompt smart> root@thor: > smart --shell Smart Package Manager 1.3 - Shell Mode Loading cache... Updating cache... smart> o ########################################## [100%] 188 Instalando o Linux Além da interface texto, o smart possui uma interface gráfica que pode ser utilizada usando o comando smart com a opcão --gui : smart --gui [ comandos ] Instalando o Linux 189 Criando pacotes RPM Para se criar um pacote RPM é necessário criar o arquivo de especificação que contém diversas informações sobre o pacote RPM e arquivos que o compõe. Seja o arquivo simple-package-1.0.tar.bz2 com os sequintes arquivos: simple-package-1.0/Makefile simple-package-1.0/arq.txt simple-package-1.0/prog.c simple-package-1.0/img.png O arquivo simple-package.spec : Name: Version: Release: Source: Summary: License: Distribution: Group: simple-package 1.0 0.1 simple-package-1.0.tar.bz2 Simple Package GPL openSuSE Applications %description Simple package to demonstrate the RPM build process %description -l pt_BR Pacote simples para demonstrar o processo de criar RPM %prep %setup -q %build make %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/local/pacote install -m 755 prog $RPM_BUILD_ROOT/usr/local/pacote/prog install -m 644 arq.txt $RPM_BUILD_ROOT/usr/local/pacote/arq.txt install -m 644 img.png $RPM_BUILD_ROOT/usr/local/pacote/img.png %clean rm -rf $RPM_BUILD_ROOT %files %defattr(644,root,root) %dir %attr(755,root,root) /usr/local/pacote /usr/local/pacote/prog /usr/local/pacote/arq.txt /usr/local/pacote/img.png %changelog * Tue Dec 8 2009 Helio Marques <[email protected]> * Simple package - initial version 190 Instalando o Linux Para criar o arquivo simple-package-1.0-0.1.i586.rpm em /usr/src/packages/RPMS/i586 para a instalação do binário, use o comando: rpmbuild -bb simple-package.spec Para criar o arquivo simple-package-1.0-0.1.src.rpm em /usr/src/packages/SRPMS/ para a instalação dos fontes, use o comando: rpmbuild -bs simple-package.spec E para criar os dois arquivos RPM para instalacão dos fontes e do binário, use o comando: rpmbuild -ba simple-package.spec Utilizando o comando rpm -qpi simple-package-1.0-0.1.i586.rpm podemos ver as informacões do pacote gerado: Name : simple-package Relocations: (not relocatable) Version : 1.0 Vendor: (none) Release : 0.1 Build Date: Tue 08 Dec 2009 02:12:01 PM BRST Install Date: (not installed) Build Host: venus.starix.br Group : Applications Source RPM: simple-package-1.0-0.1.src.rpm Size : 27517 License: GPL Signature : (none) Summary : Simple Package Description : Simple package to demonstrate the RPM build process Distribution: openSuSE Para ver os arquivos que estão no pacote gerado, utilizamos o comando: rpm -qpl simple-package-1.0-0.1.i586.rpm /usr/local/pacote /usr/local/pacote/arq.txt /usr/local/pacote/img.png /usr/local/pacote/prog Instalando o Linux @ 191 Para manter a integridade da instalação, procure sempre instalar pacotes pré-compilados compatíveis com a distribuição e versão do Linux utilizadas. 192 O Sistema X Window 6. O Sistema X Window O Sistema X Window O sistema X Window é a interface gráfica padrão dos sistemas Unix-like. Ele é baseado no protocolo X11, definido pela DEC - Digital Equipment Corporation e pelo MIT (Massachusetts Institute of Technology). A primeira versão é de 1987. Hoje, está na versão X11R7.4. Este sistema também deve ser chamado de: X X Window System X Version 11 X Window System, Version 11 X11 O protocolo X11 é orientado a rede e segue o modelo cliente / servidor. Clientes: Aplicações clientes são aquelas que utilizam recursos gráficos. São as aplicações que normalmente precisam de muito recurso de CPU e memória. Servidores: Equipamentos que provêm a interface gráfica ao usuário (entrada e saída gráficas). Eles executam o X Server, e apenas tratam da leitura dos dispositivos de entrada (mouse, teclado, light pen, ...) e saída (vídeo, som, ...) enviando e recebendo, através do protocolo X11, os eventos do usuário e dos clientes. Podem ser utilizados computadores PC de baixo poder computacional que disponham de interface adequada (principalmente mouse, teclado e vídeo). O Sistema X Window 193 Assim, uma aplicação para X Window poderá ser executada em qualquer máquina e ter sua saída gráfica em qualquer tela de um computador que esteja executando um servidor X. O X Window é hierarquicamente formado pelo Xserver, pelo gerenciador de janelas (Window Manager), pelo gerenciador de área de trabalho (Desktop manager), e pelas aplicações X. O Xserver tem a função de fazer a interface com o hardware (placas gráficas, mouse, teclado,...), e desenhar as primitivas (ponto, reta e polígonos). O desktop manager (inicialmente o XDM) é responsável pelo controle de sessões. Através dele, o usuário se identifica e escolhe o gerenciador de janelas. O KDM, KDE desktop manager, e o GDM, Gnome desktop manager, são os padrões no Linux. 194 O Sistema X Window O window manager é responsável pela decoração das janelas, tratamento das sobreposições, menus, ícones, fundos de tela, desktops virtuais, etc. Um X Server pode colocar disponível, para a utilização pelos clientes, um ou mais displays. Na rede, estes displays são endereçados pelo endereço ou nome do equipamento e pelo número display. Assim, se uma máquina chamada tiger está executando um X Server para um display, ela terá disponível o display tiger:0.0. A variável de ambiente do shell DISPLAY contém o display corrente. Uma aplicação X pode ser disparada em qualquer máquina e exibir sua interface gráfica na máquina tiger se os seguintes critérios forem observados: 1) A máquina tiger é acessível através do protocolo X. Devem ser verificados os endereços IP, as rotas, e a existência de regras de firewall que podem filtrar os portos utilizados pelo X11. 2) Se a política de permissões do X Server permite à aplicação da máquina cliente abrir o display na máquina tiger. Deve ser verificada a política de X authority. Se a máquina tiger é uma estação de trabalho, o usuário dela deve permitir o acesso do cliente (por exemplo, phoenix), utilizando, por exemplo, o programa xhost para adicioná-lo à lista de acessos. Para isto, pode ser utilizado o Run Command do KDE (acessível através do menu ou de ¥+ ): O Sistema X Window 195 Abaixo vemos uma tela de uma máquina rodando o KDE no SuSE Linux, exibindo uma calculadora (dxcalc) rodando em Ultrix em uma Personal DECstation e os processos xosview de duas máquinas SuSE Linux diferentes. A maioria das aplicações gráficas que utilizam o X Toolkit aceitam opções padrões, como por exemplo: Especifica o servidor X a ser utilizado -display display -geometry geometria Especifica o tamanho e as dimensões da janela a ser exibida no formato: larguraxaltura+x+y -bg cor, --background cor Especifica a cor de fundo da janela -fg cor, --foreground cor Especifica a cor dos textos e gráficos Define a borda com n pixels -bw n, --borderwidth n -bd cor, --bordercolor cor Define a cor da borda Especifica o título da janela -title título 196 O Sistema X Window O X Window no Linux Em 1994, foi fundado o projeto XFree86. O objetivo era criar um servidor X gratuito para plataformas PC. É gratuito, e está na versão 4.6.0 é compatível com X11R6.6. No final de 2003 foram inseridas algumas restrições na licensa do xfree86 levaram o x.org como o sucessor do XConsortium. O x.org se tornou então o padrão para o Linux e está hoje na versão X11R7.4. O arquivo básico de configuração do X.org é o /etc/X11/xorg.conf. Nas versões atuais do SuSE Linux ele é gerado automaticamente. Ajustes na configuração do Xorg no SuSE Linux pode ser facilmente realizada através do SaX2 - SuSE Advanced X Configurator. A partir do SaX, você configura o mouse, teclado, placa de vídeo, monitor e resolução dos desktops. Em caso de uma placa não existente na lista, verifique a compatibilidade com o padrão SVGA. Se o modelo de seu monitor não for encontrado, você pode informar as faixas de frequências horizontal e vertical. Cuidado: certifique-se de informar valores corretos, que podem ser encontrados no manual de seu monitor. Valores incorretos podem danificá-lo. O Sistema X Window 197 Para a configuração manual do XFree86, existem aindas diversas ferramentas : SuperProbe Auxílio na identificação da placa de vídeo, chipset e tamanho da memória de vídeo xf86config Configuração em modo texto. Você precisa conhecer aspectos técnicos das interfaces gráficas. XF86Setup Configuração em modo gráfico. SAX2 - SuSE Advanced X Configuration Tool 198 O Sistema X Window Configuração do XFree86 O XFree86 4.x pode ser configurado através de parâmetros definidos nos arquivos encontrados no diretório /etc/X11. Neste diretório, existem ainda subdiretórios para a configuração dos componentes da interface do X Window. Os principais arquivos são: /etc/X11/Xmodmap /etc/X11/fs/config /etc/X11/xdm/Xservers /etc/X11/xdm/Xaccess /etc/X11/xdm/xdm-config /etc/X11/xdm/Xsetup /etc/X11/xdm/RunChooser /etc/X11/xdm/Xreset /etc/X11/xdm/Xresources /etc/X11/fvwm2/* /etc/X11/xkb/* Configurações do teclado do PC Configuração do servidor de fonts Definição dos displays a serem criados Controle de acesso a conexões XDMCP Configuração do XDM Trata das consoles locais e remotas Trata as consoles remotas Trata o logout de usuário remoto Definição do comportamento da interface X (incluindo o teclado) Configurações do fvwm2 Configurações dos teclados Por exemplo, para que você possua mais de um desktop virtual, inclua uma linha para cada um deles no arquivo /etc/X11/xdm/Xservers, como as seguintes (opcionalmente com a definição de profundidade de pixel): :0 :1 :2 local local local /usr/X11R6/bin/X :0 /usr/X11R6/bin/X :1 /usr/X11R6/bin/X :2 vt07 vt08 vt09 -bpp 16 Assim você terá 3 displays nas consoles tty7, tty8 e tty9, endereçados por :0, :1 e :2 respectivamente. Lembre-se de que cada Xserver necessita de pelo menos 32M memória para rodar eficientemente e que sua placa de vídeo e monitor dever suportar a profundidade de pixel. Use + ¦+¬, ¦+, ¦+®, ¦+¯, etc., para acessar o desktop virtual desejado. O Sistema X Window 199 Abaixo, uma tela do sistema X Window com o gerenciador de janelas KDE versão 3.x. Foi ressaltado o gerenciador com 6 desktops virtuais com um quadrado vermelho. 200 O Sistema X Window Gerenciadores de janelas Existem hoje mais de 14 gerenciadores diferentes para o Linux. Os mais conhecidos são: fvwm e fvwm2 Gerenciador original do XFree86 fvwm95 Configuração do fvwm para imitar a interface do Windows 95 KDE - K Desktop Environment Interface que se tornou o padrão de fato do Linux. É muito poderosa e possui muitas das características das interfaces encontradas nos sistemas Windows. GNOME - GNU Network Object Model Environment Outra interface famosa do Linux. Utiliza o ORBit, uma implementação CORBA da RedHat. mlvwm Interface semelhante ao Macintosh da Apple. cdesim Imita a interface CDE (Common Desktop Environment), muito utilizada pelas estações Sun. afterstep Interface semelhante ao NeXTStep. amiwm Interface semelhante ao AMIGA. O Sistema X Window 201 enlightenment Interface poderosa e configurável. Faz uso intensivo do modo gráfico. icewm Interface que pode emular as interfaces do Windows 95, OS/2 e Motif. twm Uma interface bem simples. qvwm Mais uma interface, com ícones animados, emulando a interface do Windows 9x e Me. windowmaker Mais uma interface configurável com uso intensivo de apelo visual. O gerenciador pode ser escolhido em alguns Desktop Managers, como o kdm do KDE e o gdm do GNOME. Há um menu para escolha do tipo de sessão que inclui os gerenciadores instalados. 202 O Sistema X Window Um gerenciador de janelas (Window Manager) provê normalmente diversos desktops (áreas de trabalho). Alguns gerenciadores incluem programas ou applets denominados pagers para a fácil seleção do desktop. O KDE permite a configuração de até 16 desktops. A barra de ícones do KDE (chamada de kicker) exibe os desktops. Um desktop pode ser selecionado clicando sobre o botão correspondente. Este pode ser configurado para exibir o número, um texto (que pode ser alterado pelo usuário) ou um preview das janelas em cada desktop. Basta utilizar o botão da direita do mouse sobre a área dos botões para configurar suas preferências. Com duplo click em um dos botões, você poderá alterar o nome. Seleção de Desktops no KDE O KDE tem ainda o kpager que exibe um excelente preview dos desktops e permite arrastar as janelas entre os desktops. kpager - Preview de Desktops O Sistema X Window 203 O KDE O KDE - K Desktop Environment - está se tornando a interface gráfica padrão do Linux. A interface KDE é totalmente configurável. Ela é baseada em URLs e MIME. O KDE inclui, além do gerenciador de janelas, o gerenciador de displays e centenas de aplicações integradas ao seu gerenciador. O gerenciador de displays, kdm, é um login em modo gráfico que substitui o xdm, o gerenciador padrão do sistema X Window. A partir dele, o usuário poderá escolher o gerenciador de janelas com o qual irá trabalhar. O kdm irá guardar o gerenciador de janelas escolhido por aquele usuário e, posteriormente, ele será automaticamente selecionado por default quando o usuário se identificar. Entre as aplicações do KDE, há um poderoso gerenciador de arquivos, o konqueror, que trata muitos formatos de arquivos diferentes. Ele possui características de drag-and-drop e cut-and-paste. Além disto, ele também é um browser WEB. 204 O Sistema X Window Através da barra do painel (kicker), o usuário tem acesso fácil e rápido ao menus de aplicativos, aos desktops virtuais, e a alguns aplicativos utilizados com maior frequência (configuráveis pelo usuário), entre outros. Painel do KDE no SuSE Linux Outros aplicativos são bem semelhantes aos existentes no ambiente Windows, como o kolourpaint mostrado abaixo: KolourPaint - o similar do PaintBrush do Windows O Sistema X Window 205 Para multimedia, existem diversos aplicativos. Programas como o kscd, freeamp, xmss são incluídos no kit SuSE Linux. KSCD - CD Player no KDE4 FREEAMP - Similar ao winamp XMMS 206 O Sistema X Window Para exibição de filmes em DVD, pode ser obtido, do site http://sourceforge.net, o xine que possui personalização através de diversos temas disponíveis na internet. XINE Para tocar audio (DVDs, CDs, MP3s, estacões de rádio, ...) há o Amarok com uma interface muito amigável. Amarok no KDE4 O Sistema X Window 207 Na área matemática, encontramos diversos aplicativos gráficos. Um aplicativo muito conhecido no mundo Unix, que possui porte para Linux, é o Maple V da Universidade de Waterloo, Ontario, Canada. O Maple trata manipulação simbólica de expressões matemáticas complexas, permite avaliações numéricas e plotagens de funções e superfícies. 208 O Sistema X Window O kplot3d (do KDE2), que permite a exibição de superfícies a partir de sua equação. e ainda rodá-la nos 3 eixos. O Sistema X Window 209 Além dos pacotes tipo office gratuitos disponíveis, como o KOffice, o StarOffice, e o OpenOffice, existem produtos comerciais como o Applixware, da Vistasource, disponível para várias plataformas Unix. Todos estes pacotes incluem editor de documentos, planilha eletrônica, editores gráficos, software de apresentação, banco de dados, geradores de aplicativos, correio eletrônico. O Applixware permite ainda a criação de novas características através de macros e da linguagem ELF (Extended Language Facility). A maioria dos arquivos do Microsoft Office pode ser lida sem problemas (incluindo .DOC, .XLS, .PPT). Kword - Editor de documentos do KOffice 210 O Sistema X Window Tentando manter a compatibilidade com o pacote office da Microsoft, o OpenOffice está se sendo muito utilizado. A maioria dos documentos gerados pelo Word, Excell e Powerpoint podem ser abertos e modificados nele sem grandes problemas. OpenOffice oowrite - uma alternativa ao Microsoft Office O Sistema X Window 211 axcalc - Planilha do Applixware oocalc - Planilha do OpenOffice 212 O Sistema X Window Você poderá ainda configurar e administrar o SuSE Linux através do KDE utilizando o KDE Control Center e os módulos do YaST. O Sistema X Window 213 A configuracão pessoal, incluindo a aparência dos desktops e dispositivos, pode ser feita através da interface grafica: 214 O Sistema X Window Rede em Unix 215 7. Redes em Unix Redes em Unix Colocar sistemas Unix-like em rede significa configurar a suite de protocolos TCP/IP. O TCP/IP define os serviços das camadas de transporte e de rede do modelo OSI - Open Systems Interconnection da ISO - International Standard Organization, apesar de não seguir exatamente sua estrutura. TCP/IP é a sigla para Transmission Control Protocol/Internet Protocol. Embora haja outros protocolos na suite TCP/IP, o TCP e o IP são os mais importantes. O modelo OSI define 7 camadas hierárquicas que realizam funções utilizando a camada inferior e provêm serviços para a camada superior. 7. Aplicação 6. Apresentação 5. 4. 3. 2. Sessão Transporte Rede Enlace 1. Física Programas de aplicação que utilizam a rede Padroniza a representação dos dados para as aplicações Gerencia as sessões entre as aplicações Trata da detecção e correção de erro fim a fim Trata das conexões através da rede Trata da confiabilidade da transferência dos dados pelo meio físico. Define como as variações da camada física formam os dados. Define as características físicas do meio (mecânicas e eletromagnéticas) Redes em Unix 216 A arquitetura do protocolo TCP/IP implementa 4 camadas do modelo OSI: Aplicação, Transporte, Internet e Controle de acesso ao meio físico. O dado da aplicação no nodo de origem é encapsulado por cada camada inferior para garantir sua integridade e adicionar informações para que sejam recebidos pela aplicação no nodo destino. Na camada de aplicação, encontramos os serviços comuns como http, telnet, ftp, smtp, DNS, RIP e NFS. Na camada de transporte o TCP/IP fornece, além do TCP - Transmission Control Protocol, o UDP - User Datagram Protocol, que não faz verificações de integridade fim a fim. Uma mensagem UDP é composta por 2 palavras de 32 bits seguida pelos dados, como mostrado a seguir: <-------------------------------------------- 32 bits ------------------------------------------> 0 15 16 31 Porto de origem Tamanho Porto de destino Checksum Dados Apesar de não haver verificação da integridade dos dados, este protocolo é utilizado devido ao seu baixo overhead, tornando a comunicação eficiente. A verificacão é feita pela aplicação. Rede em Unix 217 Na camada de rede está o IP - Internet Protocol (IPv4 - RFC 791 e IPv6 RFC 2460) que define os datagramas, o esquema de endereçamento, o esquema de roteamento, a fragmentação e a recomposição dos datagramas. O datagrama do protocolo IPv4 é composto de um cabecalho de 5 ou 6 palavras de 32 bits (definidas pelo campo IHL - Internet Header Length), seguidas pelos dados. <----------------------------------------------- 32 bits ----------------------------------------------> 4 8 12 16 20 24 28 31 0 IHL ToS Tamanho total Versão Flags Offset de fragmentacão Identificação Protocolo Checksum do cabecalho TTL Endereço de origem Endereço de destino Opções Padding Dados O protocolo ICMP (Internet Control Message Protocol) faz parte do IP. Ele é responsável pelo controle de fluxo, pela detecção do alcance do destino, pelo redirecionamento de rotas e pela a verificação dos nodos. O comando ping utiliza este protocolo. Outros protocolos definidos em /etc/protocols são IGMP (Internet Group Multicast Protocol), BGP (Border Gateway Protocol), EGP (Exterior Gateway Protocol) e GGP (Gateway-gateway Protocol). Na camada de controle ao meio físico são definidos os protocolos: RFC 826: Address Resolution Protocol ou ARP, que mapeia endereços IP em endereços Ethernet RFC 894: A Standard for the Transmission of IP Datagrams over Ethernet. RFC 903: Reverse Address Resolution Protocol ou RARP, variante do ARP que mapeia endereços Ethernet (MAC) em endereços IP. Redes em Unix 218 Abaixo podemos ver como o TCP/IP se encaixa no modelo OSI: Na camada de enlace estão as tecnologias com fio ou sem fio. Podemos citar como exemplo a rede ethernet, a rede token ring, a FDDI (Fiber Distribution Data Interface), as redes 802.11 (wireless, Wi-Fi ou WiMax), ou mesmo interfaces seriais como RS-232C ou RS-422. São definidos parâmetors como as temporizações, níveis de sinal, frequências, canais, protocolos de negociação do meio, etc. No TCP/IP, a camada de enlace possui 2 subcamadas: LLC (Logical Link Control) e MAC (Media Access Control). Esta divisão é baseada no projeto 802 do IEEE que define muitas tecnologias de redes. A maioria das tecnologias de redes locais utilizam o protocolo LLC 802.2 do IEEE. Na camada MAC, uma rede ethernet usa o método CSMA/CD, enquanto uma rede token ring usa token pass (passagem de ficha). Rede em Unix 219 Na camada física são definidos os tipos e formatos de conectores, cabos, antenas, pinagens, etc. Serviços do TCP/IP No TCP/IP são definidas diversas aplicações, conhecidas como serviços TCP/IP. Os mais comuns são: Serviço • • • • • • correio eletrônico transferência de arquivos login em máquinas remotas execução remota de programas compartilhamento de arquivos compartilhamento de dispositivos Exemplo e-mail ftp telnet rsh ou rexec NFS impressora remota, fax, ... Estes serviços são tratados por aplicativos que podem rodar em modo standalone ou no modo inetd ou xinetd. Redes em Unix 220 No modo inetd, o serviço é incluído no arquivo /etc/inetd.conf e o aplicativo será executado quando uma conexão ao serviço for realizada. Uma entrada no arquivo /etc/inetd.conf é uma linha contendo as seguintes informações: serviço socket serviço socket protocolo flags usuário aplicativo argumentos protocolo flags usuario aplicativo argumentos nome do serviço em /etc/services tipo do socket stream, dgram, raw, rdm ou seqpacket nome do protocolo em /etc/protocols tcp, udp, tcp4, udp4, tcp6, udp6, ... modo de utilização do socket wait, nowait nome do usuário do processo que trata o serviço caminho completo do aplicativo a ser executado argumentos a serem passados para o aplicativo Por exemplo, o serviço FTP pode ser disparado usando o inetd através de: ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l O serviço FTP utiliza o wrapper tcpd que verifica os arquivos /etc/hosts.allow e /etc/hosts.deny para controlar o acesso. Será disparado como usuário root, com a opção -l (para registrar as sessões e as falhas de abertura de sessão FTP). Obviamente após o disparo o socket poderá aceitar novas conexões e não deve esperar a conexão terminar (flag nowait). Rede em Unix 221 Para maior flexibilidade e controle o inetd foi substituido pelo xinetd (extended inetd). O arquivo de configuracão é o /etc/xinetd.conf, que no SuSE Linux inclui os arquivos no diretório /etc/xinetd.d. Os serviços são normalmente configurados em arquivos sob o diretório /etc/xinetd.d. As entradas têm o formato service nome_do_serviço { atributo operador valor valor ... ... } O operador de assinalamento pode ser =, += e -=. A maioria dos atributos somente suporta o operador =. Os atributos são: Atributo id type flags socket_type protocol wait user group instances nice Descrição / valores aceitos Identificação única para o serviço Qualquer combinação de RPC, INTERNAL ou UNLISTED Qualquer combinação de REUSE, INTERCEPT, NORETRY, IDONLY, NAMEINARGS, e NODELAY stream, dgram, raw ou seqpacket Qualquer protocolo descrito em /etc/protocols yes ou no Usuário para o processo que deve existir em /etc/passwd Grupo para o processo que deve existir em /etc/group Número máximo de serviços que podem estar ativos Prioridade do serviço Redes em Unix 222 Atributos do xinetd (cont.) Atributo server server_args only_from no_access access_times log_type log_on_success log_on_failure rpc_version rpc_number env passenv port redirect bind interface Descrição / valores aceitos Path completo do programa a executar para o serviço Argumentos para o programa Lista de IPs de máquinas ou rede para os quais o serviço estará disponível Lista de IPs de máquinas para os quais o serviço não estará disponível Intervalo na forma h1:m1-h2:m2 no qual o serviço estará disponível Determina a forma do log: SYSLOG facility level FILE filename soft-limit hard-limit Determina as informações que serão colocadas no log quando o serviço é iniciado e terminado. PID, HOST, USERID, EXIT, DURATION Determina as informações que serão colocadas no log quando o serviço não pode ser iniciado. HOST, USERID, ATTEMPT, RECORD Versão do RPC no formato número-número Número para serviços UNLISTED RPC Lista de definições de variáveis de ambientes, no formato nome=valor, que serão adicionadas ao ambiente ao iniciar o serviço Lista de variáveis de ambiente do xinetd que serão passadas para o serviço Porto do serviço, listado em /etc/services Redireciona o serviço para outra máquina em outro porto. Se for especificado um nome de máquina, o IP será resolvido somente uma vez no disparo do xinetd. IP da interface pela qual o serviço será disponibilizado Sinônimo de bind Rede em Unix 223 Atributos do xinetd (cont.) Atributo banner banner_success banner_fail per_source cps max_load disable Descrição / valores aceitos Nome do arquivo com o texto a ser transmitido à máquina remota após a conexão ao serviço ser estabelecida Nome do arquivo com o texto a ser transmitido à máquina remota quando o serviço é permitido Nome do arquivo com o texto a ser transmitido à máquina remota quando o serviço é negado Número de instâncias do serviço por IP ou UNLIMITED Limite de conexões por segundo Carga do sistema acima da qual conexões para o serviço são recusadas Indica se o serviço está desabilitado ou não Por exemplo, o serviço SWAT - Samba Web Administration Tool - pode ser disparado utilizando o xinetd através do arquivo /etc/xinetd.d/samba: # SWAT is the Samba Web Admin Tool service swat { socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/swat only_from = 127.0.0.1 disable = no } Nota: No SuSE Linux alguns serviços vêm desabilitados por motivo de segurança. Certifique-se de configurá-los adequadamente antes de habilitá-los (fazendo disable=no) Redes em Unix 224 Servidores, Estações e Terminais Os diversos computadores conectados a uma rede podem ser classificados como: Terminais: Equipamentos que não executam aplicações. Apenas fazem a interface com o usuário. Estações de trabalho: Equipamentos que podem executar aplicações e podem utilizar recursos compartilhados de um servidor. Servidores: Equipamentos que compartilham recursos computacionais para os terminais e estações de trabalho. Os primeiros compudadores executando UNIX eram utilizados através de terminais texto "burros" conectados a portas seriais (normalmente de placas multiseriais). O computador central era o servidor, compartilhando todos os seus recursos computacionais entre as aplicações e usuários. Com a interface gráfica surgiram as estações de trabalho. As primeiras estações eram baseadas em arquiteturas RISC ou MIPS, como a Sun SparcStation e a SGI (Silicon Graphics). Na era dos microcomputadores, ao surgir a rede local, os PCs foram se transformando em servidores e estações de trabalho. Muitos servidores Linux são também estações de trabalho. Isto é permitido pelo uso eficiente do hardware e da estabilidade do kernel e dos aplicativos. Assim, o que distingue um servidor de uma estação de trabalho é apenas a execução ou não de aplicativos servidores (programas que atendem requisições de serviços dos clientes da rede). A instalação e configuração dos aplicativos é o que define se uma máquina Linux será servidora ou estação de trabalho. Muitas distribuições oferecem kits diferenciados para a utilização em servidores e estações de trabalho. A diferença está, basicamente, na existência ou não de pacotes de aplicativos para as funções de servidor. Rede em Unix 225 Endereçamento IPv4 A base do protocolo TCP/IP é o endereço IP. A versão atualmente utilizada é chamada de IPv4. O endereço IPv4 é um número de 32 bits (4 bytes). Para facilitar sua leitura e a memorização, este número é expresso como 4 números decimais separados por um ponto: w.x.y.z Por exemplo, o IP 192.168.200.3 é armazenado em 4 bytes consecutivos como abaixo: byte 3 192 byte 2 168 byte 1 200 byte 0 3 decimal = 192*2563 + 168*2562 + 200*2561 +3*2560 = 3232286723 E é o número decimal 3232286723 em 32 bits. Pode-se utilizar o programa ping tanto quanto com a representação do IPv4 quanto seu valor decimal. Veja o exemplo abaixo : root@thor:~ # ping -c 3 3232286723 PING 3232286723 (192.168.200.3) 56(84) bytes of data. 64 bytes from 192.168.200.3: icmp_seq=1 ttl=64 time=0.502 ms 64 bytes from 192.168.200.3: icmp_seq=2 ttl=64 time=0.594 ms 64 bytes from 192.168.200.3: icmp_seq=3 ttl=64 time=0.508 ms --- 3232286723 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.502/0.534/0.594/0.049 ms root@thor:~ # o Note que o programa ping imprime o IP no formato w.x.y.z, a sequência dos 3 pacotes ICMP (ping request) enviados icmp_seq e o tempo de resposta time. Ao final são impressas as estatísticas dos pacotes transmitidos incluindo os tempos de resposta. Redes em Unix 226 Para facilitar a administração, o espaço de endereços IPv4 foi dividido m classes. Considerando o valor de w, temos: Classe A B C D E F Valores de w Net Id HostId No. de redes 1 - 126 w x.y.z 126 128 - 191 w.x y.z 16.384 192 - 223 w.x.y z 2.097.151 224 - 239 Endereços de Multicast 240 - 247 Reservada para uso futuro experimentais e/ou reservados para uso futuro No. de nodos 16.777.214 65.534 254 Qualquer IPv4 é formado pela combinação w.x.y.z que é o agrupamento do endereço de rede NetId com o endereço do nodo HostId. Endereços especiais O endereço 127.0.0.1 é denominado loopback. É o endereço IP que toda máquina possui. É associado ao nome de máquina localhost. Se todos os bits do HostId forem iguais a 1, o endereço é de broadcast. Isto é, um pacote enviado para este endereço é destinado a todos os nodos da rede. Se todos os bits do HostId forem iguais a 0, o endereço é de rede. A máscara é gerada colocando todos os bits do NetId em 1, e todos os bits do HostId em 0. Assim, a máscara para a classe A é 255.0.0.0, para a classe B é 255.255.0.0 e para a classe C é 255.255.255.0. O endereço da rede pode ser especificado no formato endereço da rede/número de bits do NetId. Desta forma, podemos apenas informar um endereço de uma rede C como 192.168.1.0/24, e saberemos que a máscara é 255.255.255.0 Rede em Unix 227 Endereços privados Foram reservadas algumas faixas do espaço de endereçamento IP para máquinas que nunca serão acessíveis diretamente através da Internet. Eles devem ser utilizados em redes privadas. Máquinas com estes IPs somente conseguem acessar a Internet através de um gateway que faça a tradução do endereço de rede (NAT ou Masquerading). Classe A B C Faixa de endereços 10.0.0.0 a 10.255.255.255 172.16.0.0 a 172.31.255.255 192.168.0.0 a 192.168.255.255 Nome do bloco 24-bit block 20-bit block 16-bit block Utilização de nomes de nodos Para facilitar a identificação de nodos e de redes, os endereços IP podem ser colocados nos arquivos /etc/hosts e /etc/networks, ou ainda serem resolvidos pelo DNS. A decisão e ordem de pesquisa por nomes é definida pelos arquivos /etc/host.conf e /etc/nsswitch.conf (utilizando, por exemplo, files, dns e nis). Quando é utilizado o DNS, o(s) servidor(es) de nomes e o(s) domínio(s) default é/são definidos no arquivo /etc/resolv.conf. Este arquivo pode ser dinamicamente alterado em conexões que utilizam PPP, DHCP ou por BOOTP. F Veja mais sobre DNS e NIS no capítulo Serviços de Rede. Redes em Unix 228 Exemplos do conteúdo destes arquivos podem ser vistos abaixo. # /etc/host.conf order hosts bind multi on # /etc/hosts 127.0.0.1 localhost 192.168.200.3 thor.starix.br thor # /etc/networks loopback 127.0.0.0 starix.local 192.168.200.0 # /etc/resolv.conf nameserver 192.168.200.3 search starix.br # /etc/nsswitch.conf passwd: compat group: compat hosts: files dns networks: files dns services: files protocols: files rpc: files ethers: files netmasks: files netgroup: files publickey: files bootparrms: files automout: files nis aliases: files Rede em Unix 229 Subclasses Um endereço IPv4 tem 32 bits. Para uma classe X qualquer, sendo H o número de bits do HostId, teremos sempre R = 32 - H bits para o NetId. Assim, para a classe A temos 8 bits para o NetId e 24 bits para o HostId, para a classe B, 16 bits para o NetId e 16 bits para o HostId e para a classe C, 24 bits para o NetId e 8 bits para o HostId. <-------------------------------- 32 bits ---------------------------------> <----------- R bits --------------> <-------------- H bits --------------> NetId HostId Uma classe X qualquer do IPv4 pode ser subdividida em subclasses. Na subclasse, N bits do HostId são acrescentados ao NetId. Logo teremos, em relação à classe original, H-N bits para o HostId e R+N bits para o NetId. Como são N bits ’ adicionais, criamos 2N subclasses X i da classe X com 2H - N IPs. <---------------------------------- 32 bits --------------------------------> <----------- R bits --------------> <-- N bits --> <--- H - N bits ---> NetId HostId Exemplo: Sendo a classe C 192.168.1.0/24, podemos criar uma subclasse ’ acrescentando 2 bits ao NetId, formando 22 = 4 subclasses C i da classe C com 28-2 = 26 = 64 IPs. A máscara de 24+2 = 26 bits será 255.255.255.192, e os endereços das 4 subclasses serão 192.168.1.0/26, 192.168.1.64/26, 192.168.1.128/26 e 192.168.1.192/26. Note que sempre podemos obter o último número da máscara fazendo 2H - 2H - N = 28 - 26 = 256 - 64 = 192. Redes em Unix 230 Roteamento Para que um pacote chegue ao seu destino, é necessário saber a rota a ser utilizada. Para isto, são definidos: ∗ o endereço do destino, que pode ser uma rede ou um nodo; ∗ o gateway, equipamento roteador caso o destino não seja diretamente acessível através da interface de rede; ∗ a máscara que define o endereço do destino; ∗ a métrica, que é o custo da rota. Exemplo Seja uma rede local com endereço classe C 192.168.201.0 e que tenha um gateway que possui uma interface de rede eth0 com endereço 192.168.201.1. O gateway também possui acesso a outras máquinas em outra rede local com endereço classe C 192.168.200.0. Nesta rede, ele possui uma interface de rede eth1 com endereço 192.168.200.222. Há também um roteador com endereço 192.168.200.2 na segunda rede. Todos os endereços das redes locais são acessíveis diretamente através das interfaces de rede, por exemplo, eth0. Rede em Unix 231 Para endereços fora da rede local, os nodos deverão utilizar o gateway. Para esta configuração, os nodos da rede 192.168.201.0 deverão ter uma tabela de rota mínima como a seguinte: Destino 192.168.201.0 loopback default Gateway * * 192.168.201.1 Máscara 255.255.255.0 255.0.0.0 255.255.255.0 Interface eth0 lo eth0 O gateway nesta rede terá a seguinte tabela de roteamento: Destino 192.168.201.0 192.168.200.0 loopback default Gateway * * * 192.168.200.2 Máscara 255.255.255.0 255.255.255.0 255.0.0.0 255.255.255.0 Interface eth0 eth1 lo eth1 Redes em Unix 232 Ferramentas para configuração e diagnóstico ifconfig [ opções ] [ interface ] [ parâmetros ] Utilizada para configuração e verificação das interfaces de rede. Podem ser configurados endereços de memória/IO, interrupções, tipos de media, endereços IPv4, IPv6, IPX, X25, parâmetros da interface, além de ativação e desativação de protocolos e interfaces. Podem também serem visualizados os erros e os números de pacotes recebidos e transmitidos pelas interfaces. thor:~ # ifconfig eth1 eth1 Link encap:Ethernet HWaddr 00:01:02:EC:22:9A inet addr:192.168.200.3 Bcast:192.168.200.255 Mask:255.255.255.0 inet6 addr: fe80::201:2ff:feec:229a/10 Scope:Link IPX/Ethernet II addr:00000022:000102EC229A UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:25772210 errors:60736 dropped:0 overruns:3 frame:91159 TX packets:36766592 errors:0 dropped:0 overruns:0 carrier:88 collisions:0 txqueuelen:100 RX bytes:2616349475 (2495.1 Mb) TX bytes:152546778 (145.4 Mb) Interrupt:18 Base address:0xb800 thor:~ # o Diversos IPs podem ser assinalados a uma única interface utilizando o nome da interface seguida de :label, como por exemplo eth0:1 ou eth1:ext. Rede em Unix 233 ping [ opções ] destino Utiliza os pacotes ICMP ECHO REQUEST e ECHO REPLY e pode ser útil na verificação da configuração de endereços IP, roteamento e tempos de resposta. É muito utilizado para saber se um host está ativo e respondendo. Entretanto uma falta de resposta não indica necessariamente que o host está inativo ou inacessível: um firewall poderá barrar ou descartar pacotes ICMP. Podem ser definidos o tamanho do pacote, a quantidade de pacotes a serem enviados, intervalo entre pacotes, além de diversos parâmetros do protocolo IP. Algumas opções mais utilizadas são: número de pacotes a serem enviados -c num -n apena numérico (não resolverá nomes) intervalo entre pacotes em segundos -i num pode ser fracionário -w num timeout em segundos (pode ser fracionário) -b permite ping em endereço de broadcast thor:~ # ping -c 4 tiger PING tiger.starix.br (192.168.200.1) from 192.168.200.3 : 56(84) bytes of data. 64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=1 ttl=32 time=950 usec 64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=2 ttl=32 time=929 usec 64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=3 ttl=32 time=978 usec 64 bytes from tiger.starix.br (192.168.200.1): icmp_seq=4 ttl=32 time=868 usec --- tiger.starix.br ping statistics --4 packets transmitted, 4 received, 0% loss, time 3023ms rtt min/avg/max/mdev = 0.868/0.931/0.978/0.045 ms thor:~ # o Redes em Unix 234 route [ opções ] [ { add | del | flush } parâmetros ] Ferramenta para configuração e/ou verificação da tabela de roteamento. Veja também netstat. thor:~ # route -n Kernel IP routing table Destination Gateway 201.17.146.0 0.0.0.0 192.168.200.0 0.0.0.0 127.0.0.0 0.0.0.0 0.0.0.0 201.17.146.1 thor:~ # o Genmask 255.255.255.0 255.255.255.0 255.255.0.0 0.0.0.0 Flags U U U UG Metric 0 0 0 0 Ref 0 0 0 0 Use 0 0 0 0 Iface eth0 eth1 lo eth0 Ref é o número de referências a esta rota e não é utilizada pelo kernel do Linux. Use é numero de utilização desta rota. Os flags exibidos são: U - a rota está ativa (Up) H - a rota é para uma máquina (Host) R - a rota é refeita dinamicamente D - a rota é dinâmica M - a rota foi modificada por um daemon ou por redirecionamento A - a rota foi instalada por configuracão de endereço C - a entrada é cache ! - a rota é rejeitada Rede em Unix 235 ip [ opções ] { link | addr | route | rule | neigh | tunnel | maddr | mroute | monitor } { comando | flush } [ parâmetros ] Poderosa ferramenta para configuração e verificação dos diversos parâmetros dos protocolos de rede. root@thor:~ # ip link 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: sit0: <NOARP> mtu 1480 qdisc noqueue link/sit 0.0.0.0 brd 0.0.0.0 3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:00:e8:4d:4f:a7 brd ff:ff:ff:ff:ff:ff 4: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:01:02:ec:22:9a brd ff:ff:ff:ff:ff:ff root@thor:~ # ip route 192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.11 201.17.146.0/24 dev eth0 proto kernel scope link src 201.17.146.157 192.168.200.0/24 dev eth1 proto kernel scope link src 192.168.200.3 169.254.0.0/16 dev eth0 scope link 127.0.0.0/8 dev lo scope link default via 201.17.146.1 dev eth0 root@thor:~ # ip neigh 201.17.146.1 dev eth0 lladdr 00:13:5f:05:67:05 DELAY 192.168.200.190 dev eth1 lladdr 00:e0:7d:c2:d2:17 DELAY 192.168.200.200 dev eth1 lladdr 00:16:76:90:c1:94 REACHABLE 192.168.200.41 dev eth1 lladdr 00:06:4f:48:da:74 REACHABLE root@thor:~ # o Redes em Unix 236 netstat [ opções ] [ { sockets ... | Af } ] Ferramenta genérica para verificação do status de conexões de rede, interfaces e roteamentos. Algumas opções mais utilizadas são: -r exibe a tabela de rotas -i exibe a tabela das interfaces -s [t | u] exibe estatísticas de protocolo TCP e/ou UDP -n não resolver os nomes Os sockets podem ser: { -t | --tcp } { -u | --udp } { -w | --raw } { -x | --unix } --ax25 --ipx --netrom A família de endereços Af pode ser: --inet DARPA --inet6 IPv6 --ax25 AMPR AX.25 --netrom AMPR NET/ROM ---ipx Novell IPX --ddp Appletalk --x25 CCITT X.25 thor:~ # netstat -su Udp: 11924335 packets received 2739 packets to unknown port received. 27 packet receive errors 11907991 packets sent thor:~ # o Rede em Unix 237 arp [ opções parâmetros ] Manipula o cache de ARP (Address Resolution Protocol), mapeamento de endereços ethernet e IPs. thor:~ # arp -a atlas.starix.br (192.168.200.31) at 00:01:02:EC:22:AD [ether] on eth0 wolf.starix.br (192.168.200.35) at 00:00:B4:A6:A1:CC [ether] on eth0 spider.starix.br (192.168.200.222) at 00:00:B4:A7:FF:1E [ether] on eth0 apollo.starix.br (192.168.200.2) at 00:E0:7D:A5:EB:21 [ether] on eth0 diana.starix.br (192.168.200.147) at 00:80:C8:7C:7E:16 [ether] on eth0 tiger.starix.br (192.168.200.1) at 00:40:C7:94:11:53 [ether] on eth0 thor:~ # o rarp [ opções parâmetros ] Manipula a tabela RARP do sistema (Reverse Address Resolution Protocol). Redes em Unix 238 ipcalc [ opções ] endereço [ [ / ] máscara ] [ máscara ] Calcula endereços de broadcast, rede, máscaras, sub-redes, agregados, etc. Use ipcalc --help para maiores informações. thor:~ # ipcalc 192.168.10.0 - 192.168.11.31 deaggregate 192.168.10.0 - 192.168.11.31 192.168.10.0/24 192.168.11.0/27 thor:~ # ipcalc 201.17.0.0/16 Address: 201.17.0.0 11001001.00010001. 00000000.00000000 Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000 Wildcard: 0.0.255.255 00000000.00000000. 11111111.11111111 => Network: 201.17.0.0/16 11001001.00010001. 00000000.00000000 HostMin: 201.17.0.1 11001001.00010001. 00000000.00000001 HostMax: 201.17.255.254 11001001.00010001. 11111111.11111110 Broadcast: 201.17.255.255 11001001.00010001. 11111111.11111111 Hosts/Net: 65534 Class C thor:~ # o geoiplookup { ip | nome } Localiza geograficamente o endereço fornecido thor:~ # geoiplookup linuxtech.com.br GeoIP Country Edition: BR, Brazil thor:~ # geoiplookup 201.17.146.157 GeoIP Country Edition: BR, Brazil thor:~ # geoiplookup suse.de GeoIP Country Edition: DE, Germany thor:~ # o Rede em Unix 239 traceroute [ opções ] destino Mostra a rota seguida por um pacote TCP/IP da origem até o destino, incluindo os tempos de resposta. tcpdump [ opções ] [ expressão ] Poderosa ferramenta para exibir o tráfego de pacotes na rede. Além do TCP/IP, suporta protocolos SMB e IPX. Podem ser fornecidos filtros para os pacotes (origem, destino, protocolo, tipo) utilizando expressões booleanas. thor:~ # tcpdump -n -l -i eth0 -c 4 tcpdump: listening on eth0 22:23:49.195111 arp who-has 192.168.200.41 tell 192.168.200.3 22:23:49.195275 arp reply 192.168.200.41 is-at 0:e0:7d:b7:88:4b 22:23:49.200012 192.168.200.41.405252435 > 192.168.200.3.2049:100 getattr [|nfs] (DF) 22:23:49.200432 192.168.200.3.2049 > 192.168.200.41.405252435: reply ok 112 getattr DIR 40700 ids 3009/100 [|nfs] (DF) thor:~ # o bing [ opções ] nodo1 nodo2 Variação do ping para medida de taxa de transferência entre dois nodos de uma rede. Outros aplicativos como o snort, o tracepath, e iptraf podem auxiliar a análise do fluxo de informações nas diversas interfaces de rede. Aplicativos como socklist e rpcinfo mostram os serviços e portos associados aos processos. O aplicativo nmap auxilia a identificaçãode portos abertos. Redes em Unix 240 O iptraf sendo utilizado para monitoramento de conexões: Tráfego de conexões Rede em Unix 241 O iptraf sendo utilizado para monitoramento do tráfego de dados. Tráfego de bytes e pacotes Redes em Unix 242 Para o modo gráfico existem diversas ferramentas, entre elas: ethereal ou wireshark Poderoso analisador de protocolos com possibilidades de filtros e visualização em tempo real do conteúdo dos pacotes. xtraceroute Visualização da rota através do globo terrestre, utilizando o traceroute. Rede em Unix 243 A ferramenta nmap é bastante útil na identificação de serviços disponíveis em um servidor: hmarx@venus: ~> nmap -sT -P0 thor Starting Nmap 5.00 ( http://nmap.org ) at 2010-09-09 23:54 BRT Interesting ports on thor.starix.br (192.168.200.3): Not shown: 978 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http 110/tcp open pop3 111/tcp open rpcbind 139/tcp open netbios-ssn 143/tcp open imap 199/tcp open smux 444/tcp open snpp 445/tcp open microsoft-ds 631/tcp open ipp 993/tcp open imaps 2049/tcp open nfs 2222/tcp open unknown 3306/tcp open mysql 3551/tcp open unknown 8008/tcp open http 10000/tcp open snet-sensor-mgmt 16001/tcp open unknown 32768/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds hmarx@venus:~> o Redes em Unix O nmap possui a ferramenta gráfica zenmap, mostrada abaixo. 244 Rede em Unix 245 Redirecionamento de conexão TCP/IP Em determinadas ocasiões, é necessário que uma conexão para um determinado IP/porto seja redirecionada a outro IP/porto. Um exemplo típico é ter um servidor WWW em uma rede com IPs privados não acessíveis pela Internet. O redirecionamento pode ser feito por meio do firewall ou de um software de redirecionamento. Entre os diversos pacotes, o mais simples é o rinetd. Sua configuração é feita no arquivo /etc/rinetd.conf. Neste arquivo são definidos os redirecionamentos e os controles de permissão. Redirecionamento: bindaddress bindport connectaddress connectport Todas as conexões que forem feitas para serão redirecionadas para bindaddress/bindport connectaddress/connectport. Os argumentos bindaddress e connectaddress podem ser fornecidos como endereço IP ou por um nome de host. Os argumentos bindport e connectport podem ser fornecidos como número ou nomes de serviços dados em /etc/services. No caso do servidor ter diversos IPs, pode ser utilizado o IP 0.0.0.0 como bindaddress. Permissões: allow padrões de IPs deny padrões de IPs Regras de permissões a serem subsequentemente seguidas. Os padrões de IPs são formados por dígitos ‘0‘ a ‘9‘, ‘.‘, ‘? ‘ e ‘*‘. Os caracteres ? e * são utilizados como metacaracteres que combinam com um caracter ou com uma sequência de caracteres qualquer. Redes em Unix O rinetd pode gerar um log em um arquivo definido por: logfile arquivo de log Para um log no formato de um servidor WEB, basta adicionar a linha: logcommon Para a utilização do syslog, adicione a linha: syslog facilidade prioridade A facilidade/prioridade default é daemon/info. 246 Rede em Unix 247 Endereçamento IPv6 Os enderecos IPv são números de 128 bits, normalmente escritos como 16 números em hexadecimal. Não há classes como no IPv4. Os bits de mais alta ordem, denominados prefixo, definem o tipo do endereço. Tipo de endereço prefixo reservado não assinalado reservado para NSAP reservado para IPX não assinalado não assinalado não assinalado endereços de unicast global agregáveis não assinalado não assinalado não assinalado não assinalado não assinalado não assinalado não assinalado não assinalado não assinalado não assinalado endereço de unicast local de link endereço de unicast local de site endereços de multicast 0000 0000 0000 0001 0000 001 0000 010 0000 011 0000 1 0001 001 010 011 100 101 110 1110 1111 0 1111 10 1111 110 1111 1110 0 1111 1110 10 1111 1110 11 1111 1111 Fração do espaço de endereçamento 1/256 1/256 1/128 1/64 1/32 1/16 1/8 1/8 1/8 1/8 1/8 1/8 1/8 1/16 1/32 1/64 1/128 1/512 1/1024 1/1024 1/256 Notas: 1. Os endereços não especificados, o endereço de loopback, e os endereços IPv4 embutidos no IPv6 são assinalados com prefixo binário 0000 0000. 2. O IANA limita, por enquanto, a alocação de endereços unicast à faixa de endereços que começam com o valor binário 001. O espaço restante (aprox. 85% do espaço de endereçamento IPv6) está reservado para definições futuras. Redes em Unix 248 Os enderecos mais importantes são os de unicast global agregáveis, que irão substituir as classes A, B e C do IPv4. O formato destes endereços é: 3 001 13 bits TLA ID 32 bits NLA ID 16 bits SLA ID 64 bits interface ID topologia identificador <--------------- topologia pública ------------> <-----------> <--------------------------------------> do site da interface TLA ID é o identificador do agregado de primeriro nível, NLA é o identificador do agregado do próximo nível e SLA é o identificador do agregado do nível do site, ou também chamado de identificador da subrede (subnet ID). O identificador da interface é um super conjunto do espaco de enderecos do MAC de 48 bits definidos pelo IEEE 802 que são assinalados à marioria das placas de rede. Para os testes dos protocolos IPv6 foi definido o 6bone. O byte de mais alta ordem é 5F (0101 1111). Os próximos 2 bytes é o ASN (Autonomous System Number) assinalado à empresa ou ao seu ISP. O próximo campo, de 3 bytes, são os 24 bits de mais alta ordem do IPv4. O endereço da subrede é definido pela empresa e o endereço da interface é normalmente o endereço MAC de 48 bits. Mapeando endereços IPv4 em endereços IPv6 Os endereços IPv4 podem ser mapeados em endereços IPv6 colocando os 80 bits de mais alta ordem em 0, seguidos de 16 bits em 1 e então o endereço IPv4 nos 32 bits de mais baixa ordem. Assim, na notacão IPv6, o IP 200.157.187.34 poderá ser escrito como 0:0:0:0:FFFF:200.157.187.34, ou de forma abreviada ::FFFF:200.157.187.34. 0000 . . . . 80 bits . . . . . . 0000 16 bits FFFF 32 bits Endereço IPv4 Rede em Unix 249 Endereços IPv4 compatíveis com endereços IPv6 Para a transição de IPv4 para IPv6, colocam-se os 96 bits de mais alta ordem em 0 e então o endereço IPv4 nos 32 bits de mais baixa ordem. Estes endereços podem ser colocados na base DNS em registros AAAA, no formato semelhante a ::200.157.187.34. 0000 . . . . 80 bits . . . 16 bits 0000 . . . 0000 32 bits Endereço IPv4 Um endereco IPv6 com 127 bits em 0 e 1 bit em 1, escrito como ::1 é o endereco de loopback, exibido pelo ifconfig como: inet6 addr: ::1/128 Scope:Host Endereço não especificado É um endereço IPv6 com todos os 128 bits em 0, escrito como 0::0 ou apenas ::. Endereços de link locais Um endereço em um link local é utilizado quando não há necessidade de reencaminhamento (forward). Ele é formado pelo prefixo de 10 bits 1111 1110 10, seguido de 54 bits em 0 e 64 bits da identificação da interface. Estes endereços sempre começam com fe8 a feb. Assim, uma interface ethernet com endereço MAC 00:01:02:EC:22:9A, terá o IPv6 de escopo link local fe80::201:2ff:feec:229a. 10 bits 1111111010 54 bits 0000 . . . . . . . . . 0000 64 bits interface ID Quando o IPv6 está habilitado, usando o ifconfig podemos ver o IPv6 de scopo local em uma linha parecida com: inet6 addr: fe80::201:2ff:feec:229a/64 Scope:Link Redes em Unix 250 Endereços de sites locais Os endereços IPv6 para sites locais são formados pelo prefixo de 10 bits 1111 1110 11, seguidos por 38 bits em 0, seguidos pela identificação da subrede de 16 bits, e pelos 64 bits da identificação da interface. Estes endereços sempre começam com fec0 a feff. Os roteadores IPv6 não podem encaminhar datagramas com estes endereços para fora do site. 10 bits 11111111011 38 bits 0000 . . . . . 0000 16 bits SLA ID 64 bits interface ID Endereços de multicast São endereços que possuem o prefixo 1111 1111, ou seja, na base hexadecimal, começam com ff. Ferramentas de diagnóstico Podem ser utilizadas ferramentas como o ping6, traceroute6 e tracepath6 para diagnóstico de redes utilizando IPv6. Rede em Unix 251 Internet e Intranet Uma internet é o termo utilizado para uma interligação de redes : interconnected networks. A Internet é a rede global interligando milhões de computadores em todo o mundo. Uma intranet é uma internet local com os serviços típicos da Internet. Com a necessidade de interligar computadores diferentes, com sistemas operacionais diferentes, foi criado o protocolo TCP/IP. Uma internet é uma rede TCP/IP. A Internet é definida e controlada por uma grande comunidade internacional aberta de projetistas de rede, operadores, vendedores e pesquisadores denominada IETF - Internet Engineering Task Force. Esta comunidade é organizada em grupos de trabalho em diversas áreas (como roteamento, transporte, segurança, ...). Em 1986 foi criado o IAB - Internet Architecture Board - que define a arquitetura da Internet. A gerência das atividades técnicas do IETF é feita pelo IESG - Intenet Engineering Steering Group, que também define os padrões da Internet. As políticas de uso da Internet são definidas pela ISOC - Internet Society, uma organização de membros especialistas da Internet. O IANA - Internet Assigned Numbers Authority - é responsável pela atribuição de todos os parâmetros únicos da Internet como endereços IP, protocolos e portos. No Brasil, as regras da Internet são definidas pelo Comitê Gestor da Internet no Brasil (CGI.br), subordinado ao Ministério de Ciência e Tecnologia. O CGI.br foi criado pelo decreto presidencial Nº 4.829, em 3 de setembro de 2003 e é responsável pelo domínio de primeiro nível .br. Redes em Unix 252 Os serviços padrão de uma rede internet são: • • • • • DNS - para servir nomes Páginas HTML - HyperText Markup Language - para divulgação de informações e-mail, para comunicação entre os usuários ftp, para a transferência de arquivos outros serviços (chat, telnet, video-conferência, ...) A configuração básica de uma internet (uma intranet ou um conjunto de redes a serem conectadas à Internet) segue as mesmas regras de configuração dos parâmetros da rede TCP/IP. No capítulo seguinte serão estudados os mais importantes serviços e suas configurações. Serviços de Redes 253 8. Serviços de Redes Domínios Para facilitar a administração de máquinas em uma rede Unix, elas são agrupadas em domínios. Em um domínio podem existir servidores primários e secundários. Estes servidores irão prover as informações para as máquinas do domínio. Uma mesma máquina poderá pertencer a mais de um domínio. Existem diversos tipos de domínios. Em redes Microsoft, por exemplo, existem os domínios SMB e AD; em redes Novell, os domínios Bindery e NDS. Em redes TCP/IP, os dois domínios mais comuns são o DNS, NIS (também chamado de YP) e LDAP. Todos eles têm função básica de identificar e/ou autenticar serviços e usuários comuns em relação a um grupo (de máquinas ou usuários). 254 Serviço de Redes Estudaremos aqui os domínios DNS, NIS e LDAP: DNS - Domain Name System Base hierárquica distribuída para resolução de nomes. É baseada na arquitetura cliente/servidor, onde seus componentes são chamados de resolvers e name servers. NIS - Network Information System Também conhecido como YP© - Yellow Page1 - é uma base de dados distribuída para configuração de usuários, grupos, senhas, permissões, ... É bastante utilizado na administração centralizada de usuários em uma rede local onde também há compartilhamento de diretórios através de NFS. LDAP - Lightweight Directory Access Protocol Baseado no protocolo X.500, o LDAP é um serviço de diretório que armazena dados baseados em atributos. Utiliza o modelo cliente-servidor através do protocolo TCP. É utilizado para a gerência centralizada de usuários, grupos e outras informações. _________________________ 1 YP é marca registrada da British Telecom. Serviços de Redes 255 DNS - Domain Name System No princípio da ARPANET, em 1970, os nomes dos computadores eram mantidos em um arquivo denominado HOSTS.TXT, que deu origem ao /etc/hosts. Com o crescimento da rede, em 1984 foi definido o DNS nos RFCs 882 e 883. As definições atuais estão nos RFCs 1034, 1035 e 3536 (as extensões para o IPv6) (veja http://www.faqs.org/rfcs). O DNS é uma base hierárquica distribuída de nomes cuja raiz é o ’.’. Curiosidade: Crescimento da Internet desde os primeiros anos Data 1969 1971 01/1973 09/1973 1977 08/1981 05/1982 08/1983 10/1984 10/1985 02/1986 11/1986 12/1987 07/1988 10/1988 01/1989 07/1989 10/1989 Número de nodos 4 15 35 40 111 213 235 562 1.024 1.961 2.308 5.089 28.174 33.000 56.000 80.0007 130.000 159.000 Data 10/1990 01/1991 07/1991 10/1991 01/1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 Número de nodos 313.000 376.000 535.000 617.000 727.000 1.300.000 2.200.000 4.900.000 9.500.000 18.000.000 30.000.00 42.000.000 70.000.000 110.000.000 162.000.000 172.000.000 317.000.000 355.000.000 Em 2003 o número de domínios ultrapassou 31.000.000, dos quais 78% são .COM. Em 2004 o número de domínios ultrapassou 80.000.000 ! Dados do Internet Systems Consortium - www.isc.org 256 Serviço de Redes No início de 2010, o número de domínios ativos ultrapassou os 113 mihões. São registrados diariamente mais de 72 mil domínios. O registro.br reporta 1950064 domínios, dos quais 1753136 são .com.br. São registrados diariamente mais de 380 domínios no registro.br. Em setembro de 2009, o número de usuários da Internet no mundo é estimado em mais de 1.7 bilhões. Serviços de Redes 257 Estrutura hierárquica do DNS O IETF - Internet Engineering Task Force, através do IANA - Internet Assigned Numbers Authority, define os domínios de primeiro nível (top level domains ou TLD) da Internet: Os TLDs genéricos são, por exemplo, .com, .edu, .org, .mil, .int, net. Para cada país, foram definidos os códigos de TLD como, por exemplo: .br, .us, .uk, .ca, .au, .de, .fr, .. Em cada país, há um órgão responsável pelo registro de sub-domínios, como .com.br, .co.uk, .net.br, .net.au, ... No Brasil, o órgão responsável é o REGISTRO.BR (http://registro.br). Qualquer empresa que queira ter um domínio na Internet deve primeiramente consultar o REGISTRO.BR para verificar a disponibilidade do nome do domínio (Exemplo : minhaempresa.com.br). Caso esteja disponível, deverá configurar pelo menos 2 servidores de nome (um master e um slave), resolvendo o domínio para poder cadastrá-lo no REGISTRO.BR. Após um certo tempo, o cadastro será publicado para a Internet. A informação irá aos poucos se propagar pelos diversos servidores de nome da Internet. Poderá demorar alguns dias para que a maioria das máquinas da Internet conheçam o novo domínio. 258 Serviço de Redes Lendo nome de domínios A leitura de um nome de máquina completo, incluindo o domínio, é feita de trás para frente. Seja, por exemplo, o nome lithium.cchem.berkeley.edu. De .edu, sabemos que é o domínio educacional de primeiro nível (top-level domain). De berkeley.edu, sabemos que é o domínio da Universidade da Califórnia em Berkeley . De cchem.berkeley.edu, sabemos que é o sub-domínio do Departamento de Química E lithium é o nome de uma máquina do Departamento de Química. Assim, lithium.cchem.berkeley.edu é o nome completo (FQDN - Fully Qualified Domain Name) de uma máquina do departamento de química da Universidade da Califórnia em Berkeley e deve ser resolvido para um ou mais IPs: Uma consulta ao DNS usando o comando host revela o IP 128.32.198.12 : hmarx@thor:~> host lithium.cchem.berkeley.edu. lithium.cchem.berkeley.edu has address 128.32.198.12 hmar@thor:~> o Serviços de Redes 259 Servidores de Nomes Existem dois tipos de servidores de nome: o primário e o secundário ) ou escravo) (primary master e secondary master ou slave). As informações sobre os domínios são feitas através de transferências denominadas zone transfer. A resolução dos nomes é feita do topo para o nome da máquina, e deverá resultar em um endereço IP. Assim, o nome www.suse.de é resolvido: .de suse.de www.suse.de o domínio de primeiro nível da Alemanha. o domínio da SuSE, hoje da empresa Novell, Inc. (provavelmente) a máquina servidora de páginas web do domínio suse.de Este nome será mapeado para um endereço IP. Resolução de endereços Além do domínio de nomes, os endereços também são resolvidos (mapeados para nome). Os endereços IP estão no sub-domínio in-addr.arpa. Seja, por exemplo, www.suse.de, que tem endereço 195.135.220.3. Logo, o mapeamento está no domínio reverso 3.220.135.195.in-addr.arpa. 260 Serviço de Redes Software DNS O software mais utilizado para resolução de nomes é o BIND - Berkeley Internet Name Domain. Inicialmente desenvolvido para sistemas Unix, hoje é disponível para diversos sistemas operacionais. O programa é o /usr/sbin/named. A configuração do BIND é feita através de alguns arquivos. O arquivo principal é o /etc/named.boot na versão BIND4, ou o /etc/named.conf na versão BIND8 ou superior. Este arquivo irá definir na sessão options o diretório da base de dados do DNS e, nas sessões zone, os parâmetros para definição dos domínios e sub-domínios (denominados zones). No diretório definido (o default é /var/named para as versões até o BIND8 e /var/lib/named para a versão BIND9 ou superior), estão os arquivos que descrevem os domínios. Estes arquivos são formados por entradas de controle e registros. Comentários podem ser inseridos por ";". Entradas de controle $ORIGIN subdomínio Muda a origem do domínio para as definições subsequentes $INCLUDE arquivo Inclui o arquivo arquivo que deve conter entradas de controle e registros do DNS. $TTL ttl Define ttl o tempo de vida default em segundos. Podem ser utilizados os sufixos M, H, D, W para indicar minutos, horas, dias ou semanas. $GENERATE faixa lhs [ ttl ] [ classe ] tipo rhs [ comentário ] Gera registros de acordo com a faixa fornecida. classe e tipo serão definidos no tópico ¨Formato dos registros do DNS¨. lhs pode ser $ ou ${offset[,width[,base]]}. O $ representará o valor da iteração que pode ser somado a offset, com 3 posições e na base numérica base. rhs é tratado da mesma forma do lhs. Serviços de Redes 261 Formato dos registros do DNS O formato do registro (chamado de RR - Resource Record) é: [ nome ] [ ttl ] [ classe ] tipo dados onde: nome ttl classe tipo é o objeto definido (domínio, servidor, ...) é o tempo de vida da informacão (Time To Live) pode ser: IN Internet HS HesioId (MTI Service protocol) CH Chaos (MIT LAN protocol) Geralmente, apenas a classe IN é utilizada. é o tipo do registro. O formato dos dados varia conforme o tipo do registro. O nome deve ser terminado por ´.´. Caso contrario, será concatenado com a origem: domínio que está sendo definido ou o alterado pelo controle $ORIGIN. ´@´ é o domínio que está sendo definido em zone no arquivo /etc/named.conf. Substitui-se então o ´@´ do email nos dados dos registros por ´.´. Se nome não for especificado (deixado em branco), as informações são relacionadas ao último nome anteriormente definino. 262 Serviço de Redes Os formatos dos principais tipos de registros são: 1. Start of Authority SOA dominio email ( serial refresh retry expire minimum ) onde é um número sequencial sempre crescente. É serial usado para verificar alterações nos dados definidos. É comum usar a data de última alteração no formato AAAAMMDDss, onde ss é incrementado a cada alteração do dia; refresh é o tempo entre atualizações dos servidores de DNS secundários; retry é o tempo entre tentativas de atualização dos servidores de DNS secundários em caso de falha na conexão com o primário; é o limite de validade das informações sobre o expire domínio; minimum é o tempo que respostas negativas (tipo domínio inexistente) pode estar no cache de servidores de DNS secundários. meudominio.com. 2009110305 2D 4H 2W 1W ) IN SOA meudominio.com. root.dominio.com. ( ; serial Nov 3, 2009, revision #5 ; refresh in 2 days ; retry in 4 hours ; expire in 2 weeks ; minumin 1 week Serviços de Redes 263 2. Name server NS servidor onde é o nome ou o IP do servidor de nomes do domínio. IN NS ns1.meudominio.com. 3. Name to address mapping A ipv4 onde ipv4 server.meudominio.com. é o IPv4, formado por 4 números de 8 bits separados por ’.’. IN A 192.168.10.17 4, Name to IPv6 address mapping AAAA ipv6 onde ipv6 IN é o IPv6, de acordo com as regras definidas no capítulo anterior, Rede em Unix. AAAA 2001:0780:0:1::1 264 Serviço de Redes 5. Name to IPv6 address mapping (experimental) A6 prefixo ipv6 onde prefixo ipv6 nome [ nome ] é o número de bits do prefixo; é o IPv6; é o nome de referência. www.meudominio.com. IN A6 96 ::fef7:6d2c ipv6.provedor.com. ipv6.provedor.com. IN A6 0 3ffe:1900:4545:2:2d0:9ff:: 6. Address to name mapping PTR nome onde nome é o nome. 17.10.168.192.in-addr.arpa. IN PTR server.meudominio.com. 7. Cannonical name (aliases) CNAME nome onde nome $ORIGIN meudominio.com. mail IN CNAME servidor é o apelido para o objeto. Serviços de Redes 265 8. Textual information TXT "texto" onde texto é um texto livre. mail IN TXT "Servidor de e-mails" 9. Responsible person RP email domínio onde email é o e-mail do responsável; domínio é o domínio associado ao responsável. IN RP root.meudominio.com. meudominio.com. 10. Mail exchange MX ordem servidor onde é o número de preferência do servidor de email. ordem Número menor tem maior preferência; servidor é o nome do servidor que recebe e-mails para o o objeto (tipicamente um domínio). IN MX 10 mail.meudominio.com. IN MX 20 mail.provedor.com. 266 Serviço de Redes 11. Host information HINFO hardware software onde hardware é uma descricão do equipamento; software é uma descricão do ambiente operacional do equipamento. www IN HINFO "Quad Xeon" "SuSE Linux" 12. Mailbox or Mail list information MINFO admin error onde é o e-mail do administrador; admin error é o e-mail para onde vão os erros. IN MINFO mailadm.meudominio.com. mailerr.meudominio.com. Serviços de Redes 267 13. Geographical location LOC lat-d [ lat-m [ lat-s ] ] N | S long-d [ long-m [ long-s ] ] E | W alt [ m] [ size [ m] [ hp [ m ] [ vp [ m ] ] ] ] onde lat-d sào os graus da latitude; são os minutos da latitude; lat-m lat-s são os segundos da latitude; são os graus da longitude; long-d long-m são os minutos da longitude; são os segundos da longitude; long-s alt é a altitude em metros; é o diâmetro do círculo representando a precisão size em metros da localização; é a precisão horizontal em metros; hp vp é a precisão vertical em metros. IN LOC 44 0 0.000 S 19 30 0.000 W 860.00m 0.00m 10000m 10m 14. Well known services WKS ip protocolo serviço [ { serviço } ] onde ip é o IP do objeto; protocolo é o protocolo dos serviços (tcp ou udp); serviço são os serviços conhecidos neste objeto. IN WKS tcp http pop3 smtp 268 Serviço de Redes 15. SRV - Available Services srvce.proto [ .nome] [ ttl ] IN SRV ordem peso porto objeto onde nome simbólico do serviço como _http, _ftp, srvce _sip e _ldap; proto é o nome simbólico do protocolo como _tcp e _udp; nome nome do objeto ou o definido anteriormente ou em $ORIGIN; ttl é o tempo de vida; ordem é o número de prioridade. Quanto mento maior a prioridade; peso é o peso relativo entre objetos; é o número do porto do serviço; porto objeto é o nome do servidor destino. IN SRV 0 5 80 www.meudominio.com. Serviços de Redes 269 16. DNSKEY - DNS Public key DNSKEY flags proto algo dados onde número de 16 bits (0, 256 ou 257): flags bits 0-6 não usados, devem ser 0 bit 7 indica assinatura de zona bits 8-14 não usados, devem ser 0 bit 15 indica ponto de segurança proto código do protocolo (somente 3 é atualmetne valido) algor código do algoritmo 0: reservado 1: RSA-MD5 2: Diffie-Helmann 3: DSA-SHA-1 4: Elliptic curve 5: RSA-SHA-1 6-251: não assinalado 252: Indirect 253: URI privada 254: OID privada 255: reservado chave no codificada em base64 dados linuxtech.com.br. IN DNSKEY 256 3 5 ( AwEAAchq3AcolVSob3ZC3H4YwSYDx6R2V0I1ivfKff0SLWmTQklYjuAT uZZrZWqMMU3J5sXxSo7gT91vNONPvwNsRh089wjF0dJA3/rdGSVt8M0R 1O1wG/pLFiQTE8mjAjBY5TpOAlJgJNWUlQU6xkUmvgOCw+ysw8KFbrgN FyQm5p4T ) 270 Serviço de Redes 17. RRSIG - Signature Record RRSIG tipo algo nome ottl expira inicio keytag dono assinatura onde registro RR tipo algo código do algoritmo como em DNSKEY número de componentes no nome do objeto nomes tempo de vida do objeto ottl expira data de expiração do RRSIG data inicial inicio keytag código de verificação da assinatura objeto dono da chave privada dono assinatura assinatura digital no formato base64 86400 RRSIG SOA 5 3 86400 20100202004030 ( 20100103004030 43461 linuxtech.com.br. KNZkSgaxBqf6kREdbegt+SaVLEgs4xlPBZ1d egRU1x3Gc12paIZ9426NxDT1yOhHrMz4lP1x dtc9jUEyDPXHxt+w7Rr/PbTYbxKS72SFQTgd uCWz1xexI2I511geITmr3mga8V5skgS08T0i lmt+8XKZ2V9WWVF5FK+OrCPCx/4= ) linuxtech.com.br. ) IN RRSIG SOA 5 3 86400 20100202004030 ( 20100103004030 43461 linuxtech.com.br. KNZkSgaxBqf6kREdbegt+SaVLEgs4xlPBZ1d egRU1x3Gc12paIZ9426NxDT1yOhHrMz4lP1x dtc9jUEyDPXHxt+w7Rr/PbTYbxKS72SFQTgd uCWz1xexI2I511geITmr3mga8V5skgS08T0i lmt+8XKZ2V9WWVF5FK+OrCPCx/4= ) Serviços de Redes 271 18. NSEC - Next secure record NSEC próximo ( lista_rr ) onde próximo próximo nome de servidor no arquivo de zona lista de registros para o nome lista_rr IN NSEC www ( A TXT MX NSEC RRSIG ) www IN A 192.168.10.15 IN TXT "Servidor WEB" IN MX 10 mail.meudominio.com. IN RRSIG 272 Serviço de Redes Exemplo de configuração A resolução de nomes utiliza o arquivo /etc/resolv.conf que define o(s) domínio(s) para nomes não qualificados e o(s) servidor(es) de nome default para o cliente do DNS. # # /etc/resolv.conf # search meudominio.com nameserver 192.168.1.1 Seja o domínio meudominio.com. Neste domínio, temos diversas máquinas, cujos endereços e funções são vistos abaixo: Nome da máquina ns mail maq1 maq2 www Endereço IP 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 Função servidor de nomes servidor de e-mail estação 1 estação 2 servidor web Serviços de Redes 273 Suponha que o servidor seja também escravo (um DNS secundário) do domínio outrodominio.br, resolvido pelo servidor primário com IP 192.168.2.1. O arquivo /etc/named.conf pode então conter : # # Arquivo de configuração exemplo, simplificado do BIND 9.2 # options { directory "/var/lib/named"; check-names master warn; pid-file "/var/run/named.pid"; files unlimited; recursion yes; multiple-cnames no; forwarders { 200.150.13.178; # Starix/LinuxSupport 200.150.4.5; # Way Internet }; }; zone "localhost" in { type master; file "localhost.zone"; check-names fail; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" in { type master; file "127.0.0.zone"; check-names fail; allow-update { none; }; }; zone ¨.¨ in { type hint; file "root.hint"; }; zone "meudominio.com" in { type master; file "master/meudominio.com.zone"; allow-transfer { any; }; notify yes; }; zone "1.168.192.in-addr.arpa" in { type master; file "master/192.168.1.zone"; check-names fail; allow-update {none;}; }; zone "outrodominio.br" in { type slave file "slave/outrodominio.zone"; masters { 192.168.2.1; }; }; 274 Serviço de Redes O arquivo meudominio.zone que define o domínio meudominio.com pode ser: ; Zone meudominio.com $ORIGIN br. $TTL 1D meudominio IN SOA meudominio.com. root.meudominio.com. ( 2001030101 ; serial 3H ; refresh 1H ; retry 1W ; expire 1D ) ; TTL minimo IN NS ns.meudominio.com. IN A 192.168.1.1 IN MX 10 mail.meudominio.com. IN RP root.meudominio.com. root.meudominio.com. IN LOC 19 55 00.000 S 43 57 00.000 W 858.00m 0.00m 10000.00m 10.00m IN WKS 192.168.1.1 tcp domain IN WKS 192.168.1.1 udp domain $ORIGIN meudominio.com. ns IN A 192.168.1.1 mail IN A 192.168.1.2 maq1 IN A 192.168.1.3 maq2 IN A 192.168.1.4 www IN A 192.168.1.5 De forma semelhante, o arquivo 192.168.1.zone que define o domínio reverso 1.168.192.in-addr.arpa pode ser: ; Zone 1.168.192.in-addr.arpa $TTL 1D @ IN SOA meudominio.com. root.meudominio.com. ( 2001030101 ; serial 3H ; refresh 1H ; retry 1W ; expire 1D ) ; TTL minimo IN NS ns.meudominio.com. IN A 192.168.1.1 IN MX 10 mail.meudominio.com. IN RP root.meudominio.com. root.meudominio.com. $ORIGIN 1.168.192.in-addr.arpa. 1 IN PTR ns.meudominio.com. 2 IN PTR mail.meudominio.com. 3 IN PTR maq1.meudominio.com. 4 IN PTR maq2.meudominio.com. 5 IN PTR www.meudominio.com. Note que o símbolo @ utilizado no registro SOA acima é substituído pelo domínio do arquivo definido em /etc/named.conf. Assim, o @ é equivalente a "1.168.192.in-addr.arpa.". Serviços de Redes 275 O arquivo slave/outrodominio.zone será criado automaticamente por transferência de zona do servidor primário. O servidor primário 192.168.2.1, deverá permitir a transferência da zona utilizando a diretiva allow-transfer. Segurança no DNS Para a geração das chaves é utilizado o aplicativo dnssec-keygen. Para a geração da assinatura é utilizado o aplicativo dnssec-signzone. Para gerar a assinatura para o dominio meudominio.com, utilizamos, por exemplo, root@thor:/var/lib/named/master # dnssec-keygen -a RSASHA1 -b 512 \ -n zone neudominio.com Kmeudominio.com.+005+12906 root@thor:/var/lib/named/master # o Serão gerados dois arquivos. O registro DNSSEC com a chave pública está no arquivo com a extensão .key (Kmeudominio.com.*.key): meudominio.com. IN DNSKEY 256 3 5 ( AwEAAaPF9T2ArDW8xtD8fguk/x44WQTtB5rhwZv8LFugnzbtotJvhnmB RgNjtaS9N3e8crJ5LCu5+oxKiRDwcFceCkU= ) Este texto deverá ser inserido no arquivo que descreve o domínio que fica normalmente no diretório /var/lib/named/master/. 276 Serviço de Redes E a chave privada está no arquivo com a extensão .private (Kmeudominio.com.*.private) : Private-key-format: v1.2 Algorithm: 5 (RSASHA1) Modulus: o8X1PYCsNbzG0Px+C6T/HjhZBO0HmuHBm/wsW6CfNu2i0m+GeYFGA2O1pL03d7xysnksK7n6jEqJEPBwVx4KRQ== PublicExponent: AQAB PrivateExponent: IVvAES/1Y9i40naroemQwXIOx88T/ns/eWtLCbrU01YOntZQdkWy/eb6DoviEf1JguBvEzCtlGuFpBytLZNfgQ== Prime1: 09YtwfUYEUl+S5/mkepX7pQbL5SOc6CFy1MeTKsUeWE= Prime2: xeqdaTijQEdUoAM6jKmToCI99hPPImj1AnsFB+EIh2U= Exponent1: sUX/LN0qsuzJ4AeEMH/n7iPLTFoJjAG9dZWtOYPBsoE= Exponent2: MQ10FCcgdwb2123VbhV9bDvwZXQFa37d8s5wscI5be0= Coefficient: 0pT8G7+m1148EqLEyg9UdFiPYtWm9bmznyUyVaRPpjc= Para gerar os registros RRSIG com as assinaturas para um domínio utiliza-se o aplicativo dnssec-sigzone. Será gerado o arquivo com extensão .signed que contém os registros RRSIG para todos os objetos definidos no domínio. root@thor:/var/lib/named/master # dns-signzone -o meudominio.com \ meudominio.com.zone Kstarix.br.+005+13026.key meudominio.com.zone.signed root@thor:/var/lib/named/master # o Serviços de Redes 277 Ferramentas de diagnóstico Para diagnosticar problemas no DNS, existem diversas ferramentas disponíveis: dnsdomainname Exibe o domínio DNS nslookup Pesquisa interativa de nomes e IPs. O exemplo abaixo utiliza o nslookup do BIND versão 8 por ser mais completo. hmarx@thor: ~> nslookup Default Server: thor.starix.br Address: 192.168.200.3 > ls linuxtech.br [thor.starix.br] #$ORIGIN linuxtech.br. @ 1D IN A 192.168.200.3 thor 1D IN A 192.168.200.3 www 1D IN A 192.168.200.3 > server ns.linuxsupport.com.br Default Server: ns.linuxsupport.com.br Address: 201.17.146.157 > www.linuxsupport.com.br Server: ns.linuxsupport.com.br Address: 201.17.146.157 Name: www.linuxsupport.com.br AddressL 201.17.146.157 > ^D hmarx@thor: ~> o 278 Serviço de Redes dnsquery Pesquisa em servidores de DNS hmarx@thor: ~> dnsquery -n ns.linuxtech.com.br -t mx starix.com.br ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42483 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 4 ;; starix.com.br, type = MX, class = IN starix.com.br. 1D IN MX 10 mail.linuxsupport.com.br. starix.com.br. 1D IN MX 20 master.softaplic.com.br. starix.com.br. 1D IN NS ns.starix.com.br. starix.com.br. 1D IN NS ns2.starix.com.br. starix.com.br. 1D IN NS master.softaplic.com.br. mail.linuxsupport.com.br. 1D IN A 200.150.13.178 master.softaplic.com.br. 1D IN A 200.162.94.241 ns.starix.com.br. 1D IN A 200.150.13.178 ns2.starix.com.br. 1D IN A 200.150.13.177 hmarx@thor: ~> o traceroute Da mesma forma, o traceroute utilizará o DNS para exibir o nome dos nodos. dig Faz pesquisas em servidores de nome. dnsquery Pesquisa servidores de nome usando o resolver. host Exame de nomes de nodos no DNS. hmarx@thor: ~> host linuxsupport.com.br linuxsupport has address 201.17.146.157 linuxsupport.com.br mail is handled (pri=10) by mail.linuxsupport.com.br linuxsupport.com.br mail is handled (pri=20) by master.softaplic.com.br hmarx@thor: ~> o Serviços de Redes named-xfer Transferência de definição de domínios. thor:~ # named-xfer -z starix.com.br -f starix.zone ns.starix.com.br named-xfer[30426]: send AXFR query 0 to 201.17.146.157 thor:~ # head starix.zone ; BIND version named 8.2.4-REL Thu Sep 20 04:20:40 GMT 2001 ;BIND version root@knox:/usr/src/packages/BUILD/bind8-8.2.4/bin/named ;zone ´starix.com.br´ first transfer ;from 201.17.146.157:53 (local 192.168.200.3) using AXFR at Wed Nov 18 14:08:24 2009 $ORIGN com.br. starix 86400 IN SOA starix.com.br. hmarx.starix.com.br. ( 2002091201 43200 3600 3600000 86400 ) 86400 IN NS ns.starix.com.br. 86400 IN NS ns2.starix.com.br. 86400 IN NS master.softaplic.com.br. thor:~ # o 279 280 Serviço de Redes NIS - Network Information System Em um sistema de computação distribuído, sempre existe um problema de ter cópias de arquivos de configuração comuns nas diversas máquinas. Arquivos como os de password, grupo, hosts, etc., podem ser mantidos em uma base de dados com administração centralizada. A base de dados do NIS contém informações dos arquivos /etc/passwd, /etc/group, /etc/ethers, etc., que serão recuperadas pelas máquinas que estão utilizando NIS. O NIS segue o modelo cliente/servidor. Um servidor NIS é uma máquina que possui os arquivos de dados do NIS, denominados maps. Clientes são máquinas que fazem requisições aos servidores. Os servidores são divididos em mestre (master) e escravos (slaves). O servidor mestre é o único que contém a base de dados e pode modificá-la. Os escravos não modificam a base, apenas tratam as requisições dos clientes. Utilizando o SuSE Linux até a versão 7.3, a configuração básica do NIS pode ser feita pelo YaST ou alterando manualmente o arquivo /etc/rc.config. A partir da versão 8.0, você pode configurar o servidor NIS através do arquivo /etc/sysconfig/ypserv, e o cliente NIS através do arquivo /etc/sysconfig/ypbind. Você pode utilizar os scripts rcypserv e rcypclient (ou rcypbind a partir do SUSE Linux 8.0) para iniciar ou parar o serviço NIS. Para configurar um NIS master, você deve inicialmente definir o nome do domínio. Note que este nome nada tem a ver com o nome do domínio do DNS. Você pode utilizar o programa domainname para isto. Note que este programa é equivalente ao ypdomainname ou nisdomainname e não o dnsdomainname. Para que usuários da base NIS não tenham acesso local ao servidor NIS, certifique-se de que o /etc/passwd no NIS master não contenha a linha: +::0:0:: Serviços de Redes 281 A base de dados NIS normalmente é colocada sob o diretório /var/yp. Neste diretório você encontrará um arquivo Makefile que é utilizado para a construção da base de mapas. Você poderá editá-lo para definir quais mapas serão colocados na base NIS. Procure pelo destino all: e utilize as dependências que desejar. Abaixo você pode ver o trecho do arquivo Makefile onde serão criados os mapas para passwd, group, rpc, services, netid e ypservers. #all: passwd group hosts rpc services netid protocols netgrp mail \ # shadow publickey # networks ethers bootparams printcap \ # amd.home auto.master auto.home auto.local passwd.adjunct \ # timezone locale netmasks all: passwd group rpc services netid ypservers Utilize o make. Automaticamente serão criados os mapas sob o diretório com o nome do domínio definido pelo comando ypdomainname. Os mapas criados possuem nomes como passwd.byname, passwd.byuid, services.byname, services.byservicename, hosts.byaddr, ... Estes mapas ficam no diretório /var/yp/domínio em arquivos com o mesmo nome do mapa. Alguns mapas podem ser referenciados por um apelido. O mapa passwd.byname pode ser referenciado simplesmente como passwd. Nos clientes, inclua nos arquivos base (por exemplo, /etc/passwd) a linha: +::0:0:: Habilite o cliente NIS através do programa ypbind ou pelo script rcypbind. Para permitir que os clientes NIS possam alterar suas senhas no servidor NIS, há o serviço yppasswdd. Ele é disparado no servidor mestre. 282 Serviço de Redes Existem diversas ferramentas para a manipulação das informações da base do NIS. ypdomainname [ domínio ] domainname Exibe ou altera o domínio NIS. hmarx@thor: ~> ypdomainname TREINAMENTO hmarx@thor: ~> o ypwhich [ -d domínio ] [ [ -t ] -m [ mapa ] | [ -Vn ] máquina ] | -x Exibe o nome do servidor NIS de um domínio ou o servidor mestre de um mapa, opcionalmente para uma determinada máquina. Algumas opções: -d domínio -t -m mapa -Vn -x Especifica o domínio NIS desejado Evita a tradução do nome do mapa para o apelido Procura o servidor NIS para o mapa especificado Define a versão do NIS (default é 2) Exibe a tabela de tradução de apelidos de mapas hmarx@thor: ~> ypwhich spider.starix.br hmarx@thor: ~> o Serviços de Redes 283 yppasswd [ -f ] [ -l ] [ -p ] usuário ypchfn usuário ypchsh usuário O programa yppasswd é utilizado para alterar a senha de usuário ou informações na base NIS. O usuário deverá ter aberto uma sessão validada pelo NIS. Note que apenas o root pode alterar as informações de outro usuário. Algumas opções: -f -l -p Altera os campos GECOS (equivalente a ypchfn) Altera o login shell (equivalente a ypchsh) Altera a senha hmarx@thor: ~> yppasswd -f Changing NIS account information for hmarx on thor.starix.br. Please enter password: Changing full name for hmarx onm thor.starix.com.br. To accept the default, simply press return. To enter an empty field, type the word "none". Name: [Helio Marques Sobrinho]: Location [Starix]: Office Phone [3284-3001]: Home Phone []: The GECOS information has been changed on thor.starix.br. hmarx@thor: ~> o 284 Serviço de Redes ypcat [ -kt ] [ -d domínio ] mapa | -x Exibe valores das chave de uma base NIS. Algumas opções: -d domínio -k -Vn -x Especifica o domínio NIS desejado Exibe as chaves do mapa Define a versão do NIS (default é 2) Exibe a tabela de tradução de apelidos de mapas hmarx@thor: ~> ypcat -x Use "ethers" for map Use "aliases" for map Use "services" for map Use "protocols" for map Use "hosts" for map Use "networks" for map Use "group" for map Use "shadow" for map Use "passwd" for map hmarx@thor: ~> o "ethers.byname" "mail.aliases" "services.byname" "protocols.bynumber" "hosts.byname" "networks.byaddr" "group.byname" "shadow.byname" "passwd.byname" ypmatch [ -d domínio ] [ -kt ] chave ... mapa | -x Exibe as informações de uma ou mais chaves de um mapa NIS. Algumas opções: Especifica o dominio NIS desejado Mostra aas chaves do mapa Evita a tradução do nome do mapa para o apelido Evita a tradução do nome do mapa para o apelido -d domínio -k -t -x hmarx@thor: ~> ypmatch hmarx flavia passwd hmarx:$1$pYJmDsRl$5Nzq713I0x5G60nYW7hfh/:1000:3000:Helio Marques Sobrinho,Starix,3284-3001:/home/hmarx:/bin/bash flavia:$1$m4ZTl.qN$/1xPFnxJhtYwPi9t4oNVL.:502:3000:Flavia de Castro Mendes Marques,,3284-3001:/home/flavia:/bin/bash hmarx@thor: ~> o Serviços de Redes 285 Manualmente, a base de dados poderá ser inicializada pelo programa ypinit: /usr/lib/yp/ypinit -m O ypinit irá criar um diretório para o domínio em /var/yp, com os mapas e pedir os nomes dos servidores NIS. Você só pode ter um servidor mestre. Caso queira aumentar o desempenho em uma rede grande, você poderá criar servidores escravos. Dispare o servidor NIS utilizando o programa ypserv ou o script rcypserv. Os servidores escravos são inicializados utilizando o comando: /usr/lib/yp/ypinit -s mestre 286 Serviço de Redes LDAP - Lightweight Directory Access Protocol Originalmente o LDAP foi criado como um front end para o protcolo X.500, pela Universidade de Michigan, implementando a maioria das suas funcionalidades com menor custo. Foram removidas as redundâncias e as operacões raramente utilizadas. O protocolo LDAP é otimizado para leitura e não possui controle de transações ou rollbacks. É estensível através de modificações em seus esquemas. Ele permite a distribuição de servidores e replicação de informações em múltiplos locais. As informações são armazenadas em atributos. O LDAP é melhor no tratamento de informações pequenas e normalmente com transações simples em uma única entrada. Definições DN RDN DIT LDIF OID Distinguished Name Relative Distinguished Name Directory Information Tree LDAP Data Interchange Format Object Identifier Um DN é composto por 2 partes. A parte mais à esquerda é um RDNe o restante é um DN base. O DNS é utilizado para gerar o DN base. Por exemplo, em uid=hmarx,ou=People,dc=linuxtech,dc=com,dc=br O RDN é uid=hmarx e o DN base é ou=People,dc=linuxtech,dc=com,dc=br Serviços de Redes 287 Estrutura hierárquica As entradas são armazenadas em uma estrutura em árvore chamada Directory Information Tree. O DIT é similar ao sistema de arquivos hierárquivo do Unix. Cada entrada pode conter dados e/ou conter informacões sobre outras entradas. Cada servidor contém uma sub-árvore. Esquemas Um esquema é um conjunto de regras que descreve o tipo de dado a ser armazenado, Ele mantém a consistência e a qualidade do dado. Um bom esquema reduz a duplicidade dos dados e mantém uma interface consistente entre as aplicacões e os dados. Um esquema contém atributos requeridos, atributos permitidos, informações de como comparar atributos, limites e restrições de atributos. Um atributo tem um nome (identificador único), um identificador de objeto OID (sequência de números inteiros separados por ’.’, a sintaxe do atributo e se o atributo é multivalorado ou não. 288 Serviço de Redes Os atributos definidos no RFC2256 são: uid cn sn l ou o dc st c User Id Common Name Surname Location Organizational Unit Organization Domain Component State Country LDIF As entradas do LDAP podem ser representadas em um arquivo texto com o formato LDIF - LDAP Data Interchange Format. Isto permite alterações fáceis no dados, backups e transferências de informaçÕes para outros sistemas. Podem ser utilizados os aplicativos ldbmcat e slapcat para converter de base da dados ldbm para LDIF ou os aplicativos ldif2ldbm e slapadd para converter de LDIF para a base de dados ldbm. Exemplo de LDIF dn: uid=hmarx,ou=People, dc=linuxtech,dc=com,dc=br uid: hmarx cn: Helio Marques objectclass: account objectclass: posixAccount objectclass: top loginshell: /bin/bash uidnumber: 1000 gidnumber: 3001 homedirectory: /home/hmarx gecos: Helio Marques,,,, userpassword: {crypt}dF35L2K2TmOVU Serviços de Redes 289 Servidor LDAP A implementação utilizada no Linux é o Openldap que implementa o LDAPv3 com funcionalidades adicionais. O programa slapd é o servidor LDAP que atende as requisições dos clientes e manipula a base de diretórios (DIT). Utilizando o modelo master/slave é possível implementar replicação dos dados: 290 Serviço de Redes O arquivo de configuraçõa é o /etc/openldap/slapd.conf que inclui os esquemas básicos e define os parâmetros de acesso e funcionamento do servidor LDAP. O arquivo ladpd.conf (padrão do openSuSE Linux) é mostrado aqui por partes: 1) Inclusãodos esquemas básicos, móduloes e definição de arquivos de controle dos processos slapd: # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/rfc2307bis.schema include /etc/openldap/schema/yast.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile argsfile /var/run/slapd/slapd.pid /var/run/slapd/slapd.args # Load dynamic backend modules: # modulepath /usr/lib/openldap/modules # moduleload back_bdb.la # moduleload back_hdb.la # moduleload back_ldap.la Serviços de Redes 2) Política de controle de acesso (ACLs): # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access to user password # Allow anonymous users to authenticate # Allow read access to everything else # Directives needed to implement policy: access to dn.base="" by * read access to dn.base="cn=Subschema" by * read access to attrs=userPassword,userPKCS12 by self write by * auth access to attrs=shadowLastChange by self write by * read access to * by * read # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! 291 292 Serviço de Redes 3) Definicão da base de dados Aqui o domínio deve ser alterado para o escolhido. ############################################################ # BDB database definitions ############################################################ database bdb suffix "dc=my-domain,dc=com" checkpoint 1024 5 cachesize 10000 rootdn "cn=Manager,dc=my-domain,dc=com" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw secret # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/ldap # Indices to maintain index objectClass eq Uma vez configurado, o servidor poderá ser iniciado através do comando: root@thor: # /etc/init.d/slapd start ou, no openSuSE, root@thor: # rcldap start Serviços de Redes 293 De forma similar aos outros serviços, pode-se habilitar o slapd para que ele inicie automaticamente durante o processo de boot, através de: root@thor: # chkconfig slapd on Utilização do Servidor LDAP Para alterar a senha de uma entrada no LDAP utiliza-se o comando ldappasswd, por exemplo: ldappasswd -W -D ’uid=hmarx,ou=People, dc=linuxtech,dc=com,dc=br’ \ ’uid=hmarx’ Pesquisas são feitas utilizando o comando ldapsearch. Exemplos: ldapsearch -L ’uid=*’ ldapsearch -L ’objectclass=posixGroup’ ldapsearch -L ’objectclass=posixAccount’ ldapsearch -D ’uid=hmarx,ou=People, dc=linuxtech,dc=com,dc=br’ -W -L \ ’uid=hmarx’ Alterações podem ser feitas utilizando o comando ldapmodify. Exemplo: ldapmodify -W -r -D "cn=Manager, c=linuxtech,dc=com,dc=br" < hmarx.ldif 294 Serviço de Redes A autenticação de usuários no Linux pode utilizar o LDAP através do PAM (pluggable authentication module. Outros serviços, como o sendmail, apache, squid, podem utilizar o LDAP, alterando seus respectivos arquivos de configuração. Para o gerenciamento do LDAP através de interface gráfica via WEB há o pacote RPM ldap-account-manager (LAM). No openSuSE o LAM é instalado no diretório /srv/www/htdocs/lam. Ele deve ser configurado utilizando o script configure dentro deste diretório. Utilizando o servidor WEB (apache), o LAM será acessível através da URL: http://localhost/lam ldapmodify -W -r -D "cn=Manager, c=linuxtech,dc=com,dc=br" < hmarx.ldif Serviços de Redes 295 Servidor WEB O servidor WEB é um programa que atende requisições do protocolo HTTP - HyperText Transfer Protocol. No Linux, o servidor padrão é o apache. Documentos no padrão HTML, formados por textos, imagens, sons e vídeos, são gerenciados e transferidos aos clientes (browsers) que os requisita. Para tornar as páginas dinâmicas, são utilizados programas. Estes programas são chamados scripts, ou simplesmente CGIs (Common Gateway Interface). Os CGIs podem ser escritos em qualquer linguagem de programação (interpretada ou compilada). As mais comuns são: C, C++, perl, java, ou mesmo shell scripts. Para melhorar o desempenho e controlar o acesso a documentos e sites HTML, utiliza-se um programa proxy. No Linux, o proxy padrão é o squid. Configuração do Apache A configuração básica do apache é feita no arquivo /etc/httpd/httpd.conf. A configuração do apache2 está em arquivos no diretório /etc/apache2. O arquivo /etc/apache2/httpd.conf inclui diversos arquivos de configuração. Nestes arquivos são definidos o modo de carga do httpd (standalone ou inetd), os diretórios dos documentos, imagens, scripts CGI, etc. São definidos também os portos TCP/UDP (normalmente 80 para http e 443 para https). Os arquivos padrão a serem transferidos (index.htm[l], por exemplo), as permissões e seguranças também são definidos. Podem ser criados hosts virtuais. Cada um pode ter seu diretório com os documentos HTML e programas CGI. O httpd pode ser disparado em modo standalone. São disparados processos httpd, que aguardam uma conexão nos portos definidos. No modo inetd, o httpd só será disparado caso a conexão seja requisitada por um cliente. 296 Serviço de Redes O arquivo /etc/httpd/httpd.conf é dividido em sessões. Na sessão 1 são definidos os parâmetros globais. As principais diretivas da sessão 1 são: Diretiva Significado ServerType Modo do disparo do httpd (standalone ou inetd) Diretório raiz do servidor Tempo em segundos antes de enviar ou receber timeout Permite conexões persistentes (atende mais de uma requisição por conexão) Número máximo de requisições por conexão Espera em segundos pela próxima requisição do mesmo cliente antes de fechar uma conexão Número mínimo de processos httpd aguardando requisições Número máximo de processos httpd aguardando requisições Número inicial de processos httpd disparados Número máximo de clientes simultâneos Número máximo de requisições por processo Portos/IPs adicionais aos default ServerRoot Timeout KeepAlive MaxKeepAliveRequests KeepAliveTimeout MinSpareServers MaxSpareServers StartServers MaxClients MaxRequestPerChild Listen LoadModule AddModule ExtendedStatus Módulos carregados pelo apache Reconstrução dos módulos definidos em LoadModule Habilita informações completas exibidas em server-status Serviços de Redes 297 A sessão 2 configura o servidor principal (default) e opções não definidas nos hosts virtuais (sessão 3). As principais diretivas da sessão 2 são: Diretiva Significado Port Listen Porto para o protocolo HTTP (padrão : 80) Portos e IPs adicionais (padrão : 80 para HTTP e 443 para HTTPS) Usuário dos processos disparados (wwwrun) Grupo dos processos disparados (nogroup) Endereço de e-mail para envio de problemas. É colocado em páginas de erro geradas pelo apache Nome do servidor enviado aos clientes. Este nome deve ser resolvido no DNS Raiz para os documentos (páginas WEB) Diretório das páginas pessoais (em ~usuário) Arquivo(s) de índice default (padrão: index.html) Arquivos para o controle de acesso a cada diretório Resolve o nome dos IPs dos clientes (DNS reverso) Arquivo para definição dos tipos de arquivos pela extensão (padrão:/etc/httpd/mimes.types) Tipo a ser enviado ao cliente para arquivos desconhecidos (padrão:text/plain) Arquivo para descoberta do tipo do documento (padrão:/etc/httpd/magic) User Group ServerAdmin ServerName DocumentRoot UserDir DirectoryIndex AccessFileName HostNameLookups TypesConfig DefaultType MIMEMagicFile 298 Serviço de Redes O apache pode gerar logs de acesso e erro. Os logs de acesso podem ser definidos em diversos formatos. O formato do log de acesso é uma cadeia de caracteres que pode incluir pseudo-variáveis como: Variável Significado %h %a %l %u %t %r IP ou nome do computador remoto IP do cliente %s %b %U %{Referer}i %{User-Agent}i Identificação do usuário remoto (via identd) Identificação do usuário autenticado ou Horário de acesso Método, URI e versão do HTTP (primeira linha da requisição) Código de erro (por exemplo, 200 = OK e 404 = documento não encontrado) Número de bytes transferidos O caminho da URL URL que causou a referência à requisição Identificação completa do cliente (browser e plataforma) Os arquivos de log podem ser definidos pelas diretivas: Diretiva Significado ErrorLog Arquivo padrão para log de erros (padrão:/var/log/httpd/error_log) Nível das mensagens de erro (debug, info, notice, warn, crit, alert, emerg) (padrão:warn) Definição de formatos de log para CustomLog Arquivo e formato do log de acesso (padrão:/var/log/httpd/access_log e common) LogLevel LogFormat CustomLog Serviços de Redes 299 Cada diretório acessível pelo apache pode ter o seu acesso controlado através de diretivas incluídas entre os tags <Directory diretório> e </Directory>. As principais diretivas de controle de acesso são: Diretiva Significado AuthUserFile AuthGroupFile AuthUserDBMFile AuthGroupDBMFile Options Nome do arquivo texto com usuários e senhas Nome do arquivo texto com os grupos Nome do arquivo DBM com usuários e senhas Nome do arquivo DBM com grupos Opções de acesso precedidas ou não por + ou (None, All, Indexes, Includes, FollowLinks, ExecCGI e Multiviews) Opções que podem ser alteradas no arquivo definido em AccessFileName (None, All, Options, FileInfo, AuthConfig e Limit) Ordem de processamento das diretivas Allow from e Deny from Clientes com acesso permitido Clientes com acesso negado AllowOverride Order Allow from Deny from Satisfy Valida todas as diretivas Allow from e Deny from No apache2, os arquivos incluidos pelo /etc/apache2/httpd.conf contém as configuracões de cada sessão: default-server.conf server-tuning.conf errors.conf listen.conf uid.conf vhosts.d/*.conf mod_autoindex-defaults.conf mod_status.conf mod_info.conf mod_tidy.conf ssl-global.conf mod_log_config.conf mod_userdir.conf mod_mime-defaults.conf mod_usertrack.conf 300 Serviço de Redes Uma requisição de um cliente é formada por 3 seções: a primeira linha da mensagem contém o comando HTTP, conhecido como método, a URI (Uniform Resource Identifier) que identifica o arquivo requisitado e a versão do HTTP. Além dos 3 métodos mais comuns (GET, HEAD e POST), há ainda os métodos LINK, UNLINK, PUT, DELETE, OPTIONS, TRACE, CONNECT e PROPFIND. O método GET é o mais utilizado pelos browsers para obter os documentos. O método HEAD é equivalente ao GET exceto que os dados (por exemplo, o corpo da página) não são enviados. O método POST permite que sejam enviados dados para o servidor. Ele é utilizado em forms onde os dados são transformados em uma lista de variáveis e valores a serem processados por um CGI. Por exemplo, a requisição: HEAD /index.html HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/3.01 (X11; Linux 2.4.19-4GB i686) Host: www.starix.com.br Accept: image/gif, image/jpeg, */* Gera uma resposta do servidor como a seguinte: HTTP/1.1 200 OK Date: Wed, 03 Jun 2003 14:23:53 GMT Server: Apache/1.3.26 (Linux/SuSE) PHP/4.2.2 mod_perl/1.27 Last-Modified: Sat, 31 May 2003 17:16:42 GMT ETag: "113b69-d1-3e8e37a" Accept-Ranges: bytes Content-Length: 2857 Content-Type: text/html Serviços de Redes 301 Métodos de acessos a páginas WEB podem ter acessos limitados incluindo diretivas de controle entre <Limit métodos> e </Limit> ou <LimitExcept métodos> e </LimitExcept>. Para controlar a visibilidade de arquivos basta incluir diretivas de de controle entre <Files arquivos> e </Files>. Um exemplos típico inclui os arquivos de controle de acesso (que comecam com .ht) , por default, .htaccess: <Files ~ "^\.ht"> Order allow, deny Deny from all Satisfy All </Files> Alguns caminhos na URL não são exatamente os caminhos dos diretórios a partir da raiz do site (DocumentRoot). Alguns exemplos são o diretório dos CGIs, o diretório dos ícones e o manual do apache: ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/" Alias /icons/ "/srv/www/icons/" Alias /manual/ "/usr/local/httpd/manual/" Outros exemplos são páginas geradas pelo próprio apache como os handlers de /server-status e /server-info. 302 Serviço de Redes Sites Virtuais Páginas para domínios virtuais podem ser definidas através de diretivas inseridas entre <VirtualHost nome> e </VirtualHost>. Deve ser definida a diretiva NameVirtualHost para que o apache selecione o site web a partir do nome. O nome deverá ser resolvido pelo DNS. O nome pode ser substituído por um IP, por IP:porto, por * ou *:porto, definindo a partir de que IP/porto o domínio virtual estará disponível. O nome será resolvido para o IP utilizando o DNS. No SuSE Linux, os domínios virtuais são definidos nos arquivos *.conf do diretório /etc/apache2/vhosts.d/. Crie um arquivo para cada domínio virtual. Para que um site seja acessível tanto por http://www.meudominio.com quanto por http://meudominio.com os nomes www.meudominio.com e meudominio.com devem ser resolvidos para um IP no DNS (registro A). Estes e outros apelidos podem ser definidos na sessão <VirtualHost www.meudominio.com> diretiva ServerAlias, como mostrado a seguir. Serviços de Redes Arquivo /etc/apache2/vhosts.d/meudominio.com.conf <VirtualHost www.meudominio.com> ServerName www.meudominio.com ServerAlias meudominio.com DocumentRoot /srv/www/meudominio.com/htdocs ErrorLog logs/meudominio-error.log CustomLog logs/meudominio-access.log ScriptAlias /cgi-bin/ "/srv/www/meudominio.com/cgi-bin/" Alias /icons/ "/srv/www/icons/" <Directory "/srv/www/meudominio.com/htdocs/private"> AllowOverride None AuthType Basic AuthName "Acesso restrito" AuthUserFile /srv/www/meudominio.com/users require valid-user </Directory> </VirtualHost> 303 304 Serviço de Redes O arquivo de autenticação definido pela diretiva AuthUserFile é criado e atualizado pelo programa /usr/bin/htpasswd ou /usr/sbin/htpasswd2. Para o arquivo definido pela diretiva AuthDBMUserFile, é utilizado o programa /usr/bin/dbmmanage ou /usr/sbin/dbmmanage2. O apache pode também gerar páginas automaticamente para alguns caminhos especiais da URL definidos entre <Location caminho> e </Location>. A diretiva SetHandler define como o caminho será tratado, por exemplo: <Location /cgi-bin> AllowOverride None Options +ExecCGI - Includes SeHandler cgi-script </Location> Outros caminhos virtuais são o /server-info, o /server-status e o /backhand. Os módulos devem ser habilitados nos arquivos de configuração do Apache (ou na variável APACHE_MODULES do arquivo /etc/sysconfig/apache2). Até o SuSE Linux 7.3, para que o apache seja disparado automaticamente, coloque START_HTTP=yes no arquivo /etc/rc.config. e algumas opções esão definidas em /etc/rc.config.apache.rc.config. A partir do SuSE Linux 8.0 as configurações estão em /etc/sysconfig/apache ou /etc/sysconfig/apache2 (executando depois o SuSEconfig) e você deverá definir os runlevels em que o apache irá rodar. Utilize o YaST para simplificar este processo. Você pode utilizar o script rcapache para iniciar, parar, reinicializar ou recarregar a configuração do apache manualmente. Conforme definido em /etc/httpd/httpd.conf (ou no arquivo /etc/apache2/httpd.conf), arquivos como .htpasswd (ou .htaccess) podem existir nos diretórios dos documentos WEB para controle de acesso com senha por usuários ou grupos. Note que diretivas de controle de acesso podem também ser definidas para cada VirtualHost. Serviços de Redes 305 O apache gera diversos logs que podem ser analisados por programas como o webalizer que cria relatórios e gráficos de acessos para páginas WEB: 306 Serviço de Redes Servidor de proxy O software padrão de proxy é o squid. Além de acelerador para acesso as páginas WEB, ele serve também para controlar e registrar os acessos a elas. O arquivo de configuração do squid é o /etc/squid.conf até o SuSE 7.3 e o /etc/squid/squid.conf a partir do SuSE 8.0. Este arquivo contém diversos parâmetros para configurar a utilização de memória e de espaço em disco pelos objetos armazenados pelo squid. Além disto, ele contém regras de controle de acesso às páginas WEB. Um proxy é normalmente utilizado em conjunto com um firewall. Utilizando transparent proxy pode-se acelerar e controlar o acesso a páginas WEB mesmo que o usuário do browser não defina a utilização de proxy. Para controle de acesso deve-se primeiro definir o que vai ser controlado. Isto é feito através das acls (Access Control Lists). Uma acl é definida por uma das seguintes sintaxes globais: acl nome tipo argumentos acl nome tipo " arquivo" O tipo define elementos para o controle: src, dst, srcdomain, dstdomain, time, port, proto, method, browser, user, srcdom_regex, dstdom_regex, maxconn, snmp_community, ... O formato do(s) argumento(s) irá depender do tipo da acl. Assim, por exemplo, src requer um argumento tipo ip/máscara, srcdomain requer um domínio (como .starix.com.br), port pode ser definido pelo seu número ou por uma faixa (0-1024, por exemplo), e method pode ser, por exemplo, GET, PUT ou POST. Serviços de Redes 307 Os argumentos de uma acl podem ser colocados no arquivo, um em cada linha. As acls podem ser utilizadas nos controles de acesso ao porto http (http_access) ou ao porto icp (icp_access), utilizando as sintaxes: http_access { allow | deny } [ ! ] nome-da-acl ... icp_access { allow | deny } [ ! ] nome-da-acl ... O símbolo ! indica negação da acl. Estas regras de controle são processadas sequencialmente até que alguma seja válida, permitindo ou negando o acesso. Caso nenhuma regra http_access (ou icp_access) seja satisfeita pelas condições de acesso, o squid assumirá o contrário do definido pela última regra. É uma boa prática definir http_access allow all ou http_access deny all como última regra para evitar confusões. Por exemplo, para permitir o acesso apenas para a rede local, durante o horário de serviço a sites cujas URLs que não possuam palavras restritas contidas no arquivo /etc/squid/bad_words, o controle de acesso pode ser: # listas de controle de acesso acl bad_words urlpath_regex "/etc/squid/bad_words" acl local_net src 192.168.200.0/24 acl workdays M-F 08:00-17:59 # acessos http http_access deny bad_words http_access deny ! local_net http_access allow workdays http_access deny all O squid mantém o cache das páginas em um diretório, normalmente /var/squid/cache (versões do SuSE Linux anteriores a 8.0) ou /var/cache/squid (versão SuSE Linux 8.0 ou superior). Este diretório é definido pela diretiva cache_dir. Podem ser definidos vários diretórios utilizando uma linha cache_dir para cada diretório. Para os tipos ufs (mais utilizado), aufs e diskd, podem ser definidos o número de diretórios no primeiro e segundo nível. Os default são 16 diretórios no primeiro nível e 256 no segundo, reservando 100MB. Eles pode ser criados através de squid -z. 308 Serviço de Redes O squid gera logs no diretório /var/squid/logs (versão SuSE Linux antes da 8.0) ou /var/log/squid (versão SuSE Linux 8.0 ou superior) que podem ser analisados por programas como o calamaris para a geração de relatórios de acessos. Entradas no arquivo de log de acesso do squid (/var/log/squid/access.log) contém o instante do acesso o número de bytes, o IP de origem, o status da requiisicão e a URL acessada. Alguns exemplos podem ser vistos abaixo: 1262558475.147 1752 192.168.200.41 TCP_MISS/200 17375 GET http://www.linux.org/ DIRECT/198.182.196.56 text/html 1262558489.078 1034 192.168.200.41 TCP_REFRESH_HIT/200 1509 GET http://pagead2.googlesyndication.com/pagead/abglogo/abg-en-100c-000000.png DIRECT/66.249.80.164 image/png 1262558531.075 28 192.168.200.41 TCP_HIT/200 622 GET http://www.google.com/images/icons/sectionized_ui/play_c.gif - NONE/- image/gif 1262558670.032 5093 192.168.200.41 TCP_REFRESH_MISS/200 109887 GET http://www.kde.org/dot/kde-apps-content.rdf - DIRECT/62.70.27.118 text/rdf 1262561636.080 2 192.168.200.41 TCP_DENIED/403 1428 GET http://www.playboy.com/ - NONE/- text/html Serviços de Redes 309 Calamaris O calamaris é usado para analisar os logs de acesso do squid e gerar uma página WEB com os relatórios. Os relatórios gerados são: Summary Incoming requests by method Incoming UDP-requests by status Incoming TCP-requests by status Outgoing requests by status Outgoing requests by destination Request-destinations by 2nd-level-domain Request-destinations by toplevel-domain TCP-Request-protocol Requested content-type Requested extensions Incoming UDP-requests by host Incoming TCP-requests by host Distribution Histogram Performance in 1 hour steps 310 Serviço de Redes O script bash abaixo pode ser utilizado via cron para periodicamente atualizar o relatório de acesso utilizando o calamaris. Altere as variáveis de configuracão para o seu domínio. #!/bin/sh # # Script para gerar relatorio do Squid # # Helio Marques <[email protected]> # (C) 2002-2010 HMarx #---------------------------------------------------------------------------------# Configuration TITLE="Linuxtech" CAT=‘which cat‘ CALAMARIS=‘which calamaris‘ ACCESSFILE=/var/log/squid/access.log CACHE_FILE=/var/log/squid/calamaris_cache.db REP_FILE=/srv/www/linuxtech.com.br/htdocs/proxy/index.html #---------------------------------------------------------------------------------if [ -f $CACHE_FILE ] then $CAT $ACCESSFILE | $CALAMARIS -F ’html’ -H "$TITLE" -a -u -i $CACHE_FILE o $CACHE_FILE > $REP_FILE else $CAT $ACCESSFILE | $CALAMARIS -F ’html’ -H "$TITLE" -a -u > $REP_FILE fi Serviços de Redes A seguir podem ser vistos alguns dos relatórios gerados. 311 312 Serviço de Redes Serviços de Redes 313 314 Serviço de Redes Serviços de Redes 315 squidGuard Há ainda o plugin squidGuard para o squid que permite a definição de filtros, redirecionamento e controle de acesso. Ele é facilmente configurado através do arquivo /etc/squidguard.conf. Você poderá encontrar exemplos de configuração nos arquivos do diretório /usr/share/doc/packages/squidgrd. Após configurá-lo, altere o programa de redirecionamento do squid para o squidGuard na diretiva redirect_program no arquivo squid.conf. redirect_program /usr/sbin/squidGuard -c /etc/squidguard.conf Normalmente o squidGuard utiliza os arquivos de dados do diretório /var/lib/squidGuard/db, e gera os logs em /var/log/squidGuard. 316 Serviço de Redes Correio eletrônico - e-mail Um usuário de um sistema Unix-like possui um endereço eletrônico na forma: usuário@máquina ou domínio O símbolo @ é chamado (e lido) at em inglês, o que significa em. Por exemplo, [email protected] é o endereço eletrônico do usuário hmarx no domínio starix.com.br. No Brasil, o símbolo @ é chamado de arroba. Todo usuário local possui uma caixa postal onde os seus e-mails de chegada são armazenados. Os e-mails do usuário usuário são processados pelo procmail. Normalmente são armazenados diretamente no arquivo /var/spool/mail/usuário. O comportamento do procmail pode ser alterado através do arquivo .procmailrc residente no diretório do usuário (~usuário). O sistema de e-mail é formado por três componentes: MUA - Mail User Agent Esta é a interface utilizada pelo usuário para ler e escrever e-mails. Hoje existem centenas de aplicativos que são ou incluem o MUA. Alguns exemplos são: mail, mutt, pine, elm, xfmail, coolmail, Kmail, Netscape Messenger, Applixware, StarOffice, entre outros. MDA - Mail Delivery Agent Responsável pela entrega do e-mail ao usuário. O mais comum é o procmail já citado acima. O comportamento default do procmail é simplesmente colocar o e-mail na caixa de entrada do usuário, adicionando-o ao fim do arquivo que representa a caixa postal de entrada daquele usuário (/var/spool/mail/usuário). Serviços de Redes 317 MTA - Mail Transport Agent São os programas que tratam da transmissão e recepção de e-mails. Os mais utilizados são o sendmail, o smail, o exim, o postfix e o qmail. Todos estes programas são totalmente configuráveis às necessidades do sistema de email. Há ainda programas que aceitam conexões dos MUAs para que o usuário possa ler seus e-mails. A conexão pode ser através de protocolo POP (Post Office Protocol) ou IMAP (Internet Message Access Protocol). Com o protocolo POP, os e-mails são transferidos da caixa de entrada para folders do computador rodando o MUA. Na utilização de IMAP, os e-mail permanecem no servidor. A decisão de apagar ou não as mensagens lidas (ou não) é feita normalmente por configuração do MUA. Hoje é muito comun a utilização do chamado webmail. Neste caso os emails são enviados e recebidos através de páginas WEB. Os e-mails permanecem no servidor e podem ser lidos de qualquer lugar e máquina. Os programas que implementam um webmail pode utilizar protocolos como o POP ou IMAP, ou ainda tratar diretamente o arquivo da caixa de entrada do usuário. 318 Serviço de Redes Exemplo de MUA: Kmail - a interface do usuário no ambiente gráfico KDE. Mutt - um dos diversos MUAs com interface texto Serviços de Redes 319 Protocolos de e-mail Existem dois protocolos básicos: o de envio e o de recebimento ou leitura de e-mail. O protocolo de envio de e-mail é o SMTP - Simple Mail Transfer Protocol. O roteamento de mensagens é tratado pelas máquinas Mail Exchange (definidas nos registros MX do DNS). O protocolo de leitura de e-mails é normalmente o POP (hoje na sua versão POP3). O protocolo POP é basicamente configurado no MUA. Um e-mail no diretório de spool / | Cabeçalho / \ | \ Corpo / | / \ | \ From [email protected] Sun Jan 16 14:08:42 2000 Return-Path: <[email protected]> Received: (from [email protected]>) by thor.starix.com.br (8.9.3/8.9.3) id OAA14834 for hmarx; Sun, 16 Jan 2000 14:08:41 -0200 Date: Sun, 16, Jan 2000 14:08:41 -0200 From: Flavia de Castro Mendes Marques<[email protected]> Message-Id: <[email protected]> To: [email protected] Subject: Um simples e-mail Hi Hmarx ! Como vai ? E os projetos ? Abraços, Flavia Uma mensagem eletrônica é, normalmente, transferida em formato texto, mesmo contendo arquivos binários anexos. Esta mensagem é armazenada no arquivo de spool e é composta por um cabeçalho e um corpo. O cabeçalho contém informações como a origem, destino, assunto, data e nomes de arquivos anexos. O corpo contém o texto da mensagem e os arquivos anexos. Note que, entre o cabeçalho e o corpo, há uma linha em branco. 320 Serviço de Redes Estudaremos aqui o sendmail, o MTA mais utilizado em plataformas Unix. Protocolo do sendmail Quando um usuário em uma máquina (local) quer enviar um e-mail para um usuário em outra máquina (remota), é estabelecida uma conexão SMTP. O protocolo SMTP é muito simples. A máquina local se identifica, informa o remetente do e-mail, o destinatário do e-mail e o conteúdo (corpo) da mensagem. A máquina remota pode realizar verificações aceitando ou não as diversas informações. Veja abaixo um diagrama simples desta conversação. Serviços de Redes 321 Configuração do sistema de e-mail Existem diversos níveis de configuração. No MUA, o usuário irá informar sua identidade (nome, e e-mails) e os servidores para envio e recepção de mensagens. Ele pode decidir se as mensagens irão ou não ser removidas do servidor após serem transferidas para o MUA. Um usuário local pode fazer um re-encaminhamento automático de suas mensagens criando o arquivo .forward em seu diretório pessoal contendo: • usuário2 Apenas redireciona para o usuário requerido • \usuário,usuário2 Redireciona para o usuário2, mantendo uma cópia para o usuário • \usuário, "| programa" Mantém uma cópia para o usuário e passa a mensagem como entrada para o programa Você pode criar apelidos para um usuário no arquivo /etc/aliases. Após modificá-lo, execute o programa newaliases (ou sendmail -bi). Ele irá reconstruir o arquivo /etc/aliases.db. Usuários em domínios virtuais podem ser definidos em /etc/mail/virtusertable. Deve ser utilizado o programa makemap para atualizar a base de dados toda vez que este arquivo for alterado. Isto é feito automaticamente pelo SuSEconfig. Os arquivos texto no diretório /etc/mail podem ser convertidos nas bases de dados .db no mesmo diretório utilizando-se o make. O arquivo /etc/mail/Makefile já está configurado para executar os programas necessários para reconstruir a base de dados do sistema de e-mail. 322 Serviço de Redes Configuração do sendmail O sendmail é o programa mais usado como MTA. Sua configuração básica está no arquivo /etc/sendmail.cf. Podem ser configuradas informações como os nomes da máquina local (nome e/ou domínio), regras de tratamento dos e-mails (chamadas de regras de reescrita), seguranças e limitações. Este arquivo utiliza diversos arquivos texto e .db localizados em /etc/mail. Abaixo pode ser visto um diagrama simplificado do fluxo das regras de tratamento dos e-mails: As regras e os valores pré-definidos pela SuSE são bastante razoáveis. A configuração do SuSE Linux através do YaST já modifica alguns dos parâmetros principais nos arquivos de configuração. Você pode também alterar os valores das variáveis definidas diretamente nos arquivos /etc/rc.config e /etc/rc.config.d/sendmail.rc.config para o SuSE Linux 7.x, ou nos arquivos /etc/sysconfig/mail e /etc/sysconfig/sendmail para o SuSE Linux 8.x ou superiores. Execute o SuSEconfig para efetivar as alterações. Serviços de Redes 323 Algumas variáveis importantes são: Em /etc/sysconfig/mail: MAIL_CREATE_CONFIG Variável Valores yes | no FROM_HEADER <domínio> SMTPD_LISTEN_REMOTE yes | no CONF_TYPE standard | advanced | undef yes | no SENDMAIL_EXPENSIVE Significado O SuSEconfig gerará o arquivo sendmail.cf Domínio default para FROM Aceita conexões remotas ? Tipo de configuracão do servidor de e-mail só despacha e-mail se o sendmail for disparado manualmente Estas opcões são independentes do MUA (no openSuSE, sendmail ou postfix). 324 Serviço de Redes Em /etc/sysconfig/sendmail: Variável SENDMAIL_LOCALHOST SENDMAIL_SMARTHOST SENDMAIL_NOCANONIFY SENDMAIL_ARGS SENDMAIL_CLIENT_ARGS MASQUERADE_DOMAINS Valores localhost ... <servidor do provedor> yes | no -L sendmail -Am -bd -q30m om -L sendmail-client -Ac -q30m <dominio> ... SENDMAIL_EXPENSIVE yes | no SMTP_AUTH_MECHANISMS gssapi | otp | login | plain | digest-md5 | cram-md5 | all gssapi | otp | login | plain | digest-md5 | cram-md5 | all server | client | both <rbl-server> ... SMTP_AUTH_SERVER STARTTLS SENDMAIL_DNSRBL Significado Nomes da máquina local Servidor opcional que transporta seus e-mails Transforma os e-mails na forma canônica (requer pesquisas no DNS) Opções de execução do sendmail Opções de execução do sendmail client Domínios a serem mascarados com $FROM_HEADER Só despacha e-mail se o sendmail for disparado manualmente Lista de mecanismos de autenticação como cliente Lista de mecanismos de autenticação como servidor Uso da certificação Servidores de pesquisa em DNS por open relays Alguns parâmetros como temporizações, limite de tamanho de mensagens, limite de conexões, limite de processos e filas de e-mail devem ser modificados diretamente no arquivo /etc/sendmail.cf. Serviços de Redes 325 Configurações mais complexas Caso queira configurar o sendmail manualmente, você deve fazer SENDMAIL_TYPE="no", criar ou modificar o sendmail.cf (use o /etc/mail/linux.mc como template) e executar o SuSEconfig. Exemplo: thor:~ # cp /etc/mail/linux.mc mylinux.mc thor:~ # p <edite o mylinux.mc> thor:~ # m4 mylinux.mc > /etc/sendmail.cf thor:~ # p Você pode ainda precisar editar alguns arquivos como: Arquivo /etc/mail/virtusertable /etc/mail/relay-domains /etc/mail/access /etc/mail/genericstable /etc/mail/mailertable /etc/mail/local-host-names Definição mapeamento de usuários de domínios virtuais definição de dominios para o qual será aceito relay políticas de acesso mapeamento de usuários não qualificados definição de transportadores de e-mail nomes de hosts e domínios considerados locais Não se esqueça de atualizar os arquivos .db utilizando o make no diretório /etc/mail (ou executando o SuSEconfig). 326 Serviço de Redes Programas adicionais ao sistema de e-mail Hoje há uma preocupação muito grande com os vírus transmitidos através de e-mails. Para isto pode ser utilizado o amavis que é um programa que decompõe um e-mail em suas partes e ativa um anti-vírus à sua escolha para verificar a existência e eliminar os vírus. Versões atualizadas do amavis são disponíveis no site http://www.amavis.org. Além do anti-vírus a ser utilizado (como antivir da H+BEDV e o uvscan da McAfee, entre outros), ele permite a configuração de que avisos e para quem deverá ser enviado (destinatário, remetente e administrador ou postmaster). Para que a verificação de um sistema anti-vírus seja eficaz, ele deverá ser atualizado com frequência. É comum uma empresa possuir um link com um provedor de acesso à Internet compartilhando este acesso através de um gateway. Esta empresa poderá ter um servidor de email local, muitas vezes inacessível pela Internet. Este servidor permitirá que uma estação de trabalho local (principalmente com sistemas Microsoft Windows) faça o envio de e-mails de forma mais eficiente (utilizando a velocidade da rede local), liberando a máquina para a execução de outros aplicativos. Este servidor poderá executar ainda o fetchmail que, com uma frequência definível, busca os e-mails de um provedor da Internet para as caixas locais dos usuários. Neste processo, o fetchmail também irá utilizar o sendmail para o envio local, utilizando assim o amavis para a verificação de existência de vírus. Logo, nenhum e-mail sai ou entra na empresa contendo vírus. Fila de e-mails Você poderá ver a fila de e-mails através do programa mailq. O processamento da fila poderá ser forçado chamando o sendmail com a opção -q, normalmente utilizada em conjunto com -v para acompanhar o tratamento das mensagens. Serviços de Redes 327 FTP - File Transfer Protocol Para transferir arquivos de uma máquina para outra, normalmente é utilizado o protocolo FTP. Existem diversos servidores disponíveis para o Linux: ftpd, wu-ftpd, protftp,... Existe uma versão mais simples do protocolo FTP, denominada TFTP - Trivial File Transfer Protocol, usado pelo bootp - protocolo de boot remoto. A configuração do FTP é feita através dos seguintes arquivos, encontrados no diretório /etc: Arquivo /etc/ftpaccess /etc/ftpusers /etc/ftpconversions /etc/ftpwelcome /etc/ftpchroot Significado define o comportamento do serviço de ftp usuários que não podem se conectar ao serviço de ftp conversões conhecidas pelo servidor de ftp mensagem de boas vindas usuários cuja sessão FTP terá o diretório pessoal como raiz No diretório pessoal do usuário ftp, normalmente /usr/local/ftp, no sub-diretório msgs, podem ser criados arquivos com mensagens especiais (como welcome.msg e msg.dead). Note que, quando um usuário é chrooted, ele deve ter em seu diretório os arquivos mínimos para que todos os comandos FTP funcionem corretamente (como o bin/ls e as bibliotecas utilizadas, em lib/). Clientes FTP Além de navegadores como o Lynx, o Netscape, o Konqueror e o StarOffice, existem diversos clientes, como o tradicional ftp, o xftp e o ncftp. 328 Serviço de Redes Sessões remotas Ao contrário da maioria dos sistemas operacionais, você não precisa estar na console do computador para executar programas nele. Você pode utilizar um terminal em modo texto ou gráfico, estando até mesmo a quilômetros de distância do computador. Para isto, existem programas servidores como o telnetd , o rlogin e o sshd, além e XServers para diversas plataformas. Um terminal modo texto ou semi-gráfico pode ser conectado a um computador através de uma porta serial, um modem ou mesmo uma rede TCP/IP. Um computador qualquer pode ser utilizado como terminal através de um programa emulador. Para aplicações em modo texto ou semi-gráfico, existem emuladores de terminais tipo VT-100, ANSI e outros. Em modo gráfico, normalmente são utilizados os Xterminals (terminal com protocolo X11 ou terminal do X Window). Um computador em rede pode executar um XServer e assim ser transformado em um Xterminal. Existem diversos aplicativos X Window que emulam um terminal texto (como o xterm, o kvt, o konsole, e o rxvt). Alguns destes permitem cores e até imagens de fundo. Para uma sessão segura há o SSH - Secure shell, que criptografa toda a comunicação e utiliza autenticação RSA. A configuração básica é feita através do arquivos /etc/ssh_config na versão 1 ou /etc/ssh/ssh_config na a versão 2. Para permitir a execução remota de um aplicativo X gráfico pode-se utilizar o ssh com a opcão -X (Enable X Forwarding). A inclusão da opção -C habilita a compressão dos dados na conexão SSL. Serviços de Redes 329 PPP - Point to Point Protocol Para o estabelecimento de conexões ponto a ponto, incluindo negociação de parâmetros de comunicação, foi criado o protocolo PPP. Este é o protocolo utilizado quando se faz uma conexão discada a um provedor de acesso à Internet. O PPP basicamente trata do envio de datagramas de um nodo a outro. Normalmente, o PPP é usado em linhas seriais diretas ou discadas. Ele estabelece uma conexão TCP/IP entre um equipamento e outro. Para estabelecer a conexão física e de enlace, o ppp utiliza o programa chat. O chat é responsável, por exemplo, por discar o número do provedor e esperar que o modem estabeleça a portadora. Entra então o pppd, que valida a conexão e negocia todos os parâmetros do TCP/IP até o início da sessão. O usuário pode ser validado através de login, PAP ou CHAP. Configuração do serviço PPP O arquivo principal de configuração do serviço PPP é o /etc/ppp/options. Para cada dispositivo específico, pode haver também um arquivo com nome /etc/ppp/options.dispositivo (por exemplo, /etc/ppp/options.ttyS2 para o dispositivo /dev/ttyS2). No arquivo /etc/options são definidas as opções globais ou default. Nos arquivos /etc/ppp/options.dispositivo, são definidas as opções específicas para a conexão através daqueles dispositivos. O pppd procura por suas opções nos arquivos /etc/ppp/options, /etc/ppp/options.dispositivo, e ~/.ppprc antes de processar as opções passadas como argumento na linha de comando. A única opção da linha de comando tratada antes é o nome do dispositivo para que o pppd monte o nome do arquivo options.dispositivo. O pppd remove o prefixo /dev/ e converte ’/’ restantes em ’.’. 330 Serviço de Redes Entre as opções mais importantes estão: noipdefault ou iplocal:ipremoto modem ou local ipcp-accept-local ipcp-accept-remote ms-dns servidorDNS [no]defaultroute [no]replacedefaultroute [no]auth Define os IPs local e remoto Utilização ou não dos sinais de controle de modem Aceita o IP local dado pelo peer Aceita o IP remoto dado pelo peer Servidor(es) de DNS Adiciona (ou não) rota default Substitui (ou não) a rota default Autentica (ou não) o peer Conexão discada com a Internet Para a realização de uma conexão discada a um provedor de acesso à Internet, sua máquina deverá ter um modem. A instalação de um modem é feita de forma simples através do YaST. Normalmente um modem (interno ou externo) é acessível através de uma interface serial padrão associada a ele. Será criado um link do dispositivo real (/dev/ttySi) para /dev/modem. Nada mais além da porta de E/S e a interrupção são necessárias ao Linux. Para a verificação do acesso e funcionamento do modem, você poderá utilizar os comandos texto minicom ou kermit. O kermit é um aplicativo tradicional de comunicação que possui porte para diversos sistemas operacionais. Ambos possuem funções como emulação de terminal e de transferência de arquivos. Outro aplicativo para detecção e testes de conexão discada à Internet é o wvdial, que também é utilizado pelo YaST. A utilização dos comandos do modem (por exemplo, o padrão AT Hayes) é feita pelo aplicativo. Existem vários programas que facilitam a configuração da conexão de uma estação de trabalho Linux à Internet. Em modo gráfico, KDE, existem os programas kppp e kinternet. Nestes programas você informa os dados necessários à conexão a um provedor de acesso (basicamente número a ser discado, login e senha). Serviços de Redes 331 kppp - conexão dial-up Um uso comum do pppd é a discagem para um provedor de Internet. Ele pode ser feito simplesmente através da chamada: $ pppd call provedor onde o arquivo /etc/ppp/peers/provedor contém, por exemplo: ttyS2 38400 crtscts connect ’/usr/sbin/chat -v -f /etc/ppp/chat-provedor’ noauth e o arquivo /etc/ppp/chat-provedor tem algo como: ABORT ¨NO CARRIER¨ ABORT ¨NO DIAL TONE¨ ABORT ¨ERROR¨ ABORT ¨NO ANSWER¨ ABORT ¨BUSY¨ ABORT ¨Username/Password Incorrect¨ ¨¨ ¨at¨ OK ¨atd0&c1¨ OK ¨atdt123456¨ ¨name:¨ ¨^Umeulogin¨ ¨word:¨ ¨\qminhasenha¨ ¨ispts¨ ¨\a^Uppp¨ ¨~-^Uppp-~¨ 332 Serviço de Redes Os usuários, máquinas, senhas e endereços IPs para as validações PAP e CHAP estão respectivamente nos arquivos /etc/ppp/pap-secrets e /etc/ppp/chap-secrets. Durante a negociação dos parâmetros, o pppd dispara alguns scripts localizados em /etc/ppp, passando argumentos que podem ser utilizados, por exemplo, para acertos de tabelas de roteamento ou contabilização: • auth-up interface peer usuário dispositivo velocidade Chamado logo que (e se) a autenticação do peer seja feita. • auth-down interface peer usuário dispositivo velocidade Chamado logo que a sessão seja terminada. • ip-up interface dispositivo velocidade iplocal ipremoto parms Chamado logo que os endereços IPs estejam negociados. • ip-down interface dispositivo velocidade iplocal ipremoto parms Chamado logo que os endereços IPs sejam liberados. Uma porta que aceita uma conexão PPP em uma porta serial ou modem pode ser configurada de diversas formas: • O pppd pode ser disparado diretamente na porta (utilizado normalmente em linhas privadas). • O pppd pode ser disparado manualmente ou automaticamente após o login (há um getty na porta e opcionalmente o shell é o pppd). • O pppd pode ser disparado automaticamente quando necessário pelo mgetty (basta ativar a opção /AutoPPP/ no arquivo /etc/mgetty+sendfax/login.config). Serviços de Redes 333 Conexão por demanda Para conexões por demanda pode ser utilizado o diald. Este programa é configurado através do arquivo /etc/diald.conf. Neste arquivo você define o dispositivo de conexão, velocidade, modo de conexão e parâmetros para o pppd. Um exemplo simples pode ser visto abaixo. mode ppp device /dev/modem speed 115200 modem lock crtscts local 192.168.0.1 remote 192.168.0.2 defaultroute debug 0x0018 dynamic include /usr/lib/diald/standard.filter connect /usr/lib/diald/connect pppd-options noauth noipdefault ipcp-accept-local ipcp-accept-remote user usuario Neste exemplo, será utilizada uma conexão discada (através do script /usr/lib/diald/connect) com IP dinâmico, incluindo a rota default). No diretório /usr/lib/diald estão diversos arquivos. O arquivo diald.defs é o primeiro arquivo lido quando o diald é disparado. O arquivo /usr/lib/diald/standard.filter contém definições das regras para ativação e desativação da conexão (como por exemplo, que tipo de pacote TCP irá iniciar uma discagem para o provedor). O script connect é utilizado para discar e estabelecer a conexão ppp com o provedor de acesso. O wvdial também pode ser utilizado como programa de conexão no lugar do script connect. O diald criará uma interface virtual (normalmente como tapi ou sli para está qual a rota default. Após a conexão com o provedor ser estabelecida, esta interface dará lugar à criada pelo pppd (normalmente como pppi ). 334 Serviço de Redes Você poderá utilizar os aplicativos diald-top-server e diald-top para obter estatísticas e controlar as conexões do diald. O diald-top deverá ser executado somente se o diald-top-server estiver rodando e o diald-top-server só deve ser disparado após o diald ter criado a interface virtual tapi ou sli. Veja os manuais de diald, diald-top e ainda de diald-examples para maiores detalhes a respeito da configuração do serviço de discagem por demanda. Conexão ADSL Existem basicamente 2 tipos de conexão ADSL: a pppoe, PPP-overethernet e a pppoa, PPP-over-ATM. Na conexão pppoa, o modem ADSL estabelece a conexão PPP com o provedor e age como roteador/bridge e como servidor DHCP fornecendo um IP ao cliente conectado a ele. Os serviços ADSL mais conhecidos no Brasil são o Velox da Telemar e o Speedy da Telefônica. Na conexão pppoe o cliente estabelece uma conexão PPP diretamente com o provedor e o modem apenas estabelece o enlace ATM com o provedor. Após a conexão, é criada uma interface pppi (normalmente ppp0) da mesma forma que uma conexão discada normal tipo V9x. Para o tipo pppoe, há o pacote rp-pppoe, uma implementação da Roaring Penguin. A configuração do pppoe pode ser feita pelo script adsl-setup. Ela será gravada no arquivo /etc/ppp/pppoe.conf. Os scripts adsl-start e adslstop podem ser utilizados para iniciar e parar a conexão ADSL. No Velox da Telemar, após a conexão PPP ter sido estabelecida, o cliente deverá ser autenticado em seu provedor utilizando um browser (através da página http://www.veloxzone.com.br) para poder ter acesso à Internet. Serviços de Redes 335 Comunicação e Telefonia O Linux possui diversos programas para comunicacão através da Internet. Um dos mais utilizado é o kopete que permite a conexão com ICQ, MSN, AIM, IRC, Jabber e outros. Ele é totalmente personalizado e faz parte do KDE. kopete skype O Skype é um sistema VOIP (voz sobre IP). Permite SMS, corrreio de voz e também redirecionamento de chamadas. O serviço para realização de chamadas requer créditos que podem ser obtidos através do site do Skype: http://www.skype.com. Além disto existem diversos programas que falam protocolos H323 e SIP permitindo facilmente a criação de sistemas de audio e vídeoconferência. 336 Serviço de Redes Interconectividade Interconectividade DOS/Windows O kernel do Linux suporta os sistemas de arquivos msdos, vfat, ntfs e smbfs. Uma partição FAT ou VFAT pode ser montada na estrutura hierárquica de sistemas de arquivos do Linux. Assim, você pode transferir arquivos facilmente entre os sistemas de arquivos DOS/Windows e Linux em discos ou disquetes. Utilize os comandos tradicionais, como o cp e mv, do Unix. Não se esqueça de desmontar os sistemas de arquivos removíveis (como disquetes e zip drives) antes de remover a media. Você pode utilizar ainda os comandos mtools (como mattrib, mcd, mcopy, mdel, mdeltree, mdir, mformat, mmd, mrd, mmove, mren e mtype) para tratar diretamente arquivos e diretórios em disquetes ou partições FAT ou VFAT. hmarx@thor:~> mdir a: Volume in drive A is SuSE Linux (abbr=SUSE LINUX ) Volume Serial Number is 5377-BBE2 Directory for A:/ chapte~1 aw 33302 07-04-2002 17:30 chapte~2 aw 295888 07-04-2002 17:31 biblio~1 aw 15343 07-04-2002 17:31 3 files 344 533 bytes 1 112 576 bytes hmarx@thor:~> p chapter_01.aw chapter_08.aw bibliography.aw free Serviços de Redes 337 Configure os mapeamentos das letras dos discos no arquivo /etc/mtools.conf. Um trecho deste arquivo pode ser visto abaixo: drive a: file="/dev/fd0" exclusive mformat_only cylinders=80 heads=2 sectors=18 drive b: file="/dev/fd1" exclusive mformat_only cylinders=80 heads=2 sectors=18 drive c: file="/dev/hda1" drive z: file="/dev/sda4" 11 drive m: file="/var/lib/dosemu/diskimage" mtools_lower_case=1 Você deverá ter acesso de leitura e/ou escrita à partição ou dispositivo no Linux para conseguir ler e/ou gravar arquivos através dos aplicativos mtools. 338 Serviço de Redes O Linux como servidor de uma rede Windows Através do Samba, o Linux pode emular um servidor Window NT para clientes Lan Manager, Windows 3.x, 9x, Me, 2000, NT e XP. O Samba implementa os protocolos NetBIOS, SMB e NMB sobre o TCP/IP. O NMB é utilizado para o serviço de browsing. Ele pode ainda executar o serviço de netlogon e de time server (sincronismo de relógio das estações com o servidor). O arquivo de configuração do Samba é o /etc/samba/smb.conf. Neste arquivo você define o domínio, os compartilhamentos, a segurança, a forma do servidor atuar (master browser, domain controller, etc), e demais parâmetros da rede. As informações mínimas a serem configuradas no Samba, para que uma máquina Linux com IP 192.168.1.1 seja vista como um servidor NT, validando usuários e compartilhando o diretório pessoal e o diretório /work como Trabalho em uma rede local são: ; /etc/samba/smb.conf [global] workgroup = nome_do_domínio os level = 2 security = user encrypt passwords = yes protocol = NT1 interfaces = 192.168.1.1/255.255.255.0 bind interfaces only = yes local master = yes domain logons = yes domain master = yes smb passwd file= /etc/samba/smbpasswd wins support = yes logon script = scripts\%U.bat server string = SuSE Linux Samba %v message command = bash -c ’echo From: %f, To: %t $(cat %s) | \ /usr/X11/bin/xmessage -file -;rm %s’ & browseable = yes [netlogon] path=/etc/samba/netlogon read only = yes locking = no hosts allow = 192.168.1. [homes] comment = Diretório pessoal read only = no create mode = 0750 [Trabalho] comment = Diretório de trabalho path = /work create mode = 770 Serviços de Redes 339 O compartilhamento especial homes será substituído pelo diretório pessoal do usuário (~usuário). O logon script poderá ser também por estação, utilizando, por exemplo, a metavariável %M: logon script = scripts\%M.bat O compartilhamento especial printers, definido no arquivo /etc/samba/smb.conf, tornará as impressoras configuradas no Linux disponíveis para as estações Windows. [printers] comment = Todas as impressoras printable = yes public = no read only = yes create mode = 0700 directory = /tmp Utilizando o script printfax.pl, um dispositivo fax modem poderá ser disponibilizado para estações Windows como uma impressora PostScript: [fax] comment = Servidor de FAX postscript = yes print command = ( /usr/bin/printfax.pl %I %s %U %m; rm %s ) & printable = yes writeable = no path = /var/spool/faxserver No SuSE Linux, o servidor Samba pode então ser disparado pelo script rcsmb (ou rcsamba). Serão disparados o smbd e o nmbd, servidores SMB e de nome NetBIOS, respectivamente. O samba pode ser administrado facilmente pelo SWAT - Samba Web Administration Tool - através de um navegador WEB utilizando uma conexão no porto 901 (http://localhost:901). Para isto, o swat deve ser habilitado no /etc/inetd.conf. 340 Serviço de Redes Usuários Linux e os clientes de uma rede Windows O conjunto de usuários do Samba é um sub-conjunto dos usuários do Linux. Isto é, os usuários do Samba já deverão estar cadastrados no Linux. Você deve incluir os usuários do Samba através do programa smbpasswd. Além disto, o smbpasswd serve para criar contas de estações de trabalho, se unir a um domínio, habilitar, desabilitar ou excluir uma conta do Samba. As informações destas contas serão armazenadas no arquivo /etc/samba/smbpasswd. Pode ser feito também o mapeamento de usuários através do arquivo /etc/samba/smbusers (ou no arquivo definido pela opção username map em /etc/samba/smb.conf). O Linux como cliente de uma rede Windows O Linux pode utilizar recursos compartilhados por uma máquina Windows. Basta que o kernel tenha suporte ao smbfs e você poderá utilizar o comando mount com a opção -t smbfs e a sintaxe //servidor/recurso para especificar o compartilhamento. Você pode ainda utilizar o aplicativo smbclient (do pacote samba-client) que permite também utilizar os serviços de envio de mensagens (popup messages) e utilização dos serviços de impressão de máquinas Windows. O script samba_print utiliza o smbclient para serviços de impressão. No modo gráfico, você pode utilizar diversos aplicativos. O LISa (Lan Information Server) e os utilitários do Samba como o nmblookup, servem para obter as informações sobre sua rede SMB. No Konqueror você poderá utilizar a URL smb://servidor para navegar através de sua rede Windows. O aplicativo LinNeighborhood se assemelha ao "Ambiente de rede" do Windows. Com ele você poderá montar compartilhamentos de máquinas Windows na estrutura de árvore de sistemas de arquivos do Linux. Serviços de Redes 341 Interconectividade Novell® Netware® O kernel do Linux suporta o sistema de arquivos ncpfs. Assim, você pode montar os volumes Netware. Utilizando utilitários como slist, nwlogin, nwprint, nwuserlist, nwgrant, nwdir, nwfstime, nwfsinfo, nwpasswd, nwrights, nwbols, e outros, você pode utilizar um servidor Netware através do Linux. O kernel deverá ter suporte ao protocolo IPX. Há ainda o emulador do kernel do Netware 3.11/3.12, marsnwe, cujo arquivo de configuração é o /etc/nwserv.conf. Basta ter os volumes do Netware em diretórios do Linux, e o Linux passa a ser visto como um servidor Novell na rede. O Caldera Netware® for Linux possui os volumes do Netware 4.1x. Você pode até mesmo gerar os volumes em diretórios do sistema de arquivos padrão do Linux. Nos exemplos seguintes utilizamos o marsnwe para representar o servidor Netware, rodando na própria máquina Linux. hmarx@thor:~> slist Known NetWare File Servers Network Node Address ----------------------------------------------------------------THOR C0A8C803 000000000001 hmarx@thor:~> nwvolinfo -S thor -v SYS -U hmarx Logging into THOR as HMARX Password: Total : 2020332K Free : 115276K Purgable : 0K No Purg. : 0K Dirs : 522240 Free dirs: 407674 hmarx@thor:~> p Você poderá utilizar o ncpmount para montar volumes de servidores Netwareno Linux. thor:~# ncpmount -S thor -V SYS /mnt Logging into THOR as SUPERVISOR Password: thor:~# mount | grep ncpfs THOR/SUPERVISOR on /mnt type ncpfs (rw) thor:~# p 342 Serviço de Redes Interconectividade Apple® Macintosh® O Linux também se integra a redes com máquinas Apple Macintosh. O kernel suporta a família de protocolos AppleTalk (RTMP, NBP, ZIP e AEP). Os arquivos de configuração do AppleTalk ficam no diretório /etc/atalk. O aplicativo atalkd, configurado no arquivo atalkd.conf, é responsável pelo gerenciamento da rede ApplelTalk. Ele inclui roteamento, registro e procura de nomes e domínios. No arquivo netatalk.conf você configura quais serviços serão disparados, o número máximo de clientes e a forma de execução dos serviços. O Linux pode compartilhar arquivos através do afpd (Apple Filing Protocol Daemon) e impressoras através do papd (Printer Access Protocol Daemon). Podem ser criados diversos servidores afpd virtuais cuja configuração é feita no arquivo afpd.conf. Você pode definir quais sistemas de arquivos serão compartilhados e com que permissões através dos arquivos AppleVolumes.default e AppleVolumes.system. O compartilhamento de impressoras é configurado no arquivo papd.conf. Este arquivo não é necessário porque o papd compartilha o mesmo que o lpd. Uma vez configurado, o AppleTalk pode ser disparado através do script rcatald (como os demais serviços no Linux). Aplicativos como o getzones, afppasswd, achfile, aecho, accleandir, pap e papstatus podem ser utilizados para manipular sistemas de arquivos e impressoras em uma rede AppleTalk. O kernel Linux 343 9. O Kernel Linux Configuração do kernel Linux Como sistema de fonte aberto, o sistema operacional Linux pode ser modificado e adequado à arquitetura e configuração de hardware de um computador específico ou de serviços suportados pelo kernel. Para isto, é necessária a instalação dos fontes do kernel. Os fontes são normalmente instalados em /usr/src/linux. A versão mais atualizada pode ser obtida de http://kernel.org. Consideraremos um kernel 2.6.x nos exemplos. Drivers para dispositivos muito recentes podem não estar, ainda, incluídos nos fontes do kernel. Em alguns casos, eles podem estar disponíveis em sites na Internet. Mesmo alguns fabricantes já disponibilizam fontes de drivers mais atualizados para seus produtos. Siga as instruções que normalmente acompanham os arquivos baixados do site. Nos casos em que os drivers são disponibilizados em formato objeto, certifique-se de escolher o driver para a versão correta do kernel. Os módulos objetos, carregáveis dinamicamente, são geralmente copiados para um subdiretório do diretório /lib/modules/versão_do_kernel. Quando há necessidade de recompilação, os básico em C deverão estar instalados (como o gcc, devel). Se a instalação for feita através YaST no pacotes serão automaticamente selecionados com desenvolvimento. pacotes de desenvolvimento o make, o ld, e o ncursesSuSE Linux, alguns destes a seleção do ambiente de Você poderá configurar os fontes do kernel para adequar ou incluir um driver ou serviço, e até mesmo definir quais drivers ou serviços deverão ser suportados pelo kernel. Diversos drivers e serviços poderão ser compilados como módulos (a serem carregados sob demanda). 344 O Kernel Linux Para reconfigurar e compilar o kernel e seus módulos, vá para o diretório onde se encontram os fontes do kernel (normalmente em /usr/src/linux) e utilize um dos seguintes comandos: Comando make help make config make menuconfig make xconfig make cloneconfig Objetivo Ver as opções definidas no Makefile Realizar a configuração em modo texto linha a linha Realizar configuração em modo texto com janelas Realizar a configuração em modo gráfico, no sistema X Window Obter a configuração do kernel atual em execução a partir de /proc/config.gz Através das perguntas ou menus, você pode configurar o tipo de processador(es), memória, drivers de dispositivos, otimizações, serviços e protocolos suportados pelo kernel. Algumas opções permitem compilação como módulos carregáveis dinamicamente. A configuração é salva, por default, no arquivo .config. Tipicamente, as alterações mais comuns são: • tipo de processador • suporte a multiprocessamento • suporte a formato de sistemas de arquivos • suporte a características personalizadas de protocolos de redes • suporte a componentes e periféricos do computador Note que na distribuição SuSE Linux o kernel é automaticamente selecionado durante a instalação conforme as características de seu computador. Além disto o kernel do SuSE Linux foi compilado para suportar, através de módulos, a grande maioria dos componentes e arquiteturas de hardware e serviços existentes. O kernel Linux Configurando o kernel com o comando make xconfig 345 346 O Kernel Linux Compilação do kernel e seus módulos Após salvar a configuração, utilize a sequência abaixo para realizar a recompilação total do kernel e seus módulos: Comando make clean make mrproper make all make vmlinux make modules make modules_install Objetivo Apagar os arquivos objetos antigos mantendo a configuração Apagar todos os arquivos objetos antigos incluindo a configuração Compila tudo que é necessário Compila apenas o kernel Compilar todos os módulos definidos na configuração Instalar os módulos no diretório /lib/modules/versão do kernel Caso tenha alterado o kernel, reinicialize o sistema para carregar o novo kernel. Caso tenha apenas recompilado um módulo, basta remover a versão anterior e inserir a versão nova. Veja também modinfo, rmmod, modprobe e insmod. O kernel Linux 347 Lembre-se de manter sempre uma cópia funcional do kernel e dos módulos (normalmente os que foram instalados através dos CDs), facilmente carregável através do LILO ou GRUB, para os casos de um driver ou serviço recompilado não estar funcionando corretamente. Pode ser útil ter uma entrada de segurança, por exemplo, no arquivo /etc/lilo.conf como a gerada automaticamente durante à instalação do SuSE Linux: image=/boot/vmlinuz.suse label=failsafe root=/dev/hda1 initrd=/boot/initrd.suse append="disableapic ide=nodma apm=off" Para o GRUB, o arquivo /boot/grub/menu.lst title Failsafe -- SUSE LINUX 9.3 kernel (hd0,2)/vmlinuz root=/dev/hda5 showopts ide=nodma apm=off acpi=off vga=normal noresume selinux=0 barrier=off nosmp noapic maxcpus=0 3 initrd (hd0,2)/initrd Você pode também gerar disquetes do boot para recuperação em caso de mau funcionamento ou funcionamento errático do sistema devido a uma recompilação do kernel ou algum módulo. Isto pode ser feito através do YaST ou manualmente. Veja como criar manualmente um conjunto de disquetes de boot no apêndice B: Criando Disquetes de Boot. 348 O Kernel Linux Segurança 349 10. Segurança Devemos inicialmente definir alguns conceitos relacionados a segurança de equipamentos, processos e informações (que chamaremos de objetos): integridade, disponibilidade, confiabilidade e privacidade. Integridade é a permanência útil e funcional dos objetos. Disponibilidade é o tempo em que os objetos estão acessíveis para a utilização. Confiabilidade é a certeza de que os objetos estão corretos (funcionam corretamente e/ou não foram alterados). Privacidade é a certeza que os objetos só estão disponíveis aos usuários, grupos ou outros objetos aos quais pertencem ou foram dadas permissões. Para isto o sistema deve ter controle de acesso e auditoria para que se possa identificar quem, quando e o que fez, nos casos da ocorrência de algum evento incorreto ou malicioso. Segurança no Linux A segurança em sistemas Unix-like é uma questão de confiança. É importante definir bem os grupos de usuários e as regras de utilização de senhas. Deve ser tomado um cuidado especial com o usuário root e aplicativos suid root. Um furo de segurança pode começar com um acesso indevido utilizando uma senha de um usuário comum. A partir daí, um invasor poderá, às vezes sem muito esforço, adquirir privilégios do root. No mínimo, este invasor poderá consumir recursos do sistema como uso de CPU, memória e espaço em disco. 350 Segurança Formas de ataque O acesso físico a um equipamento com informações críticas e/ou confidenciais deverá também ser restrito. Um simples reset poderá comprometer a integridade das informações. Se o invasor puder reinicializar a máquina através de um disquete ou CD, a festa fica completa. Outro meio de se furar a segurança são os links de comunicação. Deve-se prestar muita atenção aos links de acesso dedicado ou modems para acesso discado. Defina bem a função do equipamento no qual você está instalando o Linux. Selecione os serviços que você realmente deseja disponibilizar (telnet, ftp, http, mail, ...). Instale apenas os necessários e/ou desabilite os outros. Cavalos de Tróia O nome "Cavalo de Tróia" vem da mitologia (também referenciado como o presente de grego). Ele é dado a programas que aparentam fazer alguma coisa mas fazem outra coisa, normalmente maliciosa. Normalmente eles são enviado através de e-mail ou disponibilizados em sites de download gratuitos. Nunca rode programas de fontes duvidosas. Nunca execute programas executáveis a não ser que você confie em quem enviou (pessoa ou site). Sempre verifique todo programa interpretado (por exemplo, os scripts) antes de executá-lo. Lembre-se que erros (não intencionais) também podem ser muito prejudiciais. Tome cuidado com o PATH ! Garanta que o comando que você digita executará realmente o programa desejado. Um executável chamado ls instalado no diretório pessoal de um usuário que utilize o shell com a variável PATH contendo o diretório pessoal ($HOME) ou o diretório corrente (.) antes dos diretórios do sistema, pode não "listar o diretório" ou não apenas "listar o diretório" ! Cuidado com as permissões do diretório pessoal. Os arquivos de inicialização (como ~/.bashrc, ~/.profile, ~/.vimrc, ~/.forward e ~/ .procmailrc) podem ser alvos para a inserção de "cavalos de tróia". Um diretório pessoal deve ter as permissões rwx------, ou seja 0700, garantindo segurança e privacidade. Segurança 351 352 Segurança Scripts CGI Tenha uma especial atenção na escrita de scripts WEB. A maioria dos furos de segurança não são intencionais. Nunca confie no browser do usuário. Apesar das limitações impostas por tags HTML, um campo poderá exceder as capacidades das variáveis do script. Os textos poderão conter metacaracteres ou caracteres especiais como uma crase (‘) que podem ser interpretadas, por exemplo, pelo shell ou pelo perl e permitir a execução de comandos externos. Nunca permita que usuários comuns coloquem scripts CGI em seu servidor sem que um profissional de segurança tenha testado todo o script e provado que ele não oferece riscos ao seu sistema. Variáveis globais podem também oferecer informações valiosas para os atacantes. Estas informações poderão ser exibidas no browser ou facilmente enviadas por e-mail. Uma atenção especial deve ser dada aos scripts interpretados pelo servidor. Os scripts comumente escritos em linguagem shell, perl ou php, por exemplo, devem ser rigorosamente testados antes de publicados. Os scripts java ou vb, que são interpretados pelo browser, normalmente são mais prejudiciais à segurança do cliente. Estes devem também ser verificados para não exporem informações indesejáveis do servidor para os clientes (browsers). Segurança 353 Vírus Um vírus de computador é um programa capaz de "infectar" outros aplicativos e de se espalhar (replicar) por outros aplicativos. Uma instalação Linux pura é intrinsecamente imune a vírus. Um usuário comum normalmente não possui permissão para escrita nos diretórios do sistema. Assim a "infecção" ficaria restrita aos seus arquivos. Além disto, escrever um vírus que contamine programas em qualquer versão, distribuição ou configuração do Linux é extremamente difícil (e por que não dizer praticamente impossível). Um arquivo anexo em um e-mail não possui atributo executável e o usuário, somente se desejar, irá salvá-lo e alterar as permissões para que ele possa ser executado. Um bom administrador nunca iria fazê-lo com qualquer arquivo vindo da Internet. Esta abordagem de contaminação de máquinas Unix/Linux é denominada de vírus social: um educado vírus que pede para ser salvo, ter seus atributos alterados para executável e ainda executá-lo como root ! Porém, se uma máquina é utilizada como servidor de arquivos/discos, arquivos inofensivos para o Linux se tornam extremamente perigosos para as estações de trabalho DOS, Windows, MacOS ou Netware. Existem programas anti-vírus para o Linux para varrer estes arquivos e diretórios compartilhados e detectar a presença de padrões de vírus neles. Para os anexos de e-mails pode ser utilizado o programa amavis em conjunto com um software anti-vírus (tanto no envio quanto na recepção). O software anti-vírus deve ser atualizado periódicamente e, quando possível, automaticamente. As mesmas precauções tomadas em relação aos cavalos de tróia, quanto ao PATH e ao diretório pessoal, devem também serem tomadas em relação aos problemas de vírus. 354 Segurança Vermes (worms) Como qualquer sistema operacional, o Linux não é imune a uma classe de programas, denominados de vermes, que simplesmente gastam recursos exageradamente. Isto degrada o desempenho do sistema, provocando até o trashing. O trashing não é um crash. No trashing, o equipamento torna-se tão lento que na maioria das vezes fica impossível utilizá-lo. Quando detectado cedo, é até fácil controlá-lo e eliminá-lo. Basta "matar" o processo guloso de recursos. Para minimizar a possibilidade de degradação do sistema pelo gasto de recursos, pode-se configurar limites de utilização de área em disco com o sistema de quotas, e limites de tempo de processamento, abertura de arquivos e uso de memória com o ulimit. As mesmas precauções tomadas em relação aos cavalos de tróia e vírus quanto ao PATH e ao diretório pessoal devem também serem tomadas em relação aos worms. Ataques Um sistema pode ser atacado de diversas formas. A confidencialidade das informações pode ser anulada através de escuta em conexões (rede, modem ou conexões seriais). Quando não há alteração da informação, é muito difícil detectar a presença de um "man in the middle". Uma forma de ataque semelhante ao verme é chamada hoje de Denial of Service (ou DoS). Ela consiste em sobrecarregar um ou mais serviços. Seja por exemplo um site WEB. Se alguém gera, constantemente, muitas requisições para obter as páginas deste site, outras pessoas podem não conseguir navegar pelo site. Esta forma se torna mais perigosa se vier simultaneamente de várias origens da Internet, conhecida então como DDoS (Distributed Denial of Service). Outra forma de ataque é a alteração da origem dos pacotes, enganando o TCP/IP. Isto é conhecido como IP spoofing. Segurança 355 Algumas ferramentas Existem centenas de ferramentas para melhorar a segurança e diagnosticar possíveis invasões. A implementação de um firewall pode diminuir consideravelmente a probabilidade de invasão. O uso de TCP wrappers pode também ajudar nesta redução além de facilitar a detecção de ataques. A função principal dos wrappers é registrar e controlar os acessos aos serviços de rede. Por exemplo, o tcpd pode ser utilizado no arquivo /etc/inetd.conf para verificar e controlar os acessos aos serviços de rede. As permissões de acesso para o tcpd são configuradas nos arquivos /etc/hosts.allow e /etc/hosts.deny. Utilizando o xinetd, os arquivos no diretório /etc/xinetd.d/ podem conter diversas opções para evitar e diagnosticar ataques, como: only_from no_access access_times cps max_load rlimit_as rlimit_cpu rlimit_rss rlimit_stack log_on_success log_on_failure lista de IPs lista de IPs faixa de horário permitida número máximo conexões por segundo carga máxima do servidor espaço de endereçamento máximo tempo máximo de CPU em segundos uso máximo de memória residente tamanho máximo da pilha informações para log em caso de sucesso informações para log em caso de falha Ataques podem ser facilmente detectados apenas analisando os logs do sistema. Tentativas de abertura de sessão com usuários inválidos ou múltiplas tentativas de abertura de sessão com senhas inválidas indicam um ataque em potencial. 356 Segurança Um ataque vindo da rede local ou da Internet começa através de um porto inseguro aberto. Alguns atacantes utilizam programas denominados portscan, que varrem os portos de uma máquina ou conjunto de máquinas à procura de portos abertos. Estes mesmos programas podem ser utilizados para verificar a segurança de uma instalação. Pacotes como o snort e o saint são muito utilizados na detecção de tentativas de ataque. Todos estes aplicativos também geram logs que devem ser frequentemente analisados pelos administradores de redes e segurança. A primeira barreira para os ataques é o denominado firewall (derivado do nome da porta corta fogos). Segurança 357 Firewalls As principais funções de um firewall são a proteção entre redes locais/privadas e redes públicas, como a Internet, e a geração de logs de atividades, tráfego e acessos devidos e indevidos. Existem diversas arquiteturas de firewall. A mais simples é a que utiliza um equipamento interligando duas redes (chamado de dual homed host). Este equipamento possui duas interfaces de rede: uma para a rede local privada e outra para a rede pública (normalmente a Internet). Esta arquitetura permite maior controle de acesso porque todos os pacotes passam pelo firewall. Ele sempre atua como proxy. As estações na rede privada não têm acesso direto a serviços na rede pública. 358 Segurança Uma derivação desta arquitetura é a inserção de uma interface para uma rede denominada DMZ (DeMilitarized Zone). A DMZ somente é acessível pelo firewall e provê serviços como http e mail para as redes privada e pública. A proteção contra acessos indevidos, tanto da rede local para a pública quanto da rede pública para a local, é feita através de filtros de pacotes. Filtros As regras do firewall levam em consideração a direção (Inbound, Outbound, Either), o endereço e porto de origem, o endereço e porto de destino, o protocolo e definem a ação (Accept, Deny, Reject, Masq, Redirect ou Return). O porto de destino especifica basicamente o serviço requisitado. Este serviço normalmente é implementado na camada de aplicação (mail, telnet, ftp, ...). Um bom firewall conhece o encapsulamento dos dados para os serviços definidos desde a camada física (meio de acesso à rede: ethernet, FDDT, ATM, ...) até a camada de aplicação. Segurança 359 NAT - Network Address Translation Outra função de um firewall é permitir que uma máquina local com endereços privados acesse serviços e máquinas na Internet. O firewall faz a tradução de endereços privados para endereços válidos na Internet. Isto também é conhecido como masquerading. Quando a tradução é feita no endereço de origem, o processo é chamado SNAT e quando a tradução é feita no endereço de destino, o processo é chamado de DNAT. Implementação do firewall O firewall pode ser implementado por um software em um computador comum com pelo menos duas interfaces de rede. Este computador é chamado de multihomed, tendo uma interface com a rede local e outra com a rede pública. 360 Segurança Software de firewall - IPCHAINS Até a versão 2.2 do kernel, o software padrão do Linux é o ipchains. No SuSE Linux, ele é facilmente configurado utilizando o arquivo /etc/rc.config.d/firewall.rc.config. Nele são definidas as interfaces, os endereços e serviços válidos, tanto na rede privada quanto na pública. Para que o ipchains seja executado, é necessário definir START_FW="yes" no /etc/rc.config. A execução do firewall utilizando rcSuSEfirewall (ou apenas rcfirewall), que rodará o script /sbin/SuSEfirewall, gerará chamadas ao ipchains para a inclusão de filtros ou regras de firewall. As regras poderão ser vistas utilizando o comando: thor:~ # rcSuSEfirewall status ou simplesmente thor:~ # ipchains -L As regras podem ser tratadas manualmente através do comando ipchains. A sintaxe geral é : # ipchains -{A | D | C } cadeia especificação [ opções ] Para adicionar, remover ou verificar uma regra # ipchains - { R | I } cadeia número especificação [ opções ] Para Incluir ou substituir uma regra Segurança 361 Os parâmetros podem especificar os protocolos, endereços de origem, endereços de destino, interfaces de entrada ou saída: -p [ ! ] protocolo --protocol [ ! ] protocolo Especifica o protocolo da regra ou do pacote -s [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ] --source [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ] Especifica o endereço de origem e opcionalmente o porto --source-port [ ! ] [ porto [ : porto] ] Especifica somente o porto de origem -d [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ] --destination [ ! ] endereço [ / máscara ] [ ! ] [ porto [ : porto] ] Especifica o endereço de destino e opcionalmente o porto --destination-port [ ! ] [ porto [ : porto] ] Especifica somente o porto de destino -i [ ! ] nome --interface [ ! ] nome Especifica o nome da interface pela qual o pacote é recebido ou enviado (por cadeias de entrada ou saída) -j alvo --jump alvo Especifica o alvo da regra O protocolo pode ser tcp, udp, icmp ou all, ou número ou um nome definido em /etc/protocols. O porto pode ser um número ou um nome definido em /etc/services. Um endereço pode ser um nome de máquina, rede ou um endereço IP. Uma máscara pode ser uma máscara de rede (como 255.255.255.0 da classe C) ou o número de 1s da máscara (como 24 para a máscara 255.255.255.0). 362 Segurança Um alvo pode ser uma cadeia definida pelo usuário ou um valor especial como ACCEPT, DENY, REJECT, MASQ, REDIRECT ou RETURN. O símbolo ´!´ é utilizado para inverter o significado da especificação. Desta forma, se um gateway (com interface pública eth1) só precisa fazer NAT, basta a inserção da regra: thor:~ # ipchains -A forward -j MASQ -i eth1 Segurança 363 Software de firewall - IPTABLES De forma semelhante, a partir da versão 2.4 do kernel, o software padrão é o iptables. Até o SuSE Linux 7.3, ele é facilmente configurado alterando o arquivo /etc/rc.config.d/firewall2.rc.config. A partir da versão 8.0, a configuração é feita alterando o arquivo /etc/sysconfig/SuSEfirewall2. Este arquivo tem basicamente as mesmas informações presentes nas versões anteriores (no arquivo /etc/rc.config.d/firewall2.rc.config). A ativação do firewall utilizando rcSuSEfirewall2, que rodará o script /sbin/SuSEfirewall2, gerará chamadas ao iptables para a inclusão de filtros ou regras de firewall. As regras poderão ser vistas utilizando os comandos: thor:~ # rcSuSEfirewall2 status ou simplesmente thor:~ # iptables -L As regras podem ser tratadas manualmente através do comando iptables. A sintaxe geral é parecida com o do ipchains : # iptables -{A | D | C } cadeia especificação [ opções ] Para adicionar, remover ou verificar uma regra # iptables - { R | I } cadeia número especificação [ opções ] Para Incluir ou substituir uma regra 364 Segurança Os parâmetros especificam mais precisamente os endereços, protocolos, portos e interfaces de origem e destino: -p [ ! ] protocolo --protocol [ ! ] protocolo Especifica o protocolo da regra ou do pacote -s [ ! ] endereço [ / máscara ] --source [ ! ] [ endereço / máscara ] Especifica o endereço de origem --source-port [ ! ] [ porto [ : porto] ] Especifica somente o porto de origem -d [ ! ] endereço [ / máscara ] --destination [ ! ] endereço [ / máscara ] Especifica o endereço de destino --destination-port [ ! ] [ porto [ : porto] ] Especifica somente o porto de destino -i [ ! ] nome --in-interface [ ! ] nome Especifica o nome da interface pela qual o pacote é recebido -o [ ! ] nome --out-interface [ ! ] nome Especifica o nome da interface pela qual o pacote é enviado -j alvo --jump alvo Especifica o alvo da regra Segurança 365 --tcp-flags [ ! ] máscara ativos Especifica listas de flags do TCP. máscara contém os flags que devem estar inativos e ativos os flags que dever estar ativos. --mac-source [ ! ] endereço Endereço MAC de origem de interfaces ethernet nas cadeias PREROUTING, INPUT e FORWARD. --limit taxa [ /sufixo ] Especifica a taxa média máxima. O sufixo pode ser second, minute, hour ou day. O limite default é 3/hour. --limit-burst número Especifica o número máximo de pacotes iniciais. O default é 5. --tos tos Especifica os bits do campo TOS do cabecalho do TCP/IP. Pode ser um número ou um nome. O protocolo pode ser tcp, udp, icmp ou all, ou um nome ou número representando de /etc/protocols. Um endereço pode ser um nome de máquina, rede ou um endereço IP. Uma máscara pode ser uma máscara de rede (como 255.255.255.0 da classe C) ou o número de 1s da máscara (como 24 para a máscara 255.255.255.0). Um alvo de --jump pode ser uma cadeia definida pelo usuário ou um valor especial como LOG, MARK, REJECT, TOS, MIRROR, SNAT, DNAT, MASQUERADE, REDIRECT. O nome da interface pode terminar com + indicando todas as interfaces que começam com nome. Os flags do TCP são SYN, ACK, FIN, RST, URG, PSH, ALL e NONE. Os nomes dos bits do campo tipo de serviço (e seus números) são: Minimize-Delay 0x10 Maximize-Throughput 0x08 Maximize-Reliability 0x04 Minimize-Cost 0x02 Normal-Service 0x00 366 Segurança Se um gateway (com interface pública eth1) só precisa fazer NAT, basta a inserção das regras: thor:~ # iptables -A POSTROUTING -t nat -j MASQUERADE -o eth1 thor:~ # echo 1 > /proc/sys/net/ipv4/ip_forward E para o mínimo de segurança: thor:~ # iptables -A INPUT -j DROP -m state --state NEW, INVALID -i eth1 thor:~ # iptables -A FORWARD -j DROP -m state --state NEW, INVALID -i eth1 O SuSEfirewall A distribuição SuSE Linux contém uma forma mais simples de definição das regras básicas de firewall. Nas versões que utilizam o ipchains ele é chamado de SuSEfirewall e nas versões que utilizam o iptables ele é chamado de SuSEfirewall2. Os arquivos de configuração são bastante semelhantes e contém definições de variáveis utilizadas pelo script /sbin/SuSEfirewall ou /sbin/SuSEfirewall2. O script bash lê o arquivo de configuração e faz as devidas chamadas ao ipchains ou iptables com as regras de firewall. Chamaremos a partir de agora simplesmente de SuSEfirewall. A arquitetura do SuSEfirewall define as três classes de redes básicas: interna, externa e DMZ. Podem existir várias interfaces de rede em cada classe. No arquivo de configuração as interfaces são definidas pelas variáveis FW_DEV_INT, FW_DEV_EXT e FW_DEV_DMZ. A variável FW_ROUTE define se haverá ou não roteamento de pacotes entre as interfaces definidas. FW_MASQUERADE permite a tradução de endereços (NAT) para os IPs das interfaces definidas em FW_MASQ_DEV. Apenas os endereços pertencentes às redes definidas em FW_MASQ_NETS serão mascarados. Segurança 367 Os serviços do firewall estarão disponíveis para as máquinas da(s) rede(s) internas somente se FW_PROTECT_FROM_INTERNAL for desabilitado. O default é habilitado e somente os serviços explicitamente especificados poderão ser acessados por máquinas explicitamente definidas. Os serviços em execução no firewall podem ser protegidos das redes internas, externas e DMZ, definindo-se as seguintes variáveis para os protocolos TCP, UDP e IP: Redes Internas Redes Externas Redes DMZ FW_SERVICES_INT_TCP FW_SERVICES_EXT_TCP FW_SERVICES_DMZ_TCP FW_SERVICES_INT_UDP FW_SERVICES_EXT_UDP FW_SERVICES_DMZ_UDP FW_SERVICES_INT_IP FW_SERVICES_EXT_IP FW_SERVICES_DMZ_UDP Nestas variáveis podem ser informados números ou nomes de portos (dados em /etc/services). Podem ser especificadas faixas de portos como 1:1023. Redes e serviços confiáveis podem ser informados na variável FW_TRUSTED_NETS. Portos altos podem ser permitidos pelas variáveis: FW_ALLOW_INCOMING_HIGHPORTS_TCP FW_ALLOW_INCOMING_HIGHPORTS_UDP Os serviços em execução podem ser detectados automaticamente habilitando a variável FW_SERVICE_AUTODETECT. Somente os serviços habilitados nas seguintes variáveis serão auto-detectados: FW_SERVICE_DNS FW_SERVICE_SQUID FW_SERVICE_DHCPD FW_SERVICE_DHCLIENT FW_SERVICE_SAMBA Serviços na rede interna ou DMZ podem ser acessíveis diretamente se definidos através de redirecionamento na variável FW_FORWARD. Para utilização através de NAT, use a variavel FW_FORWARD_MASQ. Podem ser definidos IPs de máquinas ou redes, protocolos e portos. Use com cautela porque você poderá estar abrindo uma porta para invasores e exploradores de falhas nestes servidores. 368 Segurança Acessos a alguns serviços podem ser redirecionados para portos locais no firewall através da definição na variável FW_REDIRECT. Isto pode ser utilizado para o redirecionamento transparente dos acessos a um servidor WEB seguro, para o uso de um proxy transparente, e também para a utilização de seu servidor de envio e-mails com proteção antivirus e/ou antispam. O nível de informações exibidas no log pode ser controlada pelas definições das variáveis: Variável Significado FW_LOG_DROP_CRIT Registra no log os pacotes críticos descartados FW_LOG_DROP_ALL Registra no log todos os pacotes críticos FW_LOG_ACCEPT_CRIT Registra no log os pacotes críticos aceitos FW_LOG_ACCEPT_ALL Registra no log todos os pacotes aceitos FW_LOG Define as opções do log Características de segurança do TCP/IP podem ser habilitadas definindo a variável FW_KERNEL_SECURITY. Serão habilitadas opções do kernel como: icmp_ignore_bogus_error_responses ip_local_port_range icmp_echoreply_rate log_martians icmp_destunreach_rate mc_forwarding icmp_paramprob_rate mc_forwarding icmp_timeexceed_rate rp_filter route_flush Quando o firewall é desativado, o roteamento de pacotes entre as redes pode ou não ser mantido conforme o valor da variável: FW_STOP_KEEP_ROUTING_STATE Você pode definir se o firewall aceita ping ou permite ping na rede DMZ ou na Internet através das variáveis: FW_ALLOW_PING_FW FW_ALLOW_PING_DMZ FW_ALLOW_PING_EXT Segurança 369 A permissão da visualização da rota através do firewall, utilizando o traceroute, por exemplo, é definida na variável FW_ALLOW_TRACEROUTE. Quando os buffers de mensagens estão cheios e o firewall não pode encaminhar a mensagem, ele pode ser enviada um pacote ICMP source_quench avisando a origem da mensagem para diminuir sua taxa de envio. A permissão para o envio deste pacote ICMP é feita através da variável FW_ALOW_FW_SOURCEQUENCH. A permissão de pacotes de broadcast é feita através da variável FW_ALLOW_FW_BROADCAST. O log destes pacotes pode ser inibido através da variável FW_IGNORE_FW_BROADCAST. Para permitir roteamento entre redes da mesma classe utilize a variável FW_ALLOW_CLASS_ROUTING. Regras específicas de firewall podem ser incluídas no arquivo definido pela variável FW_CUSTOMRULES. Utilizando diretamente o comando ipchains ou iptables, as regras podem ser incluídas nas seguintes funções definidas neste arquivo: Função Descrição fw_custom_before_antispoofing Antes das regras anti-spoofing fw_custom_after_antispoofing Depois das regras anti-spoofing fw_custom_before_port_handling Antes do tratamento dos portos fw_custom_before_masq Antes do mascaramento fw_custom_before_denyall Antes de negar tudo Veja o script /sbin/SuSEfirewall ou /sbin/SuSEfirewall2 para entender a utilização destas funções e de variáveis úteis como input_ext, input_int, forward_int e forward_ext. 370 Segurança VPN - Virtual Private Network Utilizando uma rede pública como meio de transporte, pode-se construir uma rede privada virtual. A segurança dos dados deve ser mantida em todos os seus aspectos (veja a introdução deste capítulo). Uma VPN é criada criando-se de um túnel através da rede da rede pública (normalmente a Internet). Existem diversas implementações utilizando o Linux. Uma forma simples é utilizar o SSH para criptografar uma conexão PPP. Há ainda pacotes como o CIPE e o FreeS/WAN. O CIPE criptografa o IP sobre UDP. O FreeS/WAN utiliza o IPsec (IP security), um conjunto de protocolos para segurança IP que provê criptografia e autenticação. Ambos utilizam chaves RSA para autenticação. O protocolo PPTP (Point-to-Point Tunneling Protocol) da Microsoft também é suportado pelo Linux, mas sabe-se que tem sérios problemas de segurança. Mais informações e exemplos podem ser vistos nos arquivos VPNHOWTO.gz e VPN-Masquerade-HOWTO.gz, encontrados no diretório /usr/share/doc/howto/en. Segurança 371 A composição do túnel que forma a VPN pode envolver uma única máquina (host) ou uma rede (net). Assim temos 3 tipos de composição: Composição host-to-host host-to-net net-to-net Descrição Interliga duas máquinas Interliga uma máquina a uma rede Interliga duas redes Quando o meio é a Internet, uma das partes deve ter IP fixo para que a outra parte inicie a formação do túnel. A outra parte pode ter IP dinâmico. Existe a possibilidade de utilizar IP dinâmico nas duas partes através de atualização de um servidor de DNS dinâmico. Porém sempre haverá uma janela, após a mudança dos IPs, até a atualização do(s) servidor(es) de DNS. Nesta janela a formação do túnel não será possível e as partes estarão desconectadas. Há ainda um fator de insegurança nesta janela quando uma das partes poderá tentar estabelecer o túnel com outra entidade que por ventura tenha obtido o IP dinâmico que pertencia a outra parte. Não se deve reduzir muito o TTL do registro no DNS para não aumentar o tráfego na Internet com as atualizações do DNS. O firewall tem um papel importante no funcionamento de uma VPN. Ele irá encaminhar os pacotes da rede privada para dentro do túnel e não permitir que as máquinas da rede privada sejam acessadas por máquinas da rede pública. 372 Segurança Configurando uma VPN utilizando o Openswan O Openswan (derivado do FreeS/wan) é uma implementação do IPsec no Linux. São utilizados 3 protocolos: AH (Authentication Header) ESP (Encapsulating Security Payload) IKE (Internet Key Exchange) Os procolos AH e ESP são implementados pelo KLIPS (kernel IPsec). O procolo IKE é implementado pelo serviço pluto. O KLIPS é opcional no IPv4 e obrigatório no IPv6. Para o IPv4, verifique se o kernel foi compilado para suportar o IPsec. Isto pode ser feito facilmente através do comando: hmarx@thor:~> zcat /proc/config.gz | grep -i ipsec CONFIG_IPSEC=m CONFIG_IPSEC_DEBUG=y CONFIG_IPSEC_DEBUG_DISABLE_DEFAULT=y CONFIG_IPSEC_TUNNEL=y CONFIG_IP_IPSEC=m CONFIG_IPV6_IPSEC=y CONFIG_IPV6_IPSEC_TUNNEL=y hmarx@thor:~> ❏ Você pode notar que o kernel do exemplo acima foi compilado com suporte a IPsec através de módulos carregáveis. Quando o Openswan for ativado, o módulo ipsec será carregado. Segurança 373 Considere o modelo mais comum de conexão, o net-to-net: O ipsec irá criar uma interface virtual ipseci em cada um dos gateways. Através da interface externa (a que está conectada ao roteador), o ipsec irá fazer a autenticação e negociar a chave para a criptografia dos pacotes que serão enviados através da interface ipseci. Esta interface deve ser incluida na lista de interfaces externas na configuração do firewall e os pacotes não devem ser mascarados e sim encaminhados para ela. Os portos UDP 500 (isakmp) e o protocolo IP 50 (esp) devem ser permitidos nas interface externas. Iniciaremos a configuração pelo firewall. 374 Segurança Considere que em cada gateway a interface interna seja eth0 e que a interface externa seja eth1, e que a interface virtual seja o ipsec0. Considere ainda que estamos utilizando um SuSE Linux 8.0 ou superior. Assim, para o gateway 1 do modelo acima, no SuSEfirewall teremos as seguintes definições mínimas: FW_DEV_INT="eth0" FW_DEV_EXT="eth1 ipsec0" FW_MASQUERADE="yes" FW_MASQ_DEV="eth1" FW_MASW_NETS="192.168.1.0/24" FW_SERVICES_EXT_UDP="500" FW_SERVICES_EXT_IP="50" FW_SERVICES_INT_TCP="domain smtp ssh 3128" FW_SERVICES_INT_UDP="domain" FW_PROTECT_FROM_INTERNAL="yes" FW_AUTOPROTECT_SERVICES="yes" FW_FORWARD="192.168.1.0/24,192.168.2.0/24 192.168.1.0/24,192.168.2.0/24" Devemos desabilitar o rp_filter fazendo uma pequena alteração no script /etc/init.d/ipsec. Deve-se incluir as linhas em negrito abaixo na opção start antes do exit: ... echo -e $return fi SUSEFWCFG="/etc/syscofig/SuSEfirewall2" test -f $SUSEFWCFG && { . $SUSEFWCFG for i in $FW_DEV_EXT; do echo 0 > /proc/sys/net/upv4/conf/$i/rp_filter 2> /dev/null done } exit $st ;; ... Segurança 375 Alterar o script /sbin/SuSEfirewall2, na sessão "Configuring more kernel stuff¨": ... echo 0 > done $i/mc_forwarding 2 > /dev/null test -z "$FW_DEV_IPSEC" || for i in $FW_DEV_EXT; do echo 0 > /proc/sys/net/ipv4/conf/$i/rp_filter 2> /dev/null done test "$FW_KERNEL_SECURITY" = no || { ... Habilitar o uso de regras de firewall personalizadas: FW_CUSTOMRULES="/etc/sysconfig/SuSEfirewall2-custom" No arquivo /etc/sysconfig/SuSEfirewall2-custom inserir as linhas em negrito na função fw_custom_before_masq(): ... # this ... DEV_IPSEC=ipsec0 IPSEC_OK=‘$IFCONFIG $DEV_IPSEC 2>/dev/null‘ if [ -z "$IPSEC_OK" ]; then echo -e "Interface $DEV_IPSEC não está ativa !!!" else for chain in forward_int; do $LAA $IPTABLES -A $chain -j LOG ${LOG}"-FORWARD-INT-IPSEC " -o $DEV_IPSEC $IPTABLES -A $chain -j "$ACCEPT" -o $DEV_IPSEC done for chain in forward_ext; do $LAA $IPTABLES -A $chain -j LOG ${LOG}"-FORWARD-IPSEC-INT " -i $DEV_IPSEC $IPTABLES -A $chain -j "$ACCEPT" -i $DEV_IPSEC done fi true } ... 376 Segurança PGP - Pretty Good Privacy O PGP é um sistema de criptografia de chave pública para proteger arquivos de dados e e-mails. Ele é baseado no algoritmo RSA (Rivest, Shamir, Adleman), que não requer troca de senhas entre os elementos. O funcionamento do RSA O algoritmo RSA utiliza 5 números: p Número primo bem grande q Outro número primo bem grande n Produto dos números : n = p * q e Chave de criptografia que é um primo qualquer relativo ao valor de (p -1) * (q -1), ou seja, não têm divisores em comum d Chave de decriptografia que é derivada de p, q e e: d = e-1 (m od (p - 1) * (q- 1)) A segurança do RSA depende dos números p e q nunca serem revelados. Após a geração de n, e e d, os números p e q podem ser destruídos. A informação a ser criptografada deverá ser um número menor que n. Seja m o número que você quer criptografar. Para produzir o texto criptografado c, é utilizada a seguinte fórmula: c = me mod n Para decriptografar a mensagem, é utilizada a fórmula: m = cd mod n Assim, para criptografar uma mensagem você precisa dos números n e e; para decriptografá-la, você precisa dos números n e e. Na prática, o PGP cria a chave pública (n, e) e a chave privada (d). O número n é derivado da chave pública. Segurança 377 Uso da criptografia de chave pública Suponha que José queira enviar um documento para Maria. Tanto José quanto Maria devem ter gerado um par de chaves. Uma das chaves é a chave privada, que deve ser guardada em lugar seguro. A outra é a chave pública, que pode ser disponibilizada a qualquer um. Normalmente elas são publicadas em sites de organizações confiáveis como Verisign, DigitalID ou Thawte. O documento é dividido em duas partes: o conteúdo e a assinatura. Para garantir a autenticidade da origem do documento, José criptografa a assinatura utilizando sua chave privada. Desta forma, qualquer pessoa poderá, utilizando a chave pública de José, decriptografar a assinatura e certificar que o documento foi gerado por José. Nenhuma outra pessoa poderá ter criptografado a assinatura, senão José. Para que o conteúdo do documento só seja acessível por Maria, José criptografa o conteúdo utilizando a chave pública de Maria. Assim, somente Maria, que contém a chave privada complementar, poderá decriptografar o conteúdo do documento. 378 Segurança O software PGP Utilizando o software pgp, você pode gerar pares de chaves, extrair chaves, ver chaves, assinar chaves e documentos, criptografar documentos e verificar chaves, assinaturas e certificados. Uma sessão típica de geração de um par de chaves de 1024 bits é: info@thor:~> pgp -kg 1024 Pretty Good Privacy(tm) 2.6.3in - Public-key encryption for the masses. (c) 1990-96 Philip Zimmermann, Phil’s Pretty Good Software. 2000-10-07 International version - not for use in the USA. Does not use RSAREF. Current time: 2002/10/31 04:05 GMT Generating an RSA key with a 1024-bit modulus. You need a user ID for your public key. The desired form for this user ID is your name, followed by your E-mail address enclosed in <angle brackets>, if you have an E-mail address. Form: Real Name (comment) <email> (options) Optional options: ENCR, SIGN, EXPIRE:yyyy-mm-dd Enter a user ID for your public key: [email protected] You need a pass phrase to protect your RSA secret key. Your pass phrase can be any sentence or phrase and may have many words, spaces, punctuation, or any other printable characters. Enter pass phrase: Enter same pass phrase again: Note that key generation is a lengthy process. We need to generate 1120 random bits. This is done by measuring the time intervals between your keystrokes. Please enter some random text on your keyboard until you hear the beep: 0 * -Enough, thank you. ..................................................................... .................................................................**** .........**** Advisory warning: This RSA secret key is not protected by a passphrase. Just a moment.... Key signature certificate added. Key generation completed. info@thor:~> ❏ Você pode ver as chaves utilizando o comando pgp -kvv, assiná-las utilizando o comando pgp -ks. Assinaturas podem ser removida utilizando o comando pgp -krs. Chaves podem ser removidas utilizando pgp -kr. Veja mais opções utilizando pgp -h. Segurança 379 Clusters e Grids Para garantir a disponibilidade das informações e serviços e também a integridade dos dados, pode-se criar um aglomerado de computadores que são chamados de cluster ou grid. Normalmente dá-se o nome de cluster a um aglomerado local, e o nome de grid a um aglomerado na Internet ou em outra rede geográficamente distribuida. O uso de um grid é também conhecido como computação nas nuvens (cloud computing). Veja mais detalhes no capítulo Clusters e Grids. 380 Segurança SAN e NAS Considerando a estrutura de armazenamento, pode-se optar por uma rede de armazenamento (SAN - Storage Area Network) e uma arquitetura NAS (Network Storage Access). Nesta rede podem estar conectados diversos tipos de dispositivos como discos, CDs ou DVDs, Fitas (DAT, cartucho, streamer, DLT, LTO, ...) entre outros. Pode-se também utilizar RAID para redundância e/ou melhoria de desempenho. A figura abaixo ilustra uma topologia utilizando SAN. Nenhuma estação ou servidor acessa diretamente os dispositivos de armazenamento. Eles são acessados pelos servidores através da rede SAN, normalmente usando protocolo TCP/IP. Segurança 381 RAID RAID é a sigla para Redundant Array of Inexpensive Disks ou Redundant Array of Independent Disks e significa a utilização de discos baratos ou independentes para obter redundância. O RAID por hardware significa que a controladora de discos trata o protocolo RAID e disponibiliza para o sistema operacional o volume como um disco virtual. Disponível geralmente em controladoras SCSI. No RAID por software, o sistema operacional cria o RAID a partir dos discos/partições físicas/lógicas e apresenta o disco virtual para as aplicações. Os níveis definidos são RAID 0 = striping (min. 2 discos) RAID 1 = mirroring (min.2 discos) RAID 2 = bit level striping + dedicated hamming parity (min. 3 discos) RAID 3 = byte level striping + dedicated parity (min. 3 discos) RAID 4 = block level striping + dedicated parity (min. 3 discos) RAID 5 = block level striping + distributed parity (min. 3 discos) RAID 6 = block level striping + double distributed parity (min. 4 discos) O uso de striping melhora o desempenho e o mirror garante a redundância. A integridade é verificada usando paridade. No caso de RAID 5 ou 6, com a falha de 1 disco, o sistema continua funcionando normalmente. Após a substituição do disco, as informações do RAID são reconstruídas. Pode-se ainda utilizar as combinações RAID 0+1, RAID 1+0 e RAID 5+1. A escolha da ordem 0+1 ou 1+0 é função da relacão desempenho/confiabilidade. 382 Segurança Critérios de segurança do DoD Em dezembro de 1985, o centro nacional de segurança de computadores NCSC (National Computer Security Center) da agência nacional de segurança NSA (National Security Agency) criou um conjunto de padrões para o departamento de defesa americano (Defense Departament, ou simplesmente DoD) intitulado "Trusted Computer Systems Evaluation Criteria", comumente conhecido como "Orange Book" (porque foi publicado com uma capa laranja). Este documento definiu quatro classes de níveis de segurança, com critérios crescentes: D Segurança mínima C Proteção facultativa B Proteção mandatória A Proteção verificada Os sistemas tradicionais do PC como o DOS e o Windows são classe D. A classe C contém os subníveis C1 e C2. Na classe C1, os sistemas separam usuários e seus dados. Sistemas como o UNIX e o Windows NT se classificam na classe C2 por terem maior controle de acesso e procedimentos mais rígidos de login e auditoria. A classe B contém os subníveis B1, B2 e B3. Na classe B1 devem ser adicionados labels de sensibilidade à segurança a cada objeto do sistema. Na classe B2, o sistema deve controlar todos os objetos e nenhuma informação, incluindo as criptografadas, pode ficar disponível após liberada ao sistema. Na classe B3, o sistema deve ser totalmente imune a invasões e deve sinalizar eventos de segurança. A classe A contém um único subnível A1. A classe A1 é funcionalmente equivalente à B3, mas todos os critérios devem ser formalmente definidos e documentados. Apesar de não ter sido formalmente avaliado pelo DoD, o Linux é classe C2. Para o Linux existe o projeto RSBAC (Rule Set Based Access Control) cujo objetivo é fazer com que o Linux atenda a especificação no nível B1 do "Orange Book". Segurança 383 A classificação definida no Orange Book tornou-se obsoleta quando, em janeiro de 1996, foram definidos novos critérios de avaliação. Os Estados Unidos, Inglaterra, Alemanha, França e Canadá desenvolverm o padrão de avaliação denominado Common Criteria for Information Technology Security Evaluation - CCITSE, ou simplesmente "Common Criteria", CC. O CCITSE define os EALs (Evaluation Assurance Levels). Estes níveis de garantia definem uma escala para medir o critério para a avaliação de perfis de proteção - PPs (Protection Profiles) e de alvos de segurança - STs (Security Targets). Eles são construidos a partir de componentes do . É uma escala uniformemente crescente que equilibra o nível de segurança obtido com o custo plausível para adquirir aquele nível de garantia. Nível EAL1 EAL2 EAL3 EAL4 EAL5 EAL6 EAL7 Significado Testado funcionalmente Testado estruturalmente Metodicamente testado e verificado Metodicamente projetado, testado e revisado Projetado semi-formalmente e testado Projeto semi-formalmente verificado e testado Projeto formalmente verificado e testado EAL4 é o nível mais alto economicamente viável para realimentar uma linha de produtos. Os critérios de avaliação fazem parte de um programa de avaliação de produtos confiáveis (Trusted Product Evaluation Program - TPEP). Mais informações podem ser obtidas em http://www.radium.ncsc.mil/tpep/tpep.html Em fevereiro de 2005, o SuSE Linux Enterprise Server 9 atingiu o nível EAL4+ em eServer IBM. Foi o sistema Linux a obter esta classificação. O anúncio pode ser visto em http://www.atsec.com 384 Segurança CAPP/EAL4+ security evaluation for SUSE LINUX AUSTIN, Texas, and MUNICH - 15 February 2005 -- atsec information security has completed a Common Criteria (CC) evaluation of Novell/SUSE Linux Enterprise Server 9 (SLES 9) on IBM eServers, which will result in first-time Evaluation Assurance Level 4+ (EAL4+) certification of the enterprise operating system platform. The anticipated certification will enable SLES 9 to be adopted by governments and government agencies for mission-critical and command-and-control operations, and also reinforces to the private sector that Linux is a secure, tested platform for essential enterprise applications. The first Linux Common Criteria certification (Novell/SUSE Linux Enterprise Server 8 on the IBM xServer platform) was completed in August 2003 at the EAL2+ level. In the 18 months following initial certification, six additional evaluations have tested versions of Red Hat Linux and Novell/SUSE Linux software on a range of IBM and HP hardware platforms at progressively more secure Common Criteria levels. Gordon McIntosh, Lab Manager of atsec’s Common Criteria Testing Laboratory in Austin, Texas, notes, "No other commercial operating system has had security scrutinized and tested as regularly, on such a large number of hardware platforms, as Linux." The scrutiny of Linux will not end with the successful evaluation of SLES 9 on IBM eServers at the EAL4+ level. Vendors continue to demonstrate their firm commitment to secure operating system platforms by pursuing Common Criteria certification of new Linux versions on a full range of current and emerging hardware platforms. Formal announcement of the successful EAL4+ evaluation completion on SLES 9 was made at the opening of LinuxWorld in Boston on 15 February 2005. Segurança 385 Mantendo o sistema seguro Para garantir sempre a segurança de um sistema de computação, o administrador deverá sempre atualizar o software que implementa os serviços. Em especial, ele deve consultar frequentemente os sites dos fornecedores de antivírus, e os sites de anúncios de segurança como o do CERT (Computer Emergency Response Team) - http://www.cert.org. Lembre-se que os invasores são frequentemente mais rápidos na atualização que os administradores de sistemas. Sites já foram atacados em menos de 6 horas após a publicação um conselho de segurança do CERT! Há ainda diversos sites de segurança como: http://www.nsa.org http://www.rootprompt.org http://www.linuxsecurity.com http://www.pulhas.org http://www.sans.org Além de diversas listas de discussão sobre segurança. Você pode se subscrever na lista de segurança do SuSE Linux através de um e-mail para: [email protected] O YaST Online Update (ou simplesmente YOU) pode ser utilizado para manter atualizados os pacotes do SuSE Linux. Para reportar furos de segurança no SuSE Linux utilize o e-mail [email protected] 386 Gerência de Redes em Linux 11. Gerência de Redes em Linux O profissional encarregado de gerenciar um servidor Linux, ou mesmo um rede de computadores (sistema de computação), tem a principal tarefa de manter a funcionalidade, eficiência e eficácia de todos os processos e entidades envolvidas. Sistema de computação Um sistema de computação é formado por elementos de hardware, de software e de pessoas (que denominamos peopleware). O hardware é formado por peças físicas como gabinetes, placas, processadores, memórias, dispositivos de armazenamento (discos, fitas, CDs, disquetes, ...), dispositivos de entrada e saída (monitores, teclados, mice, tablets, impressoras, scanners, ...) e dispositivos de comunicação (placas de rede, modems, hubs, switches, roteadores, rádios, antenas, ...). O software compreende programas desde o firmware, o sistema operacional com os drivers dos dispositivos periféricos, os utilitários e os aplicativos gerais. O firmware é um software especializado que controla um determinado dispositivo e normalmente já vem gravado de fábrica em uma PROM, EPROM ou FLASH, instalada na controladora do dispositivo ou do barramento que o liga ao conjunto processador. O peopeware inclui todos os seres humanos envolvidos no sistema de computação: os fornecedores de equipamentos e software (analistas e programadores), os técninicos de manutenção de hardware e software, os gerentes do departamento e os usuários do sistema. A formaçãode cada elemento e seu comportamento da utilização do sistema influem bastante no modo de gerenciamento do sistema. Gerência de Redes em Linux 387 Para se ter um sistema de computação estável e fácil de gerenciar, a tarefa começa bem antes da aquisição de seus componentes. Devem ser analisadas todas as funcionalidades desejáveis para o sistema para que a seleção (ou o desenvolvimento/construção) de seus componentes seja feita de forma adequada. Desta forma não será adquirido um supercomputador de milhões de dólares para substituir uma máquina de escrever, ou adquidir um microcomputador bem barato para ser o servidor de bases de dados de altíssima importância para a entidado.(O que, guardando as devidas proporções, acontece com muita frequência em empresas que decidem se informatizar ou automatizar sem a consulta a um analista ou consultor da área). Para que o sistema de computação funcione, ele deverá ser escolhido, instalado e configurado de forma correta. Isto deve ser uma preocupação desde a fixação mecânica dos componentes de hardware em locais e ambientes físicos adequados, escolha do ambiente operacional, utilitários e aplicativos, até a configuração do ambiente operacional, de parâmetros e de bases de dados dos aplicativos. Instalação física Os componentes de hardware de um sistema de computação normalmetne possuem partes móveis que, em alguns casos, são bastante sensíveis a trepidações ou impactos (como os discos e unidades de CD/DVD). Mesmo o nivelamento de alguns componentes poderá afetar o seu desempenho e até mesmo sua funcionalidade. Cita-se como exemplo alguns discos e plotters. Os fatores ambientais como temperatura, poluicão e umidade são igualmente importantes. 388 Gerência de Redes em Linux Instalação elétrica Por serem eletrônicos, os componentes de hardware também dependem da boa qualidade do sistema elétrico que os alimenta. Deve ser analisada a carga a ser instalada (medida em VA - Volt-Ampère), o cabeamento elétrico, as tomadas, os disjuntores, estabilizadores, short-breaks, no-breaks, e também o sistema de aterramento da instalação. Uma instalação elétrica inadequada frequentemente é causa de falhas no software por erros de hardware (interpretação errônea de instruções pelos processadores ou alteração de dados em memória ou dispositivos de armazenamento) que podem resultar em alteração ou mesmo perda de informações muitas vezes valiosas. Os componentes eletrônicos, além de dissiparem muito calor, foram projetados para funcionar a uma determinada faixa de temperaturas. Para evitar erros eletrônicos, deve-se tentar manter uma temperatura constante. Por razões físicas, é mais fácil manter uma temperatura ambiental baixa constante (entre 17 a 28 graus) do que manter uma temperatura alta constante. Daí o motivo de termos ambientes refrigerados (o famoso ar condicionado) em salas com computadores (principalmente servidores que devem ter alta disponibilidade). Água e outros agentes químicos podem danificar componentes do hardware e meios de armazenamento (incluindo listagens em papel). Gases ácidos expelidos por baterias de no-breaks além de nocivos à saúde podem corroer componentes e cabeamentos. Poeira, fumaça e outras formas poluentes devem também ser evitadas. Uma atenção especial deve ser dada a equipamentos que precisam ser instalados em áreas externas ou em áreas sem supervisão humana constante (como centrais de supervisão sem operadores). Gerência de Redes em Linux 389 Medidas de segurança incluem a proteção física e equipamentos como extintores (que devem ser do tipo adequado à extinção de incêndio em equipamentos elétricos e outros materiais existentes nos ambientes computacionais) Topologia Topologia é o estudo da localização e interconexão dos componentes do sistema. Em sistemas de computação, ela define a forma em que os componentes estão conectados, como os barramentos que interligam os componentes internos de um computador e seus periféricos e as formas de conexão de redes. Os elementos de rede e a forma que eles são interligados também geram entidades foco de atenção para o gerente. Os pontos de conexão são frequentes causas de problemas envolvendo desempenho, disponibilidade e segurança. As topologias básicas de redes são: barramento, anel, estrela e broadcast. No barramento, todos os nodos compartilham no tempo, um meio físico de uso exclusivo. Isto é, apenas um nodo pode estar transmitindo uma informação que é recebida por todos os outros. No anel, os nodos formam uma cadeia na qual a informação circula até chegar ao nodo de destino. Na estrela há um nodo central ao qual os outros nodos são ligados. Assim, toda informação deve passar pelo nodo central. O broadcast utiliza um meio comum compartilhado onde a informação não é endereçada especificamente a um nodo, mas simplesmente jogada no meio de transmissão. Exemplos típicos de broadcast são redes de rádio e TV. 390 Gerência de Redes em Linux Funcionalidades Além dos componentes do computador (processador, memória, discos, ...), e das interfaces de rede (placas ethernet, seriais, USB, ...), há ainda diversos dispositivos para compor uma rede. Modems são componentes que fazem a conversão de sinais ou de protocolos de enlace. A palavra vem de modulador/demodulador. Existem os modems para conexão discada a provedores que normalmente são assíncronos e atingem até 56Kbps em linhas telefônicas normais. Modems equivalentes para linhas privadas são normalmente síncronos e possuem uma ampla faixa de velocidades. Há aindas os modems ISDN (tipicamente 64 ou 128Kbps) e ADSL (tipicamente 256 ou 512Kbps, mas que podem atingir até 8Mbps). Hubs são equipamentos que permitem a conexão de diversos segmentos de rede e fazem a retransmissão entre estes segmentos de forma passiva. O dado que chega em uma porta é retransmitido para todas as outras. Os mais comuns são os hubs para redes TP utilizando cabos CAT5, CAT5e ou CAT6. Normalmente trabalham em 10 ou 100 Mbps. Switches são equipamentos semelhante aos hubs mas que identificam os nodos pelos seu endereço MAC e somente transmitem o dado para a porta onde foi identificado o endereço MAC do nodo de destino. Também trabalham tipicamente em 10 ou 100 Mbps. Roteadores são equipamentos mais sofisticados que passam pacotes de uma rede para outra. Normalmente trabalham no nível da camada de rede e suportam o IP e o IPX. Existem ainda roteadores que permitem filtro através de parâmetros das camandas de transporte e aplicação. Trabalham em uma ampla faixa de velocidades. São altamentes configuráveis e gerenciaveis através de protocolos como o SNMP e o HTTP. Bridges são equipamentos que fazem tradução de protocolos. Eles podem reencapsular um protocolo utilizando qualquer tipo de rede ou enlace. Gerência de Redes em Linux 391 Gerenciamento A ISO - International Standards Organization - define 5 áreas funcionais para o gerenciamento de redes no modelo OSI Open Systems Interconnection, conhecidas como áreas funcionais específicas de gerenciamento (OSI - Specific Management Function Areas). Estas áreas são: Gerenciamento de falhas Responsável pela localização de problemas ou falhas na rede ou em seus elementos, envolvendo a descoberta, o isolamento e a resolução do problema. Gerenciamento de Configuração Processo responsável por identificar e configurar dispositivos críticos que controlam o comportamento da rede. Inclui, além disso, o provisionamento (instalação e disponibilização) de recursos e serviços. Gerenciamento de Segurança Responsável pelo controle de acesso à informação e aos dispositivos da rede, protegendo-os de abusos intencionais ou acidentais. Gerenciamento de Desempenho Endereça os processos que garantem a utilização mais eficiente dos recursos da rede e sua habilidade para atingir os objetivos do nível de serviço, envolvendo a medição do desempenho de software, hardware e meios de comunicação da rede. Gerenciamento de Contabilização É a area que processa e manipula os registros de utilização de recursos e serviços. 392 Gerência de Redes em Linux O gerenciamento de um sistema de computação deve garantir os seguintes aspectos: Integridade O sistema deverá se manter intacto, sem defeitos ou falhas, sejam pelo tempo de uso, seja pela violação física ou lógica. Verificações periódicas no estado dos componentes e nos ítens de proteção são muito importantes. Disponibilidade O sistema deve ter o maior tempo de disponibilidade para utilização. Deve ser minimizado o tempo para atualizações ou reparos.A qualidade dos componentes e dos ítens de proteção são fatores decisivos para alcançar este objetivo. Confiabilidade Todos os componentes do sistema dever estar funcionando corretamente. Nenhum procedimento ou informação poderá ser maliciosamente alterado. Rotinas de diagnóstico devem ser realizadas para que isto seja conseguido. Privacidade Dados, procedimentos e informações só devem ser disponibilizadas quando e para quem ou o que for necessário. Os quatro aspectos acima estão diretamente relacionados com a segurança do sistema. Um ataque que reduz o desempenho de um sistema (por exemplo, através sobrecarga de serviços - Denial of Services ou DoS) está comprometendo diretamente a disponibilidade do sistema. Um virus pode comprometer a integridade e a confiabilidade do sistema, e em alguns casos, a privacidade das informações (quando, por exemplo, envia documentos contidos em discos locais por e-mail ou ftp para outros sites). Gerência de Redes em Linux 393 Mesmo um usuário comum pode comprometer qualquer aspecto do sistema, da mesma forma que um hardware ou software com defeitos o fazem. Uma utilização errada ou maliciosa do sistema tem efeito igualmente devastador em todos os aspectos. Um ponto comum de falha de segurança é a senha dos usuários. Senhas fáceis podem ser descobertas por outros e assim serem utilizadas para a invasão e utilização não autorizada (e na maioria maliciosa) do sistema. Entidades a gerenciar e atribuições do gerente Qualquer entidade que compõe um sistema é passível de gerenciamento. O gerenciamento envolve desde o controle de qualidade do hardware e do software até o controle dos usuários. A função do gerente é controlar a utilização destas entidades que, como em sistemas operacionais, denominamos recursos. Alguns recursos somente fornecem informações e não possuem parâmetros ajustáveis. Outros são parametrizáveis e possuem mecanismos para que se ajustem à meta de qualidade de serviço do sistema. O gerente deve definir quem, quando, o que e quanto será alocado. Ele deve avaliar, por exemplo, quando e se é necessário um upgrade ou substituição de um hardware ou software para solucionar problemas relacionados ao desempenho ou segurança do sistema. Para isto ele tem o auxílio de diversas metodologias e parâmetros que podem ser ajustados para atingir suas metas. Um sistema de computação, ou conjunto de sistemas de computação, deverá ser dividido em subsistemas que terão suas entidades individuais a serem gerenciadas. O desempenho total será então avaliado pelo comportamento de cada subsistema. Por exemplo, em uma rede de computadores definimos as entidades de cada computador e dos elementos de conexão. 394 Gerência de Redes em Linux Em um computador identificamos seus componentes de hardware e de software como também suas funções na rede. São medidos o uso do(s) processador(es), o uso da memória, o uso do espaço em disco, as taxas de transferência entre os dispositivos e o desempenho de cada software nele em execução. São ainda verificados os diversos aspectos da segurança (física e lógica), como usuários e suas senhas, processos em execução, serviços disponíveis (portos abertos), acesso físico, sessões abertas, conectividade externa (modems, links de comunicação, ...), programas, arquivos e documentos disponíveis. No subsistema de rede, identificamos todos os pontos de conexão, os equipamentos de conexão e o cabeamento. Além da integridade e desempenho de cada entidade, verificamos também os aspectos de segurança física e lógica. Pontos de rede em locais de acesso público podem se tornar uma entrada fácil para invasores. Equipamentos gerenciáveis como os roteadores devem ter suas configurações analisadas e, se necessário, reconfiguradas para melhorar o desempenho e a segurança. Os serviços em execução também possuem parâmetros que afetam o desempenho e a segurança, como a quantidade de memória e disco utilizáveis, número de conexões simultâneas, tamanhos de pacotes, interfaces por onde as requisições podem ser atendidas, identificação de usuários, máquinas e domínios que podem utilizar o serviço, etc. Diversos serviços geram relatórios de acesso que podem ser utilizados pelo gerente para avaliar o seu funcionamento e, se necessário, adequar os parâmetros para atingir a meta de desempenho. Por exemplo, o apache - servidor HTTP padrão do Linux - gera logs de acesso e erro que podem ser analisados pelo webalizer informando as páginas acessadas, os arquivos transferidos, o número de bytes e a origem das requisições, além dos erros de acesso (como páginas ou objetos não encontrados). O squid - servidor proxy padrão do Linux - também gera logs que podem ser analisados pelo calamaris e informa, por exemplo, que objetos foram obtidos em memória, disco ou diretamente do site destino e por qual origem. Gerência de Redes em Linux 395 Protocolos e métodos de gerenciamento De qualquer sistema podemos obter alguns medidores de desempenho: MTTF Mean Time To Failure: é o tempo médio para o defeito inicial. É também uma medida da garantia ou da validade do componente até a necessidade de uma revisão (preventiva ou corretiva) ou de uma atualização. MTBF Mean Time Between Failures:é o tempo médio entre falhas. É uma medida da qualidade do componente. Este tempo pode reduzir com o tempo de uso (idade) do componente. Em alguns componentes, como no software, há um período quando este tempo torna-se bem grande, e alguns casos até infinito. É o período de estabilidade do componente. MTTR Mean Time To Recover ou Mean Time To Repair: é o tempo médio para consertar o componente falho. Deve ser minimizado em componentes críticos que afetam todo o sistema. Isto é conseguido utilizando a redundância Dependendo do grau de criticidade na falha do componente, pode ser utilizada até redundância tripla ou quádrupla. Medindo-se cada taxa de falhas FRi obtemos: MTBF = 1 ∑FRi i e a disponibilidade do sistema é: A= MTBF MTBF + MTTR 396 Gerência de Redes em Linux Em um sistema de computação podem ser consideradas as falhas de leitura ou escrita em dispositivos de armazenamento ou de entrada e saída, as falhas de comunicação por indisponibilidade ou erro dos componentes. Os erros de comunicação (como perdas de pacotes ou erros de CRC) irão causar retransmissões que causarão grande impacto no desempenho do subsistema de comunicação e ainda na disponibilidade de serviços do sistema (como, por exemplo, em servidores HTTP acessíveis através de placas de rede, hubs, switches ou roteadores falhos). Alguns equipamentos são gerenciados através de uma abertura de sessão para acesso a aplicativos de monitoração ou configuração. A grande maioria deles possuem acesso através do protocolo telnet. Este protocolo é inseguro por trafegar informações em sua forma não criptografada que podem ser observadas (e às vezer modificadas) por "escutas" em ataques denominados "man in the middle". Deve ser tomado o cuidado com os usuários e senhas cadastradas nestes equipamentos e com os acessos a eles, principalmente através de conexões públicas (modems e conexões com a Internet, por exemplo). Estão se tornando muito comuns os equipamentos configuráveis e gerenciaveis utilizando navegadores web, através de protocolo HTTP. Quando possível deverá ser configurados acessos utilizando SSL - secure socket layer, como o SSH e o HTTPS. Assim as informações trafegarão na forma criptografada e autenticada e serão lixo para as "escutas".. O TCP/IP possui ainda protocolos de gerenciamento como: ICMP Internet Control Message Protocol: utilizado para reportar o estado e erros de roteamento de datagramas. Obtemos com ele informações importantes sobre a capacidade de alcance a um destino, roteamento e tráfego. O protocolo ICMP é descrito no RFC 792. IGMP Internet Group Multicast Protocol: utilizado no controle de multicast cujo propósito é o envio de um pacote a mais de um destino. Gerência de Redes em Linux 397 O TCP/IP possui ainda seviços como: BGP Border Gateway Protocol: Descrito no RFC 1771. OSPF Open Shortest Path First: O OSPF versão 2 é descrito no RFC 1583. SNMP Simple Network Management Protocol: protocolo simples de gerenciamento de redes baseado na filosofia fetch/store para a busca de informações e configuração de equipamentos. As informações são descritas na MIB do equipamento. A MIB é descrita no RFC 1066 e o protocolo SNMP é descrito no RFC 1157. SNMP e MIB A MIB - Management Information Base - descreve variáveis para o gerenciamento de uma entidade utilizando o protocolo SNMP. A documentação de uma MIB é descrita em ASN.1 - Abstract Syntax Notation 1 - uma linguagem formal definida pela ISO com o objetivo da exatidão. A definição de uma variável utilizando a notação ASN.1 não pemite ambiguidades em seu significado ou representação. Como não há necessidade de interpretação, ela pode ser tratada diretamente pelos programas nos equipamentos. Uma variável na MIB pertence a um namespace. Os namespaces da Internet são administrados pela ISO o que garante uma identificacão única mundial para um objeto. Os objetos são identificados de forma hierárquica. Nesta árvore, o namespace é chamado nodo. Existem nodos abrangentes definidos pela ISO que delega a administração de sub-árvores específicas a outras entidades: ISO ----- País -+---------- Alemanha +---------- Brasil +---------- China +---------- ... +---------- Zâmbia 398 Gerência de Redes em Linux A Internet está na seguinte sub-árvore (que mostra o identificador numérico do nodo entre parentesis): iso (1) ---- org (3) ----- dod (6) --- internet (1) A MIB está na seguinte sub-árvore: internet (1) -+----- dir (1) +----- mgmt (2) ---- mib-2 (1) +--- system(1) | +--- interfaces(2) | +--- at (3) | +--- ip (4) | +--- icmp (5) | +--- tcp (6) | +--- udp (7) | +--- snmp (8) +---- exp (3) +---- pri (4) Assim, uma variável pode ser obtida pelo seu identificador numérico ou textual. Por exemplo, a variável iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 tem a representação numérica .1.3.6.1.2.1.1.1.0 Gerência de Redes em Linux 399 Um exemplo de definição da MIB public em ASN.1 pode ser encontrada no Linux em /usr/share/mibs/ietf/RFC1158-MIB. Abaixo vemos a definição das 2 primeiras variáveis , system.sysDescr.0 e system.sysObjectID.0: RFC1158-MIB DEFINITIONS ::= BEGIN IMPORTS mgmt, OBJECT-TYPE, NetworkAddress, IpAddress, Counter, Gauge, TimeTicks FROM RFC1155-SMI; DisplayString ::= OCTET STRING mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } -- (same prefix as MIB-I) -- MIB-II system OBJECT IDENTIFIER ::= { mib-2 1 } interfaces OBJECT IDENTIFIER ::= { mib-2 2 } at OBJECT IDENTIFIER ::= { mib-2 3 } ip OBJECT IDENTIFIER ::= { mib-2 4 } icmp OBJECT IDENTIFIER ::= { mib-2 5 } tcp OBJECT IDENTIFIER ::= { mib-2 6 } udp OBJECT IDENTIFIER ::= { mib-2 7 } egp OBJECT IDENTIFIER ::= { mib-2 8 } -- cmot OBJECT IDENTIFIER ::= { mib-2 9 } transmission OBJECT IDENTIFIER ::= { mib-2 10 } snmp OBJECT IDENTIFIER ::= { mib-2 11 } -- object types -- the System group sysDescr OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) ACCESS read-only STATUS mandatory ::= { system 1 } sysObjectID OBJECT-TYPE SYNTAX OBJECT IDENTIFIER ACCESS read-only STATUS mandatory ::= { system 2 } ... END 400 Gerência de Redes em Linux Aplicativos SNMP Para a utilização do protocolo SNMP sem a necessidade de desenvolver aplicativos utilizando a API, diversos sistemas operacionais (principalmente os UNIX-like) disponibilizam utilitários para gerenciar elementos de redes. Para o Linux há, por exemplo, o pacote ucdsnmp que inclui o servidor snmpd, bibliotecas e interfaces para desenvolvimento de aplicativos SNMP e diversos utilitários. Entre estes utilitários estão: snmpget snmpset snmpstatus snmpwalk snmptable snmpnetstat snmptest snmptranslate snmptrap, snmpinform snmpdelta obtém valores de variáveis da base MIB a partir da identificação do objeto (objetcID) utilizando o método GET do SNMP. atribui valores a variáveis da base MIB utilizando o método SET do SNMP. obtém informações sobre uma entidade de rede. obtém variáveis da base MIB utilizando o método NEXT do SNMP. obtém e imprime uma tabela SNMP. obtém informacões sobre a rede usando o SNMP. gerencia a base MIB. Inicialmente utiliza método GET. Com os comandos $G, $S e $N o método pode ser alterado para GET, SET e NEXT, respectivamente. traduz objetos SNMP em informações mais úteis. envia um trap para um gerente SNMP. monitora alterações de valores inteiros de variáveis da base MIB. Gerência de Redes em Linux 401 Assim, para ver a definicão da sub-árvore system podemos utilizar o comando snmptranslate, como a seguir: hmarx@thor:~> snmptranslate -Tp -OS .iso.org.dod.internet.mgmt.mib-2.system +--system(1) | +-- -R-- String sysDescr(1) | Textual Convention: DisplayString | Size: 0..255 +-- -R-- ObjID sysObjectID(2) +-- -R-- TimeTicks sysUpTime(3) +-- -RW- String sysContact(4) | Textual Convention: DisplayString | Size: 0..255 +-- -RW- String sysName(5) | Textual Convention: DisplayString | Size: 0..255 +-- -RW- String sysLocation(6) | Textual Convention: DisplayString | Size: 0..255 +-- -R-- INTEGER sysServices(7) | Range: 0..127 +-- -R-- TimeTicks sysORLastChange(8) | Textual Convention: TimeStamp | +--sysORTable(9) | +--sysOREntry(1) | Index: sysORIndex | +-- ---- INTEGER sysORIndex(1) | Range: 1..2147483647 +-- -R-- ObjID sysORID(2) +-- -R-- String sysORDescr(3) | Textual Convention: DisplayString | Size: 0..255 +-- -R-- TimeTicks sysORUpTime(4) Textual Convention: TimeStamp hmarx@thor:~> o 402 Gerência de Redes em Linux Por exemplo, utilizando os utilitário snmpwalk em uma máquina chamada thor, podemos obter, por exemplo, as primeiras 8 variáveis definidas na comunidade public da MIB de uma máquina eagle: hmarx@thor:~> snmpwalk eagle public | head -8 system.sysDescr.0 = Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002 i686 system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linux system.sysUpTime.0 = Timeticks: (7868) 0:0 system.sysContact.0 = Sysadmin (root@localhost) system.sysName.0 = eagle system.sysLocation.0 = Server Room system.sysORLastChange.0 = Timeticks: (5) 0:0 system.sysORTable.sysOREntry.sysORID.1 = OID: ifMIB hmarx@thor: ~> snmpget eagle public system.sysName.0 system.sysName.0 = eagle hmarx@thor: > snmpstatus eagle public [192.168.200.5]=>[Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002 i686] Up: 0:0 Interfaces: 0, Recv/Trans packets: 17830/17830 | IP: 17926/20383 hmarx@thor:~> snmptest eagle public Variable: system.sysDescr.0 Variable: system.sysName.0 Variable: Received Get Response from 192.168.200.5 requestid 0x370E3B1A errstat 0x0 errindex 0x0 system.sysDescr.0 = Linux eagle 2.4.19-4GB #1 Fri Sep 13 13:14:56 UTC 2002 i686 system.sysName.0 = eagle Variable: ^DQuitting, Goobye hmarx@thor:~> r o Gerência de Redes em Linux 403 Firewalls como ferramentas de gerenciamento Uma das ferramentas mais utilizadas para o gerenciamento de serviços em redes é o firewall. Além de prover a segurança da rede, incluindo os aspectos de desempenho através de controle de banda e priorização por tipo de serviço (QoS), o firewall também é utilizado para análise de tráfego. Ele gera logs contendo informações sobre os pacotes com sua origem, destino, protocolo, porto, tamanho e a política aplicada ao pacote (ACCEPT, DROP, DENY, REDIRECT, MASQ, FORWARD, ...). O firewall utiliza filtros de pacotes a partir das diversas informações do pacote. Para sua configuração, deve-se conhecer as diversas camadas envolvidas (enlace, rede, transporte e aplicação), seus respectivos protocolos e portos, em cada interface de rede do equipamento firewall. A partir dos logs é possível identificar possíveis tentativas de invasão e analisar o desempenho do firewall. Como visto no capítulo 10, no Linux (kernel 2.4.x ou superior) é utilizado o software iptables que manipula tabelas de filtros de pacotes do kernel. Outros aplicativos Os gerentes e analistas de desempenho de rede utilizam ainda diversos aplicativos. Alguns deles são igualmente utilizados por hackers e crackers para identificar os pontos vulneráveis e furos de segurança dos sistemas de computação. Os mais conhecidos são os sniffers e os port scanners. Os sniffers são utilizados para capturar as informações que trafegam pela rede. Programas como tcpdump, snort e ethereal disponíveis no Linux capturam e exibem os pacotes identificando suas diversas partes. Podem ser utilizados filtros para selecionar os valores dos diversos campos dos pacotes. Os port scanners são aplicativos que tentam detectar os portos abertos em um sistema de computação. O nmap é um dos mais utilizados. Os utilitários socklist e rpcinfo podem ser utilizados para identificar os processos associados a portos abertos em um sistema. Há ainda o icmpinfo que interpreta as mensagens ICMP recebidas pela máquina local. 404 Gerência de Redes em Linux Ferramentas básicas como o ping, arp, rarp podem ser utilizadas para identificar os endereços das máquinas em uma rede e seu alcance. Há ainda o bing (bandwidth ping) que mede a banda entre dois equipamentos utilizando pacotes de dois tamanhos. Para controlar o acesso a serviços é utilizado o tcpd. Ele pode monitorar os acessos a serviços como telnet, ftp, pop3, smtp, rlogin, finger, rsh, registrar o acesso e, de acordo com sua configuração, executar o programa servidor apropriado. Normalmente estes serviços são configurados no arquivo /etc/inetd.conf. O processo inetd receberá a conexão no porto especificado e executará o processo correspondente. O processo é definido como tcpd que recebe o nome do processo servidor como argumento. Se os arquivos /etc/hosts.allow e /etc/hosts.deny permitirem a conexão, o tcpd dispara o servidor, repassando a conexão. Um serviço típico do inetd é o protocolo POP3, e no arquivo /etc/inetd.conf podemos ver a seguinte linha: pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s que indica que o programa /usr/sbin/tcpd será disparado quando houver um acesso ao porto pop3 pelo socket stream do protocolo tcp com usuário root. O tcpd, após registrar e verificar a segurança, irá disparar o servidor /usr/sbin/popper passando o argumento -s. Gerência de Redes em Linux 405 Utilizando o xinetd, o arquivo /etc/xinetd.d/qpopper contém as mesmas informações em um formato mais estruturado: service pop3 { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/popper server_args = -s #server_args = -s -l1 -p2 -f /etc/mail/certs/qpop.conf flags = IPv4 } Os portos de serviços, como o de nome pop3 (110), são definidos em /etc/services. A geração de logs é configurada normalmente para utilizar o syslogd que é configurado em /etc/syslog.conf. Neste arquivo são definidos como e onde as mensagens serão registradas (em um arquivo, em um terminal, ou enviadas para um usuário logado ou mesmo para um servidor remoto). No Linux, a maioria dos arquivos de log se encontra no diretório /var/log. O bom administrador deve verificar com frequência estes arquivos (e demais arquivos de log de cada serviço configurado) para identificar possíveis falhas. Eventos críticos podem ainda ser tratados automaticamente por aplicativos específicos, gerando, por exemplo, mensagens SMS (por exemplo, pagers e celulares) para equipes de suporte, ou redisparando serviços. Podem ainda serem geradas páginas WEB com relatórios e gráficos derivados destes logs. Por motivo de segurança (principalmente inferência), tais páginas devem ter acesso controlado através de usuário e senha e ser acessível através de protocolo HTTPS. Em alguns casos somente acessíveis de algumas máquinas específicas. 406 Gerência de Redes em Linux São disponíveis para o ambiente GNU/Linux diversos sistemas para monitoramento e gerenciamento dos recursos de redes. Os mais comuns são o mon, o monit e o Nagios. Gerência de Redes em Linux 407 408 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 12. Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Desde sua criação, a plataforma Unix definiu um padrão de chamadas às funções do sistema operacional através de um conjunto de bibliotecas. Estas bibliotecas, como também quase todos os sistemas Unix-like e seus aplicativos, foram escritas na linguagem C. A linguagem C foi definida por Brian Kernigham e Dennis Ritchie em 1978. Nesta mesma época, o Unix foi traduzido da linguagem de montagem do DEC PDP-7 para ela. Na criação do padrão Unix System V, pela AT&T, no documento SVID (System V Interface Definition), foram definidas as funções, suas interfaces e comportamento. Assim, qualquer programa que fosse escrito utilizando este padrão poderia ser facilmente portado para outro Unix e mesmo para outra arquitetura que suportasse o Unix. Bastava a recompilação dos fontes para a geração do código executável na nova plataforma. O projeto GNU criou então o compilador gcc, e o Linux utiliza este compilador como padrão. O gcc é considerado o melhor compilador existente. Ele utiliza o conceito de linguagens de máquinas virtuais hierárquicas. O programa na linguagem C/C++ é compilado para uma linguagem de máquina virtual Linux. O código produzido é otimizado, e então traduzido para a linguagem de máquina alvo (Intel, M68K, S390, etc). Este código pode ser então otimizado de acordo com a arquitetura do processador alvo, gerando o código objeto final. Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 409 Diversos compiladores para outras linguagens, disponíveis para o Linux, utilizam a estrutura do gcc. Alguns compiladores até fazem uma tradução para a linguagem C e utilizam o próprio gcc para a geração do código final. Os portes iniciais do Pascal (p2c) e do Fortran (f2c) para o Linux seguiram esta filosofia. As versões atuais já compilam diretamente para a linguagem da máquina virtual Linux. Para o desenvolvimento de aplicativos em modo gráfico há o KDevelop. Ele é um ambiente integrado com muitas características semelhantes ao Microsoft Visual Studio e ao Borland Delphi. Ele utiliza as ferramentas GNU para a compilação, linkedição e depuração. Para o desenho da interface gráfica são utilizados a QtLib e o QtDesigner da TrollTech. 410 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Um programa executável não é um código monolítico auto-contido. Ele utiliza diversas funções contidas em bibliotecas já existentes no Linux ou em pacotes adicionais (bibliotecas gráficas, multimedia, comunicação, bancos de dados, etc). A linguagem C possui até uma biblioteca chamada de Standard C Library (biblioteca C padrão). Ela contém funções definidas pela máquina virtual Unix e está disponível em todos os sistemas Unix-like e todos os sistemas que possuem um compilador de C. Na geração do código executável para um determinado tipo de processador, o desenvolvedor pode optar por utilizar linkedição estática ou dinâmica. Na linkedição estática, todas as funções utilizadas pelo programa são colocadas no arquivo que contém o código executável. Assim, o programa funcionará em qualquer instalação do Linux em máquinas com o mesmo tipo de processador (i386, MIPS, ARM, 390, ...). Deve-se observar que o formato do arquivo executável pode também variar e deve ser suportado pelo kernel Linux instalado. Na linkedição dinâmica, o arquivo executável contém apenas as chamadas a pontos de entrada para as bibliotecas compartilhadas (shared libraries). Este conceito é o equivalente às DLLs (Dynamic Linked Libraries) da plataforma Windows. O arquivo executável ficará menor porque apenas contém chamadas para os pontos de entrada das funções das bibliotecas. Utilizando o ldd, pode-se ver a dependência e a versão das bibliotecas compartilhadas utilizadas pelo programa: hmarx@thor ~> ldd /usr/bin/gcc linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0xb7555000) /lib/ld-linux.so.2 (0xb76ed000) hmarx@thor ~> ❏ Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 411 Para a depuração de programas pode ser utilizado o GNU debugger, gdb. Ele pode ser utilizado para executar um programa passo a passo, examinar variáveis e registradores, estabelecer condições para a interrupção da execução em pontos para a depuração e também alterar valores durante a execução. Ele permite também iniciar a depuração de um programa que já estava em execução através de seu comando attach. Existem interfaces gráficas como front end para o gdb, tais como o ddd, o kdbg e o módulo de depuração do kdevelop. Outros aplicativos úteis na depuração de programas e auditoria de uso de recursos do sistema são: Aplicativo lsof Descrição Lista arquivos abertos pelos processos fuser socklist Identifica processos utilizando os arquivos e sockets. Permite o envio de sinal para eles. Exibe os sockets abertos e os portos associados rpcinfo Exibe informações sobre RPC (Remote Procedure Call) ipcs Exibe informações sobre IPC (Interprocess Communication) strace Exibe as chamadas de sistema e sinais na execucão de um programa Exibe as chamadas a bibliotecas dinâmicas na execucão de um programa ltrace 412 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Os aplicativos strace e ltrace, além das opções, recebem como argumento o programa a ser executado. hmarx@venus:~> ltrace ./hello __libc_start_main(0x8048454, 1, 0xbfd42424, 0x8048490, 0x8048480 <unfinished ...> puts("Hello world!"Hello world! ) = 13 exit(0 <unfinished ...> +++ exited (status 0) +++ hmarx@venus:~>❏ hmarx@venus:~> strace ./hello execve("./hello", ["./hello"], [/* 111 vars */]) = 0 brk(0) = 0x804b000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=240452, ...}) = 0 mmap2(NULL, 240452, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7899000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 l\1\0004\0\0\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1430104, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7898000 mmap2(NULL, 1440072, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7738000 fadvise64(3, 0, 1440072, POSIX_FADV_WILLNEED) = 0 mprotect(0xb7891000, 4096, PROT_NONE) = 0 mmap2(0xb7892000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x159) = 0xb7892000 mmap2(0xb7895000, 10568, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7895000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7737000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb77376c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 mprotect(0xb7892000, 8192, PROT_READ) = 0 mprotect(0x8049000, 4096, PROT_READ) = 0 mprotect(0xb78f2000, 4096, PROT_READ) = 0 munmap(0xb7899000, 240452) = 0 fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 14), ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb78d3000 write(1, "Hello world!\n", 13Hello world! ) = 13 exit_group(0) = ? hmarx@venus:~> ❏ Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 413 Alguns exemplos: thor:~ # lsof /var/log/{mail,warn,messages} COMMAND PID USER FD TYPE DEVICE SIZE syslogd 361 root 4w REG 3,65 219397 syslogd 361 root 8w REG 3,65 455344 syslogd 361 root 9w REG 3,65 455344 syslogd 361 root 10w REG 3,65 3405056 thor:~ # ❏ NODE 580836 583175 583175 580834 NAME /var/log/mail /var/log/warn /var/log/warn /var/log/messages thor:~ # fuser -uv /dev/pts/5 USER PID ACCESS COMMAND /dev/pts/5: hmarx 15186 F.... (hmarx)tail hmarx 16126 F.... (hmarx)konsole hmarx 16160 F.... (hmarx)bash thor:~ # ❏ thor:~ # rpcinfo -p program vers proto 100000 2 tcp 100000 2 udp 100005 1 udp 100005 2 udp 100005 1 tcp 100005 2 tcp 100003 2 udp 100003 2 tcp thor:~ # ❏ port 111 111 860 860 863 863 2049 2049 portmapper portmapper mountd mountd mountd mountd nfs nfs thor:~ # ipcs -a ------ Shared Memory Segments -------key shmid owner perms 0x5b410ec3 0 root 644 0x00000000 73531393 hmarx 777 bytes 1048576 196608 ------ Semaphore Arrays -------key semid owner perms 0x5b410ec5 0 root 666 nsems 14 ------ Message Queues -------key msqid owner thor:~ # ❏ perms used-bytes nattch 1 2 status dest status messages 414 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Formato de arquivos executáveis O formato de executável padrão do Linux é o ELF - Executable and Linkable Format. Até o kernel 2.4, o Linux suportava diversos fomatos de executáveis. Além do ELF, o Linux suportava o antigo A.OUT e binários de outras plataformas, como o Intel COFF (Common Object File Format), X.OUT, SCO ISC, UnixWare 7, Solaris e Wyse V/386. O suporte a estes formatos era normalmente feito através de módulos carregáveis do kernel. A partir do kernel 2.6, o único formato suportado é o ELF. O Linux pode também executar aplicativos DOS (.COM e .EXE) através do dosemu, ou aplicativos Windows através do wine ou do wabi da Caldera. O dosemu e o wine não são realmente emuladores. Eles criam uma máquina virtual para o DOS e para o Windows, respectivamente. O dosemu requer uma cópia do DOS, e por isto é incluido o FreeDos. Outras versões proprietárias do DOS (como o PC-DOS, DR-DOS e MS-DOS) podem ser instaladas e configuradas no dosemu. dosemu no SuSE Linux Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 415 Executando programas para Windows no Linux O wine pode executar aplicativos DOS, Windows 3.x e Win32 (Win9x/NT) da plataforma Intel. O wine cria uma camada entre a API (Application Program Interface) do Windows e o sistema X Window. Ele suporta aplicativos escritos para todas as versões do Windows (Windows 3.x, Windows 9x, Windows NT, Windows Mem Windows 2K e XP). A maior parte da API do Windows e de suas DLLs já é suportada nativamente. No SuSE Linux, um aplicativo Windows pode ser executado através da interface gráfica KDE. O wine será automaticamente iniciado. Ele utilizará a configuração personalizada definida no diretório ~/.wine. Na primeira vez, ele criará um ambiente Windows simulado a partir do diretório ~/.wine/fake_windows. Paint Brush e Clock do Windows 3.11 no Wine 416 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Emuladores Existem ainda para o Linux diversos programas emuladores de hardware que permitem a instalação e a execução de um ambiente operacional completo. O VMware, da empresa VMware Inc., cria uma máquina virtual com o mesmo tipo de processador da máquina hospedeira com acesso a quase todos os dispositivos disponíveis em uma máquina real. A máquina virtual tem uma interface de rede que por meio de um bridge possibilita o acesso à máquina hospedeira ou até mesmo à sua rede local. O VMware possibilita a instalação e execução perfeita do FreeBSD, do DOS, do Netware5 e de todas as versões do Windows (do 3.1 ao XP). Windows 95 sendo executado pelo VMWare Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 417 O pose (Palm OS Emulator) é capaz de emular diversos modelos do Palm da 3COM, bastando para isto ter a ROM do modelo correto. Ele pode rodar o PalmOS ou o Linux para Palm. Utilizando o compilador cruzado (crosscompiler) gcc (m68k-palmos-coff-gcc) podem ser desenvolvidos e testados aplicativos (através do gdb) para o PalmOS utilizando o próprio Linux, sem a necessidade de transferir o programa para um PalmPilot real. Note que o PalmOS não utiliza a biblioteca C padrão. Existem ainda realização do HotSync. aplicativos para O hercules é um emulador de diversas arquiteturas da IBM, indo do 360 ao z900 (nos modos S/370, ESA/390 e zArchitecture). Ele executa facilmente o OS 360, o VM 370, o zOS, o Linux/390 e o Linux para zSeries. Ele emula o hardware do mainframe utilizando os dispositivos do PC. Por exemplo, um DASD 3390 pode ser emulado por um arquivo no disco e os terminais 3270 podem ser utilizados através do x3270 ou do tn3270 (aplicativos disponíveis para o Linux para acesso a mainframes IBM). a 418 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux O simh de Robert M. Supnik é um emulador genérico capaz de simular diversas arquiteturas. Estão disponíveis configurações para vários modelos da série PDP da DEC, do HP2100 da Hewlet Packard, do IBM 1130, do IBM S/3, do Altair 8800, do Interdata I4, do Honeywell H316/H516, e do VAX. Emulando o pdp-11, o simh pode executar facilmente o RT11, o RSX11, e mesmo as versões originais do Unix de Thompson, Kernigham e Richie. PDP-11 simulator V2.9-2 rodando o RT11 V05.03 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 419 420 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Há ainda o BasiliskII de Christian Bauer que simula máuinas Macintosh com CPUs 68000. Nele pode ser executado o MacOS e todos os seus aplicativos. O Mac emulado pode utilizar recursos do Linux nativo ou através da rede com o protocolo AppleTalk (pacote netatalk). BasiliskII rodando MacOS 7.5.5 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 421 Compilando fontes de aplicativos no Linux Os fontes de um aplicativo podem ser obtidos em formato .tar (normalmente arquivos .tar, .tgz ou .tar.gz) ou em formato rpm (RedHat Package Manager). É necessário então compilá-los para se obter o(s) arquivo(s) executável(eis). O primeiro passo é a instalação dos fontes. Para o formato rpm pode-se utilizar o comando rpm: $ rpm -i nome do pacote src.rpm Nomalmente será instalado no diretório /usr/src/packages/SOURCES, um arquivo no formato .tar (provavelmente com a extensão .tar.gz ou .tar.bz2). Deve-se então extrair os arquivos utilizando o comando: $ tar xvfz nome do arquivo tar.gz ou $ tar xvfj nome do arquivo tar.bz2 Serão criados um diretório e diversos sub-diretórios e arquivos sob este diretório. Mude para este diretório e verifique se existe algum arquivo executável com o nome configure. Caso exista, execute-o. Ele irá verificar a sua instalação do Linux e configurar os fontes para ela. Será gerado então um arquivo com o nome Makefile. Este arquivo será utilizado pelo programa make que irá compilar os fontes e gerar o(s) executável(eis). Alguns aplicativos podem requerer argumentos especiais para o configure ou ainda a alteração do arquivo Makefile. Após a certeza da geração adequada do arquivo Makefile, simplesmente digite: $ make O make irá automaticamente executar o gcc para compilar o(s) arquivo(s) fontes e o ld para gerar o(s) executável(is). Se tudo estiver correto, você poderá instalar o aplicativo utilizando: # make install 422 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Os arquivos Makefile O programa make utiliza arquivos chamados de makefile que dizem o que fazer para produzir um determinado resultado. Este resultado é normalmente compilar e linkeditar um programa gerando seu executável. Um arquivo makefile contém regras para a geração de resultados a partir de suas dependências. Um destino pode ser um arquivo ou uma ação. O arquivo makefile pode conter linhas com definições de variáveis, e diretivas para inclusão de arquivos ou montagens condicionais. Textos após o caracter # são comentários e serão ignorados pelo make. As definições de variáveis são semelhantes à do bash: variável= texto Um <texto> poderá continuar em outra linha se terminado pela barra invertida (’\’). As regras de dependência têm o seguinte formato geral: resultado : lista de dependências comando ... O resultado normalmente é um ou mais arquivos a serem gerados a partir da lista de dependências. Esta lista, que pode ser vazia, pode ser formada por nomes de arquivos ou de resultados. O(s) comando(s) são ações que devem ser executadas para produzir o resultado. O resultado default é o primeiro encontrado no arquivo makefile. Normalmente é criado um alvo do tipo all ou default com os resultados a serem gerados na lista de dependências. Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 423 A diretiva include fará o make incluir o(s) arquivo(s) especificado(s). Os nomes podem incluir padrões do shell como "*.mk". include lista de nomes de arquivos As diretiva ifeq e ifneq permitem a alteração condicional do processo de geração dos resultados. Note que o else é opcional: { ifeq | ifneq } (string1, string2) comandos1 [ else comandos2 ] endif As diretiva ifdef e ifndef permitem verificar se uma varável está ou não definida. { ifdef | ifndef } variável comandos1 [ else comandos2 ] endif 424 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Um exemplo simples de um arquivo Makefile para compilar o famoso programa hello.c que imprime "Hello World!": # Makefile para o programa hello CC=gcc COPT=-Wall all: hello clean: @-rm hello.o hello hello: hello.o $(CC) $(COPT) -o hello hello.o hello.o: hello.c $(CC) $(COPT) -c -o hello.o hello.c No prompt do shell, basta digitar "make" para produzir o programa hello. O ’@’ no comando rm indica não impressão do comando a ser executado. O ’-’ indica ignorar erro de retorno do comando rm caso os arquivos não existam. Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 425 Gerando pacotes RPM Para gerar um pacote RPM é necessário criar o arquivo com a especificação. Este arquivo é no formato texto tem a extensão .spec. Ele é composto de sessões que definem o pacote, seu conteúudo e diretivas para a instalação, atualização ou remoção do pacote. A primeira sessão do arquivo descreve o pacote e contém tags no formato: tag [ ( fase ) ] : texto Os tags principais são: Tag Name Version Release Source Sumary License Distribution Group BuildArch BuildRoot BuildRequires Requires Descrição Nome do pacote Número da Versão Número do Release Localização do arquivo com os fontes Descrição sumária Forma de licenciamento Distribuição Linux Nome do grupo do aplicativo Arquitetura Diretódio temporário para criação do pacote Dependências para a criação do pacote Dependências para instalação As fases, utilizadas nos tags Requires ou BuildRequires , são: Fase pre post preun postun Descrição Pré instalação do pacote Pós instalação do pacote Pré remoção do pacote Pós remoção do pacote 426 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux A sessões seguintes fornecem informações adicionais para a criação do pacote e têm o formato: %tag texto linhas com informações sobre o tag ... Os principais tags das sessões são: 1. Descrição mais completa do pacote %description [ -n nome-do-pacote ] [ -l lingua ] 2. Preparacão para instalaçao do pacote %prep %setup -q 3. Criação do pacote %build make 4. Instalação do pacote %install comandos shell para instalação do pacote 5. Remoção de arquivos temporários %clean comandos para remoção de arquivos e diretórios temporários Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 427 6. Arquivos %files [ %defattr (permissões, usuário, grupo) ] [ %dir %attr (permissões, usuário, grupo) caminho ] lista de arquivos com o caminho 7. Histórico de atualizações %changelog { * dia-da-semana mês dia ano responsável <email> { * texto descritivo } } Algumas diretivas ou macros como: %{name} %{version} %{_tmppath} %{buildroot} %{suse_version} %(linha de comando) %{release} %{_bindir} podem ser utilizadas no arquivo .spec para melhor parametrizar o pacote. O fonte do pacote é um arquivo tar cujo nome deve seguir o formato nome-do-pacote-%{version}.tar.{ gz | bz2 } Este arquivo deve conter os arquivos necessários para criação do pacote. 428 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Assinando um RPM Para garantir a atenticidade de um pacote RPM utiliza-se uma assinatura utilizando uma chave privada PGP. O par de chaves pode ser gerada pelo gpg. Um desenvolvedor pode criar o arquivo .rpmmacros em seu diretório pessoal para especificar a chave que será utilizada na assinatura dos pacotes gerados por ele. Por exemplo: %_signature gpg %_gpg_path ~/.gnupg %_gpg_name Helio Marques <[email protected]> %_gpgbin /usr/bin/gpg Assim, o desenvolvedor poderá utilizar o comando rpm -v --addsign pacote.rpm ou rpmsign -v --addsign pacote.rpm Será pedida a senha da chave privada do desenvolvedor. Para verificar um pacote RPM, utilize o comando rpm -K pacote.rpm Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 429 Exemplo de pacote RPM A seguir é mostrado o arquivo .spec para um pacote simples chamado simple-package. O pacote irá instalar os arquivos /usr/local/pacote/prog /usr/local/pacote/arq.txt /usr/local/pacote/img.png O executável prog é gerado a partir do seu fonte em C, prog.c. O arquivo tar da versão 1.0, criado com o conteúdo do diretório simple-package-1.0/, para o pacote simple-package contém: hmarx@venus:/usr/src/packager/SOURCES> tar tvfj simple-package-1.0.tar.bz2 drwxrwx--- hmarx/linuxtech 0 2009-12-08 13:58 simple-package-1.0/ -rw-rw---- hmarx/linuxtech 32 2009-12-08 13:57 simple-package-1.0/Makefile -rw-rw---- hmarx/linuxtech 66 2009-12-08 13:57 simple-package-1.0/prog.c -rw-rw---- hmarx/linuxtech 28 2009-12-08 13:58 simple-package-1.0/arq.txt -rw-r----- hmarx/linuxtech 17454 2009-12-08 13:58 simple-package-1.0/img.png hmarx@venus:/usr/src/packager/SOURCES> O processo de criação do RPM irá extrair todos os arquivos do arquivo simple-package-1.0.tar.bz2 no diretório /usr/src/packages/BUILD e executará o script descrito em %build gerando o arquivo RPM no diretório /usr/src/packages/RPMS/i586/ A arquitetura i586 (default) foi definida no tag BuildArch. 430 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Arquivo .spec para o pacote simple-package Name: Version: Release: Source: Summary: License: Distribution: Group: BuildArch: simple-package 1.0 0.1 simple-package-1.0.tar.bz2 Simple Package GPL openSuSE Applications i586 %description Simple package to demonstrate the RPM build process %description -l pt_BR Pacote simples para demonstrar o processo de criar RPM %prep %setup -q %build make %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/local/pacote install -m 755 prog $RPM_BUILD_ROOT/usr/local/pacote/prog install -m 644 arq.txt $RPM_BUILD_ROOT/usr/local/pacote/arq.txt install -m 644 img.png $RPM_BUILD_ROOT/usr/local/pacote/img.png %clean rm -rf $RPM_BUILD_ROOT %files %defattr(644,root,root) %dir %attr(755,root,root) /usr/local/pacote /usr/local/pacote/prog /usr/local/pacote/arq.txt /usr/local/pacote/img.png %changelog * Tue Dec 8 2009 Helio Marques <[email protected]> * Simple package - initial version Ambiente de Execução e Desenvolvimento de Aplicativos em Linux 431 Após gerado o pacote, podemos verificar sua autenticidade utilizando o comando: hmarx@venus:~> rpm -K simple-package-1.0-0.1.i586.rpm simple-package-1.0-0.1.i586.rpm: rsa sha1 (md5) pgp (md5) pgp md5 OK hmarx@venus:~> ❏ Note que a chave pública deve ser importada para a base de dados RPM, através do comando root@venus:~# rpm --import hmarx-pubkey.asc root@venus:~# ❏ 432 Ambiente de Execução e Desenvolvimento de Aplicativos em Linux Tendo os dois arquivos simple-package-1.0.tar.bz2 simple-package.spec basta executar o aplicativo rpmbuild para construir o pacote. Abaixo as formas de gerar os pacotes: Pacote a ser gerado binário fonte ambos Comando rpmbuild -bb aquivo.spec rpmbuild -bs aquivo.spec rpmbuild -ba aquivo.spec Os arquivos gerados serão em: /usr/src/packages/SRPMS/simple-package-1.0-0.1.src.rpm /usr/src/packages/RPMS/i586/simple-package-1.0-0.1.i586.rpm Listando as informações do pacote, temos: root@thor:~ # rpm -qpi /usr/src/packages/RPMS/i586/simple-package-1.0-0.1.i586.rpm Name : simple-package Relocations: (not relocatable) Version : 1.0 Vendor: (none) Release : 0.1 Build Date: Mon 04 Jan 2010 09:53:15 AM BRST Install Date : (not installed) Build Host: thor.linuxtech.com.br Group : Applications Source RPM: simple-package-1.0-0.1.src.rpm Size : 27517 License: GPL Signature : (none) Summary : Simple Package Description : Simple package to demonstrate the RPM build process Distribution: openSuSE root@thor:~ # ❏ Ambiente de Execução e Desenvolvimento de Aplicativos em Linux O pacote poderá ser instalado utilizando o comando rpm. root@thor:~ # rpm -ivh simple-package-1.0-0.1.i586.rpm Preparing... ########################################### [100%] 1:simple-package ########################################### [100%] root@thor:~ # ❏ Quando for atualizar o pacote: root@thor:~ # rpm -Uvh simple-package-1.0-0.3.i586.rpm Preparing... ########################################### [100%] 1:simple-package ########################################### [100%] thor@thor:~ # ❏ Ou quando for remover o pacote: root@thor:~ # rpm -e simple-package root@thor:~ # ❏ 433 434 Expressões Regulares 13. Expressões Regulares Expressões Regulares O useo de expressões regulares é uma ferramenta muito poderosa utilizada em diversos aplicativos, incluindo shells, como o bash, editores de texto, como o vi, utilitários como o grep, sed e find, e diversas linguagens de programação, como Perl. Estas expressões são cadeias de caracteres que formam um padrão a ser comparado em um texto. Expressões regulares são também chamadas de pattern matching ou simplesmente regex. As expressões regulares são formadas por dois tipos de caracteres: caracteres especiais, denominados metacaracteres, e os literais, ou caracteres normais. Metacaracteres possuem significado especial e são interpretados pelo aplicativo. Assim, uma cadeia de caracteres normais como "linux" é uma expressão regular que deve ser lida como o caracter l, seguido do caracter i, seguido do caracter n, seguido do caracter u, seguido do caracter x. A cadeia "*doc*" contém o caracter especial * deve ser lida como zero ou mais caracteres, seguidos do caracted d, seguido do caracted o, seguido do caracter c, seguido de zero ou mais caracteres. Os metacaracteres podem ter semânticas diferentes dependendo do aplicativo utilizado (shell, grep, sed, perl, ...). Expressões Regulares 435 Os metacaracteres mais utilizados são: Metacaracter Nome Significado ponto classe de caracteres classe negada qualquer caracter qualquer caracter da classe qualquer caracter não listado \c escaped char caracter c literalmente ^ $ \< \> circunflexo dólar (cifrão) barra-invertida menor barra-invertida maior início da linha fim da linha início de uma palavra fim de uma palavra barra-em-pé parêntesis separa expressões alternativas define escopo da expressão . [ ... ] [^... ] | ( ... ) Alguns metacaracteres são quantificadores ou de repetição: Metacaracter ? * + { mín, máx } Nome Significado interrogação asterisco mais 0 ou 1 caracter 0 ou mais caracteres 1 ou mais caracteres faixa de quantidades Requer mín, Limite máx 436 Expressões Regulares As expressões regulares são utilizadas, por exemplo, para procurar um número em um texto. Para um número específico, como 12345, a expressão regular é a cadeia formada pelos caracteres do número, ou seja, 12345. Se a procura for por um número qualquer, utilizamos os metacaracteres para definir um número, ou seja, uma sequência de dígitos. Assim, um número qualquer (1 ou mais dígitos) pode ser definido por qualquer uma das seguintes expressões regulares: [0-9]+ [0-9][0-9]* dígito repetido 1 ou mais vezes um dígito seguido de 0 ou mais dígitos Uma cadeia entre aspas pode ser definida como: "[^"]*" aspas, seguido de 0 ou mais caracteres que não sejam as aspas, seguido de aspas. Às vezes, é necessário referenciar uma cadeia encontrada por uma subexpressão agrupada por parêntesis, \( e \). São utilizados então os metacaracteres \1, \2, ..., equivalentes às cadeias que combinam com as expressões associadas à primeira expressão, segunda expressão, ..., respectivamente. Assim, utilizando o sed, podemos substituir todo assinalamento da forma variável := número por número ==> variável utilizando o comando: $ sed "/\([a-z]\+\) := \([0-9]\+\)/s//\2 ==> \1/" arquivo > arquivo.novo Para listar as palavras começadas com x (maiúsculo ou minúsculo) do dicionário podemos utilizar: $ grep "^\(x\|X\)" /usr/share/dict/words Para listar o remetente e o assunto de e-mails em uma caixa postal do usuário jose podemos utilizar simplesmente: $ grep "^\(From\|Subject\):" /var/spool/mail/jose Expressões Regulares 437 438 O Editor de textos VI 14. O Editor de Textos VI O editor de textos vi O editor de textos padrão dos sistemas Unix-like é o vi (visual). Este é um editor muito poderoso. A interface com o usuário pode parecer complicada devido à grande quantidade de comandos. Porém, considerando a língua inglesa, os comandos são bastante intuitivos. Veremos aqui apenas alguns comandos mais importantes. O vi trabalha em três modos: comando, edição e comando de uma linha. No modo comando, cada caracter digitado será interpretado pelo vi como um comando. No modo edição, os caracteres serão inseridos (ou substituídos ) no texto. No modo comando de linha, um comando completo é digitado e será executado ao pressionar o ©. Para iniciar o vi, entre em um terminal (ou um xterm) e digite: $ vi ou, para editar arquivo(s) existente(s), $ vi nome_do_arquivo ... O vi será iniciado no modo comando. Mostrará o conteúdo do arquivo, seguido de linhas com o caracter "~" na primeira coluna para indicar onde o arquivo termina. Introdução à Computação Forense 439 Para entrar em modo edição, pode-se utilizar um dos seguintes comandos: insere a partir da posição atual do cursor insere a partir do início da linha insere após a posição atual do cursor insere após o fim da linha cria uma linha nova após a atual e começa a inserção cria uma linha nova antes da atual e começa a inserção apaga da posição atual do cursor até o fim da linha e começa a inserção i I a A o O C Para sair do modo de edição, e voltar ao modo comando, use a tecla ¸. Para caminhar pelo texto, utilize: h j k l 0 $ H L M nG % n| w W b B fc Fc tc ou Ç (seta para a esquerda), volta o cursor uma coluna ou Ê (seta para baixo), avança o cursor uma linha ou È (seta para cima), volta o cursor uma linha ou É (seta para a direita), avança o cursor uma coluna ou Ã, vai para o início da linha ou Ä, vai para o fim da linha vai para o início da primeira linha da tela vai para o início da última linha da tela vai para o início da linha do meio da tela vai para a linha n ou para o fim do texto posiciona no ( , ), {, }, [ ou ] correspondente posiciona na coluna n vai para o início da próxima palavra vai para o início da próxima palavra, ignorando caracteres especiais vai para o início da palavra anterior vai para o início da palavra anterior, ignorando caracteres especiais posiciona o cursor na próxima ocorrência do caracter c posiciona o cursor na ocorrência anterior do caracter c posiciona o cursor antes da próxima ocorrência do caracter c 440 O Editor de textos VI posiciona o cursor após a ocorrência anterior do caracter c Tc +B ¦ +F ¦ +U ¦ +D ¦ rola a tela para cima (igual a Å) rola a tela para baixo (igual a Æ) rola a tela para cima rola a tela para baixo Para excluir ou copiar textos, existem os seguintes comandos: nx nX d y p P nrc R ~ u U ou nÂ, apaga os próximos n caracteres a partir do cursor apaga os n caracteres anteriores inicia a sequência para apagar, exemplos: apaga n linhas (default n=1) ndd apaga n palavras ndw inicia a sequência para salvar, exemplos: salva n linhas a partir da corrente nyy salva as próximas n palavras ynw insere o texto salvo após a posição corrente insere o texto salvo antes da posição corrente substitui os próximos n caracteres por c inicia modo de sobrescrever (oveRwrite) troca a caixa do caracter (maiúscula <-> minúscula) desfaz a última alteração desfaz as alterações feitas na linha Utilizando-se a sequência "c antes dos comandos, o texto salvo ou removido é colocado em um buffer identificado por c. Este buffer pode ser, por exemplo, inserido após a posição do cursor com o comando: "cp Introdução à Computação Forense 441 Para procurar um texto (que pode ser uma expressão regular), podemos utilizar: procura o texto para frente /texto procura o texto para trás ?texto procura a próxima ocorrência n procura a ocorrência anterior N Pode-se marcar um texto, para executar um comando, utilizando: inicia a marcação caracter a caracter v inicia a marcação de linhas V inicia a marcação de colunas ¦ +V marca a linha com o caracter c (invisível) mc vai para o início da linha marcada com o caracter c ’c (invisível) ‘c vai para a posição marcada com o caracter c executa o comando cmd e substitui o texto marcado !cmd pela saída do comando. Ao teclar ":", o vi entra no modo comando de uma linha. O vi colocará na última linha da tela o prompt ":", onde você pode digitar diversos comandos do vi. Veja alguns exemplos: :faixap :faixad :n :prev :n arquivos :shell :!comando :x :q :w arquivo :e arquivo :r arquivo :q! imprime as linhas da faixa apaga as linhas da faixa passa para o próximo arquivo a editar volta ao arquivo anterior define nova lista de arquivos a editar abre uma sessão shell. Ao terminar o shell, volta à edição executa o comando salva e sai do vi abandona a edição e sai do vi escreve o texto no arquivo carrega o arquivo para edição lê o arquivo após a posição corrente abandona o vi, ignorando alterações feitas 442 O Editor de textos VI Podem ser utilizados os comandos: ¦+6 ¦+G ¦+L . para alternar entre dois arquivos para exibir o nome do arquivo e linha corrente para redesenhar a tela para repetir o último comando de inserção, alteração ou deleção Alguns comandos podem receber uma faixa para definir o escopo dos comandos, como os dois primeiros acima. Esta faixa pode ser dado pelos números das linhas inicial e/ou final, ou por expressões regulares para procura de textos nas linhas inicial e/ou final. :2,8p :1,$p :/txt1/,/txt2/d :.,.+3p imprime as linhas de 2 a 8 imprime da linha 1 ao final do texto apaga da linha contendo txt1 até a contendo txt2 imprime a linha atual e as 3 seguintes O comando de linha para substituição é muito poderoso. Por exemplo, o comando: :10,105g/txt1/s/txt2/txt3/g substitui (s) todas as ocorrências (g no final do comando) de txt2 por txt3 em todas as linhas entre 10 e 105 que contenham (g no início do comando) o texto txt1 . Os seguintes comandos podem ser utilizados para saída rápida do vi. ZZ ZQ salva e sai do vi abandona a edição, ignorando alterações feitas Introdução à Computação Forense 443 Um texto, opcionalmente marcado, pode ser indentado utilizando: n<< n>> arreda o texto das n próximas linhas para a esquerda arreda o texto das n próximas linhas para a direita Para esta indentação, o vi irá utilizar o valores estabelecidos pelas opções shiftwidth e tabstop (veja :set ts e :set sw abaixo). Ele irá utilizar TABs ou espaços em branco para que o texto atinja a coluna desejada. Opções do vi O vi possui ainda diversas opções que podem ser alteradas através do comandos: :set opção = valor :set opção :set noopção O estado atual das opções pode ser visto com: :set :set all Algumas das opções mais usadas são: :set number :set nowrap :set ic :set sw=2 :set list :set ts=2 :set sw=4 mostra o número das linhas não mostra linhas longas em várias linhas ignora maiúsculas/minúsculas nas procuras altera o número de colunas para indentação para 2 visualiza os caracteres especiais tipo TAB e fim de linha altera o TAB para parar de 2 em 2 colunas altera o deslocamento dos comandos << e >> 444 Criando disquetes de Boot 15. Criando Disquetes de Boot Criando Disquetes de Boot O Linux pode ser carregado de disquete com ou sem o LILO ou Grub. Utilizando o LILO Você deve criar um arquivo de configuração /etc/lilo.conf, como o seguinte: boot = /dev/fd0 install = /boot/boot.b map = /boot/map read-write prompt image = /boot/kernel label = Bootdisk root = /dev/fd0 Para isto, você precisa de um kernel compilado (através de make zImage, por exemplo). Veja o tamanho em blocos do kernel e some 50 (número aproximado de blocos para os inodos do sistema de arquivos no disquete). Chamaremos este número de KERNEL_BLOCKS. Note que kernel é o vmlinuz gerado na compilação. Um kernel Linux que cabe em um disquete, preparado por Adam Jensen <[email protected]> , pode ser encontrado em http://linuxguy.org/docs/linuxdisk Criando disquetes de Boot 445 Para saber o tamanho do kernel, utilize: # ls -s kernel Crie um sistema de arquivos ext2 no disquete reservando os blocos calculados. Monte o disquete para copiar os arquivos necessários e executar o lilo. Veja um exemplo do procedimento abaixo. # mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS # mount /dev/fd0 /mnt # rm -rf /mnt/lost+found # mkdir /mnt/{boot,dev} # cp -R /dev/{null, fd0} /mnt/dev # cp /boot/boot.b kernel /mnt/boot # cp bdlilo.conf /mnt # lilo -v -C bdlilo.conf -r /mnt Sem o LILO ou Grub Copie o kernel para o início do disquete: # dd if=kernel of=/dev/fd0 bs=1k 375+1 records in 375+1 record out Neste exemplo o kernel ocupou 376 blocos do disquete ao qual chamaremos de KERNEL_BLOCKS. Informe ao kernel (neste caso no disquete), que o dispositivo raiz é o próprio disquete e que ele será carregado read/write. # rdev /dev/fd0 /dev/fd0 # rdev -R /dev/fd0 0 446 Criando disquetes de Boot Informando ao kernel sobre o sistema de arquivos raiz Na imagem do kernel há uma palavra que informa onde o root filesystem deve ser encontrado. Esta palavra é acessível através do comando rdev e deve ser interpretada como: Bits 0-10 11-13 14 15 Descrição Offset do ramdisk em blocos de 1024 bytes não utilizado Indica que um ramdisk deve ser carregado Indica que deve dar pausa antes da carga do root filesystem Se o bit 15 estiver em 1, o processo de boot irá pedir o disquete com o root filesystem. Isto é necessário se você criar os discos de boot e rootfs separados. No caso do disquete contendo o kernel e o sistema de arquivos, o offset do rootfs será o primeiro bloco livre após o kernel (o mesmo que KERNEL_BLOCKS). Ou seja, o valor será KERNEL_BLOCKS + 214. No caso do conjunto de dois discos, boot+root, o offset do rootfs será 0. Assim, o valor será 214 + 215, isto é, 49152. Utilizando o comando rdev faremos: # rdev -r /dev/fd0 valor ou # rdev -r /mnt/kernel Desmonte o disquete: # umount /mnt valor Criando disquetes de Boot 447 Criando o root filesystem Para criar o sistema de arquivos raiz, pode ser utilizado um arquivo que será transferido para o disquete de boot ou rootfs. Crie um sistema de arquivos ext2 em um arquivo, que chamaremos de ROOTFS: # dd if=/dev/zero of=ROOTFS bs=1k count=2048 # mke2fs -m 0 -i 2000 ROOTFS Monte o arquivo para preencher o sistema de arquivos raiz: # mount -o loop ROOTFS /mnt Copie para lá os diretórios necessários. Lembre de utilizar a opção -R para copiar os devices em /dev. Os diretórios básicos são: /dev, /proc, /etc, /sbin, /bin, /lib, /mnt e /usr. Copie apenas o necessário devido à limitação do espaço em disquete. Lembre-se de criar os arquivos de inicialização corretamente: /etc/inittab, /etc/fstab, /etc/rc, entre outros. Desmonte o arquivo ROOTFS e compacte-o. # umount /mnt # gzip ROOTFS Transfira o arquivo compactado para o disquete: # dd if=ROOTFS.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS Os disquetes estão prontos para serem utilizados. Teste-os para verificar se todos os procedimentos foram corretamente seguidos e se o rootfs contém todos os arquivos necessários e corretamente configurados. 448 Criando disquetes de Boot Utilizando o Grub Crie o arquivo menu.lst com a definição da entrada para o boot do kernel instalado. Por convenção, utilize a versão do kernel para identificar a versão do kernel instalado, similar ao mostrado abaixo. #--default 0 timeout 5 title Linux - versão do kernel root (fd0, 0) kernel /vmlinuz-versão do kernel root=/dev/fd0 initrd /initrd-versão do kernel Formate o disquete usando FAT. # mkfs -t vfat /dev/fd0 Monte o disquete e crie os diretórios boot e grub # mount /dev/fd0 /mnt # mkdir -p /mnt/{boot,boot/grub} Copie o kernel para o disquete. # cp vmlinuz do kernel /mnt/boot Criando disquetes de Boot 449 Desmonte o disquete . # umount /dev/fd0 Instale o grub no disquete: # grub GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible grub> device (fd0) /dev/fd0 grub> root (fd0) Filesystem type is fat, using whole disk grub> setup (fd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/fat_stage1_5" exists... yes Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal) Running "embed /boot/grub/fat_stage1_5 (fd0)"... failed (this is not fatal) Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/menu.lst "... succeeded Done. grub> quit # r E pronto ! 450 Criando disquetes de Boot 16. Sistemas de Numeração Provavelmente, a necessidade do ser humano utilizar um sistema de numeração surgiu na pré-história. Inicialmente o homem das cavernas deve ter associado pedras a suas posses. Quando suas posses começaram a aumentar, a quantidade de pedras tournou-se incômoda para o transporte. Notação posicional Um número é um conjunto de símbolos associado a uma determinada quantidade. Hoje utilizamos uma notação posicional em que cada símbolo tem um valor diferente conforme sua posição no número. Assim, o número 347, na base 10, representa três centenas, quarenta e sete dezenas e sete unidades. Se considerarmos uma base β qualquer, uma determinada quantidade Q será representada pelo número N na base β, cuja representação é: N = ...DCBA.abcd...β, onde os símbolos { ..., D, C, B, A, a, b, c, ...} representam quantidades de 0 a β - 1. Note que para qualquer base β, a quantidade β é sempre representada pelo número 10β. Logo, Q = ... + Dβ3 + Cβ2 + Bβ1 + Aβ0 + aβ-1 + bβ-2 + cβ-3 + dβ-4 + ... Consideremos inicialmente os números naturais (inteiros sem sinal). Por exemplo, 34710 representa a quantidade Q = 3*102 + 4 * 101 + 7*100 = 3*100 + 4*10 + 7 = 347 ! Se efetuarmos as operações em uma base diferente, digamos δ, teremos a representação de Q na base δ. Se quisermos representar a quantidade trezentos e quarenta e sete, 34710, em octal (base 8) temos: ☞ Para toda base β, a representacão da quantidade β será 10. δ = 8 ∴ a quantidade 8 na base 8 é 10 ! Logo, realizando as operações na base 8, teremos: Q = 3*122 + 4*121 + 7*120 = 3 * 144 + 50 + 7 = 454 + 50 + 7 = 533 ! Note que 1010 é igual a 128. N = 5338 = 5*82 + 3*81 + 3*80 = 34710 Lembre-se que na base 8, 7 + 1 = 10 ! Alternativamente, a conversão de um número na base 10 para uma base β pode ser feita pelo método das divisões sucessivas: 347 | 8 27 43 | 8 3 3 5 | 8 5 0 Lendos os restos de forma inversa temos o número 533. Se δ é potência de β, digamos βN podemos agrupar N dígitos do número na base β para formar 1 dígito na base δ. Assim, cada dígito na base 8 (23) pode ser representado por 3 dígitos binários (base 2), chamados simplesmente de bits. Na computação digital são comuns as representações nas bases 2, 8 e 16, chamadas de binário, octal e hexadecimal, respectivamente. Consequentemente, uma quantidade Q irá necessitar de N dígitos na base β para representá-la, onde N = teto ( ) log(Q) log(β) A função teto(x) é o menor inteiro maior ou igual a x. Assim, o número 987610 necessita de 5 dígitos na base 8: teto ( ) log(9876) = teto (4.423237040381) = 5 log(8) E o número 987610 necessita de 14 dígitos na base 2 (14 bits): teto ( ) log(9876) = teto (13.179287104600357492) = 14 log(2) Números em um computador digital Os computadores digitais atuais utilizam componentes que representam os valores 0 e 1 que também significam falso e verdadeiro. A magnitude de um número que um computador consegue representar é limitada, normalmente ao número de bits que o maior registrador do processador consegue armazenar. Assim, tipicamente, temos números naturais e inteiros de 8, 16 32 ou 64 bits e números de ponto flutuante de 32, 64 e 80 bits. Números naturais Para os números naturais precisamos de k bits para representar 2k valores k (0 a 2 -1). Assim, por exemplo, com 32 bits representamos de 0 a 4294967295. Números inteiros Utilizando k bits para representamos 2k valores inteiros (positivos e negativos). As 3 representações comuns são sinal magnitude, complemento de 1 e complemento de 2. Sinal magnitude Reservamos 1 bit para o sinal (0 positivo e 1 negativo) e assim sobram k 1 bits representando 2k-1 valores. Problema: teremos o +0 e o -0. Através de circuitos especiais podem zerar o bit de sinal quando todos os outros k-1 bits forem iguais a zero. Veja abaixo as representações de +79 e -93 e a soma, -14, utilizando 8 bits. São válidas as representações dos números -127...-0, +0 ... +127. Número +79 -93 -14 7 0 1 1 6 1 1 0 5 0 0 0 bits 4 0 1 0 3 1 1 1 2 1 1 1 1 1 0 1 0 1 1 0 Complemento de 1 Representamos o números positivos convertendo o número para a base 2. Se o número for negativo, convertemos o número e complementamos os bits. Veja abaixo as representações de +79 e -93 e a soma, -14, utilizando 8 bits. São válidas as representações dos números -127...-0, +0 ... +127. Número +79 -93 -14 7 0 1 1 6 1 0 1 5 0 1 1 bits 4 0 0 1 3 1 0 0 2 1 0 0 1 1 1 0 0 1 0 1 Complemento de 2 Representamos o números positivos convertendo o número para a base 2. Se o número for negativo, convertemos o número, complementamos os bits e somamos 1. Veja abaixo as representações de +79 e -93 e a soma, -14, utilizando 8 bits. São válidas as representações dos números -128..., 0, ... +127. Número +79 -93 -14 7 0 1 1 6 1 0 1 5 0 1 1 bits 4 0 0 1 3 1 0 0 2 1 0 0 1 1 1 1 0 1 1 0 Note que apenas nesta representação a adição produzirá o resultado correto. Números de ponto flutuante Considerando um número decimal, representado por: +/- a.bcdefg....* 10k onde a,b,c,... são dígitos decimais (0 a 9) e k um número inteiro (positivo ou negativo), em binário, após normalizá-lo teremos: +/- 0.xyzkw... * 2E Com N bits podemos representar este número utilizando 3 partes: S: o sinal da mantissa, o expoente com e bits e o valor absoluto da mantissa com m bits. 1 bit S e bits expoente m bits mantissa O expoente é normalmente representado pelo pelo excesso de 2e-1-1 O valor de x é sempre 1, assim ele pode ser oculto (não representado). Desta forma a mantissa será m+1 bits. O bit em 1 é chamado na literatura de hidden bit (bit oculto). Introdução à Computação Forense 457 17. Introdução à Computação Forense Conceitos iniciais A computação forense é a obtenção e análise de dados, livre de distorções ou divergências, para a reconstrução de informações ou eventos que ocorreram no sistema. Devemos ter sempre em mente que os sistemas são imensos, complexos e sofrem alterações constantemente. Dados podem estar ocultos em qualquer local. Há pouca informação técnica disponível. Não há software disponível. O mais importante é o conhecimento e a experiência. A obtenção dos dados às vezes é fácil. A análise é difícil e gasta muito tempo. O amazenamento das informações obtidas requer muito espaço. Os requisitos básicos de um detetive digital são: ♦ Conhecimento técnico ♦Conhecimento das implicações técnicas de suas ações ♦ Εsperteza e mente aberta ♦ Εducação contínua e conhecimento histórico ♦ Uso altamente redundande de fontes de informação nas suas conclusões Ao se deparar com um caso: ♦ Assegure e isole ♦ Registre o cenário ♦ Procure evidências sistematicamente ♦ Colecione e empacote as evidências ♦ Mantenha uma linha de custódias 458 Introdução à Computação Forense Há ainda alguns lemas: ♦ Velocidade é essencial - mas não exagere ♦ Tudo o que você fizer no sistema o perturba ♦ Nunca confie no sistema ♦ Suas políticas devem sempre ser consideradas ♦ Mantenha uma linha de custódias ♦ Espere por falhas ♦ Prepare-se para surpresas Procura por evidências Na procura por evidências deve-se sempre preservar o estado. Nunca conhecemos o passado. Mesmo o presente pode ser capcioso. Sempre capture os dados na ordem de sua volatilidade. 1 2 3 4 5 6 7 Ordem de volatilidade de informações Registradores, memórias de periféricos, caches, etc. Memória (do kernel e física) Estado da rede Processos em execução Discos Disquetes, medias de backup, etc. CD-ROMs, impressões, etc. Os maiores problemas são: ♦ Falta de clareza ♦ Não conhecer o que aconteceu ♦ Não conhecer o que ou quem está combatendo ♦ Não saber em que confiar ♦ Problemas mais difíceis requerem maior preparo ♦ O legado de Heisenberg ! Introdução à Computação Forense 459 Se você não conhece o sistema: ♦ Conheça as limitações ♦ É muito fácil danificar uma evidência ♦ Se existe automação, a coleta de informações é possível ♦ Mesmo a análise mais simples é perigosa ♦ Peça ajuda ! Plano de batalha ♦ Pense ! Digitar rapidamente não irá ajudar ! ♦ Há alguma política de segurança ? ♦ Defina objetivos ♦ Há alguma pessoa de contato ? ♦ Assuma o pior ♦ Trabalhe o mínimo possível com os dados originais Reconstrução das fábulas A maioria das informações têm componentes temporais. Algumas temporizações são mais raras que outras. Construa uma linha de tempo. Examine um pequeno período de cada vez. Tente determinar o que aconteceu. Quem contactar ? ♦ A equipe de segurança de sua empresa ♦ A gerência ♦ O CERT ? ♦ O FBI, a polícia, etc. ? 460 Introdução à Computação Forense Lembre-se sempre que: Um alvo pode ser atingido duas vezes por um raio. Múltiplos eventos de cada vez podem gerar confusão. Um mesmo incidente pode envolver várias partes. Incidentes isolados podem envolver várias partes. Deve-se interligar os eventos ao fluxo de dados. Múltiplos investigadores devem juntar suas evidências. Investigação na prática Algumas precauções devem ser tomadas para não apagar as evidências ao investigar o conteúdo de um sitema de computação. Devemos sempre lembrar que: 1. As informações volátes (conteúdo de memória RAM, estado do processador e de dispositivos de E/S) são extremamente difíceis de serem obtidas sem alterá-las. 2. As informações não volátes (armazenadas em disco, disquete, pen drives, CDs, DVDs, e impressões) são mais fáceis de serem obtidas. 3. Horários da máquina, de arquivos e locais são ítens imprecindíveis à inverstigação. 4. Em caso de acesso externo, você deve contar com a ajuda dos provedores de acesso para obter informações sobre as conexões executadas pelo invasor. Verifique o período das sessões suspeitas. 5. Observe bem o sistema antes de iniciar a investigação. Nunca inicialize o computador utilizando o disco em investigação. Utilize outro computador para suas análises. Utilize uma cópia dos discos e/ou partições (por exemplo através do utilitário dd) e sempre monte as partições no modo read-only (utilizando a opção -o ro do utilitário mount). Lembre-se que a área de swap também pode conter informações valiosas. Nunca utilize esta área como swap durante sua investigação. Faça uma cópia e utilize a cópia para análise. Introdução à Computação Forense 461 6. Simples ferramentas como o find, grep, strings, dentre outras, podem ser bastante úteis para procura de evidências. Os arquivos de log, arquivos temporários e core dumps podem ser pistas importantes. Veja também o cadastro de usuários (/etc/passwd e /etc/shadow) e também o /var/log/lastlog. Nota: Se a partição sob análise está montada em /Analise, por exemplo, estes arquivos estarão em /Analise/etc/passwd, /Analise/etc/shadow e /Analise/var/log/lastlog 7. Registre todos os seus procedimentos. Os métodos de investigação também são levados em conta em um tribunal. Uma prova poderá facilmente ser invalidada se o método para obtê-la não for correto e puder causar alterações em seu conteúdo. Lembre-se que a simples cópia de um arquivo de um sistema de arquivos montado read-write e sem opção noatime altera a sua data e hora de acesso. 462 Introdução à Computação Forense Entretenimento e Aprendizado 463 18. Clusters e Grids Conceitos Com o aumento da complexidade dos problemas, e o tempo necessário para resolvê-lo, surgiu a necessidade de agrupar vários processadores, distribuindo o trabalho e assim tornando a utilização de computadores factíve. Diversas arquiteturas foram definidas conforme o tipo de problema. Um grid é um sistema computacional distribuido que possui fraco acoplamento. Os processos não se interagem ou interagem muito pouco. Os processadores podem ser heterogêneos e também geograficamente dispersos. Um bom exemplo é o grid do Google que possui cerca de 900 mil computadores distribuídos pelo globo. Um cluster também é um sistema computacional distribuido mas que possui acoplamento alto e com alta interacão entre os processos. O cluster pode ser visto como um sistema único. Os componentes do cluster (chamados nodos) são normalmetne interligados por uma rede local rápida. Há 2 tipos de aplicacão para os clusters: alto desempenho e alta disponibilidade. Um cluster de alto desempenho (simplesmente referido como HPC) distriibui as tarefas entre os processadores dos nodos. Um cluster de alta disponibilidade (simplesmente referino como HA), tem nodos ativos e nodos em hot-standby. No caso de falha de um nodo, seus processos são imediatamente assumidos por um node em standby. 464 Entretenimento e Aprendizado O cluster HA mais simples e formado por 2 nodos. Um nodo é ativo, chamado de primário, e provê servicos aos clienter. O outro nodo, chamado de secundário) fica em standby. Os dados críticos são duplicados continuamente do nodo primário para o nodo secundário. Implementando um cluster HPC Um cluste HPC pode ser criado a partir de computadores comuns interligados através de uma rede rápida (gigabit ou infiniband). Aplicações devem ser desenvolvidas utilizando chamadas a funções de bibliotecas para a comunicação entre suas threads ou processos sendo executados em quaisquer dos nodos do cluster. Uma camada de software rodando em um nodo (Head) gerencia os nodos de processamento e as threads e processos que podem migrar de um nodo para outro conforme critérios de equilíbrio de carga ou disponibilidade de recursos computacionais. O acesso ao cluster é feito por um nodo de login. Entretenimento e Aprendizado 465 Em computadores especiais que possuem memórias compartilhadas, a implementação é mais simples e eficiente. A memória pode ser dividida em blocos com acessos exclusivos a cada bloco ou ter multiplos canais de acesso (e possivelmente por bloco). Abaixo é visto um diagrama simplificado do processador AMD MagnyCours com 12 núcleos. 466 Entretenimento e Aprendizado Implementando um cluster HA Supondo um cluster HA simples de 2 nodos, utilizaremos o DRBD e o Pacemaker para implementá-lo. São utilizados 2 computadores com 2 interfaces de rede cada. Uma interface de rede será utilizada para o sincronismo e o controle do cluster. A outra interface será utilizada para o acesso ao cluster. Além dos IPs para cada interface, definiremos um IP flutuante que será adicionado ao nodo ativo (primário). Cada computador tem seus discos e para os dados críticos podem ser criados volumes (LVM para facilitar a escalabilidade) e que serão duplicados automaticamente. Os volumes deverão ser de tamanhos idênticos. Sugiro não fazer duplicação do sistetma operacional e aplicativos. Em caso de atualização ou instalação de pacotes instáveis (principalmente o kernel), o outro nodo não será afetado e poderá ser promovido a primário mantendo a alta disponibilidade. As interfaces N1 e N2 dos computadores deverm ser de alta velocidade (gigabit) interligadas por um cabo cross-over. Cada nodo tem seu IP (IP1 e IP2) que podem ser utilizados para configuração e manutenção. O IPcluster será o IP flutuante. As estações sempre farão o acesso aos serviços do cluster por este IP. Entretenimento e Aprendizado 467 Devem ser definidas quais informações deverão ser espelhadas automaticamente. Alguns volumes não devem ser espelhados. Por exemplo, o que contém o sistema operacional e seus aplicativos. Analise o caso de uma atualização falha no nodo primário: pode-se comutar p/ um nodo secundário e reparar a atualização. Na partição fictícia à direita, apenas os volumes /home, /data1 e /data2 são bons candidatos à replicação. Os volumes (discos ou partições) que serão redundantes deverão ser idênticos. Isto é, as particões que compõem o volume /home nos discos dos nodos primário e secundário devem ter o mesmo tamanho. DRBD O arquivo de configuração do DRBD é o /etc/drbd.conf. Este arquivo contém sessões que definem o modo de tratamento dos recursos e as definicões dos recursos do cluster. O formato típico da definição de um recurso é como o mostrado abaixo. Os ítens em itálico devem ser substituídos pelos valores reais. { } resource "nomedorecurso" { protocol { A | B | C }}; # Use C para aplicações críticas incon-degr-cmd "comando shell" startup { wfc-timeout timeout de conexão; degr-wfc-timeout timeout; } disk { on-io-error { pass_on | panic | detach }; size tamanho } net { on-disconnect { reconnect | stand_alone | freeze_io }} }; syncer { rate MBytesps; } on nomedonode { device /dev/drbdi; disk volume; address ip_do_nodo; metadisk {{ internal | disco }; } } No exemplo a seguir, considere os nodos nodo1 e nodo2 e o volume /dev/drbd0 criado em ambos os nodos o qual será montado em /data1. 468 Entretenimento e Aprendizado Abaixo é mostrada uma parte do arquivo de configuração do DRBD: # parte do arquivo /etc/drbd.conf resource "data1" { protocol B; incon-degr-cmd "echo !DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f"; startup { wft-timeout 10; degr-wfc-timeout 120;} disk { on-io-error panic; size 10GB; } net { on-disconnect reconnect }; syncet { rate 10M; } on nodo1 { device /dev/drbd0; disk /dev/sda4; address 192.168.1.1:7788; meta-disk internal; } on nodo2 { device /dev/drbd0; disk /dev/sda4; address 192.168.1.2:7788; meta-disk internal; } } A criação do volume em cada nodo é feito normalmente pelo particionador fdisk. Pode-se criar volume LVM ou RAID por software ou hardware. Configurado o arquivo /etc/drbd.conf, inicia-se o serviço drbd (por exemplo, usando rcdrbd start, no openSuSE Linux. Para cada volume criado, cria-se o metadata utilizando a opção create-md do aplicativo drbdadm. No nodo primário, pode-se criar o sistema de arquivos em cada volume, utilizando o dispositivo (/dev/drbdi) e montá-los. O nodo secundário terá seu volume sincronizado automaticamente. Na primeira vez, todos os blocos do volume são sincronizados e processo pode demorar horas dependendo do tamanho do volume e da velocidade do enlace entre os nodos. Entretenimento e Aprendizado 469 Heartbeat O arquivo básico de configuração do hearbeat é o /etc/ha.d/ha.cf. Podem ser configurados os arquivos de log, timeouts, interfaces e forma de comunicação e mudança de função dos nodos. A interface de comunicãção pode ser serial ou ethernet (que pode ser a mesma utilizada pelo drbd). Os nomes dos nodos são listados na opcão node e devem ser os mesmos mostrados com o comando uname -n. No arquivo /etc/ha.d/authkeys são definidos os métodos e as chaves para autenticação dos nodos. No caso de um enlace seguro e dedicado ao heartbeat (e o drbd), pode-se utilizar apenas o CRC, melhorando o desempenho. Em outros casos pode-se definir uma senha SHA1 ou MD5. Os recursos são definidos no arquivo /etc/ha.d/resources, em uma linha o nodo primário preferencial e os recursos que serão comutados na troca da função dos nodos. A sintaxe geral é: nodoprimário { lista de recursos separados por espaço } onde cada ada recurso tem o formato recurso::parâmetro. Os recursos, tratados pelos scripts em /etc/ha.d/resource.d são: IpAddr::ipv4 ou ipv4 drbddisk Filesystem::device::mountpoint::filesystemtype serviço Exemplo: nodo1 192.168.1.5 drbddisk Filesystem::/dev/drbd0::/home::ext3 Filesystem::/dev/drbd1::/data1::ext3 Filesystem::/dev/drbd2::/data2::ext3 apache2 named mysql sendmail ntp 470 Entretenimento e Aprendizado Após o sincronismo, o status do cluster pode ser visto utilizando o script /etc/init.d/drbd status(ou simplesmente rcdrbd status no openSuSE Linux). Iniciando o hearbeat (rcheartbeat start no openSuSE), o cluster está operacional. Ele pode ser habilitado no init. Por exemplo, criando e definindo 3 volumes DRBD (/home, /data1 e /data2), veremos: node1:/etc # rcdrbd status drbd driver loaded OK; device status: version: 8.3.4 (api:88/proto:86-91) GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by phil@fat-tyre, 2009-10-06 14:36:06 m:res cs ro ds p mounted fstype 0:home Connected Primary/Secondary UpToDate/UpToDate B /home ext3 1:data1 Connected Primary/Secondary UpToDate/UpToDate B /data1 ext3 2:data2 Connected Primary/Secondary UpToDate/UpToDate B /data2 ext3 As siglas mostradas são: m : module drbd res : resource cs : connection status ro : role ds : device status p : protocol (dispositivo drbdi) (recurso) (função) Obtendo o status no nodo primário (nodo1), a função Primary é mostrada à esquerda e a do nodo secundário (nodo2), a função Secondary é mostrado à direita. Entretenimento e Aprendizado 471 19. Entretenimento e Aprendizado Linux também é cultura e diversão ! O ambiente operacional GNU/Linux possui também diversos aplicativos para o seu seu entretenimento e aprendizado. Quase todas as distribuições Linux incluem um pacote conhecido com bsd-games que contém programas educativos e jogos em modo texto. Abaixo vemos os conhecidos arithmetic, primes e factor. hmarx@thor:~> arithmetic 7 - 7 = 0 Right! 5 + 0 = 5 Right! 6 - 4 = 2 Right! 10 - 5 = 5 Right! 8 - 3 = 5 Right! 1 + 10 = ❑ hmarx@venus:~> primes 55555 55666 55579 55589 55603 55609 55619 55621 55631 55633 55639 55661 55663 hmarx@venus:~> ❑ hmarx@venus:~> factor 8 8: 2 2 2 111 111: 3 37 1111 1111: 11 101 11111 11111: 41 271 99999 99999: 3 3 41 271 1234321 1234321: 11 11 101 101 ❑ 472 Entretenimento e Aprendizado Entre os jogos do pacote bsd-games, encontramos jogos clássicos da década de 1970 como Colossal Cave Adventure (ou simplesmente Adventure) e o Star Trek (ou simplesmente Trek). No Adventure o jogador teria que utilizar sua imaginação para se localizar em um imensa caverna cheia de passagens, objetos e criaturas com interessantes eventos, navegando por comandos textuais como os de movimento (north, south, east, west) ou pegando/largando objetos (get, drop), entre outros. hmarx@thor:~> adventure Welcome to Adventure!! Would you like instructions ? yes Somewhere nearby is Colossal Cave, where others have found fortunes in treasure and gold, though it is rumored that some who enter are never seen again. Magic is said to work in the cave. I will be your eyes and hands. Direct me with commands of 1 or 2 words. I should warn you that I look at only the first five letters of each word, so you’ll have to enter "northeast" as "ne" to distinguish it from "north". (Should you get stuck, type "help" for some general hints. For information on how to end your adventure, etc., type "info".) This program was originally developed by Will Crowther. Most of the features of the current program were added by Don Woods. Address complaints about the UNIX version to Jim Gillogly ([email protected]). You are standing at the end of a road before a small brick building. Around you is a forest. A small stream flows out of the building and down a gully. east You are inside a building, a well house for a large spring. There are some keys on the ground here. There is a shiny brass lamp nearby. There is food here. There is a bottle of water here. get keys OK get lamp OK ❑ Entretenimento e Aprendizado 473 No jogo Trek, o jogador já dispõe de mapas em modo texto com a posição da nave Enterprise, de bases estelares, estrelas e das naves Klingon. hmarx@venus:~> trek * * * S T A R T R E K * * * Press return to continue. What length game: short What skill game: good Enter a password: hmarx 15 Klingons 2 starbases at 0,1, 0,7 It takes 550 units to kill a Klingon Command: s Short range sensor scan 0 1 2 3 4 5 6 7 8 9 0 . . E @ . . . . . . 0 1 . . . . . . . . . . 1 2 . . . . . . . . . . 2 3 . . . . . . . . . . 3 4 . . . . . . . . * * 4 5 . . . . . . . . . . 5 6 . . . . . . . . . . 6 7 . . . . . . . . . . 7 8 . . . . . . . . . # 8 9 . . . . . . . . . 9 0 1 2 3 4 5 6 7 8 9 Starsystem Elysium I stardate condition position warp factor total energy torpedoes shields Klingons left time left life support 2100.00 GREEN 0,1/0,2 5.0 5000 10 up, 100% 15 8.00 active Command: m Course: 6 Distance: .5 Computer applies full reverse power to avoid hitting the negative energy barrier. A space warp was entered. You are now in quadrant 4,7. It is stardate 2100.22 Command: ❑ O conhecido jogo da forca, hangman, também está presente: ______ | | | O | /| | | | / __|_____ | |___ |_________| Word: interdependence Guess: You got it! Another word? ❑ Guessed: acdefimnoprst Word #: Current Average: Overall Average: 1 5.000 0.000 474 Entretenimento e Aprendizado Em modo gráfico, alguns programas como o xeyes, amor e oneko podem ser classificados como para entretenimento. O xeyes acompanha o movimento do mouse. O amor mostra um objeto ou personagem fixo ou animado sobre uma janela ou barra de tarefas. O oneko faz um gato ou um cachorro perseguir o seu mouse. xeyes O kmahjongg tem um visual mais tridimensional. oneko Entretenimento e Aprendizado 475 O kpat implementa diversos jogos tipo paciência: E o KGoldRunner relembra o velho lodrunner dos computadores Apple-II. 476 Entretenimento e Aprendizado Além de muitos programas educativos e jogos em modo texto, hoje podem ser encontrados milhares em modo gráfico 2D e 3D. O KDE, por exemplo, tem diversos aplicativos em diversas áreas. O ktouch, para o aprendizado de digitação, indica imediatamente quando você comete um erro. Ele calcula também sua velocidade de digitação. Entretenimento e Aprendizado 477 Para as crianças aprenderem a desenhar, existe o TuxPaint que possui diversas ferramentas para desenho e pintura, além de imagens (que podem ser usadas como carimbos) qe podem ter sons associados. Podem ser facilmente adicionadas novas imagens e associá-las a novos sons. O gcompris inclui diversas brincadeiras educativas para crianças. 478 Entretenimento e Aprendizado O kgeography pode ser utilizado no aprendizado de mapas de paises, seus estados e capitais. kgeography Entretenimento e Aprendizado 479 Para o estudo dos elementos químicos e suas propriedades, o kalzium é um aplicativo completo, incluindo cálculos de fórmulas Kalzium Em geometria, há o kig que inclui diversas operações com os elementos planos. kig 480 Entretenimento e Aprendizado Para o aprendizado e projeto de circuitos lógicos e Algebra de Boole, um programa muito interessante é o LogiSim, mostrado abaixo. Ele possui uma biblioteca de componentes e permite simulação de circuitos. Entretenimento e Aprendizado 481 Jogos de ação (3D) Diversos jogos de ação em 3D como os da empresa Id Software (Doom, Heretic, Hexen e Quake) também estão disponíveis para Linux. Heretic Doom Quake 3 482 Entretenimento e Aprendizado O jogos pingus (relembrando o lemmings), o Frozen Bubble e o kasteroids são clássicos em Linux: Pingus Frozen Bubble Após o desligamento errôneo (sem utilizar o comando shutdown), o boot do openSuSE exibe uma tela similar ao do pingus em terra gelada (similar à imagem acima). Uma forma lúdica de informar que o sistema não foi desligado corretamente. O reversi e o kasteoids são também jogos tradicionais: Reversi kasteroids Entretenimento e Aprendizado 483 Diversos jogos de Xadrez, como o 3D chess, e o Brutal Chess estão disponíveis: 3D chess Brutal Chess 484 Entretenimento e Aprendizado Jogos para Windows Mesmo alguns jogos para o sistema operacional Microsoft Windows podem ser executados utilizando o Wine. Abaixo uma das telas do jogo instrutivo The Incredible Machine de 2001: Assim, como já exibia o SuSE Linux desde suas primeiras versões: Have a lot of fun ! Entretenimento e Aprendizado 485 486 Entretenimento e Aprendizado Entretenimento e Aprendizado 487 Bibliografia Livros e outras publicações [AVRITZER] Alberto Avritzer, Dissertação de Mestrado: "Um sistema operacional com suporte para multiprocessamento e tempo compartilhado", DCC-UFMG, 1983. [CRYPT] Neal Koblitz, A course in Number Theory and Cryptograpy, Springer, Washington, USA, 1994. [DNS_BIND] Paul Albitz & Cricket Liu, DNS and Bind - 2nd edition, O’Reilly & Associates, California, USA, 1996. [FMBASTOS] Frederico M. Bastos, Dissertação de Mestrado: "Modelo de Contabilização e Negociação de Preços para Serviços com QoS", DCC-UFMG, 2003. [HMARX] Hélio Marques Sobrinho, Dissertaçao de Mestrado: "Um processador central de 16 bits apropriado para multiprocessamento", DCC-UFMG, 1986. [INTFW] D. Brant Chapman & Elizabeth D. Zwicky, Building Internet Firewalls, O’Reilly & Associates, California, USA, 1995. [LPI101] Emmett Dulaney, LPI: General Linux I - Exam 101, Coriolis Group, Arizona, USA, 2001. [LPI102] Emmett Dulaney, LPI: General Linux II - Exam 102, Coriolis Group, Arizona, USA, 2001. 488 Entretenimento e Aprendizado [MAXSEC1] Anonymous, "Maximum Security", Sams Publishing, USA, 1998. [MAXSEC2] Anonymous, "Linux Maximum Security", Sams Publishing, USA, 2000. [MINIX] Andrew S. Tanenbaum & Al Woodhull, Operating Systems: Design and Implementation - 2nd edition, Prentice-Hall, USA, 2000. [NAG] Olaf Kirch, "Linux Network Administrator’s Guide", SSC, USA, 1994. [PGP] Simson Garfinkel, PGP Pretty Good Privacy, O’Reilly & Associates, , California, USA,1995. [PPP] Andrew Sun, Using and Managing PPP, O’Reilly & Associates, California, USA, 1997. [PRODNS] Ron Aitchson, Pro DNS and BIND, Apress, New York, USA, 2005. [SENDMAIL] Bryan Costales & Erik Allman, Sendmail - 2nd edition, O’Reilly & Associates, California, USA, 1997. [SuSE80APP] SuSE, SuSE Linux 8.0 Applications, SuSE Linux AG, Nuremberg, Germany, 2002. [SuSE80BAS] SuSE Linux AG, SuSE Linux 8.0 Basics, Nuremberg, Germany, 2002. [SuSE80REF] SuSE, SuSE Linux 8.0 Reference, SuSE Linux AG, Nuernberg, Germany, 2002. [TCPADM] Craig Hunt, TCP/IP Network Administration - 2nd edition, O’Reilly & Associates, California, USA,1997. Entretenimento e Aprendizado 489 [UNIXSEC] Simson Garfinkel & Gene Spafford, Practical UNIX & Internet Security - 2nd edition, O’Reilly & Associates, California, USA, 1996. [VPN] Charlie Scott & ali., Virtual Private Networks - 2nd edition, O Reilly & Associates, California, USA, 1999. [XWIN] *, The Definitive Guides to the X Window System, Volumes 0 a 8, O’Reilly & Associates, California, USA. 490 Entretenimento e Aprendizado Sites na Internet http://www.kernel.org Site oficial do kernel Linux, criado por Linus Torvalds http://gnu.org Projeto GNU da Free Software Foundation criado por Richard Stallman http://www.minix3.org Site dedicado ao MINIX de Andrew S. Tanenbaum http://www.linux.org Página oficial do sistema operacional Linux. Há uma lista de diversos aplicativos para o Linux http://linmodems.org Drivers de softmodems (conhecidos também como Winmodems) para o Linux http://www.ora.com Página da editora O’Reilly especializada em livros tecnicos. Possui muitos livros sobre Unix e Linux http://www.suse.de Site original da empresa alemâ SuSE Linux AG, criadora da distribuição SuSE Linux. Atualmente é redirecionada para o site da Novell http://www.vmware.com Os aplicativos de virtualização mais conhecidos e utilizados no mundo Entretenimento e Aprendizado 491 http://www.hercules-390.org http://www.jaymoseley.com/hercules/ Hercules, um emulador das arquiteturas IBM System/370, ESA/390 e zSeries http://sourceforge.net Maior site de projetos Open Source Exemplos: xine.sourceforge.net, bochs.sourceforge.net, ... http://www.linas.org/linux Parte do site de Linas Vepstasmostrando diversas aplicações comerciais do Linux e estudos de caso. http://www.linuxsecurity.com Site sobre aspectos de seguranca em Linux http://www.maplesoft.com Software científicos (como o Maple) da Universidade de Waterloo, Ontario, Canada. http://www.ipv6.org Informações sobre o protocolo IPv6 http://www.ietf.org Site da força tarefa da Engenharia da Internet (Internet Engineering Task Force). É uma comunidade internacional que cuida da evolução da arquitetura da Internet http://www.gnupg.org Implementacão do OpenPGP, Pretty Good Privacy http://pgp.mit.edu Servidor público de chaves PGP do MIT 492 Entretenimento e Aprendizado http://www.faqs.org/rfcs Grande acervo de documentações e padrões, incluindo os RFCs, Request for Comments. Contém links para ISOC, IANA, IAB e outros. http://www.linuxsupport.com.br Dicas de configuração e suporte SuSE Linux http://www.opensuse.org Site da distribuição openSuSE, criada pela Novell Bibliografia 493 Bibliografia Livros e outras publicações [AVRITZER] Alberto Avritzer, Dissertação de Mestrado: "Um sistema operacional com suporte para multiprocessamento e tempo compartilhado", DCC-UFMG, 1983. [CRYPT] Neal Koblitz, A course in Number Theory and Cryptograpy, Springer, Washington, USA, 1994. [DNS_BIND] Paul Albitz & Cricket Liu, DNS and Bind - 2nd edition, O’Reilly & Associates, California, USA, 1996. [FMBASTOS] Frederico M. Bastos, Dissertação de Mestrado: "Modelo de Contabilização e Negociação de Preços para Serviços com QoS", DCC-UFMG, 2003. [HMARX] Hélio Marques Sobrinho, Dissertaçao de Mestrado: "Um processador central de 16 bits apropriado para multiprocessamento", DCC-UFMG, 1986. [INTFW] D. Brant Chapman & Elizabeth D. Zwicky, Building Internet Firewalls, O’Reilly & Associates, California, USA, 1995. [LPI101] Emmett Dulaney, LPI: General Linux I - Exam 101, Coriolis Group, Arizona, USA, 2001. [LPI102] Emmett Dulaney, LPI: General Linux II - Exam 102, Coriolis Group, Arizona, USA, 2001. 494 Bibliografia [MAXSEC1] Anonymous, "Maximum Security", Sams Publishing, USA, 1998. [MAXSEC2] Anonymous, "Linux Maximum Security", Sams Publishing, USA, 2000. [MINIX] Andrew S. Tanenbaum & Al Woodhull, Operating Systems: Design and Implementation - 2nd edition, Prentice-Hall, USA, 2000. [NAG] Olaf Kirch, "Linux Network Administrator’s Guide", SSC, USA, 1994. [PGP] Simson Garfinkel, PGP Pretty Good Privacy, O’Reilly & Associates, , California, USA,1995. [PPP] Andrew Sun, Using and Managing PPP, O’Reilly & Associates, California, USA, 1997. [PRODNS] Ron Aitchson, Pro DNS and BIND, Apress, New York, USA, 2005. [SENDMAIL] Bryan Costales & Erik Allman, Sendmail - 2nd edition, O’Reilly & Associates, California, USA, 1997. [SuSE80APP] SuSE, SuSE Linux 8.0 Applications, SuSE Linux AG, Nuremberg, Germany, 2002. [SuSE80BAS] SuSE Linux AG, SuSE Linux 8.0 Basics, Nuremberg, Germany, 2002. [SuSE80REF] SuSE, SuSE Linux 8.0 Reference, SuSE Linux AG, Nuernberg, Germany, 2002. [TCPADM] Craig Hunt, TCP/IP Network Administration - 2nd edition, O’Reilly & Associates, California, USA,1997. Bibliografia 495 [UNIXSEC] Simson Garfinkel & Gene Spafford, Practical UNIX & Internet Security - 2nd edition, O’Reilly & Associates, California, USA, 1996. [VPN] Charlie Scott & ali., Virtual Private Networks - 2nd edition, O Reilly & Associates, California, USA, 1999. [XWIN] *, The Definitive Guides to the X Window System, Volumes 0 a 8, O’Reilly & Associates, California, USA. 496 Bibliografia Sites na Internet http://www.kernel.org Site oficial do kernel Linux, criado por Linus Torvalds http://gnu.org Projeto GNU da Free Software Foundation criado por Richard Stallman http://www.minix3.org Site dedicado ao MINIX de Andrew S. Tanenbaum http://www.linux.org Página oficial do sistema operacional Linux. Há uma lista de diversos aplicativos para o Linux http://linmodems.org Drivers de softmodems (conhecidos também como Winmodems) para o Linux http://www.ora.com Página da editora O’Reilly especializada em livros tecnicos. Possui muitos livros sobre Unix e Linux http://www.suse.de Site original da empresa alemâ SuSE Linux AG, criadora da distribuição SuSE Linux. Atualmente é redirecionada para o site da Novell http://www.vmware.com Os aplicativos de virtualização mais conhecidos e utilizados no mundo Bibliografia 497 http://www.hercules-390.org http://www.jaymoseley.com/hercules/ Hercules, um emulador das arquiteturas IBM System/370, ESA/390 e zSeries http://sourceforge.net Maior site de projetos Open Source Exemplos: xine.sourceforge.net, bochs.sourceforge.net, ... http://www.linas.org/linux Parte do site de Linas Vepstasmostrando diversas aplicações comerciais do Linux e estudos de caso. http://www.linuxsecurity.com Site sobre aspectos de seguranca em Linux http://www.maplesoft.com Software científicos (como o Maple) da Universidade de Waterloo, Ontario, Canada. http://www.ipv6.org Informações sobre o protocolo IPv6 http://www.ietf.org Site da força tarefa da Engenharia da Internet (Internet Engineering Task Force). É uma comunidade internacional que cuida da evolução da arquitetura da Internet http://www.gnupg.org Implementacão do OpenPGP, Pretty Good Privacy http://pgp.mit.edu Servidor público de chaves PGP do MIT 498 Bibliografia http://www.faqs.org/rfcs Grande acervo de documentações e padrões, incluindo os RFCs, Request for Comments. Contém links para ISOC, IANA, IAB e outros. http://www.linuxsupport.com.br Dicas de configuração e suporte SuSE Linux http://www.opensuse.org Site da distribuição openSuSE, criada pela Novell Glossário 499 Glossário AGP ANSI ARM ARP ASCII ATA BIND BIOS BOOTP CHAP CISC CRISC DDoS DEC DES DHCP Accelerated Graphics Port American National Standards Institute Advanced Risc Machine Address Resolution Protocol American Standard Code for Information Interchange Advanced Technology Attachment (ou IDE) Berkeley Internet Name Domain Basic Input/Output System - Programa normalmente gravado em uma ROM ou Flash que faz a carga e interface de alguns Sistemas Operacionais com o hardware. Bootstrap Protocol Challenge Handshake Authentication Protocol - Protocolo de autenticação de utilizado em PPP que requer uma pergunta e uma resposta Complex Instruction Set Computer - Arquitetura tradicional dos processadores e microprocessadores, com instruções complexas como MUL EAX, [BX+4000] do Intel 80386. Veja também RISC e CRISC Complex/Reduced Instruction Set Computer - Arquitetura mista parte RISC e parte CRISC, utilizada nos processadores Intel Pentium atuais (II, III e IV) Distributed Denial of Service - ataque distribuído causando sobrecarga nos serviços Digital Equipment Corporation - Empresa que projetou o minicomputador PDP, cuja arquitetura ortogonal influenciou muitos dos microprocessadores atuais. Data Encryption Standard - Padrão de criptografia utilizada pelo sistema de senhas padrão do Unix. Veja também MD5 Dynamic Host Configuration Protocol - protocolo de configuração dinâmica de computadores (endereços, nomes, DNS, boot, ...) 500 Glossário DoD DoS DRAM DMA DMZ EBCDIC EISA ESP FAT FIFO GMT GNU HTTP IAB IANA IDE IESG IETF IKE IPC IPsec IPX IRQ ISA Department of Defense - Departamento de Defesa dos Estados Unidos da América Denial of Service - ataque causando sobrecarga nos serviços. Veja também DDoS Dynamic Random Access Memory Direct Memory Access - Acesso direto à Memória DeMilitarized Zone - Zona desmilitarizada Extended Bynary-Coded-Decimal Interchange Code, codificação utilizada em alguns mainframes como o B6700 e a série A da Unisys Extended Industry Standard Architecture Encapsulated Security Payload - protocolo para autenticação e criptografia do IPsec File Allocation Table - Tabela de alocação de arquivos utilizada pelo DOS e Windows First In First Out, também conhecido como PIPE, uma estrutura de dados que implementa uma fila real. Greenwich Mean Time - Horário padrão internacional do meridiano 0, que passa pela cidade de Greenwich. GNU is Not Unix HyperText Transfer Protocol - Protocolo de transferência de hipertexto Internet Architecture Board Internet Assigned Numbers Authority Integrated Disk Electronics - Interface utilizada nos discos padrão do PC. Também conhecida como ATA. Internet Engineering Steering Group Internet Engineering Task Force Internet Key Exchange - protocolo de negociação de chaves e parâmetros de conexão do IPsec. InterProcess Communication Internet Protocol Security Internetwork Packet eXchange Interrupt ReQuest - Sinal de requisição de interrupção para o(s) processador(es) de um computador. Insdustry Standard Architecture Glossário ISAKMP ISOC LDAP LED MD5 MIB MIME MIPS MIPS NBT NCP NetBIOS NFS NMB NSA PAP PATA PC PCI PCMCIA PDP-11 Pixel POP 501 Internet Security Association and Key Management Protocol Internet Society Lightweighty Directory Access Protocol Light Emitting Diode Message Digest 5 - Algoritmo de autenticação e criptografia atualmente muito utilizado em senhas do Unix Management Information Base. Veja também SNMP Multipurpose Internet Mail Extensions - Padrão de encapsulamento de arquivos em e-mails 1Microprocessor without Interlocked Pipeline Stages 2Millions of Instructions Per Second - milhões de instruções por segundo NetBIOS over TCP/IP - Protocolo criado pela Microsoft encapsulando o NMB sobre o TCP/IP para o Windows NT/9x tornando o NetBIOS roteável através de IP Netware Core Protocol Network Basic Input/Output System Network File System - Sistema de arquivos em rede Servidor de nomes para o NetBIOS. National Security Agency - Agência Nacional de Segurança Password Authentication Protocol - Protocolo de autenticação utilizado em PPP através de um usuário e senha. Parallel ATA - veja IDE Personal Computer - Computador pessoal. Termo criado a partir dos microcomputadores e popularizado com o lançamento do microcomputador IBM-PC Peripheral Component Interconnect Personal Computer Memory Card Industry Association Programmed Data Processor - Minicomputador da Digital Equipment Corporation utilizado nas primeiras versões do Sistema Operacional Unix Picture Element - cada ponto na tela representado por n bits, permitindo assim até 2n cores Post Office Protocol 502 Glossário PPP PPTP QoS RAM RARP RIP RISC ROM RPC RPM RSA RT-11 SAS SATA SCSI SGID SMB SMP SMTP SNMP SPOOL SSL SUID SuSE SVGA SWAP URL USB VESA VFAT Point-to-Point Protocol - Protocolo ponto a ponto, muito utilizado tanto em conexões discadas quanto dedicadas Point-to-Point Tunneling Protocol Quality of Service Random Access Memory Reverse Address Resolution Protocol - veja ARP Routing Information Protocol Reduced Instruction Set Computer Read Only Memory - memória apenas de leitura. Remote Procedure Call - chamada remota de procedimento RedHat Package Manager Rivest, Shamir & Adleman - Iniciais dos criadores do esquema de autenticação/criptografia de chave pública Sistema operacional Real Time para o PDP-11 da DEC Serial Attached SCSI - veja SCSI Serial ATA - veja ATA / IDE Small Computer Systems Interface - Interface de discos muito utilizada em servidores e estações profissionais de trabalho Set Group IDentification Server Message Block Symetric Multi Processing Simple Mail Transfer Protocol Simple Network Management Protocol. Veja também MIB Simultaneous Peripheral Operations On-Line Secure Sockets Layer Set User IDentification Software und Systeme Entwicklung (Desenvolvimento de software e sistemas) - Sigla da Empresa alemã criadora da distribuição SuSE Linux Super VGA Área de memória virtual, normalmente em disco Uniform Resource Locator Universal Serial Bus Video Electronics Standards Association Virtual File Allocation Table Glossário XDR VGA WiFi WWW WUXGA WXGA XGA 503 eXternal Data Representation. Veja também RPC Video Graphics Array Wireless Fidelity World Wide Web Wide Ultra Extended Graphics Array Wide XGA eXtended VGA 504 505 Índice Remissivo Índice Remissivo A Andrew S. Tanenbaum ASN.1 389 9 B Backup 108 bunzip2 109 bzcat 109 bzip2 109 compress 110 fita magnética 110 gunzip 109 gzip 109 mt 110 tar 108 unzip 108 zcat 109 zip 108 Bash 42 Expansão de parâmetros 45 history 104 meta-teclas 105 redirecionamento de E/S 111 Separador ; 112 Separador de comandos 112 variáveis 42 Variáveis padrão 43 BGP 389 Boot do Linux 159 configuração do GRUB 166 configuração do LILO 165 Bridges 382 C Calamaris 301 Comandos ajuda help 47 info 48 man 47 algébricos bc 69 expr 68 arquivos basename 103 cat 57 cp 56 dd 106 dirname 103 discos 106 file 102 find 99 head 57 less 73 Índice Remissivo ln 72 locate 99 more 73 mv 71 od 58 patch 59 rm 71 split 107 tail 58 tee 57 touch 72 type 102 updatedb 99 which 102 case 122 diretório cd 54 dirs 55 ls 51 mkdir 53 popd 55 pushd 54 pwd 49 rmdir 53 discos df 90 du 90 hash 48 impressão a2ps 89 lpq 88 lpr 88 lprm 89 pr 88 memória free 91 top 95 permissões 506 chgrp 100 chmod 101 chown 100 processos % 93 at 93 atq 93 atrm 93 bg 93 crontab 94 fg 93 GNU time 97 jobs 93 kill 96 killall 96 nice 96 pidof 92 ps 92 pstree 92 renice 97 sudo 81 time 97 top 95 xargs 98 rehash 48 select 124 sistema top 95 uname 83 terminais setterm 84 stty 85 tty 83 texto . 50 awk 65 cut 74 diff 77 507 diff3 77 echo 49 ex 73 grep 62 join 75 paste 74 read 49 sed 63 sort 76 source 50 strings 60 tr 60 uniq 76 vi 73 wc 59 until 122 usuários finger 79 gpasswd 82 id 79 last 78 newgrp 81 passwd 80 sg 81 su 81 w 78 who 78 Comandos administrativos 125 chfn 130 chsh 130 depmod 149 dmesg 154 edquota 139 fdisk 132 groupadd 128 groupdel 128 groupmod 129 init 34 Índice Remissivo insmod 147 iptraf 231 isapnp 146 lsdev 146 lsmod 147 lspci 144 lsusb 144 mkdosfs 134 mke2fs 133 mkfs 133 mknod 131 mkreiserfs 135 mkswap 135 modinfo 151 modprobe 150 mount 141-142 nmap 231 pnpdump 145 quota 137 quotacheck 140 quotaoff 138 quotaon 137 repquota 138 rmmod 148 rpcinfo 231 rpm 170 atualização de pacotes 174 consulta de pacotes 176 criando pacotes 182 instalação de pacotes 173 remoção de pacotes 175 utilzando o smart 179 utilzando o zypper 178 Índice Remissivo verificação de autenticidade 172 verificação de pacotes 170 setquota 139 snort 231 socklist 231 swapoff 136 swapon 135-136 syslogd 155 ulimit 125 umask 125 umount 143 usbview 145 useradd 126, 128 userdel 128 usermod 129 Comandos básicos 47 Comandos condicionais 120 if/then/elif/then/.../fi 121 if/then/else/fi 120 if/then/fi 120 test 124 Comandos iterativos 122 for 122 while 122 compilação 413 Configuração do kernel 335 Correio eletrônico 308 anti-virus 318 MTA 308 MUA 308 POP 311 Protocolos 311, 313 sendmail 312 Configuração 314 SMTP 311 508 D Depuração ddd 402 gdb 402 kdbg 402 ltrace 403 strace 403 Desenvolvimento gcc 400 kdevelop 401 ldd 402 qtdesigner 401 Diretório 22 Dispositivos 27 DNS 247 BIND 252 Configuração 264 Registros 252 Segurança 267 Ferramentas dnsdomainname 269 dnsquery 270 nslookup 269 Ferramentas de diagnóstico 269 dig 270 dnsquery 270 host 270 named-xfer 271 traceroute 270 Lendo nomes de domínios 250 Resource Record 253 RR 253 Servidores de Nomes 251 Domínios 245 DNS 247 LDAP 278 509 Índice Remissivo NIS 272 entidades getty 35 GPL 1 E Emuladores dosemu 406 pose 409 simh 410 vmware 408 wine 406-407 H Hard link 22 hardware 378 Histórico - do Unix ao Linux 8 Histórico da Computação 3 hot-swap 15 Hubs 382 F Firewall 349 filtros 350 Implementação 351 ipchains 352 iptables 355 NAT 351 SuSEfirewall 358 Firewalls 395 Formato de arquivos /etc/passwd 126 /etc/shadow 127 /etc/syslog.conf 152 crontab 94 inittab 32 FSF 1 FTP 319 Clientes 319 Configuração 319 Servidores 319 Funcionalidades 382 fuser 403 I G Gerenciamento 383 Áreas funcionais ISO aspectos 384 atribuições 385 385 383 ICMP 388 IGMP 388 inetd 212 init 31 inode 18 inodo 18 Instalacão do Linux 160 Instalacão de Aplicativos 168 Instalacão do Linux 157 Instalação física incêndio 380 temperatura 380 umidade 380 Interconectividade 328, 333-334 Apple Macintosh 334 Netware ncpfs 333 Internet estatísticas 247 Órgãos reguladores 249 Internet e Intranet 196, 243 Interpretador de comandos 39 ipcs 403 Índice Remissivo 510 L LDAP 278 Definições 278 Esquemas 279 Hierarquia 279 LDIF 280 servidor 281 utilização 285 LILO 159 Linus Torvalds 9 login shell 35 Logs 397 lsof 403 M make 414 Mensagens do sistema Linux 152 Metacaracteres 41 MIB 389 Minix 9 Modems 382 Módulos de dispositivos e serviços 144 mount point 20 MTBF 387 MTTF 387 MTTR 387 MULTICS 7 Multitarefa 15 Multiusuário 15 N NIS 272 cliente/servidor 272 Configuração 272 domainname 274 ypcat 276 ypchfn 275 ypchsh 275 ypdomainname 274 ypmatch 276 yppasswd 275 yppasswdd 273 ypwhich 274 O openSuSE 10 Operadores condicional && 121 || 121 Execução condicional 121 Expressões aritméticas 116 Expressões condicionais 118 Grupo de comandos 114 Pipeline 112 Processos em background 113 & 113 Processos em subshell 114 substituição de comandos 115 | 112 OSPF 389 Outros aplicativos 395 P Pacotes RPM 417 path 22 PDP-11 8 peopleware 378 Plakalkül 4 POSIX 16 PPP 321 Conexão ADSL 326 Conexão discada 322 Conexão por demanda 325 511 prompt 39 Protocolo PPP 320-321 Configuração 321 Protocolos e métodos 387 Índice Remissivo Servidor HTML Apache 287 Configuração 287, 296 controle de acesso 291 logs de acesso 290 R métodos 291 Redes em Unix 207 parâmetros globais 288 IPv4 217 servidor principal 289 Classes 218 sites virtuais 294 Endereços especiais proxy 298 218 squid 287 Endereços privados webalizer 297 219 Servidor WEB 287 Roteamento 222 Sessões 36 IPv6 239 Sessões remotas 320 Subclasses 221 SSH 320 TCP/IP 207 Xterminals 320 Ferramentas 224 Shell 39 Redirecionamento 237 Sistema de arquivos 18 Serviços 211 Sistemas de arquivos Richard Stallman 1 /proc 14, 25 Roteadores 382 SLES rpcinfo 403 SuSE Linux Enterprise 11 SMART 17 S SMP S.M.A.R.T. 17 Symetric Multi Processing 13 Samba 330 SNMP 389 Segurança 341 Aplicativos 392 Ataques 346 snmpdelta 392 Cavalos de Tróia 342 snmpget 392 Ferramentas 347 snmpinform 392 PGP 368 snmpnetstat 392 Virus 345 snmpset 392 VPN 362, 365, 374, 377 snmpstatus 392 configuração 364 snmptable 392 FreeSwan 364 snmptest 392 Sendmail snmptranslate 392 Configuração manual 317 snmptrap 392 Índice Remissivo 512 squidGuard 307 super usuário 36 SuSE ix Switches 382 Symbolic link 22 T TCP/IP Ferramentas arp 229 ethereal 234 geoiplookup 230 ifconfig 224 ip 227 ipcalc 230 netstat 228 ping 225 rarp 229 route 226 tcpdump 231 traceroute 231 xtraceroute 234 Tratamento de sistemas de arquivos 131 X X Window 185 desktop manager 186 Gerenciadores de janelas afterstep 193 amiwm 193 CDE 193 fvwm 193-194 fvwm95 193 Gnome 193 icewm 194 KDE 193 mlvm 193 193 qvwm 194 twm 194 windowmaker 194 Protocolo X11 185 window manager 186 desktops virtuais 186 X server 186 XFree86 189, 191 SuperProbe 190 XF86Setup 190 xinetd 213
Documentos relacionados
linux passo a passo
· É popular. É executado na arquitetura barata do PC Intel 386/486/Pentium e suporta uma grande variedade de placas de vídeo, placas de áudio, drives de CD-ROM, drives de discos e outros dispositiv...
Leia mais