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 TuningChernLeeGeschrieben von MikeSmithNach einem Tutorium von MattDillonBasiert ebenfalls auf tuning(7) von MartinHeinenÜbersetzt von ÜbersichtSystem-KonfigurationSystem-OptimierungDie 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 Siedie Grundlagen von &unix; und
&os; () verstehen.Damit vertraut sein, wie Sie einen Kernel konfigurieren
und kompilieren ().Start von DienstenTomRhodesBeigetragen von DiensteViele 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 rc.d-System
startenMit 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 startenAndere 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; konfigurierenTomRhodesBeigetragen von cronkonfigurierenEin 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.crontab installierenDie 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-dateiDas 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; verwaltenTomRhodesBeigetragen 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 restartAnalog 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 onerestartOb 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 Konfigurationrc-Dateienrc.confInformationen 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 NetzwerkkartenMarcFonvieilleBeigetragen von NetzwerkkarteneinrichtenDie Konfiguration einer Netzwerkkarte gehört zu
den alltäglichen Aufgaben eines &os; Administrators.Bestimmen des richtigen TreibersNetzwerkkartenTreiberErmitteln 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;-NDIS-Treiber
einsetzenNDISNDISulator&windows;-Treiberµsoft.windows;GerätetreiberKLD (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; KernelquellenDen &windowsxp;-Binärtreiber mit der Erweiterung
.SYSDie Konfigurationsdatei des &windowsxp;-Treibers
mit der Erweiterung .INFLaden 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.SYSDieses 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.koNeben 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_ndisDer 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 54MbpsAb 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 NetzwerkkartenNetzwerkkarteneinrichtenNachdem 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: activeDie 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.confTest und FehlersucheNachdem 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 restartFalls in /etc/rc.conf ein
Default-Gateway definiert wurde, müssen Sie auch den
folgenden Befehl ausführen:&prompt.root; service routing restartWenn das System gestartet ist, sollten Sie die
Netzwerkkarten testen.Test der Ethernet-KarteNetzwerkkartentestenUm 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 msUm 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.FehlersucheNetzwerkkartenFehlersucheFehler 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 Hostsvirtual hostsIP-AliaseEin 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 syslogd
- Servers
+ Konfiguration der SystemprotokollierungNiclasZeisingBeigetragen von system loggingsyslog&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 syslogd
-
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 syslogd
+ Konfiguration der lokalen Protokollierungsyslog.confDie 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.logFü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
- newsyslog
+ Management und Rotation von Logdateiennewsyslognewsyslog.conflog rotationlog 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 newsyslog
-
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 * JCJede 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/etc LayoutKonfigurationsdateien finden sich in einigen
Verzeichnissen unter anderem in:/etcEnthält generelle systemspezifische
Konfigurationsinformationen./etc/defaultsDefault Versionen der Konfigurationsdateien./etc/mailEnthält die &man.sendmail.8; Konfiguration
und weitere MTA
Konfigurationsdateien./etc/pppHier findet sich die Konfiguration für
die User- und Kernel-ppp Programme./etc/namedbDas Vorgabeverzeichnis, in dem Daten von
&man.named.8; gehalten werden. Normalerweise
werden hier named.conf und
Zonendaten abgelegt./usr/local/etcInstallierte 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/dbAutomatisch generierte systemspezifische
Datenbanken, wie die Paket-Datenbank oder die
&man.locate.1;-Datenbank.HostnamenhostnameDNS/etc/resolv.confresolv.confWie 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:nameserverDie IP-Adresse eines Nameservers, den
der Resolver abfragen soll. Bis zu drei Server
werden in der Reihenfolge, in der sie aufgezählt
sind, abgefragt.searchSuchliste mit Domain-Namen zum Auflösen von
Hostnamen. Die Liste wird normalerweise durch den
Domain-Teil des lokalen Hostnamens
festgelegt.domainDer lokale Domain-Name.Beispiel für eine typische
/etc/resolv.conf:search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30Nur 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./etc/hostshosts/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 foobar2Weitere Informationen entnehmen Sie bitte
&man.hosts.5;.Einstellungen mit &man.sysctl.8;sysctlEinstellungenmit sysctlMit &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 -aUm eine spezielle Variable zu lesen, geben Sie den Namen
an:&prompt.user; sysctl kern.maxproc
kern.maxproc: 1044Um eine Variable zu setzen, benutzen Sie die Syntax
Variable=
Wert:&prompt.root; sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000Mit 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 .sysctl.confsysctl.confsysctl/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=0Schreibgeschützte VariablenTomRhodesContributed 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 12Um 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 LaufwerkenDer 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 Variablenvfs.vmiodirenablevfs.vmiodirenableDie &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.vfs.write_behindvfs.write_behindIn 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.vfs.hirunningspacevfs.hirunningspaceDie &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.vm.swap_idle_enabledvm.swap_idle_enabledDie &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.hw.ata.wchw.ata.wcObwohl 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;.SCSI_DELAY
(kern.cam.scsi_delay)kern.cam.scsi_delayKerneloptionenSCSI DELAYMit 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 UpdatesSoft 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 /filesystemEin 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 UpdatesSoft UpdatesDetailsBei 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 LimitsEinstellungenvon Kernel LimitsDatei und Prozeß Limitskern.maxfileskern.maxfilesAbhä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 0Der 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
maxusersnicht
begrenzt. Der Wert dieser Variablen legt neben der
möglichen Anzahl der Prozesse eines Benutzers weitere
sinnvolle Größen für bestimmte Systemtabellen fest.kern.ipc.somaxconnkern.ipc.somaxconnDie &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 LimitsDie 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.net.inet.ip.portrange.*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.TCP Bandwidth Delay Product
BegrenzungTCP Bandwidth Delay Product
Begrenzungnet.inet.tcp.inflight.enableDie 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 (Virtual
Memory)kern.maxvnodesEin 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: 91349Die maximal mögliche Anzahl der vnodes erhalten
Sie durch die Eingabe von:&prompt.root; sysctl kern.maxvnodes
kern.maxvnodes: 100000Wenn 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-BereichenManchmal 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
FestplatteDas 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/ada1s1bSie 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 0Die einzelnen Einträge von /etc/fstab
werden in &man.fstab.5; erläutert.Swap-Bereiche über NFSSwap-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-DateienSie 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-DateiDer 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 mdInformationen, 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=64Setzen Sie die richtigen Berechtigungen für
/usr/swap0:&prompt.root; chmod 0600 /usr/swap0Aktivieren 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/md0Energie- und RessourcenverwaltungHitenPandyaVerfasst von TomRhodesEs 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?ACPIAPMAdvanced 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 ManagementsDas 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 ACPIDas 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 -pVerschiedene Optionen können als
&man.sysctl.8;-Variablen gesetzt werden. Lesen Sie dazu
&man.acpi.4; sowie &man.acpiconf.8;.ACPI-FehlersucheNateLawsonVerfasst von PeterSchultzMit Beiträgen von TomRhodesACPIProbleme mitACPI 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 einreichenBevor 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.aslSetzen 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.ACPI-GrundlagenACPIACPI 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 ProblemeACPIProbleme mitDamit 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.MausproblemeEs 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/ResumeACPI 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: 0Diese 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 3Dieser 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ängerDie 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-SturmAnhand 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
CtrlAltEsc in den Debugger DDB
zu gelangen. Geben Sie dort den Befehl
show interrupts ein.APICdeaktivierenWenn 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 wiederSetzen Sie zuerst
in
/boot/loader.conf0. 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 ProblemeWenn 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.ASL, &man.acpidump.8; und
IASLACPIASLEinige 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_FOUNDOft 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.aslDie ASL reparierenACPIASLEs 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.ACPIFehlermeldungenDie nachfolgende Liste enthält häufige
Fehlermeldungen, deren Ursache und eine Beschreibung,
wie die Fehler korrigiert werden:Abhängigkeiten vom BetriebssystemEinige 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-AnweisungenEinige 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
AMLNachdem Sie Ihre ASL in der
Datei ihre.asl angepasst haben,
übersetzen Sie die ASL wie folgt:&prompt.root; iasl ihre.aslDie 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.ACPI-Meldungen zur
Fehlersuche erzeugenACPIProbleme mitACPIFehlersucheDer 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=1Installieren 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-InformationsquellenWeitere 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ÜbersichtDieses 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 SieDen 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.NetzwerkterminologieInstallation zusätzlicher Software von Drittanbietern
().Der inetdSuper-ServerDer &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.KonfigurationsdateiDie 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 startSobald inetd gestartet ist,
muss der Dienst benachrichtigt werden, wenn eine Änderung in
/etc/inetd.conf gemacht wird:Die Konfigurationsdatei von
inetd neu einlesen&prompt.root; service inetd reloadNormalerweise 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 -lDie 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-argumentsservice-nameDer 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-typeEntweder stream,
dgram, raw, oder
seqpacket. Nutzen Sie
stream für
TCP-Verbindungen und
dgram für
UDP-Dienste.protocolBenutzen Sie eines der folgenden Protokolle:ProtokollBedeutungtcp oder tcp4TCP (IPv4)udp oder udp4UDP (IPv4)tcp6TCP (IPv6)udp6UDP (IPv6)tcp46TCP sowohl unter IPv4 als auch unter IPv6udp46UDP 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 -suserDer Benutzername, unter dem der jeweilige Daemon
laufen soll. Meistens laufen Daemonen als
root,
daemon oder
nobody.server-programDer vollständige Pfad des Daemons.
Wird der Daemon von inetd
intern bereitgestellt, verwenden Sie
.server-program-argumentsDieser 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
.KommandozeilenoptionenWie 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 maximumLegt 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 rateLegt 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 rateLegt 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 maximumLegt 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
+ SicherheitsbedenkenViele 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 (NFS)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:NFSServerDateiserverUnix-ClientsrpcbindmountdnfsdDaemonBeschreibungnfsdDer NFS-Daemon. Er bearbeitet
Anfragen der NFS-Clients.mountdDer 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.NFS einrichtenNFSeinrichtenNFS 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;.NFSExport von DateisystemenDie 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 alphabravocharlieDie 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.4Die 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.orgDamit 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 clientDas 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 clientDie 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 -roWenn 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 reloadLesen 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 startAuf dem NFS-Client:&prompt.root; service nfsclient restartDer 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:NFSDateisysteme einhängen&prompt.root; mount server:/home /mntDie 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 (Locking)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 startWenn 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 AnwendungenNFS ist in vielen Situationen
nützlich. Einige Anwendungsbereiche finden Sie in der
folgenden Liste:NFSAnwendungsbeispieleMehrere 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.amdamdAutomatic 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
amd in den Verzeichnisbaum
einhängenshowmount -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/usrDie 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 startIndividuelle 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 (NIS)NISSolarisHP-UXAIXLinuxNetBSDOpenBSDyellow pagesNISDas 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.NISDomänenBei 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.NIS-Begriffe und -ProzesseTabelle 30.1 fasst die Begriffe und Anwenderprozesse
zusammen, die von NIS verwendet
werden:rpcbind
NIS BegriffeBegriffBeschreibungNIS-DomänennameNIS-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-RechnernNISMasterserverNISSlaveserverNISClientNIS-MasterserverDieser 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-SlaveserverNIS-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-ClientsNIS-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.PlanungDieser 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:RechnernameIP-AdresseRechneraufgabeellington10.0.0.2NIS-Mastercoltrane10.0.0.3NIS-Slavebasie10.0.0.4Workstation der Fakultätbird10.0.0.5Clientrechnercli[1-11]10.0.0.[6-17]Verschiedene andere ClientsWenn 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 NIS-Domänennamen
wählenNISDomänennameWenn 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 ServerBei 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 NIS-Masterserver
konfigurierenDie 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.NISServerkonfigurationAbhä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 startDie NIS-Maps
initialisierenNISmapsNIS-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.passwdEs 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ügenJedes 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-domainStatt pw useradd jsmith kann
auch adduser jsmith verwendet
werden.Einen NIS-Slaveserver
einrichtenNISSlaveserverUm 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.byuidDiese 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 NIS-Client einrichtenEin 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.
ypbindpingt 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.NISClient konfigurierenEinen &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 startDanach sollte bei der Eingabe von
ypcat passwd auf dem Client die
passwd-Map des
NIS-Servers angezeigt werden.Sicherheit unter NISDa 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.0Wenn &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-WrapperDie 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 hindernIn 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 verwendenNetzgruppenBestimmten 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 BenutzerBenutzername(n)Beschreibungalpha,
betaMitarbeiter der IT-Abteilungcharlie,
deltaLehrlinge der IT-Abteilungecho,
foxtrott,
golf, ...Mitarbeiterable,
baker, ...Praktikanten
Zusätzliche RechnerRechnername(n)Beschreibungwar, death,
famine, pollutionNur Mitarbeiter der IT-Abteilung dürfen sich an
diesen Rechnern anmelden.pride, greed,
envy, wrath,
lust, slothNur Mitarbeiter und Lehrlinge der IT-Abteilung
dürfen sich auf diesen Rechnern anmelden.one, two,
three, four, ...Gewöhnliche Arbeitsrechner für
Mitarbeiter.trashcanEin 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;.NetzgruppenNetzgruppennamen 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 BIGGRP3Wiederholen 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; makeDadurch 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.byuserDie 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/nologinDiese 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/nologinDie entsprechenden Zeilen für Arbeitsplätze lauten:+@IT_EMP:::::::::
+@USERS:::::::::
+:::::::::/sbin/nologinNIS 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 USERSDiese 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/nologinSobald 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.PasswortformateNISPasswortformateAlle 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.confDas 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
(LDAP)LDAPDas 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.LDAP Terminologie und StrukturDa 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:1Obwohl 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
LDAP-ServersLDAP ServerUm &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/privateKopieren Sie die Konfigurationsdatei der Datenbank:&prompt.root; cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIGIm 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.crtDiese 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.csrStellen 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 -CAcreateserialDer 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.keyAchten 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.crtEditieren 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:+SSLv3Setzen 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:+SSLv3Anschließ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.confDieser 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_v2Das 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 startWurde 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: 1Wenn 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: ManagerZur 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 -1Angenommen 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.ldifEs 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: 2Es 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
(DHCP)Dynamic Host Configuration ProtocolDHCPInternet 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 DHCP-Client
konfigurierenDie 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.UDPdhclient 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.DHCPKonfigurationsdateienDer DHCP-Client verwendet die folgenden
Dateien:/etc/dhclient.confDie 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/dhclientWeitere Informationen über dieses Kommando
finden Sie in &man.dhclient.8;./sbin/dhclient-scriptDas &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.interfaceDer 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 DHCP-Server installieren und
einrichtenDieser 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.DHCPServerDHCPinstallierenDer 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.DHCPdhcpd.confDiese 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 startKünftige Änderungen an der Konfiguration des Servers
erfordern, dass der Dienst dhcpd gestoppt
und anschließend mit &man.service.8; gestartet wird.DHCPKonfigurationsdateien/usr/local/sbin/dhcpdWeitere Informationen zu
dhcpd finden Sie in
&man.dhcpd.8;./usr/local/etc/dhcpd.confDie 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.leasesDer 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/dhcrelayDieser 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 (DNS)BINDDNS 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.DNSIm 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:ResolverReverse-DNSRoot-Zone
DNS-BegriffeBegriffBedeutungForward-DNSRechnernamen in IP-Adressen
umwandeln.Origin (Ursprung)Die in einer bestimmten Zonendatei beschriebene
Domäne.named, BINDGebräuchliche Namen für das unter &os;
verwendete BIND-Nameserverpaket.ResolverEin Systemprozess, durch den ein Rechner
Zoneninformationen von einem Nameserver anfordert.Reverse-DNSdie Umwandlung von IP-Adressen in
RechnernamenRoot-ZoneDer 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.ZoneEine individuelle Domäne, Unterdomäne,
oder ein Teil von DNS, der von der
gleichen Autorität verwaltet wird.
ZonenBeispieleEs 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
NameserversEs gibt zwei Arten von Nameservern: Autoritative Nameserver
sowie zwischenspeichernde (cachende, auch bekannt als
auflösende) Nameserver.Ein autoritativer Nameserver ist notwendig, wennSie 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, weilein 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 DNS?Unter &os; wird der BIND-Daemon als
named bezeichnet.DateiBeschreibungnamedDer BIND-Daemon.&man.rndc.8;Das Steuerprogramm für
named./etc/namedbDas Verzeichnis, in dem sich die Zoneninformationen
für BIND befinden./etc/namedb/named.confDie 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 startenBINDStartDa 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 onestartUm 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
.KonfigurationsdateienBINDKonfigurationsdateienDie 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./etc/namedb/named.conf// $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.ZonendateienBINDZonendateiDie 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 valueDNSEinträgeDie am häufigsten verwendeten
DNS-Einträge sind:SOAStart der ZonenautoritätNSEin autoritativer NameserverAEine RechneradresseCNAMEDer kanonische Name eines AliasMXMail ExchangerPTREin (bei Reverse-DNS verwendeter) Domain Name
Pointerexample.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 TTLexample.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).2006051501Die 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.5Der 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.1Diese 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) NameserverBINDZwischenspeichernde NameserverEin cachender Nameserver hat primär die Aufgabe,
rekursive Abfragen aufzulösen. Er stellt lediglich
eigene Anfragen und speichert deren Ergebnisse ab.DNSSECBINDDNS security extensionsDomain 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 DNS-Server KonfigurationDie 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.dnskeywird 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 = 34525Seien 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.dsDiese 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 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5Der 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 DNS-Server
KonfigurationUm 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.comein und um den ZSK zu erzeugen, setzen
Sie folgenden Befehl ab:&prompt.user; dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.comdnssec-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.privateFü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 ; ZSKSchliesslich 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.keyDer 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 BIND 9.7 oder
höherBeginnend 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.SicherheitObwohl 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 InformationsquellenHilfeseiten 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 BINDOffizielles Forum zu
ISC- BINDO'Reilly
DNS and BIND 5th EditionRoot
DNSSEC
DNSSEC Vertrauensanker-Publikation für
die Root-ZoneRFC1034
- Domain Names - Concepts and FacilitiesRFC1035
- Domain Names - Implementation and
SpecificationRFC4033
- DNS Security Introduction and RequirementsRFC4034
- Resource Records for the DNS Security
ExtensionsRFC4035
- Protocol Modifications for the DNS Security ExtensionsRFC4641
- DNSSEC Operational PracticesRFC 5011
- Automated Updates of DNS Security (DNSSEC)
Trust AnchorsDer Apache HTTP-ServerWebserverkonfigurierenApacheDer 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 startenApacheKonfigurationsdateiDer 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.addressDie E-Mail-Adresse, an die Mitteilungen über
Serverprobleme geschickt werden. Diese Adresse
erscheint auf vom Server erzeugten Seiten, beispielsweise
auf Fehlerseiten.ServerName www.example.comErlaubt 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.ApacheStarten oder BeendenDer 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 configtestEs 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 startSie 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 HostingDer 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-ModuleApacheModuleEs 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.mod_sslWebserverVerschlüsselungSSLVerschlüsselungDas 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.SkriptsprachenFü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 WebseitenWebserverdynamischIn 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.DjangoPythonDjangoBei 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 Apache2,
mod_python3, und
PostgreSQL installieren&prompt.root; cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQLNachdem 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_pythonSie 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 RailsRuby on RailsBei 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 cleanmod_perl2mod_perl2PerlDie 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.mod_phpmod_phpPHPBei 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 configIn 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_php5mod_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.soAddModule 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 gracefulBei 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 gracefulAb nun wird MySQL von
PHP unterstützt.File Transfer Protocol (FTP)FTP-ServerDas 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.KonfigurationDer 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.FTPanonymousUm 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 startTesten Sie die Verbindung zum
FTP-Server, indem Sie folgendes
eingeben:&prompt.user; ftp localhostWartungsyslogLogdateienFTPDer 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/xferlogFTPanonymousBeachten 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-ServerMicrosoft WindowsDateiserverWindows-ClientsDruckserverWindows-ClientsSamba 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.KonfigurationDie 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) verwendenDas
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 swatWie 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 EinstellungenUnabhängig davon, ob
swat verwendet, oder
/usr/local/etc/smb.conf direkt
editiert wird, sollten zuerst folgende Richtlinien
angepasst werden:workgroupDer NT-Domänenname oder der Arbeitsgruppenname der
Rechner, die auf den Server Zugriff haben sollen.netbios nameNetBIOSLegt 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 stringLegt die Beschreibung fest, die angezeigt werden
soll, wenn mit net view oder
über andere Netzwerkprogramme Informationen
über den Server angefordert werden.Samba absichernZwei 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:securityDie 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 backendNIS+LDAPSQL databaseSamba 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 usernameAls Backend wird inzwischen tdbsam
empfohlen. Mit dem folgenden Befehl legen Sie neue
Benutzerkonten an:&prompt.root; pdbedit -a -u usernameAusfü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.Samba startenDer 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 stopSamba 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 synchronisierenNTPntpdDie 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/.NTP konfigurierenNTPntp.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
/etc/ntp.confserver ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net
driftfile /var/db/ntp.driftDas 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 ignoreDieser 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 notrap192.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 startNTP mit einer
PPP-Verbindung verwendenntpd 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/0Weitere 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
- syslogd
-
- 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 KonfigurationiSCSI 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 iSCSI-Target konfigurierenEin 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 startDer &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 reloadAuthentifizierungDie 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 iSCSI-Initiator
konfigurierenDer 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 startDie 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
KonfigurationsdateiUm 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:target0Um 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: da0In 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 refusedDiese 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 foundDiese Meldung bedeutet, dass das Target eine
Authentifizierung erfordert:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Authentication failedVerwenden 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 secretsecretVerbindung mit einem Target herstellen - mit
KonfigurationsdateiWenn 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 t0Um sich stattdessen mit allen definierten Targets aus
der Konfigurationsdatei zu verbinden, verwenden Sie:&prompt.root; iscsictl -AaDamit 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"