GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist das schreckliche 'rm -rf /' überhaupt erlaubt?

Warum gibt es keinen solchen Schutz im rm-Befehl?

Es gibt bereits drei Schutzmaßnahmen:

  • Der -r Schalter, ohne den ein Verzeichnis nicht entfernt werden kann.
  • Die -i Schalter, der überprüft, ob Sie tatsächlich löschen möchten, was Sie löschen möchten. Aliasing rm bis rm -i schaltet diesen Schutz ein, es sei denn, Sie fügen den -f hinzu schalten, um es auszuschalten.
  • Dateibesitz, der alle Benutzer außer root verhindert vom Löschen des Root-Verzeichnisses.

Das Unix-Toolset ist wie eine Kettensäge:Es wurde entwickelt, um sehr mächtige Dinge zu tun und von Leuten geführt zu werden, die verstehen, was sie tun. Wer unachtsam vorgeht, riskiert, sich selbst zu verletzen. Das soll nicht heißen, dass Erfahrene keine Fehler machen, und offensichtlich glauben Sun und andere, dass Benutzer mit root müssen vor sich selbst geschützt werden.

Sollte dieser spezielle Fall jedoch nicht eine Ausnahme von dieser Regel sein?

Die Leute haben gefragt, warum wir den rm nicht mit einem Klingenschutz versehen können Kettensäge seit mindestens den 1980er Jahren. (Wahrscheinlich länger, aber meine Geschichte mit Unix reicht nicht weiter zurück.) Sie müssen sich weitere Fragen stellen:

  • Da wir Ausnahmen hinzufügen, was sollte sonst noch als heilig betrachtet werden? Sollten wir das rekursive Löschen von irgendetwas im Stammverzeichnis verhindern, um ebenso verheerende Fehler wie rm -rf /* zu vermeiden ? Was ist mit dem Home-Verzeichnis des Benutzers? Was ist mit /lib oder /bin ? Müssten wir eine spezielle Version von rm haben um diese Fehler auf Systemen mit einem nicht-traditionellen Dateisystem-Layout zu verhindern?

  • Wohin stellen wir die Durchsetzung dieser Verbote? Gerade in rm oder geben wir dem Kernel diese Aufgabe? Seit rm löscht eigentlich nichts (es macht viele Aufrufe an unlink(2) und rmdir(2) basierend auf den Argumenten), gäbe es für den Kernel keine Möglichkeit, diesen rm zu erkennen war wirklich scharf auf / bis der Moment kam, es tatsächlich zu löschen. Da wird nur rmdir(2) aufgerufen Das würde immer gelingen, wenn das Zielverzeichnis leer ist und dieser Punkt mit / erreicht wird würde bedeuten, dass das System bereits erledigt ist.


Es kommt auf die Verteilung an. Das ältere Linux, auf dem ich mich gerade befinde, erlaubt es (glaube ich, habe es aber nicht getestet :-) ) und gibt in man rm an :

   --no-preserve-root do not treat '/' specially (the default)

   --preserve-root
          fail to operate recursively on '/'

Bei vielen neueren Distributionen müssen Sie explizit --no-preserve-root hinzufügen um die Sicherung zu deaktivieren. Andernfalls kann es nicht ausgeführt werden.

In Bezug auf Ubuntu siehe diese Ausgabe, in der dieses Verhalten diskutiert wird.

Die Geschichte dieses Schutzes laut Wikipedia:

Sun Microsystems führte rm -rf / ein Schutz in Solaris 10, das erstmals 2005 veröffentlicht wurde. Beim Ausführen des Befehls meldet das System nun, dass das Entfernen von / ist nicht erlaubt. Kurz darauf wurde die gleiche Funktionalität in die FreeBSD-Version von rm eingeführt Dienstprogramm. GNU rm weigert sich, rm -rf / auszuführen wenn der --preserve-root Option angegeben, die seit der Veröffentlichung von Version 6.4 von GNU Core Utilities im Jahr 2006 die Standardeinstellung ist.


Linux
  1. Warum hat der Server meine IP blockiert?

  2. Wie installiere ich R 3.3.1 im eigenen Verzeichnis?

  3. Warum wurde „~“ ausgewählt, um das Home-Verzeichnis darzustellen?

  4. Linux – Warum wird das Root-Verzeichnis mit einem / -Zeichen gekennzeichnet?

  5. Warum kann ich Cd nicht in einem Bash-Skript verwenden?

So erhalten Sie die Größe eines Verzeichnisses in Linux

Verwendung von –exclude mit dem Du-Befehl?

Warum ist es Rm -rf und nicht Rmdir -rf?

Der Linux-Befehl zum Suchen des Verzeichnisses:Erklärt

warum funktioniert sftp rmdir nicht?

Die Verwendung von chown zum Ändern des Gruppeneigentümers eines Verzeichnisses ist nicht erlaubt....Warum?