blog do Zé

7/8 de 2010

Confusão com libiconv, VirtualBox e glib no Mac OS X

Categoria: Mac OS X — jfonseca @ 2:43 pm

Uma das bibliotecas C mais úteis já produzidas é a GLib. Trata-se de um aglomerado de utilidades para linguagem C que inclui utilidades para strings, gerenciamento de memória, utilitários para arrays, listas, enfim, pense em algo e a GLib tem.

Compilei a GLib no Mac, porém ela exigia uma versão diferente da libiconv. Baixo e compilo a libiconv, volto pra GLib e tudo funciona sem problemas.

Muitas luas depois, preciso do VirtualBox para rodar o Windows, pois há um certo banco aqui no Brasil cujo home-banking não funciona no Mac. Então descubro que o VirtualBox não funciona mais…. A interface gráfica não dá dicas de por que o ícone aparece e some rapidamente. Parece um crash durante a inicialização, e nessa hora o terminal é nosso amigo.

Através do terminal, vou até /Applications/VirtualBox.app/Contents/MacOS e rodo o aplicativo ./VirtualBox. Para minha surpresa, o VirtualBox reclama que não encontrou o símbolo _iconv na bibliotea /usr/lib/libiconv.2.dylib

Recompilo o libiconv para outra arquitetura, usando um configure diferente. Usei ./configure –prefix=/usr CFLAGS=’-arch i386′ (cuidado, não compile usando esta opção). Tentei também outras arquiteturas, como x86_64. A experiência com arch i386 foi um desastre completo, tudo parou de funcionar. Não tinha mais acesso ao terminal, pois nenhum shell funciona sem o libiconv incluindo /bin/ksh, /bin/zsh e /bin/csh – todos que acompanham o Mac OS X.

Pior, o make não funciona sem o libiconv….ou seja, não tinha como recompilar a fonte da libiconv novamente para x86_64 – A solução era baixar uma versão binária do libiconv…mas onde? Busquei por toda parte, mas a única que encontrei era para Power PC, não ia resolver. O site DarwinPorts tem links para download que não funcionam, não conseguí testar.

DVD do Mac OS X ao Resgate
O jeito foi usar o DVD de instalação do Mac OS X. Já que não tenho shell, preciso fazer tudo pelo Finder. Primeiro é preciso expor os arquivos ocultos. Depois, é só navegar até usr/lib no DVD e copiar libiconv.2.dylib para /usr/lib – e pronto! Esquecí a GLib por agora, o importante é ter o resto do sistema funcionando.


 

Mostrando arquivos ocultos no Mac OS X

Categoria: Mac OS X — jfonseca @ 2:24 pm

Quem chega ao Mac OS X passando por outros UNIX, Linux por exemplo, logo percebe que a Apple aparou todas as arestas de usabilidade deste tradicional sistema operacional. Uma das adequações para usabilidade do Mac é ocultar tudo aquilo que 99% dos usuários jamais utilizarão.

Enquadram-se nessa lista os arquivos de sistema, e diretórios tradicionais do UNIX : /usr /lib /bin e por aí vai. Nenhum desses arquivos estão visíveis no Finder, é preciso ativar essa função, então lá vai a dica de como fazer.

Abra um terminal, copie e cole o comando:


defaults write com.apple.Finder AppleShowAllFiles YES

Tecle ENTER.

Agora será necessário reinicar o Finder para a nova configuração ter efeito. Só que o Finder é o shell do sistema, então não dá para usar command + Q e reiniciar.

Reiniciando o Finder
Pressione e segure a tecla OPTION, clique e segure o botão do mouse clicado no ícone do Finder: aparecerá um menu contextual. Clique em “Relaunch”, ou “Reiniciar”. Isto não reiniciará sua máquina, apenas o Finder lerá novamente suas configurações e reiniciará, é quase transparente para o usuário.

E pronto! Visite algumas pastas no Finder, tudo estará à mostra.

AVISO: Janelas configuradas para não mostrar arquivos de sistema, como instaladores, por exemplo, ficarão uma bagunça completa. Para quem usa o Mac OS X a trabalho, como eu, isso não é um problema, mas para usuários finais o novo visual pode ser indesejável.

 

