Wann benutzt man pkexec vs. gksu / gksudo?

77

Es gibt zwei allgemeine Möglichkeiten, Anwendungen grafisch als Root (oder allgemeiner als ein anderer Benutzer) auszuführen. Programme wie gksu, gksudound kdesudosind grafische Frontends für sudo. Im Gegensatz dazu gibt pkexeces ein grafisches Frontend für PolicyKit .

Wenn manuell Programme als Wurzel (oder als ein anderes, nicht-root) ausgeführt wird , was die Vorteile / Nachteile (falls vorhanden) der Verwendung sind pkexec, im Vergleich zu der traditionellen Methode der Verwendung eines sudoFrontend?

Eliah Kagan
quelle
Related: askubuntu.com/questions/252962/…
Mechanische Schnecke
Verwandte (aber kein Duplikat): Ist sudo -i weniger sicher als pkexec?
Eliah Kagan

Antworten:

25

PolicyKit ist konfigurierbarer, pkexecnutzt diese Konfigurierbarkeit jedoch nicht. Außerdem pkexeczeigen dem Benutzer den vollständigen Pfad des Programms , das gestartet werden wird, dass der Benutzer ein bisschen mehr sicher , was passieren wird. Die sogenannten "Policies" von PolicyKit können verwendet werden, um weitere Fortschrittseinstellungen vorzunehmen. Zum Beispiel, ob das Passwort gespeichert werden soll.

Ich habe etwas aus dem pkexecHandbuch:

Die Umgebung, in der PROGRAM sie ausführt, wird auf eine minimale bekannte und sichere Umgebung eingestellt, um das Einfügen von Code über LD_LIBRARY_PATH oder ähnliche Mechanismen zu vermeiden. Zusätzlich wird die Umgebungsvariable PKEXEC_UID auf die Benutzer-ID des Prozesses gesetzt, der pkexec aufruft. Infolgedessen können Sie mit pkexec beispielsweise X11-Anwendungen nicht als anderer Benutzer ausführen, da die Umgebungsvariable $ DISPLAY nicht festgelegt ist.

Weitere Informationen zu Richtlinien oder Aktionsdefinitionen finden Sie im pkexecHandbuch:

   To specify what kind of authorization is needed to execute the program
   /usr/bin/pk-example-frobnicate as another user, simply write an action
   definition file like this

       <?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>

         <vendor>Examples for the PolicyKit Project</vendor>
         <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

         <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
           <description>Run the PolicyKit example program Frobnicate</description>
           <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
           <message>Authentication is required to run the PolicyKit example program Frobnicate</message>
           <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</message>
           <icon_name>audio-x-generic</icon_name>
           <defaults>
             <allow_any>no</allow_any>
             <allow_inactive>no</allow_inactive>
             <allow_active>auth_self_keep</allow_active>
           </defaults>
           <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
         </action>

       </policyconfig>

   and drop it in the /usr/share/polkit-1/actions directory under a
   suitable name (e.g. matching the namespace of the action). Note that in
   addition to specifying the program, the authentication message,
   description, icon and defaults can be specified. For example, for the
   action defined above, the following authentication dialog will be
   shown:

       [IMAGE][2]

           +----------------------------------------------------------+
           |                     Authenticate                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Authentication is required to run the PolicyKit |
           |          example program Frobnicate                      |
           |                                                          |
           |          An application is attempting to perform an      |
           |          action that requires privileges. Authentication |
           |          is required to perform this action.             |
           |                                                          |
           |          Password: [__________________________________]  |
           |                                                          |
           | [V] Details:                                             |
           |  Command: /usr/bin/pk-example-frobnicate                 |
           |  Run As:  Super User (root)                              |
           |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
           |  Vendor:  Examples for the PolicyKit Project             |
           |                                                          |
           |                                  [Cancel] [Authenticate] |
           +----------------------------------------------------------+

   If the user is using the da_DK locale, the dialog looks like this:

       [IMAGE][3]

           +----------------------------------------------------------+
           |                     Autorisering                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Autorisering er påkrævet for at afvikle         |
           |          PolicyKit eksemplet Frobnicate                  |
           |                                                          |
           |          Et program forsøger at udføre en handling der   |
           |          kræver privilegier. Autorisering er påkrævet.   |
           |                                                          |
           |          Kodeord: [___________________________________]  |
           |                                                          |
           | [V] Detaljer:                                            |
           |  Bruger:   Super User (root)                             |
           |  Program:  /usr/bin/pk-example-frobnicate                |
           |  Handling: org.fd.pk.example.pkexec.run-frobnicate       |
           |  Vendor:   Examples for the PolicyKit Project            |
           |                                                          |
           |                                [Annullér] [Autorisering] |
           +----------------------------------------------------------+

   Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM.
   In the normal case (where administrator authentication is required
   every time pkexec is used), this is not a problem since if the user is
   an administrator he might as well just run pkexec bash to get root.

   However, if an action is used for which the user can retain
   authorization (or if the user is implicitly authorized), such as with
   pk-example-frobnicate above, this could be a security hole. Therefore,
   as a rule of thumb, programs for which the default required
   authorization is changed, should never implicitly trust user input
   (e.g. like any other well-written suid program).
