Archive for the ‘Sysadmin’ Category

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 Histórico de comandos no Linux com data e hora.

Passo por aqui para deixar uma recomendação bem rápida.

Quem lida com um terminal de comandos em ambientes Linux frequentemente, especialmente através do bash, sabe o quanto o histórico de comandos é útil. Ele economiza ao longo do dia um bom tempo de digitação ajudando com a reutilização de comandos que já foram executaados anteriormente. Com alguns atalhos disponibilizados pela própria shell é possível tirar proveito ainda mais eficiente desse poderoso recurso, útil aos administradores de sistemas e a todos os usuários que necessitam do terminal. Além de facilitar a utilização, o histórico de comandos também é uma ferramenta importante para conduzir algumas investigações do que pode ter sido feito em um determinado sistema, uma vez que ele mostra a sequência de comandos executados. Para vê-lo, como muitos já estão cansados de saber, basta executar o comando "history".

E o que tem de novidade nisso? Nada a não ser pelo fato de que, muitas das vezes, os horários em que os comandos foram executados podem representar uma valiosa informação para quem está consultando o histórico. Essa informação torna-se ainda mais importante quando se tenta correlacionar comandos executados em computadores diferentes. O que poucos sabem, entretanto, é que isso é possível de configurar utilizando um recurso muito simples disponibilizado pela prória shell bash. Outra novidade? Essa informação está na própria man page da bash.

Para habilitar esse recurso, basta, por exemplo, abrir um terminal e definir a variável de ambiente HISTTIMEFORMAT por meio da execução do seguinte comando:

$ export HISTTIMEFORMAT="[%y%m%d %H:%M:%S] "

Feito isso, experimente executar o comando "history" novamente… Interessante, não? Note que você pode definir o formato e quais informações de tempo mais lhe interessam. Para tal, utilize a mesma representação de tempo implementada no comando date.

Para fazer com que os históricos de comandos sempre apresentem as informações de tempo, insira a definição dessa variável nos arquivos apropriados do seu sistema como os arquivos .bashrc e .bash_profile que ficam nos diretórios home dos usuários, por exemplo.

Bem, é isso.

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!