<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>
