¿Hay un gksudo de escritorio neutral?

17

Existen varias herramientas para varios escritorios que tienen como objetivo ejecutar una aplicación gráfica como root. gksudo, kdesudo, empower, Etc ...

Pero, ¿qué sucede si estoy escribiendo un script que podría usarse en cualquier escritorio de Linux? ¿Hay xdg-sudoalgún tipo de ...? ¿Un estándar para obtener acceso a sudo en un entorno de escritorio?

Oli
fuente

Respuestas:

16

Siguiendo la sugerencia de @Tachyons, investigué MUCHO pkexecy ¡es increíble !

  • Es parte de PolicyKit , un paquete ampliamente utilizado.
  • Alojado y patrocinado por freedesktop.org
  • Predeterminado en Gnome , Unity , MATE , Cinnamon , KDE , LXDE y XFCE , y posiblemente otros
  • Funciona a través de D-Bus, por lo que es completamente neutral para el escritorio, con un protocolo bien definido.
  • En muchos DE se usa en varios servicios, como pantalla de inicio de sesión, apagado / reinicio, administración de discos (udisks / automount), etc.

Entonces sí, cumple con todos los requisitos, y supongo que es lo más parecido a un "gksudo universal" .

Dicho esto, pkexeces el front-end de línea de comandos de PolicyKit. Hay 2 modos básicos de operación:

  • Simplemente ejecútelo como lo haría sudo, y obtendrá un buen indicador de GUI:

    $ pkexec rm -rf /

indicador de pkexec GUI

  • O cree un archivo de autorización de PolicyKit para su aplicación, colóquelo /usr/share/polkit-1/rules.dy le permitirá una gran cantidad de opciones de personalización y relacionadas con la seguridad, por ejemplo, acceso a la raíz solo para ciertas acciones, sin necesidad de contraseña para otros, acceso limitado a ciertas rutas , etc. Puede ajustar su configuración con una granularidad sorprendente.
MestreLion
fuente
6

Una forma más general sería escribir un "programa auxiliar". Dicho programa solicitaría al usuario una contraseña; si está seguro de que, por ejemplo, Zenity, está instalado, puede usarlo, de lo contrario deberá escribir el programa auxiliar en Python o alguna otra cosa que pueda interactuar con la GUI.

Lea el sudomanual de las -Aopciones ("askpass") y -S(stdin).

Y recuerda que cuando ejecutas sudotu script, necesitas la -Hopción (home) para simular gksudo.

Este método funciona bien, pero debe probar el programa auxiliar a fondo para asegurarse de que esté libre de errores.

Paddy Landau
fuente
1
También debe manejar el token xauth que pasa en su programa, lo cual no es trivial.
symcbean
4

No, no existe una forma estándar de obtener privilegios de root (o de cualquier otro usuario).

Si desea ser compatible con la mayor cantidad de sistemas posible, no asuma nada, pero dígale al usuario que debe ejecutar su script como usuario específico. Luego, depende del usuario / administrador configurar el sistema para que su script se ejecute de manera adecuada.

Hacer una sugerencia sobre cómo usar los sistemas de autenticación más comunes, como su, sudo y ConsoleKit, sería bueno.

Florian Diesch
fuente
Es cierto para principios de 2009, pero afortunadamente ahora polkit(anteriormente PolicyKit) está lo suficientemente extendido como para ser considerado un estándar.
MestreLion