run0: systemds Ersatz für sudo
- Neues Tool in v256 enthalten (tatsächlich ist es ein Symlink auf das bestehende
systemd-run)
- Funktioniert ähnlich wie sudo, ist aber kein SUID
- Fordert den Service Manager auf, einen Befehl oder eine Shell mit der UID des Zielbenutzers zu starten
- Der Zielbefehl wird in einem isolierten Ausführungskontext aufgerufen, der frisch von PID 1 geforkt wurde, ohne den Kontext vom Client zu erben
- run0 implementiert keine eigene Konfigurationssprache, sondern verwendet polkit für die Autorisierung.
- Während der Rechteausweitung wird der Terminal-Hintergrund rötlich eingefärbt, um anzuzeigen, dass mit erhöhten Rechten gearbeitet wird. Auch im Fenstertitel wird ein roter Punkt angezeigt, der auf die Rechteausweitung hinweist.
- Unterstützt den Schalter
--property= von systemd-run, sodass sich gewünschte Service-Einstellungen für den aufgerufenen privilegierten Befehl bzw. die Sitzung festlegen lassen.
Probleme mit sudo
- sudo ist ein relativ großes SUID-Binary, also privilegierter Code, den nicht privilegierte Benutzer in ihrem eigenen Kontext aufrufen können.
- Komplexe Konfigurationssprache, ladbare Plugins (LDAP usw.), Hostnamen-Matching usw. vergrößern die Angriffsfläche.
- Dass es sich um ein SUID-Binary handelt, ist das größte Problem. Es wird von nicht privilegiertem Code aufgerufen und erbt einen Ausführungskontext, der von nicht privilegiertem Code kontrolliert wird (Umgebungsvariablen, Eigenschaften des Prozess-Schedulings, cgroup-Zuweisungen, Sicherheitskontext, übergebene File Descriptors usw.). Ein SUID-Binary muss dies äußerst sorgfältig bereinigen, was aber oft nicht ausreichend gelingt.
Sonstiges
- Mit run0 lassen sich nicht nur Shells, sondern auch andere Befehle mit Root-Rechten ausführen. Nach Programmende kehrt die Terminal-Farbe in den ursprünglichen Zustand zurück.
- Die automatische Änderung der Hintergrundfarbe kann störend sein, lässt sich aber mit dem Schalter
--background= anpassen oder deaktivieren.
- Es scheint auch möglich zu sein, sudo vollständig durch run0 zu ersetzen, aber verschiedene Distributionen könnten unterschiedliche Präferenzen haben.
- Das Plugin-Modell von sudo, etwa für LDAP-Unterstützung, bringt viele Probleme mit sich. polkit lässt sich auf eine Weise erweitern, die unter systemd sicher verwaltet wird.
- Ob ein Bash-Skript unter run0 läuft, lässt sich über die mit sudo kompatiblen Umgebungsvariablen
SUDO_xxx prüfen.
Meinung von GN⁺
- Es ist beeindruckend, dass run0 als Alternative zum häufig verwendeten sudo vorgeschlagen wird. Es scheint die Risiken von SUID zu vermeiden und zugleich die Vorteile von sudo zu übernehmen.
- Die klare visuelle Kennzeichnung einer Rechteausweitung dürfte helfen, Schäden durch Fehler zu verringern. Dass sich die Terminal-Hintergrundfarbe ändert, könnte zwar störend sein, lässt sich aber per Option anpassen und dürfte daher kein großes Problem darstellen.
- Die Rechteverwaltung über polkit ist möglicherweise weniger flexibel als sudo, könnte dafür aber einfacher sein und die Angriffsfläche verkleinern. Wichtig erscheint, Konfigurationsbeispiele für polkit gut zu dokumentieren.
- Für die Migration bestehender Skripte, die von sudo abhängen, dürfte sudo vorerst weiterhin parallel bereitgestellt werden müssen. In neuen Umgebungen wäre es aber sinnvoll, von Anfang an run0 zu verwenden.
- Langfristig könnte die Einführung von run0 der Anlass sein, SUID konsequent zu entfernen und zu einer Architektur überzugehen, in der Systemrechte zentral über Systemdienste verwaltet werden. Das erscheint aus Sicht von Sicherheit und Robustheit wünschenswert.
1 Kommentare
Hacker-News-Kommentare
sudoübernimmtrun0keinerlei Kontext vom Client und ruft den Zielbefehl in einem isoliertenexec-Kontext auf, der frisch von PID 1 geforkt wurde. Das passt nicht zu den üblichen Anwendungsfällen von Shell-Befehlen, dürfte in der Praxis Probleme verursachen und wird daher wahrscheinlich nur schwer breite Akzeptanz finden.run0breit eingesetzt würde, käme vermutlich ein Flag hinzu, das es wiesudoverhalten lässt, und die Leute würden dieses Flag dann immer verwenden. Wenn das Probleme verursacht, könnte das systemd-Projekt versuchen,sudoloszuwerden.run0verfolgt einen anderen Ansatz alssudo, indem es eine strikte IPC-Grenze zwischen verschiedenen Berechtigungsstufen setzt. Für Menschen, die systemd nutzen möchten, könnte das ein guter Weg sein.sudowird größtenteils von einer einzelnen Person gepflegt.run0ist in vielerlei Hinsicht eher mitsshals mitsudovergleichbar. Ein ähnliches Werkzeug ließe sich umsetzen, indem man per SSH eine Verbindung zulocalhostherstellt.run0gibt es Fragen zu Logging, weitergereichten Umgebungsvariablen, Signalbehandlung und möglichen Ersatzlösungen fürsudoedit.run0gibt es auch in Rust geschriebenesudo-Implementierungen, die speichersicher sind und weniger Bugs haben.