Lm 90 ce

Page 1


Obrigado, ABES

Expediente editorial Diretor Geral Rafael Peregrino da Silva rperegrino@linuxmagazine.com.br

Kemel Zaidan kzaidan@linuxmagazine.com.br Editora de Arte Larissa Lima Zanini llima@linuxmagazine.com.br Estagiário Felipe Brumatti Sentelhas fsentelhas@linuxmagazine.com.br Colaboradores Alexandre Borges, Alexandre Santos, Amit Saha, Augusto Campos, Brian Proffitt, Charly Kühnast, Dan Frost, Dave MacLean, David J. Dodd, Erik Bärwaldt, Frank Hofmann, Jeff Layton, Jon ‘maddog’ Hall, Klaus Knopper, Kristian Kissling, Kurt Seifried, Zack Brown. Tradução Luciano Hagge Dias, Rodrigo Garcia, Sebastião Luiz da Silva Guerra. Revisão Ana Carolina Hunger. Editores internacionais Uli Bantle, Andreas Bohle, Jens-Christoph Brendel, Hans-Georg Eßer, Markus Feilner, Oliver Frommel, Marcel Hilzinger, Mathias Huber, Anika Kehrer, Kristian Kißling, Jan Kleinert, Daniel Kottmair, Thomas Leichtenstern, Jörg Luther, Nils Magnus. Anúncios: Rafael Peregrino da Silva (Brasil) anuncios@linuxmagazine.com.br Tel.: +55 (0)11 3675-2600 Penny Wilby (Reino Unido e Irlanda) pwilby@linux-magazine.com Amy Phalen (América do Norte) aphalen@linuxpromagazine.com Hubert Wiest (Outros países) hwiest@linuxnewmedia.de Diretor de operações Claudio Bazzoli cbazzoli@linuxmagazine.com.br Na Internet: www.linuxmagazine.com.br – Brasil www.linux-magazin.de – Alemanha www.linux-magazine.com – Portal Mundial www.linuxmagazine.com.au – Austrália www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linuxpromagazine.com – América do Norte Apesar de todos os cuidados possíveis terem sido tomados durante a produção desta revista, a editora não é responsável por eventuais imprecisões nela contidas ou por consequências que advenham de seu uso. A utilização de qualquer material da revista ocorre por conta e risco do leitor. Nenhum material pode ser reproduzido em qualquer meio, em parte ou no todo, sem permissão expressa da editora. Assume-se que qualquer correspondência recebida, tal como cartas, emails, faxes, fotografias, artigos e desenhos, sejam fornecidos para publicação ou licenciamento a terceiros de forma mundial não-exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado. Linux é uma marca registrada de Linus Torvalds. Linux Magazine é publicada mensalmente por: Linux New Media do Brasil Editora Ltda. Rua São Bento, 500 Conj. 802 – Sé 01010-001 – São Paulo – SP – Brasil Tel.: +55 (0)11 3675-2600 Direitos Autorais e Marcas Registradas © 2004 - 2012: Linux New Media do Brasil Editora Ltda. Impressão e Acabamento: IBEP Gráfica. Atendimento Assinante www.linuxnewmedia.com.br/atendimento São Paulo: +55 (0)11 3675-2600 Rio de Janeiro: +55 (0)21 3512 0888 Belo Horizonte: +55 (0)31 3516 1280 ISSN 1806-9428

Linux Magazine #90 | Maio de 2012

Impresso no Brasil

Em seu livro I, Candidate for Governor: And How I Got Licked, publicado em 1935 , o escritor norte-americano Upton Sinclair (1878 – 1968) escreveu: “É difícil conseguir que um homem compreenda alguma coisa, quando seu salário depende dele não compreendê-la”. As mais novas declarações de representantes da Associação Brasileira das Empresas de Software (ABES), da Federação Nacional da Informática (Fenainfo) e da Associação das Empresas Brasileiras de Tecnologia da Informação (Assespro), a respeito do Software Livre, bem como os ataques realizados contra o Portal do Software Público, com certeza se encaixam nessa categoria. Está certo que essas organizações estão aí para defender os interesses da velha indústria de software (proprietário), mas declarações como “o modelo de software livre não produz inovação, demanda mais mão de obra, remunera menos toda a cadeia produtiva, não é autossustentável e seria praticamente inexistente sem o governo como seu protagonista”, proferidas pelo presidente da ABES, Gerson Schmitt, são uma carreata de mentiras deslavadas e o atestado de uma estreiteza de visão de mercado tão monumental, que denunciam o propósito precípuo de proteger o próprio “queijo”. Segundo a consultoria IDC, o Software Livre é “a tendência mais significativa, em abrangência e de longo prazo, que a indústria de software tem visto desde o início de 1980”. “O uso de Software Livre além do Linux é pervasivo, abrangendo mais de três quartos das organizações em todo o mundo, e se estendendo a centenas de milhares de projetos”, declarou o vice-presidente global de pesquisas de software da IDC, Dr. Anthony Picardi. Isso foi em 2006, ou seja, na era pré-Android e pré-Facebook. A Red Hat ainda não tinha quebrado a barreira do bilhão de dólares em faturamento, como aconteceu em março deste ano. Atualmente, não há como conceber tecnologia sem Software Livre. Como Jim Zemlin, diretor executivo da Linux Foundation, escreveu recentemente em seu blog, o Software Livre cria um círculo virtuoso centrado em inovação e baseado no compartilhamento do desenvolvimento. Falando somente de Linux, quando o Facebook contribui com código para tornar seus data centers mais eficientes, a Red Hat se beneficia. Quando a Red Hat contribui com código para melhorar sistemas de arquivos, fabricantes de sistemas móveis se beneficiam. Quando estes, por sua vez, contribuem com código para reduzir consumo de energia em seus sistemas, os custos de refrigeração de supercomputadores são reduzidos. Quando usuários desses sistemas de alto desempenho contribuem com código para torná-los ainda mais rápidos, os sistemas que equipam 9 de 10 bolsas de valores em todo o mundo tornam-se capazes de processar transações de modo mais eficiente, naquilo que se convencionou chamar de retroalimentação positiva que, no caso do Linux e do Software Livre, só faz acelerar. Assim, agradeçamos a ABES & Cia. por chamar, mais uma vez, a atenção do público para o Software Livre. Como escreveu o filósofo e político anglo-irlandês Edmund Burke (1729 – 1797), “aquele que nos combate, fortalece nossos nervos e aguça nossas habilidades. Nosso oponente é nosso colaborador.” ■

EDITORIAL

Editores Flávia Jobstraibizer fjobs@linuxmagazine.com.br

Rafael Peregrino da Silva Diretor de Redação

3


ÍN ÍNDICE NDICE

CAPA No mundo da nuvem

31

O universo da computação em nuvem começou a fazer parte do univeso diário de profissionais e usuários domésticos. Você está preparando para olhar o mundo lá de cima? Fábrica de appliances

32

O BoxGrinder, ferramenta apoiada pela Red Hat, auxilia no desenvolvimento de appliances virtuais para instalação de uma plataforma de serviços em nuvem. Desenvolva suas próprias imagens de máquinas virtuais com esta poderosa ferramenta.

Feitiço na nuvem

36

Um usuário típico não precisa se preocupar com os serviços de cloud do Ubuntu. Mas o quê, exatamente, programas com nomes curiosos como juju, de fato, fazem?

Na medida certa

42

Números podem enganar. Tenha a certeza de que está olhando para os números certos quando mede o desempenho do seu servidor.

4

www.linuxmagazine.com.br


Linux Magazine 90 | ÍNDICE

REDES

COLUNAS Klaus Knopper

08

Augusto Campos

10

Charly Kühnast

12

Alexandre Borges

14

Zack Brown

16

Kurt Seifried

18

Compartimentado

52

NOTÍCIAS Geral

22

➧ Falha de segurança no OpenSSL do interpretador ASN1 ➧ Desenvolvimento do systemd segue acelerado

CORPORATE Notícias

24

Cedo ou tarde, cada cluster desenvolve uma infinidade de ferramentas e bibliotecas para aplicativos ou para criá-los. Então, como você lida com situações em que precisa mudar o conjunto de ferramentas ou aplicativos? Tente os módulos de ambiente.

➧ Linux New Media do Brasil lança a CloudConf 2012 Piscina envenenada

➧ Dualtec ingressa na comunidade OpenStack

58

➧ Fundação Apache ganha três novos patrocinadores ➧ Amazon Web Services anuncia loja online de aplicativos no Brasil Entrevista com Linus Torvalds

26

Coluna: Jon “maddog” Hall

28

Coluna: Alexandre Santos

30

ANDROID Não fique boiando

45

Os invasores contam com o envenenamento de cache ARP para esconder a sua presença em uma rede local. Vamos mostrar algumas ferramentas que um invasor pode usar para envenenar o cache ARP e reunir informações sobre a sua rede. Pesos pena

62

O Kexi e o Glom visam criar bancos de dados leves e robustos. Saiba o que essas duas ferramentas podem fazer por você. Charme automatizado

68

O Android é uma das mais poderosas forças na indústria de smartphones, e tem um futuro promissor. A fim de conhecer um pouco mais sobre a plataforma, do que ela é capaz e como você pode tirar proveito dela, basta ler nosso artigo.

TUTORIAL Reboot? Nunca mais!

72

Seus servidores não podem ficar fora do ar e cada manutenção, mesmo que planejada, causa enormes transtornos a seus clientes? Conheça o Ksplice e dê adeus aos seus problemas. Multitalentos Os usuários de Linux têm à sua escolha mais de duzentas imagens ISO com distribuições completas disponíveis na Internet. Se você gosta de experimentar distribuições, experimente o MultiSystem, aplicativo que permite que você as armazene em um dispositivo remóvível.

Linux Magazine #90 | Maio de 2012

74

Goste ou não, o DevOps está aí para ficar e as exigências da computação distribuída e na nuvem estão trazendo uma série de novas ferramentas para ajudar programadores e administradores a gerenciar esses sistemas em constante mudança.

SERVIÇOS Editorial

03

Emails

06

Linux.local

78

Preview

82

5


Coluna do Augusto

COLUNA

Debian agora é parte da OSI Apesar da definição de Código Aberto ter sido influenciada pelo Debian, só agora a distribuição passou a integrar a OSI. O porquê você descobre ao ler a coluna do Augusto desse mês.

A

Open Source Initiative (OSI) foi fundada em 1998, logo após a abertura de código do Netscape Navigator, que viria a dar origem ao projeto Mozilla em sua forma atual. O objetivo inicial, nas palavras de um diretor da organização, era defender essencialmente o mesmo modelo de desenvolvimento proposto pelo movimento do Software Livre, mas com uma atitude menos direcionada ao confronto, e mais atenta a argumentos pragmáticos, o que seus fundadores consideravam possibilitar um maior poder de atração entre os desenvolvedores corporativos. Seus afiliados incluem nomes de peso na comunidade, como a própria Fundação Mozilla, KDE, Creative Commons, Linux Foundation, FreeBSD, Fundação Apache, entre outros. E a partir de março, mais um projeto consistente e de longa data juntou-se ao grupo: o Debian. Embora previamente tenham trilhado caminhos distintos, pontos de contato entre os dois projetos não

Os afiliados da OSI incluem nomes de peso na comunidade, como a própria Fundação Mozilla, KDE, Creative Commons, Linux Foundation, FreeBSD, Fundação Apache, entre outros. E a partir de março, mais um projeto consistente e de longa data juntouse ao grupo: o Debian. 10

