Kategorien
Allgemein

Das Linux PolicyKit verstehen

Spä­tes­tens wenn man bemerkt, dass alt­ge­dien­te Tools wie gksu­do oder kde­su­do auf den neu­es­ten Sys­tem­ver­sio­nen nicht mehr funk­tio­nie­ren, muss man sich mit dem Poli­cy­Kit oder kurz Pol­Kit aus­ein­an­der­set­zen, wenn man wei­ter­hin Pro­gram­me mit root-Rech­ten vom Desk­top eines Users star­ten kön­nen will.

Debi­an und davon abge­lei­te­te Sys­te­me wie Ubun­tu haben gksu­do schon län­ge­re Zeit nicht mehr instal­liert. Seit Debi­an 10 gibt es in den debi­an sta­ble- und tes­ting-Repo­si­to­ries nicht mal mehr die ent­spre­chen­den Pake­te zum Nach­in­stal­lie­ren.

Unter Debi­an 10 sind im Cin­na­mon-Desk­top eines unpre­vi­le­gier­ten Nut­zers zwar die Sys­tem­ver­wal­tungs­werk­zeu­ge wie Syn­ap­tic oder ver­schie­de­ne cin­na­mon-set­tings-… Ein­trä­ge im Menü vor­han­den, aber sie funk­tio­nie­ren nicht mehr (und zwar ohne jeg­li­che Feh­ler­mel­dung).

Um sie wie­der zum Lau­fen zu brin­gen, müs­sen wir am Pol­Kit schrau­ben

Synaptic unter Debian 10 (Buster) zum Laufen bringen

Debi­an nutzt, anders als vie­le ande­ren Linux-Dis­tri­bu­tio­nen, auch bei Bus­ter noch das „alte” Poli­cy­Kit (Ver­si­on 0.105). Die­se Ver­si­on arbei­tet noch mit loca­laut­ho­ri­ty und kennt kei­ne Rules.

Um Syn­ap­tic wie­der benutz­bar zu machen, ohne sich extra als root anmel­den zu müs­sen, kann man die zuge­hö­ri­ge poli­cy-Datei ändern:

$ sudo vi /usr/share/polkit-1/actions/com.ubuntu.pkexec.synaptic.policy

...
<defaults>
  <allow_any>auth_admin</allow_any>
  <allow_inactive>auth_admin</allow_inactive>
  <allow_active>yes</allow_active>
</defaults>
...

Das Star­ten mit pkexec funk­tio­niert nicht mit dem Ein­tra­gen des Befehls direkt im Star­ter, son­dern nur über ein Script im Ord­ner der aus­führ­ba­ren Datei:

$ sudo vi /usr/sbin/synaptic-pkexec

/usr/bin/pkexec "/usr/sbin/synaptic" "$@"

$ sudo chmod o+x /usr/sbin/synaptic-pkexec

In der Desk­top-Datei wird dann als Befehl /usr/sbin/synaptic-pkexec anstel­le /usr/sbin/synaptic ein­ge­tra­gen.

Jetzt kann man zwar Syn­ap­tic wie­der über einen Desk­top-Star­ter oder das Menü benut­zen, aber das darf jetzt jeder belie­bi­ge ange­mel­de­te Nut­zer. Will man das auf einen ein­zel­nen Nut­zer oder eine Grup­pe beschrän­ken, muss man etwas tie­fer in Pol­Kit ein­stei­gen.

Aufbau der Policy-Dateien

Die Poli­ci­es sind in XML-Datei­en mit der Endung .policy unter /usr/share/polkit-1/actions/ defi­niert. Das Pol­Kit-Paket bringt schon eine Rei­he vor­de­fi­nier­ter Poli­ci­es mit, etwa für die ver­schie­de­nen Sys­tem­ein­stel­lungs­dia­lo­ge. Auch ande­re instal­lier­te Pake­te kön­nen eige­ne Poli­ci­es mit­brin­gen.

Einen Über­blick über die instal­lier­ten Poli­ci­es bie­tet das pkaction Kom­man­do:

$ pkaction
com.hp.hplip.installplugin
com.ubuntu.pkexec.gdebi.gtk
com.ubuntu.pkexec.synaptic
...

Die Details der Poli­ci­es für Syn­ap­tic kann man sich eben­so mit pkac­tion unter Anga­be der Action-ID mit dem --verbose Schal­ter anse­hen:

$ pkaction --action-id com.ubuntu.pkexec.synaptic --verbose
 com.ubuntu.pkexec.synaptic:
   description:       
   message:           Authentication is required to run the Synaptic Package Manager
   vendor:            
   vendor_url:        
   icon:              synaptic
   implicit any:      auth_admin
   implicit inactive: auth_admin
   implicit active:   yes
   annotation:        org.freedesktop.policykit.exec.path -> /usr/sbin/synaptic
   annotation:        org.freedesktop.policykit.exec.allow_gui -> true
$

Dabei sind die Ein­stel­lun­gen schon ent­spre­chend der Umge­bung inter­pre­tiert, z.B. anhand der ein­ge­stell­ten Spra­che. Die XML-Datei /usr/share/polkit-1/actions/com.ubuntu.pkexec.synaptic.policy ent­hält die voll­stän­di­gen Infor­ma­tio­nen:

<?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.synaptic">
    <message>Authentication is required to run the Synaptic Package Manager</message>
    <message xml:lang="de">Um die Synaptic-Paketverwaltung zu benutzen, ist eine Legitimation notwendig</message>
    <icon_name>synaptic</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/sbin/synaptic</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>

</policyconfig>

Nach dem Hea­der star­tet die eigent­li­che Defi­ni­ti­on mit

