Ist es sicher hinzuzufügen? zu meinem PFAD? Woher?

49

In anderen Antworten wurde erwähnt, dass es keine gute Idee ist, das aktuelle Arbeitsverzeichnis (' .') in Ihre $PATHUmgebungsvariable 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?

Jander
quelle

Antworten:

39

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 PATHkeine 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 PATHeine 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 deinem PATH, 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 .in PATHein enormes Sicherheitsrisiko: Sie können , cdum 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.

artyom
quelle
1
+ Akzeptieren Sie die zugrunde liegende Theorie und erwähnen Sie, dass die Probleme auch dann bestehen können, wenn Sie der einzige Benutzer im System sind. Beide Antworten bringen hervorragende Punkte. Ich werde hinzufügen, dass jedes Mal, wenn Sie Verzeichnisse für einen anderen Benutzer freigeben, ein erhöhtes Risiko besteht, unabhängig davon, ob Sie als Root angemeldet sind oder nicht.
Jander
6
Auch als einziger Benutzer auf dem Computer: Jedes Mal, wenn Sie einen nicht vertrauenswürdigen Teer extrahieren, kann er einen lsin Ihr aktuelles Verzeichnis aufnehmen. Als nächstes werden Sie ausgeführt ls, um die extrahierten Dateien zu überprüfen, und Sie haben den schädlichen Code bereits ausgeführt.
Lesmana
35

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:

  • Sie sind als root angemeldet, da der böswillige Befehl unbegrenzte Schadenskraft besitzt
  • .befindet sich am Anfang Ihres PFADS, da Standardbefehle überschrieben werden können, ohne dass Sie es bemerken (normalerweise ein lsBefehl, 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:

  • Jemand könnte herausfinden, dass Sie häufig einen Befehl falsch eingeben und einen passenden installieren
  • Möglicherweise installiert jemand einen falschen Befehl mit dem Namen eines nicht installierten Befehls.

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.

jlliagre
quelle
15
Installieren Sie, um slzu sehen, wie oft Punkt 3 auftritt.
Jordanien
oder alias l=`ls`.
Anko
es muss nicht bösartig sein. Ich erwarte lseine Verzeichnisliste, aber bei einigen Projekten, die ich heruntergeladen habe, befindet sich möglicherweise ein lsSkript im Stammprojektordner als Verknüpfung zu etwas anderem. lsist wahrscheinlich ein schlechtes Beispiel, aber ich kann mir durchaus vorstellen, es ezu editieren, dzu debuggen, mzu machen, bzu bauen. Ich habe selbst einige davon weltweit. Wenn ich tippe, merwarte ich, dass make gestartet wird (meine Verknüpfung), und nicht ein lokales Skript, das mzur Ausführung aufgerufen wird .
gman
@ gman Richtig. Ein nicht böswilliger Befehl kann in der Tat unbeabsichtigt negative Auswirkungen haben. Beachten Sie, dass Einzelbuchstabenbefehle / Aliase seit der Einführung von Unix aufgrund des hohen Risikos von Tippfehlern verpönt waren. Seltene Standard sind wund [.
Juli
3

Auch wenn Sie bei der Eingabe immer sehr vorsichtig sind, ist das Putting .to your PATHselbst 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 .in PATH, 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_handlerbieten 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.

vinc17
quelle