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.
Dado que el daemon es un script, no puedo configurar el bit SUID directamente. Podría escribir un envoltorio C para esto, pero prefiero no reinventar la rueda, especialmente cuando un error de mi parte podría hacer que la seguridad del sistema se viera gravemente comprometida.
Lo que normalmente haría en esta situación es agregar una línea en /etc/sudoers
que permite a los usuarios ejecutar el daemon como root sin contraseña, utilizando la directiva NOPASSWD. Esto funciona bien desde la línea de comandos. Sin embargo, cuando hago esto desde la GUI, un pkexec
Aparece un cuadro de diálogo que solicita la contraseña del usuario. Parece que en Ubuntu, las llamadas a sudo
de la GUI de alguna manera están siendo interceptados por pkexec
.
¿Hay una forma limpia de evitar esto? Realmente preferiría no tener que lidiar con las molestias de un script setuid.
Mejor respuesta
Es incorrecto decir que:“Parece que en Ubuntu, las llamadas a sudo
de la GUI de alguna manera están siendo interceptados por pkexec
“ . pkexec
no tiene mucho en común con sudo
. En contraste con sudo
, 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 pkexec
le solicite una contraseña , 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 tienes que hacer es abrir /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
archivo usando por ejemplo el siguiente comando:
gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
y cambie las siguientes líneas:
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
con lo siguiente:
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active>
Guarde el archivo y ciérrelo. A continuación, cuando abras GParted ya no se le pedirá una contraseña.
Relacionado:¿Es posible con Gedit o la línea de comando modificar cada cuarta línea de un archivo de texto?