LUKS (Linux Unified Key Setup) é o padrão para criptografia de disco no Linux. Ele opera sobre o dm-crypt e fornece um formato padronizado em disco, múltiplas senhas por volume e gerenciamento seguro de chaves. Seja para criptografar uma partição de dados em um servidor, proteger o disco de um laptop ou atender requisitos de conformidade para dados em repouso, LUKS é a ferramenta que todo administrador Linux deve conhecer.

Este guia cobre a criptografia de partições com LUKS2, gerenciamento de keyslots, configuração de desbloqueio automático na inicialização e recuperação de problemas comuns.

Pré-requisitos

  • Sistema Linux com kernel 4.12+ (para suporte a LUKS2 e Argon2id)
  • cryptsetup 2.0+ instalado
  • Acesso root ou sudo
  • Uma partição ou disco disponível para criptografar (a formatação LUKS é destrutiva)
  • Backup de quaisquer dados no dispositivo de destino

LUKS vs Outras Opções de Criptografia no Linux

Antes de começar, veja como o LUKS se compara às alternativas:

RecursoLUKS/dm-crypteCryptfsfscryptVeraCrypt
EscopoPartição/disco completoPor diretórioPor diretórioPartição completa/container
PerformancePróxima ao nativo (AES-NI)Mais lento (FS empilhado)Próxima ao nativoPróxima ao nativo
Gerenciamento de chavesAté 32 keyslotsWrapping por usuárioChaves por diretórioSenha única
Criptografia de bootSim (com initramfs)NãoNãoSim (bootloader customizado)
Padrão no LinuxSim (padrão)ObsoletoApenas Ext4/F2FSMulti-plataforma

LUKS é a escolha certa para partições de servidor, criptografia de disco completo e qualquer cenário onde você precise de múltiplos métodos de desbloqueio (senha + arquivo de chave + chave de recuperação).

Criptografando uma Partição com LUKS2

Passo 1: Identificar Seu Dispositivo de Destino

lsblk -f
NAME   FSTYPE SIZE MOUNTPOINT
sda           100G
├─sda1 ext4    50G /
├─sda2 swap     4G [SWAP]
└─sda3          46G

Neste exemplo, /dev/sda3 é a partição não formatada que vamos criptografar. Verifique duas vezes o nome do dispositivoluksFormat vai destruir todos os dados nele.

Passo 2: Instalar o cryptsetup

No Debian/Ubuntu:

sudo apt update && sudo apt install -y cryptsetup

No RHEL/Fedora/AlmaLinux:

sudo dnf install -y cryptsetup

Verifique se a versão suporta LUKS2:

cryptsetup --version

Você precisa da versão 2.0.0 ou posterior. Qualquer distribuição moderna de 2018 em diante inclui isso.

Passo 3: Inicializar a Criptografia LUKS

sudo cryptsetup luksFormat --type luks2 /dev/sda3

Você verá um prompt de confirmação e será solicitado a definir uma senha:

WARNING: Device /dev/sda3 already contains a 'ext4' superblock signature.

WARNING!
========
This will overwrite data on /dev/sda3 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda3:
Verify passphrase:

Escolha uma senha forte. Este é seu método principal de desbloqueio. Se você perdê-la e não tiver um keyslot de backup, os dados serão perdidos — esse é o objetivo da criptografia.

O que luksFormat faz internamente:

  1. Grava um cabeçalho LUKS2 (16 MB por padrão) no início da partição
  2. Gera uma chave mestra aleatória (AES de 256 bits por padrão)
  3. Criptografa a chave mestra com sua senha usando derivação de chave Argon2id
  4. Armazena a chave mestra criptografada no keyslot 0

Passo 4: Abrir o Volume Criptografado

sudo cryptsetup open /dev/sda3 data_crypt

Isso solicita sua senha e depois cria /dev/mapper/data_crypt — um dispositivo de bloco virtual que criptografa/descriptografa transparentemente todas as operações de E/S.

Verifique se está aberto:

