<!--
     The FreeBSD Dutch Documentation Project

     $FreeBSD$
     $FreeBSDnl: nl_NL.ISO8859-1/books/handbook/network-servers/chapter.sgml,v 1.42 2005/04/24 19:39:20 siebrand Exp $
     Gebaseerd op: 1.65
-->

<chapter id="network-servers">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Murray</firstname>
	<surname>Stokely</surname>
	<contrib>Gereorganiseerd door </contrib>
      </author>
    </authorgroup>
    <!-- 23 July 2004 -->
    <authorgroup>
      <author>
	<firstname>Siebrand</firstname>
	<surname>Mazeland</surname>
	<contrib>Vertaald door </contrib>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>Netwerkdiensten</title>

  <sect1 id="network-servers-synopsis">
    <title>Overzicht</title>

    <para>Dit hoofdstuk behandelt een aantal veelgebruikte
      netwerkdiensten op &unix; systemen.  Er wordt ingegaan op de
      installatie, het instellen, testen en beheren van verschillende
      typen netwerkdiensten.  Overal in dit hoofdstuk staan
      voorbeeldbestanden met instellingen waar de lezer zijn voordeel
      mee kan doen.</para>

    <para>Na het lezen van dit hoofdstuk weet de lezer:</para>

    <itemizedlist>
      <listitem>
	<para>Hoe om te gaan met de <application>inetd</application>
	  daemon;</para>
      </listitem>

      <listitem>
	<para>Hoe een netwerkbestandssysteem opgezet kan worden;</para>
      </listitem>

      <listitem>
	<para>Hoe een netwerkinformatiedienst (NIS) opgezet kan worden
	  voor het delen van gebruikersaccounts;</para>
      </listitem>

      <listitem>
	<para>Hoe automatische netwerkinstellingen gemaakt kunnen
	  worden met DHCP;</para>
      </listitem>

      <listitem>
	<para>Hoe een domeinnaam server opgezet kan worden;</para>
      </listitem>

      <listitem>
	<para>Hoe een <application>Apache</application> HTTP Server
	  opgezet kan worden;</para>
      </listitem>

      <listitem>
	<para>Hoe een File Transfer Protocol (FTP) Server opgezet kan
	  worden;</para>
      </listitem>

      <listitem>
	<para>Hoe een bestands- en printserver voor &windows; clients
	  opgezet kan worden met
	  <application>Samba</application>;</para>
      </listitem>

      <listitem>
	<para>Hoe datum en tijd gesynchroniseerd kunnen worden en hoe
	  een tijdserver opgezet kan worden met het NTP
	  protocol.</para>
      </listitem>

    </itemizedlist>

    <para>Veronderstelde voorkennis:</para>

    <itemizedlist>
      <listitem>
	<para>Basisbegrip van de scripts in
	  <filename>/etc/rc</filename>;</para>
      </listitem>

      <listitem>
	<para>Bekend zijn met basis netwerkterminologie;</para>
      </listitem>

      <listitem>
	<para>Kennis van de installatie van software van derde partijen
	  (<xref linkend="ports">).</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="network-inetd">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Chern</firstname>
	  <surname>Lee</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>De <application>inetd</application>
      <quote>Super-Server</quote></title>

    <sect2 id="network-inetd-overview">
      <title>Overzicht</title>

      <para>&man.inetd.8; wordt de <quote>internet Super-Server</quote>
	genoemd, omdat die verbindingen voor meerdere diensten beheert.
	Als door <application>inetd</application> een verbinding wordt
	ontvangen, bepaalt die voor welk programma de verbinding
	bedoeld is, spawnt dat proces en delegeert de socket (het
	programma wordt gestart met de socket van de dienst als
	zijn standaard invoer, uitvoer en foutbeschrijvingen).  Het
	draaien van &eacute;&eacute;n instantie van
	<application>inetd</application> reduceert de load op een
	systeem in vergelijking met het in stand-alone modus draaien
	van alle daemons.</para>

      <para><application>inetd</application> wordt primair gebruikt om
	andere daemons aan te roepen, maar het handelt een aantal
	triviale protocollen direct af, zoals
	<application>chargen</application>,
	<application>auth</application> en
	<application>daytime</application>.</para>

      <para>In deze paragraaf worden de basisinstellingen van
	<application>inetd</application> behandeld met de opties vanaf
	de commandoregel en met het instellingenbestand
	<filename>/etc/inetd.conf</filename>.</para>
    </sect2>

    <sect2 id="network-inetd-settings">
      <title>Instellingen</title>

      <para><application>inetd</application> wordt gestart door het
	<filename>/etc/rc.conf</filename> systeem.  De
	optie <literal>inetd_enable</literal> staat standaard op
	<literal>NO</literal>, maar wordt door
	<application>sysinstall</application> vaak ingeschakeld door de
	instellingen van het medium beveiligingsprofiel.  Door het
	instellen van
	<programlisting>inetd_enable="YES"</programlisting> of
	<programlisting>inetd_enable="NO"</programlisting> in
	<filename>/etc/rc.conf</filename> wordt
	<application>inetd</application> bij het opstarten van een
	systeem wel of niet ingeschakeld.</para>

      <para>Dan kunnen er ook nog een aantal commandoregelopties aan
	<application>inetd</application> meegegeven worden met de optie
	<literal>inetd_flags</literal>.</para>
    </sect2>

    <sect2 id="network-inetd-cmdline">
      <title>Commandoregelopties</title>

      <para><application>inetd</application> overzicht:</para>

      <para><literal>inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a adres | hostnaam]
	    [-p bestandsnaam] [-R rate] [instellingenbestand]</literal></para>

      <variablelist>
	<varlistentry>
	  <term>-d</term>

	  <listitem>
	    <para>Schakel debugging in.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-l</term>

	  <listitem>
	    <para>Schakel het loggen van succesvolle verbindingen
	      in.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-w</term>

	  <listitem>
	    <para>Schakel TCP Wrapping voor externe diensten in (staat
	      standaard aan).</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-W</term>

	  <listitem>
	    <para>Schakel TCP Wrapping voor internet diensten uit
	      <application>inetd</application> in (staat standaard
	      aan).</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-c maximum</term>

	  <listitem>
	    <para>Geeft het maximale aantal gelijktijdige verzoeken voor
	      iedere dienst aan.  De standaard is ongelimiteerd.  Kan
	      per dienst ter zijde geschoven worden met de parameter
	      <option>max-child</option>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-C rate</term>

	  <listitem>
	    <para>Geeft het maximale aantal keren aan dat een dienst
	      vanaf een bepaald IP adres per minuut aangeroepen kan
	      worden.  Kan per dienst ter zijde geschoven worden met de
	      parameter
	      <option>max-connections-per-ip-per-minute</option>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-R rate</term>

	  <listitem>
	    <para>Geeft het maximale aantal keren aan dat een dienst
	      per minuut aangeroepen kan worden.  De standaard is 256.
	      De instelling <literal>0</literal> geeft aan dat er geen
	      limiet is.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-a</term>

	  <listitem>
	    <para>Geeft een of meer IP adres associaties aan.  Er kan
	      ook een hostnaam opgegeven worden, in welk geval het IPv4
	      of IPv6 adres dat met de hostnaam overeenkomst wordt
	      gebruikt.  Meestal wordt er een hostnaam gebruikt als
	      <application>inetd</application> in een &man.jail.8;
	      draait en de hostnaam dus overeenkomst met de
	      &man.jail.8;-omgeving.</para>

	    <para>Als er een hostnaam wordt aangegeven en zowel IPv4
	      als IPv6 zijn nodig, dan moeten er twee instellingen
	      in <filename>/etc/inetd.conf</filename> gemaakt worden,
	      voor beide protocollen een.  Een TCP-gebaseerde
	      dienst heeft bijvoorbeeld twee regels met instellingen
	      nodig: <literal>tcp4</literal> en <literal>tcp6</literal>
	      voor beide protocollen.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>-p</term>

	  <listitem>
	    <para>Geeft het bestand aan waarin het proces ID opgeslagen
	      moet worden.</para>
	  </listitem>
	</varlistentry>
      </variablelist>

      <para>Al deze opties kunnen aan <application>inetd</application>
	meegegeven worden met de optie <literal>inetd_flags</literal>
	in <filename>/etc/rc.conf</filename>.  Standaard staat
	<literal>inetd_flags</literal> op <literal>&ndash;wW</literal>,
	dat TCP wrapping voor de interne en externe diensten van
	<application>inetd</application> inschakelt.  Voor beginnende
	gebruikers hoeven deze waarden meestal niet aangepast te worden
	of ingegeven te worden in
	<filename>/etc/rc.conf</filename>.</para>

      <note>
	<para>Een externe dienst is een daemon buiten
	  <application>inetd</application>, die wordt aangesproken als
	  er een verbinding voor wordt ontvangen.  Een interne dienst
	  is een dienst die <application>inetd</application> vanuit
	  zichzelf kan aanbieden.</para>
      </note>
    </sect2>

    <sect2 id="network-inetd-conf">
      <title><filename>inetd.conf</filename></title>

      <para>De instellingen van <application>inetd</application>
	worden beheerd in <filename>/etc/inetd.conf</filename>.</para>

      <para>Als er een wijziging wordt aangebracht in
	<filename>/etc/inetd.conf</filename>, dan kan
	<application>inetd</application> gedwongen worden om de
	instellingen opnieuw in te lezen door een HangUP signaal naar
	het <application>inetd</application> proces te sturen:</para>

      <example id="network-inetd-hangup">
	<title><application>inetd</application> een HangUP signaal
	  sturen</title>

	<screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen>
      </example>

      <para>Iedere regel in het bestand met instellingen heeft
	betrekking op een individuele daemon.  Commentaar wordt vooraf
	gegaan door een <literal>#</literal>.  De opmaak van
	<filename>/etc/inetd.conf</filename> is als volgt:</para>

      <programlisting>service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]
user[:group][/login-class]
server-program
server-program-arguments</programlisting>

      <para>Een voorbeeldregel voor de <application>ftpd</application>
	daemon met IPv4:</para>

      <programlisting>ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l</programlisting>

      <variablelist>
	<varlistentry>
	  <term>service-name</term>

	  <listitem>
	    <para>Dit is de dienstnaam van een daemon.  Die moet
	      overeenkomen met een dienst uit
	      <filename>/etc/services</filename>.  Hiermee kan de
	      poort waarop <application>inetd</application> moet
	      luisteren aangegeven worden.  Als er een nieuwe dienst
	      wordt gemaakt, moet die eerst in
	      <filename>/etc/services</filename> gezet worden.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>socket-type</term>

	  <listitem>
	    <para>Dit is <literal>stream</literal>,
	      <literal>dgram</literal>, <literal>raw</literal> of
	      <literal>seqpacket</literal>.  <literal>stream</literal>
	      moet gebruikt worden voor connectie gebaseerde TCP
	      daemons, terwijl <literal>dgram</literal> wordt gebruikt
	      voor daemons die gebruik maken van het
	      <acronym>UDP</acronym> transport protocol.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>protocol</term>

	  <listitem>
	    <para>Een van de volgende:</para>

	    <informaltable frame="none" pgwide="1">
	      <tgroup cols="2">
		<thead>
		  <row>
		    <entry>Protocol</entry>

		    <entry>Toelichting</entry>
		  </row>
		</thead>

		<tbody>
		  <row>
		    <entry>tcp, tcp4</entry>

		    <entry>TCP IPv4</entry>
		  </row>

		  <row>
		    <entry>udp, udp4</entry>

		    <entry>UDP IPv4</entry>
		  </row>

		  <row>
		    <entry>tcp6</entry>

		    <entry>TCP IPv6</entry>
		  </row>

		  <row>
		    <entry>udp6</entry>

		    <entry>UDP IPv6</entry>
		  </row>

		  <row>
		    <entry>tcp46</entry>

		    <entry>Zowel TCP IPv4 als v6</entry>
		  </row>

		  <row>
		    <entry>udp46</entry>

		    <entry>Zowel UDP IPv4 als v6</entry>
		  </row>
		</tbody>
	      </tgroup>
	    </informaltable>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]</term>

	  <listitem>
	    <para><option>wait|nowait</option> geeft aan of de daemon
	      die door <application>inetd</application> wordt
	      aangesproken zijn eigen sockets kan afhandelen of niet.
	      <option>dgram</option> sockettypen moeten de optie
	      <option>wait</option> gebruiken, terwijl streamsocket
	      daemons, die meestal multi-threaded zijn, de optie
	      <option>nowait</option> horen te gebruiken.
	      <option>wait</option> geeft meestal meerdere sockets aan
	      een daemon, terwijl <option>nowait</option> een child
	      daemon spawnt voor iedere nieuwe socket.</para>

	    <para>Het maximun aantal child daemons dat
	      <application>inetd</application> mag spawnen kan
	      ingesteld worden met de optie <option>max-child</option>.
	      Als een limiet van tien instanties van een bepaalde
	      daemon gewenst is, dan zou er <literal>/10</literal>
	      achter <option>nowait</option> gezet worden.</para>

	    <para>Naast <option>max-child</option> is er nog een andere
	      optie waarmee het maximale aantal verbindingen van een
	      bepaalde plaats naar een daemon ingesteld kan worden.
	      Dat kan met
	      <option>max-connections-per-ip-per-minute</option>.  Een
	      waarde van tien betekent hier dat er van iedere IP adres
	      maximaal tien verbindingen naar daemon tot stand gebracht
	      kunnen worden.  Dit kan gebruikt worden om bedoeld en
	      onbedoeld bronnengebruik van een machine te
	      voorkomen.</para>

	    <para>In dit veld is <option>wait</option> of
	      <option>nowait</option> verplicht.
	      <option>max-child</option> en
	      <option>max-connections-per-ip-per-minute</option> zijn
	      optioneel.</para>

	    <para>Een stream-type multi-threaded daemon zonder
	      <option>max-child</option> or
	      <option>max-connections-per-ip-per-minute</option>
	      limieten is eenvoudigweg:
	      <literal>nowait</literal>.</para>

	    <para>Dezelfde daemon met een maximale limiet van tien
	      daemons zou zijn: <literal>nowait/10</literal>.</para>

	    <para>Dezelfde instellingen met een limiet van twintig
	      connecties per IP adres per minuut en een totaal maximum
	      van tien child daemons zou zijn:
	      <literal>nowait/10/20</literal>.</para>

	    <para>Deze opties worden allemaal gebruikt door de
	      standaardinstelling voor de
	      <application>fingerd</application> daemon:</para>

	    <programlisting>finger stream  tcp     nowait/3/10 nobody /usr/libexec/fingerd fingerd -s</programlisting>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>user</term>

	  <listitem>
	    <para>Dit is de gebruikersnaam waar een daemon onder
	      draait.  Daemons draaien meestal als de gebruiker
	      <username>root</username>.  Om veiligheidsredenen draaien
	      sommige daemons onder de gebruiker
	      <username>daemon</username> of de gebruiker met de minste
	      rechten: <username>nobody</username>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>server-program</term>

	  <listitem>
	    <para>Het volledige pad van de daemon die uitgevoerd moet
	      worden als er een verbinding wordt ontvangen.  Als de
	      daemon een dienst is die door
	      <application>inetd</application> intern wordt geleverd,
	      dan moet de optie <option>internal</option> gebruikt
	      worden.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>server-program-arguments</term>

	  <listitem>
	    <para>Deze optie werkt samen met de optie
	      <option>server-program</option> en hierin worden de
	      argumenten ingesteld, beginnend met
	      <literal>argv[0]</literal>, die bij het starten aan de
	      daemon worden meegegeven.  Als
	      <command>mijndaemon -d</command> de commandoregel is,
	      dan zou <literal>mijndaemon -d</literal> de waarde van
	      <option>server-program-arguments</option> zijn.  Hier
	      geldt ook dat als de daemon een interne dienst is, hier
	      de optie <option>internal</option> moet worden.</para>
	  </listitem>
	</varlistentry>
      </variablelist>
    </sect2>

    <sect2 id="network-inetd-security">
      <title>Beveiliging</title>

      <para>Afhankelijk van het beveiligingsprofiel dat bij de
	installatie is gekozen, kunnen veel van de daemons van
	<application>inetd</application> standaard ingeschakeld zijn.
	Het is verstandig een daemon die niet noodzakelijk is uit te
	schakelen! Dat kan door een <literal>#</literal> voor de daemon
	in <filename>/etc/inetd.conf</filename> en dan een <link
	  linkend="network-inetd-hangup">hangup signaal naar inetd te
	  sturen</link>.  Sommige daemons, zoals
	<application>fingerd</application>, zijn wellicht helemaal niet
	gewenst omdat ze een aanvaller te veel informatie geven.</para>

      <para>Sommige daemons zijn zich niet echt bewust van beveiliging
	en hebben lange of niet bestaande time-outs voor
	verbindingspogingen.  Hierdoor kan een aanvaller langzaam veel
	verbindingen maken met een daemon en zo beschikbare bronnen
	verzadigen.  Het is verstandig voor die daemons de limietopties
	<option>max-connections-per-ip-per-minute</option> en
	<option>max-child</option> te gebruiken.</para>

      <para>TCP wrapping staat standaard aan.  Er staat meer informatie
	over het zetten van TCP restricties op de verschillende daemons
	die door <application>inetd</application> worden aangesproken
	in &man.hosts.access.5;.</para>
    </sect2>

    <sect2 id="network-inetd-misc">
      <title>Allerlei</title>

      <para><application>daytime</application>,
	<application>time</application>,
	<application>echo</application>,
	<application>discard</application>,
	<application>chargen</application> en
	<application>auth</application> zijn allemaal interne diensten
	van <application>inetd</application>.</para>

      <para>De dienst <application>auth</application> biedt
	identiteitsnetwerkdiensten (<application>ident</application>,
	<application>identd</application>) en is tot op een bepaald
	niveau instelbaar.</para>

      <para>Er staat meer informatie in &man.inetd.8;.</para>
    </sect2>
  </sect1>

  <sect1 id="network-nfs">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	  <contrib>Gereorganiseerd en verbeterd door </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Bill</firstname>
	  <surname>Swingle</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Netwerkbestandssysteem (NFS)</title>

    <indexterm><primary>NFS</primary></indexterm>

    <para>Het Netwerkbestandssysteem (Network File System) is een van
      de vele bestandssystemen die &os; ondersteunt.  Het staat ook wel
      bekend als <acronym role="Network File System">NFS</acronym>.
      Met <acronym role="Network File System">NFS</acronym> is het
      mogelijk om mappen en bestanden met anderen in een netwerk te
      delen.  Door het gebruik van <acronym
	role="Network File System">NFS</acronym> kunnen gebruikers en
      programma's bij bestanden op andere systemen op bijna dezelfde
      manier als bij hun eigen lokale bestanden.</para>

    <para>De grootste voordelen van <acronym>NFS</acronym> zijn:</para>

    <itemizedlist>
      <listitem>
	<para>Lokale werkstations gebruiken minder schijfruimte omdat
	  veel gebruikte data op &eacute;&eacute;n machine opgeslagen
	  kan worden en nog steeds toegankelijk is voor gebruikers via
	  het netwerk;</para>
      </listitem>

      <listitem>
	<para>Gebruikers hoeven niet op iedere machine een thuismap te
	  hebben.  Thuismappen kunnen op de <acronym>NFS</acronym>
	  server staan en op het hele netwerk beschikbaar zijn;</para>
      </listitem>

      <listitem>
	<para>Opslagapparaten als floppydisks, cd-rom drives en
	  &iomegazip; drives kunnen door andere machines op een netwerk
	  gebruikt worden.  Hierdoor kan het aantal drives met
	  verwijderbare media in een netwerk verkleind worden.</para>
      </listitem>
    </itemizedlist>

    <sect2>
      <title>Hoe <acronym>NFS</acronym> werkt</title>

      <para><acronym>NFS</acronym> bestaat uit tenminste twee
	hoofdonderdelen: een server en een of meer clients.  De client
	benadert de gegevens die op een server machine zijn opgeslagen
	via een netwerk.  Om dit mogelijk te maken moeten er een aantal
	processen ingesteld en gestart worden.</para>

      <note>
	<para>In &os;&nbsp;4.X is het hulpprogramma
	  <application>portmap</application> gebruikt in plaats van
	  <application>rpcbind</application>.  Dus in &os;&nbsp;4.X
	  moet elke <application>rpcbind</application> vervangen
	  worden door <application>portmap</application> in de
	  volgende voorbeelden.</para></note>

      <para>Op de server moeten de volgende daemons draaien:</para>
      <indexterm>
	<primary>NFS</primary>

	<secondary>server</secondary>
      </indexterm>

      <indexterm>
	<primary>fileserver</primary>

	<secondary>UNIX clients</secondary>
      </indexterm>

      <indexterm><primary><application>rpcbind</application></primary></indexterm>

      <indexterm><primary><application>portmap</application></primary></indexterm>

      <indexterm><primary><application>mountd</application></primary></indexterm>

      <indexterm><primary><application>nfsd</application></primary></indexterm>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="2">
	  <colspec colwidth="1*">

	  <colspec colwidth="3*">

	  <thead>
	    <row>
	      <entry>Daemon</entry>

	      <entry>Beschrijving</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <entry><application>nfsd</application></entry>

	      <entry>De <acronym>NFS</acronym> daemon die verzoeken van
		de <acronym>NFS</acronym> clients afhandelt.</entry>
	    </row>

	    <row>
	      <entry><application>mountd</application></entry>

	      <entry>De <acronym>NFS</acronym> mountdaemon die
		doorgestuurde verzoeken van &man.nfsd.8;
		uitvoert.</entry>
	    </row>

	    <row>
	      <entry><application>rpcbind</application></entry>

	      <entry>Deze daemon geeft <acronym>NFS</acronym>
		clients aan welke poort de <acronym>NFS</acronym>
		server gebruikt.</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>

      <para>Op de client kan ook een daemon draaien:
	<application>nfsiod</application>.  De
	<application>nfsiod</application> daemon handelt verzoeken van
	de <acronym>NFS</acronym> server af.  Dit is optioneel en kan
	de prestaties verbeteren, maar het is niet noodzakelijk voor
	een normale en correcte werking.  Meer informatie staat in
	&man.nfsiod.8;.</para>
    </sect2>

    <sect2 id="network-configuring-nfs">
      <title><acronym>NFS</acronym> instellen</title>

      <indexterm>
	<primary>NFS</primary>

	<secondary>instellen</secondary>
      </indexterm>

      <para><acronym>NFS</acronym> instellen gaat redelijk rechtlijnig.
	Alle processen die moeten draaien kunnen meestarten bij het
	opstarten door een paar wijzigingen in
	<filename>/etc/rc.conf</filename>.</para>

      <para>Op de <acronym>NFS</acronym> server dienen de volgende
	opties in <filename>/etc/rc.conf</filename> te staan:</para>

      <programlisting>rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"</programlisting>

      <para><application>mountd</application> start automatisch als de
	<acronym>NFS</acronym> server is ingeschakeld.</para>

      <para>Op de client dient de volgende optie in
	<filename>/etc/rc.conf</filename> te staan:</para>

      <programlisting>nfs_client_enable="YES"</programlisting>

      <para>In het bestand <filename>/etc/exports</filename> staat
	beschreven welke bestandssystemen <acronym>NFS</acronym> moet
	exporteren (soms heet dat ook wel delen of
	<quote>sharen</quote>).  Iedere regel in
	<filename>/etc/exports</filename> slaat op een bestandssysteem
	dat wordt ge&euml;xporteerd en welke machines toegang hebben
	tot dat bestandssysteem.  Samen met machines die toegang
	hebben, kunnen ook toegangsopties worden aangegeven.  Er zijn
	veel opties beschikbaar, maar hier worden er maar een paar
	beschreven.  Alle opties staan beschreven in
	&man.exports.5;.</para>

      <para>Nu volgen een aantal voorbeelden voor
	<filename>/etc/exports</filename>:</para>

      <indexterm>
	<primary>NFS</primary>

	<secondary>export voorbeelden</secondary>
      </indexterm>

      <para>Het volgende voorbeeld geeft een beeld van hoe een
	bestandssysteem te exporteren, hoewel de instellingen
	afhankelijk zijn van de omgeving en het netwerk.  Om
	bijvoorbeeld de map <filename>/cdrom</filename> te exporteren
	naar drie machines die dezelfde domeinnaam hebben als de server
	(vandaar dat de machinenamen geef domeinachtervoegsel hebben)
	of in <filename>/etc/hosts</filename> staan.  De vlag
	<option>-ro</option> exporteert het bestandssysteem als
	alleen&ndash;lezen.  Door die vlag kan een ander systeem niet
	schrijven naar het ge&euml;xporteerde bestandssysteem.</para>

      <programlisting>/cdrom -ro host1 host2 host3</programlisting>

      <para>Het volgende voorbeeld exporteert
	<filename>/home</filename> naar drie hosts op basis van IP
	adres.  Dit heeft zin als er een privaat netwerk bestaat,
	zonder dat er een <acronym>DNS</acronym> server is ingesteld.
	Optioneel kan <filename>/etc/hosts</filename> gebruikt worden
	om interne hostnamen in te stellen.  Er is meer informatie te
	vinden in &man.hosts.5;.  Met de vlag <option>-alldirs</option>
	mogen submappen ook mountpunten zijn.  De submap wordt dan niet
	feitelijk gemount, maar de client mount dan alleen de submappen
	die verplicht of nodig zijn.</para>

      <programlisting>/home  -alldirs  10.0.0.2 10.0.0.3 10.0.0.4</programlisting>

      <para>Het volgende voorbeeld exporteert <filename>/a</filename>
	zo dat twee clients uit verschillende domeinen bij het
	bestandssysteem mogen.  Met de vlag
	<option>&ndash;maproot=root</option> mag de gebruiker op het
	andere systeem gegevens naar het ge&euml;xporteerde
	bestandssysteem schrijven als <username>root</username>.  Als
	de vlag <option>-maproot=root</option> niet wordt gebruikt, dan
	kan een gebruiker geen bestanden wijzigen op het
	ge&euml;xporteerde bestandssysteem, zelfs niet als een
	gebruiker daar <username>root</username> is.</para>

      <programlisting>/a  -maproot=root  host.example.com box.example.org</programlisting>

      <para>Om een client toegang te geven tot een ge&euml;xporteerd
	bestandssysteem, moet die client daar rechten voor hebben.  De
	client moet daarvoor genoemd worden in
	<filename>/etc/exports</filename>.</para>

      <para>In <filename>/etc/exports</filename> staat iedere regel
	voor de exportinformatie van &eacute;&eacute;n bestandssysteem
	naar &eacute;&eacute;n host.  Per bestandssysteem mag een host
	maar &eacute;&eacute;n keer genoemd worden en mag maar
	&eacute;&eacute;n standaard hebben.  Stel bijvoorbeeld dat
	<filename>/usr</filename> een enkel bestandssysteem is.  Dan is
	de volgende <filename>/etc/exports</filename> niet
	valide:</para>

      <programlisting>># Werkt niet als /usr 1 bestandssysteem is
