<chapter id="security"> <title >&kppp; і питання безпеки</title> <para >Цей розділ призначено для тих користувачів, які мають права адміністраторів (<systemitem >root</systemitem >) і ставлять перед собою мету, що полягає у підвищенні безпеки системи, або просто цікавляться технічними аспектами програми. Вам не обов’язково читати цей розділ, якщо ви користуєтеся &Linux; вдома, але все ж з нього ви зможете дізнатися про декілька корисних речей.</para> <sect1 id="security-restricting-access"> <title >Обмеження доступу до &kppp;</title> <para >Ймовірно, системний адміністратор забажає обмежити коло осіб, яким буде дозволено доступ до користування &kppp;. Існує декілька способів досягти цієї мети.</para> <sect2 id="security-group-permissions"> <title >Обмеження доступу на основі дозволів груп</title> <para >Створіть нову групу (ймовірно, її слід назвати <systemitem >dialout</systemitem > або щось подібне), і додайте всіх користувачів, яким буде дозволено доступ до &kppp; до цієї групи. Потім введіть у командному рядку такі команди:</para> <screen ><prompt >#</prompt > <userinput ><command >chown</command > <option >root.dialout</option > <filename >/opt/kde/bin/kppp</filename ></userinput> <prompt >#</prompt > <userinput ><command >chmod</command > <option >4750</option > <filename >/opt/kde/bin/kppp</filename ></userinput > </screen> <para >Тут ми припускали, що &kde; було встановлено до <filename class="directory" > /opt/kde/</filename >, а назвою нової групи є <systemitem >dialout</systemitem >.</para> </sect2> <sect2 id="security-kppps-way"> <title >Обмеження доступу засобами &kppp;</title> <para >Перш ніж виконувати будь-які дії, &kppp; перевіряє наявність файла з назвою <filename >/etc/kppp.allow</filename >. Якщо такий файл існує, вихід на зовнішню лінію буде дозволено лише переліченим у цьому файлі користувачам. Цей файл має бути придатним для читання для всіх користувачів (але, звичайно ж, <emphasis >НЕ</emphasis > для запису). Використовувати можна лише назви облікових записів, використовувати <acronym >UID</acronym > не можна. Ось коротенький приклад вмісту такого файла:</para> <screen ># /etc/kppp.allow # рядки коментарів, на зразок цього, буде # проігноровано разом з порожніми рядками ivan yurko stepan </screen> <para >У наведеному вище прикладі, доступ до зовнішньої лінії матимуть лише користувачі <systemitem >ivan</systemitem >, <systemitem >yurko</systemitem > і <systemitem >stepan</systemitem >, так само, як будь-який користувач з <acronym >UID</acronym >, який починається з 0 (отже, вам не обов’язково явно вказувати користувача root у цьому файлі).</para> </sect2> </sect1> <sect1 id="security-why-suid"> <title >Для &kppp; увімкнено <acronym >SUID</acronym >-біт! Як це вплине на безпеку системи?</title> <para >Майже неможливо написати інструмент додзвону, який не мав би увімкненого біту <acronym >SUID</acronym > і був водночас безпечним і простим у користуванні для недосвідчених користувачів. У &kppp; питання безпеки вирішено за допомогою наведеної нижче стратегії.</para> <itemizedlist> <listitem> <para >Одразу після запуску програми, &kppp; розгалужується.</para> </listitem> <listitem> <para >Основний процес, який обробляє всі дії, пов’язані з графічним інтерфейсом користувача (тобто взаємодією з користувачем), після відгалуження знімає з себе <acronym >SUID</acronym >-біт і виконується з правами звичайного користувача.</para> </listitem> <listitem> <para >Підлеглий процес зберігає права доступу, він відповідатиме за всі дії, для виконання яких потрібні права адміністратора (<systemitem >root</systemitem >). Щоб підвищити безпеку цієї частини програми, у ній не використовуються виклики бібліотек &kde; або &Qt;, лише виклики простих бібліотек. Вихідні коди, які відповідають за цей процес є дуже короткими (близько 500 рядків) і дуже добре документованими, отже ви можете легко перевірити код на наявність прогалин у безпеці.</para> </listitem> <listitem> <para >Основний і підлеглий процеси обмінюються відомостями за допомогою стандартного протоколу &UNIX;, <acronym >IPC</acronym >.</para> </listitem> </itemizedlist> <para >Особлива подяка Harri Porten за те, що він написав цю частину коду. Це здавалося неможливим, але він впорався з роботою за один тиждень.</para> </sect1> </chapter>