Dies basiert auf dieser Falschmeldung hier. Das beschriebene Problem besteht darin, ein Bash-Skript zu haben, das Folgendes enthält:
rm -rf {pattern1}/{pattern2}
... das, wenn beide Muster ein oder mehrere leere Elemente enthalten, auf mindestens eine Instanz von erweitert wird rm -rf /
, vorausgesetzt, der ursprüngliche Befehl wurde korrekt transkribiert und das OP führte eine Klammererweiterung statt einer Parametererweiterung durch .
In der Erklärung des OP zum Hoax heißt es:
Der Befehl ist harmlos, aber es scheint, dass fast niemand bemerkt hat.
Das Ansible-Tool verhindert diese Fehler, [...] aber niemand schien das zu wissen, sonst würden sie wissen, dass das, was ich beschrieben habe, nicht passieren könnte.
Angenommen, Sie haben ein Shell-Skript, das einen rm -rf /
Befehl entweder durch Klammer- oder Parametererweiterung ausgibt. Stimmt es, dass die Verwendung von Ansible die Ausführung dieses Befehls verhindert? Und wenn ja, wie funktioniert das?
Ist das Ausführen rm -rf /
mit Root-Rechten wirklich "harmlos", solange Sie Ansible dafür verwenden?
rm
Quelle, die ich unten analysiert habe.Antworten:
Ich habe virtuelle Maschinen, lasst uns ein paar davon in die Luft jagen! Für die Wissenschaft.
Erster Versuch:
OK, gibt
command
nur die Literale weiter und es passiert nichts.Wie wäre es mit unserer bevorzugten Sicherheitsumgehung
raw
?Nein, geh schon wieder! Wie schwer kann es möglicherweise sein, alle Ihre Dateien zu löschen?
Oh, aber was wäre, wenn sie undefinierte Variablen wären oder so?
Nun, das hat nicht funktioniert.
Was aber, wenn die Variablen definiert, aber leer sind?
Endlich ein paar Fortschritte! Aber es klagt immer noch, dass ich nicht benutzt habe
--no-preserve-root
.Natürlich warnt es mich auch, dass ich versuchen sollte, das
file
Modul und zu verwendenstate=absent
. Mal sehen, ob das funktioniert.Gute Nachrichten, Leute! Es wurde versucht , alle meine Dateien zu löschen! Aber leider ist es auf einen Fehler gestoßen. Ich überlasse es, das zu reparieren und das Spielbuch dazu zu bringen, alles zu zerstören, indem ich das
file
Modul als Übung für den Leser benutze .Führen Sie KEINE Playbooks aus, die Sie über diesen Punkt hinaus sehen! Du wirst gleich sehen warum.
Schließlich für den Coup de Grâce ...
Diese VM ist ein Ex-Papagei !
Interessanterweise hat das oben Gesagte nichts dagegen
command
unternommenraw
. Es wurde nur die gleiche Warnung zur Verwendung vonfile
mit ausgegebenstate=absent
.Ich werde sagen,
raw
dass es einen gewissen Schutz vorrm
Amok gibt , wenn Sie es nicht benutzen . Darauf sollten Sie sich jedoch nicht verlassen. Ich habe den Code von Ansible kurz durchgesehen, und als ich die Warnung gefunden habe, habe ich nichts gefunden, was die Ausführung desrm
Befehls tatsächlich unterdrücken würde .quelle
/boot
.boot
ist der erste Verzeichniseintrag in/
. Es gingen also keine Dateien verloren.rm -rf {{x}}/{{y}}
wann eingestellty
ist"*"
. Die--no-preserve-root
Überprüfung ist nützlich für das, was es ist, aber sie wird Sie nicht aus jeder möglichen Situation herausholen. es ist leicht genug, umzugehen. Aus diesem Grund wurde diese Frage nicht sofort als Scherz aufgefasst: Unter Berücksichtigung des schlechten Englisch und der offensichtlichen Syntaxfehler ist dies plausibel .raw
ein Badcron
eine andere Möglichkeit sein, ein System zu zerstören.Verhindert Ansible die Ausführung
rm -rf /
in einem Shell-Skript?Ich habe die coreutils rm-Quelle untersucht , die Folgendes enthält:
Die einzige Möglichkeit, das Root- Verzeichnis zu löschen, besteht darin, diesen Codeblock zu umgehen. Aus dieser Quelle :
Ich interpretiere dies so, dass die Funktion
get_root_dev_ino
null zurückgibt/
und somit rm ausfällt.Die einzige Möglichkeit, den ersten Codeblock (mit Rekursion) zu umgehen, ist have,
--no-preserve-root
und es wird keine Umgebungsvariable zum Überschreiben verwendet. Daher muss sie explizit an rm übergeben werden.Ich glaube , das beweist , dass es sei denn , ansible ausdrücklich geht
--no-preserve-root
aufrm
, es wird dies nicht tun.Fazit
Ich glaube nicht, dass Ansible das explizit verhindert,
rm -rf /
weil es esrm
selbst verhindert.quelle