Login
Login-Name Passwort


 
Newsletter
Werbung

Di, 4. Juli 2017, 08:56

Software::Systemverwaltung

Diskussion um fehlerhafte Behandlung von Benutzernamen in Systemd

Wenn eine Konfigurationsdatei von Systemd einen Benutzernamen enthält, der nicht den Syntaxregeln von Systemd entspricht, wird die entsprechende Zeile ignoriert. Das kann dazu führen, dass ein Dienst als Root statt als spezieller Benutzer gestartet wird. Die Ansichten, ob das eine Sicherheitslücke darstellt, gehen allerdings auseinander.

Larry Ewing

Eine neue Diskussion ist um Systemd ausgebrochen, nachdem ein Anwender einen Fehler meldete. Der Anwender hatte ein Benutzerkonto mit dem Namen »0day« angelegt und dazu eine Unit-Datei mit einem Dienst definiert, der mit den Rechten dieses Benutzers laufen sollte. Das Ergebnis war, dass der Dienst mit Root-Rechten gestartet wurde.

Lennart Poettering kommentierte den Eintrag als erstes und behauptete, dass »0day« kein gültiger Benutzername sei, da er mit einer Ziffer beginnt. Dies sei deshalb so, um Benutzernamen von numerischen Benutzer-IDs unterscheiden zu können. Da Systemd den Benutzernamen als ungültig erkennt, verwendet es ihn nicht. Für Poettering liegt kein Fehler in Systemd vor und es gebe dementsprechend nichts zu beheben.

Es hat allerdings den Anschein, als ob Poettering hier gleich mehrfach irrte. Zum einen sind Benutzernamen, die mit Ziffern beginnen, sehr wohl gültig, und sie können in den meisten Linux-Distributionen mit dem Programm useradd erzeugt werden. Dessen Manpage besagt, dass Benutzernamen nicht mit Plus, Minus oder Tilde beginnen dürfen. Komplett ausgeschlossen sind nur die Zeichen Doppelpunkt, Komma sowie Leerzeichen und andere Whitespace-Zeichen. Auch die Verwendung des Schrägstriches ist nicht ratsam, da sie mit der Definition des Home-Verzeichnisses des Benutzer kollidiert.

Empfohlen wird allerdings eine eingeschränktere Verwendung der Zeichen in Benutzernamen: Es sollten nur Kleinbuchstaben verwendet werden, und das erste Zeichen sollte ein Unterstrich oder ein Buchstabe sein, die weiteren Zeichen dürfen auch Buchstaben, Ziffern, Unterstriche und Bindestriche umfassen. Das letzte Zeichen darf ein Dollar-Zeichen sein. POSIX verzichtet im Gegensatz dazu auf Dollar-Zeichen und lässt nur drei Sonderzeichen zu: Unterstrich, Bindestrich und Punkt. Dafür erlaubt es auch Großbuchstaben. Der Bindestrich darf nicht das erste Zeichen eines Benutzernamens sein.

Poettering erklärte in einem weiteren Beitrag das Verhalten von Systemd. Unit-Dateien werden auf syntaktische Korrektheit geprüft. Fehlerhafte Zeilen werden ignoriert und erzeugen einen Log-Eintrag; der entsprechende Dienst wird aber aus Kompatibilitätsgründen dennoch gestartet. Dies führt aber im Falle der User=-Zeile dazu, dass der spezifizierte Dienst nicht mit den Rechten des vorgesehenen Benutzers läuft, sondern als Root. Anders verhält es sich, wenn der Benutzername aus Sicht von Systemd gültig ist, aber auf dem System nicht existiert. Dann scheitert der Start des Dienstes. Benutzernamen, die mit Ziffern beginnen, werden von Systemd aus Portabilitätsgründen nicht akzeptiert.

Nach Meinung vieler Kommentatoren, beispielsweise dieses, sollte Systemd korrigiert werden und Benutzernamen, die mit Ziffern beginnen, akzeptieren. Das Verhalten, bei einem ungültigen Benutzernamen einen Dienst als Root zu starten, wird von manchen als Sicherheitslücke gesehen. Allerdings wäre eine weitere Sicherheitslücke in dem gestarteten Dienst nötig, um daraus ein Problem werden zu lassen. Zudem muss betont werden, dass es sich dabei um System-Benutzer, also vom Systemverwalter angelegte Konten, handelt. Auch die Systemd-Unit-Dateien werden ausschließlich vom Systemverwalter angelegt. Somit liegt die Verantwortung sowie die Kontrolle, ob der Dienst tatsächlich wie vorgesehen gestartet wird, im Wesentlichen auch bei diesem.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung