RUN0(1)

BEZEICHNUNG
run0 - Privilegien erhöhen

ÜBERSICHT

run0 [OPTIONEN…] [BEFEHL…]

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.

EXIT-STATUS

Im Erfolgsfall wird 0 zurückgeliefert. Falls run0 die Sitzung nicht starten konnte oder der angegebene Befehl fehlschlägt, wird ein von Null verschiedener Wert zurückgeliefert.

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.

SIEHE AUCH

systemd(1), systemd-run(1), sudo(8), machinectl(1), pam_systemd(8)

ANMERKUNGEN

1.  Polkit
    https://www.freedesktop.org/wiki/Software/polkit

2.  ANSI-Maskier-Code (Wikipedia)
    https://en.wikipedia.org/wiki/ANSI_escape_code#Select_Graphic_Rendition_parameters

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.