Estoy creando una serie de scripts automatizados que se ejecutarán dentro de un entorno cifrado (cifrado completo del disco).
Muchos comandos tanto en Windows como en * nix tienen dos maneras de ingresar información confidencial, como contraseñas. En un modo, el programa solicita al usuario la contraseña y, en el otro, la contraseña se especifica mediante un argumento de opción.
Al escribir un script de shell, el comando se puede automatizar usando cualquiera de estos procesos. En el primer caso, el comando se ejecuta, luego se redirige el estándar in (stdin) y la contraseña se ingresa en el programa cuando se solicita. En el segundo caso, la contraseña se especifica como un argumento para el programa.
¿Es uno de estos inherentemente más riesgoso que el otro? ¿Hay alguna compensación a tener en cuenta? En cualquier caso, estoy preguntando específicamente sobre el método para suministrar la contraseña, no sobre el riesgo o la vulnerabilidad asociada con el almacenamiento de la contraseña en el disco.
Aquí hay un ejemplo en Python, usando la versión CLI de VeraCrypt:
Redireccionando la entrada estándar:
cmd = ['veracrypt', "--text", partition, mount_point]
input_file = open_file()
vc_call = subprocess.run(cmd, stdin=input_file)
vc_call.wait()
Pasando la contraseña como argumento:
password = get_password_from_file():
cmd = ['veracrypt', "--text", "--non-interactive", "--password", password, partition, mount_point]
vc_call = subprocess.run(cmd)
nota:
No estoy seguro de si es importante, pero en * nix, los comandos se pueden ejecutar directamente como llamadas al sistema. En el código anterior, ninguna de las llamadas a subprocess.run()
recibió una opción shell=True
, lo que provocaría que el comando se ejecutara dentro del shell predeterminado. Mi entendimiento es que en Windows, todos los comandos deben ejecutarse a través del shell cmd
. Esto podría hacer una diferencia entre las dos opciones, pero no estoy seguro de cómo.