faltam, a começar pelo co-fundador da OSI, Bruce Perens, que foi o primeiro líder do projeto Debian após o mandato de seu próprio fundador, Ian Murdock. Outro importante ponto em comum é a definição que ambas as organizações adotam sobre os softwares que são objeto de sua atenção: a Open Source Definition (definição de código aberto), contendo 10 critérios que precisam ser satisfeitos para que um software seja considerado Open Source, é assumidamente baseada na definição de software livre adotada previamente pelo projeto Debian. Sob este enfoque, é fácil considerar natural a presença oficial do Debian no âmbito da OSI, mas vale notar que há pontos em que as filosofias das duas entidades não são tão próximas assim, o que têm raízes históricas: o patrocinador inicial do Debian foi o projeto GNU, da Free Software Foundation – ponto central do mesmo movimento e cujas filosofia e métodos a OSI busca oferecer uma alternativa. Mas os pontos e interesses em comum são mais fortes do que as diferenças, e no comunicado de 30 de março, que anunciou a novidade, o projeto Debian destacou, já na abertura, que um interesse compartilhado entre as entidades é encorajar o Software Livre. Uma razão bastante pragmática foi apresentada para explicar a decisão de unir esforços: o Debian se considera perfeitamente apto a encarar os desafios técnicos em seu caminho, mas valoriza o trabalho que a OSI vem fazendo em questões políticas e jurídicas, e assim trabalharão em conjunto. A consolidação é bem-vinda, e torço para que o exemplo de união entre grupos que têm tanto em comum entre si mas, às vezes, são percebidos como antagonistas, se espalhe e multiplique! ■ Augusto César Campos é administrador de TI e, desde 1996, mantém o site BR-linux.org, que cobre a cena do Software Livre no Brasil e no mundo.

www.linuxmagazine.com.br


COLUNA

Agora você tem o controle sobre o desempenho do seu negócio. Gratuitamente . *

Compras

Finanças

Estoques

NF-e

Vendas Fornecedores Clientes

ERP – SISTEMA DE GESTÃO

Solução completa hospedada em nuvem (Cloud Computing)

* Verificar termos e condições de usso no site.

Linux Magazine #90 | Maio de 2012

A micro e pequena empresa ganha uma solução de classe mundial de sistemas de gestão ERP no modelo comercial com a melhor relação custo/benefício. O Kontroller dispensa aquisição de hardware, licenças de software, técnicos de suporte ou sistema de backup. Garante alta disponibilidade e oferece fácil acesso via browser.

Saiba mais em: www.vectory.com.br/kontroller +55 11 3104 6652

SOFTWARE

13


Coluna do Alexandre Borges

COLUNA

Sequestro de sessão Alexandre Borges comemora em grande estilo seu aniversário de 3 anos como colunista da Linux Magazine e presenteia o leitor com o funcionamento do sequestro de sessões web.

N

as minhas últimas colunas, andei escrevendo sobre criptografia, que é, essencialmente, um assunto ligado à segurança. Então vou continuar nesta linha e falar sobre algo muito interessante: session hijacking (sequestro de sessão). O que é o sequestro de uma sessão? De maneira resumida, é a possibilidade de um cracker “sequestrar a sessão” entre dois computadores através do roubo do identificador de sessão (session ID) usado entre estas duas máquinas. O início é muito similar ao TCP hijacking, quando o cracker toma (ou sequestra) a sessão TCP entre duas máquinas o que, infelizmente, é possível por causa de uma falha do protocolo TCP e, pelo fato preponderante de que, na maior parte das vezes, a autenticação somente ocorre no início de cada sessão. Espere aí: isto é spoofing? Não. Spoofing é iniciar uma sessão com uma máquina ou site, se passando por outro usuário. Hijacking é tomar uma sessão já ativa onde, provavelmente, o usuário já efetuou autenticação. Embora este ataque de sequestro de sessão seja sofisticado, ele é muito simples de se implementar por diversas razões: pela falha inerente do próprio protocolo TCP, porque grande parte da comunicação entre duas máquinas não é criptografada; pelo fato de a maioria dos sites usarem sessions IDs muito pequenos e previsíveis; pelo frequente uso de sessions IDs (ou cookies que os contêm) sem período de expiração; ou pela ausência de qualquer outro controle de invalidação destes sessions IDs. Por que o session ID é tão valioso em uma comunicação pela web? Simples: porque uma vez que o cracker esteja com a posse deste, poderá fazer o que desejar no site que o usuário está visitando, como se fosse o próprio usuário. Isto é possível posto que a interceptação ocorreu antes do login e o website

14

não gerou um novo session ID após a autenticação. Então, qual é o cenário geral no qual ocorre este ataque? Novamente, de forma simplificada, o cracker precisa, de alguma maneira, estar no meio da comunicação entre a vítima e o site e depois monitorar os pacotes enviados de um lado para o outro a fim de conseguir o session ID, desconectar o usuário do site e, por fim, assumir a sessão que ele possuía (como se fosse o próprio usuário) e, daí para frente, não há mais limitações quanto ao que pode ser feito. O leitor irá perguntar: é difícil, então, obter estes sessions IDs resultantes da comunicação com um site? O que eu digo é que fácil não é, todavia o cracker tem algumas alternativas para contornar estes obstáculos. Uma das opções é roubar o session ID da comunicação da sua máquina com o site. Para realizar esta ação existem diversas técnicas, como: a) o uso de trojans (onde o uso de um antivírus, antispy ou mesmo um treinamento pode bloquear este mecanismo); b) através de um ataque por Cross Site Scripting (XSS) onde, para lembrar o leitor, é possível executar um código malicioso no cliente (neste caso, roubando o session ID e enviando para o cracker), mas que foi injetado em um site qualquer; c) através da interceptação dos dados usando algum tipo de sniffer (como o Wireshark); d) tentando usar o cabeçalho de referência (http refereer) do protocolo HTTP onde o cracker pode tentar enganar o usuário para que ele clique em algum link que leve a vítima para um site sob o domínio do cracker; e) lançando mão de um ataque Man-in-the-Middle, onde o cracker se interpõe entre a vítima e o site fa-

www.linuxmagazine.com.br


zendo com que toda a comunicação passe por sua máquina para depois ser direcionada ao site de destino. Se a opção de roubar o session ID falhar, o cracker pode tentar inferir o session ID tentando advinhar seu mecanismo de geração (principalmente quando este session ID é pequeno). Isto é relativamente fácil de ser feito capturando diversos sessions IDs e fazendo uma análise para verificar se existe algum padrão de criação destes. Se não for possível fazer bom uso dos recursos anteriores (roubo ou inferência do session ID), o cracker pode dispor de métodos de força bruta para consegui-lo. Falhou? Outro ataque que permite transpor esta dificuldade é o Session Fixation Attack que, ao invés de roubar o session ID, define qual será utilizado pelo usuário e, uma vez a autenticação tendo sido feita no website, o cracker usa este mesmo session ID para fazer o que desejar como se fosse o usuário real. É simples executar este procedimento? Não, pois o site precisa ser vulnerável a este tipo de exploração e, o cracker necessita ainda entender qual é o padrão de geração destes sessions IDs.

Quais são as possíveis medidas preventivas contra este tipo de ataque? Cito algumas: transferir os cookies (que incluem o session ID) de maneira segura (usando o protocolo HTTPS) para evitar a interceptação dos dados; gerar um novo session ID após a autenticação do usuário; gerar sessions IDs de maneira aleatória e com bom comprimento; reduzir a vida útil de um session ID (ou cookie) ou mesmo invalidá-lo após o usuário realizar o logout; fazer uso de um método de autenticação mais forte como Kerberos ou, no caso de uma comunicação empresarial, fazer uso de VPNs. Como o leitor pôde perceber, estes conceitos de segurança são fascinantes e eu pretendo explorá-los melhor nas próximas colunas. Aliás, estou completando três anos nesta coluna e espero que neste período você tenha aproveitado alguma coisa dos meus artigos. Até o mês que vem!. ■ Alexandre Borges (alex_sun@terra.com.br) é instrutor independente e ministra regularmente treinamentos de tecnologia Oracle (áreas de Solaris, LDAP, Cluster, Containers/OracleVM, MySQL, e Hardware), Symantec (Netbackup, Veritas Cluster,Backup Exec, Storage Foundation e SEP) e EC-Council (CEH e CHFI), além de estar sempre envolvido com assuntos relacionados ao kernel Linux.

Já chegou ao Brasil a maior revista alemã de informática e tecnologia ogia

computação e tecnologia Adquira o seu exemplar nas melhores bancas ou pelo site

www.lnm.com.br/shopping

Linux Magazine #90 | Maio de 2012

15


Matéria | SEÇÃO

Computação em nuvem

CAPA

No mundo da nuvem O universo da computação em nuvem começou a fazer parte do univeso diário de profissionais e usuários domésticos. Você está preparado para olhar o mundo lá de cima? por Flávia Jobstraibizer

A

ssunto presente na conversa da maioria dos profissionais – e até mesmo de usuários domésticos – da área de TI, a computação em nuvem (cloud computing) já é uma realidade no dia a dia de cada um de nós. Emails totalmente online, sem a necessidade de usar um cliente local, armazenamento de arquivos, acessíveis de qualquer lugar do mundo e até mesmo usar o seu sistema operacional na nuvem. Hoje em dia, tudo é possível. Até pouco tempo atrás, a computação em nuvem era mais um conceito abstrato do que uma tecnologia palpável. Vale lembrar ainda que o alto custo do início da sua era, tornava o interesse na tecnologia pequeno e a demanda baixa. Com o advento da redução do custo dos links de Internet, a melhoria na forma do armazenamento de informações e as novas e melhores tecnologias de virtualização de sistemas e ambientes, a computação em nuvem começou a fazer parte do nosso cotidiano. Quem não tem uma pasta de músicas hospedada na nuvem? Seja em serviços como Dropbox, Ubuntu One ou até mesmo usando a nuvem de um fabricante de celular, como o Motorola Motoblur? Para empresas, a computação em nuvem é ainda mais importante, pois engloba tanto a disponibilização facilitada de serviços para qualquer usuário, como também diminui os custos com manutenção de equipamentos físicos, energia elétrica, licenças de software – quando necessárias – e até mesmo mão de obra, pois é possível criar modelos de ambientes que podem ser replicados para uso futuro. Grandes provedores de serviços de nuvem estão vindo para o Brasil, trazendo soluções, produtos e serviços orientados a este novo modelo de negócios, garantindo que os preços continuem acessíveis e que novidades sejam possíveis.

Linux L Linu inu nuxx Magazi nu Magazine zine ne #XX XX | Mês Mê d de e2 200X X

Este mercado está alimentando ainda um grande repositório de informações, com eventos voltados especificamente para este tema. É o caso da CloudConf 2012, em sua primeira edição no Brasil e que acontecerá nos dias 07 e 08 de agosto. Principal conferência de computação em nuvem do país, A CloudConf virá trazendo todos os temas relevantes do mundo da cloud computing, com muita informação, propriedade e profundidade. Aproveite esta onda de nuvens e fique ligado! ■

Matérias de capa Fábrica de appliances

32

Feitiço na nuvem

36

Na medida certa

42

31 3 1


REDES

REDES | Módulos de ambiente em clusters

Módulos de ambiente em clusters

Compartimentado Cedo ou tarde, cada cluster desenvolve uma infinidade de ferramentas e bibliotecas para criar ou gerenciar aplicativos. Então, como você lida com situações em que precisa mudar o conjunto de ferramentas ou aplicativos? Tente os módulos de ambiente. por Jeff Layton

Q

