PolicyKit

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

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

  3. Einen Editor öffnen

  4. mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Installation
    1. Ubuntu, Xubuntu, Ubuntu Budgie, Kylin
    2. Lubuntu
    3. Ubuntu Mate
    4. Kubuntu
  2. Benutzung
    1. pkexec
    2. pkaction
    3. pkla-Dateien anlegen
    4. Root-Rechte über PolicyKit
  3. Links

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 ./entsperren.png 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]:

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install policykit-1 

sudo aptitude install 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

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install policykit-1-gnome 

sudo aptitude install policykit-1-gnome 

Lubuntu

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install lxpolkit 

sudo aptitude install lxpolkit 

Wer LXQt nutzt braucht das Paket

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install lxqt-policykit 

sudo aptitude install lxqt-policykit 

Ubuntu Mate

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install mate-polkit 

sudo aptitude install mate-polkit 

Kubuntu

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install polkit-kde-agent-1 

sudo aptitude install 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 den 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 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 Cosmic haben aber PolKit 0.105 installiert.

PolKit bringt aber auch drei Kommandozeilenprogramme mit:

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 Password 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, 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