Montando o LUKS na linha de comando

9

Quando em nautilus ou caja clico no ícone de um disco criptografado e insiro minha senha, o dispositivo de bloco subjacente é mapeado para /dev/mapper/luks-$UUID e é montado em /media/$USER/$DISK , nenhuma senha raiz é necessária. Existe uma maneira de invocar este processo a partir da linha de comando, sem GUI, incluindo obviating sudo e ter o ponto de montagem capaz de desmontar novamente da GUI.

    
por PSkocik 06.03.2015 / 09:36

2 respostas

7

Eu não sei de uma maneira de comando único para fazer isso. Os programas GUI estão fazendo um pouco de interrogação do disco para tomar a abordagem "certa" e você precisará fazer um pouco desse trabalho sozinho. Você não precisa de sudo, e acho que a sequência de eventos resultante é relativamente indolor.

A resposta curta

Use udisksctl do pacote udisks2 :

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 acima funcione. No Debian e no Ubuntu, isso significa adicionar sua conta ao grupo plugdev .

Quando 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 definir as coisas (através da linha de comando) para tornar o processo de usar o disco o mais simples possível. Eu suponho que você quer 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 não privilegiada desconecte tudo. (Eu não vejo uma maneira de desativar um grupo de volume 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 posterior. Vou usar " example ".

Particionar o disco

Execute sudo parted /dev/sda e execute os seguintes comandos:

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

O comando mkpart provavelmente solicitará que você ajuste os parâmetros ligeiramente. Você deve estar bem aceitando os números recomendados.

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

Crie e monte 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 agora está disponível em /dev/mapper/example-unlocked . Isso não vai ser uma coisa permanente; é apenas para o processo de configuraçã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 consultar depois:

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 só será acessível pelo root. Na maioria dos casos, você provavelmente deseja que os arquivos sejam acessíveis pela 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

Isso é o que você fará regularmente. Depois de ligar a unidade USB,

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

Se a 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.

    
por 11.12.2016 / 18:10
3

A resposta por asciiphil parece-me correto, e deve ser marcado como tal.

Começa: "Eu não sei de uma maneira de comando único para fazer isso." Eu 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 em PATH . Você poderá, então, desbloquear e montar um dispositivo em uma única etapa com unlock-and-mount /dev/disk/by-id/my-device-part-X .

Aviso: isso depende da análise das mensagens udisksctl envia ao stdout e da estabilidade da interface da linha de comandos udisksctl . Isso é frágil, de acordo com a% man_de% página de manual , que diz:

[This] program is not intended to be used by scripts or other programs - options/commands may change in incompatible ways in the future even in maintenance releases.

Nesse meio tempo, 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:]]\+\).$//' \
)"

# Mount unlocked partition
udisksctl mount -b "$unlockedpart"
    
por 15.12.2017 / 06:02