22/7 de 2010

Como visualizar quais Virtual Hosts o Apache está atendendo no momento

Categoria: Linux,Perl,UNIX — jfonseca @ 12:19 am

Caso você administre um servidor Apache com dezenas ou centenas de Virtual Hosts, possivelmente já terá se deparado com picos de visitação que, normalmente, testam os limites do servidor. Caso possua apenas um site hospedado por servidor, esqueça o resto deste artigo. No entanto, na grande maioria dos ambientes de hospedagem, um servidor dedicado terá inúmeros hosts virtuais configurados, e é praticamente impossível saber, desconhecendo a origem do pico de visitação, qual é o responsável pela sobrecarga.

Para resolver este problema criei o seguinte script Perl que, combinado ao tcpdump, analisa o tráfego de rede atual, extraindo os cabeçalhos “Host:” e contando quantas vezes cada Host surge no tráfego capturado. Um handler do sinal SIGALRM imprime ao STDOUT as estatísticas atuais a cada 5 segundos, em ordem decrescente de demanda.

Assim, é possível ver, em tempo real, qual Virtual Host está gerando a maior demanda no servidor naquele instante.

Copie o seguinte script e salve como tcpd_host_filter.pl

#!/usr/bin/perl

# http://zefonseca.com/blogs/ze/

use strict;
use warnings;

our %hosts = ();
our $match_count = 0;

$SIG{ALRM} = \&dump_stats;

alarm(5);

while (<>) {
        if ( m{Host\:\s+(\S+)}gms ) {
                $hosts{$1}++;
                $match_count++;
        }
}

sub dump_stats {
        print "\n\nACTIVE HOSTS\n";
        foreach my $host ( reverse sort { $hosts{$a} <=> $hosts{$b} } keys %hosts ) {
                my $ratio = $hosts{$host} / $match_count;
                printf "%-5d %-32s %.2f %% \n", $hosts{$host}, $host, $ratio*100;
        }
        alarm(5);
}

Torne o script executavel:

chmod 755 tcpd_host_filter.pl

Agora rode o tcpdump com as opções -s 65535, que determina o tamanho máximo de captura, e -w – que escreve todo o conteúdo do pacote capturado à saída padrão.

tcpdump -s 65535 -w - | ./tcpd_host_filter.pl

O script lerá a captura em tempo real, no entanto só imprimirá as estatísticas a cada 5 segundos, para evitar uma inundação de dados na tela.

Exemplo de saída:

ACTIVE HOSTS
120   site1.com             30.61 %
116   site2.com                            29.59 %
74    zefonseca.com                    18.88 %
29    site3.com                        7.40 %
9     site4.com                 2.30 %
8     site5.com               2.04 %
7     site6.com                 1.79 %
7     site7.com                 1.79 %
[ ... ]

 

10/7 de 2010

Senha de root do iPhone 3GS

Categoria: UNIX — jfonseca @ 9:18 am

Para quem precisar, a senha de root do iPhone 3GS é alpine


 

4/11 de 2009

Slax: Slackware-like Live CD

Categoria: Linux,UNIX — jfonseca @ 8:55 pm

Slax - Live CD estilo SlackwareHoje baixei minha primeira cópia do Slax, um live CD baseado no Slackware que você quase não percebe se tratar de uma distribuição diferente da oficial.

Após instalar o Slackware 13 em minha máquina principal de trabalho, precisei de um live-CD para meu velho notebook Toshiba. O Slax funcionou perfeitamente com todo o hardware e resolveu meu problema. O download também foi absurdamente rapido, me pergunto se tem mirror no Brasil.

Flashback
Para quem não sabe o Slackware foi uma das primeiras distros Linux do mundo. É a mais antiga ainda em desenvolvimento. Coincidentemente foi a minha primeira distro, lá em 1996, quando o projeto Slackware ainda tinha 3 anos de idade.

Após utilizar o RedHat e posteriormente o Fedora Core, tenho utilizado o Slackware diariamente no trabalho, desde a versão 11. As telas de instalação continuam as mesmas de 10 anos atrás e o “feel” do sistema é o mesmo, você tem que resolver tudo à mão. Foi uma das minhas melhores ferramentas para aprender o Linux lá nos primórdios quando a Internet era cara, lenta e discada.


 

