Sie könnten das falsche Programm ausführen. Jemand könnte Sie dazu bringen, ihr Programm auszuführen.
Die -execdir
Aktion führt Ihren Befehl aus dem Verzeichnis aus, das die gefundenen Dateien enthält. Wenn $PATH
relative Pfade enthalten sind, wie z. B. .
oder alles, was nicht damit beginnt/
, -execdir
ist dies unsicher, da ein Verzeichnis, in dem sich eine Datei befindet (oder ein anderes Verzeichnis, das relativ dazu aufgelöst wurde), möglicherweise auch eine ausführbare Datei mit demselben Namen enthält wie die, die Sie versuchen zu rennen. Diese möglicherweise nicht vertrauenswürdige ausführbare Datei würde dann stattdessen ausgeführt.
Dies könnte absichtlich von einem anderen Benutzer ausgenutzt werden, um zu bewirken, dass Sie dessen Programm ausführen, was zu einem Schaden oder einer Verletzung der Datensicherheit führen kann, anstatt des Programms, das Sie ausführen möchten. Oder, seltener, es kann einfach dazu führen, dass versehentlich das falsche Programm ausgeführt wird, auch ohne dass jemand versucht, das Problem zu lösen.
Wenn alles in Ihrer PATH
Umgebungsvariable ein absoluter Pfad ist, sollte dieser Fehler nicht auftreten, selbst wenn das Verzeichnis Sie suchen und -execdir
ing aus ist in enthalten PATH
. (Ich habe überprüft, ob dies funktioniert.) Wenn Sie der Meinung sind, dass Sie keine relativen Verzeichnisse haben $PATH
, diese Fehlermeldung jedoch weiterhin erhalten, aktualisieren Sie Ihre Frage mit Details, einschließlich der Ausgabe von echo "$PATH"
.
Ein konkretes Beispiel.
Nehmen wir als Beispiel an, was schief gehen könnte:
- Alice hat es
.
in sich, $PATH
weil sie Programme in jedem Verzeichnis ausführen möchte, in dem sie sich gerade befindet cd
, ohne sich die Mühe zu machen, ihren Namen voran zu stellen ./
.
- Alice's frenemy Eve hat
/home/eve/shared
mit Alice geteilt.
- Alice möchte Statistiken (Zeilen, Wörter, Bytes) über die
.c
Dateien, die Eve mit ihr geteilt hat.
Also läuft Alice:
find ~eve/shared -name \*.c -execdir wc {} \;
Unglücklicherweise für Alice hat Eve ihr eigenes Skript erstellt, benannt wc
, ausführbar gemacht ( chmod +x
) und es heimlich in eines der Verzeichnisse darunter gestellt /home/eve/shared
. Evas Skript sieht folgendermaßen aus:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Also , wenn Alice Anwendungen find
mit -execdir
laufen wc
auf die Dateien Eve geteilt hat, und es wird auf Dateien im selben Verzeichnis wie Eves benutzerdefinierten wc
Skript, Evas wc
läuft - mit allen Alices Privilegien!
(Eve hat ihr wc
Skript als Wrapper für das System eingerichtet wc
, sodass Alice nicht einmal weiß, dass etwas schiefgelaufen ist, dh dass do_evil
es ausgeführt wurde. Es sind jedoch einfachere - und auch komplexere - Variationen möglich. )
Wie find
verhindert man das?
find
Verhindert das Auftreten dieses Sicherheitsproblems, indem die Ausführung der -execdir
Aktion verweigert wird, wenn $PATH
ein relatives Verzeichnis enthalten ist.
find
bietet je nach Situation zwei Diagnosemeldungen an.
Wenn .
ist in $PATH
, dann (wie Sie gesehen haben) heißt es:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
Es hat wahrscheinlich eine besondere Botschaft für den .
Fall, wie es besonders häufig ist.
Wenn ein relativer Pfad anders als .
--say, foo
--appears in $PATH
und Sie laufen find
mit -execdir
, heißt es:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
Es ist besser, überhaupt keine relativen Pfade zu haben $PATH
.
Das Risiko von .
Pfaden oder anderen relativen Pfaden $PATH
ist besonders hoch, wenn Sie ein Dienstprogramm verwenden, das das Verzeichnis automatisch ändert, weshalb find
Sie dies -execdir
in dieser Situation nicht zulassen .
Aber mit relativen Pfaden, vor allem .
in Ihrer $PATH
Natur aus riskant ist und wirklich sowieso am besten vermieden werden. Betrachten Sie die fiktive Situation im obigen Beispiel. Angenommen, anstatt zu rennen find
, rennt Alice einfach cd
zu ~eve/shared/blah
und davon wc *.c
. Wenn blah
Evas wc
Skript enthalten ist, wird es do_evil
als Alice ausgeführt.