<chapter id="security">
<title
>Säkerhetshänsyn med &kppp;</title>

<para
>Det här avsnittet är i huvudsak ämnat för systemadministratörer (<systemitem
>root</systemitem
>), de med höga säkerhetskrav eller helt enkelt tekniskt intresserade. Det är inte nödvändigt att läsa det här om du bara använder &Linux; hemma själv, även om du i alla fall kan lära dig ett och annat.</para>

<sect1 id="security-restricting-access">
<title
>Att begränsa tillgången till &kppp;</title>

<para
>En systemadministratör kan vilja begränsa tillgången med avseende på vem som får använda &kppp;. Det finns två sätt att åstadkomma detta.</para>

<sect2 id="security-group-permissions">
<title
>Att begränsa tillgången med gruppskydd</title>

<para
>Skapa en ny grupp (du skulle kunna vilja döpa den till <systemitem
>dialout</systemitem
> eller något liknande), och lägg till alla användare som ska få lov att använda &kppp; i den här gruppen. Skriv sedan på kommandoraden:</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
>Det här förutsätter att &kde; installerades i <filename class="directory"
> /opt/kde/</filename
> och att den nya gruppen heter <systemitem
>dialout</systemitem
>.</para>

</sect2>

<sect2 id="security-kppps-way">
<title
>Att begränsa tillgången på &kppp;s eget sätt</title>

<para
>Innan det gör någonting, kontrollerar &kppp; om det finns en fil som heter <filename
>/etc/kppp.allow</filename
>. Om den här filen finns, tillåts bara användare som namnges i den här filen att ringa upp. Den här filen måste vara läsbar av alla (men förstås <emphasis
>INTE</emphasis
> skrivbar). Bara inloggningsnamn känns igen, så du kan inte använda en <acronym
>UID</acronym
> i den här filen. Här är ett kort exempel:</para>

<screen
># /etc/kppp.allow
# kommentarrader som den här ignoreras
# precis som tomma rader

hans
karl
lena
</screen>

<para
>I det ovanstående exemplet, tillåts bara användarna <systemitem
>hans</systemitem
>, <systemitem
>karl</systemitem
> och <systemitem
>lena</systemitem
> att ringa upp, liksom alla användare med <acronym
>UID</acronym
> 0 (så du behöver inte explicit ange root i filen).</para>

</sect2>

</sect1>

<sect1 id="security-why-suid">
<title
>Kppp har <acronym
>SUID</acronym
>-biten satt? Vad händer då med säkerheten?</title>

<para
>Det är mer eller mindre omöjligt att skriva ett uppringningsprogram som både är säkert och lätt att använda för ovana användare utan att sätta <acronym
>SUID</acronym
>-biten. &kppp; hanterar säkerhetsproblemen med följande strategi.</para>

<itemizedlist>
<listitem>
<para
>Omedelbart efter att programmet har startat, så skapar &kppp; en ny process (fork).</para>
</listitem>
<listitem>
<para
>Huvudprocessen, som hanterar hela det grafiska gränssnittet med användarpåverkan, släpper <acronym
>SUID</acronym
>-tillståndet efter den nya processen skapats, och kör med normala användarrättigheter.</para>
</listitem>
<listitem>
<para
>Den nya processen behåller sina rättigheter, och ansvarar för alla åtgärder som behöver rättigheter som <systemitem
>root</systemitem
>. För att hålla den här delen säker, så används inga anrop till &kde;- eller &Qt;-biblioteken, utan bara enkla biblioteksanrop. Källkoden för den här processen är kort (omkring 500 rader) och väldokumenterad, så det är lätt att kontrollera den för att hitta säkerhetsluckor.</para>
</listitem>
<listitem>
<para
>Huvudprocessen och den nya processen kommunicerar med vanliga &UNIX; <acronym
>IPC</acronym
>.</para>
</listitem>
</itemizedlist>

<para
>Särskilt tack till Harri Porten för att ha skrivit den här utmärkta koden. Det ansågs omöjligt, men han lyckades inom en vecka.</para>

</sect1>

</chapter>
