Wie konfiguriere ich pkexec?

32

Lesen Sie diese Fragen und Antworten:

brachte mir eine andere, die Probleme für neue Benutzer dieses Befehls erstellen wird:

  • Wie konfiguriere ich pkexecfür eine einfache Nutzung?

Zum Beispiel, wenn Sie Folgendes tun:

(Öffnen einer Datei im Terminal)

pkexec nano /etc/mysql/my.cnf  

(Öffnen einer Datei in der GUI)

pkexec gedit /etc/mysql/my.cnf  

Der letzte erhält den folgenden Fehler:

 pkexec must be setuid root

Dies brachte mir folgende Fragen:

  1. Wie konfiguriere pkexecich, um dies zu vermeiden? Ähnlich wie sudo/ gksuverhalten , wenn das gleiche tun (sie nur nach dem Passwort fragen).

  2. Wie kann es gegebenenfalls angewiesen werden, nach der ersten Anwendung auf einen Befehl kein Kennwort mehr anzufordern (oder den ersten Befehl einzuschließen, falls dies konfigurierbar ist)?

  3. Wo kann die Konfigurationsdatei gespeichert werden, wenn sie noch nicht vorhanden ist?

  4. Gibt es eine GUI-App zum Konfigurieren der pkexecNutzung (Policy Kit)?

Luis Alvarado
quelle
1
In Leiu von Ubuntu kümmere ich mich um die Geschäfte in dieser Hinsicht in 13.04. Dies ist, was ich für gedit & nautilus tue. Funktioniert hier einwandfrei, wird aber nicht als Antwort veröffentlicht, da dies nur meine Lösung ist, bis Ubuntu sich darum kümmert. ubuntuforums.org/…
Doug
Hmm, ich kann keinen Kommentar hinzufügen - ich muss also auf eine Antwort zurückgreifen ... Verwenden von: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Bedeutet, dass die Login-Oberfläche den Pfad von env und nicht den Befehl zurückgibt letztendlich hingerichtet. Gibt es eine Möglichkeit, die Verwendung von "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" so zu gestalten, dass pkexec gui den Pfad zu dem Befehl zurückgibt, der letztendlich ausgeführt wird? Siehe Bild hier: Dialogfeld für die Polkit-Authentifizierung

Antworten:

39

Wie konfiguriere pkexecich, um Fehler beim Ausführen von GUI-Anwendungen zu vermeiden?

Ich habe zwei Möglichkeiten gefunden:

  1. Wie Sie sehen können, verwenden Sie Folgendes:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    wird Ihnen keinen Fehler bringen. Und das ist normal, weil man pkexecin dieser Angelegenheit sehr klar ist:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    Als Ergebnis können Sie einen ( permanenten ) Alias erstellen (dies ist der einfachste Weg):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Oder (nochmal) wie man pkexecgesagt:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    Sie können eine neue Richtliniendatei mit dem folgenden XML-Code in /usr/share/polkit-1/actionsnamed com.ubuntu.pkexec.gedit.policyerstellen, wobei es am wichtigsten ist org.freedesktop.policykit.exec.allow_gui, einen nicht leeren Wert festzulegen:

    <?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 gettext-domain="gparted">Authentication is required to run gedit</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>
    

Wie kann es angewiesen werden, nach dem ersten Anwenden auf einen Befehl nicht nach einem Kennwort zu fragen?

Für diese drei Einstellung tags: allow_any, allow_inactiveund allow_activeaus der Policy - Datei, stehen folgende Optionen zur Verfügung:

  • nein : Der Benutzer ist nicht berechtigt, die Aktion auszuführen. Eine Authentifizierung ist daher nicht erforderlich.
  • ja : Der Benutzer ist berechtigt, die Aktion ohne Authentifizierung durchzuführen.
  • auth_self : Authentifizierung ist erforderlich, der Benutzer muss jedoch kein Administrator sein.
  • auth_admin : Eine Authentifizierung als Administrator ist erforderlich.
  • auth_self_keep : Wie auth_self, aber sudodie Autorisierung dauert ein paar Minuten.
  • auth_admin_keep : Wie auth_admin, aber sudodie Autorisierung dauert ein paar Minuten.

     Quelle: Polkit - Struktur - Maßnahmen

Wenn Sie also die Option auth_admin_keep (oder gegebenenfalls auth_self_keep ) verwenden, pkexecwerden Sie einige Zeit lang nicht mehr nach einem Kennwort gefragt (standardmäßig ist diese Zeit wie angekreuzt auf 5 Minuten festgelegt). Der Nachteil hierbei ist, dass dieses Ding nur für ein und denselben Befehl / dieselbe Anwendung gilt und für alle Benutzer gültig ist (es sei denn, es wird in einer späteren Konfiguration außer Kraft gesetzt).

Wo kann die Konfigurationsdatei gespeichert werden, wenn sie noch nicht vorhanden ist?

