Index: head/de_DE.ISO8859-1/books/handbook/config/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/config/chapter.xml (revision 48864) +++ head/de_DE.ISO8859-1/books/handbook/config/chapter.xml (revision 48865) @@ -1,3649 +1,3916 @@ Konfiguration und Tuning Chern Lee Geschrieben von Mike Smith Nach einem Tutorium von Matt Dillon Basiert ebenfalls auf tuning(7) von Martin Heinen Übersetzt von Übersicht System-Konfiguration System-Optimierung Die richtige Systemkonfiguration ist einer der wichtigsten Aspekte unter &os;. Dieses Kapitel beschreibt die Konfiguration von &os; sowie Maßnahmen zur Leistungssteigerung von &os;-Systemen. Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie Folgendes wissen: Die Grundlagen der Konfiguration von rc.conf und die Skripte zum Starten von Anwendungen in /usr/local/etc/rc.d. Wie Sie Netzwerkkarten konfigurieren und testen. Wie Sie virtuelle Hosts und Netzwerkgeräte konfigurieren. Wie Sie die verschiedenen Konfigurationsdateien in /etc benutzen. Wie Sie mit &os; mit &man.sysctl.8;-Variablen einstellen können. Wie Sie die Platten-Performance einstellen und Kernel-Parameter modifizieren können. Bevor Sie dieses Kapitel lesen, sollten Sie die Grundlagen von &unix; und &os; () verstehen. Damit vertraut sein, wie Sie einen Kernel konfigurieren und kompilieren (). Start von Diensten Tom Rhodes Beigetragen von Dienste Viele Benutzer installieren Software Dritter auf &os; mithilfe der Ports-Sammlung. Häufig soll die Software bei einem Systemstart mitgestartet werden. Beispielsweise sollen die Dienste mail/postfix oder www/apache22 nach einem Systemstart laufen. Dieser Abschnitt stellt die Startprozeduren für Software Dritter vor. Unter &os; werden die meisten der im System enthaltenen Dienste wie &man.cron.8; mithilfe von Systemskripten gestartet. Dienste über das <filename>rc.d</filename>-System starten Mit rc.d lässt sich der Start von Anwendungen besser steuern und es sind mehr Funktionen verfügbar. Mit den in besprochenen Schlüsselwörtern können Anwendungen in einer bestimmten Reihenfolge gestartet werden und Optionen können in rc.conf statt fest im Startskript der Anwendung festgelegt werden. Ein einfaches Startskript sieht wie folgt aus: #!/bin/sh # # PROVIDE: utility # REQUIRE: DAEMON # KEYWORD: shutdown . /etc/rc.subr name=utility rcvar=utility_enable command="/usr/local/sbin/utility" load_rc_config $name # # DO NOT CHANGE THESE DEFAULT VALUES HERE # SET THEM IN THE /etc/rc.conf FILE # utility_enable=${utility_enable-"NO"} pidfile=${utility_pidfile-"/var/run/utility.pid"} run_rc_command "$1" Dieses Skript stellt sicher, dass utility nach den DAEMON-Pseudodiensten gestartet wird. Es stellt auch eine Methode bereit, die Prozess-ID (PID) der Anwendung in einer Datei zu speichern. In /etc/rc.conf könnte für diese Anwendung die folgende Zeile stehen: utility_enable="YES" Die Methode erleichtert den Umgang mit Kommandozeilenargumenten, bindet Funktionen aus /etc/rc.subr ein, ist kompatibel zu &man.rcorder.8; und lässt sich über rc.conf leichter konfigurieren. Andere Arten, um Dienste zu starten Andere Dienste können über &man.inetd.8; gestartet werden. Die Konfiguration von &man.inetd.8; wird in ausführlich beschrieben. Systemdienste können auch mit &man.cron.8; gestartet werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil &man.cron.8; die Prozesse unter dem Eigentümer der crontab startet, ist es möglich, dass Dienste von normalen Benutzern gestartet und gepflegt werden können. Für die Zeitangabe in &man.cron.8; kann @reboot eingesetzt werden. Damit wird das Kommando gestartet, wenn &man.cron.8; kurz nach dem Systemboot gestartet wird. &man.cron.8; konfigurieren Tom Rhodes Beigetragen von cron konfigurieren Ein sehr nützliches Werkzeug von &os; ist cron. Dieses Programm läuft im Hintergrund und überprüft fortlaufend /etc/crontab und /var/cron/tabs. In diesen Dateien wird festgelegt, welche Programme zu welchem Zeitpunkt von cron ausgeführt werden sollen. Das Werkzeug verwendet zwei verschiedene Konfigurationsdateien: die System-crontab und die Benutzer-crontabs. Der einzige Unterschied zwischen beiden Formaten ist das sechste Feld. In der System-crontab gibt das sechste Feld den Benutzer an, mit dem cron das Kommando ausführen wird. In einer Benutzer-crontab werden alle Kommandos unter dem Benutzer ausgeführt, welcher die crontab erstellt hat. Hier ist das sechste Feld das letzte Feld. Dies ist ein wichtiges Sicherheitsmerkmal. Das letzte Feld bezeichnet immer das Kommando, das ausgeführt werden soll. Benutzer können mit Benutzer-crontabs ohne root-Rechte Befehle terminieren. Die Kommandos in Benutzer-crontabs laufen unter dem Benutzer, der die crontab erstellt hat. Der Benutzer root kann, wie jeder andere Benutzer, eine Benutzer-crontab besitzen. Die Benutzer-crontab von root ist nicht mit /etc/crontab, der System-crontab, zu verwechseln. Da die System-crontab die angegebenen Kommandos effektiv als root-Benutzer aufruft, besteht normalerweise keine Notwendigkeit eine eigene Benutzer-crontab für root zu erstellen. Hier ist ein Beispieleintrag aus der System-crontab, /etc/crontab: # /etc/crontab - root's crontab for FreeBSD # #$FreeBSD$ # # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # # #minute hour mday month wday who command # */5 * * * * root /usr/libexec/atrun Das Zeichen # am Zeilenanfang leitet, wie in den meisten Konfigurationsdateien, einen Kommentar ein. Benutzen Sie Kommentare, um die Funktion eines Eintrags zu erläutern. Kommentare müssen in einer extra Zeile stehen. Sie können nicht in derselben Zeile wie ein Kommando stehen, da sie sonst Teil des Kommandos wären. Leerzeilen in dieser Datei werden ignoriert. Umgebungsvariablen werden mit dem Gleichheits-Zeichen (=) festgelegt. Im Beispiel werden die Variablen SHELL, PATH und HOME definiert. Wenn die Variable SHELL nicht definiert wird, benutzt cron die Bourne Shell. Wird die Variable PATH nicht gesetzt, müssen alle Pfadangaben absolut sein, da es keinen Vorgabewert für PATH gibt. In dieser Zeile werden sieben Felder beschrieben: minute, hour, mday, month, wday, who und command. Die ersten Felder legen den Zeitpunkt fest, an dem ein Kommando laufen soll. Das Feld minute legt die Minute fest, das Feld hour die Stunde, das Feld mday den Tag des Monats. Im Feld month wird der Monat und im Feld wday der Wochentag festgelegt. Alle Felder müssen numerische Werte enthalten und die Zeitangaben sind im 24-Stunden-Format. Das Zeichen * repräsentiert dabei alle möglichen Werte für dieses Feld. Das Feld who gibt es nur in der Datei /etc/crontab und gibt den Account an, unter dem das Kommando laufen soll. Im letzten Feld wird schließlich das auszuführende Kommando angegeben. Diese Zeile definiert die Zeitpunkte an denen atrun laufen soll. Dieses Beispiel verwendet die Zeichenfolge */5 gefolgt von mehreren *-Zeichen. Das Zeichen * ist ein Platzhalter und steht für jede mögliche Zeit. Diese Zeile führt /usr/libexec/atrun unter dem root-Account alle fünf Minuten aus. Bei den Kommandos können beliebige Optionen angegeben werden. Wenn das Kommando zu lang ist und auf der nächsten Zeile fortgesetzt werden soll, muss am Ende der Zeile das Fortsetzungszeichen (\) angegeben werden. Bis auf das sechste Feld, das den Account angibt, sieht jede &man.crontab.5; so wie das Beispiel aus. Das sechste Feld existiert nur in der System-crontab. In den restlichen &man.crontab.5;-Dateien fehlt dieses Feld. <filename>crontab</filename> installieren Die nachstehende Prozedur gilt nur für Benutzer-crontabs. Die System-crontab kann mit einem Editor bearbeitet werden. cron bemerkt, dass sich die Datei geändert hat und wird die neue Version benutzen. Lesen Sie bitte auch die FAQ zur Meldung root: not found. Eine Benutzer-crontab, beispielsweise die Datei crontab-datei, können Sie mit jedem Editor erstellen. Die Benutzer-crontab installieren Sie mit dem nachstehenden Befehl: &prompt.root; crontab crontab-datei Das Argument zum Befehl &man.crontab.5; ist die vorher erstellte crontab-datei. Der Befehl crontab -l zeigt die installierte crontab-Datei an. Benutzer, die eine eigene crontab-Datei ohne Vorlage erstellen wollen, können den Befehl crontab -e verwenden. Dieser Befehl ruft einen Editor auf und installiert beim Verlassen des Editors die crontab-Datei. Wollen Sie die installierte Benutzer-crontab entfernen, rufen Sie den crontab -r. Dienste unter &os; verwalten Tom Rhodes Beigetragen von &os; verwendet die vom &man.rc.8;-System bereit gestellten Startskripten beim Systemstart und für die Verwaltung von Diensten. Die Skripte sind in /etc/rc.d abgelegt und bieten grundlegende Dienste an, die über die Optionen , und des &man.service.8; Kommandos kontrolliert werden können. Beispielsweise kann &man.sshd.8; mit dem nachstehenden Kommando neu gestartet werden: &prompt.root; service sshd restart Analog können Sie andere Dienste starten und stoppen. Normalerweise werden die Dienste beim Systemstart über Einträge in der Datei &man.rc.conf.5; automatisch gestartet. &man.natd.8; wird zum Beispiel mit dem folgenden Eintrag in /etc/rc.conf aktiviert: natd_enable="YES" Wenn dort bereits die Zeile existiert, ändern Sie in . Die &man.rc.8;-Skripten starten, wie unten beschrieben, auch abhängige Dienste. Da das &man.rc.8;-System primär zum automatischen Starten und Stoppen von Systemdiensten dient, funktionieren die Optionen , und nur, wenn die entsprechenden Variablen in /etc/rc.conf gesetzt sind. Beispielsweise funktioniert sshd restart nur dann, wenn in /etc/rc.conf die Variable sshd_enable auf gesetzt wurde. Wenn Sie die Optionen , oder unabhängig von den Einstellungen in /etc/rc.conf benutzen wollen, müssen Sie den Optionen mit dem Präfix one verwenden. Um beispielsweise sshd unabhängig von den Einstellungen in /etc/rc.conf neu zu starten, benutzen Sie das nachstehende Kommando: &prompt.root; service sshd onerestart Ob ein Dienst in /etc/rc.conf aktiviert ist, können Sie herausfinden, indem Sie das entsprechende &man.rc.8;-Skript mit der Option aufrufen. Dieses Beipiel prüft, ob der sshd-Dienst in /etc/rc.conf aktiviert ist: &prompt.root; service sshd rcvar # sshd # sshd_enable="YES" # (default: "") Die Zeile # sshd wird von dem Kommando ausgegeben; sie kennzeichnet nicht die Eingabeaufforderung von root. Ob ein Dienst läuft, kann mit abgefragt werden. Das folgende Kommando überprüft, ob sshd auch wirklich gestartet wurde: &prompt.root; service sshd status sshd is running as pid 433. Einige Dienste können über die Option neu initialisiert werden. Dazu wird dem Dienst über ein Signal mitgeteilt, dass er seine Konfigurationsdateien neu einlesen soll. Oft wird dazu das Signal SIGHUP verwendet. Beachten Sie aber, dass nicht alle Dienste diese Option unterstützen. Die meisten Systemdienste werden beim Systemstart vom &man.rc.8;-System gestartet. Zum Beispiel aktiviert das Skript /etc/rc.d/bgfsck die Prüfung von Dateisystemen im Hintergrund. Das Skript gibt die folgende Meldung aus, wenn es gestartet wird: Starting background file system checks in 60 seconds. Dieses Skript wird während des Systemstarts ausgeführt und führt eine Überprüfung der Dateisysteme im Hintergrund durch. Viele Systemdienste hängen von anderen Diensten ab. &man.yp.8; und andere RPC-basierende Systeme hängen beispielsweise von dem rpcbind-Dienst ab. Im Kopf der Startskripten befinden sich die Informationen über Abhängigkeiten von anderen Diensten und weitere Metadaten.Mithilfe dieser Daten bestimmt das Programm &man.rcorder.8; beim Systemstart die Startreihenfolge der Dienste. Folgende Schlüsselwörter müssen im Kopf aller Startskripten verwendet werden, da sie von &man.rc.subr.8; zum Aktivieren des Startskripts benötigt werden: PROVIDE: Gibt die Namen der Dienste an, die mit dieser Datei zur Verfügung gestellt werden. Die folgenden Schlüsselwörter können im Kopf des Startskripts angegeben werden. Sie sind zwar nicht unbedingt notwendig, sind aber hilfreich beim Umgang mit &man.rcorder.8;: REQUIRE: Gibt die Namen der Dienste an, von denen dieser Dienst abhängt. Ein Skript, das dieses Schlüsselwort enthält wird nach den angegebenen Diensten ausgeführt. BEFORE: Zählt Dienste auf, die auf diesen Dienst angewiesen sind. Ein Skript, dass dieses Schlüsselwort enthält wird vor den angegebenen Diensten ausgeführt. Durch das Verwenden dieser Schlüsselwörter kann ein Administrator die Startreihenfolge von Systemdiensten feingranuliert steuern, ohne mit den Schwierigkeiten des runlevel-Systems anderer &unix; Systeme kämpfen zu müssen. Weitere Informationen über das &man.rc.8;-System finden Sie in &man.rc.8; und &man.rc.subr.8;. Wenn Sie eigene rc.d-Skripte schreiben wollen, sollten Sie diesen Artikel lesen. Systemspezifische Konfiguration rc-Dateien rc.conf Informationen zur Systemkonfiguration sind hauptsächlich in /etc/rc.conf, die meist beim Start des Systems verwendet wird, abgelegt. Sie enthält die Konfigurationen für die rc* Dateien. In rc.conf werden die Vorgabewerte aus /etc/defaults/rc.conf überschrieben. Die Vorgabedatei sollte nicht editiert werden. Stattdessen sollten alle systemspezifischen Änderungen in rc.conf vorgenommen werden. Um den administrativen Aufwand gering zu halten, existieren in geclusterten Anwendungen mehrere Strategien, globale Konfigurationen von systemspezifischen Konfigurationen zu trennen. Der empfohlene Weg hält die globale Konfiguration in einer separaten Datei z.B. /etc/rc.conf.local. Zum Beispiel so: /etc/rc.conf: sshd_enable="YES" keyrate="fast" defaultrouter="10.1.1.254" /etc/rc.conf.local: hostname="node1.example.org" ifconfig_fxp0="inet 10.1.1.1/8" /etc/rc.conf kann dann auf jedes System mit rsync oder puppet verteilt werden, während /etc/rc.conf.local dabei systemspezifisch bleibt. Bei einem Upgrade des Systems mit &man.sysinstall.8; oder make world wird /etc/rc.conf nicht überschrieben, so dass die Systemkonfiguration erhalten bleibt. /etc/rc.conf und /etc/rc.conf.local werden von &man.sh.1; gelesen. Dies erlaubt es dem Systemadministrator, komplexe Konfigurationsszenarien zu erstellen. Lesen Sie &man.rc.conf.5;, um weitere Informationen zu diesem Thema zu erhalten. Einrichten von Netzwerkkarten Marc Fonvieille Beigetragen von Netzwerkkarten einrichten Die Konfiguration einer Netzwerkkarte gehört zu den alltäglichen Aufgaben eines &os; Administrators. Bestimmen des richtigen Treibers Netzwerkkarten Treiber Ermitteln Sie zunächst das Modell der Netzwerkkarte und den darin verwendeten Chip. &os; unterstützt eine Vielzahl von Netzwerkkarten. Prüfen Sie die Hardware-Kompatibilitätsliste für das &os; Release, um zu sehen ob die Karte unterstützt wird. Wenn die Karte unterstützt wird, müssen Sie den Treiber für die Karte bestimmen. /usr/src/sys/conf/NOTES und /usr/src/sys/arch/conf/NOTES enthalten eine Liste der verfügbaren Treiber mit Informationen zu den unterstützten Chipsätzen. Wenn Sie sich nicht sicher sind, ob Sie den richtigen Treiber ausgewählt haben, lesen Sie die Hilfeseite des Treibers. Sie enthält weitere Informationen über die unterstützten Geräte und bekannte Einschränkungen des Treibers. Die Treiber für gebräuchliche Netzwerkkarten sind schon im GENERIC-Kernel enthalten, so dass die Karte während des Systemstarts erkannt werden sollte. In diesem Beispiel findet das System zwei Karten, die den &man.dc.4;-Treiber benutzen: dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 miibus0: <MII bus> on dc0 bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0 bmtphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc0: Ethernet address: 00:a0:cc:da:da:da dc0: [ITHREAD] dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 miibus1: <MII bus> on dc1 bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1 bmtphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: Ethernet address: 00:a0:cc:da:da:db dc1: [ITHREAD] Ist der Treiber für die Netzwerkkarte nicht in GENERIC enthalten, muss zunächst ein Treiber geladen werden, um die Karte konfigurieren und benutzen zu können. Dafür gibt es zwei Methoden: Am einfachsten ist es, das Kernelmodul für die Karte mit &man.kldload.8; zu laden. Um den Treiber automatisch beim Systemstart zu laden, fügen Sie die entsprechende Zeile in /boot/loader.conf ein. Es gibt nicht für alle Karten Kernelmodule. Alternativ kann der Treiber für die Karte fest in den Kernel eingebunden werden. Lesen Sie dazu /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES und die Hilfeseite des Treibers, den Sie in den Kernel einbinden möchten, an. Die Übersetzung des Kernels wird in beschrieben. Wenn die Karte während des Systemstarts vom Kernel erkannt wurde, muss der Kernel nicht neu übersetzt werden. &windows;-<acronym>NDIS</acronym>-Treiber einsetzen NDIS NDISulator &windows;-Treiber µsoft.windows; Gerätetreiber KLD (kernel loadable object) Leider stellen nach wie vor viele Unternehmen die Spezifikationen ihrer Treiber der Open Source Gemeinde nicht zur Verfügung, weil sie diese Informationen als Geschäftsgeheimnisse betrachten. Daher haben die Entwickler von &os; und anderen Betriebssystemen nur zwei Möglichkeiten. Entweder versuchen sie in einem aufwändigen Prozess den Treiber durch Reverse Engineering nachzubauen, oder sie versuchen, die vorhandenen Binärtreiber der µsoft.windows;-Plattform zu verwenden. &os; bietet native Unterstützung für die Network Driver Interface Specification (NDIS). &man.ndisgen.8; wird benutzt, um einen &windowsxp;-Treiber in ein Format zu konvertieren, das von &os; verwendet werden kann. Da der &man.ndis.4;-Treiber einen &windowsxp;-Binärtreiber nutzt, kann er nur auf &i386;- und amd64-Systemen verwendet werden. Unterstützt werden PCI, CardBus, PCMCIA und USB-Geräte. Um den NDISulator zu verwenden, benötigen Sie drei Dinge: Die &os; Kernelquellen Den &windowsxp;-Binärtreiber mit der Erweiterung .SYS Die Konfigurationsdatei des &windowsxp;-Treibers mit der Erweiterung .INF Laden Sie die .SYS- und .INF-Dateien für die Karte. Diese befinden sich meistens auf einer beigelegten CD-ROM, oder können von der Internetseite des Herstellers heruntergeladen werden. In den folgenden Beispielen werden die Dateien W32DRIVER.SYS und W32DRIVER.INF verwendet. Die Architektur des Treibers muss zur jeweiligen Version von &os; passen. Benutzen Sie einen &windows; 32-bit Treiber für &os;/i386. Für &os;/amd64 wird ein &windows; 64-bit Treiber benötigt. Als Nächstes kompilieren Sie den binären Treiber, um ein Kernelmodul zu erzeugen. Dazu rufen Sie als root &man.ndisgen.8; auf: &prompt.root; ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS Dieses Kommando arbeitet interaktiv, benötigt es weitere Informationen, so fragt es Sie danach. Das Ergebnis ist ein neu erzeugtes Kernelmodul im aktuellen Verzeichnis. Benutzen Sie &man.kldload.8; um das neue Modul zu laden: &prompt.root; kldload ./W32DRIVER.ko Neben dem erzeugten Kernelmodul müssen auch die Kernelmodule ndis.ko und if_ndis.ko geladen werden. Dies passiert automatisch, wenn Sie ein von &man.ndis.4; abhängiges Modul laden. Andernfalls können die Module mit den folgenden Kommandos manuell geladen werden: &prompt.root; kldload ndis &prompt.root; kldload if_ndis Der erste Befehl lädt den &man.ndis.4;-Miniport-Treiber, der zweite das tatsächliche Netzwerkgerät. Überprüfen Sie die Ausgabe von &man.dmesg.8; auf eventuelle Fehler während des Ladevorgangs. Gab es dabei keine Probleme, sollte die Ausgabe wie folgt aussehen: ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1 ndis0: NDIS API version: 5.0 ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5 ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps Ab jetzt kann das Gerät ndis0 wie jede andere Netzwerkkarte konfiguriert werden. Um die &man.ndis.4;-Module automatisch beim Systemstart zu laden, kopieren Sie das erzeugte Modul W32DRIVER_SYS.ko nach /boot/modules. Danach fügen Sie die folgende Zeile in /boot/loader.conf ein: W32DRIVER_SYS_load="YES" Konfiguration von Netzwerkkarten Netzwerkkarten einrichten Nachdem der richtige Treiber für die Karte geladen ist, muss die Karte konfiguriert werden. Unter Umständen ist die Karte schon während der Installation mit &man.bsdinstall.8; konfiguriert worden. Das nachstehende Kommando zeigt die Konfiguration der Netzwerkkarten an: &prompt.user; ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:da inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:db inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 media: Ethernet 10baseT/UTP status: no carrier lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=3<RXCSUM,TXCSUM> inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 nd6 options=3<PERFORMNUD,ACCEPT_RTADV> Im Beispiel werden Informationen zu den folgenden Geräten angezeigt: dc0: Der erste Ethernet-Adapter. dc1: Der zweite Ethernet-Adapter. lo0: Das Loopback-Gerät. Der Name der Netzwerkkarte wird aus dem Namen des Treibers und einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge an, in der die Geräte beim Systemstart erkannt wurden. Die dritte Karte, die den &man.sis.4; Treiber benutzt, würde beispielsweise sis2 heißen. Der Adapter dc0 aus dem Beispiel ist aktiv. Sie erkennen das an den folgenden Hinweisen: UP bedeutet, dass die Karte konfiguriert und aktiv ist. Der Karte wurde die Internet-Adresse (inet) 192.168.1.3 zugewiesen. Die Subnetzmaske ist richtig (0xffffff00 entspricht 255.255.255.0). Die Broadcast-Adresse 192.168.1.255 ist richtig. Die MAC-Adresse der Karte (ether) lautet 00:a0:cc:da:da:da. Die automatische Medienerkennung ist aktiviert (media: Ethernet autoselect (100baseTX <full-duplex>)). Der Adapter dc1 benutzt das Medium 10baseT/UTP. Weitere Informationen über die einstellbaren Medien entnehmen Sie der Hilfeseite des Treibers. Der Verbindungsstatus (status) ist active, das heißt es wurde ein Trägersignal entdeckt. Für dc1 wird status: no carrier angezeigt. Das ist normal, wenn kein Kabel an der Karte angeschlossen ist. Wäre die Karte nicht konfiguriert, würde die Ausgabe von &man.ifconfig.8; so aussehen: dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80008<VLAN_MTU,LINKSTATE> ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active Die Karte muss als Benutzer root konfiguriert werden. Die Konfiguration kann auf der Kommandozeile mit &man.ifconfig.8; erfolgen. Allerdings gehen diese Informationen bei einem Neustart verloren. Tragen Sie stattdessen die Konfiguration in /etc/rc.conf ein. Fügen Sie für jede Karte im System eine Zeile hinzu, wie in diesem Beispiel zu sehen: ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP" Ersetzen Sie dc0 und dc1 und die IP-Adressen durch die richtigen Werte für das System. Die Manualpages des Treibers und &man.ifconfig.8; enthalten weitere Einzelheiten über verfügbare Optionen. Die Syntax von /etc/rc.conf wird in &man.rc.conf.5; beschrieben. Wenn das Netz während der Installation konfiguriert wurde, existieren vielleicht schon Einträge für die Netzwerkkarte(n). Überprüfen Sie /etc/rc.conf bevor Sie weitere Zeilen hinzufügen. Wenn das Netzwerk kein DNS benutzt, können Sie in /etc/hosts die Namen und IP-Adressen der Rechner des LANs eintragen. Weitere Informationen entnehmen Sie &man.hosts.5; und /usr/share/examples/etc/hosts. Falls kein DHCP-Server zur Verfügung steht, Sie aber Zugang zum Internet benötigen, müssen Sie das Standard-Gateway und die Nameserver manuell konfigurieren: &prompt.root; echo 'defaultrouter="Ihr_Default_Gateway"' >> /etc/rc.conf &prompt.root; echo 'nameserver Ihr_DNS_Server' >> /etc/resolv.conf Test und Fehlersuche Nachdem die notwendigen Änderungen in /etc/rc.conf gespeichert wurden, kann das System neu gestartet werden, um die Konfiguration zu testen und zu überprüfen, ob das System ohne Fehler neu gestartet wurde. Alternativ können Sie mit folgenden Befehl die Netzwerkeinstellungen neu initialisieren: &prompt.root; service netif restart Falls in /etc/rc.conf ein Default-Gateway definiert wurde, müssen Sie auch den folgenden Befehl ausführen: &prompt.root; service routing restart Wenn das System gestartet ist, sollten Sie die Netzwerkkarten testen. Test der Ethernet-Karte Netzwerkkarten testen Um zu prüfen, ob die Ethernet-Karte richtig konfiguriert ist, testen Sie zunächst mit &man.ping.8; den Adapter selbst und sprechen Sie dann eine andere Maschine im LAN an. Zuerst, der Test des Adapters: &prompt.user; ping -c5 192.168.1.3 PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms &prompt.user; ping -c5 192.168.1.2 PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms Um die Namensauflösung zu testen, verwenden Sie den Namen der Maschine anstelle der IP-Adresse. Wenn kein DNS-Server im Netzwerk vorhanden ist, muss /etc/hosts entsprechend eingerichtet sein. Fehlersuche Netzwerkkarten Fehlersuche Fehler zu beheben, ist immer sehr mühsam. Indem Sie die einfachen Sachen zuerst prüfen, erleichtern Sie sich die Aufgabe. Steckt das Netwerkkabel? Sind die Netzwerkdienste richtig konfiguriert? Funktioniert die Firewall? Wird die Netwerkkarte von &os; unterstützt? Lesen Sie immer die Hardware-Informationen des Releases, bevor Sie einen Fehlerbericht einsenden. Aktualisieren Sie die &os;-Version auf die neueste -STABLE Version. Suchen Sie in den Archiven der Mailinglisten und im Internet nach bekannten Lösungen. Wenn die Karte funktioniert, die Verbindungen aber zu langsam sind, sollten Sie &man.tuning.7; lesen. Prüfen Sie auch die Netzwerkkonfiguration, da falsche Einstellungen die Ursache für langsame Verbindungen sein können. Wenn Sie viele device timeout Meldungen in den Systemprotokollen finden, prüfen Sie, dass es keinen Konflikt zwischen der Netzwerkkarte und anderen Geräten des Systems gibt. Überprüfen Sie nochmals die Verkabelung. Unter Umständen benötigen Sie eine andere Netzwerkkarte. Bei watchdog timeout Fehlermeldungen, kontrollieren Sie zuerst die Verkabelung. Überprüfen Sie dann, ob der PCI-Steckplatz der Karte Bus Mastering unterstützt. Auf einigen älteren Motherboards ist das nur für einen Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie in der Dokumentation der Karte und des Motherboards nach, ob das vielleicht die Ursache des Problems sein könnte. Die Meldung No route to host erscheint, wenn das System ein Paket nicht zustellen kann. Das kann vorkommen weil beispielsweise keine Default-Route gesetzt wurde oder das Netzwerkkabel nicht richtig steckt. Schauen Sie in der Ausgabe von netstat -rn nach, ob eine gültige Route zu dem Zielsystem existiert. Wenn nicht, lesen Sie . Die Meldung ping: sendto: Permission denied wird oft von einer falsch konfigurierten Firewall verursacht. Wenn keine Regeln definiert wurden, blockiert eine aktivierte Firewall alle Pakete, selbst einfache &man.ping.8;-Pakete. Weitere Informationen erhalten Sie in . Falls die Leistung der Karte schlecht ist, setzen Sie die Medienerkennung von autoselect (automatisch) auf das richtige Medium. In vielen Fällen löst diese Maßnahme Leistungsprobleme. Wenn nicht, prüfen Sie nochmal die Netzwerkeinstellungen und lesen Sie &man.tuning.7;. Virtual Hosts virtual hosts IP-Aliase Ein gebräuchlicher Zweck von &os; ist das virtuelle Hosting, bei dem ein Server im Netzwerk wie mehrere Server aussieht. Dies wird dadurch erreicht, dass einem Netzwerkinterface mehrere Netzwerk-Adressen zugewiesen werden. Ein Netzwerkinterface hat eine echte Adresse und kann beliebig viele alias Adressen haben. Die Aliase werden durch entsprechende alias Einträge in /etc/rc.conf festgelegt, wie in diesem Beispiel zu sehen ist: ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" Beachten Sie, dass die Alias-Einträge mit alias0 anfangen müssen und weiter hochgezählt werden, das heißt alias1, alias2, und so weiter. Die Konfiguration der Aliase hört bei der ersten fehlenden Zahl auf. Die Berechnung der Alias-Netzwerkmasken ist wichtig. Für jedes Interface muss es eine Adresse geben, die die Netzwerkmaske des Netzwerkes richtig beschreibt. Alle anderen Adressen in diesem Netzwerk haben dann eine Netzwerkmaske, die mit 1 gefüllt ist, also 255.255.255.255 oder hexadezimal 0xffffffff. Als Beispiel betrachten wir den Fall, in dem fxp0 mit zwei Netzwerken verbunden ist: dem Netzwerk 10.1.1.0 mit der Netzwerkmaske 255.255.255.0 und dem Netzwerk 202.0.75.16 mit der Netzwerkmaske 255.255.255.240. Das System soll die Adressen 10.1.1.1 bis 10.1.1.5 und 202.0.75.17 bis 202.0.75.20 belegen. Nur die erste Adresse in einem Netzwerk sollte die richtige Netzwerkmaske haben. Alle anderen Adressen (10.1.1.2 bis 10.1.1.5 und 202.0.75.18 bis 202.0.75.20) müssen die Maske 255.255.255.255 erhalten. Die folgenden Einträge in /etc/rc.conf konfigurieren den Adapter entsprechend dem Beispiel: ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255" - Konfiguration des <application>syslogd</application> - Servers + Konfiguration der Systemprotokollierung Niclas Zeising Beigetragen von system logging syslog &man.syslogd.8; Das Aufzeichnen von Log-Meldungen ist ein wichtiger Aspekt der Systemadministration. Es wird nicht nur verwendet um Hard- und Softwarefehler ausfindig zu machen, auch zur Überwachung der Sicherheit und der Reaktion bei einem Zwischenfall spielen diese Aufzeichnungen eine wichtige Rolle. Systemdienste ohne kontrollierendes Terminal senden Meldungen in der Regel an einen Log-Server, oder schreiben sie in eine Logdatei. - Dieser Abschnitt beschreibt die Konfiguration und Verwendung - des &os; &man.syslogd.8; Servers, und diskutiert auch die - Log-Rotation und das Management von Logdateien mit - &man.newsyslog.8;. Der Fokus wird hierbei auf die Einrichtung - und Benutzung eines &man.syslogd.8; auf dem lokalen - Rechner gelegt. Für erweiterte Einstellungen und die Verwendung - eines separaten Log-Servers lesen Sie bitte - . - - - Verwendung von <command>syslogd</command> - In der Standardkonfiguration von &os; wird &man.syslogd.8; beim Booten automatisch gestartet. Dieses Verhalten wird über die Variable syslogd_enable in /etc/rc.conf gesteuert. Dazu gibt es noch zahlreiche Argumente, die das Verhalten von &man.syslogd.8; beeinflussen. Benutzen Sie zum verändern dieser Argumente syslogd_flags in /etc/rc.conf. Lesen Sie &man.syslogd.8; für weitere Informationen über die Argumente, und &man.rc.conf.5;, und wenn Sie mehr über /etc/rc.conf und das &man.rc.8;-Subsystem wissen möchten. - + Dieser Abschnitt beschreibt die Konfiguration und Verwendung + des &os; Protokollservers, und diskutiert auch die Log-Rotation + und das Management von Logdateien. + - Konfiguration von <command>syslogd</command> + Konfiguration der lokalen Protokollierung syslog.conf Die Konfigurationsdatei /etc/syslog.conf steuert, was &man.syslogd.8; mit Log-Meldungen macht, sobald sie empfangen werden. Es gibt verschiedene Parameter, die das Verhalten bei eingehenden Ereignissen kontrollieren. Zu den grundlegenden gehören facility und level. facility beschreibt das Subsystem, welches das Ereignis generiert hat. Beispielsweise der Kernel, oder ein Daemon. level hingegen beschreibt den Schweregrad des aufgetretenen Ereignisses. Dies macht es möglich, Meldungen in verschiedenen Logdateien zu protokollieren, oder Meldungen zu verwerfen, je nach Konfiguration von facility und level. Ebenfalls besteht die Möglichkeit auf Meldungen zu reagieren, die von einer bestimmten Anwendung stammen, oder von einem spezifischen Host erzeugt wurden. Die Konfigurationsdatei von &man.syslogd.8; enthält für jede Aktion eine Zeile. Die Syntax besteht aus einem Auswahlfeld, gefolgt von einem Aktionsfeld. Die Syntax für das Auswahlfeld ist facility.level. Dies entspricht Log-Meldungen von facility mit einem Level von level oder höher. Um noch präziser festzulegen was protokolliert wird, kann dem Level optional ein Vergleichsflag vorangestellt werden. Mehrere Auswahlen können, durch Semikolon (;) getrennt, für die gleiche Aktion verwendet werden. * wählt dabei alles aus. Das Aktionsfeld definiert, wohin die Log-Meldungen gesendet werden, beispielsweise in eine Datei oder zu einem entfernten Log-Server. Als Beispiel dient hier /etc/syslog.conf aus &os;: # $&os;$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you$ # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manpage. *.err;kern.warning;auth.notice;mail.crit /dev/console *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security auth.info;authpriv.info /var/log/auth.log mail.info /var/log/maillog lpr.info /var/log/lpd-errs ftp.info /var/log/xferlog cron.* /var/log/cron !-devd *.=debug /var/log/debug.log *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log # touch /var/log/all.log and chmod it to mode 600 before it will work #*.* /var/log/all.log # uncomment this to enable logging to a remote loghost named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice # Uncomment this if you wish to see messages produced by devd # !devd # *.>=info !ppp *.* /var/log/ppp.log !* Selektiert alle Meldungen vom Level err, sowie kern.warning, auth.notice und mail.crit und schickt diese zur Konsole (/dev/console). Selektiert alle Meldungen von mail ab dem Level info oder höher und schreibt diese in /var/log/maillog. Diese Zeile benutzt das Vergleichsflag =, um nur Meldungen vom Level debug zu selektieren und schreibt diese in /var/log/debug.log. Hier ist ein Beispiel für die Nutzung einer Programmspezifikation. Die nachfolgenden Regeln sind dann nur für Programme gültig, welche der Programmspezifikation stehen. In diesem Fall landen alle Meldungen von ppp (und keinem anderen Programm) in /var/log/ppp.log. Dieses Beispiel zeigt, dass es jede Menge Level und Subsysteme gibt. Die Level, beginnend mit den höchst kritischen, hin zu den weniger kritischen, sind: emerg, alert, crit, err, warning, notice, info und debug. Die facilities, in beliebiger Reihenfolge, sind: auth, authpriv, console, cron, daemon, ftp, kern, lpr, mail, mark, news, security, syslog, user, uucp, sowie local0 bis local7. Beachten Sie, dass andere Betriebssysteme hiervon abweichende facilities haben können. Mit diesem Wissen ist es nun einfach, eine weitere Zeile in /etc/syslog.conf hinzuzufügen, welche alle Meldungen von den unterschiedlichsten Dämonen mit einem Level von notice und höher in /var/log/daemon.log. Fügen Sie einfach folgendes hinzu: daemon.notice /var/log/daemon.log Für weitere Informationen zu verschiedenen Level und faclilities, lesen Sie &man.syslog.3; und &man.syslogd.8;. Weitere Informationen zu /etc/syslog.conf, dessen Syntax und erweiterten Anwendungsbeispielen, finden Sie in - &man.syslog.conf.5; und - . + &man.syslog.conf.5;. - Log-Management und Rotation mit - <command>newsyslog</command> + Management und Rotation von Logdateien newsyslog newsyslog.conf log rotation log management - Log-Dateien können schnell wachsen, was viel Speicherplatz + Logdateien können schnell wachsen, was viel Speicherplatz verbrauchen kann. Zudem wird es schwieriger, nützliche Informationen schnell zu finden. Log-Management versucht, diesen Effekt zu mildern. &os; verwendet &man.newsyslog.8; - für die Verwaltung von Log-Dateien. Dieses Programm - rotiert und komprimiert in regelmäßigen Abständen Log-Dateien. - Optional kann es auch fehlende Log-Dateien erstellen und - Programme benachrichtigen, wenn Log-Dateien verschoben wurden. - Dabei müssen die Log-Dateien nicht unbedingt von &man.syslogd.8; + für die Verwaltung von Logdateien. Dieses Programm + rotiert und komprimiert in regelmäßigen Abständen Logdateien. + Optional kann es auch fehlende Logdateien erstellen und + Programme benachrichtigen, wenn Logdateien verschoben wurden. + Dabei müssen die Logdateien nicht unbedingt von &man.syslogd.8; stammen, &man.newsyslog.8; ist auch in der Lage, Nachrichten von anderen Programmen zu verarbeiten. Obwohl &man.newsyslog.8; normalerweise von &man.cron.8; aufgerufen wird, ist es kein Systemdämon. In der Standardkonfiguration wird dieser Job jede Stunde ausgeführt. - - Konfiguration von <command>newsyslog</command> - Um zu wissen, welche Maßnahmen zu ergreifen sind, liest &man.newsyslog.8; seine Konfigurationsdatei, standardmäßig /etc/newsyslog.conf. Diese Konfigurationsdatei enthält eine Zeile für jede Datei, die von &man.newsyslog.8; verwaltet wird. Jede Zeile enthält Informationen über den Besitzer der Datei, die Dateiberechtigungen, wann die Datei rotiert wird, optionale Flags, welche die Log-Rotation beeinflussen (bspw. Komprimierung) und - Programme, denen ein Signal geschickt wird, wenn Log-Dateien + Programme, denen ein Signal geschickt wird, wenn Logdateien rotiert werden. Hier folgt die Standardkonfiguration in &os;: # configuration file for newsyslog # $&os;$ # # Entries which do not specify the '/pid_file' field will cause the # syslogd process to be signalled when that log file is rotated. This # action is only appropriate for log files which are written to by the # syslogd process (ie, files listed in /etc/syslog.conf). If there # is no process which needs to be signalled when a given log file is # rotated, then the entry for that file should include the 'N' flag. # # The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'. # # Note: some sites will want to select more restrictive protections than the # defaults. In particular, it may be desirable to switch many of the 644 # entries to 640 or 600. For example, some sites will consider the # contents of maillog, messages, and lpd-errs to be confidential. In the # future, these defaults may change to more conservative ones. # # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/all.log 600 7 * @T00 J /var/log/amd.log 644 7 100 * J /var/log/auth.log 600 7 100 @0101T JC /var/log/console.log 600 5 100 * J /var/log/cron 600 3 100 * JC /var/log/daily.log 640 7 * @T00 JN /var/log/debug.log 600 7 100 * JC /var/log/kerberos.log 600 7 100 * J /var/log/lpd-errs 644 7 100 * JC /var/log/maillog 640 7 * @T00 JC /var/log/messages 644 5 100 @0101T JC /var/log/monthly.log 640 12 * $M1D0 JN /var/log/pflog 600 3 100 * JB /var/run/pflogd.pid /var/log/ppp.log root:network 640 3 100 * JC /var/log/devd.log 644 3 100 * JC /var/log/security 600 10 100 * JC /var/log/sendmail.st 640 10 * 168 B /var/log/utx.log 644 3 * @01T05 B /var/log/weekly.log 640 5 1 $W6D0 JN /var/log/xferlog 600 7 100 * JC Jede Zeile beginnt mit dem Namen der Datei, die rotiert werden soll, optional gefolgt von Besitzer und Gruppe für rotierende, als auch für neu erstellte Dateien. Das Feld mode definiert die Zugriffsrechte der Datei. count gibt an, wie viele rotierte Dateien aufbewahrt werden sollen. Anhand der size- und when-Flags erkennt newsyslog, wann die Datei rotiert werden muss. Eine Logdatei wird rotiert, wenn ihre Größe den Wert von size überschreitet, oder wenn die Zeit im when-Feld abgelaufen ist. Ein * bedeutet, dass dieses Feld ignoriert wird. Das flags-Feld gibt newsyslog weitere Instruktionen, zum Beispiel wie eine Datei zu rotieren ist, oder eine Datei zu erstellen falls diese nicht existiert. Die letzten beiden Felder sind optional und bestimmen die PID-Datei sowie wenn die Datei rotiert wird. Weitere Informationen zu allen Feldern, gültigen flags und wie Sie die Rotationszeit angeben können, finden Sie in &man.syslog.conf.5;. Denken Sie daran, dass newsyslog von cron aufgerufen wird und somit Dateien auch nur dann rotiert, wenn es von &man.cron.8; aufgerufen wird, und nicht häufiger. + + + + + Protokollierung von anderen Hosts + + + + + Tom + Rhodes + + Beigetragen von + + + + + + Benedict + Reuschling + + Übersetzt von + + + + + Die Überwachung der Protokolldateien kann bei steigender + Anzahl von Rechnern sehr unhandlich werden. Eine zentrale + Protokollierung kann manche administrativen Belastungen bei + der Verwaltung von Protokolldateien reduzieren. + + Die Aggregation, Zusammenführung und Rotation von + Protokolldateien kann an zentraler Stelle mit den + &os;-eigenen Werkzeugen wie &man.syslogd.8; und + &man.newsyslog.8; konfiguriert werden. In der folgenden + Beispielkonfiguration sammelt Host A, + genannt logserv.example.com, + Protokollinformationen für das lokale Netzwerk. Host + B, genannt logclient.example.com wird + seine Protokollinformationen an den Server weiterleiten. + + + Konfiguration des Protokollservers + + Ein Protokollserver ist ein System, welches + Protokollinformationen von anderen Hosts akzeptiert. Bevor + Sie diesen Server konfigurieren, prüfen Sie + folgendes: + + + + Falls eine Firewall zwischen dem + Protokollserver und den -Clients steht, muss das + Regelwerk der Firewall UDP auf Port + 514 sowohl auf Client- als auch auf Serverseite + freigegeben werden. + + + + Der syslogd-Server und alle + Clientrechner müssen gültige Einträge für sowohl + Vorwärts- als auch Umkehr-DNS + besitzen. Falls im Netzwerk kein + DNS-Server vorhanden ist, muss auf + jedem System die Datei /etc/hosts + mit den richtigen Einträgen gepflegt werden. Eine + funktionierende Namensauflösung ist zwingend + erforderlich, ansonsten würde der Server die + Protokollnachrichten ablehnen. + + + + Bearbeiten Sie /etc/syslog.conf auf + dem Server. Tragen Sie den Namen des Clients ein, den + Verbindungsweg und den Namen der Protokolldatei. Dieses + Beispiel verwendet den Rechnernamen + B, alle Verbindungswege, und die + Protokolle werden in + /var/log/logclient.log + gespeichert. + + + Einfache Server Konfiguration + + +logclient.example.com +*.* /var/log/logclient.log + + + Fügen Sie für jeden Client zwei Zeilen hinzu, falls Sie + mehrere Clients in diese Datei aufnehmen. Weitere + Informationen über die verfügbaren Verbindungswege finden + Sie in &man.syslog.conf.5;. + + Konfigurieren Sie als nächstes + /etc/rc.conf: + + syslogd_enable="YES" +syslogd_flags="-a logclient.example.com -v -v" + + Der erste Eintrag startet syslogd + während des Bootens. Der zweite Eintrag erlaubt es, Daten + von dem spezifizierten Client auf diesem Server zu + akzeptieren. Die Verwendung von + erhöht die Anzahl von Protokollnachrichten. Dies ist + hilfreich für die Feineinstellung der Verbindungswege, da + Administratoren auf diese Weise erkennen, welche Arten von + Nachrichten von welchen Verbindungswegen protokolliert + werden. + + Mehrere -Optionen können angegeben + werden, um die Protokollierung von mehreren Clients zu + erlauben. IP-Adressen und ganze + Netzblöcke können ebenfalls spezifiziert werden. Eine + vollständige Liste der Optionen finden Sie in + &man.syslogd.8;. + + Zum Schluss muss die Protokolldatei erstellt + werden: + + &prompt.root; touch /var/log/logclient.log + + Zu diesem Zeitpunkt sollte syslogd + neu gestartet und überprüft werden: + + &prompt.root; service syslogd restart +&prompt.root; pgrep syslog + + Wenn eine PID zurückgegeben wird, + wurde der Server erfolgreich neu gestartet und die + Clientkonfiguration kann beginnen. Wenn der Server nicht + neu gestartet wurde, suchen Sie in + /var/log/messages nach dem + Fehler. + + + + Konfiguration des Protokollclients + + Ein Protokollclient sendet Protokollinformationen + an einen Protokollserver. Zusätzlich behält er eine + lokale Kopie seiner eigenen Protokolle. + + Sobald der Server konfiguriert ist, bearbeiten Sie + /etc/rc.conf auf dem Client: + + syslogd_enable="YES" +syslogd_flags="-s -v -v" + + Der erste Eintrag aktiviert den + syslogd-Dienst während des Systemstarts. + Der zweite Eintrag erhöht die Anzahl der + Protokollnachrichten. Die Option + verhindert, dass dieser Client Protokolle von anderen + Hosts akzeptiert. + + Als nächstes muss der Protokollserver in der + /etc/syslog.conf des Clients + eingetragen werden. In diesem Beispiel wird das + @-Symbol benutzt, um sämtliche + Protokolldaten an einen bestimmten Server zu senden: + + *.* @logserv.example.com + + Nachdem die Änderungs gespeichert wurden, muss + syslogd neu gestartet werden, damit die + Änderungen wirksam werden: + + &prompt.root; service syslogd restart + + Um zu testen, ob Protokollnachrichten über das Netzwerk + gesendet werden, kann &man.logger.1; auf dem Client benutzt + werden, um eine Nachricht an + syslogd zu schicken: + + &prompt.root; logger "Test message from logclient" + + Diese Nachricht sollte jetzt sowohl in + /var/log/messages auf dem Client, als + auch in /var/log/logclient.log auf dem + Server vorhanden sein. + + + + Fehlerbehebung beim Protokollserver + + Wenn der Server keine Nachrichten empfängt, ist die + Ursache wahrscheinlich ein Netzwerkproblem, ein Problem bei + der Namensauflösung oder ein Tippfehler in einer + Konfigurationsdatei. Um die Ursache zu isolieren, müssen + Sie sicherstellen, dass sich Server und Client über den in + /etc/rc.conf konfigurierten Hostnamen + mit ping erreichen lässt. Falls dies + nicht gelingt sollten Sie die Netzwerkverkablung überprüfen, + außerdem Firewallregeln sowie die Einträge für Hosts im + DNS und /etc/hosts. + Überprüfen Sie diese Dinge auf dem Server und dem Client, + bis der ping von beiden Hosts erfolgreich + ist. + + Wenn sich die Hosts gegenseitig mit + ping erreichen können, der Server aber + immer noch keine Nachrichten empfängt, können Sie + vorübergehend die Ausführlichkeit der Protokollierung + erhöhen, um die Ursache für das Problem weiter einzugrenzen. + In dem folgenden Beispiel ist auf dem Server die Datei + /var/log/logclient.log leer und in der + Datei /var/log/messages auf dem Client + ist keine Ursache für das Problem erkennbar. Um nun die + Ausführlichkeit der Protokollierung zu erhöhen, passen Sie + auf dem Server den Eintrag syslogd_flags + an. Anschließend starten Sie den Dienst neu: + + syslogd_flags="-d -a logclien.example.com -v -v" + + &prompt.root; service syslogd restart + + Informationen wie diese werden sofort nach dem Neustart + auf der Konsole erscheinen: + + logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart +syslogd: restarted +logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel +Logging to FILE /var/log/messages +syslogd: kernel boot file is /boot/kernel/kernel +cvthname(192.168.1.10) +validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; +rejected in rule 0 due to name mismatch. + + In diesem Beispiel werden die Nachrichten aufgrund eines + fehlerhaften Namens abgewiesen. Der Hostname sollte + logclient und nicht + logclien sein. Beheben Sie den + Tippfehler, starten Sie den Dienst neu und überprüfen Sie + das Ergebnis: + + &prompt.root; service syslogd restart +logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart +syslogd: restarted +logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel +syslogd: kernel boot file is /boot/kernel/kernel +logmsg: pri 166, flags 17, from logserv.example.com, +msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2 +cvthname(192.168.1.10) +validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; +accepted in rule 0. +logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2 +Logging to FILE /var/log/logclient.log +Logging to FILE /var/log/messages + + Zu diesem Zeitpunkt werden die Nachrichten korrekt + empfangen und in die richtige Datei geschrieben. + + + + Sicherheitsbedenken + + Wie mit jedem Netzwerkdienst, müssen + Sicherheitsanforderungen in Betracht gezogen werden, bevor ein + Protokollserver eingesetzt wird. Manchmal enthalten + Protokolldateien sensitive Daten über aktivierte Dienste auf + dem lokalen Rechner, Benutzerkonten und Konfigurationsdaten. + Daten, die vom Client an den Server geschickt werden, sind + weder verschlüsselt noch mit einem Passwort geschützt. Wenn + ein Bedarf für Verschlüsselung besteht, ist es möglich + security/stunnel zu verwenden, welches die + Protokolldateien über einen verschlüsselten Tunnel + versendet. + + Lokale Sicherheit ist ebenfalls ein Thema. + Protokolldateien sind während der Verwendung oder nach ihrer + Rotation nicht verschlüsselt. Lokale Benutzer versuchen + vielleicht, auf diese Dateien zuzugreifen, um zusätzliche + Einsichten in die Systemkonfiguration zu erlangen. Es ist + absolut notwendig, die richtigen Berechtigungen auf diesen + Dateien zu setzen. Das Werkzeug &man.newsyslog.8; unterstützt + das Setzen von Berechtigungen auf gerade erstellte oder + rotierte Protokolldateien. Protokolldateien mit Zugriffsmodus + 600 sollten verhindern, dass lokale + Benutzer darin herumschnüffeln. Zusätzliche Informationen + finden Sie in &man.newsyslog.conf.5;. Konfigurationsdateien <filename>/etc</filename> Layout Konfigurationsdateien finden sich in einigen Verzeichnissen unter anderem in: /etc Enthält generelle systemspezifische Konfigurationsinformationen. /etc/defaults Default Versionen der Konfigurationsdateien. /etc/mail Enthält die &man.sendmail.8; Konfiguration und weitere MTA Konfigurationsdateien. /etc/ppp Hier findet sich die Konfiguration für die User- und Kernel-ppp Programme. /etc/namedb Das Vorgabeverzeichnis, in dem Daten von &man.named.8; gehalten werden. Normalerweise werden hier named.conf und Zonendaten abgelegt. /usr/local/etc Installierte Anwendungen legen hier ihre Konfigurationsdateien ab. Dieses Verzeichnis kann Unterverzeichnisse für bestimmte Anwendungen enthalten. /usr/local/etc/rc.d &man.rc.8;-Skripten installierter Anwendungen. /var/db Automatisch generierte systemspezifische Datenbanken, wie die Paket-Datenbank oder die &man.locate.1;-Datenbank. Hostnamen hostname DNS <filename>/etc/resolv.conf</filename> resolv.conf Wie ein &os;-System auf das Internet Domain Name System (DNS) zugreift, wird in /etc/resolv.conf festgelegt. Die gebräuchlichsten Einträge in /etc/resolv.conf sind: nameserver Die IP-Adresse eines Nameservers, den der Resolver abfragen soll. Bis zu drei Server werden in der Reihenfolge, in der sie aufgezählt sind, abgefragt. search Suchliste mit Domain-Namen zum Auflösen von Hostnamen. Die Liste wird normalerweise durch den Domain-Teil des lokalen Hostnamens festgelegt. domain Der lokale Domain-Name. Beispiel für eine typische /etc/resolv.conf: search example.com nameserver 147.11.1.11 nameserver 147.11.100.30 Nur eine der Anweisungen search oder domain sollte benutzt werden. Wenn Sie DHCP benutzen, überschreibt &man.dhclient.8; für gewöhnlich /etc/resolv.conf mit den Informationen vom DHCP-Server. <filename>/etc/hosts</filename> hosts /etc/hosts ist eine einfache textbasierte Datenbank. Zusammen mit DNS und NIS stellt sie eine Abbildung zwischen Namen und IP-Adressen zur Verfügung. Anstatt &man.named.8; zu konfigurieren, können hier lokale Rechner, die über ein LAN verbunden sind, eingetragen werden. Lokale Einträge für gebräuchliche Internet-Adressen in /etc/hosts verhindern die Abfrage eines externen Servers und beschleunigen die Namensauflösung. # $FreeBSD$ # # # Host Database # # This file should contain the addresses and aliases for local hosts that # share this file. Replace 'my.domain' below with the domainname of your # machine. # # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain 127.0.0.1 localhost localhost.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. Do not try to invent your own network # numbers but instead get one from your network provider (if any) or # from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.) # /etc/hosts hat das folgende Format: [Internet Adresse] [Offizieller Hostname] [Alias1] [Alias2] ... Zum Beispiel: 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2 Weitere Informationen entnehmen Sie bitte &man.hosts.5;. Einstellungen mit &man.sysctl.8; sysctl Einstellungen mit sysctl Mit &man.sysctl.8; können Sie Änderungen an einem laufenden &os;-System vornehmen. Unter anderem können Optionen des TCP/IP-Stacks oder des virtuellen Speichermanagements verändert werden. Unter der Hand eines erfahrenen Systemadministrators kann dies die Systemperformance erheblich verbessern. Über 500 Variablen können mit &man.sysctl.8; gelesen und gesetzt werden. Der Hauptzweck von &man.sysctl.8; besteht darin, Systemeinstellungen zu lesen und zu verändern. Alle auslesbaren Variablen werden wie folgt angezeigt: &prompt.user; sysctl -a Um eine spezielle Variable zu lesen, geben Sie den Namen an: &prompt.user; sysctl kern.maxproc kern.maxproc: 1044 Um eine Variable zu setzen, benutzen Sie die Syntax Variable= Wert: &prompt.root; sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 Mit sysctl können Strings, Zahlen oder Boolean-Werte gesetzt werden. Bei Boolean-Werten steht 1 für wahr und 0 für falsch. Um die Variablen automatisch während des Systemstarts zu setzen, fügen Sie sie in /etc/sysctl.conf ein. Weitere Informationen finden Sie in der Hilfeseite &man.sysctl.conf.5; und in . <filename>sysctl.conf</filename> sysctl.conf sysctl /etc/sysctl.conf sieht ähnlich wie /etc/rc.conf aus. Werte werden in der Form Variable=Wert gesetzt. Die angegebenen Werte werden gesetzt, nachdem sich das System bereits im Mehrbenutzermodus befindet. Allerdings lassen sich im Mehrbenutzermodus nicht alle Werte setzen. Um das Protokollieren von fatalen Signalen abzustellen und Benutzer daran zu hindern, von anderen Benutzern gestartete Prozesse zu sehen, können Sie in /etc/sysctl.conf die folgenden Variablen setzen: # Do not log fatal signal exits (e.g. sig 11) kern.logsigexit=0 # Prevent users from seeing information about processes that # are being run under another UID. security.bsd.see_other_uids=0 Schreibgeschützte Variablen Tom Rhodes Contributed by Wenn schreibgeschützte &man.sysctl.8;-Variablen verändert werden, ist ein Neustart des Systems erforderlich. Beispielsweise hat &man.cardbus.4; auf einigen Laptops Schwierigkeiten, Speicherbereiche zu erkennen. Es treten dann Fehlermeldungen wie die folgende auf: cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12 Um dieses Problem zu lösen, muss eine schreibgeschützte &man.sysctl.8;-Variable verändert werden. Fügen Sie in /boot/loader.conf hinzu und starten Sie das System neu. Danach sollte &man.cardbus.4; fehlerfrei funktionieren. Tuning von Laufwerken Der folgende Abschnitt beschreibt die verschiedenen Methoden zur Feinabstimmung der Laufwerke. Oft sind mechanische Teile in Laufwerken, wie SCSI-Laufwerke, verbaut. Diese können einen Flaschenhals bei der Gesamtleistung des Systems darstellen. Sie können zwar auch ein Laufwerk ohne mechanische Teile einbauen, wie z.B. ein Solid-State-Drive, aber Laufwerke mit mechanischen Teilen werden auch in naher Zukunft nicht vom Markt verschwinden. Bei der Feinabstimmung ist es ratsam, die Funktionen von &man.iostat.8; zu verwenden, um verschiedene Änderungen zu testen und um nützliche IO-Informationen des Systems zu erhalten. Sysctl Variablen <varname>vfs.vmiodirenable</varname> vfs.vmiodirenable Die &man.sysctl.8;-Variable vfs.vmiodirenable besitzt in der Voreinstellung den Wert 1. Die Variable kann auf den Wert 0 (deaktiviert) oder 1 (aktiviert) gesetzt werden. Sie steuert, wie Verzeichnisse vom System zwischengespeichert werden. Die meisten Verzeichnisse sind klein und benutzen nur ein einzelnes Fragment, typischerweise 1 kB, im Dateisystem und 512 Bytes im Buffer-Cache. Ist die Variable deaktiviert, wird der Buffer-Cache nur eine limitierte Anzahl Verzeichnisse zwischenspeichern, auch wenn das System über sehr viel Speicher verfügt. Ist die Variable aktiviert, kann der Buffer-Cache den VM-Page-Cache benutzen, um Verzeichnisse zwischenzuspeichern. Der ganze Speicher steht damit zum Zwischenspeichern von Verzeichnissen zur Verfügung. Der Nachteil bei dieser Vorgehensweise ist, dass zum Zwischenspeichern eines Verzeichnisses mindestens eine physikalische Seite im Speicher, die normalerweise 4 kB groß ist, anstelle von 512 Bytes gebraucht wird. Es wird empfohlen, diese Option aktiviert zu lassen, wenn Sie Dienste zur Verfügung stellen, die viele Dateien manipulieren. Beispiele für solche Dienste sind Web-Caches, große Mail-Systeme oder Netnews. Die aktivierte Variable vermindert, trotz des verschwendeten Speichers, in aller Regel nicht die Leistung des Systems, obwohl Sie das nachprüfen sollten. <varname>vfs.write_behind</varname> vfs.write_behind In der Voreinstellung besitzt die &man.sysctl.8;-Variable vfs.write_behind den Wert 1 (aktiviert). Mit dieser Einstellung schreibt das Dateisystem anfallende vollständige Cluster, die besonders beim sequentiellen Schreiben großer Dateien auftreten, direkt auf das Medium aus. Dies verhindert, dass sich im Buffer-Cache veränderte Puffer (dirty buffers) ansammeln, die die I/O-Verarbeitung nicht mehr beschleunigen würden. Unter bestimmten Umständen blockiert diese Funktion allerdings Prozesse. Setzen Sie in diesem Fall die Variable vfs.write_behind auf den Wert 0. <varname>vfs.hirunningspace</varname> vfs.hirunningspace Die &man.sysctl.8;-Variable vfs.hirunningspace bestimmt systemweit die Menge ausstehender Schreiboperationen, die dem Platten-Controller zu jedem beliebigen Zeitpunkt übergeben werden können. Normalerweise können Sie den Vorgabewert verwenden. Auf Systemen mit vielen Platten kann der Wert aber auf 4 bis 5 Megabyte erhöht werden. Ein zu hoher Wert (größer als der Schreib-Schwellwert des Buffer-Caches) kann zu Leistungverlusten führen. Setzen Sie den Wert daher nicht zu hoch! Hohe Werte können auch Leseoperationen verzögern, die gleichzeitig mit Schreiboperationen ausgeführt werden. Es gibt weitere &man.sysctl.8;-Variablen, mit denen Sie den Buffer-Cache und den VM-Page-Cache beeinflussen können. Es wird nicht empfohlen, diese Variablen zu verändern, da das VM-System den virtuellen Speicher selbst sehr gut verwaltet. <varname>vm.swap_idle_enabled</varname> vm.swap_idle_enabled Die &man.sysctl.8;-Variable vm.swap_idle_enabled ist für große Mehrbenutzer-Systeme gedacht, auf denen sich viele Benutzer an- und abmelden und auf denen es viele Prozesse im Leerlauf (idle) gibt. Solche Systeme fragen kontinuierlich freien Speicher an. Wenn Sie die Variable vm.swap_idle_enabled aktivieren, können Sie die Auslagerungs-Hysterese von Seiten mit den Variablen vm.swap_idle_threshold1 und vm.swap_idle_threshold2 einstellen. Die Schwellwerte beider Variablen geben die Zeit in Sekunden an, in denen sich ein Prozess im Leerlauf befinden muss. Wenn die Werte so eingestellt sind, dass Seiten früher als nach dem normalen Algorithmus ausgelagert werden, verschafft das dem Auslagerungs-Prozess mehr Luft. Aktivieren Sie diese Funktion nur, wenn Sie sie wirklich benötigen: Die Speicherseiten werden eher früher als später ausgelagert. Der Platz im Swap-Bereich wird dadurch schneller verbraucht und die Plattenaktivitäten steigen an. Auf kleinen Systemen hat diese Funktion spürbare Auswirkungen. Auf großen Systemen, die sowieso schon Seiten auslagern müssen, können ganze Prozesse leichter in den Speicher geladen oder ausgelagert werden. <varname>hw.ata.wc</varname> hw.ata.wc Obwohl das Abstellen des IDE-Schreib-Zwischenspeichers die Bandbreite zum Schreiben auf die IDE-Festplatte verringert, kann es aus Gründen der Datenkonsistenz als notwendig angesehen werden. Das Problem ist, dass IDE-Platten keine zuverlässige Aussage über das Ende eines Schreibvorgangs treffen. Wenn der Schreib-Zwischenspeicher aktiviert ist, werden die Daten nicht in der Reihenfolge ihres Eintreffens geschrieben. Es kann sogar passieren, dass das Schreiben mancher Blöcke im Fall von starker Plattenaktivität auf unbefristete Zeit verzögert wird. Ein Absturz oder Stromausfall zu dieser Zeit kann die Dateisysteme erheblich beschädigen. Sie sollten den Wert der &man.sysctl.8;-Variable hw.ata.wc auf dem System überprüfen. Wenn der Schreib-Zwischenspeicher abgestellt ist, können Sie ihn beim Systemstart aktivieren, indem Sie die Variable in /boot/loader.conf auf den Wert 1 setzen. Weitere Informationen finden Sie in &man.ata.4;. <literal>SCSI_DELAY</literal> (<varname>kern.cam.scsi_delay</varname>) kern.cam.scsi_delay Kerneloptionen SCSI DELAY Mit der Kerneloption SCSI_DELAY kann die Dauer des Systemstarts verringert werden. Der Vorgabewert ist recht hoch und er verzögert den Systemstart um 15 oder mehr Sekunden. Normalerweise kann dieser Wert, insbesondere mit modernen Laufwerken, mit der &man.sysctl.8;-Variable kern.cam.scsi_delay auf 5 Sekunden heruntergesetzt werden. Die Variable sowie die Kerneloption verwenden für die Zeitangabe Millisekunden und nicht Sekunden. Soft Updates Soft Updates &man.tunefs.8; Mit &man.tunefs.8; lassen sich Feineinstellungen an Dateisystemen vornehmen. Das Programm hat verschiedene Optionen. Soft Updates werden wie folgt ein- und ausgeschaltet: &prompt.root; tunefs -n enable /filesystem &prompt.root; tunefs -n disable /filesystem Ein eingehängtes Dateisystem kann nicht mit &man.tunefs.8; modifiziert werden. Soft Updates werden am besten im Single-User Modus aktiviert, bevor Partitionen eingehangen sind. Durch Einsatz eines Zwischenspeichers wird die Performance im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen von Dateien, gesteigert. Es wird empfohlen, Soft Updates auf allen UFS-Dateisystemen zu aktivieren. Allerdings sollten Sie sich über die zwei Nachteile von Soft Updates bewusst sein: Erstens garantieren Soft Updates zwar die Konsistenz der Daten im Fall eines Absturzes, aber es kann passieren, dass das Dateisystem über mehrere Sekunden oder gar eine Minute nicht synchronisiert wurde. Nicht geschriebene Daten gehen dann vielleicht verloren. Zweitens verzögern Soft Updates die Freigabe von Datenblöcken. Eine größere Aktualisierung eines fast vollen Dateisystems, wie dem Root-Dateisystem, z.B. während eines make installworld, kann das Dateisystem vollaufen lassen. Dadurch würde die Aktualisierung fehlschlagen. Details über Soft Updates Soft Updates Details Bei einem Metadaten-Update werden die Inodes und Verzeichniseinträge aktualisiert auf die Platte zurückgeschrieben. Es gibt zwei klassische Ansätze, um die Metadaten des Dateisystems auf die Platte zu schreiben. Das historisch übliche Verfahren waren synchrone Updates der Metadaten, d. h. wenn eine Änderung an einem Verzeichnis nötig war, wurde anschließend gewartet, bis diese Änderung tatsächlich auf die Platte zurückgeschrieben worden war. Der Inhalt der Dateien wurde im Buffer Cache zwischengespeichert und später asynchron auf die Platte geschrieben. Der Vorteil dieser Implementierung ist, dass sie sicher funktioniert. Wenn während eines Updates ein Ausfall erfolgt, haben die Metadaten immer einen konsistenten Zustand. Eine Datei ist entweder komplett angelegt oder gar nicht. Wenn die Datenblöcke einer Datei im Fall eines Absturzes noch nicht den Weg aus dem Buffer Cache auf die Platte gefunden haben, kann &man.fsck.8; das Dateisystem reparieren, indem es die Dateilänge einfach auf 0 setzt. Außerdem ist die Implementierung einfach und überschaubar. Der Nachteil ist, dass Änderungen der Metadaten sehr langsam vor sich gehen. Ein rm -r beispielsweise fasst alle Dateien eines Verzeichnisses der Reihe nach an, aber jede dieser Änderungen am Verzeichnis (Löschen einer Datei) wird einzeln synchron auf die Platte geschrieben. Gleiches beim Auspacken großer Hierarchien mit tar -x. Der zweite Ansatz sind asynchrone Metadaten-Updates. Das ist der Standard, wenn UFS-Dateisysteme mit mount -o async eingehängt werden. Man schickt die Updates der Metadaten einfach auch noch über den Buffer Cache, sie werden also zwischen die Updates der normalen Daten eingeschoben. Vorteil ist, dass man nun nicht mehr auf jeden Update warten muss, Operationen, die zahlreiche Metadaten ändern, werden also viel schneller. Auch hier ist die Implementierung sehr einfach und wenig anfällig für Fehler. Nachteil ist, dass keinerlei Konsistenz des Dateisystems mehr gesichert ist. Wenn mitten in einer Operation, die viele Metadaten ändert, ein Ausfall erfolgt (Stromausfall, drücken des Reset-Schalters), dann ist das Dateisystem anschließend in einem unbestimmten Zustand. Niemand kann genau sagen, was noch geschrieben worden ist und was nicht mehr; die Datenblöcke einer Datei können schon auf der Platte stehen, während die inode Tabelle oder das zugehörige Verzeichnis nicht mehr aktualisiert worden ist. Man kann praktisch kein &man.fsck.8; mehr implementieren, das diesen Zustand wieder reparieren kann, da die dazu nötigen Informationen einfach auf der Platte fehlen. Wenn ein Dateisystem irreparabel beschädigt wurde, hat man nur noch die Möglichkeit es neu zu erzeugen und die Daten vom Backup zurückspielen. Der Ausweg aus diesem Dilemma ist ein dirty region logging, was auch als Journalling bezeichnet wird. Man schreibt die Metadaten-Updates zwar synchron, aber nur in einen kleinen Plattenbereich, die logging area. Von da aus werden sie dann asynchron auf ihre eigentlichen Bereiche verteilt. Da die logging area ein kleines zusammenhängendes Stückchen ist, haben die Schreibköpfe der Platte bei massiven Operationen auf Metadaten keine allzu großen Wege zurückzulegen, so dass alles ein ganzes Stück schneller geht als bei klassischen synchronen Updates. Die Komplexität der Implementierung hält sich ebenfalls in Grenzen, somit auch die Anfälligkeit für Fehler. Als Nachteil ergibt sich, dass Metadaten zweimal auf die Platte geschrieben werden müssen (einmal in die logging area, einmal an die richtige Stelle), so dass das im Falle regulärer Arbeit (also keine gehäuften Metadatenoperationen) eine Pessimisierung des Falls der synchronen Updates eintritt, es wird alles langsamer. Dafür hat man als Vorteil, dass im Falle eines Crashes der konsistente Zustand dadurch erzielbar ist, dass die angefangenen Operationen aus dem dirty region log entweder zu Ende ausgeführt oder komplett verworfen werden, wodurch das Dateisystem schnell wieder zur Verfügung steht. Die Lösung von Kirk McKusick, dem Schöpfer von Berkeley FFS, waren Soft Updates: die notwendigen Updates der Metadaten werden im Speicher gehalten und dann sortiert auf die Platte geschrieben (ordered metadata updates). Dadurch hat man den Effekt, dass im Falle massiver Metadaten-Änderungen spätere Operationen die vorhergehenden, noch nicht auf die Platte geschriebenen Updates desselben Elements im Speicher einholen. Alle Operationen, auf ein Verzeichnis beispielsweise, werden also in der Regel noch im Speicher abgewickelt, bevor der Update überhaupt auf die Platte geschrieben wird (die dazugehörigen Datenblöcke werden natürlich auch so sortiert, dass sie nicht vor ihren Metadaten auf der Platte sind). Im Fall eines Absturzes hat man ein implizites log rewind: alle Operationen, die noch nicht den Weg auf die Platte gefunden haben, sehen danach so aus, als hätten sie nie stattgefunden. Man hat so also den konsistenten Zustand von ca. 30 bis 60 Sekunden früher sichergestellt. Der verwendete Algorithmus garantiert dabei, dass alle tatsächlich benutzten Ressourcen auch in den entsprechenden Bitmaps (Block- und inode Tabellen) als belegt markiert sind. Der einzige Fehler, der auftreten kann, ist, dass Ressourcen noch als belegt markiert sind, die tatsächlich frei sind. &man.fsck.8; erkennt dies und korrigiert diese nicht mehr belegten Ressourcen. Die Notwendigkeit eines Dateisystem-Checks darf aus diesem Grunde auch ignoriert und das Dateisystem mittels mount -f zwangsweise eingebunden werden. Um noch allozierte Ressourcen freizugeben muss später ein &man.fsck.8; nachgeholt werden. Das ist dann auch die Idee des background fsck: beim Starten des Systems wird lediglich ein Schnappschuss des Filesystems gemacht, mit dem &man.fsck.8; dann später arbeiten kann. Alle Dateisysteme dürfen unsauber eingebunden werden und das System kann sofort in den Multiuser-Modus gehen. Danach wird ein Hintergrund-&man.fsck.8; für die Dateisysteme gestartet, die dies benötigen, um möglicherweise irrtümlich belegte Ressourcen freizugeben. Dateisysteme ohne Soft Updates benötigen natürlich immer noch den üblichen Vordergrund-&man.fsck.8;, bevor sie eingebunden werden können. Der Vorteil ist, dass die Metadaten-Operationen beinahe so schnell ablaufen wie im asynchronen Fall, also auch schneller als beim logging, das die Metadaten immer zweimal schreiben muss. Als Nachteil stehen dem die Komplexität des Codes, ein erhöhter Speicherverbrauch und einige spezielle Eigenheiten entgegen. Nach einem Absturz ist ein etwas älterer Stand auf der Platte – statt einer leeren, aber bereits angelegten Datei, wie nach einem herkömmlichen &man.fsck.8; Lauf, ist auf einem Dateisystem mit Soft Updates keine Spur der entsprechenden Datei mehr zu sehen, da weder die Metadaten noch der Dateiinhalt je auf die Platte geschrieben wurden. Weiterhin kann der Platz nach einem &man.rm.1; nicht sofort wieder als verfügbar markiert werden, sondern erst dann, wenn der Update auch auf die Platte vermittelt worden ist. Dies kann besonders dann Probleme bereiten, wenn große Datenmengen in einem Dateisystem installiert werden, das nicht genügend Platz hat, um alle Dateien zweimal unterzubringen. Einstellungen von Kernel Limits Einstellungen von Kernel Limits Datei und Prozeß Limits <varname>kern.maxfiles</varname> kern.maxfiles Abhängig von den Anforderungen an das System kann die &man.sysctl.8;-Variable kern.maxfiles erhöht oder gesenkt werden. Die Variable legt die maximale Anzahl von Dateideskriptoren auf dem System fest. Wenn die Dateideskriptoren aufgebraucht sind, werden Sie die Meldung file: table is full wiederholt im Puffer für Systemmeldungen sehen. Den Inhalt des Puffers können Sie sich mit &man.dmesg.8; anzeigen lassen. Jede offene Datei, jedes Socket und jede FIFO verbraucht einen Dateideskriptor. Auf dicken Produktionsservern können leicht Tausende Dateideskriptoren benötigt werden, abhängig von der Art und Anzahl der gleichzeitig laufenden Dienste. In älteren &os;-Versionen wurde die Voreinstellung von kern.maxfile aus der Kernelkonfigurationsoption maxusers bestimmt. kern.maxfiles wächst proportional mit dem Wert von maxusers. Wenn Sie einen angepassten Kernel kompilieren, empfiehlt es sich diese Option entsprechend der maximalen Benutzerzahl des Systems einzustellen. Obwohl auf einer Produktionsmaschine vielleicht nicht 256 Benutzer gleichzeitig angemeldet sind, können die benötigten Ressourcen ähnlich hoch wie bei einem großen Webserver sein. Die nur lesbare &man.sysctl.8;-Variable kern.maxusers wird beim Systemstart automatisch aus dem zur Verfügung stehenden Hauptspeicher bestimmt. Im laufenden Betrieb kann dieser Wert aus kern.maxusers ermittelt werden. Einige Systeme benötigen für diese Variable einen anderen Wert, wobei 64, 128 und 256 gewöhnliche Werte darstellen. Es wird nicht empfohlen, die Anzahl der Dateideskriptoren auf einen Wert größer 256 zu setzen, es sei denn, Sie benötigen wirklich eine riesige Anzahl von ihnen. Viele der von kern.maxusers auf einen Standardwert gesetzten Parameter können beim Systemstart oder im laufenden Betrieb in /boot/loader.conf angepasst werden. In &man.loader.conf.5; und /boot/defaults/loader.conf finden Sie weitere Details und Hinweise. Ältere &os;-Versionen setzen diesen Wert selbst, wenn Sie in der Konfigurationsdatei den Wert 0 Der verwendete Algorithmus setzt maxusers auf die Speichergröße des Systems. Der minimale Wert beträgt dabei 32, das Maximum ist 384. angeben. Wenn Sie den Wert selbst bestimmen wollen, sollten Sie maxusers mindestens auf 4 setzen. Dies gilt insbesondere dann, wenn Sie beabsichtigen, &xorg; zu benutzen oder Software zu kompilieren. Der wichtigste Wert, der durch maxusers bestimmt wird, die maximale Anzahl an Prozessen ist, die auf 20 + 16 * maxusers gesetzt wird. Wird maxusers auf 1 setzen, können gleichzeitig nur 36 Prozesse laufen, von denen ungefähr 18 schon beim Booten des Systems gestartet werden. Dazu kommen nochmals etwa 15 Prozesse beim Start von &xorg;. Selbst eine einfache Aufgabe wie das Lesen einer Manualpage benötigt neun Prozesse zum Filtern, Dekomprimieren und Betrachten der Datei. Für die meisten Benutzer sollte es ausreichen, maxusers auf 64 zu setzen, womit 1044 gleichzeitige Prozesse zur Verfügung stehen. Wenn Sie allerdings den Fehler proc table full beim Start eines Programms oder auf einem Server mit einer großen Benutzerzahl sehen, dann sollten Sie den Wert nochmals erhöhen und den Kernel neu bauen. Die Anzahl der Benutzer, die sich auf einem Rechner anmelden kann, wird durch maxusers nicht begrenzt. Der Wert dieser Variablen legt neben der möglichen Anzahl der Prozesse eines Benutzers weitere sinnvolle Größen für bestimmte Systemtabellen fest. <varname>kern.ipc.somaxconn</varname> kern.ipc.somaxconn Die &man.sysctl.8;-Variable kern.ipc.somaxconn beschränkt die Größe der Warteschlange (Listen-Queue) für neue TCP-Verbindungen. Der Vorgabewert von 128 ist normalerweise zu klein, um neue Verbindungen auf einem stark ausgelasteten Webserver zuverlässig zu handhaben. Auf solchen Servern sollte der Wert auf 1024 oder höher gesetzt werden. Dienste wie &man.sendmail.8; oder Apache können die Größe der Queue selbst einschränken. Oft gibt es die Möglichkeit, die Größe der Listen-Queue in einer Konfigurationsdatei einzustellen. Eine große Listen-Queue übersteht vielleicht auch einen Denial of Service Angriff (DoS). Netzwerk Limits Die Kerneloption NMBCLUSTERS schreibt die Anzahl der Netzwerkpuffer (Mbufs) fest, die das System besitzt. Eine zu geringe Anzahl Mbufs auf einem Server mit viel Netzwerkverkehr verringert die Leistung von &os;. Jeder Mbuf-Cluster nimmt ungefähr 2 kB Speicher in Anspruch, so dass ein Wert von 1024 insgesamt 2 Megabyte Speicher für Netzwerkpuffer im System reserviert. Wie viele Cluster benötigt werden, lässt sich durch eine einfache Berechnung herausfinden. Ein Webserver, der maximal 1000 gleichzeitige Verbindungen servieren soll, wobei jede der Verbindungen einen 6 kB großen Sendepuffer und einen 16 kB großen Empfangspuffer benötigt, braucht ungefähr 32 MB Speicher für Netzwerkpuffer. Als Daumenregel verdoppeln Sie diese Zahl, so dass sich für NMBCLUSTERS der Wert 2x32 MB / 2 kB= 64 MB / 2 kB= 32768 ergibt. Für Maschinen mit viel Speicher werden Werte zwischen 4096 und 32768 empfohlen. Unter keinen Umständen sollten Sie diesen Wert willkürlich erhöhen, da dies zu einem Absturz beim Systemstart führen kann. Verwenden Sie &man.netstat.1; mit um den Gebrauch der Netzwerkpuffer zu kontrollieren. Die Netzwerkpuffer können beim Systemstart mit der Loader-Variablen kern.ipc.nmbclusters eingestellt werden. Nur auf älteren &os;-Systemen müssen Sie die Kerneloption NMBCLUSTERS verwenden. Die Anzahl der &man.sendfile.2; Puffer muss auf ausgelasteten Servern, die den Systemaufruf &man.sendfile.2; oft verwenden, vielleicht erhöht werden. Dazu können Sie die Kerneloption NSFBUFS verwenden oder die Anzahl der Puffer in /boot/loader.conf (siehe &man.loader.8;) setzen. Die Puffer sollten erhöht werden, wenn Sie Prozesse im Zustand sfbufa sehen. Die schreibgeschützte &man.sysctl.8;-Variable kern.ipc.nsfbufs zeigt die Anzahl eingerichteten Puffer im Kernel. Der Wert dieser Variablen wird normalerweise von kern.maxusers bestimmt. Manchmal muss die Pufferanzahl jedoch manuell eingestellt werden. Auch wenn ein Socket nicht blockierend angelegt wurde, kann der Aufruf von &man.sendfile.2; blockieren, um auf freie struct sf_buf Puffer zu warten. <varname>net.inet.ip.portrange.*</varname> net.inet.ip.portrange.* Die &man.sysctl.8;-Variable net.inet.ip.portrange.* legt die Portnummern für TCP- und UDP-Sockets fest. Es gibt drei Bereiche: den niedrigen Bereich, den normalen Bereich und den hohen Bereich. Die meisten Netzprogramme benutzen den normalen Bereich. Dieser Bereich umfasst in der Voreinstellung die Portnummern 1024 bis 5000 und wird durch die Variablen net.inet.ip.portrange.first und net.inet.ip.portrange.last festgelegt. Die festgelegten Bereiche für Portnummern werden von ausgehenden Verbindungen benutzt. Unter bestimmten Umständen, beispielsweise auf stark ausgelasteten Proxy-Servern, sind alle Portnummern für ausgehende Verbindungen belegt. Bereiche für Portnummern spielen auf Servern keine Rolle, die hauptsächlich eingehende Verbindungen verarbeiten (wie ein normaler Webserver) oder nur eine begrenzte Anzahl ausgehender Verbindungen öffnen (beispielsweise ein Mail-Relay). Wenn keine freien Portnummern mehr vorhanden sind, sollte die Variable net.inet.ip.portrange.last langsam erhöht werden. Ein Wert von 10000, 20000 oder 30000 ist angemessen. Beachten Sie auch eine vorhandene Firewall, wenn Sie die Bereiche für Portnummern ändern. Einige Firewalls sperren große Bereiche (normalerweise aus den kleinen Portnummern) und erwarten, dass hohe Portnummern für ausgehende Verbindungen verwendet werden. Daher kann es erforderlich sein, den Wert von net.inet.ip.portrange.first zu erhöhen. <literal>TCP</literal> Bandwidth Delay Product Begrenzung TCP Bandwidth Delay Product Begrenzung net.inet.tcp.inflight.enable Die TCP Bandwidth Delay Product Begrenzung wird aktiviert, indem die &man.sysctl.8;-Variable net.inet.tcp.inflight.enable auf den Wert 1 gesetzt wird. Das System wird dadurch angewiesen, für jede Verbindung, das Produkt aus der Übertragungsrate und der Verzögerungszeit zu bestimmen. Dieses Produkt begrenzt die Datenmenge, die für einen optimales Durchsatz zwischengespeichert werden muss. Diese Begrenzung ist nützlich, wenn Sie Daten über Verbindungen mit einem hohen Produkt aus Übertragungsrate und Verzögerungszeit wie Modems, Gigabit-Ethernet oder schnellen WANs, zur Verfügung stellen. Insbesondere wirkt sich die Begrenzung aus, wenn die Verbindung die Option Window-scaling verwendet oder große Sende-Fenster (send window) benutzt. Schalten Sie die Debug-Meldungen aus, wenn Sie die Begrenzung aktiviert haben. Dazu setzen Sie die Variable net.inet.tcp.inflight.debug auf 0. Auf Produktions-Systemen sollten Sie zudem die Variable net.inet.tcp.inflight.min mindestens auf den Wert 6144 setzen. Allerdings kann ein zu hoher Wert, abhängig von der Verbindung, die Begrenzungsfunktion unwirksam machen. Die Begrenzung reduziert die Datenmenge in den Queues von Routern und Switches, sowie die Datenmenge in der Queue der lokalen Netzwerkkarte. Die Verzögerungszeit (Round Trip Time) für interaktive Anwendungen sinkt, da weniger Pakete zwischengespeichert werden. Dies gilt besonders für Verbindungen über langsame Modems. Die Begrenzung wirkt sich allerdings nur auf das Versenden von Daten aus (Uploads, Server). Auf den Empfang von Daten (Downloads) hat die Begrenzung keine Auswirkungen. Die Variable net.inet.tcp.inflight.stab sollte nicht angepasst werden. Der Vorgabewert der Variablen beträgt 20, das heißt es werden maximal zwei Pakete zu dem Produkt aus Übertragungsrate und Verzögerungszeit addiert. Dies stabilisiert den Algorithmus und verbessert die Reaktionszeit auf Veränderungen. Bei langsamen Verbindungen können sich aber die Laufzeiten der Pakete erhöhen (ohne diesen Algorithmus wären sie allerdings noch höher). In solchen Fällen können Sie versuchen, den Wert der Variablen auf 15, 10 oder 5 herabzusetzten. Gleichzeitig müssen Sie vielleicht auch net.inet.tcp.inflight.min auf einen kleineren Wert (beispielsweise 3500) setzen. Ändern Sie diese Variablen nur ab, wenn Sie keine anderen Möglichkeiten mehr haben. Virtueller Speicher (<foreignphrase>Virtual Memory</foreignphrase>) <varname>kern.maxvnodes</varname> Ein vnode ist die interne Darstellung einer Datei oder eines Verzeichnisses. Die Erhöhung der Anzahl der für das Betriebssystem verfügbaren vnodes verringert also die Schreib- und Lesezugriffe auf der Festplatte. vnodes werden im Normalfall vom Betriebssystem automatisch vergeben und müssen nicht manuell angepasst werden. In einigen Fällen stellt der Zugriff auf eine Platte allerdings einen Flaschenhals dar, daher sollten Sie in diesem Fall die Anzahl der möglichen vnodes erhöhen, um dieses Problem zu beheben. Beachten Sie dabei aber die Größe des inaktiven und freien Hauptspeichers. Um die Anzahl der derzeit verwendeten vnodes zu sehen, geben Sie Folgendes ein: &prompt.root; sysctl vfs.numvnodes vfs.numvnodes: 91349 Die maximal mögliche Anzahl der vnodes erhalten Sie durch die Eingabe von: &prompt.root; sysctl kern.maxvnodes kern.maxvnodes: 100000 Wenn sich die Anzahl der genutzten vnodes dem maximal möglichen Wert nähert, sollten Sie den Wert kern.maxvnodes zuerst um etwa 1000 erhöhen. Beobachten Sie danach die Anzahl der vom System genutzten vfs.numvnodes. Nähert sich der Wert wiederum dem definierten Maximum, müssen Sie kern.maxvnodes nochmals erhöhen. Sie sollten nun eine Änderung des Speicherverbrauches über &man.top.1; registrieren können und über mehr aktiven Speicher verfügen. Hinzufügen von Swap-Bereichen Manchmal benötigt ein System mehr Swap-Bereiche. Dieser Abschnitt beschreibt zwei Methoden, um Swap-Bereiche hinzuzufügen: auf einer bestehenden Partition oder auf einem neuen Laufwerk, und das Hinzufügen einer Swap-Datei auf einer existierenden Partition. Für Informationen zur Verschlüsselung von Swap-Partitionen, zu den dabei möglichen Optionen sowie zu den Gründen für eine Verschlüsselung des Auslagerungsspeichers lesen Sie . Swap auf einer neuen oder existierenden Festplatte Das Hinzufügen einer neuen Festplatte für Swap-Bereich bietet eine bessere Leistung, als das Hinzufügen einer Partition auf einem vorhandenem Laufwerk. Die Einrichtung von Partitionen und Laufwerken wird in beschrieben. diskutiert Aspekte über die Anordnung und Größe von Swap-Bereichen. Benutzen Sie &man.swapon.8; um eine Swap-Partition zum System hinzuzufügen. Zum Beispiel: &prompt.root; swapon /dev/ada1s1b Sie können jede Partition verwenden, sofern sie nicht schon eingehangen ist. Das gilt auch dann, wenn die Partition bereits Daten enthält. Wird &man.swapon.8; auf einer Partition ausgeführt die noch Daten enthält, werden die vorhandenen Daten überschrieben und sind unweigerlich verloren. Stellen Sie sicher, das die Partition, die Sie als Swap-Bereich hinzufügen möchten, wirklich die gewünschte Partition ist, bevor sie &man.swapon.8; ausführen. Um diese Swap-Partition automatisch beim Systemstart hinzuzufügen, fügen Sie einen Eintrag in /etc/fstab hinzu: /dev/ada1s1b none swap sw 0 0 Die einzelnen Einträge von /etc/fstab werden in &man.fstab.5; erläutert. Swap-Bereiche über <literal>NFS</literal> Swap-Bereiche über NFS sollten Sie nur dann einsetzen, wenn Sie über keine lokale Platte verfügen, da es durch die zur Verfügung stehende Bandbreite limitiert wird und außerdem den NFS-Server zusätzlich belastet. Swap-Dateien Sie können eine Datei festgelegter Größe als Swap-Bereich nutzen. Im folgenden Beispiel wird eine 64 MB große Datei mit dem Namen /usr/swap0 benutzt. Erstellen einer Swap-Datei Der GENERIC-Kernel unterstützt bereits RAM-Disks (&man.md.4;), welche für diese Aktion benötigt werden. Wenn Sie einen eigenen Kernel erstellen, vergewissern Sie sich, dass die folgende Zeile in der Kernelkonfigurationsdatei enthalten ist: device md Informationen, wie man einen eigenen Kernel erstellen kann, erhalten Sie in . Legen Sie die Swap-Datei /usr/swap0 an: &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Setzen Sie die richtigen Berechtigungen für /usr/swap0: &prompt.root; chmod 0600 /usr/swap0 Aktivieren Sie die Swap-Datei /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Um die Swap-Datei zu aktivieren, führen Sie entweder einen Neustart durch oder geben das folgende Kommando ein: &prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0 Energie- und Ressourcenverwaltung Hiten Pandya Verfasst von Tom Rhodes Es ist wichtig, Hardware effizient einzusetzen. Vor der Einführung des Advanced Configuration and Power Interface (ACPI) konnten Stromverbrauch und Wärmeabgabe eines Systems nur schlecht von Betriebssystemen gesteuert werden. Die Hardware wurde vom BIOS gesteuert, was die Kontrolle der Energieverwaltung für den Anwender erschwerte. Das Advanced Power Management (APM) erlaubte es lediglich, einige wenige Funktionen zu steuern, obwohl die Überwachung von Energie- und Ressourcenverbrauch zu den wichtigsten Aufgaben eines Betriebssystems gehört, um auf verschiedene Ereignisse, beispielsweise einen unerwarteten Temperaturanstieg, reagieren können. Dieser Abschnitt erklärt das Advanced Configuration and Power Interface (ACPI). Was ist ACPI? ACPI APM Advanced Configuration and Power Interface (ACPI) ist ein Standard verschiedener Hersteller, der die Verwaltung von Hardware und Energiesparfunktionen festlegt. Die ACPI-Funktionen können von einem Betriebssystem gesteuert werden. Der Vorgänger des ACPI, APM, erwies sich in modernen Systemen als unzureichend. Mängel des Advanced Power Managements Das APM steuert den Energieverbrauch eines Systems auf Basis der Systemaktivität. Das APM-BIOS wird von dem Hersteller des Systems zur Verfügung gestellt und ist auf die spezielle Hardware angepasst. Der APM-Treiber des Betriebssystems greift auf das APM Software Interface zu, das den Energieverbrauch regelt. APM findet sich in der Regel nur noch in Systemen, die vor 2001 produziert wurden. Das APM hat hauptsächlich vier Probleme. Erstens läuft die Energieverwaltung unabhängig vom Betriebssystem in einem herstellerspezifischen BIOS. Beispielsweise kann das APM-BIOS die Festplatten nach einer konfigurierbaren Zeit ohne die Zustimmung des Betriebssystems herunterfahren. Zweitens befindet sich die ganze APM-Logik im BIOS; das Betriebssystem hat gar keine APM-Komponenten. Bei Problemen mit dem APM-BIOS muss das Flash-ROM aktualisiert werden. Diese Prozedur ist gefährlich, da sie im Fehlerfall das System unbrauchbar machen kann. Zum Dritten ist APM eine Technik, die herstellerspezifisch ist und nicht koordiniert wird. Fehler im BIOS eines Herstellers werden nicht unbedingt im BIOS anderer Hersteller korrigiert. Das letzte Problem ist, dass im APM-BIOS nicht genügend Platz vorhanden ist, um eine durchdachte oder eine auf den Zweck der Maschine zugeschnittene Energieverwaltung zu implementieren. Das Plug and Play BIOS (PNPBIOS) war ebenfalls unzureichend. Das PNPBIOS verwendet eine 16-Bit-Technik. Damit das Betriebssystem das PNPBIOS ansprechen kann, muss es in einer 16-Bit-Emulation laufen. Der APM-Treiber wird in &man.apm.4; beschrieben. Konfiguration des <acronym>ACPI</acronym> Das Modul &man.acpi.4; wird standardmäßig beim Systemstart vom &man.loader.8; geladen und sollte daher nicht fest in den Kernel eingebunden werden. Dadurch kann ein Modul ohne einen Neubau des Kernels leichter ersetzt und getestet werden. Das ACPI-Modul im laufenden Betrieb zu laden, führt oft nicht zum gewünschten Ergebnis. Treten bei Ihrem System Probleme auf, kann ACPI auch komplett deaktiviert werden. Dazu definieren Sie die Variable hint.acpi.0.disabled="1" in der Datei /boot/loader.conf. Alternativ können Sie die Variable auch am &man.loader.8;-Prompt eingeben. Das Modul kann im laufenden Betrieb nicht entfernt werden, da es zur Kommunikation mit der Hardware verwendet wird. ACPI und APM können nicht zusammen verwendet werden. Das zuletzt geladene Modul beendet sich, sobald es bemerkt, dass das andere Modul geladen ist. Mit &man.acpiconf.8; können Sie das System in einen Ruhemodus (sleep mode) versetzen. Es gibt verschiedene Modi (von 1 bis 5), die Sie auf der Kommandozeile mit angeben können. Für die meisten Anwender sind die Modi 1 und 3 völlig ausreichend. Der Modus 5 schaltet das System aus (Soft-off) und entspricht dem folgenden Befehl: &prompt.root; halt -p Verschiedene Optionen können als &man.sysctl.8;-Variablen gesetzt werden. Lesen Sie dazu &man.acpi.4; sowie &man.acpiconf.8;. <acronym>ACPI</acronym>-Fehlersuche Nate Lawson Verfasst von Peter Schultz Mit Beiträgen von Tom Rhodes ACPI Probleme mit ACPI ist ein gänzlich neuer Weg, um Geräte aufzufinden und deren Stromverbrauch zu regulieren. Weiterhin bietet ACPI einen einheitlichen Zugriff auf Geräte, die vorher vom BIOS verwaltet wurden. Es werden zwar Fortschritte gemacht, dass ACPI auf allen Systemen läuft, doch tauchen immer wieder Fehler auf: fehlerhafter Bytecode der ACPI-Machine-Language (AML) einiger Systemplatinen, ein unvollständiges &os;-Kernel-Subsystem oder Fehler im ACPI-CA-Interpreter von &intel;. Dieser Abschnitt hilft Benutzern, zusammen mit den Betreuern des &os;-ACPI-Subsystems, Fehlerquellen zu finden und Fehler zu beseitigen. Fehlerberichte einreichen Bevor Sie einen Fehlerbericht einreichen, stellen Sie bitte sicher, dass das BIOS und die Firmware des Controllers aktuell sind. Wenn Sie einen Fehlerbericht einsenden wollen, schicken Sie bitte die folgenden Informationen an die Mailingliste freebsd-acpi: Beschreiben Sie den Fehler und alle Umstände, unter denen der Fehler auftritt. Geben Sie ebenfalls den Typ und das Modell Ihres Systems an. Wenn Sie einen neuen Fehler entdeckt haben, versuchen Sie möglichst genau zu beschreiben, wann der Fehler das erste Mal aufgetreten ist. Die Ausgabe von &man.dmesg.8; nach der Eingabe von boot -v. Geben Sie auch alle Fehlermeldungen an, die erscheinen, wenn Sie den Fehler provozieren. Die Ausgabe von &man.dmesg.8; nach der Eingabe von boot -v und mit deaktiviertem ACPI, wenn das Problem ohne ACPI nicht auftritt. Die Ausgabe von sysctl hw.acpi. Dieses Kommando zeigt die vom System unterstützten ACPI-Funktionen an. Die URL, unter der die ACPI-Source-Language (ASL) liegt. Schicken Sie bitte nicht die ASL an die Mailingliste, da die ASL sehr groß sein kann. Eine Kopie der ASL erstellen Sie mit dem nachstehenden Befehl: &prompt.root; acpidump -td > name-system.asl Setzen Sie für name den Namen des Kontos und für system den Hersteller und das Modell des Systems ein. Zum Beispiel: njl-FooCo6000.asl. Obwohl die meisten Entwickler die Mailingliste &a.current.name; lesen, sollten Sie Fehlerberichte an die Liste &a.acpi.name; schicken. Seien Sie bitte geduldig; wir haben alle Arbeit außerhalb des Projekts. Wenn der Fehler nicht offensichtlich ist, bitten wir Sie vielleicht, einen offiziellen Fehlerbericht (PR) mit &man.send-pr.1; einzusenden. Geben Sie im Fehlerbericht bitte dieselben Informationen wie oben an. Mithilfe der PRs verfolgen und lösen wir Probleme. Senden Sie bitte keinen PR ein, ohne vorher den Fehlerbericht an die Liste &a.acpi.name; zu senden. Es kann sein, dass der Fehler schon von jemand anderem gemeldet wurde. <acronym>ACPI</acronym>-Grundlagen ACPI ACPI gibt es in allen modernen Rechnern der ia32- (x86), ia64- (Itanium) und amd64- (AMD) Architektur. Der vollständige Standard bietet Funktionen zur Steuerung und Verwaltung der CPU-Leistung, der Stromversorgung, von Wärmebereichen, Batterien, eingebetteten Controllern und Bussen. Auf den meisten Systemen wird nicht der vollständige Standard implementiert. Arbeitsplatzrechner besitzen meist nur Funktionen zur Verwaltung der Busse, während Notebooks Funktionen zur Temperaturkontrolle und Ruhezustände besitzen. Ein ACPI konformes System besitzt verschiedene Komponenten. Die BIOS- und Chipsatz-Hersteller stellen mehrere statische Tabellen bereit, zum Beispiel die Fixed-ACPI-Description-Table (FADT). Die Tabellen enthalten beispielsweise die mit SMP-Systemen benutzte APIC-Map, Konfigurationsregister und einfache Konfigurationen. Zusätzlich gibt es die Differentiated-System-Description-Table (DSDT), die Bytecode enthält. Die Tabelle ordnet Geräte und Methoden in einem baumartigen Namensraum an. Ein ACPI-Treiber muss die statischen Tabellen einlesen, einen Interpreter für den Bytecode bereitstellen und die Gerätetreiber im Kernel so modifizieren, dass sie mit dem ACPI-Subsystem kommunizieren. Für &os;, &linux; und NetBSD hat &intel; den Interpreter ACPI-CA, zur Verfügung gestellt. Der Quelltext zu ACPI-CA befindet sich im Verzeichnis src/sys/contrib/dev/acpica. Die Schnittstelle von ACPI-CA zu &os; befindet sich unter src/sys/dev/acpica/Osd. Treiber, die verschiedene ACPI-Geräte implementieren, befinden sich im Verzeichnis src/sys/dev/acpica. Häufige Probleme ACPI Probleme mit Damit ACPI richtig funktioniert, müssen alle Teile funktionieren. Im Folgenden finden Sie eine Liste mit Problemen und möglichen Umgehungen oder Fehlerbehebungen. Die Liste ist nach der Häufigkeit, mit der die Probleme auftreten, sortiert. Mausprobleme Es kann vorkommen, dass die Maus nicht mehr funktioniert, wenn Sie nach einem Suspend weiterarbeiten wollen. Ist dies bei Ihnen der Fall, reicht es meistens aus, den Eintrag hint.psm.0.flags="0x3000" in /boot/loader.conf aufzunehmen. Besteht das Problem weiterhin, sollten Sie einen Fehlerbericht senden. Suspend/Resume ACPI kennt drei Suspend-to-RAM-Zustände (STR): S1-S3. Es gibt einen Suspend-to-Disk-Zustand (STD): S4. Der Zustand S5 wird Soft-Off genannt. In diesem Zustand befindet sich ein Rechner, wenn die Stromversorgung angeschlossen ist, der Rechner aber nicht hochgefahren ist. Der Zustand S4 kann auf zwei Arten implementiert werden: S4BIOS und S4OS. Im ersten Fall wird der Suspend-to-Disk-Zustand durch das BIOS hergestellt im zweiten Fall alleine durch das Betriebssystem. Die Suspend-Zustände sind Ruhezustände, in denen der Rechner weniger Energie als im Normalbetrieb benötigt. Resume bezeichnet die Rückkehr zum Normalbetrieb. Die Suspend-Zustände können Sie mit dem Kommando sysctl hw.acpi ermitteln. Das Folgende könnte beispielsweise ausgegeben werden: hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.s4bios: 0 Diese Ausgabe besagt, dass mit dem Befehl acpiconf -s die Zustände S3, S4OS und S5 eingestellt werden können. Hätte den Wert 1, gäbe es den Zustand S4BIOS anstelle von S4OS. Wenn Sie die Suspend- und Resume-Funktionen testen, fangen Sie mit dem S1-Zustand an, wenn er angeboten wird. Dieser Zustand wird am ehesten funktionieren, da der Zustand wenig Treiber-Unterstützung benötigt. Der Zustand S2 ist ähnlich wie S1, allerdings hat ihn noch niemand implementiert. Als nächstes sollten Sie den Zustand S3 ausprobieren. Dies ist der tiefste STR-Schlafzustand. Dieser Zustand ist auf massive Treiber-Unterstützung angewiesen, um die Geräte wieder richtig zu initialisieren. Wenn Sie Probleme mit diesem Zustand haben, können Sie die Mailingliste &a.acpi.name; anschreiben. Erwarten Sie allerdings nicht zu viel: Es gibt viele Treiber und Geräte, an denen noch gearbeitet und getestet wird. Ein häufiges Problem mit Suspend/Resume ist, dass viele Gerätetreiber ihre Firmware, Register und Gerätespeicher nicht korrekt speichern, wiederherstellen und/oder reinitialisieren. Um dieses Problem zu lösen, sollten Sie zuerst die folgenden Befehle ausführen: &prompt.root; sysctl debug.bootverbose=1 &prompt.root; sysctl debug.acpi.suspend_bounce=1 &prompt.root; acpiconf -s 3 Dieser Test emuliert einen Suspend/Resume-Zyklus für alle Geräte (ohne dass diese dabei wirklich in den Status S3 wechseln). In vielen Fällen reicht dies bereits aus, um Probleme (beispielsweise verlorener Firmware-Status, Timeouts, hängende Geräte) zu entdecken. Beachten Sie dabei, dass das Gerät bei diesem Test nicht wirklich in den Status S3 wechseln. Es kann also vorkommen, dass manche Geräte weiterhin mit Strom versorgt werden (dies wäre bei einem wirklichen Wechsel in den Status S3 NICHT möglich. Andere Geräte werden normal weiterarbeiten, weil sie über keine Suspend/Resume-Funktionen verfügen. Schwierigere Fälle können den Einsatz zusätzlicher Hardware (beispielsweise serielle Ports/Kabel für die Verbindung über eine serielle Konsole oder Firewire-Ports/Kabel für &man.dcons.4;) sowie Kenntnisse im Bereich Kerneldebugging erforderlich machen. Um das Problem einzugrenzen, entfernen Sie soviele Treiber wie möglich aus dem Kernel. Sie können das Problem isolieren, indem Sie einen Treiber nach dem anderen laden, bis der Fehler wieder auftritt. Typischerweise verursachen binäre Treiber wie nvidia.ko, Grafiktreiber und USB-Treiber die meisten Fehler, hingegen laufen Ethernet-Treiber für gewöhnlich sehr zuverlässig. Wenn ein Treiber zuverlässig geladen und entfernt werden kann, können Sie den Vorgang automatisieren, indem Sie die entsprechenden Kommandos in /etc/rc.suspend und /etc/rc.resume einfügen. In den Dateien finden Sie ein deaktiviertes Beispiel, das einen Treiber lädt und wieder entfernt. Ist die Bildschirmanzeige bei der Wiederaufnahme des Betriebs gestört, setzen Sie die Variable auf 0. Versuchen Sie auch, die Variable auf kürzere Zeitspannen zu setzen. Die Suspend- und Resume-Funktionen können Sie auch auf einer neuen &linux;-Distribution mit ACPI testen. Wenn es mit &linux; funktioniert, liegt das Problem wahrscheinlich bei einem &os;-Treiber. Es hilft uns, das Problem zu lösen, wenn Sie feststellen können, welcher Treiber das Problem verursacht. Beachten Sie bitte, dass die ACPI-Entwickler normalerweise keine anderen Treiber pflegen (beispielsweise Sound- oder ATA-Treiber). Es ist wohl das beste, die Ergebnisse der Fehlersuche an die Mailingliste &a.current.name; und den Entwickler des Treibers zu schicken. Erfahrene Benutzer können versuchen, den Fehler in der Resume-Funktion zu finden, indem sie einige &man.printf.3;-Anweisungen in den Code des fehlerhaften Treibers einfügen. Schließlich können Sie ACPI noch abschalten und stattdessen APM verwenden. Wenn die Suspend- und Resume-Funktionen mit APM funktionieren, sollten Sie besser APM verwenden (insbesondere mit alter Hardware von vor dem Jahr 2000). Die Hersteller benötigten einige Zeit, um ACPI korrekt zu implementieren, daher gibt es mit älterer Hardware oft ACPI-Probleme. Systemhänger Die meisten Systemhänger entstehen durch verlorene Interrupts oder einen Interrupt-Sturm. Probleme werden verursacht durch die Art, in der das BIOS Interrupts vor dem Systemstart konfiguriert, durch eine fehlerhafte APIC-Tabelle und durch die Zustellung des System-Control-Interrupts (SCI). Interrupt-Sturm Anhand der Ausgabe des Befehls vmstat -i können Sie verlorene Interrupts von einem Interrupt-Sturm unterscheiden. Untersuchen Sie die Ausgabezeile, die acpi0 enthält. Ein Interrupt-Sturm liegt vor, wenn der Zähler öfter als ein paar Mal pro Sekunde hochgezählt wird. Wenn sich das System aufgehangen hat, versuchen Sie mit der Tastenkombination Ctrl Alt Esc in den Debugger DDB zu gelangen. Geben Sie dort den Befehl show interrupts ein. APIC deaktivieren Wenn Sie Interrupt-Probleme haben, ist es vorerst wohl am besten, APIC zu deaktivieren. Tragen Sie dazu die Zeile hint.apic.0.disabled="1" in /boot/loader.conf ein. Abstürze (Panics) Panics werden so schnell wie möglich behoben; mit ACPI kommt es aber selten dazu. Zuerst sollten Sie die Panic reproduzieren und dann versuchen einen backtrace (eine Rückverfolgung der Funktionsaufrufe) zu erstellen. Richten Sie dazu den DDB über die serielle Schnittstelle (siehe ) oder eine gesonderte &man.dump.8;-Partition ein. In DDB können Sie den backtrace mit dem Kommando tr erstellen. Falls Sie den backtrace vom Bildschirm abschreiben müssen, schreiben Sie bitte mindestens die fünf ersten und die fünf letzten Zeile der Ausgabe auf. Versuchen Sie anschließend, das Problem durch einen Neustart ohne ACPI zu beseitigen. Wenn das funktioniert hat, können Sie versuchen, das verantwortliche ACPI-Subsystem durch Setzen der Variablen herauszufinden. Die Hilfeseite &man.acpi.4; enthält dazu einige Beispiele. Nach einem Suspend oder einem Stopp startet das System wieder Setzen Sie zuerst in /boot/loader.conf 0. Damit wird verhindert, dass ACPI während des Systemabschlusses die Bearbeitung verschiedener Ereignisse deaktiviert. Auf manchen Systemen muss die Variable den Wert 1 besitzen (die Voreinstellung). Normalerweise wird der unerwünschte Neustart des Systems durch Setzen dieser Variablen behoben. Andere Probleme Wenn Sie weitere Probleme mit ACPI haben (Umgang mit einer Docking-Station, nicht erkannte Geräte), schicken Sie bitte eine Beschreibung an die Mailingliste &a.acpi.name;. Allerdings kann es sein, dass einige Probleme von noch unvollständigen Teilen des ACPI-Subsystems abhängen und es etwas dauern kann bis diese Teile fertig sind. Seien Sie geduldig und rechnen Sie damit, Fehlerbehebungen zu testen. <acronym>ASL</acronym>, &man.acpidump.8; und <acronym>IASL</acronym> ACPI ASL Einige BIOS-Hersteller liefern einen fehlerhaften Bytecode aus. Dies erkennen Sie an Kernelmeldungen wie diesen: ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND Oft können Sie das Problem dadurch lösen, dass Sie eine aktuelle BIOS-Version einspielen. Die meisten Meldungen auf der Konsole sind harmlos, wenn aber beispielsweise der Batteriestatus falsch angezeigt wird, können Sie in den Meldungen nach Problemen mit der AML-Machine-Language (AML) suchen. Der Bytecode der AML wird aus der ACPI-Source-Language (ASL) übersetzt und in einer Tabelle, der DSDT, abgelegt. Eine Kopie der ASL können Sie mit dem Befehl &man.acpidump.8; erstellen. Verwenden Sie mit diesem Befehl sowohl die Option (die Inhalte der statischen Tabellen anzeigen) als auch die Option (die AML in ASL zurückübersetzen). Ein Beispiel für die Syntax finden Sie in . Sie können einfach prüfen, ob sich die ASL übersetzen lässt. Für gewöhnlich können Sie Warnungen während des Übersetzens ignorieren. Fehlermeldungen führen normal dazu, dass ACPI fehlerhaft arbeitet. ASL übersetzen Sie mit dem nachstehenden Kommando: &prompt.root; iasl ihre.asl Die <acronym>ASL</acronym> reparieren ACPI ASL Es ist das Ziel von &os;, dass ACPI ohne Eingriffe des Benutzers läuft. Zurzeit werden allerdings noch Umgehungen für Fehler der BIOS-Hersteller entwickelt. Der µsoft;-Interpreter (acpi.sys und acpiec.sys) prüft die ASL nicht streng gegen den Standard. Daher reparieren BIOS-Hersteller, die ACPI nur unter &windows; testen, ihre ASL nicht. Die &os; Entwickler hoffen, dass sie das vom Standard abweichende Verhalten des µsoft;-Interpreters dokumentieren und in &os; replizieren können. Dadurch müssen Benutzer ihre ASL nicht selbst reparieren. Sie können Ihre ASL selbst reparieren, wenn Sie ein Problem umgehen und uns helfen möchten. Senden Sie bitte die mit &man.diff.1; erstellte Differenz zwischen alter und neuer ASL. Die Entwickler werden versuchen, den Interpreter ACPI-CA zu korrigieren. ACPI Fehlermeldungen Die nachfolgende Liste enthält häufige Fehlermeldungen, deren Ursache und eine Beschreibung, wie die Fehler korrigiert werden: Abhängigkeiten vom Betriebssystem Einige AMLs gehen davon aus, dass der Anwender eine &windows;-Versionen benutzt. Versuchen Sie das Betriebssystem, das Sie in der ASL finden, in /boot/loader.conf anzugeben: hw.acpi.osname="Windows 2001". Fehlende Return-Anweisungen Einige Methoden verzichten auf die vom Standard vorgeschriebene Rückgabe eines Wertes. Obwohl der Interpreter ACPI-CA dies nicht beheben kann, besitzt &os; die Möglichkeit, den Rückgabewert implizit zu setzen. Wenn Sie wissen, welcher Wert zurückgegeben werden muss, können Sie die fehlenden Return-Anweisungen selbst einsetzen. Die Option zwingt &man.iasl.8;, die ASL zu übersetzen. Überschreiben der vorgegebenen <acronym>AML</acronym> Nachdem Sie Ihre ASL in der Datei ihre.asl angepasst haben, übersetzen Sie die ASL wie folgt: &prompt.root; iasl ihre.asl Die Option erzwingt das Erstellen der AML auch dann, wenn während der Übersetzung Fehler auftreten. Einige Fehler, wie fehlende Return-Anweisungen, werden automatisch vom Interpreter umgangen. In der Voreinstellung erstellt der Befehl &man.iasl.8; die Ausgabedatei DSDT.aml. Wenn Sie diese Datei anstelle der fehlerhaften Kopie des BIOS laden wollen, editieren Sie /boot/loader.conf wie folgt: acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml" Stellen Sie bitte sicher, dass sich DSDT.aml in /boot befindet. <acronym>ACPI</acronym>-Meldungen zur Fehlersuche erzeugen ACPI Probleme mit ACPI Fehlersuche Der ACPI-Treiber besitzt flexible Möglichkeiten zur Fehlersuche. Sie können sowohl die zu untersuchenden Subsysteme als auch die zu erzeugenden Ausgaben festlegen. Die zu untersuchenden Subsysteme werden als so genannte layers angegeben. Die Subsysteme sind in ACPI-CA-Komponenten (ACPI_ALL_COMPONENTS) und ACPI-Hardware (ACPI_ALL_DRIVERS) aufgeteilt. Welche Meldungen ausgegeben werden, wird über level gesteuert. level reicht von ACPI_LV_ERROR (es werden nur Fehler ausgegeben) bis zu ACPI_LV_VERBOSE (alles wird ausgegeben). level ist eine Bitmaske, sodass verschiedene Stufen auf einmal (durch Leerzeichen getrennt) angegeben werden können. Die erzeugte Ausgabemenge passt vielleicht nicht in den Konsolenpuffer. In diesem Fall sollte die Ausgabe mithilfe einer seriellen Konsole gesichert werden. Die möglichen Werte für layers und level werden in &man.acpi.4; beschrieben. Die Ausgaben zur Fehlersuche sind in der Voreinstellung nicht aktiviert. Wenn ACPI im Kernel enthalten ist, fügen Sie options ACPI_DEBUG zur Kernelkonfigurationsdatei hinzu. Sie können die Ausgaben zur Fehlersuche global aktivieren, indem Sie in der Datei /etc/make.conf die Zeile ACPI_DEBUG=1 einfügen. Das Modul acpi.ko können Sie wie folgt neu übersetzen: &prompt.root; cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1 Installieren Sie anschließend acpi.ko im Verzeichnis /boot/kernel. In /boot/loader.conf stellen Sie level und layer ein. Das folgende Beispiel aktiviert die Ausgabe von Fehlern für alle ACPI-CA-Komponenten und alle ACPI-Hardwaretreiber (wie CPU, LID): debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR" Wenn ein Problem durch ein bestimmtes Ereignis, beispielsweise den Start nach einem Ruhezustand, hervorgerufen wird, können Sie die Einstellungen für level und layer auch mit dem Kommando sysctl vornehmen. In diesem Fall müssen Sie /boot/loader.conf nicht editieren. Auf der Kommandozeile geben Sie über &man.sysctl.8; dieselben Variablennamen wie in /boot/loader.conf an. ACPI-Informationsquellen Weitere Informationen zu ACPI erhalten Sie an den folgenden Stellen: die &a.acpi; Mailingliste, die Archive der ACPI-Mailingliste: http://lists.FreeBSD.org/pipermail/freebsd-acpi/, die alten Archive der ACPI-Mailingliste: http://home.jp.FreeBSD.org/mail-list/acpi-jp/, die ACPI-Spezifikation (Version 2.0): http://acpi.info/spec.htm, &man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8; und &man.acpidb.8;, DSDT debugging resource. Index: head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 48864) +++ head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 48865) @@ -1,6221 +1,5943 @@ Netzwerkserver Übersicht 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. Nachdem Sie dieses Kapitel gelesen haben, werden Sie Den inetd-Daemon konfigurieren können. Wissen, wie das Network File System (NFS) eingerichtet wird. Einen Network Information Server (NIS) einrichten können, um damit Benutzerkonten im Netzwerk zu verteilen. Wissen, wie Sie &os; einrichten, um als LDAP-Server oder -Client zu agieren. Rechner durch Nutzung von DHCP automatisch für ein Netzwerk konfigurieren können. In der Lage sein, einen Domain Name Server (DNS) einzurichten. Den Apache HTTP-Server konfigurieren können. Wissen, wie man einen File Transfer Protocol (FTP)-Server einrichtet. Mit Samba einen Datei- und Druckserver für &windows;-Clients konfigurieren können. Unter Nutzung des NTP-Protokolls Datum und Uhrzeit synchronisieren sowie einen Zeitserver installieren können. - Wissen, wie man den Standard-Protokollienst, - syslogd, konfiguriert, um Protokolle von - anderen Hosts zu akzeptieren. - - - Wissen, wie iSCSI eingerichtet wird. Dieses Kapitel setzt folgende Grundkenntnisse voraus: /etc/rc-Skripte. Netzwerkterminologie Installation zusätzlicher Software von Drittanbietern (). Der <application>inetd</application> <quote>Super-Server</quote> Der &man.inetd.8;-Daemon wird manchmal auch als Internet Super-Server bezeichnet, weil er Verbindungen für viele Dienste verwaltet. Anstatt mehrere Anwendungen zu starten, muss nur der inetd-Dienst gestartet werden. Wenn eine Verbindung für einen Dienst eintrifft, der von inetd verwaltet wird, bestimmt inetd, welches Programm für die eingetroffene Verbindung zuständig ist, aktiviert den entsprechenden Prozess und reicht den Socket an ihn weiter. Der Einsatz von inetd an Stelle viele einzelner Daemonen kann auf nicht komplett ausgelasteten Servern zu einer Verringerung der Systemlast führen. inetd wird vor allem dazu verwendet, andere Daemonen zu aktivieren, einige Protokolle werden aber auch intern verwaltet. Dazu gehören chargen, auth, time, echo, discard sowie daytime. Dieser Abschnitt beschreibt die Konfiguration von inetd. Konfigurationsdatei Die Konfiguration von inetd erfolgt über /etc/inetd.conf Jede Zeile dieser Datei repräsentiert eine Anwendung, die von inetd gestartet werden kann. In der Voreinstellung beginnt jede Zeile mit einem Kommentar (#), was bedeutet dass inetd keine Verbindungen für Anwendungen akzeptiert. Entfernen Sie den Kommentar am Anfang der Zeile, damit inetd Verbindungen für diese Anwendung entgegennimmt. Nachdem Sie die Änderungen gespeichert haben, fügen Sie folgende Zeile in /etc/rc.conf ein, damit inetd bei Booten automatisch gestartet wird: inetd_enable="YES" Starten Sie jetzt inetd, so dass er Verbindungen für die von Ihnen konfigurierten Dienste entgegennimmt: &prompt.root; service inetd start Sobald inetd gestartet ist, muss der Dienst benachrichtigt werden, wenn eine Änderung in /etc/inetd.conf gemacht wird: Die Konfigurationsdatei von <application>inetd</application> neu einlesen &prompt.root; service inetd reload Normalerweise müssen Sie lediglich den Kommentar vor der Anwendung entfernen. In einigen Situationen kann es jedoch sinnvoll sein, den Eintrag weiter zu bearbeiten. Als Beispiel dient hier der Standardeintrag für &man.ftpd.8; über IPv4: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l Die sieben Spalten in diesem Eintrag haben folgende Bedeutung: 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 service-name Der Dienstname eines bestimmten Daemons. Er muss einem in /etc/services aufgelisteten Dienst entsprechen. Hier wird festgelegt, auf welchen Port inetd eingehende Verbindungen für diesen Dienst entgegennimmt. Wenn ein neuer Dienst benutzt wird, muss er zuerst in /etc/services eingetragen werden. socket-type Entweder stream, dgram, raw, oder seqpacket. Nutzen Sie stream für TCP-Verbindungen und dgram für UDP-Dienste. protocol Benutzen Sie eines der folgenden Protokolle: Protokoll Bedeutung tcp oder tcp4 TCP (IPv4) udp oder udp4 UDP (IPv4) tcp6 TCP (IPv6) udp6 UDP (IPv6) tcp46 TCP sowohl unter IPv4 als auch unter IPv6 udp46 UDP sowohl unter IPv4 als auch unter IPv6 {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] In diesem Feld muss oder angegeben werden. , sowie sind optional. gibt an, ob der Dienst seinen eigenen Socket verwalten kann oder nicht. -Sockets müssen die Option verwenden, während Daemonen mit -Sockets, die normalerweise auch aus mehreren Threads bestehen, die Option verwenden sollten. Die Option gibt in der Regel mehrere Sockets an einen einzelnen Daemon weiter, während für jeden neuen Socket einen Childdaemon erzeugt. Die maximale Anzahl an Child-Daemonen, die inetd erzeugen kann, wird durch die Option festgelegt. Wenn ein bestimmter Daemon 10 Instanzen benötigt, wird der Wert /10 hinter die Option gesetzt. Der Wert /0 gibt an, das es keine Beschränkung gibt. legt die maximale Anzahl von Verbindungsversuchen pro Minute fest, die von einer bestimmten IP-Adresse aus unternommen werden können. Sobald das Limit erreicht ist, werden weitere Verbindungen von dieser IP-Adresse geblockt, bis die Minute vorüber ist. Ein Wert von /10 würde die maximale Anzahl der Verindungsversuche einer bestimmten IP-Adresse auf zehn Versuche in der Minute beschränken. legt fest, wie viele Child-Daemonen von einer bestimmten IP-Adresse aus gestartet werden können. Durch diese Optionen lassen sich Ressourcenverbrauch sowie die Auswirkungen eines Denial of Service (DoS)-Angriffs begrenzen. Ein Beispiel finden Sie in den Voreinstellungen für &man.fingerd.8;: finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s user Der Benutzername, unter dem der jeweilige Daemon laufen soll. Meistens laufen Daemonen als root, daemon oder nobody. server-program Der vollständige Pfad des Daemons. Wird der Daemon von inetd intern bereitgestellt, verwenden Sie . server-program-arguments 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 . Kommandozeilenoptionen Wie die meisten anderen Server-Daemonen lässt sich auch inetd über verschiedene Optionen steuern. In der Voreinstellung wird inetd mit -wW -C 60 gestartet. Durch das Setzen dieser Werte wird das TCP-Wrapping für alle inetd-Dienste aktiviert. Zudem wird verhindert, dass eine IP-Adresse eine Dienst öfter als 60 Mal pro Minute anfordern kann. Um die Voreinstellungen für inetd zu ändern, fügen Sie einen Eintrag für inetd_flags in /etc/rc.conf hinzu. Wenn inetd bereits ausgeführt wird, starten Sie ihn mit service inetd restart neu. Die verfügbaren Optionen sind: -c maximum 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 in /etc/inetd.conf festgelegt werden. -C rate Legt fest, wie oft ein Dienst von einer einzelnen IP-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 in /etc/inetd.conf festgelegt werden. -R rate Legt fest, wie oft ein Dienst in der Minute aktiviert werden kann; in der Voreinstellung sind dies 256 Aktivierungen pro Minute. Ein Wert von 0 erlaubt unbegrenzt viele Aktivierungen. -s maximum Legt fest, wie oft ein Dienst in der Minute von einer einzelnen IP-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 in /etc/inetd.conf angepasst werden. Es sind noch weitere Optionen verfügbar. Eine vollständige Liste der Optionen finden Sie in &man.inetd.8;. - Überlegungen zur Sicherheit + Sicherheitsbedenken Viele Daemonen, die von inetd verwaltet werden, sind nicht auf Sicherheit bedacht. Einige Damonen, wie beispielsweise fingerd, 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. max-connections-per-ip-per-minute, max-child und max-child-per-ip können verwendet werden, um solche Angriffe zu begrenzen. TCP-Wrapper 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 inetd aktivierte Daemonen benötigen. Network File System (<acronym>NFS</acronym>) NFS &os; unterstützt das Netzwerkdateisystem NFS, das es einem Server erlaubt, Dateien und Verzeichnisse über ein Netzwerk mit Clients zu teilen. Mit NFS können Benutzer und Programme auf Daten entfernter Systeme zugreifen, und zwar so, als ob es sich um lokal gespeicherte Daten handeln würde. Die wichtigsten Vorteile von NFS sind: 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. Die Heimatverzeichnisse der Benutzer werden an einem zentralen Ort gespeichert und den Benutzern über das Netzwerk zur Verfügung gestellt. Die Verwaltung der NFS-Exporte wird vereinfacht. Zum Beispiel gibt es dann nur noch ein Dateisystem, für das Sicherheits- oder Backup-Richtlinien festgelegt werden müssen. 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. NFS besteht aus zwei Hauptteilen: 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: Folgende Daemonen müssen auf dem Server ausgeführt werden: NFS Server Dateiserver Unix-Clients rpcbind mountd nfsd Daemon Beschreibung nfsd Der NFS-Daemon. Er bearbeitet Anfragen der NFS-Clients. mountd Der NFS-Mount-Daemon. Er bearbeitet die Anfragen, die &man.nfsd.8; an ihn weitergibt. rpcbind Der Portmapper-Daemon. Durch ihn erkennen die NFS-Clients, welchen Port der NFS-Server verwendet. Der Einsatz von &man.nfsiod.8; ist nicht zwingend erforderlich, kann aber die Leistung auf dem Client verbessern. <acronym>NFS</acronym> einrichten NFS einrichten NFS lässt sich leicht aktivieren. Die nötigen Prozesse werden durch das Hinzufügen der folgenden Optionen in /etc/rc.conf bei jedem Systemstart ausgeführt: rpcbind_enable="YES" nfs_server_enable="YES" mountd_flags="-r" mountd läuft automatisch, wenn der NFS-Server aktiviert ist. Um den Client zu aktivieren, muss folgende Option in /etc/rc.conf gesetzt werden: nfs_client_enable="YES" /etc/exports legt fest, welche Dateisysteme NFS exportieren soll. Jede Zeile in /etc/exports beschreibt ein zu exportierendes Dateisystem, Clients, die darauf Zugriff haben sowie alle Zugriffsoptionen. Es gibt viele verschiedene Optionen, allerdings werden hier nur wenige von ihnen erwähnt. Eine vollständige Liste der Optionen finden Sie in &man.exports.5;. NFS Export von Dateisystemen Die folgenden Beispiele geben Anhaltspunkte zum Exportieren von Dateisystemen, obwohl diese Einstellungen natürlich von der Arbeitsumgebung und der Netzwerkkonfiguration abhängen. Dieses Beispiel exportiert /cdrom für drei Clients, alpha, bravo und charlie: /cdrom -ro alpha bravo charlie Die Option kennzeichnet das exportierte Dateisystem als schreibgeschützt. Dadurch sind Clients nicht in der Lage, das exportierte Dateisystem zu verändern. Das nächste Beispiel exportiert /home auf drei durch IP-Adressen bestimmte Clients. Diese Einstellung kann für Netzwerke ohne DNS-Server nützlich sein. Optional können interne Rechnernamen auch in /etc/hosts konfiguriert werden. Benötigen Sie hierzu weitere Informationen, lesen Sie bitte &man.hosts.5;. Die 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. /home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 Die nächste Zeile exportiert /a, damit Clients von verschiedenen Domänen auf das Dateisystem zugreifen können. Die Option erlaubt es dem Benutzer root des Clients, als root auf das exportierte Dateisystem zu schreiben. Wenn diese Option nicht gesetzt ist, wird der root-Benutzer des Clients dem nobody-Konto des Servers zugeordnet und unterliegt somit den Zugriffsbeschränkungen dieses Kontos. /a -maproot=root host.example.com box.example.org Damit ein Client auf ein exportiertes Dateisystem zugreifen kann, muss er in /etc/exports eingetragen sein. Jede Zeile in /etc/exports entspricht der Exportinformation für ein Dateisystem auf einem oder mehreren Clients. Ein entfernter Rechner kann für jedes Dateisystem nur einmal definiert werden. Nehmen wir an, dass /usr ein gesondertes Dateisystem ist. Dann wären folgende Zeilen in /etc/exports ungültig: #Nicht erlaubt, wenn /usr ein einziges Dateisystem ist /usr/src client /usr/ports client Das Dateisystem /usr wird hier zweimal auf den selben Rechner (client) exportiert. Dies ist aber nicht zulässig. Der korrekte Eintrag sieht daher so aus: /usr/src /usr/ports client Die Eigenschaften 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. Eine gültige Exportliste, in der /usr und /exports lokale Dateisysteme sind, sieht so aus: # 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 Wenn der NFS-Server startet, wird auch mountd automatisch gestartet. Allerdings liest mountd /etc/exports nur, wenn der Server gestartet wird. Um nachfolgende Änderungen an /etc/exports wirksam werden zu lassen, kann mountd angewiesen werden, die Datei neu einzulesen: &prompt.root; service mountd reload Lesen Sie bitte des Handbuchs für Informationen zum Einsatz der rc-Skripte. Die NFS-Dienste können nun auf dem Server als root gestartet werden: &prompt.root; service nfsd start Auf dem NFS-Client: &prompt.root; service nfsclient restart Der Client ist nun in der Lage, ein entferntes Dateisystem einzuhängen. In diesen Beispielen ist der Name des Servers server und der Name des Clients client. Für Testzwecke oder zum temporären einhängen eines entfernten Dateisystems, führen Sie auf dem Rechner client den Befehl mountals root aus: NFS Dateisysteme einhängen &prompt.root; mount server:/home /mnt Die Dateien und Verzeichnisse in /home stehen dem Rechner client nun im Verzeichnis /mnt zur Verfügung. Um ein entferntes Dateisystem bei jedem Systemstart automatisch einzuhängen, fügen Sie das Dateisystem in /etc/fstab ein: server:/home /mnt nfs rw 0 0 &man.fstab.5; enthält eine Beschreibung aller Optionen. Dateien sperren (<foreignphrase>Locking</foreignphrase>) Einige Anwendungen erfordern die Sperrung von Dateien, damit sie korrekt arbeiten. Um diese Sperre zu aktivieren, müssen diese Zeilen in /etc/rc.conf sowohl auf dem Client als auch auf dem Server hinzugefügt werden: rpc_lockd_enable="YES" rpc_statd_enable="YES" Danach starten Sie die beiden Anwendungen: &prompt.root; service lockd start &prompt.root; service statd start Wenn keine Dateisperren zwischen den NFS-Clients und dem NFS-Server benötigt werden, können Sie den NFS-Client durch die Übergabe der Option an &man.mount.nfs.8; zu einer lokalen Sperrung von Dateien zwingen. Weitere Details finden Sie in &man.mount.nfs.8;. Praktische Anwendungen NFS ist in vielen Situationen nützlich. Einige Anwendungsbereiche finden Sie in der folgenden Liste: NFS Anwendungsbeispiele Mehrere Maschinen können sich ein CD-ROM-Laufwerk oder andere Medien teilen. Dies ist praktisch, um Programme von einem einzelnen Standort aus auf mehreren Rechnern zu installieren. In größeren Netzwerken ist es praktisch, einen zentralen NFS-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. Verschiedene Clients können auf ein gemeinsames Verzeichnis /usr/ports/distfiles zugreifen. Die gemeinsame Nutzung dieses Verzeichnisses ermöglicht einen schnellen Zugriff auf die Quelldateien, ohne sie auf jede Maschine zu kopieren zu müssen. <application>amd</application> amd Automatic Mounter Daemon &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 amd automatisch abgehängt. amd ist eine Alternative zum dauerhaften Einhängen von Dateisystemen in /etc/fstab. In der Voreinstellung stellt amd die Verzeichnisse /host und /net als NFS-Server bereit. Wenn auf eine Datei in diesen Verzeichnissen zugegriffen wird, sucht amd den entsprechenden Mountpunkt und hängt das Dateisystem automatisch ein. /net wird zum Einhängen von exportierten Dateisystemen von einer IP-Adresse verwendet, während /host zum Einhängen von exportierten Dateisystemen eines durch seinen Namen festgelegten Rechners dient. Ein Zugriff auf eine Datei in /host/foobar/usr würde amd veranlassen, das von foobar exportierte Dateisystem /usr einzuhängen. Ein exportiertes Dateisystem mit <application>amd</application> in den Verzeichnisbaum einhängen showmount -e zeigt die exportierten Dateisysteme des NFS-Servers foobar an: &prompt.user; showmount -e foobar Exports list on foobar: /usr 10.10.10.0 /a 10.10.10.0 &prompt.user; cd /host/foobar/usr Die Ausgabe von showmount zeigt /usr als exportiertes Dateisystem an. Wenn man in das Verzeichnis /host/foobar/usr wechselt, fängt amd die Anfrage ab und versucht den Rechnernamen foobar aufzulösen. Wenn dies gelingt, wird amd automatisch den gewünschten Export in den Verzeichnisbaum einhängen. amd kann durch folgende Zeile in /etc/rc.conf automatisch gestartet werden: amd_enable="YES" Um amd direkt zu starten: &prompt.root; service amd start Individuelle Optionen können über die Umgebungsvariable amd_flags an amd übergeben werden. In der Voreinstellung ist amd_flags eingestellt auf: amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" /etc/amd.map legt die Standardoptionen fest, mit denen exportierte Dateisysteme in den Verzeichnisbaum eingehängt werden. /etc/amd.conf hingegen legt einige der erweiterten Optionen von amd fest. Weitere Informationen finden Sie in &man.amd.8; und &man.amd.conf.5;. Network Information System (<acronym>NIS</acronym>) NIS Solaris HP-UX AIX Linux NetBSD OpenBSD yellow pages NIS Das Network Information System (NIS) wurde entwickelt, um &unix;-Systeme zentral verwalten zu können. Dazu zählen beispielsweise &solaris;, HP-UX, &aix;, Linux, NetBSD, OpenBSD und &os;. NIS war ursprünglich als Yellow Pages bekannt, aus markenrechtlichen Gründen wurde der Name aber geändert. Dies ist der Grund, warum NIS-Kommandos mit yp beginnen. NIS Domänen Bei NIS handelt es sich um ein RPC-basiertes Client/Server-System. Eine Gruppe von Rechnern greift dabei innerhalb einer NIS-Domäne auf gemeinsame Konfigurationsdateien zu. Dies erlaubt es einem Systemadministrator, NIS-Clients mit minimalem Aufwand einzurichten, sowie Änderungen an der Systemkonfiguration von einem zentralen Ort aus durchzuführen. &os; verwendet die Version 2 des NIS-Protokolls. <acronym>NIS</acronym>-Begriffe und -Prozesse Tabelle 30.1 fasst die Begriffe und Anwenderprozesse zusammen, die von NIS verwendet werden: rpcbind <acronym>NIS</acronym> Begriffe Begriff Beschreibung NIS-Domänenname NIS-Masterserver und Clients benutzen einen gemeinsamen NIS-Domänennamen. In der Regel hat dieser Name nichts mit DNS zu tun. &man.rpcbind.8; Dieser Dienst aktiviert RPC und muss gestartet sein, damit ein NIS-Server oder -Client ausgeführt werden kann. &man.ypbind.8; Dieser Dienst bindet einen NIS-Client an seinen NIS-Server. Der Client bezieht den NIS-Domänennamen vom System und stellt über das RPC-Protokoll eine Verbindung zum NIS-Server her. ypbind ist der zentrale Bestandteil der Client-Server-Kommunikation in einer NIS-Umgebung. Wird der Dienst auf einem Client beendet, ist dieser nicht mehr in der Lage, auf den NIS-Server zuzugreifen. &man.ypserv.8; Dies ist der Prozess für den NIS-Server. Wenn dieser Dienst nicht mehr läuft, kann der Server nicht mehr auf NIS-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 ypbind-Prozess auf dem Client neu zu starten. &man.rpc.yppasswdd.8; Dieser Prozess läuft nur auf dem NIS-Masterserver. Es handelt sich um einen Daemonprozess, der es NIS-Clients ermöglicht, ihre NIS-Passwörter zu ändern. Wenn dieser Daemon nicht läuft, müssen sich die Benutzer am NIS-Masterserver anmelden und ihre Passwörter dort ändern.
Arten von NIS-Rechnern NIS Masterserver NIS Slaveserver NIS Client NIS-Masterserver Dieser Server dient als zentraler Speicherort für Rechnerkonfigurationen. Zudem verwaltet er die maßgebliche Kopie, der von den NIS-Clients gemeinsam verwendeten Dateien. passwd, group, sowie verschiedene andere von den Clients verwendete Dateien existieren auf dem Masterserver. Obwohl ein Rechner auch für mehrere NIS-Domänen als Masterserver fungieren kann, wird diese Art von Konfiguration nicht behandelt, da sich dieser Abschnitt auf eine relativ kleine NIS-Umgebung konzentriert. NIS-Slaveserver NIS-Slaveserver verwalten Kopien der Daten des NIS-Masterservers um Redundanz zu bieten. Zudem entlasten Slaveserver den Masterserver: NIS-Clients verbinden sich immer mit dem NIS-Server, welcher zuerst reagiert. Dieser Server kann auch ein Slaveserver sein. NIS-Clients NIS-Clients identifizieren sich gegenüber dem NIS-Server während der Anmeldung. Mit NIS können Informationen aus verschiedenen Dateien von mehreren Rechnern gemeinsam verwendet werden. master.passwd, group, und hosts werden oft gemeinsam über NIS 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 NIS-Server gestellt, an den der Client gebunden ist. Planung Dieser Abschnitt beschreibt eine einfache NIS-Umgebung, welche aus 15 &os;-Maschinen besteht, für die keine zentrale Verwaltung existiert. Jeder Rechner hat also eine eigene Version von /etc/passwd und /etc/master.passwd. Diese Dateien werden manuell synchron gehalten; wird ein neuer Benutzer angelegt, so muss dies auf allen fünfzehn Rechnern manuell erledigt werden. In Zukunft soll die Konfiguration wie folgt aussehen: Rechnername IP-Adresse Rechneraufgabe ellington 10.0.0.2 NIS-Master coltrane 10.0.0.3 NIS-Slave basie 10.0.0.4 Workstation der Fakultät bird 10.0.0.5 Clientrechner cli[1-11] 10.0.0.[6-17] Verschiedene andere Clients 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. Einen <acronym>NIS</acronym>-Domänennamen wählen NIS Domänenname Wenn ein Client Informationen anfordert, ist in dieser Anforderung der Name der NIS-Domäne enthalten. Dadurch weiß jeder Server im Netzwerk, auf welche Anforderung er antworten muss. Stellen Sie sich den NIS-Domänennamen als einen Namen einer Gruppe von Rechnern vor. Manchmal wird der Name der Internetdomäne auch für die NIS-Domäne verwendet. Dies ist allerdings nicht empfehlenswert, da es bei der Behebung von Problemen verwirrend sein kann. Der Name der NIS-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 NIS-Domäne acme-art. Für dieses Beispiel wird der Name test-domain verwendet. Es gibt jedoch auch Betriebssysteme, die als NIS-Domänennamen den Namen der Internetdomäne verwenden. Wenn dies für einen oder mehrere Rechner des Netzwerks zutrifft, muss der Name der Internetdomäne als NIS-Domänennamen verwendet werden. Anforderungen an den Server Bei der Wahl des NIS-Servers müssen einige Dinge beachtet werden. Da die NIS-Clients auf die Verfügbarkeit des Servers angewiesen sind, sollten Sie einen Rechner wählen, der nicht regelmäßig neu gestartet werden muss. Der NIS-Server sollte idealerweise ein alleinstehender Rechner sein, dessen einzige Aufgabe es ist, als NIS-Server zu dienen. Wenn das Netzwerk nicht zu stark ausgelastet ist, ist es auch möglich, den NIS-Server als weiteren Dienst auf einem anderen Rechner laufen zu lassen. Wenn jedoch ein NIS-Server ausfällt, wirkt sich dies negativ auf alle NIS-Clients aus. Einen <acronym>NIS</acronym>-Masterserver konfigurieren Die verbindlichen Kopien aller NIS-Dateien befinden sich auf dem Masterserver. Die Datenbanken, in denen die Informationen gespeichert sind, bezeichnet man als NIS-Maps. Unter &os; werden diese Maps unter /var/yp/[domainname] gespeichert, wobei [domainname] der Name der NIS-Domäne ist. Da ein NIS-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 NIS-Maps. NIS-Master- und Slaveserver verwenden &man.ypserv.8;, um NIS-Anfragen zu bearbeiten. Dieser Daemon ist für eingehende Anfragen der NIS-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. NIS Serverkonfiguration Abhängig von den Anforderungen ist die Einrichtung eines NIS-Masterservers relativ einfach, da NIS von &os; bereits in der Standardkonfiguration unterstützt wird. Es kann durch folgende Zeilen in /etc/rc.conf aktiviert werden: nisdomainname="test-domain" Diese Zeile setzt den NIS-Domänennamen auf test-domain. nis_server_enable="YES" Dadurch werden die NIS-Serverprozesse beim Systemstart automatisch ausgeführt. nis_yppasswdd_enable="YES" Durch diese Zeile wird der &man.rpc.yppasswdd.8;-Daemon aktiviert, der die Änderung von NIS-Passwörtern von einem Client aus ermöglicht. Wird ypserv in einer Multi-Serverdomäne verwendet, in der NIS-Server gleichzeitig als NIS-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. Server, die auch als Client arbeiten, können durch das Hinzufügen der folgenden Zeilen in /etc/rc.conf zu gezwungen werden, sich an einen bestimmten Server zu binden: nis_client_enable="YES" # run client stuff as well nis_client_flags="-S NIS domain,server" Nachdem die Parameter konfiguriert wurden, muss noch /etc/netstart ausgeführt werden, um alles entsprechend den Vorgaben in /etc/rc.conf einzurichten. Bevor die NIS-Maps einrichtet werden können, muss der &man.ypserv.8;-Daemon manuell gestartet werden: &prompt.root; service ypserv start Die <acronym>NIS</acronym>-Maps initialisieren NIS maps NIS-Maps Sie werden am NIS-Masterserver aus den Konfigurationsdateien unter /etc erzeugt. Einzige Ausnahme: /etc/master.passwd. Dies verhindert, dass die Passwörter für root- oder andere Administratorkonten an alle Server in der NIS-Domäne verteilt werden. Deshalb werden die primären Passwort-Dateien konfiguriert, bevor die NIS-Maps initialisiert werden: &prompt.root; cp /etc/master.passwd /var/yp/master.passwd &prompt.root; cd /var/yp &prompt.root; vi master.passwd Es ist ratsam, alle Einträge für Systemkonten sowie Benutzerkonten, die nicht an die NIS-Clients weitergegeben werden sollen, wie beispielsweise root und weitere administrative Konten, zu entfernen. Stellen Sie sicher, dass /var/yp/master.passwd weder von der Gruppe noch von der Welt gelesen werden kann, indem Sie Zugriffsmodus auf 600 einstellen. Nun können die NIS-Maps initialisiert werden. &os; verwendet dafür das Skript &man.ypinit.8;. Geben Sie und den NIS-Domänennamen an, wenn Sie NIS-Maps für den Masterserver erzeugen: ellington&prompt.root; ypinit -m test-domain 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] n 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 <control D>. master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: ellington coltrane Is this correct? [y/n: y] y [..output from map generation..] NIS Map update completed. ellington has been setup as an YP master server without any errors. Dadurch erzeugt ypinit /var/yp/Makefile aus /var/yp/Makefile.dist. Diese Datei geht in der Voreinstellung davon aus, dass in einer NIS-Umgebung mit nur einem Server gearbeitet wird und dass alle Clients unter &os; laufen. Da test-domain aber auch über einen Slaveserver verfügt, muss /var/yp/Makefile entsprechend angepasst werden, sodass es mit einem Kommentar (#) beginnt: NOPUSH = "True" Neue Benutzer hinzufügen Jedes Mal, wenn ein neuer Benutzer angelegt wird, muss er am NIS-Masterserver hinzugefügt und die NIS-Maps anschließend neu erzeugt werden. Wird dieser Punkt vergessen, kann sich der neue Benutzer nur am NIS-Masterserver anmelden. Um beispielsweise den neuen Benutzer jsmith zur Domäne test-domain hinzufügen wollen, müssen folgende Kommandos auf dem Masterserver ausgeführt werden: &prompt.root; pw useradd jsmith &prompt.root; cd /var/yp &prompt.root; make test-domain Statt pw useradd jsmith kann auch adduser jsmith verwendet werden. Einen <acronym>NIS</acronym>-Slaveserver einrichten NIS Slaveserver Um einen NIS-Slaveserver einzurichten, melden Sie sich am Slaveserver an und bearbeiten Sie /etc/rc.conf analog zum Masterserver. Erzeugen Sie aber keine NIS-Maps, da diese bereits auf dem Server vorhanden sind. Wenn ypinit auf dem Slaveserver ausgeführt wird, benutzen Sie (Slave) statt (Master). Diese Option benötigt den Namen des NIS-Masterservers und den Domänennamen, wie in diesem Beispiel zu sehen: coltrane&prompt.root; ypinit -s ellington test-domain 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] n 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. Hierbei wird auf dem Slaveserver ein Verzeichnis namens /var/yp/test-domain erstellt, welches Kopien der NIS-Masterserver-Maps enthält. Durch hinzufügen der folgenden Zeilen in /etc/crontab wird der Slaveserver angewiesen, seine Maps mit den Maps des Masterservers zu synchronisieren: 20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid Diese Einträge sind nicht zwingend notwendig, da der Masterserver automatisch versucht, alle Änderungen seiner NIS-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. Um die Konfiguration abzuschließen, führen Sie /etc/netstart auf dem Slaveserver aus, um die NIS-Dienste erneut zu starten. Einen <acronym>NIS</acronym>-Client einrichten Ein NIS-Client bindet sich unter Verwendung von ypbind an einen NIS-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 ypbind, 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. ypbind pingt den Server gelegentlich an, um sicherzustellen, dass der Server funktioniert. Antwortet der Server innerhalb eines bestimmten Zeitraums nicht (Timeout), markiert ypbind die Domäne als ungebunden und beginnt erneut, RPCs über das Netzwerk zu verteilen, um einen anderen Server zu finden. NIS Client konfigurieren Einen &os;-Rechner als NIS-Client einrichten: Fügen Sie folgende Zeilen in /etc/rc.conf ein, um den NIS-Domänennamen festzulegen, und um &man.ypbind.8; bei der Initialisierung des Netzwerks zu starten: nisdomainname="test-domain" nis_client_enable="YES" Um alle Passworteinträge des NIS-Servers zu importieren, löschen Sie alle Benutzerkonten in /etc/master.passwd mit vipw. Denken Sie daran, zumindest ein lokales Benutzerkonto zu behalten. Dieses Konto sollte außerdem Mitglied der Gruppe wheel sein. Wenn es mit NIS 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: +::::::::: Diese Zeile legt für alle gültigen Benutzerkonten der NIS-Server-Maps einen Zugang an. Es gibt verschiedene Wege, den NIS-Client durch Änderung dieser Zeile zu konfigurieren. Eine Methode wird in beschrieben. Weitere detaillierte Informationen finden Sie im Buch Managing NFS and NIS vom O'Reilly Verlag. Um alle möglichen Gruppeneinträge vom NIS-Server zu importieren, fügen Sie folgende Zeile in /etc/group ein: +:*:: Um den NIS-Client direkt zu starten, führen Sie als Superuser die folgenden Befehle aus: &prompt.root; /etc/netstart &prompt.root; service ypbind start Danach sollte bei der Eingabe von ypcat passwd auf dem Client die passwd-Map des NIS-Servers angezeigt werden. Sicherheit unter <acronym>NIS</acronym> Da RPC ein Broadcast-basierter Dienst ist, kann jedes System innerhalb der Domäne mittels ypbind den Inhalt der NIS-Maps abrufen. Um nicht autorisierte Transaktionen zu verhindern, unterstützt &man.ypserv.8; eine Funktion namens securenets, durch die der Zugriff auf bestimmte Rechner beschränkt werden kann. In der Voreinstellung sind diese Informationen in /var/yp/securenets gespeichert, es sei denn, &man.ypserv.8; wurde mit der Option und einem alternativen Pfad gestartet. Diese Datei enthält Einträge, die aus einer Netzwerkadresse und einer Netzmaske bestehen. Kommentarzeilen beginnen mit #. /var/yp/securnets könnte beispielsweise so aussehen: # 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 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 securenets nicht existiert, erlaubt ypserv Verbindungen von jedem Rechner. beschreibt eine alternative Methode zur Zugriffskontrolle. Obwohl beide Methoden einige Sicherheit gewähren, sind sie anfällig für IP-Spoofing-Angriffe. Der NIS-Verkehr sollte daher von einer Firewall blockiert werden. Server, die securenets verwenden, können Schwierigkeiten bei der Anmeldung von NIS-Clients haben, die ein veraltetes TCP/IP-Subsystem besitzen. Einige dieser TCP/IP-Subsysteme setzen alle Rechnerbits auf Null, wenn sie einen Broadcast 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 securenets umgehen. TCP-Wrapper Die Verwendung der TCP-Wrapper verlangsamt die Reaktion des NIS-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 NIS-Server verfügen. Wenn ein oder mehrere Clients dieses Problem aufweisen, sollten Sie die betreffenden Clients in NIS-Slaveserver umwandeln, und diese an sich selbst binden. Bestimmte Benutzer an der Anmeldung hindern In diesem Beispiel gibt es innerhalb der NIS-Domäne den Rechner basie, der nur für Mitarbeiter der Fakultät bestimmt ist. Die passwd Datenbank des NIS-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. Es gibt eine Möglichkeit, bestimmte Benutzer an der Anmeldung an einem bestimmten Rechner zu hindern, selbst wenn diese in der NIS-Datenbank vorhanden sind. Dazu kann mit vipw der Eintrag -Benutzername und die richtige Anzahl von Doppelpunkten an das Ende von /etc/master.passwd gesetzt werden, wobei Benutzername der zu blockierende Benutzername ist. Die Zeile mit dem geblockten Benutzer muss dabei vor der + Zeile, für zugelassene Benutzer stehen. In diesem Beispiel wird die Anmeldung für den Benutzer bill am Rechner basie blockiert: basie&prompt.root; cat /etc/master.passwd root:[password]:0:0::0:0:The super-user:/root:/bin/csh toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin operator:*:2:5::0:0:System &:/:/sbin/nologin bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin news:*:8:8::0:0:News Subsystem:/:/sbin/nologin man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin -bill::::::::: +::::::::: basie&prompt.root; Netzgruppen verwenden Netzgruppen Bestimmten Benutzern die Anmeldung an einzelnen Systemen zu verweigern, kann in großen Netzwerken schnell unübersichtlich werden. Dadurch verlieren Sie den Hauptvorteil von NIS: die zentrale Verwaltung. 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. Um das Beispiel in diesem Kapitel fortzuführen, wird die NIS-Domäne um zusätzliche Benutzer und Rechner erweitert: Zusätzliche Benutzer Benutzername(n) Beschreibung alpha, beta Mitarbeiter der IT-Abteilung charlie, delta Lehrlinge der IT-Abteilung echo, foxtrott, golf, ... Mitarbeiter able, baker, ... Praktikanten
Zusätzliche Rechner Rechnername(n) Beschreibung war, death, famine, pollution Nur Mitarbeiter der IT-Abteilung dürfen sich an diesen Rechnern anmelden. pride, greed, envy, wrath, lust, sloth Nur Mitarbeiter und Lehrlinge der IT-Abteilung dürfen sich auf diesen Rechnern anmelden. one, two, three, four, ... Gewöhnliche Arbeitsrechner für Mitarbeiter. trashcan Ein sehr alter Rechner ohne kritische Daten. Sogar Praktikanten dürfen diesen Rechner verwenden.
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 NIS sorgfältig geplant wurde, muss nur noch eine zentrale Konfigurationsdatei bearbeitet werden, um den Zugriff auf bestimmte Rechner zu erlauben oder zu verbieten. Dieses Beispiel erstellt vier Netzgruppen: IT-Mitarbeiter, IT-Lehrlinge, normale Mitarbeiter sowie Praktikanten: 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) 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: 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. Der Name des Benutzerkontos, der zu dieser Netzgruppe gehört. Die NIS-Domäne für das Benutzerkonto. Benutzerkonten können von anderen NIS-Domänen in eine Netzgruppe importiert werden. 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;. Netzgruppen 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. Einige NIS-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: BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 Wiederholen Sie diesen Vorgang, wenn mehr als 225 (15*15) Benutzer in einer einzigen Netzgruppe existieren. Die neue NIS-Map aktivieren und verteilen: ellington&prompt.root; cd /var/yp ellington&prompt.root; make Dadurch werden die NIS-Maps netgroup, netgroup.byhost und netgroup.byuser erzeugt. Prüfen Sie die Verfügbarkeit der neuen NIS-Maps mit &man.ypcat.1;: ellington&prompt.user; ypcat -k netgroup ellington&prompt.user; ypcat -k netgroup.byhost ellington&prompt.user; ypcat -k netgroup.byuser Die Ausgabe des ersten Befehls gibt den Inhalt von /var/yp/netgroup wieder. Der zweite Befehl erzeugt nur dann eine Ausgabe, wenn rechnerspezifische Netzgruppen erzeugt wurden. Der dritte Befehl gibt die Netzgruppen nach Benutzern sortiert aus. Wenn Sie einen Client einrichten, verwenden Sie &man.vipw.8; um den Namen der Netzgruppe anzugeben. Ersetzen Sie beispielsweise auf dem Server namens war die folgende Zeile: +::::::::: durch +@IT_EMP::::::::: ersetzt werden. Diese Zeile legt fest, dass nur noch Benutzer der Netzgruppe IT_EMP in die Passwortdatenbank dieses Systems importiert werden. Nur diese Benutzer dürfen sich an diesem Server anmelden. Diese Konfiguration gilt auch für die ~-Funktion der Shell und für alle Routinen, die auf Benutzernamen und numerische Benutzer-IDs zugreifen. Oder anders formuliert, cd ~Benutzer ist nicht möglich, ls -l zeigt die numerische Benutzer-ID statt dem Benutzernamen und find . -user joe -print erzeugt die Fehlermeldung No such user. 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: +:::::::::/sbin/nologin Diese Zeile weist den Client an, alle Einträge zu importieren, aber die Shell in diesen Einträgen durch /sbin/nologin zu ersetzen. Stellen Sie sicher, dass die zusätzliche Zeile nach der Zeile +@IT_EMP::::::::: eingetragen ist. Andernfalls haben alle via NIS importierten Benutzerkonten /sbin/nologin als Loginshell und niemand wird sich mehr am System anmelden können. Um die weniger wichtigen Server zu konfigurieren, ersetzen Sie den alten Eintrag +::::::::: auf den Servern mit diesen Zeilen: +@IT_EMP::::::::: +@IT_APP::::::::: +:::::::::/sbin/nologin Die entsprechenden Zeilen für Arbeitsplätze lauten: +@IT_EMP::::::::: +@USERS::::::::: +:::::::::/sbin/nologin NIS 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 BIGSRV erzeugen, um den Zugang zu den wichtigsten Servern zu beschränken, eine weitere Gruppe SMALLSRV für die weniger wichtigen Server und eine dritte Netzgruppe USERBOX 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 NIS-Map sollten ähnlich den folgenden aussehen: BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS 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. Rechnerspezifische Netzgruppen sind eine weitere Möglichkeit, um mit den oben beschriebenen Änderungen umzugehen. In diesem Szenario enthält /etc/master.passwd auf jedem Rechner zwei mit + 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 /sbin/nologin als Shell zu. Verwenden Sie auch hier (analog zu den Netzgruppen) Großbuchstaben für die Rechnernamen: +@BOXNAME::::::::: +:::::::::/sbin/nologin Sobald dies für alle Rechner erledigt ist, müssen die lokalen Versionen von /etc/master.passwd nie mehr verändert werden. Alle weiteren Änderungen geschehen über die NIS-Maps. Nachfolgend ein Beispiel für eine mögliche Netzgruppen-Map: # 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] 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 NIS-Maps in Grenzen zu halten.
Passwortformate NIS Passwortformate Alle Rechner innerhalb der NIS-Domäne müssen für die Verschlüsselung von Passwörtern das gleiche Format benutzen. Wenn Benutzer Schwierigkeiten bei der Authentifizierung auf einem NIS-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 DES der kleinste gemeinsame Standard ist. Welches Format die Server und Clients verwenden, steht in /etc/login.conf: default:\ :passwd_format=des:\ :copyright=/etc/COPYRIGHT:\ [weitere Einträge] In diesem Beispiel verwendet das System das Format DES. Weitere mögliche Werte sind unter anderem blf und md5 (mit Blowfish und MD5 verschlüsselte Passwörter). Wird auf einem Rechner das Format entsprechend der NIS-Domäne geändert, muss anschließend die Login-Capability Datenbank neu erstellt werden: &prompt.root; cap_mkdb /etc/login.conf Das Format der schon bestehenden Passwörter wird erst aktualisiert, wenn ein Benutzer sein Passwort ändert, nachdem die Datenbank neu erstellt wurde.
Lightweight Access Directory Protocol (<acronym>LDAP</acronym>) LDAP Das Lightweight Directory Access Protocol (LDAP) ist ein Protokoll der Anwendungsschicht und wird verwendet, 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 häufig in Netzwerken genutzt, in denen Benutzer unter Verwendung eines einzigen Kontos auf diverse interne Informationen zugreifen müssen. Beispielsweise kann E-Mail-Authentifizierung, Abfrage von Kontaktinformationen und Website-Authentifizierung über ein einzelnes Benutzerkonto aus der Datenbank des LDAP-Servers erfolgen. Dieser Abschnitt behandelt nicht die Geschichte oder Details der Implementierung des Protokolls. Diese Abschnitte wurden verfasst, um einen LDAP-Server und/oder -Client sowohl schnell, als auch sicher zu konfigurieren. Jedoch erfordert jede Informationsbasis sorgfältige Planung, und dies ist keine Ausnahme. Bei der Planung sollte bestimmt werden, welche Art von Informationen gespeichert werden, für was diese Informationen verwendet werden, wer Zugriff auf die Daten bekommen soll, und wie diese Daten vor neugierigen Blicken geschützt werden können. <acronym>LDAP</acronym> Terminologie und Struktur Da bei der Konfiguration leicht Verwechselungen entstehen, werden zuvor einige Aspekte von LDAP erklärt. Zunächst bestehen alle Verzeichniseinträge aus einer Gruppe von Attributen. Jede Attributgruppe enthält einen Namen, also einen eindeutigen Bezeichner, der als DN oder distinguished name bekannt ist. Dieser setzt sich normalerweise aus mehreren anderen Attributen, wie dem RDN zusammen. RDN, oder relative distinguished name, ist ein geläufiger Begriff für ein Attribut. Wie bei Verzeichnissen gibt es auch hier absolute und relative Pfade. Betrachten Sie DN als absoluten Pfad und RDN als relativen Pfad. Beispielsweise könnte ein Eintrag wie folgt aussehen: &prompt.user; ldapsearch -xb "uid=trhodes,ou=users,o=example.com" # extended LDIF # # LDAPv3 # base <uid=trhodes,ou=users,o=example.com> 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: (xxx) xxx-xxxx # search result search: 2 result: 0 Success # numResponses: 2 # numEntries:1 Obwohl die Bedeutung der einzelnen Attribute in diesem Beispiel offensichtlich ist, sollte das Attribut cn genauer betrachtet werden. Dies ist der zuvor beschriebene RDN. Darüber hinaus gibt es eine eindeutige Benutzer-ID. Es ist gängige Praxis, in den Einträgen einheitliche uid oder uuids zu haben, um zukünftige Migrationen zu erleichtern. Konfiguration eines <acronym>LDAP</acronym>-Servers LDAP Server Um &os; so zu konfigurieren, dass es als LDAP-Server fungiert, muss der Port OpenLDAP installiert werden. Dies kann unter Verwendung von pkg_add, oder durch Installation von net/openldap24-server erreicht werden. Der Bau des Ports wird empfohlen, da der Administrator zu diesem Zeitpunkt eine Menge Optionen aktivieren und deaktivieren kann. In den meisten Fällen werden die Standardwerte ausreichend sein. Sollte jedoch Unterstützung für SQL nötig sein, ist dies der richtige Zeitpunkt zur Aktivierung. Von nun an werden ein paar Verzeichnisse benötigt. Ein Verzeichnis für Daten, sowie ein Verzeichnis zum Speichern der Zertifikate. Erstellen Sie beide Verzeichnisse mit den folgenden Befehlen: &prompt.root; mkdir /var/db/openldap-data &prompt.root; mkdir /usr/local/etc/openldap/private Kopieren Sie die Konfigurationsdatei der Datenbank: &prompt.root; cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG Im nächsten Schritt werden die SSL-Zertifikate konfiguriert. Das Erstellen von Zertifikaten wird zwar in OpenSSL beschrieben, aber hier ist eine Zertifizierungsstelle erforderlich, weshalb eine andere Methode verwendet wird. Es wird empfohlen, diesen Teil genau zu überprüfen, um sicherzustellen, dass bei der Erstellung des Zertifikats die richtigen Informationen eingetragen werden. Die folgenden Befehle müssen im Verzeichnis /usr/local/etc/openldap/private ausgeführt werden. Dies ist wichtig, da die Dateiberechtigungen restriktiv gesetzt werden und Benutzer keinen direkten Zugriff auf diese Daten haben sollten. Geben Sie folgende Befehle ein, um die Zertifikate zu erstellen: &prompt.root; openssl req -days 365 -nodes -new -x509 -keyout ca.key -out ../ca.crt Diese Einträge sind frei wählbar, mit Ausnahme von Common Name. Hier muss etwas anderes als der Hostname des Systems eingetragen werden, ansonsten würde das System versuchen, den eigenen Hostnamen zu überprüfen. Wenn wie in diesem Beispiel ein selbstsigniertes Zertifikat verwendet wird, stellen Sie dem Hostnamen einfach das Präfix CA für die Zertifizierungsstelle voran. Die nächste Aufgabe besteht darin, einen Zertifikatsregistrierungsanforderung (CSR) sowie einen privaten Schlüssel zu erstellen. Dazu geben Sie die folgenden Befehle ein: &prompt.root; openssl req -days 365 -nodes -new -keyout server.key -out server.csr Stellen Sie hierbei sicher, dass der common name richtig eingetragen wird. Anschließend muss der Schlüssel signiert werden: &prompt.root; openssl x509 -req -days 365 -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserial Der letzte Schritt für die Erstellung der Zertifikate besteht darin, die Client-Zertifikate zu erstellen und zu signieren: &prompt.root; openssl req -days 365 -nodes -new -keyout client.key -out client.csr &prompt.root; openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CAkey ca.key Achten Sie wieder auf das Attribut common name. Dies sorgt häufig für Verwirrung bei der erstmaligen Konfiguration von LDAP. Stellen Sie außerdem sicher, dass bei diesem Verfahren acht (8) neue Dateien erzeugt worden sind. Der nächste Schritt besteht darin, /usr/local/etc/openldap/slapd.conf zu editieren und folgende Optionen hinzuzufügen: 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 Editieren Sie zusätzlich /usr/local/etc/openldap/ldap.conf und fügen die folgenden Zeilen hinzu: TLS_CACERT /usr/local/etc/openldap/ca.crt TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3 Setzen Sie für die gewünschten Werte ein und kommentieren Sie die Optionen , und aus. Setzen Sie bei und ein. Die daraus resultierende Datei sollte der hier gezeigten ähnlich sehen: BASE dc=example,dc=com URI ldap:// ldaps:// SIZELIMIT 12 TIMELIMIT 15 #DEREF never TLS_CACERT /usr/local/etc/openldap/ca.crt$ TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3 Anschließend sollte das Standardpasswort für den Server geändert werden. Das folgende Kommando schreibt die Ausgabe in slapd.conf: &prompt.root; slappasswd -h "{SHA}" >> /usr/local/etc/openldap/slapd.conf Dieser Befehl wird nach einem Passwort fragen und, wenn der Prozess nicht fehlschlägt, ein Passwort-Hash an das Ende von slapd.conf hinzufügen. slappasswd versteht verschiedene Hash-Formate. Weitere Informationen hierzu finden Sie in der Manualpage. Bearbeiten Sie /usr/local/etc/openldap/slapd.conf und fügen folgende Zeilen hinzu: password-hash {sha} allow bind_v2 Das Suffix in dieser Datei muss aus der vorherigen Konfiguration entsprechen. Zudem sollte die Option ebenfalls gesetzt werden. Ein guter Vorschlag ist beispielsweise . Bevor die Datei gespeichert wird, setzen Sie die Passwortausgabe von slappasswd hinter die Option . Das Endergebnis sollte in etwa wie folgt aussehen: 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= Aktivieren Sie abschließend OpenLDAP in /etc/rc.conf. Zu diesem Zeitpunkt kann es sinnvoll sein, eine URI sowie die Gruppe und den Benutzer einzurichten. Editieren Sie dazu /etc/rc.conf und fügen folgende Zeilen hinzu: slapd_enable="YES" slapd_flags="-4 -h ldaps:///" An dieser Stelle sollte der Server bereit sein, gestartet und getestet zu werden. Führen Sie dazu folgenden Befehl aus: &prompt.root; service slapd start Wurde alles richtig konfiguriert, sollte eine Suche im Verzeichnis, wie in diesem Beispiel, eine erfolgreiche Verbindung mit einer Antwort liefern: # extended LDIF # # LDAPv3 # base <dc=example,dc=com> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # search result search: 3 result: 32 No such object # numResponses: 1 Wenn der Dienst wie im Beispiel oben antwortet, kann das Verzeichnis mit dem Befehl ldapadd bestückt werden. In diesem Beispiel gibt es eine Datei mit einer Liste von Benutzern, die diesem Verzeichnis hinzugefügt werden. Erstellen Sie zunächst eine Datei mit folgendem Datensatz für den Import: dn: dc=example,dc=com objectclass: dcObject objectclass: organization o: Example dc: Example dn: cn=Manager,dc=example,dc=com objectclass: organizationalRole cn: Manager Zur Fehlersuche, stoppen Sie den slapd-Dienst mit dem service-Befehl. Starten Sie anschließend die Anwendung mit Debugging-Optionen: &prompt.root; /usr/local/libexec/slapd -d -1 Angenommen das die Importdatei import.ldif heißt, geben Sie folgenden Befehl ein, um die Datendatei zu importieren: &prompt.root; ldapadd -Z -D "cn=Manager,dc=example,dc=com" -W -f import.ldif Es wird wieder eine Aufforderung zur Passworteingabe geben und die Ausgabe sollte wie folgt aussehen: Enter LDAP Password: adding new entry "dc=example,dc=com" adding new entry "cn=Manager,dc=example,dc=com" Stellen Sie mit einer Suche auf dem Server sicher, dass die Daten importiert wurden. Nutzen Sie dazu ldapsearch. In diesem Fall sollte die Ausgabe wie folgt aussehen: &prompt.user; ldapsearch -Z # extended LDIF # # LDAPv3 # base <dc=example,dc=com> (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 Es ist natürlich sinnvoll, sich über die Struktur der LDAP-Verzeichnisse in den hier erwähnten Manualpages zu informieren. An dieser Stelle sollte der Server konfiguriert sein und ordnungsgemäß funktionieren. Dynamic Host Configuration Protocol (<acronym>DHCP</acronym>) Dynamic Host Configuration Protocol DHCP Internet Systems Consortium (ISC) Das Dynamic Host Configuration Protocol (DHCP) 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 dhclient, um die Adressinformationen zu beziehen. &os; installiert keinen DHCP-Server, aber es stehen einige Server in der &os; Ports-Sammlung zu Verfügung. Das DHCP-Protokoll wird vollständig im RFC 2131 beschrieben. Eine weitere, lehrreiche Informationsquelle existiert unter isc.org/downloads/dhcp/. In diesem Abschnitt wird beschrieben, wie der integrierte DHCP-Client verwendet wird. Anschließend wird erklärt, wie ein DHCP-Server zu installieren und konfigurieren ist. Unter &os; wird das Gerät &man.bpf.4; für den DHCP-Server und den DHCP-Client benötigt. Das Gerät ist bereits im GENERIC-Kernel enthalten. Benutzer, die es vorziehen einen angepassten Kernel zu erstellen, müssen dieses Gerät behalten, wenn DHCP verwendet wird. Es sei darauf hingewiesen, dass bpf es priviligierten Benutzern ermöglicht einen Paket-Sniffer auf dem System auszuführen. Einen <acronym>DHCP</acronym>-Client konfigurieren Die Unterstützung für den DHCP-Client ist im Installationsprogramm von &os; enthalten, sodass ein neu installiertes System automatisch die Adressinformationen des Netzwerks vom DHCP-Server erhält. In finden Sie Beispiele für eine Netzwerkkonfiguration. UDP dhclient beginnt von einem Clientrechner aus über den UDP-Port 68 Konfigurationsinformationen anzufordern. Der Server antwortet auf dem UDP-Port 67, indem er dem Client eine IP-Adresse zuweist und ihm weitere relevante Informationen über das Netzwerk, wie Netzmasken, Router und DNS-Server mitteilt. Diese Informationen werden als DHCP-Lease bezeichnet und sind nur für bestimmte Zeit, die vom Administrator des DHCP-Servers vorgegeben wird, gültig. Dadurch fallen verwaiste IP-Adressen, deren Clients nicht mehr mit dem Netzwerk verbunden sind, automatisch an den Server zurück. DHCP-Clients können sehr viele Informationen von einem DHCP-Server erhalten. Eine ausführliche Liste finden Sie in &man.dhcp-options.5;. Das Gerät bpf ist im GENERIC-Kernel bereits enthalten. Für die Nutzung von DHCP muss also kein angepasster Kernel erzeugt werden. In einer angepassten Kernelkonfigurationsdatei muss das Gerät enthalten sein, damit DHCP ordnungsgemäß funktioniert. Standardmässig läuft die DHCP-Konfiguration bei &os; im Hintergrund oder auch asynchron. Andere Startskripte laufen weiter, während DHCP fertig abgearbeitet wird, was den Systemstart beschleunigt. DHCP im Hintergrund funktioniert gut, wenn der DHCP-Server schnell auf Anfragen der Clients antwortet. Jedoch kann DHCP eine lange Zeit benötigen, um auf manchen Systemen fertig zu werden. Falls Netzwerkdienste gestartet werden, bevor DHCP die Informationen und Netzwerkadressen gesetzt hat, werden diese fehlschlagen. Durch die Verwendung von DHCP im asynchronen Modus wird das Problem verhindert, so dass die Startskripte pausiert werden, bis die DHCP-Konfiguration abgeschlossen ist. Diese Zeile wird in /etc/rc.conf verwendet, um den asynchronen Modus zu aktivieren: ifconfig_fxp0="DHCP" Die Zeile kann bereits vorhanden sein, wenn bei der Installation des Systems DHCP konfiguriert wurde. Ersetzen Sie fxp0 durch die entsprechende Schnittstelle. Die dynamische Konfiguration von Netzwerkkarten wird in beschrieben. Um stattdessen den synchronen Modus zu verwenden, der während des Systemstarts pausiert bis die DHCP-Konfiguration abgeschlossen ist, benutzen Sie SYNCDHCP: ifconfig_fxp0="SYNCDHCP" Es stehen weitere Optionen für den Client zur Verfügung. Suchen Sie in &man.rc.conf.5; nach dhclient, wenn Sie an Einzelheiten interessiert sind. DHCP Konfigurationsdateien Der DHCP-Client verwendet die folgenden Dateien: /etc/dhclient.conf Die Konfigurationsdatei von dhclient. Diese Datei enthält normalerweise nur Kommentare, da die Vorgabewerte zumeist ausreichend sind. Diese Konfigurationsdatei wird in &man.dhclient.conf.5; beschrieben. /sbin/dhclient Weitere Informationen über dieses Kommando finden Sie in &man.dhclient.8;. /sbin/dhclient-script Das &os;-spezifische Konfigurationsskript des DHCP-Clients. Es wird in &man.dhclient-script.8; beschrieben und kann meist unverändert übernommen werden. /var/db/dhclient.leases.interface Der DHCP-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. Einen <acronym>DHCP</acronym>-Server installieren und einrichten Dieser Abschnitt beschreibt die Einrichtung eines &os;-Systems als DHCP-Server. Dazu wird die DHCP-Implementation von ISC (Internet Systems Consortium) verwendet. Diese Implementation und die Dokumentation können als Port oder Paket net/isc-dhcp42-server installiert werden. DHCP Server DHCP installieren Der Port net/isc-dhcp42-server installiert eine Beispiel-Konfigurationsdatei. Kopieren Sie /usr/local/etc/dhcpd.conf.example nach /usr/local/etc/dhcpd.conf und nehmen Sie die Änderungen an der neuen Datei vor. DHCP dhcpd.conf Diese Konfigurationsdatei umfasst Deklarationen für Subnetze und Rechner, die den DHCP-Cleints zur Verfügung gestellt wird. Die folgenden Zeilen konfigurieren Folgendes: option domain-name "example.org"; option domain-name-servers ns1.example.org; option subnet-mask 255.255.255.0; default-lease-time 600; max-lease-time 72400; ddns-update-style none; subnet 10.254.239.0 netmask 255.255.255.224 { range 10.254.239.10 10.254.239.20; option routers rtr-239-0-1.example.org; } host fantasia { hardware ethernet 08:00:07:26:c0:a5; fixed-address fantasia.fugue.com; } Diese Option beschreibt die Standardsuchdomäne, die den Clients zugewiesen wird. Weitere Informationen finden Sie in &man.resolv.conf.5;. Diese Option legt eine, durch Kommata getrennte Liste von DNS-Servern fest, die von den Clients verwendet werden sollen. Die Server können über den Namen (FQDN) oder die IP-Adresse spezifiziert werden. Die den Clients zugewiesene Subnetzmaske. Die Voreinstellung für die Ablaufzeit des Lease in Sekunden. Ein Client kann diesen Wert in der Konfiguration überschreiben. Die maximale Zeitdauer, für die der Server Leases vergibt. Sollte ein Client eine längere Zeitspanne anfordern, wird dennoch nur der Wert max-lease-time zugewiesen. Die Voreinstellung deaktiviert dynamische DNS-Updates. Bei der Einstellung aktualisiert der DHCP-Server den DNS-Server, wenn ein Lease vergeben oder zurückgezogen wurde. Ändern Sie die Voreinstellung nicht, wenn der Server so konfiguriert wurde, dynamische DNS-Updates zu unterstützen. Diese Zeile erstellt einen Pool der verfügbaren IP-Adressen, die für die Zuweisung der DHCP-Clients reserviert sind. Der Bereich muss für das angegebene Netz oder Subnetz aus der vorherigen Zeile gültig sein. Legt das Standard-Gateway für das Netz oder Subnetz fest, das nach der öffnenden Klammer { gültig ist. Bestimmt die Hardware-MAC-Adresse eines Clients, durch die der DHCP-Server den Client erkennt, der eine Anforderung an ihn stellt. Einem Rechner soll immer die gleiche IP-Adresse zugewiesen werden. Hier ist auch ein Rechnername gültig, da der DHCP-Server den Rechnernamen auflöst, bevor er das Lease zuweist. Die Konfigurationsdatei unterstützt viele weitere Optionen. Lesen Sie &man.dhcpd.conf.5;, die mit dem Server installiert wird, für Details und Beispiele. Nachdem dhcpd.conf konfiguriert ist, aktivieren Sie den DHCP-Server /etc/rc.conf: dhcpd_enable="YES" dhcpd_ifaces="dc0" Dabei müssen Sie dc0 durch die Gerätedatei (mehrere Gerätedateien müssen durch Leerzeichen getrennt werden) ersetzen, die der DHCP-Server auf Anfragen von DHCP-Clients hin überwachen soll. Starten Sie den Server mit folgenden Befehl: &prompt.root; service isc-dhcpd start Künftige Änderungen an der Konfiguration des Servers erfordern, dass der Dienst dhcpd gestoppt und anschließend mit &man.service.8; gestartet wird. DHCP Konfigurationsdateien /usr/local/sbin/dhcpd Weitere Informationen zu dhcpd finden Sie in &man.dhcpd.8;. /usr/local/etc/dhcpd.conf 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. /var/db/dhcpd.leases Der DHCP-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. /usr/local/sbin/dhcrelay Dieser Daemon wird in komplexen Umgebungen verwendet, in denen ein DHCP-Server eine Anfrage eines Clients an einen DHCP-Server in einem separaten Netzwerk weiterleitet. Wenn Sie diese Funktion benötigen, müssen Sie net/isc-dhcp42-relay installieren. Weitere Informationen zu diesem Thema finden Sie in &man.dhcrelay.8;. Domain Name System (<acronym>DNS</acronym>) BIND DNS ist das für die Umwandlung von Rechnernamen in IP-Adressen zuständige Protokoll. &os; verwendet dazu BIND (Berkeley Internet Name Domain), die am häufigsten verwendete Implementierung von DNS. Die Version in &os; bietet erweiterte Sicherheitsmerkmale, ein neues Dateisystem-Layout und eine automatische &man.chroot.8;-Konfiguration. BIND wird von isc.org betreut. Für einfache DNS-Anfragen wird auf dem lokalen System kein Nameserver benötigt. DNS Im Internet wird DNS durch ein komplexes System von autoritativen Root-Nameservern, Top Level Domain-Servern (TLD) sowie anderen kleineren Nameservern verwaltet, die individuelle Rechnerinformationen speichern und untereinander abgleichen. Tabelle 29.7.2 erklärt einige Begriffe im Zusammenhang mit DNS: Resolver Reverse-DNS Root-Zone <acronym>DNS</acronym>-Begriffe Begriff Bedeutung Forward-DNS Rechnernamen in IP-Adressen umwandeln. Origin (Ursprung) Die in einer bestimmten Zonendatei beschriebene Domäne. named, BIND Gebräuchliche Namen für das unter &os; verwendete BIND-Nameserverpaket. Resolver Ein Systemprozess, durch den ein Rechner Zoneninformationen von einem Nameserver anfordert. Reverse-DNS die Umwandlung von IP-Adressen in Rechnernamen Root-Zone 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. Zone Eine individuelle Domäne, Unterdomäne, oder ein Teil von DNS, der von der gleichen Autorität verwaltet wird.
Zonen Beispiele Es folgen nun einige Zonenbeispiele: Innerhalb der Dokumentation wird die Root-Zone in der Regel mit . bezeichnet. org. ist eine Top level Domain (TLD) innerhalb der Root-Zone. example.org. ist eine Zone innerhalb der org.-TLD. 1.168.192.in-addr.arpa. ist die Zone mit allen IP-Adressen des 192.168.1.*-IP-Bereichs. Wie man an diesen Beispielen erkennen kann, befindet sich der spezifischere Teil eines Rechnernamens auf der linken Seite der Adresse. example.org. beschreibt einen Rechner also genauer als org., während org. genauer als die Root-Zone ist. Jeder Teil des Rechnernamens hat Ähnlichkeiten mit einem Dateisystem, in dem etwa /dev dem Wurzelverzeichnis untergeordnet ist. Gründe für die Verwendung eines Nameservers Es gibt zwei Arten von Nameservern: Autoritative Nameserver sowie zwischenspeichernde (cachende, auch bekannt als auflösende) Nameserver. Ein autoritativer Nameserver ist notwendig, wenn Sie anderen verbindliche DNS-Auskünfte erteilen wollen. eine Domain, beispielsweise example.org, registriert wird, und den zu dieser Domain gehörenden Rechnern IP-Adressen zugewiesen werden müssen. ein IP-Adressblock reverse-DNS-Einträge benötigt, um IP-Adressen in Rechnernamen auflösen zu können. ein Backup-Nameserver (auch Slaveserver genannt) oder ein zweiter Nameserver auf Anfragen antworten soll. Ein cachender Nameserver ist notwendig, weil ein lokaler DNS-Server Daten zwischenspeichern und daher schneller auf Anfragen reagieren kann als ein entfernter Server. Wird nach www.FreeBSD.org gesucht, leitet der Resolver diese Anfrage an den Nameserver des ISPs weiter und nimmt danach das Ergebnis der Abfrage entgegen. Existiert ein lokaler, zwischenspeichernder DNS-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. Wie funktioniert <acronym>DNS</acronym>? Unter &os; wird der BIND-Daemon als named bezeichnet. Datei Beschreibung named Der BIND-Daemon. &man.rndc.8; Das Steuerprogramm für named. /etc/namedb Das Verzeichnis, in dem sich die Zoneninformationen für BIND befinden. /etc/namedb/named.conf Die Konfigurationsdatei für named. Je nachdem, wie eine Zone auf dem Server konfiguriert wurde, finden sich die zur Zone gehörendenden Dateien in den Unterverzeichnissen master, slave, oder dynamic des Verzeichnisses /etc/namedb. Diese Dateien enthalten die DNS-Informationen, die der Nameserver für die Beantwortung von Anfragen benötigt. BIND starten BIND Start Da BIND automatisch installiert wird, ist die Konfiguration relativ einfach. In der Voreinstellung wird ein in einer &man.chroot.8;-Umgebung betriebener named-Server zur einfachen Namensauflösung eingerichtet, der nur im lokalen IPv4-Loopback-Adressbereich (127.0.0.1) lauscht. Um den Server manuell zu starten, verwenden Sie den folgenden Befehl: &prompt.root; service named onestart Um den named-Daemon beim Systemstart automatisch zu starten, fügen Sie folgende Zeile in /etc/rc.conf ein: named_enable="YES" /etc/namedb/named.conf bietet zahlreiche Konfigurationsoptionen, die in diesem Dokument nicht alle beschrieben werden können. Weitere Startoptionen von named unter &os; finden Sie in den named_*-Flags in /etc/defaults/rc.conf sowie in &man.rc.conf.5;. Zusätzliche Informationen finden Sie im . Konfigurationsdateien BIND Konfigurationsdateien Die Konfigurationsdateien von named finden sich unter /etc/namedb und müssen in der Regel an Ihre Bedürfnisse angepasst werden. Es sei denn, Sie benötigen nur einen einfachen Resolver. Ein Großteil der Konfigurationsarbeiten erfolgt dabei in diesem Verzeichnis. <filename>/etc/namedb/named.conf</filename> // $FreeBSD$ // // Refer to the named.conf(5) and named(8) man pages, and the documentation // in /usr/share/doc/bind9 for more details. // // If you are going to set up an authoritative server, make sure you // understand the hairy details of how DNS works. Even with // simple mistakes, you can break connectivity for affected parties, // or cause huge amounts of useless Internet traffic. options { // All file and path names are relative to the chroot directory, // if any, and should be fully qualified. directory "/etc/namedb/working"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; // If named is being used only as a local resolver, this is a safe default. // For named to be accessible to the network, comment this option, specify // the proper IP address, or delete this option. listen-on { 127.0.0.1; }; // If you have IPv6 enabled on this system, uncomment this option for // use as a local resolver. To give access to the network, specify // an IPv6 address, or the keyword "any". // listen-on-v6 { ::1; }; // These zones are already covered by the empty zones listed below. // If you remove the related empty zones below, comment these lines out. disable-empty-zone "255.255.255.255.IN-ADDR.ARPA"; disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; // If you've got a DNS server around at your upstream provider, enter // its IP address here, and enable the line below. This will make you // benefit from its cache, thus reduce overall DNS traffic in the Internet. /* forwarders { 127.0.0.1; }; */ // If the 'forwarders' clause is not empty the default is to 'forward first' // which will fall back to sending a query from your local server if the name // servers in 'forwarders' do not have the answer. Alternatively you can // force your name server to never initiate queries of its own by enabling the // following line: // forward only; // If you wish to have forwarding configured automatically based on // the entries in /etc/resolv.conf, uncomment the following line and // set named_auto_forward=yes in /etc/rc.conf. You can also enable // named_auto_forward_only (the effect of which is described above). // include "/etc/namedb/auto_forward.conf"; Um vom Cache Ihres Internetproviders zu profitieren, können hier forwarders aktiviert werden. Normalerweise sucht ein Nameserver das Internet rekursiv ab, bis er die gesuchte Antwort findet. Durch diese Option wird stets der Nameserver Ihres Internetproviders zuerst abgefragt, um von dessen Cache zu profitieren. Wenn es sich um einen schnellen, viel benutzten Nameserver handelt, kann dies zu einer Geschwindigkeitssteigerung führen. 127.0.0.1 funktioniert hier nicht. Ändern Sie diese Adresse in einen Nameserver des Einwahlproviders. /* Modern versions of BIND use a random UDP port for each outgoing query by default in order to dramatically reduce the possibility of cache poisoning. All users are strongly encouraged to utilize this feature, and to configure their firewalls to accommodate it. AS A LAST RESORT in order to get around a restrictive firewall policy you can try enabling the option below. Use of this option will significantly reduce your ability to withstand cache poisoning attacks, and should be avoided if at all possible. Replace NNNNN in the example with a number between 49160 and 65530. */ // query-source address * port NNNNN; }; // If you enable a local name server, don't forget to enter 127.0.0.1 // first in your /etc/resolv.conf so this server will be queried. // Also, make sure to enable it in /etc/rc.conf. // The traditional root hints mechanism. Use this, OR the slave zones below. zone "." { type hint; file "/etc/namedb/named.root"; }; /* Slaving the following zones from the root name servers has some significant advantages: 1. Faster local resolution for your users 2. No spurious traffic will be sent from your network to the roots 3. Greater resilience to any potential root server failure/DDoS On the other hand, this method requires more monitoring than the hints file to be sure that an unexpected failure mode has not incapacitated your server. Name servers that are serving a lot of clients will benefit more from this approach than individual hosts. Use with caution. To use this mechanism, uncomment the entries below, and comment the hint zone above. As documented at http://dns.icann.org/services/axfr/ these zones: "." (the root), ARPA, IN-ADDR.ARPA, IP6.ARPA, and ROOT-SERVERS.NET are availble for AXFR from these servers on IPv4 and IPv6: xfr.lax.dns.icann.org, xfr.cjr.dns.icann.org */ /* zone "." { type slave; file "/etc/namedb/slave/root.slave"; masters { 192.5.5.241; // F.ROOT-SERVERS.NET. }; notify no; }; zone "arpa" { type slave; file "/etc/namedb/slave/arpa.slave"; masters { 192.5.5.241; // F.ROOT-SERVERS.NET. }; notify no; }; */ /* Serving the following zones locally will prevent any queries for these zones leaving your network and going to the root name servers. This has two significant advantages: 1. Faster local resolution for your users 2. No spurious traffic will be sent from your network to the roots */ // RFCs 1912 and 5735 (and BCP 32 for localhost) zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; }; zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // RFC 1912-style zone for IPv6 localhost address zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; // "This" Network (RFCs 1912 and 5735) zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Private Use Networks (RFCs 1918 and 5735) zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Link-local/APIPA (RFCs 3927 and 5735) zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IETF protocol assignments (RFCs 5735 and 5736) zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737) zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 Range for Documentation (RFC 3849) zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Domain Names for Documentation and Testing (BCP 32) zone "test" { type master; file "/etc/namedb/master/empty.db"; }; zone "example" { type master; file "/etc/namedb/master/empty.db"; }; zone "invalid" { type master; file "/etc/namedb/master/empty.db"; }; zone "example.com" { type master; file "/etc/namedb/master/empty.db"; }; zone "example.net" { type master; file "/etc/namedb/master/empty.db"; }; zone "example.org" { type master; file "/etc/namedb/master/empty.db"; }; // Router Benchmark Testing (RFCs 2544 and 5735) zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IANA Reserved - Old Class E Space (RFC 5735) zone "240.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "241.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "242.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "243.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "244.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "245.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "246.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "247.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "248.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "249.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "250.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "251.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "252.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "253.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "254.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 Unassigned Addresses (RFC 4291) zone "1.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "3.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "4.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "5.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "6.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "7.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "8.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "9.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "a.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "b.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "c.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "d.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "e.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "0.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "1.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "2.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "3.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "4.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "5.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "6.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "7.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "8.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "9.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "a.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "b.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "0.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "1.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "2.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "3.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "4.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "5.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 ULA (RFC 4193) zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 Link Local (RFC 4291) zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 Deprecated Site-Local Addresses (RFC 3879) zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "f.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IP6.INT is Deprecated (RFC 4159) zone "ip6.int" { type master; file "/etc/namedb/master/empty.db"; }; // NB: Do not use the IP addresses below, they are faked, and only // serve demonstration/documentation purposes! // // Example slave zone config entries. It can be convenient to become // a slave at least for the zone your own domain is in. Ask // your network administrator for the IP address of the responsible // master name server. // // Do not forget to include the reverse lookup zone! // This is named after the first bytes of the IP address, in reverse // order, with ".IN-ADDR.ARPA" appended, or ".IP6.ARPA" for IPv6. // // Before starting to set up a master zone, make sure you fully // understand how DNS and BIND work. There are sometimes // non-obvious pitfalls. Setting up a slave zone is usually simpler. // // NB: Don't blindly enable the examples below. :-) Use actual names // and addresses instead. /* An example dynamic zone key "exampleorgkey" { algorithm hmac-md5; secret "sf87HJqjkqh8ac87a02lla=="; }; zone "example.org" { type master; allow-update { key "exampleorgkey"; }; file "/etc/named/dynamic/example.org"; }; */ /* Example of a slave reverse zone zone "1.168.192.in-addr.arpa" { type slave; file "/etc/namedb/slave/1.168.192.in-addr.arpa"; masters { 192.168.1.1; }; }; */ Hierbei handelt es sich um Slave-Einträge für eine Reverse- und Forward-DNS-Zone, die in der Datei named.conf definiert sind. Für jede neue Zone muss ein zusätzlicher Eintrag in named.conf erstellt werden. Ein einfacher Eintrag für eine Zone example.org könnte beispielsweise so aussehen: zone "example.org" { type master; file "master/example.org"; }; Die Option legt fest, dass es sich um eine Master-Zone handelt, deren Zoneninformationen sich in der Datei /etc/namedb/master/example.org befinden. Diese Datei wird durch die Option festgelegt. zone "example.org" { type slave; file "slave/example.org"; }; Hier handelt es sich um einen Slaveserver, der seine Informationen vom Masterserver der betreffenden Zone bezieht und diese in der angegebenen Datei speichert. Wenn der Masterserver nicht erreichbar ist, verfügt der Slaveserver über die transferierten Zoneninformationen und kann diese an andere Rechner weitergeben. Zonendateien BIND Zonendatei Die in der Datei /etc/namedb/master/example.org definierte Zonendatei für example.org könnte etwa so aussehen: $TTL 3600 ; 1 hour default TTL example.org. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 300 ; Negative Response TTL ) ; DNS Servers IN NS ns1.example.org. IN NS ns2.example.org. ; MX Records IN MX 10 mx.example.org. IN MX 20 mail.example.org. IN A 192.168.1.1 ; Machine Names localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 mail IN A 192.168.1.5 ; Aliases www IN CNAME example.org. Beachten Sie, dass jeder mit einem . endende Rechnername ein exakter Rechnername ist, während sich alles ohne einen abschließenden . relativ auf den Ursprung bezieht. ns1 steht daher beispielsweise für ns1.example.org.. Eine Zonendatei hat folgenden Aufbau: recordname IN recordtype value DNS Einträge Die am häufigsten verwendeten DNS-Einträge sind: SOA Start der Zonenautorität NS Ein autoritativer Nameserver A Eine Rechneradresse CNAME Der kanonische Name eines Alias MX Mail Exchanger PTR Ein (bei Reverse-DNS verwendeter) Domain Name Pointer example.org. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh after 3 hours 3600 ; Retry after 1 hour 604800 ; Expire after 1 week 300 ) ; Negative Response TTL example.org. Der Name der Domäne und damit der Ursprung dieser Zonendatei. ns1.example.org. Der primäre/autoritative Nameserver dieser Zone. admin.example.org. Die für diese Zone verantwortliche Person. Das Zeichen @ wird dabei ersetzt (admin@example.org wird also zu admin.example.org). 2006051501 Die Seriennummer der Datei. Sie muss stets inkrementiert werden, wenn die Zonendatei geändert wird. Viele Administratoren bevorzugen ein JJJJMMTTRR-Format, um die Seriennummer festzulegen. 2006051501 steht also für den 15.05.2006, die beiden letzten Stellen für die erste Modifikation der Zonendatei an diesem Tag. Die Seriennummer ist von großer Bedeutung, da Slaveserver daran eine aktualisierte Zonendatei erkennen können. IN NS ns1.example.org. Ein NS-Eintrag. Jeder Nameserver, der für eine Zone verantwortlich ist, muss über einen solchen Eintrag verfügen. localhost IN A 127.0.0.1 ns1 IN A 192.168.1.2 ns2 IN A 192.168.1.3 mx IN A 192.168.1.4 mail IN A 192.168.1.5 Der Eintrag A bezieht sich auf Rechnernamen. ns1.example.org würde also zu 192.168.1.2 aufgelöst werden. IN A 192.168.1.1 Diese Zeile weist die IP-Adresse 192.168.1.1 dem aktuellen Ursprung, in unserem Fall also example.org, zu. www IN CNAME @ Der Eintrag für den kanonischen Namen wird dazu verwendet, Aliase für einen Rechner zu vergeben. Im Beispiel ist www ein Alias für den Master-Rechner, dessen Name dem Domainnamen example.org (oder 192.168.1.1) entspricht. CNAMEs können daher niemals gleichzeitig mit einem anderen Eintrag für denselben Hostname eingerichtet werden. MX-Eintrag IN MX 10 mail.example.org. Der MX-Eintrag legt fest, welcher Mailserver für eintreffende Mails der Zone verantwortlich ist. mail.example.org ist der Rechnername des Mailservers, der eine Priorität von 10 hat. Es können auch mehrere Mailserver mit verschiedener Priorität (10, 20, ...) vorhanden sein. Ein Mailserver, der eine Mail an example.org verschicken will, verwendet zuerst den MX mit der höchsten Priorität (das heißt den mit der niedrigsten Prioritätsnummer), danach den mit der nächsthöheren Priorität. Und dies solange, bis die E-Mail zugestellt werden kann. Für (bei Reverse-DNS verwendete) in-addr.arpa-Zonendateien wird das gleiche Format verwendet. Der einzige Unterschied besteht in der Verwendung der Option PTR an Stelle der Optionen A und CNAME. $TTL 3600 1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( 2006051501 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 300 ) ; Negative Response TTL IN NS ns1.example.org. IN NS ns2.example.org. 1 IN PTR example.org. 2 IN PTR ns1.example.org. 3 IN PTR ns2.example.org. 4 IN PTR mx.example.org. 5 IN PTR mail.example.org. Durch diese Datei werden den Rechnernamen der fiktiven Domäne IP-Adressen zugewiesen. Beachten Sie bitte, dass es sich bei allen Namen auf der rechten Seite eines PTR-Eintrags um absolute (fully qualified) Domainnamen handeln muss, die mit . enden. Zwischenspeichernde (cachende) Nameserver BIND Zwischenspeichernde Nameserver Ein cachender Nameserver hat primär die Aufgabe, rekursive Abfragen aufzulösen. Er stellt lediglich eigene Anfragen und speichert deren Ergebnisse ab. <acronym role="Doman Name Security Extensions">DNSSEC</acronym> BIND DNS security extensions Domain Name System Security Extensions, oder kurz DNSSEC, ist eine Sammlung von Spezifikationen, um auflösende Nameserver von gefälschten DNS-Daten, wie beispielsweise vorgetäuschte DNS-Einträge, zu schützen. Durch die Verwendung von digitalen Signaturen kann ein Resolver die Integrität des Eintrages überprüfen. Wichtig dabei ist, dass DNSSEC nur die Integrität über digital signierte Resource Records (RRe) bereitstellt. Weder wird die Vertraulichkeit noch der Schutz vor falschen Annahmen des Endbenutzers sichergestellt. Dies bedeutet, dass es Leute nicht davor schützen kann, zu example.net anstatt zu example.com zu gelangen. Das einzige, was DNSSEC tut, ist die Authentifizierung, dass die Daten während der Übertragung nicht verändert wurden. Die Sicherheit von DNS ist ein wichtiger Schritt in der generellen Absicherung des Internets. Für weitere, tiefergehende Details über die Funktionsweise von DNSSEC sind die dazugehörigen RFCs ein guter Einstieg in die Thematik. Sehen Sie sich dazu die Liste in an. Der folgende Abschnitt wird zeigen, wie man DNSSEC für einen autoritativen DNS-Server und einen rekursiven (oder cachenden) DNS-Server, der jeweils BIND 9 verwenden, einrichten kann. Obwohl alle Versionen von BIND 9 DNSSEC unterstützen, ist es notwendig, mindestens die Version 9.6.2 zu verwenden, um in der Lage zu sein, die signierten Root-Zonen zu benutzen, wenn DNS-Abfragen geprüft werden. Der Grund dafür ist, dass früheren Versionen die Algorithmen fehlen, um die Überprüfung des Root-Zonenschlüssels zu aktivieren. Es wird dringend empfohlen, die letzte Version von BIND 9.7 oder höher einzusetzen, um von den Vorteilen der automatischen Schlüsselaktualisierung des Root-Zonenschlüssels Gebrauch zu machen, genauso wie andere Eigenschaften, um automatisch Zonen signieren zu lassen und Signaturen aktuell zu halten. Unterschiede zwischen den Versionen 9.6.2 und 9.7 und höher werden an den betreffenden Stellen angesprochen. Rekursive <acronym>DNS</acronym>-Server Konfiguration Die Aktivierung der DNSSEC-Überprüfung von Anfragen, die von einem rekursiven DNS-Server stammen, benötigt ein paar Änderungen in der named.conf. Bevor man jedoch diese Änderungen durchführt, muss der Root-Zonenschlüssel oder Vertrauensanker erworben werden. Momentan ist der Root-Zonenschlüssel nicht in einem Dateiformat verfügbar, dass von BIND benutzt werden kann, so dass dieser manuell in das richtige Format konvertiert werden muss. Der Schlüssel selbst kann durch Abfrage an die Root-Zone erhalten werden, indem man dazu dig verwendet. Durch Aufruf von &prompt.user; dig +multi +noall +answer DNSKEY . > root.dnskey wird der Schlüssel in root.dnskey abgelegt. Der Inhalt sollte so ähnlich wie folgt aussehen: . 93910 IN DNSKEY 257 3 8 ( AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh /RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3 LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= ) ; key id = 19036 . 93910 IN DNSKEY 256 3 8 ( AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69Hf UyuGBbRN0+HuTOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjE g58sRr4ZQ6Iu6b1xTBKgc193zUARk4mmQ/PPGxn7Cn5V EGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlFrXDW3tjt ) ; key id = 34525 Seien Sie nicht alarmiert, wenn der von Ihnen bezogene Schlüssel anders als in diesem Beispiel aussieht. Diese könnten sich in der Zwischenzeit geändert haben. In dieser Ausgabe sind eigentlich zwei Schlüssel enthalten. Der erste Schüssel mit dem Wert 257 nach dem DNSKEY-Eintrag ist derjenige, der benötigt wird. Der Wert zeigt an, dass es sich um einen sicheren Einstiegspunkt (SEP), gemein auch als Schlüsselsignierungsschlüssel (KSK) bekannt, handelt. Der zweite Schüssel mit dem Wert 256 ist der untergeordnete Schlüssel, im allgemeinen auch als Zonen-Signaturschlüssel (ZSK) bezeichnet. Weitere Schlüsselarten werden später in erläutert. Nun muss der Schlüssel verifiziert und so formatiert werden, dass BIND diesen verwenden kann. Um den Schlüssel zu verifizieren, erzeugen Sie einen DS RR-Satz. Erstellen Sie eine Datei, welche die RRs enthält, mittels &prompt.user; dnssec-dsfromkey -f root.dnskey . > root.ds Diese Einträge verwenden SHA-1 sowie SHA-256 und sollten ähnlich zu folgendem Beispiel aussehen, in dem der längere, SHA-256, benutzt wird. . IN DS 19036 8 1 B256BD09DC8DD59F0E0F0D8541B8328DD986DF6E . IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5 Der SHA-256 RR kann nun mit dem Abriss in https://data.iana.org/root-anchors/root-anchors.xml verglichen werden. Um absolut sicher zu sein, dass der Schlüssel nicht zusammen mit den XML-Daten verändert wurde, kann die Datei mittels der PGP Signatur in https://data.iana.org/root-anchors/root-anchors.asc überprüft werden. Als nächstes muss der Schlüssel in das passende Format gebracht werden. Dies unterscheidet sich ein bisschen von den BIND Versionen 9.6.2 und 9.7 und höhere. In Version 9.7 wurde die Ünterstützung zur automatischen Verfolgung und notwendigen Aktualisierung von Änderungen am Schlüssel eingebaut. Dies wird durch den Einsatz von managed-keys erreicht, wie in dem Beispiel unten gezeigt ist. Wenn die ältere Version eingesetzt wird, kann der Schlüssel durch eine trusted-keys-Anweisung eingebaut werden und die Aktualisierung muss händisch erfolgen. In BIND 9.6.2 sollte das Format folgendermassen aussehen: trusted-keys { "." 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0="; }; In 9.7 wird das Format stattdessen wie folgt aussehen: managed-keys { "." initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0="; }; Der Root-Schlüssel kann nun zu named.conf hinzugefügt werden, entweder direkt oder durch Inkludierung der Datei, die den Schlüssel enthält. Nachdem diese Schritte absolviert sind, muss BIND konfiguriert werden, um DNSSEC-Validierung für Anfragen durchzuführen, indem named.conf bearbeitet und die folgende options-Direktive hinzugefügt wird: dnssec-enable yes; dnssec-validation yes; Um zu prüfen, dass es tatsächlich funktioniert, benutzen Sie dig, um eine Anfrage zu einer signierten Zone durch den Resolver, der gerade konfiguriert wurde, zu stellen. Eine erfolgreiche Antwort wird den AD-Eintrag aufweisen, um anzudeuten, dass die Daten authentisiert sind. Eine Anfrage wie &prompt.user; dig @resolver +dnssec se ds sollte den DS RR für die .se-Zone zurückgeben. In dem Abschnitt flags: sollte der AD-Eintrag gesetzt sein, wie im folgenden zu sehen ist: ... ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ... Der Resolver ist nun in der Lage, Anfragen ans DNS zu authentisieren. Autoritative <acronym>DNS</acronym>-Server Konfiguration Um einen autoritativen Nameserver dazu zu bringen, als eine DNSSEC-signierte Zone zu fungieren, ist ein wenig mehr Aufwand nötig. Eine Zone ist durch kryptographische Schlüssel signiert, die erzeugt werden müssen. Es ist möglich, nur einen Schlüssel dazu zu verwenden. Die vorgeschlagene Methode ist jedoch, einen starken, gut geschützten Schlüsselsignierungsschlüssel (KSK) einzusetzen, der nicht oft gewechselt wird und einen Zonensignierungsschlüssel (ZSK), der öfter ausgewechselt wird. Informationen zu vorgeschlagenen Einsatzarten können in RFC 4641: DNSSEC Operational Practices nachgelesen werden. Einsatzszenarien, welche die Root-Zone betreffen, finden Sie in DNSSEC Practice Statement for the Root Zone KSK operator sowie DNSSEC Practice Statement for the Root Zone ZSK operator. Der KSK wird dazu verwendet, um eine Kette von Autorität für die Daten, die diese Validierung benötigen, zu erschaffen und wird als solche auch als sicherer Einstiegspunkt (SEP)-Schlüssel bezeichnet. Ein Nachrichtenabriss dieses Schlüssels, der auch Delegation Signer (DS)-Eintrag genannt wird, muss in der Elternzone veröffentlicht werden, um die Vertrauenskette herzustellen. Wie dies erreicht wird, hängt von dem Besitzer der Elternzone ab. Der ZSK wird verwendet, um die Zone zu signieren und muss nur dort öffentlich zugänglich gemacht werden. Um DNSSEC für die example.com-Zone, welche in den vorherigen Beispielen verwendet wird, zu aktivieren, muss als erster Schritt dnssec-keygen benutzt werden, um das KSK und ZSK Schlüsselpaar zu generieren. Dieses Schlüsselpaar kann unterschiedliche kryptographische Algorithmen nutzen. Es wird empfohlen, RSA/SHA256 für die Schlüssel zu nutzen. Eine Schlüssellänge von 2048 Bits sollte genügen. Um den KSK für example.com zu generieren, geben Sie &prompt.user; dnssec-keygen -f KSK -a RSASHA256 -b 2048 -n ZONE example.com ein und um den ZSK zu erzeugen, setzen Sie folgenden Befehl ab: &prompt.user; dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com dnssec-keygen gibt zwei Dateien aus, den öffentlichen und den privaten Schlüssel und zwar in Dateinamen, die ähnlich lauten wie Kexample.com.+005+nnnnn.key (öffentlich) und Kexample.com.+005+nnnnn.private (privat). Der nnnnn-Teil des Dateinamens ist eine fünfstellige Schlüsselkennung. Passen Sie genau auf, welche Kennung zu welchem Schlüssel gehört. Das ist besonders wichtig, wenn mehrere Schlüssel in einer Zone vorliegen. Es ist auch möglich, die Schlüssel umzubenennen. Für jede KSK-Datei tun Sie folgendes: &prompt.user; mv Kexample.com.+005+nnnnn.key Kexample.com.+005+nnnnn.KSK.key &prompt.user; mv Kexample.com.+005+nnnnn.private Kexample.com.+005+nnnnn.KSK.private Für die ZSK-Dateien ersetzen Sie KSK für ZSK wenn nötig. Die Dateien können nun in der Zonendatei inkludiert werden, indem die $include Anweisung verwendet wird. Es sollte folgendermassen aussehen: $include Kexample.com.+005+nnnnn.KSK.key ; KSK $include Kexample.com.+005+nnnnn.ZSK.key ; ZSK Schliesslich signieren Sie die Zone und weisen BIND an, die signierte Zonendatei zu benutzen. Um eine Zone zu signieren, wird dnssec-signzone eingesetzt. Der Befehl, um eine Zone example.com zu signieren, die in example.com.db liegt, sollte wie folgt aussehen: &prompt.user; dnssec-signzone -o example.com -k Kexample.com.+005+nnnnn.KSK example.com.db Kexample.com.+005+nnnnn.ZSK.key Der Schlüssel, welcher mit dem Argument übergeben wird, ist der KSK und die andere Schlüsseldatei ist der ZSK, welcher für die Signatur benutzt werden soll. Es ist möglich, mehr als einen KSK und ZSK anzugeben, was das Ergebnis zur Folge hat, dass die Zone mit allen übergebenen Schlüsseln signiert wird. Dies kann dann benötigt werden, um Zonendaten mit mehr als einem Algorithmus zur Signierung zu verwenden. Die Ausgabe von dnssec-signzone ist eine Zonendatei mit allen signierten RRs. Diese Ausgabe wird in einer Datei mit der Endung .signed abgelegt, wie beispielsweise example.com.db.signed. Die DS-Einträge werden ebenfalls in eine separate Datei dsset-example.com geschrieben. Um diese signierte Zone zu verwenden, ändern Sie die Zonendirektive in named.conf, so dass example.com.db.signed benutzt wird. Standardmässig sind die Signaturen nur 30 Tage gültig, was bedeutet, dass die Zone in etwa 15 Tagen erneut signiert werden muss, um sicher zu stellen, dass Resolver keine Einträge mit veralteten Signaturen zwischenspeichern. Es ist möglich, ein Skript und einen cron-Job zu schreiben, um dies zu erledigen. Lesen Sie dazu die relevanten Anleitungen, um Details zu erfahren. Stellen Sie sicher, dass die privaten Schlüssel vertraulich bleiben, genau wie mit allen anderen kryptographischen Schlüsseln auch. Wenn ein Schlüssel geändert wird, ist es gute Praxis den neuen Schlüssel in die Zone zu inkludieren, noch während der alte Schlüssel noch zum signieren eingesetzt wird, um dann auf den neuen Schlüssel zum signieren zu wechseln. Nachdem diese Schritte erfolgt sind, kann der alte Schlüssel aus der Zone entfernt werden. Wenn das nicht geschieht, können DNS-Daten für einige Zeit nicht verfügbar sein, bis der neue Schlüssel durch die DNS-Hierarchie propagiert wurde. Für weitere Informationen bezüglich Schlüsselübergabe und andere DNSSEC-Einsatzszenarien lesen Sie RFC 4641: DNSSEC Operational practices. Automatisierung mittels <acronym>BIND</acronym> 9.7 oder höher Beginnend mit der Version 9.7 von BIND wurde eine neue Eigenschaft vorgestellt, die Smart Signing genannt wird. Diese zielt darauf ab, das Schlüsselmanagement und den Signierungsprozess einfacher zu gestalten und zu automatisieren. Durch ablegen der Schlüssel in ein Verzeichnis, genannt key repository und die Verwendung der neuen Option auto-dnssec, ist es möglich eine dynamische Zone zu erzeugen, welche dann erneut signiert wird, wenn dazu der Bedarf besteht. Um diese Zone zu aktualisieren, benutzen Sie nsupdate mit der neuen Option . Es hat also rndc die Fähigkeit gewonnen, Zonen mit Schlüsseln im Key Repository zu verwenden, indem die Option eingesetzt wird. Um BIND anzuweisen, diese automatische Signierung und Zonenaktualisierung für example.com zu nutzen, fügen Sie die folgenden Zeilen zur named.conf hinzu: zone example.com { type master; key-directory "/etc/named/keys"; update-policy local; auto-dnssec maintain; file "/etc/named/dynamic/example.com.zone"; }; Nachdem diese Änderungen durchgeführt wurden, erzeugen Sie die Schlüssel für die Zone wie in beschrieben wird, legen diese Schlüssel im Key Repository ab, dass als Argument key-directory in der Zonenkonfiguration steht und die Zone wird automatisch signiert. Aktualisierungen für eine Zone, die auf diese Art und Weise konfiguriert wurde, muss mittels nsupdate erfolgen, dass sich um die erneute Signierung der Zone mit den hinzugefügten Daten kümmern wird. Für weitere Details, lesen Sie und die Dokumentation von BIND. Sicherheit Obwohl BIND die am meisten verwendete Implementierung von DNS darstellt, werden dennoch manchmal neue Sicherheitsprobleme entdeckt. Zwar startet &os; named automatisch in einer &man.chroot.8;-Umgebung, es gibt aber noch weitere Sicherheitsmechanismen, mit denen Sie potentielle DNS-Serviceattacken erschweren können. Es ist daher eine gute Idee, die Sicherheitshinweise von CERT zu lesen sowie die Mailingliste &a.security-notifications; zu abonnieren, um sich über Sicherheitsprobleme im Zusammenhang mit dem Internet und FreeBSD zu informieren. Tritt ein Problem auf, kann es nie schaden, die Quellen zu aktualisieren und named neu zu kompilieren. Weitere Informationsquellen Hilfeseiten zu BIND/named: &man.rndc.8; &man.named.8; &man.named.conf.5; &man.nsupdate.1; &man.dnssec-signzone.8; &man.dnssec-keygen.8; Offizielle ISC-Seite zu BIND Offizielles Forum zu ISC- BIND O'Reilly DNS and BIND 5th Edition Root DNSSEC DNSSEC Vertrauensanker-Publikation für die Root-Zone RFC1034 - Domain Names - Concepts and Facilities RFC1035 - Domain Names - Implementation and Specification RFC4033 - DNS Security Introduction and Requirements RFC4034 - Resource Records for the DNS Security Extensions RFC4035 - Protocol Modifications for the DNS Security Extensions RFC4641 - DNSSEC Operational Practices RFC 5011 - Automated Updates of DNS Security (DNSSEC) Trust Anchors
Der Apache HTTP-Server Webserver konfigurieren Apache Der Open Source Apache HTTP-Server ist der am weitesten verbreitete Webserver. Dieser Webserver ist nicht im Basissystem von &os; enthalten, kann aber als Paket oder Port www/apache24 installiert werden. Dieser Abschnitt beschreibt die Konfiguration der Version 2.x des Apache HTTP-Server. Weiterführende Informationen und Konfigurationsanweisungen für Apache 2.X finden Sie unter httpd.apache.org. Apache konfigurieren und starten Apache Konfigurationsdatei Der Apache HTTP-Server wird unter &os; primär in /usr/local/etc/apache2x/httpd.conf konfiguriert, wobei das x die Versionsnummer darstellt. In dieser Textdatei leitet ein # einen Kommentar ein. Die am häufigsten verwendeten Optionen sind: ServerRoot "/usr/local" Legt das Standardwurzelverzeichnis für die Apache-Installation fest. Binärdateien werden in die Verzeichnisse bin und sbin unterhalb des Serverwurzelverzeichnisses installiert, während sich Konfigurationsdateien im Verzeichnis etc/apache2x befinden. ServerAdmin you@your.address Die E-Mail-Adresse, an die Mitteilungen über Serverprobleme geschickt werden. Diese Adresse erscheint auf vom Server erzeugten Seiten, beispielsweise auf Fehlerseiten. ServerName www.example.com Erlaubt dem Administrator, einen Rechnernamen festzulegen, den der Server an die Clients sendet. Beispielsweise könnte www statt des richtigen Rechnernamens verwendet werden. DocumentRoot "/usr/local/www/apache2x/data" 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. Es ist empfehlenswert, eine Sicherungskopie der Apache-Konfigurationsdatei anzulegen, bevor Änderungen durchgeführt werden. Wenn die Konfiguration von Apache abgeschlossen ist, speichern Sie die Datei und überprüfen Sie die Konfiguration mit apachectl. Geben Sie dazu apachectl configtest ein. Dieser Befehl sollte Syntax OK zurückgeben. Apache Starten oder Beenden Der www/apache24 Port installiert ein &man.rc.8; Skript, welches zum starten, stoppen und neustarten von Apache benutzt werden kann. Das Skript befindet sich in /usr/local/etc/rc.d/. Um den Apache beim Systemstart zu starten, fügen Sie folgende Zeile in /etc/rc.conf ein: apache24_enable="YES" Wenn Sie während des Systemstarts weitere Parameter an den Apache übergeben wollen, können Sie diese durch eine zusätzliche Zeile in rc.conf angeben: apache24_flags="" Die Konfiguration von Apache kann bei nachfolgenden Änderungen an der Konfigurationsdatei bei laufendem httpd, auf Fehler überprüft werden. Dies kann durch das &man.rc.8;-Skript direkt , oder über das Dienstprogramm &man.service.8; geschehen, indem Sie eines der folgenden Kommandos ausführen: &prompt.root; service apache24 configtest Es ist wichitg zu beachten, dass configtest kein &man.rc.8;-Standard ist, und somit nicht zwingend mit anderen &man.rc.8;-Startskripten funktioniert. Wenn der Apache keine Fehler in der Konfiguration meldet, starten Sie httpd mithilfe von &man.service.8;: &prompt.root; service apache24 start Sie können den httpd-Dienst testen, indem Sie http://localhost in einen Browser eingeben, wobei Sie localhost durch den vollqualifizierten Domainnamen der Machine ersetzen, auf dem der httpd läuft. Die Standard Webseite, die angezeigt wird, ist /usr/local/www/apache24/data/index.html. Virtual Hosting Der Apache unterstützt zwei Formen des Virtual Hostings. Die erste Möglichkeit bezeichnet man als namenbasiertes virtuelles Hosting. Dabei wird der HTTP/1.1-Header der Clients dazu verwendet, den Rechnernamen zu bestimmen. Dadurch wird es möglich, mehrere Domains unter der gleichen IP-Adresse zu betreiben. Damit der Apache namenbasierte virtuelle Domains verwalten kann, fügen Sie die folgende Zeile in httpd.conf ein: NameVirtualHost * Wenn der Webserver www.domain.tld heißt und die virtuelle Domain www.someotherdomain.tld einrichtet werden soll, ergänzen Sie httpd.conf um folgende Einträge: <VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain.tld </VirtualHost> <VirtualHost *> ServerName www.someotherdomain.tld DocumentRoot /www/someotherdomain.tld </VirtualHost> Ersetzen Sie dabei die Adressen sowie den Pfad zu den Dokumenten durch Ihre eigenen Einstellungen. Ausführliche Informationen zum Einrichten von virtuellen Domains finden Sie in der offiziellen Apache-Dokumentation unter http://httpd.apache.org/docs/vhosts/. Häufig verwendete Apache-Module Apache Module Es gibt viele verschiedene Apache-Module, die den Server um zusätzliche Funktionen erweitern. Die &os; Ports-Sammlung ermöglicht es Ihnen, den Apache gemeinsam mit einigen der beliebtesten Zusatzmodule zu installieren. <application>mod_ssl</application> Webserver Verschlüsselung SSL Verschlüsselung Das Modul mod_ssl verwendet die OpenSSL-Bibliothek, um, unter Nutzung der Protokolle Secure Sockets Layer (SSL v2/v3) sowie Transport Layer Security (TLS v1) starke Verschlüsselung zu ermöglichen. Durch dieses Modul können Sie ein signiertes Zertifikat von einer Zertifizierungsstelle anfordern, damit Sie einen sicheren Webserver unter &os; betreiben können. Das Modul mod_ssl wird standardmäßig kompiliert, kann aber auch noch nachträglich durch die Angabe von -DWITH_SSL zur Kompilierzeit aktiviert werden. Skriptsprachen Für die wichtigsten Skriptsprachen existieren Module, die es erlauben, Apache-Module nahezu vollständig in einer Skriptsprache zu programmieren. Derartige Module dienen oft dazu, einen Sprach-Interpreter in den Webserver einzubetten. Dadurch wird ein zusätzlicher externer Interpreter überflüssig, was die Startzeit von dynamischen Internetseiten deutlich verringert. Dynamische Webseiten Webserver dynamisch In den vergangenen Jahren haben immer mehr Unternehmen das Internet als Mittel für die Steigerung ihrer Einnahmen sowie für die Erhöhung ihrer Reichweite entdeckt. Dadurch stieg auch die Nachfrage nach interaktiven Internetinhalten. Neben einigen Unternehmen, darunter µsoft;, die dafür proprietäre Produkte entwickelt haben, hat auch die Open Source Community auf diesen Umstand reagiert und unter anderem mit Django, Ruby on Rails, mod_perl2, und mod_php Möglichkeiten zur Generierung dynamischer Internetseiten geschaffen. Django Python Django Bei Django 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 Phyton-Objekte entwickelt werden können) sowie eine API für den dynamischen Datenbankzugriff auf diese Objekte, ohne dass Entwickler jemals SQL-Code schreiben müssen. Zusätzlich existiert ein umfangreiches Template-System, wodurch die Programmlogik von der HTML-Präsentation getrennt werden kann. Django setzt das Modul mod_python, den Apache-Webserver sowie eine SQL-Datenbank voraus. Der &os;-Port wird alle Abhängigkeiten mit sinnvollen Optionen konfigurieren und installieren. Django mit <application>Apache2</application>, <application>mod_python3</application>, und <application>PostgreSQL</application> installieren &prompt.root; cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL Nachdem Django und die abhängigen Pakete installiert sind, benötigt die Anwendung ein Projektverzeichnis und die Apache-Konfiguration, um den eingebetteten Python-Interpreter zu nutzen. Dieser wird spezifische URLs der Seite aufrufen. Apache-Konfiguration für Django/mod_python Sie müssen httpd.conf anpassen, damit Apache Anfragen für bestimmte URLs an die Internet-Applikation übergibt: <Location "/"> SetHandler python-program PythonPath "['/dir/to/the/django/packages/'] + sys.path" PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonAutoReload On PythonDebug On </Location> Ruby on Rails Ruby on Rails Bei Ruby on Rails handelt es sich um 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. Das Framework kann über die Ports-Sammlung installiert werden. &prompt.root; cd /usr/ports/www/rubygem-rails; make all install clean <application>mod_perl2</application> mod_perl2 Perl Die Kombination Apache/Perl vereinigt die Vorteile der Programmiersprache Perl und des Apache HTTP-Servers. Durch das Modul mod_perl2 ist es möglich, vollständig in Perl geschriebene Apache-Module zu erzeugen. Da der Perl-Interpreter in den Server eingebettet wird, müssen Sie weder einen externen Interpreter noch Perl zusätzlich aufrufen. mod_perl2 ist über den Port www/mod_perl2 erhältlich. <application>mod_php</application> mod_php PHP Bei PHP>, dem Hypertext Preprocessor, handelt es sich um eine vielseitig verwendbare Skriptsprache, die besonders für die Web-Entwicklung geeignet ist. PHP kann in HTML eingebettet werden und ähnelt von der Syntax her Sprachen wie C, &java; und Perl. Das Hauptanliegen von PHP ist es, Web-Entwicklern die rasche Erstellung von dynamisch erzeugten Internetseiten zu ermöglichen. Damit Ihr System PHP5 unterstützt, müssen Sie als Erstes den Apache Webserver über den Port lang/php5 installieren. Wenn Sie den Port lang/php5 das erste Mal installieren, werden die verfügbaren Optionen (OPTIONS) automatisch angezeigt. Erscheint das Konfigurationsmenü bei Ihnen nicht, so liegt dies daran, dass Sie den Port lang/php5 schon einmal auf Ihrem System installiert hatten. Es ist aber jederzeit möglich, dieses Menü aus dem Ports-Verzeichnis heraus über folgenden Befehl erneut aufzurufen: &prompt.root; make config In diesem Konfigurationsmenü müssen Sie die Option APACHE auswählen, damit mod_php5 als ein vom Apache-Webserver ladbares Modul gebaut wird. Viele Seiten verwenden nach wie vor (beispielsweise wegen der benötigten Kompatibilität zu bereits vorhandenen Web-Applikationen) PHP4. Ist dies bei Ihnen der Fall, so müssen Sie statt mod_php5 mod_php4 über den Port lang/php4 installieren. Der Port lang/php4 unterstützt viele der Konfigurations- und Laufzeitoptionen von lang/php5. Dieser Port installiert und konfiguriert die Module, die für die Unterstützung von dynamischen PHP-Anwendungen benötigt werden. Stellen Sie danach sicher, dass Ihre /usr/local/etc/apache22/httpd.conf die folgenden Abschnitte enthält: LoadModule php5_module libexec/apache/libphp5.so AddModule mod_php5.c <IfModule mod_php5.c> DirectoryIndex index.php index.html </IfModule> <IfModule mod_php5.c> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps </IfModule> Nachdem dies erledigt ist, rufen Sie apachectl auf, um das PHP-Modul zu laden: &prompt.root; apachectl graceful Bei künftigen Upgrades von PHP wird make config nicht mehr benötigt, da die von Ihnen ursprünglich ausgewählten Optionen (OPTIONS) vom &os;-Ports-Framework automatisch gespeichert werden. Die PHP-Unterstützung von &os; ist stark modular aufgebaut, daher verfügt eine Basisinstallation nur über wenige Funktionen. Eine Erweiterung um zusätzliche Funktionen ist allerdings sehr einfach über den Port lang/php5-extensions möglich. Der Port bietet Ihnen ein Auswahlmenü, über das Sie verschiedene PHP-Erweiterungen installieren können. Alternativ können Sie einzelne Erweiterungen aber weiterhin direkt über den jeweiligen Port installieren. Um beispielsweise die Unterstützung des Datenbankservers MySQL in PHP5 zu aktivieren, installieren Sie den Port databases/php5-mysql. Nachdem Sie eine Erweiterung installiert haben, müssen Sie den Apache-Server neu starten, damit die Erweiterung auch erkannt wird: &prompt.root; apachectl graceful Ab nun wird MySQL von PHP unterstützt. File Transfer Protocol (<acronym>FTP</acronym>) FTP-Server Das File Transfer Protocol (FTP) ermöglicht auf einfache Art und Weise den Dateiaustausch mit einem FTP-Server. Der FTP-Server ftpd ist bei &os; bereits im Basisystem enthalten. &os; verwendet mehrere Konfigurationsdateien, um den Zugriff auf den FTP zu kontrollieren. Dieser Abschnitt fasst diese Dateien zusammen. In &man.ftpd.8; finden Sie weitere Inforamtionen über den integrierten FTP-Server. Konfiguration Der wichtigste Punkt ist hier die Entscheidung darüber, welche Benutzer auf den FTP-Server zugreifen dürfen. Ein &os;-System verfügt über diverse Systembenutzerkonten, die jedoch nicht auf den FTP-Server zugreifen sollen. Die Datei /etc/ftpusers enthält alle Benutzer, die vom FTP-Zugriff ausgeschlossen sind. In der Voreinstellung gilt dies auch die gerade erwähnten Systembenutzerkonten. Sie können über diese Datei weitere Benutzer vom FTP-Zugriff ausschließen. In einigen Fällen kann es wünschenswert sein, den Zugang für manche Benutzer einzuschränken, ohne dabei FTP komplett zu verbieten. Dazu passen Sie /etc/ftpchroot, 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 FTP. FTP anonymous Um anonymen FTP-Zugriff auf dem Server zu aktivieren, muss ein Benutzer ftp auf dem &os;-System angelegt werden. Danach können sich Benutzer mit dem Benutzernamen ftp oder anonymous am FTP-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 FTP-Server &man.chroot.2;, um den Zugriff auf das Heimatverzeichnis des Benutzers ftp zu beschränken. Es gibt zwei Textdateien, deren Inhalt den FTP-Clients bei der Anmeldung angezeigt wird. Der Inhalt von /etc/ftpwelcome wird angezeigt, bevor der Login-Prompt erscheint. Nach einer erfolgreichen Anmeldung wird der Inhalt von /etc/ftpmotd 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 ~ftp/etc/ftpmotd angezeigt. Sobald der FTP-Server konfiguriert ist, setzen Sie die entsprechende Variable in /etc/rc.conf, damit der Dienst beim Booten gestartet wird: ftpd_enable="YES" Starten Sie den Dienst: &prompt.root; service ftpd start Testen Sie die Verbindung zum FTP-Server, indem Sie folgendes eingeben: &prompt.user; ftp localhost Wartung syslog Logdateien FTP Der ftpd-Daemon verwendet &man.syslog.3;, um Protokolldateien zu erstellen. In der Voreinstellung werden alle FTP betreffenden Nachrichten nach /var/log/xferlog geschrieben. Dies lässt sich aber durch das Einfügen der folgenden Zeile in /etc/syslog.conf ändern: ftp.info /var/log/xferlog FTP anonymous Beachten Sie, dass mit dem Betrieb eines anonymen FTP-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 FTP-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. Datei- und Druckserver für µsoft.windows;-Clients (Samba) Samba-Server Microsoft Windows Dateiserver Windows-Clients Druckserver Windows-Clients Samba ist ein beliebtes Open Source-Softwarepaket, das es Ihnen ermöglicht, einen Datei- und Druckserver für µsoft.windows;-Clients einzurichten. Clients können sich dadurch mit einem &os;-System verbinden und dessen Speicherplatz oder dessen Drucker verwenden. Dies genauso, als wenn es sich um lokale Drucker oder Festplatten handeln würde. Samba sollte als Softwarepaket auf den &os;-Installationsmedien vorhanden sein. Wenn Samba noch nicht installiert ist, können Sie dies über den Port oder das Paket net/samba36 nachholen. Konfiguration Die Standardkonfigurationsdatei von Samba heißt /usr/local/share/examples/samba36/smb.conf.default. Diese Datei muss nach /usr/local/etc/smb.conf kopiert und angepasst werden, bevor Samba verwendet werden kann. Die Datei smb.conf enthält Laufzeitinformationen für Samba, beispielsweise Druckerdefinitionen oder file system shares, also Bereiche des Dateisystems, die mit &windows;-Clients geteilt werden sollen. Die Konfiguration der Datei smb.conf erfolgt webbasiert über das im Samba-Paket enthaltene Programm swat. Das Samba Web Administration Tool (SWAT) verwenden Das Samba Web Administration Tool (SWAT) wird als Daemon von inetd aktiviert. Daher müssen Sie inetd, wie in beschrieben, aktivieren und die folgende Zeile in /etc/inetd.conf entfernen, bevor Sie swat zur Konfiguration von Samba verwenden können: swat stream tcp nowait/400 root /usr/local/sbin/swat swat Wie bereits in beschrieben, müssen Sie die inetd-Konfiguration neu einlesen, nachdem Sie diese Änderung durchgeführt haben. Nachdem swat in der Datei inetd.conf aktiviert wurde, rufen Sie im Internetbrowser die Adresse http://localhost:901 auf. Bei der ersten Anmeldung muss das root-Benutzerkonto verwendet werden. Nachdem erfolgreicher Anmeldung an der Hauptkonfigurationseite von Samba steht die Systemdokumentation zur Verfügung, und durch einen Klick auf die Globals-Karteikarte kann mit der Konfiguration begonnen werden. Die Einstellungen, die Sie hier vornehmen können, entsprechen denen des Abschnitts [global] von /usr/local/etc/smb.conf. Globale Einstellungen Unabhängig davon, ob swat verwendet, oder /usr/local/etc/smb.conf direkt editiert wird, sollten zuerst folgende Richtlinien angepasst werden: workgroup Der NT-Domänenname oder der Arbeitsgruppenname der Rechner, die auf den Server Zugriff haben sollen. netbios name NetBIOS Legt den NetBIOS-Namen fest, unter dem der Samba-Server bekannt ist. In der Regel handelt es sich dabei um den ersten Teil des DNS-Namens des Servers. server string Legt die Beschreibung fest, die angezeigt werden soll, wenn mit net view oder über andere Netzwerkprogramme Informationen über den Server angefordert werden. Samba absichern Zwei der wichtigsten Einstellungen in /usr/local/etc/smb.conf betreffen das zu verwendende Sicherheitsmodell sowie das Backend-Passwortformat für die Benutzer der Samba-Clients. Folgende Optionen sind dafür verantwortlich: security Die häufigsten Optionen sind security = share und security = user. Wenn die Clients Benutzernamen verwenden, die den Benutzernamen auf dem &os;-Rechner entsprechen, dann sollten Sie die Einstellung user level verwenden. 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. In der Einstellung share level 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 Samba-Versionen war dies die Standardeinstellung. passdb backend NIS+ LDAP SQL database Samba erlaubt verschiedene Backend-Authentifizierungsmodelle. Clients können sich durch LDAP, NIS+, eine SQL-Datenbank oder eine Passwortdatei authentifizieren. In der Voreinstellung wird smbpasswd verwendet. Diese Methode wird im folgenden Abschnitt näher beschrieben. Wenn Sie smbpasswd verwenden, müssen Sie die Datei /usr/local/etc/samba/smbpasswd erzeugen, damit Samba in der Lage ist, Clients zu authentifizieren. Um den Zugriff auf &unix;-Benutzerkonten von einem &windows;-Client aus zu ermöglichen, verwenden Sie den folgenden Befehl: &prompt.root; smbpasswd -a username Als Backend wird inzwischen tdbsam empfohlen. Mit dem folgenden Befehl legen Sie neue Benutzerkonten an: &prompt.root; pdbedit -a -u username Ausführliche Informationen zur Konfiguration von Samba finden Sie im Official Samba HOWTO. Mit den hier skizzierten Grundlagen, sollten Sie in der Lage sein, Samba zu starten. Zusätzlich zu den Informationen hier, sollte weitere Dokumentation hinzugezogen werden. <application>Samba</application> starten Der Port net/samba36 legt ein neues Startskript an, mit dem Samba gesteuert (also etwa gestartet oder beendet) werden kann. Um dieses Skript zu aktivieren, fügen Sie folgende Zeile in /etc/rc.conf ein: samba_enable="YES" Alternativ können Sie auch die folgenden beiden Einträge verwenden: nmbd_enable="YES" smbd_enable="YES" Durch diese Einträge wird Samba beim Systemstart automatisch aktiviert. Danach können Sie Samba jederzeit durch folgenden Befehl starten: &prompt.root; service samba start Starting SAMBA: removing stale tdbs : Starting nmbd. Starting smbd. Weitere Informationen zu den rc-Startskripten finden Sie im des Handbuchs. Samba verwendet drei Daemonen. Beachten Sie, dass sowohl nmbd als auch smbd durch das Skript samba gestartet werden. Wurde winbind name resolution services in smb.conf aktiviert, wird zusätzlich der winbindd-Daemon gestartet. Samba kann jederzeit durch folgenden Befehl beendet werden: &prompt.root; service samba stop Samba ist ein komplexes Softwarepaket mit umfassenden Funktionen, die eine weitreichende Integration von µsoft.windows;-Netzwerken ermöglichen. Für eine Beschreibung dieser Zusatzfunktionen sollten Sie sich auf http://www.samba.org umsehen. Die Uhrzeit mit NTP synchronisieren NTP ntpd 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 Network Time Protocol (NTP) bietet die Möglichkeit, die exakte Uhrzeit in einem Netzwerk zur Verfügung zu stellen. Mit &man.ntpd.8; enthält &os; ein Werkzeug, das andere NTP-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 ISP zur Verfügung gestellt werden. Darüber hinaus gibt es eine Liste von öffentlich zugänglichen NTP-Servern. Falls Sie sich für einen solchen öffentlichen Server entscheiden, wählen Sie einen nahegelegenen Server und prüfen Sie die Nutzungsbedingungen. Die Auswahl von mehreren NTP-Servern wird empfohlen, falls sich ein Server nicht erreichbar ist oder sich als unzuverlässig herausstellt. ntpd verwendet die Antworten anderer Server, um zuverlässige Server zu bestimmen, die dann bevorzugt abgefragt werden. Dieser Abschnitt beschreibt die Konfiguration von ntpd unter &os;. Zusätzliche Dokumentation im HTML-Format finden Sie in /usr/share/doc/ntp/. <acronym>NTP</acronym> konfigurieren NTP ntp.conf &os; enthält mit ntpd ein Werkzeug, das zur Synchronisation der Uhrzeit verwendet werden kann. Um ntpd beim Booten zu aktivieren, fügen Sie den Eintrag ntpd_enable="YES" in /etc/rc.conf ein. Zusätzliche Variablen können ebenfalls in /etc/rc.conf gesetzt werden. Weitere Details finden Sie in &man.rc.conf.5; und &man.ntpd.8;. Das Programm liest /etc/ntp.conf um herauszufinden, welche NTP-Server abgefragt werden müssen. Hier ist ein einfaches Beispiel einer /etc/ntp.conf: Beispiel einer <filename>/etc/ntp.conf</filename> server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift Das Format dieser Datei wird in &man.ntp.conf.5; beschrieben. Die Option server legt die zu verwendenden Server fest, wobei jeder Server in einer eigenen Zeile steht. Wenn ein Server mit der Option prefer 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 prefer sollte nur für sehr zuverlässige und genaue NTP-Server verwendet werden, die über eine spezielle Hardware zur Zeitüberwachung verfügen. Die Option driftfile legt fest, in welcher Datei die Abweichungen der Systemuhr protokolliert werden. ntpd verwendet diese Datei, um die Systemzeit automatisch anzupassen, selbst wenn kurzzeitig kein NTP-Server zur Synchronisation verfügbar ist. Weiterhin werden in dieser Datei Informationen über frühere Anworten von NTP-Server. Da diese Datei interne Informationen für NTP enthält, sollte sie nicht verändert werden. In der Voreinstellung ist der NTP-Server für alle Rechner im Netzwerk erreichbar. Die Option restrict in /etc/ntp.conf steuert, welche Rechner auf den Server zugreifen können. Wenn Sie beispielsweise alle Rechner vom Zugriff auf den NTP-Server ausschließen wollen, fügen Sie folgende Zeile in /etc/ntp.conf ein: restrict default ignore Dieser Eintrag verhindert auch den Zugriff von anderen NTP-Servern. Besteht die Notwendigkeit, sich mit einem externen NTP-Server zu synchronisieren, muss dieser Server explizit zugelassen werden. Weitere Informationen finden Sie in &man.ntp.conf.5;. 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: restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 192.168.1.0 ist die lokale Adresse des Netzwerks, 255.255.255.0 ist die Netzmaske des Netzwerks. Es werden mehrere restict-Einträge untstützt. Weitere Details finden Sie im Abschnitt Access Control Support von &man.ntp.conf.5;. Sobald ntpd_enable="YES" in /etc/rc.conf hinzugefügt wurde, kann ntpd direkt gestartet werden: &prompt.root; service ntpd start <acronym>NTP</acronym> mit einer <acronym>PPP</acronym>-Verbindung verwenden ntpd benötigt keine ständige Internetverbindung. Wenn Sie sich über eine PPP-Verbindung ins Internet einwählen, sollten Sie verhindern, dass NTP-Verkehr eine Verbindung aufbauen oder aufrechterhalten kann. Dies kann in den filter-Direktiven von /etc/ppp/ppp.conf festgelegt werden. Ein Beispiel: 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 Weitere Informationen finden Sie im Abschnitt PACKET FILTERING von &man.ppp.8; sowie in den Beispielen unter /usr/share/examples/ppp/. 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. - - - - - - Protokollierung von anderen Hosts mit - <command>syslogd</command> - - Die Interaktion mit Systemprotokollen ist ein wichtiger Aspekt, - sowohl was Sicherheit als auch Systemadministration anbelangt. - Die Überwachung der Protokolldateien von mehreren Hosts kann - sehr unhandlich werden. Die zentralisierte Protokollierung auf - einen bestimmten Protokollserver kann manche der - administrativen Belastungen bei der Verwaltung von - Protokolldateien reduzieren. - - Die Aggregation, Zusammenführung und Rotation von - Protokolldateien kann an zentraler Stelle mit den - &os;-eigenen Werkzeugen wie &man.syslogd.8; und - &man.newsyslog.8; konfiguriert werden. In der folgenden - Beispielkonfiguration sammelt Host A, - genannt logserv.example.com, - Protokollinformationen für das lokale Netzwerk. Host - B, genannt logclient.example.com wird - seine Protokollinformationen an den Server weiterleiten. - - - Konfiguration des Protokollservers - - Ein Protokollserver ist ein System, das - konfiguriert ist, Protokollinformationen von anderen Hosts zu - akzeptieren. Bevor Sie diesen Server konfigurieren, prüfen - Sie folgendes: - - - - Falls eine Firewall zwischen dem - Protokollserver und den -Clients steht, muss das - Regelwerk der Firewall UDP auf Port 514 - sowohl auf Client- als auch auf Serverseite freigegeben - werden. - - - - Der syslogd-Server und alle - Clientrechner müssen gültige Einträge für sowohl - Vorwärts- als auch Umkehr-DNS besitzen. - Falls im Netzwerk kein DNS-Server - vorhanden ist, muss auf jedem System die Datei - /etc/hosts mit den richtigen - Einträgen gepflegt werden. Eine funktionierende - Namensauflösung ist zwingend erforderlich, ansonsten würde - der Server die Protokollnachrichten ablehnen. - - - - Bearbeiten Sie /etc/syslog.conf auf - dem Server. Tragen Sie den Namen des Clients ein, den - Verbindungsweg und den Namen der Protokolldatei. Dieses - Beispiel verwendet den Rechnernamen - B, alle Verbindungswege, und die - Protokolle werden in - /var/log/logclient.log - gespeichert. - - - Einfache Server Konfiguration - - +logclient.example.com -*.* /var/log/logclient.log - - - Fügen Sie für jeden Client zwei Zeilen hinzu, falls Sie - mehrere Clients in diese Datei aufnehmen. Weitere - Informationen über die verfügbaren Verbindungswege finden Sie - in &man.syslog.conf.5;. - - Konfigurieren Sie als nächstes - /etc/rc.conf: - - syslogd_enable="YES" -syslogd_flags="-a logclient.example.com -v -v" - - Der erste Eintrag startet syslogd - während des Bootens. Der zweite Eintrag erlaubt es, Daten - von dem spezifizierten Client auf diesem Server zu - akzeptieren. Die Verwendung von erhöht - die Anzahl von Protokollnachrichten. Dies ist hilfreich für - die Feineinstellung der Verbindungswege, da Administratoren - auf diese Weise erkennen, welche Arten von Nachrichten von - welchen Verbindungswegen protokolliert werden. - - Mehrere -Optionen können angegeben werden, - um die Protokollierung von mehreren Clients zu erlauben. - IP-Adressen und ganze Netzblöcke können - ebenfalls spezifiziert werden. Eine vollständige Liste der - Optionen finden Sie in &man.syslogd.8;. - - Zum Schluss muss die Protokolldatei erstellt - werden: - - &prompt.root; touch /var/log/logclient.log - - Zu diesem Zeitpunkt sollte syslogd neu - gestartet und überprüft werden: - - &prompt.root; service syslogd restart -&prompt.root; pgrep syslog - - Wenn eine PID zurückgegeben wird, wurde - der Server erfolgreich neu gestartet und die - Clientkonfiguration kann beginnen. Wenn der Server nicht neu - gestartet wurde, suchen Sie in - /var/log/messages nach eventuellen - Fehlermeldungen. - - - - Konfiguration des Protokollclients - - Ein Protokollclient sendet Protokollinformationen - an einen Protokollserver. Zusätzlich behält er eine - lokale Kopie seiner eigenen Protokolle. - - Sobald der Server konfiguriert ist, bearbeiten Sie - /etc/rc.conf auf dem Client: - - syslogd_enable="YES" -syslogd_flags="-s -v -v" - - Der erste Eintrag aktiviert den - syslogd-Dienst während des Systemstarts. - Der zweite Eintrag erhöht die Anzahl der Protokollnachrichten. Die Option - verhindert, dass dieser Client Protokolle von anderen - Hosts akzeptiert. - - Als nächstes muss der Protokollserver in der - /etc/syslog.conf des Clients eingetragen - werden. In diesem Beispiel wird das - @-Symbol benutzt, um sämtliche - Protokolldaten an einen bestimmten Server zu senden: - - *.* @logserv.example.com - - Nachdem die Änderungs gespeichert wurden, muss - syslogd neu gestartet werden, damit die - Änderungen wirksam werden: - - &prompt.root; service syslogd restart - - Um zu testen, ob Protokollnachrichten über das Netzwerk - gesendet werden, kann &man.logger.1; auf dem Client benutzt werden, um - eine Nachricht an syslogd zu schicken: - - &prompt.root; logger "Test message from logclient" - - Diese Nachricht sollte jetzt sowohl in - /var/log/messages auf dem Client, als auch in - /var/log/logclient.log auf dem Server vorhanden - sein. - - - - Fehlerbehebung beim Protokollserver - - Wenn der Server keine Nachrichten empfängt, ist die - Ursache wahrscheinlich ein Netzwerkproblem, ein Problem bei - der Namensauflösung oder ein Tippfehler in einer - Konfigurationsdatei. Um die Ursache zu isolieren, müssen Sie - sicherstellen, dass sich Server und Client über den in - /etc/rc.conf konfigurierten Hostnamen per - ping erreichen können. Falls dies nicht - gelingt sollten Sie die Netzwerkverkablung überprüfen, - außerdem Firewallregeln sowie die Einträge für Hosts im - DNS und /etc/hosts. - Überprüfen Sie diese Dinge auf dem Server und dem Client, bis - der ping von beiden Hosts erfolgreich - ist. - - Wenn sich die Hosts gegenseitig per - ping erreichen können, der Server aber - immer noch keine Nachrichten empfängt, können Sie - vorübergehend die Ausführlichkeit der Protokollierung erhöhen, - um die Ursache für das Problem weiter einzugrenzen. In dem - folgenden Beispiel ist auf dem Server die Datei - /var/log/logclient.log leer und in der - Datei /var/log/messages auf dem Client - ist keine Ursache für das Problem erkennbar. Um nun die - Ausführlichkeit der Protokollierung zu erhöhen, passen Sie - auf dem Server den Eintrag syslogd_flags - an. Anschließend starten Sie den Dienst neu: - - syslogd_flags="-d -a logclien.example.com -v -v" - - &prompt.root; service syslogd restart - - Informationen wie diese werden sofort nach dem Neustart - auf der Konsole erscheinen: - - logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart -syslogd: restarted -logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel -Logging to FILE /var/log/messages -syslogd: kernel boot file is /boot/kernel/kernel -cvthname(192.168.1.10) -validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; -rejected in rule 0 due to name mismatch. - - In diesem Beispiel werden die Nachrichten aufgrund eines - fehlerhaften Namens abgewiesen. Der Hostname sollte - logclient und nicht - logclien sein. Beheben Sie den Tippfehler, - starten Sie den Dienst neu und überprüfen Sie die - Ergebnisse: - - &prompt.root; service syslogd restart -logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart -syslogd: restarted -logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel -syslogd: kernel boot file is /boot/kernel/kernel -logmsg: pri 166, flags 17, from logserv.example.com, -msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2 -cvthname(192.168.1.10) -validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; -accepted in rule 0. -logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2 -Logging to FILE /var/log/logclient.log -Logging to FILE /var/log/messages - - Zu diesem Zeitpunkt werden die Nachrichten korrekt empfangen und in - die richtige Datei geschrieben. - - - - Sicherheitsbedenken - - Wie mit jedem Netzwerkdienst, müssen - Sicherheitsanforderungen in Betracht gezogen werden, bevor ein - Protokollserver eingesetzt wird. Manchmal enthalten - Protokolldateien sensitive Daten über aktivierte Dienste auf - dem lokalen Rechner, Benutzerkonten und Konfigurationsdaten. - Daten, die vom Client an den Server geschickt werden, sind - weder verschlüsselt noch mit einem Passwort geschützt. Wenn - ein Bedarf für Verschlüsselung besteht, ist es möglich - security/stunnel zu verwenden, welches die - Protokolldateien über einen verschlüsselten Tunnel - versendet. - - Lokale Sicherheit ist ebenfalls ein Thema. Protokolldateien sind - während der Verwendung oder nach ihrer Rotation nicht - verschlüsselt. Lokale Benutzer versuchen vielleicht, auf diese - Dateien zuzugreifen, um zusätzliche Einsichten in die - Systemkonfiguration zu erlangen. Es ist absolut notwendig, - die richtigen Berechtigungen auf diesen Dateien zu setzen. - Das &man.newsyslog.8;-Werkzeug unterstützt das Setzen von - Berechtigungen auf gerade erstellte oder rotierte Protokolldateien. - Protokolldateien mit Zugriffsmodus 600 sollten - verhindern, dass lokale Benutzer darin herumschnüffeln. - Zusätzliche Informationen finden Sie in - &man.newsyslog.conf.5;. iSCSI Initiator und Target Konfiguration iSCSI bietet die Möglichkeit, Speicherkapazitäten über ein Netzwerk zu teilen. Im Gegensatz zu NFS, das auf Dateisystemebene arbeitet, funktioniert iSCSI auf Blockgerätebene. In der iSCSI-Terminologie wird das System, das den Speicherplatz zur Verfügung stellt, als Target 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 ZFS formatiert ist, kann ein zvol erstellt werden, welches dann als iSCSI-Speicher verwendet werden kann. Die Clients, die auf den iSCSI-Speicher zugreifen, werden Initiator genannt. Ihnen steht der verfügbare Speicher als rohe, nicht formatierte Festplatte, die auch als LUN bezeichnet wird, zur Verfügung. Die Gerätedateien für die Festplatten erscheinen in /dev/ und müssen separat formatiert und eingehangen werden. Seit 10.0-RELEASE enthält &os; einen nativen, kernelbasierten iSCSI Target und Initiator. Dieser Abschnitt beschreibt, wie ein &os;-System als Target oder Initiator konfiguriert wird. Ein <acronym>iSCSI</acronym>-Target konfigurieren Ein natives iSCSI-Target wird seit &os; 10.0-RELEASE unterstützt. Um iSCSI mit älteren Versionen zu benutzen, installieren Sie ein Target aus der Ports-Sammlung, beispielsweise net/istgt. Dieses Kapitel beschreibt nur das native Target. Um ein iSCSI-Target zu konfigurieren, erstellen Sie die Konfigurationsdatei /etc/ctl.conf und fügen Sie eine Zeile in /etc/rc.conf hinzu, um sicherzustellen, dass &man.ctld.8; automatisch beim Booten gestartet wird. Starten Sie dann den Daemon. Das folgende Beispiel zeigt eine einfache /etc/ctl.conf. Eine vollständige Beschreibung dieser Datei und der verfügbaren Optionen finden Sie in &man.ctl.conf.5;. 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 } } Der erste Eintrag definiert die Portalgruppe pg0. Portalgruppen legen fest, auf welchen Netzwerk-Adressen der &man.ctld.8;-Daemon Verbindungen entgegennehmen wird. Der Eintrag discovery-auth-group no-authentication zeigt an, dass jeder Initiator iSCSI-Targets suchen darf, ohne sich authentifizieren zu müssen. Die dritte und vierte Zeilen konfigurieren &man.ctld.8; so, dass er auf allen IPv4- (listen 0.0.0.0) und IPv6-Adressen (listen [::]) auf dem Standard-Port 3260 lauscht. Es ist nicht zwingend notwendig eine Portalgruppe zu definieren, da es bereits eine integrierte Portalgruppe namens default gibt. In diesem Fall ist der Unterschied zwischen default und pg0 der, dass bei default eine Authentifizierung nötig ist, während bei pg0 die Suche nach Targets immer erlaubt ist. Der zweite Eintrag definiert ein einzelnes Target. Ein Target hat zwei mögliche Bedeutungen: eine Maschine die iSCSI bereitstellt, oder eine Gruppe von LUNs. Dieses Beispiel verwendet die letztere Bedeutung, wobei iqn.2012-06.com.example:target0 der Name des Targets ist. Dieser Name ist nur für Testzwecke geeignet. Für den tatsächlichen Gebrauch ändern Sie com.example auf einen echten, rückwärts geschriebenen Domainnamen. 2012-06 steht für das Jahr und den Monat, an dem die Domain erworben wurde. target0 darf einen beliebigen Wert haben und in der Konfigurationsdatei darf eine beliebige Anzahl von Targets definiert werden. Der Eintrag auth-group no-authentication erlaubt es allen Initiatoren sich mit dem angegebenen Target zu verbinden und portal-group pg0 macht das Target über die Portalgruppe pg0 erreichbar. Die nächste Sektion definiert die LUN. Jede LUN wird dem Initiator als separate Platte präsentiert. Für jedes Target können mehrere LUNs definiert werden. Jede LUN wird über eine Nummer identifiziert, wobei LUN 0 verpflichtend ist. Die Zeile mit dem Pfad path /data/target0-0 definiert den absoluten Pfad zu der Datei oder des zvols für die LUN. Der Pfad muss vorhanden sein, bevor &man.ctld.8; gestartet wird. Die zweite Zeile ist optional und gibt die Größe der LUN an. Als nächstes fügen Sie folgende Zeile in /etc/rc.conf ein, um &man.ctld.8; automatisch beim Booten zu starten: ctld_enable="YES" Um &man.ctld.8; jetzt zu starten, geben Sie dieses Kommando ein: &prompt.root; service ctld start Der &man.ctld.8;-Daemon liest beim Start /etc/ctl.conf. Wenn diese Datei nach dem Starten des Daemons bearbeitet wird, verwenden Sie folgenden Befehl, damit die Änderungen sofort wirksam werden: &prompt.root; service ctld reload Authentifizierung 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: 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 } } Die Sektion auth-group definiert die Benutzernamen und Passwörter. Um sich mit iqn.2012-06.com.example:target0 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 discovery-auth-group auf eine definierte auth-group anstelle von no-autentication. 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: target iqn.2012-06.com.example:target0 { portal-group pg0 chap username1 secretsecret lun 0 { path /data/target0-0 size 4G } } Einen <acronym>iSCSI</acronym>-Initiator konfigurieren Der in dieser Sektion beschriebene iSCSI-Initiator wird seit &os; 10.0-RELEASE unterstützt. Lesen Sie &man.iscontrol.8;, wenn Sie den iSCSI-Initiator mit älteren Versionen benutzen möchten. Um den Initiator zu verwenden, muss zunächst ein iSCSI-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 /etc/rc.conf ein: iscsid_enable="YES" Um &man.iscsid.8; jetzt zu starten, geben Sie dieses Kommando ein: &prompt.root; service iscsid start Die Verbindung mit einem Target kann mit, oder ohne eine Konfigurationsdatei /etc/iscsi.conf durchgeführt werden. Dieser Abschnitt beschreibt beide Möglichkeiten. Verbindung zu einem Target herstellen - ohne Konfigurationsdatei Um einen Initiator mit einem Target zu verbinden, geben Sie die IP-Adresse des Portals und den Namen des Ziels an: &prompt.root; iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 Um zu überprüfen, ob die Verbindung gelungen ist, rufen Sie iscsictl ohne Argumente auf. Die Ausgabe sollte in etwa wie folgt aussehen: Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0 In diesem Beispiel wurde die iSCSI-Sitzung mit der LUN /dev/da0 erfolgreich hergestellt. Wenn das Target iqn.2012-06.com.example:target0 mehr als nur eine LUN exportiert, werden mehrere Gerätedateien in der Ausgabe angezeigt: Connected: da0 da1 da2. 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: Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8) Die folgende Meldung deutet auf ein Netzwerkproblem hin, zum Beispiel eine falsche IP-Adresse oder einen falschen Port: Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.11 Connection refused Diese Meldung bedeutet, dass der Name des Targets falsch angegeben wurde: Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Not found Diese Meldung bedeutet, dass das Target eine Authentifizierung erfordert: Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Authentication failed Verwenden Sie diese Syntax, um einen CHAP-Benutzernamen und ein Passwort anzugeben: &prompt.root; iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecret Verbindung mit einem Target herstellen - mit Konfigurationsdatei Wenn Sie für die Verbindung eine Konfigurationsdatei verwenden möchten, erstellen Sie /etc/iscsi.conf mit etwa folgendem Inhalt: t0 { TargetAddress = 10.10.10.10 TargetName = iqn.2012-06.com.example:target0 AuthMethod = CHAP chapIName = user chapSecret = secretsecret } t0 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. TargetAddress und TargetName müssen angegeben werden, die restlichen sind optional. In diesen Beispiel wird der CHAP-Benuztername und das Passwort angegeben. Um sich mit einem bestimmten Target zu verbinden, geben Sie dessen Namen an: &prompt.root; iscsictl -An t0 Um sich stattdessen mit allen definierten Targets aus der Konfigurationsdatei zu verbinden, verwenden Sie: &prompt.root; iscsictl -Aa Damit sich der Initiator automatisch mit allen Targets aus /etc/iscsi.conf verbindet, fügen Sie folgendes in /etc/rc.conf hinzu: iscsictl_enable="YES" iscsictl_flags="-Aa"