gpg --passphrase $my_passphrase
My question: is this safe? Will the variable $my_passphrase and/or the decrypted output be visible/accessible in some way?
Não, isso não é considerado seguro. A senha será visível na saída de ps
, assim como nas linhas de comando de todos os outros processos em execução. Os dados em si não serão visíveis, o canal não está acessível para outros usuários.
A página man de gpg
tem isto a dizer sobre --passphrase
:
--passphrase string
Use string as the passphrase. This can only be used if only one passphrase is supplied. Obviously, this is of very questionable security on a multi-user system. Don't use this option if you can avoid it.
Claro, se você não tiver outros usuários no sistema e confiar que nenhum dos seus serviços foram comprometidos, não deverá haver ninguém olhando para a lista de processos.
Mas, em qualquer caso, você poderia usar --passphrase-fd
e fazer com que o shell redirecionasse a frase secreta para o programa. Usando aqui-strings:
#!/bin/bash
gpg --passphrase-fd 3 3<<< "$my_passphrase" --decrypt "$my_file" |
stream_editing_command |
gpg --yes --output "$my_file" --passphrase-fd 3 3<<< "$my_passphrase" --symmetric
Observe que isso só funciona se o segundo gpg
não truncar o arquivo de saída antes de obter a entrada completa. Caso contrário, o primeiro gpg
talvez não consiga ler o arquivo antes de ser truncado.
Para evitar o uso da linha de comando, você também pode armazenar a frase secreta em um arquivo e, em seguida, usar --passphrase-file
. Mas você precisa ter cuidado ao configurar as permissões de acesso do arquivo, removê-lo posteriormente e escolher um local adequado para que a senha não seja realmente armazenada no armazenamento persistente.