Como configurar o LVM & LUKS para descriptografar automaticamente a partição?

21

Eu instalei recentemente o servidor ubuntu 11.04 com a criptografia lvm completa (instalada a partir da instalação). Desejo agora usar um arquivo de chave para desbloquear automaticamente. Eu tentei seguir este guia http://ubuntuforums.org/showthread.php?t=837416

Eu gerei uma chave com este comando: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

eu coloquei /boot/grubporque acho que não é criptografado. Quando tento adicionar a chave com essa vírgula, sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile ele me pede a frase secreta e, quando coloco que nada acontece, nada é impresso na tela! Eu o ignoro e continuo os outros passos e reinicializo, mas nada aconteceu e ele pede a senha.

Obrigado pela ajuda .

isoman
fonte
Você quer dizer descriptografar sem inserir uma senha? Se o processo de inicialização pudesse fazer isso, as chaves necessárias para descriptografar o volume precisariam estar no sistema em algum lugar acessível durante a inicialização. Como você espera que isso o proteja contra roubo de dados?
James Henstridge
Sim, acho que colocarei a chave em uma partição oculta ou em uma unidade flash USB. Isso é possível ?
Isoman
O problema é que, se o carregador de inicialização puder localizar a chave, alguém que estiver inspecionando o código de inicialização (não criptografado) também poderá localizá-lo. Se você armazenar a chave em um pendrive, você deve ter certeza de que o pendrive não será roubado com o computador. Se você só vai conectar o stick durante a inicialização, não é mais conveniente do que digitar uma senha.
James Henstridge
Como parar a descriptografia automática: askubuntu.com/questions/615408/…
Ciro Santilli escreveu:

Respostas:

27

Acabei de passar por isso no meu novo servidor doméstico, demorou muito tempo pesquisando e adivinhando, mas consegui funcionar. Vou tentar reproduzir as etapas aqui. Estou usando o Ubuntu Server 11.10 e comecei com uma instalação praticamente padrão usando LVM criptografado, então vou relatar as alterações que fiz a partir daí.

Configuração:

  • / dev / sda1 é minha partição / boot não criptografada
  • / dev / sda5 é minha partição lvm que contém todo o resto - root, swap e home
  • / dev / sdc1 é a partição da minha unidade flash USB onde armazenarei o arquivo de chave

Primeiro, criei um arquivo de chave, apenas no meu diretório pessoal:

dd if=/dev/urandom of=keyfile bs=512 count=4

(você pode usar um tamanho de bloco maior ou contar para uma chave maior)

Informe ao cryptsetup a nova chave (é o conteúdo que é importante, não o nome do arquivo):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Em seguida, formatei minha unidade flash USB com ext2 e dei uma etiqueta. Usei uma etiqueta, para que posteriormente possa montá-la por etiqueta e substituir a unidade flash USB, caso algo dê errado.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(é claro, seu dispositivo varia)

Agora, copie o arquivo de chave na unidade flash USB, de propriedade do modo raiz 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

Modifique / etc / crypttab. Mina originalmente continha

sd5_crypt UUID=(...) none luks

que eu mudei para

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Por fim, atualize o initramfs:

sudo update-initramfs -uv

Agora ele é inicializado usando o arquivo de chave na unidade flash USB. Se eu remover a unidade flash (por exemplo, quando vou de férias), ela não inicializa e meus dados estão seguros.

Se alguém souber como solicitar a senha, se a unidade flash USB estiver ausente, isso seria útil como alternativa. Espero que isso ajude, quaisquer acréscimos ou correções seriam mais que bem-vindos!

Randy Orrison
fonte
3
Se você não tiver certeza de como obter um prompt de senha, poderá usar uma partição inicializável na unidade flash para carregar por meio de um initramfs alternativo que procure um arquivo de chave e faça com que a inicialização padrão no disco rígido carregue um initramfs regular que solicite uma senha.
Reinstate Monica - ζ-- 14/08/2012
1
@ 3pic Não tenho 100% de certeza desde que fiz isso há vários meses. Mas o Ubuntu inicializa em um sistema de arquivos virtual. keyscript=/lib/cryptsetup/scripts/passdevadiciona passdevscript a ele. E, em seguida, update-initramfs -uvreconstrói o arquivo do sistema de arquivos.
VarunAgw
1
@RandyOrrison isso realmente é ótimo. Funciona. Mas ... depois de passado o initram, ele fica por um minuto ou dois minutos com A start job is running for dev-sda8:-keyfile.device (1min 18s...)etc. Passa, tudo fica montado, mas fica parado por um tempo. O registro diz "Tempo limite excedido, aguardando o dispositivo dev-sda8: -sda7keyfile.device; Falha na dependência da instalação de criptografia para sda7crypt". Claro, ele já foi montado pelo initram, mas .... O que estou fazendo de errado?
Deitch
1
Por alguma razão, não parece gostar / trabalhar com o systemd; simplesmente ignorará o keyscriptcampo completamente.
Etienne Bruines
1
No Ubuntu 17.10+, a ferramenta update-initramfs não gera uma imagem initramfs capaz de inicializar um volume luks se o sistema de arquivos raiz estiver em um volume luks e tiver um arquivo-chave. Você pode fazê-lo funcionar, deixando "none" como o valor do arquivo-chave e definindo as opções para ter keyscript = / etc / my-keyscript, em que / etc / my-keyscript é um script de shell que imprime a chave.
Macil 31/10
6

