[[Vorlage(Getestet, noble ) ]] {{{#!vorlage Wissen [:PolicyKit:] {Übersicht} [:Terminal: Ein Terminal öffnen] [:Programme_starten: Starten von Programmen] [:Rechte:] }}} 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 [:22.04:frühere Versionen] siehe Artikel [:PolicyKit/PolicyKit 0.105:PolicyKit 0.105]. [[Inhaltsverzeichnis()]] Das Programm `pkexec` für die Kommandozeile[2] ist im Sinne der Übersicht[1] ein [#Links 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. {{{#!vorlage Hinweis Das Programm `pkexec` ermöglicht mit [:mit Root-Rechten arbeiten: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: * [https://vuldb.com/de/?id.191603 CVE-2021-4034] {en} * [https://www.admin-magazine.com/News/Another-Serious-Flaw-Found-in-All-Major-Linux-Distributions Admin-Magazine am 26.01.2022] {en} {{{#!vorlage Warnung 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: [[Vorlage(Befehl, "pkexec OPTIONen PROGRAMM PARAMETER" ) ]] Die Vorgabe für PROGRAMM ist (ab 24.04, davor keine Vorgabe) die [:Shell: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: [[Vorlage(Befehl, "which PROGRAMM" ) ]] muss eine Datei anzeigen. == Optionen == Das Feld OPTIONen darf leer sein oder Angaben aus Tabelle 1 enthalten: {{{#!vorlage Tabelle Tabelle 1: Optionen für pkexec +++ Option Erklärung +++ `--version` Kann nur als alleinstehende Option verwendet werden.[[BR]] Es wird die verwendete Version des Systems polkit ausgegeben. +++ `--help` Kann nur als alleinstehende Option verwendet werden.[[BR]] Es wird eine kurze Erklärung des Aufrufs angezeigt. +++ `--disable-internal-agent` Kann nur als alleinstehende Option verwendet werden.[[BR]] Wenn man diese Option verwendet, dann wird bei zukünftigen Aufrufen von `pkexec` durch den laufenden Prozess der interne [#Links 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.[[BR]] Mit dieser Option wird das Arbeitsverzeichnis nicht gewechselt. }}} Für USERNAME muss gelten: * Der Benutzer muss existieren, dh. [[Vorlage(Befehl, "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 [[Vorlage(Befehl, "pkexec --user root printenv" ) ]] ruft den momentan für den aufrufenden Prozess registrierten [#Links 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 [#GUI 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 [[Vorlage(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: [[Vorlage(Befehl, "pkexec bash" ) ]] und ab 24.04 weiter verkürzt werden zu: [[Vorlage(Befehl, "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 [#Links 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 [#Links polkitd] auswertbare Beschreibungsdatei der Aktion erstellen und in dieser ein XML-Element * {{{}}} * und/oder {{{}}} definieren. Siehe die [#Dokumentation Dokumentation] und [#Links Links] für Einzelheiten. Details zur Arbeitsweise des Systems polkit siehe Übersicht[1]. = Dokumentation = Der Befehl hat seine eigene [:Manpage:]: [[Vorlage(Befehl, "man pkexec" ) ]] Diese Manpage kann man hübscher auch im Internet lesen: [https://www.freedesktop.org/software/polkit/docs/latest/pkexec.1.html pkexec bei freedesktop.org] {en} = Problembehebung = [[Anker(GUI) ]] == 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/PolicyKit 0.105:PolicyKit 0.105] und in der [#Dokumentation Dokumentation]. = Links = * Der Übersichtsartikel[1] definiert auch „privilegiertes Programm“ und „Authentifizierungsagent“. [[Seitenliste( *PolicyKit/p* , shorten_title=1 ) ]] * [:PolicyKit/PolicyKit 0.105:] – für Versionen von Ubuntu [:22.04: vor 24.04] #tag: System, Sicherheit, Shell