/usr/src   client
/usr/ports client</programlisting>

      <para>E&eacute;n bestandssysteem, <filename>/usr</filename>,
	heeft twee regels waarin exports naar dezelfde host worden
	aangegeven, <hostid>client</hostid>.  In deze situatie is de
	juiste instelling:</para>

      <programlisting>/usr/src /usr/ports  client</programlisting>

      <para>De eigenschappen van een bestandssysteem dat naar een
	bepaalde host wordt ge&euml;xporteerd moeten allemaal op
	&eacute;&eacute;n regel staan.  Regels waarop geen client
	wordt aangegeven worden behandeld als een enkele host.  Dit
	beperkt hoe bestandssysteem ge&euml;xporteerd kunnen worden,
	maar dat blijkt meestal geen probleem.</para>

      <para>Het volgende voorbeeld is een valide exportlijst waar
	<filename>/usr</filename> en <filename>/exports</filename>
	lokale bestandssystemen zijn:</para>

      <programlisting># Export src and ports to client01 and client02, but only
# client01 has root privileges on it
/usr/src /usr/ports -maproot=root    client01
/usr/src /usr/ports               client02
# The client machines have root and can mount anywhere
# on /exports. Anyone in the world can mount /exports/obj read-only
/exports -alldirs -maproot=root      client01 client02
/exports/obj -ro</programlisting>

      <para>Als <filename>/etc/exports</filename> wordt aangepast, moet
	<application>mountd</application> herstart worden om de
	wijzigingen actief te maken.  Dat kan door een HUP signaal naar
	het <command>mountd</command> proces te sturen:</para>

      <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen>

      <para>Het is ook mogelijk een machine te herstarten, zodat &os;
	alles netjes in kan stellen, maar dat is niet nodig.  Het
	uitvoeren van de volgende commando's als
	<username>root</username> hoort hezelfde resultaat te
	hebben.</para>

      <para>Op de <acronym>NFS</acronym> server:</para>

      <screen>&prompt.root; <userinput>rpcbind</userinput>
&prompt.root; <userinput>nfsd -u -t -n 4</userinput>
&prompt.root; <userinput>mountd -r</userinput></screen>

      <para>Op de <acronym>NFS</acronym> client:</para>

      <screen>&prompt.root; <userinput>nfsiod -n 4</userinput></screen>

      <para>Nu is alles klaar om feitelijk het netwerkbestandssysteem
	te mounten.  In de volgende voorbeelden is de naam van de
	server <hostid>server</hostid> en de naam van de client is
	<hostid>client</hostid>.  Om een netwerkbestandssysteem
	slechts tijdelijk te mounten of om alleen te testen, kan een
	commando als het onderstaande als <username>root</username> op
	de client uitgevoerd worden:</para>

      <indexterm>
	<primary>NFS</primary>

	<secondary>mounten</secondary>
      </indexterm>

      <screen>&prompt.root; <userinput>mount server:/home /mnt</userinput></screen>

      <para>Hiermee wordt de map <filename>/home</filename> op de
	server gemount op <filename>/mnt</filename> op de client.  Als
	alles juist is ingesteld, zijn nu in <filename>/mnt</filename>
	op de client de bestanden van de server zichtbaar.</para>

      <para>Om een netwerkbestandssysteem iedere keer als een computer
	opstart te mounten, kan het bestandssysteem worden toegevoegd
	aan <filename>/etc/fstab</filename> file:</para>

      <programlisting>server:/home	/mnt	nfs	rw	0	0</programlisting>

      <para>Alle beschikbare opties staan in &man.fstab.5;.</para>
    </sect2>

    <sect2>
      <title>Mogelijkheden voor gebruik</title>

      <para><acronym>NFS</acronym> is voor veel doeleinden in te
	zetten.  Een aantal voorbeelden:</para>

      <indexterm>
	<primary>NFS</primary>

	<secondary>gebruik</secondary>
      </indexterm>

      <itemizedlist>
	<listitem>
	  <para>Een aantal machines een cd-rom of andere media laten
	    delen.  Dat is goedkoper en vaak ook handiger, bijvoorbeeld
	    bij het installeren van software op meerdere
	    machines;</para>
	</listitem>

	<listitem>
	  <para>Op grote netwerken kan het praktisch zijn om een
	    centrale <acronym>NFS</acronym> server in te richten,
	    waarop alle thuismappen staan.  Die thuismappen kunnen dan
	    ge&euml;xporteerd worden, zodat gebruikers altijd
	    dezelfde thuismap hebben, op welk werkstation ze ook
	    aanmelden;</para>
	</listitem>

	<listitem>
	  <para>Meerdere machines kunnen een gezamenlijke map
	    <filename>/usr/ports/distfiles</filename> hebben.  Dan is
	    het mogelijk om een port op meerdere machines te
	    installeren, zonder op iedere machine de broncode te hoeven
	    downloaden.</para>
	</listitem>
      </itemizedlist>
    </sect2>

    <sect2 id="network-amd">
      <sect2info>
	<authorgroup>
	  <author>
	    <firstname>Wylie</firstname>
	    <surname>Stilwell</surname>
	    <contrib>Geschreven door </contrib>
	  </author>
	</authorgroup>
	<authorgroup>
	  <author>
	    <firstname>Chern</firstname>
	    <surname>Lee</surname>
	    <contrib>Herschreven door </contrib>
	  </author>
	</authorgroup>
      </sect2info>

      <title>Automatisch mounten met
	<application>amd</application></title>

      <indexterm><primary>amd</primary></indexterm>

      <indexterm><primary>automatic mounter daemon</primary></indexterm>

      <para>&man.amd.8; (de automatic mounter daemon) mount automatisch
	netwerkbestandssystemen als er aan een bestand of map binnen
	dat bestandssysteem wordt gerefereerd.
	<application>amd</application> unmount ook bestandssystemen die
	een bepaalde tijd niet gebruikt worden.  Het gebruikt van
	<application>amd</application> is een aantrekkelijk en
	eenvoudig alternatief ten opzichte van permanente mounts,
	die meestal in <filename>/etc/fstab</filename> staan.</para>

      <para><application>amd</application> werkt door zichzelf als
	NFS server te koppelen aan de mappen <filename>/host</filename>
	en <filename>/net</filename>.  Als binnen die mappen een
	bestand wordt geraadpleegd, dan zoekt
	<application>amd</application> de bijbehorende netwerkmount op
	en mount die automatisch.  <filename>/net</filename> wordt
	gebruikt om een ge&euml;xporteerd bestandssysteem van een
	IP adres te mounten, terwijl <filename>/host</filename> wordt
	gebruikt om een ge&euml;xporteerd bestandssysteem van een
	hostnaam te mounten.</para>

      <para>Het raadplegen van een bestand in
	<filename>/host/foobar/usr</filename> geeft
	<application>amd</application> aan dat die moet proberen de
	<filename>/usr</filename> export op de host
	<hostid>foobar</hostid> te mounten.</para>

      <example>
	<title>Een export mounten met
	  <application>amd</application></title>

	<para>De beschikbare mounts van een netwerkhost zijn te
	  bekijken met <command>showmount</command>.  Om bijvoorbeeld
	  de mounts van de host <hostid>foobar</hostid> te
	  bekijken:</para>

	<screen>&prompt.user; <userinput>showmount -e foobar</userinput>
Exports list on foobar:
/usr                               10.10.10.0
/a                                 10.10.10.0
&prompt.user; <userinput>cd /host/foobar/usr</userinput></screen>
      </example>

      <para>Zoals in het bovenstaande voorbeeld te zien is, toont
	<command>showmount</command> <filename>/usr</filename> als een
	export.  Als er naar de map
	<filename>/host/foobar/usr</filename> wordt gegaan, probeert
	<application>amd</application> de hostnaam
	<hostid>foobar</hostid> te resolven en de gewenste export
	automatisch te mounten.</para>

      <para><application>amd</application> kan gestart worden door de
	opstartscript door de volgende regel in
	<filename>/etc/rc.conf</filename> te plaatsen:</para>

      <programlisting>amd_enable="YES"</programlisting>

      <para>Er kunnen ook nog opties meegegeven worden aan
	<application>amd</application> met de optie
	<varname>amd_flags</varname>.  Standaard staat
	<varname>amd_flags</varname> ingesteld op:</para>

      <programlisting>amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"</programlisting>

      <para>In het bestand <filename>/etc/amd.map</filename> staan
	de standaardinstellingen waarmee exports gemount worden.  In
	het bestand <filename>/etc/amd.conf</filename> staan een
	aantal van de meer gevorderde instellingen van
	<application>amd</application>.</para>

      <para>In &man.amd.8; en &man.amd.conf.5; staat meer
	informatie.</para>
    </sect2>

    <sect2 id="network-nfs-integration">
      <sect2info>
	<authorgroup>
	  <author>
	    <firstname>John</firstname>
	    <surname>Lind</surname>
	    <contrib>Geschreven door </contrib>
	  </author>
	</authorgroup>
      </sect2info>

      <title>Problemen bij samenwerking met andere systemen</title>

      <para>Bepaalde Ethernet adapters voor ISA PC systemen kennen
	limieten die tot serieuze netwerkproblemen kunnen leiden, in
	het bijzonder met NFS.  Dit probleem is niet specifiek voor
	&os;, maar het kan op &os; wel voor komen.</para>

      <para>Het probleem ontstaat bijna altijd als (&os;) PC systemen
	netwerken met high-performance werkstations, zoals van Silicon
	Graphics, Inc. en Sun Microsystems, Inc.  De NFS mount werkt
	prima en wellicht lukken een aantal acties ook, maar dan ineens
	lijkt de server niet meer te reageren voor de client, hoewel
	verzoeken van en naar andere systemen gewoon verwerkt worden.
	Dit gebeurt op een clientsysteem, of de client nu het &os
	systeem is of het werkstation.  Op veel systemen is er geen
	manier om de client netjes af te sluiten als dit probleem is
	ontstaan.  Vaak is de enige mogelijkheid een reset van de
	client, omdat het probleem met NFS niet opgelost kan
	worden.</para>

      <para>Hoewel de enige <quote>correcte</quote> oplossing de
	aanschaf van een snellere en betere Ethernet adapter voor het
	&os; systeem is, is er zo om het probleem heen te werken dat
	het werkbaar is.  Als &os; de <emphasis>server</emphasis> is,
	kan de optie <option>-w=1024</option> gebruikt worden bij het
	mounten door de client.  Als het &os; systeem de
	<emphasis>client</emphasis> is, dan dient het NFS
	bestandssysteem gemount te worden met de optie
	<option>&nbsp;r=1024</option>.  Deze opties kunnen het vierde
	veld zijn in een regel in <filename>fstab</filename> voor
	automatische mounts en bij handmatige mounts met &man.mount.8;
	kan de parameter <option>-o</option> gebruikt worden.</para>

      <para>Soms wordt een ander probleem voor dit probleem versleten,
	als servers en clients zich op verschillende netwerken
	bevinden.  Als dat het geval is, dan dient
	<emphasis>vastgesteld</emphasis> te worden dat routers de
	<acronym>UDP</acronym> informatie op de juiste wijze routeren,
	omdat er anders nooit NFS verkeer gerouteerd kan worden.</para>

      <para>In de volgende voorbeelden is <hostid>fastws</hostid> de
	host(interface)naam van een high-performance werkstation en
	<hostid>freebox</hostid> is de host(interface)naam van een &os;
	systeem met een Ehernet adapter die mindere prestaties levert.
	<filename>/sharedfs</filename> wordt het ge&euml;xporteerde
	NFS bestandssysteem (zie &man.exports.5;) en
	<filename>/project</filename> wordt het mountpunt voor het
	ge&euml;xporteerde bestandssysteem op de client.

      <note>
	<para>In sommige gevallen kunnen applicaties beter draaien als
	  extra opties als <option>hard</option> of
	  <option>soft</option> en <option>bg</option> gebruikt
	  worden.</para>
      </note>

      <para>Voorbeelden voor het &os; systeem
	(<hostid>freebox</hostid>) als de client in
	<filename>/etc/fstab</filename> op
	<hostid>freebox</hostid>:</para>

      <programlisting>fastws:/sharedfs /project nfs rw,-r=1024 0 0</programlisting>

      <para>Als een handmatig mountcommando op
	<hostid>freebox</hostid>:</para>

      <screen>&prompt.root; <userinput>mount -t nfs -o -r=1024 fastws:/sharedfs /project</userinput></screen>

      <para>Voorbeelden voor het &os; systeem als de server in
	<filename>/etc/fstab</filename> op
	<hostid>fastws</hostid>:</para>

      <programlisting>freebox:/sharedfs /project nfs rw,-w=1024 0 0</programlisting>

      <para>Als een handmatig mountcommando op
	<hostid>fastws</hostid>:</para>

      <screen>&prompt.root; <userinput>mount -t nfs -o -w=1024 freebox:/sharedfs /project</userinput></screen>

      <para>Bijna iedere 16&ndash;bit Ethernet adapter werkt zonder de
	hierboven beschreven restricties op de lees- en
	schrijfgrootte.</para>

      <para>Voor wie het wil weten wordt nu beschreven wat er gebeurt
	als de fout ontstaan, wat ook duidelijk maakt waarom het niet
	hersteld kan worden.  NFS werkt meestal met een
	<quote>block</quote>grootte van 8&nbsp;K (hoewel het mogelijk
	is dat er kleinere fragmenten worden verwerkt).  Omdat de
	maximale grootte van een Ethernet pakket rond de
	1500&nbsp;bytes ligt, wordt een <quote>block</quote>
	opgesplitst in meerdere Ethernet pakketten, hoewel het hoger in
	de code nog steeds &eacute&eacute;n eenheid is, en wordt
	ontvangen, samengevoegd en <emphasis>bevestigd</emphasis>
	als een eenheid.  De high-performance werkstations kunnen de
	pakketten waaruit een NFS eenheid bestaat bijzonder snel naar
	buiten pompen.  Op de kaarten met minder capaciteit worden de
	eerdere pakketten door de latere pakketten van dezelfde eenheid
	ingehaald voordat ze bij die host zijn aangekomen en daarom kan
	de eenheid niet worden samengesteld en bevestigd.  Als gevolg
	daarvan ontstaat er op het werkstation een time-out en probeert
	die de eenheid opnieuw te sturen, maar dan weer de hele eenheid
	van 8&nbsp;K, waardoor het proces wordt herhaald, ad
	infinitum.</para>

      <para>Door de grootte van de eenheid kleiner te houden dan de
	grootte van een Ethernet pakket, is het zeker dat elk Ethernet
	pakket dat compleet is aangekomen bevestigd kan worden, zodat
	de deadlock niet ontstaat.</para>

      <para>Toch kan een PC systeem nog wel overrompeld worden als
	high-performance werkstations er op inhakken, maar met de
	betere netwerkkaarten valt het dan in ieder geval niet om door
	de NFS <quote>eenheden</quote>.  Als het systeem toch wordt
	overrompeld, dan worden de betrokken eenheden opnieuw
	verstuurd en dan is de kans groot dat ze worden ontvangen,
	samengevoegd en bevestigd.</para>
    </sect2>
  </sect1>

  <sect1 id="network-nis">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Bill</firstname>
	  <surname>Swingle</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Eric</firstname>
	  <surname>Ogren</surname>
	  <contrib>Verbeterd door </contrib>
	</author>

	<author>
	  <firstname>Udo</firstname>
	  <surname>Erdelhoff</surname>
	</author>
      </authorgroup>
    </sect1info>

    <title>Netwerkinformatiesysteem (NIS/YP)</title>

    <sect2>
      <title>Wat is het?</title>

      <indexterm><primary>NIS</primary></indexterm>

      <indexterm><primary>Solaris</primary></indexterm>

      <indexterm><primary>HP-UX</primary></indexterm>

      <indexterm><primary>AIX</primary></indexterm>

      <indexterm><primary>Linux</primary></indexterm>

      <indexterm><primary>NetBSD</primary></indexterm>

      <indexterm><primary>OpenBSD</primary></indexterm>

      <para><acronym role="Network Information System">NIS</acronym>,
	dat staat voor Netwerkinformatiediensten (Network Information
	Services), is ontwikkeld door Sun Microsystems om het beheer
	van &unix; (origineel &sunos;) systemen te centraliseren.
	Tegenwoordig is het eigenlijk een industriestandaard geworden.
	Alle grote &unix; achtige systemen (&solaris;, HP-UX, &aix;,
	&linux;, NetBSD, OpenBSD, &os;, enzovoort) ondersteunen
	<acronym role="Network Information
	  System">NIS</acronym>.</para>

      <indexterm><primary>yellow pages</primary><see>NIS</see></indexterm>

      <para><acronym role="Network Information System">NIS</acronym>
	stond vroeger bekend als Yellow Pages, maar vanwege problemen
	met het handelsmerk heeft Sun de naam veranderd.  De oude term,
	en yp, wordt nog steeds vaak gebruikt.</para>

      <indexterm>
	<primary>NIS</primary>

	<secondary>domeinen</secondary>
      </indexterm>

      <para>Het is een op RPC gebaseerd client/server systeem waarmee
	een groep machines binnen een NIS domein een gezamenlijke set
	met instellingenbestanden kan delen.  Hierdoor kan een
	beheerder NIS systemen opzetten met een minimaal aantal
	instellingen en vanaf een centrale lokatie instellingen
	toevoegen, verwijderen en wijzigen.</para>

      <indexterm><primary>Windows NT</primary></indexterm>

      <para>Het is te vergelijken met het &windowsnt; domeinsysteem en
	hoewel de interne implementatie van de twee helemaal niet
	overeenkomt, is de basisfunctionaliteit vergelijkbaar.</para>
    </sect2>

    <sect2>
      <title>Termen en processen om te onthouden</title>

      <para>Er zijn een aantal termen en belangrijke
	gebruikersprocessen die een rol spelen bij het implementeren
	van NIS op &os;, zowel bij het maken van een NIS server als bij
	het maken van een systeem dan NIS client is:</para>

      <indexterm><primary><application>rpcbind</application></primary></indexterm>

      <indexterm><primary><application>portmap</application></primary></indexterm>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="2">

	<colspec colwidth="1*">

	<colspec colwidth="3*">

	  <thead>
	    <row>
	      <entry>Term</entry>

	      <entry>Beschrijving</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <entry>NIS domeinnaam</entry>

	      <entry>Een NIS master server en al zijn clients
		(inclusief zijn slave master) hebben een NIS
		domeinnaan.  Vergelijkbaar met een &windowsnt;
		domeinnaam, maar de NIS domeinnaam heeft niets te maken
		met <acronym>DNS</acronym>.</entry>
	    </row>

	    <row>
	      <entry><application>rpcbind</application></entry>

	      <entry>Moet draaien om <acronym>RPC</acronym> (Remote
		Procedure Call in te schakelen, een netwerkprotocol dat
		door NIS gebruikt wordt).  Als
		<application>rpcbind</application> niet draait, dan kan
		een NIS server niet draaien en kan een machine ook geen
		NIS client zijn (In &os;&nbsp;4.X wordt
		<application>portmap</application> in plaats van
		<application>rpcbind</application>).</entry>
	    </row>

	    <row>
	      <entry><application>ypbind</application></entry>

	      <entry><quote>Verbindt</quote> een NIS client aan zijn
		NIS server.  Dat gebeurt door met de NIS domeinnaam van
		het systeem en door het gebruik van <acronym>RPC</acronym>
		te verbinden met de server.
		<application>ypbind</application> is de kern van
		client-server communicatie in een NIS omgeving.  Als
		<application>ypbind</application> op een machine
		stopt, dan kan die niet meer bij de NIS server
		komen.</entry>
	    </row>

	    <row>
	      <entry><application>ypserv</application></entry>

	      <entry>Hoort alleen te draaien op NIS servers.  Dit is
		het NIS server proces zelf.  Als &man.ypserv.8; stopt,
		dan kan de server niet langer reageren op NIS
		verzoeken (hopelijk is er dan een slave server om het
		over te nemen).  Er zijn een aantal implementaties van
		NIS, maar niet die op &os;, die geen verbinding met
		een andere server proberen te maken als de server
		waarmee ze verbonden waren niet meer reageert.  In dat
		geval is vaak het enige dat werkt het server proces
		herstarten (of zelfs de hele server) of het
		<application>ypbind</application> proces op de
		client.</entry>
	    </row>

	    <row>
	      <entry><application>rpc.yppasswdd</application></entry>

	      <entry>Nog een proces dat alleen op NIS master servers
		hoort te draaien.  Dit is een daemon waarbij NIS
		clients hun NIS wachtwoorden kunnen wijzigen.  Als deze
		daemon niet draait, moeten gebruikers aanmelden op de
		NIS master server en daar hun wachtwoord wijzigen.</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>
      <!-- XXX Missing: rpc.ypxfrd (not important, though) May only run
      on the master -->
    </sect2>

    <sect2>
      <title>Hoe werkt het?</title>

      <para>Er zijn drie typen hosts in een NIS omgeving: master
	servers, slave servers en clients.  Servers zijn het centrale
	depot voor instellingen voor een host.  Master servers
	bevatten de geauthoriseerd kopie van die informatie, terwijl
	slave servers die informatie spiegelen voor redundantie.
	Clients verlaten zich op de servers om hun die informatie ter
	beschikking te stellen.</para>

      <para>Op deze manier kan informatie uit veel bestanden gedeeld
	worden.  De bestanden <filename>master.passwd</filename>,
	<filename>group</filename> en <filename>hosts</filename>
	worden meestal via NIS gedeeld.  Als een proces op een client
	informatie nodig heeft die normaliter in een van die lokale
	bestanden staat, dan vraagt die het in plaats daarvan aan
	de NIS servers waarmee hij verbonden is.</para>

      <sect3>
	<title>Soorten machines</title>

	<itemizedlist>
	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>master server</secondary>
	  </indexterm>

	  <listitem>
	    <para>Een <emphasis>NIS master server</emphasis>.  Deze
	      server onderhoudt, analoog aan een &windowsnt; primary
	      domain controller, de bestanden die door alle NIS clients
	      gebruikt worden.  De bestanden
	      <filename>passwd</filename>, <filename>group</filename>
	      en andere bestanden die door de NIS clients gebruikt
	      worden staan op de master server.</para>

	    <note>
	      <para>Het is mogelijk om &eacute;&eacute;n machine master
		server te laten zijn voor meerdere NIS domeinen.  Dat
		wordt in deze inleiding echter niet beschreven, omdat
		die uitgaat van een relatief kleine omgeving.</para>
	    </note>
	  </listitem>

	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>slave server</secondary>
	  </indexterm>

	  <listitem>
	    <para><emphasis>NIS slave servers</emphasis>.  Deze zijn
	      te vergelijken met &windowsnt; backup domain controllers.
	      NIS slave servers beheren een kopie van de bestanden met
	      gegevens op de NIS master.  NIS slave servers bieden
	      redundantie, die nodig is in belangrijke omgevingen.  Ze
	      helpen ook om de belasting te verdelen met de master
	      server: NIS client maken altijd een verbinding met de NIS
	      server die het eerst reageert en dat geldt ook voor
	      antwoorden van slave servers.</para>
	  </listitem>

	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>client</secondary>
	  </indexterm>

	  <listitem>
	    <para><emphasis>NIS clients</emphasis>.  NIS clients
	      authenticeren, net als de meeste &windowsnt;
	      werkstations, tegen de NIS server (of de &windowsnt;
	      domain controller in het geval van &windowsnt;
	      werkstations) bij het aanmelden.</para>
	  </listitem>
	</itemizedlist>
      </sect3>
    </sect2>

    <sect2>
      <title>NIS/YP gebruiken</title>

      <para>Dit onderdeel behandelt het opzetten van een
	NIS voorbeeldomgeving.</para>

      <note>
	<para>Dit onderdeel veronderstelt dat &os;&nbsp;3.3 of later
	  draait.  De nu volgende instructies werken
	  <emphasis>waarschijnlijk</emphasis> voor iedere versie van
	  &os; hoger dan 3.0, maar dat hoeft niet waar te zijn.</para>
      </note>

      <sect3>
	<title>Plannen</title>

	<para>Er wordt uitgegaan van een beheerder van een klein
	  universiteitslab.  Dat lab, dat bestaat uit &os; machines,
	  kent op dit moment geen centraal beheer.  Iedere machine
	  heeft zijn eigen <filename>/etc/passwd</filename> en
	  <filename>/etc/master.passwd</filename>.  Die bestanden
	  worden alleen met elkaar in lijn gehouden door handmatige
	  handelingen.  Als er op dit moment een gebruiker aan het lab
	  wordt toegevoegd, moet <command>adduser</command> op alle 15
	  machines gedraaid worden.  Dat moet natuurlijk veranderen en
	  daarom is besloten het lab in te richten met NIS, waarbij
	  twee machines als server worden gebruikt.</para>

	<para>Het lab ziet er ongeveer als volgt uit:</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="3">
	    <thead>
	      <row>
		<entry>Machinenaam</entry>

		<entry>IP adres</entry>

		<entry>Rol Machine</entry>
	      </row>
	    </thead>

	    <tbody>
	      <row>
		<entry><hostid>ellington</hostid></entry>

		<entry><hostid role="ipaddr">10.0.0.2</hostid></entry>

		<entry>NIS master</entry>
	      </row>

	      <row>
		<entry><hostid>coltrane</hostid></entry>

		<entry><hostid role="ipaddr">10.0.0.3</hostid></entry>

		<entry>NIS slave</entry>
	      </row>

	      <row>
		<entry><hostid>basie</hostid></entry>

		<entry><hostid role="ipaddr">10.0.0.4</hostid></entry>

		<entry>Wetenschappelijk werkstation</entry>
	      </row>

	      <row>
		<entry><hostid>bird</hostid></entry>

		<entry><hostid role="ipaddr">10.0.0.5</hostid></entry>

		<entry>Client machine</entry>
	      </row>

	      <row>
		<entry><hostid>cli[1-11]</hostid></entry>

		<entry><hostid
		    role="ipaddr">10.0.0.[6-17]</hostid></entry>

		<entry>Andere client machines</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>Bij het voor de eerste keer instellen van een NIS schema
	  is het verstandig eerst na te denken over hoe dat opgezet
	  moet worden.  Hoe groot een netwerk ook is, er moeten een
	  aantal beslissingen gemaakt worden.</para>

	<sect4>
	  <title>Een NIS domeinnaam kiezen</title>

	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>domeinnaam</secondary>
	  </indexterm>

	  <para>Dit is wellicht niet de bekende
	    <quote>domeinnaam</quote>.  Daarom wordt het ook de
	    <quote>NIS domeinnaam</quote> genoemd.  Bij de broadcast
	    van een client om informatie wordt ook de naam van het NIS
	    domein waar hij onderdeel van uitmaakt meegezonden.  Zo
	    kunnen meerdere servers op een netwerk bepalen of er
	    antwoord gegeven dient te worden op een verzoek.  De NIS
	    domeinnaam is kan voorgesteld worden als de naam van een
	    groep hosts op op een of andere manier aan elkaar
	    gerelateerd zijn.</para>

	  <para>Sommige organisaties kiezen hun internet domeinnaam als
	    NIS domeinnaam.  Dat wordt niet aangeraden omdat het voor
	    verwarring kan zorgen bij het debuggen van
	    netwerkproblemen.  De NIS domeinnaam moet uniek zijn binnen
	    een netwerk en het is handig als die de groep machines
	    beschrijft waarvoor hij geldt.  Zo kan bijvoorbeeld de
	    Financi&euml;le afdeling van Acme Inc. als NIS domeinnaam
	    <quote>acme-fin</quote> hebben.  In dit voorbeeld wordt
	    de naam <literal>test-domain</literal> gekozen.</para>

	  <indexterm><primary>SunOS</primary></indexterm>

	  <para>Sommige besturingssystemen gebruiken echter (met name
	    &sunos;) hun NIS domeinnaam als hun internet domeinnaam.
	    Als er machines zijn op een netwerk die deze restrictie
	    kennen, dan <emphasis>moet</emphasis> de internet
	    domeinnaam als de naam voor het NIS domainnaam gekozen
	    worden.</para>
	</sect4>

	<sect4>
	  <title>Systeemeisen</title>

	  <para>Bij het kiezen van een machine die als NIS server wordt
	    gebruikt zijn er een aantal aandachtspunten.  Een van de
	    onhandige dingen aan NIS is de afhankelijkheid van de
	    clients van de server.  Als een client de server voor zijn
	    NIS domein niet kan bereiken, dan wordt die machine vaak
	    onbruikbaar.  Door het gebrek aan gebruiker- en
	    groepsinformatie bevriezen de meeste systemen.  Daarom moet
	    er een machine gekozen worden die niet vaak herstart hoeft
	    te worden of wordt gebruikt voor ontwikkeling.  De NIS
	    server is in het meest ideale geval een alleenstaande
	    server die als enige doel heeft NIS server te zijn.  Als
	    een netwerk niet zwaar wordt gebruikt, kan de NIS server op
	    een machine die ook andere diensten aanbiedt gezet worden,
	    maar het blijft belangrijk om ervan bewust te zijn dat als
	    de NIS server niet beschikbaar is, dat nadelige invloed
	    heeft op <emphasis>alle</emphasis> NIS clients.</para>
	</sect4>
      </sect3>

      <sect3>
	<title>NIS servers</title>

	<para>De hoofdversies van alle NIS informatie staan opgeslagen
	  op &eacute;&eacute;n machine die de NIS master server heet.
	  De databases waarin de informatie wordt opgeslagen heten NIS
	  maps.  In &os; worden die maps opgeslagen in
	  <filename>/var/yp/[domainnaam]</filename> waar
	  <filename>[domeinnaam]</filename> de naam is van het NIS
	  domein dat wordt bediend.  Een enkele NIS server kan
	  tegelijkertijd meerdere NIS domeinen ondersteunen en het is
	  dus mogelijk dat er meerdere van zulke mappen zijn, een voor
	  ieder ondersteund domein.  Ieder domein heeft zijn eigen
	  onafhankelijke set maps.</para>

	<para>In NIS master en slave servers worden alle NIS verzoeken
	  door de <command>ypserv</command> daemon afgehandeld.
	  <command>ypserv</command> is verantwoordelijk voor het
	  ontvangen van inkomende verzoeken van NIS clients, het
	  vertalen van de gevraagde domeinnaam en mapnaam naar een pad
	  naar het corresponderende databasebestand en het terugsturen
	  van de database naar de client.</para>

	<sect4>
	  <title>Een NIS master server opzetten</title>

	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>server opzetten</secondary>
	  </indexterm>

	  <para>Het opzetten van een master NIS server kan erg
	    eenvoudig zijn, afhankelijk van de behoeften.  &os; heeft
	    ondersteuning voor NIS als basisfunctie.  Alleen de
	    volgende regels hoeven aan
	    <filename>/etc/rc.conf</filename> toegevoegd te worden en
	    &os; doet de rest:</para>

	  <procedure>
	    <step>
	      <para><programlisting>nisdomainname="test-domain"</programlisting>
		Deze regel stelt de NIS domainnaam in op
		<literal>test-domain</literal> bij het instellen van
		het netwerk (bij het opstarten).</para>
	    </step>

	    <step>
	      <para><programlisting>nis_server_enable="YES"</programlisting>
		Dit geeft &os; aan de NIS server processen te starten
		als het netwerk de volgende keer wordt
		opgestart.</para>
	    </step>

	    <step>
	      <para><programlisting>nis_yppasswdd_enable="YES"</programlisting>
		Dit schakelt de dameon <command>rpc.yppasswdd</command>
		in die, zoals al eerder aangegeven, clients toestaat
		om hun NIS wachtwoord vanaf een client machine te
		wijzigen.</para>
	    </step>
	  </procedure>

	  <note>
	    <para>Afhankelijk van de inrichting van NIS, kunnen er nog
	      meer instellingen nodig zijn.  In het onderdeel <link
	      linkend="network-nis-server-is-client">NIS Servers die
		ook NIS Clients Zijn</link> staan meer details.</para>
	  </note>

	  <para>Nu hoeft alleen <command>/etc/netstart</command> als
	    superuser uitgevoerd te worden.  Dat stelt alles in met
	    gebruikmaking van de waarden uit
	    <filename>/etc/rc.conf</filename>.</para>
	</sect4>

	<sect4>
	  <title>NIS maps initialiseren</title>

	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>maps</secondary>
	  </indexterm>

	  <para>Die <emphasis>NIS maps</emphasis> zijn
	    databasebestanden die in de map
	    <filename>/var/yp</filename> staan.  Ze worden gemaakt uit
	    de bestanden met instellingen uit de map
	    <filename>/etc</filename> van de NIS master, met
	    &eacute;&eacute;n uitzondering:
	    <filename>/etc/master.passwd</filename>.  Daar is een goede
	    reden voor, want het is niet wenselijk om de wachtwoorden
	    voor <username>root</username> en andere administratieve
	    accounts naar alle servers in het NIS domein te sturen.
	    Daar moet voor het initialiseren van de NIS maps het
	    volgende uitgevoerd worden:</para>

	  <screen>&prompt.root; <userinput>cp /etc/master.passwd /var/yp/master.passwd</userinput>
