Linux: "rm -rf /" soll keine UEFI-Systeme mehr kaputt machen
Manche PCs und Notebooks funktionieren nicht mehr, nachdem man alle Dateien einer Linux-Installation gelöscht hat. Ein Schutzmechanismus im Linux-Kernel soll vor solchen Hardware-Defekten bewahren.
Unter Linux kann ein Löschen aller Dateien mit "rm -rf /" zu einem Hardware-Defekt führen. Auf manchen PCs und Notebooks entfernt das nämlich EFI-Variablen, die zum Systemstart benötigt werden. Die Systeme kommen daher nicht mehr in Gang und werden zum Reparaturfall.
Unklar ist, wie viele Systeme betroffen sind. Der Mitte März erwartete Linux-Kernel 4.5 wird einen Schutzmechanismus enthalten, um Anwender vor dem Problem zu bewahren. Trotzdem ist nach wie vor Vorsicht beim Löschen angesagt.
Hintergründe
Laut Berichten und Diskussionen bei Hacker News oder Reddit mussten einige Anwender ihre Hardware zur Reparatur schicken, nachdem diese alle in ihrem Linux-System erreichbaren Dateien per rm -rf /
gelöscht hatten. Dieser Befehl entfernt nicht nur die Dateien der Linux-Installation, sondern versucht auch alles in Verzeichnissen wie /proc/
und /sys/
zu löschen; über die Dateien in den dort eingehängten virtuellen Dateisystemen lassen sich viele Eigenschaften des gerade laufenden Kernels auslesen und verändern.
Der Löschbefehl dringt daher auch zu /sys/firmware/efi/efivars/
vor. Dort hängen per EFI oder UEFI gestartete Linux-Distributionen das (U)EFI Variable Filesystem (Efivarfs) ein. Über dieses virtuelle Dateisystem des Kernels lassen sich EFI-Variablen der Firmware auslesen, modifizieren oder anlegen, als seien es Dateien in einem normalen Dateisystem.
Linux-Distributionen nutzen diese Funktion beispielsweise während der Installation: Das Werkzeug efibootmgr
erstellt über das Efivarfs eine UEFI-Variable mit dem UEFI-Boot-Eintrag, über den das installierte System später startet. Die UEFI-Variable hinterlegt die Firmware im nicht-flüchtigen Speicher des Mainboards (auch NVRAM genannt), in dem es typischerweise auch die im BIOS-Setup vorgenommenen Einstellungen speichert.
Ein Löschen aller Dateien in /sys/firmware/efi/efivars/
löscht daher alle UEFI-Variablen – außer den UEFI-Boot-Einträgen also auch jene, die schon vor der Installation eines Betriebssystems vom Hardware-Hersteller hinterlegt wurden. Auf diese ist die Firmware mancher Systeme bei der Hardware-Initialisierung angewiesen, daher bekommt sie das System nicht mehr in Gang; ein Zurücksetzen der BIOS-Einstellungen etwa per Jumper scheint das Problem nicht immer korrigieren zu können.
Hier haben offenbar die Programmierer der jeweiligen Firmware geschlampt, denn die hätten ihre Code gegen so einen Fall absichern müssen. UEFI-Variablen lassen sich mit ausreichend Rechten auch unter anderen Betriebssystemen löschen; bei Windows soll das mit 20 Codezeilen möglich sein, erklärte der Linux-Entwickler Matthew Garrett in einem Tweet.
Schutz
Nach Bekanntwerden des Problems wurde überlegt, Efivarfs schreibgeschützt einzuhängen, um die Gefahr auszuräumen. Das würde aber legitime Einsatzzwecke erschweren oder verhindern; darunter etwa Änderungen an den Boot-Parametern oder die Nutzung von Efivarfs als Fehlerspeicher bei Systemabstürzen. Die Kernel-Entwickler haben jetzt eine andere Lösung implementiert und in die fünfte Vorabversion von Linux 4.5 integriert, die am Sonntagmorgen erschienen ist.
Durch sie setzt der Kernel die Auszeichnung "Immutable" bei allen Dateien, die nicht auf einer Whitelist stehen. Bei einem rm -rf /sys/firmware/efi/efivars/
werden die Dateien daher nicht entfernt; falls man sie doch entfernen möchte, kann man die Auszeichnung mit chattr -i /sys/firmware/efi/efivars/foobar
entfernen. Auf der Whitelist stehen Dateien mit UEFI-Variablen, bei denen ein Modifizieren vorgesehen ist; darunter viele der UEFI-Variablen zum Anpassen der Boot-Konfiguration (1, 2, 3).
Schutz für bestehende Linux-Installationen?
Anders als etwa Korrekturen für Sicherheitslücken tragen die erwähnten Kernel-Änderungen keine Auszeichnung, um eine baldige Integration in ältere Versionsreihen des Kernels anzuschieben. Womöglich wollen die Entwickler erst abwarten, ob ihre Änderungen nicht irgendwelche Nebenwirkungen haben, bevor sie diese zur Aufnahme in Stable- und Longterm-Kernel einreichen. Spätestens dann dürften auch die Linux-Distributionen überlegen, die Änderungen in ihre Kernel-Update zu integrieren.
Den Befehl rm -rf /
sollte man aber auch in Zukunft meiden, denn auch nach den jetzt vorgenommenen Änderungen entfernt der Befehl noch die Boot-Einträge aller auf dem System installierten Betriebssysteme – also auch den eines parallel installierten Windows.
Und nicht nur das, denn der Befehl löscht womöglich auch alle UEFI-Boot-Loader, die auf der unter /boot/EFI/
eingehängten EFI System Partition (ESP) liegen. Eine zum Abschuss freigegebene Linux-Installation sollten Sie daher am besten mit Hilfe eines anderen Betriebssystems entfernen; etwa einem Live-Linux, mit dem Sie die Root-Partition des installierten Linux löschen oder formatieren.
(thl)