27/3 de 2009

Para que serve kill -0(kill zero) no UNIX?

Categoria: Linux,UNIX — jfonseca @ 12:45 pm

Encontrei esta dica interessante hoje : o que faz o sinal zero, enviado através do kill -0 no UNIX?

Resposta: nada.

Então para que serve? Para saber se um processo existe.

Ao enviar um kill -0 [PID] o kill retorna 0 (tudo ok) se o processo existe, ou 1 (“erro”) caso contrário. Como diz o post original, é uma forma até elegante de saber se um PID existe à partir de um shell script.


 

16/2 de 2009

Backup do meu arquivo ~/.emacs – Configuração com auto indentação e sem backups

Categoria: Programação,UNIX — jfonseca @ 4:29 pm

Este é o backup do meu ~/.emacs
Decidí trazer aqui pro blog de modo que possa puxá-lo sempre que necessário em outras máquinas, e também para compartilhar com vocês, claro!

O que essa configuração faz? Bem, eu não queria usar o modo CUA que imita as teclas de atalho do Windows, pois já me acostumei com as tradicionais sequências do Emacs e consigo ser produtivo com elas. Caso se interesse, o modo CUA deixa o Emacs semelhante aos editores do Windows, Ctrl+c copia, Ctrl+v cola, Ctrl+x recorta, Ctrl+z para desfazer e Shift-movimento para selecionar.

Para usar o modo CUA do Emacs insira o seguinte no seu arquivo ~/.emacs (caso não exista, deve criá-lo):

(cua-mode t)
(transient-mark-mode 1)
(setq cua-keep-region-after-copy t)

No entanto prefiro a seguinte configuração:

(setq indent-line-function ‘indent-relative-maybe)
(setq make-backup-files nil) ;; desabilita criação de arquivos de backup com til, exemplo: index.html~
(global-set-key (kbd “TAB”) ‘self-insert-command) ;; força o emacs a inserir uma tabulação sempre que eu teclar
(define-key global-map (kbd “RET”) ‘newline-and-indent) ;; torna o comportamento do ENTER o mesmo de Ctrl+J

Aviso: Emacs vicia! Ao terminar este post automaticamente digitei C-x C-s


 

Debian 5.0 lançado!

Categoria: Linux,Noticias de Tecnologia,UNIX — jfonseca @ 10:47 am

Logotipo oficial DebianVocê já deve ter ouvido falar: o Debian 5.0 foi finalmente lançado no Sábado 14/2.

Confira changelog e release aqui.

Baixe o Torrent do ISO para CD ou DVD aqui.

Ou compre uma distro para ajudar a financiar o desenvolvimento do Debian, clicando aqui.


 

15/2 de 2009

De 1980 a 2009, o software livre nunca teve apoio institucional do bloco socialista

Categoria: Cultura (Quase sempre)Inútil,UNIX,Velharia — jfonseca @ 10:11 am

A Reuters publicou uma notícia que me chamou a atenção: Cuba teria finalmente criado uma distribuição Linux própria e estaria em processo de migração de todos seus computadores estatais para ela.

Confesso que fiquei surpreso com a notícia. Não pela questão técnica, porque não duvido que os Cubanos possam criar uma distribuição excelente. Fiquei surpreso, sim, ao descobrir que Cuba, até hoje, não tinha tornado institucionalmente obrigatório o uso de software livre nas suas dependências estatais. Tinha em mente que o uso de Microsoft Windows por lá era simplesmente proibido. Eu estava enganado – não só não é proibido, como o governo Cubano parece fazer vista grossa do uso desse sistema em cópias piratas, e o governo de Raúl Castro tem seguido a tendência do governo de Fidel de adotar muito lentamente o software livre.

Pior, fazendo uma retrospectiva rápida, podemos ir além e concluir que, de 1980 para cá, nenhum país do chamado “bloco socialista” apoiou, de fato, o movimento do software livre.