<poli­cy­con­fig>
<action id=„com.ubuntu.pkexec.synaptic”>

Damit wird die Action-ID fest­ge­legt, die wir spä­ter noch an ver­schie­de­nen Stel­len brau­chen. Das <message> Tag defi­niert einen Text, der beim Anfor­dern des Pass­worts ange­zeigt wird. Mit xml:lang=... kann man ihn für ver­schie­de­ne Spra­chen defi­nie­ren.

Die Funk­ti­on des optio­na­len icon_name ist etwas unklar beschrie­ben; es soll den Erzeu­ger der Poli­cy reprä­sen­tie­ren. Es hat aber schein­bar weder mit dem Menü- noch mit dem Desk­top-Icon zu tun.

Wich­ti­ger sind die <defaults>. Hier wer­den die Rech­te oder deren Ver­wei­ge­rung ein­ge­tra­gen. Die drei Abschnit­te allow_any, allow_inactive und allow_active bezeich­nen die ver­schie­de­nen Arten von User Ses­si­ons. Inak­ti­ve Ses­si­ons sind Sit­zun­gen, die ent­fernt über z.B. ssh oder vnc geöff­net wur­den, wäh­rend akti­ve Ses­si­ons direkt ange­mel­de­te Benut­zer sind, etwa an einem TTY oder über X-11.

Für jede Ses­si­on-Art kön­nen fol­gen­de Rech­te ver­ge­ben wer­den:

noDer Nut­zer ist für die Akti­on nicht auto­ri­siert.
yesDer Nut­zer ist ohne wei­te­re Anmel­dung
für die Akti­on auto­ri­siert
auth_selfDer Nut­zer muss sich für die Akti­on selbst
anmel­den, muss aber kein admi­nis­tra­ti­ver
Nut­zer sein
auth_adminDer Nut­zer muss sich für die Akti­on
als Admi­nis­tra­tor anmel­den
auth_self_keepWie auth_self, aber die Anmel­dung
gilt wie bei sudo eini­ge Minu­ten
auth_admin_keepWie auth_admin, aber die Anmel­dung
gilt wie bei sudo eini­ge Minu­ten

Die­se Stan­dard-Rech­te gel­ten für alle Nut­zer, kön­nen aber spä­ter durch Regeln über­schrie­ben wer­den.

Lokale Policies

In der bei Debi­an ver­wen­de­ten Ver­si­on wer­den Aus­nah­men von den Stan­dard-Rech­ten in policy kit local authority (.pkla) Datei­en unter /etc/polkit-1/localauthority/ defi­niert. Unter die­sem Ver­zeich­nis ist eine Hier­ar­chie defi­niert, in der Datei­en mit Berech­ti­gun­gen auf der Ebe­ne von Betriebs­sys­tem (10-vendor.d, 90-mandatory.d), Orga­ni­sa­ti­on (20-org.d), Ort (30-site.d) und ein­zel­ner Rech­ner (50-local.d) erzeugt wer­den kön­nen.

In der .pkla Datei wird die Akti­on (Action), der Nut­zer oder die Nut­zer­grup­pe (Identy) und das Resul­tat des Berech­ti­gungs-Checks (ResultActive, ResultInactive, ResultAny) ein­ge­tra­gen. Der Datei­na­me muss ein­deu­tig sein. Die .pkla-Datei­en wer­den in alpha­be­ti­scher Rei­hen­fol­ge der Ver­zeich­nis- und Datei­na­men abge­ar­bei­tet. Auch nach einem Tref­fer wer­den die rest­li­chen Datei­en wei­ter aus­ge­führt, so dass man auch nega­ti­ve Auto­ri­sie­run­gen defi­nie­ren kann.

Für unser Syn­ap­tic-Bei­spiel sähe die Datei /etc/polkit-1/localauthority/50-local.d/synaptic-sudo.pkla dann so aus:

[Allow sudo members to use synaptic]
Identity=unix-group:sudo
Action=com.ubuntu.pkexec.synaptic
ResultActive=yes

Statt ResultActive für lokal ange­mel­de­te Nut­zer kann auch ResultInactive für remo­te Ses­si­ons oder ResultAny für jeg­li­che Ses­si­ons ein­ge­tra­gen wer­den. Der Wert ent­spricht denen der Stan­dard-Berech­ti­gun­gen (yes, no, auth_self, auth_self_keep, auth_admin oder auth_admin_keep).

Die Identity beginnt mit unix-user:, unix-group: oder unix-netgroup: - der Wert kann ein Nut­zer- oder Grup­pen­na­me oder ein glob-Pat­tern sein.

Zusätz­lich kön­nen mit ReturnValue noch wei­te­re optio­na­le Para­me­ter (als durch Semi­ko­lon getrenn­te key=value Paa­re) ange­ge­ben wer­den, die bei posi­ti­vem Resul­tat an das auf­ru­fen­de Pro­gramm über­ge­ben wer­den.

Regeln

Regeln sind eine Neue­rung in Pol­Kit-Ver­sio­nen >0.105 und somit noch nicht in Debi­an ver­füg­bar. Dabei kön­nen für spe­zi­el­le Nut­zer oder Nut­zer­grup­pen Berech­ti­gun­gen in .rules Datei­en in /etc/polkit-1/rules.d defi­niert wer­den. Ihr Auf­bau sähe für das Syn­ap­tic-Bei­spiel so aus:

/* Nutzern der sudo Gruppe die Ausführung von Synaptic erlauben */
polkit.addRule(function(action, subject) {
    if (action.id == "com.ubuntu.pkexec.synaptic" &&
        subject.isInGroup("sudo")) {
        return polkit.Result.YES;
    }
});

Quel­len:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.