[[Vorlage(Getestet, noble ) ]]
{{{#!vorlage Wissen
[:PolicyKit-1:] {Übersicht}
[:Terminal: Ein Terminal öffnen]
[:Programme_starten: Starten von Programmen]
[:mit Root-Rechten arbeiten:]
}}}

Dieser Artikel behandelt den [:Dienste:DAEMON] polkitd 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:].

[[Inhaltsverzeichnis()]]
Dieser Artikel setzt die Kenntnis des Übersichtsartikels[1] voraus, siehe dort für eine Beschreibung der Funktionsweise des Systems polkit und Erklärungen für spezifische Fachbegriffe wie "Client", "Subject", „privilegiertes Programm“ und „Authentifizierungsagent“.

Der Befehl `pkcheck` für die Kommandozeile[2] ist quasi eine Simulation von `polkitd`[1]. Er ermöglicht einen Test, ob in der im Aufruf beschriebenen Situation die Beauftragung einer Aktion im System polkit gelingen oder abgewiesen wird.

= Installation =
Das Programm ist enthalten im Paket '''polkitd''', welches zur Standardinstallation gehört. Für weitere Details lese den Übersichtsartikel[1].

= Bedienung =
Man startet[3] `pkcheck` aus einer Root-Shell[4], weil nur [:root:] oder ein Administrator (im Sinne von polkit) zu solchen Abfragen berechtigt ist.

Die Root-Shell kann man so erreichen: [[Vorlage(Befehl, "pkexec" ) ]] (Bei Versionen [:22.04:vor 24.04] muss man zusätzlich eine [:Shell:] angeben.)

Aufrufschema: [[Vorlage(Befehl, "pkcheck AKTION SUBJEKT OPTIONALE-OPTIONen" ) ]]

AKTION, SUBJEKT und OPTIONALE-OPTIONen sind sämtlich Angaben lt. Tabelle 1, konkret entspricht AKTION der Option `-a` und SUBJEKT ist entweder `-p` oder `-s`.

Das Ergebnis eines Tests wird wesentlich durch die Beschreibung der Aktion und den im System existierenden und konkret aufgerufenen Regeln bestimmt. Näheres zu Aktionen und Regeln siehe Artikel [#Links polkitd].

== Optionen ==
{{{#!vorlage Tabelle
<rowclass="titel" -3:>Tabelle 1: Optionen für pkcheck
+++
<rowclass="kopf" cellstyle="width: 25%">Option
Abk.
Beschreibung
+++
`--version`

Kann nur als alleinstehende Option verwendet werden.[[BR]] Es wird die verwendete Version des Systems polkit ausgegeben. 
+++
`--help`
`-h`
Kann nur als alleinstehende Option verwendet werden.[[BR]] Es wird eine kurze Erklärung des Aufrufs angezeigt.
+++
`--action-id AKTION-ID`
`-a`
Verpflichtende Angabe. AKTION-ID identifiziert die Aktion, welche man testen will. Beispiele siehe Übersicht[1].
+++
`--process PID`
`-p`
Optionen `-p` und `-s` schließen sich gegenseitig aus, und eine muss benutzt werden.[[BR]] Bei dieser Option wird SUBJEKT über die PID des Prozesses (= subject[1]) identifiziert.
+++
`--system-bus-name BUSNAME`
`-s`
Optionen `-p` und `-s` schließen sich gegenseitig aus, und eine muss benutzt werden.[[BR]] Bei dieser Option wird SUBJEKT über die Adresse des Prozesses (= subject[1]) am System-D-Bus identifiziert.
+++
`--allow-user-interaction`
`-u`
Optionale Angabe.[[BR]]
+++
`--enable-internal-agent`

Optionale Angabe.[[BR]]
+++
`--detail KEY VALUE`
`-d`
Optionale Angabe.[[BR]] KEY bzw. VALUE stehen für den Namen bzw. den Wert einer Variablen, die an den Authentifizierungsagenten übergeben wird und die auch in den prüfenden Regeln verfügbar ist. 
}}}

== Beispiele ==
Ein Aufruf wie z.B. [[Vorlage(Befehl, "pkcheck -p $$ -a org.freedesktop.policykit.exec -u ; echo $?" ) ]] zur Abfrage der eigenen (`$$` liefert die PID der laufenden Shell) Berechtigungen für eine bestimmte Aktion (die hier beispielhaft genannte AKTION-ID `org.freedesktop.policykit.exec` ist natürlich anzupassen) ist ziemlich sinnlos, denn entweder macht man das bereits in einer Root-Shell oder man wird für die Nutzung von `pkcheck` zur Authentifizierung aufgefordert. Da man somit immer root ist und root ja alles darf, liefert der Befehl immer Erfolg bzw. in Shell-Sprache `0`.

Sinn macht nur die Abfrage für einen anderen Prozess. Man muss also zwei Terminals[2] öffnen und
 * im ersten mit [[Vorlage(Befehl, "echo $$" ) ]] dessen PID (hier z.B. `10491`) ermitteln und
 * im zweiten Terminal den Prüfbefehl mit der PID des anderen Terminals eingeben: [[Vorlage(Befehl, "pkcheck -p 10491 -a org.freedesktop.policykit.exec -u ; echo $?" ) ]]

= Links =
[[Seitenliste( *PolicyKit-1/pk* , shorten_title=1 ) ]]

#tag: System, Sicherheit