ubuntuusers.de

pkexec

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Dieser Artikel behandelt den Befehl pkexec aus der Werkzeugsammlung PolicyKit bzw. polkit in der Fassung, wie er bei Ubuntu ab Version 24.04 verwendet wird. Für frühere Versionen siehe Artikel PolicyKit.

Das Programm pkexec für die Kommandozeile[2] ist im Sinne der Übersicht[1] ein privilegiertes Programm bzw. ein mechanism. Es ist vorgesehen als Wrapper, d.h. mit Hilfe von pkexec kann der Anwender jedes Programm für das System polkit ertüchtigen, selbst wenn der Ersteller des Programms dies so nicht vorgesehen hat. Jeder Benutzer kann pkexec benutzen, um jeden beliebigen Befehl als ein anderer Benutzer, sogar als root, auszuführen; selbstverständlich werden dabei die Vorsichtsmaßnahmen von polkit wirksam; dh. in der Praxis: Man wird nötigenfalls nach einem Passwort gefragt.

Hinweis:

Das Programm pkexec ermöglicht mit Root-Rechten zu arbeiten, was mit Gefahren für das eigene System verbunden ist. Es wird dringend empfohlen, sich darüber (z.B. durch Lesen des verlinkten Artikels) zu informieren, die Sicherheitshinweise zu beachten und pkexec nur mit besonderer Vorsicht zu benutzen.

Sicherheit

Unter Ubuntu wird das Programm für den Besitzer root mit dem Sonderrecht SUID[4] installiert:

$ ls -l /usr/bin/pkexec
-rwsr-xr-x 1 root root 30952 Dez  2 12:59 /usr/bin/pkexec

Das ist nicht verwunderlich, denn es soll als privilegiertes Programm arbeiten und benötigt für seine vorgesehene Funktion dieses Sonderrecht. Anderseits ist es damit angreifbar:

Achtung!

Bei einem als sicherheitskritisch eingestuftem System sollte man deshalb das Paket pkexec deinstallieren und die damit verbundenen Funktionseinschränkungen akzeptieren.

Alternative: Den von Ubuntu bereit gestellten Sicherheitspatchen vertrauen.

Installation

Das optionale Paket pkexec gehört zur Standardinstallation. Für weitere Details lese den Übersichtsartikel[1].

Benutzung

Man startet das Programm auf einer Kommandozeile[3], indem man den Programmnamen dem eigentlich zu startenden Programm PROGRAMM und dessen PARAMETERn voranstellt:

pkexec OPTIONen PROGRAMM PARAMETER 

Die Vorgabe für PROGRAMM ist (ab 24.04, davor keine Vorgabe) die Standardshell des Benutzers, zu dem gewechselt wird. PROGRAMM muss eine über die Umgebungsvariable PATH auffindbare Datei sein; interne Kommandos der Shell funktionieren nicht, mit anderen Worten:

which PROGRAMM 

muss eine Datei anzeigen.

Optionen

Das Feld OPTIONen darf leer sein oder Angaben aus Tabelle 1 enthalten:

Tabelle 1: Optionen für pkexec
Option Erklärung
--version Kann nur als alleinstehende Option verwendet werden.
Es wird die verwendete Version des Systems polkit ausgegeben.
--help Kann nur als alleinstehende Option verwendet werden.
Es wird eine kurze Erklärung des Aufrufs angezeigt.
--disable-internal-agent Kann nur als alleinstehende Option verwendet werden.
Wenn man diese Option verwendet, dann wird bei zukünftigen Aufrufen von pkexec durch den laufenden Prozess der interne Authentifizierungsagent nicht benutzt. Normalerweise wird aber ohnehin dieser interne Agent nur dann gerufen, wenn für den Prozess kein Agent registriert wurde. Ausgenommen für Testzwecke ist daher kein Sinn dieser Option erkennbar.
--user USERNAME Angabe, als welcher Benutzer USERNAME der Befehl PROGRAMM ausgeführt werden soll; Vorgabe dafür ist root.
--keep-cwd Ohne diese Option wird das Arbeitsverzeichnis auf das Home-Verzeichnis des Benutzers USERNAME gesetzt, zu dem dem gewechselt werden soll.
Mit dieser Option wird das Arbeitsverzeichnis nicht gewechselt.

Für USERNAME muss gelten:

  • Der Benutzer muss existieren, dh.

    getent passwd USERNAME 

    muss ihn finden. Beispielausgabe:

    $ getent passwd root
    root:x:0:0:root:/root:/bin/bash
  • Der Benutzer muss ein Home-Verzeichnis (= Feld 6 der Ausgabe) besitzen.

  • Wenn man kein PROGRAMM angibt, dann muss für den Benutzer eine Standardshell (= Feld 7 der Ausgabe) definiert sein, welche Befehle ausführen kann.

Beispiele

Der Befehl

pkexec --user root printenv 

ruft den momentan für den aufrufenden Prozess registrierten Authentifizierungsagenten und dieser erfragt ein Passwort, danach wird für den Benutzer root ein Prozess gestartet, und es werden darin die Umgebungsvariablen abgefragt. Eine beispielhafte Ausgabe könnte so aussehen:

SHELL=/bin/bash
LANG=de_DE.UTF-8
LANGUAGE=de_DE:en
LC_MONETARY=de_DE.UTF-8
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
TERM=xterm-256color
COLORTERM=truecolor
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LOGNAME=root
USER=root
HOME=/root
PKEXEC_UID=1000

Das Programm pkexec führt Befehle in einer drastisch reduzierten Programmumgebung aus, insbesondere fehlen alle Umgebungsvariablen für grafische Programme (dh. diese laufen nicht mit pkexec!). Es wird aber für den anderen Benutzer das Home-Verzeichnis gesetzt und dieses als Arbeitsverzeichnis gewählt.

Der Befehl

pkexec --user root bash 

startet Bash als Root-Shell. Der Befehl kann, weil für den anderen Benutzer root als Vorgabe gilt, abgekürzt werden zu:

pkexec bash 

und ab 24.04 weiter verkürzt werden zu:

pkexec 

Funktionsweise

Das privilegierte Programm implementiert die Aktion org.freedesktop.policykit.exec. Wer die Berechtigungen zur Benutzung von pkexec ändern möchte, muss eine Regel für polkitd für diese Aktion erstellen.

Man kann auch als Administrator des Systems für das privilegierte Programm pkexec eigene Aktionen definieren. Dazu muss man eine von polkitd auswertbare Beschreibungsdatei der Aktion erstellen und in dieser ein XML-Element

  • <annotate key="org.freedesktop.policykit.exec.path">…</annotate>
  • und/oder

    <annotate key="org.freedesktop.policykit.exec.argv1">…</annotate>

definieren. Siehe die Dokumentation und Links für Einzelheiten.

Details zur Arbeitsweise des Systems polkit siehe Übersicht[1].

Dokumentation

Der Befehl hat seine eigene Manpage:

man pkexec 

Diese Manpage kann man hübscher auch im Internet lesen: pkexec bei freedesktop.org 🇬🇧

Problembehebung

⚓︎

Grafisches Programm startet nicht mit pkexec

Das ist genau so vorgesehen, damit man nicht Unheil im eigenen System anrichtet. Es ist möglich, das zu umgehen, aber man sollte es nicht tun.

Wer es dennoch tun will, findet Angaben im Artikel PolicyKit und in der Dokumentation.

  • Der Übersichtsartikel[1] definiert auch „privilegiertes Programm“ und „Authentifizierungsagent“.

Diese Revision wurde am 1. März 2025 08:24 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Sicherheit, System, Shell