doc/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml
Bjoern Heidotting e919992f50 Update to r52015:
Only samba4 is available in ports now, switch to use samba_server for service start/stop.
2018-07-21 15:54:38 +00:00

4802 lines
177 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!--
The FreeBSD Documentation Project
The FreeBSD German Documentation Project
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/network-servers/chapter.xml,v 1.103 2011/12/24 15:51:18 bcr Exp $
basiert auf: r52015
-->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="network-servers">
<!--
<info>
<authorgroup>
<author><personname><firstname>Murray</firstname><surname>Stokely</surname></personname><contrib>Überarbeitet von </contrib></author>
</authorgroup>
<authorgroup>
<author><personname><firstname>Johann</firstname><surname>Kois</surname></personname><contrib>Übersetzt von </contrib></author>
</authorgroup>
</info>
-->
<title>Netzwerkserver</title>
<sect1 xml:id="network-servers-synopsis">
<title>Übersicht</title>
<para>Dieses Kapitel beschreibt einige der häufiger verwendeten
Netzwerkdienste auf &unix;-Systemen. Dazu zählen
Installation und Konfiguration sowie Test und Wartung
verschiedener Netzwerkdienste. Zusätzlich sind im ganzen
Kapitel Beispielkonfigurationen als Referenz enthalten.</para>
<para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie</para>
<itemizedlist>
<listitem>
<para>Den <application>inetd</application>-Daemon
konfigurieren können.</para>
</listitem>
<listitem>
<para>Wissen, wie das
<foreignphrase>Network File System</foreignphrase>
(<acronym>NFS</acronym>) eingerichtet wird.</para>
</listitem>
<listitem>
<para>Einen
<foreignphrase>Network Information Server</foreignphrase>
(<acronym>NIS</acronym>) einrichten können, um damit
Benutzerkonten im Netzwerk zu verteilen.</para>
</listitem>
<listitem>
<para>Wissen, wie Sie &os; einrichten, um als
<acronym>LDAP</acronym>-Server oder -Client zu
agieren.</para>
</listitem>
<listitem>
<para>Rechner durch Nutzung von <acronym>DHCP</acronym>
automatisch für ein Netzwerk konfigurieren können.</para>
</listitem>
<listitem>
<para>In der Lage sein, einen
<foreignphrase>Domain Name Server</foreignphrase>
(<acronym>DNS</acronym>) einzurichten.</para>
</listitem>
<listitem>
<para>Den <application>Apache</application>
<acronym>HTTP</acronym>-Server konfigurieren können.</para>
</listitem>
<listitem>
<para>Wissen, wie man einen
<foreignphrase>File Transfer Protocol</foreignphrase>
(<acronym>FTP</acronym>)-Server einrichtet.</para>
</listitem>
<listitem>
<para>Mit <application>Samba</application> einen Datei- und
Druckserver für &windows;-Clients konfigurieren
können.</para>
</listitem>
<listitem>
<para>Unter Nutzung des <acronym>NTP</acronym>-Protokolls
Datum und Uhrzeit synchronisieren sowie einen Zeitserver
installieren können.</para>
</listitem>
<listitem>
<para>Wissen, wie <acronym>iSCSI</acronym> eingerichtet
wird.</para>
</listitem>
</itemizedlist>
<para>Dieses Kapitel setzt folgende Grundkenntnisse voraus:</para>
<itemizedlist>
<listitem>
<para><filename>/etc/rc</filename>-Skripte.</para>
</listitem>
<listitem>
<para>Netzwerkterminologie</para>
</listitem>
<listitem>
<para>Installation zusätzlicher Software von Drittanbietern
(<xref linkend="ports"/>).</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 xml:id="network-inetd">
<title>Der <application>inetd</application>
<quote>Super-Server</quote></title>
<!--
<info>
<authorgroup>
<author><personname><firstname>Chern</firstname><surname>Lee</surname></personname><contrib>Beigetragen von </contrib></author>
</authorgroup>
<authorgroup>
<author><personname><othername>&os;&nbsp;Documentation Project</othername></personname><contrib>Aktualisiert vom </contrib></author>
</authorgroup>
</info>
-->
<para>Der &man.inetd.8;-Daemon wird manchmal auch als
<quote>Internet Super-Server</quote> bezeichnet, weil er
Verbindungen für viele Dienste verwaltet. Anstatt mehrere
Anwendungen zu starten, muss nur der
<application>inetd</application>-Dienst gestartet werden.
Wenn eine Verbindung für einen Dienst eintrifft, der von
<application>inetd</application> verwaltet wird, bestimmt
<application>inetd</application>, welches Programm für die
eingetroffene Verbindung zuständig ist, aktiviert den
entsprechenden Prozess und reicht den Socket an ihn weiter.
Der Einsatz von <application>inetd</application> an Stelle
viele einzelner Daemonen kann auf nicht komplett ausgelasteten
Servern zu einer Verringerung der Systemlast führen.</para>
<para><application>inetd</application> wird vor allem dazu
verwendet, andere Daemonen zu aktivieren, einige Protokolle
werden aber auch intern verwaltet. Dazu gehören
<application>chargen</application>,
<application>auth</application>,
<application>time</application>,
<application>echo</application>,
<application>discard</application> sowie
<application>daytime</application>.</para>
<para>Dieser Abschnitt beschreibt die Konfiguration von
<application>inetd</application>.</para>
<sect2 xml:id="network-inetd-conf">
<title>Konfigurationsdatei</title>
<para>Die Konfiguration von <application>inetd</application>
erfolgt über <filename>/etc/inetd.conf</filename> Jede Zeile
dieser Datei repräsentiert eine Anwendung, die von
<application>inetd</application> gestartet werden kann. In
der Voreinstellung beginnt jede Zeile mit einem Kommentar
(<literal>#</literal>), was bedeutet dass
<application>inetd</application> keine Verbindungen für
Anwendungen akzeptiert. Entfernen Sie den Kommentar am Anfang
der Zeile, damit <application>inetd</application> Verbindungen
für diese Anwendung entgegennimmt.</para>
<para>Nachdem Sie die Änderungen gespeichert haben, fügen Sie
folgende Zeile in <filename>/etc/rc.conf</filename> ein, damit
<application>inetd</application> bei Booten automatisch
gestartet wird:</para>
<programlisting>inetd_enable="YES"</programlisting>
<para>Starten Sie jetzt <application>inetd</application>, so
dass er Verbindungen für die von Ihnen konfigurierten Dienste
entgegennimmt:</para>
<screen>&prompt.root; <userinput>service inetd start</userinput></screen>
<para>Sobald <application>inetd</application> gestartet ist,
muss der Dienst benachrichtigt werden, wenn eine Änderung in
<filename>/etc/inetd.conf</filename> gemacht wird:</para>
<example xml:id="network-inetd-reread">
<title>Die Konfigurationsdatei von
<application>inetd</application> neu einlesen</title>
<screen>&prompt.root; <userinput>service inetd reload</userinput></screen>
</example>
<para>Normalerweise müssen Sie lediglich den Kommentar vor der
Anwendung entfernen. In einigen Situationen kann es jedoch
sinnvoll sein, den Eintrag weiter zu bearbeiten.</para>
<para>Als Beispiel dient hier der Standardeintrag für
&man.ftpd.8; über IPv4:</para>
<programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting>
<para>Die sieben Spalten in diesem Eintrag haben folgende
Bedeutung:</para>
<programlisting>service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
user[:group][/login-class]
server-program
server-program-arguments</programlisting>
<variablelist>
<varlistentry>
<term>service-name</term>
<listitem>
<para>Der Dienstname eines bestimmten Daemons. Er muss
einem in <filename>/etc/services</filename>
aufgelisteten Dienst entsprechen. Hier wird festgelegt,
auf welchen Port <application>inetd</application>
eingehende Verbindungen für diesen Dienst entgegennimmt.
Wenn ein neuer Dienst benutzt wird, muss er zuerst in
<filename>/etc/services</filename> eingetragen
werden.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>socket-type</term>
<listitem>
<para>Entweder <literal>stream</literal>,
<literal>dgram</literal>, <literal>raw</literal>, oder
<literal>seqpacket</literal>. Nutzen Sie
<literal>stream</literal> für
<acronym>TCP</acronym>-Verbindungen und
<literal>dgram</literal> für
<acronym>UDP</acronym>-Dienste.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>protocol</term>
<listitem>
<para>Benutzen Sie eines der folgenden Protokolle:</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="2">
<thead>
<row>
<entry>Protokoll</entry>
<entry>Bedeutung</entry>
</row>
</thead>
<tbody>
<row>
<entry>tcp oder tcp4</entry>
<entry>TCP (IPv4)</entry>
</row>
<row>
<entry>udp oder udp4</entry>
<entry><acronym>UDP</acronym> (IPv4)</entry>
</row>
<row>
<entry>tcp6</entry>
<entry>TCP (IPv6)</entry>
</row>
<row>
<entry>udp6</entry>
<entry><acronym>UDP</acronym> (IPv6)</entry>
</row>
<row>
<entry>tcp46</entry>
<entry>TCP sowohl unter IPv4 als auch unter
IPv6</entry>
</row>
<row>
<entry>udp46</entry>
<entry><acronym>UDP</acronym> sowohl unter IPv4
als auch unter IPv6</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</listitem>
</varlistentry>
<varlistentry>
<term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]</term>
<listitem>
<para>In diesem Feld muss <option>wait</option> oder
<option>nowait</option> angegeben werden.
<option>max-child</option>,
<option>max-connections-per-ip-per-minute</option> sowie
<option>max-child-per-ip</option> sind optional.</para>
<para><option>wait|nowait</option> gibt an, ob der Dienst
seinen eigenen Socket verwalten kann oder nicht.
<option>dgram</option>-Sockets müssen
<option>wait</option> verwenden, während Daemonen mit
<option>stream</option>-Sockets, die normalerweise auch
aus mehreren Threads bestehen, <option>nowait</option>
verwenden sollten. <option>wait</option> gibt in der
Regel mehrere Sockets an einen einzelnen Daemon weiter,
während <option>nowait</option> für jeden neuen Socket
einen Childdaemon erzeugt.</para>
<para>Die maximale Anzahl an Child-Daemonen, die
<application>inetd</application> erzeugen kann, wird
durch die Option <option>max-child</option> festgelegt.
Wenn ein bestimmter Daemon 10 Instanzen benötigt, wird
der Wert <literal>/10</literal> hinter die Option
<option>nowait</option> gesetzt. Der Wert
<literal>/0</literal> gibt an, das es keine Beschränkung
gibt.</para>
<para><option>max-connections-per-ip-per-minute</option>
legt die maximale Anzahl von Verbindungsversuchen pro
Minute fest, die von einer bestimmten
<acronym>IP</acronym>-Adresse aus unternommen werden
können. Sobald das Limit erreicht ist, werden weitere
Verbindungen von dieser <acronym>IP</acronym>-Adresse
geblockt, bis die Minute vorüber ist. Ein Wert von
<literal>/10</literal> würde die maximale Anzahl der
Verindungsversuche einer bestimmten
<acronym>IP</acronym>-Adresse auf zehn Versuche in der
Minute beschränken. <option>max-child-per-ip</option>
legt fest, wie viele Child-Daemonen von einer bestimmten
<acronym>IP</acronym>-Adresse aus gestartet werden
können. Durch diese Optionen lassen sich
Ressourcenverbrauch sowie die Auswirkungen eines
<literal>Denial of Service (DoS)</literal>-Angriffs
begrenzen.</para>
<para>Ein Beispiel finden Sie in den Voreinstellungen für
&man.fingerd.8;:</para>
<programlisting>finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>user</term>
<listitem>
<para>Der Benutzername, unter dem der jeweilige Daemon
laufen soll. Meistens laufen Daemonen als <systemitem
class="username">root</systemitem>, <systemitem
class="username">daemon</systemitem> oder <systemitem
class="username">nobody</systemitem>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>server-program</term>
<listitem>
<para>Der vollständige Pfad des Daemons. Wird der Daemon
von <application>inetd</application> intern
bereitgestellt, verwenden Sie
<option>internal</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>server-program-arguments</term>
<listitem>
<para>Dieser Eintrag legt die Argumente fest, die bei
der Aktivierung an den Daemon übergeben werden. Wenn es
sich beim Daemon um einen internen Dienst handelt,
verwenden Sie wiederum <option>internal</option>.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 xml:id="network-inetd-cmdline">
<title>Kommandozeilenoptionen</title>
<para>Wie die meisten anderen Server-Daemonen lässt sich auch
<application>inetd</application> über verschiedene Optionen
steuern. In der Voreinstellung wird
<application>inetd</application> mit
<literal>-wW -C 60</literal> gestartet. Durch das Setzen
dieser Werte wird das TCP-Wrapping für alle
<application>inetd</application>-Dienste aktiviert.
Zudem wird verhindert, dass eine <acronym>IP</acronym>-Adresse
eine Dienst öfter als 60 Mal pro Minute anfordern kann.</para>
<para>Um die Voreinstellungen für
<application>inetd</application> zu ändern, fügen Sie einen
Eintrag für <literal>inetd_flags</literal> in
<filename>/etc/rc.conf</filename> hinzu. Wenn
<application>inetd</application> bereits ausgeführt wird,
starten Sie ihn mit <command>service inetd restart</command>
neu.</para>
<para>Die verfügbaren Optionen sind:</para>
<variablelist>
<varlistentry>
<term>-c maximum</term>
<listitem>
<para>Legt die maximale Anzahl von parallelen Aufrufen
eines Dienstes fest; in der Voreinstellung gibt es keine
Einschränkung. Diese Einstellung kann für jeden Dienst
durch Setzen des Parameters <option>max-child</option>
in <filename>/etc/inetd.conf</filename> festgelegt
werden.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-C rate</term>
<listitem>
<para>Legt fest, wie oft ein Dienst von einer einzelnen
<acronym>IP</acronym>-Adresse in einer Minute aufgerufen
werden kann; in der Voreinstellung gibt es keine
Einschränkung. Dieser Wert kann für jeden Dienst durch
das Setzen des Parameters
<option>max-connections-per-ip-per-minute</option>
in <filename>/etc/inetd.conf</filename> festgelegt
werden.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-R rate</term>
<listitem>
<para>Legt fest, wie oft ein Dienst in der Minute
aktiviert werden kann; in der Voreinstellung sind dies
<literal>256</literal> Aktivierungen pro Minute. Ein
Wert von <literal>0</literal> erlaubt unbegrenzt viele
Aktivierungen.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>-s maximum</term>
<listitem>
<para>Legt fest, wie oft ein Dienst in der Minute von
einer einzelnen <acronym>IP</acronym>-Adresse aus
aktiviert werden kann; in der Voreinstellung gibt es
hier keine Beschränkung. Diese Einstellung kann für
jeden Dienst durch die Angabe von
<option>max-child-per-ip</option> in
<filename>/etc/inetd.conf</filename> angepasst
werden.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Es sind noch weitere Optionen verfügbar. Eine
vollständige Liste der Optionen finden Sie in
&man.inetd.8;.</para>
</sect2>
<sect2 xml:id="network-inetd-security">
<title>Sicherheitsbedenken</title>
<para>Viele Daemonen, die von <application>inetd</application>
verwaltet werden, sind nicht auf Sicherheit bedacht. Einige
Damonen, wie beispielsweise
<application>fingerd</application>, liefern Informationen, die
für einen Angreifer nützlich sein könnten. Aktivieren Sie nur
erforderliche Dienste und überwachen Sie das System auf
übermäßige Verbindungsversuche.
<literal>max-connections-per-ip-per-minute</literal>,
<literal>max-child</literal> und
<literal>max-child-per-ip</literal> können verwendet werden,
um solche Angriffe zu begrenzen.</para>
<para><application>TCP-Wrapper</application> ist in der
Voreinstellung aktiviert. Lesen Sie &man.hosts.access.5;,
wenn Sie weitere Informationen zum Setzen von
TCP-Beschränkungen für verschiedene von
<application>inetd</application> aktivierte Daemonen
benötigen.</para>
</sect2>
</sect1>
<sect1 xml:id="network-nfs">
<info>
<title>Network File System (<acronym>NFS</acronym>)</title>
<authorgroup>
<author>
<personname>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
</personname>
<contrib>Reorganisiert und erweitert von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<personname>
<firstname>Bill</firstname>
<surname>Swingle</surname>
</personname>
<contrib>Geschrieben von </contrib>
</author>
</authorgroup>
</info>
<indexterm><primary>NFS</primary></indexterm>
<para>&os; unterstützt das Netzwerkdateisystem
<acronym>NFS</acronym>, das es einem Server erlaubt, Dateien
und Verzeichnisse über ein Netzwerk mit Clients zu teilen. Mit
<acronym>NFS</acronym> können Benutzer und Programme auf Daten
entfernter Systeme zugreifen, und zwar so, als ob es sich
um lokal gespeicherte Daten handeln würde.</para>
<para>Die wichtigsten Vorteile von <acronym>NFS</acronym>
sind:</para>
<itemizedlist>
<listitem>
<para>Daten, die sonst auf jeden Client dupliziert würden,
können an einem zentralen Ort aufbewahrt, und von den
Clients über das Netzwerk aufgerufen werden.</para>
</listitem>
<listitem>
<para>Verschiedene Clients können auf ein gemeinsames
Verzeichnis <filename>/usr/ports/distfiles</filename>
zugreifen. Die gemeinsame Nutzung dieses Verzeichnisses
ermöglicht einen schnellen Zugriff auf die Quelldateien,
ohne sie auf jede Maschine zu kopieren zu müssen.</para>
</listitem>
<listitem>
<para>In größeren Netzwerken ist es praktisch, einen
zentralen <acronym>NFS</acronym>-Server einzurichten, auf
dem die Heimatverzeichnisse der Benutzer gespeichert
werden. Dadurch steht den Benutzern immer das gleiche
Heimatverzeichnis zur Verfügung, unabhängig davon, an
welchem Client im Netzwerk sie sich anmelden.</para>
</listitem>
<listitem>
<para>Die Verwaltung der <acronym>NFS</acronym>-Exporte wird
vereinfacht. Zum Beispiel gibt es dann nur noch ein
Dateisystem, für das Sicherheits- oder Backup-Richtlinien
festgelegt werden müssen.</para>
</listitem>
<listitem>
<para>Wechselmedien können von anderen Maschinen im Netzwerk
verwendet werden. Dies reduziert die Anzahl von Geräten im
Netzwerk und bietet einen zentralen Ort für die Verwaltung.
Oft ist es einfacher, über ein zentrales Installationsmedium
Software auf mehreren Computern zu installieren.</para>
</listitem>
</itemizedlist>
<para><acronym>NFS</acronym> besteht aus einem Server und einem
oder mehreren Clients. Der Client greift über das Netzwerk auf
die Daten zu, die auf dem Server gespeichert sind. Damit dies
korrekt funktioniert, müssen einige Prozesse konfiguriert und
gestartet werden:</para>
<para>Folgende Daemonen müssen auf dem Server ausgeführt
werden:</para>
<indexterm>
<primary>NFS</primary>
<secondary>Server</secondary>
</indexterm>
<indexterm>
<primary>Dateiserver</primary>
<secondary>Unix-Clients</secondary>
</indexterm>
<indexterm>
<primary><application>rpcbind</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>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><application>nfsd</application></entry>
<entry>Der <acronym>NFS</acronym>-Daemon. Er bearbeitet
Anfragen der <acronym>NFS</acronym>-Clients.</entry>
</row>
<row>
<entry><application>mountd</application></entry>
<entry>Der <acronym>NFS</acronym>-Mount-Daemon. Er
bearbeitet die Anfragen von
<command>nfsd</command>.</entry>
</row>
<row>
<entry><application>rpcbind</application></entry>
<entry>Der Portmapper-Daemon. Durch ihn erkennen die
<acronym>NFS</acronym>-Clients, welchen Port der
<acronym>NFS</acronym>-Server verwendet.</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Der Einsatz von &man.nfsiod.8; ist nicht zwingend
erforderlich, kann aber die Leistung auf dem Client
verbessern.</para>
<sect2 xml:id="network-configuring-nfs">
<title>Konfiguration des Servers</title>
<indexterm>
<primary>NFS</primary>
<secondary>einrichten</secondary>
</indexterm>
<para>Die Dateisysteme, die der <acronym>NFS</acronym>-Server
exportieren soll, werden in <filename>/etc/exports</filename>
festgelegt. Jede Zeile in dieser Datei beschreibt ein zu
exportierendes Dateisystem, Clients, die darauf
Zugriff haben sowie alle Zugriffsoptionen. Die Optionen
eines auf einen anderen Rechner exportierten Dateisystems
müssen alle in einer Zeile stehen. Wird in einer Zeile kein
Rechner festgelegt, dürfen alle Clients im Netzwerk das
exportierte Dateisystem einhängen.</para>
<indexterm>
<primary>NFS</primary>
<secondary>Export von Dateisystemen</secondary>
</indexterm>
<para>Wie Dateisysteme exportiert werden, ist in der folgenden
<filename>/etc/exports</filename> zu sehen. Diese Beispiele
müssen natürlich an die Arbeitsumgebung und die
Netzwerkkonfiguration angepasst werden. Es existieren viele
verschiedene Optionen, allerdings werden hier nur wenige von
ihnen erwähnt. Eine vollständige Liste der Optionen finden
Sie in &man.exports.5;.</para>
<para>Dieses Beispiel exportiert <filename>/cdrom</filename> für
drei Clients, <replaceable>alpha</replaceable>,
<replaceable>bravo</replaceable> und
<replaceable>charlie</replaceable>:</para>
<programlisting>/cdrom -ro <replaceable>alpha</replaceable> <replaceable>bravo</replaceable> <replaceable>charlie</replaceable></programlisting>
<para>Die Option <option>-ro</option> kennzeichnet das
exportierte Dateisystem als schreibgeschützt. Dadurch sind
Clients nicht in der Lage, das exportierte Dateisystem zu
verändern. Dieses Beispiel geht davon aus, dass die Hostnamen
entweder über <acronym>DNS</acronym> oder über
<filename>/etc/hosts</filename> aufgelöst werden können.
Lesen Sie &man.hosts.5; falls das Netzwerk über keinen
<acronym>DNS</acronym>-Server verfügt.</para>
<para>Das nächste Beispiel exportiert <filename>/home</filename>
auf drei durch <acronym>IP</acronym>-Adressen bestimmte
Clients. Diese Einstellung kann für Netzwerke ohne
<acronym>DNS</acronym>-Server und
<filename>/etc/hosts</filename> nützlich sein. Die Option
<option>-alldirs</option> ermöglicht es, auch
Unterverzeichnisse als Mountpunkte festzulegen. Dies bedeutet
aber nicht, dass alle Unterverzeichnisse eingehängt werden,
vielmehr wird es dem Client ermöglicht, nur diejenigen
Verzeichnisse einzuhängen, die auch benötigt werden.</para>
<programlisting>/usr/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4</programlisting>
<para>Das nächste Beispiel exportiert <filename>/a</filename>,
damit Clients von verschiedenen Domänen auf das Dateisystem
zugreifen können. Die Option <option>-maproot=root</option>
erlaubt es dem Benutzer <systemitem
class="username">root</systemitem> des Clients, als
<systemitem class="username">root</systemitem> auf das
exportierte Dateisystem zu schreiben. Wenn diese Option nicht
gesetzt ist, wird der <systemitem class="username">
root</systemitem>-Benutzer des Clients dem <systemitem
class="username">nobody</systemitem>-Konto des Servers
zugeordnet und unterliegt somit den Zugriffsbeschränkungen
dieses Kontos.</para>
<programlisting>/a -maproot=root host.example.com box.example.org</programlisting>
<para>Ein Client kann für jedes Dateisystem nur einmal definiert
werden. Wenn beispielsweise <filename>/usr</filename> ein
gesondertes Dateisystem ist, dann wären die folgenden Einträge
falsch, da in beiden Einträgen der gleiche Rechner angegeben
wird:</para>
<programlisting>#Nicht erlaubt, wenn /usr ein einziges Dateisystem ist
/usr/src client
/usr/ports client</programlisting>
<para>Das richtige Format für eine solche Situation ist:</para>
<programlisting>/usr/src /usr/ports client</programlisting>
<para>Das Folgende ist ein Beispiel für eine gültige
Exportliste, in der <filename>/usr</filename> und
<filename>/exports</filename> lokale Dateisysteme sind:</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>Damit die vom <acronym>NFS</acronym>-Server benötigen
Prozesse beim Booten gestartet werden, fügen Sie folgende
Optionen in <filename>/etc/rc.conf</filename> hinzu:</para>
<programlisting>rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"</programlisting>
<para>Der Server kann jetzt mit diesem Kommando gestartet
werden:</para>
<screen>&prompt.root; <userinput>service nfsd start</userinput></screen>
<para>Wenn der <acronym>NFS</acronym>-Server startet, wird
auch <application>mountd</application> automatisch gestartet.
Allerdings liest <application>mountd</application>
<filename>/etc/exports</filename> nur, wenn der Server
gestartet wird. Um nachfolgende Änderungen an
<filename>/etc/exports</filename> wirksam werden zu lassen,
kann <application>mountd</application> angewiesen werden, die
Datei neu einzulesen:</para>
<screen>&prompt.root; <userinput>service mountd reload</userinput></screen>
</sect2>
<sect2>
<title>Konfiguration des Clients</title>
<para>Um den <acronym>NFS</acronym>-Client zu aktivieren, setzen
Sie folgende Option in <filename>/etc/rc.conf</filename> auf
jedem Client:</para>
<programlisting>nfs_client_enable="YES"</programlisting>
<para>Der Client ist nun in der Lage, ein entferntes Dateisystem
einzuhängen. In diesen Beispielen ist der Name des Servers
<systemitem>server</systemitem> und der Name des Clients
<systemitem>client</systemitem>. Fügen Sie folgenden Befehl
aus, um das Verzeichnis <filename>/home</filename> vom
<systemitem>server</systemitem> auf dem
<systemitem>client</systemitem> ins Verzeichnis
<filename>/mnt</filename> einzuhängen:</para>
<indexterm>
<primary>NFS</primary>
<secondary>Dateisysteme einhängen</secondary>
</indexterm>
<screen>&prompt.root; <userinput>mount server:/home /mnt</userinput></screen>
<para>Die Dateien und Verzeichnisse in
<filename>/home</filename> stehen dem Rechner
<systemitem>client</systemitem> nun im Verzeichnis
<filename>/mnt</filename> zur Verfügung.</para>
<para>Um ein entferntes Dateisystem bei jedem Systemstart
automatisch einzuhängen, fügen Sie das Dateisystem in
<filename>/etc/fstab</filename> ein:</para>
<programlisting>server:/home /mnt nfs rw 0 0</programlisting>
<para>&man.fstab.5; enthält eine Beschreibung aller
Optionen.</para>
</sect2>
<sect2>
<title>Dateien sperren
(<foreignphrase>Locking</foreignphrase>)</title>
<para>Einige Anwendungen erfordern die Sperrung von Dateien,
damit sie korrekt arbeiten. Um diese Sperre zu aktivieren,
müssen diese Zeilen in <filename>/etc/rc.conf</filename>
sowohl auf dem Client als auch auf dem Server hinzugefügt
werden:</para>
<programlisting>rpc_lockd_enable="YES"
rpc_statd_enable="YES"</programlisting>
<para>Danach starten Sie die beiden Anwendungen:</para>
<screen>&prompt.root; <userinput>service lockd start</userinput>
&prompt.root; <userinput>service statd start</userinput></screen>
<para>Wenn keine Dateisperren zwischen den
<acronym>NFS</acronym>-Clients und dem
<acronym>NFS</acronym>-Server benötigt werden, können Sie den
<acronym>NFS</acronym>-Client durch die Übergabe der
Option <option>-L</option> an <application>mount</application>
zu einer lokalen Sperrung von Dateien zwingen. Weitere
Details finden Sie in &man.mount.nfs.8;.</para>
</sect2>
<sect2 xml:id="network-amd">
<info>
<title>Automatisches Einhängen mit &man.amd.8;</title>
<authorgroup>
<author>
<personname>
<firstname>Wylie</firstname>
<surname>Stilwell</surname>
</personname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<personname>
<firstname>Chern</firstname>
<surname>Lee</surname>
</personname>
<contrib>Überarbeitet von </contrib>
</author>
</authorgroup>
</info>
<indexterm><primary>amd</primary></indexterm>
<indexterm>
<primary>Automatic Mounter Daemon</primary>
</indexterm>
<para>&man.amd.8; (Automatic Mounter Daemon) hängt ein
entferntes Dateisystem automatisch ein, wenn auf eine Datei
oder ein Verzeichnis in diesem Dateisystem zugegriffen wird.
Dateisysteme, die über einen gewissen Zeitraum inaktiv sind,
werden von <application>amd</application> automatisch
abgehängt.</para>
<para>Dieser Damon ist eine Alternative zum dauerhaften
Einhängen von Dateisystemen in
<filename>/etc/fstab</filename>. In der Voreinstellung stellt
<application>amd</application> die Verzeichnisse
<filename>/host</filename> und <filename>/net</filename> als
<acronym>NFS</acronym>-Server bereit. Wenn auf eine
Datei in diesen Verzeichnissen zugegriffen wird, sucht
<application>amd</application> den entsprechenden Mountpunkt
und hängt das Dateisystem automatisch ein.
<filename>/net</filename> wird zum Einhängen von
exportierten Dateisystemen von einer
<acronym>IP</acronym>-Adresse verwendet, während
<filename>/host</filename> zum Einhängen von exportierten
Dateisystemen eines durch seinen Namen festgelegten Rechners
dient. Ein Zugriff auf eine Datei in
<filename>/host/foobar/usr</filename> würde
<application>amd</application> veranlassen, das von
<systemitem>foobar</systemitem> exportierte Dateisystem
<filename>/usr</filename> einzuhängen.</para>
<example>
<title>Ein exportiertes Dateisystem mit
<application>amd</application> in den Verzeichnisbaum
einhängen</title>
<para><command>showmount -e</command> zeigt in diesem Beispiel
die exportierten Dateisysteme des
<acronym>NFS</acronym>-Servers
<systemitem>foobar</systemitem> an:</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>Die Ausgabe von <command>showmount</command> zeigt
<filename>/usr</filename> als exportiertes Dateisystem an.
Wenn man in das Verzeichnis
<filename>/host/foobar/usr</filename> wechselt, fängt
<application>amd</application> die Anfrage ab und versucht
den Rechnernamen <systemitem>foobar</systemitem> aufzulösen.
Wenn dies gelingt, wird <application>amd</application>
automatisch den gewünschten Export in den Verzeichnisbaum
einhängen.</para>
<para>Um <application>amd</application> beim Booten zu
aktivieren, fügen Sie folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>amd_enable="YES"</programlisting>
<para>Um <application>amd</application> direkt zu
starten:</para>
<screen>&prompt.root; <userinput>service amd start</userinput></screen>
<para>Individuelle Optionen können über die Umgebungsvariable
<varname>amd_flags</varname> an <application>amd</application>
übergeben werden. In der Voreinstellung ist
<varname>amd_flags</varname> eingestellt auf:</para>
<programlisting>amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"</programlisting>
<para>Die Standardoptionen, mit denen exportierte Dateisysteme
in den Verzeichnisbaum eingehängt werden, werden in
<filename>/etc/amd.map</filename> festgelegt. Einige der
erweiterten Optionen von <application>amd</application>
werden in <filename>/etc/amd.conf</filename> definiert.</para>
<para>Weitere Informationen finden Sie in &man.amd.8; und
&man.amd.conf.5;.</para>
</sect2>
<sect2 xml:id="network-autofs">
<title>Automatisches Einhängen mit &man.autofs.5;</title>
<note>
<para>&man.autofs.5; wird seit &os;&nbsp;10.1-RELEASE
unterstützt. Um die Funktionalität des automatischen
Einhängens in älteren &os;-Versionen zu benutzen,
verwenden Sie stattdessen &man.amd.8;. In diesem Kapitel
wird nur das automatische Einhängen mit Hilfe von
&man.autofs.5; beschrieben.</para>
</note>
<indexterm><primary>autofs</primary></indexterm>
<indexterm>
<primary>Automounter Subsystem</primary>
</indexterm>
<para>&man.autofs.5; ist eine gebräuchliche Bezeichnung für
verschiedene Komponenten, welche es erlauben, lokale und
entfernte Dateisysteme automatisch einzuhängen, sobald auf
eine Datei oder ein Verzeichnis in diesem Dateisystem
zugegriffen wird. Es besteht aus einer Kernel-Komponente
&man.autofs.5; und mehreren Benutzerprogrammen:
&man.automount.8;, &man.automountd.8; und
&man.autounmountd.8;. &man.autofs.5; ist eine Alternative
für &man.amd.8; aus früheren &os;-Versionen. &man.amd.8;
steht nach wie vor zur Verfügung, da beide Programme ein
unterschiedliches Format verwenden. Das Format welches
&man.autofs.5; verwendet ist das gleiche wie bei anderen
SVR4 Automountern, beispielsweise denen aus &solaris;,
&macos; X und &linux;.</para>
<para>Das virtuelle &man.autofs.5;-Dateisystem wird von
&man.automount.8; in einen bestimmten Mountpunkt eingehängt.
Dies geschieht gewöhnlich während des Bootens.</para>
<para>Jedes Mal, wenn ein Prozess versucht auf eine Datei
unterhalb des &man.autofs.5;-Mountpunkts zuzugreifen, wird
der Kernel den &man.automountd.8;-Daemon benachrichtigen und
den aktuellen Prozess anhalten. Der &man.automountd.8;-Daemon
wird dann die Anfrage des Kernels bearbeiten und das
entsprechende Dateisystem einhängen. Anschließend wird der
Daemon den Kernel benachrichtigen, dass der angehaltene
Prozess wieder freigegeben werden kann. Der
&man.autounmountd.8;-Daemon hängt automatisch Dateisysteme
nach einiger Zeit ab, sofern sie nicht mehr verwendet
werden.</para>
<para>Die primäre Konfigurationsdatei von autofs ist
<filename>/etc/auto_master</filename>. Sie enthält die
einzelnen Zuordnungen zu den Mountpunkten. Eine Erklärung
zu <filename>auto_master</filename> und der Syntax für
die Zuordnungen finden Sie in &man.auto.master.5;.</para>
<para>Eine spezielle Automounter Zuordnung wird in
<filename>/net</filename> eingehängt. Wenn auf eine Datei in
diesem Verzeichnis zugegriffen wird, hängt &man.autofs.5;
einen bestimmten, entfernen Mountpunkt ein. Wenn
beispielsweise auf eine Datei unterhalb von
<filename>/net/foobar/usr</filename> zugegriffen werden soll,
würde &man.automountd.8; das exportierte Dateisystem
<filename>/usr</filename> von dem Rechner <systemitem
class="fqdomainname">foobar</systemitem> einhängen.</para>
<example>
<title>Ein exportiertes Dateisystem mit &man.autofs.5; in den
Verzeichnisbaum einhängen</title>
<para>In diesem Beispiel zeigt <command>showmount -e</command>
die exportierten Dateisysteme des
<acronym>NFS</acronym>-Servers <systemitem
class="fqdomainname">foobar</systemitem>:</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 /net/foobar/usr</userinput></screen>
</example>
<para>Die Ausgabe von <command>showmount</command> zeigt das
exportierte Dateisystem <filename>/usr</filename>. Wenn in
das Verzeichnis <filename>/host/foobar/usr</filename>
gewechselt wird, fängt &man.automountd.8; die Anforderung ab
und versucht, den Rechnernamen <systemitem
class="fqdomainname">foobar</systemitem> aufzulösen.
Gelingt dies, wird &man.automountd.8; automatisch das
exportierte Dateisystem einhängen.</para>
<para>Um &man.autofs.5; beim Booten zu aktivieren, fügen Sie
diese Zeile in <filename>/etc/rc.conf</filename> ein:</para>
<programlisting>autofs_enable="YES"</programlisting>
<para>Danach kann &man.autofs.5; gestartet werden:</para>
<screen>&prompt.root; <userinput>service automount start</userinput>
&prompt.root; <userinput>service automountd start</userinput>
&prompt.root; <userinput>service autounmountd start</userinput></screen>
<para>Obwohl das Format von &man.autofs.5; das gleiche ist wie
in anderen Betriebssystemen, kann es wünschenswert sein,
Informationen von anderen Betriebssystemen zu Rate zu ziehen,
wie dieses <link
xlink:href="http://images.apple.com/business/docs/Autofs.pdf">Mac
OS X Dokument</link>.</para>
<para>Weitere Informationen finden Sie in den Manualpages
&man.automount.8;, &man.automountd.8;, &man.autounmountd.8;
und &man.auto.master.5;.</para>
</sect2>
</sect1>
<sect1 xml:id="network-nis">
<!--
<info>
<authorgroup>
<author><personname><firstname>Bill</firstname><surname>Swingle</surname></personname><contrib>Beigetragen von </contrib></author>
</authorgroup>
<authorgroup>
<author><personname><firstname>Eric</firstname><surname>Ogren</surname></personname><contrib>Erweitert von </contrib></author>
<author><personname><firstname>Udo</firstname><surname>Erdelhoff</surname></personname></author>
</authorgroup>
</info>
-->
<title>Network Information System (<acronym>NIS</acronym>)</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>
<indexterm>
<primary>yellow pages</primary>
<see>NIS</see>
</indexterm>
<para>Das Network Information System (<acronym>NIS</acronym>)
wurde entwickelt, um &unix;-Systeme zentral verwalten zu
können. Dazu zählen beispielsweise &solaris;, HP-UX, &aix;,
&linux;, NetBSD, OpenBSD und &os;. <acronym>NIS</acronym> war
ursprünglich als <emphasis>Yellow Pages</emphasis> bekannt,
aus markenrechtlichen Gründen wurde der Name aber geändert.
Dies ist der Grund, warum <acronym>NIS</acronym>-Kommandos mit
<literal>yp</literal> beginnen.</para>
<indexterm>
<primary>NIS</primary>
<secondary>Domänen</secondary>
</indexterm>
<para>Bei <acronym>NIS</acronym> handelt es sich um ein
<acronym>RPC</acronym>-basiertes Client/Server-System. Eine
Gruppe von Rechnern greift dabei innerhalb einer
<acronym>NIS</acronym>-Domäne auf gemeinsame
Konfigurationsdateien zu. Dies erlaubt es einem
Systemadministrator, <acronym>NIS</acronym>-Clients mit
minimalem Aufwand einzurichten, sowie Änderungen an der
Systemkonfiguration von einem zentralen Ort aus
durchzuführen.</para>
<para>&os; verwendet die Version 2 des
<acronym>NIS</acronym>-Protokolls.</para>
<sect2>
<title><acronym>NIS</acronym>-Begriffe und -Prozesse</title>
<para>Tabelle 30.1 fasst die Begriffe und Anwenderprozesse
zusammen, die von <acronym>NIS</acronym> verwendet
werden:</para>
<indexterm>
<primary><application>rpcbind</application></primary>
</indexterm>
<table frame="none" pgwide="1">
<title><acronym>NIS</acronym> Begriffe</title>
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="3*"/>
<thead>
<row>
<entry>Begriff</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><acronym>NIS</acronym>-Domänenname</entry>
<entry><acronym>NIS</acronym>-Masterserver und Clients
benutzen einen gemeinsamen
<acronym>NIS</acronym>-Domänennamen. In der Regel hat
dieser Name nichts mit <acronym>DNS</acronym> zu
tun.</entry>
</row>
<row>
<entry>&man.rpcbind.8;</entry>
<entry>Dieser Dienst aktiviert <acronym>RPC</acronym>
und muss gestartet sein, damit ein
<acronym>NIS</acronym>-Server oder -Client ausgeführt
werden kann.</entry>
</row>
<row>
<entry>&man.ypbind.8;</entry>
<entry>Dieser Dienst <quote>bindet</quote> einen
<acronym>NIS</acronym>-Client an seinen
<acronym>NIS</acronym>-Server. Der Client bezieht den
<acronym>NIS</acronym>-Domänennamen vom System und
stellt über das <acronym>RPC</acronym>-Protokoll eine
Verbindung zum <acronym>NIS</acronym>-Server her.
<application>ypbind</application> ist der zentrale
Bestandteil der Client-Server-Kommunikation in einer
<acronym>NIS</acronym>-Umgebung. Wird der Dienst
auf einem Client beendet, ist dieser nicht mehr in der
Lage, auf den <acronym>NIS</acronym>-Server
zuzugreifen.</entry>
</row>
<row>
<entry>&man.ypserv.8;</entry>
<entry>Dies ist der Prozess für den
<acronym>NIS</acronym>-Server. Wenn dieser Dienst
nicht mehr läuft, kann der Server nicht mehr auf
<acronym>NIS</acronym>-Anforderungen reagieren. Wenn
ein Slaveserver existiert, kann dieser als Ersatz
fungieren. Einige NIS-Systeme (allerdings nicht das
von &os;) versuchen allerdings erst gar nicht, sich
mit einem anderen Server zu verbinden, wenn der
Masterserver nicht mehr reagiert. Die einzige Lösung
besteht darin, den Serverprozess oder den
<application>ypbind</application>-Prozess auf dem
Client neu zu starten.</entry>
</row>
<row>
<entry>&man.rpc.yppasswdd.8;</entry>
<entry>Dieser Prozess läuft nur auf dem
<acronym>NIS</acronym>-Masterserver. Es handelt sich
um einen Daemonprozess, der es
<acronym>NIS</acronym>-Clients ermöglicht, ihre
<acronym>NIS</acronym>-Passwörter zu ändern. Wenn
dieser Daemon nicht läuft, müssen sich die Benutzer am
<acronym>NIS</acronym>-Masterserver anmelden und ihre
Passwörter dort ändern.</entry>
</row>
</tbody>
</tgroup>
</table>
<!-- XXX Missing: rpc.ypxfrd (not important, though) May only run
on the master -->
</sect2>
<sect2>
<title>Arten von NIS-Rechnern</title>
<indexterm>
<primary>NIS</primary>
<secondary>Masterserver</secondary>
</indexterm>
<indexterm>
<primary>NIS</primary>
<secondary>Slaveserver</secondary>
</indexterm>
<indexterm>
<primary>NIS</primary>
<secondary>Client</secondary>
</indexterm>
<itemizedlist>
<listitem>
<para><acronym>NIS</acronym>-Masterserver</para>
<para>Dieser Server dient als zentraler Speicherort für
Rechnerkonfigurationen. Zudem verwaltet er die
maßgebliche Kopie, der von den
<acronym>NIS</acronym>-Clients gemeinsam verwendeten
Dateien. <filename>passwd</filename>,
<filename>group</filename>, sowie verschiedene andere von
den Clients verwendete Dateien existieren auf dem
Masterserver. Obwohl ein Rechner auch für mehrere
<acronym>NIS</acronym>-Domänen als Masterserver fungieren
kann, wird diese Art von Konfiguration nicht behandelt, da
sich dieser Abschnitt auf eine relativ kleine
<acronym>NIS</acronym>-Umgebung konzentriert.</para>
</listitem>
<listitem>
<para><acronym>NIS</acronym>-Slaveserver</para>
<para><acronym>NIS</acronym>-Slaveserver verwalten Kopien
der Daten des <acronym>NIS</acronym>-Masterservers um
Redundanz zu bieten. Zudem entlasten Slaveserver den
Masterserver: <acronym>NIS</acronym>-Clients verbinden
sich immer mit dem <acronym>NIS</acronym>-Server, welcher
zuerst reagiert. Dieser Server kann auch ein Slaveserver
sein.</para>
</listitem>
<listitem>
<para><acronym>NIS</acronym>-Clients</para>
<para><acronym>NIS</acronym>-Clients identifizieren sich
gegenüber dem <acronym>NIS</acronym>-Server während der
Anmeldung.</para>
</listitem>
</itemizedlist>
<para>Mit <acronym>NIS</acronym> können Informationen aus
verschiedenen Dateien von mehreren Rechnern gemeinsam
verwendet werden. <filename>master.passwd</filename>,
<filename>group</filename>, und <filename>hosts</filename>
werden oft gemeinsam über <acronym>NIS</acronym> verwendet.
Immer, wenn ein Prozess auf einem Client auf Informationen
zugreifen will, die normalerweise in lokalen Dateien vorhanden
wären, wird stattdessen eine Anfrage an den
<acronym>NIS</acronym>-Server gestellt, an den der Client
gebunden ist.</para>
</sect2>
<sect2>
<title>Planung</title>
<para>Dieser Abschnitt beschreibt eine einfache
<acronym>NIS</acronym>-Umgebung, welche aus 15 &os;-Maschinen
besteht, für die keine zentrale Verwaltung existiert. Jeder
Rechner hat also eine eigene Version von
<filename>/etc/passwd</filename> und
<filename>/etc/master.passwd</filename>. Diese Dateien werden
manuell synchron gehalten; wird ein neuer Benutzer
angelegt, so muss dies auf allen fünfzehn Rechnern manuell
erledigt werden.</para>
<para>In Zukunft soll die Konfiguration wie folgt
aussehen:</para>
<informaltable frame="none" pgwide="1">
<tgroup cols="3">
<thead>
<row>
<entry>Rechnername</entry>
<entry><acronym>IP</acronym>-Adresse</entry>
<entry>Rechneraufgabe</entry>
</row>
</thead>
<tbody>
<row>
<entry><systemitem>ellington</systemitem></entry>
<entry><systemitem
class="ipaddress">10.0.0.2</systemitem></entry>
<entry><acronym>NIS</acronym>-Master</entry>
</row>
<row>
<entry><systemitem>coltrane</systemitem></entry>
<entry><systemitem
class="ipaddress">10.0.0.3</systemitem></entry>
<entry><acronym>NIS</acronym>-Slave</entry>
</row>
<row>
<entry><systemitem>basie</systemitem></entry>
<entry><systemitem
class="ipaddress">10.0.0.4</systemitem></entry>
<entry>Workstation der Fakultät</entry>
</row>
<row>
<entry><systemitem>bird</systemitem></entry>
<entry><systemitem
class="ipaddress">10.0.0.5</systemitem></entry>
<entry>Clientrechner</entry>
</row>
<row>
<entry><systemitem>cli[1-11]</systemitem></entry>
<entry><systemitem
class="ipaddress">10.0.0.[6-17]</systemitem></entry>
<entry>Verschiedene andere Clients</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Wenn erstmalig ein NIS-Schema eingerichtet wird, sollte es
im Voraus sorgfältig geplant werden. Unabhängig von der Größe
des Netzwerks müssen einige Entscheidungen im Rahmen des
Planungsprozesses getroffen werden.</para>
<sect3>
<title>Einen <acronym>NIS</acronym>-Domänennamen
wählen</title>
<indexterm>
<primary>NIS</primary>
<secondary>Domänenname</secondary>
</indexterm>
<para>Wenn ein Client Informationen anfordert, ist in dieser
Anforderung der Name der <acronym>NIS</acronym>-Domäne
enthalten. Dadurch weiß jeder Server im Netzwerk, auf
welche Anforderung er antworten muss. Stellen Sie sich
den <acronym>NIS</acronym>-Domänennamen als einen Namen
einer Gruppe von Rechnern vor.</para>
<para>Manchmal wird der Name der Internetdomäne auch für die
<acronym>NIS</acronym>-Domäne verwendet. Dies ist
allerdings nicht empfehlenswert, da es bei der Behebung von
Problemen verwirrend sein kann. Der Name der
<acronym>NIS</acronym>-Domäne sollte innerhalb des
Netzwerks eindeutig sein. Hilfreich ist es, wenn der Name
die Gruppe der in ihr zusammengefassten Rechner beschreibt.
Die Kunstabteilung von Acme Inc. hätte daher vielleicht die
<acronym>NIS</acronym>-Domäne <quote>acme-art</quote>. Für
dieses Beispiel wird der Name <literal>test-domain</literal>
verwendet.</para>
<para>Es gibt jedoch auch Betriebssysteme, die als
<acronym>NIS</acronym>-Domänennamen den Namen der
Internetdomäne verwenden. Wenn dies für einen oder
mehrere Rechner des Netzwerks zutrifft,
<emphasis>muss</emphasis> der Name der Internetdomäne als
<acronym>NIS</acronym>-Domänennamen verwendet werden.</para>
</sect3>
<sect3>
<title>Anforderungen an den Server</title>
<para>Bei der Wahl des <acronym>NIS</acronym>-Servers müssen
einige Dinge beachtet werden. Da die
<acronym>NIS</acronym>-Clients auf die Verfügbarkeit des
Servers angewiesen sind, sollten Sie einen Rechner wählen,
der nicht regelmäßig neu gestartet werden muss. Der
<acronym>NIS</acronym>-Server sollte idealerweise ein
alleinstehender Rechner sein, dessen einzige Aufgabe es
ist, als <acronym>NIS</acronym>-Server zu dienen. Wenn
das Netzwerk nicht zu stark ausgelastet ist, ist es auch
möglich, den <acronym>NIS</acronym>-Server als weiteren
Dienst auf einem anderen Rechner laufen zu lassen. Wenn
jedoch ein <acronym>NIS</acronym>-Server ausfällt, wirkt
sich dies negativ auf <emphasis>alle</emphasis>
<acronym>NIS</acronym>-Clients aus.</para>
</sect3>
</sect2>
<sect2>
<title>Einen <acronym>NIS</acronym>-Masterserver
konfigurieren</title>
<para>Die verbindlichen Kopien aller
<acronym>NIS</acronym>-Dateien befinden sich auf dem
Masterserver. Die Datenbanken, in denen die Informationen
gespeichert sind, bezeichnet man als
<acronym>NIS</acronym>-Maps. Unter &os; werden diese Maps
unter <filename>/var/yp/[domainname]</filename> gespeichert,
wobei <filename>[domainname]</filename> der Name der
<acronym>NIS</acronym>-Domäne ist. Da ein
<acronym>NIS</acronym>-Server mehrere Domänen verwalten
kann, können auch mehrere Verzeichnisse vorhanden sein.
Jede Domäne verfügt über ein eigenes Verzeichnis sowie einen
eigenen, von anderen Domänen unabhängigen Satz von
<acronym>NIS</acronym>-Maps.</para>
<para><acronym>NIS</acronym>-Master- und Slaveserver
verwenden &man.ypserv.8;, um <acronym>NIS</acronym>-Anfragen
zu bearbeiten. Dieser Daemon ist für eingehende Anfragen
der <acronym>NIS</acronym>-Clients verantwortlich. Er
ermittelt aus der angeforderten Domäne und Map einen Pfad zur
entsprechenden Datenbank und sendet die angeforderten Daten
von der Datenbank zum Client.</para>
<indexterm>
<primary>NIS</primary>
<secondary>Serverkonfiguration</secondary>
</indexterm>
<para>Abhängig von den Anforderungen ist die Einrichtung eines
<acronym>NIS</acronym>-Masterservers relativ einfach, da
<acronym>NIS</acronym> von &os; bereits in der
Standardkonfiguration unterstützt wird. Es kann durch
folgende Zeilen in <filename>/etc/rc.conf</filename> aktiviert
werden:</para>
<programlisting>nisdomainname="test-domain">>>>>>><co xml:id="network-nis-co-domainname" />
nis_server_enable="YES">>>>>>>>><co xml:id="network-nis-co-server" />
nis_yppasswdd_enable="YES">>>>>><co xml:id="network-nis-co-yppasswdd" /></programlisting>
<calloutlist>
<callout arearefs="network-nis-co-domainname">
<para>Diese Zeile setzt den
<acronym>NIS</acronym>-Domänennamen auf
<literal>test-domain</literal>.</para>
</callout>
<callout arearefs="network-nis-co-server">
<para>Dadurch werden die
<acronym>NIS</acronym>-Serverprozesse beim Systemstart
automatisch ausgeführt.</para>
</callout>
<callout arearefs="network-nis-co-yppasswdd">
<para>Durch diese Zeile wird der
&man.rpc.yppasswdd.8;-Daemon aktiviert, der die
Änderung von <acronym>NIS</acronym>-Passwörtern von
einem Client aus ermöglicht.</para>
</callout>
</calloutlist>
<para>Wird <application>ypserv</application> in einer
Multi-Serverdomäne verwendet, in der
<acronym>NIS</acronym>-Server gleichzeitig als
<acronym>NIS</acronym>-Clients arbeiten, ist es eine gute
Idee, diese Server zu zwingen, sich an sich selbst zu binden.
Damit wird verhindert, dass Bindeanforderungen gesendet werden
und sich die Server gegenseitig binden. Sonst könnten
seltsame Fehler auftreten, wenn ein Server ausfällt, auf den
andere Server angewiesen sind. Letztlich werden alle Clients
einen Timeout melden, und versuchen, sich an andere Server zu
binden. Die dadurch entstehende Verzögerung kann beträchtlich
sein. Außerdem kann der Fehler erneut auftreten, da sich die
Server wiederum aneinander binden könnten.</para>
<para>Server, die auch als Client arbeiten, können durch das
Hinzufügen der folgenden Zeilen in
<filename>/etc/rc.conf</filename> zu gezwungen werden, sich an
einen bestimmten Server zu binden:</para>
<programlisting>nis_client_enable="YES" # run client stuff as well
nis_client_flags="-S <replaceable>NIS domain</replaceable>,<replaceable>server</replaceable>"</programlisting>
<para>Nachdem die Parameter konfiguriert wurden, muss noch
<command>/etc/netstart</command> ausgeführt werden, um alles
entsprechend den Vorgaben in <filename>/etc/rc.conf</filename>
einzurichten. Bevor die <acronym>NIS</acronym>-Maps
einrichtet werden können, muss der &man.ypserv.8;-Daemon
manuell gestartet werden:</para>
<screen>&prompt.root; <userinput>service ypserv start</userinput></screen>
<sect3>
<title>Die <acronym>NIS</acronym>-Maps
initialisieren</title>
<indexterm>
<primary>NIS</primary>
<secondary>maps</secondary>
</indexterm>
<para><acronym>NIS</acronym>-Maps Sie werden am
<acronym>NIS</acronym>-Masterserver aus den
Konfigurationsdateien unter <filename>/etc</filename>
erzeugt. Einzige Ausnahme:
<filename>/etc/master.passwd</filename>. Dies verhindert,
dass die Passwörter für <systemitem
class="username">root</systemitem>- oder andere
Administratorkonten an alle Server in der
<acronym>NIS</acronym>-Domäne verteilt werden. Deshalb
werden die primären Passwort-Dateien konfiguriert, bevor die
<acronym>NIS</acronym>-Maps initialisiert werden:</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>Es ist ratsam, alle Einträge für Systemkonten sowie
Benutzerkonten, die nicht an die
<acronym>NIS</acronym>-Clients weitergegeben werden sollen,
wie beispielsweise <systemitem
class="username">root</systemitem> und weitere
administrative Konten, zu entfernen.</para>
<note>
<para>Stellen Sie sicher, dass
<filename>/var/yp/master.passwd</filename> weder von der
Gruppe noch von der Welt gelesen werden kann, indem Sie
Zugriffsmodus auf <literal>600</literal>
einstellen.</para>
</note>
<para>Nun können die <acronym>NIS</acronym>-Maps
initialisiert werden. &os; verwendet dafür das Skript
&man.ypinit.8;. Geben Sie <option>-m</option> und den
<acronym>NIS</acronym>-Domänennamen an, wenn Sie
<acronym>NIS</acronym>-Maps für den Masterserver
erzeugen:</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 not, 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>
[..output from map generation..]
NIS Map update completed.
ellington has been setup as an YP master server without any errors.</screen>
<para>Dadurch erzeugt <command>ypinit</command>
<filename>/var/yp/Makefile</filename> aus
<filename>/var/yp/Makefile.dist</filename>. Diese Datei
geht in der Voreinstellung davon aus, dass in einer
<acronym>NIS</acronym>-Umgebung mit nur einem Server
gearbeitet wird und dass alle Clients unter &os; laufen. Da
<literal>test-domain</literal> aber auch über einen
Slaveserver verfügt, muss
<filename>/var/yp/Makefile</filename> entsprechend angepasst
werden, sodass es mit einem Kommentar (<literal>#</literal>)
beginnt:</para>
<programlisting>NOPUSH = "True"</programlisting>
</sect3>
<sect3>
<title>Neue Benutzer hinzufügen</title>
<para>Jedes Mal, wenn ein neuer Benutzer angelegt wird,
muss er am <acronym>NIS</acronym>-Masterserver hinzugefügt
und die <acronym>NIS</acronym>-Maps anschließend neu
erzeugt werden. Wird dieser Punkt vergessen, kann sich
der neue Benutzer <emphasis>nur</emphasis> am
<acronym>NIS</acronym>-Masterserver anmelden. Um
beispielsweise den neuen Benutzer <systemitem
class="username">jsmith</systemitem> zur Domäne
<literal>test-domain</literal> hinzufügen wollen, müssen
folgende Kommandos auf dem Masterserver ausgeführt
werden:</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>Statt <command>pw useradd jsmith</command> kann auch
<command>adduser jsmith</command> verwendet werden.</para>
</sect3>
</sect2>
<sect2>
<title>Einen <acronym>NIS</acronym>-Slaveserver
einrichten</title>
<indexterm>
<primary>NIS</primary>
<secondary>Slaveserver</secondary>
</indexterm>
<para>Um einen <acronym>NIS</acronym>-Slaveserver einzurichten,
melden Sie sich am Slaveserver an und bearbeiten Sie
<filename>/etc/rc.conf</filename> analog zum Masterserver.
Erzeugen Sie aber keine <acronym>NIS</acronym>-Maps, da diese
bereits auf dem Server vorhanden sind. Wenn
<command>ypinit</command> auf dem Slaveserver ausgeführt wird,
benutzen Sie <option>-s</option> (Slave) statt
<option>-m</option> (Master). Diese Option benötigt den Namen
des <acronym>NIS</acronym>-Masterservers und den Domänennamen,
wie in diesem Beispiel zu sehen:</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 not, 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.
Remember to update map ypservers on ellington.</screen>
<para>Hierbei wird auf dem Slaveserver ein Verzeichnis namens
<filename>/var/yp/test-domain</filename> erstellt, welches
Kopien der <acronym>NIS</acronym>-Masterserver-Maps enthält.
Durch hinzufügen der folgenden Zeilen in
<filename>/etc/crontab</filename> wird der Slaveserver
angewiesen, seine Maps mit den Maps des Masterservers zu
synchronisieren:</para>
<programlisting>20 * * * * root /usr/libexec/ypxfr passwd.byname
21 * * * * root /usr/libexec/ypxfr passwd.byuid</programlisting>
<para>Diese Einträge sind nicht zwingend notwendig, da der
Masterserver automatisch versucht, alle Änderungen seiner
<acronym>NIS</acronym>-Maps an seine Slaveserver
weiterzugeben. Da Passwortinformationen aber auch für nur vom
Slaveserver abhängige Systeme vital sind, ist es eine gute
Idee, diese Aktualisierungen zu erzwingen. Besonders wichtig
ist dies in stark ausgelasteten Netzen, in denen
Map-Aktualisierungen unvollständig sein könnten.</para>
<para>Um die Konfiguration abzuschließen, führen Sie
<command>/etc/netstart</command> auf dem Slaveserver aus, um
die <acronym>NIS</acronym>-Dienste erneut zu starten.</para>
</sect2>
<sect2>
<title>Einen <acronym>NIS</acronym>-Client einrichten</title>
<para>Ein <acronym>NIS</acronym>-Client
<literal>bindet</literal> sich unter Verwendung von
<command>ypbind</command> an einen
<acronym>NIS</acronym>-Server. Dieser Daemon sendet
RPC-Anfragen auf dem lokalen Netzwerk. Diese Anfragen legen
den Namen der Domäne fest, die auf dem Client konfiguriert
ist. Wenn der Server der entsprechenden Domäne eine solche
Anforderung erhält, schickt er eine Antwort an
<command>ypbind</command>, das wiederum die Adresse des
Servers speichert. Wenn mehrere Server verfügbar sind,
verwendet der Client die erste erhaltene Adresse und richtet
alle Anfragen an genau diesen Server.
<command>ypbind</command> <quote>pingt</quote> den Server
gelegentlich an, um sicherzustellen, dass der Server
funktioniert. Antwortet der Server innerhalb eines bestimmten
Zeitraums nicht (Timeout), markiert <command>ypbind</command>
die Domäne als ungebunden und beginnt erneut,
<acronym>RPC</acronym>s über das Netzwerk zu verteilen, um
einen anderen Server zu finden.</para>
<indexterm>
<primary>NIS</primary>
<secondary>Client konfigurieren</secondary>
</indexterm>
<para>Einen &os;-Rechner als <acronym>NIS</acronym>-Client
einrichten:</para>
<procedure>
<step>
<para>Fügen Sie folgende Zeilen in
<filename>/etc/rc.conf</filename> ein, um den
<acronym>NIS</acronym>-Domänennamen festzulegen, und
um &man.ypbind.8; bei der Initialisierung des Netzwerks zu
starten:</para>
<programlisting>nisdomainname="test-domain"
nis_client_enable="YES"</programlisting>
</step>
<step>
<para>Um alle Passworteinträge des
<acronym>NIS</acronym>-Servers zu importieren, löschen Sie
alle Benutzerkonten in
<filename>/etc/master.passwd</filename> mit
<command>vipw</command>. Denken Sie daran, zumindest ein
lokales Benutzerkonto zu behalten. Dieses Konto sollte
außerdem Mitglied der Gruppe <systemitem
class="groupname">wheel</systemitem> sein. Wenn es mit
<acronym>NIS</acronym> Probleme gibt, können Sie diesen
Zugang verwenden, um sich als Superuser anzumelden und das
Problem zu beheben. Bevor Sie die Änderungen speichern,
fügen Sie folgende Zeile am Ende der Datei hinzu:</para>
<programlisting>+:::::::::</programlisting>
<para>Diese Zeile legt für alle gültigen Benutzerkonten der
<acronym>NIS</acronym>-Server-Maps einen Zugang an. Es
gibt verschiedene Wege, den <acronym>NIS</acronym>-Client
durch Änderung dieser Zeile zu konfigurieren. Eine
Methode wird in <xref linkend="network-netgroups"/>
beschrieben. Weitere detaillierte Informationen finden
Sie im Buch <literal>Managing NFS and NIS</literal> vom
O'Reilly Verlag.</para>
</step>
<step>
<para>Um alle möglichen Gruppeneinträge vom
<acronym>NIS</acronym>-Server zu importieren, fügen Sie
folgende Zeile in <filename>/etc/group</filename>
ein:</para>
<programlisting>+:*::</programlisting>
</step>
</procedure>
<para>Um den <acronym>NIS</acronym>-Client direkt zu starten,
führen Sie als Superuser die folgenden Befehle aus:</para>
<screen>&prompt.root; <userinput>/etc/netstart</userinput>
&prompt.root; <userinput>service ypbind start</userinput></screen>
<para>Danach sollte bei der Eingabe von
<command>ypcat passwd</command> auf dem Client die
<literal>passwd-Map</literal> des
<acronym>NIS</acronym>-Servers angezeigt werden.</para>
</sect2>
<sect2>
<title>Sicherheit unter <acronym>NIS</acronym></title>
<para>Da <acronym>RPC</acronym> ein Broadcast-basierter Dienst
ist, kann jedes System innerhalb der Domäne mittels
<application>ypbind</application> den Inhalt der
<acronym>NIS</acronym>-Maps abrufen. Um nicht autorisierte
Transaktionen zu verhindern, unterstützt &man.ypserv.8; eine
Funktion namens <quote>securenets</quote>, durch die der
Zugriff auf bestimmte Rechner beschränkt werden kann. In der
Voreinstellung sind diese Informationen in
<filename>/var/yp/securenets</filename> gespeichert, es sei
denn, &man.ypserv.8; wurde mit der Option <option>-p</option>
und einem alternativen Pfad gestartet. Diese Datei enthält
Einträge, die aus einer Netzwerkadresse und einer Netzmaske
bestehen. Kommentarzeilen beginnen mit <quote>#</quote>.
<filename>/var/yp/securnets</filename> könnte beispielsweise
so aussehen:</para>
<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>Wenn &man.ypserv.8; eine Anforderung von einer zu diesen
Regeln passenden Adresse erhält, wird die Anforderung
bearbeitet. Gibt es keine passende Regel, wird die
Anforderung ignoriert und eine Warnmeldung aufgezeichnet.
Wenn <filename>securenets</filename> nicht existiert, erlaubt
<command>ypserv</command> Verbindungen von jedem
Rechner.</para>
<para><xref linkend="tcpwrappers"/> beschreibt eine alternative
Methode zur Zugriffskontrolle. Obwohl beide Methoden einige
Sicherheit gewähren, sind sie anfällig für
<quote><acronym>IP</acronym>-Spoofing</quote>-Angriffe. Der
<acronym>NIS</acronym>-Verkehr sollte daher von einer Firewall
blockiert werden.</para>
<para>Server, die <filename>securenets</filename> verwenden,
können Schwierigkeiten bei der Anmeldung von
<acronym>NIS</acronym>-Clients haben, die ein veraltetes
TCP/IP-Subsystem besitzen. Einige dieser TCP/IP-Subsysteme
setzen alle Rechnerbits auf Null, wenn sie einen
<literal>Broadcast</literal> durchführen oder können die
Subnetzmaske nicht auslesen, wenn sie die Broadcast-Adresse
berechnen. Einige Probleme können durch Änderungen der
Clientkonfiguration behoben werden. Andere hingegen lassen
sich nur durch das Entfernen des betreffenden Rechners aus dem
Netzwerk oder den Verzicht auf <filename>securenets</filename>
umgehen.</para>
<indexterm>
<primary>TCP-Wrapper</primary>
</indexterm>
<para>Die Verwendung der <application>TCP-Wrapper</application>
verlangsamt die Reaktion des <acronym>NIS</acronym>-Servers.
Diese zusätzliche Reaktionszeit kann in Clientprogrammen zu
Timeouts führen. Dies vor allem in Netzwerken, die stark
ausgelastet sind, oder nur über langsame
<acronym>NIS</acronym>-Server verfügen. Wenn ein oder mehrere
Clients dieses Problem aufweisen, sollten Sie die betreffenden
Clients in <acronym>NIS</acronym>-Slaveserver umwandeln, und
diese an sich selbst binden.</para>
<sect3>
<title>Bestimmte Benutzer an der Anmeldung hindern</title>
<para>In diesem Beispiel gibt es innerhalb der
<acronym>NIS</acronym>-Domäne den Rechner
<systemitem>basie</systemitem>, der nur für Mitarbeiter der
Fakultät bestimmt ist. Die <filename>passwd</filename>
Datenbank des <acronym>NIS</acronym>-Masterservers enthält
Benutzerkonten sowohl für Fakultätsmitarbeiter als auch für
Studenten. Dieser Abschnitt beschreibt, wie Sie den
Mitarbeitern der Fakultät die Anmeldung am System
ermöglichen, während den Studenten die Anmeldung verweigert
wird.</para>
<para>Es gibt eine Möglichkeit, bestimmte Benutzer an der
Anmeldung an einem bestimmten Rechner zu hindern, selbst
wenn diese in der <acronym>NIS</acronym>-Datenbank vorhanden
sind. Dazu kann mit <command>vipw</command> der Eintrag
<literal>-<replaceable>Benutzername</replaceable></literal>
und die richtige Anzahl von Doppelpunkten an das Ende von
<filename>/etc/master.passwd</filename> gesetzt werden,
wobei <replaceable>Benutzername</replaceable> der zu
blockierende Benutzername ist. Die Zeile mit dem geblockten
Benutzer muss dabei vor der <literal>+</literal> Zeile, für
zugelassene Benutzer stehen. In diesem Beispiel wird die
Anmeldung für den Benutzer <systemitem
class="username">bill</systemitem> am Rechner
<systemitem>basie</systemitem> blockiert:</para>
<screen>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 &amp;:/:/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>
</sect3>
</sect2>
<sect2 xml:id="network-netgroups">
<!--
<info><title>Netzgruppen verwenden</title>
<authorgroup>
<author><personname><firstname>Udo</firstname><surname>Erdelhoff</surname></personname><contrib>Beigetragen von </contrib></author>
</authorgroup>
</info>
-->
<title>Netzgruppen verwenden</title>
<indexterm><primary>Netzgruppen</primary></indexterm>
<para>Bestimmten Benutzern die Anmeldung an einzelnen Systemen
zu verweigern, kann in großen Netzwerken schnell
unübersichtlich werden. Dadurch verlieren Sie den
Hauptvorteil von <acronym>NIS</acronym>: die
<emphasis>zentrale</emphasis> Verwaltung.</para>
<para>Netzgruppen wurden entwickelt, um große, komplexe
Netzwerke mit Hunderten Benutzern und Rechnern zu verwalten.
Ihre Aufgabe ist vergleichbar mit &unix; Gruppen. Die
Hauptunterschiede sind das Fehlen einer numerischen ID sowie
die Möglichkeit, Netzgruppen zu definieren, die sowohl
Benutzer als auch andere Netzgruppen enthalten.</para>
<para>Um das Beispiel in diesem Kapitel fortzuführen, wird die
<acronym>NIS</acronym>-Domäne um zusätzliche Benutzer und
Rechner erweitert:</para>
<table frame="none" pgwide="1">
<title>Zusätzliche Benutzer</title>
<tgroup cols="2">
<thead>
<row>
<entry>Benutzername(n)</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<entry><systemitem class="username">alpha</systemitem>,
<systemitem class="username">beta</systemitem></entry>
<entry>Mitarbeiter der IT-Abteilung</entry>
</row>
<row>
<entry><systemitem
class="username">charlie</systemitem>,
<systemitem
class="username">delta</systemitem></entry>
<entry>Lehrlinge der IT-Abteilung</entry>
</row>
<row>
<entry><systemitem class="username">echo</systemitem>,
<systemitem class="username">foxtrott</systemitem>,
<systemitem
class="username">golf</systemitem>, ...</entry>
<entry>Mitarbeiter</entry>
</row>
<row>
<entry><systemitem class="username">able</systemitem>,
<systemitem
class="username">baker</systemitem>, ...</entry>
<entry>Praktikanten</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame="none" pgwide="1">
<title>Zusätzliche Rechner</title>
<tgroup cols="2">
<thead>
<row>
<entry>Rechnername(n)</entry>
<entry>Beschreibung</entry>
</row>
</thead>
<tbody>
<row>
<!-- Names taken from "Good Omens" by Neil Gaiman and Terry
Pratchett. Many thanks for a brilliant book. -->
<entry><systemitem>war</systemitem>,
<systemitem>death</systemitem>,
<systemitem>famine</systemitem>,
<systemitem>pollution</systemitem></entry>
<entry>Nur Mitarbeiter der IT-Abteilung dürfen sich an
diesen Rechnern anmelden.</entry>
</row>
<row>
<!-- gluttony was omitted because it was too fat -->
<entry><systemitem>pride</systemitem>,
<systemitem>greed</systemitem>,
<systemitem>envy</systemitem>,
<systemitem>wrath</systemitem>,
<systemitem>lust</systemitem>,
<systemitem>sloth</systemitem></entry>
<entry>Nur Mitarbeiter und Lehrlinge der IT-Abteilung
dürfen sich auf diesen Rechnern anmelden.</entry>
</row>
<row>
<entry><systemitem>one</systemitem>,
<systemitem>two</systemitem>,
<systemitem>three</systemitem>,
<systemitem>four</systemitem>, ...</entry>
<entry>Gewöhnliche Arbeitsrechner für
Mitarbeiter.</entry>
</row>
<row>
<entry><systemitem>trashcan</systemitem></entry>
<entry>Ein sehr alter Rechner ohne kritische Daten.
Sogar Praktikanten dürfen diesen Rechner
verwenden.</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Bei der Verwendung von Netzgruppen wird jeder Benutzer
einer oder mehreren Netzgruppen zugewiesen und die Anmeldung
wird dann für die Netzgruppe erlaubt oder verwehrt. Wenn ein
neuer Rechner hinzugefügt wird, müssen die
Zugangsbeschränkungen nur für die Netzgruppen festgelegt
werden. Wird ein neuer Benutzer angelegt, muss er einer oder
mehreren Netzgruppen zugewiesen werden. Wenn die Einrichtung
von <acronym>NIS</acronym> sorgfältig geplant wurde, muss nur
noch eine zentrale Konfigurationsdatei bearbeitet werden, um
den Zugriff auf bestimmte Rechner zu erlauben oder zu
verbieten.</para>
<para>Dieses Beispiel erstellt vier Netzgruppen:
IT-Mitarbeiter, IT-Lehrlinge, normale Mitarbeiter sowie
Praktikanten:</para>
<programlisting>IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
USERS (,echo,test-domain) (,foxtrott,test-domain) \
(,golf,test-domain)
INTERNS (,able,test-domain) (,baker,test-domain)</programlisting>
<para>Jede Zeile konfiguriert eine Netzgruppe. Die erste Spalte
der Zeile bezeichnet den Namen der Netzgruppe. Die Einträge
in den Klammern stehen entweder für eine Gruppe von einem oder
mehreren Benutzern, oder für den Namen einer weiteren
Netzgruppe. Wenn ein Benutzer angegeben wird, haben die drei
Felder in der Klammer folgende Bedeutung:</para>
<orderedlist>
<listitem>
<para>Der Name des Rechner(s), auf dem die weiteren Felder
für den Benutzer gültig sind. Wird kein Rechnername
festgelegt, ist der Eintrag auf allen Rechnern
gültig.</para>
</listitem>
<listitem>
<para>Der Name des Benutzerkontos, der zu dieser Netzgruppe
gehört.</para>
</listitem>
<listitem>
<para>Die <acronym>NIS</acronym>-Domäne für das
Benutzerkonto. Benutzerkonten können von anderen
<acronym>NIS</acronym>-Domänen in eine Netzgruppe
importiert werden.</para>
</listitem>
</orderedlist>
<para>Wenn eine Gruppe mehrere Benutzer enthält, müssen diese
durch Leerzeichen getrennt werden. Darüber hinaus kann jedes
Feld Wildcards enthalten. Weitere Einzelheiten finden Sie in
&man.netgroup.5;.</para>
<indexterm><primary>Netzgruppen</primary></indexterm>
<para>Netzgruppennamen sollten nicht länger als 8 Zeichen sein.
Es wird zwischen Groß- und Kleinschreibung unterschieden. Die
Verwendung von Großbuchstaben für Netzgruppennamen ermöglicht
eine leichte Unterscheidung zwischen Benutzern, Rechnern und
Netzgruppen.</para>
<para>Einige <acronym>NIS</acronym>-Clients (dies gilt nicht für
&os;) können keine Netzgruppen mit mehr als 15 Einträgen
verwalten. Diese Grenze kann umgangen werden, indem mehrere
Subnetzgruppen mit weniger als fünfzehn Benutzern angelegt
werden und diese Subnetzgruppen wiederum in einer Netzgruppe
zusammengefasst wird, wie in diesem Beispiel zu sehen:</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>Wiederholen Sie diesen Vorgang, wenn mehr als 225 (15*15)
Benutzer in einer einzigen Netzgruppe existieren.</para>
<para>Die neue <acronym>NIS</acronym>-Map aktivieren und
verteilen:</para>
<screen>ellington&prompt.root; <userinput>cd /var/yp</userinput>
ellington&prompt.root; <userinput>make</userinput></screen>
<para>Dadurch werden die NIS-Maps <filename>netgroup</filename>,
<filename>netgroup.byhost</filename> und
<filename>netgroup.byuser</filename> erzeugt. Prüfen Sie die
Verfügbarkeit der neuen <acronym>NIS</acronym>-Maps mit
&man.ypcat.1;:</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>Die Ausgabe des ersten Befehls gibt den Inhalt von
<filename>/var/yp/netgroup</filename> wieder. Der zweite
Befehl erzeugt nur dann eine Ausgabe, wenn rechnerspezifische
Netzgruppen erzeugt wurden. Der dritte Befehl gibt die
Netzgruppen nach Benutzern sortiert aus.</para>
<para>Wenn Sie einen Client einrichten, verwenden Sie
&man.vipw.8; um den Namen der Netzgruppe anzugeben. Ersetzen
Sie beispielsweise auf dem Server namens
<systemitem>war</systemitem> die folgende Zeile:</para>
<programlisting>+:::::::::</programlisting>
<para>durch</para>
<programlisting>+@IT_EMP:::::::::</programlisting>
<para>ersetzt werden.</para>
<para>Diese Zeile legt fest, dass nur noch Benutzer der
Netzgruppe <literal>IT_EMP</literal> in die Passwortdatenbank
dieses Systems importiert werden. Nur diese Benutzer dürfen
sich an diesem Server anmelden.</para>
<para>Diese Konfiguration gilt auch für die
<literal>~</literal>-Funktion der Shell und für alle Routinen,
die auf Benutzernamen und numerische Benutzer-IDs zugreifen.
Oder anders formuliert,
<command>cd ~<replaceable>Benutzer</replaceable></command> ist
nicht möglich, <command>ls -l</command> zeigt die numerische
Benutzer-ID statt dem Benutzernamen und
<command>find . -user joe -print</command> erzeugt die
Fehlermeldung <errorname>No such user</errorname>. Um dieses
Problem zu beheben, müssen alle Benutzereinträge importiert
werden, ohne ihnen jedoch zu erlauben, sich am Server
anzumelden. Dies kann durch das Hinzufügen einer zusätzlichen
Zeile erreicht werden:</para>
<programlisting>+:::::::::/sbin/nologin</programlisting>
<para>Diese Zeile weist den Client an, alle Einträge zu
importieren, aber die Shell in diesen Einträgen durch
<filename>/sbin/nologin</filename> zu ersetzen.</para>
<para>Stellen Sie sicher, dass die zusätzliche Zeile
<emphasis>nach</emphasis> der Zeile
<literal>+@IT_EMP:::::::::</literal> eingetragen ist.
Andernfalls haben alle via <acronym>NIS</acronym>
importierten Benutzerkonten <filename>/sbin/nologin</filename>
als Loginshell und niemand wird sich mehr am System anmelden
können.</para>
<para>Um die weniger wichtigen Server zu konfigurieren, ersetzen
Sie den alten Eintrag <literal>+:::::::::</literal> auf den
Servern mit diesen Zeilen:</para>
<programlisting>+@IT_EMP:::::::::
+@IT_APP:::::::::
+:::::::::/sbin/nologin</programlisting>
<para>Die entsprechenden Zeilen für Arbeitsplätze lauten:</para>
<programlisting>+@IT_EMP:::::::::
+@USERS:::::::::
+:::::::::/sbin/nologin</programlisting>
<para><acronym>NIS</acronym> ist in der Lage, Netzgruppen aus
anderen Netzgruppen zu bilden. Dies kann nützlich sein, wenn
sich die Firmenpolitik ändert. Eine Möglichkeit ist die
Erzeugung rollenbasierter Netzgruppen. Sie könnten eine
Netzgruppe <literal>BIGSRV</literal> erzeugen, um den Zugang
zu den wichtigsten Servern zu beschränken, eine weitere Gruppe
<literal>SMALLSRV</literal> für die weniger wichtigen Server
und eine dritte Netzgruppe <literal>USERBOX</literal> für die
Arbeitsplatzrechner. Jede dieser Netzgruppen enthält die
Netzgruppen, die sich auf diesen Rechnern anmelden dürfen.
Die Einträge der Netzgruppen in der <acronym>NIS</acronym>-Map
sollten ähnlich den folgenden aussehen:</para>
<programlisting>BIGSRV IT_EMP IT_APP
SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERS</programlisting>
<para>Diese Methode funktioniert besonders gut, wenn Rechner in
Gruppen mit identischen Beschränkungen eingeteilt werden
können. Unglücklicherweise ist dies die Ausnahme und nicht
die Regel. Meistens wird die Möglichkeit zur
rechnerspezischen Zugangsbeschränkung benötigt.</para>
<para>Rechnerspezifische Netzgruppen sind eine weitere
Möglichkeit, um mit den oben beschriebenen Änderungen
umzugehen. In diesem Szenario enthält
<filename>/etc/master.passwd</filename> auf jedem Rechner zwei
mit <quote>+</quote> beginnende Zeilen. Die erste Zeile legt
die Netzgruppe mit den Benutzern fest, die sich auf diesem
Rechner anmelden dürfen. Die zweite Zeile weist allen anderen
Benutzern <filename>/sbin/nologin</filename> als Shell zu.
Verwenden Sie auch hier (analog zu den Netzgruppen)
Großbuchstaben für die Rechnernamen:</para>
<programlisting>+@<replaceable>BOXNAME</replaceable>:::::::::
+:::::::::/sbin/nologin</programlisting>
<para>Sobald dies für alle Rechner erledigt ist, müssen die
lokalen Versionen von <filename>/etc/master.passwd</filename>
nie mehr verändert werden. Alle weiteren Änderungen geschehen
über die <acronym>NIS</acronym>-Maps. Nachfolgend ein
Beispiel für eine mögliche Netzgruppen-Map:</para>
<programlisting># Define groups of users first
IT_EMP (,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)
ITINTERN (,kilo,test-domain) (,lima,test-domain)
D_INTERNS (,able,test-domain) (,baker,test-domain)
#
# Now, define some groups based on roles
USERS DEPT1 DEPT2 DEPT3
BIGSRV IT_EMP IT_APP
SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERS
#
# And a groups for a special tasks
# Allow echo and golf to access our anti-virus-machine
SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain)
#
# machine-based netgroups
# Our main servers
WAR BIGSRV
FAMINE BIGSRV
# User india needs access to this server
POLLUTION BIGSRV (,india,test-domain)
#
# This one is really important and needs more access restrictions
DEATH IT_EMP
#
# The anti-virus-machine mentioned above
ONE SECURITY
#
# Restrict a machine to a single user
TWO (,hotel,test-domain)
# [...more groups to follow]</programlisting>
<para>Es ist nicht immer ratsam, rechnerbasierte Netzgruppen zu
verwenden. Wenn Dutzende oder Hunderte identische Rechner
eingerichtet werden müssen, sollten rollenbasierte Netzgruppen
verwendet werden, um die Größe der <acronym>NIS</acronym>-Maps
in Grenzen zu halten.</para>
</sect2>
<sect2>
<title>Passwortformate</title>
<indexterm>
<primary>NIS</primary>
<secondary>Passwortformate</secondary>
</indexterm>
<para>Alle Rechner innerhalb der <acronym>NIS</acronym>-Domäne
müssen für die Verschlüsselung von Passwörtern das gleiche
Format benutzen. Wenn Benutzer Schwierigkeiten bei der
Authentifizierung auf einem <acronym>NIS</acronym>-Client
haben, liegt dies möglicherweise an einem anderen
Passwort-Format. In einem heterogenen Netzwerk muss das
verwendete Format von allen Betriebssystemen unterstützt
werden, wobei <acronym>DES</acronym> der kleinste gemeinsame
Standard ist.</para>
<para>Welches Format die Server und Clients verwenden,
steht in <filename>/etc/login.conf</filename>:</para>
<programlisting>default:\
:passwd_format=des:\
:copyright=/etc/COPYRIGHT:\
[weitere Einträge]</programlisting>
<para>In diesem Beispiel verwendet das System das Format
<acronym>DES</acronym>. Weitere mögliche Werte sind unter
anderem <literal>blf</literal> und <literal>md5</literal> (mit
Blowfish und MD5 verschlüsselte Passwörter).</para>
<para>Wird auf einem Rechner das Format entsprechend der
<acronym>NIS</acronym>-Domäne geändert, muss anschließend die
Login-Capability Datenbank neu erstellt werden:</para>
<screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen>
<note>
<para>Das Format der schon bestehenden Passwörter wird erst
aktualisiert, wenn ein Benutzer sein Passwort ändert,
<emphasis>nachdem</emphasis> die Datenbank neu erstellt
wurde.</para>
</note>
</sect2>
</sect1>
<sect1 xml:id="network-ldap">
<info>
<title>Lightweight Access Directory Protocol
(<acronym>LDAP</acronym>)</title>
<authorgroup>
<author>
<personname>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
</personname>
<contrib>Geschrieben von </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<personname>
<firstname>Björn</firstname>
<surname>Heidotting</surname>
</personname>
<contrib>Übersetzt von </contrib>
</author>
</authorgroup>
</info>
<indexterm><primary>LDAP</primary></indexterm>
<para>Das Lightweight Directory Access Protocol
(<acronym>LDAP</acronym>) ist ein Protokoll der
Anwendungsschicht, das verwendet wird um Objekte mithilfe eines
verteilten Verzeichnisdienstes abzurufen, zu verändern und zu
authentifizieren. Betrachten Sie es als ein Telefonbuch, das
homogene Informationen in mehreren hierarchischen Ebenen
speichert. Es wird in Active Directory und
<application>OpenLDAP</application>-Netzwerken eingesetzt, in
denen Benutzer unter Verwendung eines einzigen Kontos auf
diverse interne Informationen zugreifen. Beispielsweise kann
E-Mail-Authentifizierung, Abfrage von Kontaktinformationen
und Website-Authentifizierung über ein einzelnes Benutzerkonto
aus der Datenbank des <acronym>LDAP</acronym>-Servers
erfolgen.</para>
<para>Dieser Abschnitt enthält eine kompakte Anleitung, um einen
<acronym>LDAP</acronym>-Server auf einem &os;-System zu
konfigurieren. Es wird vorausgesetzt, dass der Administrator
bereits einen Plan erarbeitet hat, der verschiedene Punkte
umfasst, unter anderem die Art der zu speichernden
Informationen, für was die Informationen verwendet
werden, welche Benutzer Zugriff auf die Informationen haben und
wie die Informationen vor unbefugtem Zugriff geschützt
werden.</para>
<sect2>
<title><acronym>LDAP</acronym> Terminologie und Struktur</title>
<para><acronym>LDAP</acronym> verwendet mehrere Begriffe die
Sie verstehen sollten bevor Sie die Konfiguration beginnen.
Alle Verzeichniseinträge bestehen aus einer Gruppe von
<emphasis>Attributen</emphasis>. Jede Attributgruppe enthält
einen eindeutigen Bezeichner, der als
<foreignphrase>distinguished name</foreignphrase>
(<acronym>DN</acronym>) bekannt ist. Dieser setzt sich
normalerweise aus mehreren anderen Attributen, wie dem
<foreignphrase>Relative Distinguished Name</foreignphrase>
(<acronym>RDN</acronym>) zusammen. Wie bei Verzeichnissen
gibt es auch hier absolute und relative Pfade. Betrachten Sie
<acronym>DN</acronym> als absoluten Pfad und
<acronym>RDN</acronym> als relativen Pfad.</para>
<para>Beispielsweise könnte ein <acronym>LDAP</acronym>-Eintrag
wie folgt aussehen. Dieses Beispiel sucht nach dem Eintrag
für das angegebene Benutzerkonto (<literal>uid</literal>),
Organisationseinheit (<literal>ou</literal> und Organisation
(<literal>o</literal>):</para>
<screen>&prompt.user; <userinput>ldapsearch -xb "uid=<replaceable>trhodes</replaceable>,ou=<replaceable>users</replaceable>,o=<replaceable>example.com</replaceable>"</userinput>
# extended LDIF
#
# LDAPv3
# base &lt;uid=trhodes,ou=users,o=example.com&gt; with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# trhodes, users, example.com
dn: uid=trhodes,ou=users,o=example.com
mail: trhodes@example.com
cn: Tom Rhodes
uid: trhodes
telephoneNumber: (123) 456-7890
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries:1</screen>
<para>Die Einträge in diesem Beispiel zeigen die Werte für die
Attribute <literal>dn</literal>, <literal>mail</literal>,
<literal>cn</literal>, <literal>uid</literal> und
<literal>telephoneNumber</literal>. Das Attribut
<literal>cn</literal> ist der <acronym>RDN</acronym>.</para>
<para>Weitere Informationen über <acronym>LDAP</acronym> und
dessen Terminologie finden Sie unter <link
xlink:href="http://www.openldap.org/doc/admin24/intro.html">
http://www.openldap.org/doc/admin24/intro.html</link>.</para>
</sect2>
<sect2 xml:id="ldap-config">
<title>Konfiguration eines
<acronym>LDAP</acronym>-Servers</title>
<indexterm><primary>LDAP Server</primary></indexterm>
<para>&os; integriert keinen <acronym>LDAP</acronym>-Server.
Beginnen Sie die Konfiguration durch die Installation des
Ports oder Pakets <package>net/openldap24-server</package>.
Da der Port viele konfigurierbare Optionen hat, ist es
empfehlenswert zu prüfen, ob die Installation des Pakets
ausreichend ist. Wenn Sie irgendwelche Optionen ändern
möchten, ist es besser den Port zu übersetzen. In den meisten
Fällen sollten die Standardwerte ausreichend sein. Wenn
Sie jedoch SQL-Unterstützung benötigen, muss diese Option
aktiviert und der Port nach den Anweisungen in <xref
linkend="ports-using"/> übersetzt werden.</para>
<para>Als nächstes muss ein Verzeichnis für Daten sowie ein
Verzeichnis für die Zertifikate erstellt werden:</para>
<screen>&prompt.root; <userinput>mkdir /var/db/openldap-data</userinput>
&prompt.root; <userinput>mkdir /usr/local/etc/openldap/private</userinput></screen>
<para>Kopieren Sie die Konfigurationsdatei der Datenbank:</para>
<screen>&prompt.root; <userinput>cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG</userinput></screen>
<para>Im nächsten Schritt wird die Zertifizierungsstelle
konfiguriert. Die folgenden Befehle müssen in
<filename>/usr/local/etc/openldap/private</filename>
ausgeführt werden. Dies ist wichtig, da die
Dateiberechtigungen restriktiv gesetzt werden und Benutzer
keinen direkten Zugriff auf diese Daten haben sollten. Geben
Sie folgenden Befehl ein, um die Zertifizierungsstelle zu
erstellen und folgen Sie den Anweisungen:</para>
<screen>&prompt.root; <userinput>openssl req -days <replaceable>365</replaceable> -nodes -new -x509 -keyout ca.key -out ../ca.crt</userinput></screen>
<para>Diese Einträge sind frei wählbar,
<emphasis>mit Ausnahme</emphasis> von
<emphasis>Common Name</emphasis>. Hier muss etwas anderes als
der Hostname des Systems eingetragen werden. Wenn ein
selbstsigniertes Zertifikat verwendet wird, stellen Sie dem
Hostnamen einfach das Präfix <literal>CA</literal> für die
Zertifizierungsstelle voran.</para>
<para>Die nächste Aufgabe besteht darin, einen
Zertifikatsregistrierungsanforderung (<acronym>CSR</acronym>)
sowie einen privaten Schlüssel zu erstellen. Geben Sie
folgenden Befehl ein und folgen Sie den Anweisungen:</para>
<screen>&prompt.root; <userinput>openssl req -days <replaceable>365</replaceable> -nodes -new -keyout server.key -out server.csr</userinput></screen>
<para>Stellen Sie hierbei sicher, dass
<literal>Common Name</literal> richtig eingetragen wird.
Anschließend muss der Schlüssel signiert werden:</para>
<screen>&prompt.root; <userinput>openssl x509 -req -days <replaceable>365</replaceable> -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserial</userinput></screen>
<para>Der letzte Schritt für die Erstellung der Zertifikate
besteht darin, die Client-Zertifikate zu erstellen und zu
signieren:</para>
<screen>&prompt.root; <userinput>openssl req -days <replaceable>365</replaceable> -nodes -new -keyout client.key -out client.csr</userinput>
&prompt.root; <userinput>openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CAkey ca.key</userinput></screen>
<para>Achten Sie wieder auf das Attribut
<literal>Common name</literal>. Stellen Sie außerdem sicher,
dass bei diesem Verfahren acht (8) neue Dateien erzeugt worden
sind. Der nächste Schritt besteht darin,
<filename>/usr/local/etc/openldap/slapd.conf</filename> zu
editieren und folgende Optionen hinzuzufügen:</para>
<programlisting>TLSCipherSuite HIGH:MEDIUM:+SSLv3
TLSCertificateFile /usr/local/etc/openldap/server.crt
TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key
TLSCACertificateFile /usr/local/etc/openldap/ca.crt</programlisting>
<para>Danach bearbeiten Sie
<filename>/usr/local/etc/openldap/ldap.conf</filename> und
fügen folgende Zeilen hinzu:</para>
<programlisting>TLS_CACERT /usr/local/etc/openldap/ca.crt
TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3</programlisting>
<para>Kommentieren Sie die folgenden Einträge aus und setzen Sie
sie auf die gewünschten Werte: <option>BASE</option>,
<option>URI</option>, <option>SIZELIMIT</option> und
<option>TIMELIMIT</option>. Setzen Sie bei
<option>URI</option> <option>ldap://</option> und
<option>ldaps://</option> ein. Fügen Sie danach zwei Einträge
ein, die auf die Zertifizierungsstelle verweisen. Wenn Sie
fertig sind, sollten die Einträge wie folgt aussehen:</para>
<programlisting>BASE dc=example,dc=com
URI ldap:// ldaps://
SIZELIMIT 12
TIMELIMIT 15
TLS_CACERT /usr/local/etc/openldap/ca.crt
TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3</programlisting>
<para>Anschließend sollte das Standardpasswort für den Server
geändert werden:</para>
<screen>&prompt.root; <userinput>slappasswd -h "{SHA}" &gt;&gt; /usr/local/etc/openldap/slapd.conf</userinput></screen>
<para>Dieser Befehl wird nach einem Passwort fragen und, wenn
der Prozess nicht fehlschlägt, ein Passwort-Hash an das
Ende von <filename>slapd.conf</filename> hinzufügen. Es
werden verschiedene Hash-Formate unterstützt. Weitere
Informationen hierzu finden Sie in der Manualpage von
<command>slappasswd</command>.</para>
<para>Als nächstes bearbeiten Sie
<filename>/usr/local/etc/openldap/slapd.conf</filename> und
fügen folgende Zeilen hinzu:</para>
<programlisting>password-hash {sha}
allow bind_v2</programlisting>
<para>Das Suffix in dieser Datei muss <option>BASE</option> aus
<filename>/usr/local/etc/openldap/ldap.conf</filename>
entsprechen. Zudem sollte die Option <option>rootdn</option>
ebenfalls gesetzt werden. Ein guter Wert ist beispielsweise
<option>cn=Manager</option>. Bevor die Datei gespeichert
wird, setzen Sie die Passwortausgabe von
<command>slappasswd</command> hinter die Option
<option>rootpw</option>. Das Endergebnis sollte in etwa wie
folgt aussehen:</para>
<programlisting>TLSCipherSuite HIGH:MEDIUM:+SSLv3
TLSCertificateFile /usr/local/etc/openldap/server.crt
TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key
TLSCACertificateFile /usr/local/etc/openldap/ca.crt
rootpw {SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=</programlisting>
<para>Aktivieren Sie abschließend
<application>OpenLDAP</application> in
<filename>/etc/rc.conf</filename> und setzen Sie die
<acronym>URI</acronym>:</para>
<programlisting>slapd_enable="YES"
slapd_flags="-4 -h ldaps:///"</programlisting>
<para>An dieser Stelle kann der Server gestartet und getestet
werden:</para>
<screen>&prompt.root; <userinput>service slapd start</userinput></screen>
<para>Wenn alles richtig konfiguriert ist, sollte eine Suche im
Verzeichnis, wie in diesem Beispiel, eine erfolgreiche
Verbindung mit einer Antwort liefern:</para>
<screen>&prompt.root; <userinput>ldapsearch -Z</userinput>
# extended LDIF
#
# LDAPv3
# base &lt;dc=example,dc=com&gt; (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# search result
search: 3
result: 32 No such object
# numResponses: 1</screen>
<note>
<para>Wenn der Befehl fehlschlägt, aber die Konfiguration
richtig aussieht, stoppen Sie den
<command>slapd</command>-Dienst. Starten Sie anschließend
den Dienst mit
<foreignphrase>Debugging</foreignphrase>-Optionen:</para>
<screen>&prompt.root; <userinput>service slapd stop</userinput>
&prompt.root; <userinput>/usr/local/libexec/slapd -d -1</userinput></screen>
</note>
<para>Sobald der Dienst antwortet, kann das Verzeichnis mit dem
Befehl <command>ldapadd</command> bestückt werden. In diesem
Beispiel gibt es eine Datei mit einer Liste von Benutzern, die
diesem Verzeichnis hinzugefügt werden. Die Einträge sollten
das folgende Format haben:</para>
<programlisting>dn: dc=<replaceable>example</replaceable>,dc=<replaceable>com</replaceable>
objectclass: dcObject
objectclass: organization
o: <replaceable>Example</replaceable>
dc: <replaceable>Example</replaceable>
dn: cn=<replaceable>Manager</replaceable>,dc=<replaceable>example</replaceable>,dc=<replaceable>com</replaceable>
objectclass: organizationalRole
cn: <replaceable>Manager</replaceable></programlisting>
<para>Um diese Datei zu importieren, geben Sie den Dateinamen
an. Bei dem folgenden Befehl werden Sie wieder zur Eingabe
des Passworts aufgefordert, das Sie zuvor eingegeben haben.
Die Ausgabe sollte wie folgt aussehen:</para>
<screen>&prompt.root; <userinput>ldapadd -Z -D "cn=<replaceable>Manager</replaceable>,dc=<replaceable>example</replaceable>,dc=<replaceable>com</replaceable>" -W -f <replaceable>import.ldif</replaceable></userinput>
Enter LDAP Password:
adding new entry "dc=example,dc=com"
adding new entry "cn=Manager,dc=example,dc=com"</screen>
<para>Stellen Sie mit einer Suche auf dem Server sicher, dass
die Daten importiert wurden. Nutzen Sie dazu
<command>ldapsearch</command>:</para>
<screen>&prompt.user; <userinput>ldapsearch -Z</userinput>
# extended LDIF
#
# LDAPv3
# base &lt;dc=example,dc=com&gt; (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# example.com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
o: Example
dc: Example
# Manager, example.com
dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
# search result
search: 3
result: 0 Success
# numResponses: 3
# numEntries: 2</screen>
<para>An dieser Stelle sollte der Server konfiguriert sein und
ordnungsgemäß funktionieren.</para>
</sect2>
</sect1>
<sect1 xml:id="network-dhcp">
<!--
<info>
<authorgroup>
<author><personname><firstname>Greg</firstname><surname>Sutter</surname></personname><contrib>Geschrieben von </contrib></author>
</authorgroup>
</info>
-->
<title>Dynamic Host Configuration Protocol
(<acronym>DHCP</acronym>)</title>
<indexterm>
<primary>Dynamic Host Configuration Protocol</primary>
<see><acronym>DHCP</acronym></see>
</indexterm>
<indexterm>
<primary>Internet Systems Consortium (ISC)</primary>
</indexterm>
<para>Das Dynamic Host Configuration Protocol
(<acronym>DHCP</acronym>) ermöglicht es einem System, sich mit
einem Netzwerk zu verbinden und die für die Kommunikation mit
diesem Netzwerk nötigen Informationen zu beziehen. &os;
verwendet den von OpenBSD stammenden
<command>dhclient</command>, um die Adressinformationen zu
beziehen. &os; installiert keinen
<acronym>DHCP</acronym>-Server, aber es stehen einige Server in
der &os; Ports-Sammlung zu Verfügung. Das
<acronym>DHCP</acronym>-Protokoll wird vollständig im <link
xlink:href="http://www.freesoft.org/CIE/RFC/2131/">
RFC 2131</link> beschrieben. Eine weitere, lehrreiche
Informationsquelle existiert unter <uri
xlink:href="http://www.isc.org/downloads/dhcp">
isc.org/downloads/dhcp/</uri>.</para>
<para>In diesem Abschnitt wird beschrieben, wie der integrierte
<acronym>DHCP</acronym>-Client verwendet wird. Anschließend
wird erklärt, wie ein <acronym>DHCP</acronym>-Server zu
installieren und konfigurieren ist.</para>
<note>
<para>Unter &os; wird das Gerät &man.bpf.4; für den
<acronym>DHCP</acronym>-Server und den
<acronym>DHCP</acronym>-Client benötigt. Das Gerät ist
bereits im <filename>GENERIC</filename>-Kernel enthalten.
Benutzer, die es vorziehen einen angepassten Kernel zu
erstellen, müssen dieses Gerät behalten, wenn
<acronym>DHCP</acronym> verwendet wird.</para>
<para>Es sei darauf hingewiesen, dass <filename>bpf</filename>
es priviligierten Benutzern ermöglicht einen Paket-Sniffer
auf dem System auszuführen.</para>
</note>
<sect2>
<title>Einen <acronym>DHCP</acronym>-Client
konfigurieren</title>
<para>Die Unterstützung für den <acronym>DHCP</acronym>-Client
ist im Installationsprogramm von &os; enthalten, sodass ein
neu installiertes System automatisch die Adressinformationen
des Netzwerks vom <acronym>DHCP</acronym>-Server
erhält. In <xref linkend="bsdinstall-post"/> finden Sie
Beispiele für eine Netzwerkkonfiguration.</para>
<indexterm><primary><acronym>UDP</acronym></primary></indexterm>
<para><command>dhclient</command> beginnt von einem
Clientrechner aus über den <acronym>UDP</acronym>-Port 68
Konfigurationsinformationen anzufordern. Der Server antwortet
auf dem <acronym>UDP</acronym>-Port 67, indem er dem Client
eine <acronym>IP</acronym>-Adresse zuweist und ihm weitere
relevante Informationen über das Netzwerk, wie Netzmasken,
Router und <acronym>DNS</acronym>-Server mitteilt. Diese
Informationen werden als
<foreignphrase>DHCP-Lease</foreignphrase> bezeichnet und sind
nur für bestimmte Zeit, die vom Administrator des
<acronym>DHCP</acronym>-Servers vorgegeben wird, gültig.
Dadurch fallen verwaiste <acronym>IP</acronym>-Adressen, deren
Clients nicht mehr mit dem Netzwerk verbunden sind,
automatisch an den Server zurück.
<acronym>DHCP</acronym>-Clients können sehr viele
Informationen von einem <acronym>DHCP</acronym>-Server
erhalten. Eine ausführliche Liste finden Sie in
&man.dhcp-options.5;.</para>
<para>Das Gerät <filename>bpf</filename> ist im
<filename>GENERIC</filename>-Kernel bereits enthalten. Für
die Nutzung von <acronym>DHCP</acronym> muss also kein
angepasster Kernel erzeugt werden. In einer angepassten
Kernelkonfigurationsdatei muss das Gerät enthalten sein, damit
<acronym>DHCP</acronym> ordnungsgemäß funktioniert.</para>
<para>Standardmässig läuft die
<acronym>DHCP</acronym>-Konfiguration bei &os; im Hintergrund
oder auch <firstterm>asynchron</firstterm>. Andere
Startskripte laufen weiter, während <acronym>DHCP</acronym>
fertig abgearbeitet wird, was den Systemstart
beschleunigt.</para>
<para><acronym>DHCP</acronym> im Hintergrund funktioniert gut,
wenn der <acronym>DHCP</acronym>-Server schnell auf Anfragen
der Clients antwortet. Jedoch kann <acronym>DHCP</acronym>
eine lange Zeit benötigen, um auf manchen Systemen fertig zu
werden. Falls Netzwerkdienste gestartet werden, bevor
<acronym>DHCP</acronym> die Informationen und Netzwerkadressen
gesetzt hat, werden diese fehlschlagen. Durch die Verwendung
von <acronym>DHCP</acronym> im
<firstterm>asynchronen</firstterm> Modus wird das Problem
verhindert, so dass die Startskripte pausiert werden, bis die
<acronym>DHCP</acronym>-Konfiguration abgeschlossen
ist.</para>
<para>Diese Zeile wird in <filename>/etc/rc.conf</filename>
verwendet, um den asynchronen Modus zu aktivieren:</para>
<programlisting>ifconfig_<replaceable>fxp0</replaceable>="DHCP"</programlisting>
<para>Die Zeile kann bereits vorhanden sein, wenn bei der
Installation des Systems <acronym>DHCP</acronym> konfiguriert
wurde. Ersetzen Sie <replaceable>fxp0</replaceable> durch die
entsprechende Schnittstelle. Die dynamische Konfiguration von
Netzwerkkarten wird in <xref
linkend="config-network-setup"/> beschrieben.</para>
<para>Um stattdessen den synchronen Modus zu verwenden, der
während des Systemstarts pausiert bis die
<acronym>DHCP</acronym>-Konfiguration abgeschlossen ist,
benutzen Sie <quote>SYNCDHCP</quote>:</para>
<programlisting>ifconfig_<replaceable>fxp0</replaceable>="SYNCDHCP"</programlisting>
<para>Es stehen weitere Optionen für den Client zur Verfügung.
Suchen Sie in &man.rc.conf.5; nach
<literal>dhclient</literal>, wenn Sie an Einzelheiten
interessiert sind.</para>
<indexterm>
<primary><acronym>DHCP</acronym></primary>
<secondary>Konfigurationsdateien</secondary>
</indexterm>
<para>Der <acronym>DHCP</acronym>-Client verwendet die folgenden
Dateien:</para>
<itemizedlist>
<listitem>
<para><filename>/etc/dhclient.conf</filename></para>
<para>Die Konfigurationsdatei von
<command>dhclient</command>. Diese Datei enthält
normalerweise nur Kommentare, da die Vorgabewerte zumeist
ausreichend sind. Diese Konfigurationsdatei wird in
&man.dhclient.conf.5; beschrieben.</para>
</listitem>
<listitem>
<para><filename>/sbin/dhclient</filename></para>
<para>Weitere Informationen über dieses Kommando
finden Sie in &man.dhclient.8;.</para>
</listitem>
<listitem>
<para><filename>/sbin/dhclient-script</filename></para>
<para>Das &os;-spezifische Konfigurationsskript des
<acronym>DHCP</acronym>-Clients. Es wird in
&man.dhclient-script.8; beschrieben und kann meist
unverändert übernommen werden.</para>
</listitem>
<listitem>
<para><filename>/var/db/dhclient.leases.<replaceable>interface</replaceable></filename></para>
<para>Der <acronym>DHCP</acronym>-Client verfügt über eine
Datenbank, die alle derzeit gültigen Leases enthält und
als Logdatei erzeugt wird. Diese Datei wird in
&man.dhclient.leases.5; beschrieben.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="network-dhcp-server">
<title>Einen <acronym>DHCP</acronym>-Server installieren und
einrichten</title>
<para>Dieser Abschnitt beschreibt die Einrichtung eines
&os;-Systems als <acronym>DHCP</acronym>-Server. Dazu wird
die <acronym>DHCP</acronym>-Implementation von ISC (Internet
Systems Consortium) verwendet. Diese Implementation und die
Dokumentation können als Port oder Paket
<package>net/isc-dhcp43-server</package> installiert
werden.</para>
<indexterm>
<primary><acronym>DHCP</acronym></primary>
<secondary>Server</secondary>
</indexterm>
<indexterm>
<primary><acronym>DHCP</acronym></primary>
<secondary>installieren</secondary>
</indexterm>
<para>Der Port <package>net/isc-dhcp43-server</package>
installiert eine Beispiel-Konfigurationsdatei. Kopieren Sie
<filename>/usr/local/etc/dhcpd.conf.example</filename> nach
<filename>/usr/local/etc/dhcpd.conf</filename> und nehmen Sie
die Änderungen an der neuen Datei vor.</para>
<indexterm>
<primary><acronym>DHCP</acronym></primary>
<secondary>dhcpd.conf</secondary>
</indexterm>
<para>Diese Konfigurationsdatei umfasst Deklarationen für
Subnetze und Rechner, die den <acronym>DHCP</acronym>-Cleints
zur Verfügung gestellt wird. Die folgenden Zeilen
konfigurieren Folgendes:</para>
<programlisting>option domain-name "example.org";<co xml:id="domain-name"/>
option domain-name-servers ns1.example.org;<co xml:id="domain-name-servers"/>
option subnet-mask 255.255.255.0;<co xml:id="subnet-mask"/>
default-lease-time 600;<co xml:id="default-lease-time"/>
max-lease-time 72400;<co xml:id="max-lease-time"/>
ddns-update-style none;<co xml:id="ddns-update-style"/>
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;<co xml:id="range"/>
option routers rtr-239-0-1.example.org;<co xml:id="routers"/>
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;<co xml:id="hardware"/>
fixed-address fantasia.fugue.com;<co xml:id="fixed-address"/>
}</programlisting>
<calloutlist>
<callout arearefs="domain-name">
<para>Diese Option beschreibt die Standardsuchdomäne, die
den Clients zugewiesen wird. Weitere Informationen finden
Sie in &man.resolv.conf.5;.</para>
</callout>
<callout arearefs="domain-name-servers">
<para>Diese Option legt eine, durch Kommata getrennte Liste
von <acronym>DNS</acronym>-Servern fest, die von den
Clients verwendet werden sollen. Die Server können über
den Namen (<acronym>FQDN</acronym>) oder die
<acronym>IP</acronym>-Adresse spezifiziert werden.</para>
</callout>
<callout arearefs="subnet-mask">
<para>Die den Clients zugewiesene Subnetzmaske.</para>
</callout>
<callout arearefs="default-lease-time">
<para>Die Voreinstellung für die Ablaufzeit des Lease in
Sekunden. Ein Client kann diesen Wert in der
Konfiguration überschreiben.</para>
</callout>
<callout arearefs="max-lease-time">
<para>Die maximale Zeitdauer, für die der Server Leases
vergibt. Sollte ein Client eine längere Zeitspanne
anfordern, wird dennoch nur der Wert
<literal>max-lease-time</literal> zugewiesen.</para>
</callout>
<callout arearefs="ddns-update-style">
<para>Die Voreinstellung <option>none</option> deaktiviert
dynamische <acronym>DNS</acronym>-Updates. Bei der
Einstellung <option>interim</option> aktualisiert der
<acronym>DHCP</acronym>-Server den
<acronym>DNS</acronym>-Server, wenn ein Lease vergeben
oder zurückgezogen wurde. Ändern Sie die Voreinstellung
nicht, wenn der Server so konfiguriert wurde, dynamische
<acronym>DNS</acronym>-Updates zu unterstützen.</para>
</callout>
<callout arearefs="range">
<para>Diese Zeile erstellt einen Pool der verfügbaren
<acronym>IP</acronym>-Adressen, die für die Zuweisung der
<acronym>DHCP</acronym>-Clients reserviert sind. Der
Bereich muss für das angegebene Netz oder Subnetz aus der
vorherigen Zeile gültig sein.</para>
</callout>
<callout arearefs="routers">
<para>Legt das Standard-Gateway für das Netz oder Subnetz
fest, das nach der öffnenden Klammer <literal>{</literal>
gültig ist.</para>
</callout>
<callout arearefs="hardware">
<para>Bestimmt die Hardware-<acronym>MAC</acronym>-Adresse
eines Clients, durch die der
<acronym>DHCP</acronym>-Server den Client erkennt, der
eine Anforderung an ihn stellt.</para>
</callout>
<callout arearefs="fixed-address">
<para>Einem Rechner soll immer die gleiche
<acronym>IP</acronym>-Adresse zugewiesen werden. Hier ist
auch ein Rechnername gültig, da der
<acronym>DHCP</acronym>-Server den Rechnernamen auflöst,
bevor er das Lease zuweist.</para>
</callout>
</calloutlist>
<para>Die Konfigurationsdatei unterstützt viele weitere
Optionen. Lesen Sie &man.dhcpd.conf.5;, die mit dem Server
installiert wird, für Details und Beispiele.</para>
<para>Nachdem <filename>dhcpd.conf</filename> konfiguriert ist,
aktivieren Sie den <acronym>DHCP</acronym>-Server in
<filename>/etc/rc.conf</filename>:</para>
<programlisting>dhcpd_enable="YES"
dhcpd_ifaces="dc0"</programlisting>
<para>Dabei müssen Sie <literal>dc0</literal> durch die
Gerätedatei (mehrere Gerätedateien müssen durch Leerzeichen
getrennt werden) ersetzen, die der
<acronym>DHCP</acronym>-Server auf Anfragen von
<acronym>DHCP</acronym>-Clients hin überwachen soll.</para>
<para>Starten Sie den Server mit folgenden Befehl:</para>
<screen>&prompt.root; <userinput>service isc-dhcpd start</userinput></screen>
<para>Künftige Änderungen an der Konfiguration des Servers
erfordern, dass der Dienst <command>dhcpd</command> gestoppt
und anschließend mit &man.service.8; gestartet wird.</para>
<indexterm>
<primary><acronym>DHCP</acronym></primary>
<secondary>Konfigurationsdateien</secondary>
</indexterm>
<itemizedlist>
<listitem>
<para><filename>/usr/local/sbin/dhcpd</filename></para>
<para>Weitere Informationen zu
<application>dhcpd</application> finden Sie in
&man.dhcpd.8;.</para>
</listitem>
<listitem>
<para><filename>/usr/local/etc/dhcpd.conf</filename></para>
<para>Die Konfigurationsdatei des Servers muss alle
Informationen enthalten, die an die Clients weitergegeben
werden soll. Außerdem sind hier Informationen zur
Konfiguration des Servers enthalten. Diese
Konfigurationsdatei wird in &man.dhcpd.conf.5;
beschrieben.</para>
</listitem>
<listitem>
<para><filename>/var/db/dhcpd.leases</filename></para>
<para>Der <acronym>DHCP</acronym>-Server hat eine Datenbank,
die alle vergebenen Leases enthält. Diese wird als
Logdatei erzeugt. &man.dhcpd.leases.5; enthält eine
ausführliche Beschreibung.</para>
</listitem>
<listitem>
<para><filename>/usr/local/sbin/dhcrelay</filename></para>
<para>Dieser Daemon wird in komplexen Umgebungen verwendet,
in denen ein <acronym>DHCP</acronym>-Server eine Anfrage
eines Clients an einen <acronym>DHCP</acronym>-Server in
einem separaten Netzwerk weiterleitet. Wenn Sie diese
Funktion benötigen, müssen Sie
<package>net/isc-dhcp43-relay</package> installieren.
Weitere Informationen zu diesem Thema finden Sie in
&man.dhcrelay.8;.</para>
</listitem>
</itemizedlist>
</sect2>
</sect1>
<sect1 xml:id="network-dns">
<!--
<info>
<authorgroup>
<author><personname><firstname>Chern</firstname><surname>Lee</surname></personname><contrib>Beigetragen von </contrib></author>
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname></author>
<author><personname><firstname>Daniel</firstname><surname>Gerzo</surname></personname></author>
</authorgroup>
</info>
-->
<title>Domain Name System (<acronym>DNS</acronym>)</title>
<indexterm><primary>DNS</primary></indexterm>
<para><acronym>DNS</acronym> ist das für die Umwandlung von
Rechnernamen in <acronym>IP</acronym>-Adressen zuständige
Protokoll. Im Internet wird <acronym>DNS</acronym> durch ein
komplexes System von autoritativen Root-Nameservern, Top Level
Domain-Servern (<acronym>TLD</acronym>) sowie anderen
kleineren Nameservern verwaltet, die individuelle
Domaininformationen speichern und untereinander abgleichen.
Für einfache <acronym>DNS</acronym>-Anfragen wird auf dem
lokalen System kein Nameserver benötigt.</para>
<indexterm><primary>Resolver</primary></indexterm>
<indexterm>
<primary>Reverse-<acronym>DNS</acronym></primary>
</indexterm>
<indexterm><primary>Root-Zone</primary></indexterm>
<para>Die folgende Tabelle beschreibt einige mit
<acronym>DNS</acronym> verbundenen Begriffe:</para>
<table frame="none" pgwide="1">
<title><acronym>DNS</acronym>-Begriffe</title>
<tgroup cols="2">
<colspec colwidth="1*"/>
<colspec colwidth="3*"/>
<thead>
<row>
<entry>Begriff</entry>
<entry>Bedeutung</entry>
</row>
</thead>
<tbody>
<row>
<entry>Forward-<acronym>DNS</acronym></entry>
<entry>Rechnernamen in <acronym>IP</acronym>-Adressen
umwandeln.</entry>
</row>
<row>
<entry>Origin (Ursprung)</entry>
<entry>Die in einer bestimmten Zonendatei beschriebene
Domäne.</entry>
</row>
<row>
<entry>Resolver</entry>
<entry>Ein Systemprozess, durch den ein Rechner
Zoneninformationen von einem Nameserver
anfordert.</entry>
</row>
<row>
<entry>Reverse-<acronym>DNS</acronym></entry>
<entry>die Umwandlung von <acronym>IP</acronym>-Adressen
in Rechnernamen</entry>
</row>
<row>
<entry>Root-Zone</entry>
<entry>Der Beginn der Internet-Zonenhierarchie. Alle
Zonen befinden sich innerhalb der Root-Zone. Dies ist
analog zu einem Dateisystem, in dem sich alle Dateien
und Verzeichnisse innerhalb des Wurzelverzeichnisses
befinden.</entry>
</row>
<row>
<entry>Zone</entry>
<entry>Eine individuelle Domäne, Unterdomäne, oder ein
Teil von <acronym>DNS</acronym>, der von der gleichen
Autorität verwaltet wird.</entry>
</row>
</tbody>
</tgroup>
</table>
<indexterm>
<primary>Zonen</primary>
<secondary>Beispiele</secondary>
</indexterm>
<para>Es folgen nun einige Zonenbeispiele:</para>
<itemizedlist>
<listitem>
<para>Innerhalb der Dokumentation wird die Root-Zone in der
Regel mit <systemitem>.</systemitem> bezeichnet.</para>
</listitem>
<listitem>
<para><systemitem>org.</systemitem> ist eine Top level Domain
(<acronym>TLD</acronym>) innerhalb der Root-Zone.</para>
</listitem>
<listitem>
<para><systemitem
class="fqdomainname">example.org.</systemitem> ist eine
Zone innerhalb der
<systemitem>org.</systemitem>-<acronym>TLD</acronym>.</para>
</listitem>
<listitem>
<para><systemitem>1.168.192.in-addr.arpa.</systemitem> ist die
Zone mit allen <acronym>IP</acronym>-Adressen des Bereichs
<systemitem
class="fqdomainname">192.168.1.*</systemitem>.</para>
</listitem>
</itemizedlist>
<para>Wie man an diesen Beispielen erkennen kann, befindet sich
der spezifischere Teil eines Rechnernamens auf der linken Seite
der Adresse. <systemitem
class="fqdomainname">example.org.</systemitem> beschreibt
einen Rechner also genauer als <systemitem>org.</systemitem>,
während <systemitem>org.</systemitem> genauer als die Root-Zone
ist. Jeder Teil des Rechnernamens hat Ähnlichkeiten mit
einem Dateisystem, in dem etwa <filename>/dev</filename> dem
Wurzelverzeichnis untergeordnet ist.</para>
<sect2>
<title>Gründe für die Verwendung eines Nameservers</title>
<para>Es gibt zwei Arten von Nameservern: Autoritative
Nameserver sowie zwischenspeichernde (cachende, auch bekannt
als auflösende) Nameserver.</para>
<para>Ein autoritativer Nameserver ist notwendig, wenn</para>
<itemizedlist>
<listitem>
<para>Sie anderen verbindliche
<acronym>DNS</acronym>-Auskünfte erteilen wollen.</para>
</listitem>
<listitem>
<para>eine Domain, beispielsweise <systemitem
class="fqdomainname">example.org</systemitem>,
registriert wird, und den zu dieser Domain gehörenden
Rechnern <acronym>IP</acronym>-Adressen zugewiesen werden
müssen.</para>
</listitem>
<listitem>
<para>ein <acronym>IP</acronym>-Adressblock
reverse-<acronym>DNS</acronym>-Einträge benötigt, um
<acronym>IP</acronym>-Adressen in Rechnernamen auflösen zu
können.</para>
</listitem>
<listitem>
<para>ein Backup-Nameserver (auch Slaveserver genannt) oder
ein zweiter Nameserver auf Anfragen antworten soll.</para>
</listitem>
</itemizedlist>
<para>Ein cachender Nameserver ist notwendig, weil</para>
<itemizedlist>
<listitem>
<para>ein lokaler <acronym>DNS</acronym>-Server Daten
zwischenspeichern und daher schneller auf Anfragen
reagieren kann als ein entfernter Server.</para>
</listitem>
</itemizedlist>
<para>Wird nach <systemitem
class="fqdomainname">www.FreeBSD.org</systemitem> gesucht,
leitet der Resolver diese Anfrage an den Nameserver des
<acronym>ISP</acronym>s weiter und nimmt danach das Ergebnis
der Abfrage entgegen. Existiert ein lokaler,
zwischenspeichernder <acronym>DNS</acronym>-Server, muss
dieser die Anfrage nur einmal nach außen weitergeben. Für
alle weiteren Anfragen ist dies nicht mehr nötig, da diese
Information nun lokal gespeichert ist.</para>
</sect2>
<sect2>
<title><acronym>DNS</acronym>-Server Konfiguration</title>
<para><application>Unbound</application> ist im Basissystem von
&os; enthalten. In der Voreinstellung bietet es nur die
<acronym>DNS</acronym>-Auflösung auf dem lokalen Rechner.
Obwohl das im Basissystem enthaltene
<application>Unbound</application> konfiguriert werden kann,
um Namensauflösung über den lokalen Rechner hinweg
bereitzustellen, ist es empfehlenswert für solche
Anforderungen <application>Unbound</application> aus der &os;
Ports-Sammlung zu installieren.</para>
<para>Um <application>Unbound</application> zu aktivieren, fügen
Sie folgende Zeile in <filename>/etc/rc.conf</filename>
ein:</para>
<programlisting>local_unbound_enable="YES"</programlisting>
<para>Alle vorhandenen Nameserver aus
<filename>/etc/resolv.conf</filename> werden als Forwarder
in der neuen <application>Unbound</application>-Konfiguration
benutzt.</para>
<note>
<para>Wenn einer der aufgeführten Nameserver kein
<acronym>DNSSEC</acronym> unterstützt, wird die lokale
<acronym>DNS</acronym>-Auflösung nicht funktionieren.
Testen Sie jeden Server und entfernen Sie die Server, die
den Test nicht bestehen. Das folgende Beispiel zeigt einen
<foreignphrase>Trust Tree</foreignphrase> beziehungsweise
einen Fehler für den Nameserver auf <systemitem
class="ipaddress">192.168.1.1</systemitem>:</para>
</note>
<screen>&prompt.root; <userinput>drill -S FreeBSD.org @<replaceable>192.168.1.1</replaceable></userinput></screen>
<para>Nachdem jeder Server für <acronym>DNSSEC</acronym>
konfiguriert ist, starten Sie
<application>Unbound</application>:</para>
<screen>&prompt.root; <userinput>service local_unbound onestart</userinput></screen>
<para>Dieses Kommando sorgt für die Aktualisierung von
<filename>/etc/resolv.conf</filename>, so dass Abfragen für
<acronym>DNSSEC</acronym> gesicherte Domains jetzt
funktionieren. Führen Sie folgenden Befehl aus, um den
<acronym>DNSSEC</acronym>
<foreignphrase>Trust Tree</foreignphrase> für
FreeBSD.org zu überprüfen:</para>
<screen>&prompt.user; <userinput>drill -S FreeBSD.org</userinput>
;; Number of trusted keys: 1
;; Chasing: freebsd.org. A
DNSSEC Trust tree:
freebsd.org. (A)
|---freebsd.org. (DNSKEY keytag: 36786 alg: 8 flags: 256)
|---freebsd.org. (DNSKEY keytag: 32659 alg: 8 flags: 257)
|---freebsd.org. (DS keytag: 32659 digest type: 2)
|---org. (DNSKEY keytag: 49587 alg: 7 flags: 256)
|---org. (DNSKEY keytag: 9795 alg: 7 flags: 257)
|---org. (DNSKEY keytag: 21366 alg: 7 flags: 257)
|---org. (DS keytag: 21366 digest type: 1)
| |---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
| |---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
|---org. (DS keytag: 21366 digest type: 2)
|---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
|---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
;; Chase successful</screen>
</sect2>
</sect1>
<sect1 xml:id="network-apache">
<info>
<title>Apache HTTP-Server</title>
<authorgroup>
<author>
<personname>
<firstname>Murray</firstname>
<surname>Stokely</surname>
</personname>
<contrib>Beigetragen von </contrib>
</author>
</authorgroup>
</info>
<indexterm>
<primary>Webserver</primary>
<secondary>konfigurieren</secondary>
</indexterm>
<indexterm><primary>Apache</primary></indexterm>
<para>Der Open Source
<application>Apache HTTP-Server</application> ist der am
weitesten verbreitete Webserver. Dieser Webserver ist nicht im
Basissystem von &os; enthalten, kann aber als Paket oder Port
<package>www/apache24</package> installiert werden.</para>
<para>Dieser Abschnitt beschreibt die Konfiguration der
Version 2.<replaceable>x</replaceable> des
<application>Apache HTTP-Server</application>. Weiterführende
Informationen und Konfigurationsanweisungen für
<application>Apache</application>&nbsp;2.X finden Sie unter
<link xlink:href="http://httpd.apache.org/">
httpd.apache.org</link>.</para>
<sect2>
<title>Apache konfigurieren und starten</title>
<indexterm><primary>Apache</primary>
<secondary>Konfigurationsdatei</secondary></indexterm>
<para>Der <application>Apache HTTP-Server</application> wird
unter &os; primär in
<filename>/usr/local/etc/apache2<replaceable>x</replaceable>/httpd.conf</filename>
konfiguriert, wobei das <replaceable>x</replaceable> die
Versionsnummer darstellt. In dieser Textdatei leitet ein
<literal>#</literal> einen Kommentar ein. Die am häufigsten
verwendeten Optionen sind:</para>
<variablelist>
<varlistentry>
<term><literal>ServerRoot "/usr/local"</literal></term>
<listitem>
<para>Legt das Standardwurzelverzeichnis für die
<application>Apache</application>-Installation fest.
Binärdateien werden in die Verzeichnisse
<filename>bin</filename> und
<filename>sbin</filename> unterhalb des
Serverwurzelverzeichnisses installiert, während sich
Konfigurationsdateien im Unterverzeichnis
<filename>etc/apache2<replaceable>x</replaceable></filename>
befinden.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>ServerAdmin you@example.com</literal></term>
<listitem>
<para>Die E-Mail-Adresse, an die Mitteilungen über
Serverprobleme geschickt werden. Diese Adresse
erscheint auf vom Server erzeugten Seiten,
beispielsweise auf Fehlerseiten.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>ServerName www.example.com:80</literal></term>
<listitem>
<para>Erlaubt dem Administrator, einen Rechnernamen
festzulegen, den der Server an die Clients sendet.
Beispielsweise könnte <systemitem>www</systemitem> statt
des richtigen Rechnernamens verwendet werden. Wenn das
System keinen eingetragenen <acronym>DNS</acronym>-Namen
hat, kann stattdessen die <acronym>IP</acronym>-Adresse
eingetragen werden. Lauscht der Server auf einem
anderen Port, tauschen Sie die <literal>80</literal>
gegen eine entsprechende Portnummer.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>DocumentRoot "/usr/local/www/apache2<replaceable>x</replaceable>/data"</literal></term>
<listitem>
<para>Das Verzeichnis, in dem die Dokumente abgelegt sind.
In der Voreinstellung befinden sich alle Seiten in
diesem Verzeichnis, durch symbolische Links oder Aliase
lassen sich aber auch andere Orte festlegen.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Es ist empfehlenswert, eine Sicherungskopie der
<application>Apache</application>-Konfigurationsdatei
anzulegen, bevor Änderungen durchgeführt werden. Wenn die
Konfiguration von <application>Apache</application>
abgeschlossen ist, speichern Sie die Datei und überprüfen Sie
die Konfiguration mit <command>apachectl</command>. Der
Befehl <command>apachectl configtest</command> sollte
<literal>Syntax OK</literal> zurückgeben.</para>
<indexterm>
<primary>Apache</primary>
<secondary>Starten oder Beenden</secondary>
</indexterm>
<para>Um den <application>Apache</application> beim Systemstart
zu starten, fügen Sie folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>apache<replaceable>24</replaceable>_enable="YES"</programlisting>
<para>Wenn Sie während des Systemstarts weitere Parameter an den
<application>Apache</application> übergeben wollen, können Sie
diese durch eine zusätzliche Zeile in
<filename>rc.conf</filename> angeben:</para>
<programlisting>apache<replaceable>24</replaceable>_flags=""</programlisting>
<para>Wenn <application>apachectl</application> keine
Konfigurationsfehler meldet, starten Sie
<command>httpd</command>:</para>
<screen>&prompt.root; <userinput>service apache<replaceable>24</replaceable> start</userinput></screen>
<para>Sie können den <command>httpd</command>-Dienst testen,
indem Sie
<literal>http://<replaceable>localhost</replaceable></literal>
in einen Browser eingeben, wobei Sie
<replaceable>localhost</replaceable> durch den
vollqualifizierten Domainnamen der Maschine ersetzen, auf dem
der <command>httpd</command> läuft. Die Standard Webseite,
die angezeigt wird, ist
<filename>/usr/local/www/apache<replaceable>24</replaceable>/data/index.html</filename>.</para>
<para>Die Konfiguration von <application>Apache</application>
kann bei nachfolgenden Änderungen an der Konfigurationsdatei
bei laufendem <command>httpd</command>, auf Fehler überprüft
werden. Geben Sie dazu folgendes Kommando ein:</para>
<screen>&prompt.root; <userinput>service apache<replaceable>24</replaceable> configtest</userinput></screen>
<note>
<para>Es ist wichitg zu beachten, dass
<literal>configtest</literal> kein &man.rc.8;-Standard ist,
und somit nicht zwingend mit anderen
&man.rc.8;-Startskripten funktioniert.</para>
</note>
</sect2>
<sect2>
<title>Virtual Hosting</title>
<para><foreignphrase>Virtual Hosting</foreignphrase> ermöglicht
es, mehrere Webseiten auf einem
<application>Apache</application>-Server laufen zu lassen.
Die virtuellen Hosts können <firstterm>IP-basiert</firstterm>
oder <firstterm>namensbasiert</firstterm> sein.
<acronym>IP</acronym>-basiertes virtual Hosting verwendet eine
<acronym>IP</acronym>-Adresse für jede Webseite. Beim
namensbasierten virtual Hosting wird der HTTP/1.1-Header der
Clients dazu verwendet, den Rechnernamen zu bestimmen.
Dadurch wird es möglich, mehrere Domains unter der gleichen
<acronym>IP</acronym>-Adresse zu betreiben.</para>
<para>Damit der <application>Apache</application> namenbasierte
virtuelle Domains verwalten kann, fügen Sie für jede Webseite
einen separaten <literal>VirtualHost</literal>-Block ein.
Wenn der Webserver beispielsweise <systemitem
class="fqdomainname">www.domain.tld</systemitem> heißt und
die virtuelle Domain <systemitem
class="fqdomainname">www.someotherdomain.tld</systemitem>
einrichtet werden soll, ergänzen Sie
<filename>httpd.conf</filename> um folgende Einträge:</para>
<programlisting>&lt;VirtualHost *&gt;
ServerName <replaceable>www.domain.tld</replaceable>
DocumentRoot <replaceable>/www/domain.tld</replaceable>
&lt;/VirtualHost&gt;
&lt;VirtualHost *&gt;
ServerName <replaceable>www.someotherdomain.tld</replaceable>
DocumentRoot <replaceable>/www/someotherdomain.tld</replaceable>
&lt;/VirtualHost&gt;</programlisting>
<para>Setzen Sie für jeden virtuellen Host die entsprechenden
Werte für <literal>ServerName</literal> und
<literal>DocumentRoot</literal>.</para>
<para>Ausführliche Informationen zum Einrichten von virtuellen
Hosts finden Sie in der offiziellen
<application>Apache</application>-Dokumentation unter <uri
xlink:href="http://httpd.apache.org/docs/vhosts/">
http://httpd.apache.org/docs/vhosts/</uri>.</para>
</sect2>
<sect2>
<title>Häufig verwendete Apache-Module</title>
<indexterm><primary>Apache</primary>
<secondary>Module</secondary></indexterm>
<para><application>Apache</application> verwendet Module, die
den Server um zusätzliche Funktionen erweitern. Eine
vollständige Auflistung der zur Verfügung stehenden Module
und Konfigurationsdetails finden Sie unter <uri
xlink:href="http://httpd.apache.org/docs/current/mod/">
http://httpd.apache.org/docs/current/mod/</uri>.</para>
<para>In &os; können einige Module mit dem Port
<package>www/apache24</package> kompiliert werden. Geben Sie
in <filename>/usr/ports/www/apache24</filename>
<command>make config</command> ein, um zu sehen, welche Module
zur Verfügung stehen und welche Module in der Voreinstellung
aktiviert sind. Wenn ein Modul nicht zusammen mit dem Port
kompiliert wird, bietet die Ports-Sammlung die Möglichkeit
viele Module zu installieren. Dieser Abschnitt beschreibt
drei der am häufigsten verwendeten Module.</para>
<sect3>
<title><filename>mod_ssl</filename></title>
<indexterm>
<primary>Webserver</primary>
<secondary>Verschlüsselung</secondary>
</indexterm>
<indexterm>
<primary>SSL</primary>
</indexterm>
<indexterm>
<primary>Verschlüsselung</primary>
</indexterm>
<para>Das Modul <filename>mod_ssl</filename> verwendet die
<application>OpenSSL</application>-Bibliothek, um über die
Protokolle Secure Sockets Layer (<acronym>SSLv3</acronym>)
sowie Transport Layer Security (<acronym>TLSv1</acronym>)
eine starke Verschlüsselung zu ermöglichen. Mit diesem
Modul können Sie ein signiertes Zertifikat von einer
Zertifizierungsstelle anfordern, damit Sie einen sicheren
Webserver unter &os; betreiben können.</para>
<para>Unter &os; wird das Modul <filename>mod_ssl</filename>
standardmäßig im Port und auch im Paket aktiviert. Die
verfügbaren Konfigurationsanweisungen werden in <uri
xlink:href="http://httpd.apache.org/docs/current/mod/mod_ssl.html">
http://httpd.apache.org/docs/current/mod/mod_ssl.html</uri>
beschrieben.</para>
</sect3>
<sect3>
<title><filename>mod_perl</filename></title>
<indexterm>
<primary>mod_perl</primary>
<secondary>Perl</secondary>
</indexterm>
<para>Das Modul <filename>mod_perl</filename> macht es
möglich, vollständig in <application>Perl</application>
geschriebene <application>Apache</application>-Module zu
erzeugen. Da der
<application>Perl</application>-Interpreter in den Server
eingebettet wird, muss weder ein externer Interpreter noch
<application>Perl</application> zusätzlich aufgerufen
werden.</para>
<para><filename>mod_perl</filename> wird über den Port
oder das Paket <package>www/mod_perl2</package> installiert.
Dokumentation für dieses Modul finden Sie unter <uri
xlink:href="http://perl.apache.org/docs/2.0/index.html">
http://perl.apache.org/docs/2.0/index.html</uri>.</para>
</sect3>
<sect3>
<info>
<title><filename>mod_php</filename></title>
<authorgroup>
<author>
<personname>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
</personname>
<contrib>Geschrieben von </contrib>
</author>
</authorgroup>
</info>
<indexterm>
<primary>mod_php</primary>
<secondary>PHP</secondary>
</indexterm>
<para><firstterm>PHP: Hypertext Preprocessor</firstterm>
(<acronym>PHP</acronym>) ist eine vielseitig
verwendbare Skriptsprache, die besonders für die
Web-Entwicklung geeignet ist. <acronym>PHP</acronym> kann
in <acronym>HTML</acronym> eingebettet werden und ähnelt von
der Syntax her Sprachen wie <application>C</application>,
&java; und <application>Perl</application>. Das
Hauptanliegen von <acronym>PHP</acronym> ist es,
Web-Entwicklern die rasche Erstellung von dynamisch
erzeugten Internetseiten zu ermöglichen.</para>
<para>Damit der <application>Apache</application>-Webserver
<acronym>PHP</acronym>5 unterstützt, der Port oder das Paket
<package>lang/php56</package> installiert werden. Dies wird
die Module installieren und konfigurieren, die für die
Unterstützung von dynamischen
<acronym>PHP</acronym>-Anwendungen benötigt werden. Die
Installation wird automatisch folgende Zeilen in
<filename>/usr/local/etc/apache2<replaceable>4</replaceable>/httpd.conf</filename>
hinzufügen:</para>
<programlisting>LoadModule php5_module libexec/apache24/libphp5.so</programlisting>
<!--
I don't think this is still needed
<programlisting>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>Danach rufen Sie
<command>apachectl</command> auf, um das
<acronym>PHP</acronym>-Modul zu laden:</para>
<screen>&prompt.root; <userinput>apachectl graceful</userinput></screen>
<para>Die <acronym>PHP</acronym>-Unterstützung von
<package>www/mod_php56</package> verfügt nur über wenige
Funktionen. Zusätzliche Funktionen können mit dem Port
<package>lang/php56-extensions</package> installiert werden.
Der Port bietet ein Auswahlmenü, über das Sie
verschiedene <acronym>PHP</acronym>-Erweiterungen
installieren können.</para>
<para>Alternativ können einzelne Erweiterungen über den
jeweiligen Port installieren. Um beispielsweise die
Unterstützung des Datenbankservers
<application>MySQL</application> in <acronym>PHP</acronym>
zu aktivieren, installieren Sie den Port
<filename>databases/php56-mysql</filename>.</para>
<para>Nachdem Sie eine Erweiterung installiert haben,
müssen Sie den
<application>Apache</application>-Server neu starten, damit
die Erweiterung auch erkannt wird:</para>
<screen>&prompt.root; <userinput>apachectl graceful</userinput></screen>
<para>Ab nun wird <application>MySQL</application> von
<application>PHP</application> unterstützt.</para>
</sect3>
</sect2>
<sect2>
<title>Dynamische Webseiten</title>
<indexterm>
<primary>Webserver</primary>
<secondary>dynamisch</secondary>
</indexterm>
<para>Neben <application>mod_perl</application> und
<application>mod_php</application> stehen noch weitere
Sprachen zur Erstellung von dynamischen Inhalten zur
Verfügung. Dazu gehören auch
<application>Django</application> und
<application>Ruby on Rails</application>.</para>
<sect3>
<title>Django</title>
<indexterm><primary>Python</primary></indexterm>
<indexterm><primary>Django</primary></indexterm>
<para>Bei <application>Django</application> handelt es
sich um ein unter der BSD-Lizenz verfügbares
Framework zur schnellen Erstellung von mächtigen
Internet-Applikationen. Es beinhaltet einen
objekt-relationalen Mapper (wodurch Datentypen als
<application>Phyton</application>-Objekte entwickelt werden
können) sowie eine <acronym>API</acronym> für den
dynamischen Datenbankzugriff auf diese Objekte, ohne dass
Entwickler jemals <acronym>SQL</acronym>-Code schreiben
müssen. Zusätzlich existiert ein umfangreiches
Template-System, wodurch die Programmlogik von der
<acronym>HTML</acronym>-Präsentation getrennt werden
kann.</para>
<para><application>Django</application> setzt das Modul
<application>mod_python</application> und eine
<acronym>SQL</acronym>-Datenbank voraus. In &os; wird
bei der Installation von <package>www/py-django</package>
automatisch <filename>mod_python</filename> installiert.
Als Datenbanken werden
<application>PostgreSQL</application>,
<application>MySQL</application> und
<application>SQLite</application> unterstützt, wobei
<application>SQLite</application> die Voreinstellung ist.
Wenn Sie die Datenbank ändern möchten, geben Sie in
<filename>/usr/ports/www/py-django</filename>
<command>make config</command> ein und installieren Sie den
Port neu.</para>
<para>Nachdem <application>Django</application> installiert
ist, benötigt die Anwendung ein Projektverzeichnis und die
<application>Apache</application>-Konfiguration, um den
eingebetteten <application>Python</application>-Interpreter
zu nutzen. Dieser Interpreter wird verwendet um die
Anwendung für spezifische <acronym>URL</acronym>s
der Seite aufrufen.</para>
<para>Damit <application>Apache</application> Anfragen für
bestimmte <acronym>URL</acronym>s an die Web-Applikation
übergeben kann, müssen Sie den vollständigen Pfad zum
Projektverzeichnis in <filename>httpd.conf</filename>
festlegen:</para>
<screen>&lt;Location "/"&gt;
SetHandler python-program
PythonPath "['<replaceable>/pfad/zu/den/django/paketen/</replaceable>'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAutoReload On
PythonDebug On
&lt;/Location&gt;</screen>
<para>Weitere Informationen zur Verwendung von
<application>Django</application> finden Sie unter <uri
xlink:href="https://docs.djangoproject.com/en/1.6/">
https://docs.djangoproject.com/en/1.6/</uri>.</para>
</sect3>
<sect3>
<title>Ruby on Rails</title>
<indexterm><primary>Ruby on Rails</primary></indexterm>
<para><application>Ruby on Rails</application> ist ein
weiteres, als Open Source verfügbares Webframework. Es
bietet einen kompletten Entwicklungsstack
und erlaubt es Webentwicklern, umfangreiche und mächtige
Applikationen in kurzer Zeit zu programmieren. Unter &os;
kann das Framework über den Port oder das Paket
<package>www/rubygem-rails</package> installiert
werden.</para>
<para>Weitere Informationen zur Verwendung von
<application>Ruby on Rails</application> finden Sie unter
<uri xlink:href="http://rubyonrails.org/documentation">
http://rubyonrails.org/documentation</uri>.</para>
</sect3>
</sect2>
</sect1>
<sect1 xml:id="network-ftp">
<!--
<info>
<authorgroup>
<author><personname><firstname>Murray</firstname><surname>Stokely</surname></personname><contrib>Beigetragen von </contrib></author>
</authorgroup>
</info>
-->
<title>File Transfer Protocol (<acronym>FTP</acronym>)</title>
<indexterm><primary>FTP-Server</primary></indexterm>
<para>Das File Transfer Protocol (<acronym>FTP</acronym>)
ermöglicht auf einfache Art und Weise den Dateiaustausch mit
einem <acronym>FTP</acronym>-Server. Der
<acronym>FTP</acronym>-Server <application>ftpd</application>
ist bei &os; bereits im Basisystem enthalten.</para>
<para>&os; verwendet mehrere Konfigurationsdateien, um den Zugriff
auf den <acronym>FTP</acronym> zu kontrollieren. Dieser
Abschnitt fasst diese Dateien zusammen. In &man.ftpd.8; finden
Sie weitere Inforamtionen über den integrierten
<acronym>FTP</acronym>-Server.</para>
<sect2>
<title>Konfiguration</title>
<para>Der wichtigste Punkt ist hier die Entscheidung darüber,
welche Benutzer auf den <acronym>FTP</acronym>-Server
zugreifen dürfen. Ein &os;-System verfügt über diverse
Systembenutzerkonten, die jedoch nicht auf den
<acronym>FTP</acronym>-Server zugreifen sollen. Die Datei
<filename>/etc/ftpusers</filename> enthält alle Benutzer, die
vom <acronym>FTP</acronym>-Zugriff ausgeschlossen sind. In
der Voreinstellung gilt dies auch die gerade erwähnten
Systembenutzerkonten. Sie können über diese Datei weitere
Benutzer vom <acronym>FTP</acronym>-Zugriff
ausschließen.</para>
<para>In einigen Fällen kann es wünschenswert sein, den Zugang
für manche Benutzer einzuschränken, ohne dabei
<acronym>FTP</acronym> komplett zu verbieten. Dazu passen Sie
<filename>/etc/ftpchroot</filename>, wie in &man.ftpchroot.5;
beschrieben, entsprechend an. Diese Datei enthält Benutzer
und Gruppen sowie die für sie geltenden Einschränkungen für
<acronym>FTP</acronym>.</para>
<indexterm>
<primary><acronym>FTP</acronym></primary>
<secondary>anonymous</secondary>
</indexterm>
<para>Um anonymen <acronym>FTP</acronym>-Zugriff auf dem Server
zu aktivieren, muss ein Benutzer <systemitem
class="username">ftp</systemitem> auf dem &os;-System
angelegt werden. Danach können sich Benutzer mit dem
Benutzernamen <systemitem class="username">ftp</systemitem>
oder <systemitem class="username">anonymous</systemitem> am
<acronym>FTP</acronym>-Server anmelden. Das Passwort ist
dabei beliebig, allerdings wird dazu in der Regel eine
E-Mail-Adresse verwendet. Meldet sich ein anonymer Benutzer
an, aktiviert der <acronym>FTP</acronym>-Server
&man.chroot.2;, um den Zugriff auf das Heimatverzeichnis des
Benutzers <systemitem class="username">ftp</systemitem> zu
beschränken.</para>
<para>Es gibt zwei Textdateien, deren Inhalt den
<acronym>FTP</acronym>-Clients bei der Anmeldung angezeigt
wird. Der Inhalt von <filename>/etc/ftpwelcome</filename>
wird angezeigt, bevor der Login-Prompt erscheint. Nach einer
erfolgreichen Anmeldung wird der Inhalt von
<filename>/etc/ftpmotd</filename> angezeigt.
Beachten Sie aber, dass es dabei um einen Pfad relativ zur
Umgebung des anzumeldenden Benutzers handelt. Bei einer
anonymen Anmeldung würde also der Inhalt von
<filename>~ftp/etc/ftpmotd</filename> angezeigt.</para>
<para>Sobald der <acronym>FTP</acronym>-Server konfiguriert ist,
setzen Sie die entsprechende Variable in
<filename>/etc/rc.conf</filename>, damit der Dienst beim
Booten gestartet wird:</para>
<programlisting>ftpd_enable="YES"</programlisting>
<para>Starten Sie den Dienst:</para>
<screen>&prompt.root; <userinput>service ftpd start</userinput></screen>
<para>Testen Sie die Verbindung zum
<acronym>FTP</acronym>-Server, indem Sie folgendes
eingeben:</para>
<screen>&prompt.user; <userinput>ftp localhost</userinput></screen>
</sect2>
<sect2>
<title>Wartung</title>
<indexterm><primary>syslog</primary></indexterm>
<indexterm>
<primary>Logdateien</primary>
<secondary><acronym>FTP</acronym></secondary>
</indexterm>
<para>Der <application>ftpd</application>-Daemon verwendet
&man.syslog.3;, um Protokolldateien zu erstellen. In der
Voreinstellung werden alle <acronym>FTP</acronym> betreffenden
Nachrichten nach
<filename>/var/log/xferlog</filename> geschrieben. Dies lässt
sich aber durch das Einfügen der folgenden Zeile in
<filename>/etc/syslog.conf</filename> ändern:</para>
<programlisting>ftp.info /var/log/xferlog</programlisting>
<indexterm>
<primary><acronym>FTP</acronym></primary>
<secondary>anonymous</secondary>
</indexterm>
<note>
<para>Beachten Sie, dass mit dem Betrieb eines anonymen
<acronym>FTP</acronym>-Servers verschiedene
Sicherheitsrisiken verbunden sind. Problematisch ist hier
vor allem die Erlaubnis zum anonymen Upload von Dateien.
Dadurch könnte der Server zur Verbreitung von illegaler oder
nicht lizensierter Software oder noch Schlimmeren
missbraucht werden. Wenn anonyme
<acronym>FTP</acronym>-Uploads dennoch erforderlich sind,
sollten Sie die Zugriffsrechte so setzen, dass solche
Dateien erst nach Zustimmung eines Administrators von
anderen Benutzern heruntergeladen werden können.</para>
</note>
</sect2>
</sect1>
<sect1 xml:id="network-samba">
<!--
<info>
<authorgroup>
<author><personname><firstname>Murray</firstname><surname>Stokely</surname></personname><contrib>Beigetragen von </contrib></author>
</authorgroup>
</info>
-->
<title>Datei- und Druckserver für
&microsoft.windows;-Clients (Samba)</title>
<indexterm><primary>Samba-Server</primary></indexterm>
<indexterm><primary>Microsoft Windows</primary></indexterm>
<indexterm>
<primary>Dateiserver</primary>
<secondary>Windows-Clients</secondary>
</indexterm>
<indexterm>
<primary>Druckserver</primary>
<secondary>Windows-Clients</secondary>
</indexterm>
<para><application>Samba</application> ist ein beliebtes
Open Source Softwarepaket, das Datei- und Druckdienste über
das <acronym>SMB/CIFS</acronym>-Protokoll zur Verfügung
stellt. Dieses Protokoll ist in &microsoft.windows;-Systemen
enthalten und kann über die Installation der
<application>Samba</application>-Client-Bibliotheken in andere
Betriebssysteme integriert werden. Das Protokoll ermöglicht
es Clients auf freigegebene Daten und Drucker zuzugreifen, so
als ob es sich um lokale Drucker und Festplatten handeln
würde.</para>
<para>Unter &os; können die
<application>Samba</application>-Client-Bibliotheken über den
Port oder das Paket <package>net/samba-smbclient</package>
installiert werden. Der Client ermöglicht es einem
&os;-System auf <acronym>SMB/CIFS</acronym>-Freigaben in einem
&microsoft.windows;-Netzwerk zuzugreifen.</para>
<para>Ein &os;-System kann auch als
<application>Samba</application>-Server agieren, wenn Sie den
Port oder das Paket <package>net/samba46</package>
installieren. Dies erlaubt es dem Administrator
<acronym>SMB/CIFS</acronym>-Freigaben auf dem &os;-System
einzurichten, auf welche dann Clients mit &microsoft.windows;
oder den <application>Samba</application>-Client-Bibliotheken
zugreifen können.</para>
<sect2>
<title>Konfiguration des Servers</title>
<para><application>Samba</application> wird in
<filename>/usr/local/etc/smb4.conf</filename> konfiguriert.
Diese Datei muss erstellt werden, bevor
<application>Samba</application> benutzt werden kann.</para>
<para>Eine einfache <filename>smb4.conf</filename>, wie hier
gezeigt, stellt den Zugriff auf Verzeichnisse und Drucker für
&windows;-Clients in einer Arbeitsgruppe (engl.
<foreignphrase>Workgroup</foreignphrase>) zur Verfügung. In
aufwendigeren Installationen, in denen <acronym>LDAP</acronym>
oder Active Directory zum Einsatz kommt, ist es einfacher die
<filename>smb4.conf</filename> mit dem Werkzeug
&man.samba-tool.8; zu erstellen.</para>
<programlisting>[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = ExampleMachine
wins support = Yes
security = user
passdb backend = tdbsam
# Example: share /usr/src accessible only to 'developer' user
[src]
path = /usr/src
valid users = developer
writable = yes
browsable = yes
read only = no
guest ok = no
public = no
create mask = 0666
directory mask = 0755</programlisting>
<sect3>
<title>Globale Einstellungen</title>
<para>Einstellungen für das Netzwerk werden in
<filename>/usr/local/etc/smb4.conf</filename>
definiert:</para>
<variablelist>
<varlistentry>
<term><literal>workgroup</literal></term>
<listitem>
<para>Der Name der Arbeitsgruppe.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>netbios name</literal></term>
<listitem>
<indexterm><primary>NetBIOS</primary></indexterm>
<para>Der NetBIOS-Namen fest, unter dem der
<application>Samba</application>-Server bekannt ist.
In der Regel handelt es sich dabei um den ersten
Teil des <acronym>DNS</acronym>-Namens des
Servers.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>server string</literal></term>
<listitem>
<para>Legt die Beschreibung fest, die angezeigt wird,
wenn mit <command>net view</command> oder anderen
Netzwerkprogrammen Informationen über den Server
angefordert werden.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>wins support</literal></term>
<listitem>
<para>Legt fest, ob <application>Samba</application> als
<acronym>WINS</acronym>-Server fungieren soll.
Aktivieren Sie die Unterstützung für
<acronym>WINS</acronym> auf maximal einem Server im
Netzwerk.</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
<sect3>
<title>Samba absichern</title>
<para>Die wichtigsten Einstellungen in
<filename>/usr/local/etc/smb4.conf</filename> betreffen
das zu verwendende Sicherheitsmodell sowie das
Backend-Passwortformat. Die folgenden Direktiven steuern
diese Optionen:</para>
<variablelist>
<varlistentry>
<term><literal>security</literal></term>
<listitem>
<para>Die häufigsten Optionen sind
<literal>security = share</literal> und
<literal>security = user</literal>. Wenn die Clients
Benutzernamen verwenden, die den Benutzernamen auf dem
&os;-Rechner entsprechen, dann sollte die Einstellung
<literal>user level</literal> verwendet werden. Dies
ist die Standardeinstellung. Allerdings ist es dazu
erforderlich, dass sich die Clients auf dem Rechner
anmelden, bevor sie auf gemeinsame Ressourcen
zugreifen können.</para>
<para>In der Einstellung <literal>share level</literal>
müssen sich Clients nicht unter Verwendung eines
gültigen Logins auf dem Rechner anmelden, bevor sie
auf gemeinsame Ressourcen zugreifen können. In
früheren <application>Samba</application>-Versionen
war dies die Standardeinstellung.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>passdb backend</literal></term>
<listitem>
<indexterm><primary>NIS+</primary></indexterm>
<indexterm><primary>LDAP</primary></indexterm>
<indexterm><primary>SQL database</primary></indexterm>
<para><application>Samba</application> erlaubt
verschiedene Backend-Authentifizierungsmodelle.
Clients können sich durch LDAP, NIS+, eine
SQL-Datenbank oder eine Passwortdatei
authentifizieren. Die empfohlene
Authentifizierungsmethode, <literal>tdbsam</literal>,
ist ideal für einfache Netzwerke und wird hier
vorgestellt. Für größere oder komplexere Netzwerke
wird <literal>ldapsam</literal> empfohlen.
<literal>smbpasswd</literal> war der frühere Standard
und gilt mittlerweile als veraltet.</para>
</listitem>
</varlistentry>
</variablelist>
</sect3>
<sect3>
<title><application>Samba</application> Benutzer</title>
<para>Damit &windows;-Clients auf die Freigaben zugreifen
können, müssen die &os;-Benutzerkonten in der
<literal>SambaSAMAccount</literal>-Datenbank zugeordnet
werden. Für bereits vorhandene Benutzerkonten kann dazu
&man.pdbedit.8; benutzt werden:</para>
<screen>&prompt.root; <userinput>pdbedit -a <replaceable>username</replaceable></userinput></screen>
<para>Dieser Abschnitt beschreibt lediglich die am häufigsten
verwendeten Einstellungen. Ausführliche Informationen zur
Konfiguration von <application>Samba</application> finden
Sie im <link
xlink:href="http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/">
Official Samba HOWTO</link>.</para>
</sect3>
</sect2>
<sect2>
<title><application>Samba</application> starten</title>
<para>Damit <application>Samba</application> beim Systemstart
automatisch aktiviert wird, fügen Sie die folgende Zeile in
<filename>/etc/rc.conf</filename> ein:</para>
<programlisting>samba_server_enable="YES"</programlisting>
<para>Jetzt kann <application>Samba</application> direkt
gestartet werden:</para>
<screen>&prompt.root; <userinput>service samba_server start</userinput>
Performing sanity check on Samba configuration: OK
Starting nmbd.
Starting smbd.</screen>
<para><application>Samba</application> verwendet drei Daemonen.
Sowohl <application>nmbd</application> als auch
<application>smbd</application> werden durch
<varname>samba_enable</varname> gestartet. Wenn eine
Namensauflösung über <foreignphrase>winbind</foreignphrase>
benötigt wird, setzen Sie zusätzlich:</para>
<programlisting>winbindd_enable="YES"</programlisting>
<para><application>Samba</application> kann jederzeit
durch folgenden Befehl beendet werden:</para>
<screen>&prompt.root; <userinput>service samba_server stop</userinput></screen>
<para><application>Samba</application> ist ein komplexes
Softwarepaket mit umfassenden Funktionen, die eine
weitreichende Integration von &microsoft.windows;-Netzwerken
ermöglichen. Für eine Beschreibung dieser Zusatzfunktionen
sollten Sie sich auf <uri
xlink:href="http://www.samba.org">http://www.samba.org</uri>
umsehen.</para>
</sect2>
</sect1>
<sect1 xml:id="network-ntp">
<!--
<info>
<authorgroup>
<author><personname><firstname>Tom</firstname><surname>Hukins</surname></personname><contrib>Beigetragen von </contrib></author>
</authorgroup>
</info>
-->
<title>Die Uhrzeit mit NTP synchronisieren</title>
<indexterm>
<primary>NTP</primary>
<secondary>ntpd</secondary>
</indexterm>
<para>Die interne Uhrzeit eines Computers ist nie ganz exakt.
Dies ist problematisch, da viele Dienste darauf angewiesen
sind, dass die Computer im Netzwerk die exakte Uhrzeit
übermitteln. Die exakte Uhrzeit ist auch erforderlich um
sicherzustellen, dass die Zeitstempel der Dateien konsistent
bleiben. Das
<foreignphrase>Network Time Protocol</foreignphrase>
(<acronym>NTP</acronym>) bietet die Möglichkeit, die exakte
Uhrzeit in einem Netzwerk zur Verfügung zu stellen.</para>
<para>Mit &man.ntpd.8; enthält &os; ein Werkzeug, das andere
<acronym>NTP</acronym>-Server abfragen kann um die Uhrzeit
auf diesem Computer zu synchronisieren, oder um selbst die
Uhrzeit für andere Computer im Netzwerk bereitzustellen. Die
Server, die abgefragt werden, können lokal oder von einem
<acronym>ISP</acronym> zur Verfügung gestellt werden. Darüber
hinaus gibt es eine <link
xlink:href="http://support.ntp.org/bin/view/Servers/WebHome">
Liste von öffentlich zugänglichen
<acronym>NTP</acronym>-Servern</link>. Falls Sie sich für
einen solchen öffentlichen Server entscheiden, wählen Sie
einen nahegelegenen Server und prüfen Sie die
Nutzungsbedingungen.</para>
<para>Die Auswahl von mehreren <acronym>NTP</acronym>-Servern
wird empfohlen, falls sich ein Server nicht erreichbar ist
oder sich als unzuverlässig herausstellt.
<application>ntpd</application> verwendet die Antworten
anderer Server, um zuverlässige Server zu bestimmen, die dann
bevorzugt abgefragt werden.</para>
<para>Dieser Abschnitt beschreibt die Konfiguration von
<application>ntpd</application> unter &os;. Zusätzliche
Dokumentation im HTML-Format finden Sie in
<filename>/usr/share/doc/ntp/</filename>.</para>
<sect2>
<title><acronym>NTP</acronym> konfigurieren</title>
<indexterm>
<primary>NTP</primary>
<secondary>ntp.conf</secondary>
</indexterm>
<para>&os; enthält mit <application>ntpd</application> ein
Werkzeug, das zur Synchronisation der Uhrzeit verwendet werden
kann. Um <application>ntpd</application> beim Booten zu
aktivieren, fügen Sie den Eintrag
<literal>ntpd_enable="YES"</literal> in
<filename>/etc/rc.conf</filename> ein. Zusätzliche Variablen
können ebenfalls in <filename>/etc/rc.conf</filename> gesetzt
werden. Weitere Details finden Sie in &man.rc.conf.5; und
&man.ntpd.8;.</para>
<para>Das Programm liest <filename>/etc/ntp.conf</filename>
um herauszufinden, welche <acronym>NTP</acronym>-Server
abgefragt werden müssen. Hier ist ein einfaches Beispiel
einer <filename>/etc/ntp.conf</filename>:</para>
<example>
<title>Beispiel einer
<filename>/etc/ntp.conf</filename></title>
<programlisting>server ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net
driftfile /var/db/ntp.drift</programlisting>
</example>
<para>Das Format dieser Datei wird in &man.ntp.conf.5;
beschrieben. Die Option <literal>server</literal> legt die zu
verwendenden Server fest, wobei jeder Server in einer eigenen
Zeile steht. Wenn ein Server mit der Option
<literal>prefer</literal> versehen ist, wird dieser Server
bevorzugt verwendet. Eine Antwort von einem bevorzugten
Server wird verworfen, wenn sie signifikant von den Antworten
anderer Server abweicht, ansonsten wird sie akzeptiert. Die
Option <literal>prefer</literal> sollte nur für sehr
zuverlässige und genaue <acronym>NTP</acronym>-Server
verwendet werden, die über eine spezielle Hardware zur
Zeitüberwachung verfügen.</para>
<para>Die Option <literal>driftfile</literal> legt fest, in
welcher Datei die Abweichungen der Systemuhr protokolliert
werden. <application>ntpd</application> verwendet diese
Datei, um die Systemzeit automatisch anzupassen, selbst wenn
kurzzeitig kein <acronym>NTP</acronym>-Server zur
Synchronisation verfügbar ist. Weiterhin werden in dieser
Datei Informationen über frühere Anworten von
<acronym>NTP</acronym>-Server. Da diese Datei interne
Informationen für <acronym>NTP</acronym> enthält, sollte sie
nicht verändert werden.</para>
<para>In der Voreinstellung ist der
<acronym>NTP</acronym>-Server für alle Rechner im Netzwerk
erreichbar. Die Option <literal>restrict</literal> in
<filename>/etc/ntp.conf</filename> steuert, welche Rechner
auf den Server zugreifen können. Wenn Sie beispielsweise
alle Rechner vom Zugriff auf den
<acronym>NTP</acronym>-Server ausschließen wollen, fügen Sie
folgende Zeile in <filename>/etc/ntp.conf</filename>
ein:</para>
<programlisting>restrict default ignore</programlisting>
<note>
<para>Dieser Eintrag verhindert auch den Zugriff von anderen
<acronym>NTP</acronym>-Servern. Besteht die
Notwendigkeit, sich mit einem externen
<acronym>NTP</acronym>-Server zu synchronisieren, muss
dieser Server explizit zugelassen werden. Weitere
Informationen finden Sie in &man.ntp.conf.5;.</para>
</note>
<para>Wenn Sie nur Rechnern innerhalb des Netzwerks die
Synchronisation mit dem Server erlauben, gleichzeitig
aber verhindern wollen, dass diese den Server
konfigurieren oder als Server für andere Rechner dienen
können, fügen Sie folgende Zeile ein:</para>
<programlisting>restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap</programlisting>
<para><systemitem class="ipaddress">192.168.1.0</systemitem>
ist die lokale Adresse des Netzwerks, <systemitem
class="netmask">255.255.255.0</systemitem> ist die Netzmaske
des Netzwerks.</para>
<para>Es werden mehrere <literal>restict</literal>-Einträge
untstützt. Weitere Details finden Sie im Abschnitt
<literal>Access Control Support</literal> von
&man.ntp.conf.5;.</para>
<para>Sobald <literal>ntpd_enable="YES"</literal> in
<filename>/etc/rc.conf</filename> hinzugefügt wurde,
kann <application>ntpd</application> direkt
gestartet werden:</para>
<screen>&prompt.root; <userinput>service ntpd start</userinput></screen>
</sect2>
<sect2>
<title><acronym>NTP</acronym> mit einer
<acronym>PPP</acronym>-Verbindung verwenden</title>
<para><application>ntpd</application> benötigt keine ständige
Internetverbindung. Wenn Sie sich über eine
<acronym>PPP</acronym>-Verbindung ins Internet einwählen,
sollten Sie verhindern, dass <acronym>NTP</acronym>-Verkehr
eine Verbindung aufbauen oder aufrechterhalten kann. Dies
kann in den <literal>filter</literal>-Direktiven von
<filename>/etc/ppp/ppp.conf</filename> festgelegt werden.
Ein Beispiel:</para>
<programlisting>set filter dial 0 deny udp src eq 123
# Prevent NTP traffic from initiating dial out
set filter dial 1 permit 0 0
set filter alive 0 deny udp src eq 123
# Prevent incoming NTP traffic from keeping the connection open
set filter alive 1 deny udp dst eq 123
# Prevent outgoing NTP traffic from keeping the connection open
set filter alive 2 permit 0/0 0/0</programlisting>
<para>Weitere Informationen finden Sie im Abschnitt
<literal>PACKET FILTERING</literal> von &man.ppp.8; sowie in
den Beispielen unter
<filename>/usr/share/examples/ppp/</filename>.</para>
<note>
<para>Einige Internetprovider blockieren Ports mit niedrigen
Nummern. In solchen Fällen funktioniert NTP leider
nicht, da Antworten eines NTP-Servers den Rechner nicht
erreichen werden.</para>
</note>
</sect2>
</sect1>
<sect1 xml:id="network-iscsi">
<!--
<info>
<authorgroup>
<author>
<firstname>Edward Tomasz</firstname>
<surname>Napierala</surname>
</author>
</authorgroup>
</info>
-->
<title>iSCSI Initiator und Target Konfiguration</title>
<para><acronym>iSCSI</acronym> bietet die Möglichkeit,
Speicherkapazitäten über ein Netzwerk zu teilen. Im Gegensatz
zu <acronym>NFS</acronym>, das auf Dateisystemebene arbeitet,
funktioniert <acronym>iSCSI</acronym> auf
Blockgerätebene.</para>
<para>In der <acronym>iSCSI</acronym>-Terminologie wird das
System, das den Speicherplatz zur Verfügung stellt, als
<emphasis>Target</emphasis> bezeichnet. Der Speicherplatz
selbst kann aus einer physischen Festplatte bestehen, oder auch
aus einem Bereich, der mehrere Festplatten, oder nur Teile einer
Festplatte, repräsentiert. Wenn beispielsweise die
Festplatte(n) mit <acronym>ZFS</acronym> formatiert ist, kann
ein <acronym>zvol</acronym> erstellt werden, welches dann als
<acronym>iSCSI</acronym>-Speicher verwendet werden kann.</para>
<para>Die Clients, die auf den <acronym>iSCSI</acronym>-Speicher
zugreifen, werden <emphasis>Initiator</emphasis> genannt. Ihnen
steht der verfügbare Speicher als rohe, nicht formatierte
Festplatte, die auch als <acronym>LUN</acronym> bezeichnet wird,
zur Verfügung. Die Gerätedateien für die Festplatten erscheinen
in <filename>/dev/</filename> und müssen separat formatiert und
eingehangen werden.</para>
<para>&os; enthält einen nativen,
kernelbasierten <acronym>iSCSI</acronym>
<emphasis>Target</emphasis> und <emphasis>Initiator</emphasis>.
Dieser Abschnitt beschreibt, wie ein &os;-System als Target oder
Initiator konfiguriert wird.</para>
<sect2 xml:id="network-iscsi-target">
<title>Ein <acronym>iSCSI</acronym>-Target konfigurieren</title>
<para>Um ein <acronym>iSCSI</acronym>-Target zu konfigurieren,
erstellen Sie die Konfigurationsdatei
<filename>/etc/ctl.conf</filename> und fügen Sie eine Zeile
in <filename>/etc/rc.conf</filename> hinzu, um
sicherzustellen, dass &man.ctld.8; automatisch beim Booten
gestartet wird. Starten Sie dann den Daemon.</para>
<para>Das folgende Beispiel zeigt eine einfache
<filename>/etc/ctl.conf</filename>. Eine vollständige
Beschreibung dieser Datei und der verfügbaren Optionen finden
Sie in &man.ctl.conf.5;.</para>
<programlisting>portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2012-06.com.example:target0 {
auth-group no-authentication
portal-group pg0
lun 0 {
path /data/target0-0
size 4G
}
}</programlisting>
<para>Der erste Eintrag definiert die Portalgruppe
<literal>pg0</literal>. Portalgruppen legen fest, auf welchen
Netzwerk-Adressen der &man.ctld.8;-Daemon Verbindungen
entgegennehmen wird. Der Eintrag
<literal>discovery-auth-group no-authentication</literal>
zeigt an, dass jeder Initiator
<acronym>iSCSI</acronym>-Targets suchen darf, ohne sich
authentifizieren zu müssen. Die dritte und vierte Zeilen
konfigurieren &man.ctld.8; so, dass er auf allen
<acronym>IPv4</acronym>- (<literal>listen 0.0.0.0</literal>)
und <acronym>IPv6</acronym>-Adressen
(<literal>listen [::]</literal>) auf dem Standard-Port 3260
lauscht.</para>
<para>Es ist nicht zwingend notwendig eine Portalgruppe zu
definieren, da es bereits eine integrierte Portalgruppe namens
<literal>default</literal> gibt. In diesem Fall ist der
Unterschied zwischen <literal>default</literal> und
<literal>pg0</literal> der, dass bei
<literal>default</literal> eine Authentifizierung nötig ist,
während bei <literal>pg0</literal> die Suche nach Targets
immer erlaubt ist.</para>
<para>Der zweite Eintrag definiert ein einzelnes Target. Ein
Target hat zwei mögliche Bedeutungen: eine Maschine die
<acronym>iSCSI</acronym> bereitstellt, oder eine Gruppe von
<acronym>LUN</acronym>s. Dieses Beispiel verwendet die
letztere Bedeutung, wobei
<literal>iqn.2012-06.com.example:target0</literal> der Name
des Targets ist. Dieser Name ist nur für Testzwecke geeignet.
Für den tatsächlichen Gebrauch ändern Sie
<literal>com.example</literal> auf einen echten, rückwärts
geschriebenen Domainnamen. <literal>2012-06</literal> steht
für das Jahr und den Monat, an dem die Domain erworben
wurde. <literal>target0</literal> darf einen beliebigen
Wert haben und in der Konfigurationsdatei darf eine beliebige
Anzahl von Targets definiert werden.</para>
<para>Der Eintrag
<literal>auth-group no-authentication</literal> erlaubt es
allen Initiatoren sich mit dem angegebenen Target zu verbinden
und <literal>portal-group pg0</literal> macht das Target über
die Portalgruppe <literal>pg0</literal> erreichbar.</para>
<para>Die nächste Sektion definiert die <acronym>LUN</acronym>.
Jede <acronym>LUN</acronym> wird dem Initiator als separate
Platte präsentiert. Für jedes Target können mehrere
<acronym>LUN</acronym>s definiert werden. Jede
<acronym>LUN</acronym> wird über eine Nummer identifiziert,
wobei <acronym>LUN</acronym> 0 verpflichtend ist. Die Zeile
mit dem Pfad <literal>path /data/target0-0</literal> definiert
den absoluten Pfad zu der Datei oder des zvols für die
<acronym>LUN</acronym>. Der Pfad muss vorhanden sein, bevor
&man.ctld.8; gestartet wird. Die zweite Zeile ist optional
und gibt die Größe der <acronym>LUN</acronym> an. Als
nächstes fügen Sie folgende Zeile in
<filename>/etc/rc.conf</filename> ein, um &man.ctld.8;
automatisch beim Booten zu starten:</para>
<programlisting>ctld_enable="YES"</programlisting>
<para>Um &man.ctld.8; jetzt zu starten, geben Sie dieses
Kommando ein:</para>
<screen>&prompt.root; <userinput>service ctld start</userinput></screen>
<para>Der &man.ctld.8;-Daemon liest beim Start
<filename>/etc/ctl.conf</filename>. Wenn diese Datei nach dem
Starten des Daemons bearbeitet wird, verwenden Sie folgenden
Befehl, damit die Änderungen sofort wirksam werden:</para>
<screen>&prompt.root; <userinput>service ctld reload</userinput></screen>
<sect3>
<title>Authentifizierung</title>
<para>Die vorherigen Beispiele sind grundsätzlich unsicher, da
keine Authentifizierung verwendet wird und jedermann vollen
Zugriff auf alle Targets hat. Um für den Zugriff auf die
Targets einen Benutzernamen und ein Passwort vorauszusetzen,
ändern Sie die Konfigurationsdatei wie folgt:</para>
<programlisting>auth-group ag0 {
chap username1 secretsecret
chap username2 anothersecret
}
portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2012-06.com.example:target0 {
auth-group ag0
portal-group pg0
lun 0 {
path /data/target0-0
size 4G
}
}</programlisting>
<para>Die Sektion <literal>auth-group</literal> definiert die
Benutzernamen und Passwörter. Um sich mit
<literal>iqn.2012-06.com.example:target0</literal> zu
verbinden, muss ein Initiator zuerst einen Benutzernamen
und ein Passwort angeben. Eine Suche nach Targets wird
jedoch immer noch ohne Authentifizierung gestattet. Um
eine Authentifizierung zu erfordern, setzen Sie
<literal>discovery-auth-group</literal> auf eine definierte
<literal>auth-group</literal> anstelle von
<literal>no-autentication</literal>.</para>
<para>In der Regel wird für jeden Initiator ein einzelnes
Target exportiert. In diesem Beispiel wird der Benutzername
und das Passwort direkt im Target-Eintrag festgelegt:</para>
<programlisting>target iqn.2012-06.com.example:target0 {
portal-group pg0
chap username1 secretsecret
lun 0 {
path /data/target0-0
size 4G
}
}</programlisting>
</sect3>
</sect2>
<sect2 xml:id="network-iscsi-initiator">
<title>Einen <acronym>iSCSI</acronym>-Initiator
konfigurieren</title>
<note>
<para>Der in dieser Sektion beschriebene
<acronym>iSCSI</acronym>-Initiator wird seit &os;
10.0-RELEASE unterstützt. Lesen Sie &man.iscontrol.8;, wenn
Sie den <acronym>iSCSI</acronym>-Initiator mit älteren
Versionen benutzen möchten.</para>
</note>
<para>Um den Initiator zu verwenden, muss zunächst ein
<acronym>iSCSI</acronym>-Daemon gestartet sein. Der
Daemon des Initiators benötigt keine Konfigurationsdatei. Um
den Daemon automatisch beim Booten zu starten, fügen Sie
folgende Zeile in <filename>/etc/rc.conf</filename>
ein:</para>
<programlisting>iscsid_enable="YES"</programlisting>
<para>Um &man.iscsid.8; jetzt zu starten, geben Sie dieses
Kommando ein:</para>
<screen>&prompt.root; <userinput>service iscsid start</userinput></screen>
<para>Die Verbindung mit einem Target kann mit, oder ohne eine
Konfigurationsdatei <filename>/etc/iscsi.conf</filename>
durchgeführt werden. Dieser Abschnitt beschreibt beide
Möglichkeiten.</para>
<sect3>
<title>Verbindung zu einem Target herstellen - ohne
Konfigurationsdatei</title>
<para>Um einen Initiator mit einem Target zu verbinden, geben
Sie die <acronym>IP</acronym>-Adresse des Portals und den
Namen des Ziels an:</para>
<screen>&prompt.root; <userinput>iscsictl -A -p <replaceable>10.10.10.10</replaceable> -t <replaceable>iqn.2012-06.com.example:target0</replaceable></userinput></screen>
<para>Um zu überprüfen, ob die Verbindung gelungen ist, rufen
Sie <command>iscsictl</command> ohne Argumente auf. Die
Ausgabe sollte in etwa wie folgt aussehen:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0</programlisting>
<para>In diesem Beispiel wurde die
<acronym>iSCSI</acronym>-Sitzung mit der
<acronym>LUN</acronym> <filename>/dev/da0</filename>
erfolgreich hergestellt. Wenn das Target
<literal>iqn.2012-06.com.example:target0</literal> mehr als
nur eine <acronym>LUN</acronym> exportiert, werden mehrere
Gerätedateien in der Ausgabe angezeigt:</para>
<screen>Connected: da0 da1 da2.</screen>
<para>Alle Fehler werden auf die Ausgabe und in die
Systemprotokolle geschrieben. Diese Meldung deutet
beispielsweise darauf hin, dass der &man.iscsid.8;-Daemon
nicht ausgeführt wird:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8)</programlisting>
<para>Die folgende Meldung deutet auf ein Netzwerkproblem hin,
zum Beispiel eine falsche <acronym>IP</acronym>-Adresse oder
einen falschen Port:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.11 Connection refused</programlisting>
<para>Diese Meldung bedeutet, dass der Name des Targets falsch
angegeben wurde:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Not found</programlisting>
<para>Diese Meldung bedeutet, dass das Target eine
Authentifizierung erfordert:</para>
<programlisting>Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Authentication failed</programlisting>
<para>Verwenden Sie diese Syntax, um einen
<acronym>CHAP</acronym>-Benutzernamen und ein Passwort
anzugeben:</para>
<screen>&prompt.root; <userinput>iscsictl -A -p <replaceable>10.10.10.10</replaceable> -t <replaceable>iqn.2012-06.com.example:target0</replaceable> -u <replaceable>user</replaceable> -s <replaceable>secretsecret</replaceable></userinput></screen>
</sect3>
<sect3>
<title>Verbindung mit einem Target herstellen - mit
Konfigurationsdatei</title>
<para>Wenn Sie für die Verbindung eine Konfigurationsdatei
verwenden möchten, erstellen Sie
<filename>/etc/iscsi.conf</filename> mit etwa folgendem
Inhalt:</para>
<programlisting>t0 {
TargetAddress = 10.10.10.10
TargetName = iqn.2012-06.com.example:target0
AuthMethod = CHAP
chapIName = user
chapSecret = secretsecret
}</programlisting>
<para><literal>t0</literal> gibt den Namen der Sektion in der
Konfigurationsdatei an. Diser Name wird vom Initiator
benutzt, um zu bestimmen, welche Konfiguration verwendet
werden soll. Die anderen Einträge legen die Parameter fest,
die während der Verbindung verwendet werden.
<literal>TargetAddress</literal> und
<literal>TargetName</literal> müssen angegeben werden,
die restlichen sind optional. In diesen Beispiel wird
der <acronym>CHAP</acronym>-Benuztername und das Passwort
angegeben.</para>
<para>Um sich mit einem bestimmten Target zu verbinden, geben
Sie dessen Namen an:</para>
<screen>&prompt.root; <userinput>iscsictl -An <replaceable>t0</replaceable></userinput></screen>
<para>Um sich stattdessen mit allen definierten Targets aus
der Konfigurationsdatei zu verbinden, verwenden Sie:</para>
<screen>&prompt.root; <userinput>iscsictl -Aa</userinput></screen>
<para>Damit sich der Initiator automatisch mit allen Targets
aus <filename>/etc/iscsi.conf</filename> verbindet, fügen
Sie folgendes in <filename>/etc/rc.conf</filename>
hinzu:</para>
<programlisting>iscsictl_enable="YES"
iscsictl_flags="-Aa"</programlisting>
</sect3>
</sect2>
</sect1>
</chapter>