&prompt.root; <userinput>cd /var/yp</userinput>
&prompt.root; <userinput>vi master.passwd</userinput></screen>

	  <para>Dan horen alle systeemaccounts verwijderd te worden
	    (<username>bin</username>, <username>tty</username>,
	    <username>kmem</username>, <username>games</username>,
	    enzovoort) en alle overige accounts waarvoor het niet
	    wenselijk is dat ze op de NIS clients terecht komen
	    (bijvoorbeeld <username>root</username> en alle andere UID
	    0 (superuser) accounts).</para>

	  <note>
	    <para><filename>/var/yp/master.passwd</filename> hoort niet
	      te lezen te zijn voor een groep of voor de wereld (dus
	      modus 600)!  Voor het aanpassen van de rechten kan
	      <command>chmod</command> gebruikt worden.</para>
	  </note>

	  <indexterm><primary>Tru64 UNIX</primary></indexterm>

	  <para>Als dat is gedaan, kunnen de NIS maps
	    ge&iuml;nitialiseerd worden.  Bij &os; zit een script
	    <command>ypinit</command> waarmee dit kan (in de hulppagina
	    staat meer informatie).  Dit script is beschikbaar op de
	    meeste &unix; besturingssystemen, maar niet op allemaal.
	    Op Digital UNIX/Compaq Tru64 UNIX heet het
	    <command>ypsetup</command>.  Omdat er maps voor een NIS
	    master worden gemaakt, wordt de optie
	    <option>&ndash;m</option> meegegeven aan
	    <command>ypinit</command>.  Aangenomen dat de voorgaande
	    stappen zijn uitgevoerd, kunnen de NIS maps gemaakt worden
	    op de volgende manier:</para>

	  <screen>ellington&prompt.root; <userinput>ypinit -m test-domain</userinput>
Server Type: MASTER Domain: test-domain
Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n] <userinput>n</userinput>
Ok, please remember to go back and redo manually whatever fails.
If you don't, something might not work.
At this point, we have to construct a list of this domains YP servers.
rod.darktech.org is already known as master server.
Please continue to add any slave servers, one per line. When you are
done with the list, type a &lt;control D&gt;.
master server   :  ellington
next host to add:  <userinput>coltrane</userinput>
next host to add:  <userinput>^D</userinput>
The current list of NIS servers looks like this:
ellington
coltrane
Is this correct?  [y/n: y] <userinput>y</userinput>

[..uitvoer van het maken van de maps..]

NIS Map update completed.
ellington has been setup as an YP master server without any errors.</screen>

	  <para><command>ypinit</command> hoort
	    <filename>/var/yp/Makefile</filename> gemaakt te hebben uit
	    <filename>/var/yp/Makefile.dist</filename>.  Als dit
	    bestand is gemaakt, neemt dat bestand aan dat er in een
	    omgeving met een enkele NIS server wordt gewerkt met alleen
	    &os; machines.  Omdat <literal>test-domain</literal> ook
	    een slave server bevat, dient
	    <filename>/var/yp/Makefile</filename> gewijzigd te
	    worden:</para>

	  <screen>ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput></screen>

	  <para>Als de onderstaande regel niet al uitgecommentarieerd
	    is, dient dat alsnog te gebeuren:</para>

	  <programlisting>NOPUSH = "True"</programlisting>
	</sect4>

	<sect4>
	  <title>Een NIS slave server opzetten</title>

	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>slave server</secondary>
	  </indexterm>

	  <para>Het opzetten van een NIS slave server is nog
	    makkelijker dan het opzetten van de master.  Dit kan door
	    aan te melden op de slave server en net als voor de master
	    server <filename>/etc/rc.conf</filename> te wijzigen.  Het
	    enige verschil is dat nu de optie <option>&ndash;s</option>
	    gebruikt wordt voor het draaien van
	    <command>ypinit</command>.  Met de optie
	    <option>&ndash;s</option> moet ook de naam van de NIS
	    master meegegven worden.  Het commando ziet er dus als
	    volgt uit:</para>

  <screen>coltrane&prompt.root; <userinput>ypinit -s ellington test-domain</userinput>

Server Type: SLAVE Domain: test-domain Master: ellington

Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.

Do you want this procedure to quit on non-fatal errors? [y/n: n]  <userinput>n</userinput>

Ok, please remember to go back and redo manually whatever fails.
If you don't, something might not work.
There will be no further questions. The remainder of the procedure
should take a few minutes, to copy the databases from ellington.
Transferring netgroup...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byuser...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byhost...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring group.bygid...
ypxfr: Exiting: Map successfully transferred
Transferring group.byname...
ypxfr: Exiting: Map successfully transferred
Transferring services.byname...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.byname...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.byname...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring netid.byname...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring ypservers...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byname...
ypxfr: Exiting: Map successfully transferred

coltrane has been setup as an YP slave server without any errors.
Don't forget to update map ypservers on ellington.</screen>

	  <para>Nu hoort er een map
	    <filename>/var/yp/test-domain</filename> te zijn waarin
	    kopie&euml; van de NIS master server maps staan.  Die
	    moeten bijgewerkt blijven.  De volgende regel in
	    <filename>/etc/crontab</filename> op de slave servers
	    regelt dat:</para>

	  <programlisting>20      *       *       *       *       root   /usr/libexec/ypxfr passwd.byname
21      *       *       *       *       root   /usr/libexec/ypxfr passwd.byuid</programlisting>

	  <para>Met de bovenstaande twee regels wordt de slave
	    gedwongen zijn maps met de maps op de master server te
	    synchroniseren.  Hoewel dit niet verplicht is, omdat de
	    master server probeert veranderingen aan de NIS maps door
	    te geven aan zijn slaves, is het wel verstandig om een
	    slave tot bijwerken te dwingen, omdat wachtwoordinformatie
	    van vitaal belang is voor systemen die van de server
	    afhankelijk zijn.  Dit is des te belangrijker op drukke
	    netwerken, omdat daar het bijwerken van maps niet altijd
	    compleet afgehandeld hoeft te worden.</para>

	  <para>Nu kan ook op de slave server het commando
	    <command>/etc/netstart</command> uitgevoerd worden, dat op
	    zijn beurt de NIS server start.</para>
	</sect4>
      </sect3>

      <sect3>
	<title>NIS clients</title>

	<para>Een NIS client maakt wat heet een verbinding (binding)
	  met een NIS server met de <command>ypbind</command> daemon.
	  <command>ypbind</command> controleert het standaarddomein van
	  het systeem (zoals ingesteld met
	  <command>domainname</command>) en begint met het broadcasten
	  van RPC verzoeken op het lokale netwerk.  Die verzoeken
	  bevatten de naam van het domein waarvoor
	  <command>ypbind</command> een binding probeert te maken.  Als
	  een server die is ingesteld om het gevraagde domein te
	  bedienen een broadcast ontvangt, dan antwoordt die aan
	  <command>ypbind</command> dat dan het IP adres van de server
	  opslaat.  Als er meerdere servers beschikbaar zijn, een
	  master en bijvoorbeeld meerdere slaves, dan gebruikt
	  <command>ypbind</command> het adres van de eerste server die
	  antwoord geeft.  Vanaf dat moment stuurt de client alle NIS
	  verzoeken naar die server.  <command>ypbind</command>
	  <quote>pingt</quote> de server zo nu en dan om te controleren
	  of die nog draait.  Als er na een bepaalde tijd geen antwoord
	  komt op een ping, dan markeert <command>ypbind</command> het
	  domein als niet verbonden en begint het broadcasten opnieuw,
	  in de hoop dat er een andere server wordt
	  gelocaliseerd.</para>

	<sect4>
	  <title>Een NIS client opzetten</title>

	  <indexterm>
	    <primary>NIS</primary>

	    <secondary>client instellen</secondary>
	  </indexterm>

	  <para>Het opzetten van een &os; machine als NIS client is
	    redelijk doorzichtig:</para>

	  <procedure>
	    <step>
	      <para>Wijzig <filename>/etc/rc.conf</filename> en voeg de
		volgende regels toe om de NIS domeinnaam in te stellen
		en <command>ypbind</command> mee te laten starten bij
		het starten van het netwerk:</para>

	      <programlisting>nisdomainname="test-domain"
nis_client_enable="YES"</programlisting>
	    </step>

	    <step>
	      <para>Om alle mogelijke regels voor accounts uit de NIS
		server te halen, dienen alle gebruikersaccounts uit
		<filename>/etc/master.passwd</filename> verwijderd te
		worden en dient met <command>vipw</command> de volgende
		regel aan het einde van het bestand geplaatst te
		worden:</para>

	      <programlisting>+:::::::::</programlisting>

	      <note>
		<para>Door deze regel wordt alle geldige accounts
		  in de password map van de NIS server toegang gegeven.
		  Er zijn veel manieren om de NIS client in te stellen
		  door deze regel te veranderen.  In het onderdeel
		  <link linkend="network-netgroups">netgroups</link>
		  hieronder staat meer informatie.  Zeer gedetailleerde
		  informatie staat in het boek <literal>NFS en NIS
		  beheren</literal> van O'Reilly.</para>
	      </note>

	      <note>
		<para>Er moet tenminste &eacute;&eacute;n lokale
		  account behouden blijven (dus niet ge&iuml;mporteerd
		  via NIS) in <filename>/etc/master.passwd</filename>
		  en die hoort ook lid te zijn van de groep
		  <groupname>wheel</groupname>.  Als er iets mis is met
		  NIS, dan kan die account gebruikt worden om via het
		  netwerk aan te melden, <username>root</username> te
		  worden en het systeem te repareren.</para>
	      </note>
	    </step>

	    <step>
	      <para>Om alle groepen van de NIS server te importeren,
		kan de volgende regel aan
		<filename>/etc/group</filename> toegevoegd
		worden:</para>

	      <programlisting>+:*::</programlisting>
	    </step>
	  </procedure>

	  <para>Na het afronden van deze stappen zou met <command>ypcat
	      passwd</command> de passwd map van de NIS server te zien
	    moeten zijn.</para>
	</sect4>
      </sect3>
    </sect2>

    <sect2>
      <title>NIS beveiliging</title>

      <para>In het algemeen kan iedere netwerkgebruiker een RPC verzoek
	doen uitgaan naar &man.ypserv.8; en de inhoud van de NIS maps
	ontvangen, mits die gebruiker de domeinnaam kent.  Omdat soort
	ongeautoriseerde transacties te voorkomen, ondersteunt
	&man.ypserv.8; de optie <quote>securenets</quote>, die gebruikt
	kan worden om de toegang te beperken tot een opgegeven aantal
	hosts.  Bij het opstarten probeert&man.ypserv.8; de securenets
	informatie te laden uit het bestand
	<filename>/var/yp/securenets</filename>.</para>

      <note>
	<para>Dit pad kan verschillen, afhankelijk van het pad dat
	  opgegeven is met de optie <option>&ndash;p</option>.  Dit
	  bestand bevat regels die bestaan uit een netwerkspecificatie
	  en een netwerkmasker, gescheiden door witruimte.  Regels die
	  beginnen met <literal>#</literal> worden als commentaar
	  gezien.  Een voorbeeld van een securenetsbestand zou er zo
	  uit kunnen zien:</para>
      </note>

	<programlisting># allow connections from local host -- mandatory
127.0.0.1     255.255.255.255
# allow connections from any host
# on the 192.168.128.0 network
192.168.128.0 255.255.255.0
# allow connections from any host
# between 10.0.0.0 to 10.0.15.255
# this includes the machines in the testlab
10.0.0.0      255.255.240.0</programlisting>

      <para>Als &man.ypserv.8; een verzoek ontvangt van een adres dat
	overeenkomt met een van de bovenstaande regels, dan wordt dat
	verzoek normaal verwerkt.  Als er geen enkele regel op het
	verzoek van toepassing is, dan wordt het verzoek genegeerd en
	wordt er een waarschuwing gelogd.  Als het bestand
	<filename>/var/yp/securenets</filename> niet bestaat, dan
	accepteert <command>ypserv</command> verbindingen van iedere
	host.</para>

      <para>Het programma <command>ypserv</command> ondersteunt ook
	het pakket <application>TCP Wrapper</application> van Wietse
	Venema.  Daardoor kan een beheerder de instellingenbestanden
	van <application>TCP Wrapper</application> gebruiken voor
	toegangsbeperking in plaats van
	<filename>/var/yp/securenets</filename>.</para>

      <note>
	<para>Hoewel beide methoden van toegangscontrole enige vorm van
	  beveiliging bieden, zijn ze net als de privileged port test
	  kwetsbaar voor <quote>IP spoofing</quote> aanvallen.  Al het
	  NIS gerelateerde verkeer hoort door een firewall
	  tegengehouden te worden.</para>

	<para>Servers die gebruik maken van
	  <filename>/var/yp/securenets</filename> kunnen wellicht
	  legitieme verzoeken van NIS clients weigeren als die gebruik
	  maken van erg oude TCP/IP implementaties.  Sommige van die
	  implementaties zetten alle host bits op nul als ze een
	  broadcast doen en/of kijken niet naar het subnetmasker als ze
	  het broadcastadres berekenen.  Hoewel sommige van die
	  problemen opgelost kunnen worden door de instellingen op de
	  client aan te passen, zorgen andere problemen voor het
	  noodgedwongen niet langer kunnen gebruiker van NIS voor die
	  client of het niet langer gebruiken van
	  <filename>/var/yp/securenets</filename>.</para>

	<para>Het gebruik van <filename>/var/yp/securenets</filename>
	  op een server met zo'n oude implementatie van TCP/IP is echt
	  een slecht idee en zal leiden tot verlies van NIS
	  functionaliteit voor grote delen van een netwerk.</para>

	<indexterm><primary>tcpwrapper</primary></indexterm>

	<para>Het gebruik van het <application>TCP
	    Wrapper</application> pakket leidt tot langere wachttijden
	  op de NIS server.  De extra vertraging kan net lang genoeg
	  zijn om een timeout te veroorzaken in clientprogramma's, in
	  het bijzonder als het netwerk druk is of de NIS server traag
	  is.  Als een of meer clients last hebben van dat symptoom,
	  dan is het verstandig om de clientsystemen in kwestie NIS
	  slave server te maken en naar zichzelf te laten
	  wijzen.</para>
      </note>
    </sect2>

    <sect2>
      <title>Aanmelden voor bepaalde gebruikers blokkeren</title>

      <para>In het lab staat de machine <hostid>basie</hostid>, die
	alleen faculteitswerkstation hoort te zijn.  Het is niet
	gewenst die machine uit het NIS domein te halen, maar het
	<filename>passwd</filename> bestand op de master NIS server
	bevat nu eenmaal accounts voor zowel de faculteit als de
	studenten.  Hoe kan dat opgelost worden?</para>

      <para>Er is een manier om het aanmelden van specifieke gebruikers
	op een machine te weigeren, zelfs als ze in de NIS database
	staan.  Daarvoor hoeft er alleen maar
	<literal>&ndash;<replaceable>username</replaceable></literal>
	aan het einde van <filename>/etc/master.passwd</filename> op de
	client machine toegevoegd te worden, waar
	<replaceable>username</replaceable> de gebruikersnaam van de
	gebruiker die niet mag aanmelden is.  Dit gebeurt bij voorkeur
	met <command>vipw</command>, omdat <command>vipw</command>
	de wijzigingen aan <filename>/etc/master.passwd</filename>
	controleert en ook de wachtwoord database opnieuw bouwt na
	het wijzigen.  Om bijvoorbeeld de gebruiker
	<username>bill</username> aan te kunnen laten aanmelden op
	<hostid>basie</hostid>:</para>

	<screen>basie&prompt.root; <userinput>vipw</userinput>
<userinput>[add -bill to the end, exit]</userinput>
vipw: rebuilding the database...
vipw: done

basie&prompt.root; <userinput>cat /etc/master.passwd</userinput>

root:[password]:0:0::0:0:The super-user:/root:/bin/csh
toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh
daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin
operator:*:2:5::0:0:System &:/:/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
+:::::::::
-bill

