In anderen Antworten wurde erwähnt, dass es keine gute Idee ist, das aktuelle Arbeitsverzeichnis (' .
') in Ihre $PATH
Umgebungsvariable aufzunehmen, aber es wurde keine Frage gefunden, die sich speziell mit dem Problem befasst.
Warum sollte ich .
meinen Weg nicht erweitern? Und wenn ich es trotz aller Warnungen trotzdem mache, worauf muss ich achten? Ist es sicherer, es an das Ende als an den Anfang anzufügen?
Antworten:
Wenn Sie der einzige Benutzer auf dem Computer sind, ist dies in Ordnung, solange Sie wissen, was Sie tun. Das allgemeine Problem besteht darin, dass Sie in Ihrem aktuellen Verzeichnis
PATH
keine Befehle als konstante Liste sehen können. Wenn Sie ein Skript / Programm aus Ihrem aktuellen Verzeichnis ausführen müssen, können Sie es jederzeit explizit ausführen, indem Sie./
dem Namen voranstellen (Sie teilen dem System mit, dass Sie diese Datei aus meinem aktuellen Verzeichnis ausführen möchten).Angenommen, jetzt haben Sie all diese kleinen Skripte im gesamten Dateisystem. Eines Tages wirst du mit Sicherheit die falsche ausführen. Wenn Sie also
PATH
eine vordefinierte Liste mit statischen Pfaden haben, dreht sich alles darum, Ordnung zu schaffen und sich vor einem potenziellen Problem zu schützen.Wenn Sie jedoch hinzufügen gehen
.
zu deinemPATH
, schlage ich es bis zum Ende der Liste angehängt wird (export PATH=$PATH:.
). Zumindest werden Sie auf diese Weise systemweite Binärdateien nicht überschreiben.Wenn Sie eine Wurzel auf dem System sind und das System auf andere Benutzerkonten ausgesetzt haben, mit
.
inPATH
ein enormes Sicherheitsrisiko: Sie können ,cd
um einige Benutzer-Verzeichnis, und unbeabsichtigt ein bösartiges Skript ausführen es nur , weil Sie das eine oder andere Skript vertippt , dass hat den gleichen Namen wie eine systemweite Binärdatei.quelle
ls
in Ihr aktuelles Verzeichnis aufnehmen. Als nächstes werden Sie ausgeführtls
, um die extrahierten Dateien zu überprüfen, und Sie haben den schädlichen Code bereits ausgeführt.Das Risiko besteht darin, dass jemand eine böswillige ausführbare Datei in das Verzeichnis legt, das zufällig Ihr aktuelles ist.
Der schlimmste Fall tritt ein, wenn:
.
befindet sich am Anfang Ihres PFADS, da Standardbefehle überschrieben werden können, ohne dass Sie es bemerken (normalerweise einls
Befehl, der sich vor der Liste verbergen könnte).Das Risiko ist viel geringer, wenn Sie als regulärer Benutzer angemeldet sind und das
.
am Ende Ihres PFADS haben, aber es besteht immer noch:Beachten Sie, dass das Risiko auf jeden Fall weiterhin besteht, auch wenn Sie der einzige Benutzer des Geräts sind. Schädliche Software wird installiert, wenn Sie beispielsweise ein Archiv extrahieren, das von einer gefährdeten Site heruntergeladen wurde.
quelle
sl
zu sehen, wie oft Punkt 3 auftritt.alias l=`ls`
.ls
eine Verzeichnisliste, aber bei einigen Projekten, die ich heruntergeladen habe, befindet sich möglicherweise einls
Skript im Stammprojektordner als Verknüpfung zu etwas anderem.ls
ist wahrscheinlich ein schlechtes Beispiel, aber ich kann mir durchaus vorstellen, ese
zu editieren,d
zu debuggen,m
zu machen,b
zu bauen. Ich habe selbst einige davon weltweit. Wenn ich tippe,m
erwarte ich, dass make gestartet wird (meine Verknüpfung), und nicht ein lokales Skript, dasm
zur Ausführung aufgerufen wird .w
und[
.Auch wenn Sie bei der Eingabe immer sehr vorsichtig sind, ist das Putting
.
to yourPATH
selbst am Ende immer noch unsicher, da einige Programme das aktuelle Verzeichnis in/tmp
(das von der Welt beschreibbar ist) ändern und möglicherweise auch versuchen, Dienstprogramme auszuführen, die tatsächlich nicht installiert sind. also standardmäßig was drin ist/tmp
. In diesem Fall handelt es sich um einen Angriffsvektor.Beachten Sie auch , dass es nicht viel Nachteil zu vermeiden , ist
.
inPATH
, weil./
einfach zu Art (insbesondere an den Keyboards wie QWERTY, wo diese Zeichen an aufeinander folgenden Tasten und Shift nicht brauchen) und unter Verwendung./
wird auch helfen , Abschluss, damit potenziell Speichern Tastenanschläge Am Ende.Wenn Sie wirklich in der Lage sein möchten, Befehle aus dem aktuellen Verzeichnis einzugeben,
command_not_found_handler
bieten moderne Shells (wie zsh mit seinem ) möglicherweise Funktionen, mit denen Sie dies sicher tun können, dh, Sie können alle gewünschten Sicherheitsüberprüfungen im Handler vor dem hinzufügen Befehl wird ausgeführt.quelle