1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
<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>
|