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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
<chapter id="security">
<title
>&kppp; und die Sicherheit</title>
<para
>Dieses Kapitel ist hauptsächlich für Administratoren(<systemitem
>root</systemitem
>), Leute mit hohen Sicherheitsansprüchen oder einfach technisch Interessierte. Es ist nicht notwendig, dieses Kapitel zu lesen, wenn Sie nur &Linux; für sich zu Hause laufen lassen (obwohl Sie vielleicht etwas Neues lernen könnten, wenn Sie es lesen).</para>
<sect1 id="security-restricting-access">
<title
>Den Zugang zu &kppp; beschränken</title>
<para
>Ein Systemadministrator möchte vielleicht Zugang zu &kppp; auf diejenigen beschränken, denen es erlaubt ist, es zu benutzen. Es gibt zwei Wege, dies zu tun:</para>
<sect2 id="security-group-permissions">
<title
>Den Zugang zu &kppp; durch Gruppenrechte beschränken</title>
<para
>Man erstellt zunächst eine neue Benutzergruppe (sie könnte z.B. <systemitem
>dialout</systemitem
> heissen) und fügt jeden Benutzer, der &kppp; benutzen darf, zu dieser Gruppe hinzu. Dann tippt man folgendes ein:</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
>Dabei wird vorausgesetzt, dass sich &kde; in <filename class="directory"
>/opt/kde</filename
> befindet und die neue Gruppe <systemitem
>dialout</systemitem
> heisst.</para>
</sect2>
<sect2 id="security-kppps-way">
<title
>Den Zugang mit den Mitteln von &kppp; beschränken</title>
<para
>Beim Start überprüft &kppp;, ob eine Datei <filename
>/etc/kppp.allow</filename
> existiert. Falls es eine solche Datei gibt, können nur Benutzer, die in dieser Datei aufgelistet sin, eine Verbindung herstellen. Diese Datei muss für jeden Benutzer lesbar sein (natürlich <emphasis
>nicht</emphasis
> für jeden schreibbar). Nur Benutzernamen werden erkannt, man kann also keine <acronym
>UID</acronym
> verwenden. Hier ein kurzes Beispiel:</para>
<screen
># /etc/kppp.allow
# Kommentare und Leerzeilen werden ignoriert.
#
fred
karl
daisy
</screen>
<para
>Im obigen Beispei dürfen nur die Benutzer <systemitem
>fred</systemitem
>, <systemitem
>karl</systemitem
> und <systemitem
>daisy</systemitem
> eine Verbindung herstellen. Außerdem darf das jeder Benutzer mit der <acronym
>UID</acronym
> 0 (daher muss root nicht explizit genannt werden).</para>
</sect2>
</sect1>
<sect1 id="security-why-suid">
<title
>&kppp; hat das <acronym
>SUID</acronym
>-Bit gesetzt. Wo bleibt die Sicherheit?</title>
<para
>Es ist realistisch gesehen nicht möglich, ein Wählprogramm ohne gesetztes <acronym
>SUID</acronym
>-Bit zu schreiben, das sicher und dabei für unerfahrene Benutzer einfach zu benutzen ist. &kppp; geht das Sicherheitsproblem mit folgender Strategie an:</para>
<itemizedlist>
<listitem>
<para
>Gleich nach dem Programmstart startet &kppp; einen neuen Prozess.</para>
</listitem>
<listitem>
<para
>Der Masterprozess (der die <acronym
>GUI</acronym
>, Benutzerinteraktion u.ä. verwaltet) legt den <acronym
>SUID</acronym
>-Status danach ab und läuft dann mit den normalen Benutzerprivilegien.</para>
</listitem>
<listitem>
<para
>Der Slaveprozess behält seine Privilegien bei und kümmert sich um alles, für das man <systemitem
>root</systemitem
>-Rechte benötigt. Um diesen Teil sicher zu machen, werden hier keine Funktionen der &kde;-/&Qt;-Bibliotheken aufgerufen, sondern nur einfache Funktionen der C-Bibliothek. Der Quellcode für diesen Prozess ist kurz (etwa 500 Zeilen) und gut dokumentiert. Dadurch ist es einfach, Sicherheitslöcher zu entdecken.</para>
</listitem>
<listitem>
<para
>Master- und Slaveprozess kommunizieren mit standard &UNIX; <acronym
>IPC</acronym
>.</para>
</listitem>
</itemizedlist>
<para
>Vielen Dank an Harri Porten für das Schreiben dieses exzellenten Quelltextes. Ich dachte, es sei unmöglich - er schrieb es in einer Woche.</para>
</sect1>
</chapter>
|