Jamais havia me questionado sobre o assunto mas, realmente, saber que apenas em 2009 a ilha decidiu substituir oficialmente(com ações concretas) o Windows por Linux demonstra que há um vácuo imenso entre o discurso oficial e a prática. Um movimento que teve início nos anos 1980 e que, por muito tempo, foi considerado “contrário aos princípios do mercado” não teve qualquer apoio institucional do bloco socialista. Essa constatação é, no mínimo, intrigante.

Uma reportagem falando sobre a migração ao software livre em Cuba afirma que “apesar de [Cuba] ter proclamado sua intenção de migrar todos seus sistemas para software livre em 2005, os esforços neste sentido parecem depender mais de pequenos grupos de entusiastas do que de apoio politico e institucional do governo Cubano”

Segundo a mesma reportagem, o professor Yudivián Almeida, da Universidade de Havana afirma que “ainda há grande resistência à mudança”.

É claro que a Internet propiciou a globalização do software livre, o próprio Linux só foi possível devido à colaboração global através da grande rede. O acesso das massas à Internet só foi possível após o fim da guerra fria, com a transferência do controle da Internet de militares da DARPA para civís do InterNIC em 1992. O fato do desenvolvimento do Linux ter explodido nessa época não é mera coincidência. Devemos admitir que a Internet foi o grande catalisador do movimento do software livre, mas, em termos históricos, o questionamento à falta de apoio político do bloco comunista ao software livre ainda é válido.

Richard Stallman - Pai do movimento pelo software livre

Richard Stallman - Pai do movimento pelo software livre

Em 1983 Richard Stallman iniciou o projeto GNU, produzindo um compilador excelente da linguagem C(GCC, o mais utilizado até hoje), um editor de textos poderoso(Emacs) e deu início ao trabalho num kernel Unix livre(HURD), projeto que não obteve sucesso mas inspirou muitos outros posteriormente. Hoje o projeto GNU é a força motriz por trás do Linux, OpenSolaris, FreeBSD, NetBSD, OpenBSD e inúmeros outros.

Segundo Eric Raymond, em seu livro “The Art of Unix Programming”, o software livre só decolou no “mundo capitalista” quando o nome “software livre” foi substituido por “software aberto”. Por que? Para evitar conotações socialistas e, segundo o próprio Raymond, “retirar a carga ideológica do projeto de Richard Stallman”. A mudança para “OSS” ao invés de “Free Software” pegou embalo em 1998 quando as fundações Mozilla, Apache, X e por aí vai todas concordaram em utilizar o termo “software aberto” ao invés de free software. Foi só então que a IBM e outros gigantes capitalistas adotaram o Linux como alternativa à Microsoft.

Ou seja, o mercado teve a “preocupação”, ou puro preconceito ideológico, de evitar conotações socialistas no uso do software livre, mas Cuba não se importou nem um pouco com a mensagem política enviada ao mundo ao permitirem o uso do Microsoft Windows até os dias de hoje?

Vejam só. Eis que uma década depois da mudança da tarja de “free software” para “open source”, Cuba ainda não havia realmente, de fato, abraçado a causa. Isso nos diz algo ainda mais marcante: até 1998 nenhum país “socialista” havia utilizado politicamente o software livre. China, Cuba e até mesmo a URSS não enxergaram o potencial do software livre nos anos 1970, ou na década de 80 quando Ronald Reagan os chamava de ‘Império do Mal’, ou até mesmo na euforia do mundo pós-Guerra Fria dos anos 90?

Toda aquela “birra” ideológica do início do novo mliênio, de que o software livre seria uma afronta ao mercado livre, não passou de marketing de empresas de software fechado para tentar evitar que uma metodologia mais inteligente de compilação de conhecimento humano prejudicasse seus lucros.

Hoje podemos concluir que, enquanto Richard Stallman lutava para que todo software fosse aberto e naturalmente acessível por todas as classes sociais, todo o bloco socialista ignorou solenemente aquele que poderia ter sido um de seus maiores trunfos: o software livre.

Em “Cyberpunk”, o jornalista John Markoff narra a história de “Pengo”, um hacker de Berlim oriental que se infiltrava em computadores dos EUA, roubava código fonte e depois vendia para agentes secretos do bloco socialista. A Russia preferiu a pirataria ao invés de apoiar Stallman e todo o movimento de software livre dos anos 1980.

