pkexec
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 24.04 Noble Numbat
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.
Links¶
Der Übersichtsartikel[1] definiert auch „privilegiertes Programm“ und „Authentifizierungsagent“.