uando as pessoas começam a usar clusters, tendem a ficar com qualquer compilador e a biblioteca MPI (Message Passing Interface) que veio com o cluster quando ele foi instalado. Conforme os usuários ficam mais à vontade com o cluster, utilizando os compiladores e usando as bibliotecas MPI, eles podem começar a olhar ao redor em busca de outras opções: poderiam outros compiladores melhorar o desempenho da máquina? Da mesma forma, essas pessoas podem começar a olhar para outras bibliotecas MPI: será que elas podem ajudar a melhorar este desempenho? Há as outras bibliotecas MPI, ferramentas que podem tornar as coisas mais fáceis? Talvez ainda mais importante, essas pessoas gostariam de instalar a próxima versão dos compiladores ou bibliotecas MPI para que possam testá-las com o seu código. Então, essas questões forçam outra pergunta: como você pode ter múltiplos compiladores e múltiplas bibliotecas MPI no cluster ao mes-

52

mo tempo e não as deixar confusas? Você pode fazer isso da maneira mais difícil, ou pode fazer da forma mais fácil com Módulos de Ambiente.

A maneira difícil Se você quer mudar seu compilador ou bibliotecas – ou basicamente qualquer coisa relacionada com seu ambiente – pode ser tentado a mudar seu $PATH no arquivo .bashrc (se você estiver usando o Bash) e, então, fazer logout e login novamente sempre que precisar mudar o seu compilador/combinação MPI. Inicialmente, isso parece um sofrimento, e é, mas funciona até certo ponto. No entanto, ele não opera na situação em que você deseja executar vários trabalhos, cada um com um diferente compilador/combinação MPI. Por exemplo, suponha que eu tenha um trabalho utilizando compiladores GCC 4.6.2 [1] com Open MPI 1.5.2 [2], então eu tenho um GCC 4.5.3 e MPICH2 [3]. Se eu tenho dois trabalhos na fila ao mesmo tempo, como posso controlar o meu arquivo .bashrc

para assegurar que cada trabalho tem o $PATH correto? A única maneira de fazer isso é limitar a um trabalho na fila de cada vez. Quando o trabalho for concluído, eu posso mudar o meu .bashrc e começar um novo trabalho. Como você está usando um compilador/combinação MPI diferente do outro em uma fila, até mesmo para algo tão simples como o desenvolvimento de código, é preciso prestar atenção quando o trabalho for executado para garantir que o seu .bashrc corresponderá ao seu job.

A maneira mais fácil Uma maneira muito melhor de lidar com compilador/combinações MPI é a utilização de Módulos de Ambiente [4]. (Tenha cuidado para não confundir “módulos de ambiente” com “módulos do kernel.”) Segundo o site, “O pacote de módulos de ambiente provê a alteração dinâmica do ambiente de um usuário via modulefiles.” Embora isso possa não fazer a terra tremer, na verda-

www.linuxmagazine.com.br


Módulos de ambiente em clusters | REDES

de é um salto quântico para a utilização de múltiplos compiladores/ bibliotecas MPI. Mas, você pode usá-lo para mais do que isso, o que vou falar mais adiante. Os módulos de ambiente podem ser utilizados para alterar ou modificar as variáveis de ambiente como $PATH, $MANPATH, $LD_LIBRARY_LOAD e outras. Por conta da maioria dos scripts de trabalho para gestão de recursos, tais como LSF [5], PBS-Pro [6], e MOAB [7], serem realmente scripts em Shell, você pode incorporar módulos de ambiente nos roteiros para definir o $PATH apropriado para o seu compilador/combinação MPI, ou quaisquer outras variáveis de ambiente que um aplicativo exija para trabalhar. O modo de instalar módulos de ambiente depende de como o cluster foi feito. Você pode compilar a partir da fonte (quadro 1), ou você pode instalá-lo a partir do seu gerenciador de pacotes. Apenas certifique-se de procurar por Módulos de Ambiente (module files).

Usando módulos de ambiente Para começar, vou assumir que os Módulos de Ambiente estão instalados e funcionando corretamente, assim você pode testar algumas das opções normalmente usadas. Neste artigo, vou usar alguns exemplos do TACC [8]. A primeira coisa a verificar é se os módulos estão disponíveis para você usando o comando module avail

Este comando (listagem 1) lista os módulos de ambiente disponíveis. Você notará que o TACC tem um número muito grande de possíveis módulos que oferecem uma gama de compiladores, bibliotecas MPI e combinações. Um número de aplicativos também aparece na lista. Você pode verificar quais módulos estão “carregados” em seu ambiente usando a opção list com o comando module:

Linux Magazine #90 | Maio de 2012

$ module list Currently Loaded Modulefiles: 1) Linux2) intel/11.1 3) mvapich2/1.4 4) sge/6.2u3 5) cluster 6) TACC

Isso indica que quando logar, vou ter seis módulos já carregados para mim. No entanto, se eu quiser usar quaisquer módulos adicionais, tenho que carregá-los manualmente (listagem 2). Para carregar aqueles que você quer, é possível, simplesmente, copiar e colar a partir da lista de módulos disponíveis. (É isso que eu faço, o que torna as coisas mais fáceis) Ao carregar um módulo, você apenas mudará as variáveis de ambiente definidas para esse módulo. Normalmente, são elas $PATH, $MANPATH, e $LD_LIBRARY_LOAD. Para descarregar ou remover um módulo, use a opção unload com o

comando module, mas você deve especificar o nome completo do módulo de ambiente: $ module unload gotoblas2/1.08 $ module list Currently Loaded Modulefiles: 1) Linux 2) intel/11.1 3) mvapich2/1.44) sge/6.2u3 5) cluster 6) TACC

Observe que o módulo gotoblas2/1.08 não é listado. Alternativamente, você pode descarregar todos os módulos carregados no ambiente com module purge: $ module purge $ module list No Modulefiles Currently Loaded.

Você pode ver aqui que, após o comando module purge, os módulos de ambiente não estão mais carregados.

Listagem 1: Comando module avail 01 $ module avail 02 03 ––––––––––––––- /opt/apps/intel11_1/modulefiles ––––––––––––––04 fftw3/3.2.2 gotoblas2/1.08 hdf5/1.8.4 mkl/10.2.4.032 mvapich2/1.4 netcdf/4.0.1 openmpi/1.4 05 06 –––––––––––––––– /opt/apps/modulefiles –––––––––––––––– 07 gnuplot/4.2.6 intel/11.1(default) papi/3.7.2 08 intel/10.1 lua/5.1.4 pgi/10.2 09 10 ––––––––––––––––-- /opt/modulefiles ––––––––––––––––– 11 Linux TACC TACC-paths cluster 12 –––––––––––––––-- /cm/shared/modulefiles –––––––––––––––– 13 acml/gcc/64/4.3.0 fftw3/gcc/64/3.2.2 mpich2/smpd/ge/open64/64/1.1.1p1 14 acml/gcc/mp/64/4.3.0 fftw3/open64/64/3.2.2 mpiexec/0.84_427 15 acml/gcc-int64/64/4.3.0 gcc/4.3.4 mvapich/gcc/64/1.1 16 acml/gcc-int64/mp/64/4.3.0 globalarrays/gcc/openmpi/64/4.2 mvapich/open64/64/1.1 17 acml/open64/64/4.3.0 globalarrays/open64/openmpi/64/4.2 mvapich2/gcc/64/1.2 18 acml/open64-int64/64/4.3.0 hdf5/1.6.9 mvapich2/open64/64/1.2 19 blacs/openmpi/gcc/64/1.1patch03 hpl/2.0 netcdf/gcc/64/4.0.1 20 blacs/openmpi/open64/64/1.1patch03 intel-cluster-checker/1.3 netcdf/open64/64/4.0.1 21 blas/gcc/64/1 intel-cluster-runtime/2.1 netperf/2.4.5 22 blas/open64/64/1 intel-tbb/ia32/22_20090809oss open64/4.2.2.2 23 bonnie++/1.96 intel-tbb/intel64/22_20090809oss openmpi/gcc/64/1.3.3 24 cmgui/5.0 iozone/3_326 openmpi/open64/64/1.3.3 25 default-environment lapack/gcc/64/3.2.1 scalapack/gcc/64/1.8.0 26 fftw2/gcc/64/double/2.1.5 lapack/open64/64/3.2.1 scalapack/open64/64/1.8.0 27 fftw2/gcc/64/float/2.1.5 mpich/ge/gcc/64/1.2.7 sge/6.2u3 28 fftw2/open64/64/double/2.1.5 mpich/ge/open64/64/1.2.7 torque/2.3.7 29 fftw2/open64/64/float/2.1.5 mpich2/smpd/ge/gcc/64/1.1.1p1

53


REDES | Módulos de ambiente em clusters

Se você estiver usando um gerenciador de recursos (agendador de tarefas), é provável que crie um script que solicita os recursos e executa o aplicativo. Neste caso, precisará carregar os Módulos de Ambiente cor-

