PolicyKit
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
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:
PolKit 🇬🇧 (oder in der langen Form: PolicyKit) ist ein im Hintergrund laufender Dienst, der es erlaubt, Berechtigung für die Nutzung von Systemkomponenten und Software festzulegen.
So kann mittels PolKit z.B. festgelegt werden, dass beim Aufruf eines Programms nach dem Passwort eines Nutzer mit Root-Rechten gefragt wird, auch wenn das Programm nicht mittels sudo
oder pkexec
gestartet wurde. PolKit ist auch in Werkzeuge der Systemverwaltung von GNOME integriert. Dies ist daran zu erkennen, dass bei vielen Anwendungen nicht mehr das Root-Passwort beim Start der Anwendung abgefragt wird, sondern dass die Anwendung durch einen Klick auf freigeschaltet wird bzw. der Dialog zur Eingabe des Passworts des Administrator-Kontos erscheint.
Mittels PolKit lassen sich Rechte fein verteilen. So kann man Benutzer bestimmen, denen bestimmte Aktionen erlaubt werden, für die normalerweise Root-Rechte notwendig wären, ohne sie zu Administratoren zu machen. Hintergründe und Details zur Implementierung von PolicyKit bietet die Dokumentation 🇬🇧.
Achtung!
Mit Hilfe des PolicyKit lassen sich zwar zusätzliche Rechte für bestimmte Benutzer gezielt erteilen, so dass für diese Nutzer die Benutzung des Systems „komfortabler“ wird, allerdings kann das falsche oder zu großzügige Setzen von Rechten erhebliche Sicherheitsrisiken bedeuten, da manche Nutzer unter Umständen zu weitreichende (System-) Rechte haben!
Installation¶
Das PolicyKit ist in der Standardinstallation von Ubuntu und einige Ubuntu-Derivaten bereits installiert. Ansonsten kann der Dienst über das folgende Paket installiert werden[1]:
policykit-1
Befehl zum Installieren der Pakete:
sudo apt-get install policykit-1
Oder mit apturl installieren, Link: apt://policykit-1
Damit stehen alle Funktionen von PolKit bereits, aber es fehlt die grafische Passwortabfrage für den Desktop. Diese kann, je nach Desktopumgebung, über eines der folgenden Pakete installiert werden. Je nach Ubuntuvariante ist das Paket standardmäßig bereits installiert.
Ubuntu, Xubuntu, Ubuntu Budgie, Kylin¶
policykit-1-gnome
Befehl zum Installieren der Pakete:
sudo apt-get install policykit-1-gnome
Oder mit apturl installieren, Link: apt://policykit-1-gnome
Lubuntu¶
lxpolkit (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install lxpolkit
Oder mit apturl installieren, Link: apt://lxpolkit
Wer LXQt nutzt braucht das Paket
lxqt-policykit (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install lxqt-policykit
Oder mit apturl installieren, Link: apt://lxqt-policykit
Ubuntu Mate¶
mate-polkit (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install mate-polkit
Oder mit apturl installieren, Link: apt://mate-polkit
Kubuntu¶
polkit-kde-agent-1 (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install polkit-kde-agent-1
Oder mit apturl installieren, Link: apt://polkit-kde-agent-1
Benutzung¶
PolKit läuft automatisch im Hintergrund. Bei "normaler" Nutzung" des Rechner kommt man mit PolKit nur in Berührung, wenn, wie in der Einleitung beschrieben, für eine bestimmte Aktion oder ein bestimmtes Programm mehr / höhere Rechte benötigt sind.
Polkit kennt "actions" (auf Deutsch: Aktionen), in denen definiert werden kann, wer wie welche Aktion (z.B. Aufruf eines Programms) durchführen kann / darf. Die Aktionen sind in Form von XML-Dateien im Verzeichnis /usr/share/polkit-1/actions hinterlegt. Hier sind auch eine ganze Reihe von Aktionen zu finden, welche Ubuntu standardmäßig mit bringt, eigene Aktionen können auch hier abgelegt werden. Aktion-Dateien müssen die Endung .policy haben.
Polkit kennt weiterhin "local authority" Regeln, mit denen zusätzliche Rechte für Benutzer und Gruppen gesetzt - oder weggenommen - werden können. Eigene Regeln können im Verzeichnis /etc/polkit-1/localauthority/50-local.d abgelegt werden. Die Dateiendung muss .pkla sein, der Dateiname kann im Prinzip beliebig gewählt werden, der Dateiname muss aber unter allen .pkla Dateien einmalig sein. Die .pkla Dateien werden in lexikalischer Reihenfolge abgearbeitet, d.h. später abgearbeitete Dateien können Einstellung von vorher abgearbeiteten überschreiben.
Neuere Versionen von Polkit kennt "rules" (auf Deutsch: Regeln), in denen per Javascript-Funktionen definiert werden kann, wo welche Authentifizierung benötigt wird und die die .pkla Dateien ablösen. Die Regeln liegen im Verzeichnis /usr/share/polkit-1/rules.d, allerdings werden Regel-Dateien erst ab Polkit 0.106 interpretiert, alle Ubuntu-Version bis einschließlich Impish haben aber PolKit 0.105 installiert.
PolKit bringt aber auch drei Kommandozeilenprogramme mit:
pkexec - führt ein Programm mit den Rechten eines anderen Nutzers oder mit Root-Rechten aus
pkaction - hiermit können Aktionen angezeigt werden
pkcheck - hiermit kann geprüft werden, ob ein Prozess für eine bestimmte Aktion autorisiert ist
Alle oben genannten Programme arbeiten nicht interaktiv, sondern ausschließlich mit Optionen. Eine gute Einführung bieten die Manpages zu den jeweiligen Programmen oder auch die Informationen auf der Projektseite vom PolicyKit.
pkexec¶
pkexec erfüllt grundsätzlich die gleiche Aufgabe wie sudo, d.h. es kann ein Programm mit Rechten eines anderen Nutzers - inklusive Root-Rechten - ausgeführt werden. Da pkexec die via PolKit definierten Regeln und Aktionen beachtet, ist eine wesentlich genauere bzw. fein-granularere Rechtesteuerung als mit sudo
möglich.
Die allgemeine Syntax lautet[2]:
pkexec [OPTIONEN] PROGRAMMNAME
wird keine Option angegeben, wird PROGRAMMNAME
mit Root-Rechten ausgeführt. Dazu muss man Root-Rechte auf dem System haben und das Passwort wird - genau so wie bei sudo
- abgefragt.
Mittels pkexec kann man PROGRAMMNAME
aber auch mit den Rechten eines anderen (unprivilegierten) Nutzer ausführen. So würde z.B.
pkexec -u otto PROGRAMMNAME
PROGRAMMNAME
als Nutzer otto
ausführen. Vor der Ausführung wird nach dem Password von otto
gefragt.
Wer eine Root-Shell benötigt führt folgenden Befehl aus:
pkexec bash -l
Weitere Wege zum Arbeiten mit Root-Rechten sind im Wikiartikel mit Root-Rechten arbeiten aufgeführt.
Programme mit grafischer Oberfläche ausführen¶
pkexec kann standardmäßig keine Programme mit Root-Rechten ausführen, welche eine grafische Oberfläche haben. So würde z.B. der Aufruf
pkexec gedit
zu einer Fehlermeldung führen, weil kein Zugriff auf die grafische Oberfläche besteht. Dies liegt daran, dass in der Umgebung von Root die für grafische Programme notwendigen Umgebungsvariablen DISPLAY
und XAUTHORITY
nicht verfügbar sind.
Damit grafisches Programme trotzdem mit pkexec ausgeführt werden können, gibt es zwei mögliche Wege:
Anlegen einer Aktion für das entsprechende Programm
Übergeben der Umgebungsvariablen bei jedem Aufruf von pkexec
Beide Wege machen die beiden Umgebungsvariablen für Root verfügbar.
Für den Weg über eine Aktion muss eine .policy-Datei angelegt werden, die den Zugriff erlaubt. Einige wenige Programme wie Synaptic oder GParted installieren diese Datei direkt mit.
Um z.B. eine Aktion für gedit zu definieren, muss eine Datei mit folgenden Inhalt angelegt werden[3]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <action id="com.ubuntu.pkexec.gedit"> <message>Authentication is required to run the gedit Editor</message> <icon_name>gedit</icon_name> <defaults> <allow_any>auth_admin</allow_any> <allow_inactive>auth_admin</allow_inactive> <allow_active>auth_admin</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> </action> </policyconfig> |
und im Verzeichnis /usr/share/polkit-1/actions/ unter dem Namen com.ubuntu.pkexec.gedit.policy gespeichert werden. Dazu sind Root-Rechte[4] notwendig. Nach dem Anlegen ist die Aktion direkt aktiv, das System muss nicht neu gestartet werden.
Der Aufbau der Datei ist weitestgehend logisch und selbsterklärend. Mit Dateien nach dem gleichen Schema können auch andere Programme mit grafischer Oberfläche via pkexec gestartet werden. Anzupassen sind jeweils die Zeilen 7, 8, 9 und 15. Die Zeile 16 ist die Zeile, die den Zugriff auf die grafische Oberfläche erlaubt.
Weiterführende Erklärung sind auch in der Man-Page pkexec zu finden.
Der alternative Weg mittels Übergabe der beiden Umgebungsvariablen ist wie folgt:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY PROGRAMMNAME
PROGRAMMNAME
muss durch das gewünscht Programm ersetzt werden, also z.B. gedit
. Der Aufruf funktioniert so auch, wenn für PROGRAMMNAME
keine Aktion angelegt ist.
pkaction¶
Mit Hilfe des Programms pkaction können alle hinterlegten Aktionen angezeigt werden.
Der Aufruf von
pkaction
listet einfach den Name aller Aktionen auf. Fügt man die Option --verbose
hinzu, erhält man detailliertere Informationen zu jeder Aktion.
Der Befehl
pkaction --action-id com.ubuntu.pkexec.gedit --verbose
würde nur Informationen für die Aktion mit der ID com.ubuntu.pkexec.gedit
ausgeben.
pkla-Dateien anlegen¶
Über .pkla Dateien können zusätzliche Rechte für Nutzer und Gruppen für verschiedene Aktionen vergeben werde.
Die folgende Datei würde z.B. dem Nutzer "otto" erlauben, GParted per pkexec auszuführen, wobei nur das Password von otto abgefragt wird, aber kein Root-Password benötigt wird:
1 2 3 4 5 | [extra permissions for gparted for user otto] Identity=unix-user:otto Action=com.ubuntu.pkexec.gparted ResultInactive=no ResultActive=auth_self |
Die erste Zeile ist ein (beliebiger) Kommentar, die 2. Zeile legt fest, für wenn die Regel gilt. Anstatt unix-user
kann man über unix-group:
die Regel einer Gruppe zuweisen. Mehrere Benutzer können so angegeben werden: Identity=unix-user:otto;unix-user:susi
. Die 3. Zeile legt fest, für welche Aktion die Regel gilt. Die 4. Zeile sagt, dass der Nutzer angemeldet und aktiv sein muss, die 5. Zeile legt fest, dass das Passwort des Benutzers abgefragt werden soll.
Eine weitergehende Erklärung zu pkla-Dateien liefert die Manpage zu pklocalauthority.
Root-Rechte über PolicyKit¶
Wer einen Root-Account aktiviert hat (siehe Artikel sudo/Konfiguration (Abschnitt „Root-Passwort-einrichten“)) und bei sudo mit der targetpw
Option eingestellt hat, dass das Root-Passwort statt wie sonst bei Ubuntu üblich das Benutzer-Passwort eingegeben werden muss, möchte dies auch für PolicyKit so haben. Das geht beispielsweise durch eine Konfigurationsdatei /etc/polkit-1/localauthority.conf.d/60-root.conf mit folgendem Inhalt:
[Configuration] AdminIdentities=unix-user:0
Links¶
root - Erklärung des Begriffs "root"
Projektseite 🇬🇧
Dokumentation zu Polkit-1 🇬🇧 Für Ubuntu ist 0.105 auszuwählen.
Manpages:
Polkit im Wiki von Arch Linux