¿Cómo es inseguro usar una contraseña de MySQL desde la línea de comandos?

12

Tengo algunas herramientas BASH que usan la mysql -e "{command}"función. Ingresar la contraseña cada vez que uso estas herramientas sería una molestia, por lo tanto, para evitar que la contraseña esté escrita en un archivo de texto sin formato con el código, la almaceno en la memoria (usando read -s) y hago que BASH la lea cada vez que ejecuta los comandos.

Mysql todavía piensa que la contraseña se está enviando a través de la línea de comando (porque, en cierto modo, lo es), y aún me da el error "Usar una contraseña en la interfaz de la línea de comando puede ser inseguro".

Para mis propósitos, no necesito suprimir este mensaje. Lo que necesito saber es, ¿qué es lo que podría hacerlo inseguro? La contraseña nunca es físicamente visible, por lo que navegar por los hombros no podría hacerlo e incluso alguien que adivinó mi contraseña SSH no podría hacerlo, ya que está almacenada en la memoria en lugar de en los propios scripts. ¿Es posible un ataque de hombre en el medio o algo similar?

Andrés
fuente
8
Ponerlo en ~/.my.cnf Ejemplo Se puede especificar por host haciendo [client<hostname>]por ejemplo, [clientlocalhost]herramientas de MySQL lo utilizará de forma automática por lo que es más fácil y más seguro
AmazingDreams
¿Cómo lo has bashleído cuando ejecutas el comando? Si lo haces mysql -p"$pass", cualquiera puede verlo ps.
Barmar

Respuestas:

26

Cualquiera que pueda ver sus variables de entorno (incluidos los programas que ejecuta) puede ver la contraseña. Y cualquiera que pueda ver sus procesos puede ver la línea de comando utilizada para ejecutarlos, incluidos los parámetros.

Entonces, para un cuadro en el que solo inicias sesión, el riesgo es probablemente insignificante. Pero para un ataque dirigido a usted personalmente, este es un vector de ataque trivial en el gran esquema de las cosas.

cuello largo
fuente
22
Así como alguien ve su ~/.history, etc
ivanivan
Sin mencionar HTOP y utilidades similares similares antes de que fueran enmascaradas. Muchos scripts tampoco utilizaron variables de entorno $ PASS, etc. porque el usuario era de solo lectura o carecía de permisos. En un solo usuario independiente, puede parecer que no importa.
mckenzm
1
¿Dónde dice la pregunta algo sobre las variables de entorno? Las variables de shell no se colocan en el entorno a menos que las exporte.
Barmar