PolicyKit-1
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 24.04 Noble Numbat
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:
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
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
oderundefined
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
undpkcheck
→ Artikel polkitdpkexec: 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:
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.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:
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:
Der Client ruft das PP und beantragt eine Aktion.
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.
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.
AA kommuniziert mit dem Client, und
der Client gibt das erfragte Passwort ein.
AA meldet sein Ergebnis zurück an den polkitd.
polkitd meldet ja oder nein an das PP.
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.
Links¶
Interne Artikel:
PolicyKit – PolKit für Versionen vor 24.04
Externe Verweise:
https://polkit.pages.freedesktop.org/polkit/polkit.8.html 🇬🇧 – Beschreibung von polkit: Manpage (
man 8 polkit
) aufgehübscht.https://ecma-international.org 🇬🇧 – Internetseite der ECMA, hier findet man insbesondere:
Admin-Rechte gezielt vergeben mit PolicyKit 🇩🇪 – LinuxUser 07/2010
Zur Verwendung von JavaScript für die Konfiguration:
Blog des Entwicklers von polkit 🇬🇧 – zur Einführung von JavaScript zur Konfiguration