<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 # строки комментариев игнорируются, # как и пустые строки fred karl daisy </screen> <para >В приведённом примере только пользователи <systemitem >fred</systemitem >, <systemitem >karl</systemitem > и <systemitem >daisy</systemitem > могут использовать программу, а так же пользователи с <acronym >UID</acronym > 0 (нет необходимости добавлять суперпользователя в этот файл).</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 >GUI</acronym > (такие как взаимодействие с пользователем), теряет бит <acronym >SUID</acronym > после разветвления и выполняется с привилегиями обычного пользователя.</para> </listitem> <listitem> <para >Порождённый процесс сохраняет привилегии и отвечает за все действия, которым нужны привилегии <systemitem >суперпользователя</systemitem >. Для обеспечения безопасности этой части, в ней не используются вызовы библиотек &kde; и &Qt;, а только вызовы обычных библиотек. Исходный код этого процесса короток (около 500 строк) и хорошо документирован, его легко проверить на наличие дыр в безопасности.</para> </listitem> <listitem> <para >Головной и порождённый процессы взаимодействуют согласно стандартному <acronym >IPC</acronym > (взаимодействие процессов) ОС &UNIX;.</para> </listitem> </itemizedlist> <para >Особая благодарность выражается Harri Porten за написание этого замечательного участка программы. Задача казалась невыполнимой, но он сумел решить её за одну неделю.</para> </sect1> </chapter>