# Як це працює

## Огляд

Спосіб роботи PolicyKit є досить простим, але для роботи системи потрібні певні зміни у побудові програм, які мають надсилати запити на паролі.

## Проблема

Для програм з графічним інтерфейсом типовим шляхом отримання привілеїв користувача root є запуск цих програм від імені користувача root, але такий запуск спричиняє до певних проблем з безпекою системи і належним виконанням дій. За такого способу неможливо відділити дію на зразок встановлення пакунка від дії з оновлення системи. Всі користувачі, які бажають виконати певну дію мають знати пароль користувача root. Іншим поширеним підходом є використання команди sudo, але після запуску програми за допомогою sudo ваш користувач матиме всі права доступу, які має користувач root. Якщо, наприклад, у програмі з графічним інтерфейсом є діалогове вікно вибору файлів, це діалогове вікно буде запущено від імені користувача root, що означає, що користувач зможе вилучити будь-який файл на своєму комп’ютері або копіювати файли інших користувачів.

## Розв’язання

За допомогою PolicyKit ви зможете розв’язати цю проблему. Програма просто має відокремити код, для виконання якого потрібні підвищені права доступу, до окремої програми, яку часто називають допоміжною (helper) і яка не має графічного інтерфейсу, а потім відобразити потрібні дії до файла .policy. PolicyKit завантажить цей файл і зможе розпочати процедуру розпізнавання для програми, яка бажає виконати ці дії. Використання програм, які активізуються за допомогою &DBus; є найкращим, якщо не єдиним, шляхом відокремлення допоміжної програми для запуску з привілеями користувача root.

За такої побудови програма з графічним інтерфейсом викликає дію у допоміжній програмі за допомогою &DBus;, після цього допоміжна програма запускається з привілеями користувача root, а основна програма повідомляє допоміжній, яка дія їй потрібна і яка програма вимагає цієї дії. Допоміжна програма викликає агент PolicyKit, щоб дізнатися, чи може програма виконувати подібну дію, а допоміжна програма повідомляє, чи може бути виконано потрібну дію. Якщо допоміжній програмі стає відомо, що основна програма не має достатньо прав на виконання дії, допоміжна програма надсилає запит до PolicyKit на отримання уповноваження.

Коли система PolicyKit отримує запит на уповноваження, вона відкриває вікно доступного агента, яким може бути &policykit-kde;. Після успішного розпізнавання програма з графічним інтерфейсом повторно викликає допоміжну програму для виконання потрібної їй дії.