[[Vorlage(Getestet, noble) ]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Administrator:] }}} Diese Artikelserie behandelt die Werkzeugsammlung (toolkit) [#Links polkit] in der Fassung, wie sie bei Ubuntu ab der Version [:24.04:] eingesetzt wird. Für [:22.04:frühere Versionen] siehe Artikel [#Links PolicyKit 0.105]. [[Inhaltsverzeichnis]] 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 [wikipedia:Initialisierungsdatei:INI-Format] zur Deklaration von Regeln verwendet wurden. * 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 [#Links 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 Links] für Diskussion zu JavaScript zur Konfiguration 1. 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 = {{{#!vorlage Warnung 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''': [:Dienste:DAEMON], Infrastruktur und die Testprogramme `pkaction` und `pkcheck` -> Artikel [#Links polkitd] * '''pkexec''': Ein effektiv als Ersatz für [:sudo:] optional verwendbarer Wrapper. -> [#Links pkexec] Beide Pakete werden mit dem Übergangspaket '''policykit-1''' bereits bei einer Standardinstallation installiert[1]: {{{#!vorlage Paketinstallation policykit-1, "transitional package for polkitd and pkexec" aus main }}} 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], [:GNOME Flashback: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: {{{#!vorlage Paketinstallation policykit-1-gnome, „Authentifizierungsagent für PolicyKit“ aus universe }}} Kubuntu enthält: {{{#!vorlage Paketinstallation polkit-kde-agent-1, „KDE-Dialoge für PolicyKit“ aus universe }}} Schließlich bringen Desktops und Applikationen fertig installierte Pakete mit Regelsätzen, beispielsweise: {{{#!vorlage Paketinstallation 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 }}} In der Regel muss man als Nutzer einer Desktop-Installation bei Ubuntu für polkit nichts selbst installieren. = Wer ist Administrator? = {{{#!vorlage 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:]. 1. 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 Regeln] für polkitd bestimmt. Beispiele siehe Artikel: [#Links polkitd] 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: [[Bild(PolicyKit-1.png, 500, right) ]] * Ein Programm in einem Prozess (Client) eines Benutzers ruft ein privilegiertes Programm ([#Tabelle1 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 [:NetworkManager/nmcli: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 [#Tabelle1 Tabelle 1] für Beispiele. * Der [:Dienste: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 [:D-Bus:System-D-Bus]. Ablauf: 1. Der Client ruft das PP und beantragt eine Aktion. 1. 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. 1. 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. 1. AA kommuniziert mit dem Client, und 1. der Client gibt das erfragte Passwort ein. 1. AA meldet sein Ergebnis zurück an den polkitd. 1. polkitd meldet ja oder nein an das PP. 1. Das PP * führt die angeforderte Aktion aus oder verweigert die Ausführung * und meldet die Ergebnisse zurück an den aufrufenden Client. [[Anker(Tabelle1) ]] Beispiele für privilegierte Programme mit Aktionen für polkit: {{{#!vorlage Tabelle Tabelle 1: Wichtige Beispiele für privilegierte Programme und Aktionen +++ Privilegiertes Programm[[BR]](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 Schnittstellen und Verbindungen für Netzwerke 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. +++ [#Links 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 [#Tabelle1 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 [#Tabelle1 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 [#Links 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. -> [#Links 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 [#Links polkitd]. = Links = Interne Artikel: [[Seitenliste( PolicyKit/p* , shorten_title=1 ) ]] Praktisches Beispiel: [[Seitenliste( "*Ruhezustand ohne Passwort" ) ]] Für Ubuntu-Versionen vor 24.04: [[Seitenliste( *PolicyKit*0.105 , shorten_title=1 ) ]] Externe Verweise: * [wikipedia:polkit:] * [https://polkit.pages.freedesktop.org/polkit/ polkit Reference Manual] {en} * [https://github.com/polkit-org/polkit?tab=readme-ov-file GitHub von polkit] {en} * [https://polkit.pages.freedesktop.org/polkit/polkit.8.html] {en} – Beschreibung von polkit: Manpage (`man 8 polkit`) aufgehübscht. * [wikipedia:ECMAScript:] * [https://ecma-international.org] {en} – Internetseite der ECMA, hier findet man insbesondere: * [https://262.ecma-international.org/5.1 Standard ECMA-262 5.1 Edition / June 2011] {en} * [https://www.linux-community.de/ausgaben/linuxuser/2010/07/admin-rechte-gezielt-vergeben-mit-policykit/ Admin-Rechte gezielt vergeben mit PolicyKit] {de} – LinuxUser 07/2010 Zur Verwendung von JavaScript für die Konfiguration: * [https://www.christoph-wickert.de/2013/03/10/dont-use-a-programming-language-for-configuration Don’t use a programming language for configuration] {en} * [http://davidz25.blogspot.com/2012/06/authorization-rules-in-polkit.html Blog des Entwicklers von polkit] {en} – zur Einführung von JavaScript zur Konfiguration #tag: System, Sicherheit, Übersicht