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