Utilizando criptografia LUKS em discos externos

Este artigo tem como objetivo, mostrar como criptografar HDs externos utilizando a criptografia LUKS. Também mostrará como fazer um script de backup para reconhecer/montar estes discos criptografados, sem a configuração de label.

[ Hits: 17.163 ]

Por: Bruno Bueno da Silva em 24/11/2014


Disco criptografado / Script



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é...

Página anterior    

Páginas do artigo
   1. Introdução / Instalação / Montagem
   2. Disco criptografado / Script
Outros artigos deste autor

Docker - Containers em Linux (parte 2)

Docker - Containers em Linux

Leitura recomendada

Utilizando Ubuntu live-CD/USB para backup com PartImage

Implantando um Servidor de Backup com Bacula - Debian Squeeze

Backup de máquinas virtuais no ESXi 5.0 com script ghettoVCB

Já fez seu "BACKUP" hoje? Não? Então vamos conversar sobre isso

Backup do Linux utilizando cliente do IBM Tivoli

  
Comentários
[1] Comentário enviado por danniel-lara em 24/11/2014 - 11:26h

Parabéns muito bom mesmo

[2] Comentário enviado por andersonjackson em 25/11/2014 - 12:48h

Muito bom, parabéns.

[3] Comentário enviado por snails em 27/11/2014 - 09:24h

Muito bom seu post. Parabéns mesmo.....

[4] Comentário enviado por rrodrigues345 em 26/02/2017 - 21:06h

Olá Bruno! Parabéns pelo artigo!
Sobre as permissoes, o HD externo sempre fica como root? Reparei que ao plugar o HD o meu usuário não tinha permissões p escrever na partição... Resolvi isso alterando o grupo de root para o meu usuário. Mas o dono ficou como root mesmo.. n consegui alterá-lo...

É assim mesmo ou estou deixando passar algo?

Valeu!

Abraço

[5] Comentário enviado por bruno-debian em 26/02/2017 - 21:15h


[4] Comentário enviado por ricardoperera em 26/02/2017 - 21:06h

Olá Bruno! Parabéns pelo artigo!
Sobre as permissoes, o HD externo sempre fica como root? Reparei que ao plugar o HD o meu usuário não tinha permissões p escrever na partição... Resolvi isso alterando o grupo de root para o meu usuário. Mas o dono ficou como root mesmo.. n consegui alterá-lo...

É assim mesmo ou estou deixando passar algo?

Valeu!

Abraço


Olá ricardoperera. Acredito que é assim mesmo, no meu caso não atentei a este detalhe pois utilizo os discos para efetuar bkp, dos servidores de onde trabalho e sempre o acesso já e como root. Não precisei fazer esse tipo de alteração de já montar com alguma permissão especifica. De qualquer forma vou checar e em breve te retorno.

[6] Comentário enviado por rrodrigues345 em 26/02/2017 - 21:45h

Olá Bruno! Sim, rs! Pois é, eu me atentei as permissões pois a ideia seria sincronizar somente os arquivos do usuario via rsync... aí achei curioso o fato de ñ ter conseguido mudar o "dono".

Para o rsync, acho q n daria problemas mesmo... só na hora de copiar algum arquivo de volta, do HD para o PC, pois copiaria como root. Ms tbm, nada demais rs!

Abraço

[7] Comentário enviado por pelo em 29/04/2020 - 17:50h

Olá,
Com sua dica, implementei criptografia no backup da empresa.
Obrigado!
Sérgio Abrantes

[8] Comentário enviado por bruno-debian em 29/04/2020 - 18:06h


[7] Comentário enviado por pelo em 29/04/2020 - 17:50h

Olá,
Com sua dica, implementei criptografia no backup da empresa.
Obrigado!
Sérgio Abrantes


Que bacana cara, fico feliz em ajudar. Estou ausente da comunidade, mas pretendo voltar a fazer mais posts.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts