Archive for the ‘Dicas e truques’ Category

PostHeaderIcon Fazendo seu servidor Apache “falar” um pouco menos…

Tarefa básica e que faz parte do cotidiano de um usuário: abrir o browser de sua preferência e acessar algum site na Internet. Simples, não? Do ponto de vista do usuário, sim. Mas, aos olhos de um administrador de sistemas preocupado com segurança, essa é uma atividade que merece ser um pouco mais estudada. Todas as vezes que um cliente conecta-se a um servidor Web há uma troca de informações entre ambas as partes. Nesse caso, a linguagem falada é o HTTP. A questão é que algumas dessas informações podem revelar informações do seu servidor Web úteis na elaboração de um ataque.

Para verificar algumas das informações comumente reveladas por um servidor Web aos clientes que conectam-se a ele, basta utilizar o antiquado mas ainda útil telnet. Nesse caso, é suficiente escolher um site qualquer, direcionar a conexão para a porta 80 e submeter ao servidor algumas das poucas informações obrigatórias do protocolo HTTP (GET e Host, por exemplo), conforme mostrado a seguir:

# root@scadufax:~# telnet www.xxxxx.com.br 80
Trying 201.123.123.121...
Connected to server.xxxxx.com.br.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.xxxxx.com.br

Após a cláusula “Host”, pressione duas vezes Enter. Em seguida, o servidor Web deve retornar os cabeçalhos HTTP de resposta e o conteúdo da página, de acordo como mostrado abaixo:

HTTP/1.1 200 OK
Date: Fri, 08 Jul 2011 00:47:40 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny10 with Suhosin-Patch
Last-Modified: Thu, 20 Apr 2006 18:44:51 GMT
ETag: "9f132-c96-411e12ad8aec0"
Accept-Ranges: bytes
Content-Length: 3222
Content-Type: text/html; charset=ISO-8859-1

<<< CONTEÚDO DA PÁGINA>>>

Dentre os cabeçalhos de resposta, dedique atenção especial ao “Server”, em destaque. Nele, é possível identificar o servidor Web (Apache), sua versão (2.2.9), o sistema operacional (Debian) e ainda a versão do PHP (5.2.6-1+lenny10). Tais informações já ajudam um atacante a escolher quais ferramentas ele poderá ajudar em um eventual ataque. Pior ainda: o atacante consegue descobrir se seu servidor encontra-se completamente desatualizado e, portanto, possivelmente vulnerável contra um conjunto maior de exploits. Revelar essas informações no cabeçalho “Server” é o comportamento mais comum para um servidor Apache instalado diretamente dos repositórios de pacotes de sua distribuição.

Outra forma de identificar se o servidor está revelando mais informações do que deveria consiste simplesmente em provocar algum erro, acessando, por exemplo, uma página que, certamente, não existe naquele servidor Web:

http://www.xxxxx.com.br/abcdefghijklmnop

Servidor Apache revelando informações desnecessárias.

Normalmente, em sites mais bem configurados, as páginas de erro são todas customizadas. Nesses casos, algumas vezes, as informações sobre o servidor não são apresentadas.

Surpreso? É nesse estado que se encontra seu servidor? Bem, então é hora de corrigir esse problema.

O Apache possui duas configurações bem simples mas que são costumeiramente ignoradas, fundalmentalmente pelos administradores de sistemas menos experientes: ServerTokens e ServerSignature que podem impedir que o servidor revele informações mais detalhadas no cabeçalho “Server” do HTTP e que informações desnecessárias sejam apresentadas nas páginas de erro default do Apache, respectivamente. Para fazê-las desempenhar essas funções, basta adicioná-las no arquivo de configuração do Apache da seguinte maneira:

ServerTokens Prod
ServerSignature Off

Depois, reinicie o seu servidor Apache e veja se agora, seu servidor passou a “falar” um pouco menos…

Logicamente que existem muitas outras providências a serem tomadas para fazer um bom trabalho de hardening de um servidor Apache. Entretanto, deixaremos isso para uma outra oportunidade.

Bem, acho que é isso. Até o próximo post.

PostHeaderIcon Meu eeePC 701 e o Ubuntu 11.04.

