Estoy buscando la (1) forma más segura y (2) más simple de hacer que un usuario escriba una contraseña en un indicador de shell bash y que esa contraseña se convierta en parte de stdin para un programa.
Así es como debe verse el stdin:, {"username":"myname","password":"<my-password>"}
dónde <my-password>
es lo que se escribió en el indicador del shell. Si tuviera control sobre el programa stdin, entonces podría modificarlo para solicitar una contraseña de forma segura y ponerlo en su lugar, pero el downstream es un comando estándar de propósito general.
He considerado y rechazado enfoques que usan lo siguiente:
- el usuario escribiendo la contraseña en la línea de comando: la contraseña se mostrará en la pantalla y también será visible para todos los usuarios a través de "ps"
- interpolación variable de shell en un argumento a un programa externo (por ejemplo,
...$PASSWORD...
): la contraseña aún sería visible para todos los usuarios a través de "ps" - variables de entorno (si se dejan en el entorno): la contraseña sería visible para todos los procesos secundarios; incluso los procesos confiables pueden exponer la contraseña si vuelcan las variables de entorno principales o de volcado como parte de un diagnóstico
- la contraseña se encuentra en un archivo durante un período prolongado de tiempo, incluso un archivo con permisos estrictos: el usuario puede exponer accidentalmente la contraseña y el usuario raíz puede ver la contraseña accidentalmente
Pondré mi solución actual como respuesta a continuación, pero con mucho gusto seleccionaré una mejor respuesta si a alguien se le ocurre una. Estoy pensando que debería haber algo más simple o tal vez alguien vea un problema de seguridad que me haya perdido.