RobinJ
quelle
1
Ich hätte sagen sollen, dass es zwei gibt, um Anwendungen als Root mit grafischer Authentifizierung auszuführen . Ich hatte angenommen, dass es eine Möglichkeit gibt, pkexecgrafische Anwendungen auszuführen (ich hatte es einfach noch nie getan ...). Ihre Antwort erklärt, warum dies nicht der Fall ist (oder warum zumindest eine benutzerdefinierte Umgebung angegeben werden muss, um dies zu tun).
Eliah Kagan
1
Ich habe jedoch eine Frage zu Ihrer Antwort: Wenn ein Programm als root ausgeführt wird pkexec, in welchem ​​Sinne können die Funktionen ("Berechtigungen") eingeschränkt werden? Ich gebe einem Programm die Möglichkeit, irgendetwas zu tun, wenn ich es mit sudooder mit einem sudoFrontend ausführe. Inwiefern macht das Ausführen eines Programms als Root dies pkexecnicht auch?
Eliah Kagan
3
Ich verstehe, dass PolicyKit verwendet wird, damit Programme nur bestimmte Arten von Aktionen ausführen können. Aber pkexecerleichtert das das oder läuft es pkexeceinfach als root mit uneingeschränkten Fähigkeiten? Der pkexecmanuelle Auszug, den Sie in Ihre Antwort aufgenommen haben, dokumentiert, wie Sie Regeln schreiben, um zu bestimmen, wer ein Programm als Root (oder als anderer Benutzer ohne Rootberechtigung) ausführen kann, und nicht, was das Programm tun kann.
Eliah Kagan
4
Ich möchte Ihre Antwort akzeptieren, da sie viele gute Informationen enthält. Aber ich halte das für sehr irreführend, weil es besagt, dass pkexeces konfigurierbarer ist als sudo, und angesichts der Diskussion, die wir hier in den Kommentaren hatten, scheint dies nicht der Fall zu sein. Würden Sie erwägen, Ihre Antwort zu bearbeiten, um entweder sudodie Konfigurierbarkeit zu erläutern und sie zu vergleichen / zu kontrastieren pkexec, oder Ihre Antwort zu bearbeiten, um zu sagen, dass der Unterschied etwas anderes als Konfigurierbarkeit ist?
Eliah Kagan
2
"Einfach schreiben" und dann ein Stück XML. Ich brauchte das Lachen.
Jürgen A. Erhard
14

Mit sudo können Sie pro Benutzer und pro Programmrichtlinien festlegen, ob die Anruferumgebung im Kontext von sudo beibehalten oder zurückgesetzt werden soll. Die env_reset-Richtlinie ist standardmäßig festgelegt.

Sie können grafische Anwendungen nicht über pkexec ausführen, ohne dies explizit zu konfigurieren. Da dies lediglich ein Ergebnis des Zurücksetzens der Umgebung ist, gilt dies offensichtlich auch für sudo. Beachten Sie jedoch, dass weder pkexec noch sudo verhindern können, dass eine böswillige Anwendung als Root ausgeführt wird, um alle erforderlichen Informationen von den Display-Managern oder der X11-Cookie-Datei des Benutzers abzurufen. Letzteres, beides oder ähnliches, kann in Abhängigkeit von den Umständen auch von Nicht-Root-Anwendungen durchgeführt werden.

Für Sudo ist keine explizite Auflistung der Benutzer erforderlich. Das Auflisten einer beliebigen Benutzergruppe oder das Festlegen einer Berechtigung für alle Benutzer im Allgemeinen ist möglich. Die Anweisung target_pw ermöglicht es diesen Benutzern, sich mit den Anmeldeinformationen des Benutzers zu authentifizieren, in dessen Kontext sie eine Anwendung ausführen möchten, dh root. Abgesehen davon kann das ebenso traditionelle Programm su (su / gtksu / kdesu) verwendet werden, um dasselbe ohne spezielle Konfiguration zu erreichen.

Mit sudo kann der Benutzer auch eine bestimmte Zeit lang authentifiziert bleiben. Die Option heißt Timeout und kann global, pro Benutzer oder pro Anwendung konfiguriert werden. Die Authentifizierung kann pro Tag oder global pro Benutzer beibehalten werden.

