Was ich nicht weiß
Expediente editorial
Editores Flávia Jobstraibizer fjobs@linuxmagazine.com.br Laura Loenert Lopes llopes@linuxmagazine.com.br Editora de Arte Larissa Lima Zanini llima@linuxmagazine.com.br Colaboradores Alexandre Borges, Augusto Campos, Cezar Taurion, Charly Kühnast, Chris Binnie, Christoph Langner, Falko Benthin, Gilberto Magalhães, Jon ‘maddog’ Hall, Jörg Luther, Klaus Knopper, Kurt Seifried, Thomas Drilling, Thomas Leichtenstern, Thomas Zeller, Tim Schürmann, Zack Brown. Tradução Laura Loenert Lopes, Sebastião Luiz da Silva Guerra, Emerson Satomi Revisão Ana Carolina Hunger. Editores internacionais Uli Bantle, Andreas Bohle, Jens-Christoph Brendel, Hans-Georg Eßer, Markus Feilner, Oliver Frommel, Marcel Hilzinger, Mathias Huber, Anika Kehrer, Kristian Kißling, Jan Kleinert, Daniel Kottmair, Thomas Leichtenstern, Jörg Luther, Nils Magnus. Anúncios: Rafael Peregrino da Silva (Brasil) anuncios@linuxmagazine.com.br Tel.: +55 (0)11 3675-2600 Penny Wilby (Reino Unido e Irlanda) pwilby@linux-magazine.com Amy Phalen (América do Norte) aphalen@linuxpromagazine.com Hubert Wiest (Outros países) hwiest@linuxnewmedia.de Diretor de operações Claudio Bazzoli cbazzoli@linuxmagazine.com.br Na Internet: www.linuxmagazine.com.br – Brasil www.linux-magazin.de – Alemanha www.linux-magazine.com – Portal Mundial www.linuxmagazine.com.au – Austrália www.linux-magazine.es – Espanha www.linux-magazine.pl – Polônia www.linux-magazine.co.uk – Reino Unido www.linuxpromagazine.com – América do Norte Apesar de todos os cuidados possíveis terem sido tomados durante a produção desta revista, a editora não é responsável por eventuais imprecisões nela contidas ou por consequências que advenham de seu uso. A utilização de qualquer material da revista ocorre por conta e risco do leitor. Nenhum material pode ser reproduzido em qualquer meio, em parte ou no todo, sem permissão expressa da editora. Assume-se que qualquer correspondência recebida, tal como cartas, emails, faxes, fotografias, artigos e desenhos, sejam fornecidos para publicação ou licenciamento a terceiros de forma mundial não-exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado. Linux é uma marca registrada de Linus Torvalds. Linux Magazine é publicada mensalmente por: Linux New Media do Brasil Editora Ltda. Rua São Bento, 500 Conj. 802 – Sé 01010-001 – São Paulo – SP – Brasil Tel.: +55 (0)11 3675-2600 Direitos Autorais e Marcas Registradas © 2004 - 2012: Linux New Media do Brasil Editora Ltda. Impressão e Acabamento: Prol Gráfica Atendimento Assinante www.linuxnewmedia.com.br/atendimento São Paulo: +55 (0)11 3675-2600 Rio de Janeiro: +55 (0)21 3512 0888 Belo Horizonte: +55 (0)31 3516 1280 ISSN 1806-9428
Linux Magazine #98 | Janeiro de 2013
Impresso no Brasil
...macht mich nicht heiß. Este ditado alemão é a variante teutônica do brasileiríssimo “O que os olhos não veem o coração não sente”. Recentemente, em uma conversa com Jon ‘maddog’ Hall, ficou patente para o autor destes mal-digitados caracteres que a ignorância de certos fatos pode significar uma portentosa oportunidade perdida para os proponentes de várias causas e mesmo para o mercado para o qual tais fatos sejam relevantes. Em 2007 (mais especificamente no dia 12 de janeiro), em um experimento idealizado por Gene Weingarten, colunista do jornal americano The Washington Post, o aclamado violinista estadunidense Joshua Bell tocou incógnito em uma estação de metrô da capital dos Estados Unidos, em condição equivalente a um artista de rua, o mesmo repertório para o qual foi cobrada uma média de 100 dólares por ingresso na noite anterior em uma sala de concertos na cidade de Boston – e que esgotaram-se com bastante antecedência. Das 1.097 pessoas que passaram por ele, Bell recebeu um total de US$ 32,17 durante os 45 minutos de sua performance, à exceção dos 20 dólares recebidos de um transeunte que o reconheceu. Além deste, apenas outras 7 pessoas pararam para ouvi-lo tocar, a maioria crianças. Todo o experimento foi gravado por uma câmera oculta e o artigo a respeito, que foi publicado em 2008 no The Washington Post, rendeu um prêmio Pulitzer a Weingarten (Pearls Before Breakfast). Está acontecendo a mesmíssima coisa no mundo da tecnologia atualmente. E o artista incógnito tem um nome bem conhecido: Linux! O sistema operacional se tornou onipresente nas duas pontas que são os motores das tecnologias que movem o nosso mundo: Cloud Computing e dispositivos móveis e/ou embarcados. Android, Tizen, Bada, WebOS Firefox OS e uma miríade de outros sistemas operacionais para dispositivos móveis baseados no kernel Linux dominam o mercado desse tipo de equipamento, o mesmo valendo para leitores de livros eletrônicos, sistemas de entretenimento veicular, aparelhos GPS, consoles de jogos, set-top boxes, impressoras multifuncionais, câmeras digitais, projetores, roteadores Wi-Fi, eletrodomésticos (Smart TVs de praticamente todos os fabricantes, sistemas de automação residencial e até mesmo geladeiras), além de plataformas para prototipagem eletrônica de hardware (Arduino, Raspberry Pi). No entanto, quase ninguém sabe disso. Na referida conversa com maddog, aventamos a possibilidade de retomar uma antiga campanha, solicitando a todos os fabricantes de dispositivos que usem o Linux como base tecnológica a utilização de um selo com os dizeres “Linux Inside” em seus produtos. Essa abordagem traria inúmeras vantagens tanto para o consumidor desse tipo de solução quanto para o mercado em torno da tecnologia. Sempre que encontrasse a indicação do uso de Linux em um equipamento, o consumidor saberia que se trata de tecnologia robusta e avançada: um sinônimo de qualidade. E o mercado, que já vive um momento de escassez de mão de obra de profissionais Linux sem precedentes, ganharia um impulso para a formação de novos técnicos com esse tipo de especialidade, já que o Linux estaria na boca de todos (leigos e profissionais). Que tal abrirmos os olhos, então, e, enquanto essa campanha não vem, espalharmos a “novidade”? ■
EDITORIAL
Diretor Geral Rafael Peregrino da Silva rperegrino@linuxmagazine.com.br
Rafael Peregrino da Silva Diretor de Redação 3
ÍNDICE
CAPA Sem conflitos
33
Acabaram-se os tempos traumatizantes onde sistemas distintos geravam problemas quando presentes em uma mesma rede. Combinação perfeita
34
Com alguns poucos truques é possível fazer com que instalações Windows conversem com partições ext Linux. Inicialização dupla
38
Fazer o Windows funcionar bem com uma instalação Linux preexistente é difícil. Mas, com alguns truques, é possível configurar o Windows 8 em dual-boot com Linux. Amigos convidados
42
Como o Windows 8 funciona em uma máquina virtual? Testamos a última versão do Windows como um sistema hóspede no VMware Workstation e no VirtualBox para Linux. Linux e Windows 8 na rede
46
A configuração do Samba pode falhar quando ignoramos pequenas coisas. Neste artigo, mostraremos como configurar um sistema Linux para compartilhamento de arquivos em uma rede Windows 8 ponto a ponto.
4
www.linuxmagazine.com.br
Linux Magazine 98 | ÍNDICE
ANÁLISE
COLUNAS Klaus Knopper
08
Charly Kühnast
10
Augusto Campos
11
Alexandre Borges
12
Kurt Seifried
14
Zack Brown
18
Clique para o futuro
72
NOTÍCIAS Geral
20
➧ Slax volta à vida depois de anos paralisado ➧ Linux não irá mais funcionar em máquinas i386
O HTML5 oferece uma série de recursos que não necessitam de plugins Flash ou Java para funcionar. Com isso, surgem novas opções de acesso móvel a aplicativos na rede local.
CORPORATE Notícias
22
SEGURANÇA
➧ Cinco novos membros filiam-se à Linux Foundation ➧ Oracle do Brasil muda-se para um novo escritório em São Paulo
Licença para gerenciar
Entrevista com Djalma Andrade
23
Entrevista com Nuno Simões
26
Coluna: Jon “maddog” Hall
28
Coluna: Cezar Taurion
30
Coluna: Gilberto Magalhães
32
60
ANDROID Adeus aos indesejados
54 Se oferecermos a usuários supervisionados mais espaço para ajudarem a si mesmos, eles precisarão de privilégios adicionais. A ferramenta sudo e o serviço de autorização PolicyKit podem controlar quem faz o que no Linux.
REDES Chamadas irritantes de telemarketing ou perseguidores anônimos atormentam a sua vida com ligações fora de hora? Aplicativos criados especificamente para bloquear chamadas e mensagens
O melhor amigo do administrador
56
de texto livram a sua vida desses problemas rapidamente..
TUTORIAL Gerenciamento distribuído
66
O excelente Netcat é muitas vezes referenciado como o “canivete suíço” de redes; dizer que ele é versátil é o maior eufemismo que podemos usar para conceituar esta ferramenta.
SERVIÇOS Conheça o Git, sistema distribuído de controle de versão que garante a integridade e consistência de dados com segurança e esforço mínimo.
Linux Magazine #98 | Janeiro de 2013
Editorial Emails Linux.local Preview
03 06 78 82
5
Coluna do Augusto
COLUNA
Novo membro da Internet Society Uma reflexão acerca da adesão da Fundação Mozilla à Internet Society.
N
este início de ano gostaria de provocar a reflexão de todos a partir de uma notícia que quase passou despercebida no final de 2012: a adesão da Fundação Mozilla à Internet Society, na condição de membro na categoria Prata. A Internet Society (ISOC), fundada em 1992, é uma organização internacional (com sedes em Washington e Genebra) sem fins lucrativos e relativamente discreta – é até possível que você jamais tenha ouvido falar nela. Mas esta organização tem atuação fundamental no funcionamento da Internet, oferecendo liderança nos processos de definição de padrões e políticas relacionados à rede, sempre associados à sua missão de assegurar o uso, evolução e desenvolvimento abertos da Internet para o benefício de todas as pessoas do mundo. Um dos produtos mais visíveis da ISOC, lançados por meio do IETF (organização técnica ligada a ela) são as RFCs, documentos que propõem e definem padrões e protocolos como o HTTP e os diversos serviços de e-mail, autenticação e tudo o mais que trafega entre nossos desktops e servidores. A Mozilla agora faz parte dessa estrutura. Não é propriamente uma novidade, pois ela já vinha participando ativamente de grupos de trabalho do IETF há anos. Mas com o passar dos anos, as atividades da Mozilla foram se aproximando cada vez mais das camadas básicas de software (afinal, agora ela faz até sistema operacional), e se aproximando de um número cada vez maior de grupos. Uma coisa leva a outra, e no final de 2012 a Mozilla acabou se inscrevendo como membro do ISOC, na categoria Prata, o que corresponde a uma contribuição anual de US$12.500 para a organização – que a Mozilla destaca estar em sintonia com sua própria missão de promover a abertura, inovação e oportunidade na web. Não é pouca coisa: na mesma categoria estão empresas como Google, as operadoras de telefonia Verizon e AT&T e a fabricante de equipamentos de conectividade Huawei.
Linux Magazine #XX | Mês de 200X
Agora, na virada do ano, ver a Fundação Mozilla influenciando de forma direta o desenvolvimento dos padrões para os quais iniciou desenvolvendo aplicativos-cliente mostra uma direção importante na qual a Mozilla avançou desde 2003, e um exemplo de relevância das organizações de código aberto. As mudanças pelas quais a Mozilla – cujos recursos financeiros provêm majoritariamente de um acordo com o Google –, passou recentemente foram muitas: aderiu ao codec proprietário H.264, passou a oferecer integração aos serviços do Facebook no Firefox, anunciou seu próprio sistema operacional para celulares e outros projetos. Agora, na virada do ano, ver a Fundação Mozilla influenciando de forma direta o desenvolvimento dos padrões para os quais iniciou desenvolvendo aplicativos-cliente mostra uma direção importante na qual a Mozilla avançou desde 2003, e um exemplo de relevância das organizações de código aberto. ■ 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.
11
Coluna do Alexandre Borges
COLUNA
NMAP – sexta parte Conheça as ferramentas específicas para escaneamento de rede, do Nmap.
Q
uando iniciei esta série de colunas a respeito do NMAP, meu objetivo foi lançar alguma luz sobre o excelente uso desta ferramenta (que todo mundo conhece e já precisou utilizar em algum momento) e tentar mudar o conceito de que “usar o NMAP é trivial” pois, sinceramente, acredito que não seja. É por isso que vou reapresentar outras alternativas de escaneamento de redes este mês. Muitos analistas sempre comentam a respeito dos tipos XMas, FIN and NULL de escaneamento e o quanto eles podem ajudar na terefa de descobrir eventualmente portas abertas em sistemas que não apresentaram respostas convicentes quando testados com opções conhecidas do NMAP. É verdade e isto tem um bom fundo de razão. Existem diversos firewalls com regras voltadas para pacotes SYN, ACK, RST, e regras com outros parâmetros TCP são esquecidas, o que tem o potencial de revelar informações interessantes. E como são estes modos de escaneamento? XMas (opção -sX): é um escaneamento onde o NMAP envia pacotes combinando os parâmetros FIN, PUSH e URG. Muitos firewalls ignoram esta possibilidade. Exemplo: # nmap -sX 192.168.1.1
FIN (opção -sF): o NMAP envia pacotes apenas com o parâmetro FIN setado em 1. Exemplo: # nmap -sF 192.168.1.1
Null (opção -sN): são enviados pacotes sem qualquer parâmetro setado em 1. Exemplo: # nmap -sN 192.168.1.1
12
Em todos estes casos, quando nenhuma resposta é recebida, a porta ou está aberta ou foi filtrada (a resposta foi bloqueada pela presença de um firewall). Existem dois problemas cruciais nestes modos de escaneamento: o primeiro é que alguns sistemas operacionais como Windows e equipamentos da CISCO simplesmente ignoram a RFC 793 (que, entre outras coisas, diz que, para qualquer pacote que não contenha SYN, ACK ou RST não deve ser retornada qualquer resposta caso a porta esteja aberta ou que deve ser retornado um pacote com o parâmetro RST caso a porta esteja fechada). Em outras palavras, este tipo de escaneamento pode ser eficaz contra máquinas UNIX onde não importa qual a combinação de URG, PSH e FIN façamos uso, entretanto é inútil contra máquinas com Windows. O segundo problema advém facilmente da explicação do primeiro obstáculo já que, mesmo em sistemas que seguem a RFC 793, se não há resposta por parte dos mesmos no caso de porta aberta, como podemos interpretar isto? Se o NMAP não recebe resposta, o motivo pode ser porque o firewall a bloqueou ou ainda porque a porta está de fato aberta. Isso sem dúvida torna este modo de escaneamento ambíguo e seu valor apenas é evidente quando comparado com outros escaneamentos no mesmo alvo para que possamos confirmar se uma porta está de fato aberta ou fechada. Indo além, uma opção interessante e usual é a opção -sA, que realiza um escaneamento usando pacotes com o parâmetro ACK setado. A ideia não é avaliar se a porta está ou não aberta (onde a resposta para escaneamentos destes tipo sempre retorna
www.linuxmagazine.com.br
um pacote com o parâmetro RST), e sim, se existe ou não um firewall do tipo stateful bloqueando as portas de interesse (retornando filtered ou unfiltered). Este é um ponto que vale a pena ressaltar: o ACK é muito útil quando utilizado em conjunto com outros tipos de escaneamento de modo que ele mesmo pode confirmar a resposta obtida pois, às vezes, ficamos na dúvida quanto a resposta (porta aberta ou filtrada). Um comando de exemplo pode ser: # nmap -sA -T3 192.168.1.1
De maneira similar, todavia com resposta diferente do ACK, existe o TCP Windows Scan, que é implementado pela opção -sW explorando diferenças de implementações da pilha TCP e, com isso, sendo capaz de distinguir entre portas abertas e fechadas. Já encontrei situações onde este método combinado com outros pode ser usado para confirmar o estado de uma porta. Um exemplo é: # nmap -sW -T2 192.168.1.1
É incrível, mas estes não são os únicos escaneamentos “esotéricos”. É factível utilizar a opção --scanflags para realizar outros conjuntos de regras que, eventualmente, podem contornar um firewall. Exemplo:
Linux Magazine #XX | Mês de 200X
# nmap --scanflags SYNFIN 192.168.1.1 Starting Nmap 6.01 ( http://nmap.org ) at 2012-12-10 18:36 BRST Nmap scan report for 192.168.1.1 Host is up (0.026s latency). Not shown: 998 closed ports PORT STATE SERVICE 80/tcp open http 113/tcp filtered ident MAC Address: 98:FC:11:C8:73:86 (Cisco-Linksys) Nmap done: 1 IP address (1 host up) scanned in 14.89 seconds
Por favor, repare que não incluí estes parâmetros apenas por acaso, pois muitos firewalls (dependendo) de suas configurações têm por hábito bloquear pacotes que possuem apenas parâmetros SYN setados, entretanto, não tomam qualquer ação com relação à combinações como a apresentada. Existem outras combinações de parâmetros que podem resultar em sucesso: SYN+URG, SYN+RST e SYN+URG+FIN+PSH. No mês que vem volto com a última parte deste mini tutorial a respeito de Nmap. Até mais. ■ 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.
13
Windows 8
CAPA
Sem conflitos Acabaram-se os tempos traumatizantes onde sistemas distintos geravam problemas quando presentes em uma mesma rede. por Flávia Jobstraibizer
A
tualmente não existem mais grandes problemas relacionados à convivência entre sistemas Windows e Linux em uma mesma rede. É possível operar entre os distintos sistemas de arquivos dos dois sistemas, operar aplicativos em uma camada de compatibilidade e até mesmo compartilhar dos mesmos usuários, através de ferramentas como OpenLDAP e Active Directory. Tudo isso sem conflitos e sem percalços. Nesta edição da Linux Magazine, vamos abordar a incrível ferramenta Samba, utilizada mundialmente para realizar a compatibilidade entre Windows e Linux através do protocolo SMB. O Samba é uma ferramenta imprescindível nos ambientes mistos com os quais comumente nos deparamos no dia a dia. Tão imprescindível quanto o Samba, fazer com que o Windows acesse e trabalhe harmoniosamente com partições Linux é um desafio que pode ser resolvido através de algumas incríveis ferramentas que apresentaremos nessa edição. Com o lançamento da nova versão do Windows e tantas especulações que envolvem o UEFI, surgiram muitas dúvidas sobre o bom funcionamento do sistema operacional da Microsoft em conjunto com o Windows. Saiba tudo o que envolve a instalação e uso de sistemas dual-boot com as novas versões das distribuições. E em uma edição recheada de informações sobre o Windows 8, não poderia faltar um artigo sobre o funcionamento deste em máquinas virtuais! Saiba como funciona o Windows 8 em VMs Virtualbox no Linux! Também imperdível é a entrevista que realizamos com Djalma Andrade, da Microsoft e que aborda não só o tema de interoperabilidade, mas também as academias da interoperabilidade entre sistemas open source e Windows criadas pela Microsoft e que auxiliam na capacitação de profissionais ligados à sistemas mistos. Enfim, uma edição imperdível, para começar 2013 com o pé direito! Boa leitura! ■
Matérias de capa Combinação perfeita Inicialização dupla Amigos convidados Linux e Windows 8 na rede
34 38 42 46
SEÇÃO | Matéria
Bloqueio de chamadas e SMS
ANDROID
Adeus aos indesejados Chamadas irritantes de telemarketing ou perseguidores anônimos atormentam a sua vida com ligações fora de hora? Aplicativos criados especificamente para bloquear chamadas e mensagens de texto livram a sua vida desses problemas rapidamente. por Christoph Langner e Flávia Jobstraibizer
C
omumente somos importunados por ligações (ou mensagens de texto) de pessoas com as quais não desejamos mais falar. Estas podem ser: vendedores insistentes, ex-namorados e até mesmo propagandas de partidos políticos – e que podem ser consideradas spam quando enviadas através de não solicitadas mensagens de texto. Conheça neste artigo algumas das ferramentas mais poderosas para bloquear estes intrusos efetivamente e esqueça-se deles por completo!
O aplicativo destaca-se em nossa seleção por possuir uma superfície bem implementada e foco na tarefa principal. O aplicativo realizou seu trabalho perfeitamente e não é cheio de recursos inúteis, entretanto requer acesso root, já que, para livrar o usuário de chamadas indesejadas ele acessa as entranhas do sistema. A versão gratuita do aplicativo é apenas demonstrativa e só pode gerenciar uma entrada na lista negra que na versão Pro (vendida
por R$14,00 na loja do Google) pode ser individualmente modelada pelo usuário, permitindo a entrada manual de contatos individuais (figura 1) ou a partir do seu catálogo de endereços. Seu recurso principal é bloquear todos os números que comecem com 0800 ou 0300 (figura 2), por exemplo. Ele também permite bloquear automaticamente todas as chamadas telefônicas, exceto as de seus contatos armazenados na agenda. O aplicativo
Figura 1 Inclusão manual de usuários
Figura 2 Bloqueio por todas as
Root Call Blocker Pro A maioria das perturbações sofridas através de mensagens de texto ou ligações indesejadas deveriam ser esclarecidas diretamente com uma simples conversa ou até mesmo uma denúncia, mas você também pode lutar contra isso com pura tecnologia. Na Play Store há inúmeros aplicativos bloqueadores de chamadas e SMSs que evitam esse tipo de aborrecimento. Muitos destes aplicativos, no entanto, são uma catástrofe: tecnicamente mal implementados e com interfaces de difícil uso, bem diferente de um aplicativo excelente, o Root Call Blocker (versão Pro), que nos causou uma boa impressão.
54
indesejados.
chamadas oriundas de 0800.
www.linuxmagazine.com.br
Bloqueio de chamadas e SMS | ANDROID
pode encaminhar chamadas direto para a caixa postal ou ignorá-la completamente, de modo que a pessoa que está ligando ouve o sinal de chamada, mas nada acontece no telefone que está recebendo a chamada – um recurso único deste aplicativo. Desta forma, o insistente ligador (ou a sua sogra) não irá sequer desconfiar de que está sendo bloqueado por você. Perfis diferentes, agenda de horários para bloqueios e respostas por SMS geradas automaticamente completam os recursos deste aplicativo.
Recursos do Android Nem sempre você precisa de um aplicativo externo: o Android possui nativamente o recurso de encaminhamento de chamadas diretamente para a caixa postal. A opção pode ser encontrada em sua agenda de contatos e configurada separadamente para cada contato cujas chamadas devem ser encaminhadas diretamente para a caixa postal. Caso algum desses contatos bloqueados tentem entrar em contato, o telefone não emitirá nenhum som. O usuário não será sequer informado sobre a chamada recebida a menos que o contato deixe um recado em sua caixa postal. O filtro é limitado apenas à chamadas, os SMS ainda poderão chegar até sua caixa de entrada. A localização deste recurso pode variar. Na versões anteriores ao Android Jelly Bean, pode ser encontrada em Configurações (ou Config), Configurações de chamada, Lista de números permitidos. No Jelly Bean a opção fica em Configurações, Modo de bloqueio, Contatos permitidos.
mensagens recebidas – desta forma, mensagens de texto bloqueadas ainda podem ser lidas posteriormente.
GData Mobile Security 2 Se você instalou o GData Security Mobile 2 apenas para bloquear chamadas indesejadas e SMS, está naturalmente usando uma bazuca para matar uma mosca. O bloqueador de chamadas e SMS funcionou de forma confiável em nossos testes. As chamadas bloqueadas podem ser vistas posteriormente em uma lista, mas os SMS desaparecem no limbo, sem que haja a menor possibilidade de você poder retornar o chamado. E pela bagatela de quase R$46,00, o aplicativo é um tanto quanto salgado para fazer o mesmo que outros aplicativos mais baratos (ou até gratuitos) fazem (figura 4).
BlackList O BlackList perdeu pontos já na primeira vez em que foi executado. Na tela de boas-vindas, uma
imagem de propaganda para um completamente inútil Ram Booster de outro desenvolvedor foi exibida de forma insistente (propagandas não são encontradas na versão Pro, que custa cerca de R$7,00). É necessário gastar algum tempo para acostumar-se com a interface um tanto confusa e coalhada de anúncios que aparecem do nada. Todavia, ele cumpriu a sua missão em nosso teste. Interessante é o recurso de enviar automaticamente uma mensagem de texto SMS com os dados da ligação bloqueada. Existe uma infinidade de aplicativos destinados exclusivamente à bloqueio de chamadas e mensagens. Se nenhum destes atendeu à sua necessidade e você encontrou aplicativos melhores (ou perfeitos), não deixe de nos contar sua experiência! ■
Gostou do artigo? igo? Queremos ouvir sua opinião. o nião. m Fale conosco em cartas@linuxmagazine.com.br ne.com Este artigo no nosso sso site: s e: r/artic 811 http://lnm.com.br/article/8112
NQ Call Blocker A versão básica gratuita e suportada por anúncios do NQ Call Blocker cumpre o que promete. Chamadas ou SMS de contatos que foram colocados por você na lista negra, são bloqueadas pelo aplicativo de forma confiável (figura 3). Caso queira, o aplicativo ainda informa sobre as chamadas e
Linux Magazine #98 | Janeiro de 2013
Figura 3 O aplicativo fornece um relatório das chamadas e SMSs bloqueados.
Figura 4 O Mobile Secutiry é relativamente caro por fazer o mesmo que seus concorrentes gratuitos.
55
SEGURANÇA | Sudo e PolicyKit
Sudo e PolicyKit
SEGURANÇA
Licença para gerenciar Se oferecermos a usuários supervisionados mais espaço para ajudarem a si mesmos, eles precisarão de privilégios adicionais. A ferramenta sudo e o serviço de autorização PolicyKit podem controlar quem faz o que no Linux. por Tim Schürmann
P
ara os administradores, seria um alívio se os usuários regulares fossem capazes de lidar com tarefas menores de gerenciamento, tais como atualização de software. O único problema é que o apt-get requer privilégios administrativos e o leitor possivelmente não iria desejar concedê-los a um usuário leigo. Felizmente, os administradores podem contar com o sudo ou com o serviço de autorização PolicyKit para permitir ações específicas de forma orientada.
Sudo As ferramentas sudo executam comandos com uma conta de usuário diferente. Para o apt-get upgrade, este seria um usuário todo-poderoso. Quais
usuários possuem permissão para usar o sudo e com quais programas está definido no arquivo de configuração /etc/sudoers. Por exemplo, para permitir que o usuário klaus atualize seu próprio computador chamado marvin, devemos adicionar a seguinte linha ao arquivo /etc/sudoers: klaus marvin=(ALL) NOPASSWD: /usr/bin/apt-get upgrade
A linha começa com o nome do usuário e é seguida pelo host onde klaus tem permissão para executar o comando. Neste caso, ele deve trabalhar em seu próprio computador, marvin. Se klaus visualizar a mensagem de erro klaus is not allowed to run sudo on... ao executar o apt-get upgrade, isto
provavelmente tem algo a ver com a resolução de nomes. O administrador deve verificar se os hostnames especificados batem com a saída do comando hostname e fazer uma verificação cruzada com o conteúdo do arquivo /etc/hosts. Especificar ALL ao invés do hostname, significa que klaus pode executar o apt-get upgrade em qualquer máquina. Como uma alternativa para o hostname, podemos também especificar o endereço IP. Para um intervalo de endereço, basta definir a subrede: klaus 192.168.2.0/255.255.255.0= (ALL)NOPASSWD:/usr/bin/ apt-get upgrade
Neste caso, o usuário klaus só pode executar o comando se trabalhar em uma máquina com um endereço IP no intervalo de 192.168.2.1 a 192.168.2.254. O sudo executa um comando em uma conta de usuário diferente. Os detalhes dos parênteses especificam quais contas klaus pode escolher. Especificar tim significaria que klaus só poderia iniciar o programa como usuário tim. ALL permite que klaus escolha qualquer conta de usuário, incluindo o usuário root necessário para o apt-get: sudo -u root apt-get upgrade
Figura 1 No Linux Mint, a chamada para visudo só protege o arquivo sudoers contra um acesso mais detalhado e, então, chama o nano.
60
A opção -u para o usuário desejado é opcional no caso do root. Antes do sudo executar o comando apt-get upgrade, klaus normalmente precisa
www.linuxmagazine.com.br
Sudo e PolicyKit | SEGURANÇA
digitar sua senha. Isto não é necessário se colocarmos NOPASSWD: na frente do nome do programa no arquivo de configuração. O comando a ser executado vem no final da linha. Se quisermos deixar klaus executar vários programas ou comandos, basta acrescentarmos uma lista separada por vírgulas: klaus marvin=(ALL)NOPASSWD:/usr/ bin/apt-get update,/usr/bin/ apt-get upgrade
Neste caso, klaus pode atualizar o banco de dados de pacotes e instalar atualizações, mas não pode instalar novos programas. O ALL universal pode ser também usado para outros parâmetros. A linha a seguir torna klaus equivalente ao usuário root: klaus ALL=(ALL) ALL
Como uma alternativa para usuários individuais, o arquivo sudoers também pode conceder acesso a todos os membros de um grupo, como admin: %admin ALL=(ALL) ALL
O sinal de porcentagem declara ao sudo que este é um grupo e não um usuário individual, que é como o Ubuntu concede acesso aos recursos do sistema a todos os administradores. A listagem 1 mostra o arquivo de configuração sudoers para o Ubuntu; deixamos de fora os comentários para facilitar a leitura: root, os usuários do grupo admin e sudo podem fazer tudo, e os demais usuários não podem fazer nada. O segundo ALL entre parênteses indica o nome do grupo com permissão de acesso; assim, klaus pode executar o comando como qualquer usuário de qualquer grupo. Cada linha que começa com Defaults altera uma configuração padrão no sudo. Na listagem 1, env_reset redefine as variáveis de ambiente, e secure_path define a variável PATH (ou seja, os diretórios onde o Linux pode encontrar os programas a serem executados). Ambas as medidas são projetadas para tornar ataques mais difíceis. Normalmente,
Linux Magazine #98 | Janeiro de 2013
o sudo guarda a senha introduzida. A linha a seguir também é útil:
forma, podemos descobrir qual usuário sofreu interferência.
Defaults timestamp_timeout=15
Dança perigosa
Ela declara que o sudo deve esquecer a senha para todos os usuários após 15 segundos. Se a definirmos para 0, os usuários precisarão digitar suas senhas cada vez que executarem o sudo. Para os outros padrões, veja a página man (man 5 sudoers). Dentro de /etc/sudoers, um ponto de exclamação nega uma definição. Isto permite que o administrador previna klaus de executar um programa específico. Para fazer isso, basta adicionar um ponto de exclamação na frente do nome do programa. No exemplo a seguir, klaus não tem permissão para reinicializar o computador:
O sudo é perigoso em vários aspectos. Por exemplo, apenas um pequeno erro de digitação ou uma exclamação fora de lugar podem bloquear completamente o sistema. Note que isso pode acontecer com regras que podemos esperar que não possuam tal efeito. Portanto, os administradores só devem editar o arquivo /etc/sudoers com a ferramenta visudo criada expressamente para este fim. Entre outras coisas, este editor verifica a sintaxe do arquivo de configuração. Contrariamente ao que o vi no nome implica, o editor subjacente em algumas distribuições hoje é o nano (figuras 1 e 2). No Ubuntu, a ferramenta deixar passar erros de digitação óbvios em nosso laboratório, por isso não devemos confiar demais nela. Em muitas distribuições Linux, é prática padrão alterar as regras escritas em um arquivo de configuração
klaus marvin=(ALL) !/sbin/reboot
Todas as chamadas sudo fracassadas geralmente acabam no arquivo syslog, enquanto o Ubuntu usa o arquivo /var/log/auth.log. Desta
Figura 2 O OpenSUSE usa o famoso vi, que suporta syntax highlighting – ainda que seja um pouco exagerada.
61
SEGURANÇA | Sudo e PolicyKit
separado e armazená-las no diretório /etc/sudoers.d. A linha: #includedir /etc/sudoers.d
em /etc/sudoers garante que o sudo leia automaticamente e avalie todos os arquivos de texto no diretório /etc/ sudoers.d. O # do início da linha não introduz um comentário; é parte do comando. Com a terceirização, um administrador pode simplesmente excluir os arquivos de configuração adicionais para retornar o antigo estado, no caso de um erro. No entanto, a cautela também é aconselhada com estas regras adicionais. Se klaus no exemplo a seguir também for membro do grupo admin, ele pode executar qualquer ferramenta do sistema – não apenas /sbin/reboot: klaus marvin=(ALL) NOPASSWD:/sbin/reboot %admin ALL=(ALL) ALL
Em um ambiente de produção, as dependências para quais regras estão sujeitas nem sempre são tão evidentes.
Como mitigar o risco Para acessar as ferramentas do sistema, o sudo utiliza o bit setuid. O comando, portanto, sempre executa com privilégios de root. Apenas o próprio sudo impede um usuário comum de executar comandos de forma arbitrá-
ria no sistema. Para descobrir quais direitos são concedidos ao sudo, podemos simplesmente digitar sudo -l. Executar o comando sem uma senha, especificando NOPASSWD, é conveniente para os usuários. No entanto, a prática também é arriscada, pois um usuário poderia executar comandos sem pensar que comprometeriam o sistema, e um malware poderia iniciar ferramentas de sistema em segundo plano, sem que o administrador percebesse. Finalmente, devemos sempre especificar o caminho completo para os programas; caso contrário, o sudo deixaria de executar o apt-get original, mas executaria um programa malicioso com o mesmo nome que tenha sido injetado no caminho de pesquisa.
Serviço de autorização PolicyKit O PolicyKit habilmente trilha seu caminho em torno de problemas de permissão e riscos de segurança [1] com uma abordagem completamente diferente: se o usuário klaus deseja instalar um pacote, o gerenciador de pacotes primeiro pergunta ao PolicyKit se esta é uma ação permitida. O PolicyKit pode então imediatamente oferecer o sinal verde para que klaus siga em frente ou então solicita
Diretório:
Objetivo:
10-vendor.d /
Regulamentação de fornecedor
20-org.d
Regras por parte da organização que faz a distribuição
30-org.d
Regras por parte do site que faz a distribuição
50-local.d
Regras próprias ou locais
90-mandatory.d
Regras por parte da organização que faz a distribuição
Tabela 1 Diretórios para regras PolicyKit.
Figura 3 Um agente de autenticação no Ubuntu. Ao expandir a janela de detalhes, a tela mostra a ação para a qual o programa solicita autorização.
62
uma senha. Em contraste com o sudo, o PolicyKit regula recursos (de sistema) individuais. Assim, o administrador pode permitir que klaus atualize pacotes e permita a instalação de novos pacotes. O PolicyKit passou por uma mudança de conceito durante seu desenvolvimento. A versão atual é normalmente referida como PolicyKit-1, ou, abreviadamente, polkit. De forma um tanto confusa, não chegou a se tornar versão 1; a versão mais recente quando do fechamento desta edição era a 0.107. Apesar do zero na frente do ponto, o sistema PolicyKit é estável em distribuições como Ubuntu, Fedora e openSUSE – e tem sido assim há anos. A essência do PolicyKit é o serviço polkitd. Como ele só precisa responder a solicitações de ferramentas
Quadro 1: Programa de ação Policykit Ferramentas do sistema primeiro precisam registrar as ações suportadas com PolicyKit, para que cada programa armazene um arquivo XML no subdiretório /usr/ share/polkit-1/actions para esta finalidade. Por exemplo, os serviços oferecidos pelo Network Manager estão localizados no arquivo org.freedesktop.NetworkManager. policy. Uma ação ligeiramente reduzida é mostrada na listagem 3. O id= na linha 1 é seguido pela mensagem D-Bus enviada pelo programa; o <description> na linha 2 fornece uma breve descrição da ação, e <mensagem> é a mensagem que o usuário visualiza na tela de senha. Para cada ação, o desenvolvedor do programa pode definir permissões padrão dentro do elemento <defaults> (linhas 4 a 7). No exemplo acima, apenas os administradores são autorizados a modificar a configuração da rede. Os detalhes e valores possíveis aqui correspondem aos dos arquivos .pkla. Nunca devemos modificar os arquivos .policy diretamente: por um lado, isso poderia causar uma vulnerabilidade; de outro, a distribuição poderia sobrescrever suas alterações durante a atualização do sistema. É melhor, portanto, usar seu próprio arquivo .pkla.
www.linuxmagazine.com.br
Sudo e PolicyKit | SEGURANÇA
do sistema, é executado em uma conta restrita. Portanto, ninguém pode usá-lo para roubar o sistema. O polkitd fornece seus recursos através do sistema de comunicação D-Bus. Como alternativa, os programas podem usar também a biblioteca libpol-kit-gobject-1, que encapsula as chamadas D-Bus correspondentes. Um componente LocalAuthority verifica se a ação solicitada pelo PolicyKit é permitida. Como o nome indica, sua decisão leva em conta as contas de usuários e grupos que existem localmente no computador. Se uma entrada de senha é necessária, o PolicyKit chama um agente de autenticação. Este agente consiste basicamente de uma máscara
Quadro 2: Como executar O PolicyKit inclui a ferramenta de linha de comando pkexec, que inicializa um programa em outra conta de usuário e, portanto, substitui o sudo – pelo menos, esta é a ideia básica. O comando: pkexec --user klaus apt-get update por exemplo, executaria o comando apt-get update como usuário klaus. Infelizmente, apenas administradores podem executar o pkexec, por razões de segurança. Além disso, o pkexec inicializa o comando apt-get update no contexto de autorização do usuário klaus. No entanto, por padrão, este usuário não possui permissão para executar o apt-get update, e não podemos conceder-lhe estes direitos pois o apt-get simplesmente ignora o PolicyKit e só segue as permissões-padrão do Unix. As ações conhecidas no PolicyKit, org.debian.apt.update-cache, referem-se ao aptdaemon [2]. Em outras palavras, se quisermos permitir que klaus execute o apt-get, precisamos utilizar o sudo com as regras correspondentes ou adicionar klaus ao grupo de administrador, e só então klaus poderia iniciar o apt-get como usuário root. Obviamente, muito pouco se ganha com isso; mas, pelo menos, o pkexec encaixota o programa em um ambiente mínimo e endurecido, impedindo ataques contra a variável de ambiente LD_LIBRARY_PATH.
Linux Magazine #98 | Janeiro de 2013
de entrada (figura 3). Cada ambiente de trabalho pode fornecer seu próprio agente de autenticação.
Regulador Para conceder ao usuário o acesso a um recurso do sistema, o administrador precisa criar uma regra correspondente. Todas as regras PolicyKit estão reunidas no diretório /etc/polkit-1/local-authority. Aqui também encontraremos cinco subdiretórios nos quais as regras são distribuídas, dependendo de suas origens. A tabela 1 mostra quem precisa dispor de quais regras e em quais diretórios. Os administradores podem se concentrar no diretório 50 local.d. O LocalAuthority lê todos os arquivos armazenados lá com um sufixo .pkla em ordem alfabética crescente.
Classificação ordenada Para permanecermos no caminho quando escrevemos as regras, devemos sempre começar o nome do arquivo com um número em ordem crescente. Os arquivos de regras são arquivos de texto simples, e podemos agrupar várias regras em um arquivo. Note que os arquivos .pkla precisam de nomes únicos. O PolicyKit se refere às regras de acesso como entradas de autorização. A listagem 2 mostra uma regra que permite que o usuário klaus altere as
Listagem 1: Arquivo Ubuntu 12.04 /etc/sudoers 01 # Redefine environmental variables: 02 Defaults env_reset 03 Defaults secure_path="/usr/ local/sbin:/usr/local/bin:/ usr/sbin:/usr/bin:/sbin:/bin" 04 05 # Permit access: 06 root ALL=(ALL:ALL) ALL 07 %admin ALL=(ALL) ALL 08 %sudo ALL=(ALL:ALL) ALL 09 10 # Add more rules here: 11 #includedir /etc/sudoers.d
configurações globais de rede no Network Manager. Um comentário nos colchetes introduz a regra. Identity= mostra quais usuários ou grupos de usuários são afetados pela regra. Na linha 2, encontra-se alguém com uma conta de usuário local (unix-user:) e o nome de usuário klaus. Vários usuários ou grupos são separados no arquivo por ponto-e-vírgula. A linha: Identity=unix-user:klaus; unix-group:networkers
permitiria que o grupo inteiro de usuários, e não apenas klaus, modificasse as configurações de rede. A linha Action= na listagem 2 é acompanhada pelo nome da ação permitida. O comando pkaction revela quais ações são conhecidas pelo PolicyKit. Cuidado; a saída da lista por este comando pode ser longa, dependendo da distribuição (figura 4). Normalmente, o nome da ação diz o que ela faz. Se quiser saber exatamente o que acontece, execute pkaction com o nome da ação (figura 5): pkaction --verbose--action-id org.freedesktop.NetworkManager. settings.modify.system
Faz sentido redirecionar a lista completa e detalhada em um arquivo, por exemplo: pkaction --verbose > actions.txt
As ações disponíveis dependem da distribuição e os programas instalados (quadro 1). Várias ações podem ser combinadas em uma única regra com o curinga “*”. A linha: Identity=org.freedesktop. NetworkManager.*
Listagem 2: Regras para o LocalAuthority 01 Klaus is allowed to modify network 02 Identity=unix-user:klaus 03 Action=org.freedesktop. NetworkManager.settings. modify.system 04 ResultInactive=no 05 ResultActive=auth_self
63
SEGURANÇA | Sudo e PolicyKit
deixaria klaus executar todos os recursos oferecidos pelo Network Manager.
Quem sou eu? O PolicyKit distingue entre pedidos que vêm de uma sessão ativa e aqueles que se originam de uma sessão inativa. O que fazer com as solicitações da sessão ativa é definido por ResultActive=. Na listagem 2, klaus precisa, então, digitar sua própria senha (auth_self). No caso de uma sessão inativa, as regras seguem a aplicação do ResultInactive=. A linha 4 contém um no, que proíbe a alteração das configurações de rede no Network Manager. Além de auth_self e no, a tabela 2 resume alguns outros valores possíveis.
Como uma alternativa para ResultInactive e ResultActive, podemos especificar ResultAny, que é o mesmo
para as sessões ativas e inativas. Apenas uma destas três precisam figurar no arquivo .pkla; as regras especificadas pela ação correspondente em seguida se aplicarão para qualquer coisa que esteja faltando (quadro 2). Se fôssemos salvar a listagem 2 como 51-org.freedesktop.NetworkManager.pkla no diretório /etc/polkit-1/ localauthority/50local.d, o PolicyKit automaticamente aplicaria as novas regras sem ter que reiniciar o serviço. Para mais exemplos de regras, confira o subdiretório var/lib/polkit-1/localauthority/, que só é acessível para
o usuário root. Este diretório armazena todas as regras que vieram com a distribuição. Para mais detalhes sobre a estrutura dos arquivos .pkla, veja a página man da ferramenta (man pklocalauthority).
Onipotente Alguns recursos do sistema são tão perigosos ou críticos que apenas um administrador de verdade está autorizado a executá-los; assim, o LocalAuthority distingue-se entre usuários regulares e administradores, que possuem o mesmo privilégio de root. Os membros do grupo de elite de administradores são definidos pelos arquivos de configuração em /etc/ polkit-1/localauthority.conf.d. Mais uma vez, o LocalAuthority analisa todos os arquivos em ordem alfabética; configurações em arquivos posteriores sobscrescrevem os arquivos anteriores. O administrador do sistema não deve alterar os arquivos existentes, mas adicionar um arquivo próprio, com um número maior, o que também significa que a distribuição não substituiria o arquivo durante uma atualização de sistema. Por padrão, um arquivo de configuração compreende apenas duas linhas; por exemplo, no Ubuntu: [Configuration] AdminIdentities= unix-group:sudo;unix-group:admin
O AdminIdentities= é seguido por todos os usuários e grupos que possuem os mesmos privilégios de root do ponto de vista do PolicyKit. Para adicionar klaus à este grupo de elite no Ubuntu, o usuário administrativo deve criar um novo arquivo chamado 99-Klaus.conf e adicionar: [Configuration] AdminIdentities=unix-group: sudo;unix-group:admin; unix-user:klaus
Figura 4 O pkaction revela os nomes de todas as ações suportadas pelo PolicyKit e dependem da distribuição utilizada.
64
Os dois grupos, sudo e admin, vêm de arquivos de configuração existen-
www.linuxmagazine.com.br
Sudo e PolicyKit | SEGURANÇA
tes, por isso é necessário adicioná-los; caso contrário, apenas klaus terá privilégios de root.
Pouco suporte O PolicyKit oferece uma camada adicional de segurança no topo do sistema de autorização Unix existente, mas não a substitui. Além disso, os programas do sistema envolvidos devem suportar o PolicyKit ou solicitar o serviço. Atualmente, apenas algumas ferramentas de interface gráfica de usuário selecionadas fazem isso, como é o caso do Network Manager. Todos os aplicativos de console, incluindo o apt-get, ignoram o PolicyKit. Os problemas que essa confusão pode causar são apresentados no quadro 2. No entanto, mesmo se um aplicativo suportar o PolicyKit, não precisará respeitar suas instruções; assim, um invasor poderá facilmente contornar o PolicyKit com código malicioso.
lizem o sudo, a menos que considere cuidadosamente as consequências, ou em caso de uma emergência: o risco é muito grande de que uma regra incorreta permita aos usuários fazer mais do que o administrador deseja, ou até mesmo o bloqueie do próprio sistema.
O Linux ainda carece de um sistema de permissões granulares. Para os casos em que os administradores desejam permitir o acesso a programas de linha de comando, é uma boa ideia olhar para técnicas alternativas, tais como listas de controle de acesso (Access Control Lists - ACLs) [2]. ■
Valor:
Significado:
no
O usuário não deve executar a ação sob quaisquer circunstâncias.
yes
O usuário pode executar a ação sem autenticação.
auth_self
O usuário só pode executar a ação depois de digitar sua senha.
auth_admin
O usuário deve se autenticar como administrador (e, portanto, saber a senha administrativa).
auth_self_keep
Como auth_self, mas o PolicyKit mantém a senha digitada por alguns minutos. O usuário pode, portanto, executar a ação várias vezes em sucessão, mas só precisa digitar sua senha uma vez.
auth_admin_keep
Como o auth_admin, mas neste caso o PolicyKit mantém a senha digitada por alguns minutos. O usuário pode, portanto, executar a ação várias vezes sucessivamente, mas só precisa se autenticar como administrador uma única vez.
Tabela 2 Tipos de autorização do PolicyKit.
Conclusão Tanto o sudo como o PolicyKit têm suas vantagens e desvantagens. Se quisermos permitir uma ação que o PolicyKit possua em seu repertório, devemos criar um arquivo .pkla correspondente, o que significa que estamos permitindo apenas os recursos necessários. Os administradores não devem permitir que usuários regulares uti-
Mais informações [1] PolicyKit: http://www. freedesktop.org/wiki/ Software/polkit [2] Aptdaemon: https:// launchpad.net/aptdaemon
Gostou do artigo? igo? Queremos ouvir sua opinião. o nião. m Fale conosco em cartas@linuxmagazine.com.br ne.com Este artigo no nosso sso site: s e: r/artic 805 http://lnm.com.br/article/8056
Linux Magazine #98 | Janeiro de 2013
Figura 5 Aqui, o pkaction revela que a ação org.freedesktop. NetworkManager.settings.modify.system permite que todos os usuários modifiquem as definições de rede com o Network Manager. Na última saída do comando estão as permissões padrão.
Listagem 3: Arquivo Action (reduzido) 01 <action id="org.freedesktop.NetworkManager.settings. modify.system"> 02 <description xml:lang="en">Modify network connections for all users</description> 03 <message xml:lang="en">System policies prevent you from modifying networksettings for all users</message> 04 <defaults> 05 <allow_inactive>no</allow_inactive> 06 <allow_active>auth_admin_keep</allow_active> 07 </defaults> 08 </action>
65
TUTORIAL | Controle de versão com Git
Controle de versão
TUTORIAL
Gerenciamento distribuído Conheça o Git, sistema distribuído de controle de versão que garante a integridade e consistência de dados com segurança e esforço mínimo. por Falko Benthin
D
ocumentos e código-fonte que são utilizados, alterados e processados por vários usuários estão muitas vezes localizados em um servidor central de arquivos, enquanto os indivíduos trabalham com cópias locais. Pesquisar manualmente as diferenças entre documentos muitas vezes deixa dúvidas quanto a existência de uma nova versão de um documento e, se assim for, quem o alterou pela última vez. Um sistema de controle de versão, como utilizado em muitos projetos de software, pode ajudar a arrumar a bagunça. Um dos candidatos mais fortes nesta área é o Git [1].
O Git foi desenvolvido em 2005 por Linus Torvalds para gerenciar o código fonte do kernel Linux. Para fazer isso, precisou satisfazer uma série de requisitos: ➧ Tinha que ser rápido, oferecer suporte a várias ramificações paralelas, e ser capaz de trocar dados entre repositórios diferentes; ➧ Tinha que oferecer suporte a verificações de integridade de dados e evitar que objetos de dados armazenados no repositório fossem modificados retroativamente. Comparado com outros sistemas de controle de versão, o Git é caracterizado pela sua suave curva de
Figura 1 Quando inicializamos, o Git não está interessado em saber se o diretório está vazio ou já contém alguns arquivos.
66
aprendizado, redundância de dados através de repositórios locais, baixo consumo de memória, e serviços gratuitos, como o GitHub e o Gitorious.
Instalação O Git é um programa de linha de comando disponível para Linux, Mac OS X, Solaris e MS Windows. Não obstante, ele também contempla várias interfaces gráficas, incluindo Gitk, Git-cola [2], SmartGit [3], giggle [4], e Gitg [5], bem como interfaces online como Gitweb, Cgit [6], e Gitlab [7]. O Git está nos repositórios da maioria das distribuições, por isso podemos instalá-lo facilmente usando as ferramentas de gerenciamento de pacotes adequadas. Se preferir a última versão, poderá instalar o sistema de controle de versões como root com três comandos: # ./configure # make all doc # make install install-doc install-html
www.linuxmagazine.com.br
Controle de versão com Git | TUTORIAL
após baixar o código fonte do GitHub [8].
Como configurar O Git oferece amplas possibilidades para configurações globais, de usuário e específicas de um determinado projeto. Configurações globais do sistema são encontradas em /etc/ gitconfig; configurações do usuário estão no arquivo ~/.gitconfig no diretório home do usuário. Configurações que afetam apenas um único projeto são armazenadas em .git/config do repositório correspondente. Neste artigo, cobriremos apenas as configurações mais importantes. Se o usuário, adicionalmente, quiser modificar o esquema de cores, o editor para commitar e marcar mensagens, modelos de commit, configurações de diff e merge, ou recursos similares; para tanto, deverá verificar a man page do Git e a documentação do projeto [9]. Um dos passos mais importantes é apresentar-se ao Git, fornecendo nome e endereço de email:
# git config --global core.editor <preferred_editor>
e substitua com o nome do seu editor preferido.
Git em ação O Git é muito fácil de usar no trabalho diário. Para iniciar um projeto com o sistema de controle de versão, quer este seja o código fonte ou um documento de escritório, precisamos inicializar o Git no diretório apropriado com: git init
O Git cria, então, um diretório oculto, ./git, que posteriormente é utilizado para monitorar o projeto e seu desenvolvimento (figura 1). Quando inicializarmos um diretório, ele não precisa conter todos os arquivos. Para visualizar o status de um repositório, execute o comando git status. Este comando lista os arquivos que o Git ainda não monitorou, os arquivos que foram alterados desde o último commit, e os arquivos que foram alterados na área de preparação. A figura 2 mos-
Figura 2 Saída de status do Git mostrando candidatos para a área de preparação.
# git config --global user.name "<firstname> <lastname>" # git config --global user.email <my>@<email>.<ext>
O Git usa essas duas informações mais tarde para atribuir snapshots (“commits”) a um usuário. A opção --global significa que as configurações se aplicam a todos os repositórios de um usuário Git por padrão. Se quisermos utilizar um nome ou endereço de email diferentes para um projeto específico, precisaremos executar o git config no respectivo repositório, mas sem a opção -- global. Quando os usuários executam um commit, o Git normalmente chama o editor padrão do sistema e recorre ao Vi, se nenhum padrão for definido. Pelo fato de o Vi muitas vezes ser o padrão – e muitos usuários não gostarem da ideia de usá-lo – o Git permite que o usuário selecione seu editor preferido. Basta digitar:
Linux Magazine #98 | Janeiro de 2013
Figura 3 O próximo commit diz respeito a muitos arquivos novos.
67
TUTORIAL | Controle de versão com Git
tra um projeto recém-inicializado, onde o Git ainda não está monitorando quaisquer arquivos. Podemos imaginar a área de preparação como um lugar onde residem os arquivos que serão adicionados ao snapshot Git no próximo commit. É possível enviar os arquivos, diretórios ou todo o projeto selecionado para a área de teste digitando git add <file> ou git add .. O status muda, então, de untracked para new file (figura 3).
Commits Quando um autor quer salvar seu trabalho atual em um snapshot, ele pode usar git commit para fazer isso, após mover todos os arquivos afetados para a área de preparo. Além dos arquivos e mudanças, o Git registra os nomes e endereços de email do
autor / committer para cada commit, juntamente com a data de criação e commit. Depois de digitar o comando, o Git abre um editor (previamente configurado), que permite que o usuário digite uma mensagem de confirmação. O usuário pode aceitar a sugestão do Git, que lista todas as alterações desde o último commit – simplesmente removendo o sinal de cerquilha no início – ou pode digitar sua própria mensagem (figura 4). A mensagem de commit deve indicar o que foi modificado. Pelo fato de o Git apresentar uma visão concisa dos commits quando o registro é consultado, a primeira linha deve sempre conter um resumo. Isto é especialmente verdadeiro se a mensagem de commit for lon-
ga. Particularmente quando várias pessoas estão colaborando, breves comentários ajudam a explicar por que algo mudou e se quaisquer problemas ou erros ocorreram ou são esperados (quadro 1). O primeiro commit é geralmente chamado de “commit inicial”; devemos nomear todos os outros commits de modo que os participantes do projeto possam ver imediatamente o que o commit fez. Mensagens como minor bugfix (correção de pequenos bugs) não dizem nada de útil – uma mensagem mais significativa deve ser Segmentation fault in flip flop on.cpp fixed (falha de segmentação no flip flop on.cpp corrigida). Muitas vezes, especialmente em colaboração distribuída, onde todos os membros do projeto precisam receber o estado atual sem demora, os commits incluem apenas pequenas alterações. Se uma pequena mensagem de commit é suficiente, podemos adicioná-la diretamente quando chamarmos o Git como: $ git commit -m "MPI_Type_create_ struct added for LineHistogram"
sem a necessidade de executar o editor.
Ramificações Figura 4 O usuário pode editar mensagens de commit em um editor de sua preferência.
Se adicionarmos novos recursos em um aplicativo existente, há sempre um risco de que partes funcionais sejam afetadas. O Git assume as preocupações para o pior cenário possível, permitindo diferentes ramificações em um projeto. Uma ramificação pode ser comparada a um playground, onde podemos experimentar novos recursos sem colocar em risco as partes existentes de um aplicativo. Para criar uma nova ramificação, podemos usar o comando git branch <name>
Figura 5 O Git suporta muitas ramificações simultâneas; um asterisco indica a área de trabalho atual.
68
Um número qualquer de ramificações paralelas pode existir, e você pode alternar entre elas com:
www.linuxmagazine.com.br
Controle de versão com Git | TUTORIAL
git checkout <name>
O comando git branch sem especificar um nome mostra todas as ramificações existentes. O Git marca a á atual com um asterisco (figura 5) – qualquer commit subsequente afeta somente esta ramificação. Todas as alterações feitas em uma ramificação não influenciam as outras de maneira alguma. Depois de completar a implementação de novos recursos e testar bastante, podemos mesclar a ramificação com a master usando: git merge <name>
Ramificações desnecessárias são facilmente removidas com: git branch -d <name>
Se quiser mudar o nome de uma ramificação, faça isso usando o comando git branch -m <newname>
O que há de novo? O comando git diff permite visualizar e identificar rapidamente as diferenças entre as ramificações, commits ou arquivos, como no exemplo a seguir: git diff <Branch1>..<Branch2> git diff <CommitID> git diff <filename>
Este comando demonstra ser especialmente útil quando estamos interessados apenas em corrigir erros de algumas alterações que são difíceis de encontrar com um olhar casual.
Histórico do projeto Um projeto cresce, commits se alinham, e um milestone é alcançado, por isso é hora de um changelog. Ao invés de arruinar seu cérebro tentando lembrar o que aconteceu desde a última etapa, você somente pergunta ao Git - supondo que tenha sempre acrescentado significativas mensagens de commit. Por exemplo, o comando: git log
revela o que aconteceu a cada commit, quem foi o responsável por isso, e quando foi feita uma alteração no projeto. O log pode ser curto e incisivo ou muito detalhado, dependendo da requisição. Se digitarmos o comando sem parâmetros adicionais, o Git gera o hash exclusivo de um commit, o autor, a data, e a mensagem do commit. A opção --graph mostra ramos separadamente (figura 6). O parâmetro --oneline limita a saída para o início do hash do commit e a mensagem de commit, e nunca usa mais que uma linha para isso.
Figura 6 Log do Git mostrando o histórico do projeto.
Linux Magazine #98 | Janeiro de 2013
Mitigando danos Considere este breve cenário: depois de vários dias de trabalho de desenvolvimento sob pressão aguda de tempo e privação de sono, de repente o desenvolvedor encontra-se rodeado de código “sujo” que não funciona como deveria. Tentar remover os commits manualmente é provavelmente impossível, portanto ou ele volta à estaca zero, ou pode fazer uso dos benefícios do controle de versão e operar um rollback (reverter) para a última revisão na qual trabalhava. Se o desenvolvedor em questão tiver certeza absoluta de que as últimas horas foram, de fato, um caso perdido, poderá executar um rollback severo digitando: git reset --hard <CommitID>
O CommitID refere-se ao valor hash de 40 dígitos do snapshot desejado. Os hashes tipicamente diferem na medida em que o Git necessita apenas dos primeiros sete dígitos para identificar o commit claramente. O rollback severo redefine todos os arquivos no diretório de trabalho e na área de preparação. Se substituíssemos --hard por --soft, o Git iria zerar o commit especificado para a versão “HEAD”, que serve então como o último commit. Neste caso, todas as alterações no diretório de trabalho e na área de teste são mantidas. O usuário terá que decidir por si mesmo se voltar para a última versão usando soft faz sentido em um labirinto de confusão de código. Outra opção de rollback é o git checkout, com o qual o usuário já está familiarizado ao alternar entre ramificações. Para fazer um rollback, podemos renomear a ramificação principal e recuperar o último snapshot utilizável com: git checkout <CommitID>
69
TUTORIAL | Controle de versão com Git
em seguida, torne esta a nova versão principal com: git checkout -b master
Este é um atalho para não ter que digitar os seguintes comandos: git branch <name> git checkout <name>
(figura 7). A vantagem deste tipo de rollback é que inicialmente são mantidas todas as alterações e quaisquer ideias não utilizáveis poderão ser excluídas mais tarde. Usar git checkout não só ajuda a zerar completamente os commits, como também arquivos
separadamente. Tudo o que o usuário ainda precisa fazer é especificar o nome do arquivo. Assim, usar o comando: git checkout af4673fa6 main.cpp
restaura a revisão af4673fa6 do arquivo main.cpp.
Versões distribuídas O Git foi projetado desde o início como um sistema de controle de versão distribuído, o que significa que várias partes interessadas podem trabalhar em um projeto ao mesmo tempo. Em contraste com um sistema de controle de versão centrali-
zado, que precisa de uma conexão com o repositório do servidor para obter logs e commits, repositórios Git são executados localmente e podem sincronizar com um servidor assim que uma conexão de rede estiver disponível. Como o servidor só precisa distribuir as alterações, é bom que ele seja executado em um repositório vazio. Este repositório contém apenas os arquivos do diretório do projeto Git, .git, e ajuda os membros do projeto a sincronizar seus dados. Podemos criar um repositório vazio no servidor com: $ git init --bare <repository>.git
As permissões de acesso que se aplicam aqui são os padrões do umask da conta de usuário utilizada para criar o repositório (figura 8). No computador local, podemos clonar o repositório remoto usando: $ git clone ssh://<server>/ <path>/<repository>.git
Figura 7 O comando checkout do Git não é apenas útil para alternar entre ramificações, mas também para rollbacks.
Figura 8 Um repositório vazio contém apenas o diretório .git para um projeto, mas nenhum arquivo de trabalho.
Figura 9 Usando o push para sincronizar os repositórios Git local e remoto.
70
O Git suporta a sincronização de repositórios via protocolos Git, SSH, e HTTP(S). O Git não suporta a autenticação em si, ao invés disso conta com o SSH para identificar os usuários que fazem upload de um commit. Aplicativos auxiliares como o Gitolite [10] ajudam a evitar que todos os envolvidos no projeto precisem ter uma conta de usuário com direitos plenos para se autenticar. Após a criação de um repositório vazio recém-clonado, é necessário populá-lo criando arquivos de projeto no repositório local, em seguida commitá-los e sincronizá-los com o repositório remoto. O comando a seguir faz essa proeza: $ git push <bare> <local>:<remote>
O item <bare> especifica o repositório remoto, <local> que refere-se à ramificação local, e <remote> é a ramificação remota. Após o commit inicial, o próprio Git reconhece se
www.linuxmagazine.com.br
Controle de versão com Git | TUTORIAL
contrapartes remotas existem para ramificações locais; um simples git push é o suficiente (figura 9). A contraparte para git push é git pull; este combina os comandos git fetch e git merge para sincronizar o repositório local com o remoto. Os comandos fetch e merge muitas vezes iniciam interações bem complexas com repositórios remotos, portanto vale a pena dar uma
olhada na documentação do Git para ambas as ferramentas. Serviços públicos como o GitHub [11], Gitorious [12] ou o Google Code [13] são alternativas úteis para um servidor de projeto próprio. Não há custos para projetos livremente acessíveis. Para os projetos que o usuário não deseja compartilhar com o público em geral, o Gitorious e o GitHub
Quadro 1: Protocolo Para projetos de software em que vários desenvolvedores compartilham um sistema de controle de versão, algumas práticas tem se revelado benéficas. Por exemplo, devemos – se possível – também monitorar as alterações feitas por outros desenvolvedores. Isso ajuda a descobrir rapidamente se o código interage com outros componentes e poderá encontrar observações sobre os erros existentes. Os repositórios devem sempre conter apenas um projeto, mesmo que os desenvolvedores possam trabalhar juntos em vários projetos ao mesmo tempo. Preferencialmente, cada commit deve completar exatamente uma tarefa – por exemplo, um novo recurso ou uma correção de bug. As mensagens de commit devem ser autoritárias e explicar casos de uso complicados, especialmente se este não é tratado por comentários no código. Se possível, um repositório deve conter apenas os arquivos que os desenvolvedores criaram. Arquivos gerados automaticamente, ou livremente acessíveis através de bibliotecas e ferramentas externas, não devem fazer parte do repositório; na verdade, eles desnecessariamente incham o repositório. O código publicado com um commit deve funcionar, então outros membros do projeto podem continuar a trabalhar e não têm que começar a corrigir bugs que surgiram. No entanto, um usuário nunca deve remover o código do projeto sem consulta prévia, só por que não gosta ou não o compreende imediatamente.
Mais informações [1] Git: http://git-scm.com/ [2] Git-cola: http://git-cola.github.com/ [3] SmartGit: http://www.syntevo.com/smartgit/index.html [4] Giggle: https://live.gnome.org/giggle/ [5] Gitg: https://live.gnome.org/Gitg/ [6] Cgit: http://hjemli.net/git/cgit/ [7] Gitlab: http://gitlabhq.com/ [8] Git (no GitHub): https://github.com/git/git/
oferecem também hospedagem comercial de repositórios privados.
Simplesmente ignore Em projetos maiores de software, principalmente, os desenvolvedores tendem a usar diversas estruturas de diretório ou preferem configurações diferentes para os usuários. Se os desenvolvedores modificam arquivos que contêm caminhos ou configurações diversas vezes para corresponder com suas preferências e então submetem essas mudanças, outros colaboradores rapidamente ficarão frustrados. Além disso, os arquivos de configuração muitas vezes contêm nomes de usuários e senhas que podemos não querer distribuir. Felizmente, o Git permite excluir arquivos de um commit. Para fazer isso, é só criar um arquivo .gitignore no respectivo diretório de trabalho e listar todos os arquivos do diretório que deseja que o Git ignore em um commit. É preciso digitar um nome de arquivo por linha.
Conclusão Como um sistema de controle de versão distribuído poderoso, o Git pode fazer muito mais do que apenas o básico mostrado neste artigo. Seus recursos avançados incluem a aplicação de tags e alteração de base, um daemon para acesso de leitura anônima em repositórios Git, filtros e hooks, e a capacidade de remover informações sensíveis ou bibliotecas retroativamente a partir de um repositório. Além disso, várias interfaces gráficas e interfaces web oferecem uma abordagem mais conveniente para controlar o Git. ■
[9] Documentação do Git: http://git-scm.com/doc/ [10] Gitolite: https://github.com/sitaramc/gitolite/ [11] GitHub: https://github.com/ [12] Gitorious: http://gitorious.org/ [13] Google Code: http://code.google.com/
Linux Magazine #98 | Janeiro de 2013
Gostou do artigo? igo? Queremos ouvir sua opinião. o nião. m Fale conosco em cartas@linuxmagazine.com.br ne.com Este artigo no nosso sso site: s e: r/artic 804 http://lnm.com.br/article/8047
71
ANÁLISE | Desktop remoto Guacamole
Desktop remoto Guacamole
ANÁLISE
Clique para o futuro O HTML5 oferece uma série de recursos que não necessitam de plugins Flash ou Java para funcionar. Com isso, surgem novas opções de acesso móvel a aplicativos na rede local. por Thomas Zeller
C
ontrolar aplicativos remotamente através do navegador não é novidade – isso já é possível desde o Google Apps. Mas, e se quisermos nos servir de aplicativos próprios na rede local da empresa ou acessar a área de trabalho em casa através da Internet? Tecnologias de acesso remoto (como VNC e RDP) ou soluções VDI (como o /VMware View ou Citrix Xen Desktop) são escolhas óbvias. Porém, esta abordagem geralmente envolve a instalação do cliente de software correspondente na máquina a partir da qual os usuários desejam acessar o aplicativo remoto. Se o usuário não confia na criptografia incorporada, ou se não existe nenhuma, em breve sentirá a necessidade de um cliente VPN que forneça criptografia e autenticação. Tudo isto é lamentável, por exemplo, se estivermos trabalhando em um computador no saguão do hotel ou em uma lan house e não pudermos instalar nossos próprios aplicativos. Durante alguns anos, os VPNs SSL clientless têm preenchido esta lacuna, fornecendo acesso baseado em navegador para aplicativos remotos através de uma conexão HTTPS segura, sem a necessidade de instalar um cliente. No
72
entanto, estas soluções normalmente impõem requisitos específicos para o navegador e plugins. Muitas vezes precisamos de Java, Flash ou ActiveX – e talvez até mesmo uma versão específica.
Melhor com o HTML5 A alternativa é o Guacamole [1], um aplicativo online em HTML5 que suporta acesso gráfico através de protocolos desktop remoto (remote desktop protocols ou RDPs) diretamente no navegador, sem a necessidade de plugins adicionais. O programa está licenciado sob a AGPLv3 e, na atual versão 0.6.2, suporta VNC e RDP – embora de forma limitada em alguns casos. Por exemplo, não é possível transmitir dados de audio ou conectar unidades de rede no RDP. No lado servidor, o software Java é executado em um servidor Apache com um container servlet (Apache Tomcat) e atua como um proxy que traduz a saída gráfica do VNC e do RDP em XML e vice-versa (figura 1). Os desktops acessíveis via RDP ou VNC podem executar tanto no servidor de aplicativos como em um computador diferente na rede. O Guacamole promete desempenho quase nativo e oferece suporte a teclado
internacional e teclado na tela, onde é possível utilizar o mouse para simular a digitação no teclado. O recurso do Guacamole baseia-se no elemento <canvas> do HTML5, que usa JavaScript para lidar com extensas operações gráficas, incluindo linhas não só de desenho, retângulos, arcos e curvas de Bezier, mas também renderização de gradientes de cores, transparências, texto e – o mais importante – gráficos escalonados nos formatos PNG, JPG e GIF. Estas são as condições ideais para a renderização de um desktop e aplicativos no navegador. O pré-requisito, então, é apenas um navegador que ofereça suporte ao elemento canvas. A maioria dos navegadores atuais pode fazer isso hoje em dia (exceto o Internet Explorer 8 e 9), apesar do W3C supor que o HTML5 não será amplamente suportado até 2014 (quadro 1).
Como instalar o Guacamole Felizmente, o site do Guacamole apresenta pacotes pré-compilados para várias distribuições. A seção de downloads do site [1] oferece pacotes para o Debian 6.0 (Squeeze), Ubuntu 11.10/12.04 e
www.linuxmagazine.com.br
Desktop remoto Guacamole | ANÁLISE
Fedora 15/16/17. Alternativamente, podemos compilar o Guacamole a partir do código fonte [3]. Para um teste, vamos precisar do Guacamole 0.6.2 em um sistema Ubuntu recente (12.04.1 LTS). Para fazer isso, devemos primeiro satisfazer as dependências de suporte ao Java, VNC e RDP, usando:
da página do projeto Guacamole no SourceForge e descompacte o conteúdo do arquivo no diretório home. Siga para o novo diretório, cd guacamole-0.6.2-ubuntu-12.04-i386
e instale os pacotes Guacamole. A seguinte linha única fará isso:
sudo apt-get install tomcat6 libvncserver0 libfreerdp1
sudo dpkg -i guacd_*.deb guacamole_*.deb libguac3_*.deb libguac-client-vnc0_*.deb libguac-client-rdp0_*.deb
Em seguida, baixe os pacotes pré-compilados para o Ubuntu 12.04
Se o usuário desejar somente suporte a conexões VNC no navega-
dor, não precisará instalar o pacote libguac-client-rdp0_*.deb. O servidor Tomcat exige agora links simbólicos: um para cada um dos arquivos guacamole.war e guacamole. properties. Além disso, precisará adicionar o usuário tomcat6 ao novo grupo guacamole-web, o que é feito automaticamente ao instalarmos o pacote: sudo dpkg -i guacamole-tomcat_*.deb
Como alternativa, o procedimento manual é descrito no site do projeto Guacamole. Finalmente, reinicie o servidor Tomcat e selecione sim no prompt (figura 2), ou digite sudo /etc/init.d/tomcat6 restart
para reiniciar o servidor Tomcat via linha de comando.
Configuração
Figura 1 O esquema mostra um diagrama funcional do Guacamole e sua comunicação com os servidores RDP ou VNC.
Para que o acesso via Guacamole ao desktop seja bem-sucedido, evidentemente também é preciso compartilhar um desktop. Durante nosso teste, optamos por compartilhar a área de trabalho em um PC com Windows 7 usando o protocolo RDP. Isto funcionará tão bem quanto um terminal de servidor real do Windows ou um computador em que o ambiente de trabalho é compartilhado através de um servidor VNC. Em seguida, precisaremos inserir o Guacamole nas credenciais de área de trabalho remota, assim o acesso através do navegador irá funcionar adequadamente. Para isso, abra o arquivo /etc/ guacamole/user-mapping.xml com o seu editor preferido (figura 3), por exemplo: sudo vi /etc/guacamole/ user-mapping.xml
Em seguida, adicione os dados necessários na seção: <!-- Per-user authentication and config information -->. Para fazer isso, primeiro remova os caracteres de comentário <--! e -->.
Figura 2 Instalar os pacotes do site do Guacamole configura o servidor Tomcat.
Linux Magazine #98 | Janeiro de 2013
No exemplo, vamos configurar uma conexão para o usuário tom com uma senha teste em um sistema Windows com um endereço IP 192.168.1.11 (lista-
73
ANÁLISE | Desktop remoto Guacamole
gem 1). Se preferir usar o VNC, poderá
substituir o RDP na seção protocolo por vnc. Em seguida, guarde a senha para o servidor VNC na seguinte seção: <param name="password"><MinhaSenhaVNC></param>. Salve o arquivo de configuração e digite sudo /etc/init.d/guacd restart para reiniciar o serviço guacd.
Como conectar ao desktop Verifique se a máquina inserida em user-mapping.xml é acessível com o protocolo correspondente; em seguida, acesse o endereço http://enderecoIP:8080/guacamole no navegador. Após a autenticação bem sucedida com o nome de usuário e senha especificados, o usuário deve ser capaz de efetuar login no desktop do sistema de destino, como mostrado no navegador (figura 4). Poderá também fazer o login com as credenciais do Windows. O Guacamole fornece uma área de transferência simples para a troca de texto entre a máquina remota e o sistema local, bem como um teclado na tela, se arrastarmos o cursor do mouse na direção da barra de endereço do navegador (figura 5). Se necessário, poderá enviar um Ctrl+Alt+Del para a máquina remota ou encerrar a sessão com o Guacamole.
Pequenas incertezas A instalação padrão do Guacamole funciona, mas não é nada segura, pois o acesso à página de login não é criptografado. Assim, o usuário é urgentemente aconselhado a instalar o Tomcat com suporte a SSL. Para um how-to (como fazer), confira a documentação detalhada do Tomcat online [4]. Outra característica lamentável é que a senha para abrir a conexão com o servidor RDP e – se usarmos uma conexão VNC também a senha do VNC – fica armazenada em texto puro no arquivo de configuração user-mapping.xml e pode ser lida por um usuário logado. Desta forma, é preferível mudar o dono e as
74
Figura 3 Os usuários que precisam de acesso HTTP para desktops gráficos são adicionados ao arquivo de configuração central user-mapping.xml.
permissões do arquivo user-mapping. xml da seguinte forma: sudo chown tomcat6.tomcat6 user-mapping.xml sudo chmod 640 user-mapping.xml
Alternativamente, o Guacamole oferece também a possibilidade de criar senhas com hash apenas no arquivo de configuração. A listagem 2 mostra a seção correspondente do
user-mapping.xml para o usuário tom
e o hash MD5 da senha. Podemos visualizar rapidamente o hash da senha na linha de comando com o utilitário md5sum: echo -n <SENHA> | md5sum -t 319f4d26e3c536b5dd871bb2c52e3178 -
Em seguida, adicione o valor hash ao invés da senha na configuração. Naturalmente, o hash da senha deve
Figura 4 Graças ao HTML5, os usuários não precisam mais de plugins para acesso gráfico a desktops no navegador.
www.linuxmagazine.com.br
Desktop remoto Guacamole | ANÁLISE
possuir mais de oito caracteres e deve ser escolhido para ser o mais seguro possível com caracteres não-padrão; senhas simples podem ser quebradas por crackers através de força bruta, com ferramentas como o mdcrack, dentro de alguns minutos.
Sophos UTM 9.0 Se o usuário estiver preocupado com a sobrecarga da criação de conexões seguras com o Guacamole, pode usar também um software comercial. Por exemplo, a versão atual do Firewall Sophos UTM 9.0 (anteriormente Astaro Security Gateway) fornece um portal em HTML5 que podemos usar para acessar serviços na rede local sem a instalação de cliente (quadro 2). Além de RDP e VNC, o Sophos suporta conexões em servidores Telnet e SSH, bem como conexões HTTP e HTTPS. Dito isso, o acesso remoto via HTML5 só desempenha um papel secundário no Sophos UTM. Novamente, não podemos usar RDP para mapear unidades nos clientes. Para acesso remoto à rede totalmente transparente, o Sophos UTM fornece servidores IPsec, SSL, PPTP, e L2TP VPN como alternativas. O portal HTML5 com transmissão somente KVM (teclado, vídeo e mouse) é mais adequado para eventuais sessões de gerenciamento remoto com presta-
dores de serviços externos para os quais não queremos designar pleno direito de acesso VPN.
Firewall e VPN gratuitos A Sophos oferece o UTM 9.0 como um aplicativo de hardware, aplicativo virtual ou aplicativo em software para instalação em seu próprio hardware. Aplicativos de software e virtuais estão disponíveis para download a partir do servidor FTP no site da Astaro [7]. A Sophos concede a usuários registrados uma “licença de uso doméstico” gratuita para uso privado e não comercial que possui o recurso completo de edição comercial para até 50 endereços IP (antivirus endpoint para 10 usuários). Ela inclui os seguintes módulos: ➧ Segurança de rede: filtragem de pacotes, VPN, proteção contra invasão. ➧ Segurança web: filtragem de URL, controle de aplicativos, antivírus com HTTP, HTTPS, FTP e proxy. ➧ Segurança de email: anti-spam, antivírus com proxy SMTP+POP3. ➧ Segurança de servidor web: firewall de aplicativos web contra ataques de scripts de cross-site, injeção de SQL, e assim por diante. ➧ Segurança sem fio: controlador WLAN para pontos de acesso Sophos.
Figura 5 Além da área de transferência (de texto) própria, o Guacamole oferece um teclado na tela, aonde podemos digitar um texto e usar o mouse.
Linux Magazine #98 | Janeiro de 2013
➧ Antivírus endpoint: antivírus e controle de dispositivos para clientes Windows. Para obter uma licença, primeiro registre-se online [8] e, em seguida, faça login com suas credenciais. A licença gratuita estará disponível em View License/Home Use License.
Como criar um portal de usuário Pelo fato de as imagens pré-construídas para VMware entregarem um Sophos UTM 9.0 com um portal em HTML5 com o VMware Player, VMware Workstation ou um servidor ESX, isso é feito facilmente. Se preferir executar a máquina virtual no VirtualBox, poderá baixar a imagem ISO ao invés do aplicativo virtual e vinculá-la como uma medida de inicialização para criar uma máquina virtual manualmente. Após a instalação, ou a primeira execução da VM, um assistente de configuração simples guia o usuário através da configuração dos ajustes básicos, como atribuir a senha de administrador, configurar a conexão à Internet, habilitar a proteção de intrusão, configurar proxies, e por aí vai. No final deste processo, basta instalar a licença de uso doméstico, e estará pronto para continuar a configuração do portal HTML5.
Figura 6 O novo Sophos UTM 9.0 também oferece um portal HTML5 para o acesso aos recursos internos do sistema no navegador.
75
ANÁLISE | Desktop remoto Guacamole
O VPN HTML5 e portais de usuário são integrados para acesso a outros recursos. Por exemplo, podemos visualizar a quarentena de spam, baixar os clientes VPN pré-configurados e acessar o portal VPN HTML5. O primeiro passo permite, portanto, habilitar o portal do usuário em Management/User Portal e restringi-lo a redes e usuários individualmente, conforme aplicável. É claro, queremos que os usuários possam acessar o portal do usuário pela Internet. Por este motivo, digite AnyIPv4 em Allowed networks (redes permitidas) e selecione a opção Allow all users (permitir todos os usuários). Em seguida, em Definitions & Users/ Users & Groups (definições e usuários/ usuários e grupos), adicione os usuários que acessarão o portal. Em seguida, habilite HTML5 VPN portal em Remote Access/HTML5 VPN portal/ Enable (acesso remoto/HTML5 VPN portal/habilitar) e crie as conexões para os serviços internos. Para fazer isso, clique em New HTML5 VPN Portal
Listagem 1: Mapeamento de Usuário 01 <authorize username="tom" password="test"> 02 <protocol>rdp</protocol> 03 <param name="hostname"> 192.168.1.11</param> 04 <param name="port">3389 </param> 05 <param name="password"> </param> 06 </authorize>
Listagem 2: Senha com MD5 01 <authorize 02 username="tom" 03 password="b2016af253087887 ccb510d7543ed514" 04 encoding="md5"> 05 <protocol>vnc</protocol> 06 <param name="hostname"> localhost</param> 07 <param name="port">5900 </param> 08 <param name="password"> 123456</param> 09 </authorize>
76
connection (nova conexão com portal VPN HTML5), digite um nome para a conexão e selecione o protocolo – por exemplo, Remote Desktop (figura 6). Opcionalmente, podemos inserir as credenciais; os usuários podem fazer login no terminal de servidor diretamente via portal VPN HTML5. Esta abordagem é prática – quem iria querer confiar em um usuário externo com uma conta de administrador? Mais abaixo, podemos atribuir a nova conexão para todos os usuários e redes ou definir restrições. A conexão agora está pronta para ser usada. Usuários legítimos podem fazer login no portal
Quadro 1: Navegadores compatíveis com o HTML5 Para determinar se o seu navegador suporta recursos HTML5 e, em caso afirmativo, quais, o site de teste HTML5 [2] é altamente recomendável. Ele analisa o suporte a recursos individuais no navegador na velocidade da luz e atribui uma pontuação para cada elemento. O resultado é uma avaliação confiável da compatibilidade do navegador com o HTML5. A partir da atual safra de navegadores, o Chrome 21 facilmente mantém a liderança com 437 pontos, e o Internet Explorer 9 está em último lugar, com apenas 138 pontos. Em plataformas móveis (Android, iOS, Windows Phone, entre outros) o Opera 12 está há apenas dois pontos atrás do Chrome (em dispositivos Android 4) em todas as plataformas.
Quadro 2: Mais desktops remotos em HTML5 Para completar o assunto, mencionaremos apenas dois projetos mais interessantes neste momento; ambos fornecem desktops remotos através da tecnologia HTML5: ➧ ThinVNC [5] é um servidor VNC comercial (infelizmente, apenas para Windows) com criptografia SSL e autenticação NTLM integradas. ➧ noVNC [6] é um cliente VNC HTML5 licenciado sob LGPLv3 que requer um servidor VNC com suporte a WebSockets do lado do servidor.
do usuário, que eles acessam através do URL https:<endereco IP externo>. Após a autenticação bem sucedida, os usuários devem apenas clicar em HTML5-VPN-Portal e, em seguida, clicar no botão Connect (conectar) próximo às conexões pré-configuradas. Finalmente, devemos também mencionar que, como um sistema backend, o Sophos UTM 9.0 suporta uma ampla gama de soluções de autenticação, incluindo LDAP, Active Directory, Single Sign-On, Novell eDirectory e RADIUS. Pelo fato de a maioria dos fornecedores de solução de dois fatores de autenticação (por exemplo, o Vasco Digipass [9]) usarem a interface universal RADIUS, o acesso ao portal do usuário pode facilmente ser protegido com tokens. ■
Mais informações [1] Guacamole: http:// guac-dev.org/ [2] Suite de teste HTML5: http:// www.html5test.com/ [3] Código fonte do Guacamole: http://sourceforge. net/projects/guacamole/ files/current/source/ [4] Tomcat SSL how-to: http://tomcat.apache. org/tomcat-6.0-doc/ ssl-howto.html [5] ThinVNC: http://www. cybelesoft.com/thinvnc/ [6] noVNC: http://kanaka. github.com/noVNC/ [7] Astaro UTM: ftp://ftp. astaro.com/UTM/v9/ [8] Astaro login: https:// my.astaro.com/ [9] Digipass: http://www.vasco. com/products/products.aspx
Gostou do artigo? o? Queremos ouvir sua opinião. Fale conosco em cartas@linuxmagazine.com.br ne.com.b Este artigo no nosso o site: site http://lnm.com.br/article/8055 ticle 55
www.linuxmagazine.com.br
PREVIEW
Linux Magazine #99 System Rescue Qualquer sistema, quando executado durante um longo tempo está sujeito à panes inesperadas. Falhas de disco rígido, sistema de arquivos corrompido, ou simplesmente perda de arquivos podem ser alguns dos problemas que podem surgir. Na próxima edição da Linux Magazine, especialistas em recuperação de dados vão mostrar como utilizar a diversificada coleção de ferramentas para recuperação do sistema de forma que seja possível ressuscitar seu Linux e com a ascensão do recurso de inicialização em modo Live, a tarefa ficou ainda mais fácil. Edição imperdível! ■
Admin Magazine #09 OpenStack Capaz de gerenciar 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!
82
www.linuxmagazine.com.br