Estou escrevendo um bash
script e preciso solicitar a senha do usuário e passá-la para openssl
. Embora openssl
possa ler a senha em si, preciso de duas execuções do programa e não quero perguntar ao usuário duas vezes. Aqui está o script:
cp file{,.old}
read -sp 'Enter password. ' PASS; echo
export PASS
# decode | edit | encode
openssl enc -d -aes-256-cbc -k "$PASS" -in file.old | \
sed ... | openssl enc -e -aes-256-cbc -k "$PASS" -out file
unset PASS
Isso não é seguro, pois a senha está facilmente disponível olhando a linha de comando; alguém pode lê-lo usando ps
, por exemplo.
openssl
pode ler uma senha de uma variável de ambiente, para que eu possa substituir -k "$PASS"
por -pass env:PASS
, mas ainda não é seguro; as variáveis de ambiente de qualquer processo podem ser lidas livremente (novamente, é ps
possível).
Então, como posso passar com segurança a senha para as duas openssl
instâncias?
ps
lê o ambiente de um processo /proc/<pid>/environ
, mas esse arquivo tem 0600
permissões; portanto, apenas o usuário root e o usuário que está executando o processo podem ler o ambiente do processo. Eu diria que é bem seguro.