Systemd Logo

Mit systemd 256 kann versehentlich das Home-Verzeichnis gelöscht werden

Mit systemd 256.1 wurde ein Bug gefixt, der unter bestimmten Umständen das Home-Verzeichnis eines Users löschen konnte. Der Bug betraf vorrangig Entwickler oder Enthusiasten, die systemd-homed und/oder systemd-tmpfiles einsetzen. Die Handhabung des Bugs gab eher in menschlicher Hinsicht zu denken als in technischer. Was war passiert?

Einige User hatten den Befehl systemd-tmpfiles --purge verwendet und dabei ihr /home ganz oder teilweise gelöscht. Selbst beim Lesen der Manpages zusystemd-tmpfiles und dessen Optionen war nicht so einfach ersichtlich, dass neben temporären Dateien auch das /home gelöscht wird. Der durchschnittliche Benutzer würde das mit systemd 256 eingeführte systemd-tmpfiles --purge vermutlich weder kennen noch nutzen. Allerdings kann der Befehl ohne weitere Warnungen insofern missverstanden werden, als dass er /var/tmp aufräumen würde.

Was macht systemd-tmpfiles?

Um zu verstehen, was hier passiert und warum ein /home von systemd-tmpfiles anstatt wie üblich als Teil der Dateisystemeinrichtung während der Partitionierungs- und Einbindungsschritte des Installationsprozesses erstellt wird, kann Folgendes helfen: Für Automatisierung, Container, VMs, Testumgebungen usw. erlaubt systemdtmpfiles, auf deklarative Art zu beschreiben, welche Dateien und Verzeichnisse auf einem System existieren sollen und welche Attribute sie haben sollen.

Die Manpage zu tmpfiles.d ist länger als mein arm und fängt so an

Im richtigen Umfeld sinnvoll

In /usr/lib/tmpfiles.d liegt unter vielen anderen die Datei /home.conf, die systemd hilft, ein ganzes System mit nur einer /usr/-Partition und einer leeren Root-Partition (oder tmpfs) einzurichten. Sie wird verwendet, um /home/ zu einem Subvolume anstelle eines normalen Verzeichnisses bei Btrfs im Rahmen der Nutzung von systemd-homed zu machen. Für Entwickler und Freunde von statelss systems ist das eine sinnvolle Funktion. Ich habe kurz nach der Einführung 2020 einen Artikel über systemd-homed verfasst.

Liest man aber die Manpage, so kommt man zu dem Schluss, dass nur Dateien gelöscht werden, die von systemd-tmpfiles erstellt wurden. Laut dem Bugreport wurde aber versucht, ein normales Home-Verzeichnis zu entfernen. Der User, dessen Bugreport dies beschrieb, wurde von Entwickler Luca Boccassi zunächst arrogant und rüde abgekanzelt:

So an option that is literally documented as saying “all files and directories created by a tmpfiles.d/ entry will be deleted”, that you knew nothing about, sounded like a “good idea”? Did you even go and look what tmpfiles.d entries you had beforehand?

Maybe don’t just run random commands that you know nothing about, while ignoring what the documentation tells you? Just a thought eh

https://github.com/systemd/systemd/issues/33349#issuecomment-2168794281

Bugfix in 256.1

Lennart Poettering war allerdings der Meinung, dass dies ein Fehler sei, der behoben werden müsse. Mit systemd 256.1 müssen zum Befehl systemd-tmpfiles --purge ein oder mehrere Verzeichnisse angegeben werden. Ohne dem macht der Befehl nichts mehr. Auch die Dokumentation wurde entsprechend angepasst. Soweit alles gut. Bleibt nur die Frage, warum es immer wieder Entwickler gibt, die glauben, Sie seien besser als die Anwender, die ihre Software benutzen.

So ganz habe ich die Zusammenhänge in der gegebenen Zeit, die ich zur Recherche hatte, noch nicht begriffen. Wie kommt systemd dazu, ein /home löschen zu wollen, das nicht von systemd-tmpfiles erstellt wurde. In der Manpage steht jedenfalls: If this option is passed, all files and directories created by a tmpfiles.d/ entry will be deleted. Vielleicht kann mich ja jemand diesbezüglich aufklären.

Teilt den Beitrag, falls ihr mögt

Abonnieren
Benachrichtige mich bei
17 Kommentare
Most Voted
Newest Oldest
Inline Feedbacks
View all comments