Quand utiliser pkexec vs gksu / gksudo?

77

Il existe deux manières générales d'exécuter des applications graphiquement en tant qu'utilisateur root (ou, plus généralement, en tant qu'un autre utilisateur). Des programmes comme gksu, gksudoet kdesudosont des interfaces graphiques pour sudo. En revanche, pkexecest une interface graphique pour PolicyKit .

Lors de l' exécution manuelle de programmes en tant qu'utilisateur root (ou utilisateur non root), quels sont les avantages / inconvénients (le cas échéant) de l'utilisation pkexec, par rapport à la méthode plus traditionnelle consistant à utiliser une sudointerface frontale?

Eliah Kagan
la source

Réponses:

25

PolicyKit est plus configurable, bien pkexecque ne l'utilise pas. Indiquez également à pkexecl'utilisateur le chemin d'accès complet du programme qui sera démarré, afin qu'il soit un peu plus sûr de ce qu'il va se passer. Les «stratégies» de PolicyKit peuvent être utilisées pour définir davantage de paramètres d'avancée. Par exemple, si le mot de passe doit être mémorisé.

Quelque chose que je tire du pkexecmanuel:

L'environnement dans lequel PROGRAM l'exécutera sera défini sur un environnement minimal connu et sûr afin d'éviter d'injecter du code via LD_LIBRARY_PATH ou des mécanismes similaires. De plus, la variable d'environnement PKEXEC_UID est définie sur l'ID utilisateur du processus appelant pkexec. En conséquence, pkexec ne vous permettra pas d’exécuter par exemple des applications X11 en tant qu’autre utilisateur, car la variable d’environnement $ DISPLAY n’est pas définie.

Plus d'informations sur les politiques ou les définitions d'actions du pkexecmanuel:

   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
la source
1
J'aurais dû dire qu'il y en a deux pour exécuter des applications en tant qu'utilisateur root avec authentification graphique . J'avais supposé qu'il y avait un moyen d'utiliser pkexecdes applications graphiques (je ne l'avais jamais fait ainsi ...). Votre réponse explique pourquoi il n'y en a pas (ou du moins pourquoi un environnement personnalisé doit être spécifié pour le faire).
Eliah Kagan
1
Cependant, j’ai une question à propos de votre réponse: lorsqu'un programme est exécuté en tant que root pkexec, dans quel sens peut-il limiter ses capacités ("autorisations")? J'accorde à un programme la possibilité de faire n'importe quoi quand je l'exécute avec sudoune sudointerface ... dans quel sens exécuter un programme en tant que root pkexecne le fait-il pas aussi?
Eliah Kagan
3
Je comprends que PolicyKit est utilisé pour permettre aux programmes d’effectuer uniquement des types d’actions spécifiques. Mais est- pkexecce que cela facilite ou est pkexec-ce que les choses fonctionnent simplement en tant que root avec des capacités illimitées? L' pkexecextrait manuel que vous avez inclus dans votre réponse explique comment écrire des règles pour déterminer qui peut exécuter un programme en tant que root (ou en tant qu'utilisateur non root), plutôt que ce que le programme peut faire.
Eliah Kagan
4
Je souhaite accepter votre réponse car elle fournit de nombreuses informations utiles. Mais j'estime que c'est très trompeur, car il est dit que pkexecc'est plus configurable que sudo, et compte tenu de la discussion que nous avons eu ici dans les commentaires, cela ne semble pas être le cas. Envisageriez-vous de modifier votre réponse afin d'expliquer sudola configurabilité et de la comparer / opposer à pkexec, ou de modifier votre réponse pour indiquer que la différence est autre chose que la configurabilité?
Eliah Kagan
2
"écrivez simplement" puis un morceau de XML. J'avais besoin de rire.
Jürgen A. Erhard
14

Avec sudo, vous pouvez définir des stratégies par utilisateur et par programme pour conserver ou réinitialiser l'environnement des appelants dans le contexte de sudo. La politique env_reset est définie par défaut.

Vous ne pouvez pas exécuter d'applications graphiques via pkexec sans le configurer explicitement. Comme il ne s'agit que d'un résultat de la réinitialisation de l'environnement, ceci est également vrai pour sudo. Notez cependant que ni pkexec ni sudo ne peuvent empêcher une application malveillante de s'exécuter en tant que root pour récupérer toutes les informations nécessaires à partir des gestionnaires d'affichage ou du fichier de cookies X11 de l'utilisateur. Ce dernier, les deux ou similaire, peut même être fait par des applications non root en fonction des circonstances.

Sudo ne nécessite pas de listes explicites d'utilisateurs. Vous pouvez répertorier n'importe quel groupe d'utilisateurs ou même définir une autorisation pour tous les utilisateurs. La directive target_pw permet à ces utilisateurs de s'authentifier avec les informations d'identification de l'utilisateur dans le contexte duquel ils souhaitent exécuter une application, c'est-à-dire root. En dehors de cela, le programme tout aussi traditionnel su (su / gtksu / kdesu) peut être utilisé pour faire la même chose sans configuration spéciale.

sudo permet également à l'utilisateur de rester authentifié pendant un temps spécifié. L'option est nommée timeout, configurable globalement, par utilisateur ou par application. L'authentification peut être conservée par utilisateur ou globalement par utilisateur.

Bien que pkexec ne puisse pas valider les ARGUMENTS transmis à PROGRAM, sudo dispose bien de cette fonctionnalité. Admis cependant, vous pouvez facilement déconner, et ce n’est normalement pas fait.

Vous pouvez modifier un peu la façon dont vous voulez que les programmes soient exécutés via pkexec: icône, texte à afficher, vous pouvez même avoir des tâches de localisation, etc. Selon les circonstances, cela peut être astucieux. Malheureusement, cette personne a ressenti le besoin de réinventer la roue de cette fonctionnalité. Ce serait probablement quelque chose à mettre dans les wrappers graphiques gtksudo / kdesu.

Policykit n’est alors qu’un cadre de configuration centralisé. Malheureusement pas une jolie. Les fichiers XML de PKs sont bien plus compliqués que tout ce qu'une application pourrait fournir de manière native à court de fichiers binaires. Et personne ne voudrait utiliser si binaire… oh gconf… tant pis.

Paul Hänsch
la source
8
J'ai voté parce que ce message n'est pas vraiment une réponse, c'est une critique d'une autre réponse. Si vous estimez qu’il est généralement préférable d’utiliser sudo plutôt que pkexec, dites-le clairement, en expliquant votre argument avec ces réfutations.
Flimm
4
Merci Paul, pour beaucoup d'analyses utiles ici! Mais je suis aussi d'accord avec Flimm. Pouvez-vous commencer par une réponse simple à la question posée?
nealmcb le
1
Non, vous pkexec pouvez exécuter l'interface graphique sans configurer: askubuntu.com/a/332847/89385
akostadinov
8

Quelques petites choses en quoi ses interfaces pkexecsont différentes sudo:

  1. Vous ne pouvez pas exécuter d'applications graphiques via pkexecsans le configurer explicitement.
  2. Vous pouvez modifier un peu la manière dont vous voulez que les programmes soient exécutés via pkexec: icône, texte à afficher, si vous souhaitez vous souvenir du mot de passe ou non, si vous voulez le laisser s'exécuter graphiquement et plus encore.
  3. N'importe qui peut exécuter "Exécuter en tant que" superutilisateur (à condition de pouvoir s'authentifier en tant que tel); sudovous devez être répertorié dans le sudoersfichier en tant qu'administrateur .
  4. gksudoverrouille le clavier, la souris et la mise au point lorsque vous demandez un mot de passe, pkexecne le fait pas. Dans les deux cas, les frappes au clavier sont néanmoins sniffables .
  5. Avec pkexecvous travaillez dans un environnement légèrement plus assaini.

