ubuntuusers.de

PolicyKit-1

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


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:

Diese Artikelserie behandelt die Werkzeugsammlung (toolkit) polkit in der Fassung, wie sie bei Ubuntu ab der Version 24.04 eingesetzt wird. Für frühere Versionen siehe Artikel PolicyKit.

Die Werkzeugsammlung ermöglicht durch situations- und bedarfsgerechte Authentifizierung die Autorisierung eines Prozesses, Programms oder Benutzers für die Ausführung von zu schützenden Aktionen wie beispielsweise den Zusammenbau des gesamten Dateisystems ("mounten", Einbindung), den schreibenden Zugriff auf Systemdateien oder die Konfiguration des Netzwerks.

Geschichte

Das System wurde ursprünglich im Jahre 2007 unter dem damaligen Namen PolicyKit für Betriebssysteme der Unix-Familie veröffentlicht. Für die ursprüngliche Fassung gab es bis Version 0.9.0 als Zubehör einen grafischen Editor für die von PolicyKit verwalteten Berechtigungen. Im Jahre 2009 erfolgte mit Version 0.9.1 eine mit Änderung der Dateiformate verbundene Weiterentwicklung, für die der inoffizielle Name PolicyKit-1 gebräuchlich ist und im April 2012 mit Version 0.105 eine offizielle Umbenennung nach polkit.

Ubuntu benutzte vor Version 24.04 im Gegensatz zu vielen anderen Linux-Distributionen diese Version 0.105, weil ab Version 0.106 abermals ein Bruch erfolgte.

Die wesentlichen funktionalen Unterschiede zwischen der bei Ubuntu vor 24.04 und der ab 24.04 verwendeten Fassung betreffen Formulierung und Abarbeitung der Regeln für die Autorisierung:

  1. Formulierung der Regeln

    • Vor 24.04 wurde bei Ubuntu die Version 0.105 von polkit eingesetzt, bei der Textdateien im INI-Format zur Deklaration von Regeln verwendet wurden. → PolicyKit

    • Ubuntu 24.04 verwendet die Version 124 von Polkit. Die Versionen 0.106 bis 0.120 und ab 2022 spätere wie 124 verwenden für die Regeln Textdateien, die in ECMAScript (JavaScript) formulierte Funktionen enthalten. Die Textdateien sollen selbst nicht ausführbar sein, aber die Funktionen werden durch einen in polkit enthaltenen Interpreter für JavaScript ausgeführt. Nur diese Fassung wird in diesem Artikel weiter beschrieben. → Links für Diskussion zu JavaScript zur Konfiguration

  2. Abarbeitung der Regeln:

    • Vor 24.04 wurden alle existierenden Regeln abgearbeitet, d.h. ein Ergebnis konnte von einer später ausgeführten Regel wieder geändert werden.

    • Ab 24.04 werden Regeln nicht mehr aufgerufen, sobald eine Regel etwas anderes als null oder undefined zurück gibt.

Sicherheit

Achtung!

Das System polkit ist extrem leicht auszuhebeln. Dazu muss lediglich ein Angreifer mit erweiterten Rechten eine Datei mit passendem Inhalt für eine Aktion oder für eine Regel im lokalen Dateisystem ablegen. Dies kann beispielsweise durch ein kompromittiertes Softwarepaket bei einem normalen Update erfolgen.

Es kann auch unbeabsichtigt geschehen, wenn der lokale Systemverwalter mit fehlenden Kenntnissen gepaart mit Ungeschick Inhalte oder Dateirechte von Aktionen, Regeln oder der diese enthaltenden Ordner ändert.

Installation

Ab Ubuntu 24.04 besteht das System polkit aus den beiden Paketen

  • polkitd: DAEMON, Infrastruktur und die Testprogramme pkaction und pkcheck → Artikel polkitd

  • pkexec: Ein effektiv als Ersatz für sudo optional verwendbarer Wrapper. → pkexec

Beide Pakete werden mit dem Übergangspaket policykit-1 bereits bei einer Standardinstallation installiert[1]:

  • policykit-1 ("transitional package for polkitd and pkexec" aus main )

Befehl zum Installieren der Pakete:

sudo apt-get install policykit-1 