basie&prompt.root;</screen>
    </sect2>

    <sect2 id="network-netgroups">
      <sect2info>
	<authorgroup>
	  <author>
	    <firstname>Udo</firstname>
	    <surname>Erdelhoff</surname>
	    <contrib>Geschreven door </contrib>
	  </author>
	</authorgroup>
      </sect2info>

      <title>Netgroups gebruiken</title>

      <indexterm><primary>netgroups</primary></indexterm>

      <para>De methode uit het vorige onderdeel werkt prima als er maar
	voor een beperkt aantal gebruikers en/of machines speciale
	regels nodig zijn.  Op grotere netwerken
	<emphasis>gebeurt</emphasis> het gewoon dat er wordt vergeten
	om een aantal gebruikers de aanmeldrechten op gevoelige
	machines te ontnemen of dat zelfs iedere individuele machine
	aangepast moet worden, waardoor het voordeel van NIS teniet
	wordt gedaan: <emphasis>centraal</emphasis> beheren.</para>

      <para>De ontwikkelaars van NIS hebben dit probleem opgelost met
	<emphasis>netgroups</emphasis>.  Het doel en de semantiek
	kunnen vergeleken worden met de normale groepen die gebruikt
	worden op &unix; bestandssystemen.  De belangrijkste
	verschillen zijn de afwezigheid van een numeriek ID en de
	mogelijkheid om een netgroup aan te maken die zowel gebruikers
	als andere netgroups bevat.</para>

      <para>Netgroups zijn ontwikkeld om gebruikt te worden voor grote,
	complexe netwerken met honderden gebruikers en machines.  Aan
	de ene kant is dat iets Goeds.  Aan de andere kant is het wel
	complex en bijna onmogelijk om netgroups met een paar
	eenvoudige voorbeelden uit te leggen.  Dat probleem wordt in de
	rest van dit onderdeel duidelijk gemaakt.</para>

      <para>Stel dat de succesvolle implementatie van  NIS in het lab
	de interesse heeft gewekt van een centrale beheerclub.  De
	volgende taak is het uitbreiden van het NIS domein met een
	aantal andere machines op de campus.  De onderstaande twee
	tabellen bevatten de namen van de nieuwe gebruikers en de
	nieuwe machines met een korte beschijving.</para>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="2">
	  <thead>
	    <row>
	      <entry>Gebruikersna(a)m(en)</entry>

	      <entry>Beschrijving</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <entry><username>alpha</username>,
		<username>beta</username></entry>

	      <entry>Gewone medewerkers van de IT afdeling</entry>
	    </row>

	    <row>
	      <entry><username>charlie</username>,
		<username>delta</username></entry>

	      <entry>Junior medewerkers van de IT afdeling</entry>
	    </row>

	    <row>
	      <entry><username>echo</username>,
		<username>foxtrott</username>,
		<username>golf</username>, ...</entry>

	      <entry>Gewone medewerkers</entry>
	    </row>

	    <row>
	      <entry><username>able</username>,
		<username>baker</username>, ...</entry>

	      <entry>Stagiairs</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="2">
	  <thead>
	    <row>
	      <entry>Machinena(a)m(en)</entry>

	      <entry>Beschrijving</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <!--  Names taken from "Good Omens" by Neil Gaiman and
		    Terry Pratchett.  Many thanks for a brilliant
		    book.  -->

	      <entry><hostid>war</hostid>, <hostid>death</hostid>,
		<hostid>famine</hostid>,
		<hostid>pollution</hostid></entry>

	      <entry>De belangrijkste servers.  Alleen senior
		medewerkers van de IT afdeling mogen hierop
		aanmelden.</entry>
	    </row>

	    <row>
	      <!-- gluttony was omitted because it was too fat -->

	      <entry><hostid>pride</hostid>, <hostid>greed</hostid>,
		<hostid>envy</hostid>, <hostid>wrath</hostid>,
		<hostid>lust</hostid>, <hostid>sloth</hostid></entry>

	      <entry>Minder belangrijke servers.  Alle leden van
		de IT afdeling mogen aanmelden op deze
		machines.</entry>
	    </row>

	    <row>
	      <entry><hostid>one</hostid>, <hostid>two</hostid>,
		<hostid>three</hostid>, <hostid>four</hostid>,
		...</entry>

	      <entry>Gewone werkstations.  Alleen
		<emphasis>echte</emphasis> medewerkers mogen op deze
		machines aanmelden.</entry>
	    </row>

	    <row>
	      <entry><hostid>trashcan</hostid></entry>

	      <entry>Een erg oude machine zonder kritische data.  Zelfs
		de stagiair mag deze doos gebruiken.</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>

      <para>Als deze restricties ingevoerd worden door iedere gebruiker
	afzonderlijk te blokkeren, dan wordt er een
	<literal>-<replaceable>user</replaceable></literal> regel per
	systeem toegevoegd aan de <filename>passwd</filename> voor
	iedere gebruiker die niet mag aanmelden op dat systeem.  Als
	er maar &eacute;&eacute;n regel wordt vergeten, kan dat een
	probleem opleveren.  Wellicht lukt het nog dit juist in te
	stellen bij de bouw van een machine, maar het wordt
	<emphasis>echt</emphasis> vergeten de regels toe te voegen voor
	nieuwe gebruikers in de produktiegase.  Murphy was tenslotte
	een optimist.</para>

      <para>Het gebruik van netgroups biedt in deze situatie een aantal
	voordelen.  Niet iedere gebruiker hoeft separaat afgehandeld te
	worden.  Een gebruik kan aan een of meer groepen worden
	toegevoegd en aanmelden kan voor alle leden van zo'n groep
	worden toegestaan of geweigerd.  Als er een nieuwe machine
	wordt toegevoegd, dan hoeven alleen de aanmeldrestricties voor
	de netgroups te worden ingesteld.  Als er een nieuwe gebruiker
	wordt toegevoegd, dan hoeft die alleen maar aan de juiste
	netgroups te worden toegevoegd.  Die veranderingen zijn
	niet van elkaar afhankelijk: geen <quote>voor iedere combinatie
	van gebruiker en machine moet het volgende ...</quote>.  Als
	de NIS opzet zorgvuldig is gepland, dan hoeft er maar
	&eacute;&eacute;n instellingenbestand gewijzigd te worden om
	toegang tot machines te geven of te ontnemen.</para>

      <para>De eerst stap is het initialiseren van de NIS map netgroup.
	&man.ypinit.8; van &os; maakt deze map niet standaard, maar als
	die is gemaakt, ondersteunt de NIS implementatie hem wel.  Een
	lege map wordt als volgt gemaakt:</para>

      <screen>ellington&prompt.root; <userinput>vi /var/yp/netgroup</userinput></screen>

      <para>Nu kan hij gevuld worden.  In het gebruikte voorbeeld zijn
	tenminste vier netgroups:  IT medewerkers, IT junioren, gewone
	medewerkers en stagiars.</para>

      <programlisting>IT_MW   (,alpha,test-domain)    (,beta,test-domain)
IT_APP  (,charlie,test-domain)  (,delta,test-domain)
USERS   (,echo,test-domain)     (,foxtrott,test-domain) \
        (,golf,test-domain)
STAGS   (,able,test-domain)     (,baker,test-domain)</programlisting>

      <para><literal>IT_MW</literal>, <literal>IT_APP</literal>
	enzovoort, zijn de namen van de netgroups.  Iedere groep tussen
	haakjes bevat een of meer gebruikersnamen voor die groep.  De
	drie velden binnen een groep zijn:</para>

      <orderedlist>
	<listitem>
	  <para>De na(a)m(en) van de host(s) waar de volgende
	    onderdelen geldig zijn.  Als er geen hostnaam wordt
	    opgegeven dan is de regel geldig voor alle hosts.  Als er
	    wel een hostnaam wordt opgegeven, dan wordt een donker,
	    spookachtig en verwarrend domein betreden.</para>
	</listitem>

	<listitem>
	  <para>De naam van de account die bij deze netgroup
	    hoort.</para>
	</listitem>

	<listitem>
	  <para>Het NIS domein voor de account.  Er kunnen accounts
	    uit andere NIS domeinen ge&iuml;mporteerd worden in een
	    netgroup als een beheerder zo ongelukkig is meerdere
	    NIS domeinen te hebben.</para>
	</listitem>
      </orderedlist>

      <para>Al deze velden kunnen jokerkarakters bevatten.  Details
	daarover staan in &man.netgroup.5;.</para>

      <note>
	<indexterm><primary>netgroups</primary></indexterm>

	<para>De naam van een netgroup mag niet langer zijn dan acht
	  karakters, zeker niet als er andere besturingssystemen binnen
	  een NIS domein worden gebruikt.  De namen zijn
	  hoofdlettergevoelig: alleen hoofdletters gebruiken voor de
	  namen van netgroups is een makkelijke manier om onderscheid
	  te kunnen maken tussen gebruikers-, machine- en
	  netgroupnamen.</para>

	<para>Sommige NIS clients (andere dan die op &os; draaien)
	  kunnen niet omgaan met netgroups met veel leden.  Sommige
	  oudere versies van &sunos; gaan bijvoorbeeld lastig doen als
	  een netgroup meer dan 15 <emphasis>leden</emphasis> heeft.
	  Dit kan omzeild worden door meerdere sub-netgroups te maken
	  met 15 gebruikers of minder en een echte netgroup die de
	  sub-netgroups bevat:</para>

	<programlisting>BIGGRP1  (,joe1,domain)  (,joe2,domain)  (,joe3,domain) [...]
BIGGRP2  (,joe16,domain)  (,joe17,domain) [...]
BIGGRP3  (,joe31,domain)  (,joe32,domain)
BIGGROUP  BIGGRP1 BIGGRP2 BIGGRP3</programlisting>

	<para>Dit proces kan herhaald worden als er meer dan 225
	  gebruikers in een netgroup moeten.</para>
      </note>

      <para>Het activeren en distribueren van de nieuwe NIS map is
	eenvoudig:</para>

      <screen>ellington&prompt.root; <userinput>cd /var/yp</userinput>
ellington&prompt.root; <userinput>make</userinput></screen>

      <para>Hiermee worden drie nieuwe NIS maps gemaakt:
	<filename>netgroup</filename>,
	<filename>netgroup.byhost</filename> en
	<filename>netgroup.byuser</filename>.  Met &man.ypcat.1; kan
	bekeken worden op de nieuwe NIS maps beschikbaar zijn:</para>

      <screen>ellington&prompt.user; <userinput>ypcat -k netgroup</userinput>
ellington&prompt.user; <userinput>ypcat -k netgroup.byhost</userinput>
ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput></screen>

      <para>De uitvoer van het eerste commando hoort te lijken op de
	inhoud van <filename>/var/yp/netgroup</filename>.  Het tweede
	commando geeft geen uitvoer als er geen host-specifieke
	netgroups zijn ingesteld.  Het derde commando kan gebruikt
	worden om een lijst van netgroups voor een gebruiker op te
	vragen.</para>

      <para>Het instellen van de client is redelijk eenvoudig.  Om de
	server <hostid>war</hostid> in te stellen hoeft alleen met
	&man.vipw.8; de volgende regel in de regel daarna vervangen te
	worden:</para>

      <programlisting>+:::::::::</programlisting>

      <para>Vervang de bovenstaande regel in de onderstaande.</para>

      <programlisting>+@IT_MW:::::::::</programlisting>

      <para>Nu worden alleen de gebruikers die in de netgroup
	<literal>IT_MW</literal> ge&iuml;mporteerd in de wachtwoord
	database van de host <hostid>war</hostid>, zodat alleen die
	gebruikers kunnen aanmelden.</para>

      <para>Helaas zijn deze beperkingen ook van toepassing op de
	functie <literal>~</literal> van de shell en alle routines
	waarmee tussen gebruikersnamen en numerieke gebruikers ID's
	wordt gewisseld.  Met andere woorden: <command>cd
	  ~<replaceable>user</replaceable></command> werkt niet,
	<command>ls &ndash;l</command> toont het numerieke ID in plaats
	van de gebruikersnaam en <command>find . &ndash;user joe
	&ndash;print</command> faalt met de foutmelding <errorname>No
	  such user</errorname>.  Om dit te repareren moeten alle
	gebruikers ge&iuml;mporteerd worden, <emphasis>zonder ze het
	  recht te geven aan te melden op een server</emphasis>.</para>

      <para>Dit kan gedaan worden door nog een regel aan
	<filename>/etc/master.passwd</filename> toe te voegen:</para>

      <programlisting>+:::::::::/sbin/nologin</programlisting>

      <para>Dit betekent <quote>importeer alle gebruikers, maar vervang
	  de shell door <filename>/sbin/nologin</filename></quote>.
	Ieder veld in een <literal>passwd</literal> regel kan door een
	standaardwaarde vervangen worden in
	<filename>/etc/master.passwd</filename>.</para>

      <!-- Been there, done that, got the scars to prove it - ue -->
      <warning>
	<para>De regel <literal>+:::::::::/sbin/nologin</literal> moet
	na <literal>+@IT_MW:::::::::</literal> komen.  Anders krijgen
	alle gebruikers die uit NIS komen
	<filename>/sbin/nologin</filename> als aanmeldshell.</para>
      </warning>

      <para>Na deze wijziging hoeft er nog maar &eacute;&eacute;n NIS
	map gewijzigd te worden als er een nieuwe medewerker komt bij
	de IT afdeling.  Dezelfde aanpak kan gebruikt worden voor de
	minder belangrijke servers door de oude regel
	<literal>+:::::::::</literal> in de lokale versie van
	<filename>/etc/master.passwd</filename> door iets als het
	volgende te vervangen:</para>

      <programlisting>+@IT_MW:::::::::
+@IT_APP:::::::::
+:::::::::/sbin/nologin</programlisting>

      <para>Voor normale werkstations zijn het de volgende
	regels:</para>

      <programlisting>+@IT_MW:::::::::
+@USERS:::::::::
+:::::::::/sbin/nologin</programlisting>

      <para>En dat zou allemaal leuk en aardig zijn als er niet na een
	paar weken een beleidsverandering komt: de IT afdeling gaat
	stagiairs aannemen.  De IT stagiairs mogen de normale
	werkstations en de minder belangrijke servers gebruiken en de
	junior beheerders mogen gaan aanmelden op de hoofdservers.  Dat
	kan door een nieuwe groep <literal>IT_STAG</literal> te maken
	en de nieuwe IT stagiairs toe te voegen aan die netgroup en dan
	de instellingen op iedere machine te gaan veranderen.  Maar
	zoals het spreekwoord zegt: <quote>Fouten in een centrale
	planning leiden tot complete chaos.</quote></para>

      <para>Deze situaties kunnen voorkomen worden door gebruik te
	maken van de mogelijkheid in NIS om netgroups in netgroups op
	te nemen.  Het is mogelijk om rol-gebaseerde netgroups te
	maken.  Er kan bijvoorbeeld een netgroup
	<literal>BIGSRV</literal> gemaakt worden om het aanmelden op de
	belangrijke servers te beperken en er kan een andere netgroup
	<literal>SMALLSRV</literal> voor de minder belangrijke servers
	zijn en een derde netgroup met de naam
	<literal>USERBOX</literal> voor de normale werkstations.  Al
	die netgroups kunnen de netgroups bevatten die op die machines
	mogen aanmelden.  De nieuwe regels in de NIS map netgroup zien
	er dan zo uit:</para>

      <programlisting>BIGSRV    IT_MW  IT_APP
SMALLSRV  IT_MW  IT_APP  ITSTAG
USERBOX   IT_MW  ITSTAG USERS</programlisting>

      <para>Deze methode voor het instellen van aanmeldbeperkingen
	werkt redelijk goed als er groepen van machines gemaakt kunnen
	worden met identieke beperkingen.  Helaas blijkt dat eerder
	uitzondering dan regel.  Meestal moet het mogelijk zijn om per
	machine in te stellen wie wel en wie niet mogen
	aanmelden.</para>

      <para>Daarom is het ook mogelijk om via machine-specifieke
	netgroups de hierboven aangegeven beleidswijziging op te
	vangen.  In dat scenario bevat
	<filename>/etc/master.passwd</filename> op iedere machine twee
	regels die met <quote>+</quote> beginnen.  De eerste voegt de
	netgroup toe met de accounts die op de machine mogen aanmelden
	en de tweede voegt alle andere accounts toe met
	<filename>/sbin/nologin</filename> als shell.  Het is
	verstandig om als naam van de netgroup de machinenaam in
	<quote>HOOFDLETTERS</quote> te gebruiken.  De regels zien er
	ongeveer als volgt uit:</para>

      <programlisting>+@<replaceable>MACHINENAAM</replaceable>:::::::::
+:::::::::/sbin/nologin</programlisting>

      <para>Als dit voor alle machines is gedaan, dan hoeven de lokale
	versies van <filename>/etc/master.passwd</filename> nooit meer
	veranderd te worden.  Alle toekomstige wijzigingen kunnen dan
	gemaakt worden door de NIS map te wijzigen.  Hieronder staat
	een voorbeeld van een mogelijke netgroup map voor het
	beschreven scenario met een aantal toevoegingen:</para>

      <programlisting># Definieer eerst de gebruikersgroepen
IT_MW     (,alpha,test-domain)    (,beta,test-domain)
IT_APP    (,charlie,test-domain)  (,delta,test-domain)
DEPT1     (,echo,test-domain)     (,foxtrott,test-domain)
DEPT2     (,golf,test-domain)     (,hotel,test-domain)
DEPT3     (,india,test-domain)    (,juliet,test-domain)
ITSTAG    (,kilo,test-domain)     (,lima,test-domain)
D_STAGS   (,able,test-domain)     (,baker,test-domain)
#
# En nu een aantal groepen op basis van rollen
USERS     DEPT1   DEPT2     DEPT3
BIGSRV    IT_MW   IT_APP
SMALLSRV  IT_MW   IT_APP    ITSTAG
USERBOX   IT_MW   ITSTAG    USERS
#
# Een een groep voor speciale taken.
# Geef echo en golf toegang tot de anti-virus machine.
SECURITY  IT_MW   (,echo,test-domain)  (,golf,test-domain)
#
# Machine-gebaseerde netgroups
# Hoofdservers
WAR       BIGSRV
FAMINE    BIGSRV
# Gebruiker india heeft toegang tot deze server nodig.
POLLUTION  BIGSRV  (,india,test-domain)
#
# Deze is erg belangrijk en heeft strengere toegangseisen nodig.
DEATH     IT_MW
#
# De anti-virus machine als hierboven genoemd.
ONE       SECURITY
#
# Een machine die maar door 1 gebruiker gebruikt mag worden.
TWO       (,hotel,test-domain)
# [...hierna volgen de andere groepen]</programlisting>

      <para>Als er een soort database wordt gebruikt om de
	gebruikersaccounts te beheren, dan is het in ieder geval nodig
	dat ook het eerste deel van de map met de database
	rapportagehulpmiddelen gemaakt kan worden.  Dan krijgen nieuwe
	gebruikers automatisch toegang tot de machines.</para>

      <para>Nog een laatste waarschuwing: het is niet altijd aan te
	raden gebruik te maken van machine-gebaseerde netgroups.  Als
	er tientallen of zelfs honderden gelijke machines voor
	bijvoorbeeld studentenruimtes worden uitgerold, dan is het
	verstandiger rol-gebaseerde netgroups te gebruiken in plaats
	van machine-gebaseerde netgroups om de grootte van de NIS map
	binnen de perken te houden.</para>
    </sect2>

    <sect2>
      <title>Belangrijk om te onthouden</title>

      <para>In een NIS omgeving werken een aantal dingen wel
	anders.</para>

      <itemizedlist>
	<listitem>
	  <para>Als er een gebruiker toegevoegd moet worden, dan moet
	    die <emphasis>alleen</emphasis> toegevoegd worden aan de
	    master NIS server en <emphasis>mag niet vergeten worden dat
	    de NIS maps herbouwd moeten worden</emphasis>.  Als dit
	    wordt vergeten, dan kan de nieuwe gebruiker nergens anders
	    aanmelden dan op de NIS master.  Als bijvoorbeeld een
	    nieuwe gebruiker <username>jsmith</username> toegevoegd
	    moet worden:</para>

	  <screen>&prompt.root; <userinput>pw useradd jsmith</userinput>
&prompt.root; <userinput>cd /var/yp</userinput>
&prompt.root; <userinput>make test-domain</userinput></screen>

	  <para>Er kan ook <command>adduser jsmith</command> in plaats
	    van <command>pw useradd jsmith</command> gebruikt
	    worden.</para>
	</listitem>

	<listitem>
	  <para><emphasis>De beheeraccounts moeten buiten de NIS maps
	    gehouden worden</emphasis>.  Het is niet handig als de
	    beheeraccounts en wachtwoorden naar machines waarop
	    gebruikers aanmelden die geen toegang tot die informatie
	    horen te hebben zouden gaan.</para>
	</listitem>

	<listitem>
	  <para><emphasis>De NIS master en slave moeten veilig blijven
	    en zo min mogelijk niet beschikbaar zijn</emphasis>.  Als
	    de machine wordt gehackt of als hij wordt uitgeschakeld,
	    dan kunnen er in theorie nogal wat mensen niet meer
	    aanmelden.</para>

	  <para>Dit is de belangrijkste zwakte van elk gecentraliseerd
	    beheersysteem.  Als de NIS servers niet goed beschermd
	    worden, dan worden veel gebruikers boos!</para>
	</listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>NIS v1 compatibiliteit</title>

      <para><application>ypserv</application> voor &os; biedt wat
	ondersteuning voor NIS v1 clients.  De NIS implementatie van
	&os; gebruikt alleen het NIS v2 protocol, maar andere
	implementaties bevatten ondersteuning voor het v1 protocol voor
	achterwaartse compatibiliteit met oudere systemen.  De
	<application>ypbind</application> daemons die bij deze systemen
	zitten proberen een binding op te zetten met een NIS v1 server,
	hoewel dat niet per se ooit nodig is (en ze gaan misschien nog
	wel door met broadcasten nadat ze een antwoord van een v2
	server hebben ontvangen).  Het is belangrijk om te melden dat
	hoewel ondersteuning voor gewone clientcalls aanwezig is, deze
	versie van <application>ypserv</application> geen v1 map
	transferverzoeken af kan handelen.  Daarom kan
	<application>ypserv</application> niet gebruikt worden als
	master of slave in combinatie met oudere NIS servers die alleen
	het v1 protocol ondersteunen.  Gelukkig worden er in deze tijd
	niet meer zoveel van deze servers gebruikt.</para>
    </sect2>

    <sect2 id="network-nis-server-is-client">
      <title>NIS servers die ook NIS clients zijn</title>

      <para>Het is belangrijk voorzichtig om te gaan met het draaien
	van <application>ypserv</application> in een multi-server
	domein waar de server machines ook NIS clients zijn.  Het is
	in het algemeen verstandiger om de servers te dwingen met
	zichzelf te binden dan ze toe te staan een bindverzoek te
	broadcasten en het risico te lopen dat ze een binding met
	elkaar maken.  Er kunnen vreemde fouten optreden als een van de
	servers plat gaat als er andere servers van die server
	afhankelijk zijn.  Na verloop van tijd treedt op de clients wel
	een timeout op en verbinden ze met een andere server, maar de
	daarmee gepaard gaande vertraging kan aanzienlijk zijn en de
	foutmodus is nog steeds van toepassing, omdat de servers dan
	toch weer opnieuw een verbinding met elkaar kunnen
	vinden.</para>

      <para>Het is mogelijk een host aan een specifieke server te
	binden door aan <command>ypbind</command> de vlag
	<option>&ndash;S</option> mee te geven.  Om dit niet iedere
	keer handmatig na een herstart te hoeven uitvoeren, kan de
	volgende regel worden opgenomen in
	<filename>/etc/rc.conf</filename> van de NIS server:</para>

      <programlisting>nis_client_enable="YES"	# start ook het client gedeelte
