¿Cuándo usar pkexec vs. gksu / gksudo?

73

Hay dos formas generales de ejecutar aplicaciones gráficamente como root (o, más generalmente, como otro usuario). Programas como gksu , gksudo , y kdesudo son interfaces gráficas para sudo . Por el contrario, pkexec es una interfaz gráfica para PolicyKit .

Cuando manualmente ejecuta programas como root (o como otro usuario no root), ¿cuáles son las ventajas / desventajas (si las hay) de usar pkexec , en comparación con el método más tradicional de utilizando un sudo frontend?

    
pregunta Eliah Kagan 11.11.2011 - 21:44

3 respuestas

25

PolicyKit es más configurable, aunque pkexec no hace uso de esta configurabilidad. Además, pkexec muestra al usuario la ruta completa del programa que se iniciará, para que el usuario esté un poco más seguro de lo que sucederá. Las llamadas 'políticas' de PolicyKit se pueden usar para establecer configuraciones más avanzadas. Por ejemplo, si la contraseña debe ser recordada.

Algo que obtuve del manual pkexec :

  

El entorno que PROGRAM ejecutará, se establecerá en un mínimo   entorno conocido y seguro para evitar la inyección de código a través de   LD_LIBRARY_PATH o mecanismos similares. Además, el PKEXEC_UID   variable de entorno se establece en la identificación del usuario del proceso que invoca   pkexec. Como resultado, pkexec no le permitirá ejecutar, p. X11   aplicaciones como otro usuario desde la variable de entorno $ DISPLAY   no está configurado.

Más información sobre políticas o definiciones de acción del manual pkexec :

   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).
    
respondido por el RobinJ 12.11.2011 - 16:35
14

Con sudo puede establecer por usuario y por políticas de programa sobre si mantener o restablecer el entorno de las personas que llaman en el contexto de sudo. La política env_reset está establecida de manera predeterminada.

No puede ejecutar aplicaciones gráficas a través de pkexec sin configurarlo explícitamente para hacerlo. Debido a que esto es simplemente un resultado del reinicio del entorno, esto también es cierto para sudo. Sin embargo, tenga en cuenta que ni pkexec ni sudo pueden evitar que una aplicación malintencionada que se ejecuta como root recupere toda la información necesaria de los gestores de visualización o del archivo de cookie X11 de los usuarios. El último, ambos o similar, incluso puede ser realizado por aplicaciones no root dependiendo de las circunstancias.

Sudo no requiere listados explícitos de usuarios. Se puede hacer una lista de cualquier grupo de usuarios o incluso establecer un permiso para todos los usuarios en general. La directiva target_pw permite a esos usuarios autenticarse con las credenciales del usuario en el contexto whoose desea ejecutar una aplicación, es decir, la raíz. Además, el igualmente tradicional programa su (su / gtksu / kdesu) puede usarse para hacer lo mismo sin una configuración especial.

sudo también permite al usuario permanecer autenticado durante un tiempo específico. La opción se denomina tiempo de espera, configurable globalmente, por usuario o por aplicación. La autenticación se puede conservar por tty o globalmente por usuario.

Mientras pkexec no puede validar los ARGUMENTOS pasados ​​a PROGRAM, sudo sí tiene esta característica. Admitido sin embargo, puede estropear esto fácilmente, y normalmente no está hecho.

Puede modificar un poco cómo quiere que se ejecuten los programas a través de pkexec: icono, texto para mostrar, incluso puede tener material de localización y todo eso. Dependiendo de las circunstancias, esto puede ser realmente ingenioso. Triste sin embargo, que alguien sintió la necesidad de reinventar la rueda para esta característica. Esto probablemente sea algo para poner en las envolturas gtksudo / kdesu gráficas.

Policykit es solo un marco de configuración centralizado en ese momento. Lamentablemente no es bonita. Los archivos XML de PKs son mucho más complicados que cualquier cosa que una aplicación pueda proporcionar de forma nativa con pocos archivos binarios. Y nadie sería tan tonto como para usar binarios ... oh gconf ... no importa.

    
respondido por el Paul Hänsch 26.10.2012 - 14:47
8

Algunas cosas como pkexec es diferente de sudo y sus interfaces:

  1. No puede ejecutar aplicaciones gráficas a través de pkexec sin configurarlo explícitamente para hacerlo.
  2. Puede modificar un poco cómo quiere que los programas se ejecuten a través de pkexec : icono, texto para mostrar, recordar o no la contraseña, si permite que se ejecute gráficamente y algo más.
  3. Cualquiera puede ejecutar "Ejecutar como" superusuario (siempre que puedan autenticarse como tales), con sudo debe aparecer en el archivo sudoers como administrador .
  4. gksudo bloquea el teclado, el mouse y el foco cuando se solicita una contraseña, pkexec no. En ambos casos, las pulsaciones de teclado son .
  5. Con pkexec trabajas en un ambiente ligeramente más higienizado.

Pruebe por ejemplo:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?
    
respondido por el arrange 15.11.2011 - 23:59

Lea otras preguntas en las etiquetas