# Como funciona

## Introdução

O PolicyKit tem uma forma simples de trabalhar, mas necessita de algumas alterações no desenhado das aplicações que o desejam usar para pedir senhas.

## O problema

Nas aplicações gráficas, a forma comum de ganhar privilégios de 'root' é iniciá-las como 'root', mas existem diversos riscos de segurança ao usar este método e também permite um bom mapeamento das acções. Não existe uma forma de separar as acções como a instalação de pacotes e uma actualização do sistema. Todos os utilizadores que quiserem usá-la deverão ter a senha de 'root'. Outra abordagem comum é usar o 'sudo' mas, assim que iniciar uma aplicação com o 'sudo', irá ter todas as permissões que o utilizador de 'root' tiver. Se, por exemplo, a aplicação gráfica tiver uma janela para seleccionar os ficheiros, essa janela irá correr como 'root', o que significa que o utilizador conseguir apagar qualquer ficheiro na sua máquina ou mesmo copiar os ficheiros dos outros utilizadores.

## A solução

Com o PolicyKit, este problema fica resolvido. A aplicação em questão só precisa de separar o código privilegiado para outra aplicação, chamada de 'auxiliar' (que não terá nenhuma interface gráfica) e depois mapeia as acções desejadas num ficheiro .policy. O PolicyKit irá então carregar este ficheiro e poderá a seguir autenticar as aplicações que usarem estas acções. A utilização das aplicações activadas por &DBus; é a melhor, se não a única, forma de colocar uma aplicação auxiliar em execução com privilégios de 'root'.

Com este desenho, a aplicação gráfica invoca uma acção da aplicação auxiliar, através do &DBus;, que irá então iniciar o programa auxiliar com privilégios de 'root', informando-o da acção que foi pedida e qual a aplicação que a pediu. A aplicação auxiliar poderá então invocar o agente do PolicyKit para ver se essa aplicação pode efectuar a tarefa indicada. No caso de o programa auxiliar ver que a aplicação não tinha permissões suficientes, a interface irá então necessitar de pedir ao PolicyKit para obter uma autorização.

Quando o PolicyKit receber o pedido de obtenção de autorização, irá comunicar com um agente disponível, o qual poderá ser o &policykit-kde;, se estiver disponível. Depois de uma autenticação bem-sucedida, a aplicação gráfica necessita de invocar o programa auxiliar, repetindo a mesma operação de novo.