nis_client_flags="-S <replaceable>NIS domain</replaceable>,<replaceable>server</replaceable>"</programlisting>

      <para>In &man.ypbind.8; staat meer informatie.</para>
    </sect2>

    <sect2>
      <title>Wachtwoordformaten</title>

      <indexterm>
	<primary>NIS</primary>

	<secondary>wachtwoordformaten</secondary>
      </indexterm>

      <para>Een van de meest voorkomende problemen bij het
	implementeren van NIS is de compatibiliteit van het
	wachtwoordformaat.  Als een NIS server wachtwoorden gebruikt
	die met DES gecodeerd zijn, dan kunnen alleen clients die ook
	DES gebruiken ondersteund worden.  Als er bijvoorbeeld
	&solaris; NIS clients in een netwerk zijn, dan moet er vrijwel
	zeker gebruik gemaakt worden van met DES gecodeerde
	wachtwoorden.</para>

      <para>Van welk formaat clients en servers gebruik maken is te
	zien in <filename>/etc/login.conf</filename>.  Als een host
	gebruik maakt van met DES gecodeerde wachtwoorden, dan staat er
	in de klasse <literal>default</literal> een regel als de
	volgende:</para>

      <programlisting>default:\
	:passwd_format=des:\
	:copyright=/etc/COPYRIGHT:\
	[Overige regels weggelaten]</programlisting>

      <para>Andere mogelijke waarden voor
	<literal>passwd_format</literal> zijn
	<literal>blf</literal> en <literal>md5</literal>
	(respectievelijk voor Blowfish en MD5 gecodeerde
	wachtwoorden).</para>

      <para>Als er wijzigingen gemaakt zijn aan
	<filename>/etc/login.conf</filename> dan moet de
	login capability database herbouwd worden door het volgende
	commando als <username>root</username> uit te voeren:</para>

      <screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen>

      <note>
	<para>Het formaat van de wachtwoorden die al in
	  <filename>/etc/master.passwd</filename> staan worden niet
	  bijgewerkt totdat een gebruiker zijn wachtwoord voor de
	  eerste keer wijzigt <emphasis>nadat</emphasis> de login
	  capability database is herbouwd.</para>
      </note>

      <para>Om te zorgen dat de wachtwoorden in het gekozen formaat
	zijn gecodeerd, moet daarna gecontroleerd worden of de waarde
	<literal>crypt_default</literal> in
	<filename>/etc/auth.conf</filename> de voorkeur geeft aan het
	gekozen formaat.  Om dat te realiseren dient het gekozen
	formaat vooraan gezet te worden in de lijst.  Als er
	bijvoorbeeld gebruik gemaakt wordt van DES gecodeerde
	wachtwoorden, dan hoort de regel er als volgt uit te
	zien:</para>

      <programlisting>crypt_default	=	des blf md5</programlisting>

      <para>Als de bovenstaande stappen op alle &os; gebaseerde NIS
	servers en clients zijn uitgevoerd, dan is het zeker dat ze het
	allemaal eens zijn over welk wachtwoordformaat er op het
	netwerk wordt gebruikt.  Als er problemen zijn bij de
	authenticatie op een NIS client, dan is dit een prima startpunt
	voor het uitzoeken waar de problemen vandaan komen.  Nogmaals:
	als er een NIS server in een heterogene omgeving wordt
	geplaatst, dan is het waarschijnlijk dat er gebruik gemaakt
	moet worden van DES op alle systemen, omdat dat de laagst
	overeenkomende standaard is.</para>
    </sect2>
  </sect1>

  <sect1 id="network-dhcp">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Greg</firstname>
	  <surname>Sutter</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Automatisch netwerk instellen (DHCP)</title>

    <sect2>
      <title>Wat is DHCP?</title>

      <indexterm>
	<primary>Dynamic Host Configuration Protocol</primary>

	<see>DHCP</see>
      </indexterm>

      <indexterm><primary>Internet Software Consortium (ISC)</primary></indexterm>

      <para>DHCP, het Dynamic Host Configuration Protocol, schrijft
	voor hoe een systeem verbinding kan maken met een netwerk en
	hoe het de benodigde informatie kan krijgen om met dat netwerk
	te communiceren.  &os; gebruikt de ISC (Internet Software
	Consortium) DHCP implementatie, dus alle
	implementatie-specifieke informatie die hier wordt gegeven is
	bedoeld voor de ISC distributie.</para>
    </sect2>

    <sect2>
      <title>Wat behandeld wordt</title>

      <para>In dit onderdeel worden de client- en servercomponenten van
	het ISC DHCP systeem beschreven.  Het programma voor de client,
	<command>dhclient</command>, zit standaard in &os; en de server
	is beschrikbaar via de <filename
	  role="package">net/isc-dhcp3-server</filename> port.  Naast
	de onderstaande informatie, zijn de hulppagina's van
	&man.dhclient.8;, &man.dhcp-options.5; en &man.dhclient.conf.5;
	bruikbare bronnen.</para>
    </sect2>

    <sect2>
      <title>Hoe het werkt</title>

      <indexterm><primary>UDP</primary></indexterm>

      <para>Als <command>dhclient</command>, de DHCP client, wordt
	uitgevoerd op een clientmachine, dan begint die met het
	broadcasten van verzoeken om instellingeninformatie.  Standaard
	worden deze verzoeken op UDP poort 68 gedaan.  De server
	antwoordt op UDP 67 en geeft de client een IP adres en andere
	relevante netwerkinformatie, zoals een netmasker, router en DNS
	servers.  Al die informatie komt in de vorm van een DHCP
	<quote>lease</quote> en is voor een bepaalde tijd geldig
	(die is ingesteld door de beheerder van de DHCP server).  Op
	die manier kunnen IP adressen voor clients die niet langer met
	het netwerk verbonden zijn (stale) automatisch weer ingenomen
	worden.</para>

      <para>DHCP clients kunnen veel informatie van de server krijgen.
	Er staat een uitputtende lijst in &man.dhcp-options.5;.</para>
    </sect2>

    <sect2>
      <title>&os; integratie</title>

      <para>&os; integreert de ISC DHCP client
	<command>dhclient</command> volledig.  Er is ondersteuning voor
	de DHCP client in zowel het installatieprogramma als in het
	basissysteem, waardoor het niet noodzakelijk is om kennis te
	hebben van het maken van netwerkinstellingen voor het netwerk
	waar een DHCP server draait.  <command>dhclient</command> is
	onderdeel van &os; distributies sinds 3.2.</para>

      <indexterm><primary><application>sysinstall</application></primary></indexterm>

      <para>DHCP wordt ondersteund door
	<application>sysinstall</application>.  Bij het instellen van
	een netwerkinterface binnen
	<application>sysinstall</application> is de tweede vraag:
	<quote>Wil je proberen de interface met DHCP in te
	  stellen?</quote>  Als het antwoord bevestigend luidt, dan
	wordt <command>dhclient</command> uitgevoerd en als dat
	succesvol verloopt, dan worden de netwerkinstellingen
	automatisch ingevuld.</para>

      <para>Voor het gebruiken van DHCP bij het opstarten van het
	systeem zijn twee instellingen nodig:</para>

      <indexterm>
	<primary>DHCP</primary>

	<secondary>vereisten</secondary>
      </indexterm>

      <itemizedlist>
	<listitem>
	  <para>Het apparaat <devicename>bpf</devicename> moet in de
	    kernel gecompileerd zijn.  Dit kan door
	    <literal>device bpf</literal> (<literal>pseudo-device
	      bpf</literal> onder &os;&nbsp;4.X) aan het bestand met
	    kernelinstellingen toe te voegen en de kernel te herbouwen.
	    Meer informatie over het bouwen van een kernel staat in
	    <xref linkend="kernelconfig">.</para>

	  <para>Het apparaat <devicename>bpf</devicename> is al
	    onderdeel van de <filename>GENERIC</filename> kernel die
	    bij &os; zit, dus als er geen sprake is van een aangepaste
	    kernel, dan hoeft er geen nieuwe gemaakt te worden om DHCP
	    aan te praat te krijgen.</para>

	  <note>
	    <para>Voor de lezer die bijzonder begaan is met
	      beveiliging, is het belangrijk aan te geven dat
	      <devicename>bpf</devicename> ook het apparaat is waardoor
	      pakketsnuffelaars hun werk kunnen doen (hoewel ze nog
	      steeds als <username>root</username> moeten draaien).
	      <devicename>bpf</devicename> <emphasis>is</emphasis>
	      noodzakelijk voor DHCP, maar als beveiliging bijzonder
	      belangrijk is, dan hoort <devicename>bpf</devicename>
	      waarschijnlijk niet in een kernel te zitten omdat de
	      verwachting dat er in de toekomst ooit DHCP gebruikt gaat
	      worden.</para>
	  </note>
	</listitem>

	<listitem>
	  <para>In <filename>/etc/rc.conf</filename> moet het volgende
	    worden opgenomen:</para>

	  <programlisting>ifconfig_fxp0="DHCP"</programlisting>

	  <note>
	    <para><literal>fxp0</literal> dient vervangen te worden
	      door de juiste aanduiding van de interface die dynamisch
	      ingesteld moet worden, zoals beschreven staat in <xref
		linkend="config-network-setup">.</para>
	  </note>

	  <para>Als er een andere lokatie voor
	    <command>dhclient</command> wordt gebruikt of als er extra
	    parameters aan <command>dhclient</command> meegegeven
	    moeten worden, dan dient ook iets als het volgende
	    toegevoegd te worden:</para>

	  <programlisting>dhcp_program="/sbin/dhclient"
dhcp_flags=""</programlisting>
	</listitem>
      </itemizedlist>

      <indexterm>
	<primary>DHCP</primary>

	<secondary>server</secondary>
      </indexterm>

      <para>De DHCP server, <application>dhcpd</application>, zit bij
	de port <filename
	  role="package">net/isc-dhcp3-server</filename> in de
	  Portscollectie.  Deze port bevat de ISC DHCP server en
	documentatie.</para>
    </sect2>

    <sect2>
      <title>Bestanden</title>

      <indexterm>
	<primary>DHCP</primary>

	<secondary>instellingenbestanden</secondary>
      </indexterm>

      <itemizedlist>
	<listitem>
	  <para><filename>/etc/dhclient.conf</filename></para>

	  <para>Voor <command>dhclient</command> is een
	    instellingenbestand <filename>/etc/dhclient.conf</filename>
	    nodig.  Dat bestand bevat meestal alleen maar commentaar,
	    omdat de standaardinstellingen redelijk zinvol zijn.  Dit
	    bestand wordt beschreven in &man.dhclient.conf.5;.</para>
	</listitem>

	<listitem>
	  <para><filename>/sbin/dhclient</filename></para>

	  <para><command>dhclient</command> is statisch gelinkt en
	    staat in <filename>/sbin</filename>.  Er staat meer
	    informatie over <command>dhclient</command> in
	    &man.dhclient.8;.</para>
	</listitem>

	<listitem>
	  <para><filename>/sbin/dhclient-script</filename></para>

	  <para><command>dhclient-script</command> is het
	    &os;-specifieke DHCP client instellingenscript.  Het wordt
	    beschreven in &man.dhclient-script.8;, maar het is niet
	    nodig het te wijzigen om goed te werken.</para>
	</listitem>

	<listitem>
	  <para><filename>/var/db/dhclient.leases</filename></para>

	  <para>De DHCP client houdt in dit bestand een database bij
	    van geldige leases, die naar een logboekbestand worden
	    geschreven.  In &man.dhclient.leases.5; staat een iets
	    uitgebreidere beschrijving.</para>
	</listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>Verder lezen</title>

      <para>Het DHCP protocol staat volledig beschreven in <ulink
	  url="http://www.freesoft.org/CIE/RFC/2131/">RFC 2131</ulink>.
	Er is nog een bron van informatie ingesteld op <ulink
	  url="http://www.dhcp.org/"></ulink>.</para>
    </sect2>

    <sect2 id="network-dhcp-server">
      <title>Een DHCP server installeren en instellen</title>

      <sect3>
	<title>Wat behandeld wordt</title>

	<para>In dit onderdeel wordt beschreven hoe een &os; systeem
	  zo ingesteld kan worden dat het opereert als DHCP server
	  door gebruik te maken van de ISC (Internet Software
	  Consortium) implementatie van de DHCP suite.</para>

	<para>Het servergedeelte van de suite is geen
	  standaardonderdeel van &os; en om deze dienst aan te bieden
	  dient de port <filename
	    role="package">net/isc-dhcp3-server</filename>
	  ge&iuml;nstalleerd te worden.  In <xref linkend="ports">
	  staat meer informatie over de Portscollectie.</para>
      </sect3>

      <sect3>
	<title>DHCP serverinstallatie</title>

	<indexterm>
	  <primary>DHCP</primary>

	  <secondary>installatie</secondary>
	</indexterm>

	<para>Om een &os; systeem in te stellen als DHCP server moet
	  het apparaat &man.bpf.4; in de kernel zijn opgenomen.  Om dit
	  te doen dient <literal>device bpf</literal>
	  (<literal>pseudo-device bpf</literal> onder &os;&nbsp;4.X)
	  aan het bestand met kernelinstellingen toegegvoegd te worden
	  en dient de kernel herbouwd te worden.  Meer informatie over
	  het bouwen van kernels staat in <xref
	    linkend="kernelconfig">.</para>

	<para>Het apparaat <devicename>bpf</devicename> is al onderdeel
	  van de <filename>GENERIC</filename> kernel die bij &os;, dus
	  het is meestal niet nodig om een aangepaste kernel te bouwen
	  om DHCP aan de praat te krijgen.</para>

	<note>
	  <para>Het is belangrijk te vermelden dat
	    <devicename>bpf</devicename> ook het apparaat is waardoor
	    pakketsnuffelaars kunnen werken (hoewel de programma's die
	    er gebruik van maken wel bijzondere toegang nodig hebben).
	    <devicename>bpf</devicename> <emphasis>is</emphasis>
	    verplicht voor DHCP, maar als beveiliging van belang is,
	    dan is het waarschijnlijk niet verstandig om
	    <devicename>bpf</devicename> in een kernel op te nemen
	    alleen omdat er in de toekomst misschien ooit DHCP gebruikt
	    gaat worden.</para>
	</note>

	<para>Hierna dient het standaardbestand
	  <filename>dhcpd.conf</filename> dat door de port <filename
	    role="package">net/isc-dhcp3-server</filename> is
	  ge&iuml;nstalleerd gewijzigd te worden.  Standaard is dit
	  <filename>/usr/local/etc/dhcpd.conf.sample</filename> en dit
	  bestand dient gekopieerd te worden naar
	  <filename>/usr/local/etc/dhcpd.conf</filename> voordat de
	  wijzgingen worden gemaakt.</para>
      </sect3>

      <sect3>
	<title>De DHCP server instellen</title>

	<indexterm>
	  <primary>DHCP</primary>

	  <secondary>dhcpd.conf</secondary>
	</indexterm>

	<para><filename>dhcpd.conf</filename> is opgebouwd uit
	  declaraties over subnetten en hosts en is wellicht het meest
	  eenvoudig te beschijven met een voorbeeld:</para>

	<programlisting>option domain-name "example.com";<co id="domain-name">
option domain-name-servers 192.168.4.100;<co id="domain-name-servers">
option subnet-mask 255.255.255.0;<co id="subnet-mask">

default-lease-time 3600;<co id="default-lease-time">
max-lease-time 86400;<co id="max-lease-time">
ddns-update-style none;<co id="ddns-update-style">

subnet 192.168.4.0 netmask 255.255.255.0 {
  range 192.168.4.129 192.168.4.254;<co id="range">
  option routers 192.168.4.1;<co id="routers">
}

host mailhost {
  hardware ethernet 02:03:04:05:06:07;<co id="hardware">
  fixed-address mailhost.example.com;<co id="fixed-address">
}</programlisting>

	<calloutlist>
	  <callout arearefs="domain-name">
	    <para>Deze optie geeft het domein aan dat door clients als
	      standaard zoekdomein wordt gebruikt.  In
	      &man.resolv.conf.5; staat meer over wat dat
	      betekent.</para>
	  </callout>

	  <callout arearefs="domain-name-servers">
	    <para>Deze optie beschrijft een door komma's gescheiden
	      lijst met DNS servers die de client moet
	      gebruiken.</para>
	  </callout>

	  <callout arearefs="subnet-mask">
	    <para>Het netmasker dat aan de clients wordt
	      voorgeschreven.</para>
	  </callout>

	  <callout arearefs="default-lease-time">
	    <para>Een client kan om een bepaalde duur vragen die een
	      lease geldig is.  Anders geeft de server aan wanneer de
	      lease vervalt (in seconden).</para>
	  </callout>

	  <callout arearefs="max-lease-time">
	    <para>Dit is de maximale duur voor een lease die de server
	      toestaat.  Als een client vraagt om een langere lease,
	      dan wordt die wel verstrekt, maar is de maar geldig
	      gedurende <literal>max-lease-time</literal>
	      seconden.</para>
	  </callout>

	  <callout arearefs="ddns-update-style">
	    <para>Deze optie geeft aan of de DHCP server moet proberen
	      de DNS server bij te werken als een lease is geaccepteerd
	      of wordt vrijgegeven.  In de ISC implementatie is deze
	      optie <emphasis>verplicht</emphasis>.</para>
	  </callout>

	  <callout arearefs="range">
	    <para>Dit geeft aan welke IP adressen in de groep met
	      adressen zitten die zijn gereserveerd om uitgegeven te
	      worden aan clients.  Alle IP adressen tussen de
	      aangegeven adressen en die adressen zelf worden aan
	      clients uitgegeven.</para>
	  </callout>

	  <callout arearefs="routers">
	    <para>Geeft de default gateway aan die aan de clients
	      wordt voorgeschreven.</para>
	  </callout>

	  <callout arearefs="hardware">
	    <para>Het hardware MAC adres van een host, zodat de DHCP
	      server een host kan herkennen als die een verzoek
	      doet.</para>
	  </callout>

	  <callout arearefs="fixed-address">
	    <para>Geeft een host aan die altijd hetzelfde IP adres
	      moet krijgen.  Hier kan een hostnaam gebruikt worden,
	      omdat de DHCP server de hostnaam zelf opzoekt voordat de
	      lease-informatie terug wordt gegeven.</para>
	  </callout>
	</calloutlist>

	<para>Als <filename>dhcpd.conf</filename> is ingesteld, kan de
	  server met het volgende commando gestart worden:</para>

	<screen>&prompt.root; <userinput>/usr/local/etc/rc.d/isc-dhcpd.sh start</userinput></screen>

	<para>Als er later wijzigingen in de instellingen gemaakt
	  moeten worden, dan is het belangrijk te onthouden dat het
	  sturen van een <literal>SIGHUP</literal> signaal naar
	  <application>dhcpd</application> <emphasis>niet</emphasis>
	  resulteert in het opnieuw laden van de instellingen, zoals
	  voor de meeste daemons geldt.  Voor deze daemon dient een
	  signaal <literal>SIGTERM</literal> gestuurd te worden om het
	  proces te stoppen.  Daarna dient de daemon met het hiervoor
	  beschreven commando weer gestart worden.</para>
      </sect3>

      <sect3>
	<title>Bestanden</title>

	<indexterm>
	  <primary>DHCP</primary>

	  <secondary>instellingenbestanden</secondary>
	</indexterm>

	<itemizedlist>
	  <listitem>
	    <para><filename>/usr/local/sbin/dhcpd</filename></para>

	    <para><application>dhcpd</application> is statisch gelinkt
	      en staat in <filename>/usr/local/sbin</filename>.  In de
	      hulppagina voor &man.dhcpd.8; die meekomt met de port
	      staat meer informatie over
	      <application>dhcpd</application>.</para>
	  </listitem>

	  <listitem>
	    <para><filename>/usr/local/etc/dhcpd.conf</filename></para>

	    <para><application>dhcpd</application> heeft een
	      instellingenbestand,
	      <filename>/usr/local/etc/dhcpd.conf</filename>, nodig
	      voordat de daemon diensten aan clients kan leveren.  Het
	      bestand moet alle informatie bevatten die aan clients
	      gegeven moet worden en de informatie die nodig is voor
	      het draaien van de dienst.  Dit instellingenbestand staat
	      beschreven in de hulppagina voor &man.dhcpd.conf.5; die
	      meekomt met de port.</para>
	  </listitem>

	  <listitem>
	    <para><filename>/var/db/dhcpd.leases</filename></para>

	    <para>De DHCP server houdt in dit bestand een database bij
	      met leases die zijn uitgegeven en die naar een logboek
	      worden geschreven.  In de hulppagina &man.dhcpd.leases.5;
	      die bij de port zit wordt dit uitvoeriger
	      beschreven.</para>
	  </listitem>

	  <listitem>
	    <para><filename>/usr/local/sbin/dhcrelay</filename></para>

	    <para><application>dhcrelay</application> wordt in
	      uitgebreidere omgevingen gebruikt waar de ene DHCP server
	      een verzoek van een client naar een andere DHCP server op
	      een ander netwerk doorstuurt.  Als deze functionaliteit
	      nodig is, kan die beschikbaar komen door de port
	      <filename role="package">net/isc-dhcp3-relay</filename>
	      te installeren.  De hulppagina voor &man.dhcrelay.8; die
	      bij de port zit bevat meer details.</para>
	  </listitem>
	</itemizedlist>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="network-dns">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Chern</firstname>
	  <surname>Lee</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Domeinnaamsysteem (DNS)</title>

    <sect2>
      <title>Overzicht</title>

      <indexterm><primary>BIND</primary></indexterm>

      <para>&os; gebruikt standaard een versie van BIND (Berkeley
	Internet Name Domain), wat de meest gebruikte implementatie van
	het DNS protocol is.  DNS is het protocol waarmee namen aan
	IP adressen gebonden worden en vice versa.  Zo wordt
	bijvoorbeeld op een zoekopdracht voor <hostid
	  role="fqdn">www.FreeBSD.org</hostid> geantwoord met het IP
	adres van de webserver van het &os; Project en op een
	zoekopdracht voor <hostid role="fqdn">ftp.FreeBSD.org</hostid>
	wordt geantwoord met het bijbehorende IP adres van de FTP
	machine.  Het tegenovergestelde kan ook gebeuren.  Een
	zoekopdracht voor een IP adres kan de bijbehorende hostnaam
	opleveren.  Het is niet nodig om een nameserver te draaien om
	op een systeem zoekopdrachten met DNS te maken.</para>

      <indexterm><primary>DNS</primary></indexterm>

      <para>DNS wordt op internet onderhouden door een complex systeem
	van autoritaire root nameservers en andere nameservers met een
	kleinere scope die domeininformatie hosten en cachen.</para>

      <para>In dit document wordt BIND 8.x beschreven, de stabiele
	versie die in &os; wordt gebruikt.  Versies van &os;&nbsp;5.3
	en later bevatten <acronym>BIND</acronym>9 en aanwijzingen voor
	het instellen daarvan zijn later in dit hoofdstuk te vinden.
	Gebruikers van &os;&nbsp;5.2 en eerdere versies kunnen
	<acronym>BIND</acronym>9 installeren vanuit de port <filename
	  role="package">net/bind9</filename>.</para>

      <para>RFC1034 and RFC1035 schrijven het DNS protocol voor.</para>

      <para>Op dit moment wordt BIND beheerd door het Internet Software
	Consortium <ulink url="http://www.isc.org/"></ulink>.</para>
    </sect2>

    <sect2>
      <title>Terminologie</title>

      <para>Voor het begrip van dit document dienen aan aantal termen
	begrepen te worden.</para>

      <indexterm><primary>resolver</primary></indexterm>

      <indexterm><primary>reverse DNS</primary></indexterm>

      <indexterm><primary>root zone</primary></indexterm>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="2">
	  <colspec colwidth="1*">

	  <colspec colwidth="3*">

	  <thead>
	    <row>
	      <entry>Term</entry>

	      <entry>Definitie</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <entry>Voorwaartse DNS</entry>

	      <entry>Het koppelen van hostnamen aan IP
		adressen;</entry>
	    </row>

	    <row>
	      <entry>Herkomst (origin)</entry>

	      <entry>Verwijst naar het domein dat door een bepaald
		zonebestand wordt gedekt;</entry>
	    </row>

	    <row>
	      <entry><application>named</application>, BIND,
		nameserver</entry>

	      <entry>Vaak gebruikte namen voor het BIND nameserver
		pakket in &os;;</entry>
	    </row>

	    <row>
	      <entry>Resolver</entry>

	      <entry>Een systeemproces waarmee een machine
		zoekopdrachten om zoneinformatie aan een nameserver
		stelt;</entry>
	    </row>

	    <row>
	      <entry>Reverse DNS</entry>

	      <entry>Het tegenovergestelde van voorwaartse DNS.  Het
		koppelen van IP adressen aan hostnamen;</entry>
	    </row>

	    <row>
	      <entry>Root zone</entry>

	      <entry>Het begin van de internet zonehi&euml;rarchie.
		Alle zones vallen onder de root zone, net zoals alle
		bestanden in een bestandssysteem onder de rootmap
		vallen;</entry>
	    </row>

	    <row>
	      <entry>Zone</entry>

	      <entry>Een individueel domein, subdomein of een deel van
		de DNS die door dezelfde autoriteit wordt
		beheerd.</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>

      <indexterm>
	<primary>zones</primary>

	<secondary>voorbeelden</secondary>
      </indexterm>

      <para>Voorbeelden van zones:</para>

      <itemizedlist>
	<listitem>
	  <para><hostid>.</hostid> is de root zone;</para>
	</listitem>

	<listitem>
	  <para><hostid>org.</hostid> is een zone onder de root
	    zone;</para>
	</listitem>

	<listitem>
	  <para><hostid role="domainname">example.org.</hostid> is een
	    zone onder het zone <hostid>org.</hostid>;</para>
	</listitem>

	<listitem>
	  <para><hostid role="domainname">foo.example.org.</hostid> is
	    een subdomein onder de zone <hostid
	      role="domainname">example.org.</hostid>;</para>
	</listitem>

	<listitem>
	  <para><hostid>1.2.3.in-addr.arpa</hostid> is een zone waarin
	    alle IP adressen die onder de IP ruimte <hostid
	      role="ipaddr">3.2.1.*</hostid> vallen.</para>
	</listitem>
      </itemizedlist>

      <para>Zoals te zien is staat het meer specifieke deel van een
	hostnaam aan de linkerkant.  Zo is <hostid
	  role="domainname">example.org.</hostid> bijvoorbeeld meer
	specifiek dan <hostid>org.</hostid> en is <hostid>org.</hostid>
	meer specifiek van de root zone.  De indeling van ieder deel
	van een hostnaam lijkt veel op een bestandssysteem: de map
	<filename>/dev</filename> valt onder de root, enzovoort.</para>
    </sect2>

    <sect2>
      <title>Redenen om een nameserver te draaien</title>

      <para>Nameservers bestaan in het algemeen in twee smaken: een
	authoritative namserver en een caching namserver.</para>

      <para>Er is een authoritative namserver nodig als:</para>

      <itemizedlist>
	<listitem>
	  <para>het nodig is DNS informatie aan te bieden aan de wereld
	    om met autoriteit (authoritatively) op verzoeken te
	    antwoorden;</para>
	</listitem>

	<listitem>
	  <para>een domein, zoals <hostid
	      role="domainname">example.org</hostid>, is geregistreerd
	    en er IP adressen aan hostnamen die daaronder liggen
	    toegewezen moeten worden;</para>
	</listitem>

	<listitem>
	  <para>een IP adresblok reverse DNS entries nodig heeft (IP
	    naar hostnaam);</para>
	</listitem>

	<listitem>
	  <para>een backup namserver, die slave wordt genoemd, moet
	    antwoorden op verzoeken als de primaire down of niet
	    toegankelijk is.</para>
	  </listitem>
      </itemizedlist>

      <para>Er is een caching namserver nodig als:</para>

      <itemizedlist>
	<listitem>
	  <para>een lokale DNS server kan cachen en wellicht sneller
	    kan antwoorden dan een namserver die verder weg
	    staat;</para>
	</listitem>

	<listitem>
	  <para>het wenselijk is om het totale netwerkverkeer te
	    reduceren.  Er is ooit vastgesteld dat DNS verkeer 5% of
	    meer van het totale verkeer op internet uitmaakt.</para>
	</listitem>
      </itemizedlist>

      <para>Als er een verzoek wordt gedaan voor <hostid
	  role="fqdn">www.FreeBSD.org</hostid>, dan doet de resolver
	meestal een verzoek bij de nameserver van de ISP die de uplink
	levert en ontvangt daarop een antwoord.  Met een lokale,
	caching namserver hoeft het verzoek maar &eacute;&eacute;n
	keer door de caching nameserver naar de buitenwereld gedaan te
	worden.  Voor ieder volgend verzoek hoeft niet buiten het
	lokale netwerk gekeken te worden omdat het al lokaal in de
	cache staat.</para>
    </sect2>

    <sect2>
      <title>Hoe het werkt</title>

      <para>Om begrijpelijke redenen heet de BIND daemon in &os;
	<application>named</application>.</para>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="2">
	  <thead>
	    <row>
	      <entry>Bestand</entry>

	      <entry>Beschrijving</entry>
	    </row>
	  </thead>

	  <tbody>
	    <row>
	      <entry><application>named</application></entry>

	      <entry>de BIND daemon</entry>
	    </row>

	    <row>
	      <entry><command>ndc</command></entry>

	      <entry>name daemon beheerprogramma</entry>
	    </row>

	    <row>
	      <entry><filename>/etc/namedb</filename></entry>

	      <entry>map waar BIND zoneinformatie staat</entry>
	    </row>

	    <row>
	      <entry><filename>/etc/namedb/named.conf</filename></entry>

	      <entry>daemon instellingenbestand</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>

      <para>Zonebestanden staat meestal binnen de map
	<filename>/etc/namedb</filename> en bevatten de DNS zone
	informatie die de namserver aanbiedt.</para>
    </sect2>

    <sect2>
      <title>BIND starten</title>

      <indexterm>
	<primary>BIND</primary>

	<secondary>starten</secondary>
      </indexterm>

      <para>Omdat BIND standaard wordt ge&iuml;nstalleerd, is het
	instellen relatief eenvoudig.</para>

      <para>Om de <application>named</application> daemon bij het
	booten te laten starten kan de volgende regel in
	<filename>/etc/rc.conf</filename> gezet worden:</para>

      <programlisting>named_enable="YES"</programlisting>

      <para>Om na het instellen de daemon handmatig te starten:</para>

      <screen>&prompt.root; <userinput>ndc start</userinput></screen>
    </sect2>

    <sect2>
      <title>Instellingenbestanden</title>

      <indexterm>
	<primary>BIND</primary>

	<secondary>instellingenbestanden/secondary>
      </indexterm>

      <sect3>
	<title><command>make-localhost</command> gebruiken</title>

	<para>Het volgende commando dient uitgevoerd te worden om het
	  bestand voor de lokale reverse DNS zone in
	  <filename>/etc/namedb/localhost.rev</filename> op de juiste
	  wijze aan te maken:</para>

	<screen>&prompt.root; <userinput>cd /etc/namedb</userinput>
