Auf UNIX-ähnlichen Systemen ist mir im Laufe der Jahre aufgefallen, dass .
(aktuelles Verzeichnis) $PATH
standardmäßig nicht enthalten ist. Warum ist das?
Ich erinnere mich, vor Jahren gelesen zu haben, dass es sich um ein Sicherheitsproblem handelte, aber der Artikel, den ich las, erklärte nicht, was genau das Problem war. Liegt es daran, dass jemand eine böswillige Version von ls
oder cp
in einem Verzeichnis hinterlassen könnte und ich sie letztendlich ausführen würde, ohne zu bemerken, dass sie dort vorhanden ist?
ls
wird/usr/bin/ls
und./ls
nicht. Es gibt auch die Hürde, wenn Sie wissen, wie Sie.
das Ende Ihres Weges ergänzen können , haben Sie wahrscheinlich eine Vorstellung davon, was Sie tun. root sollte nie haben.
in den Weg, viele Systeme nicht einmal root mehr einloggen können.Antworten:
Sie haben Ihre eigene Frage richtig beantwortet, genau deshalb steht dot nicht im Weg:
Zum Schutz vor kindlichen Viren oder ehrlichen Fehlern.
Natürlich ist dies eine sehr lahme und nutzlose Antivirenmaßnahme, und nichts hindert Sie daran, dem Pfad selbst Punkte hinzuzufügen.
quelle
-rf
im Verzeichnis (machtrm *
interessant) ;-)-rf
? ;)Ja. Wenn Sie das "." Im Pfad würden Sie am Ende viele Befehlsaufrufe an die Dateien in Ihrem aktuellen Verzeichnis senden.
Auch wenn es das letzte Mal war, liegt immer noch ein Pilotenfehler vor. Zum Beispiel fehlt Solaris 10 "top". Ich gebe den ganzen Tag "top" auf meinem System ein, weil ich denke, dass ich auf einem System bin, das "top" hat.
quelle
Entschuldigung, ich möchte dies in Form eines Kommentars zu der ausgewählten Antwort erfragen, aber ich habe noch keinen Vertreter für den Superuser.
Die Sicherheitsantwort macht Sinn, aber wenn Sie "." Sollte die Shell in Ihrem PATH nicht zuletzt im aktuellen Verzeichnis nach ausführbaren Dateien suchen und damit das Sicherheitsrisiko verringern? Wenn es $ PATH nacheinander durchsucht, findet es / bin / ls, bevor es ./ls findet.
Also, wie unsicher ist es für mich, "." am Ende meiner Umgebungsvariablen $ PATH?
Es funktioniert so, wie ich es vorschlage. So habe ich getestet:
Fügen Sie zuerst "." zum ENDE Ihrer PATH-Umgebungsvariablen.
Fügen Sie dann die folgende Datei in ein Verzeichnis ein, z. B. ~ / dir1 / dir2 / test_which.rb:
Und legen Sie diese Datei unter /usr/bin/test_which.rb ab
Stellen Sie sicher, dass Sie die Dateien mit der Tastenkombination chmod + x ausführen.
Wenn Sie nun das Verzeichnis in ~ / dir1 / dir2 ändern und test_which.rb ausführen, erhalten Sie die Ausgabe
Wenn Sie "which test_which.rb" von einer beliebigen Stelle aus ausführen, sollte dies tatsächlich gemeldet werden
Sie können die Datei weiterhin im aktuellen Verzeichnis ausführen, indem Sie Folgendes eingeben:
quelle
dc
odersl
odersduo
in einer Schale und wurde gerettet von „Befehl nicht gefunden“. Je.ls
(Farbausgabe und mehr) so eingestellt,l
dass auf Tippfehler gänzlich verzichtet wird.Mehr als ein Sicherheitsrisiko, mit '.' Im PATH machen Sie es fast unmöglich, sicherzustellen, dass die Ausführung eines Befehls wie beabsichtigt funktioniert. Denken Sie daran, einen Befehl wie 'zip' in einem riesigen Verzeichnis auszuführen, das Tausende von Dateien mit zufälligen Namen enthält. Die Möglichkeit, dass einer von ihnen tatsächlich den Namen "zip" trägt, ist nicht unerheblich und würde zu einem Fehler führen, der nur schwer zu verstehen ist (tatsächlich sollte die Datei ausführbar sein, was jedoch passieren kann).
Dies gilt insbesondere beim Schreiben von Skripten, bei denen die PATH-Variable des Benutzers beibehalten wird. Ein gut geschriebenes Skript sollte sich mit allen Eckfällen befassen (wie Dateinamen mit Leerzeichen oder beginnend mit '-'). Es ist jedoch unpraktisch, die Ausführung einer Datei im aktuellen Verzeichnis anstelle eines Systembefehls zu verhindern ...
quelle