Fornece a senha para os udisks para desbloquear o dispositivo criptografado pelo LUKS

1

Atualmente, faço isso para montar meu thumbdrive criptografado:

# Works!
pass thumbdrive-password | # get device password entry from password manager
    head -n 1 | # get the device password itself
    sudo cryptsetup luksOpen /dev/sdb thumbdrive # unlock device
udisksctl mount -b /dev/mapper/thumbdrive # mount device

Gostaria de fazer algo assim:

# Does not work!
pass thumbdrive-password |
    head -n 1 |
    udisksctl unlock -b /dev/sdb # unlock device
udisksctl mount -b /dev/mapper/luks-foobar # mount device with uuid "foobar"

Isso permitiria que usuários semi-privilegiados (com permissão para org.freedesktop.udisks2.filesystem-mount no polkit) montassem sistemas de arquivos criptografados sem usar o sudo. O Udisks não aceita este método de tubulação, porque usa um prompt de senha interativo. Como posso fornecer a senha do meu dispositivo para udisksctl unlock sem digitá-la manualmente?

    
por gmarmstrong 03.06.2018 / 13:39

2 respostas

0

Para os udisks versão 2.6.4 e posterior

Observação: não testei isso. Uma vez eu recebo os udisks 2.6.4 (sempre que o link é backportado para o NixOS estável).

Atualização: Eu tenho o udisks 2.8.0 agora, para testar minha solução. A única coisa que eu perdi foi remover a nova linha à direita da saída de pass (...) | head (...) . Para aparar isso, use o -n flag com echo ou inclua | tr -d '\n' na head output. Eu refleti isso nas minhas duas soluções abaixo.

Solução genérica (não segura)

Use o sinalizador --key-file e substitua a sequência de senha no lugar de um arquivo-chave. Para desbloquear /dev/sdb com a senha hunter2 :

udisksctl unlock --block-device /dev/sdb --key-file <(echo -n "hunter2")

Passar dados confidenciais diretamente pela linha de comando não é seguro, portanto, esse método deve ser evitado.

pass implementação

Em vez disso, recupere a string de senha com pass thumbdrive-password | head -n 1 , corte a nova linha à direita e substitua-a no lugar de um arquivo-chave:

udisksctl unlock \
    --block-device /dev/sdb \
    --key-file <(pass thumbdrive-password | head -n 1 | tr -d '\n')
    
por 13.06.2018 / 17:57
2

O problema é que os dados não são lidos de stdin , mas do terminal de controle:

unlock
Unlocks an encrypted device. The passphrase will be requested from the controlling terminal and upon successful completion, the cleartext device will be printed to standard output.

Você pode usar o frostschutz sugerido ou usar truques para fazer a entrada do pipeline aparecer no terminal de controle, por exemplo, com expect ou socat .

pass thumbdrive-password |
    head -n 1 |
    socat - EXEC:'udisksctl unlock -b /dev/sdb',pty,setsid,ctty
    
por 03.06.2018 / 14:19

Tags