retos em seu script. Normalmente, após a parte do script em que você solicitar recursos (no mundo PBS, estes são chamados de comandos #PBS), então irá carregar os módulos de ambiente que necessitar.

Agora que eu mostrei alguns comandos básicos para a utilização de Módulos de Ambiente, vou um pouco mais a fundo, utilizando um módulo em um script e escrevendo o meu próprio módulo.

Quadro 1: Módulos de Ambiente para Clusters Acho que a qualidade do código-fonte dos software livres melhorou durante os últimos anos para um ponto no qual a compilação e a instalação são bastante objetivas, mesmo que você nunca tenha compilado um código antes. E, caso não tenha, não sinta receio de começar com os módulos de ambiente. Para este artigo, como exemplo, vou compilar módulos de ambiente em um nó “cabeça” no cluster em /usr/local. Vou assumir que você tenha o NSF /usr/local exportado para os nós computacionais ou algum outro sistema de arquivos ou o diretório que está montado nos nós computacionais (talvez um sistema de arquivos global?). Se você estiver criando e testando seu código em um cluster de produção, certifique-se de que o /usr/local está montado em todos os nós computacionais. Para começar, baixe a versão mais recente – deve ser um arquivo *.tar.gz. (estou usando a v3.2.6, mas a última enquanto escrevo este artigo é a v3.2.9). Para facilitar as coisas, compile o código em /usr/local. A documentação que vem com os Módulos de Ambiente recomenda que seja compilado em /usr/local/Modules/src. Como usuário root, execute os seguintes comandos: % cd /usr/local % mkdir Modules % cd Modules % mkdir src % cp modules-3.2.6.tar.gz /usr/local/Modules/src % gunzip -c modules-3.2.6.tar.gz | tar xvf % cd modules-3.2.6 Em seguida, recomendo que você leia atentamente o arquivo INSTALL, que irá salvar sua vida (a primeira vez que compilei Módulos de Ambiente, não o li e tive muitos problemas.) Antes de iniciar a configuração e a compilação do código, você precisará cumprir alguns pré-requisitos. Primeiro, deve ter o Tcl instalado, bem como o Tcl Development. Por não saber qual sistema operacional ou distribuição está sendo utilizado, vou deixar para você a tarefa de instalar o Tcl e o Tcl Development no nó em que você estará compilando os Módulos de Ambiente. Agora, você deve configurar e compilar os Módulos de Ambiente. Como root, digite o seguinte: % % % %

cd /usr/local/Modules/src/modules-3.2.6 ./configure make make install

O documento INSTALL recomenda criar um link simbólico em /usr/local/Modules ligando a versão atual dos módulos de ambiente para um diretório chamado default: % cd /usr/local/Modules % sudo ln -s 3.2.6 default A razão pela qual recomendamos o uso do link simbólico é que quando atualizar os Módulos de Ambiente para uma nova versão, você o compila em /usr/local/Modules/src e, então, cria um link simbólico de /usr/local/Modules/<novo> para /usr/local/Modules/default, o que torna mais fácil a atualização. A próxima coisa a fazer é copiar um (talvez mais) dos arquivos de inicialização dos Módulos de Ambiente para uma localização global para todos os usuários. Para meu cluster particular, escolhi o arquivo sh init. Este arquivo irá configurar os Módulos de Ambiente para todos os usuários. Optei por usar a versão sh ao invés de csh ou bash, porque sh é o denominador comum: % sudo cp /usr/local/Modules/default/init/sh /etc/profile.d/modules.sh % chmod 755 /etc/profile.d/modules.sh Agora, os usuários podem usar módulos de ambiente colocando apenas o seguinte em seu .bashrc ou .profile: %. /etc/profile.d/modules.sh Como um teste simples, você pode executar o script acima e digitar o comando module. Se você receber alguma informação sobre como usar os módulos, como o que veria se usou a opção -help, então quer dizer que você instalou os módulos de ambiente corretamente.

54

www.linuxmagazine.com.br


Módulos de ambiente em clusters | REDES

Módulos de ambiente nos scripts Nesta seção, vou mostrar como você pode usar módulos de ambiente em um script. Estou usando PBS para este exemplo rápido, com o seguinte trecho de código para a parte superior do script: #PBS -S /bin/bash #PBS -l nodes=8:ppn=2 . /etc/profile.d/modules.sh module load compiler/pgi6.1-X86_64 module load mpi/mpich-1.2.7 (insert mpirun command here)

Na parte superior do fragmento de código estão as diretivas PBS que começam com #PBS. Após as diretivas PBS, chamo o script de inicialização dos Módulos de Ambiente (modules.sh). Imediatamente depois disso, você deve carregar os módulos de que precisa para seu trabalho. Para este exemplo em particular, tirado de um script escrito por mim há três anos atrás, carrego um compilador (pgi-6.1-x86_64) e uma biblioteca MPI (mpich-1.2.7).

Criando um arquivo de módulo Criar o seu próprio arquivo de módulo não é muito difícil. Se você conhecer um pouco de Tcl, o processo será muito fácil, no entanto, mesmo se você não sabe Tcl, é simples seguir um exemplo para criar seu próprio arquivo de módulo. Os próprios módulos definem o que você quer fazer no ambiente quando carregar o módulo. Por exemplo, você pode criar novas variáveis de ambiente que precisarão executar um aplicativo ou alterar o $PATH, $LD_LIBRARY_LOAD, ou $MANPATH para que um determinado aplicativo funcione corretamente. Acredite ou não, você ainda pode executar o código dentro do módulo ou chamar um aplicativo externo. Este recurso torna os Módulos de Ambiente muito flexíveis.

Linux Magazine #90 | Maio de 2012

Para começar, lembre-se de que todos os módulos são escritos em Tcl, o que os torna muito programáveis. Para o exemplo mostrado aqui, todos os arquivos de módulo ficam em /usr/local/Modules/default/ modulefiles. Neste diretório, você pode criar subpastas para melhor rotular ou organizar seus módulos. Neste exemplo, vou criar um módulo para o gcc-4.6.2 para criar e instalar na minha conta de usuário. Para começar, vou criar um subdiretório chamado compilers para qualquer

arquivo de módulo que tem a ver com compiladores. Os módulos de ambiente têm uma espécie de modelo que você pode usar para criar o seu próprio módulo. Usei isso como ponto de partida para o meu módulo. Como root, faça o seguinte: % cd /usr/local/Modules/ default/modulefiles % mkdir compilers % cp modules compilers/gcc-4.6.2

O novo módulo vai aparecer na lista de módulos como compilers/gcc-4.6.2.

Listagem 2: Carregar módulos 01 02 03 04 05

$ module load gotoblas2/1.08 $ module list Currently Loaded Modulefiles: 1) Linux 3) mvapich2/1.4 5) cluster 7) gotoblas2/1.08 2) intel/11.1 4) sge/6.2u3 6) TACC

Listagem 3: Arquivo de módulo #%Modue1.0######################################################### ## ## modules compilers/gcc-4.6.2 ## ## modulefiles/compilers/gcc-4.6.2. Escrito por Jeff Layton ## proc ModulesHelp { } { global version modroot puts stderr "compilers/gcc-4.6.2 – configura o Ambiente para o GCC 4.6.2 em meu diretório pessoal" 10 } 11 12 module-whatis "Configura o ambiente para usar compiladores gcc-4.6.2 (C, Fortran)" 13 # somente para uso de script Tcl 14 set topdir /home/laytonj/bin/gcc-4.6.2 15 set version 4.6.2 16 set sys linux86 17 18 setenv CC $topdir/bin/gcc 19 setenv GCC $topdir/bin/gcc 20 setenv FC $topdir/bin/gfortran 21 setenv F77 $topdir/bin/gfortran 22 setenv F90 $topdir/bin/gfortran 23 prepend-path PATH $topdir/include 24 prepend-path PATH $topdir/bin 25 prepend-path MANPATH $topdir/man 26 prepend-path LD_LIBRARY_PATH $topdir/lib 01 02 03 04 05 06 07 08 09

Listagem 4: Ajuda do módulo 01 home8:~> module help compilers/gcc-4.6.2 02 03 –––-- Module Specific Help for 'compilers/gcc-4.6.2' ––-04 05 compilers/gcc-4.6.2 - configura o Environment para o GCC 4.6.2 em meu diretório pessoal

55


REDES | Módulos de ambiente em clusters

Recomendo que você olhe para o modelo para sentir o que a sintaxe e o que as várias partes dos arquivos de módulo estão fazendo. Novamente, lembre-se de que os Módulos de Ambiente usam Tcl como linguagem, mas você não tem que saber muito sobre Tcl para criar um arquivo de módulo. O que criei é mostrado na listagem 3.

O arquivo pode parecer um pouco longo, mas na verdade é bastante compacto. A primeira seção fornece ajuda para este módulo em particular se um usuário solicitar (a linha que começa com puts stderr) – por exemplo a listagem 4. Você pode ter várias strings usando várias linhas puts stderr no módulo

Listagem 5: which gcc 01 02 03 04 05

home8:~> which gcc /usr/bin/gcc home8:~> gcc -v Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions--enable-java-awt=gtk --host=i386-redhat-linux Thread model: posix 06 gcc version 3.4.3 20050227 (Red Hat 3.4.3-22.1)

Listagem 7: Descarregando o módulo 01 02 03 04 05 06 07 08

home8:~> module unload compilers/gcc-4.6.2 home8:~> module list No Modulefiles Currently Loaded. home8:~> which gcc /usr/bin/gcc home8:~> gcc -v Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions--enable-java-awt=gtk --host=i386-redhat-linux 09 Thread model: posix 10 gcc version 3.4.3 20050227 (Red Hat 3.4.3-22.1)

Listagem 6: module avail 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

home8:~> module avail ––––––––- /usr/local/Modules/versions ––––––––-3.2.6

––––––-- /usr/local/Modules/3.2.6/modulefiles –––––––compilers/gcc-4.6.2 dot module-info null compilers/modules module-cvs modules use.own home8:~> module load compilers/gcc-4.6.2 home8:~> module list Currently Loaded Modulefiles: 1) compilers/gcc-4.6.2 home8:~> which gcc ~/bin/gcc-4.6.2/bin/gcc home8:~> gcc -v Using built-in specs. Target: i686-pc-linux-gnu Configured with: ./configure --prefix=/home/laytonj/bin/gcc-4.6.2 --enable-languages=c,fortran --enable-libgomp 19 Thread model: posix 20 gcc version 4.6.2

56

(o modelo tem várias linhas). Após a seção de ajuda no procedimento Module-Help, outra linha fornece algumas informações simples, quando um usuário utiliza a opção whatis, por exemplo: home8:~> module whatis compilers/gcc-4.6.2 compilers/gcc-4.6.2 : Configura o ambiente para usar compiladores gcc-4.6.2 (C, Fortran)

Após as definições help e whatis há uma seção onde crio quaisquer variáveis de ambiente necessárias, bem como modifico o $PATH, $LD_LIBRARY_PATH, e $MANPATH ou outras variáveis de ambiente padrão. Para tornar a vida um pouco mais fácil para mim, defini algumas variáveis locais: topdir, version e sys. Embora eu só tenha usado a topdir, defini as outras duas variáveis no caso de eu precisar voltar e modificar o módulo (as variáveis podem me ajudar a lembrar o que o módulo foi projetado para fazer). Neste arquivo de módulo em particular, defini um conjunto de variáveis de ambiente apontando para os compiladores (CC, GCC, FC, F77 e F90). Depois de definir as variáveis de ambiente, eu modifiquei o $PATH, $PATH_LD_LIBRARY, e $MANPATH para que o compilador vá primeiro nestes locais usando a diretiva prepend-path. O módulo básico que mostrei é bastante simples, mas pode ser muito sofisticado em caso de necessidade. Por exemplo, você poderia fazer um arquivo de módulo depender de outro, de modo que tenha que carregar um módulo específico antes de carregar aquilo que você quer. Além disso, poderá chamar aplicativos externos – por exemplo, se quiser ver se um aplicativo está instalado e em funcionamento. Você está limitado apenas pelas suas necessidades e pela sua imaginação. Depois de ter definido um módulo, precisará verificar para se certifi-

www.linuxmagazine.com.br


Módulos de ambiente em clusters | REDES

car de que funciona. Antes de carregar o módulo, verifique se o gcc está sendo usado (listagem 5). Isto significa que o gcc está atualmente apontando para o gcc do sistema. (Sim, este é um GCC muito antigo; preciso atualizar meu computador de testes em casa). Em seguida, carregue o módulo e verifique qual GCC está sendo utilizado (listagem 6). Isso significa que se você usa o gcc, acaba usando a versão criada em seu diretório pessoal. Como uma verificação fi-

O autor Jeff Layton é um especialista corporativo para HPC (High Performance Computing) na Dell. Além de computadores é um admirador de café.

Gostou do artigo? go? Queremos ouvir sua a opinião. opin o Fale conosco em cartas@linuxmagazine.com.br com.b Este artigo no nosso so site: sit http://lnm.com.br/article/6827 article 827

Tem novidade na Coleção Academy!

nal, descarregue o módulo (com o comando unload) e verifique novamente quais são os locais padrão do gcc (listagem 7). Observe que depois de descarregar o módulo, o gcc padrão remonta à versão original, o que significa que as variáveis de ambiente estão, provavelmente, corretas. Se você quiser ser mais radical, deve verificar todas as variáveis de ambiente antes de carregar o módulo, depois de carregar o módulo, e depois de descarregá-lo. Mas, neste momento, eu estou pronto para declarar: sucesso!

Conclusão Para clusters, os módulos de ambiente são a melhor solução para lidar com múltiplos compiladores e bibliotecas, ou até mesmo aplicativos. Eles são fáceis de usar mesmo para iniciantes na linha de comando. Apenas alguns poucos comandos permitem adicionar e remover módulos de seu ambiente facilmente. Você pode até usá-los em scripts. Como foi visto, não é muito difícil escrever o seu próprio módulo e usá-lo. Os módulos de ambiente são verdadeiramente uma ferramenta indispensável para clusters. ■

Mais informações [1] [2] [3] [4] [5]

GCC 4.6.2: http:// gcc.gnu.org/ Open MPI 1.5.2:http:// www.open-mpi.org/ MPICH2: http:// www.mcs.anl.gov/research/projects/mpich2/ Módulos de Ambiente: http://modules.sourceforge.net/ LSF: http://www.platform.com/workload-management/ high-performance-computing/add-on-products/platform-lsf-family [6] PBS-Pro: http:// www.pbsgridworks.com/Default.aspx [7] MOAB:http:// www.clusterresources.com/ [8] TACC: http:// www.tacc.utexas.edu/

Instalação e congifuração de servidores VoIP com Asterisk. Configuração de ramais, extensões, secretária eletrônica, monitoramento e espionagem de chamadas, planos de discagem, URA e muitos outros aspectos que abordam o uso de centrais telefônicas IP PBX. Disponível no site www.LinuxMagazine.com.br