&prompt.root; <userinput>sh make-localhost</userinput></screen>
      </sect3>

      <sect3>
	<title><filename>/etc/namedb/named.conf</filename></title>

	<programlisting>// &dollar;FreeBSD$
//
// In de hulppagina named(8) zijn meer details te vinden.  Voor het
// opzetten van een primaire server is begrip van de werking van DNS
// noodzakelijk.  Zelfs eenvoudige fouten kunnen de werking verstoren
// of veel onnodig verkeer veroorzaken.

options {
        directory "/etc/namedb";

// Als toevoeging op de "forwarders" clausule kan de namserver ook
// worden aangegeven dat hij nooit zelf verzoeken mag maken, maar dat
// altijd aan zijn forwarders moet vragen door de volgende regel te
// activeren:
//
//      forward only;

// Als er een DNS server beschikbaar is bij een upstream provider dan
// kan het IP adres op de regel hieronder ingegeven worden en kan die
// geactiveerd worden.  Hierdoor wordt voordeel gehaald uit de cache,
// waardoor het DNS verkeer op internet vermindert.
/*
        forwarders {
                127.0.0.1;
        };
*/</programlisting>

	<para>Zoals al in het commentaar staat kan het gebruik van een
	  cache in de uplink met <literal>forwarders</literal>
	  ingeschakeld worden.  In normale omstandigheden maakt een
	  namserver recursief verzoeken tot er een antwoord komt waar
	  de server naar op zoek is.  Door de bovenstaande optie in te
	  schakelen wordt eerst bij de namserver die is opgegeven
	  gevraagd, waardoor er gebruik gemaakt kan worden van de
	  cache van die server.  Als die namserver een drukke, snelle
	  namserver is, kan het erg de moeite waard zijn van deze
	  optie gebruik te maken.</para>

	<warning>
	  <para><hostid role="ipaddr">127.0.0.1</hostid> werkt hier
	    <emphasis>niet</emphasis>.  Dat IP adres dient gewijzigd te
	    worden naar een werkende namserver in de uplink.</para>
	</warning>

	<programlisting>/*
 * Als er een firewall tussen een host en namservers staat waarmee
 * gesproken moet worden, dan dient het commentaar voor het
 * query-source hieronder verwijderd te worden.  In eerdere versies van
 * BIND werden verzoeken altijd via poort 53 gedaan, maar vanaf
 * BIND&nbsp;8.1 wordt een poort zonder privileges gebruikt.
 */
// query-source address * port 53;

/*
 * Als de namserver in een sandbox draait, kan het wenselijk zijn om
 * een andere lokatie voor het dumpbestand in te geven.
 */
// dump-file "s/named_dump.db";
};

// Opmerking: het volgende wordt in een latere release ondersteund.
/*
host { any; } {
        topology {
                127.0.0.0/8;
        };
};
*/

// Het opzetten van een secondary is veel eenvoudiger en dat wordt
// hieronder ruweg beschreven.
//
// Als er een lokale nameserver wordt gebruikt, dan dient niet
// vergeten te worden om 127.0.0.1 in /etc/resolv.conf te zetten zodat
// die eerst bevraagd wordt.  Het is ook belangrijk wijzigingen aan te
// brengen in /etc/rc.conf om named te starten.

zone "." {
        type hint;
        file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
        type master;
        file "localhost.rev";
};

zone
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" {
        type master;
        file "localhost.rev";
};

// NB: De IP adressen hieronder zijn bedoeld als voorbeeld en dienen
//     niet gebruikt te worden!
//
// Voorbeeld secondary instellingen.  Het kan handig zijn om tenminste
// secondary te worden voor de zone waar de host onderdeel van
// uitmaakt.  Bij netwerkbeheerders kan nagevraagd worden welke server
// de primaire server is.
//
// De reverse lookup zone (IN-ADDR.ARPA) mag nooit vergeten worden! Dat
// zijn de eerste bytes van het respectievelijke IP adres in omgekeerde
// volgorde met daarachter ".IN-ADDR.ARPA".
//
// Het is echter van groot belang om de werking van DNS en BIND te
// begrijpen voordat er een primaire zone wordt opgeset.  Er zijn
// nogal wat onverwachte valkuiten.  Het opzetten van een secondary is
// veel eenvoudiger.
//
// NB: Het wordt afgeraden de onderstaande voorbeelden actief te maken.
// Er dienen bestaande namen en adressen gebruikt te worden.
//
// BELANGRIJK!!! &os; draait BIND in een zandbak (zie named_flags in
// rc.conf).  In de map waarin de secundaire zones staat moet
// geschreven kunnen worden door BIND.  Dat kan als volgt:
//
//      mkdir /etc/namedb/s
//      chown bind:bind /etc/namedb/s
//      chmod 750 /etc/namedb/s</programlisting>

	<para>Meer informatie over het draaien van BIND in een zandbak
	  staat in <link
	    linkend="network-named-sandbox"><application>named</application>
	    in een Zandbak Draaien</link>.
	</para>

	<programlisting>/*
zone "example.com" {
        type slave;
        file "s/example.com.bak";
        masters {
                192.168.1.1;
        };
};

zone "0.168.192.in-addr.arpa" {
        type slave;
        file "s/0.168.192.in-addr.arpa.bak";
        masters {
                192.168.1.1;
        };
};
*/</programlisting>

	<para>De bovenstaande voorbeelden komen uit
	  <filename>named.conf</filename> en zijn voorbeelden van
	  instellingen voor een slave, voor een forward en reverse
	  zone.</para>

	<para>Voor iedere nieuwe zone die wordt aangeboden dient een
	  nieuwe instelling voor de zone aan
	  <filename>named.conf</filename> toegevoegd te worden.</para>

	<para>De meest eenvoudige instelling voor de zone <hostid
	    role="domainname">example.org</hostid> kan er als volgt
	  uitzien:</para>

	<programlisting>zone "example.org" {
	type master;
	file "example.org";
};</programlisting>

	<para>De zone is een master, dat geeft de instelling
	  <option>type</option> aan, waarvan de zoneinformatie in
	  <filename>/etc/namedb/example.org</filename> staat, wat de
	  instelling <option>file</option> aangeeft.</para>

	<programlisting>zone "example.org" {
	type slave;
	file "example.org";
};</programlisting>

	<para>In het geval van de slave wordt de zoneinformatie
	  voor een zone getransporteerd van de master namserver en
	  opgeslagen in het ingestelde bestand.  Als een master server
	  het niet meer doet of niet bereikbaar is, dan heeft de slave
	  server de getransporteerde zoneinformatie nog en kan die
	  aanbieden.</para>
      </sect3>

      <sect3>
	<title>Zonebestanden</title>

	<para>Een voorbeeldbestand voor een master zone voor <hostid
	    role="domainname">example.org</hostid> (als bestand
	  <filename>/etc/namedb/example.org</filename>):</para>

	<programlisting>$TTL 3600

example.org. IN SOA ns1.example.org. admin.example.org. (
                        5               ; Serial
                        10800           ; Refresh
                        3600            ; Retry
                        604800          ; Expire
                        86400 )         ; Minimum TTL

; DNS Servers
@       IN NS           ns1.example.org.
@       IN NS           ns2.example.org.

; Machinenamen
localhost       IN A    127.0.0.1
ns1             IN A    3.2.1.2
ns2             IN A    3.2.1.3
mail            IN A    3.2.1.10
@               IN A    3.2.1.30

; Aliases
www             IN CNAME        @

; MX Record
@               IN MX   10      mail.example.org.</programlisting>

	<para>Iedere hostnaam die eindigt op een <quote>.</quote> is
	  een exacte hostnaam, terwijl alles zonder een
	  <quote>.</quote> op het einde refereert aan de oorsprong.
	  Zo wordt <literal>www</literal> bijvoorbeeld vertaald naar
	  <literal>www.<replaceable>origin</replaceable></literal>.
	  In de zone uit het voorbeeld hierboven is de oorsprong
	  <hostid>example.org.</hostid>, dus <literal>www</literal>
	  vertaalt naar <hostid>www.example.org.</hostid></para>

	<para>De regels in een zonebestand volgen de volgende
	  opmaak:</para>

	<programlisting>recordnaam      IN recordtype   waarde</programlisting>

	<indexterm>
	  <primary>DNS</primary>

	  <secondary>records</secondary>
	</indexterm>

	<para>De meest gebruikte DNS records:</para>

	<variablelist>
	  <varlistentry>
	    <term>SOA</term>

	    <listitem>
	      <para>begin van zoneautoriteit (start of
		authority)</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term>NS</term>

	    <listitem>
	      <para>een bevoegde (authoritative) name
		server</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term>A</term>

	    <listitem>
	      <para>een hostadres</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term>CNAME</term>

	    <listitem>
	      <para>de canonieke (canonical) naam voor een
		alias</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term>MX</term>

	    <listitem>
	      <para>mail exchanger</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term>PTR</term>

	    <listitem>
	      <para>een domeinnaam pointer (gebruikt in
		reverse DNS)</para>
	    </listitem>
	  </varlistentry>
	</variablelist>

	<programlisting>
example.org. IN SOA ns1.example.org. admin.example.org. (
                        5               ; Serial
                        10800           ; Refresh after 3 hours
                        3600            ; Retry after 1 hour
                        604800          ; Expire after 1 week
                        86400 )         ; Minimum TTL of 1 day</programlisting>

	<variablelist>
	  <varlistentry>
	    <term><hostid
		role="domainname">example.org.</hostid></term>

	    <listitem>
	      <para>de domeinnaam, ook de oorsprong voor dit
		zonebestand.</para></listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><hostid role="fqdn">ns1.example.org.</hostid></term>

	    <listitem>
	      <para>de primaire/bevoegde namserver voor deze
		zone.</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><literal>admin.example.org.</literal></term>

	    <listitem>
	      <para>de persoon die verantwoordelijk is voor
		deze zone, e-mailadres met <quote>@</quote> vervangen.
		<email>admin@example.org</email> wordt
		<literal>admin.example.org</literal>.</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><literal>5</literal></term>

	    <listitem>
	      <para>het serienummer van het bestand.  Dit moet iedere
		keer als het zonebestand wordt aangepast opgehoogd
		worden.  Tegenwoordig geven veel beheerders de voorkeur
		aan de opmaak <literal>yyyymmddrr</literal> voor het
		serienummer.  <literal>2001041002</literal> betekent
		dan dat het voor het laatst is aangepast op
		10&ndash;04&ndash;2001.  De laatste
		<literal>02</literal> betekent dat het zonebestand een
		aantal keer is aangepast op die dag.  Het serienummer
		is belangrijk omdat het slave nameservers aangeeft dat
		een zone is bijgewerkt.</para>
	    </listitem>
	  </varlistentry>
	</variablelist>

	<programlisting>
@       IN NS           ns1.example.org.</programlisting>

	<para>Hierboven staat een NS regel.  Voor iedere nameserver
	  die bevoegde antwoorden moet geven voor de zone hoort er
	  zo'n regel te zijn.  De <literal>@</literal> betekent
	  hetzelfde als <hostid role="domainname">example.org.</hostid>
	  Een <literal>@</literal> vertaalt naar de oorsprong.</para>

	<programlisting>
localhost       IN A    127.0.0.1
ns1             IN A    3.2.1.2
ns2             IN A    3.2.1.3
mail            IN A    3.2.1.10
@               IN A    3.2.1.30</programlisting>

	<para>Een A record geeft een machinenaam aan.  Hierboven is te
	  zien dat <hostid role="fqdn">ns1.example.org</hostid> zou
	  resolven naar <hostid role="ipaddr">3.2.1.2</hostid>.
	  Nogmaals, het symbool voor oorsprong, <literal>@</literal>,
	  wordt hier gebruikt en dus zou <hostid
	    role="domainname">example.org</hostid> resolven naar
	  <hostid role="ipaddr">3.2.1.30</hostid>.</para>

	<programlisting>
www             IN CNAME        @</programlisting>

	<para>Een canoniek name record wordt meestal gebruikt voor het
	  geven van aliasen aan een machine.  In het voorbeeld is
	  <hostid>www</hostid> een alias naar de machine die gelijk is
	  aan de oorsprong, <hostid
	    role="domainname">example.org</hostid> (<hostid
	    role="ipaddr">3.2.1.30</hostid>).  CNAME's kunnen gebruikt
	  worden om een alias aan hostnamen te geven of om round robin
	  &eacute;&eacute;n hostnaam naar meerdere machines te laten
	  wijzen.</para>

	<indexterm><primary>MX record</primary></indexterm>

	<programlisting>
@               IN MX   10      mail.example.org.</programlisting>

	<para>MX records geven aan welke mailservers verantwoordelijk
	  zijn voor het afhandelen van inkomende mail voor de zone.
	  <hostid role="fqdn">mail.example.org</hostid> is de hostnaam
	  voor de mailserver en 10 is de prioriteit voor die
	  mailserver.</para>

	<para>Het is mogelijk meerdere mailservers in te stellen met
	  prioriteiten 3, 2 en 1.  Een mailserver die probeert mail
	  af te leveren voor <hostid
	    role="domainname">example.org</hostid> probeert dat eerst
	  bij de MX met de hoogste prioriteit, daarna de op een na
	  hoogste, enzovoort, totdat de mail afgeleverd kan
	  worden.</para>

	<para>Voor in-addr.arpa zonebestanden (reverse DNS) wordt
	  dezelfde opmaak gebruikt, maar dan met PTR regels in plaats
	  van A of CNAME.</para>

	<programlisting>$TTL 3600

1.2.3.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. (
                        5               ; Serial
                        10800           ; Refresh
                        3600            ; Retry
                        604800          ; Expire
                        3600 )          ; Minimum

@       IN NS   ns1.example.org.
@       IN NS   ns2.example.org.

2       IN PTR  ns1.example.org.
3       IN PTR  ns2.example.org.
10      IN PTR  mail.example.org.
30      IN PTR  example.org.</programlisting>

	<para>Dit bestand geeft de juiste IP adressen voor hostnamen
	  in het voorbeelddomein hierboven.</para>
      </sect3>
    </sect2>

    <sect2>
      <title>Caching nameserver</title>

      <indexterm>
	<primary>BIND</primary>

	<secondary>caching namserver</secondary>
      </indexterm>

      <para>Een caching namserver is een namserver die voor geen
	enkele zone bevoegd is en alleen verzoeken doet en die onthoudt
	voor later gebruik.  Het opzetten ervan is eenvoudigweg het
	opzetten van een namserver zonder zones toe te voegen.</para>
    </sect2>

    <sect2 id="network-named-sandbox">
      <title><application>named</application> in een zandbak
	draaien</title>

      <indexterm>
	<primary>BIND</primary>

	<secondary>in een zandbak draaien</secondary>
      </indexterm>

      <indexterm><primary><command>chroot</command></primary></indexterm>

      <para>Als extra beveiligingsmaatregel is het wellicht wenselijk
	om &man.named.8; als een gebruiker zonder privileges te draaien
	en de instellingen zo te maken dat die &man.chroot.8; in een
	zandbakmap draait.  Hierdoor is alles buiten de zandbak niet
	toegankelijk voor de <application>named</application> daemon.
	Hierdoor wordt de schade die aangericht kan worden beperkt in
	het geval dat <application>named</application> wordt gehackt.
	Standaard kent &os; een gebruiker en groep
	<groupname>bind</groupname> die voor dit doel bestemd
	zijn.</para>

      <note>
	<para>Er wordt ook wel gesteld dat het verstandiger is om
	  <application>named</application> met
	  <command>chroot</command> te draaien, maar in plaats daarvan
	  in een &man.jail.8; te draaien.  Dit wordt hier niet
	  beschreven.</para>
      </note>

      <para>Omdat <application>named</application> niet in staat is
	ook maar iets buiten de zankbak te raadplegen (zoals gedeelde
	bibliotheken, log sockets, enzovoort), moeten er een aantal
	stappen gevolgd worden om <application>named</application> goed
	te laten draaien.  In de onderstaande controlelijst wordt
	aangenomen dat het pad naar de zandbak
	<filename>/etc/namedb</filename> is en dat er geen wijzigingen
	gemaakt zijn aan de inhoud van die map.  De volgende stappen
	dienen als <username>root</username> uitgevoerd te
	worden:</para>

      <itemizedlist>
	<listitem>
	  <para>Maak alle mappen die <application>named</application>
	    verwacht:</para>

	  <screen>&prompt.root; <userinput>cd /etc/namedb</userinput>
