Warum ist dd nicht vor dem Schreiben auf die aktive Festplatte geschützt?

Warum ist dd nicht vor dem Schreiben auf die aktive Festplatte geschützt?

Ich verwende dd sehr oft. Ich lebe in ständiger Angst, eines Tages einen Fehler zu machen, zum Beispiel auf sda (Computerfestplatte) statt auf sdb (USB-Festplatte) zu schreiben und dann alles zu löschen, was ich auf meinem Computer habe.

Ich weiß, dass dd ein Tool für Power-User sein soll, aber trotzdem ist es für mich unverständlich, dass man durch Drücken einer falschen Taste im Grunde seinen ganzen Computer ruinieren kann.

Warum gibt es keine Sicherheitsmaßnahme, die verhindert, dass dd auf die Festplatte schreibt, von der es den Befehl erhält? Ich bin mir nicht sicher, wie jemand das absichtlich tun würde.

Bitte beachten Sie, dass ich es nicht selbst ausprobiert habe, sondern nur darüber gelesen habe. Ich könnte mich also irren.

Antwort1

Ich weiß, dass dd ein Tool für Power-User sein soll, aber trotzdem ist es für mich unverständlich, dass man durch Drücken einer falschen Taste im Grunde seinen ganzen Computer ruinieren kann.

Überlegen Sie, welche Arten von Elektrowerkzeugen im Hoch- und Tiefbau verwendet werden und was Sie alles vermasseln können, wenn Sie nur eine Kleinigkeit falsch machen. Könnte man diese Dinge besser verhindern? Wahrscheinlich, aber der Gegenwert liegt darin, inwieweit das Werkzeug weniger nützlich und/oder unhandlicher wird, wenn man Unfälle besser vermeidbar macht.

Autofahren ist eine ähnliche Analogie mit potenziell viel schlimmeren Folgen, und dennoch gelingt es den Menschen, dies ständig zu tun (und zwar viel zu oft). Natürlich wäre es sicherer, wenn sie es langsamer täten, aber wir müssen gemeinsam entscheiden, welche Risiken es wert sind, eingegangen zu werden. Ebenso wäre der Computer sicherer, wenn es ddihn nicht gäbe, aber da sein Nutzen die Risiken überwiegt, existiert er.

Warum gibt es keine Sicherheitsmaßnahme, die dd daran hindert, auf die Festplatte zu schreiben, von der es den Befehl erhält?

Tatsächlich ist das so, da standardmäßig Gerätedateien (wie ) Superuser-Berechtigungen zum Schreiben benötigen. Wenn Sie also nicht als oder über /dev/sda1arbeiten , können Sie Ihren gesamten Computer nicht mit einem einzigen Knopfdruck mithilfe von auf den Kopf stellen .rootsudodd

Das bringt uns zuwarum es alle Einschränkungen hinsichtlich der Ausführung von Befehlen mit Superuser-Rechten gibt. Diese Warnungen sind sehr verbreitet und ich denke, es wäre schwierig, ein *nix-System zu betreiben, ohne sie gesehen zu haben, so wie man in eine Baustelle kommt, ohne dieSCHUTZHELM-BEREICHZeichen.

Wenn Sie keinen Grund haben, sich in einer Baustelle aufzuhalten, verlassen Sie diese. Wenn doch, treffen Sie entsprechende Sicherheitsvorkehrungen. Die Welt kann ein gefährlicher Ort sein, und manche Orte sind gefährlicher als andere. Handeln Sie nicht ohne nachzudenken. Ein Maß an Sicherheit, das garantiert, dass nichts Schlimmes passieren kann – sodass Sie sich keine Gedanken machen müssen – bedeutet, dass Sie auch nicht viel tun können. Manchmal ist das wünschenswert, manchmal nicht.

Antwort2

Es ist vernünftig zu fragen, warum der Befehl dd nicht zuerst prüft, ob sein Ziel ein gemountetes Dateisystem enthält, und dann zur Bestätigung auffordert oder ein spezielles Flag verlangt. Eine einfache Antwort ist, dass es alle Skripte beschädigen würde, die erwarten, dd auf diese Weise verwenden zu können und die nicht für die Verarbeitung interaktiver Eingaben ausgelegt sind. Beispielsweise kann es sinnvoll sein, die Partitionstabelle eines Raw-Geräts zu ändern, während eine Partition desselben Geräts gemountet ist; Sie müssen nur darauf achten, nur den ersten Sektor zu ändern.

Es gibt eine riesige Anzahl von Linux-Systemen im Umlauf und es ist unmöglich zu wissen, welche verrückten Setups sich die Leute ausgedacht haben. Daher ist es sehr unwahrscheinlich, dass die Betreuer von dd eine abwärtsinkompatible Änderung vornehmen, die in einer unbekannten Anzahl von Umgebungen Probleme verursachen würde.

Antwort3

Um „einen kleinen Schritt hinzuzufügen, etwa eine Option oder eine Bestätigungsnachricht“, können Sie tun, was artm in den Kommentaren zu Ihrer Frage vorgeschlagen hat: Verwenden Sie ein Wrapper-Skript.

Mit anderen Worten: Anstatt sich direkt mit den etwas entmutigenden Befehlszeilenargumenten von dd zu befassen, erstellen Sie ein Skript in Bash (oder Python usw.), das die dd-Argumente verwendet, an denen Sie interessiert sind, und dabei eine Optionssyntax verwendet, mit der Sie besser vertraut sind. Das Skript prüft, ob die Argumente sinnvoll sind, und druckt die Argumente (und möglicherweise die endgültige dd-Befehlszeile) aus, damit Sie überprüfen können, ob alles so ist, wie es sein sollte. Und dann fragt Sie das Skript „OK, um fortzufahren? [j/n]“, also müssen Sie diese Eingabe machen, ywenn das Skript die dd-Befehlszeile, die es für Sie erstellt hat, tatsächlich ausführen soll.

Wenn Sie also nicht möchten, dass das Skript in /dev/sda oder dessen Partitionen schreibt, können Sie dies unmöglich machen. Um zu überprüfen, ob Sie tatsächlich die gewünschten Eingabe- und Ausgabegeräte ausgewählt haben, kann das Skript den Befehl blkid verwenden, um die UUID und die Datenträgerbezeichnung für diese Geräte abzurufen. Usw.

verwandte Informationen