Linux Magazine #90 | Maio de 2012

57


REDES | Envenenamento de cache ARP

Envenenamento de cache ARP

REDES

Piscina envenenada Os invasores contam com o envenenamento de cache ARP para esconder a sua presença em uma rede local. Vamos mostrar algumas ferramentas que um invasor pode usar para envenenar o cache ARP e reunir informações sobre a sua rede. por David J. Dodd

E

m um ambiente de rede comutada, os pacotes são enviados para o ponto de destino através do endereço MAC (endereço físico) da placa de rede do computador. Este processo requer que os sistemas na rede mantenham uma tabela associando endereços MAC com portas, chamada de tabela ARP (do inglês Address Resolution Protocol). Em um ambiente comutado, os pacotes são enviados apenas para os dispositivos para os quais eles se destinam, mas mesmo assim, há maneiras de capturar pacotes de outros dispositivos. Uma maneira de fazer essa captura, é disfarçar o seu endereço MAC e

envenenar a tabela ARP. Por conta de a tabela não guardar informações de estado, o cache ARP pode ser substituído (a menos que uma entrada seja explicitamente marcada como permanente). O envenenamento de cache ARP coloca o invasor em condições de interceptar as comunicações entre dois computadores. Um computador A acredita que está se comunicando com o computador B, mas por causa da tabela ARP envenenada, a comunicação, na realidade, vai para o computador do invasor, ou seja, um computador C, neste caso. O invasor pode, então,

responder ao computador (fingindo ser o computador B), ou simplesmente encaminhar os pacotes para o destino pretendido, mas apenas após as informações do pacote serem capturadas e registradas para uso posterior do invasor. Da mesma forma, a resposta do computador B pode ser capturada e registrada pelo invasor, que também usou o envenenamento ARP para fazer o computador B achar que o computador do invasor é o computador A. Este tipo de ataque é conhecido como um ataque man-in-the-middle (o homem no meio, que significa, em resumo, uma pessoa interceptando os dados). Neste artigo, faço menção a uma série de ferramentas utilizadas em ataques de envenenamento de cache ARP, como Ettercap, Arpspoof, Nemesis, p0f, dsniff e Scapy.

Descoberta de IPs

Figura 1 Modo bridge do Ettercap.

58

Para o envenenamento do cache ARP acontecer, o invasor precisa estar no mesmo segmento de rede dos sistemas sob ataque. O primeiro passo é obter uma lista de endereços IP e os endereços MAC associados a eles. Várias ferramentas irão ajudá-lo a obter esta informação. Um exemplo é o ettercap [1], pacote de ferramentas para

www.linuxmagazine.com.br


Envenenamento de cache ARP | REDES

Figura 2 Saída gráfica do Scapy.

ataques man-in-the-middle feitos em uma rede local. Possui farejamento ao vivo de conexões, filtragem instantânea de conteúdo, e muito mais, além de suportar dissecções ativa e passiva de muitos protocolos. O comando ettercap -T -M arp:ip_remoto rapidamente fareja todos os hosts dentro de sua subrede; para ver os resultados, digite L. Pressionar a tecla h do menu de ajuda gera uma lista de comandos.

DoS de cache ARP Parte integrante do conjunto de aplicativos dsniff [2], a ferramenta arpspoof [3], é uma coleção gratuita de ferramentas de auditoria de rede e testes de invasão, que permite realizar o envenenamento da tabela ARP de um determinado endereço IP, o que deixa o sistema offline, de forma que não possa se comunicar com ninguém. A coleção dsniff inclui ferramentas como o próprio dsniff, filesnarf, mailsnarf, msgsnarf, urlsnarf e WebSpy, que passivamente monitoram redes de dados de interesse. O arpspoof, dnsspoof e ferramentas como o macof ajudam a interceptar o tráfego de rede normalmente indisponível devido a comutação da camada 2 (enlace ou ligação de dados). O arpspoof é muito mais simples que o ettercap para redirecionar pacotes: # arpspoof -i eth0 -t <target> host

Especificar a interface é opcional, mas obrigatório se mais de uma interface está presente. A opção -t especifica

Linux Magazine #90 | Maio de 2012

o host para envenenamento do cache ARP; se o host não for especificado, todos os hosts da rede local serão envenenados. O host pode ser o gateway padrão, e isso vai manter a meta de se comunicar para além do segmento local. O arpspoof redireciona pacotes de um host de destino ou todos os hosts da rede local, forjando respostas ARP. A beleza deste programa vem da função arp_send(), que também usa a biblioteca libnet para farejar pacotes. O arp_send() envia um pacote ARP com IP de origem/destino e endereços de hardware ethernet fornecidos pelo usuário. A Libnet é uma API genérica de rede que fornece acesso a vários protocolos. Para entender melhor o processo de envenenamento de cache ARP, considere uma ferramenta alternativa chamada Nemesis [4]. Se você tiver o IP e o MAC do destino pretendido e o host, você pode usar o Nemesis para fazer envenenamento ARP no destino. O Nemesis é um utilitário de linha de comando para criação de pacotes de rede e injeção de dados que pode criar e injetar pacotes ARP, DNS, Ethernet, ICMP, IGMP, IP, OSPF, RIP, TCP e UDP em um servidor alvo. Ao criar o seu próprio pacote com o Nemesis, você pode ver como funciona o envenenamento do cache ARP (listagem 1, linha 3), em seguida, você pode criar um pacote para enviar dados no outro sentido (listagem 1, linha 4). Estes dois comandos forjam respostas ARP a partir do IP 192.168.1.2 para 192.168.1.133

em seguida do IP 192.168.1.133 para 192.168.1.2 e envia respostas falsas para manter o envenenamento do cache ARP e o redirecionamento do tráfego. Para certificar-se de que o cache fique envenenado, a listagem 1 repete os comandos a cada 10 segundos com um loop (mais opções arp do Nemesis são mostrados na tabela 1). Uma vez que estes comandos são executados, o alvo é desligado e fica incapaz de comunicar-se com o resto da rede. Um video que fiz demonstra este ataque [5].

Ataque da rede local Um dos objetivos do envenenamento de cache ARP é colocar o invasor em posição de capturar e registrar infor-

Figura 3 Scapy farejando tráfego em um host.

59


REDES | Envenenamento de cache ARP

Para que o utilitário p0f escreva pacotes em um tcpdump instantâneo, use a opção -w: p0f -w dumpfile.pcap

No caso do dsniff, para escrever pacotes para um arquivo, utilize o comando: dsniff -w dumpfile.pcap

E com o Ettercap, você também pode enviar pacotes de dados para um arquivo com a opção -w: Figura 4 Controle a saída de dados do Scapy.

mações sobre a rede. Os invasores têm várias ferramentas para monitorar a rede local e registrar dados para análise posterior. O modo bridge do Ettercap permite interceptar os pacotes que você pode ler, monitorar ou alterar antes de enviá-los para a vítima. Este modo exige duas interfaces que estão colocadas no segmento de rede. Se você configurar o modo de rede bridge em linha, será muito difícil de detectá-lo: # ettercap -Tq -i eth0 -B eth1

O parâmetro -i define a interface primária como eth0, e -B define a segunda interface de ligação (figura 1). Se você executar o Ettercap pela interface de usuário Gtk+, selecione as opções Sniff/Bridged sniffing.

Registro de dados Se você quiser registrar todos os pacotes capturados em um arquivo, é possível usar uma série de ferramentas, tais como p0f, coleta passiva de impressão digital de sistema operacional e utilitários de detecção mascarada. O p0f é útil para testes ou coleta de informações em servidores, firewalls e sistemas de detecção de invasão. O Ettercap também pode recolher informações de hosts (detectar o sistema operacional em execução) com a opção -P, você só precisa especificar uma porta aberta. Depois de descobrir qual sistema operacional está em execução no sistema alvo, você pode antecipar como o sistema vai reagir: # ettercap -Tq -P finger /192.168.1.121/22

ettercap -T -M arp:remote /192.168.1.1/ /192.168.1.130/ -w dumpfile.pcap

É mais fácil e menos intrusivo se você capturar o tráfego de um computador específico, ao invés de tentar capturar o segmento todo da rede local, caso contrário, o Ettercap pode falhar. Para visualizar a saída de dados, utilize o Scapy [6] se você tiver um visualizador gráfico de PostScript/PDF. O Scapy é um interativo e poderoso programa de manipulação de pacotes que tem a capacidade para forjar ou decodificar os pacotes de um grande número de protocolos. Com o Scapy, você pode executar tarefas como a varredura, rastreamento de rota, sondagem, testes de unidade, descoberta de rede, tcpdump, tethereal, p0f, e muito mais. Digite apenas scapy no terminal (figura 2): $ scapy >>> a=rdpcap("/home/cr0wn/ dumpfile.pcap") >>> a <dumpfile.pcap: TCP:9522 UDP:2386 IMCP:15 Other:611> >>> a[423].pdfdump(layer_shift=1)

Se você quiser capturar o tráfego em um host, digite o seguinte comando no prompt do Scapy: >>> sniff(filter="tcp and host 192.168.1.131", count=50) >>> a=_ >>> a.nsummary()

Figura 5 Investigação de dados de clientes de email.

60

Este comando fareja os próximos 50 pacotes trafegando na rede para o host 192.168.1.131 (figura 3). Se você utilizar a função sprintf(), poderá obter ainda mais controle sobre o que é exibido (figura 4).

www.linuxmagazine.com.br


Envenenamento de cache ARP | REDES

Figura 6 Investigação de uma rede sem fio com o Scapy. >>> pkts = sniff(prn=lambda x:x.sprintf("{IP:%IP.src% -> %IP.dst%\n}{Raw:%Raw.load%\n}"))

Para farejar as portas 25 e 110 dos clientes de email, digite o seguinte comando no Scapy: >>> a=sniff(filter="tcp and ( port 25 or port 110 )", prn=lambda x:x.sprintf("%IP.src%:TCP. sport% -> %IP.dst%:%TCP.dport% %2s, TCP.flags% : %TCP.payload%"))

Este comando fareja por pacotes trafegados via TCP nas portas 25 e 110 e usa o operador lambda para denotar funções anônimas com a função sprintf() para obter mais controle sobre as informações apresentadas (figura 5). O Scapy também pode mostrar graficamente o que você está farejando na rede através da produção de um simples diagrama de fluxo de pacotes. O método conversations() irá criar um gráfico da conversa, o que requer Graphviz e ImageMagick para funcionar. Com este comando, >>> a=sniff(iface="wlan0", prn=lambda x: x.summary()) >>> a.conversations()

o Scapy fareja a interface sem fios (wlan0) ligada a uma rede externa e exibe isso graficamente (figura 6). Opção Função -S

Endereço IP de origem

-D

Endereço IP de destino

-h

Endereço MAC do remetente

-m

Endereço MAC do alvo

-h

Endereço MAC da origem

-m

Endereço MAC do destino Tabela 1 Opções arp do Nemesis.

Linux Magazine #90 | Maio de 2012

Conclusão O envenenamento de cache ARP permite que qualquer computador na rede local obtenha uma das posturas de ataque mais poderosas em termos de segurança de rede, o man-in-themiddle. Um ataque deste tipo permite um invasor monitorar, filtrar, modificar e editar todo e qualquer tráfego de rede se movendo entre redes locais. Neste artigo, identifiquei algumas ferramentas de código aberto que você pode usar para testar a suscetibilidade da sua rede a um ataque man-in-the-middle de cache ARP. Ao ficar familiarizado com essas ferramentas, você pode determinar quão segura sua rede realmente é. Uma boa defesa contra estas técnicas é proporcionar a segurança integrada de porta em seus switches e executar o aplicativo arpwatch [7] para monitorar o tráfego de protocolo de resolução de endereço na rede. Uma maneira de proteger os clientes da rede que se ocupam da navegação na web é usar o HTTPS Everywhere [8] da Electronic Frontier Foundation. O HTTPS Everywhere permite o uso do HTTPS em vez do HTTP normal, que passa as informações em texto

