Alterando as senhas LUKS não interativamente?

0

Eu sou o kickstart de hosts para usar o LUKS - e como parte disso, eu tenho uma senha básica 'default' no arquivo de kickstart.

Nós 'terminamos' novas compilações via ansible, e então como parte disso - eu gostaria de mudar a senha luks padrão para algo um pouco mais robusto (e gerenciado via Ansible).

O que eu não consigo descobrir, é como eu posso usar cryptsetup (ou outra coisa?) de forma não interativa para atualizar a senha.

Eu quero manter usando uma senha (e não um arquivo de chave) - estamos começando a implantar o Clevis / Tang para fazer a Criptografia de Disco Rígido de Rede em unidades raiz e queremos reter a opção de senha para inicialização.

Parece

echo "oldpassphrase
newpassphrase" | cryptsetup luksAddKey /dev/sda2

Pode fazer o truque, mas parece uma opção confusa?

    
por Sobrique 22.05.2018 / 10:45

1 resposta

1

É possível criar um contêiner LUKS de forma não interativa, usando a entrada padrão como arquivo-chave: echo -n "mypassword" cryptsetup luksFormat --key-file - dev/sda2

Mas não é possível alterar a senha de forma não interativa e sem usar arquivos de chave porque:

  1. cryptsetup não aceita senhas na linha de comando; Só os aceita de arquivos e interativamente; Provavelmente, para evitar o vazamento da senha no histórico do seu shell.
  2. Embora você possa usar a entrada padrão como um arquivo de chave, para adicionar ou alterar senhas, é necessário fornecer uma senha existente junto com a nova; São duas entradas e há apenas uma entrada padrão.

Opção 1 - Use pipes nomeados

Tecnicamente, isso requer um arquivo, mas o arquivo é um pipe nomeado, não um arquivo de chave:

mkpipe fifo
echo -n "oldpass" | cryptsetup luksAddKey --key-file - test.img fifo &
echo -m "newpass" > fifo

O primeiro comando cria o pipe nomeado, o segundo usa stdin para fornecer a senha original e lê a nova senha do pipe. Este segundo comando bloqueia, então o & coloca em segundo plano. O terceiro comando grava a nova senha no pipe, o que permite que o cryptsetup seja desbloqueado e continue.

Opção 2 - usando a API cryptsetup

O Cryptsetup não é apenas um utilitário, mas também uma biblioteca (libcryptsetup). Você pode usar uma função como crypt_keyslot_add_by_passphrase () em seu próprio código para adicionar um Nova senha. Esta função específica aceita a senha existente e nova como char * (uma string).

    
por 22.05.2018 / 22:20

Tags