Wir alle kennen die zerstörerische Kraft des folgenden Befehls, der als root ausgeführt wird:
rm -rf /
Verwandte Fragen:
Ich sehe nicht ein, wann diese spezielle Kombination von Parametern nützlich wäre, da sie das gesamte System zerstört und es effizientere Möglichkeiten gibt, dies zu tun. Der rm
Befehl könnte nach diesen spezifischen Parametern suchen und eine Art Schutz implementieren - trotz des -f
Parameters zumindest um Bestätigung bitten .
Warum gibt es keinen solchen Schutz im rm
Befehl?
Mir ist klar, dass Sie besonders vorsichtig sein müssen, wenn Sie Befehle als root ausführen. Mit großer Kraft (...) . Sollte dieser spezielle Fall jedoch keine Ausnahme von dieser Regel sein?
rm -rf /
durchgeführt wirdchroot
?set -u
ist dein Freund. Wenn Sie jedoch einstellenvariable=
, kann Sie nichts außer defensiver Programmierung retten.Antworten:
Das hängt von der Verteilung ab. Das ältere Linux, auf dem ich gerade bin, erlaubt es (ich denke, habe es aber nicht getestet :-)) und sagt in
man rm
:Bei vielen neueren Distributionen müssen Sie explizit hinzufügen
--no-preserve-root
, um den Schutz zu deaktivieren. Andernfalls kann es nicht ausgeführt werden.Informationen zu Ubuntu finden Sie in diesem Problem, in dem dieses Verhalten erläutert wird.
Die Geschichte dieses Schutzes laut Wikipedia :
quelle
Es gibt bereits drei Sicherheitsvorkehrungen:
-r
Schalter, ohne den ein Verzeichnis nicht entfernt werden kann.-i
Schalter, der überprüft, ob Sie tatsächlich löschen möchten, was Sie zum Löschen aufgefordert haben. Aliasingrm
,rm -i
um diesen Schutz einzuschalten , es sei denn, Sie fügen den-f
Schalter hinzu, um ihn auszuschalten.root
das Stammverzeichnis löschen.Das Unix-Toolset ist wie eine Kettensäge: Es wurde entwickelt, um sehr mächtige Dinge zu tun und von Leuten benutzt zu werden, die verstehen, was sie tun. Diejenigen, die nachlässig treten, werden sich wahrscheinlich selbst verletzen. Dies bedeutet nicht, dass die Erfahrenen keine Fehler machen, und offensichtlich haben Sun und andere das Gefühl, dass Benutzer mit
root
Schutz vor sich selbst geschützt werden müssen.Die Leute haben gefragt, warum wir
rm
seit mindestens den 1980er Jahren keinen Klingenschutz mehr über die Kettensäge legen können . (Wahrscheinlich länger, aber meine Geschichte mit Unix geht nicht weiter zurück.) Sie müssen sich weitere Fragen stellen:Was sollte noch als heilig angesehen werden, da wir Ausnahmen hinzufügen? Sollten wir das rekursive Löschen von Elementen im Stammverzeichnis verhindern, um ebenso verheerende Fehler wie zu vermeiden
rm -rf /*
? Was ist mit dem Home-Verzeichnis des Benutzers? Was ist mit/lib
oder/bin
? Müssten wir eine spezielle Version von habenrm
, um diese Fehler auf Systemen mit einem nicht traditionellen Dateisystemlayout zu vermeiden?Wo setzen wir die Durchsetzung dieser Verbote ein? Nur in
rm
oder geben wir dem Kernel diesen Job? Darm
nichts gelöscht wird (es werden viele Aufrufe anunlink(2)
undrmdir(2)
basierend auf den Argumentenrm
getätigt ), würde der Kernel keine Möglichkeit erkennen, zu erkennen, worauf es wirklich ankommt,/
bis der Moment gekommen ist, es tatsächlich zu löschen. Da der einzige Aufrufrmdir(2)
dazu jemals erfolgreich sein würde, wenn das Zielverzeichnis leer ist, würde das Erreichen dieses Punktes mit/
bedeuten, dass das System bereits erledigt ist.quelle