BESCHREIBUNG¶
run0 kann dazu verwandt werden, temporär und
interaktiv erhöhte oder andere Privilegien zu erhalten. Es dient
einem ähnlichen Zweck wie sudo(8), arbeitet aber in einer
Reihe von zentralen Bereichen anders:
•Es werden keine Ausführungs- oder
Sicherheits-Zugangsberechtigungen von dem Aufrufenden in die aufgerufenen
Befehle übernommen, da diese in frischen, isolierten Diensten
aufgerufen werden, die vom Diensteverwalter abgetrennt werden.
•Die Authentifizierung findet mittels
Polkit[1] statt, damit wird (falls möglich) die
Authentifizierungs-Eingabeaufforderung vom Terminal getrennt.
•Es wird ein unabhängiges Pseudo-TTY
für den aufgerufenen Befehl reserviert, dessen Lebenszyklus abgetrennt
und das aus Sicherheitsgründen isoliert ist.
•Für die Implementierung wird keine
SetUID/SetGID-Dateizugriffsfunktionalität verwandt.
Insgesamt sollte dies eine sichere und robustere Alternative zum
Mechanismus sudo bereitstellen, insbesondere in
Betriebssystemumgebungen, bei denen SetUID/SetGID-Unterstützung nicht
verfügbar ist (beispielsweise durch Setzen der Variablen
NoNewPrivileges= in systemd-system.conf(5)).
Jede mittels run0 aufgerufene Sitzung durchläuft den
PAM-Stapel »systemd-run0«.
Beachten Sie, dass run0 als alternative
Aufrufmöglichkeit für systemd-run(1) implementiert ist.
Dies bedeutet, dass run0 ein symbolischer Link auf das Programm
systemd-run ist und sich als run0 verhält, wenn es
mittels des symbolischen Links aufgerufen wird und andernfalls als
systemd-run verhält.
OPTIONEN¶
Die folgenden Optionen werden verstanden:
--unit=
Verwendet diesen Unit-Namen statt eines automatisch
erstellten.
Hinzugefügt in Version 256.
--property=
Setzt eine Eigenschaft der erstellten Dienste-Unit. Diese
Option akzeptiert eine Zuweisung im gleichen Format wie der Befehl
set-property von
systemctl(1).
Hinzugefügt in Version 256.
--description=
Stellt eine Beschreibung für die aufgrufene
Dienste-Unit bereit. Falls nicht angegeben, wird der Befehl selbst als
Beschreibung verwandt. Siehe
Description= in
systemd.unit(5).
Hinzugefügt in Version 256.
--slice=
Fügt die neue Unit .service zu der angegebenen
Scheibe hinzu, anstatt user.slice zu verwenden.
Hinzugefügt in Version 256.
--slice-inherit
Fügt die neue Unit .service zu der Scheibe hinzu,
in der auch
run0 selbst aufgerufen wurde. Diese Option kann mit
--slice= kombiniert werden, dann wird die mittels
--slice=
angegebene Scheibe innerhalb der Scheibe abgelegt, in der der Befehl
run0 aufgerufen wird.
Beispiel: Wenn run0 in der Scheibe foo.slice aufgerufen
wird und das Argument --slice= bar lautet, dann wird die Unit unter
foo-bar.slice platziert.
Hinzugefügt in Version 256.
--user=, -u, --group=, -g
Schaltet auf den angegebenen Benutzer/die angegebene
Gruppe um. Die Vorgabe ist »root«, falls nicht angegeben,
außer
--area= oder
--empower werden verwandt (siehe
unten), dann ist die Vorgabe der aufrufende Benutzer.
Hinzugefügt in Version 256.
--nice=
Führt die aufgerufene Sitzung mit der angegebenen
Nice-Stufe aus.
Hinzugefügt in Version 256.
--chdir=, -D
Führt die aufgerufene Sitzung mit dem angegebenen
Arbeitsverzeichnis aus. Falls nicht angegeben ist die Vorgabe das aktuelle
Arbeitsverzeichnis beim Wechsel zum Benutzer root, oder andernfalls das
Home-Verzeichnis des Zielbenutzers.
Hinzugefügt in Version 256.
--via-shell
Ruft die Anmelde-Shell des Ziel-Benutzers auf und
führt den angegebenen Befehl (falls vorhanden) darunter aus.
Hinzugefügt in Version 258.
-i
Abkürzung für
--via-shell
--chdir='~'.
Hinzugefügt in Version 258.
--setenv=NAME[=WERT]
Führt die aufgerufene Sitzung mit der angegebenen
Umgebungsvariablen gesetzt aus. Dieser Parameter kann mehrfach verwandt
werden, um mehrere Variablen zu setzen. Fehlen »=« und
Wert, dann wird der Wert der Variablen mit dem gleichen Namen in der
aufrufenden Umgebung verwandt.
Hinzugefügt in Version 256.
--background=FARBE
Ändert die Terminal-Hintergrundfarbe zu der
angegebenen ANSI-Farbe solange die Sitzung läuft. Falls nicht
angegeben, wird der Hintergrund in einem rötlichen Ton gefärbt,
wenn als root gearbeitet wird, und in einem gelblichen Ton, wenn unter einer
anderen UID gearbeitet wird, um an geänderte Privilegien zu erinnern.
Die angegebene Farbe sollte eine ANSI-X3.64-SGR-Hintergrundfarbe sein, d.h.
Zeichenketten wie »40«, »41«, …,
»47«, »48;2;…«,
»48;5;…«. Siehe
ANSI-Maskier-Code (Wikipedia)[2]
zu Details. Setzen Sie dies auf eine leere Zeichenkette, um es zu
deaktivieren.
Beispiel: »--background=44« für einen blauen
Hintergrund.
Hinzugefügt in Version 256.
--pty, --pty-late, --pipe
Erbittet die Reservierung eines Pseudo-TTY für die
run0-Sitzung (falls
--pty oder
--pty-late) oder erbittet
die direkte Durchreiche des STDIO-Dateideskriptors des Aufrufenden (falls
--pipe).
--pty-late ähnelt stark
--pty, beginnt
aber die TTY-Verarbeitung erst nachdem der Unit-Start abgeschlossen ist.
Dadurch verbleibt die Eingabe bis zu diesem Zeitpunkt für
Passwort-/Polkit-Agenten. Falls keiner der Schalter oder sowohl
--pipe
als auch einer aus
--pty/
--pty-late angegeben sind, wird der
Modus automatisch ermittelt: falls die Standardeingabe, die Standardausgabe
und die Standardfehlerausgabe alle mit einem TTY verbunden sind, dann wird ein
Pseudo-TTY reserviert (im Modus
--pty-late, außer
--no-ask-password ist angegeben, dann wird
--pty
ausgewählt), andernfalls werden die relevanten Dateideskriptoren direkt
durchgereicht.
--pty und --pipe wurden in v257
hinzugefügt.
--pty-late wurde in v258 hinzugefügt.
--shell-prompt-prefix=ZEICHENKETTE
Setzt die Zeichenkette für die
Shell-Eingabeaufforderung. Dies steuert am Ende die Umgebungsvariable
$SHELL_PROMPT_PREFIX für das aufgerufene Programm, die
typischerweise in die Shell-Eingabeaufforderung importiert wird.
Standardmäßig – falls Emojis unterstützt werden
– wird ein Superheld (🦸) dargestellt. Die Vorgabe kann durch
Übergabe der Umgebungsvariablen
$SYSTEMD_RUN_SHELL_PROMPT_PREFIX
an
run0 auch geändert (oder ausgeschaltet) werden, siehe unten.
Setzen Sie dies auf eine leere Zeichenkette, um das Voranstellen vor die
Shell-Eingabeaufforderung zu deaktivieren.
Hinzugefügt in Version 257.
--lightweight=LOGISCH
Steuert, ob der benutzerbezogene Diensteverwalter
für den Zielbenutzer aktiviert werden soll. Standardmäßig
wird der benutzerbezogene Diensteverwalter nicht als Ergebnis des Aufrufs von
run0 aktiviert, falls der Zielbenutzer »root« oder ein
Systembenutzer ist, andernfalls wird er aktiviert.
Letztendlich steuert dies die Umgebungsvariable
$XDG_SESSION_CLASS, die pam_systemd(8)
berücksichtigt.
Hinzugefügt in Version 258.
--area=BEREICH
Steuert den »Bereich« des Zielkontos, an
den angemeldet werden soll. Bereiche sind sekundäre Home-Verzeichnisse
innerhalb des primären Home-Verzeichnisses des Zielbenutzers, d.h. die
Anmeldung am Bereich »foobar« eines Kontos äußert
sich darin, dass
$HOME bei der Anmeldung auf ~/Areas/foobar gesetzt
wird.
Falls diese Option verwandt wird, wird standardmäßig
nicht auf root gewechselt, sondern auf den aufrufenden Benutzer (aber
--user= hat Vorrang, siehe oben). Anders gesagt, die reine Angabe
eines Bereichs ohne einen Benutzer ist ein Mechanismus, um eine neue Sitzung
des aufrufenden Benutzers zu erstellen, nur mit einem anderen Bereich.
Letztendlich steuert dies die Umgebungsvariable $XDG_AREA,
die pam_systemd(8) berücksichtigt.
Weitere Details zum Konzept der Bereiche finden Sie in
pam_systemd_home(8).
Hinzugefügt in Version 258.
--empower
Falls angegeben, wird
run0 die Privilegien auf den
ausgewählten Benutzer (mittels
--user=) oder den aktuellen
Benutzer, falls keiner ausgewählt ist, erhöhen. Derzeit bedeutet
dies, dass der aufgerufene Prozess alle verfügbaren Capabilitys bekommt
und die Gruppe »empower« als ergänzende Gruppe
hinzugefügt wird (für die alle
polkit(8)-Aktionen
standardmäßig erlaubt sind). In der Zukunft könnten auch
weitere Privilegien bei der Verwendung dieser Option gegeben werden.
Beachten Sie, dass andere (nicht privilegierte) Prozesse des
ausgewählten Benutzers weitere, über den aufgerufenen Prozess
hinausgehende Privilegien haben werden. In einer Umgebung, wo unter der
Benutzerkennung schädliche Prozesse ausgeführt werden, sollten
Sie überlegen, diese Option nicht zu benutzen.
Hinzugefügt in Version 259.
--same-root-dir
Führt die Sitzung
run0 in dem gleichen
Wurzelverzeichnis aus, in der der Befehl
run0 ausgeführt wird.
Hinzugefügt in Version 259.
--machine=
Führt die Aktion in einem lokalen Container aus.
Geben Sie einen Containernamen an, zu dem verbunden werden soll.
Hinzugefügt in Version 256.
--no-ask-password
Befragt den Benutzer nicht für Authentifizierung
für privilegierte Aktionen.
-h, --help
Zeigt einen kurzen Hilfetext an und beendet das
Programm.
--version
Zeigt eine kurze Versionszeichenkette an und beendet das
Programm.
Alle Befehlszeilenargumente nach dem ersten nicht optionalen
Argument werden Teil der Befehlszeile des gestarteten Prozesses. Falls keine
Befehlszeile angegeben wurde, wird eine interaktive Shell aufgerufen. Die
aufzurufende Shell kann mittels --via-shell - bei dieser Angabe wird
die Shell des Zielbenutzers verwandt - oder --setenv=SHELL=…
gesteuert werden. Standardmäßig wird die Shell des
ursprünglichen Benutzers ausgeführt, falls lokal
gearbeitet wird, oder /bin/sh bei der Verwendung mit --machine=.
Beachten Sie dass run0 - anders als sudo - immer
Shells mit der Anmelde-Shell-Semantik staratet, unbabhängig von
-i.
UMGEBUNGSVARIABLEN¶
Wie bei systemd-run(1) wird die Sitzung die Systemumgebung
aus dem Diensteverwalter erben. Zusätzlich werden die folgenden
Variablen gesetzt:
$TERM
Vom
$TERM des Aufrufenden kopiert. Kann mit
--setenv= außer Kraft gesetzt werden.
Hinzugefügt in Version 256.
$SUDO_USER
Auf den Benutzernamen des ursprünglichen Benutzers
gesetzt.
Hinzugefügt in Version 256.
$SUDO_UID
Auf die numerische UNIX-Benutzerkennung des
ursprünglichen Benutzers gesetzt.
Hinzugefügt in Version 256.
$SUDO_GID
Auf die primäre numerische UNIX-Gruppenkennung der
ursprünglichen Sitzung gesetzt.
Hinzugefügt in Version 256.
$SHELL_PROMPT_PREFIX
Standardmäßig auf das Superheld-Emoji
gesetzt (falls unterstützt), kann aber mit der Umgebungsvariablen
$SYSTEMD_RUN_SHELL_PROMPT_PREFIX (siehe unten) oder dem Schalter
--shell-prompt-prefix= (siehe oben) außer Kraft gesetzt werden.
Hinzugefügt in Version 257.
Die folgenden Variablen können an run0
übergeben werden:
$SYSTEMD_RUN_SHELL_PROMPT_PREFIX
Falls gesetzt, setzt dies den
Standard-Shell-Eingabeaufforderung-Präfix, den
run0 für
die aufgerufene Shell setzt (das Superheld-Emoji), außer Kraft. Setzten
Sie dies auf eine leere Zeichenkette, um das Voranstellen von Text vor die
Shell-Eingabeaufforderung zu deaktivieren.
Hinzugefügt in Version 257.