# Jak to działa?

## Wstęp

Zasada działania PolicyKit jest prosta, ale wymaga zmian w programach, które mają go wykorzystywać do zapytań o hasło.

## Problem

W programach graficznych, najczęściej wykorzystywanym sposobem uzyskania uprawnień administratora jest wywołanie programu z poziomu użytkownika root, co jednak rodzi wiele zagrożeń bezpieczeństwa i nie pozwala na wybiórcze mapowanie uprawnień do działań. Nie ma możliwości oddzielenia uprawnień do instalacji pakietu od uprawnienia do podniesienia wersji systemu. W każdym przypadku, konieczne jest podanie hasła administratora. Drugim sposobem jest skorzystanie z komendy sudo, jednak po takim uruchomieniu programu, użytkownik ma pełne uprawnienia administratora.Jeżeli taka aplikacja wyświetla okno wyboru plików, działanie w trybie użytkownika root pozwala na usunięcie dowolnego pliku w systemie, a nawet na oglądanie i kopiowanie plików innych użytkowników.

## Rozwiązanie

Program PolicyKit rozwiązuje ten problem. Programista aplikacji musi wydzielić kod uprzywilejowany do oddzielnego programu, często nazywanego programem pomocniczym (bez interfejsu graficznego), oraz zdefiniować działania wymagające autoryzacji w pliku .policy. PolicyKit wczytuje ten plik i może autoryzować programy do wykonywania tych działań. Wykorzystanie interfejsu &DBus; do aktywacji aplikacji jest najlepszym jeśli nie jedynym sposobem uruchamiania aplikacji pomocniczych wymagających uprawnień administratora.

W tym rozwiązaniu aplikacja graficzna wywołuje działanie programu pomocniczego za pomocą interfejsu &DBus;, co uruchamia go z uprawnieniami administratora. W wywołaniu przekazywane są informacje o tym jakie działanie ma zostać wykonane i jaka aplikacja go wywołała. Program pomocniczy następnie wywołuje agenta PolicyKit aby potwierdzić autoryzację do wykonania danego działanie przez daną aplikację, agent PolicyKit zwraca informację do programu pomocniczego o potwierdzeniu autoryzacji do wykonania danego działania.W przypadku gdy program pomocniczy otrzyma informację że aplikacja nie posiada odpowiedniej autoryzacji, PolicyKit wyświetli okno z prośbą o autoryzację do wykonania działania.

Jeżeli PolicyKit otrzyma żądanie autoryzacji, uruchamia dostępnego agenta, którym może być &policykit-kde;. Po pozytywnej autoryzacji aplikacja graficzna musi ponownie wywołać program pomocniczy aby wykonać działanie.