# Cómo funciona

## Visión general

PolicyKit funciona de manera simple, pero necesita que las aplicaciones que lo usen para solicitar contraseñas hagan algunos cambios en su diseño.

## El problema

En las aplicaciones gráficas, la manera típica de obtener privilegios de administrador es iniciarlas como tal, pero este método conlleva riesgos de seguridad y no permite mapear las acciones correctamente. No hay manera de separar acciones como instalar-paquete de actualizar-sistema. Todos los usuarios que quieran hacerlo deben tener la contraseña de administrador. Otra opción es utilizar sudo, pero en cuanto se inicia la aplicación con ello gozará de todos los privilegios del administrador. Si la aplicación gráfica tiene un diálogo para seleccionar archivos, este se ejecutará como administrador, lo que significa que el usuario podrá eliminar cualquier archivo del sistema o copiar archivos de otros usuarios.

## La solución

Con PolicyKit este problema se resuelve. La aplicación en cuestión solo necesita separar el código con privilegios en otra aplicación, normalmente llamada «helper» (que no tendrá interfaz gráfica), y mapear las acciones deseadas en archivo .policy. PolicyKit cargará este archivo y podrá autenticar las aplicaciones para usar dichas acciones. El uso de aplicaciones con &DBus; activado es la mejor, si no la única, manera de ejecutar un helper con privilegios de administración.

Con este diseño, la aplicación GUI invoca una acción de la aplicación de ayuda a través de &DBus;, la cual iniciará la ayuda con privilegios de root y notificará qué acción se ha solicitado y qué aplicación la ha solicitado. Después, la aplicación de ayuda invoca al agente PolicyKit para comprobar si la aplicación puede realizar la tarea en cuestión e informa de si podría realizar la acción solicitada. En caso de que la aplicación de ayuda determine que la aplicación no tiene suficientes privilegios, la GUI tendrá que pedir a PolicyKit que obtenga una autorización.

Cuando PolicyKit recibe una petición de autorización se lo notifica a un agente disponible, que si estuviese disponible podría ser &policykit-kde;. Tras una autenticación con éxito, la interfaz de usuario debe llamar al helper repitiendo la misma operación.