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.188 ]

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

Docker - Containers em Linux (parte 2)

Leitura recomendada

Clonando e Salvando Todos os Linux de um Disco Rígido para um HD Portátil Usando Gparted

Virtualização com ESXi 5.5.0 - pfSense virtualizado + backup de VMs no FreeNAS via iSCSI

Servidor Bacula com Fedora Server 21

Clonezilla - Gerando e restaurando backups completos (Parte I)

Implantando um Servidor de Backup com Bacula - Debian Squeeze

  
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