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 w
im 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.
command-line
security
password
patryk.beza
quelle
quelle
ps -ef
(alle laufenden Prozesse) zum Beispiel. Oder den Inhalt von/proc
. Es ist nicht nur derw
Befehl, der hier etwas Besonderes ist. Welche Prozesse auf dem System ausgeführt werden, gilt als allgemein bekannt für alle auf diesem System.$echo 'a' a $ echo 'b' b $!echo echo 'a' a
(Hinweis,echo 'b'
der nicht im Verlauf aufgezeichnet wurde).Antworten:
Die Befehlszeilenargumente jedes Prozesses im System werden als "öffentlich" betrachtet. Nicht nur der
w
Befehl, sondernps
undtop
und 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
w
odertop
oderps
(odercat
). 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
mysql
der Manpage:Übrigens ist die Übergabe von Kennwörtern oder vertraulichen Daten in Umgebungsvariablen weniger offensichtlich unsicher, aber auf den meisten Systemen auch tatsächlich unsicher.
quelle
mysql
überschreibt tatsächlich das Passwortargument (siehe unix.stackexchange.com/q/88665/15241 ), aber dies löst das Sicherheitsproblem nicht wirklich.--password
Option): (...) 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. (...) .Nein, es ist nicht sicher, Kennwörter an Programme in der Befehlszeile zu übergeben. Es ist besser zu verwenden:
quelle
postgresql
hat eine Möglichkeit, Passwort sicher zu lesen, danach zu suchen, kann auchmysql
den gleichen Mechanismus haben.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 the
hidepid` 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.quelle