J'écris un bash
script et je dois demander à l'utilisateur son mot de passe et le transmettre à openssl
. Bien que openssl
je puisse lire le mot de passe lui-même, j'ai besoin de deux exécutions du programme et je ne veux pas demander à l'utilisateur deux fois. Voici le 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
Ce n'est pas sûr car le mot de passe est facilement accessible en regardant la ligne de commande; quelqu'un peut le lire en utilisant ps
, par exemple.
openssl
peut lire un mot de passe à partir d'une variable d'environnement, donc je peux le remplacer -k "$PASS"
par -pass env:PASS
, mais ce n'est toujours pas sûr; les variables d'environnement de n'importe quel processus peuvent être lues librement (encore une fois, ps
peuvent le faire).
Alors, comment puis-je transmettre le mot de passe en toute sécurité aux deux openssl
instances?
ps
lit l'environnement d'un processus à partir de /proc/<pid>/environ
, mais ce fichier a des 0600
autorisations, donc seuls root et l'utilisateur exécutant le processus peuvent lire l'environnement du processus. Je dirais que c'est assez sûr.