Assim que a febre dos netbooks começou a se espalhar, comprei o Asus eeePC 701, um dos modelos de mais sucesso desse tipo de equipamento e precursor de muitos outros notebooks que foram lançados posteriormente. Apesar de já ser um pouco antigo, eu ainda o utilizo para fazer tarefas menores e algumas “experiências”, principalmente envolvendo segurança de sistemas e redes. Enfim, o meu eeePC 701 desempenha uma função de coringa em meio aos meus computadores.

Já utilizei diversas distribuições Linux nesse equipamento. Aliás, foi essa uma das razões pelas quais eu o adquiri. Testar algumas distribuições Linux é um hobby antigo. Além da distro original, o Xandros, que durou poucas horas no equipamento, já testei diversas outras opções baseadas em Debian, o Eeebuntu, o Easy Peasy, dentre outros. O Ubuntu passou, então, a ter uma versão oficial para esses equipamentos: o Ubuntu Netbook Remix, que comecei a utilizar em meu Asus eeePC 701. Entretanto, esse produto passou a ser integrado ao Ubuntu padrão. Ou seja, a partir de então, a mesma imagem ISO poderia ser utilizada para notebooks e netbooks.

Read the rest of this entry »

PostHeaderIcon Problemas para remover volumes lógicos com LVM2?

Sem sombra de dúvidas, planejar o particionamento de um servidor GNU/Linux com LVM é uma opção muito interessante e praticamente obrigatória para um sysadmin precavido e organizado. Entretanto, podemos tratar um pouco mais sobre o LVM e suas vantagens em outra oportunidade. Esse rápido post é apenas para compartilhar uma situação que já passei em algumas oportunidades: em alguns servidores que administro, já tive problemas para remover volumes lógicos (LVs).

A maneira mais comum para remover um LV consiste, simplesmente, em utilizar o comando lvremove. Por exemplo:

# lvremove /dev/MyVG/lvol_test

Entretanto, em alguns sistemas, me deparei com o seguinte erro ao tentar remover LV:

# lvremove /dev/MyVG/lvol_test
Can't remove open logical volume "lvol_test"

Bem, caso você esteja com esse problema, existe uma solução muito simples por meio da utilização do dmsetup.

# dmsetup info -c MyVG-lvol_test
Name               Maj Min Stat   Open Targ Event  UUID
MyVG-lvol_test     253   8 L–w       1    1      0 XiuqlKY91paW...

Nesse caso, o valor que interessa é o da coluna Open. O  número “1” identifica que o LV encontra-se no status de aberto e isso pode ser a causa do problema. Se esse for o seu caso, execute o comando dmsetup da seguinte maneira:

# dmsetup remove MyVG-lvol_test

Em seguida, tente executar novamente o comando lvremove que, dessa vez, deve reportar a remoção com sucesso do LV:

# lvremove /dev/MyVG/lvol_test
Logical volume "lvol_test" successfully removed

Bem, acho que é isso.

PostHeaderIcon Você ainda apaga arquivos com o “rm”? Removendo arquivos de maneira segura com o shred.

Remover arquivos faz parte da rotina diária de qualquer usuário de um sistema operacional, não é mesmo? Provavelmente você deve fazer isso algumas dezenas de vezes ao longo de um dia de trabalho em frente ao computador. Caso um arquivo qualquer (como uma ISO de um sistema operacional, por exemplo) esteja sendo apagado simplesmente para liberar espaço em seus meios de armazenamento, que mal há utilizar o bom e velho “rm”? Por outro lado, tenho a impressão de que você não gostaria de saber que aquele script que contém todas as suas regras de firewall, por exemplo, ou qualquer outro arquivo com alguma informação sensível pode cair em mãos erradas se você confiar no apenas no “rm”.

Bem, primeiramente, permita que eu me desculpe por ‘descortinar’ essa verdade caso você ainda achasse, até o parágrafo anterior, que um “rm -f” era um comando forte e com tanta ‘personalidade’ ao ponto de mandar pro espaço qualquer arquivo ou diretório. O fato é que ao remover um arquivo com esse comando o sistema operacional, em poucas palavras, simplesmente retira os “ponteiros” para os blocos de dados que formavam o arquivo. Por outro lado, esses blocos estão lá em seu HD e podem, com a ajuda de algumas ferramentas, ser recuperados. Provavelmente esses blocos irão ser sobrescritos apenas quando novos arquivos forem utilizando aqueles mesmos espaços e isso pode demorar um tempo bastante considerável principalmente se o computador em questão não tiver operações um fluxo de gravação de arquivos muito intenso.

