Weiterleiten eines Passworts und Sicherheit

11

Das mache ich manchmal echo "secret" | mysql -u root -p .... Jetzt geht es mir hier um Sicherheit: Kann jemand, der alle Prozesse auflistet, das Passwort sehen?

Zur Überprüfung habe ich es mit versucht echo "test" | sleep 1000und der Echo-Befehl mit dem Geheimnis war in der Ausgabe von "ps aux" nicht sichtbar. Ich gehe also davon aus, dass es sicher ist - aber kann ein Sicherheitsexperte dies bitte bestätigen? :) :)

Gucki
quelle
Kann nicht in einer Prozessliste angezeigt werden, wenn eine Endlosschleife ausgeführt wird. Gute Frage.
Tim
1
Vergessen Sie außerdem nicht, dass alles, was Sie auf den meisten Shells eingeben, irgendwo (wie .history) in einer Verlaufsdatei gespeichert wird .
Alexander Bird

Antworten:

13

Die Antwort darauf hängt davon ab, welche Shell Sie verwenden. Viele Shells haben echoeinen eingebauten Befehl, was bedeutet, dass kein separater Prozess erzeugt wird und daher nicht in einer Prozessliste angezeigt wird. Wenn Sie jedoch geben /bin/echooder ./echooder wenn deaktivieren Sie die builtins mit derenable -n echo Befehl, dann wird die Schale nicht seinen eingebauten Befehl verwenden und die binäre Version stattdessen verwenden. Dies wird in einer Prozessliste angezeigt.

Wenn Sie die Binärdatei anstelle der integrierten Shell verwenden, wird der Befehl echo so lange angezeigt, bis die Daten in den STDIN-Puffer des anderen Prozesses verschoben wurden. Dieser Puffer hat eine endliche Größe. Wenn also mehr Daten vorhanden sind, als in den Puffer passen, muss der Echo-Befehl eine Weile warten, bis der andere Prozess einige der Daten aus dem Puffer lesen kann. In den meisten Fällen (wie in den beiden oben angegebenen Beispielen) beträgt dieser Zeitraum Mikrosekunden. Wenn Sie zufällig einen 20-MB-SQL-Dump mit Echo in MySQL einfügen, kann dies länger dauern. Egal wie kurz die Zeit ist, wenn Sie die Binärdatei anstelle der eingebauten Shell verwenden und jemand zufällig das richtige Timing findet, kann er den Prozess in der Prozessliste sehen.

Sie können dies vermeiden, indem Sie die geheimen Daten in eine Datei einfügen (mit entsprechenden Berechtigungen) und die Datei wie folgt als STDIN verwenden:

mysql -u root -p < file_with_secret.sql
Ladadadada
quelle
5
Beachten Sie, dass das Kennwort, wenn Sie es so in die Befehlszeile eingeben, höchstwahrscheinlich in der Verlaufsdatei Ihrer Shell gespeichert wird. Es lohnt sich daher, die Berechtigung und den Inhalt der Verlaufsdatei zu überprüfen.
Aculich
3

Für den MySQL-Fall kann ~ / .my.cnf verwendet werden, um Geheimnisse zu speichern, dh

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME
am weisesten werden
quelle
1

Benutz einfach

mysql -uroot -p

und drücken Sie die Eingabetaste. Sie werden dann zur Eingabe des Kennworts aufgefordert und es wird weder in der Prozessliste noch in den Verlaufsdateien angezeigt.

jdw
quelle
Daten, die von MySQL auf STDIN akzeptiert werden, sind die Befehle, die ausgeführt werden, sobald Sie sich angemeldet haben. Das "Geheimnis" in der Frage ist nicht das Kennwort.
Ladadadada