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/sudoers
que 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, pkexec
aparece un cuadro de diálogo que solicita la contraseña del usuario. Parece que en Ubuntu, las llamadas sudo
desde 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 unpkexec
diá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
sudo
desde la GUI están siendo interceptadas de alguna manerapkexec
" .pkexec
no tiene mucho en común consudo
. En contraste consudo
,pkexec
no 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.policy
y 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/gparted
archivos con privilegios de root. Cuando comienzagparted
desde la GUI, comienza de hechogparted-pkexec
(puede verificar este/usr/share/applications/gparted.desktop
archivo interno ),/usr/bin/gparted-pkexec
que 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
.sudo
debe usarse solo para aplicaciones de shell, no para aplicaciones GUI. Verman sudo
yman pkexec
en este sentido.