E, antes que você se pergunte, mas quem pode ter acesso ao meu HD? Bem, fácil. Seu computador pode ser invadido através da Internet, você pode perdê-lo, você pode ser roubado, você pode vendê-lo ou você pode mandá-lo para uma assistência técnica para consertar um problema, por exemplo. Enfim, são muitas as possibilidade, não é verdade? Pior ainda quando se está falando dos pequenos e portáteis pen drives que carregamos conosco o tempo todo para todo lugar. Quando é possível, pode-se utilizar os sistemas de arquivos criptografados. Entretanto, em situações onde não é possível utilizar essas soluções, é preciso tomar cuidado para garantir que arquivos sensíveis foram, de fato, removidos.

Read the rest of this entry »

PostHeaderIcon Problemas para acessar o iPhone a partir do Ubuntu 10.10?

As coisas parecem estar progredindo bastante quando se fala de GNU/Linux, não é mesmo? Lembro-me da época em que tudo era muito complicado e trabalhoso para funcionar. Hoje em dia é provável que muitos usuários instalem uma distribuição como o Ubuntu em seus computadores e, em poucos minutos, tenham tudo funcionando perfeitamente, sem que sejam necessárias peripécias e truques. Mesmo assim, problemas acontecem…

Em algumas versões anteriores do Ubuntu, por exemplo, era necessário instalar alguns pacotes e fazer algumas configurações para que fosse possível acessar um iPhone a partir de seu sistema operacional. Com o Ubuntu 10.10 (Maverick Meerkat) as coisas evoluíram bastante: ao conectar um iPhone, o sistema já apresenta o seu sistema de arquivos automaticamente e ainda fica apto a conectar com ferramentas como o gtkpod, o Banshee e o RhythmBox. Maravilha, não? Isso funciona muito bem… ou, pelo menos, funcionava até atualizar a versão do iOS para a 4.2.1… Com essa versão, a conexão do aparelho celular ao seu computador deve apresentar um erro ao invés da tela que você estava acostumado a ver.

Com uma rápida pesquisa na Internet, encontrei uma solução muito simples que resolveu o problema.  Em poucas palavras, a saída consiste em atualizar alguns pacotes, dentre os quais o libimobiledevices, uma biblioteca que provê a interface de comunicação de dispositivos como iPhones e iPod Touchs com o sistema operacional, através de um repositório que deve ser adicionado ao seu sistema operacional.

Para isso, abra um terminal como super-usuário e execute os seguintes comandos:

# add-apt-repository ppa:pmcenery/ppa
# apt-get update
# apt-get dist-upgrade

Caso seu terminal não seja de super-usuário, não esqueça de acrescentar o “sudo” antes de cada um dos três comandos anteriores.

Após a execução dos comandos anteriores, basta reconectar o iPhone ao Ubuntu e tudo deve estar funcionando novamente. Simples, não?

PostHeaderIcon Criando um sistema de arquivos criptografado no GNU/Linux.

O aumento da capacidade de armazenamento dos meios de armazenamento (HDs, pen drives, cartões de memória, etc) e a redução drástica nos preços desses equipamentos mantém uma relação proporcional ao nível de dependência, cada vez maior, diga-se de passagem, que os usuários (e suas corporações) possuem com relação às informações preservadas nesses dispositivos. Hoje, pequenos pen drives possuem muito mais espaço de armazenamento do que servidores inteiros de alguns anos atrás. Discos com terabytes de capacidade podem ser adquiridos na maioria das lojas de informática a preços bem acessíveis. Some-se a isso o fato desses meios de armazenamento estarem menores e , portanto, “perambulando” em bolsas, bolsos, mochilas, pastas, dentre outros.

