Montando LUKS a partir da linha de comandos

11

Quando clico nautilusou cajaclico no ícone de um disco criptografado e digito minha senha, o dispositivo de bloco subjacente é mapeado /dev/mapper/luks-$UUIDe montado /media/$USER/$DISK, sem a necessidade de senha root. Existe uma maneira de chamar esse processo a partir da linha de comando, sem a GUI, incluindo a eliminação do sudo e a possibilidade de o ponto de montagem ser desmontado novamente da GUI.

PSkocik
fonte
Sem ter certeza (portanto, um comentário e não uma resposta), acredito que a GUI faz isso através de udisks(ou udisks2). Investigar as opções do seu utilitário CLI pode fornecer respostas adicionais.
precisa saber é
Além disso, é possível que você tenha digitado a senha pela primeira vez e selecionado para salvá-la no seu chaveiro de login. Portanto, tecnicamente, faz uso de uma senha, mas o seu feito automaticamente para que você não vê-lo.
wraeth

Respostas:

12

Não conheço uma maneira de comando único para fazer isso. Os programas da GUI estão fazendo um bom interrogatório sobre o disco para adotar a abordagem "correta" e você precisará fazer parte desse trabalho. Você não precisa do sudo e acho que a sequência de eventos resultante é relativamente indolor.

A resposta curta

Use a udisksctlpartir do udisks2pacote:

udisksctl unlock -b /path/to/disk/partition
udisksctl mount -b /path/to/unlocked/device

Sua conta de usuário precisará ser devidamente autorizada para que o procedimento acima funcione. No Debian e no Ubuntu, isso significa adicionar sua conta ao plugdevgrupo.

Quando você terminar o disco:

udisksctl unmount -b /path/to/unlocked/device
udisksctl lock -b /path/to/disk/partition
udisksctl power-off -b /path/to/disk/or/partition

Como configurar as coisas

Veja como você pode configurar as coisas (via linha de comando) para tornar o processo de usar o disco o mais simples possível. Suponho que você queira usar a totalidade da unidade USB como um único sistema de arquivos. Outras configurações exigirão modificações nas instruções. Advertência sobre variações: não encontrei uma maneira de usar o LVM no contêiner criptografado que permitirá que uma conta sem privilégios desconecte tudo. (Não vejo uma maneira de desativar um grupo de volumes via udisksctl.)

Para fins de ilustração, diremos que o disco é /dev/sda. Você precisará de um nome para o sistema de arquivos para facilitar a referência posteriormente. Eu vou usar " example".

Particionar o disco

Execute sudo parted /dev/sdae execute os seguintes comandos:

mklabel gpt
mkpart example-part 1MiB -1s
quit

O mkpartcomando provavelmente solicitará que você ajuste ligeiramente os parâmetros. Você deve aceitar os números recomendados.

A partição estará agora disponível via /dev/disk/by-partlabel/example-part.

Criar e montar a partição LUKS

sudo cryptsetup luksFormat /dev/disk/by-partlabel/example-part

Siga as instruções.

sudo cryptsetup luksOpen /dev/disk/by-partlabel/example-part example-unlocked

O dispositivo criptografado está agora disponível em /dev/mapper/example-unlocked. Isso não será permanente; é apenas para o processo de instalação.

Crie seu sistema de arquivos

Vamos supor que o sistema de arquivos que você está usando seja XFS. Praticamente qualquer outro sistema de arquivos tradicional funcionará da mesma maneira. O importante é adicionar um rótulo que você possa fazer referência posteriormente:

sudo mkfs -t xfs -L example /dev/mapper/example-unlocked

O dispositivo de bloco do sistema de arquivos agora pode ser acessado via /dev/disk/by-label/example.

Definir permissões do sistema de arquivos

Por padrão, o sistema de arquivos estará acessível apenas pela raiz. Na maioria dos casos, você provavelmente deseja que os arquivos sejam acessíveis por sua conta de usuário. Supondo que o nome da sua conta seja " user":

udisksctl mount -b /dev/disk/by-label/example
sudo chown user:user /media/user/example

Fechar tudo para baixo

udisksctl unmount -b /dev/disks/by-label/example
sudo cryptsetup luksClose example-unlocked

Use seu sistema de arquivos

Isto é o que você fará regularmente. Depois de conectar a unidade USB,

udisksctl unlock -b /dev/disks/by-partlabel/example-part
udisksctl mount -b /dev/disks/by-label/example

Se sua conta de usuário for " user", o sistema de arquivos será montado em /media/user/example.

Para desmontar o sistema de arquivos:

udisksctl unmount -b /dev/disks/by-label/example
udisksctl lock -b /dev/disks/by-partlabel/example-part
udisksctl power-off -b /dev/disks/by-partlabel/example-part

Agora você pode desconectar a unidade USB.

asciiphil
fonte
Criei um script bash de código aberto que automatiza e simplifica a seção "Use seu sistema de arquivos": github.com/JerichoJyant/usbkey . Ele foi projetado para unidades flash USB. Também pretendo incorporar a configuração que você descreve aqui no script.
Josh Patton
3

A resposta de asciiphil parece-me correta e deve ser marcada como tal.

Começa: "Não conheço uma maneira de comando único para fazer isso". Também não abri uma solicitação de recurso correspondente . Como solução alternativa, é possível criar um script de wrapper para fornecer uma maneira de comando único para desbloquear e montar uma partição.

Supondo que você use o Bash, salve o script abaixo como, por exemplo unlock-and-mount, torne-o executável e coloque-o em um diretório no seu PATH. Você poderá desbloquear e montar um dispositivo em uma única etapa unlock-and-mount /dev/disk/by-id/my-device-part-X.

Aviso: isso depende da análise das mensagens enviadas udisksctlpara stdout e da estabilidade da udisksctlinterface da linha de comandos. Isso é frágil, de acordo com a udisksctl página de manual , que diz:

[Este] programa não se destina a ser usado por scripts ou outros programas - as opções / comandos podem mudar de maneiras incompatíveis no futuro, mesmo em versões de manutenção.

Enquanto isso, aqui está o script, que funciona por enquanto:

#!/usr/bin/env bash
# A convenience wrapper around `udisksctl`.

# Trace execution 
set -x

# Abort on errors. (I find this helpful, despite the cautions given in
# http://mywiki.wooledge.org/BashFAQ/105 and
# http://mywiki.wooledge.org/BashFAQ/112 .)
set -e
set -u

# Define functions
die () {
    echo >&2 "$@"
    exit 1
}

# Validate input argument(s) 
[[ "$#" -eq 1 ]] || die "Exactly 1 argument required: path to partition ID. $# given"
[[ -b "$1" ]]    || die "$1 is not a block device"
[[ "$1" == /dev/disk/by-id/* ]] || die "$1 does not begin '/dev/disk/by-id/'"

# Unlock partition
unlockedpart="$(udisksctl unlock -b "$1" |\
 tail -n1 |\
 sed -e 's/^Unlocked \/dev\/[[:print:]]\+ as \([[:print:]]\+\).$/\1/' \
)"

# Mount unlocked partition
udisksctl mount -b "$unlockedpart"
sampablokuper
fonte
0

Isso usará a chave armazenada pelo Nautilus / Nemo:
gio mount -d /dev/dm-x

Para detalhes, veja esta resposta .

Redsandro
fonte