Vor einigen Wochen stellten wir run0 vor, eine neue Funktion von systemd 256. run0 kann anstelle von sudo unprivilegierten Usern temporär erlauben, Programme und Befehle mit Root-Rechten auszuführen.
Der herausragende Vorteil von run0 ist, dass es im Gegensatz zu sudo kein SUID verwendet, um Root-Aktionen durchzuführen. Ein Fehler in einer SUID-befähigten Anwendung kann leicht das gesamte System gefährden. Stattdessen greift run0 auf systemd-run zurück, das jeweils eine temporäre Service-Unit in einem isolierten pseudo-TTYs für die Ausführung von Befehlen als root erstellt. Durch den Rückgriff auf systemd-run benötigt run0 keine Konfigurationsdatei. Lennart Poettering beschreibt run0 als näher am SSH-Befehl als an sudo.
Anwendung
Die Anwendung von run0 ist einfach und bietet einige interessante Parameter. Grundvoraussetzung ist systemd 256. Ist das gegeben, öffnet die Eingabe von run0 auf der Befehlszeile ein Fenster von PolKit mit der Abfrage des Root-Passworts.
Wird hier das Passwort falsch eingegeben oder der Vorgang abgebrochen, so werden wir informiert, dass die temporäre Service-Unit nicht gestartet werden konnte. Damit bleibt der User unprivilegiert.
Wie man im ersten Screenshot sehen kann, wird der Root-Kontext bei run0 rot eingefärbt. Wem das nicht gefällt, der kann eine andere Farbe oder keine Farbe erzwingen:
Die von run0 erstellten Service-Units erhalten zufällige, kryptische Bezeichnungen. Eine nützliche Funktionalität von run0 ist, dass wir diese Units beim Erstellen beliebig benennen können. Laufen beispielsweise mehrere Befehle, deren Output wir periodisch anschauen müssen oder die länger zur Ausführung benötigen, können wir ihnen zur besseren Unterscheidung einen aussagekräftigen Namen und eine eigene Farbe zuordnen.
Mit run0 --chdir /etc
lässt sich das Arbeitsverzeichnis wechseln, nice-Level ändert man mit run0 --nice
. Alle weiteren Parameter hält die Manpage bereit.