Tengo una aplicación GUI que necesita llamar a un demonio (escrito en Python) con privilegios de superusuario. Me gustaría hacer esto sin pedirle al usuario una contraseña.
Como el demonio es un script, no puedo configurar el bit SUID directamente. Podría escribir un contenedor C para esto, pero preferiría no reinventar la rueda, especialmente cuando un error de mi parte podría hacer que la seguridad del sistema se vea seriamente comprometida.
Lo que normalmente haría en esta situación es agregar una línea /etc/sudoersque permita a los usuarios ejecutar el daemon como root sin una contraseña, utilizando la directiva NOPASSWD. Esto funciona bien desde la línea de comandos. Sin embargo, cuando hago esto desde la GUI, pkexecaparece un cuadro de diálogo que solicita la contraseña del usuario. Parece que en Ubuntu, las llamadas sudodesde la GUI están siendo interceptadas de alguna manera pkexec.
¿Hay una manera limpia de evitar esto? Realmente prefiero no tener que lidiar con las molestias de un script setuid.
fuente

sudo somecommand, el cuadro de diálogo que aparece es unpkexecdiálogo de contraseña, independientemente de si existe una política de sudoers que permita la ejecución del programa.Respuestas:
Es incorrecto decir eso: "Parece que en Ubuntu, las llamadas
sudodesde la GUI están siendo interceptadas de alguna manerapkexec" .pkexecno tiene mucho en común consudo. En contraste consudo,pkexecno otorga permiso de root a un proceso completo, sino que permite un nivel más fino de control de la política del sistema centralizado.Ahora, si desea ejecutar una aplicación GUI sin que se le solicite una contraseña
pkexec, esto no es difícil de hacer. Tomemos por ejemplo GParted . Cuando lo abra, verá la siguiente ventana de diálogo que le pedirá una contraseña:Haga clic en Detalles y la ventana de diálogo se verá ahora como:
Desde aquí, todo lo que tiene que hacer es abrir el archivo utilizando, por ejemplo, el siguiente comando:
/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policyy cambia las siguientes líneas:
con los siguientes:
Guarde el archivo y ciérrelo. Luego, cuando abra GParted , ya no se le pedirá una contraseña.
fuente
gparted. Cuando ejecuta desde la terminalsudo gparted, ejecuta/usr/sbin/gpartedarchivos con privilegios de root. Cuando comienzagparteddesde la GUI, comienza de hechogparted-pkexec(puede verificar este/usr/share/applications/gparted.desktoparchivo interno ),/usr/bin/gparted-pkexecque es un script de shell cuyo propósito es ejecutar el siguiente comando:pkexec "/usr/sbin/gparted"que es equivalente apkexec gparted. Entonces, nada que ver consudo. Y este comando que debes usar en la terminal, nosudo gparted.sudodebe usarse solo para aplicaciones de shell, no para aplicaciones GUI. Verman sudoyman pkexecen este sentido.