Em retrospectiva, notamos que enquanto Bill Gates dava uma surra no software livre e se tornava o homem mais rico do mundo vendendo código fechado, todo o bloco socialista ficou passivo, observando a luta dos hackers anarquistas pelo direito ao acesso à tecnologia por todas as classes sociais.

O caso do hacker “Pengo” ilustra como a URSS preferiu comprar mercadoria ilícita de hackers adolescentes à ter uma política institucional de apoio ao software livre. O que poderia ter sido mais poderoso como arma ideológica do que uma iniciativa soviética de apoiar o “Free Software” produzindo compiladores grátis e sistemas operacionais de alta qualidade inteiramente livres de royalties de corporações e governos estrangeiros? Imagine se o software livre tivesse apoio do bloco comunista e algo semelhante ao Linux tivesse nascido em 1980…

Ainda segundo a reportagem, em pleno 2009 Cuba utiliza Linux em apenas 20% de seus computadores. Podemos supor, com pequena margem de erro, que os outros 80% de computadores de Cuba utilizam alguma versão do Microsoft Windows.

A estimativa de um especialista da Universidade de Ciência de Informação de Cuba é de que em 5 anos 50% dos computadores da ilha estejam rodando Linux. Espera aí, 5 anos para atingir 50%???!!! É inacreditável.

Torço para que a distro Nova Linux de Cuba tenha sucesso e que todos os cubanos tenham acesso livre à nova distro. Na verdade Cuba deveria simplesmente banir imediatamente a pirataria de sistemas Microsoft Windows e abrir completamente o acesso do povo Cubano ao NetBSD, FreeBSD, Apache, Linux, Mozilla e demais projetos abertos.

Um pequeno retrospecto histórico nos mostra que já passou da hora, e muito.


 

8/8 de 2008

Hoje é um bom dia para atualizar seu DNS

Categoria: Segurança de Redes,UNIX — jfonseca @ 10:49 pm

Detalhes técnicos da falha de segurança no sistema DNS descoberta no início do mês de Julho começam a se tornar públicos, e alguns provedores de acesso já são vítimas do problema, segundo esta matéria do site Security Focus. A grande imprensa tem noticiado esta falha como sendo uma das piores da história. E, pelo pouco que foi divulgado ao distinto público pelos técnicos envolvidos na correção da mesma, parece que desta vez a imprensa não está exagerando.

Pode uma falha tão absurda existir no software mais testado do mundo?
O responsável pela divulgação da falha, Dan Kaminsky, foi questionado publicamente sobre a veracidade de sua “descoberta”. Foi então que decidiu revelar o problema a um seleto grupo de pesquisadores para que eles confirmassem ao público, ou não, a gravidade do problema. Resulta que todos saíram da reunião acendando um sinal de positivo: o problema era grave.

O megaproblema: A falha é na especificação DNS
A especificação do sistema de DNS se baseia em parte, em confiança entre servidores mestre publicados por donos de domínios, assim como outras tecnologias relacionadas à Internet(o sistema de email, por exemplo). Quando um servidor mestre responde, o DNS tradicional não verifica se a resposta veio do servidor correto, por exemplo.

Há um consenso entre especialistas que o DNS é naturalmente vulnerável a ataques mais sofisticados. O fato de um problema dessa magnitude ter sido descoberto no DNS aos seus 40 anos de idade mostra a complexidade do software: uma falha pode se esconder décadas, e um dia aparecer arriscando a integridade de toda a Internet.

Sentados ao redor de uma mesa em reunião emergencial dia 9 de Julho, alguns dos maiores especialistas de segurança de DNS do mundo solucionaram rapidamente o problema. Bem, em termos. Acontece que o problema não tem solução, é uma falha natural do sistema DNS – ele foi feito assim, e agora descobriu-se que parte da especificação contém uma falha de segurança.

Software é conhecimento. Programar computadores é uma forma de compilar conhecimento computável por uma máquina. E, assim como existem falhas, bugs nos softwares, há falhas também nas suas especificações. Neste caso a especificação DNS tem um bug, e todos os servidores que a implementam corretamente, possuem a falha também. Daí resulta a gravidade do problema: o bug está em toda a infraestrutura da Internet.

