A veces lo hago echo "secret" | mysql -u root -p ...
. Ahora estoy convencido de la seguridad aquí: ¿puede alguien que enumere todos los procesos ver la contraseña?
Para verificar lo intenté con echo "test" | sleep 1000
y el comando echo con el secreto no era visible en la salida de "ps aux". Entonces supongo que es seguro, pero ¿puede un experto en seguridad confirmarlo por favor? :)
.history
).Respuestas:
La respuesta a esto depende de qué shell está utilizando. Muchos shells tienen
echo
como comando incorporado lo que significa que no genera un proceso separado y, por lo tanto, no aparecerá en una lista de procesos. Sin embargo, si escribe/bin/echo
o./echo
deshabilita los componentes integrados con elenable -n echo
comando, el shell no utilizará su comando integrado y utilizará la versión binaria en su lugar. Esto aparecerá en una lista de procesos.Si está utilizando el binario en lugar del shell incorporado, el comando echo aparecerá durante el tiempo que sea necesario para mover los datos al búfer STDIN del otro proceso. Este búfer tiene un tamaño finito, por lo que si hay más datos de los que caben en el búfer, el comando echo tendrá que esperar un tiempo hasta que el otro proceso pueda leer algunos de los datos del búfer. Para la mayoría de los casos (como los dos ejemplos que dio anteriormente) este período de tiempo será de microsegundos. Si está pegando un volcado de SQL de 20 MB en MySQL usando echo, esto podría ser más largo. No importa cuán corto sea el tiempo, si está utilizando el binario en lugar del shell incorporado y alguien obtiene el momento justo, podrá ver el proceso en la lista de procesos.
Puede evitar esto colocando los datos secretos en un archivo (con los permisos adecuados) y utilizando el archivo como STDIN de esta manera:
fuente
Para el caso mysql ~ / .my.cnf se puede usar para almacenar secretos, es decir
fuente
Solo usa
y pulsa enter. Luego se le pedirá la contraseña y no será visible ni en la lista de procesos ni en los archivos del historial.
fuente