¿Cómo configurar pkexec?

32

Lectura de estas preguntas y respuestas:

me trajo otro que creará problemas para los nuevos usuarios de ese comando:

  • ¿Cómo configurar pkexecpara un uso fácil?

Por ejemplo al hacer lo siguiente:

(Abrir un archivo en la terminal)

pkexec nano /etc/mysql/my.cnf  

(Abrir un archivo en la GUI)

pkexec gedit /etc/mysql/my.cnf  

El último recibe el siguiente error:

 pkexec must be setuid root

Ahora esto me trajo las siguientes preguntas:

  1. ¿Cómo configurar pkexecpara evitar esto? Similar a cómo sudo/ gksucomportarse cuando se hace lo mismo (solo piden la contraseña).

  2. Si corresponde, ¿cómo decirle que no solicite una contraseña después de la primera vez que la aplica a un comando (o que incluye el primer comando si es configurable)?

  3. ¿Dónde guardar el archivo de configuración si aún no existe?

  4. ¿Existe una aplicación GUI para configurar el pkexecuso (Kit de políticas)?

Luis Alvarado
fuente
1
En el caso de que Ubuntu se ocupara de los negocios a este respecto en 13.04, esto es lo que hago para gedit & nautilus. Funciona bien aquí, pero no se publicará como respuesta, ya que es solo mi solución hasta el momento en que Ubuntu se encargue. ubuntuforums.org/…
doug
Hmm, no puedo agregar un comentario, así que tengo que recurrir a una respuesta ... Usando: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Significa que la interfaz de usuario de inicio de sesión devuelve la ruta de env en lugar del comando finalmente siendo ejecutado. ¿Hay alguna manera de organizar el uso de "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" para que pkexec gui devuelva la ruta al comando que finalmente se está ejecutando? Ver foto aquí: cuadro de diálogo de autenticación de

Respuestas:

39

¿Cómo configurar pkexecpara evitar errores al ejecutar aplicaciones GUI?

Encontré dos formas posibles:

  1. Como puede ver, usando lo siguiente:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    No te dará ningún error. Y esto es normal porque man pkexeces muy claro en este asunto:

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

    Como resultado, puede crear un alias ( permanente ) (esta es la forma más simple):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. O, (nuevamente) como man pkexecdice:

           [...] 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.[...]
    

    puede crear un nuevo archivo de política en el /usr/share/polkit-1/actionsllamado com.ubuntu.pkexec.gedit.policycon el siguiente código XML en el interior, donde lo más importante es la creación org.freedesktop.policykit.exec.allow_guide un valor no vacío:

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

¿Cómo decirle que no solicite una contraseña después de la primera vez que la aplica a un comando?

Por estas tres etiquetas de ajuste: allow_any, allow_inactivey allow_activedesde el archivo de política, las siguientes opciones están disponibles:

  • no : el usuario no está autorizado para llevar a cabo la acción. Por lo tanto, no hay necesidad de autenticación.
  • : el usuario está autorizado para llevar a cabo la acción sin ninguna autenticación.
  • auth_self : se requiere autenticación, pero el usuario no necesita ser un usuario administrativo.
  • auth_admin : se requiere autenticación como usuario administrativo.
  • auth_self_keep : lo mismo que auth_self pero, como sudo, la autorización dura unos minutos.
  • auth_admin_keep : lo mismo que auth_admin pero, como sudo, la autorización dura unos minutos.

     Fuente: Polkit - Estructura - Acciones

Por lo tanto, si usa la opción auth_admin_keep (o, según corresponda, auth_self_keep ), pkexecno volverá a solicitar una contraseña durante algún tiempo (de forma predeterminada, este tiempo se establece en 5 minutos, como marqué). La desventaja aquí es que esto es aplicable solo para un mismo comando / aplicación y válido para todos los usuarios (a menos que se anule en una configuración posterior).

¿Dónde guardar el archivo de configuración si aún no existe?

