Gerenciando vários dispositivos LUKS

1

Meu servidor de arquivos linux tem quatro discos USB-3 com criptografia LUKS. É um pouco confuso montar todos eles: embora eles possam receber as mesmas letras de unidade da última vez, eles podem não ter, o que leva a algumas tentativas e erros.

Para montá-los, eu normalmente diria algo assim (normalmente para cada um dos c, d, e e f):

sudo cryptsetup open --type luks /dev/sdc d1
sudo mount /dev/mapper/d1 /d1

(Observe que o cenário de ameaça aqui é alguém roubando meu hardware. O objetivo é que, quando desligado, ele precise que eu o exiba novamente. É aceitável que o servidor de arquivos não exiba arquivos na minha ausência). / p>

Eu posso ver o UUID em /dev/disk/by-uuid/ , embora esses não sejam os UUIDs do LUKS. Eu suspeito que eles são estáveis.

Eu também vejo informações da porta USB em /dev/disk/by-path/ (não tão bom, depende de onde ele está conectado) e WWIDs em /dev/disk/by-id/ . Em ambos os casos, eu poderia construir um script curto (para executar manualmente) que procura por nomes familiares, usa sed para extrair o número da unidade e depois executa as duas linhas acima para abrir e montar o volume.

Mas talvez esse problema tenha uma solução melhor. Alguma sugestão?

    
por jma 27.09.2017 / 07:40

2 respostas

2

Eu configuraria / etc / crypttab e usaria os UUIDs, por exemplo

usb1     UUID=d665864f-08e1-49ed-9adc-c608deadbeef

que configuraria / dev / mapper / usb1 a partir do disco relevante. Você pode então usar entradas fstab etc para montar coisas. Durante a inicialização, o sistema solicita a frase secreta para desbloquear o disco, não é necessário nenhum script adicional.

    
por 27.09.2017 / 07:54
1

No final, eu escrevi um script bash curto para montar pelo UUID.

O link acima mostrará o estado atual (que pode incluir mortos), então aqui está o que parece hoje:

#!/bin/bash

# Mount all LUKS partitions that I know about that are connected to
# this machine but not already mounted.

luks_mount() {
    # This is the UUID we can see before luksOpen.
    uuid="$1"
    # Where to mount it.  Should be at the root of the root file
    # system with no trailing slash.  That is, /foo, not /foo/,
    # /foo/bar or simply foo.
    mount_point="$2"
    if [ ! -d $mount_point ]; then
        echo "$mount_point does not exist or is not a directory."
        return
    fi
    root_id=$(stat -c '%D %m' /)
    mount_id=$(stat -c '%D %m' "$mount_point")
    if [ "$root_id" != "$mount_id" ]; then
        echo "$mount_point is already mounted (is not part of the root filesystem)."
        echo "$root_id != $mount_id"
        return
    fi
    if [ ! -e /dev/disk/by-uuid/$uuid ]; then
        echo "LUKS volume for $mount_point not available."
        return
    fi
    drive_letter=$(stat /dev/disk/by-uuid/$uuid -c '%N' | \
                       sed -e 's/^.*sd//;' | \
                       tr -d "'")
    device=/dev/sd$drive_letter;
    mapping=$(echo $mount_point | tr -d /);
    echo "Mounting $mount_point:"
    sudo cryptsetup open --type luks $device $mapping;
    sudo mount /dev/mapper/$mapping /$mapping;
}

luks_mount 4d4bc0a0-e67a-4f9b-8c70-05cfdbf9282c /jma-4t
luks_mount 4b824f8c-94d4-4655-8e56-67ead167ed4c /jma-3t
luks_mount 5d6777f0-f475-451e-bad8-3cdf6e80f7c5 /sb-4t
luks_mount 4ea3852f-8cdd-4ed9-898e-d86a851e0a9c /sb-3t
    
por 29.09.2017 / 07:34

Tags