e seria lido por um invasor farejando o segmento de rede local. Este cenário se torna mais importante quando se utilizam redes sem fio desconhecidas, como aquelas que você encontra em restaurantes ou aeroportos. ■

Listagem 1: Pacotes arp do Nemesis 01 $ while true 02 > do 03 > sudo nemesis arp -v -r -d eth0 -S 192.168.1.2 -D 192.168.1.133 -h 00:22:6E:71:04:BB -m 00:0C:29:B2:78:9E -H 00:22:6E:71:04:BB -M 00:0C:29:B2:78:9E 04 > sudo nemesis arp -v -r -d eth0 -S 192.168.1.133 -D 192.168.1.2 -h 00:22:6E:71:04:BB -m 00:22:6B:7E:AD:7C -H 00:22:6E:71:04:BB -M 00:22:6B:7E:AD:7C 05 > echo “Redirecionando” 06 > sleep 10 07 > done

Gostou do artigo? go? Queremos ouvir sua a opinião. op ão. Fale conosco em cartas@linuxmagazine.com.br .com.b Este artigo no nosso so site: sit http://lnm.com.br/article/6838 articl 838

Mais informações [1] [2] [3] [4] [5] [6] [7] [8]

Ettercap: http://ettercap.sourceforge.net/ Suite dsniff: http://monkey.org/~dugsong/dsniff/ Arpspoof: http://arpspoof.sourceforge.net/ Nemesis: http://nemesis.sourceforge.net/ Tutorial do Nemesis: http://pbnetworks.net/?cmd=bbsEEEEEE id=41 Scapy: http://www.secdev.org/projects/scapy/ arpwatch: http://linuxcommand.org/man_pages/arpwatch8.html HTTPS Everywhere: https://www.eff.org/https-everywhere

61


REDES | Nuvens automatizadas

Nuvens automatizadas

REDES

Charme automatizado Goste ou não, o DevOps está aí para ficar e as exigências da computação distribuída e na nuvem estão trazendo uma série de novas ferramentas para ajudar programadores e administradores a gerenciar esses sistemas em constante mudança. por Brice Goglin

D

ependendo de a quem você perguntar, DevOps ou é a melhor coisa que aconteceu desde o pão fatiado ou a maior quantidade de bobagem já imposta ao setor de TI. Mas, embora seja compreensível ter uma reação alérgica a mais uma tecnologia bacana que vai “salvar a todos nós” e, ainda, nos dar tempo para fazer biscoitos, a ideia do DevOps tem alguma substância real – desde que você consiga vencer a hype. No versão hype, o DevOps parece sugerir que as equipes de desenvolvimento e administração de sistemas estão, de alguma forma, em desacordo e que o DevOps vai suavizar o atrito entre esses dois grupos e alinhá-los em torno dos objetivos comuns aos negócios. Colocando isso de lado, os benefícios reais do DevOps são tipicamente um pouco mais mundanos, mas não menos úteis: você tem

68

essa coisa chamada computação na nuvem, e para realmente utilizá-la corretamente, os recursos da máquina no ambiente precisam ser capazes de serem implementados e administrados de forma automática. Este gerenciamento automatizado representa uma parcela importante da computação em nuvem: uma coleção de máquinas virtuais sem controle é apenas um centro de dados virtual. Então, este é o lugar onde a necessidade do DevOps realmente vem à tona: os desenvolvedores de aplicativos não apenas precisam criar softwares para sistemas distribuídos, mas também precisam criar código para sistemas distribuídos que irão escalonar, de uma forma ou de outra. Isso traz um outro termo: elasticidade. Pode ser uma palavra da moda, no entanto, cabe bem à situação. A computação em nuvem não é a única razão pela qual a tendência

do DevOps surgiu. A necessidade de coordenar os recursos do hardware e do software executado nele, sempre existiu em qualquer ambiente de TI. Mas sistemas distribuídos, e agora elásticos, tornaram tal coordenação uma necessidade e não apenas uma boa opção. As dificuldades dessa necessidade ocorrem por conta de um fato simples: programadores podem ser grandes programadores, mas não tão bons em administrar sistemas. Por outro lado, os administradores podem conhecer suas máquinas friamente, mas eles não conseguem compreender intuitivamente o que os aplicativos precisam para funcionar da melhor forma. O DevOps une esses dois pontos fracos para a criação de instrumentos que preencham as lacunas de conhecimento de cada grupo. E as ferramentas que estão sendo desenvolvidas como resultado disso são muito empolgantes.

www.linuxmagazine.com.br


Nuvens automatizadas | REDES

Os encantos do juju

Com o lançamento do juju no Ubuntu 11.10, a Canonical não apenas rebatizou o seu antigo serviço Ensemble, como também simplificou um grande componente de sua plataforma de “orquestração de serviços”. O juju é uma daquelas ferramentas demoradas para explicar, mas quando menos se espera, você simplesmente entende. Talvez seja o palavreado “misterioso” que está flutuando em torno desta ferramenta: a magia do juju e do uso de encantos (charms, em inglês). Mas, se você sabe um pouco sobre folclore e magia, essas descrições imediatamente tornam-se menos bonitas e mais úteis. Essencialmente, o juju é uma ferramenta automatizada de provisionamento de serviços que permite aos desenvolvedores e administradores executar qualquer tipo de serviço pré-configurado em qualquer nó de uma infraestrutura de nuvem. Esta pré-configuração é feita com a utilização de charms. Assim como se dá o uso da palavra charm (encanto) nos ambientes de magia, um encanto é uma forma de “armazenar” um feitiço para uso posterior, sem ter que manejar livros de magia e olhos de salamandra. No mundo dos feiticeiros, o encanto é como o canivete suíço dos ilusionistas. No contexto do juju, isso é exatamente o que os charms são. Se, por exemplo, você quisesse executar um nó mestre de um servidor Hadoop, poderia usar o Bazaar para baixar o charm adequado do juju [1], conectar o juju ao ambiente no qual o nó irá ser provisionado (como uma nuvem EC2 da Amazon), e em seguida, emitir dois comandos: juju bootstrap juju deploy hadoop-master

E pronto! Isso é tudo o que é necessário para executar o nó mestre

Linux Magazine #90 | Maio de 2012

do Hadoop no sistema que você escolheu. Ele será instalado, configurado e executado tão rápido quanto esse ambiente possa ser. A equipe da Canonical descreve o juju como o apt para a nuvem e, na prática, ele faz exatamente isso. Se algo parece familiar, é possível pensar em outros “pacotes de serviços” que também parecem fazer a mesma coisa. O único que me veio à mente foi o BitNami, uma ferramenta incrível da BitRock para construir sistemas completos em sistemas nativos, virtuais e baseados na nuvem. Então, o que há de novo aqui que o BitNami já não faz? Na verdade, pouca coisa. Se você não estiver familiarizado com o Hadoop, ele é um sistema distribuído de armazenamento de dados, que normalmente precisa de um único nó mestre e de tantos nós escravos quantos forem suficientes para que o trabalho seja feito. Portanto, você irá precisar de um charm para um nó escravo do Hadoop e o seguinte comando: juju deploy hadoop-slave

Novamente, nada de muito novo até aqui – quando você chega ao que é realmente interessante no juju: juju add-relation hadoop-master hadoop-slave

Isto é o que, de fato, faz do juju uma ferramenta de orquestração de serviços. Da mesma forma como o apt, para os aplicativos locais; e ferramentas de terceiros como o BitNami, para instalações full-stack, o juju faz um ótimo trabalho ao unir ferramentas e instalá-las ao mesmo tempo. Mas, ele também constrói relações entre estes nós de modo que eles possam, imediatamente, trabalhar em conjunto. Esse é o grande diferencial do juju. Com essa capacidade de executar serviços sob demanda e em seguida conectá-los com um úni-

co comando, o juju torna-se uma forma muito poderosa para que desenvolvedores comecem a inserir recursos para os operadores em seus aplicativos. E escalonar torna-se algo ainda mais fácil. Precisa de mais nós? Um comando simples como esse te dará outro: juju add-unit hadoop-slave

Precisa de um monte de nós, e rápido? Para 50 nós, tudo o que você vai precisar é: juju add-unit n=50 hadoop-slave

Além de ser usado para o provisionamento físico, o juju também tem potencial para o lançamento de sistemas de desenvolvimento local e de administração de nuvem pública e híbrida. A coisa importante a salientar aqui é que através do juju, os administradores e programadores não estão olhando para as instâncias das máquinas que executam esses serviços. Ao invés disso, eles estão manipulando os próprios serviços. Todo o trabalho de configuração e pré-construção é feito pelos charms, o que torna muito mais fácil pensar desta forma. No momento em que escrevo, o juju tem 88 charms disponíveis para utilização, com mais deles sendo adicionados o tempo todo. A Canonical está encorajando administradores e desenvolvedores a construírem seus próprios charms, e reuniu alguns bons tutoriais sobre como construir [2] e contribuir [3] com eles. Dessa maneira, a orquestração de serviços parece estar substituindo ferramentas de gerenciamento de configuração tais como Puppet, mas os membros da equipe do juju têm enfatizado que este não é realmente o objetivo. Na verdade, os charms podem ser escritos para delegar a configuração de serviços para algo como o Puppet, se scripts para o Puppet já tiverem sido feitos.

69


REDES | Nuvens automatizadas

Embora o juju já estivesse disponível no Ubuntu 11.10, é esperado que a ferramenta atinja plena maturidade na próxima versão 12.04. Você pode esperar um grande empurrão da Canonical para divulgar seu serviço de orquestração de nuvens neste momento, com o juju como uma peça central.

Eventos Nodeable para administradores O juju representa uma maneira poderosa para que desenvolvedores conectem-se a sistemas e serviços em um nível operacional, mas e quanto ao oposto? Com aplicativos distribuídos realizando tantas autoconfigurações e gerando tantos dados de processo e dados sobre o desempenho do aplicativo em si, como podem os administradores manterem-se a par do fluxo de informações? Esta é a pergunta que Dave Rosenberg, CEO da Nodeable [4], fez a si mesmo. Administradores de sistemas estavam lidando com uma enxurrada de novas informações a partir de sistemas distribuídos e elásticos que não só sobem e descem sob demanda, como também autoativam imagens, relatam alta latência e limites de armazenamento, e tudo isso com um código novo sendo adicionado a todo momento. Ferramentas de monitoramento, como o Nagios e o Splunk, podem ajudar a controlar tais mudanças de estado, mas não necessariamente em tempo real. Rosenberg olhou para essa inundação de informações e veio com uma resposta elegante. Pensando em outro setor tecnológico que permite às pessoas gerenciarem relacionamentos um-para-muitos, Rosenberg tinha apenas que olhar para o Twitter e o Facebook para encontrar sua resposta. Para Rosenberg, a capacidade de coletar informações de múlti-

70

