O código da chave LUKS sendo ignorado… pede senha

10

Deixe-me começar dizendo que não sou novo na LUKS. Eu configurei o LUKS com scripts importantes várias vezes com e sem LVM. Não tenho certeza do que realmente está acontecendo aqui. Eu tenho um sistema que possui uma única partição criptografada. Minha unidade está organizada da seguinte maneira:

# lsblk

NOME MAJ: TAMANHO MÍN. RM RO TIPO DE MONTAGEM
sda 8: 0 0 128G 0 disco  
└─sda1 8: 1 0 128G 0 partes  
  ├─vg0-root 253: 1 0 20G 0 lvm /
  ├─vg0-secure 253: 6 0 100M 0 lvm   
  25 └─secure 253: 7 0 98M 0 criptografia / raiz / seguro
  V─vg0-swap 253: 4 0 1G 0 lvm [SWAP]

Meu /etc/crypttabarquivo se parece com isso

# UUID não é necessário aqui, pois o caminho para o LV não será alterado
secure / dev / vg0 / secure none luks, keyscript = / lib / cryptsetup / scripts / insecure

Meu /lib/cryptsetup/scripts/insecurearquivo é executável e se parece com isso

#!/bin/sh
# My actual file looks somewhat different because it dumps the key file with dd.
# This accomplishes virtually the same thing though.

echo -n "my-encryption-password"

Eu update-initramfs -k all -uexecutei várias vezes depois de configurar o crypttab e colocar meu arquivo de script de chaves no lugar.

Até onde eu sei, meu arquivo de script nem está sendo copiado para o arquivo initrd.img. Agora que penso nisso, acho que não seria copiado para o arquivo initrd.img, pois a partição raiz não é criptografada e o arquivo de script deve ser facilmente acessível a partir daí.

Após a reinicialização, o sistema vê o registro do crypttab e solicita uma senha (que no meu caso não existe realmente porque a única chave é um arquivo de chaves cheio de bits aleatórios) em vez de usar o script de chave para desbloquear a partição LUKS. Tentei tirar LUKS do LVM e colocá-lo no sda2, e os resultados foram os mesmos. Eu também sei que o script de chave funciona porque cryptsetup luksOpen /dev/vg0/secure secure -d - <<< "$(/lib/cryptsetup/scripts/insecure)"funciona como um encanto e descriptografa minha partição LUKS.

Eu tentei isso no Ubuntu 16.04.2 e Ubuntu Mate 16.04.2 com os mesmos resultados. Eu usei scripts antes sem nenhum problema. A única diferença era que, no passado, minha partição / era sempre criptografada. Se alguém puder lançar alguma luz, eu agradeceria. Eu só quero uma partição criptografada muito pequena porque pretendo clonar este sistema e não quero cloná-la com a partição / inteira criptografada.


ATUALIZAÇÃO 26-04-2017

Ao pesquisar os logs, encontrei uma linha com o seguinte erro que não faz sentido. Desde quando 'keyscript = / path / to / script' é uma opção desconhecida para o crypttab?

... systemd-cryptsetup [737]: Foi encontrada a opção desconhecida / etc / crypttab 'keyscript = / lib / cryptsetup / scripts / insecure', ignorando.

Só para começar, tentei remover a opção keyscript e usar um arquivo de chave, e tudo funcionou! Na verdade, tentei outras opções, como deslocamento de arquivo de chave, e elas também funcionam. Portanto, o problema está em algum lugar da opção keycript. Alguém tem alguma idéia do porquê?

b_laoshi
fonte
3
Eu acho que o systemd é seu problema. Um rápido google para systemd e keyscript mostra um bug e uma solicitação pull para implementar o keyscript no systemd aqui . Existe até uma solução alternativa disponível no primeiro link.
sergtech
Essa foi minha suspeita, pois continuei investigando meu problema e pesquisando os resultados que encontrei on-line. Tentei algumas recomendações aqui , mas não sei como obter o arquivo de script no initrd.
precisa saber é o seguinte

Respostas:

3

Experimente a opção "initramfs" no seu / etc / crypttab (de acordo com /unix//a/447676/356711 ). Você /etc/crypttabficaria assim:

# UUID is not required here since the path to the LV won't change
secure      /dev/vg0/secure       none      luks,keyscript=/lib/cryptsetup/scripts/insecure,initramfs

Observe que pode ser um problema que seu root fs esteja em um contêiner LVM. Esse problema também é mencionado no artigo vinculado acima: " Mas isso atualmente só funciona (de maneira confiável) se o dispositivo raiz não estiver em um LVM " . Felizmente, parece que é fornecida uma solução alternativa.

Meu sistema fica assim:

$ lsblk
NAME                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                             8:0    0 931.5G  0 disk
└─sda1                          8:1    0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdb                             8:16   0 931.5G  0 disk
└─sdb1                          8:17   0 931.5G  0 part
  └─md1                         9:1    0 931.4G  0 raid1
    └─md1_crypt               253:3    0 931.4G  0 crypt
      └─raid_crypt_vg-data_lv 253:4    0 931.4G  0 lvm   /raid
sdc                             8:32   0 465.8G  0 disk
├─sdc1                          8:33   0   953M  0 part  /boot
└─sdc2                          8:34   0 464.8G  0 part
  └─sdc2_crypt                253:0    0 464.8G  0 crypt
    ├─system_crypt_vg-data_lv 253:1    0   447G  0 lvm   /
    └─system_crypt_vg-swap_lv 253:2    0  17.8G  0 lvm   [SWAP]

... e a seguir /etc/crypttab, a descriptografia é mágica com um script de chave (!) no Ubuntu 18.04.2 LTS:

$ cat /etc/crypttab
# <target name> <source device>                           <key file> <options>
sdc2_crypt      UUID=[...]                                none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh
md1_crypt       /dev/md1                                  none       luks,discard,keyscript=/etc/decryptkeydevice/decryptkeydevice_keyscript.sh,initramfs

Observe que a descriptografia de sdc2_cryptcom o keycript fornecido funciona sem a opção initramfs (porque contém a raiz fs e, portanto, é "automaticamente" considerada na fase de inicialização do initramfs). md1_cryptjá foi descriptografado apenas durante a fase de inicialização do initramfs (e, portanto, com o keycript de acordo com a entrada crypttab) depois que adicionei a opção initramfs. A descriptografia posterior de md1_crypt durante a fase de inicialização do systemd não funciona com um script de chave fornecido no crypttab porque o "systemd cryptsetup" não suporta a opção script de chave, consulte https://github.com/systemd/systemd/pull/3007 .

Thomas Popp
fonte