Estoy escribiendo un bash
script y necesito pedirle al usuario su contraseña y pasarla openssl
. Si bien openssl
puedo leer la contraseña en sí, necesito dos ejecuciones del programa y no quiero preguntarle dos veces al usuario. Aquí está el guión:
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
Esto no es seguro ya que la contraseña está fácilmente disponible mirando la línea de comando; alguien puede leerlo usando ps
, por ejemplo.
openssl
puede leer una contraseña de una variable de entorno, por lo que puede sustituir -k "$PASS"
con -pass env:PASS
, pero todavía no es seguro; Las variables de entorno de cualquier proceso pueden leerse libremente (de nuevo, ps
pueden hacerlo).
Entonces, ¿cómo puedo pasar con seguridad la contraseña a las dos openssl
instancias?
ps
lee el entorno de un proceso /proc/<pid>/environ
, pero este archivo tiene 0600
permisos, por lo que solo el usuario root y el usuario que ejecuta el proceso pueden leer el entorno del proceso. Yo diría que es bastante seguro.