Aviso : a mesma vulnerabilidade foi discutida nesta pergunta , mas a configuração diferente do problema (no meu caso, não preciso armazenar a senha) permite uma solução diferente ( ou seja, usando descritores de arquivo em vez de salvar a senha em um arquivo, veja a resposta de ilkkachu ).
Suponha que eu tenha um arquivo criptografado simetricamente my_file
(com gpg 1.x), no qual armazeno alguns dados confidenciais e quero editá-lo usando o seguinte script:
read -e -s -p "Enter passphrase: " my_passphrase
gpg --passphrase $my_passphrase --decrypt $my_file | stream_editing_command | gpg --yes --output $my_file --passphrase $my_passphrase --symmetric
unset my_passphrase
Onde stream_editing_command
substitui/anexa algo ao fluxo.
Minha pergunta : isso é seguro? A variável $my_passphrase
e/ou a saída descriptografada serão visíveis/acessíveis de alguma forma? Se não for seguro, como devo modificar o script?
Não, isso não é realmente considerado seguro. A senha será visível na saída de
ps
, assim como todas as linhas de comando de outros processos em execução. Os dados em si não serão visíveis, o pipe não é acessível a outros usuários.A página man para
gpg
tem isso a dizer sobre--passphrase
:Obviamente, se você não tiver outros usuários no sistema e confiar que nenhum de seus serviços foi comprometido, não deve haver ninguém olhando para a lista de processos.
Mas em qualquer caso, você pode usar
--passphrase-fd
e fazer com que o shell redirecione a senha para o programa. Usando aqui-strings: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 primeirogpg
pode não conseguir ler o arquivo antes de ser truncado.Para evitar o uso da linha de comando, você também pode armazenar a senha em um arquivo e usar
--passphrase-file
. Mas você precisaria 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.