Essas facilidades, entretanto, aumentam em muito a possibilidade de se perder esses equipamentos ou mesmo tê-los furtados por outra pessoa. Ainda que sejam arquivos de natureza pessoal, tais como fotos, e-mails e outros documentos, a maioria das pessoas não gostaria de ver esses arquivos em mãos erradas, não é mesmo? Trocando o contexto para o meio corporativo, o comprometimento de informações pode inviabilizar projetos, negócios, estratégias e até a própria sobrevivência da instituição. Por outro lado, são poucas as pessoas e as instituições que têm implementados mecanismos que possam proteger as informações contra a perda ou o roubo dos meios de armazenamento. A grande maioria prefere sofrer com o arrependimento e com as lamentações quando perdem seus dados e os deixam expostos sem qualquer proteção para evitar que os mesmos sejam acessados (e explorados) livremente.

A boa notícia é que existem recursos muito simples para instalar e configurar alguns mecanismos e ferramentas para melhorar a confidencialidade de suas informações. Dentre os diversos recursos e ferramentas disponíveis, uma das mais eficazes são os sistemas de arquivos criptografados e, em ambientes GNU/Linux é algo simples de fazer. A seguir, compartilho uma das maneiras que costumo utilizar para criar, rapidamente, sistemas de arquivos criptografados. Vamos lá?

Read the rest of this entry »

PostHeaderIcon Rsync funciona com o SSH em uma porta diferente da 22?

O rsync é uma ferramenta extremamente útil e bastante utilizada por diversos administradores de sistemas Unix/Linux e até mesmo por usuários mais avançados. O próprio nome do utilitário já se confunde com a função de sincronizar arquivos e diretórios. Basicamente, quando se deseja utilizar essa ferramenta para sincronizar arquivos entre máquinas distintas, existem duas maneiras básicas e mais comuns: ou por meio de um daemon rsync que deve estar sendo executado na máquina onde se deseja sincronizar os arquivos; ou através do popular servidor SSH. Como a última alternativa já se aproveita de um serviço de acesso remoto seguro, presente na grande maioria das máquinas que possui Unix e/ou alguma distribuição GNU/Linux, essa pode ser a maneira mais prática.

Por exemplo, suponha que você deseje sincronizar o conteúdo do diretório /home/jansen/docs com o diretório /home/bkp/jansen que fica na máquina chamada aragorn.jsena.com.br. Considerando que existe um usuário chamado jsena no host aragorn.jsena.com.br e um servidor SSH, basta utilizar o seguinte comando para realizar essa tarefa:

$ rsync -avz /home/jansen/docs jsena@aragorn.jsena.com.br:/home/jsena/bkp

Simples, não? É claro que existem outras opções do rsync bastante úteis e que podem ser consideradas para fazer operações de sincronismo mais customizadas e específicas. Normalmente, o SSH irá solicitar a senha para autenticar o usuário jsena no host aragorn.jsena.com.br. Entretanto, caso seja de seu interesse executar esse sincronismo automaticamente, sem a necessidade de inserção de senha, basta gerar um par de chaves com o aplicativo ssh-keygen e transferir a chave pública do usuário (criada normalmente com o nome de id_pub.dsa ou id_pub.rsa) em seu computador local para o arquivo /home/jsena/.ssh/authorized_keys. Mas, isso é assunto para outra oportunidade. A questão aqui é tratar do seguinte problema: como fazer o rsync funcionar por meio do SSH se esse servidor não estiver sendo executado em sua porta TCP padrão, a 22?

Antes que você possa se perguntar: “afinal de contas, por que utilizar o SSH em uma porta diferente da padrão?”, aí vai uma rápida explicação. Sempre coloco esse serviço para executar em outras portas, diferentes da padrão por questões de segurança e de hábito. Isso não representa muita segurança (e uma melhor solução seria utilizar o SPA, Single Packet Authorization). Po outro lado, quando isso não é aplicável, essa medida pode, ao menos, desviar a atenção principalmente dos atacantes e/ou curiosos menos experientes. O problema é que o rsync não possui um parâmetro do tipo “port” ou “-p” para se indicar a utilização de uma outra porta quando o SSH está sendo utilizado para o sincronismo de arquivos. A solução é, por outro lado, bastante simples. Tomando como base o exemplo apresentado e supondo que o servidor SSH no host aragorn.jsena.com.br esteja funcionando na porta 22119, basta executar o comando anterior da seguinte maneira:

