Sto scrivendo uno bash
script e devo chiedere all'utente la sua password e passarla a openssl
. Mentre openssl
posso 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.
openssl
posso 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, ps
possono farlo).
Quindi, come posso passare in sicurezza la password alle due openssl
istanze?
ps
legge l'ambiente di un processo da /proc/<pid>/environ
, ma questo file ha le 0600
autorizzazioni, quindi solo root e l'utente che esegue il processo sono in grado di leggere l'ambiente del processo. Direi che è abbastanza sicuro.