Sto scrivendo uno bashscript e devo chiedere all'utente la sua password e passarla a openssl. Mentre opensslposso leggere la password stessa, ho bisogno di due esecuzioni del programma e non voglio chiedere all'utente due volte. Ecco la sceneggiatura:
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
Questo non è sicuro in quanto la password è facilmente disponibile guardando la riga di comando; qualcuno può leggerlo usando ps, per esempio.
opensslposso leggere una password da una variabile d'ambiente, quindi posso sostituirla -k "$PASS"con -pass env:PASS, ma non è ancora sicura; le variabili d'ambiente di qualsiasi processo possono essere lette liberamente (di nuovo, pspossono farlo).
Quindi, come posso passare in sicurezza la password alle due opensslistanze?
pslegge l'ambiente di un processo da /proc/<pid>/environ, ma questo file ha le 0600autorizzazioni, quindi solo root e l'utente che esegue il processo sono in grado di leggere l'ambiente del processo. Direi che è abbastanza sicuro.