Konfigurationsdateien oder Polkit-Definitionen können in zwei Arten unterteilt werden:

  • Aktionen werden in XML-Richtliniendateien definiert, die sich in befinden /usr/share/polkit-1/actions. Mit jeder Aktion sind eine Reihe von Standardberechtigungen verknüpft (z. B. müssen Sie sich als Administrator identifizieren, um die GParted-Aktion verwenden zu können). Die Standardeinstellungen können außer Kraft gesetzt werden, das Bearbeiten der Aktionsdateien ist jedoch NICHT der richtige Weg. Der Name dieser Richtliniendatei sollte das folgende Format haben:

    com.ubuntu.pkexec.app_name.policy
  • Autorisierungsregeln werden in JavaScript-Regeldateien definiert. Sie befinden sich an zwei Stellen: Pakete von Drittanbietern können verwendet werden /usr/share/polkit-1/rules.d(wenn auch nur wenige) und /etc/polkit-1/rules.dsind für die lokale Konfiguration vorgesehen. Die .rules-Dateien bezeichnen eine Untergruppe von Benutzern, verweisen auf eine (oder mehrere) der in den Aktionsdateien angegebenen Aktionen und legen fest, mit welchen Einschränkungen diese Aktionen von diesen Benutzern ausgeführt werden können. Beispielsweise könnte eine Regeldatei die Standardanforderung überschreiben, dass sich alle Benutzer bei Verwendung von GParted als Administrator authentifizieren müssen, um festzustellen, dass dies für einen bestimmten Benutzer nicht erforderlich ist. Oder darf GParted überhaupt nicht verwenden.

     Quelle: Polkit - Struktur

Gibt es eine GUI-Anwendung, um die pkexecNutzung zu konfigurieren ?

Soweit ich weiß, existiert bis jetzt (18.01.2014) so ​​etwas nicht. Wenn ich in Zukunft etwas finde, werde ich nicht vergessen, diese Antwort auch zu aktualisieren.

Radu Rădeanu
quelle
4
Was für eine schöne Antwort! Vielen Dank. Jetzt verstehe ich, warum ich nicht doublecmdmit ROOT PRIVELEGES laufen konnte, da ich Umgebungen exportieren musste mit DISPLAY & XAUTHORITY!! Nur kleine Fragen: Gibt es einen Unterschied darin, Richtlinien zu schreiben oder wie immer ein Programm mit einem Befehl pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdauszuführen?
Ilia Rostovtsev
@IliaRostovtsev das denke ich, wird pkexecso unsicher, als gksudoob durch solche Alias ​​laufen? kann es sein, anstelle eines Alias ​​könnte es ein Skript mit Root-Rechten sein, könnte sicherer sein?
Aquarius Power
@AquariusPower Wie sehen Sie, könnte es unsicher werden? Sie könnten es natürlich ausprobieren, aber ich bin mir nicht sicher. Das Problem tritt auf, wenn Sie eine GUI (X Server) verwenden müssen, die unter "Ihnen" ausgeführt wird, und ein anderes GUI-Programm, das als Root ausgeführt werden muss. Spielen Sie herum und schreiben Sie es bitte nach, falls Sie etwas finden.
Ilia Rostovtsev
@ radu-rădeanu On Utopic auth_admin_keepscheint nicht zu funktionieren. Wenn ich synaptic von gui aus starte (was äquivalent zu ist pkexec synaptic), fragt es jedes Mal nach dem Passwort. Irgendeine Idee warum?
Khurshid Alam
0

Zusätzlich zu Radus Antwort: Ich würde nicht den Alias ​​pkexec verwenden, sondern gksudo .

Warum? Sie müssen Ihr Skript nicht neu schreiben.

Ich benutze folgende Konfiguration:

  • Öffne ein Terminal
  • cd /usr/local/bin
  • sudo gedit gksudo (Erstelle eine neue Datei mit dem Namen "gksudo"
  • schreibe folgenden Inhalt:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (Vergessen Sie nicht die $@am Ende. Dies ist für die Umleitung aller Parameter)

  • speichern und Beenden

  • mache die Datei ausführbar: chmod 755 gksudo
  • Jetzt sollte auf Ihrem System ein voll funktionsfähiger gksudo-Befehl verfügbar sein - dauerhaft.

Aus Dokumentationsgründen werde ich schreiben, was ich versucht habe und was nicht:

  • alias pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • War nicht permanent und blieb nur in einem einzigen Terminal
  • Hinzufügen des Alias ​​zu ~/.bash_aliases
    • Funktioniert, wenn Sie zuerst ein Terminal öffnen. Funktioniert nicht, wenn Sie auf Skripte doppelklicken
  • Erstelle einen Link zu pkexec mit parameters ( ln -s pkexec [...])
    • Nach einem kurzen Google-Vorgang scheint Linux keine Parameter in Links zu unterstützen
Der Browser
quelle