ls -la /dev/mapper/data_crypt

Passo 5: Criar um Sistema de Arquivos e Montar

sudo mkfs.ext4 /dev/mapper/data_crypt
sudo mkdir -p /mnt/encrypted
sudo mount /dev/mapper/data_crypt /mnt/encrypted

Teste:

echo "Encryption works" | sudo tee /mnt/encrypted/test.txt
cat /mnt/encrypted/test.txt

Os dados agora estão criptografados em repouso. Qualquer um que remover o disco sem a senha verá apenas bytes aleatórios.

Gerenciando Keyslots LUKS

LUKS2 suporta até 32 keyslots. Cada keyslot contém uma cópia criptografada independente da chave mestra. Isso significa que você pode ter múltiplas senhas, arquivos de chave ou chaves de recuperação — todas abrindo o mesmo volume.

Adicionar uma Senha de Backup

sudo cryptsetup luksAddKey /dev/sda3

Você vai inserir a senha existente primeiro, depois a nova. Ela vai para o próximo keyslot disponível.

Adicionar um Arquivo de Chave

Arquivos de chave permitem desbloqueio automatizado (scripts, sequências de boot) sem digitar uma senha:

sudo dd if=/dev/urandom of=/root/luks-keyfile bs=4096 count=1
sudo chmod 400 /root/luks-keyfile
sudo cryptsetup luksAddKey /dev/sda3 /root/luks-keyfile

Armazene arquivos de chave com segurança. Se o arquivo de chave estiver no mesmo disco não criptografado, isso anula o propósito. Mantenha-o em uma partição root criptografada separada ou em um token de hardware.

Listar Keyslots

sudo cryptsetup luksDump /dev/sda3 | grep -A5 "Keyslots:"

Para uma visão mais limpa:

sudo cryptsetup luksDump /dev/sda3 | grep "Key Slot"

Remover um Keyslot

sudo cryptsetup luksRemoveKey /dev/sda3

Insira a senha que você quer remover. Ou remova pelo número do slot:

sudo cryptsetup luksKillSlot /dev/sda3 1

Nunca remova todos os keyslots. Se você remover o último, o volume se torna permanentemente inacessível. O cryptsetup vai avisá-lo, mas não confie nisso.

Desbloqueio Automático do LUKS na Inicialização

Para partições de servidor que precisam ser montadas automaticamente, você tem duas opções:

Opção A: Arquivo de Chave na Partição Root

Isso funciona quando a partição root já está criptografada (ou é um disco de boot confiável) e você quer que partições secundárias desbloqueiem sem um prompt de senha.

  1. Crie o arquivo de chave (se você ainda não o fez):
sudo dd if=/dev/urandom of=/root/luks-keyfile bs=4096 count=1
sudo chmod 400 /root/luks-keyfile
sudo cryptsetup luksAddKey /dev/sda3 /root/luks-keyfile
  1. Obtenha o UUID da partição LUKS:
sudo blkid /dev/sda3
/dev/sda3: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="crypto_LUKS"
  1. Adicione ao /etc/crypttab:
echo 'data_crypt UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /root/luks-keyfile luks' | sudo tee -a /etc/crypttab
  1. Adicione ao /etc/fstab:
echo '/dev/mapper/data_crypt /mnt/encrypted ext4 defaults 0 2' | sudo tee -a /etc/fstab
  1. Reconstrua o initramfs:

No Debian/Ubuntu:

sudo update-initramfs -u

No RHEL/Fedora:

sudo dracut -f

Opção B: Prompt de Senha na Inicialização

Se você quer a segurança de exigir uma senha a cada inicialização, adicione apenas isso ao /etc/crypttab:

echo 'data_crypt UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 none luks' | sudo tee -a /etc/crypttab

A palavra-chave none instrui o sistema a solicitar uma senha durante a inicialização. Este é o padrão para partições root criptografadas.

Verificando a Saúde do Volume LUKS

Ver Detalhes do Volume

sudo cryptsetup luksDump /dev/sda3

