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