# Hoe het werkt

## Overzicht

PolicyKit heeft een eenvoudige manier van werken, maar het vereist enige ontwerpwijzigingen van de applicaties die het willen gebruiken om wachtwoorden op te vragen.

## Het probleem

In GUI applicaties is de gewone manier om root-privileges te verkrijgen, het te starten als root, maar er zijn verschillende beveiligingsrisico's om deze methode te gebruiken en het stelt u niet in staat om een goed acties te controleren. Er is geen manier om acties zoals pakketinstallatie of systeem-opwaardering te onderscheiden. Alle gebruikers die dat willen gebruiken moeten het root-wachtwoord hebben. Een andere algemene benadering is sudo te gebruiken maar als u eenmaal een applicatie hebt gestart met sudo dan hebt u alle rechten van de root-gebruiker. Als bijvoorbeeld de GUI-applicatie een dialoog heeft om bestanden te selecteren dan draait die dialoog als root wat betekent dat de gebruiker in staat is om elk bestand te verwijderen op zijn machine of zelfs bestanden van andere gebruikers kan kopiëren.

## De oplossing

Met PolicyKit is dit probleem opgelost. De applicatie in kwestie hoeft alleen de geprivilegieerde code af te scheiden in een andere applicatie, vaak een helper genoemd (die geen GUI zal hebben), de gewenste acties worden in een .policy bestand ondergebracht. PolicyKit laadt dan dit bestand en het kan nu applicaties authenticeren om deze acties te gebruiken. Het gebruik van &DBus; geactiveerde applicaties is de beste zo niet de enige manier om een helper-applicatie te laten draaien met root-privileges.

Met dit ontwerp roept de GUI-applicatie een actie in van de helper-applicatie via &DBus;, die de helper zal opstarten met root-privileges en informeert het welke actie is gevraagd en welke applicatie dit heeft verzocht. De helper-applicatie roept nu de PolicyKit-agent aan om na te gaan of die applicatie de gegeven taak mag uitvoeren, de helper zou moeten rapporteren of het de gevraagde actie kon uitvoeren. In het geval dat de helper constateert dat de applicatie niet genoeg rechten heeft dan zal de GUI aan PolicyKit moeten vragen om een autorisatie te verkrijgen.

Als PolicyKit het verzoek ontvangt om een autorisatie te verkrijgen dan start het een beschikbare assistent, die &policykit-kde; zou kunnen zijn indien beschikbaar. Na een succesvolle authenticatie zal de GUI-applicatie de helper opnieuw moeten aanroepen en om dezelfde bewerking vragen.