Los archivos de configuración o las definiciones de polkit se pueden dividir en dos tipos:

  • Las acciones se definen en archivos XML .policy ubicados en /usr/share/polkit-1/actions. Cada acción tiene un conjunto de permisos predeterminados adjuntos (por ejemplo, debe identificarse como administrador para usar la acción GParted). Los valores predeterminados se pueden anular, pero editar los archivos de acciones NO es la forma correcta. El nombre de este archivo de política debe tener este formato:

    com.ubuntu.pkexec.app_name.policy
  • Las reglas de autorización se definen en archivos .rules de JavaScript. Se encuentran en dos lugares: los paquetes de terceros pueden usar /usr/share/polkit-1/rules.d(aunque pocos lo hacen) y /etc/polkit-1/rules.des para la configuración local. Los archivos .rules designan un subconjunto de usuarios, hacen referencia a una (o más) de las acciones especificadas en los archivos de acciones y determinan con qué restricciones esas acciones pueden ser realizadas por ese / esos usuario (s). Como ejemplo, un archivo de reglas podría anular el requisito predeterminado para que todos los usuarios se autentiquen como administradores cuando usen GParted, determinando que algún usuario específico no necesita hacerlo. O no está permitido usar GParted en absoluto.

     Fuente: Polkit - Estructura

¿Existe una aplicación GUI para configurar el pkexecuso?

Por lo que sé, hasta ahora (18.01.2014) no existe algo como esto. Si en el futuro encuentro algo, no olvidaré actualizar esta respuesta también.

Radu Rădeanu
fuente
44
¡Qué hermosa respuesta! Muchas gracias. ¡Ahora entiendo por qué no pude ejecutar doublecmdROOT PRIVELEGES, ya que necesitaba exportar entornos con DISPLAY & XAUTHORITY!! Solo pequeñas preguntas: ¿Hay alguna diferencia en escribir una política o simplemente ejecutar un programa con comando pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdtodo el tiempo?
Ilia Rostovtsev
@IliaRostovtsev esto, creo, ¿será pkexectan inseguro como gksudosi se ejecutara a través de ese alias? puede ser, en lugar de un alias, podría ser un script con privilegios de root, ¿podría ser más seguro?
Acuario Power
@AquariusPower ¿De qué manera ves que podría volverse inseguro? Podrías intentarlo, por supuesto, pero no estoy seguro. El problema surge cuando necesita usar GUI (X Server) que se ejecuta bajo 'usted' y otro programa GUI que necesita ejecutarse como root. Juegue y regrese por favor en caso de que encuentre algo.
Ilia Rostovtsev
@ radu-rădeanu En Utopic auth_admin_keepno parece funcionar. Si comienzo sináptico desde la interfaz gráfica de usuario (que es equivalente a pkexec synaptic), me pide una contraseña cada vez. ¿Alguna idea de por qué?
Khurshid Alam
¿Pueden ayudarme a que el comando pkexec no funcione mediante un atajo de teclado ?
Pandya
0

Además de la respuesta de Radu: no usaría el alias pkexec, sino gksudo .

¿Por qué? No necesita reescribir su guión.

Yo uso la siguiente configuración:

  • abrir una terminal
  • cd /usr/local/bin
  • sudo gedit gksudo (cree un nuevo archivo llamado "gksudo"
  • escribe el siguiente contenido:

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

    • (no olvide el $@al final. Esto es para redirigir todos los parámetros)

  • guardar y Salir

  • hacer que el archivo sea ejecutable: chmod 755 gksudo
  • Ahora debería tener un comando gksudo totalmente funcional disponible en su sistema de forma permanente.

Por razones de documentación, escribiré lo que probé y no funcionó:

  • alias pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • No fue permanente y solo se quedó en una sola terminal
  • agregando el alias a ~/.bash_aliases
    • Funciona si primero abres una terminal. No funciona, si haces doble clic en los scripts
  • Crear un enlace a pkexec con parámetros ( ln -s pkexec [...])
    • Después de un rápido googleing, parece que Linux no admite parámetros en enlaces
TheTrowser
fuente