Isso mostra a versão LUKS, cifra, hash, keyslots e tamanho do cabeçalho. Útil para verificar os parâmetros de criptografia.

Benchmark de Performance da Criptografia

cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha256      1547453 iterations per second for 256-bit key
PBKDF2-sha512       987231 iterations per second for 256-bit key
Argon2id             8 iterations, 1048576 memory per thread for 256-bit key
#     Algorithm |       Key |      Encryption |      Decryption
        aes-xts        256b      3512.0 MiB/s      3498.7 MiB/s
        aes-xts        512b      2845.3 MiB/s      2830.1 MiB/s

Com aceleração de hardware AES-NI (presente em qualquer CPU x86 moderna), você verá throughput de 2-3 GB/s — a criptografia adiciona overhead negligenciável.

Fazer Backup do Cabeçalho LUKS

Se o cabeçalho LUKS estiver corrompido (setores ruins, sobrescrita acidental), você perde acesso ao volume inteiro. Sempre faça backup:

sudo cryptsetup luksHeaderBackup /dev/sda3 --header-backup-file /root/sda3-luks-header.bak

Armazene este backup fora do sistema — em um pen drive USB, compartilhamento de rede seguro ou cofre. Qualquer pessoa com o backup do cabeçalho e uma senha válida pode descriptografar o volume.

Restaure se necessário:

sudo cryptsetup luksHeaderRestore /dev/sda3 --header-backup-file /root/sda3-luks-header.bak

Fechando e Desmontando

Quando terminar, desmonte e feche o volume de forma limpa:

sudo umount /mnt/encrypted
sudo cryptsetup close data_crypt

A partição agora está bloqueada. Os dados em /dev/sda3 estão inacessíveis até que você abra novamente com a senha ou arquivo de chave correto.

Solução de Problemas

“Device /dev/sda3 is in use” ao tentar formatar: A partição está montada ou sendo usada por outro processo. Execute lsof /dev/sda3 ou fuser -mv /dev/sda3 para descobrir o que está usando.

Boot trava esperando senha: Se você adicionou um volume LUKS ao /etc/crypttab sem um arquivo de chave e o volume não é crítico, adicione nofail às opções: data_crypt UUID=... none luks,nofail. Isso permite que o boot continue após um timeout.

“No key available with this passphrase”: Senha errada ou o keyslot foi removido. Tente todas as senhas que você definiu. Se nenhuma funcionar, restaure de um backup do cabeçalho.

luksFormat lento em discos grandes: A formatação em si é rápida (apenas grava o cabeçalho). Mas se você quiser limpar a partição com segurança primeiro, execute sudo cryptsetup open --type plain /dev/sda3 wipe && sudo dd if=/dev/zero of=/dev/mapper/wipe bs=1M status=progress && sudo cryptsetup close wipe antes de formatar.

Não consigo redimensionar partição criptografada: Feche o volume primeiro, depois use cryptsetup resize após redimensionar a partição subjacente com parted ou fdisk.

Resumo

  • LUKS2 é o padrão Linux para criptografia de disco — use cryptsetup luksFormat --type luks2 para criptografar qualquer partição
  • A criptografia é transparente: uma vez aberto com cryptsetup open, todas as leituras e gravações são automaticamente criptografadas/descriptografadas
  • LUKS suporta até 32 keyslots — use múltiplas senhas e arquivos de chave para flexibilidade e recuperação
  • Desbloqueio automático na inicialização via /etc/crypttab com um arquivo de chave armazenado em uma partição root criptografada
  • Sempre faça backup do cabeçalho LUKS com luksHeaderBackup — corrupção do cabeçalho significa perda total de dados
  • O overhead de performance é negligenciável em CPUs modernas com aceleração de hardware AES-NI
  • Você não pode criptografar uma partição in-place — sempre faça backup dos dados antes de executar luksFormat

Automate SSL Certificates with Let’s Encrypt and Certbot | Configure UFW Firewall on Ubuntu Server | Restic Backups to Encrypted Cloud Storage