Wie ist die Verwendung eines MySQL-Kennworts über die Befehlszeile unsicher?

12

Ich habe ein paar BASH-Tools, die diese mysql -e "{command}"Funktion verwenden. Das Passwort jedes Mal read -seinzugeben, wenn ich diese Tools benutze, wäre mühsam. Um zu vermeiden, dass das Passwort mit dem Code in eine Klartextdatei geschrieben wird, speichere ich es im Speicher (mithilfe von ) und lasse es bei jeder Ausführung der Befehle von BASH lesen.

Mysql glaubt immer noch, dass das Kennwort über die Befehlszeile übermittelt wird (weil es sozusagen über die Befehlszeile übermittelt wird), und gibt weiterhin den Fehler "Die Verwendung eines Kennworts in der Befehlszeilenschnittstelle kann unsicher sein" aus.

Für meine Zwecke muss ich diese Meldung nicht unterdrücken. Was ich wissen muss ist, was könnte es unsicher machen? Das Passwort ist physisch nie sichtbar, so dass Schulter-Surfen nicht möglich ist und sogar jemand, der mein SSH-Passwort erraten hat, dies nicht kann, da es im Speicher und nicht in Skripten gespeichert ist. Ist ein Man-in-the-Middle-Angriff oder ähnliches möglich?

Andrew
quelle
8
Legen Sie es in ~/.my.cnf Beispiel Sie können pro Host angeben, indem Sie [client<hostname>]z. B. [clientlocalhost]MySQL-Tools wird es automatisch verwenden, damit es einfacher und sicherer ist
AmazingDreams
Wie haben Sie es bashgelesen, wenn Sie den Befehl ausführen? Wenn Sie das tun mysql -p"$pass", kann es jeder in sehen ps.
Barmar

Antworten:

26

Jeder, der Ihre Umgebungsvariablen (einschließlich der von Ihnen ausgeführten Programme) sehen kann, kann das Kennwort sehen. Und jeder, der Ihre Prozesse anzeigen kann, kann die Befehlszeile sehen, mit der sie ausgeführt werden, einschließlich der Parameter.

Für eine Box, in die sich nur Sie einloggen, ist das Risiko wahrscheinlich unbedeutend. Aber für einen gezielten Angriff auf Sie persönlich ist dies ein trivialer Angriffsvektor im großen Stil der Dinge.

langer Hals
quelle
22
Sowie jemand sieht Ihre ~/.history, etc
ivanivan
Ganz zu schweigen von HTOP und ähnlichen top-ähnlichen Dienstprogrammen, bevor diese maskiert wurden. Viele Skripte verwendeten auch keine Umgebungsvariablen wie $ PASS usw., da der Benutzer nur Leserechte hatte oder keine Berechtigungen hatte. Auf einem einzelnen Benutzer allein scheint dies keine Rolle zu spielen.
McKenzm
1
Wo sagt die Frage etwas über Umgebungsvariablen aus? Shell-Variablen werden nur dann in die Umgebung gestellt, wenn Sie sie exportieren.
Barmar