Pregunta

Tengo una aplicación de interfaz de usuario (utiliza GTK) para Linux, que requiere ser ejecutado como root (que lee y escribe / dev / sd *).

En lugar de requerir que el usuario abra un intérprete de comandos o utilizar "sudo" manualmente cada vez que se pone en marcha mi aplicación, me pregunto si la aplicación puede utilizar algunas API de OS-proporcionada para obtener permisos de root. (Nota:. GTK de aplicación no puede utilizar el modo "setuid", por lo que no es una opción aquí)

La ventaja en este caso sería un flujo de trabajo más fácil:. El usuario puede, desde su cuenta de usuario por defecto, haga doble clic en mi aplicación desde el escritorio en lugar de tener que abrir una terminal de root y poner en marcha a partir de ahí

Lo pregunto porque OS X ofrece exactamente esto: Una aplicación puede pedir al sistema operativo para iniciar un ejecutable con permisos de root - el sistema operativo (y no desde la aplicación) luego le pide al usuario que introduzca sus credenciales, los verifica y luego se pone en marcha el destino como deseado.

Me pregunto si hay algo similar para Linux (Ubuntu, por ejemplo.)

Aclaración:

Así que, después de la alusión a PolicyKit Me pregunto si puedo usar eso para conseguir el acceso r / w para los "/ dev / sd ..." dispositivos de bloque. Me parece que el documention bastante difícil de entender, por lo que pensé que sería la primera pregunta si esto es posible en absoluto antes de que me paso horas en tratar de entender en vano.

Actualización:

La aplicación es una herramienta de reparación de disco operada a distancia para el usuario de Linux unsavvy, y esos noobs Linux no tendrá mucho entendimiento del uso de sudo o incluso cambiar la pertenencia a grupos de sus usuarios, especialmente si su disco acaba de comenzar a actuar para arriba y ellos' re volviendo loco. Es por eso busco una solución que evite tecnicismos como éste.

¿Fue útil?

Solución

La forma más antigua, sencilla pero ahora está eliminando gradualmente, es Gksu . Aquí es la discusión sobre el futuro de Gksu.

La nueva forma es utilizar PolicyKit . No estoy muy seguro de cómo funciona esto, pero creo que es necesario poner en marcha su aplicación usando el comando pkexec.

ACTUALIZACIÓN:

Mirando el código de ejemplo en http://hal.freedesktop.org /docs/polkit/polkit-apps.html , parece que se puede usar PolicyKit para obtener la autorización de determinados acciones , que se describen por los archivos .policy en /usr/share/polkit-1/actions. La acción para ejecutar un programa como otro usuario es org.freedesktop.policykit.exec. Me parece que no puede encontrar una acción para acceder directamente a los dispositivos de bloque, pero tengo que admitir, la documentación PolicyKit rompe mi cerebro también.

Por lo tanto, tal vez el supuesto más simple de acción para usted es separar el código de disco mangling que requiere privilegios en una utilidad de línea de comandos y ejecutar que a partir de su aplicación con interfaz gráfica usando g_spawn_[a]sync() con pkexec. De esa manera usted no tiene que molestarse con las acciones que solicitan y ese tipo de cosas. Es probablemente una mala práctica de todos modos para ejecutar la aplicación GUI todo como root.

Otra sugerencia es pedir al autor de PolicyKit (David Zeuthen) directamente. O tratar de publicar su pregunta a la lista GTK-app-devel.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top