Essas instruções de howtoforge.com me colocaram em funcionamento com um volume de descriptografia automática.

Como desbloquear automaticamente as unidades criptografadas LUKS com um arquivo de chave

Etapa 1: criar um arquivo-chave aleatório

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

Etapa 2: Tornar o arquivo de chave somente leitura como root

sudo chmod 0400 /root/keyfile

Isso tornará o arquivo-chave legível apenas pela raiz. Se alguém tiver acesso a esse arquivo de chave, você terá um problema maior no seu computador.

Alternativamente, mostre seu arquivo de chave desejado para root: root e mova-o para a pasta / root

Etapa 3: adicione o arquivo de chave ao LUKS

Os dispositivos habilitados para LUKS / dm_crypt podem conter até 10 arquivos-chave / senhas diferentes. Portanto, além de ter a senha já configurada, adicionaremos esse arquivo de chave como método de autorização adicional.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

O sdX é obviamente o seu dispositivo LUKS.

Primeiro, você será solicitado a inserir uma senha (existente) para desbloquear a unidade. Se tudo funcionar bem, você deve obter uma saída como esta:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Etapa 4: criar um mapeador

Os dispositivos LUKS precisam criar um mapeador que possa ser referenciado no fstab. Abra o / etc / crypttab

sudo nano /etc/crypttab

e adicione uma linha como esta:

sdX_crypt      /dev/sdX  /root/keyfile  luks

ou você pode usar o UUID do dispositivo:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt é o nome do mapeador que está sendo criado. Você pode usar aqui qualquer nome, por exemplo, "música" ou "filmes" ou "sfdsfawe" ....

Salve e feche o arquivo emitindo ctrl-x, enter, enter. Ctrl-x fecha o nano, mas primeiro ele pede para salvar o arquivo [yes = enter] e qual deve ser o nome [mesmo nome = enter].

O que fizemos lá na verdade é dizer que / root / keyfile deve ser usado em vez da entrada de senha para desbloquear a unidade.

Etapa 5: montar o dispositivo no fstab

Agora, temos um dispositivo desbloqueado (bem, ainda não, mas quando o sistema está sendo inicializado) e só precisamos montá-lo agora. Abra o / etc / fstab:

sudo nano /etc/fstab

e adicione uma nova entrada como:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

Verifique se você possui o nome correto do mapeador que você adicionou na etapa 4. Verifique também se o ponto / pasta de montagem existe. Depois de adicioná-lo, salve novamente o arquivo e feche-o (ctrl-x, enter, enter).

Etapa 6: reiniciar ou remontar

É isso aí. Agora você pode reiniciar e os dispositivos adicionais devem ser desbloqueados e montados automaticamente. Você também pode testá-lo remontando todos os dispositivos:

sudo mount -a
The New Guy
fonte
1
você esquecer de atualização initramfs, 100% necessário
3pic
6

Melhorando a resposta de Randy Orrison , aqui está um pequeno script que eu criei, que fará o sistema recuar ao pedir uma senha ao usuário se ele não encontrar o arquivo de chave.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

Salvar-lo e substituí- keyscript=/lib/cryptsetup/scripts/passdevnos /etc/crypttabcom o caminho para esse arquivo e executar sudo update-initramfs -uve está feito.

VarunAgw
fonte
Eu acho que sua solução não está funcionando para a unidade USB por mais de um arquivo de chave. Quero dizer, se eu tiver mais de uma partição criptografada (home, swap, root). Parece que não desmonta o driver USB após o comando cat. Você tem alguma idéia de como corrigi-lo?
Khamidulla
Isso está funcionando para mim (Xubuntu 17.10), mas tive que editar o grub e remover o "splash". Também tive que salvar o arquivo em um local adequado (/ lib / cryptsetup / scripts / unlock_custom) e chmod-755. Não tenho certeza se splash ou cópia no local específico o fez funcionar para mim, mas não funcionava antes. De qualquer forma, ele funciona, mas na inicialização, depois que Startet AppArmor initialization.eu recebo: Um trabalho de início está sendo executado para o arquivo de chave do dev-disk.device (1m 30s). Após os anos 90 X começa e eu posso usar o meu sistema ... nenhuma idéia de como corrigir este trabalho começo ...
firepol
1

@deitch Eu tinha a mesma configuração como @Randy Orrison e me deparei com o mesmo problema que você e, ao que parece, é um bug do systemd que tenta montar o sistema de arquivos / novamente ao encontrar a entrada correspondente em / etc / crypttab.

Para resolver isso, apenas removi a entrada para sda5_crypt de / etc / crypttab depois que o comando update-initramfs -uv foi executado.

Reinicie e tudo funciona bem conforme o esperado.

mukul kirtane
fonte