Zusätzlich zum vorstehend beschriebenen Grundsystem benötigt man noch einen Authentifizierungsagenten für die Kommunikation mit dem Benutzer. Das Grundpaket enthält selbst einen solchen textbasierten Agenten für die Kommandozeile. Viele Desktops, u.a. Gnome, Gnome Flashback und MATE, verfügen über eigene integrierte Agenten passend zur eigenen GUI. Andere auf GTK basierende Desktops wie Cinnamon, XFCE und Unity kommen mit einem installierten Paket:

  • policykit-1-gnome („Authentifizierungsagent für PolicyKit“ aus universe)

Befehl zum Installieren der Pakete:

sudo apt-get install policykit-1-gnome 

Kubuntu enthält:

  • polkit-kde-agent-1 („KDE-Dialoge für PolicyKit“ aus universe)

Befehl zum Installieren der Pakete:

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

Schließlich bringen Desktops und Applikationen fertig installierte Pakete mit Regelsätzen, beispielsweise:

  • policykit-desktop-privileges ("run common desktop actions without password" aus main)

  • cups-pk-helper („PolicyKit-Hilfsprogramm für fein abgestufte Berechtigungen in der CUPS-Konfiguration“ aus main)

Befehl zum Installieren der Pakete:

sudo apt-get install policykit-desktop-privileges cups-pk-helper 

In der Regel muss man als Nutzer einer Desktop-Installation bei Ubuntu für polkit nichts selbst installieren.

Wer ist Administrator?

Hinweis:

Bei der Beschreibung und auch beim praktischen Gebrauch von polkit wird der Begriff Administrator in zwei unterschiedlichen Bedeutungen benutzt:

  1. Es gibt unabhängig von polkit Administratoren[2] des Systems. Das sind der Systemverwalter root und alle Benutzer, die selbst in die Rolle von root wechseln dürfen; bei Ubuntu sind dies die Mitglieder der Gruppe sudo.

  2. Im System polkit wird unterschieden zwischen normalen Benutzern, Administratoren und root, jedoch muss der Personenkreis der Administratoren im Sinne von polkit nicht übereinstimmen mit den zuvor genannten Administratoren des Systems. Wer Administrator im Sinne von polkit ist, wird über spezielle Regeln für polkitd bestimmt.

Zur Unterscheidung der beiden Bedeutungen wird im Text die Schreibweise „Administrator[2]“ benutzt, wenn die erste Bedeutung gemeint ist und „Administrator (im Sinne polkit)“ für die zweite Bedeutung.

Natürlich wäre es klug, wenn in der Praxis die beiden Gruppen übereinstimmen. Bei Ubuntu ist dies standardmäßig effektiv der Fall, jedoch nicht in aller Strenge.

Arbeitsweise

Bei der Benutzung von polkit wirken mehrere Komponenten zusammen:

PolicyKit-1.png

  • Ein Programm in einem Prozess (Client) eines Benutzers ruft ein privilegiertes Programm (Beispiele) auf. Unter Client kann man sich ein grafisches Programm wie beispielsweise einen Dateimanager vorstellen oder auch einen Befehl für die Kommandozeile, konkret beispielsweise nautilus oder nmcli. In der Dokumentation von polkit wird dieser Prozess als "subject" bezeichnet.

  • Ein privilegiertes Programm (PP) ist ein solches, welches das System verändern kann und dafür auch die erforderlichen Fähigkeiten und Berechtigungen besitzt. Die Dokumentation von polkit verwendet hierfür den Begriff "mechanism". Ein PP implementiert eine oder mehrere Aktionen ("actions"), siehe Tabelle 1 für Beispiele.

  • Der DAEMON polkitd entscheidet, ob die beauftragte Aktion in der vorliegenden Situation für den Benutzer zulässig ist oder nicht. Er beauftragt ggf. den AA mit einer Authentifizierung des Benutzers und greift zurück auf Dateien:

    • Beschreibungen der Aktionen

    • Regeln für die Autorisierung

  • Der Authentifizierungsagent (AA) kommuniziert mit dem Client und fordert dessen Benutzer auf zur Authentifizierung. In der Regel erfolgt diese durch Eingabe des eigenen Passworts oder durch Eingabe des Passworts eines Administrators (im Sinne polkit), es sind aber auch andere Methoden denkbar.

  • PP, polkitd und AA kommunizieren über den System-D-Bus.

