¿Cómo configurar pkexec para que no solicite contraseña?

12

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.

Chinmay Kanchi
fuente
¿Sobre qué aplicación hablas?
Radu Rădeanu
Cualquier aplicación GUI. Cuando una aplicación GUI intenta ejecutarse sudo somecommand, el cuadro de diálogo que aparece es un pkexecdiálogo de contraseña, independientemente de si existe una política de sudoers que permita la ejecución del programa.
Chinmay Kanchi

Respuestas:

14

Es incorrecto decir eso: "Parece que en Ubuntu, las llamadas sudodesde la GUI están siendo interceptadas de alguna manera pkexec" . pkexecno tiene mucho en común con sudo. En contraste con sudo, 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:

autenticación autenticada

Haga clic en Detalles y la ventana de diálogo se verá ahora como:

autenticación autenticada - detalles

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

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

y cambia las siguientes líneas:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

con los siguientes:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

Guarde el archivo y ciérrelo. Luego, cuando abra GParted , ya no se le pedirá una contraseña.

Radu Rădeanu
fuente
Sí, pkexec intercepta las llamadas a sudo. Déjame ver si puedo construir un ejemplo mínimo de este comportamiento.
Chinmay Kanchi
No puedo replicar esto en una aplicación simple, solo puede ocurrir en algunas situaciones muy específicas y no tengo tiempo para rastrear el error. Voy a aceptar tu respuesta. Salud.
Chinmay Kanchi
@ChinmayKanchi Seamos más claros. Tomaré por ejemplo de nuevo gparted. Cuando ejecuta desde la terminal sudo gparted, ejecuta /usr/sbin/gpartedarchivos con privilegios de root. Cuando comienza gparteddesde la GUI, comienza de hecho gparted-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 a pkexec gparted. Entonces, nada que ver con sudo. Y este comando que debes usar en la terminal, no sudo gparted.
Radu Rădeanu
1
@ChinmayKanchi sudodebe usarse solo para aplicaciones de shell, no para aplicaciones GUI. Ver man sudoy man pkexecen este sentido.
Radu Rădeanu
Sí, conozco tus dos puntos. Mi situación es que tengo una aplicación GUI (escrita por mí) que intenta iniciar un programa de shell (un demonio, también escrito por mí) usando sudo. Por alguna razón, al hacer esto, pkexec se invoca en lugar de sudo, lo que significa que las políticas de sudo que he creado para el demonio se ignoran.
Chinmay Kanchi