Essayez par exemple:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?
organiser
la source
Bon point (n ° 3) sur la façon dont vous pouvez vous authentifier en tant qu’autre utilisateur pour exécuter des programmes rootavec pkexec. Est-il configurable, que les utilisateurs peuvent utiliser pkexec(même s'ils connaissent le mot de passe d'un autre utilisateur autorisé à le faire)? suest configurable de cette façon. Lorsque j'essaie de contacter un suautre rootutilisateur que guestsur un système Oneiric, cela me dit que je ne suis pas autorisé à le faire. (En revanche, lorsque je tente d'utiliser pkexeccomme guestsur Onirique ou précis, je reçois ce qui ressemble à une erreur d'assertion, que je peux signaler rapidement comme un bug, que je ne devrais pas me que même si elle n'est pas autorisé.)
Eliah Kagan
2
Mais sudoses interfaces peuvent également être modifiées comme décrit au point 2. Vous pouvez exécuter un programme avec gksuou gksudo afficher du texte personnalisé , ne plus avoir besoin des mots de passe de certains utilisateurs en les modifiant /etc/sudoers(avec visudo), et modifier la durée de leur mémorisation en modifiant expiration du délai d'attente de sudo (bien que je ne sois pas sûr de le faire sous Ubuntu, qui est configuré de sorte que les questions de savoir si sudoun mot de passe est nécessaire ou non , et combien de temps il faudra avant qu'il en ait besoin, sont spécifiques au terminal ).
Eliah Kagan
N ° 4 n'est pas vrai si vous utilisez GNOME Shell.
Muru
Non, vous pkexec pouvez exécuter l'interface graphique sans configurer: askubuntu.com/a/332847/89385
akostadinov