$ rsync -avz -e 'ssh -p 22119' /home/jansen/docs \
      jsena@aragorn.jsena.com.br:/home/jsena/bkp

Pronto. O problema está resolvido!

PostHeaderIcon Relembrando os clássicos do Atari dos anos 80 no Ubuntu.

River Raid executando no emulador de Atari 2600 Stella

É assustadora a quantidade de botões, combinações, truques e interatividade dos novos consoles de video games. Mais espantosas ainda são a qualidade e a realidade dos gráficos e dos sons de cada jogo o que faz com que os novos “brinquedos” atraiam a atenção de muitos marmanjos. Entretando, nem sempre foi assim. Existia uma remota época em que os video games tinham muito menos recursos e o gráfico precisava ser “completado” com uma boa dose de boa vontade e de imaginação das crianças e dos jovens. Ao invés de incontáveis botões, apenas um controle para direcionar e um botão para apertar eram suficientes. Essa era a realidade dos jogos nos anos 80.

Apesar de bem ultrapassados para os dias de hoje, esses jogos eletrônicos fizeram parte da vida de muitas crianças daquela época. Se você ficou horas em frente ao aparelho de televisão jogando clássicos como River Raid, Pitfall, Enduro, Missile Command, H.E.R.O e muitos outros, você deve ter boas memórias do video game mais clássico daqueles tempos: o Atari 2600.

Se você é dessa época e quer reviver esses momentos em seu Ubuntu é bem simples e demora apenas alguns poucos minutos para tudo estar instalado e funcionando.

O primeiro passo é instalar o Stella, um emulador do Atari 2600 já presente nos repositórios do Ubuntu. Para isso, abra o terminal de comandos e, utilizando o apt-get, instale-o em seu sistema:

$ sudo apt-get -y install stella

Uma vez que o Stella está instalado, o próximo passo é baixar as ROMS dos jogos. Isso pode ser feito baixando o arquivo Roms.zip do site AtariMania. Concluído o download, descompacte o arquivo em uma pasta de sua preferência. Em seguida, execute o Stella por meio do ambiente gráfico (Applicações > Jogos > Stella) ou ainda a partir de um terminal de comandos utilizando o seguinte comando:

$ stella

Assim que o Stella for iniciado basta entrar no diretório onde as ROMs foram descompactas e escolher, dentre os muitos jogos,  aquele que você deseja jogar. Simples, não? Depois, é só aproveitar e recordar! Ainda que você não seja desses tempos, vale a pena conferir.

PostHeaderIcon Trocando a posição e a ordem dos botões nas janelas do Ubuntu 10.04.

O layout do Ubuntu 10.04 mudou bastante com relação às versões anteriores. Além da mudança dos tons de marrom, já tradicionais, outras coisas também sofreram alterações e o que muitos usuários devem ter percebido é que, dentre essas mudanças, está a posição dos botões de minimizar, maximizar e fechar as janelas. Normalmente, esses botões ficavam parte superior das janelas no canto direito. Agora, por padrão, esses botões mudaram de lado e passaram a ficar no lado esquerdo.

Se isso representa uma mudança desconfortável pra você, saiba que é muito simples de alterar. Aliás, é interessante descobrir que, facilmente, é possível até trocar a ordem desses botões de maneira muito simples. Vamos dar uma olhada?

Read the rest of this entry »

PostHeaderIcon Placa BCM4312: problema resolvido.

Já faz algum tempo que não me deparo com a situação onde o Ubuntu não reconhece uma placa wireless de um notebook já no momento da instalação. Momento bem diferente dos primórdios onde a “guerra” com os drivers iniciava-se já nos dispositivos mais básicos. A bola da vez foi uma placa wireless Broadcom que reportava a seguinte descrição através do lspci:

0e:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)

A placa aparecia normalmene por meio do comando iwconfig mas não conseguia conectar-se a qualquer rede wireless. Depois de procurar em alguns fóruns algumas soluções e tentar, em seguida, implementá-las sem sucesso, encontrei a forma mais fácil e simples de resolver, instalando apenas um pacote:

apt-get install bcmwl-kernel-source

Depois, bastou reiniciar o notebook e tudo estava funcionando perfeitamente. Uma dica rápida… mas espero que possa ajudar alguém que tenha o mesmo problema.