plas fontes de dados foi o real valor agregado de serviços de mídia social e por isso era uma boa opção aplicá-la à administração de TI. Assim nasceu o Nodeable. Inicialmente, é fácil desvalorizar o Nodeable como “tweets do seu servidor”, mas isso é apenas uma visão superficial do que o Nodeable faz. O Nodeable é atualmente o que há de melhor para agregar dados em mensagens coerentes que podem ser entregues a quem ou o quê quer que você precise. “Quem” pode incluir administradores, programadores que precisam ver relatórios de falhas e até mesmo gerentes de TI que precisam apenas se manter a par das coisas. “O quê” pode ser qualquer sistema de administração ou outra ferramenta de monitoramento que você precise para controlar os dados agregados pelo Nodeable. Curiosamente, apesar do Nodeable ter potencial como uma ferramenta do tipo relatório-e-reação, Rosenberg está descobrindo que, por hora, os clientes, na realidade, apreciam apenas a capacidade de assistir aos seus sistemas e ver como eles se desempenham em momentos diferentes e cenários diversos. “Eles querem saber o que mudou”, disse Rosenberg da atual base do usuários do Nodeable. Em última análise, ele acrescentou que, os

usuários do serviço hospedado do Nodeable, serão capazes de reagir aos dados que estão sendo enviados a eles, introduzindo um canal para os sistemas de administração através do framework Nodeable. “Estamos construindo uma rede de informações para os sistemas e serviços”, disse Rosenberg. Essa rede acabará por permitir uma linha de comunicação de duas vias entre as operações e suas máquinas, e desenvolvedores e seus aplicativos – uma linha que não será inundada com uma cacofonia de dados incorretos.

Conclusão

O cenário de código aberto é o ambiente perfeito para juntar as necessidades do desenvolvimento e das operações, como demonstram claramente estas duas novas ferramentas. O DevOps pode desaparecer como um modismo, mas as necessidades de mudanças da computação distribuída e em nuvem fazem a relação entre software e hardware o mais importa para alguns, de forma a garantir que o trabalho de construção e manutenção de tais sistemas não fique fora de controle. Ferramentas de DevOps como o juju e o Nodeable podem ajudar a fazer exatamente isso. Biscoitos com gotas de chocolate, infelizmente, são opcionais. ■

Mais informações [1] Charms Juju: https://launchpad.net/charms [2] Escrevendo um Charm: https://juju.ubuntu. com/docs/write-charm.html [3] Contribuindo com Charms: https://juju.ubuntu.com/Charms [4] Nodeable: http://www.nodeable.com/

Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em cartas@linuxmagazine.com.br Este artigo no nosso site: http://lnm.com.br/article/6848

www.linuxmagazine.com.br


Nuvens automatizadas | REDES

Inclua em seu currículo a principal certificação Linux no mundo – LPI.

Em tempos de crise, soluções de código aberto – como o Linux – se destacam na adoção por empresas de todos os tamanhos, como solução ideal para aumentar eficiência nos negócios e reduzir custos. Atualmente há no mercado uma carência por profissionais certificados para atender a essa demanda crescente. Aproveite essa oportunidade e inclua em seu currículo a principal certificação Linux no mundo.

Inscrições e mais informações:

www.lpi-brasil.org treinamentos@vectory.com.br Tel (11) 3675-2600

R

Linux Magazine #90 | Maio de 2012

Linux Professional Institute

71


SEÇÃO | Atualização de kernel

Atualização de kernel com Ksplice

TUTORIAL

Reboot? Nunca mais! Seus servidores não podem ficar fora do ar e cada manutenção, mesmo que planejada, causa enormes transtornos a seus clientes? Conheça o Ksplice e dê adeus aos seus problemas. por Flávia Jobstraibizer e Kemel Zaidan

O

GNU/Linux, ao contrário do Windows, só precisa reinicializar o sistema após uma atualização importante, como no caso de realizar alguma correção ou modificação no kernel. Neste caso, é preciso iniciar um novo boot para que o novo kernel (baixado com as devidas correções de segurança e/ou bugs) seja carregado novamente para a memória. Se reiniciar a máquina não é uma operação complexa para o usuário de um computador comum, o mesmo não é possível dizer do pontos de vista dos servidores, principalmente aqueles que são utilizados em situações chamadas de “missão crítica”, ou seja, aqueles servidores onde os usuários não podem prescindir dos serviços disponibilizados por ele. É o caso de sistemas bem específicos, como aqueles que controlam o fornecimento de energia para uma empresa ou o forno de uma siderúrgica, por exemplo. Mas, neste caso, como realizar uma atualização dos sistemas desses servidores? Talvez seus serviços não sejam tão essenciais quanto os citados aqui, mas é possível que você possa se beneficiar da mesma forma com a diminuição na quantidade de reinicializações em decorrência de procedimentos simples, tal qual a atualização do sistema operacional, ao mesmo tempo em que se beneficia ao manter o sistema atualizado e corrigido das eventuais falhas de segu-

72

rança encontradas recentemente, uma vez que o processo de atualização do kernel passa a não precisar interromper o serviço, o que certamente dispensa toda a necessidade de agendar a manutenção, de forma que os clientes e usuários se preparem para ficar sem o serviço durante todo o tempo planejado.

História Pode parecer um sonho, mas não é. Alguns sistemas Unix proprietários já possuem esse recurso há algum tempo. No Linux, a tese de mestrado do estudante do MIT (sigla para Instituto de Tecnologia de Massachusetts, em inglês), Jeff Arnold, deu origem a um programa chamado de Ksplice. Ele foi criado por quatro estudantes (incluindo Jeff), que mais tarde fundaram a Ksplice Inc. A empresa ganhou um prêmio de 100 mil dólares pela competição de empreendedorismo do MIT, o Desafio em Cyber-Segurança (Cyber Security Challenge) do Global Security Challenge em 2009. O programa era distribuido sobre a licença GPL, pois o modelo de negócios da Ksplice Inc. era a venda de serviços de suporte e de ferramentas que facilitavam a instalação do produto. Em julho de 2011, a Ksplice Inc foi vendida para a Oracle, que fechou o código do produto. No entanto, a Oracle continuou a disponibilizar imagens pré-compiladas e testadas para Ubuntu e Fedora, assim como fazia a Ksplice.

Clientes do Oracle Linux podem solicitar gratuitamente uma licença e usuários do RHEL (Red Hat Enterprise Linux) podem baixar uma versão de teste que funciona por 30 dias. Por conta das antigas versões do Ksplice estarem sob a licença GPL é possível inclusive encontrá-lo no repositório de algumas distribuições. Para instalar a versão 0.9.9 no Ubuntu, basta digitar: sudo apt-get install ksplice

No entanto, caso você deseje testar uma versão mais nova, será preciso baixar o arquivo .deb ou .rpm específico da sua distribuição a partir do site [1]. A versão listada para o Ubuntu 11.10 Oneiric Ocelot constava como 1.2.3-4 até o momento em que este artigo foi escrito. É importante ressaltar que após o fechamento do código do Ksplice pela Oracle, esta passou a ser exibida nos menus do sistema, com o nome de Uptrack Manager, embora seu ícone, ainda seja o K, da antiga versão da ferramenta.

Funcionamento O funcionamento do Ksplice é inteligente, pois ele não necessita de patchs específicos para unir-se ao kernel (do tipo que marcaria para o sistema quais foram as mudanças entre uma versão e outra) ou tão pouco exige uma preparação prévia ou recompilação. Ao contrário disso, ele funciona de forma

www.linuxmagazine.com.br


Atualização de kernel | TUTORIAL

semelhante a um diff, só que no nível do ELF (Executable and Linking Format), ou seja, do binário, determinando assim qual porção de código sofreu alteração em relação a anterior. Dessa forma ele consegue perceber quais foram as mudanças entre um binário e outro e aplica a correção diretamente na memória RAM, o que coloca as mudanças imediatamente em uso, sem a necessidade de reboot. É claro que esta não é uma operação simples de se efetuar. Para isso, o daemon do Ksplice paraliza todos os processos no computador de maneira que ele seja o único processo com acesso ao sistema e que nenhuma função em execução esteja acessando partes que serão modificadas pelo patch. O Ksplice modifica então o início das funções atingidas de forma que elas apontem para as novas versões, dando continuidade ao processo do ponto onde elas foram paralizadas. Como o leitor pode ver, trata-se sem dúvida, de um engenhoso pedaço de código! Após a instalação da ferramenta, ela passa a residir no menu Aplicativos/ Ferramentas de sistema/Ksplice Uptrack Manager no caso do Ubuntu, e também ganha um ícone na bandeja do sistema, logo ao lado do nome do usuário da máquina. Um clique com o botão direito sobre o ícone da ferramenta, exibe uma tela inicial bastante parecida com a do gerenciador de atualizações do Ubuntu, e nela serão carregadas todas as atualizações que o Ksplice encontrou, que sejam pertinentes ao kernel. Caso atualizações importantes sejam encontradas, serão listadas e você poderá marcar as desejadas para instalação imediata ou

Figura 1 Vizualização de atualizações disponívels

instalar todas as atualizações disponíveis de uma só vez (figura 1). Um clique sobre a atualização e em seguida no botão Details irá exibir mais informações sobre aquela atualização em específico e o que será alterado. Quando as atualizações forem baixadas, instaladas e todo o processo concluído, o Ksplice irá simplesmente manter-se na bandeja do sistema, sem incomodar o usuário. O sistema estará atualizado e não será necessário reiniciar a máquina. Em testes realizados em nosso laboratório, caso você veja pela interface do Ksplice que existem atualizações de kernel disponíveis, mas opte por instalá-las através do gerenciador de atualizações nativo da sua distribuição, estas serão instaladas corretamente, mas você terá obrigatoriamente de reiniciar o computador. Sendo assim, embora o Ksplice esteja instalado na

máquina, ele não interfere no funcionamento dos programas nativos de gerenciamento de atualizações.

Problemas Também pudemos ver em nossos testes, uma grave falha relacionada a desinstalação do Ksplice. O aplicativo quebra durante a desinstalação, e ocasiona um pânico total do kernel, inviabilizando até mesmo a recuperação do sistema através de ferramentas como a chroot. Sendo assim, sugerimos cautela – e backup – antes de desinstalar a ferramenta.

Conclusão O Ksplice irá mudar a forma como usuários e empresas vêem os ambientes desktop Linux mais populares. Se nem mesmo as máquinas domésticas tiverem a necessidade de reiniciar, certamente a produtividade de seus usuários irá aumentar. ■

Os autores

Mais informações

Flávia Jobstraibizer, (fjobs@linuxnewmedia.com.br, twitter: @flaviajobs) é gerente de projetos e atuou como analista de sistemas durante mais de 10 anos, trabalhando com tecnologias livres e proprietárias. Atualmente é editora das revistas Linux Magazine, Admin Magazine e c’t.

[1] Ksplice: http://www.ksplice.com/

Kemel Zaidan, é escritor com formação em dramaturgia pela USP. Membro ativo da comunidade Ubuntu e de software livre brasileira, graduando em Análise de Sistemas pela FATEC, Faculdade de Tecnologia de São Paulo, já palestrou em diversos eventos pelo país e é editor da Linux New Media.

Linux Magazine #90 | Maio de 2012

Gostou do artigo? go? Queremos ouvir sua opinião. nião. Fale conosco em cartas@linuxmagazine.com.br e.com.b Este artigo no nosso sso site: s http://lnm.com.br/article/6866 r/artic 6866

73


TUTORIAL

TUTORIAL | Múltiplas distribuições Linux em um pendrive

Múltiplas distribuições Linux em um pendrive

Multitalentos Os usuários de Linux têm à sua escolha mais de duzentas imagens ISO com distribuições completas disponíveis na Internet. Se você gosta de experimentar distribuições, experimente o MultiSystem, aplicativo que permite que você as armazene em um dispositivo remóvível. por Erik Bärwaldt

O

