Como criar uma partição de swap criptografada e com chave aleatória, referindo-se a ela “by-uuid”, no Debian?

8

É sensato que, se você tiver algum tipo de criptografia de dispositivo de bloco implementada em seu sistema GNU / Linux, também criptografar sua partição de swap, pois todos os dados descriptografados podem ser gravados em texto não criptografado a qualquer momento na troca.

Olhando a página de manual do debian para "crypttab", vejo um exemplo de criação de uma partição swap de chave aleatória na inicialização, portanto a chave é definida aleatoriamente à medida que a inicialização prossegue e é conhecida apenas pelo próprio sistema:

# Encrypted swap device
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap

Neste exemplo, o dispositivo de troca é referido por um caminho de desenvolvimento convencional, ou seja, /dev/sda6

Os caminhos absolutos do dispositivo estão sujeitos a alterações e são reatribuídos na inicialização se, por exemplo, uma unidade USB estiver conectada, por exemplo. Um usuário ficaria muito infeliz se houvesse /dev/sda6uma partição diferente do esperado e, posteriormente, foi substituída por dados de troca aleatórios !!

Portanto, a solução parece ser: use um UUID em vez de um caminho do dispositivo (como um UUID não deve mudar), substituindo /dev/sda6por/dev/disk/by-uuid/<whatever the uuid of dev/sda6 is>

MAS ... aqui está o problema: Toda vez que o cryptsetup recria a partição de troca criptografada no momento da inicialização, gera um novo UUID para ele! Doh!

Portanto, precisamos preservar o UUID desse sistema de arquivos criptografado de alguma forma. Eu acho que o cryptsetup pode fazer isso com seu --offsetswitch, permitindo a preservação do cabeçalho LUKS e, portanto, do UUID.

Encontrei este URL: https://wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions

Alguém sabe como implementar a solução descrita para o Arch Linux no sistema operacional Debian? Os scripts init mencionados no documento parecem não existir no sistema operacional Debian

Obrigado!

EDIT Pode-se usar ecryptfs para obter os mesmos fins (espaço de troca criptografado) usando o comando: ecryptfs-setup-swap Sem os problemas que afetam a criptografia do dispositivo de bloco. Dê uma olhada nesta consulta AskUbuntu

Geeb
fonte
"Pode-se usar ecryptfs para atingir os mesmos fins [...] sem os problemas que afetam a criptografia do dispositivo de bloco". Não, porque ecryptfs-setup-swapé apenas um auxiliar que configura dm-crypt/ crypttabpara você. Como ecryptfsé um driver em nível de arquivo, ele não lida com partições inteiras; portanto, faz isso dm-crypt. Você pode achar esse método mais fácil de usar, mas no fim das contas não está conseguindo nada diferente. De qualquer forma, as peculiaridades desse método (incluindo o UUID) provavelmente me deixaram mais confusa do que se eu tivesse acabado de fazer isso sozinho desde os primeiros princípios ... embora eu tenha aprendido mais.
Underscore_d

Respostas:

6

Toda vez que o cryptsetup recria a partição swap criptografada no momento da inicialização, gera um novo UUID para ela! Doh!

No / etc / crypttab, use / dev / disk / by-id em vez de / dev / disk / by-UUID para se referir à sua partição swap. Por exemplo, sua entrada / etc / fstab para swap pode ser

#<file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/cswap none swap sw 0 0

A entrada correspondente correta em / etc / crypttab seria algo como

# <name> <device> <password> <options>
cswap /dev/disk/by-id/ata-SAMSUNG_SSD_830_Series_S0XYNEAC762041-part5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

Observe que o dispositivo acima é referido por / dev / disk / by-id, que você pode descobrir para sua unidade digitando o seguinte na CLI:

ls -lF /dev/disk/by-id
Jun_in_Jeju
fonte
Note que o nome by-id refere-se tanto o modelo e número de série, que é extremamente improvável que a sobreposição com qualquer outro dispositivo que você pode ligar.
cscracker
... o que, para benefício de leitores que possam estar se perguntando, é uma coisa muito boa. Você não deseja configurar sua troca criptografada e /dev/sdaNdepois conectar outro disco algum dia e descobrir que sua ordem de nomeação do kernel foi alterada e uma das partições que não são de troca foi lixeira. O UUID também seria bom, mas acho que o principal problema é que ele é armazenado nos primeiros bytes da partição, para obtermos o cenário insolúvel de ovo e galinha discutido aqui.
underscore_d
3

No meu / etc / crypttab, tenho

# <target name>  <source device>        <key file>   <options>
swap             /dev/mapper/cswap      /dev/random  swap

Aqui / dev / mapper / cswap é um volume lógico criado pelo LVM, que se encarrega de atribuir corretamente nomes de volumes lógicos, independentemente dos nomes das letras da unidade. Também me permite redimensionar facilmente minha partição de troca.

Andrew Schulman
fonte
0

Tente implementar o restante da solução, ignorando o arquivo init. Parece que esse pedaço de script init está lá apenas para protegê-lo. O Debian não o protege dessa maneira, ou você receberá uma mensagem de erro quando você tentar inicializá-lo, que, com sorte, o levará ao lugar certo.

Eu também cuidaria para que o IIRC Debian e o ArchLinux tenham formatos diferentes para o / etc / crypttab (louco, eu sei, mas mudei do Ubuntu para o Arch alguns anos atrás e acabei decidindo usar o bash direto em vez de mexer com o crypttabs).

idupree
fonte
Obrigado pela sua resposta. Sim, eu concordo que o script do Arch é uma verificação de integridade para garantir que a partição pareça ser uma partição de troca. Mas estou imaginando ter deixado uma unidade USB conectada e reiniciada para encontrar uma partição não-swap sendo usada. Acho que choraria lágrimas de verdade ... Sou grata por todas as verificações de sanidade que posso obter!
Geeb
Isso não deve acontecer porque você está usando o UUID para encontrá-lo em primeiro lugar. Então, tudo o que encontrará é a partição swap ou nada.
Idupree 18/10/11
0

execute ecryptfs-setup-swap ou manualmente:

Esta configuração usa chaves geradas aleatoriamente na inicialização e não suporta a hibernação no disco rígido! Você deve desativar a hibernação através do seu respeitado DE Power Management Utility e configurá-lo como Shutdown on Critical para evitar a perda de dados!

Mudar para uma conta de administrador / raiz

su root ou sudo para cada comando

Desativar Troca

swapoff -a

Localize a partição de troca existente

lsblk

exemplo: sda3 8: 3 0 8G 0 parte [SWAP]

Substituir Troca Antiga

dd se = / dev / zero bs = 1024000 de = / dev / sda <#>

exemplo: dd se = / dev / zero bs = 1024000 de = / dev / sda3

Configuração do FSTAB

vim / etc / fstab

Substitua o dispositivo SWAP antigo pelo nome do mapeador de crypttab: / dev / mapper / cswap

OLU UUID = d03f3d8e-7888-48a5-b3cc-41de8dbbcfdc padrões de swap de troca 0 0

NOVO

/ dev / mapper / cswap nenhum swap pri = 1, padrões 0 0

Configuração de criptografia

ls -lF / dev / disk / by-id

Exemplo: ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 -> ../../sda3

vim / etc / crypttab

Para obter mais informações, consulte o manual de instalação do Windows 10, que pode ser baixado no site da Microsoft, para obter mais informações.

Troca criptografada ativa

Reinicie o computador

Verificar operações de troca codificada

dmsetup -C info

Exemplo: cswap 253 0 L - w 2 1 0 CRYPT-PLAIN-cswap

lsblk

Exemplo part─sda3 8: 3 0 8G 0 parte
│ └─cswap 253: 0 0 8G 0 crypt [SWAP]

cat / proc / swaps

exemplo: Nome do arquivo Tipo Tamanho Usado Prioridade / dev / dm-0 partição 8385532 0 -1

Timothy Butterworth
fonte