Systemd-Alternative zu sudo soll Linux sicherer machen
run0 lässt reguläre Benutzer Programme mit root-Rechten ausführen. Es ähnelt sudo, nutzt aber andere Mechanismen zur Privilegienerhöhung und soll sicherer sein.
Systemd-Entwickler Lennart Poettering hat mit der neuen Version 256 von Systemd für Linux das Tool run0 inkludiert. Mit run0 können reguläre Nutzer ein Kommando mit root-Rechten ausführen. Poettering empfiehlt es als sichereren Ersatz für sudo.
Als wichtigsten Grund für seine moderne sudo-Alternative führt Poettering die Sicherheit an. sudo ist ein SUID-Binary, also ein Programm, das – aus einem Benutzerkontext heraus gestartet – mit root-Rechten läuft. Es erfragt dann das Passwort des Nutzers und prüft gegen die Regeln in der Datei /etc/sudoers, ob der Benutzer das angefragte Programm mit root-Rechten ausführen darf. Die Syntax dieser Regeln, so Poettering, sei kompliziert und fehleranfällig.
Auch OpenBSD geht eigene Wege
sudo und der aus sudo gestartete Prozess übernehmen standardmäßig einen Großteil des Kontextes des Nutzerprozesses (geöffnete Dateien, Umgebungsvariablen, security contexts, cgroup-Zuordnungen etc.). sudo ist dabei selbst dafür verantwortlich, die Umgebung so zu säubern, dass sie sicher ist. Auch das, so Poetterig, sei eine unsichere Angelegenheit. OpenBSD nutze deswegen statt sudo das eigene, weniger anfällige doas.
Tatsächlich hält Poettering allerdings generell das Starten von privilegierten Prozessen aus dem Kontext eines regulären Benutzers heraus aus Sicherheitsgründen für eine schlechte Idee. Das ganze SUID-Konzept sei nicht mehr zeitgemäß und gehöre "auf den Haufen schlechter Unix-Ideen". Tatsächlich finden sich eine Menge CVEs zu Schwachstellen in sudo oder aufgrund fehlerhaft gesetzter SUID-Bits.
sudo ohne SUID
Sein Vorschlag run0 kommt daher ohne SUID-Bit aus. Stattdessen nutzt run0 Polkit (früher PolicyKit) zum Erlangen der root-Rechte – einen etablierten Linux-Dienst zur Steuerung der Berechtigungen von Software. Der neue, privilegierte Prozess wird zudem aus dem Init-Prozess (PID 1) gestartet, sodass er keinerlei Benutzerkontext übernimmt. Tatsächlich, so Poettering, sei run0 eher vergleichbar mit einem Zugang per ssh zur lokalen Maschine als mit sudo oder su.
Hinter run0 verbirgt sich übrigens systemd-run, ein schon länger existierender Systemd-Mechanismus zum Starten von transienten Prozessen. Ab der Systemd-Version 256 verhält sich das Programm ähnlich wie sudo, wenn es über einen symbolischen Link als run0 aufgerufen – mit ein paar zusätzlichen Gimmicks: So färbt run0 das Terminal rot ein, solange darin der Prozess mit root-Rechten läuft.
(odi)