Ist der Befehl w für Benutzer sicher?

7

Einige Anwendungen erlauben die Übergabe eines Kennworts als Argument. Zum Beispiel:

mysql --user=user_name --password=your_password db_name

Ist es sicher? Neben der Tatsache, dass das eingegebene Passwort im Bash-Verlauf gespeichert wird, kann jemand wim richtigen Moment einen Befehl eingeben und sieht die vollständige Befehlszeile des Prozesses (einschließlich Passwort).

Es ist ziemlich überraschend für mich, dass jeder Benutzer sehen kann, welchen Befehl ich gerade ausführe.

patryk.beza
quelle
2
Nein, es ist nicht sicher. Siehe meine Antwort hier: unix.stackexchange.com/questions/158933/…
Martin von Wittich
2
Siehe auch ps -ef(alle laufenden Prozesse) zum Beispiel. Oder den Inhalt von /proc. Es ist nicht nur der wBefehl, der hier etwas Besonderes ist. Welche Prozesse auf dem System ausgeführt werden, gilt als allgemein bekannt für alle auf diesem System.
ComputerDruid
Wenn Sie nicht möchten, dass bash diese Befehle im Verlauf speichert, beginnen Sie den Befehl einfach mit einem Leerzeichen: $echo 'a' a $ echo 'b' b $!echo echo 'a' a (Hinweis, echo 'b'der nicht im Verlauf aufgezeichnet wurde).
Bakuriu

Antworten:

15

Die Befehlszeilenargumente jedes Prozesses im System werden als "öffentlich" betrachtet. Nicht nur der wBefehl, sondern psund topund viele andere Befehle zugreifen , diese Informationen als selbstverständlich. In der Tat sind keine besonderen Berechtigungen erforderlich, um diese Informationen zu erhalten. Unter Linux können Sie die Befehlszeile eines anderen Prozesses, auch eines Prozesses eines anderen Benutzers, durch Lesen lesen /proc/<pid>/cmdline.

Dies ist kein Fehler oder unsicheres Verhalten von woder topoder ps(oder cat). Vielmehr liegt die Aufgabe darin, auf Mehrbenutzersystemen niemals vertrauliche Informationen über Befehlszeilen weiterzuleiten.

Die meisten Dienstprogramme, die Kennwörter in der Befehlszeile akzeptieren können, empfehlen dies nicht. Zum Beispiel aus mysqlder Manpage:

Die Angabe eines Kennworts in der Befehlszeile sollte als unsicher angesehen werden. Siehe Abschnitt 5.3.2.2, "Endbenutzerrichtlinien für die Kennwortsicherheit". Sie können eine Optionsdatei verwenden, um zu vermeiden, dass das Kennwort in der Befehlszeile angegeben wird.

Übrigens ist die Übergabe von Kennwörtern oder vertraulichen Daten in Umgebungsvariablen weniger offensichtlich unsicher, aber auf den meisten Systemen auch tatsächlich unsicher.

Celada
quelle
2
mysqlüberschreibt tatsächlich das Passwortargument (siehe unix.stackexchange.com/q/88665/15241 ), aber dies löst das Sicherheitsproblem nicht wirklich.
Jofel
Nettes Zitat aus dem Zip-Handbuch (siehe --passwordOption): (...) Viele Mehrbenutzer-Betriebssysteme bieten jedem Benutzer die Möglichkeit, die aktuelle Befehlszeile eines anderen Benutzers anzuzeigen. Selbst auf eigenständigen Systemen besteht immer die Gefahr, über die Schulter zu spähen. Das Speichern des Klartextkennworts als Teil einer Befehlszeile in einem automatisierten Skript ist noch schlimmer. Verwenden Sie nach Möglichkeit die nicht echoende, interaktive Eingabeaufforderung, um Kennwörter einzugeben. (...) .
patryk.beza
5

Nein, es ist nicht sicher, Kennwörter an Programme in der Befehlszeile zu übergeben. Es ist besser zu verwenden:

mohsen@debian:~$ mysql -uuser -p
Enter password: 
Persischer Golf
quelle
Ich weiß, dass es die bevorzugte Art ist, ein Passwort zu übergeben, aber manchmal (dh im Bash-Skript) muss ich ein fest codiertes Passwort verwenden.
patryk.beza
Ich erinnere mich, postgresqlhat eine Möglichkeit, Passwort sicher zu lesen, danach zu suchen, kann auch mysqlden gleichen Mechanismus haben.
PersianGulf
0

Obwohl es nicht sicher ist, denken Sie bitte daran, dass Linux heutzutage in den frühen Zwanzigern ist - wie bei anderen Dingen in der IT waren die Auswirkungen auf die Sicherheit damals entweder nicht so klar oder wurden später angesprochen.

Verwenden Sie daher, wie in den anderen Antworten erwähnt, kein Kennwort in der Befehlszeile.

Sie können (und sollten wahrscheinlich auch) die Informationen einschränken, die entweder durch das Mountring von procfs with thehidepid` oder durch die Verwendung des grsecurity- gehärteten Kernels bereitgestellt werden . Beachten Sie, dass dies einige Dinge beschädigen kann (möglicherweise cgroups und alles, was darauf beruht - wie z. B. systemd), zumindest zum Zeitpunkt des Schreibens.

Peterph
quelle