Ablauf:

  1. Der Client ruft das PP und beantragt eine Aktion.

  2. Das PP führt diese Aktion nicht sofort aus, sondern prüft zuerst, ob der Client zur angefragten Aktion berechtigt ist. Dies macht das PP nicht selber, sondern delegiert es an den polkitd.

  3. polkitd verfügt über Beschreibungen der möglichen Aktionen und ermittelt zunächst über Regeln, ob jeder die Aktion ausführen darf oder nur authentifizierte Benutzer oder gar nur Administratoren. Wenn eine Authentifizierung des Benutzers erforderlich ist, beauftragt polkitd damit den AA.

  4. AA kommuniziert mit dem Client, und

  5. der Client gibt das erfragte Passwort ein.

  6. AA meldet sein Ergebnis zurück an den polkitd.

  7. polkitd meldet ja oder nein an das PP.

  8. Das PP

    • führt die angeforderte Aktion aus oder verweigert die Ausführung

    • und meldet die Ergebnisse zurück an den aufrufenden Client.

⚓︎ Beispiele für privilegierte Programme mit Aktionen für polkit:

Tabelle 1: Wichtige Beispiele für privilegierte Programme und Aktionen
Privilegiertes Programm
(mechanism)
Aktion (AKTION-ID) Beschreibung
UDisks org.freedesktop.udisks2.filesystem-mount Ermöglicht Ein- und Ausbindung von auf Datenträgern gespeicherten Dateisystemen in die Dateihierarchie des Systems auch für normale Benutzer.
NetworkManager org.freedesktop.NetworkManager.network-control Ermöglicht Konfiguration von Netzwerkschnittstellen und -verbindungen durch normalen Benutzer.
systemd-logind org.freedesktop.login1.hibernate Regelt die Berechtigungen, das System in tiefen Schlaf (Suspend-to-Disk, Ruhezustand) zu versetzen. Dies ist bei Ubuntu normalerweise einem normalen Benutzer nicht erlaubt.
pkexec org.freedesktop.policykit.exec Ausführung jeden Befehls durch jeden Benutzer, auch als root.

Aktionen

Jede Aktion wird identifiziert über ihre ID (Beispiele siehe Tabelle 1).

Als Anwender schreibt man normalerweise Aktionen nicht selber, sondern der Programmierer des PP erstellt sowohl die Implementierung in seinem Programm als auch deren Beschreibungen für polkitd. Eine wichtige Ausnahme ist die Beschreibung von Aktionen für pkexec; die hierzu benötigten Informationen enthält der Artikel zu polkitd.

Eigene Beschreibungen von Aktionen von pkexec sind aber optional, da man pkexec auch über die die Tabelle 1 genannte Standardaktion verwenden kann.

Zur Anpassung an die eigenen Bedürfnisse kann man die Beschreibung einer Aktion durch Übersteuerung ändern, siehe Einzelheiten dazu im Artikel polkitd.

Regeln

Die Erstellung und Pflege von Regeln gehört dagegen zu den Aufgaben des Systemverwalters[2]. Bei Ubuntu bringen das Betriebssystem, einige Systemkomponenten und auch einige Applikationen jeweils eigene Regeln mit.

Jede Regel wird in Form einer Funktion in der Programmiersprache JavaScript Version 5 formuliert. Diese wird durch die Norm ECMA-262 definiert, die im Internet legal frei verfügbar ist, aber leider nur in der Fassung 5.1 und später. → ECMA-262

ECMA-262 Version 5 fehlen natürlich einige heute für JavaScript als selbstverständlich vorausgesetzte Sprachmittel, u.a. das Schlüsselwort let.

Der Autor von polkit behält sich vor, in einer zukünftigen Version von polkit die verwendete Version von JavaScript zu ändern.

Zur Erstellung von Regeln für polkitd lese Artikel polkitd.

Interne Artikel:

Externe Verweise:

Zur Verwendung von JavaScript für die Konfiguration:

Diese Revision wurde am 13. März 2025 09:19 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Sicherheit, System, Übersicht