Adicionando disco criptografado a um script de backup
Obs.: desde o início do documento, tratei o dispositivo de backup como
/dev/sdc1, o que pode causar um erro na hora de utilizar esses comandos em um script de backup, pois nunca sabemos como o sistema vai reconhecer o disco externo, hora pode reconhecer como
/dev/sdd1 ou
/dev/sde1.
Para solucionar esse problema, vamos começar a tratar o dispositivo utilizando o UUID correspondente, assim montamos sempre o mesmo dispositivo, independente da forma que o sistema reconheça em
/dev.
Exemplo de manipulação de dispositivo criptografado com UUID
Como identificar o UUID de um dispositivo? Utilize o comando
blkid. Abaixo, um exemplo da saída do comando:
# blkid
/dev/sr0: LABEL="CentOS_5.7_Final" TYPE="iso9660"
/dev/sda3: TYPE="swap" LABEL="SWAP-sda3"
/dev/sda2: LABEL="/" UUID="902479e8-034d-447c-bbe0-50165b80690a" TYPE="ext3"
/dev/sda1: LABEL="/boot" UUID="f0a0bae3-a294-47ff-948a-49df1a968ed1" TYPE="ext3"
/dev/drbd0: UUID="6e369d11-213d-4114-bf0a-ca1d6059dbd6" TYPE="ext3"
/dev/sda4: UUID="6e369d11-213d-4114-bf0a-ca1d6059dbd6" TYPE="ext3"
/dev/sdc1: LABEL="" UUID="d55d583b-7adf-4ab5-9618-3d09df16a06f" TYPE=" crypto_LUKS "
Obs.: o comando
blkid vai buscar as informações do diretório
/dev/disk/by-uuid.
Na saída do comando
blkid, cada linha corresponde a um dispositivo e seu UUID correspondente está na mesma linha. O detalhe é que o reconhecimento de um dispositivo pode mudar em
/dev, porém, o UUID vai continuar o mesmo. Então baseado no UUID do dispositivo criptografado vamos manipular nosso dispositivo.
# cryptsetup --key-file=/root/keyfile luksOpen /dev/disk/by-uuid/d55d583b-7adf-4ab5-9618-3d09df16a06f hdbackup
Explicando o comando:
- --key-file=/root/keyfile :: arquivo-chave para ativar a criptografia de um dispositivo.
- luksOpen UUID hdbackup :: ativar a criptografia, no dispositivo "UUID" utilizando o label criptografado "hdbackup".
Rode o comando
blkid e veja que o dispositivo
/dev/mapper/hdbackup aparece na lista, ou rode o comando
ls /dev/mapper/ e veja que o
Label-criptografado está disponível, sem que você tenha que digitar a palavra-chave para isso. Mesmo assim mantenha a palavra-chave guardada pois como já informado você pode precisar para utilizar em uma consulta em outro servidor.
Após o dispositivo criptografado estar disponível, pode manipular o disco normalmente:
# mount /dev/mapper/hdbackup /media/hdbackup ; df -h
O que muda?
Antes da criptografia, apenas criávamos um label com o comando
e2label para um dispositivo e pronto, o disco poderia ser acessado por um "apelido" qualquer definido.
O problema é que não é possível criptografar um disco utilizando uma label pré-definida (pelo menos eu não obtive êxito), como não é possível criar um "label" para o dispositivo ser acessado pelo comando
cryptsetup, no momento em que vamos ativar a criptografia no disco e consequentemente criar o
label criptografado, temos que utilizar o UUID como forma de reconhecimento do disco no momento em que vamos ativar a criptografia para evitar falhas, como após a criptografia ser ativada é gerado um
label criptografado, este pode ser utilizado no script sem problema nenhum.
Base do meu script
#!/bin/bash
#
# backup.sh
# Script para fazer copia de arquivos do servidor para o HD externo
#
# Montagem do Dispositivo
echo "******************************" >> $SYNC_LOG
/sbin/cryptsetup --key-file=/root/keyfile luksOpen /dev/disk/by-uuid/d55d583b-7adf-4ab5-9618-3d09df16a06f hdbackup >> $SYNC_LOG
/sbin/mount /dev/mapper/hdbackup /media/hdbackup >> $SYNC_LOG
echo "******************************" >> $SYNC_LOG
echo "Estado dos discos"
echo "******************************" >> $SYNC_LOG
df -h >> $SYNC_LOG
echo "******************************" >> $SYNC_LOG
# Verifica se o disco externo esta ligado
montado=`df | grep hdbackup`
if [ "$?" = "1" ];then
clear
echo "Unidade de backup hdbackup não esta montada. Backup não efetuado"
echo "Backup nao efetuado em $DATABKP. Unidade de backup sdc nao encontrada" >> $SYNC_LOG
/sbin/sendEmail -f redes@suaempresa.com.br -t tux@suaempresa.com.br -cc tux2@suaempresa.com.br -u log-bkp-usb-srv-01-clientex-error -a $SYNC_LOG -xu
redes@suaempresa.com.br -xp xpto001 -s smtp.suaempresa.com.br -o message-file=$SYNC_LOG
rm -f $SYNC_LOG
exit 0
fi
montado=`df | grep hdbackup`
if [ "$?" = "0" ];then
# Cria o diretorio de backup.
echo "Inicio da sincronizacao" >> $SYNC_LOG
data_ini=`date +%d-%m-%y-%a+%H:%M`
echo "---- AGUARDE... Iniciando sincronizacao em $data_ini ----"
echo "---- AGUARDE... Iniciando sincronizacao em $data_ini ----" >> $SYNC_LOG
/usr/bin/rsync -avzpogt /work/diretorioimportante/ /media/usbdisk/$dia/ >> $SYNC_LOG
echo "Fim da sincronizacao" >> $SYNC_LOG
data_ini=`date +%d-%m-%y-%a+%H:%M`
data_ini=`date +%d-%m-%y-%a+%H:%M` >> $SYNC_LOG
echo "---- Fim da sincronizacao em ...$data_ini ----"
echo
echo "******************************" >> $SYNC_LOG
# Desmountando o dispositivo criptografado e desativando a criptografia.
/sbin/umount /media/usbdisk >> $SYNC_LOG
/sbin/cryptsetup luksClose hdbackup >> $SYNC_LOG
/sbin/sendEmail -f redes@suaempresa.com.br -t tux@suaempresa.com.br -cc tux2@suaempresa.com.br -u log-bkp-usb-srv-01-clientex-ok -a $SYNC_LOG -xu
redes@suaempresa.com.br -xp xpto001 -s smtp.suaempresa.com.br -o message-file=$SYNC_LOG
rm -f $SYNC_LOG
exit 0
fi
Lembrando que, obviamente no meu script original, existe mais que um diretório a ser efetuado o backup, e como é em linguagem Shell Script, nada te impede de adicionar comandos de backup de banco de dados, direcionando o backup para dentro do disco criptografado.
Enfim, edite da forma que melhor te atender, a meta aqui é apenas fazer com que o script consiga identificar o disco criptografado, ativar a criptografia, montar o disco criptografado, executar o backup e armazenar tudo o que for possível em um arquivo de
log.
A lógica do script é básica, ele roda o comando para efetuar a montagem do dispositivo, mesmo que o dispositivo não se encontre, faz um filtro nos dispositivos montados no sistema após o comando se o disco em questão estiver em pé, efetuar o backup, caso não esteja em pé não efetuar. Das duas maneiras é enviado um e-mail o que vai ser identificado se foi efetuado com sucesso ou não. Seguindo essa mesma lógica pode ser adicionado quantos discos você bem entender.
Conclusão
É isso pessoal, espero ter ajudado se você está precisando criptografar um disco externo e o utiliza para backup, e obteve sucesso após esta leitura deste artigo, vou ficar contente.
Este é meu primeiro artigo para o
Viva o Linux e espero escrever outros. Estou sempre em busca de melhorar, então, caso tenha alguma crítica ou sugestão, com certeza vai ser bem-vinda.
Lembrando que o foco desse artigo foi como manipular discos externos utilizados para backup, e tornar o processo de montagem/manipulação do dispositivo o menos dolorido possível.
É isso, agradeço a todos que já me ajudaram. Um dia, aqui no
Viva o Linux, pretendo postar todo o conteúdo da certificação LPIC-1 atualizado, então, caso algum ponto não ficou claro, por gentileza, especifique para que eu melhore nos próximos artigos.
Até...