Arquivo de 10/11/2010

Em outra dica, sobre backup de servidores, mostrei como fazer um backup das bases de dados do MySQL salvando diretamente o conteúdo da pasta “/var/lib/mysql”. O problema com essa abordagem é que cada vez que o script é executado o servidor MySQL ficará fora do ar durante alguns segundos (ou minutos). Se a base de dados é usada pelo site da sua empresa, por exemplo, ele ficará fora do ar até que o backup seja concluído e o servidor MySQL volte a ser iniciado.

A segunda opção é fazer um backup online, sem parar o servidor. O utilitário mais simples (e provavelmente o mais usado) para isso é o mysqldump, que acompanha o pacote principal do MySQL.

Diferente do método anterior, onde os arquivos são copiados diretamente, o mysqldump acessa o banco de dados por vias normais, da mesma forma que um aplicativo qualquer faria. Em outras palavras, ele não lê os arquivos, mas sim as informações armazenadas nas bases de dados. Isso permite que o backup seja consistente, mesmo que as bases de dados sejam alteradas durante o backup.

Para salvar todas as bases de dados do servidor no arquivo “backup.sql”, criado no diretório atual, por exemplo, o comando seria:

# mysqldump -u root -p -x -e -A > backup.sql

O “-u root -p” especifica o usuário que será usado para acessar o banco de dados. No exemplo estou fazendo um backup completo, por isso estou usando diretamente o root. A opção “-x” trava as bases de dados no momento em que cada uma é copiada, evitando qualquer problema de inconsistência, enquanto a “-e” é uma opção de otimização, que permite ao mysqldump combinar argumentos INSERT dentro das tabelas, o que torna tanto o backup quanto a restauração mais rápidos. Finalizando, a opção “-A” especifica um backup completo, de todas as bases de dados.

Se o comando parasse por aí, o mysqldump simplesmente escreveria todo o conteúdo das bases de dados na própria janela do terminal, resultando em uma longa exibição de informações, sem muita utilidade. Como queremos que a saída seja salva em um arquivo, usamos o “>”, que redireciona a saída para o arquivo especificado.

O arquivo “backup.sql” gerado é basicamente um arquivo de texto gigante contendo declarações de todas as informações armazenadas. Você pode reduzir o tamanho do arquivo para um quarto (ou menos) do tamanho original compactando o arquivo, o que pode ser feito adicionando a opção “| gzip” antes do “>” no comando, como em:

# mysqldump -u root -p -x -e -A | gzip > backup.sql.gz

Note que nesse exemplo adicionei também o “.gz” no nome do arquivo, indicando que se trata de um arquivo compactado. Para usá-lo posteriormente, você precisaria apenas descompactar o arquivo, usando o comando “gunzip”, como em:

# gunzip backup.sql.gz

O maior problema com estes dois comandos é que você precisa digitar a senha depois de rodar o comando, o que dificulta seu uso em scripts de backup automático. É possível eliminar a necessidade de digitar a senha especificando-a diretamente no comando, depois do “-p” (sem espaços), como em:

# mysqldump -u root -p12345 -x -e -A | gzip > backup.sql.gz

Um exemplo de script simples de backup automático usando o comando acima seria:

#!/bin/sh

cd /var/backup
DATA=`date +%Y-%m-%d-%H.%M`

# Faz backup das bases de dados usando o mysqldump
mysqldump -u root -p12345 -x -e -A | gzip > backup-$DATA.sql.gz

Se você gerou um par de chaves no SSH sem passphrase e instalou a chave pública no servidor de backup remoto poderia adicionar as linhas abaixo no final do script para que o arquivo fosse automaticamente movido para o servidor de backup remoto no final do processo:

scp backup-$DATA.sql.gz usuario@servidor-de-backup:/mnt/backups/
rm -f backup-$DATA.sql.gz

O passo final seria adicionar uma entrada no cron para automatizar a execução do script. Para que ele fosse executado todas as segundas, quartas e sextas às 22:58 a linha no arquivo “/etc/crontab” seria:

58 22 * * 1,3,5 root /usr/local/bin/script-backup

Note que ao incluir senhas em arquivos, é extremamente importante restringir as permissões, de forma que apenas o root (ou o usuário em questão) tenha permissão para lê-lo. Qualquer outro usuário do servidor que tenha acesso de leitura no arquivo, poderá ler a senha e acessar o servidor MySQL:

# chmod 700 /usr/local/bin/script-backup

Usando o “700″ os demais usuários não poderão ver nem executar o arquivo, o que seria o ideal no nosso exemplo, já que a entrada no crontab faz com que ele seja executado usando a conta de root. Se você quiser que outros usuários possam executar o arquivo manualmente quando necessário, mas ainda assim sem poder ver a senha armazenada dentro dele, o ideal seria criar um grupo, adicionar os usuários desejados dentro dele e setar as permissões do arquiv para “710″, onde os usuários que fazem parte do grupo podem apenas executar o arquivo, sem ver seu conteúdo. Os comandos seriam:

# addgroup backup-sql
# adduser joao backup-sql
# adduser joaquim backup-sql
# chown root:backup-sql /usr/local/bin/script-backup
# chmod 710 /usr/local/bin/script-backup

Fonte: http://www.guiadohardware.net/dicas/backup-mysql.html

Uma pequena observação, porém importante: a falta de pontos em uma das entradas na lista de permissões fornecidas com o Http Anti-Virus Proxy (HAVP) permite a ação maliciosa dos atacantes, através de injeções de malware. A lista de permissões em at /etc/havp/whitelist inclui a entrada *sourceforge.net/*clamav-* . No entanto, falta um ponto na frente do sourceforge, fato este que infelizmente, faz com que o HAVP ignore o conteúdo de outros domínios que terminam em sourceforge.net, como por exemplo www.malwarefromsourceforge.net.

A atualização 0.92a do Http Anti-Virus Proxy (HAVP) tem o único propósito de acrescentar um ponto à whitelist entry: *.sourceforge.net/*clamav-*. Para quem não o conhece, HAVP é uma ferramenta que implementa um proxy anti-vírus para acessos http, além de utilizar o ClamAV para scanear os acessos e realizar o trabalho de filtragem, caso a página em questão contenha alguma espécie de praga.

Saiba Mais:

[1] Whistelist: http://en.wikipedia.org/wiki/Whitelist
[2] HAVP: http://www.server-side.de/index.htm

Fonte: Under Linux

Não gosto muito de meter o pau em órgãos federais mais sérios, como bancos por exemplo. Mas essa não vai ter jeito.

Recente, fui obrigado a transferir o meu pagamento para a Caixa Econômica, em virtude de um acordo para obter desconto em financiamento imobiliário. A minha primeira surpresa desagradável: o cartão da Caixa não tem chip, ou seja, o meu risco de clonagem é altíssimo. Segundo a atendente, em até 2 anos deverão existir cartões com chip. A segunda surpresa: a senha do cartão só tem 4 dígitos. Impressionante.

Fiz o primeiro acesso à minha conta. Cadastrei os meus dados via Internet (usuário, senha etc). Foi perguntado se eu queria realizar o acesso somente de computadores cadastrados. Cliquei em sim, pois seria algo similar ao que faz o Banco do Brasil. Hoje, ao realizar o segundo acesso, foi exibido na tela:

caixa-absurdo

Liguei para o 0800 e informei o erro CM01. Depois de confirmar alguns dados, deu-se a conversa a seguir:

  • Atendente: Sr., qual sistema operacional o Sr. utiliza?
  • Eriberto: Linux.
  • Atendente: É por isso. O erro CM01 ocorre quando o Sr. utiliza um sistema operacional e um navegador que não oferecem condições mínimas de segurança. Deseja que eu retire a restrição de acesso somente por máquinas cadastradas?
  • Eriberto: Sim (irritado).

Conclusão da história: para a Caixa, seguro é Windows com Internet Explorer. Mas, para mim, por tudo que já vi, a verdade é que a Caixa não domina tecnologia de forma suficiente para prover restrição de computadores para navegação por Linux, como faz o Banco do Brasil.

É um absurdo que um banco público brasileiro se comporte dessa forma. E, além de tudo, está na contramão das diretrizes do Governo Federal quanto à implantação do Software Livre. Quem me conhece, sabe que não sou xiita. Mas esta foi uma grande decepção. Agora, tenho até medo do que possa acontecer com o meu pagamento nesse banco…