A falha
Os detalhes técnicos da falha não foram divulgados, mas eis o que conseguí compreender pelo que foi divulgado na imprensa : quando você pergunta a um servidor DNS de seu provedor “qual o endereço do site www.google.com”, esse servidor deve perguntar aos servidores Google qual o endereço.

Acontece que o Google é um site muito acessado, portanto o servidor DNS de seu provedor mantém os endereços mais comuns em memória, para não consultar os servidores Google bilhões de vezes por dia. Em termos informáticos, como você deve saber se está lendo este post até aqui, o nome de um armazém temporário de dados com finalidade de acelerar uma consulta é um “cache”.

DNS Cache poisoning
O que acontece, então, se você conseguir alterar os dados desse cache dos provedores de acesso? Digamos que o servidor consulta o DNS mestre do Google, e obtém o endereço correto. Porém, o servidor precisará consultar o Google novamente em 24 ou 48 horas para saber se o endereço mudou, e assim manter o cache sincronizado com o servidor principal.

E se, por acaso, fosse possível interferir nessa comunicação do seu servidor cache com o servidor mestre e inserir no cache um endereço IP diferente daquele do Google? Se voce conseguir a proeza, terá sequestrado o site do Google. Você terá “envenenado” o cache DNS. É disso que se trata esta falha de segurança: Dan Kaminskydescobriu que é possível fazer exatamente isso interferindo com a resposta do servidor mestre antes que ela chegue ao servidor cache.

E qual é a falha?
Como poderiam alterar a resposta do servidor mestre? Bem, esse é o detalhe que não foi divulgado. A falha poderia parar a Internet, então Kaminsky trabalhou com os proprietários de redes de infraestrutura para trampar o furo antes que ele se tornasse 100% público. Porém alguns detalhes vazaram, e há exploits na web que exploram a falha com sucesso. O que sabemos é que a solução proposta torna aleatória a porta UDP de origem quando o DNS se conecta ao servidor mestre(sempre porta 53) para renovar o cache.

Tornar a porta UDP de origem aleatória significa que de alguma maneira o atacante estaria conseguindo adivinhar quando o servidor consultava o servidor mestre e conectava-se à essa porta antes da resposta do mestre, com endereço de origem falso, devolvendo informação inválida(e de interesse do vândalo). Seria como substituir o endereço do Google com o de seu site. Imagine o potencial disso…

A solução
Tecnicamente não há nada de novo na solução proposta, pois ela já havia sido descrita há anos atrás pelo matemático e especialista em segurança Daniel J Bernstein : as portas de origem das conexões DNS devem ser aleatórias para dificultar o ataque.

Após algumas horas de trabalho duro (segundo este relato de Kaminsky) o grupo decidiu que a solução do problema era adotar a idéia de Bernstein : remendar todos os principais softwares de DNS tornando a porta de origem das consultas aos servidores mestres aleatória.

Está passando da hora de proteger o seu DNS
O número de exploits para a falha está crescendo, já existem pelo menos 2 sendo divulgados sendo que um deles permite “substituir todos os servidores DNS de um domínio”, efetivamente sequestrando toda uma rede. Imagine o seguinte: o vândalo poderia substituir os servidores do domínio globo.com, por exemplo, e todos os subsites do globo.com passariam a seu controle.

Os detalhes que permitiram aos desenvolvedores de exploits produzirem o código funcional foram compilados até ontem, 7/8. Ou seja, hoje é um bom dia para atualizar seu sistema DNS. Se o seu cache for envenenado, você permanecerá envenenado por 24 a 72 horas, dependendo do TTL(Time To Live, ou tempo depois do qual o cache deve recarregar), então evite perder dias de trabalho e atualize já seu servidor.

Nota: não existe conserto para o BIND 8. Se você estiver rodando a versão 8 será preciso migrar para 9.5. O Yahoo! era o maior usuário de BIND 8 conhecido e foi obrigado a atualizar toda sua infraestrutura.

Link para a página do BIND no Internet Systems Consortium