&prompt.root; <userinput>mkdir -p bin dev etc var/tmp var/run master slave</userinput>
&prompt.root; <userinput>chown bind:bind slave var/*</userinput><co id="chown-slave"></screen>

	  <calloutlist>
	    <callout arearefs="chown-slave">
	      <para><application>named</application> hoeft alleen in
		deze mappen te schrijven, dus krijgt het alleen daar
		rechten.</para>
	    </callout>
	  </calloutlist>
	</listitem>

	<listitem>
	  <para>Herschik en maak de basiszone en stel het bestand met
	    instellingen in:</para>

	  <screen>&prompt.root; <userinput>cp /etc/localtime etc</userinput><co id="localtime">
&prompt.root; <userinput>mv named.conf etc && ln -sf etc/named.conf</userinput>
&prompt.root; <userinput>mv named.root master</userinput>
<!-- I don't like this next bit -->
&prompt.root; <userinput>sh make-localhost && mv localhost.rev localhost-v6.rev master</userinput>
&prompt.root; <userinput>cat > master/named.localhost
$ORIGIN localhost.
$TTL 6h
@	IN	SOA	localhost. postmaster.localhost. (
			1	; serial
			3600	; refresh
			1800	; retry
			604800	; expiration
			3600 )	; minimum
	IN	NS	localhost.
	IN	A		127.0.0.1
^D</userinput></screen>

	  <calloutlist>
	    <callout arearefs="localtime">
	      <para>Hierdoor kan <application>named</application> de
		correcte tijd melden aan &man.syslogd.8;.</para>
	    </callout>
	  </calloutlist>
	</listitem>

	<listitem>
	  <indexterm><primary>syslog</primary></indexterm>

	  <indexterm>
	    <primary>logboekbestanden</primary>

	    <secondary>named</secondary>
	  </indexterm>

	  <para>Als er een oudere versie dan &os; 4.9-RELEASE draait,
	    dient een statisch gelinkte kopie van
	    <application>named-xfer</application> gebouwd te worden en
	    naar de zankbak gekopieerd te worden:</para>

	  <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput>
&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput>
&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput>
&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput>
&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput>
&prompt.root; <userinput>make cleandir && make cleandir && make depend && make NOSHARED=yes all</userinput>
&prompt.root; <userinput>cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer</userinput><co id="clean-cruft"></screen>

	  <para>Nadat de statisch gelinkte
	    <command>named-xfer</command> is ge&iuml;nstalleerd, is het
	    nodig wat op te ruimen om te voorkomen dat er kopieen van
	    bibliotheken of programma's in de boomstructuur met
	    broncode achterblijven:</para>

	  <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput>
&prompt.root; <userinput>make cleandir</userinput>
&prompt.root; <userinput>cd /usr/src/lib/libbind</userinput>
&prompt.root; <userinput>make cleandir</userinput>
&prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput>
&prompt.root; <userinput>make cleandir</userinput></screen>

	  <calloutlist>
	    <callout arearefs="clean-cruft">
	      <para>Deze stap gaat wel eens verkeerd.  Als dit gebeurt,
		kan het volgende commando uitgevoerd worden:</para>

	      <screen>&prompt.root; <userinput>cd /usr/src && make cleandir && make cleandir</userinput></screen>

	      <para>Daarnaast kan de <filename>/usr/obj</filename>
		structuur verwijderd worden:</para>

	      <screen>&prompt.root; <userinput>rm -fr /usr/obj && mkdir /usr/obj</userinput></screen>

	      <para>Hiermee wordt aanwezige rommel uit de
		broncodestructuur verwijderd en kunnen de hierboven
		beschreven stappen opnieuw uitgevoerd worden.</para>
	    </callout>
	  </calloutlist>

	  <para>Als &os; version 4.9-RELEASE of later wordt gebruikt,
	    dan is <command>named-xfer</command> in
	    <filename>/usr/libexec</filename> standaard statisch
	    gelinkt en kan er simpelweg met &man.cp.1; een kopie naar
	    de zandbak gemaakt worden.</para>
	</listitem>

	<listitem>
	  <para>Maak een <filename>dev/null</filename> die zichtbaar is
	    voor <application>named</application> en waar
	    <application>named</application> kan schrijven:</para>

	  <screen>&prompt.root; <userinput>cd /etc/namedb/dev && mknod null c 2 2</userinput>
&prompt.root; <userinput>chmod 666 null</userinput></screen>
	</listitem>

	<listitem>
	  <para>Symlink <filename>/var/run/ndc</filename> naar
	    <filename>/etc/namedb/var/run/ndc</filename>:</para>

	  <screen>&prompt.root; <userinput>ln -sf /etc/namedb/var/run/ndc /var/run/ndc</userinput></screen>

	  <note>
	    <para>Hiermee wordt voorkomen dat er iedere keer als
	      &man.ndc.8; wordt uitgevoerd de optie <option>-c</option>
	      meegegeven moet worden.  Omdat de inhoud van
	      <filename>/var/run</filename> bij het booten wordt
	      verwijderd, kan het wenselijk zijn dit commando aan de
	      &man.crontab.5; van <username>root</username> toe te
	      voegen met de optie <option>@reboot</option>.</para>
	  </note>
	</listitem>

	<listitem>
	  <indexterm><primary>syslog</primary></indexterm>

	  <indexterm>
	    <primary>logboekbestanden</primary>

	    <secondary>named</secondary>
	  </indexterm>

	  <para>Stel &man.syslogd.8; in om een extra
	    <devicename>log</devicename> socket te maken waar
	    <application>named</application> heen kan schrijven.  Dit
	    kan door <literal>-l /etc/namedb/dev/log</literal> toe te
	    voegen aan de <varname>syslogd_flags</varname> variable in
	    <filename>/etc/rc.conf</filename>.</para>
	</listitem>

	<listitem>
	  <indexterm><primary><command>chroot</command></primary></indexterm>

	  <para>Maak de instelling om <application>named</application>
	    te starten en zich met <command>chroot</command> in een
	    zandbak te plaatsen met de volgende aanpassing in
	    <filename>/etc/rc.conf</filename>:</para>

	  <programlisting>named_enable="YES"
named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf"</programlisting>

	  <note>
	    <para>In het instellingenbestand
	      <replaceable>/etc/named.conf</replaceable> staan
	      volledige paden <emphasis>relatief aan de
		zandbak</emphasis>.  Het bestand in de regel hierboven
	      is dus feitelijk
	      <filename>/etc/namedb/etc/named.conf</filename>.</para>
	  </note>
	</listitem>
      </itemizedlist>

      <para>Nu dient <filename>/etc/namedb/etc/named.conf</filename>
	gewijzigd te worden, zodat <application>named</application>
	weet welke zones geladen moeten worden en waar ze staan.  Nu
	volgt een van commentaar voorzien voorbeeld.  Alle regels
	zonder commentaar wijken niet af van de opzet voor een DNS
	server die niet in een zandbak draait:</para>

      <programlisting>options {
        directory "/";<co id="directory">
        named-xfer "/bin/named-xfer";<co id="named-xfer">
        version "";		// Laat versie BIND niet zien
        query-source address * port 53;
};
// ndc control socket
controls {
        unix "/var/run/ndc" perm 0600 owner 0 group 0;
};
// Zones follow:
zone "localhost" IN {
        type master;
        file "master/named.localhost";<co id="master">
        allow-transfer { localhost; };
        notify no;
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "master/localhost.rev";
        allow-transfer { localhost; };
        notify no;
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" {
	type master;
	file "master/localhost-v6.rev";
	allow-transfer { localhost; };
	notify no;
};
zone "." IN {
        type hint;
        file "master/named.root";
};
zone "private.example.net" in {
        type master;
        file "master/private.example.net.db";
	allow-transfer { 192.168.10.0/24; };
};
zone "10.168.192.in-addr.arpa" in {
        type slave;
        masters { 192.168.10.2; };
        file "slave/192.168.10.db";<co id="slave">
};</programlisting>

      <calloutlist>
	<callout arearefs="directory">
	  <para>De opdracht <literal>directory</literal> heeft als
	    waarde <filename>/</filename> omdat alle bestanden die
	    <application>named</application> nodig heeft binnen die
	    map staan.  Dit staat dus gelijk aan
	    <filename>/etc/namedb</filename> voor een
	    <quote>normale</quote> gebruiker.</para>
	</callout>

	<callout arearefs="named-xfer">
	  <para>Geeft het volledige pad naar het uitvoerbare bestand
	    <command>named-xfer</command> (vanuit de optiek van
	    <application>named</application>).  Dit is nodig omdat
	    <application>named</application> is gecompileerd om
	    standaard te zoeken naar <command>named-xfer</command> in
	    <filename>/usr/libexec</filename>.</para>
	</callout>

	<callout arearefs="master">
	  <para>Geeft de bestandsnaam
	    (relatief aan de instelling <literal>directory</literal>
	    hierboven) waar <application>named</application> het
	    zonebestand voor deze zone kan vinden.</para>
	</callout>

	<callout arearefs="slave">
	  <para>Geeft de bestandsnaam
	    (relatief aan de instelling <literal>directory</literal>
	    hierboven) waar <application>named</application> een kopie
	    van het zonebestand moet schrijven nadat die succesvol van
	    de master server is gekopieerd.  Daarom moest de eigenaar
	    van de map <filename>slave</filename> naar
	    <groupname>bind</groupname> gewijzigd worden in een eerdere
	    stap.</para>
	</callout>
      </calloutlist>

      <para>Na het doorlopen van de hierboven beschreven stappen kan
	de server herstart worden of kunnen &man.syslogd.8; herstart en
	&man.named.8; gestart worden, mits de nieuwe opties voor
	<varname>syslogd_flags</varname> en
	<varname>named_flags</varname> zijn ingesteld.  Dan draait
	<application>named</application> in een zandbak!</para>
    </sect2>

    <sect2>
      <title>Beveiliging</title>

      <para>Hoewel BIND de meest gebruikte implementatie van DNS is,
	is er altijd nog het beveiligingsvraagstuk.  Soms worden er
	mogelijke en te misbruiken beveiligingsgaten gevonden.</para>

      <para>Het is verstandig om bij te blijven met <ulink
	  url="http://www.cert.org/">CERT</ulink>
	beveiligingswaarschuwingen en een abonnement te nemen op de
	&a.security-notifications; om bij te blijven met de
	beveiligingsproblemen wat betreft internet en &os;.</para>

      <tip>
	<para>Als er problemen ontstaan, kan het bijwerken van broncode
	  en het opnieuw bouwen van <application>named</application>
	  geen kwaad doen.</para>
      </tip>
    </sect2>

    <sect2>
      <title>Verder lezen</title>

      <para>BIND/<application>named</application> hulppagina's:
	&man.ndc.8;, &man.named.8;, &man.named.conf.5;</para>

      <itemizedlist>
	<listitem>
	  <para><ulink
	      url="http://www.isc.org/products/BIND/">Offici&euml;le
	      ISC BIND pagina</ulink></para>
	</listitem>

	<listitem>
	  <para><ulink
	      url="http://www.nominum.com/getOpenSourceResource.php?id=6">
	      BIND FAQ</ulink></para>
	</listitem>

	<listitem>
	  <para><ulink
	      url="http://www.oreilly.com/catalog/dns4/">O'Reilly
	      DNS en BIND 4e Editie</ulink></para>
	</listitem>

	<listitem>
	  <para><ulink
	      url="ftp://ftp.isi.edu/in-notes/rfc1034.txt">RFC1034
	      - Domeinnamen - Concepten en Faciliteiten</ulink></para>
	</listitem>

	<listitem>
	  <para><ulink
	      url="ftp://ftp.isi.edu/in-notes/rfc1035.txt">RFC1035
	      - Domeinnamen - Implementatie en
	      Specificatie</ulink></para>
	</listitem>
      </itemizedlist>
    </sect2>
  </sect1>

  <sect1 id="network-bind9">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title><acronym>BIND</acronym>9 en &os;</title>

<!-- This section is here to get users up with BIND9 configurations!  It
  does not cover the terminology, theoretical discussion (why run a name
  server) or the further reading which is still in the previous section.
  I did things this way to avoid repetition of content and obviously we
  cannot just remove the previous section since other supported releases
  use it.  When the previous section is removed then those comments
  should be moved here.  // Tom Rhodes -->

    <indexterm>
      <primary>bind9</primary>

      <secondary>instellen</secondary>
    </indexterm>

    <para>Het uitbrengen van &os;&nbsp;5.3 was het moment van
      introductie van de <acronym>BIND</acronym>9
      <acronym>DNS</acronym> server software in de distributie.
      Dit betekende nieuwe beveiligingsmogelijkheden, een nieuwe
      indeling van het bestandssysteem en automatische instelling van
      &man.chroot.8;.  Deze paragraaf bestaat uit twee delen.  In het
      eerste deel worden de nieuwe mogelijkheden en hun instelling
      beschreven en het tweede gedeelte gaat over hulp bij het upgraden
      naar &os;&nbsp;5.3.  Vanaf dit moment wordt er simpelweg verwezen
      naar &man.named.8; in plaats van naar <acronym>BIND</acronym>.
      Dit onderdeel slaat het beschrijven van de terminologie over,
      omdat die eerder is besproken.  De theorie wordt ook niet
      beschreven.  Het is aan te raden om die eerdere onderdelen te
      lezen voor dit onderdeel.</para>

    <para>De bestanden met instellingen voor
      <application>named</application> staan op dit moment in <filename
	class="directory">/var/named/etc/namedb/</filename> en moeten
      voor gebruik aangepast worden.  Daar worden de meeste
      instellingen gemaakt.</para>

    <sect2>
      <title>Een master zone instellen</title>

      <para>Om een master zone in te stellen kan in <filename
	class="directory">/var/named/etc/namedb/</filename> het volgende
      uitgevoerd worden:</para>

      <screen>&prompt.root; <userinput>sh make-localhost</userinput></screen>

      <para>Als alles goed is gegaan hoort er een nieuw bestand in de
	<filename class="directory">master</filename> map te staan.  De
	bestandsnamen horen <filename>localhost.rev</filename> voor de
	lokale domeinnaam te zijn en
	<filename>localhost-v6.rev</filename> voor
	<acronym>IPv6</acronym> instellingen.  Instellingen voor
	standaardgebruik staan al in het instellingenbestand
	<filename>named.conf</filename> file.</para>
    </sect2>

    <sect2>
      <title>Een slave zone instellen</title>

      <para>Instellingen voor extra domeinen of subdomeinen kunnen
	worden ingesteld als slave zones.  In de meeste gevallen kan
	het bestand <filename>master/localhost.rev</filename> gewoon
	naar de map <filename class="directory">slave</filename>
	gekopieerd worden en aangepast worden.  Als dat is gedaan,
	moeten de bestanden op de juiste wijze toegevoegd worden aan
	<filename>named.conf</filename>, zoals in het volgende
	voorbeeld voor <hostid
	  role="domainname">example.com</hostid>:</para>

      <programlisting>zone "example.com" {
        type slave;
        file "slave/example.com";
        masters {
                10.0.0.1;
        };
};

zone "0.168.192.in-addr.arpa" {
        type slave;
        file "slave/0.168.192.in-addr.arpa";
        masters {
                10.0.0.1;
        };
};</programlisting>

      <para>In dit voorbeeld is het master <acronym>IP</acronym> adres
	de primaire domain server vanwaar de zones gehaald worden.  Die
	hoeft niet per se zelf een <acronym>DNS</acronym> server te
	zijn.</para>
    </sect2>

    <sect2>
      <title>Opstarten instellen</title>

      <para>Om de <application>named</application> daemon met het
	systeem te laten starten, hoort de volgende optie in
	<filename>rc.conf</filename> te staan:</para>

      <programlisting>named_enable="YES"</programlisting>

      <para>Hoewel er nog andere mogelijkheden bestaan, is dit het
	absolute minimum.  In &man.rc.conf.5; staan nog meer
	mogelijkheden beschreven.  Als er niets in
	<filename>rc.conf</filename> staat, kan
	<application>named</application> gestart worden vanaf de
	commandoregel:</para>

      <screen>&prompt.root; <userinput>/etc/rc.d/named start</userinput></screen>
    </sect2>

    <sect2>
      <title><acronym>BIND</acronym>9 beveiliging</title>

      <para>Hoewel &os; <command>named</command> automatisch in een
	&man.chroot.8; omgeving zet, zijn er nog een aantal andere
	beveiligingsmogelijkheden die kunnen helpen om mogelijke
	aanvallen op de <acronym>DNS</acronym> dienst af te
	slaan.</para>

      <sect3>
	<title>Toegangscontrolelijsten opvragen</title>

	<para>Een toegangscontrolelijst (acl) voor vraagstellingen kan
	  gebruikt worden om vraagstellingen voor zones te beperken.
	  De instelling gaat door een netwerk te defini&euml;ren binnen
	  het token <literal>acl</literal> en dan een lijst met
	  <acronym>IP</acronym> adressen aan te geven in de
	  instellingen voor de zone.  Om domeinen toe te staan om de
	  voorbeeldhost te gebruiken, kan iets als het volgende
	  gebruikt worden:</para>

	<programlisting>acl "example.com" {
        192.168.0.0/24;
};

zone "example.com" {
        type slave;
        file "slave/example.com";
        masters {
                10.0.0.1;
        };
	allow-query { example.com; };
};

zone "0.168.192.in-addr.arpa" {
        type slave;
        file "slave/0.168.192.in-addr.arpa";
        masters {
                10.0.0.1;
        };
	allow-query { example.com; };
};</programlisting>
      </sect3>

      <sect3>
	<title>Opvragen versie beperken</title>

	<para>Het opvragen van de versie van de <acronym>DNS</acronym>
	  server kan een ingang zijn voor een aanvaller, die deze
	  informatie kan gebruiken om te zoeken naar bekende exploits
	  of bugs om in te breken op de host.</para>

	<warning>
	  <para>Het instellen van een vals versienummer beschermt een
	    server niet tegen exploits.  Alleen het bijwerken naar een
	    versie die niet kwetsbaar is beschermt een server.</para>
	</warning>

	<para>Er kan een valse versiestring ingesteld worden in de
	  sectie <literal>options</literal> van
	  <filename>named.conf</filename>:</para>

	<programlisting>options {
        directory       "/etc/namedb";
        pid-file        "/var/run/named/pid";
        dump-file       "/var/dump/named_dump.db";
        statistics-file "/var/stats/named.stats";
        version         "None of your business";
};</programlisting>
      </sect3>

<!-- Here is where I stopped for now
      <sect3>
	<title>Authenticatie</title>

	<para> ... </para>

-->
    </sect2>
  </sect1>

  <sect1 id="network-apache">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Murray</firstname>
	  <surname>Stokely</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Apache HTTP server</title>

    <indexterm>
      <primary>webservers</primary>

      <secondary>opzetten</secondary>
    </indexterm>

    <indexterm><primary>Apache</primary></indexterm>

    <sect2>
      <title>Overzicht</title>

      <para>&os; wordt gebruikt om een paar van de drukste websites ter
	wereld te draaien.  De meeste webservers op internet maken
	gebruik van de <application>Apache HTTP Server</application>.
	<application>Apache</application> softwarepackages staan op de
	&os; installatiemedia.  Als <application>Apache</application>
	niet bij de oorsponkelijke installatie van &os; is
	meege&iuml;nstalleerd, dan kan dat vanuit de <filename
	  role="package">www/apache13</filename> of <filename
	  role="package">www/apache2</filename> port.</para>

      <para>Als <application>Apache</application> succesvol is
	ge&iuml;nstalleerd, moeten er instelingen gemaakt
	worden.</para>

      <note>
	<para>In dit onderdeel wordt versie 1.3.X van de
	  <application>Apache HTTP Server</application> behandeld omdat
	  die het meest gebruikt wordt op &os;.
	  <application>Apache&nbsp;2.X</application> biedt veel nieuwe
	  mogelijkheden, maar wordt hier niet beschreven.  Meer
	  informatie over <application>Apache&nbsp;2.X</application> is
	  te vinden op <ulink
	    url="http://httpd.apache.org/"></ulink>.</para>
      </note>
    </sect2>

    <sect2>
      <title>Instellen</title>

      <indexterm>
	<primary>Apache</primary>

	<secondary>configuration file</secondary>
      </indexterm>

      <para>Het belangrijkste bestand met instellingen voor de
	<application>Apache HTTP Server</application> op &os; is
	<filename>/usr/local/etc/apache/httpd.conf</filename>.  Dit
	bestand is een typisch &unix; tekstgebaseerd
	instellingenbestand waarin regels met commentaar beginnen met
	het karakter <literal>#</literal>.  Het uitputtend beschrijven
	van alle mogelijke instellingen valt buiten het bereik van dit
	boek, dus worden alleen de meest gebruikte directieven
	beschreven.</para>

      <variablelist>
	<varlistentry>
	  <term><literal>ServerRoot "/usr/local"</literal></term>

	  <listitem>
	    <para>Hierin wordt de standaard mappenhi&euml;rarchie voor
	      de <application>Apache</application> installatie
	      aangegeven.  Binaire bestanden staan in de submappen
	      <filename class="directory">bin</filename> en <filename
		class="directory">sbin</filename> van de serverroot en
	      bestanden met instellingen staan in <filename
		class="directory">etc/apache</filename>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><literal>ServerAdmin beheerder@beheer.adres</literal></term>

	  <listitem>
	    <para>Het adres waaraan problemen met de server gemaild
	      kunnen worden.  Dit adres verschijnt op een aantal door
	      de server gegenereerde pagina's, zoals documenten met
	      foutmeldingen.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><literal>ServerName www.example.com</literal></term>

	  <listitem>
	    <para>Met <literal>ServerName</literal> kan een hostnaam
	      ingesteld worden die wordt teruggezonden aan de clients
	      als de naam van de server anders is dan die is ingesteld
	      (gebruik bijvoorbeeld <hostid>www</hostid> in plaats van
	      de echte hostnaam).</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><literal>DocumentRoot "/usr/local/www/data"</literal></term>

	  <listitem>
	    <para><literal>DocumentRoot</literal>: de map waaruit de
	      documenten worden geserveerd.  Standaard worden alle
	      verzoeken uit deze map gehaald, maar er kunnen
	      symbolische links en aliasen gebruikt worden om naar
	      andere locaties te wijzen.</para>
	  </listitem>
	</varlistentry>
      </variablelist>

      <para>Het is altijd een goed idee om back-ups te maken van het
	instellingenbestand voor <application>Apache</application>
	v&oacute;&oacute;r het maken van wijzigingen.  Als de juiste
	instellingen gemaakt zijn, kan
	<application>Apache</application> gestart worden.</para>

<!-- sect3 for performance tuning directives?  maxservers minservers -->
<!-- etc..?? -->

<!-- Advanced configuration section.

Performance tuning directives.

Log file format -->
    </sect2>

    <sect2>
      <title><application>Apache</application> draaien</title>

      <indexterm>
	<primary>Apache</primary>

	<secondary>starten of stoppen</secondary>
      </indexterm>

      <para><application>Apache</application> draait niet vanuit de
	<application>inetd</application> super server zoals veel andere
	netwerkdiensten.  Hij is ingesteld om zelfstandig te draaien
	vanwege beter prestaties voor het afhandelen van inkomende
	HTTP verzoeken van client webbrowsers.  Er wordt een
	shellscriptwrapper bijgeleverd om het starten, stoppen en
	herstarten zo eenvoudig mogelijk te maken.  Het volgende
	commando start <application>Apache</application> voor de eerste
	keer:</para>

      <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl start</userinput></screen>

      <para>De server kan op iedere moment gestopt worden met:</para>

      <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl stop</userinput></screen>

      <para>Na het maken van wijzigingen aan het instellingenbestand
	moet de dienst herstart worden:</para>

      <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl restart</userinput></screen>

      <para>Om <application>Apache</application> te herstarten zonder
	bestaande connecties te verbreken:</para>

      <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl graceful</userinput></screen>

      <para>In &man.apachectl.8; staat meer informatie.</para>

      <para>Om <application>Apache</application> met het systeem mee te
	starten kan de volgende regel aan
	<filename>/etc/rc.conf</filename> worden toegevoegd:</para>

      <programlisting>apache_enable="YES"</programlisting>

      <para>Als het nodig is additionele commandoregelopties op te
	geven voor de <application>Apache</application>
	<command>httpd</command> bij het opstarten, dan kunnen die in
	de volgende regel in <filename>rc.conf</filename> meegegeven
	worden:</para>

      <programlisting>apache_flags=""</programlisting>

      <para>Nu de webserver draait, is die te benaderen door een
	webbrowser te wijzen naar <literal>http://localhost/</literal>.
	De standaard webpagina is
	<filename>/usr/local/www/data/index.html</filename>.</para>
    </sect2>

    <sect2>
      <title>Virtuele hosting</title>

      <para><application>Apache</application> ondersteunt twee
	verschillende manieren van Virtuele Hosting.  De eerste
	methode is Naam-gebaseerde Virtuele Hosting.  Naam-gebaseerde
	Virtuele Hosting gebruikt de HTTP/1.1 headers van de clients
	om de hostnaam uit te zoeken.  Hierdoor kunnen meerdere
	domeinen hetzelfde IP adres delen.</para>

      <para>Om <application>Apache</application> gebruik te laten
	maken van Naam-gebaseerde Virtuele Hosting kan een regel als
	de volgende in <filename>httpd.conf</filename> worden
	opgenomen:</para>

      <programlisting>NameVirtualHost *</programlisting>

      <para>Als een webserver <hostid
	  role="fqdn">www.domein.tld</hostid> heet en er moet een
	virtueel domein voor <hostid
	  role="fqdn">www.anderdomein.tld</hostid> gaan draaien, dan
	kunnen de volgende regels aan <filename>httpd.conf</filename>
	worden toegevoegd:</para>

      <screen>&lt;VirtualHost *&gt;
    ServerName www.domein.tld
    DocumentRoot /www/domein.tld
&lt;/VirtualHost&gt;

&lt;VirtualHost *&gt;
    ServerName www.anderdomein.tld
    DocumentRoot /www/anderdomein.tld
&lt;/VirtualHost&gt;</screen>

      <para>De adressen en de paden uit dit voorbeeld kunnen in echte
	implementaties uiteraard gewijzigd worden.</para>

      <para>Meer informatie over het opzetten van virtuele hosts staat
	in de offici&euml;le documentatie voor
	<application>Apache</application> op <ulink
	  url="http://httpd.apache.org/docs/vhosts/"></ulink></para>
    </sect2>

    <sect2>
      <title>Apache modules</title>

      <indexterm>
	<primary>Apache</primary>

	<secondary>modules</secondary>
      </indexterm>

      <para>Er zijn veel verschillende
	<application>Apache</application> modules die functionaliteit
	toevoegen aan de basisdienst.  De &os; Portscollectie biedt
	op een eenvoudige manier de mogelijkheid om
	<application>Apache</application> samen met de meeste populaire
	add-on modules te installeren.</para>

      <sect3>
	<title>mod_ssl</title>

	<indexterm>
	  <primary>webserver</primary>

	  <secondary>veilig</secondary>
	</indexterm>

	<indexterm><primary>SSL</primary></indexterm>

	<indexterm><primary>cryptografie</primary></indexterm>

	<para>De module <application>mod_ssl</application> gebruikt
	  de OpenSSL bibliotheek om sterke cryptografie te leveren via
	  de protocollen Secure Sockets Layer (SSL&nbsp;v2/v3) en
	  Transport Layer Security (TLS&nbsp;v1).  Deze module levert
	  alles wat nodig is om een getekend certificaat aan te vragen
	  bij een vertrouwde certificaatautoriteit om een veilige
	  webserver onder &os; te kunnen draaien.</para>

	<para>Als <application>Apache</application> nog niet is
	  ge&iuml;nstalleerd, dan is er een versie van
	  <application>Apache</application>&nbsp;1.3.X die
	  <application>mod_ssl</application> bevat en
	  ge&iuml;nstalleerd kan worden met de <filename
	    role="package">www/apache13-modssl</filename> port.  SSL
	  ondersteuning is ook voor
	  <application>Apache&nbsp;2.X</application> beschikbaar in de
	  <filename role="package">www/apache2</filename> port, waar
	  het standaard is ingeschakeld.</para>

<!-- XXX add more information about configuring mod_ssl here. -->
<!-- Generating keys, getting the key signed, setting up your secure -->
<!-- web server! -->
      </sect3>

      <sect3>
	<title>mod_perl</title>

	<indexterm><primary>Perl</primary></indexterm>

	<para>Het <application>Apache</application>/Perl
	  integratieproject brengt de volledige kracht van de Perl
	  programmeertaal en de <application>Apache HTTP
	    Server</application> samen.  Met de
	  <application>mod_perl</application> module is het mogelijk om
	  <application>Apache</application> modules volledig in Perl te
	  schrijven.  Daarnaast voorkomt een ingebouwde persistente
	  interpreter in de server de overhead van het starten van een
	  externe interpreter en de nadelen van het opstarten van
	  Perl.</para>

	<para>Als <application>Apache</application> nog niet is
	  ge&iuml;nstalleerd, dan is er een versie van
	  <application>Apache</application> die
	  <application>mod_perl</application> bevat en
	  ge&iuml;nstalleerd kan worden met de <filename
	    role="package">www/apache13-modperl</filename> port.</para>
      </sect3>

      <sect3>
	<sect3info>
	  <authorgroup>
	    <author>
	      <firstname>Tom</firstname>
	      <surname>Rhodes</surname>
	      <contrib>Geschreven door </contrib>
	    </author>
	  </authorgroup>
	</sect3info>

	<title>PHP</title>

	<indexterm><primary>PHP</primary></indexterm>

	<para>In de afgelopen jaren hebben steeds meer bedrijven zich
	  op Internet gericht om hun omzet te verhogen en hun
	  zichtbaarheid te vergroten.  Hiermee is ook de behoefte aan
	  interactieve webcontent toegenomen.  Hoewel sommige bedrijven
	  zoals &microsoft; oplossingen hebben ge&iuml;ntroduceerd
	  voor hun eigen (proprietary) producten, heeft ook de open
	  source gemeenschap een antwoord op de vraag gegeven.  Een van
	  die antwoorden,  breed ingezet, heet
	  <acronym>PHP</acronym>.</para>

	<para>PHP, ook bekend als
	  <quote>Hypertext Preprocessor</quote>, is een algemene
	  scripttaal die bijzonder geschikt is voor webontwikkeling.
	  Het is mogelijk de taal in te bedden in
	  <acronym>HTML</acronym> en de syntaxis is afgeleid van C,
	  &java; en Perl met de bedoeling webontwikkelaars in staat te
	  stellen en dynamisch samengestelde pagina's te
	  schrijven.</para>

	<para>Om aan de <application>Apache</application> webserver
	  ondersteuning voor <acronym>PHP</acronym>5 toe te voegen kan
	  eerst de port <filename
	    role="package">www/mod_php5</filename> toegevoegd
	    worden.</para>

	<para>Hiermee worden de modules die nodig zijn voor de
	  ondersteuning van dynamische webapplicaties
	  ge&iuml;nstalleerd en ingesteld.  De volgende regels dienen
	  in <filename>/usr/local/etc/apache/httpd.conf</filename> te
	  staan:

	<programlisting>LoadModule php5_module        libexec/apache/libphp5.so
AddModule mod_php5.c
    &lt;IfModule mod_php5.c&gt;
        DirectoryIndex index.php index.html
    &lt;/IfModule&gt;
    
    &lt;IfModule mod_php5.c&gt;
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    &lt;/IfModule&gt;</programlisting>

	<para>Na afronding dient eenvoudigweg apache herstart te worden
	  met <command>apachectl</command>:</para>

	<screen>&prompt.root; <userinput>apachectl graceful</userinput></screen>

	<para>De ondersteuning voor <acronym>PHP</acronym> in &os; is
	  extreem modulair.  Als ondersteuning voor een bepaalde
	  extensie gewenst is, hoeft een beheerder alleen maar de
	  bewust port te installeren en
	  <application>Apache</application> te herstarten zoals
	  hierboven is aangegeven.</para>

	<para>Om bijvoorbeeld ondersteuning voor de
	  <application>MySQL</application> databaseserver aan
	  <acronym>PHP</acronym>5 toe te voegen
	  kan gewoonweg de port <filename
	    role="package">databases/php5-mysql</filename>
	  ge&iuml;nstalleerd worden en het volgende commando gegeven
	  worden:</para>

	<screen>&prompt.root; <userinput>apachectl graceful</userinput></screen>

	<para>Hiermee wordt de <application>MySQL</application>
	  ondersteuning in 
	  <application>Apache</application> ingeschakeld.</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="network-ftp">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Murray</firstname>
	  <surname>Stokely</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>File Transfer Protocol (FTP)</title>

    <indexterm><primary>FTP servers</primary></indexterm>

    <sect2>
      <title>Overzicht</title>

      <para>Het File Transfer Protocol (FTP) biedt gebruikers een
	eenvoudige manier om bestanden van en naar een <acronym
	  role="File Transfer Protocol">FTP</acronym> server te
	verplaatsen.  &os; bevat <acronym
	  role="File Transfer Protocol">FTP</acronym>
	server software, <application>ftpd</application>, in het
	basissysteem.  Hierdoor is het opzetten en beheren van een
	<acronym role="File Transfer Protocol">FTP</acronym> server op
	&os; erg overzichtelijk.</para>
    </sect2>

    <sect2>
      <title>Instellen</title>

      <para>De belangrijkste stap bij het instellen is de beslissing
	welke accounts toegang krijgen tot de FTP server.  Een normaal
	&os; systeem heeft een aantal systeemaccounts die gebruikt
	worden voor daemons, maar onbekende gebruikers mag niet
	toegestaan worden van die accounts gebruikt te maken.  In
	<filename>/etc/ftpusers</filename> staat een lijst met
	gebruikers die geen FTP toegang hebben.  Standaard staan daar
	de voorgenoemde accounts in, maar het is ook mogelijk om daar
	gebruikers toe te voegen die geen FTP toegang mogen
	hebben.</para>

      <para>Het kan ook wenselijk zijn de FTP toegang voor sommige
	gebruikers te beperken, maar niet onmogelijk te maken.  Dit kan
	met <filename>/etc/ftpchroot</filename>.  In dat bestand staan
	gebruikers en groepen waarop FTP toegangsbeperkingen van
	toepassing zijn.  In &man.ftpchroot.5; staan alle details die
	hier niet beschreven zijn.</para>

      <indexterm>
	<primary>FTP</primary>

	<secondary>anoniem</secondary>
      </indexterm>

      <para>Om anonieme FTP toegang voor een server in te schakelen,
	dient er een gebruiker <username>ftp</username> op een &os;
	systeem aangemaakt te worden.  Dan kunnen gebruikers op de
	server aanmelden met de gebruikersnaam <username>ftp</username>
	of <username>anonymous</username> en met ieder wachtwoord
	(de geldende conventie schrijft voor dat dit een e-mail adres
	van de gebruiker is).  De FTP server roep bij een anonieme
	aanmelding &man.chroot.2; aan, zodat er alleen toegang is tot
	de thuismap van de gebruiker <username>ftp</username>.</para>

      <para>Er zijn twee tekstbestanden waarin welkomstberichten voor
	de FTP clients gezet kunnen worden.  De inhoud van
	<filename>/etc/ftpwelcome</filename> wordt getoond voordat
	gebruikers een aanmeldprompt zien.  Na een succesvolle
	aanmelding wordt de inhoud van
	<filename>/etc/ftpmotd</filename> getoond.  Het genoemde pad
	is relatief ten opzichte van de aanmeldomgeving, dus voor
	anonieme gebruikers wordt <filename>~ftp/etc/ftpmotd</filename>
	getoond.</para>

      <para>Als een FTP server eenmaal correct is ingesteld, moet die
	ingeschakeld worden in <filename>/etc/inetd.conf</filename>.
	Daar moet het commentaarkarakter <literal>#</literal> voor de
	bestaande <application>ftpd</application> regel verwijderd
	worden:</para>

      <programlisting>ftp	stream	tcp	nowait	root	/usr/libexec/ftpd	ftpd -l</programlisting>

      <para>Nadat het bestand met instellingen is gewijzigd, moet er
	een HangUP signaal verstuurd worden naar
	<application>inetd</application>, zoals uitgelegd in <xref
	  linkend="network-inetd-hangup">.</para>

      <para>Nu kan aangemeld worden op de FTP server met:</para>

      <screen>&prompt.user; <userinput>ftp localhost</userinput></screen>
    </sect2>

    <sect2>
      <title>Beheren</title>

      <indexterm><primary>syslog</primary></indexterm>

      <indexterm>
	<primary>logboekbestanden</primary>

	<secondary>FTP</secondary>
      </indexterm>

      <para>De <application>ftpd</application> daemon gebruikt
	&man.syslog.3; om berichten te loggen.  Standaard plaatst de
	systeemlogdaemon berichten over FTP in
	<filename>/var/log/xferlog</filename>.  De lokatie van het FTP
	logboek kan gewijzigd worden door de volgende regels in
	<filename>/etc/syslog.conf</filename> te wijzigen:</para>

      <programlisting>ftp.info      /var/log/xferlog</programlisting>

      <indexterm>
	<primary>FTP</primary>

	<secondary>anoniem</secondary>
      </indexterm>

      <para>Het is verstandig na te denken over de gevaren die op de
	loer liggen bij het draaien van een anonieme FTP server.  Dat
	geldt in het bijzonder voor het laten uploaden ven bestanden.
	Het is dan goed mogelijk dat een FTP site een forum wordt om
	commerci&euml;le software zonder licenties uit te wisselen of
	erger.  Als anonieme uploads toch nodig zijn, dan horen de
	rechten op die bestanden zo te staan dat ze niet door andere
	anonieme gebruikers gelezen kunnen worden tot er door een
	beheerder naar gekeken is.</para>
    </sect2>
  </sect1>

  <sect1 id="network-samba">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Murray</firstname>
	  <surname>Stokely</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Bestands- en printdiensten voor &microsoft.windows; clients
      (Samba)</title>

    <indexterm><primary>Samba server</primary></indexterm>

    <indexterm><primary>Microsoft Windows</primary></indexterm>

    <indexterm>
      <primary>file server</primary>

      <secondary>Windows clients</secondary>
    </indexterm>

    <indexterm>
      <primary>print server</primary>

      <secondary>Windows clients</secondary>
    </indexterm>

    <sect2>
      <title>Overzicht</title>

      <para><application>Samba</application> is een populair open
	source softwarepakket dat bestands- en printdiensten voor
	&microsoft.windows; clients biedt.  Die clients kunnen
	dan ruimte op een &os; bestandssysteem gebruiken alsof het
	een lokale schijf is en &os; printers gebruiken alsof het
	lokale printers zijn.</para>

      <para><application>Samba</application> software packages horen
	op de &os; installatiemedia te staan.  Als
	<application>Samba</application> bij de basisinstallatie niet
	mee is ge&iuml;nstalleerd, dan kan dat alsnog via de <filename
	  role="package">net/samba3</filename> port of met het
	package.</para>

<!-- mention LDAP, Active Directory, WinBIND, ACL, Quotas, PAM, .. -->
    </sect2>

    <sect2>
      <title>Instellen</title>

      <para>Een standaardbestand met instellingen voor
	<application>Samba</application> wordt ge&iuml;nstalleerd als
	<filename>/usr/local/etc/smb.conf.default</filename>.  Dit
	bestand dient gekopieerd te worden naar
	<filename>/usr/local/etc/smb.conf</filename> en voordat
	<application>Samba</application> gebruikt kan worden, moeten er
	aanpassingen aan worden gemaakt.</para>

      <para><filename>smb.conf</filename> bevat de instellingen voor
	<application>Samba</application>, zoals die voor de printers en
	de <quote>gedeelde bestandssystemen</quote> die gedeeld worden
	met &windows; clients.  Het <application>Samba</application>
	pakket bevat een webgebaseerde beheermodule die
	<application>swat</application> heet, waarmee
	<filename>smb.conf</filename> op een eenvoudige manier
	ingesteld kan worden.</para>

      <sect3>
	<title>De Samba webbeheermodule gebruiken (SWAT)</title>

	<para>De Samba Webbeheermodule (SWAT) draait als een daemon
	  vanuit <application>inetd</application>.  Daarom dient voor
	  de volgende regel uit <filename>/etc/inetd.conf</filename>
	  het commentaarkarakter verwijderd te worden voordat
	  <application>swat</application> gebruikt kan worden om
	  <application>Samba</application> in te stellen:</para>

	<programlisting>swat   stream  tcp     nowait/400      root    /usr/local/sbin/swat</programlisting>

      <para>Nadat het bestand met instellingen is gewijzigd, moet er
	een HangUP signaal verstuurd worden naar
	<application>inetd</application>, zoals uitgelegd in <xref
	  linkend="network-inetd-hangup">.</para>

	<para>Als <application>swat</application> is ingeschakeld in
	  <filename>inetd.conf</filename>, kan de module gebruikt
	  worden door met een browser een verbinding te maken met
	  <ulink url="http://localhost:901"></ulink>.  Er dient
	  aangemeld te worden met de <username>root</username> account
	  van het systeem.</para>

<!-- XXX screenshots go here, loader is creating them -->

	<para>Na succesvol aanmelden op de hoofdpagina voor de
	  <application>Samba</application> instellingen, is het
	  mogelijk de systeemdocumentatie te bekijken of te starten
	  door op het tabblad <guimenu>Globals</guimenu> te klikken.
	  Het onderdeel <guimenu>Globals</guimenu> correspondeert met
	  de sectie <literal>[global]</literal> in
	  <filename>/usr/local/etc/smb.conf</filename>.</para>
      </sect3>

      <sect3>
	<title>Systeembrede instellingen</title>

	<para>Of <application>Samba</application> nu wordt ingesteld
	  door <filename>/usr/local/etc/smb.conf</filename> direct te
	  bewerken of met <application>swat</application>, de eerste
	  instellingen die gemaakt moeten worden zijn de
	  volgende:</para>

	<variablelist>
	  <varlistentry>
	    <term><literal>workgroup</literal></term>

	    <listitem>
	      <para>NT Domeinnaam of Werkgroepnaam voor de computers
		die verbinding gaan maken met de server.</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><literal>netbios name</literal></term>

	    <indexterm><primary>NetBIOS</primary></indexterm>

	    <listitem>
	      <para>Hiermee wordt de NetBIOS naam waaronder de
		<application>Samba</application> server bekend zal zijn
		ingesteld.  Standaard is de naam het eerste gedeelte
		van de DNS naam van een host.</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><literal>server string</literal></term>

	    <listitem>
	      <para>Hiermee wordt de string ingesteld die te zien is
		als het commando <command>net view</command> en een
		aantal andere commando's die gebruik maken van de
		descriptieve tekst voor de server gebruikt
		worden.</para>
	    </listitem>
	  </varlistentry>
	</variablelist>
      </sect3>

      <sect3>
	<title>Beveiligingsinstellingen</title>

	<para>Twee van de belangrijkste instellingen in
	  <filename>/usr/local/etc/smb.conf</filename> zijn het
	  gekozen beveiligingsmodel en het wachtwoord voor
	  clientgebruikers.  Deze worden met de volgende instellingen
	  gemaakt:</para>

	<variablelist>
	  <varlistentry>
	    <term><literal>security</literal></term>

	    <listitem>
	      <para>De twee meest gebruikte mogelijkheden hier zijn
		<literal>security = share</literal> en
		<literal>security = user</literal>.  Als de clients
		gebruikersnamen hebben die overeenkomen met hun
		gebruikersnaam op de &os; machine, dan is het
		verstandig om te kiezen voor beveiliging op
		gebruikersniveau.  Dit is het standaard
		beveiligingsbeleid en kent als voorwaarde dat
		gebruikers zich eerst moeten aanmelden voordat ze
		toegang krijgen tot gedeelde bronnen.</para>

	      <para>Bij beveiliging op shareniveau hoeft een client
		niet met een geldige gebruikersnaam en wachtwoord aan
		te melden op de server voor het mogelijk is om een
		verbinding te proberen te krijgen met een gedeelde
		bron.  Dit was het standaardbeveiligingsmodel voor
		oudere versies van
		<application>Samba</application>.</para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term><literal>passdb backend</literal></term>

	    <indexterm><primary>NIS+</primary></indexterm>

	    <indexterm><primary>LDAP</primary></indexterm>

	    <indexterm><primary>SQL database</primary></indexterm>

	    <listitem>
	      <para><application>Samba</application> kent aan de
		achterkant verschillende authenticatiemodellen.
		Clients kunnen authenticeren met LDAP, NIS+, een SQL
		database of een aangepast wachtwoordbestand.  De
		standaard authenticatiemethode is
		<literal>smbpasswd</literal>.  Meer wordt hier niet
		behandeld.</para>
	    </listitem>
	  </varlistentry>
	</variablelist>

	<para>Als aangenomen wordt dat de standaard achterkant
	  <literal>smbpasswd</literal> wordt gebruikt, dan moet
	  <filename>/usr/local/private/smbpasswd</filename> gemaakt
	  worden om <application>Samba</application> in staat te
	  stellen clients te authenticeren.  Alle &unix;
	  gebruikersaccounts toegang geven vanaf &windows; clients gaat
	  met het volgende commando:</para>

	<screen>&prompt.root; <userinput>grep -v "^#" /etc/passwd | make_smbpasswd &gt; /usr/local/private/smbpasswd</userinput>
&prompt.root; <userinput>chmod 600 /usr/local/private/smbpasswd</userinput></screen>

	<para>In de <application>Samba</application> documentatie staat
	  meer informatie over instellingen.  Met de hier gegeven
	  basisuitleg moet het mogelijk zijn
	  <application>Samba</application> draaiende te krijgen.</para>
      </sect3>
    </sect2>

    <sect2>
      <title><application>Samba</application> starten</title>

      <para>Om <application>Samba</application> in te schakelen bij het
	starten van een systeem dient de volgende regel aan
	<filename>/etc/rc.conf</filename> toegevoegd te worden:</para>

      <programlisting>samba_enable="YES"</programlisting>

      <para><application>Samba</application> kan op ieder moment
	gestart worden met:</para>

      <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/samba.sh start</userinput>
Starting SAMBA: removing stale tdbs :
Starting nmbd.
Starting smbd.</screen>

      <para><application>Samba</application> bestaat feitelijk uit drie
	afzonderlijke daemons.  Het script
	<filename>samba.sh</filename> start de daemons
	<application>nmbd</application> en
	<application>smbd</application>.  Als de winbind name
	resolution diensten in <filename>smb.conf</filename> zijn
	ingeschakeld, dan start ook de daemon
	<application>winbindd</application>.</para>

      <para><application>Samba</application> kan op ieder moment
	gestopt worden met:</para>

      <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/samba.sh stop</userinput></screen>

      <para><application>Samba</application> is een complexe
	softwaresuite met functionaliteit waarmee verregaande
	ingratie met &microsoft.windows; netwerken mogelijk wordt.
	Informatie die verder gaat dan de basisinstallatie staat op
	<ulink url="http://www.samba.org"></ulink>.</para>
    </sect2>
  </sect1>

  <sect1 id="network-ntp">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Hukins</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Tijd synchroniseren met NTP</title>

    <indexterm><primary>NTP</primary></indexterm>

    <sect2>
      <title>Overzicht</title>

      <para>Na verloop van tijd gaat de tijd van een computer meestal
	uit de pas lopen.  Het Netwerk Tijd Protocol (NTP) kan ervoor
	zorgen dat de tijd accuraat blijft.</para>

      <para>Veel diensten op internet zijn afhankelijk, of hebben veel
	voordeel, van het betrouwbaar zijn van de tijd.  Zo ontvangt
	een webserver bijvoorbeeld veel verzoeken om een bestand te
	sturen als dat gewijzigd is sinds een bepaald moment.  In een
	LAN omgeving is het van groot belang dat computers die
	bestanden delen van eenzelfde server gesynchroniseerde tijd
	hebben zodat de tijdstempels consistent blijven.  Diensten
	zoals &man.cron.8; zijn ook afhankelijk van een betrouwbare
	systeemtijd om commando's op het ingestelde moment uit te
	voeren.</para>

      <indexterm>
	<primary>NTP</primary>

	<secondary>ntpd</secondary>
      </indexterm>

      <para>Bij &os; zit de &man.ntpd.8; <acronym role="Network
	  Time Protocol">NTP</acronym> server die gebruikt kan worden
	om bij andere <acronym
	  role="Network Time Protocol">NTP</acronym> servers de tijd op
	te vragen om de eigen klok gelijk te zetten of om de juiste
	tijd te verstrekken aan andere apparaten.</para>
    </sect2>

    <sect2>
      <title>Passende NTP servers kiezen</title>

      <indexterm>
	<primary>NTP</primary>

	<secondary>choosing servers</secondary>
      </indexterm>

      <para>Om de tijd te synchroniseren moeten er &eacute;&eacute;n
	of meer <acronym role="Network Time Protocol">NTP</acronym>
	servers beschikbaar zijn.  Een lokale systeembeheerder of een
	ISP heeft wellicht een NTP server voor dit doel opgezet.  Het
	is verstandig om documentatie te raadplegen en te bekijken of
	dat het geval is.  Er is een <ulink
	  url="http://ntp.isc.org/bin/view/Servers/WebHome">online
	lijst van publiek toegankelijke NTP servers</ulink> waarop een
	NTP server gezocht kan worden die in geografische zin dichtbij
	een te synchroniseren computer ligt.  Het is belangrijk te
	voldoen aan het beleid voor de betreffende server en
	toestemming te vragen als dat in de voorwaarden staat.</para>

      <para>Het is verstandig meerdere, niet van elkaar afhankelijke,
	NTP servers te kiezen voor het geval een van de servers niet
	langer betrouwbaar is of niet bereikbaar is.  &man.ntpd.8;
	gebruikt de antwoorden die van andere servers ontvangen worden
	op intelligente wijze: betrouwbare servers krijgen voorrang
	boven ontbetrouwbare servers.</para>
    </sect2>

    <sect2>
      <title>Machine instellen</title>

      <indexterm>
	<primary>NTP</primary>

	<secondary>instellen</secondary>
      </indexterm>

      <sect3>
	<title>Basisinstellingen</title>

	<indexterm><primary>ntpdate</primary></indexterm>

	<para>Als het alleen de bedoeling is de tijd te synchroniseren
	  bij het opstarten van een machine, dan kan &man.ntpdate.8;
	  gebruikt worden.  Dit kan van toepassing zijn op desktops
	  die regelmatig herstart worden en niet echt regelmatig
	  gesynchroniseerd hoeven te worden.  Op sommige machines hoort
	  echter &man.ntpd.8; te draaien.</para>

	<para>Het gebruik van &man.ntpdate.8; bij het opstarten is ook
	  een goed idee voor machines waarop &man.ntpd.8; draait.  De
	  &man.ntpd.8; wijzigt de tijd geleidelijk, terwijl
	  &man.ntpdate.8; gewoon de tijd instelt, hoe groot het
	  verschil tussen de bestaande tijd van een machine en de
	  correcte tijd ook is.</para>

	<para>Om &man.ntpdate.8; tijdens het opstarten in te schakelen
	  kan <literal>ntpdate_enable="YES"</literal> aan
	  <filename>/etc/rc.conf</filename> worden toegevoegd.  Alle
	  voor de synchronisatie te gebruiken servers moeten dan,
	  samen met eventuele opties voor &man.ntpdate.8;, in
	  <varname>ntpdate_flags</varname> aangegeven worden.</para>
      </sect3>

      <sect3>
	<indexterm>
	  <primary>NTP</primary>

	  <secondary>ntp.conf</secondary>
	</indexterm>

	<title>Algemene instellingen</title>

	<para>NTP wordt ingesteld met het bestand
	  <filename>/etc/ntp.conf</filename> in het formaat dat
	  beschreven staat in &man.ntp.conf.5;.  Hieronder volgt een
	  eenvoudig voorbeeld:</para>

	<programlisting>server ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net

driftfile /var/db/ntp.drift</programlisting>

	<para>De optie <literal>server</literal> geeft aan welke
	  servers er gebruikt moeten worden, met op elke regel een
	  server.  Als de server wordt ingesteld met het argument
	  <literal>prefer</literal>, zoals bij <hostid
	    role="fqdn">ntplocal.example.com</hostid>, dan krijgt die
	  server de voorkeur boven de andere.  Een antwoord van een
	  voorkeursserver wordt genegeerd als dat significant afwijkt
	  van de antwoorden van de andere servers.  In andere gevallen
	  wordt het gebruikt zonder rekening te houden met de andere
	  antwoorden.  Het argument <literal>prefer</literal> wordt
	  meestal gebruikt voor NTP servers waarvan bekend is dat ze
	  erg betrouwbaar zijn, zoals die met speciale tijdbewaking
	  hardware.</para>

	<para>De optie <literal>driftfile</literal> geeft aan welk
	  bestand gebruikt wordt om de offset van de klokfrequentie van
	  het systeem op te slaan.  &man.ntpd.8; gebruikt die om
	  automatisch te compenseren voor het natuurlijke afwijken van
	  de tijd, zodat er zelfs bij gebrek aan externe bronnen een
	  redelijke accurate tijdsinstelling mogelijk is.</para>

	<para>De optie <literal>driftfile</literal> geeft aan welk
	  bestand gebruikt wordt om informatie over eerdere
	  antwoorden van NTP servers die gebruikt worden op te slaan.
	  Dit bestand bevat interne informatie voor NTP.  Het hoort
	  niet door andere processen gewijzigd te worden.</para>
      </sect3>

      <sect3>
	<title>Toegang tot een server instellen</title>

	<para>Een NTP server is standaard toegankelijk voor alle
	  hosts op een netwerk.  De optie <literal>restrict</literal>
	  in <filename>/etc/ntp.conf</filename> maakt het mogelijk om
	  aan te geven welke machines de dienst mogen benaderen.</para>

	<para>Voor het blokkeren van toegang voor alle andere machines
	  kan de volgende regel aan <filename>/etc/ntp.conf</filename>
	  toegevoegd worden:</para>

	<programlisting>restrict default ignore</programlisting>

	<para>Om alleen machines op bijvoorbeeld het locale netwerk toe
	  te staan hun tijd te synchroniseren met een server, maar
	  ze tegelijkertijd niet toe te staan om de server te draaien
	  of de server als referentie voor synchronisatie te gebruiken,
	  kan de volgende regel toegevoegd worden:</para>

	<programlisting>restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap</programlisting>

	<para>Hierboven is <hostid role="ipaddr">192.168.1.0</hostid>
	  een IP adres op een LAN en <hostid
	    role="netmask">255.255.255.0</hostid> is het bijbehorende
	  netwerkmasker.</para>

	<para><filename>/etc/ntp.conf</filename> mag meerdere regels
	  met <literal>restrict</literal> bevatten.  Meer details staan
	  in het onderdeel <literal>Access Control Support</literal>
	  van &man.ntp.conf.5;.</para>
      </sect3>
    </sect2>

    <sect2>
      <title>De NTP server draaien</title>

      <para>De NTP server kan bij het opstarten gestart worden door de
	regel <literal>ntpd_enable="YES"</literal> aan
	<filename>/etc/rc.conf</filename> toe te voegen.  Om extra
	opties aan &man.ntpd.8; mee te geven kan de parameter
	<varname>ntpd_flags</varname> in
	<filename>/etc/rc.conf</filename> gebruikt worden.</para>

      <para>Om de server zonder een herstart van de machine te starten
	kan <command>ntpd</command> uitgevoerd worden, met toevoeging
	van de parameters uit <varname>ntpd_flags</varname> in
	<filename>/etc/rc.conf</filename>.  Bijvoorbeeld:</para>

      <screen>&prompt.root; <userinput>ntpd -p /var/run/ntpd.pid</userinput></screen>

      <note>
	<para>In &os;&nbsp;4.X, dienen de
	  <literal>ntpd</literal> uit het bovenstaande voorbeeld
	  vervangen te worden door <literal>xntpd</literal>.</para>
      </note>
    </sect2>

    <sect2>
      <title>ntpd gebruiken met een tijdelijke
	Internetverbinding</title>

      <para>&man.ntpd.8; heeft geen permanente verbinding met een
	netwerk nodig om goed te werken.  Maar als er gebruik gemaakt
	wordt van een inbelverbinding, is het wellicht verstandig om
	ervoor te zorgen dat uitgaande NTP verzoeken geen uitgaande
	verbinding kunnen starten.  Als er gebruik gemaakt wordt van
	user PPP, kunnen er <literal>filter</literal> commando's
	ingesteld worden in <filename>/etc/ppp/ppp.conf</filename>.
	Bijboorbeeld:</para>

      <programlisting>set filter dial 0 deny udp src eq 123
# NTP verkeer zorgt niet voor uitbellen
set filter dial 1 permit 0 0
set filter alive 0 deny udp src eq 123
# Inkomend NTP verkeer houdt de verbinding niet open
set filter alive 1 deny udp dst eq 123
# Uitgaand NTP verkeer houdt de verbinding niet open
set filter alive 2 permit 0/0 0/0</programlisting>

      <para>Meer details staan in de <literal>PACKET
	FILTERING</literal> sectie in &man.ppp.8; en in de voorbeelden
	in <filename>/usr/share/examples/ppp/</filename>.</para>

      <note>
	<para>Sommige internet providers blokkeren lage poorten,
	  waardoor NTP niet kan werken omdat er nooit een antwoord
	  ontvangen kan worden door een machine.</para>
      </note>
    </sect2>

    <sect2>
      <title>Meer informatie</title>

      <para>HTML documentatie voor de NTP server staat in
	<filename>/usr/share/doc/ntp/</filename>.</para>
    </sect2>
  </sect1>
</chapter>

<!--
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->
<!--  LocalWords:  config mnt www -->