Während pkexec die an PROGRAM übergebenen ARGUMENTE möglicherweise nicht validiert, verfügt sudo in der Tat über diese Funktion. Zugegeben, Sie können sich leicht damit anlegen, und das wird normalerweise nicht gemacht.

Sie können ein wenig anpassen, wie Programme über pkexec ausgeführt werden sollen: Symbol, anzuzeigender Text, sogar Lokalisierungsmaterial und so weiter. Abhängig von den Umständen kann dies in der Tat raffiniert sein. Schade, dass jemand das Rad für diese Funktion neu erfinden wollte. Dies wäre wahrscheinlich etwas, das in die grafischen gtksudo / kdesu-Wrapper eingefügt werden könnte.

Policykit ist dann nur ein zentrales Konfigurationsframework. Leider kein hübscher. PKs XML-Dateien sind weitaus komplizierter als alles, was eine App nativ ohne Binärdateien bereitstellen könnte. Und niemand wäre so verrückt, Binary zu benutzen ... oh gconf ... egal.

Paul Hänsch
quelle
8
Ich habe die Bewertung herabgestimmt, weil dieser Beitrag nicht wirklich eine Antwort ist, sondern eine Kritik an einer anderen Antwort. Wenn Sie der Meinung sind, dass es normalerweise die bessere Wahl ist, sudo anstelle von pkexec zu verwenden, sagen Sie dies und erklären Sie Ihren Standpunkt mit diesen Widerlegungen.
Flimm
4
Vielen Dank, Paul, für viele hilfreiche Analysen hier! Ich stimme aber auch Flimm zu. Können Sie mit einer einfachen Antwort auf die gestellte Frage beginnen?
Nealmcb
1
Nein, pkexec kann GUI ausgeführt werden, ohne die Konfiguration: askubuntu.com/a/332847/89385
akostadinov
8

Ein paar Dinge, die pkexecsich von sudoden Frontends unterscheiden:

  1. Sie können grafische Anwendungen nicht über ausführen, pkexecohne dies explizit zu konfigurieren.
  2. Sie können ein wenig anpassen, wie Programme ausgeführt werden sollen pkexec: Symbol, anzuzeigender Text, ob das Kennwort gespeichert werden soll oder nicht, ob es grafisch ausgeführt werden soll und noch einiges mehr.
  3. Jeder kann "Run as" als Superuser ausführen (vorausgesetzt, er kann sich als solcher authentifizieren), wobei sudoSie in der sudoersDatei als admin aufgeführt sein müssen .
  4. gksudoSperrt die Tastatur, die Maus und den Fokus, wenn Sie nach einem Kennwort gefragt werden pkexec. In beiden Fällen sind die Tastenanschläge jedoch hörbar .
  5. Mit pkexecIhnen arbeiten Sie in einer etwas hygienischeren Umgebung.

Versuchen Sie zum Beispiel:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?
ordnen
quelle
Guter Punkt (# 3) darüber, wie Sie sich als andere Benutzer authentifizieren können, um Programme wie rootmit auszuführen pkexec. Ist es konfigurierbar, welche Benutzer überhaupt verwenden pkexeckönnen (auch wenn sie das Passwort eines anderen Benutzers kennen, der dazu berechtigt ist)? suist auf diese Weise konfigurierbar. Wenn ich versuche, sueinen anderen rootBenutzer als guestauf einem Oneiric-System anzusprechen, wird mir mitgeteilt, dass ich dazu nicht berechtigt bin. (Im Gegensatz dazu , wenn ich versuche zu verwenden pkexecwie guestauf Oneiric oder Precise, bekomme ich , was wie eine Behauptung Fehler sieht, die ich bald als Fehler melden kann, wie ich es nicht , dass auch bekommen sollte , wenn es nicht erlaubt ist.)
Eliah Kagan
2
Das sudoFrontend kann aber auch wie in Punkt 2 beschrieben angepasst werden . Sie können ein Programm mit benutzerdefiniertem Text ausführen gksuoder diesen gksudo anzeigen , indem Sie einige Benutzerpasswörter nicht mehr bearbeiten /etc/sudoers(mit visudo) und ändern, wie lange sie im Sinne einer Änderung der Art gespeichert werden Es dauert lange, bis Sudo eine Zeitüberschreitung aufweist (obwohl ich nicht sicher bin, wie dies unter Ubuntu erfolgen soll, das so konfiguriert ist, dass die Fragen, ob sudound wie lange ein Kennwort erforderlich ist, terminalspezifisch sind) ).
Eliah Kagan
# 4 ist nicht wahr, wenn Sie GNOME Shell verwenden.
Muru
Nein, pkexec kann GUI ausgeführt werden, ohne die Konfiguration: askubuntu.com/a/332847/89385
akostadinov