software livre é criado em um processo muito dinâmico que produz muito mais inovações do que sistemas proprietários com suas capacidades de desenvolvimento limitadas e objetivos do projeto estritamente definidos. Assim, não é nenhuma surpresa que existam mais de duzentas variantes do sistema operacional Linux, que versões novas continuem surgindo, e que muitas dessas distribuições são otimizadas para cenários de uso especiais. Esse leque de opções significa que a rota para encontrar o melhor derivativo para o seu aplicativo provavelmente envolverá uma quantidade razoável de testes. E testes normalmente envolvem baixar imagens ISO de vários gigabytes direto da Internet e gravá-las em DVDs ou CDs para que seja possível testar os sistemas operacionais em uso real. Você pode, no entanto, evitar todo esse trabalho demorado de uma forma muito elegante, usando um pequeno programa chamado MultiSystem, que suporta a utilização simultânea de múltiplas distribuições Linux através de um pendrive ou cartão SD. Tudo de que você precisa é um sistema Linux funcionando e as imagens ISO que você deseja experimentar.

74

Primeiros passos O MultiSystem está disponível para download no site do projeto [1]. Depois de baixar o script Shell, você pode descompactar o arquivo digitando: tar xjvf installdepot-multisystem.sh.tar.bz2

O script deve ser instalado em um sistema Ubuntu instalado (e não em modo Live-CD, por exemplo). A rotina de instalação tem um bom número de dependências, que são resolvidas automaticamente no Ubuntu, que baixa aquilo de que necessita a partir dos repositórios disponíveis. Após os downloads e modificações serem concluídas, a rotina residirá no menu do sistema, em Aplicativos/Acessórios/MultiSystem. Você também verá uma entrada Multisystem test iso neste mesmo local do menu. Você pode iniciar o programa clicando no item do menu, e verá a janela principal do aplicativo (figura 1). Certifique-se de ligar o pendrive no qual vai instalar os sistemas operacionais em seu computador antes de iniciar o MultiSystem. Ele verifica se o meio de destino está disponível no momento da inicialização e lhe atribui um rótulo. O pendrive tam-

bém deve ter espaço suficiente se você estiver instalando uma distribuição um pouco maior. O programa também precisa de alguns requisitos de hardware bastante exigentes: além de espaço livre em disco suficiente, você também precisará de pelo menos 1GB de memória RAM se quiser usar todos os recursos do programa. O MultiSystem lhe dá a opção de testar o pendrive preparado primeiramente em um ambiente virtual, o que exigirá memória RAM suficiente e desempenho da CPU. O aplicativo pode instalar imagens ISO a partir de duas fontes em um pendrive. Se você já baixou alguns arquivos ISO e os armazenou em seu disco rígido local, o MultiSystem poderá usá-los. Caso contrário, o programa irá automaticamente fazer o download do arquivo ISO desejado a partir da Internet com base na sua seleção em uma lista (figura 2). Você pode, então, usar o gerenciador de arquivos para arrastar os arquivos ISO armazenados localmente em seu disco rígido ou em uma mídia removível e colocá-los na parte inferior da janela do programa. O MultiSystem, então, abre outra janela e mostra o

www.linuxmagazine.com.br


Múltiplas distribuições Linux em um pendrive | TUTORIAL

Figura 1 A tela de boas vindas após a inicialização do MultiSystem.

progresso da instalação do arquivo ISO atual em um terminal (figura 3). Se ocorrerem erros durante a instalação dos sistemas no pendrive, eles são indicados na janela do terminal, e o aplicativo vai tentar terminar a instalação dos arquivos. Uma vez que as distribuições individuais são armazenadas no pendrive, o GRUB é instalado e modificado na MBR do pendrive.

Figura 2 O aplicativo baixa automaticamente a distribuição desejada.

Se você tiver criado várias distribuições Linux com o MultiSystem em um pendrive e quiser testar a sua integridade antes de começar a usar o sistema, a janela principal do programa tem dois botões à esquerda das entradas de menu para o GRUB na aba MS. Clicar sobre um dos botões habilita tanto o ambiente Qemu ou o VirtualBox com

a variante do Linux selecionada no menu Iniciar, que também precisa estar no pendrive. O Qemu e VirtualBox são baixados da Internet e colocados em seu disco quando o MultiSystem é instalado; nenhuma configuração adicional é necessária. Você pode ver imediatamente se o seu pendrive foi instalado corretamente.

Menu de inicialização Se você tiver instalado múltiplas variantes de Linux em seu pendrive ou se quiser usar os comandos de inicialização especiais, você pode facilmente modificar o menu de inicialização no MultiSystem. Uma série de botões dispostos horizontalmente em quatro linhas do lado direito da janela do programa irão ajudá-lo a fazer isso. Além de mover e excluir entradas de inicialização, você também pode marcar áreas do pendrive como persistentes para que todos os dados que editar em operações livres possam ser armazenados permanentemente no pendrive. Este recurso depende da distribuição, porém, o MultiSystem não a oferece para todas variantes do Linux (figura 4).

Linux Magazine #90 | Maio de 2012

Figura 3 A imagem ISO é automaticamente armazenada no pendrive.

75


TUTORIAL | Múltiplas distribuições Linux em um pendrive

Figura 4 Uma janela principal fácil de entender lhe dá acesso aos recursos mais importantes.

Gerenciador de inicialização O MultiSystem instala e configura o gerenciador de inicialização de forma autônoma em sua maior parte. Como o aplicativo pode também tornar os sistemas operacionais disponíveis em um dispositivo de memória flash que não cumpra com as especificações do Linux, várias opções de inicialização são criadas sem a intervenção do usuário. Para executar um sistema operacional exótico, como OS/2 Warp da IBM ou o seu sucessor eComStation, a partir do pendrive ou para executar o gerenciador de inicialização e vários arquivos de inicialização de qualquer versão do Windows, o MultiSystem também instala o gerenciador de boot Grub4Dos. Dependendo do sistema operacional que você instalar, poderão ser encontradas as configurações necessárias no Grub4dos. O MultiSystem também instala automaticamente o FreeDOS, um ambiente somente DOS a partir do qual você pode criar um CD de inicialização do DOS. Além disso, é possível selecionar várias opções para o gerenciador de inicialização GRUB escolhendo a opção equivalente no menu. As opções incluem

76

Figura 5 O MultiSystem configura o GRUB com muitas opções.

as definições típicas de segurança, em caso de incompatibilidade de hardware, junto com o gerenciador de inicialização Plop. Você também pode criar o disquete Super GRUB [2] para o caso de a inicialização do sistema ter um problema. Fazer isso permite que, rápido e facilmente, seja possível reconstruir o gerenciador de inicialização se sua configuração estiver com problemas (figura 5).

Problemas na inicialização Se o seu pendrive não é detectado como um dispositivo de inicialização, apesar dos testes bem sucedidos nos ambientes virtuais, o motivo é, provavelmente, a configuração da BIOS. Em alguns computadores, habilitar a mídia USB como a primeira entrada na ordem de inicialização da BIOS não é suficiente, você também precisa ativar o suporte USB BIOS. Verifique o menu de configuração da BIOS do computador por uma opção que faça isso para você. Outro problema que pode ocorrer quando iniciar a partir da USB, especialmente em sistemas de computadores mais antigos é que, em muitos casos, eles não podem ser iniciados a partir de drives USB ou drives ópticos e

discos rígidos externos ligados ao sistema através do barramento USB. Neste caso, o MultiSystem oferece a criação de um CD de inicialização, que é lido quando você iniciar o computador em questão e que depois habilita o pendrive conectado. Para fazer isso, clique em Create CD for booting from USB na aba da janela de inicialização do MultiSystem. O aplicativo, então, lhe pede para baixar o gerenciador de inicialização Plop [3] e abre seu navegador padrão com o site correto. Depois de baixar o arquivo ZIP com o gerenciador de inicialização Plop, o MultiSystem automaticamente gera uma imagem ISO contendo nela o gerenciador de inicialização que você precisa para gravar em um CD (figura 6). Em contraste com o GRUB ou o LILO, o gerenciador de inicialização Plop permite inicializar o sistema a partir de uma mídia USB sem que o sistema do computador tenha suporte da BIOS para a inicialização através de dispositivos USB. Para isso, ele aponta para o gerenciador de inicialização GRUB no pendrive criado pelo MultiSystem, o que depois habilita o sistema operacional adequado. O gerenciador de inicialização Plop oferece esse suporte para as populares versões padrão USB 1.x e 2.0. Durante o teste, não tive pro-

www.linuxmagazine.com.br


Múltiplas distribuições Linux em um pendrive | TUTORIAL

Figura 6 O MultiSystem permite criar um CD de inicialização para iniciar o sistema a partir de uma mídia USB.

blemas usando o pendrive MultiSystem com hardware antigo que não oferece uma opção direta para inicializar a partir de uma mídia USB. Observe que os computadores antigos que suportam somente as especificações USB (1.0 e 1.1) mais velhas serão correspondentemente lentos para iniciar pela USB. No laboratório, o Puppy Linux, que foi instalado e funcionou perfeitamente em uma máquina rápida, levou mais de um minuto para mostrar a área de trabalho em uma máquina antiga.

Personalizações O MultiSystem oferece vários recursos adicionais que garantem um padrão de alta segurança de dados. Na guia Menus da janela do programa, você vai encontrar opções de atualização para o gerenciador de inicialização GRUB, bem como configurações para criar e gerenciar os arquivos persistentes do usuário, pela localização, e posteriormente instalar o VirtualBox (figura 7). Uma opção que parece realmente interessante é a capacidade de criar um backup completo do pendrive ou restaurar o cartão de memória de uma imagem. A aba dos menus tem uma entrada chamada Backup/

Linux Magazine #90 | Maio de 2012

Figura 7 Fácil acesso às configurações de MultiSystem.

Restore, que o leva a uma janela onde você pode armazenar uma imagem em um diretório a sua escolha. Você pode, então, restaurar a imagem usando o mesmo item de menu se você precisar recuperar um pendrive. Em outras palavras, se o seu cartão de memória falhar, não há necessidade de reconstruir seu ambiente anterior através da instalação de todos os sistemas operacionais (figura 8).

Conclusão O MultiSystem pode ser de grande ajuda para usuários que gostam de experimentar, bem como aos administradores de sistemas que gostam de ter vários sistemas disponíveis para uso em um pendrive em seu bolso. O aplicativo permite que você coloque todos os tipos de distribuições Linux em um pequeno dispositivo de memória flash e também oferece software adicional que se comunicam com omputadores que não suportam inicialização USB. Esses recursos eliminam a necessidade da gravação e transporte de mídias ópticas, e você pode testar novas versões Linux em netbooks ou notebooks que normalmente não têm uma unidade de DVD interna. ■

Figura 8 O MultiSystem também oferece um recurso simples de backup e restauração de mídias USB problemáticas.

Mais informações [1] Site do MultiSystem: http:// liveusb.info/dotclear/ [2] Super GRUB Disk: http:// www.supergrubdisk.org/ [3] Gerenciador de inicialização Plop: http://www.plop.at/ de/bootmanager/index.html

Gostou do artigo? igo? Queremos ouvir sua opinião. pinião. Fale conosco em cartas@linuxmagazine.com.br zine.com Este artigo no nosso sso site: s : r/artic 6819 http://lnm.com.br/article/6819

77


PREVIEW

Linux Magazine #91 Automação Com o aumento da dependência de sistemas e o crescimento dos parques computacionais das empresas, qualquer tarefa que possa ser automatizada, facilita ao trabalho e representa um aumento de produtividade, liberando a equipe para aquelas tarefas que são realmente importantes. Como obter esses ganhos, você poderá conferir na Linux Magazine #91. ■

Admin Magazine #06 Monitoramento Na Admin Magazine #06, você irá conhecer as melhores opçoes em softwares para monitoramento de sistemas. Seja em redes Linux, Windows ou mesmo em redes mistas, o monitoramento de redes e sistemas está presente no dia a dia de nove entre dez administradores de sistemas. Se você é um deles, não perca nossa próxima edição!

82

www.linuxmagazine.com.br


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.