                                FreeBSD Handbuch

  The FreeBSD German Documentation Project

   Version: 51651

   Copyright (c) 1995-2016 The FreeBSD German Documentation Project

   Redistribution and use in source (SGML DocBook) and 'compiled' forms
   (SGML, HTML, PDF, PostScript, RTF and so forth) with or without
   modification, are permitted provided that the following conditions are
   met:

    1. Redistributions of source code (SGML DocBook) must retain the above
       copyright notice, this list of conditions and the following disclaimer
       as the first lines of this file unmodified.

    2. Redistributions in compiled form (transformed to other DTDs, converted
       to PDF, PostScript, RTF and other formats) must reproduce the above
       copyright notice, this list of conditions and the following disclaimer
       in the documentation and/or other materials provided with the
       distribution.

  Wichtig:

   THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS
   IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION
   PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

   FreeBSD ist ein eingetragenes Warenzeichen der FreeBSD Foundation.

   3Com und HomeConnect sind eingetragene Warenzeichen der 3Com Corporation.

   3ware und Escalade sind eingetragene Warenzeichen von 3ware Inc.

   ARM ist ein eingetragenes Warenzeichen von ARM Limited.

   Adaptec ist ein eingetragenes Warenzeichen von Adaptec, Inc.

   Adobe, Acrobat, Acrobat Reader und PostScript sind entweder eingetragene
   Warenzeichen oder Warenzeichen von Adobe Systems Incorporated in den
   Vereinigten Staaten und/oder in anderen La:ndern.

   Apple, FireWire, Mac, Macintosh, Mac OS, Quicktime und TrueType sind
   eingetragene Warenzeichen von Apple Computer, Inc., in den Vereinigten
   Staaten und anderen La:ndern.

   Corel und WordPerfect sind Warenzeichen oder eingetragene Warenzeichen der
   Corel Corporation und/oder ihren Gesellschaften in den Vereinigten Staaten
   und/oder anderen La:ndern.

   Android is a trademark of Google Inc.

   Heidelberg, Helvetica, Palatino und Times Roman sind Marken der
   Heidelberger Druckmaschinen AG in Deutschland und anderen La:ndern.

   IBM, AIX, OS/2, PowerPC, PS/2, S/390 und ThinkPad sind Warenzeichen der
   International Business Machines Corporation in den Vereinigten Staaten,
   anderen La:ndern oder beiden.

   IEEE, POSIX und 802 sind eingetragene Warenzeichen vom Institute of
   Electrical and Electronics Engineers, Inc. in den Vereinigten Staaten.

   Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium und Xeon sind
   Warenzeichen oder eingetragene Warenzeichen der Intel Corporation oder
   ihrer Gesellschaften in den Vereinigten Staaten und in anderen La:ndern.

   Intuit und Quicken sind eingetragene Warenzeichen und/oder
   Dienstleistungsmarken von Intuit Inc. oder einer ihrer Geselllschaften in
   den Vereinigten Staaten und in anderen La:ndern.

   Linux ist ein eingetragenes Warenzeichen von Linus Torvalds.

   LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID und Mylex sind Warenzeichen
   oder eingetragene Warenzeichen der LSI Logic Corp.

   Microsoft, MS-DOS, Outlook, Windows, Windows Media und Windows NT sind
   entweder eingetragene Warenzeichen oder Warenzeichen der Microsoft
   Corporation in den Vereinigten Staaten und/oder in anderen La:ndern.

   Motif, OSF/1 und UNIX sind eingetragene Warenzeichen und IT DialTone und
   The Open Group sind Warenzeichen der The Open Group in den Vereinigten
   Staaten und in anderen La:ndern.

   Oracle ist ein eingetragenes Warenzeichen der Oracle Corporation.

   PowerQuest und PartitionMagic sind eingetragene Warenzeichender PowerQuest
   Corporation in den Vereinigten Staaten und/oder anderen La:ndern.

   RealNetworks, RealPlayer und RealAudio sind eingetragene Warenzeichen von
   RealNetworks, Inc.

   Red Hat, RPM, sind Warenzeichen oder eingetragene Warenzeichen von Red
   Hat, Inc. in den Vereinigten Staaten und in anderen La:ndern.

   Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JSP, JVM, Netra,
   Solaris, StarOffice und SunOS sind Warenzeichen oder eingetragene
   Warenzeichen von Sun Microsystems, Inc. in den Vereinigten Staaten und in
   anderen La:ndern.

   Symantec und Ghost sind eingetragene Warenzeichen der Symantec Corporation
   in den Vereinigten Staaten und in anderen La:ndern.

   MATLAB ist ein eingetragenes Warenzeichen von The MathWorks, Inc.

   SpeedTouch ist ein Warenzeichen von Thomson

   VMware ist ein Warenzeichen von VMware, Inc

   Mathematica ist ein eingetragenes Warenzeichen von Wolfram Research, Inc.

   XFree86 ist ein Warenzeichen von The XFree86 Project, Inc.

   Ogg Vorbis und Xiph.Org sind Warenzeichen von Xiph.Org.

   Viele Produktbezeichnungen von Herstellern und Verka:ufern sind
   Warenzeichen. Soweit dem FreeBSD Project das Warenzeichen bekannt ist,
   werden die in diesem Dokument vorkommenden Bezeichnungen mit dem Symbol
   "(TM)" oder dem Symbol "(R)" gekennzeichnet.

   Zuletzt bearbeitet am 2018-05-13 19:51:01 von bhd.
   Zusammenfassung

   Willkommen bei FreeBSD! Dieses Handbuch beschreibt die Installation und
   den ta:glichen Umgang mit FreeBSD 11.1-RELEASE und FreeBSD 11.0-RELEASE
   und FreeBSD 10.4-RELEASE. Das Handbuch ist das Ergebnis einer
   fortlaufenden Arbeit vieler Einzelpersonen. Dies kann dazu fu:hren, dass
   einige Abschnitte nicht aktuell sind. Bei Unklarheiten empfiehlt es sich
   daher stets, die englische Originalversion des Handbuchs zu lesen.

   Wenn Sie bei der U:bersetzung des Handbuchs mithelfen mo:chten, senden Sie
   bitte eine E-Mail an die Mailingliste 'FreeBSD German Documentation
   Project' <de-bsd-translators@de.FreeBSD.org>.

   Die aktuelle Version des Handbuchs ist immer auf dem FreeBSD-Webserver
   verfu:gbar und kann in verschiedenen Formaten und in komprimierter Form
   vom FreeBSD FTP-Server oder einem der vielen Spiegel herunter geladen
   werden (a:ltere Versionen finden Sie hingegen unter
   https://docs.FreeBSD.org/doc/). Vielleicht mo:chten Sie das Handbuch aber
   auch durchsuchen.

   [ einzelne Abschnitte / komplettes Dokument ]

     ----------------------------------------------------------------------

   Inhaltsverzeichnis

   Vorwort

   I. Erste Schritte

                1. Einleitung

                             1.1. U:berblick

                             1.2. Willkommen zu FreeBSD

                             1.3. U:ber das FreeBSD Projekt

                2. FreeBSD installieren

                             2.1. U:bersicht

                             2.2. Minimale Hardwareanforderungen

                             2.3. Vor der Installation

                             2.4. Die Installation starten

                             2.5. Verwendung von bsdinstall

                             2.6. Plattenplatz bereitstellen

                             2.7. Die Installation festschreiben

                             2.8. Arbeiten nach der Installation

                             2.9. Fehlerbehebung

                             2.10. Verwendung der Live-CD

                3. Grundlagen des UNIX Betriebssystems

                             3.1. U:bersicht

                             3.2. Virtuelle Konsolen und Terminals

                             3.3. Benutzer und grundlegende
                             Account-Verwaltung

                             3.4. Zugriffsrechte

                             3.5. Verzeichnis-Strukturen

                             3.6. Festplatten, Slices und Partitionen

                             3.7. Anha:ngen und Abha:ngen von Dateisystemen

                             3.8. Prozesse und Da:monen

                             3.9. Shells

                             3.10. Text-Editoren

                             3.11. Gera:te und Gera:tedateien

                             3.12. Manualpages

                4. Installieren von Anwendungen: Pakete und Ports

                             4.1. U:bersicht

                             4.2. Installation von Software

                             4.3. Suchen einer Anwendung

                             4.4. Benutzen von pkg zur Verwaltung von
                             Bina:rpaketen

                             4.5. Benutzen der Ports-Sammlung

                             4.6. Pakete mit Poudriere bauen

                             4.7. Nach der Installation

                             4.8. Kaputte Ports

                5. Das X-Window-System

                             5.1. U:bersicht

                             5.2. Terminologie

                             5.3. Xorg installieren

                             5.4. Xorg konfigurieren

                             5.5. Schriftarten in Xorg benutzen

                             5.6. Der X-Display-Manager

                             5.7. Grafische Oberfla:chen

                             5.8. Compiz Fusion installieren

                             5.9. Fehlersuche

   II. Oft benutzte Funktionen

                6. Desktop-Anwendungen

                             6.1. U:bersicht

                             6.2. Browser

                             6.3. Bu:roanwendungen

                             6.4. Anzeigen von Dokumenten

                             6.5. Finanzsoftware

                7. Multimedia

                             7.1. U:bersicht

                             7.2. Soundkarten einrichten

                             7.3. MP3-Audio

                             7.4. Videos wiedergeben

                             7.5. TV-Karten

                             7.6. MythTV

                             7.7. Scanner

                8. Konfiguration des FreeBSD-Kernels

                             8.1. U:bersicht

                             8.2. Wieso einen eigenen Kernel bauen?

                             8.3. Informationen u:ber die vorhandene Hardware
                             beschaffen

                             8.4. Die Kernelkonfigurationsdatei

                             8.5. Einen angepassten Kernel bauen und
                             installieren

                             8.6. Wenn etwas schiefgeht

                9. Drucken

                             9.1. Schnellstart

                             9.2. Druckerverbindungen

                             9.3. Gebra:uchliche Seitenbeschreibungssprachen

                             9.4. Direktes Drucken

                             9.5. LPD (Line Printer Daemon)

                             9.6. Andere Drucksysteme

                10. Linux(R)-Bina:rkompatibilita:t

                             10.1. U:bersicht

                             10.2. Konfiguration der
                             Linux(R)-Bina:rkompatibilita:t

                             10.3. Weiterfu:hrende Themen

   III. Systemadministration

                11. Konfiguration und Tuning

                             11.1. U:bersicht

                             11.2. Start von Diensten

                             11.3. cron(8) konfigurieren

                             11.4. Dienste unter FreeBSD verwalten

                             11.5. Einrichten von Netzwerkkarten

                             11.6. Virtual Hosts

                             11.7. Konfiguration der Systemprotokollierung

                             11.8. Konfigurationsdateien

                             11.9. Einstellungen mit sysctl(8)

                             11.10. Tuning von Laufwerken

                             11.11. Einstellungen von Kernel Limits

                             11.12. Hinzufu:gen von Swap-Bereichen

                             11.13. Energie- und Ressourcenverwaltung

                12. FreeBSDs Bootvorgang

                             12.1. U:bersicht

                             12.2. FreeBSDs Bootvorgang

                             12.3. Willkommensbildschirme wa:hrend des
                             Bootvorgangs konfigurieren

                             12.4. Konfiguration von Gera:ten

                             12.5. Der Shutdown-Vorgang

                13. Sicherheit

                             13.1. U:bersicht

                             13.2. Einfu:hrung

                             13.3. Einmalpasswo:rter

                             13.4. TCP Wrapper

                             13.5. Kerberos

                             13.6. OpenSSL

                             13.7. VPN mit IPsec

                             13.8. OpenSSH

                             13.9. Zugriffskontrolllisten fu:r Dateisysteme
                             (ACL)

                             13.10. Sicherheitsprobleme in Software von
                             Drittanbietern u:berwachen

                             13.11. FreeBSD Sicherheitshinweise

                             13.12. Prozess-U:berwachung

                             13.13. Einschra:nkung von Ressourcen

                             13.14. Gemeinsame Administration mit Sudo

                14. Jails

                             14.1. U:bersicht

                             14.2. Jails - Definitionen

                             14.3. Einrichtung und Verwaltung von Jails

                             14.4. Feinabstimmung und Administration

                             14.5. Mehrere Jails aktualisieren

                             14.6. Verwaltung von Jails mit ezjail

                15. Verbindliche Zugriffskontrolle

                             15.1. U:bersicht

                             15.2. Schlu:sselbegriffe

                             15.3. Erla:uterung

                             15.4. MAC Labels verstehen

                             15.5. Planung eines Sicherheitsmodells

                             15.6. Modulkonfiguration

                             15.7. Das MAC Modul seeotheruids

                             15.8. Das MAC Modul bsdextended

                             15.9. Das MAC Modul ifoff

                             15.10. Das MAC Modul portacl

                             15.11. Das MAC Modul partition

                             15.12. Das MAC Modul Multi-Level Security

                             15.13. Das MAC Modul Biba

                             15.14. Das MAC Modul LOMAC

                             15.15. Beispiel 1: Nagios in einer MAC Jail

                             15.16. Beispiel 2: User Lock Down

                             15.17. Fehler im MAC beheben

                16. Security Event Auditing

                             16.1. Einleitung

                             16.2. Schlu:sselbegriffe

                             16.3. Audit Konfiguration

                             16.4. Audit-Trails

                17. Speichermedien

                             17.1. U:bersicht

                             17.2. Hinzufu:gen von Laufwerken

                             17.3. Partitionen vergro:ssern

                             17.4. USB Speichermedien

                             17.5. Erstellen und Verwenden von CDs

                             17.6. DVDs benutzen

                             17.7. Disketten benutzen

                             17.8. Datensicherung

                             17.9. Speicherbasierte Laufwerke

                             17.10. Schnappschu:sse von Dateisystemen

                             17.11. Disk Quotas

                             17.12. Partitionen verschlu:sseln

                             17.13. Den Auslagerungsspeicher verschlu:sseln

                             17.14. Highly Available Storage (HAST)

                18. GEOM: Modulares Framework zur Plattentransformation

                             18.1. U:bersicht

                             18.2. RAID0 - Striping

                             18.3. RAID1 - Spiegelung

                             18.4. RAID3 - Byte-Level Striping mit
                             dedizierter Parita:t

                             18.5. Software RAID

                             18.6. GEOM Gate Netzwerk

                             18.7. Das Labeln von Laufwerken

                             18.8. UFS Journaling in GEOM

                19. Das Z-Dateisystem (ZFS)

                             19.1. Was ZFS anders macht

                             19.2. Schnellstartanleitung

                             19.3. zpool Administration

                             19.4. zfs Administration

                             19.5. Delegierbare Administration

                             19.6. Themen fu:r Fortgeschrittene

                             19.7. Zusa:tzliche Informationen

                             19.8. ZFS-Eigenschaften und Terminologie

                20. Dateisystemunterstu:tzung

                             20.1. U:bersicht

                             20.2. Linux(R) Dateisysteme

                21. Virtualisierung

                             21.1. U:bersicht

                             21.2. FreeBSD als Gast-Betriebssystem unter
                             Parallels fu:r Mac OS(R) X

                             21.3. FreeBSD als Gast-Betriebssystem unter
                             Virtual PC fu:r Windows(R)

                             21.4. FreeBSD als Gast-Betriebssystem unter
                             VMware Fusion fu:r Mac OS(R)

                             21.5. VirtualBox(TM) Gasterweiterungen auf einem
                             FreeBSD Gast

                             21.6. FreeBSD als Host mit Virtualbox

                             21.7. FreeBSD als Host mit bhyve

                             21.8. FreeBSD als Xen(TM)-Host

                22. Lokalisierung - I18N/L10N einrichten und benutzen

                             22.1. U:bersicht

                             22.2. Lokale Anpassungen benutzen

                             22.3. I18N-Programme

                             22.4. Lokalisierung fu:r einzelne Sprachen

                23. FreeBSD aktualisieren

                             23.1. U:bersicht

                             23.2. FreeBSD-Update

                             23.3. Aktualisieren der Dokumentationssammlung

                             23.4. Einem Entwicklungszweig folgen

                             23.5. FreeBSD aus den Quellen aktualisieren

                             23.6. Installation mehrerer Maschinen

                24. DTrace

                             24.1. U:berblick

                             24.2. Unterschiede in der Implementierung

                             24.3. Die DTrace Unterstu:tzung aktivieren

                             24.4. DTrace verwenden

   IV. Netzwerke

                25. Serielle Datenu:bertragung

                             25.1. U:bersicht

                             25.2. Begriffe und Hardware

                             25.3. Terminals

                             25.4. Einwa:hlverbindungen

                             25.5. Verbindungen nach Aussen

                             25.6. Einrichten der seriellen Konsole

                26. PPP

                             26.1. U:bersicht

                             26.2. PPP konfigurieren

                             26.3. Probleme bei PPP-Verbindungen

                             26.4. PPP over Ethernet (PPPoE)

                             26.5. PPP over ATM (PPPoA)

                27. Elektronische Post (E-Mail)

                             27.1. Terminologie

                             27.2. U:bersicht

                             27.3. E-Mail Komponenten

                             27.4. Sendmail-Konfigurationsdateien

                             27.5. Wechseln des Mailu:bertragungs-Agenten

                             27.6. Fehlerbehebung

                             27.7. Weiterfu:hrende Themen

                             27.8. Ausgehende E-Mail u:ber einen Relay
                             versenden

                             27.9. E-Mail u:ber Einwahl-Verbindungen

                             27.10. SMTP-Authentifizierung

                             27.11. E-Mail-Programme

                             27.12. E-Mails mit fetchmail abholen

                             27.13. E-Mails mit procmail filtern

                28. Netzwerkserver

                             28.1. U:bersicht

                             28.2. Der inetd "Super-Server"

                             28.3. Network File System (NFS)

                             28.4. Network Information System (NIS)

                             28.5. Lightweight Access Directory Protocol
                             (LDAP)

                             28.6. Dynamic Host Configuration Protocol (DHCP)

                             28.7. Domain Name System (DNS)

                             28.8. Apache HTTP-Server

                             28.9. File Transfer Protocol (FTP)

                             28.10. Datei- und Druckserver fu:r
                             Microsoft(R) Windows(R)-Clients (Samba)

                             28.11. Die Uhrzeit mit NTP synchronisieren

                             28.12. iSCSI Initiator und Target Konfiguration

                29. Firewalls

                             29.1. Einfu:hrung

                             29.2. Firewallkonzepte

                             29.3. PF

                             29.4. IPFW

                             29.5. IPFILTER (IPF)

                30. Weiterfu:hrende Netzwerkthemen

                             30.1. U:bersicht

                             30.2. Gateways und Routen

                             30.3. Drahtlose Netzwerke

                             30.4. USB Tethering

                             30.5. Bluetooth

                             30.6. LAN-Kopplung mit einer Bridge

                             30.7. Link-Aggregation und Failover

                             30.8. Plattenloser Betrieb mit PXE

                             30.9. IPv6

                             30.10. Common Address Redundancy Protocol (CARP)

                             30.11. VLANs

   V. Anhang

                A. Bezugsquellen fu:r FreeBSD

                             A.1. CD und DVD Sets

                             A.2. FTP-Server

                             A.3. Benutzen von Subversion

                             A.4. Benutzen von rsync

                B. Bibliografie

                             B.1. Bu:cher speziell fu:r FreeBSD

                             B.2. Handbu:cher

                             B.3. Administrations-Anleitungen

                             B.4. Programmierhandbu:cher

                             B.5. Betriebssystem-Interna

                             B.6. Sicherheits-Anleitung

                             B.7. Hardware-Anleitung

                             B.8. UNIX(R) Geschichte

                             B.9. Zeitschriften, Magazine und Journale

                C. Ressourcen im Internet

                             C.1. Webseiten

                             C.2. Mailinglisten

                             C.3. Usenet-News

                             C.4. Offizielle Spiegel

                D. OpenPGP-Schlu:ssel

                             D.1. Ansprechpartner

   FreeBSD Glossar

   Stichwortverzeichnis

   Abbildungsverzeichnis

   2.1. FreeBSD Boot Loader Menu:

   2.2. FreeBSD Boot-Optionen Menu:

   2.3. Willkommen-Menu:

   2.4. Tastaturbelegung festlegen

   2.5. Tastaturauswahlbildschirm

   2.6. Erweiterte Tastaturbelegung

   2.7. Festlegen des Rechnernamens

   2.8. Komponenten fu:r die Installation auswa:hlen

   2.9. Installation u:ber das Netzwerk

   2.10. Einen Spiegelserver wa:hlen

   2.11. Partitionierung unter FreeBSD 9.x

   2.12. Partitionierung unter FreeBSD 10.x und neueren Versionen

   2.13. Aus mehreren Platten eine auswa:hlen

   2.14. Auswahl der gesamten Platte oder einer Partition

   2.15. U:berpru:fen der erstellen Partitionen

   2.16. Partitionen manuell erstellen

   2.17. Partitionen manuell anlegen

   2.18. Partitionen manuell erzeugen

   2.19. ZFS Konfigurationsmenu:

   2.20. ZFS Pool Typen

   2.21. Auswahl der Laufwerke

   2.22. Ungu:ltige Auswahl

   2.23. Eigenschaften einer Festplatte

   2.24. Passwort fu:r die Verschlu:sselung der Platte

   2.25. Letzte Chance

   2.26. Letzte Besta:tigung

   2.27. Herunterladen der Distributionsdateien

   2.28. U:berpru:fen der Distributionsdateien

   2.29. Entpacken der Distributionsdateien

   2.30. Das root-Passwort setzen

   2.31. Eine zu konfigurierende Netzwerkschnittstelle auswa:hlen

   2.32. Nach drahtlosen Access Points scannen

   2.33. Ein drahtloses Netzwerk auswa:hlen

   2.34. Verbindungsaufbau mit WPA2

   2.35. Auswahl von IPv4

   2.36. Auswa:hlen der IPv4-Konfiguration u:ber DHCP

   2.37. Statische IPv4-Konfiguration

   2.38. Auswahl von IPv6

   2.39. Auswahl der IPv6 SLAAC-Konfiguration

   2.40. Statische IPv6-Konfiguration

   2.41. DNS-Konfiguration

   2.42. Lokale oder UTC-Zeit

   2.43. Auswahl der geographischen Region

   2.44. Das Land auswa:hlen

   2.45. Wa:hlen einer Zeitzone

   2.46. Besta:tigen der Zeitzone

   2.47. Auswahl zusa:tzlicher Dienste

   2.48. Aktivierung der Absturzaufzeichnung

   2.49. Benutzerkonten hinzufu:gen

   2.50. Benutzerinformationen eingeben

   2.51. Verlassen der Benutzer- und Gruppenverwaltung

   2.52. Letzte Schritte der Konfiguration

   2.53. Manuelle Konfiguration

   2.54. Die Installation vervollsta:ndigen

   30.1. PXE-Bootvorgang mit NFS Root Mount

   Tabellenverzeichnis

   2.1. Partitionierungsschemas

   3.1. Programme zur Verwaltung von Benutzer-Accounts

   3.2. UNIX(R) Zugriffsrechte

   3.3. Laufwerk-Codes

   3.4. Gebra:uchliche Umgebungsvariablen

   5.1. Die Konfigurationsdateien von XDM

   7.1. Typische Fehlermeldungen

   9.1. Ausgabe PDLs

   12.1. Die eingebauten Befehle des Loaders

   12.2. Interaktion mit dem Kernel wa:hrend des Bootens

   13.1. Ressourcenbeschra:nkungen fu:r Login-Klassen

   16.1. Audit-Ereignisklassen

   16.2. Pra:fixe fu:r Audit-Ereignisklassen

   22.1. Gebra:uchliche Sprach- und La:ndercodes

   22.2. Terminaltypen fu:r Zeichensa:tze

   22.3. Konsolen aus der Ports-Sammlung

   22.4. Verfu:gbare Eingabemethoden

   23.1. FreeBSD Versionen und Repository-Pfade

   25.1. Nullmodemkabel vom Typ DB-25-zu-DB-25

   25.2. Nullmodemkabel vom Typ DB-9-zu-DB-9

   25.3. Nullmodemkabel vom Typ DB-9-zu-DB-25

   25.4. Signalnamen

   25.5. Fall 1: Option 0x10 fu:r sio0

   25.6. Fall 2: Option 0x30 fu:r sio0

   28.1. NIS Begriffe

   28.2. Zusa:tzliche Benutzer

   28.3. Zusa:tzliche Rechner

   28.4. DNS-Begriffe

   29.1. Nu:tzliche pfctl Optionen

   30.1. Allgemeine Attribute in Routingtabellen

   30.2. Station Capability Codes

   30.3. Reservierte IPv6-Adressen

   Liste der Beispiele

   2.1. Ein traditionelles, partitioniertes Dateisystem erstellen

   3.1. Ein Programm als Superuser installieren

   3.2. Einen Benutzer unter FreeBSD anlegen

   3.3. Interaktives Lo:schen von Accounts mit rmuser

   3.4. chpass als Superuser verwenden

   3.5. chpass als normaler Benutzer verwenden

   3.6. Das eigene Passwort wechseln

   3.7. Als Superuser das Passwort eines anderen Accounts vera:ndern

   3.8. Setzen der Mitgliederliste einer Gruppe mit pw(8)

   3.9. Ein Gruppenmitglied mit pw(8) hinzufu:gen

   3.10. Hinzufu:gen eines neuen Gruppenmitglieds mittels pw(8)

   3.11. Mit id die Gruppenzugeho:rigkeit bestimmen

   3.12. Namen von Platten, Slices und Partitionen

   3.13. Aufteilung einer Festplatte

   5.1. Den Intel(R) Treiber u:ber eine Datei auswa:hlen

   5.2. Den Radeon Treiber u:ber eine Datei auswa:hlen

   5.3. Den VESA Treiber u:ber eine Datei auswa:hlen

   5.4. Den scfb Treiber u:ber eine Datei auswa:hlen

   5.5. Die Bildschirmauflo:sung in eine Datei schreiben

   5.6. Manuelles Einstellen der Monitorfrequenzen

   5.7. Konfiguration eines Tastaturlayouts

   5.8. Konfiguration mehrerer Tastaturlayouts

   5.9. X u:ber die Tastatur beenden

   5.10. Die Anzahl der Maustasten festlegen

   11.1. Einfache Server Konfiguration

   11.2. Erstellen einer Swap-Datei unter FreeBSD 10.X und neuer

   11.3. Erstellen einer Swap-Datei unter FreeBSD 9.X und a:lter

   12.1. boot0-Screenshot

   12.2. boot2-Screenshot

   12.3. Auf insecure gesetzte Konsole in /etc/ttys

   13.1. Einen sicheren Tunnel fu:r SMTP erstellen

   13.2. Sicherer Zugriff auf einen POP3-Server

   13.3. Umgehen einer Firewall

   14.1. mergemaster(8) in einer nicht vertrauenswu:rdigen Jail ausfu:hren

   14.2. mergemaster(8) in einer vertrauenswu:rdigen Jail ausfu:hren

   14.3. BIND in einer Jail laufen lassen

   17.1. dump mit ssh benutzen

   17.2. dump u:ber ssh mit gesetzter RSH benutzen

   17.3. Das aktuelle Verzeichnis mit tar sichern

   17.4. Wiederherstellung mit tar in das aktuelle Verzeichnis

   17.5. Rekursive Sicherung des aktuellen Verzeichnisses mit ls und cpio

   17.6. Das aktuelle Verzeichnis mit pax sichern

   18.1. Die Partitionen einer Bootplatte labeln

   23.1. Die Anzahl der Prozesse erho:hen

   25.1. Eintra:ge in /etc/ttys hinzufu:gen

   28.1. Die Konfigurationsdatei von inetd neu einlesen

   28.2. Ein exportiertes Dateisystem mit amd in den Verzeichnisbaum
   einha:ngen

   28.3. Ein exportiertes Dateisystem mit autofs(5) in den Verzeichnisbaum
   einha:ngen

   28.4. Beispiel einer /etc/ntp.conf

   30.1. LACP Aggregation mit einem Cisco(R) Switch

   30.2. Ausfallsicherer Modus

   30.3. Failover Modus zwischen Ethernet- und Wireless-Schnittstellen

                                    Vorwort

U:ber dieses Buch

   Der erste Teil dieses Buchs fu:hrt FreeBSD-Einsteiger durch den
   Installationsprozess und stellt leicht versta:ndlich Konzepte und
   Konventionen vor, die UNIX(R) zu Grunde liegen. Sie mu:ssen nur neugierig
   sein und bereitwillig neue Konzepte aufnehmen, wenn diese vorgestellt
   werden, um diesen Teil durchzuarbeiten.

   Wenn Sie den ersten Teil bewa:ltigt haben, bietet der umfangreichere
   zweite Teil eine versta:ndliche Darstellung vieler Themen, die fu:r
   FreeBSD-Administratoren relevant sind. Wenn Kapitel auf anderen Kapiteln
   aufbauen, wird das in der U:bersicht am Anfang eines Kapitels erla:utert.

   Weitere Informationsquellen entnehmen Sie bitte Anhang B, Bibliografie.

A:nderungen gegenu:ber der dritten Auflage

   Die aktuelle Auflage des Handbuchs ist das Ergebnis der engagierten Arbeit
   Hunderter Mitarbeiter des FreeBSD Documentation Projects in den
   vergangenen 10 Jahren. Die wichtigsten A:nderungen dieser Auflage
   gegenu:ber der dritten Auflage von 2004 sind:

     * Kapitel 24, DTrace informiert Sie u:ber die ma:chtigen Funktionen zur
       Leistungsmessung, die dieses Werkzeug bietet.

     * Kapitel 20, Dateisystemunterstu:tzung entha:lt Informationen u:ber die
       Unterstu:tzung nicht-nativer Dateisysteme in FreeBSD, wie
       beispielsweise ZFS von Sun(TM).

     * Kapitel 16, Security Event Auditing informiert u:ber die neuen
       Auditing-Fa:higkeitenvon FreeBSD.

     * Kapitel 21, Virtualisierung entha:lt Informationen zur Installation
       von FreeBSD in verschiedenen Virtualisierungs-Programmen.

     * Kapitel 2, FreeBSD installieren wurde hinzugefu:gt, um die
       Installation von FreeBSD mit dem neuen Installationswerkzeug,
       bsdinstall, zu dokumentieren.

A:nderungen gegenu:ber der zweiten Auflage (2004)

   Die dritte Auflage des Handbuchs war das Ergebnis der u:ber zwei Jahre
   dauernden engagierten Arbeit des FreeBSD Documentation Projects. Die
   gedruckte Ausgabe war derart umfangreich, dass es notwendig wurde, sie in
   zwei Ba:nde aufzuteilen. Die wichtigsten A:nderungen dieser Auflage waren:

     * Kapitel 11, Konfiguration und Tuning entha:lt neue Abschnitte u:ber
       ACPI, Energie- und Ressourcenverwaltung und das Werkzeug cron.

     * Kapitel 13, Sicherheit erla:utert nun Virtual Private Networks (VPNs),
       Zugriffskontrolllisten (ACLs) und Sicherheitshinweise.

     * Kapitel 15, Verbindliche Zugriffskontrolle ist ein neues Kapitel, das
       vorgeschriebene Zugriffskontrollen vorstellt und erkla:rt, wie
       FreeBSD-Systeme mit MACs abgesichert werden ko:nnen.

     * Kapitel 17, Speichermedien entha:lt neue Informationen u:ber
       USB-Speichergera:te, Dateisystem-Snapshots, Quotas, Datei- und
       Netzwerk-basierte Dateisysteme sowie verschlu:sselte Partitionen.

     * Zum Kapitel 26, PPP wurde ein Abschnitt u:ber Fehlersuche
       hinzugefu:gt.

     * Kapitel 27, Elektronische Post (E-Mail) wurde um Abschnitte u:ber
       alternative Transport-Agenten (MTAs), SMTP-Authentifizierung, UUCP,
       fetchmail, procmail und weitere Themen erweitert.

     * Kapitel 28, Netzwerkserver ist ein weiteres neues Kapitel dieser
       Auflage. Das Kapitel beschreibt, wie der Apache HTTP-Server, ftpd und
       ein Samba-Server fu:r Microsoft(R) Windows(R)-Clients eingerichtet
       werden. Einige Abschnitte aus dem Kapitel 30, Weiterfu:hrende
       Netzwerkthemen befinden sich nun, wegen des thematischen
       Zusammenhangs, in diesem Kapitel.

     * Das Kapitel 30, Weiterfu:hrende Netzwerkthemen beschreibt nun den
       Einsatz von Bluetooth(R)-Gera:ten unter FreeBSD und das Einrichten von
       drahtlosen Netzwerken sowie ATM-Netzwerken.

     * Neu hinzugefu:gt wurde ein Glossar, das die im Buch verwendeten
       technischen Ausdru:cke definiert.

     * Das Erscheinungsbild der Tabellen und Abbildungen im Buch wurde
       verbessert.

A:nderungen gegenu:ber der ersten Auflage (2001)

   Die zweite Auflage ist das Ergebnis der engagierten Arbeit der Mitglieder
   des FreeBSD Documentation Projects u:ber zwei Jahre. Die wichtigsten
   A:nderungen gegenu:ber der ersten Auflage sind:

     * Ein Index wurde erstellt.

     * Alle ASCII-Darstellungen wurden durch Grafiken ersetzt.

     * Jedes Kapitel wird durch eine U:bersicht eingeleitet, die den Inhalt
       des Kapitels zusammenfasst und die Voraussetzungen fu:r ein
       erfolgreiches Durcharbeiten des Kapitels darstellt.

     * Der Inhalt wurde in die logischen Abschnitte "Erste Schritte",
       "Systemadministration" und "Anha:nge" unterteilt.

     * Kapitel 3, Grundlagen des UNIX Betriebssystems wurde um den Abschnitt
       "Da:monen, Signale und Stoppen von Prozessen" erweitert.

     * Das Kapitel 4, Installieren von Anwendungen: Pakete und Ports
       behandelt nun auch Pakete.

     * Kapitel 5, Das X-Window-System wurde neu geschrieben. Der Schwerpunkt
       liegt auf modernen Benutzeroberfla:chen wie KDE und GNOME unter
       XFree86(TM).

     * Das Kapitel 12, FreeBSDs Bootvorgang wurde erweitert.

     * Kapitel 17, Speichermedien ist aus den beiden Kapiteln "Laufwerke" und
       "Sicherungen" entstanden. Die in den beiden Kapiteln diskutierten
       Themen sind so leichter zu verstehen. Hinzugekommen ist ein Abschnitt
       u:ber Software- und Hardware-RAID.

     * Das Kapitel 25, Serielle Datenu:bertragung wurde reorganisiert und auf
       FreeBSD 4.X/5.X angepasst.

     * Das Kapitel 26, PPP wurde aktualisiert.

     * Kapitel 30, Weiterfu:hrende Netzwerkthemen wurde um viele neue
       Abschnitte erweitert.

     * Kapitel 27, Elektronische Post (E-Mail) wurde um einen Abschnitt u:ber
       die Konfiguration von Sendmail erweitert.

     * Kapitel 10, Linux(R)-Bina:rkompatibilita:t behandelt zusa:tzlich die
       Installation von Oracle(R) und SAP(R) R/3(R).

     * Neu hinzugekommen sind:

          * Kapitel 11, Konfiguration und Tuning.

          * Kapitel 7, Multimedia.

Gliederung

   Dieses Buch ist in fu:nf Abschnitte unterteilt. Der erste Abschnitt, Erste
   Schritte, behandelt die Installation und die Grundlagen von FreeBSD.
   Dieser Abschnitt sollte in der vorgegebenen Reihenfolge durchgearbeitet
   werden, schon Bekanntes darf aber u:bersprungen werden. Der zweite
   Abschnitt, Oft benutzte Funktionen, behandelt ha:ufig benutzte Funktionen
   von FreeBSD. Dieser Abschnitt sowie alle nachfolgenden Abschnitte ko:nnen
   in beliebiger Reihenfolge gelesen werden. Jeder Abschnitt beginnt mit
   einer kurzen U:bersicht, die das Thema des Abschnitts und das no:tige
   Vorwissen erla:utert. Die U:bersichten helfen dem Leser, interessante
   Kapitel zu finden und erleichtern das Sto:bern im Handbuch. Der dritte
   Abschnitt, Systemadministration, behandelt die Administration eines
   FreeBSD-Systems. Der vierte Abschnitt, Netzwerke, bespricht Netzwerke und
   Netzwerkdienste. Der fu:nfte Abschnitt entha:lt Anha:nge und Verweise auf
   weitere Informationen.

   Kapitel 1, Einleitung

           Dieses Kapitel macht Einsteiger mit FreeBSD vertraut. Es behandelt
           die Geschichte, die Ziele und das Entwicklungsmodell des
           FreeBSD-Projekts.

   Kapitel 2, FreeBSD installieren

           Beschreibt den Ablauf der Installation von FreeBSD 9.x und neuere
           mittels bsdinstall.

   Kapitel 3, Grundlagen des UNIX Betriebssystems

           Erla:utert die elementaren Kommandos und Funktionen von FreeBSD.
           Wenn Sie schon mit Linux(R) oder einem anderen UNIX(R) System
           vertraut sind, ko:nnen Sie dieses Kapitel u:berspringen.

   Kapitel 4, Installieren von Anwendungen: Pakete und Ports

           Zeigt wie mit der innovativen Ports-Sammlung oder mit Paketen
           Software von Fremdherstellern installiert wird.

   Kapitel 5, Das X-Window-System

           Beschreibt allgemein das X Window System und geht speziell auf X11
           unter FreeBSD ein. Weiterhin werden graphische
           Benutzeroberfla:chen wie KDE und GNOME behandelt.

   Kapitel 6, Desktop-Anwendungen

           Entha:lt eine Aufstellung verbreiteter Anwendungen wie Browser,
           Bu:roanwendungen und Office-Pakete und beschreibt wie diese
           Anwendungen installiert werden.

   Kapitel 7, Multimedia

           Erkla:rt, wie Sie auf Ihrem System Musik und Videos abspielen
           ko:nnen. Beispielhaft werden auch Anwendungen aus dem
           Multimedia-Bereich beleuchtet.

   Kapitel 8, Konfiguration des FreeBSD-Kernels

           Erkla:rt, warum Sie einen angepassten Kernel erzeugen sollten und
           gibt ausfu:hrliche Anweisungen wie Sie einen angepassten Kernel
           konfigurieren, bauen und installieren.

   Kapitel 9, Drucken

           Beschreibt, wie Sie Drucker unter FreeBSD verwalten. Diskutiert
           werden Deckbla:tter, das Einrichten eines Druckers und ein
           Abrechnungssystem fu:r ausgedruckte Seiten.

   Kapitel 10, Linux(R)-Bina:rkompatibilita:t

           Beschreibt die bina:re Kompatibilita:t zu Linux(R). Weiterhin
           werden ausfu:hrliche Installationsanleitungen fu:r Oracle(R) und
           Mathematica(R) gegeben.

   Kapitel 11, Konfiguration und Tuning

           Beschreibt die Einstellungen, die ein Systemadministrator
           vornehmen kann, um die Leistungsfa:higkeit eines FreeBSD Systems
           zu verbessern. In diesem Kapitel werden auch verschiedene
           Konfigurationsdateien besprochen.

   Kapitel 12, FreeBSDs Bootvorgang

           Erkla:rt den Bootprozess von FreeBSD und beschreibt die Optionen,
           mit denen sich der Bootprozess beeinflussen la:sst.

   Kapitel 13, Sicherheit

           Beschreibt die Werkzeuge mit denen Sie Ihr FreeBSD-System
           absichern. Unter Anderem werden Kerberos, IPsec und OpenSSH
           besprochen.

   Kapitel 14, Jails

           Dieses Kapitel beschreibt das Jails-Framework sowie die Vorteile
           von Jails gegenu:ber der traditionellen chroot-Unterstu:tzung von
           FreeBSD.

   Kapitel 15, Verbindliche Zugriffskontrolle

           Erkla:rt vorgeschriebene Zugriffskontrollen (MACs) und wie mit
           ihrer Hilfe FreeBSD-Systeme gesichert werden.

   Kapitel 16, Security Event Auditing

           Beschreibt, was FreeBSD Event Auditing ist, wie Sie diese Funktion
           installieren und konfigurieren und die damit erzeugten
           Audit-Trails u:berwachen und auswerten ko:nnen.

   Kapitel 17, Speichermedien

           Erla:utert den Umgang mit Speichermedien und Dateisystemen.
           Behandelt werden Plattenlaufwerke, RAID-Systeme, optische Medien,
           Bandlaufwerke, speicherbasierte Laufwerke und verteilte
           Dateisysteme.

   Kapitel 18, GEOM: Modulares Framework zur Plattentransformation

           Beschreibt das GEOM-Framework von FreeBSD sowie die Konfiguration
           der verschiedenen unterstu:tzten RAID-Level.

   Kapitel 20, Dateisystemunterstu:tzung

           Beschreibt die Unterstu:tzung nicht-nativer Dateisysteme
           (beispielsweise des Z-Dateisystems (zfs) von Sun(TM)) durch
           FreeBSD.

   Kapitel 21, Virtualisierung

           Dieses Kapitel beschreibt verschiedene Virtualisierungslo:sungen
           und wie diese mit FreeBSD zusammenarbeiten.

   Kapitel 22, Lokalisierung - I18N/L10N einrichten und benutzen

           Zeigt wie Sie FreeBSD mit anderen Sprachen als Englisch einsetzen.
           Es wird sowohl die Lokalisierung auf der System-Ebene wie auch auf
           der Anwendungs-Ebene betrachtet.

   Kapitel 23, FreeBSD aktualisieren

           Erkla:rt die Unterschiede zwischen FreeBSD-STABLE, FreeBSD-CURRENT
           und FreeBSD-Releases. Das Kapitel entha:lt Kriterien anhand derer
           Sie entscheiden ko:nnen, ob es sich lohnt, ein Entwickler-System
           zu installieren und aktuell zu halten. Ausserdem wird beschrieben,
           wie Sie ein System durch das Einspielen neuer Sicherheits-Patches
           absichern.

   Kapitel 24, DTrace

           Beschreibt, wie das von Sun(TM) entwickelte DTrace-Werkzeug unter
           FreeBSD konfiguriert und eingesetzt werden kann. Dynamisches
           Tracing kann Ihnen beim Aufspu:ren von Leistungsproblemen helfen,
           indem Sie Echtzeit-Systemanalysen durchfu:hren.

   Kapitel 25, Serielle Datenu:bertragung

           Erla:utert, wie Sie Terminals und Modems an Ihr FreeBSD-System
           anschliessen und sich so ein- und auswa:hlen ko:nnen.

   Kapitel 26, PPP

           Erkla:rt wie Sie mit PPP, SLIP oder PPP u:ber Ethernet ein
           FreeBSD-System mit einem entfernten System verbinden.

   Kapitel 27, Elektronische Post (E-Mail)

           Erla:utert die verschiedenen Bestandteile eines E-Mail Servers und
           zeigt einfache Konfigurationen fu:r sendmail, dem meist genutzten
           E-Mail-Server.

   Kapitel 28, Netzwerkserver

           Bietet ausfu:hrliche Informationen und Beispielkonfigurationen,
           die es Ihnen ermo:glichen, Ihren FreeBSD-Rechner als Network File
           System Server, Domain Name Server, Network Information Server,
           oder als Zeitsynchronisationsserver einzurichten.

   Kapitel 29, Firewalls

           Erkla:rt die Philosophie hinter softwarebasierten Firewalls und
           bietet ausfu:hrliche Informationen zur Konfiguration der
           verschiedenen, fu:r FreeBSD verfu:gbaren Firewalls.

   Kapitel 30, Weiterfu:hrende Netzwerkthemen

           Behandelt viele Netzwerkthemen, beispielsweise das
           Verfu:gbarmachen einer Internetverbindung fu:r andere Rechner
           eines LANs, Routing, drahtlose Netzwerke, Bluetooth(R), IPv6, ATM
           und andere mehr.

   Anhang A, Bezugsquellen fu:r FreeBSD

           Entha:lt eine Aufstellung der Quellen von denen Sie FreeBSD
           beziehen ko:nnen: CD-ROM, DVD sowie Internet-Sites.

   Anhang B, Bibliografie

           Dieses Buch behandelt viele Themen und kann nicht alle Fragen
           erscho:pfend beantworten. Die Bibliografie entha:lt
           weiterfu:hrende Bu:cher, die im Text zitiert werden.

   Anhang C, Ressourcen im Internet

           Entha:lt eine Aufstellung der Foren, die FreeBSD Benutzern fu:r
           Fragen und Diskussionen zur Verfu:gung stehen.

   Anhang D, OpenPGP-Schlu:ssel

           Entha:lt PGP-Fingerabdru:cke von etlichen FreeBSD Entwicklern.

Konventionen in diesem Buch

   Damit der Text einheitlich erscheint und leicht zu lesen ist, werden im
   ganzen Buch die nachstehenden Konventionen beachtet:

  Typographie

   Kursiv

           Fu:r Dateinamen, URLs, betonte Teile eines Satzes und das erste
           Vorkommen eines Fachbegriffs wird ein kursiver Zeichensatz
           benutzt.

   Fixschrift

           Fehlermeldungen, Kommandos, Umgebungsvariablen, Namen von Ports,
           Hostnamen, Benutzernamen, Gruppennamen, Gera:tenamen, Variablen
           und Code-Ausschnitte werden in einer Fixschrift dargestellt.

   Fett

           Fett kennzeichnet Anwendungen, Kommandozeilen und Tastensymbole.

  Benutzereingaben

   Tasten werden fett dargestellt, um sie von dem umgebenden Text abzuheben.
   Tasten, die gleichzeitig gedru:ckt werden mu:ssen, werden durch ein +
   zwischen den einzelnen Tasten dargestellt:

   Ctrl+Alt+Del

   Im gezeigten Beispiel soll der Benutzer die Tasten Ctrl, Alt und Del
   gleichzeitig dru:cken.

   Tasten, die nacheinander gedru:ckt werden mu:ssen, sind durch Kommas
   getrennt:

   Ctrl+X, Ctrl+S

   Das letzte Beispiel bedeutet, dass die Tasten Ctrl und X gleichzeitig
   beta:tigt werden und danach die Tasten Ctrl und S gleichzeitig gedru:ckt
   werden mu:ssen.

  Beispiele

   Beispiele, die durch C:\> eingeleitet werden, zeigen ein MS-DOS(R)
   Kommando. Wenn nichts Anderes angezeigt wird, ko:nnen diese Kommandos
   unter neuen Versionen von Microsoft(R) Windows(R) auch in einem
   DOS-Fenster ausgefu:hrt werden.

 E:\> tools\fdimage floppies\kern.flp A:

   Beispiele, die mit # beginnen, mu:ssen unter FreeBSD mit Superuser-Rechten
   ausgefu:hrt werden. Dazu melden Sie sich entweder als root an oder Sie
   wechseln von Ihrem normalen Account mit su(1) zu dem Benutzer root.

 # dd if=kern.flp of=/dev/fd0

   Beispiele, die mit % anfangen, werden unter einem normalen
   Benutzer-Account ausgefu:hrt. Sofern nichts Anderes angezeigt wird,
   verwenden die Beispiele die Syntax der C-Shell.

 % top

Danksagung

   Dieses Buch ist aus Beitra:gen von vielen Leuten aus allen Teilen der Welt
   entstanden. Alle eingegangen Beitra:ge, zum Beispiel Korrekturen oder
   vollsta:ndige Kapitel, waren wertvoll.

   Einige Firmen haben dieses Buch dadurch unterstu:tzt, dass Sie Autoren in
   Vollzeit bescha:ftigt und die Vero:ffentlichung des Buchs finanziert
   haben. Besonders BSDi (das spa:ter von Wind River Systems u:bernommen
   wurde) bescha:ftigte Mitglieder des FreeBSD Documentation Projects, um
   dieses Buch zu erstellen. Dadurch wurde die erste (englische) gedruckte
   Auflage im Ma:rz 2000 mo:glich (ISBN 1-57176-241-8). Wind River Systems
   bezahlte dann weitere Autoren, die die zum Drucken no:tige Infrastruktur
   verbesserten und zusa:tzliche Kapitel beisteuerten. Das Ergebnis dieser
   Arbeit ist die zweite (englische) Auflage vom November 2001 (ISBN
   1-57176-303-1). Zwischen 2003 und 2004 bezahlte FreeBSD Mall, Inc mehrere
   Mitarbeiter fu:r die Vorbereitung der gedruckten dritten Auflage.

                             Teil I. Erste Schritte

   Dieser Teil des Handbuchs richtet sich an Benutzer und Administratoren
   fu:r die FreeBSD neu ist. Diese Kapitel

     * enthalten eine Einfu:hrung in FreeBSD,

     * geleitet den Leser durch den Installationsprozess,

     * erkla:rt die Grundlagen von UNIX(R) Systemen,

     * demonstriert, wie die Fu:lle der erha:ltlichen Anwendungen Dritter
       installiert werden und

     * fu:hrt den Leser in X, der Benutzeroberfla:che von UNIX(R) Systemen
       ein. Es wird gezeigt, wie ein Desktop konfiguriert wird, um effektiver
       arbeiten zu ko:nnen.

   Referenzen auf weiter vorne liegende Textteile wurden auf ein Minimum
   beschra:nkt, so dass dieser Abschnitt ohne viel Bla:ttern durchgearbeitet
   werden kann.

   Inhaltsverzeichnis

   1. Einleitung

                1.1. U:berblick

                1.2. Willkommen zu FreeBSD

                1.3. U:ber das FreeBSD Projekt

   2. FreeBSD installieren

                2.1. U:bersicht

                2.2. Minimale Hardwareanforderungen

                2.3. Vor der Installation

                2.4. Die Installation starten

                2.5. Verwendung von bsdinstall

                2.6. Plattenplatz bereitstellen

                2.7. Die Installation festschreiben

                2.8. Arbeiten nach der Installation

                2.9. Fehlerbehebung

                2.10. Verwendung der Live-CD

   3. Grundlagen des UNIX Betriebssystems

                3.1. U:bersicht

                3.2. Virtuelle Konsolen und Terminals

                3.3. Benutzer und grundlegende Account-Verwaltung

                3.4. Zugriffsrechte

                3.5. Verzeichnis-Strukturen

                3.6. Festplatten, Slices und Partitionen

                3.7. Anha:ngen und Abha:ngen von Dateisystemen

                3.8. Prozesse und Da:monen

                3.9. Shells

                3.10. Text-Editoren

                3.11. Gera:te und Gera:tedateien

                3.12. Manualpages

   4. Installieren von Anwendungen: Pakete und Ports

                4.1. U:bersicht

                4.2. Installation von Software

                4.3. Suchen einer Anwendung

                4.4. Benutzen von pkg zur Verwaltung von Bina:rpaketen

                4.5. Benutzen der Ports-Sammlung

                4.6. Pakete mit Poudriere bauen

                4.7. Nach der Installation

                4.8. Kaputte Ports

   5. Das X-Window-System

                5.1. U:bersicht

                5.2. Terminologie

                5.3. Xorg installieren

                5.4. Xorg konfigurieren

                5.5. Schriftarten in Xorg benutzen

                5.6. Der X-Display-Manager

                5.7. Grafische Oberfla:chen

                5.8. Compiz Fusion installieren

                5.9. Fehlersuche

Kapitel 1. Einleitung

   Restrukturiert, umorganisiert und Abschnitte neu geschrieben von Jim Mock.
   Inhaltsverzeichnis

   1.1. U:berblick

   1.2. Willkommen zu FreeBSD

   1.3. U:ber das FreeBSD Projekt

1.1. U:berblick

   Herzlichen Dank fu:r Ihr Interesse an FreeBSD! Das folgende Kapitel
   behandelt verschiedene Aspekte des FreeBSD Projekts wie dessen
   geschichtliche Entwicklung, seine Ziele oder das Entwicklungsmodell.

   Nach dem Durcharbeiten des Kapitels wissen Sie u:ber folgende Punkte
   Bescheid:

     * Wo FreeBSD im Vergleich zu anderen Betriebssystemen steht

     * Die Geschichte des FreeBSD Projekts

     * Die Ziele des FreeBSD Projekts

     * Die Grundlagen des FreeBSD-Open-Source-Entwicklungsmodells

     * Und natu:rlich woher der Name "FreeBSD" kommt.

1.2. Willkommen zu FreeBSD

   FreeBSD ist ein auf 4.4BSD-Lite basierendes Betriebssystem fu:r Intel (x86
   und Itanium(R)), AMD64, ARM(R) und Sun UltraSPARC(R) Rechner. An
   Portierungen zu anderen Architekturen wird derzeit gearbeitet. Mehr zur
   Geschichte von FreeBSD erfahren Sie in die Geschichte von FreeBSD oder aus
   den aktuellen Release-Informationen. Falls Sie das FreeBSD Projekt
   unterstu:tzen wollen (z.B. mit Quellcode, Hardware- oder Geldspenden),
   lesen Sie den FreeBSD unterstu:tzen Artikel.

  1.2.1. Was kann FreeBSD?

   FreeBSD hat zahlreiche bemerkenswerte Eigenschaften. Um nur einige zu
   nennen:

     * Pra:emptives Multitasking mit dynamischer Priorita:tsanpassung zum
       reibungslosen und ausgeglichenen Teilen der Systemressourcen zwischen
       Anwendungen und Anwendern, selbst unter schwerster Last.

     * Mehrbenutzerbetrieb erlaubt es, viele FreeBSD-Anwender gleichzeitig am
       System mit verschiedenen Aufgaben arbeiten zu lassen. Beispielsweise
       ko:nnen Gera:te wie Drucker oder Bandlaufwerke, die sich nur
       schwerlich unter allen Anwendern des Systems oder im Netzwerk teilen
       lassen, durch setzen von Beschra:nkungen auf Benutzer oder Gruppen
       wichtige Systemressourcen vor U:berbeanspruchung geschu:tzt werden.

     * StarkeTCP/IP-Netzwerkfa:higkeit mit Unterstu:tzung von
       Industriestandards wie SCTP, DHCP, NFS, NIS, PPP, SLIP, IPsec und
       IPv6. Das bedeutet, Ihr FreeBSD-System kann in einfachster Weise mit
       anderen Systemen interagieren. Zudem kann es als Server-System im
       Unternehmen wichtige Aufgaben u:bernehmen, beispielsweise als NFS-
       oder E-Mail-Server oder es kann Ihren Betrieb durch HTTP- und
       FTP-Server beziehungsweise durch Routing und Firewalling
       Internetfa:hig machen.

     * Speicherschutz stellt sicher, dass Anwendungen (oder Anwender) sich
       nicht gegenseitig sto:ren. Stu:rzt eine Anwendung ab, hat das keine
       Auswirkung auf andere Prozesse.

     * Der Industriestandard X-Window-System (X11R7) bietet eine grafische
       Benutzeroberfla:che (GUI).

     * Bina:rkompatibilita:t mit vielen auf anderen Betriebssystemen
       erstellten Programmen wie Linux, SCO, SVR4, BSDI und NetBSD.

     * Tausende zusa:tzliche leicht zu portierende Anwendungen sind u:ber die
       FreeBSD Ports und Paket-Sammlung verfu:gbar. Warum mu:hselig im Netz
       nach Software suchen, wenn diese bereits vorhanden ist?

     * Tausende zusa:tzliche leicht zu portierende Anwendungen sind u:ber das
       Internet zu beziehen. FreeBSD ist Quellcode-kompatibel mit den meisten
       kommerziellen UNIX(R) Systemen. Daher bedu:rfen Anwendungen ha:ufig
       nur geringer oder gar keiner Anpassung, um auf einem FreeBSD-System zu
       kompilieren.

     * Seitenweise anforderbarer virtueller Speicher und "merged VM/buffer
       cache" -Entwurf bedient effektiv den grossen Speicherhunger mancher
       Anwendungen bei gleichzeitigem Aufrechterhalten der Bedienbarkeit des
       Systems fu:r weitere Benutzer.

     * SMP-Unterstu:tzung fu:r Systeme mit mehreren CPUs.

     * Ein voller Satz von C und C++ Entwicklungswerkzeugen. Viele
       zusa:tzliche Programmiersprachen fu:r ho:here Wissenschaft und
       Entwicklung sind in der Ports- und Packages-Sammlung verfu:gbar.

     * Quellcode fu:r das gesamte System bedeutet gro:sstmo:gliche Kontrolle
       u:ber Ihre Umgebung. Warum sollte man sich durch proprieta:re
       Lo:sungen knebeln und sich auf Gedeih und Verderb der Gnade eines
       Herstellers ausliefern, wenn man doch ein wahrhaft offenes System
       haben kann?

     * Umfangreiche Online-Dokumentation.

     * und viele weitere!

   FreeBSD basiert auf dem 4.4BSD-Lite-Release der Computer Systems Research
   Group (CSRG) der Universita:t von Kalifornien in Berkeley und fu:hrt die
   namenhafte Tradition der Entwicklung von BSD-Systemen fort. Zusa:tzlich zu
   der herausragenden Arbeit der CSRG hat das FreeBSD Projekt tausende
   weitere Arbeitsstunden investiert, um das System zu verfeinern und
   maximale Leistung und Zuverla:ssigkeit bei Alltagslast zu bieten. FreeBSD
   bietet Leistung und Zuverla:ssigkeit auf dem Niveau kommerzieller
   Angebote, und kombiniert viele innovative Funtionen, die in anderen
   Angeboten nicht verfu:bar sind.

   Die Anwendungsmo:glichkeiten von FreeBSD werden nur durch Ihre
   Vorstellungskraft begrenzt. Von Software-Entwicklung bis zu
   Produktionsautomatisierung, von Lagerverwaltung u:ber Abweichungskorrektur
   bei Satelliten; Falls etwas mit kommerziellen UNIX(R) Produkten machbar
   ist, dann ist es ho:chstwahrscheinlich auch mit FreeBSD mo:glich. FreeBSD
   profitiert stark von tausenden hochwertigen Anwendungen aus
   wissenschaftlichen Instituten und Universita:ten in aller Welt. Ha:ufig
   sind diese fu:r wenig Geld oder sogar kostenlos zu bekommen. Kommerzielle
   Anwendungen sind ebenso verfu:gbar und es werden ta:glich mehr.

   Durch den freien Zugang zum Quellcode von FreeBSD ist es in
   unvergleichbarer Weise mo:glich, das System fu:r spezielle Anwendungen
   oder Projekte anzupassen. Dies ist mit den meisten kommerziellen
   Betriebssystemen einfach nicht mo:glich. Beispiele fu:r Anwendungen, die
   unter FreeBSD laufen, sind:

     * Internet-Dienste: Die robuste TCP/IP-Implementierung in FreeBSD macht
       es zu einer idealen Plattform fu:r verschiedenste Internet-Dienste,
       wie zum Beispiel:

          * HTTP-Server (Standard oder mit SSL-Verschlu:sselung)

          * IPv4- und IPv6-Routing

          * Firewall NAT ("IP-Masquerading")-Gateways

          * FTP-Server

          * E-Mail-Server

          * Und mehr...

     * Bildung: Sind Sie Informatikstudent oder Student eines verwandten
       Studiengangs? Die praktischen Einblicke in FreeBSD sind die beste
       Mo:glichkeit etwas u:ber Betriebssysteme, Rechnerarchitektur und
       Netzwerke zu lernen. Einige frei erha:ltliche CAD-, mathematische und
       grafische Anwendungen sind sehr nu:tzlich, gerade fu:r diejenigen,
       deren Hauptinteresse in einem Computer darin besteht, andere Arbeit zu
       erledigen!

     * Forschung: Mit dem frei verfu:gbaren Quellcode fu:r das gesamte System
       bildet FreeBSD ein exzellentes Studienobjekt in der Disziplin der
       Betriebssysteme, wie auch in anderen Zweigen der Informatik. Es ist
       beispielsweise denkbar, das ra:umlich getrennte Gruppen gemeinsam an
       einer Idee oder Entwicklung arbeiten. Das Konzept der freien
       Verfu:gbarkeit und -nutzung von FreeBSD ermo:glicht so die freie
       Verwendung, ohne sich gross Gedanken u:ber Lizenzbedingungen zu machen
       oder aufgrund von Beschra:nkungen evtl. in einem offenen Forum
       bestimmte Dinge nicht diskutieren zu du:rfen.

     * Netzwerkfa:higkeit: Brauchen Sie einen neuen Router? Oder einen
       Name-Server (DNS)? Eine Firewall zum Schutze Ihres Intranets vor
       Fremdzugriff? FreeBSD macht aus dem in der Ecke verstaubenden 386-
       oder 486-PC im Handumdrehen einen leistungsfa:higen Router mit
       anspruchsvollen Paketfilter-Funktionen.

     * Embedded: FreeBSD ist eine exzellente Plattform, um auf embedded
       Systemen aufzubauen. Mit der Unterstu:tzung fu:r die ARM(R)-, MIPS(R)-
       und PowerPC(R)-Plattformen, verbunden mit dem robusten Netzwerkstack,
       aktuellen Neuerungen und der freizu:gigen BSD-Lizenz stellt FreeBSD
       eine ausgezeichnete Basis fu:r embedded Router, Firewalls und andere
       Gera:te dar.

     * Desktop: FreeBSD ist eine gute Wahl fu:r kostengu:nstige X-Terminals
       mit dem frei verfu:gbaren X11-Server. FreeBSD bietet die Auswahl aus
       vielen Open Source Desktop Umgebungen, dazu geho:ren auch die GNOME
       und KDE GUIs. FreeBSD kann sogar "plattenlos" booten, was einzelne
       Workstations sogar noch gu:nstiger macht und die Verwaltung
       erleichtert.

     * Software-Entwicklung: Das Standard-FreeBSD-System wird mit einem
       kompletten Satz an Entwicklungswerkzeugen bereitgestellt, unter
       anderem einem vollsta:ndigen C/C++-Compiler und -Debugger.
       Entwicklungswerkzeugen. Viele zusa:tzliche Programmiersprachen fu:r
       Wissenschaft und Entwicklung sind aus der Ports- und Packages-Sammlung
       zu haben.

   FreeBSD ist sowohl in Form von Quellcode als auch in Bina:rform auf
   CD-ROM, DVD und u:ber Anonymus FTP erha:ltlich. Lesen Sie dazu Anhang A,
   Bezugsquellen fu:r FreeBSD, um weitere Informationen zum Bezug von FreeBSD
   zu erhalten.

  1.2.2. Wer verwendet FreeBSD?

   FreeBSDs fortgeschrittene Eigenschaften, bewa:hrte Sicherheit und
   vorhersehbare Release-Zyklen, genauso wie seine tolerante Lizenz haben
   dazu gefu:hrt, dass es als Plattform zum Aufbau vieler kommerzieller und
   quelloffener Gera:te und Produkte verwendet wird. Viele der weltgro:ssten
   IT-Unternehmen benutzen FreeBSD:

     * Apache - Die Apache Software Foundation la:sst den Grossteil seiner
       der O:ffentlichkeit zuga:nglichen Infrastruktur, inklusive des
       mo:glicherweise gro:ssten SVN-Repositories der Welt mit u:ber 1,4
       Millionen Commits, auf FreeBSD laufen.

     * Apple - OS X verwendet viel von FreeBSDs eigenem Netzwerkstack,
       virtuellem Dateisystem und den Benutzerumgebungskomponenten fu:r sein
       eigenes System. Apple iOS nutzt ebenso Elemente, die es von FreeBSD
       u:bernommen hat

     * Cisco - IronPort Network Sicherheits- und Anti-Spam-Appliance
       verwendet einen modifizierten FreeBSD-Kernel.

     * Citrix - Die NetScaler Reihe von Sicherheits-Appliances bietet auf den
       Schichten 4-7 Load-Balancing, Content Caching, Anwendungsfirewall,
       gesichertes VPN und mobilen Cloud-Netzwerkzugriff, gepaart mit der
       Ma:chtigkeit der FreeBSD-Shell.

     * Dell KACE - Die KACE Systemmanagement-Appliances nutzen FreeBSD wegen
       seiner Zuverla:ssigkeit, Skalierbarkeit und Gemeinschaft, welche deren
       zuku:nftige Weiterentwicklung fo:rdert.

     * Experts Exchange - Alle o:ffentlich zuga:nglichen Webserver werden von
       FreeBSD betrieben und machen starken Gebrauch von Jails, ohne den
       U:berhang von Virtualisierung, um Entwicklungs- und Testumgebung
       voneinander zu isolieren.

     * Isilon - Isilons Unternehmens-Speicherappliances basieren auf FreeBSD.
       Die extrem liberale FreeBSD-Lizenz erlaubt Isilon ihr intellektuelles
       Eigentum durch den gesamten Kernel zu integrieren und kann sich so auf
       das Erstellen ihres Produktes und nicht des Betriebssystems
       fokussieren.

     * iXsystems - Die TrueNAS-Linie von vereinheitlichten Speicherappliances
       beruht auf FreeBSD. Zusa:tzlich zu deren kommerziellen Produkten,
       managed iXsystems auch noch die beiden Open Source Projekte TrueOS und
       FreeNAS.

     * Juniper - Das JunOS Betriebssystem, welches alle Juniper
       Netzwerkgera:te (inklusive Router, Switche, Sicherheits- und
       Netzwerkappliances) antreibt, verwendet FreeBSD Juniper ist einer der
       vielen Hersteller, welcher das symbolische Verha:ltnis zwischen dem
       Projekt und dem Hersteller von kommerziellen Produkten darstellt.
       Verbesserungen, die Juniper entwickelt hat, werden ebenso in FreeBSD
       aufgenommen, um die Komplexita:t der Integration neuer Eigenschaften
       von FreeBSD zuru:ck in zuku:nftige JunOS Versionen zu vereinfachen.

     * McAfee - SecurOS, die Basis von McAfee Enterprise-Firewallprodukten
       inkl. Sidewinder basiert auf FreeBSD.

     * NetApp - Die Data ONTAP GX Reihe von Speicherappliances basieren auf
       FreeBSD. Zusa:tzlich hat NetApp viele Neuheiten beigesteuert,
       inklusive des neuen BSD-lizensierten Hypervisors bhyve.

     * Netflix - Die OpenConnect-Appliance, die Netflix verwendet, um Filme
       zu seinen Kunden zu streamen basiert auf FreeBSD. Netflix hat
       weitreichende Beitra:ge zum Quellcode von FreeBSD beigetragen und
       arbeitet daran, ein mo:glichst geringes Delta zur normalen Version
       beizubehalten. Netflix OpenConnect-Appliances sind fu:r mehr als 32%
       vom gesamten Internetverkehr in Nordamerika verantwortlich.

     * Sandvine - Sandvine nutzt FreeBSD as die Basis fu:r deren Echtzeit
       Hochgeschwindigkeits-Netzwerkplattform, welche den Kern deren
       intelligenter Netzwerkpolicy-Kontrollprodukte darstellt.

     * Sony - Die PlayStation 4 Spielekonsole verwendet eine modifizierte
       Version von FreeBSD.

     * Sophos - Das Sophos Email-Appliance Produkt basiert auf einem
       abgesicherten FreeBSD und scannt eingehende E-Mail auf Spam und Viren,
       wa:hrend es gleichzeitig ausgehende Mail auf Schadsoftware und
       versehentlichen Versand von vertraulichen Informationen u:berwacht.

     * Spectra Logic - Die nTier Reihe von archivspeicherfa:higen Appliances
       nutzt FreeBSD und OpenZFS.

     * Stormshield - Stormshield Network Security Appliances basieren auf
       einer abgesicherten Version von FreeBSD. Die BSD-Lizenz erlaubt es
       ihnen, ihr geistiges Eigentum in das System zu integrieren und
       gleichzeitig interessante Entwicklungen an die Gemeinschaft
       zuru:ckzugeben.

     * The Weather Channel - Die IntelliStar Appliance, welche am Kopfende
       eines jeden Kabelversorgers installiert ist und fu:r das Einspeisen
       von lokalen Wettervorhersagen in das Kabelfernsehprogramm
       verantwortlich ist, la:uft auf FreeBSD.

     * Verisign - Verisign ist fu:r den Betrieb der .com und .net
       Root-Domainregistries genauso verantwortlich wie fu:r die
       dazugeho:rige DNS-Infrastruktur. Sie verlassen sich auf einen Reihe
       von verschiedenen Netzwerkbetriebssystemen inklusive FreeBSD, um zu
       gewa:hrleisten, dass es keine gemeinsame Fehlerstelle in deren
       Infrastruktur gibt.

     * Voxer - Voxer verwendet ZFS auf FreeBSD fu:r ihre mobile
       Voice-Messaging-Platform. Voxer wechselte von einem Solaris-Derivat zu
       FreeBSD, wegen der ausgezeichneten Dokumentation und wegen der
       gro:sseren, aktiveren und sehr Entwickler freundlichen Gemeinschaft.
       Neben entscheidenen Merkmalen wie ZFS und DTrace bietet FreeBSD auch
       TRIM-Unterstu:tzung fu:r ZFS.

     * WhatsApp - Als WhatsApp eine Plattform beno:tigte, die in der Lage
       ist, mehr als 1 Million gleichzeitiger TCP-Verbindungen pro Server
       abzuarbeiten, entschied man sich fu:r FreeBSD. Anschliessend fuhren
       Sie damit fort, auf 2,5 Millionen Verbindungen pro Server
       hochzuskalieren.

     * Wheel Systems - Die FUDO Sicherheitsappliance erlaubt es Unternehmen,
       Vertragspartner und Administratoren, die an ihren Systemen arbeiten
       durchfu:hren, zu u:berwachen, zu kontrollieren, aufzuzeichnen und zu
       begutachten. Dies basiert auf all den besten Sicherheitseigenschaften
       von FreeBSD, inklusive ZFS, GELI, Capsicum, HAST und auditdistd.

   FreeBSD hat ebenfalls eine Reihe von verwandten Open Source Projekten
   hervorgebracht:

     * BSD Router - Einen FreeBSD-basierten Ersatz fu:r grosse
       Unternehmensrouter, der entwickelt wurde, um auf Standard PC-Hardware
       zu laufen.

     * FreeNAS - Ein eigens dafu:r entworfenes FreeBSD fu:r den Zweck als
       Netzwerk-Dateiserver Appliance zu fungieren. Es entha:lt eine
       Python-basierte Webschnittstelle, um das Management von sowohl UFS-
       als auch ZFS-Systemen zu vereinfachen. Enthalten sind NFS, SMB/CIFS,
       AFP, FTP und iSCSI. Ebenfalls enthalten ist ein erweiterteres
       Plugin-System basierend auf FreeBSD-Jails.

     * GhostBSD - Eine auf den Desktop-Einsatz orientierte Distribution von
       FreeBSD, welche mit einer Gnome-Desktop-Umgebung ausgeliefert wird.

     * mfsBSD - Eine Sammlung von Werkzeugen zum Erstellen von
       FreeBSD-Systemimages, welches ausschliesslich im Hauptspeicher la:uft.

     * NAS4Free - Eine Dateiserverdistribution basierend auf FreeBSD mit
       einer von PHP-getriebenen Webschnittstelle.

     * OPNSense - OPNSense ist eine quelloffene, einfach zu benutzende und
       auf FreeBSD basierende Firewall- und Router-Plattform. OPNSense
       entha:lt viele Funktionen die sonst nur in kommerziellen Firewalls
       enthalten sind und manchmal sogar mehr. Es kombiniert die
       vielfa:ltigen Funktionen kommerzieller Angebote mit den Vorteilen von
       offenen und nachpru:fbaren Quellen.

     * TrueOS - Eine massgeschneiderte Version von FreeBSD, die sich an
       Desktop-Benutzern mit graphischen Oberfla:chenwerkzeugen orientiert,
       um die Ma:chtigkeit von FreeBSD allen Benutzern zur Verfu:gung zu
       stellen. Entwickelt wurde sie mit dem Ziel, den U:bergang von Windows-
       und OS X-Benutzern zu erleichtern.

     * pfSense - Eine Firewalldistribution basierend auf FreeBSD mit eine
       grossen Menge von Fa:higkeiten und ausgedehnter IPv6-Unterstu:tzung.

     * ZRouter - Eine Open Source Firmware-Alternative fu:r eingebettete
       Gera:te, die auf FreeBSD basiert. Entwickelt wurde sie, um die
       proprieta:re Firmware von Standard-Routern zu ersetzen.

   FreeBSD wird auch dazu eingesetzt, um einige der gro:ssten Webseiten des
   Internets zu betreiben. Dazu geho:ren:

     * Yahoo!

     * Yandex

     * Rambler

     * Sina

     * Pair Networks

     * Sony Japan

     * Netcraft

     * Netflix

     * NetEase

     * Weathernews

     * TELEHOUSE America

   und viele weitere. Wikipedia pflegt eine Liste von Produkten, die auf
   FreeBSD basieren.

1.3. U:ber das FreeBSD Projekt

   Der folgende Abschnitt bietet einige Hintergrundinformationen zum FreeBSD
   Projekt, einschliesslich einem kurzen geschichtlichen Abriss, den
   Projektzielen und dem Entwicklungsmodell.

  1.3.1. Kurzer geschichtlicher Abriss zu FreeBSD

   Das FreeBSD Projekt erblickte das Licht der Welt Anfang 1993 teils als
   Auswuchs des "Unofficial 386BSD Patchkit" unter der Regie der letzten drei
   Koordinatoren des Patchkits: Nate Williams, Rod Grimes und Jordan Hubbard.

   Das urspru:ngliche Ziel war es, einen zwischenzeitlichen Abzug von 386BSD
   zu erstellen, um ein paar Probleme zu beseitigen, die das
   Patchkit-Verfahren nicht lo:sen konnte. Der fru:he Arbeitstitel fu:r das
   Projekt war "386BSD 0.5" oder "386BSD Interim" als Referenz darauf.

   386BSD war das Betriebssystem von Bill Jolitz, welches bis zu diesem
   Zeitpunkt heftig unter fast einja:hriger Vernachla:ssigung litt. Als das
   Patchkit mit jedem Tag anschwoll und unhandlicher wurde, entschied man
   sich, Bill Jolitz zu helfen, indem ein u:bergangsweise "bereinigter" Abzug
   zur Verfu:gung gestellt wurde. Diese Pla:ne wurden durchkreuzt, als Bill
   Jolitz plo:tzlich seine Zustimmung zu diesem Projekt zuru:ckzog, ohne
   einen Hinweis darauf, was stattdessen geschehen sollte.

   Das Trio entschied, dass das Ziel sich weiterhin lohnen wu:rde, selbst
   ohne die Unterstu:tzung von Bill und so wurde entschieden, den Namen
   FreeBSD zu verwenden, der von David Greenman gepra:gt wurde. Die
   anfa:nglichen Ziele wurden festgelegt, nachdem man sich mit den momentanen
   Benutzern des Systems besprach und abzusehen war, dass das Projekt die
   Chance hatte, Realita:t zu werden, kontaktierte Jordan Walnut Creek CDROM
   mit dem Vorhaben, FreeBSDs Verteilung auch auf diejenigen auszuweiten, die
   noch keinen Internetzugang besassen. Walnut Creek CDROM unterstu:tzte
   nicht nur die Idee durch die Verbreitung von FreeBSD auf CD, sondern ging
   auch so weit dass es dem Projekt eine Maschine mit schneller
   Internetverbindung zur Verfu:gung stellte, um damit zu arbeiten. Ohne den
   von Walnut Creek bisher nie dagewesenen Grad von Vertrauen in ein, zur
   damaligen Zeit, komplett unbekanntes Projekt, wa:re es unwahrscheinlich,
   dass FreeBSD so weit gekommen wa:re, wie es heute ist.

   Die erste auf CD-ROM (und netzweit) verfu:gbare Vero:ffentlichung war
   FreeBSD 1.0 im Dezember 1993. Diese basierte auf dem Band der 4.3BSD-Lite
   ("Net/2") der Universita:t von Kalifornien in Berkeley. Viele Teile
   stammten aus 386BSD und von der Free Software Foundation. Gemessen am
   ersten Angebot, war das ein ziemlicher Erfolg und Sie liessen dem das
   extrem erfolgreiche FreeBSD 1.1 im Mai 1994 folgen.

   Zu dieser Zeit formierten sich unerwartete Gewitterwolken am Horizont, als
   Novell und die Universita:t von Kalifornien in Berkeley (UCB) ihren langen
   Rechtsstreit u:ber den rechtlichen Status des Berkeley Net/2-Bandes mit
   einem Vergleich beilegten. Eine Bedingung dieser Einigung war es, dass die
   UCB grosse Teile des Net/2-Quellcodes als "belastet" zugestehen musste,
   und dass diese Besitz von Novell sind, welches den Code selbst einige Zeit
   vorher von AT&T bezogen hatte. Im Gegenzug bekam die UCB den "Segen" von
   Novell, dass sich das 4.4BSD-Lite-Release bei seiner endgu:ltigen
   Vero:ffentlichung als unbelastet bezeichnen darf. Alle Net/2-Benutzer
   sollten auf das neue Release wechseln. Das betraf auch FreeBSD. Dem
   Projekt wurde eine Frist bis Ende Juli 1994 eingera:umt, das auf
   Net/2-basierende Produkt nicht mehr zu vertreiben. Unter den Bedingungen
   dieser U:bereinkunft war es dem Projekt noch erlaubt ein letztes Release
   vor diesem festgesetzten Zeitpunkt herauszugeben. Das war FreeBSD 1.1.5.1.

   FreeBSD machte sich dann an die beschwerliche Aufgabe, sich Stu:ck fu:r
   Stu:ck aus einem neuen und ziemlich unvollsta:ndigen Satz von
   4.4BSD-Lite-Teilen, wieder aufzubauen. Die "Lite" -Vero:ffentlichungen
   waren deswegen leicht, weil Berkeleys CSRG grosse Code-Teile, die fu:r ein
   start- und lauffa:higes System gebraucht wurden, aufgrund diverser
   rechtlicher Anforderungen entfernen musste und weil die 4.4-Portierung
   fu:r Intel-Rechner extrem unvollsta:ndig war. Das Projekt hat bis November
   1994 gebraucht diesen U:bergang zu vollziehen. Im Dezember wurde dann
   FreeBSD 2.0 vero:ffentlicht. Obwohl FreeBSD gerade die ersten Hu:rden
   genommen hatte, war dieses Release ein massgeblicher Erfolg. Diesem folgte
   im Juni 1995 das robustere und einfacher zu installierende FreeBSD 2.0.5.

   Seit dieser Zeit hat FreeBSD eine Reihe von Releases vero:ffentlicht, die
   jedes mal die Stabilita:t, Geschwindigkeit und Menge an verfu:gbaren
   Eigenschaften der vorherigen Version verbessert.

   Momentan werden langfristige Entwicklungsprojekte im 10.X-CURRENT
   (Trunk)-Zweig durchgefu:hrt, und Abzu:ge (Snapshots) der Releases von 10.X
   werden regelma:ssig auf den Snapshot-Servern zur Verfu:gung gestellt.

  1.3.2. Ziele des FreeBSD-Projekts

   Beigetragen von Jordan Hubbard.

   Das FreeBSD Projekt stellt Software her, die ohne Einschra:nkungen fu:r
   beliebige Zwecke eingesetzt werden kann. Viele von uns haben betra:chtlich
   in Quellcode und das Projekt investiert und ha:tten sicher nichts dagegen,
   hin und wieder ein wenig finanziellen Ausgleich dafu:r zu bekommen. Aber
   in keinem Fall bestehen wir darauf. Wir glauben unsere erste und
   wichtigste "Mission" ist es, Software fu:r jeden Interessierten und zu
   jedem Zweck zur Verfu:gung zu stellen, damit die Software gro:sstmo:gliche
   Verbreitung erlangt und gro:sstmo:glichen Nutzen stiftet. Das ist, glaube
   ich, eines der grundlegenden Ziele freier Software, welche wir mit
   gro:sster Begeisterung unterstu:tzen.

   Der Code in unserem Quellbaum, der unter die General Public License (GPL)
   oder die Library General Public License (LGPL) fa:llt, stellt geringfu:gig
   mehr Bedingungen. Das aber vielmehr im Sinne von eingefordertem Zugriff,
   als das u:bliche Gegenteil der Beschra:nkungen. Aufgrund zusa:tzlicher
   Abha:ngigkeiten, die sich durch die Verwendung von GPL-Software bei
   kommerziellem Gebrauch ergeben, bevorzugen wir daher Software unter dem
   transparenteren BSD-Copyright, wo immer es angebracht ist.

  1.3.3. Das FreeBSD-Entwicklungsmodell

   Beigetragen von Satoshi Asami.

   Die Entwicklung von FreeBSD ist ein offener und flexibler Prozess, der
   durch den Beitrag von buchsta:blich tausenden Leuten rund um die Welt
   ermo:glicht wird, wie an der Liste der Beitragenden ersehen ko:nnen. Die
   vielen Entwickler ko:nnen aufgrund der Entwicklungs-Infrastruktur von
   FreeBSD u:ber das Internet zusammenarbeiten. Wir suchen sta:ndig nach
   neuen Entwicklern, Ideen und jenen, die sich in das Projekt tiefer
   einbringen wollen. Nehmen Sie einfach auf der Mailingliste FreeBSD
   technical discussions Kontakt mit uns auf. Die Mailingliste FreeBSD
   announcements steht fu:r wichtige Anku:ndigungen, die alle
   FreeBSD-Benutzer betreffen, zur Verfu:gung.

   Unabha:ngig davon ob Sie alleine oder mit anderen eng zusammen arbeiten,
   entha:lt die folgende Aufstellung nu:tzliche Informationen u:ber das
   FreeBSD Projekt und dessen Entwicklungsabla:ufe.

   Die SVN-Repositories

           Der Hauptquellbaum von FreeBSD wurde u:ber viele Jahre
           ausschliesslich mit CVS (Concurrent-Versions-System) gepflegt,
           einem frei erha:ltlichen Versionskontrollsystem. Im Juni 2008
           begann das FreeBSD Project mit dem Umstieg auf SVN (Subversion).
           Dieser Schritt wurde notwendig, weil durch technische
           Einschra:nkungen von CVS aufgrund des rapide wachsenden
           Quellcodebaumes und dem Umfang der bereits gespeichterten
           Revisisionsinformationen an dessen Grenzen zu stossen begann. Die
           Repositories des Dokumentationsprojekts und die Ports-Sammlung
           wurden ebenfalls von CVS zu SVN im Mai und Juli 2012 umgezogen.
           Lesen Sie dazu Synchronisation der Quellen fu:r weitere
           Informationen zum Beziehen der FreeBSD src/ Repository und Die
           Ports-Sammlung verwenden fu:r Details zum Beziehen der FreeBSD
           Ports-Sammlung.

   Die Committer-Liste

           Die Committer sind diejenigen Leute, welche schreibenden Zugriff
           auf den Subversion-Baum besitzen und berechtigt sind, A:nderungen
           an den FreeBSD-Quellen (der Begriff "Committer" stammt aus dem
           Versionskontrollbefehl commit , der dazu verwendet wird,
           A:nderungen in das Repository zu bringen). Jeder hat die
           Mo:glichkeit u:ber die die Datenbank fu:r Problemberichte einen
           Fehlerreport einzureichen. Bevor Sie einen Fehlerreport
           einreichen, sollten Sie auf den FreeBSD Mailinglisten, den
           IRC-Kana:len oder in Foren u:berpru:fen, ob das Problem
           tatsa:chlich ein Fehler ist.

   The FreeBSD core team

           Die FreeBSD core team ist mit dem Vorstand vergleichbar, wenn das
           FreeBSD Projekt ein Unternehmen wa:re. Die Hauptaufgabe des Core
           Teams ist es sicherzustellen, dass sich das Projekt als Ganzes in
           einem guten Zustand befindet und sich in die richtige Richtung
           bewegt. Das Einladen von engagierten und verantwortungsvollen
           Entwicklern zu dem Zweck, sich der Gruppe von Committern
           anzuschliessen, ist eine der Funktionen des Core Teams, genauso
           wie neue Mitglieder des Core Teams zu rekrutieren, wenn andere
           ausscheiden. Das aktuelle Core Team wurde aus einer Menge von
           Kandidaten aus dem Kreis der Committer im Juli 2014 gewa:hlt.
           Wahlen werden alle zwei Jahre abgehalten.

  Anmerkung:

           Wie die meisten Entwickler auch, sind die Mitglieder des Core
           Teams Freiwillige, wenn es um die Entwicklung von FreeBSD geht und
           erhalten keinerlei finanziellen Vorteil aus dem Projekt, deshalb
           sollte "Verpflichtung" nicht fehlverstanden werden mit
           "garantierter Unterstu:tzung". Die "Vorstands"-Analogie oben ist
           nicht sehr akkurat und kann vielleicht besser damit umschrieben
           werden, dass diese Leute ihr Leben fu:r FreeBSD gegen jedwede
           Vernunft geopfert haben.

   Aussenstehende Beitragende

           Schliesslich stellt die gro:sste, aber nichtsdestotrotz wichtigste
           Gruppe von Entwicklern die der Benutzer selbst dar, die stetig
           Ru:ckmeldungen und Fehlerbehebungen liefert. Der hauptsa:chliche
           Weg mit FreeBSDs nicht-zentralisierter Entwicklung Kontakt zu
           halten, ist, die FreeBSD technical discussions Mailingliste zu
           abonnieren, auf der solche Dinge diskutiert werden. Lesen Sie dazu
           Anhang C, Ressourcen im Internet fu:r weitere Informationen u:ber
           die verschiedenen FreeBSD-Mailinglisten.

           Liste der Beitragenden ist eine, die lang ist und stetig wa:chst,
           also warum nicht FreeBSD beitreten und noch heute etwas
           zuru:ckgeben?

           Code ist nicht die einzige Art, zu dem Projekt etwas beizutragen.
           Fu:r eine ausfu:hrlichere Liste von Dingen die getan werden
           mu:ssen, lesen Sie auf der FreeBSD Projektwebseite.

   Zusammenfassend ist unser Entwicklungsmodell als eine lose Menge von
   konzentrischen Kreisen organisiert. Das zentralisierte Modell ist mit der
   Praktikabilita:t der Anwender von FreeBSD entworfen worden, die mit der
   einfachen Art einhergeht, eine zentrale Basis fu:r den Code zu haben und
   keine potentiellen Beitra:ge auszuschliessen! Unser Ansporn ist es, ein
   stabiles Betriebssystem mit einer grossen Menge von koha:renten
   Anwendungsprogrammen, welches die Benutzer einfach installieren und
   verwenden ko:nnen - dieses Modell funktioniert darin sehr gut, dieses Ziel
   zu erreichen.

   Alles was wir von denen verlangen, die uns als FreeBSD-Entwickler
   beitreten ist, etwas von der gleichen Hingabe an den Erfolg, die seine
   momentanen Gemeinschaft inne hat, zu besitzen.

  1.3.4. Programme von Drittherstellern

   Zusa:tzlich zur Basisdistribution bietet FreeBSD eine Sammlung von
   portierter Software mit tausenden der am meisten nachgefragten Programme
   an. Als diese Zeilen geschrieben wurden, gab es u:ber 24,000 Ports! Die
   Liste der Ports reicht von HTTP-Servern, zu Spielen, Sprachen, Editoren
   und so ziemlich alles, was dazwischen liegt. Die gesamte Port-Sammlung ist
   gescha:tzt 500 MB gross. Um einen Port zu u:bersetzen, wechseln Sie
   einfach in das Verzeichnis des Programms, das sie installieren mo:chten
   und geben make install ein und das System erledigt den Rest. Die gesamte
   Originaldistribution fu:r jeden Port, den Sie bauen wird dynamisch
   heruntergeladen, so dass sie nur genu:gend Plattenplatz zum bauen des
   Ports, den sie haben mo:chten, zur Verfu:gung stellen mu:ssen. Fast jeder
   Port ist auch als vorkompiliertes"Paket", das u:ber das folgende einfache
   Kommando (pkg install) fu:r diejenigen, die keine kompilierten Port aus
   den Quellen wu:nschen. Weitere Informationen zu Ports und Paketen finden
   Sie in Kapitel 4, Installieren von Anwendungen: Pakete und Ports.

  1.3.5. Zusa:tzliche Dokumentation

   Alle unterstu:tzten FreeBSD Versionen bieten eine Option, um zusa:tzliche
   Dokumentation unter /usr/local/share/doc/freebsd wa:hrend des initialen
   Systemsetups zu installieren. Dokumentation kann auch zu einem spa:teren
   Zeitpunkt u:ber Pakete installiert werden, wie es Abschnitt 23.3.2, "Die
   Dokumentation aus den Ports aktualisieren" beschreibt. Sie ko:nnen ebenso
   die lokal installierten Anleitungen mit jedem HTML-fa:higen Browser lesen,
   indem Sie die folgende URL verwenden:

   Das FreeBSD Handbuch

           /usr/local/share/doc/freebsd/handbook/index.html

   Die FreeBSD FAQ

           /usr/local/share/doc/freebsd/faq/index.html

   Genauso erhalten Sie auch die Master (und am ha:ufigsten aktualisierten)
   Kopien von https://www.FreeBSD.org/.

Kapitel 2. FreeBSD installieren

   Restructured, reorganized, and parts rewritten by Jim Mock.
   Updated for bsdinstall by Gavin Atkinson und Warren Block.
   Erweitert um root-on-ZFS von Allan Jude.
   U:bersetzt von Benedict Reuschling.
   Inhaltsverzeichnis

   2.1. U:bersicht

   2.2. Minimale Hardwareanforderungen

   2.3. Vor der Installation

   2.4. Die Installation starten

   2.5. Verwendung von bsdinstall

   2.6. Plattenplatz bereitstellen

   2.7. Die Installation festschreiben

   2.8. Arbeiten nach der Installation

   2.9. Fehlerbehebung

   2.10. Verwendung der Live-CD

2.1. U:bersicht

   Beginnend mit FreeBSD 9.0-RELEASE entha:lt FreeBSD ein text-basiertes,
   einfach zu verwendendes Installationsprogramm namens bsdinstall. Dieses
   Kapitel beschreibt die Installation von FreeBSD mit Hilfe von bsdinstall.

   Die Installationsanweisungen in diesem Kapitel gelten fu:r die i386(TM)-
   und AMD64-Architekturen. Gegebenenfalls werden spezifische Anweisungen
   fu:r andere Plattformen erwa:hnt. Mo:glicherweise gibt es auch
   geringfu:gige Unterschiede zwischen dem Installationsprogramm und dem, was
   hier gezeigt wird. Sie sollten dieses Kapitel daher als eine Art Wegweiser
   und nicht als exakte Anleitung betrachten.

  Anmerkung:

   Benutzer, die es vorziehen, FreeBSD mit einem graphischen
   Installationsprogramm zu installieren, sind vielleicht an pc-sysinstall,
   dem Installationsprogramm des TrueOS Projekts interessiert. Dieses
   Installationsprogramm wird benutzt, um einen graphischen Desktop (TrueOS)
   oder eine Kommandozeilen-Version von FreeBSD zu installieren. Weitere
   Details finden Sie im TrueOS Handbuch (
   https://www.trueos.org/handbook/trueos.html).

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen:

     * welche Mindestanforderungen an die Hardware gestellt werden und welche
       Architekturen FreeBSD unterstu:tzt.

     * wie man FreeBSD Installationsmedien erstellt.

     * wie man bsdinstall startet.

     * welche Fragen bsdinstall stellt, was sie bedeuten und wie man diese
       beantwortet.

     * wie Sie Fehler bei der Installation beheben.

     * wie Sie eine Live-Version von FreeBSD ausprobieren ko:nnen, bevor Sie
       die Installation starten.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Die Liste von unterstu:tzter Hardware lesen, die mit der zu
       installierenden Version von FreeBSD ausgeliefert wird, um
       sicherzustellen, dass die Hardware auch unterstu:tzt wird.

2.2. Minimale Hardwareanforderungen

   Die Hardwareanforderungen zur Installation von FreeBSD variieren mit der
   Architektur. Hardwarearchitekturen und von FreeBSD unterstu:tzte Gera:te
   sind auf der Seite FreeBSD Release Informationen aufgelistet. Die FreeBSD
   Download Seite entha:lt Informationen zur Auswahl des richtigen Abbilds
   fu:r verschiedene Architekturen.

   Fu:r die Installation von FreeBSD sind mindestens 96 MB RAM und 1.5 GB
   freier Festplattenspeicher erforderlich. Allerdings ist eine solch geringe
   Menge an Arbeitsspeicher und Speicherplatz nur fu:r spezifische
   Anwendungen ausreichend, beispielsweise fu:r Embedded-Gera:te.
   Desktop-Systeme beno:tigen weitaus mehr Ressourcen. 2-4 GB RAM und
   mindestens 8 GB Speicherplatz sind ein guter Anfang.

   Dies sind die Anforderungen an den Prozessor fu:r jede Architektur:

   amd64

           Dies ist die ga:ngigste Art von Prozessor fu:r Desktop- und
           Laptop-Systeme. Andere Anbieter nennen diese Architektur auch
           x86-64.

           Beispiele fu:r amd64-kompatible Prozessoren umfassen:
           AMD Athlon(TM)64, AMD Opteron(TM), multi-core Intel(R) Xeon(TM)
           und Intel(R) Core(TM) 2 sowie neuere Prozessoren.

   i386

           A:ltere Desktop- und Laptop-Systeme verwenden oft die 32-Bit
           x86-Architektur.

           Fast alle i386-kompatiblen Prozessoren mit einer
           Floating-Point-Einheit werden unterstu:tzt. Alle
           Intel(R)-Prozessoren 486 oder neuer werden unterstu:tzt.

           FreeBSD nutzt die Physical Adress Extensions (PAE), falls die CPU
           diese Funktion unterstu:tzt. Wenn PAE im Kernel aktiviert ist,
           wird Speicher u:ber 4 GB vom Kernel erkannt und kann von System
           verwendet werden. PAE schra:nkt allerdings auch die Gera:tetreiber
           und anderen Komponenten von FreeBSD ein. Einzelheiten finden Sie
           in pae(4).

   ia64

           Die derzeit unterstu:tzten Prozessoren sind Itanium(R) und
           Itanium(R) 2. Zu den unterstu:tzten Chipsa:tzen za:hlen HP zx1,
           Intel(R) 460GX und Intel(R) E8870. Sowohl Einprozessorsysteme (UP)
           als auch Mehrprozessorsysteme (SMP werden unterstu:tzt.

   pc98

           Die NEC PC-9801/9821-Serie mit fast allen i386-kompatiblen
           Prozessoren, einschliesslich 80486, Pentium(R), Pentium(R) Pro und
           Pentium(R) II werden unterstu:tzt. Alle i386-kompatiblen
           Prozessoren von AMD, Cyrix, IBM und IDT werden ebenfalls
           unterstu:tzt. Ebenso die EPSON PC-386/486/586-Serie, welche mit
           der NEC-Serie PC-9801 kompatibel ist. NEC FC-9801/9821 und die NEC
           SV-98-Serie sollte ebenfalls unterstu:tzt werden.

           Der hochauflo:sende Modus wird nicht unterstu:tzt. NEC
           PC-98XA/XL/RL/XL^2 und die NEC PC-H98-Serie werden nur im normalen
           (PC-9801 kompatibel) Modus unterstu:tzt. Die SMP bezogenen
           Funktionen von FreeBSD werden nicht unterstu:tzt. Auch der New
           Extend Standard Architecture (NESA) Bus, verwendet in den Serien
           PC-H98, SV-H98 und FC-H98, wird nicht unterstu:tzt.

   powerpc

           Alle New Word ROM Apple(R) Mac(R)-Systeme mit integriertem USB
           werden unterstu:tzt. SMP wird auf Maschinen mit mehreren CPUs
           unterstu:tzt.

           Ein 32-Bit Kernel kann jedoch nur die ersten 2 GB RAM verwenden.

   sparc64

           Systeme, die von FreeBSD/sparc64 unterstu:tzt werden, sind auf der
           FreeBSD/sparc64-Projektseite aufgelistet.

           SMP wird auf allen Systemen mit mehr als einem Prozessor
           unterstu:tzt. Eine dedizierte Platte wird beno:tigt, da es nicht
           mo:glich ist, eine Platte mit einem anderen Betriebssystem zur
           gleichen Zeit zu teilen.

2.3. Vor der Installation

   Wenn das System die Mindestanforderungen fu:r die Installation von FreeBSD
   erfu:llt, sollte die Installationsdatei heruntergeladen und die
   Installationsmedien vorbereitet werden. Bevor Sie dies tun, pru:fen Sie
   mit Hilfe dieser Checkliste, ob das System fu:r die Installation bereit
   ist:

    1. Sichern Sie wichtige Daten

       Erstellen Sie immer eine Sicherung aller wichtigen Daten, bevor Sie
       ein Betriebssystem installieren. Speichern Sie die Daten jedoch nicht
       auf dem System, auf dem das Betriebssystem installiert wird, sondern
       nutzen Sie einen Wechseldatentra:ger, wie beispielsweise ein
       USB-Laufwerk, oder sichern Sie auf einem anderen System im Netzwerk,
       oder nutzen einen Online-Backup-Dienst. U:berpru:fen Sie die
       Sicherungen, bevor Sie mit der Installation beginnen. Sobald das
       Installationsprogramm die Festplatte des Systems formatiert, gehen
       alle gespeicherten Daten unwiderruflich verloren.

    2. Den Installationsort von FreeBSD festlegen

       Falls FreeBSD das einzige installierte Betriebssystem sein wird, kann
       dieser Schritt u:bersprungen werden. Sollte FreeBSD allerdings die
       Platte mit anderen Betriebssystemen teilen, mu:ssen Sie entscheiden,
       welche Platte oder Partition fu:r FreeBSD verwendet werden soll.

       Fu:r die Architekturen i386 und amd64 ko:nnen die Platten in mehrere
       Partitionen aufgeteilt werden. Dazu stehen Ihnen zwei
       Partitionsschemata zur Verfu:gung. Traditionell entha:lt ein Master
       Boot Record (MBR) eine Partitionstabelle, welche bis zu vier prima:re
       Partitionen aufnehmen kann. Aus historischen Gru:nden werden diese
       prima:ren Partitionen in FreeBSD slices genannt. Eine Begrenzung von
       nur vier Partitionen ist fu:r grosse Platten sehr beschra:nkt, so dass
       eine dieser prima:ren Partitionen als erweiterte Partition eingesetzt
       wird. Mehrere logische Partitionen ko:nnen dann innerhalb der
       erweiterten Partition angelegt werden. Die GUID-Partitionstabelle
       (GPT) ist eine neuere und einfachere Methode zur Partition einer
       Festplatte. Gela:ufige GPT-Implementierungen erlauben bis zu 128
       Partitionen pro Platte, was die Notwendigkeit von logischen
       Partitionen eliminiert.

  Warnung:

       Manche a:lteren Betriebssysteme wie Windows(R) XP sind mit dem
       GPT-Partitionsschema nicht kompatibel. Wenn sich FreeBSD die Platte
       mit einem solchen Betriebssystem teilen soll, werden MBR Partitionen
       beno:tigt.

       FreeBSDs Standard-Bootloader beno:tigt entweder eine prima:re oder
       eine GPT-Partition. Wenn alle prima:ren oder GPT-Partitionen bereits
       in Verwendung sind, muss eine davon fu:r FreeBSD zur Verfu:gung
       gestellt werden. Benutzen Sie ein Werkzeug zur Vera:nderung der
       Partitionsgro:ssen, wenn Sie eine Partition erstellen mo:chten, ohne
       dabei vorhandene Daten zu lo:schen. Den freigegebenen Platz ko:nnen
       Sie dann fu:r die Installation verwenden.

       Eine Vielzahl freier und kommerzieller Werkzeuge zur Vera:nderung der
       Partitionsgro:ssen finden Sie unter
       http://en.wikipedia.org/wiki/List_of_disk_partitioning_software.
       GParted Live (http://gparted.sourceforge.net/livecd.php) ist eine
       freie Live-CD, die den GParted-Partitionseditor entha:lt. GParted ist
       auch in einer Vielzahl von anderen Linux Live-CD Distributionen
       enthalten.

  Warnung:

       Bei richtiger Anwendung ko:nnen Werkzeuge zur Vera:nderung von
       Partitionsgro:ssen auf sichere Art und Weise Platz fu:r eine neue
       Partition schaffen. Erstellen Sie trotzdem eine Vollsicherung und
       u:berpru:fen Sie deren Integrita:t bevor Sie die Partitionen auf der
       Platte vera:ndern.

       Festplattenpartitionen, die unterschiedliche Betriebssysteme
       enthalten, ermo:glichen es, jeweils eines dieser Systeme zu verwenden.
       Eine alternative Mo:glichkeit, mehrere Betriebssysteme gleichzeitig
       einzusetzen, ohne dabei Partitionen a:ndern zu mu:ssen, wird im
       Kapitel 21, Virtualisierung behandelt.

    3. Netzwerkparameter ermitteln

       Manche FreeBSD Installationsarten beno:tigen eine Netzwerkverbindung,
       um Installationsdateien herunter zu laden. Nach jeder Installation
       bietet das Installationsprogramm die Mo:glichkeit, die
       Netzwerkschnittstellen des Systems zu konfigurieren.

       Steht im Netzwerk ein DHCP-Server zur Verfu:gung, wird dieser im
       Allgemeinen verwendet, um automatisch Netzwerkeinstellungen
       vorzunehmen. Falls DHCP nicht verfu:gbar ist, mu:ssen die folgenden
       Netzwerkeinstellungen beim lokalen Netzwerkadministrator oder Provider
       erfragt werden:

       Erforderliche Informationen zum Netzwerk
         1. IP-Adresse

         2. Subnetz-Maske

         3. IP-Adresse des Default-Gateway

         4. Doma:nenname des Netzwerks

         5. IP-Adressen der DNS-Server im Netzwerk

    4. Lesen Sie die FreeBSD-Errata

       Obwohl das FreeBSD Projekt sich bemu:ht, jede vero:ffentlichte Version
       von FreeBSD so stabil wie mo:glich zu machen, ko:nnen sich doch
       gelegentlich Fehler in den Vero:ffentlichungsprozess einschleichen. In
       sehr seltenen Fa:llen betreffen diese Fehler den Installationsvorgang.
       Wenn diese Probleme entdeckt und behoben sind, werden dazu Hinweise in
       der FreeBSD Errata (
       http://www.freebsd.org/releases/11.1R/errata.html) auf der FreeBSD
       Webseite vero:ffentlicht. Pru:fen Sie die Errata vor der Installation,
       um sicherzustellen, dass es keine Probleme gibt, welche die
       Installation betreffen.

       Informationen und Errata fu:r all diese Vero:ffentlichungen finden Sie
       unter den Release Informationen auf der FreeBSD Webseite (
       http://www.freebsd.org/releases/index.html).

  2.3.1. Die Installationsmedien vorbereiten

   Das FreeBSD-Installationsprogramm ist keine Anwendung, das aus einem
   anderen Betriebssystem heraus gestartet werden kann. Laden Sie stattdessen
   eine Installationsdatei fu:r FreeBSD herunter und brennen Sie den Dateityp
   auf einen entsprechenden Datentra:ger (CD, DVD, oder USB). Starten Sie
   dann das System mit diesem Datentra:ger.

   Die FreeBSD-Installationsmedien sind unter
   www.freebsd.org/where.html#download verfu:gbar. Der Name der
   Installationsdatei entha:lt die Version von FreeBSD, die Architektur sowie
   den Dateityp. Wenn Sie beispielsweise FreeBSD 10.2 auf einem amd64-System
   von DVD installieren wollen, laden Sie FreeBSD-10.2-RELEASE-amd64-dvd1.iso
   und brennen Sie die Datei auf eine DVD. Starten Sie dann das System mit
   dieser DVD.

   Die Installationsdateien stehen in verschiedenen Formaten zur Verfu:gung
   und variieren je nach Rechnerarchitektur und Medientyp.

   Fu:r Rechner, die mit UEFI (Unified Extensible Firmware Interface) booten,
   stehen zusa:tzliche Installationsdateien zur Verfu:gung. Die Namen dieser
   Dateien enthalten die Zeichenkette uefi.

   Dateitypen:

     * -bootonly.iso: Dies ist die kleinste Installation, die lediglich das
       Installationsprogramm entha:lt. Hierzu ist wa:hrend der Installation
       eine funktionierende Internetverbindung erforderlich, da das
       Installationsprogramm die beno:tigen Dateien fu:r die
       FreeBSD-Installation herunter laden muss. Diese Datei sollte mit einem
       CD-Brennprogramm auf CD gebrannt werden.

     * -disc1.iso: Diese Datei entha:lt alle beno:tigten Dateien fu:r eine
       FreeBSD-Installation, den Quellcode und die Ports-Sammlung. Die Datei
       sollte mit einem CD-Brennprogramm auf CD gebrannt werden.

     * -dvd1.iso: Diese Datei entha:lt alle beno:tigen Dateien fu:r eine
       FreeBSD-Installation, den Quellcode und die Ports-Sammlung. Daru:ber
       hinaus entha:lt sie eine Reihe von beliebten Bina:rpaketen zur
       Installation eines Window-Managers, sodass Sie ein komplettes System
       installieren ko:nnen, ohne dass Sie eine Verbindung zum Internet
       beno:tigen. Die Datei sollte mit einem DVD-Brennprogramm auf eine DVD
       gebrannt werden.

     * -memstick.img: Diese Datei entha:lt alle beno:tigten Dateien fu:r eine
       FreeBSD-Installation, den Quellcode und die Ports-Sammlung. Die Datei
       sollte mit den nachstehenden Anweisungen auf einen USB-Stick
       geschrieben werden.

     * -mini-memstick.img: Diese Datei entha:lt, wie -bootonly.iso, keine
       Installationsdateien, sondern la:dt diese bei Bedarf nach. Wa:hrend
       der Installation wird eine funktionierende Internetverbindung
       beno:tigt. Schreiben Sie die Datei, wie in Abschnitt 2.3.1.1, "Eine
       Installationsdatei auf einen USB-Stick schreiben" beschrieben, auf
       einen USB-Stick.

   Nachdem Sie die Datei heruntergeladen haben, laden Sie CHECKSUM.SHA256 aus
   dem gleichen Verzeichnis herunter. Berechnen Sie dann die Pru:fsumme fu:r
   die Datei. FreeBSD bietet hierfu:r sha256(1), das Sie als sha256 Dateiname
   aufrufen ko:nnen. Andere Betriebssysteme haben a:hnliche Programme.

   Vergleichen Sie die berechnete Pru:fsumme mit der in CHECKSUM.SHA256. Die
   beiden Pru:fsummen mu:ssen u:bereinstimmen, ansonsten ist die Datei
   bescha:digt und muss erneut heruntergeladen werden.

    2.3.1.1. Eine Installationsdatei auf einen USB-Stick schreiben

   Die *.img-Datei ist ein komplettes Abbild (engl. Image) des spa:teren
   USB-Sticks. Die Datei kann nicht auf das Zielgera:t kopiert werden. Es
   existieren jedoch mehrere Programme, mit denen die *.img-Datei auf einen
   USB-Stick geschrieben werden kann. In diesem Abschnitt werden zwei dieser
   Programme vorgestellt.

  Wichtig:

   Bevor Sie fortfahren, machen Sie Sicherungskopien der Daten auf dem
   USB-Stick. Diese Prozedur wird alle Daten auf dem Stick lo:schen.

   Prozedur 2.1. Das Image mit dd auf einen USB-Stick schreiben

  Warnung:

   Dieses Beispiel verwendet /dev/da0 als das Zielgera:t, auf welches das
   Image geschrieben werden soll. Seien Sie sehr vorsichtig, dass das
   richtige Gera:t benutzt wird, da das Kommando alle vorhandenen Daten auf
   dem Zielgera:t zersto:rt.

     * Das Werkzeug dd(1) steht unter BSD, Linux(R) und Mac OS(R)-Systemen
       zur Verfu:gung. Um das Image zu brennen, verbinden Sie den USB-Stick
       mit dem System und bestimmen Sie dessen Gera:tenamen. Geben Sie dann
       den Namen der Installationsdatei und den Gera:tenamen des USB-Sticks
       an. Dieses Beispiel schreibt die Installation fu:r amd64 auf das erste
       USB-Gera:t im FreeBSD-System.

 # dd if=FreeBSD-10.2-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync

       Wenn dieser Befehl fehlschla:gt, stellen Sie sicher, dass der
       USB-Stick nicht eingehangen ist und pru:fen Sie den Gera:tenamen. Auf
       einigen Systemen muss der Befehl vielleicht mit Hilfe von sudo(8)
       ausgefu:hrt werden. Einige Systeme wie Linux(R) verwenden vielleicht
       einen Puffer. Verwenden Sie dann sync(8), um die Daten zu schreiben.

   Prozedur 2.2. Das Image unter Windows(R) schreiben

  Warnung:

   Versichern Sie sich, dass Sie den korrekten Laufwerksbuchstaben angeben,
   da die bestehenden Daten des Laufwerks u:berschrieben und zersto:rt
   werden.

    1. Image Writer fu:r Windows(R) herunterladen

       Image Writer fu:r Windows(R) ist eine frei verfu:gbare Anwendung,
       welche eine Imagedatei korrekt auf einen USB-Stick schreiben kann.
       Laden Sie diese von https://sourceforge.net/projects/win32diskimager/
       herunter und entpacken Sie sie in ein Verzeichnis.

    2. Das Image mit Image Writer auf den USB-Stick schreiben

       Klicken Sie doppelt auf das Win32DiskImager-Icon, um das Programm zu
       starten. Pru:fen Sie dabei, dass der Laufwerksbuchstabe unter Device
       dem Gera:t entspricht, in dem sich der USB-Stick befindet. Klicken Sie
       auf das Ordnersymbol und wa:hlen Sie das Image aus, welches auf den
       USB-Stick geschrieben werden soll. Um den Image-Dateinamen zu
       akzeptieren, klicken Sie auf [ Save ]. U:berpru:fen Sie erneut, ob
       alles stimmt und dass keine Ordner auf dem USB-Stick in anderen
       Fenstern geo:ffnet sind. Sobald alles bereit ist, klicken Sie auf
       [ Write ], um die Imagedatei auf den USB-Stick zu schreiben.

   Sie sind jetzt dazu bereit, mit der Installation von FreeBSD zu beginnen.

2.4. Die Installation starten

  Wichtig:

   Es werden bei Installation so lange keine A:nderungen an den Festplatten
   durchgefu:hrt, bis die folgende Meldung erscheint:

 Your changes will now be written to disk.  If you
 have chosen to overwrite existing data, it will
 be PERMANENTLY ERASED. Are you sure you want to
 commit your changes?

   Die Installation kann vor dieser Warnung zu jeder Zeit abgebrochen werden.
   Falls Zweifel bestehen, dass etwas falsch konfiguriert wurde, schalten Sie
   einfach den Computer vor diesem Punkt aus und es werden keine A:nderungen
   an der Festplatte vorgenommen.

   Dieser Abschnitt beschreibt, wie das System vom Installationsmedium, das
   nach den Anweisungen in Abschnitt 2.3.1, "Die Installationsmedien
   vorbereiten" erstellt wurde, gebootet wird. Wenn Sie einen bootfa:higen
   USB-Stick einsetzen, verbinden Sie diesen mit dem System, bevor Sie den
   Computer einschalten. Falls die Installation von einer CD startet, mu:ssen
   Sie den Computer einschalten und die CD so bald wie mo:glich einlegen. Wie
   das System konfiguriert werden muss, um von dem verwendeten
   Installationsmedium zu booten, ha:ngt von der Architektur ab.

  2.4.1. Systemstart von i386(TM) und amd64

   Diese Architekturen beinhalten ein BIOS-Menu: zur Auswahl des
   Boot-Gera:tes. Abha:ngig von dem verwendeten Installationsmedium ko:nnen
   Sie CD/DVD oder USB als erstes Boot-Gera:t auswa:hlen. Die meisten Systeme
   erlauben es auch, das Boot-Gera:t wa:hrend des Startvorgangs zu wa:hlen,
   typischerweise durch dru:cken von F10, F11, F12 oder Esc.

   Falls der Computer wie normal startet und das bestehende Betriebssystem
   la:dt, befolgen Sie einen der hier aufgefu:hrten Schritte:

    1. Das Installationsmedium wurde wa:hrend des Startvorgangs nicht fru:h
       genug eingelegt. Lassen Sie das Medium eingelegt und versuchen Sie,
       den Rechner neu zu starten.

    2. Die A:nderungen am BIOS waren nicht richtig oder wurden nicht
       gespeichert. U:berpru:fen Sie, dass das richtige Boot-Gera:t als
       erstes Boot-Gera:t ausgewa:hlt ist.

    3. Das verwendete System ist zu alt und unterstu:tzt das starten vom
       gewa:hlten Medium nicht. In diesem Fall kann der Plop Boot Manager
       (http://www.plop.at/de/bootmanagers.html) verwendet werden, um a:ltere
       Computer von CD oder USB-Medien zu starten.

  2.4.2. Systemstart beim PowerPC(R)

   Auf den meisten Maschinen ko:nnen Sie C auf der Tastatur gedru:ckt halten,
   um von der CD zu starten. Andernfalls, halten Sie Command+Option+O+F, oder
   Windows+Alt+O+F auf nicht-Apple(R) Tastaturen gedru:ckt. Geben Sie an der
   0 >-Eingabeaufforderung folgendes ein:

 boot cd:,\ppc\loader cd:0

  2.4.3. Systemstart fu:r SPARC64(R)

   Die meisten SPARC64(R)-Systeme sind so eingerichtet, dass diese
   automatisch von der Festplatte starten. Um FreeBSD von CD zu installieren
   ist es no:tig, in die PROM einzubrechen.

   Um dies zu tun, starten Sie das System neu und warten Sie bis die
   Startmeldungen erscheinen. Abha:ngig vom Modell sollte dies in etwa
   folgendermassen aussehen:

 Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
 Copyright 1998-2001 Sun Microsystems, Inc.  All rights reserved.
 OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
 Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.

   Falls das System jetzt damit fortfa:hrt von Platte zu starten, mu:ssen Sie
   L1+A oder Stop+A auf der Tastatur eingeben oder ein BREAK u:ber die
   serielle Konsole senden. Wenn Sie tip oder cu benutzen, ko:nnen Sie mit ~#
   einen BREAK erzeugen. Der Prompt von PROM zeigt dann ok an, wenn es sich
   um ein System mit einer CPU handelt, beziehungsweise ok {0} auf
   SMP-Systemen, wobei die Nummer die Anzahl der aktiven CPUs anzeigt.

   Legen Sie nun die CD in das Laufwerk und geben Sie boot cdrom am
   PROM-Prompt ein.

  2.4.4. FreeBSD Bootmenu:

   Wenn das System vom Installationsmedium gestartet wird, erscheint
   folgendes Menu: auf dem Bildschirm:

   Abbildung 2.1. FreeBSD Boot Loader Menu:
   FreeBSD Boot Loader Menu:

   In der Voreinstellung wird das Menu: zehn Sekunden auf Benutzereingaben
   warten, bevor das Installationsprogramm gestartet wird. Dru:cken Sie die
   Leertaste, um den Timer anzuhalten. Um eine Option auszuwa:hlen, dru:cken
   Sie die entsprechende Nummer bzw. Buchstaben. Die folgenden Optionen
   stehen zur Verfu:gung.

     * Boot Multi User: Dies wird den Boot-Prozess von FreeBSD fortsetzen.
       Wenn der Timer angehalten wurde, dru:cken Sie entweder die 1, B, oder
       Enter.

     * Boot Single User: Dieser Modus kann verwendet werden, um eine
       bestehende FreeBSD-Installation zu reparieren. Dies wird in
       Abschnitt 12.2.4.1, "Der Single-User Modus" beschrieben. Dru:cken Sie
       die 2 oder S um in diesen Modus zu gelangen.

     * Escape to loader prompt: Dieser Modus startet einen Prompt, welcher
       nur eine begrenzte Anzahl an Low-Level-Befehlen entha:lt. Dies wird in
       Abschnitt 12.2.3, "Phase Drei" beschrieben. Dru:cken Sie die 3 oder
       Esc um in diesen Modus zu gelangen.

     * Reboot: Startet das System neu.

     * Configure Boot Options: O:ffnet das Menu:, welches in Abbildung 2.2,
       "FreeBSD Boot-Optionen Menu:" beschrieben ist.

   Abbildung 2.2. FreeBSD Boot-Optionen Menu:
   FreeBSD Boot-Optionen Menu:

   Das Boot-Optionen Menu: ist in zwei Abschnitte unterteilt. Der erste
   Abschnitt wird verwendet, um zuru:ck zum Hauptmenu: zu gelangen, oder um
   Optionen zuru:ck auf die Standardwerte zu setzen.

   Im zweiten Abschnitt ko:nnen verschiedene Optionen auf On oder Off gesetzt
   werden. Das System wird bei einem Neustart immer mit den Einstellungen
   fu:r diese Optionen booten:

     * ACPI Support: Wenn das System wa:hrend des Bootens ha:ngt, setzen Sie
       diese Option auf Off.

     * Safe Mode: Wenn das System trotz deaktiviertem ACPI Support immer noch
       ha:ngt, setzen Sie diese Option auf On.

     * Single User: Setzen Sie die Option auf On, um eine bestehende
       FreeBSD-Installation zu reparieren. Dieser Prozess wird in
       Abschnitt 12.2.4.1, "Der Single-User Modus" beschrieben. Sobald das
       Problem behoben ist, setzen Sie die Option wieder auf Off.

     * Verbose: Wenn Sie wa:hrend des Bootens ausfu:hrliche Meldungen sehen
       mo:chten, zum Beispiel fu:r die Fehlersuche bei Hardwareproblemen,
       setzen Sie diese Option auf On.

   Nachdem Sie die beno:tigten Auswahlen getroffen haben, dru:cken Sie die 1
   oder die Ru:cktaste, um zum Hauptmenu: zuru:ckzukehren. Dru:cken Sie dann
   Enter um den FreeBSD Bootprozess fortzusetzen. Eine Reihe von
   Boot-Meldungen werden nun im Rahmen der Gera:teerkennung von FreeBSD
   angezeigt. Sobald dieser Prozess abgeschlossen ist, erscheint das Menu:
   aus Abbildung 2.3, "Willkommen-Menu:".

   Abbildung 2.3. Willkommen-Menu:
   Willkommen-Menu:

   Wa:hlen Sie hier [ Install ] und dru:cken Sie Enter, um in das
   Installationsprogramm zu gelangen. Der Rest dieses Kapitels beschreibt das
   Installationsprogramm. Andernfalls verwenden Sie die Pfeiltasten um einen
   anderen Menu:punkt auszuwa:hlen. [ Shell ] kann verwendet werden, um eine
   Shell zu starten und Zugriff auf die Kommandozeilenprogramme zu erhalten,
   damit beispielsweise die Platten vor der Installation vorbereitet werden
   ko:nnen. [ Live CD ] kann verwendet werden um FreeBSD vor der Installation
   auszuprobieren. Die Live-Version wird in Abschnitt 2.10, "Verwendung der
   Live-CD" beschrieben.

  Tipp:

   Um sich die Boot-Meldungen und die Ergebnisse der Gera:teerkennung erneut
   anzeigen zu lassen, dru:cken Sie S gefolgt von Enter. Dadurch wird eine
   Shell gestartet, in der Sie die Ereignisse seitenweise mit more
   /var/run/dmesg.boot lesen ko:nnen. Geben Sie exit ein, um zum
   Willkommen-Menu: zuru:ckzukehren.

2.5. Verwendung von bsdinstall

   Dieser Abschnitt zeigt die Reihenfolge der Menu:s von bsdinstall sowie die
   Informationen, die wa:hrend der Installation abgefragt werden. Benutzen
   Sie die Pfeiltasten zur Navigation und die Leertaste, um einen Menu:punkt
   zu aktivieren oder zu deaktivieren. Wenn Sie fertig sind, dru:cken Sie
   Enter, um die Auswahl zu speichern und zum na:chsten Bildschirm zu
   gelangen.

  2.5.1. Die Tastaturbelegung auswa:hlen

   Abha:ngig davon, welche Systemkonsole verwendet wird, zeigt bsdinstall am
   Anfang das Menu: aus Abbildung 2.4, "Tastaturbelegung festlegen".

   Abbildung 2.4. Tastaturbelegung festlegen
   Tastaturbelegung festlegen

   Um die Tastaturbelegung zu konfigurieren, wa:hlen Sie [ YES ] gefolgt von
   Enter. Dadurch wird das Menu: aus Abbildung 2.5,
   "Tastaturauswahlbildschirm" angezeigt. Wenn Sie stattdessen die
   Standardtastaturbelegung verwenden mo:chten, wa:hlen Sie [ NO ] gefolgt
   von Enter, um dieses Menu: zu u:berspringen.

   Abbildung 2.5. Tastaturauswahlbildschirm
   Tastaturauswahlbildschirm

   Wa:hlen Sie die Tastenbelegung, die der am System angeschlossenen Tastatur
   am na:chsten kommt, indem Sie die Pfeiltasten Hoch/Runter verwenden und
   anschliessend Enter dru:cken.

  Anmerkung:

   Durch dru:cken von Esc wird das Menu: verlassen und die Standardbelegung
   eingestellt. United States of America ISO-8859-1 ist eine sichere Option,
   falls Sie sich unsicher sind, welche Auswahl Sie treffen sollen.

   In FreeBSD 10.0-RELEASE und neueren Versionen wurde dieses Menu:
   erweitert. Die vollsta:ndige Auswahl der Tastaturbelegungen wird nun
   angezeigt und die Voreinstellung ist ausgewa:hlt. Wird die Tastenbelegung
   gea:ndert, erscheint ein Dialog, in dem der Benutzer die Einstellung
   testen kann, bevor die Installation fortgesetzt wird.

   Abbildung 2.6. Erweiterte Tastaturbelegung
   Erweiterte Tastaturbelegung

  2.5.2. Den Rechnernamen festlegen

   Das na:chste bsdinstall-Menu: konfiguriert den Rechnernamen, der fu:r das
   neu zu installierende System verwendet werden soll.

   Abbildung 2.7. Festlegen des Rechnernamens
   Festlegen des Rechnernamens

   Geben Sie einen fu:r das Netzwerk eindeutigen Rechnernamen an. Der
   eingegebene Rechnername sollte ein voll-qualifizierter Rechnername sein,
   so wie z.B. machine3.example.com.

  2.5.3. Auswahl der zu installierenden Komponenten

   Im na:chsten Schritt fragt Sie bsdinstall, die optionalen Komponenten fu:r
   die Installation auszuwa:hlen.

   Abbildung 2.8. Komponenten fu:r die Installation auswa:hlen
   Komponenten fu:r die Installation auswa:hlen

   Die Entscheidung, welche Komponenten auszuwa:hlen sind, ha:ngt
   gro:sstenteils davon ab, fu:r was das System ku:nftig eingesetzt werden
   soll und der zur Verfu:gung stehende Plattenplatz. Der FreeBSD-Kernel und
   die Systemprogramme (zusammengenommen auch als Basissystem bezeichnet)
   werden immer installiert. Abha:ngig vom Typ der Installation, werden
   manche dieser Komponenten nicht erscheinen.

     * doc - Zusa:tzliche Dokumentation, meistens eher von historischem
       Interesse, wird nach /usr/share/doc installiert. Dokumentation, wie
       Sie vom FreeBSD Dokumentationsprojekt bereitgestellt wird, kann zu
       einem spa:teren Zeitpunkt installiert werden. Anweisungen dazu finden
       Sie in Abschnitt 23.3, "Aktualisieren der Dokumentationssammlung".

     * games - Mehrere traditionelle BSD-Spiele, darunter fortune, rot13 und
       andere.

     * lib32 - Kompatibilita:ts-Bibliotheken, um 32-bit Anwendungen auf der
       64-bit Version von FreeBSD laufen zu lassen.

     * ports - Die FreeBSD Ports-Sammlung ist eine Sammlung von Dateien, die
       das herunterladen, erstellen und installieren von
       Drittanbietersoftware automatisiert. Kapitel 4, Installieren von
       Anwendungen: Pakete und Ports behandelt die Verwendung der
       Ports-Sammlung.

  Warnung:

       Das Installationsprogramm pru:ft nicht, ob genu:gend Plattenplatz zur
       Verfu:gung steht. Wa:hlen Sie diese Option nur, wenn die Festplatte
       u:ber ausreichend Speicher verfu:gt. Die Ports-Sammlung nimmt etwa
       500 MB Plattenplatz ein.

     * src - Der vollsta:ndige FreeBSD Quellcode fu:r den Kernel und die
       Systemprogramme. Obwohl dies fu:r die meisten Anwendungen nicht
       beno:tigt wird, kann es doch fu:r manche Gera:tetreiber, Kernelmodule
       und einigen Anwendungen aus der Ports-Sammlung erforderlich sein. Der
       Quellcode wird auch beno:tigt um an FreeBSD selbst mitzuentwickeln.
       Der komplette Quellcodebaum beno:tigt 1 GB Plattenplatz und um das
       gesamte Betriebssystem neu zu erstellen, werden zusa:tzliche 5 GB
       Platz beno:tigt.

  2.5.4. Installation aus dem Netzwerk

   Das Menu: in Abbildung 2.9, "Installation u:ber das Netzwerk" wird nur
   angezeigt, wenn Sie von einer -bootonly.iso-CD installieren, da dieses
   Installationsmedium keine Kopie der Installationsdateien entha:lt. Da die
   Installationsdateien u:ber eine Netzwerkverbindung abgerufen werden
   mu:ssen, weist dieses Menu: darauf hin, dass zuna:chst die
   Netzwerkschnittstelle konfiguriert werden muss.

   Abbildung 2.9. Installation u:ber das Netzwerk
   Installation u:ber das Netzwerk

   Um die Netzwerkverbindung zu konfigurieren, dru:cken Sie Enter und folgen
   Sie den Anweisungen in Abschnitt 2.8.2, "Die Netzwerkschnittstelle
   konfigurieren". Sobald die Schnittstelle konfiguriert ist, bestimmen Sie
   einen Spiegelserver, welcher in der gleichen Region auf der Welt
   beheimatet ist, wie der Computer, auf dem FreeBSD installiert werden soll.
   Dateien ko:nnen so viel schneller u:bertragen werden, wenn der
   Spiegelserver sich na:her am Zielcomputer befindet und die
   Installationszeit wird somit reduziert.

   Abbildung 2.10. Einen Spiegelserver wa:hlen
   Einen Spiegelserver wa:hlen

   Die Installation wird auf die gleiche Weise fortfahren, als wu:rden die
   Installationsdateien auf einem lokalen Installationsmedium vorliegen.

2.6. Plattenplatz bereitstellen

   Im na:chsten Menu: wird die Methode bestimmt, um den Plattenplatz
   zuzuweisen. Die verfu:gbaren Optionen ha:ngen von der verwendeten
   FreeBSD-Version ab.

   Abbildung 2.11. Partitionierung unter FreeBSD 9.x
   Partitionierung unter FreeBSD 9.x
   Abbildung 2.12. Partitionierung unter FreeBSD 10.x und neueren Versionen
   Partitionierung unter FreeBSD 10.x und neueren Versionen

   Die gefu:hrte Partitionierung (Guided) richtet Partitionen automatisch
   ein, wa:hrend die manuelle Partitionierung (Manual) es fortgeschrittenen
   Anwendern erlaubt, selbstgewa:hlte Partitionen u:ber weitere Menu:s zu
   erzeugen. Schliesslich gibt es noch die Option Shell, in der
   Kommandozeilenprogramme wie gpart(8) fdisk(8) und bsdlabel(8) direkt
   ausgefu:hrt werden ko:nnen. ZFS Partitionierung, die ab FreeBSD 10
   verfu:gbar ist, erstellt ein root-on-ZFS System mit Unterstu:tzung fu:r
   Boot Environments, welches optional verschlu:sselt werden kann.

   Dieser Abschnitt beschreibt, was bei der Partitionierung der Platten zu
   beachten ist und wie die einzelnen Methoden zur Partitionierung angewendet
   werden.

  2.6.1. Ein Partitionslayout entwerfen

   Wenn Sie Dateisysteme anlegen, sollten Sie beachten, dass Festplatten auf
   Daten in den a:usseren Spuren schneller zugreifen ko:nnen als auf Daten in
   den inneren Spuren. Daher sollten die kleineren und oft benutzten
   Dateisysteme an den a:usseren Rand der Platte gelegt werden. Die
   gro:sseren Partitionen wie /usr sollten in die inneren Bereiche gelegt
   werden. Es empfiehlt sich, die Partitionen in folgender Reihenfolge
   anzulegen: /, swap, /var und /usr.

   Die Gro:sse der /var-Partition ist abha:ngig vom Zweck der Maschine. Diese
   Partition entha:lt hauptsa:chlich Postfa:cher, Logdateien und
   Druckwarteschlangen. Abha:ngig von der Anzahl an Systembenutzern und der
   Aufbewahrungszeit fu:r Logdateien, ko:nnen Postfa:cher und Logdateien
   unerwartete Gro:ssen annehmen. Die meisten Benutzer beno:tigen nur selten
   mehr als ein Gigabyte fu:r /var.

  Anmerkung:

   Ein paar Mal wird es vorkommen, dass viel Festplattenspeicher in /var/tmp
   beno:tigt wird. Wenn neue Software mit pkg_add(1) installiert wird,
   extrahieren die Paketwerkzeuge eine voru:bergehende Kopie der Pakete unter
   /var/tmp. Die Installation grosser Softwarepakete wie Firefox, Apache
   OpenOffice oder LibreOffice kann sich wegen zu wenig Speicherplatz in
   /var/tmp als trickreich herausstellen.

   Die /usr Partition entha:lt viele der Hauptbestandteile des Systems,
   einschliesslich der FreeBSD Ports-Sammlung und den Quellcode des Systems.
   Fu:r diese Partition werden mindestens zwei Gigabyte empfohlen.

   Behalten Sie bei der Auswahl der Partitionsgro:ssen den Platzbedarf im
   Auge. Wenn Sie den Platz auf einer Partition vollsta:ndig aufgebraucht
   haben, eine andere Partition aber kaum benutzen, kann die Handhabung des
   Systems schwierig werden.

   Als Daumenregel sollten Sie doppelt soviel Speicher fu:r die
   Swap-Partition vorsehen, als Sie Hauptspeicher haben, da die
   VM-Paging-Algorithmen im Kernel so eingestellt sind, dass sie am besten
   laufen, wenn die Swap-Partition mindestens doppelt so gross wie der
   Hauptspeicher ist. Zu wenig Swap kann zu einer Leistungsverminderung im VM
   page scanning Code fu:hren, sowie Probleme verursachen, wenn spa:ter mehr
   Speicher in die Maschine eingebaut wird.

   Auf gro:sseren Systemen mit mehreren SCSI-, oder IDE-Laufwerken an
   unterschiedlichen Controllern, wird empfohlen, Swap-Bereiche auf bis zu
   vier Laufwerken einzurichten. Diese Swap-Partitionen sollten ungefa:hr
   dieselbe Gro:sse haben. Der Kernel kann zwar mit beliebigen Gro:ssen
   umgehen, aber die internen Datenstrukturen skalieren bis zur vierfachen
   Gro:sse der gro:ssten Partition. Ungefa:hr gleich grosse Swap-Partitionen
   erlauben es dem Kernel, den Swap-Bereich optimal u:ber die Laufwerke zu
   verteilen. Grosse Swap-Bereiche, auch wenn sie nicht oft gebraucht werden,
   sind nu:tzlich, da sich ein speicherfressendes Programm unter Umsta:nden
   auch ohne einen Neustart des Systems beenden la:sst.

   Indem Sie ein System richtig partitionieren, verhindern Sie, dass eine
   Fragmentierung in den ha:ufig beschriebenen Partitionen auf die meist nur
   gelesenen Partitionen u:bergreift. Wenn Sie die ha:ufig beschriebenen
   Partitionen an den Rand der Platte legen, dann wird die I/O-Leistung
   dieser Partitionen steigen. Die I/O-Leistung ist natu:rlich auch fu:r
   grosse Partitionen wichtig, doch erzielen Sie eine gro:ssere
   Leistungssteigerung, wenn Sie /var an den Rand der Platte legen.

  2.6.2. Gefu:hrte Partitionierung

   Bei dieser Methode wird ein Menu: die verfu:gbaren Platten anzeigen.
   Sollten mehrere Platten angeschlossen sein, wa:hlen Sie diejenige aus, auf
   der FreeBSD installiert werden soll.

   Abbildung 2.13. Aus mehreren Platten eine auswa:hlen
   Aus mehreren Platten eine auswa:hlen

   Nachdem Sie die Platte ausgewa:hlt haben, fordert das na:chste Menu: dazu
   auf, entweder die gesamte Festplatte fu:r die Installation zu nutzen oder
   eine Partition aus unbenutzten Speicherplatz zu erstellen. Ein allgemeines
   Partitionslayout, das die gesamte Platte einnimmt wird erstellt, wenn
   [ Entire Disk ] ausgewa:hlt wird. Durch die Wahl von [ Partition ] wird
   ein Partitionslayout aus dem unbenutzten Speicherplatz der Platte
   erstellt.

   Abbildung 2.14. Auswahl der gesamten Platte oder einer Partition
   Auswahl der gesamten Platte oder einer Partition

   Nachdem das Partitionslayout nun erstellt wurde, sollten Sie es
   u:berpru:fen, um sicherzustellen, dass es die Bedu:rfnisse der
   Installation erfu:llt. Durch die Auswahl von [ Revert ] ko:nnen die
   Partitionen wieder auf den urspru:nglichen Wert zuru:ckgesetzt werden und
   durch [ Auto ] werden die automatischen FreeBSD Partitionen
   wiederhergestellt. Partitionen ko:nnen auch manuell erstellt, gea:ndert
   oder gelo:scht werden. Sollte die Partitionierung richtig sein, wa:hlen
   Sie [ Finish ] aus, um mit der Installation fortzufahren.

   Abbildung 2.15. U:berpru:fen der erstellen Partitionen
   U:berpru:fen der erstellen Partitionen

  2.6.3. Manuelle Partitionierung

   Diese Methode o:ffnet den Partitionseditor:

   Abbildung 2.16. Partitionen manuell erstellen
   Partitionen manuell erstellen

   Durch hervorheben einer Platte (in diesem Fall ada0) und die Auswahl von
   [ Create ], wird ein Menu: mit den verfu:gbaren Partitionierungsschemas
   angezeigt.

   Abbildung 2.17. Partitionen manuell anlegen
   Partitionen manuell anlegen

   GPT ist normalerweise die beste Wahl fu:r amd64-Computer. A:ltere
   Computer, die nicht mit GPT kompatibel sind, sollten MBR verwenden. Die
   anderen Partitionsschemas werden fu:r gewo:hnlich fu:r a:ltere
   Computersysteme benutzt.

   Tabelle 2.1. Partitionierungsschemas

   Abku:rzung Beschreibung                                                    
   APM        Apple Partition Map, verwendet von PowerPC(R).                  
              BSD-Labels ohne einen MBR, manchmal auch "dangerously dedicated 
   BSD        mode" genannt, da nicht-BSD Festplatten-Werkzeuge dies          
              vielleicht nicht erkennen ko:nnen.                              
   GPT        GUID Partition Table (                                          
              http://en.wikipedia.org/wiki/GUID_Partition_Table).             
   MBR        Master Boot Record (                                            
              http://en.wikipedia.org/wiki/Master_boot_record).               
   PC98       MBR-Variante, verwendet von NEC PC-98 Computern (               
              http://en.wikipedia.org/wiki/Pc9801).                           
   VTOC8      Volume Table Of Contents, von Sun SPARC64 und UltraSPARC        
              Computern verwendet.                                            

   Nachdem das Partitionierungsschema ausgewa:hlt und erstellt wurde, werden
   durch erneute Auswahl von [ Create ] die Partitionen erzeugt.

   Abbildung 2.18. Partitionen manuell erzeugen
   Partitionen manuell erzeugen

   Eine FreeBSD-Standardinstallation mit GPT legt mindestens die folgenden
   drei Partitionen an:

     * freebsd-boot - Entha:lt den FreeBSD-Bootcode.

     * freebsd-ufs - Ein FreeBSD UFS-Dateisystem.

     * freebsd-swap - FreeBSD Auslagerungsbereich (swap space).

   Ein weiter Partitionstyp ist freebsd-zfs. Dieser Typ ist fu:r Partitionen
   bestimmt, die ein FreeBSD ZFS-Dateisystem verwenden sollen (Kapitel 19,
   Das Z-Dateisystem (ZFS)). gpart(8) entha:lt Beschreibungen der
   verfu:gbaren GPT-Partitionstypen.

   Es ko:nnen mehrere Dateisystempartitionen erzeugt werden und manche Leute
   ziehen es vor, ein traditionelles Layout mit getrennten Partitionen fu:r
   die Dateisysteme /, /var, /tmp und /usr zu erstellen. Lesen Sie dazu
   Beispiel 2.1, "Ein traditionelles, partitioniertes Dateisystem erstellen",
   um ein Beispiel zu erhalten.

   Gro:ssenangaben (Size) ko:nnen mit ga:ngigen Abku:rzungen eingegeben
   werden: K fu:r Kilobytes, M fu:r Megabytes oder G fu:r Gigabytes.

  Tipp:

   Korrekte Sektorausrichtung ermo:glicht gro:sstmo:gliche Geschwindigkeit
   und das Anlegen von Partitionsgro:ssen als vielfaches von 4K-Bytes hilft,
   die passende Ausrichtung auf Platten mit entweder 512-Bytes oder 4K-Bytes
   Sektorgro:ssen, festzulegen. Generell sollte die Verwendung von
   Partitionsgro:ssen, die sogar vielfache von 1M oder 1G sind, den
   einfachsten Weg darstellen, um sicher zu stellen, dass jede Partition an
   einem vielfachen von 4K beginnt. Eine Ausnahme gibt es: momentan sollte
   die freebsd-boot-Partition aufgrund von Beschra:nkungen im Bootcode nicht
   gro:sser sein als 512K.

   Ein Einha:gepunkt (Mountpoint) wird beno:tigt, falls diese Partition ein
   Dateisystem entha:lt. Falls nur eine einzelne UFS-Partition erstellt wird,
   sollte der Einha:ngepunkt / lauten.

   Ein label ist ein Name, durch den diese Partition angesprochen wird.
   Festplattennamen oder -nummern ko:nnen sich a:ndern, falls die Platte
   einmal an einem anderen Controller oder Port angeschlossen sein sollte,
   doch das Partitionslabel a:ndert sich dadurch nicht. Anstatt auf
   Plattennamen und Partitionsnummern in Dateien wie /etc/fstab zu verweisen,
   sorgen Labels dafu:r, dass das System Hardwarea:nderungen eher toleriert.
   GPT-Labels erscheinen in /dev/gpt/, wenn eine Platte angeschlossen wird.
   Andere Partitionierungsschemas besitzen unterschiedliche Fa:higkeiten,
   Labels zu verwenden und diese erscheinen in anderen /dev/-Verzeichnissen.

  Tipp:

   Vergeben Sie ein einzigartiges Label fu:r jede Partition, um Konflikte mit
   identischen Labels zu verhindern. Ein paar Buchstaben des Computernamens,
   dessen Verwendungszweck oder Ortes kann dem Label hinzugefu:gt werden.
   Beispielsweise labroot oder rootfslab fu:r die UFS Root-Partition auf
   einem Laborrechner namens lab.

   Beispiel 2.1. Ein traditionelles, partitioniertes Dateisystem erstellen

   Fu:r ein traditionelles Partitionslayout, in dem sich /, /var, /tmp und
   /usr in getrennten Partitionen befinden sollen, erstellen Sie ein
   GPT-Partitionsschema und anschliessend die Partitionen selbst. Die
   gezeigten Partitionsgro:ssen sind typisch fu:r eine Festplatte von 20 G.
   Falls mehr Platz verfu:gbar ist, sind gro:ssere Swap oder /var-Partitionen
   nu:tzlich. Den hier gezeigten Beschreibungen sind bsp fu:r "Beispiel"
   vorangestellt, jedoch sollten Sie andere, einzigartige Beschreibungen
   verwenden, wie oben beschrieben.

   Standardma:ssig erwartet FreeBSDs gptboot, dass die erste UFS-Partition
   die /-Partition ist.

   Partitionstyp             Gro:sse             Eingeha:ngt als Beschreibung 
   freebsd-boot  512K                                                         
   freebsd-ufs   2G                              /               bsprootfs    
   freebsd-swap  4G                              bspswap                      
   freebsd-ufs   2G                              /var            bspvarfs     
   freebsd-ufs   1G                              /tmp            bsptmpfs     
                 Akzeptieren Sie die                                          
   freebsd-ufs   Standardeinstellungen (Rest der /usr            bspusrfs
                 Platte)                         

   Nachdem die selbstgewa:hlten Partitionen erzeugt wurden, wa:hlen Sie
   [ Finish ], um mit der Installation fortzusetzen.

  2.6.4. Root-on-ZFS automatische Partitionierung

   Die Unterstu:tzung fu:r die automatische Erstellung von Root-on-ZFS
   Installationen wurde in FreeBSD 10.0-RELEASE hinzugefu:gt. Dieser Modus
   funktioniert nur mit ganzen Laufwerken und wird alle vorhandenen Daten auf
   der Platte lo:schen. Das Installationsprogramm wird die Partitionen fu:r
   ZFS automatisch an 4k Sektoren ausrichten. Dies funktioniert auch
   zuverla:ssig bei einer Sektorgro:sse von 512 Byte und hat den Vorteil,
   dass nachtra:glich Laufwerke mit einer Sektorgro:sse von 4k hinzugefu:gt
   werden ko:nnen, entweder als zusa:tzlicher Speicherplatz oder als Ersatz
   fu:r eine ausgefallene Platte. Das Installationsprogramm kann auch
   optional die Platte mit GELI verschlu:sseln, wie in Abschnitt 17.12.2,
   "Plattenverschlu:sselung mit geli" beschrieben. Wird die Verschlu:sselung
   aktiviert, wird eine 2 GB grosse unverschlu:sselte Partition fu:r /boot
   erstellt. Diese entha:lt den Kernel und weitere Dateien, die no:tig sind
   um den Kernel zu booten. Zudem wird eine Swap-Partition erstellt. Der
   verbleibende Platz wird fu:r den ZFS-Pool verwendet.

   Das Konfigurationsmenu: fu:r ZFS bietet einige Optionen, um die Erstellung
   des Pools zu beeinflussen.

   Abbildung 2.19. ZFS Konfigurationsmenu:
   ZFS Konfigurationsmenu:

   Wa:hlen Sie T um den Pool Typ und die Festplatte(n) zu konfigurieren, die
   den Pool bilden werden. Mit Ausnahme des Stripe Modus, unterstu:tzt das
   automatische ZFS Installationsprogramm derzeit nur die Erstellung eines
   einzigen Top-Level-vdevs. Wenn Sie komplexere Pools erstellen mo:chten,
   folgen Sie den Anweisungen in Abschnitt 2.6.5, "Shell Partitionierung".
   Das Installationsprogramm unterstu:tzt verschiedene Pool Typen,
   einschliesslich Stripe (nicht empfohlen, keine Redundanz), Spiegel (beste
   Leistung, weniger nutzbarer Speicherplatz), und RAID-Z 1, 2 und 3
   (u:bersteht den Ausfall von jeweils einer, zwei und drei Platten). Am
   unteren Rand des Bildschirms werden Hinweise zur Anzahl der beno:tigten
   Platten angezeigt. Im Fall von RAID-Z wird die optimale Anzahl von Platten
   fu:r die jeweilige Konfiguration angezeigt.

   Abbildung 2.20. ZFS Pool Typen
   ZFS Pool Typen

   Sobald ein Pool Typ (Pool Type) ausgewa:hlt wurde, wird eine Liste der
   verfu:gbaren Laufwerke angezeigt und der Benutzer wird aufgefordert, eine
   oder mehrere Festplatten auszuwa:hlen um den Pool zu bilden. Anschliessend
   wie die Konfiguration gepru:ft um zu gewa:hrleisten, dass genug Platten
   ausgewa:hlt wurden. Wa:hlen Sie <Change Selection> um zur Auswahl der
   Laufwerke zuru:ckzukehren, oder <Cancel> um den Pool Typ zu a:ndern.

   Abbildung 2.21. Auswahl der Laufwerke
   Auswahl der Laufwerke
   Abbildung 2.22. Ungu:ltige Auswahl
   Ungu:ltige Auswahl

   Wenn eine oder mehrere Platten in der Liste fehlen, oder wenn Festplaten
   angebunden wurden, nachdem das Installationsprogramm gestartet wurde,
   wa:hlen Sie - Rescan Devices um die Laufwerke nochmals zu suchen und
   anzuzeigen. Um zu vermeiden, dass versehentlich die falsche Platte
   gelo:scht wird, ko:nnen Sie das - Disk-Info Menu: verwenden. Dieses Menu:
   zeigt verschiedene Informationen, einschliesslich der Partitionstabelle,
   der Modelnummer und der Seriennummer, falls verfu:gbar.

   Abbildung 2.23. Eigenschaften einer Festplatte
   Eigenschaften einer Festplatte

   Das Konfigurationsmenu: von ZFS ermo:glicht es dem Benutzer auch, einen
   Namen fu:r den Pool zu vergeben, 4k Sektoren zu deaktivieren,
   Tabellentypen zu aktivieren oder deaktivieren, zwischen GPT (empfohlen)
   und MBR zu wechseln und die Gro:sse des Swap-Bereichs zu wa:hlen. Wenn
   alle Optionen auf die gewu:nschten Werte eingestellt sind, wa:hlen Sie
   >>> Install am oberen Rand des Menu:s.

   Wenn die GELI Plattenverschlu:sselung aktiviert wurde, fordert Sie das
   Installationsprogramm zweimal zur Eingabe der Passphrase auf.

   Abbildung 2.24. Passwort fu:r die Verschlu:sselung der Platte
   Passwort fu:r die Verschlu:sselung der Platte

   Das Installationsprogramm bietet dann eine letzte Chance, abzubrechen,
   bevor der Inhalt der ausgewa:hlten Laufwerke zersto:rt wird, um den neuen
   ZFS-Pool zu erstellen.

   Abbildung 2.25. Letzte Chance
   Letzte Chance

   Danach wird die Installation normal weitergefu:hrt.

  2.6.5. Shell Partitionierung

   bsdinstall bietet bei fortgeschrittenen Installationen womo:glich nicht
   die beno:tigte Flexibilita:t. Erfahrene Benutzer ko:nnen die Option Shell
   im Menu: auswa:hlen, um die Laufwerke manuell zu partitionieren,
   Dateisysteme zu erstellen, /tmp/bsdinstall_etc/fstab zu befu:llen und
   Dateisysteme unter /mnt einzuha:ngen. Geben Sie anschliessend exit ein, um
   zu bsdinstall zuru:ckzukehren und die Installation fortzusetzen.

2.7. Die Installation festschreiben

   Sobald die Platten konfiguriert sind, stellt das na:chste Menu: die letzte
   Chance dar, A:nderungen vorzunehmen, bevor die ausgewa:hlten Festplatten
   formatiert werden. Wenn A:nderungen vorgenommen werden mu:ssen, wa:hlen
   Sie [ Back ] um zur Partitionierung zuru:ckzukehren. [ Revert & Exit ]
   wird das Installationsprogramm verlassen, ohne A:nderungen an den
   Festplatten vorzunehmen.

   Abbildung 2.26. Letzte Besta:tigung
   Letzte Besta:tigung

   Wa:hlen Sie [ Commit ] und dru:cken Sie Enter, um die eigentliche
   Installation zu starten.

   Die Installationsdauer ha:ngt von den gewa:hlten Distributionen, dem
   Installationsmedium und der Geschwindigkeit des Computers ab. Eine Reihe
   von Nachrichten werden angezeigt, um den Fortschritt darzustellen.

   Zuna:chst formatiert das Installationsprogramm die ausgewa:hlten Platten
   und initialisiert die Partitionen. Bei einer bootonly-Installation werden
   als na:chstes die beno:tigten Komponenten heruntergeladen:

   Abbildung 2.27. Herunterladen der Distributionsdateien
   Herunterladen der Distributionsdateien

   Als na:chstes wird die Integrita:t der Distributionsdateien u:berpru:ft,
   um sicherzustellen, dass diese wa:hrend des Ladevorgangs nicht bescha:digt
   oder unsauber vom Installationsmedium gelesen wurden:

   Abbildung 2.28. U:berpru:fen der Distributionsdateien
   U:berpru:fen der Distributionsdateien

   Zum Schluss werden die u:berpru:ften Distributionsdateien auf die
   Festplatte entpackt:

   Abbildung 2.29. Entpacken der Distributionsdateien
   Entpacken der Distributionsdateien

   Sobald alle beno:tigten Distributionsdateien entpackt wurden, wird
   bsdinstall das erste Menu: fu:r die Arbeiten nach der Installation
   anzeigen. Die zur Verfu:gung stehenden Konfigurationsoptionen werden im
   na:chsten Abschnitt beschrieben.

2.8. Arbeiten nach der Installation

   Sobald FreeBSD installiert ist, fordert Sie bsdinstall dazu auf, mehrere
   Optionen zu konfigurieren, bevor das neu installierte System gebootet
   wird. Die Konfigurationsoptionen werden in diesem Abschnitt beschrieben.

  Tipp:

   Nach einem Neustart des Systems bietet bsdconfig eine menu:gestu:tzte
   Konfiguration dieser und weiterer Optionen.

  2.8.1. Setzen des root-Passworts

   Zuerst muss das root-Passwort gesetzt werden. Die eingegebenen Zeichen
   werden dabei nicht auf dem Bildschirm angezeigt. Nachdem das Passwort
   eingegeben wurde, muss es zur Besta:tigung erneut eingetippt werden. Damit
   werden auch Tippfehler verhindert.

   Abbildung 2.30. Das root-Passwort setzen
   Das root-Passwort setzen

  2.8.2. Die Netzwerkschnittstelle konfigurieren

   Als na:chstes wird eine Liste der gefundenen Netzwerkschnittstellen
   gezeigt. Wa:hlen Sie die Schnittstelle aus, die Sie konfigurieren
   mo:chten.

  Anmerkung:

   Die Menu:s fu:r die Netzwerkkonfiguration werden u:bersprungen, falls dies
   bereits als Teil der bootonly-Installation durchgefu:hrt worden ist.

   Abbildung 2.31. Eine zu konfigurierende Netzwerkschnittstelle auswa:hlen
   Eine zu konfigurierende Netzwerkschnittstelle auswa:hlen

   Wenn Sie eine Ethernet-Schnittstelle ausgewa:hlt haben, fa:hrt das
   Installationsprogramm mit dem Menu: aus Abbildung 2.35, "Auswahl von IPv4"
   fort. Wenn Sie eine drahtlose Netzwerkschnittstelle ausgewa:hlt haben,
   wird das System nach drahtlosen Zugriffspunkten (Access Points) suchen:

   Abbildung 2.32. Nach drahtlosen Access Points scannen
   Nach drahtlosen Access Points scannen

   Drahtlose Netzwerke werden durch einen Service Set Identifier (SSID)
   identifiziert. Der SSID ist ein kurzer, eindeutiger Name, der fu:r jedes
   Netzwerk vergeben wird. SSIDs, die wa:hrend des Scans gefunden wurden,
   werden aufgelistet, gefolgt von einer Beschreibung der
   Verschlu:sselungsarten, die fu:r dieses Netzwerk verfu:gbar sind. Falls
   die gewu:nschte SSID nicht in der Liste auftaucht, wa:hlen Sie [ Rescan ],
   um erneut einen Scanvorgang durchzufu:hren. Falls dann das gewu:nschte
   Netzwerk immer noch nicht erscheint, u:berpru:fen Sie die Antenne auf
   Verbindungsprobleme oder versuchen Sie, na:her an den Access point zu
   gelangen. Scannen Sie erneut nach jeder vorgenommenen A:nderung.

   Abbildung 2.33. Ein drahtloses Netzwerk auswa:hlen
   Ein drahtloses Netzwerk auswa:hlen

   Geben Sie nun die Verschlu:sselungsinformationen ein, um sich mit dem
   drahtlosen Netzwerk zu verbinden. WPA2 wird als Verschlu:sselung dringend
   empfohlen, da a:ltere Verschlu:sselungsmethoden, wie WEP, nur wenig
   Sicherheit bieten. Wenn das Netzwerk WPA2 verwendet, geben Sie das
   Passwort (auch bekannt als Pre-Shared Key PSK) ein. Aus
   Sicherheitsgru:nden werden die in das Eingabefeld eingegeben Zeichen nur
   als Sternchen angezeigt.

   Abbildung 2.34. Verbindungsaufbau mit WPA2
   Verbindungsaufbau mit WPA2

   Wa:hlen Sie, ob eine IPv4-Adresse auf der Ethernet-Schnittstelle oder der
   drahtlosen Schnittstelle konfiguriert werden soll.

   Abbildung 2.35. Auswahl von IPv4
   Auswahl von IPv4

   Es gibt zwei Arten, ein IPv4-Netzwerk zu konfigurieren. DHCP wird
   automatisch die Netzwerkschnittstelle richtig konfigurieren und sollte
   verwendet werden, wenn das Netzwerk u:ber einen DHCP-Server verfu:gt. Eine
   statische IP-Konfiguration erfordert die manuelle Eingabe von
   Netzwerkinformationen.

  Anmerkung:

   Geben Sie keine zufa:llig gewa:hlten Netzwerkinformationen ein, da dies
   nicht funktionieren wird. Holen Sie sich die in Erforderliche
   Informationen zum Netzwerk gezeigten Informationen vom
   Netzwerkadministrator oder Serviceprovider, falls kein DHCP-Server
   verfu:gbar ist.

   Falls ein DHCP-Server zur Verfu:gung steht, wa:hlen Sie im na:chsten Menu:
   [ Yes ], um die Netzwerkschnittstelle automatisch einrichten zu lassen.
   Dieser Vorgang kann einige Sekunden dauern.

   Abbildung 2.36. Auswa:hlen der IPv4-Konfiguration u:ber DHCP
   Auswa:hlen der IPv4-Konfiguration u:ber DHCP

   Wenn kein DHCP-Server zur Verfu:gung steht, wa:hlen Sie [ No ] und tragen
   Sie die folgenden Informationen in das Menu: ein:

   Abbildung 2.37. Statische IPv4-Konfiguration
   Statische IPv4-Konfiguration
     * IP Address - Die IPv4-Adresse, welche diesem Computer zugewiesen
       werden soll. Diese Adresse muss eindeutig sein und darf nicht bereits
       von einem anderen Gera:t im lokalen Netzwerk verwendet werden.

     * Subnet Mask - Die Subnetzmaske des Netzwerks.

     * Default Router - Die IP-Adresse des Defaultrouters im Netzwerk.

   Das na:chste Menu: fragt, ob die Schnittstelle fu:r IPv6 konfiguriert
   werden soll. Falls IPv6 verfu:gbar ist und verwendet werden soll, wa:hlen
   Sie [ Yes ] aus.

   Abbildung 2.38. Auswahl von IPv6
   Auswahl von IPv6

   IPv6 besitzt ebenfalls zwei Arten der Konfiguration. StateLess Address
   AutoConfiguration, (SLAAC) wird automatisch die richtigen Informationen
   von einem lokalen Router abfragen. Lesen Sie
   http://tools.ietf.org/html/rfc4862 fu:r weitere Informationen. Eine
   statische Konfiguration verlangt die manuelle Eingabe von
   Netzwerkinformationen.

   Wenn ein IPv6-Router verfu:gbar ist, wa:hlen Sie im na:chsten Menu:
   [ Yes ], um die Netzwerkschnittstelle automatisch konfigurieren zu lassen.

   Abbildung 2.39. Auswahl der IPv6 SLAAC-Konfiguration
   Auswahl der IPv6 SLAAC-Konfiguration

   Wenn kein IPv6-Router zur Verfu:gung steht, wa:hlen Sie [ No ] und tragen
   Sie die folgenden Adressinformationen in dieses Menu: ein:

   Abbildung 2.40. Statische IPv6-Konfiguration
   Statische IPv6-Konfiguration
     * IPv6 Address - Die zugewiesene IPv6-Adresse, welche dem Computer
       zugeteilt werden soll. Diese Adresse muss eindeutig sein und nicht
       bereits von einer anderen Netzwerkkomponente im lokalen Netzwerk
       verwendet werden.

     * Default Router - Die IPv6-Adresse des Defaultrouters im Netzwerk.

   Das letzte Menu: der Netzwerkkonfiguration konfiguriert den Domain Name
   System (DNS) Resolver, welcher Hostnamen von und zu Netzwerkadressen
   umwandelt. Falls DHCP oder SLAAC verwendet wurde, um die
   Netzwerkschnittstelle zu konfigurieren, ist die Konfiguration fu:r den
   Resolver mo:glicherweise bereits eingetragen. Andernfalls geben Sie den
   lokalen Netzwerkdoma:nennamen in das Feld Search ein. DNS #1 und DNS #2
   sind die IPv4- und/oder IPv6-Adressen der lokalen DNS-Server. Zumindest
   ein DNS-Server wird beno:tigt.

   Abbildung 2.41. DNS-Konfiguration
   DNS-Konfiguration

  2.8.3. Setzen der Zeitzone

   Das na:chste Menu: fragt, ob die Systemuhr UTC oder die lokale Zeit
   verwendet. Wenn Sie sich nicht sicher sind, wa:hlen Sie [ No ], um somit
   die ha:ufiger verwendete lokale Zeit zu setzen.

   Abbildung 2.42. Lokale oder UTC-Zeit
   Lokale oder UTC-Zeit

   Die na:chsten Menu:s werden verwendet, um die korrekte Ortszeit zu
   ermitteln. Dazu muss die gewu:nschte geographische Region, das Land und
   die Zeitzone ausgewa:hlt werden. Das Setzen der Zeitzone erlaubt es dem
   System automatische Korrekturen vorzunehmen, beispielsweise beim Wechsel
   von Sommer- auf Winterzeit.

   Das hier gezeigte Beispiel bezieht sich auf einen Rechner in der
   o:stlichen Zeitzone der Vereinigten Staaten. Die Auswahl wird von der
   geographischen Lage abha:ngig sein.

   Abbildung 2.43. Auswahl der geographischen Region
   Auswahl der geographischen Region

   Das passende Gebiet wird durch die Pfeiltasten und das anschliessende
   dru:cken von Enter gewa:hlt.

   Abbildung 2.44. Das Land auswa:hlen
   Das Land auswa:hlen

   Wa:hlen Sie das zutreffende Land mit den Pfeiltasten und durch
   anschliessendes dru:cken von Enter aus.

   Abbildung 2.45. Wa:hlen einer Zeitzone
   Wa:hlen einer Zeitzone

   Die passende Zeitzone wird durch die Pfeiltasten und anschliessendes
   dru:cken von Enter ausgewa:hlt.

   Abbildung 2.46. Besta:tigen der Zeitzone
   Besta:tigen der Zeitzone

   Besta:tigen Sie, dass die Abku:rzung fu:r die Zeitzone richtig ist. Wenn
   Ihnen diese richtig erscheint, dru:cken Sie Enter, um mit dem Rest der
   Konfiguration fortzufahren.

  2.8.4. Dienste aktivieren

   Zusa:tzliche Systemdienste, die zur Startzeit aktiviert werden sollen,
   ko:nnen im folgenden Menu: eingeschaltet werden. All diese Dienste sind
   optional. Starten Sie nur die Dienste, die zur korrekten Funktion des
   Systems beno:tigt werden.

   Abbildung 2.47. Auswahl zusa:tzlicher Dienste
   Auswahl zusa:tzlicher Dienste

   Die folgenden Dienste ko:nnen u:ber dieses Menu: aktiviert werden:

     * sshd - Der Secure Shell (SSH)-Daemon fu:r Fernzugriff u:ber eine
       verschlu:sselte Verbindung. Aktivieren Sie diesen Dienst nur dann,
       wenn das System fu:r Fernzugriff zur Verfu:gung stehen soll.

     * moused - Aktivieren Sie diesen Dienst, wenn Sie Mausunterstu:tzung auf
       der Systemkonsole beno:tigen.

     * ntpd - Der Network Time Protocol (NTP)-Daemon zur automatischen
       Uhrzeitsynchronisation. Aktivieren Sie diesen Dienst, wenn es im
       Netzwerk einen Windows(R)-, Kerberos- oder LDAP-Server gibt.

     * powerd - Systemwerkzeug zur Leistungsregelung und fu:r
       Stromsparfunktionen.

  2.8.5. Absturzaufzeichnung aktivieren

   Das na:chste Menu: wird Sie fragen, ob die Absturzaufzeichnung auf dem
   Zielsystem aktiviert werden soll. Die Aktivierung von
   Absturzaufzeichnungen kann sehr nu:tzlich sein um Systemfehler
   aufzuspu:ren, deswegen wird Anwendern empfohlen, diese zu aktivieren.

   Abbildung 2.48. Aktivierung der Absturzaufzeichnung
   Aktivierung der Absturzaufzeichnung

  2.8.6. Benutzer hinzufu:gen

   Das na:chste Menu: fordert Sie dazu auf, mindestens ein Benutzerkonto zu
   erstellen. Es wird empfohlen, sich als normaler Benutzer am System
   anzumelden und nicht als root-Benutzer. Wenn man als root angemeldet ist,
   gibt es so gut wie keine Beschra:nkungen oder Schutz vor dem, was man tun
   kann. Die Anmeldung als normaler Benutzer ist daher sicherer und bietet
   mehr Schutz.

   Wa:hlen Sie [ Yes ], um neue Benutzer hinzuzufu:gen.

   Abbildung 2.49. Benutzerkonten hinzufu:gen
   Benutzerkonten hinzufu:gen

   Folgen Sie den Anweisungen und geben Sie die angeforderten Informationen
   fu:r das Benutzerkonto ein. Das Beispiel in Abbildung 2.50,
   "Benutzerinformationen eingeben" erstellt ein Konto fu:r den Benutzer
   asample.

   Abbildung 2.50. Benutzerinformationen eingeben
   Benutzerinformationen eingeben

   Die folgenden Informationen mu:ssen eingegeben werden:

     * Username - Der Name des Benutzers, den man zur Anmeldung eingeben
       muss. Es ist u:blich, den ersten Buchstaben des Vornamens zusammen mit
       dem Nachnamen zu kombinieren. Jeder Benutzername ist mo:glich, solange
       er fu:r das System einzigartig ist. Es wird zwischen Gross- und
       Kleinschreibung unterschieden und der Benutzername sollte keine
       Leerzeichen enthalten.

     * Full name - Der volle Name des Benutzers. Dieser darf auch Leerzeichen
       enthalten und dient als Beschreibung fu:r das Benutzerkonto.

     * Uid - User ID. Normalerweise wird dieses Feld leer gelassen, so dass
       das System einen Wert vergibt.

     * Login group - Die Benutzergruppe. Normalerweise bleibt dieses Feld
       leer, um die Standardgruppe zu akzeptieren.

     * Invite user into other groups? - Zusa:tzliche Gruppen zu denen der
       Benutzer als Mitglied hinzugefu:gt werden soll. Falls der Benutzer
       administrativen Zugriff beno:tigt, tragen Sie hier wheel ein.

     * Login class - In der Regel bleibt dieses Feld leer.

     * Shell - Die interaktive Shell fu:r diesen Benutzer. Tragen Sie hier
       eine der aufgefu:hrten Shells ein. Weitere Informationen u:ber Shells
       finden Sie im Abschnitt 3.9, "Shells".

     * Home directory - Das Heimatverzeichnis des Benutzers. Die Vorgabe ist
       fu:r gewo:hnlich richtig.

     * Home directory permissions - Zugriffsrechte auf das Heimatverzeichnis
       des Benutzers. Die Vorgabe ist normalerweise die passende.

     * Use password-based authentication? - Normalerweise yes, damit der
       Benutzer bei der Anmeldung sein Passwort eingeben muss.

     * Use an empty password? - Normalerweise no, da ein leeres Passwort
       unsicher ist.

     * Use a random password? - Normalerweise no, damit der Benutzer sein
       Passwort am na:chsten Prompt selber vergeben kann.

     * Enter password - Das Passwort fu:r diesen Benutzer. Eingegebene
       Zeichen werden nicht am Bildschirm angezeigt.

     * Enter password again - Das Passwort muss zur U:berpru:fung erneut
       eingegeben werden.

     * Lock out the account after creation? - Normalerweise no, damit sich
       der Benutzer anmelden kann.

   Nachdem alles eingegeben wurde, wird eine Zusammenfassung angezeigt und
   das System fragt Sie, dies so korrekt ist. Falls ein Eingabefehler gemacht
   wurde, geben Sie no ein und versuchen es erneut. Falls alles in Ordnung
   ist, geben Sie yes ein, um den neuen Benutzer anzulegen.

   Abbildung 2.51. Verlassen der Benutzer- und Gruppenverwaltung
   Verlassen der Benutzer- und Gruppenverwaltung

   Falls es mehr Benutzer hinzuzufu:gen gibt, beantworten Sie die Frage Add
   another user? mit yes. Geben Sie no ein, wird das hinzufu:gen von
   Benutzern beendet und die Installation fortgesetzt.

   Fu:r weitere Informationen zum hinzufu:gen von Benutzern und deren
   Verwaltung, lesen Sie Abschnitt 3.3, "Benutzer und grundlegende
   Account-Verwaltung".

  2.8.7. Letzte Konfigurationsschritte

   Nachdem alles installiert und konfiguriert wurde, bekommen Sie noch eine
   letzte Chance, um Einstellungen zu vera:ndern.

   Abbildung 2.52. Letzte Schritte der Konfiguration
   Letzte Schritte der Konfiguration

   Verwenden Sie dieses Menu:, um noch letzte A:nderungen oder zusa:tzliche
   Konfigurationen vor dem Abschliessen der Installation zu ta:tigen.

     * Add User - Beschrieben in Abschnitt 2.8.6, "Benutzer hinzufu:gen".

     * Root Password - Beschrieben in Abschnitt 2.8.1, "Setzen des
       root-Passworts".

     * Hostname - Beschrieben in Abschnitt 2.5.2, "Den Rechnernamen
       festlegen".

     * Network - Beschrieben in Abschnitt 2.8.2, "Die Netzwerkschnittstelle
       konfigurieren".

     * Services - Beschrieben in Abschnitt 2.8.4, "Dienste aktivieren".

     * Time Zone - Beschrieben in Abschnitt 2.8.3, "Setzen der Zeitzone".

     * Handbook - Herunterladen und installieren des FreeBSD Handbuchs.

   Nachdem die letzten Konfigurationsschritte beendet sind, wa:hlen Sie Exit.

   Abbildung 2.53. Manuelle Konfiguration
   Manuelle Konfiguration

   bsdinstall wird nach zusa:tzlichen Konfigurationen, die noch zu ta:tigen
   sind, fragen, bevor in das neue System gebootet wird. Wa:hlen Sie [ Yes ],
   um in eine Shell innerhalb des neuen Systems zu wechseln oder [ No ], um
   mit dem letzten Schritt der Installation zu beginnen.

   Abbildung 2.54. Die Installation vervollsta:ndigen
   Die Installation vervollsta:ndigen

   Wenn weitere Konfigurationen oder besondere Einstellungen beno:tigt
   werden, wa:hlen Sie [ Live CD ], um das Installationsmedium im Live-CD
   Modus zu starten.

   Wenn die Installation vollsta:ndig ist, wa:hlen Sie [ Reboot ], um den
   Computer neu zu starten und das neu installierte FreeBSD-System zu booten.
   Vergessen Sie nicht, das FreeBSD Installationsmedium zu entfernen, oder
   der Computer wird erneut davon starten.

   Wenn FreeBSD startet, werden viele Informationsmeldungen ausgegeben.
   Nachdem das System den Startvorgang abgeschlossen hat, wird eine
   Anmeldeaufforderung angezeigt. Geben Sie am login: den Benutzernamen ein,
   den Sie wa:hrend der Installation hinzugefu:gt haben. Vermeiden Sie es,
   sich als root anzumelden. Lesen Sie Abschnitt 3.3.1.3, "Der
   Superuser-Account", wenn Sie administrativen Zugriff beno:tigen.

   Um Nachrichten, die wa:hrend des Bootens angezeigt wurden, zu sehen,
   aktivieren Sie durch dru:cken von Scroll-Lock den scroll-back buffer. Die
   Tasten PgUp, PgDn und die Pfeiltasten dienen zur Navigation durch die
   Nachrichten. Durch erneutes dru:cken von Scroll-Lock wird der Bildschirm
   wieder entsperrt und kehrt zur normalen Anzeige zuru:ck. Mit less
   /var/run/dmesg.boot ko:nnen Sie sich diese Nachrichten im laufenden
   Betrieb ansehen. Durch dru:cken von q kehren Sie wieder zur Kommandozeile
   zuru:ck.

   Wenn sshd in Abbildung 2.47, "Auswahl zusa:tzlicher Dienste" aktiviert
   wurde, ist der erste Start ein bisschen langsamer, weil das System die
   RSA- und DSA-Schlu:ssel erzeugen muss. Die nachfolgenden Startvorga:nge
   werden dann wieder schneller sein. Wie in diesem Beispiel zu sehen ist,
   werden die Fingerabdru:cke der Schlu:ssel am Bildschirm ausgegeben:

 Generating public/private rsa1 key pair.
 Your identification has been saved in /etc/ssh/ssh_host_key.
 Your public key has been saved in /etc/ssh/ssh_host_key.pub.
 The key fingerprint is:
 10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 root@machine3.example.com
 The key's randomart image is:
 +--[RSA1 1024]----+
 |    o..          |
 |   o . .         |
 |  .   o          |
 |       o         |
 |    o   S        |
 |   + + o         |
 |o . + *          |
 |o+ ..+ .         |
 |==o..o+E         |
 +-----------------+
 Generating public/private dsa key pair.
 Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
 Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
 The key fingerprint is:
 7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 root@machine3.example.com
 The key's randomart image is:
 +--[ DSA 1024]----+
 |       ..     . .|
 |      o  .   . + |
 |     . ..   . E .|
 |    . .  o o . . |
 |     +  S = .    |
 |    +  . = o     |
 |     +  . * .    |
 |    . .  o .     |
 |      .o. .      |
 +-----------------+
 Starting sshd.

   Lesen Sie Abschnitt 13.8, "OpenSSH" fu:r weitere Informationen zu
   Fingerabdru:cken und SSH.

   FreeBSD installiert standardma:ssig keine graphische Umgebung. Kapitel 5,
   Das X-Window-System entha:lt Informationen zur Installation und
   Konfiguration eines graphischen Window Managers.

   Das korrekte herunterfahren eines FreeBSD-Computers hilft, beugt dem
   Datenverlust vor und schu:tzt sogar die Hardware vor Scha:den. Schalten
   Sie nicht den Strom ab, bevor das System ordnungsgema:ss heruntergefahren
   wurde! Wenn der Benutzer ein Mitglied der wheel-Gruppe ist, ko:nnen Sie
   zum Superuser durch die Eingabe von su und der anschliessenden Eingabe des
   Passworts von root werden. Geben Sie dann shutdown -p now ein. Das System
   wird jetzt sauber heruntergefahren und, falls die Hardware es
   unterstu:tzt, den Rechner ausschalten.

2.9. Fehlerbehebung

   Dieser Abschnitt behandelt einfache Fehlerbehebungen fu:r die
   Installation, wie beispielsweise ha:ufig auftretende Fehler, die von
   Anwendern berichtet wurden.

   U:berpru:fen Sie die Hardware Notes (
   http://www.FreeBSD.org/releases/index.html) nach der Version von FreeBSD,
   um sicher zu stellen, dass die Hardware auch unterstu:tzt wird. Wenn die
   Hardware unterstu:tzt wird und Sie immer noch Abstu:rze oder andere
   Probleme erleben, mu:ssen Sie einen eigenen Kernel bauen. Diese Prozedur
   wird in Kapitel 8, Konfiguration des FreeBSD-Kernels beschrieben. Das
   erlaubt es, Unterstu:tzung fu:r Gera:te, die im GENERIC-Kernel nicht
   vorhanden sind, hinzuzufu:gen. Der Kernel ist mit der Annahme
   konfiguriert, dass die Hardwaregera:te sich in ihren Fabrikeinstellungen
   in Bezug auf IRQs, I/O-Adressen und DMA-Kana:len befinden. Wenn die
   Hardware neu konfiguriert wurde, werden Sie mo:glicherweise die
   Konfiguration des Kernels bearbeiten und diesen neu erstellen mu:ssen, um
   FreeBSD mitzuteilen, wo es gewisse Dinge finden kann.

  Anmerkung:

   Manche Installationsprobleme ko:nnen Aktualisierung der Firmware auf
   verschiedenen Hardwarekomponenten verhindert oder verringert werden,
   meistens am Mainboard. Mit Mainboard-Firmware ist fu:r gewo:hnlich das
   BIOS gemeint. Die meisten Mainboard- und Computerhersteller haben eine
   Webseite mit Aktualisierungen und Informationen zur Durchfu:hrung.

   Hersteller raten meist von einer Aktualisierung des Mainboard-BIOS ab,
   ausser es gibt einen guten Grund dafu:r, wie beispielsweise eine kritische
   Aktualisierung. Der Aktualisierungsvorgang kann schiefgehen, was das BIOS
   unvollsta:ndig macht und den Computer nicht mehr starten la:sst.

   Wenn das System wa:hrend der Gera:teerkennung beim Starten ha:ngt oder
   sich wa:hrend der Installation merkwu:rdig verha:lt, ist ACPI vielleicht
   der U:belta:ter. FreeBSD macht starken Gebrauch vom ACPI-Dienst des
   Systems auf den i386-, amd64- und ia64-Platformen, um den System bei der
   Konfiguration wa:hrend des Startvorgangs zu helfen. Leider existieren
   immer noch Fehler im ACPI-Treiber, in den Mainboards und der
   BIOS-Firmware. ACPI kann durch setzen der Einstellung hint.acpi.0.disabled
   im dritten Teil des Bootloaders deaktiviert werden:

 set hint.acpi.0.disabled="1"

   Dies wird nach jedem Neustart des Systems wieder zuru:ckgesetzt, also ist
   es notwendig, die Zeile hint.acpi.0.disabled="1" zu der Datei
   /boot/loader.conf hinzuzufu:gen. Weitere Informationen u:ber den
   Bootloader lassen sich in Abschnitt 12.1, "U:bersicht" nachlesen.

2.10. Verwendung der Live-CD

   Das Willkommensmenu: von bsdinstall, welches in Abbildung 2.3,
   "Willkommen-Menu:" gezeigt wird, entha:lt eine [ Live CD ] Option. Die
   Live-CD ist fu:r Benutzer, die sich fragen, ob FreeBSD das richtige
   Betriebssystem fu:r sie ist und die vor der Installation noch einige
   Merkmale und Eigenschaften testen wollen.

   Die folgenden Punkte sollten beachtet werden, bevor die [ Live CD ]
   benutzt wird:

     * Um Zugriff auf das System zu bekommen, wird eine Authentifizierung
       beno:tigt. Der Benutzername ist root und das Kennwort bleibt leer.

     * Da das System direkt von dem Installationsmedium ausgefu:hrt wird, ist
       die Geschwindigkeit deutlich langsamer als bei einem System, das auf
       einer Festplatte installiert ist.

     * Diese Option entha:lt nur eine Eingabeaufforderung und keine
       graphische Oberfla:che.

Kapitel 3. Grundlagen des UNIX Betriebssystems

   Inhaltsverzeichnis

   3.1. U:bersicht

   3.2. Virtuelle Konsolen und Terminals

   3.3. Benutzer und grundlegende Account-Verwaltung

   3.4. Zugriffsrechte

   3.5. Verzeichnis-Strukturen

   3.6. Festplatten, Slices und Partitionen

   3.7. Anha:ngen und Abha:ngen von Dateisystemen

   3.8. Prozesse und Da:monen

   3.9. Shells

   3.10. Text-Editoren

   3.11. Gera:te und Gera:tedateien

   3.12. Manualpages

3.1. U:bersicht

   Dieses Kapitel umfasst die grundlegenden Kommandos und Funktionsweisen des
   FreeBSD-Betriebssystems. Viel von diesem Material gilt auch fu:r jedes
   andere UNIX(R)-artige System. Neue Benutzer von FreeBSD sollten dieses
   Kapitel aufmerksam lesen.

   Dieser Abschnitt behandelt die folgenden Themen:

     * virtuelle Konsolen,

     * Erstellung und Verwaltung von Benutzern und Gruppen in FreeBSD,

     * Zugriffsrechte unter UNIX(R) sowie Datei-Flags unter FreeBSD,

     * Zugriffskontrolllisten fu:r Dateisysteme,

     * die Verzeichnisstruktur von FreeBSD,

     * Organisation von Dateisystemen unter FreeBSD,

     * Ein- und Abha:ngen von Dateisystemen,

     * Prozesse, Da:monen und Signale,

     * Shells und die Login-Umgebung,

     * Texteditoren,

     * Gera:te und Gera:tedateien,

     * wie Sie in den Manualpages nach weiteren Informationen suchen ko:nnen.

3.2. Virtuelle Konsolen und Terminals

   Wenn das FreeBSD-System so konfiguriert wurde, dass es ohne eine grafische
   Benutzeroberfla:che startet, wird das System nach dem Start einen
   Anmeldeprompt ausgeben, wie in diesem Beispiel zu sehen:

 FreeBSD/amd64 (pc3.example.org) (ttyv0)

 login:

   Die erste Zeile entha:lt einige Informationen u:ber das System. amd64
   zeigt an, dass auf dem System in diesem Beispiel eine 64-Bit Version von
   FreeBSD la:uft. Der Hostname ist pc3.example.org und ttyv0 gibt an, dass
   dies die "Systemkonsole" ist. Die zweite Zeile zeigt den Anmeldeprompt.

   Da FreeBSD ein Mehrbenutzersystem ist, muss es die verschiedenen Benutzer
   voneinander unterscheiden ko:nnen. Dies wird dadurch erreicht, dass sich
   jeder Benutzer zuerst am System anmelden muss, um Zugriff auf die
   Programme zu bekommen. Jeder Benutzer hat einen eindeutigen
   "Benutzernamen" und ein perso:nliches "Kennwort".

   Um sich auf der Systemkonsole anzumelden, geben Sie den Benutzernamen ein,
   der wa:hrend der Systeminstallation, wie in Abschnitt 2.8.6, "Benutzer
   hinzufu:gen" beschrieben, konfiguriert wurde und dru:cken Sie Enter. Geben
   Sie dann das zum Benutzernamen zugeordnete Passwort ein und dru:cken
   Enter. Das Passwort wird aus Sicherheitsgru:nden nicht angezeigt.

   Sobald das richtige Passwort eingegeben wird, wird die Nachricht des Tages
   (MOTD) gefolgt von einer Eingabeaufforderung ausgegeben. In Abha:ngigkeit
   der verwendeten Shell des Benutzers wird der Prompt mit dem Zeichen #, $
   oder % dargestellt. Der Prompt zeigt an, dass der Benutzer jetzt an der
   FreeBSD Systemkonsole angemeldet ist und nun alle verfu:gbaren Befehle
   probieren kann.

  3.2.1. Virtuelle Konsolen

   Obwohl die Systemkonsole dazu verwendet werden kann, um mit dem System zu
   interagieren, wird sich ein Benutzer in der Regel an einer virtuellen
   Konsole im FreeBSD-System anmelden. Das liegt daran, dass die
   Systemmeldungen standardma:ssig auf der Systemkonsole angezeigt werden und
   somit die Meldungen des Befehls oder einer Datei, die der Benutzer gerade
   bearbeitet, u:berschrieben werden.

   In der Voreinstellung ist FreeBSD so konfiguriert, dass viele virtuelle
   Konsolen zur Eingabe von Befehlen zur Verfu:gung stehen. Jede virtuelle
   Konsole verfu:gt u:ber einen eigenen Anmeldeprompt und eine Shell. Sie
   ko:nnen ganz einfach zwischen den virtuellen Konsolen umschalten. Dies ist
   vergleichbar mit mehreren geo:ffneten Fenstern in einer graphischen
   Umgebung.

   Die Tastenkombinationen Alt+F1 bis Alt+F8 sind in FreeBSD zum Umschalten
   zwischen virtuellen Konsolen reserviert. Verwenden Sie Alt+F1 um auf die
   Systemkonsole (ttyv0) zu wechseln, Alt+F2 fu:r die erste virtuelle Konsole
   (ttyv1, Alt+F3 fu:r die zweite virtuelle Konsole (ttyv2, und so weiter.

   Beim Wechsel von einer Konsole zur na:chsten wird die Bildschirmausgabe
   von FreeBSD verwaltet. Dies erzeugt die Illusion mehrerer Bildschirme und
   Tastaturen, an denen Kommandos abgesetzt werden ko:nnen. Die Programme,
   die in einer virtuellen Konsole gestartet werden, laufen auch dann weiter,
   wenn der Benutzer auf eine andere virtuelle Konsole wechselt.

   Lesen Sie kbdcontrol(1), vidcontrol(1), atkbd(4), syscons(4) sowie vt(4)
   fu:r eine recht technische Beschreibung der FreeBSD-Konsole und der
   Tastatur-Treiber.

   In FreeBSD wird die Anzahl der verfu:gbaren virtuellen Konsolen in diesem
   Abschnitt von /etc/ttys konfiguriert:

 # name    getty                         type  status comments
 #
 ttyv0   "/usr/libexec/getty Pc"         xterm   on  secure
 # Virtual terminals
 ttyv1   "/usr/libexec/getty Pc"         xterm   on  secure
 ttyv2   "/usr/libexec/getty Pc"         xterm   on  secure
 ttyv3   "/usr/libexec/getty Pc"         xterm   on  secure
 ttyv4   "/usr/libexec/getty Pc"         xterm   on  secure
 ttyv5   "/usr/libexec/getty Pc"         xterm   on  secure
 ttyv6   "/usr/libexec/getty Pc"         xterm   on  secure
 ttyv7   "/usr/libexec/getty Pc"         xterm   on  secure
 ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure

   Um eine virtuelle Konsole zu deaktivieren, setzen Sie ein Kommentarzeichen
   (# an den Anfang der Zeile fu:r die entsprechende Konsole. Um bspw. die
   Anzahl der verfu:gbaren virtuellen Konsolen von acht auf vier zu
   reduzieren, setzen Sie ein # an den Anfang der letzten vier Zeilen, den
   virtuellen Konsolen ttyv5 bis ttyv8. Kommentieren Sie nicht die Zeile fu:r
   die Systemkonsole ttyv0 aus! Beachten Sie, dass die letzte virtuelle
   Konsole (ttyv8) zum Wechsel auf die graphische Oberfla:che gedacht ist,
   wenn Xorg wie im Kapitel 5, Das X-Window-System installiert und
   konfiguriert ist.

   ttys(5) entha:lt eine ausfu:hrliche Beschreibung der Spalten dieser Datei
   und der verfu:gbaren Optionen fu:r virtuelle Konsolen.

  3.2.2. Single-User-Modus

   Das FreeBSD Boot-Menu: verfu:gt u:ber eine Option "Boot Single User". Wird
   diese Option gewa:hlt, bootet das System in einen speziellen Modus, der
   als "Single-User-Modus" bekannt ist. Dieser Modus wird normalerweise zur
   Reparatur des Systems verwendet, bspw. wenn das System nicht mehr startet,
   oder das root-Passwort zuru:ckgesetzt werden muss. Im Single-User-Modus
   haben Sie keinen Zugriff auf das Netzwerk und es stehen Ihnen keine
   weiteren virtuellen Konsolen zur Verfu:gung. Allerdings haben Sie vollen
   Zugriff auf das System und in der Voreinstellung wird das root-Passwort
   nicht beno:tigt. Aus diesem Grund wird ein physischer Zugriff auf die
   Tastatur beno:tigt, um in diesem Modus zu booten. Zur Absicherung eines
   FreeBSD-Systems sollte ermittelt werden, welche Personen physischen
   Zugriff auf die Tastatur bekommen sollen.

   Die Einstellungen fu:r den Single-User-Modus befinden sich diesem
   Abschnitt von /etc/ttys:

 # name  getty                           type  status  comments
 #
 # If console is marked "insecure", then init will ask for the root password
 # when going to single-user mode.
 console none                            unknown  off  secure

   In der Voreinstellung ist der Status auf secure eingestellt. Das setzt
   voraus, dass der physische Zugriff auf die Tastatur entweder unwichtig
   ist, oder u:ber eine Sicherheitsrichtlinie geregelt wird. Wenn der Status
   auf insecure eingestellt wird, wird davon ausgegangen, dass die Umgebung
   selbst unsicher ist, da jeder Zugriff auf die Tastatur hat. FreeBSD wird
   dann nach dem root-Passwort fragen, wenn ein Benutzer versucht in den
   Single-User-Modus zu booten.

  Anmerkung:

   Setzen Sie insecure nicht leichtfertig ein! Wenn das root-Passwort
   vergessen wird, wird es schwierig in den Single-User-Modus zu gelangen,
   wenn man den Bootprozess von FreeBSD nicht genau versteht.

  3.2.3. Den Videomodus der Konsole anpassen

   Der Standard-Videomodus der FreeBSD-Konsole kann auf jeden Modus
   eingestellt werden, der von der Grafikkarte und dem Monitor unterstu:tzt
   wird (beispielsweise 1024x768 oder 1280x1024). Um eine andere Einstellung
   zu verwenden, muss das VESA-Modul geladen werden:

 # kldload vesa

   Um festzustellen, welche Video-Modi von der Hardware unterstu:tzt werden,
   nutzen Sie vidcontrol(1). Um eine Liste aller unterstu:tzten Modi zu
   sehen, verwenden Sie diesen Befehl:

 # vidcontrol -i mode

   Die Ausgabe dieses Befehls listet alle Videomodi, die von der Hardware
   unterstu:tzt werden. Um einen neuen Video-Modi zu wa:hlen, wird der
   entsprechende Modus als root-Benutzer an vidcontrol(1) u:bergeben:

 # vidcontrol MODE_279

   Um diese Einstellung dauerhaft zu speichern, muss folgende Zeile in
   /etc/rc.conf hinzugefu:gt werden:

 allscreens_flags="MODE_279"

3.3. Benutzer und grundlegende Account-Verwaltung

   FreeBSD ermo:glicht es mehreren Benutzern, den Computer zur selben Zeit zu
   benutzen. Es kann immer nur ein Benutzer vor der Konsole sitzen, aber es
   ko:nnen sich beliebig viele Benutzer u:ber das Netzwerk am System
   anmelden. Jeder Benutzer muss einen Account haben, um das System benutzen
   zu ko:nnen.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie

     * die verschiedenen Account-Typen von FreeBSD kennen,

     * wissen, wie Sie Accounts angelegen, vera:ndern oder lo:schen,

     * wissen, wie Sie Limits fu:r einen Benutzer oder eine Gruppe setzen, um
       beispielsweise Ressourcen, wie Speicher oder CPU-Zeit einzuschra:nken,

     * wissen, wie Sie Gruppen erstellen und Benutzer zu diesen Gruppen
       hinzufu:gen.

  3.3.1. Account-Typen

   Jeder Zugriff auf das FreeBSD-System geschieht u:ber Accounts und alle
   Prozesse werden von Benutzern gestartet, also sind Benutzer- und
   Account-Verwaltung von wesentlicher Bedeutung.

   Es gibt drei Haupttypen von Accounts: Systembenutzer, Benutzer-Accounts
   und der Superuser-Account.

    3.3.1.1. Systembenutzer

   Systembenutzer starten Dienste wie DNS, Mail-Server und Web-Server. Der
   Grund dafu:r ist die Sicherheit; wenn die Programme von dem Superuser
   gestartet werden, ko:nnen Sie ohne Einschra:nkungen handeln.

   Beispiele von Systembenutzern sind daemon, operator, bind, news und www.

   nobody ist der generische unprivilegierte Systembenutzer. Bedenken Sie
   aber, dass je mehr Dienste nobody benutzen, desto mehr Dateien und
   Prozesse diesem Benutzer geho:ren und dieser Benutzer damit umso
   privilegierter wird.

    3.3.1.2. Benutzer-Accounts

   Benutzer-Accounts sind realen Personen zugeordnet und sind das prima:re
   Mittel des Zugriffs das System. Jede Person, die Zugriff auf das System
   bekommt, sollte einen eindeutigen Benutzer-Account besitzen. Dies erlaubt
   es dem Administrator herauszufinden, wer was macht. Gleichzeitig werden
   die Benutzer daran gehindert, die Einstellungen anderer Benutzer zu
   zersto:ren.

   Jeder Benutzer kann die eigene Umgebung anpassen, bspw. seine
   voreingestellte Shell, Editor, Tastenbelegungen und Spracheinstellungen.

   Mit jedem Account eines FreeBSD-Systems sind bestimmte Informationen
   verknu:pft:

   Loginnamen

           Der Loginname wird am login: Prompt eingegeben. Jeder Benutzer
           muss einen eindeutigen Benutzernamen haben. Es gibt eine Reihe von
           Regeln fu:r die Erstellung von gu:ltigen Loginnamen, die in
           passwd(5) dokumentiert sind. Es wird aus Kompatibilita:tsgru:nden
           empfohlen, Benutzernamen zu verwenden, die aus Kleinbuchstaben
           bestehen und bis zu acht Zeichen lang sind.

   Passwort

           Jeder Account ist mit einem Passwort verknu:pft.

   User ID (UID)

           Die User ID (UID) ist eine Zahl, die verwendet wird, um die
           Benutzer auf dem FreeBSD-System eindeutig zu identifizieren.
           Programme, die einen Loginnamen akzeptieren, wandeln diesen zuerst
           in eine UID um. Es wird empfohlen, nur UIDs kleiner 65535 zu
           verwenden, da ho:here Werte Kompatibilita:tsprobleme mit einigen
           Anwendungen verursachen ko:nnen.

   Group ID (GID)

           Die Group ID (GID) ist eine Zahl, die verwendet wird, um die
           prima:re Gruppe eines Benutzers eindeutig zu identifizieren.
           Gruppen sind ein Mechanismus zur Steuerung des Zugriffs auf
           Ressourcen u:ber die GID eines Benutzers anstelle der UID. Dies
           kann die Gro:sse einiger Konfigurationsdateien signifikant
           reduzieren und ermo:glicht es Benutzern, Mitglied mehreren Gruppen
           zu sein. Es wird empfohlen, GIDs kleiner 65535 zu verwenden, da
           ho:here Werte bei einigen Anwendungen grosse Probleme verursachen
           ko:nnen.

   Login-Klasse

           Login-Klassen erweitern das Gruppenkonzept. Sie erho:hen die
           Flexibilita:t des Systems in der Handhabung der verschiedenen
           Accounts. Login-Klassen werden auch im Abschnitt 13.13.1,
           "Login-Klassen konfigurieren" diskutiert.

   Gu:ltigkeit von Passwo:rtern

           In der Voreinstellung verfallen Passwo:rter nicht. Allerdings
           ko:nnen Passwortwechsel nach einer gewissen Zeit auf Basis
           einzelner Accounts erzwungen werden.

   Verfallszeit eines Accounts

           In der Voreinstellung verfallen unter FreeBSD keine Accounts. Wenn
           Sie Accounts einrichten, die nur fu:r eine bestimmte Zeit gu:ltig
           sein sollen, beispielsweise Accounts fu:r Teilnehmer eines
           Praktikums, ko:nnen Sie mit pw(8) die Gu:ltigkeitsdauer des
           Accounts angeben. Nachdem die angegebene Zeitspanne verstrichen
           ist, kann dieser Account nicht mehr zum Anmelden verwendet werden,
           obwohl alle Verzeichnisse und Dateien, die diesem Account
           geho:ren, noch vorhanden sind.

   vollsta:ndiger Benutzername

           FreeBSD identifiziert einen Account eindeutig u:ber den
           Loginnamen, der aber keine A:hnlichkeit mit dem richtigen Namen
           des Benutzers haben muss. A:hnlich wie bei einem Kommentar, kann
           diese Information Leerzeichen, Grossbuchstaben und mehr als 8
           Zeichen enthalten.

   Heimatverzeichnis

           Das Heimatverzeichnis gibt den vollsta:ndigen Pfad zu dem
           Verzeichnis an, in dem sich der Benutzer nach erfolgreicher
           Anmeldung befindet. Es ist u:blich, alle Heimatverzeichnisse unter
           /home/Loginname oder /usr/home/Loginname anzulegen. Im
           Heimatverzeichnis oder in dort angelegten Verzeichnissen werden
           die Dateien eines Benutzers gespeichert.

   Login-Shell

           Grundsa:tzlich ist die Shell, von denen es viele unterschiedliche
           gibt, eine Schnittstelle zum System. Die bevorzugte Shell eines
           Benutzers kann seinem Account zugeordnet werden.

    3.3.1.3. Der Superuser-Account

   Der Superuser-Account, normalerweise root genannt, ist vorkonfiguriert und
   erleichtert die Systemverwaltung, sollte aber nicht fu:r allta:gliche
   Aufgaben wie das Verschicken und Empfangen von Mails, Erforschen des
   Systems oder Programmierung benutzt werden.

   Der Superuser kann, im Gegensatz zu normalen Benutzer-Accounts, ohne
   Beschra:nkungen operieren und die falsche Anwendung des Superuser-Accounts
   kann in spektakula:ren Katastrophen resultieren. Benutzer-Accounts sind
   nicht in der Lage, das System versehentlich zu zersto:ren, deswegen wird
   empfohlen, normale Benutzer-Accounts zu verwenden, solange nicht
   zusa:tzliche Privilegien beno:tigt werden.

   Kommandos, die Sie als Superuser eingeben, sollten Sie immer doppelt und
   dreifach u:berpru:fen, da ein zusa:tzliches Leerzeichen oder ein fehlender
   Buchstabe irreparablen Datenverlust bedeuten kann.

   Es gibt mehrere Mo:glichkeiten Superuser-Rechte zu bekommen. Obwohl man
   sich direkt als root anmelden kann, wird von dieser Methode dringend
   abgeraten.

   Verwenden Sie stattdessen su(1) um zum Superuser zu werden. Wenn Sie noch
   ein - eingeben, wird der Benutzer auch die Umgebung des Root-Benutzers
   erben. Der Benutzer, der diesen Befehl ausfu:hrt muss Mitglied der Gruppe
   wheel sein, oder der Befehl schla:gt fehl. Zudem muss der Benutzer das
   Kennwort fu:r den Benutzer-Account root kennen.

   In diesem Beispiel wird der Benutzer nur zum Superuser, um make install
   auszufu:hren, da dieser Befehl Superuser-Rechte erfordert. Nachdem der
   Befehl ausgefu:hrt wurde, kann der Benutzer exit eingeben, um den
   Superuser-Account zu verlassen und zu den Privilegien des
   Benutzer-Accounts zuru:ckkehren.

   Beispiel 3.1. Ein Programm als Superuser installieren

 % configure
 % make
 % su -
 Password:
 # make install
 # exit
 %

   Das in FreeBSD enthaltene su(1) funktioniert gut fu:r einzelne Systeme
   oder in kleineren Netzwerken, mit nur einem Administrator. Eine
   Alternative ist es, das Paket oder den Port security/sudo zu installieren.
   Diese Software bietet eine Protokollierung von Aktivita:ten und
   ermo:glicht es dem Administrator zu bestimmen, welche Benutzer welche
   Befehle als Superuser ausfu:hren du:rfen.

  3.3.2. Accounts vera:ndern

   FreeBSD stellt eine Vielzahl an Programmen bereit, um Accounts zu
   vera:ndern. Die gebra:uchlichsten Kommandos sind in Tabelle 3.1,
   "Programme zur Verwaltung von Benutzer-Accounts" gefolgt von einer
   detaillierten Beschreibung, zusammengefasst. Weitere Informationen und
   Anwendungsbeispiele finden Sie in der Manualpage des jeweiligen Programms.

   Tabelle 3.1. Programme zur Verwaltung von Benutzer-Accounts

    Programm                          Zusammenfassung                         
   adduser(8) Das empfohlene Werkzeug, um neue Accounts zu erstellen.         
   rmuser(8)  Das empfohlene Werkzeug, um Accounts zu lo:schen.               
   chpass(1)  Ein flexibles Werkzeug, um Informationen in der                 
              Account-Datenbank zu vera:ndern.                                
   passwd(1)  Ein Werkzeug, um Passwo:rter von Accounts zu a:ndern.           
   pw(8)      Ein ma:chtiges und flexibles Werkzeug um alle Informationen     
              u:ber Accounts zu a:ndern.                                      

    3.3.2.1. adduser

   Das empfohlene Programm zum Hinzufu:gen neuer Benutzer ist adduser(8).
   Wenn ein neuer Benutzer hinzugefu:gt wird, aktualisiert das Programm
   automatisch /etc/passwd und /etc/group. Es erstellt auch das
   Heimatverzeichnis fu:r den Benutzer, kopiert die
   Standardkonfigurationsdateien aus /usr/share/skel und kann optional eine
   ,,Willkommen``-Nachricht an den neuen Benutzer versenden. Das Programm
   muss als Superuser ausgefu:hrt werden.

   Das Werkzeug adduser(8) arbeitet interaktiv und fu:hrt durch die einzelnen
   Schritte, wenn ein neues Benutzerkonto erstellt wird. Wie in Beispiel 3.2,
   "Einen Benutzer unter FreeBSD anlegen" zu sehen ist, mu:ssen Sie entweder
   die beno:tigte Information eingeben oder Return dru:cken, um den
   Vorgabewert in eckigen Klammern zu akzeptieren. In diesem Beispiel wird
   der Benutzer in die Gruppe wheel aufgenommen, was es ihm erlaubt mit su(1)
   zum Superuser zu werden. Wenn Sie fertig sind, ko:nnen Sie entweder einen
   weiteren Benutzer erstellen oder das Programm beenden.

   Beispiel 3.2. Einen Benutzer unter FreeBSD anlegen

 # adduser
 Username: jru
 Full name: J. Random User
 Uid (Leave empty for default):
 Login group [jru]:
 Login group is jru. Invite jru into other groups? []: wheel
 Login class [default]:
 Shell (sh csh tcsh zsh nologin) [sh]: zsh
 Home directory [/home/jru]:
 Home directory permissions (Leave empty for default):
 Use password-based authentication? [yes]:
 Use an empty password? (yes/no) [no]:
 Use a random password? (yes/no) [no]:
 Enter password:
 Enter password again:
 Lock out the account after creation? [no]:
 Username   : jru
 Password   : ****
 Full Name  : J. Random User
 Uid        : 1001
 Class      :
 Groups     : jru wheel
 Home       : /home/jru
 Shell      : /usr/local/bin/zsh
 Locked     : no
 OK? (yes/no): yes
 adduser: INFO: Successfully added (jru) to the user database.
 Add another user? (yes/no): no
 Goodbye!
 #

  Anmerkung:

   Wenn Sie das Passwort eingeben, werden weder Passwort noch Sternchen
   angezeigt. Passen Sie auf, dass Sie das Passwort korrekt eingeben.

    3.3.2.2. rmuser

   Benutzen Sie rmuser(8) als Superuser, um einen Account vollsta:ndig aus
   dem System zu entfernen. Dieses Programm fu:hrt die folgenden Schritte
   durch:

    1. Entfernt den crontab(1) Eintrag des Benutzers, wenn dieser existiert.

    2. Entfernt alle at(1) jobs, die dem Benutzer geho:ren.

    3. Schliesst alle Prozesse des Benutzers.

    4. Entfernt den Benutzer aus der lokalen Passwort-Datei des Systems.

    5. Entfernt optional das Heimatverzeichnis des Benutzers, falls es dem
       Benutzer geho:rt.

    6. Entfernt eingegangene E-Mails des Benutzers aus /var/mail.

    7. Entfernt alle Dateien des Benutzers aus tempora:ren
       Dateispeicherbereichen wie /tmp.

    8. Entfernt den Loginnamen von allen Gruppen, zu denen er geho:rt, aus
       /etc/group. Wenn eine Gruppe leer wird und der Gruppenname mit dem
       Loginnamen identisch ist, wird die Gruppe entfernt. Das erga:nzt sich
       mit den einzelnen Benutzer-Gruppen, die von adduser(8) fu:r jeden
       neuen Benutzer erstellt werden.

   Der Superuser-Account kann nicht mit rmuser(8) entfernt werden, da dies in
   den meisten Fa:llen das System unbrauchbar macht.

   Als Vorgabe wird ein interaktiver Modus benutzt.

   Beispiel 3.3. Interaktives Lo:schen von Accounts mit rmuser

 # rmuser jru
 Matching password entry:
 jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
 Is this the entry you wish to remove? y
 Remove user's home directory (/home/jru)? y
 Removing user (jru): mailspool home passwd.
 #

    3.3.2.3. chpass

   Jeder Benutzer kann chpass(1) verwenden, um die Shell und perso:nliche
   Informationen des Benutzerkontos zu vera:ndern. Der Superuser kann dieses
   Werkzeug benutzen, um zusa:tzliche Kontoinformationen fu:r alle Benutzer
   zu a:ndern.

   Werden neben dem optionalen Loginnamen keine weiteren Optionen angegeben,
   zeigt chpass(1) einen Editor mit Account-Informationen an. Wenn der
   Benutzer den Editor verla:sst, wird die Account-Datenbank mit den neuen
   Informationen aktualisiert.

  Anmerkung:

   Dieses Programm fragt nach dem Verlassen des Editors nach dem Passwort, es
   sei denn, man ist als Superuser angemeldet.

   In Beispiel 3.4, "chpass als Superuser verwenden" hat der Superuser chpass
   jru eingegeben. Es werden die Felder ausgegeben, die fu:r diesen Benutzer
   gea:ndert werden ko:nnen. Wenn stattdessen jru diesen Befehl aufruft,
   werden nur die letzten sechs Felder ausgegeben. Dies ist in Beispiel 3.5,
   "chpass als normaler Benutzer verwenden" zu sehen.

   Beispiel 3.4. chpass als Superuser verwenden

 #Changing user database information for jru.
 Login: jru
 Password: *
 Uid [#]: 1001
 Gid [# or name]: 1001
 Change [month day year]:
 Expire [month day year]:
 Class:
 Home directory: /home/jru
 Shell: /usr/local/bin/zsh
 Full Name: J. Random User
 Office Location:
 Office Phone:
 Home Phone:
 Other information:

   Beispiel 3.5. chpass als normaler Benutzer verwenden

 #Changing user database information for jru.
 Shell: /usr/local/bin/tcsh
 Full Name: J. Random User
 Office Location:
 Office Phone:
 Home Phone:
 Other information:

  Anmerkung:

   Die Kommandos chfn(1) und chsh(1) sind nur Verweise auf chpass(1), genauso
   wie ypchpass(1), ypchfn(1) und ypchsh(1). Da NIS automatisch unterstu:tzt
   wird, ist es nicht notwendig das yp vor dem Kommando einzugeben. NIS wird
   spa:ter im Kapitel 28, Netzwerkserver besprochen.

    3.3.2.4. passwd

   Jeder Benutzer kann mit passwd(1) einfach sein Passwort a:ndern. Um eine
   versehentliche oder unbefugte A:nderung zu verhindern, muss bei einem
   Passwortwechsel zuna:chst das urspru:ngliche Passwort eingegeben werden,
   bevor das neue Passwort festgelegt werden kann.

   Beispiel 3.6. Das eigene Passwort wechseln

 % passwd
 Changing local password for jru.
 Old password:
 New password:
 Retype new password:
 passwd: updating the database...
 passwd: done

   Der Superuser kann jedes beliebige Passwort a:ndern, indem er den
   Benutzernamen an passwd(1) u:bergibt. Das Programm fordert den Superuser
   nicht dazu auf, das aktuelle Passwort des Benutzers einzugeben. Dadurch
   kann das Passwort gea:ndert werden, falls der Benutzer sein
   urspru:ngliches Passwort vergessen hat.

   Beispiel 3.7. Als Superuser das Passwort eines anderen Accounts vera:ndern

 # passwd jru
 Changing local password for jru.
 New password:
 Retype new password:
 passwd: updating the database...
 passwd: done

  Anmerkung:

   Wie bei chpass(1) ist yppasswd(1) nur ein Verweis auf passwd(1). NIS wird
   von jedem dieser Kommandos unterstu:tzt.

    3.3.2.5. pw

   Mit dem Werkzeug pw(8) ko:nnen Accounts und Gruppen erstellt, entfernt,
   vera:ndert und angezeigt werden. Dieses Kommando dient als Schnittstelle
   zu den Benutzer- und Gruppendateien des Systems. pw(8) besitzt eine Reihe
   ma:chtiger Kommandozeilenschalter, die es fu:r die Benutzung in
   Shell-Skripten geeignet machen, doch finden neue Benutzer die Bedienung
   des Kommandos komplizierter, als die der anderen hier vorgestellten
   Kommandos.

  3.3.3. Gruppen

   Eine Gruppe ist einfach eine Zusammenfassung von Accounts. Gruppen werden
   durch den Gruppennamen und die GID identifiziert. Der Kernel von FreeBSD
   entscheidet anhand der UID und der Gruppenmitgliedschaft eines Prozesses,
   ob er dem Prozess etwas erlaubt oder nicht. Wenn jemand von der GID eines
   Benutzers oder Prozesses spricht, meint er damit meistens die erste Gruppe
   der Gruppenliste.

   Die Zuordnung von Gruppennamen zur GID steht in /etc/group, einer
   Textdatei mit vier durch Doppelpunkte getrennten Feldern. Im ersten Feld
   steht der Gruppenname, das zweite entha:lt ein verschlu:sseltes Passwort,
   das dritte gibt die GID an und das vierte besteht aus einer Komma
   separierten Liste der Mitglieder der Gruppe. Eine ausfu:hrliche
   Beschreibung der Syntax dieser Datei finden Sie in group(5).

   Wenn Sie /etc/group nicht von Hand editieren mo:chten, ko:nnen Sie pw(8)
   zum Editieren benutzen. Das folgende Beispiel zeigt das Hinzufu:gen einer
   Gruppe mit dem Namen teamtwo:

   Beispiel 3.8. Setzen der Mitgliederliste einer Gruppe mit pw(8)

 # pw groupadd teamtwo
 # pw groupshow teamtwo
 teamtwo:*:1100:

   1100 ist die GID der Gruppe teamtwo. Momentan hat teamtwo noch keine
   Mitglieder. Mit dem folgenden Kommando wird der Benutzer jru in die Gruppe
   teamtwo aufgenommen.

   Beispiel 3.9. Ein Gruppenmitglied mit pw(8) hinzufu:gen

 # pw groupmod teamtwo -M jru
 # pw groupshow teamtwo
 teamtwo:*:1100:jru

   Als Argument von -M geben Sie eine Komma separierte Liste von Mitgliedern
   an, die in die Gruppe aufgenommen werden sollen. Aus den vorherigen
   Abschnitten ist bekannt, dass die Passwort-Datei ebenfalls eine Gruppe
   fu:r jeden Benutzer entha:lt. Das System teilt dem Benutzer automatisch
   eine Gruppe zu, die aber vom groupshow Kommando von pw(8) nicht angezeigt
   wird. Diese Information wird allerdings von id(1) und a:hnlichen
   Werkzeugen angezeigt. Das heisst, dass pw(8) nur /etc/group manipuliert,
   es wird nicht versuchen, zusa:tzliche Informationen aus /etc/passwd zu
   lesen.

   Beispiel 3.10. Hinzufu:gen eines neuen Gruppenmitglieds mittels pw(8)

 # pw groupmod teamtwo -m db
 # pw groupshow teamtwo
 teamtwo:*:1100:jru,db

   Die Argumente zur Option -m ist eine durch Komma getrennte Liste von
   Benutzern, die der Gruppe hinzugefu:gt werden sollen. Anders als im
   vorherigen Beispiel werden diese Benutzer in die Gruppe aufgenommen und
   ersetzen nicht die bestehenden Benutzer in der Gruppe.

   Beispiel 3.11. Mit id die Gruppenzugeho:rigkeit bestimmen

 % id jru
 uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)

   In diesem Beispiel ist jru Mitglied von jru und teamtwo.

   Weitere Informationen zu diesem Befehl und dem Format von /etc/group
   finden Sie in pw(8) und group(5).

3.4. Zugriffsrechte

   In FreeBSD besitzt jede Datei und jedes Verzeichnis einen Satz von
   Zugriffsrechten. Es stehen mehrere Programme zum Anzeigen und Bearbeiten
   dieser Rechte zur Verfu:gung. Ein Versta:ndnis fu:r die Funktionsweise von
   Zugriffsrechten ist notwendig, um sicherzustellen, dass Benutzer nur auf
   die von ihnen beno:tigten Dateien zugreifen ko:nnen und nicht auf die
   Dateien des Betriebssystems oder von anderen Benutzern.

   In diesem Abschnitt werden die traditionellen Zugriffsrechte von UNIX(R)
   beschrieben. Informationen zu feingranularen Zugriffsrechten fu:r
   Dateisysteme finden Sie im Abschnitt 13.9, "Zugriffskontrolllisten fu:r
   Dateisysteme (ACL)".

   In UNIX(R) werden die grundlegenden Zugriffsrechte in drei Typen
   unterteilt: Lesen, Schreiben und Ausfu:hren. Diese Zugriffstypen werden
   verwendet, um den Dateizugriff fu:r den Besitzer der Datei, die Gruppe und
   alle anderen zu bestimmen. Die Lese-, Schreib- und
   Ausfu:hrungsberechtigungen werden mit den Buchstaben r, w und x
   dargestellt. Alternativ ko:nnen die Berechtigungen als bina:re Zahlen
   dargestellt werden, da jede Berechtigung entweder aktiviert oder
   deaktiviert (0) ist. Wenn die Berechtigung als Zahl dargestellt wird, ist
   die Reihenfolge immer als rwx zu lesen, wobei r den Wert 4 hat, w den Wert
   2 und x den Wert 1.

   In Tabelle 4.1 sind die einzelnen nummerischen und alphabetischen
   Mo:glichkeiten zusammengefasst. Das Zeichen - in der Spalte "Auflistung im
   Verzeichnis" besagt, dass eine Berechtigung deaktiviert ist.

   Tabelle 3.2. UNIX(R) Zugriffsrechte

   Wert               Zugriffsrechte                Auflistung im Verzeichnis 
   0    Kein Lesen, Kein Schreiben, Kein Ausfu:hren ---                       
   1    Kein Lesen, Kein Schreiben, Ausfu:hren      --x                       
   2    Kein Lesen, Schreiben, Kein Ausfu:hren      -w-                       
   3    Kein Lesen, Schreiben, Ausfu:hren           -wx                       
   4    Lesen, Kein Schreiben, Kein Ausfu:hren      r--                       
   5    Lesen, Kein Schreiben, Ausfu:hren           r-x                       
   6    Lesen, Schreiben, Kein Ausfu:hren           rw-                       
   7    Lesen, Schreiben, Ausfu:hren                rwx                       

   Benutzen Sie das Argument -l mit ls(1), um eine ausfu:hrliche
   Verzeichnisauflistung zu sehen, die in einer Spalte die Zugriffsrechte
   fu:r den Besitzer, die Gruppe und alle anderen entha:lt. Die Ausgabe von
   ls -l ko:nnte wie folgt aussehen:

 % ls -l
 total 530
 -rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
 -rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
 -rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt

   Das erste Zeichen (ganz links) der ersten Spalte zeigt an, ob es sich um
   eine normale Datei, ein Verzeichnis, ein zeichenorientiertes Gera:t, ein
   Socket oder irgendeine andere Pseudo-Datei handelt. In diesem Beispiel
   zeigt - eine normale Datei an. Die na:chsten drei Zeichen, dargestellt als
   rw-, ergeben die Rechte fu:r den Datei-Besitzer. Die drei Zeichen danach
   r-- die Rechte der Gruppe, zu der die Datei geho:rt. Die letzten drei
   Zeichen, r--, geben die Rechte fu:r den Rest der Welt an. Ein Minus
   bedeutet, dass das Recht nicht gegeben ist. In diesem Beispiel sind die
   Zugriffsrechte also: der Eigentu:mer kann die Datei lesen und schreiben,
   die Gruppe kann lesen und alle anderen ko:nnen auch nur lesen.
   Entsprechend obiger Tabelle wa:ren die Zugriffsrechte fu:r diese Datei
   644, worin jede Ziffer die drei Teile der Zugriffsrechte dieser Datei
   verko:rpert.

   Wie kontrolliert das System die Rechte von Hardware-Gera:ten? FreeBSD
   behandelt die meisten Hardware-Gera:te als Dateien, welche Programme
   o:ffnen, lesen und mit Daten beschreiben ko:nnen. Diese speziellen
   Gera:tedateien sind in /dev gespeichert.

   Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-,
   Schreib- und Ausfu:hr-Rechte. Das Ausfu:hrungs-Bit hat eine etwas andere
   Bedeutung fu:r ein Verzeichnis als fu:r eine Datei. Die Ausfu:hrbarkeit
   eines Verzeichnisses bedeutet, dass in das Verzeichnis, zum Beispiel mit
   cd(1), gewechselt werden kann. Das bedeutet auch, dass in dem Verzeichnis
   auf Dateien, deren Namen bekannt sind, zugegriffen werden kann,
   vorausgesetzt die Zugriffsrechte der Dateien lassen dies zu.

   Das Leserecht auf einem Verzeichnis erlaubt es, sich den Inhalt des
   Verzeichnisses anzeigen zu lassen. Um eine Datei mit bekanntem Namen in
   einem Verzeichnis zu lo:schen, mu:ssen auf dem Verzeichnis Schreib- und
   Ausfu:hr-Rechte gesetzt sein.

   Es gibt noch mehr Rechte, aber die werden vor allem in speziellen
   Umsta:nden benutzt, wie zum Beispiel bei SetUID-Binaries und
   Verzeichnissen mit gesetztem Sticky-Bit. Mehr u:ber Zugriffsrechte von
   Dateien und wie sie gesetzt werden, finden Sie in chmod(1).

  3.4.1. Symbolische Zugriffsrechte

   Beigesteuert von Tom Rhodes.

   Symbolische Zugriffsrechte verwenden Zeichen anstelle von oktalen Werten,
   um die Berechtigungen fu:r Dateien oder Verzeichnisse festzulegen.
   Zugriffsrechte verwenden die Syntax Wer, Aktion und Berechtigung. Die
   folgenden Werte stehen zur Auswahl:

          Option            Symbol                   Bedeutung                
   Wer                  u              Benutzer (user)                        
   Wer                  g              Gruppe (group)                         
   Wer                  o              Andere (other)                         
   Wer                  a              Alle                                   
   Aktion               +              Berechtigungen hinzufu:gen             
   Aktion               -              Berechtigungen entziehen               
   Aktion               =              Berechtigungen explizit setzen         
   Berechtigung         r              lesen (read)                           
   Berechtigung         w              schreiben (write)                      
   Berechtigung         x              ausfu:hren (execute)                   
   Berechtigung         t              Sticky-Bit                             
   Berechtigung         s              Set-UID oder Set-GID                   

   Diese symbolischen Werte werden zusammen mit chmod(1) verwendet.
   Beispielsweise wu:rde der folgende Befehl den Zugriff auf FILE fu:r alle
   anderen Benutzer verbieten:

 % chmod go= FILE

   Wenn Sie mehr als eine A:nderung der Rechte einer Datei vornehmen wollen,
   ko:nnen Sie eine durch Kommata getrennte Liste der Rechte angeben. Das
   folgende Beispiel entzieht der Gruppe und der Welt die Schreibberechtigung
   auf FILE und fu:gt fu:r jeden Ausfu:hrungsrechte hinzu:

 % chmod go-w,a+x FILE

  3.4.2. FreeBSD Datei-Flags

   Beigetragen von Tom Rhodes.

   Zusa:tzlich zu den Zugriffsrechten unterstu:tzt FreeBSD auch die Nutzung
   von "Datei-Flags". Diese erho:hen die Sicherheit des Systems, indem sie
   eine verbesserte Kontrolle von Dateien erlauben. Verzeichnisse werden
   allerdings nicht unterstu:tzt. Mit dem Einsatz von Datei-Flags kann sogar
   root daran gehindert werden, Dateien zu lo:schen oder zu vera:ndern.

   Datei-Flags werden mit chflags(1) vera:ndert. Um beispielsweise auf der
   Datei file1 das "unlo:schbar"-Flag zu aktivieren, geben Sie folgenden
   Befehl ein:

 # chflags sunlink file1

   Um dieses Flag zu deaktivieren, setzen Sie ein "no" vor sunlink:

 # chflags nosunlink file1

   Um die Flags einer Datei anzuzeigen, verwenden Sie ls(1) zusammen mit -lo:

 # ls -lo file1

 -rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

   Einige Datei-Flags ko:nnen nur vom root-Benutzer gesetzt oder gelo:scht
   werden. Andere wiederum ko:nnen auch vom Eigentu:mer der Datei gesetzt
   werden. Weitere Informationen hierzu finden sich in chflags(1) und
   chflags(2).

  3.4.3. Die Berechtigungen setuid, setgid, und sticky

   Beigetragen von Tom Rhodes.

   Anders als die Berechtigungen, die bereits angesprochen wurden, existieren
   drei weitere Einstellungen, u:ber die alle Administratoren Bescheid wissen
   sollten. Dies sind die Berechtigungen setuid, setgid und sticky.

   Diese Einstellungen sind wichtig fu:r manche UNIX(R)-Operationen, da sie
   Funktionalita:ten zur Verfu:gung stellen, die normalerweise nicht an
   gewo:hnliche Anwender vergeben wird. Um diese zu verstehen, muss der
   Unterschied zwischen der realen und der effektiven Benutzer-ID erwa:hnt
   werden.

   Die reale Benutzer-ID ist die UID, welche den Prozess besitzt oder
   gestartet hat. Die effektive UID ist diejenige, als die der Prozess
   la:uft. Beispielsweise wird passwd(1) mit der realen ID des Benutzers
   ausgefu:hrt, der sein Passwort a:ndert. Um jedoch die Passwortdatenbank zu
   bearbeiten, wird es effektiv als root-Benutzer ausgefu:hrt. Das
   ermo:glicht es normalen Benutzern, ihr Passwort zu a:ndern, ohne einen
   Permission Denied-Fehler angezeigt zu bekommen.

   Die setuid-Berechtigung kann durch das Voranstellen bei einer
   Berechtigungsgruppe mit der Nummer Vier (4) gesetzt werden, wie im
   folgenden Beispiel gezeigt wird:

 # chmod 4755 suidexample.sh

   Die Berechtigungen auf suidexample.sh sehen jetzt wie folgt aus:

 -rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh

   Beachten Sie, dass ein s jetzt Teil der Berechtigungen des Dateibesitzers
   geworden ist, welches das Ausfu:hren-Bit ersetzt. Dies ermo:glicht es
   Werkzeugen mit erho:hten Berechtigungen zu laufen, wie beispielsweise
   passwd.

  Anmerkung:

   Die nosuid mount(8)-Option bewirkt, dass solche Anwendungen
   stillschweigend scheitern, ohne den Anwender daru:ber zu informieren.
   Diese Option ist nicht vo:llig zuverla:ssig, da ein nosuid-Wrapper in der
   Lage wa:re, dies zu umgehen.

   Um dies in Echtzeit zu beobachten, o:ffnen Sie zwei Terminals. Starten Sie
   auf einem passwd als normaler Benutzer. Wa:hrend es auf die
   Passworteingabe wartet, u:berpru:fen Sie die Prozesstabelle und sehen Sie
   sich die Informationen fu:r passwd(1) an:

   Im Terminal A:

 Changing local password for trhodes
 Old Password:

   Im Terminal B:

 # ps aux | grep passwd

 trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
 root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd

   Obwohl passwd(1) als normaler Benutzer ausgefu:hrt wird, benutzt es die
   effektive UID von root.

   Die setgid-Berechtigung fu:hrt die gleiche Aktion wie die
   setuid-Berechtigung durch, allerdings vera:ndert sie die
   Gruppenberechtigungen. Wenn eine Anwendung oder ein Werkzeug mit dieser
   Berechtigung ausgefu:hrt wird, erha:lt es die Berechtigungen basierend auf
   der Gruppe, welche die Datei besitzt und nicht die des Benutzers, der den
   Prozess gestartet hat.

   Um die setgid-Berechtigung auf einer Datei zu setzen, geben Sie chmod(1)
   eine fu:hrende Zwei (2) mit:

 # chmod 2755 sgidexample.sh

   Beachten Sie in der folgenden Auflistung, dass das s sich jetzt in dem
   Feld befindet, das fu:r die Berechtigungen der Gruppe bestimmt ist:

 -rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh

  Anmerkung:

   Obwohl es sich bei dem in diesen Beispielen gezeigten Shellskript um eine
   ausfu:hrbare Datei handelt, wird es nicht mit einer anderen EUID oder
   effektiven Benutzer-ID ausgefu:hrt. Das ist so, weil Shellskripte keinen
   Zugriff auf setuid(2)-Systemaufrufe erhalten.

   Die setuid und setgid Berechtigungs-Bits ko:nnen die Systemsicherheit
   verringern, da sie erho:hte Rechte ermo:glichen. Das dritte
   Berechtigungs-Bit, das sticky bit kann die Sicherheit eines Systems
   erho:hen.

   Wenn das sticky bit auf einem Verzeichnis angewendet wird, erlaubt es das
   Lo:schen von Dateien nur durch den Besitzer der Datei. Dies ist nu:tzlich,
   um die Lo:schung von Dateien in o:ffentlichen Verzeichnissen wie /tmp,
   durch Benutzer denen diese Dateien nicht geho:ren, zu verhindern. Um diese
   Berechtigung anzuwenden, stellen Sie der Berechtigung eine Eins (1) voran:

 # chmod 1777 /tmp

   Das sticky bit kann anhand des t ganz am Ende der Berechtigungen abgelesen
   werden.

 # ls -al / | grep tmp

 drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp

3.5. Verzeichnis-Strukturen

   Die FreeBSD-Verzeichnishierarchie ist die Grundlage, um ein umfassendes
   Versta:ndnis des Systems zu erlangen. Das wichtigste Verzeichnis ist das
   Root-Verzeichnis "/". Dieses Verzeichnis ist das erste, das wa:hrend des
   Bootens eingehangen wird. Es entha:lt das notwendige Basissystem, um das
   Betriebssystem in den Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis
   entha:lt auch die Mountpunkte fu:r Dateisysteme, die beim Wechsel in den
   Multiuser-Modus eingeha:ngt werden.

   Ein Mountpunkt ist ein Verzeichnis, in das zusa:tzliche Dateisysteme (in
   der Regel unterhalb des Wurzelverzeichnisses) eingeha:ngt werden ko:nnen.
   Dieser Vorgang wird in Abschnitt 3.6, "Festplatten, Slices und
   Partitionen" ausfu:hrlich beschrieben. Standard-Mountpunkte sind /usr,
   /var, /tmp, /mnt sowie /cdrom. Auf diese Verzeichnisse verweisen
   u:blicherweise Eintra:ge in /etc/fstab. Diese Datei ist eine Tabelle mit
   verschiedenen Dateisystemen und Mountpunkten, vom System gelesen werden.
   Die meisten der Dateisysteme in /etc/fstab werden beim Booten automatisch
   durch das Skript rc(8) gemountet, wenn die zugeho:rigen Eintra:ge nicht
   mit noauto versehen sind. Weitere Informationen zu diesem Thema finden Sie
   im Abschnitt 3.7.1, "Die fstab Datei".

   Eine vollsta:ndige Beschreibung der Dateisystem-Hierarchie finden Sie in
   hier(7). Die folgende Aufstellung gibt einen kurzen U:berblick u:ber die
   am ha:ufigsten verwendeten Verzeichnisse:

     Verzeichnis                          Beschreibung                        
   /               Wurzelverzeichnis des Dateisystems.                        
   /bin/           Grundlegende Werkzeuge fu:r den Single-User-Modus sowie    
                   den Mehrbenutzerbetrieb.                                   
   /boot/          Programme und Konfigurationsdateien, die wa:hrend des      
                   Bootens benutzt werden.                                    
   /boot/defaults/ Vorgaben fu:r die Boot-Konfiguration. Weitere Details      
                   finden Sie in loader.conf(5).                              
   /dev/           Gera:tedateien. Weitere Details finden Sie in intro(4).    
   /etc/           Konfigurationsdateien und Skripten des Systems.            
   /etc/defaults/  Vorgaben fu:r die System Konfigurationsdateien. Weitere    
                   Details finden Sie in rc(8).                               
   /etc/mail/      Konfigurationsdateien von MTAs wie sendmail(8).            
   /etc/namedb/    Konfigurationsdateien von named(8).                        
   /etc/periodic/  Ta:glich, wo:chentlich oder monatlich laufende Skripte,    
                   die von cron(8) gestartet werden. Weitere Details finden   
                   Sie in periodic(8).                                        
   /etc/ppp/       Konfigurationsdateien von ppp(8).                          
   /mnt/           Ein leeres Verzeichnis, das von Systemadministratoren      
                   ha:ufig als tempora:rer Mountpunkt genutzt wird.           
   /proc/          Prozess Dateisystem. Weitere Details finden Sie in         
                   procfs(5) und mount_procfs(8).                             
   /rescue/        Statisch gelinkte Programme zur Wiederherstellung des      
                   Systems, wie in rescue(8) beschrieben.                     
   /root/          Home Verzeichnis von root.                                 
   /sbin/          Systemprogramme und administrative Werkzeuge, die          
                   grundlegend fu:r den Single-User-Modus und den             
                   Mehrbenutzerbetrieb sind.                                  
   /tmp/           Tempora:re Dateien, die fu:r gewo:hnlich bei einem         
                   Neustart des Systems verloren gehen. Ha:ufig wird ein      
                   speicherbasiertes Dateisystem unter /tmp eingeha:ngt.      
                   Dieser Vorgang kann automatisiert werden, wenn             
                   tmpmfs-bezogene Variablen von rc.conf(5) verwendet werden, 
                   oder ein entsprechender Eintrag in /etc/fstab existiert.   
                   Weitere Informationen finden Sie in mdmfs(8).              
   /usr/           Der Grossteil der Benutzerprogramme und Anwendungen.       
   /usr/bin/       Gebra:uchliche Werkzeuge, Programmierhilfen und            
                   Anwendungen.                                               
   /usr/include/   Standard C include-Dateien.                                
   /usr/lib/       Bibliotheken.                                              
   /usr/libdata/   Daten verschiedener Werkzeuge.                             
   /usr/libexec/   System-Da:monen und System-Werkzeuge, die von anderen      
                   Programmen ausgefu:hrt werden.                             
   /usr/local/     Lokale Programme und Bibliotheken. Die Ports-Sammlung von  
                   FreeBSD benutzt dieses Verzeichnis als Zielverzeichnis     
                   fu:r Anwendungen. Innerhalb von /usr/local sollte das von  
                   hier(7) beschriebene Layout fu:r /usr benutzt werden. Das  
                   man Verzeichnis wird direkt unter /usr/local anstelle      
                   unter /usr/local/share angelegt. Die Dokumentation der     
                   Ports findet sich in share/doc/port.                       
   /usr/obj/       Von der Architektur abha:ngiger Verzeichnisbaum, der durch 
                   das Bauen von /usr/src entsteht.                           
   /usr/ports/     Die FreeBSD-Ports-Sammlung (optional).                     
   /usr/sbin/      System-Da:monen und System-Werkzeuge, die von Benutzern    
                   ausgefu:hrt werden.                                        
   /usr/share/     Von der Architektur unabha:ngige Dateien.                  
   /usr/src/       Quelldateien von BSD und/oder lokalen Erga:nzungen.        
   /var/           Wird fu:r mehrere Zwecke genutzt und entha:lt Logdateien,  
                   tempora:re Daten und Spooldateien. Manchmal wird ein       
                   speicherbasiertes Dateisystem unter /var eingeha:ngt.      
                   Dieser Vorgang kann automatisiert werden, wenn die         
                   varmfs-bezogenen Variablen von rc.conf(5) verwendet        
                   werden, oder ein entsprechender Eintrag in /etc/fstab      
                   existiert. Weitere Informationen finden Sie in mdmfs(8).   
   /var/log/       Verschiedene Logdateien des Systems.                       
   /var/mail/      Postfa:cher der Benutzer.                                  
   /var/spool/     Verschiedene Spool-Verzeichnisse der Drucker- und          
                   Mailsysteme.                                               
   /var/tmp/       Tempora:re Dateien, die in der Regel auch bei einem        
                   Neustart des Systems erhalten bleiben, es sei denn, bei    
                   /var handelt es sich um ein speicherbasiertes Dateisystem. 
   /var/yp/        NIS maps.                                                  

3.6. Festplatten, Slices und Partitionen

   FreeBSD identifiziert Dateien anhand eines Dateinamens. In Dateinamen wird
   zwischen Gross- und Kleinschreibung unterschieden: readme.txt und
   README.TXT bezeichnen daher zwei verschiedene Dateien. FreeBSD benutzt
   keine Dateiendungen, um den Typ der Datei zu bestimmen, egal ob es sich um
   ein Programm, ein Dokument oder um andere Daten handelt.

   Dateien werden in Verzeichnissen gespeichert. In einem Verzeichnis ko:nnen
   sich keine oder hunderte Dateien befinden. Ein Verzeichnis kann auch
   andere Verzeichnisse enthalten und so eine Hierarchie von Verzeichnissen
   aufbauen, die die Ablage von Daten erleichtert.

   In Dateinamen werden Verzeichnisse durch einen Schra:gstrich (/, Slash)
   getrennt. Wenn z.B. das Verzeichnis foo ein Verzeichnis bar entha:lt, in
   dem sich die Datei readme.txt befindet, lautet der vollsta:ndige Name der
   Datei (oder der Pfad zur Datei) foo/bar/readme.txt. Beachten Sie, dass
   sich dies von Windows(R) unterscheidet, wo der \ (Backslash fu:r die
   Trennung von Datei- und Verzeichnisnamen verwendet wird. FreeBSD benutzt
   keine Laufwerkbuchstaben oder Laufwerknamen im Pfad. Beispielsweise wu:rde
   man unter FreeBSD nicht c:\foo\bar\readme.txt eingeben.

   Verzeichnisse und Dateien werden in einem Dateisystem gespeichert. Jedes
   Dateisystem besitzt genau ein Wurzelverzeichnis, das so genannte
   Root-Directory. Dieses Wurzelverzeichnis kann weitere Verzeichnisse
   enthalten. Ein Dateisystem wird als Wurzeldateisystem festgelegt, und
   jedes weitere Dateisystem wird unter dem Wurzeldateisystem eingehangen.
   Daher scheint jedes Verzeichnis, unabha:ngig von der Anzahl der Platten,
   auf derselben Platte zu liegen.

   Betrachten wir die drei Dateisysteme A, B und C. Jedes Dateisystem besitzt
   ein eigenes Wurzelverzeichnis, das zwei andere Verzeichnisse entha:lt: A1,
   A2, B1, B2, C1 und C2.

   Das Wurzeldateisystem soll A sein. ls(1) zeigt darin die beiden
   Verzeichnisse A1 und A2 an. Der Verzeichnisbaum sieht wie folgt aus:

   Ein Dateisystem wird in einem Verzeichnis eines anderen Dateisystems
   eingehangen. Wir ha:ngen nun das Dateisystem B in das Verzeichnis A1 ein.
   Das Wurzelverzeichnis von B ersetzt nun das Verzeichnis A1 und die
   Verzeichnisse des Dateisystems B werden sichtbar:

   Jede Datei in den Verzeichnissen B1 oder B2 kann u:ber den Pfad /A1/B1
   oder /A1/B2 erreicht werden. Dateien aus dem Verzeichnis /A1 sind jetzt
   verborgen. Wenn das Dateisystem B wieder abgehangen wird (umount),
   erscheinen die verborgenen Dateien wieder.

   Wenn das Dateisystem B unter dem Verzeichnis A2 eingehangen wu:rde, sa:he
   der Verzeichnisbaum so aus:

   Die Dateien des Dateisystems B wa:ren unter den Pfaden /A2/B1 und /A2/B2
   erreichbar.

   Dateisysteme ko:nnen u:bereinander eingehangen werden. Der folgende Baum
   entsteht, wenn im letzten Beispiel das Dateisystem C in das Verzeichnis B1
   des Dateisystems B eingehangen wird:

   C ko:nnte auch im Verzeichnis A1 eingehangen werden:

   Sie ko:nnen sogar mit nur einem grossen Dateisystem auskommen. Dies hat
   mehrere Nachteile und einen Vorteil.

   Vorteile mehrerer Dateisysteme
     * Die Dateisysteme ko:nnen mit unterschiedlichen Optionen (mount
       options) eingehangen werden. Beispielsweise kann das Wurzeldateisystem
       schreibgeschu:tzt eingehangen werden, sodass es fu:r Benutzer nicht
       mo:glich ist, versehentlich kritische Dateien zu editieren oder zu
       lo:schen. Von Benutzern beschreibbare Dateisysteme wie /home ko:nnen
       mit der Option nosuid eingehangen werden, wenn sie von anderen
       Dateisystemen getrennt sind. Die SUID- und GUID-Bits verlieren auf
       solchen Dateisystemen ihre Wirkung und die Sicherheit des Systems kann
       dadurch erho:ht werden.

     * Die Lage von Dateien im Dateisystem wird, abha:ngig vom Gebrauch des
       Dateisystems, automatisch von FreeBSD optimiert. Ein Dateisystem mit
       vielen kleinen Dateien, die ha:ufig geschrieben werden, wird anders
       behandelt als ein Dateisystem mit wenigen grossen Dateien. Mit nur
       einem Dateisystem ist diese Optimierung unmo:glich.

     * In der Regel u:bersteht ein FreeBSD-Dateisystem auch einen
       Stromausfall. Allerdings kann ein Stromausfall zu einem kritischen
       Zeitpunkt das Dateisystem bescha:digen. Wenn die Daten u:ber mehrere
       Dateisysteme verteilt sind, la:sst sich das System mit hoher
       Wahrscheinlichkeit noch starten. Dies erleichtert das Zuru:ckspielen
       von Datensicherungen.

   Vorteil eines einzelnen Dateisystems
     * Dateisysteme haben eine festgelegte Gro:sse. Es kann passieren, dass
       Sie eine Partition vergro:ssern mu:ssen. Dies ist nicht leicht: Sie
       mu:ssen die Daten sichern, das Dateisystem vergro:ssert anlegen und
       die gesicherten Daten zuru:ckspielen.

  Wichtig:

       FreeBSD kennt den Befehl growfs(8), mit dem man Dateisysteme im
       laufenden Betrieb vergro:ssern kann.

   Dateisysteme befinden sich in Partitionen (damit sind nicht die normalen
   MS-DOS(R)-Partitionen gemeint). Jede Partition wird mit einem Buchstaben
   von a bis h bezeichnet und kann nur ein Dateisystem enthalten.
   Dateisysteme ko:nnen daher u:ber ihren Mount-Point, den Punkt an dem sie
   eingehangen sind, oder den Buchstaben der Partition, in der sie liegen,
   identifiziert werden.

   FreeBSD benutzt einen Teil der Platte fu:r den Swap-Bereich, um virtuellen
   Speicher zur Verfu:gung zu stellen. Dadurch kann der Rechner Anwendungen
   mehr Speicher zur Verfu:gung stellen als tatsa:chlich eingebaut ist. Wenn
   der Speicher knapp wird, kann FreeBSD nicht benutzte Daten in den
   Swap-Bereich auslagern. Die ausgelagerten Daten ko:nnen spa:ter wieder in
   den Speicher geholt werden (dafu:r werden dann andere Daten ausgelagert).

   Fu:r einige Partitionen gelten besondere Konventionen:

   Partition                            Konvention                            
   a         Entha:lt normalerweise das Wurzeldateisystem.                    
   b         Entha:lt normalerweise den Swap-Bereich.                         
   c         Ist normalerweise genauso gross wie die Slice in der die         
             Partition liegt. Werkzeuge, die auf der kompletten Slice         
             arbeiten, wie ein Bad-Block-Scanner, ko:nnen so die c-Partition  
             benutzen. Fu:r gewo:hnlich wird in dieser Partition kein         
             Dateisystem angelegt.                                            
   d         Fru:her hatte die d-Partition eine besondere Bedeutung. Heute    
             ist dies nicht mehr der Fall und die Partition d kann wie jede   
             andere Partition auch verwendet werden.                          

   In FreeBSD werden Festplatten in Slices, welche in Windows(R) als
   Partitionen bekannt sind, aufgeteilt und von 1 bis 4 durchnummeriert.
   Diese werden dann in Partitionen unterteilt, welche wiederum Dateisysteme
   enthalten und mit Buchstaben benannt werden.

   Die Slice-Nummern werden mit vorgestelltem s hinter den Gera:tenamen
   gestellt: "da0s1" ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf
   einer Festplatte gibt es ho:chstens vier Slices. In einer Slice des
   passenden Typs kann es weitere logische Slices geben. Diese erweiterten
   Slices werden ab fu:nf durchnummeriert: "ada0s5" ist die erste erweiterte
   Slice auf einer SATA-Platte. Diese Gera:te werden von Dateisystemen
   benutzt, die sich in einer kompletten Slice befinden mu:ssen.

   Slices, "dangerously dedicated"-Festplatten und andere Platten enthalten
   Partitionen, die mit Buchstaben von a bis h bezeichnet werden. Der
   Buchstabe wird an den Gera:tenamen gehangen: "da0a" ist die a-Partition
   des ersten da-Laufwerks. Dieses Laufwerk ist "dangerously dedicated".
   "ada1s3e" ist die fu:nfte Partition in der dritten Slice der zweiten
   SATA-Platte.

   Schliesslich wird noch jede Festplatte des Systems eindeutig bezeichnet.
   Der Name einer Festplatte beginnt mit einem Code, der den Typ der Platte
   bezeichnet. Es folgt eine Nummer, die angibt, um welche Festplatte es sich
   handelt. Anders als bei Slices werden Festplatten von Null beginnend
   durchnummeriert. Ga:ngige Festplatten-Namen sind in Tabelle 3.3,
   "Laufwerk-Codes" aufgefu:hrt.

   Wenn Sie eine Partition angeben, beinhaltet das den Plattennamen, s, die
   Slice-Nummer und den Buchstaben der Partition. Einige Beispiele finden Sie
   in Beispiel 3.12, "Namen von Platten, Slices und Partitionen".

   Der Aufbau einer Festplatte wird in Beispiel 3.13, "Aufteilung einer
   Festplatte" dargestellt.

   Bei der Installation von FreeBSD legen Sie Slices auf der Festplatte an,
   erstellen Partitionen fu:r FreeBSD innerhalb der Slice, erstellen ein
   Dateisystem oder Auslagerungsbereiche und entscheiden, welche Dateisysteme
   wo eingehangen werden.

   Tabelle 3.3. Laufwerk-Codes

            Laufwerkstyp                          Gera:tename                 
   SATA- und IDE-Festplatten      ada oder ad                                 
   SCSI-Festplatten und           da                                          
   USB-Speichermedien             
   SATA- und IDE-CD-ROM-Laufwerke cd oder acd                                 
   SCSI-CD-ROM-Laufwerke          cd                                          
   Diskettenlaufwerke             fd                                          
   Verschiedene proprieta:re      mcd fu:r Mitsumi CD-ROM und scd fu:r Sony   
   CD-ROM-Laufwerke               CD-ROM                                      
   SCSI-Bandlaufwerke             sa                                          
   IDE-Bandlaufwerke              ast                                         
                                  Beispiele sind aacd fu:r Adaptec(R)         
   RAID-Laufwerke                 AdvancedRAID, mlxd fu:r Mylex(R), amrd fu:r 
                                  AMI MegaRAID(R), idad fu:r Compaq Smart     
                                  RAID, twed fu:r 3ware(R) RAID.              

   Beispiel 3.12. Namen von Platten, Slices und Partitionen

    Name                               Bedeutung                              
   ada0s1a Die erste Partition (a) in der ersten Slice (s1) der ersten        
           SATA-Festplatte (ada0).                                            
   da1s2e  Die fu:nfte Partition (e) der zweiten Slice (s2) auf der zweiten   
           SCSI-Festplatte (da1).                                             

   Beispiel 3.13. Aufteilung einer Festplatte

   Das folgende Diagramm zeigt die Sicht von FreeBSD auf die erste
   SATA-Festplatte des Systems. Die Platte soll 250 GB gross sein und eine
   80 GB grosse Slice (MS-DOS(R)-Partitionen) sowie eine 170 GB grosse Slice
   enthalten. Die erste Slice entha:lt ein Windows(R) NTFS-Dateisystem (C:),
   die zweite Slice entha:lt eine FreeBSD-Installation. Die
   FreeBSD-Installation in diesem Beispiel verwendet vier Datenpartitionen
   und einen Auslagerungsbereich.

   Jede der vier Partitionen entha:lt ein Dateisystem. Das Wurzeldateisystem
   ist die a-Partition. In der d-Partition befindet sich /var und in der
   f-Partition befindet sich /usr. Die c-Partition bezieht sich auf die
   gesamte Slice und wird nicht fu:r gewo:hnliche Partitionen verwendet.

3.7. Anha:ngen und Abha:ngen von Dateisystemen

   Ein Dateisystem wird am besten als ein Baum mit der Wurzel /
   veranschaulicht. /dev, /usr, und die anderen Verzeichnisse im
   Rootverzeichnis sind Zweige, die wiederum eigene Zweige wie /usr/local
   haben ko:nnen.

   Es gibt verschiedene Gru:nde, bestimmte dieser Verzeichnisse auf eigenen
   Dateisystemen anzulegen. /var entha:lt log/, spool/ sowie verschiedene
   andere tempora:re Dateien und kann sich daher schnell fu:llen. Es
   empfiehlt sich, /var von / zu trennen, da es schlecht ist, wenn das
   Root-Dateisystem voll la:uft.

   Ein weiterer Grund bestimmte Verzeichnisba:ume auf andere Dateisysteme zu
   legen, ist gegeben, wenn sich die Verzeichnisba:ume auf gesonderten
   physikalischen oder virtuellen Platten, wie Network File System oder
   CD-ROM-Laufwerken, befinden.

  3.7.1. Die fstab Datei

   Wa:hrend des Boot-Prozesses (Kapitel 12, FreeBSDs Bootvorgang) werden in
   /etc/fstab aufgefu:hrte Verzeichnisse, sofern sie nicht mit der Option
   noauto versehen sind, automatisch angehangen. Diese Datei entha:lt
   Eintra:ge in folgendem Format:

 device  /mount-point    fstype  options dumpfreq        passno

   device

           Ein existierender Gera:tename wie in Tabelle 3.3, "Laufwerk-Codes"
           beschrieben.

   mount-point

           Ein existierendes Verzeichnis, auf dem das Dateisystem gemountet
           wird.

   fstype

           Der Typ des Dateisystems, der an mount(8) weitergegeben wird.
           FreeBSDs Standarddateisystem ist ufs.

   options

           Entweder rw fu:r beschreibbare Dateisysteme oder ro fu:r
           schreibgeschu:tzte Dateisysteme, gefolgt von weiteren beno:tigten
           Optionen. Eine ha:ufig verwendete Option ist noauto fu:r
           Dateisysteme, die wa:hrend der normalen Bootsequenz nicht
           angehangen werden sollen. Weitere Optionen finden sich in
           mount(8).

   dumpfreq

           Wird von dump(8) benutzt, um bestimmen zu ko:nnen, welche
           Dateisysteme gesichert werden mu:ssen. Fehlt der Wert, wird 0
           angenommen.

   passno

           Bestimmt die Reihenfolge, in der die Dateisysteme u:berpru:ft
           werden sollen. Fu:r Dateisysteme, die u:bersprungen werden sollen,
           ist passno auf 0 zu setzen. Fu:r das Root-Dateisystem, das vor
           allen anderen u:berpru:ft werden muss, sollte der Wert von passno
           1 betragen. Allen anderen Dateisystemen sollten Werte gro:sser 1
           zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert
           besitzen, wird fsck(8) versuchen, diese parallel zu u:berpru:fen.

   Lesen Sie fstab(5) fu:r weitere Informationen u:ber das Format von
   /etc/fstab und dessen Optionen.

  3.7.2. Verwendung von mount(8)

   Dateisysteme werden mit mount(8) eingeha:ngt. In der grundlegenden Form
   wird es wie folgt benutzt:

 # mount device mountpoint

   Dieser Befehl bietet viele Optionen, die in mount(8) beschrieben werden.
   Die am ha:ufigsten verwendeten Optionen sind:

   Optionen von mount

   -a

           Ha:ngt alle Dateisysteme aus /etc/fstab an. Davon ausgenommen sind
           Dateisysteme, die mit "noauto" markiert sind, die mit der Option
           -t ausgeschlossen wurden und Dateisysteme, die schon angehangen
           sind.

   -d

           Fu:hrt alles bis auf den mount-Systemaufruf aus. Nu:tzlich ist
           diese Option in Verbindung mit -v. Damit wird angezeigt, was
           mount(8) tatsa:chlich versuchen wu:rde, um das Dateisystem
           anzuha:ngen.

   -f

           Erzwingt das Anha:ngen eines unsauberen Dateisystems (riskant)
           oder die Ru:cknahme des Schreibzugriffs, wenn der Status des
           Dateisystems von beschreibbar auf schreibgeschu:tzt gea:ndert
           wird.

   -r

           Ha:ngt das Dateisystem schreibgeschu:tzt ein. Dies kann auch durch
           Angabe von -o ro erreicht werden.

   -t fstype

           Ha:ngt das Dateisystem mit dem angegebenen Typ an, oder ha:ngt nur
           Dateisysteme mit dem angegebenen Typ an, wenn -a angegeben wurde.
           "ufs" ist das Standarddateisystem.

   -u

           Aktualisiert die Mountoptionen des Dateisystems.

   -v

           Geschwa:tzig sein.

   -w

           Ha:ngt das Dateisystem beschreibbar an.

   Die folgenden Optionen ko:nnen durch eine Kommata separierte Liste an -o
   u:bergeben werden:

   nosuid

           SetUID und SetGID Bits werden auf dem Dateisystem nicht beachtet.
           Dies ist eine nu:tzliche Sicherheitsfunktion.

  3.7.3. Verwendung von umount(8)

   umount(8) ha:ngt ein Dateisystem ab. Dieser Befehl akzeptiert als
   Parameter entweder einen Mountpoint, einen Gera:tenamen, -a oder -A.

   Jede Form akzeptiert -f, um das Abha:ngen zu erzwingen, und -v, um etwas
   geschwa:tziger zu sein. Seien Sie bitte vorsichtig mit -f, da der Computer
   abstu:rzen kann oder es ko:nnen Daten auf dem Dateisystem bescha:digt
   werden.

   Um alle Dateisysteme abzuha:ngen, oder nur diejenigen, die mit -t gelistet
   werden, wird -a oder -A benutzt. Beachten Sie, dass -a das
   Root-Dateisystem nicht ausha:ngt.

3.8. Prozesse und Da:monen

   FreeBSD ist ein Multitasking-Betriebssystem. Jedes Programm, das zu
   irgendeiner Zeit la:uft wird als Prozess bezeichnet. Jedes laufende
   Kommando startet mindestens einen neuen Prozess. Dazu gibt es eine Reihe
   von Systemprozessen, die von FreeBSD ausgefu:hrt werden.

   Jeder Prozess wird durch eine eindeutige Nummer identifiziert, die
   Prozess-ID (PID) genannt wird. Prozesse haben ebenso wie Dateien einen
   Besitzer und eine Gruppe, die festlegen, welche Dateien und Gera:te der
   Prozess benutzen kann. Die meisten Prozesse haben auch einen
   Elternprozess, der sie gestartet hat. Beispielsweise ist die Shell ein
   Prozess. Jedes in Shell gestartete Kommando ist dann ein neuer Prozess,
   der die Shell als Elternprozess besitzt. Die Ausnahme hiervon ist ein
   spezieller Prozess namens init(8), der beim booten immer als erstes
   gestartet wird und der immer die PID 1 hat.

   Manche Programme erwarten keine Eingaben vom Benutzer und lo:sen sich bei
   erster Gelegenheit von ihrem Terminal. Ein Webserver zum Beispiel
   antwortet auf Web-Anfragen und nicht auf Benutzereingaben. Mail-Server
   sind ein weiteres Beispiel fu:r diesen Typ von Anwendungen. Diese
   Programme sind als Da:monen bekannt. Der Begriff Da:mon stammt aus der
   griechischen Mythologie und bezeichnet ein Wesen, das weder gut noch bo:se
   ist und welches unsichtbar nu:tzliche Aufgaben verrichtet. Deshalb ist das
   BSD Maskottchen dieser fro:hlich aussehende Da:mon mit Turnschuhen und
   Dreizack.

   Programme, die als Da:mon laufen, werden entsprechend einer Konvention mit
   einem "d" am Ende benannt. BIND steht beispielsweise fu:r Berkeley
   Internet Name Domain, das tatsa:chlich laufende Programm heisst aber
   named. Der Apache Webserver wird httpd genannt und der Druckerspool-Da:mon
   heisst lpd(8). Dies ist allerdings nur eine Konvention. Der Da:mon der
   Anwendung Sendmail heisst beispielsweise sendmail und nicht maild.

  3.8.1. Prozesse beobachten

   Um die Prozesse auf dem System zu sehen, benutzen Sie ps(1) und top(1).
   Eine statische Liste der laufenden Prozesse, deren PIDs, Speicherverbrauch
   und die Kommandozeile, mit der sie gestartet wurden, erhalten Sie mit
   ps(1). Um alle laufenden Prozesse in einer Anzeige zu sehen, die alle paar
   Sekunden aktualisiert wird, so dass Sie interaktiv sehen ko:nnen was der
   Computer macht, benutzen Sie top(1).

   In der Voreinstellung zeigt ps(1) nur die laufenden Prozesse, die dem
   Benutzer geho:ren. Zum Beispiel:

 % ps
  PID TT  STAT    TIME COMMAND
 8203  0  Ss   0:00.59 /bin/csh
 8895  0  R+   0:00.00 ps

   Die Ausgabe von ps(1) ist in einer Anzahl von Spalten organisiert. Die PID
   Spalte zeigt die Prozess-ID. PIDs werden von 1 beginnend bis 99999
   zugewiesen und fangen wieder von vorne an. Ist eine PID bereits vergeben,
   wird diese allerdings nicht erneut vergeben. Die Spalte TT zeigt den
   Terminal, auf dem das Programm la:uft. STAT zeigt den Status des Programms
   und TIME gibt die Zeit an, die das Programm auf der CPU gelaufen ist. Dies
   ist nicht unbedingt die Zeit, die seit dem Start des Programms vergangen
   ist, da die meisten Programme hauptsa:chlich auf bestimmte Dinge warten,
   bevor sie wirklich CPU-Zeit verbrauchen. Unter der Spalte COMMAND findet
   sich schliesslich die Kommandozeile, mit der das Programm gestartet wurde.

   ps(1) besitzt viele Optionen, um die angezeigten Informationen zu
   beeinflussen. Eine nu:tzliche Kombination ist auxww. a zeigt Information
   u:ber alle laufenden Prozesse aller Benutzer. Der Name des Besitzers des
   Prozesses, sowie Informationen u:ber den Speicherverbrauch werden mit u
   angezeigt. x zeigt auch Da:monen-Prozesse an, und ww veranlasst ps(1) die
   komplette Kommandozeile fu:r jeden Befehl anzuzeigen, anstatt sie
   abzuschneiden, wenn sie zu lang fu:r die Bildschirmausgabe wird.

   Die Ausgabe von top(1) sieht in etwa so aus:

 % top
 last pid:  9609;  load averages:  0.56,  0.45,  0.36              up 0+00:20:03  10:21:46
 107 processes: 2 running, 104 sleeping, 1 zombie
 CPU:  6.2% user,  0.1% nice,  8.2% system,  0.4% interrupt, 85.1% idle
 Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free
 ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other
 Swap: 2048M Total, 2048M Free

   PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
   557 root          1 -21  r31   136M 42296K select  0   2:20  9.96% Xorg
  8198 dru           2  52    0   449M 82736K select  3   0:08  5.96% kdeinit4
  8311 dru          27  30    0  1150M   187M uwait   1   1:37  0.98% firefox
   431 root          1  20    0 14268K  1728K select  0   0:06  0.98% moused
  9551 dru           1  21    0 16600K  2660K CPU3    3   0:01  0.98% top
  2357 dru           4  37    0   718M   141M select  0   0:21  0.00% kdeinit4
  8705 dru           4  35    0   480M    98M select  2   0:20  0.00% kdeinit4
  8076 dru           6  20    0   552M   113M uwait   0   0:12  0.00% soffice.bin
  2623 root          1  30   10 12088K  1636K select  3   0:09  0.00% powerd
  2338 dru           1  20    0   440M 84532K select  1   0:06  0.00% kwin
  1427 dru           5  22    0   605M 86412K select  1   0:05  0.00% kdeinit4

   Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten fu:nf Kopfzeilen
   finden sich die zuletzt zugeteilte PID, die Systemauslastung (engl. load
   average), die Systemlaufzeit (die Zeit seit dem letzten Reboot) und die
   momentane Zeit. Die weiteren Zahlen im Kopf beschreiben wie viele Prozesse
   momentan laufen, wie viel Speicher und Swap verbraucht wurde und wie viel
   Zeit das System in den verschiedenen CPU-Modi verbringt. Wenn das
   ZFS-Kernelmodul geladen ist, dann zeigt die Zeile ARC, wie viele Daten aus
   dem Cache gelesen wurden.

   Darunter befinden sich einige Spalten mit a:hnlichen Informationen wie in
   der Ausgabe von ps(1), beispielsweise die PID, den Besitzer, die
   verbrauchte CPU-Zeit und das Kommando, das den Prozess gestartet hat.
   top(1) zeigt in zwei Spalten den Speicherverbrauch des Prozesses an. Die
   erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der
   zweiten Spalte wird der aktuelle Verbrauch angegeben.

   Die Anzeige wird von top(1) automatisch alle zwei Sekunden aktualisiert.
   Ein anderer Intervall kann mit -s spezifiziert werden.

  3.8.2. Stoppen von Prozessen

   Eine Mo:glichkeit mit einem laufenden Prozess zu kommunizieren, ist u:ber
   das Versenden von Signalen mittels kill(1). Es gibt eine Reihe von
   verschiedenen Signalen. Manche haben eine feste Bedeutung, wa:hrend andere
   in der Dokumentation der Anwendung beschrieben sind. Ein Benutzer kann ein
   Signal nur an einen Prozess senden, welcher ihm geho:rt. Wird versucht ein
   Signal an einen Prozess eines anderen Benutzers zu senden, resultiert dies
   in einem Zugriffsfehler mangels fehlender Berechtigungen. Die Ausnahme ist
   der root-Benutzer, welcher jedem Prozess Signale senden kann.

   FreeBSD kann auch ein Signal an einen Prozess senden. Wenn eine Anwendung
   schlecht geschrieben ist und auf Speicher zugreift, auf den sie nicht
   zugreifen soll, so sendet FreeBSD dem Prozess das Segmentation Violation
   Signal (SIGSEGV). Wenn eine Anwendung programmiert wurde, den alarm(3)
   Systemaufruf zu benutzen, um nach einiger Zeit benachrichtigt zu werden,
   bekommt sie das "Alarm"-Signal (SIGALRM) gesendet.

   Zwei Signale ko:nnen benutzt werden, um einen Prozess zu stoppen: SIGTERM
   und SIGKILL. SIGTERM fordert den Prozess ho:flich zum Beenden auf. Der
   Prozess kann das Signal abfangen und hat dann Gelegenheit Logdateien zu
   schliessen und die Aktion, die er durchfu:hrte, abzuschliessen. In manchen
   Situationen kann der Prozess SIGTERM ignorieren, wenn er eine Aktion
   durchfu:hrt, die nicht unterbrochen werden darf.

   SIGKILL kann von keinem Prozess ignoriert werden. Wird einem Prozess
   SIGKILL geschickt, dann wird FreeBSD diesen sofort beenden[1].

   Andere ha:ufig verwendete Signale sind SIGHUP, SIGUSR1 und SIGUSR2. Da
   diese Signale fu:r allgemeine Zwecke vorgesehen sind, werden verschiedene
   Anwendungen unterschiedlich auf diese Signale reagieren.

   A:ndern Sie beispielsweise die Konfiguration eines Webservers, so muss
   dieser angewiesen werden, seine Konfiguration neu zu lesen. Ein Neustart
   von httpd wu:rde dazu fu:hren, dass der Server fu:r kurze Zeit nicht
   erreichbar ist. Senden Sie dem Da:mon stattdessen das SIGHUP-Signal. Es
   sei erwa:hnt, dass verschiedene Da:monen sich anders verhalten. Lesen Sie
   die Dokumentation des entsprechenden Da:monen um zu u:berpru:fen, ob der
   Da:mon bei einem SIGHUP die gewu:nschten Ergebnisse erzielt.

   Prozedur 3.1. Verschicken von Signalen

   Das folgende Beispiel zeigt, wie Sie inetd(8) ein Signal schicken. Die
   Konfigurationsdatei von inetd(8) ist /etc/inetd.conf. Diese
   Konfigurationsdatei liest inetd(8) ein, wenn er SIGHUP empfa:ngt.

    1. Suchen Sie mit pgrep(1) die PID des Prozesses, dem Sie ein Signal
       schicken wollen. In diesem Beispiel ist die PID von inetd(8) 198:

 % pgrep -l inetd
 198 inetd -wW

    2. Benutzen Sie kill(1), um ein Signal zu senden. Da inetd(8) dem
       Benutzer root geho:rt, mu:ssen Sie zuerst mit su(1) root werden:

 % su
 Password:
 # /bin/kill -s HUP 198

       kill(1) wird, wie andere UNIX(R) Kommandos auch, keine Ausgabe
       erzeugen, wenn das Kommando erfolgreich war. Wird versucht, einem
       Prozess der nicht dem Benutzer geho:rt, ein Signal zu senden, dann
       wird die Meldung kill: PID: Operation not permitted ausgegeben. Ein
       Tippfehler bei der Eingabe der PID fu:hrt dazu, dass das Signal an
       einen falschen Prozess gesendet wird, was zu negativen Ergebnissen
       fu:hren kann, oder das Signal wird an eine PID gesendet die derzeit
       nicht in Gebrauch ist, was zu dem Fehler kill: PID: No such process
       fu:hrt.

  Warum sollte man /bin/kill benutzen?:

       Viele Shells stellen kill als internes Kommando zur Verfu:gung, das
       heisst die Shell sendet das Signal direkt, anstatt /bin/kill zu
       starten. Beachten Sie, dass die unterschiedlichen Shells eine andere
       Syntax benutzen, um die Namen der Signale anzugeben. Anstatt jede
       Syntax zu lernen, kann es einfacher sein, /bin/kill direkt aufzurufen.

   Beim Versenden von anderen Signalen, ersetzen Sie TERM oder KILL in der
   Kommandozeile mit dem Namen des Signals.

  Wichtig:

   Das zufa:llige Beenden eines Prozesses kann gravierende Auswirkungen
   haben. Insbesondere init(8), mit der PID 1, ist ein Spezialfall. /bin/kill
   -s KILL 1 ist ein schneller, jedoch nicht empfohlener Weg, das System
   herunterzufahren. U:berpru:fen Sie die Argumente von kill(1) immer zweimal
   bevor Sie Return dru:cken.

3.9. Shells

   Eine Shell stellt eine Kommandozeilen-Schnittstelle zur Interaktion mit
   dem Betriebssystem zur Verfu:gung. Sie empfa:ngt Befehle von einem
   Eingabekanal und fu:hrt diese aus. Viele Shells bieten eingebaute
   Funktionen, die die ta:gliche Arbeit erleichtern, beispielsweise eine
   Dateiverwaltung, die Vervollsta:ndigung von Dateinamen (Globbing),
   Kommandozeilen-Editor, sowie Makros und Umgebungsvariablen. FreeBSD
   entha:lt einige Shells, darunter die Bourne Shell (sh(1)) und die
   verbesserte C-Shell (tcsh(1)). Weitere Shells, wie zsh oder bash, befinden
   sich in der Ports-Sammlung.

   Die verwendete Shell ist letztlich eine Frage des Geschmacks. Ein
   C-Programmierer, findet vielleicht eine C-artige Shell wie tcsh(1)
   angenehmer. Ein Linux(R)-Benutzer bevorzugt vielleicht bash. Jede Shell
   hat ihre speziellen Eigenschaften, die mit der bevorzugten Arbeitsumgebung
   des Benutzers harmonieren kann oder nicht. Deshalb stehen mehrere Shells
   zur Auswahl.

   Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollsta:ndigung.
   Nachdem der Benutzer einige Buchstaben eines Kommandos oder eines
   Dateinamen eingeben hat, vervollsta:ndigt die Shell den Rest durch
   dru:cken der Tab-Taste. Angenommen, Sie haben zwei Dateien foobar und
   football. Um foobar zu lo:schen, kann der Benutzer rm foo eingeben und Tab
   dru:cken um den Dateinamen zu vervollsta:ndigen.

   Die Shell wird lediglich rm foo anzeigen. Sie konnte den Dateinamen nicht
   vervollsta:ndigen, da sowohl foobar als auch football mit foo anfangen.
   Einige Shells geben einen Signalton aus, oder zeigen alle Mo:glichkeiten
   an, wenn mehr als ein Name mit dem gegebenen Muster u:bereinstimmt. Der
   Benutzer muss dann weitere Zeichen eingeben, damit die Shell den
   gewu:nschten Dateinamen bestimmen kann. Durch Eingabe von t und erneutes
   Dru:cken von Tab ist die Shell in der Lage, den gewu:nschten Dateinamen zu
   vervollsta:ndigen.

   Ein weiteres Merkmal der Shell ist der Gebrauch von Umgebungsvariablen.
   Dies sind vera:nderbare Schlu:sselpaare im Umgebungsraum der Shell, die
   jedes von der Shell aufgerufene Programm lesen kann. Daher entha:lt der
   Umgebungsraum viele Konfigurationsdaten fu:r Programme. Tabelle 3.4,
   "Gebra:uchliche Umgebungsvariablen" zeigt verbreitete Umgebungsvariablen
   und deren Bedeutung. Beachten Sie, dass die Namen der Umgebungsvariablen
   immer in Grossbuchstaben geschrieben sind:

   Tabelle 3.4. Gebra:uchliche Umgebungsvariablen

   Variable                           Beschreibung                            
   USER     Name des angemeldeten Benutzers.                                  
   PATH     Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen  
            nach Programmen.                                                  
   DISPLAY  Der Name des Xorg-Bildschirms, auf dem Ausgaben erfolgen sollen.  
   SHELL    Die aktuelle Shell.                                               
   TERM     Name des Terminaltyps des Benutzers. Benutzt, um die Fa:higkeiten 
            des Terminals zu bestimmen.                                       
   TERMCAP  Datenbankeintrag der Terminal Escape Codes, beno:tigt um          
            verschieden Terminalfunktionen auszufu:hren.                      
   OSTYPE   Typ des Betriebssystems.                                          
   MACHTYPE Die CPU-Architektur des Systems.                                  
   EDITOR   Vom Benutzer bevorzugter Text-Editor.                             
   PAGER    Vom Benutzer bevorzugter Text-Betrachter.                         
   MANPATH  Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen  
            nach Manualpages.                                                 

   Das Setzen von Umgebungsvariablen unterscheidet sich von Shell zu Shell.
   In tcsh(1) und csh(1) wird dazu setenv benutzt. sh(1) und bash benutzen
   export um Umgebungsvariablen zu setzen. Dieses Beispiel fu:r die
   tcsh(1)-Shell setzt die Variable EDITOR auf /usr/local/bin/emacs:

 % setenv EDITOR /usr/local/bin/emacs

   Der entsprechende Befehl fu:r bash wa:re:

 % export EDITOR="/usr/local/bin/emacs"

   Um eine Umgebungsvariable zu expandieren, geben Sie in der Kommandozeile
   das Zeichen $ vor dessen Namen ein. Zum Beispiel gibt echo $TERM den
   aktuellen Wert von$TERM aus.

   Shells behandeln Spezialzeichen, so genannte Metazeichen, als besondere
   Darstellungen fu:r Daten. Das ha:ufigste Zeichen ist *, das eine beliebige
   Anzahl Zeichen in einem Dateinamen repra:sentiert. Metazeichen ko:nnen zur
   Vervollsta:ndigung von Dateinamen (Globbing) benutzt werden.
   Beispielsweise liefert echo * nahezu das gleiche wie ls, da die Shell alle
   Dateinamen die mit * u:bereinstimmen, an echo weitergibt.

   Um zu verhindern, dass die Shell ein Sonderzeichen interpretiert, schu:tzt
   man es, indem man einen Backslash (\) voranstellt. Zum Beispiel zeigt echo
   $TERM die Einstellung des Terminals an, wohingegen echo \$TERM einfach die
   Zeichenfolge $TERM ausgibt.

  3.9.1. A:ndern der Shell

   Der einfachste Weg die Standard Shell zu a:ndern, ist chsh zu benutzen.
   chsh startet den Editor, welcher durch die Umgebungsvariable EDITOR
   gesetzt ist. Standardma:ssig ist dies vi(1). Tragen Sie in die Zeile die
   mit Shell: beginnt, den absoluten Pfad der neuen Shell ein.

   Alternativ setzt chsh -s die Shell, ohne dabei einen Editor aufzurufen. Um
   die Shell zum Beispiel auf bash zu a:ndern, geben Sie folgenden Befehl
   ein:

 % chsh -s /usr/local/bin/bash

  Anmerkung:

   Die neue Shell muss in /etc/shells aufgefu:hrt sein. Wurde die Shell aus
   der FreeBSD Ports-Sammlung installiert, so wie in Kapitel 4, Installieren
   von Anwendungen: Pakete und Ports beschrieben, sollte sie automatisch zu
   dieser Datei hinzugefu:gt worden sein. Wenn der Eintrag fehlt, nutzen Sie
   folgenden Befehl, und ersetzen Sie den Pfad mit dem Pfad zur gewu:nschten
   Shell:

 # echo /usr/local/bin/bash >> /etc/shells

   Danach kann chsh(1) erneut aufgerufen werden.

  3.9.2. Fortgeschrittene Shell Techniken

   Geschrieben von Tom Rhodes.

   Die UNIX(R)-Shell ist nicht nur ein Kommandozeileninterpreter, sie ist ein
   leistungsfa:higes Werkzeug, das Benutzern die Ausfu:hrung von Befehlen
   ermo:glicht. Es kann die Ein- und Ausgabe umleiten und Befehle miteinander
   verketten, um die finale Ausgabe zu verbessern. Diese Funktionalita:t,
   gepaart mit den eingebauten Befehlen, bietet dem Benutzer eine Umgebung,
   welche die Effizienz erheblich steigern kann.

   Als Redirection bezeichnet man die Umleitung der Ein- oder Ausgabe in
   einen anderen Befehl oder Datei. Um beispielsweise die Ausgabe des Befehls
   ls(1) in eine Datei zu schreiben, muss die Ausgabe umgeleitet werden:

 % ls > Verzeichnis_Ausgabe.txt

   Die Datei Verzeichnis_Ausgabe.txt entha:lt nun den Verzeichnisinhalt.
   Einige Befehle, wie beispielsweise sort(1), ko:nnen verwendet werden um
   von der Eingabe zu lesen. Wenn Sie die Ausgabe sortieren mo:chten, mu:ssen
   Sie die Eingabe umleiten:

 % sort < Verzeichnis_Ausgabe.txt

   Die Eingabe wird sortiert und auf dem Bildschirm ausgegeben. Um diese
   Ausgabe wiederum in eine Datei umzuleiten, kann die Ausgabe von sort(1)
   umgeleitet werden:

 % sort < Verzeichnis_Ausgabe.txt > Sortierte_Ausgabe.txt

   In den bisherigen Beispielen wurden fu:r die Umleitung Dateideskriptoren
   verwendet. Jedes UNIX(R)-System verfu:gt u:ber drei Dateideskriptoren:
   Standardeingabe (stdin), Standardausgabe (stdout) und
   Stardardfehlerausgabe (stderr). Jeder Deskriptor hat einen bestimmten
   Zweck. Die Eingabe ko:nnte von einer Tastatur, einer Maus oder einem
   anderen Eingabegera:t stammen. Die Ausgabe ko:nnte der Bildschirm oder ein
   Drucker sein. Die Standardfehlerausgabe wird zur Diagnose und fu:r
   Fehlermeldungen verwendet. Alle drei Deskriptoren arbeiten I/O basiert und
   werden ha:ufig als Streams bezeichnet.

   Die Verwendung von Deskriptoren erlaubt es der Shell, die Ein- und Ausgabe
   von verschiedenen Kommandos umzuleiten und zu teilen. Eine weitere
   Mo:glichkeit zur Umleitung bietet der Pipe-Operator.

   Der UNIX(R) Pipe-Operator "|" wird verwendet, um die Ausgabe eines
   Kommandos an ein anderes Programm zu u:bergeben. Grundsa:tzlich bedeutet
   dies, dass die Standardausgabe eines Programms als Standardeingabe fu:r
   ein weiteres Programm verwendet wird. Ein Beispiel:

 % cat Verzeichnis_Auflistung.txt | sort | less

   In diesem Beispiel wird der Inhalt von Verzeichnis_Auflistung.txt sortiert
   und die Ausgabe an less(1) u:bergeben. Dies erlaubt es dem Benutzer, die
   Ausgabe Schritt fu:r Schritt und im eigenen Tempo zu betrachten.

3.10. Text-Editoren

   Die meiste Konfiguration unter FreeBSD wird durch das Editieren von
   Textdateien erledigt. Deshalb ist es eine gute Idee, mit einem Texteditor
   vertraut zu werden. FreeBSD hat ein paar davon im Basissystem und sehr
   viel mehr in der Ports-Sammlung.

   Ein einfach zu erlernender Editor ist ee(1), was fu:r easy editor steht.
   Um diesen Editor zu starten, gibt man in der Kommandozeile ee filename
   ein, wobei filename den Namen der zu editierenden Datei darstellt. Einmal
   im Editor, finden sich alle Editor-Funktionen oben im Display aufgelistet.
   Das Einschaltungszeichen (^) steht fu:r die Ctrl (oder Strg) Taste, mit ^e
   ist also die Tastenkombination Ctrl+e gemeint. Um ee(1) zu verlassen,
   dru:cken Sie Esc und wa:hlen dann im Hauptmenu: leave editor aus. Der
   Editor fragt nach, ob Sie speichern mo:chten, wenn die Datei vera:ndert
   wurde.

   FreeBSD verfu:gt u:ber leistungsfa:higere Editoren wie vi(1) als Teil des
   Basissystems. Andere Editoren wie editors/emacs und editors/vim sind Teil
   der Ports-Sammlung. Diese Editoren bieten ho:here Funktionalita:t, jedoch
   auf Kosten einer etwas schwierigeren Erlernbarkeit. Das Erlernen eines
   leistungsfa:higeren Editors, wie vim oder Emacs, kann auf lange Sicht Zeit
   einsparen.

   Viele Anwendungen, die Dateien vera:ndern oder Texteingabe erwarten,
   werden automatisch einen Texteditor o:ffnen. Um den Standardeditor zu
   a:ndern, wird die Umgebungsvariable EDITOR gesetzt, wie im Abschnitt
   Abschnitt 3.9, "Shells" beschrieben.

3.11. Gera:te und Gera:tedateien

   Der Begriff Gera:t wird meist in Verbindung mit Hardware wie Laufwerken,
   Druckern, Grafikkarten oder Tastaturen gebraucht. Der Grossteil der
   Meldungen, die beim Booten von FreeBSD angezeigt werden, beziehen sich auf
   gefundene Gera:te. Eine Kopie dieser Bootmeldungen wird in
   /var/run/dmesg.boot gespeichert.

   Jedes Gera:t verfu:gt u:ber einen Gera:tenamen und Gera:tenummer. Zum
   Beispiel steht ada0 fu:r die erste SATA Festplatte, wa:hrend kbd0 die
   Tastatur repra:sentiert.

   Auf die meisten Gera:te wird unter FreeBSD u:ber spezielle Gera:tedateien
   im /dev Verzeichnis zugegriffen.

3.12. Manualpages

  3.12.1. Manualpages

   Die umfassendste Dokumentation rund um FreeBSD gibt es in Form von
   Manualpages. Anna:hernd jedes Programm im System bringt eine kurze
   Referenzdokumentation mit, die die grundsa:tzliche Funktion und
   verschiedene Parameter erkla:rt. Diese Manuals ko:nnen mit man eingesehen
   werden:

 % man Kommando

   Kommando ist der Name des Kommandos, u:ber das man etwas erfahren will. Um
   beispielsweise mehr u:ber das Kommando ls(1) zu erfahren, geben Sie ein:

 % man ls

   Die Manualpages sind in nummerierte Sektionen unterteilt, die jeweils ein
   Thema darstellen. In FreeBSD sind die folgenden Sektionen verfu:gbar:

    1. Benutzerkommandos.

    2. Systemaufrufe und Fehlernummern.

    3. Funktionen der C Bibliothek.

    4. Gera:tetreiber.

    5. Dateiformate.

    6. Spiele und andere Unterhaltung.

    7. Verschiedene Informationen.

    8. Systemverwaltung und -Kommandos.

    9. Kernel Schnittstellen.

   In einigen Fa:llen kann dasselbe Thema in mehreren Sektionen auftauchen.
   Es gibt zum Beispiel ein chmod Benutzerkommando und einen chmod()
   Systemaufruf. Um man(1) mitzuteilen, aus welcher Sektion die Information
   angezeigt werden soll, kann die Sektionsnummer mit angeben werden:

 % man 1 chmod

   Dies wird Ihnen die Manualpage fu:r das Benutzerkommando chmod(1) zeigen.
   Verweise auf eine Sektion der Manualpages werden traditionell in Klammern
   gesetzt. So bezieht sich chmod(1) auf das Benutzerkommando und chmod(2)
   auf den Systemaufruf.

   Wenn das Kommando nicht bekannt ist, kann man -k benutzt werden, um nach
   Schlu:sselbegriffen in den Kommandobeschreibungen zu suchen:

 % man -k mail

   Dieser Befehl zeigt eine Liste von Kommandos, deren Beschreibung das
   Schlu:sselwort "mail" entha:lt. Die gleiche Funktionalita:t erhalten Sie
   auch, wenn Sie apropos(1) benutzen.

   Um die Beschreibungen der Kommandos in /usr/bin zu lesen, geben Sie ein:

 % cd /usr/bin
 % man -f * | more

   Dasselbe erreichen Sie durch Eingabe von:

 % cd /usr/bin
 % whatis * | more

  3.12.2. GNU Info Dateien

   FreeBSD entha:lt verschiedene Anwendungen und Utilities der Free Software
   Foundation (FSF). Zusa:tzlich zu den Manualpages ko:nnen diese Programme
   Hypertext-Dokumente enthalten, die info-Seiten genannt werden. Diese
   Dokumente ko:nnen mit info(1) ansehen kann. Wenn editors/emacs installiert
   ist, kann auch der info-Modus von emacs benutzt werden.

   Um info(1) zu benutzen, geben Sie ein:

 % info

   Eine kurze Einfu:hrung gibt es mit h; eine Befehlsreferenz erhalten Sie
   durch Eingabe von: ?.

     ----------------------------------------------------------------------

   [1] Es gibt Fa:lle, in denen ein Prozess nicht unterbrochen werden kann.
   Wenn ein Prozess zum Beispiel eine Datei von einem anderen Rechner auf dem
   Netzwerk liest und dieser Rechner nicht erreichbar ist, dann ist der
   Prozess nicht zu unterbrechen. Wenn der Prozess den Lesezugriff nach einem
   Timeout von typischerweise zwei Minuten aufgibt, dann wird er beendet.

Kapitel 4. Installieren von Anwendungen: Pakete und Ports

   U:bersetzt von Uwe Pierau.
   U:berarbeitet von Bjo:rn Heidotting.
   Inhaltsverzeichnis

   4.1. U:bersicht

   4.2. Installation von Software

   4.3. Suchen einer Anwendung

   4.4. Benutzen von pkg zur Verwaltung von Bina:rpaketen

   4.5. Benutzen der Ports-Sammlung

   4.6. Pakete mit Poudriere bauen

   4.7. Nach der Installation

   4.8. Kaputte Ports

4.1. U:bersicht

   FreeBSD entha:lt eine umfassende Sammlung von Systemwerkzeugen, die Teil
   des Basissystems sind. Daru:ber hinaus stellt FreeBSD zwei sich
   erga:nzende Methoden zur Installation von Drittanbieter-Software zur
   Verfu:gung: Die Ports-Sammlung zur Installation aus dem Quellcode sowie
   Pakete zur Installation von vorkompilierten bina:ren Softwarepaketen.
   Beide Methoden ko:nnen benutzt werden, um Anwendungen von lokalen Medien
   oder u:ber das Netzwerk zu installieren.

   Dieses Kapitel behandelt die folgenden Themen:

     * Den Unterschied zwischen bina:ren Softwarepaketen und Ports.

     * Wie man Drittanbieter-Software findet, die nach FreeBSD portiert
       wurde.

     * Wie Bina:rpakete mit pkg verwaltet werden.

     * Den Bau von Drittanbieter-Software aus dem Quellcode mithilfe der
       Ports-Sammlung.

     * Wie man die Dateien findet, die zusammen mit der Anwendung installiert
       wurden.

     * Was zu tun ist, wenn die Installation einer Software fehlschla:gt.

4.2. Installation von Software

   Die typischen Schritte zur Installation von Drittanbieter-Software auf
   einem UNIX(R) System sind:

    1. Download der Software, die als Quelltext oder im Bina:rformat
       vorliegen kann.

    2. Auspacken der Software. Dies ist typischerweise ein mit compress(1),
       gzip(1), bzip2(1) oder xz(1) komprimiertes Tar-Archiv.

    3. Durchsuchen der Dokumentation, die sich in INSTALL, README oder
       mehreren Dateien im Verzeichnis doc/ befindet, nach Anweisungen, wie
       die Software zu installieren ist.

    4. Kompilieren der Software, wenn sie als Quelltext vorliegt. Dazu muss
       vielleicht das Makefile angepasst, oder configure ausgefu:hrt werden.

    5. Testen und installieren der Software.

   Ein FreeBSD-Port ist eine Sammlung von Dateien, die das Kompilieren der
   Quelltexte einer Anwendung automatisieren. Die Dateien, die ein Port
   umfasst enthalten alle notwendigen Informationen um die Anwendung
   herunterzuladen, zu extrahieren, anzupassen und zu installieren.

   Wenn die Software nicht bereits fu:r FreeBSD angepasst und getestet wurde,
   muss vielleicht sogar der Quelltext angepasst werden, damit die Software
   funktioniert.

   Bislang wurden u:ber 24,000 Anwendungen von Drittanbietern nach FreeBSD
   portiert. Falls mo:glich, werden diese Anwendungen als vorkompilierte
   Pakete zur Verfu:gung gestellt.

   Pakete ko:nnen mit FreeBSDs Paketverwaltungswerkzeugen manipuliert werden.

   Pakete und Ports beachten Abha:ngigkeiten zwischen Anwendungen. Wenn ein
   Paket oder die Ports-Sammlung benutzt wird, um eine Anwendung zu
   installieren, dann werden fehlende Bibliotheken zuerst installiert, sofern
   sie nicht schon vorher installiert waren.

   Ein FreeBSD-Paket entha:lt vorkompilierte Kopien aller Befehle fu:r eine
   Anwendung, sowie zusa:tzliche Konfigurationsdateien und Dokumentation.
   Pakete ko:nnen mit den pkg(8)-Befehlen, wie pkg install, manipuliert
   werden.

   Obwohl beide Technologien gleichartig sind, so haben Pakete und Ports
   jeweils ihre eigenen Sta:rken. Welche Technologie eingesetzt wird, ha:ngt
   letzten Endes von den Anforderungen ab, die an eine bestimmte Anwendung
   gestellt werden.

   Vorteile von Paketen
     * Das komprimierte Paket einer Anwendung ist normalerweise kleiner als
       das komprimierte Archiv der Quelltexte.

     * Pakete mu:ssen nicht mehr kompiliert werden. Dies ist ein Vorteil,
       wenn grosse Pakete wie Mozilla, KDE oder GNOME auf langsamen Maschinen
       installiert werden.

     * Wenn Sie Pakete verwenden, brauchen Sie nicht zu verstehen, wie
       Software unter FreeBSD kompiliert wird.

   Vorteile von Ports
     * Da die Pakete auf mo:glichst vielen System laufen sollen, werden
       Optionen beim U:bersetzen zuru:ckhaltend gesetzt. Wird eine Anwendung
       u:ber die Ports u:bersetzt, ko:nnen die Optionen nach eigenen
       Bedu:rfnissen angepasst werden.

     * Die Eigenschaften einiger Anwendungen werden u:ber Optionen zum
       Zeitpunkt des U:bersetzens festgelegt. Apache kann zum Beispiel u:ber
       eine grosse Auswahl an eingebauten Optionen konfiguriert werden.

       Fu:r einige Fa:lle existieren verschiedene Pakete einer Anwendung, die
       beim U:bersetzen unterschiedlich konfiguriert wurden. Fu:r Ghostscript
       gibt es ein ghostscript-Paket und ein ghostscript-nox11-Paket, die
       sich durch die Xorg Unterstu:tzung unterscheiden. Das Erstellen von
       verschiedenen Paketen wird aber schnell unhandlich, wenn eine
       Anwendung mehr als ein oder zwei Optionen zum Zeitpunkt des
       U:bersetzens besitzt.

     * Die Lizenzbestimmungen mancher Software verbietet ein Verbreiten in
       bina:rer Form. Diese Software muss als Quelltext, der durch den
       Benutzer kompiliert werden muss, ausgeliefert werden.

     * Einige Leute trauen bina:ren Distributionen nicht, oder sie ziehen es
       vor den Quelltext zu lesen, um diesen nach mo:glichen Problemen zu
       durchsuchen.

     * Der Quellcode wird beno:tigt, um individuelle Anpassungen anzuwenden.

   Wenn Sie u:ber aktualisierte Ports informiert sein wollen, lesen Sie die
   Mailinglisten FreeBSD ports und FreeBSD ports bugs.

  Warnung:

   Bevor Sie eine Anwendung installieren, informieren Sie sich auf der Seite
   http://vuxml.FreeBSD.org/ u:ber mo:gliche Sicherheitsprobleme mit der
   Anwendung, oder fu:hren Sie pkg audit -F aus, um alle installierten Pakete
   auf bekannte Sicherheitslu:cken zu u:berpru:fen.

   Der Rest dieses Kapitels beschreibt, wie man Software Dritter mit Paketen
   und Ports unter FreeBSD installiert und verwaltet.

4.3. Suchen einer Anwendung

   Die Anzahl der nach FreeBSD portierten Anwendungen steigt sta:ndig. Es
   gibt einige Wege, um nach Anwendungen zu suchen:

     * Die FreeBSD-Webseite stellt unter https://www.FreeBSD.org/ports/ eine
       aktuelle und durchsuchbare Liste aller Anwendungen zur Verfu:gung. Die
       Ports ko:nnen nach dem Namen den Anwendung, oder u:ber die
       Software-Kategorie durchsucht werden.

     * Dan Langille verwaltet FreshPorts.org, das eine umfassende
       Suchfunktion bietet und A:nderungen an den Anwendungen in der
       Ports-Sammlung verfolgt. Registrierte Benutzer ko:nnen eine Merkliste
       erstellen, um automatisch eine E-Mail zu erhalten, sobald ein Port von
       dieser Liste aktualisiert wurde.

     * Wenn Sie bei der Suche nach einer bestimmten Anwendung nicht weiter
       kommen, versuchen Sie eine Webseite wie SourceForge.net oder
       GitHub.com. Schauen Sie dann auf der FreeBSD-Webseite nach, ob die
       Anwendung portiert wurde.

     * Das Paket Repository nach einer Anwendung durchsuchen:

 # pkg search subversion
 git-subversion-1.9.2
 java-subversion-1.8.8_2
 p5-subversion-1.8.8_2
 py27-hgsubversion-1.6
 py27-subversion-1.8.8_2
 ruby-subversion-1.8.8_2
 subversion-1.8.8_2
 subversion-book-4515
 subversion-static-1.8.8_2
 subversion16-1.6.23_4
 subversion17-1.7.16_2

       Die Paketnamen enthalten jeweils die Versionsnummer. Wenn ein Port von
       python abha:ngt, wird auch die Versionsnummer von python ausgegeben,
       mit der die Anwendung gebaut wurde. Fu:r einige Ports stehen sogar
       mehrere Versionen zur Verfu:gung. Im Fall von Subversion gibt es drei
       verschiedene Versionen, mit unterschiedlichen Optionen. In diesem Fall
       wird die Version von Subversion statisch gelinkt. Wenn Sie ein Paket
       installieren, ist es am besten den Ursprung des Ports anzugeben, also
       den Pfad in der Ports-Sammlung. Wiederholen Sie pkg search mit -o um
       den Ursprung der Pakete anzuzeigen:

 # pkg search -o subversion
 devel/git-subversion
 java/java-subversion
 devel/p5-subversion
 devel/py-hgsubversion
 devel/py-subversion
 devel/ruby-subversion
 devel/subversion16
 devel/subversion17
 devel/subversion
 devel/subversion-book
 devel/subversion-static

       Zudem unterstu:tzt pkg search die Suche mit regula:ren Ausdru:cken,
       nach exakten Treffern, nach der Beschreibung oder nach anderen Feldern
       in der Repository-Datenbank. Nach der Installation von ports-mgmt/pkg
       oder ports-mgmt/pkg-devel, finden Sie in pkg-search(8) weitere
       Details.

     * Wenn die Ports-Sammlung bereits installiert ist, gibt es mehrere
       Methoden, um die lokale Version dieser Port-Sammlung abzufragen.
       Verwenden Sie whereis Datei um herauszufinden, in welcher Kategorie
       ein Port ist, wobei Datei der Name des Programms ist, das installiert
       werden soll:

 # whereis lsof
 lsof: /usr/ports/sysutils/lsof

       Alternativ kann der echo(1)-Befehl verwendet werden:

 # echo /usr/ports/*/*lsof*
 /usr/ports/sysutils/lsof

       Beachten Sie aber, dass dieser Befehl auch alle Dateien im Verzeichnis
       /usr/ports/distfiles findet, auf die der angegebene Suchbegriff passt.

     * Ein weiterer Weg nach Software zu suchen besteht darin, die eingebaute
       Suchfunktion der Ports-Sammlung zu benutzen. Wechseln Sie dazu in das
       Verzeichnis /usr/ports, und rufen Sie make search name=Anwendungsname
       auf, wobei Anwendungsname der Name der Software ist. Um zum Beispiel
       nach lsof zu suchen:

 # cd /usr/ports
 # make search name=lsof
 Port:   lsof-4.88.d,8
 Path:   /usr/ports/sysutils/lsof
 Info:   Lists information about open files (similar to fstat(1))
 Maint:  ler@lerctr.org
 Index:  sysutils
 B-deps:
 R-deps:

  Tipp:

       Der integrierte Suchmechanismus verwendet eine Datei mit
       Index-Informationen. Erscheint eine Meldung, dass der INDEX beno:tigt
       wird, fu:hren Sie make fetchindex aus, um die aktuelle Index-Datei
       herunterzuladen. Mit einem vorhandenen INDEX ist make search in der
       Lage, die gewu:nschte Suche durchzufu:hren.

       Die "Path:"-Zeile zeigt an, wo der Port zu finden ist.

       Um weniger Informationen zu erhalten, benutzen Sie die Funktion
       quicksearch:

 # cd /usr/ports
 # make quicksearch name=lsof
 Port:   lsof-4.88.d,8
 Path:   /usr/ports/sysutils/lsof
 Info:   Lists information about open files (similar to fstat(1))

       Erweiterte Suchen fu:hren Sie mit make search key=Text oder make
       quicksearch key=Text aus. Damit werden Portnamen, Kommentare,
       Beschreibungen und Abha:ngigkeiten nach Text durchsucht. Dies kann
       sehr nu:tzlich sein, wenn der Name des Programms nicht bekannt ist.

       Bei der Verwendung von search und quicksearch wird Gross- und
       Kleinschreibung bei der Suche ignoriert. Die Suche nach "LSOF" wird
       dieselben Ergebnisse wie die Suche nach "lsof" liefern.

4.4. Benutzen von pkg zur Verwaltung von Bina:rpaketen

   pkg ist der Nachfolger fu:r die traditionellen Paketverwaltungswerkzeuge
   von FreeBSD. Es bietet viele Funktionen, die den Umgang mit Bina:rpaketen
   schneller und einfacher machen.

   Wenn Sie lediglich vorgefertigte Bina:rpakete von den FreeBSD Spiegeln
   benutzen mo:chten, ist pkg fu:r die Verwaltung von Paketen ausreichend.

   Falls Sie jedoch die Software aus dem Quellcode bauen oder eigene
   Repositories verwenden, beno:tigen Sie ein separates
   Paketverwaltungswerkzeug.

   pkg ist kein Ersatz fu:r diese Werkzeuge. Wa:hrend diese Werkzeuge
   Drittanbieter-Software sowohl aus Bina:rpaketen als auch aus der
   Ports-Sammlung installieren ko:nnen, so installiert pkg ausschliesslich
   Bina:rpakete.

  4.4.1. Erste Schritte mit pkg

   FreeBSD entha:lt ein Bootstrap-Programm, welches pkg zusammen mit den
   Manualpages installiert. pkg wurde fu:r FreeBSD Versionen ab 10.X
   entwickelt.

  Anmerkung:

   Nicht alle FreeBSD Versionen unterstu:zen den folgenden Bootstrap Prozess.
   Eine aktuelle Liste finden Sie unter http://pkg.FreeBSD.org/. Andernfalls
   muss pkg aus der Ports-Sammlung oder als Bina:rpaket installiert werden.

   Um das Bootstrap Programm zu starten, geben Sie folgendes ein:

 # /usr/sbin/pkg

   Sie mu:ssen eine Internetverbindung haben, damit der Bootstrap Prozess
   funktioniert.

   Um den Port zu installieren, geben Sie stattdessen folgendes ein:

 # cd /usr/ports/ports-mgmt/pkg
 # make
 # make install clean

   Bei der Aktualisierung eines bestehenden Systems, welches urspru:nglich
   die alten pkg_* Werkzeuge verwendet hat, muss die Datenbank in das neue
   Format konvertiert werden, damit die neuen Werkzeuge wissen, welche Pakete
   bereits installiert sind. Sobald pkg installiert ist, muss die
   Paketdatenbank mit dem folgenden Befehl vom traditionellen Format in das
   neue Format konvertiert werden:

 # pkg2ng

  Anmerkung:

   Auf neu installieren Systemen, auf denen noch keine Software von
   Drittanbietern installiert wurde, kann dieser Schritt entfallen.

  Wichtig:

   Die Konvertierung ist unwiderruflich. Sobald die Paketdatenbank in das
   Format von pkg umgewandelt wurde, sollten die traditionellen pkg_*
   Werkzeuge nicht mehr benutzt werden.

  Anmerkung:

   Bei der Konvertierung der Paketdatenbank ko:nnen Fehler ausgegeben werden,
   wenn die Inhalte auf die neue Version umgewandelt werden. Im Allgemeinen
   ko:nnen diese Fehler ignoriert werden. Wenn pkg2ng fertig ist, wird eine
   Liste von Software ausgegeben, die nicht erfolgreich konvertiert werden
   konnte. Diese Anwendungen mu:ssen manuell neu installiert werden.

   Um sicherzustellen, dass die Ports-Sammlung neue Pakete mit pkg und nicht
   mit den traditionellen Formaten registriert, muss in FreeBSD 10.X und
   fru:heren Versionen folgende Zeile in /etc/make.conf hinzugefu:gt werden:

 WITH_PKGNG=     yes

   In der Voreinstellung benutzt pkg die Pakete der FreeBSD-Spiegel (das
   Repository). Wenn Sie ein eigenes Paket-Repository erstellen mo:chten,
   lesen Sie Abschnitt 4.6, "Pakete mit Poudriere bauen"

   Weitere Konfigurationsoptionen fu:r pkg sind in pkg.conf(5) beschrieben.

   Informationen zur Bedienung von pkg ist in pkg(8) verfu:gbar. Alternativ
   kann pkg ohne zusa:tzliche Argumente aufgerufen werden.

   Jedes Argument von pkg ist in seiner spezifischen Manualpage dokumentiert.
   Um beispielsweise die Manualpage von pkg install zu lesen, geben Sie einen
   der folgenden Befehle ein:

 # pkg help install

 # man pkg-install

   Der Rest dieses Abschnitts beschreibt die typischen Verwaltungsaufgaben
   fu:r Bina:rpakete, die mit pkg erledigt werden ko:nnen. Jedes gezeigte
   Kommando verfu:gt u:ber Optionen, um das Verhalten anzupassen. Details und
   weitere Beispiele finden Sie in den Manualpages der einzelnen Kommandos.

  4.4.2. Informationen u:ber installierte Pakete anzeigen

   Informationen u:ber bereits installierte Pakete ko:nnen mit pkg info
   angezeigt werden. Dabei wird, wenn keine weiteren Optionen angegeben
   werden, die Version und die Beschreibung aller Pakete oder eines einzelnen
   Pakets ausgegeben.

   Um zu ermitteln welche Version von pkg installiert ist, geben Sie
   folgendes ein:

 # pkg info pkg
 pkg-1.1.4_1

  4.4.3. Installation und Deinstallation von Paketen

   Ein Bina:rpaket installieren Sie mit dem folgenden Befehl, wobei paketname
   der Name des zu installierenden Pakets ist:

 # pkg install paketname

   Dieser Befehl verwendet Daten aus dem Repository um zu bestimmen, welche
   Version der Software und welche Abha:ngigkeiten installiert werden
   mu:ssen. Um beispielsweise curl zu installieren:

 # pkg install curl
 Updating repository catalogue
 /usr/local/tmp/All/curl-7.31.0_1.txz          100% of 1181 kB 1380 kBps 00m01s

 /usr/local/tmp/All/ca_root_nss-3.15.1_1.txz   100% of  288 kB 1700 kBps 00m00s

 Updating repository catalogue
 The following 2 packages will be installed:

         Installing ca_root_nss: 3.15.1_1
         Installing curl: 7.31.0_1

 The installation will require 3 MB more space

 0 MB to be downloaded

 Proceed with installing packages [y/N]: y
 Checking integrity... done
 [1/2] Installing ca_root_nss-3.15.1_1... done
 [2/2] Installing curl-7.31.0_1... done
 Cleaning up cache files...Done

   Das neue Paket und jedes weitere Paket, das als Abha:ngigkeit installiert
   wurde, ist in der Liste der installierten Pakete zu sehen:

 # pkg info
 ca_root_nss-3.15.1_1     The root certificate bundle from the Mozilla Project
 curl-7.31.0_1     Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
 pkg-1.1.4_6       New generation package manager

   Wird ein Paket nicht mehr beno:tigt, kann es mit pkg delete entfernt
   werden. Zum Beispiel:

 # pkg delete curl
 The following packages will be deleted:

       curl-7.31.0_1

 The deletion will free 3 MB

 Proceed with deleting packages [y/N]: y
 [1/1] Deleting curl-7.31.0_1... done

  4.4.4. Installierte Pakete aktualisieren

   Installierte Pakete ko:nnen mit diesem Kommando auf die neuesten Versionen
   aktualisiert werden:

 # pkg upgrade

   Dieses Kommando vergleicht und aktualisiert die installierten Versionen
   der Pakete mit denen im Repository.

  4.4.5. Installierte Pakete auditieren

   Regelma:ssig werden Sicherheitslu:cken in Drittanbieter-Software entdeckt.
   pkg besitzt einen eingebauten Auditing-Mechanismus. Um die auf dem System
   installierte Software auf Sicherheitslu:cken zu pru:fen, geben Sie
   folgenden Befehl ein:

 # pkg audit -F

  4.4.6. Automatisches Entfernen von nicht mehr beno:tigten Abha:ngigkeiten

   Das Entfernen eines Pakets kann mo:glicherweise Abha:ngigkeiten
   hinterlassen, die nicht mehr beno:tigt werden. Unno:tige Pakete, die als
   Abha:ngigkeit von anderen Paketen installiert wurden, ko:nnen automatisch
   erfasst und entfernt werden:

 # pkg autoremove
 Packages to be removed:
     ca_root_nss-3.15.1_1

 The autoremoval will free 723 kB

 Proceed with autoremoval of packages [y/N]: y
 Deinstalling ca_root_nss-3.15.1_1... done

  4.4.7. Wiederherstellung der Paketdatenbank

   Im Gegensatz zum alten Paketverwaltungssystem beinhaltet pkg einen eigenen
   Mechanismus zur Sicherung der Paketdatenbank. Diese Funktionalita:t ist
   standardma:ssig aktiviert.

  Tipp:

   Um das Skript daran zu hindern, eine Sicherung der Paketdatenbank zu
   erstellen, muss in periodic.conf(5) daily_backup_pkgdb_enable="NO" gesetzt
   werden.

   Um den Inhalt einer fru:heren Paketdatenbank wiederherzustellen, geben Sie
   folgendes Kommando ein und ersetzen Sie /path/to/pkg.sql durch den
   Speicherort der gesicherten Datenbank:

 # pkg backup -r /path/to/pkg.sql

  Anmerkung:

   Wenn Sie eine Sicherung wiederherstellen, die von einem periodic Skript
   erstellt wurde, mu:ssen Sie diese zuerst dekomprimieren.

   Um eine manuelle Sicherung der pkg Paketdatenbank zu erstellen, fu:hren
   Sie den folgenden Befehl aus, und ersetzen Sie /path/to/pkg.sql durch
   einen geeigneten Dateinamen:

 # pkg backup -d /path/to/pkg.sql

  4.4.8. Alte Pakete entfernen

   Standardma:ssig speichert pkg Pakete in einem Cache-Verzeichnis, welches
   in pkg.conf(5) in der Variablen PKG_CACHEDIR definiert wird. Nur Kopien
   der neusten installierten Pakete werden beibehalten. A:ltere Versionen von
   pkg haben alle Pakete aufbewahrt. Um diese veralteten Pakete zu entfernen,
   geben Sie folgendes ein:

 # pkg clean

   Um alle Pakte aus dem Cache-Verzeichnis zu lo:schen, geben Sie ein:

 # pkg clean -a

  4.4.9. Manipulation der Paket-Metadaten

   Bei Software aus der FreeBSD Ports-Sammlung kann es vorkommen, dass die
   Hauptversionsnummer gea:ndert wird. Dafu:r hat pkg ein eingebautes
   Kommando, um die Quelle eines Pakets zu aktualisieren. Dies ist nu:tzlich,
   wenn zum Beispiel lang/php5 zu lang/php53 umbenannt wurde, damit lang/php5
   jetzt die Version 5.4 integrieren kann.

   Um die Quelle des Pakets fu:r das obige Beispiel zu a:ndern, geben Sie
   folgendes ein:

 # pkg set -o lang/php5:lang/php53

   Ein weiteres Beispiel: Um lang/ruby18 auf lang/ruby19 zu aktualisieren,
   geben Sie folgendes ein:

 # pkg set -o lang/ruby18:lang/ruby19

   In diesem letzten Beispiel wird die Quelle der Bibliotheken von libglut
   von graphics/libglut auf graphics/freeglut gea:ndert:

 # pkg set -o graphics/libglut:graphics/freeglut

  Anmerkung:

   Bei einem Wechsel der Paketquelle ist es notwendig, die Pakete neu zu
   installieren, welche von dem Paket abha:ngig sind, das seine Paketquelle
   gea:ndert hat. Um eine Neuinstallation von abha:ngigen Paketen zu
   erzwingen, fu:hren Sie folgenden Befehl aus:

 # pkg install -Rf graphics/freeglut

4.5. Benutzen der Ports-Sammlung

   Die Ports-Sammlung ist eine Reihe von Makefiles, Patches und
   Beschreibungen. Die Dateien fu:r den Bau und die Installation von
   einzelnen Anwendungen unter FreeBSD werden als Port bezeichnet.

   In der Voreinstellung wird die Ports-Sammlung im Verzeichnis /usr/ports
   gespeichert.

   Bevor eine Anwendung aus den Ports erstellt werden kann, muss zuerst die
   Ports-Sammlung installiert werden. Wenn dies nicht bereits bei der
   Installation von FreeBSD geschehen ist, benutzen Sie eine der beiden
   Methoden um sie zu installieren:

   Prozedur 4.1. Installation mit Portsnap

   FreeBSDs Basissystem entha:lt mit Portsnap ein schnelles und
   benutzerfreundliches Werkzeug zur Installation der Ports-Sammlung und die
   bevorzugte Wahl fu:r die meisten Benutzer. Dieses Programm stellt eine
   Verbindung zu einem FreeBSD-Server her, u:berpru:ft den gesicherten
   Schlu:ssel und la:dt eine aktuelle Kopie der Ports-Sammlung herunter. Der
   Schlu:ssel wird beno:tigt, um die Integrita:t der heruntergeladenen
   Dateien zu untersuchen.

    1. Laden Sie einen komprimierten Snapshot der Ports-Sammlung in
       /var/db/portsnap:

 # portsnap fetch

    2. Wenn Sie Portsnap das erste Mal verwenden, mu:ssen Sie den Snapshot
       nach /usr/ports extrahieren:

 # portsnap extract

    3. Nach dem ersten Einsatz von Portsnap, kann /usr/ports wie folgt
       aktualisiert werden:

 # portsnap fetch
 # portsnap update

       Bei der Verwendung von fetch ko:nnen die extract oder update
       Operationen nacheinander ausgefu:hrt werden, etwa so:

 # portsnap fetch update

   Prozedur 4.2. Installation mit Subversion

   Wird mehr Kontrolle u:ber die Ports-Sammlung beno:tigt, oder wenn die
   lokalen A:nderungen beibehalten werden sollen, kann Subversion benutzt
   werden, um die Ports-Sammlung zu laden. Lesen Sie den Subversion Primer
   fu:r eine detaillierte Beschreibung von Subversion.

    1. Subversion muss installiert sein, bevor die Ports-Sammlung geladen
       werden kann. Ist eine lokale Kopie der Ports-Sammlung bereits
       vorhanden, installieren Sie Subversion wie folgt:

 # cd /usr/ports/devel/subversion
 # make install clean

       Wenn keine lokale Kopie der Ports-Sammlung vorhanden ist, oder pkg zur
       Verwaltung von Paketen benutzt wird, kann Subversion als Paket
       installiert werden:

 # pkg install subversion

    2. Laden Sie eine Kopie der Ports-Sammlung:

 # svn checkout https://svn.FreeBSD.org/ports/head /usr/ports

    3. Nach dem erstmaligen checkout mit Subversion kann /usr/ports wie folgt
       aktualisiert werden:

 # svn update /usr/ports

   Die Ports-Sammlung entha:lt eine Reihe von Verzeichnissen, die jeweils
   eine Softwarekategorie repra:sentieren. Jede Kategorie hat fu:r jede
   einzelne Anwendung ein weiteres Unterverzeichnis. Jedes Unterverzeichnis
   entha:lt Dateien, die FreeBSD sagen, wie ein Programm kompiliert und
   installiert werden muss. Diese Dateien werden auch Port-"Geru:st" genannt.
   Jedes Port-"Geru:st" beinhaltet die folgenden Dateien und Verzeichnisse:

     * Makefile: entha:lt Anweisungen, die spezifizieren, wie die Anwendung
       kompiliert wird und wohin die Komponenten installiert werden sollten.

     * distinfo: entha:lt die Namen und die Pru:fsummen der Dateien, die
       heruntergeladen werden mu:ssen, um den Port zu bauen.

     * files: dieses Verzeichnis entha:lt Patches, welche das U:bersetzen und
       Installieren der Anwendung unter FreeBSD ermo:glichen. Zudem ko:nnen
       noch weitere Dateien, die fu:r die U:bersetzung des Ports verwendet
       werden, enthalten sein.

     * pkg-descr: entha:lt eine ausfu:hrlichere Beschreibung der Anwendung.

     * pkg-plist: eine Liste aller Dateien, die durch diesen Port installiert
       werden. Ausserdem sind hier Informationen enthalten, die zum Entfernen
       des Ports beno:tigt werden.

   Einige Ports beinhalten noch pkg-message oder weitere Dateien, die vom
   Port-System benutzt werden, um spezielle Situationen zu handhaben. Wenn
   Sie mehr u:ber diese Dateien oder das Port-System erfahren wollen, lesen
   Sie das FreeBSD Porter's Handbook.

   Ein Port entha:lt nicht den eigentlichen Quellcode, der auch als
   "Distfile" bekannt ist. Der heruntergeladene Quellcode wird automatisch
   nach /usr/ports/distfiles extrahiert.

  4.5.1. Ports installieren

   Dieser Abschnitt beschreibt die grundlegende Benutzung der Ports-Sammlung,
   um Software zu installieren oder zu deinstallieren. Eine ausfu:hrliche
   Beschreibung der einzelnen make-Targets finden Sie in ports(7).

  Warnung:

   Stellen Sie sicher, dass die Ports-Sammlung aktuell ist, bevor Sie einen
   Port kompilieren. Informieren Sie sich vorher zusa:tzlich unter
   http://vuxml.FreeBSD.org/ u:ber mo:gliche Sicherheitsprobleme des zu
   installierenden Ports. Alternativ ko:nnen Sie pkg audit -F ausfu:hren,
   bevor Sie einen neuen Port installieren. Die ta:glich laufende
   Sicherheitspru:fung des Systems aktualisiert ebenfalls die Datenbank und
   pru:ft installierte Anwendungen auf vorhandene Sicherheitsprobleme.
   Weitere Informationen finden Sie in pkg-audit(8) und periodic(8).

   Die Benutzung der Ports-Sammlung setzt eine funktionierende
   Internetverbindung und Superuser-Rechte voraus.

   Um einen Port zu installieren, wechseln Sie in das Verzeichnis des Ports,
   den Sie installieren mo:chten. Geben Sie dann make install am Prompt ein:

 # cd /usr/ports/sysutils/lsof
 # make install
 >> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
 >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
 ===>  Extracting for lsof-4.88
 ...
 [Ausgabe des Auspackens weggelassen]
 ...
 >> Checksum OK for lsof_4.88D.freebsd.tar.gz.
 ===>  Patching for lsof-4.88.d,8
 ===>  Applying FreeBSD patches for lsof-4.88.d,8
 ===>  Configuring for lsof-4.88.d,8
 ...
 [configure-Ausgabe weggelassen]
 ...
 ===>  Building for lsof-4.88.d,8
 ...
 [Ausgabe der U:bersetzung weggelassen]
 ...
 ===>  Installing for lsof-4.88.d,8
 ...
 [Ausgabe der Installation weggelassen]
 ...
 ===>   Generating temporary packing list
 ===>   Compressing manual pages for lsof-4.57
 ===>   Registering installation for lsof-4.57
 ===>  SECURITY NOTE:
       This port has installed the following binaries which execute with
       increased privileges.
 /usr/local/bin/lsof
 #

   Da lsof eine Anwendung ist, die mit erho:hten Rechten la:uft, wird nach
   der Installation eine Sicherheitswarnung angezeigt. Sobald die
   Installation abgeschlossen ist, erscheint wieder der Prompt.

   Um die Suche nach Kommandos zu beschleunigen, speichern einige Shells eine
   Liste der verfu:gbaren Kommandos in den durch die Umgebungsvariable PATH
   gegebenen Verzeichnissen. Benutzer der tcsh mu:ssen eventuell rehash
   eintippen, um die neu installierten Kommandos benutzen zu ko:nnen, ohne
   den vollsta:ndigen Pfad anzugeben. Benutzer der Shell sh mu:ssen
   stattdessen hash -r eintippen. Weitere Informationen finden Sie in der
   Dokumentation der jeweiligen Shell.

   Bei der Installation wird ein Arbeitsverzeichnis erstellt, das alle
   tempora:ren Dateien entha:lt, die wa:hrend des Bauvorgangs beno:tigt
   werden. Wenn dieses Verzeichnis nach der Installation entfernt wird, spart
   dies Plattenplatz und minimiert mo:gliche Probleme bei der Aktualisierung
   des Ports auf eine neuere Version:

 # make clean
 ===>  Cleaning for lsof-4.88.d,8
 #

  Anmerkung:

   Sie ko:nnen zwei Schritte sparen, wenn Sie bei der Kompilierung des Ports
   gleich make install clean eingeben.

    4.5.1.1. Port Installation anpassen

   Einige Ports bieten Optionen, mit denen zusa:tzliche Funktionen oder
   Sicherheitsoptionen eingestellt werden ko:nnen. Beispiele dafu:r sind
   www/firefox, security/gpgme und mail/sylpheed-claws. Wenn ein Port von
   anderen Ports abha:ngig ist und diese u:ber zusa:tzliche Abha:ngigkeiten
   und Optionen verfu:gen, wird mehrmals ein Menu: ausgegeben, wo der
   Benutzer verschiedene Optionen wa:hlen kann. Um dies zu vermeiden und die
   Konfiguration in einem Stu:ck zu erledigen, wechseln Sie in das
   Verzeichnis des Ports und geben Sie make config-recursive ein. Fu:hren Sie
   danach make install [clean] aus, um den Port zu kompilieren und zu
   installieren.

  Tipp:

   Bei der Verwendung von config-recursive wird eine Liste von Ports, die
   konfiguriert werden, vom Target all-depends-list erstellt. Es wird
   empfohlen, make config-recursive so lange auszufu:hren, bis alle Optionen
   der abha:ngigen Ports definiert sind und keine Optionen und Menu:s mehr
   erscheinen. Damit soll sichergestellt werden, dass alle Optionen
   konfiguriert wurden.

   Es gibt diverse Mo:glichkeiten, dieses Menu: nach dem Bau eines Ports
   erneut aufzurufen, um Optionen zu entfernen, hinzuzufu:gen oder
   anzupassen. Sie ko:nnen beispielsweise mit cd in das Verzeichnis des Ports
   wechseln und dort make config eingeben. Eine andere Mo:glichkeit ist make
   showconfig. Eine weitere Alternative bietet make rmconfig, das alle
   urspru:nglich gewa:hlten Optionen zuru:cksetzt und es Ihnen dadurch
   ermo:glicht, die Konfiguration erneut zu beginnen. Die eben erwa:hnten
   Optionen werden ausfu:hrlich in ports(7) beschrieben.

   Die Ports-Sammlung benutzt zum Herunterladen von Dateien fetch(3), das
   diverse Umgebungsvariablen unterstu:tzt. Die Variablen FTP_PASSIVE_MODE,
   FTP_PROXY und FTP_PASSWORD mu:ssen unter Umsta:nden gesetzt werden, wenn
   das FreeBSD-System hinter einer Firewall oder einem FTP/HTTP-Proxy
   arbeitet. Eine vollsta:ndige Liste der unterstu:tzten Variablen finden Sie
   in fetch(1).

   Benutzer ohne eine sta:ndige Internet-Verbindung ko:nnen make fetch im
   Verzeichnis /usr/ports ausfu:hren, um die beno:tigten Dateien
   herunterzuladen. Es ist auch mo:glich, make fetch nur in einem Teil des
   Baums, wie /usr/ports/net, aufzurufen. Die Dateien von allen abha:ngigen
   Ports werden mit diesem Kommando allerdings nicht heruntergeladen. Wenn
   Sie diese Dateien ebenfalls herunterladen wollen, benutzen Sie stattdessen
   make fetch-recursive.

   In einigen seltenen Fa:llen ist es erforderlich, die beno:tigten Dateien
   von einem anderen Ort als den im Port definierten MASTER_SITES
   herunterzuladen. Sie ko:nnen MASTER_SITES mit dem folgenden Kommando
   u:berschreiben:

 # cd /usr/ports/directory
 # make MASTER_SITE_OVERRIDE= \
 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

   Die Variablen WRKDIRPREFIX und PREFIX u:berschreiben das voreingestellte
   Bau- und Zielverzeichnis. Zum Beispiel:

 # make WRKDIRPREFIX=/usr/home/example/ports install

   Dieses Kommando baut den Port unter /usr/home/example/ports und
   installiert ihn unter /usr/local.

   Die Variable PREFIX legt das Installations-Verzeichnis fest:

 # make PREFIX=/usr/home/example/local install

   In diesem Beispiel wird der Port unter /usr/ports gebaut und nach
   /usr/home/example/local installiert.

   Sie ko:nnen beide Variablen auch zusammen benutzen:

 # make WRKDIRPREFIX=../ports PREFIX=../local install

   Alternativ ko:nnen diese Variablen auch als Umgebungsvariablen gesetzt
   werden. In der Manualpage Ihrer Shell finden Sie Anweisungen, wie
   Umgebungsvariablen gesetzt werden.

  4.5.2. Entfernen installierter Ports

   Installierte Ports ko:nnen mit pkg delete wieder deinstalliert werden.
   Beispiele fu:r dieses Kommando finden Sie in pkg-delete(8).

   Alternativ kann make deinstall im Verzeichnis des Ports aufgerufen werden:

 # cd /usr/ports/sysutils/lsof
 make deinstall
 ===>  Deinstalling for sysutils/lsof
 ===>   Deinstalling
 Deinstallation has been requested for the following 1 packages:

         lsof-4.88.d,8

 Thee deinstallation will free 229 kB
 [1/1] Deleting lsof-4.88.d,8... done

   Es wird empfohlen die Nachrichten zu lesen, die ausgegeben werden, wenn
   ein Port deinstalliert wird. Wenn der Port noch Anwendungen hat, die von
   ihm abha:ngig sind, werdenn diese am Bildschirm angezeigt, aber die
   Deinstallation wird forgesetzt. In solchen Fa:llen ist es besser, die
   Anwendung neu zu installieren, um fehlende Abha:ngigkeiten zu vermeiden.

  4.5.3. Ports aktualisieren

   Im Laufe der Zeit stehen neuere Versionen der Software in der
   Ports-Sammlung zur Verfu:gung. In diesem Abschnitt wird beschrieben, wie
   Sie bestimmen, welche Software aktualisiert werden kann und wie das
   Upgrade durchzufu:hren ist.

   Um festzustellen, ob neuere Versionen der installierten Ports verfu:gbar
   sind, stellen Sie sicher, dass die neueste Version der Ports-Sammlung
   installiert ist. Dies wird in Prozedur 4.1, "Installation mit Portsnap"
   und Prozedur 4.2, "Installation mit Subversion" beschrieben. Fu:hren Sie
   unter FreeBSD 10 und neueren Versionen, bzw. auf Systemen die bereits mit
   pkg arbeiten, den folgenden Befehl aus, um eine Liste der installierten
   Ports zu erhalten fu:r die eine aktuelle Version existiert:

 # pkg version -l "<"

   Mit FreeBSD 9.X und a:lteren Versionen kann stattdessen dieser Befehl
   verwendet werden:

 # pkg_version -l "<"

  Wichtig:

   Lesen Sie zuerst /usr/ports/UPDATING, bevor Sie einen Port aktualisieren.
   In dieser Datei werden Probleme und zusa:tzlich durchzufu:hrende Schritte
   bei der Aktualisierung einzelner Ports beschrieben. Dazu geho:ren solche
   Dinge wie gea:nderte Dateiformate, verschobene Konfigurationsdateien, aber
   auch Inkompatibilita:ten zu einer Vorga:ngerversion. Notieren Sie sich
   alle Anweisungen der Ports, die aktualisiert werden mu:ssen. Folgen Sie
   den Anweisungen, wenn Sie das Upgrade durchfu:hren.

    4.5.3.1. Werkzeuge fu:r die Aktualisierung und Verwaltung von Ports

   Die Ports-Sammlung entha:lt mehrere Werkzeuge, um die eigentliche
   Aktualisierung durchzufu:hren. Jedes hat seine Sta:rken und Schwa:chen.

   Historisch gesehen verwenden die meisten Installationen entweder
   Portmaster oder Portupgrade. Synth ist eine neuere Alternative.

  Anmerkung:

   Es bleibt dem Systemadministrator u:berlassen, welches dieser Werkzeuge
   fu:r ein bestimmtes System am besten geeignet ist. Es wird empfohlen, die
   Daten zu sichern, bevor Sie eines dieser Werkzeuge verwenden.

    4.5.3.2. Ports mit Portmaster aktualisieren

   ports-mgmt/portmaster ist ein sehr kleines Werkzeug zum Aktualisieren von
   Ports. Es wurde entwickelt, um mit den Werkzeugen aus dem FreeBSD
   Basissystem zu arbeiten, ohne dabei von anderen Ports oder Datenbanken
   abha:ngig zu sein. Sie ko:nnen das Programm aus der Ports-Sammlung
   installieren:

 # cd /usr/ports/ports-mgmt/portmaster
 # make install clean

   Portmaster teilt Ports in vier Kategorien ein:

     * Root Port: hat keine Abha:ngigkeiten und andere Ports sind nicht von
       diesem Port abha:ngig.

     * Trunk Port: hat keine Abha:ngigkeiten, aber andere Ports sind von
       diesem Port abha:ngig.

     * Branch Port: hat Abha:ngigkeiten und andere Ports sind von diesem Port
       abha:ngig.

     * Leaf Port: hat Abha:ngigkeiten, aber andere Ports sind nicht von
       diesem Port abha:ngig.

   Um eine Liste der installierten Ports anzuzeigen und nach neueren
   Versionen zu suchen, verwenden Sie:

 # portmaster -L
 ===>>> Root ports (No dependencies, not depended on)
 ===>>> ispell-3.2.06_18
 ===>>> screen-4.0.3
         ===>>> New version available: screen-4.0.3_1
 ===>>> tcpflow-0.21_1
 ===>>> 7 root ports
 ...
 ===>>> Branch ports (Have dependencies, are depended on)
 ===>>> apache22-2.2.3
         ===>>> New version available: apache22-2.2.8
 ...
 ===>>> Leaf ports (Have dependencies, not depended on)
 ===>>> automake-1.9.6_2
 ===>>> bash-3.1.17
         ===>>> New version available: bash-3.2.33
 ...
 ===>>> 32 leaf ports

 ===>>> 137 total installed ports
         ===>>> 83 have new versions available

   Um alle installierten Ports zu aktualisieren, verwenden Sie folgenden
   Befehl:

 # portmaster -a

  Anmerkung:

   In der Voreinstellung erzeugt Portmaster eine Sicherheitskopie, bevor ein
   installierter Port gelo:scht wird. Ist die Installation der neuen Version
   erfolgreich, wird dieses Backup wieder gelo:scht. Wollen Sie das Backup
   lieber manuell lo:schen, verwenden Sie die Option -b beim Aufruf von
   Portmaster. Durch die Verwendung von -i wird Portmaster im interaktiven
   Modus gestartet und fragt bei jedem zu aktualisierenden Port nach, wie
   weiter vorgegangen werden soll. Viele weitere Optionen stehen zur
   Verfu:gung. Lesen Sie die Manualpage von portmaster(8) fu:r weitere
   Einzelheiten in Bezug auf ihre Nutzung.

   Treten wa:hrend der Aktualisierung Fehler auf, verwenden Sie die Option
   -f, um alle Ports zu aktualisieren beziehungsweise neu zu bauen:

 # portmaster -af

   Portmaster ist auch in der Lage, neue Ports zu installieren, wobei zuvor
   alle abha:ngigen Ports aktualisiert werden. Um diese Funktion zu nutzen,
   geben Sie den Pfad des Ports in der Ports-Sammlung an:

 # portmaster shells/bash

   Weitere Informationen u:ber ports-mgmt/portmaster finden Sie in der
   Beschreibung pkg-descr.

    4.5.3.3. Ports mit Portupgrade aktualisieren

   ports-mgmt/portupgrade ist ein weiteres Werkzeug zur Aktualisierung von
   Ports. Es installiert eine Reihe von Anwendungen, die fu:r die Verwaltung
   von Ports verwendet werden ko:nnen. Das Programm ist jedoch von Ruby
   abha:ngig. Um den Port zu installieren, geben Sie ein:

 # cd /usr/ports/ports-mgmt/portupgrade
 # make install clean

   Durchsuchen Sie vor jedem Update die Liste der installierten Ports mit
   pkgdb -F und beheben Sie alle gefundenen Probleme.

   Benutzen Sie portupgrade -a, um automatisch alle veralteten Ports auf dem
   System zu aktualisieren. Verwenden Sie zusa:tzlich den Schalter -i, wenn
   Sie individuell entscheiden wollen, ob ein Port aktualisiert werden soll:

 # portupgrade -ai

   Um nur eine spezifische Anwendung zu aktualisieren, verwenden Sie
   portupgrade Paketname. Es ist wichtig den Schalter -R zu benutzen, um
   zuvor alle Ports zu aktualisieren, die von dem gegebenen Anwendung
   abha:ngen.

 # portupgrade -R firefox

   Um Pakete anstelle von Ports zu installieren, verwenden Sie den Schalter
   -P. Mit dieser Option durchsucht Portupgrade die in der Umgebungsvariablen
   PKG_PATH aufgefu:hrten Verzeichnisse nach Paketen. Sind lokal keine Pakete
   vorhanden, versucht Portupgrade die Pakete u:ber das Netz herunterzuladen.
   Gibt es die Pakete weder lokal noch auf entfernten Rechnern, werden die
   Ports verwendet. Um die Nutzung von Ports ga:nzlich zu verhindern,
   benutzen Sie die Option -PP. Portupgrade wu:rde dann abbrechen, falls
   keine Pakete zur Verfu:gung stehen.

 # portupgrade -PP gnome3

   Wenn Sie nur die Quelldateien des Ports, oder die Pakete mit -P
   herunterladen mo:chten, ohne die Anwendung zu bauen oder zu installieren,
   geben Sie den Schalter -F an. Weitere Informationen zu den verfu:gbaren
   Schaltern finden Sie in der Manualpage von portupgrade(1).

   Weitere Informationen u:ber ports-mgmt/portupgrade finden Sie in der
   Beschreibung pkg-descr.

  4.5.4. Platzbedarf von Ports

   Die Nutzung der Ports-Sammlung wird im Laufe der Zeit viel Plattenplatz
   verschlingen. Nach dem Bau und der Installation eines Ports, wird make
   clean die tempora:ren Arbeitsverzeichnisse work aufra:umen. Portmaster
   wird dieses Verzeichnis nach der Installation eines Ports automatisch
   entfernen (es sei denn, die Option -K wird verwendet). Wenn Portupgrade
   installiert ist, wird der folgende Befehl alle Arbeitsverzeichnisse der
   lokalen Ports-Sammlung entfernen:

 # portsclean -C

   Zusa:tzlich werden sich im Laufe der Zeit zahlreiche veraltete Distfiles
   in /usr/ports/distfiles ansammeln. Mit Portupgrade ko:nnen alle Distfiles
   gelo:scht werden, die vom keinem Port mehr beno:tigt werden:

 # portsclean -D

   Portupgrade kann alle Distfiles lo:schen, die von keinem derzeit
   installierten Port beno:tigt werden:

 # portsclean -DD

   Wenn Portmaster installiert ist, benutzen Sie diesen Befehl:

 # portmaster --clean-distfiles

   In der Voreinstellung arbeitet dieses Programm interaktiv und fragt den
   Benutzer um Besta:tigung, bevor ein Distfile gelo:scht wird.

   Zusa:tzlich zu diesen Kommandos gibt es noch port-mgmt/pkg_cutleaves.
   Dieses Werkzeug automatisiert die Deinstallation von installierten Ports,
   die nicht weiter beno:tigt werden.

4.6. Pakete mit Poudriere bauen

   Poudriere ist ein unter der BSD-Lizenz stehendes Werkzeug zum Erstellen
   und Testen von FreeBSD-Paketen. Dieses Programm nutzt FreeBSD Jails, um
   die Pakete in einer isolierten Umgebung zu bauen. Diese Jails ko:nnen
   verwendet werden, um Pakete fu:r andere Versionen von FreeBSD zu bauen,
   oder um auf einem amd64-System Pakete fu:r i386 zu bauen. Sobald die
   Pakete gebaut sind, haben sie das gleiche Format wie auf den offiziellen
   Spiegeln. Die Pakete ko:nnen dann mit pkg(8) oder anderen
   Paketverwaltungswerkzeugen benutzt werden.

   Poudriere wird u:ber das Paket oder den Port ports-mgmt/poudriere
   installiert. Die Installation beinhaltet eine Beispielkonfiguration in
   /usr/local/etc/poudriere.conf.sample. Kopieren Sie diese Datei nach
   /usr/local/etc/poudriere.conf. Bearbeiten Sie dann die kopierte Datei, um
   die Konfiguration anzupassen.

   Obwohl ZFS fu:r poudriere nicht zwingend erforderlich ist, so hat die
   Nutzung doch einige Vorteile. Wird ZFS eingesetzt, muss in
   /usr/local/etc/poudriere.conf die Variable ZPOOL definiert, und die
   Variable FREEBSD_HOST auf einen nahe gelegenen Spiegel gesetzt werden. Die
   Definition von CCACHE_DIR erlaubt die Verwendung von devel/ccache, um die
   Bauzeit fu:r ha:ufig kompilierten Code verku:rzen. Es kann vorteilhaft
   sein, die poudriere-Datasets in einem separaten Verzeichnis auf /poudriere
   einzuha:ngen. Die Werte der anderen Konfigurationsvariablen sind in der
   Regel angemessen und brauchen nicht gea:ndert werden.

   Die Anzahl der Kerne im Prozessor wird verwendet um zu bestimmen, wie
   viele Bauprozesse parallel ausgefu:hrt werden. Stellen Sie ausreichend
   virtuellen Speicher bereit, entweder in Form von RAM oder als
   Swap-Speicher. Ist der virtuelle Speicher aufgebraucht, bricht der
   Bauprozess ab und die Jails stu:rzen ab, was zu seltsamen Fehlermeldungen
   fu:hrt.

  4.6.1. Jails und Ports-Sammlung initialisieren

   Nach der Konfiguration muss poudriere initialisiert werden, damit es eine
   Jail mit der beno:tigten Ports-Sammlung startet. Geben Sie mit -j den
   Namen der Jail und mit -v die gewu:nschte FreeBSD-Version an. Auf
   FreeBSD/amd64-Systemen kann die Architektur mit dem Schalter -a und i386
   oder amd64 gesetzt werden. Der voreingestellte Wert fu:r die Architektur
   ko:nnen Sie sich mit uname anzeigen lassen.

 # poudriere jail -c -j 10amd64 -v 10.0-RELEASE
 ====>> Creating 10amd64 fs... done
 ====>> Fetching base.txz for FreeBSD 10.0-RELEASE amd64
 /poudriere/jails/10amd64/fromftp/base.txz      100% of   59 MB 1470 kBps 00m42s
 ====>> Extracting base.txz... done
 ====>> Fetching src.txz for FreeBSD 10.0-RELEASE amd64
 /poudriere/jails/10amd64/fromftp/src.txz       100% of  107 MB 1476 kBps 01m14s
 ====>> Extracting src.txz... done
 ====>> Fetching games.txz for FreeBSD 10.0-RELEASE amd64
 /poudriere/jails/10amd64/fromftp/games.txz     100% of  865 kB  734 kBps 00m01s
 ====>> Extracting games.txz... done
 ====>> Fetching lib32.txz for FreeBSD 10.0-RELEASE amd64
 /poudriere/jails/10amd64/fromftp/lib32.txz     100% of   14 MB 1316 kBps 00m12s
 ====>> Extracting lib32.txz... done
 ====>> Cleaning up... done
 ====>> Jail 10amd64 10.0-RELEASE amd64 is ready to be used

 # poudriere ports -c -p local
 ====>> Creating local fs... done
 ====>> Extracting portstree "local"...
 Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
 Fetching public key from ec2-eu-west-1.portsnap.freebsd.org... done.
 Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
 Fetching snapshot metadata... done.
 Fetching snapshot generated at Tue Feb 11 01:07:15 CET 2014:
 94a3431f0ce567f6452ffde4fd3d7d3c6e1da143efec76100% of   69 MB 1246 kBps 00m57s
 Extracting snapshot... done.
 Verifying snapshot integrity... done.
 Fetching snapshot tag from ec2-eu-west-1.portsnap.freebsd.org... done.
 Fetching snapshot metadata... done.
 Updating from Tue Feb 11 01:07:15 CET 2014 to Tue Feb 11 16:05:20 CET 2014.
 Fetching 4 metadata patches... done.
 Applying metadata patches... done.
 Fetching 0 metadata files... done.
 Fetching 48 patches.
 (48/48) 100.00%  done.
 done.
 Applying patches...
 done.
 Fetching 1 new ports or files... done.
 /poudriere/ports/tester/CHANGES
 /poudriere/ports/tester/COPYRIGHT

 [...]

 Building new INDEX files... done.

   poudriere kann auf einem einzelnen Rechner Ports mit mehreren
   Konfigurationen bauen, in mehreren Jails und aus unterschiedlichen
   Ports-Sammlungen. Spezifische Konfigurationen fu:r diese Kombinationen
   werden Sets genannt. Lesen Sie den Abschnitt CUSTOMIZATION in poudriere(8)
   fu:r weitere Einzelheiten nach der Installation von port-mgmt/poudriere
   oder ports-mgmt/poudriere-devel.

   Die hier gezeigte Konfiguration verwendet eine einzelne Jail-, Port- und
   Set-spezifische make.conf in /usr/local/etc/poudriere.d. Der verwendete
   Dateiname in diesem Beispiel wird aus einer Kombination von Jailnamen,
   Portnamen und Setnamen zusammen gesetzt:
   10amd64-local-workstation-make.conf. Die make.conf des Systems und diese
   neue Datei werden verwendet, um die make.conf fu:r die Jail zu erzeugen.

   Die zu bauenden Pakete werden in 10amd64-local-workstation-pkglist
   eingetragen:

 editors/emacs
 devel/git
 ports-mgmt/pkg
 ...

   Die Optionen und Abha:ngigkeiten fu:r die Ports werden wie folgt
   konfiguriert:

 # poudriere options -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

   Schliesslich werden die Pakete gebaut und ein Paket-Repository erstellt:

 # poudriere bulk -j 10amd64 -p local -z workstation -f 10amd64-local-workstation-pkglist

   Wa:hrend der Ausfu:hrung zeigt Ctrl+t den aktuellen Status des Baus an.
   Poudriere speichert zudem Dateien in /poudriere/logs/bulk/jailname. Diese
   Dateien kann ein Webserver nutzen, um Informationen u:ber den Bau
   anzuzeigen.

   Nach der Fertigstellung stehen die Pakete im poudriere Repository fu:r die
   Installation zur Verfu:gung.

   Weitere Informationen zu poudriere finden Sie in poudriere(8) und unter
   https://github.com/freebsd/poudriere/wiki.

  4.6.2. Konfiguration des pkg-Clients fu:r das Poudriere Repository

   Obwohl es mo:glich ist ein eigenes Repository zusammen mit dem offiziellen
   Repository zu nutzen, ist es manchmal sinnvoll das offizielle Repository
   zu deaktivieren. Dazu wird eine Konfigurationsdatei erstellt, welche die
   offizielle Konfigurationsdatei u:berschreibt. Erzeugen Sie dazu
   /usr/local/etc/pkg/repos/FreeBSD.conf mit dem folgenden Inhalt:

 FreeBSD: {
         enabled: no
 }

   Am einfachsten ist es, das poudriere Repository u:ber HTTP zur Verfu:gung
   zu stellen. Setzen Sie einen Webserver auf, der die Dateien des
   Paketverzeichnisses ausliefert, zum Beispiel
   /usr/local/poudriere/data/packages/10amd64. 10amd64 bezeichnet dabei den
   Namen des Baus.

   Wenn die URL des Paket Repositories http://pkg.example.com/10amd64 ist,
   dann sollte die Konfiguration des Repositories in
   /usr/local/etc/pkg/repos/custom.conf wie folgt aussehen:

 custom: {
         url: "http://pkg.example.com/10amd64",
         enabled: yes,
 }

4.7. Nach der Installation

   Unabha:ngig davon, ob die Software aus einem bina:ren Paket oder aus einem
   Port installiert wird, beno:tigen die meisten Anwendungen von
   Drittanbietern ein gewisses Mass an Konfiguration, nachdem sie installiert
   wurden. Die folgenden Kommandos und Speicherorte helfen Ihnen dabei
   festzustellen, was mit der Anwendung zusammen installiert wurde.

     * Die meisten Anwendungen installieren mindestens eine
       Konfigurationsdatei nach /usr/local/etc. Falls die Anwendung viele
       Konfigurationsdateien entha:lt, wird ein Unterverzeichnis erstellt um
       die Dateien zu speichern. Oft werden die Konfigurationsdateien mit
       einem Suffix wie beispielsweise .sample installiert. Die
       Konfigurationsdateien sollten u:berpru:ft und ggf. bearbeitet werden,
       um die Anforderungen des Systems zu erfu:llen. Um eine
       Konfigurationsdatei zu bearbeiten, kopieren Sie diese zuna:chst ohne
       die Erweiterung .sample.

     * Wenn die Anwendung Dokumentation zur Verfu:gung stellt, wird diese
       nach /usr/local/share/doc installiert. Viele Anwendungen installieren
       auch Manualpages. Diese Dokumentation sollten Sie lesen, bevor Sie
       fortfahren.

     * Einige Anwendungen laufen als Dienst und mu:ssen vor dem ersten Start
       in /etc/rc.conf eingetragen werden. Diese Anwendungen installieren
       meist ein Skript in /usr/local/etc/rc.d. Weitere Informationen finden
       Sie im Abschnitt 11.2, "Start von Diensten".

  Anmerkung:

       In der Voreinstellung fu:hren Anwendungen weder ihr Startskript bei
       der Installation aus, noch fu:hren sie ihr Stopskript wa:hrend der
       Deinstallation aus. Diese Entscheidung bleibt dem einzelnen
       Systemadministrator u:berlassen.

     * Benutzer der csh(1) sollten rehash ausfu:hren, um die neu
       installierten Programme nutzen zu ko:nnen.

     * Benutzen Sie pkg info, um die Dateien, Manualpages und Binaries zu
       ermitteln, die mit der Anwendung installiert wurden.

4.8. Kaputte Ports

   Wenn sich ein Port nicht bauen oder installieren la:sst, versuchen Sie
   folgendes:

    1. Stellen Sie fest, ob die Datenbank mit den Problemberichten bereits
       einen Lo:sungsvorschlag entha:lt. Ist dies der Fall, kann die
       vorgeschlagene Lo:sung getestet werden.

    2. Bitten Sie den Betreuer des Ports um Hilfe. Geben Sie dazu make
       maintainer ein oder lesen Sie das Makefile im Verzeichnis des Ports,
       um an die E-Mail-Adresse zu kommen. Vergessen Sie nicht die Zeile mit
       $FreeBSD: aus dem Makefile und die Ausgabe bis zur Fehlermeldung
       mitzuschicken.

  Anmerkung:

       Einige Ports werden nicht von einer Einzelperson, sondern von einer
       Mailingliste betreut. Viele (aber nicht alle) dieser Adressen haben
       die Form <freebsd-NameDerListe@FreeBSD.org>. Denken Sie daran, wenn
       Sie Ihre Fragen formulieren.

       Dies gilt insbesondere fu:r Ports, die von <ports@FreeBSD.org> betreut
       werden. Derartige Ports haben u:berhaupt keinen Betreuer. Korrekturen
       und Unterstu:tzung kommen daher nur von Personen, die diese
       Mailingliste abonniert haben. Gerade in diesem Bereich werden
       jederzeit zusa:tzliche freiwillige Helfer beno:tigt!

       Erhalten Sie auf Ihre Anfrage keine Antwort, benutzen Sie Bugzilla, um
       einen Problembericht zu erstellen. Bevor Sie einen solchen Bericht
       erstellen, lesen Sie den Artikel Writing FreeBSD Problem Reports.

    3. Reparieren Sie ihn! Das FreeBSD Porter's Handbook entha:lt eine
       detaillierte Beschreibung des Portsystems. Damit sind Sie in der Lage,
       einen zeitweilig kaputten Port zu reparieren oder einen eigenen Port
       zu erstellen.

    4. Installieren Sie das Paket anstelle des Ports. Anweisungen hierzu
       finden Sie in Abschnitt 4.4, "Benutzen von pkg zur Verwaltung von
       Bina:rpaketen".

Kapitel 5. Das X-Window-System

   U:bersetzt von Martin Heinen.
   Inhaltsverzeichnis

   5.1. U:bersicht

   5.2. Terminologie

   5.3. Xorg installieren

   5.4. Xorg konfigurieren

   5.5. Schriftarten in Xorg benutzen

   5.6. Der X-Display-Manager

   5.7. Grafische Oberfla:chen

   5.8. Compiz Fusion installieren

   5.9. Fehlersuche

5.1. U:bersicht

   Bei einer Installation von FreeBSD mit bsdinstall wird nicht automatisch
   eine grafische Benutzeroberfla:che installiert. Dieses Kapitel beschreibt
   die Installation und Konfiguration von Xorg, das eine grafische Umgebung
   u:ber das quelloffene X-Window-System zur Verfu:gung stellt. Weiterhin
   wird beschrieben, wie Sie eine Desktop-Umgebung oder einen Window Manager
   finden und installieren ko:nnen.

  Anmerkung:

   Benutzer die eine Installationsmethode bevorzugen, welche automatisch Xorg
   konfiguriert und zudem die Auswahl eines Window Managers wa:hrend der
   Installation anbietet, sollten sich die http://www.trueos.org/ Webseite
   ansehen.

   Weitere Informationen u:ber Video-Hardware, die von Xorg unterstu:tzt
   wird, finden Sie auf der x.org Webseite.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie

     * Die Komponenten des X-Window-Systems und ihr Zusammenspiel kennen.

     * Wissen, wie Xorg installiert und konfiguriert wird.

     * Wissen, wie verschiedene Window-Manager und Desktop-Umgebungen
       installiert und konfiguriert werden.

     * Wissen, wie TrueType(R)-Schriftarten mit Xorg benutzt werden.

     * Wissen, wie Sie die grafische Anmeldung (XDM) einrichten.

   Bevor Sie dieses Kapitel lesen, sollten Sie

     * Wissen, wie Sie Software Dritter, wie in Kapitel 4, Installieren von
       Anwendungen: Pakete und Ports beschrieben, installieren.

5.2. Terminologie

   Obwohl es nicht no:tig ist, alle Details der verschiedenen Komponenten des
   X Window Systems und deren Zusammenspiel zu kennen, kann es trotzdem
   nu:tzlich sein die Grundlagen dieser Komponenten zu verstehen:

   X-Server

           X wurde von Anfang an netzwerktransparent entworfen und verwendet
           ein "Client-Server-Modell". In diesem Modell la:uft der "X-Server"
           auf dem Rechner, an dem die Tastatur, der Bildschirm und die Maus
           angeschlossen ist. Der Server ist fu:r Dinge wie die Verwaltung
           des Bildschirms und die Verarbeitung von Tastatur- und
           Maus-Eingaben sowie anderer Ein- und Ausgabegera:te, wie
           beispielsweise ein Tablet oder ein Videoprojektor, verantwortlich.
           Dieses Modell verwirrt viele Leute, die erwarten, dass der
           "X-Server" der leistungsstarke Rechner im Maschinenraum und der
           "X-Client" ihr Arbeitsplatzrechner ist.

   X-Client

           Jede X-Anwendung, wie beispielsweise XTerm oder Firefox ist ein
           "X-Client". Der Client sendet dem Server Nachrichten wie "Zeichne
           an diesen Koordinaten ein Fenster" und der Server sendet dem
           Client Nachrichten der Art "Der Benutzer hat gerade den Ok-Knopf
           gedru:ckt".

           In kleinen Umgebungen laufen der X-Server und die X-Clients auf
           demselben Rechner. Es ist auch mo:glich, den X-Server auf einem
           weniger leistungsfa:higen Rechner laufen zu lassen und die
           X-Anwendungen auf einem leistungsfa:higeren Rechner zu betreiben.
           In diesem Fall kommunizieren der X-Server und die X-Clients u:ber
           das Netzwerk.

   Window-Manager

           X schreibt nicht vor, wie Fenster auf dem Bildschirm auszusehen
           haben, wie sie mit der Maus zu verschieben sind, welche
           Tastenkombinationen benutzt werden sollen um zwischen den Fenstern
           zu wechseln, wie die Fensterrahmen aussehen, oder ob diese
           Schaltfla:chen zum schliessen haben. Stattdessen gibt X die
           Verantwortung fu:r all diese Sachen an eine separate
           Window-Manager Anwendung ab. Es stehen zahlreiche Window-Manager
           zur Verfu:gung. Jeder Window-Manager bietet ein anderes
           Erscheinungsbild: einige unterstu:tzen virtuelle Bildschirme,
           andere erlauben Tastenkombinationen zur Verwaltung des
           Bildschirms. Einige besitzen eine "Start" Schaltfla:che und in
           manchen la:sst sich das Aussehen und Verhalten der Anwendung u:ber
           Themes beliebig einstellen. Window-Manager stehen in der Kategorie
           x11-wm der Ports-Sammlung zur Verfu:gung.

           Jeder Window-Manager wird unterschiedlich konfiguriert. Einige
           erwarten eine manuell erstellte Konfigurationsdatei, wa:hrend
           andere ein grafisches Werkzeug fu:r die meisten
           Konfigurationsarbeiten anbieten.

   Desktop-Umgebungen

           KDE und GNOME werden als Desktop-Umgebungen bezeichnet, da sie
           eine ganze Reihe von Anwendungen fu:r typische Desktop-Aufgaben
           enthalten. Dazu za:hlen beispielsweise Office-Pakete, Webbrowser
           und Spiele.

   Fokus

           Der Window-Manager ist fu:r die Methode verantwortlich, mit der
           ein Fenster den Fokus bekommt. Jedes System, das Fenster verwendet
           muss entscheiden, wie ein Fenster aktiviert wird, damit es
           Eingaben empfangen kann. Das aktive Fenster sollte zudem sichtbar
           gekennzeichnet werden.

           Eine Methode wird "click-to-focus" genannt. Ein Fenster wird
           aktiv, wenn es mit der Maus angeklickt wird. Eine weitere Methode
           ist "focus-follows-mouse". Hier hat liegt der Fokus auf dem
           Fenster, auf dem sich der Mauszeiger befindet. Wird der Mauszeiger
           in ein anderes Fenster bewegt, so erha:lt dieses Fenster den
           Fokus. Eine dritte Methode ist "sloppy-focus". Hier wechselt der
           Fokus nur dann, wenn sich der Mauszeiger in ein neues Fenster
           bewegt und nicht, wenn er das aktive Fenster verla:sst. Ist der
           Mauszeiger auf der Desktop Oberfla:che, so bleibt der Fokus auf
           dem zuletzt verwendeten Fenster. Bei der Methode "click-to-focus"
           wird das aktive Fenster durch einen Mausklick festgelegt. Dabei
           kann das Fenster vor alle anderen Fenster gesetzt werden. Alle
           Eingaben werden dann, unabha:ngig von der Position des
           Mauszeigers, dem aktiven Fenster zugeordnet.

           Die verschiedenen Window-Manager unterstu:tzen noch andere
           Methoden. Alle unterstu:tzen jedoch "click-to-focus" und die
           meisten von ihnen auch die anderen Methoden. Lesen Sie die
           Dokumentation des Window-Managers um festzustellen, welche
           Methoden zur Verfu:gung stehen.

   Widgets

           Widget bezeichnet Objekte, die in irgendeiner Weise geklickt oder
           manipuliert werden ko:nnen. Dazu geho:ren buttons
           (Schaltfla:chen), check buttons (Schaltfla:che fu:r
           Mehrfachauswahlen), radio buttions (Schaltfla:che fu:r
           Einfachauswahlen), Icons und Auswahllisten. Eine Widget-Sammlung
           ist eine Reihe von Widgets, die verwendet werden um grafische
           Anwendungen zu erstellen. Es gibt mehrere popula:re
           Widget-Sammlungen, einschliesslich Qt, das von KDE benutzt wird,
           und GTK+, das von GNOME benutzt wird. Als Folge dessen, haben
           Anwendungen einen bestimmten look and feel, je nachdem welche
           Widget-Sammlung benutzt wurde, um die Anwendung zu erstellen.

5.3. Xorg installieren

   In FreeBSD kann Xorg als Paket oder Port installiert werden.

   Die Installation des Pakets ist zwar schneller, dafu:r ko:nnen weniger
   Optionen angepasst werden:

 # pkg install xorg

   Die nachstehenden Kommandos bauen und installieren Xorg aus der
   Ports-Sammlung:

 # cd /usr/ports/x11/xorg
 # make install clean

   Bei beiden Vorgehensweisen wird ein vollsta:ndiges Xorg-System
   installiert. Fu:r die meisten Anwender ist die Installation des
   Bina:rpakets die bessere Option.

   Eine kleinere Version des Xorg-Systems fu:r erfahrene Anwender ist mit
   x11/xorg-minimal verfu:gbar. Die meisten Dokumente, Bibliotheken und
   Anwendungen werden hierbei nicht installiert. Einige Anwendungen erfordern
   jedoch diese zusa:tzlichen Komponenten, um ordnungsgema:ss zu
   funktionieren.

5.4. Xorg konfigurieren

   Warren Block
   Bjo:rn Heidotting

  5.4.1. Schnellstartanleitung

   Xorg unterstu:tzt die meisten ga:ngigen Grafikkarten, Tastaturen und
   Zeigegera:te.

  Tipp:

   Grafikkarten, Monitore und Eingabegera:te werden automatisch erkannt und
   mu:ssen nicht manuell konfiguriert werden. Erstellen Sie keine xorg.conf
   und fu:hren Sie nicht -configure aus, es sei denn, die automatische
   Konfiguration schla:gt fehl.

    1. Wenn Xorg bereits zuvor auf diesem Computer verwendet wurde,
       verschieben oder entfernen Sie alle vorhandenen Konfigurationsdateien:

 # mv /etc/X11/xorg.conf ~/xorg.conf.etc
 # mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc

    2. Fu:gen Sie die Benutzer, die Xorg verwenden, zur Gruppe video oder
       wheel hinzu, um die 3D-Beschleunigung zu aktivieren. Um den Benutzer
       jru in eine der verfu:gbaren Gruppen hinzuzufu:gen:

 # pw groupmod video -m jru || pw groupmod wheel -m jru

    3. Der Window-Manager TWM ist standardma:ssig enthalten und wird auch
       gestartet, wenn Xorg startet:

 % startx

    4. Auf einigen a:lteren Versionen von FreeBSD muss die Systemkonsole auf
       vt(4) eingestellt sein, damit der Wechsel auf die Konsole
       ordnungsgema:ss funktioniert. Informationen dazu finden Sie im
       Abschnitt 5.4.3, "Kernel Mode Setting (KMS)".

  5.4.2. Benutzergruppen fu:r Grafikbeschleunigung

   Um die 3D-Beschleunigung fu:r Grafikkarten zu ermo:glichen, ist der
   Zugriff auf /dev/dri notwendig. In der Regel ist es am einfachsten, die
   Benutzer zur Gruppe video oder wheel hinzuzufu:gen. In diesem Beispiel
   wird pw(8) verwendet, um den Benutzer slurms zu der Gruppe video
   hinzuzufu:gen, bzw. zur Gruppe wheel, falls die Gruppe video nicht
   existiert:

 # pw groupmod video -m slurms || pw groupmod wheel -m slurms

  5.4.3. Kernel Mode Setting (KMS)

   Wenn der Computer die Anzeige von der Konsole auf eine ho:here
   Bildschirmauflo:sung fu:r X umstellt, muss der Videoausgabe-Modus
   eingestellt werden. Neuere Versionen von Xorg verwenden dazu ein System
   innerhalb des Kernels, um diesen Modus effizienter zu a:ndern. A:ltere
   Versionen von FreeBSD verwenden dafu:r sc(4), welches jedoch nicht mit dem
   KMS-System umgehen kann. Das fu:hrt dazu, dass nach dem Schliessen von X
   die Konsole leer bleibt, obwohl sie weiterhin funktioniert. Die neuere
   vt(4) Konsole vermeidet dieses Problem.

   Fu:gen Sie diese Zeile in /boot/loader.conf ein um vt(4) zu aktivieren:

 kern.vty=vt

  5.4.4. Konfigurationsdateien

   Eine manuelle Konfiguration ist in der Regel nicht erforderlich. Bitte
   erstellen Sie keine manuellen Konfigurationsdateien, es sei denn, die
   automatische Konfiguration funktioniert nicht.

    5.4.4.1. Verzeichnis

   Xorg sucht in verschiedenen Verzeichnissen nach Konfigurationsdateien.
   Unter FreeBSD ist /usr/local/etc/X11/ das bevorzugte Verzeichnis fu:r
   diese Dateien. Die Verwendung dieses Verzeichnisses hilft dabei,
   Anwendungsdateien vom Betriebssystem getrennt zu halten.

   Das Speichern von Konfigurationsdateien unter /etc/X11/ funktioniert immer
   noch, allerdings vermischt diese Methode Anwendungsdateien mit Dateien des
   Basissystems und wird daher nicht empfohlen.

    5.4.4.2. Einzelne oder mehrere Dateien

   Anstatt die traditionelle xorg.conf zu verwenden, ist es einfacher,
   mehrere Dateien, die jeweils eine bestimmte Einstellung konfigurieren, zu
   verwenden. Diese Dateien werden im Unterverzeichnis xorg.conf.d/ des
   Hauptverzeichnisses gespeichert. Der vollsta:ndige Pfad ist normalerweise
   /usr/local/etc/X11/xorg.conf.d/.

   Beispiele fu:r diese Dateien werden spa:ter in diesem Abschnitt
   vorgestellt.

   Die traditionelle, einzelne xorg.conf funktioniert weiterhin, ist jedoch
   nicht so u:bersichtlich und flexibel wie die Verwendung von mehreren
   Dateien im Unterverzeichnis xorg.conf.d/.

  5.4.5. Grafikkarten

   Intel(R)

           3D-Beschleunigung wird von den meisten Intel(R)-Grafikkarten
           unterstu:tzt, einschliesslich Ivy Bridge (HD Graphics 2500, 4000
           und P4000), Iron Lake (HD Graphics) und Sandy Bridge (HD Graphics
           2000).

           Treibername: intel

           Weitere Informationen finden Sie unter
           https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units.

   AMD(R) Radeon

           2D- und 3D-Beschleunigung wird von den meisten Radeon-Karten bis
           zur HD6000-Serie unterstu:tzt.

           Treibername: radeon

           Weitere Informationen finden Sie unter
           https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units.

   NVIDIA

           Verschiedene NVIDIA Treiber sind in der Kategorie x11 der
           Ports-Sammlung enthalten. Installieren Sie den Treiber, der fu:r
           die Grafikkarte beno:tigt wird.

           Weitere Informationen finden Sie unter
           https://en.wikipedia.org/wiki/List_of_Nvidia_graphics/processing_units.

   Hybride Kombinationen

           Einige Notebooks besitzen zusa:tzlich zum Chipsatz oder Prozessor
           einen Grafikprozessor. Optimus kombiniert Intel(R) und NVIDIA
           Hardware. Umschaltbare Grafik bzw. Hybride Grafik ist eine
           Kombination aus Intel(R), oder AMD(R) Prozessor mit AMD(R) Radeon
           GPU.

           Die Implementierungen dieser Hybrid-Grafik-Systeme variieren und
           Xorg in FreeBSD ist nicht in der Lage, alle Versionen der Hardware
           zu betreiben.

           Einige Computer bieten jedoch eine BIOS-Option, um eine der beiden
           Grafikkarten zu deaktivieren oder den diskreten Modus
           einzuschalten. Zum Beispiel ist es manchmal mo:glich, die NVIDIA
           GPU in einem Optimus-System zu deaktivieren. Intel(R) Video kann
           dann mit einem Intel(R) Treiber verwendet werden.

           Die BIOS-Einstellungen sind abha:ngig vom Modell des Computers. In
           manchen Situationen ko:nnen beide GPUs aktiviert bleiben. Um solch
           ein System lauffa:hig zu machen genu:gt es bereits, nur die
           Haupt-GPU im Abschnitt Device der Konfigurationsdatei zu setzen.

   Andere Grafikkarten

           Treiber fu:r weniger gebra:uchliche Grafikkarten finden Sie in der
           Kategorie x11-drivers der Ports-Sammlung.

           Karten, die nicht durch einen speziellen Treiber unterstu:tzt
           werden, sind vielleicht noch mit dem Treiber
           x11-drivers/xf86-video-vesa nutzbar. Dieser Treiber wird von
           x11/xorg installiert. Der Treiber kann auch manuell als
           x11-drivers/xf86-video-vesa installiert werden. Xorg versucht
           immer diesen Treiber zu verwenden, wenn fu:r die Grafikkarte kein
           passender Treiber gefunden wird.

           x11-drivers/xf86-video-scfb ist ein a:hnlicher Treiber, der mit
           vielen UEFI und ARM(R) Computern funktioniert.

   Video-Treiber u:ber eine Datei einstellen

           Den Intel(R) Treiber in einer Konfigurationsdatei einstellen:

           Beispiel 5.1. Den Intel(R) Treiber u:ber eine Datei auswa:hlen

           /usr/local/etc/X11/xorg.conf.d/driver-intel.conf

 Section "Device"
         Identifier  "Card0"
         Driver      "intel"
         # BusID     "PCI:1:0:0"
 EndSection

           Wenn mehr als eine Grafikkarte vorhanden ist, kann der Eintrag
           BusID verwendet werden, um die gewu:nschte Karte auszuwa:hlen.
           Eine Liste der BusIDs der Grafikkarten kann mit pciconf -lv | grep
           -B3 display ausgegeben werden.

           Den Radeon Treiber in einer Konfigurationsdatei einstellen:

           Beispiel 5.2. Den Radeon Treiber u:ber eine Datei auswa:hlen

           /usr/local/etc/X11/xorg.conf.d/driver-radeon.conf

 Section "Device"
         Identifier  "Card0"
         Driver      "radeon"
 EndSection

           Den VESA Treiber in einer Konfigurationsdatei einstellen:

           Beispiel 5.3. Den VESA Treiber u:ber eine Datei auswa:hlen

           /usr/local/etc/X11/xorg.conf.d/driver-vesa.conf

 Section "Device"
         Identifier  "Card0"
         Driver      "vesa"
 EndSection

           Den Treiber scfb fu:r UEFI- oder ARM(R)-Computer auswa:hlen:

           Beispiel 5.4. Den scfb Treiber u:ber eine Datei auswa:hlen

           /usr/local/etc/X11/xorg.conf.d/driver-scfb.conf

 Section "Device"
         Identifier  "Card0"
         Driver      "scfb"
 EndSection

  5.4.6. Monitore

   Fast alle Monitore unterstu:tzen den Extended Display Identification Data
   Standard (EDID). Xorg verwendet EDID um mit dem Monitor zu kommunizieren
   und die unterstu:tzten Auflo:sungen und Bildwiederholfrequenzen zu
   erkennen. Xorg wa:hlt dann die fu:r den Monitor am besten geeignete
   Kombination von Einstellungen.

   Weitere vom Monitor unterstu:tzte Auflo:sungen, ko:nnen in der
   Konfigurationsdatei, oder nach dem Start des X-Servers mit xrandr(1)
   gesetzt werden.

   xrandr(1) benutzen

           Fu:hren Sie xrandr(1) ohne Parameter aus, um eine Liste von
           Video-Ausga:ngen und erkannten Monitor-Modi zu sehen:

 % xrandr
 Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192
 DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm
    1920x1200     59.95*+
    1600x1200     60.00
    1280x1024     85.02    75.02    60.02
    1280x960      60.00
    1152x864      75.00
    1024x768      85.00    75.08    70.07    60.00
    832x624       74.55
    800x600       75.00    60.32
    640x480       75.00    60.00
    720x400       70.08
 DisplayPort-0 disconnected (normal left inverted right x axis y axis)
 HDMI-0 disconnected (normal left inverted right x axis y axis)

           Die Auflistung zeigt, dass der DVI-0 Ausgang benutzt wird, um eine
           Bildschirmauflo:sung von 1920x1200 bei einer Bildwiederholrate von
           60 Hz anzuzeigen. An den Anschlu:ssen DisplayPort-0 und HDMI-0
           sind keine Monitore angeschlossen.

           Die anderen Anzeigemodi ko:nnen mit xrandr(1) ausgewa:hlt werden.
           Um beispielsweise auf 1280x1024 bei 60 Hz umzuschalten:

 % xrandr --mode 1280x1024 --rate 60

           Ha:ufig wird fu:r einen Videoprojektor der externe Videoausgang
           eines Notebooks verwendet.

           Die Typen und Anzahl der Videoanschlu:sse variiert zwischen den
           Gera:ten und auch die Ausgabe variiert von Treiber zu Treiber. Was
           fu:r den einen Treiber HDMI-1 ist, nennt ein anderer Treiber
           vielleicht HDMI1. Fu:hren Sie daher zuna:chst xrandr(1) aus, um
           alle verfu:gbaren Anschlu:sse aufzulisten.

 % xrandr
 Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
 LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
    1366x768      60.04*+
    1024x768      60.00
    800x600       60.32    56.25
    640x480       59.94
 VGA1 connected (normal left inverted right x axis y axis)
    1280x1024     60.02 +  75.02
    1280x960      60.00
    1152x864      75.00
    1024x768      75.08    70.07    60.00
    832x624       74.55
    800x600       72.19    75.00    60.32    56.25
    640x480       75.00    72.81    66.67    60.00
    720x400       70.08
 HDMI1 disconnected (normal left inverted right x axis y axis)
 DP1 disconnected (normal left inverted right x axis y axis)

           Vier Ausga:nge wurden gefunden: das integrierte Panel LVDS1, sowie
           die externen Anschlu:sse VGA1, HDMI1 und DP1.

           Der Videoprojektor wurde am Ausgang VGA1 angeschlossen. xrandr(1)
           wird nun verwendet, um diese Ausgabe auf die native Auflo:sung des
           Projektors einzustellen und den zusa:tzlichen Platz auf der
           rechten Seite des Desktops hinzuzufu:gen:

 % xrandr --output VGA1 --auto --right-of LVDS1

           --auto wa:hlt die Auflo:sung und Aktualisierungsrate die von EDID
           ermittelt wurden. Wenn die Auflo:sung nicht richtig ermittelt
           wurde, kann ein fester Wert mit --mode anstelle von --auto
           angegeben werden. Beispielsweise ko:nnen die meisten Projektoren
           mit einer Auflo:sung von 1024x768 betrieben werden, die mit --mode
           1024x768 gesetzt wird.

           xrandr(1) wird ha:ufig aus .xinitrc ausgefu:hrt, um den
           entsprechenden Modus zu setzen wenn X startet.

   Bildschirmauflo:sung u:ber eine Datei einstellen

           Eine Bildschirmauflo:sung von 1024x768 in einer
           Konfigurationsdatei einstellen:

           Beispiel 5.5. Die Bildschirmauflo:sung in eine Datei schreiben

           /usr/local/etc/X11/xorg.conf.d/screen-resolution.conf

 Section "Screen"
         Identifier "Screen0"
         Device     "Card0"
         SubSection "Display"
         Modes      "1024x768"
         EndSubSection
 EndSection

           Die wenigen Monitore, die EDID nicht beherrschen, ko:nnen durch
           setzen von HorizSync und VertRefresh auf den Bereich der vom
           Monitor unterstu:tzten Frequenzen konfiguriert werden.

           Beispiel 5.6. Manuelles Einstellen der Monitorfrequenzen

           /usr/local/etc/X11/xorg.conf.d/monitor0-freq.conf

 Section "Monitor"
         Identifier   "Monitor0"
         HorizSync    30-83  # kHz
         VertRefresh  50-76  # Hz
 EndSection

  5.4.7. Eingabegera:te

    5.4.7.1. Tastaturen

   Tastaturlayout

           Die standardisierte Position von Tasten auf einer Tastatur wird
           als Layout bezeichnet. Layouts und andere einstellbare Parameter
           werden in xkeyboard-config(7) beschrieben.

           In der Voreinstellung ist ein US-amerikanisches Layout aktiv. Um
           ein alternatives Layout zu wa:hlen, setzen Sie die Optionen
           XkbLayout und XkbVariant in der Klasse InputClass. Dies wird fu:r
           alle Eingabegera:te der entsprechenden Klasse angewendet werden.

           Beispiel 5.7. Konfiguration eines Tastaturlayouts

           /usr/local/etc/X11/xorg.conf.d/keyboard-fr-oss.conf

 Section "InputClass"
         Identifier      "KeyboardDefaults"
         Driver          "keyboard"
         MatchIsKeyboard "on"
         Option          "XkbLayout" "fr"
         Option          "XkbVariant" "oss"
 EndSection

           Beispiel 5.8. Konfiguration mehrerer Tastaturlayouts

           Hier werden die Tastaturlayouts fu:r Vereinigte Staaten, Spanien
           und Ukraine gesetzt. Mit Alt+Shift ko:nnen Sie zwischen den
           einzelnen Layouts wechseln. Fu:r eine verbesserte Steuerung des
           Layouts kann x11/xxkb oder x11/sbxkb benutzt werden.

           /usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf

 Section "InputClass"
         Identifier      "All Keyboards"
         MatchIsKeyboard "yes"
         Option          "XkbLayout" "us,es,ua"
 EndSection

   Xorg u:ber die Tastatur beenden

           X kann u:ber eine Tastenkombination geschlossen werden.
           Standardma:ssig ist die Tastenkombination jedoch nicht gesetzt, da
           sie mit Tastaturbefehlen fu:r einige Anwendungen in Konflikt
           steht. Die Aktivierung dieser Option erfordert A:nderungen in der
           Sektion InputDevice fu:r die Tastatur:

           Beispiel 5.9. X u:ber die Tastatur beenden

           /usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf

 Section "InputClass"
         Identifier      "KeyboardDefaults"
         Driver          "keyboard"
         MatchIsKeyboard "on"
         Option          "XkbOptions" "terminate:ctrl_alt_bksp"
 EndSection

    5.4.7.2. Ma:use und Zeigegera:te

   Viele Parameter fu:r die Maus ko:nnen u:ber Konfigurationseinstellungen
   eingestellt werden. mousedrv(4) entha:lt eine vollsta:ndige Liste.

   Mauszeiger

           Die Anzahl der Maustasten wird in xorg.conf im Abschnitt
           InputDevice fu:r die Maus festgelegt. Um die Anzahl der Tasten auf
           7 zu setzen:

           Beispiel 5.10. Die Anzahl der Maustasten festlegen

           /usr/local/X11/xorg.conf.d/mouse0-buttons.conf

 Section "InputDevice"
         Identifier  "Mouse0"
         Option      "Buttons" "7"
 EndSection

  5.4.8. Manuelle Konfiguration

   In einigen Fa:llen funktioniert die Autokonfiguration nicht mit bestimmter
   Hardware, oder es wird eine andere Konfiguration beno:tigt. Fu:r diese
   Fa:lle kann eine benutzerdefinierte Konfigurationsdatei erstellt werden.

  Warnung:

   Erstellen Sie keine manuellen Konfigurationsdateien, sofern dies nicht
   erforderlich ist. Eine unno:tige manuelle Konfiguration kann den
   ordnungsgema:ssen Betrieb verhindern.

   Eine Konfigurationsdatei kann, basierend auf der von Xorg erfassten
   Hardware erzeugt werden. Diese Konfigurationsdatei ist ein guter
   Ausgangspunkt fu:r angepasste Konfigurationen.

   Erzeugung einer xorg.conf:

 # Xorg -configure

   Die Konfigurationsdatei wird in /root/xorg.conf.new gespeichert. Machen
   Sie alle gewu:nschten A:nderungen an dieser Datei. Danach testen Sie die
   Datei mit:

 # Xorg -config /root/xorg.conf.new

   Nachdem die neue Konfiguration angepasst und getestet wurde, kann die
   Konfiguration in kleinere Dateien unter /usr/local/etc/X11/xorg.conf.d/
   aufgeteilt werden.

5.5. Schriftarten in Xorg benutzen

  5.5.1. Type 1 Schriftarten

   Die Schriftarten, die mit Xorg ausgeliefert werden, eignen sich ganz und
   gar nicht fu:r Desktop-Publishing-Anwendungen. Grosse Schriftarten zeigen
   bei Pra:sentationen deutliche Treppenstufen und kleine Schriftarten sind
   fast unleserlich. Es gibt allerdings mehrere hochwertige Type 1
   Schriftarten (PostScript(R)), die mit Xorg benutzt werden ko:nnen.
   Beispielsweise enthalten die URW-Schriftarten (x11-fonts/urwfonts)
   hochwertige Versionen ga:ngiger Type 1 Schriftarten (unter anderem Times
   Roman(R), Helvetica(R), Palatino(R)). Die Sammlung Freefonts
   (x11-fonts/freefonts) entha:lt viele weitere Schriftarten, doch sind diese
   fu:r den Einsatz in Grafikprogrammen wie Gimp gedacht und nicht fu:r den
   allta:glichen Gebrauch. Weiterhin kann Xorg mit einem Minimum an Aufwand
   konfiguriert werden, damit TrueType(R)-Schriftarten benutzt werden
   ko:nnen. Mehr dazu erfahren Sie in der Manualpage X(7) und im
   Abschnitt 5.5.2, "TrueType(R)-Schriftarten".

   Die Type 1 Schriftarten lassen sich als Paket wie folgt installieren:

 # pkg install urwfonts

   Alternativ ko:nnen die Schriftarten aus der Ports-Sammlung gebaut und
   installiert werden:

 # cd /usr/ports/x11-fonts/urwfonts
 # make install clean

   Analog lassen sich Freefont und andere Sammlungen installieren. Damit der
   X-Server diese Schriftarten erkennt, fu:gen Sie eine entsprechende Zeile
   in die Konfigurationsdatei des X-Servers (/etc/X11/xorg.conf) hinzu:

 FontPath "/usr/local/share/fonts/urwfonts/"

   Alternativ kann in der X-Sitzung das folgende Kommando abgesetzt werden:

 % xset fp+ /usr/local/share/fonts/urwfonts
 % xset fp rehash

   Jetzt kennt der X-Server die neuen Schriftarten, jedoch nur bis zu Ende
   der Sitzung. Soll die A:nderung dauerhaft sein, mu:ssen die Befehle in
   ~/.xinitrc eingetragen werden, wenn X mittels startx gestartet wird,
   beziehungsweise in ~/.xsession, wenn ein grafischer Login-Manager, wie XDM
   verwendet wird. Eine dritte Mo:glichkeit besteht darin,
   /usr/local/etc/fonts/local.conf zu verwenden, was im Abschnitt 5.5.3,
   "Anti-aliasing" demonstriert wird.

  5.5.2. TrueType(R)-Schriftarten

   Xorg besitzt eine eingebaute Unterstu:tzung zur Darstellung von
   TrueType(R)-Schriftarten. Hierzu existieren zwei verschiedene Module, die
   diese Funktionalita:t aktivieren ko:nnen. In diesem Beispiel wird das
   Freetype-Modul benutzt, da es besser mit anderen Werkzeugen, die
   TrueType(R)-Schriftarten darstellen, u:bereinstimmt. Um das Freetype-Modul
   zu aktivieren, muss die folgende Zeile zum Abschnitt "Module" in
   /etc/X11/xorg.conf hinzugefu:gt werden.

 Load "freetype"

   Erstellen Sie ein Verzeichnis fu:r die TrueType(R)-Schriftarten
   (beispielsweise /usr/local/share/fonts/TrueType) und kopieren Sie alle
   Schriftarten dorthin. Beachten Sie, dass die Schriftarten fu:r Xorg im
   UNIX(R)/MS-DOS(R)/Windows(R)-Format vorliegen mu:ssen und nicht direkt von
   einem Apple(R) Mac(R) u:bernommen werden ko:nnen. Sobald die Dateien in
   das Verzeichnis kopiert wurden, verwenden Sie mkfontdir um fonts.dir zu
   erstellen, damit X weiss, dass diese neuen Dateien installiert wurden.
   mkfontdir kann als Paket installiert werden:

 # pkg install mkfontdir

   Erstellen Sie dann einen Index der Schriftarten fu:r X:

 # cd /usr/local/share/fonts/TrueType
 # mkfontdir

   Geben Sie dem System das TrueType(R)-Verzeichnis, wie im Abschnitt 5.5.1,
   "Type 1 Schriftarten" beschrieben, bekannt:

 # xset fp+ /usr/local/share/fonts/TrueType
 # xset fp rehash

   Oder fu:gen Sie eine FontPath-Zeile in xorg.conf ein.

   Jetzt sollten Gimp, Apache OpenOffice und alle anderen X-Anwendungen die
   TrueType(R)-Schritarten erkennen. Extrem kleine Schriftarten (Webseiten,
   die mit hoher Auflo:sung betrachtet werden) und sehr grosse Schriftarten
   (in StarOffice(TM)) werden jetzt viel besser aussehen.

  5.5.3. Anti-aliasing

   Alle Schriftarten in Xorg, die in den Verzeichnissen
   /usr/local/share/fonts/ und ~/.fonts/ gefunden werden, werden automatisch
   fu:r Anti-aliasing an Anwendungen zur Verfu:gung gestellt, die Xft
   beherrschen. Die meisten aktuellen Anwendungen beherrschen Xft, dazu
   geho:ren auch KDE, GNOME und Firefox.

   In /usr/local/etc/fonts/local.conf werden die Schriftarten, die mit dem
   Anti-aliasing-Verfahren benutzt werden sollen und die Eigenschaften des
   Verfahrens festgelegt. In diesem Abschnitt wird nur die grundlegende
   Konfiguration von Xft beschrieben. Weitere Details entnehmen Sie bitte der
   Hilfeseite fonts-conf(5).

   Die Datei local.conf ist ein XML-Dokument. Achten Sie beim Editieren der
   Datei daher auf die richtige Gross- und Kleinschreibung und darauf, dass
   alle Tags geschlossen sind. Die Datei beginnt mit der u:blichen
   XML-Deklaration gefolgt von einer DOCTYPE-Definition und dem
   <fontconfig>-Tag:

 <?xml version="1.0"?>
         <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
         <fontconfig>

   Wie vorher erwa:hnt, stehen schon alle Schriftarten in
   /usr/local/share/fonts/ und ~/.fonts/ fu:r Anwendungen, die Xft
   unterstu:tzen, zur Verfu:gung. Um ein Verzeichnis ausserhalb dieser beiden
   Ba:ume zu benutzen, fu:gen Sie eine Zeile wie die nachstehende in
   /usr/local/etc/fonts/local.conf hinzu:

 <dir>/path/to/my/fonts</dir>

   Wenn Sie neue Schriftarten hinzugefu:gt haben, mu:ssen Sie den
   Schriftarten-Cache neu aufbauen:

 # fc-cache -f

   Das Anti-aliasing-Verfahren zeichnet Ra:nder leicht unscharf, dadurch
   werden kleine Schriften besser lesbar und der Treppenstufen-Effekt bei
   wird grossen Schriften vermieden. Auf normale Schriftgro:ssen sollte das
   Verfahren aber nicht angewendet werden, da dies die Augen zu sehr
   anstrengt. Um kleinere Schriftgro:ssen als 14 Punkt von dem Verfahren
   auszuschliessen, fu:gen Sie in local.conf die nachstehenden Zeilen ein:

         <match target="font">
            <test name="size" compare="less">
                <double>14</double>
            </test>
            <edit name="antialias" mode="assign">
                <bool>false</bool>
            </edit>
          </match>
          <match target="font">
            <test name="pixelsize" compare="less" qual="any">
                <double>14</double>
            </test>
            <edit mode="assign" name="antialias">
                <bool>false</bool>
            </edit>
          </match>

   Das Anti-aliasing-Verfahren kann die Absta:nde einiger Fixschriften falsch
   darstellen, dies fa:llt besonders unter KDE auf. Sie ko:nnen das Problem
   umgehen, indem Sie die Absta:nde dieser Schriften auf den Wert 100
   festsetzen. Fu:gen Sie die nachstehenden Zeilen hinzu:

         <match target="pattern" name="family">
            <test qual="any" name="family">
                <string>fixed</string>
            </test>
            <edit name="family" mode="assign">
                <string>mono</string>
            </edit>
         </match>
         <match target="pattern" name="family">
             <test qual="any" name="family">
                 <string>console</string>
             </test>
             <edit name="family" mode="assign">
                 <string>mono</string>
             </edit>
         </match>

   Damit werden die Namen der gebra:uchlichen Fixschriften auf "mono"
   abgebildet. Fu:r diese Schriften setzen Sie dann den Abstand fest:

          <match target="pattern" name="family">
              <test qual="any" name="family">
                  <string>mono</string>
              </test>
              <edit name="spacing" mode="assign">
                  <int>100</int>
              </edit>
          </match>     

   Bestimmte Schriftarten, wie Helvetica, ko:nnen Probleme mit dem
   Anti-Aliasing-Verfahren verursachen. In der Regel erscheinen diese
   Schriftarten dann vertikal halbiert. Im schlimmsten Fall stu:rzen
   Anwendungen als Folge davon ab. Sie vermeiden dies, indem Sie betroffene
   Schriftarten in local.conf von dem Verfahren ausnehmen:

          <match target="pattern" name="family">
              <test qual="any" name="family">
                  <string>Helvetica</string>
              </test>
              <edit name="family" mode="assign">
                  <string>sans-serif</string>
              </edit>
          </match>       

   Nachdem Sie local.conf editiert haben, mu:ssen Sie sicherstellen, dass die
   Datei mit dem Tag </fontconfig> endet. Ist das nicht der Fall, werden die
   A:nderungen nicht beru:cksichtigt.

   Benutzer ko:nnen personalisierte Einstellungen in ~/.fonts.conf vornehmen.
   Diese Datei verwendet die gleiche XML-Syntax wie im obigen Beispiel.

   Mit einem LCD ko:nnen Sie sub-pixel sampling anstelle von Anti-aliasing
   einsetzen. Dieses Verfahren behandelt die horizontal getrennten Rot-,
   Gru:n- und Blau-Komponenten eines Pixels gesondert und verbessert damit
   (teilweise sehr wirksam) die horizontale Auflo:sung. Die nachstehende
   Zeile in local.conf aktiviert diese Funktion:

          <match target="font">
              <test qual="all" name="rgba">
                  <const>unknown</const>
              </test>
              <edit name="rgba" mode="assign">
                  <const>rgb</const>
              </edit>
          </match>

  Anmerkung:

   Abha:ngig von der Art Ihres Bildschirms mu:ssen Sie anstelle von rgb eines
   der folgenden verwenden: bgr, vrgb oder vbgr. Experimentieren Sie und
   vergleichen, was besser aussieht.

5.6. Der X-Display-Manager

   Beigetragen von Seth Kingsley.

   Xorg entha:lt den X-Display-Manager XDM, um Sitzungen zu verwalten. XDM
   stellt eine graphische Anmeldemaske zur Verfu:gung, in der Sie den Server,
   auf dem eine Sitzung laufen soll, auswa:hlen ko:nnen und in der Sie die
   Autorisierungs-Informationen, wie Benutzername und Passwort, eingeben
   ko:nnen.

   Dieser Abschnitt zeigt, wie der X-Displaymanager konfiguriert wird. Einige
   grafische Oberfla:chen enthalten ihre eigenen graphischen Login-Manager.
   Eine Anleitung zur Konfiguration des GNOME Display-Managers finden Sie im
   Abschnitt 5.7.1, "GNOME". Eine Anleitung zur Konfiguration des KDE Display
   Managers finden Sie im Abschnitt 5.7.2, "KDE".

  5.6.1. XDM einrichten

   XDM kann u:ber das Paket oder den Port x11/xdm installiert werden. Nach
   der Installation la:sst sich XDM durch einen Eintrag in /etc/ttys bei
   jedem Start des Rechners aktivieren:

 ttyv8   "/usr/local/bin/xdm -nodaemon"  xterm   off secure

   A:ndern Sie den Wert off zu on und speichern Sie die Datei. ttyv8 zeigt
   an, dass XDM auf dem neunten virtuellen Terminal ausgefu:hrt wird.

   Die Konfigurationsdateien von XDM befinden sich in /usr/local/lib/X11/xdm.
   Dieses Verzeichnis entha:lt einige Dateien, mit denen das Verhalten und
   Aussehen von XDM beeinflusst werden kann, sowie ein paar Skripte und
   Programme zur Einrichtung des Desktops. Eine Zusammenfassung der Aufgaben
   dieser Dateien beschreibt die Tabelle 5.1, "Die Konfigurationsdateien von
   XDM". Die genaue Syntax und Verwendung wird in xdm(1) beschrieben.

   Tabelle 5.1. Die Konfigurationsdateien von XDM

     Datei                             Beschreibung                           
              Verbindungen zu XDM werden u:ber das "X Display Manager         
              Connection Protocol" (XDMCP) hergestellt. Xaccess entha:lt die  
   Xaccess    Client-Berechtigungen zur Steuerung der XDMCP-Verbindungen      
              entfernter Maschinen. In der Voreinstellung erlaubt diese Datei 
              keine Verbindungen von entfernten Maschinen.                    
              Diese Datei steuert das Erscheinungsbild der Bildschirmauswahl  
              und Anmeldemasken von XDM. In der Voreinstellung erscheint ein  
              rechteckiges Anmeldefenster, dass den Hostnamen und einen       
   Xresources Anmeldeprompt mit "Login:" und "Password" anzeigt. Das Format   
              dieser Datei entspricht den Dateien im Verzeichnis              
              app-defaults, die in der Dokumentation von Xorg beschrieben     
              sind.                                                           
   Xservers   Diese Datei entha:lt eine Liste entfernter Rechner, die in der  
              Bildschirmauswahl angeboten werden.                             
              Dieses Skript wird von XDM aufgerufen, nachdem sich ein         
   Xsession   Benutzer erfolgreich angemeldet hat. U:blicherweise besitzt     
              jeder Benutzer eine angepasste Version dieses Skripts in        
              ~/.xsession, das dann anstelle von Xsession ausgefu:hrt wird.   
              Diese Skripten werden automatisch ausgefu:hrt, bevor die        
              Bildschirmauswahl oder die Anmeldemasken angezeigt werden. Fu:r 
   Xsetup_*   jeden lokalen Bildschirm gibt es ein Skript namens Xsetup_*,    
              wobei * die lokale Bildschirmnummer ist. Normalerweise werden   
              damit ein oder zwei Programme, wie xconsole, im Hindergrund     
              gestartet.                                                      
   xdm-config Konfiguration fu:r alle auf der Maschine verwalteten            
              Bildschirme.                                                    
              Entha:lt Fehler, die vom Server generiert werden. Wenn ein von  
              XDM verwalteter Bildschirm ha:ngen bleibt, suchen Sie in dieser 
   xdm-errors Datei nach Fehlermeldungen. Fu:r jede Sitzung werden die        
              Meldungen auch in die Datei ~/.xsession-errors des Benutzers    
              geschrieben.                                                    
   xdm-pid    Die Prozess-ID des gerade laufenden XDM-Prozesses.              

  5.6.2. Fernzugriff einrichten

   In der Voreinstellung ko:nnen sich nur Benutzer auf dem selben System
   u:ber XDM anmelden. Um es Benutzern anderer Systeme zu ermo:glichen, sich
   mit dem Bildschirm-Server zu verbinden, muss der Zugriffsregelsatz
   bearbeitet und der Listener aktiviert werden.

   Um XDM so zu konfigurieren, dass jede Verbindung angenommen wird,
   kommentieren Sie die Zeile DisplayManager.requestPort in
   /usr/local/etc/X11/xdm/xdm-config aus, indem Sie der Zeile ein !
   voranstellen.

 ! SECURITY: do not listen for XDMCP or Chooser requests
 ! Comment out this line if you want to manage X terminals with xdm
 DisplayManager.requestPort:     0

   Speichern Sie die A:nderungen und starten Sie XDM neu. Um den Fernzugriff
   zu beschra:nken, sehen Sie sich die Beispiele in
   /usr/local/lib/X11/xdm/Xaccess an. Zusa:tzliche Informationen finden Sie
   in xdm(1)

5.7. Grafische Oberfla:chen

   Beigetragen von Valentino Vaschetto.

   Dieser Abschnitt beschreibt die Installation der drei beliebtesten
   grafischen Oberfla:chen unter FreeBSD. Eine Oberfla:che kann alles von
   einem einfachen Window-Manager bis hin zu kompletten Anwendungen sein.
   Mehr als einhundert grafische Oberfla:chen stehen in der Kategorie x11-wm
   der Ports-Sammlung zur Verfu:gung.

  5.7.1. GNOME

   GNOME ist eine benutzerfreundliche Oberfla:che. Es besitzt eine Leiste,
   mit der Anwendungen gestartet werden und die Statusinformationen anzeigen
   kann. Programme und Daten ko:nnen auf der Oberfla:che abgelegt werden und
   Standardwerkzeuge stehen zur Verfu:gung. Es gibt Konventionen, die es
   Anwendungen leicht machen, zusammenzuarbeiten und ein konsistentes
   Erscheinungsbild garantieren. Weitere Informationen zu GNOME unter FreeBSD
   finden Sie unter https://www.FreeBSD.org/gnome. Die Webseite entha:lt
   zusa:tzliche Informationen u:ber die Installation, Konfiguration und
   Verwaltung von GNOME unter FreeBSD.

   Diese grafische Oberfla:che kann als Paket installiert werden:

 # pkg install gnome3

   Um GNOME stattdessen aus der Ports-Sammlung zu u:bersetzen, nutzen Sie das
   folgende Kommando. GNOME ist eine grosse Anwendung, die sogar auf einem
   schnellen Computer einige Zeit zum U:bersetzten beno:tigt.

 # cd /usr/ports/x11/gnome3
 # make install clean

   GNOME beno:tigt ein eingeha:ngtes /proc Dateisystem. Fu:gen Sie daher die
   folgende Zeile in /etc/fstab ein, damit procfs(5) beim Systemstart
   automatisch eingeha:ngt wird:

 proc           /proc       procfs  rw  0   0

   GNOME beno:tigt D-Bus und HAL fu:r einen Nachrichtenbus und Hardware
   Abstraktion. Diese Anwendungen werden automatisch als Abha:ngigkeiten von
   GNOME installiert. Aktivieren Sie die Dienste in /etc/rc.conf, sodass sie
   automatisch gestartet werden wenn das System bootet:

 dbus_enable="YES"
 hald_enable="YES"

   Nach der Installation weisen Sie Xorg an, GNOME zu starten. Der einfachste
   Weg, dies zu tun, ist u:ber den GNOME Display Manager GDM, der als Teil
   des GNOME-Desktops installiert wird. Um GDM zu aktivieren, fu:gen Sie
   folgende Zeile in /etc/rc.conf ein:

 gdm_enable="YES"

   In der Regel ist es ratsam, alle GNOME-Dienste zu starten. Um dies zu
   erreichen, fu:gen Sie die folgende Zeile in /etc/rc.conf ein:

 gnome_enable="YES"

   GDM wird nun automatisch gestartet, wenn das System hochfa:hrt.

   GNOME kann alternativ auch von der Kommandozeile gestartet werden, wenn
   eine entsprechend konfigurierte ~/.xinitrc vorliegt. Existiert diese Datei
   bereits, ersetzen Sie den Aufruf des Window-Managers durch
   /usr/local/bin/gnome-session. Wenn .xinitrc nicht existiert, erstellen Sie
   die Datei mit folgendem Befehl:

 % echo "exec /usr/local/bin/gnome-session" > ~/.xinitrc

   Eine dritte Methode ist, XDM als Display-Manager zu verwenden. In diesem
   Fall erstellen Sie eine ausfu:hrbare ~/.xsession:

 % echo "#!/bin/sh" > ~/.xsession
 % echo "exec /usr/local/bin/gnome-session" >> ~/.xsession
 % chmod +x ~/.xsession

  5.7.2. KDE

   KDE ist eine weitere, leicht zu benutzende Desktop-Umgebung. Dieser
   Desktop bietet eine Sammlung von Anwendungen mit einheitlichem
   Erscheinungsbild (look and feel), einheitlichen Menu:s, Werkzeugleisten,
   Tastenkombinationen, Farbschemata, Internationalisierung und einer
   zentralen, dialoggesteuerten Desktop-Konfiguration. Weitere Informationen
   zu KDE finden Sie unter http://www.kde.org/. Spezifische Informationen
   fu:r FreeBSD finden Sie unter http://freebsd.kde.org.

   Um das Paket KDE4 zu installieren, geben Sie ein:

 # pkg install x11/kde4

   Um KDE stattdessen aus dem Quellcode zu u:bersetzen, verwenden Sie das
   folgende Kommando. Bei der Installation wird ein Menu: zur Auswahl der
   Komponenten angezeigt. KDE ist eine grosse Anwendung, die sogar auf einem
   schnellen Computer einige Zeit zum U:bersetzen beno:tigt.

 # cd /usr/ports/x11/kde4
 # make install clean

   KDE beno:tigt ein eingeha:ngtes /proc. Fu:gen Sie diese Zeile in
   /etc/fstab ein, um das Dateisystem automatisch beim Systemstart
   einzuha:ngen:

 proc           /proc       procfs  rw  0   0

   KDE beno:tigt D-Bus und HAL fu:r einen Nachrichtenbus und Hardware
   Abstraktion. Diese Anwendungen werden automatisch als Abha:ngigkeiten von
   KDE installiert. Aktivieren Sie die Dienste in /etc/rc.conf, sodass sie
   automatisch gestartet werden wenn das System bootet:

 dbus_enable="YES"
 hald_enable="YES"

   Die Installation von KDE beinhaltet den KDE Display-Manager KDM. Um diesen
   Display-Manager zu aktivieren, fu:gen Sie folgende Zeile in /etc/rc.conf
   ein:

 kdm4_enable="YES"

   Eine zweite Mo:glichkeit KDE zu starten, ist startx in der Kommandozeile
   einzugeben. Damit dies funktioniert, wird folgende Zeile in ~/.xinitrc
   beno:tigt:

 exec /usr/local/bin/startkde

   Eine dritte Mo:glichkeit ist KDE u:ber XDM zu starten. Um dies zu tun,
   erstellen Sie eine ausfu:hrbare ~/.xsession wie folgt:

 % echo "#!/bin/sh" > ~/.xsession
 % echo "exec /usr/local/bin/startkde" >> ~/.xsession
 % chmod +x ~/.xsession

   Sobald KDE gestartet wird, finden Sie im integrierten Hilfesystem weitere
   Informationen zur Benutzung der verschiedenen Menu:s und Anwendungen.

  5.7.3. Xfce

   Xfce ist eine Desktop-Umgebung, basierend auf den von GNOME verwendeten
   GTK+-Bibliotheken. Es hat einen geringeren Speicherbedarf und stellt dabei
   einen schlichten, effizienten und einfach zu benutzenden Desktop zur
   Verfu:gung. Xfce ist vollsta:ndig konfigurierbar, verfu:gt u:ber eine
   Programmleiste mit Menu:s, Applets und einen Programmstarter. Zudem sind
   ein Datei-Manager und ein Sound-Manager enthalten und das Programm ist
   u:ber Themes anpassbar. Da es schnell, leicht und effizient ist, eignet
   sich Xfce ideal fu:r a:ltere oder langsamere Rechner mit wenig Speicher.
   Weitere Informationen zu Xfce finden Sie unter http://www.xfce.org.

   Um das Paket Xfce zu installieren, geben Sie folgendes ein:

 # pkg install xfce

   Um stattdessen den Port zu u:bersetzen:

 # cd /usr/ports/x11-wm/xfce4
 # make install clean

   Im Gegensatz zu GNOME oder KDE, besitzt Xfce keinen eigenen Login-Manager.
   Damit Xfce von der Kommandozeile mit startx gestartet werden kann, muss
   zuna:chst ein Eintrag in ~/.xinitrc hinzugefu:gt werden:

 % echo "exec /usr/local/bin/startxfce4 --with-ck-launch" > ~/.xinitrc

   Alternativ dazu kann XDM verwendet werden. Um diese Methode zu
   konfigurieren, erstellen Sie eine ausfu:hrbare ~/.xsession:

 % echo "#!/bin/sh" > ~/.xsession
 % echo "exec /usr/local/bin/startxfce4 --with-ck-launch" >> ~/.xsession
 % chmod +x ~/.xsession

5.8. Compiz Fusion installieren

   Der Einsatz von hu:bschen 3D-Effekten ist eine Mo:glichkeit, die
   Benutzerfreundlichkeit eines Desktop-Rechners zu erho:hen.

   Die Installation des Compiz Fusion Pakets ist einfach, aber bei der
   Konfiguration sind ein paar Schritte notwendig, die nicht in der
   Dokumentation des Ports beschrieben werden.

  5.8.1. Konfiguration des FreeBSD nVidia-Treibers

   Desktop-Effekte erzeugen eine hohe Last auf der Grafikkarte. Fu:r
   nVidia-basierte Grafikkarten sind die proprieta:ren Treiber fu:r eine gute
   Leistung erforderlich. Benutzer anderer Grafikkarten ko:nnen diesen
   Abschnitt u:berspringen und mit der Konfiguration von Xorg fortfahren.

   Lesen Sie die FAQ zu diesem Thema, um herauszufinden, wie der richtige
   nVidia-Treiber ermittelt werden kann.

   Nachdem der richtige Treiber fu:r die Karte ermittelt wurde, kann er wie
   jedes andere Paket installiert werden.

   Um beispielsweise den aktuellsten Treiber zu installieren:

 # pkg install x11/nvidia-driver

   Der Treiber erstellt ein Kernelmodul, welches beim Systemstart geladen
   werden muss. Fu:gen folgende Zeile in /boot/loader.conf ein:

 nvidia_load="YES"

  Anmerkung:

   Um das Kernelmodul direkt in den laufenden Kernel zu laden, kann der
   Befehl kldload nvidia eingeben werden. Allerdings wurde festgestellt, dass
   einige Versionen von Xorg nicht richtig funktionieren, wenn der Treiber
   nicht beim Systemstart geladen wurde. Nach der A:nderung in
   /boot/loader.conf wird daher ein Neustart des Systems empfohlen.

   Wenn das Kernelmodul geladen ist, muss in der Regel nur noch eine einzige
   Zeile in xorg.conf gea:ndert werden, um den proprieta:ren Treiber zu
   aktivieren:

   Suchen Sie folgende Zeile in /etc/X11/xorg.conf:

 Driver      "nv"

   und a:ndern Sie die Zeile zu:

 Driver      "nvidia"

   Wenn Sie nun die grafische Oberfla:che starten, sollten Sie vom nVidia
   Startbildschirm begru:sst werden. Alles sollte wie gewohnt funktionieren.

  5.8.2. Konfiguration von Desktop-Effekten in xorg.conf

   Um Compiz Fusion zu aktivieren, muss /etc/X11/xorg.conf angepasst werden:

   Fu:gen Sie diesen Abschnitt hinzu, um Composite-Effekte zu aktivieren:

 Section "Extensions"
     Option         "Composite" "Enable"
 EndSection

   Suchen Sie den Abschnitt "Screen", der a:hnlich wie hier gezeigt aussehen
   sollte:

 Section "Screen"
     Identifier     "Screen0"
     Device         "Card0"
     Monitor        "Monitor0"
     ...

   und fu:gen Sie die beiden folgenden Zeilen hinzu (z.B. nach "Monitor"):

 DefaultDepth    24
 Option         "AddARGBGLXVisuals" "True"

   Suchen Sie den Abschnitt "Subsection", der sich auf die gewu:nschte
   Bildschirmauflo:sung bezieht. Wenn Sie z.B. 1280x1024 verwenden mo:chten,
   suchen Sie den folgenden Abschnitt. Sollte die gewu:nschte Auflo:sung
   nicht in allen Unterabschnitten vorhanden sein, ko:nnen Sie den
   entsprechenden Eintrag manuell hinzufu:gen:

 SubSection     "Display"
     Viewport    0 0
     Modes      "1280x1024"
 EndSubSection

   Fu:r Composite-Effekte wird eine Farbtiefe von 24 Bit beno:tigt. A:ndern
   Sie dazu den obigen Abschnitt wie folgt:

 SubSection     "Display"
     Viewport    0 0
     Depth       24
     Modes      "1280x1024"
 EndSubSection

   Zuletzt muss noch sichergestellt werden, dass die Module "glx" und
   "extmod" im Abschnitt "Module" geladen werden:

 Section "Module"
     Load           "extmod"
     Load           "glx"
     ...

   Die vorangegangenen Einstellungen ko:nnen automatisch mit
   x11/nvidia-xconfig erledigt werden, indem Sie folgende Kommandos als root
   ausfu:hren:

 # nvidia-xconfig --add-argb-glx-visuals
 # nvidia-xconfig --composite
 # nvidia-xconfig --depth=24

  5.8.3. Installation und Konfiguration von Compiz Fusion

   Die Installation von Compiz Fusion ist so einfach wie die Installation
   jedes anderen Pakets:

 # pkg install x11-wm/compiz-fusion

   Wenn die Installation abgeschlossen ist, starten Sie (als normaler
   Benutzer) den grafischen Desktop mit folgendem Befehl:

 % compiz --replace --sm-disable --ignore-desktop-hints ccp &
 % emerald --replace &

   Der Bildschirm wird fu:r einige Sekunden flackern, da der Window Manager
   (z.B. Metacity, wenn Sie GNOME benutzen) von Compiz Fusion ersetzt wird.
   Emerald ku:mmert sich um die Fensterdekoration (z.B. die Schatzfla:chenn
   schliessen, minimieren und maximieren, Titelleisten, usw.).

   Sie ko:nnen dieses einfache Skript anpassen und es dann beim Start
   automatisch ausfu:hren lassen (z.B. durch Hinzufu:gen von "Sessions" beim
   GNOME-Desktop):

 #! /bin/sh
 compiz --replace --sm-disable --ignore-desktop-hints ccp &
 emerald --replace &

   Speichern Sie die Datei in Ihrem Heimatverzeichnis, beispielsweise als
   start-compiz und machen Sie die Datei ausfu:hrbar:

 % chmod +x ~/start-compiz

   Benutzen Sie dann die grafische Oberfla:che, um das Skript zu
   Autostart-Programme hinzuzufu:gen (beim GNOME-Desktop unter
   Systemwerkzeuge, Einstellungen, Sessions).

   Um die gewu:nschten Effekte und Einstellungen zu konfigurieren, starten
   Sie (wieder als normaler Benutzer) den Compiz Config Einstellungs-Manager:

 % ccsm

  Anmerkung:

   In GNOME finden Sie diese Einstellungen wieder im Menu: unter
   Systemwerkzeuge, Einstellungen.

   Wenn Sie "gconf support" wa:hrend der Installation ausgewa:hlt haben,
   ko:nnen Sie diese Einstellungen auch im gconf-editor unter apps/compiz
   finden.

5.9. Fehlersuche

   Wenn die Maus nicht funktioniert, mu:ssen Sie diese zuerst konfigurieren.
   In neueren Versionen von Xorg werden die InputDevice-Abschnitte in
   xorg.conf ignoriert, um stattdessen die automatisch erkannten Gera:te zu
   verwenden. Um das alte Verhalten wiederherzustellen, fu:gen Sie folgende
   Zeile zum Abschnitt ServerLayout oder ServerFlags dieser Datei hinzu:

 Option "AutoAddDevices" "false"

  Anmerkung:

   Wie zuvor erwa:hnt, wird standardma:ssig der hald-Dienst automatisch die
   Tastatur erkennen. Es kann jedoch passieren, dass das Tastaturlayout oder
   das Modell nicht korrekt erkannt wird. Grafische Oberfla:chen wie GNOME,
   KDE oder Xfce stellen Werkzeuge fu:r die Konfiguration der Tastatur
   bereit. Es ist allerdings auch mo:glich, die Tastatureigenschaften direkt
   zu setzen, entweder mit Hilfe von setxkbmap(1) oder mit einer
   Konfigurationsregel von hald.

   Wenn Sie zum Beispiel eine PC 102-Tasten Tastatur mit franzo:sischem
   Layout verwenden mo:chten, mu:ssen sie eine Tastaturkonfigurationsdatei
   x11-input.fdi fu:r hald im Verzeichnis /usr/local/etc/hal/fdi/policy
   anlegen. Diese Datei sollte die folgenden Zeilen enthalten:

 <?xml version="1.0" encoding="iso-8859-1"?>
 <deviceinfo version="0.2">
   <device>
     <match key="info.capabilities" contains="input.keyboard">
       <merge key="input.x11_options.XkbModel" type="string">pc102</merge>
       <merge key="input.x11_options.XkbLayout" type="string">fr</merge>
     </match>
   </device>
 </deviceinfo>

   Wenn diese Datei bereits existiert, kopieren Sie nur die Zeilen in die
   Datei, welche die Tastaturkonfiguration betreffen.

   Sie mu:ssen Ihren Computer neu starten, um hald zu zwingen, diese Datei
   einzulesen.

   Es ist auch mo:glich, die gleiche Konfiguration von einem X-Terminal oder
   einem Skript u:ber den folgenden Befehl heraus zu ta:tigen:

 % setxkbmap -model pc102 -layout fr

   /usr/local/share/X11/xkb/rules/base.lst entha:lt die zur Verfu:gung
   stehenden Tastatur- und Layoutoptionen.

   Die Konfigurationsdatei xorg.conf.new kann nun an bestimmte Bedu:rfnisse
   angepasst werden. O:ffnen Sie die Datei in einem Editor, wie emacs(1) oder
   ee(1). Falls der Monitor ein a:lteres oder ungewo:hnliches Modell ist und
   keine automatische Erkennung unterstu:tzt, ko:nnen die
   Synchronisationsfrequenzen im Abschnitt "Monitor" der xorg.conf.new
   eingetragen werden.

 Section "Monitor"
       Identifier   "Monitor0"
       VendorName   "Monitor Vendor"
       ModelName    "Monitor Model"
       HorizSync    30-107
       VertRefresh  48-120
 EndSection

   Die meisten Monitore unterstu:tzen die automatische Erkennung der
   Synchronisationsfrequenzen, so dass eine manuelle Eingabe der Werte nicht
   erforderlich ist. Fu:r die wenigen Monitore, die keine automatische
   Erkennung unterstu:tzen, sollten nur die vom Hersteller zur Verfu:gung
   gestellten Werte eingegeben werden, um einen mo:glichen Schaden zu
   vermeiden.

   X unterstu:tzt die Energiesparfunktionen (DPMS, Energy Star) fu:r
   Monitore. Mit xset(1) ko:nnen die Zeitlimits fu:r die DPMS-Modi standby,
   suspend, off vorgeben, oder zwingend aktiviert werden. Die DPMS-Funktionen
   ko:nnen mit der folgenden Zeile im Abschnitt "Monitor" aktiviert werden:

 Option         "DPMS"

   Die gewu:nschte Auflo:sung und Farbtiefe stellen sie im Abschnitt "Screen"
   ein:

 Section "Screen"
       Identifier "Screen0"
       Device     "Card0"
       Monitor    "Monitor0"
       DefaultDepth 24
       SubSection "Display"
               Viewport  0 0
               Depth     24
               Modes     "1024x768"
       EndSubSection
 EndSection

   Mit DefaultDepth wird die standardma:ssige Farbtiefe angegeben. Mit der
   Option -depth von Xorg(1) la:sst sich die vorgegebene Farbtiefe
   u:berschreiben. Modes gibt die Auflo:sung fu:r die angegebene Farbtiefe
   an. Die Farbtiefe im Beispiel betra:gt 24 Bits pro Pixel, die zugeho:rige
   Auflo:sung ist 1024x768 Pixel. Beachten Sie, dass in der Voreinstellung
   nur Standard-VESA-Modi der Grafikkarte angegeben werden ko:nnen.

   Sichern Sie die Konfigurationsdatei. Testen Sie anschliessend die
   Konfiguration, wie oben beschrieben.

  Anmerkung:

   Bei der Fehlersuche stehen Ihnen die Protokolldateien von Xorg zur
   Verfu:gung. Die Protokolle enthalten Informationen u:ber alle Gera:te, die
   mit dem Xorg-Server verbunden ist. Die Namen der Xorg-Protkolldateien
   haben das Format /var/log/Xorg.0.log. Der exakte Name der Datei variiert
   dabei von Xorg.0.log bis Xorg.8.log, und so weiter.

   Wenn alles funktioniert, installieren Sie die Datei an einen Ort, an dem
   Xorg(1) sie finden kann. Typischerweise ist dies /etc/X11/xorg.conf oder
   /usr/local/etc/X11/xorg.conf.

 # cp xorg.conf.new /etc/X11/xorg.conf

   Damit ist die Konfiguration von Xorg abgeschlossesn. Xorg kann nun mit dem
   Programm startx(1) gestartet werden. Alternativ kann der Xorg-Server auch
   mithilfe von xdm(1) gestartet werden.

  5.9.1. Konfiguration des Intel(R) i810 Graphics Chipsets

   Der Intel(R) i810-Chipset beno:tigt den Treiber agpgart, die
   AGP-Schnittstelle fu:r Xorg. Die Manualpage fu:r den Treiber agp(4)
   entha:lt weitere Informationen.

   Ab jetzt kann die Hardware wie jede andere Grafikkarte auch konfiguriert
   werden. Beachten Sie, dass der Treiber agp(4) nicht nachtra:glich in einen
   laufenden Kernel geladen werden kann. Er muss entweder fest im Kernel
   eingebunden sein, oder beim Systemstart u:ber /boot/loader.conf geladen
   werden.

  5.9.2. Einen Widescreen-Monitor einsetzen

   Dieser Abschnitt geht u:ber die normalen Konfigurationsarbeiten hinaus und
   setzt ein wenig Vorwissen voraus. Selbst wenn die Standardwerkzeuge zur
   X-Konfiguration bei diesen Gera:ten nicht zum Erfolg fu:hren, gibt es in
   den Protokolldateien genug Informationen, mit denen Sie letztlich doch
   einen funktionierenden X-Server konfigurieren ko:nnen. Alles, was Sie dazu
   beno:tigen, ist ein Texteditor.

   Aktuelle Widescreen-Formate (wie WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, und
   andere mehr) unterstu:tzen Seitenverha:ltnisse wie 16:10 oder 10:9, die
   unter X Probleme verursachen ko:nnen. Bei einem Seitenverha:ltnis von
   16:10 sind beispielsweise folgende Auflo:sungen mo:glich:

     * 2560x1600

     * 1920x1200

     * 1680x1050

     * 1440x900

     * 1280x800

   Irgendwann wird die Konfiguration vereinfacht werden, dass nur noch die
   Auflo:sung als Mode in Section "Screen" eingtragen wird, so wie hier:

 Section "Screen"
 Identifier  "Screen 0"
 Device      "Card 0"
 Monitor     "Monitor0"
 Default Depth 24
 SubSection  "Display"
         ViewPort  0 0
         Depth     24
         Modes     "1680x1050"
 EndSubSection
 EndSection

   Xorg ist intelligent genug, um die Informationen zu den Auflo:sungen u:ber
   I2C/DDC zu beziehen, und weiss daher, welche Auflo:sungen und Frequenzen
   der Widescreen-Monitor unterstu:tzt.

   Wenn diese ModeLines in den Treiberdateien nicht vorhanden sind, kann es
   sein, dass Sie Xorg beim Finden der korrekten Werte unterstu:tzen mu:ssen.
   Dazu extrahieren Sie die beno:tigten Informationen aus /var/log/Xorg.0.log
   und erzeugen daraus eine funktionierende ModeLine. Suchen Sie nach Zeilen
   a:hnlich den folgenden:

 (II) MGA(0): Supported additional Video Mode:
 (II) MGA(0): clock: 146.2 MHz   Image Size:  433 x 271 mm
 (II) MGA(0): h_active: 1680  h_sync: 1784  h_sync_end 1960 h_blank_end 2240 h_border: 0
 (II) MGA(0): v_active: 1050  v_sync: 1053  v_sync_end 1059 v_blanking: 1089 v_border: 0
 (II) MGA(0): Ranges: V min: 48  V max: 85 Hz, H min: 30  H max: 94 kHz, PixClock max 170 MHz

   Diese Informationen werden auch als EDID-Informationen bezeichnet. Um
   daraus eine funktionierende ModeLine zu erzeugen, mu:ssen lediglich die
   Zahlen in die korrekte Reihenfolge gebracht werden:

 ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings>

   Die korrekte ModeLine in Section "Monitor" wu:rde fu:r dieses Beispiel
   folgendermassen aussehen:

 Section "Monitor"
 Identifier      "Monitor1"
 VendorName      "Bigname"
 ModelName       "BestModel"
 ModeLine        "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089
 Option          "DPMS"
 EndSection

   Nachdem diese A:derungen durchgefu:hrt sind, sollte X auch auf Ihrem neuen
   Widescreen-Monitor starten.

  5.9.3. Fehersuche in Compiz Fusion

   5.9.3.1. Ich habe Compiz Fusion installiert und anschliessend die hier
   erwa:hnten Kommandos eingegeben. Nun fehlen den Fenstern die Titelleisten
   und Schaltfla:chen. Was kann ich tun?

   5.9.3.2. Wenn ich Compiz Fusion starte, bringt dass den X-Server zum
   Absturz. Was kann ich tun?

5.9.3.1. Ich habe Compiz Fusion installiert und anschliessend die hier erwa:hnten        
         Kommandos eingegeben. Nun fehlen den Fenstern die Titelleisten und              
         Schaltfla:chen. Was kann ich tun?                                               
         Wahrscheinlich fehlt eine Einstellung in /etc/X11/xorg.conf. U:berpru:fen Sie   
         diese Datei gru:ndlich, und u:berpru:fen Sie insbesondere die Richtlinien       
         DefaultDepth und AddARGBGLXVisuals.                                             
5.9.3.2. Wenn ich Compiz Fusion starte, bringt dass den X-Server zum Absturz. Was kann   
         ich tun?                                                                        
         Wenn Sie /var/log/Xorg.0.log durchsuchen, finden Sie wahrscheinlich             
         Fehlermeldungen, die wa:hrend des Starts von X ausgegeben werden. Die           
         ha:ufigste Meldung ist:                                                         
                                                                                         
         (EE) NVIDIA(0):     Failed to initialize the GLX module; please check in your X 
         (EE) NVIDIA(0):     log file that the GLX module has been loaded in your X      
         (EE) NVIDIA(0):     server, and that the module is the NVIDIA GLX module.  If   
         (EE) NVIDIA(0):     you continue to encounter problems, Please try              
         (EE) NVIDIA(0):     reinstalling the NVIDIA driver.                             
                                                                                         
         Dies ist fu:r gewo:hnlich der Fall, wenn Sie Xorg aktualisieren. Sie mu:ssen    
         das Paket x11/nvidia-driver neu installieren, damit GLX neu gebaut wird.        

                        Teil II. Oft benutzte Funktionen

   Nach den Grundlagen bescha:ftigt sich das Handbuch mit oft benutzten
   Funktionen von FreeBSD. Die Kapitel behandeln die nachstehenden Themen:

     * Beliebte und nu:tzliche Werkzeuge wie Browser, Bu:roanwendungen und
       Programme zum Anzeigen von Dokumenten.

     * Multimedia-Werkzeuge fu:r FreeBSD.

     * Erstellung eines angepassten FreeBSD-Kernels, um zusa:tzliche
       Funktionen zu aktivieren.

     * Ausfu:hrliche Beschreibung des Drucksystems, sowohl fu:r direkt
       angeschlossene Drucker als auch fu:r Netzwerkdrucker.

     * Ausfu:hrung von Linux-Anwendungen auf einem FreeBSD-System.

   Damit Sie einige Kapitel verstehen, sollten Sie vorher andere Kapitel
   gelesen haben. Die U:bersicht zu jedem Kapitel za:hlt die Voraussetzungen
   fu:r das erolgreiche Durcharbeiten des Kapitels auf.

   Inhaltsverzeichnis

   6. Desktop-Anwendungen

                6.1. U:bersicht

                6.2. Browser

                6.3. Bu:roanwendungen

                6.4. Anzeigen von Dokumenten

                6.5. Finanzsoftware

   7. Multimedia

                7.1. U:bersicht

                7.2. Soundkarten einrichten

                7.3. MP3-Audio

                7.4. Videos wiedergeben

                7.5. TV-Karten

                7.6. MythTV

                7.7. Scanner

   8. Konfiguration des FreeBSD-Kernels

                8.1. U:bersicht

                8.2. Wieso einen eigenen Kernel bauen?

                8.3. Informationen u:ber die vorhandene Hardware beschaffen

                8.4. Die Kernelkonfigurationsdatei

                8.5. Einen angepassten Kernel bauen und installieren

                8.6. Wenn etwas schiefgeht

   9. Drucken

                9.1. Schnellstart

                9.2. Druckerverbindungen

                9.3. Gebra:uchliche Seitenbeschreibungssprachen

                9.4. Direktes Drucken

                9.5. LPD (Line Printer Daemon)

                9.6. Andere Drucksysteme

   10. Linux(R)-Bina:rkompatibilita:t

                10.1. U:bersicht

                10.2. Konfiguration der Linux(R)-Bina:rkompatibilita:t

                10.3. Weiterfu:hrende Themen

Kapitel 6. Desktop-Anwendungen

   Inhaltsverzeichnis

   6.1. U:bersicht

   6.2. Browser

   6.3. Bu:roanwendungen

   6.4. Anzeigen von Dokumenten

   6.5. Finanzsoftware

6.1. U:bersicht

   Obwohl FreeBSD wegen seiner Leistung und Stabilita:t vor allem auf
   Serversystemen sehr beliebt ist, so ist es auch fu:r den ta:glichen
   Einsatz als Desktop geeignet. Mit u:ber 24,000 Anwendungen, die als Pakete
   oder Ports vorliegen, ist es leicht einen individuellen Desktop zu bauen,
   auf dem eine Vielzahl von Desktop-Anwendungen laufen. Dieses Kapitel
   zeigt, wie Sie die zahlreichen Desktop-Anwendungen, wie Web-Browser,
   Office-Pakete, Dokumentbetrachter und Finanzsoftware, installieren
   ko:nnen.

  Anmerkung:

   Benutzer die es vorziehen eine vorkonfigurierte Desktop-Version von
   FreeBSD zu installieren, anstatt das System von Grund auf zu
   konfigurieren, sollten sich die trueos.org Website ansehen.

   Bevor Sie dieses Kapitel lesen, sollten Sie wissen:

     * wie zusa:tzliche Anwendungen als Paket oder aus der Ports-Sammlung
       installiert werden. Dies wird in Kapitel 4, Installieren von
       Anwendungen: Pakete und Ports beschrieben.

     * wie X und ein Window-Manager installiert wird. Dies wird in Kapitel 5,
       Das X-Window-System beschrieben.

   Informationen zur Konfiguration von Multimedia-Anwendungen finden Sie in
   Kapitel 7, Multimedia.

6.2. Browser

   FreeBSD besitzt keinen vorinstallierten Browser, stattdessen entha:lt das
   www-Verzeichnis der Ports-Sammlung viele Browser, die als Paket oder aus
   der Ports-Sammlung installiert werden ko:nnen.

   Die Desktop-Umgebungen KDE und GNOME verfu:gen u:ber eigene HTML-Browser.
   Weitere Informationen zur Einrichtung dieser Umgebungen finden Sie in
   Abschnitt 5.7, "Grafische Oberfla:chen".

   Besonders schlanke Browser sind www/dillo2, www/links und www/w3m.

   Dieser Abschnitt demonstriert, wie die folgenden ga:ngigen Webbrowser
   installiert werden, sowie den Ressourcenbedarf, den Installationsaufwand
   beim U:bersetzen des Ports, oder ob die Anwendung wichtige Abha:ngigkeiten
   beno:tigt.

   Anwendung Ressourcenbedarf Installationsaufwand        Anmerkungen         
                                 aus den Ports     
                                                   FreeBSD, Linux(R) und      
   Firefox   mittel           hoch                 lokalisierte Versionen     
                                                   sind verfu:gbar            
                                                   Es gibt eine FreeBSD- und  
                                                   eine Linux-Version. Die    
                                                   Linux-Version ha:ngt von   
   Opera     niedrig          niedrig              der Linux-Kompatibilita:t  
                                                   (Linux Binary              
                                                   Compatibility) und         
                                                   linux-openmotif ab.        
   Konqueror mittel           hoch                 Beno:tigt KDE-Biliotheken  
   Chromium  mittel           hoch                 Beno:tigt Gtk+             

  6.2.1. Firefox

   Firefox ist ein Open-Source Browser, der vollsta:ndig auf FreeBSD portiert
   wurde. Er bietet eine dem HTML-Standard konforme Anzeige, Browserfenster
   als Tabs, Blockierung von Pop-up-Fenstern, Erweiterungen, verbesserte
   Sicherheit und mehr. Firefox basiert auf der Mozilla Codebasis.

   Installieren Sie das Paket der aktuellen Release-Version von Firefox:

 # pkg install firefox

   Um stattdessen die Extended Support Release (ESR) Version zu installieren,
   benutzen Sie:

 # pkg install firefox-esr

   Lokalisierte Versionen finden Sie in www/firefox-i18n und
   www/firefox-esr-i18n.

   Alternativ kann auch die Ports-Sammlung verwendet werden, um die
   gewu:nschte Version von Firefox aus dem Quellcode zu installieren. Dieses
   Beispiel baut www/firefox, wobei sich firefox durch die ESR oder die
   lokalisierte Version ersetzen la:sst.

 # cd /usr/ports/www/firefox
 # make install clean

  6.2.2. Opera

   Opera ist ein vollwertiger und standardkonformer Browser, der zudem
   relativ klein und schnell ist. Es entha:lt einen eingebauten E-Mail- und
   Newsreader, einen IRC-Client, einen RSS/Atom-Feeds-Reader, sowie weitere
   Programme. Opera ist als native Version fu:r FreeBSD, oder als
   Linux(R)-Version verfu:gbar.

   Der folgende Befehl installiert die FreeBSD-Version von Opera. Ersetzen
   Sie opera durch linux-opera, wenn Sie stattdessen die Linux(R)-Version
   installieren wollen.

 # pkg install opera

   Alternativ ko:nnen Sie beide Versionen u:ber die Ports-Sammlung
   installieren. Dieses Beispiel u:bersetzt die native Version:

 # cd /usr/ports/www/opera
 # make install clean

   Wenn Sie die Linux(R)-Version des Browsers verwenden wollen, ersetzen Sie
   opera durch linux-opera.

   Um Adobe(R) Flash(R)-Plugin Unterstu:tzung zu installieren, u:bersetzten
   Sie zuna:chst den Port www/linux-flashplayer. Ein Paket ist aus
   lizenzrechtlichen Gru:nden nicht verfu:gbar. Installieren Sie
   anschliessend www/opera-linuxplugins. Dieses Beispiel u:bersetzt beides
   aus der Ports-Sammlung:

 # cd /usr/ports/www/linux-flashplayer
 # make install clean
 # cd /usr/ports/www/opera-linuxplugins
 # make install clean

   Um die Existenz des Plugins zu u:berpru:fen, starten Sie den Browser und
   geben Sie in der Adresszeile about:plugins ein. Diese Eingabe muss mit
   Enter besta:tigt werden. Dadurch wird eine Seite geladen, die alle
   installierten Plugins auflistet.

   Um das Java(TM)-Plugin hinzuzufu:gen, folgen Sie den
   Installationsanweisungen von java/icedtea-web.

  6.2.3. Konqueror

   Konqueror ist mehr als nur ein Webbrowser, da es ebenfalls Dateimanager
   und Multimedia-Betrachter ist. Es ist als Paket oder Port
   x11/kde4-baseapps verfu:gbar.

   Konqueror unterstu:tzt sowohl WebKit als auch sein eigenes KHTML. WebKit
   wird von vielen modernen Browsern verwendet, einschliesslich Chromium. Um
   WebKit mit Konqueror unter FreeBSD zu verwenden, installieren Sie das
   Paket oder den Port www/kwebkitpart. Dieses Beispiel installiert das
   Paket:

 # pkg install kwebkitpart

   Alternativ ko:nnen Sie den Port installieren:

 # cd /usr/ports/www/kwebkitpart
 # make install clean

   Um WebKit in Konqueror zu aktivieren, klicken Sie auf "Settings",
   "Configure Konqueror". Klicken Sie auf der Seite "General" das
   Dropdown-Menu: neben "Default web browser engine" und a:ndern Sie "KHTML"
   auf "WebKit".

   Konqueror kann auch Flash(R)-Seiten darstellen. Wie Sie die
   Flash(R)-Unterstu:tzung aktivieren, ko:nnen Sie unter
   http://freebsd.kde.org/howtos/konqueror-flash.php nachlesen.

  6.2.4. Chromium

   Chromium ist ein quelloffenes Browserprojekt mit dem Ziel ein sicheres,
   schnelleres und stabileres Surferlebnis im Web zu ermo:glichen. Chromium
   ermo:glicht surfen mit Tabs, Blockieren von Pop-Ups, Erweiterungen und
   vieles mehr. Chromium ist das Open Source Projekt, welches auf dem Google
   Chrome Webbrowser basiert.

   Chromium kann als Paket durch die Eingabe des folgenden Befehls
   installiert werden:

 # pkg install chromium

   Als Alternative kann Chromium aus dem Quellcode durch die Ports Collection
   u:bersetzt werden:

 # cd /usr/ports/www/chromium
 # make install clean

  Anmerkung:

   Die ausfu:hrbare Datei fu:r Chromium ist /usr/local/bin/chrome und nicht
   /usr/local/bin/chromium.

6.3. Bu:roanwendungen

   Neue Benutzer suchen oft ein komplettes Office-Paket oder eine leicht zu
   bedienende Textverarbeitung. Einige graphische Oberfla:chen wie KDE
   enthalten zwar ein Office-Paket, diese werden unter FreeBSD jedoch nicht
   standardma:ssig installiert. Unabha:ngig von der installierten graphischen
   Oberfla:che ko:nnen diverse Office-Pakete jederzeit installiert werden.

   Dieser Abschnitt demonstriert, wie die folgenden ga:ngigen
   Bu:roanwendungen installiert werden, sowie den Ressourcenbedarf, den
   Installationsaufwand beim U:bersetzen des Ports, oder ob die Anwendung
   wichtige Abha:ngigkeiten beno:tigt.

    Anwendung  Ressourcenbedarf Installationsaufwand aus den     wichtige     
                                           Ports             Abha:ngigkeiten  
   Calligra    niedrig          hoch                         KDE              
   AbiWord     niedrig          niedrig                      Gtk+ oder GNOME  
   The Gimp    niedrig          hoch                         Gtk+             
   Apache      hoch             enorm                        JDK(TM) und      
   OpenOffice                                                Mozilla          
   LibreOffice etwas hoch       enorm                        Gtk+, KDE/ GNOME 
                                                             oder JDK(TM)     

  6.3.1. Calligra

   Die KDE-Gemeinschaft stellt ein Office-Paket bereit, das auch separat von
   KDE eingesetzt werden kann. Calligra umfasst Standardkomponenten, die auch
   in anderen Office-Paketen enthalten sind. Words ist die Textverarbeitung,
   Sheets die Tabellenkalkulation, mit Stage werden Pra:sentationen erstellt
   und Karbon ist ein Zeichenprogramm.

   In FreeBSD kann editors/calligra als Paket oder Port installiert werden.
   Um das Paket zu installieren, geben Sie folgendes ein:

 # pkg install calligra

   Wenn das Paket nicht verfu:gbar ist, benutzen Sie stattdessen die
   Ports-Sammlung:

 # cd /usr/ports/editors/calligra
 # make install clean

  6.3.2. AbiWord

   AbiWord ist eine freie Textverarbeitung, die dem Erscheinungsbild von
   Microsoft(R) Word a:hnlich ist. Das Programm ist schnell, besitzt viele
   Funktionen und ist benutzerfreundlich.

   AbiWord kann viele Dateiformate importieren oder exportieren, unter
   anderem auch propieta:re wie Microsoft(R) .rtf.

   Das AbiWord-Paket installieren Sie wie folgt:

 # pkg install abiword

   Sollte das Paket nicht zur Verfu:gung stehen, kann es u:ber die
   Ports-Sammlung installiert werden:

 # cd /usr/ports/editors/abiword
 # make install clean

  6.3.3. The GIMP

   The GIMP ist ein ausgereiftes Bildverarbeitungsprogramm mit dem Bilder
   erstellt oder retuschiert werden ko:nnen. Es kann sowohl als einfaches
   Zeichenprogramm oder zum retuschieren von Fotografien benutzt werden. Das
   Programm besitzt eine eingebaute Skriptsprache und es existieren sehr
   viele Plugins. The GIMP kann zahlreiche Formate lesen und speichern und
   stellt Schnittstellen zu Scannern und Tablets zur Verfu:gung.

   Um das Paket zu installieren, geben Sie ein:

 # pkg install gimp

   Benutzen Sie alternativ die Ports-Sammlung:

 # cd /usr/ports/graphics/gimp
 # make install clean

   Die Kategorie graphics (freebsd.org/ports/graphics.html) der
   Ports-Sammlung entha:lt fu:r The Gimp verschiedene Plugins, Hilfedateien
   und Handbu:cher.

  6.3.4. Apache OpenOffice

   Apache OpenOffice ist eine Open Source Bu:roanwendung, die unter Leitung
   der Apache Software Foundation weiterentwickelt wird. Es entha:lt die
   typischen Anwendungen eines Office-Pakets: Textverarbeitung,
   Tabellenkalkulation, Pra:sentation und ein Zeichenprogramm. Die Bedienung
   gleicht anderen Office-Paketen und das Programm kann zahlreiche
   Dateiformate importieren und exportieren. Es gibt lokalisierte Versionen
   mit angepassten Menu:s, Rechtschreibkontrollen und Wo:rterbu:chern.

   Die Textverarbeitung von Apache OpenOffice speichert Dateien im
   XML-Format. Dadurch wird die Verwendbarkeit der Dateien auf anderen
   Systemen erho:ht und die Handhabung der Daten vereinfacht. Die
   Tabellenkalkulation besitzt eine Makrosprache und eine Schnittstelle zu
   Datenbanken. Apache OpenOffice la:uft stabil auf Windows(R), Solaris(TM),
   Linux(R), FreeBSD und Mac OS(R) X. Weitere Informationen u:ber Apache
   OpenOffice finden Sie auf openoffice.org. Spezifische Informationen fu:r
   FreeBSD finden Sie auf porting.openoffice.org/freebsd/.

   Apache OpenOffice installieren Sie wie folgt:

 # pkg install apache-openoffice

   Nachdem das Paket installiert ist, geben Sie folgenden ein, um Apache
   OpenOffice zu starten:

 % openoffice-X.Y.Z

   wobei X.Y.Z die Versionsnummer von Apache OpenOffice darstellt. Nach dem
   ersten Start werden einige Fragen gestellt. Ausserdem wird im
   Heimatverzeichnis des Benutzers ein Verzeichnis .openoffice.org angelegt.

   Falls das gewu:nschte Apache OpenOffice-Paket nicht verfu:gbar ist, kann
   immer noch der Port u:bersetzt werden. Es erfordert jedoch eine Menge
   Plattenplatz und ziemlich viel Zeit um die Quellen zu u:bersetzten.

 # cd /usr/ports/editors/openoffice-4
 # make install clean

  Anmerkung:

   Um eine lokalisierte Version zu bauen, ersetzen Sie den letzten Befehl
   durch:

 # make LOCALIZED_LANG=Ihre_Sprache install clean

   Ersetzen Sie Ihre_Sprache durch den korrekten ISO-Code. Eine Liste der
   unterstu:tzten Codes steht in files/Makefile.localized, die sich im
   Portsverzeichnis befindet.

  6.3.5. LibreOffice

   LibreOffice ist ein frei verfu:gbares Office-Paket, welches von
   documentfoundation.org entwickelt wird. Es mit anderen grossen
   Office-Paketen kompatibel und fu:r eine Vielzahl von Plattformen
   erha:ltlich. Es ist ein Fork von Apache OpenOffice unter neuem Namen, das
   alle Anwendungen in einem kompletten Office-Paket entha:lt:
   Textverarbeitung, Tabellenkalkulation, Pra:sentationsmanager,
   Zeichenprogramm, Datenbankmanagementprogramm und ein Werkzeug zum
   Erstellen und Bearbeiten von mathematischen Formeln. Das Programm steht in
   verschiedenen Sprachen zur Verfu:gung, und die Internationalisierung wurde
   auf die Oberfla:che, Rechtschreibkorrektur und die Wo:rterbu:cher
   ausgeweitet.

   Das Textverarbeitungsprogramm von LibreOffice benutzt ein natives
   XML-Dateiformat fu:r erho:hte Portabilita:t und Flexibilita:t. Die
   Tabellenkalkulation entha:lt eine Makrosprache und kann mit externen
   Datenbanken Verbindungen herstellen. LibreOffice ist stabil und la:uft
   nativ auf Windows(R), Linux(R), FreeBSD und Mac OS(R) X. Weitere
   Informationen zu LibreOffice finden Sie unter libreoffice.org.

   Um die englische Version von LibreOffice als Paket zu installieren, geben
   Sie folgenden Befehl ein:

 # pkg install libreoffice

   Die Kategorie editors ( freebsd.org/ports/editors.html) der Ports-Sammlung
   entha:lt viele Lokalisierungen fu:r LibreOffice. Wenn Sie ein
   lokalisiertes Paket installieren, ersetzen Sie libreoffice durch den Namen
   des lokalisierten Pakets.

   Wenn das Paket installiert ist, geben Sie folgendes Kommando ein, um
   LibreOffice zu starten:

 % libreoffice

   Wa:hrend des ersten Starts werden einige Fragen gestellt. Ausserdem wird
   im Heimatverzeichinis des Benutzers ein Verzeichnis .libreoffice angelegt.

   Falls das gewu:nschte LibreOffice-Paket nicht verfu:gbar ist, kann immer
   noch der Port u:bersetzt werden. Es erfordert jedoch eine Menge
   Plattenplatz und ziemlich viel Zeit um die Quellen zu u:bersetzten. Dieses
   Beispiel u:bersetzt die englische Version:

 # cd /usr/ports/editors/libreoffice
 # make install clean

  Anmerkung:

   Um eine lokalisierte Version zu bauen, wechseln Sie mit cd in das
   Portverzeichnis der gewu:nschten Sprache. Unterstu:tzte Sprachen finden
   Sie in der Kategorie editors ( freebsd.org/ports/editors.html) der
   Ports-Sammlung.

6.4. Anzeigen von Dokumenten

   Einige neuere Dokumentformate, die sich aktuell grosser Beliebtheit
   erfreuen, ko:nnen Sie sich mit den im Basissystem enthaltenen Programmen
   mo:glicherweise nicht ansehen. Dieser Abschnitt zeigt, wie Sie die
   folgenden Dokumentbetrachter installieren ko:nnen:

   Die nachstehenden Anwendungen werden behandelt:

   Anwendung Ressourcenbedarf  Installationsaufwand aus den      wichtige     
                                           Ports              Abha:ngigkeiten 
   Xpdf      niedrig          niedrig                         FreeType        
   gv        niedrig          niedrig                         Xaw3d           
   Geeqie    niedrig          niedrig                         Gtk+ oder GNOME 
   ePDFView  niedrig          niedrig                         Gtk+            
   Okular    niedrig          hoch                            KDE             

  6.4.1. Xpdf

   Fu:r Benutzer, die einen schnellen PDF-Betrachter bevorzugen, bietet Xpdf
   eine schlanke und effiziente Alternative, die wenig Ressourcen beno:tigt.
   Da das Programm die Standard X-Zeichensa:tze benutzt, ist es nicht auf
   andere Toolkits angewiesen.

   Um das Xpdf-Paket zu installieren, geben Sie folgendes ein:

 # pkg install xpdf

   Wenn das Paket nicht verfu:gbar ist, benutzen Sie die Ports-Sammlung:

 # cd /usr/ports/graphics/xpdf
 # make install clean

   Starten Sie nach der Installation xpdf und aktivieren Sie das Menu: mit
   der rechten Maustaste.

  6.4.2. gv

   gv kann PostScript(R)- und PDF-Dokumente anzeigen. Es stammt von ghostview
   ab, hat aber wegen der Xaw3d-Bibliothek eine scho:nere
   Benutzeroberfla:che. gv besitzt viele konfigurierbare Funktionen, wie z.
   B. Ausrichtung, Papiergro:sse, Skalierung und Kantengla:ttung
   (Anti-Aliasing). Fast jede Operation kann sowohl mit der Tastatur als auch
   mit der Maus durchgefu:hrt werden.

   Installieren Sie das gv-Paket wie folgt:

 # pkg install gv

   Benutzen Sie die Ports-Sammlung, wenn das Paket nicht zur Verfu:gung
   steht:

 # cd /usr/ports/print/gv
 # make install clean

  6.4.3. Geeqie

   Geeqie ist ein Fork des nicht mehr betreuten GQview Projekts, mit dem Ziel
   die Entwicklung weiter voranzutreiben und bestehende Fehlerkorrekturen zu
   integrieren. Mit Geeqie lassen sich Bilder verwalten. Es kann unter
   anderem Bilder anzeigen, einen externen Editor starten und eine Vorschau
   (thumbnail) erzeugen. Zudem beherrscht Geeqie einen Diashow-Modus und
   einige grundlegende Dateioperationen, was die Verwaltung von Bildern und
   das auffinden von doppelten Dateien erleichtert. Geeqie unterstu:tzt
   Vollbild-Ansicht und Internationalisierung.

   Um das Geeqie-Paket zu installieren, geben Sie folgendes ein:

 # pkg install geeqie

   Wenn das Paket nicht verfu:gbar ist, benutzen Sie die Ports-Sammlung:

 # cd /usr/ports/graphics/geeqie
 # make install clean

  6.4.4. ePDFView

   ePDFView ist ein leichtgewichtiger PDF-Betrachter, der nur die Gtk+- und
   Poppler-Bibliotheken beno:tigt. Es befindet sich derzeit noch in
   Entwicklung, kann aber bereits die meisten PDF-Dateien (auch
   verschlu:sselte) o:ffnen, speichern und u:ber CUPS drucken.

   Um das Paket ePDFView zu installieren, geben Sie folgendes ein:

 # pkg install epdfview

   Benutzen Sie die Ports-Sammlung, falls das Paket nicht verfu:gbar ist:

 # cd /usr/ports/graphics/epdfview
 # make install clean

  6.4.5. Okular

   Okular ist ein universeller Dokumentbetrachter der auf KPDF fu:r KDE
   basiert. Es kann die meisten Formate o:ffnen, einschliesslich PDF,
   PostScript(R), DjVu, CHM, XPS und ePub.

   Um das Paket Okular zu installieren, geben Sie folgendes ein:

 # pkg install okular

   Benutzen Sie die Ports-Sammlung, falls das Paket nicht verfu:gbar ist:

 # cd /usr/ports/graphics/okular
 # make install clean

6.5. Finanzsoftware

   Zur Verwaltung der perso:nlichen Finanzen ko:nnen einige leistungsfa:hige
   und einfach zu bedienende Anwendungen installiert werden. Einige von ihnen
   unterstu:tzen verbreitete Formate, darunter Dateiformate, die von Quicken
   und Excel verwendet werden.

   Dieser Abschnitt behandelt die folgenden Anwendungen:

   Anwendung Ressourcenbedarf  Installationsaufwand aus den      wichtige     
                                           Ports              Abha:ngigkeiten 
   GnuCash   niedrig          hoch                            GNOME           
   Gnumeric  niedrig          hoch                            GNOME           
   KMyMoney  niedrig          hoch                            KDE             

  6.5.1. GnuCash

   GnuCash ist Teil des GNOME-Projekts, mit dem Ziel, leicht zu bedienende
   und leistungsfa:hige Anwendungen bereitzustellen. Mit GnuCash ko:nnen
   Einnahmen und Ausgaben, Bankkonten und Wertpapiere verwaltet werden. Das
   Programm ist leicht zu bedienen und genu:gt dennoch hohen Anspru:chen.

   GnuCash stellt ein Register, a:hnlich dem in einem Scheckheft und ein
   hierarchisches System von Konten zur Verfu:gung. Eine Transaktion kann in
   einzelne Teile aufgespaltet werden. GnuCash kann Quicken-Dateien (QIF)
   importieren und einbinden. Weiterhin unterstu:tzt das Programm die meisten
   internationalen Formate fu:r Zeitangaben und Wa:hrungen. Die Bedienung des
   Programms kann durch zahlreiche Tastenkombinationen und dem automatischen
   Vervollsta:ndigen von Eingaben beschleunigt werden.

   Das GnuCash-Paket installieren Sie wie folgt:

 # pkg install gnucash

   Wenn das Paket nicht zur Verfu:gung steht, benutzen Sie die
   Ports-Sammlung:

 # cd /usr/ports/finance/gnucash
 # make install clean

  6.5.2. Gnumeric

   Gnumeric ist eine Tabellenkalkulation, die von der GNOME-Gemeinschaft
   entwickelt wird. Das Programm kann Eingaben anhand des Zellenformats oder
   einer Folge von Eingaben vervollsta:ndigen. Dateien verbreiteter Formate,
   wie die von Excel, Lotus 1-2-3 oder Quattro Pro lassen sich importieren.
   Es besitzt viele eingebaute Funktionen und Zellenformate, darunter die
   u:blichen wie Zahl, Wa:hrung, Datum, Zeit, und viele weitere.

   Installieren Sie das Gnumeric-Paket mit folgendem Kommando:

 # pkg install gnumeric

   Wenn das Paket nicht zur Verfu:gung steht, benutzen Sie die
   Ports-Sammlung:

 # cd /usr/ports/math/gnumeric
 # make install clean

  6.5.3. KMyMoney

   KMyMoney ist ein Programm zur Verwaltung der perso:nlichen Finanzen, das
   von der KDE-Gemeinschaft entwickelt wird. KMyMoney hat das Ziel, wichtige
   Funktionen zu bieten, die auch von kommerziellen Programmen zur Verwaltung
   der perso:nlichen Finanzen unterstu:tzt werden. Zudem za:hlen eine
   einfache Bedienung sowie korrekte doppelte Buchfu:hrung zu den
   herausragenden Fa:higkeiten dieses Programms. KMyMoney unterstu:tzt den
   Import von Datendateien im Format Quicken (QIF), kann Investionen
   verfolgen, unterstu:tzt verschiedene Wa:hrungen und bietet umfangreiche
   Reportmo:glichkeiten.

   Um das Paket KMyMoney zu installieren, geben Sie folgendes ein:

 # pkg install kmymoney-kde4

   Sollte das Paket nicht verfu:gbar sein, benutzen Sie die Ports-Sammlung:

 # cd /usr/ports/finance/kmymoney2-kde4
 # make install clean

Kapitel 7. Multimedia

   U:berarbeitet von Ross Lippert.
   Inhaltsverzeichnis

   7.1. U:bersicht

   7.2. Soundkarten einrichten

   7.3. MP3-Audio

   7.4. Videos wiedergeben

   7.5. TV-Karten

   7.6. MythTV

   7.7. Scanner

7.1. U:bersicht

   FreeBSD unterstu:tzt viele unterschiedliche Soundkarten, die Benutzern den
   Genuss von Highfidelity-Kla:ngen auf dem Computer ermo:glichen. Dazu
   geho:rt unter anderem die Mo:glichkeit, Tonquellen in den Formaten MPEG
   Audio Layer 3 (MP3), Waveform Audio File (WAV), Ogg Vorbis und vielen
   weiteren Formaten aufzunehmen und wiederzugeben. Daru:ber hinaus entha:lt
   die FreeBSD Ports-Sammlung Anwendungen, die das Bearbeiten von
   aufgenommenen Tonspuren, das Hinzufu:gen von Klangeffekten und die
   Kontrolle der angeschlossenen MIDI-Gera:te erlauben.

   FreeBSD unterstu:tzt auch die Wiedergabe von Videos und DVDs. Die FreeBSD
   Ports-Sammlung entha:lt Anwendungen, um verschiedene Video-Medien
   wiederzugeben, zu kodieren und zu konvertieren.

   Dieses Kapitel beschreibt die Einrichtung von Soundkarten,
   Video-Wiedergabe, TV-Tuner Karten und Scannern unter FreeBSD. Es werden
   auch einige Anwendungen beschrieben, die fu:r die Verwendung dieser
   Gera:te zur Verfu:gung stehen.

   Dieses Kapitel behandelt die folgenden Punkte:

     * Konfiguration einer Soundkarte in FreeBSD.

     * Fehlersuche bei Sound Einstellungen.

     * Wiedergabe und Kodierung von MP3s und anderen Audio-Formaten.

     * Vorbereitung des Systems fu:r die Wiedergabe von Videos.

     * Wiedergabe von DVDs, .mpg- und .avi-Dateien.

     * Rippen von CDs und DVDs.

     * Konfiguration von TV-Karten.

     * Installation und Konfiguration von MythTV.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Wissen, wie Sie Anwendungen installieren (Kapitel 4, Installieren von
       Anwendungen: Pakete und Ports).

7.2. Soundkarten einrichten

   Von Moses Moore.
   Aktualisiert von Marc Fonvieille.
   U:bersetzt von Benedikt Ko:hler und Uwe Pierau.

   Bevor Sie die Konfiguration beginnen, sollten Sie in Erfahrung bringen
   welches Soundkartenmodell und welcher Chip benutzt wird. FreeBSD
   unterstu:tzt eine Reihe Soundkarten. Die Hardware-Notes za:hlen alle
   unterstu:tzten Karten und deren Treiber fu:r FreeBSD auf.

   Um die Soundkarte benutzen zu ko:nnen, muss der richtige Gera:tetreiber
   geladen werden. Am einfachsten ist es, das Kernelmodul fu:r die Soundkarte
   mit kldload(8) zu laden. Dieses Beispiel la:dt den Treiber fu:r einen
   integrierten Chipsatz, basierend auf der Intel Spezifikation:

 # kldload snd_hda

   Um den Treiber automatisch beim Systemstart zu laden, fu:gen Sie folgende
   Zeile in /boot/loader.conf ein:

 snd_hda_load="YES"

   Weitere ladbare Soundmodule sind in /boot/defaults/loader.conf
   aufgefu:hrt. Wenn Sie nicht sicher sind, welchen Gera:tetreiber Sie laden
   mu:ssen, laden Sie das Modul snd_driver:

 # kldload snd_driver

   Der Treiber snd_driver ist ein Meta-Treiber, der alle gebra:uchlichen
   Treiber la:dt und die Suche nach dem richtigen Treiber vereinfacht. Durch
   Hinzufu:gen des Meta-Treibers in /boot/loader.conf ko:nnen alternativ alle
   Audio-Treiber geladen werden.

   Um zu ermitteln, welcher Treiber fu:r die Soundkarte vom Meta-Treiber
   snd_driver geladen wurde, geben Sie cat /dev/sndstat ein.

  7.2.1. Soundkarten in der Kernelkonfiguration einrichten

   Die Unterstu:tzung fu:r die Soundkarte kann auch direkt in den Kernel
   kompiliert werden. Weitere Informationen u:ber den Bau eines Kernels
   finden Sie im Kapitel 8, Konfiguration des FreeBSD-Kernels.

   Bei der Verwendung eines eigenen Kernels mu:ssen Sie sicherstellen, dass
   der Treiber fu:r das Audio-Framework in der Kernelkonfigurationsdatei
   vorhanden ist:

 device sound

   Als Na:chstes muss die Unterstu:tzung fu:r die Soundkarte hinzugefu:gt
   werden. Um das Beispiel mit dem integrierten Intel Audio-Chipsatz aus dem
   vorherigen Abschnitt fortzusetzen, verwenden Sie die folgende Zeile in der
   Kernelkonfigurationsdatei:

 device snd_hda

   Lesen Sie die Manualpage des Treibers, um den entsprechenden Gera:tenamen
   herauszufinden.

   Nicht PnP-fa:hige ISA-Soundkarten beno:tigen eventuell Einstellungen, wie
   IRQ und I/O-Port in /boot/device.hints. Wa:hrend des Systemstarts liest
   der loader(8) diese Datei und reicht die Einstellungen an den Kernel
   weiter. Fu:r eine alte Creative SoundBlaster(R) 16 ISA-Karte, die sowohl
   den snd_sbc(4)- als auch den snd_sb16-Treiber beno:tigt, mu:ssen die
   folgenden Zeilen in die Kernelkonfigurationsdatei eingetragen werden:

 device snd_sbc
 device snd_sb16

   Wenn die Karte den I/O-Port 0x220 und IRQ 5 benutzt, mu:ssen folgende
   Zeilen zusa:tzlich in /boot/device.hints hinzugefu:gt werden:

 hint.sbc.0.at="isa"
 hint.sbc.0.port="0x220"
 hint.sbc.0.irq="5"
 hint.sbc.0.drq="1"
 hint.sbc.0.flags="0x15"

   Die Syntax fu:r /boot/device.hints wird in sound(4), sowie in der
   Manualpage des jeweiligen Treibers beschrieben.

   Das Beispiel verwendet die vorgegebenen Werte. Falls die
   Karteneinstellungen andere Werte vorgeben, mu:ssen die Werte in der
   Kernelkonfiguration angepasst werden. Weitere Informationen zu dieser
   Soundkarte finden Sie in snd_sbc(4).

  7.2.2. Die Soundkarte testen

   Nachdem Sie den neuen Kernel gestartet oder das erforderliche Modul
   geladen haben, sollte die Soundkarte erkannt werden. Fu:hren Sie dmesg |
   grep pcm aus, um dies zu u:berpru:fen. Diese Ausgabe stammt von einem
   System mit einem integrierten Conexant CX20590 Chipsatz:

 pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 5 on hdaa0
 pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 6 on hdaa0
 pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> at nid 31,25 and 35,27 on hdaa1

   Der Status der Karte kann auch mit diesem Kommando gepru:ft werden:

 # cat /dev/sndstat
 FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
 Installed devices:
 pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
 pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
 pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> (play/rec) default

   Die Ausgabe kann fu:r jede Soundkarte anders aussehen. Wenn das Gera:t pcm
   nicht erscheint, pru:fen Sie die Kernelkonfigurationsdatei und stellen Sie
   sicher, dass der richtige Treiber geladen oder in den Kernel kompiliert
   wurde. Im na:chsten Abschnitt werden ha:ufig auftretende Probleme sowie
   deren Lo:sungen besprochen.

   Jetzt sollte die Soundkarte unter FreeBSD funktionieren. Wenn ein CD- oder
   DVD-Laufwerk an die Soundkarte angeschlossen ist, ko:nnen Sie jetzt mit
   cdcontrol(1) eine CD abspielen:

 % cdcontrol -f /dev/acd0 play 1

  Warnung:

   Audio CDs besitzen eine spezielle Kodierung. Daher sollten sie nicht mit
   mount(8) in das Dateisystem eingehangen werden.

   Es gibt viele Anwendungen, wie audio/workman, die eine bessere
   Benutzerschnittstelle besitzen. Zur Wiedergabe von MP3-Audiodateien kann
   audio/mpg123 installiert werden.

   Eine weitere schnelle Mo:glichkeit die Karte zu pru:fen, ist es, Daten an
   das Gera:t /dev/dsp zu senden:

 % cat Datei > /dev/dsp

   Fu:r Datei kann eine beliebige Datei verwendet werden. Wenn Sie einige
   Gera:usche ho:ren, funktioniert die Soundkarte.

  Anmerkung:

   Die Gera:tedateien /dev/dsp* werden automatisch erzeugt, wenn sie das
   erste Mal beno:tigt werden. Werden sie nicht verwendet, sind sie hingegen
   nicht vorhanden und tauchen daher auch nicht in der Ausgabe von ls(1) auf.

  7.2.3. Fehlerbehebung

   Tabelle 7.1, "Typische Fehlermeldungen" zeigt typische Fehlermeldungen
   sowie deren Lo:sungen:

   Tabelle 7.1. Typische Fehlermeldungen

             Fehler                               Lo:sung                     
   sb_dspwr(XX) timed out     Der I/O-Port ist nicht korrekt angegeben.       
                              Der IRQ ist falsch angegeben. Stellen Sie       
   bad irq XX                 sicher, dass der angegebene IRQ mit dem Sound   
                              IRQ u:bereinstimmt.                             
   xxx: gus pcm not attached, Es ist nicht genug Speicher verfu:gbar, um das  
   out of memory              Gera:t zu betreiben.                            
                              U:berpru:fen Sie mit fstat | grep dsp ob eine   
   xxx: can't open /dev/dsp!  andere Anwendung das Gera:t geo:ffnet hat.      
                              Ha:ufige Sto:renfriede sind esound oder die     
                              Sound-Unterstu:tzung von KDE.                   

   Moderne Grafikkarten beinhalten oft auch ihre eigenen Soundtreiber, um
   HDMI zu verwenden. Diese Audiogera:te werden manchmal vor der
   eigentlichen, separaten Soundkarte aufgefu:hrt und dadurch nicht als das
   Standardgera:t zum Abspielen von To:nen benutzt. Um zu pru:fen, ob das der
   Fall ist, fu:hren Sie dmesg aus und suchen Sie nach der Zeichenfolge pcm.
   Die Ausgabe sieht in etwa so aus:

 ...
 hdac0: HDA Driver Revision: 20100226_0142
 hdac1: HDA Driver Revision: 20100226_0142
 hdac0: HDA Codec #0: NVidia (Unknown)
 hdac0: HDA Codec #1: NVidia (Unknown)
 hdac0: HDA Codec #2: NVidia (Unknown)
 hdac0: HDA Codec #3: NVidia (Unknown)
 pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
 pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
 pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
 pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
 hdac1: HDA Codec #2: Realtek ALC889
 pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
 pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
 pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
 pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
 ...

   In diesem Beispiel wurde die Grafikkarte (NVidia) vor der Soundkarte
   (Realtek ALC889) aufgefu:hrt. Um die Soundkarte als Standardabspielgera:t
   einzusetzen, a:ndern Sie hw.snd.default_unit auf die Einheit, welche fu:r
   das Abspielen benutzt werden soll:

 # sysctl hw.snd.default_unit=n

   Hier repra:sentiert n die Nummer der Soundkarte, die verwendet werden
   soll, in diesem Beispiel also 4. Sie ko:nnen diese A:nderung dauerhaft
   machen, indem Sie die folgende Zeile in /etc/sysctl.conf hinzufu:gen:

 hw.snd.default_unit=4

  7.2.4. Mehrere Tonquellen abspielen

   Beigetragen von Munish Chopra.

   Oft sollen mehrere Tonquellen gleichzeitig abgespielt werden. FreeBSD
   verwendet dazu virtuelle Tonkana:le. Virtuelle Kana:le mischen die
   Tonquellen im Kernel, sodass mehrere Kana:le benutzt werden ko:nnen, als
   von der Hardware unterstu:tzt werden.

   Drei sysctl(8) Optionen stehen zur Konfiguration der virtuellen Kana:le
   zur Verfu:gung:

 # sysctl dev.pcm.0.play.vchans=4
 # sysctl dev.pcm.0.rec.vchans=4
 # sysctl hw.snd.maxautovchans=4

   Im Beispiel werden vier virtuelle Kana:le eingerichtet, eine im Normalfall
   ausreichende Anzahl. Sowohl dev.pcm.0.play.vchans=4 und
   dev.pcm.0.rec.vchans=4 sind die Anzahl der virtuellen Kana:le des Gera:ts
   pcm0, die fu:rs Abspielen und Aufnehmen verwendet werden und sie ko:nnen
   konfiguriert werden, sobald das Gera:t existiert. Da das Modul pcm
   unabha:ngig von den Hardware-Treibern geladen werden kann, gibt
   hw.snd.maxautovchans die Anzahl der virtuellen Kana:le an, die spa:ter
   eingerichtete Audiogera:te erhalten. Lesen Sie pcm(4) fu:r weitere
   Informationen.

  Anmerkung:

   Die Anzahl der virtuellen Kana:le kann nicht gea:ndert werden, solange das
   Gera:t genutzt wird. Schliessen Sie daher zuerst alle Programme wie
   Musikabspielprogramme oder Sound-Daemonen, die auf dieses Gera:t
   zugreifen.

   Die korrekte pcm-Gera:tedatei wird automatisch zugeteilt, wenn ein
   Programm das Gera:t /dev/dsp0 anfordert.

  7.2.5. Den Mixer einstellen

   Beigetragen von Josef El-Rayes.

   Die Voreinstellungen des Mixers sind im Treiber pcm(4) fest kodiert. Es
   gibt zwar viele Anwendungen und Dienste, die den Mixer einstellen ko:nnen
   und die eingestellten Werte bei jedem Start wieder setzen, am einfachsten
   ist es allerdings, die Standardwerte fu:r den Mixer direkt im Treiber
   einzustellen. Der Mixer kann mit den entsprechenden Werten in
   /boot/device.hints eingestellt werden:

 hint.pcm.0.vol="50"

   Die Zeile setzt die Lautsta:rke des Mixers beim Laden des Moduls pcm(4)
   auf den Wert 50.

7.3. MP3-Audio

   Ein Beitrag von Chern Lee.
   U:bersetzt von Benedikt Ko:hler.

   Dieser Abschnitt beschreibt einige unter FreeBSD verfu:gbare MP3-Player.
   Zudem wird beschrieben, wie Audio-CDs gerippt und MP3s kodiert und
   dekodiert werden.

  7.3.1. MP3-Player

   Ein beliebter graphischer MP3-Player ist XMMS, welcher WinAmp-Skins und
   zusa:tzliche Plugins unterstu:tzt. Die Benutzerschnittstelle ist leicht zu
   erlernen und entha:lt eine Playlist, einen graphischen Equalizer und
   vieles mehr. Diejenigen, die bereits mit WinAmp vertraut sind, werden XMMS
   sehr leicht zu benutzen finden. Unter FreeBSD kann XMMS als Port oder
   Paket multimedia/xmms installiert werden.

   Das Paket audio/mpg123 ist ein alternativer, kommandozeilenorientierter
   MP3-Player. Nach der Installation kann die abzuspielende MP3-Datei auf der
   Kommandozeile angegeben werden. Geben Sie auch das entsprechende
   Soundkarte an, falls das System u:ber mehrere Audiogera:te verfu:gt:

 # mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3
 High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3
         version 1.18.1; written and copyright by Michael Hipp and others
         free software (LGPL) without any warranty but with best wishes

 Playing MPEG stream from Foobar-GreatestHits.mp3 ...
 MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo

   Weitere MP3-Player stehen in der FreeBSD Ports-Sammlung zur Verfu:gung.

  7.3.2. CD-Audio Tracks rippen

   Bevor eine ganze CD oder einen CD-Track in das MP3-Format umgewandelt
   werden kann, mu:ssen die Audiodaten von der CD auf die Festplatte gerippt
   werden. Dabei werden die CDDA (CD Digital Audio) Rohdaten in WAV-Dateien
   kopiert.

   Die Anwendung cdda2wav, die im sysutils/cdrtools Paket enthalten ist, kann
   zum Rippen der Audiodaten von CDs genutzt werden.

   Wenn die Audio CD in dem Laufwerk liegt, kann der folgende Befehl als root
   ausgefu:hrt werden, um eine ganze CD in einzelne WAV-Dateien zu rippen:

 # cdda2wav -D 0,1,0 -B

   In diesem Beispiel bezieht sich der Schalter -D 0,1,0 auf das SCSI-Gera:t
   0,1,0, das die zu rippende CD entha:lt. Benutzen Sie cdrecord -scanbus um
   die richtigen Gera:teparameter fu:r das System zu bestimmen.

   Um einzelne Tracks zu rippen, benutzen Sie -t wie folgt:

 # cdda2wav -D 0,1,0 -t 7

   Um mehrere Tracks zu rippen, zum Beispiel die Tracks eins bis sieben,
   ko:nnen Sie wie folgt einen Bereich angeben:

 # cdda2wav -D 0,1,0 -t 1+7

   Wenn Sie von einem ATAPI (IDE) CD-ROM-Laufwerk rippen, geben Sie den
   Gera:tenamen anstelle der SCSI-Gera:tenummer an. Dieses Beispiel rippt
   Track 7 von einem IDE-Laufwerk:

 # cdda2wav -D /dev/acd0 -t 7

   Alternativ ko:nnen mit dd ebenfalls Audio-Stu:cke von ATAPI-Laufwerken
   kopiert werden. Dies wird in Abschnitt 17.5.5, "Kopieren von Audio-CDs"
   erla:utert.

  7.3.3. MP3-Dateien kodieren und dekodieren

   Lame ist ein weitverbreiteter MP3-Encoder, der als Port audio/lame
   installiert werden kann. Wegen Patentproblemen ist kein Paket verfu:gbar.

   Der folgende Befehl konvertiert die gerippte WAV-Datei audio01.wav in
   audio01.mp3 um:

 # lame -h -b 128 --tt "Foo Liedtietel" --ta "FooBar Ku:nstler" --tl "FooBar Album" \
 --ty "2014" --tc "Gerippt und kodiert von Foo" --tg "Musikrichtung" audio01.wav audio01.mp3

   128 kbits ist die gewo:hnliche MP3-Bitrate, wohingegen die Bitraten 160
   und 192 kbits eine ho:here Qualita:t bieten. Je ho:her die Bitrate ist,
   desto mehr Speicherplatz beno:tigt die resultierende MP3-Datei. Die Option
   -h verwendet den "higher quality but a little slower" (ho:here Qualita:t,
   aber etwas langsamer) Modus. Die Schalter, die mit --t beginnen, sind
   ID3-Tags, die in der Regel Informationen u:ber das Lied enthalten und in
   die MP3-Datei eingebettet sind. Weitere Optionen ko:nnen in der Manualpage
   von lame nachgelesen werden.

   Um aus MP3-Dateien eine Audio CD zu erstellen, mu:ssen diese zuerst in ein
   nicht komprimiertes Format umgewandelt werden. Verwenden Sie XMMS um die
   Datei im WAV-Format zu schreiben und mpg123, um die MP3-Datei in rohe
   PCM-Audiodaten umzuwandeln.

   Um audio01.mp3 mit mpg123 umzuwandeln, geben Sie den Namen der PCM-Datei
   an:

 # mpg123 -s audio01.mp3 > audio01.pcm

   So verwenden Sie XMMS um eine MP3-Datei in das WAV-Format zu konvertieren:

   Prozedur 7.1. Mit XMMS in das WAV-Format konvertieren
    1. Starten Sie XMMS.

    2. Klicken Sie mit der rechten Maustaste, um das XMMS-Menu zu o:ffnen.

    3. Wa:hlen Sie Preferences im Untermenu: Options.

    4. A:ndern Sie das Output-Plugin in "Disk Writer Plugin".

    5. Dru:cken Sie Configure.

    6. Geben Sie ein Verzeichnis ein, in das Sie die unkomprimierte Datei
       schreiben wollen.

    7. Laden Sie die MP3-Datei wie gewohnt in XMMS mit einer Lautsta:rke von
       100% und einem abgeschalteten EQ.

    8. Dru:cken Sie Play und es wird so aussehen, als spiele XMMS die
       MP3-Datei ab, aber keine Musik ist zu ho:ren. Der Player u:berspielt
       die MP3-Datei in eine Datei.

    9. Vergessen Sie nicht, das Output-Plugin wieder in den Ausgangszustand
       zuru:ckzusetzen um wieder MP3-Dateien anho:ren zu ko:nnen.

   cdrecord kann mit beiden Formaten Audio-CDs erstellen. Der Dateikopf von
   WAV-Dateien erzeugt am Anfang des Stu:cks ein Knacken. Der Dateikopf mit
   dem Port oder Paket audio/sox entfernt werden:

 % sox -t wav -r 44100 -s -w -c 2 track.wav track.raw

   Lesen Sie Abschnitt 17.5, "Erstellen und Verwenden von CDs", um mehr
   Informationen zur Benutzung von CD-Brennern mit FreeBSD zu erhalten.

7.4. Videos wiedergeben

   Beigetragen von Ross Lippert.

   Bevor Sie beginnen, sollten Sie das Modell und den benutzten Chip der
   Videokarte kennen. Obwohl Xorg viele Videokarten unterstu:tzt, ko:nnen
   nicht alle Karten Videos schnell genug wiedergeben. Eine Liste der
   Erweiterungen, die der Xorg-Server fu:r eine Videokarte unterstu:tzt,
   erhalten Sie unter laufendem Xorg mit xdpyinfo.

   Halten Sie eine kurze MPEG-Datei bereit, mit der Sie Wiedergabeprogramme
   und deren Optionen testen ko:nnen. Da einige DVD-Spieler in der
   Voreinstellung das DVD-Gera:t mit /dev/dvd ansprechen oder diesen Namen
   fest einkodiert haben, ist es vielleicht hilfreich symbolische Links auf
   die richtigen Gera:te anzulegen:

 # ln -sf /dev/acd0 /dev/dvd

   Aufgrund der Beschaffenheit devfs(5) gehen gesondert angelegte Links wie
   diese bei einem Neustart des Systems verloren. Damit die symbolischen
   Links automatisch beim Neustart des Systems angelegt werden, fu:gen Sie
   die folgende Zeile in /etc/devfs.conf ein:

 link acd0 dvd

   Das Entschlu:sseln von DVDs erfordert den Aufruf bestimmter Funktionen,
   sowie Schreibzugriff auf das DVD-Gera:t.

   Xorg benutzt Shared-Memory und es wird empfohlen, die nachstehenden
   sysctl(8)-Variablen auf die gezeigten Werte zu erho:hen:

 kern.ipc.shmmax=67108864
 kern.ipc.shmall=32768

  7.4.1. Video-Schnittstellen

   Es gibt einige Mo:glichkeiten, Videos unter Xorg abzuspielen. Welche
   Mo:glichkeit funktioniert, ha:ngt stark von der verwendeten Hardware ab.

   Gebra:uchliche Video-Schnittstellen sind:

    1. Xorg: normale Ausgabe u:ber Shared-Memory.

    2. XVideo: Eine Erweiterung der Xorg-Schnittstelle, die Videos in jedem
       X11-Drawable anzeigen kann. Diese Erweiterung bietet auch auf
       leistungsschwachen Maschinen eine gute Qualita:t der Wiedergabe. Der
       na:chste Abschnitt beschreibt, wie Sie feststellen, ob diese
       Erweiterung ausgefu:hrt wird.

    3. SDL: Simple DirectMedia Layer ist eine portable Schnittstelle fu:r
       verschiedene Betriebssysteme, mit denen Anwendungen
       plattformunabha:ngig und effizient Ton und Grafik benutzen ko:nnen.
       SDL bietet eine hardwarenahe Schnittstelle, die manchmal schneller ist
       als die Xorg-Schnittstelle. Unter FreeBSD kann SDL u:ber das Paket
       oder den Port devel/sdl20 installiert werden.

    4. DGA: Direct Graphics Access ist eine Xorg-Erweiterung die es
       Anwendungen erlaubt, am Xorg-Server vorbei direkt in den Framebuffer
       zu schreiben. Da die Anwendung und der Xorg-Server auf gemeinsame
       Speicherbereiche zugreifen, mu:ssen die Anwendungen unter dem Benutzer
       root laufen. Die DGA-Erweiterung kann mit dga(1) getestet werden. Wenn
       DGA ausgefu:hrt wird, a:ndert sich die Farbe des Bildschrims, wenn
       eine Taste gedru:ckt wird. Dru:cken Sie zum Beenden q.

    5. SVGAlib: Eine Schnittstelle zur Grafikausgabe auf der Konsole.

    7.4.1.1. XVideo

   Ob die Erweiterung la:uft, entnehmen Sie der Ausgabe von xvinfo:

 % xvinfo

   XVideo wird untertsu:tzt, wenn die Ausgabe in etwa wie folgt aussieht:

 X-Video Extension version 2.2
 screen #0
   Adaptor #0: "Savage Streams Engine"
     number of ports: 1
     port base: 43
     operations supported: PutImage
     supported visuals:
       depth 16, visualID 0x22
       depth 16, visualID 0x23
     number of attributes: 5
       "XV_COLORKEY" (range 0 to 16777215)
               client settable attribute
               client gettable attribute (current value is 2110)
       "XV_BRIGHTNESS" (range -128 to 127)
               client settable attribute
               client gettable attribute (current value is 0)
       "XV_CONTRAST" (range 0 to 255)
               client settable attribute
               client gettable attribute (current value is 128)
       "XV_SATURATION" (range 0 to 255)
               client settable attribute
               client gettable attribute (current value is 128)
       "XV_HUE" (range -180 to 180)
               client settable attribute
               client gettable attribute (current value is 0)
     maximum XvImage size: 1024 x 1024
     Number of image formats: 7
       id: 0x32595559 (YUY2)
         guid: 59555932-0000-0010-8000-00aa00389b71
         bits per pixel: 16
         number of planes: 1
         type: YUV (packed)
       id: 0x32315659 (YV12)
         guid: 59563132-0000-0010-8000-00aa00389b71
         bits per pixel: 12
         number of planes: 3
         type: YUV (planar)
       id: 0x30323449 (I420)
         guid: 49343230-0000-0010-8000-00aa00389b71
         bits per pixel: 12
         number of planes: 3
         type: YUV (planar)
       id: 0x36315652 (RV16)
         guid: 52563135-0000-0000-0000-000000000000
         bits per pixel: 16
         number of planes: 1
         type: RGB (packed)
         depth: 0
         red, green, blue masks: 0x1f, 0x3e0, 0x7c00
       id: 0x35315652 (RV15)
         guid: 52563136-0000-0000-0000-000000000000
         bits per pixel: 16
         number of planes: 1
         type: RGB (packed)
         depth: 0
         red, green, blue masks: 0x1f, 0x7e0, 0xf800
       id: 0x31313259 (Y211)
         guid: 59323131-0000-0010-8000-00aa00389b71
         bits per pixel: 6
         number of planes: 3
         type: YUV (packed)
       id: 0x0
         guid: 00000000-0000-0000-0000-000000000000
         bits per pixel: 0
         number of planes: 0
         type: RGB (packed)
         depth: 1
         red, green, blue masks: 0x0, 0x0, 0x0

   Einige der aufgefu:hrten Formate, wie YUV2 oder YUV12 existieren in machen
   XVideo-Implementierungen nicht. Dies kann zu Problemen mit einigen
   Spielern fu:hren.

   XVideo wird wahrscheinlich von der Karte nicht unterstu:tzt, wenn die
   Ausgabe wie folgt aussieht:

 X-Video Extension version 2.2
 screen #0
 no adaptors present

   Wenn die XVideo-Erweiterung auf der Karte nicht la:uft, wird es nur etwas
   schwieriger, die Anforderungen fu:r die Wiedergabe von Videos zu
   erfu:llen.

  7.4.2. Video-Anwendungen

   Dieser Abschnitt behandelt Anwendungen aus der FreeBSD-Ports-Sammlung, die
   fu:r die Wiedergabe von Videos genutzt werden ko:nnen.

    7.4.2.1. MPlayer und MEncoder

   MPlayer ist ein auf Geschwindigkeit und Flexibilita:t ausgelegter
   Video-Spieler fu:r die Kommandozeile mit optionaler graphischer
   Oberfla:che. Weitere graphische Oberfla:chen fu:r MPlayer stehen in der
   FreeBSD Ports-Sammlung zur Verfu:gung.

   MPlayer kann als Paket oder Port multimedia/mplayer installiert werden.
   Der Bau von MPlayer beru:cksichtigt die vorhandene Hardware und es ko:nnen
   zahlreiche Optionen ausgewa:hlt werden. Aus diesen Gru:nden ziehen es
   manche Benutzer vor, den Port zu u:bersetzen, anstatt das Paket zu
   installieren.

   Die Optionen sollten beim Bau des Ports u:berpru:ft werden, um dem Umfang
   der Unterstu:tzung, mit dem der Port gebaut wird, zu bestimmen. Wenn eine
   Option nicht ausgewa:hlt wird, ist MPlayer nicht in der Lage, diese Art
   von Video-Format wiederzugeben. Mit den Pfeiltasten und der Leertaste
   ko:nnen die erforderlichen Formate ausgewa:hlt werden. Wenn Sie fertig
   sind, dru:cken Sie Enter, um den Bau und die Installation fortzusetzen.

   In der Voreinstellung wird das Paket oder der Port das
   mplayer-Kommandozeilenprogramm und das graphische Programm gmplayer bauen.
   Um Videos zu dekodieren, installieren Sie den Port multimedia/mencoder.
   Aus lizenzrechtlichen Gru:nden steht ein Paket von MEncoder nicht zur
   Verfu:gung.

   MPlayer erstellt beim ersten Start ~/.mplayer im Heimatverzeichnis des
   Benutzers. Dieses Verzeichnis entha:lt die voreingestellten
   Konfigurationseinstellungen fu:r den Benutzer.

   Dieser Abschnitt beschreibt nur ein paar wenige Anwendungsmo:glichkeiten.
   Eine vollsta:ndige Beschreibung der zahlreichen Mo:glichkeiten finden Sie
   in der Manualpage von mplayer(1).

   Um die Datei testfile.avi abzuspielen, geben Sie die Video-Schnittstelle
   mit -vo an:

 % mplayer -vo xv testfile.avi

 % mplayer -vo sdl testfile.avi

 % mplayer -vo x11 testfile.avi

 # mplayer -vo dga testfile.avi

 # mplayer -vo 'sdl:dga' testfile.avi

   Es lohnt sich, alle Option zu testen. Die erzielte Geschwindigkeit ha:ngt
   von vielen Faktoren ab und variiert betra:chtlich je nach eingesetzter
   Hardware.

   Wenn Sie eine DVD abspielen wollen, ersetzen Sie testfile.avi durch
   -dvd://N Gera:t. N ist die Nummer des Stu:cks, das Sie abspielen wollen
   und Gera:t gibt den Gera:tenamen der DVD an. Das nachstehende Kommando
   spielt das dritte Stu:ck von /dev/dvd:

 # mplayer -vo dga -dvd://3 /dev/dvd

  Anmerkung:

   Das standardma:ssig verwendete DVD-Laufwerk kann beim Bau des
   MPlayer-Ports mit der Option WITH_DVD_DEVICE=/pfad/zum/gera:t festgelegt
   werden. Die Voreinstellung verwendet das Gera:t /dev/cd0. Weitere Details
   finden Sie in Makefile.options des Ports.

   Die Tastenkombinationen zum Abbrechen, Anhalten und Weiterfu:hren der
   Wiedergabe entnehmen Sie der Ausgabe von mplayer -h oder der mplayer(1)
   Manualpage.

   Weitere nu:tzliche Optionen fu:r die Wiedergabe sind -fs -zoom zur
   Wiedergabe im Vollbild-Modus und -framedrop zur Steigerung der
   Geschwindigkeit.

   Jeder Benutzer kann ha:ufig verwendete Optionen in seine ~/.mplayer/config
   eintragen:

 vo=xv
 fs=yes
 zoom=yes

   mplayer kann verwendet werden, um DVD-Stu:cke in .vob-Dateien zu rippen.
   Das zweite Stu:ck einer DVD wandeln Sie wie folgt in eine Datei um:

 # mplayer -dumpstream -dumpfile out.vob -dvd://2 /dev/dvd

   Die Ausgabedatei out.vob wird im MPEG-Format abgespeichert.

   Jeder Benutzer, der mehr Informationen u:ber Video unter UNIX(R) sammeln
   mo:chte, sollte mplayerhq.hu/DOCS konsultieren, da es technisch sehr
   informativ ist. Diese Dokumentation sollte ebenfalls studiert werden,
   bevor Fehlerberichte eingereicht werden.

   Vor der Verwendung von mencoder ist es hilfreich, sich mit den auf
   mplayerhq.hu/DOCS/HTML/en/mencoder.html beschriebenen Optionen vertraut zu
   machen. Es gibt unza:hlige Mo:glichkeiten die Qualita:t zu verbessern, die
   Bitrate zu verringern und Formate zu konvertieren. Einige davon haben
   erhebliche Auswirkungen auf die Geschwindigkeit. Falsche Kombinationen von
   Kommandozeilenparametern ergeben eventuell Dateien, die selbst mplayer
   nicht mehr wiedergeben kann.

   Hier ist ein Beispiel fu:r eine einfache Kopie:

 % mencoder input.avi -oac copy -ovc copy -o output.avi

   Wenn Sie in eine Datei rippen, benutzen Sie die Option -dumpfile von
   mplayer.

   Um input.avi nach MPEG4 mit MPEG3 fu:r den Ton zu konvertieren, muss
   zuna:chst der Port audio/lame installiert werden. Aus lizenzrechtlichen
   Gru:nden ist ein Paket nicht verfu:gbar. Wenn der Port installiert ist,
   geben Sie ein:

 % mencoder input.avi -oac mp3lame -lameopts br=192 \
           -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

   Die Ausgabedatei la:sst sich mit Anwendungen wie mplayer oder xine
   abspielen.

   input.avi kann durch -dvd://1 /dev/dvd ersetzt und das Kommando als root
   ausgefu:hrt werden, um ein DVD-Stu:ck direkt zu konvertieren. Da
   vielleicht ein paar Versuche no:tig sind, um das gewu:nschte Ergebnis zu
   erhalten, empfiehlt es sich das Stu:ck zuerst in eine Datei zu schreiben
   und anschliessend die Datei weiter zu bearbeiten.

    7.4.2.2. Der Video-Spieler xine

   xine ist ein Video-Spieler mit einer wiederverwendbaren Bibliothek und ein
   Programm, das durch Plugins erweitert werden kann. Es kann als Paket oder
   Port multimedia/xine installiert werden.

   Fu:r einen reibungslosen Betrieb beno:tigt xine entweder eine schnelle CPU
   mit einer schnellen Grafikkarte, oder die XVideo-Erweiterung. Am
   schnellsten la:uft xine mit der XVideo-Erweiterung.

   In der Voreinstellung startet xine eine grafische Benutzeroberfla:che.
   U:ber die Menu:s ko:nnen dann bestimmte Dateien geo:ffnet werden.

   Alternativ kann xine auch u:ber die Kommandozeile aufgerufen werden, um
   Dateien direkt wiederzugeben:

 % xine -g -p mymovie.avi

   Weitere Informationen und Tipps zur Fehlerbehebung finden Sie unter
   xine-project.org/faq.

    7.4.2.3. Die Transcode-Werkzeuge

   Transcode ist eine Sammlung von Werkzeugen zur Umwandlung von Video- und
   Audio-Dateien. Transcode mischt Video-Dateien und kann kaputte
   Video-Dateien reparieren. Die Werkzeuge werden als Filter verwendet, das
   heisst die Ein- und Ausgaben verwenden stdin/stdout.

   Unter FreeBSD kann Transcode als Paket oder Port multimedia/transcode
   installiert werden. Viele Benutzer bevorzugen es den Port zu bauen, da er
   ein Menu: bereitstellt, wo die entsprechenden Formate fu:r den Bau
   ausgewa:hlt werden ko:nnen. Mit den Pfeiltasten und der Leertaste ko:nnen
   die erforderlichen Formate ausgewa:hlt werden. Wenn Sie fertig sind,
   dru:cken Sie Enter, um den Bau und die Installation fortzusetzen.

   Dieses Beispiel zeigt, wie eine DivX-Datei in eine PAL MPEG-1-Datei
   konvertiert wird:

 % transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
 % mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa

   Die daraus resultierende MPEG-Datei, output_vcd.mpg, kann beispielsweise
   mit MPlayer abgespielt werden. Die Datei kann auch mit einem Programm wie
   multimedia/vcdimager oder sysutils/cdrdao als Video-CD auf eine CD-R
   gebrannt werden.

   Zusa:tzlich zu der Manualpage von transcode, sollten Sie auch die
   Informationen und Beispiele im transcoding.org/cgi-bin/transcode lesen.

7.5. TV-Karten

   Beigetragen von Josef El-Rayes.
   U:berarbeitet von Marc Fonvieille.

   Mit TV-Karten ko:nnen Sie mit dem Rechner u:ber Kabel oder Antenne
   fernsehen. Die meisten Karten besitzen einen RCA- oder S-Video-Eingang.
   Einige Karten haben auch einen FM-Radio-Empfa:nger.

   Der bktr(4)-Treiber von FreeBSD unterstu:tzt PCI-TV-Karten mit einem
   Brooktree Bt848/849/878/879 Chip. Dieser Teiber unterstu:tzt die meisten
   Pinnacle PCTV Karten. Die Karte sollte einen der unterstu:tzten Empfa:nger
   besitzen, die in bktr(4) aufgefu:hrt sind.

  7.5.1. Den Treiber laden

   Um die Karte benutzen zu ko:nnen, muss der bktr(4)-Treiber geladen werden.
   Damit dies beim Systemstart automatisch erfolgt, muss die folgende Zeile
   in /boot/loader.conf hinzugefu:gt werden:

 bktr_load="YES"

   Alternativ kann der Treiber fu:r die TV-Karte auch fest in den Kernel
   kompiliert werden. In diesem Fall mu:ssen folgende Zeilen in die
   Kernelkonfigurationsdatei aufgenommen werden:

 device   bktr
 device  iicbus
 device  iicbb
 device  smbus

   Die zusa:tzlichen Treiber werden beno:tigt, da die Komponenten der Karte
   u:ber einen I2C-Bus verbunden sind. Bauen und installieren Sie dann den
   neuen Kernel.

   Um den Treiber zu testen, muss das System neu gestartet werden. Wa:hrend
   des Neustarts sollte die TV-Karte erkannt werden:

 bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0
 iicbb0: <I2C bit-banging driver> on bti2c0
 iicbus0: <Philips I2C bus> on iicbb0 master-only
 iicbus1: <Philips I2C bus> on iicbb0 master-only
 smbus0: <System Management Bus> on bti2c0
 bktr0: Pinnacle/Miro TV, Philips SECAM tuner.

   Abha:ngig von der verwendeten Hardware ko:nnen die Meldungen natu:rlich
   anders aussehen. Die entdeckten Gera:te lassen sich mit sysctl(8) oder in
   der Kernelkonfigurationsdatei u:berschreiben. Wenn Sie beispielsweise
   einen Philips-SECAM-Empfa:nger erzwingen wollen, fu:gen Sie die folgende
   Zeile zur Kernelkonfigurationsdatei hinzu:

 options OVERRIDE_TUNER=6

   Alternativ ko:nnen Sie sysctl(8) benutzen:

 # sysctl hw.bt848.tuner=6

   Weitere Informationen zu den verschiedenen Kerneloptionen und
   sysctl(8)-Parametern finden Sie in bktr(4).

  7.5.2. Nu:tzliche Anwendungen

   Um die TV-Karte zu benutzen, installieren Sie eine der nachstehenden
   Anwendungen:

     * multimedia/fxtv la:sst das Fernsehprogramm in einem Fenster laufen und
       kann Bilder, Audio und Video aufzeichnen.

     * multimedia/xawtv eine weitere TV-Anwendung mit vergleichbaren
       Funktionen.

     * Mit audio/xmradio la:sst sich der FM-Radio-Empfa:nger, der sich auf
       TV-Karten befindet, benutzen.

   Weitere Anwendungen finden Sie in der FreeBSD Ports-Sammlung.

  7.5.3. Fehlersuche

   Wenn Sie Probleme mit der TV-Karte haben, pru:fen Sie zuerst, ob der
   Video-Capture-Chip und der Empfa:nger vom bktr(4)-Treiber unterstu:tzt
   werden und ob Sie die richtigen Optionen verwenden. Weitere Hilfe zu
   unterstu:tzten TV-Karten finden Sie auf der Mailingliste
   freebsd-multimedia.

7.6. MythTV

   MythTV ist eine beliebte Open Source PVR-Anwendung. Dieser Abschnitt
   beschreibt die Installation und Konfiguration von MythTV unter FreeBSD.
   Weitere Informationen zur Benutzung von MythTV finden Sie unter
   mythtv.org/wiki.

   MythTV beno:tigt ein Frontend und ein Backend. Diese Komponenten ko:nnen
   entweder auf dem gleichen System, oder auf unterschiedlichen Maschinen
   installiert werden.

   Das Frontend kann unter FreeBSD u:ber den Port oder das Paket
   multimedia/mythtv-frontend installiert werden. Zudem muss Xorg, wie in
   Kapitel 5, Das X-Window-System beschrieben, installiert und konfiguriert
   sein. Idealerweise besitzt das System auch eine Videokarte, die X-Video
   Motion Compensation (XvMC) unterstu:tzt, sowie optional eine
   LIRC-kompatible Fernbedienung.

   Benutzen Sie multimedia/mythtv, um sowohl das Frontend als auch das
   Backend zu installieren. Ein MySQL(TM) Datenbank-Server ist ebenfalls
   erforderlich und sollte automatisch als Abha:ngigkeit installiert werden.
   Optional sollte das System einen Empfa:nger und ausreichend Speicherplatz
   haben, um die aufgezeichneten Daten speichern zu ko:nnen.

  7.6.1. Hardware

   MythTV verwendet V4L um auf Videoeingabegera:te, wie Kodierer und
   Empfa:nger zuzugreifen. Unter FreeBSD funktioniert MythTV am besten mit
   USB DVB-S/C/T Karten, die von multimedia/webcamd unterstu:tzt werden, da
   dies eine V4L-Anwendung zur Verfu:gung stellt, die als Benutzerprogramm
   la:uft. Jede DVB-Karte, die von webcamd unterstu:tzt wird, sollte mit
   MythTV funktionieren, jedoch gibt es eine Liste von Karten, die unter
   wiki.freebsd.org/WebcamCompat abgerufen werden kann. Es existieren auch
   Treiber fu:r Hauppauge-Karten in den folgenden Paketen: multimedia/pvr250
   und multimedia/pvrxxx, allerdings liefern diese nur eine
   Treiberschnittstelle, die nicht dem Standard entspricht und die nicht mit
   MythTV-Versionen gro:sser als 0.23 funktionieren. Aus lizenzrechtlichen
   Gru:nden ist ein Paket nicht verfu:gbar, sodass die beiden Ports
   u:bersetzt werden mu:ssen.

   Die wiki.freebsd.org/HTPC entha:lt eine Liste von allen verfu:gbaren
   DVB-Treibern.

  7.6.2. MythTV Backend einrichten

   Geben Sie folgendes ein, um MythTV als Bina:rpaket zu installieren:

 # pkg install mythtv

   Alternativ ko:nnen Sie den Port installieren:

 # cd /usr/ports/multimedia/mythtv
 # make install

   Richten Sie anschliessend die MythTV-Datenbank ein:

 # mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql

   Konfigurieren Sie dann das Backend:

 # mythtv-setup

   Zum Schluss starten Sie das Backend:

 # echo 'mythbackend_enable="YES"' >> /etc/rc.conf
 # service mythbackend start

7.7. Scanner

   Beigetragen von Marc Fonvieille.

   Unter FreeBSD stellt SANE (Scanner Access Now Easy) aus der Ports-Sammlung
   eine einheitliche Schnittstelle (API) fu:r den Zugriff auf Scanner bereit.
   SANE wiederum greift auf Scanner mithilfe einiger FreeBSD-Treiber zu.

   FreeBSD unterstu:tzt sowohl SCSI- als auch USB-Scanner. Abha:ngig von der
   Schnittstelle des Scanners, werden unterschiedliche Treiber beno:tigt.
   Pru:fen Sie vor der Konfiguration mithilfe der Liste der unterstu:tzten
   Gera:te ob der Scanner von SANE unterstu:tzt wird.

   Dieses Kapitel beschreibt, wie Sie feststellen ko:nnen, ob der Scanner von
   FreeBSD erkannt wurde. Zudem entha:lt es einen U:berblick u:ber die
   Konfiguration und Verwendung von SANE unter FreeBSD.

  7.7.1. Den Scanner u:berpru:fen

   Im GENERIC-Kernel sind schon alle, fu:r einen USB-Scanner notwendigen
   Treiber enthalten. Benutzer mit einem angepassten Kernel sollten
   sicherstellen, dass die Kernelkonfiguration die nachstehenden Zeilen
   entha:lt:

 device usb
 device uhci
 device ohci
 device ehci

   Um zu u:berpru:fen ob der Scanner erkannt wird, schliessen Sie den
   USB-Scanner an. Pru:fen Sie dann mit dmesg(8), ob der Scanner in den
   Systemmeldungen erscheint:

 ugen0.2: <EPSON> at usbus0

   In diesem Beispiel wurde ein EPSON Perfection(R) 1650 USB-Scanner an
   /dev/ugen0.2 erkannt.

   Wenn der Scanner eine SCSI-Schnittstelle besitzt, ist die
   Kernelkonfiguration abha:ngig vom verwendeten SCSI-Controller. Der
   GENERIC-Kernel unterstu:tzt die gebra:uchlichen SCSI-Controller. Den
   richtigen Treiber finden Sie in /usr/src/sys/conf/NOTES. Neben dem
   SCSI-Treiber muss die Kernelkonfiguration noch die nachstehenden Zeilen
   enthalten:

 device scbus
 device pass

   Nachdem Sie einen Kernel gebaut und installiert haben, sollte der Scanner
   beim Neustart in den Systemmeldungen erscheinen:

 pass2 at aic0 bus 0 target 2 lun 0
 pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
 pass2: 3.300MB/s transfers

   Wenn der Scanner wa:hrend des Systemstarts ausgeschaltet war, ko:nnen Sie
   die Gera:teerkennung erzwingen, indem Sie den SCSI-Bus erneut absuchen.
   Verwenden Sie dazu camcontrol:

 # camcontrol rescan all
 Re-scan of bus 0 was successful
 Re-scan of bus 1 was successful
 Re-scan of bus 2 was successful
 Re-scan of bus 3 was successful

   Der Scanner sollte jetzt in der SCSI-Gera:teliste erscheinen:

 # camcontrol devlist
 <IBM DDRS-34560 S97B>              at scbus0 target 5 lun 0 (pass0,da0)
 <IBM DDRS-34560 S97B>              at scbus0 target 6 lun 0 (pass1,da1)
 <AGFA SNAPSCAN 600 1.10>           at scbus1 target 2 lun 0 (pass3)
 <PHILIPS CDD3610 CD-R/RW 1.00>     at scbus2 target 0 lun 0 (pass2,cd0)

   Weitere Informationen u:ber SCSI-Gera:te unter FreeBSD finden Sie in
   scsi(4) und camcontrol(8).

  7.7.2. SANE konfigurieren

   SANE besteht aus zwei Teilen, den Backends (graphics/sane-backends) und
   den Frontends (graphics/sane-frontends oder graphics/xsane). Das Backend
   greift auf den Scanner zu. Lesen Sie
   http://www.sane-project.org/sane-supported-devices.html um herauszufinden,
   welches Backend welchen Scanner unterstu:tzt. Die Frontends sind die
   Anwendungen, mit denen gescannt wird. graphics/sane-frontends installiert
   xscanimage, wa:hrend graphics/xsane xsane installiert.

   Installieren Sie die beiden Komponenten als Paket:

 # pkg install xsane sane-frontends

   Alternativ ko:nnen Sie die Komponenten aus der Ports-Sammlung
   installieren:

 # cd /usr/ports/graphics/sane-frontends
 # make install clean
 # cd /usr/ports/graphics/xsane
 # make install clean

   Nachdem Sie den Port oder das Paket graphics/sane-backends installiert
   haben, ko:nnen Sie mit dem Befehl sane-find-scanner pru:fen, ob SANE den
   Scanner erkennt:

 # sane-find-scanner -q
 found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3

   Die Ausgabe zeigt die Schnittstelle und die verwendete Gera:tedatei des
   Scanners. Der Hersteller und das Modell ko:nnen in der Ausgabe fehlen.

  Anmerkung:

   Bei einigen USB-Scannern muss die Firmware geladen werden. Lesen Sie
   sane-find-scanner(1) und sane(7) fu:r weitere Details.

   Als na:chstes mu:ssen Sie pru:fen, ob der Scanner vom Frontend erkannt
   wird. Die SANE-Backends werden mit dem Kommandozeilenwerkzeug scanimage
   geliefert. Mit diesem Werkzeug ko:nnen Sie sich Scanner anzeigen lassen
   und den Scan-Prozess von der Kommandozeile starten. Die Option -L zeigt
   die Scanner an. Das erste Beispiel ist fu:r einen SCSI-Scanner, das zweite
   ist fu:r einen USB-Scanner:

 # scanimage -L
 device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
 # scanimage -L
 device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner

   Die Zeile 'epson2:libusb:/dev/usb:/dev/ugen0.2' im zweiten Beispiel nennt
   das Backend (epson2) und die Gera:tedatei (/dev/ugen0.2), die der Scanner
   verwendet.

   Wenn scanimage den Scanner nicht erkennen kann, erscheint folgende
   Meldung:

 # scanimage -L

 No scanners were identified. If you were expecting something different,
 check that the scanner is plugged in, turned on and detected by the
 sane-find-scanner tool (if appropriate). Please read the documentation
 which came with this software (README, FAQ, manpages).

   Wenn das passiert, mu:ssen Sie in der Konfigurationsdatei des Backends
   unterhalb von /usr/local/etc/sane.d/ den verwendeten Scanner eintragen.
   Wenn der Scanner EPSON Perfection(R) 1650, der das Backend epson2 benutzt,
   nicht erkannt wurde, muss /usr/local/etc/sane.d/epson2.conf angepasst
   werden. Fu:gen Sie eine Zeile mit der Schnittstelle und dem Gera:tenamen
   in die Datei ein. In diesem Beispiel wurde die nachstehende Zeile
   eingefu:gt:

 usb /dev/ugen0.2

   Speichern Sie die A:nderungen und pru:fen Sie, ob der Scanner mit dem
   richtigen Backend und Gera:tenamen erkannt wird:

 # scanimage -L
 device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner

   Wenn scanimage -L den Scanner erkannt hat, ist der Scanner eingerichtet
   und bereit, zu scannen.

   Obwohl scanimage von der Kommandozeile scannen kann, ist eine graphische
   Anwendung zum Scannen besser geeignet. SANE bietet ein einfaches und
   effizientes Werkzeug: xscanimage.

   Alternativ ist xsane, das u:ber den Port oder das Paket graphics/xsane
   installiert wird, eine weitere beliebte graphische Anwendung. Dieses
   Frontend besitzt erweiterte Funktionen wie den Scan-Modus, eine
   Farbkorrektur und Batch-Scans. Beide Anwendungen lassen sich als
   GIMP-Plugin verwenden.

  7.7.3. Berechtigungen fu:r den Scanner

   Wenn andere Benutzer den Scanner benutzen sollen, mu:ssen sie Lese- und
   Schreibrechte auf die Gera:tedatei des Scanners besitzen. Im vorherigen
   Beispiel wird die Datei /dev/ugen0.2 verwendet, die faktisch nur ein
   Symlink auf die echte Gera:tedatei, /dev/usb/0.2.0 genannt, darstellt.
   Sowohl der Symlink als auch die Gera:tedatei sind jeweils im Besitz der
   Gruppen wheel und operator. Damit ein Benutzer den Scanner benutzen kann,
   muss er Mitglied in einer der beiden Gruppen sein. Allerdings sollte aus
   Sicherheitsgru:nden genau u:berlegt werden, welche Benutzer zu welcher
   Gruppe hinzugefu:gt werden, besonders bei der Gruppe wheel. Eine bessere
   Lo:sung ist es, eine spezielle Gruppe fu:r den Zugriff anzulegen und den
   Scanner fu:r Mitglieder dieser Gruppe zuga:nglich zu machen.

   Dieses Beispiel erstellt eine Gruppe namens usb:

 # pw groupadd usb

   Anschliessend muss der /dev/ugen0.2-Symlink und der Gera:tename
   /dev/usb/0.2.0 fu:r die Gruppe usb mit den Schreibrechten 0660 oder 0664
   ausgestattet werden. All dies kann durch das Hinzufu:gen der folgenden
   Zeilen in /etc/devfs.rules erreicht werden:

 [system=5]
 add path ugen0.2 mode 0660 group usb
 add path usb/0.2.0 mode 0660 group usb

   Jetzt mu:ssen nur noch Benutzer zur Gruppe usb hinzugefu:gt werden, um
   ihnen den Zugriff auf den Scanner zu erlauben:

 #pw groupmod usb -m joe

   Weitere Details finden Sie in pw(8).

Kapitel 8. Konfiguration des FreeBSD-Kernels

   Inhaltsverzeichnis

   8.1. U:bersicht

   8.2. Wieso einen eigenen Kernel bauen?

   8.3. Informationen u:ber die vorhandene Hardware beschaffen

   8.4. Die Kernelkonfigurationsdatei

   8.5. Einen angepassten Kernel bauen und installieren

   8.6. Wenn etwas schiefgeht

8.1. U:bersicht

   Der Kernel ist das Herz des FreeBSD-Betriebssystems. Er ist verantwortlich
   fu:r die Speicherverwaltung, das Durchsetzen von Sicherheitsdirektiven,
   Netzwerkfa:higkeit, Festplattenzugriffen und vieles mehr. Obwohl FreeBSD
   es ermo:glicht, dynamisch konfiguriert zu werden, ist es ab und an
   notwendig, einen angepassten Kernel zu konfigurieren und zu kompilieren.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

     * Wann Sie einen angepassten Kernel kompilieren sollten.

     * Wie Sie eine Hardware-Inventur durchfu:hren.

     * Wie Sie eine Kernelkonfigurationsdatei vera:ndern.

     * Wie Sie mit der Konfigurationsdatei einen neuen Kernel kompilieren.

     * Wie Sie den neuen Kernel installieren.

     * Was zu tun ist, falls etwas schiefgeht.

   Alle Kommandos, aus den Beispielen dieses Kapitels, mu:ssen mit
   root-Rechten ausgefu:hrt werden.

8.2. Wieso einen eigenen Kernel bauen?

   Traditionell besass FreeBSD einen monolithischen Kernel. Der Kernel war
   ein einziges grosses Programm, das eine bestimmte Auswahl an Hardware
   unterstu:tzte. Um das Kernelverhalten zu a:ndern, musste man einen neuen
   Kernel kompilieren und dann den neuen Kernel booten.

   Heutzutage befinden sich die meisten Funktionen des FreeBSD-Kernels in
   Modulen, die je nach Bedarf dynamisch geladen und entladen werden ko:nnen.
   Dies erlaubt es, einen laufenden Kernel anzupassen, um sofort neue
   Hardware und neue Funktionen zu unterstu:tzen. Dies ist als modularer
   Kernel bekannt.

   Gelegentlich ist es noch notwendig, eine statische Kernelkonfigurationen
   durchzufu:hren. In einigen Fa:llen ist die Funktion zu systemnah, um durch
   ein Modul realisiert zu werden. Andere Umgebungen verhindern vielleicht
   das Laden und Entladen von Kernelmodulen und erfordern, dass nur die
   beno:tigte Funktionalita:t statisch in den Kernel kompiliert wird.

   Das Erstellen eines angepassten Kernels ist eines der Rituale fu:r
   erfahrene BSD-Benutzer. Obwohl dieser Prozess recht viel Zeit in Anspruch
   nimmt, kann er doch viele Vorteile fu:r das FreeBSD-System bringen. Im
   Gegensatz zum GENERIC-Kernel, der eine Vielzahl von Hardware unterstu:tzen
   muss, kann ein angepasster Kernel so eingeschra:nkt werden, dass er nur
   noch die Hardware des Rechners unterstu:tzt. Dies hat einige Vorteile:

     * Schnellerer Bootvorgang. Da der Kernel nur nach der Hardware des
       Systems sucht, kann sich die Zeit fu:r einen Systemstart verku:rzen.

     * Geringerer Speicherbedarf. Ein eigener Kernel beno:tigt in der Regel
       weniger Speicher als ein GENERIC-Kernel durch das Entfernen von
       Funktionen und Gera:tetreibern. Das ist vorteilhaft, denn der Kernel
       verweilt immer im RAM und verhindert dadurch, dass dieser Speicher von
       Anwendungen genutzt wird. Deshalb ist ein angepasster Kernel auf einem
       System mit wenig RAM sinnvoll.

     * Zusa:tzliche Hardwareunterstu:tzung. Ein angepasster Kernel kann
       Unterstu:tzung fu:r Gera:te bieten, die im GENERIC-Kernel nicht
       enthalten sind.

   Bevor Sie einen angepassten Kernel erstellen, u:berlegen Sie sich bitte,
   warum Sie dies tun wollen. Wenn Sie lediglich eine bestimmte
   Hardwareunterstu:tzung beno:tigen, existiert diese vielleicht schon als
   Kernelmodul.

   Kernelmodule existieren in /boot/kernel und ko:nnen mit kldload(8)
   dynamisch in den laufenden Kernel geladen werden. Die meisten
   Kerneltreiber verfu:gen u:ber ein ladbares Modul und eine Manualpage. Der
   drahtlose Ethernet-Treiber ath(4) hat die folgenden Informationen in
   seiner Manualpage:

 Alternatively, to load the driver as a module at boot time, place the
 following line in loader.conf(5):

     if_ath_load="YES"

   Durch das Hinzufu:gen von if_ath_load="YES" in /boot/loader.conf wird das
   Modul dynamisch beim Systemstart geladen.

   In manchen Fa:llen gibt es kein entsprechendes Modul in /boot/kernel. Dies
   gilt insbesondere fu:r bestimmte Subsysteme.

8.3. Informationen u:ber die vorhandene Hardware beschaffen

   Bevor die Kernelkonfigurationsdatei bearbeitet wird, ist es empfehlenswert
   eine Bestandsaufnahme der Hardware des Systems durchzufu:hren. Auf einem
   Dual-Boot-System ko:nnen diese Informationen aus dem anderen
   Betriebssystem ermittelt werden. Microsoft(R)s Gera:temanager entha:lt
   beispielsweise Informationen u:ber die installierte Hardware.

  Anmerkung:

   Einige Versionen von Microsoft(R) Windows(R) verfu:gen u:ber ein
   System-Icon auf dem Desktop, u:ber das Sie den Gera:temanager direkt
   aufrufen ko:nnen.

   Wenn FreeBSD das einzige installierte Betriebssystem ist, dann listet
   dmesg(8) die Hardware auf, die wa:hrend des Systemstarts gefunden wurde.
   Die meisten FreeBSD-Gera:tetreiber haben eine eigene Manualpage, die
   Informationen u:ber die unterstu:tzte Hardware entha:lt. Die folgenden
   Zeilen zeigen beispielsweise an, dass der psm(4)-Treiber eine
   angeschlossene Maus gefunden hat:

 psm0: <PS/2 Mouse> irq 12 on atkbdc0
 psm0: [GIANT-LOCKED]
 psm0: [ITHREAD]
 psm0: model Generic PS/2 mouse, device ID 0

   Da diese Hardware vorhanden ist, sollte dieser Treiber nicht aus einer
   angepassten Kernelkonfigurationsdatei entfernt werden.

   Wenn dmesg keine Informationen zur gefundenen Hardware anzeigt, ko:nnen
   diese Informationen auch aus /var/run/dmesg.boot entnommen werden.

   Ein weiteres Werkzeug fu:r die Suche nach Hardware ist pciconf(8), das
   ausfu:hrliche Informationen bereitstellt. Ein Beispiel:

 % pciconf -lv
 ath0@pci0:3:0:0:        class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
     vendor     = 'Atheros Communications Inc.'
     device     = 'AR5212 Atheros AR5212 802.11abg wireless'
     class      = network
     subclass   = ethernet

   Die Ausgabe zeigt, dass der Treiber ath eine drahtlose Ethernetkarte
   gefunden hat.

   Die Option -k von man(1) kann verwendet werden, um nu:tzliche
   Informationen zu erhalten. Um beispielsweise eine Liste von Manualpages zu
   erhalten, welche ein spezifisches Wort enthalten:

 # man -k Atheros

 ath(4)                   - Atheros IEEE 802.11 wireless network driver
 ath_hal(4)               - Atheros Hardware Access Layer (HAL)

   Mit einer Inventarliste der Hardware ko:nnen Sie dann sicherstellen, dass
   Sie die Treiber der installierten Hardware nicht versehentlich entfernen,
   wenn Sie die Kernelkonfigurationsdatei bearbeiten.

8.4. Die Kernelkonfigurationsdatei

   Bevor eine angepasste Kernelkonfigurationsdatei erstellt werden kann, muss
   zuerst der vollsta:ndige FreeBSD Quellcodebaum installiert werden.

   Falls /usr/src/ nicht existiert oder leer ist, sind die Kernelquellen
   nicht installiert. Die Quellen ko:nnen mit Subversion und der Anleitung im
   Abschnitt A.3, "Benutzen von Subversion" installiert werden.

   Sobald die Quellen installiert sind, ko:nnen Sie sich einen U:berblick
   u:ber /usr/src/sys verschaffen. Dieses Verzeichnis entha:lt eine Reihe von
   Unterverzeichnissen, einschliesslich Verzeichnisse fu:r die unterstu:tzten
   Architekturen amd64, i386, ia64, pc98, powerpc und sparc64. Alles in
   diesen Verzeichnissen ist nur fu:r die jeweilige Architektur relevant. Der
   Rest des Codes ist maschinenunabha:ngig und fu:r alle Architekturen
   gleich. Jede unterstu:tzte Architektur hat ein Unterverzeichnis conf, das
   die GENERIC Kernelkonfigurationsdatei fu:r diese Architektur entha:lt.

   Bearbeiten Sie GENERIC nicht direkt. Kopieren Sie stattdessen die Datei
   unter einem anderen Namen und machen dann die A:nderungen an dieser Kopie.
   Traditionell besteht der Name des Kernels immer aus Grossbuchstaben. Wenn
   Sie mehrere FreeBSD-Maschinen mit unterschiedlicher Hardware betreuen, ist
   es eine gute Idee, die Konfigurationsdatei nach den Hostnamen der
   Maschinen zu benennen. In diesem Beispiel wird eine Kopie der GENERIC
   Kernelkonfigurationsdatei, namens MYKERNEL, fu:r die amd64-Architektur
   erstellt:

 # cd /usr/src/sys/amd64/conf
 # cp GENERIC MYKERNEL

   MYKERNEL kann jetzt mit einem Texteditor bearbeitet werden. Der
   Standard-Editor ist vi, jedoch steht mit ee ein weiterer, einfach zu
   bedienender Editor bereit.

   Das Format der Konfigurationsdatei ist einfach. Jede Zeile entha:lt ein
   Schlu:sselwort, das ein Gera:t oder ein Subsystem repra:sentiert, ein
   Argument und eine kurze Beschreibung. Jeder Text, der hinter einem #
   steht, gilt als Kommentar und wird ignoriert. Um die Kernel-Unterstu:tzung
   fu:r ein Gera:t oder Subsystem zu entfernen, muss ein # an den Anfang der
   Zeile, die dieses Gera:t oder Subsystem repra:sentiert, gesetzt werden.
   Vera:ndern Sie keine Zeilen, die Sie nicht genau verstehen.

   Neben den Kurzbeschreibungen in dieser Datei, finden Sie zusa:tzliche
   Erkla:rungen in NOTES, die sich in demselben Verzeichnis wie GENERIC fu:r
   die jeweilige Architektur befindet. Von der Architektur unabha:ngige
   Optionen sind in /usr/src/sys/conf/NOTES aufgefu:hrt.

  Tipp:

   Wenn Sie die Kernelkonfigurationsdatei fertig bearbeitet haben, sollten
   Sie eine Sicherungskopie ausserhalb von /usr/src speichern

   Alternativ kann die Kernelkonfigurationsdatei an anderer Stelle
   gespeichert, und ein symbolischer Link auf die Datei erstellt werden:

 # cd /usr/src/sys/amd64/conf
 # mkdir /root/kernels
 # cp GENERIC /root/kernels/MYKERNEL
 # ln -s /root/kernels/MYKERNEL

   Es ist mo:glich, eine include-Anweisung in die Kernelkonfigurationsdatei
   aufzunehmen. Diese erlaubt das lokale Einfu:gen von anderen
   Konfigurationsdateien in die aktuelle, was es einfacher macht, kleinere
   A:nderungen an einer existierenden Datei zu vollziehen. Wenn Sie einen
   GENERIC-Kernel mit nur einer kleinen Anzahl von zusa:tzlichen Optionen und
   Treibern beno:tigen, brauchen Sie mit den folgenden Zeilen nur ein kleines
   Delta im Vergleich zu GENERIC anpassen, wie in diesem Beispiel zu sehen:

 include GENERIC
 ident MYKERNEL

 options         IPFIREWALL
 options         DUMMYNET
 options         IPFIREWALL_DEFAULT_TO_ACCEPT
 options         IPDIVERT

   Diese Methode zeigt die Unterschiede der lokalen Konfigurationsdatei zu
   einem GENERIC-Kernel an. Sobald Aktualisierungen durchgefu:hrt werden,
   ko:nnen neue Eigenschaften, die zu GENERIC hinzugefu:gt werden, auch dem
   lokalen Kernel angeha:ngt werden, es sei denn, es wird durch nooptions
   oder nodevice unterbunden. Eine umfassende Liste von
   Konfigurationseinstellungen und deren Beschreibungen finden Sie in
   config(5).

  Anmerkung:

   Um einen Kernel mit allen mo:glichen Optionen zu bauen, fu:hren Sie als
   root die folgenden Befehle aus:

 # cd /usr/src/sys/arch/conf && make LINT

8.5. Einen angepassten Kernel bauen und installieren

   Nachdem die A:nderungen an der angepassten Kernelkonfigurationsdatei
   gespeichert sind, kann der Quellcode fu:r den Kernel mit den folgenden
   Schritten u:bersetzt werden:

   Prozedur 8.1. Einen Kernel bauen
    1. Wechseln Sie das Verzeichnis:

 # cd /usr/src

    2. Bauen Sie den Kernel, indem Sie den Namen der
       Kernelkonfigurationsdatei angeben:

 # make buildkernel KERNCONF=MYKERNEL

    3. Installieren Sie den neuen Kernel. Dieser Befehl wird den neuen Kernel
       nach /boot/kernel/kernel kopieren, und den alten Kernel nach
       /boot/kernel.old/kernel speichern:

 # make installkernel KERNCONF=MYKERNEL

    4. Fahren Sie das System herunter und starten Sie den neuen Kernel. Wenn
       etwas nicht funktioniert, lesen Sie Der Kernel bootet nicht:.

   In der Voreinstellung werden beim Bau eines angepassten Kernels stets alle
   Kernelmodule neu gebaut. Um einen Kernel schneller zu bauen, oder um nur
   bestimmte Module zu bauen, bearbeiten Sie /etc/make.conf, bevor Sie den
   Kernel neu bauen.

   In diesem Beispiel werden u:ber eine Variable nur die Kernelmodule
   definiert, die auch tatsa:chlich gebaut werden sollen. In der
   Voreinstellung werden alle Module gebaut:

 MODULES_OVERRIDE = linux acpi

   Alternativ kann auch eine Variable verwendet werden, die bestimmte
   Kernelmodule vom Bauprozess ausschliesst:

 WITHOUT_MODULES = linux acpi sound

   Weitere Variablen und deren Beschreibung finden Sie in make.conf(5).

8.6. Wenn etwas schiefgeht

   Es gibt vier Hauptfehlerquellen beim Erstellen eines angepassten Kernels:

   config verursacht Fehler:

           Wenn config fehlschla:gt, zeigt es die Nummer der Zeile an, die
           das Problem verursacht. Bei der folgenden Fehlermeldung sollten
           Sie die angegebene Zeile mit GENERIC oder NOTES vergleichen und
           sicherstellen, dass das Schlu:sselwort in Zeile 17 richtig
           geschrieben ist:

 config: line 17: syntax error

   make verursacht Fehler:

           Wenn make fehlschla:gt, liegen meistens Fehler in der
           Konfigurationsdatei vor, die aber nicht schwerwiegend genug fu:r
           config waren. U:berpru:fen Sie die Konfiguration und wenn Sie
           keinen Fehler entdecken ko:nnen, schicken Sie eine E-Mail mit der
           Kernelkonfigurationsdatei an die Mailingliste 'Fragen und
           Antworten zu FreeBSD' <de-bsd-questions@de.FreeBSD.org>.

   Der Kernel bootet nicht:

           Wenn der neue Kernel nicht bootet oder die Gera:te nicht erkannt
           werden, ist das noch kein Grund zur Panik. Glu:cklicherweise
           besitzt FreeBSD einen exzellenten Mechanismus zur
           Wiederherstellung nach dem Einsatz inkompatibler Kernel. Wa:hlen
           Sie einfach den zu bootenden Kernel im FreeBSD Bootloader aus.
           Dazu wa:hlen Sie im Bootmenu: die Option "Escape to a loader
           prompt". Danach geben Sie am Prompt boot kernel.old oder den Namen
           eines anderen Kernels ein, der sauber bootet.

           Nun kann die Konfiguration noch einmal u:berpru:ft und der Kernel
           neu kompiliert werden. Dazu ist /var/log/messages sehr nu:tzlich,
           da hier sa:mtliche Kernelmeldungen von jedem erfolgreichen
           Bootvorgang gespeichert werden. dmesg(8) gibt die Kernelmeldungen
           vom letzten Bootvorgang aus.

  Anmerkung:

           Wenn Sie Probleme beim Kernelbau bekommen, heben Sie sich immer
           eine Kopie von GENERIC oder einen anderen Kernel, der garantiert
           bootet, auf. Dies ist sehr wichtig, weil jedes Mal, wenn ein neuer
           Kernel installiert wird, kernel.old mit dem zuletzt installierten
           Kernel u:berschrieben wird und dieser mo:glicherweise nicht
           bootfa:hig ist. Verschieben Sie daher den funktionierenden Kernel
           so schnell wie mo:glich, indem Sie das Verzeichnis mit dem
           funktionierenden Kernel umbenennen:

 # mv /boot/kernel /boot/kernel.bad
 # mv /boot/kernel.good /boot/kernel

   Der Kernel funktioniert, aber ps nicht

           Wenn Sie eine andere Version des Kernels installiert haben als
           die, mit der Ihre Systemwerkzeuge gebaut wurden, beispielsweise
           einen Kernel aus den -CURRENT-Quellen auf einem -RELEASE-System,
           werden Programme wie ps(1) und vmstat(8) nicht mehr funktionieren.
           Um dies zu beheben, sollten Sie das komplette System neu bauen und
           installieren. Achten Sie darauf, dass die Quellen, aus denen das
           System gebaut wird, zum installierten Kernel passt. Man sollte
           niemals einen Kernel benutzen, der nicht zur Systemversion passt.

Kapitel 9. Drucken

   Beigetragen von Warren Block.
   U:bersetzt von Bjo:rn Heidotting.
   Inhaltsverzeichnis

   9.1. Schnellstart

   9.2. Druckerverbindungen

   9.3. Gebra:uchliche Seitenbeschreibungssprachen

   9.4. Direktes Drucken

   9.5. LPD (Line Printer Daemon)

   9.6. Andere Drucksysteme

   Trotz vieler Versuche es zu vermeiden, ist der Druck von Informationen auf
   Papier immer noch eine wichtige Funktion. Drucken hat zwei grundlegende
   Komponenten. Die Daten mu:ssen an den Drucker gesendet werden, und zwar in
   einer Form, die der Drucker verstehen kann.

9.1. Schnellstart

   Die grundlegende Druckfunktion kann schnell eingerichtet werden. Der
   Drucker muss lediglich fa:hig sein, normalen ASCII-Text zu drucken.
   Informationen zum Druck von anderen Dateien finden Sie in Abschnitt 9.5.3,
   "Filter".

    1. Erstellen Sie ein Verzeichnis zur Speicherung der Druckauftra:ge:

 # mkdir -p /var/spool/lpd/lp
 # chown daemon:daemon /var/spool/lpd/lp
 # chmod 770 /var/spool/lpd/lp

    2. Erstellen Sie als root die Datei /etc/printcap mit folgendem Inhalt:

 lp:\
         :lp=/dev/unlpt0:\  1
         :sh:\
         :mx#0:\
         :sd=/var/spool/lpd/lp:\
         :lf=/var/log/lpd-errs:

       1 Diese Zeile ist fu:r einen Drucker, der an einem USB-Port            
         angeschlossen ist.                                                   
                                                                              
         Fu:r einen Drucker, der am parallelen oder "Drucker"-Port            
         angeschlossen ist, verwenden Sie:                                    
                                                                              
         :lp=/dev/lpt0:\                                                      
                                                                              
         Fu:r einen Netzwerkdrucker verwenden Sie:                            
                                                                              
         :lp=:rm=network-printer-name:rp=raw:\                                
                                                                              
         Ersetzen Sie network-printer-name durch den DNS-Namen des            
         Netzwerkdruckers.                                                    

    3. Aktivieren Sie lpd beim Systemstart, indem Sie folgende Zeile in
       /etc/rc.conf hinzufu:gen:

 lpd_enable="YES"

       Starten Sie den Dienst:

 # service lpd start
 Starting lpd.

       Drucken Sie eine Testseite:

 # printf "1. Der Drucker kann drucken.\n2. Dies ist die zweite Zeile.\n" | lpr

  Tipp:

       Wenn die beiden Zeilen nicht am linken Rand starten und Sie einen
       "Treppeneffekt" beobachten, lesen Sie Abschnitt 9.5.3.1, "Den
       Treppeneffekt verhindern".

       Mit lpr ko:nnen nun Textdateien gedruckt werden. Geben Sie den
       Dateinamen auf der Kommandozeile an oder lassen Sie lpr von einer Pipe
       lesen.

 % lpr textfile.txt
 % ls -lh | lpr

9.2. Druckerverbindungen

   Es gibt eine Vielzahl von Mo:glichkeiten, einen Drucker mit einem Rechner
   zu verbinden. Kleine Desktop-Drucker werden in der Regel mit dem
   USB-Anschluss verbunden, a:ltere Modelle nutzen oft die parallele
   Schnittstelle. Einige Drucker sind direkt mit einem Netzwerk verbunden,
   damit sie leichter von mehreren Rechnern benutzt werden ko:nnen. Nur noch
   wenige Drucker verwenden einen seriellen Anschluss.

   FreeBSD unterstu:tzt die folgenden Arten von Druckern:

   USB

           USB-Drucker ko:nnen mit einem freien USB-Anschluss des Rechners
           verbunden werden.

           Wenn FreeBSD einen USB-Drucker erkennt, werden zwei Gera:tenamen
           erstellt: /dev/ulpt0 und /dev/unlpt0. Beide Gera:te leiten die
           Daten an den Drucker weiter. Nach jedem Druckauftrag wird der
           USB-Anschluss von ultp0 zuru:ckgesetzt. Das Zuru:cksetzen kann bei
           einigen Druckern Probleme verursachen, daher wird in der Regel
           stattdessen unlpt0 verwendet, das den Anschluss nicht
           zuru:cksetzt.

   Prallel (IEEE-1284)

           Die parallele Schnittstelle ist /dev/lpt0. Der Gera:tename
           erscheint unabha:ngig davon, ob ein Drucker angeschlossen ist oder
           nicht. Eine automatische Erkennung findet nicht statt.

           Die Hersteller haben sich weitgehend von diesem a:lteren Anschluss
           verabschiedet und auch viele Rechner haben keine parallele
           Schnittstelle mehr. Es existieren jedoch Adapter, um einen
           parallelen Drucker an einem USB-Port anzuschliessen. Der Drucker
           wird dann wie ein USB-Drucker behandelt. Es ko:nnen auch
           Printserver verwendet werden, um parallele Drucker direkt mit
           einem Netzwerk zu verbinden.

   Seriell (RS-232)

           Serielle Anschlu:sse sind veraltet und werden ausser in
           Nischenanwendungen nur noch selten verwendet. Die Kabel, Stecker
           und die erforderliche Verkabelung sind oft sehr unterschiedlich.

           Der Gera:tename fu:r einen seriellen Anschlu:sse ist /dev/cuau0
           oder /dev/cuau1. Es ko:nnen auch USB-Adapter verwendet werden.
           Diese erscheinen als /dev/cuaU0.

           Damit mit dem Drucker kommuniziert werden kann, mu:ssen einige
           Kommunikationsparameter bekannt sein. Zu den wichtigsten za:hlen
           die Baudrate (BPS - Bits pro Sekunde) und die Parita:t. Diese
           Werte variieren, aber typische serielle Drucker verwenden eine
           Baudrate von 9600 und keine Parita:t.

   Netzwerk

           Netzwerkdrucker werden direkt mit dem lokalen Netzwerk verbunden.

           Der DNS-Name des Druckers muss bekannt sein. Wenn dem Drucker eine
           dynamische Adresse per DHCP zugeteilt wird, sollte das DNS
           automatisch aktualisiert werden, so dass der Drucker immer die
           richtige IP-Adresse hat. Um dieses Problem zu vermeiden, werden
           Netzwerkdruckern ha:ufig statische IP-Adressen zugeteilt.

           Die meisten Netzwerkdrucker verstehen Druckauftra:ge, die u:ber
           das LPD-Protokoll empfangen werden. Sie ko:nnen auch den Namen der
           Druckwarteschlange angeben. Einige Drucker verarbeiten die Daten
           unterschiedlich, je nachdem welche Warteschlange verwendet wird.
           Zum Beispiel druckt eine Raw-Warteschlange die Daten unvera:ndert,
           wa:hrend eine Text-Warteschlange den Text um Wagenru:ckla:ufe
           erga:nzt.

           Viele Netzwerkdrucker ko:nnen auch Daten drucken, die direkt an
           Port 9100 gesendet werden.

  9.2.1. Zusammenfassung

   Verkabelte Netzwerkdrucker drucken in der Regel am schnellsten und sind
   einfach einzurichten. Fu:r den direkten Anschluss am Rechner wird USB
   wegen seiner Geschwindigkeit und Einfachheit bevorzugt. Parallele
   Verbindungen funktionieren, haben jedoch ihre Begrenzung in Bezug auf
   Kabella:nge und Geschwindigkeit. Serielle Verbindungen sind schwieriger zu
   konfigurieren und die Verdrahtung unterscheidet sich zwischen den
   Modellen. Zudem mu:ssen Baudrate und Parita:t bekannt sein.
   Glu:cklicherweise sind serielle Drucker selten geworden.

9.3. Gebra:uchliche Seitenbeschreibungssprachen

   Daten, die an einen Drucker gesendet werden, mu:ssen in einer Sprache
   verfasst sein, die der Drucker verstehen kann. Diese Sprachen werden
   Seitenbeschreibungssprachen oder Page Description Languages (PDL) genannt.

   ASCII

           Schlichter ASCII-Text ist die einfachste Mo:glichkeit, um Daten an
           einen Drucker zu senden. Die Zeichen werden eins zu eins gedruckt:
           ein A in den Daten erscheint beim Druck als A auf dem Papier. Eine
           Formatierung ist nur bedingt verfu:gbar und es gibt keine
           Mo:glichkeit, eine Schriftart oder eine bestimmte Laufweite zu
           wa:hlen. Die Einfachheit von schlichtem ASCII-Text bedeutet, dass
           Text ohne bzw. wenig Codierung oder U:bersetzung gedruckt werden
           kann. Die gedruckte Ausgabe entspricht dem, was an den Drucker
           gesendet wurde.

           Einige kostengu:nstige Drucker ko:nnen keinen einfachen ASCII-Text
           drucken. Das macht sie in der Regel schwieriger einzurichten.

   PostScript(R)

           PostScript(R) ist fast das Gegenteil von ASCII. Anstelle von
           einfachem Text, besteht ein PostScript(R)-Programm aus einer Reihe
           von Anweisungen, die das endgu:ltige Dokument generieren. Es
           ko:nnen auch verschiedene Schriften und Grafiken benutzt werden.
           Diese Fa:higkeiten haben jedoch ihren Preis. Das Programm, das die
           Seite generiert, muss zuna:chst erzeugt werden. Normalerweise wird
           dieses Programm durch die Anwendung erzeugt, so dass der Prozess
           fu:r den Benutzer transparent bleibt.

           Kostengu:nstige Drucker sind manchmal nicht kompatibel mit
           PostScript(R).

   PCL (Printer Command Language)

           PCL ist eine Erweiterung von ASCII. Es entha:lt Escape-Sequenzen
           fu:r die Formatierung, Schriftauswahl und das Drucken von
           Grafiken. Viele Drucker bieten Unterstu:tzung fu:r PCL5, einige
           unterstu:tzen auch das neuere PCL6 oder PCLXL. Die neueren
           Versionen sind Kombinationen von PCL5 und bieten eine schnellere
           Druckgeschwindigkeit.

   Host-basiert

           Hersteller ko:nnen die Kosten eines Druckers reduzieren, indem sie
           einen einfachen Prozessor und etwas Speicher verbauen. Diese
           Drucker sind nicht in der Lage normalen Text zu drucken.
           Stattdessen werden die Texte und Grafiken von einem Treiber auf
           dem Host-Rechner generiert und dann an den Drucker gesendet. Diese
           Drucker werden Host-basierte Drucker genannt.

           Die Kommunikation zwischen dem Treiber und dem Drucker wird oft
           durch proprieta:re oder nicht dokumentierte Protokolle realisiert,
           weshalb sie nur mit den ga:ngigsten Betriebssystemen
           funktionieren.

  9.3.1. PostScript(R) in eine andere Sprache konvertieren

   Viele Anwendungen aus der Ports-Sammlung und FreeBSD Werkzeuge ko:nnen
   PostScript(R) erzeugen. Die folgende Tabelle listet die verfu:gbaren
   Programme, um PostScript(R) in andere PDLs zu konvertieren:

   Tabelle 9.1. Ausgabe PDLs

   +------------------------------------------------------------------------+
   | Ausgabe PDL   | Generiert von      | Hinweis                           |
   |---------------+--------------------+-----------------------------------|
   | PCL oder PCL5 | print/ghostscript9 | -sDEVICE=ljet4 fu:r Schwarzweiss, |
   |               |                    | -sDEVICE=cljet5 fu:r Farbe        |
   |---------------+--------------------+-----------------------------------|
   | PCLXL oder    |                    | -sDEVICE=pxlmono fu:r             |
   | PCL6          | print/ghostscript9 | Schwarzweiss, -sDEVICE=pxlcolor   |
   |               |                    | fu:r Farbe                        |
   |---------------+--------------------+-----------------------------------|
   | ESC/P2        | print/ghostscript9 | -sDEVICE=uniprint                 |
   |---------------+--------------------+-----------------------------------|
   | XQX           | print/foo2zjs      |                                   |
   +------------------------------------------------------------------------+

  9.3.2. Zusammenfassung

   Um die Konfiguration einfach zu halten, wa:hlen Sie einen Drucker, der
   PostScript(R) oder auch PCL unterstu:tzt. Mit print/ghostscript ko:nnen
   diese Drucker PostScript(R) nativ verstehen. Wenn der Drucker
   PostScript(R) oder PCL direkt unterstu:tzt, ko:nnen Sie auch sofort
   einfache ASCII-Textdateien drucken.

   Zeilenbasierte Drucker wie Tintenstrahldrucker unterstu:tzen in der Regel
   kein PostScript(R) oder PCL. Dennoch ko:nnen Sie ASCII-Textdateien
   drucken. print/ghostscript unterstu:tzt die Sprachen dieser Drucker.
   Jedoch ist der Druck von Grafiken auf diesen Druckern oft sehr langsam, da
   aufgrund der grossen Menge an Daten u:bertragen und ausgedruckt werden
   mu:ssen.

   Host-basierte Drucker sind oft schwieriger einzurichten. Einige Drucker
   ko:nnen u:berhaupt nicht benutzt werden, da sie propriera:te PDLs
   verwerden. Solche Drucker sollten Sie nach Mo:glichkeit vermeiden.

   Die Beschreibungen vieler PDLs finden Sie auf
   http://www.undocprint.org/formats/page_description_languages. Spezielle
   PDLs, die von einigen Druckern verwendet werden finden Sie auf
   http://www.openprinting.org/printers.

9.4. Direktes Drucken

   Fu:r den gelegentlichen Druck ko:nnen die Dateien auch direkt, ohne
   zusa:tzliche Einstellungen, an den Drucker gesendet werden. Zum Beispiel
   kann die Datei sample.txt direkt an einen USB-Drucker gesendet werden:

 # cp sample.txt /dev/unlpt0

   Ob Sie direkt auf einen Netzwerkdrucker drucken ko:nnen, ha:ngt von den
   Fa:higkeiten des Druckers ab. Die meisten akzeptieren jedoch
   Druckauftra:ge auf Port 9100, die Sie mit nc(1) an den Drucker senden
   ko:nnen. So drucken Sie die gleiche Datei auf einem Drucker mit dem
   DNS-Namen netlaser:

 # nc netlaser 9100 < sample.txt

9.5. LPD (Line Printer Daemon)

   Drucken im Hintergrund wird Spooling genannt. Ein Spooler (Warteschlange)
   ermo:glicht es dem Benutzer die Programme auf dem Rechner fortzusetzen,
   ohne warten zu mu:ssen bis der Druckauftrag abgeschlossen ist.

   FreeBSD entha:lt den Spooler namens lpd(8). Druckauftra:ge werden mit
   lpr(1) u:bermittelt.

  9.5.1. Konfiguration

   Erstellen Sie ein Verzeichnis zur Speicherung der Druckauftra:ge und
   setzen Sie die Berechtigungen auf diesem Verzeichnis, damit der Inhalt der
   Druckauftra:ge nicht von anderen Benutzern eingesehen werden kann:

 # mkdir -p /var/spool/lpd/lp
 # chown daemon:daemon /var/spool/lpd/lp
 # chmod 770 /var/spool/lpd/lp

   Drucker werden in /etc/printcap angelegt. Ein Eintrag fu:r einen Drucker
   entha:lt dessen Name, Anschluss sowie weitere Einstellungen. Erstellen Sie
   /etc/printcap mit folgendem Inhalt:

 lp:\                            1
         :lp=/dev/unlpt0:\       2
         :sh:\                   3
         :mx#0:\                 4
         :sd=/var/spool/lpd/lp:\ 5
         :lf=/var/log/lpd-errs:  6

   1 Der Name des Druckers. lpr(1) sendet Druckauftra:ge an den Drucker lp,   
     es sei denn, ein anderer Drucker wird mit der Option -P angegeben. Der   
     Standarddrucker sollte also lp genannt werden.                           
   2 Der Anschluss, u:ber den der Drucker verbunden ist. Ersetzen Sie diese   
     Zeile mit dem entsprechenden, hier aufgefu:hrten Verbindungstyp.         
                                                                              
     +----------------------------------------------------------------------+ 
     | Verbindungstyp |            Gera:tename in /etc/printcap             | 
     |----------------+-----------------------------------------------------| 
     |                |:lp=/dev/unlpt0:\                                    | 
     |                |                                                     | 
     | USB            | Der USB-Drucker. Falls Probleme auftauchen,         | 
     |                | verwenden Sie stattdessen ulpt0, das den            | 
     |                | USB-Anschluss nach jedem Gebrauch zuru:cksetzt.     | 
     |----------------+-----------------------------------------------------| 
     | Parallel       |:lp=/dev/lpt0:\                                      | 
     |----------------+-----------------------------------------------------| 
     |                | Fu:r einen Drucker, der das LPD-Protokoll           | 
     |                | unterstu:tzt:                                       | 
     |                |                                                     | 
     |                |:lp=:rm=network-printer-name:rp=raw:\                | 
     |                |                                                     | 
     | Netzwerk       | Fu:r Drucker, die den Druck u:ber Port 9100         | 
     |                | unterstu:tzen:                                      | 
     |                |                                                     | 
     |                |:lp=9100@network-printer-name:\                      | 
     |                |                                                     | 
     |                | Ersetzen Sie fu:r beide Typen network-printer-name  | 
     |                | durch den DNS-Namen des Netzwerkdruckers.           | 
     |----------------+-----------------------------------------------------| 
     |                |:lp=/dev/cuau0:br=9600:pa=none:\                     | 
     |                |                                                     | 
     | Seriell        | Diese Werte sind fu:r einen typischen seriellen     | 
     |                | Drucker geeignet. Die Baudrate betra:gt 9600 und es | 
     |                | wird keine Parita:t benutzt.                        | 
     +----------------------------------------------------------------------+ 
   3 Unterdru:ckt das Drucken eines Deckblattes zu Beginn des Druckauftrags.  
   4 Die maximale Gro:sse des Druckauftrags wird nicht begrenzt.              
   5 Das Verzeichnis zur Speicherung der Druckdaten. Jeder Drucker verwendet  
     ein eigenes Verzeichnis.                                                 
   6 Die Logdatei, in welche die Fehler des Druckers geschrieben werden.      

   Nachdem Sie /etc/printcap erstellt haben, verwenden Sie chkprintcap(8) um
   die Datei auf Fehler zu testen:

 # chkprintcap

   Beheben Sie alle gemeldeten Fehler, bevor Sie fortfahren.

   Aktivieren Sie lpd(8) in /etc/rc.conf:

 lpd_enable="YES"

   Starten Sie den Dienst:

 # service lpd start

  9.5.2. Drucken mit lpr(1)

   Mit lpr werden Dokumente an den Drucker geschickt. Die Datei ko:nnen Sie
   auf der Kommandozeile angeben, oder u:ber eine Pipe an lpr schicken. Die
   beiden folgenden Kommandos sind gleichwertig, sie schicken den Inhalt von
   doc.txt an den Standarddrucker:

 % lpr doc.txt
 % cat doc.txt | lpr

   Drucker ko:nnen auch mit -P ausgewa:hlt werden. Um auf einen Drucker
   namens laser zu drucken:

 % lpr -Plaser doc.txt

  9.5.3. Filter

   In den bisher gezeigten Beispielen wurde lediglich eine Textdatei an den
   Drucker gesendet. Solange der Drucker den Inhalt dieser Dateien versteht,
   wird die Ausgabe korrekt gedruckt werden.

   Einige Drucker sind nicht in der Lage einfachen Text zu drucken. Es kann
   sogar sein, das die Eingabedatei gar keinen Text entha:lt.

   Mit Hilfe von Filtern ko:nnen Dateien u:bersetzt oder verarbeitet werden.
   Ein typischer Anwendungsfall ist die Umwandlung der Eingabedaten in ein
   Format, das der Drucker verstehen kann, wie bspw. PostScript(R) oder PCL.
   Filter ko:nnen auch verwendet werden um zusa:tzliche Funktionen
   hinzuzufu:gen, wie bspw. Seitenzahlen oder das Hervorheben von Quellcode,
   um die Lesbarkeit zu verbessern.

   Die hier beschriebenen Filter werden Eingabefilter oder auch Textfilter
   genannt. Diese Filter u:bersetzen die eingehende Datei in verschiedene
   Formen. Werden Sie mit su(1) zu root, bevor Sie die Dateien erstellen.

   Filter werden in /etc/printcap mit der Kennung if= festgelegt. Um
   /usr/local/libexec/lf2crlf als Filter einzusetzen, bearbeiten Sie
   /etc/printcap wie folgt:

 lp:\
         :lp=/dev/unlpt0:\
         :sh:\
         :mx#0:\
         :sd=/var/spool/lpd/lp:\
         :if=/usr/local/libexec/lf2crlf:\   1
         :lf=/var/log/lpd-errs:

   1 if= identifiziert den Eingangsfilter, der auf den eingehenden Text       
     angewendet werden soll.                                                  

  Tipp:

   Der Backslash am Ende der Zeilen zeigt an, das ein Eintrag fu:r einen
   Drucker wirklich nur eine Zeile ist, in der die einzelnen Eintra:ge durch
   einen Doppelpunkt getrennt sind. Das Beispiel ha:tte man auch wie folgt
   schreiben ko:nnen:

 lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs:

    9.5.3.1. Den Treppeneffekt verhindern

   Typische Textdateien enthalten einen Zeilenvorschub am Ende jeder Zeile.
   Diese Zeilen erzeugen auf dem Drucker einen "Treppeneffekt":

 A printed file looks
                     like the steps of a staircase
                                                  scattered by the wind

   Ein Filter kann Zeilenumbru:che in Wagenru:ckla:ufe und Zeilenumbru:che
   konvertieren. Erstellen Sie /usr/local/libexec/lf2crlf mit folgendem
   Inhalt:

 #!/bin/sh
 CR=$'\r'
 /usr/bin/sed -e "s/$/${CR}/g"

   Setzen Sie die Berechtigungen und machen Sie die Datei ausfu:hrbar:

 # chmod 555 /usr/local/libexec/lf2crlf

   Passen Sie /etc/printcap an, so dass der neue Filter verwendet wird:

 :if=/usr/local/libexec/lf2crlf:\

   Drucken Sie nochmal die gleiche Datei, um den Filter zu testen.

    9.5.3.2. Mit print/enscript normalen Text auf PostScript(R)-Druckern drucken

   GNU Enscript wandelt Textdateien in formatiertes PostScript(R) um, die
   dann auf PostScript(R)-Druckern gedruckt werden ko:nnen. Das Programm
   fu:gt auch Seitenzahlen und Zeilenumbru:che hinzu und stellt andere
   Funktionen bereit, um gedruckte Textdateien besser lesbar zu machen.
   Abha:ngig vom Papierformat ko:nnen Sie entweder print/enscript-letter oder
   print/enscript-a4 aus der Ports-Sammlung installieren.

   Erstellen Sie /usr/local/libexec/enscript mit diesem Inhalt:

 #!/bin/sh
 /usr/local/bin/enscript -o -

   Setzen Sie die Berechtigungen und machen Sie die Datei ausfu:hrbar:

 # chmod 555 /usr/local/libexec/enscript

   Bearbeiten Sie /etc/printcap um den neuen Filter zu verwenden:

 :if=/usr/local/libexec/enscript:\

   Testen Sie den Filter, indem Sie eine einfache Textdatei drucken.

    9.5.3.3. PostScript(R) auf PCL-Druckern drucken

   Viele Programme erzeugen PostScript(R)-Dokumente. Allerdings ko:nnen
   kostengu:nstige Drucker oft nur Textdateien oder PCL verstehen. Dieser
   Filter wandelt PostScript(R)-Dateien in PCL um, bevor die Datei an den
   Drucker geschickt wird. Installieren Sie den Ghostscript PostScript(R)
   Interpreter print/ghostscript9 aus der Ports-Sammlung.

   Erstellen Sie /usr/local/libexec/ps2pcl mit diesem Inhalt:

 #!/bin/sh
 /usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- -

   Setzen Sie die Berechtigungen und machen Sie die Datei ausfu:hrbar:

 # chmod 555 /usr/local/libexec/ps2pcl

   Die PostScript(R)-Eingabe wird von dem Skript erst in PCL umgewandelt,
   bevor es an den Drucker geschickt wird.

   Bearbeiten Sie /etc/printcap um den neuen Filter zu verwenden:

 :if=/usr/local/libexec/ps2pcl:\

   Testen Sie den Filter mit einem kleinen PostScript(R)-Programm.

 % printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \
 72 432 moveto (PostScript printing successful.) show showpage \004" | lpr

    9.5.3.4. Intelligente Filter

   Ein Filter kann sehr nu:tzlich sein, wenn er die Eingabe erkennt und sie
   automatisch in ein fu:r den Drucker versta:ndliches Format umwandelt. Die
   ersten beiden Zeichen in einer PostScript(R)-Datei sind in der Regel %!.
   Ein Filter ist in der Lage diese beiden Zeichen zu erkennen.
   PostScript(R)-Dateien ko:nnen unvera:ndert an einen PostScript(R)-Drucker
   geschickt werden. Textdateien ko:nnen, wie eben gezeigt, mit Enscript in
   PostScript(R) umgewandelt werden. Erstellen Sie /usr/local/libexec/psif
   mit diesem Inhalt:

 #!/bin/sh
 #
 #  psif - Print PostScript or plain text on a PostScript printer
 #
 IFS="" read -r first_line
 first_two_chars=`expr "$first_line" : '\(..\)'`

 case "$first_two_chars" in
 %!)
     # %! : PostScript job, print it.
     echo "$first_line" && cat && exit 0
     exit 2
     ;;
 *)
     # otherwise, format with enscript
     ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - && exit 0
     exit 2
     ;;
 esac

   Setzen Sie die Berechtigungen und machen Sie die Datei ausfu:hrbar:

 # chmod 555 /usr/local/libexec/psif

   Bearbeiten Sie /etc/printcap um den neuen Filter zu verwenden:

 :if=/usr/local/libexec/psif:\

   Um den Filter zu testen, drucken Sie PostScript(R)- und einfache
   Textdateien.

    9.5.3.5. Weitere intelligente Filter

   Einen Filter zu schreiben, der verschiedene Arten von Eingaben erkennen
   und formatieren kann, ist eine grosse Herausforderung. print/apsfilter aus
   der Ports-Sammlung ist auch ein intelligenter Filter, der Dutzende
   Dateitypen automatisch in eine fu:r den Drucker versta:ndliche PDL
   umwandeln kann. Weitere Details finden Sie auf http://www.apsfilter.org.

  9.5.4. Mehrere Warteschlangen

   Die Eintra:ge in /etc/printcap sind nichts anderes als Definitionen von
   Warteschlangen. Fu:r jeden Drucker ko:nnen eine oder mehrere
   Warteschlangen definiert werden. Kombiniert mit Filtern bieten mehrere
   Warteschlangen eine bessere Kontrolle u:ber die Druckauftra:ge.

   Als Beispiel dient ein vernetzter PostScript(R)-Laserdrucker in einem
   Bu:ro. Die meisten Benutzer mo:chten einfache Textdateien drucken, aber
   ein paar fortgeschrittene Anwender sollen in der Lage sein,
   PostScript(R)-Dateien direkt zu drucken. Hierfu:r werden zwei Eintra:ge
   fu:r den Drucker in /etc/printcap erstellt:

 textprinter:\
         :lp=9100@officelaser:\
         :sh:\
         :mx#0:\
         :sd=/var/spool/lpd/textprinter:\
         :if=/usr/local/libexec/enscript:\
         :lf=/var/log/lpd-errs:

 psprinter:\
         :lp=9100@officelaser:\
         :sh:\
         :mx#0:\
         :sd=/var/spool/lpd/psprinter:\
         :lf=/var/log/lpd-errs:

   Dokumente, die zum textprinter geschickt werden, werden wie im vorherigen
   Beispiel durch den Filter /usr/local/libexec/enscript formatiert.
   Fortgeschrittene Anwender ko:nnen PostScript(R)-Dateien direkt auf dem
   Drucker psprinter drucken, wo keine Filterung stattfindet.

   Mit mehreren Warteschlangen ko:nnen Sie einen direkten Zugriff auf alle
   Arten von Druckerfunktionen zur Verfu:gung stellen. Ein Duplex-Drucker
   ko:nnte zwei Warteschlangen verwenden, eine fu:r den gewo:hnlichen Druck
   und eine fu:r den Duplexdruck.

  9.5.5. Druckauftra:ge steuern und u:berwachen

   Es stehen verschiedene Programme zur Verfu:gung um Druckauftra:ge zu
   u:berwachen und den Druckbetrieb zu steuern.

    9.5.5.1. lpq(1)

   lpq(1) zeigt den Status der Druckauftra:ge des Benutzers an.
   Druckauftra:ge anderer Benutzer werden nicht angezeigt.

   Dieser Befehl zeigt die anstehenden Druckauftra:ge eines Benutzers fu:r
   einen Drucker an:

 % lpq -Plp
 Rank   Owner      Job  Files                                 Total Size
 1st    jsmith     0    (standard input)                      12792 bytes

   Der folgende Befehl zeigt die anstehenden Druckauftra:ge eines Benutzers
   fu:r alle Drucker an:

 % lpq -a
 lp:
 Rank   Owner      Job  Files                                 Total Size
 1st    jsmith     1    (standard input)                      27320 bytes

 laser:
 Rank   Owner      Job  Files                                 Total Size
 1st    jsmith     287  (standard input)                      22443 bytes

    9.5.5.2. lprm(1)

   Mit lprm(1) ko:nnen Druckauftra:ge gelo:scht werden. Normale Benutzer
   du:rfen lediglich ihre eigenen Auftra:ge lo:schen. root kann hingegen
   jeden beliebigen Auftrag lo:schen.

   Dieser Befehl lo:scht alle anstehenden Druckauftra:ge eines Druckers:

 # lprm -Plp -
 dfA002smithy dequeued
 cfA002smithy dequeued
 dfA003smithy dequeued
 cfA003smithy dequeued
 dfA004smithy dequeued
 cfA004smithy dequeued

   Mit dem folgenden Befehl lo:schen Sie einen bestimmten Druckauftrag.
   Benutzen Sie lpq(1), um die Nummer des Auftrags zu finden.

 % lpq
 Rank   Owner      Job  Files                                 Total Size
 1st    jsmith     5    (standard input)                      12188 bytes
 % lprm -Plp 5
 dfA005smithy dequeued
 cfA005smithy dequeued

    9.5.5.3. lpc(8)

   Mit lpc(8) kann der Druckerstatus u:berpru:ft und vera:ndert werden. lpc
   wird zusammen mit einem Kommando und optional mit einem Druckernamen
   aufgerufen. Mit all ko:nnen alle Drucker angesprochen werden, auf denen
   das Kommando ausgefu:hrt werden soll. Normale Benutzer ko:nnen sich den
   Status mit lpc(8) ansehen. Nur root darf Kommandos ausfu:hren, die den
   Status des Druckers vera:ndern.

   Dieser Befehl zeigt den Status von allen Druckern an:

 % lpc status all
 lp:
         queuing is enabled
         printing is enabled
         1 entry in spool area
         printer idle
 laser:
         queuing is enabled
         printing is enabled
         1 entry in spool area
         waiting for laser to come up

   Der Drucker kann die Annahme neuer Druckauftra:ge verweigern.
   Anschliessend sollen Auftra:ge wieder akzeptiert werden:

 # lpc stop lp
 lp:
         printing disabled
 # lpc start lp
 lp:
         printing enabled
         daemon started

   Starten Sie den Drucker nach einem Fehler neu:

 # lpc restart lp
 lp:
         no daemon to abort
         printing enabled
         daemon restarted

   Schalten Sie die Warteschlange aus und deaktivieren Sie den Druck. Sie
   ko:nnen den Benutzern gleichzeitig eine Nachricht hinterlassen:

 # lpc down lp Ersatzteile werden am Montag ankommen
 lp:
         printer and queuing disabled
         status message is now: Ersatzteile werden am Montag ankommen

   Reaktivieren Sie den Drucker:

 # lpc up lp
 lp:
         printing enabled
         daemon started

   Weitere Kommandos und Optionen finden Sie in lpc(8).

  9.5.6. Gemeinsam genutzte Drucker

   In Unternehmen und Schulen werden Drucker ha:ufig von mehreren Benutzern
   genutzt. Es werden zusa:tzliche Funktionen angeboten, um die gemeinsame
   Nutzung von Druckern zu erleichtern.

    9.5.6.1. Aliase

   Der Druckername wird in der ersten Zeile von /etc/printcap festgelegt.
   Weitere Namen oder Aliase ko:nnen nach dem Druckernamen hinzugefu:gt
   werden. Aliase werden vom Namen durch das Pipe-Zeichen | getrennt:

 lp|repairsprinter|salesprinter:\

   Anstelle des Druckernamens ko:nnen Aliase verwendet werden. Zum Beispiel
   ko:nnen Mitarbeiter der Verkaufsabteilung wie folgt auf ihren Drucker
   drucken:

 % lpr -Psalesprinter sales-report.txt

   Mitarbeiter der Reparaturabteilung drucken auf dem Drucker mit:

 % lpr -Prepairsprinter repairs-report.txt

   Alle Dokumente werden auf diesem einen Drucker gedruckt. Wenn die
   Verkaufsabteilung gro:sser wird und die Abteilung einen eigenen Drucker
   beno:tigt, kann der Alias entfernt und fu:r einen neuen Drucker verwendet
   werden. Die Mitarbeiter in beiden Abteilungen benutzen zum Drucken
   weiterhin die gleichen Befehle, nur dass die Auftra:ge der
   Verkaufsabteilung jetzt zum neuen Drucker gesendet werden.

    9.5.6.2. Deckbla:tter

   Bei einem viel benutzten Drucker kann es fu:r die Anwender schwierig sein,
   ihre Dokumente in einem grossen Papierstapel wiederzufinden. Um dieses
   Problem zu lo:sen, ko:nnen Deckbla:tter verwendet werden. Dabei wird vor
   jedem Druckauftrag ein Deckblatt mit dem Benutzernamen und dem
   Dokumentnamen gedruckt. Deckbla:tter werden manchmal auch als Banner oder
   Trennseite bezeichnet.

   Das Aktivieren der Deckbla:tter ha:ngt davon ab, ob der Drucker direkt
   u:ber ein USB, paralleles oder serielles Kabel, oder u:ber ein Netzwerk
   mit dem Rechner verbunden ist.

   Wenn der Drucker direkt verbunden ist, aktivieren Sie die Deckbla:tter
   durch Entfernen der Zeile :sh:\ (Supress Header) in /etc/printcap. Diese
   Deckbla:tter verwenden lediglich einen Zeilenvorschub fu:r neue Zeilen.
   Einige Drucker beno:tigen den Filter /usr/share/examples/printing/hpif um
   den Treppeneffekt zu vermeiden. Der Filter konfiguriert PCL-Drucker so,
   dass sowohl Zeilenumbru:che als auch Zeilenvorschu:be verwendet werden,
   wenn ein Zeilenvorschub empfangen wird.

   Fu:r Netzwerkdrucker mu:ssen Deckbla:tter auf dem Drucker selbst
   konfiguriert werden, da Eintra:ge fu:r Deckbla:tter in /etc/printcap
   ignoriert werden. Die Einstellungen sind u:ber einen Webbrowser
   zuga:nglich und stehen in der Regel auf der Hauptseite der
   Konfigurations-Webseite zur Verfu:gung.

  9.5.7. Referenzen

   Beispieldateien: /usr/share/examples/printing/.

   Das 4.3BSD Line Printer Spooler Manual,
   /usr/share/doc/smm/07.lpd/paper.ascii.gz.

   Manualpages: printcap(5), lpd(8), lpr(1), lpc(8), lprm(1), lpq(1).

9.6. Andere Drucksysteme

   Neben dem in FreeBSD enthaltenen lpd(8) existieren noch weitere
   Drucksysteme. Diese Systeme bieten zusa:tzliche Funktionen und
   Unterstu:tzung fu:r andere Protokolle.

  9.6.1. CUPS (Common UNIX(R) Printing System)

   CUPS ist ein beliebtes Drucksystem, das fu:r viele Betriebssysteme
   erha:ltlich ist. CUPS unter FreeBSD wird in einem separaten Artikel
   beschrieben: CUPS on FreeBSD.

  9.6.2. HPLIP

   Hewlett Packard stellt ein Drucksystem zur Verfu:gung, das viele ihrer
   Drucker unterstu:tzt. Der Port heisst print/hplip. Die Webseite befindet
   sich unter http://hplipopensource.com/hplip-web/index.html. Der
   FreeBSD-Port ku:mmert sich um alle Details wa:hrend der Installation.
   Informationen zur Konfiguration finden Sie unter
   http://hplipopensource.com/hplip-web/install/manual/hp_setup.html.

  9.6.3. LPRng

   LPRng wurde als eine verbesserte Alternative zu lpd(8) entwickelt. Der
   Port heisst sysutils/LPRng. Weitere Informationen und Dokumentation finden
   Sie unter http://www.lprng.com/.

Kapitel 10. Linux(R)-Bina:rkompatibilita:t

   Restrukturiert und teilweise aktualisiert von Jim Mock.
   Beigetragen von Brian N. Handy und Rich Murphey.
   U:bersetzt von Johann Kois.
   Inhaltsverzeichnis

   10.1. U:bersicht

   10.2. Konfiguration der Linux(R)-Bina:rkompatibilita:t

   10.3. Weiterfu:hrende Themen

10.1. U:bersicht

   FreeBSD bietet Bina:rkompatibilita:t zu Linux(R), so dass Benutzer
   Linux(R) Anwendungen auf einem FreeBSD-System installieren und ausfu:hren
   ko:nnen, ohne die Bina:rdatei a:ndern zu mu:ssen. Es wurde sogar
   berichtet, dass in einigen Situationen Linux(R) Anwendungen auf FreeBSD
   besser laufen als unter Linux(R).

   Allerdings werden einige Linux(R)-spezifischen Merkmale nicht von FreeBSD
   unterstu:tzt. Linux(R)-Anwendungen, die i386(TM)-spezifische Aufrufe, wie
   bspw. die Aktivierung des virtuellen 8086-Modus verwenden, werden derzeit
   nicht unterstu:tzt.

   Die Unterstu:tzung fu:r 64-Bit-Bina:rkompatibilita:t fu:r Linux(R) wurde
   in FreeBSD 10.3 hinzugefu:gt.

   Nach dem Lesen dieses Kapitels werden Sie wissen:

     * Wie Sie die Linux(R)-Bina:rkompatibilita:t aktivieren.

     * Wie zusa:tzliche Linux(R)-Systembibliotheken installiert werden.

     * Wie Sie Linux(R)-Anwendungen unter FreeBSD installieren.

     * Wie die Linux(R)-Bina:rkompatibilita:t unter FreeBSD implementiert
       ist.

   Bevor Sie dieses Kapitel lesen, sollten Sie wissen:

     * Wie Sie Software von Drittanbietern installieren.

10.2. Konfiguration der Linux(R)-Bina:rkompatibilita:t

   Die Linux(R)-Bina:rkompatibilita:t ist per Voreinstellung nicht aktiviert
   und auch Linux(R)-Bibliotheken werden nicht installiert.
   Linux(R)-Bibliotheken ko:nnen entweder manuell, oder aus der FreeBSD
   Ports-Sammlung installiert werden.

   Bevor Sie versuchen den Port zu bauen, laden Sie das Linux(R)-Kernelmodul,
   da ansonsten der Bau fehlschla:gt:

 # kldload linux

   Fu:r 64-Bit Kompatibilita:t:

 # kldload linux64

   Pru:fen Sie, ob das Modul geladen wurde:

 % kldstat
 Id Refs Address    Size     Name
  1    2 0xc0100000 16bdb8   kernel
  7    1 0xc24db000 d000     linux.ko

   Der einfachste Weg um einen Basissatz von Linux(R)-Bibliotheken und
   Bina:rdateien auf einem FreeBSD-System zu installieren, ist u:ber den Port
   oder das Paket emulators/linux_base-c6. So installieren Sie das Paket:

 # printf "compat.linux.osrelease=2.6.18\n" >> /etc/sysctl.conf
 # sysctl compat.linux.osrelease=2.6.18
 # pkg install emulators/linux_base-c6

   Wollen Sie die Linux(R)-Bina:rkompatibilita:t beim Systemstart aktivieren,
   fu:gen Sie folgende Zeile in /etc/rc.conf hinzu:

 linux_enable="YES"

   Auf 64-Bit Maschinen wird das Modul fu:r die 64-Bit Emulation automatisch
   von /etc/rc.d/abi geladen.

   Benutzer, die es vorziehen, Linux(R)-Bina:rkompatibilita:t statisch in den
   Kernel zu linken, mu:ssen options COMPAT_LINUX in die
   Kernelkonfigurationsdatei aufnehmen und anschliessend einen neuen Kernel
   installieren. Dies ist in Kapitel 8, Konfiguration des FreeBSD-Kernels
   beschrieben.

  10.2.1. Manuelle Installation zusa:tzlicher Bibliotheken

   Wenn sich eine Linux(R)-Anwendung u:ber fehlende Bibliotheken beschwert
   nachdem die Linux(R)-Bina:rkompatibilita:t installiert wurde, finden Sie
   heraus welche Bibliothken die Anwendung beno:tigt und installieren Sie
   diese manuell.

   Mit ldd ko:nnen Sie unter Linux(R) bestimmen, welche gemeinsam benutzten
   Bibliotheken eine Anwendung beno:tigt. Wenn Sie herausfinden wollen,
   welche Bibliotheken linuxdoom beno:tigt, ko:nnen Sie folgenden Befehl auf
   einem Linux(R)-System ausfu:hren, welches Doom installiert hat:

 % ldd linuxdoom
 libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

   Kopieren Sie alle Dateien aus der letzten Spalte der Ausgabe von einem
   Linux(R)-System auf das FreeBSD-System in das Verzeichnis /compat/linux.
   Nach dem Kopieren erstellen Sie symbolische Links auf die Namen in der
   ersten Spalte. In diesem Beispiel werden folgende Dateien auf dem
   FreeBSD-System installiert:

 /compat/linux/usr/X11/lib/libXt.so.3.1.0
 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
 /compat/linux/usr/X11/lib/libX11.so.3.1.0
 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
 /compat/linux/lib/libc.so.4.6.29
 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

   Wenn Sie bereits eine Linux(R)-Bibliothek einer zur ersten Spalte
   passenden Hauptversionsnummer besitzen, muss sie nicht mehr kopiert
   werden, da die bereits vorhandene Version funktionieren sollte. Hat die
   Bibliothek jedoch eine neuere Versionsnummer, sollten Sie sie dennoch
   kopieren. Sie ko:nnen die alte Version lo:schen, solange Sie einen
   symbolischen Link auf die neue Version anlegen.

   Folgende Bibliotheken existieren bereits auf dem FreeBSD-System:

 /compat/linux/lib/libc.so.4.6.27$
 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27

   ldd zeigt an, dass eine Anwendung eine neuere Version beno:tigt:

 libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

   Wenn diese Bibliotheken sich nur um ein oder zwei Stellen in der
   Unterversionsnummer unterscheiden, sollte das Programm dennoch mit der
   a:lteren Version funktionieren. Wenn Sie wollen, ko:nnen Sie die
   bestehende libc.so durch die neuere Version ersetzen:

 /compat/linux/lib/libc.so.4.6.29
 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29

   Der Mechanismus der symbolischen Links wird nur fu:r
   Linux(R)-Bina:rdateien beno:tigt. Nach einer Weile wird es eine
   ausreichende Menge an Linux(R)-Bibliotheken auf dem System geben, sodass
   Sie neu installierte Linux(R)-Anwendungen ohne zusa:tzlichen Aufwand auf
   dem System laufen lassen ko:nnen.

  10.2.2. Linux(R) ELF-Bina:rdateien installieren

   ELF-Bina:rdateien beno:tigen manchmal eine zusa:tzliche "Kennzeichnung".
   Wenn Sie versuchen, eine nicht gekennzeichnete ELF-Bina:rdatei
   auszufu:hren, werden Sie eine Fehlermeldung a:hnlich der folgenden
   erhalten:

 % ./my-linux-elf-binary
 ELF binary type not known
 Abort

   Damit der FreeBSD-Kernel eine Linux(R)-ELF-Datei von einer
   FreeBSD-ELF-Datei unterscheiden kann, gibt es das Werkzeug brandelf(1).

 % brandelf -t Linux my-linux-elf-binary

   Die GNU Werkzeuge schreiben nun automatisch die passende
   Kennzeichnungsinformation in die ELF-Bina:rdateien, so dass Sie diesen
   Schritt in Zukunft nur noch selten beno:tigen.

  10.2.3. Installieren einer RPM-basierten Linux(R)-Anwendung

   Wenn Sie eine Linux(R) RPM-basierte Anwendung installieren mo:chten,
   installieren Sie zuna:chst den Port oder das Paket archivers/rpm4.
   Anschliessend kann der Superuser das folgende Kommando benutzen, um ein
   .rpm zu installieren:

 # cd /compat/linux
 # rpm2cpio < /pfad/zum/linux.archiv.rpm | cpio -id

   Fall notwendig, benutzen Sie brandelf auf den installierten
   ELF-Bina:rdateien. Beachten Sie, dass dies eine saubere Deinstallation
   verhindert.

  10.2.4. Namensauflo:sung konfigurieren

   Wenn DNS nicht funktioniert, oder die folgende Fehlermeldung erscheint:

 resolv+: "bind" is an invalid keyword resolv+:
 "hosts" is an invalid keyword

   mu:ssen Sie /compat/linux/etc/host.conf wie folgt bearbeiten:

 order hosts, bind
 multi on

   Diese Reihenfolge legt fest, dass zuerst /etc/hosts und anschliessend DNS
   durchsucht werden. Wenn /compat/linux/etc/host.conf nicht vorhanden ist,
   nutzen Linux(R)-Anwendungen /etc/host.conf und beschweren sich u:ber die
   inkompatible FreeBSD-Syntax. Wenn Sie in /etc/resolv.conf keinen
   Nameserver konfiguriert haben, sollten Sie den Eintrag bind entfernen.

10.3. Weiterfu:hrende Themen

   Dieser Abschnitt beschreibt wie die Linux(R)-Bina:rkompatibilita:t
   funktioniert. Die folgenden Informationen stammen aus einer E-Mail, die
   von Terry Lambert (<tlambert@primenet.com>) an FreeBSD chat geschrieben
   wurde (Message ID: <199906020108.SAA07001@usr09.primenet.com>).

   FreeBSD verfu:gt u:ber eine "execution class loader" genannte Abstraktion.
   Dabei handelt es sich um einen Eingriff in den execve(2) Systemaufruf.

   Historisch gesehen untersuchte der einzige, auf UNIX(R)-Plattformen
   vorhandene Lader die "magische Zahl" (in der Regel die ersten 4 oder
   8 Bytes der Datei), um festzustellen, ob der Bina:rtyp dem System bekannt
   war. War dies der Fall, wurde der Bina:rlader aufgerufen.

   Wenn es sich nicht um den zum System geho:rigen Bina:rtyp handelte, gab
   execve(2) einen Fehler zuru:ck, und die Shell versuchte stattdessen, die
   Datei als Shell-Befehl auszufu:hren. Dabei wurde als Standardeinstellung
   "was auch immer die aktuelle Shell ist" festgelegt.

   Spa:ter wurde ein Hack in sh(1) eingefu:gt, der die zwei ersten Zeichen
   untersuchte. Wenn diese :\n entsprachen, wurde stattdessen die
   csh(1)-Shell aufgerufen.

   FreeBSD verfu:gt u:ber eine Liste von Ladern, anstelle eines einzigen, auf
   #! zuru:ckgreifenden Laders, um Shell-Interpreter oder Shell-Skripte
   auszufu:hren.

   Fu:r die Linux(R) ABI-Unterstu:tzung erkennt FreeBSD die magische Zahl als
   ELF-Bina:rdatei. Der ELF-Lader sucht nach einer speziellen Kennzeichnung,
   die aus einem Kommentarabschnitt in der ELF-Datei besteht, und die in
   SVR4/Solaris(TM) ELF Bina:rdateien nicht vorhanden ist.

   Damit Linux(R)-Bina:rdateien unter FreeBSD funktionieren, mu:ssen sie mit
   brandelf(1) als Linux gekennzeichnet werden:

 # brandelf -t Linux file

   Wenn der ELF-Lader die Linux-Kennzeichnung sieht, wird ein Zeiger in der
   proc-Struktur ersetzt. Alle Systemaufrufe werden durch diesen Zeiger
   indiziert. Der Prozess wird weiterhin speziell gekennzeichnet, so dass der
   Trap-vector im Signal-trampoline-code eine spezielle Behandlung erfa:hrt
   und das Linux(R)-Kernelmodul verschiedene kleinere Korrekturen vornehmen
   kann.

   Der Linux(R)-Systemaufrufvektor entha:lt neben anderen Dingen eine Liste
   der sysent[]-Eintra:ge, deren Adressen sich im Kernelmodul befinden.

   Wenn ein Linux(R)-Programm einen Systemaufruf ausfu:hrt, dereferenziert
   die Trap-Behandlungsroutine den Zeiger fu:r den Systemaufruf aus der
   proc-Struktur und erha:lt damit die Linux(R)-Eintrittspunkte fu:r den
   Systemaufruf.

   Zusa:tzlich vera:ndert der Linux(R)-Modus die Systempfade dynamisch;
   genauso, wie dies die Option union beim Einbinden von Dateisystemen macht.
   Zuerst wird die Datei im Verzeichnis /compat/linux/Originalpfad gesucht,
   wenn sie dort nicht gefunden wurde, wird sie im Verzeichnis /Originalpfad
   gesucht. Dadurch wird sichergestellt, dass Bina:rdateien, die zur
   Ausfu:hrung andere Bina:rdateien beno:tigen, ausgefu:hrt werden ko:nnen
   (so dass alle Linux(R)-Werkzeuge unter der ABI laufen). Dies bedeutet
   auch, dass Linux(R)-Bina:rdateien FreeBSD-Bina:rdateien laden und
   ausfu:hren ko:nnen, wenn keine passenden Linux(R)-Bina:rdateien vorhanden
   sind. Ein in /compat/linux plaziertes uname(1) kann damit
   Linux(R)-Programmen vorgaukeln, dass sie auf einem Linux(R)-System laufen.

   Im Endeffekt gibt es einen Linux(R)-Kernel innerhalb des FreeBSD-Kernels.
   Die Sprungtabellen fu:r Linux(R)- beziehungsweise FreeBSD-Systemaufrufe
   verweisen allerdings auf dieselben Funktionen, die Kerneldienste wie
   Dateisystemoperationen, Operationen fu:r den virtuellen Speicher,
   Signalu:bermittlung und System V IPC bereitstellen. Der einzige
   Unterschied ist, dass Bina:rdateien unter FreeBSD FreeBSD-glue-Funktionen
   verwendet werden. Linux(R)-Bina:rdateien hingegen verwenden die
   Linux(R)-glue-Funktionen. FreeBSD-glue-Funktionen sind statisch in den
   Kernel gelinkt, Linux(R)-glue-Funktionen sind statisch gelinkt oder
   ko:nnen u:ber ein ladbares Kernelmodul eingebunden werden.

   Technisch gesehen ist dies nicht wirklich eine Emulation, sondern eine
   ABI-Implementation. Es wird manchmal "Linux(R) Emulation" genannt, da es
   zu einer Zeit implementiert wurde, in der es kein anderes Wort gab, das
   beschrieb, was vor sich ging. Es war falsch zu behaupten, FreeBSD wu:rde
   Linux(R)-Bina:rprogramme ausfu:hren, da der Code nicht unter FreeBSD
   u:bersetzt wurde.

                         Teil III. Systemadministration

   Die restlichen Kapitel behandeln alle Aspekte der FreeBSD
   Systemadministration. Am Anfang jedes Kapitels finden Sie eine
   Zusammenfassung, die beschreibt, was Sie nach dem Durcharbeiten des
   Kapitels gelernt haben. Weiterhin werden die Voraussetzungen beschrieben,
   die fu:r das Durcharbeiten des Kapitels erforderlich sind.

   Diese Kapitel sollten Sie lesen, wenn Sie die Informationen darin
   beno:tigen. Sie brauchen Sie nicht in einer bestimmten Reihenfolge zu
   lesen, noch mu:ssen Sie die Kapitel lesen, bevor Sie anfangen, FreeBSD zu
   benutzen.

   Inhaltsverzeichnis

   11. Konfiguration und Tuning

                11.1. U:bersicht

                11.2. Start von Diensten

                11.3. cron(8) konfigurieren

                11.4. Dienste unter FreeBSD verwalten

                11.5. Einrichten von Netzwerkkarten

                11.6. Virtual Hosts

                11.7. Konfiguration der Systemprotokollierung

                11.8. Konfigurationsdateien

                11.9. Einstellungen mit sysctl(8)

                11.10. Tuning von Laufwerken

                11.11. Einstellungen von Kernel Limits

                11.12. Hinzufu:gen von Swap-Bereichen

                11.13. Energie- und Ressourcenverwaltung

   12. FreeBSDs Bootvorgang

                12.1. U:bersicht

                12.2. FreeBSDs Bootvorgang

                12.3. Willkommensbildschirme wa:hrend des Bootvorgangs
                konfigurieren

                12.4. Konfiguration von Gera:ten

                12.5. Der Shutdown-Vorgang

   13. Sicherheit

                13.1. U:bersicht

                13.2. Einfu:hrung

                13.3. Einmalpasswo:rter

                13.4. TCP Wrapper

                13.5. Kerberos

                13.6. OpenSSL

                13.7. VPN mit IPsec

                13.8. OpenSSH

                13.9. Zugriffskontrolllisten fu:r Dateisysteme (ACL)

                13.10. Sicherheitsprobleme in Software von Drittanbietern
                u:berwachen

                13.11. FreeBSD Sicherheitshinweise

                13.12. Prozess-U:berwachung

                13.13. Einschra:nkung von Ressourcen

                13.14. Gemeinsame Administration mit Sudo

   14. Jails

                14.1. U:bersicht

                14.2. Jails - Definitionen

                14.3. Einrichtung und Verwaltung von Jails

                14.4. Feinabstimmung und Administration

                14.5. Mehrere Jails aktualisieren

                14.6. Verwaltung von Jails mit ezjail

   15. Verbindliche Zugriffskontrolle

                15.1. U:bersicht

                15.2. Schlu:sselbegriffe

                15.3. Erla:uterung

                15.4. MAC Labels verstehen

                15.5. Planung eines Sicherheitsmodells

                15.6. Modulkonfiguration

                15.7. Das MAC Modul seeotheruids

                15.8. Das MAC Modul bsdextended

                15.9. Das MAC Modul ifoff

                15.10. Das MAC Modul portacl

                15.11. Das MAC Modul partition

                15.12. Das MAC Modul Multi-Level Security

                15.13. Das MAC Modul Biba

                15.14. Das MAC Modul LOMAC

                15.15. Beispiel 1: Nagios in einer MAC Jail

                15.16. Beispiel 2: User Lock Down

                15.17. Fehler im MAC beheben

   16. Security Event Auditing

                16.1. Einleitung

                16.2. Schlu:sselbegriffe

                16.3. Audit Konfiguration

                16.4. Audit-Trails

   17. Speichermedien

                17.1. U:bersicht

                17.2. Hinzufu:gen von Laufwerken

                17.3. Partitionen vergro:ssern

                17.4. USB Speichermedien

                17.5. Erstellen und Verwenden von CDs

                17.6. DVDs benutzen

                17.7. Disketten benutzen

                17.8. Datensicherung

                17.9. Speicherbasierte Laufwerke

                17.10. Schnappschu:sse von Dateisystemen

                17.11. Disk Quotas

                17.12. Partitionen verschlu:sseln

                17.13. Den Auslagerungsspeicher verschlu:sseln

                17.14. Highly Available Storage (HAST)

   18. GEOM: Modulares Framework zur Plattentransformation

                18.1. U:bersicht

                18.2. RAID0 - Striping

                18.3. RAID1 - Spiegelung

                18.4. RAID3 - Byte-Level Striping mit dedizierter Parita:t

                18.5. Software RAID

                18.6. GEOM Gate Netzwerk

                18.7. Das Labeln von Laufwerken

                18.8. UFS Journaling in GEOM

   19. Das Z-Dateisystem (ZFS)

                19.1. Was ZFS anders macht

                19.2. Schnellstartanleitung

                19.3. zpool Administration

                19.4. zfs Administration

                19.5. Delegierbare Administration

                19.6. Themen fu:r Fortgeschrittene

                19.7. Zusa:tzliche Informationen

                19.8. ZFS-Eigenschaften und Terminologie

   20. Dateisystemunterstu:tzung

                20.1. U:bersicht

                20.2. Linux(R) Dateisysteme

   21. Virtualisierung

                21.1. U:bersicht

                21.2. FreeBSD als Gast-Betriebssystem unter Parallels fu:r
                Mac OS(R) X

                21.3. FreeBSD als Gast-Betriebssystem unter Virtual PC fu:r
                Windows(R)

                21.4. FreeBSD als Gast-Betriebssystem unter VMware Fusion
                fu:r Mac OS(R)

                21.5. VirtualBox(TM) Gasterweiterungen auf einem FreeBSD Gast

                21.6. FreeBSD als Host mit Virtualbox

                21.7. FreeBSD als Host mit bhyve

                21.8. FreeBSD als Xen(TM)-Host

   22. Lokalisierung - I18N/L10N einrichten und benutzen

                22.1. U:bersicht

                22.2. Lokale Anpassungen benutzen

                22.3. I18N-Programme

                22.4. Lokalisierung fu:r einzelne Sprachen

   23. FreeBSD aktualisieren

                23.1. U:bersicht

                23.2. FreeBSD-Update

                23.3. Aktualisieren der Dokumentationssammlung

                23.4. Einem Entwicklungszweig folgen

                23.5. FreeBSD aus den Quellen aktualisieren

                23.6. Installation mehrerer Maschinen

   24. DTrace

                24.1. U:berblick

                24.2. Unterschiede in der Implementierung

                24.3. Die DTrace Unterstu:tzung aktivieren

                24.4. DTrace verwenden

Kapitel 11. Konfiguration und Tuning

   Geschrieben von Chern Lee.
   Nach einem Tutorium von Mike Smith.
   Basiert ebenfalls auf tuning(7) von Matt Dillon.
   U:bersetzt von Martin Heinen.
   Inhaltsverzeichnis

   11.1. U:bersicht

   11.2. Start von Diensten

   11.3. cron(8) konfigurieren

   11.4. Dienste unter FreeBSD verwalten

   11.5. Einrichten von Netzwerkkarten

   11.6. Virtual Hosts

   11.7. Konfiguration der Systemprotokollierung

   11.8. Konfigurationsdateien

   11.9. Einstellungen mit sysctl(8)

   11.10. Tuning von Laufwerken

   11.11. Einstellungen von Kernel Limits

   11.12. Hinzufu:gen von Swap-Bereichen

   11.13. Energie- und Ressourcenverwaltung

11.1. U:bersicht

   Die richtige Systemkonfiguration ist einer der wichtigsten Aspekte unter
   FreeBSD. Dieses Kapitel beschreibt die Konfiguration von FreeBSD sowie
   Massnahmen zur Leistungssteigerung von FreeBSD-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 Netzwerkgera:te konfigurieren.

     * Wie Sie die verschiedenen Konfigurationsdateien in /etc benutzen.

     * Wie Sie mit FreeBSD mit sysctl(8)-Variablen einstellen ko:nnen.

     * Wie Sie die Platten-Performance einstellen und Kernel-Parameter
       modifizieren ko:nnen.

   Bevor Sie dieses Kapitel lesen, sollten Sie

     * die Grundlagen von UNIX(R) und FreeBSD (Kapitel 3, Grundlagen des UNIX
       Betriebssystems) verstehen.

     * Damit vertraut sein, wie Sie einen Kernel konfigurieren und
       kompilieren (Kapitel 8, Konfiguration des FreeBSD-Kernels).

11.2. Start von Diensten

   Beigetragen von Tom Rhodes.

   Viele Benutzer installieren Software Dritter auf FreeBSD mithilfe der
   Ports-Sammlung. Ha: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 fu:r Software Dritter vor.

   Unter FreeBSD werden die meisten der im System enthaltenen Dienste wie
   cron(8) mithilfe von Systemskripten gestartet.

  11.2.1. Dienste u:ber das rc.d-System starten

   Mit rc.d la:sst sich der Start von Anwendungen besser steuern und es sind
   mehr Funktionen verfu:gbar. Mit den in Abschnitt 11.4, "Dienste unter
   FreeBSD verwalten" besprochenen Schlu:sselwo:rtern ko:nnen Anwendungen in
   einer bestimmten Reihenfolge gestartet werden und Optionen ko: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 ko:nnte fu: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 rcorder(8) und la:sst
   sich u:ber rc.conf leichter konfigurieren.

  11.2.2. Andere Arten, um Dienste zu starten

   Andere Dienste ko:nnen u:ber inetd(8) gestartet werden. Die Konfiguration
   von inetd(8) wird in Abschnitt 28.2, "Der inetd "Super-Server""
   ausfu:hrlich beschrieben.

   Systemdienste ko:nnen auch mit cron(8) gestartet werden. Dieser Ansatz hat
   einige Vorteile; nicht zuletzt, weil cron(8) die Prozesse unter dem
   Eigentu:mer der crontab startet, ist es mo:glich, dass Dienste von
   normalen Benutzern gestartet und gepflegt werden ko:nnen.

   Fu:r die Zeitangabe in cron(8) kann @reboot eingesetzt werden. Damit wird
   das Kommando gestartet, wenn cron(8) kurz nach dem Systemboot gestartet
   wird.

11.3. cron(8) konfigurieren

   Beigetragen von Tom Rhodes.

   Ein sehr nu:tzliches Werkzeug von FreeBSD ist cron. Dieses Programm la:uft
   im Hintergrund und u:berpru:ft fortlaufend /etc/crontab und
   /var/cron/tabs. In diesen Dateien wird festgelegt, welche Programme zu
   welchem Zeitpunkt von cron ausgefu:hrt werden sollen. Jede Zeile in diesen
   Dateien definiert eine auszufu:hrende Aufgabe, die auch als Cronjob
   bezeichnet wird.

   Das Werkzeug verwendet zwei verschiedene Konfigurationsdateien: die
   System-crontab, welche nicht vera:ndert werden sollte und die
   Benutzer-crontabs, die nach Bedarf erstellt und gea:ndert werden ko:nnen.
   Das Format, dass von diesen beiden Dateien verwendet wird, ist in
   crontab(5) dokumentiert. Das Format der System-crontab in /etc/crontab
   entha:lt das Feld who, das in der Benutzer-crontab nicht existiert. Dieses
   Feld gibt den Benutzer an, mit dem die Aufgabe ausgefu:hrt wird. Die
   Aufgaben in den Benutzer-crontabs laufen unter dem Benutzer, der die
   crontab erstellt hat.

   Benutzer-crontabs erlauben es den Benutzern, ihre eigenen Aufgaben zu
   planen. Der Benutzer root kann auch seine eigene Benutzer-crontab haben,
   um Aufgaben zu planen, die nicht in der System-crontab existieren.

   Hier ist ein Beispieleintrag aus der System-crontab, /etc/crontab:

 # /etc/crontab - root's crontab for FreeBSD
 #
 # $FreeBSD$
 # 1
 SHELL=/bin/sh
 PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin 2
 #
 #
 #minute hour    mday    month   wday    who     command 3
 #
 */5     *       *       *       *       root    /usr/libexec/atrun 4

   1 Das Zeichen # am Zeilenanfang leitet einen Kommentar ein. Benutzen Sie   
     Kommentare, um die Funktion eines Eintrags zu erla:utern. Kommentare     
     mu:ssen in einer extra Zeile stehen. Sie ko:nnen nicht in derselben      
     Zeile wie ein Kommando stehen, da sie sonst Teil des Kommandos wa:ren.   
     Leerzeilen in dieser Datei werden ignoriert.                             
   2 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, mu:ssen alle Pfadangaben absolut sein,  
     da es keinen Vorgabewert fu:r PATH gibt.                                 
   3 In dieser Zeile werden sieben Felder der System-crontab beschrieben:     
     minute, hour, mday, month, wday, who und command. Das Feld minute legt   
     die Minute fest in der die Aufgabe ausgefu:hrt wird, 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 mu:ssen           
     numerische Werte enthalten und die Zeitangaben sind im                   
     24-Stunden-Format. Das Zeichen * repra:sentiert dabei alle mo:glichen    
     Werte fu:r dieses Feld. Das Feld who gibt es nur in der System-crontab   
     und gibt den Account an, unter dem das Kommando laufen soll. Im letzten  
     Feld wird schliesslich das auszufu:hrende Kommando angegeben.            
   4 Diese Zeile definiert die Werte fu:r den Cronjob. Die Zeichenfolge */5   
     gefolgt von mehreren *-Zeichen bedeutet, dass /usr/libexec/atrun von     
     root alle fu:nf Minuten aufgerufen wird.                                 
                                                                              
     Bei den Kommandos ko:nnen beliebig viele Optionen angegeben werden. Wenn 
     das Kommando zu lang ist und auf der na:chsten Zeile fortgesetzt werden  
     soll, muss am Ende der Zeile das Fortsetzungszeichen (\) angegeben       
     werden.                                                                  

  11.3.1. Eine Benutzer-crontab erstellen

   Rufen Sie crontab im Editor-Modus auf, um eine Benutzer-crontab zu
   erstellen:

 % crontab -e

   Dies wird die crontab des Benutzers mit dem voreingestellten Editor
   o:ffnen. Wenn der Benutzer diesen Befehl zum ersten Mal ausfu:hrt, wird
   eine leere Datei geo:ffnet. Nachdem der Benutzer eine crontab erstellt
   hat, wird die Datei mit diesem Kommando zur Bearbeitung geo:ffnet.

   Es empfiehlt sich, die folgenden Zeilen an den Anfang der crontab-Datei
   hinzuzufu:gen, um die Umgebungsvariablen zu setzen und die einzelnen
   Felder zu beschreiben:

 SHELL=/bin/sh
 PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
 # Order of crontab fields
 # minute        hour    mday    month   wday    command

   Fu:gen Sie dann fu:r jedes Kommando oder Skript eine Zeile hinzu, mit der
   Angabe wann das Kommando ausgefu:hrt werden soll. In diesem Beispiel wird
   ein Bourne Shell Skript ta:glich um 14:00 Uhr ausgefu:hrt. Da der Pfad zum
   Skript nicht in PATH enthalten ist, wird der vollsta:ndige Pfad zum Skript
   angegeben:

 0       14      *       *       *       /usr/home/dru/bin/mycustomscript.sh

  Tipp:

   Bevor Sie ein eigenes Skript verwenden, stellen Sie sicher, dass es
   ausfu:hrbar ist und dass es mit den wenigen Umgebungsvariablen von cron
   funktioniert. Um die Umgebung nachzubilden, die der obige cron-Eintrag bei
   der Ausfu:hrung verwenden wu:rde, benutzen Sie dieses Kommando:

 % env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh

   Die Umgebung von cron wird in crontab(5) beschrieben. Es ist wichtig, dass
   sichergestellt wird, dass die Skripte in der Umgebung von cron korrekt
   arbeiten, besonders wenn Befehle enthalten sind, welche Dateien mit
   Wildcards lo:schen.

   Wenn Sie mit der Bearbeitung der crontab fertig sind, speichern Sie die
   Datei. Sie wird automatisch installiert und cron wird die darin enthalten
   Cronjobs zu den angegebenen Zeiten ausfu:hren. Um die Cronjobs in einer
   crontab aufzulisten, verwenden Sie diesen Befehl:

 % crontab -l
 0       14      *       *       *       /usr/home/dru/bin/mycustomscript.sh

   Um alle Cronjobs einer Benutzer-crontab zu lo:schen, verwenden Sie diesen
   Befehl:

 % crontab -r
 remove crontab for dru? y

11.4. Dienste unter FreeBSD verwalten

   Beigetragen von Tom Rhodes.

   FreeBSD verwendet die vom rc(8)-System bereit gestellten Startskripten
   beim Systemstart und fu:r die Verwaltung von Diensten. Die Skripte sind in
   /etc/rc.d abgelegt und bieten grundlegende Dienste an, die u:ber die
   Optionen start, stop und restart des service(8) Kommandos kontrolliert
   werden ko:nnen. Beispielsweise kann sshd(8) mit dem nachstehenden Kommando
   neu gestartet werden:

 # service sshd restart

   Analog ko:nnen Sie andere Dienste starten und stoppen. Normalerweise
   werden die Dienste beim Systemstart u:ber Eintra:ge in der Datei
   rc.conf(5) automatisch gestartet. natd(8) wird zum Beispiel mit dem
   folgenden Eintrag in /etc/rc.conf aktiviert:

 natd_enable="YES"

   Wenn dort bereits die Zeile natd_enable="NO" existiert, a:ndern Sie NO in
   YES. Die rc(8)-Skripten starten, wie unten beschrieben, auch abha:ngige
   Dienste.

   Da das rc(8)-System prima:r zum automatischen Starten und Stoppen von
   Systemdiensten dient, funktionieren die Optionen start, stop und restart
   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 YES gesetzt wurde. Wenn Sie die Optionen
   start, stop oder restart unabha:ngig von den Einstellungen in /etc/rc.conf
   benutzen wollen, mu:ssen Sie den Optionen mit dem Pra:fix "one" verwenden.
   Um beispielsweise sshd unabha:ngig von den Einstellungen in /etc/rc.conf
   neu zu starten, benutzen Sie das nachstehende Kommando:

 # service sshd onerestart

   Ob ein Dienst in /etc/rc.conf aktiviert ist, ko:nnen Sie herausfinden,
   indem Sie das entsprechende rc(8)-Skript mit der Option rcvar aufrufen.
   Dieses Beispiel pru:ft, ob der sshd-Dienst in /etc/rc.conf aktiviert ist:

 # service sshd rcvar
 # sshd
 #
 sshd_enable="YES"
 #   (default: "")

  Anmerkung:

   Die Zeile # sshd wird von dem Kommando ausgegeben; sie kennzeichnet nicht
   die Eingabeaufforderung von root.

   Ob ein Dienst la:uft, kann mit status abgefragt werden. Das folgende
   Kommando u:berpru:ft, ob sshd auch wirklich gestartet wurde:

 # service sshd status
 sshd is running as pid 433.

   Einige Dienste ko:nnen u:ber die Option reload neu initialisiert werden.
   Dazu wird dem Dienst u: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
   unterstu:tzen.

   Die meisten Systemdienste werden beim Systemstart vom rc(8)-System
   gestartet. Zum Beispiel aktiviert das Skript /etc/rc.d/bgfsck die Pru: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 wa:hrend des Systemstarts ausgefu:hrt und fu:hrt eine
   U:berpru:fung der Dateisysteme im Hintergrund durch.

   Viele Systemdienste ha:ngen von anderen Diensten ab. yp(8) und andere
   RPC-basierende Systeme ha:ngen beispielsweise von dem rpcbind-Dienst ab.
   Im Kopf der Startskripten befinden sich die Informationen u:ber
   Abha:ngigkeiten von anderen Diensten und weitere Metadaten. Mithilfe
   dieser Daten bestimmt das Programm rcorder(8) beim Systemstart die
   Startreihenfolge der Dienste.

   Folgende Schlu:sselwo:rter mu:ssen im Kopf aller Startskripten verwendet
   werden, da sie von rc.subr(8) zum "Aktivieren" des Startskripts beno:tigt
   werden:

     * PROVIDE: Gibt die Namen der Dienste an, die mit dieser Datei zur
       Verfu:gung gestellt werden.

   Die folgenden Schlu:sselwo:rter ko:nnen im Kopf des Startskripts angegeben
   werden. Sie sind zwar nicht unbedingt notwendig, sind aber hilfreich beim
   Umgang mit rcorder(8):

     * REQUIRE: Gibt die Namen der Dienste an, von denen dieser Dienst
       abha:ngt. Ein Skript, das dieses Schlu:sselwort entha:lt wird nach den
       angegebenen Diensten ausgefu:hrt.

     * BEFORE: Za:hlt Dienste auf, die auf diesen Dienst angewiesen sind. Ein
       Skript, dass dieses Schlu:sselwort entha:lt wird vor den angegebenen
       Diensten ausgefu:hrt.

   Durch das Verwenden dieser Schlu:sselwo:rter kann ein Administrator die
   Startreihenfolge von Systemdiensten feingranuliert steuern, ohne mit den
   Schwierigkeiten des "runlevel"-Systems anderer UNIX(R) Systeme ka:mpfen zu
   mu:ssen.

   Weitere Informationen u:ber das rc(8)-System finden Sie in rc(8) und
   rc.subr(8). Wenn Sie eigene rc.d-Skripte schreiben wollen, sollten Sie
   diesen Artikel lesen.

  11.4.1. Systemspezifische Konfiguration

   Informationen zur Systemkonfiguration sind hauptsa:chlich in /etc/rc.conf,
   die meist beim Start des Systems verwendet wird, abgelegt. Sie entha:lt
   die Konfigurationen fu:r die rc* Dateien.

   In rc.conf werden die Vorgabewerte aus /etc/defaults/rc.conf
   u:berschrieben. Die Vorgabedatei sollte nicht editiert werden. Stattdessen
   sollten alle systemspezifischen A: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 ha: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, wa:hrend /etc/rc.conf.local dabei systemspezifisch bleibt.

   Bei einem Upgrade des Systems wird /etc/rc.conf nicht u:berschrieben, so
   dass die Systemkonfiguration erhalten bleibt.

  Tipp:

   /etc/rc.conf und /etc/rc.conf.local werden von sh(1) gelesen. Dies erlaubt
   es dem Systemadministrator, komplexe Konfigurationsszenarien zu erstellen.
   Lesen Sie rc.conf(5), um weitere Informationen zu diesem Thema zu
   erhalten.

11.5. Einrichten von Netzwerkkarten

   Beigetragen von Marc Fonvieille.

   Die Konfiguration einer Netzwerkkarte geho:rt zu den allta:glichen
   Aufgaben eines FreeBSD Administrators.

  11.5.1. Bestimmen des richtigen Treibers

   Ermitteln Sie zuna:chst das Modell der Netzwerkkarte und den darin
   verwendeten Chip. FreeBSD unterstu:tzt eine Vielzahl von Netzwerkkarten.
   Pru:fen Sie die Hardware-Kompatibilita:tsliste fu:r das FreeBSD Release,
   um zu sehen ob die Karte unterstu:tzt wird.

   Wenn die Karte unterstu:tzt wird, mu:ssen Sie den Treiber fu:r die Karte
   bestimmen. /usr/src/sys/conf/NOTES und /usr/src/sys/arch/conf/NOTES
   enthalten eine Liste der verfu:gbaren Treiber mit Informationen zu den
   unterstu:tzten Chipsa:tzen. Wenn Sie sich nicht sicher sind, ob Sie den
   richtigen Treiber ausgewa:hlt haben, lesen Sie die Hilfeseite des
   Treibers. Sie entha:lt weitere Informationen u:ber die unterstu:tzten
   Gera:te und bekannte Einschra:nkungen des Treibers.

   Die Treiber fu:r gebra:uchliche Netzwerkkarten sind schon im
   GENERIC-Kernel enthalten, so dass die Karte wa:hrend des Systemstarts
   erkannt werden sollte. Die Systemmeldungen ko:nnen Sie sich mit more
   /var/run/dmesg.boot ansehen. Mit der Leertaste ko:nnen Sie durch den Text
   bla:ttern. In diesem Beispiel findet das System zwei Karten, die den
   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 fu:r die Netzwerkkarte nicht in GENERIC enthalten, muss
   zuna:chst ein Treiber geladen werden, um die Karte konfigurieren und
   benutzen zu ko:nnen. Dafu:r gibt es zwei Methoden:

     * Am einfachsten ist es, das Kernelmodul fu:r die Karte mit kldload(8)
       zu laden. Um den Treiber automatisch beim Systemstart zu laden, fu:gen
       Sie die entsprechende Zeile in /boot/loader.conf ein. Es gibt nicht
       fu:r alle Karten Kernelmodule.

     * Alternativ kann der Treiber fu: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 mo:chten, an. Die U:bersetzung des Kernels
       wird in Kapitel 8, Konfiguration des FreeBSD-Kernels beschrieben. Wenn
       die Karte wa:hrend des Systemstarts vom Kernel erkannt wurde, muss der
       Kernel nicht neu u:bersetzt werden.

    11.5.1.1. Windows(R)-NDIS-Treiber einsetzen

   Leider stellen nach wie vor viele Unternehmen die Spezifikationen ihrer
   Treiber der Open Source Gemeinde nicht zur Verfu:gung, weil sie diese
   Informationen als Gescha:ftsgeheimnisse betrachten. Daher haben die
   Entwickler von FreeBSD und anderen Betriebssystemen nur zwei
   Mo:glichkeiten. Entweder versuchen sie in einem aufwa:ndigen Prozess den
   Treiber durch Reverse Engineering nachzubauen, oder sie versuchen, die
   vorhandenen Bina:rtreiber der Microsoft(R) Windows(R)-Plattform zu
   verwenden.

   FreeBSD bietet "native" Unterstu:tzung fu:r die Network Driver Interface
   Specification (NDIS). ndisgen(8) wird benutzt, um einen
   Windows(R) XP-Treiber in ein Format zu konvertieren, das von FreeBSD
   verwendet werden kann. Da der ndis(4)-Treiber einen
   Windows(R) XP-Bina:rtreiber nutzt, kann er nur auf i386(TM)- und
   amd64-Systemen verwendet werden. Unterstu:tzt werden PCI, CardBus, PCMCIA
   und USB-Gera:te.

   Um den NDISulator zu verwenden, beno:tigen Sie drei Dinge:

    1. Die FreeBSD Kernelquellen

    2. Den Windows(R) XP-Bina:rtreiber mit der Erweiterung .SYS

    3. Die Konfigurationsdatei des Windows(R) XP-Treibers mit der Erweiterung
       .INF

   Laden Sie die .SYS- und .INF-Dateien fu:r die Karte. Diese befinden sich
   meistens auf einer beigelegten CD-ROM, oder ko: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 FreeBSD
   passen. Benutzen Sie einen Windows(R) 32-bit Treiber fu:r FreeBSD/i386.
   Fu:r FreeBSD/amd64 wird ein Windows(R) 64-bit Treiber beno:tigt.

   Als Na:chstes kompilieren Sie den bina:ren Treiber, um ein Kernelmodul zu
   erzeugen. Dazu rufen Sie als root ndisgen(8) auf:

 # ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS

   Dieses Kommando arbeitet interaktiv, beno:tigt es weitere Informationen,
   so fragt es Sie danach. Das Ergebnis ist ein neu erzeugtes Kernelmodul im
   aktuellen Verzeichnis. Benutzen Sie kldload(8) um das neue Modul zu laden:

 # kldload ./W32DRIVER.ko

   Neben dem erzeugten Kernelmodul mu:ssen auch die Kernelmodule ndis.ko und
   if_ndis.ko geladen werden. Dies passiert automatisch, wenn Sie ein von
   ndis(4) abha:ngiges Modul laden. Andernfalls ko:nnen die Module mit den
   folgenden Kommandos manuell geladen werden:

 # kldload ndis
 # kldload if_ndis

   Der erste Befehl la:dt den ndis(4)-Miniport-Treiber, der zweite das
   tatsa:chliche Netzwerkgera:t.

   U:berpru:fen Sie die Ausgabe von dmesg(8) auf eventuelle Fehler wa:hrend
   des Ladevorgangs. Gab es dabei keine Probleme, sollte die Ausgabe wie
   folgt aussehen:

 ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
 ndis0: NDIS API version: 5.0
 ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
 ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
 ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

   Ab jetzt kann das Gera:t ndis0 wie jede andere Netzwerkkarte konfiguriert
   werden.

   Um die ndis(4)-Module automatisch beim Systemstart zu laden, kopieren Sie
   das erzeugte Modul W32DRIVER_SYS.ko nach /boot/modules. Danach fu:gen Sie
   die folgende Zeile in /boot/loader.conf ein:

 W32DRIVER_SYS_load="YES"

  11.5.2. Konfiguration von Netzwerkkarten

   Nachdem der richtige Treiber fu:r die Karte geladen ist, muss die Karte
   konfiguriert werden. Unter Umsta:nden ist die Karte schon wa:hrend der
   Installation mit bsdinstall(8) konfiguriert worden.

   Das nachstehende Kommando zeigt die Konfiguration der Netzwerkkarten an:

 % 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 Gera:ten angezeigt:

     * dc0: Der erste Ethernet-Adapter.

     * dc1: Der zweite Ethernet-Adapter.

     * lo0: Das Loopback-Gera:t.

   Der Name der Netzwerkkarte wird aus dem Namen des Treibers und einer Zahl
   zusammengesetzt. Die Zahl gibt die Reihenfolge an, in der die Gera:te beim
   Systemstart erkannt wurden. Die dritte Karte, die den sis(4) Treiber
   benutzt, wu:rde beispielsweise sis2 heissen.

   Der Adapter dc0 aus dem Beispiel ist aktiv. Sie erkennen das an den
   folgenden Hinweisen:

    1. UP bedeutet, dass die Karte konfiguriert und aktiv ist.

    2. Der Karte wurde die Internet-Adresse (inet) 192.168.1.3 zugewiesen.

    3. Die Subnetzmaske ist richtig (0xffffff00 entspricht 255.255.255.0).

    4. Die Broadcast-Adresse 192.168.1.255 ist richtig.

    5. Die MAC-Adresse der Karte (ether) lautet 00:a0:cc:da:da:da.

    6. Die automatische Medienerkennung ist aktiviert (media: Ethernet
       autoselect (100baseTX <full-duplex>)). Der Adapter dc1 benutzt das
       Medium 10baseT/UTP. Weitere Informationen u:ber die einstellbaren
       Medien entnehmen Sie der Hilfeseite des Treibers.

    7. Der Verbindungsstatus (status) ist active, das heisst es wurde ein
       Tra:gersignal entdeckt. Fu:r dc1 wird status: no carrier angezeigt.
       Das ist normal, wenn kein Kabel an der Karte angeschlossen ist.

   Wa:re die Karte nicht konfiguriert, wu:rde die Ausgabe von ifconfig(8) so
   aussehen:

 dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=80008<VLAN_MTU,LINKSTATE>
         ether 00:a0:cc:da:da:da
         media: Ethernet autoselect (100baseTX <full-duplex>)
         status: active

   Die Karte muss als Benutzer root konfiguriert werden. Die Konfiguration
   kann auf der Kommandozeile mit ifconfig(8) erfolgen. Allerdings gehen
   diese Informationen bei einem Neustart verloren. Tragen Sie stattdessen
   die Konfiguration in /etc/rc.conf ein. Wenn es im LAN einen DHCP-Server
   gibt, fu:gen Sie einfach folgende Zeile hinzu:

 ifconfig_dc0="DHCP"

   Ersetzen Sie >dc0 durch die richtigen Werte fu:r das System.

   Nachdem Sie die Zeile hinzugefu:gt haben, folgen Sie den Anweisungen in
   Abschnitt 11.5.3, "Test und Fehlersuche".

  Anmerkung:

   Wenn das Netzwerk wa:hrend der Installation konfiguriert wurde, existieren
   vielleicht schon Eintra:ge fu:r die Netzwerkkarte(n). U:berpru:fen Sie
   /etc/rc.conf bevor Sie weitere Zeilen hinzufu:gen.

   Falls kein DHCP-Server zur Verfu:gung steht, mu:ssen die Netzwerkkarten
   manuell konfiguriert werden. Fu:gen Sie fu: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
   fu:r das System. Die Manualpages des Treibers, ifconfig(8) und rc.conf(5)
   enthalten weitere Einzelheiten u:ber verfu:gbare Optionen und die Syntax
   von /etc/rc.conf.

   Wenn das Netzwerk kein DNS benutzt, ko:nnen Sie in /etc/hosts die Namen
   und IP-Adressen der Rechner des LANs eintragen. Weitere Informationen
   entnehmen Sie hosts(5) und /usr/share/examples/etc/hosts.

  Anmerkung:

   Falls kein DHCP-Server zur Verfu:gung steht, Sie aber Zugang zum Internet
   beno:tigen, mu:ssen Sie das Standard-Gateway und die Nameserver manuell
   konfigurieren:

 # echo 'defaultrouter="Ihr_Default_Gateway"' >> /etc/rc.conf
 # echo 'nameserver Ihr_DNS_Server' >> /etc/resolv.conf

  11.5.3. Test und Fehlersuche

   Nachdem die notwendigen A:nderungen in /etc/rc.conf gespeichert wurden,
   kann das System neu gestartet werden, um die Konfiguration zu testen und
   zu u:berpru:fen, ob das System ohne Fehler neu gestartet wurde. Alternativ
   ko:nnen Sie mit folgenden Befehl die Netzwerkeinstellungen neu
   initialisieren:

 # service netif restart

  Anmerkung:

   Falls in /etc/rc.conf ein Default-Gateway definiert wurde, mu:ssen Sie
   auch den folgenden Befehl ausfu:hren:

 # service routing restart

   Wenn das System gestartet ist, sollten Sie die Netzwerkkarten testen.

    11.5.3.1. Test der Ethernet-Karte

   Um zu pru:fen, ob die Ethernet-Karte richtig konfiguriert ist, testen Sie
   zuna:chst mit ping(8) den Adapter selbst und sprechen Sie dann eine andere
   Maschine im LAN an.

   Zuerst, der Test des Adapters:

 % 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

 % ping -c5 192.168.1.2
 PING 192.168.1.2 (192.168.1.2): 56 data bytes
 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

 --- 192.168.1.2 ping statistics ---
 5 packets transmitted, 5 packets received, 0% packet loss
 round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

   Um die Namensauflo: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. Fu:gen Sie dazu die Namen
   und IP-Adressen der Rechner im LAN in /etc/hosts hinzu, falls sie nicht
   bereits vorhanden sind. Weitere Informationen finden Sie in hosts(5) und
   /usr/share/examples/etc/hosts.

    11.5.3.2. Fehlersuche

   Fehler zu beheben, ist immer sehr mu:hsam. Indem Sie die einfachen Sachen
   zuerst pru:fen, erleichtern Sie sich die Aufgabe. Steckt das
   Netzwerkkabel? Sind die Netzwerkdienste richtig konfiguriert? Funktioniert
   die Firewall? Wird die Netzwerkkarte von FreeBSD unterstu:tzt? Lesen Sie
   immer die Hardware-Informationen des Releases, bevor Sie einen
   Fehlerbericht einsenden. Aktualisieren Sie die FreeBSD-Version auf die
   neueste -STABLE Version. Suchen Sie in den Archiven der Mailinglisten und
   im Internet nach bekannten Lo:sungen.

   Wenn die Karte funktioniert, die Verbindungen aber zu langsam sind,
   sollten Sie tuning(7) lesen. Pru:fen Sie auch die Netzwerkkonfiguration,
   da falsche Einstellungen die Ursache fu:r langsame Verbindungen sein
   ko:nnen.

   Wenn Sie viele device timeout Meldungen in den Systemprotokollen finden,
   pru:fen Sie, dass es keinen Konflikt zwischen der Netzwerkkarte und
   anderen Gera:ten des Systems gibt. U:berpru:fen Sie nochmals die
   Verkabelung. Unter Umsta:nden beno:tigen Sie eine andere Netzwerkkarte.

   Bei watchdog timeout Fehlermeldungen, kontrollieren Sie zuerst die
   Verkabelung. U:berpru:fen Sie dann, ob der PCI-Steckplatz der Karte Bus
   Mastering unterstu:tzt. Auf einigen a:lteren Motherboards ist das nur fu: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 ko: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 gu:ltige Route zu dem Zielsystem
   existiert. Wenn nicht, lesen Sie Abschnitt 30.2, "Gateways und Routen".

   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
   ping(8)-Pakete. Weitere Informationen erhalten Sie in Kapitel 29,
   Firewalls.

   Falls die Leistung der Karte schlecht ist, setzen Sie die Medienerkennung
   von autoselect (automatisch) auf das richtige Medium. In vielen Fa:llen
   lo:st diese Massnahme Leistungsprobleme. Wenn nicht, pru:fen Sie nochmal
   die Netzwerkeinstellungen und lesen Sie tuning(7).

11.6. Virtual Hosts

   Ein gebra:uchlicher Zweck von FreeBSD 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
   Eintra: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-Eintra:ge mit alias0 anfangen mu:ssen und
   weiter hochgeza:hlt werden, das heisst alias1, alias2, und so weiter. Die
   Konfiguration der Aliase ho:rt bei der ersten fehlenden Zahl auf.

   Die Berechnung der Alias-Netzwerkmasken ist wichtig. Fu: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 gefu: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) mu:ssen die Maske 255.255.255.255
   erhalten.

   Die folgenden Eintra: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"

   Dies kann mit einer durch Leerzeichen getrennten Liste von
   IP-Adressbereichen auch einfacher ausgedru:ckt werden. Die erste Adresse
   hat wieder die angegebene Netzwerkmaske und die zusa:tzlichen Adressen
   haben die Netzwerkmaske 255.255.255.255.

 ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"

11.7. Konfiguration der Systemprotokollierung

   Beigetragen von Niclas Zeising.

   Die Aufzeichnung und Kontrolle von Log-Meldungen ist ein wichtiger Aspekt
   der Systemadministration. Die Informationen werden nicht nur verwendet um
   Hard- und Softwarefehler ausfindig zu machen, auch zur U:berwachung der
   Sicherheit und der Reaktion bei einem Zwischenfall spielen diese
   Aufzeichnungen eine wichtige Rolle. Die meisten Systemdienste und
   Anwendungen erzeugen Log-Meldungen.

   FreeBSD stellt mit syslogd ein Werkzeug zur Verwaltung von Protokollen
   bereit. In der Voreinstellung wird syslogd beim Booten automatisch
   gestartet. Dieses Verhalten wird u:ber die Variable syslogd_enable in
   /etc/rc.conf gesteuert. Dazu gibt es noch zahlreiche Argumente, die in der
   Variable syslogd_flags in /etc/rc.conf gesetzt werden ko:nnen. Lesen Sie
   syslogd(8) fu:r weitere Informationen u:ber die verfu:gbaren Argumente.

   Dieser Abschnitt beschreibt die Konfiguration und Verwendung des FreeBSD
   Protokollservers, und diskutiert auch die Log-Rotation und das Management
   von Logdateien.

  11.7.1. Konfiguration der lokalen Protokollierung

   Die Konfigurationsdatei /etc/syslog.conf steuert, was syslogd mit
   Log-Meldungen macht, sobald sie empfangen werden. Es gibt verschiedene
   Parameter, die das Verhalten bei eingehenden Ereignissen kontrollieren.
   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 mo:glich,
   Meldungen in verschiedenen Logdateien zu protokollieren, oder Meldungen zu
   verwerfen, je nach Konfiguration von facility und level. Ebenfalls besteht
   die Mo:glichkeit auf Meldungen zu reagieren, die von einer bestimmten
   Anwendung stammen, oder von einem spezifischen Host erzeugt wurden.

   Die Konfigurationsdatei von syslogd(8) entha:lt fu:r jede Aktion eine
   Zeile. Die Syntax besteht aus einem Auswahlfeld, gefolgt von einem
   Aktionsfeld. Die Syntax fu:r das Auswahlfeld ist facility.level. Dies
   entspricht Log-Meldungen von facility mit einem Level von level oder
   ho:her. Um noch pra:ziser festzulegen was protokolliert wird, kann dem
   Level optional ein Vergleichsflag vorangestellt werden. Mehrere Auswahlen
   ko:nnen, durch Semikolon (;) getrennt, fu:r die gleiche Aktion verwendet
   werden. * wa: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
   FreeBSD:

 # $FreeBSD$
 #
 #       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
 !*

   In diesem Beispiel:

     * Zeile 8 selektiert alle Meldungen vom Level err, sowie kern.warning,
       auth.notice und mail.crit und schickt diese zur Konsole
       (/dev/console).

     * Zeile 12 selektiert alle Meldungen von mail ab dem Level info oder
       ho:her und schreibt diese in /var/log/maillog.

     * Zeile 17 benutzt ein Vergleichsflag (=), um nur Meldungen vom Level
       debug zu selektieren und schreibt diese in /var/log/debug.log.

     * Zeile 33 zeigt ein Beispiel fu:r die Nutzung einer
       Programmspezifikation. Die nachfolgenden Regeln sind dann nur fu:r
       Programme gu:ltig, welche der Programmspezifikation stehen. In diesem
       Fall werden alle Meldungen von ppp (und keinem anderen Programm) in
       /var/log/ppp.log geschrieben.

   Die verfu:gbaren level, beginnend mit den ho: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 ko:nnen.

   Um alle Meldungen vom Level notice und ho:her in /var/log/daemon.log zu
   protokollieren, fu:gen Sie folgenden Eintrag hinzu:

 daemon.notice                                        /var/log/daemon.log

   Fu:r weitere Informationen zu verschiedenen Level und faclilities, lesen
   Sie syslog(3) und syslogd(8). Weitere Informationen zu /etc/syslog.conf,
   dessen Syntax und erweiterten Anwendungsbeispielen, finden Sie in
   syslog.conf(5).

  11.7.2. Management und Rotation von Logdateien

   Logdateien ko:nnen schnell wachsen und viel Speicherplatz belegen, was es
   schwieriger macht, nu:tzliche Informationen zu finden. Log-Management
   versucht, diesen Effekt zu mildern. FreeBSD verwendet newsyslog fu:r die
   Verwaltung von Logdateien. Dieses in FreeBSD integrierte Programm rotiert
   und komprimiert in regelma:ssigen Absta:nden Logdateien. Optional kann es
   auch fehlende Logdateien erstellen und Programme benachrichtigen, wenn
   Logdateien verschoben wurden. Die Logdateien ko:nnen von syslogd oder
   einem anderen Programm generiert werden. Obwohl newsyslog normalerweise
   von cron(8) aufgerufen wird, ist es kein Systemda:mon. In der
   Standardkonfiguration wird dieser Job jede Stunde ausgefu:hrt.

   Um zu wissen, welche Massnahmen zu ergreifen sind, liest newsyslog seine
   Konfigurationsdatei /etc/newsyslog.conf. Diese Konfigurationsdatei
   entha:lt eine Zeile fu:r jede Datei, die von newsyslog verwaltet wird.
   Jede Zeile entha:lt Informationen u: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 Logdateien rotiert werden. Hier folgt die
   Standardkonfiguration in FreeBSD:

 # configuration file for newsyslog
 # $FreeBSD$
 #
 # Entries which do not specify the '/pid_file' field will cause the
 # syslogd process to be signalled when that log file is rotated.  This
 # action is only appropriate for log files which are written to by the
 # syslogd process (ie, files listed in /etc/syslog.conf).  If there
 # is no process which needs to be signalled when a given log file is
 # rotated, then the entry for that file should include the 'N' flag.
 #
 # The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'.
 #
 # Note: some sites will want to select more restrictive protections than the
 # defaults.  In particular, it may be desirable to switch many of the 644
 # entries to 640 or 600.  For example, some sites will consider the
 # contents of maillog, messages, and lpd-errs to be confidential.  In the
 # future, these defaults may change to more conservative ones.
 #
 # logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
 /var/log/all.log                        600  7     *    @T00  J
 /var/log/amd.log                        644  7     100  *     J
 /var/log/auth.log                       600  7     100  @0101T JC
 /var/log/console.log                    600  5     100  *     J
 /var/log/cron                           600  3     100  *     JC
 /var/log/daily.log                      640  7     *    @T00  JN
 /var/log/debug.log                      600  7     100  *     JC
 /var/log/kerberos.log                   600  7     100  *     J
 /var/log/lpd-errs                       644  7     100  *     JC
 /var/log/maillog                        640  7     *    @T00  JC
 /var/log/messages                       644  5     100  @0101T JC
 /var/log/monthly.log                    640  12    *    $M1D0 JN
 /var/log/pflog                          600  3     100  *     JB    /var/run/pflogd.pid
 /var/log/ppp.log        root:network    640  3     100  *     JC
 /var/log/devd.log                       644  3     100  *     JC
 /var/log/security                       600  10    100  *     JC
 /var/log/sendmail.st                    640  10    *    168   B
 /var/log/utx.log                        644  3     *    @01T05 B
 /var/log/weekly.log                     640  5     1    $W6D0 JN
 /var/log/xferlog                        600  7     100  *     JC

   Jede Zeile beginnt mit dem Namen der Protokolldatei, die rotiert werden
   soll, optional gefolgt von Besitzer und Gruppe fu:r rotierende, als auch
   fu: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 Gro:sse den Wert von
   size u: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 und wann die Datei
   rotiert wird.

   Weitere Informationen zu allen Feldern, gu:ltigen Flags und wie Sie die
   Rotationszeit angeben ko:nnen, finden Sie in newsyslog.conf(5). Denken Sie
   daran, dass newsyslog von cron(8) aufgerufen wird und somit Dateien auch
   nur dann rotiert, wenn es von cron(8) aufgerufen wird, und nicht
   ha:ufiger.

  11.7.3. Protokollierung von anderen Hosts

   Beigetragen von Tom Rhodes.
   U:bersetzt von Benedict Reuschling.

   Die U: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, Zusammenfu:hrung und Rotation von Protokolldateien kann
   in FreeBSD mit syslogd und newsyslog konfiguriert werden. In der folgenden
   Beispielkonfiguration sammelt Host A, genannt logserv.example.com,
   Protokollinformationen fu:r das lokale Netzwerk. Host B, genannt
   logclient.example.com wird seine Protokollinformationen an den Server
   weiterleiten.

    11.7.3.1. Konfiguration des Protokollservers

   Ein Protokollserver ist ein System, welches Protokollinformationen von
   anderen Hosts akzeptiert. Bevor Sie diesen Server konfigurieren, pru: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 mu:ssen gu:ltige Eintra:ge
       fu:r sowohl Vorwa: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 Eintra:gen gepflegt werden. Eine
       funktionierende Namensauflo:sung ist zwingend erforderlich, ansonsten
       wu: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.

   Beispiel 11.1. Einfache Server Konfiguration

 +logclient.example.com
 *.*     /var/log/logclient.log

   Fu:gen Sie fu:r jeden Client zwei Zeilen hinzu, falls Sie mehrere Clients
   in diese Datei aufnehmen. Weitere Informationen u:ber die verfu:gbaren
   Verbindungswege finden Sie in syslog.conf(5).

   Konfigurieren Sie als na:chstes /etc/rc.conf:

 syslogd_enable="YES"
 syslogd_flags="-a logclient.example.com -v -v"

   Der erste Eintrag startet syslogd wa:hrend des Bootens. Der zweite Eintrag
   erlaubt es, Daten von dem spezifizierten Client auf diesem Server zu
   akzeptieren. Die Verwendung von -v -v erho:ht die Anzahl von
   Protokollnachrichten. Dies ist hilfreich fu:r die Feineinstellung der
   Verbindungswege, da Administratoren auf diese Weise erkennen, welche Arten
   von Nachrichten von welchen Verbindungswegen protokolliert werden.

   Mehrere -a-Optionen ko:nnen angegeben werden, um die Protokollierung von
   mehreren Clients zu erlauben. IP-Adressen und ganze Netzblo:cke ko:nnen
   ebenfalls spezifiziert werden. Eine vollsta:ndige Liste der Optionen
   finden Sie in syslogd(8).

   Zum Schluss muss die Protokolldatei erstellt werden:

 # touch /var/log/logclient.log

   Zu diesem Zeitpunkt sollte syslogd neu gestartet und u:berpru:ft werden:

 # service syslogd restart
 # pgrep syslog

   Wenn eine PID zuru: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.

    11.7.3.2. Konfiguration des Protokollclients

   Ein Protokollclient sendet Protokollinformationen an einen
   Protokollserver. Zusa:tzlich beha: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 wa:hrend des Systemstarts.
   Der zweite Eintrag erho:ht die Anzahl der Protokollnachrichten. Die Option
   -s verhindert, dass dieser Client Protokolle von anderen Hosts akzeptiert.

   Als na:chstes muss der Protokollserver in der /etc/syslog.conf des Clients
   eingetragen werden. In diesem Beispiel wird das @-Symbol benutzt, um
   sa:mtliche Protokolldaten an einen bestimmten Server zu senden:

 *.*               @logserv.example.com

   Nachdem die A:nderungs gespeichert wurden, muss syslogd neu gestartet
   werden, damit die A:nderungen wirksam werden:

 # service syslogd restart

   Um zu testen, ob Protokollnachrichten u:ber das Netzwerk gesendet werden,
   kann logger(1) auf dem Client benutzt werden, um eine Nachricht an syslogd
   zu schicken:

 # 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.

    11.7.3.3. Fehlerbehebung beim Protokollserver

   Wenn der Server keine Nachrichten empfa:ngt, ist die Ursache
   wahrscheinlich ein Netzwerkproblem, ein Problem bei der Namensauflo:sung
   oder ein Tippfehler in einer Konfigurationsdatei. Um die Ursache zu
   isolieren, mu:ssen Sie sicherstellen, dass sich Server und Client u:ber
   den in /etc/rc.conf konfigurierten Hostnamen mit ping erreichen la:sst.
   Falls dies nicht gelingt sollten Sie die Netzwerkverkabelung u:berpru:fen,
   ausserdem Firewallregeln sowie die Eintra:ge fu:r Hosts im DNS und
   /etc/hosts. U:berpru: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 ko:nnen, der Server
   aber immer noch keine Nachrichten empfa:ngt, ko:nnen Sie voru:bergehend
   die Ausfu:hrlichkeit der Protokollierung erho:hen, um die Ursache fu: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 fu:r das Problem erkennbar. Um nun die
   Ausfu:hrlichkeit der Protokollierung zu erho:hen, passen Sie auf dem
   Server den Eintrag syslogd_flags an. Anschliessend starten Sie den Dienst
   neu:

 syslogd_flags="-d -a logclient.example.com -v -v"

 # 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 u:berpru:fen
   Sie das Ergebnis:

 # 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.

    11.7.3.4. Sicherheitsbedenken

   Wie mit jedem Netzwerkdienst, mu:ssen Sicherheitsanforderungen in Betracht
   gezogen werden, bevor ein Protokollserver eingesetzt wird. Manchmal
   enthalten Protokolldateien sensitive Daten u:ber aktivierte Dienste auf
   dem lokalen Rechner, Benutzerkonten und Konfigurationsdaten. Daten, die
   vom Client an den Server geschickt werden, sind weder verschlu:sselt noch
   mit einem Passwort geschu:tzt. Wenn ein Bedarf fu:r Verschlu:sselung
   besteht, ist es mo:glich security/stunnel zu verwenden, welches die
   Protokolldateien u:ber einen verschlu:sselten Tunnel versendet.

   Lokale Sicherheit ist ebenfalls ein Thema. Protokolldateien sind wa:hrend
   der Verwendung oder nach ihrer Rotation nicht verschlu:sselt. Lokale
   Benutzer versuchen vielleicht, auf diese Dateien zuzugreifen, um
   zusa:tzliche Einsichten in die Systemkonfiguration zu erlangen. Es ist
   absolut notwendig, die richtigen Berechtigungen auf diesen Dateien zu
   setzen. Das Werkzeug newsyslog unterstu:tzt das Setzen von Berechtigungen
   auf gerade erstellte oder rotierte Protokolldateien. Protokolldateien mit
   Zugriffsmodus 600 sollten verhindern, dass lokale Benutzer darin
   herumschnu:ffeln. Zusa:tzliche Informationen finden Sie in
   newsyslog.conf(5).

11.8. Konfigurationsdateien

  11.8.1. /etc Layout

   Konfigurationsdateien finden sich in einigen Verzeichnissen unter anderem
   in:

   /etc                Entha:lt generelle systemspezifische                   
                       Konfigurationsinformationen.                           
   /etc/defaults       Default Versionen der Konfigurationsdateien.           
   /etc/mail           Entha:lt die sendmail(8) Konfiguration und weitere MTA 
                       Konfigurationsdateien.                                 
   /etc/ppp            Hier findet sich die Konfiguration fu:r die User- und  
                       Kernel-ppp Programme.                                  
                       Das Vorgabeverzeichnis, in dem Daten von named(8)      
   /etc/namedb         gehalten werden. Normalerweise werden hier named.conf  
                       und Zonendaten abgelegt.                               
                       Installierte Anwendungen legen hier ihre               
   /usr/local/etc      Konfigurationsdateien ab. Dieses Verzeichnis kann      
                       Unterverzeichnisse fu:r bestimmte Anwendungen          
                       enthalten.                                             
   /usr/local/etc/rc.d rc(8)-Skripten installierter Anwendungen.              
   /var/db             Automatisch generierte systemspezifische Datenbanken,  
                       wie die Paket-Datenbank oder die locate(1)-Datenbank.  

  11.8.2. Hostnamen

    11.8.2.1. /etc/resolv.conf

   Wie ein FreeBSD-System auf das Internet Domain Name System (DNS) zugreift,
   wird in /etc/resolv.conf festgelegt.

   Die gebra:uchlichsten Eintra:ge in /etc/resolv.conf sind:

              Die IP-Adresse eines Nameservers, den der Resolver abfragen     
   nameserver soll. Bis zu drei Server werden in der Reihenfolge, in der sie  
              aufgeza:hlt sind, abgefragt.                                    
              Suchliste mit Domain-Namen zum Auflo:sen von Hostnamen. Die     
   search     Liste wird normalerweise durch den Domain-Teil des lokalen      
              Hostnamens festgelegt.                                          
   domain     Der lokale Domain-Name.                                         

   Beispiel fu:r eine typische /etc/resolv.conf:

 search example.com
 nameserver 147.11.1.11
 nameserver 147.11.100.30

  Anmerkung:

   Nur eine der Anweisungen search oder domain sollte benutzt werden.

   Wenn Sie DHCP benutzen, u:berschreibt dhclient(8) fu:r gewo:hnlich
   /etc/resolv.conf mit den Informationen vom DHCP-Server.

    11.8.2.2. /etc/hosts

   /etc/hosts ist eine einfache textbasierte Datenbank. Zusammen mit DNS und
   NIS stellt sie eine Abbildung zwischen Namen und IP-Adressen zur
   Verfu:gung. Anstatt named(8) zu konfigurieren, ko:nnen hier lokale
   Rechner, die u:ber ein LAN verbunden sind, eingetragen werden. Lokale
   Eintra:ge fu:r gebra:uchliche Internet-Adressen in /etc/hosts verhindern
   die Abfrage eines externen Servers und beschleunigen die Namensauflo:sung.

 # $FreeBSD$
 #
 #
 # Host Database
 #
 # This file should contain the addresses and aliases for local hosts that
 # share this file.  Replace 'my.domain' below with the domainname of your
 # machine.
 #
 # In the presence of the domain name service or NIS, this file may
 # not be consulted at all; see /etc/nsswitch.conf for the resolution order.
 #
 #
 ::1         localhost localhost.my.domain
 127.0.0.1       localhost localhost.my.domain
 #
 # Imaginary network.
 #10.0.0.2       myname.my.domain myname
 #10.0.0.3       myfriend.my.domain myfriend
 #
 # According to RFC 1918, you can use the following IP networks for
 # private nets which will never be connected to the Internet:
 #
 #   10.0.0.0    -   10.255.255.255
 #   172.16.0.0  -   172.31.255.255
 #   192.168.0.0 -   192.168.255.255
 #
 # In case you want to be able to connect to the Internet, you need
 # real official assigned numbers.  Do not try to invent your own network
 # numbers but instead get one from your network provider (if any) or
 # from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
 #

   /etc/hosts hat das folgende Format:

 [Internet Adresse] [Offizieller Hostname] [Alias1] [Alias2] ...

   Zum Beispiel:

 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2

   Weitere Informationen entnehmen Sie bitte hosts(5).

11.9. Einstellungen mit sysctl(8)

   Mit sysctl(8) ko:nnen Sie A:nderungen an einem laufenden FreeBSD-System
   vornehmen. Unter anderem ko:nnen Optionen des TCP/IP-Stacks oder des
   virtuellen Speichermanagements vera:ndert werden. Unter der Hand eines
   erfahrenen Systemadministrators kann dies die Systemperformance erheblich
   verbessern. U:ber 500 Variablen ko:nnen mit sysctl(8) gelesen und gesetzt
   werden.

   Der Hauptzweck von sysctl(8) besteht darin, Systemeinstellungen zu lesen
   und zu vera:ndern.

   Alle auslesbaren Variablen werden wie folgt angezeigt:

 % sysctl -a

   Um eine spezielle Variable zu lesen, geben Sie den Namen an:

 % sysctl kern.maxproc
 kern.maxproc: 1044

   Um eine Variable zu setzen, benutzen Sie die Syntax Variable= Wert:

 # sysctl kern.maxfiles=5000
 kern.maxfiles: 2088 -> 5000

   Mit sysctl ko:nnen Strings, Zahlen oder Boolean-Werte gesetzt werden. Bei
   Boolean-Werten steht 1 fu:r wahr und 0 fu:r falsch.

   Um die Variablen automatisch wa:hrend des Systemstarts zu setzen, fu:gen
   Sie sie in /etc/sysctl.conf ein. Weitere Informationen finden Sie in der
   Hilfeseite sysctl.conf(5) und in Abschnitt 11.9.1, "sysctl.conf".

  11.9.1. sysctl.conf

   /etc/sysctl.conf sieht a: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, ko:nnen
   Sie in /etc/sysctl.conf die folgenden Variablen setzen:

 # Do not log fatal signal exits (e.g. sig 11)
 kern.logsigexit=0

 # Prevent users from seeing information about processes that
 # are being run under another UID.
 security.bsd.see_other_uids=0

  11.9.2. Schreibgeschu:tzte Variablen

   Contributed by Tom Rhodes.

   Wenn schreibgeschu:tzte sysctl(8)-Variablen vera:ndert werden, ist ein
   Neustart des Systems erforderlich.

   Beispielsweise hat cardbus(4) auf einigen Laptops Schwierigkeiten,
   Speicherbereiche zu erkennen. Es treten dann Fehlermeldungen wie die
   folgende auf:

 cbb0: Could not map register memory
 device_probe_and_attach: cbb0 attach returned 12

   Um dieses Problem zu lo:sen, muss eine schreibgeschu:tzte
   sysctl(8)-Variable vera:ndert werden. Fu:gen Sie
   hw.pci.allow_unsupported_io_range=1 in /boot/loader.conf hinzu und starten
   Sie das System neu. Danach sollte cardbus(4) fehlerfrei funktionieren.

11.10. Tuning von Laufwerken

   Der folgende Abschnitt beschreibt die verschiedenen Methoden zur
   Feinabstimmung der Laufwerke. Oft sind mechanische Teile in Laufwerken,
   wie SCSI-Laufwerke, verbaut. Diese ko:nnen einen Flaschenhals bei der
   Gesamtleistung des Systems darstellen. Sie ko: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 iostat(8) zu verwenden, um verschiedene A:nderungen zu testen und um
   nu:tzliche IO-Informationen des Systems zu erhalten.

  11.10.1. Sysctl Variablen

    11.10.1.1. vfs.vmiodirenable

   Die 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 u:ber sehr viel Speicher verfu: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 Verfu:gung. Der Nachteil bei
   dieser Vorgehensweise ist, dass zum Zwischenspeichern eines Verzeichnisses
   mindestens eine physikalische Seite im Speicher, die normalerweise 4 kB
   gross ist, anstelle von 512 Bytes gebraucht wird. Es wird empfohlen, diese
   Option aktiviert zu lassen, wenn Sie Dienste zur Verfu:gung stellen, die
   viele Dateien manipulieren. Beispiele fu:r solche Dienste sind Web-Caches,
   grosse Mail-Systeme oder Netnews. Die aktivierte Variable vermindert,
   trotz des verschwendeten Speichers, in aller Regel nicht die Leistung des
   Systems, obwohl Sie das nachpru:fen sollten.

    11.10.1.2. vfs.write_behind

   In der Voreinstellung besitzt die sysctl(8)-Variable vfs.write_behind den
   Wert 1 (aktiviert). Mit dieser Einstellung schreibt das Dateisystem
   anfallende vollsta:ndige Cluster, die besonders beim sequentiellen
   Schreiben grosser Dateien auftreten, direkt auf das Medium aus. Dies
   verhindert, dass sich im Buffer-Cache vera:nderte Puffer (dirty buffers)
   ansammeln, die die I/O-Verarbeitung nicht mehr beschleunigen wu:rden.
   Unter bestimmten Umsta:nden blockiert diese Funktion allerdings Prozesse.
   Setzen Sie in diesem Fall die Variable vfs.write_behind auf den Wert 0.

    11.10.1.3. vfs.hirunningspace

   Die sysctl(8)-Variable vfs.hirunningspace bestimmt systemweit die Menge
   ausstehender Schreiboperationen, die dem Platten-Controller zu jedem
   beliebigen Zeitpunkt u:bergeben werden ko:nnen. Normalerweise ko:nnen Sie
   den Vorgabewert verwenden. Auf Systemen mit vielen Platten kann der Wert
   aber auf 4 bis 5 Megabyte erho:ht werden. Ein zu hoher Wert (gro:sser als
   der Schreib-Schwellwert des Buffer-Caches) kann zu Leistungsverlusten
   fu:hren. Setzen Sie den Wert daher nicht zu hoch! Hohe Werte ko:nnen auch
   Leseoperationen verzo:gern, die gleichzeitig mit Schreiboperationen
   ausgefu:hrt werden.

   Es gibt weitere sysctl(8)-Variablen, mit denen Sie den Buffer-Cache und
   den VM-Page-Cache beeinflussen ko:nnen. Es wird nicht empfohlen, diese
   Variablen zu vera:ndern, da das VM-System den virtuellen Speicher selbst
   sehr gut verwaltet.

    11.10.1.4. vm.swap_idle_enabled

   Die sysctl(8)-Variable vm.swap_idle_enabled ist fu:r grosse
   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, ko: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 fru:her als
   nach dem normalen Algorithmus ausgelagert werden, verschafft das dem
   Auslagerungs-Prozess mehr Luft. Aktivieren Sie diese Funktion nur, wenn
   Sie sie wirklich beno:tigen: Die Speicherseiten werden eher fru:her als
   spa:ter ausgelagert. Der Platz im Swap-Bereich wird dadurch schneller
   verbraucht und die Plattenaktivita:ten steigen an. Auf kleinen Systemen
   hat diese Funktion spu:rbare Auswirkungen. Auf grossen Systemen, die
   sowieso schon Seiten auslagern mu:ssen, ko:nnen ganze Prozesse leichter in
   den Speicher geladen oder ausgelagert werden.

    11.10.1.5. hw.ata.wc

   Obwohl das Abstellen des IDE-Schreib-Zwischenspeichers die Bandbreite zum
   Schreiben auf die IDE-Festplatte verringert, kann es aus Gru:nden der
   Datenkonsistenz als notwendig angesehen werden. Das Problem ist, dass
   IDE-Platten keine zuverla:ssige Aussage u: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 Blo:cke im Fall von
   starker Plattenaktivita:t auf unbefristete Zeit verzo:gert wird. Ein
   Absturz oder Stromausfall zu dieser Zeit kann die Dateisysteme erheblich
   bescha:digen. Sie sollten den Wert der sysctl(8)-Variable hw.ata.wc auf
   dem System u:berpru:fen. Wenn der Schreib-Zwischenspeicher abgestellt ist,
   ko:nnen Sie ihn beim Systemstart aktivieren, indem Sie die Variable in
   /boot/loader.conf auf den Wert 1 setzen.

   Weitere Informationen finden Sie in ata(4).

    11.10.1.6. SCSI_DELAY (kern.cam.scsi_delay)

   Mit der Kerneloption SCSI_DELAY kann die Dauer des Systemstarts verringert
   werden. Der Vorgabewert ist recht hoch und er verzo:gert den Systemstart
   um 15 oder mehr Sekunden. Normalerweise kann dieser Wert, insbesondere mit
   modernen Laufwerken, mit der sysctl(8)-Variable kern.cam.scsi_delay auf 5
   Sekunden heruntergesetzt werden. Die Variable sowie die Kerneloption
   verwenden fu:r die Zeitangabe Millisekunden und nicht Sekunden.

  11.10.2. Soft Updates

   Mit tunefs(8) lassen sich Feineinstellungen an Dateisystemen vornehmen.
   Das Programm hat verschiedene Optionen. Soft Updates werden wie folgt ein-
   und ausgeschaltet:

 # tunefs -n enable /filesystem
 # tunefs -n disable /filesystem

   Ein eingeha:ngtes Dateisystem kann nicht mit 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 Lo:schen von Dateien, gesteigert.
   Es wird empfohlen, Soft Updates auf allen UFS-Dateisystemen zu aktivieren.
   Allerdings sollten Sie sich u: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 u:ber mehrere Sekunden oder gar eine Minute nicht
   synchronisiert wurde. Nicht geschriebene Daten gehen dann vielleicht
   verloren. Zweitens verzo:gern Soft Updates die Freigabe von Datenblo:cken.
   Eine gro:ssere Aktualisierung eines fast vollen Dateisystems, wie dem
   Root-Dateisystem, z.B. wa:hrend eines make installworld, kann das
   Dateisystem vollaufen lassen. Dadurch wu:rde die Aktualisierung
   fehlschlagen.

    11.10.2.1. Details u:ber Soft Updates

   Bei einem Metadaten-Update werden die Inodes und Verzeichniseintra:ge
   aktualisiert auf die Platte zuru:ckgeschrieben. Es gibt zwei klassische
   Ansa:tze, um die Metadaten des Dateisystems auf die Platte zu schreiben.

   Das historisch u:bliche Verfahren waren synchrone Updates der Metadaten,
   d. h. wenn eine A:nderung an einem Verzeichnis no:tig war, wurde
   anschliessend gewartet, bis diese A:nderung tatsa:chlich auf die Platte
   zuru:ckgeschrieben worden war. Der Inhalt der Dateien wurde im "Buffer
   Cache" zwischengespeichert und spa:ter asynchron auf die Platte
   geschrieben. Der Vorteil dieser Implementierung ist, dass sie sicher
   funktioniert. Wenn wa:hrend eines Updates ein Ausfall erfolgt, haben die
   Metadaten immer einen konsistenten Zustand. Eine Datei ist entweder
   komplett angelegt oder gar nicht. Wenn die Datenblo:cke einer Datei im
   Fall eines Absturzes noch nicht den Weg aus dem "Buffer Cache" auf die
   Platte gefunden haben, kann fsck(8) das Dateisystem reparieren, indem es
   die Dateila:nge einfach auf 0 setzt. Ausserdem ist die Implementierung
   einfach und u:berschaubar. Der Nachteil ist, dass A:nderungen der
   Metadaten sehr langsam vor sich gehen. Ein rm -r beispielsweise fasst alle
   Dateien eines Verzeichnisses der Reihe nach an, aber jede dieser
   A:nderungen am Verzeichnis (Lo:schen einer Datei) wird einzeln synchron
   auf die Platte geschrieben. Gleiches beim Auspacken grosser Hierarchien
   mit tar -x.

   Der zweite Ansatz sind asynchrone Metadaten-Updates. Das ist der Standard,
   wenn UFS-Dateisysteme mit mount -o async eingeha:ngt werden. Man schickt
   die Updates der Metadaten einfach auch noch u: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 a:ndern, werden also viel schneller. Auch hier
   ist die Implementierung sehr einfach und wenig anfa:llig fu:r Fehler.
   Nachteil ist, dass keinerlei Konsistenz des Dateisystems mehr gesichert
   ist. Wenn mitten in einer Operation, die viele Metadaten a:ndert, ein
   Ausfall erfolgt (Stromausfall, dru:cken des Reset-Schalters), dann ist das
   Dateisystem anschliessend in einem unbestimmten Zustand. Niemand kann
   genau sagen, was noch geschrieben worden ist und was nicht mehr; die
   Datenblo:cke einer Datei ko:nnen schon auf der Platte stehen, wa:hrend die
   inode Tabelle oder das zugeho:rige Verzeichnis nicht mehr aktualisiert
   worden ist. Man kann praktisch kein fsck(8) mehr implementieren, das
   diesen Zustand wieder reparieren kann, da die dazu no:tigen Informationen
   einfach auf der Platte fehlen. Wenn ein Dateisystem irreparabel
   bescha:digt wurde, hat man nur noch die Mo:glichkeit es neu zu erzeugen
   und die Daten vom Backup zuru: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 zusammenha:ngendes Stu:ckchen ist, haben
   die Schreibko:pfe der Platte bei massiven Operationen auf Metadaten keine
   allzu grossen Wege zuru:ckzulegen, so dass alles ein ganzes Stu:ck
   schneller geht als bei klassischen synchronen Updates. Die Komplexita:t
   der Implementierung ha:lt sich ebenfalls in Grenzen, somit auch die
   Anfa:lligkeit fu:r Fehler. Als Nachteil ergibt sich, dass Metadaten
   zweimal auf die Platte geschrieben werden mu:ssen (einmal in die logging
   area, einmal an die richtige Stelle), so dass das im Falle regula:rer
   Arbeit (also keine geha:uften Metadatenoperationen) eine "Pessimisierung"
   des Falls der synchronen Updates eintritt, es wird alles langsamer. Dafu:r
   hat man als Vorteil, dass im Falle eines Absturzes der konsistente Zustand
   dadurch erzielbar ist, dass die angefangenen Operationen aus dem dirty
   region log entweder zu Ende ausgefu:hrt oder komplett verworfen werden,
   wodurch das Dateisystem schnell wieder zur Verfu:gung steht.

   Die Lo:sung von Kirk McKusick, dem Scho: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-A:nderungen
   spa: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 u:berhaupt auf die Platte
   geschrieben wird (die dazugeho:rigen Datenblo:cke werden natu: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 ha:tten sie nie stattgefunden. Man hat so also den
   konsistenten Zustand von ca. 30 bis 60 Sekunden fru:her sichergestellt.
   Der verwendete Algorithmus garantiert dabei, dass alle tatsa: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
   tatsa:chlich "frei" sind. 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 spa:ter ein fsck(8) nachgeholt werden. Das ist dann auch die Idee des
   background fsck: beim Starten des Systems wird lediglich ein Schnappschuss
   des Dateisystems gemacht, mit dem fsck(8) dann spa:ter arbeiten kann. Alle
   Dateisysteme du:rfen "unsauber" eingebunden werden und das System kann
   sofort in den Multiuser-Modus gehen. Danach wird ein Hintergrund-fsck(8)
   fu:r die Dateisysteme gestartet, die dies beno:tigen, um mo:glicherweise
   irrtu:mlich belegte Ressourcen freizugeben. Dateisysteme ohne Soft Updates
   beno:tigen natu:rlich immer noch den u:blichen Vordergrund-fsck(8), bevor
   sie eingebunden werden ko: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 Komplexita:t des Codes, ein erho:hter Speicherverbrauch und einige
   spezielle Eigenheiten entgegen. Nach einem Absturz ist ein etwas
   "a:lterer" Stand auf der Platte - statt einer leeren, aber bereits
   angelegten Datei, wie nach einem herko:mmlichen 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 rm(1) nicht
   sofort wieder als verfu:gbar markiert werden, sondern erst dann, wenn der
   Update auch auf die Platte vermittelt worden ist. Dies kann besonders dann
   Probleme bereiten, wenn grosse Datenmengen in einem Dateisystem
   installiert werden, das nicht genu:gend Platz hat, um alle Dateien zweimal
   unterzubringen.

11.11. Einstellungen von Kernel Limits

  11.11.1. Datei und Prozess Limits

    11.11.1.1. kern.maxfiles

   Abha:ngig von den Anforderungen an das System kann die sysctl(8)-Variable
   kern.maxfiles erho: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 fu:r Systemmeldungen sehen. Den Inhalt des
   Puffers ko:nnen Sie sich mit dmesg(8) anzeigen lassen.

   Jede offene Datei, jedes Socket und jede FIFO verbraucht einen
   Dateideskriptor. Auf "dicken" Produktionsservern ko:nnen leicht Tausende
   Dateideskriptoren beno:tigt werden, abha:ngig von der Art und Anzahl der
   gleichzeitig laufenden Dienste.

   In a:lteren FreeBSD-Versionen wurde die Voreinstellung von kern.maxfile
   aus der Kernelkonfigurationsoption maxusers bestimmt. kern.maxfiles
   wa: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, ko:nnen die beno:tigten Ressourcen a:hnlich hoch wie bei einem
   grossen Webserver sein.

   Die nur lesbare sysctl(8)-Variable kern.maxusers wird beim Systemstart
   automatisch aus dem zur Verfu:gung stehenden Hauptspeicher bestimmt. Im
   laufenden Betrieb kann dieser Wert aus kern.maxusers ermittelt werden.
   Einige Systeme beno:tigen fu:r diese Variable einen anderen Wert, wobei
   64, 128 und 256 gewo:hnliche Werte darstellen. Es wird nicht empfohlen,
   die Anzahl der Dateideskriptoren auf einen Wert gro:sser 256 zu setzen, es
   sei denn, Sie beno:tigen wirklich eine riesige Anzahl von ihnen. Viele der
   von kern.maxusers auf einen Standardwert gesetzten Parameter ko:nnen beim
   Systemstart oder im laufenden Betrieb in /boot/loader.conf angepasst
   werden. In loader.conf(5) und /boot/defaults/loader.conf finden Sie
   weitere Details und Hinweise.

   A:ltere FreeBSD-Versionen setzen diesen Wert selbst, wenn Sie in der
   Konfigurationsdatei den Wert 0 [2] 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, ko:nnen gleichzeitig nur 36 Prozesse laufen,
   von denen ungefa: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 beno:tigt neun Prozesse
   zum Filtern, Dekomprimieren und Betrachten der Datei. Fu:r die meisten
   Benutzer sollte es ausreichen, maxusers auf 64 zu setzen, womit 1044
   gleichzeitige Prozesse zur Verfu:gung stehen. Wenn Sie allerdings den
   Fehler proc table full beim Start eines Programms oder auf einem Server
   mit einer grossen Benutzerzahl sehen, dann sollten Sie den Wert nochmals
   erho:hen und den Kernel neu bauen.

  Anmerkung:

   Die Anzahl der Benutzer, die sich auf einem Rechner anmelden kann, wird
   durch maxusers nicht begrenzt. Der Wert dieser Variablen legt neben der
   mo:glichen Anzahl der Prozesse eines Benutzers weitere sinnvolle Gro:ssen
   fu:r bestimmte Systemtabellen fest.

    11.11.1.2. kern.ipc.soacceptqueue

   Die sysctl(8)-Variable kern.ipc.soacceptqueue beschra:nkt die Gro:sse der
   Warteschlange (Listen-Queue) fu:r neue TCP-Verbindungen. Der Vorgabewert
   von 128 ist normalerweise zu klein, um neue Verbindungen auf einem stark
   ausgelasteten Webserver zuverla:ssig zu handhaben. Auf solchen Servern
   sollte der Wert auf 1024 oder ho:her gesetzt werden. Dienste wie
   sendmail(8) oder Apache ko:nnen die Gro:sse der Queue selbst
   einschra:nken. Oft gibt es die Mo:glichkeit, die Gro:sse der Listen-Queue
   in einer Konfigurationsdatei einzustellen. Eine grosse Listen-Queue
   u:bersteht vielleicht auch einen Denial of Service Angriff (DoS).

  11.11.2. Netzwerk Limits

   Die Kerneloption NMBCLUSTERS schreibt die Anzahl der Netzwerkpuffer
   (Mbufs) fest, die das System besitzt. Eine zu geringe Anzahl Mbufs auf
   einem Server mit viel Netzwerkverkehr verringert die Leistung von FreeBSD.
   Jeder Mbuf-Cluster nimmt ungefa:hr 2 kB Speicher in Anspruch, so dass ein
   Wert von 1024 insgesamt 2 Megabyte Speicher fu:r Netzwerkpuffer im System
   reserviert. Wie viele Cluster beno:tigt werden, la:sst sich durch eine
   einfache Berechnung herausfinden. Ein Webserver, der maximal 1000
   gleichzeitige Verbindungen servieren soll, wobei jede der Verbindungen
   einen 6 kB grossen Sendepuffer und einen 16 kB grossen Empfangspuffer
   beno:tigt, braucht ungefa:hr 32 MB Speicher fu:r Netzwerkpuffer. Als
   Daumenregel verdoppeln Sie diese Zahl, so dass sich fu:r NMBCLUSTERS der
   Wert 2x32 MB / 2 kB= 64 MB / 2 kB= 32768 ergibt. Fu:r Maschinen mit viel
   Speicher werden Werte zwischen 4096 und 32768 empfohlen. Unter keinen
   Umsta:nden sollten Sie diesen Wert willku:rlich erho:hen, da dies zu einem
   Absturz beim Systemstart fu:hren kann. Verwenden Sie netstat(1) mit -m um
   den Gebrauch der Netzwerkpuffer zu kontrollieren.

   Die Netzwerkpuffer ko:nnen beim Systemstart mit der Loader-Variablen
   kern.ipc.nmbclusters eingestellt werden. Nur auf a:lteren FreeBSD-Systemen
   mu:ssen Sie die Kerneloption NMBCLUSTERS verwenden.

   Die Anzahl der sendfile(2) Puffer muss auf ausgelasteten Servern, die den
   Systemaufruf sendfile(2) oft verwenden, vielleicht erho:ht werden. Dazu
   ko:nnen Sie die Kerneloption NSFBUFS verwenden oder die Anzahl der Puffer
   in /boot/loader.conf (siehe loader(8)) setzen. Die Puffer sollten erho:ht
   werden, wenn Sie Prozesse im Zustand sfbufa sehen. Die schreibgeschu:tzte
   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.

  Wichtig:

   Auch wenn ein Socket nicht blockierend angelegt wurde, kann der Aufruf von
   sendfile(2) blockieren, um auf freie struct sf_buf Puffer zu warten.

    11.11.2.1. net.inet.ip.portrange.*

   Die sysctl(8)-Variable net.inet.ip.portrange.* legt die Portnummern fu: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 fu:r Portnummern werden von ausgehenden Verbindungen
   benutzt. Unter bestimmten Umsta:nden, beispielsweise auf stark
   ausgelasteten Proxy-Servern, sind alle Portnummern fu:r ausgehende
   Verbindungen belegt. Bereiche fu:r Portnummern spielen auf Servern keine
   Rolle, die hauptsa:chlich eingehende Verbindungen verarbeiten (wie ein
   normaler Webserver) oder nur eine begrenzte Anzahl ausgehender
   Verbindungen o:ffnen (beispielsweise ein Mail-Relay). Wenn keine freien
   Portnummern mehr vorhanden sind, sollte die Variable
   net.inet.ip.portrange.last langsam erho:ht werden. Ein Wert von 10000,
   20000 oder 30000 ist angemessen. Beachten Sie auch eine vorhandene
   Firewall, wenn Sie die Bereiche fu:r Portnummern a:ndern. Einige Firewalls
   sperren grosse Bereiche (normalerweise aus den kleinen Portnummern) und
   erwarten, dass hohe Portnummern fu:r ausgehende Verbindungen verwendet
   werden. Daher kann es erforderlich sein, den Wert von
   net.inet.ip.portrange.first zu erho:hen.

    11.11.2.2. TCP Bandwidth Delay Product Begrenzung

   Die TCP Bandwidth Delay Product Begrenzung wird aktiviert, indem die
   sysctl(8)-Variable net.inet.tcp.inflight.enable auf den Wert 1 gesetzt
   wird. Das System wird dadurch angewiesen, fu:r jede Verbindung, das
   Produkt aus der U:bertragungsrate und der Verzo:gerungszeit zu bestimmen.
   Dieses Produkt begrenzt die Datenmenge, die fu:r einen optimalen Durchsatz
   zwischengespeichert werden muss.

   Diese Begrenzung ist nu:tzlich, wenn Sie Daten u:ber Verbindungen mit
   einem hohen Produkt aus U:bertragungsrate und Verzo:gerungszeit wie
   Modems, Gigabit-Ethernet oder schnellen WANs, zur Verfu:gung stellen.
   Insbesondere wirkt sich die Begrenzung aus, wenn die Verbindung die Option
   Window-scaling verwendet oder grosse 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, abha: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 Verzo:gerungszeit (Round Trip
   Time) fu:r interaktive Anwendungen sinkt, da weniger Pakete
   zwischengespeichert werden. Dies gilt besonders fu:r Verbindungen u: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 betra:gt 20, das heisst es werden maximal zwei
   Pakete zu dem Produkt aus U:bertragungsrate und Verzo:gerungszeit addiert.
   Dies stabilisiert den Algorithmus und verbessert die Reaktionszeit auf
   Vera:nderungen. Bei langsamen Verbindungen ko:nnen sich aber die
   Laufzeiten der Pakete erho:hen (ohne diesen Algorithmus wa:ren sie
   allerdings noch ho:her). In solchen Fa:llen ko:nnen Sie versuchen, den
   Wert der Variablen auf 15, 10 oder 5 herabzusetzen. Gleichzeitig mu:ssen
   Sie vielleicht auch net.inet.tcp.inflight.min auf einen kleineren Wert
   (beispielsweise 3500) setzen. A:ndern Sie diese Variablen nur ab, wenn Sie
   keine anderen Mo:glichkeiten mehr haben.

  11.11.3. Virtueller Speicher (Virtual Memory)

    11.11.3.1. kern.maxvnodes

   Ein vnode ist die interne Darstellung einer Datei oder eines
   Verzeichnisses. Die Erho:hung der Anzahl der fu:r das Betriebssystem
   verfu:gbaren vnodes verringert also die Schreib- und Lesezugriffe auf der
   Festplatte. vnodes werden im Normalfall vom Betriebssystem automatisch
   vergeben und mu:ssen nicht manuell angepasst werden. In einigen Fa:llen
   stellt der Zugriff auf eine Platte allerdings einen Flaschenhals dar,
   daher sollten Sie in diesem Fall die Anzahl der mo:glichen vnodes
   erho:hen, um dieses Problem zu beheben. Beachten Sie dabei aber die
   Gro:sse des inaktiven und freien Hauptspeichers.

   Um die Anzahl der derzeit verwendeten vnodes zu sehen, geben Sie Folgendes
   ein:

 # sysctl vfs.numvnodes
 vfs.numvnodes: 91349

   Die maximal mo:gliche Anzahl der vnodes erhalten Sie durch die Eingabe
   von:

 # sysctl kern.maxvnodes
 kern.maxvnodes: 100000

   Wenn sich die Anzahl der genutzten vnodes dem maximal mo:glichen Wert
   na:hert, sollten Sie den Wert kern.maxvnodes zuerst um etwa 1000 erho:hen.
   Beobachten Sie danach die Anzahl der vom System genutzten vfs.numvnodes.
   Na:hert sich der Wert wiederum dem definierten Maximum, mu:ssen Sie
   kern.maxvnodes nochmals erho:hen. Sie sollten nun eine A:nderung des
   Speicherverbrauches u:ber top(1) registrieren ko:nnen und u:ber mehr
   aktiven Speicher verfu:gen.

11.12. Hinzufu:gen von Swap-Bereichen

   Manchmal beno:tigt ein System mehr Swap-Bereiche. Dieser Abschnitt
   beschreibt zwei Methoden, um Swap-Bereiche hinzuzufu:gen: auf einer
   bestehenden Partition oder auf einem neuen Laufwerk, und das Hinzufu:gen
   einer Swap-Datei auf einer existierenden Partition.

   Fu:r Informationen zur Verschlu:sselung von Swap-Partitionen, zu den dabei
   mo:glichen Optionen sowie zu den Gru:nden fu:r eine Verschlu:sselung des
   Auslagerungsspeichers lesen Sie Abschnitt 17.13, "Den Auslagerungsspeicher
   verschlu:sseln".

  11.12.1. Swap auf einer neuen Festplatte oder einer existierenden Partition

   Das Hinzufu:gen einer neuen Festplatte fu:r den Swap-Bereich bietet eine
   bessere Leistung, als die Verwendung einer Partition auf einem vorhandenem
   Laufwerk. Die Einrichtung von Partitionen und Laufwerken wird in
   Abschnitt 17.2, "Hinzufu:gen von Laufwerken" beschrieben. Abschnitt 2.6.1,
   "Ein Partitionslayout entwerfen" diskutiert Aspekte u:ber die Anordnung
   und Gro:sse von Swap-Bereichen.

   Benutzen Sie swapon um eine Swap-Partition zum System hinzuzufu:gen. Zum
   Beispiel:

 # swapon /dev/ada1s1b

  Warnung:

   Sie ko:nnen jede Partition verwenden, sofern sie nicht schon eingehangen
   ist. Das gilt auch dann, wenn die Partition bereits Daten entha:lt. Wird
   swapon auf einer Partition ausgefu:hrt die Daten entha:lt, werden die
   vorhandenen Daten u:berschrieben und sind unweigerlich verloren. Stellen
   Sie sicher, dass die Partition, die Sie als Swap-Bereich hinzufu:gen
   mo:chten, wirklich die gewu:nschte Partition ist, bevor Sie swapon
   ausfu:hren.

   Um diese Swap-Partition automatisch beim Systemstart hinzuzufu:gen, fu:gen
   Sie einen Eintrag in /etc/fstab hinzu:

 /dev/ada1s1b    none    swap    sw      0       0

   Die einzelnen Eintra:ge von /etc/fstab werden in fstab(5) erla:utert.
   Weitere Informationen zu swapon finden Sie in swapon(8).

  11.12.2. Swap-Dateien erstellen

   Anstatt eine Partition zu verwenden, erstellen diese Beispiele eine 64 MB
   grosse Swap-Datei mit dem Namen /usr/swap0.

   Die Verwendung von Swap-Dateien macht es erforderlich, dass das Modul
   md(4) entweder im Kernel vorhanden oder geladen wird, bevor Swap aktiviert
   ist. Kapitel 8, Konfiguration des FreeBSD-Kernels entha:lt Informationen
   zum Bau eines angepassten Kernels.

   Beispiel 11.2. Erstellen einer Swap-Datei unter FreeBSD 10.X und neuer
    1. Erstellen Sie die Swap-Datei:

 # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64

    2. Setzen Sie die richtigen Berechtigungen fu:r die neue Datei:

 # chmod 0600 /usr/swap0

    3. Fu:gen Sie einen Eintrag in /etc/fstab hinzu:

 md99    none    swap    sw,file=/usr/swap0,late 0       0

       Das md(4) Gera:t md99 wird verwendet, damit die niedrigeren
       Gera:tenummer fu:r die interaktive Benutzung frei bleiben.

    4. Der Swap-Speicher wird nun automatisch beim Systemstart hinzugefu:gt.
       Benutzen Sie swapon(8) um den Swap-Speicher direkt zu aktivieren:

 # swapon -aL

   Beispiel 11.3. Erstellen einer Swap-Datei unter FreeBSD 9.X und a:lter
    1. Erstellen Sie die Swap-Datei /usr/swap0:

 # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64

    2. Setzen Sie die richtigen Berechtigungen fu:r die neue Datei:

 # chmod 0600 /usr/swap0

    3. Aktivieren Sie die Swap-Datei in /etc/rc.conf:

 swapfile="/usr/swap0"   # Set to name of swap file

    4. Um die Swap-Datei sofort zu aktivieren, spezifizieren Sie ein
       speicherbasiertes Laufwerk. Abschnitt 17.9, "Speicherbasierte
       Laufwerke" entha:lt weitere Informationen.

 # mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0

11.13. Energie- und Ressourcenverwaltung

   Verfasst von Hiten Pandya und Tom Rhodes.

   Es ist wichtig, Hardware effizient einzusetzen. Energie- und
   Ressourcenverwaltung ermo:glicht es dem System auf verschiedene
   Ereignisse, beispielsweise einen unerwarteten Temperaturanstieg, reagieren
   zu ko:nnen. Eine fru:he Spezifikation fu:r die Energieverwaltung war das
   Advanced Power Management (APM). APM steuert den Energieverbrauch eines
   Systems auf Basis der Systemaktivita:t. Urspru:nglich konnten
   Stromverbrauch und Wa:rmeabgabe eines Systems nur schlecht von
   Betriebssystemen gesteuert werden. Die Hardware wurde vom BIOS gesteuert,
   was die Kontrolle der Energieverwaltung fu:r den Anwender erschwerte. Das
   APM-BIOS wird von dem Hersteller des Systems zur Verfu: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 hat hauptsa:chlich vier Probleme. Erstens la:uft die Energieverwaltung
   unabha: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
   gefa: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 genu: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 in vielen Situationen ebenfalls
   unzureichend. Das PNPBIOS verwendet eine 16-Bit-Technik. Damit das
   Betriebssystem das PNPBIOS ansprechen kann, muss es in einer
   16-Bit-Emulation laufen. FreeBSD stellt einen APM-Treiber zur Verfu:gung,
   welcher fu:r Systeme benutzt werden sollte, die vor dem Jahr 2000
   hergestellt wurden. Der Treiber wird in apm(4) beschrieben.

   Der Nachfolger von APM ist das Advanced Configuration and Power Interface
   (ACPI). ACPI ist ein Standard verschiedener Hersteller, welcher die
   Verwaltung von Hardware und Energiesparfunktionen festlegt. Die
   ACPI-Funktionen, die mehr Kontrolle und Flexibilita:t bieten, ko:nnen vom
   Betriebssystem gesteuert werden.

   Dieser Abschnitt zeigt die Konfiguration von ACPI unter FreeBSD. Zudem
   werden einige Tipps zur Fehlersuche vorgestellt und wie Sie
   Problemberichte einreichen ko:nnen, sodass Entwickler ACPI-Probleme
   erfassen und beheben ko:nnen.

  11.13.1. Konfiguration des ACPI

   Der acpi(4)-Treiber wird standardma:ssig beim Systemstart vom loader(8)
   geladen und sollte daher nicht fest in den Kernel eingebunden werden. Der
   Treiber kann im laufenden Betrieb nicht entfernt werden, da er zur
   Kommunikation mit der Hardware verwendet wird. Falls jedoch Probleme
   auftreten, kann ACPI auch komplett deaktiviert werden. Dazu muss
   hint.acpi.0.disabled="1" in /boot/loader.conf gesetzt und anschliessend
   das System neu gestartet werden. Alternativ ko:nnen Sie diese Variable
   auch am loader(8)-Prompt eingeben, wie in Abschnitt 12.2.3, "Phase Drei"
   beschrieben.

  Anmerkung:

   ACPI und APM ko:nnen nicht zusammen verwendet werden. Das zuletzt geladene
   Modul beendet sich, sobald es bemerkt, dass das andere Modul geladen ist.

   Mit acpiconf ko:nnen Sie das System in einen Ruhemodus (sleep mode)
   versetzen. Es gibt verschiedene Modi (von 1 bis 5), die Sie auf der
   Kommandozeile mit -s angeben ko:nnen. Fu:r die meisten Anwender sind die
   Modi 1 und 3 vo:llig ausreichend. Der Modus 5 schaltet das System aus
   (Soft-off) und entspricht dem Befehl halt -p.

   Verschiedene Optionen ko:nnen mit sysctl gesetzt werden. Lesen Sie dazu
   acpi(4) sowie acpiconf(8).

  11.13.2. Ha:ufige Probleme

   ACPI gibt es in allen modernen Rechnern der ia32- (x86), ia64- (Itanium)
   und amd64- (AMD) Architektur. Der vollsta:ndige Standard bietet Funktionen
   zur Steuerung und Verwaltung der CPU-Leistung, der Stromversorgung, von
   Wa:rmebereichen, Batterien, eingebetteten Controllern und Bussen. Auf den
   meisten Systemen wird nicht der vollsta:ndige Standard implementiert.
   Arbeitsplatzrechner besitzen meist nur Funktionen zur Verwaltung der
   Busse, wa:hrend Notebooks Funktionen zur Temperaturkontrolle und
   Ruhezusta: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. Zusa:tzlich gibt es
   die Differentiated-System-Description-Table (DSDT), die Bytecode entha:lt.
   Die Tabelle ordnet Gera:te und Methoden in einem baumartigen Namensraum
   an.

   Ein ACPI-Treiber muss die statischen Tabellen einlesen, einen Interpreter
   fu:r den Bytecode bereitstellen und die Gera:tetreiber im Kernel so
   modifizieren, dass sie mit dem ACPI-Subsystem kommunizieren. Fu:r FreeBSD,
   Linux(R) und NetBSD hat Intel(R) den Interpreter ACPI-CA, zur Verfu:gung
   gestellt. Der Quelltext zu ACPI-CA befindet sich im Verzeichnis
   src/sys/contrib/dev/acpica. Die Schnittstelle von ACPI-CA zu FreeBSD
   befindet sich unter src/sys/dev/acpica/Osd. Treiber, die verschiedene
   ACPI-Gera:te implementieren, befinden sich im Verzeichnis
   src/sys/dev/acpica.

   Damit ACPI richtig funktioniert, mu:ssen alle Teile funktionieren. Im
   Folgenden finden Sie eine Liste mit Problemen und mo:glichen Abhilfen oder
   Korrekturen. Die Liste ist nach der Ha:ufigkeit, mit der die Probleme
   auftreten, sortiert. Wenn eine Korrektur das Problem nicht behebt, finden
   Sie in Abschnitt 11.13.4, "Abrufen und Einreichen von Informationen zur
   Fehlersuche" Anweisungen, wie Sie einen Problembericht einreichen ko:nnen.

    11.13.2.1. Mausprobleme

   Es kann vorkommen, dass die Maus nicht mehr funktioniert, wenn Sie nach
   einem Suspend weiterarbeiten wollen. Ist dies bei Ihnen der Fall, reicht
   es meistens aus, den Eintrag hint.psm.0.flags="0x3000" in
   /boot/loader.conf aufzunehmen.

    11.13.2.2. Suspend/Resume

   ACPI kennt drei Suspend-to-RAM-Zusta:nde (STR), S1-S3 sowie einen
   Suspend-to-Disk-Zustand (STD) S4. STD 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. 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.

   Benutzen Sie sysctl hw.acpi um die Suspend-Zusta:nde zu ermitteln. Diese
   Beispielausgabe stammt von einem Thinkpad:

 hw.acpi.supported_sleep_state: S3 S4 S5
 hw.acpi.s4bios: 0

   Diese Ausgabe besagt, dass mit dem Befehl acpiconf -s die Zusta:nde S3, S4
   und S5 eingestellt werden ko:nnen. Ha:tte s4bios den Wert 1, ga:be es den
   Zustand S4BIOS anstelle von S4.

   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-Unterstu:tzung beno:tigt. Der
   Zustand S2 ist a:hnlich wie S1, allerdings hat ihn noch niemand
   implementiert. Als na:chstes sollten Sie den Zustand S3 ausprobieren. Dies
   ist der tiefste STR-Schlafzustand. Dieser Zustand ist auf massive
   Treiber-Unterstu:tzung angewiesen, um die Gera:te wieder richtig zu
   initialisieren.

   Ein ha:ufiges Problem mit Suspend/Resume ist, dass viele Gera:tetreiber
   ihre Firmware, Register und Gera:tespeicher nicht korrekt speichern,
   wiederherstellen und/oder reinitialisieren. Um dieses Problem zu lo:sen,
   sollten Sie zuerst die folgenden Befehle ausfu:hren:

 # sysctl debug.bootverbose=1
 # sysctl debug.acpi.suspend_bounce=1
 # acpiconf -s 3

   Dieser Test emuliert einen Suspend/Resume-Zyklus fu:r alle Gera:te (ohne
   dass diese dabei wirklich in den Status S3 wechseln). In vielen Fa:llen
   reicht dies bereits aus, um Probleme (beispielsweise verlorener
   Firmware-Status, Timeouts, ha:ngende Gera:te) zu entdecken. Beachten Sie
   dabei, dass das Gera:t bei diesem Test nicht wirklich in den Status S3
   wechseln. Es kann also vorkommen, dass manche Gera:te weiterhin mit Strom
   versorgt werden (dies wa:re bei einem wirklichen Wechsel in den Status S3
   NICHT mo:glich. Andere Gera:te werden normal weiterarbeiten, weil sie
   u:ber keine Suspend/Resume-Funktionen verfu:gen.

   Schwierigere Fa:lle ko:nnen den Einsatz zusa:tzlicher Hardware
   (beispielsweise serielle Ports/Kabel fu:r die Verbindung u:ber eine
   serielle Konsole oder Firewire-Ports/Kabel fu:r dcons(4)) sowie Kenntnisse
   im Bereich Kerneldebugging erforderlich machen.

   Um das Problem einzugrenzen, entladen Sie soviele Treiber wie mo:glich.
   Wenn das funktioniert, laden Sie einen Treiber nach dem anderen, bis der
   Fehler wieder auftritt. Typischerweise verursachen bina:re Treiber wie
   nvidia.ko, Grafiktreiber und USB-Treiber die meisten Fehler, hingegen
   laufen Ethernet-Treiber fu:r gewo:hnlich sehr zuverla:ssig. Wenn ein
   Treiber zuverla:ssig geladen und entfernt werden kann, ko:nnen Sie den
   Vorgang automatisieren, indem Sie die entsprechenden Kommandos in
   /etc/rc.suspend und /etc/rc.resume einfu:gen. In den Dateien finden Sie
   ein deaktiviertes Beispiel, das einen Treiber la:dt und wieder entfernt.
   Ist die Bildschirmanzeige bei der Wiederaufnahme des Betriebs gesto:rt,
   setzen Sie die Variable hw.acpi.reset_video auf 1. Versuchen Sie auch, die
   Variable hw.acpi.sleep_delay auf ku:rzere Zeitspannen zu setzen.

   Die Suspend- und Resume-Funktionen ko:nnen Sie auch auf einer neuen
   Linux(R)-Distribution mit ACPI testen. Wenn es mit Linux(R) funktioniert,
   liegt das Problem wahrscheinlich bei einem FreeBSD-Treiber. Es hilft uns,
   das Problem zu lo:sen, wenn Sie feststellen ko: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 freebsd-current und den Entwickler des Treibers zu schicken.
   Erfahrene Benutzer ko:nnen versuchen, den Fehler in der Resume-Funktion zu
   finden, indem sie einige printf(3)-Anweisungen in den Code des
   fehlerhaften Treibers einfu:gen.

   Schliesslich ko: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 beno:tigten einige Zeit, um ACPI korrekt zu
   implementieren, daher gibt es mit a:lterer Hardware oft ACPI-Probleme.

    11.13.2.3. Systemha:nger

   Die meisten Systemha: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).

   Anhand der Ausgabe des Befehls vmstat -i ko:nnen Sie verlorene Interrupts
   von einem Interrupt-Sturm unterscheiden. Untersuchen Sie die Ausgabezeile,
   die acpi0 entha:lt. Ein Interrupt-Sturm liegt vor, wenn der Za:hler o:fter
   als ein paar Mal pro Sekunde hochgeza:hlt wird. Wenn sich das System
   aufgehangen hat, versuchen Sie mit der Tastenkombination Ctrl+Alt+Esc in
   den Debugger DDB zu gelangen. Geben Sie dort den Befehl show interrupts
   ein.

   Wenn Sie Interrupt-Probleme haben, ist es vorerst wohl am besten, APIC zu
   deaktivieren. Tragen Sie dazu die Zeile hint.apic.0.disabled="1" in
   /boot/loader.conf ein.

    11.13.2.4. Abstu:rze (Panics)

   Panics werden so schnell wie mo:glich behoben; mit ACPI kommt es aber
   selten dazu. Zuerst sollten Sie die Panic reproduzieren und dann versuchen
   einen backtrace (eine Ru:ckverfolgung der Funktionsaufrufe) zu erstellen.
   Richten Sie dazu den DDB u:ber die serielle Schnittstelle (siehe
   Abschnitt 25.6.4.3, "DDB Debugger u:ber die serielle Schnittstelle") oder
   eine gesonderte dump(8)-Partition ein. In DDB ko:nnen Sie den backtrace
   mit dem Kommando tr erstellen. Falls Sie den backtrace vom Bildschirm
   abschreiben mu:ssen, schreiben Sie bitte mindestens die fu:nf ersten und
   die fu:nf letzten Zeile der Ausgabe auf.

   Versuchen Sie anschliessend, das Problem durch einen Neustart ohne ACPI zu
   beseitigen. Wenn das funktioniert hat, ko:nnen Sie versuchen, das
   verantwortliche ACPI-Subsystem durch Setzen der Variablen
   debug.acpi.disable herauszufinden. Die Hilfeseite acpi(4) entha:lt dazu
   einige Beispiele.

    11.13.2.5. Nach einem Suspend oder einem Stopp startet das System wieder

   Setzen Sie zuerst hw.acpi.disable_on_poweroff="0" in /boot/loader.conf.
   Damit wird verhindert, dass ACPI wa:hrend des Systemabschlusses die
   Bearbeitung verschiedener Ereignisse deaktiviert. Auf manchen Systemen
   muss die Variable den Wert 1 besitzen (die Voreinstellung). Normalerweise
   wird der unerwu:nschte Neustart des Systems durch Setzen dieser Variablen
   behoben.

    11.13.2.6. BIOS mit fehlerhaftem Bytecode

   Einige BIOS-Hersteller liefern einen fehlerhaften Bytecode aus. Dies
   erkennen Sie an Kernelmeldungen wie diesen:

 ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
 (Node 0xc3f6d160), AE_NOT_FOUND

   Oft ko:nnen Sie das Problem dadurch lo:sen, dass Sie eine aktuelle
   BIOS-Version einspielen. Die meisten Meldungen auf der Konsole sind
   harmlos, wenn aber beispielsweise der Batteriestatus falsch angezeigt
   wird, ko:nnen Sie in den Meldungen nach Problemen suchen.

  11.13.3. Die voreingestellte ASL u:berschreiben

   Der BIOS-Bytecode, bekannt als ACPI Maschine Language (AML) wird aus der
   Sprache namens ACPI Source Language (ASL) u:bersetzt. Die AML ist in einer
   Tabelle, bekannt als Differentiated System Description Table (DSDT),
   abgelegt.

   Es ist das Ziel von FreeBSD, dass ACPI ohne Eingriffe des Benutzers
   la:uft. Zurzeit werden allerdings noch Abhilfen fu:r Fehler der
   BIOS-Hersteller entwickelt. Der Microsoft(R)-Interpreter (acpi.sys und
   acpiec.sys) pru:ft die ASL nicht streng gegen den Standard. Daher
   reparieren BIOS-Hersteller, die ACPI nur unter Windows(R) testen, ihre ASL
   nicht. Die FreeBSD Entwickler hoffen, dass sie das vom Standard
   abweichende Verhalten des Microsoft(R)-Interpreters dokumentieren und in
   FreeBSD replizieren ko:nnen. Dadurch mu:ssen Benutzer ihre ASL nicht
   selbst reparieren.

   Um bei der Fehlersuche zu helfen und das Problem mo:glicherweise zu
   beheben, kann eine Kopie der ASL gemacht werden. Dazu nutzen Sie acpidump
   zusammen mit -t, um den Inhalt der Tabelle anzuzeigen und -d, um die AML
   zu zerlegen:

 # acpidump -td > my.asl

   Einige AMLs gehen davon aus, dass der Anwender eine Windows(R)-Versionen
   benutzt. Versuchen Sie das Betriebssystem, das Sie in der ASL finden, in
   /boot/loader.conf anzugeben: hw.acpi.osname="Windows 2009".

   Manche Abhilfen erfordern eine Anpassung von my.asl. Wenn diese Datei
   bearbeitet wird, erstellen Sie die neue ASL mit dem folgenden Befehl.
   Warnung ko:nnen meistens ignoriert werden, aber Fehler verhindern die
   ordnungsgema:sse Funktion von ACPI.

 # iasl -f my.asl

   Die Option -f erzwingt das Erstellen der AML auch dann, wenn wa:hrend der
   U:bersetzung Fehler auftreten. Einige Fehler, wie fehlende
   Return-Anweisungen, werden automatisch vom FreeBSD Interpreter umgangen.

   Die voreingestellte Ausgabedatei von iasl ist 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 und starten
   Sie das System neu. Wenn dadurch das Problem behoben wird, schicken Sie
   einen diff(1) der alten und der neuen ASL an freebsd-acpi, damit die
   Entwickler das Problem in acpica umgehen ko:nnen.

  11.13.4. Abrufen und Einreichen von Informationen zur Fehlersuche

   Geschrieben von Nate Lawson.
   Mit Beitra:gen von Peter Schultz und Tom Rhodes.

   Der ACPI-Treiber besitzt flexible Mo:glichkeiten zur Fehlersuche. Sie
   ko:nnen sowohl die zu untersuchenden Subsysteme als auch die zu
   erzeugenden Ausgaben festlegen. Die zu untersuchenden Subsysteme werden
   als "layer" angegeben und in Komponenten (ACPI_ALL_COMPONENTS) und
   ACPI-Hardware (ACPI_ALL_DRIVERS) aufgeteilt. Welche Meldungen ausgegeben
   werden, wird u:ber "level" gesteuert. Die Level reichen von von
   ACPI_LV_ERROR (es werden nur Fehler ausgegeben) bis zu ACPI_LV_VERBOSE
   (alles wird ausgegeben). Das Level ist eine Bitmaske, sodass verschiedene
   Stufen auf einmal (durch Leerzeichen getrennt) angegeben werden ko:nnen.
   Die erzeugte Ausgabemenge passt vielleicht nicht in den Konsolenpuffer. In
   diesem Fall sollte die Ausgabe mithilfe einer seriellen Konsole gesichert
   werden. Die mo:glichen Werte fu:r "layers" und "level" werden in acpi(4)
   beschrieben.

   Die Ausgaben zur Fehlersuche sind in der Voreinstellung nicht aktiviert.
   Wenn ACPI im Kernel enthalten ist, fu:gen Sie options ACPI_DEBUG zur
   Kernelkonfigurationsdatei hinzu. Sie ko:nnen die Ausgaben zur Fehlersuche
   global aktivieren, indem Sie in der Datei /etc/make.conf die Zeile
   ACPI_DEBUG=1 einfu:gen. Das Modul acpi.ko ko:nnen Sie wie folgt neu
   u:bersetzen:

 # cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1

   Kopieren Sie anschliessend acpi.ko ins Verzeichnis /boot/kernel. In
   /boot/loader.conf stellen Sie "level" und "layer" ein. Das folgende
   Beispiel aktiviert die Ausgabe von Fehlern fu:r alle ACPI-Komponenten und
   alle Hardwaretreiber:

 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, ko:nnen Sie die Einstellungen
   fu:r "level" und "layer" auch mit dem Kommando sysctl vornehmen. In diesem
   Fall mu:ssen Sie /boot/loader.conf nicht editieren. Auf der Kommandozeile
   geben Sie u:ber sysctl dieselben Variablennamen wie in /boot/loader.conf
   an.

   Sobald Sie die Fehlerinformationen gesammelt haben, schicken Sie diese an
   freebsd-acpi, sodass die Betreuer des FreeBSD-ACPI-Subsystems diese
   Informationen zur Analyse und fu:r die Entwicklung einer Lo:sung verwenden
   ko:nnen.

  Anmerkung:

   Bevor Sie einen Fehlerbericht an diese Mailingliste einreichen, stellen
   Sie bitte sicher, dass das BIOS und die Firmware des Controllers aktuell
   sind.

   Wenn Sie einen Fehlerbericht einsenden, fu:gen Sie bitte die folgenden
   Informationen ein:

     * Beschreiben Sie den Fehler und alle Umsta: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 mo:glichst
       genau zu beschreiben, wann der Fehler das erste Mal aufgetreten ist.

     * Die Ausgabe von dmesg nach der Eingabe von boot -v. Geben Sie auch
       alle Fehlermeldungen an, die erscheinen, wenn Sie den Fehler
       provozieren.

     * Die Ausgabe von dmesg 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
       unterstu:tzten ACPI-Funktionen an.

     * Die URL, unter der die ASL liegt. Schicken Sie bitte nicht die ASL an
       die Mailingliste, da die ASL sehr gross sein kann. Eine Kopie der ASL
       erstellen Sie mit dem nachstehenden Befehl:

 # acpidump -td > name-system.asl

       Setzen Sie fu:r name den Namen des Kontos und fu:r system den
       Hersteller und das Modell des Systems ein. Zum Beispiel:
       njl-FooCo6000.asl.

   Obwohl die meisten Entwickler die Mailingliste freebsd-current lesen,
   sollten Sie Fehlerberichte an die Liste freebsd-acpi schicken. Seien Sie
   bitte geduldig; wir haben alle Arbeit ausserhalb des Projekts. Wenn der
   Fehler nicht offensichtlich ist, bitten wir Sie vielleicht, einen
   offiziellen Fehlerbericht (PR) mit send-pr(1) einzusenden. Geben Sie im
   Fehlerbericht bitte dieselben Informationen wie oben an. Mithilfe der PRs
   verfolgen und lo:sen wir Probleme. Senden Sie bitte keinen PR ein, ohne
   vorher den Fehlerbericht an die Liste freebsd-acpi zu senden. Es kann
   sein, dass der Fehler schon von jemand anderem gemeldet wurde.

  11.13.5. Referenzen

   Weitere Informationen u:ber ACPI finden Sie hier:

     * Die ACPI 2.0 Spezifikation (http://acpi.info/spec.htm)

     * acpi(4), acpi_thermal(4), acpidump(8), iasl(8) und acpidb(8)

     ----------------------------------------------------------------------

   [2] Der verwendete Algorithmus setzt maxusers auf die Speichergro:sse des
   Systems. Der minimale Wert betra:gt dabei 32, das Maximum ist 384.

Kapitel 12. FreeBSDs Bootvorgang

   U:bersetzt von Hans-Christian Ebke.
   Inhaltsverzeichnis

   12.1. U:bersicht

   12.2. FreeBSDs Bootvorgang

   12.3. Willkommensbildschirme wa:hrend des Bootvorgangs konfigurieren

   12.4. Konfiguration von Gera:ten

   12.5. Der Shutdown-Vorgang

12.1. U:bersicht

   Das Starten des Computers und das Laden des Betriebssystems wird im
   Allgemeinen als "Bootstrap-Vorgang", oder als "Booten" bezeichnet.
   FreeBSDs Bootvorgang ermo:glicht grosse Flexibilita:t, was das Anpassen
   dessen anbelangt, was passiert, wenn das System gestartet wird. Es kann
   zwischen verschiedenen Betriebssystemen, die auf demselben Computer
   installiert sind oder verschiedenen Versionen desselben Betriebssystems
   oder installierten Kernels gewa:hlt werden.

   Dieses Kapitel zeigt die zur Verfu:gung stehenden
   Konfigurationsmo:glichkeiten und wie man den Bootvorgang anpasst. Dies
   schliesst alles ein, bis der Kernel gestartet worden ist, der dann alle
   Gera:te gefunden hat und init(8) gestartet hat. Dies passiert, wenn die
   Farbe des Textes wa:hrend des Bootvorgangs von weiss zu grau wechselt.

   Dieses Kapitel informiert u:ber folgende Punkte:

     * Die Komponenten des FreeBSD-Bootvorgangs und deren Interaktion.

     * Die Optionen, mit denen der FreeBSD-Bootvorgang gesteuert werden kann.

     * Wie ein angepasster Willkommensbildschirm beim Booten konfiguriert
       wird.

     * Wie Gera:te mit device.hints(5) konfiguriert werden.

     * Wie das System in den Single-User-Modus und in den Mehrbenutzer-Modus
       gestartet wird und wie ein FreeBSD-System ordnungsgema:ss
       heruntergefahren wird.

  Anmerkung:

   Dieses Kapitel erkla:rt den Bootvorgang von FreeBSD auf Intel x86- und
   amd64-Plattformen.

12.2. FreeBSDs Bootvorgang

   Wenn der Computer eingeschaltet wird und das Betriebssystem gestartet
   werden soll, entsteht ein interessantes Dilemma, denn der Computer weiss
   per Definition nicht, wie er irgendetwas tut, bis das Betriebssystem
   gestartet wurde. Das schliesst das Starten von Programmen, die sich auf
   der Festplatte befinden, ein. Wenn der Computer kein Programm von der
   Festplatte starten kann, sich das Betriebssystem aber genau dort befindet,
   wie wird es dann gestartet?

   Dieses Problem a:hnelt einer Geschichte des Barons von Mu:nchhausen. Dort
   war eine Person in einen Sumpf gefallen und hat sich selbst an den Riemen
   seiner Stiefel (engl. bootstrap) herausgezogen. In den jungen Jahren des
   Computerzeitalters wurde mit dem Begriff Bootstrap dann die Technik das
   Betriebssystem zu laden bezeichnet. Seither wurde es mit "booten"
   abgeku:rzt.

   Auf x86-Plattformen ist das Basic Input/Output System (BIOS) dafu:r
   verantwortlich, das Betriebssystem zu laden. Das BIOS liest den Master
   Boot Record (MBR) aus, der sich an einer bestimmten Stelle auf der
   Festplatte befinden muss. Das BIOS kann den MBR selbststa:ndig laden und
   ausfu:hren und geht davon aus, dass dieser die restlichen Dinge, die fu:r
   das Laden des Betriebssystems notwendig sind, selbst oder mit Hilfe des
   BIOS erledigen kann.

  Anmerkung:

   FreeBSD ermo:glicht das Booten sowohl u:ber den alten MBR-Standard, als
   auch u:ber die neuere GUID-Partitionstabelle (GPT). GPT-Partitionen finden
   sich ha:ufig auf Systemen mit dem Unified Extensible Firmware Interface
   (UEFI). FreeBSD kann allerdings mit Hilfe von gptboot(8) auch
   GPT-Partitionen u:ber das alte BIOS booten. An der Unterstu:tzung fu:r ein
   direktes Booten u:ber UEFI wird derzeit gearbeitet.

   Der Code innerhalb des MBRs wird fu:r gewo:hnlich als Boot-Manager
   bezeichnet, insbesondere, wenn eine Interaktion mit dem Anwender
   stattfindet. Der Boot-Manager verwaltet zusa:tzlichen Code im ersten Track
   der Platte oder des Dateisystems. Zu den bekanntesten Boot-Managern
   geho:ren boot0, der auch als Boot Easy bekannte Standard-Boot-Manager von
   FreeBSD, sowie Grub, welches in vielen Linux(R)-Distributionen verwendet
   wird.

   Falls nur ein Betriebssystem installiert ist, sucht der MBR nach dem
   ersten bootbaren Slice (das dabei als active gekennzeichnet ist) auf dem
   Laufwerk und fu:hrt den dort vorhandenen Code aus, um das restliche
   Betriebssystem zu laden. Wenn mehrere Betriebssysteme installiert sind,
   kann ein anderer Boot-Manager installiert werden, der eine Liste der
   verfu:gbaren Betriebssysteme anzeigt, so dass der Benutzer wa:hlen kann,
   welches Betriebssystem er booten mo:chte.

   Das restliche FreeBSD-Bootstrap-System ist in drei Phasen unterteilt. Die
   erste Phase besitzt gerade genug Funktionalita:t um den Computer in einen
   bestimmten Status zu verhelfen und die zweite Phase zu starten. Die zweite
   Phase fu:hrt ein wenig mehr Operationen durch und startet schliesslich die
   dritte Phase, die das Laden des Betriebssystems abschliesst. Der ganze
   Prozess wird in drei Phasen durchgefu:hrt, weil der MBR die Gro:sse der
   Programme, die in Phase eins und zwei ausgefu:hrt werden, limitiert. Das
   Verketten der durchzufu:hrenden Aufgaben ermo:glicht es FreeBSD, ein sehr
   flexibles Ladeprogramm zu besitzen.

   Als na:chstes wird der Kernel gestartet, der zuna:chst nach Gera:ten sucht
   und sie fu:r den Gebrauch initialisiert. Nach dem Booten des Kernels
   u:bergibt dieser die Kontrolle an den Benutzer Prozess init(8), der erst
   sicherstellt, dass alle Laufwerke benutzbar sind und die Ressourcen
   Konfiguration auf Benutzer Ebene startet. Diese wiederum mountet
   Dateisysteme, macht die Netzwerkkarten fu:r die Kommunikation mit dem
   Netzwerk bereit und startet alle Prozesse, die konfiguriert wurden, um
   beim Hochfahren gestartet zu werden.

   Dieser Abschnitt beschreibt die einzelnen Phasen und wie sie mit dem
   FreeBSD-Bootvorgang interagieren.

  12.2.1. Der Boot-Manager

   Der Boot-Manager Code im MBR wird manchmal auch als stage zero des
   Boot-Prozesses bezeichnet. In der Voreinstellung verwendet FreeBSD den
   boot0 Boot-Manager.

   Der vom FreeBSD-Installationsprogramm in der Voreinstelung installierte
   MBR basiert auf /boot/boot0. Die Gro:sse und Leistungsfa:higkeit von boot0
   ist auf 446 Bytes beschra:nkt, weil der restliche Platz fu:r die
   Partitionstabelle sowie den 0x55AA-Identifier am Ende des MBRs beno:tigt
   wird. Wenn boot0 und mehrere Betriebssysteme installiert sind, wird beim
   Starten des Computers eine Anzeige a:hnlich der folgenden zu sehen sein:

   Beispiel 12.1. boot0-Screenshot

 F1 Win
 F2 FreeBSD

 Default: F2

   Diverse Betriebssysteme u:berschreiben den existierenden MBR, wenn sie
   nach FreeBSD installiert werden. Falls dies passiert, kann mit folgendem
   Kommando der momentane MBR durch den FreeBSD-MBR ersetzt werden:

 # fdisk -B -b /boot/boot0 Gera:t

   Bei Gera:t handelt es sich um das Gera:t, von dem gebootet wird, also
   beispielsweise ad0 fu:r die erste IDE-Festplatte, ad2 fu:r die erste
   IDE-Festplatte am zweiten IDE-Controller, da0 fu:r die erste
   SCSI-Festplatte. Um eine angepasste Konfiguration des MBR zu erstellen,
   lesen Sie boot0cfg(8).

  12.2.2. Phase Eins und Phase Zwei

   Im Prinzip sind die erste und die zweite Phase Teile desselben Programms,
   im selben Bereich auf der Festplatte. Aufgrund von
   Speicherplatz-Beschra:nkungen wurden sie in zwei Teile aufgeteilt, welche
   jedoch immer zusammen installiert werden. Beide werden entweder vom
   FreeBSD-Installationsprogramm oder bsdlabel aus der kombinierten
   /boot/boot kopiert.

   Beide Phasen befinden sich ausserhalb des Dateisystems im Bootsektor des
   Boot-Slices, wo boot0 oder ein anderer Boot-Manager ein Programm erwarten,
   das den weiteren Bootvorgang durchfu:hren kann.

   Die erste Phase, boot1, ist ein sehr einfaches Programm, da es nur
   512 Bytes gross sein darf. Es besitzt gerade genug Funktionalita:t, um
   FreeBSDs bsdlabel, das Informationen u:ber den Slice entha:lt, auszulesen,
   und um boot2 zu finden und auszufu:hren.

   Die zweite Phase, boot2, ist schon ein wenig umfangreicher und besitzt
   genu:gend Funktionalita:t, um Dateien in FreeBSDs Dateisystem zu finden.
   Es kann eine einfache Schnittstelle bereitstellen, die es ermo:glicht, den
   zu ladenden Kernel oder Loader auszuwa:hlen. Es la:dt den loader, der
   einen weitaus gro:sseren Funktionsumfang bietet und eine
   Konfigurationsdatei zur Verfu:gung stellt. Wenn der Boot-Prozess wa:hrend
   der zweiten Phase unterbrochen wird, erscheint der folgende Bildschrim:

   Beispiel 12.2. boot2-Screenshot

 >> FreeBSD/i386 BOOT
 Default: 0:ad(0,a)/boot/loader
 boot:

   Um das installierte boot1 und boot2 zu ersetzen, benutzen Sie bsdlabel,
   wobei diskslice das Laufwerk und die Slice darstellt, von dem gebootet
   wird, beispielsweise ad0s1 fu:r die erste Slice auf der ersten
   IDE-Festplatte:

 # bsdlabel -B diskslice

  Warnung:

   Wenn man nur den Festplatten-Namen benutzt, beispielsweise ad0, wird
   bsdlabel eine "dangerously dedicated disk" erstellen, ohne Slices. Das ist
   ein Zustand, den man meistens nicht hervorrufen mo:chte. Aus diesem Grund
   sollte man das diskslice noch einmal pru:fen, bevor Return gedru:ckt wird.

  12.2.3. Phase Drei

   Der loader ist der letzte von drei Schritten im Bootstrap-Prozess. Er kann
   im Dateisystem normalerweise als /boot/loader gefunden werden.

   Der loader soll eine interaktive Konfigurations-Schnittstelle mit
   eingebauten Befehlssatz sein, erga:nzt durch einen umfangreichen
   Interpreter mit einem komplexeren Befehlssatz.

   Der loader sucht wa:hrend seiner Initialisierung nach Konsolen und
   Laufwerken, findet heraus, von welchem Laufwerk er gerade bootet, und
   setzt dementsprechend bestimmte Variablen. Dann wird ein Interpreter
   gestartet, der Befehle interaktiv oder von einem Skript empfangen kann.

   Danach liest der loader /boot/loader.rc, welche ihn standardma:ssig
   anweist /boot/defaults/loader.conf zu lesen, wo sinnvolle
   Standardeinstellungen fu:r diverse Variablen festgelegt werden und
   wiederum /boot/loader.conf fu:r lokale A:nderungen an diesen Variablen
   ausgelesen wird. Anschliessend arbeitet dann loader.rc entsprechend dieser
   Variablen und la:dt die ausgewa:hlten Module und den gewu:nschten Kernel.

   In der Voreinstellung wartet der loader 10 Sekunden lang auf eine
   Tastatureingabe und bootet den Kernel, falls keine Taste beta:tigt wurde.
   Falls doch eine Taste beta:tigt wurde wird dem Benutzer eine
   Eingabeaufforderung angezeigt. Sie nimmt einen Befehlssatz entgegen, der
   es dem Benutzer erlaubt, A:nderungen an Variablen vorzunehmen, Module zu
   laden, alle Module zu entladen oder schliesslich zu booten oder neu zu
   booten.

   Tabelle 12.1. Die eingebauten Befehle des Loaders

          Variable                            Beschreibung                    
                           Es wird mit dem Booten des Kernels fortgefahren,   
                           falls keine Taste in der gegebenen Zeitspanne      
   autoboot Sekunden       beta:tigt wurde. In der gegebenen Zeitspanne,      
                           Vorgabe sind 10 Sekunden, wird ein Countdown       
                           angezeigt.                                         
                           Bewirkt das sofortige Booten des Kernels mit allen 
                           gegebenen Optionen, oder dem angegebenen           
                           Kernelnamen. Das u:bergeben eines Kernelnamens ist 
   boot [-Optionen]        nur nach einem unload anwendbar, andernfalls wird  
   [Kernelname]            der zuvor verwendete Kernel benutzt. Wenn nicht    
                           der vollsta:ndige Pfad fu:r Kernelname angegeben   
                           wird, dann sucht der Loader den Kernel unter       
                           /boot/kernel und /boot/modules.                    
                           Bewirkt die automatische Konfiguration der Module, 
   boot-conf               abha:ngig von den entsprechenden Variablen         
                           (u:blicherweise kernel). Dies nur dann sinnvoll,   
                           wenn zuvor unload benutzt wurde.                   
                           Zeigt die Hilfe an, die zuvor aus der Datei        
   help [Thema]            /boot/loader.help gelesen wird. Falls index als    
                           Thema angegeben wird, wird die Liste der zur       
                           Verfu:gung stehenden Hilfe-Themen angezeigt.       
                           Das Einlesen und Interpretieren der angegebenen    
   include Dateiname ...   Datei geschieht Zeile fu:r Zeile und wird im Falle 
                           eines Fehlers umgehend unterbrochen.               
                           La:dt den Kernel, das Kernel-Modul, oder die Datei 
                           des angegebenen Typs. Argumente, die auf Dateiname 
   load [-t Typ] Dateiname folgen, werden der Datei u:bergeben. Wenn nicht    
                           der vollsta:ndige Pfad fu:r Dateiname angegeben    
                           wird, dann sucht der Loader die Datei unter        
                           /boot/kernel und /boot/modules.                    
                           Listet die Dateien im angegebenen Pfad auf, oder   
   ls [-l] [Pfad]          das Root-Verzeichnis, falls kein Pfad angegeben    
                           wurde. Die Option -l bewirkt, dass die             
                           Dateigro:ssen ebenfalls angezeigt werden.          
                           Listet alle Gera:te auf, fu:r die Module geladen   
   lsdev [-v]              werden ko:nnen. Die Option -v bewirkt eine         
                           ausfu:hrliche Ausgabe.                             
   lsmod [-v]              Listet alle geladenen Module auf. Die Option -v    
                           bewirkt eine ausfu:hrliche Ausgabe.                
   more Dateiname          Zeigt den Dateinhalt der angegebenen Datei an,     
                           wobei eine Pause alle LINES Zeilen gemacht wird.   
   reboot                  Bewirkt einen umgehenden Neustart des Systems.     
   set Variable, set       Setzt die angegebenen Umgebungsvariablen.          
   Variable=Wert           
   unload                  Entla:dt sa:mtliche geladenen Module.              

   Hier ein paar praktische Beispiele fu:r die Bedienung des Loaders. Um den
   gewo:hnlichen Kernel im Single-User Modus zu starten:

 boot -s

   Um alle gewo:hnlichen Kernelmodule zu entladen und dann den alten, oder
   einen anderen Kernel zu laden:

 unload
 load kernel.old

   Verwenden Sie kernel.GENERIC, um den allgemeinen Kernel zu bezeichnen, der
   vorinstalliert wird. kernel.old bezeichnet den Kernel, der vor dem
   System-Upgrade installiert war.

   Der folgende Befehl la:dt die gewo:hnlichen Module mit einem anderen
   Kernel:

 unload
 set kernel="kernel.old"
 boot-conf

   Um ein automatisiertes Kernelkonfigurations-Skript zu laden, geben Sie
   ein:

 load -t userconfig_script /boot/kernel.conf

  12.2.4. Die letzte Phase

   Sobald der Kernel einmal geladen ist, entweder durch den loader oder durch
   boot2, welches den Loader umgeht, dann u:berpru:ft er vorhandene
   Boot-Flags und passt sein Verhalten nach Bedarf an. In Tabelle 12.2,
   "Interaktion mit dem Kernel wa:hrend des Bootens" sind die
   gebra:uchlichsten Boot-Flags aufgelistet. Informationen zu den anderen
   Boot-Flags finden Sie in boot(8).

   Tabelle 12.2. Interaktion mit dem Kernel wa:hrend des Bootens

   Option                            Beschreibung                             
   -a     Bewirkt, dass wa:hrend der Kernel-Initialisierung gefragt wird,     
          welches Gera:t als Root-Dateisystem eingeha:ngt werden soll.        
   -C     Das Root-Dateisystem wird von CD-ROM gebootet.                      
   -s     Bootet in den Single-User Modus                                     
   -v     Zeigt mehr Informationen wa:hrend des Starten des Kernels an.       

   Nachdem der Kernel den Bootprozess abgeschlossen hat, u:bergibt er die
   Kontrolle an den Benutzer-Prozess init(8). Dieses Programm befindet sich
   in /sbin/init, oder dem Pfad, der durch die Variable init_path im loader
   spezifiziert wird.

   Der automatische Reboot-Vorgang stellt sicher, dass alle Dateisysteme des
   Systems konsistent sind. Falls dies nicht der Fall ist und die
   Inkonsistenz des UFS-Dateisystems nicht durch fsck behebbar ist, schaltet
   init das System in den Single-User-Modus, damit der Systemadministrator
   sich des Problems annehmen kann. Andernfalls startet das System in den
   Mehrbenutzermodus.

    12.2.4.1. Der Single-User Modus

   Der Wechsel in den Single-User Modus kann beim Booten durch die Option -s,
   oder das Setzen der Variable boot_single in loader erreicht werden. Zudem
   kann er auch im Mehrbenutzermodus u:ber den Befehl shutdown now erreicht
   werden. Der Single-User Modus beginnt mit dieser Meldung:

 Enter full path of shell or RETURN for /bin/sh:

   Wenn Sie die Eingabetaste dru:cken, wird das System die Bourne Shell
   starten. Falls Sie eine andere Shell starten mo:chten, geben Sie den
   vollsta:ndigen Pfad zur Shell ein.

   Der Single-User Modus wird normalerweise zur Reparatur verwendet,
   beispielsweise wenn das System aufgrund eines inkonsistenten Dateisystems
   oder einem Fehler in einer Konfigurationsdatei nicht bootet. Der Modus
   wird auch verwendet, um das Passwort von root zuru:ckzusetzen, falls
   dieses nicht mehr bekannt ist. Dies alles ist mo:glich, da der Single-User
   Modus vollen Zugriff auf das lokale System und die Konfigurationsdateien
   gewa:hrt. Einen Zugang zum Netzwerk bietet dieser Modus allerdings nicht.

   Obwohl der Single-User Modus fu:r Reparaturen am System sehr nu:tzlich
   ist, stellt es ein Sicherheitsrisiko dar, wenn sich das System an einem
   physisch unsicheren Standort befindet. In der Voreinstellung hat jeder
   Benutzer, der physischen Zugriff auf ein System erlangen kann, volle
   Kontrolle u:ber das System, nachdem in den Single-User Modus gebootet
   wurde.

   Falls die System-Konsole (console) in /etc/ttys auf insecure (dt.:
   unsicher) gesetzt ist, fordert das System zur Eingabe des root Passworts
   auf, bevor es den Single-User Modus aktiviert. Dadurch gewinnen Sie zwar
   ein gewisses Mass an Sicherheit, aber Sie ko:nnen dann nicht mehr das
   Passwort von root zuru:cksetzen, falls es nicht bekannt ist.

   Beispiel 12.3. Auf insecure gesetzte Konsole in /etc/ttys

 # name  getty                           type    status          comments
 #
 # If console is marked "insecure", then init will ask for the root password
 # when going to single-user mode.
 console none                            unknown off insecure

   Eine Konsole sollte auf insecure gesetzt sein, wenn die physikalische
   Sicherheit der Konsole nicht gegeben ist und sichergestellt werden soll,
   dass nur Personen, die das Passwort von root kennen, den Single-User Modus
   benutzen ko:nnen.

    12.2.4.2. Mehrbenutzermodus

   Stellt init fest, dass das Dateisystem in Ordnung ist, oder der Benutzer
   den Single-User-Modus mit exit beendet, schaltet das System in den
   Mehrbenutzermodus, in dem dann die Ressourcen Konfiguration des Systems
   gestartet wird.

   Das Ressourcen Konfigurationssystem (engl. resource configuration, rc)
   liest seine Standardkonfiguration von /etc/defaults/rc.conf und
   System-spezifische Details von /etc/rc.conf. Dann mountet es die
   Dateisysteme gema:ss /etc/fstab, startet die Netzwerkdienste, diverse
   System Daemons und fu:hrt schliesslich die Start-Skripten der lokal
   installierten Anwendungen aus.

   Lesen Sie rc(8) und ebenso die Skripte in /etc/rc.d, um mehr u:ber das
   Ressourcen Konfigurationssystem zu erfahren.

12.3. Willkommensbildschirme wa:hrend des Bootvorgangs konfigurieren

   Beigetragen von Joseph J. Barbish.
   U:bersetzt von Benedict Reuschling.

   Wenn ein FreeBSD-System startet, gibt es normalerweise eine Reihe von
   Meldungen auf der Konsole aus. Ein Willkommensbildschirm erzeugt einen
   alternativen Boot-Bildschirm, der alle Bootmeldungen und Meldungen u:ber
   startende Dienste versteckt. Ein paar Meldungen des Bootloaders,
   einschliesslich das Menu: mit den Bootoptionen und dem Warte-Countdown
   werden dennoch zur Bootzeit angezeigt, auch wenn der Willkommensbildschirm
   aktiviert ist. Der Willkommensbildschirm kann wa:hrend des Bootvorgangs
   mit einem beliebigen Tastendruck ausgeschaltet werden.

   Es existieren zwei grundlegende Umgebungen in FreeBSD. Die erste ist die
   altbekannte, auf virtuellen Konsolen basierte Kommandozeile. Nachdem das
   System den Bootvorgang abgeschlossen hat, wird ein Anmeldebildschirm auf
   der Konsole anzeigt. Die zweite Umgebung ist eine konfigurierte,
   graphische Umgebung. Kapitel 5, Das X-Window-System entha:lt weitere
   Informationen zur Installation und Konfiguration eines graphischen
   Display-Managers und Login-Managers.

   Der Willkommensbildschirm ist standardma:ssig so eingestellt, dass er als
   Bildschirmschoner verwendet wird. Nach einer bestimmten Zeit der
   Unta:tigkeit wird der Willkommensbildschirm angezeigt und wechselt durch
   verschiedene Stufen der Intensita:t von hell zu einem sehr dunklen Bild
   und wieder zuru:ck. Das Verhalten des Willkommensbildschirms kann durch
   hinzufu:gen einer saver=-Zeile in /etc/rc.conf gea:ndert werden. Es gibt
   mehrere eingebaute Bildschirmschoner, die in splash(4) beschrieben werden.
   Die saver=-Option bezieht sich nur auf virtuelle Konsolen und hat keinen
   Effekt bei grafischen Display-Managern.

   Dateien mit Beispiel-Willkommensbildschirmen ko:nnen von der Galerie auf
   http://artwork.freebsdgr.org heruntergeladen werden. Durch die
   Installation des Ports oder Pakets sysutils/bsd-splash-changer ko:nnen
   Willkommensbildschirme von einer zufa:llig ausgewa:hlten Sammlung von
   Bildern bei jedem Neustart angezeigt werden.

   Die Willkommensbildschirm-Funktionalita:t unterstu:tzt 256-Farben in den
   Formaten Bitmap (.bmp), ZSoft PCX (.pcx) oder TheDraw (.bin). Die
   Willkommensbildschirm-Datei .bmp, .pcx oder .bin muss in der
   Root-Partition, beispielsweise unterhalb von /boot abgelegt werden.
   Willkommensbildschirm-Dateien du:rfen eine Auflo:sung von 320 mal 200
   Pixeln oder weniger besitzen, damit Standard-VGA Gera:te damit arbeiten
   ko:nnen. Fu:r eine Standard-Auflo:sung von 256-Farben, 320 mal 200 Pixel
   oder weniger, fu:gen Sie folgende Zeilen in /boot/loader.conf ein und
   ersetzen Sie splash.bmp mit dem Namen der Bitmap-Datei:

 splash_bmp_load="YES"
 bitmap_load="YES"
 bitmap_name="/boot/splash.bmp"

   Wenn Sie anstelle der Bitmap-Datei eine PCX-Datei verwenden:

 splash_pcx_load="YES"
 bitmap_load="YES"
 bitmap_name="/boot/splash.pcx"

   Fu:r ASCII-Art im TheDraw-Format schreiben Sie:

 splash_txt="YES"
 bitmap_load="YES"
 bitmap_name="/boot/splash.bin"

   Damit gro:ssere Bilder bis zu einer maximalen Auflo:sung von 1024 mal 768
   Pixeln verwendet werden ko:nnen, muss das VESA Modul beim Systemstart
   geladen werden. Fu:r einen angepassten Kernel, wie in Kapitel 8,
   Konfiguration des FreeBSD-Kernels beschrieben, muss die
   VESA-Kernelkonfigurationsoption eingefu:gt werden. Um das VESA-Modul fu:r
   den Willkommensbildschirm zu laden, fu:gen Sie zusa:tzlich zu den Zeilen
   aus den vorherigen Beispielen, folgende Zeile in /boot/loader.conf ein:

 vesa_load="YES"

   Weitere interessante Optionen fu:r loader.conf sind:

   beastie_disable="YES"

           Diese Option verhindert die Anzeige des Menu:s mit den
           Bootoptionen, aber der Countdown ist immer noch aktiv. Selbst wenn
           das Bootmenu: deaktiviert ist, kann wa:hrend des Countdowns eine
           der korrespondierenden Optionen ausgewa:hlt werden.

   loader_logo="beastie"

           Dies ersetzt die Standardanzeige des Wortes "FreeBSD". Stattdessen
           wird auf der rechten Seite des Bootmenu:s das bunte Beastie-Logo
           angezeigt.

   Weitere Informationen finden Sie in splash(4), loader.conf(5) und vga(4).

12.4. Konfiguration von Gera:ten

   Beigetragen von Tom Rhodes.

   Der Boot-Loader liest wa:hrend des Systemstarts die Datei device.hints(5),
   die Variablen, auch "device hints" genannt, zur Konfiguration von Gera:ten
   entha:lt.

   Die Variablen ko:nnen auch mit Kommandos in Phase 3 des Boot-Loaders, wie
   in Abschnitt 12.2.3, "Phase Drei" beschrieben, bearbeitet werden. Neue
   Variablen werden mit set gesetzt, unset lo:scht schon definierte Variablen
   und show zeigt Variablen an. Variablen aus /boot/device.hints ko:nnen zu
   diesem Zeitpunkt u:berschrieben werden. Die hier durchgefu:hrten
   A:nderungen sind nicht permanent und beim na:chsten Systemstart nicht mehr
   gu:ltig.

   Nach dem Systemstart ko:nnen alle Variablen mit kenv(1) angezeigt werden.

   Pro Zeile entha:lt /boot/device.hints eine Variable. Kommentare werden
   durch # eingeleitet. Die verwendete Syntax lautet:

 hint.driver.unit.keyword="value"

   Der Boot-Loader verwendet die nachstehende Syntax:

 set hint.driver.unit.keyword=value

   Der Gera:tetreiber wird mit driver, die Nummer des Gera:ts mit unit
   angegeben. keyword ist eine Option aus der folgenden Liste:

     * at: Gibt den Bus, auf dem sich das Gera:t befindet, an.

     * port: Die Startadresse des I/O-Bereichs.

     * irq: Gibt die zu verwendende Unterbrechungsanforderung (IRQ) an.

     * drq: Die Nummer des DMA Kanals.

     * maddr: Die physikalische Speicheradresse des Gera:ts.

     * flags: Setzt verschiedene gera:tespezifische Optionen.

     * disabled: Deaktiviert das Gera:t, wenn der Wert auf 1 gesetzt wird.

   Ein Gera:tetreiber kann mehr Optionen, als die hier beschriebenen,
   besitzen oder beno:tigen. Es wird empfohlen, die Optionen in der
   Manualpage des Treibers nachzuschlagen. Weitere Informationen finden Sie
   in device.hints(5), kenv(1), loader.conf(5) und loader(8).

12.5. Der Shutdown-Vorgang

   Im Falle eines regula:ren Herunterfahrens durch shutdown(8) fu:hrt init(8)
   /etc/rc.shutdown aus, sendet dann sa:mtlichen Prozessen ein TERM Signal
   und schliesslich ein KILL Signal an alle Prozesse, die sich nicht
   rechtzeitig beendet haben.

   FreeBSD-Systeme, die Energieverwaltungsfunktionen unterstu:tzen, ko:nnen
   mit shutdown -p now ausgeschaltet werden. Zum Neustart des Systems wird
   shutdown -r now benutzt. Das Kommando shutdown(8) kann nur von root oder
   Mitgliedern der Gruppe operator benutzt werden. Man kann auch halt(8) und
   reboot(8) verwenden. Weitere Informationen finden Sie in den Hilfeseiten
   der drei Kommandos.

   Das A:ndern der Gruppenmitgliedschaft wird in Abschnitt 3.3, "Benutzer und
   grundlegende Account-Verwaltung" beschrieben.

  Anmerkung:

   Die Energieverwaltungsfunktionen erfordern, dass die Unterstu:tzung fu:r
   acpi(4) als Modul geladen, oder statisch in einen angepassten Kernel
   kompiliert wird.

Kapitel 13. Sicherheit

   Neu verfasst von Tom Rhodes.
   U:bersetzt von Martin Heinen.
   Inhaltsverzeichnis

   13.1. U:bersicht

   13.2. Einfu:hrung

   13.3. Einmalpasswo:rter

   13.4. TCP Wrapper

   13.5. Kerberos

   13.6. OpenSSL

   13.7. VPN mit IPsec

   13.8. OpenSSH

   13.9. Zugriffskontrolllisten fu:r Dateisysteme (ACL)

   13.10. Sicherheitsprobleme in Software von Drittanbietern u:berwachen

   13.11. FreeBSD Sicherheitshinweise

   13.12. Prozess-U:berwachung

   13.13. Einschra:nkung von Ressourcen

   13.14. Gemeinsame Administration mit Sudo

13.1. U:bersicht

   Sicherheit, ob nun physisch oder virtuell, ist ein so breit gefa:chertes
   Thema, dass sich eine ganze Industrie darum gebildet hat. Es wurden
   bereits hunderte Verfahren zur Sicherung von Systemen und Netzwerken
   verfasst, und als Benutzer von FreeBSD ist es unumga:nglich zu verstehen,
   wie Sie sich gegen Angreifer und Eindringlinge schu:tzen ko:nnen.

   In diesem Kapitel werden einige Grundlagen und Techniken diskutiert. Ein
   FreeBSD-System implementiert Sicherheit in mehreren Schichten, und viele
   weitere Programme von Drittanbietern ko:nnen zur Verbesserung der
   Sicherheit beitragen.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie:

     * Grundlegende auf FreeBSD bezogene Sicherheitsaspekte kennen.

     * Die verschiedenen Verschlu:sselungsmechanismen von FreeBSD kennen.

     * Wissen, wie Sie ein Einmalpasswo:rter zur Authentifizierung verwenden.

     * TCP Wrapper fu:r inetd(8) einrichten ko:nnen.

     * Wissen, wie Sie Kerberos unter FreeBSD einrichten.

     * Wissen, wie Sie IPsec konfigurieren und ein VPN einrichten.

     * Wissen, wie Sie OpenSSH unter FreeBSD konfigurieren und benutzen.

     * Wissen, wie Sie ACLs fu:r Dateisysteme benutzen.

     * pkg anwenden ko:nnen, um Softwarepakete aus der Ports-Sammlung auf
       bekannte Sicherheitslu:cken hin zu u:berpru:fen.

     * Mit FreeBSD-Sicherheitshinweisen umgehen ko:nnen.

     * Eine Vorstellung davon haben, was Prozessu:berwachung (Process
       Accounting) ist und wie Sie diese Funktion unter FreeBSD aktivieren
       ko:nnen.

     * Wissen, wie Sie Login-Klassen oder die Ressourcen-Datenbank benutzen,
       um die Ressourcen fu:r Benutzer zu steuern.

   Bevor Sie dieses Kapitel lesen, sollten Sie

     * Grundlegende Konzepte von FreeBSD und dem Internet verstehen.

   Dieses Buch behandelt weitere Sicherheitsthemen. Beispielsweise werden
   verbindliche Zugriffskontrollen im Kapitel 15, Verbindliche
   Zugriffskontrolle und Firewalls im Kapitel 29, Firewalls besprochen.

13.2. Einfu:hrung

   Sicherheit ist die Verantwortung eines jeden Einzelnen. Ein schwacher
   Einstiegspunkt in einem System kann einem Eindringling Zugriff auf
   wichtige Informationen verschaffen, was sich verheerend auf das gesamte
   Netzwerk auswirken kann. Eines der Grundprinzipien der
   Informationssicherheit sind die Vertraulichkeit, Integrita:t und
   Verfu:gbarkeit von Informationssystemen.

   Diese Grundprinzipien sind ein fundamentales Konzept der
   Computer-Sicherheit, da Kunden und Benutzer erwarten, dass ihre Daten
   geschu:tzt sind. Zum Beispiel erwartet ein Kunde, dass seine
   Kreditkarteninformationen sicher gespeichert werden (Vertraulichkeit),
   dass seine Auftra:ge nicht hinter den Kulissen gea:ndert werden
   (Integrita:t) und dass er zu jeder Zeit Zugang zu seinen Informationen hat
   (Verfu:gbarkeit).

   Um diese Grundprinzipien zu implementieren, wenden Sicherheitsexperten das
   sogenannte Defense-in-Depth-Konzept an. Die Idee dahinter ist, mehrere
   Sicherheitsschichten zu addieren, so dass nicht die gesamte
   Systemsicherheit gefa:hrdet ist, wenn eine einzelne Sicherheitsschicht
   kompromittiert wird. Beispielsweise ist es nicht ausreichend, ein Netzwerk
   oder ein System nur mit einer Firewall zu sichern. Der Systemadministrator
   muss auch Benutzerkonten u:berwachen, die Integrita:t von Bina:rdateien
   pru:fen und sicherstellen, dass keine bo:sartigen Programme installiert
   sind. Um eine effektive Sicherheitsstrategie zu implementieren, muss man
   Bedrohungen verstehen und wissen, wie man sich dagegen verteidigen kann.

   Was ist eine Bedrohung, wenn es um Computer-Sicherheit geht? Bedrohungen
   beschra:nken sich nicht nur auf entfernte Angreifer, die sich unerlaubten
   Zugriff auf ein System verschaffen wollen. Zu den Bedrohungen za:hlen auch
   Mitarbeiter, bo:sartige Software, nicht autorisierte Netzwerkgera:te,
   Naturkatastrophen, Sicherheitslu:cken und sogar konkurrierende
   Unternehmen.

   Der Zugriff auf Netzwerke und Systeme erfolgt ohne Erlaubnis, manchmal
   durch Zufall, oder von entfernten Angreifern, und in einigen Fa:llen durch
   Industriespionage oder ehemalige Mitarbeiter. Als Anwender mu:ssen Sie
   vorbereitet sein und auch zugeben, wenn ein Fehler zu einer
   Sicherheitsverletzung gefu:hrt hat. Melden Sie Probleme umgehend dem
   verantwortlichen Sicherheitspersonal. Als Administrator ist es wichtig,
   Bedrohungen zu kennen und darauf vorbereitet zu sein, mo:gliche Scha:den
   zu mildern.

   Wenn Sicherheit auf Systeme angewendet wird, empfiehlt es sich mit der
   Sicherung der Benutzerkonten zu beginnen und dann die Netzwerkschicht zu
   sichern. Dabei ist zu beachten, dass die Sicherheitsrichtlinien des
   Systems und des Unternehmens eingehalten werden. Viele Unternehmen haben
   bereits eine Sicherheitsrichtlinie, welche die Konfiguration von
   technischen Gera:ten abdeckt. Die Richtlinie sollte die Konfiguration von
   Arbeitsplatzrechnern, Desktops, mobilen Gera:ten, Mobiltelefonen,
   Produktions- und Entwicklungsservern umfassen. In einigen Fa:llen ist
   bereits eine Standardvorgehensweise vorhanden. Fragen Sie im Zweifelsfall
   das Sicherheitspersonal.

   Der u:brige Teil dieser Einfu:hrung beschreibt, wie einige grundlegende
   Sicherheitskonfigurationen auf einem FreeBSD-System durchgefu:hrt werden.
   Der Rest des Kapitels zeigt einige spezifische Werkzeuge, die verwendet
   werden ko:nnen, um eine Sicherheitsrichtlinie auf einem FreeBSD-System zu
   implementieren.

  13.2.1. Anmeldungen am System verhindern

   Ein guter Ausgangspunkt fu:r die Absicherung des Systems ist die Pru:fung
   der Benutzerkonten. Stellen Sie sicher, dass root ein starkes Passwort
   besitzt und dass dieses Passwort nicht weitergegeben wird. Deaktivieren
   Sie alle Konten, die keinen Zugang zum System beno:tigen.

   Es existieren zwei Methoden, um die Anmeldung u:ber ein Benutzerkonto zu
   verweigern. Die erste Methode ist, das Konto zu sperren. Dieses Beispiel
   sperrt das Benutzerkonto toor:

 # pw lock toor

   Bei der zweiten Methode wird der Anmeldevorgang verhindert, indem die
   Shell auf /sbin/nologin gesetzt wird. Nur der Superuser kann die Shell
   fu:r andere Benutzer a:ndern:

 # chsh -s /usr/sbin/nologin toor

   Die Shell /usr/sbin/nologin verhindert, dass dem Benutzer bei der
   Anmeldung am System eine Shell zugeordnet wird.

  13.2.2. Gemeinsame Nutzung von Benutzerkonten

   In manchen Fa:llen wird die Systemadministration auf mehrere Benutzer
   aufgeteilt. FreeBSD bietet zwei Methoden, um solche Situationen zu
   handhaben. Bei der ersten und nicht empfohlenen Methode wird ein
   gemeinsames root Passwort der Mitglieder der Gruppe wheel verwendet. Hier
   gibt der Benutzer su und das Passwort fu:r wheel ein, wenn er die Rechte
   des Superusers beno:tigt. Der Benutzer sollte dann nach der Beendigung der
   administrativen Aufgaben exit eingeben. Um einen Benutzer zu dieser Gruppe
   hinzuzufu:gen, bearbeiten Sie /etc/group und fu:gen Sie den Benutzer an
   das Ende des Eintrags wheel hinzu. Die Benutzer mu:ssen durch Komma und
   ohne Leerzeichen getrennt werden.

   Die zweite und empfohlene Methode ein Benutzerkonto zu teilen wird u:ber
   den Port oder das Paket security/sudo realisiert. Dieses Programm bietet
   zusa:tzliche Pru:fungen, bessere Benutzerkontrolle und es kann auch
   konfiguriert werden, einzelnen Benutzern Zugriff auf bestimme,
   privilegierte Befehle zu gestatten.

   Benutzen Sie nach der Installation visudo, um /usr/local/etc/sudoers zu
   bearbeiten. Dieses Beispiel erstellt eine neue Gruppe webadmin und fu:gt
   das Benutzerkonto trhodes dieser Gruppe hinzu. Anschliessend wird die
   Gruppe so konfiguriert, dass es Gruppenmitgliedern gestattet wird apache24
   neu zu starten:

 # pw groupadd webadmin -M trhodes -g 6000
 # visudo
 %webadmin ALL=(ALL) /usr/sbin/service apache24 *

  13.2.3. Passwort-Hashes

   Passwo:rter sind ein notwendiges U:bel. Wenn sie verwendet werden mu:ssen,
   sollten sie sehr komplex sein und dazu sollte eine leistungsfa:hige
   Hash-Funktion gewa:hlt werden, um die Version des Passworts zu
   verschlu:sseln, die in der Passwortdatenbank gespeichert wird. FreeBSD
   unterstu:tzt die Hash-Funktionen DES, MD5, SHA256, SHA512, sowie Blowfish
   Hash-Funktionen in seiner crypt()-Bibliothek. Das in der Voreinstellung
   verwendete SHA512 sollte nicht durch eine weniger sichere Hash-Funktion
   getauscht werden. Es kann jedoch durch den besseren Blowfish-Algorithmus
   ersetzt werden.

  Anmerkung:

   Blowfish ist nicht Bestandteil von AES und ist nicht kompatibel mit allen
   Federal Information Processing Standards (FIPS). Die Verwendung wird in
   einigen Umgebungen vielleicht nicht gestattet.

   Um zu bestimmen, welche Hash-Funktion das Passwort eines Benutzers
   verschlu:sselt, kann der Superuser den Hash fu:r den Benutzer in der
   Passwortdatenbank von FreeBSD nachsehen. Jeder Hash beginnt mit einem
   Zeichen, mit dem die verwendete Hash-Funktion identifiziert werden kann.
   Bei DES gibt es allerdings kein fu:hrendes Zeichen. MD5 benutzt das
   Zeichen $. SHA256 und SHA512 verwenden das Zeichen $6$. Blowfish benutzt
   das Zeichen $2a$. In diesem Beispiel wird das Passwort von dru mit dem
   Hash-Algorithmus SHA512 verschlu:sselt, da der Hash mit $6$ beginnt.
   Beachten Sie, dass der verschlu:sselte Hash und nicht das Passwort selbst,
   in der Passwortdatenbank gespeichert wird:

 # grep dru /etc/master.passwd
 dru:$6$pzIjSvCAn.PBYQBA$PXpSeWPx3g5kscj3IMiM7tUEUSPmGexxta.8Lt9TGSi2lNQqYGKszsBPuGME0:1001:1001::0:0:dru:/usr/home/dru:/bin/csh

   Der Hash-Mechanismus wird in der Login-Klasse des Benutzers festgelegt. In
   diesem Beispiel wird die voreingestellte Login-Klasse fu:r den Benutzer
   verwendet. Der Hash-Algorithmus wird mit dieser Zeile in /etc/login.conf
   gesetzt:

         :passwd_format=sha512:\

   Um den Algorithmus auf Blowfish zu a:ndern, passen Sie die Zeile wie folgt
   an:

         :passwd_format=blf:\

   Fu:hren Sie anschliessend cap_mkdb /etc/login.conf aus, wie in
   Abschnitt 13.13.1, "Login-Klassen konfigurieren" beschrieben. Beachten
   Sie, dass vorhandene Passwort-Hashes durch diese A:nderung nicht
   beeintra:chtigt werden. Das bedeutet, dass alle Passwo:rter neu gehasht
   werden sollten, indem die Benutzer mit passwd ihr Passwort a:ndern.

   Fu:r die Anmeldung auf entfernten Rechnern sollte eine
   Zwei-Faktor-Authentifizierung verwendet werden. Ein Beispiel fu:r eine
   Zwei-Faktor-Authentifizierung ist "etwas, was Sie besitzen" (bspw. einen
   Schlu:ssel) und "etwas, was Sie wissen" (bspw. das Passwort fu:r diesen
   Schlu:ssel). Da OpenSSH Teil des FreeBSD-Basissystems ist, sollten alle
   Anmeldungen u:ber das Netzwerk u:ber eine verschlu:sselte Verbindung mit
   einer schlu:sselbasierten Authentifizierung stattfinden. Passwo:rter
   sollten hier nicht verwendet werden. Weitere Informationen finden Sie in
   Abschnitt 13.8, "OpenSSH". Kerberos-Benutzer mu:ssen eventuell
   zusa:tzliche A:nderungen vornehmen, um OpenSSH in Ihrem Netzwerk zu
   implementieren. Diese A:nderungen sind in Abschnitt 13.5, "Kerberos"
   beschrieben.

  13.2.4. Durchsetzung einer Passwort-Richtlinie

   Die Durchsetzung einer starken Passwort-Richtlinie fu:r lokale
   Benutzerkonten ist ein wesentlicher Aspekt der Systemsicherheit. In
   FreeBSD kann die La:nge, Sta:rke und Komplexita:t des Passworts mit den
   Pluggable Authentication Modules (PAM) implementiert werden.

   In diesem Abschnitt wird gezeigt, wie Sie die minimale und maximale
   Passwortla:nge und die Durchsetzung von gemischten Zeichen mit dem Modul
   pam_passwdqc.so konfigurieren. Dieses Modul wird aufgerufen, wenn ein
   Benutzer sein Passwort a:ndert.

   Um dieses Modul zu konfigurieren, mu:ssen Sie als Superuser die Zeile mit
   pam_passwdqc.so in /etc/pam.d/passwd auskommentieren. Anschliessend
   bearbeiten Sie die Zeile, so dass sie den vorliegenden
   Passwort-Richtlinien entspricht:

 password        requisite       pam_passwdqc.so min=disabled,disabled,disabled,12,10 similar=deny retry=3 enforce=users

   Dieses Beispiel legt gleich mehrere Anforderungen fu:r neue Passwo:rter
   fest. Die Einstellung min kontrolliert die Passwortla:nge. Es verfu:gt
   u:ber fu:nf Werte, weil dieses Modul fu:nf verschiedene Arten von
   Passwo:rtern definiert, basierend auf der Komplexita:t. Die Komplexita:t
   wird durch die Art von Zeichen definiert, die in einem Passwort vorhanden
   sind, wie zum Beispiel Buchstaben, Zahlen und Sonderzeichen. Die
   verschiedenen Arten von Passwo:rtern werden in pam_passwdqc(8)
   beschrieben. In diesem Beispiel sind die ersten drei Arten von
   Passwo:rtern deaktiviert, was bedeutet, dass Passwo:rter, die dieser
   Komplexita:tsstufe entsprechen, nicht akzeptiert werden, unabha:ngig von
   der La:nge des Passworts. Die 12 legt eine Richtlinie von mindestens
   zwo:lf Zeichen fest, wenn das Passwort auch drei Arten von Komplexita:t
   aufweist. Die 10 legt eine Richtlinie fest, die auch Passwo:rter mit
   mindestens zehn Zeichen zulassen, wenn das Passwort Zeichen mit vier Arten
   von Komplexita:t aufweist.

   Die Einstellung similar verbietet Passwo:rter, die dem vorherigen Passwort
   des Benutzers a:hnlich sind. Die Einstellung retry bietet dem Benutzer
   drei Mo:glichkeiten, ein neues Passwort einzugeben.

   Sobald diese Datei gespeichert wird, sehen Benutzer bei der A:nderung
   ihres Passworts die folgende Meldung:

 % passwd
 Changing local password for trhodes
 Old Password:

 You can now choose the new password.
 A valid password should be a mix of upper and lower case letters,
 digits and other characters.  You can use a 12 character long
 password with characters from at least 3 of these 4 classes, or
 a 10 character long password containing characters from all the
 classes.  Characters that form a common pattern are discarded by
 the check.
 Alternatively, if noone else can see your terminal now, you can
 pick this as your password: "trait-useful&knob".
 Enter new password:

   Wenn ein Passwort nicht den Richtlinien entspricht, wird es mit einer
   Warnung abgelehnt und der Benutzer bekommt die Mo:glichkeit, es erneut zu
   versuchen, bis die Anzahl an Wiederholungen erreicht ist.

   Die meisten Passwort-Richtlinien erzwingen, dass Passwo:rter nach einer
   bestimmten Anzahl von Tagen ablaufen. Um dieses Limit in FreeBSD zu
   konfigurieren, setzen Sie es fu:r die Login-Klasse des Benutzers in
   /etc/login.conf. Die voreingestellte Login-Klasse entha:lt dazu ein
   Beispiel:

 #       :passwordtime=90d:\

   Um fu:r diese Login-Klasse das Passwort nach 90 Tagen ablaufen zu lassen,
   entfernen Sie das Kommentarzeichen (#), speichern Sie die A:nderungen und
   fu:hren Sie cap_mkdb /etc/login.conf aus.

   Um das Passwort fu:r einzelne Benutzer ablaufen zu lassen, geben Sie pw
   ein Ablaufdatum oder die Anzahl von Tagen, zusammen mit dem Benutzer an:

 # pw usermod -p 30-apr-2015 -n trhodes

   Wie zu sehen ist, wird das Ablaufdatum in der Form von Tag, Monat und Jahr
   angegeben. Weitere Informationen finden Sie in pw(8).

  13.2.5. Erkennen von Rootkits

   Ein Rootkit ist eine nicht autorisierte Software die versucht,
   Root-Zugriff auf ein System zu erlangen. Einmal installiert, wird diese
   bo:sartige Software normalerweise eine Hintertu:r fu:r den Angreifer
   installieren. Realistisch betrachtet sollte ein durch ein Rootkit
   kompromittiertes System nach der Untersuchung von Grund auf neu
   installiert werden. Es besteht jedoch die enorme Gefahr, dass sogar das
   Sicherheitspersonal oder Systemingenieure etwas u:bersehen, was ein
   Angreifer dort platziert hat.

   Wird ein Rootkit erkannt, ist dies bereits ein Zeichen dafu:r, dass das
   System an einem bestimmten Zeitpunkt kompromittiert wurde. Meist neigen
   diese Art von Anwendungen dazu, sehr gut versteckt zu sein. Dieser
   Abschnitt zeigt das Werkzeug security/rkhunter, mit dem Rootkits erkannt
   werden ko:nnen.

   Nach der Installation dieses Ports oder Pakets kann das System mit dem
   folgenden Kommando u:berpru:ft werden. Das Programm generiert eine ganze
   Menge Informationen und Sie werden diverse Male ENTER dru:cken mu:ssen:

 # rkhunter -c

   Nachdem der Prozess abgeschlossen ist, wird eine Statusmeldung auf dem
   Bildschirm ausgegeben. Die Meldung entha:lt die Anzahl der u:berpru:ften
   Dateien, verda:chtige Dateien, mo:gliche Rootkits und weitere
   Informationen. Wa:hrend der U:berpru:fung erscheinen allgemeine
   Sicherheitswarnungen, zum Beispiel u:ber versteckte Dateien, die Auswahl
   von OpenSSH-Protokollen und bekannte, anfa:llige Versionen installierter
   Anwendungen. Diese ko:nnen nun direkt, oder nach detaillierter Analyse
   untersucht werden.

   Jeder Administrator sollte wissen, was auf den Systemen la:uft, fu:r die
   er verantwortlich ist. Werkzeuge von Drittanbietern, wie rkhunter oder
   sysutils/lsof, sowie native Befehle wie netstat oder ps, ko:nnen eine
   grosse Menge an Informationen u:ber das System anzeigen. Machen Sie sich
   Notizen daru:ber, was "normal" ist, und fragen Sie nach, wenn Ihnen etwas
   suspekt erscheint. Eine Beeintra:chtigung zu verhindern ist ideal, aber
   die Erkennung einer Beeintra:chtigung ist ein Muss.

  13.2.6. U:berpru:fung von Bina:rdateien

   Die U:berpru:fung von System- und Bina:rdateien ist wichtig, da sie
   Systemadministratoren Informationen u:ber Systema:nderungen zur Verfu:gung
   stellt. Eine Software, die das System auf A:nderungen u:berwacht wird
   Intrustion Detection System (IDS) genannt.

   FreeBSD bietet native Unterstu:tzung fu:r ein einfaches IDS-System. Obwohl
   die ta:glichen Sicherheits-E-Mails den Administrator u:ber A:nderungen in
   Kenntnis setzen, werden diese Informationen lokal gespeichert und es
   besteht die Mo:glichkeit, dass ein Angreifer diese Informationen
   manipulieren kann, um A:nderungen am System zu verbergen. Daher ist es
   empfehlenswert, einen eigenen Satz an Signaturen zu erstellen und diese
   dann in einem schreibgeschu:tzten Verzeichnis, oder vorzugsweise auf einem
   USB-Stick oder auf einem entfernten Server zu speichern.

   Das im Basissystem enthaltene Werkzeug mtree kann verwendet werden, um
   eine Spezifikation des Inhalts eines Verzeichnisses zu erzeugen. Hierbei
   wird ein Startwert (Seed) oder eine numerische Konstante benutzt, um die
   Spezifikation zu erstellen und um sicherzustellen, dass sich die
   Spezifikation nicht gea:ndert hat. Dadurch kann festgestellt werden, ob
   eine Datei oder eine Bina:rdatei vera:ndert wurde. Da ein Angreifer den
   Seed nicht kennt, ist es ihm fast unmo:glich die Pru:fsummen von Dateien
   zu manipulieren. Das folgende Beispiel generiert einen Satz mit
   SHA256-Pru:fsummen fu:r jede Bina:rdatei unterhalb von /bin und speichert
   diese Werte in einer versteckten Datei im Heimatverzeichnis von root unter
   dem Namen /root/.bin_chksum_mtree:

 # mtree -s 3483151339707503 -c -K cksum,sha256digest -p /bin > /root/.bin_chksum_mtree
 # mtree: /bin checksum: 3427012225

   3483151339707503 stellt den Seed dar. Diesen Wert sollten Sie sich merken,
   aber nicht mit anderen Personen teilen.

   Die Ausgabe von /root/.bin_chksum_mtree sollte a:hnlich der folgenden
   sein:

 #          user: root
 #       machine: dreadnaught
 #          tree: /bin
 #          date: Mon Feb  3 10:19:53 2014

 # .
 /set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none
 .               type=dir mode=0755 nlink=2 size=1024 \
                 time=1380277977.000000000
     \133        nlink=2 size=1170 time=1380277977.000000000 \
                 cksum=484492447 \
                 sha256digest=6207490fbdb5ed1904441fbfa941279055c3e24d3a4049aeb45094596400662a
     cat         size=12096 time=1380277975.000000000 cksum=3909216944 \
                 sha256digest=65ea347b9418760b247ab10244f47a7ca2a569c9836d77f074e7a306900c1e69
     chflags     size=8168 time=1380277975.000000000 cksum=3949425175 \
                 sha256digest=c99eb6fc1c92cac335c08be004a0a5b4c24a0c0ef3712017b12c89a978b2dac3
     chio        size=18520 time=1380277975.000000000 cksum=2208263309 \
                 sha256digest=ddf7c8cb92a58750a675328345560d8cc7fe14fb3ccd3690c34954cbe69fc964
     chmod       size=8640 time=1380277975.000000000 cksum=2214429708 \
                 sha256digest=a435972263bf814ad8df082c0752aa2a7bdd8b74ff01431ccbd52ed1e490bbe7

   Der Report entha:lt den Rechnernamen, das Datum und die Uhrzeit der
   Spezifikation, sowie den Namen des Benutzers, der die Spezifikation
   erstellt hat. Fu:r jede Bina:rdatei im Verzeichnis gibt es eine
   Pru:fsumme, Gro:sse, Uhrzeit und einen SHA256-Hashwert.

   Um sicherzustellen, dass die bina:ren Signaturen nicht vera:ndert wurden,
   vergleichen Sie den Inhalt des aktuellen Verzeichnisses mit der zuvor
   erstellen Spezifikation. Speichern Sie die Ergebnisse in einer Datei.
   Dieses Kommando beno:tigt den Seed, der verwendet wurde um die
   urspru:ngliche Spezifikation zu erstellen:

 # mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
 # mtree: /bin checksum: 3427012225

   Dies sollte die gleiche Pru:fsumme fu:r /bin produzieren, wie die
   urspru:ngliche Spezifikation. Wenn keine A:nderungen an den Bina:rdateien
   in diesem Verzeichnis aufgetreten sind, wird die Ausgabedatei
   /root/.bin_chksum_output leer sein. Um eine A:nderung zu simulieren,
   a:ndern Sie mit touch das Datum von /bin/cat und fu:hren Sie die
   Verifikation erneut aus:

 # touch /bin/cat
 # mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
 # more /root/.bin_chksum_output
 cat changed
         modification time expected Fri Sep 27 06:32:55 2013 found Mon Feb  3 10:28:43 2014

   Es wird empfohlen, Spezifikationen fu:r Verzeichnisse zu erstellen, welche
   Bina:rdateien, Konfigurationsdateien und sensible Daten enthalten. In der
   Regel werden Spezifikationen fu:r /bin, /sbin, /usr/bin, /usr/sbin,
   /usr/local/bin, /usr/local/sbin, /etc und /usr/local/etc erstellt.

   Mit security/aide steht ein fortgeschrittenes IDS-System zur Verfu:gung,
   aber in den meisten Fa:llen bietet mtree die Funktionalita:t, die von
   Administratoren beno:tigt wird. Es ist jedoch sehr wichtig den Seed und
   die Pru:fsummen in der Ausgabe vor bo:swilligen Benutzern verborgen zu
   halten. Weitere Informationen zu mtree finden Sie in mtree(8).

  13.2.7. System-Tuning fu:r Sicherheit

   Unter FreeBSD ko:nnen viele Systemfunktionen mit sysctl konfiguriert
   werden. Dieser Abschnitt behandelt ein paar Sicherheitsmerkmale mit denen
   Denial of Service (DoS) verhindert werden sollen. Weitere Informationen
   u:ber die Benutzung von sysctl und wie Werte voru:bergehend oder auch
   permanent gea:ndert werden ko:nnen, finden Sie in Abschnitt 11.9,
   "Einstellungen mit sysctl(8)".

  Anmerkung:

   Jedes Mal wenn eine Einstellung mit sysctl gea:ndert wird, vergro:ssert
   sich die Wahrscheinlichkeit eines unerwu:nschten Schadens, was die
   Verfu:gbarkeit des Systems beeinflusst. Alle A:nderungen sollten
   u:berwacht und wenn mo:glich, vorher auf einem Testsystem ausprobiert
   werden, bevor sie auf einem Produktivsystem verwendet werden.

   In der Voreinstellung startet FreeBSD in der Sicherheitsstufe
   (Securelevel) -1. Dieser Modus wird "unsicherer Modus" genannt, da die
   unvera:nderlichen Datei-Flags ausgeschaltet werden ko:nnen und dadurch von
   allen Gera:ten gelesen und geschrieben werden kann. Solange die
   Einstellung nicht u:ber sysctl oder in den Startskripten gea:ndert wird,
   verbleibt die Sicherheitsstufe auf -1. Die Sicherheitsstufe kann wa:hrend
   des Systemstarts erho:ht werden. Dazu muss in /etc/rc.conf
   kern_securelevel_enable auf YES und kern_securelevel auf den gewu:nschten
   Wert gesetzt werden. Weitere Informationen zu diesen Einstellungen und den
   verfu:gbaren Sicherheitsstufen finden Sie in security(7) und init(8).

  Warnung:

   Das Erho:hen der Sicherheitsstufe kann zu Problemen mit Xorg fu:hren.

   Die Einstellungen net.inet.tcp.blackhole und net.inet.udp.blackhole
   ko:nnen benutzt werden, um eingehende SYN-Pakete an geschlossenen Ports zu
   blockieren, ohne ein RST-Paket als Antwort zu senden. Standardma:ssig wird
   jedoch ein RST-Paket gesendet, um zu zeigen, dass der Port geschlossen
   ist. Das a:ndern dieser Voreinstellung bietet einen gewissen Schutz gegen
   Portscans. Diese Portscans versuchen herauszufinden, welche Anwendungen
   auf einem System ausgefu:hrt werden. Setzen Sie net.inet.tcp.blackhole auf
   2 und net.inet.udp.blackhole auf 1. Weitere Informationen zu diesen
   Einstellungen finden Sie in blackhole(4).

   Die Einstellung net.inet.icmp.drop_redirect hilft dabei, sogenannte
   Redirect-Angriffe zu verhindern. Ein Redirect-Angriff ist eine Art von
   DoS, die massenhaft ICMP-Pakete Typ 5 versendet. Da solche Pakete nicht
   beno:tigt werden, setzen Sie net.inet.icmp.drop_redirect auf 1 und
   net.inet.ip.redirect auf 0.

   Source Routing zur Erfassung und zum Zugriff auf nicht-routbare Adressen
   im internen Netzwerk. Dies sollte deaktiviert werden, da nicht-routbare
   Adressen in der Regel nicht absichtlich geroutet werden. Um diese Funktion
   zu deaktivieren, setzen Sie net.inet.ip.sourceroute und
   net.inet.accept_sourceroute auf 0.

   Wenn ein Netzwerkgera:t Nachrichten an alle Rechner in einem Subnetz
   senden muss, wird eine ICMP-Echo-Request Nachricht an die
   Broadcast-Adresse gesendet. Allerdings gibt es keinen guten Grund fu:r
   externe Rechner, solche Nachrichten zu verschicken. Um alle externen
   Broadcast-Anfragen abzulehnen, setzen Sie net.inet.icmp.bmcastecho auf 0.

   Einige zusa:tzliche Einstellungen sind in security(7) dokumentiert.

13.3. Einmalpasswo:rter

   In der Voreinstellung unterstu:tzt FreeBSD One-time Passwords in
   Everything (OPIE). OPIE wurde konzipiert um Replay-Angriffe zu verhindern,
   bei dem ein Angreifer das Passwort eines Benutzers ausspa:ht und es
   benutzt, um Zugriff auf ein System zu erlangen. Da ein Passwort unter OPIE
   nur einmal benutzt wird, ist ein ausgespa:htes Passwort fu:r einen
   Angreifer nur von geringem Nutzen. OPIE verwendet eine sichere
   Hash-Funktion und ein Challenge/Response-System, um Passwo:rter zu
   verwalten. Die FreeBSD-Implementation verwendet in der Voreinstellung die
   MD5-Hash-Funktion.

   OPIE verwendet drei verschiedene Arten von Passwo:rtern. Das erste ist das
   normale UNIX(R)- oder Kerberos-Passwort. Das zweite ist das
   Einmalpasswort, das von opiekey generiert wird. Das dritte Passwort ist
   das "geheime Passwort", das zum Erstellen der Einmalpasswo:rter verwendet
   wird. Das geheime Passwort steht in keiner Beziehung zum UNIX(R)-Passwort
   und beide Passwo:rter sollten unterschiedlich sein.

   Es gibt noch zwei weitere Werte, die fu:r OPIE wichtig sind. Der erste ist
   der "Initialwert" (engl. seed oder key), der aus zwei Buchstaben und fu:nf
   Ziffern besteht. Der zweite Wert ist der "Iterationsza:hler", eine Zahl
   zwischen 1 und 100. OPIE generiert das Einmalpasswort, indem es den
   Initialwert und das geheime Passwort aneinander ha:ngt und dann die
   MD5-Hash-Funktion so oft, wie durch den Iterationsza:hler gegeben,
   anwendet. Das Ergebnis wird in sechs englische Wo:rter umgewandelt, die
   das Einmalpasswort ergeben. Das Authentifizierungssystem (meistens PAM)
   merkt sich das zuletzt benutzte Einmalpasswort und der Benutzer ist
   authentifiziert, wenn die Hash-Funktion des Passworts dem vorigen Passwort
   entspricht. Da nicht umkehrbare Hash-Funktionen benutzt werden, ist es
   unmo:glich, aus einem bekannten Passwort weitere gu:ltige
   Einmalpasswo:rter zu berechnen. Der Iterationsza:hler wird nach jeder
   erfolgreichen Anmeldung um eins verringert und stellt so die
   Synchronisation zwischen Benutzer und Login-Programm sicher. Wenn der
   Iterationsza:hler den Wert 1 erreicht, muss OPIE neu initialisiert werden.

   Es gibt ein paar Programme, die in diesen Prozess einbezogen werden. Ein
   Einmalpasswort oder eine Liste von Einmalpasswo:rtern, die von opiekey(1)
   durch Angabe eines Iterationsza:hlers, eines Initalwertes und einem
   geheimen Passwort generiert wird. opiepasswd(1) wird benutzt, um
   Passwo:rter, Iterationsza:hler oder Initialwerte zu a:ndern. opieinfo(1)
   hingegen gibt den momentanen Iterationsza:hler und Initialwert eines
   Benutzers aus, den es aus /etc/opiekeys ermittelt.

   Dieser Abschnitt beschreibt vier verschiedene Arten von Ta:tigkeiten.
   Zuerst wird erla:utert, wie Einmalpasswo:rter u:ber eine gesicherte
   Verbindung konfiguriert werden. Als na:chstes wird erkla:rt, wie
   opiepasswd u:ber eine nicht gesicherte Verbindung eingesetzt wird. Als
   drittes wird beschrieben, wie man sich u:ber eine nicht gesicherte
   Verbindung anmeldet. Die vierte Ta:tigkeit beschreibt, wie man eine Reihe
   von Schlu:sseln generiert, die man sich aufschreiben oder ausdrucken kann,
   um sich von Orten anzumelden, die u:ber keine gesicherten Verbindungen
   verfu:gen.

  13.3.1. OPIE initialisieren

   Um OPIE erstmals zu initialisieren, rufen Sie opiepasswd(1) u:ber eine
   gesicherte Verbindung auf:

 % opiepasswd -c
 [grimreaper] ~ $ opiepasswd -f -c
 Adding unfurl:
 Only use this method from the console; NEVER from remote. If you are using
 telnet, xterm, or a dial-in, type ^C now or exit with no password.
 Then run opiepasswd without the -c parameter.
 Using MD5 to compute responses.
 Enter new secret pass phrase:
 Again new secret pass phrase:

 ID unfurl OTP key is 499 to4268
 MOS MALL GOAT ARM AVID COED

   Die Option -c startet den Konsolen-Modus, der davon ausgeht, dass der
   Befehl von einem sicherem Ort ausgefu:hrt wird. Dies kann beispielsweise
   der eigene Rechner sein, oder u:ber eine mit SSH gesicherte Verbindung zum
   eigenen Rechner.

   Geben Sie das geheime Passwort ein, wenn Sie danach gefragt werden. Damit
   werden die Einmalpasswo:rter generiert. Dieses Passwort sollte schwer zu
   erraten sein und sich ebenfalls vom Passwort des Bentuzerkontos
   unterscheiden. Es muss zwischen 10 und 127 Zeichen lang sein. Pra:gen Sie
   sich dieses Passwort gut ein!

   Die Zeile, die mit "ID" beginnt, entha:lt den Login-Namen (unfrul), den
   voreingestellten Iterationsza:hler (499) und den Initialwert (to4268). Das
   System erinnert sich an diese Parameter und wird sie bei einem
   Anmeldeversuch anzeigen. Sie brauchen sich diese Dinge also nicht merken.
   Die letzte Zeile entha:lt das generierte Einmalpasswort, das aus den
   Parametern und dem geheimen Passwort ermittelt wurde. Bei der na:chsten
   Anmeldung muss dann diese Einmalpasswort benutzt werden.

  13.3.2. Initialisierung u:ber eine nicht gesicherte Verbindung

   Um Einmalpasswo:rter u:ber eine nicht gesicherte Verbindung zu
   initialisieren, oder das geheime Passwort zu a:ndern, mu:ssen Sie u:ber
   eine gesicherte Verbindung zu einer Stelle verfu:gen, an der Sie opiekey
   ausfu:hren ko:nnen. Dies kann etwa die Eingabeaufforderung auf einer
   Maschine sein, der Sie vertrauen. Zudem mu:ssen Sie einen
   Iterationsza:hler vorgeben (100 ist ein guter Wert) und einen Initialwert
   wa:hlen, wobei Sie auch einen zufa:llig generierten benutzen ko:nnen.
   Benutzen Sie opiepasswd(1) u:ber die ungesicherte Verbindung zu der
   Maschine, die Sie einrichten wollen:

 % opiepasswd

 Updating unfurl:
 You need the response from an OTP generator.
 Old secret pass phrase:
         otp-md5 498 to4268 ext
         Response: GAME GAG WELT OUT DOWN CHAT
 New secret pass phrase:
         otp-md5 499 to4269
         Response: LINE PAP MILK NELL BUOY TROY

 ID mark OTP key is 499 gr4269
 LINE PAP MILK NELL BUOY TROY

   Dru:cken Sie Return, um die Vorgabe fu:r den Initialwert zu akzeptieren.
   Bevor Sie nun das Zugriffspasswort (engl. access password) eingeben, rufen
   Sie u:ber die gesicherte Verbindung opikey mit denselben Parametern auf:

 % opiekey 498 to4268
 Using the MD5 algorithm to compute response.
 Reminder: Don not use opiekey from telnet or dial-in sessions.
 Enter secret pass phrase:
 GAME GAG WELT OUT DOWN CHAT

   Gehen Sie zuru:ck zu der nicht gesicherten Verbindung und geben dort das
   eben generierte Einmalpasswort ein.

  13.3.3. Erzeugen eines einzelnen Einmalpasswortes

   Nachdem Sie OPIE eingerichtet haben, werden Sie beim na:chsten Anmelden
   wie folgt begru:sst:

 % telnet example.com
 Trying 10.0.0.1...
 Connected to example.com
 Escape character is '^]'.

 FreeBSD/i386 (example.com) (ttypa)

 login: <username>
 otp-md5 498 gr4269 ext
 Password:

   OPIE besitzt eine nu:tzliche Eigenschaft. Wenn Sie an der
   Eingabeaufforderung Return dru:cken, wird die echo-Funktion eingeschaltet,
   das heisst Sie sehen, was Sie tippen. Dies ist besonders nu:tzlich, wenn
   Sie ein generiertes Passwort von einem Ausdruck abtippen mu:ssen.

   Jetzt mu:ssen Sie das Einmalpasswort generieren, um der
   Anmeldeaufforderung nachzukommen. Dies muss auf einem gesicherten System
   geschehen, auf dem Sie opiekey(1) ausfu:hren ko:nnen. Dieses Programm gibt
   es auch fu:r Windows(R), Mac OS(R) und FreeBSD. Es beno:tigt den
   Iterationsza:hler sowie den Initialwert als Parameter, die Sie mittels
   "cut-and-paste" direkt von der Login-Aufforderung nehmen ko:nnen.

   Auf dem sicheren System:

 % opiekey 498 to4268
 Using the MD5 algorithm to compute response.
 Reminder: Do not use opiekey from telnet or dial-in sessions.
 Enter secret pass phrase:
 GAME GAG WELT OUT DOWN CHAT

   Sobald das Einmalpasswort generiert wurde, ko:nnen Sie die Anmeldeprozedur
   fortsetzen.

  13.3.4. Erzeugen von mehreren Einmalpasswo:rtern

   Manchmal haben Sie keinen Zugriff auf eine sichere Maschine oder eine
   sichere Verbindung. In diesem Fall ko:nnen Sie vorher mit opiekey(1)
   einige Einmalpasswo:rter generieren. Zum Beispiel:

 % opiekey -n 5 30 zz99999
 Using the MD5 algorithm to compute response.
 Reminder: Do not use opiekey from telnet or dial-in sessions.
 Enter secret pass phrase: <secret password>
 26: JOAN BORE FOSS DES NAY QUIT
 27: LATE BIAS SLAY FOLK MUCH TRIG
 28: SALT TIN ANTI LOON NEAL USE
 29: RIO ODIN GO BYE FURY TIC
 30: GREW JIVE SAN GIRD BOIL PHI

   Mit -n 5 fordern Sie fu:nf Passwo:rter der Reihe nach an. Der letzte
   Iterationsza:hler wird durch 30 gegeben. Beachten Sie bitte, dass die
   Passwo:rter in der umgekehrten Reihenfolge, in der sie zu benutzen sind,
   ausgeben werden. Wirklich paranoide Benutzer ko:nnen sich jetzt die
   Passwo:rter aufschreiben oder ausdrucken. Sie sollten die Passwo:rter nach
   Gebrauch durchstreichen.

  13.3.5. Einschra:nken der Benutzung von System-Passwo:rtern

   OPIE kann die Verwendung von UNIX(R)-Passwo:rtern abha:ngig von der
   IP-Adresse einschra:nken. Die dazu no:tigen Einstellungen werden in
   /etc/opieaccess vorgenommen, die bei der Installation des Systems
   automatisch erzeugt wird. Weitere Informationen u:ber diese Datei und
   Sicherheitshinweise zu ihrer Verwendung finden Sie in opieaccess(5).

   opieaccess ko:nnte beispielsweise die folgende Zeile enthalten:

 permit 192.168.0.0 255.255.0.0

   Diese Zeile erlaubt es Benutzern, die sich von einer der angegebenen
   IP-Adressen anmelden, ihr UNIX(R)-Passwort zu verwenden. Beachten Sie
   bitte, dass eine IP-Adresse leicht gefa:lscht werden kann.

   Findet sich in opieaccess kein passender Eintrag, muss die Anmeldung mit
   OPIE erfolgen.

13.4. TCP Wrapper

   Beigetragen von Tom Rhodes.

   TCP Wrapper ist ein rechnerbasiertes Zugriffskontrollsystem, das die
   Fa:higkeiten von Abschnitt 28.2, "Der inetd "Super-Server"" erweitert.
   Beispielsweise ko:nnen Verbindungen protokolliert, Nachrichten
   zuru:ckgesandt oder nur interne Verbindungen angenommen werden. Weitere
   Informationen u:ber TCP Wrapper und dessen Funktionen finden Sie in
   tcpd(8).

   TCP Wrapper sollten nicht als Ersatz fu:r eine ordentlich konfigurierte
   Firewall angesehen werden. Stattdessen sollten TCP Wrapper in Verbindung
   mit einer Firewall und anderen Sicherheitsmechanismen eingesetzt werden,
   um bei der Umsetzung einer Sicherheitsrichtlinie eine weitere
   Sicherheitsschicht zu bieten.

  13.4.1. Konfiguration

   Um TCP Wrapper unter FreeBSD zu aktivieren, fu:gen Sie die folgenden
   Zeilen in /etc/rc.conf ein:

 inetd_enable="YES"
 inetd_flags="-Ww"

   Anschliessend muss /etc/hosts.allow richtig konfiguriert werden.

  Anmerkung:

   Im Gegensatz zu anderen Implementierungen der TCP Wrapper wird unter
   FreeBSD vom Gebrauch der Datei hosts.deny abgeraten. Die Konfiguration
   sollte sich vollsta:ndig in /etc/hosts.allow befinden.

   In der einfachsten Konfiguration werden Dienste abha:ngig von den Optionen
   in /etc/hosts.allow erlaubt oder gesperrt. Unter FreeBSD wird in der
   Voreinstellung jeder von inetd gestartete Dienst erlaubt.

   Eine Konfigurationszeile ist wie folgt aufgebaut: Dienst : Adresse :
   Aktion. Dienst ist der von inetd gestartete Dienst (auch Daemon genannt).
   Die Adresse ist ein gu:ltiger Rechnername, eine IP-Adresse oder eine
   IPv6-Adresse in Klammern ([ ]). Der Wert allow im Feld Aktion erlaubt
   Zugriffe, der Wert deny verbietet Zugriffe. Die Zeilen in hosts.allow
   werden fu:r jede Verbindung der Reihe nach abgearbeitet. Trifft eine Zeile
   auf eine Verbindung zu, wird die entsprechende Aktion ausgefu:hrt und die
   Abarbeitung ist beendet.

   Um beispielsweise einkommende POP3-Verbindungen fu:r den Dienst
   mail/qpopper zu erlauben, sollte hosts.allow um die nachstehende Zeile
   erweitert werden:

 # This line is required for POP3 connections:
 qpopper : ALL : allow

   Jedes Mal, wenn diese Datei bearbeitet wird, muss inetd neu gestartet
   werden:

 # service inetd restart

  13.4.2. Erweiterte Konfiguration

   TCP Wrapper besitzen weitere Optionen, die bestimmen, wie Verbindungen
   behandelt werden. In einigen Fa:llen ist es gut, wenn bestimmten Rechnern
   oder Diensten eine Nachricht geschickt wird. In anderen Fa:llen soll
   vielleicht der Verbindungsaufbau protokolliert oder eine E-Mail an einen
   Administrator versandt werden. Oder ein Dienst soll nur fu:r das lokale
   Netz bereitstehen. Dies alles ist mit so genannten Wildcards, Metazeichen
   und der Ausfu:hrung externer Programme mo:glich.

   Stellen Sie sich vor, eine Verbindung soll verhindert werden und
   gleichzeitig soll dem Rechner, der die Verbindung aufgebaut hat, eine
   Nachricht geschickt werden. Solch eine Aktion ist mit twist mo:glich.
   twist fu:hrt beim Verbindungsaufbau ein Kommando oder ein Skript aus. Ein
   Beispiel ist in hosts.allow enthalten:

 # Alle anderen Dienste sind geschu:tzt
 ALL : ALL \
         : severity auth.info \
         : twist /bin/echo "You are not welcome to use %d from %h."

   Fu:r jeden Dienst, der nicht vorher in hosts.allow konfiguriert wurde,
   wird die Meldung "You are not allowed to use daemon name from hostname."
   zuru:ckgegeben. Dies ist nu:tzlich, wenn die Gegenstelle sofort
   benachrichtigt werden soll, nachdem die Verbindung getrennt wurde. Der
   Text der Meldung muss in Anfu:hrungszeichen (") stehen.

  Warnung:

   Ein so konfigurierter Server ist anfa:llig fu:r
   Denial-of-Service-Angriffe. Ein Angreifer kann die gesperrten Dienste mit
   Verbindungsanfragen u:berfluten.

   Eine weitere Mo:glichkeit bietet spawn. Wie twist verbietet spawn die
   Verbindung und fu:hrt externe Kommandos aus. Allerdings sendet spawn dem
   Rechner keine Ru:ckmeldung. Sehen Sie sich die nachstehende
   Konfigurationsdatei an:

 # Verbindungen von example.com sind gesperrt:
 ALL : .example.com \
         : spawn (/bin/echo %a from %h attempted to access %d >> \
           /var/log/connections.log) \
         : deny

   Damit sind Verbindungen von der Domain *.example.com gesperrt. Jeder
   Verbindungsaufbau wird zudem in /var/log/connections.log protokolliert.
   Das Protokoll entha:lt den Rechnernamen, die IP-Adresse und den Dienst,
   der angesprochen wurde. In diesem Beispiel wurden die Metazeichen %a und
   %h verwendet. Eine vollsta:ndige Liste der Metazeichen finden Sie in
   hosts_access(5).

   Die Wildcard ALL passt auf jeden Dienst, jede Domain oder jede IP-Adresse.
   Eine andere Wildcard ist PARANOID. Sie passt auf jeden Rechner, dessen
   IP-Adresse mo:glicherweise gefa:lscht ist. Dies ist beispielsweise der
   Fall, wenn der Verbindungsaufbau von einer IP-Adresse erfolgt, die nicht
   zu dem u:bermittelten Rechnernamen passt. In diesem Beispiel werden alle
   Verbindungsanfragen zu Sendmail abgelehnt, wenn die IP-Adresse nicht zum
   Rechnernamen passt:

 # Block possibly spoofed requests to sendmail:
 sendmail : PARANOID : deny

  Achtung:

   Die Wildcard PARANOID wird Verbindungen ablehnen, wenn der Client oder der
   Server eine fehlerhafte DNS-Konfiguration besitzt.

   Weitere Informationen u:ber Wildcards und deren Funktion finden Sie in
   hosts_access(5).

  Anmerkung:

   Wenn Sie neue Eintra:ge zur Konfiguration hinzufu:gen, sollten Sie
   sicherstellen, dass nicht beno:tigte Eintra:ge in hosts.allow
   auskommentiert werden.

13.5. Kerberos

   Beigetragen von Tillman Hodgson.
   Beruht auf einem Beitrag von Mark Murray.

   Kerberos ist ein Netzwerk-Authentifizierungsprotokoll, das urspru:nglich
   am Massachusetts Institute of Technology (MIT) entwickelt wurde. Es bietet
   die Mo:glichkeit zur sicheren Authentifizierung u:ber ein potentiell
   unsicheres Netzwerk. Das Kerberos-Protokoll benutzt eine starke
   Kryptographie, um die Identita:t von Clients und Servern nachweisen zu
   ko:nnen. Dabei werden keine unverschlu:sselten Daten u:ber das Netzewrk
   gesendet. Kerberos kann als eine Art Proxy zur Identita:tspru:fung, oder
   als vertrauenswu:rdiges Authentifizierungssystem betrachtet werden.

   Kerberos hat nur eine Aufgabe: Die sichere Pru:fung der Identita:t eines
   Benutzers (Authentifizierung) u:ber das Netzwerk. Das System u:berpru:ft
   weder die Berechtigungen der Benutzer (Autorisierung), noch verfolgt es
   die durchgefu:hrten Aktionen (Audit). Daher sollte Kerberos zusammen mit
   anderen Sicherheits-Systemen eingesetzt werden, die diese Funktionen
   bereitstellen.

   Die aktuelle Version des Protokolls ist Version 5, die in RFC 4120
   beschrieben ist. Es existieren mehrere freie Implementierungen dieses
   Protokolls fu:r eine Reihe von Betriebssystemen. Das MIT entwickelt auch
   weiterhin seine Kerberos-Version weiter. Es wird in den vereinigten
   Staaten als Kryptographie-Produkt eingesetzt und unterlag in der
   Vergangenheit US-Exportbeschra:nkungen. In FreeBSD ist MIT-Kerberos als
   Port oder Paket security/krb5 verfu:gbar. Die Kerberos-Implementation von
   Heimdal wurde ausserhalb der USA entwickelt und unterliegt daher keinen
   Export-Beschra:nkungen. Heimdal-Kerberos ist im Basissystem von FreeBSD
   enthalten. Mit security/heimdal aus der Ports-Sammlung steht eine weitere
   Distribution, mit mehr konfigurierbaren Optionen zur Verfu:gung.

   Unter Kerberos werden Benutzer und Dienste als "Prinzipale" bezeichnet,
   die innerhalb einer administrativen Doma:ne, dem sogenannten "Realm"
   enthalten sind. Ein typisches Benutzer-Prinzipal ha:tte das Format
   user@REALM (Realms sind traditionell in Grossbuchstaben).

   Die folgenden Anweisungen beschreiben, wie Sie das mit FreeBSD gelieferte
   Heimdal-Kerberos einrichten.

   Die Beschreibung der Kerberos-Installation benutzt folgende Namensra:ume:

     * Die DNS-Domain ("Zone") heisst example.org.

     * Das Kerberos-Realm heisst EXAMPLE.ORG.

  Anmerkung:

   Benutzen Sie echte Domain-Namen, wenn Sie Kerberos einrichten. Damit
   vermeiden Sie DNS-Probleme und stellen die Zusammenarbeit mit anderen
   Kerberos-Realms sicher.

  13.5.1. Das Heimdal KDC einrichten

   Kerberos authentifiziert Benutzer an einer zentralen Stelle: dem Key
   Distribution Center (KDC). Das KDC verteilt Tickets, mit denen ein Dienst
   die Identita:t eines Benutzers feststellen kann. Weil alle Mitglieder
   eines Kerberos-Realms dem KDC vertrauen, gelten fu:r das KDC erho:hte
   Sicherheitsanforderungen. Der direkte Zugriff auf das KDC sollte daher
   eingeschra:nkt sein.

   Obwohl der Kerberos-Server wenig Ressourcen beno:tigt, sollte das KDC
   wegen der Sicherheitsanforderungen auf einem separaten Rechner installiert
   werden.

   Das KDC wird in /etc/rc.conf wie folgt aktiviert:

 kdc_enable="YES"
 kadmind_enable="YES"

   Danach wird /etc/krb5.conf wie folgt bearbeitet:

 [libdefaults]
     default_realm = EXAMPLE.ORG
 [realms]
     EXAMPLE.ORG = {
         kdc = kerberos.example.org
         admin_server = kerberos.example.org
     }
 [domain_realm]
     .example.org = EXAMPLE.ORG

   Diese Einstellungen setzen voraus, dass der voll qualifizierte Name des
   KDCs kerberos.example.org ist. Der Rechnername des KDC muss im DNS
   auflo:sbar sein.

   In grossen Netzwerken mit einem ordentlich konfigurierten DNS-Server kann
   die Datei aus dem obigen Beispiel verku:rzt werden:

 [libdefaults]
       default_realm = EXAMPLE.ORG
 [domain_realm]
     .example.org = EXAMPLE.ORG

   Die Zonendatei von example.org muss dann die folgenden Zeilen enthalten:

 _kerberos._udp      IN  SRV     01 00 88 kerberos.example.org.
 _kerberos._tcp      IN  SRV     01 00 88 kerberos.example.org.
 _kpasswd._udp       IN  SRV     01 00 464 kerberos.example.org.
 _kerberos-adm._tcp  IN  SRV     01 00 749 kerberos.example.org.
 _kerberos           IN  TXT     EXAMPLE.ORG

  Anmerkung:

   Damit die Clients die Kerberos-Dienste benutzen ko:nnen, muss sie entweder
   eine vollsta:ndig konfigurierte /etc/krb5.conf enthalten, oder eine
   minimale Konfiguration und zusa:tzlich ein richtig konfigurierter
   DNS-Server.

   Im na:chsten Schritt wird die Kerberos-Datenbank eingerichtet. Die
   Datenbank entha:lt die Schlu:ssel aller Prinzipale und ist mit einem
   Passwort geschu:tzt. Dieses Passwort brauchen Sie sich nicht merken, da
   ein davon abgeleiteter Schlu:ssel in /var/heimdal/m-key gespeichert wird.
   Es wa:re durchaus sinnvoll, ein 45-stelliges Zufallspasswort fu:r diesen
   Zweck zu benutzten. Um den Schlu:ssel zu erstellen, rufen Sie kstash auf
   und geben Sie ein Passwort ein:

 # kstash
 Master key: xxxxxxxxxxxxxxxxxxxxxxx
 Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxx

   Nachdem der Schlu:ssel erstellt wurde, sollte die Datenbank initialisiert
   werden. Das Kerberos-Werkzeug kadmin(8) kann die Datenbank mit kadmin -l
   direkt bearbeiten, ohne dabei den Netzwerkdienst kadmind(8) zu benutzen.
   An der Eingabeaufforderung von kadmin kann mit init die Datenbank des
   Realms initialisiert werden:

 # kadmin -l
 kadmin> init EXAMPLE.ORG
 Realm max ticket life [unlimited]:

   Zuletzt wird mit add das erste Prinzipal erstellt. Benutzen Sie die
   voreingestellten Optionen. Die Einstellungen ko:nnen spa:ter mit modify
   vera:ndert werden. An der Eingabeaufforderung von kadmin(8) zeigt ? die
   verfu:gbaren Optionen an.

 kadmin> add tillman
 Max ticket life [unlimited]:
 Max renewable life [unlimited]:
 Attributes []:
 Password: xxxxxxxx
 Verifying password - Password: xxxxxxxx

   Jetzt ko:nnen die KDC-Dienste mit service kdc start und service kadmind
   start gestartet werden. Obwohl zu diesem Zeitpunkt noch keine
   kerberisierten Dienste laufen, kann die Funktion des KDCs schon
   u:berpru:ft werden, indem Sie fu:r den eben angelegten Benutzer ein Ticket
   anfordern:

 % kinit tillman
 tillman@EXAMPLE.ORG's Password:

   U:berpru:fen Sie, ob das Ticket erfolgreich ausgestellt wurde:

 % klist
 Credentials cache: FILE: /tmp/krb5cc_1001
         Principal: tillman@EXAMPLE.ORG

   Issued                Expires               Principal
 Aug 27 15:37:58 2013  Aug 28 01:37:58 2013  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG

   Nachdem der Test abgeschlossen ist, kann das tempora:re Ticket
   zuru:ckgezogen werden:

 % kdestroy

  13.5.2. Kerberos-Dienste auf dem Server einrichten

   Bei der Konfiguration eines Servers fu:r die Kerberos-Authentifizierung
   muss zuerst sichergestellt werden, dass /etc/krb5.conf richtig
   konfiguriert ist. Die Datei kann entweder vom KDC kopiert, oder auf dem
   neuen System generiert werden.

   Als na:chstes muss auf dem Server die /etc/krb5.keytab erzeugt werden.
   Dies ist der Hauptbestandteil um Dienste zu "kerberisieren" und entspricht
   der Erzeugung eines geheimen Schlu:ssels zwischen dem Dienst und dem KDC.
   Das Geheimnis ist ein kryptographischer Schlu:ssel, der in einem keytab>
   abgelegt wird. Diese Datei entha:lt den Schlu:ssel des Servers, mit dem
   sich der Server und das KDC gegenseitig authentifizieren ko:nnen. Sie muss
   in einer sicheren Art und Weise an den Server u:bertragen werden, da
   ansonsten die Sicherheit des Servers gefa:hrdet ist, wenn z.B. die
   Schlu:ssel o:ffentlich werden. In der Regel wird die keytab auf einem
   vertrauenswu:rdigen Rechner mit kadmin erzeugt und anschliessend sicher
   auf den Server u:bertragen, beispielsweise mit scp(1). Wenn die
   Sicherheitsrichtlinien es erlauben, kann die Datei auch direkt auf dem
   Server erzeugt werden. Es ist sehr wichtig, dass die keytab auf sichere
   Weise auf den Server u:bertragen wird. Wenn der Schlu:ssel einer anderen
   Partei bekannt wird, kann sich diese Partei den Benutzern als Server
   ausgeben! Da der Eintrag fu:r das Host-Prinzipal fu:r die KDC-Datenbank
   auch mit kadmin erstellt wird, ist es praktisch, kadmin direkt auf dem
   Server zu benutzen.

   Natu:rlich ist auch kadmin ein kerberisierter Dienst: ein Kerberos-Ticket
   ist erforderlich, um sich gegenu:ber dem Netzwerkdienst zu
   authentifizieren und um sicherzustellen, dass der Benutzer, der kadmin
   ausfu:hrt, tatsa:chlich vorhanden ist. kadmin wird nach dem Passwort
   fragen, um ein neues Ticket zu generieren. Das Prinzipal, das sich mit dem
   kadmin-Dienst authentifiziert, muss u:ber die Zugriffskontrollliste
   kadmin.acl dazu berechtigt sein. Weitere Informationen u:ber
   Zugriffskontrolllisten finden Sie in den Heimdal-Info-Seiten (info
   heimdal) im Abschnitt "Remote administration". Wenn der Zugriff auf kadmin
   von entfernten Rechnern verboten ist, kann sich der Administrator entweder
   u:ber die lokale Konsole oder u:ber ssh(1) mit dem KDC verbinden, um die
   lokale Administration mit kadmin -l durchzufu:hren.

   Nach der Installation von /etc/krb5.conf, ko:nnen Sie das Kommando add
   --random-key in kadmin ausfu:hren, um das Host-Prinzipal in die Datenbank
   zu schreiben. Das Kommando ext extrahiert den Schlu:ssel des Prinzipals in
   eine eigene keytab:

 # kadmin
 kadmin> add --random-key host/myserver.example.org
 Max ticket life [unlimited]:
 Max renewable life [unlimited]:
 Principal expiration time [never]:
 Password expiration time [never]:
 Attributes []:
 kadmin> ext_keytab host/myserver.example.org
 kadmin> exit

   Beachten Sie, dass ext_keytab den extrahierten Schlu:ssel standardma:ssig
   in /etc/krb5.keytab speichert. Das ist gut, wenn das Kommando auf dem
   kerberisierten Server ausgefu:hrt wird, ansonsten sollte das Argument
   --keytab pfad/zur/datei benutzt werden, wenn die keytab an einen anderen
   Ort extrahiert wird:

 # kadmin
 kadmin> ext_keytab --keytab=/tmp/example.keytab host/myserver.example.org
 kadmin> exit

   Anschliessend kann die erzeugte keytab sicher mit scp(1) auf Server oder
   auf einen Wechseldatentra:ger kopiert werden. Geben Sie auf jeden Fall
   einen anderen Namen fu:r die keytab an, um unno:tige Schlu:ssel in der
   keytab des Systems zu vermeiden.

   Mit Hilfe der Datei krb5.conf kann der Server nun mit dem KDC
   kommunizieren und seine Identita:t mithilfe der Datei krb5.keytab
   nachweisen. Jetzt ko:nnen die kerberisierten Dienste aktiviert werden.
   Einer der gebra:uchlichsten Dienste ist sshd(8), der Kerberos u:ber
   GSS-API unterstu:tzt. Fu:gen Sie folgende Zeile in /etc/ssh/sshd_config
   ein:

 GSSAPIAuthentication yes

   Nach dieser A:nderung muss sshd(8) mit service sshd restart neu gestartet
   werden, damit die neue Konfiguration wirksam wird.

  13.5.3. Kerberos auf dem Client einrichten

   Genau wie der Server, beno:tigt auch der Client eine Konfiguration in
   /etc/krb5.conf. Kopien Sie die Datei (sicher) vom KDC auf den Client, oder
   schreiben Sie die Datei bei Bedarf einfach neu.

   Testen Sie den Client, indem Sie mit kinit Tickets anfordern, mit klist
   Tickets anzeigen und mit kdestroy Tickets lo:schen. Kerberos-Anwendungen
   sollten auch kerberisierte Server ansprechen ko:nnen. Wenn das nicht
   funktioniert, Sie aber Tickets anfordern ko:nnen, hat wahrscheinlich der
   kerberisierte Server ein Problem und nicht der Client oder das KDC. Im
   Falle eines kerberisierten ssh(1) ist GSS-API in der Voreinstellung
   deaktiviert. Testen Sie daher mit ssh -o GSSAPIAuthentication=yes
   hostname.

   Wenn Sie die kerberisierten Anwendungen testen, ko:nnen Sie einen
   Paket-Sniffer wie tcpdump benutzen, um sicherzustellen, dass keine
   sensiblen Informationen im Klartext u:bertragen werden.

   Es stehen verschiedene Kerberos-Anwendungen zur Verfu:gung. Die
   Anwendungen, die SASL benutzen, ko:nnen dann auch GSS-API benutzen. Viele
   Arten von Anwendungen ko:nnen Kerberos zur Authentifizierung verwenden,
   vom Jabber-Client bis zum IMAP-Client.

   Normalerweise wird ein Kerberos-Prinzipal auf ein lokales Benutzerkonto
   abgebildet. Manchmal wird aber Zugriff auf ein lokales Benutzerkonto
   beno:tigt, zu dem es keinen passenden Kerberos-Prinzipal gibt. Der
   Prinzipal tillman@EXAMPLE.ORG bra:uchte beispielsweise Zugriff auf das
   Konto webdevelopers. Ebenso ko:nnten andere Prinzipale auf dieses Konto
   zugreifen wollen.

   Die Dateien .k5login und .k5users im Heimatverzeichnis eines Benutzers
   ko:nnen verwendet werden, um dieses Problem zu lo:sen. Mit der folgenden
   .k5login im Heimatverzeichnis des Benutzers webdevelopers haben beide
   Prinzipale auch ohne das gemeinsame Passwort Zugriff auf das Konto:

 tillmann@example.org
 jdoe@example.org

   Weitere Informationen zu .k5users finden Sie in ksu(1).

  13.5.4. Unterschiede zur MIT-Implementation

   Der Hauptunterschied zwischen der MIT- und der Heimdal-Implementation ist
   das Kommando kadmin. Die Befehlssa:tze des Kommandos (obwohl funktional
   gleichwertig) und das verwendete Protokoll unterscheiden sich in beiden
   Varianten. Das KDC la:sst sich nur mit dem kadmin Kommando der passenden
   Kerberos-Variante verwalten.

   Fu:r dieselbe Funktion ko:nnen auch die Client-Anwendungen leicht
   gea:nderte Kommandozeilenoptionen besitzen. Folgen Sie der Anleitung auf
   http://web.mit.edu/Kerberos/www/. Achten Sie besonders auf den Suchpfad
   fu:r Anwendungen. Der MIT-Port wird unter FreeBSD standardma:ssig in
   /usr/local/ installiert. Wenn die Umgebungsvariable PATH zuerst die
   Systemverzeichnisse entha:lt, werden die Systemprogramme anstelle der
   MIT-Programme ausgefu:hrt.

   Wenn Sie MIT-Kerberos verwenden, sollten Sie ausserdem folgende
   A:nderungen an /etc/rc.conf vornehmen:

 kerberos5_server="/usr/local/sbin/krb5kdc"
 kadmind5_server="/usr/local/sbin/kadmind"
 kerberos5_server_flags=""
 kerberos5_server_enable="YES"
 kadmind5_server_enable="YES"

  13.5.5. Tipps und Fehlersuche

   Wa:hrend der Konfiguration und bei der Fehlersuche sollten die folgenden
   Punkte beachtet werden:

     * Wenn Sie Heimdal- oder MIT-Kerberos benutzen, muss in der
       Umgebungsvariable PATH der Pfad zu den Kerberos-Programmen vor dem
       Pfad zu den Programmen des Systems stehen.

     * Wenn die Clients im Realm ihre Uhrzeit nicht synchronisieren, schla:gt
       vielleicht die Authentifizierung fehl. Abschnitt 28.11, "Die Uhrzeit
       mit NTP synchronisieren" beschreibt, wie Sie mithilfe von NTP die
       Uhrzeiten synchronisieren.

     * Wenn Sie den Namen eines Rechners a:ndern, mu:ssen Sie auch den
       host/-Prinzipal a:ndern und die keytab aktualisieren. Dies betrifft
       auch spezielle Eintra:ge wie den HTTP/-Prinzipal fu:r Apaches
       www/mod_auth_kerb.

     * Alle Rechner in einem Realm mu:ssen vor- und ru:ckwa:rts aufgelo:st
       werden ko:nnen. Entweder u:ber DNS, zumindest aber u:ber /etc/hosts.
       CNAME-Eintra:ge im DNS funktionieren, aber die entsprechenden A- und
       PTR-Eintra:ge mu:ssen vorhanden und richtig sein. Wenn sich Namen
       nicht auflo:sen lassen, ist die Fehlermeldung nicht gerade
       selbstsprechend: Kerberos5 refuses authentication because Read req
       failed: Key table entry not found.

     * Einige Betriebssysteme installieren ksu mit falschen Zugriffsrechten;
       es fehlt das Set-UID-Bit fu:r root. Das hat zur Folge, dass ksu nicht
       funktioniert. Dies ist ein Fehler in den Zugriffsrechten und kein
       Fehler des KDCs.

     * Wenn Sie fu:r einen Prinzipal unter MIT-Kerberos Tickets mit einer
       la:ngeren Gu:ltigkeit als der vorgegebenen zehn Stunden einrichten
       wollen, mu:ssen Sie zwei Sachen a:ndern. Benutzen Sie modify_principal
       am Prompt von kadmin(8), um die maximale Gu:ltigkeitsdauer fu:r den
       Prinzipal selbst und den Prinzipal krbtgt zu erho:hen. Das Prinzipal
       kann dann mit kinit -l ein Ticket mit einer la:ngeren Gu:ltigkeit
       beantragen.

     * Mit einem Packet-Sniffer ko:nnen Sie feststellen, dass Sie sofort nach
       dem Aufruf von kinit eine Antwort vom KDC bekommen - noch bevor Sie
       u:berhaupt ein Passwort eingegeben haben! Das ist in Ordnung: Das KDC
       ha:ndigt ein Ticket-Granting-Ticket (TGT) auf Anfrage aus, da es durch
       einen vom Passwort des Benutzers abgeleiteten Schlu:ssel geschu:tzt
       ist. Wenn das Passwort eingegeben wird, wird es nicht zum KDC
       gesendet, sondern zum Entschlu:sseln der Antwort des KDCs benutzt, die
       kinit schon erhalten hat. Wird die Antwort erfolgreich entschlu:sselt,
       erha:lt der Benutzer einen Sitzungs-Schlu:ssel fu:r die ku:nftige
       verschlu:sselte Kommunikation mit dem KDC und das TGT. Das TGT
       wiederum ist mit dem Schlu:ssel des KDCs verschlu:sselt. Diese
       Verschlu:sselung ist fu:r den Benutzer vo:llig transparent und erlaubt
       dem KDC, die Echtheit jedes einzelnen TGT zu pru:fen.

     * Host-Prinzipale ko:nnen Tickets mit la:ngerer Gu:ltigkeit besitzen.
       Wenn der Prinzipal eines Benutzers u:ber ein Ticket verfu:gt, das eine
       Woche gu:ltig ist, das Ticket des Host-Prinzipals aber nur neun
       Stunden gu:ltig ist, funktioniert der Ticket-Cache nicht wie erwartet.
       Im Cache befindet sich dann ein abgelaufenes Ticket des
       Host-Prinzipals.

     * Wenn Sie mit krb5.dict die Verwendung schlechter Passwo:rter
       verhindern wollen, wie in kadmin(8) beschrieben, geht das nur mit
       Prinzipalen, denen eine Passwort-Policy zugewiesen wurde. Das Format
       von krb5.dict entha:lt pro Zeile ein Wort. Sie ko:nnen daher einen
       symbolischen Link auf /usr/share/dict/words erstellen.

  13.5.6. Beschra:nkungen von Kerberos

   Kerberos muss ganzheitlich verwendet werden. Jeder u:ber das Netzwerk
   angebotene Dienst muss mit Kerberos zusammenarbeiten oder auf anderen
   Wegen gegen Angriffe aus dem Netzwerk geschu:tzt sein. Andernfalls ko:nnen
   Berechtigungen gestohlen und wiederverwendet werden. Es ist beispielsweise
   nicht sinnvoll, fu:r Remote-Shells Kerberos zu benutzen, dagegen aber
   POP3-Zugriff auf einem Mail-Server zu erlauben, da POP3 Passwo:rter im
   Klartext versendet.

   Das KDC ist verwundbar und muss daher genauso abgesichert werden, wie die
   auf ihm befindliche Passwort-Datenbank. Auf dem KDC sollten absolut keine
   anderen Dienste laufen und der Rechner sollte physikalisch gesichert sein.
   Die Gefahr ist gross, da Kerberos alle Passwo:rter mit einem Schlu:ssel,
   dem Haupt-Schlu:ssel, verschlu:sselt. Der Haupt-Schlu:ssel wiederum wird
   in einer Datei auf dem KDC gespeichert.

   Ein kompromittierter Haupt-Schlu:ssel ist nicht ganz so schlimm wie
   allgemein angenommen. Der Haupt-Schlu:ssel wird nur zum Verschlu:sseln der
   Passwort-Datenbank und zum Initialisieren des Zufallsgenerators verwendet.
   Solange der Zugriff auf das KDC abgesichert ist, kann ein Angreifer wenig
   mit dem Haupt-Schlu:ssel anfangen.

   Wenn das KDC nicht zur Verfu:gung steht, sind auch die Netzwerkdienste
   nicht benutzbar, da eine Authentifizierung nicht durchgefu:hrt werden
   kann. Das KDC ist also ein optimales Ziel fu:r einen Denial-of-Service
   Angriff. Sie ko:nnen diesem Angriff entgegenwirken, indem Sie einen
   KDC-Master und einen oder mehrere Slaves verwenden. Der Ru:ckfall auf ein
   sekunda:res KDC mittels PAM-Authentifizierung muss sorgfa:ltig
   eingerichtet werden.

   Mit Kerberos ko:nnen sich Benutzer, Rechner und Dienste gegenseitig
   authentifizieren. Allerdings existiert kein Mechanismus, der das KDC
   gegenu:ber Benutzern, Rechnern oder Diensten authentifiziert. Ein
   vera:ndertes kinit ko:nnte beispielsweise alle Benutzernamen und
   Passwo:rter abfangen. Die von vera:nderten Programmen ausgehende Gefahr
   ko:nnen Sie lindern, indem Sie die Integrita:t von Dateien mit Werkzeugen
   wie security/tripwire pru:fen.

  13.5.7. Weiterfu:hrende Dokumentation

     * The Kerberos FAQ

     * Designing an Authentication System: a Dialogue in Four Scenes

     * RFC 4120, The Kerberos Network Authentication Service (V5)

     * MIT Kerberos-Seite

     * Heimdal Kerberos-Seite

13.6. OpenSSL

   Beigetragen von Tom Rhodes.

   OpenSSL ist eine Open Source Implementierung der SSL und TLS-Protokolle.
   Es bietet eine verschlu:sselte Transportschicht oberhalb der normalen
   Kommunikationsschicht und kann daher zusammen mit vielen Netzdiensten
   benutzt werden.

   Das in FreeBSD integrierte OpenSSL stellt die Protokolle Secure Sockets
   Layer v2/v3 (SSLv2/SSLv3) und Transport Layer Security v1 (TLSv1) zur
   Verfu:gung. Die OpenSSL-Bibliotheken stellen kryptographische Funktionen
   bereit.

   Anwendungsbeispiele fu:r OpenSSL sind die verschlu:sselte
   Authentifizierung von E-Mail-Clients oder Web-Transaktionen wie das
   Bezahlen mit Kreditkarte. Einige Ports, wie www/apache24 und
   databases/portgresql91-server, haben eine Option fu:r den Bau mit OpenSSL.

   FreeBSD verfu:gt u:ber zwei OpenSSL Versionen: eine im Basissystem, die
   andere aus der Ports-Sammlung. Der Benutzer kann mit Hilfe der folgenden
   Optionen wa:hlen, welche Version in der Voreinstellung fu:r andere Ports
   verwendet wird:

     * WITH_OPENSSL_PORT: wenn diese Option gesetzt ist, wird der Port
       OpenSSL aus dem Port security/openssl verwenden, auch dann, wenn die
       Version im Basisystem aktueller ist.

     * WITH_OPENSSL_BASE: wenn diese Option gesetzt ist, wird der Port mit
       OpenSSL aus dem Basissystem u:bersetzt.

   OpenSSL wird auch eingesetzt, um Zertifikate fu:r Anwendungen
   bereitzustellen. Die Zertifikate stellen die Identita:t einer Firma oder
   eines Einzelnen sicher. Wenn ein Zertifikat nicht von einer
   Zertifizierungsstelle (Certificate Authority, CA) gegengezeichnet wurde,
   erhalten Sie normalerweise eine Warnung. Eine Zertifizierungsstelle ist
   eine Firma wie VeriSign, die Zertifikate von Personen oder Firmen
   gegenzeichnet und damit die Korrektheit der Zertifikate besta:tigt. Diese
   Prozedur kostet Geld, ist aber keine Voraussetzung fu:r den Einsatz von
   Zertifikaten, beruhigt aber sicherheitsbewusste Benutzer.

   Dieser Abschnitt beschreibt, wie Sie auf einem FreeBSD-System Zertifikate
   erstellen und benutzen. Abschnitt 28.5.2, "Konfiguration eines
   LDAP-Servers" beschreibt, wie Sie eine CA erstellen um die eigenen
   Zertifikate zu signieren.

   Weitere Informationen u:ber SSL finden Sie im kostenlosen OpenSSL
   Cookbook.

  13.6.1. Zertifikate erzeugen

   Um ein Zertifikat zu erzeugen, das von einer externen CA signiert werden
   soll, geben Sie folgenden Befehl und die angeforderten Informationen ein.
   Diese Informationen werden in das Zertifikat geschrieben. Fu:r Common Name
   geben Sie den vollqualifizierten Namen des Systems ein, auf dem das
   Zertifikat spa:ter installiert wird. Wenn der Name nicht u:bereinstimmt,
   wird die Anwendung, die das Zertifikat u:berpru:ft, dem Benuzter eine
   Warnung anzeigen. Die U:berpru:fung wu:rde fehlschlagen und das Zertifikat
   damit unbrauchbar machen.

 # openssl req -new -nodes -out req.pem -keyout cert.key -sha256 -newkey rsa:2048
 Generating a 2048 bit RSA private key
 ..................+++
 .............................................................+++
 writing new private key to 'cert.key'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [AU]:US
 State or Province Name (full name) [Some-State]:PA
 Locality Name (eg, city) []:Pittsburgh
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
 Organizational Unit Name (eg, section) []:Systems Administrator
 Common Name (eg, YOUR name) []:localhost.example.org
 Email Address []:trhodes@FreeBSD.org

 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:Another Name

   Bei der Erzeugung des Zertifikates ko:nnen noch weitere Optionen, wie die
   Gu:ltigkeitsdauer und alternative Verschlu:sselungsalgorithmen, angegeben
   werden. openssl(1) beschreibt die zur Verfu:gung stehenden Optionen.

   Das folgende Kommando erstellt zwei Dateien im aktuellen Verzeichnis: Die
   Anforderung fu:r ein neues Zertifikat wird in req.pem gespeichert. Diese
   Datei ko:nnen Sie an eine CA senden, wo die Angaben gepru:ft werden. Nach
   erfolgreicher Pru:fung wird das Zertifikat signiert und an Sie
   zuru:ckgesandt. cert.key, entha:lt den privaten Schlu:ssel fu:r das
   Zertifikat und darf auch keine Fall in fremde Ha:nde geraten, da ein
   Angreifer sonst in der Lage ist, anderen Personen oder Rechnern
   vorzugaukeln, dass es sich bei ihm um Sie handelt.

   Wenn Sie keine Signatur einer Zertifizierungsstelle beno:tigen, ko:nnen
   Sie ein selbst signiertes Zertifikat erstellen. Erzeugen Sie dazu zuerst
   einen RSA-Schlu:ssel:

 # openssl genrsa -rand -genkey -out cert.key 2048
 0 semi-random bytes loaded
 Generating RSA private key, 2048 bit long modulus
 .............................................+++
 .................................................................................................................+++
 e is 65537 (0x10001)

   Benutzen Sie diesen Schlu:ssel, um ein selbst signiertes Zertifikat zu
   erzeugen. Folgen Sie wieder den Anweisungen am Prompt:

 # openssl req -new -x509 -days 365 -key cert.key -out cert.crt -sha256
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [AU]:US
 State or Province Name (full name) [Some-State]:PA
 Locality Name (eg, city) []:Pittsburgh
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
 Organizational Unit Name (eg, section) []:Systems Administrator
 Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org
 Email Address []:trhodes@FreeBSD.org

   Dieses Kommando erstellt zwei neue Dateien im aktuellen Verzeichnis: Der
   Schlu:ssel der Zertifizierungsstelle cert.key und das Zertifikat selbst,
   cert.crt. Sie sollten in einem Verzeichnis, vorzugsweise unterhalb von
   /etc/ssl/ abgelegt werden, das nur von root lesbar ist. Die Zugriffsrechte
   der Dateien ko:nnen mit chmod auf 0700 gesetzt werden.

  13.6.2. Zertifikate benutzen

   Mit einem Zertifikat ko:nnen beispielsweise die Verbindungen zu Sendmail
   verschlu:sselt werden, um eine Klartext-Authentifizierung zu verhindern.

  Anmerkung:

   Einige E-Mail-Programme geben Warnungen aus, wenn ein Zertifikat nicht
   lokal installiert ist. Weitere Informationen zur Installation von
   Zertifikaten finden Sie in der Dokumentation der entsprechenden Software.

   Unter FreeBSD 10.0-RELEASE und neueren Versionen ist es mo:glich, ein
   selbst signiertes Zertifikat fu:r Sendmail automatisch erzeugen zu lassen.
   Um diese Funktionalita:t zu aktivieren, fu:gen Sie die folgenden Zeilen in
   /etc/rc.conf ein:

 sendmail_enable="YES"
 sendmail_cert_enable="YES"
 sendmail_cert_cn="localhost.example.org"

   Dadurch wird automatisch ein selbst signiertes Zertifikat
   (/etc/mail/certs/host.cert), der Schlu:ssel fu:r die CA
   (/etc/mail/certs/host.key und das Zertifikat der CA
   (/etc/mail/certs/cacert.pem erzeugt. Das Zertifikat wird den in
   sendmail_cert_cn festgelegten Common Name verwenden. Nachdem Sie die
   A:nderungen gespeichert haben, starten Sie Sendmail neu:

 # service sendmail restart

   Wenn alles gut ging, erscheinen keine Fehlermeldungen in /var/log/maillog.
   Fu:r einen einfachen Test, bauen Sie mit Hilfe von telnet eine Verbindung
   zum Mailserver auf:

 # telnet example.com 25
 Trying 192.0.34.166...
 Connected to example.com.
 Escape character is '^]'.
 220 example.com ESMTP Sendmail 8.14.7/8.14.7; Fri, 18 Apr 2014 11:50:32 -0400 (EDT)
 ehlo example.com
 250-example.com Hello example.com [192.0.34.166], pleased to meet you
 250-ENHANCEDSTATUSCODES
 250-PIPELINING
 250-8BITMIME
 250-SIZE
 250-DSN
 250-ETRN
 250-AUTH LOGIN PLAIN
 250-STARTTLS
 250-DELIVERBY
 250 HELP
 quit
 221 2.0.0 example.com closing connection
 Connection closed by foreign host.

   Wenn die Zeile STARTTLS erscheint, hat alles funktioniert.

13.7. VPN mit IPsec

   Geschrieben von Nik Clayton.
   Geschrieben von Hiten M. Pandya.

   Internet Protocol Security (IPsec) ist ein Satz von Protokollen, die auf
   dem Internet-Protokoll (IP) aufbauen. Durch Authentifizierung und
   Verschlu:sselung jedes einzelnen IP-Pakets, ko:nnen mehrere Systeme
   geschu:tzt miteinander kommunizieren. FreeBSDs IPSsec Netzwerk-Stack
   basiert auf der http://www.kame.net Implementierung und unterstu:tzt
   sowohl IPv4 als auch IPv6.

   IPsec besteht aus den folgenden Protokollen:

     * Encapsulated Security Payload (ESP): dieses Protokoll verschlu:sselt
       IP-Pakete mit einem symmetrischen Verfahren wie Blowfish oder 3DES.
       Damit werden die Pakete vor Manipulationen Dritter geschu:tzt.

     * Authentication Header (AH): dieses Protokoll entha:lt eine
       kryptographische Pru:fsumme, die sicher stellt, dass ein IP-Paket
       nicht vera:ndert wurde. Der Authentication-Header folgt nach dem
       normalen IP-Header und erlaubt dem Empfa:nger eines IP-Paketes, dessen
       Integrita:t zu pru:fen.

     * IP Payload Compression Protocol (IPComp): dieses Protokoll versucht
       durch Komprimierung der IP-Nutzdaten die Menge der gesendeten Daten zu
       reduzieren und somit die Kommunikationsleistung zu verbessern.

   Diese Protokolle ko:nnen, je nach Situation, zusammen oder einzeln
   verwendet werden.

   IPsec unterstu:tzt zwei Modi: Der Transport-Modus verschlu:sselt die Daten
   zwischen zwei Systemen. Der Tunnel-Modus verbindet zwei Subnetze
   miteinander. Durch einen Tunnel ko:nnen dann verschlu:sselte Daten
   u:bertragen werden. Ein Tunnel wird auch als Virtual-Private-Network (VPN)
   bezeichnet. Detaillierte Informationen u:ber das IPsec-Subsystem von
   FreeBSD finden Sie in ipsec(4).

   Seit FreeBSD 11 ist IPsec in der Voreinstellung aktiviert. Um die
   Unterstu:tzung fu:r IPsec in a:lteren Versionen zu aktivieren, fu:gen Sie
   folgenden Optionen in die Kernelkonfigurationsdatei ein und erstellen Sie
   einen neuen Kernel, wie in Kapitel 8, Konfiguration des FreeBSD-Kernels
   beschrieben.

 options   IPSEC        #IP security
 device    crypto

   Wenn Sie zur Fehlersuche im IPsec-Subsystem Unterstu:tzung wu:nschen,
   sollten Sie die folgende Option ebenfalls aktivieren:

 options   IPSEC_DEBUG  #debug for IP security

   Der Rest dieses Kapitels beschreibt die Einrichtung eines IPsec-VPN
   zwischen einem Heimnetzwerk und einem Firmennetzwerk. Fu:r das folgende
   Beispiel gilt:

     * Beide Netzwerke sind u:ber ein FreeBSD-Gateway mit dem Internet
       verbunden.

     * Der Gateway jedes Netzwerks besitzt mindestens eine externe
       IP-Adresse. In diesem Beispiel ist die externe IP-Adresse des
       Firmennetzwerks (LAN) 172.16.5.4 und das Heimnetzwerk (LAN) hat die
       externe IP-Adresse 192.168.1.12.

     * Die intern verwendeten IP-Adressen ko:nnen private oder o:ffentliche
       Adressen sein. Sie du:rfen sich jedoch nicht u:berschneiden. Zum
       Beispiel sollten nicht beide Netze 192.168.1.x benutzen. In diesem
       Beispiel ist die interne IP-Adresse des Firmennetzwerks (LAN)
       10.246.38.1 und das Heimnetzwerk (LAN) hat die interne IP-Adresse
       10.0.0.5.

  13.7.1. Konfiguration eines VPN unter FreeBSD

   Geschrieben von Tom Rhodes.

   Als erstes muss security/ipsec-tools aus der Ports-Sammlung installiert
   werden. Diese Software entha:lt einige Anwendungen, die bei der
   Konfiguration von IPsec hilfreich sind.

   Als na:chstes mu:ssen zwei gif(4)-Pseudogera:te angelegt werden, um die
   Pakete zu tunneln und dafu:r zu sorgen, dass beide Netzwerke richtig
   miteinander kommunizieren ko:nnen. Geben Sie als root die folgenden
   Befehle ein, wobei Sie intern und extern durch die realen internen und
   externen IP-Adressen der Gateways ersetzen mu:ssen:

 # ifconfig gif0 create
 # ifconfig gif0 intern1 intern2
 # ifconfig gif0 tunnel extern1 extern2

   U:berpru:fen Sie mit ifconfig die Konfiguration auf beiden Gateways. Hier
   folgt die Ausgabe von Gateway 1:

 gif0: flags=8051 mtu 1280
 tunnel inet 172.16.5.4 --> 192.168.1.12
 inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
 inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00

   Hier folgt die Ausgabe von Gateway 2:

 gif0: flags=8051 mtu 1280
 tunnel inet 192.168.1.12 --> 172.16.5.4
 inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
 inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4

   Wenn Sie fertig sind, sollten beide internen Adressen u:ber ping(8)
   erreichbar sein:

 priv-net# ping 10.0.0.5
 PING 10.0.0.5 (10.0.0.5): 56 data bytes
 64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
 64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
 64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
 64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
 --- 10.0.0.5 ping statistics ---
 4 packets transmitted, 4 packets received, 0% packet loss
 round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms

 corp-net# ping 10.246.38.1
 PING 10.246.38.1 (10.246.38.1): 56 data bytes
 64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
 64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
 64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
 64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
 64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
 --- 10.246.38.1 ping statistics ---
 5 packets transmitted, 5 packets received, 0% packet loss
 round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms

   Wie erwartet, ko:nnen nun beiden Seiten ICMP-Pakete von ihren privaten
   Adressen senden und empfangen. Als na:chstes mu:ssen beide Gateways so
   konfiguriert werden, dass sie die Pakete des anderen Netzwerkes richtig
   routen. Dazu werden folgende Befehle verwendet:

 corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0
 corp-net# route add net 10.0.0.0: gateway 10.0.0.5
 priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0
 priv-net# route add host 10.246.38.0: gateway 10.246.38.1

   Ab jetzt sollten die Rechner von den Gateways sowie von den Rechnern
   hinter den Gateways erreichbar sein. Dies ko:nnen Sie wieder mit ping(8)
   u:berpru:fen:

 corp-net# ping 10.0.0.8
 PING 10.0.0.8 (10.0.0.8): 56 data bytes
 64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
 64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
 64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
 64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms
 64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms
 --- 10.0.0.8 ping statistics ---
 5 packets transmitted, 5 packets received, 0% packet loss
 round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms

 priv-net# ping 10.246.38.107
 PING 10.246.38.1 (10.246.38.107): 56 data bytes
 64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
 64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
 64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
 64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms
 64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms
 --- 10.246.38.107 ping statistics ---
 5 packets transmitted, 5 packets received, 0% packet loss
 round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms

   Das Konfigurieren der Tunnel ist der einfache Teil. Die Konfiguration
   einer sicheren Verbindung geht viel mehr in die Tiefe. Die folgende
   Konfiguration benutzt pre-shared (PSK) RSA-Schlu:ssel. Abgesehen von den
   IP-Adressen, sind beide /usr/local/etc/racoon/racoon.conf identisch und
   sehen a:hnlich aus:

 path    pre_shared_key  "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
 log     debug;  #log verbosity setting: set to 'notify' when testing and debugging is complete

 padding # options are not to be changed
 {
         maximum_length  20;
         randomize       off;
         strict_check    off;
         exclusive_tail  off;
 }

 timer   # timing options. change as needed
 {
         counter         5;
         interval        20 sec;
         persend         1;
 #       natt_keepalive  15 sec;
         phase1          30 sec;
         phase2          15 sec;
 }

 listen  # address [port] that racoon will listen on
 {
         isakmp          172.16.5.4 [500];
         isakmp_natt     172.16.5.4 [4500];
 }

 remote  192.168.1.12 [500]
 {
         exchange_mode   main,aggressive;
         doi             ipsec_doi;
         situation       identity_only;
         my_identifier   address 172.16.5.4;
         peers_identifier        address 192.168.1.12;
         lifetime        time 8 hour;
         passive         off;
         proposal_check  obey;
 #       nat_traversal   off;
         generate_policy off;

                         proposal {
                                 encryption_algorithm    blowfish;
                                 hash_algorithm          md5;
                                 authentication_method   pre_shared_key;
                                 lifetime time           30 sec;
                                 dh_group                1;
                         }
 }

 sainfo  (address 10.246.38.0/24 any address 10.0.0.0/24 any)    # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
 {                                                               # $network must be the two internal networks you are joining.
         pfs_group       1;
         lifetime        time    36000 sec;
         encryption_algorithm    blowfish,3des;
         authentication_algorithm        hmac_md5,hmac_sha1;
         compression_algorithm   deflate;
 }

   Eine Beschreibung der verfu:gbaren Optionen finden Sie in der Manualpage
   von racoon.conf.

   Die Security Policy Database (SPD) muss noch konfiguriert werden, so dass
   FreeBSD und racoon in der Lage sind den Netzwerkverkehr zwischen den Hosts
   zu ver- und entschlu:sseln.

   Dies wird durch ein Shellskript a:hnlich wie das folgende, das auf dem
   Firmennetzwerk-Gateway liegt, ausgefu:hrt. Diese Datei wird wa:hrend der
   Systeminitialisierung ausgefu:hrt und sollte unter
   /usr/local/etc/racoon/setkey.conf gespeichert werden.

 flush;
 spdflush;

 # To the home network
 spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
 spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;

   Nachdem die Datei gespeichert wurde, kann racoon durch das folgende
   Kommando auf beiden Gateways gestartet werden:

 # /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log

   Die Ausgabe sollte so a:hnlich aussehen:

 corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
 Foreground mode.
 2006-01-30 01:35:47: INFO: begin Identity Protection mode.
 2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
 2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
 2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
 2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
 2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
 2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
 2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
 2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
 2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)

   Um sicherzustellen, dass der Tunnel richtig funktioniert, wechseln Sie auf
   eine andere Konsole und benutzen Sie tcpdump(1) mit dem folgenden Befehl,
   um sich den Netzwerkverkehr anzusehen. Tauschen Sie em0 durch die richtige
   Netzwerkkarte aus:

 # tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12

   Die Ausgabe der Konsole sollte dem hier a:hneln. Wenn nicht, gibt es ein
   Problem und ein Debuggen der ausgegebenen Daten ist notwendig.

 01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
 01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
 01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)

   An diesem Punkt sollten beide Netzwerke verfu:gbar sein und den Anschein
   haben, dass sie zum selben Netzwerk geho:ren. Meistens sind beide
   Netzwerke durch eine Firewall geschu:tzt. Um den Netzwerkverkehr zwischen
   den beiden Netzwerken zu erlauben, ist es notwendig Regeln zu erstellen.
   Fu:r die ipfw(8) Firewall fu:gen Sie folgende Zeilen in die
   Firewall-Konfigurationsdatei ein:

 ipfw add 00201 allow log esp from any to any
 ipfw add 00202 allow log ah from any to any
 ipfw add 00203 allow log ipencap from any to any
 ipfw add 00204 allow log udp from any 500 to any

  Anmerkung:

   Die Regelnummern mu:ssen eventuell, je nach Hostkonfiguration, angepasst
   werden.

   Fu:r Benutzer der pf(4)- oder ipf(8)-Firewall sollte folgendes
   funktionieren:

 pass in quick proto esp from any to any
 pass in quick proto ah from any to any
 pass in quick proto ipencap from any to any
 pass in quick proto udp from any port = 500 to any port = 500
 pass in quick on gif0 from any to any
 pass out quick proto esp from any to any
 pass out quick proto ah from any to any
 pass out quick proto ipencap from any to any
 pass out quick proto udp from any port = 500 to any port = 500
 pass out quick on gif0 from any to any

   Zum Ende, um dem Computer den Start vom VPN wa:hrend der
   Systeminitialisierung zu erlauben, fu:gen Sie folgende Zeilen in ihre
   /etc/rc.conf: ein

 ipsec_enable="YES"
 ipsec_program="/usr/local/sbin/setkey"
 ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
 racoon_enable="yes"

13.8. OpenSSH

   Beigetragen von Chern Lee.

   OpenSSH stellt Werkzeuge bereit, um sicher auf entfernte Maschinen
   zuzugreifen. Zusa:tzlich ko:nnen TCP/IP-Verbindungen sicher durch SSH
   getunnelt oder weitergeleitet werden. OpenSSH verschlu:sselt alle
   Verbindungen. Dadurch wird beispielsweise verhindert, dass die Verbindung
   abgeho:rt oder u:bernommen (Hijacking) werden kann. Weitere Informationen
   zu OpenSSH finden Sie auf http://www.openssh.com/.

   Dieser Abschnitt entha:lt einen U:berblick u:ber die integrierten
   Client-Werkzeuge, mit denen Sie sicher auf entfernte Systeme zugreifen
   ko:nnen, oder mit denen Sie sicher Dateien austauschen ko:nnen. Der
   Abschnitt beschreibt auch die Konfiguration eines SSH-Servers auf einem
   FreeBSD-System. Weitere Informationen finden Sie in den hier erwa:hnten
   Manualpages.

  13.8.1. Die SSH Client-Werkzeuge benutzen

   Benutzen Sie ssh zusammen mit einem Benutzernamen und einer IP-Adresse
   oder dem Hostnamen, um sich an einem SSH-Server anzumelden. Ist dies das
   erste Mal, dass eine Verbindung mit dem angegebenen Server hergestellt
   wird, wird der Benutzer aufgefordert, zuerst den Fingerabdruck des Servers
   zu pru:fen:

 # ssh user@example.com
 The authenticity of host 'example.com (10.0.0.1)' can't be established.
 ECDSA key fingerprint is 25:cc:73:b5:b3:96:75:3d:56:19:49:d2:5c:1f:91:3b.
 Are you sure you want to continue connecting (yes/no)? yes
 Permanently added 'example.com' (ECDSA) to the list of known hosts.
 Password for user@example.com: user_password

   SSH speichert einen Fingerabdruck des Serverschlu:ssels um die Echtheit
   des Servers zu u:berpru:fen, wenn der Client eine Verbindung herstellt.
   Wenn der Benutzer den Fingerabdruck mit yes besta:tigt, wird eine Kopie
   des Schlu:ssels in .ssh/known_hosts im Heimatverzeichnis des Benutzers
   gespeichert. Zuku:nftige Verbindungen zu dem Server werden gegen den
   gespeicherten Fingerabdruck des Schlu:ssels gepru:ft und der Client gibt
   eine Warnung aus, wenn sich der empfangene Fingerabdruck von dem
   gespeicherten unterscheidet. Wenn dies passiert, sollte zuna:chst gepru:ft
   werden, ob sich der Schlu:ssel gea:ndert hat, bevor die Verbindung
   hergestellt wird.

   In der Voreinstellung akzeptieren aktuelle Versionen von OpenSSH nur SSHv2
   Verbindungen. Wenn mo:glich, wird der Client versuchen Version 2 zu
   verwenden, ist dies nicht mo:glich, fa:llt er auf Version 1 zuru:ck. Der
   Client kann gezwungen werden, nur eine der beiden Versionen zu verwenden,
   indem die Option -1 oder -2 u:bergeben wird. Weitere Optionen sind in
   ssh(1) beschrieben.

   Mit scp(1) lassen sich Dateien in einer sicheren Weise auf entfernte
   Maschinen u:bertragen. Dieses Beispiel kopiert die Datei COPYRIGHT von
   einem entfernten System in eine Datei mit dem gleichen Namen auf das
   lokale System:

 #  scp user@example.com:/COPYRIGHT COPYRIGHT
 Password for user@example.com: *******
 COPYRIGHT            100% |*****************************|  4735
 00:00
 #

   Da der Fingerabdruck fu:r diesen Rechner bereits besta:tigt wurde, wird er
   automatisch u:berpru:ft, bevor der Benutzer zur Eingabe des Passworts
   aufgefordert wird.

   Die Argumente, die scp u:bergeben werden, gleichen denen von cp in der
   Beziehung, dass die ersten Argumente die zu kopierenden Dateien sind und
   das letzte Argument den Bestimmungsort angibt. Da die Dateien u:ber das
   Netzwerk kopiert werden, ko:nnen ein oder mehrere Argumente die Form
   user@host:<path_to_remote_file> besitzen. Beachten Sie, das scp die Option
   -r verwendet um Dateien rekursiv zu kopieren, wa:hrend cp -R benutzt.

   Mit sftp ko:nnen Dateien u:ber eine interaktive Sitzung kopiert werden.
   sftp(1) beschreibt die verfu:gbaren Befehle, die wa:hrend einer
   sftp-Sitzung zur Verfu:gung stehen.

    13.8.1.1. Schlu:sselbasierte Authentifizierung

   Ein Client kann bei der Verbindung auch Schlu:ssel anstelle von
   Passwo:rtern verwenden. Benutzen Sie ssh-keygen um RSA-Schlu:ssel
   erzeugen. Geben Sie das entsprechende Protokoll an, wenn Sie einen
   o:ffentlichen und einen privaten Schlu:ssel erzeugen. Folgen Sie
   anschliessend den Anweisungen des Programms. Es wird empfohlen, die
   Schlu:ssel mit einer einpra:gsamen, aber schwer zu erratenen Passphrase zu
   schu:tzen.

 % ssh-keygen -t rsa
 Generating public/private rsa key pair.
 Enter file in which to save the key (/home/user/.ssh/id_rsa):
 Enter passphrase (empty for no passphrase):  1
 Enter same passphrase again:                 2
 Your identification has been saved in /home/user/.ssh/id_rsa.
 Your public key has been saved in /home/user/.ssh/id_rsa.pub.
 The key fingerprint is:
 SHA256:54Xm9Uvtv6H4NOo6yjP/YCfODryvUU7yWHzMqeXwhq8 user@host.example.com
 The key's randomart image is:
 +---[RSA 2048]----+
 |                 |
 |                 |
 |                 |
 |        . o..    |
 |       .S*+*o    |
 |      . O=Oo . . |
 |       = Oo= oo..|
 |      .oB.* +.oo.|
 |       =OE**.o..=|
 +----[SHA256]-----+

   1 Geben Sie hier die Passphrase ein. Diese darf auch Leer- und             
     Sonderzeichen enthalten.                                                 
   2 Geben Sie die Passphrase zur U:berpru:fung erneut ein.                   

   Der private Schlu:ssel wird in ~/.ssh/id_rsa und der o:ffentliche
   Schlu:ssel in ~/.ssh/id_rsa.pub gespeichert. Der o:ffentliche Schlu:ssel
   muss zuerst auf den entfernten Rechner nach ~/.ssh/authorized_keys kopiert
   werden, damit die schlu:sselbasierte Authentifizierung funktioniert.

  Warnung:

   Viele Benutzer denken, dass die Verwendung von Schlu:sseln generell sicher
   ist. Sie verwenden dann einen Schlu:ssel ohne eine Passphrase. Dies ist
   jedoch sehr gefa:hrlich. Ein Administrator kann u:berpru:fen, ob ein
   Schlu:sselpaar mit einer Passphrase geschu:tzt ist. Wenn die Datei mit dem
   privaten Schlu:ssel den Text ENCRYPTED entha:lt, dann hat der Benutzer
   eine Passphrase verwendet. Um die Benutzer zusa:tzlich zu schu:tzen, kann
   ein from-Feld in der Datei des o:ffentlichen Schlu:ssels hinzugefu:gt
   werden. Zum Beispiel wu:rde das Hinzufu:gen von from="192.168.10.5" vor
   dem ssh-rsa-Pra:fix dafu:r sorgen, dass sich ein bestimmter Benutzer nur
   noch von dieser IP-Adresse anmelden darf.

   Die Optionen und Dateinamen sind abha:ngig von der eingesetzten Version
   von OpenSSH. Die fu:r das System gu:ltigen Optionen finden Sie in
   ssh-keygen(1).

   Wenn bei der Erzeugung des Schlu:ssels eine Passphrase angegeben wurde,
   wird der Benutzer bei jeder Anmeldung am Server zur Eingabe der Passphrase
   aufgefordert. Mit ssh-agent(1) und ssh-add(1) ist es mo:glich,
   SSH-Schlu:ssel in den Speicher zu laden, damit die Passphrase nicht jedes
   Mal eingegeben werden muss.

   ssh-agent u:bernimmt die Authentifizierung mit den geladenen privaten
   Schlu:sseln. ssh-agent kann dazu verwendet werden, ein anderes Programm zu
   starten, beispielsweise eine Shell oder einen Window-Manager.

   Um ssh-agent in einer Shell zu verwenden, muss es mit einer Shell als
   Argument aufgerufen werden. Die zu verwaltende Identita:t muss mit ssh-add
   sowie der Passphrase fu:r den privaten Schlu:ssel u:bergeben werden.
   Danach kann sich der Benutzer mit ssh auf jedem Rechner anmelden, der
   einen entsprechenden o:ffentlichen Schlu:ssel besitzt. Dazu ein Beispiel:

 % ssh-agent csh
 % ssh-add
 Enter passphrase for /usr/home/user/.ssh/id_rsa:  1
 Identity added: /usr/home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
 %

   1   Geben Sie hier die Passphrase fu:r den Schlu:ssel ein.  

   Um ssh-agent unter Xorg zu verwenden, muss ein Eintrag fu:r das Programm
   in ~/.xinitrc aufgenommen werden. Dadurch ko:nnen alle unter Xorg
   gestarteten Programme die Dienste von ssh-agent nutzen. ~/.xinitrc ko:nnte
   etwa so aussehen:

 exec ssh-agent startxfce4

   Dadurch wird bei jedem Start von Xorg zuerst ssh-agent aufgerufen, das
   wiederum XFCE startet. Nachdem diese A:nderung durchgefu:hrt wurde, muss
   Xorg neu gestartet werden. Danach ko:nnen Sie mit ssh-add die
   SSH-Schlu:ssel laden.

    13.8.1.2. SSH-Tunnel

   Mit OpenSSH ist es mo:glich, einen Tunnel zu erstellen, in dem ein anderes
   Protokoll verschlu:sselt u:bertragen wird.

   Im folgenden Kommando erzeugt ssh einen Tunnel fu:r telnet:

 % ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
 %

   Dieses Beispiel verwendet die folgenden Optionen:

   -2

           Zwingt ssh dazu, die Version 2 des Protokolls zu verwenden, um
           sich mit dem Server zu verbinden.

   -N

           Zeigt an, dass ein Tunnel erstellt werden soll. Ohne diese Option
           wu:rde ssh eine normale Sitzung o:ffnen.

   -f

           Zwingt ssh im Hintergrund zu laufen.

   -L

           Ein lokaler Tunnel wird in der Form
           localport:remotehost:remoteport angegeben. Die Verbindung wird
           dabei von dem lokalen Port localport auf einen entfernten Rechner
           weitergeleitet.

   user@foo.example.com

           Gibt den Anmeldenamen auf dem entfernten SSH-Server an.

   Ein SSH-Tunnel erzeugt einen Socket auf localhost und dem angegebenen
   lokalen Port. Jede Verbindung, die auf dem angegebenen Socket aufgemacht
   wird, wird dann auf den spezifizierten entfernten Rechner und Port
   weitergeleitet. Im Beispiel wird der lokale Port 5023 an die entfernte
   Maschine auf Port 23 weitergeleitet. Da der Port 23 fu:r telnet reserviert
   ist, erzeugt das eine sichere telnet(1)-Verbindung durch einen SSH-Tunnel.

   Wie in den folgenden Beispielen zu sehen ist, kann diese Vorgehensweise
   genutzt werden, um jedes unsichere TCP-Protokoll, wie SMTP, POP3 und FTP,
   weiterzuleiten.

   Beispiel 13.1. Einen sicheren Tunnel fu:r SMTP erstellen

 % ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
 user@mailserver.example.com's password: *****
 % telnet localhost 5025
 Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 220 mailserver.example.com ESMTP

   Zusammen mit ssh-keygen und zusa:tzlichen Benutzer-Accounts ko:nnen leicht
   benutzbare SSH-Tunnel aufgebaut werden. Anstelle von Passwo:rtern ko:nnen
   Schlu:ssel benutzt werden und jeder Tunnel kann unter einem eigenen
   Benutzer laufen.

   Beispiel 13.2. Sicherer Zugriff auf einen POP3-Server

   In diesem Beispiel gibt es einen SSH-Server, der Verbindungen von aussen
   akzeptiert. Im selben Netzwerk befindet sich zudem noch ein Mail-Server,
   der POP3 spricht. Um E-Mails auf sichere Weise abzurufen, bauen Sie eine
   SSH-Verbindung zu dem SSH-Server im Netzwerk auf und tunneln von dort zum
   Mail-Server weiter.

 % ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
 user@ssh-server.example.com's password: ******

   Wenn Sie den Tunnel eingerichtet haben, konfigurieren Sie den Mail-Client
   so, dass er POP3 Anfragen zu localhost auf Port 2110 sendet. Diese
   Verbindung wird dann u:ber den gesicherten Tunnel zu mail.example.com
   weitergeleitet.

   Beispiel 13.3. Umgehen einer Firewall

   Einige Firewalls filtern sowohl eingehende als auch ausgehende
   Verbindungen. Zum Beispiel ko:nnte eine Firewall den Zugriff auf entfernte
   Rechner auf die Ports 22 und 80 beschra:nken, um lediglich SSH und
   Web-Inhalte zu erlauben. Dies wu:rde den Zugriff auf Dienste verhindern,
   die nicht die Ports 22 oder 80 benutzen.

   Die Lo:sung hier ist es, eine SSH-Verbindung zu einer Maschine ausserhalb
   der Firewall aufzumachen und durch diese zum gewu:nschten Dienst zu
   tunneln:

 % ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
 user@unfirewalled-system.example.org's password: *******

   In diesem Beispiel benutzt ein Ogg Vorbis Client localhost und Port 8888.
   Die Verbindung wird dann zu music.example.com Port 8000 weitergeleitet.
   Die Firewall wurde somit erfolgreich umgangen.

  13.8.2. Den SSH-Server aktivieren

   Neben den integrierten SSH Client-Werkzeugen, die zur Verfu:gung stehen,
   kann ein FreeBSD-System auch als SSH-Server konfiguriert werden, um
   Verbindungen von anderen SSH-Clients zu akzeptieren.

   Benutzen Sie den Kommando service(8), um zu pru:fen ob der sshd
   ausgefu:hrt wird:

 # service sshd status

   Wenn der Dienst nicht ausgefu:hrt wird, fu:gen Sie folgende Zeile in
   /etc/rc.conf ein:

 sshd_enable="YES"

   Diese Zeile startet sshd, den OpenSSH-Daemon, beim na:chsten Systemstart.
   Geben Sie folgendes ein, um den Dienst jetzt zu starten:

 # service sshd start

   Wenn sshd erstmalig gestartet wird, werden die Host-Schlu:ssel des Systems
   erzeugt und der Fingerabdruck wird auf der Konsole angezeigt. Stellen Sie
   den Fingerabdruck den Benutzern zur Verfu:gung, sodass sie ihn
   u:berpru:fen ko:nnen, wenn sie das erste Mal eine Verbindung mit dem
   Server herstellen.

   sshd(8) entha:lt die verfu:gbaren Optionen fu:r den Start von sshd und
   weitere Informationen zur Authentifizierung, den Anmeldeprozess und die
   verschiedenen Konfigurationsdateien.

   Ab jetzt sollte sshd fu:r alle Benutzer mit einem Benutzernamen und
   Kennwort zur Verfu:gung stehen.

  13.8.3. SSH Server Sicherheit

   Obwohl sshd das am weitesten verbreitete Remote-Administrations-Werkzeug
   ist, sind Brute-Force- und Drive-by-Angriffe auf o:ffentliche Netzwerke
   weit verbreitet. Daher stehen mehrere Optionen zur Verfu:gung, um diese
   Art von Angriffen zu verhindern. Diese Optionen werden in diesem Abschnitt
   beschrieben.

   Es ist in der Regel ein gute Idee, festzulegen, welche Benutzer sich von
   welchem Rechner aus anmelden ko:nnen. Dies la:sst sich beispielsweise
   u:ber die Option AllowUsers festlegen. Soll sich etwa nur root vom Rechner
   mit der IP-Adresse 192.168.1.32 aus einwa:hlen du:rfen, wu:rden Sie
   folgenden Eintrag in /etc/ssh/sshd_config aufnehmen:

 AllowUsers root@192.168.1.32

   Damit sich admin von jedem Rechner aus anmelden kann, geben Sie nur den
   Benutzernamen an:

 AllowUsers admin

   Sie ko:nnen auch mehrere Benutzer in einer Zeile auffu:hren:

 AllowUsers root@192.168.1.32 admin

   Nachdem Sie /etc/ssh/sshd_config angepasst haben, muss sshd seine
   Konfigurationsdateien neu einlesen. Dazu geben Sie Folgendes ein:

 # /etc/rc.d/sshd reload

  Anmerkung:

   Wenn die Option AllowUsers verwendet wird, ist es wichtig, jeden Benutzer
   aufzulisten, der sich an diesem Rechner anmelden muss. Benutzer, die nicht
   in dieser Liste aufgefu:hrt sind, du:rfen sich nicht anmelden. Die
   Optionen fu:r die Konfigurationsdatei von OpenSSH unterscheiden zwischen
   Gross- und Kleinschreibung. Wenn Sie eine Option falsch schreiben, so wird
   sie ingnoriert. Testen Sie immer die A:nderungen, um sicherzustellen, dass
   sie wie erwartet funktionieren. Weitere Informationen zu den verfu:gbaren
   Optionen finden Sie in sshd_config(5).

   Daru:ber hinaus ko:nnen Benutzer gezwungen werden, eine
   Zwei-Faktor-Authentifizierung mit einem o:ffentlichen und einem privaten
   Schlu:ssel zu benutzen. Bei Bedarf kann der Benutzer ein Schlu:sselpaar
   mit ssh-keygen(1) erzeugen und dem Administrator den o:ffentlichen
   Schlu:ssel zukommen lassen. Der Schlu:ssel wird, wie weiter oben
   beschrieben, in authorized_keys platziert. Um den Benutzer zu zwingen,
   ausschliesslich Schlu:ssel zu benutzen, kann die folgende Option
   konfiguriert werden:

 AuthenticationMethods publickey

  Tipp:

   Verwechseln Sie nicht /etc/ssh/sshd_config mit /etc/ssh/ssh_config
   (beachten Sie das zusa:tzliche d im ersten Dateinamen). Die erste Datei
   konfiguriert den Server und die zweite Datei konfiguriert den Client.
   ssh_config(5) entha:lt eine Auflistung der verfu:gbaren
   Client-Einstellungen.

13.9. Zugriffskontrolllisten fu:r Dateisysteme (ACL)

   Beigetragen von Tom Rhodes.

   Zugriffskontrolllisten (Access Control Lists, ACL) erweitern die normalen
   Zugriffsrechte von UNIX(R) Systemen auf eine kompatible (POSIX(R).1e)
   Weise und bieten feiner granulierte Sicherheitsmechanismen.

   Der GENERIC-Kernel von FreeBSD bietet ACL-Unterstu:tzung fu:r
   UFS-Dateisysteme. Benutzer, die es vorziehen einen eigenen Kernel zu
   u:bersetzen, mu:ssen die folgende Option in die Kernelkonfigurationsdatei
   aufnehmen:

 options UFS_ACL

   Das System gibt eine Warnung aus, wenn ein Dateisystem mit ACLs
   eingehangen werden soll und die Unterstu:tzung fu:r ACLs nicht im Kernel
   aktiviert ist. ACLs bauen auf den erweiterten Attributen auf, die von UFS2
   standardma:ssig unterstu:tzt werden.

   Dieses Kapitel beschreibt, wie ACL-Unterstu:tzung aktiviert wird. Zudem
   werden einige Anwendungsbeispiele vorgestellt.

  13.9.1. ACL-Unterstu:tzung aktivieren

   Die Option acl in /etc/fstab aktiviert Zugriffskontrolllisten fu:r ein
   Dateisystem. Die bevorzugte Mo:glichkeit ist die Verwendung von
   Zugriffskontrolllisten mit tunefs(8) (Option -a), im Superblock des
   Dateisystems festzuschreiben. Diese Mo:glichkeit hat mehrere Vorteile:

     * Nochmaliges Einha:ngen eines Dateisystems (Option -u von mount(8))
       vera:ndert den Status der Zugriffskontrolllisten nicht. Die Verwendung
       von Zugriffskontrolllisten kann nur durch Abha:ngen und erneutes
       Einha:ngen eines Dateisystems vera:ndert werden. Das heisst auch, dass
       Zugriffskontrolllisten nicht nachtra:glich auf dem Root-Dateisystem
       aktiviert werden ko:nnen.

     * Die Zugriffskontrolllisten auf den Dateisystemen sind, unabha:ngig von
       den Optionen in /etc/fstab oder Namensa:nderungen der Gera:te, immer
       aktiv. Dies verhindert auch, dass Zugriffskontrolllisten aus Versehen
       auf Dateisystemen ohne Zugriffskontrolllisten aktiviert werden.

  Anmerkung:

   Es kann sein, dass sich der Status von Zugriffskontrolllisten spa:ter
   durch nochmaliges Einha:ngen des Dateisystems (Option -u von mount(8))
   a:ndern la:sst. Die momentane Variante ist aber sicherer, da der Status
   der Zugriffskontrolllisten nicht versehentlich gea:ndert werden kann.
   Allgemein sollten Zugriffskontrolllisten auf einem Dateisystem, auf dem
   sie einmal verwendet wurden, nicht deaktiviert werden, da danach die
   Zugriffsrechte falsch sein ko:nnen. Werden Zugriffskontrolllisten auf
   einem solchen Dateisystem wieder aktiviert, werden die Zugriffsrechte von
   Dateien, die sich zwischenzeitlich gea:ndert haben, u:berschrieben, was zu
   erneuten Problemen fu:hrt.

   Die Zugriffsrechte einer Datei werden durch ein + (Plus) gekennzeichnet,
   wenn die Datei durch Zugriffskontrolllisten geschu:tzt ist:

 drwx------  2 robert  robert  512 Dec 27 11:54 private
 drwxrwx---+ 2 robert  robert  512 Dec 23 10:57 directory1
 drwxrwx---+ 2 robert  robert  512 Dec 22 10:20 directory2
 drwxrwx---+ 2 robert  robert  512 Dec 27 11:57 directory3
 drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html

   In diesem Beispiel sind die Verzeichnisse directory1, directory2 und
   directory3 durch Zugriffskontrolllisten geschu:tzt, wohingegen das
   Verzeichnis public_html nicht geschu:tzt ist.

  13.9.2. Zugriffskontrolllisten benutzen

   getfacl zeigt Zugriffskontrolllisten an. Das folgende Kommando zeigt die
   ACLs auf der Datei test:

 % getfacl test
         #file:test
         #owner:1001
         #group:1001
         user::rw-
         group::r--
         other::r--

   setfacl a:ndert oder entfernt ACLs auf Dateien. Um alle ACLs einer Datei
   zu entfernen, ko:nnen Sie die Option -k benutzen. Es ist jedoch
   empfehlenswert die Option -b zu verwenden, da sie die erforderlichen
   Felder, die fu:r ACLs beno:tigt werden, beibeha:lt.

 # setfacl -k test

   Benutzen Sie -m um die Eintra:ge der ACL zu vera:ndern:

 % setfacl -m u:trhodes:rwx,g:web:r--,o::--- test

   In diesem Beispiel gab es keine vordefinierten Eintra:ge, da sie durch den
   vorhergehenden Befehl entfernt wurden. Mit diesem Kommando werden die eben
   entfernten Zugriffskontrolllisten wiederhergestellt. Der Befehl gibt die
   Fehlermeldung Invalid argument aus, wenn Sie nicht existierende Benutzer
   oder Gruppen als Parameter angeben.

   Weitere Informationen zu den Optionen dieser Kommandos finden Sie in
   getfacl(1) und setfacl(1).

13.10. Sicherheitsprobleme in Software von Drittanbietern u:berwachen

   Beigetragen von Tom Rhodes.

   In den letzten Jahren wurden zahlreiche Verbesserungen in der
   Einscha:tzung und dem Umgang mit Sicherheitsproblemen erzielt. Die Gefahr
   von Einbru:chen in ein System wird aber immer gro:sser, da Softwarepakete
   von Dritten auf nahezu jedem Betriebssystem installiert und konfiguriert
   werden.

   Die Einscha:tzung der Verletzlichkeit eines Systems ist ein
   Schlu:sselfaktor fu:r dessen Sicherheit. FreeBSD vero:ffentlicht zwar
   Sicherheitshinweise (security advisories) fu:r das Basissystem, das
   Projekt ist allerdings nicht dazu in der Lage, dies auch fu:r die
   zahlreichen Softwarepakete von Dritten zu tun. Dennoch gibt es einen Weg,
   auch diese Programmpakete zu u:berwachen. Das FreeBSD Dienstprogramm pkg
   entha:lt Optionen fu:r genau diesen Anwendungsfall.

   pkg fragt dazu eine Datenbank auf bekannte Sicherheitsprobleme ab. Diese
   Datenbank wird vom FreeBSD Security Team sowie den Ports-Entwicklern
   aktualisiert und gewartet.

   Anweisungen zur Installation von pkg finden Sie im Abschnitt 4.4,
   "Benutzen von pkg zur Verwaltung von Bina:rpaketen".

   Die Installation entha:lt Konfigurationsdateien fu:r periodic(8), welche
   die Datenbank von pkg verwaltet und aktualisiert. Diese Funktionalita:t
   wird aktiviert, wenn in periodic.conf(5) die Variable
   daily_status_security_pkgaudit_enable auf YES gesetzt wird. Stellen Sie
   auf jeden Fall sicher, dass diese (an das E-Mail-Konto von root
   gesendeten) Sicherheitsberichte auch gelesen werden.

   Nach der Installation kann ein Administrator mit dem folgenden Kommando
   die Datenbank aktualisieren und sich die Sicherheitslu:cken in
   installierten Paketen anzeigen lassen:

 # pkg audit -F

   pkg zeigt dann die Schwachstellen in installierten Pakete an:

 Affected package: cups-base-1.1.22.0_1
 Type of problem: cups-base -- HPGL buffer overflow vulnerability.
 Reference: <https://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>

 1 problem(s) in your installed packages found.

 You are advised to update or deinstall the affected package(s) immediately.

   Wenn Sie die angegebene URL u:ber einen Internetbrowser aufrufen, erhalten
   Sie weitere Informationen u:ber die bestehende Sicherheitslu:cke, wie die
   betroffenen Versionen, die Version des FreeBSD-Ports sowie Hinweise auf
   weitere Seiten, die ebenfalls Sicherheitshinweise zu diesem Problem
   bieten.

   pkg ist ein ma:chtiges Werkzeug und insbesondere in Zusammenarbeit mit
   ports-mgmt/portmaster a:usserst hilfreich.

13.11. FreeBSD Sicherheitshinweise

   Beigesteuert von Tom Rhodes.

   Wie viele andere Hersteller von hochwertigen Betriebssystemen, hat auch
   das FreeBSD-Projekt ein Sicherheitsteam, das fu:r die Bestimmung des
   End-of-Life (EoL) Datum verantwortlich ist. Das Sicherheitsteam stellt
   zudem sicher, dass Sicherheitsupdates fu:r unterstu:tzte Versionen, welche
   noch nicht ihr EoL erreicht haben, zur Verfu:gung gestellt werden. Weitere
   Informationen u:ber das FreeBSD Sicherheitsteam und den unterstu:tzten
   Versionen finden Sie auf der Webseite FreeBSD Security.

   Zu den Aufgaben des Sicherheitsteams za:hlt es, auf gemeldete
   Sicherheitslu:cken im FreeBSD-Betriebssystem zu reagieren. Sobald eine
   Sicherheitslu:cke besta:tigt wird, u:berpru:ft das Sicherheitsteam die
   notwendigen Schritte, um die Schwachstelle zu beheben und den Quellcode
   mit der Korrektur zu aktualisieren. Anschliessend vero:ffentlicht es die
   Details in einem Sicherheitshinweis (Security Advisory). Die
   Sicherheitshinweise werden auf der FreeBSD Webseite und auf den
   Mailinglisten freebsd-security-notifications, freebsd-security und
   freebsd-announce vero:ffentlicht.

   Dieser Abschnitt beschreibt das Format eines FreeBSD Sicherheitshinweises.

  13.11.1. Format eines Sicherheitshinweis

   Hier ist ein Beispiel fu:r einen FreeBSD Sicherheitshinweis:

 =============================================================================
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA512

 =============================================================================
 FreeBSD-SA-14:04.bind                                       Security Advisory
                                                           The FreeBSD Project

 Topic:          BIND remote denial of service vulnerability

 Category:       contrib
 Module:         bind
 Announced:      2014-01-14
 Credits:        ISC
 Affects:        FreeBSD 8.x and FreeBSD 9.x
 Corrected:      2014-01-14 19:38:37 UTC (stable/9, 9.2-STABLE)
                 2014-01-14 19:42:28 UTC (releng/9.2, 9.2-RELEASE-p3)
                 2014-01-14 19:42:28 UTC (releng/9.1, 9.1-RELEASE-p10)
                 2014-01-14 19:38:37 UTC (stable/8, 8.4-STABLE)
                 2014-01-14 19:42:28 UTC (releng/8.4, 8.4-RELEASE-p7)
                 2014-01-14 19:42:28 UTC (releng/8.3, 8.3-RELEASE-p14)
 CVE Name:       CVE-2014-0591

 For general information regarding FreeBSD Security Advisories,
 including descriptions of the fields above, security branches, and the
 following sections, please visit <URL:http://security.FreeBSD.org/>.

 I.   Background

 BIND 9 is an implementation of the Domain Name System (DNS) protocols.
 The named(8) daemon is an Internet Domain Name Server.

 II.  Problem Description

 Because of a defect in handling queries for NSEC3-signed zones, BIND can
 crash with an "INSIST" failure in name.c when processing queries possessing
 certain properties.  This issue only affects authoritative nameservers with
 at least one NSEC3-signed zone.  Recursive-only servers are not at risk.

 III. Impact

 An attacker who can send a specially crafted query could cause named(8)
 to crash, resulting in a denial of service.

 IV.  Workaround

 No workaround is available, but systems not running authoritative DNS service
 with at least one NSEC3-signed zone using named(8) are not vulnerable.

 V.   Solution

 Perform one of the following:

 1) Upgrade your vulnerable system to a supported FreeBSD stable or
 release / security branch (releng) dated after the correction date.

 2) To update your vulnerable system via a source code patch:

 The following patches have been verified to apply to the applicable
 FreeBSD release branches.

 a) Download the relevant patch from the location below, and verify the
 detached PGP signature using your PGP utility.

 [FreeBSD 8.3, 8.4, 9.1, 9.2-RELEASE and 8.4-STABLE]
 # fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch
 # fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch.asc
 # gpg --verify bind-release.patch.asc

 [FreeBSD 9.2-STABLE]
 # fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch
 # fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch.asc
 # gpg --verify bind-stable-9.patch.asc

 b) Execute the following commands as root:

 # cd /usr/src
 # patch < /path/to/patch

 Recompile the operating system using buildworld and installworld as
 described in <URL:https://www.FreeBSD.org/handbook/makeworld.html>.

 Restart the applicable daemons, or reboot the system.

 3) To update your vulnerable system via a binary patch:

 Systems running a RELEASE version of FreeBSD on the i386 or amd64
 platforms can be updated via the freebsd-update(8) utility:

 # freebsd-update fetch
 # freebsd-update install

 VI.  Correction details

 The following list contains the correction revision numbers for each
 affected branch.

 Branch/path                                                      Revision
 - -------------------------------------------------------------------------
 stable/8/                                                         r260646
 releng/8.3/                                                       r260647
 releng/8.4/                                                       r260647
 stable/9/                                                         r260646
 releng/9.1/                                                       r260647
 releng/9.2/                                                       r260647
 - -------------------------------------------------------------------------

 To see which files were modified by a particular revision, run the
 following command, replacing NNNNNN with the revision number, on a
 machine with Subversion installed:

 # svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base

 Or visit the following URL, replacing NNNNNN with the revision number:

 <URL:http://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>

 VII. References

 <URL:https://kb.isc.org/article/AA-01078>

 <URL:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0591>

 The latest revision of this advisory is available at
 <URL:http://security.FreeBSD.org/advisories/FreeBSD-SA-14:04.bind.asc>
 -----BEGIN PGP SIGNATURE-----

 iQIcBAEBCgAGBQJS1ZTYAAoJEO1n7NZdz2rnOvQP/2/68/s9Cu35PmqNtSZVVxVG
 ZSQP5EGWx/lramNf9566iKxOrLRMq/h3XWcC4goVd+gZFrvITJSVOWSa7ntDQ7TO
 XcinfRZ/iyiJbs/Rg2wLHc/t5oVSyeouyccqODYFbOwOlk35JjOTMUG1YcX+Zasg
 ax8RV+7Zt1QSBkMlOz/myBLXUjlTZ3Xg2FXVsfFQW5/g2CjuHpRSFx1bVNX6ysoG
 9DT58EQcYxIS8WfkHRbbXKh9I1nSfZ7/Hky/kTafRdRMrjAgbqFgHkYTYsBZeav5
 fYWKGQRJulYfeZQ90yMTvlpF42DjCC3uJYamJnwDIu8OhS1WRBI8fQfr9DRzmRua
 OK3BK9hUiScDZOJB6OqeVzUTfe7MAA4/UwrDtTYQ+PqAenv1PK8DZqwXyxA9ThHb
 zKO3OwuKOVHJnKvpOcr+eNwo7jbnHlis0oBksj/mrq2P9m2ueF9gzCiq5Ri5Syag
 Wssb1HUoMGwqU0roS8+pRpNC8YgsWpsttvUWSZ8u6Vj/FLeHpiV3mYXPVMaKRhVm
 067BA2uj4Th1JKtGleox+Em0R7OFbCc/9aWC67wiqI6KRyit9pYiF3npph+7D5Eq
 7zPsUdDd+qc+UTiLp3liCRp5w6484wWdhZO6wRtmUgxGjNkxFoNnX8CitzF8AaqO
 UWWemqWuz3lAZuORQ9KX
 =OQzQ
 -----END PGP SIGNATURE-----

   Jeder Sicherheitshinweis verwendet das folgende Format:

     * Jeder Sicherheitshinweis wird mit dem PGP-Schlu:ssel des
       Sicherheitsbeauftragten unterzeichnet. Der o:ffentliche Schlu:ssel des
       Sicherheitsbeauftragten kann in Anhang D, OpenPGP-Schlu:ssel
       u:berpru:ft werden.

     * Der Name des Sicherheitshinweises beginnt immer mit FreeBSD-SA- (fu:r
       FreeBSD Security Advisory), gefolgt vom Jahr im zweistelligen Format
       (14:), gefolgt von der Anzahl von Sicherheitshinweisen fu:r dieses
       Jahr (04.), gefolgt vom Namen der Anwendung oder des betroffenen
       Subsystems (bind). Der hier gezeigte Sicherheitshinweis ist der vierte
       Hinweis fu:r das Jahr 2014 und betrifft die Anwendung BIND.

     * Das Feld Topic entha:lt eine Beschreibung der Schwachstelle.

     * Das Feld Category beschreibt den betroffenen Systemteil. Mo:gliche
       Werte fu:r dieses Feld sind core, contrib oder ports. Die Kategorie
       core gilt fu:r Komponenten des FreeBSD-Betriebssystems, die Kategorie
       contrib beschreibt zum Basissystem geho:rende Software Dritter,
       beispielsweise BIND. Die Kategorie ports beschreibt Software, die Teil
       der Ports-Sammlung ist.

     * Das Feld Module beschreibt die betroffene Komponente. Im diesem
       Beispiel ist das bind-Modul betroffen, dass heisst dieses Problem
       betrifft eine Anwendung aus dem Betriebssystem.

     * Das Feld Announced gibt den Zeitpunkt der Bekanntgabe des
       Sicherheitshinweises an. Das bedeutet, dass das Sicherheitsteam das
       Problem besta:tigt hat und das eine entsprechende Korrektur bereits im
       FreeBSD Quellcode-Repository zur Verfu:gung steht .

     * Das Feld Credits gibt die Person oder Organisation an, die das
       Sicherheitsproblem bemerkt und gemeldet hat.

     * Das Feld Affects listet die FreeBSD-Releases auf, die von dem Problem
       betroffen sind.

     * Das Feld Corrected zeigt an, wann das Problem in welchem Release
       behoben wurde. Der Teil in Klammern zeigt an, in welchem Zweig die
       Aktualisierung eingeflossen ist und die entsprechende Versionsnummer
       und Patch-Level des Release. Der Patch-Level besteht aus dem
       Buchstaben p, gefolgt von einer Nummer. Dies erlaubt es dem Benutzer
       festzustellen, welche Korrekturen bereits auf dem System eingespielt
       wurden.

     * Reserviert fu:r Informationen, u:ber die auf cve.mitre.org nach
       Sicherheitslu:cken gesucht werden kann.

     * Im Feld Background wird das betroffene Modul beschrieben.

     * Im Feld Problem Description wird das Sicherheitsproblem beschrieben.
       Hier wird fehlerhafter Code beschrieben oder geschildert, wie ein
       Werkzeug ausgenutzt werden ko:nnte.

     * Das Feld Impact beschreibt die Auswirkungen des Sicherheitsproblems
       auf ein System.

     * Im Feld Workaround wird eine Umgehung des Sicherheitsproblems
       beschrieben. Die Umgehung ist fu:r Administratoren gedacht, die das
       System aus Zeitnot, Netzwerk-technischen oder anderen Gru:nden nicht
       aktualisieren ko:nnen.

     * Das Feld Solution entha:lt eine getestete Schritt-fu:r-Schritt
       Anleitung, die das Sicherheitsproblem behebt.

     * Das Feld Correction Details entha:lt die Subversion-Tags der
       betroffenen Dateien zusammen mit zugeho:rigen Revisionsnummern, in
       denen das Problem behoben wurde.

     * Im Feld References finden sich Verweise auf weitere
       Informationsquellen.

13.12. Prozess-U:berwachung

   Beigetragen von Tom Rhodes.

   Prozess-U:berwachung (Process accounting) ist ein Sicherheitsverfahren,
   bei dem ein Administrator verfolgt, welche Systemressourcen verwendet
   werden und wie sich diese auf die einzelnen Anwender verteilen. Dadurch
   kann das System u:berwacht werden und es ist sogar mo:glich, zu
   kontrollieren, welche Befehle ein Anwender eingibt.

   Die U:berwachung von Prozessen hat sowohl Vor- als auch Nachteile. Positiv
   ist, dass man einen Einbruchsversuch bis an den Anfang zuru:ckverfolgen
   kann. Von Nachteil ist allerdings, dass durch diesen Prozess Unmengen an
   Protokolldateien erzeugt werden, die auch dementsprechenden Plattenplatz
   beno:tigen. Dieser Abschnitt beschreibt die Grundlagen der
   Prozess-U:berwachung.

  Anmerkung:

   Wenn Sie eine differenzierte Prozess-U:berwachung beno:tigen, lesen Sie
   Kapitel 16, Security Event Auditing.

  13.12.1. Die Prozess-U:berwachung aktivieren und konfigurieren

   Bevor Sie die Prozess-U:berwachung verwenden ko:nnen, mu:ssen Sie diese
   u:ber die folgenden Befehle aktivieren:

 # touch /var/account/acct
 # chmod 600 /var/account/acct
 # accton /var/account/acct
 # echo 'accounting_enable="YES"' >> /etc/rc.conf

   Einmal aktiviert, wird sofort mit der U:berwachung von CPU-Statistiken,
   Befehlen und anderen Vorga:ngen begonnen. Protokolldateien werden in einem
   nur von Maschinen lesbaren Format gespeichert und ko:nnen mit sa
   aufgerufen werden. Ohne Optionen gibt sa Informationen wie die Anzahl der
   Aufrufe pro Anwender, die abgelaufene Zeit in Minuten, die gesamte CPU-
   und Anwenderzeit in Minuten und die durchschnittliche Anzahl der Ein- und
   Ausgabeoperationen aus. sa(8) entha:lt eine Liste der Optionen, welche die
   Ausgabe steuern.

   Benutzen Sie lastcomm, um die von den Benutzern ausgefu:hrten Befehle
   anzuzeigen. Dieses Beispiel zeigt die Nutzung von ls durch trhodes auf dem
   Terminal ttyp1:

 # lastcomm ls trhodes ttyp1

   Zahlreiche weitere nu:tzliche Optionen finden Sie lastcomm(1), acct(5)
   sowie sa(8).

13.13. Einschra:nkung von Ressourcen

   Beigetragen von Tom Rhodes.

   FreeBSD bietet dem Systemadministrator mehrere Mo:glichkeiten die
   System-Ressourcen, die ein einzelner Benutzer verwenden kann,
   einzuschra:nken. Festplatten-Kontingente schra:nken den Plattenplatz, der
   einem Benutzer zur Verfu:gung steht, ein. Kontingente werden im
   Abschnitt 17.11, "Disk Quotas" diskutiert.

   Einschra:nkungen auf andere Ressourcen, wie CPU und Speicher, ko:nnen
   u:ber eine Konfigurationsdatei oder u:ber die Kommandozeile konfiguriert
   werden. Traditionell werden Login-Klassen in /etc/login.conf definiert.
   Obwohl diese Methode immer noch untersu:tzt wird, muss nach jeder
   A:nderung an dieser Datei die Ressourcen-Datenbank neu gebaut werden.
   Zudem mu:ssen Sie die notwendigen A:nderungen in /etc/master.passwd
   vornehmen und die Passwort-Datenbnak neu bauen. Dieser Prozess kann,
   abha:ngig davon, wie viele Benutzer bearbeitet werden mu:ssen, sehr
   zeitaufwa:ndig sein.

   Beginnend mit FreeBSD 9.0-RELEASE ko:nnen mit rctl Ressourcen fu:r
   Benutzer sehr detailliert gesteuert werden. Dieser Befehl unterstu:tzt
   nicht nur die Kontrolle der Ressourcen fu:r Benutzer, sondern auch die
   Beschra:nkung auf Prozesse und Jails.

   In diesem Abschnitt werden beide Methoden vorgestellt. Angefangen wird mit
   der traditionellen Methode.

  13.13.1. Login-Klassen konfigurieren

   Bei der traditionellen Methode werden Login-Klassen und
   Ressourcenbeschra:nkungen in /etc/login.conf definiert. Jeder Benutzer
   kann einer Login-Klasse zugewiesen werden (standardma:ssig default) und
   jede Login-Klasse ist mit einem Satz von Login-Fa:higkeiten verbunden.
   Eine Login-Fa:higkeit ist ein Name=Wert Paar, in dem Name die Fa:higkeit
   bezeichnet und Wert ein beliebiger Text ist, der in Abha:nigkeit von Name
   entsprechend verarbeitet wird.

  Anmerkung:

   Immer wenn /etc/login.conf vera:ndert wurde, muss die /etc/login.conf.db
   mit dem folgenden Kommando aktualisiert werden:

 # cap_mkdb /etc/login.conf

   Ressourcenbeschra:nkungen unterscheiden sich von normalen
   Login-Fa:higkeiten zweifach. Erstens gibt es fu:r jede Beschra:nkung ein
   aktuelles und ein maximales Limit. Das aktuelle Limit kann vom Benutzer
   oder einer Anwendung beliebig bis zum maximalen Limit vera:ndert werden.
   Letzteres kann der Benutzer nur heruntersetzen. Zweitens gelten die
   meisten Ressourcenbeschra:nkungen fu:r jeden vom Benutzer gestarteten
   Prozess.

   Tabelle 13.1, "Ressourcenbeschra:nkungen fu:r Login-Klassen" listet die
   gebra:uchlichen Ressourcenbeschra:nkungen auf. Alle verfu:gbaren
   Ressourcenbeschra:nkungen und Fa:higkeiten sind im Detail in login.conf(5)
   beschrieben.

   Tabelle 13.1. Ressourcenbeschra:nkungen fu:r Login-Klassen

   Ressourcenbeschra:nkung                    Beschreibung                    
                           Das Limit der Gro:sse einer core-Datei, die von    
                           einem Programm generiert wird, unterliegt aus      
                           offensichtlichen Gru:nden anderen Limits der       
                           Festplattenbenutzung, zum Beispiel filesize oder   
                           Festplattenkontingenten. Es wird oft als weniger   
   coredumpsize            harte Methode zur Kontrolle des                    
                           Festplattenplatz-Verbrauchs verwendet. Da Benutzer 
                           die core-Dateien selbst nicht erstellen und sie    
                           oft nicht lo:schen, kann diese Option davor        
                           schu:tzen, dass kein Festplattenspeicher mehr zur  
                           Verfu:gung steht, sollte ein grosses Programm      
                           abstu:rzen.                                        
                           Die maximale Rechenzeit, die ein Prozess eines     
                           Benutzers verbrauchen darf. U:berschreitet ein     
                           Prozess diesen Wert, wird er vom Kernel beendet.   
   cputime                 Beachten Sie, dass die Rechenzeit limitiert wird,  
                           nicht die prozentuale Prozessorenbenutzung, wie es 
                           in einigen Feldern von top und ps dargestellt      
                           wird.                                              
                           Hiermit la:sst sich die maximale Gro:sse einer     
                           Datei bestimmen, die der Benutzer besitzen darf.   
   filesize                Im Gegensatz zu Festplattenkontingenten ist diese  
                           Beschra:nkung nur fu:r jede einzelne Datei gu:ltig 
                           und nicht fu:r den Platz, den alle Dateien eines   
                           Benutzers verwenden.                               
                           Das ist die maximale Anzahl von Prozessen, die ein 
                           Benutzer starten darf, und beinhaltet sowohl       
                           Vordergrund- als auch Hintergrundprozesse. Dieser  
                           Wert nicht ho:her sein als das System-Limit, das   
   maxproc                 in kern.maxproc angegeben ist. Vergessen Sie       
                           nicht, dass ein zu kleiner Wert den Benutzer in    
                           seiner Produktivita:t einschra:nken ko:nnte, wenn  
                           beispielsweise ein grosses Programm u:bersetzt     
                           wird oder viele Prozesse gestartet sind.           
                           Dieses Limit gibt an, wie viel virtueller Speicher 
                           von einem Prozess maximal im Arbeitsspeicher       
                           festgesetzt werden kann (siehe auch mlock(2)). Ein 
   memorylocked            paar systemkritische Programme, wie amd(8),        
                           verhindern damit einen Systemzusammenbruch, der    
                           auftreten ko:nnte, wenn sie aus dem Speicher       
                           genommen werden.                                   
                           Bezeichnet den maximalen Speicher, den ein Prozess 
                           benutzen darf und beinhaltet sowohl                
   memoryuse               Arbeitsspeicher-, als auch Swap-Benutzung. Es ist  
                           kein allu:bergreifendes Limit fu:r den             
                           Speicherverbrauch, aber ein guter Anfang.          
                           Mit diesem Limit la:sst sich die maximale Anzahl   
                           der von einem Prozess des Benutzers geo:ffneten    
                           Dateien festlegen. In FreeBSD werden Dateien auch  
   openfiles               verwendet, um Sockets und >IPC>-Kana:le            
                           darzustellen. Setzen Sie es deshalb nicht zu       
                           niedrig. Das System-Limit ist in kern.maxfiles     
                           definiert.                                         
                           Dieses Limit beschra:nkt den Netzwerk-Speicher,    
   sbsize                  den ein Benutzer verbrauchen darf. Es kann         
                           generell dazu benutzt werden Netzwerk-Verbindungen 
                           zu beschra:nken.                                   
                           Das ist die maximale Gro:sse, auf die der Stack    
                           eines Prozesses heranwachsen darf. Das allein ist  
   stacksize               natu:rlich nicht genug, um den Speicher zu         
                           beschra:nken, den ein Programm verwenden darf. Es  
                           sollte deshalb in Verbindung mit anderen Limits    
                           verwendet werden.                                  

   Beim Setzen von Ressourcenbeschra:nkungen sind noch andere Dinge zu
   beachten:

     * Von /etc/rc beim Hochfahren des Systems gestartete Prozesse werden der
       daemon Login-Klasse zugewiesen.

     * Obwohl die voreingestellte /etc/login.conf sinnvolle Limits entha:lt,
       sind sie evtl. nicht fu:r jedes System geeignet. Ein zu hohes Limit
       kann das System fu:r Missbrauch anfa:llig machen, und ein zu niedriges
       Limit kann der Produktivita:t schaden.

     * Xorg beansprucht selbst eine Menge Ressourcen und verleitet die
       Benutzer dazu, mehrere Programme gleichzeitig laufen zu lassen.

     * Bedenken Sie, dass viele Limits fu:r einzelne Prozesse gelten und
       nicht fu:r den Benutzer selbst. Setzt man zum Beispiel openfiles auf
       50, kann jeder Prozess des Benutzers bis zu 50 Dateien o:ffnen.
       Dadurch ist die maximale Anzahl von Dateien, die von einem Benutzer
       geo:ffnet werden ko:nnen, openfiles mal maxproc. Das gilt auch fu:r
       den Speicherverbrauch.

   Weitere Informationen u:ber Ressourcenbeschra:nkungen, Login-Klassen und
   -Fa:higkeiten finden Sie in cap_mkdb(1), getrlimit(2) und login.conf(5).

  13.13.2. Einschra:nkung von Ressourcen aktivieren und konfigurieren

   Seit FreeBSD 10.2 wird rctl in der Voreinstellung vom Kernel unterstu:tzt.
   Fu:r a:ltere Versionen muss zuna:chst nach den Anweisungen in Kapitel 8,
   Konfiguration des FreeBSD-Kernels ein neuer Kernel erzeugt werden. Fu:gen
   Sie dazu folgende Zeilen in die Kernelkonfigurationsdatei ein:

 options           RACCT
 options         RCTL

   Sobald das System mit dem neuen Kernel gestartet wird, kann rctl benutzt
   werden, um die Regeln fu:r das System festzulegen.

   Die Syntax der Regeln wird durch subject, subject-id, resource und action
   gesteuert, wie in diesem Beispiel zu sehen ist:

 user:trhodes:maxproc:deny=10/user

   Diese Regel zeigt den grundlegenden Aufbau, hier mit dem Subjekt user und
   der Subjekt-ID trhodes. maxproc definiert die Anzahl der Prozesse. Die
   "Aktion" deny verhindert, dass neue Prozesse erstellt werden. Im
   vorherigen Beispiel wurde fu:r den Benutzer trhodes eine Beschra:nkung von
   10 Prozessen konfiguriert. Zu den weiteren Aktionen za:hlen beispielsweise
   die Protokollierung auf der Konsole, Benachrichtigungen an devd(8) oder
   das Senden eines SIGTERM an einen Prozess.

   Beim hinzufu:gen von Regeln mu:ssen einige Dinge beachtet werden. Das
   obige Beispiel wu:rde den Benutzer sogar daran hindern, einfachste Dinge
   zu tun, nachdem er sich anmeldet und eine screen Sitzung gestartet hat.
   Sobald die Begrenzung fu:r eine Ressource erreicht ist, wird folgende
   Fehlermeldung ausgegeben:

 # man test
 /usr/bin/man: Cannot fork: Resource temporarily unavailable
 eval: Cannot fork: Resource temporarily unavailable

   rctl(8) kann auch benutzt werden, um einer Jail eine Speichergrenze
   zuzuweisen. Eine solche Regel ko:nnte wie folgt festgelegt werden:

 # rctl -a jail:httpd:memoryuse:deny=2G/jail

   Damit die Regeln auch nach einem Neustart erhalten bleiben, mu:ssen sie in
   /etc/rctl.conf hinzugefu:gt werden. Dazu schreiben Sie einfach die Regel,
   ohne das vorhergehende Kommando. Zum Beispiel:

 # Block jail from using more than 2G memory:
 jail:httpd:memoryuse:deny=2G/jail

   Mit rctl ko:nnen auch Regeln entfernt werden:

 # rctl -r user:trhodes:maxproc:deny=10/user

   rctl(8) zeigt auch eine Mo:glichkeit, alle Regeln zu entfernen. Falls es
   erforderlich ist alle Regeln fu:r einen einzelnen Benutzer zu entfernen,
   kann dieser Befehl verwendet werden:

 # rctl -r user:trhodes

   Es gibt noch viele weitere Ressourcen, die verwendet werden ko:nnen, um
   zusa:tzliche subjects zu kontrollieren. Weitere Informationen zu diesem
   Thema finden Sie in rctl(8).

13.14. Gemeinsame Administration mit Sudo

   Beigetragen von Tom Rhodes.
   U:bersetzt von Bjo:rn Heidotting.

   Systemadministratoren beno:tigen ha:ufig die Mo:glichkeit, Benutzern
   erweiterte Berechtigungen zu gewa:hren, damit diese privilegierte Aufgaben
   ausfu:hren ko:nnen. Die Idee, dass Teammitglieder einen Zugang zu einem
   FreeBSD-System zur Verfu:gung gestellt bekommen, um ihre spezifischen
   Aufgaben erledigen zu ko:nnen, stellt den Administrator vor eine grosse
   Herausforderung. Diese Teammitglieder beno:tigen in der Regel nur einen
   eingeschra:nkten Zugang. Fu:r manche Aufgaben werden jedoch die Rechte des
   Superusers beno:tigt. Zum Glu:ck gibt es keinen Grund, diesen Mitgliedern
   einen solchen Zugang zu geben, da es Werkzeuge fu:r genau diesen
   Anwendungsfall gibt.

   Bislang wurde in diesem Kapitel immer versucht, den Zugriff fu:r
   autorisierte Benutzer zu gewa:hren und den Zugriff fu:r nicht autorisierte
   Benutzer zu verhindern. Ein weiteres Problem entsteht, sobald autorisierte
   Benutzer Zugriff auf die Ressourcen des Systems haben. In vielen Fa:llen
   beno:tigen einige Benutzer Zugriff auf Startskripte von Anwendungen. In
   anderen Fa:llen muss eine Gruppe von Administratoren das System verwalten.
   Traditionell wird der Zugriff u:ber Benutzer, Gruppen, Dateiberechtigungen
   und manchmal sogar su(1) verwaltet. Und da immer mehr Anwendungen einen
   Zugriff brauchen und immer mehr Benutzer Zugriff auf die Systemressourcen
   beno:tigen, ist ein besserer Lo:sungsansatz erforderlich. Die am
   ha:ufigsten verwendete Anwendung in solchen Fa:llen ist derzeit Sudo.

   Sudo erlaubt dem Administrator eine rigide Konfiguration des Zugriffs auf
   bestimmte Kommandos und stellt einige erweiterte Protokollfunktionen zur
   Verfu:gung. Dieses Werkzeug kann als Port oder Paket security/sudo
   installiert werden. Das Paket wird wie folgt installiert:

 # pkg install sudo

   Nach der Installation ko:nnen Sie visudo benutzen, um die Konfiguration in
   einem Texteditor zu o:ffnen. Es wird ausdru:cklich visudo empfohlen, da
   dieses Programm die Syntax auf Fehler u:berpru:ft, bevor die
   Konfigurationsdatei gespeichert wird.

   Die Konfigurationsdatei besteht aus mehreren kleinen Abschnitten, die eine
   umfangreiche Konfiguration ermo:glichen. Im folgenden Beispiel soll der
   Webentwickler (user1) den Dienst webservice starten und stoppen du:rfen.
   Um ihm dieses Recht zu gewa:hren, fu:gen Sie folgende Zeile an das Ende
   von /usr/local/etc/sudoers ein:

 user1   ALL=(ALL)       /usr/sbin/service webservice *

   Der Benutzer kann jetzt webservice u:ber dieses Kommando starten:

 % sudo /usr/sbin/service webservice start

   Diese Konfiguration gestattet den Zugriff auf den webservice fu:r einen
   einzelnen Benutzer. Jedoch ist in den meisten Organisationen ein ganzes
   Team fu:r die Verwaltung eines solchen Dienstes verantwortlich. Mit einer
   weiteren Zeile ist es mo:glich, einer ganzen Gruppe diesen Zugriff zu
   geben. Die folgenden Schritte erstellen eine Gruppe mit den entsprechenden
   Benutzern. Der Gruppe wird es dann ermo:glicht, diesen Dienst zu
   verwalten:

 # pw groupadd -g 6001 -n webteam

   Nun werden die Benutzer mit Hilfe von pw(8) in die Gruppe webteam
   hinzugefu:gt:

 # pw groupmod -m user1 -n webteam

   Zuletzt wird folgende Zeile in /usr/local/etc/sudoers hinzugefu:gt, damit
   jedes Mitglied von webteam den Dienst webservice verwalten kann:

 %webteam   ALL=(ALL)       /usr/sbin/service webservice *

   Im Gegensatz zu su(1), beno:tigt Sudo nur das Passwort des Benutzers.

   Benutzer, die mit Hilfe von Sudo Programme ausfu:hren, mu:ssen lediglich
   ihr eigenes Passwort eingeben. Dies ist sicherer und bietet eine bessere
   Kontrolle als su(1), wo der Benutzer das root-Passwort eingibt und damit
   alle Rechte von root erlangt.

  Tipp:

   Viele Organisationen haben bereits auf eine Zwei-Faktor-Authentifizierung
   umgestellt. In diesen Fa:llen hat der Benutzer mo:glicherweise gar kein
   Passwort, welches er eingeben ko:nnte. Sudo bietet fu:r solche Fa:lle die
   Variable NOPASSWD. Wenn die Variable in die obige Konfiguration
   hinzugefu:gt wird, du:rfen die Mitglieder der Gruppe webteam den Dienst
   verwalten, ohne ein Passwort eingeben zu mu:ssen:

 %webteam   ALL=(ALL)       NOPASSWD: /usr/sbin/service webservice *

  13.14.1. Protokollierung

   Ein Vorteil von Sudo ist, dass Sitzungen protokolliert werden ko:nnen. Mit
   den integrierten Protokollmechanismen und dem Befehl sudoreplay ko:nnen
   alle u:ber Sudo ausgelo:sten Befehle protokolliert und zu einem spa:teren
   Zeitpunkt u:berpru:ft werden. Um diese Funktion zu aktivieren, fu:gen Sie
   einen Eintrag fu:r das Verzeichnis der Protokolle hinzu. Dieses Beispiel
   verwendet eine Benutzervariable. Weitere Informationen finden Sie in der
   Manualpage von sudoreplay.

 Defaults iolog_dir=/var/log/sudo-io/%{user}

  Tipp:

   Dieses Verzeichnis wird automatisch nach der Konfiguration erstellt. Um
   auf der sicheren Seite zu sein, ist es am besten, das System die
   Verzeichnisse mit Standardberechtigungen erstellen zu lassen. Dieser
   Eintrag wird auch ein Protokoll fu:r Administratoren erstellen, wenn diese
   den Befehl sudoreplay benutzen. Um dieses Verhalten zu a:ndern,
   kommentieren Sie die entsprechenden Zeilen in sudoers aus.

   Nachdem dieser Eintrag in die Datei sudoers hinzugefu:gt wurde, kann die
   Konfiguration der Benutzer fu:r die Protokollierung aktualisiert werden.
   In dem gezeigten Beispiel wu:rde der aktualisierte Eintrag fu:r das
   webteam zusa:tzlich folgende A:nderung beno:tigen:

 %webteam ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: /usr/sbin/service webservice *

   Von nun an wird jede A:nderung am webservice protokolliert, wenn sie von
   einem Mitglied der Gruppe webteam initiiert wurde. Eine Liste der
   Sitzungen kann wie folgt angezeigt werden:

 # sudoreplay -l

   Wenn Sie eine bestimmte Sitzung wiedergeben mo:chten, suchen Sie in der
   Ausgabe nach dem Eintrag TSID= und u:bergeben Sie den Wert ohne weitere
   Optionen an sudoreplay. Zum Beispiel:

 # sudoreplay user1/00/00/02

  Warnung:

   Obwohl die Sitzungen protokolliert werden, kann ein bo:swilliger
   Administrator wahllos die Sitzungsprotokolle lo:schen. Daher ist es eine
   gute Idee, eine ta:gliche Kontrolle mit einem Intrusion Detection System
   (IDS) oder einer a:hnlichen Software durchzufu:hren, so dass andere
   Administratoren auf manuelle A:nderungen aufmerksam gemacht werden.

   sudoreplay ist extrem erweiterbar. Lesen Sie die Dokumentation fu:r
   weitere Informationen.

Kapitel 14. Jails

   Beigetragen von Matteo Riondato.
   U:bersetzt von Oliver Peter, Dirk Arlt und Johann Kois.
   Inhaltsverzeichnis

   14.1. U:bersicht

   14.2. Jails - Definitionen

   14.3. Einrichtung und Verwaltung von Jails

   14.4. Feinabstimmung und Administration

   14.5. Mehrere Jails aktualisieren

   14.6. Verwaltung von Jails mit ezjail

14.1. U:bersicht

   Da die Systemadministration eine schwierige Aufgabe ist, wurden viele
   Werkzeuge entwickelt, die Administratoren bei der Installation,
   Konfiguration und Wartung ihrer Systeme unterstu:tzen sollen. Eines dieser
   Werkzeuge, die verwendet werden ko:nnen um die Sicherheit eines
   FreeBSD-Systems zu erho:hen, sind Jails. Jails sind seit FreeBSD 4.X
   verfu:gbar und werden sta:ndig in ihrer Nu:tzlichkeit, Leistung,
   Zuverla:ssigkeit und Sicherheit verbessert. Jails ko:nnen als eine Art von
   Betriebssystem-Virtualisierung angesehen werden.

   Jails setzen auf dem chroot(2)-Konzept auf, das dazu verwendet wird das
   root-Verzeichnis einer Reihe von Prozessen zu a:ndern, um so eine
   separate, sichere Umgebung zu schaffen. Prozesse, die in einer
   chroot-Umgebung erstellt wurden, ko:nnen nicht auf Dateien oder Ressourcen
   zugreifen, die sich ausserhalb dieser Umgebung befinden. Dadurch ist es
   einem kompromittierten Dienst nicht mo:glich, das gesamte System zu
   kompromittieren. Im Laufe der Zeit wurden viele Wege gefunden, um aus
   einer chroot-Umgebung auszubrechen, so dass es fu:r die Sicherung von
   Diensten nicht die ideale Lo:sung ist.

   Jails verbessern das traditionelle chroot-Konzept auf unterschiedlichste
   Art und Weise. In einer traditionellen chroot-Umgebung sind Prozesse auf
   den Bereich des Dateisystems beschra:nkt, auf den sie zugreifen ko:nnen.
   Der Rest der Systemressourcen (wie zum Beispiel eine Reihe von
   Systembenutzern, die laufenden Prozesse oder das Netzwerk-Subsystem)
   teilen sich die chroot-Prozesse mit dem Host-System. Jails erweitern
   dieses Modell nicht nur auf die Virtualisierung des Zugriffs auf das
   Dateisystem, sondern auch auf eine Reihe von Benutzern und das
   Netzwerk-Subsystem. Zudem stehen weitere Mo:glichkeiten zur Verfu:gung,
   den Zugriff auf eine Jail-Umgebung zu kontrollieren.

   Eine Jail zeichnet sich durch folgende Merkmale aus:

     * Ein Unterverzeichnisbaum: dies ist der Ausgangspunkt der Jail. Einem
       Prozess, der innerhalb der Jail la:uft, ist es nicht mehr mo:glich,
       aus diesem Unterverzeichnis auszubrechen.

     * Ein Hostname: dieser Name wird fu:r die Jail verwendet.

     * Eine IP Adresse: diese Adresse wird der Jail zugewiesen. Die
       IP-Adresse einer Jails ist u:blicherweise ein Adress-Alias auf eine
       existierende Netzwerkschnittstelle.

     * Ein Kommando: der Pfad einer ausfu:hrbaren Datei, die innerhalb der
       Jail ausgefu:hrt werden soll. Dieser Pfad wird relativ zum
       root-Verzeichnis der Jail-Umgebung angegeben.

   Jails haben einen eigenen Satz von Benutzern und ihren eigenen root-Konto.
   Die Rechte dieser Benutzer sind nur auf die Jail-Umgebung beschra:nkt. Der
   Benutzer root der Jail-Umgebung ist nicht dazu berechtigt, kritische
   Operationen am System ausserhalb der angebundenen Jail-Umgebung
   durchzufu:hren.

   Dieses Kapitel bietet einen U:berblick u:ber die Terminologie und die
   Kommandos zur Verwaltung von FreeBSD Jails. Jails sind ein sehr ma:chtiges
   Werkzeug fu:r Administratoren und fortgeschrittene Anwender.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie

     * Wissen, was eine Jail ist und welche Verwendungszwecke es dafu:r unter
       FreeBSD gibt.

     * Wissen, wie man eine Jail erstellt, startet und anha:lt.

     * Die Grundlagen der Jail-Administration (sowohl innerhalb als auch
       ausserhalb des Jails) kennen.

  Wichtig:

   Jails sind ein ma:chtiges Werkzeug, aber sie sind kein
   Sicherheits-"Allheilmittel". Es ist wichtig zu beachten, dass es fu:r
   einen Prozess in der Jail nicht mo:glich ist, von selbst auszubrechen. Es
   gibt jedoch Mo:glichkeiten, in denen ein unprivilegierter Benutzer
   ausserhalb der Jail, mit einem privilegierten Benutzer innerhalb der Jail
   kooperiert, und somit erho:hte Rechte in der Host-Umgebung erlangt.

   Den meisten dieser Angriffe kann vorgebeugt werden, indem sichergestellt
   wird, dass das Rootverzeichnis der Jail fu:r unprivilegierte Benutzer der
   Host-Umgebung nicht zuga:nglich ist.

14.2. Jails - Definitionen

   Um die fu:r den Einsatz von Jails beno:tigten os;-Funktionen, deren
   Interna sowie die Art und Weise, mit der diese mit anderen Teilen des
   Betriebssystems interagieren, zu erla:utern, werden in diesem Kapitel
   folgende Definitionen verwendet:

   chroot(8) (-Befehl)

           Ein Werkzeug, das den FreeBSD-Systemaufruf chroot(2) verwendet, um
           das Wurzelverzeichnis eines Prozesses und all seiner
           Nachko:mmlinge zu a:ndern.

   chroot(2) (-Umgebung)

           Die Umgebung eines Prozesses, der in einem "chroot" la:uft. Diese
           beinhaltet Ressourcen, wie zum Beispiel sichtbare Abschnitte des
           Dateisystems, verfu:gbare Benutzer- und Gruppenkennungen,
           Netzwerkschnittstellen und weitere IPC-Mechanismen und so weiter.

   jail(8) (-Befehl)

           Das Systemadministrationswerkzeug, welches es erlaubt, Prozesse
           innerhalb der Jail-Umgebung zu starten.

   Host (-Benutzer, -Prozess, -System)

           Das verwaltende System einer Jail-Umgebung. Das Host-System hat
           Zugriff auf alle verfu:gbaren Hardwareressourcen und kann sowohl
           innerhalb als auch ausserhalb der Jail-Umgebung Prozesse steuern.
           Einer der wichtigsten Unterschiede des Host-System einer Jails
           ist, dass die Einschra:nkungen, welche fu:r die Superuser-Prozesse
           innerhalb eines Jails gelten, nicht fu:r die Prozesse des
           Host-Systems gelten.

   Gast (-Benutzer, -Prozess, -System)

           Ein Prozess, ein Benutzer oder eine andere Instanz, deren Zugriff
           durch eine FreeBSD-Jail eingeschra:nkt ist.

14.3. Einrichtung und Verwaltung von Jails

   Einige Administratoren unterscheiden zwei verschiedene Jail-Arten:
   "Komplette" Jails, die ein echtes FreeBSD darstellen und Jails fu:r einen
   bestimmten "Dienst", die nur einer bestimmten Anwendung oder einem Dienst
   (der mo:glicherweise mit besonderen Privilegien laufen soll) gewidmet
   sind. Dies ist aber nur eine konzeptuelle Unterscheidung, die Einrichtung
   einer Jail bleibt davon ga:nzlich unberu:hrt. Bei der Erstellung einer
   kompletten Jail gibt es zwei Optionen fu:r die Quelle des Userlands:
   vorkompilierte Bina:rpakete (im Lieferumfang der Installationsmedien
   enthalten) oder die Kompilierung aus dem Quelltext.

   Um das Basissystem von Installationsmedien zu installieren, erstellen Sie
   zuna:chst das Rootverzeichnis fu:r die Jail. Dazu setzen Sie DESTDIR auf
   das entsprechende Verzeichnis.

   Starten Sie eine Shell und legen Sie DESTDIR fest:

 # sh
 # export DESTDIR=/hier/ist/die/jail

   Ha:ngen Sie das Installationsmedium wie in mdconfig(8) beschrieben ein,
   wenn Sie von einem ISO-Abbild installieren:

 # mount -t cd9660 /dev/`mdconfig -f cdimage.iso` /mnt

   Extrahieren Sie die Bina:rdateien aus den Archiven des
   Installationsmediums in das entsprechende Verzeichnis. Es wird mindestens
   das "base"-Set beno:tigt, aber Sie ko:nnen auch eine komplette
   Installation durchfu:hren, wenn Sie dies bevorzugen.

   Um lediglich das Basissystem zu installieren, fu:hren Sie die
   nachstehenden Kommandos aus:

 # tar -xf /mnt/freebsd_install/usr/freebsd-dist/base.txz -C $DESTDIR

   Fu:hren Sie folgendes Kommando in sh(1) aus, um alles ausser den Kernel zu
   installieren:

 # for set in BASE PORTS; do tar -xf /mnt/usr/freebsd-dist/$set.txz -C $DESTDIR ; done

   Die Manualpage jail(8) beschreibt die Erstellung einer Jail wie folgt:

 # setenv D /hier/ist/die/jail
 # mkdir -p $D      1
 # cd /usr/src
 # make buildworld  2
 # make installworld DESTDIR=$D  3
 # make distribution DESTDIR=$D  4
 # mount -t devfs devfs $D/dev   5

   1 Das Festlegen des Installationsorts fu:r das Jail eignet sich am besten  
     als Startpunkt. Hier wird sich die Jail innerhalb des Host-Dateisystems  
     befinden. Eine gute Mo:glichkeit wa:re etwa /usr/jail/name_der_jail,     
     wobei name_der_jail den Hostname darstellt, u:ber den die Jail           
     identifiziert werden soll. /usr/ stellt normalerweise ausreichend Platz  
     fu:r eine Jail zur Verfu:gung. Bedenken Sie, dass eine "komplette" Jail  
     ein Replikat einer jeden Datei der Standardinstallation des              
     FreeBSD-Basissystems entha:lt.                                           
   2 Wenn Sie bereits ihre Systemanwendungen mittels make world oder make     
     buildworld neu erstellt haben, ko:nnen Sie diesen Schritt u:berspringen  
     und die Systemanwendungen in die neue Jail installieren.                 
   3 Dieser Befehl wird den Verzeichnisbaum mit allen notwendigen             
     Bina:rdateien, Bibliotheken, Manualpages usw. erstellen.                 
   4 Der distribution-Befehl la:sst make alle beno:tigten                     
     Konfigurationsdateien installieren, es werden also alle installierbaren  
     Dateien aus /usr/src/etc/ in das Verzeichnis /etc der Jail installiert   
     (also nach $D/etc/).                                                     
   5 Das Einha:ngen des devfs(8)-Dateisystems innerhalb der Jail ist nicht    
     unbedingt notwendig. Allerdings beno:tigt fast jede Anwendung Zugriff    
     auf wenigstens ein Gera:t. Es ist daher sehr wichtig, den Zugriff auf    
     Devices aus der Jail heraus zu kontrollieren, da unsaubere Einstellungen 
     es einem Angreifer erlauben ko:nnten, in das System einzudringen. Die    
     Kontrolle u:ber devfs(8) erfolgt durch die in den Manualpages devfs(8)   
     und devfs.conf(5) beschriebenen Regeln.                                  

   Ist die Jail erst einmal erstellt, kann sie durch jail(8) gestartet
   werden. jail(8) beno:tigt zwingend mindestens vier Argumente, die in
   Abschnitt 14.1, "U:bersicht" des Handbuchs beschrieben sind. Weitere
   Argumente sind mo:glich, um beispielsweise die Jail mit den Berechtigungen
   eines bestimmten Benutzers laufen zu lassen. Das Argument command ha:ngt
   vom Typ der Jail ab; fu:r ein virtuelles System ist /etc/rc eine gute
   Wahl, da dies dem Startvorgang eines echten FreeBSD-Systems entspricht.
   Bei einer Service-Jail ha:ngt dieses von der Art des Dienstes ab, der in
   der Jail laufen soll.

   Jails werden ha:ufig mit dem Betriebssystem gestartet, da der
   rc-Mechanismus von FreeBSD dafu:r eine einfach zu realisierende
   Mo:glichkeit bietet.

     * Konfigurieren Sie die Jail in /etc/jail.conf:

 www {
     host.hostname = www.example.org;            # Hostname
     ip4.addr = 192.168.0.10;                    # IP address of the jail
     path = "/usr/jail/www";                     # Path to the jail
     devfs.ruleset = "www_ruleset";              # devfs ruleset
     mount.devfs;                                # Mount devfs inside the jail
     exec.start = "/bin/sh /etc/rc";             # Start command
     exec.stop = "/bin/sh /etc/rc.shutdown";     # Stop command
 }

       Um die Jails mit dem Betriebssystem zu starten, fu:gen Sie folgende
       Zeile in /etc/rc.conf ein:

 jail_enable="YES"   # Set to NO to disable starting of any jails

       Beim Start einer in jail.conf(5) konfigurierten Jail wird das
       /etc/rc-Skript der Jail (das "annimmt", dass es sich in einem
       kompletten System befindet) aufgerufen. Fu:r Service-Jails sollten die
       Startskripte der Jail durch das Setzen der Option exec.start
       entsprechend angepasst werden.

  Anmerkung:

       Eine vollsta:ndige Liste der Optionen findet sich in der Manualpage
       jail.conf(5).

   service(8) kann zum manuellen Starten und Stoppen der Jail genutzt werden,
   wenn ein Eintrag in jail.conf angelegt wurde:

 # service jail start www
 # service jail stop www

   Jails ko:nnen mit jexec(8) heruntergefahren werden. Fu:hren Sie zuna:chst
   jls(8) aus, um die JID der Jail ausfindig zu machen. Anschliessend ko:nnen
   Sie jexec(8) benutzen, um das Shutdown-Skript in der Jail auszufu:hren.

 # jls
    JID  IP Address      Hostname                      Path
      3  192.168.0.10    www                           /usr/jail/www
 # jexec 3 /etc/rc.shutdown

   Weitere Informationen zu diesem Thema finden Sie in der Manualpage
   jail(8).

14.4. Feinabstimmung und Administration

   Es gibt verschiedene Optionen, die fu:r jede Jail gesetzt werden ko:nnen
   und verschiedene Wege, ein FreeBSD-Host-System mit Jails zu kombinieren.
   Dieser Abschnitt zeigt Ihnen:

     * Einige zur Verfu:gung stehende Optionen zur Abstimmung des Verhaltens
       und der Sicherheitseinstellungen, die mit einer Jail-Installation
       ausgefu:hrt werden ko:nnen.

     * Einige der Anwendungsprogramme fu:r das Jail-Management, die u:ber die
       FreeBSD Ports-Sammlung verfu:gbar sind und genutzt werden ko:nnen, um
       Jail-basierte Lo:sungen allumfassend umzusetzen.

  14.4.1. Systemwerkzeuge zur Feinabstimmung von Jails in FreeBSD

   Die Feinabstimmung einer Jail-Konfiguration erfolgt zum Grossteil durch
   das Setzen von sysctl(8)-Variablen. Es gibt einen speziellen sysctl-Zweig,
   der als Basis fu:r die Organisation aller relevanten Optionen dient: Die
   security.jail.*-Hierarchie der FreeBSD-Kerneloptionen. Die folgende Liste
   entha:lt alle jail-bezogenen sysctls (inklusiver ihrer Voreinstellungen).
   Die Namen sollten selbsterkla:rend sein, fu:r weitergehende Informationen
   lesen Sie bitte die Manualpages jail(8) und sysctl(8).

     * security.jail.set_hostname_allowed: 1

     * security.jail.socket_unixiproute_only: 1

     * security.jail.sysvipc_allowed: 0

     * security.jail.enforce_statfs: 2

     * security.jail.allow_raw_sockets: 0

     * security.jail.chflags_allowed: 0

     * security.jail.jailed: 0

   Diese Variablen ko:nnen vom Administrator des Host-Systems genutzt werden,
   um Beschra:nkungen hinzuzufu:gen oder aufzuheben, die dem Benutzer root
   als Vorgabe auferlegt sind. Beachten Sie, dass es einige Beschra:nkungen
   gibt, die nicht vera:ndert werden ko:nnen. Der Benutzer root darf
   innerhalb der jail(8) keine Dateisysteme mounten und unmounten. Ebenso ist
   es ihm untersagt, das devfs(8)-Regelwerk zu laden oder zu entladen. Er
   darf weder Firewallregeln setzen, noch administrative Aufgaben erledigen,
   die Modifikationen am Kernel selbst erfordern (wie beispielsweise das
   Setzen des Securelevels fu:r den Kernel).

   Das FreeBSD-Basissystem entha:lt einen Basissatz an Werkzeugen, um
   Informationen u:ber aktive Jails zu erlangen und einer Jail administrative
   Befehle zuzuordnen. Die Befehle jls(8) und jexec(8) sind Teil des
   FreeBSD-Basissystems und ko:nnen fu:r folgende Aufgaben verwendet werden:

     * Das Anzeigen einer Liste der aktiven Jails und ihrer zugeho:rigen Jail
       Identifier (JID), ihrer IP-Adresse, ihres Hostnames und ihres Pfades.

     * Das Herstellen einer Verbindung mit einer laufenden Jail, das Starten
       eines Befehls aus dem Gastsystem heraus oder das Ausfu:hren einer
       administrativen Aufgabe innerhalb der Jail selbst. Dies ist
       insbesondere dann nu:tzlich, wenn der Benutzer root die Jail sauber
       herunterfahren mo:chte. jexec(8) kann auch zum Starten einer Shell
       innerhalb der Jail genutzt werden, um administrative Aufgaben
       durchzufu:hren:

 # jexec 1 tcsh

  14.4.2. High-Level-Werkzeuge zur Jail-Administration in der FreeBSD
  Ports-Sammlung

   Unter den zahlreichen Werkzeugen fu:r die Administration von Jails ist
   sysutils/ezjail am vollsta:ndigsten und brauchbarsten. Dabei handelt es
   sich um eine Sammlung von Skripten, die das jail(8)-Management
   vereinfachen. Weitere Informationen zu diesem Werkzeug finden Sie im
   Abschnitt u:ber ezjail.

  14.4.3. Jails auf dem aktuellen Stand halten

   Jails sollten immer vom Host-System auf dem neuesten Stand gehalten
   werden, da eine Aktualisierung aus einer Jail heraus wahrscheinlich
   fehlschla:gt, da in der Voreinstellung von FreeBSD die Verwendung von
   chflags(1) in einem Jail nicht erlaubt ist und somit der Austausch einiger
   Dateien verhindert wird. Es ist zwar mo:glich, dieses Verhalten zu
   a:ndern, aber es wird empfohlen, freebsd-update(8) zu benutzen, um die
   Jails zu aktualisieren. Verwenden Sie -b mit dem Pfad der Jail, die Sie
   aktualisieren mo:chten.

 # freebsd-update -b /hier/ist/die/jail fetch
 # freebsd-update -b /hier/ist/die/jail install

14.5. Mehrere Jails aktualisieren

   Beigetragen von Daniel Gerzo.
   Basierend auf einer Idee von Simon L. B. Nielsen.
   Artikel geschrieben von Ken Tom.

   Die Verwaltung von mehreren Jails kann problematisch sein, da jede Jail
   bei jedem Upgrade komplett neu gebaut werden muss. Dieser Prozess kann
   sehr zeitaufwa:ndig sein, wenn eine grosse Anzahl von Jails erstellt oder
   manuell aktualisiert werden mu:ssen.

   Dieser Abschnitt beschreibt eine Methode zur Lo:sung dieses Problems,
   indem so viel wie mo:glich zwischen Jails, auf sichere Art und Weise,
   durch den Einsatz von mount_nullfs(8)-Mounts geteilt wird. Dadurch werden
   Aktualisierungen erleichtert und das Verteilen von verschiedenen Diensten,
   wie HTTP, DNS und SMTP, auf verschiedene Jails wird attraktiver. Ausserdem
   bietet dieses Verfahren einen einfachen Weg, Jails zu erstellen, zu
   entfernen und zu aktualisieren.

  Anmerkung:

   Es existieren auch einfachere Lo:sungen, wie zum Beispiel ezjail, das
   einfachere Methoden zur Administration von Jails verwendet und daher nicht
   so anspruchsvoll ist, wie der hier beschriebene Aufbau. ezjail wird in
   Abschnitt 14.6, "Verwaltung von Jails mit ezjail" ausfu:hrlich behandelt.

   Die Ziele des in diesem Abschnitt beschriebenen Aufbaus sind:

     * Das Erstellen einer einfachen und gut versta:ndlichen Jail Struktur,
       die es nicht erfordert fu:r jede Jail ein vollsta:ndiges installworld
       laufen lassen zu mu:ssen.

     * Es einfach zu machen, neue Jails zu erstellen oder alte zu entfernen.

     * Es einfach zu machen, bestehende Jails zu aktualisieren.

     * Es einfach zu machen, einen angepassten FreeBSD-Zweig zu nutzen.

     * Paranoid bezu:glich Sicherheit zu sein und Angriffsmo:glichkeiten
       weitgehend zu reduzieren.

     * Soviel Platz und Inodes wie mo:glich einzusparen.

   Dieses Design ist darauf angewiesen, dass eine read-only-Hauptvorlage in
   jede Jail hinein gemountet wird und dass jede Jail u:ber wenigstens ein
   beschreibbares Gera:t verfu:gt. Das Gera:t kann hierbei eine separate
   physikalische Platte oder ein vnode unterstu:tztes Speichergera:t sein. Im
   folgenden Beispiel wird ein read/write nullfs-Mount genutzt.

   Das Layout des Dateisystems ist wie folgt:

     * Die Jails befinden sich unterhalb der /home Partition.

     * Jede Jail wird unterhalb des /home/j-Verzeichnisses gemountet.

     * /home/j/mroot ist die Vorlage fu:r jede Jail und die nur lesbare
       Partition fu:r alle Jails.

     * Unterhalb von /home/j wird fu:r jede Jail ein leeres Verzeichnis
       angelegt.

     * Jede Jail bekommt ein /s-Verzeichnis, das zum read/write-Teilbereich
       des Systems verlinkt wird.

     * Jede Jail bekommt ihr eigenes read/write-System, das auf /home/j/skel
       basiert.

     * Der read/write-Teilbereich jeder Jail wird in /home/js erstellt.

  14.5.1. Erstellen der Vorlage

   Dieser Abschnitt beschreibt die Schritte, die zum Erstellen der
   Hauptvorlage notwendig sind.

   Es wird empfohlen, zuna:chst das FreeBSD Host-System nach den Anweisungen
   in Abschnitt 23.5, "FreeBSD aus den Quellen aktualisieren" auf den
   aktuellen -RELEASE-Zweig zu aktualisieren. Daru:ber hinaus verwendet diese
   Vorlage sysutils/cpdup, sowie portsnap zum herunterladen der FreeBSD
   Ports-Sammlung.

    1. Zuerst erstellen wir eine Verzeichnisstruktur fu:r das
       read-only-Dateisystem, das die FreeBSD-Bina:rdateien fu:r die Jails
       enthalten wird. Anschliessend wechseln wir in den
       FreeBSD-Quellcodebaum und installieren das read-only-Dateisystem in
       die (Vorlage-)Jail.

 # mkdir /home/j /home/j/mroot
 # cd /usr/src
 # make installworld DESTDIR=/home/j/mroot

    2. Als na:chstes bereiten wir die Ports-Sammlung fu:r die Jails vor und
       kopieren den FreeBSD Quellcodebaum in die Jail, da dieser fu:r
       mergemaster beno:tigt wird:

 # cd /home/j/mroot
 # mkdir usr/ports
 # portsnap -p /home/j/mroot/usr/ports fetch extract
 # cpdup /usr/src /home/j/mroot/usr/src

    3. Danach wird die Struktur fu:r den read/write-Bereich des Systems
       erstellt:

 # mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles
 # mv etc /home/j/skel
 # mv usr/local /home/j/skel/usr-local
 # mv tmp /home/j/skel
 # mv var /home/j/skel
 # mv root /home/j/skel

    4. Nutzen Sie mergemaster, um fehlende Konfigurationsdateien zu
       installieren. Anschliessend werden die von mergemaster erstellten
       Extra-Verzeichnisse entfernt:

 # mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i
 # cd /home/j/skel
 # rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev

    5. Nun wird das read/write-Dateisystem mit dem read-only-Dateisystem
       verlinkt. Vergewissern Sie sich, dass die symbolischen Links an den
       korrekten s/ Positionen erstellt werden, weil echte Verzeichnisse oder
       an falschen Positionen erstellte Verzeichnisse die Installation
       fehlschlagen lassen.

 # cd /home/j/mroot
 # mkdir s
 # ln -s s/etc etc
 # ln -s s/home home
 # ln -s s/root root
 # ln -s s/usr-local usr/local
 # ln -s s/usr-X11R6 usr/X11R6
 # ln -s s/distfiles usr/ports/distfiles
 # ln -s s/tmp tmp
 # ln -s s/var var

    6. Zuletzt erstellen Sie eine allgemeine /home/j/skel/etc/make.conf mit
       folgendem Inhalt:

 WRKDIRPREFIX?=  /s/portbuild

       Dies erlaubt es, die FreeBSD-Ports innerhalb jeder Jail zu
       kompilieren. Das Ports-Verzeichnis ist Teil des read-only System. Der
       angepasste Pfad des WRKDIRPREFIX macht es mo:glich, innerhalb des
       read/write-Bereichs der Jail Ports zu bauen.

  14.5.2. Jails erstellen

   Die Jailvorlage kann nun verwendet werden, um die Jails einzurichten und
   in /etc/rc.conf zu konfigurieren. In diesem Beispiel werden drei Jails
   erstellt: NS, MAIL und WWW.

    1. Fu:gen Sie die folgenden Zeilen in /etc/fstab ein, damit die
       read-only-Vorlage und der read/write-Bereich fu:r alle Jails
       verfu:gbar sind:

 /home/j/mroot   /home/j/ns     nullfs  ro  0   0
 /home/j/mroot   /home/j/mail   nullfs  ro  0   0
 /home/j/mroot   /home/j/www    nullfs  ro  0   0
 /home/js/ns     /home/j/ns/s   nullfs  rw  0   0
 /home/js/mail   /home/j/mail/s nullfs  rw  0   0
 /home/js/www    /home/j/www/s  nullfs  rw  0   0

       Um zu verhindern, dass fsck die nullfs-Mounts wa:hrend des Bootens
       u:berpru:ft oder dass dump die Mounts sichert, mu:ssen die letzten
       beiden Spalten auf 0 gesetzt werden.

    2. Konfigurieren Sie die Jails in /etc/rc.conf:

 jail_enable="YES"
 jail_set_hostname_allow="NO"
 jail_list="ns mail www"
 jail_ns_hostname="ns.example.org"
 jail_ns_ip="192.168.3.17"
 jail_ns_rootdir="/usr/home/j/ns"
 jail_ns_devfs_enable="YES"
 jail_mail_hostname="mail.example.org"
 jail_mail_ip="192.168.3.18"
 jail_mail_rootdir="/usr/home/j/mail"
 jail_mail_devfs_enable="YES"
 jail_www_hostname="www.example.org"
 jail_www_ip="62.123.43.14"
 jail_www_rootdir="/usr/home/j/www"
 jail_www_devfs_enable="YES"

       Die Variable jail_name_rootdir zeigt nach /usr/home statt nach /home,
       da der physikalische Pfad von /home unter FreeBSD /usr/home lautet.
       Die Variable jail_name_rootdir darf im Pfad aber keinen symbolischen
       Link enthalten, weil die Jail ansonsten nicht gestartet werden kann.

    3. Erstellen Sie die notwendigen Mountpunkte fu:r die nur lesbaren
       Bereiche jeder Jail:

 # mkdir /home/j/ns /home/j/mail /home/j/www

    4. Installieren Sie mit sysutils/cpdup die read/write-Vorlage in jede
       Jail:

 # mkdir /home/js
 # cpdup /home/j/skel /home/js/ns
 # cpdup /home/j/skel /home/js/mail
 # cpdup /home/j/skel /home/js/www

    5. An dieser Stelle werden die Jails erstellt und fu:r den Betrieb
       vorbereitet. Mounten Sie zuerst die notwendigen Dateisysteme fu:r jede
       Jail. Danach starten Sie die Jails:

 # mount -a
 # service jail start

   Die Jails sollten nun laufen. Um zu pru:fen, ob sie korrekt gestartet
   wurden, verwenden Sie jls. Die Ausgabe sollte a:hnlich der folgenden sein:

 # jls
    JID  IP Address      Hostname                      Path
      3  192.168.3.17    ns.example.org                /home/j/ns
      2  192.168.3.18    mail.example.org              /home/j/mail
      1  62.123.43.14    www.example.org               /home/j/www

   An diesem Punkt sollte es mo:glich sein, sich an jeder Jail anzumelden,
   Benutzer anzulegen und Dienste zu konfigurieren. Die Spalte JID gibt die
   Jail-Identifikationsnummer jeder laufenden Jail an. Nutzen Sie den
   folgenden Befehl, um administrative Aufgaben in der Jail mit der JID 3
   durchzufu:hren:

 # jexec 3 tcsh

  14.5.3. Jails aktualisieren

   Das Design dieses Aufbaus bietet einen einfachen Weg, bestehende Jails zu
   aktualisieren, wa:hrend die Ausfallzeiten minimiert werden. Ausserdem
   bietet es die Mo:glichkeit, zu a:lteren Versionen zuru:ckzukehren, falls
   irgendwelche Probleme auftreten.

    1. Im ersten Schritt wird das Host-System aktualisiert. Anschliessend
       wird eine tempora:re neue read-only Vorlage /home/j/mroot2 erstellt.

 # mkdir /home/j/mroot2
 # cd /usr/src
 # make installworld DESTDIR=/home/j/mroot2
 # cd /home/j/mroot2
 # cpdup /usr/src usr/src
 # mkdir s

       installworld erzeugt einige unno:tige Verzeichnisse, die nun entfernt
       werden sollten:

 # chflags -R 0 var
 # rm -R etc var root usr/local tmp

    2. Erzeugen Sie neue symbolische Links fu:r das Hauptdateisystem:

 # ln -s s/etc etc
 # ln -s s/root root
 # ln -s s/home home
 # ln -s ../s/usr-local usr/local
 # ln -s ../s/usr-X11R6 usr/X11R6
 # ln -s s/tmp tmp
 # ln -s s/var var

    3. Nun ko:nnen die Jails gestoppt werden:

 # service jail stop

    4. Ha:ngen Sie die originalen Dateisysteme aus, da die read/write-Systeme
       an das read-only System (/s) angeschlossen sind:

 # umount /home/j/ns/s
 # umount /home/j/ns
 # umount /home/j/mail/s
 # umount /home/j/mail
 # umount /home/j/www/s
 # umount /home/j/www

    5. Verschieben Sie das alte read-only-Dateisystem und ersetzen Sie es
       durch das neue Dateisystem. Das alte Dateisystem kann so als Backup
       dienen, falls etwas schief geht. Die Namensgebung entspricht hier
       derjenigen bei der Erstellung eines neuen read-only-Dateisystems.
       Verschieben Sie die originale FreeBSD Ports-Sammlung in das neue
       Dateisystem, um Platz und Inodes zu sparen:

 # cd /home/j
 # mv mroot mroot.20060601
 # mv mroot2 mroot
 # mv mroot.20060601/usr/ports mroot/usr

    6. Nun ist die neue read-only-Vorlage fertig. Sie mu:ssen daher nur noch
       die Dateisysteme erneut mounten und die Jails starten:

 # mount -a
 # service jail start

   Nutzen Sie jls um zu pru:fen, ob die Jails korrekt gestartet wurden.
   Fu:hren Sie innerhalb jeder Jail mergemaster aus, damit die
   Konfigurationsdateien aktualisiert werden.

14.6. Verwaltung von Jails mit ezjail

   Beigetragen von Warren Block.
   U:bersetzt von Bjo:rn Heidotting.

   Das Erstellen und Verwalten von mehreren Jails kann schnell zeitaufwa:ndig
   und fehleranfa:llig werden. Dirk Engling's ezjail automatisiert und
   vereinfacht viele dieser Aufgaben. Als Vorlage wird ein Basejail erzeugt.
   Zusa:tzliche Jails nutzen mount_nullfs(8) um viele Verzeichnisse aus der
   Basejail zu teilen, ohne dabei zusa:tzlichen Speicherplatz zu belegen.
   Jedes weitere Jail beno:tigt daher nur wenige Megabyte an Speicherplatz,
   bevor die Anwendungen installiert werden.

   Weitere Vorteile und Merkmale werden im Detail auf der Webseite von ezjail
   beschrieben: https://erdgeist.org/arts/software/ezjail/.

  14.6.1. ezjail installieren

   Fu:r die Installation von ezjail wird zuna:chst eine
   Loopback-Schnittstelle fu:r die Jails beno:tigt. Anschliessend kann ezjail
   installiert und der dazugeho:rige Dienst aktiviert werden.

    1. Damit der Verkehr auf der Loopback-Schnittstelle des Jails vom
       Host-System separiert ist, wird eine zweite Loopback-Schnittstelle in
       /etc/rc.conf erstellt:

 cloned_interfaces="lo1"

       Die zusa:tzliche Schnittstelle lo1 wird erstellt, wenn das System neu
       gestartet wird. Die Schnittstelle kann auch ohne Neustart manuell
       erstellt werden:

 # service netif cloneup
 Created clone interfaces: lo1.

       Jails ko:nnen die Aliase dieser sekunda:ren Schnittstelle verwenden,
       ohne dabei das Host-System zu sto:ren.

       Der Zugang zur Loopback-Adresse 127.0.0.1 wird an die erste IP-Adresse
       umgeleitet, die dem Jail zugewiesen ist. Damit die
       Loopback-Schnittstelle des Jails der neuen lo1-Schnittstelle
       zugeordnet werden kann, muss beim Erstellen der Jail diese
       Schnittstelle als erstes in der Liste der IP-Adressen angegeben
       werden.

       Teilen Sie jedem Jail eine Loopback-Adresse aus dem Netzblock
       127.0.0.0/8 zu.

    2. Installieren Sie sysutils/ezjail:

 # cd /usr/ports/sysutils/ezjail
 # make install clean

    3. Aktivieren Sie ezjail, indem Sie folgende Zeile in /etc/rc.conf
       hinzufu:gen:

 ezjail_enable="YES"

    4. Der Dienst wird automatisch gestartet, wenn das System bootet. Er kann
       auch direkt fu:r die aktuelle Sitzung gestartet werden:

 # service ezjail start

  14.6.2. Einrichtung

   Nach erfolgreicher Installation von ezjail kann die Verzeichnisstruktur
   fu:r die Basejail erstellt und befu:llt werden. Dieser Schritt wird
   einmalig auf dem Host-System ausgefu:hrt.

   In diesen beiden Beispielen wird -p verwendet, um die Ports-Sammlung mit
   portsnap(8) in die Basejail herunterzuladen. Diese Kopie kann dann von
   allen Jails gemeinsam genutzt werden. Eine separate Kopie der
   Ports-Sammlung fu:r die Jails ermo:glicht die Isolierung der Ports vom
   Host-System. Die FAQ von ezjail erkla:rt dies im Detail:
   https://erdgeist.org/arts/software/ezjail/#FAQ.

     *    * Die Jail mit FreeBSD-RELEASE installieren

            Benutzen Sie install, wenn das FreeBSD-RELEASE fu:r die Jail der
            Version auf dem Host-System entspricht. Wenn beispielsweise auf
            dem Host-System FreeBSD 10-STABLE installiert ist, wird in der
            Jail das neueste RELEASE von FreeBSD-10 installiert:

 # ezjail-admin install -p

          * Die Jail mit installworld installieren

            Mit ezjail-admin update kann die Basejail mit den Bina:rdateien
            aus dem Host-System befu:llt werden. Diese Dateien wurden auf dem
            Host-System mittels buildworld erzeugt.

            In diesem Beispiel wird FreeBSD 10-STABLE aus den Quellen gebaut.
            Die Verzeichnisse fu:r die Jail wurden bereits erstellt.
            Anschliessend wird installworld ausgefu:hrt, das /usr/obj aus dem
            Host-System in die Basejail installiert.

 # ezjail-admin update -i -p

            In der Voreinstellung wird /usr/src des Host-Systems verwendet.
            Ein anderes Quellverzeichnis kann durch die Angabe von -s, oder
            durch Setzen der Variable ezjail_sourcetree in
            /usr/local/etc/ezjail.conf definiert werden.

  Tipp:

   Die Ports-Sammlung der Basejail wird mit den anderen Jails geteilt, jedoch
   werden die heruntergeladenen Distfiles im jeweiligen Jail gespeichert. In
   der Voreinstellung werden diese Dateien in /var/ports/distfiles der Jail
   gespeichert. Wenn die Ports gebaut werden, wird /var/ports im Jail als
   Arbeitsverzeichnis genutzt.

  Tipp:

   Zum herunterladen der Pakete, fu:r die Installation in der Basejail, wird
   in der Voreinstellung das FTP-Protokoll verwendet. Firewalls und Proxies
   ko:nnen jedoch bei der FTP-U:bertragung Probleme verursachen. Das
   HTTP-Protokoll arbeitet anderes und vermeidet diese Probleme. Sie ko:nnen
   eine URL fu:r einen bestimmten Spiegel in /usr/local/etc/ezjail.conf
   eintragen:

 ezjail_ftphost=http://ftp.FreeBSD.org

   Im Abschnitt A.2, "FTP-Server" finden Sie eine Liste mit Spiegeln.

  14.6.3. Eine neue Jail erstellen und starten

   Neue Jails werden mit ezjail-admin create erstellt. In diesen Beispielen
   wird die lo1 Loopback-Schnittstelle, wie oben beschrieben, verwendet.

   Prozedur 14.1. Eine neue Jail erstellen und starten
    1. Geben Sie bei der Erstellung der Jail einen Namen und die verwendeten
       Loopback- und Netzwerk-Schnittstellen mit den IP-Adressen an. In
       diesem Beispiel tra:gt die Jail den Namen dnsjail.

 # ezjail-admin create dnsjail 'lo1|127.0.1.1,em0|192.168.1.50'

  Tipp:

       Die meisten Netzwerkdienste laufen problemlos in einer Jail. Ein paar
       wenige Netzwerkdienste, vor allem ping(8) verwenden Netzwerk-Sockets.
       Aus Sicherheitsgru:nden werden Netzwerk-Sockets innerhalb der Jails
       deaktiviert, so dass Dienste, die diese Sockets beno:tigten, nicht
       funktionieren werden. Gelegentlich beno:tigt ein Jail jedoch den
       Zugriff auf Raw-Sockets. Beispielsweise verwenden
       Netzwerk-Monitoring-Anwendungen ping(8), um die Verfu:gbarkeit von
       anderen Rechnern zu u:berpru:fen. Sollten diese Sockets tatsa:chlich
       beno:tigt werden, ko:nnen sie durch einen Eintrag in der
       Konfigurationsdatei von ezjail, /usr/local/etc/jailname, fu:r einzelne
       Jails aktiviert werden. Bearbeiten Sie den Eintrag parameters:

 export jail_jailname_parameters="allow.raw_sockets=1"

       Aktivieren Sie keine Netzwerk-Sockets, solange die Dienste im Jail sie
       nicht tatsa:chlich beno:tigen.

    2. Starten Sie die Jail:

 # ezjail-admin start dnsjail

    3. Starten Sie eine Konsole in der Jail:

 # ezjail-admin console dnsjail

   Die Jail ist jetzt in Betrieb und die zusa:tzliche Konfiguration kann nun
   abgeschlossen werden. Typische Einstellungen an dieser Stelle sind:

    1. Das root-Passwort setzen

       Verbinden Sie sich mit der Jail und setzen Sie das Passwort fu:r den
       Benutzer root:

 # ezjail-admin console dnsjail
 # passwd
 Changing local password for root
 New Password:
 Retype New Password:

    2. Konfiguration der Zeitzone

       Die Zeitzone kann innerhalb der Jail mit tzsetup(8) gesetzt werden. Um
       sto:rende Fehlermeldungen zu vermeiden, kann der Eintrag adjkerntz(8)
       in /etc/crontab auskommentiert werden. Dieser Job versucht die Uhr des
       Rechners zu aktualisieren, was jedoch in einem Jail fehlschla:gt, da
       die Jail nicht auf diese Hardware zugreifen darf.

    3. DNS-Server

       Tragen Sie die Zeilen fu:r die Nameserver der Doma:ne in
       /etc/resolv.conf ein, damit die Namensauflo:sung in der Jail
       funktioniert.

    4. /etc/hosts anpassen

       A:ndern Sie die Adresse und fu:gen Sie den Namen der Jail zu den
       localhost-Eintra:gen in /etc/hosts hinzu.

    5. /etc/rc.conf konfigurieren

       Tragen Sie Konfigurationseinstellungen in /etc/rc.conf ein. Der
       Rechnername und die IP-Adresse werden nicht eingestellt, da diese
       Werte bereits durch die Jail-Konfiguration zur Verfu:gung gestellt
       werden.

   Nach der Konfiguration der Jail ko:nnen die Anwendungen, fu:r die die Jail
   erstellt wurde, installiert werden.

  Tipp:

   Einige Ports mu:ssen mit speziellen Optionen gebaut werden, damit sie in
   der Jail verwendet werden ko:nnen. Zum Beispiel haben die
   Netzwerk-Monitoring-Pakete net-mgmt/nagios-plugins und
   net-mgmt/monitoring-plugins eine Option JAIL, die aktiviert werden muss,
   damit diese Werkzeuge innerhalb einer Jail funktionieren.

  14.6.4. Jails aktualisieren

    14.6.4.1. Das Betriebssystem aktualisieren

   Da das Basissystem der Basejail von den anderen Jails gemeinsam genutzt
   wird, werden bei einem Update der Basejail automatisch alle anderen Jails
   aktualisiert. Die Aktualisierung kann entweder u:ber den Quellcode oder
   u:ber bina:re Updates erfolgen.

   Um das Basissystem auf dem Host-System zu bauen und in der Basejail zu
   installieren, geben Sie folgendes ein:

 # ezjail-admin update -b

   Wenn das Basissystem bereits auf dem Host-System gebaut wurde, kann es in
   der Basejail installiert werden:

 # ezjail-admin update -i

   Bina:r-Updates verwenden freebsd-update(8). Das Update unterliegt dabei
   den gleichen Einschra:nkungen, als wenn freebsd-update(8) direkt
   ausgefu:hrt wu:rde. Vor allem stehen mit dieser Methode nur -RELEASE
   Versionen von FreeBSD zur Verfu:gung.

   Aktualisieren Sie die Basejail auf die neueste FreeBSD-Version des
   Host-Systems. Zum Beispiel von RELEASE-p1 auf RELEASE-p2.

 # ezjail-admin update -u

   Damit das Basejail aktualisiert werden kann, muss zuna:chst das
   Host-System, wie in Abschnitt 23.2.3, "Aktualisierungen an Haupt- und
   Unterversionen" beschrieben, aktualisiert werden. Sobald das Host-System
   aktualisiert und neu gestartet wurde, kann die Basejail aktualisiert
   werden. Da freebsd-update(8) keine Mo:glichkeit besitzt, die derzeit
   installierte Version der Basejail zu bestimmen, muss die urspru:ngliche
   Version beim Aufruf mit angegeben werden. Benutzen Sie file(1) um die
   urspru:ngliche Version der Basejail zu bestimmen:

 # file /usr/jails/basejail/bin/sh
 /usr/jails/basejail/bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked (uses shared libs), for FreeBSD 9.3, stripped

   Nutzen Sie diese Information, um die Aktualisierung von 9.3-RELEASE auf
   die aktuelle Version des Host-Systems durchzufu:hren:

 # ezjail-admin update -U -s 9.3-RELEASE

   Nachdem die Basejail aktualisiert ist, muss in jeder Jail mergemaster(8)
   ausgefu:hrt werden, um die Konfigurationsdateien zu aktualisieren.

   Wie mergemaster(8) verwendet wird, ha:ngt stark vom Zweck und
   Vertrauenswu:rdigkeit der Jail ab. Wenn die Dienste oder Benutzer nicht
   vertrauenswu:rdig sind, dann sollte mergemaster(8) nur innerhalb der Jail
   ausgefu:hrt werden:

   Beispiel 14.1. mergemaster(8) in einer nicht vertrauenswu:rdigen Jail
   ausfu:hren

   Entfernen Sie die Verknu:pfung von /usr/src des Jails zur Basejail und
   erstellen Sie ein neues /usr/src als Mountpunkt fu:r die Jail. Ha:ngen Sie
   /usr/src vom Host-System schreibgeschu:tzt in den Mountpunkt fu:r die Jail
   ein:

 # rm /usr/jails/jailname/usr/src
 # mkdir /usr/jails/jailname/usr/src
 # mount -t nullfs -o ro /usr/src /usr/jails/jailname/usr/src

   O:ffnen Sie eine Konsole in der Jail:

 # ezjail-admin console jailname

   Innerhalb der Jail fu:hren Sie dann mergemaster(8) aus. Danach verlassen
   Sie die Konsole:

 # cd /usr/src
 # mergemaster -U
 # exit

   Abschliessend ko:nnen Sie /usr/src aus der Jail ausha:ngen:

 # umount /usr/jails/jailname/usr/src

   Beispiel 14.2. mergemaster(8) in einer vertrauenswu:rdigen Jail ausfu:hren

   Wenn den Benutzern und den Diensten in der Jail vertraut wird, kann
   mergemaster(8) auf dem Host-System ausgefu:hrt werden:

 # mergemaster -U -D /usr/jails/jailname

    14.6.4.2. Ports aktualisieren

   Die Ports-Sammlung der Basejail wird von den anderen Jails gemeinsam
   genutzt. Somit genu:gt es, die Ports-Sammlung in der Basejail zu
   aktualisieren.

   Die Ports-Sammlung der Basejail wird mit portsnap(8) aktualisiert:

 # ezjail-admin update -P

  14.6.5. Jails verwalten

    14.6.5.1. Jails starten und stoppen

   ezjail startet automatisch alle Jails, wenn das System hochfa:hrt. Jails
   ko:nnen auch manuell mit stop und start gestoppt und neu gestartet werden:

 # ezjail-admin stop sambajail
 Stopping jails: sambajail

   In der Voreinstellung werden die Jails automatisch gestartet, wenn das
   Host-System hochfa:hrt. Der automatische Start kann mit config deaktiviert
   werden:

 # ezjail-admin config -r norun seldomjail

   Diese Einstellung wird nach einem Neustart des Host-Systems aktiviert.
   Eine Jail, die bereits la:uft, wird hiermit nicht gestoppt.

   Der automatische Start kann auch aktiviert werden:

 # ezjail-admin config -r run oftenjail

    14.6.5.2. Jails archivieren und wiederherstellen

   Benutzen Sie archive um ein .tar.gz-Archiv einer Jail zu erstellen. Der
   Dateiname wird aus dem Namen der Jail und dem aktuellen Datum
   zusammengesetzt. Archivdateien werden in /usr/jails/ezjail_archives
   abgelegt. Ein alternatives Verzeichnis fu:r die Ablage kann in der
   Variable ezjail_archivedir der Konfigurationsdatei definiert werden.

   Die Archivdatei kann an anderer Stelle als Sicherung gespeichert werden,
   oder eine andere Jail kann daraus mit restore wiederhergestellt werden.
   Eine neue Jail kann auch aus dem Archiv erstellt werden, was eine bequeme
   Mo:glichkeit bietet, bestehende Jails zu klonen.

   Die Jail wwwserver stoppen und archivieren:

 # ezjail-admin stop wwwserver
 Stopping jails: wwwserver.
 # ezjail-admin archive wwwserver
 # ls /usr/jails/ezjail-archives/
 wwwserver-201407271153.13.tar.gz

   Erstellen Sie aus dem eben erzeugten Archiv eine neue Jail namens
   wwwserver-clone. Verwenden Sie die Schnittstelle em1 und weisen Sie eine
   neue IP-Adresse zu, um einen Konflikt mit dem Original zu vermeiden:

 # ezjail-admin create -a /usr/jails/ezjail_archives/wwwserver-201407271153.13.tar.gz wwwserver-clone 'lo1|127.0.3.1,em1|192.168.1.51'

  14.6.6. Vollsta:ndiges Beispiel: BIND in einer Jail

   Einen BIND DNS-Server innerhalb einer Jail zu betreiben erho:ht die
   Sicherheit, da der Dienst isoliert wird. Dieses Beispiel erstellt einen
   einfachen caching-only Nameserver.

     * Die Jail bekommt den Namen dns1.

     * Die Jail erha:lt die IP-Adresse 192.168.1.240 auf der Schnittstelle
       re0 des Host-Systems.

     * Die Upstream-DNS-Server des ISPs lauten 10.0.0.62 und 10.0.0.61.

     * Die Basejail wurde bereits erstellt und die Ports-Sammlung
       installiert, wie in Abschnitt 14.6.2, "Einrichtung" beschrieben.

   Beispiel 14.3. BIND in einer Jail laufen lassen

   Erstellen Sie eine geklonte Loopback-Schnittstelle durch einen Eintrag in
   /etc/rc.conf:

 cloned_interfaces="lo1"

   Erzeugen Sie jetzt die Loopback-Schnittstelle:

 # service netif cloneup
 Created clone interface: lo1

   Erstellen Sie die Jail:

 # ezjail-admin create dns1 'lo1|127.0.2.1,re0|192.168.1.240'

   Starten Sie die Jail, verbinden Sie sich mit der Konsole und fu:hren Sie
   die grundlegende Konfiguration durch:

 # ezjail-admin start dns1
 # ezjail-admin console dns1
 # passwd
 Changing local password for root
 New Password:
 Retype New Password:
 # tzsetup
 # sed -i .bak -e '/adjkerntz/ s/^/#/' /etc/crontab
 # sed -i .bak -e 's/127.0.0.1/127.0.2.1/g; s/localhost.my.domain/dns1.my.domain dns1/' /etc/hosts

   Setzen Sie voru:bergehend die Upstream-DNS-Server in /etc/resolv.conf,
   damit die Ports-Sammlung heruntergeladen werden kann:

 nameserver 10.0.0.62
 nameserver 10.0.0.62

   Immer noch in der Konsole der Jail, installieren Sie dns/bind99.

 # make -C /usr/ports/dns/bind99 install clean

   Konfigurieren Sie den Nameserver in /usr/local/etc/namedb/named.conf.

   Erstellen Sie eine Zugriffskontrollliste (ACL) der Adressen und Netzwerke,
   die DNS-Anfragen an diesen Nameserver senden du:rfen. Diese Sektion wird
   vor der Sektion options hinzugefu:gt, die sich bereits in der Datei
   befindet:

 ...
 // or cause huge amounts of useless Internet traffic.

 acl "trusted" {
         192.168.1.0/24;
         localhost;
         localnets;
 };

 options {
 ...

   Verwenden Sie die IP-Adresse der Jail in der Direktive listen-on, um
   DNS-Anfragen von anderen Rechnern aus dem Netzwerk zu akzeptieren:

         listen-on       { 192.168.1.240; };

   Entfernen Sie die Kommentarzeichen /* und */. Tragen Sie die IP-Adressen
   der Upstream-DNS-Server ein. Unmittelbar nach der Sektion forwarders
   fu:gen Sie Verweise auf die bereits definierten ACLs ein:

         forwarders {
                 10.0.0.62;
                 10.0.0.61;
         };

         allow-query       { any; };
         allow-recursion   { trusted; };
         allow-query-cache { trusted; };

   Aktivieren Sie den Dienst in /etc/rc.conf:

 named_enable="YES"

   Starten und testen Sie den Nameserver:

 # service named start
 wrote key file "/usr/local/etc/namedb/rndc.key"
 Starting named.
 # /usr/local/bin/dig @192.168.1.240 freebsd.org

   Beinhaltet die Antwort

 ;; Got answer;

   dann funktioniert der Nameserver. Eine la:ngere Verzo:gerung, gefolgt von
   der Antwort

 ;; connection timed out; no servers could be reached

   weist auf ein Problem hin. U:berpru:fen Sie die
   Konfigurationseinstellungen und stellen Sie sicher, dass alle lokalen
   Firewalls den DNS-Zugriff auf die Upstream-DNS-Server erlauben.

   Wie auch jeder andere lokale Rechner, kann der DNS-Server Anfragen fu:r
   Namensauflo:sung an sich selbst stellen. Tragen Sie die Adresse des
   DNS-Servers in die /etc/resolv.conf der Client-Rechner:

 nameserver 192.168.1.240

   Ein lokaler DHCP-Server kann die Adresse eines lokalen DNS-Servers
   automatisch fu:r alle DHCP-Clients zur Verfu:gung stellen.

Kapitel 15. Verbindliche Zugriffskontrolle

   Written by Tom Rhodes.
   U:bersetzt von Benjamin Lukas.
   Inhaltsverzeichnis

   15.1. U:bersicht

   15.2. Schlu:sselbegriffe

   15.3. Erla:uterung

   15.4. MAC Labels verstehen

   15.5. Planung eines Sicherheitsmodells

   15.6. Modulkonfiguration

   15.7. Das MAC Modul seeotheruids

   15.8. Das MAC Modul bsdextended

   15.9. Das MAC Modul ifoff

   15.10. Das MAC Modul portacl

   15.11. Das MAC Modul partition

   15.12. Das MAC Modul Multi-Level Security

   15.13. Das MAC Modul Biba

   15.14. Das MAC Modul LOMAC

   15.15. Beispiel 1: Nagios in einer MAC Jail

   15.16. Beispiel 2: User Lock Down

   15.17. Fehler im MAC beheben

15.1. U:bersicht

   In FreeBSD 5.X wurden neue Sicherheits-Erweiterungen verfu:gbar, die aus
   dem TrustedBSD-Projekt u:bernommen wurden und auf dem Entwurf POSIX(R).1e
   basieren. Die beiden bedeutendsten neuen Sicherheits-Mechanismen sind
   Berechtigungslisten (Access Control Lists, ACL) und die verbindliche
   Zugriffskontrolle (Mandatory Access Control, MAC). Durch die MAC ko:nnen
   Module geladen werden, die neue Sicherheitsrichtlinien bereitstellen. Mit
   Hilfe einiger Module kann beispielsweise ein eng umgrenzter Bereich des
   Betriebssystems gesichert werden, indem die Sicherheitsfunktionen
   spezieller Dienste unterstu:tzt bzw. versta:rkt werden. Andere Module
   wiederum betreffen in ihrer Funktion das gesamte System - alle vorhandenen
   Subjekte und Objekte. Das "Verbindliche" in der Namensgebung erwa:chst aus
   dem Fakt, dass die Kontrolle allein Administratoren und dem System obliegt
   und nicht dem Ermessen der Nutzer, wie es mit Hilfe der
   benutzerbestimmbaren Zugriffskontrolle (Discrectionary Access Control /
   DAC), dem Zugriffstandard fu:r Dateien, gar der System V IPC in FreeBSD,
   normalerweise umgesetzt wird.

   Dieses Kapitel wird sich auf die Grundstruktur der Verbindlichen
   Zugriffskontrolle und eine Auswahl der Module, die verschiedenste
   Sicherheitsfunktionen zur Verfu:gung stellen, konzentrieren.

   Beim Durcharbeiten dieses Kapitels erfahren Sie:

     * Welche MAC Module fu:r Sicherheitsrichtlinien derzeit in FreeBSD
       eingebettet sind und wie die entsprechenden Mechanismen funktionieren.

     * Was die einzelnen MAC Module an Funktionen realisieren und auch, was
       der Unterschied zwischen einer Richtlinie, die mit Labels arbeitet,
       und einer, die ohne Labels arbeitet, ist.

     * Wie Sie die MAC in ein System einbetten und effizient einrichten.

     * Wie die verschiedenen Richtlinienmodule einer MAC konfiguriert werden.

     * Wie mit einer MAC und den gezeigten Beispielen eine sicherere Umgebung
       erstellt werden kann.

     * Wie die Konfiguration einer MAC auf korrekte Einrichtung getestet
       wird.

   Vor dem Lesen dieses Kapitels sollten Sie bereits:

     * Grundzu:ge von UNIX(R) und FreeBSD verstanden haben. (Kapitel 3,
       Grundlagen des UNIX Betriebssystems).

     * Mit den Grundzu:gen der Kernelkonfiguration und -kompilierung vertraut
       sein (Kapitel 8, Konfiguration des FreeBSD-Kernels).

     * Einige Vorkenntnisse u:ber Sicherheitskonzepte im Allgemeinen und
       deren Umsetzung in FreeBSD im Besonderen mitbringen (Kapitel 13,
       Sicherheit).

  Warnung:

   Der unsachgema:sse Gebrauch der in diesem Kapitel enthaltenen
   Informationen kann den Verlust des Systemzugriffs, A:rger mit Nutzern oder
   die Unfa:higkeit, grundlegende Funktionen des X-Windows-Systems zu nutzen,
   verursachen. Wichtiger noch ist, dass man sich nicht allein auf die MAC
   verlassen sollte, um ein System zu sichern. Die MAC verbessert und
   erga:nzt lediglich die schon existierenden Sicherheits-Richtlinien - ohne
   eine gru:ndliche und fundierte Sicherheitspraxis und regelma:ssige
   Sicherheitspru:fungen wird Ihr System nie vollsta:ndig sicher sein.

   Ausserdem sollte angemerkt werden, dass die Beispiele in diesem Kapitel
   auch genau dasselbe sein sollen, na:mlich Beispiele. Es wird nicht
   empfohlen, diese bestimmten Beispiele auf einem Arbeitssystem umzusetzen.
   Das Einarbeiten der verschiedenen Sicherheitsmodule erfordert eine Menge
   Denkarbeit und viele Tests. Jemand, der nicht versteht, wie diese Module
   funktionieren, kann sich schnell darin wiederfinden, dass er (oder sie)
   das ganze System durchforsten und viele Dateien und Verzeichnisse neu
   konfigurieren muss.

  15.1.1. Was in diesem Kapitel nicht behandelt wird

   Dieses Kapitel behandelt einen grossen Teil sicherheitsrelevanter Themen,
   bezogen auf die Verbindliche Zugriffskontrolle (MAC). Die gegenwa:rtige
   Entwicklung neuer MAC Module ist nicht abgedeckt. Einige weitere Module,
   die im MAC Framework enthalten sind, haben besondere Charakteristika, die
   zum Testen und Entwickeln neuer Module gedacht sind. Dies sind unter
   anderem mac_test(4), mac_stub(4) und mac_none(4). Fu:r weitere
   Informationen zu diesen Modulen und den entsprechend angebotenen
   Funktionen lesen Sie bitte die Manpages.

15.2. Schlu:sselbegriffe

   Bevor Sie weiterlesen, mu:ssen noch einige Schlu:sselbegriffe gekla:rt
   werden. Dadurch soll jegliche auftretende Verwirrung von vornherein
   beseitigt und die plo:tzliche Einfu:hrung neuer Begriffe und Informationen
   vermieden werden.

     * Verbund: Ein Verbund ist ist ein Satz von Programmen und Daten, die
       speziell und zusammen abgeschottet wurden, um Nutzern Zugriff auf
       diese ausgewiesenen Systembereiche zu gewa:hren. Man kann sagen, ein
       solcher Verbund ist eine Gruppierung, a:hnlich einer Arbeitsgruppe,
       einer Abteilung, einem Projekt oder einem Thema. Durch die Nutzung von
       Verbu:nden (compartments) kann man Sicherheitsrichtlinien erstellen,
       die alles notwendige Wissen und alle Werkzeuge zusammenfassen.

     * Hochwassermarkierung: Eine solche Richtlinie erlaubt die Erho:hung der
       Sicherheitsstufe in Abha:ngigkeit der Klassifikation der gesuchten
       bzw. bereitzustellenden Information. Normalerweise wird nach Abschluss
       des Prozesses die urspru:ngliche Sicherheitsstufe wieder hergestellt.
       Derzeit entha:lt die MAC Grundstruktur keine Mo:glichkeit, eine solche
       Richtlinie umzusetzen, der Vollsta:ndigkeit halber ist die Definition
       hier jedoch aufgefu:hrt.

     * Integrita:t: Das Schlu:sselkonzept zur Klassifizierung der
       Vertraulichkeit von Daten nennt man Integrita:t. Je weiter die
       Integrita:t erho:ht wird, umso mehr kann man den entsprechenden Daten
       vertrauen.

     * Label: Ein Label ist ein Sicherheitsmerkmal, welches mit Dateien,
       Verzeichnissen oder anderen Elementen im System verbunden wird. Man
       sollte es wie einen Vertraulichkeitsstempel auffassen, der Dateien
       angeho:rt wie beispielsweise die Zugriffszeit, das Erstellungsdatum
       oder auch der Name; sobald Dateien derart gekennzeichnet werden,
       bezeichnen diese Label die sicherheitsrelevanten Eigenschaften.
       Zugriff ist nur noch dann mo:glich, wenn das zugreifende Subjekt eine
       korrespondierende Kennzeichnung tra:gt. Die Bedeutung und Verarbeitung
       der Label-Werte ist von der Einrichtung der Richtlinie abha:ngig:
       Wa:hrend einige Richtlinien das Label zum Kennzeichnen der
       Vertraulichkeit oder Geheimhaltungsstufe eines Objekts nutzen, ko:nnen
       andere Richtlinien an derselben Stelle Zugriffsregeln festschreiben.

     * Level: Eine erho:hte oder verminderte Einstellung eines
       Sicherheitsmerkmals. Wenn das Level erho:ht wird, wird auch die
       ensprechende Sicherheitsstufe angehoben.

     * Niedrigwassermarkierung: Eine solche Richtlinie erlaubt das
       Herabstufen des Sicherheitslevels, um weniger sensible Daten
       verfu:gbar zu machen. In die meisten Fa:llen wird das urspru:ngliche
       Sicherheitslevel des Nutzers wiederhergestellt, sobald der Vorgang
       abgeschlossen ist. Das einzige Modul in FreeBSD, welches von dieser
       Richtlinie Gebrauch macht, ist mac_lomac(4).

     * Multilabel: Die Eigenschaft multilabel ist eine Dateisystemoption, die
       entweder im Einzelbenutzermodus mit Hilfe des Werkzeugs tunefs(8),
       wa:hrend des Bootvorgangs in der Datei fstab(5) oder aber beim
       Erstellen einen neues Dateisystems aktiviert werden kann. Diese Option
       erlaubt einem Administrator, verschiedenen Objekten unterschiedliche
       Labels zuzuordnen - kann jedoch nur zusammen mit Modulen angewendet
       werden, die auch tatsa:chlich mit Labels arbeiten.

     * Objekt: Ein Objekt oder auch Systemobjekt ist theoretisch eine
       Einheit, durch welche Information fliesst, und zwar unter der Lenkung
       eines Subjektes. Praktisch schliesst diese Definition Verzeichnisse,
       Dateien, Felder, Bildschirme, Tastaturen, Speicher, Bandlaufwerke,
       Drucker und jegliche anderen Datenspeicher- oder -verarbeitungsgera:te
       ein. Im Prinzip ist ein Objekt ein Datenkontainer oder eine
       Systemressource - Zugriff auf ein Objekt bedeutet, auf Daten
       zuzugreifen.

     * Richtlinie: Eine Sammlung von Regeln, die definiert, wie Zielvorgaben
       umgesetzt werden, nennt man Richtlinie. Eine Richtlinie dokumentiert
       normalerweise, wie mit bestimmten Elementen umgegangen wird. Dieses
       Kapitel fasst den Begriff in diesem Kontext als Sicherheitsrichtlinie
       auf; als eine Sammlung von Regeln, die den Fluss von Daten und
       Informationen kontrolliert und die gleichzeitig definiert, wer auf
       diese Daten und Informationen zugreifen darf.

     * Anfa:lligkeit: Dieser Begriff wird normalerweise verwendet, wenn man
       u:ber MLS (Multi Level Security) spricht. Das Anfa:lligkeits-Level
       beschreibt, wie wichtig oder geheim die Daten sein sollen. Um so
       ho:her das Anfa:lligkeits-Level, um so wichtiger die Geheimhaltung
       bzw. Vertraulichkeit der Daten.

     * Einzel-Label: Von einem Einzel-Label spricht man, wenn fu:r ein ganzes
       Dateisystem lediglich ein einziges Label verwendet wird, um
       Zugriffskontrolle u:ber den gesamten Datenfluss zu erzwingen. Sobald
       diese Option verwendet wird - und das ist zu jeder Zeit, wenn die
       Option multilabel nicht explizit gesetzt wurde - sind alle Dateien und
       Verzeichnisse mit dem gleichen Label gekennzeichnet.

     * Subjekt: Ein Subjekt ist jedwede Einheit, die Information in Fluss
       zwischen Objekten bringt: Zum Beispiel ein Nutzer, ein
       Nutzerprozessor, ein Systemprozess usw. In FreeBSD handelt es sich
       meistens um einen Thread, der als Prozess im Namen eines Nutzers
       arbeitet.

15.3. Erla:uterung

   Mit all diesen neuen Begriffen im Kopf ko:nnen wir nun u:berlegen, wie die
   Mo:glichkeiten der verbindlichen Zugriffskontrolle (MAC) die Sicherheit
   eines Betriebssystems als Ganzes erweitern. Die verschiedenen Module, die
   durch die MAC bereitgestellt werden, ko:nnen verwendet werden, um das
   Netzwerk oder Dateisysteme zu schu:tzen, Nutzern den Zugang zu bestimmten
   Ports oder Sockets zu verbieten und vieles mehr. Die vielleicht beste
   Weise, die Module zu verwenden, ist, sie miteinander zu kombinieren, indem
   mehrere Sicherheitsrichtlinienmodule gleichzeitig eine mehrschichtige
   Sicherheitsumgebung schaffen. Das ist etwas anderes als singula:re
   Richtlinien wie zum Beispiel die Firewall, die typischerweise Elemente
   eines Systems stabilisiert, das nur fu:r einen speziellen Zweck verwendet
   wird. Der Verwaltungsmehraufwand ist jedoch von Nachteil, zum Beispiel
   durch die Verwendung von mehreren Labels oder dem eigenha:ndigen Erlauben
   von Netzwerkzugriffen fu:r jeden einzelnen Nutzer.

   Solche Nachteile sind allerdings gering im Vergleich zum bleibenden Effekt
   der erstellten Struktur. Die Mo:glichkeit zum Beispiel, fu:r konkrete
   Anwendungen genau die passenden Richtlinien auszuwa:hlen und einzurichten,
   senkt gleichzeitig die Arbeitskosten. Wenn man unno:tige Richtlinien
   aussortiert, kann man die Gesamtleistung des Systems genauso steigern wie
   auch eine ho:here Anpassungsfa:higkeit gewa:hrleisten. Eine gute Umsetzung
   der MAC beinhaltet eine Pru:fung der gesamten Sicherheitsanforderungen und
   einen wirksamen Einsatz der verschiedenen Module.

   Ein System, auf dem eine MAC verwendet wird, muss zumindest garantieren,
   dass einem Nutzer nicht gestattet wird, Sicherheitsmerkmale nach eigenem
   Ermessen zu vera:ndern; dass Arbeitswerkzeuge, Programme und Skripte,
   innerhalb der Beschra:nkungen arbeiten ko:nnen, welche die Zugriffsregeln
   der ausgewa:hlten Module dem System auferlegen; und dass die volle
   Kontrolle u:ber die Regeln der MAC beim Administrator ist und bleibt.

   Es ist die einsame Pflicht des zusta:ndigen Administrators, die richtigen
   Module sorgfa:ltig auszuwa:hlen. Einige Umgebungen ko:nnten eine
   Beschra:nkung der Zugriffe u:ber die Netzwerkschnittstellen beno:tigen -
   hier wa:ren die Module mac_portacl(4), mac_ifoff(4) und sogar mac_biba(4)
   ein guter Anfang. In anderen Fa:llen muss man sehr strenge Vertraulichkeit
   von Dateisystemobjekten gewa:hrleisten - dafu:r ko:nnte man
   mac_bsdextended(4) oder mac_mls(4) einsetzen.

   Die Entscheidung, welche Richtlinien angewandt werden, kann auch anhand
   der Netzwerk-Konfiguration getroffen werden. Nur bestimmten Benutzern soll
   erlaubt werden, via ssh(1) auf das Netzwerk oder Internet zuzugreifen -
   mac_portacl(4) wa:re eine gute Wahl. Aber fu:r was entscheidet man sich im
   Falle eines Dateisystems? Soll der Zugriff auf bestimmte Verzeichnisse von
   spezifischen Nutzern oder Nutzergruppen separiert werden? Oder wollen wir
   den Zugriff durch Nutzer oder Programme auf spezielle Dateien
   einschra:nken, indem wir gewisse Objekte als geheim einstufen?

   Der Zugriff auf Objekte kann einigen vertraulichen Nutzern gestattet
   werden, anderen wiederum verwehrt. Als Beispiel sei hierzu ein grosses
   Entwicklerteam angefu:hrt, das in kleine Gruppen von Mitarbeitern
   aufgeteilt wurde. Die Entwickler von Projekt A du:rfen nicht auf Objekte
   zugreifen, die von den Entwicklern von Projekt B geschrieben wurden. Sie
   mu:ssen aber trotzdem auf Objekte zugreifen ko:nnen, die von einem dritten
   Entwicklerteam geschaffen wurden - alles in allem eine verzwickte
   Situation. Wenn man die verschiedenen Module der MAC richtig verwendet,
   ko:nnen Anwender in solche Gruppen getrennt und ihnen der Zugriff zu den
   gewu:nschten Systemobjekten gestattet werden - ohne Angst haben zu
   mu:ssen, dass Informationen in die falschen Ha:nde geraten.

   So hat jedes Modul, das eine Sicherheitsrichtlinie verfu:gbar macht, einen
   eigenen Weg, die Sicherheit des Systems zu versta:rken. Die Auswahl der
   Module sollte auf einem gut durchdachten Sicherheitskonzept gru:nden. In
   vielen Fa:llen muss das gesamte Konzept eines Systems u:berarbeitet und
   neu eingepflegt werden. Ein guter U:berblick u:ber die Mo:glichkeiten der
   verschiedenen von der MAC angebotenen Module hilft einem Administrator,
   die besten Richtlinien fu:r seine spezielle Situation auszuwa:hlen.

   Im FreeBSD-Standardkernel ist die Option zur Verwendung der MAC nicht
   enthalten. Daher muss die Zeile

 options      MAC

   der Kernelkonfiguration hinzugefu:gt und der Kernel neu u:bersetzt und
   installiert werden.

  Achtung:

   Verschiedenen Anleitungen fu:r die MAC empfehlen, die einzelnen Module
   direkt in den Kernel einzuarbeiten. Dabei ist es jedoch mo:glich, das
   System aus dem Netzwerk auszusperren oder gar schlimmeres. Die Arbeit mit
   der MAC ist a:hnlich der Arbeit mit einer Firewall - man muss, wenn man
   sich nicht selbst aus dem System aussperren will, genau aufpassen. Man
   sollte sich eine Mo:glichkeit zurechtlegen, wie man eine Implementation
   einer MAC ru:ckga:ngig machen kann - genauso wie eine Ferninstallation
   u:ber das Netzwerk nur mit a:usserster Vorsicht vorgenommen werden sollte.
   Es wird daher empfohlen, die Module nicht in den Kernel einzubinden,
   sondern sie beim Systemstart via /boot/loader.conf zu laden.

15.4. MAC Labels verstehen

   MAC Label sind Sicherheitsmerkmale, die, wenn sie zum Einsatz kommen,
   allen Subjekten und Objekten im System zugeordnet werden.

   Wenn ein Administrator ein solches Merkmal bzw. Attribut setzen will, muss
   er/sie verstehen ko:nnen, was da genau passiert. Die Attribute, die im
   speziellen Fall zu vergeben sind, ha:ngen vom geladenen Modul und den
   darin jeweils implementierten Richtlinien ab. Jedes dieser
   Richtlinienmodule setzt die Arbeit mit seinen entsprechenden Attributen in
   individueller Weise um. Falls der Nutzer nicht versteht, was er da
   konfiguriert, oder auch, was seine Konfiguration fu:r Begleiterscheinungen
   mit sich bringt, ergibt sich meist als Resultat ein unerwartetes, ja sogar
   unerwu:nschtes Verhalten des gesamten Systems.

   Ein Label, einem Objekt verliehen, wird verwendet, um anhand einer
   Richtlinie eine sicherheitsrelevante Entscheidung u:ber Zugriffsrechte zu
   fa:llen. In einigen Richtlinien entha:lt bereits das Label selbst alle
   dafu:r no:tigen Informationen. Andere Richtlinien verwenden diese
   Informationen, um zuna:chst ein komplexes Regelwerk abzuarbeiten.

   Wenn man zum Beispiel einer Datei das Attribut biba/low zuordnet, wird
   dieses durch das Biba Sicherheitsrichtlinienmodul, und zwar mit dem Wert
   "low", verarbeitet.

   Einige der Richtlinienmodule, die die Mo:glichkeit zum Vergeben von Labels
   unter FreeBSD unterstu:tzen, bieten drei vordefinierte Labels an. Dieses
   nennen sich "high", "low" und "equal". Obwohl die verschiedenen Module die
   Zugriffskontrolle auf verschiedene Weisen regeln, kann man sich sicher
   sein, das das "low"-Label der untersten, unsichersten Einstellung
   entspricht, das "equal"-Label die Verwendung des Moduls fu:r das jeweilige
   Objekt oder Subjekt deaktiviert - und das "high"-Label die
   ho:chstmo:gliche Einstellung erzwingt. Im Speziellen gilt diese Aussage
   fu:r die Richtlinien(-module) MLS und Biba.

   In den meisten Umgebungen, sogenannten Single Label Environments, wird
   Objekten nur ein einzelnes Label zugewiesen. Dadurch wird nur ein
   Regelsatz fu:r die Zugriffskontrolle auf das gesamte System verwendet -
   und das ist meistens auch tatsa:chlich ausreichend. Es gibt wenige Fa:lle,
   in denen mehrere Labels auf Dateisystemobjekte oder -subjekte verwendet
   werden. In einem solchen Fall muss das Dateisystem mit der
   tunefs(8)-Option multilabel angepasst werden, da single label die
   Standardeinstellung ist.

   Bei der Verwendung von Biba oder MLS kann man numerische Labels vergeben,
   die genau das Level angeben, an welcher Stelle in der Hierarchie das
   Subjekt oder Objekt einzuordnen ist. Dieses numerische Level wird
   verwendet, um Informationen in verschiedene Gruppen aufzuteilen oder zu
   sortieren - damit zum Beispiel nur Subjekte, die zu einer gewissen
   Vertraulichkeitsstufe geho:ren, Zugang zu einer Gruppe von Objekten
   erhalten.

   In den meisten Fa:llen wird ein Administrator nur ein einzelnes Label fu:r
   das gesamte Dateisystem verwenden.

   Moment mal, dass ist doch dasselbe wie DAC! Ich dachte, MAC wu:rde die
   Kontrolle strengstens an den Administrator binden! Diese Aussage ha:lt
   immer noch stand  - root ist derjenige, der die Kontrolle ausu:bt und die
   Richtlinie konfiguriert, so dass Nutzer in die entsprechenden,
   angemessenen Kategorien / Zugriffsklassen eingeordnet werden. Nunja,
   einige Module schra:nken root selbst ein. Die Kontrolle u:ber Objekte wird
   dann einer Gruppe zugewiesen, jedoch hat root die Mo:glichkeit, die
   Einstellungen jederzeit zu widerrufen oder zu a:ndern. Dies ist das
   Hierarchie/Freigabe-Modell, das durch Richtlinien wie MLS oder Biba
   bereitgestellt wird.

  15.4.1. Konfigurieren der Labels

   Gewissermassen alle Aspekte der Labelkonfiguration werden durch Werkzeuge
   das Basissystems umgesetzt. Die entsprechenden Kommandos bieten eine
   einfache Schnittstelle zum Konfigurieren, Manipulieren und auch
   Verifizieren der gekennzeichneten Objekte.

   Mit den beiden Kommandos setfmac(8) und setpmac(8) kann man eigentlich
   schon alles machen. Das Kommando setfmac wird verwendet, um ein MAC-Label
   auf einem Systemobjekt zu setzen, setpmac hingegen zum Setzen von Labels
   auf Systemsubjekte. Als Beispiel soll hier dienen:

 # setfmac biba/high test

   Wenn bei der Ausfu:hrung dieses Kommandos keine Fehler aufgetreten sind,
   gelangt man zur Eingabeaufforderung zuru:ck. Nur wenn ein Fehler auftritt,
   verhalten sich diese Kommandos nicht still, ganz wie auch die Kommandos
   chmod(1) und chown(8). In einigen Fa:llen wird dieser Fehler Permission
   denied lauten und gewo:hnlich dann auftreten, wenn ein Label an einem
   Objekt angebracht oder vera:ndert werden soll, das bereits
   (Zugriffs-)Beschra:nkungen unterliegt.[3] Der Systemadministrator kann so
   eine Situation mit Hilfe der folgenden Kommandos u:berwinden:

 # setfmac biba/high test
 Permission denied
 # setpmac biba/low setfmac biba/high test
 # getfmac test
 test: biba/high

   Wie wir hier sehen, kann setpmac verwendet werden, um die vorhandene
   Einstellungen zu umgehen, indem dem gestarteten Prozess ein anderes,
   valides Label zugeordnet wird. Das Werkzeug getpmac wird normalerweise auf
   gerade laufende Prozesse angewendet. A:hnlich sendmail: Als Argument wird
   statt eines Kommandos eine eine Prozess-ID u:bergeben, es verbirgt sich
   doch dieselbe Logik dahinter. Wenn ein Nutzer versucht, eine Datei zu
   vera:ndern, auf die er keinen Zugriff hat, entsprechend der Regeln eines
   geladenen Richtlinienmoduls, wird der Fehler Operation not permitted durch
   die Funktion mac_set_link angezeigt.

    15.4.1.1. U:bliche Typen von Labeln

   Wenn man die Module mac_biba(4), mac_mls(4) und mac_lomac(4) verwendet,
   hat man die Mo:glichkeit, einfache Label zu vergeben. Diese nennen sich
   high, low und equal. Es folgt eine kurze Beschreibung, was diese Labels
   bedeuten:

     * Das Label low ist definitionsgema:ss das niedrigeste Label, das einem
       Objekt oder Subjekt verliehen werden kann. Wird es gesetzt, kann die
       entsprechende Entita:t nicht mehr auf Entita:ten zugreifen, die das
       Label high tragen.

     * Das Label equal wird Entita:ten verliehen, die von der Richtlinie
       ausgenommen sein sollen.

     * Das Label high verleiht einer Entita:t die ho:chstmo:gliche
       Einstellung.

   Unter Beachtung jedes einzelnen Richtlinienmoduls moduliert und
   beschra:nkt jede dieser Einstellungen den Informationsfluss
   unterschiedlich. Genaue Erkla:rungen zu den Charakteristika der einfachen
   Labels in den verschiedenen Modulen finden sich im entsprechenden
   Unterabschnitt dieses Kapitels oder in den Manpages.

      15.4.1.1.1. Fortgeschrittene Label-Konfiguration

   Numerische klassifizierte Labels werden verwendet in der Form
   Klasse:Verbund+Verbund. Demnach ist das Label

 biba/10:2+3+6(5:2+3-15:2+3+4+5+6)

   folgendermassen zu lesen:

   "Biba Policy Label"/"effektive Klasse 10" :"Verbund 2,3 und 6":
   ("Low-Klasse 5:..."- "High-Klasse 15:...")

   In diesem Beispiel ist die erstgenannte Klasse als "effektive Klasse" zu
   bezeichnen. Ihr werden die "effektiven Verbu:nde" zugeordnet. Die zweite
   Klasse ist die "Low"-Klasse und die letzte die "high"-Klasse. Die
   allermeisten Konfigurationen kommen ohne die Verwendungen von solchen
   Klassen aus, nichtsdestotrotz kann man sie fu:r erweiterte Konfigurationen
   verwenden.

   Sobald sie auf Systemsubjekte angewendet werden, haben diese eine
   gegenwa:rtige Klasse/Verbund- Konfiguration und diese muss im definierten
   Rahmen gegebenenfalls angepasst (erho:ht oder gesenkt) werden. Im
   Gegensatz dazu haben Systemobjekte alle eingestellten (effektive, High-
   und Low-Klasse) gleichzeitig. Dies ist notwendig, damit auf Sie von den
   Systemsubjekten in den verschiedenen Klassen gleichzeitig zugegriffen
   werden kann.

   Die Klasse und und die Verbu:nde in einem Subjekt-Objekt-Paar werden zum
   Erstellen einer sogenannten Dominanz-Relation verwendet, in welcher
   entweder das Subjekt das Objekt, das Objekt das Subjekt, keines das andere
   dominiert oder sich beide gegenseitig dominieren. Der Fall, dass sich
   beide dominieren, tritt dann ein, wenn die beiden Labels gleich sind.
   Wegen der Natur des Informationsflusses in Biba kann man einem Nutzer
   Rechte fu:r einen Reihe von Abteilungen zuordnen, die zum Beispiel mit
   entsprechenden Projekten korrespondieren. Genauso ko:nnen aber auch
   Objekten mehrere Abteilungen zugeordnet sein. Die Nutzer mu:ssen eventuell
   ihre gegenwa:rtigen Rechte mithilfe von su or setpmac anpassen um auf
   Objekte in einer Abteilung zuzugreifen, zu der sie laut ihrer effektiven
   Klasse nicht berechtigt sind.

    15.4.1.2. Nutzer- und Label-Einstellungen

   Nutzer selbst brauchen Labels damit ihre Dateien und Prozesse korrekt mit
   der Sicherheitsrichtlinie zusammenarbeitet, die fu:r das System definiert
   wurde. Diese werden in der Datei login.conf durch die Verwendung von
   Login- Klassen zugeordnet. Jedes Richtlinienmodul, das Label verwendet,
   arbeitet mit diesen Login-Klassen.

   Beispielhaft wird der folgende Eintrag, der fu:r jede Richtlinie eine
   Einstellung entha:lt, gezeigt:

 default:\
 :copyright=/etc/COPYRIGHT:\
 :welcome=/etc/motd:\
 :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
 :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\
 :manpath=/usr/share/man /usr/local/man:\
 :nologin=/usr/sbin/nologin:\
 :cputime=1h30m:\
 :datasize=8M:\
 :vmemoryuse=100M:\
 :stacksize=2M:\
 :memorylocked=4M:\
 :memoryuse=8M:\
 :filesize=8M:\
 :coredumpsize=8M:\
 :openfiles=24:\
 :maxproc=32:\
 :priority=0:\
 :requirehome:\
 :passwordtime=91d:\
 :umask=022:\
 :ignoretime@:\
 :label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:

   Die Label-Option in der letzten Zeile legt fest, welches Standard-Label
   fu:r einen Nutzer erzwungen wird. Nutzern darf niemals gestattet werden,
   diese Werte selbst zu vera:ndern, demnach haben Nutzer in dieser Beziehung
   auch keine Wahlfreiheit. In einer richtigen Konfiguration jedoch wird kein
   Administrator alle Richtlinienmodule aktivieren wollen. Es wird an dieser
   Stelle ausdru:cklich empfohlen, dieses Kapitel zu Ende zu lesen, bevor
   irgendein Teil dieser Konfiguration ausprobiert wird.

  Anmerkung:

   Nutzer ko:nnen ihr eigenes Label nach dem Loginvorgang durchaus a:ndern.
   Jedoch kann diese A:nderung nur unter den Auflagen der gerade gu:ltigen
   Richtlinie geschehen. Im Beispiel oben wird fu:r die Biba-Richtlinie eine
   minimale Prozessintegrita:t von 5, eine maximale von 15 angegeben, aber
   die Voreinstellung des tatsa:chlichen Labels ist 10. Der Nutzerprozess
   la:uft also mit einer Integrita:t von 10 bis das Label vera:ndert wird,
   zum Beispiel durch eine Anwendung des Kommandos setpmac, welches jedoch
   auf den Bereich eingeschra:nkt wird, der zum Zeitpunkt des Logins
   angegeben wurde, in diesem Fall von 5 bis 15.

   Nach einer A:nderung der Datei login.conf muss in jedem Fall die
   Befa:higungsdatenbank mit dem Kommando cap_mkdb neu erstellt werden - und
   das gilt fu:r alle im weiteren Verlauf gezeigten Beispiele und
   Diskussionspunkte.

   Es ist nu:tzlich anzumerken, dass viele Einsatzorte eine grosse Anzahl von
   Nutzern haben, die wiederum viele verschiedenen Nutzerklassen angeho:ren
   sollen. Hier ist eine Menge Planungsarbeit notwendig, da die Verwaltung
   sehr unu:bersichtlich und schwierig ist.

    15.4.1.3. Netzwerkschnittstellen und die zugeho:rigen Label

   Labels ko:nnen auch, wenn man sie an Netzwerkschittstellen vergibt,
   helfen, den Datenfluss durch das Netzwerk zu kontrollieren. Das
   funktioniert in allen Fa:llen genau so wie mit Objekten. Nutzer, die in
   der Biba-Richtlinie das Label high tragen, du:rfen nicht auf
   Schnittstellen zugreifen, die low markiert sind usw.

   Die Option maclabel wird via ifconfig u:bergeben. Zum Beispiel

 # ifconfig bge0 maclabel biba/equal

   belegt die Schnittstelle bge(4) mit dem MAC Label biba/equal. Wenn eine
   komplexe Einstellung wie biba/high(low-high) verwendet wird, muss das
   gesamte Label in Anfu:hrungszeichen geschrieben werden, da sonst eine
   Fehlermeldung zuru:ckgegeben wird.

   Jedes Richtlinienmodul, das die Vergabe von Labels unterstu:tzt, stellt
   einen Parameter bereit, mit dem das MAC Label fu:r Netzwerkschnittstellen
   deaktiviert werden kann. Das Label der Netzwerkschnittstelle auf equal zu
   setzen, fu:hrt zum selben Ergebnis. Beachten Sie die Ausgabe von sysctl,
   die Manpages der verschiedenen Richtlinien oder eben die Informationen,
   die im weiteren Verlauf dieses Kapitels angeboten werden, um mehr zu
   diesen Parametern zu erfahren.

  15.4.2. Single- oder Multilabel?

   Als Standardeinstellung verwendet das System die Option single label. Was
   bedeutet das fu:r den Administrator? Es gibt einige Unterschiede zwischen
   single label und multilabel. In ihrer ureigenen Weise bieten beide Vor-
   und Nachteile bezogen auf die Flexibilita:t bei der Modellierung der
   Systemsicherheit.

   Die Option single label gibt jedem Subjekt oder Objekt genau ein einziges
   Label, zum Beispiel biba/high. Mit dieser Option hat man einen geringeren
   Verwaltungsaufwand, aber die Flexibilita:t beim Einsatzes von Richtlinien
   ist ebenso gering. Viele Administratoren wa:hlen daher auch die Option
   multilabel im Sicherheitsmodell, wenn die Umsta:nde es erfordern.

   Die Option multilabel gestattet, jedem einzelnen Subjekt oder Objekt seine
   eigenen unabha:ngigen Label zu zuzuordnen. Die Optionen multilabel und
   singlelabel betreffen jedoch nur die Richtlinien, die Labels als
   Leistungsmerkmal verwenden, einschliesslich der Richtlinien Biba, Lomac,
   MLS und SEBSD.

   Wenn Richtlinien benutzt werden sollen, die ohne Labels auskommen, wird
   die Option multilabel nicht beno:tigt. Dies betrifft die Richtlinien
   seeotheruids, portacl und partition.

   Man sollte sich dessen bewusst sein, dass die Verwendung der Option
   multilabel auf einer Partition und die Erstellung eines Sicherheitsmodells
   auf der Basis der FreeBSD multilevel Funktionalita:t einen hohen
   Verwaltungsaufwand bedeutet, da alles im Dateisystem ein Label bekommt.
   Jedes Verzeichnis, jede Datei und genauso jede Schnittstelle.

   Das folgende Kommando aktiviert multilabel fu:r ein Dateisystem. Dies
   funktioniert nur im Einzelbenutzermodus:

 # tunefs -l enable /

   In einer Swap-Partition wird dies nicht beno:tigt.

  Anmerkung:

   Falls Sie Probleme beim Setzen der Option multilabel auf der
   Root-Partition bemerken, lesen Sie bitte Abschnitt 15.17, "Fehler im MAC
   beheben" dieses Kapitels.

15.5. Planung eines Sicherheitsmodells

   Wann immer eine neue Technologie eingepflegt werden soll, ist es wichtig,
   vorher einen Plan zu erstellen. In den verschiedenen Etappen der Planung
   sollte der Administrator nie das "Grosse Ganze" aus den Augen verlieren
   und mindestens die folgenden Punkte beachten:

     * Die Anforderungen

     * Die Ziele

   Wenn Sie MAC verwenden mo:chten, sind das im Besonderen folgende Punkte:

     * Wie werden Informationen und Ressourcen auf den Zielsystemen
       klassifiziert?

     * Welche Arten von Informationen bzw. Ressourcen sollen im Zugang
       beschra:nkt sein und welche Art Einschra:nkung soll verwendet werden?

     * Welche(s) MAC Modul(e) wa:hlt man, um sein Ziel zu erreichen?

   Es ist immer mo:glich, die Einstellungen des Systems und der
   Systemressourcen im Nachhinein zu "optimieren". Es ist aber wirklich
   la:stig, das gesamte Dateisystem zu durchsuchen, um Dateien oder
   Benutzerkonten zu reparieren. Eine gute Planung hilft dem Administrator,
   sich einer sorgenfreien und effizienten Umsetzung eines Sicherheitsmodells
   zu versichern. Testlauf des Sicherheitsmodells vor dem Einsatz in seiner
   richtigen Arbeitsumgebung ist auf jeden Fall empfehlenswert. Die Idee, ein
   System mit einer MAC einfach loslaufen zu lassen, ist wie direkt auf einen
   Fehlschlag hinzuarbeiten.

   Jede Umgebung hat ihre eigenen Anforderungen. Ein tiefgreifendes und
   vollsta:ndiges Sicherheitsprofil zu erstellen spart weitere A:nderungen,
   nachdem das System in Betrieb genommen wurde. Also werden die folgenden
   Abschnitte die verschiedenen Module vorstellen, die den Administratoren
   zur Verfu:gung gestellt werden, die Nutzung und Konfiguration der
   einzelnen Module beschreiben; und in einigen Fa:llen Einblicke gewa:hren,
   fu:r welche Situationen welche Module besonders geeignet sind. Zum
   Beispiel ein Webserver kann von der Verwendung der mac_biba(4) oder der
   mac_bsdextended(4) Richtlinie profitieren. In anderen Fa:llen, an einem
   Rechner mit nur wenigen lokalen Benutzern, ist die mac_partition(4) die
   Richtlinie der Wahl.

15.6. Modulkonfiguration

   Jedes Modul, das in der MAC enthalten ist, kann entweder direkt in den
   Kernel eingefu:gt werden oder als Kernelmodul in der Laufzeit des Systems
   geladen werden. Empfohlen wird, den Modulnamen in der Datei
   /boot/loader.conf anzufu:gen, so dass das Modul am Anfang des Bootvorgangs
   eingebunden wird.

   Die folgenden Abschnitte werden verschiedene MAC Module und ihre
   jeweiligen Vor- und Nachteile vorstellen. Ausserdem wird erkla:rt, wie sie
   in bestimmte Umgebungen eingearbeitet werden ko:nnen. Einige Module
   unterstu:tzen die Verwendung von Labels, das heisst Zugriffskontrolle
   durch hinzufu:gen einer Kennzeichnung in der Art von "dieses ist erlaubt,
   jenes aber nicht". Eine Label-Konfigurationdatei kontrolliert unter
   anderem, wie auf Dateien zugegriffen oder wie u:ber das Netzwerk
   kommuniziert werden darf. Im vorangehenden Abschnitt wurde bereits
   erla:utert, wie die Option multilabel auf Dateisysteme angewendet wird, um
   eine Zugriffskontrolle auf einzelne Dateien oder ganze Dateisysteme zu
   konfigurieren.

   Eine single label Konfiguration erzwingt ein einzelnes Label fu:r das
   gesamte System. Daher wird die tunefs-Option multilabel genannt.

15.7. Das MAC Modul seeotheruids

   Modulename: mac_seeotheruids.ko

   Parameter in der Kernelkonfiguration: options MAC_SEEOTHERUIDS

   Bootparameter: mac_seeotheruids_load="YES"

   Das Modul mac_seeotheruids(4) erweitert die sysctl-Variablen
   security.bsd.see_other_uids und security.bsd.see_other_gids. Diese
   Optionen beno:tigen keine im Vorhinein zu setzenden Labels und ko:nnen
   leicht durchschaubar mit den anderen MAC-Modulen zusammenarbeiten.

   Nachdem das Modul geladen wurde, ko:nnen die folgenden sysctl Variablen
   verwendet werden.

     * security.mac.seeotheruids.enabled dient zur Aktivierung des Moduls,
       zuna:chst mit den Standardeinstellungen. Diese verhindern, dass Nutzer
       Prozesse und Sockets sehen ko:nnen, die ihnen nicht selbst geho:en.

     * security.mac.seeotheruids.specificgid_enabled kann eine spezifizierte
       Nutzergruppe von dieser Richtlinie ausnehmen. Die entsprechende Gruppe
       muss an den Parameter security.mac.seeotheruids.specificgid=XXX
       u:bergeben werden, wobei XXX die ID der Gruppe ist, die von der
       Richtlinie ausgenommen werden soll.

     * security.mac.seeotheruids.primarygroup_enabled kann verwendet werden,
       um eine spezifische, prima:re Nutzergruppe von der Richtlinie
       auszuschliessen. Dieser Parameter und
       security.mac.seeotheruids.specificgid_enabled schliessen einander aus.

15.8. Das MAC Modul bsdextended

   Modulname: mac_bsdextended.ko

   Parameter in der Kernelkonfiguration: options MAC_BSDEXTENDED

   Bootparameter: mac_bsdextended_load="YES"

   Das Modul mac_bsdextended(4) erstellt eine Firewall fu:r das Dateisystem
   und ist eine Erweiterung des sonst u:blichen Rechtemodells. Es erlaubt
   einem Administrator einen Regelsatz zum Schutz von Dateien, Werkzeugen und
   Verzeichnissen in der Dateisystemhierarchie zu erstellen, der einer
   Firewall a:hnelt. Sobald auf ein Objekt im Dateisystem zugegriffen werden
   soll, wird eine Liste von Regel abgearbeitet, bis eine passende Regel
   gefunden wird oder die Liste zu Ende ist. Das Verhalten kann durch die
   A:nderung des sysctl(8) Parameters
   security.mac.bsdextended.firstmatch_enabled eingestellt werden. A:hnlich
   wie bei den anderen Firewallmodulen in FreeBSD wird eine Datei erstellt,
   welche die Zugriffsregeln entha:lt. Diese wird beim Systemstart durch eine
   Variable in rc.conf(5) eingebunden.

   Der Regelsatz kann mit dem Programm ugidfw(8) eingepflegt werden, welches
   eine Syntax bereitstellt, die der von ipfw(8) gleicht. Weitere Werkzeuge
   ko:nnen auch selbst erstellt werden, indem die Funktionen der Bibliothek
   libugidfw(3) verwendet werden.

   Bei der Arbeit mit diesem Modul ist a:usserste Vorsicht geboten - falscher
   Gebrauch kann den Zugriff auf Teile des Dateisystems komplett unterbinden.

  15.8.1. Beispiele

   Nachdem das Modul mac_bsdextended(4) erfolgreich geladen wurde, zeigt das
   folgende Kommando die gegenwa:rtig aktiven Regeln an:

 # ugidfw list 0 slots, 0 rules

   Wie erwartet, sind keine Regeln definiert. Das bedeutet, das auf alle
   Teile des Dateisystems zugegriffen werden kann. Um eine Regel zu
   definieren, die jeden Zugriff durch Nutzer blockiert und nur die Rechte
   von root unangetastet la:sst, muss lediglich dieses Kommando ausgefu:hrt
   werden:

 # ugidfw add subject not uid root new object not uid root mode n

   Das ist allerdings keine gute Idee, da nun allen Nutzern der Zugriff auf
   selbst die einfachsten Programme wie ls untersagt wird. Angemessener wa:re
   etwas wie:

 # ugidfw set 2 subject uid user1 object uid user2 mode n
 # ugidfw set 3 subject uid user1 object gid user2 mode n

   Diese Befehle bewirken, dass user1 keinen Zugriff mehr auf Dateien und
   Programme hat, die user2 geho:ren. Dies schliesst das Auslesen von
   Verzeichniseintra:gen ein.

   Anstelle uid user1 ko:nnte auch not uid user2 als Parameter u:bergeben
   werden. Dies wu:rde diesselben Einschra:nkungen fu:r alle Nutzer bewirken
   anstatt nur einen einzigen.

  Anmerkung:

   root ist von diesen Einstellungen nicht betroffen.

   Dies sollte als U:berblick ausreichen, um zu verstehen, wie das Modul
   mac_bsdextended(4) helfen kann, das Dateisystem abzuschotten. Weitere
   Informationen bieten die Manpages mac_bsdextended(4) und ugidfw(8).

15.9. Das MAC Modul ifoff

   Modulname: mac_ifoff.ko

   Parameter fu:r die Kernelkonfiguration: options MAC_IFOFF

   Bootparameter: mac_ifoff_load="YES"

   Das Modul mac_ifoff(4) ist einzig dazu da, Netzwerkschnittstellen im
   laufenden Betrieb zu deaktivieren oder zu verhindern, das
   Netzwerkschnittstellen wa:hrend der Bootphase gestartet werden. Dieses
   Modul beno:tigt fu:r seinen Betrieb weder Labels, die auf dem System
   eingerichtet werden mu:ssen, noch hat es Abha:ngigkeiten zu anderen MAC
   Modulen.

   Der gro:sste Teil der Kontrolle geschieht u:ber die im folgenden
   aufgelisteten sysctl-Parameter:

     * security.mac.ifoff.lo_enabled schaltet den gesamten Netzwerkverkehr
       auf der Loopback-Schnittstelle lo(4) an bzw. aus.

     * security.mac.ifoff.bpfrecv_enabled macht das Gleiche fu:r den Berkeley
       Paket Filter bpf(4).

     * security.mac.ifoff.other_enabled schaltet den Verkehr fu:r alle
       anderen Netzwerkschnittstellen.

   Die wahrscheinlich ha:ufigste Nutzung von mac_ifoff(4) ist die
   U:berwachung des Netzwerks in einer Umgebung, in der kein Netzwerkverkehr
   wa:hrend des Bootvorgangs erlaubt werden soll. Eine andere mo:gliche
   Anwendung wa:re ein Script, das mit Hilfe von security/aide automatisch
   alle Schnittstellen blockiert, sobald Dateien in geschu:tzten
   Verzeichnissen angelegt oder vera:ndert werden.

15.10. Das MAC Modul portacl

   Modulname: mac_portacl.ko

   Parameter fu:r die Kernelkonfiguration: options MAC_PORTACL

   Bootparameter: mac_portacl_load="YES"

   Mit Hilfe des Moduls mac_portacl(4) ko:nnen die Anbindungen an die lokalen
   TCP und UDP Ports durch eine Vielzahl von sysctl Variablen beschra:nkt
   werden. Genauer gesagt ermo:glicht mac_portacl(4) Nutzern ohne
   root-Rechten den Zugriff auf zu bestimmende privilegierte Ports, also
   denen innerhalb der ersten 1024.

   Sobald das Modul geladen wurde, ist die Richtlinie fu:r alle Sockets
   verfu:gbar. Die folgenden Variablen ko:nnen fu:r die Konfiguration
   verwendet werden:

     * security.mac.portacl.enabled schaltet die Anwendung der Richtlinie ein
       oder aus.

     * security.mac.portacl.port_high gibt den ho:chsten Port an, der von der
       Richtlinie mac_portacl(4) betroffen sein soll.

     * security.mac.portacl.suser_exempt nimmt, wenn es einen Wert ungleich
       Null zugewiesen bekommt, root von der Richtlinie aus.

     * security.mac.portacl.rules entha:lt als Wert die eigentliche
       mac_portacl Richtlinie.

   Die eigentliche Konfiguration der mac_portacl Richtlinie wird der
   sysctl-Variablen security.mac.portacl.rules als Zeichenkette der Form
   rule[,rule,...] u:bergeben. Jede einzelne Regel hat die Form
   idtype:id:protocol:port. Der Parameter idtype ist entweder uid oder gid
   und wird verwendet, um den Parameter id als Nutzer-ID oder Gruppen-ID zu
   kennzeichnen. Der Parameter protocol gibt an, ob die Regel u:r TCP oder
   UDP gelten soll (indem man den Wert auf tcp oder udp setzt). Und der
   letzte Parameter, port, entha:lt die Nummer des Ports, auf den der
   angegebene Nutzer bzw. die angegebene Gruppe Zugriff erhalten soll.

  Anmerkung:

   Da der Regelsatz direkt vom Kernel ausgewertet wird, ko:nnen nur
   Zahlenwerte u:bergeben werden. Das heisst, Namen von Nutzern, Gruppen oder
   Dienstnamen aus der Datei /etc/services funktionieren nicht.

   Auf UNIX(R)-artigen Betriebssystemen sind die Ports kleiner 1024
   privilegierten Prozessen vorbehalten, mu:ssen also mit als/von root
   gestartet werden und weiterhin laufen. Damit mac_portacl(4) die Vergabe
   von Ports kleiner als 1024 an nicht privilegierte Prozesse u:bernehmen
   kann, muss die UNIX(R) Standardeinstellung deaktiviert werden. Dazu
   a:ndert man die sysctl(8) Variablen net.inet.ip.portrange.reservedlow und
   net.inet.ip.portrange.reservedhigh auf den Wert "0".

   Weiterfu:hrende Informationen entnehmen Sie bitte den unten aufgefu:hrten
   Beispielen oder der Man-Page mac_portacl(4)!

  15.10.1. Beispiele

   Die folgenden Beispiele sollten ein wenig Licht in die obige Diskussion
   bringen:

 # sysctl security.mac.portacl.port_high=1023
 # sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0

   Zuna:chst bestimmen wir, dass mac_portacl(4) fu:r alle privilegierten
   Ports gelten soll und deaktivieren die normale UNIX(R)-Beschra:nkung.

 # sysctl security.mac.portacl.suser_exempt=1

   Da root von dieser Richtlinie nicht beeintra:chtigt werden soll, setzen
   wir hier security.mac.portacl.suser_exempt auf einen Wert ungleich Null.
   Das Modul mac_portacl(4) ist nun so eingerichtet, wie es UNIX(R)-artige
   Betriebssysteme normal ebenfalls tun.

 # sysctl security.mac.portacl.rules=uid:80:tcp:80

   Nun erlauben wir dem Nutzer mit der UID 80, normalerweise dem Nutzer www,
   den Port 80 zu verwenden. Dadurch kann der Nutzer www einen Webserver
   betreiben, ohne dafu:r mit root-Privilegien ausgestattet zu sein.

 # sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995

   Hier wird dem Nutzer mit der UID 1001 erlaubt, die TCP Ports 110 ("pop3")
   und 995 ("pop3s") zu verwenden. Dadurch kann dieser Nutzer einen Server
   starten, der Verbindungen an diesen beiden Ports annehmen kann.

15.11. Das MAC Modul partition

   Modulname: mac_partition.ko

   Parameter fu:r die Kernelkonfiguration: options MAC_PARTITION

   Bootparameter mac_partition_load="YES"

   Die Richtlinie mac_partition(4) setzt Prozesse in spezielle "Partitionen",
   entsprechend dem zugewiesenen MAC Label. Man kann sich das vorstellen wie
   eine spezielle Art jail(8), auch wenn das noch kein wirklich guter
   Vergleich ist.

   Es wird empfohlen, dieses Modul durch einen Eintrag in loader.conf(5) zu
   aktivieren, so dass die Richtlinie wa:hrend des Bootvorganges eingebunden
   wird.

   Der Grossteil der Konfiguration geschieht mit dem Kommando setpmac(8), wie
   gleich erkla:rt wird. Ausserdem gibt es folgenden sysctl Parameter fu:r
   diese Richtlinie.

     * security.mac.partition.enabled erzwingt die Verwendung von MAC
       Prozess-Partitionen.

   Sobald diese Richtlinie aktiv ist, sehen Nutzer nur noch ihre eigenen
   Prozesse, und alle anderen Prozesse, die ebenfalls derselben
   Prozess-Partition zugeordnet sind. Sie ko:nnen jedoch nicht auf Prozesse
   oder Werkzeuge ausserhalb des Anwendungsbereich dieser Partition
   zugreifen. Das bedeutet unter anderem, das ein Nutzer, der einer Klasse
   insecure zugeordnet ist, nicht auf das Kommando top zugreifen kann - wie
   auch auf viele anderen Befehle, die einen eigenen Prozess erzeugen.

   Um einen Befehl einer Prozess-Partition zuzuordnen, muss dieser durch das
   Kommando setpmac mit einem Label versehen werden:

 # setpmac partition/13 top

   Diese Zeile fu:gt das Kommando top dem Labelsatz fu:r Nutzer der Klasse
   insecure hinzu, sofern die Partition 13 mit der Klasse insecure
   u:bereinstimmt. Beachten Sie, dass alle Prozesse, die von Nutzern dieser
   Klasse erzeugt werden, das Label partition/13 erhalten, und dieses auch
   nicht durch den Nutzer gea:ndert werden kann.

  15.11.1. Beispiele

   Der folgende Befehl listet die vergebenen Label fu:r Prozess-Partitionen
   und die laufenden Prozesse auf.

 # ps Zax

   Das na:chste Kommando liefert das Label der Prozess-Partition eines
   anderen Nutzers trhodes und dessen gegenwa:rtig laufenden Prozesse
   zuru:ck.

 # ps -ZU trhodes

  Anmerkung:

   Jeder Nutzer kann die Prozesse in der Prozess-Partition von root
   betrachten, solange nicht die Richtlinie mac_seeotheruids(4) geladen
   wurde.

   Eine ausgefeilte Umsetzung dieser Richtlinie deaktiviert alle Dienste in
   /etc/rc.conf und startet diese dann spa:ter durch ein Skript, das jedem
   Dienst das passende Label zuordnet.

  Anmerkung:

   Die folgenden Richtlinien verwenden Zahlenwerte anstatt der drei
   Standardlabels. Diese Optionen, und ihre Grenzen, werden in den
   zugeho:rigen Manpages genauer erkla:rt.

15.12. Das MAC Modul Multi-Level Security

   Modulname: mac_mls.ko

   Parameter fu:r die Kernelkonfiguration: options MAC_MLS

   Bootparameter: mac_mls_load="YES"

   Die Richtlinie mac_mls(4) kontrolliert die Zugriffe zwischen Subjekten und
   Objekten, indem sie den Informationsfluss strengen Regeln unterwirft.

   In MLS Umgebungen wird jedem Subjekt oder Objekt ein "Freigabe"-Level
   zugeordnet, und diese werden wiederum zu einzelnen Verbu:nden
   zusammengefasst. Da diese Freigabe- oder Anfa:lligkeits-Level Zahlen
   gro:sser 6000 erreichen ko:nnen, ist es fu:r jeden Systemadministrator
   eine undankbare Aufgabe, jede Entita:t von Grund auf zu konfigurieren. Zum
   Glu:ck gibt es 3 "instant" Labels, die in der Richtlinie zur Anwendung
   bereit stehen.

   Diese drei Labels heissen mls/low, mls/equal und mls/high. Da sie in den
   Manpages mac_mls(4) ausfu:hrlich beschrieben werden, gibt es hier nur
   einen kurzen Abriss:

     * Das Label mls/low ist eine niedrige Einstellung, die von allen anderen
       dominiert werden darf. Alles, was mit mls/low versehen wird, hat ein
       niedriges Freigabe-Level und darf auf keine Informationen zugreifen,
       denen ein ho:heres Freigabe-Level zugeordnet wurde. Einem Objekt mit
       diesem Label kann ausserdem keine Information durch ein Objekt
       ho:herer Freigabe u:bergeben werden, es kann also auch nicht durch
       solche Objekte editiert oder u:berschrieben werden.

     * Das Label mls/equal wird an Objekte vergeben, die von dieser
       Richtlinie ausgenommen werden sollen.

     * Das Label mls/high verko:rpert das ho:chstmo:gliche Freigabe-Level.
       Objekte, denen dieses Label zugeordnet wird, dominieren alle anderen
       Objekte des Systems. Trotzdem ko:nnen sie Objekten mit einem
       niedrigeren Freigabe-Level keine Informationen zuspielen.

   MLS bietet:

     * Eine hierarchische Sicherheitsschicht und Zuordnung
       nichthierarchischer Kategorien;

     * Feste Regeln: kein "Read-Up", kein "Write-Down" (ein Subjekt kann nur
       Objekte gleicher oder niedrigerer Stufe lesen, und es kann nur Objekte
       gleicher oder ho:herer Stufe schreiben);

     * Geheimhaltung (indem unangemessene Offenlegung von Daten verhindert
       wird);

     * Eine Basis zum Entwerfen von Systemen, die Daten verschiedener
       Vertraulichkeitsebenen gleichzeitig handhaben sollen (ohne das geheime
       und vertrauliche Informationen untereinander ausgetauscht werden
       ko:nnen).

   Nachfolgend werden die sysctl-Variablen vorgestellt, die fu:r die
   Einrichtung spezieller Dienste und Schnittstellen vorhanden sind.

     * security.mac.mls.enabled schaltet die Richtlinie MLS ein (oder aus).

     * security.mac.mls.ptys_equal sorgt dafu:r, dass wa:hrend der
       Initialisierung alle pty(4)-Gera:te als mls/equal gekennzeichnet
       werden.

     * security.mac.mls.revocation_enabled sorgt dafu:r, dass die
       Zugriffsrechte von Objekten wieder zuru:ckgesetzt werden, nachdem
       deren Label voru:bergehend auf ein niedrigeres Freigabe-Level
       gea:ndert wurde.

     * security.mac.mls.max_compartments gibt die maximale Anzahl von
       Verbu:nden an. Im Prinzip ist es die ho:chste Nummer eines Verbundes
       auf dem System.

   Um die Labels der MLS Richtlinie zu bearbeiten verwendet man setfmac(8).
   Um ein Objekt zu kennzeichnen, benutzen Sie folgendes Kommando:

 # setfmac mls/5 test

   Um das MLS-Label der Datei test auszulesen, verwenden Sie dieses Kommando:

 # getfmac test

   Dies ist eine Zusammenstellung der Merkmale von test. Ein anderer Ansatz
   ist, fu:r diese Richtlinie eine Konfigurationsdatei in /etc abzulegen, die
   alle Informationen entha:lt und mit der dann das Kommando setfmac
   gefu:ttert wird. Diese Vorgehensweise wird erkla:rt, nachdem alle
   Richtlinien vorgestellt wurden.

  15.12.1. Verbindlicher Vertraulichkeit in der Planungsphase

   Mit dem Richtlinienmodul Multi-Level Security bereitet sich ein
   Administrator darauf vor, den Fluss vertraulicher Informationen zu
   kontrollieren. Beim Starten der Richtlinie ist immer mls/low
   voreingestellt - alles kann auf alles zugreifen. Der Administrator a:ndert
   dies wa:hrend der eigentlichen Konfiguration, indem er die Vertraulichkeit
   bestimmter Objekte erho:ht.

   Jenseits der drei Grundeinstellungen des Labels kann der Administrator
   einzelne Nutzer oder Nutzergruppen nach Bedarf zusammenschliessen und den
   Informationsaustausch zwischen diesen gestatten oder unterbinden. Es ist
   sicher eine Vereinfachung, die Freigabe-Level mit Begriffen wie
   vertraulich, geheim oder streng geheim zu bezeichnen. Einige
   Administratoren erstellen einfach verschiedene Gruppen auf der Ebene von
   gegenwa:rtigen Projekten. Ungeachtet der Herangehensweise bei der
   Klassifizierung muss ein gut durchdachter Plan existieren, bevor eine
   derart einengende Richtlinie umgesetzt wird.

   Exemplarisch fu:r die Anwendung dieses Moduls bzw. dieser Richtlinie seien
   angefu:hrt:

     * Ein E-Commerce Webserver

     * Ein Dateiserver, der vertrauliche Informationen einer Firma oder eines
       Konzerns speichert

     * Umgebungen in Finanzeinrichtungen

   Der unsinnigste Einsatzort fu:r diese Richtlinie wa:re ein
   Arbeitsplatzrechner mit nur zwei oder drei Benutzern.

15.13. Das MAC Modul Biba

   Modulname: mac_biba.ko

   Parameter fu:r die Kernelkonfiguration: options MAC_BIBA

   Bootparameter: mac_biba_load="YES"

   Das Modul mac_biba(4) la:dt die MAC Biba Richtlinie. Diese a:hnelt stark
   der MLS Richtlinie, nur das die Regeln fu:r den Informationsfluss ein
   wenig vertauscht sind. Es wird in diesem Fall der absteigende Fluss
   sicherheitskritischer Information geregelt, wa:hrend die MLS Richtlinie
   den aufsteigenden Fluss regelt. In gewissen Sinne treffen dieses und das
   vorangegangene Unterkapitel also auf beide Richtlinien zu.

   In einer Biba-Umgebung wird jedem Subjekt und jedem Objekt ein
   "Integrita:ts"-Label zugeordnet. Diese Labels sind in hierarchischen
   Klassen und nicht-hierarchischen Komponenten geordnet. Je ho:her die
   Klasse, um so ho:her die Integrita:t.

   Die unterstu:tzten Labels heissen biba/low, biba/equal und biba/high. Sie
   werden im Folgenden erkla:rt:

     * biba/low ist die niedrigste Stufe der Integrita:t, die einem Objekt
       verliehen werden kann. Wenn sie einem Objekt oder Subjekt zugeordnet
       wird, kann dieses auf Objekte oder Subjekte, die biba/high markiert
       wurden, zwar lesend zugreifen, nicht jedoch schreibend.

     * Das Label biba/equal ist, wie der aufmerksame Leser sicherlich schon
       ahnt, fu:r die Ausnahmen dieser Richtlinie gedacht und sollte nur
       diesen Ausnahmen entsprechenden Objekten verliehen werden.

     * biba/high markierte Subjekte und Objekte ko:nnen Objekte niedrigerer
       Stufe schreiben , nicht jedoch lesen. Es wird empfohlen, dass dieses
       Label an Objekte vergeben wird, die sich auf Integrita:t des gesamten
       Systems auswirken.

   Biba stellt bereit:

     * Hierarchische Integrita:tsstufen mit einem Satz nichthierarchischer
       Integrita:tskategorien;

     * Festgeschriebene Regeln: kein "Write-Up", kein "Read-Down" (der
       Gegensatz zu MLS - ein Subjekt erha:lt schreibenden Zugriff auf
       Objekte gleicher oder geringerer Stufe, aber nicht bei ho:herer, und
       lesenden Zugriff bei gleicher Stufe oder ho:erer, aber nicht bei
       niedrigerer);

     * Integrita:t (es wird die Echtheit der Daten gewa:hrleistet, indem
       unangemessene Vera:nderungen verhindert werden);

     * Eine Abstufung der Gewa:hrleistung (im Gegensatz zu MLS, bei der eine
       Abstufung der Vertraulichkeit vorgenommen wird).

   Folgende sysctl Parameter werden zur Nutzung der Biba-Richtlinie
   angeboten:

     * security.mac.biba.enabled zum Aktivieren/Deaktivieren der Richtlinie
       auf dem Zielsystem.

     * security.mac.biba.ptys_equal wird verwendet, um die Biba-Richtlinie
       auf der pty(4)-Schnittstelle zu deaktivieren.

     * security.mac.biba.revocation_enabled erzwingt das Zuru:cksetzen des
       Labels, falls dieses zeitweise gea:ndert wurde um ein Subjekt zu
       dominieren.

   Um Einstellungen der Biba Richtlinie fu:r Systemobjekte zu vera:ndern
   werden die Befehle setfmac und getfmac verwendet:

 # setfmac biba/low test
 # getfmac test
 test: biba/low

  15.13.1. Verbindliche Integrita:t in der Planungsphase

   Integrita:t garantiert, im Unterschied zu Sensitivita:t, dass
   Informationen nur durch vertraute Parteien vera:ndert werden ko:nnen. Dies
   schliesst Informationen ein, die zwischen Subjekten ausgetauscht werden,
   zwischen Objekt, oder auch zwischen den beiden. Durch Integrita:t wird
   gesichert, das Nutzer nur Informationen vera:ndern, oder gar nur lesen
   ko:nnen, die sie explizit beno:tigen.

   Das Modul mac_biba(4) ero:ffnet einem Administrator die Mo:glichkeit zu
   bestimmen, welche Dateien oder Programme ein Nutzer oder eine Nutzergruppe
   sehen bzw. aufrufen darf. Gleichzeitig kann er zusichern, dass dieselben
   Programme und Dateien frei von Bedrohungen sind und das System die
   Echtheit gewa:hrleistet - fu:r diesen Nutzer oder die Nutzergruppe.

   Wa:hrend der anfa:nglichen Phase der Planung muss der Administrator
   vorbereitet sein, Nutzer in Klassen, Stufen und Bereiche einzuteilen. Der
   Zugriff auf Dateien und insbesondere auch Programme wird verhindert sowohl
   vor als auch nachdem sie gestartet wurden. Das System selbst erha:lt als
   Voreinstellung das Label biba/high sobald das Modul aktiviert wird - und
   es liegt allein am Administrator, die verschiedenen Klassen und Stufen
   fu:r die einzelnen Nutzer zu konfigurieren. Anstatt mit Freigaben zu
   arbeiten, wie weiter oben gezeigt wurde, ko:nnte man auch U:berbegriffe
   fu:r Projekte oder Systemkomponenten entwerfen. Zum Beispiel,
   ausschliesslich Entwicklern den Vollzugriff auf Quellcode, Compiler und
   Entwicklungswerkzeuge gewa:hren, wa:hrend man andere Nutzer in Kategorien
   wie Tester, Designer oder einfach nur "allgemeiner Nutzer" zusammenfasst,
   die fu:r diese Bereiche lediglich lesenden Zugriff erhalten sollen.

   Mit seinem urspru:nglichen Sicherheits-Standpunkt ist ein Subjekt
   niedrigerer Integrita:t unfa:hig, ein Subjekt ho:herer Integrita:t zu
   vera:ndern. Ein Subjekt ho:herer Integrita:t kann ein Subjekt niedrigerer
   Integrita:t weder beobachten noch lesen. Wenn man ein Label fu:r die
   niedrigstmo:gliche Klasse erstellt, kann man diese allen Subjekten
   verwehren. Einige weitsichtig eingerichtete Umgebungen, die diese
   Richtlinie verwenden, sind eingeschra:nkte Webserver, Entwicklungs- oder
   Test-Rechner oder Quellcode-Sammlungen. Wenig sinnvoll ist diese
   Richtlinie auf einer Arbeitsstation, oder auf Rechnern die als Router oder
   Firewall verwendet werden.

15.14. Das MAC Modul LOMAC

   Modulname: mac_lomac.ko

   Parameter fu:r die Kernelkonfiguration: options MAC_LOMAC

   Bootparameter: mac_lomac_load="YES"

   Anders als die Biba Richtlinie erlaubt die mac_lomac(4) Richtlinie den
   Zugriff auf Objekte niedrigerer Integrita:t nur, nachdem das
   Integrita:tslevel gesenkt wurde. Dadurch wird eine Sto:rung
   derIntegrita:tsregeln verhindert.

   Die MAC Version der "Low-Watermark" Richtlinie, die nicht mit der a:lteren
   lomac(4)-Implementierung verwechselt werden darf, arbeitet fast genauso
   wie Biba. Anders ist, dass hier "schwebende" Label verwendet werden, die
   ein Herunterstufen von Subjekten durch Hilfsverbu:nde ermo:glichen. Dieser
   zweite Verbund wird in der Form [auxgrade] angegeben und sollte in etwa
   aussehen wie lomac/10[2], wobei die Ziffer zwei (2) hier den Hilfsverbund
   abbildet.

   Die MAC Richtlinie LOMAC beruht auf einer durchga:ngigen Etikettierung
   aller Systemobjekte mit Integrita:tslabeln, die Subjekten das Lesen von
   Objekten niedriger Integrita:t gestatten und dann das Label des Subjektes
   herunterstufen - um zuku:nftige Schreibvorga:nge auf Objekte hoher
   Integrita:t zu unterbinden. Dies ist die Funktion der Option [auxgrade],
   die eben vorgestellt wurde. Durch sie erha:lt diese Richtlinie eine
   bessere Kompatibilita:t und die Initialisierung ist weniger aufwa:ndig als
   bei der Richtlinie Biba.

  15.14.1. Beispiele

   Wie schon bei den Richtlinien Biba und MLS werden die Befehle setfmac und
   setpmac verwendet, um die Labels an den Systemobjekten zu setzen:

 # setfmac /usr/home/trhodes lomac/high[low]
 # getfmac /usr/home/trhodes lomac/high[low]

   Beachten Sie, dass hier der Hilfswert auf low gesetzt wurde - dieses
   Leistungsmerkmal ist nur in der MAC LOMAC Richtlinie enthalten.

15.15. Beispiel 1: Nagios in einer MAC Jail

   Die folgende Demonstration setzt eine sichere Umgebung mithilfe
   verschiedener MAC Module und sorgfa:ltig konfigurierter Richtlinien um. Es
   handelt sich jedoch nur um einen Test und sollte nicht als Antwort auf
   jedes Problem in Fragen Sicherheit gesehen werden. Eine Richtlinie nur
   umzusetzen und dann einfach laufen zu lassen, funktioniert nie und kann
   eine echte Arbeitsumgebung in eine Katastrophe stu:rzen.

   Bevor es losgeht, muss jedes Dateisystem mit der Option multilabel, wie
   weiter oben beschrieben, markiert werden. Dies nicht zu tun, fu:hrt zu
   Fehlern. Ausserdem mu:ssen die Ports net-mngt/nagios-plugins,
   net-mngt/nagios und www/apache22 installiert und konfiguriert sein, so
   dass sie ordentlich laufen.

  15.15.1. Erstellen einer Nutzerklasse insecure

   Beginnen wir die Prozedur mit dem Hinzufu:gen einer Nutzerklasse in der
   Datei /etc/login.conf:

 insecure:\
 :copyright=/etc/COPYRIGHT:\
 :welcome=/etc/motd:\
 :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
 :path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin--
 :manpath=/usr/share/man /usr/local/man:\
 :nologin=/usr/sbin/nologin:\
 :cputime=1h30m:\
 :datasize=8M:\
 :vmemoryuse=100M:\
 :stacksize=2M:\
 :memorylocked=4M:\
 :memoryuse=8M:\
 :filesize=8M:\
 :coredumpsize=8M:\
 :openfiles=24:\
 :maxproc=32:\
 :priority=0:\
 :requirehome:\
 :passwordtime=91d:\
 :umask=022:\
 :ignoretime@:\
 :label=biba/10(10-10):

   Zusa:tzlich fu:gen wir beim Standardnutzer folgende Zeile hinzu:

 :label=biba/high:

   Anschliessend muss die Datenbank neu erstellt werden:

 # cap_mkdb /etc/login.conf

  15.15.2. Boot-Konfiguration

   Starten Sie den Rechner noch nicht neu. Fu:gen Sie zuna:chst noch die
   folgenden Zeilen in die Datei /boot/loader.conf ein, damit die beno:tigten
   Module wa:hrend des Systemstarts geladen werden:

 mac_biba_load="YES"
 mac_seeotheruids_load="YES"

  15.15.3. Nutzer einrichten

   Ordnen Sie den Superuser root der Klasse default zu:

 # pw usermod root -L default

   Alle Nutzerkonten, die weder root noch Systemkonten sind, brauchen nun
   eine Loginklasse, da sie sonst keinen Zugriff auf sonst u:bliche Befehle
   erhalten, wie bspw. vi(1). Das folgende sh Skript wird diese Aufgabe
   erledigen:

 # for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \
       /etc/passwd`; do pw usermod $x -L default; done;

   Verschieben Sie die Nutzer nagios und www in die insecure Klasse:

 # pw usermod nagios -L insecure

 # pw usermod www -L insecure

  15.15.4. Die Kontextdatei erstellen

   Nun muss eine Kontextdatei erstellt werden. Die folgende Beispieldatei
   soll dazu in /etc/policy.contexts gespeichert werden:

 # This is the default BIBA policy for this system.

 # System:
 /var/run                        biba/equal
 /var/run/*                      biba/equal

 /dev                            biba/equal
 /dev/*                          biba/equal

 /var                            biba/equal
 /var/spool                      biba/equal
 /var/spool/*                    biba/equal

 /var/log                        biba/equal
 /var/log/*                      biba/equal

 /tmp                            biba/equal
 /tmp/*                          biba/equal
 /var/tmp                        biba/equal
 /var/tmp/*                      biba/equal

 /var/spool/mqueue               biba/equal
 /var/spool/clientmqueue         biba/equal

 # For Nagios:
 /usr/local/etc/nagios
 /usr/local/etc/nagios/*         biba/10

 /var/spool/nagios               biba/10
 /var/spool/nagios/*             biba/10

 # For apache
 /usr/local/etc/apache           biba/10
 /usr/local/etc/apache/*         biba/10

   Die Richtlinie erzwingt Sicherheit, indem der Informationsfluss
   Einschra:nkungen unterworfen wird. In der vorliegenden Konfiguration kann
   kein Nutzer, weder root noch andere, auf Nagios zugreifen.
   Konfigurationsdateien und die Prozesse, die Teil von Nagios sind, werden
   durch unsere MAC vollsta:ndig abgegrenzt.

   Die Kontextdatei kann nun vom System eingelesen werden, indem folgender
   Befehl ausgefu:hrt wird:

 # setfmac -ef /etc/policy.contexts /
 # setfmac -ef /etc/policy.contexts /

  Anmerkung:

   Das obenstehende Dateisystem-Layout kann, je nach Umgebung, sehr
   unterschiedlich aussehen. Ausserdem muss es auf jedem einzelnen
   Dateisystem ausgefu:hrt werden.

   In die Datei /etc/mac.conf mu:ssen nun noch diese A:nderungen eingetragen
   werden:

 default_labels file ?biba
 default_labels ifnet ?biba
 default_labels process ?biba
 default_labels socket ?biba

  15.15.5. Netzwerke einbinden

   Tragen Sie die folgende Zeile in die Datei /boot/loader.conf ein:

 security.mac.biba.trust_all_interfaces=1

   Und das Folgende geho:rt in Datei rc.conf zu den Optionen fu:r die
   Netzwerkkarte. Falls die Netzwerkverbindung(-en) via DHCP konfiguriert
   werden, muss man dies nach jedem Systemstart eigenha:ndig nachtragen:

 maclabel biba/equal

  15.15.6. Testen der Konfiguration

   Versichern Sie sich, dass der Webserver und Nagios nicht automatisch
   geladen werden und starten Sie den Rechner neu. Pru:fen Sie nun, ob root
   wirklich keinen Zugriff auf die Dateien im Konfigurationsverzeichnis von
   Nagios hat. Wenn root den Befehl ls(1) auf /var/spool/nagios ausfu:hren
   kann, ist irgendwas schief gelaufen. Es sollte ein permission denied
   Fehler ausgegeben werden.

   Wenn alles gut aussieht, ko:nnen Nagios, Apache und Sendmail gestartet
   werden - allerdings auf eine Weise, die unserer Richtlinie gerecht wird.
   Zum Beispiel durch die folgenden Kommandos:

 # cd /etc/mail && make stop && \
 setpmac biba/equal make start && setpmac biba/10\(10-10\) apachectl start && \
 setpmac biba/10\(10-10\) /usr/local/etc/rc.d/nagios.sh forcestart

   Versichern Sie sich lieber doppelt, dass alles ordentlich la:uft. Wenn
   nicht, pru:fen Sie die Logs und Fehlermeldungen. Verwenden Sie das
   sysctl(8) Werkzeug um die Sicherheitsrichtlinie sysctl(8) zu deaktivieren
   und versuchen Sie dann alles noch einmal zu starten.

  Anmerkung:

   Der Superuser kann den Vollzug der Richtlinie schalten und die
   Konfiguration ohne Furcht vera:ndern. Folgender Befehl stuft eine neu
   gestartete Shell herunter:

 # setpmac biba/10 csh

   Um dies zu vermeiden, werden die Nutzer durch login.conf(5)
   eingeschra:nkt. Wenn setpmac(8) einen Befehl ausserhalb der definierten
   Schranken ausfu:hren soll, wird ein Fehler zuru:ckgeliefert. In so einem
   Fall muss root auf biba/high(high-high) gesetzt werden.

15.16. Beispiel 2: User Lock Down

   Grundlage dieses Beispiels ist ein relativ kleines System zur
   Datenspeicherung mit weniger als 50 Benutzern. Diese haben die
   Mo:glichkeit, sich einzuloggen und du:rfen nicht nur Daten speichern,
   sondern auch auf andere Ressourcen zugreifen.

   Die Richtlinien mac_bsdextended(4) und mac_seeotheruids(4) ko:nnen
   gleichzeitig eingesetzt werden. Zusammen kann man mit ihnen nicht nur den
   Zugriff auf Systemobjekte einschra:nken, sondern auch Nutzerprozesse
   verstecken.

   Beginnen Sie, indem Sie die folgende Zeile in die Datei /boot/loader.conf
   eintragen:

 mac_seeotheruids_load="YES"

   Die Richtlinie mac_bsdextended(4) wird durch den anschliessenden Eintrag
   in /etc/rc.conf hinzugefu:gt:

 ugidfw_enable="YES"

   Die Standardregeln, welche in /etc/rc.bsdextended gespeichert sind, werden
   zum Systemstart geladen. Sie mu:ssen aber noch angepasst werden. Da dieser
   Computer nur Nutzern dienen soll und weitere Dienste gestartet werden,
   kann alles bis auf die beiden letzten Zeilen auskommentiert werden. Das
   sorgt dafu:r dass jeder Nutzer seine eigenen Systemobjekte erha:lt.

   Nun fu:gen wir alle beno:tigten Nutzer auf der Maschine hinzu und starten
   neu. Zum Testen der Einstellungen loggen Sie sich parallel zwei mal mit
   unterschiedlichen Nutzernamen ein und starten Sie das Kommando ps aux.
   Dort sehen Sie, dass Sie die Prozesse des anderen Nutzers nicht sehen
   ko:nnen. Versuchen Sie, ls(1) auf das Heimatverzeichnis eines anderen
   Nutzers auszufu:hren. Auch dieser Versuch wird fehlschlagen.

   Solange nicht die speziellen sysctl-Variablen gea:ndert wurden, hat der
   Superuser noch vollen Zugriff. Sobald auch diese Einstellungen angepasst
   wurden, fu:hren Sie ruhig auch den obigen Test als root aus.

  Anmerkung:

   Wenn ein neuer Benutzer hinzugefu:gt wird, ist fu:r diesen zuna:chst keine
   mac_bsdextended(4) Regel im Regelsatz vorhanden. Schnelle Abhilfe schafft
   hier, einfach das Kernelmodul mit kldunload(8) zu entladen und mit
   kldload(8) erneut einzubinden.

15.17. Fehler im MAC beheben

   Wa:hrend der Entwicklung des Frameworks haben einige Nutzer auf Probleme
   hingewiesen. Einige davon werden hier aufgefu:hrt:

  15.17.1. Die Option multilabel greift nicht auf der /-Partition

   Es scheint, dass etwa jedem fu:nfzigsten Nutzer dieses Problem
   widerfa:hrt. Und in der Tat - auch wir kennen es aus der Entwicklung.
   Genauere Untersuchungen dieses "Bugs" machten uns glauben, dass es sich
   entweder um einen Fehler in oder eine fehlerhafte Interpretation der
   Dokumentation handelt. Warum auch immer dieser Fehler auftritt - er kann
   mit folgender Prozedur behoben werden:

    1. O:ffnen Sie die Datei /etc/fstab und setzen Sie die Rootpartition auf
       ro wie "read-only".

    2. Starten Sie in den Einzelnutzermodus.

    3. Rufen Sie tunefs -l enable fu:r / auf.

    4. Starten Sie in den Mehrbenutzermodus.

    5. Fu:hren Sie mount -urw / aus und a:ndern Sie anschliessend in der
       Datei /etc/fstab die Option ro zuru:ck in rw. Starten Sie das System
       noch einmal neu.

    6. Achten Sie besonders auf die Ausgabe von mount um sich zu versichern,
       dass die multilabel korrekt fu:r das root-Dateisystem gesetzt wurde.

  15.17.2. Mit der aktivierten MAC kann ich keinen X11 Server starten

   Dies kann durch die Richtlinie partition oder einer fehlerhaften
   Verwendung einer Richtlinie, die mit Labels arbeitet, auftreten. Zum
   debuggen versuchen Sie folgendes:

    1. Schauen Sie sich die Fehlermeldungen genau an. Wenn der Nutzer einer
       insecure Klasse angeho:rt, ist wahrscheinlich die Richtlinie partition
       die Ursache. Versuchen Sie, die Nutzerklasse auf default zu stellen
       und danach die Datenbank mit cap_mkdb zu erneuern. Wenn das Problem
       dadurch nicht gelo:st wird, gehen Sie weiter zu Schritt 2.

    2. Gehen Sie die Label-Richtlinien Schritt fu:r Schritt nocheinmal durch.
       Achten Sie darauf, dass fu:r den Nutzer, bei dem das Problem auftritt,
       fu:r X11 und das Verzeichnis /dev alle Einstellungen korrekt sind.

    3. Falls all dies nicht helfen sollte, senden Sie die Fehlermeldung und
       eine Beschreibung ihrer Arbeitsumgebung an die (englisch-sprachige)
       TrustedBSD Diskussionsliste auf der TrustedBSD Webseite oder an die
       FreeBSD general questions Mailingliste.

  15.17.3. Error: _secure_path(3) cannot stat .login_conf

   Wenn ich versuche, von root zu einem anderen Nutzer des Systems zu
   wechseln, erhalte ich die Fehlermeldung _secure_path: unable to state
   .login_conf.

   Diese Meldung wird gewo:hnlich ausgegeben, wenn der Nutzer ein ho:here
   Label-Einstellung hat als der, dessen Identita:t man annehmen mo:chte.
   Ausfu:hrlich: Wenn ein Nutzer joe als biba/low gelabelt wurde, kann root,
   der biba/high als Voreinstellung tra:gt, das Heimatverzeichnis von joe
   nicht einsehen. Das passiert unabha:nig davon, ob root vorher mit su die
   Identita:t von joe angenommen hat oder nicht, da das Label sich nicht
   a:ndert. Hier haben wir also einen Fall, in dem das Gewa:hrleistungsmodell
   von Biba verhindert, das der Superuser Objekte einer niedrigeren
   Integrita:t betrachten kann.

  15.17.4. Der Nutzer root ist kaputt!

   Im normalen oder sogar im Einzelbenutzermodus wird root nicht anerkannt.
   Das Kommando whoami liefert 0 (null) und su liefert who are you? zuru:ck.
   Was geht da vor?

   Das kann passieren, wenn eine Label-Richtlinie ausgeschaltet wird -
   entweder durch sysctl(8) oder wenn das Richtlinienmodul entladen wurde.
   Wenn eine Richtlinie deaktiviert oder auch nur voru:bergehen deaktiviert
   wird, muss die Befa:higungsdatenbank neu konfiguriert werden, d.h. die
   label Option muss entfernt werden. U:berpru:fen Sie, ob alle label
   Eintra:ge aus der Datei /etc/login.conf entfernt wurden und bauen Sie die
   Datenbank mit cap_mkdb neu.

   Dieser Fehler kann auch auftreten, wenn eine Richtlinie den Zugriff auf
   die Datei master.passwd einschra:nkt. Normalerweise passiert das nur, wenn
   ein Administrator ein Label an diese Datei vergibt, das mit der
   allgemeingu:ltigen Richtlinie, die das System verwendet, in Konflikt
   steht. In solchen Fa:llen werden die Nutzerinformationen vom System
   ausgelesen und jeder weitere Zugriff wird blockiert, sobald das neue Label
   greift. Wenn man die Richtlinie via sysctl(8) ausschaltet, sollte es
   erstmal wieder gehen.

     ----------------------------------------------------------------------

   [3] Andere Vorbedingungen fu:hren natu:rlich zu anderen Fehlern. Zum
   Beispiel wenn das Objekt nicht dem Nutzer geho:rt, der das Label a:ndern
   mo:chte, das Objekt vielleicht gar nicht existiert oder es sich um ein nur
   lesbares Objekt handelt. Oder eine verbindliche Richtlinie erlaubt dem
   Prozess die Vera:nderung des Labels nicht, weil die Eigenschaften der
   Datei, die Eigenschaften des Prozesses oder der Inhalt des neuen Labels
   nicht akzeptiert werden. Beispiel: Ein Anwender mit geringer
   Vertraulichkeit versucht, das Label einer Datei mit hoher Vertraulichkeit
   zu a:ndern. Oder er versucht, eine Datei mit geringer Vertraulichkeit zu
   einer Datei mit hoher Vertraulichkeit zu machen.

Kapitel 16. Security Event Auditing

   Geschrieben von Tom Rhodes und Robert Watson.
   U:bersetzt von Daniel Seuffert.
   Inhaltsverzeichnis

   16.1. Einleitung

   16.2. Schlu:sselbegriffe

   16.3. Audit Konfiguration

   16.4. Audit-Trails

16.1. Einleitung

   FreeBSD bietet Unterstu:tzung fu:r Sicherheits-Auditing. Ereignis-Auditing
   bietet zuverla:ssige, feingranulierte und konfigurierbare Aufzeichnung
   einer Vielzahl von sicherheitsrelevanten Systemereignissen einschliesslich
   Benutzereingaben, Konfigurationsa:nderungen sowie Datei- und
   Netzwerkzugriffen. Diese Log-Datensa:tze ko:nnen unscha:tzbar wertvoll
   sein fu:r direkte Systemu:berwachung, Einbruchserkennung und
   Post-Mortem-Analyse. FreeBSD implementiert Sun(TM)s o:ffentlich
   zuga:ngliches Basic Security Module (BSM) Application Programming
   Interface (API) und Dateiformat, und kann mit den Audit-Implementierungen
   von Sun(TM) Solaris(TM) und Apple(R) Mac OS(R) X zusammenarbeiten.

   Dieses Kapitel konzentriert sich auf die Installation und Konfiguration
   des Ereignis-Auditings. Es erkla:rt Audit-Richtlinien und stellt ein
   Beispiel einer Audit-Konfiguration vor.

   Nach dem Lesen dieses Kapitels werden Sie Folgendes wissen:

     * Was Ereignis-Auditing ist und wie es funktioniert.

     * Wie man Ereignis-Auditing in FreeBSD fu:r Benutzer und Prozesse
       konfiguriert.

     * Wie man den Audit-Pfad mittels Audit-Reduktion und Revisionswerkzeugen
       u:berpru:ft.

   Vor dem Lesen dieses Kapitels sollten Sie:

     * Sowohl UNIX(R) als auch FreeBSD-Basismechanismen beherrschen
       (Kapitel 3, Grundlagen des UNIX Betriebssystems).

     * Mit den grundlegenden Mechanismen der Kernel-Konfiguration und
       -Kompilierung vertraut sein (Kapitel 8, Konfiguration des
       FreeBSD-Kernels).

     * Mit den Massnahmen zur Sicherung von FreeBSD vertraut sein
       (Kapitel 13, Sicherheit).

  Warnung:

   Die Audit-Funktionalita:t in FreeBSD hat einige bekannte Einschra:nkungen.
   Nicht alle sicherheitsrelevanten System-Ereignisse sind auditierbar, und
   einige Anmelde-Mechanismen, wie beispielsweise Xorg-basierte
   Bildschirm-Manager und Dienste von Drittanbietern, konfigurieren das
   Auditing fu:r Benutzeranmeldungen nicht korrekt.

   Das Sicherheits-Auditing ist in der Lage, sehr detaillierte Log-Dateien
   von Systemaktivita:ten zu erzeugen. Auf einem ausgelasteten System kann
   die Pfad-Datei sehr gross werden, wenn sie fu:r hohe Auflo:sung
   konfiguriert ist, und im Extremfall pro Woche um mehrere Gigabyte
   anwachsen. Administratoren sollten daher den beno:tigten Plattenplatz in
   Verbindung mit umfangreichen Audit-Konfigurationen beru:cksichtigen. So
   kann es wu:nschenswert sein, ein eigenes Dateisystem fu:r /var/audit
   einzusetzen, damit andere Dateisysteme nicht betroffen sind, wenn das
   Dateisystem des Audit voll la:uft.

16.2. Schlu:sselbegriffe

   Die folgenden Begriffe stehen im Zusammenhang mit Ereignis-Auditing:

     * event: ein auditierbares Ereignis ist jedes Ereignis, das mit dem
       Audit-Subsystem aufgezeichnet werden kann. Beispiele fu:r
       sicherheitsrelevante Systemereignisse sind etwa das Anlegen von
       Dateien, das Erstellen einer Netzwerkverbindung oder eine
       Benutzeranmeldung. Ereignisse sind entweder "attributierbar", ko:nnen
       also zu einen authentifizierten Benutzer zuru:ckverfolgt werden, oder
       sind "nicht-attributierbar". Nicht-attributierbare Ereignisse erfolgen
       daher vor der Authentifizierung im Anmeldeprozess (beispielsweise die
       Eingabe eines falschen Passworts).

     * class: benannte Zusammenstellungen von zusammengeho:renden
       Ereignissen, die in Auswahl-Ausdru:cken benutzt werden. Ha:ufig
       genutzte Klassen von Ereignissen schliessen "file creation" (fc,
       Anlegen von Dateien), "exec" (ex, Ausfu:hrung) und "login_logout" (lo,
       Anmeldung-Abmeldung) ein.

     * record: ein Audit-Logeintrag, der ein Sicherheitsereignis entha:lt.
       Jeder Datensatz entha:lt einen Ereignistyp, Informationen u:ber den
       Gegenstand (Benutzer), welcher die Aktion durchfu:hrt, Datums- und
       Zeitinformationen, Informationen u:ber jedes Objekt oder Argument
       sowie den Zustand hinsichtlich Erfolg oder Scheitern der Operation.

     * trail: eine Log-Datei bestehend aus einer Reihe von
       Audit-Datensa:tzen, die Sicherheitsereignisse beschreiben. Pfade sind
       in grober zeitlicher Reihenfolge bezu:glich des Zeitpunktes, an
       welchem ein Ereignis beendet wurde. Nur autorisierte Prozesse du:rfen
       Datensa:tze zum Audit-Pfad hinzufu:gen.

     * selection expression: eine Zeichenkette, welche eine Liste von
       Pra:fixen und Audit-Ereignisklassennamen entha:lt, um Ereignisse
       abzugleichen.

     * preselection: der Prozess, durch den das System erkennt, welche
       Ereignisse von Interesse fu:r den Administrator sind, um die Erzeugung
       von Datensa:tze zu verhindern, welche nicht von Belang sind. Die
       Konfiguration der Vorauswahl benutzt eine Reihe von
       Auswahl-Ausdru:cken, um zu erkennen, welche Klassen von Ereignissen
       fu:r welche Benutzer aufgezeichnet werden sollen sowie globale
       Einstellungen, welche sowohl auf autorisierte als auch unautorisierte
       Prozesse angewendet werden.

     * reduction: Die Reduzierung ist der Prozess, durch den Datensa:tze von
       bestehenden Audit-Pfaden ausgewa:hlt werden fu:r Speicherung, Ausdruck
       oder Analyse. Ebenso der Prozess, durch den unerwu:nschte Datensa:tze
       aus dem Audit-Pfad entfernt werden. Mittels Reduzierung ko:nnen
       Administratoren Richtlinien fu:r die Speicherung von Audit-Daten
       vorgeben. Zum Beispiel ko:nnen ausfu:hrliche Audit-Pfade fu:r einen
       Monat gespeichert werden, um danach den Pfad fu:r archivarische Zwecke
       auf die Anmeldeinformationen zu reduzieren.

16.3. Audit Konfiguration

   Userspace-Unterstu:tzung fu:r Ereignis-Auditing ist Bestandteil des
   FreeBSD-Betriebssystems. Kernel-Unterstu:tzung ist in der Voreinstellung
   im GENERIC-Kernel enthalten und auditd(8) kann durch Hinzufu:gen der
   folgenden Zeile in /etc/rc.conf aktiviert werden:

 auditd_enable="YES"

   Starten Sie anschliessend den Audit-Daemon:

 # service auditd start

   Benutzer, die es bevorzugen einen angepassten Kernel zu kompilieren,
   mu:ssen folgende Zeile in die Kernelkonfigurationsdatei aufnehmen:

 options   AUDIT

  16.3.1. Ereignis-Auswahlausdru:cke

   Auswahlausdru:cke werden an einigen Stellen der Audit-Konfiguration
   benu:tzt, um zu bestimmen, welche Ereignisse auditiert werden sollen. Die
   Ausdru:cke enthalten eine Liste der Ereignisklassen, welche verglichen
   werden sollen. Auswahlausdru:cke werden von links nach rechts ausgewertet
   und zwei Ausdru:cke werden durch Aneinanderha:ngen miteinander kombiniert.

   Tabelle 16.1, "Audit-Ereignisklassen" fasst die Audit-Ereignisklassen
   zusammen:

   Tabelle 16.1. Audit-Ereignisklassen

   Name der    Beschreibung                        Aktion                     
    Klasse  
   all      all                Vergleicht alle Ereigsnisklassen.              
   aa       authentication and                                                
            authorization      
   ad       administrative     Administrative Aktionen, ausgefu:hrt auf dem   
                               System als Ganzes.                             
   ap       application        Aktionen definiert fu:r Applikationen.         
   cl       file close         Audit-Aufrufe fu:r den Systemaufruf close.     
                               Ausfu:hrung des Audit-Programms. Auditierung   
                               von Befehlszeilen-Argumenten und               
   ex       exec               Umgebungsvariablen wird gesteuert durch        
                               audit_control(5) mittels der argv und          
                               envv-Parameter gema:ss der                     
                               Richtlinien-Einstellungen.                     
   fa       file attribute     Auditierung des Zugriffs auf Objektattribute   
            access             wie stat(1) und pathconf(2).                   
   fc       file create        Audit-Ereignisse, bei denen eine Datei als     
                               Ergebnis angelegt wird.                        
   fd       file delete        Audit-Ereignisse, bei denen Dateilo:schungen   
                               vorkommen.                                     
            file attribute     Audit-Ereignisse, bei denen Dateiattribute     
   fm       modify             gea:ndert werden, wie chown(8), chflags(1) und 
                               flock(2).                                      
   fr       file read          Audit-Ereignisse, bei denen Daten gelesen oder 
                               Dateien zum lesen geo:ffnet werden.            
                               Audit-Ereignisse, bei denen Daten geschrieben  
   fw       file write         oder Dateien geschrieben oder vera:ndert       
                               werden.                                        
   io       ioctl              Nutzung des Systemaufrufes ioctl durch Audit.  
                               Auditierung verschiedener Formen von           
   ip       ipc                Inter-Prozess-Kommunikation einschliesslich    
                               POSIX-Pipes und System V IPC-Operationen.      
   lo       login_logout       Audit-Ereignisse von login(1) und logout(1).   
   na       non attributable   Auditierung nicht-attributierbarer Ereignisse. 
   no       invalid class      Kein Abgleich von Audit-Ereignissen.           
                               Audit-Ereignisse in Zusammenhang mit           
   nt       network            Netzwerkaktivita:ten wie connect(2) und        
                               accept(2)                                      
   ot       other              Auditierung verschiedener Ereignisse.          
   pc       process            Auditierung von Prozess-Operationen wie        
                               exec(3) und exit(3).                           

   Diese Ereignisklassen ko:nnen angepasst werden durch Modifizierung der
   Konfigurationsdateien audit_class und audit_event.

   Jede Audit-Klasse kann mit einem Pra:fix kombiniert werden, welches
   anzeigt, ob erfolgreiche/gescheiterte Operationen abgebildet werden, und
   ob der Eintrag den Abgleich hinzufu:gt oder entfernt fu:r die Klasse und
   den Typ. Tabelle 16.2, "Pra:fixe fu:r Audit-Ereignisklassen" fasst die
   verfu:gbaren Pra:fixe zusammen.

   Tabelle 16.2. Pra:fixe fu:r Audit-Ereignisklassen

    Pra:fix                               Aktion                              
   +          Auditiert erfolgreiche Ereignisse in dieser Klasse.             
   -          Auditiert fehlgeschlagene Ereignisse in dieser Klasse.          
   ^          Auditiert weder erfolgreiche noch fehlgeschlagene Ereignisse.   
   ^+         Auditiert keine erfolgreichen Ereignisse in dieser Klasse.      
   ^-         Auditiert keine fehlgeschlagenen Ereignisse in dieser Klasse.   

   Wenn kein Pra:fix vorhanden ist, werden sowohl erfolgreiche als auch
   fehlgeschlagene Ereignisse auditiert.

   Das folgende Beispiel einer Auswahl-Zeichenkette wa:hlt erfolgreiche und
   gescheiterte Anmelde/Abmelde-Ereignisse aus, aber nur erfolgreich beendete
   Ausfu:hrungs-Ereignisse:

 lo,+ex

  16.3.2. Konfigurationsdateien

   Die folgenden Konfigurationsdateien fu:r Sicherheits-Auditing befinden
   sich in /etc/security.

     * audit_class: entha:lt die Definitionen der Audit-Klassen.

     * audit_control: steuert die Eigenschaften des Audit-Subsystems, wie
       Standard-Audit-Klassen, Mindestfestplattenspeicher auf dem
       Audit-Log-Volume und die maximale Gro:sse des Audit-Trails.

     * audit_event: Namen und Beschreibungen der Audit-Ereignisse, und eine
       Liste von Klassen mit den dazugeho:rigen Ereignissen.

     * audit_user: benutzerspezifische Audit-Anforderungen, kombinierbar mit
       den globalen Standardeinstellungen bei der Anmeldung.

     * audit_warn: ein anpassbares Skript, das von auditd(8) verwendet wird,
       um in bestimmten Situationen Warnmeldungen zu generieren, z.B. wenn
       der Platz fu:r Audit-Protokolle knapp wird, oder wenn die Datei des
       Audit-Trails rotiert wurde.

  Warnung:

   Konfigurationsdateien von Audit sollten sorgfa:ltig bearbeitet und
   gepflegt werden, da Fehler in der Konfiguration zu einer fehlerhaften
   Protokollierung der Ereignisse fu:hren ko:nnen.

   In den meisten Fa:llen wird der Administrator nur audit_control und
   audit_user anpassen mu:ssen. Die erste Datei steuert systemweite
   Audit-Eigenschaften, sowie Richtlinien. Die zweite Datei kann fu:r die
   Feinabstimmung bei der Auditierung von Benutzern verwendet werden.

    16.3.2.1. Die audit_control-Datei

   Die audit_control-Datei legt eine Anzahl Vorgabewerte fest:

 dir:/var/audit
 dist:off
 flags:lo,aa
 minfree:5
 naflags:lo,aa
 policy:cnt,argv
 filesz:2M
 expire-after:10M

   Die Option dir wird genutzt, um eines oder mehrere Verzeichnisse
   festzulegen, in welchen Audit-Protokolle gespeichert werden. Gibt es
   mehrere Verzeichniseintra:ge, werden diese in der angegebenen Reihenfolge
   genutzt, bis sie jeweils gefu:llt sind. Es ist u:blich, Audit so zu
   konfigurieren, dass die Audit-Logs auf einem dedizierten Dateisystem
   abgelegt werden, um Wechselwirkungen zwischen dem Audit-Subsystem und
   anderen Subsystemen zu verhindern, falls das Dateisystem voll la:uft.

   Ist die Option dist auf on oder yes gesetzt, wird ein Link der Dateien des
   Audit-Trails in /var/audit/dist erstellt.

   Das flags-Feld legt die systemweite Standard-Vorauswahl-Maske fu:r
   attributierbare (direkt einem Benutzer zuordenbare) Ereignisse fest. Im
   obigen Beispiel werden alle gescheiterten und erfolgreichen Anmelde- und
   Abmelde-Ereignisse fu:r alle Benutzer aufgezeichnet.

   Die Option minfree definiert den minimalen Prozentsatz an freiem
   Plattenplatz fu:r das Dateisystem, in welchem der Audit-Pfad abgespeichert
   wird. Wenn diese Schwelle u:berschritten ist, wird ein Warnhinweis
   erzeugt.

   Die naflags-Option bestimmt diejenigen Audit-Klassen, fu:r die
   nicht-attributierbare Ereignisse aufgezeichnet werden sollen, wie
   beispielsweise Anmeldeprozesse, Authentifizierung und Autorisierung.

   Die Option policy legt eine durch Kommata getrennte Liste von policy-Flags
   fest, welche verschiedene Aspekte des Audit-Verhaltens steuern. Der Flag
   cnt zeigt an, dass das System trotz eines Audit-Fehlers weiterlaufen soll
   (dieses Flag wird dringend empfohlen). Ein anderes, ha:ufig genutztes Flag
   ist argv, welches dazu fu:hrt, dass Befehlszeilen-Argumente fu:r den
   Systemaufruf execve(2) als Teil der Befehlsausfu:hrung aufgezeichnet
   werden.

   Die filesz-Option spezifiziert die maximale Gro:sse der Audit-Datei, bevor
   sie automatisch beendet und rotiert wird. Der Wert 0 setzt die
   automatische Log-Rotation ausser Kraft. Falls die angeforderte
   Dateigro:sse unterhalb des Minimums von 512K ist, dann wird die Angabe
   verworfen und ein Log-Hinweis wird erzeugt.

   Die Option expire-after legt fest, wann die Audit-Dateien verfallen und
   entfernt werden.

    16.3.2.2. Die Datei audit_user

   Die audit_user-Datei erlaubt es dem Administrator, weitere
   Audit-Erfordernisse fu:r bestimmte Benutzer festzulegen. Jede Zeile
   konfiguriert das Auditing fu:r einen Benutzer u:ber zwei Felder:
   alwaysaudit gibt eine Ansammlung von Ereignissen vor, welche immer fu:r
   diesen Benutzer aufgezeichnet werden. neveraudit legt Ereignisse fest, die
   niemals fu:r diesen Benutzer auditiert werden sollen.

   Das folgende Beispiel einer audit_user-Datei zeichnet
   Anmelde/Abmelde-Ereignisse, erfolgreiche Befehlsausfu:hrungen fu:r den
   Benutzer root, Anlegen von Dateien und erfolgreiche Befehlsausfu:hrungen
   fu:r den Benutzer www auf. Falls die voreingestellte audit_control benutzt
   wird, dann ist der Eintrag lo fu:r root u:berflu:ssig und
   Anmelde/Abmelde-Ereignisse werden fu:r www ebenfalls aufgezeichnet.

 root:lo,+ex:no
 www:fc,+ex:no

16.4. Audit-Trails

   Weil Audit-Trails werden im bina:ren BSM-Format gespeichert werden, gibt
   es verschiedene Werkzeuge, um derartige Dateien zu a:ndern oder sie in
   Textdateien zu konvertieren. Der Befehl praudit wandelt alle Pfad-Dateien
   in ein einfaches Textformat um. Der Befehl auditreduce kann genutzt
   werden, um die Pfad-Dateien fu:r Analyse, Ausdruck, Archivierung oder
   andere Zwecke zu reduzieren. Eine Reihe von Auswahl-Parametern werden von
   auditreduce(1) unterstu:tzt, einschliesslich Ereignistyp, Ereignisklasse,
   Benutzer, Datum und Uhrzeit des Ereignisses und den Dateipfad oder das
   Objekt, mit dem gearbeitet wurde.

   Der folgende Befehl schreibt den gesamten Inhalt einer angegebenen
   Audit-Protokolldatei in eine Textdatei:

 # praudit /var/audit/AUDITFILE

   AUDITFILE ist hier die zu schreibende Protokolldatei.

   Audit-Pfade bestehen aus einer Reihe von Datensa:tzen, die wiederum aus
   Ku:rzeln (token) gebildet werden, die von praudit(1) fortlaufend
   zeilenweise ausgegeben werden. Jedes Ku:rzel ist von einem bestimmten Typ,
   z.B. entha:lt header einen audit-Datensatz-Header oder path entha:lt einen
   Dateipfad von einer Suche. Hier ein Beispiel eines execve-Ereignisses:

 header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec
 exec arg,finger,doug
 path,/usr/bin/finger
 attribute,555,root,wheel,90,24918,104944
 subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100
 return,success,0
 trailer,133

   Dieser Audit stellt einen erfolgreichen execve-Aufruf dar, in welchem der
   Befehl finger doug ausgefu:hrt wurde. exec arg entha:lt die Befehlszeile,
   welche die Shell an den Kernel weiterleitet. Das Ku:rzel path entha:lt den
   Pfad zur ausfu:hrbaren Datei (wie vom Kernel wahrgenommen). Das Ku:rzel
   attribute beschreibt die Bina:rdatei und entha:lt den Datei-Modus, der
   genutzt werden kann, um zu bestimmen, ob setuid auf die Applikation
   angewendet wurde. Das Ku:rzel subject speichert die Audit-Benutzer-ID,
   effektive Benutzer-ID und Gruppen-ID, wirkliche Benutzer-ID und
   Gruppen-ID, Prozess-ID, Session- ID, Port-ID und Anmelde-Adresse. Beachten
   Sie, dass Audit-Benutzer-ID und wirkliche Benutzer-ID abweichen, da der
   Benutzer robert zum Benutzer root wurde, bevor er diesen Befehl
   ausfu:hrte, aber er wird auditiert mit dem urspru:nglich authentifizierten
   Benutzer. Das Ku:rzel return zeigt die erfolgreiche Ausfu:hrung an und
   trailer schliesst den Datensatz ab.

   Die Ausgabe im XML-Format wird ebenfalls unterstu:tzt und kann u:ber die
   Option -x ausgewa:hlt werden.

   Da Audit-Protokolldateien sehr gross sein ko:nnen, kann mit Hilfe von
   auditreduce auch nur eine Teilmenge der Datensa:tze ausgewa:hlt werden.
   Dieses Beispiel selektiert alle Datensa:tze des Benutzers trhodes aus der
   Datei AUDITFILE:

 # auditreduce -u trhodes /var/audit/AUDITFILE | praudit

   Mitglieder der Gruppe audit sind berechtigt, Audit-Pfade in /var/audit zu
   lesen. In der Voreinstellung ist diese Gruppe leer, daher kann nur der
   Benutzer root die Audit-Pfade lesen. Benutzer ko:nnen der Gruppe audit
   hinzugefu:gt werden, um Rechte fu:r Audit-Reviews zu gewa:hren. Da die
   Fa:higkeit, Inhalte von Audit-Protokolldateien zu verfolgen, tiefgreifende
   Einblicke in das Verhalten von Benutzern und Prozessen erlaubt, wird
   empfohlen, dass die Gewa:hrung von Rechten fu:r Audit-Reviews mit Bedacht
   erfolgt.

  16.4.1. Aktive U:berwachung mittels Audit-Pipes

   Audit-Pipes sind nachgebildete (geklonte) Pseudo-Gera:te, welche es
   Applikationen erlauben, die laufenden Audit-Datensa:tze anzuzapfen. Dies
   ist vorrangig fu:r Autoren von Intrusion Detection Software und
   Systemu:berwachungsprogrammen von Bedeutung. Allerdings ist das
   Audit-Pipe-Gera:t ein angenehmer Weg fu:r den Administrator, aktive
   U:berwachung zu gestatten, ohne Gefahr von Problemen durch Besitzerrechte
   der Audit-Pfad-Datei oder Unterbrechung des Stroms von Ereignissen durch
   Log-Rotation. Um den laufenden Audit-Ereignisstrom zu verfolgen, geben Sie
   folgendes ein:

 # praudit /dev/auditpipe

   In der Voreinstellung kann nur der Benutzer root auf die
   Audit-Pipe-Gera:te-Knotenpunkte zugreifen. Um sie allen Mitgliedern der
   Gruppe audit zuga:nglich zu machen, fu:gen Sie eine devfs-Regel in
   /etc/devfs.rules hinzu:

 add path 'auditpipe*' mode 0440 group audit

   Lesen Sie devfs.rules(5) fu:r weitere Informationen, wie das
   devfs-Dateisystem konfiguriert wird.

  Warnung:

   Es ist sehr leicht, Ru:ckmeldungszyklen von Audit-Ereignissen
   hervorzurufen, in welcher das Betrachten des Resultates eines
   Audit-Ereignisses in die Erzeugung von mehr Audit-Ereignissen mu:ndet.
   Wenn zum Beispiel der gesamte Netzwerk-I/O auditiert wird, wa:hrend
   praudit in einer SSH-Sitzung gestartet wurde, dann wird ein
   kontinuierlicher, ma:chtiger Strom von Audit-Ereignissen erzeugt, da jedes
   ausgegebene Ereignis wiederum neue Ereignisse erzeugt. Daher ist
   anzuraten, praudit an einem Audit-Pipe-Gera:t nur von Sitzungen anzuwenden
   (ohne feingranuliertes I/O-Auditing), um dies zu vermeiden.

  16.4.2. Rotation und Komprimierung von Audit-Pfad-Dateien

   Audit-Pfade werden vom Kernel geschrieben und vom Audit-Daemon auditd(8)
   verwaltet. Administratoren sollten nicht versuchen, newsyslog.conf(5) oder
   andere Werkzeuge zu benutzen, um Audit-Protokolldateien direkt zu
   rotieren. Stattdessen sollte audit benutzt werden, um die Auditierung zu
   beenden, das Audit-System neu zu konfigurieren und eine Log-Rotation
   durchzufu:hren. Der folgende Befehl veranlasst den Audit-Daemon, eine neue
   Protokolldatei anzulegen und dem Kernel zu signalisieren, die neue Datei
   zu nutzen. Die alte Datei wird beendet und umbenannt. Ab diesem Zeitpunkt
   kann sie vom Administrator bearbeitet werden:

 # audit -n

   Falls der auditd(8)-Daemon gegenwa:rtig nicht la:uft, wird dieser Befehl
   scheitern und eine Fehlermeldung wird ausgegeben.

   Durch das Hinzufu:gen der folgenden Zeile in /etc/crontab wird die
   Log-Rotation alle zwo:lf Stunden durchgefu:hrt:

 0     */12       *       *       *       root    /usr/sbin/audit -n

   Die A:nderung wird wirksam, sobald /etc/crontab gespeichert wird.

   Die automatische Rotation der Audit-Pfad-Datei in Abha:ngigkeit von der
   Dateigro:sse ist mo:glich durch die Angabe der Option filesz in
   audit_control. Dieser Vorgang ist in Abschnitt 16.3.2.1, "Die
   audit_control-Datei" beschrieben.

   Da Audit-Pfad-Dateien sehr gross werden ko:nnen, ist es oft
   wu:nschenswert, Pfade zu komprimieren oder anderweitig zu archivieren,
   sobald sie vom Audit-Daemon geschlossen wurden. Das Skript audit_warn kann
   genutzt werden, um angepasste Aktionen fu:r eine Vielzahl von
   audit-bezogenen Ereignissen auszufu:hren, einschliesslich der sauberen
   Beendigung von Audit-Pfaden, wenn diese geschlossen werden. Zum Beispiel
   kann man die folgenden Zeilen in /etc/security/audit_warn aufnehmen, um
   Audit-Pfade beim Beenden zu komprimieren:

 #
 # Compress audit trail files on close.
 #
 if [ "$1" = closefile ]; then
         gzip -9 $2
 fi

   Andere Archivierungsaktivita:ten ko:nnen das Kopieren zu einem zentralen
   Server, die Lo:schung der alten Pfad-Dateien oder die Reduzierung des
   alten Audit-Pfades durch Entfernung nicht beno:tigter Datensa:tze
   einschliessen. Dieses Skript wird nur dann ausgefu:hrt, wenn die
   Audit-Pfad-Dateien sauber beendet wurden, daher wird es nicht auf Pfaden
   laufen, welche durch ein unsauberes Herunterfahren des Systems nicht
   beendet wurden.

Kapitel 17. Speichermedien

   U:bersetzt von Bernd Warken und Martin Heinen.
   Inhaltsverzeichnis

   17.1. U:bersicht

   17.2. Hinzufu:gen von Laufwerken

   17.3. Partitionen vergro:ssern

   17.4. USB Speichermedien

   17.5. Erstellen und Verwenden von CDs

   17.6. DVDs benutzen

   17.7. Disketten benutzen

   17.8. Datensicherung

   17.9. Speicherbasierte Laufwerke

   17.10. Schnappschu:sse von Dateisystemen

   17.11. Disk Quotas

   17.12. Partitionen verschlu:sseln

   17.13. Den Auslagerungsspeicher verschlu:sseln

   17.14. Highly Available Storage (HAST)

17.1. U:bersicht

   Dieses Kapitel behandelt die Benutzung von Laufwerken unter FreeBSD.
   Hierzu za:hlen SCSI- und IDE-Gera:te, CD- und DVD-Medien, speicherbasierte
   Laufwerke und USB-Gera:te.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

     * Wie Sie zusa:tzliche Laufwerke zu einem FreeBSD-System hinzufu:gen.

     * Wie Sie unter FreeBSD die Partition einer Festplatte vergro:ssern.

     * Wie Sie FreeBSD zur Verwendung von USB-Speichermedien konfigurieren.

     * Wie Sie CD- und DVD-Medien unter FreeBSD benutzen.

     * Wie Sie die unter FreeBSD erha:ltlichen Backup-Programme benutzen.

     * Wie Sie RAM-Disks einrichten.

     * Was Dateisystem-Schnappschu:sse sind und wie sie effizient eingesetzt
       werden.

     * Wie Sie mit Quotas die Benutzung von Laufwerken einschra:nken.

     * Wie Sie Festplatten und Swap verschlu:sseln, um Daten vor Angreifern
       zu schu:tzen.

     * Wie Sie ein hochverfu:gbares Speichernetzwerk konfigurieren.

   Bevor Sie dieses Kapitel lesen,

     * sollten Sie wissen, wie Sie einen neuen FreeBSD-Kernel konfigurieren
       und installieren.

17.2. Hinzufu:gen von Laufwerken

   Im Original von David O'Brian.

   Dieser Abschnitt beschreibt, wie Sie ein neues SATA-Laufwerk zu einer
   Maschine hinzufu:gen, die momentan nur ein Laufwerk hat. Dazu schalten Sie
   zuerst den Rechner aus und installieren das Laufwerk entsprechend der
   Anleitungen Ihres Rechners, Ihres Controllers und des Laufwerkherstellers.
   Starten Sie das System neu und melden Sie sich als Benutzer root an.

   Kontrollieren Sie /var/run/dmesg.boot, um sicherzustellen, dass das neue
   Laufwerk gefunden wurde. In diesem Beispiel erscheint das neu
   hinzugefu:gte SATA-Laufwerk als ada1.

   In diesem Beispiel wird eine einzige grosse Partition auf der Festplatte
   erstellt. Verwendet wird das GPT-Partitionsschema, welches gegenu:ber dem
   a:lteren und weniger vielseitigen MBR-Schema bevorzug wird.

  Anmerkung:

   Wenn die hinzugefu:gte Festplatte nicht leer ist, ko:nnen alte
   Partitionsinformationen mit gpart delete entfernt werden. Details finden
   Sie in gpart(8).

   Zuerst wird das Partitionsschema erstellt und dann eine einzelne Partition
   angefu:gt. Zur Verbesserung der Leistung auf neueren Festplatten mit
   gro:sseren Blockgro:ssen, wird die Partition an einer Megabyte-Grenze
   ausgerichtet:

 # gpart create -s GPT ada1
 # gpart add -t freebsd-ufs -a 1M ada1

   Je nach Anwendung kann es wu:nschenswert sein, mehrere kleinere
   Partitionen zu haben. In gpart(8) finden Sie Optionen zum Erstellen von
   kleineren Partitionen.

   Informationen u:ber die Partitionen der Festplatte werden mit gpart show
   angezeigt:

 % gpart show ada1
 =>        34  1465146988  ada1  GPT  (699G)
           34        2014        - free -  (1.0M)
         2048  1465143296     1  freebsd-ufs  (699G)
   1465145344        1678        - free -  (839K)

   Ein Dateisystem wird in der neuen Partition erstellt:

 # newfs -U /dev/ada1p1

   Ein leeres Verzeichnis wird als Mountpunkt erstellt, also ein Speicherort
   fu:r die Montage der neuen Festplatte im originalen Dateisystem:

 # mkdir /newdisk

   Abschliessend wird ein Eintrag in /etc/fstab hinzugefu:gt, damit die neue
   Festplatte automatisch beim Start eingeha:ngt wird:

 /dev/ada1p1     /newdisk      ufs   rw      2     2

   Die neue Festplatte kann manuell montiert werden, ohne das System neu zu
   starten:

 # mount /newdisk

17.3. Partitionen vergro:ssern

   Beigetragen von Allan Jude.
   U:bersetzt von Bjo:rn Heidotting.

   Die Kapazita:t einer Festplatte kann sich ohne A:nderungen an bereits
   vorhandenen Daten erho:hen. Dies geschieht u:blicherweise mit virtuellen
   Maschinen, wenn sich herausstellt, dass die virtuelle Festplatte zu klein
   ist und vergro:ssert werden soll. Zuweilen wird auch ein Abbild einer
   Platte auf einen USB-Stick geschrieben, ohne dabei die volle Kapazita:t zu
   nutzen. Dieser Abschnitt beschreibt, wie man Platten vergro:ssert, bzw.
   erweitert, um die Vorteile der erho:hten Kapazita:t zu nutzen.

   U:berpru:fen Sie /var/run/dmesg.boot, um den Gera:tenamen der Festplatte
   zu bestimmen, die vergro:ssert werden soll. In diesem Beispiel gibt es nur
   eine SATA-Festplatte im System, so dass die Platte als ada0 angezeigt
   wird.

   Um die aktuelle Konfiguration der Partitionen auf der Festplatte
   anzuzeigen:

 # gpart show ada0
 =>      34  83886013  ada0  GPT  (48G) [CORRUPT]
         34       128     1  freebsd-boot  (64k)
        162  79691648     2  freebsd-ufs  (38G)
   79691810   4194236     3  freebsd-swap  (2G)
   83886046         1        - free -  (512B)

  Anmerkung:

   Wenn die Festplatte mit dem GPT-Partitionsschema formatiert wurde kann es
   vorkommen, dass sie als "corrupted" angezeigt wird, weil sich die
   Sicherung der GPT-Partitionstabellen nicht mehr am Ende des Laufwerks
   befinden. Reparieren Sie in so einem Fall die Partitionstabelle mit gpart:

 # gpart recover ada0
 ada0 recovered

   Nun steht der zusa:tzliche Speicherplatz zur Verfu:gung und kann verwendet
   werden, um eine neue Partition anzulegen oder eine bestehende Partition zu
   erweitern:

 # gpart show ada0
 =>       34  102399933  ada0  GPT  (48G)
          34        128     1  freebsd-boot  (64k)
         162   79691648     2  freebsd-ufs  (38G)
    79691810    4194236     3  freebsd-swap  (2G)
    83886046   18513921        - free -  (8.8G)

   Partitionen ko:nnen nur auf zusammenha:ngenden, freien Speicherplatz
   vergro:ssert werden. In diesem Beispiel wird die letzte Partition der
   Platte als Swap-Speicher genutzt, aber die zweite Partition ist die,
   dessen Gro:sse vera:ndert werden soll. Weil der Swap-Speicher nur
   tempora:re Daten entha:lt, kann er gefahrlos ausgehangen, gelo:scht und
   nachdem die Partition vergro:ssert wurde, neu erstellt werden.

 # swapoff /dev/ada0p3
 # gpart delete -i 3 ada0
 ada0p3 deleted
 # gpart show ada0
 =>       34  102399933  ada0  GPT  (48G)
          34        128     1  freebsd-boot  (64k)
         162   79691648     2  freebsd-ufs  (38G)
         79691810   22708157        - free -  (10G)

  Warnung:

   Es besteht die Gefahr von Datenverlust, wenn die Partitionstabelle eines
   eingehangenen Dateisystems vera:ndert wird. Es empfiehlt sich daher, die
   folgenden Schritte auf einem ausgehangenen Dateisystem durchzufu:hren,
   wa:hrend die Umsetzung u:ber eine Live-CD-ROM oder von einem USB-Gera:t
   erfolgt. Wenn es jedoch absolut notwendig ist, kann ein eingehangenes
   Dateisystem auch vergro:ssert werden, nachdem die Sicherheitsfunktionen
   von GEOM deaktiviert wurden:

 # sysctl kern.geom.debugflags=16

   Vergro:ssern Sie die Partition und lassen Sie Platz, um die Swap-Partition
   in der gewu:nschten Gro:sse neu erstellen zu ko:nnen. Dies a:ndert nur die
   Gro:sse der Partition. Das Dateisystem innerhalb der Partition wird in
   einem separaten Schritt erweitert.

 # gpart resize -i 2 -a 4k -s 47G ada0
 ada0p2 resized
 # gpart show ada0
 =>       34  102399933  ada0  GPT  (48G)
          34        128     1  freebsd-boot  (64k)
         162   98566144     2  freebsd-ufs  (47G)
    98566306    3833661        - free -  (1.8G)

   Erstellen Sie die Swap-Partition neu:

 # gpart add -t freebsd-swap -a 4k ada0
 ada0p3 added
 # gpart show ada0
 =>       34  102399933  ada0  GPT  (48G)
          34        128     1  freebsd-boot  (64k)
         162   98566144     2  freebsd-ufs  (47G)
    98566306    3833661     3  freebsd-swap  (1.8G)
 # swapon /dev/ada0p3

   Erweitern Sie das UFS-Dateisystem, um die Kapazita:t der vergro:sserten
   Partition zu nutzen:

  Anmerkung:

   Ab FreeBSD 10.0-RELEASE ist es mo:glich, ein eingehangenes Dateisystem zu
   erweitern. Bei a:lteren Versionen muss das Dateisystem zuvor ausgehangen
   werden.

 # growfs /dev/ada0p2
 Device is mounted read-write; resizing will result in temporary write suspension for /.
 It's strongly recommended to make a backup before growing the file system.
 OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] Yes
 super-block backups (for fsck -b #) at:
  80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752,
  89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432

   Sowohl die Partition als auch das Dateisystem wurden jetzt vergro:ssert,
   um den neu zur Verfu:gung stehenden Speicherplatz zu nutzen.

17.4. USB Speichermedien

   Beigetragen von Marc Fonvieille.

   Der Universal Serial Bus (USB) wird von vielen externen Speichern benutzt:
   Festplatten, USB-Thumbdrives sowie von CD- und DVD-Brennern. FreeBSD
   bietet Unterstu:tzung fu:r Gera:te mit USB 1.x, 2.0 und 3.0.

  Anmerkung:

   Die Unterstu:tzung fu:r USB 3.0 ist mit einiger Hardware, einschliesslich
   Haswell (Lynx Point) Chipsa:tzen, nicht kompatibel. Wenn FreeBSD beim
   Booten mit dem Fehler failed with error 19 abbricht, mu:ssen Sie xHCI/USB3
   im BIOS deaktivieren.

   Unterstu:tzung fu:r USB-Massenspeicher ist im GENERIC-Kernel enthalten.
   Fu:r einen angepassten Kernel mu:ssen die nachstehenden Zeilen in der
   Kernelkonfigurationsdatei enthalten sein:

 device scbus    # SCSI bus (required for ATA/SCSI)
 device da       # Direct Access (disks)
 device pass     # Passthrough device (direct ATA/SCSI access)
 device uhci     # provides USB 1.x support
 device ohci     # provides USB 1.x support
 device ehci     # provides USB 2.0 support
 device xhci     # provides USB 3.0 support
 device usb      # USB Bus (required)
 device umass    # Disks/Mass storage - Requires scbus and da
 device cd       # needed for CD and DVD burners

   FreeBSD benutzt den umass(4)-Treiber, der das SCSI-Subsystem verwendet um
   auf USB-Gera:te zuzugreifen. Da alle USB-Gera:te vom System als
   SCSI-Gera:te erkannt werden, du:rfen Sie nicht device atapicam in die
   Kernelkonfigurationsdatei aufnehmen, wenn es sich bei dem Gera:t um einen
   CD- oder DVD-Brenner handelt.

   Der u:brige Abschnitt beschreibt, wie Sie u:berpru:fen ko:nnen ob ein
   USB-Gera:t von FreeBSD erkannt wird und wie Sie das Gera:t so
   konfigurieren, dass es verwendet werden kann.

  17.4.1. Konfiguration von Gera:ten

   Um die USB-Konfiguration zu testen, schliessen Sie das USB-Gera:t an.
   Verwenden Sie dmesg um zu u:berpru:fen, ob das Gera:t in den
   Systemmeldungen erscheint. Dies sollte in etwa so aussehen:

 umass0: <STECH Simple Drive, class 0/0, rev 2.00/1.04, addr 3> on usbus0
 umass0:  SCSI over Bulk-Only; quirks = 0x0100
 umass0:4:0:-1: Attached to scbus4
 da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
 da0: <STECH Simple Drive 1.04> Fixed Direct Access SCSI-4 device
 da0: Serial Number WD-WXE508CAN263
 da0: 40.000MB/s transfers
 da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)
 da0: quirks=0x2<NO_6_BYTE>

   Fabrikat, Gera:tedatei (da0), Geschwindigkeit und Kapazita:t werden je
   nach Gera:t unterschiedlich sein.

   Da ein USB-Gera:t als SCSI-Gera:t erkannt wird, kann camcontrol benutzt
   werden, um die mit dem System verbundenen USB-Massenspeicher anzuzeigen:

 # camcontrol devlist
 <STECH Simple Drive 1.04>          at scbus4 target 0 lun 0 (pass3,da0)

   Alternativ kann usbconfig benutzt werden, um die Gera:te aufzulisten.
   Weitere Informationen zu diesem Kommando finden Sie in usbconfig(8).

 # usbconfig
 ugen0.3: <Simple Drive STECH> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)

   Wenn das Gera:t noch nicht formatiert ist, finden Sie in Abschnitt 17.2,
   "Hinzufu:gen von Laufwerken" Informationen, wie Sie USB-Laufwerke
   formatieren und Partitionen einrichten. Wenn das Laufwerk bereits ein
   Dateisystem entha:lt, kann es von root nach den Anweisungen in
   Abschnitt 3.7, "Anha:ngen und Abha:ngen von Dateisystemen" eingeha:ngt
   werden.

  Warnung:

   Aus Sicherheitsgru:nden sollten Sie Benutzern, denen Sie nicht vertrauen,
   das Einha:ngen (z.B. durch die unten beschriebene Aktivierung von
   vfs.usermount) beliebiger Medien verbieten. Die meisten Dateisysteme
   wurden nicht entwickelt, um sich vor bo:swilligen Gera:ten zu schu:tzen.

   Um auch normalen Anwendern das Einha:ngen des Laufwerks zu gestatten,
   ko:nnten Sie beispielsweise mit pw(8) alle potentiellen Benutzer dieser
   Gera:tedateien in die Gruppe operator aufnehmen. Ausserdem muss
   sichergestellt werden, dass operator Schreib- und Lesezugriff auf diese
   Gera:tedateien haben. Hierfu:r werden die folgenden Zeilen in
   /etc/devfs.rules hinzugefu:gt:

 [localrules=5]
 add path 'da*' mode 0660 group operator

  Anmerkung:

   Verfu:gt das System u:ber interne SCSI-Laufwerke, so vera:ndern Sie die
   zweite Zeile wie folgt:

 add path 'da[3-9]*' mode 0660 group operator

   Dies wird die ersten drei SCSI-Laufwerke (da0 bis da2) davon
   ausschliessen, in die Gruppe operator aufgenommen zu werden. Ersetzen Sie
   3 durch die Anzahl der SCSI-Laufwerke. Weitere Informationen zu dieser
   Datei finden Sie in devfs.rules(5).

   Aktivieren Sie nun die Regeln in /etc/rc.conf:

 devfs_system_ruleset="localrules"

   Als na:chstes mu:ssen Sie das System anweisen, auch normalen Benutzern das
   mounten von Dateisystemen zu erlauben, indem Sie die folgende Zeile in
   /etc/sysctl.conf hinzufu:gen:

 vfs.usermount=1

   Da diese Einstellung erst nach einem Neustart wirksam wird, ko:nnen Sie
   diese Variable mit sysctl auch direkt setzen:

 # sysctl vfs.usermount=1
 vfs.usermount: 0 -> 1

   Zuletzt mu:ssen Sie noch ein Verzeichnis anlegen, in das das USB-Laufwerk
   eingeha:ngt werden soll. Dieses Verzeichnis muss dem Benutzer geho:ren,
   der das USB-Laufwerk in den Verzeichnisbaum einha:ngen will. Dazu legen
   Sie als root ein Unterverzeichnis /mnt/username an, wobei Sie username
   durch den Login des jeweiligen Benutzers sowie usergroup durch die
   prima:re Gruppe des Benutzers ersetzen:

 # mkdir /mnt/username
 # chown username:usergroup /mnt/username

   Wenn Sie nun beispielsweise einen USB-Stick anschliessen, wird automatisch
   die Gera:tedatei /dev/da0s1 erzeugt. Ist das Gera:t mit einem
   FAT-Dateisystem formatiert, kann es der Benutzer mit dem folgenden Befehl
   in den Verzeichnisbaum einha:ngen:

 % mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username

   Bevor das Gera:t entfernt werden kann, muss es abgeha:ngt werden:

 # umount /mnt/username

   Nach Entfernen des Gera:ts stehen in den Systemmeldungen Eintra:ge,
   a:hnlich der folgenden:

 umass0: at uhub3, port 2, addr 3 (disconnected)
 da0 at umass-sim0 bus 0 scbus4 target 0 lun 0
 da0: <STECH Simple Drive 1.04> s/n WD-WXE508CAN263          detached
 (da0:umass-sim0:0:0:0): Periph destroyed

  17.4.2. Automatisches Einha:ngen von Wechselmedien

  Anmerkung:

   autofs(5) unterstu:tzt das automatische Einha:ngen von Wechselmedien
   beginnend mit FreeBSD 10.2-RELEASE.

   Damit USB-Gera:te automatisch eingeha:ngt werden, muss der Kommentar fu:r
   folgende Zeile in /etc/auto_master entfernt werden:

 /media          -media          -nosuid

   Anschliessend fu:gen Sie folgende Zeilen in /etc/devd.conf hinzu:

 notify 100 {
         match "system" "GEOM";
         match "subsystem" "DEV";
         action "/usr/sbin/automount -c";
 };

   Falls autofs(5) und devd(8) bereits ausgefu:hrt werden, mu:ssen Sie die
   Konfiguration neu einlesen:

 # service automount reload
 # service devd restart

   autofs(5) wird beim Booten automatisch gestartet, wenn Sie folgende Zeile
   in /etc/rc.conf hinzufu:gen:

 autofs_enable="YES"

   Damit autofs(5) funktioniert, muss devd(8) aktiviert sein, was aber in der
   Voreinstellung der Fall ist.

   Starten Sie jetzt die Dienste:

 # service automount start
 # service automountd start
 # service autounmountd start
 # service devd start

   Jedes Dateisystem, das automatisch eingeha:ngt werden kann, erscheint als
   ein Verzeichnis unterhalb von media. Das Verzeichnis wird nach dem
   Dateisystemlabel benannt, bzw. nach dem Gera:tenamen, falls kein Label
   existiert.

   Das Dateisystem wird transparent beim ersten Zugriff in den
   Verzeichnisbaum eingeha:ngt und auch nach gewisser Zeit der Inaktivita:t
   wieder ausgeha:ngt. Laufwerke ko:nnen auch manuell ausgeha:ngt werden:

 # automount -fu

   Diese Methode wird in der Regel bei Speicherkarten und USB-Sticks
   verwendet. Sie funktioniert aber mit allen Blockgera:ten, einschliesslich
   optischen Laufwerken und iSCSI-LUNs.

  17.4.3. USB-Massenspeicher

  Anmerkung:

   Der cfumass(4)-Treiber ist ein USB Gera:te-Modus-Treiber und steht mit
   FreeBSD 12.0 zur Verfu:gung.

   Auf USB-OTG-kompatibler Hardware, wie in eingebetteten Systemen, kann der
   FreeBSD USB-Stack im Gera:te-Modus laufen. Der Gera:te-Modus ermo:glicht
   es dem Rechner, verschiedene Arten von USB-Gera:teklassen zu
   pra:sentieren, einschliesslich serieller Schnittstellen, Netzwerkadapter
   und Massenspeicher. Ein USB-Host, beispielsweise ein Laptop oder
   Desktop-Rechner, kann darauf wie auf ein physikalisches USB-Gera:t
   zugreifen.

   Je nach angeschlossener Hardware, ermo:glicht das usb_template(4)
   Kernelmodul es dem USB-Stack, automatisch zwischen Host- und Gera:teseite
   umzuschalten. Das Anschliessen eines USB-Gera:tes an den USB-OTG-Port
   bewirkt, dass FreeBSD in den Gera:te-Modus wechselt.

   Was FreeBSD dem USB-Host pra:sentiert, ha:ngt von der sysctl-Variablen
   hw.usb.template ab. Eine Liste der verfu:gbaren Werte finden Sie in
   usb_template(4). Damit der Host die gea:nderte Konfiguration erkennt, muss
   entweder das Gera:t getrennt und wieder angeschlossen, oder der USB-Bus
   neu gescannt werden. Wenn auf dem Host FreeBSD la:uft, ko:nnen Sie
   usbconfig(8) reset benutzen. Dieser Befehl muss nach dem Laden von
   usb_template.ko erfolgen, falls der USB-Host bereits am USB-OTG-Port
   angeschlossen war.

   Die sysctl-Variable hw.usb.template ist in der Voreinstellung auf 0
   gesetzt, so dass FreeBSD als USB-Massenspeicher funktioniert. Dazu mu:ssen
   die beiden Kernelmodule usb_template(4) und cfumass(4) geladen sein.
   cfumass(4) ist die Schnittstelle zum CTL-Subsystem, die auch fu:r iSCSI-
   und Fibre Channel-Targets benutzt wird. Auf der Host-Seite ko:nnen
   USB-Massenspeicher nur auf eine einzelne LUN (LUN 0) zugreifen.

   USB-Massenspeicher beno:tigen keinen aktiven ctld(8)-Daemon, obwohl er bei
   Bedarf verwendet werden kann. Dies unterscheidet sich von iSCSI. So gibt
   es zwei Mo:glichkeiten, ein Target zu konfigurieren: ctladm(8) und
   ctld(8). Beide erfordern, dass das cfumass.ko Kernelmodul geladen ist. Das
   Modul kann wie folgt geladen werden:

 # kldload cfumass

   Wenn cfumass.ko nicht im Kernel enthalten ist, kann das Modul beim Booten
   u:ber /boot/loader.conf geladen werden:

 cfumass_load="YES"

   Eine LUN kann auch ohne den ctld(8)-Daemon erstellt werden:

 # ctladm create -b block -o file=/data/target0

   Damit wird dem USB der Inhalt des Abbilds /data/target0 als LUN
   pra:sentiert. Die Datei muss vor dem Ausfu:hren des Befehls vorhanden
   sein. Um die LUN beim Systemstart zu konfigurieren, fu:gen Sie den Befehl
   in /etc/rc.local hinzu.

   ctld(8) kann ebenfalls verwendet werden, um LUNs zu verwalten. Erstellen
   Sie /etc/ctl.conf und fu:gen Sie eine Zeile in /etc/rc.conf hinzu, um
   sicherzustellen, dass ctld(8) beim Booten automatisch gestartet wird.
   Danach starten Sie den Daemon.

   Dies ist ein Beispiel fu:r eine einfache /etc/ctl.conf
   Konfigurationsdatei. ctl.conf(5) entha:lt eine ausfu:hrliche Beschreibung
   der einzelnen Optionen.

 target naa.50015178f369f092 {
         lun 0 {
                 path /data/target0
                 size 4G
         }
 }

   Dieses Beispiel erstellt ein Target mit einer einzigen LUN.
   naa.50015178f369f092 ist eine Gera:tekennung aus 32 zufa:lligen,
   hexadezimalen Ziffern. Die path-Zeile definiert den vollsta:ndigen Pfad
   einer Datei oder eines zvols, welche als Backend fu:r die LUN benutzt
   wird. Die Konfigurationsdatei muss vor dem Start von ctld(8) existieren.
   Die zweite Zeile ist optional und gibt die Gro:sse der LUN an.

   Fu:gen Sie folgende Zeile in /etc/rc.conf hinzu, um den ctld(8)-Daemon
   beim Booten zu starten:

 ctld_enable="YES"

   Um ctld(8) zu starten, fu:hren Sie dieses Kommando aus:

 # service ctld start

   Beim Start liest der ctld(8)-Daemon /etc/ctl.conf ein. Wenn diese Datei
   nach dem Start des Daemons bearbeitet wird, ko:nnen Sie sie erneut
   einlesen, damit die A:nderungen direkt wirksam sind:

 # service ctld reload

17.5. Erstellen und Verwenden von CDs

   Beigesteuert von Mike Meyer.

   CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken
   unterscheiden. Sie wurden so entworfen, dass sie ununterbrochen, ohne
   Verzo:gerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden
   ko:nnen. CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der
   ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der
   CD. Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden
   umzugehen.

   Die FreeBSD Ports-Sammlung bietet einige Werkzeuge zum Brennen und
   Kopieren von Audio- und Daten-CDs. Dieses Kapitel beschreibt die
   Verwendung von mehreren Kommandozeilen-Werkzeugen. Wenn Sie eine
   graphische Oberfla:che zum Brennen von CDs benutzen, ko:nnen Sie
   sysutils/xcdroast oder sysutils/k3b installieren.

  17.5.1. Unterstu:tzte Gera:te

   Beigetragen von Marc Fonvielle.

   Der GENERIC-Kernel entha:lt Unterstu:tzung fu:r SCSI, USB und ATAPI CD
   Lesegera:te und Brenner. Wird ein angepasster Kernel erstellt,
   unterscheiden sich die Optionen fu:r die Kernelkonfigurationsdatei je nach
   Art des Gera:ts.

   Fu:r einen SCSI-Brenner mu:ssen folgende Optionen vorhanden sein:

 device scbus      # SCSI bus (required for ATA/SCSI)
 device da         # Direct Access (disks)
 device pass       # Passthrough device (direct ATA/SCSI access)
 device cd         # needed for CD and DVD burners

   Fu:r einen USB-Brenner mu:ssen folgende Optionen vorhanden sein:

 device scbus      # SCSI bus (required for ATA/SCSI)
 device da         # Direct Access (disks)
 device pass       # Passthrough device (direct ATA/SCSI access)
 device cd>        # needed for CD and DVD burners
 device uhci       # provides USB 1.x support
 device ohci       # provides USB 1.x support
 device ehci       # provides USB 2.0 support
 device xhci       # provides USB 3.0 support
 device usb        # USB Bus (required)
 device umass      # Disks/Mass storage - Requires scbus and da

   Fu:r einen ATAPI-Brenner mu:ssen folgende Optionen vorhanden sein:

 device ata        # Legacy ATA/SATA controllers
 device scbus      # SCSI bus (required for ATA/SCSI)
 device pass       # Passthrough device (direct ATA/SCSI access)
 device cd         # needed for CD and DVD burners

  Anmerkung:

   Unter FreeBSD Versionen kleiner 10.x wird auch diese Option in der
   Kernelkonfigurationsdatei beno:tigt, falls der Brenner ein ATAPI-Gera:t
   ist:

 device atapicam

   Alternativ kann folgende Zeile in /boot/loader.conf hinzugefu:gt werden,
   um den Treiber beim Booten automatisch zu laden:

 atapicam_load="YES"

   Hierzu ist ein Neustart des Systems erforderlich, da dieser Treiber nur
   beim Booten geladen werden kann.

   Mit dmesg ko:nnen Sie pru:fen, ob das Gera:t von FreeBSD erkannt wurde.
   Unter FreeBSD Versionen kleiner 10.x lautet der Gera:tename acd0 anstelle
   von cd0.

 % dmesg | grep cd
 cd0 at ahcich1 bus 0 scbus1 target 0 lun 0
 cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device
 cd0: Serial Number M3OD3S34152
 cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes)
 cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

  17.5.2. Eine CD brennen

   Unter FreeBSD kann cdrecord zum Brennen von CDs benutzt werden. Dieses
   Programm wird aus dem Port oder Paket sysutils/cdrecord installiert.

   Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Benutzung
   sehr einfach. Geben Sie den Namen der zu brennenden ISO-Datei an. Wenn das
   System u:ber mehrere Brenner verfu:gt, mu:ssen Sie auch den Namen des
   Gera:tes angeben:

 # cdrecord dev=device imagefile.iso

   Benutzen Sie -scanbus um den Gera:tenamen des Brenners zu bestimmen. Die
   Ausgabe ko:nnte wie folgt aussehen:

 # cdrecord -scanbus
 ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jo:rg Schilling
 Using libscg version 'schily-0.9'
 scsibus0:
         0,0,0     0) 'SEAGATE ' 'ST39236LW       ' '0004' Disk
         0,1,0     1) 'SEAGATE ' 'ST39173W        ' '5958' Disk
         0,2,0     2) *
         0,3,0     3) 'iomega  ' 'jaz 1GB         ' 'J.86' Removable Disk
         0,4,0     4) 'NEC     ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
         0,5,0     5) *
         0,6,0     6) *
         0,7,0     7) *
 scsibus1:
         1,0,0   100) *
         1,1,0   101) *
         1,2,0   102) *
         1,3,0   103) *
         1,4,0   104) *
         1,5,0   105) 'YAMAHA  ' 'CRW4260         ' '1.0q' Removable CD-ROM
         1,6,0   106) 'ARTEC   ' 'AM12S           ' '1.06' Scanner
         1,7,0   107) *

   Benutzen Sie die drei durch Kommas separierten Zahlen, die fu:r den
   CD-Brenner angegeben sind, als Argument fu:r dev. Im Beispiel ist das
   Yamaha-Gera:t 1,5,0, so dass die passende Eingabe dev=1,5,0 ist.
   Einfachere Wege das Argument anzugeben, sowie Informationen u:ber
   Audiospuren und das Einstellen der Geschwindigkeit, sind in der Manualpage
   von cdrecord beschrieben.

   Alternativ ko:nnen Sie den folgenden Befehl ausfu:hren, um die
   Gera:teadresse des Brenners zu ermitteln:

 # camcontrol devlist
 <MATSHITA CDRW/DVD UJDA740 1.00>   at scbus1 target 0 lun 0 (cd0,pass0)

   Verwenden Sie die numerischen Werte fu:r scbus, target und lun. Fu:r
   dieses Beispiel wa:re 1,0,0 als Gera:tename zu verwenden.

  17.5.3. Daten auf ISO-Dateisystem schreiben

   Die Datendateien mu:ssen vorbereitet sein, bevor sie auf eine CD gebrannt
   werden. In FreeBSD wird mkisofs vom Paket oder Port sysutils/cdrtools
   installiert. Dieses Programm kann aus einem UNIX(R) Verzeichnisbaum ein
   ISO 9660-Dateisystem erzeugen. Im einfachsten Fall mu:ssen Sie lediglich
   den Namen der zu erzeugenden ISO-Datei und den Pfad zu den Dateien
   angeben, die auf dem ISO 9660-Dateisystem platziert werden:

 # mkisofs -o imagefile.iso /path/to/tree

   Bei diesem Kommando werden die Dateinamen auf Namen abgebildet, die den
   Restriktionen des ISO 9660-Dateisystem entsprechen. Dateien, die diesem
   Standard nicht entsprechen bleiben unberu:cksichtigt.

   Es gibt einige Optionen, um die Beschra:nkungen dieses Standards zu
   u:berwinden. Die unter UNIX(R) Systemen u:blichen Rock-Ridge-Erweiterungen
   werden durch -R aktiviert und -J aktiviert die von Microsoft(R) Systemen
   benutzten Joliet-Erweiterungen.

   Fu:r CDs, die nur auf FreeBSD-Systemen verwendet werden sollen, kann -U
   genutzt werden, um alle Beschra:nkungen fu:r Dateinamen aufzuheben.
   Zusammen mit -R wird ein Abbild des Dateisystems, identisch zu angegebenen
   FreeBSD-Dateibaum erstellt, selbst wenn dies den ISO 9660 Standard
   verletzt.

   Die letzte u:bliche Option ist -b. Sie wird benutzt, um den Ort eines
   Bootimages einer "El Torito" bootbaren CD anzugeben. Das Argument zu
   dieser Option ist der Pfad zu einem Bootimage ausgehend von der Wurzel des
   Baumes, der auf die CD geschrieben werden soll. In der Voreinstellung
   erzeugt mkisofs ein ISO-Image im "Diskettenemulations"-Modus. Dabei muss
   das Image genau 1200, 1440 oder 2880 KB gross sein. Einige Bootloader,
   darunter der auf den FreeBSD Installationsmedien verwendete, kennen keinen
   Emulationsmodus. Daher sollte in diesen Fa:llen -no-emul-boot verwendet
   werden. Wenn /tmp/myboot ein bootbares FreeBSD-System entha:lt, dessen
   Bootimage sich in /tmp/myboot/boot/cdboot befindet, dann wu:rde folgendes
   Kommando /tmp/bootable.iso erstellen:

 # mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot

   Das resultierende ISO-Abbild kann als speicherbasiertes Laufwerk
   eingeha:ngt werden:

 # mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
 # mount -t cd9660 /dev/md0 /mnt

   Jetzt ko:nnen Sie u:berpru:fen, dass /mnt und /tmp/myboot identisch sind.

   Sie ko:nnen das Verhalten von mkisofs mit einer Vielzahl von Optionen
   beeinflussen. Details dazu entnehmen Sie bitte mkisofs(8).

  Anmerkung:

   Es ist mo:glich eine Daten-CD in eine Datei zu kopieren, die einem Image
   entspricht, das mit mkisofs erstellt wurde. Verwenden Sie dazu dd mit dem
   Gera:tenamen als Eingabedatei und den Namen der ISO als Ausgabedatei:

 # dd if=/dev/cd0 of=file.iso bs=2048

   Das resultierende Abbild kann auf eine CD gebrannt werden, wie in
   Abschnitt 17.5.2, "Eine CD brennen" beschrieben.

  17.5.4. Einha:ngen von Daten-CDs

   Sobald ein Abbild auf eine CD gebrannt wurde, kann es durch Angabe des
   Dateisystemtyp, des CD-Laufwerks und des Mountpunktes eingehangen werden:

 # mount -t cd9660 /dev/cd0 /mnt

   Da mount davon ausgeht, dass ein Dateisystem vom Typ ufs ist, wu:rde die
   Fehlermeldung Incorrect super block erscheinen, wenn Sie beim Einha:ngen
   einer Daten-CD auf die Angabe -t cd9660 verzichten.

   Auf diese Weise ko:nnen Daten-CDs von jedem Hersteller verwendet werden.
   Es kann allerdings zu Problemen mit CDs kommen, die verschiedene ISO
   9660-Erweiterungen benutzen. So speichern Joliet-CDs alle Dateinamen unter
   Verwendung von zwei Byte langen Unicode-Zeichen. Tauchen statt bestimmter
   Zeichen nur Fragezeichen auf, so muss u:ber die Option -C der beno:tigte
   Zeichensatz angegeben werden. Weitere Informationen zu diesem Problem
   finden Sie in mount_cd9660(8).

  Anmerkung:

   Damit der Kernel diese Zeichenkonvertierung (festgelegt durch die Option
   -C) erkennt, mu:ssen Sie das Kernelmodul cd9660_iconv.ko laden. Dazu
   fu:gen Sie folgende Zeile in loader.conf ein:

 cd9660_iconv_load="YES"

   Danach mu:ssen Sie allerdings Ihr System neu starten. Alternativ ko:nnen
   Sie das Kernelmodul auch direkt u:ber kldload laden.

   Manchmal werden Sie die Meldung Device not configured erhalten, wenn Sie
   versuchen, eine Daten-CD einzuha:ngen. Fu:r gewo:hnlich liegt das daran,
   dass das Laufwerk keine CD erkannt hat, oder dass das Laufwerk auf dem Bus
   nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk die
   CD erkennt. Seien Sie also geduldig.

   Manchmal wird ein SCSI-CD nicht erkannt, weil es keine Zeit hatte, auf das
   Zuru:cksetzen des Busses zu antworten. Um dieses Problem zu lo:sen, fu:gen
   Sie die folgende Zeile in die Kernelkonfiguration ein und erstellen Sie
   einen angepassten Kernel nach den Anweisungen in Abschnitt 8.5, "Einen
   angepassten Kernel bauen und installieren":

 options SCSI_DELAY=15000

   Die Zeile bewirkt, dass nach dem Zuru:cksetzen des SCSI-Busses beim Booten
   15 Sekunden gewartet wird, um dem CD-Laufwerk genu:gend Zeit zu geben,
   darauf zu antworten.

  Anmerkung:

   Es ist mo:glich eine Datei auch direkt auf eine CD zu brennen, ohne vorher
   auf ihr ein ISO 9660-Dateisystem einzurichten. Man sagt auch, Daten werden
   roh auf die CD gebrannt. Einige Leute nutzen dies, um Datensicherungen
   durchzufu:hren.

   Eine auf diese Weise gefertigte Daten-CD kann nicht in das Dateisystem
   eingehangen werden. Um auf die Daten einer solchen CD zuzugreifen, mu:ssen
   die Daten vom rohen Gera:t gelesen werden. Beispielsweise wu:rde dieser
   Befehl eine komprimierte tar-Datei auf dem zweiten CD-Laufwerk in das
   aktuelle Verzeichnis extrahieren:

 # tar xzvf /dev/cd1

   Um eine Daten-CD in das System einzuha:ngen, mu:ssen die Daten mit mkisofs
   geschrieben werden.

  17.5.5. Kopieren von Audio-CDs

   Um eine Kopie einer Audio-CD zu erstellen, kopieren Sie die Stu:cke der CD
   in einzelne Dateien und brennen diese Dateien dann auf eine leere CD.

   Prozedur 17.1, "Eine Audio-CD kopieren" beschreibt, wie eine Audio-CD
   kopiert und gebrannt wird. Wenn die Version a:lter als FreeBSD 10.0 ist
   und ein ATAPI-Gera:t verwendet wird, muss zuna:chst das Modul atapicam
   nach den Anweisungen in Abschnitt 17.5.1, "Unterstu:tzte Gera:te" geladen
   werden.

   Prozedur 17.1. Eine Audio-CD kopieren
    1. Der Port oder das Paket sysutils/cdrtools installiert cdda2wav. Mit
       diesem Kommando ko:nnen Audiodaten in das aktuelle Verzeichnis
       extrahiert werden, wobei jede Datei in eine separate WAV-Datei
       geschrieben wird:

 % cdda2wav -vall -B -Owav

       Wenn das System nur u:ber ein CD-Laufwerk verfu:gt, muss der
       Gera:tename nicht angegeben werden. Lesen Sie die Manualpage von
       cdda2wav fu:r Anweisungen, wie ein Gera:t spezifiziert wird und
       weitere verfu:gbare Optionen fu:r dieses Kommando.

    2. Die erzeugten .wav Dateien schreiben Sie mit cdrecord auf eine leere
       CD:

 % cdrecord -v dev=2,0 -dao -useinfo *.wav

       Das Argument von dev gibt das verwendete Gera:t an, das wie in
       Abschnitt 17.5.2, "Eine CD brennen" ermittelt werden kann.

17.6. DVDs benutzen

   Beigetragen von Marc Fonvieille.
   Mit Beitra:gen von Andy Polyakov.

   Nach der CD ist die DVD die na:chste Generation optischer Speichermedien.
   Auf einer DVD ko:nnen mehr Daten als auf einer CD gespeichert werden. DVDs
   werden als Standardmedium fu:r Videos verwendet.

   Fu:r beschreibbare DVDs existieren fu:nf Medienformate:

     * DVD-R: Dies war das erste verfu:gbare Format. Das Format wurde vom
       DVD-Forum festgelegt. Die Medien sind nur einmal beschreibbar.

     * DVD-RW: Dies ist die wiederbeschreibbare Version des DVD-R Standards.
       Eine DVD-RW kann ungefa:hr 1000 Mal beschrieben werden.

     * DVD-RAM: Dies ist ein wiederbeschreibbares Format, das wie ein
       Wechsellaufwerk betrachtet werden kann. Allerdings sind die Medien
       nicht kompatibel zu den meisten DVD-ROM-Laufwerken und
       DVD-Video-Spielern, da das DVD-RAM-Format nur von wenigen Brennern
       unterstu:tzt wird. Informationen zur Nutzung von DVD-RAM finden Sie in
       Abschnitt 17.6.8, "DVD-RAM".

     * DVD+RW: Ist ein wiederbeschreibbares Format, das von der DVD+RW
       Alliance festgelegt wurde. Eine DVD+RW kann ungefa:hr 1000 Mal
       beschrieben werden.

     * DVD+R: Dieses Format ist die nur einmal beschreibbare Variante des
       DVD+RW Formats.

   Auf einer einfach beschichteten DVD ko:nnen 4.700.000.000 Bytes
   gespeichert werden. Das sind 4,38 GB oder 4485 MB (1 Kilobyte sind
   1024 Bytes).

  Anmerkung:

   Die physischen Medien sind unabha:ngig von der Anwendung. Ein DVD-Video
   ist eine spezielle Anordnung von Dateien, die auf irgendein Medium,
   beispielsweise DVD-R, DVD+R oder DVD-RW geschrieben werden kann. Bevor Sie
   ein Medium auswa:hlen, mu:ssen Sie sicherstellen, dass der Brenner und der
   DVD-Spieler mit dem Medium umgehen ko:nnen.

  17.6.1. Konfiguration

   Benutzen Sie growisofs(1), um DVDs zu beschreiben. Das Kommando ist
   Bestandteil von sysutils/dvd+rw-tools, und kann mit allen DVD-Medien
   umgehen.

   Diese Werkzeuge verwenden das SCSI-Subsystem, um auf die Gera:te
   zuzugreifen. Daher muss ATAPI/CAM-Unterstu:tzung geladen, oder statisch in
   den Kernel kompiliert werden. Sollte der Brenner jedoch die
   USB-Schnittstelle nutzen, wird diese Unterstu:tzung nicht beno:tigt.
   Weitere Informationen zur Konfiguration von USB-Gera:ten finden Sie in
   Abschnitt 17.4, "USB Speichermedien".

   Fu:r ATAPI-Gera:te mu:ssen ebenfalls DMA-Zugriffe aktiviert werden. Dazu
   wird die folgende Zeile in /boot/loader.conf eingefu:gt:

 hw.ata.atapi_dma="1"

   Bevor Sie dvd+rw-tools benutzen, lesen Sie bitte die
   Hardware-Informationen auf der Seite Hardware Compatibility Notes.

  Anmerkung:

   Fu:r eine grafische Oberfla:che sollten Sie sich sysutils/k3b ansehen, das
   eine benutzerfreundliche Schnittstelle zu growisofs(1) und vielen anderen
   Werkzeugen bietet.

  17.6.2. Daten-DVDs brennen

   growisofs(1) erstellt mit dem Programm mkisofs das Dateisystem und brennt
   anschliessend die DVD. Vor dem Brennen braucht daher kein Abbild der Daten
   erstellt zu werden.

   Wenn Sie von den Daten im Verzeichnis /path/to/data eine DVD+R oder eine
   DVD-R brennen wollen, benutzen Sie das nachstehende Kommando:

 # growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data

   In diesem Beispiel wird -J -R an mkisofs(8) durchgereicht und dient zum
   Erstellen des Dateisystems (hier: ein ISO-9660-Dateisystem mit Joliet- und
   Rock-Ridge-Erweiterungen). Weiteres entnehmen Sie bitte der Hilfeseite
   mkisofs(8).

   Die Option -Z wird fu:r die erste Aufnahme einer Single- oder Multisession
   beno:tigt. Ersetzen Sie /dev/cd0 mit dem Gera:tenamen des DVD-Gera:tes.
   Die Nutzung von -dvd-compat schliesst das Medium, weitere Daten ko:nnen
   danach nicht mehr angeha:ngt werden. Dies sollte auch eine bessere
   Kompatibilita:t mit anderen DVD-ROM-Laufwerken bieten.

   Um ein vorher erstelltes Abbild der Daten zu brennen, beispielsweise
   imagefile.iso, verwenden Sie:

 # growisofs -dvd-compat -Z /dev/cd0=imagefile.iso

   Die Schreibgeschwindigkeit ha:ngt von den verwendeten Medium sowie dem
   verwendeten Gera:t ab und sollte automatisch gesetzt werden. Um die
   Schreibgeschwindigkeit vorzugeben, verwenden Sie -speed=. Beispiele finden
   Sie in growisofs(1).

  Anmerkung:

   Um gro:ssere Dateien als 4.38GB zu unterstu:tzen, ist es notwendig ein
   UDF/ISO-9660 Hybrid-Dateisystem zu erstellen. Dieses Dateisystem muss mit
   zusa:tzlichen Parametern -udf -iso-level 3 bei mkisofs(8) und allen
   relevanten Programmen, wie beispielsweise growisofs(1)) erzeugt werden.
   Dies ist nur notwendig, wenn Sie ein ISO-Image erstellen oder direkt auf
   eine DVD schreiben wollen. DVDs, die in dieser Weise hergestellt worden
   sind, mu:ssen als UDF-Dateisystem mit mount_udf(8) eingehangen werden. Sie
   sind nur auf Betriebssystemen, die UDF unterstu:tzen brauchbar, ansonsten
   sieht es so aus, als ob sie kaputte Dateien enthalten wu:rden.

   Um diese Art von ISO-Datei zu erstellen:

 % mkisofs -R -J -udf -iso-level 3 -o imagefile.iso /path/to/data

   Um Daten direkt auf eine DVD zu brennen, geben Sie den folgenden Befehl
   ein:

 # growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data

   Wenn ein ISO-Abbild bereits grosse Dateien entha:lt, sind keine weiteren
   Optionen fu:r growisofs(1) notwendig, um das Abbild auf die DVD zu
   brennen.

   Achten Sie darauf, eine aktuelle Version von sysutils/cdrtools zu
   verwenden, welche mkisofs(8) entha:lt, da a:ltere Versionen keinen Support
   fu:r grosse Dateien enthalten. Falls die neueste Version nicht
   funktioniert, installieren Sie sysutils/cdrtools-devel und lesen Sie
   mkisofs(8).

  17.6.3. DVD-Videos brennen

   Ein DVD-Video ist eine spezielle Anordnung von Dateien, die auf den
   ISO-9660 und den micro-UDF (M-UDF) Spezifikationen beruht. Da DVD-Video
   auf eine bestimmte Datei-Hierarchie angewiesen ist, mu:ssen DVDs mit
   speziellen Programmen wie multimedia/dvdauthor erstellt werden.

   Ist bereits ein Abbild des Dateisystems eines DVD-Videos vorhanden, kann
   es auf die gleiche Weise wie jedes andere Abbild gebrannt werden. Wenn
   dvdauthor verwendet wurde, um die DVD zu erstellen und die Resultate in
   /path/to/video liegen, kann das folgende Kommando verwendet werden, um ein
   DVD-Video zu brennen:

 # growisofs -Z /dev/cd0 -dvd-video /path/to/video

   -dvd-video wird an mkisofs(8) weitergereicht, um die Datei-Hierarchie fu:r
   ein DVD-Video zu erstellen. Weiterhin bewirkt diese Option, dass
   growisofs(1) mit -dvd-compat aufgerufen wird.

  17.6.4. DVD+RW-Medien benutzen

   Im Gegensatz zu CD-RW-Medien mu:ssen DVD+RW-Medien erst formatiert werden,
   bevor sie benutzt werden ko:nnen. Es wird empfohlen growisofs(1)
   einzusetzen, da das Programm Medien automatisch formatiert, wenn es
   erforderlich ist. Es ist jedoch mo:glich, auch dvd+rw-format zu nutzen, um
   die DVD+RW zu formatieren:

 # dvd+rw-format /dev/cd0

   Dieser Vorgang muss nur einmal durchgefu:hrt werden. Denken Sie daran,
   dass nur neue DVD+RWs formatiert werden mu:ssen. Anschliessend ko:nnen
   DVD+RWs, wie gewohnt gebrannt werden.

   Wenn Sie auf einer DVD+RW ein neues Dateisystem erstellen wollen, brauchen
   Sie die DVD+RW vorher nicht zu lo:schen. U:berschreiben Sie einfach das
   vorige Dateisystem indem Sie eine neue Session anlegen:

 # growisofs -Z /dev/cd0 -J -R /path/to/newdata

   Das DVD+RW-Format erlaubt es, Daten an eine vorherige Aufnahme
   anzuha:ngen. Dazu wird eine neue Session mit der schon bestehenden
   zusammengefu:hrt. Es wird keine Multi-Session geschrieben, sondern
   growisofs(1) vergro:ssert das ISO-9660-Dateisystem auf dem Medium.

   Das folgende Kommando fu:gt weitere Daten zu einer vorher erstellten
   DVD+RW hinzu:

 # growisofs -M /dev/cd0 -J -R /path/to/nextdata

   Wenn Sie eine DVD+RW erweitern, verwenden Sie dieselben
   mkisofs(8)-Optionen wie beim Erstellen der DVD+RW.

  Anmerkung:

   Verwenden Sie -dvd-compat, um bessere Kompatibilita:t mit
   DVD-ROM-Laufwerken zu gewa:hrleisten. Zu einem DVD+RW-Medium ko:nnen Sie
   mit dieser Option auch weiterhin Daten hinzufu:gen.

   Um das Medium zu lo:schen, verwenden Sie:

 # growisofs -Z /dev/cd0=/dev/zero

  17.6.5. DVD-RW-Medien benutzen

   Eine DVD-RW kann mit zwei Methoden beschrieben werden:
   Sequential-Recording oder Restricted-Overwrite. Voreingestellt ist
   Sequential-Recording.

   Eine neue DVD-RW kann direkt beschrieben werden; sie muss nicht vorher
   formatiert werden. Allerdings muss eine DVD-RW, die mit
   Sequential-Recording aufgenommen wurde, zuerst gelo:scht werden, bevor
   eine neue Session aufgenommen werden kann.

   Der folgende Befehl lo:scht eine DVD-RW im Sequential-Recording-Modus:

 # dvd+rw-format -blank=full /dev/cd0

  Anmerkung:

   Das vollsta:ndige Lo:schen mit -blank=full dauert mit einem 1x Medium
   ungefa:hr eine Stunde. Wenn die DVD-RW im Disk-At-Once-Modus (DAO)
   aufgenommen wurde, kann sie mit -blank schneller gelo:scht werden. Um eine
   DVD-RW im DAO-Modus zu brennen, benutzen Sie das folgende Kommando:

 # growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso

   Die Option -use-the-force-luke=dao sollte nicht erforderlich sein, da
   growisofs(1) den DAO-Modus automatisch erkennt.

   Der Restricted-Overwrite-Modus sollte mit jeder DVD-RW verwendet werden,
   da er flexibler als der voreingestellte Sequential-Recording-Modus ist.

   Um Daten auf eine DVD-RW im Sequential-Recording-Modus zu schreiben,
   benutzen Sie dasselbe Kommando wie fu:r die anderen DVD-Formate:

 # growisofs -Z /dev/cd0 -J -R /path/to/data

   Um weitere Daten zu einer Aufnahme hinzuzufu:gen, benutzen Sie -M mit
   growisofs(1). Werden die Daten im Sequential-Recording-Modus hinzugefu:gt,
   wird eine neue Session erstellt. Das Ergebnis ist ein
   Multi-Session-Medium.

   Eine DVD-RW im Restricted-Overwrite-Modus muss nicht gelo:scht werden, um
   eine neue Session aufzunehmen. Das Medium kann einfach mit -Z
   u:berschrieben werden. Mit -M kann das ISO-9660-Dateisystem, wie mit einer
   DVD+RW, vergro:ssert werden. Die DVD entha:lt danach eine Session.

   Benutzen sie das nachstehende Kommando, um den Restricted-Overwrite-Modus
   einzustellen:

 # dvd+rw-format /dev/cd0

   Das folgende Kommando stellt den Modus wieder auf Sequential-Recording
   zuru:ck:

 # dvd+rw-format -blank=full /dev/cd0

  17.6.6. Multi-Session

   Nur wenige DVD-ROM-Laufwerke unterstu:tzen Multi-Session-DVDs und lesen
   meist nur die erste Session. Mehrere Sessions werden von DVD+R, DVD-R und
   DVD-RW im Sequential-Recording-Modus unterstu:tzt. Im Modus
   Restricted-Overwrite gibt nur eine Session.

   Wenn das Medium noch nicht geschlossen ist, erstellt das nachstehende
   Kommando eine neue Session auf einer DVD+R, DVD-R oder DVD-RW im
   Sequential-Recording-Modus:

 # growisofs -M /dev/cd0 -J -R /path/to/nextdata

   Wird dieses Kommando mit DVD+RW- oder DVD-RW-Medien im
   Restricted-Overwrite-Modus benutzt, werden die neuen Daten mit den Daten
   der bestehenden Session zusammengefu:hrt. Das Medium entha:lt danach eine
   Session. Nutzen Sie diese Methode, um neue Daten zu einer bestehenden
   Session hinzuzufu:gen.

  Anmerkung:

   Fu:r den Anfang und das Ende einer Session wird auf dem Medium
   zusa:tzlicher Platz verbraucht. Um den Speicherplatz auf dem Medium
   optimal auszunutzen, sollten Sie daher Sessions mit vielen Daten
   hinzufu:gen. Auf ein DVD+R-Medium passen maximal 154 Sessions,
   2000 Sessions auf ein DVD-R-Medium und 127 Sessions auf eine DVD+R Double
   Layer.

  17.6.7. Weiterfu:hrendes

   dvd+rw-mediainfo /dev/cd0 zeigt Informationen u:ber eine im Laufwerk
   liegende DVD an.

   Weiteres zu dvd+rw-tools finden Sie in growisofs(1), auf der dvd+rw-tools
   Web-Seite und in den Archiven der cdwrite-Mailingliste.

  Anmerkung:

   Wenn Sie einen Problembericht zur Nutzung der dvd+rw-tools erstellen,
   fu:gen Sie immer die Ausgabe von dvd+rw-mediainfo hinzu.

  17.6.8. DVD-RAM

   DVD-RAM-fa:hige Brenner nutzten die SCSI- oder ATAPI-Schnittstelle. Fu:r
   ATAPI-Gera:te muss der DMA-Modus aktiviert werden, indem die folgende
   Zeile in /boot/loader.conf hinzugefu:gt wird:

 hw.ata.atapi_dma="1"

   Eine DVD-RAM kann mit einer Wechselplatte verglichen werden. Wie diese,
   muss auch eine DVD-RAM vor dem ersten Einsatz formatiert werden. In diesem
   Beispiel wird das gesamte Medium mit dem Standard-UFS2-Dateisystem
   formatiert:

 # dd if=/dev/zero of=/dev/acd0 bs=2k count=1
 # bsdlabel -Bw acd0
 # newfs /dev/acd0

   Denken Sie dabei daran, dass Sie gegebenenfalls die Gera:tedatei (hier
   acd0) an Ihre Konfiguration anpassen mu:ssen.

   Nachdem die DVD-RAM formatiert ist, kann sie wie eine normale Festplatte
   gemountet werden:

 # mount /dev/acd0 /mnt

   Danach kann schreibend und lesend auf das DVD-RAM Medium zugegriffen
   werden.

17.7. Disketten benutzen

   Dieser Abschnitt beschreibt die Formatierung von 3,5 Zoll Disketten in
   FreeBSD.

   Prozedur 17.2. Disketten formatieren

   Bevor eine Diskette benutzt werden kann, muss sie (low-level) formatiert
   werden, was normalerweise der Hersteller schon gemacht hat. Sie ko:nnen
   die Diskette allerdings noch einmal formatieren, um das Medium zu
   u:berpru:fen. Benutzen Sie fdformat(1), um Disketten unter FreeBSD zu
   formatieren. Achten Sie dabei auf Fehlermeldungen, die schlechte
   Speichermedien anzeigen.

    1. Um eine Diskette zu formatieren, legen Sie eine 3,5 Zoll Diskette in
       das erste Diskettenlaufwerk ein und fu:hren das folgende Kommando aus:

 # /usr/sbin/fdformat -f 1440 /dev/fd0

    2. Nach dem Formatieren muss auf der Diskette ein Disklabel erstellt
       werden, um die Gro:sse und Geometrie der Diskette zu erkennen. Eine
       Liste der unterstu:tzten Geometrien finden Sie in /etc/disktab.

       Erstellen Sie nun das Label mit bsdlabel(8):

 # /sbin/bsdlabel -B -w /dev/fd0 fd1440

    3. Auf der Diskette kann nun ein Dateisystem erstellt werden (high-level
       Formatierung). Das Dateisystem der Diskette kann entweder UFS oder FAT
       sein, wobei FAT fu:r Disketten in der Regel die bessere Wahl ist.

       Um die Diskette mit FAT zu formatieren, geben Sie folgendes Kommando
       ein:

 # /sbin/newfs_msdos /dev/fd0

   Die Diskette kann nun benutzt werden. Um die Diskette zu verwenden, kann
   sie mit mount_msdosfs(8) eingeha:ngt werden. Man kann auch
   emulators/mtools aus der Ports-Sammlung installieren, um mit der Diskette
   zu arbeiten.

17.8. Datensicherung

   Die Planung und Umsetzung einer Backup-Strategie ist unerla:sslich, um
   Daten in bestimmten Situationen wiederherstellen zu ko:nnen, zum Beispiel
   bei Plattendefekten, versehentlichem Lo:schen von Dateien, willku:rlicher
   Korrumpierung von Dateien oder der vollsta:ndigen Zersto:rung des Systems
   und der Backups, die am gleichen Ort aufbewahrt werden.

   Die Art und der Zeitplan des Backups kann variieren, abha:ngig von der
   Wichtigkeit der Daten, der beno:tigten Granularita:t zur Wiederherstellung
   von Dateien und der Dauer einer akzeptablen Ausfallzeit. Zu den mo:glichen
   Backup-Strategien geho:ren unter anderem:

     * Die Archivierung des kompletten Systems auf externen Datentra:gern.
       Dieser Ansatz schu:tzt zwar vor allen oben aufgefu:hrten Problemen,
       ist aber zeitaufwa:ndig und unbequem bei der Wiederherstellung,
       insbesondere fu:r nicht privilegierte Benutzer.

     * Dateisystem-Snapshots sind nu:tzlich bei der Wiederherstellung von
       gelo:schten Dateien, bzw. fru:heren Versionen von Dateien.

     * Kopien ganzer Dateisysteme oder Festplatten, die mit einem anderen
       System im Netzwerk mittels net/rsync synchronisiert werden.

     * Hardware oder Software RAID, was im Falle von Plattendefekten die
       Ausfallzeit minimiert oder vermeidet.

   U:blicherweise wird eine Mischung aus verschiedenen Strategien verwendet.
   Es kann zum Beispiel ein Sicherungsplan erstellt und automatisiert werden,
   um eine wo:chentliche, vollsta:ndige Systemsicherung, erga:nzt mit
   stu:ndlichen ZFS-Snapshots, zu erstellen. Daru:ber hinaus ko:nnte man eine
   manuelle Sicherung einzelner Verzeichnisse oder Dateien machen, bevor
   diese bearbeitet oder gelo:scht werden.

   Dieser Abschnitt beschreibt einige Programme, die zur Erstellung und
   Verwaltung von Sicherungen unter FreeBSD verwendet werden ko:nnen.

  17.8.1. Sicherung von Dateisystemen

   Die traditionellen UNIX(R)-Programme zum Sichern und Wiederherstellen von
   Dateisystemen sind dump(8) und restore(8). Diese Programme arbeiten auf
   der Block-Ebene der Festplatte, also unterhalb des Abstraktionslevels von
   Dateien, Links und Verzeichnissen, die die Grundlage des
   Dateisystemkonzepts bilden. Im Gegensatz zu anderen Backup-Programmen
   sichert dump ein ganzes Dateisystem und nicht nur einen Teil des
   Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem
   umfasst. Anstatt Dateien oder Verzeichnisse zu schreiben, schreibt dump
   die Blo:cke, aus denen die Dateien und Verzeichnisse bestehen.

  Anmerkung:

   Wird dump benutzt, um das Root-Verzeichnis zu sichern, werden /home, /usr
   und viele andere Verzeichnisse nicht gesichert, da dies normalerweise
   Mountpunkte fu:r andere Dateisysteme oder symbolische Links zu diesen
   Dateisystemen sind.

   Wenn restore zum Extrahieren von Daten verwendet wird, werden tempora:re
   Dateien standardma:ssig in /tmp abgelegt. Wenn Sie von einer Platte mit
   einem kleinen /tmp-Verzeichnis zuru:cksichern, setzen Sie die
   Umgebungsvariable TMPDIR auf ein Verzeichnis mit mehr freiem
   Speicherplatz, damit die Wiederherstellung gelingt.

   Beachten Sie bei der Verwendung von dump, dass es einige Eigenarten aus
   den fru:hen Tagen der Version 6 von AT&T UNIX(R) (ca. 1975) beibehalten
   hat. Die Standardparameter gehen davon aus, dass auf einem 9-Spur-Band
   gesichert wird, und nicht auf ein anderes Medium oder auf
   Sicherungsba:nder mit hoher Dichte. Diese Standardwerte mu:ssen auf der
   Kommandozeile u:berschrieben werden.

   Es ist mo:glich, das Dateisystem u:ber das Netzwerk auf einem anderen
   Rechner zu sichern, oder auf einem Bandlaufwerk eines anderen Rechners.
   Obwohl die Programme rdump(8) und rrestore(8) fu:r diese Zwecke benutzt
   werden ko:nnen, gelten sie als nicht sicher.

   Verwenden Sie stattdessen dump und restore in einer sichereren Weise u:ber
   eine SSH-Verbindung. In diesem Beispiel wird eine vollsta:ndige,
   komprimierte Sicherung von /usr erstellt, das anschliessend an einen
   bestimmten Host u:ber eine SSH-Verbindung gesendet wird.

   Beispiel 17.1. dump mit ssh benutzen

 # /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
           targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz

   In diesem Beispiel wird RSH gesetzt, um u:ber eine SSH-Verbindung eine
   Sicherung auf ein Bandlaufwerk eines entfernten Systems zu schreiben:

   Beispiel 17.2. dump u:ber ssh mit gesetzter RSH benutzen

 # env RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usr

  17.8.2. Sicherung von Verzeichnissen

   Einige integrierte Werkzeuge stehen zur Sicherung und Wiederherstellung
   von bestimmten Dateien und Verzeichnissen bei Bedarf zur Verfu:gung.

   Wenn es um die Sicherung von Dateien in einem Verzeichnis geht, ist tar(1)
   eine gute Wahl. Dieses Werkzeug stammt aus Version 6 von AT&T UNIX(R) und
   erwartet standardma:ssig eine rekursive Sicherung auf ein lokales Band. Es
   ko:nnen jedoch Optionen angegeben werden, um den Namen einer
   Sicherungsdatei zu bestimmen.

   In diesem Beispiel wird eine komprimierte Sicherung des aktuellen
   Verzeichnisses nach /tmp/mybackup.tgz gespeichert. Achten Sie bei der
   Sicherungsdatei darauf, dass sie nicht in dem Verzeichnis gespeichert
   wird, welches gesichert werden soll.

   Beispiel 17.3. Das aktuelle Verzeichnis mit tar sichern

 # tar czvf /tmp/mybackup.tgz .

   Um eine komplette Sicherung wiederherzustellen, wechseln Sie mit cd in das
   Verzeichnis, in dem Sie die Daten wiederherstellen mo:chten und geben Sie
   den Namen der Sicherungsdatei an. Beachten Sie, dass dabei alle Dateien in
   dem Verzeichnis u:berschrieben werden. Im Zweifel sichern Sie besser in
   einem tempora:ren Verzeichnis, oder geben Sie den Verzeichnisnamen bei der
   Wiederherstellung an.

   Beispiel 17.4. Wiederherstellung mit tar in das aktuelle Verzeichnis

 # tar xzvf /tmp/mybackup.tgz

   Es gibt dutzende Optionen, die in tar(1) beschrieben werden. Das Programm
   unterstu:tzt auch die Verwendung von Ausschlussmustern, um bestimmte
   Dateien von der Sicherung oder Wiederherstellung von Verzeichnissen
   auszuschliessen.

   Um bestimmte, aufgelistete Dateien und Verzeichnisse zu sichern, ist
   cpio(1) eine gute Wahl. Im Gegensatz zu tar weiss cpio nicht wie ein
   Verzeichnisbaum durchlaufen wird. Daher ist es auf eine Liste von zu
   sichernden Dateien angewiesen.

   So kann beispielsweise eine Liste von Dateien mit ls oder find erzeugt
   werden. Dieses Beispiel erstellt eine rekursive Liste des aktuellen
   Verzeichnisses, die dann u:ber eine Pipe an cpio u:bergeben wird, um eine
   Sicherung namens /tmp/mybackup.cpio zu erstellen.

   Beispiel 17.5. Rekursive Sicherung des aktuellen Verzeichnisses mit ls und
   cpio

 # ls -R | cpio -ovF /tmp/mybackup.cpio

   pax(1) ist ein Programm, welches versucht die Funktionen von tar und cpio
   zu kombinieren. U:ber die Jahre hinweg sind die verschiedenen Versionen
   von tar und cpio leicht inkompatibel geworden. Daher hat POSIX(R) pax
   geschaffen, welches versucht viele der unterschiedlichen cpio- und
   tar-Formate zu lesen und zu schreiben, ausserdem einige neue, eigene
   Formate.

   Fu:r die vorangegangenen Beispiele wa:re ein a:quivalenter Aufruf von pax:

   Beispiel 17.6. Das aktuelle Verzeichnis mit pax sichern

 # pax -wf /tmp/mybackup.pax .

  17.8.3. Bandmedien benutzen

   Obwohl sich Bandmedien mit der Zeit weiterentwickelt haben, verwenden
   moderne Backup-Systeme in der Regel Offsite-Backups in Verbindung mit
   lokalen Wechseldatentra:gern. FreeBSD unterstu:tzt alle
   SCSI-Bandlaufwerke, wie etwa LTO und DAT. Zusa:tzlich gibt es begrenzte
   Unterstu:tzung fu:r SATA- und USB-Bandlaufwerke.

   Fu:r SCSI-Bandlaufwerke nutzt FreeBSD den sa(4) Treiber, der die
   Schnittstellen /dev/sa0, /dev/nsa0 und /dev/esa0 bereitstellt. Der Name
   des physikalischen Gera:ts ist /dev/sa0. Wird /dev/nsa0 benutzt, dann wird
   die Backup-Anwendung nach dem Schreibvorgang das Band nicht zuru:ckspulen,
   was es ermo:glicht, mehr als eine Datei auf das Band zu schreiben. Die
   Verwendung von /dev/esa0 wirft das Band aus, nachdem das Gera:t
   geschlossen wurde.

   FreeBSD nutzt mt fu:r die Steuerung der Operationen des Bandlaufwerks, wie
   die Suche nach Dateien auf einem Band, oder um Kontrollmarkierungen auf
   ein Band zu schreiben. Beispielsweise ko:nnen die ersten drei Dateien auf
   einem Band erhalten bleiben, indem sie u:bersprungen werden, bevor eine
   neue Datei auf das Band geschrieben wird

 # mt -f /dev/nsa0 fsf 3

   Dieses Werkzeug unterstu:tzt viele Operationen. Weitere Einzelheiten
   finden Sie in mt(1).

   Um eine Datei mit tar auf ein Band zu schreiben, geben Sie den Namen des
   Bandlaufwerks und den Dateinamen an:

 # tar cvf /dev/sa0 file

   Wiederherstellung von Dateien aus dem tar-Archiv von Band in das aktuelle
   Verzeichnis:

 # tar xvf /dev/sa0

   Benutzen Sie dump, um ein UFS-Dateisystem zu sichern. Dieses Beispiel
   sichert /usr, ohne danach das Band zuru:ckzuspulen:

 # dump -0aL -b64 -f /dev/nsa0 /usr

   Interaktive Wiederherstellung von Dateien aus einer dump(8)-Datei von Band
   in das aktuelle Verzeichnis:

 # restore -i -f /dev/nsa0

  17.8.4. Backup-Software von Drittanbietern

   Die FreeBSD Ports-Sammlung entha:lt viele Programme von Drittanbietern,
   die verwendet werden ko:nnen um die zeitliche Erstellung von Sicherungen
   zu planen, zu vereinfachen und bequemer zu machen. Viele dieser Programme
   basieren auf dem Client-Server-Modell und ko:nnen benutzt werden, um die
   Sicherung von einzelnen Systemen oder allen Rechnern in einem Netzwerk zu
   automatisieren.

   Zu den bekannten Programmen geho:ren Amanda, Bacula, rsync und duplicity.

  17.8.5. Die Wiederherstellung in einem Notfall

   Zusa:tzlich zu den regelma:ssigen Sicherungen empfiehlt es sich, die
   folgenden Schritte im Rahmen eines Notfallplans durchzufu:hren.

   Erstellen Sie einen Ausdruck der Ausgabe der folgenden Kommandos:

     * gpart show

     * more /etc/fstab

     * dmesg

   Bewahren Sie diesen Ausdruck und eine Kopie des Installationsmediums an
   einem sicheren Ort auf. Im Falle einer Wiederherstellung im Notfall,
   starten Sie von dem Installationsmedium und wa:hlen Sie Live CD, um eine
   Rettungs-Shell zu starten. Dieser Rettungsmodus kann verwendet werden, um
   den aktuellen Stand des Systems anzuzeigen, und wenn no:tig, Festplatten
   zu formatieren und Daten aus den Sicherungen wiederherzustellen.

  Anmerkung:

   Das Installationsmedium fu:r FreeBSD/i386 10.4-RELEASE entha:lt keine
   Rettungs-Shell. Laden Sie fu:r diese Version ein Abbild der Livefs CD von
   ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/10.4/FreeBSD-10.4-RELEASE-i386-livefs.iso.

   Als na:chstes testen Sie die Rettungs-Shell und die Sicherungen.
   Dokumentieren Sie diesen Ablauf. Bewahren Sie diese Notizen zusammen mit
   den Medien, den Ausdrucken und den Sicherungen auf. Diese Notizen ko:nnen
   Ihnen im Notfall helfen eine versehentliche Zersto:rung der Sicherungen zu
   verhindern, wa:hrend Sie unter Stress eine Wiederherstellung durchfu:hren.

   Als zusa:tzliche Sicherheitsvorkehrung kann jeweils die letzte Sicherung
   an einem entfernten Standort aufbewahrt werden. Dieser Standort sollte
   ra:umlich von den Computern und Festplatten durch eine erhebliche
   Entfernung getrennt sein.

17.9. Speicherbasierte Laufwerke

   Verbessert und neu strukturiert von Marc Fonvieille.

   Neben physikalischen Laufwerken unterstu:tzt FreeBSD auch speicherbasierte
   Laufwerke. Eine mo:gliche Verwendung fu:r ein speicherbasiertes Laufwerk
   ist der Zugriff auf ein ISO-Dateisystem, jedoch ohne vorher die Daten auf
   eine CD oder DVD zu brennen und dann das Medium einzuha:ngen.

   FreeBSD verwendet den md(4) Treiber um Unterstu:tzung fu:r
   speicherbasierte Laufwerke bereitzustellen. Dieser Treiber ist bereits im
   GENERIC-Kernel enthalten. Wenn Sie eine angepasste
   Kernelkonfigurationsdatei verwenden, stellen Sie sicher, dass folgende
   Zeile enthalten ist:

 device md

  17.9.1. Ein- und Ausha:ngen von bestehenden Abbildern

   Um ein bestehendes Abbild eines Dateisystems einzuha:ngen, verwenden Sie
   mdconfig zusammen mit dem Namen der ISO-Datei und einer freien
   Gera:tenummer. Benutzen Sie dann diese Gera:tenummer, um das Abbild in
   einen existierenden Mountpunkt einzuha:ngen. Sobald dies erledigt ist,
   erscheinen die Dateien des Abbildes unterhalb des Mountpunktes. Dieses
   Beispiel wird diskimage.iso an das speicherbasierte Laufwerk /dev/md0
   binden und dann in /mnt einha:ngen:

 # mdconfig -f diskimage.iso -u 0
 # mount /dev/md0 /mnt

   Wenn keine Gera:tenummer mit -u angegeben ist, wird von md(4) automatisch
   eine ungenutzte Gera:tenummer zugewiesen. Das zugewiesene Gera:t wird auf
   der Standardausgabe ausgegeben (zum Beispiel md4). Weitere Informationen
   zu diesem Kommando und dessen Optionen finden Sie in mdconfig(8).

   Wenn ein speicherbasiertes Laufwerk nicht mehr in Gebrauch ist, sollten
   seine belegten Ressourcen wieder an das System zuru:ckgegeben werden.
   Ha:ngen Sie zuerst das Dateisystem aus, dann verwenden Sie mdconfig, um
   die Platte vom System zu trennen und die Ressourcen freizugeben.

 # umount /mnt
 # mdconfig -d -u 0

   Um festzustellen, ob noch irgendwelche speicherbasierten Laufwerke am
   System angeschlossen sind, benutzen Sie mdconfig -l.

  17.9.2. Ein datei- oder speicherbasiertes Laufwerk erzeugen

   FreeBSD unterstu:tzt auch speicherbasierte Laufwerke, bei denen der
   verwendete Speicher entweder einer Festplatte, oder einem Bereich im
   Arbeitsspeicher zugewiesen wird. Die erste Methode ist gemeinhin als
   dateibasiertes Dateisystem, die zweite als speicherbasiertes Dateisystem
   bekannt. Beide Typen ko:nnen mit mdconfig erzeugt werden.

   Um ein speicherbasiertes Dateisystem zu erstellen, geben Sie den Typ swap
   sowie die gewu:nschte Gro:sse des Laufwerks an. Dieses Beispiel erzeugt
   ein 5 MB grosses Laufwerk an der Gera:tenummer 1. Das Laufwerk wird mit
   dem UFS-Dateisystem formatiert, bevor es eingeha:ngt wird:

 # mdconfig -a -t swap -s 5m -u 1
 # newfs -U md1
 /dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048
         using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes.
         with soft updates
 super-block backups (for fsck -b #) at:
  160, 2752, 5344, 7936
 # mount /dev/md1 /mnt
 # df /mnt
 Filesystem 1K-blocks Used Avail Capacity  Mounted on
 /dev/md1        4718    4  4338     0%    /mnt

   Um ein dateibasiertes Dateisystem zu erstellen, muss zuna:chst ein Stu:ck
   Speicher auf der Festplatte reserviert werden. Dieses Beispiel erzeugt
   eine 5 KB grosse Datei namens newimage:

 # dd if=/dev/zero of=newimage bs=1k count=5k
 5120+0 records in
 5120+0 records out

   Als na:chstes muss diese Datei an ein speicherbasiertes Laufwerk gebunden,
   gelabelt und mit dem UFS-Dateisystem formatiert werden. Danach ko:nnen Sie
   das Laufwerk einha:ngen und die Gro:sse u:berpru:fen:

 # mdconfig -f newimage -u 0
 # bsdlabel -w md0 auto
 # newfs md0a
 /dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048
         using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes.
 super-block backups (for fsck -b #) at:
  160, 2720, 5280, 7840
 # mount /dev/md0a /mnt
 # df /mnt
 Filesystem 1K-blocks Used Avail Capacity  Mounted on
 /dev/md0a       4710    4  4330     0%    /mnt

   Es beno:tigt mehrere Befehle, um ein datei- oder speicherbasiertes
   Dateisystem mit mdconfig zu erstellen. FreeBSD entha:lt auch mdmfs, das
   ein speicherbasiertes Laufwerk automatisch konfigurieren, formatieren und
   einha:ngen kann. Nachdem beispielsweise newimage mit dd erstellt wurde,
   ha:tte auch der folgende Befehl benutzt werden ko:nnen, anstelle der oben
   verwendeten Kommandos bsdlabel, newfs und mount:

 # mdmfs -F newimage -s 5m md0 /mnt

   Um hingegen ein speicherbasiertes Laufwerk mit mdmfs zu erstellen, wird
   dieser Befehl benutzt:

 # mdmfs -s 5m md1 /mnt

   Wenn die Gera:tenummer nicht angegeben wird, wa:hlt mdmfs automatisch ein
   ungenutztes Gera:t aus. Weitere Einzelheiten u:ber mdmfs finden Sie in
   mdmfs(8).

17.10. Schnappschu:sse von Dateisystemen

   Beigetragen von Tom Rhodes.

   Zusammen mit Soft Updates bietet FreeBSD eine weitere Funktion:
   Schnappschu:sse von Dateisystemen.

   UFS-Schnappschu:sse sind Dateien, die ein Abbild eines Dateisystems
   enthalten und mu:ssen auf dem jeweiligen Dateisystem erstellt werden. Pro
   Dateisystem darf es maximal 20 Schnappschu:sse, die im Superblock vermerkt
   werden, geben. Schnappschu:sse bleiben erhalten, wenn das Dateisystem
   abgehangen, neu eingehangen oder das System neu gestartet wird. Wenn ein
   Schnappschuss nicht mehr beno:tigt wird, kann er mit rm(1) gelo:scht
   werden. Es ist egal, in welcher Reihenfolge Schnappschu:sse gelo:scht
   werden. Es kann allerdings vorkommen, dass nicht der gesamte Speicherplatz
   wieder freigegeben wird, da ein anderer Schnappschuss einen Teil der
   entfernten Blo:cke fu:r sich beanspruchen kann.

   Das unvera:nderliche Snapshot-Dateiflag wird nach der Erstellung des
   Snapshots von mksnap_ffs(8) gesetzt. Durch die Verwendung von unlink(1)
   ist es allerdings mo:glich, einen Schnappschuss zu lo:schen.

   Schnappschu:sse werden mit mount(8) erstellt. Das folgende Kommando legt
   einen Schnappschuss von /var in /var/snapshot/snap ab:

 # mount -u -o snapshot /var/snapshot/snap /var

   Alternativ kann der Schnappschuss auch mit mksnap_ffs(8) erstellt werden.

 # mksnap_ffs /var /var/snapshot/snap

   Um Schnappschu:sse auf einem Dateisystem, beispielsweise /var zu finden,
   kann man find(1) verwenden:

 # find /var -flags snapshot

   Nachdem ein Schnappschuss erstellt wurde, ko:nnen Sie ihn fu:r
   verschiedene Zwecke benutzen:

     * Sie ko:nnen den Schnappschuss fu:r die Datensicherung benutzen und ihn
       auf eine CD oder ein Band schreiben.

     * Die Integrita:t des Schnappschusses kann mit fsck(8) gepru:ft werden.
       Wenn das Dateisystem zum Zeitpunkt der Erstellung des Schnappschusses
       in Ordnung war, sollte fsck(8) immer erfolgreich durchlaufen.

     * Sie ko:nnen den Schnappschuss mit dump(8) sichern. Sie erhalten dann
       eine konsistente Sicherung des Dateisystems zu dem Zeitpunkt, der
       durch den Zeitstempel des Schnappschusses gegeben ist. Der Schalter -L
       von dump(8) erstellt fu:r die Sicherung einen Schnappschuss und
       entfernt diesen am Ende der Sicherung wieder.

     * Sie ko:nnen einen Schnappschuss in den Verzeichnisbaum einha:ngen und
       sich dann den Zustand des Dateisystems zu dem Zeitpunkt ansehen, an
       dem der Schnappschuss erstellt wurde. Der folgende Befehl ha:ngt den
       Schnappschuss /var/snapshot/snap ein:

 # mdconfig -a -t vnode -o readonly -f /var/snapshot/snap -u 4
 # mount -r /dev/md4 /mnt

   Der eingefrorene Stand des /var-Dateisystems ist nun unterhalb von /mnt
   verfu:gbar. Mit Ausnahme der fru:heren Schnappschu:sse, die als leere
   Dateien auftauchen, wird zu Beginn alles so aussehen, wie zum Zeitpunkt
   der Erstellung des Schnappschusses. Der Schnappschuss kann wie folgt
   abgeha:ngt werden:

 # umount /mnt
 # mdconfig -d -u 4

   Weitere Informationen u:ber Soft Updates und Schnappschu:sse von
   Dateisystemen sowie technische Artikel finden Sie auf der Webseite von
   Marshall Kirk McKusick.

17.11. Disk Quotas

   Disk Quotas erlauben dem Administrator, den Plattenplatz und/oder die
   Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf
   Dateisystemebene zu beschra:nken. Dadurch wird verhindert, dass ein
   Benutzer oder eine Gruppe von Benutzern den ganzen verfu:gbaren
   Plattenplatz belegt.

   Dieser Abschnitt beschreibt die Konfiguration von Disk Quotas fu:r
   UFS-Dateisysteme. Lesen Sie Abschnitt 19.4.8, "Dataset-, Benutzer- und
   Gruppenquotas", wenn Sie Disk Quotas auf einem ZFS-Dateisystem einrichten
   mo:chten.

  17.11.1. Disk Quotas aktivieren

   Pru:fen Sie zuna:chst, ob der FreeBSD-Kernel Disk Quotas unterstu:tzt:

 % sysctl kern.features.ufs_quota
 kern.features.ufs_quota: 1

   In diesem Beispiel zeigt die 1 an, das Quotas unterstu:tzt werden. Falls 0
   ausgegeben wird, fu:gen Sie folgende Zeile in die
   Kernelkonfigurationsdatei ein, und folgen Sie den Anweisungen in
   Kapitel 8, Konfiguration des FreeBSD-Kernels um den Kernel zu
   aktualisieren:

 options QUOTA

   Als na:chstes aktivieren Sie Disk Quotas in /etc/rc.conf:

 quota_enable="YES"

   Normalerweise wird beim Booten die Integrita:t der Quotas auf allen
   Dateisystemen mit quotacheck(8) u:berpru:ft. Dieses Programm stellt
   sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem
   u:bereinstimmt. Dies ist allerdings ein zeitraubender Prozess, der die
   Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine
   Variable in /etc/rc.config erlaubt es, diesen Schritt zu u:berspringen:

 check_quotas="NO"

   Zuletzt muss noch /etc/fstab bearbeitet werden, um die Plattenquotas auf
   Dateisystemebene zu aktivieren. Um Quotas pro Benutzer fu:r ein
   Dateisystem zu aktivieren, geben Sie fu:r dieses Dateisystem userquota im
   Feld Optionen von /etc/fstab an. Zum Beispiel:

 /dev/da1s2g   /home    ufs rw,userquota 1 2

   Um Quotas fu:r Gruppen einzurichten, verwenden Sie groupquota. Um Quotas
   fu:r Benutzer und Gruppen einzurichten, trennen Sie die Optionen durch
   Kommata:

 /dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

   Quota-Dateien werden standardma:ssig im Rootverzeichnis des Dateisystems
   unter quota.user und quota.group abgelegt. Weitere Informationen finden
   Sie in fstab(5). Es wird nicht empfohlen, Quota-Dateien an anderen Stellen
   zu speichern.

   Sobald die Konfiguration abgeschlossen ist, starten Sie das System neu.
   /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, um die
   Quota-Dateien fu:r alle in /etc/rc.conf definierten Quotas anzulegen.

   Normalerweise brauchen die Kommandos quotacheck(8), quotaon(8) oder
   quotaoff(8) nicht von Hand aufgerufen werden, obwohl man die
   entsprechenden Seiten im Manual lesen sollte, um sich mit ihnen vertraut
   zu machen.

  17.11.2. Setzen von Quota-Limits

   Stellen Sie sicher, dass Quotas auch tatsa:chlich aktiviert sind:

 # quota -v

   Fu:r jedes Dateisystem, auf dem Quotas aktiviert sind, sollte eine Zeile
   mit der Plattenauslastung und den aktuellen Quota-Limits zu sehen sein.

   Mit edquota ko:nnen nun Quota-Limits zugewiesen werden.

   Mehrere Mo:glichkeiten stehen zur Verfu:gung, um Limits fu:r den
   Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die
   Anzahl der Dateien, die angelegt werden du:rfen, festzulegen. Die Limits
   ko:nnen auf dem Plattenplatz (Block-Quotas), der Anzahl der Dateien
   (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes Limit
   wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits.

   Ein Hardlimit kann nicht u:berschritten werden. Hat der Benutzer einmal
   ein Hardlimit erreicht, so kann er auf dem betreffenden Dateisystem keinen
   weiteren Platz mehr beanspruchen. Hat ein Benutzer beispielsweise ein
   Hardlimit von 500 Kilobytes auf einem Dateisystem und benutzt davon 490
   Kilobyte, so kann er nur noch 10 weitere Kilobytes beanspruchen. Der
   Versuch, weitere 11 Kilobytes zu beanspruchen, wird fehlschlagen.

   Softlimits ko:nnen fu:r eine befristete Zeit u:berschritten werden. Diese
   Frist betra:gt in der Grundeinstellung eine Woche. Hat der Benutzer das
   Softlimit u:ber die Frist hinaus u:berschritten, so wird das Softlimit in
   ein Hardlimit umgewandelt und der Benutzer kann keinen weiteren Platz mehr
   beanspruchen. Wenn er einmal das Softlimit unterschreitet, wird die Frist
   wieder zuru:ckgesetzt.

   Im folgenden Beispiel wird das Quota des Benutzerkonto test bearbeitet.
   Wenn edquota aufgerufen wird, wird der in EDITOR definierte Editor
   aufgerufen, um die Quota-Limts zu konfigurieren. Der Standard-Editor ist
   vi.

 # edquota -u test

 Quotas for user test:

 /usr: kbytes in use: 65, limits (soft = 50, hard = 75)
         inodes in use: 7, limits (soft = 50, hard = 60)
 /usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
         inodes in use: 0, limits (soft = 50, hard = 60)

   Fu:r jedes Dateisystem, auf dem Quotas aktiv sind, sind zwei Zeilen zu
   sehen. Eine repra:sentiert die Block-Quotas und die andere die
   Inode-Quotas. Um ein Limit zu modifizieren, a:ndern Sie einfach den
   angezeigten Wert. Um beispielsweise das Blocklimit von /usr auf ein
   Softlimit von 500 und ein Hardlimit von 600 zu erho:hen, a:ndern Sie die
   Zeile wie folgt:

 /usr: kbytes in use: 65, limits (soft = 500, hard = 600)

   Die neuen Limits sind wirksam, sobald der Editor verlassen wird.

   Manchmal ist es wu:nschenswert, die Limits fu:r eine Reihe von Benutzern
   zu setzen. Dazu weisen Sie zuna:chst einem Benutzer das gewu:nschte
   Quota-Limit zu. Anschliessend benutzen Sie -p, um das Quota auf einen
   bestimmten Bereich von Benutzer-IDs (UID) zu duplizieren. Der folgende
   Befehl dupliziert die Quota-Limits auf die UIDs 10000 bis 19999:

 # edquota -p test 10000-19999

   Weitere Informationen finden Sie in edquota(8).

  17.11.3. U:berpru:fen von Quota-Limits und Plattennutzung

   Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen
   zu u:berpru:fen, kann quota(1) benutzt werden. Ein Benutzer kann nur die
   eigenen Quotas und die Quotas der Gruppe, der er angeho:rt untersuchen.
   Nur der Superuser darf sich alle Limits ansehen. Mit repquota(8) erhalten
   Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung fu:r
   alle Dateisysteme, auf denen Quotas aktiv sind.

   In der Ausgabe von quota(1) werden Dateisysteme, auf denen ein Benutzer
   keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas
   zugewiesen wurden. Benutzen Sie -v um solche Dateisysteme ebenfalls
   anzuzeigen. Das folgende Beispiel zeigt die Ausgabe von quota -v fu:r
   einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt:

 Disk quotas for user test (uid 1002):
      Filesystem  usage   quota   limit   grace   files   quota   limit   grace
            /usr      65*     50      75   5days       7      50      60
        /usr/var       0      50      75               0      50      60

   Im Dateisystem /usr liegt der Benutzer momentan 15 Kilobytes u:ber dem
   Softlimit von 50 Kilobytes und hat noch 5 Tage seiner Frist u:brig. Der
   Stern * zeigt an, dass der Benutzer sein Limit u:berschritten hat.

  17.11.4. Quotas u:ber NFS

   Quotas werden von dem Quota-Subsystem auf dem NFS-Server erzwungen. Der
   rpc.rquotad(8) Daemon stellt quota die Quota Informationen auf dem
   NFS-Client zur Verfu:gung, so dass Benutzer auf diesen Systemen ihre
   Quotas abfragen ko:nnen.

   Sie aktivieren rpc.rquotad auf dem NFS-Server, indem Sie das Zeichen # auf
   folgender Zeile in /etc/inetd.conf entfernen:

 rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

   Anschliessend starten Sie inetd neu:

 # service inetd restart

17.12. Partitionen verschlu:sseln

   Beigetragen von Lucky Green.

   FreeBSD bietet ausgezeichnete Mo:glichkeiten, Daten vor unberechtigten
   Zugriffen zu schu:tzen. Wenn das Betriebssystem la:uft, schu:tzen
   Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe
   Kapitel 15, Verbindliche Zugriffskontrolle) die Daten. Die
   Zugriffskontrollen des Betriebssystems schu:tzen allerdings nicht vor
   einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine
   Festplatte in ein anderes System einbauen und dort die Daten analysieren.

   Die fu:r FreeBSD verfu:gbaren kryptografischen Subsysteme, GEOM Based Disk
   Encryption (gbde) und geli sind in der Lage, Daten auf Dateisystemen auch
   vor hoch motivierten Angreifern zu schu:tzen, die u:ber erhebliche Mittel
   verfu:gen. Dieser Schutz ist unabha:ngig von der Art und Weise, durch die
   ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner erlangt
   hat. Im Gegensatz zu anderen Verschlu:sselungsmethoden, bei denen einzelne
   Dateien verschlu:sselt werden, verschlu:sseln gbde und geli transparent
   ganze Dateisysteme. Auf der Festplatte werden dabei keine Daten im
   Klartext gespeichert.

   Dieses Kapitel zeigt, wie ein verschlu:sseltes Dateisystem unter FreeBSD
   erstellt wird. Zuna:chst wird der Ablauf fu:r gbde beschrieben und
   anschliessend das gleiche Beispiel fu:r geli.

  17.12.1. Plattenverschlu:sselung mit gbde

   Das Ziel von gbde(4) ist es, einen Angreifer vor eine grosse
   Herausforderung zu stellen, um an die Daten einer Festplatte zu gelangen.
   Falls jedoch der Rechner kompromittiert wurde, wa:hrend er im Betrieb war
   und das Speichergera:t aktiv verbunden war, oder wenn der Angreifer eine
   gu:ltige Passphrase kennt, bietet dieses System keinen Schutz fu:r die
   Daten der Festplatte. Daher ist es wichtig, fu:r die physische Sicherheit
   zu sorgen, wa:hrend das System im Betrieb ist. Ausserdem muss die
   Passphrase fu:r den Verschlu:sselungsmechanismus geschu:tzt werden.

   gbde(4) besitzt einige Funktionen um die Daten, die in einem Sektor
   gespeichert sind, zu schu:tzen. Es benutzt 128-Bit AES im CBC-Modus, um
   die Daten eines Sektors zu verschlu:sseln. Jeder Sektor einer Festplatte
   wird mit einem anderen AES-Schlu:ssel verschlu:sselt. Weitere
   Informationen zum kryptographischen Design und wie die Schlu:ssel fu:r
   einen Sektor aus der gegebenen Passphrase ermittelt werden, finden Sie in
   gbde(4).

   FreeBSD entha:lt ein Kernelmodul fu:r gbde, das wie folgt geladen werden
   kann:

 # kldload geom_bde

   Wenn Sie einen angepassten Kernel verwenden, stellen Sie sicher, dass
   folgende Zeile in der Kernelkonfigurationsdatei enthalten ist:

   options GEOM_BDE

   Das folgende Beispiel beschreibt, wie eine Partition auf einer neuen
   Festplatte verschlu:sselt wird. Die Partition wird in /private
   eingehangen.

   Prozedur 17.3. Eine Partition mit gbde verschlu:sseln
    1. Installieren der Festplatte

       Installieren Sie die Festplatte wie in Abschnitt 17.2, "Hinzufu:gen
       von Laufwerken" beschrieben. Im Beispiel wird die Partition
       /dev/ad4s1c verwendet. Die Gera:tedateien /dev/ad0s1* sind
       Standard-Partitionen des FreeBSD-Systems.

 # ls /dev/ad*
 /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
 /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
 /dev/ad0s1a     /dev/ad0s1d     /dev/ad4

    2. Verzeichnis fu:r gbde-Lock-Dateien anlegen

 # mkdir /etc/gbde

       Die Lock-Dateien sind fu:r den Zugriff von gbde auf verschlu:sselte
       Partitionen notwendig. Ohne die Lock-Dateien ko:nnen die Daten nur mit
       erheblichem manuellen Aufwand wieder entschlu:sselt werden (dies wird
       auch von der Software nicht unterstu:tzt). Jede verschlu:sselte
       Partition beno:tigt eine gesonderte Lock-Datei.

    3. Vorbereiten der gbde-Partition

       Eine von gbde benutzte Partition muss einmalig initialisiert werden,
       bevor sie benutzt werden kann. Das Programm o:ffnet eine Vorlage im
       Standard-Editor, um verschiedene Optionen zu konfigurieren. Setzen Sie
       sector_size auf 2048, wenn Sie UFS benutzen:

 # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
 # $FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $
 #
 # Sector size is the smallest unit of data which can be read or written.
 # Making it too small decreases performance and decreases available space.
 # Making it too large may prevent filesystems from working.  512 is the
 # minimum and always safe.  For UFS, use the fragment size
 #
 sector_size     =       2048
 [...]

       Sobald die A:nderungen gespeichert werden, wird der Benutzer zweimal
       aufgefordert, die zum Schutz der Daten verwendete Passphrase
       einzugeben. Die Passphrase muss beide Mal gleich eingegeben werden.
       Die Sicherheit der Daten ha:ngt allein von der Qualita:t der
       gewa:hlten Passphrase ab. Die Auswahl einer sicheren und leicht zu
       merkenden Passphrase wird auf der Webseite
       http://world.std.com/~reinhold/diceware.html beschrieben.

       Bei der Initialisierung wird eine Lock-Datei fu:r die gbde-Partition
       erstellt. In diesem Beispiel /etc/gbde/ad4s1c.lock. Lock-Dateien
       mu:ssen die Dateiendung ".lock" aufweisen, damit sie von
       /etc/rc.d/gbde, dem Startskript von gbde, erkannt werden.

  Achtung:

       Lock-Dateien mu:ssen immer zusammen mit den verschlu:sselten
       Dateisystemen gesichert werden. Ohne die Lock-Datei ko:nnen Sie
       allerdings nicht auf die verschlu:sselten Daten zugreifen.

    4. Einbinden der verschlu:sselten Partition in den Kernel

 # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock

       Dieses Kommando fragt die Passphrase ab, die bei der Initialisierung
       der verschlu:sselten Partition eingegeben wurde. Das neue
       verschlu:sselte Gera:t erscheint danach in /dev als
       /dev/device_name.bde:

 # ls /dev/ad*
 /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
 /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
 /dev/ad0s1a     /dev/ad0s1d     /dev/ad4        /dev/ad4s1c.bde

    5. Dateisystem auf dem verschlu:sselten Gera:t anlegen

       Nachdem die verschlu:sselte Partition im Kernel eingebunden ist, kann
       ein Dateisystem erstellt werden. Dieses Beispiel erstellt ein
       UFS-Dateisystem mit aktivierten Soft Updates. Achten Sie darauf, die
       Partition mit der Erweiterung *.bde zu benutzen:

 # newfs -U -O2 /dev/ad4s1c.bde

    6. Einha:ngen der verschlu:sselten Partition

       Legen Sie einen Mountpunkt fu:r das verschlu:sselte Dateisystem an.
       Ha:ngen Sie anschliessend das Dateisystem ein:

 # mkdir /private
 # mount /dev/ad4s1c.bde /private

    7. U:berpru:fen des verschlu:sselten Dateisystems

       Das verschlu:sselte Dateisystem sollte jetzt erkannt und benutzt
       werden ko:nnen:

 % df -H
 Filesystem        Size   Used  Avail Capacity  Mounted on
 /dev/ad0s1a      1037M    72M   883M     8%    /
 /devfs            1.0K   1.0K     0B   100%    /dev
 /dev/ad0s1f       8.1G    55K   7.5G     0%    /home
 /dev/ad0s1e      1037M   1.1M   953M     0%    /tmp
 /dev/ad0s1d       6.1G   1.9G   3.7G    35%    /usr
 /dev/ad4s1c.bde   150G   4.1K   138G     0%    /private

   Nach jedem Neustart mu:ssen verschlu:sselte Dateisysteme dem Kernel wieder
   bekannt gemacht werden, auf Fehler u:berpru:ft werden und eingehangen
   werden. Fu:r die dazu no:tigen Schritte fu:gen Sie folgende Zeilen in
   /etc/rc.conf hinzu:

 gbde_autoattach_all="YES"
 gbde_devices="ad4s1c"
 gbde_lockdir="/etc/gbde"

   Durch diese Argumente muss beim Systemstart auf der Konsole die Passphrase
   eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die
   verschlu:sselte Partition automatisch in den Verzeichnisbaum eingeha:ngt.
   Weitere Bootoptionen von gbde finden Sie in rc.conf(5).

  Anmerkung:

   sysinstall ist nicht kompatibel mit gbde-verschlu:sselten Gera:ten. Bevor
   sysinstall gestartet wird, mu:ssen alle *.bde Gera:te vom Kernel getrennt
   werden, da sonst der Kernel bei der ersten Suche nach Gera:ten abstu:rzt.
   Um das verschlu:sselte Gera:t aus dem Beispiel zu trennen, benutzen Sie
   das folgende Kommando:

 # gbde detach /dev/ad4s1c

  17.12.2. Plattenverschlu:sselung mit geli

   Beigetragen von Daniel Gerzo.

   Mit geli steht eine alternative kryptografische GEOM-Klasse zur
   Verfu:gung. Dieses Werkzeug unterstu:tzt unterschiedliche Fa:higkeiten und
   verfolgt einen anderen Ansatz fu:r die Verschlu:sselung. geli bietet die
   folgenden Funktionen:

     * Die Nutzung des crypto(9)-Frameworks. Wenn das System u:ber
       kryptografische Hardware verfu:gt, wird diese von geli automatisch
       verwendet.

     * Die Unterstu:tzung verschiedener kryptografischer Algorithmen, wie
       AES, Blowfish, und 3DES.

     * Die Mo:glichkeit, die root-Partition zu verschlu:sseln. Um auf die
       verschlu:sselte root-Partition zugreifen zu ko:nnen, muss beim
       Systemstart die Passphrase eingegeben werden.

     * Erlaubt den Einsatz von zwei voneinander unabha:ngigen Schlu:sseln.

     * Es ist durch einfache Sektor-zu-Sektor-Verschlu:sselung sehr schnell.

     * Die Mo:glichkeit, Master-Keys zu sichern und wiederherzustellen. Wenn
       ein Benutzer seinen Schlu:ssel zersto:rt, kann er u:ber seinen zuvor
       gesicherten Schlu:ssel wieder auf seine Daten zugreifen.

     * geli erlaubt es, Platten mit einem zufa:lligen Einmal-Schlu:ssel
       einzusetzen, was fu:r Swap-Partitionen und tempora:re Dateisysteme
       interessant ist.

   Weitere Funktionen und Anwendungsbeispiele finden Sie in geli(8).

   Das folgende Beispiel beschreibt, wie eine Schlu:sseldatei erzeugt wird,
   die als Teil des Master-Keys fu:r den Verschlu:sselungs-Provider verwendet
   wird, der unter /private in den Verzeichnisbaum eingeha:ngt wird. Die
   Schlu:sseldatei liefert zufa:llige Daten, die fu:r die Verschlu:sselung
   des Master-Keys benutzt werden. Zusa:tzlich wird der Master-Key durch eine
   Passphrase geschu:tzt. Die Sektorgro:sse des Providers betra:gt 4 KB. Das
   Beispiel beschreibt, wie Sie einen geli-Provider aktivieren, ein vom ihm
   verwaltetes Dateisystem erzeugen, es mounten, mit ihm arbeiten und wie Sie
   es schliesslich wieder unmounten und den Provider deaktivieren.

   Prozedur 17.4. Eine Partition mit geli verschlu:sseln
    1. Laden der geli-Unterstu:tzung

       Die Unterstu:tzung fu:r geli wird u:ber ein ladbares Kernelmodul zur
       Verfu:gung gestellt. Damit das Modul automatisch beim Booten geladen
       wird, fu:gen Sie folgende Zeile in /boot/loader.conf ein:

 geom_eli_load="YES"

       Um das Modul direkt zu laden:

 # kldload geom_eli

       Stellen Sie bei einer angepassten Kernelkonfigurationsdatei sicher,
       dass diese Zeilen enthalten sind:

 options GEOM_ELI
 device crypto

    2. Erzeugen des Master-Keys

       Die folgenden Befehle erzeugen einen Master-Key (/root/da2.key), der
       durch eine Passphrase geschu:tzt ist. Die Datenquelle fu:r die
       Schlu:sseldatei ist /dev/random. Um eine bessere Leistung zu erzielen
       betra:gt die Sektorgro:sse des Providers (/dev/da2.eli) 4 KB:

 # dd if=/dev/random of=/root/da2.key bs=64 count=1
 # geli init -s 4096 -K /root/da2.key /dev/da2
 Enter new passphrase:
 Reenter new passphrase:

       Es ist nicht zwingend no:tig, sowohl eine Passphrase als auch eine
       Schlu:sseldatei zu verwenden. Die einzelnen Methoden ko:nnen auch
       unabha:ngig voneinander eingesetzt werden.

       Wird fu:r die Schlu:sseldatei "-" angegeben, wird dafu:r die
       Standardeingabe verwendet. Das folgende Kommando erzeugt
       beispielsweise drei Schlu:sseldateien:

 # cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2

    3. Aktivieren des Providers mit dem erzeugten Schlu:ssel

       Um den Provider zu aktivieren, geben Sie die Schlu:sseldatei, den
       Namen des Laufwerks und die Passphrase an:

 # geli attach -k /root/da2.key /dev/da2
 Enter passphrase:

       Dadurch wird ein neues Gera:t mit der Erweiterung .eli angelegt:

 # ls /dev/da2*
 /dev/da2  /dev/da2.eli

    4. Das neue Dateisystem erzeugen

       Als na:chstes muss das Gera:t mit dem UFS-Dateisystem formatiert und
       an einen vorhandenen Mountpunkt eingeha:ngt werden:

 # dd if=/dev/random of=/dev/da2.eli bs=1m
 # newfs /dev/da2.eli
 # mount /dev/da2.eli /private

       Das verschlu:sselte Dateisystem sollte jetzt erkannt und benutzt
       werden ko:nnen:

 # df -H
 Filesystem     Size   Used  Avail Capacity  Mounted on
 /dev/ad0s1a    248M    89M   139M    38%    /
 /devfs         1.0K   1.0K     0B   100%    /dev
 /dev/ad0s1f    7.7G   2.3G   4.9G    32%    /usr
 /dev/ad0s1d    989M   1.5M   909M     0%    /tmp
 /dev/ad0s1e    3.9G   1.3G   2.3G    35%    /var
 /dev/da2.eli   150G   4.1K   138G     0%    /private

   Wenn Sie nicht mehr mit dem verschlu:sselten Dateisystem arbeiten und die
   unter /private eingeha:ngte Partition daher nicht mehr beno:tigen, sollten
   Sie diese unmounten und den geli-Verschlu:sselungs-Provider wieder
   deaktivieren:

 # umount /private
 # geli detach da2.eli

   FreeBSD verfu:gt u:ber ein rc.d-Skript, das dass Einha:ngen von
   verschlu:sselten Gera:ten beim Booten deutlich vereinfacht. Fu:r dieses
   Beispiel, fu:gen Sie folgende Zeilen in /etc/rc.conf hinzu:

 geli_devices="da2"
 geli_da2_flags="-p -k /root/da2.key"

   Dies konfiguriert /dev/da2 als geli-Provider mit dem Master-Key
   /root/da2.key. Das System wird den Provider automatisch deaktivieren,
   bevor es heruntergefahren wird. Wa:hrend des Startvorgangs fordert das
   Skript die Passphrase an, bevor der Provider aktiviert wird. Vor und nach
   der Eingabeaufforderung fu:r die Passphrase werden noch weitere
   Kernelmeldungen angezeigt. Achten Sie sorgfa:ltig auf die
   Eingabeaufforderung zwischen den anderen Meldungen, falls es zu Problemen
   beim Startvorgang kommt. Sobald die richtige Passphrase eingegeben wurde,
   wird der Provider aktiviert. Anschliessend werden die Dateisysteme gema:ss
   /etc/fstab eingeha:ngt. Lesen Sie Abschnitt 3.7, "Anha:ngen und Abha:ngen
   von Dateisystemen" wenn Sie wissen mo:chten, wie Sie ein Dateisystem
   konfigurieren, sodass es beim booten automatisch gestartet wird.

17.13. Den Auslagerungsspeicher verschlu:sseln

   Geschrieben von Christian Brueffer.

   Wie die Verschlu:sselung von Partitionen, wird auch der
   Auslagerungsspeicher verschlu:sselt, um sensible Informationen zu
   schu:tzen. Stellen Sie sich eine Anwendung vor, die mit Passwo:rtern
   umgeht. Solange sich diese Passwo:rter im Arbeitsspeicher befinden, werden
   sie nicht auf die Festplatte geschrieben und nach einem Neustart
   gelo:scht. Falls FreeBSD jedoch damit beginnt Speicher auszulagern, um
   Platz fu:r andere Anwendungen zu schaffen, ko:nnen die Passwo:rter
   unverschlu:sselt auf die Festplatte geschrieben werden. Die
   Verschlu:sselung des Auslagerungsspeichers kann in solchen Situationen
   Abhilfe schaffen.

   Dieser Abschnitt zeigt die Konfiguration eines verschlu:sselten
   Auslagerungsspeichers mittels gbde(8) oder geli(8). In den Beispielen
   repra:sentiert /dev/ada0s1b die Swap-Partition.

  17.13.1. Konfiguration eines verschlu:sselten Auslagerungsspeichers

   Swap-Partitionen werden standardma:ssig nicht verschlu:sselt. Sie sollten
   daher alle sensiblen Daten im Auslagerungsspeicher lo:schen, bevor Sie
   fortfahren. Fu:hren Sie folgenden Befehl aus, um die Swap-Partition mit
   Zufallsdaten zu u:berschreiben:

 # dd if=/dev/random of=/dev/ada0s1b bs=1m

   Um den Auslagerungsspeicher mit gbde(8) zu verschlu:sseln, fu:gen Sie in
   /etc/fstab das Suffix .bde an den Gera:tenamen der Swap-Partition hinzu:

 # Device                Mountpoint      FStype  Options         Dump    Pass#
 /dev/ada0s1b.bde         none            swap    sw              0       0

   Wenn Sie geli(8) benutzen, verwenden Sie stattdessen das Suffix .eli, um
   den Auslagerungsspeicher zu verschlu:sseln:

 # Device                Mountpoint      FStype  Options         Dump    Pass#
 /dev/ada0s1b.eli         none            swap    sw              0       0

   In der Voreinstellung verschlu:sselt geli(8) mit dem AES-Algorithmus und
   einer Schlu:ssella:nge von 128 Bit. Diese Voreinstellungen sind in der
   Regel ausreichend, ko:nnen jedoch im Options-Feld in /etc/fstab angepasst
   werden. Mo:gliche Optionen sind:

   aalgo

           Der Algorithmus fu:r die Pru:fung der Datenintegrita:t. Dieser
           wird benutzt um sicherzustellen, dass die verschlu:sselten Daten
           nicht manipuliert wurden. Eine Liste der unterstu:tzten
           Algorithmen finden Sie in geli(8).

   ealgo

           Der Verschlu:sselungsalgorithmus, der verwendet wird um die Daten
           zu schu:tzen. Eine Liste der unterstu:tzten Algorithmen finden Sie
           in geli(8).

   keylen

           Die La:nge des Schlu:ssels fu:r den Verschlu:sselungsalgorithmus.
           In geli(8) ko:nnen Sie lesen, welche Schlu:ssella:ngen von welchem
           Algorithmus unterstu:tzt werden.

   sectorsize

           Die Gro:sse, in der die Datenblo:cke aufgeteilt werden, bevor sie
           verschlu:sselt werden. Gro:ssere Blo:cke erho:hen die Leistung auf
           Kosten des Speicherverbrauchs. Die empfohlene Gro:sse betra:gt
           4096 Byte.

   Dieses Beispiel konfiguriert eine verschlu:sselte Swap-Partition mit dem
   Blowfish-Algorithmus, einer Schlu:ssella:nge von 128 Bit und einer
   Sektorgro:sse von 4 KB:

 # Device                Mountpoint      FStype  Options                         Dump    Pass#
 /dev/ada0s1b.eli        none            swap    sw,ealgo=blowfish,keylen=128,sectorsize=4096    0       0

  17.13.2. U:berpru:fung des verschlu:sselten Auslagerungsspeichers

   Nachdem das System neu gestartet wurde, kann die korrekte Funktion des
   verschlu:sselten Auslagerungsspeichers mit swapinfo gepru:ft werden.

   Wenn Sie gbde(8) einsetzen, erhalten Sie eine Meldung a:hnlich der
   folgenden:

 % swapinfo
 Device          1K-blocks     Used    Avail Capacity
 /dev/ada0s1b.bde    542720        0   542720     0%

   Wenn Sie geli(8) einsetzen, erhalten Sie hingegen eine Ausgabe a:hnlich
   der folgenden:

 % swapinfo
 Device          1K-blocks     Used    Avail Capacity
 /dev/ada0s1b.eli    542720        0   542720     0%

17.14. Highly Available Storage (HAST)

   Beigetragen von Daniel Gerzo.
   Mit Beitra:gen von Freddie Cash, Pawel Jakub Dawidek, Michael W. Lucas und
   Viktor Petersson.
   U:bersetzt von Benedict Reuschling.

   Hochverfu:gbarkeit ist eine der Hauptanforderungen von ernsthaften
   Gescha:ftsanwendungen und hochverfu:gbarer Speicher ist eine
   Schlu:sselkomponente in solchen Umgebungen. Highly Available STorage
   (HAST) ist ein Framework in FreeBSD, welches die transparente Speicherung
   der gleichen Daten u:ber mehrere physikalisch getrennte Maschinen
   ermo:glicht, die u:ber ein TCP/IP-Netzwerk verbunden sind. HAST kann als
   ein netzbasiertes RAID1 (Spiegel) verstanden werden und ist dem
   DRBD(R)-Speichersystem der GNU/Linux(R)-Plattform a:hnlich. In Kombination
   mit anderen Hochverfu:gbarkeitseigenschaften von FreeBSD wie CARP,
   ermo:glicht es HAST, hochverfu:gbare Speichercluster zu bauen, die in der
   Lage sind, Hardwareausfa:llen zu widerstehen.

   Die Hauptmerkmale von HAST sind:

     * Es kann zur Maskierung von I/O-Fehlern auf lokalen Festplatten
       eingesetzt werden.

     * Dateisystem-unabha:ngig, was es erlaubt, jedes von FreeBSD
       unterstu:tzte Dateisystem zu verwenden.

     * Effiziente und schnelle Resynchronisation: es werden nur die Blo:cke
       synchronisiert, die wa:hrend der Ausfallzeit eines Knotens gea:ndert
       wurden.

     * Es kann in einer bereits bestehenden Umgebung eingesetzt werden, um
       zusa:tzliche Redundanz zu erreichen.

     * Zusammen mit CARP, Heartbeat, oder anderen Werkzeugen, ist es
       mo:glich, ein robustes und dauerhaftes Speichersystem zu bauen.

   Nachdem Sie diesen Abschnitt gelesen haben, werden Sie folgendes wissen:

     * Was HAST ist, wie es funktioniert und welche Eigenschaften es besitzt.

     * Wie man HAST unter FreeBSD aufsetzt und verwendet.

     * Wie man CARP und devd(8) kombiniert, um ein robustes Speichersystem zu
       bauen.

   Bevor Sie diesen Abschnitt lesen, sollten Sie:

     * die Grundlagen von UNIX(R) und FreeBSD verstanden haben (Kapitel 3,
       Grundlagen des UNIX Betriebssystems).

     * wissen, wie man Netzwerkschnittstellen und andere Kernsysteme von
       FreeBSD konfiguriert (Kapitel 11, Konfiguration und Tuning).

     * ein gutes Versta:ndnis der FreeBSD-Netzwerkfunktionalita:t besitzen
       (Teil IV, "Netzwerke").

   Das HAST-Projekt wurde von der FreeBSD Foundation mit Unterstu:tzung der
   OMCnet Internet Service GmbH und TransIP BV gesponsert.

  17.14.1. HAST im Einsatz

   HAST bietet eine synchrone Replikation auf Blockebene zwischen zwei
   Maschinen: einem primary, auch bekannt als master Knoten, sowie dem
   secondary, oder slave Knoten. Diese beiden Maschinen zusammen werden als
   Cluster bezeichnet.

   Da HAST in einer prima:r-sekunda:r-Konfiguration funktioniert, ist immer
   nur ein Knoten des Clusters zu jeder Zeit aktiv. Der prima:re Knoten, auch
   active genannt, ist derjenige, der alle I/O-Anfragen verarbeitet, die an
   die HAST-Schnittstelle gesendet werden. Der sekunda:re Knoten wird
   automatisch vom prima:ren Knoten aus synchronisiert.

   Die physischen Komponenten des HAST-Systems sind die lokale Platte am
   Prima:rknoten und die entfernte Platte am Sekunda:rknoten.

   HAST arbeitet synchron auf Blockebene, was es fu:r Dateisysteme und
   Anwendungen transparent macht. HAST stellt gewo:hnliche GEOM-Provider in
   /dev/hast/ fu:r die Verwendung durch andere Werkzeuge oder Anwendungen zur
   Verfu:gung. Es gibt keinen Unterschied zwischen dem Einsatz von HAST
   bereitgestellten Gera:ten und herko:mmlichen Platten oder Partitionen.

   Jede Schreib-, Lo:sch- oder Entleerungsoperation wird an die lokale und
   u:ber TCP/IP zu der entfernt liegenden Platte gesendet. Jede Leseoperation
   wird von der lokalen Platte durchgefu:hrt, es sei denn, die lokale Platte
   ist nicht aktuell oder es tritt ein I/O-Fehler auf. In solchen Fa:llen
   wird die Leseoperation an den Sekunda:rknoten geschickt.

   HAST versucht, eine schnelle Fehlerbereinigung zu gewa:hrleisten. Aus
   diesem Grund ist es wichtig, die Synchronisationszeit nach dem Ausfall
   eines Knotens zu reduzieren. Um eine schnelle Synchronisation zu
   ermo:glichen, verwaltet HAST eine Bitmap von unsauberen Bereichen auf der
   Platte und synchronisiert nur diese wa:hrend einer regula:ren
   Synchronisation (mit Ausnahme der initialen Synchronisation).

   Es gibt viele Wege, diese Synchronisation zu behandeln. HAST implementiert
   mehrere Replikationsarten, um unterschiedliche Methoden der
   Synchronisation zu realisieren:

     * memsync: Dieser Modus meldet Schreiboperationen als vollsta:ndig, wenn
       die lokale Schreiboperation beendet ist und der entfernt liegende
       Knoten die Ankunft der Daten besta:tigt hat, jedoch bevor die Daten
       wirklich gespeichert wurden. Die Daten werden auf dem entfernt
       liegenden Knoten direkt nach dem Senden der Besta:tigung gespeichert.
       Dieser Modus ist dafu:r gedacht, Latenzen zu verringern und
       zusa:tzlich eine gute Verla:sslichkeit zu bieten. In der
       Voreinstellung wird dieser Modus benutzt.

     * fullsync: Dieser Modus meldet Schreiboperationen als vollsta:ndig,
       wenn sowohl die lokale, als auch die entfernte Schreiboperation
       abgeschlossen wurde. Dies ist der sicherste und zugleich der
       langsamste Replikationsmodus.

     * async: Dieser Modus meldet Schreiboperationen als vollsta:ndig, wenn
       lokale Schreibvorga:nge abgeschlossen wurden. Dies ist der schnellste
       und gefa:hrlichste Replikationsmodus. Er sollte nur verwendet werden,
       wenn die Latenz zu einem entfernten Knoten bei einer Replikation zu
       hoch ist fu:r andere Modi.

  17.14.2. HAST-Konfiguration

   Das HAST-Framework besteht aus mehreren Komponenten:

     * Dem hastd(8)-Daemon, welcher fu:r Datensynchronisation verantwortlich
       ist. Wenn dieser Daemon gestartet wird, wird automatisch geom_gate.ko
       geladen.

     * Dem hastctl(8) Management-Werkzeug.

     * Der Konfigurationsdatei hast.conf(5). Diese Datei muss vorhanden sein,
       bevor hastd gestartet wird.

   Alternativ la:sst sich die GEOM_GATE-Unterstu:tzung in den Kernel statisch
   einbauen, indem folgende Zeile zur Kernelkonfigurationsdatei hinzugefu:gt
   wird. Anschliessend muss der Kernel, wie in Kapitel 8, Konfiguration des
   FreeBSD-Kernels beschrieben, neu gebaut werden:

 options GEOM_GATE

   Das folgende Beispiel beschreibt, wie man zwei Knoten als master-slave /
   primary-secondary mittels HAST konfiguriert, um Daten zwischen diesen
   beiden auszutauschen. Die Knoten werden als hasta mit der IP-Adresse
   172.16.0.1 und hastb mit der IP-Adresse 172.16.0.2 bezeichnet. Beide
   Knoten besitzen eine dedizierte Festplatte /dev/ad6 mit der gleichen
   Gro:sse fu:r den HAST-Betrieb. Der HAST-Pool, manchmal auch Ressource
   genannt, oder der GEOM-Provider in /dev/hast/ wird als test bezeichnet.

   Die Konfiguration von HAST wird in /etc/hast.conf vorgenommen. Diese Datei
   sollte auf beiden Knoten gleich sein. Die einfachste Konfiguration ist
   folgende:

 resource test {
         on hasta {
                 local /dev/ad6
                 remote 172.16.0.2
         }
         on hastb {
                 local /dev/ad6
                 remote 172.16.0.1
         }
 }

   Fortgeschrittene Konfigurationsmo:glichkeiten finden Sie in hast.conf(5).

  Tipp:

   Es ist ebenfalls mo:glich, den Hostnamen in den remote-Anweisungen zu
   verwenden, falls die Rechner aufgelo:st werden ko:nnen und in /etc/hosts,
   oder im lokalen DNS definiert sind.

   Sobald die Konfiguration auf beiden Rechnern vorhanden ist, kann ein
   HAST-Pool erstellt werden. Lassen Sie diese Kommandos auf beiden Knoten
   ablaufen, um die initialen Metadaten auf die lokale Platte zu schreiben
   und starten Sie anschliessend hastd(8):

 # hastctl create test
 # service hastd onestart

  Anmerkung:

   Es ist nicht mo:glich, GEOM-Provider mit einem bereits bestehenden
   Dateisystem zu verwenden, um beispielsweise einen bestehenden Speicher in
   einen von HAST verwalteten Pool zu konvertieren. Dieses Verfahren muss
   einige Metadaten auf den Provider schreiben und dafu:r wu:rde nicht genug
   freier Platz zur Verfu:gung stehen.

   Die Rolle eines HAST Knotens, primary oder secondary, wird vom einem
   Administrator, oder einer Software wie Heartbeat, mittels hastctl(8)
   festgelegt. Auf dem prima:ren Knoten hasta geben Sie diesen Befehl ein:

 # hastctl role primary test

   Geben Sie folgendes Kommando auf dem sekunda:ren Knoten hastb ein:

 # hastctl role secondary test

   U:berpru:fen Sie das Ergebnis mit hastctl auf beiden Knoten:

 # hastctl status test

   U:berpru:fen Sie die status-Zeile. Wird hier degraded angezeigt, dann ist
   etwas mit der Konfigurationsdatei nicht in Ordnung. Auf jedem Konten
   sollte complete angezeigt werden, was bedeutet, dass die Synchronisation
   zwischen den beiden Knoten gestartet wurde. Die Synchronisierung ist
   abgeschlossen, wenn hastctl status meldet, dass die dirty-Bereiche 0 Bytes
   betragen.

   Der na:chste Schritt ist, ein Dateisystem auf dem GEOM-Provider anzulegen
   und dieses ins System einzuha:ngen. Dies muss auf dem primary-Knoten
   durchgefu:hrt werden. Die Erstellung des Dateisystems kann ein paar
   Minuten dauern, abha:ngig von der Gro:sse der Festplatte. Dieses Beispiel
   erstellt ein UFS-Dateisystem auf /dev/hast/test:

 # newfs -U /dev/hast/test
 # mkdir /hast/test
 # mount /dev/hast/test /hast/test

   Sobald das HAST-Framework richtig konfiguriert wurde, besteht der letzte
   Schritt nun darin, sicherzustellen, dass HAST wa:hrend des Systemstarts
   automatisch gestartet wird. Fu:gen Sie diese Zeile in /etc/rc.conf hinzu:

 hastd_enable="YES"

    17.14.2.1. Failover-Konfiguration

   Das Ziel dieses Beispiels ist, ein robustes Speichersystem zu bauen,
   welches Fehlern auf einem beliebigen Knoten widerstehen kann. Wenn der
   primary-Knoten ausfa:llt, ist der secondary-Knoten da, um nahtlos
   einzuspringen, das Dateisystem zu pru:fen, einzuha:ngen und mit der Arbeit
   fortzufahren, ohne dass auch nur ein einzelnes Bit an Daten verloren geht.

   Um diese Aufgabe zu bewerkstelligen, wird das Common Address Redundancy
   Protocol (CARP) benutzt, welches ein automatisches Failover auf der
   IP-Schicht ermo:glicht. CARP erlaubt es mehreren Rechnern im gleichen
   Netzsegment, die gleiche IP-Adresse zu verwenden. Setzen Sie CARP auf
   beiden Knoten des Clusters anhand der Dokumentation in Abschnitt 30.10,
   "Common Address Redundancy Protocol (CARP)" auf. In diesem Beispiel hat
   jeder Knoten seine eigene Management IP-Adresse und die geteilte
   IP-Adresse 172.16.0.254. Der prima:re HAST-Knoten des Clusters muss der
   CARP-Masterknoten sein.

   Der HAST-Pool, welcher im vorherigen Abschnitt erstellt wurde, ist nun
   bereit fu:r den Export u:ber das Netzwerk auf den anderen Rechner. Dies
   kann durch den Export u:ber NFS oder Samba erreicht werden, indem die
   geteilte IP-Adresse 172.16.0.254 verwendet wird. Das einzige ungelo:ste
   Problem ist der automatische Failover, sollte der prima:re Knoten einmal
   ausfallen.

   Falls die CARP-Schnittstelle aktiviert oder deaktiviert wird, generiert
   das FreeBSD-Betriebssystem ein devd(8)-Ereignis, was es ermo:glicht,
   Zustandsa:nderungen auf den CARP-Schnittstellen zu u:berwachen. Eine
   Zustandsa:nderung auf der CARP-Schnittstelle ist ein Indiz dafu:r, dass
   einer der Knoten gerade ausgefallen oder wieder verfu:gbar ist. Diese
   Zustandsa:nderungen machen es mo:glich, ein Skript zu starten, welches
   automatisch den HAST-Failover durchfu:hrt.

   Um Zustandsa:nderungen auf der CARP-Schnittstelle abzufangen, mu:ssen
   diese Zeilen in /etc/devd.conf auf jedem Knoten hinzugefu:gt werden:

 notify 30 {
         match "system" "IFNET";
         match "subsystem" "carp0";
         match "type" "LINK_UP";
         action "/usr/local/sbin/carp-hast-switch master";
 };

 notify 30 {
         match "system" "IFNET";
         match "subsystem" "carp0";
         match "type" "LINK_DOWN";
         action "/usr/local/sbin/carp-hast-switch slave";
 };

  Anmerkung:

   Wenn auf dem System FreeBSD 10 oder ho:her eingesetzt wird, ersetzen Sie
   carp0 durch den Namen der konfigurierten Schnittstelle fu:r CARP.

   Starten Sie devd(8) auf beiden Knoten neu, um die neue Konfiguration
   wirksam werden zu lassen:

 # service devd restart

   Wenn die Schnittstelle aktiviert oder deaktiviert wird, erzeugt das System
   eine Meldung, was es dem devd(8)-Subsystem ermo:glicht, ein automatisches
   Failover-Skript zu starten, /usr/local/sbin/carp-hast-switch. Weitere
   Informationen zu dieser Konfiguration finden Sie in devd.conf(5).

   Es folgt ein Beispiel fu:r ein automatisches Failover-Skript:

 #!/bin/sh

 # Original script by Freddie Cash <fjwcash@gmail.com>
 # Modified by Michael W. Lucas <mwlucas@BlackHelicopters.org>
 # and Viktor Petersson <vpetersson@wireload.net>

 # The names of the HAST resources, as listed in /etc/hast.conf
 resources="test"

 # delay in mounting HAST resource after becoming master
 # make your best guess
 delay=3

 # logging
 log="local0.debug"
 name="carp-hast"

 # end of user configurable stuff

 case "$1" in
         master)
                 logger -p $log -t $name "Switching to primary provider for ${resources}."
                 sleep ${delay}

                 # Wait for any "hastd secondary" processes to stop
                 for disk in ${resources}; do
                         while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do
                                 sleep 1
                         done

                         # Switch role for each disk
                         hastctl role primary ${disk}
                         if [ $? -ne 0 ]; then
                                 logger -p $log -t $name "Unable to change role to primary for resource ${disk}."
                                 exit 1
                         fi
                 done

                 # Wait for the /dev/hast/* devices to appear
                 for disk in ${resources}; do
                         for I in $( jot 60 ); do
                                 [ -c "/dev/hast/${disk}" ] && break
                                 sleep 0.5
                         done

                         if [ ! -c "/dev/hast/${disk}" ]; then
                                 logger -p $log -t $name "GEOM provider /dev/hast/${disk} did not appear."
                                 exit 1
                         fi
                 done

                 logger -p $log -t $name "Role for HAST resources ${resources} switched to primary."


                 logger -p $log -t $name "Mounting disks."
                 for disk in ${resources}; do
                         mkdir -p /hast/${disk}
                         fsck -p -y -t ufs /dev/hast/${disk}
                         mount /dev/hast/${disk} /hast/${disk}
                 done

         ;;

         slave)
                 logger -p $log -t $name "Switching to secondary provider for ${resources}."

                 # Switch roles for the HAST resources
                 for disk in ${resources}; do
                         if ! mount | grep -q "^/dev/hast/${disk} on "
                         then
                         else
                                 umount -f /hast/${disk}
                         fi
                         sleep $delay
                         hastctl role secondary ${disk} 2>&1
                         if [ $? -ne 0 ]; then
                                 logger -p $log -t $name "Unable to switch role to secondary for resource ${disk}."
                                 exit 1
                         fi
                         logger -p $log -t $name "Role switched to secondary for resource ${disk}."
                 done
         ;;
 esac

   Im Kern fu:hrt das Skript die folgenden Aktionen durch, sobald ein Knoten
   zum Master wird:

     * Es ernennt den HAST-Pool als den prima:ren fu:r einen gegebenen
       Knoten.

     * Es pru:ft das Dateisystem, dass auf dem HAST-Pool erstellt wurde.

     * Es ha:ngt den Pool ins System ein.

   Wenn ein Knoten zum Sekunda:ren ernannt wird:

     * Ha:ngt es den HAST-Pool aus dem Dateisystem aus.

     * Degradiert es den HAST-Pool zum sekunda:ren.

  Achtung:

   Dieses Skript ist nur ein Beispiel fu:r eine mo:gliche Lo:sung. Es
   behandelt nicht alle mo:glichen Szenarien, die auftreten ko:nnen und
   sollte erweitert bzw. abgea:ndert werden, so dass z.B. beno:tigte Dienste
   gestartet oder gestoppt werden.

  Tipp:

   Fu:r dieses Beispiel wurde ein UFS-Dateisystem verwendet. Um die Zeit fu:r
   die Wiederherstellung zu verringern, kann ein UFS mit Journal oder ein
   ZFS-Dateisystem benutzt werden.

   Weitere detaillierte Informationen mit zusa:tzlichen Beispielen ko:nnen
   unter http://wiki.FreeBSD.org/HAST abgerufen werden.

  17.14.3. Fehlerbehebung

   HAST sollte generell ohne Probleme funktionieren. Jedoch kann es, wie bei
   jeder anderen Software auch, zu gewissen Zeiten sein, dass sie sich nicht
   so verha:lt wie angegeben. Die Quelle dieser Probleme kann unterschiedlich
   sein, jedoch sollte als Faustregel gewa:hrleistet werden, dass die Zeit
   fu:r alle Knoten im Cluster synchron la:uft.

   Fu:r die Fehlersuche bei HAST sollte die Anzahl an Debugging-Meldungen von
   hastd(8) erho:ht werden. Dies kann durch das Starten von hastd mit -d
   erreicht werden. Diese Option kann mehrfach angegeben werden, um die
   Anzahl an Meldungen weiter zu erho:hen. Sie sollten ebenfalls die
   Verwendung von -F in Erwa:gung ziehen, was hastd im Vordergrund startet.

    17.14.3.1. Auflo:sung des Split-brain-Zustands

   split-brain bezeichnet eine Situation, in der beide Knoten des Clusters
   nicht in der Lage sind, miteinander zu kommunizieren und dadurch beide als
   prima:re Knoten fungieren. Dies ist ein gefa:hrlicher Zustand, weil es
   beiden Knoten erlaubt ist, A:nderungen an den Daten vorzunehmen, die
   miteinander nicht in Einklang gebracht werden ko:nnen. Diese Situation
   muss vom Systemadministrator manuell bereinigt werden.

   Der Administrator muss entscheiden, welcher Knoten die wichtigeren
   A:nderungen besitzt, oder die Zusammenfu:hrung manuell durchfu:hren.
   Anschliessend kann HAST die volle Synchronisation mit dem Knoten
   durchfu:hren, der die bescha:digten Daten entha:lt. Um dies zu tun, geben
   Sie folgende Befehle auf dem Knoten ein, der neu synchronisiert werden
   muss:

 # hastctl role init test
 # hastctl create test
 # hastctl role secondary test

Kapitel 18. GEOM: Modulares Framework zur Plattentransformation

   Geschrieben von Tom Rhodes.
   U:bersetzt von Daniel Seuffert und Johann Kois.
   Inhaltsverzeichnis

   18.1. U:bersicht

   18.2. RAID0 - Striping

   18.3. RAID1 - Spiegelung

   18.4. RAID3 - Byte-Level Striping mit dedizierter Parita:t

   18.5. Software RAID

   18.6. GEOM Gate Netzwerk

   18.7. Das Labeln von Laufwerken

   18.8. UFS Journaling in GEOM

18.1. U:bersicht

   GEOM erlaubt den Zugriff und die Kontrolle von Klassen, wie beispielsweise
   Master Boot Records und BSD-Label, durch die Nutzung von Datentra:gern
   (Providern) oder den besonderen Dateien in /dev. Verschiedene Software
   RAID-Konfigurationen unterstu:tzend, gewa:hrt GEOM transparenten Zugriff
   auf das Betriebssystem und die System-Dienstprogramme.

   Dieses Kapitel behandelt den Einsatz von Laufwerken mit dem GEOM-Framework
   in FreeBSD. Dies beinhaltet auch die wichtigen
   RAID-U:berwachungswerkzeuge, welche das Framework zur Konfiguration
   nutzen. Dieses Kapitel ist kein ausfu:hrlicher Leitfaden fu:r
   RAID-Konfigurationen. Nur die von GEOM unterstu:tzten RAID-Klassen werden
   ero:rtert.

   Nach Lesen dieses Kapitels werden Sie folgendes wissen:

     * Welche Art von RAID-Unterstu:tzung durch GEOM verfu:gbar ist.

     * Wie man die Basis-Dienstprogramme nutzt, um verschiedene RAID-Stufen
       zu konfigurieren, zu manipulieren und zu warten.

     * Wie man mittels GEOM spiegelt, striped, verschlu:sselt und entfernte
       Laufwerke verbindet.

     * Wie man an Laufwerken, welche an das GEOM-Framework angeschlossen
       sind, Fehler behebt.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Verstehen, wie FreeBSD Laufwerke behandelt (Kapitel 17,
       Speichermedien).

     * Wissen wie man einen neuen FreeBSD-Kernel konfiguriert und installiert
       (Kapitel 8, Konfiguration des FreeBSD-Kernels).

18.2. RAID0 - Striping

   Geschrieben von Tom Rhodes und Murray Stokely.

   Striping (stripe = Streifen) fasst verschiedene Laufwerke in einem
   einzigen Datentra:ger zusammen. Dies wird durch die Nutzung von
   Hardware-Controllern bewerkstelligt. Das GEOM-Subsystem unterstu:tzt
   Software-RAID0, welches auch als Striping bekannt ist. Bei dieser Technik
   wird kein RAID-Controller beno:tigt.

   In einem RAID0-System werden die Daten in einzelne Blo:cke aufgeteilt,
   welche u:ber alle angeschlossenen Laufwerke in einem Datenfeld (Array)
   geschrieben werden. Anstatt darauf warten zu mu:ssen, dass 256K auf ein
   einzelnes Laufwerk geschrieben werden, kann ein RAID0-System gleichzeitig
   64K auf jedes von vier Laufwerken schreiben mit entsprechend besserer
   I/O-Leistung. Dieser Durchsatz kann durch die Verwendung mehrerer
   Controller noch zusa:tzlich gesteigert werden.

                           Disk Striping Illustration

   Jedes Laufwerk in einem RAID0-Stripe muss die gleiche Gro:sse haben, da
   I/O-Anforderungen fu:r das Lesen und Schreiben abwechselnd auf mehrere
   Laufwerke parallel erfolgen.

  Anmerkung:

   RAID0 bietet keine Redundanz. Das bedeutet, dass wenn eine Platte im Array
   ausfa:llt, die gesamten Daten auf den Platten verloren gehen. Wenn es sich
   um wichtige Daten handelt, sollten Sie eine Backup-Strategie entwickeln,
   die regelma:ssig Sicherungen auf einem entferntem System speichert.

   Die Erstellung eines GEOM-basierten RAID0 auf einem FreeBSD-System wird im
   folgenden beschrieben. Nachdem das Stripe erzeugt wurde, finden Sie in
   gstripe(8) weitere Informationen zur Verwaltung der vorhandenen Stripes.

   Prozedur 18.1. Ein Stripe aus unformatierten ATA-Platten erzeugen
    1. Laden Sie das geom_stripe.ko-Modul:

 # kldload geom_stripe

    2. Stellen Sie sicher, dass ein geeigneter Mountpunkt existiert. Falls
       dieser Datentra:ger eine Root-Partition werden soll, dann nutzen Sie
       zeitweise einen anderen Mountpunkt, beispielsweise /mnt.

    3. Bestimmen Sie die Gera:tenamen derjenigen Platten, welche gestriped
       werden sollen, und erzeugen Sie ein neues Stripe-Gera:t. Das folgende
       Beispiel verwendet zwei unbenutzte und unpartitionierte ATA-Platten,
       die gestriped werden sollen. Die Gera:tenamen lauten /dev/ad2 und
       /dev/ad3:

 # gstripe label -v st0 /dev/ad2 /dev/ad3
 Metadata value stored on /dev/ad2.
 Metadata value stored on /dev/ad3.
 Done.

    4. Schreiben Sie einen Standard-Label (auch als Partitions-Tabelle
       bekannt) auf den neuen Datentra:ger und installieren Sie den normalen
       Bootstrap-Code:

 # bsdlabel -wB /dev/stripe/st0

    5. Dieser Prozess sollte zwei weitere Gera:te im Verzeichnis /dev/stripe
       (zusa:tzlich zum Gera:t st0) erzeugt haben. Diese schliessen st0a und
       st0c ein. Nun kann mit newfs ein UFS-Dateisystem auf dem Gera:t st0a
       erzeugt werden:

 # newfs -U /dev/stripe/st0a

       Viele Zahlen rauschen nun u:ber den Bildschirm und nach ein paar
       Sekunden wird der Prozess abgeschlossen sein. Der Datentra:ger wurde
       erzeugt und kann in den Verzeichnisbaum eingeha:ngt werden.

    6. Um das erzeugte Stripe manuell zu mounten:

 # mount /dev/stripe/st0a /mnt

    7. Um das erzeugte Dateisystem automatisch wa:hrend des Startvorgangs zu
       mounten, muss die Datentra:gerinformation in /etc/fstab eingetragen
       werden. In diesem Beispiel wird ein permanenter Mountpunkt namens
       stripe erstellt:

 # mkdir /stripe
 # echo "/dev/stripe/st0a /stripe ufs rw 2 2" \
 >> /etc/fstab

    8. Das geom_stripe.ko-Modul muss ebenfalls automatisch beim Systemstart
       geladen werden (durch die Aufnahme der folgenden Zeile in die Datei
       /boot/loader.conf):

 # echo 'geom_stripe_load="YES"' >> /boot/loader.conf

18.3. RAID1 - Spiegelung

   Spiegelung (RAID1 / Mirroring) ist eine Technik, bei der identische Daten
   auf mehr als ein Laufwerk geschrieben werden. Spiegel werden in der Regel
   zum Schutz vor Datenverlust aufgrund von Festplattenausfa:llen verwendet.
   Jedes Laufwerk in einem Spiegel entha:lt eine identische Kopie der Daten.
   Wenn ein einzelnes Laufwerk ausfa:llt, funktioniert der Spiegel weiterhin
   und die Daten werden von den restlichen Festplatten bereit gestellt. Der
   Rechner la:uft einfach weiter und der Administrator hat die Gelegentheit,
   das defekte Laufwerk auszutauschen.

   Zwei ha:ufige Situationen werden in diesem Beispiel erla:utert. Im ersten
   Beispiel wird ein Spiegel aus zwei neuen Laufwerken erstellt, der die
   existierende Platte ersetzt. Das zweite Beispiel erzeugt ein Spiegel mit
   einem einzigen Laufwerk, kopiert dann die Daten von der alten Platte und
   fu:gt die alte Platte zum Spiegel hinzu. Obwohl dieses Verfahren etwas
   komplizierter ist, wird nur ein neues Laufwerk beno:tigt.

   Traditionell sind die Laufwerke in einem Spiegel vom gleichen Modell und
   besitzen die gleiche Kapazita:t. Dies ist jedoch keine Voraussetzung fu:r
   gmirror(8). Hier ko:nnen Spiegel mit unterschiedlichen Kapazita:ten
   verwendet werden. Die Kapazita:t richtet sich dann nach dem kleinsten
   Laufwerk im Spiegel. Zusa:tzlicher Speicherplatz auf gro:sseren Laufwerken
   bleibt dann ungenutzt. Werden spa:ter weitere Laufwerke zum Spiegel
   hinzugefu:gt, mu:ssen diese mindestens so viel Kapazita:t haben wie das
   kleinste Laufwerk im Spiegel.

  Warnung:

   Die hier gezeigten Verfahren lo:schen keine Daten. Dennoch sollte, wie bei
   jeder gro:sseren Operation, zuerst eine vollsta:ndige Sicherung erstellt
   werden.

  Warnung:

   Obwohl in diesem Abschnitt dump(8) zum Kopieren der Dateisysteme verwendet
   wird, funktioniert es nicht auf Dateisystemen mit aktiviertem Soft-Updates
   Journaling. In tunefs(8) finden Sie Informationen, wie Sie Soft-Updates
   Journaling erkennen und deaktivieren.

  18.3.1. Probleme mit Metadaten

   Viele Plattensysteme speichern Metadaten am Ende der Platte. Alte
   Metadaten sollten vor der Wiederverwendung in einem Spiegel gelo:scht
   werden, da die meisten Probleme aus zwei Arten von u:brig gebliebenen
   Metadaten resultieren: GPT-Partitionstabellen und alte Metadaten aus einem
   vorherigen Spiegel.

   GPT-Metadaten ko:nnen mit gpart(8) gelo:scht werden. Dieses Beispiel
   lo:scht sowohl die prima:ren, als auch die GPT-Partitionstabelle von der
   Festplatte ada8:

 # gpart destroy -F ada8

   Mit gmirror(8) kann eine Platte aus einem aktiven Spiegel entfernt und
   gleichzeitig die Metadaten gelo:scht werden. In diesem Beispiel wird die
   Platte ada8 aus dem aktiven Spiegel gm4 entfernt:

 # gmirror remove gm4 ada8

   Wenn der Spiegel nicht aktiv ist, sich jedoch noch alte Metadaten auf der
   Festplatte befinden, benutzen Sie gmirror clear, um die Metadaten zu
   entfernen:

 # gmirror clear ada8

   gmirror(8) speichert einen Datenblock an Metadaten am Ende der Festplatte.
   Da das GPT-Partitionschema die Metadaten auch am Ende der Platte
   speichert, wird es nicht empfohlen, mit gmirror(8) einen Spiegel aus einem
   gesamten GPT-Datentra:ger zu erstellen. In diesen Fa:llen sollte eine
   MBR-Partitionierung benutzt werden, weil hier nur eine Partitionstabelle
   am Anfang der Platte gespeichert wird und somit nicht mit den Metadaten
   des Spiegels im Konflikt steht.

  18.3.2. Einen Spiegel mit zwei neuen Festplatten erstellen

   In diesem Beispiel wurde FreeBSD bereits auf der vorhandenen Festplatte
   ada0 installiert. Zwei neue Platten, ada1 und ada2, wurden bereits mit dem
   System verbunden. Ein neuer Spiegel soll mit diesen beiden Platten erzeugt
   und verwendet werden, um die alte vorhandene Platte zu ersetzen.

   Das Kernelmodul geom_mirror.ko muss entweder in den Kernel eingebaut, oder
   zur Laufzeit geladen werden. Sie ko:nnen das Modul manuell laden:

 # gmirror load

   Erstellen Sie den Spiegel mit den beiden neuen Festplatten:

 # gmirror label -v gm0 /dev/ada1 /dev/ada2

   gm0 ist ein vom Benutzer gewa:hlter Name, der dem neuen Spiegel zugeordnet
   wird. Nachdem der Spiegel gestartet wurde, erscheint dieser Gera:tename in
   /dev/mirror/.

   MBR- und bsdlabel-Partitionstabellen ko:nnen jetzt auf dem neuen Spiegel
   erzeugt werden. Dieses Beispiel verwendet das herko:mmliche
   Dateisystem-Layout fu:r /, swap, /var, /tmp und /usr. Eine einzelne Root-
   und Swap-Partition wu:rde ebenfalls funktionieren.

   Die Partitionen auf dem Spiegel mu:ssen nicht zwingend die gleiche Gro:sse
   wie die auf der Festplatte haben, aber sie mu:ssen gross genug sein, um
   alle Daten aufnehmen zu ko:nnen, die bereits auf ada0 gespeichert sind.

 # gpart create -s MBR mirror/gm0
 # gpart add -t freebsd -a 4k mirror/gm0
 # gpart show mirror/gm0
 =>       63  156301423  mirror/gm0  MBR  (74G)
          63         63                    - free -  (31k)
         126  156301299                 1  freebsd  (74G)
   156301425         61                    - free -  (30k)

 # gpart create -s BSD mirror/gm0s1
 # gpart add -t freebsd-ufs  -a 4k -s 2g mirror/gm0s1
 # gpart add -t freebsd-swap -a 4k -s 4g mirror/gm0s1
 # gpart add -t freebsd-ufs  -a 4k -s 2g mirror/gm0s1
 # gpart add -t freebsd-ufs  -a 4k -s 1g mirror/gm0s1
 # gpart add -t freebsd-ufs  -a 4k mirror/gm0s1
 # gpart show mirror/gm0s1
 =>        0  156301299  mirror/gm0s1  BSD  (74G)
           0          2                      - free -  (1.0k)
           2    4194304                   1  freebsd-ufs  (2.0G)
     4194306    8388608                   2  freebsd-swap (4.0G)
    12582914    4194304                   4  freebsd-ufs  (2.0G)
    16777218    2097152                   5  freebsd-ufs  (1.0G)
    18874370  137426928                   6  freebsd-ufs  (65G)
   156301298          1                      - free -  (512B)

   Damit von dem Spiegel gebootet werden kann, muss der Bootcode in den MBR
   installiert, ein bsdlabel erstellt und die aktive Partition gesetzt
   werden:

 # gpart bootcode -b /boot/mbr mirror/gm0
 # gpart set -a active -i 1 mirror/gm0
 # gpart bootcode -b /boot/boot mirror/gm0s1

   Erstellen Sie die Dateisysteme auf dem neuen Spiegel und aktivieren Sie
   Soft-Updates:

 # newfs -U /dev/mirror/gm0s1a
 # newfs -U /dev/mirror/gm0s1d
 # newfs -U /dev/mirror/gm0s1e
 # newfs -U /dev/mirror/gm0s1f

   Die Dateisysteme der vorhandenen Platte ada0 ko:nnen jetzt mit dump(8) und
   restore(8) auf den Spiegel kopiert werden.

 # mount /dev/mirror/gm0s1a /mnt
 # dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)
 # mount /dev/mirror/gm0s1d /mnt/var
 # mount /dev/mirror/gm0s1e /mnt/tmp
 # mount /dev/mirror/gm0s1f /mnt/usr
 # dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)
 # dump -C16 -b64 -0aL -f - /tmp | (cd /mnt/tmp && restore -rf -)
 # dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)

   Fu:gen Sie die Dateisysteme fu:r den Spiegel in /etc/rc.conf hinzu:

 # Device          Mountpoint       FStype  Options Dump    Pass#
 /dev/mirror/gm0s1a      /               ufs     rw       1       1
 /dev/mirror/gm0s1b      none            swap    sw       0       0
 /dev/mirror/gm0s1d      /var            ufs     rw       2       2
 /dev/mirror/gm0s1e      /tmp            ufs     rw       2       2
 /dev/mirror/gm0s1f      /usr            ufs     rw       2       2

   Wenn das Modul geom_mirror.ko nicht im Kernel enthalten ist, ko:nnen Sie
   /mnt/boot/loader.conf bearbeiten, damit das Modul beim Systemstart geladen
   wird:

 geom_mirror_load="YES"

   Starten Sie das System neu und u:berpru:fen Sie, ob alle Daten erfolgreich
   kopiert wurden. Das BIOS wird den Spiegel vermutlich als zwei einzelne
   Laufwerke erkennen. Da beide Laufwerke jedoch identisch sind, spielt es
   keine Rolle, welches Laufwerk zum Booten ausgewa:hlt wird.

   Falls es Probleme beim Booten gibt, lesen Sie den Abschnitt 18.3.4,
   "Fehlerbehebung". Die alte Festplatte ada0 kann vom System getrennt und
   als Offline-Sicherung aufbewahrt werden.

   Im laufenden Betrieb verha:lt sich der Spiegel genau wie ein einzelnes
   Laufwerk.

  18.3.3. Einen Spiegel mit einem vorhandenen Laufwerk erstellen

   In diesem Beispiel wurde FreeBSD bereits auf der Festplatte ada0
   installiert und eine weitere Platte, ada1, wurde an das System
   angeschlossen. Zuna:chst wird ein Spiegel mit einer Festplatte erstellt,
   dann das vorhandene System auf den Spiegel kopiert. Zuletzt wird die alte
   Festplatte in den Spiegel eingefu:gt. Diese etwas komplexere
   Vorgehensweise ist erforderlich, da gmirror 512 Byte an Metadaten am Ende
   der Festplatte speichert, und die bestehende Platte, ada0, in der Regel
   den Platz bereits belegt hat.

   Laden Sie das Kernelmodul geom_mirror.ko:

 # gmirror load

   Pru:fen Sie mit diskinfo die Mediengro:sse der vorhandenen Festplatte:

 # diskinfo -v ada0 | head -n3
 /dev/ada0
         512             # sectorsize
         1000204821504   # mediasize in bytes (931G)

   Jetzt ko:nnen Sie den Spiegel auf der neuen Festplatte erzeugen. Um
   sicherzustellen, dass die Kapazita:t nicht gro:sser ist, als die
   Kapazita:t der vorhandenen Platte ada0, benutzen Sie gnop(8) um eine
   Platte mit der exakt gleichen Gro:sse zu imitieren. Diese Platte speichert
   keine Daten und wird nur verwendet, um die Gro:sse des Spiegels zu
   begrenzen. gmirror(8) wird die Kapazita:t des Spiegels auf die Gro:sse von
   gzero.nop beschra:nken, auch wenn die neue Festplatte ada1 mehr Platz zur
   Verfu:gung ha:tte. Beachten Sie, dass 1000204821504 in der zweiten Zeile
   der ermittelten Mediengro:sse von diskinfo entspricht.

 # geom zero load
 # gnop create -s 1000204821504 gzero
 # gmirror label -v gm0 gzero.nop ada1
 # gmirror forget gm0

   Da gzero.nop keine Daten speichert, sieht der Spiegel sie als nicht
   verbunden an. Der Spiegel ist so konfiguriert, dass er nicht verbundene
   Komponenten einfach "vergisst". Das Ergebnis ist ein Spiegel mit nur einer
   einzigen Platte, ada1.

   Sehen Sie sich nach der Erstellung von gm0 die Partitionstabelle von ada0
   an. Diese Ausgabe stammt von einer 1 TB Festplatte. Falls am Ende der
   Platte noch freier Speicherplatz ist, kann der Inhalt von ada0 direkt auf
   den Spiegel kopiert werden.

   Falls jedoch der gesamte Speicherplatz auf der Platte zugeordnet ist, dann
   gibt es keinen Platz mehr fu:r die 512 Byte Metadaten fu:r den Spiegel am
   Ende der Platte, wie in dieser Auflistung zu sehen.

 # gpart show ada0
 =>        63  1953525105        ada0  MBR  (931G)
           63  1953525105           1  freebsd  [active]  (931G)

   In diesem Fall muss die Partitionstabelle bearbeitet werden, um die
   Kapazita:t von mirror/gm0 um einen Sektor zu reduzieren. Dieses Verfahren
   wird spa:ter erla:utert.

   In beiden Fa:llen sollte die Partitionstabelle der prima:ren Platte mit
   gpart backup gesichert werden.

 # gpart backup ada0 > table.ada0
 # gpart backup ada0s1 > table.ada0s1

   Diese Kommandos erstellen zwei Dateien, table.ada0 und table.ada0s1. Das
   Beispiel verwendet eine 1 TB Festplatte:

 # cat table.ada0
 MBR 4
 1 freebsd         63 1953525105   [active]

 # cat table.ada0s1
 BSD 8
 1  freebsd-ufs          0    4194304
 2 freebsd-swap    4194304   33554432
 4  freebsd-ufs   37748736   50331648
 5  freebsd-ufs   88080384   41943040
 6  freebsd-ufs  130023424  838860800
 7  freebsd-ufs  968884224  984640881

   Wenn am Ende der Platte kein Platz vorhanden ist, muss die Gro:sse des
   Slice und der letzten Partition verringert werden. Bearbeiten Sie die
   beiden Dateien, und verringern Sie die Gro:sse der Slice und der Partition
   jeweils um eins. Dies bezieht sich auf die letzten Zahlen in der Liste.

 # cat table.ada0
 MBR 4
 1 freebsd         63 1953525104   [active]

 # cat table.ada0s1
 BSD 8
 1  freebsd-ufs          0    4194304
 2 freebsd-swap    4194304   33554432
 4  freebsd-ufs   37748736   50331648
 5  freebsd-ufs   88080384   41943040
 6  freebsd-ufs  130023424  838860800
 7  freebsd-ufs  968884224  984640880

   Wenn mindestens ein Sektor der Platte nicht zugewiesen wurde, kann die
   Platte ohne Modifikation verwendet werden.

   Jetzt kann die Partitionstabelle auf mirror/gm0 wiederhergestellt werden:

 # gpart restore mirror/gm0 < table.ada0
 # gpart restore mirror/gm0s1 < table.ada0s1

   Pru:fen Sie die Partitionstabellen mit gpart show. Dieses Beispiel nutzt
   gm0s1a fu:r /, gm0s1d fu:r /var, gm0s1e fu:r /usr, gm0s1f fu:r /data1 und
   gm0s1g fu:r /data2.

 # gpart show mirror/gm0
 =>        63  1953525104  mirror/gm0  MBR  (931G)
           63  1953525042           1  freebsd  [active]  (931G)
   1953525105          62              - free -  (31k)

 # gpart show mirror/gm0s1
 =>         0  1953525042  mirror/gm0s1  BSD  (931G)
            0     2097152             1  freebsd-ufs  (1.0G)
      2097152    16777216             2  freebsd-swap  (8.0G)
     18874368    41943040             4  freebsd-ufs  (20G)
     60817408    20971520             5  freebsd-ufs  (10G)
     81788928   629145600             6  freebsd-ufs  (300G)
    710934528  1242590514             7  freebsd-ufs  (592G)
   1953525042          63                - free -  (31k)

   Sowohl die Slice, als auch die letzte Partition, muss mindestens einen
   freien Block am Ende der Platte haben.

   Erstellen Sie Dateisysteme auf diesen neuen Partitionen:

 # newfs -U /dev/mirror/gm0s1a
 # newfs -U /dev/mirror/gm0s1d
 # newfs -U /dev/mirror/gm0s1e
 # newfs -U /dev/mirror/gm0s1f
 # newfs -U /dev/mirror/gm0s1g

   Damit Sie von dem Spiegel booten ko:nnen, mu:ssen Sie den Bootcode in den
   MBR installieren, ein bsdlabel anlegen und das aktive Slice setzen:

 # gpart bootcode -b /boot/mbr mirror/gm0
 # gpart set -a active -i 1 mirror/gm0
 # gpart bootcode -b /boot/boot mirror/gm0s1

   Bearbeiten Sie /etc/fstab, um die neuen Partitionen auf dem Spiegel nutzen
   zu ko:nnen. Speichern Sie zuna:chst eine Kopie der Datei unter
   /etc/fstab.orig:

 # cp /etc/fstab /etc/fstab.orig

   Ersetzen Sie in /etc/fstab /dev/ada0 durch mirror/gm0.

 # Device                Mountpoint      FStype  Options Dump    Pass#
 /dev/mirror/gm0s1a      /               ufs     rw      1       1
 /dev/mirror/gm0s1b      none            swap    sw      0       0
 /dev/mirror/gm0s1d      /var            ufs     rw      2       2
 /dev/mirror/gm0s1e      /usr            ufs     rw      2       2
 /dev/mirror/gm0s1f      /data1          ufs     rw      2       2
 /dev/mirror/gm0s1g      /data2          ufs     rw      2       2

   Wenn das Modul geom_mirror.ko nicht im Kernel enthalten ist, ko:nnen Sie
   /boot/loader.conf bearbeiten, damit das Modul beim Systemstart geladen
   wird:

 geom_mirror_load="YES"

   Die Dateisysteme der urspru:nglichen Platte ko:nnen jetzt mit dump(8) und
   restore(8) auf den Spiegel kopiert werden. Wenn Sie das Dateisystem mit
   dump -L sichern, wird zuna:chst ein Snapshot des Dateisystems erstellt,
   was einige Zeit dauern kann.

 # mount /dev/mirror/gm0s1a /mnt
 # dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)
 # mount /dev/mirror/gm0s1d /mnt/var
 # mount /dev/mirror/gm0s1e /mnt/usr
 # mount /dev/mirror/gm0s1f /mnt/data1
 # mount /dev/mirror/gm0s1g /mnt/data2
 # dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)
 # dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)
 # dump -C16 -b64 -0aL -f - /data1 | (cd /mnt/data1 && restore -rf -)
 # dump -C16 -b64 -0aL -f - /data2 | (cd /mnt/data2 && restore -rf -)

   Starten Sie das System neu und booten Sie von ada1. Wenn alles
   funktioniert, wird das System von mirror/gm0 booten, welches jetzt die
   gleichen Daten entha:lt wie ada0. Lesen Sie Abschnitt 18.3.4,
   "Fehlerbehebung", falls es Probleme beim Booten gibt.

   An dieser Stelle besteht der Spiegel immer noch aus der einzelnen Platte
   ada1.

   Nachdem erfolgreich von mirror/gm0 gebootet wurde, besteht der letzte
   Schritt darin, ada0 in den Spiegel einzufu:gen.

  Wichtig:

   Wenn Sie ada0 in den Spiegel einfu:gen, wird der Inhalt der Platte mit den
   Daten aus dem Spiegel u:berschrieben. Sie mu:ssen sicherstellen, das
   mirror/gm0 den gleichen Inhalt wie ada0 hat, bevor Sie ada0 zum Spiegel
   hinzufu:gen. Falls der zuvor mit dump(8) und restore(8) kopierte Inhalt
   nicht mit dem von ada0 identisch ist, machen Sie die A:nderungen an
   /etc/fstab ru:ckga:ngig, starten Sie das System neu und beginnen Sie die
   Prozedur von vorn.

 # gmirror insert gm0 ada0
 GEOM_MIRROR: Device gm0: rebuilding provider ada0

   Die Synchronisation zwischen den beiden Platten wird direkt gestartet.
   Verwenden Sie gmirror status um den Fortschritt zu beobachten.

 # gmirror status
       Name    Status  Components
 girror/gm0  DEGRADED  ada1 (ACTIVE)
                       ada0 (SYNCHRONIZING, 64%)

   Nach einer Weile wird die Wiederherstellung abgeschlossen sein.

 GEOM_MIRROR: Device gm0: rebuilding provider ada0 finished.
 # gmirror status
       Name    Status  Components
 mirror/gm0  COMPLETE  ada1 (ACTIVE)
                       ada0 (ACTIVE)

   mirror/gm0 besteht nun aus den beiden Platten ada0 und ada1. Der Inhalt
   der beiden Platten wird automatisch miteinander synchronisiert. Im
   laufenden Betrieb verha:lt sich mirror/gm0 wie eine einzelne Festplatte.

  18.3.4. Fehlerbehebung

   Falls das System nicht mehr startet, mu:ssen mo:glicherweise die
   BIOS-Einstellungen gea:ndert werden, um von dem neuen gespiegelten
   Laufwerk zu booten. Beide Platten des Spiegels ko:nnen zum Booten
   verwendet werden, da sie als Komponenten des Spiegels identische Daten
   enthalten.

   Wenn der Bootvorgang mit der folgenden Meldung abbricht, ist irgendwas mit
   dem Spiegel nicht in Ordnung:

 Mounting from ufs:/dev/mirror/gm0s1a failed with error 19.

 Loader variables:
   vfs.root.mountfrom=ufs:/dev/mirror/gm0s1a
   vfs.root.mountfrom.options=rw

 Manual root filesystem specification:
   <fstype>:<device> [options]
       Mount <device> using filesystem <fstype>
       and with the specified (optional) option list.

     eg. ufs:/dev/da0s1a
         zfs:tank
         cd9660:/dev/acd0 ro
           (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)

   ?               List valid disk boot devices
   .               Yield 1 second (for background tasks)
   <empty line>    Abort manual input

 mountroot>

   Dieses Problem kann durch ein nicht geladenes Kernelmodul geom_mirror.ko
   in /boot/loader.conf verursacht werden. Um das Problem zu beheben, booten
   Sie von einem FreeBSD-Installationsmedium und wa:hlen Sie Shell an der
   Eingabeaufforderung. Laden Sie dann das Modul und ha:ngen Sie den Spiegel
   ein:

 # gmirror load
 # mount /dev/mirror/gm0s1a /mnt

   Bearbeiten Sie dann /mnt/boot/loader.conf und fu:gen Sie eine Zeile fu:r
   das Kernelmodul hinzu:

 geom_mirror_load="YES"

   Speichern Sie die Datei und starten Sie das System neu.

   Andere Probleme, die error 19 verursachen ko:nnen, sind nur mit mehr
   Aufwand zu beheben. Obwohl das System von ada0 booten sollte, wird ein
   weiterer Prompt erscheinen, wenn /etc/fstab fehlerhaft ist. Geben Sie am
   Loader-Prompt ufs:/dev/ada0s1a ein und dru:cken Sie Enter. Machen Sie die
   A:nderungen an /etc/fstab ru:ckga:ngig und ha:ngen Sie anstelle des
   Spiegels die originale Festplatte (ada0) ein. Starten Sie dann das System
   neu und versuchen Sie den Vorgang erneut.

 Enter full pathname of shell or RETURN for /bin/sh:
 # cp /etc/fstab.orig /etc/fstab
 # reboot

  18.3.5. Wiederherstellung des Systems nach einem Plattenausfall

   Der Vorteil der Plattenspiegelung ist, dass eine Platte ausfallen kann,
   ohne dass Sie dabei Daten verlieren. Falls ada0 aus dem obigen Beispiel
   ausfa:llt, steht der Spiegel weiterhin zur Verfu:gung und bietet die Daten
   von der verbleibenden Platte ada1 an.

   Um das ausgefallene Laufwerk zu ersetzen, muss das System heruntergefahren
   werden und das ausgefallene Laufwerk durch ein neues Laufwerk von gleicher
   oder gro:sserer Kapazita:t ersetzt werden. Hersteller verwenden oft etwas
   willku:rliche Werte fu:r die Kapazita:t. Der einzige Weg, um wirklich
   sicher zu sein, ist die Gesamtzahl der Sektoren von diskinfo -V zu
   vergleichen. Ein Laufwerk mit gro:sserer Kapazita:t wird funktionieren,
   allerdings wird der zusa:tzliche Platz ungenutzt bleiben.

   Nachdem der Rechner wieder eingeschaltet ist, wird der Spiegel im
   "degraded" Modus ausgefu:hrt werden. Der Spiegel wird angewiesen,
   Laufwerke zu vergessen, die noch nicht verbunden sind:

 # gmirror forget gm0

   Alte Metadaten sollten von der Ersatzfestplatte nach den Anweisungen in
   Abschnitt 18.3.1, "Probleme mit Metadaten" gelo:scht werden. Anschliessend
   kann die Ersatzfestplatte, in diesem Beispiel ada4, in den Spiegel
   eingefu:gt werden:

 # gmirror insert gm0 /dev/ada4

   Die Wiederherstellung beginnt, sobald das neue Laufwerk in den Spiegel
   eingesetzt wird. Das Kopieren der Daten vom Spiegel auf das neue Laufwerk
   kann eine Weile dauern. Die Leistung des Spiegels ist wa:hrend dieser Zeit
   stark reduziert, deswegen sollten neue Laufwerke idealerweise dann
   eingefu:gt werden, wenn der Rechner nicht beno:tigt wird.

   Der Fortschritt der Wiederherstellung kann mit gmirror status u:berwacht
   werden. Wa:hrend der Wiederherstellung ist der Status DEGRADED. Wenn der
   Vorgang abgeschlossen ist, wechselt der Status zu COMPLETE.

18.4. RAID3 - Byte-Level Striping mit dedizierter Parita:t

   Geschrieben von Mark Gladman und Daniel Gerzo.
   Basierend auf Dokumentation von Tom Rhodes und Murray Stokely.
   U:bersetzt von Bjo:rn Heidotting.

   RAID3 ist eine Methode, die mehrere Festplatten zu einem einzigen Volume
   mit einer dedizierten Parita:tsfestplatte kombiniert. In einem
   RAID3-System werden die Daten in einzelne Bytes aufgeteilt und dann u:ber
   alle Laufwerke, mit Ausnahme der Parita:tsfestplatte, geschrieben. Beim
   Lesen von Daten in einer RAID3 Implementierung werden alle Festplatten im
   Array parallel genutzt. Die Leistung kann durch den Einsatz von mehreren
   Controllern weiter erho:ht werden. Ein RAID3-Array hat eine Fehlertoleranz
   von 1 Laufwerk und bietet dabei eine Kapazita:t von 1 - 1/n der
   Gesamtkapazita:t der Laufwerke im Array, wobei n die Anzahl der
   Festplatten im Array darstellt. So eine Konfiguration ist meistens fu:r
   die Speicherung von gro:sseren Dateien geeignet, wie beispielsweise
   Multimediadateien.

   Mindestens 3 Festplatten sind erforderlich, um ein RAID3 zu erstellen.
   Jede Festplatte muss von der gleichen Gro:sse sein, da die I/O-Anfragen
   fu:r Lesen oder Schreiben auf mehreren Festplatten parallel stattfinden.
   Aufgrund der Beschaffenheit von RAID3, muss die Anzahl der Laufwerke 3, 5,
   9, 17 bzw. 2^n + 1 sein.

   Dieser Abschnitt beschreibt, wie ein Software RAID3 auf einem
   FreeBSD-System erstellt wird.

  Anmerkung:

   Obwohl es theoretisch mo:glich ist FreeBSD von einem RAID3-Array zu
   booten, wird von solch einer ungewo:hnlichen Konfiguration dringend
   abgeraten.

  18.4.1. Ein dediziertes RAID3-Array erstellen

   In FreeBSD wird die Unterstu:tzung fu:r RAID3 u:ber die GEOM-Klasse
   graid3(8) implementiert. Zum Erstellen eines dedizierten RAID3-Arrays sind
   folgende Schritte erforderlich.

    1. Laden Sie zuna:chst das Modul geom_raid3.ko mit einem der folgenden
       Befehle:

 # graid3 load

       oder:

 # kldload geom_raid3

    2. Stellen Sie sicher, dass ein geeigneter Mountpunkt existiert. Dieser
       Befehl erstellt ein neues Verzeichnis, welches als Mountpunkt
       verwendet werden kann:

 # mkdir /multimedia

    3. Bestimmen Sie die Gera:tenamen der Festplatten, die dem Array
       hinzugefu:gt werden und erstellen Sie ein neues RAID3 Gera:t. Das
       letzte aufgefu:hrte Gera:t wird als dediziertes Parita:tslaufwerk
       verwendet. Dieses Beispiel verwendet drei unpartionierte ATA-Platten:
       ada1 und ada2 fu:r die Daten, sowie ada3 fu:r die Parita:t.

 # graid3 label -v gr0 /dev/ada1 /dev/ada2 /dev/ada3
 Metadata value stored on /dev/ada1.
 Metadata value stored on /dev/ada2.
 Metadata value stored on /dev/ada3.
 Done.

    4. Partitionieren Sie das neu erstelle Gera:t gr0 und erstellen Sie
       darauf ein UFS-Dateisystem:

 # gpart create -s GPT /dev/raid3/gr0
 # gpart add -t freebsd-ufs /dev/raid3/gr0
 # newfs -j /dev/raid3/gr0p1

       Viele Zahlen rauschen nun u:ber den Bildschirm und nach einer gewissen
       Zeit ist der Vorgang abgeschlossen. Das Volume wurde erstellt und kann
       jetzt in den Verzeichnisbaum eingehangen werden:

 # mount /dev/raid3/gr0p1 /multimedia/

       Das RAID3-Array ist nun einsatzbereit.

   Weitere Konfigurationsschritte sind erforderlich, um die Einstellungen
   nach einem Systemneustart zu erhalten.

    1. Das Modul geom_raid3.ko muss geladen werden, bevor das Array
       eingehangen werden kann. Damit das Kernelmodul automatisch beim
       Systemstart geladen wird, muss die folgende Zeile in /boot/loader.conf
       hinzugefu:gt werden:

 geom_raid3_load="YES"

    2. Die folgenden Informationen u:ber das Volume mu:ssen in /etc/fstab
       hinzugefu:gt werden, um das Dateisystem des Arrays automatisch beim
       Systemstart zu aktivieren:

 /dev/raid3/gr0p1        /multimedia     ufs     rw      2       2

18.5. Software RAID

   Beigetragen von Warren Block.
   U:bersetzt von Bjo:rn Heidotting.

   Einige Motherboards und Erweiterungskarten besitzen ein ROM, das dem
   Rechner erlaubt von einem RAID-Array zu booten. Nach dem Booten wird der
   Zugriff auf das RAID-Array durch die Software auf dem Prozessor des
   Rechners abgewickelt. Dieses "Hardware-unterstu:tzte Software-RAID" ist
   nicht abha:ngig von einem bestimmten Betriebssystem. Sie funktionieren
   bereits, noch bevor das Betriebssystem geladen wird.

   Abha:ngig von der verwendeten Hardware werden mehrere Arten von RAID
   unterstu:tzt. Eine vollsta:ndige Liste finden Sie in graid(8).

   graid(8) beno:tigt das geom_raid.ko Kernelmodul, welches beginnend mit
   FreeBSD 9.1 im GENERIC-Kernel enthalten ist. Bei Bedarf kann es manuell
   mit graid load geladen werden.

  18.5.1. Ein Array erstellen

   Gera:te mit Software-RAID haben oft ein Menu:, das u:ber eine bestimmte
   Tastenkombination beim Booten aufgerufen werden kann. Das Menu: kann
   verwendet werden, um RAID-Arrays zu erstellen und zu lo:schen. Mit
   graid(8) ko:nnen Arrays auch direkt von der Kommandozeile erstellt werden.

   graid label wird verwendet, um ein neues Array zu erstellen. Das
   Motherboard in diesem Beispiel besitzt einen Intel(R) Software-RAID
   Chipsatz, so dass das Metadatenformat von Intel(R) angegeben wird. Das
   neue Array bekommt den Namen (Label) gm0, verha:lt sich als Spiegel
   (RAID1) und verwendet die Laufwerke ada0 und ada1.

  Achtung:

   Bei der Erstellung des Arrays wird etwas Platz auf den Laufwerken
   u:berschrieben. Sichern Sie zuvor alle vorhandenen Daten!

 # graid label Intel gm0 RAID1 ada0 ada1
 GEOM_RAID: Intel-a29ea104: Array Intel-a29ea104 created.
 GEOM_RAID: Intel-a29ea104: Disk ada0 state changed from NONE to ACTIVE.
 GEOM_RAID: Intel-a29ea104: Subdisk gm0:0-ada0 state changed from NONE to ACTIVE.
 GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
 GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to ACTIVE.
 GEOM_RAID: Intel-a29ea104: Array started.
 GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from STARTING to OPTIMAL.
 Intel-a29ea104 created$
 GEOM_RAID: Intel-a29ea104: Provider raid/r0 for volume gm0 created.

   Eine Statusabfrage zeigt, dass der neue Spiegel einsatzbereit ist:

 # graid status
    Name   Status  Components
 raid/r0  OPTIMAL  ada0 (ACTIVE (ACTIVE))
                   ada1 (ACTIVE (ACTIVE))

   Das Array-Gera:t erscheint in /dev/raid/. Das erste Gera:t heisst r0.
   Falls weitere Gera:te vorhanden sind heissen diese r1, r2 und so weiter.

   Das BIOS-Menu: einiger Gera:te erstellt Arrays mit Sonderzeichen im Namen.
   Um Probleme mit diesen Sonderzeichen zu vermeiden, werden einfache
   numerische Namen wie r0 vergeben. Um das tatsa:chliche Label anzuzeigen,
   wie gm0 im obigen Beispiel, benutzen Sie sysctl(8):

 # sysctl kern.geom.raid.name_format=1

  18.5.2. Mehrere Volumes

   Einige Software-RAID Gera:te unterstu:tzen mehr als ein Volume pro Array.
   Volumes funktionieren wie Festplatten, dass heisst der Platz auf den
   Laufwerken kann auf unterschiedliche Weise geteilt und genutzt werden.
   Intels Software-RAID Gera:te unterstu:tzen beispielsweise zwei Volumes. In
   diesem Beispiel wird ein 40 GB Spiegel verwendet um das Betriebssystem zu
   speichern, gefolgt von einem 20 GB RAID0 (Stripe) Volume fu:r die schnelle
   Speicherung von tempora:ren Daten.

 # graid label -S 40G Intel gm0 RAID1 ada0 ada1
 # graid add -S 20G gm0 RAID0

   Volumes erscheinen unter /dev/raid/ als zusa:tzliche Eintra:ge rX. Ein
   Array mit Volumes wird als r0 und r1.

   Lesen Sie graid(8) um die Anzahl der Volumes zu ermitteln, die von den
   verschiedenen Software-RAID Gera:ten unterstu:tzt wird.

  18.5.3. Ein einzelnes Laufwerk zu einem Spiegel konvertieren

   Unter bestimmten Umsta:nden ist es mo:glich, ein bestehendes Laufwerk ohne
   Neuformatierung zu einem graid(8) Array zu konvertieren. Um Datenverlust
   bei der Konvertierung zu vermeiden, mu:ssen die vorhandenen Laufwerke
   folgende Mindestanforderungen erfu:llen:

     * Das Laufwerk muss mit MBR partitioniert werden. GPT oder andere
       Partitionierungsschemata funktionieren nicht, da durch graid(8) die
       Metadaten am Ende des Laufwerks u:berschieben und bescha:digt werden.

     * Am Ende des Laufwerks muss genu:gend freier Platz zur Verfu:gung
       stehen, um die graid(8) Metadaten zu speichern. Die Metadaten
       variieren in der Gro:sse, es werden jedoch mindestens 64 MB freier
       Speicherplatz empfohlen.

   Wenn das Laufwerk diese Anforderungen erfu:llt, erstellen Sie zuerst eine
   vollsta:ndige Sicherung. Erzeugen Sie dann einen Spiegel mit diesem einen
   Laufwerk:

 # graid label Intel gm0 RAID1 ada0 NONE

   Die Metadaten von graid(8) werden in den ungenutzten Raum am Ende des
   Laufwerks geschrieben. Ein zweites Laufwerk kann nun in den Spiegel
   eingefu:gt werden:

 # graid insert raid/r0 ada1

   Die Daten von dem ersten Laufwerk werden direkt auf das zweite Laufwerk
   kopiert. Der Spiegel wird im eingeschra:nkten Zustand laufen, bis der
   Kopiervorgang abgeschlossen ist.

  18.5.4. Neue Laufwerke zum Array hinzufu:gen

   Laufwerke in einem Array ko:nnen fu:r ausgefallene oder fehlende Laufwerke
   eingesetzt werden. Falls es keine ausgefallenen oder fehlenden Laufwerke
   gibt, wird das neue Laufwerk als Ersatz (Spare) verwendet.

   Das Array in diesem Beispiel beginnt sofort damit, die Daten auf das neu
   hinzugefu:gte Laufwerk zu kopieren. Alle vorhandenen Daten auf dem neuen
   Laufwerk werden u:berschrieben.

 # graid insert raid/r0 ada1
 GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
 GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to NEW.
 GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NEW to REBUILD.
 GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 rebuild start at 0.

  18.5.5. Laufwerke aus dem Array entfernen

   Einzelne Laufwerke ko:nnen permanent aus dem Array entfernt werden. Die
   Metadaten werden dabei gelo:scht:

 # graid remove raid/r0 ada1
 GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from ACTIVE to OFFLINE.
 GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-[unknown] state changed from ACTIVE to NONE.
 GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from OPTIMAL to DEGRADED.

  18.5.6. Das Array anhalten

   Ein Array kann angehalten werden, ohne die Metadaten von den Laufwerken zu
   lo:schen. Das Array wird wieder anlaufen, wenn das System neu gestartet
   wird.

 # graid stop raid/r0

  18.5.7. Den Status des Arrays u:berpru:fen

   Der Status des Arrays kann jederzeit u:berpru:ft werden. Nachdem ein
   Laufwerk zum Array hinzugefu:gt wurde, werden die Daten vom
   urspru:nglichen Laufwerk auf das neue Laufwerk kopiert:

 # graid status
    Name    Status  Components
 raid/r0  DEGRADED  ada0 (ACTIVE (ACTIVE))
                    ada1 (ACTIVE (REBUILD 28%))

   Andere Arten von Arrays, wie RAID0 oder CONCAT, werden den Status eines
   fehlgeschlagenen Laufwerks vielleicht nicht anzeigen. Um diese teilweise
   ausgefallenen Arrays anzuzeigen, fu:gen Sie -ga hinzu:

 # graid status -ga
           Name  Status  Components
 Intel-e2d07d9a  BROKEN  ada6 (ACTIVE (ACTIVE))

  18.5.8. Arrays lo:schen

   Arrays werden zersto:rt, indem alle Volumes gelo:scht werden. Wenn das
   letzte Volume gelo:scht wird, wird das Array gestoppt und die Metadaten
   von den Laufwerken entfernt:

 # graid delete raid/r0

  18.5.9. Unerwartete Arrays lo:schen

   Laufwerke ko:nnen unerwartete graid(8) Metadaten enthalten, entweder aus
   fru:herer Nutzung oder aus Tests des Herstellers. graid(8) wu:rde diese
   Metadaten erkennen und daraus ein Array erstellen, was den Zugriff auf die
   einzelnen Laufwerke beeintra:chtigen wu:rde. Um die unerwu:nschten
   Metadaten zu entfernen:

    1. Booten Sie das System. Im Boot-Menu: wa:hlen Sie 2 fu:r den
       Loader-Prompt. Geben Sie dann folgendes ein:

 OK set kern.geom.raid.enable=0
 OK boot

       Das System wird nun mit deaktiviertem graid(8) starten.

    2. Sichern Sie alle Daten auf dem betroffenen Laufwerk.

    3. Zur Abhilfe kann auch die Array-Erkennung von graid(8) deaktiviert
       werden, indem

 kern.geom.raid.enable=0

       in /boot/loader.conf hinzugefu:gt wird.

       Um die graid(8) Metadaten von dem entsprechenden Laufwerk zu
       entfernen, booten Sie vom FreeBSD Installationsmedium und wa:hlen Sie
       Shell aus. Benutzen Sie status, um den Namen des Arrays zu bestimmten,
       typischerweise raid/r0:

 # graid status
    Name   Status  Components
 raid/r0  OPTIMAL  ada0 (ACTIVE (ACTIVE))
                   ada1 (ACTIVE (ACTIVE))

       Lo:schen Sie das Volume:

 # graid delete raid/r0

       Wiederholen Sie den Vorgang fu:r jedes Volume. Nachdem das letzte
       Volume gelo:scht wurde, wird das Volume zersto:rt.

       Starten Sie das System neu und pru:fen die Vollsta:ndigkeit der Daten.
       Falls erforderlich, mu:ssen die Daten aus der Sicherung
       wiederhergestellt werden. Nachdem die Metadaten entfernt wurden, kann
       auch der Eintrag kern.geom.raid.enable=0 aus /boot/loader.conf
       entfernt werden.

18.6. GEOM Gate Netzwerk

   GEOM unterstu:tzt einen einfachen Mechanismus fu:r den Zugriff auf
   entfernte Gera:te wie Festplatten, CDs und Dateien, durch die Verwendung
   des GEOM Gate Netzwerk Daemons, ggated. Der Server-Dameon la:uft auf dem
   System, welches ein Gera:t anbietet und bearbeitet die ggatec-Anfragen der
   Clients. Die Gera:te sollten keine sensiblen Daten enthalten, da die
   Verbindung zwischen Client und Server nicht verschlu:sselt ist.

   A:hnlich wie bei NFS, das in Abschnitt 28.3, "Network File System (NFS)"
   beschrieben ist, wird fu:r die Konfiguration von ggated eine Exportdatei
   verwendet. Diese Datei legt fest, welche Systeme auf die exportierten
   Ressourcen zugreifen ko:nnen und in welchem Umfang der Zugriff gestattet
   wird. Um dem Client 192.168.1.5 Lese- und Schreibzugriff auf die vierte
   Slice der ersten SCSI-Platte zu geben, erstellen Sie /etc/gg.exports mit
   folgender Zeile:

 192.168.1.5 RW /dev/da0s4d

   Bevor das Gera:t exportiert werden kann, mu:ssen Sie sicherstellen, dass
   es nicht bereits gemountet ist. Anschliessend starten Sie ggated.

 # ggated

   Es stehen mehrere Optionen bereit, mit denen zum Beispiel ein alternativer
   Port oder eine alternative Exportdatei festgelegt werden kann. Weitere
   Einzelheiten finden Sie in ggated(8).

   Damit ein Client auf das exportierte Gera:t zugreifen kann, benutzten Sie
   ggatec zusammen mit der IP-Adresse des Servers und dem entsprechenden
   Gera:tenamen. Wenn dies erfolgreich ist, zeigt dieser Befehl einen
   ggate-Gera:tenamen. Ha:ngen Sie dieses Gera:t in einen freien Mountpunkt
   ein. Dieses Beispiel verbindet sich mit der Partition /dev/da0s4d auf
   192.168.1.1 und ha:ngt /dev/ggate0 in /mnt ein:

 # ggatec create -o rw 192.168.1.1 /dev/da0s4d
 ggate0
 # mount /dev/ggate0 /mnt

   Auf das Gera:t des Servers kann jetzt u:ber den Mountpunkt /mnt des
   Clients zugegriffen werden. Weitere Informationen u:ber ggatec und einige
   Anwendungsbeispiele finden Sie in ggatec(8).

  Anmerkung:

   Das Einha:ngen des Gera:tes wird scheitern, falls das Gera:t momentan
   entweder auf dem Server oder einem Client im Netzwerk gemountet ist. Wenn
   ein gleichzeitiger Zugriff auf die Netzwerkressourcen beno:tigt wird,
   verwenden Sie stattdessen NFS.

   Wenn das Gera:t nicht la:nger gebraucht wird, kann es mit umount(8)
   ausgeha:ngt werden, so dass die Ressourcen fu:r andere Client wieder
   verfu:gbar sind.

18.7. Das Labeln von Laufwerken

   Wa:hrend der Initialisierung des Systems legt der FreeBSD-Kernel fu:r
   jedes gefundene Gera:t Knotenpunkte an. Diese Methode fu:r die
   U:berpru:fung auf vorhandene Gera:te wirft einige Fragen auf. Was passiert
   beispielsweise, wenn ein neues USB-Laufwerk hinzugefu:gt wird? Es ist sehr
   wahrscheinlich, dass ein Flash-Speicher-Gera:t den Gera:tenamen da0
   erha:lt, wa:hrend gleichzeitig das bisherige da0 zu da1 wird. Dies
   verursacht Probleme beim Einha:ngen von Dateisystemen, wenn diese in
   /etc/fstab aufgefu:hrt sind und kann dazu fu:hren, dass das System nicht
   mehr startet.

   Eine Lo:sung fu:r dieses Problem ist das Aneinanderketten der
   SCSI-Gera:te, damit ein neues Gera:t, welches der SCSI-Karte hinzugefu:gt
   wird, unbenutzte Gera:tenummern erha:lt. Aber was geschieht, wenn ein
   USB-Gera:t mo:glicherweise die prima:re SCSI-Platte ersetzt? Dies kann
   passieren, weil USB-Gera:te normalerweise vor der SCSI-Karte gepru:ft
   werden. Eine Lo:sung ist das Hinzufu:gen dieser Gera:te, nachdem das
   System gestartet ist. Eine andere Lo:sung ko:nnte sein, nur ein einzelnes
   ATA-Laufwerk zu nutzen und die SCSI-Gera:te niemals in der /etc/fstab
   aufzufu:hren.

   Eine bessere Lo:sung ist die Verwendung von glabel, um die Laufwerke zu
   mit Labeln zu versehen und diese in /etc/fstab zu nutzen. Da glabel seine
   Label im letzten Sektor jedes vorhandenen Datentra:gers speichert, wird
   das Label persistent bleiben (auch u:ber Neustarts hinweg). Durch Nutzung
   dieses Labels als Gera:t kann das Dateisystem immer gemountet sein,
   unabha:ngig davon, durch welchen Gera:te-Knotenpunkt auf ihn zugegriffen
   wird.

  Anmerkung:

   glabel kann permanente (dauerhaft) und voru:bergehende Label erstellen.
   Aber nur dauerhafte Label bleiben konsistent u:ber Neustarts hinweg. Lesen
   Sie die glabel(8) fu:r weitere Unterschiede zwischen den Label-Typen.

  18.7.1. Label-Typen und Beispiele

   Permanente Label ko:nnen generische Label oder Dateisystem-Label sein.
   Permanente Dateisystem-Label ko:nnen mit tunefs(8) oder newfs(8) erzeugt
   werden. Dieser Typ von Label wird in einem Unterverzeichnis von /dev
   angelegt und wird dem Dateisystem entsprechend benannt.
   UFS2-Dateisystem-Label werden zum Beispiel in /dev/ufs angelegt.
   Permanente Label ko:nnen ausserdem durch den Befehl glabel label erzeugt
   werden. Diese Label sind nicht dateisystemspezisch und werden im
   Unterverzeichnis /dev/label erzeugt.

   Tempora:re Label werden beim na:chsten Systemstart zersto:rt. Diese Label
   werden im Verzeichnis /dev/label erzeugt und sind ideal fu:r Testzwecke.
   Ein tempora:res Label kann mit glabel create erzeugt werden.

   Um ein permanentes Label auf einem UFS2-Dateisystem ohne Lo:schung von
   Daten zu erzeugen, kann man folgenden Befehl verwenden:

 # tunefs -L home /dev/da3

   In /dev/ufs sollte nun ein Label vorhanden sein, welches zu /etc/fstab
   hinzugefu:gt werden kann:

 /dev/ufs/home           /home            ufs     rw              2      2

  Anmerkung:

   Das Dateisystem darf nicht gemountet sein beim Versuch, tunefs
   auszufu:hren.

   Nun kann das Dateisystem eingeha:ngt werden:

 # mount /home

   Von nun an kann der Gera:te-Knotenpunkt sich ohne negative Effekte auf das
   System a:ndern, solange das Kernelmodul geom_label.ko beim Systemstart
   mittels /boot/loader.conf geladen wird oder die GEOM_LABEL-Kernel-Option
   aktiv ist.

   Dateisysteme ko:nnen auch mit einem Standard-Label erzeugt werden (mittels
   des Flags -L in newfs). Lesen Sie newfs(8) fu:r weitere Informationen.

   Der folgende Befehl kann genutzt werden, um das Label zu beseitigen:

 # glabel destroy home

   Das folgende Beispiel zeigt Ihnen, wie Sie Label fu:r die Partitionen
   einer Bootplatte erzeugen.

   Beispiel 18.1. Die Partitionen einer Bootplatte labeln

   Durch das Erstellen von permanenten Labeln fu:r die Partitionen einer
   Bootplatte sollte das System selbst dann noch normal starten ko:nnen, wenn
   Sie die Platte an einen anderen Controller anschliessen oder in ein
   anderes System installieren. In diesem Beispiel nehmen wir an, dass nur
   eine einzige ATA-Platte verwendet wird, die das System derzeit als ad0
   erkennt. Weiters nehmen wir an, dass Sie das Standard-Partionierungsschema
   von FreeBSD vewendet haben und die Platte daher die Dateisysteme /, /var,
   /usr sowie /tmp aufweist. Zusa:tzlich wurde eine Swap-Partition angelegt.

   Starten Sie das System neu. Am loader(8)-Prompt dru:cken Sie die Taste 4,
   um in den Single-User-Modus zu gelangen. Dort fu:hren Sie die folgenden
   Befehle aus:

 # glabel label rootfs /dev/ad0s1a
 GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
 # glabel label var /dev/ad0s1d
 GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
 # glabel label usr /dev/ad0s1f
 GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
 # glabel label tmp /dev/ad0s1e
 GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
 # glabel label swap /dev/ad0s1b
 GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
 # exit

   Das System startet daraufhin in den Multi-User-Modus. Nachdem der
   Startvorgang abgeschlossen ist, editieren Sie /etc/fstab und ersetzen die
   konventionellen Gera:tedateien durch die entsprechenden Label. Die
   modifizierte /etc/fstab sollte wie folgt aussehen:

 # Device                Mountpoint      FStype  Options         Dump    Pass#
 /dev/label/swap         none            swap    sw              0       0
 /dev/label/rootfs       /               ufs     rw              1       1
 /dev/label/tmp          /tmp            ufs     rw              2       2
 /dev/label/usr          /usr            ufs     rw              2       2
 /dev/label/var          /var            ufs     rw              2       2

   Starten Sie das System neu. Treten keine Probleme auf, wird das System
   normal hochfahren und Sie erhalten die folgende Ausgabe, wenn Sie den
   Befehl mount ausfu:hren:

 # mount
 /dev/label/rootfs on / (ufs, local)
 devfs on /dev (devfs, local)
 /dev/label/tmp on /tmp (ufs, local, soft-updates)
 /dev/label/usr on /usr (ufs, local, soft-updates)
 /dev/label/var on /var (ufs, local, soft-updates)

   glabel(8) unterstu:tzt einen Labeltyp fu:r UFS-Dateisysteme. Dieser
   basiert auf der eindeutigen Dateisystem-ID ufsid. Derartige Label finden
   sich in /dev/ufsid und werden wa:hrend des Systemstarts automatisch
   erzeugt. Es ist mo:glich, diese ufsid-Label zum automatischen Einha:ngen
   von Partitionen in /etc/fstab einzusetzen. Verwenden Sie glabel status, um
   eine Liste aller Dateisysteme und ihrer ufsid-Label zu erhalten:

 % glabel status
                   Name  Status  Components
 ufsid/486b6fc38d330916     N/A  ad4s1d
 ufsid/486b6fc16926168e     N/A  ad4s1f

   In diesem Beispiel repra:sentiert ad4s1d das /var-Dateisystem, wa:hrend
   ad4s1f dem /usr-Dateisystem entspricht. Wenn Sie die angegebenen
   ufsid-Werte verwenden, ko:nnen diese Dateisysteme durch die folgenden
   Eintra:ge in der Datei /etc/fstab gemountet werden:

 /dev/ufsid/486b6fc38d330916        /var        ufs        rw        2      2
 /dev/ufsid/486b6fc16926168e        /usr        ufs        rw        2      2

   Jede Partition, die ein ufsid-Label aufweist, kann auf diese Art gemountet
   werden. Dies hat den Vorteil, dass Sie die permanenten Label nicht manuell
   anlegen mu:ssen, wobei sich die Platten nach wie vor u:ber
   gera:teunabha:ngige Namen ansprechen und einha:ngen lassen.

18.8. UFS Journaling in GEOM

   FreeBSD unterstu:tzt Journaling fu:r UFS-Dateisysteme. Diese Funktion wird
   u:ber das GEOM-Subsystem realisiert und kann u:ber das Werkzeug
   gjournal(8) eingerichtet werden. Im Gegensatz zu anderen
   Journaling-Dateisystemen arbeitet gjournal blockbasiert und wurde nicht
   als Teil des Dateisystems implementiert, sondern als GEOM-Erweiterung.

   Bei Journaling wird ein Protokoll u:ber alle Dateisystemtransaktionen
   angelegt, inklusive aller Vera:nderungen, aus denen ein kompletter
   Schreibvorgang besteht, bevor diese A:nderungen (Metadaten sowie
   tatsa:chliche Schreibvorga:nge) physisch auf der Festplatte ausgefu:hrt
   werden. Dieses Protokoll kann spa:ter erneut aufgerufen werden, um diese
   Vorga:nge zu wiederholen, damit Systeminkonsistenzen vermieden werden.

   Diese Technik bietet eine weitere Mo:glichkeit, sich vor Datenverlust und
   Dateisystem-Inkonsistenzen zu schu:tzen. Im Gegensatz zu Soft Updates (die
   Metadaten-Aktualisierungen verfolgen und erzwingen) und Snapshots (die ein
   Image eines Dateisystems darstellen) wird bei Journaling ein
   tatsa:chliches Protokoll in einem speziell dafu:r bereitgestellten Bereich
   der Festplatte gespeichert. Um die Leistung zu optimieren, kann das
   Journal auf eine externe Platte ausgelagert werden. In einem solchen Fall
   geben Sie die Gera:tedatei der Platte nach dem Gera:t an, fu:r das Sie
   Journaling aktivieren wollen.

   Der GENERIC-Kernel bietet Unterstu:tzung fu:r gjournal. Damit das
   Kernelmodul geom_journal.ko beim Booten automatisch geladen wird, fu:gen
   Sie folgende Zeile in /boot/loader.conf hinzu:

 geom_journal_load="YES"

   Wenn ein angepasster Kernel benutzt wird, stellen Sie sicher, dass
   folgende Zeile in der Kernelkonfigurationsdatei enthalten ist:

 options     GEOM_JOURNAL

   Sobald das Modul geladen ist, kann ein Journal auf einem neuen Dateisystem
   erstellt werden. In diesem Beispiel ist da4 die neue SCSI-Platte:

 # gjournal load
 # gjournal label /dev/da4

   Diese Befehle laden das Modul und erstellen die Gera:tedatei
   /dev/da4.journal auf /dev/da4.

   Nun kann auf dem neuen Gera:t ein UFS-Dateisystem erstellt werden, welches
   dann in den Verzeichnisbaum eingeha:ngt wird:

 # newfs -O 2 -J /dev/da4.journal
 # mount /dev/da4.journal /mnt

  Anmerkung:

   Falls auf dem System mehrere Slices angelegt sind (beispielsweise ad4s1
   sowie ad4s2), wird gjournal fu:r jedes Slice ein Journal anlegen (also
   ad4s1.journal sowie ad4s2.journal).

   Mit tunefs ist es auch mo:glich, Journaling auf bereits existierenden
   Dateisystemen zu aktivieren. Machen Sie aber immer eine Sicherung der
   Daten, bevor Sie versuchen, ein existierendes Dateisystem zu a:ndern.
   gjournal wird zwar den Vorgang abbrechen, wenn es das Journal nicht
   erzeugen kann, allerdings schu:tzt dies nicht vor Datenverlust durch einen
   fehlerhaften Einsatz von tunefs. Weitere Informationen u:ber diese beiden
   Werkzeuge finden Sie in gjournal(8) und tunefs(8).

   Es ist mo:glich, Journale auch fu:r die Bootplatte eines FreeBSD-Systems
   zu verwenden. Der Artikel Implementing UFS Journaling on a Desktop PC
   entha:lt eine ausfu:hrliche Anleitung zu diesem Thema.

Kapitel 19. Das Z-Dateisystem (ZFS)

   Geschrieben von Tom Rhodes, Allan Jude, Benedict Reuschling und Warren
   Block.
   U:bersetzt von Benedict Reuschling.
   Inhaltsverzeichnis

   19.1. Was ZFS anders macht

   19.2. Schnellstartanleitung

   19.3. zpool Administration

   19.4. zfs Administration

   19.5. Delegierbare Administration

   19.6. Themen fu:r Fortgeschrittene

   19.7. Zusa:tzliche Informationen

   19.8. ZFS-Eigenschaften und Terminologie

   Das Z-Dateisystem, oder kurz ZFS, ist ein fortgeschrittenes Dateisystem,
   das entwickelt wurde, um viele der grossen Probleme in vorherigen
   Entwicklungen zu u:berwinden.

   Urspru:nglich von Sun(TM) entworfen, wird die weitere Entwicklung von ZFS
   heutzutage als Open Source vom OpenZFS Projekt vorangetrieben.

   ZFS hat drei grosse Entwurfsziele:

     * Datenintegrita:t: Alle Daten enthalten eine Pru:fsumme (checksum) der
       Daten. Wenn Daten geschrieben werden, wird die Pru:fsumme berechnet
       und zusammen mit den Daten gespeichert. Wenn diese Daten spa:ter
       wieder eingelesen werden, wird diese Pru:fsumme erneut berechnet.
       Falls die Pru:fsummen nicht u:bereinstimmen, wurde ein Datenfehler
       festgestellt. ZFS wird versuchen, diesen Fehler automatisch zu
       korrigieren, falls genug Datenredundanz vorhanden ist.

     * Gepoolter Speicher: physikalische Speichermedien werden zu einem Pool
       zusammengefasst und der Speicherplatz wird von diesem gemeinsam
       genutzten Pool allokiert. Der Speicherplatz steht allen Dateisystemen
       zur Verfu:gung und kann durch das Hinzufu:gen von neuen Speichermedien
       vergro:ssert werden.

     * Geschwindigkeit: mehrere Zwischenspeichermechanismen sorgen fu:r
       erho:hte Geschwindigkeit. Der ARC ist ein weiterentwickelter,
       hauptspeicherbasierter Zwischenspeicher fu:r Leseanfragen. Auf einer
       zweiten Stufe kann ein plattenbasierter L2ARC-Lesezwischenspeicher
       hinzugefu:gt werden. Zusa:tzlich ist auch noch ein plattenbasierter,
       synchroner Schreibzwischenspeicher verfu:gbar, der sog. ZIL.

   Eine vollsta:ndige Liste aller Eigenschaften und der dazugeho:rigen
   Terminologie ist in Abschnitt 19.8, "ZFS-Eigenschaften und Terminologie"
   zu sehen.

19.1. Was ZFS anders macht

   ZFS ist signifikant unterschiedlich zu allen bisherigen Dateisystemen,
   weil es mehr als nur ein Dateisystem ist. Durch die Kombination von
   traditionell getrennten Rollen von Volumenmanager und Dateisystem ist ZFS
   mit einzigartigen Vorteilen ausgestattet. Das Dateisystem besitzt jetzt
   Kenntnis von der zugrundeliegenden Struktur der Speichermedien.
   Traditionelle Dateisysteme konnten nur auf einer einzigen Platte
   gleichzeitig angelegt werden. Falls es zwei Festplatten gab, mussten auch
   zwei getrennte Dateisysteme erstellt werden. In einer traditionellen
   Hardware-RAID-Konfiguration wurde dieses Problem umgangen, indem dem
   Betriebssystem nur eine einzige logische Platte angezeigt wurde, die sich
   aus dem Speicherplatz von der Anzahl an physischen Platten zusammensetzte,
   auf dem dann das Betriebssystem ein Dateisystem erstellte. Sogar im Fall
   von Software-RAID-Lo:sungen, wie die, die von GEOM bereitgestellt werden,
   war das UFS-Dateisystem der Ansicht, dass es auf nur einem einzigen Gera:t
   angelegt wurde. ZFS's Kombination eines Volumenmanagers und eines
   Dateisystems lo:st dies und erlaubt das Erstellen von vielen
   Dateisystemen, die sich alle den darunterliegenden Pool aus verfu:gbarem
   Speicher teilen. Einer der gro:ssten Vorteile von ZFS's Kenntnis des
   physikalischen Layouts der Platten ist, dass existierende Dateisysteme
   automatisch wachsen ko:nnen, wenn zusa:tzliche Platten zum Pool
   hinzugefu:gt werden. Dieser neue Speicherplatz wird dann allen
   Dateisystemen zur Verfu:gung gestellt. ZFS besitzt ebenfalls eine Menge an
   unterschiedlichen Eigenschaften, die fu:r jedes Dateisystem angepasst
   werden ko:nnen, was viele Vorteile bringt, wenn man unterschiedliche
   Dateisysteme und Datasets anlegt, anstatt ein einziges, monolithisches
   Dateisystem zu erzeugen.

19.2. Schnellstartanleitung

   Es existiert ein Startmechanismus, der es FreeBSD erlaubt, ZFS-Pools
   wa:hrend der Systeminitialisierung einzubinden. Um diesen zu aktivieren,
   fu:gen Sie diese Zeile in /etc/rc.conf ein:

 zfs_enable="YES"

   Starten Sie dann den Dienst:

 # service zfs start

   Die Beispiele in diesem Abschnitt gehen von drei SCSI-Platten mit den
   Gera:tenamen da0, da1 und da2 aus. Nutzer von SATA-Hardware sollten
   stattdessen die Bezeichnung ada als Gera:tenamen verwenden.

  19.2.1. Pools mit einer Platte

   Um einen einfachen, nicht-redundanten Pool mit einem einzigen Gera:t
   anzulegen, geben Sie folgendes ein:

 # zpool create example /dev/da0

   Um den neuen Pool anzuzeigen, pru:fen Sie die Ausgabe von df:

 # df
 Filesystem  1K-blocks    Used    Avail Capacity  Mounted on
 /dev/ad0s1a   2026030  235230  1628718    13%    /
 devfs               1       1        0   100%    /dev
 /dev/ad0s1d  54098308 1032846 48737598     2%    /usr
 example      17547136       0 17547136     0%    /example

   Diese Ausgabe zeigt, dass der example-Pool erstellt und eingeha:ngt wurde.
   Er ist nun als Dateisystem verfu:gbar. Dateien ko:nnen darauf angelegt
   werden und Anwender ko:nnen sich den Inhalt ansehen:

 # cd /example
 # ls
 # touch testfile
 # ls -al
 total 4
 drwxr-xr-x   2 root  wheel    3 Aug 29 23:15 .
 drwxr-xr-x  21 root  wheel  512 Aug 29 23:12 ..
 -rw-r--r--   1 root  wheel    0 Aug 29 23:15 testfile

   Allerdings nutzt dieser Pool noch keine der Vorteile von ZFS. Um ein
   Dataset auf diesem Pool mit aktivierter Komprimierung zu erzeugen, geben
   Sie ein:

 # zfs create example/compressed
 # zfs set compression=gzip example/compressed

   Das example/compressed-Dataset ist nun ein komprimiertes ZFS-Dateisystem.
   Versuchen Sie, ein paar grosse Dateien auf /example/compressed zu
   kopieren.

   Deaktivieren la:sst sich die Komprimierung durch:

 # zfs set compression=off example/compressed

   Um ein Dateisystem abzuha:ngen, verwenden Sie zfs umount und u:berpru:fen
   Sie dies anschliessend mit df:

 # zfs umount example/compressed
 # df
 Filesystem  1K-blocks    Used    Avail Capacity  Mounted on
 /dev/ad0s1a   2026030  235232  1628716    13%    /
 devfs               1       1        0   100%    /dev
 /dev/ad0s1d  54098308 1032864 48737580     2%    /usr
 example      17547008       0 17547008     0%    /example

   Um das Dateisystem wieder einzubinden und erneut verfu:gbar zu machen,
   verwenden Sie zfs mount und pru:fen Sie erneut mit df:

 # zfs mount example/compressed
 # df
 Filesystem         1K-blocks    Used    Avail Capacity  Mounted on
 /dev/ad0s1a          2026030  235234  1628714    13%    /
 devfs                      1       1        0   100%    /dev
 /dev/ad0s1d         54098308 1032864 48737580     2%    /usr
 example             17547008       0 17547008     0%    /example
 example/compressed  17547008       0 17547008     0%    /example/compressed

   Den Pool und die Dateisysteme ko:nnen Sie auch u:ber die Ausgabe von mount
   pru:fen:

 # mount
 /dev/ad0s1a on / (ufs, local)
 devfs on /dev (devfs, local)
 /dev/ad0s1d on /usr (ufs, local, soft-updates)
 example on /example (zfs, local)
 example/compressed on /example/compressed (zfs, local)

   Nach der Erstellung ko:nnen ZFS-Datasets wie jedes andere Dateisystem
   verwendet werden. Jedoch sind jede Menge andere Besonderheiten verfu:gbar,
   die individuell auf Dataset-Basis eingestellt sein ko:nnen. Im Beispiel
   unten wird ein neues Dateisystem namens data angelegt. Wichtige Dateien
   werden dort abgespeichert, deshalb wird es so konfiguriert, dass zwei
   Kopien jedes Datenblocks vorgehalten werden.

 # zfs create example/data
 # zfs set copies=2 example/data

   Es ist jetzt mo:glich, den Speicherplatzverbrauch der Daten durch die
   Eingabe von df zu sehen:

 # df
 Filesystem         1K-blocks    Used    Avail Capacity  Mounted on
 /dev/ad0s1a          2026030  235234  1628714    13%    /
 devfs                      1       1        0   100%    /dev
 /dev/ad0s1d         54098308 1032864 48737580     2%    /usr
 example             17547008       0 17547008     0%    /example
 example/compressed  17547008       0 17547008     0%    /example/compressed
 example/data        17547008       0 17547008     0%    /example/data

   Sie haben vermutlich bemerkt, dass jedes Dateisystem auf dem Pool die
   gleiche Menge an verfu:gbarem Speicherplatz besitzt. Das ist der Grund
   dafu:r, dass in diesen Beispielen df verwendet wird, um zu zeigen, dass
   die Dateisysteme nur die Menge an Speicher verbrauchen, den sie beno:tigen
   und alle den gleichen Pool verwenden. ZFS eliminiert Konzepte wie Volumen
   und Partitionen und erlaubt es mehreren Dateisystemen den gleichen Pool zu
   belegen.

   Um das Dateisystem und anschliessend den Pool zu zersto:ren, wenn dieser
   nicht mehr beno:tigt wird, geben Sie ein:

 # zfs destroy example/compressed
 # zfs destroy example/data
 # zpool destroy example

  19.2.2. RAID-Z

   Platten fallen aus. Eine Methode, um Datenverlust durch Festplattenausfall
   zu vermeiden, ist die Verwendung von RAID. ZFS unterstu:tzt dies in seiner
   Poolgestaltung. Pools mit RAID-Z beno:tigen drei oder mehr Platten, bieten
   aber auch mehr nutzbaren Speicher als gespiegelte Pools.

   Dieses Beispiel erstellt einen RAID-Z-Pool, indem es die Platten angibt,
   die dem Pool hinzugefu:gt werden sollen:

 # zpool create storage raidz da0 da1 da2

  Anmerkung:

   Sun(TM) empfiehlt, dass die Anzahl der Gera:te in einer RAID-Z
   Konfiguration zwischen drei und neun betra:gt. Fu:r Umgebungen, die einen
   einzelnen Pool beno:tigen, der aus 10 oder mehr Platten besteht, sollten
   Sie in Erwa:gung ziehen, diesen in kleinere RAID-Z-Gruppen aufzuteilen.
   Falls nur zwei Platten verfu:gbar sind und Redundanz beno:tigt wird,
   ziehen Sie die Verwendung eines ZFS-Spiegels (mirror) in Betracht. Lesen
   Sie dazu zpool(8), um weitere Details zu erhalten.

   Das vorherige Beispiel erstellte einen ZPool namens storage. Dieses
   Beispiel erzeugt ein neues Dateisystem, genannt home, in diesem Pool:

 # zfs create storage/home

   Komprimierung und das Vorhalten von mehreren Kopien von Dateien und
   Verzeichnissen kann aktiviert werden:

 # zfs set copies=2 storage/home
 # zfs set compression=gzip storage/home

   Um dies als das neue Heimatverzeichnis fu:r Anwender zu setzen, kopieren
   Sie die Benutzerdaten in dieses Verzeichnis und erstellen passende
   symbolische Verknu:pfungen:

 # cp -rp /home/* /storage/home
 # rm -rf /home /usr/home
 # ln -s /storage/home /home
 # ln -s /storage/home /usr/home

   Daten von Anwendern werden nun auf dem frisch erstellten /storage/home
   abgelegt. U:berpru:fen Sie dies durch das Anlegen eines neuen Benutzers
   und das anschliessende Anmelden als dieser Benutzer.

   Versuchen Sie, einen Dateisystemschnappschuss anzulegen, den Sie spa:ter
   wieder zuru:ckrollen ko:nnen:

 # zfs snapshot storage/home@08-30-08

   Schnappschu:sse ko:nnen nur auf einem Dateisystem angelegt werden, nicht
   auf einem einzelnen Verzeichnis oder einer Datei.

   Das Zeichen @ ist der Trenner zwischen dem Dateisystem- oder dem
   Volumennamen. Wenn ein wichtiges Verzeichnis aus Versehen gelo:scht wurde,
   kann das Dateisystem gesichert und dann zu einem fru:heren Schnappschuss
   zuru:ckgerollt werden, in welchem das Verzeichnis noch existiert:

 # zfs rollback storage/home@08-30-08

   Um all verfu:gbaren Schnappschu:sse aufzulisten, geben Sie ls im
   Verzeichnis .zfs/snapshot dieses Dateisystems ein. Beispielsweise la:sst
   sich der zuvor angelegte Schnappschuss wie folgt anzeigen:

 # ls /storage/home/.zfs/snapshot

   Es ist mo:glich, ein Skript zu schreiben, um regelma:ssig Schnappschu:sse
   von Benutzerdaten anzufertigen. Allerdings verbrauchen Schnappschu:sse
   u:ber lange Zeit eine grosse Menge an Speicherplatz. Der zuvor angelegte
   Schnappschuss kann durch folgendes Kommando wieder entfernt werden:

 # zfs destroy storage/home@08-30-08

   Nach erfolgreichen Tests kann /storage/home zum echten /home-Verzeichnis
   werden, mittels:

 # zfs set mountpoint=/home storage/home

   Pru:fen Sie mit df und mount, um zu besta:tigen, dass das System das
   Dateisystem nun als /home verwendet:

 # mount
 /dev/ad0s1a on / (ufs, local)
 devfs on /dev (devfs, local)
 /dev/ad0s1d on /usr (ufs, local, soft-updates)
 storage on /storage (zfs, local)
 storage/home on /home (zfs, local)
 # df
 Filesystem   1K-blocks    Used    Avail Capacity  Mounted on
 /dev/ad0s1a    2026030  235240  1628708    13%    /
 devfs                1       1        0   100%    /dev
 /dev/ad0s1d   54098308 1032826 48737618     2%    /usr
 storage       26320512       0 26320512     0%    /storage
 storage/home  26320512       0 26320512     0%    /home

   Damit ist die RAID-Z Konfiguration abgeschlossen. Ta:gliche Informationen
   u:ber den Status der erstellten Dateisysteme ko:nnen als Teil des
   na:chtlichen periodic(8)-Berichts generiert werden. Fu:gen Sie dazu die
   folgende Zeile in /etc/periodic.conf ein:

 daily_status_zfs_enable="YES"

  19.2.3. RAID-Z wiederherstellen

   Jedes Software-RAID besitzt eine Methode, um den Zustand (state) zu
   u:berpru:fen. Der Status von RAID-Z Gera:ten wird mit diesem Befehl
   angezeigt:

 # zpool status -x

   Wenn alle Pools Online sind und alles normal ist, zeigt die Meldung
   folgendes an:

 all pools are healthy

   Wenn es ein Problem gibt, womo:glich ist eine Platte im Zustand Offline,
   dann wird der Poolzustand a:hnlich wie dieser aussehen:

   pool: storage
  state: DEGRADED
 status: One or more devices has been taken offline by the administrator.
         Sufficient replicas exist for the pool to continue functioning in a
         degraded state.
 action: Online the device using 'zpool online' or replace the device with
         'zpool replace'.
  scrub: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         storage     DEGRADED     0     0     0
           raidz1    DEGRADED     0     0     0
             da0     ONLINE       0     0     0
             da1     OFFLINE      0     0     0
             da2     ONLINE       0     0     0

 errors: No known data errors

   Dies zeigt an, dass das Gera:t zuvor vom Administrator mit diesem Befehl
   abgeschaltet wurde:

 # zpool offline storage da1

   Jetzt kann das System heruntergefahren werden, um da1 zu ersetzen. Wenn
   das System wieder eingeschaltet wird, kann die fehlerhafte Platte im Pool
   ersetzt werden:

 # zpool replace storage da1

   Von diesem Punkt an kann der Status erneut gepru:ft werden. Dieses Mal
   ohne die Option -x, damit alle Pools angezeigt werden:

 # zpool status storage
  pool: storage
  state: ONLINE
  scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008
 config:

         NAME        STATE     READ WRITE CKSUM
         storage     ONLINE       0     0     0
           raidz1    ONLINE       0     0     0
             da0     ONLINE       0     0     0
             da1     ONLINE       0     0     0
             da2     ONLINE       0     0     0

 errors: No known data errors

   In diesem Beispiel ist alles normal.

  19.2.4. Daten verifizieren

   ZFS verwendet Pru:fsummen, um die Integrita:t der gespeicherten Daten zu
   gewa:hrleisten. Dies wird automatisch beim Erstellen von Dateisystemen
   aktiviert.

  Warnung:

   Pru:fsummen ko:nnen deaktiviert werden, dies wird jedoch nicht empfohlen!
   Pru:fsummen verbrauchen nur sehr wenig Speicherplatz und sichern die
   Integrita:t der Daten. Viele Eigenschaften vom ZFS werden nicht richtig
   funktionieren, wenn Pru:fsummen deaktiviert sind. Es gibt keinen
   merklichen Geschwindigkeitsunterschied durch das Deaktivieren dieser
   Pru:fsummen.

   Pru:fsummenverifikation ist unter der Bezeichnung scrubbing bekannt.
   Verifizieren Sie die Integrita:t der Daten des storage-Pools mit diesem
   Befehl:

 # zpool scrub storage

   Die Laufzeit einer U:berpru:fung ha:ngt ab von der Menge an Daten, die
   gespeichert sind. Gro:ssere Mengen an Daten beno:tigen proportional mehr
   Zeit zum u:berpru:fen. Diese U:berpru:fungen sind sehr I/O-intensiv und es
   kann auch nur eine U:berpru:fung zur gleichen Zeit durchgefu:hrt werden.
   Nachdem eine Pru:fung beendet ist, kann der Status mit dem Unterkommando
   status angezeigt werden:

 # zpool status storage
  pool: storage
  state: ONLINE
  scrub: scrub completed with 0 errors on Sat Jan 26 19:57:37 2013
 config:

         NAME        STATE     READ WRITE CKSUM
         storage     ONLINE       0     0     0
           raidz1    ONLINE       0     0     0
             da0     ONLINE       0     0     0
             da1     ONLINE       0     0     0
             da2     ONLINE       0     0     0

 errors: No known data errors

   Das Datum der letzten Pru:foperation wird angezeigt, um zu verfolgen, wann
   die na:chste Pru:fung beno:tigt wird. Routinema:ssige U:berpru:fungen
   helfen dabei, Daten vor stiller Korrumpierung zu schu:tzen und die
   Integrita:t des Pools sicher zu stellen.

   Lesen Sie zfs(8) und zpool(8), um u:ber weitere ZFS-Optionen zu erfahren.

19.3. zpool Administration

   Administration von ZFS ist unterteilt zwischen zwei Hauptkommandos. Das
   zpool-Werkzeug steuert die Operationen des Pools und ku:mmert sich um das
   Hinzufu:gen, entfernen, ersetzen und verwalten von Platten. Mit dem
   zfs-Befehl ko:nnen Datasets erstellt, zersto:rt und verwaltet werden,
   sowohl Dateisysteme als auch Volumes.

  19.3.1. Pools anlegen und zersto:ren

   Einen ZFS-Pool (zpool) anzulegen beinhaltet das Treffen von einer Reihe
   von Entscheidungen, die relativ dauerhaft sind, weil die Struktur des
   Pools nachdem er angelegt wurde, nicht mehr gea:ndert werden kann. Die
   wichtigste Entscheidung ist, welche Arten von vdevs als physische Platten
   zusammengefasst werden soll. Sehen Sie sich dazu die Liste von vdev-Arten
   an, um Details zu mo:glichen Optionen zu bekommen. Nachdem der Pool
   angelegt wurde, erlauben die meisten vdev-Arten es nicht mehr, weitere
   Gera:te zu diesem vdev hinzuzufu:gen. Die Ausnahme sind Spiegel, die das
   Hinzufu:gen von weiteren Platten zum vdev gestatten, sowie stripes, die zu
   Spiegeln umgewandelt werden ko:nnen, indem man zusa:tzliche Platten zum
   vdev anha:ngt. Obwohl weitere vdevs eingefu:gt werden ko:nnen, um einen
   Pool zu vergro:ssern, kann das Layout des Pools nach dem Anlegen nicht
   mehr vera:ndert werden. Stattdessen mu:ssen die Daten gesichert, der Pool
   zersto:rt und danach neu erstellt werden.

   Erstellen eines einfachen gespiegelten Pools:

 # zpool create mypool mirror /dev/ada1 /dev/ada2
 # zpool status
   pool: mypool
  state: ONLINE
   scan: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada1    ONLINE       0     0     0
             ada2    ONLINE       0     0     0

 errors: No known data errors

   Mehrere vdevs ko:nnen gleichzeitig angelegt werden. Geben Sie zusa:tzliche
   Gruppen von Platten, getrennt durch das vdev-Typ Schlu:sselwort, in diesem
   Beispiel mirror, an:

 # zpool create mypool mirror /dev/ada1 /dev/ada2 mirror /dev/ada3 /dev/ada4
   pool: mypool
  state: ONLINE
   scan: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada1    ONLINE       0     0     0
             ada2    ONLINE       0     0     0
           mirror-1  ONLINE       0     0     0
             ada3    ONLINE       0     0     0
             ada4    ONLINE       0     0     0

 errors: No known data errors

   Pools lassen sich auch durch die Angabe von Partitionen anstatt von ganzen
   Platten erzeugen. Durch die Verwendung von ZFS in einer separaten
   Partition ist es mo:glich, dass die gleiche Platte andere Partitionen fu:r
   andere Zwecke besitzen kann. Dies ist besonders von Interesse, wenn
   Partitionen mit Bootcode und Dateisysteme, die zum starten beno:tigt
   werden, hinzugefu:gt werden ko:nnen. Das erlaubt es, von Platten zu
   booten, die auch Teil eines Pools sind. Es gibt keinen
   Geschwindigkeitsnachteil unter FreeBSD wenn eine Partition anstatt einer
   ganzen Platte verwendet wird. Durch den Einsatz von Partitionen kann der
   Administrator die Platten unter provisionieren, indem weniger als die
   volle Kapazita:t Verwendung findet. Wenn in Zukunft eine Ersatzfestplatte
   mit der gleichen Gro:sse als die Originalplatte eine kleinere Kapazita:t
   aufweist, passt die kleinere Partition immer noch und die Ersatzplatte
   kann immer noch verwendet werden.

   Erstellen eines RAID-Z2-Pools mit Partitionen:

 # zpool create mypool raidz2 /dev/ada0p3 /dev/ada1p3 /dev/ada2p3 /dev/ada3p3 /dev/ada4p3 /dev/ada5p3
 # zpool status
   pool: mypool
  state: ONLINE
   scan: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           raidz2-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0
             ada2p3  ONLINE       0     0     0
             ada3p3  ONLINE       0     0     0
             ada4p3  ONLINE       0     0     0
             ada5p3  ONLINE       0     0     0

 errors: No known data errors

   Ein Pool, der nicht la:nger beno:tigt wird, kann zersto:rt werden, so dass
   die Platten fu:r einen anderen Einsatzzweck Verwendung finden ko:nnen. Um
   einen Pool zu zersto:ren, mu:ssen zuerst alle Datasets in diesem Pool
   abgeha:ngt werden. Wenn die Datasets verwendet werden, wird das Abha:ngen
   fehlschlagen und der Pool nicht zersto:rt. Die Zersto:rung des Pools kann
   erzwungen werden durch die Angabe der Option -f, jedoch kann dies
   undefiniertes Verhalten in den Anwendungen auslo:sen, die noch offene
   Dateien auf diesen Datasets hatten.

  19.3.2. Hinzufu:gen und Lo:schen von Gera:ten

   Es gibt zwei Fa:lle fu:r das Hinzufu:gen von Platten zu einem Pool:
   einha:ngen einer Platte zu einem existierenden vdev mit zpool attach oder
   einbinden von vdevs zum Pool mit zpool add. Nur manche vdev-Arten
   gestatten es, Platten zum vdev hinzuzufu:gen, nachdem diese angelegt
   wurden.

   Ein Pool mit nur einer einzigen Platte besitzt keine Redundanz.
   Datenverfa:lschung kann erkannt, aber nicht repariert werden, weil es
   keine weiteren Kopien der Daten gibt. Die Eigenschaft copies kann genutzt
   werden, um einen geringen Fehler wie einen bescha:digtem Sektor
   auszumerzen, entha:lt aber nicht die gleiche Art von Schutz, die
   Spiegelung oder RAID-Z bieten. Wenn man mit einem Pool startet, der nur
   aus einer einzigen vdev-Platte besteht, kann mit dem Kommando zpool attach
   eine zusta:tzliche Platte dem vdev hinzugefu:gt werden, um einen Spiegel
   zu erzeugen. Mit zpool attach ko:nnen auch zusa:tzliche Platten zu einer
   Spiegelgruppe eingefu:gt werden, was die Redundanz und Lesegeschwindigkeit
   steigert. Wenn die Platten, aus denen der Pool besteht, partitioniert
   sind, replizieren Sie das Layout der ersten Platte auf die Zweite.
   Verwenden Sie dazu gpart backup und gpart restore, um diesen Vorgang
   einfacher zu gestalten.

   Umwandeln eines (stripe) vdevs namens ada0p3 mit einer einzelnen Platte zu
   einem Spiegel durch das Einha:ngen von ada1p3:

 # zpool status
   pool: mypool
  state: ONLINE
   scan: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           ada0p3    ONLINE       0     0     0

 errors: No known data errors
 # zpool attach mypool ada0p3 ada1p3
 Make sure to wait until resilver is done before rebooting.

 If you boot from pool 'mypool', you may need to update
 boot code on newly attached disk 'ada1p3'.

 Assuming you use GPT partitioning und 'da0' is your new boot disk
 you may use the following command:

         gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
 bootcode written to ada1
 # zpool status
   pool: mypool
  state: ONLINE
 status: One or more devices is currently being resilvered.  The pool will
         continue to function, possibly in a degraded state.
 action: Wait for the resilver to complete.
   scan: resilver in progress since Fri May 30 08:19:19 2014
         527M scanned out of 781M at 47.9M/s, 0h0m to go
         527M resilvered, 67.53% done
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0  (resilvering)

 errors: No known data errors
 # zpool status
   pool: mypool
  state: ONLINE
   scan: resilvered 781M in 0h0m with 0 errors on Fri May 30 08:15:58 2014
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0

 errors: No known data errors

   Wenn das Hinzufu:gen von Platten zu einem vdev keine Option wie fu:r
   RAID-Z ist, gibt es eine Alternative, na:mlich einen anderen vdev zum Pool
   hinzuzufu:gen. Zusa:tzliche vdevs bieten ho:here Geschwindigkeit, indem
   Schreibvorga:nge u:ber die vdevs verteilt werden. Jedes vdev ist dafu:r
   verantwortlich, seine eigene Redundanz sicherzustellen. Es ist mo:glich,
   aber nicht empfehlenswert, vdev-Arten zu mischen, wie zum Beispiel mirror
   und RAID-Z. Durch das Einfu:gen eines nicht-redundanten vdev zu einem
   gespiegelten Pool oder einem RAID-Z vdev riskiert man die Daten des
   gesamten Pools. Schreibvorga:nge werden verteilt, deshalb ist der Ausfall
   einer nicht-redundanten Platte mit dem Verlust eines Teils von jedem Block
   verbunden, der auf den Pool geschrieben wird.

   Daten werden u:ber jedes vdev gestriped. Beispielsweise sind zwei
   Spiegel-vdevs effektiv ein RAID 10, dass u:ber zwei Sets von Spiegeln die
   Daten schreibt. Speicherplatz wird so allokiert, dass jedes vdev zur
   gleichen Zeit vollgeschrieben wird. Es gibt einen Geschwindigkeitsnachteil
   wenn die vdevs unterschiedliche Menge von freiem Speicher aufweisen, wenn
   eine unproportionale Menge an Daten auf das weniger volle vdev geschrieben
   wird.

   Wenn zusa:tzliche Gera:te zu einem Pool, von dem gebootet wird,
   hinzugefu:gt werden, muss der Bootcode aktualisiert werden.

   Einbinden einer zweiten Spiegelgruppe (ada2p3 und ada3p3) zu einem
   bestehenden Spiegel:

 # zpool status
   pool: mypool
  state: ONLINE
   scan: resilvered 781M in 0h0m with 0 errors on Fri May 30 08:19:35 2014
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0

 errors: No known data errors
 # zpool add mypool mirror ada2p3 ada3p3
 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2
 bootcode written to ada2
 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3
 bootcode written to ada3
 # zpool status
   pool: mypool
  state: ONLINE
   scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0
           mirror-1  ONLINE       0     0     0
             ada2p3  ONLINE       0     0     0
             ada3p3  ONLINE       0     0     0

 errors: No known data errors

   Momentan ko:nnen vdevs nicht von einem Pool entfernt und Platten nur von
   einem Spiegel ausgeha:ngt werden, wenn genug Redundanz u:brig bleibt. Wenn
   auch nur eine Platte in einer Spiegelgruppe bestehen bleibt, ho:rt der
   Spiegel auf zu existieren und wird zu einem stripe, was den gesamten Pool
   riskiert, falls diese letzte Platte ausfa:llt.

   Entfernen einer Platte aus einem Spiegel mit drei Platten:

 # zpool status
   pool: mypool
  state: ONLINE
   scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0
             ada2p3  ONLINE       0     0     0

 errors: No known data errors
 # zpool detach mypool ada2p3
 # zpool status
   pool: mypool
  state: ONLINE
   scan: scrub repaired 0 in 0h0m with 0 errors on Fri May 30 08:29:51 2014
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0

 errors: No known data errors

  19.3.3. Den Status eines Pools u:berpru:fen

   Der Status eines Pools ist wichtig. Wenn ein Gera:t sich abschaltet oder
   ein Lese-, Schreib- oder Pru:fsummenfehler festgestellt wird, wird der
   dazugeho:rige Fehlerza:hler erho:ht. Die status-Ausgabe zeigt die
   Konfiguration und den Status von jedem Gera:t im Pool und den Gesamtstatus
   des Pools. Aktionen, die durchgefu:hrt werden sollten und Details zum
   letzten scrub werden ebenfalls angezeigt.

 # zpool status
   pool: mypool
  state: ONLINE
   scan: scrub repaired 0 in 2h25m with 0 errors on Sat Sep 14 04:25:50 2013
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           raidz2-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0
             ada2p3  ONLINE       0     0     0
             ada3p3  ONLINE       0     0     0
             ada4p3  ONLINE       0     0     0
             ada5p3  ONLINE       0     0     0

 errors: No known data errors

  19.3.4. Fehler beseitigen

   Wenn ein Fehler erkannt wurde, werden die Lese-, Schreib- oder
   Pru:fsummenza:hler erho:ht. Die Fehlermeldung kann beseitigt und der
   Za:hler mit zpool clear mypool zuru:ckgesetzt werden. Den Fehlerzustand
   zuru:ckzusetzen kann wichtig sein, wenn automatisierte Skripte ablaufen,
   die den Administrator informieren, sobald der Pool Fehler anzeigt. Weitere
   Fehler werden nicht gemeldet, wenn der alte Fehlerbericht nicht entfernt
   wurde.

  19.3.5. Ein funktionierendes Gera:t ersetzen

   Es gibt eine Reihe von Situationen, in denen es no:tig ist, eine Platte
   mit einer anderen auszutauschen. Wenn eine funktionierende Platte ersetzt
   wird, ha:lt der Prozess die alte Platte wa:hrend des Ersetzungsvorganges
   noch aktiv. Der Pool wird nie den Zustand degraded erhalten, was das
   Risiko eines Datenverlustes minimiert. Alle Daten der alten Platte werden
   durch das Kommando zpool replace auf die Neue u:bertragen. Nachdem die
   Operation abgeschlossen ist, wird die alte Platte vom vdev getrennt. Falls
   die neue Platte gro:sser ist als die alte Platte , ist es mo:glich den
   Pool zu vergro:ssern, um den neuen Platz zu nutzen. Lesen Sie dazu Einen
   Pool vergro:ssern.

   Ersetzen eines funktionierenden Gera:ts in einem Pool:

 # zpool status
   pool: mypool
  state: ONLINE
   scan: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0

 errors: No known data errors
 # zpool replace mypool ada1p3 ada2p3
 Make sure to wait until resilver is done before rebooting.

 If you boot from pool 'zroot', you may need to update
 boot code on newly attached disk 'ada2p3'.

 Assuming you use GPT partitioning und 'da0' is your new boot disk
 you may use the following command:

         gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2
 # zpool status
   pool: mypool
  state: ONLINE
 status: One or more devices is currently being resilvered.  The pool will
         continue to function, possibly in a degraded state.
 action: Wait for the resilver to complete.
   scan: resilver in progress since Mon Jun  2 14:21:35 2014
         604M scanned out of 781M at 46.5M/s, 0h0m to go
         604M resilvered, 77.39% done
 config:

         NAME             STATE     READ WRITE CKSUM
         mypool           ONLINE       0     0     0
           mirror-0       ONLINE       0     0     0
             ada0p3       ONLINE       0     0     0
             replacing-1  ONLINE       0     0     0
               ada1p3     ONLINE       0     0     0
               ada2p3     ONLINE       0     0     0  (resilvering)

 errors: No known data errors
 # zpool status
   pool: mypool
  state: ONLINE
   scan: resilvered 781M in 0h0m with 0 errors on Mon Jun  2 14:21:52 2014
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada2p3  ONLINE       0     0     0

 errors: No known data errors

  19.3.6. Behandlung von fehlerhaften Gera:ten

   Wenn eine Platte in einem Pool ausfa:llt, wird das vdev zu dem diese
   Platte geho:rt, den Zustand degraded erhalten. Alle Daten sind immer noch
   verfu:gbar, jedoch wird die Geschwindigkeit mo:glicherweise reduziert,
   weil die fehlenden Daten aus der verfu:gbaren Redundanz heraus berechnet
   werden mu:ssen. Um das vdev in einen funktionierenden Zustand zuru:ck zu
   versetzen, muss das physikalische Gera:t ersetzt werden. ZFS wird dann
   angewiesen, den resilver-Vorgang zu beginnen. Daten, die sich auf dem
   defekten Gera:t befanden, werden neu aus der vorhandenen Pru:fsumme
   berechnet und auf das Ersatzgera:t geschrieben. Nach Beendigung dieses
   Prozesses kehrt das vdev zum Status online zuru:ck.

   Falls das vdev keine Redundanz besitzt oder wenn mehrere Gera:te
   ausgefallen sind und es nicht genug Redundanz gibt, um dies zu
   kompensieren, geht der Pool in den Zustand faulted u:ber. Wenn keine
   ausreichende Anzahl von Gera:ten wieder an den Pool angeschlossen wird,
   fa:llt der Pool aus und die Daten mu:ssen von Sicherungen wieder
   eingespielt werden.

   Wenn eine defekte Platte ausgewechselt wird, wird der Name dieser defekten
   Platte mit der GUID des Gera:ts ersetzt. Ein neuer Gera:tename als
   Parameter fu:r zpool replace wird nicht beno:tigt, falls das Ersatzgera:t
   den gleichen Gera:tenamen besitzt.

   Ersetzen einer defekten Platte durch zpool replace:

 # zpool status
   pool: mypool
  state: DEGRADED
 status: One or more devices could not be opened.  Sufficient replicas exist for
         the pool to continue functioning in a degraded state.
 action: Attach the missing device und online it using 'zpool online'.
    see: http://illumos.org/msg/ZFS-8000-2Q
   scan: none requested
 config:

         NAME                    STATE     READ WRITE CKSUM
         mypool                  DEGRADED     0     0     0
           mirror-0              DEGRADED     0     0     0
             ada0p3              ONLINE       0     0     0
             316502962686821739  UNAVAIL      0     0     0  was /dev/ada1p3

 errors: No known data errors
 # zpool replace mypool 316502962686821739 ada2p3
 # zpool status
   pool: mypool
  state: DEGRADED
 status: One or more devices is currently being resilvered.  The pool will
         continue to function, possibly in a degraded state.
 action: Wait for the resilver to complete.
   scan: resilver in progress since Mon Jun  2 14:52:21 2014
         641M scanned out of 781M at 49.3M/s, 0h0m to go
         640M resilvered, 82.04% done
 config:

         NAME                        STATE     READ WRITE CKSUM
         mypool                      DEGRADED     0     0     0
           mirror-0                  DEGRADED     0     0     0
             ada0p3                  ONLINE       0     0     0
             replacing-1             UNAVAIL      0     0     0
               15732067398082357289  UNAVAIL      0     0     0  was /dev/ada1p3/old
               ada2p3                ONLINE       0     0     0  (resilvering)

 errors: No known data errors
 # zpool status
   pool: mypool
  state: ONLINE
   scan: resilvered 781M in 0h0m with 0 errors on Mon Jun  2 14:52:38 2014
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada2p3  ONLINE       0     0     0

 errors: No known data errors

  19.3.7. Einen Pool u:berpru:fen

   Es wird empfohlen, dass Pools regelma:ssig gepru:ft (scrubbed) werden,
   idealerweise mindestens einmal pro Monat. Der scrub-Vorgang ist
   beansprucht die Platte sehr und reduziert die Geschwindigkeit wa:hrend er
   la:uft. Vermeiden Sie Zeiten, in denen grosser Bedarf besteht, wenn Sie
   scrub starten oder benutzen Sie vfs.zfs.scrub_delay, um die relative
   Priorita:t vom scrub einzustellen, um zu verhindern, dass es mit anderen
   Aufgaben kollidiert.

 # zpool scrub mypool
 # zpool status
   pool: mypool
  state: ONLINE
   scan: scrub in progress since Wed Feb 19 20:52:54 2014
         116G scanned out of 8.60T at 649M/s, 3h48m to go
         0 repaired, 1.32% done
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           raidz2-0  ONLINE       0     0     0
             ada0p3  ONLINE       0     0     0
             ada1p3  ONLINE       0     0     0
             ada2p3  ONLINE       0     0     0
             ada3p3  ONLINE       0     0     0
             ada4p3  ONLINE       0     0     0
             ada5p3  ONLINE       0     0     0

 errors: No known data errors

   Falls eine U:berrpu:faktion abgebrochen werden muss, geben Sie zpool scrub
   -s mypool ein.

  19.3.8. Selbstheilung

   Die Pru:fsummen, welche zusammen mit den Datenblo:cken gespeichert werden,
   ermo:glichen dem Dateisystem, sich selbst zu heilen. Diese Eigenschaft
   wird automatisch Daten korrigieren, deren Pru:fsumme nicht mit der
   Gespeicherten u:bereinstimmt, die auf einem anderen Gera:t, das Teil des
   Pools ist, vorhanden ist. Beispielsweise bei einem Spiegel aus zwei
   Platten, von denen eine anfa:ngt, Fehler zu produzieren und nicht mehr
   la:nger Daten speichern kann. Dieser Fall ist sogar noch schlimmer, wenn
   auf die Daten seit einiger Zeit nicht mehr zugegriffen wurde, zum Beispiel
   bei einem Langzeit-Archivspeicher. Traditionelle Dateisysteme mu:ssen dann
   Algorithmen wie fsck(8) ablaufen lassen, welche die Daten u:berpru:fen und
   reparieren. Diese Kommandos beno:tigen einige Zeit und in gravierenden
   Fa:llen muss ein Administrator manuelle Entscheidungen treffen, welche
   Reparaturoperation vorgenommen werden soll. Wenn ZFS einen defekten
   Datenblock mit einer Pru:fsumme erkennt, die nicht u:bereinstimmt,
   versucht es die Daten von der gespiegelten Platte zu lesen. Wenn diese
   Platte die korrekten Daten liefern kann, wird nicht nur dieser Datenblock
   an die anfordernde Applikation geschickt, sondern auch die falschen Daten
   auf der Disk reparieren, welche die falsche Pru:fsumme erzeugt hat. Dies
   passiert wa:hrend des normalen Betriebs des Pools, ohne dass eine
   Interaktion vom Systemadministrator notwendig wa:re.

   Das na:chste Beispiel demonstriert dieses Verhalten zur Selbstheilung. Ein
   gespiegelter Pool mit den beiden Platten /dev/ada0 und /dev/ada1 wird
   angelegt.

 # zpool create healer mirror /dev/ada0 /dev/ada1
 # zpool status healer
   pool: healer
  state: ONLINE
   scan: none requested
 config:

     NAME        STATE     READ WRITE CKSUM
     healer      ONLINE       0     0     0
       mirror-0  ONLINE       0     0     0
        ada0     ONLINE       0     0     0
        ada1     ONLINE       0     0     0

 errors: No known data errors
 # zpool list
 NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 healer   960M  92.5K   960M     0%  1.00x  ONLINE  -

   Ein paar wichtige Daten, die es vor Datenfehlern mittels der
   Selbstheilungsfunktion zu schu:tzen gilt, werden auf den Pool kopiert.
   Eine Pru:fsumme wird zum spa:teren Vergleich berechnet.

 # cp /some/important/data /healer
 # zfs list
 NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 healer   960M  67.7M   892M     7%  1.00x  ONLINE  -
 # sha1 /healer > checksum.txt
 # cat checksum.txt
 SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f

   Datenfehler werden durch das Schreiben von zufa:lligen Daten an den Anfang
   einer Platte des Spiegels simuliert. Um ZFS daran zu hindern, die Daten so
   schnell zu reparieren, wie es diese entdeckt, wird der Pool vor der
   Vera:nderung exportiert und anschliessend wieder importiert.

  Warnung:

   Dies ist eine gefa:hrliche Operation, die wichtige Daten zersto:ren kann.
   Es wird hier nur zu Demonstrationszwecken gezeigt und sollte nicht
   wa:hrend des normalen Betriebs des Pools versucht werden. Dieses
   vorsa:tzliche Korrumpierungsbeispiel sollte auf gar keinen Fall auf einer
   Platte mit einem anderen Dateisystem durchgefu:hrt werden. Verwenden Sie
   keine anderen Gera:tenamen als diejenigen, die hier gezeigt werden, die
   Teil des Pools sind. Stellen Sie sicher, dass die passende Sicherungen
   angefertigt haben, bevor Sie dieses Kommando ausfu:hren!

 # zpool export healer
 # dd if=/dev/random of=/dev/ada1 bs=1m count=200
 200+0 records in
 200+0 records out
 209715200 bytes transferred in 62.992162 secs (3329227 bytes/sec)
 # zpool import healer

   Der Status des Pools zeigt an, dass bei einem Gera:t ein Fehler
   aufgetreten ist. Wichtig zu wissen ist, dass Anwendungen, die Daten vom
   Pool lesen keine ungu:ltigen Daten erhalten haben. ZFS lieferte Daten vom
   ada0-Gera:t mit der korrekten Pru:fsumme aus. Das Gera:t mit der
   fehlerhaften Pru:fsumme kann sehr einfach gefunden werden, da die Spalte
   CKSUM einen Wert ungleich Null entha:lt.

 # zpool status healer
     pool: healer
    state: ONLINE
   status: One or more devices has experienced an unrecoverable error.  An
           attempt was made to correct the error.  Applications are unaffected.
   action: Determine if the device needs to be replaced, und clear the errors
           using 'zpool clear' or replace the device with 'zpool replace'.
      see: http://www.sun.com/msg/ZFS-8000-9P
     scan: none requested
   config:

       NAME        STATE     READ WRITE CKSUM
       healer      ONLINE       0     0     0
         mirror-0  ONLINE       0     0     0
          ada0     ONLINE       0     0     0
          ada1     ONLINE       0     0     1

 errors: No known data errors

   Der Fehler wurde erkannt und korrigiert durch die vorhandene Redundanz,
   welche aus der nicht betroffenen Platte ada0 des Spiegels gewonnen wurde.
   Ein Vergleich der Pru:fsumme mit dem Original wird zeigen, ob sich der
   Pool wieder in einem konsistenten Zustand befindet.

 # sha1 /healer >> checksum.txt
 # cat checksum.txt
 SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f
 SHA1 (/healer) = 2753eff56d77d9a536ece6694bf0a82740344d1f

   Die beiden Pru:fsummen, die vor und nach der vorsa:tzlichen Korrumpierung
   der Daten des Pools angelegt wurden, stimmen immer noch u:berein. Dies
   zeigt wie ZFS in der Lage ist, Fehler automatisch zu erkennen und zu
   korrigieren, wenn die Pru:fsummen nicht u:bereinstimmen. Beachten Sie,
   dass dies nur mo:glich ist, wenn genug Redundanz im Pool vorhanden ist.
   Ein Pool, der nur aus einer einzigen Platte besteht besitzt keine
   Selbstheilungsfunktion. Dies ist auch der Grund warum Pru:fsummen bei ZFS
   so wichtig sind und deshalb aus keinem Grund deaktiviert werden sollten.
   Kein fsck(8) ist no:tig, um diese Fehler zu erkennen und zu korrigieren
   und der Pool war wa:hrend der gesamten Zeit, in der das Problem bestand,
   verfu:gbar. Eine scrub-Aktion ist nun no:tig, um die fehlerhaften Daten
   auf ada1 zu beheben.

 # zpool scrub healer
 # zpool status healer
   pool: healer
  state: ONLINE
 status: One or more devices has experienced an unrecoverable error.  An
             attempt was made to correct the error.  Applications are unaffected.
 action: Determine if the device needs to be replaced, und clear the errors
             using 'zpool clear' or replace the device with 'zpool replace'.
    see: http://www.sun.com/msg/ZFS-8000-9P
   scan: scrub in progress since Mon Dec 10 12:23:30 2012
         10.4M scanned out of 67.0M at 267K/s, 0h3m to go
         9.63M repaired, 15.56% done
 config:

     NAME        STATE     READ WRITE CKSUM
     healer      ONLINE       0     0     0
       mirror-0  ONLINE       0     0     0
        ada0     ONLINE       0     0     0
        ada1     ONLINE       0     0   627  (repairing)

 errors: No known data errors

   Durch das scrub werden die Daten von ada0 gelesen und alle Daten mit einer
   falschen durch diejenigen mit der richtigen Pru:fsumme auf ada1 ersetzt.
   Dies wird durch die Ausgabe (repairing) des Kommandos zpool status
   angezeigt. Nachdem die Operation abgeschlossen ist, a:ndert sich der
   Poolstatus zu:

 # zpool status healer
   pool: healer
  state: ONLINE
 status: One or more devices has experienced an unrecoverable error.  An
         attempt was made to correct the error.  Applications are unaffected.
 action: Determine if the device needs to be replaced, und clear the errors
              using 'zpool clear' or replace the device with 'zpool replace'.
    see: http://www.sun.com/msg/ZFS-8000-9P
   scan: scrub repaired 66.5M in 0h2m with 0 errors on Mon Dec 10 12:26:25 2012
 config:

     NAME        STATE     READ WRITE CKSUM
     healer      ONLINE       0     0     0
       mirror-0  ONLINE       0     0     0
        ada0     ONLINE       0     0     0
        ada1     ONLINE       0     0 2.72K

 errors: No known data errors

   Nach der scrub-Operation und der anschliessenden Synchronisation der Daten
   von ada0 nach ada1, kann die Fehlermeldung vom Poolstatus durch die
   Eingabe von zpool clear bereinigt werden.

 # zpool clear healer
 # zpool status healer
   pool: healer
  state: ONLINE
   scan: scrub repaired 66.5M in 0h2m with 0 errors on Mon Dec 10 12:26:25 2012
 config:

     NAME        STATE     READ WRITE CKSUM
     healer      ONLINE       0     0     0
       mirror-0  ONLINE       0     0     0
        ada0     ONLINE       0     0     0
        ada1     ONLINE       0     0     0

 errors: No known data errors

   Der Pool ist jetzt wieder in einem voll funktionsfa:higen Zustand versetzt
   worden und alle Fehler wurden beseitigt.

  19.3.9. Einen Pool vergro:ssern

   Die verwendbare Gro:sse eines redundant ausgelegten Pools ist durch die
   Kapazita:t des kleinsten Gera:ts in jedem vdev begrenzt. Das kleinste
   Gera:t kann durch ein gro:sseres Gera:t ersetzt werden. Nachdem eine
   replace oder resilver-Operation abgeschlossen wurde, kann der Pool
   anwachsen, um die Kapazita:t des neuen Gera:ts zu nutzen. Nehmen wir als
   Beispiel einen Spiegel mit einer 1 TB und einer 2 TB Platte. Der
   verwendbare Plattenplatz betra:gt 1 TB. Wenn die 1 TB Platte mit einer
   anderen 2 TB Platte ersetzt wird, kopiert der resilver-Prozess die
   existierenden Daten auf die neue Platte. Da beide Gera:te nun 2 TB
   Kapazita:t besitzen, kann auch der verfu:gbare Plattenplatz auf die
   Gro:sse von 2 TB anwachsen.

   Die Erweiterung wird durch das Kommando zpool online -e auf jedem Gera:t
   ausgelo:st. Nachdem alle Gera:te expandiert wurden, wird der Speicher im
   Pool zur Verfu:gung gestellt.

  19.3.10. Importieren und Exportieren von Pools

   Pools werden exportiert bevor diese an ein anderes System angeschlossen
   werden. Alle Datasets werden abgeha:ngt und jedes Gera:t wird als
   exportiert markiert, ist jedoch immer noch gesperrt, so dass es nicht von
   anderen Festplattensubsystemen verwendet werden kann. Dadurch ko:nnen
   Pools auf anderen Maschinen importiert werden, die ZFS und sogar andere
   Hardwarearchitekturen (bis auf ein paar Ausnahmen, siehe zpool(8))
   unterstu:tzen. Besitzt ein Dataset offene Dateien, kann zpool export -f
   den Export des Pools erzwingen. Verwenden Sie dies mit Vorsicht. Die
   Datasets werden dadurch gewaltsam abgeha:ngt, was bei Anwendungen, die
   noch offene Dateien auf diesem Dataset hatten, mo:glicherweise zu
   unerwartetem Verhalten fu:hren kann.

   Einen nichtverwendeten Pool exportieren:

 # zpool export mypool

   Beim Importieren eines Pool werden auch automatisch alle Datasets
   eingeha:ngt. Dies ist mo:glicherweise nicht das bevorzugte Verhalten und
   wird durch zpool import -N verhindert. Durch zpool import -o tempora:re
   Eigenschaften nur fu:r diesen Import gesetzt. Mit dem Befehl zpool import
   altroot= ist es mo:glich, einen Pool mit einem anderen Basiseinha:ngepunkt
   anstatt der Wurzel des Dateisystems einzubinden. Wenn der Pool zuletzt auf
   einem anderen System verwendet und nicht korrekt exportiert wurde, muss
   unter Umsta:nden ein Import erzwungen werden durch zpool import -f. Alle
   Pools, die momentan nicht durch ein anderes System verwendet werden,
   lassen sich mit zpool import -a importieren.

   Alle zum Import verfu:gbaren Pools auflisten:

 # zpool import
    pool: mypool
      id: 9930174748043525076
   state: ONLINE
  action: The pool can be imported using its name or numeric identifier.
  config:

         mypool      ONLINE
           ada2p3    ONLINE

   Den Pool mit einem anderen Wurzelverzeichnis importieren:

 # zpool import -o altroot=/mnt mypool
 # zfs list
 zfs list
 NAME                 USED  AVAIL  REFER  MOUNTPOINT
 mypool               110K  47.0G    31K  /mnt/mypool

  19.3.11. Einen Pool aktualisieren

   Nachdem FreeBSD aktualisiert wurde oder wenn der Pool von einem anderen
   System, das eine a:ltere Version von ZFS einsetzt, la:sst sich der Pool
   manuell auf den aktuellen Stand von ZFS bringen, um die neuesten
   Eigenschaften zu unterstu:tzen. Bedenken Sie, ob der Pool jemals wieder
   von einem a:lteren System eingebunden werden muss, bevor Sie die
   Aktualisierung durchfu:hren. Das aktualisieren eines Pools ist ein nicht
   umkehrbarer Prozess. a:ltere Pools lassen sich aktualisieren, jedoch
   lassen sich Pools mit neueren Eigenschaften nicht wieder auf eine a:ltere
   Version bringen.

   Aktualisierung eines v28-Pools, um Feature Flags zu unterstu:tzen:

 # zpool status
   pool: mypool
  state: ONLINE
 status: The pool is formatted using a legacy on-disk format.  The pool can
         still be used, but some features are unavailable.
 action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
         pool will no longer be accessible on software that does not support feat
         flags.
   scan: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0    ONLINE       0     0     0
             ada1    ONLINE       0     0     0

 errors: No known data errors
 # zpool upgrade
 This system supports ZFS pool feature flags.

 The following pools are formatted with legacy version numbers und can
 be upgraded to use feature flags.  After being upgraded, these pools
 will no longer be accessible by software that does not support feature
 flags.

 VER  POOL
 ---  ------------
 28   mypool

 Use 'zpool upgrade -v' for a list of available legacy versions.
 Every feature flags pool has all supported features enabled.
 # zpool upgrade mypool
 This system supports ZFS pool feature flags.

 Successfully upgraded 'mypool' from version 28 to feature flags.
 Enabled the following features on 'mypool':
   async_destroy
   empty_bpobj
   lz4_compress
   multi_vdev_crash_dump

   Die neueren Eigenschaften von ZFS werden nicht verfu:gbar sein, bis zpool
   upgrade abgeschlossen ist. zpool upgrade -v kann verwendet werden, um zu
   sehen, welche neuen Eigenschaften durch die Aktualisierung bereitgestellt
   werden, genauso wie diejenigen, die momentan schon verfu:gbar sind.

   Einen Pool um zusa:tzliche Feature Flags erweitern:

 # zpool status
   pool: mypool
  state: ONLINE
 status: Some supported features are not enabled on the pool. The pool can
         still be used, but some features are unavailable.
 action: Enable all features using 'zpool upgrade'. Once this is done,
         the pool may no longer be accessible by software that does not support
         the features. See zpool-features(7) for details.
   scan: none requested
 config:

         NAME        STATE     READ WRITE CKSUM
         mypool      ONLINE       0     0     0
           mirror-0  ONLINE       0     0     0
             ada0    ONLINE       0     0     0
             ada1    ONLINE       0     0     0

 errors: No known data errors
 # zpool upgrade
 This system supports ZFS pool feature flags.

 All pools are formatted using feature flags.


 Some supported features are not enabled on the following pools. Once a
 feature is enabled the pool may become incompatible with software
 that does not support the feature. See zpool-features(7) for details.

 POOL  FEATURE
 ---------------
 zstore
       multi_vdev_crash_dump
       spacemap_histogram
       enabled_txg
       hole_birth
       extensible_dataset
       bookmarks
       filesystem_limits
 # zpool upgrade mypool
 This system supports ZFS pool feature flags.

 Enabled the following features on 'mypool':
   spacemap_histogram
   enabled_txg
   hole_birth
   extensible_dataset
   bookmarks
   filesystem_limits

  Warnung:

   Der Bootcode muss auf Systemen, die von dem Pool starten, aktualisiert
   werden, um diese neue Version zu unterstu:tzen. Verwenden Sie gpart
   bootcode auf der Partition, die den Bootcode entha:lt. Lesen Sie fu:r
   weitere Informationen gpart(8).

  19.3.12. Aufgezeichnete Historie des Pools anzeigen

   Befehle, die den Pool in irgendeiner Form vera:ndern, werden
   aufgezeichnet. Diese Befehle beinhalten das Erstellen von Datasets,
   vera:ndern von Eigenschaften oder das Ersetzen einer Platte. Diese
   Historie ist nu:tzlich um nachzuvollziehen, wie ein Pool aufgebaut ist und
   welcher Benutzer eine bestimmte Aktion wann und wie geta:tigt hat. Die
   aufgezeichnete Historie wird nicht in einer Logdatei festgehalten, sondern
   ist Teil des Pools selbst. Das Kommando zum darstellen dieser Historie
   lautet passenderweise zpool history:

 # zpool history
 History for 'tank':
 2013-02-26.23:02:35 zpool create tank mirror /dev/ada0 /dev/ada1
 2013-02-27.18:50:58 zfs set atime=off tank
 2013-02-27.18:51:09 zfs set checksum=fletcher4 tank
 2013-02-27.18:51:18 zfs create tank/backup

   Die Ausgabe zeigt zpool und zfs-Befehle, die ausgefu:hrt wurden zusammen
   mit einem Zeitstempel. Nur Befehle, die den Pool vera:ndern werden
   aufgezeichnet. Befehle wie zfs list sind dabei nicht enthalten. Wenn kein
   Name angegeben wird, erscheint die gesamte Historie aller Pools.

   Der Befehl zpool history kann sogar noch mehr Informationen ausgeben, wenn
   die Optionen -i oder -l angegeben werden. Durch -i zeigt ZFS vom Benutzer
   eingegebene, als auch interne Ereignisse an.

 # zpool history -i
 History for 'tank':
 2013-02-26.23:02:35 [internal pool create txg:5] pool spa 28; zfs spa 28; zpl 5;uts  9.1-RELEASE 901000 amd64
 2013-02-27.18:50:53 [internal property set txg:50] atime=0 dataset = 21
 2013-02-27.18:50:58 zfs set atime=off tank
 2013-02-27.18:51:04 [internal property set txg:53] checksum=7 dataset = 21
 2013-02-27.18:51:09 zfs set checksum=fletcher4 tank
 2013-02-27.18:51:13 [internal create txg:55] dataset = 39
 2013-02-27.18:51:18 zfs create tank/backup

   Weitere Details lassen sich durch die Angabe von -l entlocken. Historische
   Eintra:ge werden in einem langen Format ausgegeben, einschliesslich
   Informationen wie der Name des Benutzers, welcher das Kommando eingegeben
   hat und der Hostname, auf dem die A:nderung erfolgte.

 # zpool history -l
 History for 'tank':
 2013-02-26.23:02:35 zpool create tank mirror /dev/ada0 /dev/ada1 [user 0 (root) on :global]
 2013-02-27.18:50:58 zfs set atime=off tank [user 0 (root) on myzfsbox:global]
 2013-02-27.18:51:09 zfs set checksum=fletcher4 tank [user 0 (root) on myzfsbox:global]
 2013-02-27.18:51:18 zfs create tank/backup [user 0 (root) on myzfsbox:global]

   Die Ausgabe zeigt, dass der Benutzer root den gespiegelten Pool mit den
   beiden Platten /dev/ada0 und /dev/ada1 angelegt hat. Der Hostname myzfsbox
   wird ebenfalls in den Kommandos angezeigt, nachdem der Pool erzeugt wurde.
   Die Anzeige des Hostnamens wird wichtig, sobald der Pool von einem System
   exportiert und auf einem anderen importiert wird. Die Befehle, welche auf
   dem anderen System verwendet werden, ko:nnen klar durch den Hostnamen, der
   bei jedem Kommando mit verzeichnet wird, unterschieden werden.

   Beide Optionen fu:r zpool history lassen sich auch kombinieren, um die
   meisten Details zur Historie eines Pools auszugeben. Die Pool Historie
   liefert wertvolle Informationen, wenn Aktionen nachverfolgt werden mu:ssen
   oder zur Fehlerbeseitigung mehr Informationen gebraucht werden.

  19.3.13. Geschwindigkeitsu:berwachung

   Ein eingebautes U:berwachungssystem kann I/O-Statistiken in Echtzeit
   liefern. Es zeigt die Menge von freiem und belegtem Speicherplatz auf dem
   Pool an, wieviele Lese- und Schreiboperationen pro Sekunde durchgefu:hrt
   werden und die aktuell verwendete I/O-Bandbreite. Standardma:ssig werden
   alle Pools in einem System u:berwacht und angezeigt. Ein Poolname kann
   angegeben werden, um die Anzeige auf diesen Pool zu beschra:nken. Ein
   einfaches Beispiel:

 # zpool iostat
                capacity     operations    bundwidth
 pool        alloc   free   read  write   read  write
 ----------  -----  -----  -----  -----  -----  -----
 data         288G  1.53T      2     11  11.3K  57.1K

   Um kontinuierlich die I/O-Aktivita:t zu u:berpru:fen, kann eine Zahl als
   letzter Parameter angegeben werden, die ein Intervall in Sekunden angibt,
   die zwischen den Aktualisierungen vergehen soll. Die na:chste Zeile mit
   Statistikinformationen wird dann nach jedem Intervall ausgegeben. Dru:cken
   Sie Ctrl+C, um diese kontinuierliche U:berwachung zu stoppen. Alternativ
   la:sst sich auch eine zweite Zahl nach dem Intervall auf der Kommandozeile
   angeben, welche die Obergrenze von Statistikausgaben darstellt, die
   angezeigt werden sollen.

   Noch mehr Informationen zu I/O-Statistiken ko:nnen durch Angabe der Option
   -v angezeigt werden. Jedes Gera:t im Pool wird dann mit einer eigenen
   Statistikzeile aufgefu:hrt. Dies ist hilfreich um zu sehen, wieviele Lese-
   und Schreiboperationen von jedem Gera:t durchgefu:hrt werden und kann bei
   der Diagnose eines langsamen Gera:ts, das den Pool ausbremst, hilfreich
   sein. Dieses Beispiel zeigt einen gespiegelten Pool mit zwei Gera:ten:

 # zpool iostat -v
                             capacity     operations    bundwidth
 pool                     alloc   free   read  write   read  write
 -----------------------  -----  -----  -----  -----  -----  -----
 data                      288G  1.53T      2     12  9.23K  61.5K
   mirror                  288G  1.53T      2     12  9.23K  61.5K
     ada1                     -      -      0      4  5.61K  61.7K
     ada2                     -      -      1      4  5.04K  61.7K
 -----------------------  -----  -----  -----  -----  -----  -----

  19.3.14. Einen Pool aufteilen

   Ein Pool, der aus einem oder mehreren gespiegelten vdevs besteht, kann in
   zwei Pools aufgespalten werden. Falls nicht anders angegeben, wird das
   letzte Mitglied eines Spiegels abgeha:ngt und dazu verwendet, einen neuen
   Pool mit den gleichen Daten zu erstellen. Die Operation sollte zuerst mit
   der Option -n versucht werden. Die Details der vorgeschlagenen Option
   werden dargestellt, ohne die Aktion in Wirklichkeit durchzufu:hren. Das
   hilft dabei zu besta:tigen, ob die Aktion das tut, was der Benutzer damit
   vor hatte.

19.4. zfs Administration

   Das zfs-Werkzeug ist dafu:r verantwortlich, alle ZFS Datasets innerhalb
   eines Pools zu erstellen, zersto:ren und zu verwalten. Der Pool selbst
   wird durch zpool verwaltet.

  19.4.1. Datasets erstellen und zersto:ren

   Anders als in traditionellen Festplatten- und Volumenmanagern wird der
   Plattenplatz in ZFS nicht vorher allokiert. Bei traditionellen
   Dateisystemen gibt es, nachdem der Plattenplatz partitioniert und
   zugeteilt wurde, keine Mo:glichkeit, ein zusa:tzliches Dateisystem
   hinzuzufu:gen, ohne eine neue Platte anzuschliessen. Mit ZFS lassen sich
   neue Dateisysteme zu jeder Zeit anlegen. Jedes Dataset besitzt
   Eigenschaften wie Komprimierung, Deduplizierung, Zwischenspeicher
   (caching), Quotas, genauso wie andere nu:tzliche Einstellungen wie
   Schreibschutz, Unterscheidung zwischen Gross- und Kleinschreibung,
   Netzwerkfreigaben und einen Einha:ngepunkt. Datasets ko:nnen ineinander
   verschachtelt werden und Kind-Datasets erben die Eigenschaften ihrer
   Eltern. Jedes Dataset kann als eine Einheit verwaltet, delegiert,
   repliziert, mit Schnappschu:ssen versehen, in Jails gesteckt und zersto:rt
   werden. Es gibt viele Vorteile, ein separates Dataset fu:r jede Art von
   Dateien anzulegen. Der einzige Nachteil einer grossen Menge an Datasets
   ist, dass manche Befehle wie zfs list langsamer sind und dass das
   Einha:ngen von hunderten oder hunderttausenden von Datasets den
   FreeBSD-Bootvorgang verzo:gert.

   Erstellen eines neuen Datasets und aktivieren von LZ4 Komprimierung:

 # zfs list
 NAME                  USED  AVAIL  REFER  MOUNTPOINT
 mypool                781M  93.2G   144K  none
 mypool/ROOT           777M  93.2G   144K  none
 mypool/ROOT/default   777M  93.2G   777M  /
 mypool/tmp            176K  93.2G   176K  /tmp
 mypool/usr            616K  93.2G   144K  /usr
 mypool/usr/home       184K  93.2G   184K  /usr/home
 mypool/usr/ports      144K  93.2G   144K  /usr/ports
 mypool/usr/src        144K  93.2G   144K  /usr/src
 mypool/var           1.20M  93.2G   608K  /var
 mypool/var/crash      148K  93.2G   148K  /var/crash
 mypool/var/log        178K  93.2G   178K  /var/log
 mypool/var/mail       144K  93.2G   144K  /var/mail
 mypool/var/tmp        152K  93.2G   152K  /var/tmp
 # zfs create -o compress=lz4 mypool/usr/mydataset
 # zfs list
 NAME                   USED  AVAIL  REFER  MOUNTPOINT
 mypool                 781M  93.2G   144K  none
 mypool/ROOT            777M  93.2G   144K  none
 mypool/ROOT/default    777M  93.2G   777M  /
 mypool/tmp             176K  93.2G   176K  /tmp
 mypool/usr             704K  93.2G   144K  /usr
 mypool/usr/home        184K  93.2G   184K  /usr/home
 mypool/usr/mydataset  87.5K  93.2G  87.5K  /usr/mydataset
 mypool/usr/ports       144K  93.2G   144K  /usr/ports
 mypool/usr/src         144K  93.2G   144K  /usr/src
 mypool/var            1.20M  93.2G   610K  /var
 mypool/var/crash       148K  93.2G   148K  /var/crash
 mypool/var/log         178K  93.2G   178K  /var/log
 mypool/var/mail        144K  93.2G   144K  /var/mail
 mypool/var/tmp         152K  93.2G   152K  /var/tmp

   Ein Dataset zu zersto:ren ist viel schneller, als alle Dateien zu
   lo:schen, die sich in dem Dataset befindet, da es keinen Scan aller
   Dateien und aktualisieren der dazugeho:rigen Metadaten erfordert.

   Zersto:ren des zuvor angelegten Datasets:

 # zfs list
 NAME                   USED  AVAIL  REFER  MOUNTPOINT
 mypool                 880M  93.1G   144K  none
 mypool/ROOT            777M  93.1G   144K  none
 mypool/ROOT/default    777M  93.1G   777M  /
 mypool/tmp             176K  93.1G   176K  /tmp
 mypool/usr             101M  93.1G   144K  /usr
 mypool/usr/home        184K  93.1G   184K  /usr/home
 mypool/usr/mydataset   100M  93.1G   100M  /usr/mydataset
 mypool/usr/ports       144K  93.1G   144K  /usr/ports
 mypool/usr/src         144K  93.1G   144K  /usr/src
 mypool/var            1.20M  93.1G   610K  /var
 mypool/var/crash       148K  93.1G   148K  /var/crash
 mypool/var/log         178K  93.1G   178K  /var/log
 mypool/var/mail        144K  93.1G   144K  /var/mail
 mypool/var/tmp         152K  93.1G   152K  /var/tmp
 # zfs destroy mypool/usr/mydataset
 # zfs list
 NAME                  USED  AVAIL  REFER  MOUNTPOINT
 mypool                781M  93.2G   144K  none
 mypool/ROOT           777M  93.2G   144K  none
 mypool/ROOT/default   777M  93.2G   777M  /
 mypool/tmp            176K  93.2G   176K  /tmp
 mypool/usr            616K  93.2G   144K  /usr
 mypool/usr/home       184K  93.2G   184K  /usr/home
 mypool/usr/ports      144K  93.2G   144K  /usr/ports
 mypool/usr/src        144K  93.2G   144K  /usr/src
 mypool/var           1.21M  93.2G   612K  /var
 mypool/var/crash      148K  93.2G   148K  /var/crash
 mypool/var/log        178K  93.2G   178K  /var/log
 mypool/var/mail       144K  93.2G   144K  /var/mail
 mypool/var/tmp        152K  93.2G   152K  /var/tmp

   In modernen Versionen von ZFS ist zfs destroy asynchron und der freie
   Speicherplatz kann erst nach ein paar Minuten im Pool auftauchen.
   Verwenden Sie zpool get freeing poolname, um die Eigenschaft freeing
   aufzulisten, die angibt, bei wievielen Datasets die Blo:cke im Hintergrund
   freigegeben werden. Sollte es Kind-Datasets geben, Schnappschu:sse oder
   andere Datasets, dann la:sst sich der Elternknoten nicht zersto:ren. Um
   ein Dataset und all seine Kinder zu zersto:ren, verwenden Sie die Option
   -r, um das Dataset und all seine Kinder rekursiv zu entfernen. Benutzen
   Sie die Option -n und -v, um Datasets und Snapshots anzuzeigen, die durch
   diese Aktion zersto:rt werden wu:rden, dies jedoch nur zu simulieren und
   nicht wirklich durchzufu:hren. Speicherplatz, der dadurch freigegeben
   wu:rde, wird ebenfalls angezeigt.

  19.4.2. Volumes erstellen und zersto:ren

   Ein Volume ist ein spezieller Typ von Dataset. Anstatt dass es als
   Dateisystem eingeha:ngt wird, stellt es ein Block-Gera:t unter
   /dev/zvol/poolname/dataset dar. Dies erlaubt es, das Volume fu:r andere
   Dateisysteme zu verwenden, die Festplatten einer virtuellen Maschine
   bereitzustellen oder u:ber Protokolle wie iSCSI oder HAST exportiert zu
   werden.

   Ein Volume kann mit einem beliebigen Dateisystem formatiert werden oder
   auch ohne ein Dateisystem als reiner Datenspeicher fungieren. Fu:r den
   Benutzer erscheint ein Volume als eine gewo:hnliche Platte. Indem
   gewo:hnliche Dateisysteme auf diesen zvols angelegt werden, ist es
   mo:glich, diese mit Eigenschaften auszustatten, welche diese normalerweise
   nicht besitzen. Beispielsweise wird durch Verwendung der
   Komprimierungseigenschaft auf einem 250 MB Volume das Erstellen eines
   komprimierten FAT Dateisystems mo:glich.

 # zfs create -V 250m -o compression=on tank/fat32
 # zfs list tank
 NAME USED AVAIL REFER MOUNTPOINT
 tank 258M  670M   31K /tank
 # newfs_msdos -F32 /dev/zvol/tank/fat32
 # mount -t msdosfs /dev/zvol/tank/fat32 /mnt
 # df -h /mnt | grep fat32
 Filesystem           Size Used Avail Capacity Mounted on
 /dev/zvol/tank/fat32 249M  24k  249M     0%   /mnt
 # mount | grep fat32
 /dev/zvol/tank/fat32 on /mnt (msdosfs, local)

   Ein Volume zu zersto:ren ist sehr a:hnlich wie ein herko:mmliches Dataset
   zu entfernen. Die Operation wird beinahe sofort durchgefu:hrt, jedoch kann
   es mehrere Minuten dauern, bis der freie Speicherplatz im Hintergrund
   wieder freigegeben ist.

  19.4.3. Umbenennen eines Datasets

   Der Name eines Datasets la:sst sich durch zfs rename a:ndern. Das
   Eltern-Dataset kann ebenfalls mit diesem Kommando umbenannt werden. Ein
   Dataset unter einem anderen Elternteil umzubenennen wird den Wert dieser
   Eigenschaft vera:ndern, die vom Elternteil vererbt wurden. Wird ein
   Dataset umbenannt, wird es abgeha:ngt und dann erneut unter der neuen
   Stelle eingeha:ngt (welche vom neuen Elternteil geerbt wird). Dieses
   Verhalten kann durch die Option -u verhindert werden.

   Ein Dataset umbenennen und unter einem anderen Elterndataset verschieben:

 # zfs list
 NAME                   USED  AVAIL  REFER  MOUNTPOINT
 mypool                 780M  93.2G   144K  none
 mypool/ROOT            777M  93.2G   144K  none
 mypool/ROOT/default    777M  93.2G   777M  /
 mypool/tmp             176K  93.2G   176K  /tmp
 mypool/usr             704K  93.2G   144K  /usr
 mypool/usr/home        184K  93.2G   184K  /usr/home
 mypool/usr/mydataset  87.5K  93.2G  87.5K  /usr/mydataset
 mypool/usr/ports       144K  93.2G   144K  /usr/ports
 mypool/usr/src         144K  93.2G   144K  /usr/src
 mypool/var            1.21M  93.2G   614K  /var
 mypool/var/crash       148K  93.2G   148K  /var/crash
 mypool/var/log         178K  93.2G   178K  /var/log
 mypool/var/mail        144K  93.2G   144K  /var/mail
 mypool/var/tmp         152K  93.2G   152K  /var/tmp
 # zfs rename mypool/usr/mydataset mypool/var/newname
 # zfs list
 NAME                  USED  AVAIL  REFER  MOUNTPOINT
 mypool                780M  93.2G   144K  none
 mypool/ROOT           777M  93.2G   144K  none
 mypool/ROOT/default   777M  93.2G   777M  /
 mypool/tmp            176K  93.2G   176K  /tmp
 mypool/usr            616K  93.2G   144K  /usr
 mypool/usr/home       184K  93.2G   184K  /usr/home
 mypool/usr/ports      144K  93.2G   144K  /usr/ports
 mypool/usr/src        144K  93.2G   144K  /usr/src
 mypool/var           1.29M  93.2G   614K  /var
 mypool/var/crash      148K  93.2G   148K  /var/crash
 mypool/var/log        178K  93.2G   178K  /var/log
 mypool/var/mail       144K  93.2G   144K  /var/mail
 mypool/var/newname   87.5K  93.2G  87.5K  /var/newname
 mypool/var/tmp        152K  93.2G   152K  /var/tmp

   Schnappschu:sse ko:nnen auf diese Weise ebenfalls umbenannt werden.
   Aufgrund der Art von Schnappschu:ssen ko:nnen diese nicht unter einem
   anderen Elterndataset eingeha:ngt werden. Um einen rekursiven
   Schnappschuss umzubenennen, geben Sie die Option -r an, um alle
   Schnappschu:sse mit dem gleichen Namen im Kind-Dataset ebenfalls
   umzubenennen.

 # zfs list -t snapshot
 NAME                                USED  AVAIL  REFER  MOUNTPOINT
 mypool/var/newname@first_snapshot      0      -  87.5K  -
 # zfs rename mypool/var/newname@first_snapshot new_snapshot_name
 # zfs list -t snapshot
 NAME                                   USED  AVAIL  REFER  MOUNTPOINT
 mypool/var/newname@new_snapshot_name      0      -  87.5K  -

  19.4.4. Festlegen von Dataset-Eigenschaften

   Jedes ZFS-Dataset besitzt eine Menge von Eigenschaften, die sein Verhalten
   beeinflussen. Die meisten Eigenschaften werden automatisch vom
   Eltern-Dataset vererbt, ko:nnen jedoch lokal u:berschrieben werden. Sie
   legen eine Eigenschaft durch zfs set property=value dataset fest. Die
   meisten Eigenschaften haben eine begrenzte Menge von gu:ltigen Werten. zfs
   get stellt diese dar und zeigt jede mo:gliche Eigenschaft und gu:ltige
   Werte an. Die meisten Eigenschaften ko:nnen u:ber zfs inherit wieder auf
   ihren Ausgangswert zuru:ckgesetzt werden.

   Benutzerdefinierte Eigenschaften lassen sich ebenfalls setzen. Diese
   werden Teil der Konfiguration des Datasets und ko:nnen dazu verwendet
   werden, zusa:tzliche Informationen u:ber das Dataset oder seine
   Bestandteile zu speichern. Um diese benutzerdefinierten Eigenschaften von
   den ZFS-eigenen zu unterscheiden, wird ein Doppelpunkt (:) verwendet, um
   einen eigenen Namensraum fu:r diese Eigenschaft zu erstellen.

 # zfs set custom:costcenter=1234 tank
 # zfs get custom:costcenter tank
 NAME PROPERTY           VALUE SOURCE
 tank custom:costcenter  1234  local

   Um eine selbstdefinierte Eigenschaft umzubenennen, verwenden Sie zfs
   inherit mit der Option -r. Wenn die benutzerdefinierte Eigenschaft nicht
   in einem der Eltern-Datasets definiert ist, wird diese komplett entfernt
   (obwohl diese A:nderungen natu:rlich in der Historie des Pools noch
   aufgezeichnet sind).

 # zfs inherit -r custom:costcenter tank
 # zfs get custom:costcenter tank
 NAME    PROPERTY           VALUE              SOURCE
 tank    custom:costcenter  -                  -
 # zfs get all tank | grep custom:costcenter
 #

    19.4.4.1. Festlegen und Abfragen von Eigenschaften fu:r Freigaben

   Zwei ha:ufig verwendete und nu:tzliche Dataset-Eigenschaften sind die
   Freigabeoptionen von NFS und SMB. Diese Optionen legen fest, ob und wie
   ZFS-Datasets im Netzwerk freigegeben werden. Derzeit unterstu:tzt FreeBSD
   nur Freigaben von Datasets u:ber NFS. Um den Status einer Freigabe zu
   erhalten, geben Sie folgendes ein:

 # zfs get sharenfs mypool/usr/home
 NAME              PROPERTY   VALUE   SOURCE
 mypool/usr/home   sharenfs   on      local
 # zfs get sharesmb mypool/usr/home
 NAME              PROPERTY   VALUE   SOURCE
 mypool/usr/home   sharesmb   off     local

   Um ein Dataset freizugeben, geben Sie ein:

 # zfs set sharenfs=on mypool/usr/home

   Es ist auch mo:glich, weitere Optionen fu:r die Verwendung von Datasets
   u:ber NFS zu definieren, wie etwa -alldirs, -maproot und -network. Um
   zusa:tzliche Optionen auf ein durch NFS freigegebenes Dataset festzulegen,
   geben Sie ein:

 # zfs set sharenfs="-alldirs,maproot=root,-network=192.168.1.0/24" mypool/usr/home

  19.4.5. Verwalten von Schnappschu:ssen

   Schnappschu:sse sind eine der ma:chtigen Eigenschaften von ZFS. Ein
   Schnappschuss bietet einen nur-Lese Zustand eines Datasets zu einem
   bestimmten Zeitpunkt. Mit Kopieren-beim-Schreiben (Copy-On-Write COW),
   ko:nnen Schnappschu:sse schnell erstellt werden durch das Aufheben der
   a:lteren Version der Daten auf der Platte. Falls kein Snapshot existiert,
   wird der Speicherplatz wieder fu:r zuku:nftige Verwendung freigegeben wenn
   Daten geschrieben oder gelo:scht werden. Schnappschu:sse sparen
   Speicherplatz, indem diese nur die Unterschiede zwischen dem momentanen
   Dataset und der vorherigen Version aufzeichnen. Schnappschu:sse sind nur
   auf ganzen Datasets erlaubt, nicht auf individuellen Dateien oder
   Verzeichnissen. Wenn ein Schnappschuss eines Datasets erstellt wird, wird
   alles was darin enthalten ist, dupliziert. Das beinhaltet
   Dateisystemeigenschaften, Dateien, Verzeichnisse, Rechte und so weiter.
   Schnappschu:sse beno:tigen keinen zusa:tzlichen Speicherplatz wenn diese
   erstmals angelegt werden, nur wenn Blo:cke, die diese referenzieren,
   gea:ndert werden. Rekursive Schnappschu:sse, die mit der Option -r
   erstellt, erzeugen einen mit dem gleichen Namen des Datasets und all
   seinen Kindern, was eine konsistente Momentaufnahme aller Dateisysteme
   darstellt. Dies kann wichtig sein, wenn eine Anwendung Dateien auf
   mehreren Datasets ablegt, die miteinander in Verbindung stehen oder
   voneinander abha:ngig sind. Ohne Schnappschu:sse wu:rde ein Backup Kopien
   dieser Dateien zu unterschiedlichen Zeitpunkten enthalten.

   Schnappschu:sse in ZFS bieten eine Vielzahl von Eigenschaften, die selbst
   in anderen Dateisystemen mit Schnappschussfunktion nicht vorhanden sind.
   Ein typisches Beispiel zur Verwendung von Schnappschu:ssen ist, den
   momentanen Stand des Dateisystems zu sichern, wenn eine riskante Aktion
   wie das Installieren von Software oder eine Systemaktualisierung
   durchgefu:hrt wird. Wenn diese Aktion fehlschla:gt, so kann der
   Schnappschuss zuru:ckgerollt werden und das System befindet sich wieder in
   dem gleichen Zustand, wie zu dem, als der Schnappschuss erstellt wurde.
   Wenn die Aktualisierung jedoch erfolgreich war, kann der Schnappschuss
   gelo:scht werden, um Speicherplatz frei zu geben. Ohne Schnappschu:sse,
   wird durch ein fehlgeschlagenes Update eine Wiederherstellung der
   Sicherung fa:llig, was oft mu:hsam und zeitaufwa:ndig ist, ausserdem ist
   wa:hrenddessen das System nicht verwendbar. Schnappschu:sse lassen sich
   schnell und mit wenig bis gar keiner Ausfallzeit zuru:ckrollen, selbst
   wenn das System im normalen Betrieb la:uft. Die Zeitersparnis ist enorm,
   wenn mehrere Terabyte grosse Speichersysteme eingesetzt werden und viel
   Zeit fu:r das Kopieren der Daten vom Sicherungssystem beno:tigt wird.
   Schnappschu:sse sind jedoch keine Ersatz fu:r eine Vollsicherung des
   Pools, ko:nnen jedoch als eine schnelle und einfache Sicherungsmethode
   verwendet werden, um eine Kopie eines Datasets zu einem bestimmten
   Zeitpunkt zu sichern.

    19.4.5.1. Schnappschu:sse erstellen

   Schnappschu:sse werden durch das Kommando zfs snapshot
   dataset@snapshotname angelegt. Durch Angabe der Option -r werden
   Schnappschu:sse rekursive angelegt, mit dem gleichen Namen auf allen
   Datasets.

   Einen rekursiven Schnappschuss des gesamten Pools erzeugen:

 # zfs list -t all
 NAME                                   USED  AVAIL  REFER  MOUNTPOINT
 mypool                                 780M  93.2G   144K  none
 mypool/ROOT                            777M  93.2G   144K  none
 mypool/ROOT/default                    777M  93.2G   777M  /
 mypool/tmp                             176K  93.2G   176K  /tmp
 mypool/usr                             616K  93.2G   144K  /usr
 mypool/usr/home                        184K  93.2G   184K  /usr/home
 mypool/usr/ports                       144K  93.2G   144K  /usr/ports
 mypool/usr/src                         144K  93.2G   144K  /usr/src
 mypool/var                            1.29M  93.2G   616K  /var
 mypool/var/crash                       148K  93.2G   148K  /var/crash
 mypool/var/log                         178K  93.2G   178K  /var/log
 mypool/var/mail                        144K  93.2G   144K  /var/mail
 mypool/var/newname                    87.5K  93.2G  87.5K  /var/newname
 mypool/var/newname@new_snapshot_name      0      -  87.5K  -
 mypool/var/tmp                         152K  93.2G   152K  /var/tmp
 # zfs snapshot -r mypool@my_recursive_snapshot
 # zfs list -t snapshot
 NAME                                        USED  AVAIL  REFER  MOUNTPOINT
 mypool@my_recursive_snapshot                   0      -   144K  -
 mypool/ROOT@my_recursive_snapshot              0      -   144K  -
 mypool/ROOT/default@my_recursive_snapshot      0      -   777M  -
 mypool/tmp@my_recursive_snapshot               0      -   176K  -
 mypool/usr@my_recursive_snapshot               0      -   144K  -
 mypool/usr/home@my_recursive_snapshot          0      -   184K  -
 mypool/usr/ports@my_recursive_snapshot         0      -   144K  -
 mypool/usr/src@my_recursive_snapshot           0      -   144K  -
 mypool/var@my_recursive_snapshot               0      -   616K  -
 mypool/var/crash@my_recursive_snapshot         0      -   148K  -
 mypool/var/log@my_recursive_snapshot           0      -   178K  -
 mypool/var/mail@my_recursive_snapshot          0      -   144K  -
 mypool/var/newname@new_snapshot_name           0      -  87.5K  -
 mypool/var/newname@my_recursive_snapshot       0      -  87.5K  -
 mypool/var/tmp@my_recursive_snapshot           0      -   152K  -

   Schnappschu:sse werden nicht durch einen zfs list-Befehl angezeigt. Um
   Schnappschu:sse mit aufzulisten, muss -t snapshot an das Kommando zfs list
   angeha:ngt werden. Durch -t all werden sowohl Dateisysteme als auch
   Schnappschu:sse nebeneinander angezeigt.

   Schnappschu:sse werden nicht direkt eingeha:ngt, deshalb wird auch kein
   Pfad in der Spalte MOUNTPOINT angezeigt. Ebenso wird kein freier
   Speicherplatz in der Spalte AVAIL aufgelistet, da Schnappschu:sse nicht
   mehr geschrieben werden ko:nnen, nachdem diese angelegt wurden.
   Vergleichen Sie den Schnappschuss mit dem urspru:nglichen Dataset von dem
   es abstammt:

 # zfs list -rt all mypool/usr/home
 NAME                                    USED  AVAIL  REFER  MOUNTPOINT
 mypool/usr/home                         184K  93.2G   184K  /usr/home
 mypool/usr/home@my_recursive_snapshot      0      -   184K  -

   Durch das Darstellen des Datasets und des Schnappschusses nebeneinander
   zeigt deutlich, wie Schnappschu:sse in COW Manier funktionieren. Sie
   zeichnen nur die A:nderungen (delta) auf, die wa:hrenddessen entstanden
   sind und nicht noch einmal den gesamten Inhalt des Dateisystems. Das
   bedeutet, dass Schnappschu:sse nur wenig Speicherplatz beno:tigen, wenn
   nur kleine A:nderungen vorgenommen werden. Der Speicherverbrauch kann
   sogar noch deutlicher gemacht werden, wenn eine Datei auf das Dataset
   kopiert wird und anschliessend ein zweiter Schnappschuss angelegt wird:

 # cp /etc/passwd /var/tmp
 # zfs snapshot mypool/var/tmp@after_cp
 # zfs list -rt all mypool/var/tmp
 NAME                                   USED  AVAIL  REFER  MOUNTPOINT
 mypool/var/tmp                         206K  93.2G   118K  /var/tmp
 mypool/var/tmp@my_recursive_snapshot    88K      -   152K  -
 mypool/var/tmp@after_cp                   0      -   118K  -

   Der zweite Schnappschuss entha:lt nur die A:nderungen am Dataset, die nach
   der Kopieraktion gemacht wurden. Dies bedeutet enorme Einsparungen von
   Speicherplatz. Beachten Sie, dass sich die Gro:sse des Schnappschusses
   mypool/var/tmp@my_recursive_snapshot in der Spalte USED ebenfalls
   gea:ndert hat, um die A:nderungen von sich selbst und dem Schnappschuss,
   der im Anschluss angelegt wurde, anzuzeigen.

    19.4.5.2. Schnappschu:sse vergleichen

   ZFS entha:lt ein eingebautes Kommando, um die Unterschiede zwischen zwei
   Schnappschu:ssen miteinander zu vergleichen. Das ist hilfreich, wenn viele
   Schnappschu:sse u:ber la:ngere Zeit angelegt wurden und der Benutzer sehen
   will, wie sich das Dateisystem u:ber diesen Zeitraum vera:ndert hat.
   Beispielsweise kann zfs diff den letzten Schnappschuss finden, der noch
   eine Datei entha:lt, die aus Versehen gelo:scht wurde. Wenn dies fu:r die
   letzten beiden Schnappschu:sse aus dem vorherigen Abschnitt durchgefu:hrt
   wird, ergibt sich folgende Ausgabe:

 # zfs list -rt all mypool/var/tmp
 NAME                                   USED  AVAIL  REFER  MOUNTPOINT
 mypool/var/tmp                         206K  93.2G   118K  /var/tmp
 mypool/var/tmp@my_recursive_snapshot    88K      -   152K  -
 mypool/var/tmp@after_cp                   0      -   118K  -
 # zfs diff mypool/var/tmp@my_recursive_snapshot
 M       /var/tmp/
 +       /var/tmp/passwd

   Das Kommando zeigt alle A:nderungen zwischen dem angegebenen Schnappschuss
   (in diesem Fall mypool/var/tmp@my_recursive_snapshot) und dem momentan
   aktuellen Dateisystem. Die erste Spalte zeigt die Art der A:nderung an:

   +------------------------------------------------------------------------+
   | +         | Das Verzeichnis oder die Datei wurde hinzugefu:gt.         |
   |-----------+------------------------------------------------------------|
   | -         | Das Verzeichnis oder die Datei wurde gelo:scht.            |
   |-----------+------------------------------------------------------------|
   | M         | Das Verzeichnis oder die Datei wurde gea:ndert.            |
   |-----------+------------------------------------------------------------|
   | R         | Das Verzeichnis oder die Datei wurde umbenannt.            |
   +------------------------------------------------------------------------+

   Vergleicht man die Ausgabe mit der Tabelle, wird klar, dass passwd
   hinzugefu:gt wurde, nachdem der Schnappschuss
   mypool/var/tmp@my_recursive_snapshot erstellt wurde. Das resultierte
   ebenfalls in einer A:nderung am daru:berliegenden Verzeichnis, das unter
   /var/tmp eingeha:ngt ist.

   Zwei Schnappschu:sse zu vergleichen ist hilfreich, wenn die
   Replikationseigenschaft von ZFS verwendet wird, um ein Dataset auf einen
   anderen Host zu Sicherungszwecken u:bertragen.

   Zwei Schnappschu:sse durch die Angabe des kompletten Namens des Datasets
   und dem Namen des Schnappschusses beider Datasets vergleichen:

 # cp /var/tmp/passwd /var/tmp/passwd.copy
 # zfs snapshot mypool/var/tmp@diff_snapshot
 # zfs diff mypool/var/tmp@my_recursive_snapshot mypool/var/tmp@diff_snapshot
 M       /var/tmp/
 +       /var/tmp/passwd
 +       /var/tmp/passwd.copy
 # zfs diff mypool/var/tmp@my_recursive_snapshot mypool/var/tmp@after_cp
 M       /var/tmp/
 +       /var/tmp/passwd

   Ein Administrator, der fu:r die Sicherung zusta:ndig ist, kann zwei
   Schnappschu:sse miteinander vergleichen, die vom sendenden Host empfangen
   wurden, um festzustellen, welche A:nderungen am Dataset vorgenommen
   wurden. Lesen Sie dazu den Abschnitt Replication um weitere Informationen
   zu erhalten.

    19.4.5.3. Schnappschu:sse zuru:ckrollen

   Wenn zumindest ein Schnappschuss vorhanden ist, kann dieser zu einem
   beliebigen Zeitpunkt zuru:ckgerollt werden. In den meisten Fa:llen
   passiert dies, wenn der aktuelle Zustand des Datasets nicht mehr beno:tigt
   wird und eine a:ltere Version bevorzugt wird. Szenarien wie lokale
   Entwicklungstests, die fehlgeschlagen sind, defekte
   Systemaktualisierungen, welche die Funktionalita:t des Gesamtsystems
   einschra:nken oder die Anforderung, versehentlich gelo:schte Dateien oder
   Verzeichnisse wiederherzustellen, sind allgegenwa:rtig. Glu:cklicherweise
   ist das zuru:ckrollen eines Schnappschusses so leicht wie die Eingabe von
   zfs rollback snapshotname. Abha:ngig davon, wie viele A:nderungen
   betroffen sind, wird diese Operation innerhalb einer gewissen Zeit
   abgeschlossen sein. Wa:hrend dieser Zeit bleibt das Dataset in einem
   konsistenten Zustand, sehr a:hnlich den ACID-Prinzipien, die eine
   Datenbank beim Zuru:ckrollen entspricht. Wa:hrend all dies passiert, ist
   das Dataset immer noch aktiv und erreichbar ohne dass eine Ausfallzeit
   no:tig wa:re. Sobald der Schnappschuss zuru:ckgerollt wurde, besitzt das
   Dataset den gleichen Zustand, den es besass, als der Schnappschuss
   angelegt wurde. Alle anderen Daten in diesem Dataset, die nicht Teil des
   Schnappschusses sind, werden verworfen. Einen Schnappschuss des aktuellen
   Zustandes des Datasets vor dem Zuru:ckrollen anzulegen ist eine gute Idee,
   wenn hinterher noch Daten beno:tigt werden. Auf diese Weise kann der
   Benutzer vor und zuru:ck zwischen den Schnappschu:ssen springen, ohne
   wertvolle Daten zu verlieren.

   Im ersten Beispiel wird ein Schnappschuss aufgrund eines unvorsichtigen
   rm-Befehls zuru:ckgerollt, der mehr Daten gelo:scht hat, als vorgesehen.

 # zfs list -rt all mypool/var/tmp
 NAME                                   USED  AVAIL  REFER  MOUNTPOINT
 mypool/var/tmp                         262K  93.2G   120K  /var/tmp
 mypool/var/tmp@my_recursive_snapshot    88K      -   152K  -
 mypool/var/tmp@after_cp               53.5K      -   118K  -
 mypool/var/tmp@diff_snapshot              0      -   120K  -
 # ls /var/tmp
 passwd          passwd.copy     vi.recover
 # rm /var/tmp/passwd*
 # ls /var/tmp
 vi.recover
 #

   Zu diesem Zeitpunkt bemerkt der Benutzer, dass zuviele Dateien gelo:scht
   wurden und mo:chte diese zuru:ck haben. ZFS bietet eine einfache
   Mo:glichkeit, diese durch zuru:ckrollen zuru:ck zu bekommen, allerdings
   nur, wenn Schnappschu:sse von wichtigen Daten regelma:ssig angelegt
   werden. Um die Dateien zuru:ckzuerhalten und vom letzten Schnappschuss
   wieder zu beginnen, geben Sie ein:

 # zfs rollback mypool/var/tmp@diff_snapshot
 # ls /var/tmp
 passwd          passwd.copy     vi.recover

   Die Operation zum Zuru:ckrollen versetzt das Dataset in den Zustand des
   letzten Schnappschusses zuru:ck. Es ist ebenfalls mo:glich, zu einem
   Schnappschuss zuru:ckzurollen, der viel fru:her angelegt wurde und es noch
   Schnappschu:sse nach diesem gibt. Wenn Sie dies versuchen, gibt ZFS die
   folgende Warnung aus:

 # zfs list -rt snapshot mypool/var/tmp
 AME                                   USED  AVAIL  REFER  MOUNTPOINT
 mypool/var/tmp@my_recursive_snapshot    88K      -   152K  -
 mypool/var/tmp@after_cp               53.5K      -   118K  -
 mypool/var/tmp@diff_snapshot              0      -   120K  -
 # zfs rollback mypool/var/tmp@my_recursive_snapshot
 cannot rollback to 'mypool/var/tmp@my_recursive_snapshot': more recent snapshots exist
 use '-r' to force deletion of the following snapshots:
 mypool/var/tmp@after_cp
 mypool/var/tmp@diff_snapshot

   Diese Warnung bedeutet, dass noch Schnappschu:sse zwischen dem momentanen
   Stand des Datasets und dem Schnappschuss, zu dem der Benutzer
   zuru:ckrollen mo:chte, existieren. Um das Zuru:ckrollen durchzufu:hren,
   mu:ssen die Schnappschu:sse gelo:scht werden. ZFS kann nicht alle
   A:nderungen zwischen verschiedenen Zusta:nden eines Datasets verfolgen, da
   Schnappschu:sse nur gelesen werden ko:nnen. ZFS wird nicht die betroffenen
   Schnappschu:sse lo:schen, es sei denn, der Benutzer verwendet die Option
   -r, um anzugeben, dass dies die gewu:nschte Aktion ist. Falls dies der
   Fall ist und die Konsequenzen alle dazwischenliegenden Schnappschu:sse zu
   verlieren verstanden wurden, kann der Befehl abgesetzt werden:

 # zfs rollback -r mypool/var/tmp@my_recursive_snapshot
 # zfs list -rt snapshot mypool/var/tmp
 NAME                                   USED  AVAIL  REFER  MOUNTPOINT
 mypool/var/tmp@my_recursive_snapshot     8K      -   152K  -
 # ls /var/tmp
 vi.recover

   Die Ausgabe von zfs list -t snapshot besta:tigt, dass die
   dazwischenliegenden Schnappschu:sse als Ergebnis von zfs rollback -r
   entfernt wurden.

    19.4.5.4. Individuelle Dateien aus Schnappschu:ssen wiederherstellen

   Schnappschu:sse sind unter einem versteckten Verzeichnis unter dem
   Eltern-Dataset eingeha:ngt: .zfs/snapshots/snapshotname. Standardma:ssig
   werden diese Verzeichnisse nicht von einem gewo:hnlichen ls -a angezeigt.
   Obwohl diese Verzeichnisse nicht angezeigt werden, sind diese trotzdem
   vorhanden und der Zugriff darauf erfolgt wie auf jedes andere Verzeichnis.
   Die Eigenschaft snapdir steuert, ob diese Verzeichnisse beim Auflisten
   eines Verzeichnisses angezeigt werden oder nicht. Das Einstellen der
   Eigenschaft auf den Wert visible erlaubt es, diese in der Ausgabe von ls
   und anderen Kommandos, die mit Verzeichnisinhalten umgehen ko:nnen,
   anzuzeigen.

 # zfs get snapdir mypool/var/tmp
 NAME            PROPERTY  VALUE    SOURCE
 mypool/var/tmp  snapdir   hidden   default
 # ls -a /var/tmp
 .               ..              passwd          vi.recover
 # zfs set snapdir=visible mypool/var/tmp
 # ls -a /var/tmp
 .               ..              .zfs            passwd          vi.recover

   Einzelne Dateien lassen sich einfach auf einen vorherigen Stand
   wiederherstellen, indem diese aus dem Schnappschuss zuru:ck in das
   Eltern-Dataset kopiert werden. Die Verzeichnisstruktur unterhalb von
   .zfs/snapshot entha:lt ein Verzeichnis, das exakt wie der Schnappschuss
   benannt ist, der zuvor angelegt wurde, um es einfacher zu machen, diese zu
   identifizieren. Im na:chsten Beispiel wird angenommen, dass eine Datei aus
   dem versteckten .zfs Verzeichnis durch kopieren aus dem Schnappschuss, der
   die letzte Version dieser Datei enthielt, wiederhergestellt wird:

 # rm /var/tmp/passwd
 # ls -a /var/tmp
 .               ..              .zfs            vi.recover
 # ls /var/tmp/.zfs/snapshot
 after_cp                my_recursive_snapshot
 # ls /var/tmp/.zfs/snapshot/after_cp
 passwd          vi.recover
 # cp /var/tmp/.zfs/snapshot/after_cp/passwd /var/tmp

   Als ls .zfs/snapshot ausgefu:hrt wurde, war die snapdir-Eigenschaft
   mo:glicherweise nicht auf hidden gesetzt, trotzdem ist es immer noch
   mo:glich, den Inhalt dieses Verzeichnisses aufzulisten. Es liegt am
   Administrator zu entscheiden, ob diese Verzeichnisse angezeigt werden
   soll. Es ist mo:glich, diese fu:r bestimmte Datasets anzuzeigen und fu:r
   andere zu verstecken. Das Kopieren von Dateien oder Verzeichnissen aus
   diesem versteckten .zfs/snapshot Verzeichnis ist einfach genug. Jedoch
   fu:hrt der umgekehrte Weg zu einem Fehler:

 # cp /etc/rc.conf /var/tmp/.zfs/snapshot/after_cp/
 cp: /var/tmp/.zfs/snapshot/after_cp/rc.conf: Read-only file system

   Der Fehler erinnert den Benutzer daran, dass Schnappschu:sse nur gelesen
   aber nicht mehr gea:ndert werden ko:nnen, nachdem diese angelegt wurden.
   Es ko:nnen keine Dateien in diese Schnappschuss-Verzeichnisse kopiert oder
   daraus gelo:scht werden, da dies sonst den Zustand des Datasets vera:ndern
   wu:rde, den sie repra:sentieren.

   Schnappschu:sse verbrauchen Speicherplatz basierend auf der Menge an
   A:nderungen, die am Eltern-Dataset durchgefu:hrt wurden, seit der Zeit als
   der Schnappschuss erstellt wurde. Die Eigenschaft written eines
   Schnappschusses verfolgt, wieviel Speicherplatz vom Schnappschuss belegt
   wird.

   Schnappschu:sse werden zersto:rt und der belegte Platz wieder freigegeben
   durch den Befehl zfs destroy dataset@snapshot. Durch hinzufu:gen von -r
   werden alle Schnappschu:sse rekursiv gelo:scht, die den gleichen Namen wie
   das Eltern-Dataset besitzen. Mit der Option -n -v wird eine Liste von
   Schnappschu:ssen, die gelo:scht werden wu:rden, zusammen mit einer
   gescha:tzten Menge an zuru:ckgewonnenem Speicherplatz angezeigt, ohne die
   eigentliche Zersto:roperation wirklich durchzufu:hren.

  19.4.6. Klone verwalten

   Ein Klon ist eine Kopie eines Schnappschusses, der mehr wie ein regula:res
   Dataset behandelt wird. Im Gegensatz zu Schnappschu:ssen kann man von
   einem Klon nicht nur lesen, er ist eingeha:ngt und kann seine eigenen
   Eigenschaften haben. Sobald ein Klon mittels zfs clone erstellt wurde,
   la:sst sich der zugrundeliegende Schnappschuss nicht mehr zersto:ren. Die
   Eltern-/Kindbeziehung zwischen dem Klon und dem Schnappschuss kann u:ber
   zfs promote aufgelo:st werden. Nachdem ein Klon auf diese Weise befo:rdert
   wurde, wird der Schnappschuss zum Kind des Klons, anstatt des
   urspru:nglichen Datasets. Dies wird die Art und Weise, wie der
   Speicherplatz berechnet wird, vera:ndern, jedoch nicht den bereits
   belegten Speicher anpassen. Der Klon kann an einem beliebigen Punkt
   innerhalb der ZFS-Dateisystemhierarchie eingeha:ngt werden, nur nicht
   unterhalb der urspru:nglichen Stelle des Schnappschusses.

   Um diese Klon-Funktionalita:t zu demonstrieren, wird dieses
   Beispiel-Dataset verwendet:

 # zfs list -rt all camino/home/joe
 NAME                    USED  AVAIL  REFER  MOUNTPOINT
 camino/home/joe         108K   1.3G    87K  /usr/home/joe
 camino/home/joe@plans    21K      -  85.5K  -
 camino/home/joe@backup    0K      -    87K  -

   Ein typischer Einsatzzweck fu:r Klone ist das experimentieren mit einem
   bestimmten Dataset, wa:hrend der Schnappschuss beibehalten wird fu:r den
   Fall, dass etwas schiefgeht. Da Schnappschu:sse nicht vera:ndert werden
   ko:nnen, wird ein Lese-/Schreibklon des Schnappschusses angelegt. Nachdem
   das gewu:nschte Ergebnis im Klon erreicht wurde, kann der Klon zu einem
   Dataset ernannt und das alte Dateisystem entfernt werden. Streng genommen
   ist das nicht no:tig, da der Klon und das Dataset ohne Probleme
   miteinander koexistieren ko:nnen.

 # zfs clone camino/home/joe@backup camino/home/joenew
 # ls /usr/home/joe*
 /usr/home/joe:
 backup.txz     plans.txt

 /usr/home/joenew:
 backup.txz     plans.txt
 # df -h /usr/home
 Filesystem          Size    Used   Avail Capacity  Mounted on
 usr/home/joe        1.3G     31k    1.3G     0%    /usr/home/joe
 usr/home/joenew     1.3G     31k    1.3G     0%    /usr/home/joenew

   Nachdem ein Klon erstellt wurde, stellt er eine exakte Kopie des Datasets
   zu dem Zeitpunkt dar, als der Schnappschuss angelegt wurde. Der Klon kann
   nun unabha:ngig vom urspru:nglichen Dataset gea:ndert werden. Die einzige
   Verbindung zwischen den beiden ist der Schnappschuss. ZFS zeichnet diese
   Verbindung in der Eigenschaft namens origin auf. Sobald die Abha:ngigkeit
   zwischen dem Schnappschuss und dem Klon durch das Befo:rdern des Klons
   mittels zfs promote entfernt wurde, wird auch die origin-Eigenschaft des
   Klons entfernt, da es sich nun um ein eigensta:ndiges Dataset handelt.
   Dieses Beispiel demonstriert dies:

 # zfs get origin camino/home/joenew
 NAME                  PROPERTY  VALUE                     SOURCE
 camino/home/joenew    origin    camino/home/joe@backup    -
 # zfs promote camino/home/joenew
 # zfs get origin camino/home/joenew
 NAME                  PROPERTY  VALUE   SOURCE
 camino/home/joenew    origin    -       -

   Nachdem ein paar A:nderungen, wie beispielsweise das Kopieren von
   loader.conf auf den befo:rderten Klon vorgenommen wurden, wird das alte
   Verzeichnis in diesem Fall u:berflu:ssig. Stattdessen kann der befo:rderte
   Klon diesen ersetzen. Dies kann durch zwei aufeinanderfolgende Befehl
   geschehen: zfs destroy auf dem alten Dataset und zfs rename auf dem Klon,
   um diesen genauso wie das alte Dataset zu benennen (es kann auch einen
   ganz anderen Namen erhalten).

 # cp /boot/defaults/loader.conf /usr/home/joenew
 # zfs destroy -f camino/home/joe
 # zfs rename camino/home/joenew camino/home/joe
 # ls /usr/home/joe
 backup.txz     loader.conf     plans.txt
 # df -h /usr/home
 Filesystem          Size    Used   Avail Capacity  Mounted on
 usr/home/joe        1.3G    128k    1.3G     0%    /usr/home/joe

   Der geklonte Schnappschuss wird jetzt wie ein gewo:hnliches Dataset
   behandelt. Es entha:lt alle Daten aus dem urspru:nglichen Schnappschuss
   inklusive der Dateien, die anschliessend hinzugefu:gt wurden, wie
   loader.conf. Klone ko:nnen in unterschiedlichen Szenarien eingesetzt
   werden, um nu:tzliche Eigenschaften fu:r ZFS-Anwender zur Verfu:gung zu
   stellen. Zum Beispiel ko:nnen Jails als Schnappschu:sse bereitgestellt
   werden, die verschiedene Arten von installierten Anwendungen anbieten.
   Anwender ko:nnen diese Schnappschu:sse klonen und ihre eigenen Anwendungen
   nach Belieben hinzufu:gen. Sobald sie mit den A:nderungen zufrieden sind,
   ko:nnen die Klone zu vollsta:ndigen Datasets ernannt werden und dem
   Anwender zur Verfu:gung gestellt werden, als wu:rde es sich um echte
   Datasets handeln. Das spart Zeit und Administrationsaufwand, wenn diese
   Jails auf diese Weise zur Verfu:gung gestellt werden.

  19.4.7. Replikation

   Daten auf einem einzigen Pool an einem Platz aufzubewahren, setzt diese
   dem Risiko aus, gestohlen oder Opfer von Naturgewalten zu werden, sowie
   menschlichem Versagen auszusetzen. Regelma:ssige Sicherungen des gesamten
   Pools ist daher unerla:sslich. ZFS bietet eine Reihe von eingebauten
   Serialisierungsfunktionen an, die in der Lage ist, eine Repra:sentation
   der Daten als Datenstrom auf die Standardausgabe zu schreiben. Mit dieser
   Methode ist es nicht nur mo:glich, die Daten auf einen anderen Pool zu
   schicken, der an das lokale System angeschlossen ist, sondern ihn auch
   u:ber ein Netzwerk an ein anderes System zu senden. Schnappschu:sse
   stellen dafu:r die Replikationsbasis bereit (lesen Sie dazu den Abschnitt
   zu ZFS snapshots). Die Befehle, die fu:r die Replikation verwendet werden,
   sind zfs send und zfs receive.

   Diese Beispiele demonstrieren die Replikation von ZFS anhand dieser beiden
   Pools:

 # zpool list
 NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 backup  960M    77K   896M     0%  1.00x  ONLINE  -
 mypool  984M  43.7M   940M     4%  1.00x  ONLINE  -

   Der Pool namens mypool ist der prima:re Pool, auf den regelma:ssig Daten
   geschrieben und auch wieder gelesen werden. Ein zweiter Pool, genannt
   backup wird verwendet, um als Reserve zu dienen im Falle, dass der
   prima:re Pool nicht zur Verfu:gung steht. Beachten Sie, dass diese
   Ausfallsicherung nicht automatisch von ZFS durchgefu:hrt wird, sondern
   manuell von einem Systemadministrator bei Bedarf eingerichtet werden muss.
   Ein Schnappschuss wird verwendet, um einen konsistenten Zustand des
   Dateisystems, das repliziert werden soll, zu erzeugen. Sobald ein
   Schnappschuss von mypool angelegt wurde, kann er auf den backup-Pool
   abgelegt werden. Nur Schnappschu:sse lassen sich auf diese Weise
   replizieren. A:nderungen, die seit dem letzten Schnappschuss entstanden
   sind, werden nicht mit repliziert.

 # zfs snapshot mypool@backup1
 # zfs list -t snapshot
 NAME                    USED  AVAIL  REFER  MOUNTPOINT
 mypool@backup1             0      -  43.6M  -

   Da nun ein Schnappschuss existiert, kann mit zfs send ein Datenstrom, der
   den Inhalt des Schnappschusses repra:sentiert, erstellt werden. Dieser
   Datenstrom kann als Datei gespeichert oder von einem anderen Pool
   empfangen werden. Der Datenstrom wird auf die Standardausgabe geschrieben,
   muss jedoch in eine Datei oder in eine Pipe umgeleitet werden, sonst wird
   ein Fehler produziert:

 # zfs send mypool@backup1
 Error: Stream can not be written to a terminal.
 You must redirect standard output.

   Um ein Dataset mit zfs send zu replizieren, leiten Sie dieses in eine
   Datei auf dem eingeha:ngten Backup-Pool um. Stellen Sie sicher, dass der
   Pool genug freien Speicherplatz besitzt, um die Gro:sse des gesendeten
   Schnappschusses aufzunehmen. Das beinhaltet alle Daten im Schnappschuss,
   nicht nur die A:nderungen zum vorherigen Schnappschuss.

 # zfs send mypool@backup1 > /backup/backup1
 # zpool list
 NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 backup  960M  63.7M   896M     6%  1.00x  ONLINE  -
 mypool  984M  43.7M   940M     4%  1.00x  ONLINE  -

   Das Kommando zfs send transferierte alle Daten im backup1-Schnappschuss
   auf den Pool namens backup. Erstellen und senden eines Schnappschusses
   kann automatisch von cron(8) durchgefu:hrt werden.

   Anstatt die Sicherungen als Archivdateien zu speichern, kann ZFS diese
   auch als aktives Dateisystem empfangen, was es erlaubt, direkt auf die
   gesicherten Daten zuzugreifen. Um an die eigentlichen Daten in diesem
   Strom zu gelangen, wird zfs receive benutzt, um den Strom wieder in
   Dateien und Verzeichnisse umzuwandeln. Das Beispiel unten kombiniert zfs
   send und zfs receive durch eine Pipe, um die Daten von einem Pool auf den
   anderen zu kopieren. Die Daten ko:nnen direkt auf dem empfangenden Pool
   verwendet werden, nachdem der Transfer abgeschlossen ist. Ein Dataset kann
   nur auf ein leeres Dataset repliziert werden.

 # zfs snapshot mypool@replica1
 # zfs send -v mypool@replica1 | zfs receive backup/mypool
 send from @ to mypool@replica1 estimated size is 50.1M
 total estimated size is 50.1M
 TIME        SENT   SNAPSHOT

 # zpool list
 NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 backup  960M  63.7M   896M     6%  1.00x  ONLINE  -
 mypool  984M  43.7M   940M     4%  1.00x  ONLINE  -

    19.4.7.1. Inkrementelle Sicherungen

   Die Unterschiede zwischen zwei Schnappschu:ssen kann zfs send ebenfalls
   erkennen und nur diese u:bertragen. Dies spart Speicherplatz und
   U:bertragungszeit. Beispielsweise:

 # zfs snapshot mypool@replica2
 # zfs list -t snapshot
 NAME                    USED  AVAIL  REFER  MOUNTPOINT
 mypool@replica1         5.72M      -  43.6M  -
 mypool@replica2             0      -  44.1M  -
 # zpool list
 NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 backup  960M  61.7M   898M     6%  1.00x  ONLINE  -
 mypool  960M  50.2M   910M     5%  1.00x  ONLINE  -

   Ein zweiter Schnappschuss genannt replica2 wurde angelegt. Dieser zweite
   Schnappschuss entha:lt nur die A:nderungen, die zwischen dem jetzigen
   Stand des Dateisystems und dem vorherigen Schnappschuss, replica1,
   vorgenommen wurden. Durch zfs send -i und die Angabe des
   Schnappschusspaares wird ein inkrementeller Replikationsstrom erzeugt,
   welcher nur die Daten entha:lt, die sich gea:ndert haben. Das kann nur
   erfolgreich sein, wenn der initiale Schnappschuss bereits auf der
   Empfa:ngerseite vorhanden ist.

 # zfs send -v -i mypool@replica1 mypool@replica2 | zfs receive /backup/mypool
 send from @replica1 to mypool@replica2 estimated size is 5.02M
 total estimated size is 5.02M
 TIME        SENT   SNAPSHOT

 # zpool list
 NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
 backup  960M  80.8M   879M     8%  1.00x  ONLINE  -
 mypool  960M  50.2M   910M     5%  1.00x  ONLINE  -

 # zfs list
 NAME                         USED  AVAIL  REFER  MOUNTPOINT
 backup                      55.4M   240G   152K  /backup
 backup/mypool               55.3M   240G  55.2M  /backup/mypool
 mypool                      55.6M  11.6G  55.0M  /mypool

 # zfs list -t snapshot
 NAME                                         USED  AVAIL  REFER  MOUNTPOINT
 backup/mypool@replica1                       104K      -  50.2M  -
 backup/mypool@replica2                          0      -  55.2M  -
 mypool@replica1                             29.9K      -  50.0M  -
 mypool@replica2                                 0      -  55.0M  -

   Der inkrementelle Datenstrom wurde erfolgreich u:bertragen. Nur die Daten,
   die vera:ndert wurden, sind u:bertragen worden, anstatt das komplette
   replica1. Nur die Unterschiede wurden gesendet, was weniger Zeit und
   Speicherplatz in Anspruch genommen hat, statt jedesmal den gesamten Pool
   zu kopieren. Das ist hilfreich wenn langsame Netzwerke oder Kosten fu:r
   die u:bertragene Menge Bytes in Erwa:gung gezogen werden mu:ssen.

   Ein neues Dateisystem, backup/mypool, ist mit allen Dateien und Daten vom
   Pool mypool verfu:gbar. Wenn die Option -P angegeben wird, werden die
   Eigenschaften des Datasets kopiert, einschliesslich der
   Komprimierungseinstellungen, Quotas und Einha:ngepunkte. Wird die Option
   -R verwendet, so werden alle Kind-Datasets des angegebenen Datasets
   kopiert, zusammen mit ihren Eigenschaften. Senden und Empfangen kann
   automatisiert werden, so dass regelma:ssig Sicherungen auf dem zweiten
   Pool angelegt werden.

    19.4.7.2. Sicherungen verschlu:sselt u:ber SSH senden

   Datenstro:me u:ber das Netzwerk zu schicken ist eine gute Methode, um
   Sicherungen ausserhalb des Systems anzulegen. Jedoch ist dies auch mit
   einem Nachteil verbunden. Daten, die u:ber die Leitung verschickt werden,
   sind nicht verschlu:sselt, was es jedem erlaubt, die Daten abzufangen und
   die Stro:me wieder zuru:ck in Daten umzuwandeln, ohne dass der sendende
   Benutzer davon etwas merkt. Dies ist eine unerwu:nschte Situation,
   besonders wenn die Datenstro:me u:ber das Internet auf ein entferntes
   System gesendet werden. SSH kann benutzt werden, um durch Verschlu:sselung
   geschu:tzte Daten u:ber eine Netzwerkverbindung zu u:bertragen. Da ZFS nur
   die Anforderung hat, dass der Strom von der Standardausgabe umgeleitet
   wird, ist es relativ einfach, diesen durch SSH zu leiten. Um den Inhalt
   des Dateisystems wa:hrend der U:bertragung und auf dem entfernten System
   weiterhin verschlu:sselt zu lassen, denken Sie u:ber den Einsatz von PEFS
   nach.

   Ein paar Einstellungen und Sicherheitsvorkehrungen mu:ssen zuvor
   abgeschlossen sein. Es werden hier nur die no:tigen Schritte fu:r die zfs
   send-Aktion gezeigt. Weiterfu:hrende Informationen zu SSH, gibt es im
   Kapitel Abschnitt 13.8, "OpenSSH".

   Die folgende Konfiguration wird beno:tigt:

     * Passwortloser SSH-Zugang zwischen dem sendenden und dem empfangenden
       Host durch den Einsatz von SSH-Schlu:sseln.

     * Normalerweise werden die Privilegien des root-Benutzers gebraucht, um
       Strom zu senden und zu empfangen. Das beinhaltet das Anmelden auf dem
       empfangenden System als root. Allerdings ist das Anmelden als root aus
       Sicherheitsgru:nden standardma:ssig deaktiviert. Mit ZFS Delegation
       lassen sich nicht-root-Benutzer auf jedem System einrichten, welche
       die no:tigen Rechte besitzen, um die Sende- und Empfangsoperation
       durchzufu:hren.

     * Auf dem sendenden System:

 # zfs allow -u someuser send,snapshot mypool

     * Um den Pool einzuha:ngen, muss der unprivilegierte Benutzer das
       Verzeichnis besitzen und gewo:hnliche Benutzern muss die Erlaubnis
       gegeben werden, das Dateisystem einzuha:ngen. Auf dem empfangenden
       System nehmen Sie dazu die folgenden Einstellungen vor:

 # sysctl vfs.usermount=1
 vfs.usermount: 0 -> 1
 # sysrc -f /boot/sysctl.conf vfs.usermount=1
 # zfs create recvpool/backup
 # zfs allow -u someuser create,mount,receive recvpool/backup
 # chown someuser /recvpool/backup

   Der unprivilegierte Benutzer hat jetzt die Fa:higkeit, Datasets zu
   empfangen und einzuha:ngen und das home-Dataset auf das entfernte System
   zu replizieren:

 % zfs snapshot -r mypool/home@monday
 % zfs send -R mypool/home@monday | ssh someuser@backuphost zfs recv -dvu recvpool/backup

   Ein rekursiver Schnappschuss namens monday wird aus dem Dataset home
   erstellt, dass auf dem Pool mypool liegt. Es wird dann mit zfs send -R
   gesendet, um das Dataset, alle seine Kinder, Schnappschu:sse, Klone und
   Einstellungen in den Strom mit aufzunehmen. Die Ausgabe wird an das
   wartende System backuphost mittels zfs receive durch SSH umgeleitet. Die
   Verwendung des Fully Qulified Doma:nennamens oder der IP-Adresse wird
   empfohlen. Die empfangende Maschine schreibt die Daten auf das
   backup-Dataset im recvpool-Pool. Hinzufu:gen der Option -d zu zfs recv
   u:berschreibt den Namen des Pools auf der empfangenden Seite mit dem Namen
   des Schnappschusses. Durch Angabe von -u wird das Dateisystem nicht auf
   der Empfa:ngerseite eingeha:ngt. Wenn -v enthalten ist, werden mehr
   Details zum Transfer angezeigt werden, einschliesslich der vergangenen
   Zeit und der Menge an u:bertragenen Daten.

  19.4.8. Dataset-, Benutzer- und Gruppenquotas

   Dataset-Quotas werden eingesetzt, um den Speicherplatz einzuschra:nken,
   den ein bestimmtes Dataset verbrauchen kann. Referenz-Quotas funktionieren
   auf eine a:hnliche Weise, jedoch wird dabei der Speicherplatz des Datasets
   selbst geza:hlt, wobei Schnappschu:sse und Kind-Datasets dabei ausgenommen
   sind. A:hnlich dazu werden Benutzer- und Gruppen-Quotas dazu verwendet, um
   Benutzer oder Gruppen daran zu hindern, den gesamten Speicherplatz im Pool
   oder auf dem Dataset zu verbrauchen.

   Um ein 10 GB grosses Quota auf dem Dataset storage/home/bob zu erzwingen,
   verwenden Sie folgenden Befehl:

 # zfs set quota=10G storage/home/bob

   Um ein Referenzquota von 10 GB fu:r storage/home/bob festzulegen, geben
   Sie ein:

 # zfs set refquota=10G storage/home/bob

   Um das Quota fu:r storage/home/bob wieder zu entfernen:

 # zfs set quota=none storage/home/bob

   Das generelle Format ist userquota@user=size und der Name des Benutzers
   muss in einem der folgenden Formate vorliegen:

     * POSIX-kompatibler Name wie joe.

     * POSIX-numerische ID wie 789.

     * SID-Name wie joe.bloggs@example.com.

     * SID-numerische ID wie S-1-123-456-789.

   Um beispielsweise ein Benutzerquota von 50 GB fu:r den Benutzer names joe
   zu erzwingen:

 # zfs set userquota@joe=50G

   Um jegliche Quotas zu entfernen:

 # zfs set userquota@joe=none

  Anmerkung:

   Benutzerquota-Eigenschaften werden nicht von zfs get all dargestellt.
   Nicht-root-Benutzer ko:nnen nur ihre eigenen Quotas sehen, ausser ihnen
   wurde das userquota-Privileg zugeteilt. Benutzer mit diesem Privileg sind
   in der Lage, jedermanns Quota zu sehen und zu vera:ndern.

   Das generelle Format zum Festlegen einer Gruppenquota lautet:
   groupquota@group=size.

   Um ein Quota fu:r die Gruppe firstgroup von 50 GB zu setzen, geben Sie
   ein:

 # zfs set groupquota@firstgroup=50G

   Um eine Quota fu:r die Gruppe firstgroupzu setzen oder sicherzustellen,
   dass diese nicht gesetzt ist, verwenden Sie stattdessen:

 # zfs set groupquota@firstgroup=none

   Genau wie mit der Gruppenquota-Eigenschaft, werden nicht-root-Benutzer nur
   die Quotas sehen, die den Gruppen zugeordnet ist, in denen Sie Mitglied
   sind. Allerdings ist root oder ein Benutzer mit dem groupquota-Privileg in
   der Lage, die Quotas aller Gruppen zu sehen und festzusetzen.

   Um die Menge an Speicherplatz zusammen mit der Quota anzuzeigen, die von
   jedem Benutzer auf dem Dateisystem oder Schnappschuss verbraucht wird,
   verwenden Sie zfs userspace. Fu:r Gruppeninformationen, nutzen Sie zfs
   groupspace. Fu:r weitere Informationen zu unterstu:tzten Optionen oder wie
   sich nur bestimmte Optionen anzeigen lassen, lesen Sie zfs(1).

   Benutzer mit ausreichenden Rechten sowie root ko:nnen das Quota fu:r
   storage/home/bob anzeigen lassen:

 # zfs get quota storage/home/bob

  19.4.9. Reservierungen

   Reservierungen garantieren ein Minimum an Speicherplatz, der immer auf dem
   Dataset verfu:gbar sein wird. Der reservierte Platz wird nicht fu:r andere
   Datasets zur Verfu:gung stehen. Diese Eigenschaft kann besonders nu:tzlich
   sein, um zu gewa:hrleisten, dass freier Speicherplatz fu:r ein wichtiges
   Dataset oder fu:r Logdateien bereit steht.

   Das generelle Format der reservation-Eigenschaft ist reservation=size. Um
   also eine Reservierung von 10 GB auf storage/home/bob festzulegen, geben
   Sie Folgendes ein:

 # zfs set reservation=10G storage/home/bob

   Um die Reservierung zu beseitigen:

 # zfs set reservation=none storage/home/bob

   Das gleiche Prinzip kann auf die refreservation-Eigenschaft angewendet
   werden, um eine Referenzreservierung mit dem generellen Format
   refreservation=size festzulegen.

   Dieser Befehl zeigt die Reservierungen oder Referenzreservierungen an, die
   auf storage/home/bob existieren:

 # zfs get reservation storage/home/bob
 # zfs get refreservation storage/home/bob

  19.4.10. Komprimierung

   ZFS bietet transparente Komprimierung. Datenkomprimierung auf Blockebene
   wa:hrend diese gerade geschrieben werden, spart nicht nur Plattenplatz
   ein, sondern kann auch den Durchsatz der Platte steigern. Falls Daten zu
   25% komprimiert sind, jedoch die komprimierten Daten im gleichen Tempo wie
   ihre unkomprimierte Version, resultiert das in einer effektiven
   Schreibgeschwindigkeit von 125%. Komprimierung kann auch eine Alternative
   zu Deduplizierung darstellen, da es viel weniger zusa:tzlichen
   Hauptspeicher beno:tigt.

   ZFS bietet mehrere verschiedene Kompressionsalgorithmen an, jede mit
   unterschiedlichen Kompromissen. Mit der Einfu:hrung von LZ4-Komprimierung
   in ZFS v5000, ist es mo:glich, Komprimierung fu:r den gesamten Pool zu
   aktivieren, ohne die grossen Geschwindigkeitseinbussen der anderen
   Algorithmen. Der gro:sste Vorteil von LZ4 ist die Eigenschaft fru:her
   Abbruch. Wenn LZ4 nicht mindestens 12,5% Komprimierung im ersten Teil der
   Daten erreicht, wird der Block unkomprimiert geschrieben, um die
   Verschwendung von CPU-Zyklen zu vermeiden, weil die Daten entweder bereits
   komprimiert sind oder sich nicht komprimieren lassen. Fu:r Details zu den
   verschiedenen verfu:gbaren Komprimierungsalgorithmen in ZFS, lesen Sie den
   Eintrag Komprimierung im Abschnitt Terminologie

   Der Administrator kann die Effektivita:t der Komprimierung u:ber eine
   Reihe von Dataset-Eigenschaften u:berwachen.

 # zfs get used,compressratio,compression,logicalused mypool/compressed_dataset
 NAME        PROPERTY          VALUE     SOURCE
 mypool/compressed_dataset  used              449G      -
 mypool/compressed_dataset  compressratio     1.11x     -
 mypool/compressed_dataset  compression       lz4       local
 mypool/compressed_dataset  logicalused       496G      -

   Dieses Dataset verwendet gerade 449 GB Plattenplatz (used-Eigenschaft.
   Ohne Komprimierung wu:rde es stattdessen 496 GB Plattenplatz belegen
   (logicalused). Das ergibt eine Kompressionsrate von 1,11:1.

   Komprimierung kann einen unerwarteten Nebeneffekt haben, wenn diese mit
   Benutzerquotas kombiniert wird. Benutzerquotas beschra:nken, wieviel
   Speicherplatz ein Benutzer auf einem Dataset verbrauchen kann. Jedoch
   basieren die Berechnungen darauf, wieviel Speicherplatz nach der
   Komprimierung belegt ist. Wenn also ein Benutzer eine Quota von10 GB
   besitzt und 10 GB von komprimierbaren Daten schreibt, wird dieser immer
   noch in der Lage sein, zusa:tzliche Daten zu speichern. Wenn spa:ter eine
   Datei aktualisiert wird, beispielsweise eine Datenbank, mit mehr oder
   weniger komprimierbaren Daten, wird sich die Menge an verfu:gbarem
   Speicherplatz a:ndern. Das kann in einer merkwu:rdigen Situation
   resultieren, in welcher der Benutzer nicht die eigentliche Menge an Daten
   (die Eigenschaft logicalused) u:berschreitet, jedoch die A:nderung in der
   Komprimierung dazu fu:hrt, dass das Quota-Limit erreicht ist.

   Kompression kann ebenso unerwartet mit Sicherungen interagieren. Quotas
   werden oft verwendet, um einzuschra:nken, wieviele Daten gespeichert
   werden ko:nnen um sicherzustellen, dass ausreichend Speicherplatz fu:r die
   Sicherung vorhanden ist. Wenn jedoch Quotas Komprimierung nicht
   beru:cksichtigen, werden womo:glich mehr Daten geschrieben als in der
   unkomprimierten Sicherung Platz ist.

  19.4.11. Deduplizierung

   Wenn aktiviert, verwendet Deduplizierung die Pru:fsumme jedes Blocks, um
   Duplikate dieses Blocks zu ermitteln. Sollte ein neuer Block ein Duplikat
   eines existierenden Blocks sein, dann schreibt ZFS eine zusa:tzliche
   Referenz auf die existierenden Daten anstatt des kompletten duplizierten
   Blocks. Gewaltige Speicherplatzeinsparungen sind mo:glich wenn die Daten
   viele Duplikate von Dateien oder wiederholte Informationen enthalten.
   Seien Sie gewarnt: Deduplizierung beno:tigt eine extrem grosse Menge an
   Hauptspeicher und die meistens Einsparungen ko:nnen stattdessen durch das
   Aktivieren von Komprimierung erreicht werden.

   Um Deduplizierung zu aktivieren, setzen Sie die dedup-Eigenschaft auf dem
   Zielpool:

 # zfs set dedup=on pool

   Nur neu auf den Pool geschriebene Daten werden dedupliziert. Daten, die
   bereits auf den Pool geschrieben wurden, werden nicht durch das Aktivieren
   dieser Option dedupliziert. Ein Pool mit einer gerade aktivierten
   Deduplizierung wird wie in diesem Beispiel aussehen:

 # zpool list
 NAME  SIZE ALLOC  FREE CAP DEDUP HEALTH ALTROOT
 pool 2.84G 2.19M 2.83G  0% 1.00x ONLINE -

   Die Spalte DEDUP zeigt das aktuelle Verha:ltnis der Deduplizierung fu:r
   diesen Pool an. Ein Wert von 1.00x zeigt an, dass die Daten noch nicht
   dedupliziert wurden. Im na:chsten Beispiel wird die Ports-Sammlung dreimal
   in verschiedene Verzeichnisse auf dem deduplizierten Pool kopiert.

 # for d in dir1 dir2 dir3; do
 > mkdir $d && cp -R /usr/ports $d &
 > done

   Redundante Daten werden erkannt und dedupliziert:

 # zpool list
 NAME SIZE  ALLOC FREE CAP DEDUP HEALTH ALTROOT
 pool 2.84G 20.9M 2.82G 0% 3.00x ONLINE -

   Die DEDUP-Spalte zeigt einen Faktor von 3.00x. Mehrere Kopien der
   Ports-Sammlung wurden erkannt und dedupliziert, was nur ein Drittel des
   Speicherplatzes beno:tigt. Das Potential fu:r Einsparungen beim
   Speicherplatz ist enorm, wird jedoch damit erkauft, dass genu:gend
   Speicher zur Verfu:gung stehen muss, um die deduplizierten Blo:cke zu
   verwalten.

   Deduplizierung ist nicht immer gewinnbringend, besonders wenn die Daten
   auf dem Pool nicht redundant sind. ZFS kann potentielle
   Speicherplatzeinsparungen durch Deduplizierung auf einem Pool simulieren:

 # zdb -S pool
 Simulated DDT histogram:

 bucket              allocated                       referenced
 ______   ______________________________   ______________________________
 refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
 ------   ------   -----   -----   -----   ------   -----   -----   -----
      1    2.58M    289G    264G    264G    2.58M    289G    264G    264G
      2     206K   12.6G   10.4G   10.4G     430K   26.4G   21.6G   21.6G
      4    37.6K    692M    276M    276M     170K   3.04G   1.26G   1.26G
      8    2.18K   45.2M   19.4M   19.4M    20.0K    425M    176M    176M
     16      174   2.83M   1.20M   1.20M    3.33K   48.4M   20.4M   20.4M
     32       40   2.17M    222K    222K    1.70K   97.2M   9.91M   9.91M
     64        9     56K   10.5K   10.5K      865   4.96M    948K    948K
    128        2   9.50K      2K      2K      419   2.11M    438K    438K
    256        5   61.5K     12K     12K    1.90K   23.0M   4.47M   4.47M
     1K        2      1K      1K      1K    2.98K   1.49M   1.49M   1.49M
  Total    2.82M    303G    275G    275G    3.20M    319G    287G    287G

 dedup = 1.05, compress = 1.11, copies = 1.00, dedup * compress / copies = 1.16

   Nachdem zdb -S die Analyse des Pool abgeschlossen hat, zeigt es die
   Speicherplatzeinsparungen, die durch aktivierte Deduplizierung erreichbar
   sind, an. In diesem Fall ist 1.16 ein sehr schlechter Faktor, der
   gro:sstenteils von Einsparungen durch Komprimierung beeinflusst wird.
   Aktivierung von Deduplizierung auf diesem Pool wu:rde also keine
   signifikante Menge an Speicherplatz einsparen und ist daher nicht die
   Menge an Speicher wert, die no:tig sind, um zu deduplizieren. U:ber die
   Formel ratio = dedup * compress / copies kann ein Systemadministrator die
   Speicherplatzbelegung planen und entscheiden, ob es sich lohnt, den
   zusa:tzlichen Hauptspeicher fu:r die Deduplizierung anhand des spa:teren
   Workloads aufzuwenden. Wenn sich die Daten verha:ltnisma:ssig gut
   komprimieren lassen, sind die Speicherplatzeinsparungen sehr gut. Es wird
   empfohlen, in dieser Situation zuerst die Komprimierung zu aktivieren, da
   diese auch erho:hte Geschwindigkeit mit sich bringt. Aktivieren Sie
   Deduplizierung nur in solchen Fa:llen, bei denen die Einsparungen
   betra:chtlich sind und genug Hauptspeicher zur Verfu:gung steht, um die
   DDT aufzunehmen.

  19.4.12. ZFS und Jails

   Um ein ZFS-Dataset einem Jail zuzuweisen, wird der Befehl zfs jail und die
   dazugeho:rige Eigenschaft jailed verwendet. Durch Angabe von zfs jail
   jailid wird ein Dataset dem spezifizierten Jail zugewiesen und kann mit
   zfs unjail wieder abgeha:ngt werden. Damit das Dataset innerhalb der Jail
   kontrolliert werden kann, muss die Eigenschaft jailed gesetzt sein. Sobald
   ein Dataset sich im Jail befindet, kann es nicht mehr la:nger auf dem
   Hostsystem eingeha:ngt werden, da es Einha:ngepunkte aufweisen ko:nnte,
   welche die Sicherheit des Systems gefa:hrden.

19.5. Delegierbare Administration

   Ein umfassendes System zur Berechtigungsu:bertragung erlaubt
   unprivilegierten Benutzern, ZFS-Administrationsaufgaben durchzufu:hren.
   Beispielsweise, wenn jedes Heimatverzeichnis eines Benutzers ein Dataset
   ist, ko:nnen Benutzer das Recht darin erhalten, Schnappschu:sse zu
   erstellen und zu zersto:ren. Einem Benutzer fu:r die Sicherung kann die
   Erlaubnis eingera:umt werden, die Replikationseigenschaft zu verwenden.
   Einem Skript zum Sammeln von Speicherplatzverbrauch kann die Berechtigung
   gegeben werden, nur auf die Verbrauchsdaten aller Benutzer zuzugreifen. Es
   ist sogar mo:glich, die Mo:glichkeit zum Delegieren zu delegieren. Die
   Berechtigung zur Delegation ist fu:r jedes Unterkommando und die meisten
   Eigenschaften mo:glich.

  19.5.1. Delegieren, ein Dataset zu erstellen

   zfs allow someuser create mydataset gibt dem angegebenen Benutzer die
   Berechtigung, Kind-Datasets unter dem ausgewa:hlten Elterndataset
   anzulegen. Es gibt einen Haken: ein neues Dataset anzulegen beinhaltet,
   dass es eingeha:ngt wird. Dies bedeutet, dass FreeBSDs vfs.usermount
   sysctl(8) auf 1 gesetzt wird, um nicht-root Benutzern zu erlauben,
   Dateisysteme einzubinden. Es gibt eine weitere Einschra:nkung um
   Missbrauch zu verhindern: nicht-root Benutzer mu:ssen Besitzer des
   Einha:ngepunktes sein, an dem das Dateisystem eingebunden werden soll.

  19.5.2. Delegationsberechtigung delegieren

   zfs allow someuser allow mydataset gibt dem angegebenen Benutzer die
   Fa:higkeit, jede Berechtigung, die er selbst auf dem Dataset oder dessen
   Kindern besitzt, an andere Benutzer weiterzugeben. Wenn ein Benutzer die
   snapshot- und die allow-Berechtigung besitzt, kann dieser dann die
   snapshot-Berechtigung an andere Benutzer delegieren.

19.6. Themen fu:r Fortgeschrittene

  19.6.1. Anpassungen

   Eine Reihe von Anpassungen ko:nnen vorgenommen werden, um ZFS unter
   verschiedenen Belastungen wa:hrend des Betriebs bestmo:glich einzustellen.

     * vfs.zfs.arc_max - Maximale Gro:sse des ARC. Die Voreinstellung ist der
       gesamte RAM weniger 1 GB oder die Ha:lfte vom RAM, je nachdem, was
       mehr ist. Allerdings sollte ein niedriger Wert verwendet werden, wenn
       das System weitere Dienste oder Prozesse laufen la:sst, welche
       Hauptspeicher beno:tigen. Dieser Wert kann nur zur Bootzeit
       eingestellt werden und wird in /boot/loader.conf festgelegt.

     * vfs.zfs.arc_meta_limit - Schra:nkt die Menge des ARC ein, welche fu:r
       die Speicherung von Metadaten verwendet wird. Die Voreinstellung ist
       ein Viertel von vfs.zfs.arc_max. Diesen Wert zu erho:hen steigert die
       Geschwindigkeit, wenn die Arbeitslast Operationen auf einer grossen
       Menge an Dateien und Verzeichnissen oder ha:ufigen
       Metadatenoperationen beinhaltet. Jedoch bedeutet dies auch weniger
       Dateidaten, die in den ARC passen. Dieser Wert kann nur zur Bootzeit
       angepasst werden und wird in /boot/loader.conf gesetzt.

     * vfs.zfs.arc_min - Minimale Gro:sse des ARC. Der Standard betra:gt die
       Ha:lfte von vfs.zfs.arc_meta_limit. Passen Sie diesen Wert an, um zu
       verhindern, dass andere Anwendungen den gesamten ARC verdra:ngen.
       Dieser Wert kann nur zur Bootzeit gea:ndert und muss in
       /boot/loader.conf festgelegt werden.

     * vfs.zfs.vdev.cache.size - Eine vorallokierte Menge von Speicher, die
       als Cache fu:r jedes Gera:t im Pool reserviert wird. Die Gesamtgro:sse
       von verwendetem Speicher ist dieser Wert multipliziert mit der Anzahl
       an Gera:ten. Nur zur Bootzeit kann dieser Wert angepasst werden und
       wird in /boot/loader.conf eingestellt.

     * vfs.zfs.min_auto_ashift - Minimaler ashift-Wert (Sektorgro:sse),
       welche zur Erstellungszeit des Pools automatisch verwendet wird. Der
       Wert ist ein Vielfaches zur Basis Zwei. Der Standardwert von 9
       repra:sentiert 2^9 = 512, eine Sektorgro:sse von 512 Bytes. Um write
       amplification zu vermeiden und die bestmo:gliche Geschwindigkeit zu
       erhalten, setzen Sie diesen Wert auf die gro:sste Sektorgro:sse, die
       bei einem Gera:t im Pool vorhanden ist.

       Viele Gera:te besitzen 4 KB grosse Sektoren. Die Verwendung der
       Voreinstellung 9 bei ashift mit diesen Gera:ten resultiert in einer
       write amplification auf diesen Gera:ten. Daten, welche in einem
       einzelnen 4 KB Schreibvorgang Platz finden wu:rden, mu:ssen
       stattdessen in acht 512-byte Schreibvorga:nge aufgeteilt werden. ZFS
       versucht, die allen Gera:ten zugrundeliegende Sektorgro:sse wa:hrend
       der Poolerstellung zu lesen, jedoch melden viele Gera:te mit 4 KB
       Sektoren, dass ihre Sektoren aus Kompatibilita:tsgru:nden 512 Bytes
       betragen. Durch das Setzen von vfs.zfs.min_auto_ashift auf 12 (2^12 =
       4096) bevor der Pool erstellt wird, zwingt ZFS dazu, fu:r diese
       Gera:te 4 KB Blo:cke fu:r bessere Geschwindigkeit zu nutzen.

       Erzwingen von 4 KB Blo:cken ist ebenfalls hilfreich auf Pools bei
       denen Plattenaufru:stungen geplant sind. Zuku:nftige Platten werden
       wahrscheinlich 4 KB grosse Sektoren und der Wert von ashift la:sst
       sich nach dem Erstellen des Pools nicht mehr a:ndern.

       In besonderen Fa:llen ist die kleinere Blockgro:sse von 512-Byte
       vorzuziehen. Weniger Daten werden bei kleinen, zufa:lligen
       Leseoperationen u:bertragen, was besonders bei 512-Byte grossen
       Platten fu:r Datenbanken oder Plattenplatz fu:r virtuelle Maschinen
       der Fall ist. Dies kann bessere Geschwindigkeit bringen, ganz
       besonders wenn eine kleinere ZFS record size verwendet wird.

     * vfs.zfs.prefetch_disable - Prefetch deaktivieren. Ein Wert von 0
       bedeutet aktiviert und 1 heisst deaktiviert. Die Voreinstellung ist 0,
       ausser, das System besitzt weniger als 4 GB RAM. Prefetch funktioniert
       durch das Lesen von gro:sseren Blo:cken in den ARC als angefordert
       wurden, in der Hoffnung, dass diese Daten ebenfalls bald beno:tigt
       werden. Wenn die I/O-Last viele grosse Mengen von zufa:lligen
       Leseoperationen beinhaltet, ist das Deaktivieren von prefetch eine
       Geschwindigkeitssteigerung durch die Reduzierung von unno:tigen
       Leseoperationen. Dieser Wert kann zu jeder Zeit u:ber sysctl(8)
       angepasst werden.

     * vfs.zfs.vdev.trim_on_init - Steuert, ob neue Gera:te, die dem Pool
       hinzugefu:gt werden, das TRIM-Kommando ausfu:hren sollen. Das
       beinhaltet die beste Geschwindigkeit und Langlebigkeit fu:r SSDs,
       beno:tigt jedoch zusa:tzliche Zeit. Wenn das Gera:t bereits sicher
       gelo:scht wurde, kann durch deaktivieren dieser Option das Hinzufu:gen
       neuer Gera:te schneller geschehen. U:ber sysctl(8) la:sst sich dieser
       Wert jederzeit einstellen.

     * vfs.zfs.vdev.max_pending - Begrenzt die Menge von ausstehenden
       I/O-Anfragen pro Gera:t. Ein gro:sserer Wert wird die
       Gera:tewarteschlange fu:r Befehle gefu:llt lassen und mo:glicherweise
       besseren Durchsatz erzeugen. Ein niedrigerer Wert reduziert die
       Latenz. Jederzeit kann dieser Wert u:ber sysctl(8) angepasst werden.

     * vfs.zfs.top_maxinflight - Maximale Anzahl von ausstehenden I/Os pro
       daru:berliegendem vdev. Begrenzt die Tiefe Kommandowarteschlange, um
       hohe Latenzen zu vermeiden. Das Limit ist pro daru:berliegendem vdev,
       was bedeutet, dass das Limit fu:r jeden mirror, RAID-Z, oder anderes
       vdev unabha:ngig gilt. Mit sysctl(8) kann dieser Wert jederzeit
       angepasst werden.

     * vfs.zfs.l2arc_write_max - Begrenzt die Menge an Daten, die pro Sekunde
       in den L2ARC geschrieben wird. Durch diese Einstellung la:sst sich die
       Lebensdauer von SSDs erho:hen, indem die Menge an Daten beschra:nkt
       wird, die auf das Gera:t geschrieben wird. Dieser Wert ist u:ber
       sysctl(8) zu einem beliebigen Zeitpunkt a:nderbar.

     * vfs.zfs.l2arc_write_boost - Der Wert dieser Einstellung wird zu
       vfs.zfs.l2arc_write_max addiert und erho:ht die Schreibgeschwindigkeit
       auf die SSD bis der erste Block aus dem L2ARC verdra:ngt wurde. Diese
       "Turbo Warmup Phase" wurde entwickelt, um den Geschwindigkeitsverlust
       eines leeren L2ARC nach einem Neustart zu reduzieren. Jederzeit kann
       dieser Wert mit sysctl(8) gea:ndert werden.

     * vfs.zfs.scrub_delay - Anzahl von Ticks an Verzo:gerung zwischen jedem
       I/O wa:hrend eines scrub. Um zu gewa:hrleisten, dass ein scrub nicht
       mit die normalen Vorga:nge eines Pools beeintra:chtigt. Wenn
       wa:hrenddessen andere I/Os durchgefu:hrt werden, wird der scrub
       zwischen jedem Befehl verzo:gert. Dieser Wert regelt die Gesamtmenge
       von IOPS (I/Os Per Second), die von scrub generiert werden. Die
       Granularita:t der Einstellung ist bestimmt durch den Wert von kern.hz,
       welcher standardma:ssig auf auf 1000 Ticks pro Sekunde eingestellt
       ist. Diese Einstellung kann gea:ndert werden, was in einer
       unterschiedlich effektiven Limitierung der IOPS resultiert. Der
       Standardwert ist 4, was ein Limit von 1000 ticks/sec / 4 = 250 IOPS
       ergibt. Ein Wert von 20 wu:rde ein Limit von 1000 ticks/sec / 20 =
       50 IOPS ergeben. Die scrub-Geschwindigkeit ist nur begrenzt, wenn es
       ku:rzlich Aktivita:t auf dem Pool gab, wie der Wert von
       vfs.zfs.scan_idle verra:t. Zu einem beliebigen Zeitpunkt kann u:ber
       sysctl(8) eine A:nderung an diesem Wert erfolgen.

     * vfs.zfs.resilver_delay - Anzahl an Millisekunden Verzo:gerung, die
       zwischen jedem I/O wa:hrend eines resilver eingefu:gt wird. Um zu
       versichern, dass ein resilver nicht die normalen Vorga:nge auf dem
       Pool sto:rt, wird dieser zwischen jedem Kommando verzo:gert, wenn
       andere I/Os auf dem Pool passieren. Dieser Wert steuert das Limit der
       Gesamt-IOPS (I/Os Pro Sekunde), die vom resilver erzeugt werden. Die
       Granularita:t der Einstellung wird durch den Wert von kern.hz
       bestimmt, welcher standardma:ssig 1000 Ticks pro Sekunde betra:gt.
       Diese Einstellung la:sst sich a:ndern, was in einem unterschiedlich
       effizienten IOPS-Limit resultiert. Die Voreinstellung ist 2, was ein
       Limit von 1000 ticks/sec / 2 = 500 IOPS betra:gt. Einen Pool wieder in
       den Zustand Online zu versetzen ist mo:glicherweise wichtiger wenn
       eine andere Platte den Pool in den Fault-Zustand versetzt, was
       Datenverlust zur Folge hat. Ein Wert von 0 wird der resilver-Operation
       die gleiche Priorita:t wie anderen Operationen geben, was den
       Heilungsprozess beschleunigt. Die Geschwindigkeit des resilver wird
       nur begrenzt, wenn es ku:rzlich andere Aktivita:ten auf dem Pool gab,
       wie von vfs.zfs.scan_idle festgestellt wird. Dieser Wert kann zu jeder
       Zeit u:ber. sysctl(8) eingestellt werden.

     * vfs.zfs.scan_idle - Anzahl an Millisekunden seit der letzten Operation
       bevor der Pool als im Leerlauf befindlich deklariert wird. Wenn sich
       der Pool im Leerlauf befindet, wird die Begrenzung fu:r scrub und
       resilver deaktiviert. Dieser Wert kann mittels sysctl(8) jederzeit
       angepasst werden.

     * vfs.zfs.txg.timeout - Maximale Anzahl von Sekunden zwischen
       Transaktionsgruppen (transaction group). Die momentane
       Transaktionsgruppe wird auf den Pool geschrieben und eine frische
       Transaktionsgruppe begonnen, wenn diese Menge an Zeit seit der
       vorherigen Transaktionsgruppe abgelaufen ist. Eine Transaktionsgruppe
       kann verfru:ht ausgelo:st werden, wenn genug Daten geschrieben werden.
       Der Standardwert betra:gt 5 Sekunden. Ein gro:sserer Wert kann die
       Lesegeschwindigkeit durch verzo:gern von asynchronen Schreibvorga:ngen
       verbessern, allerdings kann dies ungleiche Geschwindigkeiten
       hervorrufen, wenn eine Transaktionsgruppe geschrieben wird. Dieser
       Wert kann zu einem beliebigen Zeitpunkt mit sysctl(8) gea:ndert
       werden.

  19.6.2. ZFS auf i386

   Manche der Eigenschaften, die von ZFS bereitgestellt werden, sind
   speicherintensiv und beno:tigen Anpassungen fu:r die maximale Effizienz
   auf Systemen mit begrenztem RAM.

    19.6.2.1. Hauptspeicher

   Als absolutes Minimum sollte der gesamte verfu:gbare Hauptspeicher
   mindestens ein Gigabyte betragen. Die vorgeschlagene Menge an RAM ist
   bedingt durch die Poolgro:sse und welche Eigenschaften von ZFS verwendet
   werden. Eine Faustregel besagt, dass 1 GB RAM fu:r jedes 1 TB Storage
   vorgesehen werden sollte. Wenn Deduplizierung zum Einsatz kommt, besagt
   die Regel, dass 5 GB RAM pro TB an Speicher, der dedupliziert werden soll,
   bereitgestellt sein muss. Obwohl manche Anwender ZFS mit weniger RAM
   einsetzen, stu:rzen Systeme ha:ufiger wegen unzureichendem Hauptspeicher
   ab. Weitere Anpassungen sind unter Umsta:nden no:tig fu:r Systeme mit
   weniger als die vorgeschlagene Menge an RAM.

    19.6.2.2. Kernel-Konfiguration

   Wegen des begrenzten Addressraumes der i386(TM)-Plattform mu:ssen
   ZFS-Anwendern auf der i386(TM)-Architektur diese Option der
   Kernelkonfigurationsdatei hinzufu:gen, den Kernel erneut bauen und das
   System neu starten:

 options        KVA_PAGES=512

   Dies erweitert den Addressraum des Kernels, was es erlaubt, die
   Einstellung vm.kvm_size hinter die momentan vorgegebene Grenze von 1 GB
   oder das Limit von 2 GB fu:r PAE zu bringen. Um den passenden Wert fu:r
   diese Option zu finden, teilen Sie den gewu:nschten Addressraum in
   Megabyte durch vier. In diesem Beispiel betra:gt sie 512 fu:r 2 GB.

    19.6.2.3. Loader-Anpassungen

   Der kmem-Addressraum kann auf allen FreeBSD-Architekturen erho:ht werden.
   Auf einem Testsystem mit 1 GB physischen Speichers wurden mit diesen
   Optionen in /boot/loader.conf und einem anschliessenden Systemneustart
   Erfolge erzielt:

 vm.kmem_size="330M"
 vm.kmem_size_max="330M"
 vfs.zfs.arc_max="40M"
 vfs.zfs.vdev.cache.size="5M"

   Fu:r eine detailliertere Liste an Empfehlungen fu:r ZFS-bezogene
   Einstellungen, lesen Sie http://wiki.freebsd.org/ZFSTuningGuide.

19.7. Zusa:tzliche Informationen

     * FreeBSD Wiki - ZFS

     * FreeBSD Wiki - ZFS Tuning

     * Illumos Wiki - ZFS

     * Oracle Solaris ZFS Administration Guide

     * ZFS Evil Tuning Guide

     * ZFS Best Practices Guide

     * Calomel Blog - ZFS Raidz Performance, Capacity und Integrity

19.8. ZFS-Eigenschaften und Terminologie

   ZFS ist ein fundamental anderes Dateisystem aufgrund der Tatsache, dass es
   mehr als ein Dateisystem ist. ZFS kombiniert die Rolle eines Dateisystems
   mit dem Volumemanager, was es ermo:glicht, zusa:tzliche Speichermedien zu
   einem laufenden System hinzuzufu:gen und diesen neuen Speicher sofort auf
   allen auf dem Pool existierenden Dateisystemen zur Verfu:gung zu haben.
   Durch die Kombination von traditionell getrennten Rollen ist ZFS in der
   Lage, Einschra:nkungen, die zuvor RAID-Gruppen daran gehindert hatten, zu
   wachsen. Jedes Gera:t auf ho:chster Ebene in einem Pool wird ein vdev
   genannt, was eine einfache Platte oder eine RAID-Transformation wie ein
   Spiegel oder RAID-Z-Verbund sein kann. ZFS-Dateisysteme (datasets
   genannt), haben jeweils Zugriff auf den gesamten freien Speicherplatz des
   gesamten Pools. Wenn Blo:cke aus diesem Pool allokiert werden, verringert
   sich auch der freie Speicherplatz fu:r jedes Dateisystem. Dieser Ansatz
   verhindert die allgegenwa:rtige Falle von umfangreichen Partitionen, bei
   denen freier Speicherplatz u:ber alle Partitionen hinweg fragmentiert
   wird.

   +------------------------------------------------------------------------+
   | zpool                 | Ein Speicher-Pool ist der grundlegendste       |
   |                       | Baustein von ZFS. Ein Pool besteht aus einem   |
   |                       | oder mehreren vdevs, was die zugrundeliegenden |
   |                       | Gera:te repra:sentiert, welche die Daten       |
   |                       | speichern. Ein Pool wird dann verwendet, um    |
   |                       | ein oder mehrere Dateisysteme (Datasets) oder  |
   |                       | Blockgera:te (Volumes) zu erstellen. Diese     |
   |                       | Datasets und Volumes teilen sich den im Pool   |
   |                       | verfu:gbaren Speicherplatz. Jeder Pool wird    |
   |                       | eindeutig durch einen Namen und eine GUID      |
   |                       | identifiziert. Die verfu:gbaren Eigenschaften  |
   |                       | werden durch die ZFS-Versionsnummer des Pools  |
   |                       | bestimmt.                                      |
   |-----------------------+------------------------------------------------|
   | vdev Arten            | Ein Pool besteht aus einem oder mehreren       |
   |                       | vdevs, die selbst eine einfache Platte oder im |
   |                       | Fall von RAID eine Gruppe von Platten          |
   |                       | darstellt. Wenn mehrere vdevs eingesetzt       |
   |                       | werden, verteilt ZFS die Daten u:ber die       |
   |                       | vdevs, um die Geschwindigkeit zu steigern und  |
   |                       | den verfu:gbaren Platz zu maximieren.          |
   |                       |   * Festplatte - Der einfachste Typ von vdev   |
   |                       |     ist ein Standard-Blockgera:t. Dies kann    |
   |                       |     die komplette Platte (wie /dev/ada0 oder   |
   |                       |     /dev/da0) oder auch eine Partition         |
   |                       |     (/dev/ada0p3) sein. Auf FreeBSD gibt es    |
   |                       |     keine Geschwindigkeitseinbussen bei der    |
   |                       |     Verwendung einer Partition anstatt einer   |
   |                       |     kompletten Platte. Dies unterscheidet sich |
   |                       |     von den Empfehlungen, welche in der        |
   |                       |     Solaris Dokumentation gegeben werden.      |
   |                       |                                                |
   |                       |   * File - Zusa:tzlich zu Festplatten ko:nnen  |
   |                       |     ZFS-Pools aus regula:ren Dateien aufgebaut |
   |                       |     sein, was besonders hilfreich ist, um zu   |
   |                       |     testen und zu experimentieren. Verwenden   |
   |                       |     Sie den kompletten Pfad zu der Datei als   |
   |                       |     Gera:tepfad im Befehl zpool create. Alle   |
   |                       |     vdevs mu:ssen mindestens 128 MB gross      |
   |                       |     sein.                                      |
   |                       |                                                |
   |                       |   * Mirror - Wenn ein Spiegel erstellt wird,   |
   |                       |     verwenden Sie das Schlu:sselwort mirror,   |
   |                       |     gefolgt von der Liste an Mitgliedsgera:ten |
   |                       |     fu:r den Spiegel. Ein Spiegel besteht aus  |
   |                       |     zwei oder mehr Gera:ten und sa:mtliche     |
   |                       |     Daten werden auf alle Gera:te, die         |
   |                       |     Mitglied des Spiegels sind, geschrieben.   |
   |                       |     Ein Spiegel-vdev wird nur soviele Daten    |
   |                       |     speichern, wie das kleinste Gera:t im      |
   |                       |     Verbund aufnehmen kann. Ein Spiegel-vdev   |
   |                       |     kann den Verlust von allen                 |
   |                       |     Mitgliedsgera:ten bis auf eines            |
   |                       |     verkraften, ohne irgendwelche Daten zu     |
   |                       |     verlieren.                                 |
   |                       |                                                |
   |                       |  Anmerkung:                                    |
   |                       |                                                |
   |                       |     Ein regula:re einzelne vdev-Platte kann    |
   |                       |     jederzeit zu einem Spiegel-vdev u:ber das  |
   |                       |     Kommando zpool attach aktualisiert werden. |
   |                       |                                                |
   |                       |   * RAID-Z - ZFS implementiert RAID-Z, eine    |
   |                       |     Varianten des RAID-5-Standards, der        |
   |                       |     bessere Verteilung der Parita:t bietet und |
   |                       |     das "RAID-5 write hole" eliminiert, bei    |
   |                       |     dem die Daten und Parita:t nach einem      |
   |                       |     unerwarteten Neustart inkonsistent werden  |
   |                       |     ko:nnen. ZFS unterstu:tzt drei Stufen von  |
   |                       |     RAID-Z, die unterschiedliche Arten von     |
   |                       |     Redundanz im Austausch gegen niedrigere    |
   |                       |     Stufen von verwendbarem Speicher. Diese    |
   |                       |     Typen werden RAID-Z1 bis RAID-Z3 genannt,  |
   |                       |     basierend auf der Anzahl der               |
   |                       |     Parita:tsgera:te im Verbund und der Anzahl |
   |                       |     an Platten, die ausfallen ko:nnen,         |
   |                       |     wa:hrend der Pool immer noch normal        |
   |                       |     funktioniert.                              |
   |                       |                                                |
   |                       |     In einer RAID-Z1-Konfiguration mit vier    |
   |                       |     Platten, bei der jede 1 TB besitzt,        |
   |                       |     betra:gt der verwendbare Plattenplatz 3 TB |
   |                       |     und der Pool wird immer noch im Modus      |
   |                       |     degraded weiterlaufen, wenn eine Platte    |
   |                       |     davon ausfa:llt. Wenn eine zusa:tzliche    |
   |                       |     Platte ausfa:llt, bevor die defekte Platte |
   |                       |     ersetzt wird, ko:nnen alle Daten im Pool   |
   |                       |     verloren gehen.                            |
   |                       |                                                |
   |                       |     Eine Konfiguration von acht Platten zu je  |
   |                       |     1 TB als RAID-Z3 wird 5 TB verwendbaren    |
   |                       |     Speicher bieten und in der Lage sein,      |
   |                       |     weiterhin zu funktionieren, wenn drei      |
   |                       |     Platten ausgefallen sind. Sun(TM)          |
   |                       |     empfiehlt nicht mehr als neun Platten in   |
   |                       |     einem einzelnen vdev. Wenn die             |
   |                       |     Konfiguration mehr Platten aufweist, wird  |
   |                       |     empfohlen, diese in getrennten vdevs       |
   |                       |     aufzuteilen, so dass die Daten des Pools   |
   |                       |     zwischen diesen aufgeteilt werden.         |
   |                       |                                                |
   |                       |     Eine Konfiguration von zwei RAID-Z2-vdevs, |
   |                       |     bestehend aus jeweils 8 Platten wu:rde     |
   |                       |     etwa einem RAID-60-Verbund entsprechen.    |
   |                       |     Der Speicherplatz einer RAID-Z-Gruppe ist  |
   |                       |     ungefa:hr die Gro:sse der kleinsten Platte |
   |                       |     multipliziert mit der Anzahl von           |
   |                       |     nicht-Parita:tsplatten. Vier 1 TB Platten  |
   |                       |     in einem RAID-Z1 besitzt eine effektive    |
   |                       |     Gro:sse von ungefa:hr 3 TB und ein Verbund |
   |                       |     von acht 1 TB-Platten als RAID-Z3 entha:lt |
   |                       |     5 TB verfu:gbarer Plattenplatz.            |
   |                       |                                                |
   |                       |   * Spare - ZFS besitzt einen speziellen       |
   |                       |     Pseudo-vdev Typ, um einen U:berblick u:ber |
   |                       |     die verfu:gbaren hot spares zu behalten.   |
   |                       |     Beachten Sie, dass hot spares nicht        |
   |                       |     automatisch eingesetzt werden. Diese       |
   |                       |     mu:ssen manuell konfiguriert werden, um    |
   |                       |     ein ausgefallenes Gera:t u:ber zfs replace |
   |                       |     zu ersetzen.                               |
   |                       |                                                |
   |                       |   * Log - ZFS Log-Gera:te, auch bezeichnet als |
   |                       |     ein ZFS Intent Log (ZIL) verschieben das   |
   |                       |     Intent Log von den regula:ren Gera:ten im  |
   |                       |     Pool auf ein dediziertes Gera:t,           |
   |                       |     typischerweise eine SSD. Ein dediziertes   |
   |                       |     Log-Gera:t zu besitzen kann die            |
   |                       |     Geschwindigkeit von Anwendungen mit einer  |
   |                       |     grossen Anzahl von synchronen              |
   |                       |     Schreibvorga:ngen, besonders Datenbanken,  |
   |                       |     signifikant steigern. Log-Gera:te ko:nnen  |
   |                       |     gespiegelt werden, jedoch wird RAID-Z      |
   |                       |     nicht unterstu:tzt. Werden mehrere         |
   |                       |     Log-Gera:te verwendet, so werden           |
   |                       |     Schreibvorga:nge gleichma:ssig unter       |
   |                       |     diesen aufgeteilt.                         |
   |                       |                                                |
   |                       |   * Cache - Ein Cache-vdev einem Pool          |
   |                       |     hinzuzufu:gen, erho:ht den Speicher des    |
   |                       |     L2ARC Caches. Cache-Gera:te lassen sich    |
   |                       |     nicht spiegeln. Da ein Cache-Gera:t nur    |
   |                       |     zusa:tzliche Kopien von existierenden      |
   |                       |     Daten speichert, gibt es kein Risiko,      |
   |                       |     Daten zu verlieren.                        |
   |-----------------------+------------------------------------------------|
   | Transaktionsgruppe    | Transaktionsgruppen sind die Art und Weise,    |
   | (Transaction Group,   | wie gea:nderte Blo:cke zusammen gruppiert und  |
   | TXG)                  | letztendlich auf den Pool geschrieben werden.  |
   |                       | Transaktionsgruppen sind die atomare Einheit,  |
   |                       | welche ZFS verwendet, um Konsistenz zu         |
   |                       | gewa:hrleisten. Jeder Transaktionsgruppe wird  |
   |                       | eine einzigartige, fortlaufende 64-Bit         |
   |                       | Identifikationsnummer zugewiesen. Es kann bis  |
   |                       | zu drei aktive Transaktionsgruppen             |
   |                       | gleichzeitig geben, wobei sich jede davon in   |
   |                       | einem der folgenden drei Zusta:nde befinden    |
   |                       | kann:                                          |
   |                       |   * Open (Offen) - Wenn eine neue              |
   |                       |     Transaktionsgruppe erstellt wird, befindet |
   |                       |     diese sich im Zustand offen und akzeptiert |
   |                       |     neue Schreibvorga:nge. Es ist immer eine   |
   |                       |     Transaktionsgruppe in diesem Zustand,      |
   |                       |     jedoch kann die Transaktionsgruppe neue    |
   |                       |     Schreibvorga:nge ablehnen, wenn diese ein  |
   |                       |     Limit erreicht hat. Sobald eine offene     |
   |                       |     Transaktionsgruppe an das Limit sto:sst    |
   |                       |     oder das vfs.zfs.txg.timeout wurde         |
   |                       |     erreicht, geht die Transaktionsgruppe in   |
   |                       |     den na:chsten Zustand u:ber.               |
   |                       |                                                |
   |                       |   * Quiescing (Stilllegen) - Ein kurzer        |
   |                       |     Zustand, der es noch ausstehenden          |
   |                       |     Operationen erlaubt, zum Abschluss zu      |
   |                       |     kommen, wa:hrenddessen das Erstellen einer |
   |                       |     neuen Transaktionsgruppe jedoch nicht      |
   |                       |     blockiert wird. Sobald alle Transaktionen  |
   |                       |     in der Gruppe abgeschlossen sind, geht die |
   |                       |     Transaktionsgruppen in den letzten Zustand |
   |                       |     u:ber.                                     |
   |                       |                                                |
   |                       |   * Syncing (Sychronisieren) - Alle Daten in   |
   |                       |     der Transaktionsgruppe werden auf das      |
   |                       |     Speichermedium geschrieben. Dieser Prozess |
   |                       |     wird wiederum andere Daten wie Metadaten   |
   |                       |     und space maps vera:ndern, die ebenfalls   |
   |                       |     auf das Speichermedium geschrieben werden  |
   |                       |     mu:ssen. Der Prozess des Synchronisierens  |
   |                       |     beinhaltet mehrere Durchla:ufe. Der erste  |
   |                       |     Prozess, welches der gro:sste, gefolgt von |
   |                       |     den Metadaten, ist, beinhaltet alle        |
   |                       |     gea:nderten Datenblo:cke und kann mehrere  |
   |                       |     Durchla:ufe beno:tigen, um zum Ende zu     |
   |                       |     gelangen. Da das Allokieren von Speicher   |
   |                       |     fu:r die Datenblo:cke neue Metadaten       |
   |                       |     generiert, kann der                        |
   |                       |     Synchronisationsprozess nicht beendet      |
   |                       |     werden, bis ein Durchlauf fertig ist, der  |
   |                       |     keinen zusa:tzlichen Speicher allokiert.   |
   |                       |     Der Synchronisierungszustand ist der       |
   |                       |     Zustand, in dem auch synctasks             |
   |                       |     abgeschlossen werden. Synctasks sind       |
   |                       |     administrative Operationen, wie das        |
   |                       |     Erstellen oder zersto:ren von              |
   |                       |     Schnappschu:ssen und Datasets, welche den  |
   |                       |     U:berblock vera:ndern, wenn sie            |
   |                       |     abgeschlossen sind. Sobald der             |
   |                       |     Synchronisationszustand abgeschlossen ist, |
   |                       |     geht die Transaktionsgruppe aus dem        |
   |                       |     Stilllegungszustand u:ber in den           |
   |                       |     Synchronisationszustand.                   |
   |                       |                                                |
   |                       | Alle administrativen Funktionen, wie           |
   |                       | Schnappschu:sse werden als Teil einer          |
   |                       | Transaktionsgruppe geschrieben. Wenn ein       |
   |                       | synctask erstellt ist, wird dieser der         |
   |                       | momentan geo:ffneten Transaktionsgruppe        |
   |                       | hinzugefu:gt und diese Gruppe wird so schnell  |
   |                       | wie mo:glich in den Synchronisationszustand    |
   |                       | versetzt, um die Latenz von administrativen    |
   |                       | Befehlen zu reduzieren.                        |
   |-----------------------+------------------------------------------------|
   | Adaptive Replacement  | ZFS verwendet einen Adaptive Replacement Cache |
   | Cache (ARC)           | (ARC), anstatt eines traditionellen Least      |
   |                       | Recently Used (LRU) Caches. Ein LRU-Cache ist  |
   |                       | eine einfache Liste von Elementen im Cache,    |
   |                       | sortiert nach der letzten Verwendung jedes     |
   |                       | Elements in der Liste. Neue Elemente werden an |
   |                       | den Anfang der Liste eingefu:gt. Wenn der      |
   |                       | Cache voll ist, werden Elemente vom Ende der   |
   |                       | Liste verdra:ngt, um Platz fu:r aktivere       |
   |                       | Objekte zu schaffen. Ein ARC besteht aus vier  |
   |                       | Listen: derjenigen der Most Recently Used      |
   |                       | (MRU) und Most Frequently Used (MFU) Objekte,  |
   |                       | plus einer sogenannten ghost list fu:r jede    |
   |                       | von beiden. Diese Ghost Lists verfolgen die    |
   |                       | ku:rzlich verdra:ngten Objekte, um zu          |
   |                       | verhindern, dass diese erneut in den Cache     |
   |                       | aufgenommen werden. Dies erho:ht die           |
   |                       | Trefferrate (hit ratio) des Caches, indem      |
   |                       | verhindert wird, dass Elemente, die in der     |
   |                       | Vergangenheit nur ab und zu benutzt wurden,    |
   |                       | wieder im Cache landen. Ein weiterer Vorteil   |
   |                       | der Verwendung sowohl einer MRU und einer MFU  |
   |                       | ist, dass das Scannen eines gesamten           |
   |                       | Dateisystems normalerweise alle Daten aus      |
   |                       | einem MRU- oder LRU-Cache verdra:ngt, um dem   |
   |                       | gerade frisch zugegriffenem Inhalt den Vorzug  |
   |                       | zu geben. Mit ZFS gibt es also eine MFU, die   |
   |                       | nur die am ha:ufigsten verwendeten Elemente    |
   |                       | beinhaltet und der Cache von am meisten        |
   |                       | zugegriffenen Blo:cken bleibt erhalten.        |
   |-----------------------+------------------------------------------------|
   | L2ARC                 | L2ARC ist die zweite Stufe des Caching-Systems |
   |                       | von ZFS. Der Haupt-ARC wird im RAM abgelegt.   |
   |                       | Da die Menge an verfu:gbarem RAM meist         |
   |                       | begrenzt ist, kann ZFS auch cache vdevs        |
   |                       | verwenden. Solid State Disks (SSDs) werden oft |
   |                       | als diese Cache-Gera:te eingesetzt, aufgrund   |
   |                       | ihrer ho:heren Geschwindigkeit und niedrigeren |
   |                       | Latenz im Vergleich zu traditionellen          |
   |                       | drehenden Speichermedien wie Festplatten. Der  |
   |                       | Einsatz des L2ARC ist optional, jedoch wird    |
   |                       | durch die Verwendung eine signifikante         |
   |                       | Geschwindigkeitssteigerung bei Lesevorga:ngen  |
   |                       | bei Dateien erzielt, welche auf der SSD        |
   |                       | zwischengespeichert sind, anstatt von der      |
   |                       | regula:ren Platte gelesen werden zu mu:ssen.   |
   |                       | L2ARC kann ebenfalls die Deduplizierung        |
   |                       | beschleunigen, da eine DDT, welche nicht in    |
   |                       | den RAM passt, jedoch in den L2ARC wesentlich  |
   |                       | schneller sein wird als eine DDT, die von der  |
   |                       | Platte gelesen werden muss. Die Ha:ufigkeit,   |
   |                       | in der Daten zum Cache-Gera:t hinzugefu:gt     |
   |                       | werden, ist begrenzt, um zu verhindern, dass   |
   |                       | eine SSD fru:hzeitig durch zu viele            |
   |                       | Schreibvorga:nge aufgebraucht ist. Bis der     |
   |                       | Cache voll ist (also der erste Block           |
   |                       | verdra:ngt wurde, um Platz zu schaffen), wird  |
   |                       | das Schreiben auf den L2ARC begrenzt auf die   |
   |                       | Summe der Schreibbegrenzung und das Bootlimit, |
   |                       | sowie hinterher auf das Schreiblimit. Ein paar |
   |                       | sysctl(8)-Werte steuert diese Limits.          |
   |                       | vfs.zfs.l2arc_write_max steuert, wie viele     |
   |                       | Bytes in den Cache pro Sekunde geschrieben     |
   |                       | werden, wa:hrend vfs.zfs.l2arc_write_boost zu  |
   |                       | diesem Limit wa:hrend der "Turbo Warmup Phase" |
   |                       | hinzuaddiert wird (Write Boost).               |
   |-----------------------+------------------------------------------------|
   | ZIL                   | ZIL beschleunigt synchrone Transaktionen durch |
   |                       | die Verwendung von Speichermedien wie SSDs,    |
   |                       | welche schneller sind als diejenigen, welche   |
   |                       | Teil des Speicherpools sind. Wenn eine         |
   |                       | Anwendung einen synchronen Schreibvorgang      |
   |                       | anfordert (eine Garantie, dass die Daten       |
   |                       | sicher auf den Platten gespeichert wurden      |
   |                       | anstatt nur zwischengespeichert zu sein, um    |
   |                       | spa:ter geschrieben zu werden), werden die     |
   |                       | Daten auf den schnelleren ZIL-Speicher         |
   |                       | geschrieben und dann spa:ter auf die           |
   |                       | regula:ren Festplatten. Dies reduziert die     |
   |                       | Latenz sehr und verbessert die                 |
   |                       | Geschwindigkeit. Nur synchrone Vorga:nge wie   |
   |                       | die von Datenbanken werden durch den Einsatz   |
   |                       | eines ZIL profitieren. Regula:re, asynchrone   |
   |                       | Schreibvorga:nge wie das Kopieren von Dateien  |
   |                       | wird den ZIL u:berhaupt nicht verwenden.       |
   |-----------------------+------------------------------------------------|
   | Copy-On-Write         | Im Gegensatz zu traditionellen Dateisystemen   |
   |                       | werden beim U:berschreiben von Daten bei ZFS   |
   |                       | die neuen Daten an einen anderen Block         |
   |                       | geschrieben, anstatt die alten Daten an der    |
   |                       | gleichen Stelle zu u:berschreiben. Nur wenn    |
   |                       | dieser Schreibvorgang beendet wurde, werden    |
   |                       | die Metadaten aktualisiert, um auf die neue    |
   |                       | Position zu verweisen. Im Falle eines kurzen   |
   |                       | Schreibvorgangs (ein Systemabsturz oder        |
   |                       | Spannungsverlust wa:hrend eine Datei           |
   |                       | geschrieben wird) sind die gesamten Inhalte    |
   |                       | der Originaldatei noch vorhanden und der       |
   |                       | unvollsta:ndige Schreibvorgang wird verworfen. |
   |                       | Das bedeutet auch, dass ZFS nach einem         |
   |                       | unvorhergesehenen Ausfall keinen fsck(8)       |
   |                       | beno:tigt.                                     |
   |-----------------------+------------------------------------------------|
   | Dataset               | Dataset ist der generische Begriff fu:r ein    |
   |                       | ZFS-Dateisystem, Volume, Schnappschu:sse oder  |
   |                       | Klone. Jedes Dataset besitzt einen eindeutigen |
   |                       | Namen in der Form poolname/path@snapshot Die   |
   |                       | Wurzel des Pools ist technisch gesehen auch    |
   |                       | ein Dataset. Kind-Datasets werden hierarchisch |
   |                       | wie Verzeichnisse benannt. Beispielsweise ist  |
   |                       | mypool/home das Heimatdataset, ein Kind von    |
   |                       | mypool und erbt die Eigenschaften von diesem.  |
   |                       | Dies kann sogar noch erweitert werden durch    |
   |                       | das Erstellen von mypool/home/user. Dieses     |
   |                       | Enkelkind-Dataset wird alle Eigenschaften von  |
   |                       | den Eltern und Grosseltern erben.              |
   |                       | Eigenschaften auf einem Kind ko:nnen die       |
   |                       | geerbten Standardwerte der Eltern und          |
   |                       | Grosseltern a:ndern und u:berschreiben. Die    |
   |                       | Verwaltung von Datasets und dessen Kindern     |
   |                       | la:sst sich delegieren.                        |
   |-----------------------+------------------------------------------------|
   | Dateisystem           | Ein ZFS-Dataset wird meistens als ein          |
   |                       | Dateisystem verwendet. Wie jedes andere        |
   |                       | Dateisystem kann auch ein ZFS-Dateisystem      |
   |                       | irgendwo in der Verzeichnishierarchie          |
   |                       | eingeha:ngt werden und entha:lt seine eigenen  |
   |                       | Dateien und Verzeichnisse mit Berechtigungen,  |
   |                       | Flags und anderen Metadaten.                   |
   |-----------------------+------------------------------------------------|
   | Volume                | Zusa:tzlich zu regula:ren                      |
   |                       | Dateisystem-Datasets, kann ZFS auch Volumes    |
   |                       | erstellen, die Blockgera:te sind. Volumes      |
   |                       | besitzen viele der gleichen Eigenschaften,     |
   |                       | inklusive copy-on-write, Schnappschu:sse,      |
   |                       | Klone und Pru:fsummen. Volumes sind nu:tzlich, |
   |                       | um andere Dateisystemformate auf ZFS           |
   |                       | aufzusetzen, so wie UFS Virtualisierung, oder  |
   |                       | das Exportieren von iSCSI-Abschnitten.         |
   |-----------------------+------------------------------------------------|
   | Snapshot              | Das copy-on-write (COW)-Entwicklung von ZFS    |
   | (Schnappschuss)       | erlaubt das Erstellen von beinahe sofortigen,  |
   |                       | konsistenten Schnappschu:ssen mit beliebigen   |
   |                       | Namen. Nachdem ein Schnappschuss von einem     |
   |                       | Dataset angelegt oder ein rekursiver           |
   |                       | Schnappschuss eines Elterndatasets, welcher    |
   |                       | alle Kinddatasets entha:lt, erstellt wurde,    |
   |                       | werden neue Daten auf neue Blo:cke             |
   |                       | geschrieben, jedoch die alten Blo:cke nicht    |
   |                       | wieder als freier Speicher zuru:ckgewonnen.    |
   |                       | Der Schnappschuss entha:lt die Originalversion |
   |                       | des Dateisystems und das aktive Dateisystem    |
   |                       | besitzt alle A:nderungen, die seit dem         |
   |                       | Schnappschuss erstellt wurden. Kein            |
   |                       | zusa:tzlicher Platz wird beno:tigt. Werden     |
   |                       | neue Daten auf das aktive Dateisystem          |
   |                       | geschrieben, werden neue Blo:cke allokiert, um |
   |                       | diese Daten zu speichern. Die scheinbare       |
   |                       | Gro:sse des Schnappschusses wird wachsen, da   |
   |                       | die Blo:cke nicht mehr la:nger im aktiven      |
   |                       | Dateisystem, sondern nur noch im Schnappschuss |
   |                       | Verwendung finden. Diese Schnappschu:sse       |
   |                       | ko:nnen nur lesend eingeha:ngt werden, um      |
   |                       | vorherige Versionen von Dateien                |
   |                       | wiederherzustellen. Ein rollback eines aktiven |
   |                       | Dateisystems auf einen bestimmten              |
   |                       | Schnappschuss ist ebenfalls mo:glich, was alle |
   |                       | A:nderungen, die seit dem Anlegen des          |
   |                       | Schnappschusses vorgenommen wurden, wieder     |
   |                       | Ru:ckga:ngig macht. Jeder Block im Pool        |
   |                       | besitzt einen Referenzza:hler, der verfolgt,   |
   |                       | wieviele Schnappschu:sse, Klone, Datasets oder |
   |                       | Volumes diesen Block nutzen. Wenn Dateien und  |
   |                       | Schnappschu:sse gelo:scht werden, verringert   |
   |                       | dies auch den Referenzza:hler. Wenn ein Block  |
   |                       | nicht mehr la:nger referenziert wird, kann er  |
   |                       | als freier Speicher wieder genutzt werden.     |
   |                       | Schnappschu:sse ko:nnen auch mit hold markiert |
   |                       | werden. Wenn versucht wird, einen solchen      |
   |                       | Schnappschuss zu zersto:ren, wird stattdessen  |
   |                       | ein EBUSY-Fehler ausgegeben. Jeder             |
   |                       | Schnappschuss kann mehrere holds besitzen,     |
   |                       | jeder mit einem eindeutigen Namen. Das         |
   |                       | Kommando release entfernt diese, damit der     |
   |                       | Schnappschuss gelo:scht werden kann.           |
   |                       | Schnappschu:sse lassen sich auf Volumes        |
   |                       | ebenfalls anlegen, allerdings ko:nnen diese    |
   |                       | nur geklont oder zuru:ckgerollt werden, nicht  |
   |                       | jedoch unabha:ngig eingeha:ngt.                |
   |-----------------------+------------------------------------------------|
   | Clone (Klone)         | Schnappschu:sse ko:nnen auch geklont werden.   |
   |                       | Ein Klon stellt eine vera:nderbare Version     |
   |                       | eines Schnappschusses dar, was es ermo:glicht, |
   |                       | das Dateisystem als neues Dataset              |
   |                       | aufzuspalten. Genau wie bei einem              |
   |                       | Schnappschuss verbraucht ein Klon keinen       |
   |                       | zusa:tzlichen Platz. Wenn neue Daten auf einen |
   |                       | Klon geschrieben und neue Blo:cke allokiert    |
   |                       | werden, wa:chst auch die Gro:sse des Klons.    |
   |                       | Wenn Blo:cke im geklonten Dateisystem oder     |
   |                       | Volume u:berschrieben werden, verringert sich  |
   |                       | auch der Referenzza:hler im vorherigen Block.  |
   |                       | Der Schnappschuss, auf dem der Klon basiert    |
   |                       | kann nicht gelo:scht werden, weil der Klon     |
   |                       | darauf eine Abha:ngigkeit besitzt. Der         |
   |                       | Schnappschuss stellt den Elternteil dar und    |
   |                       | der Klon das Kind. Klone lassen sich promoted  |
   |                       | (befo:rdern), was die Abha:ngigkeit auflo:st   |
   |                       | und den Klon zum Elternteil macht und den      |
   |                       | vorherigen Elternteil das Kind. Diese          |
   |                       | Operation beno:tigt keinen zusa:tzlichen       |
   |                       | Plattenplatz. Da die Menge an verwendetem      |
   |                       | Speicher vom Elternteil und dem Kind           |
   |                       | vertauscht wird, betrifft dies eventuell       |
   |                       | vorhandene Quotas und Reservierungen.          |
   |-----------------------+------------------------------------------------|
   | Checksum (Pru:fsumme) | Jeder Block, der allokiert wird erha:lt auch   |
   |                       | eine Pru:fsumme. Der verwendete                |
   |                       | Pru:fsummenalgorithmus ist eine Eigenschaft    |
   |                       | jedes Datasets, siehe dazu set. Die Pru:fsumme |
   |                       | jedes Blocks wird transparent validiert wenn   |
   |                       | er gelesen wird, was es ZFS ermo:glicht,       |
   |                       | stille Verfa:lschung zu entdecken. Wenn die    |
   |                       | gelesenen Daten nicht mit der erwarteten       |
   |                       | Pru:fsumme u:bereinstimmen, wird ZFS           |
   |                       | versuchen, die Daten aus jeglicher             |
   |                       | verfu:gbarer Redundanz (wie Spiegel oder       |
   |                       | RAID-Z) zu rekonstruieren. Eine U:berpru:fung  |
   |                       | aller Pru:fsummen kann durch das Kommando      |
   |                       | scrub ausgelo:st werden.                       |
   |                       | Pru:fsummenalgorithmen sind:                   |
   |                       |   * fletcher2                                  |
   |                       |                                                |
   |                       |   * fletcher4                                  |
   |                       |                                                |
   |                       |   * sha256                                     |
   |                       |                                                |
   |                       | Die fletcher-Algorithmen sind schneller, aber  |
   |                       | dafu:r ist sha256 ein starker                  |
   |                       | kryptographischer Hash und besitzt eine viel   |
   |                       | niedrigere Chance auf Kollisionen zu stossen   |
   |                       | mit dem Nachteil geringerer Geschwindigkeit.   |
   |                       | Pru:fsummen ko:nnen deaktiviert werden, dies   |
   |                       | wird aber nicht empfohlen.                     |
   |-----------------------+------------------------------------------------|
   | Compression           | Jedes Dataset besitzt eine                     |
   |                       | compression-Eigenschaft, die standardma:ssig   |
   |                       | ausgeschaltet ist. Diese Eigenschaft kann auf  |
   |                       | eine Reihe von Kompressionsalgorithmen         |
   |                       | eingestellt werden. Dadurch werden alle neuen  |
   |                       | Daten, die auf das Dataset geschrieben werden, |
   |                       | komprimiert. Neben einer Reduzierung von       |
   |                       | verbrauchtem Speicher wird oft der Lese- und   |
   |                       | Schreibdurchsatz erho:ht, weil weniger Blo:cke |
   |                       | gelesen oder geschrieben werden mu:ssen.       |
   |                       |   * LZ4 - Wurde in der ZFS Poolversion 5000    |
   |                       |     (feature flags) hinzugefu:gt und LZ4 ist   |
   |                       |     jetzt der empfohlene                       |
   |                       |     Kompressionsalgorithmus. LZ4 komprimiert   |
   |                       |     ungefa:hr 50% schneller als LZJB, wenn er  |
   |                       |     auf komprimierbaren Daten angewendet wird  |
   |                       |     und ist u:ber dreimal schneller, wenn      |
   |                       |     unkomprimierbare Daten vorliegen. LZ4      |
   |                       |     entkomprimiert auch ungefa:hr 80%          |
   |                       |     schneller als LZJB. Auf modernen CPUs,     |
   |                       |     kann LZ4 oft u:ber 500 MB/s komprimieren   |
   |                       |     und entkomprimiert (pro einzelnem          |
   |                       |     CPU-Kern) bei u:ber 1.5 GB/s.              |
   |                       |                                                |
   |                       |   * LZJB - Der Standardkompressionsalgorithmus |
   |                       |     wurde von Jeff Bonwick, einem der          |
   |                       |     urspru:nglichen Entwickler von ZFS,        |
   |                       |     entworfen. LZJB bietet gute Komprimierung  |
   |                       |     mit weniger CPU-U:berhang im Vergleich zu  |
   |                       |     GZIP. In der Zukunft wird der              |
   |                       |     Standardkompressionsalgorithmus            |
   |                       |     wahrscheinlich auf LZ4 gewechselt.         |
   |                       |                                                |
   |                       |   * GZIP - Ein popula:rer                      |
   |                       |     Stromkompressionsalgorithmus ist auch in   |
   |                       |     ZFS verfu:gbar. Einer der Hauptvorteile    |
   |                       |     von der Verwendung von GZIP ist seine      |
   |                       |     konfigurierbare Komprimierungsstufe. Wenn  |
   |                       |     die Eigenschaft compress gesetzt wird,     |
   |                       |     kann der Administrator die Stufe der       |
   |                       |     Komprimierung wa:hlen, die von gzip1, der  |
   |                       |     kleinsten Komprimierungsstufe, bis zu      |
   |                       |     gzip9, der ho:chsten Komprimierungsstufe,  |
   |                       |     reicht. Dies erlaubt es dem Administrator  |
   |                       |     zu steuern, wieviel CPU-Zeit fu:r          |
   |                       |     eingesparten Plattenplatz eingetauscht     |
   |                       |     werde soll.                                |
   |                       |                                                |
   |                       |   * ZLE - Zero Length Encoding ist ein         |
   |                       |     besonderer Kompressionsalgorithmus,        |
   |                       |     welcher nur fortlaufende                   |
   |                       |     Aneinanderreihungen von Nullen             |
   |                       |     komprimiert. Dieser                        |
   |                       |     Komprimierungsalgorithmus ist nur          |
   |                       |     sinnvoll, wenn das Dataset viele grosse    |
   |                       |     Blo:cke von Nullen aufweist.               |
   |-----------------------+------------------------------------------------|
   | Copies                | Wenn die Eigenschaft copies auf einen Wert     |
   |                       | gro:sser als 1 gesetzt wird, weist das ZFS an, |
   |                       | mehrere Kopien eines Blocks im Dateisystem     |
   |                       | oder Volume anzulegen. Diese Eigenschaft auf   |
   |                       | einem wichtigen Dataset einzustellen sorgt     |
   |                       | fu:r zusa:tzliche Redundanz, aus der ein Block |
   |                       | wiederhergestellt werden kann, der nicht mehr  |
   |                       | mit seiner Pru:fsumme u:bereinstimmt. In Pools |
   |                       | ohne Redundanz ist die copies-Eigenschaft die  |
   |                       | einzige Form von Redundanz. Die Eigenschaft    |
   |                       | kann einen einzelnen schlechten Sektor oder    |
   |                       | andere Formen von kleineren Verfa:lschungen    |
   |                       | wiederherstellen, schu:tzt jedoch nicht den    |
   |                       | Pool vom Verlust einer gesamten Platte.        |
   |-----------------------+------------------------------------------------|
   | Deduplizierung        | Pru:fsummen ermo:glichen es, Duplikate von     |
   |                       | Blo:cken zu erkennen, wenn diese geschrieben   |
   |                       | werden. Mit Deduplizierung erho:ht sich der    |
   |                       | Referenzza:hler eines existierenden,           |
   |                       | identischen Blocks, was Speicherplatz          |
   |                       | einspart. Um Blockduplikate zu erkennen, wird  |
   |                       | im Speicher eine Deduplizierungstabelle (DDT)  |
   |                       | gefu:hrt. Die Tabelle entha:lt eine Liste von  |
   |                       | eindeutigen Pru:fsummen, die Position dieser   |
   |                       | Blo:cke und einen Referenzza:hler. Werden neue |
   |                       | Daten geschrieben, wird die Pru:fsumme         |
   |                       | berechnet und mit der Liste verglichen. Wird   |
   |                       | eine U:bereinstimmung gefunden, wird der       |
   |                       | existierende Block verwendet. Der              |
   |                       | SHA256-Pru:fsummenalgorithmus wird mit         |
   |                       | Deduplizierung benutzt, um einen sicheren      |
   |                       | kryptographischen Hash zu bieten.              |
   |                       | Deduplizierung la:sst sich konfigurieren. Wenn |
   |                       | dedup auf on steht, wird angenommen, dass eine |
   |                       | u:bereinstimmende Pru:fsumme bedeutet, dass    |
   |                       | die Daten identisch sind. Steht dedup auf      |
   |                       | verify, werden die Daten in den beiden         |
   |                       | Blo:cken Byte fu:r Byte gepru:ft, um           |
   |                       | sicherzustellen, dass diese wirklich identisch |
   |                       | sind. Wenn die Daten nicht identisch sind,     |
   |                       | wird die Kollision im Hash vermerkt und die    |
   |                       | beiden Blo:cke separat gespeichert. Da die DDT |
   |                       | den Hash jedes einzigartigen Blocks speichern  |
   |                       | muss, beno:tigt sie eine grosse Menge an       |
   |                       | Speicher. Eine generelle Faustregel besagt,    |
   |                       | dass 5-6 GB RAM pro 1 TB deduplizierter Daten  |
   |                       | beno:tigt werden. In Situationen, in denen es  |
   |                       | nicht praktikabel ist, genug RAM vorzuhalten,  |
   |                       | um die gesamte DDT im Speicher zu belassen,    |
   |                       | wird die Geschwindigkeit stark darunter        |
   |                       | leiden, da die DDT von der Platte gelesen      |
   |                       | werden muss, bevor jeder neue Block            |
   |                       | geschrieben wird. Deduplizierung kann den      |
   |                       | L2ARC nutzen, um die DDT zu speichern, was     |
   |                       | einen guten Mittelweg zwischen schnellem       |
   |                       | Systemspeicher und langsameren Platten         |
   |                       | darstellt. Bedenken Sie, dass durch die        |
   |                       | Verwendung von Komprimierung meistens genauso  |
   |                       | grosse Platzersparnis mo:glich ist, ohne den   |
   |                       | zusa:tzlichen Hauptspeicherplatzbedarf.        |
   |-----------------------+------------------------------------------------|
   | Scrub (Bereinigung)   | Anstatt einer Konsistenzpru:fung wie fsck(8)   |
   |                       | verwendet ZFS scrub. scrub liest alle          |
   |                       | Datenblo:cke, die auf dem Pool gespeichert     |
   |                       | sind und pru:ft deren Pru:fsumme gegen die als |
   |                       | richtig in den Metadaten gespeicherte          |
   |                       | Pru:fsumme. Eine periodische Pru:fung aller im |
   |                       | Pool gespeicherten Daten versichert, dass      |
   |                       | verfa:lschte Blo:cke rekonstruiert werden      |
   |                       | ko:nnen, bevor dies no:tig ist. Ein Scrub wird |
   |                       | nicht nach einem unsauberen Herunterfahren     |
   |                       | beno:tigt, wird jedoch einmal alle drei Monate |
   |                       | angeraten. Die Pru:fsumme von jedem Block wird |
   |                       | verifiziert, wenn Blo:cke wa:hrend des         |
   |                       | normalen Betriebs gelesen werden, jedoch       |
   |                       | stellt ein Scrub sicher, dass sogar weniger    |
   |                       | ha:ufig verwendete Blo:cke auf stille          |
   |                       | Verfa:lschungen hin untersucht werden.         |
   |                       | Datenintegrita:t wird dadurch erho:ht,         |
   |                       | besonders wenn es sich um                      |
   |                       | Archivspeichersituationen handelt. Die         |
   |                       | relative Priorita:t des scrub la:sst sich mit  |
   |                       | vfs.zfs.scrub_delay anpassen, um zu            |
   |                       | verhindern, dass der scrub die Geschwindigkeit |
   |                       | von anderen Anfragen auf dem Pool              |
   |                       | beeintra:chtigt.                               |
   |-----------------------+------------------------------------------------|
   | Dataset Quotas        | ZFS bietet sehr schnelle und akkurate          |
   |                       | Dataset-, Benutzer- und                        |
   |                       | Gruppenspeicherplatzbuchhaltung, zusa:tzlich   |
   |                       | zu Quotas und Speicherplatzreservierungen.     |
   |                       | Dies gibt dem Administrator feingranulare      |
   |                       | Kontrolle daru:ber, wie Speicherplatz          |
   |                       | allokiert und die Reservierung fu:r kritische  |
   |                       | Dateisysteme vorgenommen wird                  |
   |                       |                                                |
   |                       | ZFS unterstu:tzt verschiedene Arten von        |
   |                       | Quotas: die Dataset-Quota, die Referenzquota   |
   |                       | (refquota), die Benutzerquota und die          |
   |                       | Gruppenquota sind verfu:gbar.                  |
   |                       |                                                |
   |                       | Quotas beschra:nken die Menge an               |
   |                       | Speicherplatz, welche ein Dataset, seine       |
   |                       | Kinder, einschliesslich Schnappschu:sse des    |
   |                       | Datasets, deren Kinder und die Schnappschu:sse |
   |                       | von diesen Datasets, verbrauchen ko:nnen.      |
   |                       |                                                |
   |                       |  Anmerkung:                                    |
   |                       |                                                |
   |                       | Quotas ko:nnen nicht auf Volumes gesetzt       |
   |                       | werden, da die Eigenschaft volsize als eine    |
   |                       | implizite Quota agiert.                        |
   |-----------------------+------------------------------------------------|
   | Referenzquota         | Ein Referenzquota beschra:nkt die Menge an     |
   |                       | Speicherplatz, die ein Dataset verbrauchen     |
   |                       | kann durch das Erzwingen einer harten Grenze.  |
   |                       | Jedoch beinhaltet diese harte Grenze nur       |
   |                       | Speicherplatz, die das Dataset referenziert    |
   |                       | und beinhaltet nicht den Speicher, der von     |
   |                       | Kindern, wie Dateisystemen oder                |
   |                       | Schnappschu:ssen, verbraucht wird.             |
   |-----------------------+------------------------------------------------|
   | Benutzerquota         | Benutzerquotas sind hilfreich, um die Menge an |
   |                       | Speicherplatz, die ein bestimmter Benutzer     |
   |                       | verbrauchen kann, einzuschra:nken.             |
   |-----------------------+------------------------------------------------|
   | Gruppenquota          | Die Gruppenquota beschra:nkt die Menge an      |
   |                       | Speicherplatz, die eine bestimmte Gruppe       |
   |                       | verbrauchen darf.                              |
   |-----------------------+------------------------------------------------|
   | Dataset-Reservierung  | Die Eigenschaft reservation ermo:glicht es,    |
   |                       | ein Minimum an Speicherplatz fu:r ein          |
   |                       | bestimmtes Dataset und dessen Kinder zu        |
   |                       | garantieren. Wenn eine Reservierung von 10 GB  |
   |                       | auf storage/home/bob gesetzt ist und ein       |
   |                       | anderes Dataset versucht, allen freien         |
   |                       | Speicherplatz zu verwenden, bleiben zumindest  |
   |                       | noch 10 GB an Speicher reserviert. Wenn von    |
   |                       | storage/home/bob ein Schnappschuss angelegt    |
   |                       | wird, wird dieser von der Reservierung         |
   |                       | abgezogen und za:hlt damit dagegen. Die        |
   |                       | Eigenschaft refreservation funktioniert auf    |
   |                       | a:hnliche Weise, jedoch exkludiert diese       |
   |                       | Kinder wie Schnappschu:sse.                    |
   |                       |                                                |
   |                       | Reservierungen jeder Art sind in vielen        |
   |                       | Situationen nu:tzlich, so wie bei der Planung  |
   |                       | und dem Testen der richtigen                   |
   |                       | Speicherplatzallokation in einem neuen System  |
   |                       | oder durch die Zusicherung, dass genug         |
   |                       | Speicherplatz auf Dateisystemen fu:r           |
   |                       | Audio-Logs oder                                |
   |                       | Systemwiederherstellungsprozeduren und Dateien |
   |                       | verfu:gbar ist.                                |
   |-----------------------+------------------------------------------------|
   | Referenzreservierung  | Die Eigenschaft refreservation ermo:glicht es, |
   |                       | ein Minimum an Speicherplatz fu:r die          |
   |                       | Verwendung eines bestimmten Datasets zu        |
   |                       | garantieren, exklusiv dessen Kinder. Das       |
   |                       | bedeutet, dass wenn eine 10 GB-Reservierung    |
   |                       | auf storage/home/bob vorhanden ist und ein     |
   |                       | anderes Dataset versucht, alle freien          |
   |                       | Speicherplatz aufzubrauchen, sind zumindest    |
   |                       | noch 10 GB Speicher reserviert. Im Gegensatz   |
   |                       | zu einer regula:ren Reservierung wird der      |
   |                       | Speicher von Schnappschu:ssen und Kinddataset  |
   |                       | nicht gegen die Reservierung geza:hlt.         |
   |                       | Beispielsweise, wenn ein Schnappschuss von     |
   |                       | storage/home/bob angelegt wird, muss genug     |
   |                       | Plattenplatz ausserhalb der Menge an           |
   |                       | refreservation vorhanden sein, damit die       |
   |                       | Operation erfolgreich durchgefu:hrt wird.      |
   |                       | Kinder des Hauptdatasets werden nicht in die   |
   |                       | Menge an refreservation geza:hlt und dringen   |
   |                       | auf diese Weise auch nicht in den gesetzten    |
   |                       | Speicher ein.                                  |
   |-----------------------+------------------------------------------------|
   | Resilver              | Wenn eine Platte ausfa:llt und ersetzt wird,   |
   |                       | muss die neue Platte mit den Daten gefu:llt    |
   |                       | werden, die verloren gegangen sind. Der        |
   |                       | Prozess der Verwendung der                     |
   |                       | Parita:tsinformationen, welche u:ber die       |
   |                       | u:brigen Platten verteilt sind, um die         |
   |                       | fehlenden Daten zu berechnen und auf die neue  |
   |                       | Platte zu u:bertragen, wird resilvering        |
   |                       | genannt.                                       |
   |-----------------------+------------------------------------------------|
   | Online                | Ein Pool oder vdev im Zustand Online besitzt   |
   |                       | alle verbundenen Mitgliedsgera:te und ist voll |
   |                       | funktionsfa:hig. Individuelle Gera:te im       |
   |                       | Zustand Online funktionieren normal.           |
   |-----------------------+------------------------------------------------|
   | Offline               | Individuelle Gera:te lassen sich vom           |
   |                       | Administrator in den Zustand Offline           |
   |                       | versetzen, wenn es ausreichend Redundanz gibt, |
   |                       | um zu verhindern, dass der Pool oder das vdev  |
   |                       | in den Zustand Faulted versetzt wird. Ein      |
   |                       | Administrator kann eine Platte vor einem       |
   |                       | Austausch offline nehmen oder um es leichter   |
   |                       | zu machen, diese zu identifizieren.            |
   |-----------------------+------------------------------------------------|
   | Degraded              | Ein Pool oder vdev im Zustand Degraded hat     |
   |                       | eine oder mehrere Platten, welche getrennt     |
   |                       | wurden oder ausgefallen sind. Der Pool kann    |
   |                       | immer noch verwendet werden, doch wenn noch    |
   |                       | weitere Gera:te ausfallen, kann der Pool nicht |
   |                       | wiederhergestellt werden. Die fehlenden        |
   |                       | Gera:te anzuschliessen oder die defekten       |
   |                       | Platten zu ersetzen wird den Pool wieder in    |
   |                       | den Zustand Online versetzen, nachdem die      |
   |                       | angeschlossenen oder neuen Gera:te den         |
   |                       | Resilver-Prozess abgeschlossen haben.          |
   |-----------------------+------------------------------------------------|
   | Faulted               | Ein Pool oder vdev im Zustand Faulted          |
   |                       | funktioniert nicht la:nger. Die Daten darauf   |
   |                       | sind nicht mehr la:nger verfu:gbar. Ein Pool   |
   |                       | oder vdev geht in den Zustand Faulted u:ber,   |
   |                       | wenn die Anzahl der fehlenden oder defekten    |
   |                       | Gera:te die Redundanzstufe im vdev             |
   |                       | u:berschreiten. Wenn fehlende Gera:te          |
   |                       | angeschlossen werden, geht der Pool wieder in  |
   |                       | den Zustand Online. Wenn es nicht genu:gend    |
   |                       | Redundanz gibt, um die Anzahl an defekten      |
   |                       | Platten zu kompensieren, sind die Inhalte des  |
   |                       | Pools verloren und mu:ssen von der Sicherung   |
   |                       | wiederhergestellt werden.                      |
   +------------------------------------------------------------------------+

Kapitel 20. Dateisystemunterstu:tzung

   Geschrieben von Tom Rhodes.
   U:bersetzt von Benedict Reuschling und Daniel Seuffert.
   Inhaltsverzeichnis

   20.1. U:bersicht

   20.2. Linux(R) Dateisysteme

20.1. U:bersicht

   Dateisysteme sind ein wesentlicher Bestandteil von Betriebssystemen. Sie
   erlauben es Benutzern, Dateien zu laden und zu speichern, ermo:glichen den
   Zugriff auf Daten und machen Festplatten u:berhaupt erst nu:tzlich.
   Betriebssysteme unterscheiden sich normalerweise bei dem mitgelieferten
   Dateisystem. Traditionell ist dies unter FreeBSD das Unix File System UFS,
   welches mit UFS2 modernisiert wurde. Seit FreeBSD 7.0 steht auch das
   Z-Dateisystem (ZFS) als natives Dateisystem zur Verfu:gung. Hierzu finden
   Sie in Kapitel 19, Das Z-Dateisystem (ZFS) weitere Informationen.

   FreeBSD unterstu:tzt auch eine Vielzahl weiterer Dateisysteme, um auf
   Daten von anderen Betriebssystemen lokal zuzugreifen, beispielsweise Daten
   auf USB-Speichermedien, Flash-Speichern und Festplatten. Dazu geho:rt die
   Unterstu:tzung fu:r das Linux(R) Extended File System (EXT) und das Reiser
   Dateisystem.

   Es gibt verschiedene Stufen der Unterstu:tzung in FreeBSD fu:r diese
   unterschiedlichen Dateisysteme. Manche beno:tigen ein geladenes
   Kernelmodul, andere die Installation bestimmter Werkzeuge. Einige
   Dateisysteme haben volle Unterstu:tzung fu:r Lese- und Schreibzugriffe,
   wa:hrend auf andere nur-lesend zugegriffen werden kann.

   Nachdem Sie dieses Kapitel gelesen haben, wissen Sie:

     * Den Unterschied zwischen nativen und unterstu:tzten Dateisystemen.

     * Welche Dateisysteme von FreeBSD unterstu:tzt werden.

     * Wie man fremde Dateisysteme aktiviert, konfiguriert, darauf zugreift
       und diese verwendet.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Grundlagen von UNIX(R) und FreeBSD verstehen (Kapitel 3, Grundlagen
       des UNIX Betriebssystems).

     * Mit den Grundlagen der Konfiguration und dem Bauen des Kernels
       vertraut sein (Kapitel 8, Konfiguration des FreeBSD-Kernels).

     * Problemlos Software von Drittherstellern in FreeBSD installieren
       ko:nnen (Kapitel 4, Installieren von Anwendungen: Pakete und Ports).

     * Sich ein wenig mit Festplatten, Speicher und Gera:tenamen in FreeBSD
       auskennen (Kapitel 17, Speichermedien).

20.2. Linux(R) Dateisysteme

   FreeBSD bietet integrierte Unterstu:tzung fu:r einige
   Linux(R)-Dateisysteme. Dieser Abschnitt demonstriert, wie der Support
   aktiviert und die unterstu:tzten Linux(R)-Dateisysteme eingehangen werden.

  20.2.1. ext2

   Seit FreeBSD 2.2 ist eine Kernel-Unterstu:tzung fu:r das ext2-Dateisystem
   vorhanden. In FreeBSD 8.x und fru:heren Versionen wurde der Code noch
   unter der GPL lizensiert. Der Code wurde neu geschrieben und steht seit
   FreeBSD 9.0 unter der BSD-Lizenz.

   Der ext2fs(5)-Treiber erlaubt dem FreeBSD Kernel sowohl Lese-, als auch
   Schreibzugriffe auf ext2-Dateisysteme.

  Anmerkung:

   Dieser Treiber kann auch fu:r den Zugriff auf ext3 und ext4 Dateisysteme
   verwendet werden. Allerdings werden ext3-Journale und erweiterte Attribute
   nicht unterstu:tzt. ext4 wird nur-lesend unterstu:tzt.

   Um auf ein ext-Dateisystem zuzugreifen, muss zuerst das entsprechende
   Kernelmodul geladen werden:

 # kldload ext2fs

   Mounten Sie anschliessend das ext-Volume unter Angabe des FreeBSD
   Partitionsnamens und eines existierenden Mountpunktes. Dieses Beispiel
   ha:ngt /dev/ad1s1 nach /mnt ein:

 # mount -t ext2fs /dev/ad1s1 /mnt

  20.2.2. ReiserFS

   FreeBSD bietet Nur-Lese-Unterstu:tzung fu:r das Reiser-Dateisystem
   ReiserFS.

   Den Treiber fu:r reiserfs(5) laden Sie wie folgt:

 # kldload reiserfs

   Mounten Sie anschliessend das auf /dev/ad1s1 befindliche ReiserFS-Volume:

 # mount -t reiserfs /dev/ad1s1 /mnt

Kapitel 21. Virtualisierung

   Beigetragen von Murray Stokely.
   bhyve Abschnitt beigetragen von Allan Jude.
   Xen Abschnitt beigetragen von Benedict Reuschling.
   U:bersetzt von Oliver Peter und Bjo:rn Heidotting.
   Inhaltsverzeichnis

   21.1. U:bersicht

   21.2. FreeBSD als Gast-Betriebssystem unter Parallels fu:r Mac OS(R) X

   21.3. FreeBSD als Gast-Betriebssystem unter Virtual PC fu:r Windows(R)

   21.4. FreeBSD als Gast-Betriebssystem unter VMware Fusion fu:r Mac OS(R)

   21.5. VirtualBox(TM) Gasterweiterungen auf einem FreeBSD Gast

   21.6. FreeBSD als Host mit Virtualbox

   21.7. FreeBSD als Host mit bhyve

   21.8. FreeBSD als Xen(TM)-Host

21.1. U:bersicht

   Virtualisierungssoftware erlaubt es, mehrere Betriebssysteme gleichzeitig
   auf dem selben Computer laufen zu lassen. Derartige Softwaresysteme fu:r
   PCs setzen in der Regel ein Host-Betriebssystem voraus, auf dem die
   Virtualisierungssoftware la:uft und unterstu:tzen eine nahezu beliebige
   Anzahl von Gast-Betriebssystemen.

   Nachdem Sie dieses Kapitel gelesen haben,

     * Kennen Sie den Unterscheid zwischen einem Host-Betriebssystem und
       einem Gast-Betriebssystem.

     * Ko:nnen Sie FreeBSD auf einem Intel(R)-basierenden Apple(R) Mac(R)
       installieren.

     * Ko:nnen Sie FreeBSD unter Microsoft(R) Windows(R) und Virtual PC
       installieren.

     * Wissen Sie, wie man ein virtualisiertes FreeBSD-System fu:r optimale
       Leistung konfiguriert.

   Bevor Sie dieses Kapitel lesen, sollten Sie

     * Die Grundlagen von UNIX(R) und FreeBSD verstehen.

     * Wissen, wie Sie FreeBSD installieren ko:nnen.

     * Wissen, wie Sie eine Netzwerkverbindung konfigurieren.

     * Wissen, wie Sie zusa:tzliche Software installieren ko:nnen.

21.2. FreeBSD als Gast-Betriebssystem unter Parallels fu:r Mac OS(R) X

   Parallels Desktop fu:r Mac(R) ist ein kommerzielles Softwareprodukt,
   welches fu:r Intel(R)-basierende Apple(R) Mac(R)-Computer mit
   Mac OS(R) X 10.4.6 oder ho:her verfu:gbar ist. FreeBSD wird von diesem
   Softwarepaket als Gast-Betriebssystem vollsta:ndig unterstu:tzt. Nach der
   Installation von Parallels auf Mac OS(R) X konfigurieren Sie als erstes
   eine virtuelle Maschine, in der Sie danach das gewu:nschte
   Gast-Betriebssystem (in diesem Fall FreeBSD) installieren.

  21.2.1. Installation von FreeBSD unter Parallels/Mac OS(R) X

   Der erste Schritt bei der Installation von FreeBSD unter Parallels ist es,
   eine virtuelle Maschine zu konfigurieren, in der Sie FreeBSD installieren
   ko:nnen. Dazu wa:hlen Sie bei der Frage nach dem Guest OS Type FreeBSD
   aus:

   Legen Sie geeignete Gro:ssen fu:r Festplatten- und Arbeitsspeicher fu:r
   die zu erstellende FreeBSD-Instanz fest. 4 GB Plattenplatz sowie 512 MB
   RAM sind in der Regel fu:r die Arbeit unter Parallels ausreichend:

   Wa:hlen Sie den gewu:nschten Netzwerktyp aus und konfigurieren Sie die
   Netzwerkverbindung:

   Speichern Sie Ihre Eingaben, um die Konfiguration abzuschliessen:

   Nachdem Sie die virtuelle Maschine erstellt haben, installieren Sie im
   na:chsten Schritt FreeBSD in dieser virtuellen Maschine. Dazu verwenden
   Sie am besten eine offizielle FreeBSD-CD/DVD oder Sie laden von einem
   offiziellen FTP-Server ein ISO-Abbild auf Ihren Mac(R) herunter. Danach
   klicken Sie auf das Laufwerksymbol in der rechten unteren Ecke des
   Parallels-Fensters, um das virtuelles Laufwerk mit dem ISO-Abbild oder mit
   dem physikalischen CD-ROM-Laufwerk des Computers zu verknu:pfen.

   Nachdem Sie diese Verknu:pfung hergestellt haben, starten sie die
   virtuelle FreeBSD-Maschine neu, indem Sie auf das Symbol "Neustarten"
   klicken. Parallels startet nun ein Spezial-BIOS, das zuerst pru:ft, ob
   eine CD-ROM eingelegt wurde.

   In diesem Fall findet das BIOS ein FreeBSD-Installationsmedium und beginnt
   eine normale Installation. Versuchen Sie jetzt noch nicht Xorg zu
   konfigurieren.

   Nachdem die Installation abgeschlossen ist, ko:nnen Sie die virtuelle
   FreeBSD-Maschine starten.

  21.2.2. FreeBSD fu:r den Einsatz unter Parallels konfigurieren

   Nachdem FreeBSD erfolgreich unter Mac OS(R) X mit Parallels installiert
   wurde, sollten Sie das virtuelle FreeBSD-System fu:r virtualisierte
   Operationen optimieren:

    1. Setzen der Bootloader-Variablen

       Die wichtigste A:nderung ist es, die Variable kern.hz zu verkleinern,
       um so die CPU-Auslastung in der Parallels-Umgebung zu verringern.

 kern.hz=100

       Ohne diese Einstellung kann ein unbescha:ftigtes FreeBSD unter
       Parallels trotzdem rund 15 Prozent der CPU-Leistung eines Single
       Prozessor iMac(R)'s verbrauchen. Nach dieser A:nderung reduziert sich
       dieser Wert auf etwa 5 Prozent.

    2. Erstellen einer neuen Kernelkonfigurationsdatei

       Sie ko:nnen alle SCSI-, FireWire- und USB-Laufwerks-Treiber entfernen.
       Parallels stellt einen virtuellen Netzwerkadapter bereit, der den
       ed(4)-Treiber verwendet. Daher ko:nnen alle Netzwerkgera:te bis auf
       ed(4) und miibus(4) aus dem Kernel entfernt werden.

    3. Netzwerkbetrieb einrichten

       Die einfachste Netzwerkkonfiguration ist der Einsatz von DHCP, um die
       virtuelle Maschine mit dem gleichen lokalen Netzwerk, in dem sich der
       Host-Mac(R) befindet, zu verbinden. Dazu fu:gen Sie die Zeile
       ifconfig_ed0="DHCP" in /etc/rc.conf ein. Weitere Informationen zur
       Konfiguration des Netzwerks unter FreeBSD finden Sie im Kapitel 30,
       Weiterfu:hrende Netzwerkthemen.

21.3. FreeBSD als Gast-Betriebssystem unter Virtual PC fu:r Windows(R)

   U:bersetzt von Johann Kois.

   Virtual PC fu:r Windows(R) wird von Microsoft(R) kostenlos zum Download
   angeboten. Die Systemanforderungen fu:r dieses Programm finden Sie hier.
   Nachdem Virtual PC unter Microsoft(R) Windows(R) installiert wurde, muss
   eine virtuelle Maschine konfiguriert und das gewu:nschte Betriebssystem
   installiert werden.

  21.3.1. FreeBSD in Virtual PC installieren

   Der erste Schritt zur Installation von FreeBSD in Virtual PC ist es, eine
   neue virtuelle Maschine zu erstellen, in die Sie FreeBSD installieren
   ko:nnen. Dazu wa:hlen Sie die Option Create a virtual machine, wenn Sie
   danach gefragt werden:

   Bei der Frage nach dem Operating system wa:hlen Sie Other:

   Danach mu:ssen Sie den gewu:nschten Plattenplatz sowie die Gro:sse des
   Hauptspeichers angeben. 4 GB Plattenplatz sowie 512 MB RAM sollten fu:r
   die Installation von FreeBSD in Virtual PC ausreichend sein:

   Speichern Sie die Eingaben und beenden Sie die Konfiguration:

   Wa:hlen Sie nun die fu:r FreeBSD erstellte virtuelle Maschine aus und
   klicken Sie auf Settings, um das Netzwerk zu konfigurieren:

   Nachdem die virtuelle Maschine erstellt wurde, ko:nnen Sie FreeBSD
   installieren. Dazu verwenden Sie am besten eine offizielle FreeBSD-CD/DVD
   oder ein ISO-Image, das Sie von einem offiziellen FreeBSD-FTP-Server
   heruntergeladen haben. Wenn Sie ein ISO-Image auf der Festplatte
   gespeichert haben, oder eine FreeBSD-CD/DVD in das Laufwerk eingelegt
   haben, doppelklicken Sie auf die virtuelle Maschine, die Sie fu:r FreeBSD
   angelegt haben. Danach klicken Sie auf CD und wa:hlen die Option Capture
   ISO Image... im Virtual PC-Fenster. Danach ko:nnen Sie im folgenden
   Fenster das CD-Laufwerk mit dem physikalischen CD-Laufwerk oder mit dem
   ISO-Image verknu:pfen.

   Danach starten Sie die virtuelle Maschine neu, indem Sie zuerst auf Action
   und danach auf Reset klicken. Virtual PC startet die virtuelle Maschine
   nun neu und pru:ft zuerst, ob die virtuelle Maschine u:ber ein CD-Laufwerk
   verfu:gt.

   Da dies hier der Fall ist, beginnt nun eine normale FreeBSD-Installation.
   Sie ko:nnen FreeBSD nun installieren, aber verzichten Sie an dieser Stelle
   unbedingt auf die Xorg-Konfiguration.

   Nachdem die Installation abgeschlossen ist, entfernen Sie die CD/DVD aus
   dem Laufwerk (oder lo:sen die Verknu:pfung zum ISO-Image). Danach starten
   Sie die virtuelle Maschine neu, um FreeBSD zu starten.

  21.3.2. FreeBSD in Virtual PC konfigurieren

   Nachdem FreeBSD auf Microsoft(R) Windows(R) mit Virtual PC erfolgreich
   installiert wurde, sollten Sie das virtuelle FreeBSD noch anpassen, um
   eine optimale Funktion zu gewa:hrleisten.

    1. Setzen der Bootloader-Variablen

       Die wichtigste A:nderung ist es, die Variable kern.hz zu verkleinern,
       um so die CPU-Auslastung in der Virtual PC-Umgebung zu verringern.
       Dazu fu:gen Sie die folgende Zeile in /boot/loader.conf ein:

 kern.hz=100

       Ohne diese Einstellung kann ein unbescha:ftigtes FreeBSD unter Virutal
       PC trotzdem rund 40 Prozent der CPU-Leistung eines
       Ein-Prozessor-Systems verbrauchen. Nach dieser A:nderung reduziert
       sich dieser Wert auf etwa 3 Prozent.

    2. Erstellen einer neuen Kernelkonfigurationsdatei

       Alle SCSI-, FireWire- und USB-Laufwerks-Treiber ko:nnen aus der
       Kernelkonfigurationsdatei entfernt werden. Virtual PC stellt einen
       virtuellen Netzwerkadapter bereit, der den de(4)-Treiber verwendet.
       Daher ko:nnen alle Netzwerkgera:te bis auf de(4) und miibus(4) aus dem
       Kernel entfernt werden.

    3. Das Netzwerk einrichten

       Die einfachste Netzwerkkonfiguration nutzt von DHCP, um die virtuelle
       Maschine mit dem gleichen lokalen Netzwerk, in dem sich der
       Host-Microsoft(R) Windows(R) befindet, zu verbinden. Dazu fu:gen Sie
       die Zeile ifconfig_de0="DHCP" in /etc/rc.conf ein. Weitere
       Informationen zur Konfiguration des Netzwerks unter FreeBSD finden Sie
       in Kapitel 30, Weiterfu:hrende Netzwerkthemen.

21.4. FreeBSD als Gast-Betriebssystem unter VMware Fusion fu:r Mac OS(R)

   U:bersetzt von Johann Kois.

   VMware Fusion fu:r Mac(R) ist ein kommerzielles Programm, das fu:r
   Intel(R) basierte Apple(R) Mac(R)-Computer mit Mac OS(R) 10.4.9 oder neuer
   erha:ltlich ist. FreeBSD wird von diesem Produkt vollsta:ndig als
   Gast-Betriebssystem unterstu:tzt. Nachdem Sie VMware Fusion unter
   Mac OS(R) X installiert haben, ko:nnen Sie eine virtuelle Maschine
   konfigurieren und das gewu:nschte Gastbetriebssystem installieren.

  21.4.1. FreeBSD in VMware Fusion installieren

   Zuerst mu:ssen Sie VMware Fusion starten, um eine virtuelle Maschine zu
   erstellen. Dazu wa:hlen Sie die Option New:

   Dadurch wird ein Assistent gestartet, der bei der Erzeugung einer neuen
   virtuellen Maschine behilflich ist. Klicken Sie auf Continue, um den
   Prozess zu starten:

   Wa:hlen Sie Other als das Operating System, danach FreeBSD oder FreeBSD
   64-bit, je nach dem, welche Version Sie installieren wollen, wenn Sie nach
   der zu installierenden Version gefragt werden:

   Vergeben Sie einen Namen fu:r die virtuelle Maschine und legen Sie den
   Speicherort fest:

   Legen Sie die Gro:sse der virtuellen Festplatte fu:r die virtuelle
   Maschine fest:

   Wa:hlen Sie die Installationsmethode fu:r die virtuelle Maschine. Entweder
   von einem ISO-Abbild oder von einer CD/DVD:

   Nachdem Sie auf Finish geklickt haben, wird die virtuelle Maschine
   gestartet:

   Nun ko:nnen Sie FreeBSD wie gewohnt installieren:

   Nachdem die Installation abgeschlossen ist, ko:nnen noch verschiedene
   Parameter der virtuellen Maschine, wie etwa der Speicherverbrauch,
   konfiguriert werden:

  Anmerkung:

   Die Hardware der virtuellen Maschine kann nicht gea:ndert werden, solange
   die virtuelle Maschine la:uft.

   Die Anzahl der CPUs der virtuellen Maschine:

   Den Status des CD-Laufwerks. Sie ko:nnen die CD/DVD/ISO von der virtuellen
   Maschine lo:sen, wenn Sie es nicht beno:tigen.

   Zuletzt sollten Sie noch festlegen, wie sich die virtuelle Maschine mit
   dem Netzwerk verbinden soll. Sollen neben dem Gastsystem auch andere
   Rechner auf die virtuelle Maschine zugreifen ko:nnen, muss die Option
   Connect directly to the physical network (Bridged) gewa:hlt werden. Ist
   dies nicht der Fall, sollte die Option Share the host's internet
   connection (NAT) gewa:hlt werden. In dieser Einstellung kann die virtuelle
   Maschine zwar auf das Internet zugreifen, andere Rechner du:rfen aber
   nicht auf die virtuelle Maschine zugreifen.

   Nachdem die Konfiguration abgeschlossen ist, kann FreeBSD gestartet
   werden.

  21.4.2. FreeBSD unter VMware Fusion konfigurieren

   Nachdem Sie FreeBSD erfolgreich unter VMware Fusion installiert haben,
   sollten Sie das virtuelle FreeBSD noch anpassen, um eine optimale Funktion
   zu gewa:hrleisten.

    1. Die wichtigste A:nderung ist es, die Variable kern.hz zu verkleinern,
       um so die CPU-Auslastung in der VMware Fusion-Umgebung zu verringern.

 kern.hz=100

       Ohne diese Einstellung kann ein unbescha:ftigtes FreeBSD unter VMware
       Fusion trotzdem rund 15 Prozent der CPU-Leistung eines Single
       Prozessor iMac(R)'s verbrauchen. Nach dieser A:nderung reduziert sich
       dieser Wert auf etwa 5 Prozent.

    2. Erstellen einer neuen Kernelkonfigurationsdatei

       Alle FireWire- und USB-Laufwerks-Treiber ko:nnen aus der
       Kernelkonfigurationsdatei entfernt werden. VMware Fusion stellt einen
       virtuellen Netzwerkadapter bereit, der den em(4)-Treiber verwendet.
       Daher ko:nnen alle Netzwerkgera:te bis auf em(4) und miibus(4) aus dem
       Kernel entfernt werden.

    3. Netzwerkbetrieb einrichten

       Die einfachste Netzwerkkonfiguration verwendet DHCP, um die virtuelle
       Maschine mit dem gleichen lokalen Netzwerk, in dem sich der
       Host-Mac(R) befindet, zu verbinden. Dazu fu:gen Sie die Zeile
       ifconfig_em0="DHCP" in /etc/rc.conf ein. Weitere Informationen zur
       Konfiguration des Netzwerks unter FreeBSD finden Sie im Kapitel 30,
       Weiterfu:hrende Netzwerkthemen.

21.5. VirtualBox(TM) Gasterweiterungen auf einem FreeBSD Gast

   FreeBSD funktioniert einwandfrei als Gast-Betriebssystem unter
   VirtualBox(TM). Die Virtualisierungs-Software steht fu:r die meisten
   Betriebssysteme zur Verfu:gung, einschliesslich FreeBSD.

   Die VirtualBox(TM) Gasterweiterungen bieten Unterstu:tzung fu:r:

     * Gemeinsame Zwischenablage.

     * Mauszeiger-Integration.

     * Zeitsynchronisation mit dem Host.

     * Skalierung von Fenstern.

     * Nahtloser Modus.

  Anmerkung:

   Diese Kommandos werden im FreeBSD Gastsystem ausgefu:hrt.

   Installieren Sie das Paket oder den Port
   emulators/virtualbox-ose-additions in das FreeBSD Gastsystem. Dieses
   Beispiel installiert den Port:

 # cd /usr/ports/emulators/virtualbox-ose-additions
 # make install clean

   Fu:gen Sie folgende Eintra:ge in /etc/rc.conf hinzu:

 vboxguest_enable="YES"
 vboxservice_enable="YES"

   Wenn ntpd(8) oder ntpdate(8) verwendet wird um die Uhrzeit zu
   synchronisieren, dann deaktivieren Sie die Synchronisierung mit dem Host:

 vboxservice_flags"--disable-timesync"

   Xorg wird den vboxvideo-Treiber automatisch erkennen. Alternativ kann auch
   manuell ein entsprechender Eintrag in /etc/X11/xorg.conf hinzugefu:gt
   werden:

 Section "Device"
         Identifier "Card0"
         Driver "vboxvideo"
         VendorName "InnoTek Systemberatung GmbH"
         BoardName "VirtualBox Graphics Adapter"
 EndSection

   Um den vboxmouse_drv-Treiber zu verwenden, muss /etc/X11/xorg.conf
   ebenfalls angepasst werden:

 Section "InputDevice"
         Identifier "Mouse0"
         Driver "vboxmouse"
 EndSection

   Benutzer von HAL sollten die Datei
   /usr/local/etc/hal/fdi/policy/90-vboxguest.fdi erstellen oder sie aus
   /usr/local/share/hal/fdi/policy/10osvendor/90-vboxguest.fdi kopieren:

 <?xml version="1.0" encoding="utf-8"?>
 <!--
 # Sun VirtualBox
 # Hal driver description for the vboxmouse driver
 # $Id: chapter.xml,v 1.33 2012-03-17 04:53:52 eadler Exp $

         Copyright (C) 2008-2009 Sun Microsystems, Inc.

         This file is part of VirtualBox Open Source Edition (OSE, as
         available from http://www.virtualbox.org. This file is free software;
         you can redistribute it and/or modify it under the terms of the GNU
         General Public License (GPL) as published by the Free Software
         Foundation, in version 2 as it comes in the "COPYING" file of the
         VirtualBox OSE distribution. VirtualBox OSE is distributed in the
         hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.

         Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
         Clara, CA 95054 USA or visit http://www.sun.com if you need
         additional information or have any questions.
 -->
 <deviceinfo version="0.2">
   <device>
     <match key="info.subsystem" string="pci">
       <match key="info.product" string="VirtualBox guest Service">
         <append key="info.capabilities" type="strlist">input</append>
         <append key="info.capabilities" type="strlist">input.mouse</append>
         <merge key="input.x11_driver" type="string">vboxmouse</merge>
         <merge key="input.device" type="string">/dev/vboxguest</merge>
       </match>
     </match>
   </device>
 </deviceinfo>

21.6. FreeBSD als Host mit Virtualbox

   U:bersetzt von Benedict Reuschling und Christoph Sold.

   VirtualBox(TM) ist ein vollsta:ndigesVirtualisierungspaket, das aktiv
   weiterentwickelt wird und fu:r die meisten Betriebssysteme einschliesslich
   Windows(R), Mac OS(R), Linux(R) und FreeBSD zur Verfu:gung steht. Es kann
   sowohl Windows(R) als auch UNIX(R)-a:hnliche Gastsysteme betreiben. Es
   wird als Open Source Software vero:ffentlicht, jedoch mit
   Closed-Source-Komponenten in einem separaten Erweiterungspaket. Zu diesen
   Komponenten geho:rt Unterstu:tzung fu:r USB 2.0-Gera:te. Weitere
   Informationen finden Sie auf der "Downloads"-Seite im VirtualBox(TM) Wiki.
   Derzeit sind diese Erweiterungen fu:r FreeBSD nicht verfu:gbar.

  21.6.1. VirtualBox(TM) installieren

   VirtualBox(TM) steht als Paket oder Port in emulators/virtualbox-ose
   bereit. Der Port kann mit folgendem Kommando installiert werden:

 # cd /usr/ports/emulators/virtualbox-ose
 # make install clean

   Eine nu:tzliche Option im Konfigurationsdialog ist die
   GuestAdditions-Programmsammlung. Diese stellen eine Reihe von nu:tzlichen
   Eigenschaften in den Gastbetriebssystemen zur Verfu:gung, wie
   beispielsweise Mauszeigerintegration (was es ermo:glicht, die Maus
   zwischen dem Host und dem Gast zu teilen ohne eine spezielle
   Tastenkombination fu:r diesen Wechsel zu dru:cken), sowie schnelleres
   Rendern von Videos, besonders in Windows(R) Ga:sten. Diese Gastzusa:tze
   sind im Devices-Menu: zu finden, nachdem die Installation des
   Gastbetriebssystem abgeschlossen ist.

   Ein paar Konfigurationsa:nderungen sind notwendig, bevor VirtualBox(TM)
   das erste Mal gestartet wird. Der Port installiert ein Kernelmodul in
   /boot/modules, das in den laufenden Kernel geladen werden muss:

 # kldload vboxdrv

   Um sicherzustellen, dass das Modul immer nach einem Neustart geladen wird,
   fu:gen Sie die folgende Zeile in /boot/loader.conf ein:

 vboxdrv_load="YES"

   Um die Kernelmodule fu:r die Unterstu:tzung von Netzwerkbru:cken oder
   Host-Only Netzwerken zu laden, fu:gen Sie folgendes in /etc/rc.conf ein
   und starten Sie den Computer neu:

 vboxnet_enable="YES"

   Die Gruppe vboxusers wird wa:hrend der Installation von VirtualBox(TM)
   angelegt. Alle Benutzer, die Zugriff auf VirtualBox(TM) haben sollen,
   mu:ssen in diese Gruppe aufgenommen werden. pw kann benutzt werden, um
   neue Mitglieder hinzuzufu:gen:

 # pw groupmod vboxusers -m yourusername

   Damit Netzwerkbru:cken funktionieren, mu:ssen die in der Voreinstellung
   eingeschra:nkten Berechtigungen fu:r /dev/vboxnetctl angepasst werden:

 # chown root:vboxusers /dev/vboxnetctl
 # chmod 0600 /dev/vboxnetctl

   Um diese Berechtigungen dauerhaft zu speichern, fu:gen Sie folgende
   Eintra:ge in /etc/devfs.conf hinzu:

 own     vboxnetctl root:vboxusers
 perm    vboxnetctl 0600

   Um VirtualBox(TM) zu starten, geben Sie folgenden Befehl in der
   Xorg-Sitzung ein:

 % VirtualBox

   Besuchen Sie die offizielle Webseite von VirtualBox(TM) unter
   http://www.virtualbox.org, um weitere Informationen zur Konfiguration und
   Verwendung zu erhalten. FreeBSD-spezifische Informationen und Anleitungen
   zur Fehlerbehebung finden Sie auf der entsprechenden Seite im FreeBSD-Wiki
   unter http://wiki.FreeBSD.org/VirtualBox.

  21.6.2. USB Unterstu:tzung fu:r VirtualBox(TM)

   Sie ko:nnen VirtualBox(TM) so konfigurieren, dass USB-Gera:te an das
   Gastsystem weitergeleitet werden. So lange das Erweiterungspaket fu:r USB
   2.0 und 3.0 auf FreeBSD nicht verfu:gbar ist, ist der Host-Controller der
   OSE-Version auf die Emulation von USB 1.1-Gera:ten beschra:nkt.

   Damit VirtualBox(TM) angeschlossene USB-Gera:te am Rechner erkennt, muss
   der Benutzer Mitglied der Gruppe operator sein.

 # pw groupmod operator -m ihrbenutzername

   Sie mu:ssen die Anmeldesitzung und VirtualBox(TM) neu starten, damit die
   A:nderungen wirksam werden. Danach ko:nnen Sie nach Bedarf neue USB-Filter
   erstellen.

  21.6.3. Host CD/DVD-Zugriff in VirtualBox(TM)

   Ein Gastsystem kann auf die DVD/CD-Laufwerke des Hosts zugreifen. Der
   Zugriff fu:r die virtuellen Maschinen wird in den Einstellungen von
   VirtualBox(TM) konfiguriert. Falls erforderlich, erstellen Sie zuna:chst
   ein leeres IDE DVD/CD-Gera:t und wa:hlen Sie dann ein entsprechendes
   Medium fu:r dieses Laufwerk aus. Das Kontrollka:stchen Passthrough besagt,
   dass die virtuelle Maschine die Hardware direkt verwenden kann. Audio-CDs
   und Brenner funktionieren nur, wenn diese Option ausgewa:hlt ist.

   Damit die CD/DVD-Funktionen von VirtualBox(TM) funktionieren, muss HAL in
   /etc/rc.conf aktiviert und anschliessend gestartet werden:

 hald_enable="YES"

 # service hald start

   Damit die CD/DVD-Funktionen von Benutzern verwendet werden ko:nnen,
   beno:tigen diese Zugriff auf /dev/xpt0, /dev/cdN und /dev/passN. Dies wird
   in der Regel dadurch erreicht, den Benutzer zum Mitglied der Gruppe
   operator zu machen. Die Berechtigungen fu:r diese Gera:te werden mit
   folgenden Zeilen in /etc/devfs.conf konfiguriert:

 perm cd* 0660
 perm xpt0 0660
 perm pass* 0660

 # service devfs restart

21.7. FreeBSD als Host mit bhyve

   U:bersetzt von Bjo:rn Heidotting.

   Beginnend mit FreeBSD 10.0-RELEASE ist bhyve, ein BSD-lizensierter
   Hypervisor, Teil des Basissystems. Dieser Hypervisor unterstu:tzt eine
   Reihe von Gastbetriebssystemen, darunter FreeBSD, OpenBSD und viele
   Linux(R) Distributionen. In der Voreinstellung unterstu:tzt bhyve eine
   serielle Konsole, graphische Konsolen werden nicht emuliert. bhyve
   verwendet Offload-Funktionen von neueren CPUs, um manuelle
   Speicherzuordnungen und Anweisungen zu vermeiden.

   Das Design von bhyve erfordert einen Prozessor, der Intel(R) Extended Page
   Tables (EPT), AMD(R) Rapid Vitualization Indexing (RVI) oder Nested Page
   Tables (NPT) unterstu:tzt. FreeBSD- oder Linux(R)-Gastsysteme mit mehr als
   einer vCPU beno:tigen VMX unrestricted mode support (UG). Die meisten
   neueren Prozessoren, speziell Intel(R) Core(TM) i3/i5/i7 und
   Intel(R) Xeon(TM) E3/E5/E7, unterstu:tzen diese Funktionen. Unterstu:tzung
   fu:r UG wurde mit Intel's Westmere Mikroarchitektur eingefu:hrt. Eine
   vollsta:ndige Liste der Intel(R)-Prozessoren mit EPT-Unterstu:tzung finden
   Sie unter
   http://ark.intel.com/search/advanced?s=t&ExtendedPageTables=true. RVI wird
   seit der dritten Generation der AMD Opteron(TM)-Prozessoren (Barcelona)
   unterstu:tzt. Um zu sehen ob der Prozessor bhyve unterstu:tzt, pru:fen Sie
   die Ausgabe von dmesg oder /var/run/dmesg.boot. Fu:r AMD(R)-Prozessoren
   suchen Sie in der Zeile Features2 nach POPCNT. Fu:r Intel(R)-Prozessoren
   suchen Sie in der Zeile VT-x nach EPT und UG.

  21.7.1. Vorbereitung des Hosts

   Der erste Schritt bei der Erstellung einer virtuellen Maschine in bhyve
   ist die Konfiguration des Host-Systems. Laden Sie zuna:chst das bhyve
   Kernelmodul:

 # kldload vmm

   Erstellen Sie ein tap-Gera:t, um dieses mit der Netzwerk-Schnittstelle der
   virtuellen Maschine zu verbinden. Damit sich die Schnittstelle mit dem
   Netzwerk verbinden kann, mu:ssen Sie zusa:tzlich eine Bridge-Schnittstelle
   erzeugen, bestehend aus dem tap-Gera:t und der physikalischen
   Schnittstelle. In diesem Beispiel wird die physikalische Schnittstelle
   igb0 verwendet:

 # ifconfig tap0 create
 # sysctl net.link.tap.up_on_open=1
 net.link.tap.up_on_open: 0 -> 1
 # ifconfig bridge0 create
 # ifconfig bridge0 addm igb0 addm tap0
 # ifconfig bridge0 up

  21.7.2. Ein FreeBSD-Gastsystem erstellen

   Erzeugen Sie eine Datei, die als virtuelle Festplatte fu:r das Gastsystem
   verwendet wird. Geben Sie die Gro:sse und den Namen der virtuellen
   Festplatte an:

 # truncate -s 16G guest.img

   Laden Sie ein Installationsabbild von FreeBSD:

 # fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-bootonly.iso
 FreeBSD-10.3-RELEASE-amd64-bootonly.iso       100% of  230 MB  570 kBps 06m17s

   FreeBSD entha:lt ein Beispielskript um eine virtuelle Maschine in bhyve
   auszufu:hren. Das Skript wird die virtuelle Maschine starten und sie in
   einer Schleife ausfu:hren. Sollte die virtuelle Maschine abstu:rzen, wird
   sie vom Skript automatisch neu gestartet. Das Skript akzeptiert einige
   Optionen, um die Konfiguration der virtuellen Maschine zu kontrollieren:
   -c bestimmt die Anzahl der virtuellen CPUs, -m begrenzt den verfu:gbaren
   Speicher des Gastsystems, -t bestimmt das verwendete tap-Gera:t, -d gibt
   das zu benutzende Festplattenabbild an, -i sagt bhyve dass es von CD
   booten soll und -I bestimmt das CD-Abbild. Der letzte Parameter ist der
   Name der virtuellen Maschine. Dieses Beispiel startet die virtuelle
   Maschine im Installationsmodus:

 # sh /usr/share/examples/bhyve/vmrun.sh -c 1 -m 1024M -t tap0 -d guest.img -i -I FreeBSD-10.3-RELEASE-amd64-bootonly.iso guestname

   Die virtuelle Maschine wird starten und das Installationsprogramm
   ausfu:hren. Nachdem das System in der virtuellen Maschine installiert ist,
   werden Sie gefragt, ob eine Shell gestartet werden soll. Wa:hlen Sie Yes.
   Es muss noch eine kleine A:nderung vorgenommen werden, damit das System
   mit einer seriellen Konsole startet. Bearbeiten Sie /etc/ttys und ersetzen
   Sie die vorhandene ttyu0-Zeile durch:

 ttyu0   "/usr/libexec/getty 3wire"   xterm  on secure

  Anmerkung:

   Beginnend mit FreeBSD 9.3-RELEASE und 10.1-RELEASE wird die Konsole
   automatisch konfiguriert.

   Starten Sie die virtuelle Maschine neu. Ein Neustart der virtuellen
   Maschine wird bhyve beenden, aber da das vmrun.sh-Skript in einer Schleife
   la:uft, wird bhyve automatisch neu gestartet. Wenn dies passiert, wa:hlen
   Sie die Option Reboot im Bootloader-Menu:, um die Schleife zu
   unterbrechen. Anschliessend kann das Gastsystem von der virtuellen
   Festplatte gestartet werden:

 # sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d guest.img guestname

  21.7.3. Ein Linux(R)-Gastsystem erstellen

   Um andere Betriebssysteme als FreeBSD zu booten, muss zuna:chst der Port
   sysutils/grub2-bhyve installiert werden.

   Als na:chstes erzeugen Sie eine Datei, die das Gastsystem als virtuelle
   Festplatte verwenden kann:

 # truncate -s 16G linux.img

   Der Start einer virtuellen Maschine mit bhyve ist ein zweistufiger
   Prozess. Zuerst muss ein Kernel geladen werden, dann kann das Gastsystem
   gestartet werden. Der Linux(R)-Kernel wird mit sysutils/grub2-bhyve
   geladen. Erstellen Sie eine device.map, damit grub die virtuellen Gera:te
   den Dateien auf dem Hostsystem zuordnen kann:

 (hd0) ./linux.img
 (cd0) ./somelinux.iso

   Benutzen Sie sysutils/grub2-bhyve um den Linux(R)-Kernel vom ISO-Abbild zu
   laden:

 # grub-bhyve -m device.map -r cd0 -M 1024M linuxguest

   Damit wird grub gestartet. Wenn die Installations-CD eine Datei namens
   grub.cfg entha:lt, wird ein Menu: angezeigt. Wenn nicht, mu:ssen die
   Dateien vmlinuz und initrd manuell geladen werden:

 grub> ls
 (hd0) (cd0) (cd0,msdos1) (host)
 grub> ls (cd0)/isolinux
 boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest
 splash.jpg TRANS.TBL vesamenu.c32 vmlinuz
 grub> linux (cd0)/isolinux/vmlinuz
 grub> initrd (cd0)/isolinux/initrd.img
 grub> boot

   Nun, da der Linux(R)-Kernel geladen ist, kann das Gastsystem gestartet
   werden:

 # bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img \
     -s 4:0,ahci-cd,./somelinux.iso -l com1,stdio -c 4 -m 1024M linuxguest

   Das System wird booten und das Installtionsprogramm starten. Starten Sie
   die virtuelle Maschine nach der Installation des Betriebssystems neu. Dies
   fu:hrt auch dazu, dass bhyve beendet wird. Die Instanz der virtuellen
   Maschine muss zersto:rt werden, bevor sie erneut in Betrieb genommen
   werden kann:

 # bhyvectl --destroy --vm=linuxguest

   Nun kann das Gastsystem direkt von der virtuellen Festplatte gestartet
   werden. Laden Sie den Kernel:

 # grub-bhyve -m device.map -r hd0,msdos1 -M 1024M linuxguest
 grub> ls
 (hd0) (hd0,msdos2) (hd0,msdos1) (cd0) (cd0,msdos1) (host)
 (lvm/VolGroup-lv_swap) (lvm/VolGroup-lv_root)
 grub> ls (hd0,msdos1)/
 lost+found/ grub/ efi/ System.map-2.6.32-431.el6.x86_64 config-2.6.32-431.el6.x
 86_64 symvers-2.6.32-431.el6.x86_64.gz vmlinuz-2.6.32-431.el6.x86_64
 initramfs-2.6.32-431.el6.x86_64.img
 grub> linux (hd0,msdos1)/vmlinuz-2.6.32-431.el6.x86_64 root=/dev/mapper/VolGroup-lv_root
 grub> initrd (hd0,msdos1)/initramfs-2.6.32-431.el6.x86_64.img
 grub> boot

   Starten Sie die virtuelle Maschine:

 # bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 \$    -s 3:0,virtio-blk,./linux.img -l com1,stdio -c 4 -m 1024M linuxguest

   Linux(R) wird jetzt in der virtuellen Maschine gestartet und pra:sentiert
   Ihnen vielleicht einen Anmeldeprompt. Sie ko:nnen sich anmelden und die
   virtuelle Maschine benutzen. Wenn Sie fertig sind, starten Sie die
   virtuelle Maschine neu, um bhyve zu verlassen. Anschliessend zersto:ren
   Sie die Instanz der virtuellen Maschine:

 # bhyvectl --destroy --vm=linuxguest

  21.7.4. bhyve virtuelle Maschinen mit UEFI Firmware booten

   Neben bhyveload und grub-bhyve kann der bhyve Hypervisor virtuelle
   Maschinen auch u:ber die UEFI-Userspace-Firmware booten. Mit dieser Option
   werden Gastsysteme unterstu:tzt, die von anderen Bootloadern nicht
   unterstu:tzt werden.

   Um die UEFI-Unterstu:tzung in bhyve nutzen zu ko:nnen, beno:tigen Sie
   zuerst die Abbilder der UEFI-Firmware. Dazu ko:nnen Sie den Port oder das
   Paket sysutils/bhyve-firmware installieren.

   Mit der Firmware an Ort und Stelle, fu:gen Sie die Option -l
   bootrom,/pfad/zur/firmware zur bhyve-Befehlszeile hinzu. Der eigentliche
   bhyve-Befehl ko:nnte wie folgt lauten:

 # bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \
 -s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \
 -s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \
 -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
 guest

   sysutils/bhyve-firmware entha:lt auch eine CSM-fa:hige Firmware, um
   Gastsysteme ohne UEFI-Unterstu:tzung im alten BIOS-Modus zu booten:

 # bhyve -AHP -s 0:0,hostbridge -s 1:0,lpc \
 -s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \
 -s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \
 -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI_CSM.fd \
 guest

  21.7.5. Graphische Framebuffer fu:r bhyve-Gastsysteme

   Die Unterstu:tzung von UEFI-Firmware ist bei graphischen Betriebssystemen,
   wie Microsoft Windows(R), besonders nu:tzlich.

   Unterstu:tzung fu:r den UEFI-GOP Framebuffer kann auch u:ber die Option -s
   29,fbuf,tcp=0.0.0.0:5900 aktiviert werden. Die Framebuffer-Auflo:sung kann
   mit w=800 und h=600 konfiguriert werden. Mit der Option wait ko:nnen Sie
   bhyve anweisen, auf eine VNC-Verbindung zu warten, bevor das Gastsystem
   gebootet wird. Vom Host oder aus dem Netzwerk kann u:ber das VNC-Protokoll
   auf den Framebuffer zugegriffen werden.

   Der daraus resultierende Befehl wu:rde so aussehen:

 # bhyve -AHP -s 0:0,hostbridge -s 31:0,lpc \
 -s 2:0,virtio-net,tap1 -s 3:0,virtio-blk,./disk.img \
 -s 4:0,ahci-cd,./install.iso -c 4 -m 1024M \
 -s 29,fbuf,tcp=0.0.0.0:5900,w=800,h=600,wait \
 -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
 guest

   Beachten Sie, dass der Framebuffer im BIOS-Modus keine Befehle mehr
   empfa:ngt, sobald die Steuerung von der Firmware an das Gastsystem
   u:bergeben wird.

  21.7.6. Verwendung von ZFS mit bhyve-Gastsystemen

   Wenn auf dem Host-Rechner ZFS eingerichtet ist, ko:nnen Sie ZFS-Volumes
   anstelle eines Festplattenabbilds verwenden. Dies kann erhebliche
   Leistungsvorteile fu:r das Gastsystem mit sich bringen. Ein ZFS-Volume
   kann wie folgt erstellt werden:

 # zfs create -V16G -o volmode=dev zroot/linuxdisk0

   Geben Sie das ZFS-Volume beim Start der virtuellen Maschine an:

 # bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s3:0,virtio-blk,/dev/zvol/zroot/linuxdisk0 \
     -l com1,stdio -c 4 -m 1024M linuxguest

  21.7.7. Konsolen in der virtuellen Maschine

   Es ist vorteilhaft, die bhyve-Konsole mit einem Werkzeug wie sysutils/tmux
   oder sysutils/screen zu bedienen. Damit ist es leicht, die Konsole zu
   verbinden oder zu trennen. Es ist auch mo:glich, die Konsole als
   Nullmodem-Gera:t zu nutzen, auf das Sie mit cu zugreifen ko:nnen. Laden
   Sie dazu das nmdm Kernelmodul und ersetzen Sie -l com1,stdio mit -l
   com1,/dev/nmdm0A. Die /dev/nmdm-Gera:te werden bei Bedarf automatisch
   erstellt, jeweils paarweise, entsprechend den beiden Enden eines
   Nullmodemkabels (/dev/nmdm0A und /dev/nmdm0B). Weitere Informationen
   finden Sie in nmdm(4).

 # kldload nmdm
 # bhyve -A -H -P -s 0:0,hostbridge -s 1:0,lpc -s 2:0,virtio-net,tap0 -s 3:0,virtio-blk,./linux.img \
     -l com1,/dev/nmdm0A -c 4 -m 1024M linuxguest
 # cu -l /dev/nmdm0B
 Connected

 Ubuntu 13.10 handbook ttyS0

 handbook login:

  21.7.8. Virtuelle Maschinen verwalten

   Fu:r jede virtuelle Maschine wird unterhalb von /dev/vmm ein Gera:tename
   erzeugt. Dadurch kann der Administrator einfach feststellen, welche
   virtuellen Maschinen zur Zeit ausgefu:hrt werden:

 # ls -al /dev/vmm
 total 1
 dr-xr-xr-x   2 root  wheel    512 Mar 17 12:19 ./
 dr-xr-xr-x  14 root  wheel    512 Mar 17 06:38 ../
 crw-------   1 root  wheel  0x1a2 Mar 17 12:20 guestname
 crw-------   1 root  wheel  0x19f Mar 17 12:19 linuxguest
 crw-------   1 root  wheel  0x1a1 Mar 17 12:19 otherguest

   Mit Hilfe von bhyvectl kann eine virtuelle Maschine zersto:rt werden:

 # bhyvectl --destroy --vm=guestname

  21.7.9. Persistente Konfiguration

   Um das System so zu konfigurieren, dass bhyve-Gastsysteme beim Booten
   gestartet werden, mu:ssen die folgenden Konfigurationen in den jeweiligen
   Dateien vorgenommen werden:

    1. /etc/sysctl.conf

 net.link.tap.up_on_open=1

    2. /boot/loader.conf

 vmm_load="YES"
 nmdm_load="YES"
 if_bridge_load="YES"
 if_tap_load="YES"

    3. /etc/rc.conf

 cloned_interfaces="bridge0 tap0"
 ifconfig_bridge0="addm igb0 addm tap0"

21.8. FreeBSD als Xen(TM)-Host

   Xen ist ein GPLv2-lizensierter Typ-1-Hypervisor fu:r Intel(R) und ARM(R)
   Architekturen. Seit FreeBSD 8.0 gibt es Unterstu:tzung fu:r i386(TM) und
   AMD(R) 64-Bit DomU sowie Amazon EC2 unpriviligierte Doma:nen (virtuelle
   Maschinen). Dom0 priviligierte Doma:nen (Host) wird seit FreeBSD 11.0
   unterstu:tzt. Aus Performancegru:nden wurde in FreeBSD 11 die
   Unterstu:tzung fu:r paravirtualisierte Doma:nen (PV) zugunsten von
   Hardware virtualisierten Doma:nen (HVM) entfernt.

   Xen(TM) ist ein Bare-Metal-Hypervisor, was bedeutet, dass es das erste
   Programm ist, welches nach dem BIOS geladen wird. Anschliessend wird ein
   spezieller priviligierter Gast namens Domain-0 (kurz Dom0) gestartet. Dom0
   nutzt seine speziellen Privilegien, um direkt auf die zugrunde liegende
   Hardware zuzugreifen, was es zu einer sehr leistungsstarken Lo:sung macht.
   Es ist in der Lage, direkt auf Festplattencontroller und Netzwerkadapter
   zuzugreifen. Die Xen(TM) Werkzeuge zum Verwalten und Steuern des Xen(TM)
   Hypervisors werden auch von Dom0 zum Erstellen, Auflisten und Zersto:ren
   von VMs verwendet. Dom0 stellt virtuelle Festplatten und
   Netzwerkfunktionalita:t fu:r unpriviligierte Doma:nen bereit, die oft als
   DomU bezeichnet werden. Dom0 kann mit der Servicekonsole anderer
   Hypervisor verglichen werden, wohingegen DomU die einzelnen Gast-VMs
   ausfu:hrt.

   Xen(TM) kann VMs zwischen verschiedenen Xen(TM) Servern migrieren. Wenn
   beide Xen-Hosts denselben zugrundeliegenden Speicher teilen, kann die
   Migration durchgefu:hrt werden, ohne dass die VM zuerst heruntergefahren
   werden muss. Stattdessen wird die Migration live durchgefu:hrt, wa:hrend
   die DomU la:uft. Sie brauchen daher keinen Neustart oder Ausfallzeit
   einplanen. Dies ist bei Wartungsarbeiten und Upgrade-Fenstern sinnvoll, um
   sicherzustellen, dass die von der DomU bereitgestellten Dienste weiterhin
   zur Verfu:gung stehen. Viele weitere Funktionen von Xen(TM) finden Sie im
   Xen Wiki. Sie sollten jedoch beachten, dass derzeit noch nicht alle
   Funktionen von FreeBSD unterstu:tzt werden.

  21.8.1. Hardwareanforderungen fu:r Xen(TM) Dom0

   Um den Xen(TM) Hypervisor auf einem Host auszufu:hren, ist eine bestimmte
   Hardwarefunktionalita:t erforderlich. Hardware-virtualisierte Doma:nen
   beno:tigen Unterstu:tzung fu:r Extended Page Table ( EPT) und Input/Output
   Memory Management Unit (IOMMU) im Host-Prozessor.

  21.8.2. Xen(TM) Dom0 Control Domain Konfiguration

   Das Paket emulators/xen verwendet bina:re Schnappschu:sse von FreeBSD 11
   amd64 oder a:quivalenten, aus den Quellen u:bersetzte Systeme. Fu:r dieses
   Beispiel beno:tigen die nichtpriviligierten Doma:nen eine VNC-Ausgabe, auf
   die Sie von einem anderen System aus, mit einem Werkzeug wie net/tightvnc,
   zugreifen ko:nnen.

   Installieren Sie emulators/xen:

 # pkg install xen

   Die Konfigurationsdateien mu:ssen angepasst werden, um den Host fu:r die
   Integration von Dom0 vorzubereiten. Ein Eintrag in /etc/sysctl.conf
   deaktiviert die Begrenzung fu:r Speicherseiten. Andernfalls lassen sich
   DomU VMs mit ho:heren Speicheranforderungen nicht ausfu:hren.

 # sysrc -f /etc/sysctl.conf vm.max_wired=-1

   Fu:r eine andere speicherbezogene Einstellung muss in /etc/login.conf die
   Option memorylocked auf unlimited gesetzt werden. Ansonsten kann das
   Erstellen von DomU-Doma:nen mit der Meldung Cannot allocate memory
   fehlschlagen. Nachdem Sie die A:nderung in /etc/login.conf gemacht haben,
   mu:ssen Sie cap_mkdb ausfu:hren um die Datenbank zu aktualisieren.
   Abschnitt 13.13, "Einschra:nkung von Ressourcen" entha:lt hierzu
   ausfu:hrliche Informationen.

 # sed -i '' -e 's/memorylocked=64K/memorylocked=unlimited/' /etc/login.conf
 # cap_mkdb /etc/login.conf

   Fu:gen Sie einen Eintrag fu:r die Xen(TM) Konsole in /etc/ttys ein:

 # echo 'xc0     "usr/libexec/getty Pc"        xterm   on  secure' >> /etc/ttys

   Dom0 wird durch die Auswahl eines Xen(TM)-Kernels in /boot/loader.conf
   aktiviert. Xen(TM) beno:tigt von dem Hostsystem auch Ressourcen wie CPU
   und Speicher, sowohl fu:r sich selbst als auch fu:r andere DomU Domains.
   Wie viele Ressourcen beno:tigt werden, ha:ngt von den individuellen
   Anforderungen und der eingesetzten Hardware ab. In diesem Beispiel werden
   der Dom0 8 GB Speicher und 4 virtuelle CPUs zur Verfu:gung gestellt. Die
   serielle Konsole und Protokollierung wird ebenfalls aktiviert:

 # sysrc -f /boot/loader.conf hw.pci.mcfg=0
 # sysrc -f /boot/loader.conf xen_kernel="/boot/xen"
 # sysrc -f /boot/loader.conf xen_cmdline="dom0_mem=8192M dom0_max_vcpus=4 dom0pvh=1 console=com1,vga com1=115200,8n1 guest_loglvl=all loglvl=all"

   Protokolldateien, die Xen(TM) fu:r die Dom0- und DomU-VMs erstellt, werden
   in /var/log/xen gespeichert. Dieses Verzeichnis ist standardma:ssig nicht
   vorhanden und muss erstellt werden.

 # mkdir /var/log/xen
 # chmod 644 /var/log/xen

   Xen(TM) bietet ein Bootmenu: zur Aktivierung und Deaktivierung des
   Hypervisors in /boot/menu.rc.local:

 # echo "try-include /boot/xen.4th" >> /boot/menu.rc.local

   Aktivieren Sie den xencommons Dienst wa:hrend des Systemstarts:

 # sysrc xencommons_enable=yes

   Diese Einstellungen reichen zwar aus, um ein Dom0-fa:higes System zu
   starten, allerdings fehlt es dann an Netzwerkfunktionalita:t fu:r die
   DomU-Rechner. Um dies zu beheben, ko:nnen Sie eine Netzwerkbru:cke u:ber
   die Netzwerkschnittstelle des Hosts herstellen, die die DomU-VMs fu:r die
   Verbindung zum Netzwerk benutzen ko:nnen. Ersetzen Sie igb0 durch den
   Namen der Netzwerkschnittstelle des Hosts.

 # sysrc autobridge_interfaces=bridge0
 # sysrc autobridge_bridge0=igb0
 # sysrc ifconfig_bridge0=SYNCDHCP

   Starten Sie den Host neu, um den Xen(TM)-Kernel zu laden und den Dom0 zu
   starten.

 # reboot

   Nach dem erfolgreichen Booten des Xen(TM)-Kernels und der Anmeldung am
   System wird das Xen(TM)-Werkzeug xl verwendet, um Informationen u:ber die
   Doma:nen anzuzeigen.

 # xl list
 Name                                        ID   Mem VCPUs      State   Time(s)
 Domain-0                                     0  8192     4     r-----     962.0

   Die Ausgabe besta:tigt, dass der Dom0 (auch Domain-0 genannt) die ID 0 hat
   und ausgefu:hrt wird. Der vorher in /boot/loader.conf definierte Speicher
   und die virtuellen CPUs sind ebenfalls vorhanden. Weitere Informationen
   finden Sie in der Xen(TM) Dokumentation. Jetzt ko:nnen DomU Gast-VMs
   erstellt werden.

  21.8.3. Xen(TM) DomU Gast-VM Konfiguration

   Unpriviligierte Doma:nen bestehen aus einer Konfigurationsdatei und
   virtuellen oder physikalischen Festplatten. Der virtuelle Plattenspeicher
   fu:r die DomU kann aus Dateien bestehen, die mit truncate(1) erstellt
   wurden, oder ZFS Volumes wie in Abschnitt 19.4.2, "Volumes erstellen und
   zersto:ren" beschrieben. In diesem Beispiel wird ein 20 GB Volume
   verwendet. Eine VM wird mit dem ZFS Volume erstellt, ein FreeBSD
   ISO-Abbild, 1 GB RAM und zwei virtuelle CPUs. Das ISO-Abbild mit den
   Installationsdateien wird mit fetch(1) heruntergeladen und lokal in der
   Datei freebsd.iso gespeichert.

 # fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-bootonly.iso -o freebsd.iso

   Ein ZFS Volume von 20 GB namens xendisk0 wird erstellt und dient der VM
   als Festplatte.

 # zfs create -V20G -o volmode=dev zroot/xendisk0

   Die neue DomU Gast-VM wird in einer Datei definiert. Einige spezifische
   Einstellungen wie Name, Tastaturbelegung und VNC-Verbindungsdetails werden
   ebenfalls konfiguriert. Fu:r dieses Beispiel entha:lt die folgende
   freebsd.cfg eine minimale DomU-Konfiguration:

 # cat freebsd.cfg
 builder = "hvm" 1
 name = "freebsd" 2
 memory = 1024 3
 vcpus = 2 4
 vif = [ 'mac=00:16:3E:74:34:32,bridge=bridge0' ] 5
 disk = [
 '/dev/zvol/tank/xendisk0,raw,hda,rw', 6
 '/root/freebsd.iso,raw,hdc:cdrom,r' 7
 ]
 vnc = 1 8
 vnclisten = "0.0.0.0"
 serial = "pty"
 usbdevice = "tablet"

   Erkla:rung der einzelnen Zeilen:

   1 Dies definiert, welche Art von Virtualisierung verwendet wird. hvm       
     bezieht sich auf hardwaregestu:tzte Virtualisierung oder Hardware        
     Virtual Machine. Gastbetriebssysteme ko:nnen unvera:ndert auf der CPU    
     mit Virtualisierungserweiterungen laufen und bieten nahezu die gleiche   
     Leistung wie auf physikalischer Hardware. generic ist der                
     voreingestellte Wert und erstellt eine PV-Domain.                        
   2 Der Name dieser virtuellen Maschine. Er dient zur Unterscheidung von     
     anderen virtuellen Maschinen auf der selben Dom0. Diese Angabe ist       
     zwingend erforderlich.                                                   
   3 Die Gro:sse an RAM in Megabytes, die der VM zur Verfu:gung steht. Die    
     Gro:sse wird vom verfu:gbaren Speicher des Hypervisors subtrahiert,      
     nicht vom Speicher der Dom0.                                             
   4 Die Anzahl der virtuellen CPUs, die dem Gast zur Verfu:gung stehen. Fu:r 
     die beste Leistung sollten Sie dem Gast nicht mehr CPUs zuteilen, als    
     die Anzahl der CPUs auf dem physikalischen Host.                         
   5 Der virtuelle Netzwerkadapter. Dies ist die Bru:cke, die mit der         
     Netzwerkschnittstelle des Hosts verbunden ist. Der Parameter mac         
     definiert die MAC-Adresse der virtuellen Schnittstelle. Dieser Parameter 
     ist optional. Falls keine MAC definiert ist, wird Xen(TM) eine           
     zufa:llige MAC generieren.                                               
   6 Der vollsta:ndige Pfad zur Festplatte, Datei, oder ZFS Volume fu:r den   
     Plattenspeicher dieser VM. Optionen und Festplattendefinitionen werden   
     durch Kommata getrennt.                                                  
   7 Das Boot-Medium, aus dem das initiale Betriebssystem installiert wird.   
     In diesem Beispiel wird das zuvor heruntergeladene ISO-Abbild benutzt.   
     Andere Gera:te und weitere Optionen sind in der Xen(TM) Dokumentation    
     beschrieben.                                                             
   8 Optionen, die die VNC-Konnektivita:t der seriellen Konsole der DomU      
     steuern. Dabei handelt es sich um die aktive VNC-Unterstu:tzung, die     
     verwendete IP-Adresse, der Gera:tename der seriellen Konsole und die     
     Eingabemethoden fu:r Maus, Tastatur und andere Gera:te. keymap           
     konfiguriert die Tastaturbelegung, die in der Voreinstellung english     
     ist.                                                                     

   Nachdem die Konfigurationsdatei mit allen notwendigen Optionen erstellt
   wurde, wird die DomU erstellt, indem die Datei als Parameter an xl
   u:bergeben wird.

 # xl create freebsd.cfg

  Anmerkung:

   Jedes mal, wenn die Dom0 neu gestartet wird, muss die Konfigurationsdatei
   nochmals an xl u:bergeben werden, um die DomU neu zu erstellen. In der
   Voreinstellung wird nur die Dom0 nach einem Neustart angelegt, nicht die
   einzelnen VMs. Die VMs ko:nnen dort fortfahren, wo sie aufgeho:rt haben,
   weil sie das Betriebssystem auf der virtuellen Festplatte gespeichert
   haben. Die Konfiguration der virtuellen Maschine kann sich mit der Zeit
   a:ndern (bspw. beim Hinzufu:gen von mehr Arbeitsspeicher). Die
   Konfigurationsdateien der virtuellen Maschinen mu:ssen ordnungsgema:ss
   gesichert und vorgehalten werden, um die Gast-VM bei Bedarf neu erstellen
   zu ko:nnen.

   Die Ausgabe von xl list besta:tigt, dass die DomU erstellt wurde.

 # xl list
 Name                                        ID   Mem VCPUs      State   Time(s)
 Domain-0                                     0  8192     4     r-----  1653.4
 freebsd                                      1  1024     1     -b----   663.9

   Um die Installation des Basis-Betriebssystems zu beginnen, starten Sie den
   VNC-Client und verbinden Sie sich mit Netzwerkadresse des Hosts oder mit
   der IP-Adresse, die auf der Zeile vnclisten in freebsd.cfg konfiguriert
   wurde. Nachdem das Betriebssystem installiert ist, fahren Sie die DomU
   herunter und trennen den VNC-Viewer. Bearbeiten Sie dann die freebsd.cfg,
   entfernen Sie die Zeile mit der cdrom Definiton, oder kommentieren Sie die
   Zeile mit # aus. Um diese neue Konfiguration zu laden, ist es notwendig,
   die alte DomU mit xl zu zersto:ren, indem Sie entweder den Namen oder die
   ID als Parameter u:bergeben. Danach kann die DomU mit der angepassten
   freebsd.cfg neu erstellt werden.

 # xl destroy freebsd
 # xl create freebsd.cfg

   Auf die Maschine kann jetzt wieder mit dem VNC-Viewer zugegriffen werden.
   Dieses mal wird sie von einer virtuellen Festplatte booten, auf der das
   Betriebssystem installiert wurde. Die virtuelle Maschine kann nun
   verwendet werden.

Kapitel 22. Lokalisierung - I18N/L10N einrichten und benutzen

   Beigesteuert von Andrey Chernov.
   U:berarbeitet von Michael C. Wu.
   U:bersetzt von Alexander Langer und Martin Heinen.
   Inhaltsverzeichnis

   22.1. U:bersicht

   22.2. Lokale Anpassungen benutzen

   22.3. I18N-Programme

   22.4. Lokalisierung fu:r einzelne Sprachen

22.1. U:bersicht

   FreeBSD ist ein verteiltes Projekt mit Nutzern und Mitwirkenden auf der
   ganzen Welt. Als solches unterstu:tzt FreeBSD Lokalisierung fu:r viele
   Sprachen, so dass Benutzer Daten in anderen Sprachen als Englisch
   anzeigen, eingeben und verarbeiten ko:nnen. Sie ko:nnen zwischen den
   meisten der verbreitetsten Sprachen der Welt wa:hlen, unter anderem
   Chinesisch, Japanisch, Koreanisch, Franzo:sisch, Russisch, Vietnamesisch
   und Deutsch.

   Der Begriff internationalization (englisch fu:r Internationalisierung)
   wurde zu I18N abgeku:rzt, weil sich zwischen dem ersten und letzten
   Buchstaben des Worts 18 Buchstaben befinden. L10N benutzt die gleiche
   Namensgebung und ist eine Abku:rzung des Wortes localization (englisch
   fu:r Lokalisierung). Mit I18N/L10N-Methoden, -Protokollen und -Anwendungen
   ko:nnen Benutzer eine Sprache ihrer Wahl verwenden.

   Dieses Kapitel behandelt die Internationalisierung und Lokalisierung von
   FreeBSD. Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen:

     * wie der Name einer Locale aufgebaut ist.

     * wie die Locale einer Login-Shell gesetzt wird.

     * wie die Konsole fu:r nicht-englische Sprachen konfiguriert wird.

     * wie Xorg mit verschiedenen Sprachen benutzt wird.

     * wie I18N-fa:hige Anwendungen gefunden werden ko:nnen.

     * Wo Sie weitere Informationen u:ber verschiedene Sprachen finden.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Wissen, wie Sie zusa:tzliche Anwendungen installieren.

22.2. Lokale Anpassungen benutzen

   Lokale Anpassungen werden durch die Angabe von drei Werten erreicht: dem
   Sprachcode, dem La:ndercode und der Codierung. Die Zusammenfassung dieser
   Werte wird "Locale" genannt und sieht wie folgt aus:

 Sprachcode_La:ndercode.Codierung

   Sprachcode und La:ndercode werden verwendet, um das Land und die
   spezifische Sprachvariation zu bestimmen. Tabelle 22.1, "Gebra:uchliche
   Sprach- und La:ndercodes" entha:lt dazu einige Beispiele:

   Tabelle 22.1. Gebra:uchliche Sprach- und La:ndercodes

       Sprachcode_La:ndercode                     Beschreibung                
   en_US                           Englisch, Vereinigte Staaten               
   ru_RU                           Russisch, Russland                         
   zh_TW                           Traditionelles Chinesisch, Taiwan          

   Eine vollsta:ndige Liste der verfu:gbaren Lokalisierungen erhalten Sie
   durch die Eingabe von:

 % locale -a | more

   Die aktuelle La:ndereinstellung erhalten Sie mit:

 % locale

   Sprachspezifische Zeichensa:tze, wie ISO8859-1, ISO8859-15, KOI8-R und
   CP437 werden in multibyte(3) beschrieben. Eine Liste der Zeichensa:tze
   finden Sie in der IANA Registry.

   Einige Sprachen, darunter Chinesisch und Japanisch, ko:nnen nicht mit
   ASCII-Zeichen dargestellt werden und beno:tigen eine erweiterte
   Sprachcodierung mit Wide- oder Multibyte-Zeichen. EUC und Big5 sind
   Beispiele fu:r Wide- oder Multibyte-Codierungen. A:ltere Anwendungen
   erkennen diese Zeichen nicht und halten sie fa:lschlicherweise fu:r
   Steuerzeichen, wa:hrend neure Anwendungen diese Zeichen in der Regel
   erkennen. Es ha:ngt allerdings von der Implementierung ab, ob man eine
   Anwendung neu kompilieren muss, um lokale Zeichensa:tze zu bekommen, oder
   ob sie nur richtig konfiguriert werden muss.

  Anmerkung:

   FreeBSD verwendet Xorg-kompatible Codierungen.

   Der Rest dieses Abschnitts beschreibt die verschiedenen Methoden zur
   Konfiguration von der Locale auf einem FreeBSD-System. Der folgende
   Abschnitt beschreibt den Bau von Anwendungen mit I18N-Unterstu:tzung.

  22.2.1. Einstellen der Locale fu:r die Login-Shell

   Die Einstellungen fu:r Locale werden entweder in der ~/.login_conf des
   Benutzers, oder der Startdatei der Shell (~/.profile, ~/.bashrc oder
   ~/.cshrc) konfiguriert.

   Zwei Umgebungsvariablen sollten konfiguriert werden:

     * LANG, das die Locale einstellt.

     * MM_CHARSET, das den MIME Zeichensatz fu:r Anwendungen einstellt.

   Neben der Shell-Konfiguration des Benutzers sollten diese Variablen auch
   fu:r spezifische Anwendungen und Xorg-Konfigurationen eingestellt werden.

   Es gibt zwei Methoden, die Locale zu setzen: die erste und empfohlene
   Methode ist, die Umgebungsvariablen in der Login-Klasse zu setzen, die
   zweite Methode ist, sie in den Startdateien der Shell zu setzen. In den
   na:chsten Abschnitten werden beide Methoden vorgestellt.

    22.2.1.1. Lokalisierung in der Login-Klasse

   Die erste Methode wird empfohlen, da sie die Umgebungsvariablen fu:r die
   Login-Klasse und den MIME Zeichensatz fu:r alle Shells zuweist. Die
   Lokalisierung kann von einem Benutzer selbst, oder vom Superuser fu:r alle
   Benutzer eingestellt werden.

   .login_conf im Heimatverzeichnis eines Benutzers sollte mindestens die
   folgenden Eintra:ge enthalten, damit beide Variablen fu:r den Gebrauch der
   Latin-1 Codierung gesetzt werden:

 me:\
         :charset=ISO-8859-1:\
         :lang=de_DE.ISO8859-1:

   Damit traditionelles Chinesisch (BIG-5 Codierung) verwendet werden kann,
   sind in ~/.login_conf des Benutzers die nachstehenden Erga:nzungen
   vorzunehmen. Einige Programme behandeln die Lokalisierung fu:r Chinesisch,
   Japanisch und Koreanisch falsch, daher mu:ssen mehr Variablen als u:blich
   gesetzt werden:

 #Users who do not wish to use monetary units or time formats
 #of Taiwan can manually change each variable
 me:\
         :lang=zh_TW.Big5:\
         :setenv=LC_ALL=zh_TW.Big5,LC_COLLATE=zh_TW.Big5,LC_CTYPE=zh_TW.Big5,LC_MESSAGES=zh_TW.Big5,LC_MONETARY=zh_TW.Big5,LC_NUMERIC=zh_TW.Big5,LC_TIME=     zh_TW.Big5:\
         :charset=big5:\
         :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server

   Alternativ kann der Superuser die Lokalisierung fu:r alle Benutzer
   konfigurieren. Die folgenden Variablen in /etc/login.conf setzen die
   richtige Login-Klasse und den richtigen MIME Zeichensatz:

 Sprache|Account-Typ-Beschreibung:\
         :charset=MIME_Zeichensatz:\
         :lang=Locale:\
         :tc=default:

   Die fu:r Latin-1 erforderlichen Eintra:ge wu:rden wie folgt aussehen:

 german|German Users Accounts:\
         :charset=ISO-8859-1:\
         :lang=de_DE.ISO8859-1:\
         :tc=default:

   Weitere Einzelheiten u:ber diese Variablen finden Sie in login.conf(5).

   Jedes Mal, wenn /etc/login.conf bearbeitet wurde, muss die Datenbank mit
   dem folgenden Kommando aktualisiert werden:

 # cap_mkdb /etc/login.conf

      22.2.1.1.1. Werkzeuge zum A:ndern der Login-Klasse

   Neben der manuellen Konfiguration von /etc/login.conf, stehen mehrere
   Werkzeuge bereit, um die Login-Klasse fu:r neue Benutzer einzustellen.

   Wenn Sie neue Accounts mit vipw anlegen, setzen Sie im Feld Sprache die
   gewu:nschte Sprache ein:

 user:password:1111:11:Sprache:0:0:Benutzername:/home/user:/bin/sh

   Wenn Sie mit adduser neue Benutzer anlegen, ko:nnen Sie die
   voreingestellte Sprache fu:r alle Benutzer, oder fu:r einen einzelnen
   Benutzer einstellen:

   Falls alle Benutzer die gleiche Sprache benutzen, setzen Sie
   defaultclass=Sprache in /etc/adduser.conf.

   Wenn Sie diese Einstellung beim Anlegen des Benutzers u:berschreiben
   wollen, geben Sie entweder die gewu:nschte Login-Klasse am Prompt ein:

 Enter login class: default []:

   oder u:bergeben Sie die Login-Klasse beim Aufruf von adduser:

 # adduser -class Sprache

   Wenn Sie neue Benutzer mit pw anlegen, geben Sie die Login-Klasse wie
   folgt an:

 # pw useradd Benutzername -L Sprache

    22.2.1.2. Lokalisierung in den Startdateien der Shells

   Diese zweite Methode wird nicht empfohlen, da jede Shell unterschiedlich
   eingerichtet wird, eine unterschiedliche Konfigurationsdatei und Syntax
   verwendet. Um beispielsweise die deutsche Sprache fu:r die sh zu setzen,
   fu:gen Sie fu:r einen Benutzer die folgende Zeilen in ~/.profile ein. Sie
   ko:nnen diese Zeilen auch fu:r alle Benutzer der sh Shell in /etc/profile
   oder /usr/share/skel/dot.profile hinzufu:gen:

 LANG=de_DE.ISO8859-1; export LANG
 MM_CHARSET=ISO-8859-1; export MM_CHARSET

   Die csh Shell verwendet jedoch eine andere Konfigurationsdatei und eine
   andere Syntax. Dies sind die entsprechenden Einstellungen fu:r
   ~/.csh.login, /etc/csh.login oder /usr/share/skel/dot.login:

 setenv LANG de_DE.ISO8859-1
 setenv MM_CHARSET ISO-8859-1

   Die Syntax zur Konfiguration von Xorg in ~/.xinitrc ha:ngt ebenfalls von
   der verwendeten Shell ab. Das erste Beispiel ist fu:r die sh Shell, das
   zweite fu:r die csh Shell:

 LANG=de_DE.ISO8859-1; export LANG

 setenv LANG de_DE.ISO8859-1

  22.2.2. Einrichten der Konsole

   Fu:r die Konsole stehen mehrere lokalisierte Sprachen zur Verfu:gung. Eine
   Liste der verfu:gbaren Schriften erhalten Sie mit ls
   /usr/share/syscons/fonts. Um die Schriftart fu:r die Konsole zu
   konfigurieren, setzen Sie den gewu:nschten Zeichensatz ohne die Endung
   .fnt in /etc/rc.conf:

 font8x16=Zeichensatz
 font8x14=Zeichensatz
 font8x8=Zeichensatz

   Die Tasten- und Bildschirmzuordnung (keymap und screenmap) kann in mit den
   folgenden Eintra:gen in /etc/rc.conf gesetzt werden:

 scrnmap=screenmap_name
 keymap=keymap_name
 keychange="fkey_number sequence"

   Eine Liste der verfu:gbaren Bildschirmzuordnungen erhalten Sie mit ls
   /usr/share/syscons/scrnmaps. Spezifizieren Sie screenmap_name ohne die
   Endung .scm. Eine Bildschirmzuordnung und der zugeho:rige Zeichensatz
   verbreitert die Zeichenmatrix von VGA Karten von 8 Bit auf 9 Bit. Sie wird
   beno:tigt, wenn der Zeichensatz des Bildschirms 8 Bit verwendet.

   Eine Liste der verfu:gbaren Tastenzuordnungen erhalten Sie mit ls
   /usr/share/syscons/keymaps. Spezifizieren Sie keymap_name ohne die Endung
   .kbd. Eine Tastenzuordnung ko:nnen Sie ohne einen Neustart mit kbdmap(1)
   ausprobieren.

   Der Eintrag keychange programmiert die Funktionstasten so, dass sie zu dem
   ausgesuchten Terminal passen. Die Sequenzen der Funktionstasten ko:nnen
   nicht in Tastenzuordnungen definiert werden.

   Setzen Sie als na:chstes fu:r alle Terminals den richtigen Terminaltyp in
   /etc/ttys. Tabelle 22.2, "Terminaltypen fu:r Zeichensa:tze" entha:lt eine
   Zusammenfassung der verfu:gbaren Terminaltypen.

   Tabelle 22.2. Terminaltypen fu:r Zeichensa:tze

                   Zeichensatz                           Terminaltyp          
   ISO8859-1 oder ISO8859-15                    cons25l1                      
   ISO8859-2                                    cons25l2                      
   ISO8859-7                                    cons25l7                      
   KOI8-R                                       cons25r                       
   KOI8-U                                       cons25u                       
   CP437 (VGA default)                          cons25                        
   US-ASCII                                     cons25w                       

   Mit Wide- oder Multibyte-Zeichensa:tzen mu:ssen Sie die entsprechende
   Konsole aus der FreeBSD Ports-Sammlung installieren. Die verfu:gbaren
   Ports sind in Tabelle 22.3, "Konsolen aus der Ports-Sammlung"
   zusammengefasst. Nachdem Sie einen Port installiert haben, finden Sie in
   der Manualpage oder der pkg-message des Ports Anweisungen zur
   Konfiguration und Benutzung der Konsole.

   Tabelle 22.3. Konsolen aus der Ports-Sammlung

                     Sprache                                Port              
   traditionelles Chinesisch (BIG-5)            chinese/big5con               
   Chinesisch/Japanisch/Koreanisch              chinese/cce                   
   Chinesisch/Japanisch/Koreanisch              chinese/zhcon                 
   Japanisch                                    chinese/kon2                  
   Japanisch                                    japanese/kon2-14dot           
   Japanisch                                    japanese/kon2-16dot           

   Wenn Sie moused in /etc/rc.conf aktiviert haben, ist vielleicht noch
   weitere Konfiguration no:tig. Der Mauszeiger des syscons(4) Treibers
   belegt in der Voreinstellung den Bereich von 0xd0 bis 0xd3 des
   Zeichensatzes. Wenn dieser Bereich ebenfalls von der eingestellten Sprache
   beno:tigt wird, mu:ssen Sie den Mauszeiger verschieben. Fu:gen Sie dazu
   die folgende Zeile in /etc/rc.conf ein:

 mousechar_start=3

  22.2.3. Einrichtung von Xorg

   Kapitel 5, Das X-Window-System beschreibt die Installation und
   Konfiguration von Xorg. Wenn Xorg fu:r die Lokalisierung eingerichtet
   wird, stehen zusa:tzliche Zeichensa:tze und Eingabemethoden in der FreeBSD
   Ports-Sammlung zur Verfu:gung. Anwendungsspezifische I18N-Einstellungen,
   wie etwa Zeichensa:tze und Menu:s, ko:nnen in ~/.Xresouces angepasst
   werden, damit in den graphischen Anwendungen des Benutzers die gewa:hlte
   Sprache angezeigt wird.

   Das X Input Method (XIM) Protokoll ist ein Xorg-Standard fu:r die Eingabe
   von nicht-englischen Zeichen. Tabelle 22.4, "Verfu:gbare Eingabemethoden"
   fasst die aus der FreeBSD Ports-Sammlung verfu:gbaren Anwendungen fu:r die
   Eingabemethoden zusammen. Zusa:tzliche Fcitx- und Uim-Anwendungen sind
   ebenfalls verfu:gbar.

   Tabelle 22.4. Verfu:gbare Eingabemethoden

            Sprache                           Eingabemethode                  
   Chinesisch                 chinese/gcin                                    
   Chinesisch                 chinese/ibus-chewing                            
   Chinesisch                 chinese/ibus-pinyin                             
   Chinesisch                 chinese/oxim                                    
   Chinesisch                 chinese/scim-fcitx                              
   Chinesisch                 chinese/scim-pinyin                             
   Chinesisch                 chinese/scim-tables                             
   Japanisch                  japanese/ibus-anthy                             
   Japanisch                  japanese/ibus-mozc                              
   Japanisch                  japanese/ibus-skk                               
   Japanisch                  japanese/im-ja                                  
   Japanisch                  japanese/kinput2                                
   Japanisch                  japanese/scim-anthy                             
   Japanisch                  japanese/scim-canna                             
   Japanisch                  japanese/scim-honoka                            
   Japanisch                  japanese/scim-honoka-plugin-romkan              
   Japanisch                  japanese/scim-honoka-plugin-wnn                 
   Japanisch                  japanese/scim-prime                             
   Japanisch                  japanese/scim-skk                               
   Japanisch                  japanese/scim-tables                            
   Japanisch                  japanese/scim-tomoe                             
   Japanisch                  japanese/scim-uim                               
   Japanisch                  japanese/skkinput                               
   Japanisch                  japanese/skkinput3                              
   Japanisch                  japanese/uim-anthy                              
   Koreanisch                 korean/ibus-hangul                              
   Koreanisch                 korean/imhangul                                 
   Koreanisch                 korean/nabi                                     
   Koreanisch                 korean/scim-hangul                              
   Koreanisch                 korean/scim-tables                              
   Vietnamesisch              vietnamese/xvnkb                                
   Vietnamesisch              vietnamese/x-unikey                             

22.3. I18N-Programme

   I18N-Anwendungen werden mit Hilfe von I18N-Bibliotheken programmiert.
   Diese erlauben es Entwicklern, eine einfache Sprachdatei zu schreiben und
   Menu:s und Texte an jede Sprache anzupassen.

   Die FreeBSD Ports-Sammlung entha:lt Programme mit Unterstu:tzung fu:r
   Wide- und Mulitbyte-Zeichensa:tze fu:r verschiedene Sprachen. Konsultieren
   Sie die I18N-Dokumentation des entsprechenden Ports fu:r Informationen,
   wie das Programm zu konfigurieren ist und welche Optionen beim U:bersetzen
   anzugeben sind.

   Viele Anwendungen aus der FreeBSD Ports-Sammlung bieten
   I18N-Unterstu:tzung. Diese enthalten, zur einfachen Identifikation, -i18n
   im Namen. Es werden jedoch nicht alle Sprachen unterstu:tzt.

   Einige Anwendungen ko:nnen mit einem bestimmten Zeichensatz konfiguriert
   werden. Dies erfolgt entweder im Makefile, oder u:ber spezielle Parameter,
   die an configure u:bergeben werden. Lesen Sie die I18N-Dokumentation des
   entsprechenden Ports fu:r Informationen, wie das Programm zu konfigurieren
   ist und welche Optionen beim U:bersetzen anzugeben sind.

22.4. Lokalisierung fu:r einzelne Sprachen

   Dieser Abschnitt beschreibt die Lokalisierung eines FreeBSD-Systems fu:r
   die russische Sprache. Ausserdem werden einige zusa:tzliche Ressourcen
   fu:r die Lokalisierung in anderen Sprachen zur Verfu:gung gestellt.

  22.4.1. Russisch (KOI8-R Codierung)

   Beigetragen von Andrey Chernov.

   Um diese Locale fu:r die Login-Shell zu setzen, fu:gen Sie die folgenden
   Zeilen in die ~/.login_conf des Benutzers ein:

 me:My Account:\
         :charset=KOI8-R:\
         :lang=ru_RU.KOI8-R:

   Fu:gen Sie folgende Zeile fu:r die Konsole in /etc/rc.conf ein:

 keymap="ru.koi8-r"
 scrnmap="koi8-r2cp866"
 font8x16="cp866b-8x16"
 font8x14="cp866-8x14"
 font8x8="cp866-8x8"
 mousechar_start=3

   Benutzen Sie cons25r als Terminaltyp fu:r jeden ttyv Eintrag in /etc/ttys.

   Damit der Druck funktioniert, wird ein spezieller Filter zur U:bersetzung
   von KOI8-R nach CP866 beno:tigt, da die meisten Drucker mit russischen
   Zeichen die Codetabelle CP866 verwenden. FreeBSD entha:lt im Basissystem
   einen Filter zu diesem Zweck. Um diesen Filter zu benutzen, fu:gen Sie
   folgenden Eintrag in /etc/printcap ein:

 lp|Russian local line printer:\
         :sh:of=/usr/libexec/lpr/ru/koi2alt:\
         :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:

   printcap(5) entha:lt eine ausfu:hrlichere Erkla:rung.

   Russische Dateinamen auf MS-DOS(R) Dateisystemen werden durch -L und dem
   Namen der Locale in /etc/fstab erkannt:

 /dev/ad0s2      /dos/c  msdos   rw,-Lru_RU.KOI8-R 0 0

   Weitere Informationen finden Sie in mount_msdosfs(8).

   Wenn Sie Xorg verwenden, installieren Sie das Paket
   x11-fonts/xorg-fonts-cyrillic. Im Abschnitt "Files" von /etc/X11/xorg.conf
   fu:gen Sie dann den folgenden Eintrag vor allen anderen FontPath
   Eintra:gen ein:

 FontPath   "/usr/local/lib/X11/fonts/cyrillic"

   Zusa:tzliche kyrillische Schriftarten finden Sie in der Ports-Sammlung.

   Die Unterstu:tzung fu:r eine russische Tastatur aktivieren Sie im
   Abschnitt "Keyboard" von xorg.conf:

 Option "XkbLayout"   "us,ru"
 Option "XkbOptions"  "grp:toggle"

   Stellen Sie zudem sicher, dass XkbDisable auskommentiert ist.

   Beim Einsatz von grp:toggle ko:nnen Sie mit Right Alt (Alt Gr) zwischen
   dem RUS- und LAT-Modus wechseln, verwenden Sie hingegen
   grp:ctrl_shift_toggle, so erfolgt der Wechsel mit Ctrl+Shift. Fu:r
   grp:caps_toggle ist zum Wechseln des RUS/LAT-Modus CapsLock zusta:ndig.
   Die alte Funktion von CapsLock steht nur im LAT-Modus mit der
   Tastenkombination Shift+CapsLock zur Verfu:gung. grp:caps_toggle
   funktioniert aus unbekannten Gru:nden unter Xorg nicht.

   Wenn die Tastatur Windows(R)-Tasten besitzt und nicht-alphanumerische
   Tasten nicht funktionieren, fu:gen Sie die folgende Zeile in xorg.conf
   ein:

 Option "XkbVariant" ",winkeys"

  Anmerkung:

   Die russische XKB-Tastatur funktioniert vielleicht nicht mit
   nicht-lokalisierten Anwendungen. Lokalisierte Anwendungen sollten
   mindestens die Funktion XtSetLanguageProc (NULL, NULL, NULL); fru:hzeitig
   aufrufen.

   Weitere Informationen u:ber die Lokalisierung von Xorg-Anwendungen
   erhalten Sie auf der Webseite http://koi8.pp.ru/xwin.html. Allgemeine
   Informatinen u:ber die KOI8-R Codierung finden Sie auf http://koi8.pp.ru.

  22.4.2. Weitere sprachspezifische Ressourcen

   Dieser Abschnitt entha:lt einige zusa:tzliche Ressourcen fu:r die
   Konfiguration anderer Lokalisierungen.

   Traditionelles Chinesisch fu:r Taiwan

           Das taiwanesische FreeBSD Projekt stellt ein Tutorium unter
           http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/ zur
           Verfu:gung.

   Griechische Lokalisierung

           Ein Artikel u:ber die Unterstu:tzung fu:r Griechisch steht unter
           http://www.freebsd.org/doc/el_GR.ISO8859-7/articles/greek-language-support/index.html.
           Bitte beachten Sie, dass dies nur fu:r Griechisch gilt.

   Japanische und koreanische Lokalisierung

           Informationen u:ber die japanische Lokalisierung entnehmen Sie
           bitte http://www.jp.FreeBSD.org/, Informationen u:ber die
           koreanische Lokalisierung erhalten Sie unter
           http://www.kr.FreeBSD.org/.

   Nicht-englische FreeBSD-Dokumentation

           Teile der FreeBSD Dokumentation wurden von Beitragenden in andere
           Sprachen u:bersetzt. Folgen Sie den Links auf der FreeBSD-Webseite
           oder schauen Sie in /usr/share/doc nach.

Kapitel 23. FreeBSD aktualisieren

   Umstrukturiert und aktualisiert von Jim Mock.
   Im Original von Jordan Hubbard, Poul-Henning Kamp, John Polstra und Nik
   Clayton.
   U:bersetzt von Martin Heinen.
   Inhaltsverzeichnis

   23.1. U:bersicht

   23.2. FreeBSD-Update

   23.3. Aktualisieren der Dokumentationssammlung

   23.4. Einem Entwicklungszweig folgen

   23.5. FreeBSD aus den Quellen aktualisieren

   23.6. Installation mehrerer Maschinen

23.1. U:bersicht

   FreeBSD wird zwischen einzelnen Releases sta:ndig weiter entwickelt.
   Manche Leute bevorzugen die offiziellen Release-Versionen, wa:hrend andere
   wiederum lieber auf dem aktuellen Stand der Entwicklung bleiben mo:chten.
   Wie dem auch sei, sogar offizielle Release-Versionen werden oft mit
   Sicherheitsaktualisierungen und anderen kritischen Fehlerbereinigungen
   versorgt. Unabha:ngig von der eingesetzten Version bringt FreeBSD alle
   no:tigen Werkzeuge mit, um das System aktuell zu halten und es innerhalb
   verschiedener Versionen zu aktualisieren. Dieses Kapitel beschreibt, wie
   man einem Entwicklungssystem folgen kann, sowie die grundlegenden
   Werkzeuge um FreeBSD zu aktualisieren.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie

     * wissen, wie das System mit freebsd-update oder Subversion aktualisiert
       wird.

     * wissen, wie man das aktuell installierte System mit einer
       urspru:nglichen Version vergleicht.

     * wissen, wie die installierte Dokumentation mit Subversion oder
       Dokumentations-Ports aktualisiert wird.

     * den Unterschied zwischen den beiden Entwicklungszweigen FreeBSD-STABLE
       und FreeBSD-CURRENT kennen.

     * wissen, wie das komplette Basissystem neu gebaut und installiert wird.

   Bevor Sie dieses Kapitel lesen, sollten Sie

     * das Netzwerk richtig konfiguriert haben (Kapitel 30, Weiterfu:hrende
       Netzwerkthemen).

     * wissen, wie Software Dritter installiert wird (Kapitel 4, Installieren
       von Anwendungen: Pakete und Ports).

  Anmerkung:

   In diesem Kapitel wird svn verwendet, um die FreeBSD Quellen zu beziehen
   und zu aktualisieren. Um es zu verwenden, muss zuerst der Port oder das
   Paket devel/subversion installiert werden.

23.2. FreeBSD-Update

   Geschrieben von Tom Rhodes.
   Basierend auf Mitschriften von Colin Percival.
   U:bersetzt von Benedict Reuschling.

   Das zeitnahe Einspielen von Sicherheitsaktualisierungen und die
   Aktualisierung des Betriebssystems sind wichtige Aspekte der
   Systemadministration. FreeBSD entha:lt das Werkzeug freebsd-update, mit
   dem Sie diese beiden Aufgaben erfu:llen ko:nnen.

   Dieses Werkzeug ermo:glicht die Anwendung von Sicherheitsaktualisierungen
   im Bina:rformat auf das FreeBSD Basissystem, ohne dieses neu zu
   u:bersetzen und zu installieren. Die Aktualisierungen im Bina:rformat sind
   fu:r alle Architekturen und Versionen verfu:gbar, welche vom FreeBSD
   Sicherheitsteam unterstu:tzt werden. Eine Liste der unterstu:tzten
   Versionen und der End-of-Life-Daten ist unter
   http://www.FreeBSD.org/security/ aufgefu:hrt.

   freebsd-update unterstu:tzt auch die Aktualisierung des Betriebssystems
   auf eine neuere Unterversion sowie eine Aktualisierung auf einen anderen
   Release-Zweig. Bevor Sie auf eine neue Version aktualisieren, sollten Sie
   die aktuellen Anku:ndigungen zu dem Release gelesen haben, da diese
   wichtige Informationen zu dem entsprechenden Release enthalten.
   Anku:ndigungen finden Sie unter http://www.FreeBSD.org/releases/.

  Anmerkung:

   Wenn eine crontab existiert, welche die Eigenschaften von
   freebsd-update(8) verwendet, muss diese deaktiviert werden, bevor das
   Betriebssystem aktualisiert wird.

   Dieser Abschnitt beschreibt die Verwendung der Konfigurationsdatei von
   freebsd-update. Es wird gezeigt wie Sie Sicherheitsaktualisierungen
   einspielen, oder wie Sie das Betriebssystem auf neuere Haupt- und
   Unterversionen aktualisieren ko:nnen.

  23.2.1. Die Konfigurationsdatei

   In der Regel muss die Konfigurationsdatei von freebsd-update nicht
   bearbeitet werden. Manche Benutzer mo:chten die
   Standard-Konfigurationsdatei /etc/freebsd-update.conf trotzdem anpassen,
   um bessere Kontrolle u:ber den gesamten Prozess zu besitzen. Die
   Kommentare in dieser Datei beschreiben die verfu:gbaren Optionen, jedoch
   beno:tigen die folgenden ein paar zusa:tzliche Erkla:rungen:

 # Components of the base system which should be kept updated.
 Components world kernel

   Dieser Parameter kontrolliert, welche Teile von FreeBSD auf dem aktuellen
   Stand gehalten werden sollen. In der Voreinstellung wird das gesamte
   Basissystem sowie der Kernel aktualisiert. Es ko:nnen auch einzelne
   Komponenten, wie src/base oder src/sys, angegeben werden. Die beste
   Einstellung ist, diese Option so zu belassen, da eine A:nderung es
   bedingt, dass man als Benutzer jede Komponente auflisten muss, die
   aktualisiert werden soll. Dies ko:nnte katastrophale Folgen nach sich
   ziehen, da der Quellcode und die Bina:rdateien dadurch nicht mehr synchron
   wa:ren.

 # Paths which start with anything matching an entry in an IgnorePaths
 # statement will be ignored.
 IgnorePaths /boot/kernel/linker.hints

   Fu:gen Sie Pfade wie /bin oder /sbin hinzu, um diese speziellen
   Verzeichnisse wa:hrend des Aktualisierungsprozesses unberu:hrt zu lassen.
   Diese Option kann verwendet werden, um zu verhindern, dass freebsd-update
   lokale A:nderungen u:berschreibt.

 # Paths which start with anything matching an entry in an UpdateIfUnmodified
 # statement will only be updated if the contents of the file have not been
 # modified by the user (unless changes are merged; see below).
 UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile

   Diese Option aktualisiert nur unmodifizierte Konfigurationsdateien in den
   angegebenen Verzeichnissen. Jede A:nderung, die der Benutzer daran
   vorgenommen hat, wird die automatische Aktualisierung dieser Dateien
   verhindern. Es gibt eine weitere Option KeepModifiedMetadata, die
   freebsd-update instruiert, die A:nderungen wa:hrend der Zusammenfu:hrung
   zu speichern.

 # When upgrading to a new FreeBSD release, files which match MergeChanges
 # will have any local changes merged into the version from the new release.
 MergeChanges /etc/ /var/named/etc/ /boot/device.hints

   Eine Liste von Verzeichnissen mit Konfigurationsdateien, in denen
   freebsd-update Zusammenfu:hrungen versuchen soll. Dieser
   Verschmelzungsprozess von Dateien ist eine Serie von diff(1)-Korrekturen,
   a:hnlich wie mergemaster(8), aber mit weniger Optionen. Die A:nderungen
   werden entweder akzeptiert, oder o:ffnen einen Editor, oder freebsd-update
   bricht ab. Im Zweifelsfall sichern Sie /etc und akzeptieren einfach die
   A:nderungen. Lesen Sie mergemaster(8), um Informationen u:ber mergemaster
   zu erhalten.

 # Directory in which to store downloaded updates and temporary
 # files used by FreeBSD Update.
 # WorkDir /var/db/freebsd-update

   In diesem Verzeichnis werden alle Korrekturen und tempora:ren Dateien
   abgelegt. Im Falle einer Versionsaktualisierung sollte diesem Verzeichnis
   mindestens ein Gigabyte Festplattenspeicher zur Verfu:gung stehen.

 # When upgrading between releases, should the list of Components be
 # read strictly (StrictComponents yes) or merely as a list of components
 # which *might* be installed of which FreeBSD Update should figure out
 # which actually are installed and upgrade those (StrictComponents no)?
 # StrictComponents no

   Wenn diese Option auf yes gesetzt ist, wird freebsd-update annehmen, dass
   die Components-Liste vollsta:ndig ist und nicht versuchen, A:nderungen
   ausserhalb dieser Liste zu ta:tigen. Tatsa:chlich wird freebsd-update
   versuchen, jede Datei zu aktualisieren, die zu der Components-Liste
   geho:rt.

  23.2.2. Sicherheitskorrekturen anwenden

   Das Einspielen von FreeBSD Sicherheitskorrekturen wurde dahingehend
   vereinfacht, dass der Administrator nun das gesamte System mit
   freebsd-update auf dem aktuellen Stand halten kann. Weitere Informationen
   zu FreeBSD Sicherheitshinweisen finden Sie in Abschnitt 13.11, "FreeBSD
   Sicherheitshinweise".

   Sicherheitskorrekturen fu:r FreeBSD ko:nnen wie folgt heruntergeladen und
   installiert werden. Das erste Kommando pru:ft, ob noch ausstehende
   Korrekturen verfu:gbar sind, und wenn dass der Fall ist, zeigt es welche
   Dateien davon betroffen wa:ren. Das zweite Kommando wird die Korrekturen
   auf das System anwenden.

 # freebsd-update fetch
 # freebsd-update install

   Wenn wa:hrend der Aktualisierung Korrekturen am Kernel angewendet werden,
   muss das System neu gestartet werden, damit der korrigierte Kernel
   gebootet wird. Wenn die Korrekturen auf laufende Bina:rdateien angewendet
   werden, sollten die betroffenen Anwendungen neu gestartet werden, damit
   die korrigierte Version der Bina:rdatei geladen wird.

   Mit dem folgenden Eintrag in /etc/crontab wird das System einmal ta:glich
   nach Aktualisierungen suchen:

 @daily                                  root    freebsd-update cron

   Wenn Korrekturen existieren, werden diese automatisch heruntergeladen,
   aber nicht eingespielt. Der root-Benutzer bekommt eine Nachricht, damit
   die Korrekturen u:berpru:ft und mit freebsd-update install manuell
   installiert werden ko:nnen.

   Wenn etwas schief geht, kann freebsd-update den letzten Satz von
   A:nderungen mit folgendem Befehl ru:ckga:ngig machen:

 # freebsd-update rollback
 Uninstalling updates... done.

   Wie bereits erwa:hnt, sollte das System neu gestartet werden, wenn der
   Kernel oder ein Kernelmodul vera:ndert wurde. Betroffene Anwendungen
   sollten neu gestartet werden, wenn Bina:rdateien vera:ndert wurden.

   Das freebsd-update-Werkzeug kann nur den GENERIC-Kernel automatisch
   aktualisieren. Wenn ein angepasster Kernel verwendet wird, muss dieser neu
   erstellt und installiert werden, nachdem freebsd-update die
   Aktualisierungen durchgefu:hrt hat. Allerdings wird freebsd-update den
   GENERIC-Kernel in /boot/GENERIC erkennen und aktualisieren, selbst wenn
   dies nicht der aktuell verwendete Kernel des Systems ist.

  Anmerkung:

   Behalten Sie immer eine Kopie des GENERIC-Kernels in /boot/GENERIC. Das
   wird bei der Diagnose von verschiedenen Problemen sowie bei der
   Durchfu:hrung von Versionsaktualisierungen eine grosse Hilfe sein. Im
   Abschnitt 23.2.3.1, "Angepasste Kernel unter FreeBSD 9.X und spa:ter" wird
   beschrieben, wie Sie eine Kopie des GENERIC-Kernels bekommen.

   Solange die Standardkonfiguration in /etc/freebsd-update.conf nicht
   gea:ndert wurde, wird freebsd-update die aktualisierten Quellcodedateien
   des Kernels zusammen mit dem Rest der Neuerungen installieren. Die erneute
   U:bersetzung und Installation eines neuen, angepassten Kernels kann dann
   auf die u:bliche Art und Weise durchgefu:hrt werden.

   Die Aktualisierungen, die u:ber freebsd-update verteilt werden, betreffen
   nicht immer den Kernel. Es ist nicht notwendig, den angepassten Kernel neu
   zu erstellen, wenn die Kernelquellen nicht durch freebsd-update install
   gea:ndert wurden. Allerdings wird freebsd-update immer
   /usr/src/sys/conf/newvers.sh aktualisieren. Der aktuelle Patch-Level, der
   mit der -p-Nummer bei uname -r ausgegeben wird, wird aus dieser Datei
   ausgelesen. Die Neuinstallation des angepassten Kernels, selbst wenn sich
   daran nichts gea:ndert hat, erlaubt es uname, den aktuellen Patch-Level
   des Systems korrekt wiederzugeben. Dies ist besonders hilfreich, wenn
   mehrere Systeme gewartet werden, da es eine schnelle Einscha:tzung der
   installierten Aktualisierungen in jedem einzelnen System ermo:glicht.

  23.2.3. Aktualisierungen an Haupt- und Unterversionen

   Aktualisierungen einer Unterversion von FreeBSD zur na:chsten Version ist
   beispielsweise die Aktualisierung von FreeBSD 9.0 auf FreeBSD 9.1. Die
   Aktualisierung einer Hauptversion ist beispielsweise von FreeBSD 9.X auf
   FreeBSD 10.X. Beide Arten der Aktualisierungen ko:nnen durchgefu:hrt
   werden, indem man freebsd-update eine Release-Version als Ziel u:bergibt.

  Anmerkung:

   Wenn auf dem System ein angepasster Kernel eingesetzt wird, stellen Sie
   sicher, dass eine Kopie des GENERIC-Kernels in /boot/GENERIC existiert. Im
   Abschnitt 23.2.3.1, "Angepasste Kernel unter FreeBSD 9.X und spa:ter" wird
   beschrieben, wie Sie eine Kopie des GENERIC-Kernels bekommen.

   Wenn Sie das folgende Kommando auf einem System mit FreeBSD 9.0
   ausfu:hren, wird das System auf FreeBSD 9.1 aktualisiert:

 # freebsd-update -r 9.1-RELEASE upgrade

   Nach der Eingabe des Kommandos u:berpru:ft freebsd-update die
   Konfigurationsdatei und das aktuelle System, um die no:tigen Informationen
   fu:r die Systemaktualisierung zu sammeln. Eine Bildschirmausgabe wird
   anzeigen, welche Komponenten erkannt und welche nicht erkannt wurden. Zum
   Beispiel:

 Looking up update.FreeBSD.org mirrors... 1 mirrors found.
 Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done.
 Fetching metadata index... done.
 Inspecting system... done.

 The following components of FreeBSD seem to be installed:
 kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games
 src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue
 src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin
 world/base world/info world/lib32 world/manpages

 The following components of FreeBSD do not seem to be installed:
 kernel/generic world/catpages world/dict world/doc world/games
 world/proflibs

 Does this look reasonable (y/n)? y

   An diesem Punkt wird freebsd-update versuchen, alle notwendigen Dateien
   fu:r die Aktualisierung herunter zu laden. In manchen Fa:llen wird der
   Benutzer mit Fragen konfrontiert, um festzustellen, was installiert werden
   soll oder auf welche Art und Weise fortgesetzt werden soll.

   Wenn ein angepasster Kernel benutzt wird, produziert der vorherige Schritt
   eine Warnung a:hnlich zu der folgenden:

 WARNING: This system is running a "
 MYKERNEL" kernel, which is not a
 kernel configuration distributed as part of FreeBSD 9.0-RELEASE.
 This kernel will not be updated: you MUST update the kernel manually
 before running "/usr/sbin/freebsd-update install"

   Diese Warnung kann an dieser Stelle problemlos ignoriert werden. Der
   aktualisierte GENERIC-Kernel wird als ein Zwischenschritt im
   Aktualisierungsprozess verwendet.

   Nachdem alle Korrekturen auf das lokale System heruntergeladen wurden,
   werden diese eingespielt. Dieser Prozess kann eine gewisse Zeit in
   Anspruch nehmen, abha:ngig von der Geschwindigkeit und Auslastung der
   Maschine. Konfigurationsdateien werden ebenfalls zusammengefu:gt. Dieser
   Teil der Prozedur verlangt einige Benutzereingaben, da eine Datei
   mo:glicherweise von Hand zusammengefasst werden muss oder ein Editor
   erscheint auf dem Bildschirm zum manuellen bearbeiten. Die Ergebnisse von
   jeder erfolgreichen Zusammenfassung werden dem Benutzer angezeigt,
   wa:hrend der Prozess weiter la:uft. Eine fehlgeschlagene oder ignorierte
   Zusammenfassung wird den Prozess sofort beenden. Benutzer sollten eine
   Sicherung von /etc anlegen und wichtige Dateien spa:ter manuell vereinen,
   beispielsweise master.passwd oder group.

  Anmerkung:

   Das System ist zu diesem Zeitpunkt noch nicht vera:ndert worden, da alle
   Korrekturen und Vereinigungen in einem anderen Verzeichnis vorgenommen
   wurden. Wenn alle Korrekturen erfolgreich eingespielt, alle
   Konfigurationsdateien zusammengefu:gt wurden und es den Anschein hat, dass
   der Prozess problemlos verlaufen wird, mu:ssen die A:nderungen vom
   Anwender noch angewendet und auf die Platte geschrieben werden:

 # freebsd-update install

   Der Kernel und die Module werden zuerst aktualisiert. Wenn das System
   einen angepassten Kernel verwendet, benutzen Sie nextboot(8), um den
   Kernel fu:r den na:chsten Neustart auf /boot/GENERIC zu setzen:

 # nextboot -k GENERIC

  Warnung:

   Bevor das System mit dem GENERIC-Kernel neu gestartet wird, vergewissern
   Sie sich, dass fu:r den Neustart alle beno:tigten Treiber enthalten sind.
   Falls auf die Maschine aus der Ferne zugegriffen wird, stellen Sie sicher,
   dass das System ordnungsgema:ss an das Netzwerk angeschlossen ist. Achten
   Sie besonders darauf, dass wenn der angepasste Kernel Funktionalita:t
   beinhaltet, die normalerweise von Kernelmodulen zur Verfu:gung gestellt
   werden, dass diese tempora:r u:ber /boot/loader.conf in den GENERIC-Kernel
   u:bernommen werden. Zudem wird empfohlen, nicht beno:tigte Dienste,
   eingeha:ngte Platten und verbundene Netzlaufwerke zu deaktivieren, bis der
   Aktualisierungsprozess abgeschlossen ist.

   Die Maschine sollte nun mit dem aktualisierten Kernel neu gestartet
   werden:

 # shutdown -r now

   Sobald das System wieder hochgefahren ist, muss freebsd-update erneut
   gestartet werden. Da der Zustand des Prozesses zuvor gesichert wurde, wird
   freebsd-update nicht von vorne beginnen, sondern mit der na:chsten Phase
   fortfahren und alle alten Bibliotheken und Objektdateien lo:schen.

 # freebsd-update install

  Anmerkung:

   Abha:ngig davon, ob irgendwelche Bibliotheksversionen erho:ht wurden, kann
   es sein, dass nur zwei Installationsphasen anstatt drei durchlaufen
   werden.

   Die Aktualisierung ist nun abgeschlossen. Wenn es sich hierbei um eine
   Aktualisierung auf eine neue Hauptversion handelt, mu:ssen alle Ports und
   Pakete neu installiert werden. Dieser Vorgang wird in Abschnitt 23.2.3.2,
   "Aktualisierung der Pakete nach einem Upgrade auf eine Hauptversion"
   beschrieben.

    23.2.3.1. Angepasste Kernel unter FreeBSD 9.X und spa:ter

   Stellen Sie vor der ersten Benutzung von freebsd-update sicher, dass eine
   Kopie des GENERIC-Kernels in /boot/GENERIC existiert. Wenn ein angepasster
   Kernel erstmalig gebaut wurde, ist der Kernel in /boot/kernel.old der
   GENERIC-Kernel. Benennen Sie dieses Verzeichnis einfach in /boot/kernel
   um.

   Wenn bereits mehrfach ein angepasster Kernel gebaut wurde, oder nicht
   bekannt ist wie oft ein angepasster Kernel gebaut wurde, behalten Sie
   besser eine Kopie des GENERIC-Kernels, welcher mit der aktuellen Version
   des Betriebssystems u:bereinstimmt. Wenn ein direkter Zugriff auf die
   Maschine mo:glich ist, kann eine Kopie des GENERIC-Kernels von den
   Installationsmedien installiert werden:

 # mount /cdrom
 # cd /cdrom/usr/freebsd-dist
 # tar -C/ -xvf kernel.txz boot/kernel/kernel

   Alternativ kann der GENERIC-Kernel aus den Quellen neu gebaut und
   installiert werden:

 # cd /usr/src
 # make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null

   Damit dieser Kernel als GENERIC-Kernel von freebsd-update erkannt wird,
   darf die GENERIC-Konfigurationsdatei in keiner Weise gea:ndert worden
   sein. Es wird ebenfalls empfohlen, dass dieser ohne irgendwelche
   speziellen Optionen erstellt wird.

   Der Neustart in den GENERIC-Kernel ist nicht notwendig, da freebsd-update
   lediglich /boot/GENERIC beno:tigt.

    23.2.3.2. Aktualisierung der Pakete nach einem Upgrade auf eine Hauptversion

   In der Regel funktionieren nach einer Aktualisierung einer Unterversion
   die installierten Anwendungen weiterhin problemlos. Neue Hauptversionen
   verwenden jedoch andere Bina:rschnittstellen (ABIs), was dazu fu:hrt, dass
   die meisten Anwendungen von Drittherstellern nicht mehr funktionieren.
   Nach der Aktualisierung auf eine Hauptversion, mu:ssen alle installierten
   Ports und Pakete aktualisiert werden. Benutzen Sie pkg upgrade um Pakte zu
   aktualisieren. Installierte Ports ko:nnen Sie mit einem Werkzeug wie
   ports-mgmt/portmaster aktualisiert werden.

   Bei einer erzwungenen Aktualisierung aller installierten Pakete, werden
   diese durch eine neue Version aus dem Repository ersetzt, sogar dann, wenn
   sich die Versionsnummer nicht erho:ht hat. Dieser Schritt ist
   erforderlich, da sich die ABI bei einer Aktualisierung der Hauptversion
   von FreeBSD vera:ndert hat. Eine erzwungene Aktualisierung aller
   installierten Pakete geschieht wie folgt:

 # pkg-static upgrade -f

   Ein Neubau der installierten Ports fu:hren Sie mit diesem Kommando durch:

 # portmaster -af

   Dieser Befehl wird die Konfigurationen fu:r jede Anwendung anzeigen, und
   der Benutzer hat die Mo:glichkeit, die Optionen anzupassen. Wenn Sie
   ausschliesslich die voreingestellten Optionen verwenden mo:chten,
   verwenden Sie mit dem obigen Befehl den Parameter -G.

   Sobald dies abgeschlossen ist, beenden Sie den Aktualisierungsprozess mit
   einem letzten Aufruf von freebsd-update. Geben Sie den folgenden Befehl
   ein, um alle losen Enden des Aktualisierungsprozesses miteinander zu
   verknu:pfen:

 # freebsd-update install

   Wenn der GENERIC-Kernel tempora:r Verwendung fand, ist dies der richtige
   Zeitpunkt, einen neuen, angepassten Kernel nach den Anweisungen in
   Kapitel 8, Konfiguration des FreeBSD-Kernels zu bauen und zu installieren.

   Booten Sie anschliessend die Maschine in die neue FreeBSD-Version. Der
   Aktualisierungsprozess ist damit abgeschlossen.

  23.2.4. Vergleich des Systemzustands

   freebsd-update IDS kann verwendet werden, um den Zustand der installierten
   FreeBSD-Version gegenu:ber einer bekannten und funktionierenden Kopie zu
   vergleichen. Dieses Kommando vergleicht die aktuelle Version von
   Systemwerkzeugen, Bibliotheken sowie Konfigurationsdateien und kann als
   integriertes Intrusion Detection System (IDS) benutzt werden.

  Warnung:

   Dieses Programm ist kein Ersatz fu:r ein echtes IDS-System wie
   security/snort. Da freebsd-update Daten auf der Festplatte speichert, ist
   die Mo:glichkeit von Verfa:lschungen offensichtlich. Obwohl diese
   Mo:glichkeit durch die Verwendung von kern.securelevel oder die
   Speicherung von Daten auf einem Nur-Lese Dateisystem eingeda:mmt werden
   kann, besteht eine bessere Lo:sung darin, das System gegen ein gesichertes
   Medium, wie eine DVD oder einen externen, separat aufbewahrten
   USB-Plattenspeicher, zu vergleichen. Eine alternative Methode zur
   Bereitstellung von IDS-Funktionalia:ten wird in Abschnitt 13.2.6,
   "U:berpru:fung von Bina:rdateien" beschrieben.

   Beginnen Sie den Vergleich, indem Sie das Programm starten und eine
   Ausgabedatei festlegen:

 # freebsd-update IDS >> outfile.ids

   Das System wird nun u:berpru:ft. Dabei wird eine lange Liste von Dateien
   zusammen mit den SHA256-Hashwerten der Release-Version und den Werten des
   aktuell installierten Systems, in die angegebene Ausgabedatei geschrieben.

   Die Zeilen in der Ausgabe sind extrem lang, aber das Ausgabeformat kann
   einfach verarbeitet werden. Um beispielsweise eine Liste von allen Dateien
   zu erhalten, die sich vom aktuellen Release unterscheiden, geben Sie das
   folgende Kommando ein:

 # cat outfile.ids | awk '{ print $1 }' | more
 /etc/master.passwd
 /etc/motd
 /etc/passwd
 /etc/pf.conf

   Diese Beispielausgabe wurde abgeschnitten, da noch viele weitere Dateien
   vorhanden sind. Einige Dateien wurden auf natu:rliche Art vera:ndert.
   /etc/passwd wurde beispielsweise gea:ndert, wenn Benutzer zum System
   hinzugefu:gt wurden. Kernelmodule ko:nnen sich unterscheiden, wenn
   freebsd-update diese aktualisiert hat. Um bestimmte Dateien oder
   Verzeichnisse auszuschliessen, fu:gen Sie diese an die
   IDSIgnorePaths-Option in /etc/freebsd-update.conf an.

23.3. Aktualisieren der Dokumentationssammlung

   U:bersetzt von Benedict Reuschling.

   Dokumentation ein wichtiger Bestandteil des FreeBSD Betriebssystems.
   Obwohl eine aktuelle Version der FreeBSD Dokumentation jederzeit auf der
   FreeBSD Webseite ( http://www.freebsd.org/doc/) verfu:gbar ist, kann es
   nu:tzlich sein, eine lokale Kopie der FreeBSD Webseite, Handbu:cher, FAQ
   und Artikel zu haben.

   Dieser Abschnitt beschreibt, wie Sie die FreeBSD Dokumentation u:ber die
   Quellen oder die FreeBSD Ports-Sammlung aktuell halten.

   Informationen zum Bearbeiten und Einreichen von Korrekturen finden Sie in
   der Fibel fu:r neue Mitarbeiter des FreeBSD-Dokumentationsprojekts.

  23.3.1. Die FreeBSD-Dokumentation aus den Quellen installieren

   Der Bau der FreeBSD Dokumentation aus den Quellen erfordert einige
   Werkzeuge, die nicht Teil des Basissystems sind. Die erforderlichen
   Werkzeuge, darunter auch svn, ko:nnen u:ber den Port oder das Paket
   textproc/docproj installiert werden.

   Benutzen Sie nach der Installation svn, um eine saubere Kopie der
   Dokumentationsquellen zu holen:

 # svn checkout https://svn.FreeBSD.org/doc/head /usr/doc

   Es dauert eine Weile, bis die Quellen das allererste Mal heruntergeladen
   werden. Lassen Sie den Vorgang laufen, bis es fertig ist.

   Zuku:nftige Aktualisierungen der Dokumentationsquellen ko:nnen wie folgt
   durchgefu:hrt werden:

 # svn update /usr/doc

   Sobald ein aktueller Schnappschuss der Dokumentationsquellen nach /usr/doc
   heruntergeladen wurde, ist alles bereit fu:r eine Aktualisierung der
   bestehenden Dokumentation.

   Eine komplette Aktualisierung aller Sprachen kann durch folgende Eingabe
   erreicht werden:

 # cd /usr/doc
 # make install clean

   Wenn nur eine Aktualisierung einer bestimmten Sprache gewu:nscht wird,
   kann make in einem sprachspezifischen Unterverzeichnis von /usr/doc
   aufgerufen werden:

 # cd /usr/doc/en_US.ISO8859-1
 # make install clean

   Alternativ kann der folgende Befehl in /usr/doc oder einem
   sprachspezifischen Unterverzeichnis abgesetzt werden, um die Dokumentation
   zu aktualisieren:

 # make update

   Die zu installierenden Ausgabeformate ko:nnen durch das Setzen von FORMATS
   angegeben werden:

 # cd /usr/doc
 # make FORMATS='html html-split' install clean

   Es existieren ein paar Optionen, welche den Prozess der Aktualisierung von
   Teilen der Dokumentation oder einer bestimmten U:bersetzung erleichtern.
   Diese Optionen ko:nnen entweder systemweit in /etc/make.conf gesetzt, oder
   als Kommandozeilenoptionen an make u:bergeben werden.

   Zu den Optionen geho:ren:

   DOC_LANG

           Eine Liste von Sprachen und Kodierungen, die gebaut und
           installiert werden sollen, z.B. en_US.ISO8859-1, um nur die
           englische Dokumentation zu erhalten.

   FORMATS

           Ein einzelnes Format oder eine Liste von Ausgabeformaten, das
           gebaut werden soll. Momentan werden html, html-split, txt, ps und
           pdf unterstu:tzt.

   DOCDIR

           Wohin die Dokumentation installiert werden soll. Der Standardpfad
           ist /usr/share/doc.

   Fu:r weitere make-Variablen, die als systemweite Optionen in FreeBSD
   unterstu:tzt werden, lesen Sie make.conf(5).

  23.3.2. Die Dokumentation aus den Ports aktualisieren

   Basierend auf der Arbeit von Marc Fonvieille.

   Im vorherigen Abschnitt wurde eine Methode gezeigt, wie die
   FreeBSD-Dokumentation aus den Quellen gebaut werden kann. Dieser Abschnitt
   beschreibt eine alternative Methode, in der die Ports-Sammlung verwendet
   wird und die es ermo:glicht:

     * vorgefertigte Schnappschu:sse der Dokumentation zu installieren, ohne
       vorher die Werkzeugsammlung der Dokumentation installieren zu mu:ssen.

     * die Dokumentationsquellen durch das Ports-System erstellen zu lassen,
       was die Schritte zum Auschecken und Erstellen etwas erleichtert.

   Diese Methoden der Aktualisierung der FreeBSD-Dokumentation werden durch
   eine Menge von Dokumentations-Ports und Paketen unterstu:tzt, die von
   Documentation Engineering Team <doceng@FreeBSD.org> monatlich aktualisiert
   wird. Diese sind in der FreeBSD Ports-Sammlung unter der Kategorie "docs"
   gelistet ( http://www.freshports.org/docs/).

   Die Dokumentations-Ports sind wie folgt organisiert:

     * Das Paket oder der Port misc/freebsd-doc-en installiert die englische
       Dokumentation.

     * Das Paket oder der Port misc/freebsd-doc-all installiert die komplette
       Dokumentation in allen verfu:gbaren Sprachen.

     * Es gibt noch ein Paket oder einen Port fu:r jede U:bersetzung,
       beispielsweise misc/freebsd-doc-hu fu:r die ungarische Dokumentation.

   Wenn Sie Pakete benutzen, wird die FreeBSD-Dokumentation in allen
   verfu:gbaren Formaten der jeweiligen Sprache installiert. Das folgende
   Beispiel wird das aktuelle Paket der ungarischen Dokumentation
   installieren:

 # pkg install hu-freebsd-doc

  Anmerkung:

   Pakete verwenden ein Format, welches sich von dem Namen des dazugeho:rigen
   Ports unterscheidet: lang-freebsd-doc. lang entspricht hier der Kurzform
   des Sprachcodes, z.B. hu fu:r Ungarisch, oder zh_cn fu:r vereinfachtes
   Chinesisch.

   Um das Format der Dokumentation zu bestimmen, muss anstelle des Pakets der
   Port gebaut werden. Das folgende Beispiel baut und installiert die
   englische Dokumentation:

 # cd /usr/ports/misc/freebsd-doc-en
 # make install clean

   Der Port entha:lt ein Konfigurationsmenu:, in dem das Format ausgewa:hlt
   werden kann. In der Voreinstellung sind html-split und pdf ausgewa:hlt.

   Alternativ ko:nnen bei der Erstellung eines Dokumentations-Ports
   verschiedene make-Optionen angegeben werden. Dazu geho:ren:

   WITH_HTML

           Erstellt das HTML-Format mit einer einzigen HTML-Datei pro
           Dokument. Die formatierte Dokumentation wird als Datei mit dem
           Namen article.html oder book.html gespeichert.

   WITH_PDF

           Die formatierte Dokumentation wird als Datei mit dem Namen
           article.pdf oder book.pdf gespeichert.

   DOCBASE

           Legt den Pfad fest, wohin die Dokumentation installiert werden
           soll. Die Voreinstellung ist /usr/local/share/doc/freebsd.

   Dieses Beispiel verwendet Variablen, um die ungarische Dokumentation als
   PDF in ein bestimmtes Verzeichnis zu installieren:

 # cd /usr/ports/misc/freebsd-doc-hu
 # make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean

   Dokumentations-Ports oder -Pakete ko:nnen nach den Anweisungen in
   Kapitel 4, Installieren von Anwendungen: Pakete und Ports aktualisiert
   werden. Beispielsweise aktualisiert das folgende Kommando die installierte
   ungarische Dokumentation mittels ports-mgmt/portmaster unter Verwendung
   von Paketen:

 # portmaster -PP hu-freebsd-doc

23.4. Einem Entwicklungszweig folgen

   FreeBSD besitzt zwei Entwicklungszweige: FreeBSD-CURRENT und
   FreeBSD-STABLE.

   Dieser Abschnitt beschreibt beide Zweige sowie deren Interessengruppen und
   erla:utert, wie ein System auf dem aktuellen Stand eines jeweiligen
   Zweiges gehalten wird.

  23.4.1. FreeBSD-CURRENT

   FreeBSD-CURRENT ist die allerneueste Entwicklung von FreeBSD. Benutzer von
   FreeBSD-CURRENT sollten u:ber sehr gute technische Fa:higkeiten verfu:gen.
   Benutzer mit weniger technischen Fa:higkeiten sollten stattdessen
   FreeBSD-STABLE benutzen, wenn sie einem Entwicklungszweig folgen mo:chten.

   FreeBSD-CURRENT besteht aus den neuesten Quellen des FreeBSD-Systems und
   entha:lt Sachen, an denen gerade gearbeitet wird, experimentelle
   A:nderungen und U:bergangsmechanismen, die im na:chsten offiziellen
   Release enthalten sein ko:nnen oder nicht. Obwohl FreeBSD-CURRENT ta:glich
   von vielen Entwicklern gebaut wird, gibt es Zeitra:ume, in denen sich das
   System vielleicht nicht bauen la:sst. Diese Probleme werden so schnell wie
   mo:glich behoben, aber ob Sie mit FreeBSD-CURRENT eine Katastrophe erleben
   oder neue Funktionen erhalten, kann von dem Zeitpunkt abha:ngen, an dem
   der Quelltext synchronisiert wurde.

   FreeBSD-CURRENT wird hauptsa:chlich fu:r drei Interessengruppen zur
   Verfu:gung gestellt:

    1. Mitglieder der FreeBSD Gemeinschaft, die aktiv an einem Teil des
       Quellbaums arbeiten.

    2. Mitglieder der FreeBSD Gemeinschaft, die aktive Tester sind. Diese
       Personen sind bereit, Zeit in das Lo:sen von Problemen zu investieren,
       Vorschla:ge zu A:nderungen oder der generellen Entwicklung von FreeBSD
       zu machen und Fehlerkorrekturen einzureichen.

    3. Benutzer, die die Entwicklung im Auge behalten, oder die Quellen zu
       Referenzzwecken benutzen wollen. Diese Gruppe macht auch Vorschla:ge
       oder steuert Quellcode bei.

   FreeBSD-CURRENT ist nicht der schnellste Weg, neue Funktionen vor dem
   offiziellen Release auszuprobieren. Bedenken Sie, dass neue Funktionen
   noch nicht im vollen Umfang getestet wurden und daher
   ho:chstwahrscheinlich Fehler enthalten. Es ist auch nicht der schnellste
   Weg, um an Fehlerbehebungen (engl. bug fixes) zu kommen. Jede
   Fehlerbehebung fu:hrt mit gleicher Wahrscheinlichkeit neue Fehler ein, mit
   der sie alte behebt. FreeBSD-CURRENT wird in keiner Weise "offiziell
   unterstu:tzt".

   Um FreeBSD-CURRENT zu folgen:

    1. Lesen Sie die Mailinglisten freebsd-current und svn-src-head. Dies ist
       notwendig, um die Kommentare u:ber den akutellen Status des Systems
       und wichtige Mitteilungen zum aktuellen Zustand von FreeBSD-CURRENT zu
       erfahren.

       Die svn-src-head Mailingliste erfasst die Commit-Logs fu:r jede
       A:nderung und entha:lt alle relevanten Informationen zu mo:glichen
       Seiteneffekten.

       Um diese Listen zu abonnieren, besuchen Sie
       http://lists.FreeBSD.org/mailman/listinfo, klicken Sie auf die
       gewu:nschte Liste und folgen Sie den Anweisungen. Wenn Sie die
       A:nderungen am gesamten Quellbaum verfolgen mo:chten, abonnieren Sie
       die svn-src-all Liste.

    2. Synchronisieren Sie die Quellen fu:r FreeBSD-CURRENT. In der Regel
       wird svn benutzt, um die Quellen fu:r -CURRENT aus dem Zweig head zu
       laden. Verwenden Sie dazu einen Subversion Spiegel aus
       Abschnitt A.3.6, "Subversion Mirror Sites".

    3. Aufgrund der Gro:sse des Repositories ist es empfehlenswert, nur die
       gewu:nschten Teilba:ume auszuchecken. Wenn Sie die Quellen einsetzen
       und nicht nur darin lesen wollen, laden Sie sich die kompletten
       Quellen von FreeBSD-CURRENT und nicht nur ausgesuchte Teile.

       Lesen Sie /usr/src/Makefile sehr aufmerksam und folgen Sie den
       Anweisungen in Abschnitt 23.5, "FreeBSD aus den Quellen
       aktualisieren". Lesen Sie die Mailingliste FreeBSD-CURRENT und
       /usr/src/UPDATING, um u:ber A:nderungen im Installationsverfahren, die
       manchmal vor der Einfu:hrung eines neuen Releases notwendig sind,
       informiert zu sein.

    4. Seien Sie aktiv! Benutzer von FreeBSD-CURRENT werden aufgefordert ihre
       Verbesserungsvorschla:ge oder Fehlerbehebungen einzureichen.
       Verbesserungsvorschla:ge, die Code enthalten, sind jederzeit herzlich
       willkommen.

  23.4.2. FreeBSD-STABLE

   FreeBSD-STABLE ist der Entwicklungszweig, auf dem Releases erstellt
   werden. Dieser Zweig a:ndert sich langsamer als FreeBSD-CURRENT und alle
   A:nderungen sollten zuvor in FreeBSD-CURRENT ausgetestet sein. Beachten
   Sie, dass dies immer noch ein Entwicklungszweig ist und daher zu jedem
   Zeitpunkt die Quellen von FreeBSD-STABLE verwendbar sein ko:nnen oder eben
   auch nicht. FreeBSD-STABLE ist Teil des Entwicklungsprozesses und nicht
   fu:r Endanwender gedacht. Benutzer, die nicht u:ber die notwendigen
   Ressourcen zum Testen verfu:gen, sollten stattdessen ein aktuelles Release
   von FreeBSD benutzen.

   Wer daran interessiert ist den Entwicklungsprozess von FreeBSD zu
   verfolgen oder dazu beizutragen, insbesondere im Hinblick auf das na:chste
   Release, der sollte es in Erwa:gung ziehen FreeBSD-STABLE zu benutzen.

   Obwohl wir versuchen sicherzustellen, dass sich FreeBSD-STABLE jederzeit
   u:bersetzen la:sst und lauffa:hig ist, ko:nnen wir dafu:r keine Garantie
   u:bernehmen. Auch wenn Neuentwicklungen in FreeBSD-CURRENT stattfinden,
   ist es jedoch so, dass mehr Leute FreeBSD-STABLE anstelle von
   FreeBSD-CURRENT benutzen und es daher unvermeidlich ist, dass Fehler und
   Grenzfa:lle erst in FreeBSD-STABLE auffallen. Aus diesen Gru:nden
   empfehlen wir, FreeBSD-STABLE nicht blindlings zu benutzen.

   Um FreeBSD-STABLE zu folgen:

    1. Lesen Sie die Mailingliste freebsd-stable, damit Sie u:ber
       Abha:ngigkeiten beim Bau von FreeBSD-STABLE und Dinge, die besondere
       Aufmerksamkeit erfordern, informiert sind. Umstrittene
       Fehlerbehebungen oder A:nderungen werden von den Entwicklern auf
       dieser Liste bekannt gegeben. Dies erlaubt es den Benutzern, Einwa:nde
       gegen die vorgeschlagenen A:nderungen vorzubringen.

       Abonnieren Sie die passende svn-Liste fu:r den jeweiligen Zweig, den
       Sie verfolgen. Wenn Sie beispielsweise den Zweig 9-STABLE verfolgen,
       lesen Sie svn-src-stable-9. Diese Liste entha:lt zu jeder A:nderung
       das Commit-Log, das Informationen zu mo:glichen Seiteneffekten
       entha:lt.

       Um diese Listen zu abonnieren, besuchen Sie die Seite
       http://lists.FreeBSD.org/mailman/listinfo. Klicken Sie auf die
       gewu:nschte Liste und folgen Sie den Anweisungen. Wenn Sie daran
       interessiert sind, A:nderungen am gesamten Quellbaum zu verfolgen,
       abonnieren Sie svn-src-all.

    2. Wenn Sie ein neues System installieren und dazu einen der monatlich
       aus FreeBSD-STABLE erzeugten Snapshots verwenden wollen, sollten Sie
       zuerst www.freebsd.org/snapshots" auf aktuelle Informationen
       u:berpru:fen. Alternativ ko:nnen Sie auch das neueste
       FreeBSD-STABLE-Release von den FreeBSD Spiegeln beziehen.

       Um ein bestehendes FreeBSD-System auf FreeBSD-STABLE zu aktualisieren,
       benutzen Sie svn um den gewu:nschten Entwicklungs- oder Release-Zweig
       auszuchecken. Die Zweige, wie beispielsweise stable/9, sind unter
       www.freebsd.org/releng aufgefu:hrt.

    3. Lesen Sie /usr/src/Makefile sehr aufmerksam bevor Sie FreeBSD-STABLE
       aktualisieren und folgen Sie den Anweisungen in Abschnitt 23.5,
       "FreeBSD aus den Quellen aktualisieren". Lesen Sie die Mailingliste
       FreeBSD-STABLE und /usr/src/UPDATING, um u:ber A:nderungen im
       Installationsablauf, die manchmal vor der Einfu:hrung eines neuen
       Releases notwendig sind, informiert zu sein.

23.5. FreeBSD aus den Quellen aktualisieren

   Das Aktualisieren von FreeBSD aus den Quellen bietet im Vergleich zu
   bina:ren Updates mehrere Vorteile. Der Quellcode kann mit Optionen gebaut
   werden, um die Vorteile von spezifischer Hardware zu nutzen. Teile des
   Basissystems ko:nnen mit vera:nderten Einstellungen gebaut, oder falls
   nicht gewu:nscht, auch ganz ausgelassen werden. Dieser Prozess dauert zwar
   la:nger als die Aktualisierung mit bina:ren Updates, ermo:glicht aber eine
   vollsta:ndige Anpassung, um eine individuelle Version von FreeBSD zu
   erstellen.

  23.5.1. Schnellstartanleitung

   Diese kurze Referenz zeigt die typischen Schritte um FreeBSD aus den
   Quellen zu aktualisieren. Spa:tere Abschnitte beschreiben die Prozedur im
   Detail.

     * Aktualisierung und Bauprozess

 # svn update /usr/src  1
 check /usr/src/UPDATING  2
 # cd /usr/src          3
 # make -j4 buildworld  4
 # make -j4 kernel      5
 # shutdown -r now      6
 # cd /usr/src          7
 # make installworld    8
 # mergemaster -Ui      9
 # shutdown -r now      10

       1  Holt die neueste Version der Quellen. Abschnitt 23.5.3, "Den        
          Quellcode aktualisieren" entha:lt weitere Informationen zum         
          Aktualisieren und Bauen der Quellen.                                
       2  /usr/src/UPDATING entha:lt Anweisungen fu:r alle manuellen          
          Schritte, die vor oder nach dem Bau der Quellen erforderlich sind.  
       3  Wechsel in das Bauverzeichnis.                                      
       4  Bau des Basissystems, mit Ausnahme des Kernels.                     
       5  Bau und Installation des Kernels. Dieser Schritt ist                
          gleichbedeutend mit make buildkernel installkernel.                 
       8  Installation des Basissystems.                                      
       9  Aktualisierung und Zusammenfu:hrung der Konfigurationsdateien in    
          /etc.                                                               
       10 Neustart des Systems mit dem neu erstellten Basissystem und Kernel. 

  23.5.2. Vorbereitungen zum Aktualisieren aus den Quellen

   Lesen Sie /usr/src/UPDATING. Jeder manuelle Schritt, welcher vor oder nach
   der Aktualisierung erforderlich ist, wird in dieser Datei beschrieben.

  23.5.3. Den Quellcode aktualisieren

   Der Quellcode von FreeBSD befindet sich in /usr/src/. Die bevorzugte
   Methode zur Aktualisierung dieser Quellen ist u:ber das
   Versionskontrollsystem Subversion. Sie sollten sicherstellen, dass der
   Quellcode unter Versionskontrolle steht:

 # svn info /usr/src
 Path: /usr/src
 Working Copy Root Path: /usr/src
 ...

   Dies ist ein Hinweis darauf, dass /usr/src/ unter Versionskontrolle steht
   und mit svn(1) aktualisiert werden kann.

 # svn update /usr/src

   Dieser Vorgang kann einige Zeit in Anspruch nehmen, falls das Verzeichnis
   nicht zuletzt aktualisiert wurde. Nach Beendigung ist der Quellcode
   aktuell und der im na:chsten Abschnitt beschriebene Bauprozess kann
   beginnen.

  Beschaffung des Quellcodes:

   Meldet die Ausgabe '/usr/src' is not a working copy, dann fehlen entweder
   Dateien, oder das Verzeichnis wurde mit einer anderen Methode
   aktualisiert. Ein erneuter Checkout der Quellen ist jetzt erforderlich.

   Tabelle 23.1. FreeBSD Versionen und Repository-Pfade

   +------------------------------------------------------------------------+
   | Ausgabe von | Repository-Pfad |              Beschreibung              |
   |  uname -r   |                 |                                        |
   |-------------+-----------------+----------------------------------------|
   |             |                 | Die Release-Version inklusive          |
   | X.Y-RELEASE | base/releng/X.Y | kritischer Sicherheits- und            |
   |             |                 | Bugfix-Patches. Dieser Zweig wird fu:r |
   |             |                 | die meisten Benutzer empfohlen.        |
   |-------------+-----------------+----------------------------------------|
   |             |                 | Die Release-Version und alle weitere   |
   |             |                 | Versionen auf diesem Zweig. STABLE     |
   |             |                 | bezieht sich darauf, dass die          |
   |             |                 | Bina:rschnittstelle (ABI) sich nicht   |
   |             |                 | a:ndert, sodass Anwendungen welche auf |
   |             |                 | a:lteren Versionen erstellt wurden     |
   |             |                 | weiterhin lauffa:hig sind. Eine        |
   | X.Y-STABLE  | base/stable/X   | Anwendung, welche fu:r FreeBSD 10.1    |
   |             |                 | u:bersetzt wurde, la:uft auch auf      |
   |             |                 | FreeBSD 10-STABLE.                     |
   |             |                 |                                        |
   |             |                 | STABLE-Zweige haben gelegentlich       |
   |             |                 | Fehler und Inkompatibilita:ten, welche |
   |             |                 | den Benutzer beeintra:chtigen          |
   |             |                 | ko:nnten. In der Regel werden diese    |
   |             |                 | Fehler aber zu:gig behoben.            |
   |-------------+-----------------+----------------------------------------|
   |             |                 | Die neueste unvero:ffentlichte Version |
   |             |                 | von FreeBSD. Der CURRENT-Zweig kann    |
   | X-CURRENT   | base/head/      | viele Fehler und Inkompatibilita:ten   |
   |             |                 | enthalten und wird daher nur fu:r      |
   |             |                 | fortgeschrittene Benutzer empfohlen.   |
   +------------------------------------------------------------------------+

   Ermitteln Sie mit uname(1) die verwendete FreeBSD-Version:

 # uname -r
 10.3-RELEASE

   Basierend auf Tabelle 23.1, "FreeBSD Versionen und Repository-Pfade" ist
   base/releng/10.3 der Repository-Pfad zur Aktualisierung von 10.3-RELEASE.
   Dieser Pfad wird beim Auschecken der Quellen benutzt:

 # mv /usr/src /usr/src.bak  1
 # svn checkout https://svn.freebsd.org/base/releng/10.3 /usr/src  2

   1 Verschiebt das alte Verzeichnis. Wenn es keine lokalen A:nderungen in    
     diesem Verzeichnis gibt, kann es gelo:scht werden.                       
   2 Der Pfad aus Tabelle 23.1, "FreeBSD Versionen und Repository-Pfade" wird 
     der Repository-URL hinzugefu:gt. Der dritte Parameter ist das lokale     
     Zielverzeichnis fu:r den Quellcode.                                      

  23.5.4. Den Quellcode bauen

   Die Welt, also das gesamte Basissystem mit Ausnahme des Kernels, wird
   zuerst u:bersetzt, um aktuelle Werkzeuge zum Erstellen des Kernels
   bereitzustellen. Anschliessend wird der Kernel gebaut:

 # cd /usr/src
 # make buildworld
 # make buildkernel

   Das Ergebnis wird in /usr/obj abgelegt.

   Dies sind die grundlegenden Schritte. Weitere Optionen zur Kontrolle des
   Bauprozesses sind nachfolgend beschrieben.

    23.5.4.1. Umgebung fu:r den Bauprozess sa:ubern

   Einige Versionen von FreeBSD hinterlassen bereits u:bersetzten Code im
   tempora:ren Objektverzeichnis /usr/obj. Dies kann nachfolgende Bauprozesse
   beschleunigen, da Code, der nicht vera:ndert wurde, nicht neu u:bersetzt
   werden muss. Um eine saubere Umgebung fu:r den Bauprozess zu schaffen,
   benutzen Sie cleanworld bevor Sie mit dem Bau beginnen.

 # make cleanworld

    23.5.4.2. Anzahl der Prozesse einstellen

   Eine ho:here Anzahl an Prozessen kann die Geschwindigkeit auf
   Mehrprozessor-Systemen verbessern. Die Anzahl der Kerne la:sst sich mit
   sysctl hw.cpu bestimmen. Prozessoren variieren ebenso, wie die
   verschiedenen Build-Systeme von FreeBSD. Sie mu:ssen daher mehrere
   Versuche starten um zu sehen, wie die Anzahl der Prozesse die
   Geschwindigkeit beeinflusst. Als Ausgangspunkt ko:nnen Sie die halbe bis
   doppelte Anzahl der Kerne als Wert probieren. Die Anzahl der Prozesse wird
   mit -j angegeben.

   Beispiel 23.1. Die Anzahl der Prozesse erho:hen

   Das Basissystem und den Kernel mit vier Prozessen bauen:

 # make -j4 buildworld buildkernel

    23.5.4.3. Nur den Kernel erstellen

   Wenn sich der Quellcode vera:ndert hat, muss ein buildworld ausgefu:hrt
   werden. Danach kann der Kernel mit buildkernel u:bersetzt werden. Um
   lediglich den Kernel zu u:bersetzen:

 # cd /usr/src
 # make buildkernel

    23.5.4.4. Einen angepassten Kernel erstellen

   Der FreeBSD Standard-Kernel basiert auf einer Konfigurationsdatei namens
   GENERIC. Der GENERIC-Kernel entha:lt die ga:ngigsten Gera:tetreiber und
   Optionen. Manchmal ist es aber sinnvoll oder gar notwendig, einen
   angepassten Kernel zu erstellen, um Gera:tetreiber oder Optionen
   hinzuzufu:gen oder zu entfernen, um bestimmte Anforderungen zu erfu:llen.

   Zum Beispiel ko:nnte jemand, der einen kleinen eingebetteten Rechner mit
   eingeschra:nktem RAM entwickelt, nicht beno:tigte Gera:tetreiber oder
   Optionen entfernen, um den Kernel etwas kleiner zu machen.

   Die Kernelkonfigurationsdateien befinden sich in /usr/src/sys/arch/conf/,
   wobei arch die Ausgabe von uname -m ist. Auf den meisten Rechnern ist dies
   amd64, demnach befinden sich die Konfigurationsdateien in
   /usr/src/sys/amd64/conf/.

  Tipp:

   /usr/src kann aus Versehen gelo:scht oder neu erstellt werden. Daher ist
   es vorzuziehen, angepasste Kernelkonfigurationsdateien in einen separaten
   Verzeichnis, wie bspw. /root zu speichern und diese in das
   conf-Verzeichnis zu verlinken. Wenn dieses Verzeichnis gelo:scht oder
   u:berschrieben wird, kann die Kernelkonfigurationsdatei einfach neu
   verknu:pft werden.

   Eine benutzerdefinierte Konfigurationsdatei kann durch Kopieren der
   GENERIC-Konfigurationsdatei erstellt werden. In diesem Beispiel ist der
   neue Kernel fu:r einen Speicherserver, heisst also STORAGESERVER:

 # cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER
 # cd /usr/src/sys/amd64/conf
 # ln -s /root/STORAGESERVER .

   Jetzt kann /root/STORAGESERVER bearbeitet werden. Die Manualpage config(5)
   zeigt, wie Treiber und Optionen hinzugefu:gt oder entfernt werden.

   Der angepasste Kernel wird mit der Variablen KERNCONF, die auf die
   Kernelkonfigurationsdatei verweist, u:bersetzt:

 # make buildkernel KERNCONF=STORAGESERVER

  23.5.5. Installation des Codes

   Nachdem die Schritte buildworld und buildkernel abgeschlossen sind, wird
   der neue Kernel und die Welt installiert:

 # cd /usr/src
 # make installkernel
 # shutdown -r now
 # cd /usr/src
 # make installworld
 # shutdown -r now

   Wenn ein angepasster Kernel erstellt wurde, muss zusa:tzlich die Variable
   KERNCONF gesetzt werden:

 # cd /usr/src
 # make installkernel KERNCONF=STORAGESERVER
 # shutdown -r now
 # cd /usr/src
 # make installworld
 # shutdown -r now

  23.5.6. Die Aktualisierung abschliessen

   Ein paar abschliessende Aufgaben beenden die Aktualisierung. Alle
   Konfigurationsdateien werden mit den neuen Versionen zusammengefu:hrt,
   veraltete Bibliotheken werden entfernt, dann wird das System neu
   gestartet.

    23.5.6.1. Konfigurationsdateien mit mergemaster(8) zusammenfu:hren

   mergemaster(8) bietet einen einfachen Weg, um die Konfigurationsdateien
   des Systems mit den neuen Versionen dieser Dateien zusammenzufu:hren.

   Mit der Option -Ui aktualisiert mergemaster(8) automatisch Dateien, welche
   nicht vom Benutzer vera:ndert wurden und installiert neue Dateien, die
   noch nicht vorhanden sind:

 # mergemaster -Ui

   Wenn eine Datei manuell zusammengefu:hrt werden muss, erlaubt eine
   interaktive Anzeige, zu wa:hlen, welche Teile der Dateien beibehalten
   werden. Die Manualpage mergemaster(8) entha:lt weitere Informationen.

    23.5.6.2. Veraltete Dateien und Bibliotheken entfernen

   Nach einer Aktualisierung ko:nnen sich immer noch veraltete Dateien und
   Verzeichnisse im System befinden. Diese lassen sich mit folgendem Kommando
   auflisten:

 # make check-old

   und lo:schen:

 # make delete-old

   Einige veraltete Bibliotheken ko:nnen ebenfalls noch vorhanden sein. Diese
   werden mit folgenden Kommando aufgelistet:

 # make check-old-libs

   und wie folgt gelo:scht:

 # make delete-old-libs

   Programme, die diese alten Bibliotheken noch verwenden, werden nicht mehr
   funktionieren, wenn die Bibliothek gelo:scht wurde. Diese Programme
   mu:ssen nach dem Lo:schen der alten Bibliotheken neu gebaut oder ersetzt
   werden.

  Tipp:

   Wenn Sie sich sicher sind, dass alle Dateien und Verzeichnisse gelo:scht
   werden ko:nnen, dann setzen Sie BATCH_DELETE_OLD_FILES, um nicht jede
   einzelne Datei mit y und Enter besta:tigen zu mu:ssen. Zum Beispiel:

 # make BATCH_DELETE_OLD_FILES=yes delete-old-libs

    23.5.6.3. Neustart des Systems

   Zum Abschluss der Aktualisierung muss das System neu gestartet werden,
   damit alle A:nderungen wirksam werden:

 # shutdown -r now

23.6. Installation mehrerer Maschinen

   Beigetragen von Mike Meyer.

   Wenn Sie mehrere Maschinen auf dem gleichen Stand halten wollen, ist es
   eine Verschwendung von Ressourcen, die Quellen auf jeder Maschine
   vorzuhalten und zu u:bersetzen. Die Lo:sung dazu ist, eine Maschine den
   Grossteil der Arbeit durchfu:hren zu lassen und den anderen Maschinen das
   Ergebnis mit NFS zur Verfu:gung zu stellen. Dieser Abschnitt zeigt eine
   Methode dies zu tun. Weitere Informationen zu NFS finden Sie in
   Abschnitt 28.3, "Network File System (NFS)".

   Stellen Sie zuerst eine Liste der Maschinen zusammen, die auf demselben
   Stand sein sollen. Wir nennen diese Maschinen die Baugruppe. Jede dieser
   Maschinen kann mit einem eigenen Kernel laufen, doch sind die Programme
   des Userlands auf allen Maschinen gleich. Wa:hlen Sie aus der Baugruppe
   eine Maschine aus, auf der der Bau durchgefu:hrt wird, den Bau-Master.
   Dies sollte eine Maschine sein, die u:ber die no:tigen CPU-Ressourcen fu:r
   make buildworld und make installworld verfu:gt.

   Sie brauchen auch eine Testmaschine, auf der Sie die Updates testen, bevor
   Sie sie in Produktion installieren. Dies muss eine Maschine sein, die
   u:ber einen la:ngeren Zeitraum nicht zur Verfu:gung stehen kann.

   Alle Maschinen der Baugruppe mu:ssen /usr/obj und /usr/src u:ber NFS vom
   Bau-Master an gleichem Ort einha:ngen. Wenn Sie mehrere Baugruppen haben,
   sollte sich /usr/src auf einem Bau-Master befinden und u:ber NFS fu:r den
   Rest der Maschinen zur Verfu:gung gestellt werden.

   Stellen Sie sicher, dass /etc/make.conf und /etc/src.conf auf allen
   Maschinen einer Baugruppe mit der Datei des Bau-Masters u:bereinstimmt.
   Der Bau-Master muss jeden Teil des Systems bauen, den irgendeine Maschine
   der Baugruppe beno:tigt. Auf dem Bau-Master mu:ssen in /etc/make.conf alle
   zu bauenden Kernel mit der Variablen KERNCONF bekannt gegeben werden.
   Geben Sie dabei den Kernel des Bau-Masters zuerst an. Fu:r jeden zu
   bauenden Kernel muss auf dem Bau-Master die entsprechende
   Konfigurationsdatei unter /usr/src/sys/arch/conf abgelegt werden.

   Bauen Sie auf dem Bau-Master, wie in Abschnitt 23.5, "FreeBSD aus den
   Quellen aktualisieren" beschrieben, den Kernel und die Welt, installieren
   Sie aber nichts. Wechseln Sie auf die Testmaschine und installieren Sie
   den gerade gebauten Kernel. Ha:ngen Sie auf der Testmaschine /usr/src und
   /usr/obj u:ber NFS ein. Geben Sie dann shutdown now ein, um in den
   Single-User-Modus zu gelangen, von wo aus Sie den neuen Kernel und das
   System installieren. Lassen Sie anschliessend mergemaster laufen. Wenn Sie
   fertig sind, booten Sie die Maschine wieder in den Mehrbenutzermodus.

   Nachdem Sie sichergestellt haben, dass die Testmaschine einwandfrei
   funktioniert, wiederholen Sie diese Prozedur fu:r jede Maschine in der
   Baugruppe.

   Dasselbe Verfahren ko:nnen Sie auch fu:r die Ports-Sammlung anwenden.
   Zuerst mu:ssen alle Maschinen einer Baugruppe /usr/ports u:ber NFS zur
   Verfu:gung gestellt bekommen. Setzen Sie ein Verzeichnis fu:r die Quellen
   auf, das sich alle Maschinen teilen. Dieses Verzeichnis ko:nnen Sie in
   /etc/make.conf mit der Variablen DISTDIR angeben. Das Verzeichnis sollte
   fu:r den Benutzer beschreibbar sein, auf den der Benutzer root vom NFS
   Subsystem abgebildet wird. Jede Maschine sollte noch WRKDIRPREFIX auf ein
   lokales Bauverzeichnis setzen. Wenn Sie vorhaben, Pakete zu bauen und zu
   verteilen, sollten Sie PACKAGES auf ein Verzeichnis mit den gleichen
   Eigenschaften wie DISTDIR setzen.

Kapitel 24. DTrace

   Written by Tom Rhodes.
   U:bersetzt von Benedict Reuschling und Christoph Sold.
   Inhaltsverzeichnis

   24.1. U:berblick

   24.2. Unterschiede in der Implementierung

   24.3. Die DTrace Unterstu:tzung aktivieren

   24.4. DTrace verwenden

24.1. U:berblick

   DTrace, auch bekannt als Dynamic Tracing, wurde von Sun(TM) als ein
   Werkzeug zur Analyse von Performance-Problemen in Produktiv- und
   Entwicklungssystemen entwickelt. Zusa:tzlich zur Diagnose von
   Performance-Problemen kann DTrace auch verwendet werden, um bei der
   Untersuchung und Behebung von unerwartetem Verhalten im FreeBSD-Kernel und
   den Anwenderprogrammen zu helfen.

   DTrace ist ein bemerkenswertes Werkzeug zur Profilerstellung, mit einer
   beeindruckenden Palette von Eigenschaften zur Diagnose von
   Systemereignissen. Es kann auch dazu verwendet werden, bestehende Skripte
   ablaufen zu lassen, um einen Nutzen aus deren Mo:glichkeiten zu ziehen.
   Nutzer ko:nnen mittels der Programmiersprache D von DTrace ihre eigenen
   Hilfsmittel schreiben, was es ermo:glicht, die eigenen Profile nach Ihren
   Bedu:rfnissen anzupassen.

   Die DTrace-Implementierung in FreeBSD bietet experimentelle Unterstu:tzung
   fu:r DTrace im Userland. Userland DTrace erlaubt es Anwendern, function
   boundary tracing fu:r Anwendungsprogramme u:ber den pid-Provider hinweg
   vorzunehmen und um statische Sonden in Anwendungsprogramme fu:r die
   spa:tere Aufzeichnung einzufu:gen. Manche Ports, wie beispielsweise
   databases/postgres-server und lang/php56 besitzen eine DTrace-Option, um
   statische Sonden zu aktivieren. FreeBSD 10.0-RELEASE besitzt eine
   verha:ltnisma:ssig gute Unterstu:tzung fu:r DTrace im Anwendungsbereich,
   wird jedoch noch nicht als produktionsreif angesehen. Insbesondere ist es
   mo:glich, dass Programme wa:hrend der Aufzeichnung abstu:rzen.

   Eine offizielle Anleitung fu:r DTrace wird vom Illumos Projekt im DTrace
   Guide bereitgestellt.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

     * Was DTrace ist und welche Funktionen es zur Verfu:gung stellt.

     * Unterschiede zwischen der Solaris(TM) DTrace Implementierung und
       derjenigen, die FreeBSD bereitstellt.

     * Wie man DTrace auf FreeBSD aktiviert und verwendet.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * UNIX(R) und FreeBSD Grundlagen verstehen (Kapitel 3, Grundlagen des
       UNIX Betriebssystems).

     * Vertraut sein mit Sicherheitsaspekten und wie diese FreeBSD betreffen
       (Kapitel 13, Sicherheit).

  Warnung:

   Diese Funktion ist als experimentell anzusehen. Manche Einstellungen
   enthalten mo:glicherweise nicht alle Funktionalita:ten, andere Teile
   ko:nnten gar nicht laufen. Mit der Zeit, wenn diese Funktion als fu:r den
   Produktivbetrieb geeignet erscheint, wird auch diese Dokumentation
   gea:ndert, um diesem Umstand gerecht zu werden.

24.2. Unterschiede in der Implementierung

   Obwohl DTrace in FreeBSD sehr a:hnlich zu dem in Solaris(TM) ist,
   existieren doch Unterschiede. Der Hauptunterschied besteht darin, dass in
   FreeBSD DTrace als eine Menge von Kernelmodulen implementiert ist und
   DTrace nicht verwendet werden kann, bis diese Module geladen wurden. Um
   alle no:tigen Module zu laden, geben Sie ein:

 # kldload dtraceall

   Beginnend mit FreeBSD 10.0-RELEASE werden die Module automatisch geladen,
   sobald dtrace aufgerufen wird.

   FreeBSD verwendet die Kerneloption DDB_CTF, um die Unterstu:tzung im
   Kernel fu:r das Laden von CTF-Daten aus Kernelmodulen und dem Kernel
   selbst zu ermo:glichen. CTF ist das Compact C Type Format von Solaris(TM),
   welches eine reduzierte Form von Debug-Informationen kapselt, a:hnlich zu
   DWARF und den antiken Stabs. Diese CTF-Daten werden dem Bina:rcode von den
   ctfconvert und ctfmerge Befehlen den Werkzeugen zum Bauen des Systems
   hinzugefu:gt. Das ctfconvert-Dienstprogramm parst die vom Compiler
   erstellten DWARF ELF Debug-Abschnitte und ctfmerge vereint CTF
   ELF-Abschnitte aus Objekten, entweder in ausfu:hrbare Dateien oder
   Shared-Libraries.

   Einige Provider in FreeBSD unterscheiden sich von der
   Solaris(TM)-Implementierung. Am deutlichsten wird das beim
   dtmalloc-Provider, welcher das Aufzeichnen von malloc() nach Typen im
   FreeBSD-Kernel ermo:glicht. Manche der Provider in Solaris(TM) wie cpc und
   mib sind in FreeBSD nicht vorhanden. Diese ko:nnen in zuku:nftigen
   FreeBSD-Versionen auftauchen. Weiterhin sind manche der Provider in beiden
   Betriebssystemen nicht zueinander kompatibel, in dem Sinne dass deren
   Sonden unterschiedliche Argumenttypen aufweisen. Dadurch ko:nnen
   D-Skripte, die unter Solaris(TM) geschrieben wurden, evtl. unter FreeBSD
   funktionieren oder auch nicht, umgekehrt ist das genauso.

   In FreeBSD darf DTrace wegen unterschiedlicher Sicherheitskonzepte nur von
   root verwendet werden. Solaris(TM) besitzt ein paar Audit-Funktionen auf
   den unteren Ebenen, die noch nicht in FreeBSD implementiert sind. Deshalb
   kann nur root auf /dev/dtrace/dtrace zugreifen.

   Zum Schluss muss noch erwa:hnt werden, dass die DTrace-Software unter die
   CDDL Lizenz fa:llt. Die Common Development and Distribution License wird
   von FreeBSD mitgeliefert, sehen Sie sich dazu
   /usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE an, oder lesen Sie
   die Online-Version unter http://opensource.org/licenses/CDDL-1.0. Wa:hrend
   der FreeBSD-Kernel mit den DTrace-Optionen immer noch BSD-lizenziert ist,
   tritt die CDDL in Kraft, wenn Module in Bina:rform vertrieben werden oder
   die Bina:rdateien geladen werden.

24.3. Die DTrace Unterstu:tzung aktivieren

   In FreeBSD 9.2 und 10.0 ist die Unterstu:tzung von DTrace im
   GENERIC-Kernel bereits eingebaut. Nutzer von fru:heren Versionen sollten
   die folgenden Zeilen in eine eigene Kernelkonfigurationsdatei einfu:gen
   und den Kernel mittels der Anleitung in Kapitel 8, Konfiguration des
   FreeBSD-Kernels neu u:bersetzen:

 options         KDTRACE_HOOKS
 options         DDB_CTF
 makeoptions         DEBUG=-g
 makeoptions         WITH_CTF=1

   Besitzer der AMD64-Architektur werden wahrscheinlich noch die folgende
   Zeile zur Kernelkonfigurationsdatei hinzufu:gen:

 options         KDTRACE_FRAME

   Diese Option liefert die Unterstu:tzung fu:r die FBT-Eigenschaft. DTrace
   wird auch ohne diese Option funktionieren; jedoch wird dann Function
   Boundary Tracing nur eingeschra:nkt unterstu:tzt.

   Sobald FreeBSD in den neuen Kernel gebootet oder die DTrace-Kernelmodule
   mittels kldload dtraceall geladen wurden, beno:tigt das System
   Unterstu:tzung fu:r die Korn-Shell, da DTrace mehrere Dienstprogramme
   entha:lt, die in ksh implementiert sind. Vergewissern Sie sich, dass das
   Paket oder der Port shells/ksh93 installiert ist. Es ist auch mo:glich,
   diese Werkzeuge unter shells/pdksh oder shells/mksh laufen zu lassen.

   Zum Schluss sollten Sie noch den aktuellen DTrace-Werkzeugsatz beschaffen.
   Die DTrace-Werkzeugsammlung entha:lt gebrauchsfertige Skripte, um
   Systeminformationen zu sammeln. Es gibt Skripte zum U:berpru:fen von
   offenen Dateien, Speicher- und CPU-Gebrauch und noch viel mehr. FreeBSD 10
   installiert ein paar dieser Skripte in /usr/share/dtrace. Fu:r andere
   FreeBSD-Versionen oder um die volle DTrace-Werkzeugsammlung zu
   installieren, verwenden Sie den sysutils/DTraceToolkit Port oder das
   Paket.

  Anmerkung:

   Die Skripte in /usr/share/dtrace wurden speziell fu:r FreeBSD portiert.
   Nicht alle Skripte in der DTrace-Werkzeugsammlung werden in FreeBSD
   unvera:ndert funktionieren und manche Skript beno:tigen einigen Aufwand,
   damit diese auf FreeBSD funktionieren.

   Der DTrace-Werkzeugsatz beinhaltet viele Skripte in der speziellen Sprache
   von DTrace. Diese Sprache wird die D-Sprache genannt und ist sehr a:hnlich
   zu C++. Eine detaillierte Beschreibung dieser Sprache wu:rde den Rahmen
   dieses Dokuments sprengen. In
   http://wikis.oracle.com/display/DTrace/Documentation wird diese Sprache
   ausfu:hrlich beschrieben.

24.4. DTrace verwenden

   DTrace-Skripte bestehen aus einer Liste von einer oder mehreren Sonden
   oder Instrumentationspunkten, an denen jede Sonde mit einer Aktion
   verknu:pft ist. Jedesmal, wenn die Bedingung fu:r eine Sonde zutrifft,
   wird die verknu:pfte Aktion ausgefu:hrt. Beispielsweise ko:nnte eine
   Aktion ausgefu:hrt werden, wenn eine Datei geo:ffnet, ein Prozess
   gestartet oder eine Codezeile ausgefu:hrt wird. Die Aktion ko:nnte die
   Protokollierung von Informationen sein oder die A:nderung von
   Kontextvariablen. Das Lesen und Schreiben von Kontextvariablen erlaubt es
   den Sonden, Informationen auszutauschen und kooperativ die Korrelation
   bestimmter Ereignisse zu analysieren.

   Um alle Sonden anzuzeigen, kann der Administrator nun den folgenden Befehl
   eingeben:

 # dtrace -l | more

   Jede Sonde besitzt eine ID, einen PROVIDER (dtrace oder fbt), ein MODULE
   und einen FUNCTION NAME. Lesen Sie dtrace(1) fu:r weitere Informationen zu
   diesem Kommando.

   Die Beispiele in diesem Abschnitt geben einen U:berblick, wie man zwei
   dieser voll funktionsfa:higen Skripte aus der DTrace-Werkzeugsammlung
   verwendet: die Skripte hotkernel und procsystime.

   Das hotkernel Skript wurde entworfen, um zu identifizieren, welche
   Funktion die meiste Kernelzeit beansprucht. Es wird es Ausgaben a:hnlich
   der Folgenden produzieren:

 # cd /usr/share/dtrace/toolkit
 # ./hotkernel
 Sampling... Hit Ctrl-C to end.

   Verwenden Sie wie angegeben die Tastenkombination Ctrl+C dru:cken, um den
   Prozess zu stoppen. Nach dem Abbruch wird das Skript eine Liste von
   Kernelfunktionen und Zeitmessungen ausgeben, aufsteigend sortiert nach den
   Zeiten:

 kernel`_thread_lock_flags                                   2   0.0%
 0xc1097063                                                  2   0.0%
 kernel`sched_userret                                        2   0.0%
 kernel`kern_select                                          2   0.0%
 kernel`generic_copyin                                       3   0.0%
 kernel`_mtx_assert                                          3   0.0%
 kernel`vm_fault                                             3   0.0%
 kernel`sopoll_generic                                       3   0.0%
 kernel`fixup_filename                                       4   0.0%
 kernel`_isitmyx                                             4   0.0%
 kernel`find_instance                                        4   0.0%
 kernel`_mtx_unlock_flags                                    5   0.0%
 kernel`syscall                                              5   0.0%
 kernel`DELAY                                                5   0.0%
 0xc108a253                                                  6   0.0%
 kernel`witness_lock                                         7   0.0%
 kernel`read_aux_data_no_wait                                7   0.0%
 kernel`Xint0x80_syscall                                     7   0.0%
 kernel`witness_checkorder                                   7   0.0%
 kernel`sse2_pagezero                                        8   0.0%
 kernel`strncmp                                              9   0.0%
 kernel`spinlock_exit                                       10   0.0%
 kernel`_mtx_lock_flags                                     11   0.0%
 kernel`witness_unlock                                      15   0.0%
 kernel`sched_idletd                                       137   0.3%
 0xc10981a5                                              42139  99.3%

   Dieses Skript funktioniert auch mit Kernelmodulen. Um diese Eigenschaft zu
   verwenden, starten Sie das Skript mit -m:

 # ./hotkernel -m
 Sampling... Hit Ctrl-C to end.
 ^C
 MODULE                                                  COUNT   PCNT
 0xc107882e                                                  1   0.0%
 0xc10e6aa4                                                  1   0.0%
 0xc1076983                                                  1   0.0%
 0xc109708a                                                  1   0.0%
 0xc1075a5d                                                  1   0.0%
 0xc1077325                                                  1   0.0%
 0xc108a245                                                  1   0.0%
 0xc107730d                                                  1   0.0%
 0xc1097063                                                  2   0.0%
 0xc108a253                                                 73   0.0%
 kernel                                                    874   0.4%
 0xc10981a5                                             213781  99.6%

   Das procsystime Skript fa:ngt die Systemaufruf-Zeiten fu:r eine gegebene
   Prozess-ID (PID) oder einen Prozessnamen ab und gibt diese aus. Im
   folgenden Beispiel wurde eine neue Instanz von /bin/csh erzeugt. Dann
   wurde procsystime ausgefu:hrt und verbleibt so, wa:hrend ein paar Befehle
   in die andere Instanz von csh eingegeben werden. Dies sind die Ergebnisse
   dieses Versuchs:

 # ./procsystime -n csh
 Tracing... Hit Ctrl-C to end...
 ^C

 Elapsed Times for processes csh,

          SYSCALL          TIME (ns)
           getpid               6131
        sigreturn               8121
            close              19127
            fcntl              19959
              dup              26955
          setpgid              28070
             stat              31899
        setitimer              40938
            wait4              62717
        sigaction              67372
      sigprocmask             119091
     gettimeofday             183710
            write             263242
           execve             492547
            ioctl             770073
            vfork            3258923
       sigsuspend            6985124
             read         3988049784

   Wie aus der Ausgabe ersichtlich ist, verbraucht der read()-Systemaufruf
   die meiste Zeit in Nanosekunden, wa:hrend der Systemaufruf getpid()
   hingegen am schnellsten la:uft.

                               Teil IV. Netzwerke

   FreeBSD ist eins der meist benutzten Betriebssysteme fu:r leistungsfa:hige
   Netzwerkserver. Die Kapitel in diesem Teil behandeln die nachstehenden
   Themen:

     * Serielle Datenu:bertragung

     * PPP und PPP over Ethernet

     * Elektronische Post (E-Mail)

     * Den Betrieb von Netzwerkdiensten

     * Firewalls

     * Weiterfu:hrende Netzwerkthemen

   Diese Kapitel sollten Sie lesen, wenn Sie die Informationen darin
   beno:tigen. Sie brauchen die Kapitel nicht in einer bestimmten Reihenfolge
   zu lesen, noch mu:ssen Sie die Kapitel lesen, bevor Sie anfangen, FreeBSD
   in einer Netzwerkumgebung zu benutzen.

   Inhaltsverzeichnis

   25. Serielle Datenu:bertragung

                25.1. U:bersicht

                25.2. Begriffe und Hardware

                25.3. Terminals

                25.4. Einwa:hlverbindungen

                25.5. Verbindungen nach Aussen

                25.6. Einrichten der seriellen Konsole

   26. PPP

                26.1. U:bersicht

                26.2. PPP konfigurieren

                26.3. Probleme bei PPP-Verbindungen

                26.4. PPP over Ethernet (PPPoE)

                26.5. PPP over ATM (PPPoA)

   27. Elektronische Post (E-Mail)

                27.1. Terminologie

                27.2. U:bersicht

                27.3. E-Mail Komponenten

                27.4. Sendmail-Konfigurationsdateien

                27.5. Wechseln des Mailu:bertragungs-Agenten

                27.6. Fehlerbehebung

                27.7. Weiterfu:hrende Themen

                27.8. Ausgehende E-Mail u:ber einen Relay versenden

                27.9. E-Mail u:ber Einwahl-Verbindungen

                27.10. SMTP-Authentifizierung

                27.11. E-Mail-Programme

                27.12. E-Mails mit fetchmail abholen

                27.13. E-Mails mit procmail filtern

   28. Netzwerkserver

                28.1. U:bersicht

                28.2. Der inetd "Super-Server"

                28.3. Network File System (NFS)

                28.4. Network Information System (NIS)

                28.5. Lightweight Access Directory Protocol (LDAP)

                28.6. Dynamic Host Configuration Protocol (DHCP)

                28.7. Domain Name System (DNS)

                28.8. Apache HTTP-Server

                28.9. File Transfer Protocol (FTP)

                28.10. Datei- und Druckserver fu:r
                Microsoft(R) Windows(R)-Clients (Samba)

                28.11. Die Uhrzeit mit NTP synchronisieren

                28.12. iSCSI Initiator und Target Konfiguration

   29. Firewalls

                29.1. Einfu:hrung

                29.2. Firewallkonzepte

                29.3. PF

                29.4. IPFW

                29.5. IPFILTER (IPF)

   30. Weiterfu:hrende Netzwerkthemen

                30.1. U:bersicht

                30.2. Gateways und Routen

                30.3. Drahtlose Netzwerke

                30.4. USB Tethering

                30.5. Bluetooth

                30.6. LAN-Kopplung mit einer Bridge

                30.7. Link-Aggregation und Failover

                30.8. Plattenloser Betrieb mit PXE

                30.9. IPv6

                30.10. Common Address Redundancy Protocol (CARP)

                30.11. VLANs

Kapitel 25. Serielle Datenu:bertragung

   U:bersetzt von Martin Heinen.
   Inhaltsverzeichnis

   25.1. U:bersicht

   25.2. Begriffe und Hardware

   25.3. Terminals

   25.4. Einwa:hlverbindungen

   25.5. Verbindungen nach Aussen

   25.6. Einrichten der seriellen Konsole

25.1. U:bersicht

   UNIX(R) Systeme unterstu:tzten schon immer die serielle Datenu:bertragung.
   Tatsa:chlich wurden Ein- und Ausgaben auf den ersten UNIX(R) Maschinen
   u:ber serielle Leitungen durchgefu:hrt. Seit der Zeit, in der ein
   durchschnittlicher Terminal aus einem seriellen Drucker mit
   10 Zeichen/Sekunde und einer Tastatur bestand, hat sich viel vera:ndert.
   Dieses Kapitel behandelt einige Mo:glichkeiten, serielle Datenu:bertragung
   unter FreeBSD zu verwenden.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

     * Wie Sie Terminals an ein FreeBSD-System anschliessen.

     * Wie Sie sich mit einem Modem auf entfernte Rechner einwa:hlen.

     * Wie Sie entfernten Benutzern erlauben, sich mit einem Modem in ein
       FreeBSD-System einzuwa:hlen.

     * Wie Sie ein FreeBSD-System u:ber eine serielle Konsole booten.

   Bevor Sie dieses Kapitel lesen, sollten Sie

     * einen angepassten Kernel konfigurieren und installieren ko:nnen.

     * Berechtigungen und Prozesse unter FreeBSD verstehen.

     * Zugriff auf die Handbu:cher der seriellen Komponenten haben, die mit
       FreeBSD verwendet werden sollen.

25.2. Begriffe und Hardware

   Die folgenden Begriffe werden oft verwendet, wenn es um serielle
   Kommunikation geht:

   bps

           Bits pro Sekunde (bps) ist die Einheit fu:r die
           U:bertragungsgeschwindigkeit.

   DEE (DTE)

           Eine Datenendeinrichtung (Data Terminal Equipment) ist einer der
           beiden Endpunkte bei der seriellen Kommunikation. Zum Beispiel ein
           Computer.

   DU:E (DCE)

           Datenu:bertragungseinrichtung (Data Communications Equipment) ist
           der andere Endpunkt bei der seriellen Kommunikation.
           Typischerweise ein Modem.

   RS-232

           Der originale Standard, der serielle Datenu:bertragung definiert.
           Er wird heutzutage als TIA-232 bezeichnet.

   In diesem Abschnitt wird der Begriff "Baud" nicht fu:r
   U:bertragungsgeschwindigkeiten gebraucht. Baud bezeichnet elektrische
   Zustandswechsel pro Zeiteinheit, die Taktfrequenz, wa:hrend "bps" der
   richtige Begriff fu:r die U:bertragungsgeschwindigkeit ist.

   Um ein Modem oder einen Terminal an ein FreeBSD-System anzuschliessen,
   muss der Computer u:ber eine serielle Schnittstelle verfu:gen. Zusa:tzlich
   wird das passende Kabel beno:tigt, um das Gera:t mit der Schnittstelle zu
   verbinden. Benutzer, die mit seriellen Gera:ten und den no:tigen Kabeln
   schon vertraut sind, ko:nnen diesen Abschnitt u:berspringen.

  25.2.1. Kabel und Schnittstellen

   Es gibt verschiedene serielle Kabel. Die zwei ha:ufigsten sind
   Nullmodemkabel und Standard-RS-232-Kabel. Die Dokumentation der Hardware
   sollte beschreiben, welcher Kabeltyp beno:tigt wird.

   Ein Nullmodemkabel verbindet einige Signale, wie die Betriebserde, eins zu
   eins, andere Signale werden getauscht: Die Sende- und Empfangsleitungen
   werden zum Beispiel gekreuzt.

   Nullmodemkabel fu:r die Anbindung eines Terminals ko:nnen auch selbst
   hergestellt werden. Die folgende Tabelle entha:lt die Signalnamen von
   RS-232C sowie die Pinbelegung fu:r einen Stecker vom Typ DB-25. Obwohl der
   Standard eine direkte Verbindung von Pin 1 zu Pin 1 (Protective Ground)
   vorschreibt, ist diese in vielen Fa:llen nicht vorhanden. Einige Terminals
   beno:tigen nur die Pins 2, 3 und 7 fu:r eine korrekte Funktion, wa:hrend
   andere eine unterschiedliche Konfiguration als die in den folgenden
   Beispielen gezeigte beno:tigen.

   Tabelle 25.1. Nullmodemkabel vom Typ DB-25-zu-DB-25

   Signal        Pin #                             Pin #        Signal        
   SG            7            verbunden mit        7            SG            
   TD            2            verbunden mit        3            RD            
   RD            3            verbunden mit        2            TD            
   RTS           4            verbunden mit        5            CTS           
   CTS           5            verbunden mit        4            RTS           
   DTR           20           verbunden mit        6            DSR           
   DTR           20           verbunden mit        8            DCD           
   DSR           6            verbunden mit        20           DTR           
   DCD           8            verbunden mit        20           DTR           

   Die folgenden zwei Schemata werden heutzutage ebenfalls ha:ufig
   eingesetzt:

   Tabelle 25.2. Nullmodemkabel vom Typ DB-9-zu-DB-9

   Signal        Pin #                             Pin #        Signal        
   RD            2            verbunden mit        3            TD            
   TD            3            verbunden mit        2            RD            
   DTR           4            verbunden mit        6            DSR           
   DTR           4            verbunden mit        1            DCD           
   SG            5            verbunden mit        5            SG            
   DSR           6            verbunden mit        4            DTR           
   DCD           1            verbunden mit        4            DTR           
   RTS           7            verbunden mit        8            CTS           
   CTS           8            verbunden mit        7            RTS           

   Tabelle 25.3. Nullmodemkabel vom Typ DB-9-zu-DB-25

   Signal        Pin #                             Pin #        Signal        
   RD            2            verbunden mit        2            TD            
   TD            3            verbunden mit        3            RD            
   DTR           4            verbunden mit        6            DSR           
   DTR           4            verbunden mit        8            DCD           
   SG            5            verbunden mit        7            SG            
   DSR           6            verbunden mit        20           DTR           
   DCD           1            verbunden mit        20           DTR           
   RTS           7            verbunden mit        5            CTS           
   CTS           8            verbunden mit        4            RTS           

  Anmerkung:

   Wird ein Pin eines Kabels mit zwei Pins des anderen Kabels verbunden,
   werden dazu in der Regel zuerst die beiden Pins mit einem kurzem Draht
   verbunden. Danach wird dieser Draht mit dem Pin des anderen Endes
   verbunden.

   Die eben besprochenen Schemata scheinen die beliebtesten zu sein. Weitere
   Varianten verbinden SG mit SG, TD mit RD, RTS und CTS mit DCD, DTR mit
   DSR, und umgekehrt.

   Ein Standard-RS-232C-Kabel verbindet alle Signale direkt. Das Signal
   "Transmitted Data" wird mit dem Signal "Transmitted Data" der Gegenstelle
   verbunden. Dieses Kabel wird beno:tigt, um ein Modem mit einem
   FreeBSD-System zu verbinden. Manche Terminals beno:tigen dieses Kabel
   ebenfalls.

   U:ber serielle Schnittstellen werden Daten zwischen dem FreeBSD-System und
   dem Terminal u:bertragen. Dieser Abschnitt beschreibt die verschiedenen
   Schnittstellen und wie sie unter FreeBSD angesprochen werden.

   Da es verschiedene Schnittstellen gibt, sollte vor dem Kauf oder Selbstbau
   eines Kabels sichergestellt werden, dass dieses zu den Schnittstellen des
   Terminals und des FreeBSD-Systems passt.

   Die meisten Terminals besitzen DB-25-Stecker. Personal Computer haben
   DB-25- oder DB-9-Stecker. Eine serielle Multiportkarte hat vielleicht
   RJ-12- oder RJ-45-Anschlu:sse.

   Die Dokumentation der Gera:te sollte Aufschluss u:ber den Typ der
   beno:tigten Anschlu:sse geben. Oft hilft es, wenn Sie sich den Anschluss
   einfach ansehen.

   Unter FreeBSD wird jede serielle Schnittstelle (Port) u:ber einen Eintrag
   in /dev angesprochen. Es gibt dort zwei verschiedene Eintra:ge:

     * Schnittstellen fu:r eingehende Verbindungen werden /dev/ttyuN genannt.
       Dabei ist N die Nummer der Schnittstelle, deren Za:hlung bei Null
       beginnt. Allgemein wird diese Schnittstelle fu:r Terminals benutzt.
       Diese Schnittstelle funktioniert nur, wenn ein "Data Carrier Detect"
       Signal (DCD) vorliegt.

     * Fu:r ausgehende Verbindungen wird in FreeBSD 8.X und neueren Versionen
       /dev/cuauN verwendet. FreeBSD 7.X und a:ltere Versionen verwenden
       /dev/cuadN. Dieser Port wird normalerweise nur von Modems genutzt. Er
       kann allerdings auch fu:r Terminals benutzt werden, die das "Data
       Carrier Detect" Signal nicht unterstu:tzen.

   Wenn ein Terminal an die erste serielle Schnittstelle (COM1) angeschlossen
   ist, wird er u:ber /dev/ttyu0 angesprochen. Wenn er an der zweiten
   seriellen Schnittstelle (COM2) angeschlossen ist, verwenden Sie
   /dev/ttyu1, usw.

  25.2.2. Kernelkonfiguration

   In der Voreinstellung benutzt FreeBSD vier serielle Schnittstellen, die
   unter MS-DOS(R) als COM1, COM2, COM3 und COM4 bekannt sind. Momentan
   unterstu:tzt FreeBSD einfache Multiportkarten, wie bspw. die BocaBoard
   1008 und 2016 und bessere wie die von Digiboard und Stallion Technologies.
   In der Voreinstellung sucht der Kernel allerdings nur nach den
   Standardanschlu:ssen.

   Um zu u:berpru:fen, ob der Kernel die seriellen Schnittstellen erkennt,
   achten Sie auf die Meldungen beim Booten, oder schauen sich diese spa:ter
   mit /sbin/dmesg an. Achten Sie auf Meldungen die mit uart beginnen:

 # /sbin/dmesg | grep 'uart'

   Wenn der Kernel nicht alle seriellen Schnittstellen erkennt, mu:ssen Sie
   /boot/device.hints konfigurieren. Wenn Sie diese Datei editieren, ko:nnen
   Sie die Eintra:ge fu:r Gera:te, die auf dem System nicht vorhanden sind,
   auskommentieren oder komplett entfernen.

  Anmerkung:

   port IO_COM1 ist ein Ersatz fu:r port 0x3f8, IO_COM2 bedeutet port 0x2f8,
   IO_COM3 bedeutet port 0x3e8 und IO_COM4 steht fu:r port 0x2e8. Die
   angegebenen IO-Adressen sind genau wie die Interrupts 4, 3, 5 und 9
   u:blich fu:r serielle Schnittstellen. Beachten Sie, dass sich normale
   serielle Schnittstellen auf ISA-Bussen keine Interrupts teilen ko:nnen.
   Multiportkarten besitzen zusa:tzliche Schaltkreise, die es allen 16550As
   auf der Karte erlauben, sich einen oder zwei Interrupts zu teilen.

  25.2.3. Gera:tedateien

   Die meisten Gera:te im Kernel werden durch Gera:tedateien in /dev
   angesprochen. Die sio Gera:te werden durch /dev/ttyuN fu:r eingehende
   Verbindungen und durch /dev/cuauN fu:r ausgehende Verbindungen
   angesprochen. Zum Initialisieren der Gera:te stellt FreeBSD die Dateien
   /dev/ttyuN.init und /dev/cuauN.init zur Verfu:gung. Zusa:tzlich existieren
   Dateien fu:r das Sperren von Gera:tedateien (Locking). Dabei handelt es
   sich um die Dateien /dev/ttyuN.lock und /dev/cuauN.lock. Diese Dateien
   werden benutzt, um Kommunikationsparameter beim O:ffnen eines Ports
   vorzugeben. Fu:r Modems, die zur Flusskontrolle RTS/CTS benutzen, kann
   damit crtscts gesetzt werden. Die Gera:te /dev/ttyldN und /dev/cualaN
   (locking devices) werden genutzt, um bestimmte Parameter festzuschreiben
   und vor Vera:nderungen zu schu:tzen. Weitere Informationen zu Terminals
   finden Sie in termios(4), sio(4) erkla:rt die Dateien zum Initialisieren
   und Sperren der Gera:te, stty(1) beschreibt schliesslich
   Terminal-Einstellungen.

  25.2.4. Konfiguration der seriellen Schnittstelle

   Anwendungen benutzen normalerweise die Gera:te ttyuN oder cuauN. Das
   Gera:t besitzt einige Voreinstellungen fu:r Terminal-I/O, wenn es von
   einem Prozess geo:ffnet wird. Mit dem folgenden Kommando ko:nnen Sie sich
   diese Einstellungen ansehen:

 # stty -a -f /dev/ttyu1

   Wenn diese Einstellungen vera:ndert werden, bleiben sie nur solange
   wirksam, bis das Gera:t geschlossen wird. Wenn das Gera:t danach wieder
   geo:ffnet wird, sind die Voreinstellungen wieder wirksam. Um die
   Voreinstellungen dauerhaft zu a:ndern, o:ffnen Sie das Gera:t, das zum
   Initialisieren dient und vera:ndern dessen Einstellungen. Um
   beispielsweise fu:r ttyu5 den CLOCAL Modus, 8-Bit Kommunikation und
   XON/XOFF Flusssteuerung einzuschalten, setzen Sie das folgende Kommando
   ab:

 # stty -f /dev/ttyu5.init clocal cs8 ixon ixoff

   In /etc/rc.d/rc.serial werden die systemweiten Voreinstellungen fu:r
   serielle Gera:te vorgenommen.

   Um zu verhindern, dass Einstellungen von Anwendungen vera:ndert werden,
   ko:nnen Sie die Gera:te zum Festschreiben von Einstellungen ("locking
   devices") benutzen. Wenn sie beispielsweise die Geschwindigkeit von ttyu5
   auf 57600 bps festlegen wollen, benutzen Sie das folgende Kommando:

 # stty -f /dev/ttyld5 57600

   Eine Anwendung, die ttyu5 o:ffnet, kann nun nicht mehr die Geschwindigkeit
   a:ndern und muss 57600 bps benutzen.

   Die Gera:te zum Initialisieren und Festschreiben von Einstellungen sollten
   selbstversta:ndlich nur von root beschreibbar sein.

25.3. Terminals

   Beigetragen von Sean Kelly.

   Wenn Sie sich nicht an der Konsole oder u:ber ein Netzwerk an ein
   FreeBSD-System anmelden ko:nnen, sind Terminals ein bequemer und
   kostengu:nstiger Weg, um auf ein System zuzugreifen. Dieser Abschnitt
   beschreibt wie Sie Terminals mit FreeBSD benutzen.

   Das urspru:ngliche UNIX(R) System besass keine Konsolen. Zum Anmelden und
   Starten von Programmen wurden stattdessen Terminals benutzt, die an den
   seriellen Schnittstellen des Rechners angeschlossen waren.

   Die Mo:glichkeit, u:ber eine serielle Schnittstelle eine Anmeldesitzung
   herzustellen, existiert heute noch in fast jedem UNIX(R)-artigen
   Betriebssystem, einschliesslich FreeBSD. Der Einsatz eines Terminals, das
   an einem freien seriellen Port angeschlossen ist, ermo:glicht es dem
   Benutzer sich anzumelden und dort jedes Textprogramm zu starten, das
   normalerweise an der Konsole oder in einem xterm Fenster ausgefu:hrt wird.

   Viele Terminals ko:nnen an einem FreeBSD-System angeschlossen werden. Ein
   alter Computer kann als Terminal an ein leistungsfa:higes FreeBSD-System
   angeschlossen werden. Damit kann ein Einzelarbeitsplatz in ein
   leistungsfa:higes Mehrbenutzersystem verwandelt werden.

   FreeBSD unterstu:tzt drei Arten von Anschlu:ssen:

   Dumb-Terminals

           Dumb-Terminals (unintelligente Datenstationen) sind Gera:te, die
           u:ber die serielle Schnittstelle mit einem Rechner verbunden
           werden. Sie werden "unintelligent" genannt, weil sie nur Text
           senden und empfangen und keine Programme laufen lassen ko:nnen.
           Alle beno:tigten Programme befinden sich auf dem Rechner, der mit
           dem Terminal verbunden ist.

           Es gibt viele Dumb-Terminals, die von verschiedenen Herstellern
           produziert werden, und so gut wie jeder der verschiedenen
           Terminals sollte mit FreeBSD zusammenarbeiten. Manche High-End
           Gera:te verfu:gen sogar u:ber Grafikfa:higkeiten, die allerdings
           nur von spezieller Software genutzt werden kann.

           Dumb-Terminals sind in Umgebungen beliebt, in denen keine
           Grafikanwendungen beno:tigt werden.

   Computer, die als Terminal fungieren

           Jeder Computer kann die Funktion eines Dumb-Terminals, der ja nur
           Text senden und empfangen kann, u:bernehmen. Dazu wird lediglich
           das richtige Kabel beno:tigt und eine Terminalemulation, die auf
           dem Computer la:uft.

           Diese Konfiguration ist sehr nu:tzlich. Wenn ein Benutzer zum
           Beispiel gerade an der FreeBSD-Konsole arbeitet, kann ein anderer
           Benutzer einen weniger leistungsstarken Computer, der als Terminal
           mit dem FreeBSD-System verbunden ist, benutzen, um dort
           gleichzeitig im Textmodus zu arbeiten.

           Bereits im Basissystem sind mindestens zwei Werkzeuge vorhanden,
           die Sie zur Arbeit u:ber eine serielle Konsole einsetzen ko:nnen:
           cu(1) sowie tip(1).

           Um sich von einem FreeBSD-System aus u:ber eine serielle
           Verbindung mit einem anderen System zu verbinden, geben Sie
           folgenden Befehl ein:

 # cu -l serial-port-device

           Ersetzen Sie "serial-port-device" mit dem Namen der Gera:tedatei,
           der einer bestimmten seriellen Schnittstelle zugewiesen ist. Unter
           FreeBSD 10.x und neueren Versionen werden die Gera:tedateien
           /dev/cuauN verwendet. Mit FreeBSD 9.x und a:lteren Versionen wird
           hingegen /dev/cuadN verwendet. In beiden Fa:llen muss N durch die
           Nummer des seriellen Ports ersetzt werden. Beachten Sie, dass die
           Numerierung mit Null und nicht mit Eins beginnt.

           In der Ports-Sammlung finden sich weitere Programme, wie
           beispielsweise comms/minicom, mit denen eine Verbindung u:ber eine
           serielle Schnittstelle hergestellt werden kann.

   X-Terminals

           X-Terminals sind die ausgereiftesten der verfu:gbaren Terminals.
           Sie werden nicht mit der seriellen Schnittstelle sondern mit einem
           Netzwerk, wie dem Ethernet, verbunden. Diese Terminals sind auch
           nicht auf den Textmodus beschra:nkt, sondern ko:nnen jede
           Xorg-Anwendung darstellen.

           Die Einrichtung und Verwendung von X-Terminals wird in diesem
           Abschnitt nicht beschrieben.

  25.3.1. Konfiguration

   Dieser Abschnitt beschreibt, wie Sie ein FreeBSD-System konfigurieren
   mu:ssen, um sich an einem Terminal anzumelden. Dabei wird vorausgesetzt,
   dass der Kernel bereits die serielle Schnittstelle, die mit dem Terminal
   verbunden ist, unterstu:tzt. Weiterhin sollte der Terminal schon
   angeschlossen sein.

   Der init Prozess ist fu:r das Initialisieren des Systems und den Start von
   Prozessen zum Zeitpunkt des Systemstarts verantwortlich. Unter anderem
   liest init /etc/ttys ein und startet fu:r jeden verfu:gbaren Terminal
   einen getty Prozess. getty wiederum fragt beim Anmelden den Benutzernamen
   ab und startet login.

   Um Terminals auf einem FreeBSD-System einzurichten, fu:hren Sie folgenden
   Schritte als root durch:

    1. Fu:gen Sie einen Eintrag in /etc/ttys fu:r die serielle Schnittstelle
       aus /dev ein, falls dieser nicht bereits vorhanden ist.

    2. Geben Sie /usr/libexec/getty als auszufu:hrendes Programm an. Als
       Parameter fu:r getty geben Sie den passenden Verbindungstyp aus
       /etc/gettytab an.

    3. Geben Sie den Terminaltyp an.

    4. Aktivieren Sie den Anschluss.

    5. Geben Sie die Sicherheit des Anschlusses an.

    6. Veranlassen Sie init /etc/ttys erneut zu lesen.

   Optional ko:nnen Sie in /etc/gettytab auch einen auf Ihre Zwecke
   angepassten Terminaltyp erstellen. gettytab(5) und getty(8) enthalten dazu
   weitere Informationen.

    25.3.1.1. Hinzufu:gen eines Eintrags in /etc/ttys

   In /etc/ttys werden alle Terminals aufgefu:hrt, an denen eine Anmeldung
   auf dem FreeBSD-System mo:glich ist. Hier findet sich zum Beispiel ein
   Eintrag fu:r die erste virtuelle Konsole /dev/ttyv0, der es Benutzern
   ermo:glicht, sich dort anzumelden. Die Datei entha:lt weitere Eintra:ge
   fu:r andere virtuelle Konsolen, serielle Schnittstellen und
   Pseudoterminals. Um einen Terminal zu konfigurieren, fu:gen Sie einen
   Eintrag fu:r den Namen des Gera:tes aus /dev ohne das Pra:fix /dev hinzu.
   Zum Beispiel wird /dev/ttyv0 als ttyv0 aufgefu:hrt.

   In der Voreinstellung entha:lt /etc/ttys Eintra:ge fu:r die ersten vier
   seriellen Schnittstellen: ttyu0 bis ttyu3. Wird an eine von diesen
   Schnittstellen ein Terminal angeschlossen, braucht in dieser Datei kein
   weiter Eintrag hinzugefu:gt werden.

   Beispiel 25.1. Eintra:ge in /etc/ttys hinzufu:gen

   Dieses Beispiel konfiguriert zwei Terminals: Einen Wyse-50 und einen alten
   286 IBM PC, der mit Procomm einen VT-100 Terminal emuliert. Der
   Wyse-Terminal ist mit der zweiten seriellen Schnittstelle verbunden und
   der 286 mit der sechsten seriellen Schnittstelle, einem Anschluss auf
   einer Multiportkarte. Die entsprechenden Eintra:ge in /etc/ttys wu:rden
   dann wie folgt aussehen:

 ttyu11  "/usr/libexec/getty std.38400"2  wy503  on4  insecure5
 ttyu5   "/usr/libexec/getty std.19200"  vt100  on  insecure
          

   1 Das erste Feld gibt normalerweise den Namen der Gera:tedatei aus /dev    
     an.                                                                      
   2 Im zweiten Feld wird das auszufu:hrende Kommando, normal ist das         
     getty(8), angegeben. getty initialisiert und o:ffnet die Verbindung,     
     setzt die Geschwindigkeit und fragt den Benutzernamen ab. Danach fu:hrt  
     es login(1) aus.                                                         
                                                                              
     getty akzeptiert einen optionalen Parameter auf der Kommandozeile, den   
     Verbindungstyp, der die Eigenschaften der Verbindung, wie die            
     Geschwindigkeit und Parita:t, festlegt. Die Typen und die damit          
     verbundenen Eigenschaften liest getty aus /etc/gettytab.                 
                                                                              
     /etc/gettytab entha:lt viele Eintra:ge sowohl fu:r neue wie auch alte    
     Terminalverbindungen. Die meisten Eintra:ge, die mit std beginnen,       
     sollten mit einem festverdrahteten Terminal funktionieren. Fu:r jede     
     Geschwindigkeit zwischen 110 bps und 115200 bps gibt es einen std        
     Eintrag. Weitere Informationen dazu finden Sie in gettytab(5).           
                                                                              
     Wenn Sie den Verbindungstyp in /etc/ttys eintragen, stellen Sie sicher,  
     dass die Kommunikationseinstellungen auch mit denen des Terminals        
     u:bereinstimmen.                                                         
                                                                              
     In diesem Beispiel verwendet der Wyse-50 keine Parita:t und 38400 bps,   
     der 286 PC benutzt ebenfalls keine Parita:t und arbeitet mit 19200 bps.  
   3 Das dritte Feld gibt den Terminaltyp an, der normalerweise mit diesem    
     Anschluss verbunden ist. Fu:r Einwa:hlverbindungen wird oft unknown oder 
     dialup benutzt, da sich die Benutzer praktisch mit beliebigen Terminals  
     oder Emulatoren anmelden ko:nnen. Bei festverdrahteten Terminals a:ndert 
     sich der Typ nicht, so dass in diesem Feld ein richtiger Typ aus der     
     termcap(5) Datenbank angegeben werden kann.                              
                                                                              
     In diesem Beispiel benutzt der Wyse-50 den entsprechenden Typ aus        
     termcap(5), der 286 PC wird als VT-100, den er ja emuliert, angegeben.   
   4 Das vierte Feld gibt an, ob der Anschluss aktiviert werden soll. Ist das 
     Feld auf on gesetzt, startet init das Programm, das im zweiten Feld      
     angegeben ist. Normalerweise ist dies getty. Wenn das Feld auf           
     offgesetzt wird, wird getty nicht ausgefu:hrt und folglich kann sich     
     niemand an dem betreffenden Terminal anmelden.                           
   5 Das letzte Feld gibt die Sicherheit des Anschlusses an. Wenn hier secure 
     angegeben wird, darf sich root, oder jeder Account mit der UID 0 u:ber   
     diese Verbindung anmelden. Wenn insecure angegeben wird, du:rfen sich    
     nur unprivilegierte Benutzer anmelden. Diese ko:nnen spa:ter mit su(1)   
     oder einem a:hnlichen Mechanismus zu root wechseln.                      
                                                                              
     Es wird dringend empfohlen insecure zu verwenden, sogar fu:r Terminals   
     hinter verschlossenen Tu:ren. Es ist ganz einfach sich mit su            
     anzumelden, wenn Superuser-Rechte beno:tigt werden.                      

    25.3.1.2. init zwingen, /etc/ttys erneut zu lesen

   Nachdem A:nderungen in /etc/ttys vorgenommen wurden, schicken Sie init ein
   SIGHUP-Signal (hangup), um es zu veranlassen, seine Konfigurationsdatei
   neu zu lesen:

 # kill -HUP 1

  Anmerkung:

   Da init immer der erste Prozess auf einem System ist, besitzt es immer die
   Prozess-ID 1.

   Wenn alles richtig eingerichtet ist, alle Kabel angeschlossen und die
   Terminals eingeschaltet sind, sollte fu:r jeden Terminal ein getty Prozess
   laufen und auf jedem Terminal sollte eine Anmeldeaufforderung zu sehen
   sein.

  25.3.2. Fehlersuche

   Selbst wenn Sie den Anweisungen akribisch gefolgt sind, kann es immer noch
   zu Fehlern beim Einrichten eines Terminals kommen. Hier eine Liste der
   ha:ufigsten Symptome, sowie einige mo:gliche Lo:sungen:

   Wenn kein Anmeldeprompt erscheint, stellen Sie sicher, dass der Terminal
   verbunden und eingeschaltet ist. Wenn ein PC als Terminal fungiert,
   u:berpru:fen Sie, dass die Terminalemulation auf den richtigen
   Schnittstellen la:uft.

   Stellen Sie sicher, dass Sie das richtige Kabel verwenden und dass das
   Kabel fest mit dem Terminal und dem FreeBSD-Rechner verbunden ist.

   Stellen Sie sicher, dass die Einstellungen fu:r die Geschwindigkeit (bps)
   und Parita:t auf dem FreeBSD-System und dem Terminal gleich sind. Wenn der
   Terminal einen Bildschirm besitzt, u:berpru:fen Sie die richtige
   Einstellung von Helligkeit und Kontrast. Wenn der Terminal druckt, stellen
   Sie die ausreichende Versorgung mit Papier und Tinte sicher.

   U:berpru:fen Sie mit ps, dass der getty Prozess fu:r den Terminal la:uft:

 # ps -axww|grep getty

   Fu:r jeden Terminal sollte ein Eintrag vorhanden sein. Aus dem folgenden
   Beispiel ist zu erkennen, dass getty auf der zweiten seriellen
   Schnittstelle tyyd1 la:uft und den Verbindungstyp std.38400 aus
   /etc/gettytab benutzt:

 22189  d1  Is+    0:00.03 /usr/libexec/getty std.38400 ttyu1

   Wenn getty nicht la:uft, u:berpru:fen Sie, ob der Anschluss in /etc/ttys
   aktiviert ist. Denken Sie daran kill -HUP 1 auszufu:hren, nachdem
   /etc/ttys gea:ndert wurde.

   Wenn getty la:uft, aber der Terminal immer noch kein Anmeldeprompt
   ausgibt, oder am Anmeldeprompt nichts eingegeben werden kann, kann es
   sein, dass der Terminal oder Kabel keinen Hardware-Handshake unterstu:tzt.
   A:ndern Sie dann den Eintrag std.38400 in /etc/ttys zu 3wire.38400.
   Nachdem Sie /etc/ttys gea:ndert haben, setzen Sie kill -HUP 1 ab. Der
   Eintrag 3wire besitzt a:hnliche Eigenschaften wie der Eintrag std,
   ignoriert aber den Hardware-Handshake. Wenn Sie den Eintrag 3wire
   verwenden, muss vielleicht die Geschwindigkeit verkleinert oder die
   Software-Flusssteuerung aktiviert werden, um Pufferu:berla:ufe zu
   vermeiden.

   Wenn nur unversta:ndliche Zeichen erscheinen, stellen Sie sicher, dass die
   Einstellungen fu:r die Geschwindigkeit (bps) und Parita:t auf dem
   FreeBSD-System und dem Terminal gleich sind. Kontrollieren Sie den getty
   Prozess und stellen Sie sicher, dass der richtige Verbindungstyp aus
   /etc/gettytab benutzt wird. Wenn das nicht der Fall ist, editieren Sie
   /etc/ttys und setzen das Kommando kill-HUP 1 ab.

   Wenn Zeichen doppelt und eingegebene Passwo:rter im Klartext erscheinen,
   stellen Sie den Terminal oder die Terminalemulation von "half duplex" oder
   "local echo" auf "full duplex" um.

25.4. Einwa:hlverbindungen

   Beigetragen von Guy Helmer.
   Mit Anmerkungen von Sean Kelly.

   Das Einrichten von Einwa:hlverbindungen auf FreeBSD-Systemen a:hnelt dem
   Anschliessen von Terminals, nur dass anstelle eines Terminals ein Modem
   verwendet wird. FreeBSD unterstu:tzt sowohl externe als auch interne
   Modems.

   Externe Modems sind fu:r Einwa:hlverbindungen besser geeignet, da sie die
   Konfiguration in nicht flu:chtigem RAM speichern ko:nnen. Zudem verfu:gen
   Sie u:ber Leuchtanzeigen, die den Status wichtiger RS-232 Signale
   anzeigen.

   Interne Modems verfu:gen normalerweise nicht u:ber nicht flu:chtiges RAM
   und lassen sich meist nur u:ber DIP-Schalter konfigurieren. Selbst wenn
   ein internes Modem Leuchtanzeigen besitzt, sind diese meist schwer
   einzusehen, wenn das Modem eingebaut ist.

   Mit einem externen Modem muss das passende Kabel verwendet werden. Ein
   Standard RS-232C Kabel, bei dem die folgenden Signale miteinander
   verbunden sind, sollte ausreichen:

   Tabelle 25.4. Signalnamen

   Abku:rzung Bedeutung                                                       
   RD         Received Data                                                   
   TD         Transmitted Data                                                
   DTR        Data Terminal Ready                                             
   DSR        Data Set Ready                                                  
   DCD        Data Carrier Detect (dadurch erkennt RS-232 das Signal Received 
              Line)                                                           
   SG         Signal Ground                                                   
   RTS        Request to Send                                                 
   CTS        Clear to Send                                                   

   Ab Geschwindigkeiten von 2400 bps beno:tigt FreeBSD die Signale RTS und
   CTS fu:r die Flusssteuerung. Das Signal CD zeigt an, ob ein Tra:ger
   vorliegt, das heisst ob die Verbindung aufgebaut ist oder beendet wurde.
   DTR zeigt an, dass das Gera:t betriebsbereit ist. Es gibt einige Kabel,
   bei denen nicht alle no:tigen Signale verbunden sind. Wenn Probleme dieser
   Art auftreten, dass zum Beispiel die Sitzung nicht beendet wird, obwohl
   die Verbindung beendet wurde, kann das an einem solchen Kabel liegen.

   Wie andere UNIX(R) Betriebssysteme auch, benutzt FreeBSD Hardwaresignale,
   um festzustellen, ob ein Anruf beantwortet wurde, eine Verbindung beendet
   wurde, oder um die Verbindung zu schliessen und das Modem zuru:ckzusetzen.
   FreeBSD vermeidet es, dem Modem Kommandos zu senden, oder den Statusreport
   des Modems abzufragen.

  25.4.1. Schnittstellenbausteine

   FreeBSD unterstu:tzt EIA RS-232C (CCITT V.24) serielle Schnittstellen, die
   auf den NS8250, NS16450, NS16550 oder NS16550A Bausteinen basieren. Die
   Bausteine der Serie 16550 verfu:gen u:ber einen 16 Byte grossen Puffer,
   der als FIFO angelegt ist. Wegen Fehler in der FIFO-Logik kann der Puffer
   in einem 16550 Baustein allerdings nicht genutzt werden, das heisst der
   Baustein muss als 16450 betrieben werden. Bei allen Bausteinen ohne Puffer
   und dem 16550 Baustein muss jedes Byte einzeln von dem Betriebssystem
   verarbeitet werden, was Fehler bei hohen Geschwindigkeiten oder grosser
   Systemlast erzeugt. Es sollten daher nach Mo:glichkeit serielle
   Schnittstellen, die auf 16550A Bausteinen basieren, eingesetzt werden.

  25.4.2. U:berblick

   Wie bei Terminals auch, startet init fu:r jede serielle Schnittstelle, die
   eine Einwa:hlverbindung zur Verfu:gung stellt, einen getty Prozess. Wenn
   das Modem beispielsweise an /dev/ttyu0 angeschlossen ist, sollte in der
   Ausgabe von ps ax eine Zeile wie die folgende erscheinen:

  4850 ??  I      0:00.09 /usr/libexec/getty V19200 ttyu0

   Wenn sich ein Benutzer einwa:hlt und die Verbindung aufgebaut ist, zeigt
   das Modem dies durch das CD Signal (Carrier Detect) an. Der Kernel merkt,
   dass ein Signal anliegt und weist getty an, die Schnittstelle zu o:ffnen.
   Dann sendet getty das Anmeldeprompt mit der ersten fu:r die Verbindung
   vereinbarten Geschwindigkeit und wartet auf eine Antwort. Wenn die Antwort
   unversta:ndlich ist, weil zum Beispiel die Geschwindigkeit des Modems von
   gettys Geschwindigkeit abweicht, versucht getty die Geschwindigkeit
   solange anzupassen, bis es eine versta:ndliche Antwort erha:lt.

   Nachdem der Benutzer seinen Benutzernamen eingegeben hat, fu:hrt getty
   /usr/bin/login aus, welches das Passwort abfragt und danach die Shell des
   Benutzers startet.

  25.4.3. Konfigurationsdateien

   Drei Konfigurationsdateien in /etc steuern, ob eine Einwahl in das
   FreeBSD-System mo:glich ist. /etc/gettytab, konfiguriert den
   /usr/libexec/getty Daemon. In /etc/ttys wird festgelegt, auf welchen
   Schnittstellen /sbin/init einen getty Prozess startet. Schliesslich bietet
   /etc/rc.d/serial die Mo:glichkeit, Schnittstellen zu initialisieren.

   Es gibt zwei Ansichten daru:ber, wie Modems fu:r Einwa:hlverbindungen
   unter UNIX(R) zu konfigurieren sind. Zum einen kann die Geschwindigkeit
   zwischen dem Modem und dem Computer fest eingestellt werden. Sie ist damit
   unabha:ngig von der Geschwindigkeit, mit der sich der entfernte Benutzer
   einwa:hlt. Dies hat den Vorteil, dass der entfernte Benutzer das
   Anmeldeprompt sofort bekommt. Der Nachteil bei diesem Verfahren ist, dass
   das System die tatsa:chliche Geschwindigkeit der Verbindung nicht kennt.
   Damit ko:nnen bildschirmorientierte Programme wie Emacs ihren
   Bildschirmaufbau nicht an langsame Verbindungen anpassen, um die
   Antwortzeiten zu verbessern.

   Die andere Mo:glichkeit besteht darin, die Geschwindigkeit der RS-232
   Schnittstelle des lokalen Modems an die Geschwindigkeit des entfernten
   Modems anzupassen. Bei einer V.32bis (14400 bps) Verbindung kann das
   lokale Modem die RS-232 Schnittstelle mit 19200 bps betreiben, wa:hrend
   bei einer Verbindung mit 2400 bps die RS-232 Schnittstelle mit 2400 bps
   betrieben wird. Da getty die Verbindungsgeschwindigkeit des Modems nicht
   kennt, startet es den Anmeldevorgang mit der Ausgabe von login: und wartet
   auf eine Antwort. Wenn der Benutzer der Gegenstelle nun nur
   unversta:ndliche Zeichen erha:lt, muss er solange Enter dru:cken, bis das
   Anmeldeprompt erscheint. Solange die Geschwindigkeiten nicht
   u:bereinstimmen, sind die Antworten der Gegenstelle fu:r getty ebenfalls
   unversta:ndlich. In diesem Fall wechselt getty zur na:chsten
   Geschwindigkeit und gibt wieder login: aus. In aller Regel erha:lt der
   Benutzer der Gegenstelle nach ein bis zwei Tastendru:cken eine erkennbare
   Anmeldeaufforderung. Diese Anmeldeprozedur sieht nicht so sauber wie die
   Methode mit einer festen Geschwindigkeit aus, bietet dem Benutzer einer
   langsamen Verbindung allerdings den Vorteil, dass sich
   bildschirmorientierte Programme an die Geschwindigkeit anpassen ko:nnen.

   Im Folgenden wird die Konfiguration fu:r beide Methoden besprochen, doch
   die Methode der angepassten Geschwindigkeit wird bei der Diskussion
   bevorzugt.

    25.4.3.1. /etc/gettytab

   Mit /etc/gettytab wird getty(8) im Stil von termcap(5) konfiguriert. Das
   Format dieser Datei und die Bedeutung der Eintra:ge wird in gettytab(5)
   beschrieben.

   Wenn die Modemgeschwindigkeit vorgeben wird, sollten Anpassungen in
   /etc/gettytab nicht erforderlich sein.

   Wenn jedoch die Geschwindigkeit angepasst werden soll, erstellen Sie einen
   Eintrag in /etc/gettytab, um getty die Geschwindigkeit fu:r das Modem
   mitzuteilen. Fu:r ein 2400 bps Modem kann der vorhandene D2400 Eintrag
   benutzt werden.

 #
 # Fast dialup terminals, 2400/1200/300 rotary (can start either way)
 #
 D2400|d2400|Fast-Dial-2400:\
         :nx=D1200:tc=2400-baud:
 3|D1200|Fast-Dial-1200:\
         :nx=D300:tc=1200-baud:
 5|D300|Fast-Dial-300:\
         :nx=D2400:tc=300-baud:

   Wird ein Modem mit einer ho:heren Geschwindigkeit eingesetzt, mu:ssen
   weitere Eintra:ge in /etc/gettytab erstellt werden. Dieses Beispiel zeigt
   einen Eintrag fu:r ein 14400 bps Modem mit einer Geschwindigkeit bis zu
   19200 bps:

 #
 # Additions for a V.32bis Modem
 #
 um|V300|High Speed Modem at 300,8-bit:\
         :nx=V19200:tc=std.300:
 un|V1200|High Speed Modem at 1200,8-bit:\
         :nx=V300:tc=std.1200:
 uo|V2400|High Speed Modem at 2400,8-bit:\
         :nx=V1200:tc=std.2400:
 up|V9600|High Speed Modem at 9600,8-bit:\
         :nx=V2400:tc=std.9600:
 uq|V19200|High Speed Modem at 19200,8-bit:\
         :nx=V9600:tc=std.19200:

   Die damit erzeugten Verbindungen verwenden 8 Bit und keine Parita:t.

   Im obigen Beispiel startet die Geschwindigkeit bei 19200 bps (eine V.32bis
   Verbindung) und geht dann u:ber 9600 bps (V.32), 400 bps, 1200 bps und
   300 bps wieder zuru:ck zu 19200 bps. Das Schlu:sselwort nx= (next table)
   sorgt fu:r das zyklische Durchlaufen der Geschwindigkeiten. Jede Zeile
   zieht zudem noch mit tc= (table continuation) die Vorgabewerte fu:r die
   jeweilige Geschwindigkeit an.

   Wenn Sie ein 28800 bps Modem besitzen und/oder Kompression mit einem
   14400 bps Modem benutzen wollen, brauchen Sie ho:here Geschwindigkeiten
   als 19200 bps. Das folgende Beispiel startet mit 57600 bps:

 #
 # Additions for a V.32bis or V.34 Modem
 # Starting at 57600 bps
 #
 vm|VH300|Very High Speed Modem at 300,8-bit:\
         :nx=VH57600:tc=std.300:
 vn|VH1200|Very High Speed Modem at 1200,8-bit:\
         :nx=VH300:tc=std.1200:
 vo|VH2400|Very High Speed Modem at 2400,8-bit:\
         :nx=VH1200:tc=std.2400:
 vp|VH9600|Very High Speed Modem at 9600,8-bit:\
         :nx=VH2400:tc=std.9600:
 vq|VH57600|Very High Speed Modem at 57600,8-bit:\
         :nx=VH9600:tc=std.57600:

   Wenn Sie eine langsame CPU oder ein stark ausgelastetes System besitzen
   und sich kein 16550A im System befindet, erhalten Sie bei 57600 bps
   vielleicht sio Fehlermeldungen der Form "silo overflow".

    25.4.3.2. /etc/ttys

   /etc/ttys wurde bereits in Beispiel 25.1, "Eintra:ge in /etc/ttys
   hinzufu:gen" besprochen. Die Konfiguration fu:r Modems ist a:hnlich,
   allerdings braucht getty ein anderes Argument und es muss ein anderer
   Terminaltyp angegeben werden. Der Eintrag fu:r beide Methoden (feste und
   angepasste Geschwindigkeit) hat die folgende Form:

 ttyu0   "/usr/libexec/getty xxx"   dialup on

   Das erste Feld der obigen Zeile gibt die Gera:tedatei fu:r diesen Eintrag
   an. ttyu0 bedeutet, dass getty mit /dev/ttyu0 arbeitet. Das zweite Feld
   "/usr/libexec/getty xxx" gibt das Kommando an, das init fu:r dieses Gera:t
   startet (xxx wird durch einen passenden Eintrag aus /etc/gettytab
   ersetzt). Die Vorgabe fu:r den Terminaltyp, hier dialup, wird im dritten
   Feld angegeben. Das vierte Feld, on, zeigt init an, dass die Schnittstelle
   aktiviert ist. Im fu:nften Feld ko:nnte noch secure angegeben werden, um
   Anmeldungen von root zu erlauben, doch sollte das wirklich nur fu:r
   physikalisch sichere Terminals, wie die Systemkonsole, aktiviert werden.

   Die Vorgabe fu:r den Terminaltyp, dialup im obigen Beispiel, ha:ngt von
   lokalen Gegebenheiten ab. Traditionell wird dialup fu:r
   Einwa:hlverbindungen verwendet, so dass die Benutzer in ihren
   Anmeldeskripten den Terminaltyp auf ihren Terminal abstimmen ko:nnen, wenn
   der Typ auf dialup gesetzt ist. Wenn Sie nur VT102 Terminals oder
   Emulatoren einsetzen, ko:nnen Sie den Terminaltyp hier auch fest auf vt102
   setzen.

   Nachdem /etc/ttys gea:ndert wurde, muss init ein HUP Signal schicken,
   damit es die Datei wieder einliest:

 # kill -HUP 1

   Stellen Sie sicher, dass das Modem richtig konfiguriert und angeschlossen
   ist, bevor Sie das Signal an init schicken.

   Das Argument von getty muss in diesem Fall eine feste Geschwindigkeit
   vorgeben. Der Eintrag fu:r ein Modem, das fest auf 19200 bps eingestellt
   ist, ko:nnte wie folgt aussehen:

 ttyu0   "/usr/libexec/getty std.19200"   dialup on

   Wenn das Modem auf eine andere Geschwindigkeit eingestellt ist, setzen Sie
   anstelle von std.19200 einen passenden Eintrag der Form std.speed ein.
   Stellen Sie sicher, dass dies auch ein gu:ltiger Verbindungstyp aus
   /etc/gettytab ist.

   Das Argument von getty muss hier auf einen der Eintra:ge aus /etc/gettytab
   zeigen, der zu einer Kette von Eintra:gen geho:rt, die die zu probierenden
   Geschwindigkeiten beschreiben. Wenn Sie dem obigen Beispiel gefolgt sind
   und zusa:tzliche Eintra:ge in /etc/gettytab erzeugt haben, ko:nnen Sie die
   folgende Zeile verwenden:

 ttyu0   "/usr/libexec/getty V19200"   dialup on

    25.4.3.3. /etc/rc.d/serial

   Modems, die ho:here Geschwindigkeiten unterstu:tzen, zum Beispiel V.32,
   V.32bis und V.34 Modems, benutzen Hardware-Flusssteuerung (RTS/CTS). Fu:r
   die entsprechenden Schnittstellen ko:nnen Sie die Flusssteuerung mit stty
   in /etc/rc.d/serial einstellen.

   Um beispielsweise die Hardware-Flusssteuerung fu:r die Gera:te zur Ein-
   und Auswahl der zweiten seriellen Schnittstelle (COM2) zu aktivieren,
   benutzen Sie die Dateien zur Initialisierung der entsprechenden Gera:te
   und fu:gen die folgenden Zeilen in /etc/rc.d/serial hinzu:

 # Serial port initial configuration
 stty -f /dev/ttyu1.init crtscts
 stty -f /dev/cuad1.init crtscts

  25.4.4. Modemkonfiguration

   Fu:r ein Modem, das seine Konfiguration in nicht flu:chtigem RAM
   speichert, wird ein Terminalprogramm wie Telix unter MS-DOS(R) oder tip
   unter FreeBSD beno:tigt, um die Parameter einzustellen. Verbinden Sie sich
   mit derselben Geschwindigkeit, die getty zuerst benutzen wu:rde, mit dem
   Modem und treffen Sie folgende Einstellungen:

     * DCD ist eingeschaltet, wenn das Tra:gersignal des entfernten Modems
       erkannt wird.

     * Im Betrieb liegt DTR an. Bei einem Verlust von DTR legt das Modem auf
       und setzt sich zuru:ck.

     * CTS Flusssteuerung ist fu:r ausgehende Daten aktiviert.

     * XON/XOFF Flusssteuerung ist ausgeschaltet.

     * RTS Flusssteuerung ist fu:r eingehende Daten aktiviert.

     * Keine Ru:ckmeldungen ausgeben.

     * Die Echo-Funktion ist deaktiviert.

   Lesen Sie die Dokumentation fu:r das Modem, um herauszufinden welche
   Befehle und/oder DIP-Schalterstellungen beno:tigt werden.

   Fu:r ein externes 14400 U.S. Robotics(R) Sportster(R) gelten zum Beispiel
   die folgenden Befehle:

 ATZ
 AT&C1&D2&H1&I0&R2&W

   Bei dieser Gelegenheit ko:nnen Sie auch gleich andere Einstellungen, zum
   Beispiel ob Sie V42.bis und/oder MNP5 Kompression benutzen wollen, an
   Ihrem Modem vornehmen.

   Bei einem externen 14400 U.S. Robotics(R) Sportster(R) mu:ssen Sie auch
   noch einige DIP-Schalter einstellen. Die folgenden Einstellungen ko:nnen
   verwendet werden:

     * Schalter 1: OBEN - DTR normal

     * Schalter 2: N/A (Ru:ckmeldungen als Text/numerische Ru:ckmeldungen)

     * Schalter 3: OBEN - Keine Ru:ckmeldungen ausgeben

     * Schalter 4: UNTEN - Echo-Funktion aus

     * Schalter 5: OBEN - Rufannahme aktiviert

     * Schalter 6: OBEN - Carrier Detect normal

     * Schalter 7: OBEN - Einstellungen aus dem NVRAM laden

     * Schalter 8: N/A (Smart Mode/Dumb Mode)

   Fu:r Einwa:hlverbindungen sollten die Ru:ckmeldungen deaktiviert sein, da
   sonst getty dem Modem das Anmeldeprompt login: schickt und das Modem im
   Kommandomodus das Prompt wieder ausgibt (Echo-Funktion) oder eine
   Ru:ckmeldung gibt. Das fu:hrt dann zu einer la:nglichen und fruchtlosen
   Kommunikation zwischen dem Modem und getty.

   Die Geschwindigkeit zwischen Modem und Computer muss auf einen festen Wert
   eingestellt werden. Mit einem externen 14400 U.S. Robotics(R) Sportster(R)
   Modem setzen die folgenden Kommandos die Geschwindigkeit auf den Wert der
   Datenendeinrichtung fest:

 ATZ
 AT&B1&W

   In diesem Fall muss die Geschwindigkeit der seriellen Schnittstelle des
   Modems der eingehenden Geschwindigkeit angepasst werden. Fu:r ein externes
   14400 U.S. Robotics(R) Sportster(R) Modem erlauben die folgenden Befehle
   eine Anpassung der Geschwindigkeit der seriellen Schnittstelle fu:r
   Verbindungen, die keine Fehlerkorrektur verwenden:

 ATZ
 AT&B2&W

   Verbindungen mit Fehlerkorrektur (V.42, MNP) verwenden die Geschwindigkeit
   der Datenendeinrichtung.

    25.4.4.1. U:berpru:fen der Modemkonfiguration

   Die meisten Modems verfu:gen u:ber Kommandos, die die Konfiguration des
   Modems in lesbarer Form ausgeben. Auf einem externen 14400 U.S.
   Robotics(R) Sportster(R) zeigt ATI5 die Einstellungen im nicht flu:chtigen
   RAM an. Um die wirklichen Einstellungen unter Beru:cksichtigung der
   DIP-Schalter zu sehen, benutzen Sie ATZ gefolgt von ATI4.

   Wenn Sie ein anderes Modem benutzen, schauen Sie bitte in der
   Dokumentation des Modems nach, wie Sie die Konfiguration des Modems
   u:berpru:fen ko:nnen.

  25.4.5. Fehlersuche

   Bei Problemen ko:nnen Sie die Einwa:hlverbindung anhand der folgenden
   Punkte u:berpru:fen:

   Schliessen Sie das Modem an das FreeBSD-System an und booten Sie das
   System. Wenn das Modem u:ber Statusindikatoren verfu:gt, u:berpru:fen Sie,
   ob der DTR Indikator leuchtet, wenn das Anmeldeprompt erscheint. Dies
   zeigt an, dass das FreeBSD-System einen getty Prozess auf der
   entsprechenden Schnittstelle gestartet hat und das Modem auf einkommende
   Verbindungen wartet.

   Wenn der DTR-Indikator nicht leuchtet, melden Sie sich an dem
   FreeBSD-System an und u:berpru:fen mit ps ax, ob FreeBSD einen
   getty-Prozess auf der entsprechenden Schnittstelle gestartet hat:

   114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyu0
   115 ??  I      0:00.10 /usr/libexec/getty V19200 ttyu1

   Wenn das Modem noch keinen Anruf entgegengenommen hat und Sie stattdessen
   die folgende Zeile sehen

   114 d0  I      0:00.10 /usr/libexec/getty V19200 ttyu0

   bedeutet dies, dass getty die Schnittstelle schon geo:ffnet hat und zeigt
   Kabelprobleme oder eine falsche Modemkonfiguration an, da getty die
   Schnittstelle erst dann o:ffnen kann, wenn das CD Signal (Carrier Detect)
   vom Modem anliegt.

   Wenn Sie keine getty-Prozesse auf den gewu:nschten ttyuN Ports finden,
   untersuchen Sie /etc/ttys auf Fehler. Suchen Sie auch in /var/log/messages
   nach Meldungen von init oder getty. Wenn Sie dort Meldungen finden,
   sollten Sie noch einmal die beiden Konfigurationsdateien /etc/ttys und
   /etc/gettytab nach Fehlern durchsehen. U:berpru:fen Sie auch, ob die
   Gera:tedateien /dev/ttyuN vorhanden sind.

   Versuchen Sie als na:chstes, sich in das System einzuwa:hlen. Auf dem
   entfernten System stellen Sie bitte die folgenden Kommunikationsparameter
   ein: 8 Bit, keine Parita:t, ein Stop-Bit. Wenn kein Anmeldeprompt
   erscheint oder nur unleserliche Zeichen, dru:cken Sie mehrmals, in
   Absta:nden von ungefa:hr einer Sekunde, Enter. Wenn Sie immer noch nicht
   die login: Meldung sehen, schicken Sie ein BREAK Kommando. Wenn Sie zur
   Einwahl ein Highspeed-Modem benutzen, verwenden Sie eine feste
   Geschwindigkeit auf der seriellen Schnittstelle des Modems.

   Wenn jetzt immer noch kein Anmeldeprompt erscheint, u:berpru:fen Sie
   nochmals /etc/gettytab und stellen sicher, dass:

     * der Verbindungstyp in /etc/ttys zu einem gu:ltigen Eintrag in
       /etc/gettytab geho:rt.

     * jeder der nx= Eintra:ge in gettytab gu:ltig ist und

     * jeder tc= Eintrag auf einen gu:ltigen Eintrag in gettytab verweist.

   Wenn das Modem am FreeBSD-System auf einen eingehenden Anruf nicht
   antwortet, stellen Sie sicher, dass das Modem so konfiguriert ist, dass es
   einen Anruf beantwortet, wenn DTR anliegt. Wenn das Modem
   Statusindikatoren besitzt, ko:nnen Sie das Anliegen von DTR anhand der
   Leuchten u:berpru:fen.

   Wenn Sie alles schon mehrfach u:berpru:ft haben und es immer noch noch
   nicht funktioniert, versuchen Sie es zu einem spa:teren Zeitpunkt erneut.
   Wenn es immer noch nicht funktioniert, ko:nnen Sie eine Mail an die
   Mailingliste 'Fragen und Antworten zu FreeBSD'
   <de-bsd-questions@de.FreeBSD.org> schicken, in der Sie Ihr Modem und Ihr
   Problem beschreiben.

25.5. Verbindungen nach Aussen

   Die folgenden Ratschla:ge beschreiben, wie Sie mit einem Modem eine
   Verbindung zu einem anderen Computer herstellen. Dies ko:nnen Sie nutzen,
   um sich auf einem entfernten Computer anzumelden.

   Weiterhin ist diese Art von Verbindungen nu:tzlich, wenn PPP mal nicht
   funktioniert. Wenn Sie zum Beispiel eine Datei mit FTP u:bertragen wollen
   und das u:ber PPP gerade nicht mo:glich ist, melden Sie sich auf dem
   entfernten Rechner an und fu:hren dort die FTP-Sitzung durch. Die Dateien
   ko:nnen danach mit zmodem auf den lokalen Rechner u:bertragen werden.

  25.5.1. Ein Hayes Modem benutzen

   Es gibt einen eingebauten, allgemeinen Hayes Wa:hler in tip. Verwenden Sie
   at=hayes in /etc/remote.

   Der Hayes-Treiber ist nicht schlau genug, um ein paar der erweiterten
   Funktionen von neueren Modems, bspw. BUSY, NO DIALTONE oder CONNECT 115200
   zu nutzen. Schalten Sie diese Nachrichten mit Hilfe von ATX0&W ab, wenn
   Sie tip benutzen.

   Der Anwahl-Timeout von tip betra:gt 60 Sekunden. Das Modem sollte weniger
   verwenden, oder tip denkt, dass ein Kommunikationsfehler vorliegt.
   Versuchen Sie es mit ATS7=45&W.

  25.5.2. AT-Befehle benutzen

   Erstellen Sie einen direct Eintrag in /etc/remote. Wenn das Modem zum
   Beispiel an der ersten seriellen Schnittstelle, /dev/cuad0, angeschlossen
   ist, dann fu:gen Sie die folgende Zeile hinzu:

 cuad0:dv=/dev/cuad0:br#19200:pa=none

   Verwenden Sie die ho:chste bps-Rate, die das Modem in der br Fa:higkeit
   unterstu:tzt. Geben Sie dann tip cuad0 ein und Sie sind mit dem Modem
   verbunden.

   Oder benutzen Sie cu als root mit dem folgenden Befehl:

 # cu -lline -sspeed

   line steht fu:r die serielle Schnittstelle (/dev/cuad0) und speed fu:r die
   Geschwindigkeit (57600). Wenn Sie mit dem Eingeben der AT Befehle fertig
   sind, beenden Sie mit ~..

  25.5.3. Das @ Zeichen funktioniert nicht

   Das @ Zeichen in der Telefonnummerfa:higkeit sagt tip, dass es in
   /etc/phones nach einer Nummer suchen soll. Aber @ ist auch ein spezielles
   Zeichen in den Dateien, in denen Fa:higkeiten beschrieben werden, wie
   /etc/remote. Schreiben Sie es mit einem Backslash:

 pn=\@

  25.5.4. Wie kann ich von der Kommandozeile eine Telefonnummer wa:hlen?

   Setzen Sie einen allgemeinen Eintrag in /etc/remote. Zum Beispiel:

 tip115200|Dial any phone number at 115200 bps:\
         :dv=/dev/cuad0:br#115200:at=hayes:pa=none:du:
 tip57600|Dial any phone number at 57600 bps:\
         :dv=/dev/cuad0:br#57600:at=hayes:pa=none:du:

   Folgendes sollte jetzt funktionieren:

 # tip -115200 5551234

   Benutzer, die cu gegenu:ber tip bevorzugen, ko:nnen einen allgemeinen
   cu-Eintrag verwenden:

 cu115200|Use cu to dial any number at 115200bps:\
         :dv=/dev/cuad1:br#57600:at=hayes:pa=none:du:

   und benutzen zum Wa:hlen das Kommando:

 # cu 5551234 -s 115200

  25.5.5. Die bps-Rate angeben

   Schreiben Sie einen tip1200- oder einen cu1200-Eintrag, aber geben Sie
   auch die bps-Rate an, die das Modem wirklich unterstu:tzt. Leider denkt
   tip(1), dass 1200 bps ein guter Standardwert ist und deswegen sucht es
   nach einem tip1200-Eintrag. Natu:rlich mu:ssen Sie nicht 1200 bps
   benutzen.

  25.5.6. U:ber einen Terminal-Server auf verschiedene Rechner zugreifen

   Sie mu:ssen nicht warten bis Sie verbunden sind, und jedes Mal CONNECT
   Rechner eingeben, benutzen Sie tips cm-Fa:higkeit. Sie ko:nnen diese
   Eintra:ge in /etc/remote verwenden. Mit den Befehlen tip pain oder tip
   muffin ko:nnen Sie eine Verbindungen zu den Rechnern pain oder muffin
   herstellen; mit tip deep13 verbinden Sie sich mit dem Terminalserver.

 pain|pain.deep13.com|Forrester's machine:\
         :cm=CONNECT pain\n:tc=deep13:
 muffin|muffin.deep13.com|Frank's machine:\
         :cm=CONNECT muffin\n:tc=deep13:
 deep13:Gizmonics Institute terminal server:\
         :dv=/dev/cuad2:br#38400:at=hayes:du:pa=none:pn=5551234:

  25.5.7. Mehr als eine Verbindung mit tip benutzen

   Das ist oft ein Problem, wenn eine Universita:t mehrere Telefonleitungen
   hat und viele tausend Studenten diese benutzen wollen.

   Erstellen Sie einen Eintrag in /etc/remote und benutzen Sie @ fu:r die
   pn-Fa:higkeit:

 big-university:\
         :pn=\@:tc=dialout
 dialout:\
         :dv=/dev/cuad3:br#9600:at=courier:du:pa=none:

   Listen Sie dann die Telefonnummern in /etc/phones auf:

 big-university 5551111
 big-university 5551112
 big-university 5551113
 big-university 5551114

   tip probiert jede der Nummern in der aufgelisteten Reihenfolge und gibt
   dann auf. Mo:chten Sie, dass tip beim Versuchen eine Verbindung
   herzustellen nicht aufgibt, lassen Sie es in einer while-Schleife laufen.

  25.5.8. Eine U:bertragung erzwingen

   Ctrl+P ist das voreingestellte Zeichen, mit dem eine U:bertragung
   erzwungen werden kann und wird benutzt, um tip zu sagen, dass das na:chste
   Zeichen direkt gesendet werden soll und nicht als Fluchtzeichen
   interpretiert werden soll. Mit Hilfe der Fluchtsequenz ~s, mit der man
   Variablen setzen kann, ko:nnen Sie jedes andere Zeichen als
   "force"-Zeichen definieren.

   Geben Sie ~sforce=Zeichen gefolgt von Enter ein. Fu:r Zeichen ko:nnen Sie
   ein beliebiges einzelnes Zeichen einsetzen. Wenn Sie Zeichen weglassen,
   ist das "force"-Zeichen "nul", das Sie mit Ctrl+2 oder Ctrl+Leertaste
   eingeben ko:nnen. Ein guter Wert fu:r Zeichen ist Shift+Ctrl+6, welches
   nur auf wenigen Terminal Servern benutzt wird.

   Sie ko:nnen das "force"-Zeichen auch bestimmen, indem Sie in $HOME/.tiprc
   das Folgende einstellen:

 force=single-char

  25.5.9. Grossbuchstaben

   Dies passiert, wenn Ctrl+A eingegeben wurde, das "raise"-Zeichen von tip,
   das speziell fu:r Leute mit defekten caps-lock Tasten eingerichtet wurde.
   Benutzen Sie ~s wie oben und setzen Sie die Variable raisechar auf etwas,
   das Ihnen angemessen erscheint. Tatsa:chlich kann die Variable auf das
   gleiche Zeichen wie das "force"-Zeichen gesetzt werden, wenn diese
   Fa:higkeiten niemals benutzt werden sollen.

   Hier ist ein Muster der .tiprc Datei fu:r Emacs Benutzer, die Ctrl+2 und
   Ctrl+A tippen mu:ssen:

 force=^^
 raisechar=^^

   Geben Sie fu:r ^^ Shift+Ctrl+6 ein.

  25.5.10. Dateien mit tip u:bertragen

   Wenn Sie mit einem anderen UNIX(R) System kommunizieren, ko:nnen Sie mit
   ~p (put) und ~t (take) Dateien senden und empfangen. Diese Befehle lassen
   cat und echo auf dem entfernten System laufen, um Dateien zu empfangen und
   zu senden. Die Syntax ist:

   ~p local-file [remote-file]

   ~t remote-file [local-file]

   Es gibt keine Fehlerkontrolle, deshalb sollte besser ein anderes
   Protokoll, wie zmodem, benutzt werden.

  25.5.11. zmodem mit tip benutzen

   Um Dateien zu empfangen, starten Sie das Programm zum Senden auf dem
   entfernten Computer. Geben Sie dann ~C rz ein, um die Dateien lokal zu
   empfangen.

   Um Dateien zu senden, starten Sie das Programm zum Empfangen auf dem
   entfernten Computer. Geben Sie dann ~C sz Dateien ein, um Dateien auf das
   entfernte System zu senden.

25.6. Einrichten der seriellen Konsole

   Beigetragen von Kazutaka YOKOTA.
   Based on a document by Bill Paul.

   FreeBSD kann ein System mit einem Dumb-Terminal (unintelligente
   Datenstation) an einer seriellen Schnittstelle als Konsole booten. Diese
   Konfiguration ist besonders nu:tzlich fu:r Systemadministratoren, die
   FreeBSD auf Systemen ohne Tastatur oder Monitor installieren wollen, und
   Entwickler, die den Kernel oder Gera:tetreiber debuggen.

   Wie in Kapitel 12, FreeBSDs Bootvorgang beschrieben, besitzt FreeBSD drei
   Bootphasen. Der Code fu:r die ersten beiden Bootphasen befindet sich im
   Bootsektor am Anfang der FreeBSD-Slice der Bootplatte. Dieser Bootblock
   la:dt den Bootloader in Phase drei.

   Um eine serielle Konsole einzurichten, muss der Bootblock, der Bootloader
   und der Kernel konfiguriert werden.

  25.6.1. Schnelle Konfiguration der seriellen Konsole

   Dieser Abschnitt bietet einen schnellen U:berblick u:ber die Einrichtung
   einer seriellen Konsolen. Es wird vorausgesetzt, dass die Voreinstellungen
   verwendet werden.

    1. Verbinden Sie die serielle Konsole mit COM1 sowie dem
       Kontrollterminal.

    2. Um die Startmeldungen der seriellen Konsole zu sehen, geben Sie als
       root folgendes ein:

 # echo 'console="comconsole"' >> /boot/loader.conf

    3. A:ndern Sie in /etc/ttys den Eintrag fu:r ttyu0 von off auf on.
       Zusa:tzlich sollten Sie den Wert dialup auf vt100 a:ndern. Nur so wird
       auf der seriellen Konsole eine Eingabeaufforderung mit einer
       Passwortabfrage aktiviert.

    4. Starten Sie nun das System neu, damit die serielle Konsole aktiviert
       wird.

   Wenn Sie eine unterschiedliche Konfiguration beno:tigen, lesen Sie den
   na:chsten Abschnitt fu:r eine tiefer gehende Erkla:rung.

  25.6.2. Konfiguration der seriellen Konsole

    1. Bereiten Sie ein serielles Kabel vor.

       Sie beno:tigen entweder ein Nullmodemkabel oder ein serielles Standard
       Kabel mit einem Nullmodemkabel-Adapter. In Abschnitt 25.2.1, "Kabel
       und Schnittstellen" werden serielle Kabel beschrieben.

    2. Trennen Sie die Tastatur vom Computer.

       Viele PC Systeme suchen beim Power On Self Test (POST) nach einer
       Tastatur und geben eine Fehlermeldung aus, wenn sie keine finden.
       Einige Maschinen werden sich sogar weigern, ohne Tastatur zu booten.

       Wenn der Rechner trotz einer Fehlermeldung normal weiterbootet,
       brauchen Sie weiter nichts zu tun.

       Wenn das System ohne Tastatur nicht booten will, mu:ssen Sie das BIOS
       so konfigurieren, dass es diesen Fehler ignoriert (wenn das mo:glich
       ist). Das Handbuch zum Motherboard sollte beschreiben, wie das zu
       bewerkstelligen ist.

  Tipp:

       Selbst wenn Sie im BIOS "Not installed" fu:r die Tastatur einstellen,
       ko:nnen Sie eine Tastatur angeschlossen haben und diese auch weiterhin
       benutzen, da sie mit dieser Anweisung das BIOS lediglich anweisen,
       nach dem Einschalten des Rechners nicht nach einer Tastatur zu suchen
       und den Rechner ohne entsprechende Fehlermeldung zu starten. Wenn die
       oben beschriebene Option nicht im BIOS vorhanden ist, halten Sie
       stattdessen Ausschau nach einer "Halt on Error" Option. Sie ko:nnen
       den gleichen Effekt wie oben erzielen, wenn Sie diese Option auf "All
       but Keyboard" oder sogar "No Errors" setzen.

  Anmerkung:

       Wenn das System u:ber eine PS/2(R) Maus verfu:gt, mu:ssen Sie diese
       wahrscheinlich auch abziehen. Da sich die PS/2(R) Maus und die
       Tastatur einige Hardwarekomponenten teilen, kann das dazu fu:hren,
       dass die Hardwareerkennung fa:lschlicherweise eine Tastatur findet,
       wenn eine PS/2(R) Maus angeschlossen ist.

    3. Schliessen Sie einen Dumb-Terminal an COM1 (sio0) an.

       Wenn Sie keinen Dumb-Terminal besitzen, ko:nnen Sie einen alten
       Computer mit einem Terminalemulator oder die serielle Schnittstelle
       eines anderen UNIX(R) Rechners benutzen. Sie beno:tigen auf jeden Fall
       eine freie erste serielle Schnittstelle (COM1). Zurzeit ist es nicht
       mo:glich, in den Bootblo:cken eine andere Schnittstelle zu
       konfigurieren, ohne diese neu zu kompilieren. Wenn Sie COM1 bereits
       fu:r ein anderes Gera:t benutzen, mu:ssen Sie dieses Gera:t tempora:r
       entfernen und einen neuen Bootblock sowie Kernel installieren, wenn
       FreeBSD erst einmal installiert ist.

    4. Stellen Sie sicher, dass die Kernelkonfiguration die richtigen
       Optionen fu:r COM1 (sio0) entha:lt.

       Relevante Optionen sind:

            0x10

                    Aktiviert die Konsolenunterstu:tzung fu:r dieses Gera:t.
                    Zurzeit kann nur ein Gera:t die Konsolenunterstu:tzung
                    aktiviert haben. Das erste, in der Konfigurationsdatei
                    aufgefu:hrte Gera:t, mit dieser Option, verfu:gt u:ber
                    eine aktivierte Konsolenunterstu:tzung. Beachten Sie,
                    dass diese Option alleine nicht ausreicht, um die
                    serielle Konsole zu aktivieren. Setzen Sie entweder noch
                    die nachfolgend diskutierte Option oder verwenden Sie
                    beim Booten, wie unten beschrieben, den Schalter -h.

            0x20

                    Das erste Gera:t in der Kernelkonfigurationsdatei mit
                    dieser Option wird, unabha:ngig von dem unten
                    diskutierten Schalter -h, zur Konsole. Die Option 0x20
                    muss zusammen mit 0x10 verwendet werden.

            0x40

                    Reserviert dieses Gera:t und sperrt es fu:r normale
                    Zugriffe. Sie sollten diese Option nicht auf dem Gera:t
                    setzen, das Sie als serielle Konsole verwenden wollen.
                    Der Zweck dieser Option ist es, dieses Gera:t fu:r das
                    Remote-Debuggen zu reservieren. Das FreeBSD Developers'
                    Handbook entha:lt dazu weitere Informationen.

       Beispiel:

 device sio0 at isa? port IO_COM1 tty flags 0x10 irq 4

       Weitere Einzelheiten finden Sie in sio(4).

       Wenn diese Optionen nicht gesetzt sind, mu:ssen Sie auf einer anderen
       Konsole beim Booten UserConfig starten oder den Kernel neu
       kompilieren.

    5. Erstellen Sie boot.config im Rootverzeichnis der a-Partition des
       Bootlaufwerks.

       Der Code des Bootblocks entnimmt dieser Datei, wie Sie Ihr System
       booten mo:chten. Um die serielle Konsole zu aktivieren, mu:ssen Sie
       hier eine oder mehrere Optionen (alle in derselben Zeile) angeben. Die
       folgenden Optionen stehen zur Auswahl der Konsole zur Verfu:gung:

            -h

                    Schaltet zwischen der internen und der seriellen Konsole
                    um. Wenn Sie beispielsweise von der internen Konsole
                    (Bildschirm) booten, weist -h den Bootloader und den
                    Kernel an, die serielle Schnittstelle als Konsole zu
                    nehmen. Wenn die Konsole normal auf der seriellen
                    Schnittstelle liegt, wa:hlen Sie mit -h den Bildschirm
                    aus.

            -D

                    Schaltet zwischen Einzelkonsole und Dual-Konsole um. Die
                    Einzelkonsole ist entweder die interne Konsole (der
                    Bildschirm) oder die serielle Schnittstelle, je nach dem
                    Stand von -h. Im Dual-Konsolen Betrieb ist die Konsole,
                    unabha:ngig von -h, gleichzeitig der Bildschirm und die
                    serielle Schnittstelle. Dies trifft aber nur zu, wenn der
                    Bootblock ausgefu:hrt wird. Sobald der Bootloader
                    ausgefu:hrt wird, wird die durch -h gegebene Konsole die
                    alleinige Konsole.

            -P

                    Veranlasst den Bootblock nach einer Tastatur zu suchen.
                    Wenn keine Tastatur gefunden wird, werden -D und -h
                    automatisch gesetzt.

  Anmerkung:

                    Wegen Platzbeschra:nkungen in den Bootblo:cken kann -P
                    nur erweiterte Tastaturen erkennen. Tastaturen mit
                    weniger als 101 Tasten und ohne F11 und F12 Tasten werden
                    wahrscheinlich, wie vielleicht auch die Tastaturen
                    einiger Laptops, nicht erkannt. Wenn das der Fall ist,
                    ko:nnen Sie -P nicht verwenden, da es leider keine
                    Abhilfe fu:r dieses Problem gibt.

       Benutzen Sie also entweder -P, um die Konsole automatisch zu setzen,
       oder -h, um die serielle Konsole zu verwenden.

       Weitere Optionen werden in boot(8) beschrieben.

       Mit Ausnahme von -P werden die Optionen an den Bootloader
       weitergegeben. Der Bootloader untersucht dann einzig -h um
       festzustellen, welches Gera:t die Konsole wird. Wenn Sie also nur -D
       angegeben haben, ko:nnen Sie die serielle Schnittstelle nur als
       Konsole verwenden wa:hrend der Bootblock ausgefu:hrt wird. Danach wird
       der Bootloader, da ja -h fehlt, den Bildschirm zur Konsole machen.

    6. Booten Sie die Maschine.

       Wenn Sie das FreeBSD-System starten, werden die Bootblo:cke den Inhalt
       von /boot.config auf der Konsole ausgeben:

 /boot.config: -P
 Keyboard: no

       Die zweite Zeile sehen Sie nur, wenn Sie in /boot.config -P angegeben
       haben. Sie zeigt an, ob eine Tastatur angeschlossen ist oder nicht.
       Die Meldungen gehen je nach den Einstellungen in /boot.config auf die
       interne Konsole, die serielle Konsole, oder beide Konsolen.

       Optionen                 Meldungen erscheinen auf                      
       keine                    der internen Konsole                          
       -h                       der seriellen Konsole                         
       -D                       der seriellen und der internen Konsole        
       -Dh                      der seriellen und der internen Konsole        
       -P, mit Tastatur         der internen Konsole                          
       -P, ohne Tastatur        der seriellen Konsole                         

       Nach den oben gezeigten Meldungen gibt es eine kleine Verzo:gerung
       bevor die Bootblo:cke den Bootloader laden und weitere Meldungen auf
       der Konsole erscheinen. Sie ko:nnen die Ausfu:hrung der Bootblo:cke
       unterbrechen, um zu u:berpru:fen, ob auch alles richtig aufgesetzt
       ist, brauchen das aber unter normalen Umsta:nden nicht zu tun.

       Dru:cken Sie eine Taste ausser Enter um den Bootvorgang zu
       unterbrechen. Sie erhalten dann ein Prompt, an dem Sie weitere
       Eingaben ta:tigen ko:nnen:

 >> FreeBSD/i386 BOOT
 Default: 0:ad(0,a)/boot/loader
 boot:

       Je nach Inhalt von /boot.config erscheint das Prompt auf der seriellen
       Konsole, der internen Konsole oder beiden Konsolen. Wenn die Meldung
       auf der richtigen Konsole erscheint, dru:cken Sie Enter um
       fortzufahren.

       Wenn kein Prompt auf der seriellen Konsole erscheint, liegt ein Fehler
       in den Einstellungen vor. Als Abhilfe geben Sie an der momentanen
       Konsole -h ein, um den Bootblock und den Bootloader auf die serielle
       Konsole umzustellen. Fu:hren Sie dann den Bootvorgang mit Enter weiter
       und wenn das System gebootet hat, ko:nnen Sie die fehlerhaften
       Einstellungen korrigieren.

   Wa:hrend der dritten Bootphase ko:nnen Sie immer noch zwischen der
   internen und der seriellen Konsole auswa:hlen. Setzen Sie dazu, wie in
   Abschnitt 25.6.5, "Die Konsole im Bootloader a:ndern" beschrieben, die
   entsprechenden Variablen des Bootloaders.

  25.6.3. Zusammenfassung

   Die folgende Tabelle bietet eine Zusammenfassung der verschiedenen
   Einstellungen, die in diesem Abschnitt diskutiert wurden:

   Tabelle 25.5. Fall 1: Option 0x10 fu:r sio0

   Optionen in          Konsole in den        Konsole im       Konsole im     
   /boot.config         Bootblo:cken          Bootloader       Kernel         
   keine                interne               interne          interne        
   -h                   serielle              serielle         serielle       
   -D                   serielle und interne  interne          interne        
   -Dh                  serielle und interne  serielle         serielle       
   -P, mit Tastatur     interne               interne          interne        
   -P, ohne Tastatur    serielle und interne  serielle         serielle       

   Tabelle 25.6. Fall 2: Option 0x30 fu:r sio0

   Optionen in          Konsole in den        Konsole im       Konsole im     
   /boot.config         Bootblo:cken          Bootloader       Kernel         
   keine                interne               interne          serielle       
   -h                   serielle              serielle         serielle       
   -D                   serielle und interne  interne          serielle       
   -Dh                  serielle und interne  serielle         serielle       
   -P, mit Tastatur     interne               interne          serielle       
   -P, ohne Tastatur    serielle und interne  serielle         serielle       

  25.6.4. Hinweise zur seriellen Konsole

    25.6.4.1. Verwenden einer ho:heren Geschwindigkeit

   Die Vorgabewerte fu:r die Kommunikationsparameter der seriellen
   Schnittstelle sind: 9600 baud, 8 Bit, keine Parita:t und ein Stopp-Bit. Um
   die Standardgeschwindigkeit zu a:ndern, stehen folgende Mo:glichkeiten zur
   Verfu:gung:

     * Geben Sie die neue Konsolengeschwindigkeit mit BOOT_COMCONSOLE_SPEED
       an und kompilieren Sie die Bootblo:cke neu. Ausfu:hrliche
       Informationen zum Bau und zur Installation von neuen Bootblo:cken
       finden Sie im Abschnitt 25.6.4.2, "Eine andere Schnittstelle als sio0
       benutzen" des Handbuchs.

       Wenn die serielle Konsole nicht mit der Option -h gestartet wird, oder
       wenn die verwendete serielle Konsole sich von der von den Bootblo:cken
       verwendeten unterscheidet, mu:sssen Sie zusa:tzlich die folgende
       Option in die Kernelkonfigurationsdatei aufnehmen und den Kernel neu
       bauen:

 options CONSPEED=19200

     * Verwenden Sie die Option -S, um den Kernel zu booten. Eine
       Beschreibung dieses Vorgangs sowie eine Auflistung der von
       /boot.config unterstu:tzten Optionen finden Sie in boot(8).

     * Aktivieren Sie die Option comconsole_speed in /boot/loader.conf.

       Diese Option setzt voraus, dass auch die Optionen console,
       boot_serial, sowie boot_multicons in /boot/loader.conf gesetzt sind.
       Im Folgenden finden Sie ein Beispiel, in dem comconsole_speed
       verwendet wird, um die Geschwindigkeit der seriellen Konsole zu
       a:ndern:

 boot_multicons="YES"
 boot_serial="YES"
 comconsole_speed="115200"
 console="comconsole,vidconsole"

    25.6.4.2. Eine andere Schnittstelle als sio0 benutzen

   Wenn Sie, warum auch immer, ein anderes Gera:t als sio0 fu:r die serielle
   Konsole einsetzen wollen, kompilieren Sie bitte die Bootblo:cke, den
   Bootloader und den Kernel nach dem folgenden Verfahren neu.

    1. Installieren Sie die Kernelquellen wie im Kapitel 23, FreeBSD
       aktualisieren beschrieben.

    2. Setzen Sie in /etc/make.conf BOOT_COMCONSOLE_PORT auf die Adresse der
       Schnittstelle (0x3F8, 0x2F8, 0x3E8 oder 0x2E8), die Sie benutzen
       mo:chten. Sie ko:nnen nur sio0 bis sio3 (COM1 bis COM4) benutzen,
       Multiportkarten ko:nnen Sie nicht als Konsole benutzen. Interrupts
       mu:ssen Sie hier nicht angeben.

    3. Erstellen Sie eine angepasste Kernelkonfiguration und geben Sie dort
       die richtigen Optionen fu:r die Schnittstelle, die Sie benutzen
       mo:chten, an. Wenn Sie zum Beispiel sio1 (COM2) zur Konsole machen
       wollen, geben Sie dort entweder

 device sio1 at isa? port IO_COM2 tty flags 0x10 irq 3

       oder

 device sio1 at isa? port IO_COM2 tty flags 0x30 irq 3

       an. Keine andere serielle Schnittstelle sollte als Konsole definiert
       werden.

    4. U:bersetzen und installieren Sie die Bootblo:cke und den Bootloader:

 # cd /sys/boot
 # make clean
 # make
 # make install

    5. Bauen und installieren Sie einen neuen Kernel.

    6. Schreiben Sie die Bootblo:cke mit bsdlabel(8) auf die Bootplatte und
       booten Sie den neuen Kernel.

    25.6.4.3. DDB Debugger u:ber die serielle Schnittstelle

   Wenn Sie den Kerneldebugger u:ber eine serielle Verbindung bedienen
   mo:chten, u:bersetzen Sie einen angepassten Kernel mit den folgenden
   Optionen. Das ist nu:tzlich, kann aber gefa:hrlich sein, wenn auf der
   Leitung falsche BREAK-Signale generiert werden.

 options BREAK_TO_DEBUGGER
 options DDB

    25.6.4.4. Benutzung der seriellen Konsole zum Anmelden

   Da Sie schon die Bootmeldungen auf der Konsole verfolgen ko:nnen und den
   Kerneldebugger u:ber die Konsole bedienen ko:nnen, wollen Sie sich
   vielleicht auch an der Konsole anmelden.

   O:ffnen Sie /etc/ttys in einem Editor und suchen Sie nach den folgenden
   Zeilen:

 ttyu0 "/usr/libexec/getty std.9600" unknown off secure
 ttyu1 "/usr/libexec/getty std.9600" unknown off secure
 ttyu2 "/usr/libexec/getty std.9600" unknown off secure
 ttyu3 "/usr/libexec/getty std.9600" unknown off secure

   ttyu0 bis ttyu3 entsprechen COM1 bis COM4. A:ndern Sie fu:r die
   entsprechende Schnittstelle off zu on. Wenn Sie auch die Geschwindigkeit
   der seriellen Schnittstelle gea:ndert haben, mu:ssen Sie std.9600 auf die
   momentane Geschwindigkeit anpassen.

   Auch kann den Terminaltyp von unknown auf den tatsa:chlich verwendeten
   Terminal gesetzt werden.

   Damit die A:nderungen wirksam werden, mu:ssen Sie noch kill -HUP 1
   absetzen.

  25.6.5. Die Konsole im Bootloader a:ndern

   In den vorigen Abschnitten wurde beschrieben, wie Sie die serielle Konsole
   durch A:nderungen im Bootblock aktivieren. Dieser Abschnitt zeigt, wie Sie
   mit Kommandos und Umgebungsvariablen die Konsole im Bootloader definieren.
   Da der Bootloader die dritte Phase im Bootvorgang ist und nach den
   Bootblo:cken ausgefu:hrt wird, u:berschreiben seine Einstellungen die des
   Bootblocks.

    25.6.5.1. Festlegen der Konsole

   Mit einer einzigen Zeile in /boot/loader.conf ko:nnen Sie den Bootloader
   und den Kernel anweisen, die serielle Schnittstelle zur Konsole zu machen:

 console="comconsole"

   Unabha:ngig von den Einstellungen im Bootblock legt dies die Konsole fest.

   Die obige Zeile sollte die erste Zeile in /boot/loader.conf sein, so dass
   die Bootmeldungen so fru:h wie mo:glich auf der Konsole zu sehen sind.

   Analog ko:nnen Sie die interne Konsole verwenden:

 console="vidconsole"

   Wenn die Umgebungsvariable console nicht gesetzt ist, bestimmt der
   Bootloader und damit auch der Kernel, die Konsole u:ber die -h Option des
   Bootblocks.

   Die Bootkonsole kann in /boot/loader.conf.local oder /boot/loader.conf
   angegeben werden.

   Weitere Informationen erhalten Sie in loader.conf(5).

  Anmerkung:

   Momentan gibt es im Bootloader nichts vergleichbares zu -P im Bootblock.
   Damit kann die Konsole nicht automatisch u:ber das Vorhandensein einer
   Tastatur festgelegt werden.

    25.6.5.2. Eine andere Schnittstelle als sio0 benutzen

   Der Bootloader muss neu kompiliert werden, wenn eine andere Schnittstelle
   als sio0 benutzt werden soll. Folgen Sie der Anleitung aus
   Abschnitt 25.6.4.2, "Eine andere Schnittstelle als sio0 benutzen".

  25.6.6. Vorbehalte

   Obwohl es die meisten Systeme erlauben, ohne Tastatur zu booten, gibt es
   nur wenige Systeme, die ohne eine Grafikkarte booten. Maschinen mit einem
   AMI BIOS ko:nnen ohne Grafik booten, indem Sie den Grafikadapter im
   CMOS-Setup auf Not installed setzen.

   Viele Maschinen unterstu:tzen diese Option allerdings nicht. Damit diese
   Maschinen booten, mu:ssen sie u:ber eine Grafikkarte, auch wenn es nur
   eine alte Monochromkarte ist, verfu:gen. Allerdings brauchen Sie keinen
   Monitor an die Karte anzuschliessen. Sie ko:nnen natu:rlich auch
   versuchen, auf diesen Maschinen ein AMI BIOS zu installieren.

Kapitel 26. PPP

   Inhaltsverzeichnis

   26.1. U:bersicht

   26.2. PPP konfigurieren

   26.3. Probleme bei PPP-Verbindungen

   26.4. PPP over Ethernet (PPPoE)

   26.5. PPP over ATM (PPPoA)

26.1. U:bersicht

   FreeBSD unterstu:tzt das Point-to-Point (PPP) Protokoll, mit dem u:ber ein
   Modem eine Verbindung mit einem Netzwerk oder dem Internet hergestellt
   werden kann. Dieses Kapitel beschreibt die Konfiguration von
   Modem-basierten Kommunikationsdiensten unter FreeBSD.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen:

     * Wie Sie PPP einrichten, benutzen, sowie Fehler beheben.

     * Was zu tun ist, um PPP over Ethernet (PPPoE) einzurichten.

     * Wie Sie PPP over ATM (PPPoA) einrichten.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Mit den grundlegenden Begriffen der Netzwerktechnik vertraut sein.

     * Die Grundlagen und den Zweck einer Einwahlverbindung sowie PPP kennen.

26.2. PPP konfigurieren

   FreeBSD entha:lt ppp(8), um Einwa:hlverbindungen u:ber PPP zu verwalten.
   Der FreeBSD-Kernel entha:lt Unterstu:tzung fu:r die tun-Schnittstelle, die
   benutzt wird um mit einem Modem zu interagieren. Fu:r die Konfiguration
   muss mindestens eine Datei bearbeitet werden. Beispiele sind in den
   Konfigurationsdateien ebenfalls enthalten. Schlussendlich wird ppp
   benutzt, um die Verbindungen zu starten und zu verwalten.

   Fu:r eine PPP-Verbindung sind folgende Dinge erforderlich:

     * Ein Account bei einem Internet Service Provider (ISP).

     * Ein Modem.

     * Die Einwahlnummer(n) des ISPs.

     * Den Login-Namen und das Passwort, welches vom ISP zugewiesen wurde.

     * Die IP-Adresse von einem oder mehreren DNSServern. U:blicherweise
       werden diese Daten vom ISP zur Verfu:gung gestellt. Falls dies nicht
       der Fall ist, ko:nnen Sie FreeBSD so konfigurieren, das es die
       DNS-Daten automatisch aushandeln kann.

   Sollte eine dieser Informationen fehlen, kontaktieren Sie den ISP!

   Die folgenden Informationen werden mo:glicherweise durch den ISP zur
   Verfu:gung gestellt, sie sind aber nicht zwingend erforderlich:

     * Die IP-Adresse des Standard-Gateways. Steht diese Information nicht
       zur Verfu:gung, wird der PPP-Server des ISPs beim Verbindungsaufbau
       eine gu:ltige Adresse u:bermitteln. Diese Adresse wird in der
       Konfiguration von PPP unter FreeBSD als HISADDR bezeichnet.

     * Die Netzmaske. Falls der ISP keine Netzmaske vorgegeben hat, ko:nnen
       Sie in der Konfigurationsdatei von ppp(8) 255.255.255.255 verwenden.

     * Wenn der ISP eine statische IP-Adresse und einen Rechnernamen
       zugewiesen hat, sollten diese Informationen in die Konfigurationsdatei
       eingetragen werden. Andernfalls werden diese Informationen automatisch
       beim Verbindungsaufbau zur Verfu:gung gestellt.

   Der Rest dieses Abschnitts beschreibt, wie FreeBSD fu:r gebra:uchliche
   PPP-Verbindungsszenarien konfiguriert wird. Die erforderliche
   Konfigurationsdatei ist /etc/ppp/ppp.conf. Zusa:tzliche Dateien und
   Beispiele sind in /usr/share/examples/ppp/ verfu:gbar.

  Anmerkung:

   Die Beispieldateien, die in diesem Kapitel dargestellt werden, enthalten
   Zeilennummern. Die Nummerierung dient lediglich einer leichteren
   Orientierung und sollte nicht in die Dateien u:bernommen werden.

   Achten Sie auf die richtige Einru:ckung, wenn Sie eine Konfigurationsdatei
   bearbeiten. Zeilen die mit einem : enden, beginnen in der ersten Spalte
   (am Beginn der Zeile). Alle anderen Zeilen sollten wie dargestellt durch
   Leerzeichen oder Tabulatoren eingeru:ckt werden.

  26.2.1. Grundlegende Konfiguration

   Um eine PPP-Verbindung zu konfigurieren, tragen Sie zuerst die
   Zugangsdaten des ISPs in /etc/ppp/ppp.conf ein. Diese Datei wird wie folgt
   beschrieben:

 1     default:
 2       set log Phase Chat LCP IPCP CCP tun command
 3       ident user-ppp VERSION
 4       set device /dev/cuau0
 5       set speed 115200
 6       set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
 7                 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
 8       set timeout 180
 9       enable dns
 10
 11    provider:
 12      set phone "(123) 456 7890"
 13      set authname foo
 14      set authkey bar
 16      set timeout 300
 17      set ifaddr x.x.x.x/0 y.y.y.y/0 255.255.255.255 0.0.0.0
 18      add default HISADDR

   Zeile 1:

           Gibt den Standardeintrag an. Befehle dieses Eintrags (Zeile 2 bis
           9) werden automatisch ausgefu:hrt, wenn ppp la:uft.

   Zeile 2:

           Schaltet die ausfu:hrliche Protokollierung ein. Sobald die
           Verbindung zufriedenstellend funktioniert, ko:nnen Sie diese Zeile
           verku:rzen:

 set log phase tun

           Dies verhindert ein u:berma:ssiges Anwachsen der Logdateien.

   Zeile 3:

           U:bermittelt die Version von ppp(8) an die PPP-Software der
           Gegenstelle.

   Zeile 4:

           Gibt das Device an, an dem das Modem angeschlossen ist. COM1
           entspricht /dev/cuad0 und COM2 entspricht /dev/cuad1.

   Zeile 5:

           Legt die Verbindungsgeschwindigkeit fest. Falls ein Wert von
           115200 bei a:lteren Modems nicht funktioniert, versuchen Sie es
           stattdessen mit 38400.

   Zeile 6 & 7:

           Die Zeichenfolge fu:r die Einwahl in einer expect-send Syntax.
           Weitere Informationen finden Sie in chat(8).

           Beachten Sie, dass dieser Befehl aufgrund der besseren Lesbarkeit
           auf der na:chsten Zeile weitergeht. Das kann fu:r jeden Befehl in
           ppp.conf gelten, wenn \ das letzte Zeichen in einer Zeile ist.

   Zeile 8:

           Legt den Zeitrahmen in Sekunden fest, innerhalb dessen eine
           Reaktion erfolgen muss.

   Zeile 9:

           Weist die Gegenstelle an, die DNS-Einstellungen zu besta:tigen.
           Wenn es im lokalen Netzwerk einen DNS-Server gibt, sollte diese
           Zeile auskommentiert oder gelo:scht werden.

   Zeile 10:

           Eine leere Zeile zur besseren Lesbarkeit. Leere Zeilen werden von
           ppp(8) ignoriert.

   Zeile 11:

           Bestimmt einen Provider, namens provider. Wenn Sie hier den Namen
           des ISP einsetzen, ko:nnen Sie spa:ter die Verbindung mit load ISP
           aufbauen.

   Zeile 12:

           Gibt die Telefonnummer des Providers an. Mehrere Telefonnummern
           ko:nnen angegeben werden, indem Doppelpunkte (:) oder Pipe-Zeichen
           (|) als Trennzeichen verwendet werden. Wenn Sie die verschiedenen
           Nummern abwechselnd verwenden mo:chten, sollten Sie die Nummern
           durch einen Doppelpunkt trennen. Wenn Sie immer die erste Nummer
           verwenden mo:chten und die anderen nur zum Einsatz kommen sollen,
           wenn eine Einwahl mit der ersten Telefonnummer nicht mo:glich ist,
           sollten Sie das Pipe-Zeichen zur Trennung verwenden. Sie sollten
           immer die gesamte Reihe der Telefonnummern in Anfu:hrungszeichen
           (") setzen, um Wa:hlfehler zu vermeiden.

   Zeile 13 & 14:

           Gibt den Benutzernamen und das Passwort fu:r den ISP an.

   Zeile 15:

           Setzt einen Zeitrahmen in Sekunden, innerhalb dessen eine Reaktion
           erfolgen muss. In diesem Fall, wird die Verbindung nach
           300 Sekunden automatisch geschlossen, wenn keine Aktivita:t zu
           verzeichnen ist. Wenn Sie keinen Zeitrahmen festlegen wollen, nach
           dessen U:berschreiten die Verbindung geschlossen wird, ko:nnen Sie
           diesen Wert auf 0 setzen.

   Zeile 16:

           Legt die Adresse fu:r die Schnittstelle fest. Die verwendeten
           Werte ha:ngen davon ab, ob Sie vom ISP eine statische IP-Adresse
           zugeteilt bekommen haben, oder ob beim Verbindungsaufbau eine
           dynamische Adresse ausgehandelt wird.

           Wenn Ihnen der ISP keine statische IP-Adresse zugeteilt hat,
           a:ndern Sie diese Zeile auf den folgenden Wert. Dadurch weiss
           ppp(8), dass es das IP Configuration Protocol (IPCP) benutzen soll
           um die dynamische IP-Adresse auszuhandeln.

 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0

   Zeile 17:

           Fu:gt eine Defaultroute fu:r das Gateway hinzu. Belassen Sie die
           Zeile so wie sie ist. HISADDR wird dabei durch die in Zeile 16
           angegebene Gateway-Adresse ersetzt. Wichtig ist, dass diese Zeile
           nach Zeile 16 erscheint.

   Je nachdem, ob ppp(8) manuell oder automatisch gestartet wird, muss
   vielleicht auch /etc/ppp/ppp.linkup mit dem folgenden Inhalt erstellt
   werden. Diese Datei ist erforderlich, falls ppp im -auto-Modus ausgefu:rht
   wird. Die Datei wird verwendet, nachdem die Verbindung hergestellt wurde.
   An diesem Punkt wird die IP-Adresse zugewiesen und es sollte nun mo:glich
   sein, Eintra:ge in die Routingtabelle hinzuzufu:gen. Stellen Sie bei der
   Bearbeitung der Datei sicher, dass der Eintrag fu:r provider mit dem Wert
   aus Zeile 11 in ppp.conf u:bereinstimmt.

 provider:
       add default HISADDR

   Diese Datei wird ebenfalls beno:tigt, wenn bei einer Konfiguration mit
   statischer IP-Adresse die Adresse des Standard-Gateways "erraten" wird. In
   solchen Fa:llen entfernen Sie Zeile 17 aus ppp.conf und erstellen Sie
   /etc/ppp/ppp.linkup mit den oben genannten Zeilen. Weitere Beispiele fu:r
   diese Datei finden Sie in /usr/share/examples/ppp/.

   In der Voreinstellung muss ppp als root ausgefu:hrt werden. Um diesen
   Standard zu a:ndern, muss das Konto eines Benutzers, der ppp ausfu:hren
   soll, zur Gruppe network in /etc/group hinzugefu:gt werden.

   Danach geben Sie dem Benutzer ebenfalls Zugriff auf einen oder mehrere
   Abschnitte der Konfigurationsdatei /etc/ppp/ppp.conf geben mu:ssen, indem
   Sie den allow Befehl verwenden. Um beispielsweise den Benutzern fred und
   mary die Berechtigung fu:r den Eintrag provider: zu geben, fu:gen Sie in
   der Sektion provider folgende Zeile ein:

 allow users fred mary

   Wenn dieser Befehl stattdessen in der Sektion default verwendet wird,
   erhalten die angegebenen Benutzer vollsta:ndigen Zugriff.

  26.2.2. Fortgeschrittene Konfiguration

   Es ist mo:glich PPP so zu konfigurieren, dass bei Bedarf DNS und NetBIOS
   Nameserveradressen bereitgestellt werden.

   Um diese Erweiterungen fu:r die PPP Version 1.x zu aktivieren, sollte der
   entsprechende Abschnitt der Datei /etc/ppp/ppp.conf um folgende Zeilen
   erga:nzt werden:

 enable msext
 set ns 203.14.100.1 203.14.100.2
 set nbns 203.14.100.5

   Fu:r PPP Version 2 und ho:her:

 accept dns
 set dns 203.14.100.1 203.14.100.2
 set nbns 203.14.100.5

   Damit werden den Clients die prima:ren und sekunda:ren Nameserveradressen
   sowie ein NetBIOS Nameserver-Host mitgeteilt.

   In Version 2 und ho:her verwendet PPP die Werte, die in /etc/resolv.conf
   zu finden sind, wenn die Zeile set dns weggelassen wird.

    26.2.2.1. Authentifizierung durch PAP und CHAP

   Einige ISPs haben ihr System so eingerichtet, dass der
   Authentifizierungsteil eines Verbindungsaufbaus mit Hilfe von PAP oder
   CHAP-Mechanismen durchgefu:hrt wird. Wenn das der Fall sein sollte, wird
   der ISP bei der Verbindung keinen login:-Prompt pra:sentieren, sondern
   sofort mit der Aushandlung der PPP-Verbindung beginnen.

   PAP ist nicht so sicher wie CHAP, doch die Sicherheit ist hierbei
   normalerweise kein Problem, da Passwo:rter, obgleich von PAP im Klartext
   versandt, lediglich u:ber die serielle Verbindung verschickt werden. Es
   gibt fu:r Angreifer wenig Mo:glichkeiten zu "lauschen".

   Die folgenden Vera:nderungen mu:ssen vorgenommen werden:

 13      set authname MyUserName
 14      set authkey MyPassword
 15      set login

   Zeile 13:

           Diese Zeile legt den PAP/CHAP Benutzernamen fest. Sie mu:ssen den
           richtigen Wert fu:r MyUserName eingeben.

   Zeile 14:

           Diese Zeile legt das PAP/CHAP Passwort fest. Sie mu:ssen den
           richtigen Wert fu:r MyPassword eingeben. Sie ko:nnen eine
           zusa:tzliche Zeile, wie etwa:

 16      accept PAP

           oder

 16      accept CHAP

           verwenden, um deutlich zu machen, dass dies beabsichtigt ist, aber
           sowohl PAP wie auch CHAP als standardma:ssig akzeptiert werden.

   Zeile 15:

           Der ISP wird normalerweise keine Anmeldung am Server verlangen,
           wenn PAP oder CHAP verwendet wird. Sie mu:ssen deshalb den String
           "set login" deaktivieren.

    26.2.2.2. PPP NAT benutzen

   PPP kann Network Address Translation (NAT) ohne Hilfe des Kernels
   durchfu:hren. Wenn Sie diese Funktion benutzen wollen, fu:gen Sie die
   folgende Zeile in /etc/ppp/ppp.conf ein:

 nat enable yes

   NAT kann mit der Option -nat auf der Kommandozeile aktiviert werden.
   Weiterhin kann NAT in /etc/rc.conf mit der Variablen ppp_nat aktiviert
   werden. Dies ist auch die Voreinstellung.

   Die nachstehende /etc/ppp/ppp.conf benutzt NAT fu:r bestimmte eingehende
   Verbindungen:

 nat port tcp 10.0.0.2:ftp ftp
 nat port tcp 10.0.0.2:http http

   Wenn Sie Verbindungen von aussen u:berhaupt nicht trauen, benutzen Sie die
   folgende Zeile:

 nat deny_incoming yes

  26.2.3. Abschliessende Systemkonfiguration

   Obwohl ppp nun konfiguriert ist, mu:ssen noch einige A:nderungen in
   /etc/rc.conf vorgenommen werden.

   Gehen Sie diese Datei von oben nach unten durch, und stellen Sie als
   Erstes sicher, dass die Zeile hostname= vorhanden ist:

 hostname="foo.example.com"

   Wenn der ISP eine statische IP-Adresse und einen Namen zugewiesen hat,
   verwenden Sie diesen Namen als Hostnamen.

   Schauen Sie nach der Variable network_interfaces. Wenn Sie das System so
   konfigurieren mo:chten, dass es bei Bedarf eine Verbindung zum ISP
   aufbaut, sollten Sie das Gera:t tun0 zu der Liste hinzufu:gen oder es
   andernfalls entfernen.

 network_interfaces="lo0 tun0"
 ifconfig_tun0=

  Anmerkung:

   Die Variable ifconfig_tun0 sollte leer sein und eine Datei namens
   /etc/start_if.tun0 sollte erstellt werden. Diese Datei sollte die
   nachfolgende Zeile enthalten:

 ppp -auto mysystem

   Dieses Skript startet den ppp-Daemon im Automatik-Modus. Es wird bei der
   Netzwerkkonfiguration ausgefu:hrt. Wenn der Rechner als Gateway fu:r ein
   LAN fungiert, mo:chten Sie vielleicht auch die Option -alias verwenden. In
   der Manualpage sind weitere Einzelheiten zu finden.

   Stellen Sie sicher, dass der Start eines Routerprogramms in /etc/rc.conf
   wie folgt deaktiviert ist:

 router_enable="NO"

   Es ist wichtig, dass der routed-Daemon nicht gestartet wird da routed dazu
   tendiert, die von ppp erstellten Eintra:ge der Standardroute zu
   u:berschreiben.

   Es ist ausserdem sinnvoll, darauf zu achten, dass die Zeile sendmail_flags
   nicht die Option -q entha:lt, da sendmail sonst ab und zu die
   Netzwerkverbindung pru:fen wird, was mo:glicherweise dazu fu:hrt, dass
   sich der Rechner einwa:hlt. Sie ko:nnen hier Folgendes angeben:

 sendmail_flags="-bd"

   Der Nachteil dieser Lo:sung ist, dass Sie sendmail nach jedem Aufbau einer
   ppp-Verbindung auffordern mu:ssen, die Mailwarteschlange zu u:berpru:fen.
   Verwenden Sie den Befehl !bg in ppp.linkup, um dies zu automatisieren:

 1     provider:
 2       delete ALL
 3       add 0 0 HISADDR
 4       !bg sendmail -bd -q30m

   Alternativ ist es mo:glich, einen "dfilter" einzusetzen, um SMTP-Verkehr
   zu blockieren. Weitere Einzelheiten hierzu finden Sie in den
   Beispieldateien.

  26.2.4. ppp benutzen

   Das Einzige, was nun noch zu tun bleibt, ist den Rechner neu zu starten.
   Nach dem Neustart ko:nnen Sie entweder:

 # ppp

   und danach dial provider eingeben, um eine PPP-Sitzung zu starten, oder
   Sie geben:

 # ppp -auto provider

   ein, um ppp bei Datenverkehr aus dem Netzwerk heraus, automatisch eine
   Verbindung herstellen zu lassen (vorausgesetzt Sie haben kein
   start_if.tun0 Skript erstellt).

   Es ist mo:glich, dem Programm ppp Befehle zu erteilen, wa:hrend es im
   Hintergrund la:uft. Dazu ist jedoch die Einrichtung eines passenden
   Diagnose-Ports erforderlich. Erga:nzen Sie hierzu die Konfigurationsdatei
   um folgende Zeile:

 set server /var/run/ppp-tun%d DiagnosticPassword 0177

   Damit wird PPP angewiesen, auf den angegebenen UNIX(R)-Domainsocket zu
   ho:ren und Clients nach dem angegebenen Passwort zu fragen, bevor der
   Zugang gewa:hrt wird. Das %d wird durch die Nummer des benutzten
   tun-Devices ersetzt.

   Wenn ein Socket eingerichtet ist, kann das Programm pppctl(8) in Skripten
   verwendet werden, mit denen in das laufende Programm eingegriffen wird.

  26.2.5. Einwa:hlverbindungen konfigurieren

   Abschnitt 25.4, "Einwa:hlverbindungen" bietet eine gute Beschreibung, wie
   Einwa:hlverbindungen unter Verwendung von getty(8) genutzt werden ko:nnen.

   Eine Alternative zu getty ist comms/mgetty+sendfax, eine raffiniertere
   Version von getty, die mit Blick auf Einwa:hlverbindungen entworfen wurde.

   Der Vorteil von mgetty ist, dass es auf aktive Weise mit Modems spricht,
   das heisst wenn ein Port in /etc/ttys ausgeschaltet ist, wird das Modem
   nicht auf Anrufe reagieren.

   Spa:tere Versionen von mgetty (von 0.99beta aufwa:rts) unterstu:tzen auch
   die automatische Erkennung von PPP-Streams, was Clients den skriptlosen
   Zugang zum Server erlaubt.

   http://mgetty.greenie.net/doc/mgetty_toc.html entha:lt weitere
   Informationen zu mgetty.

   In der Voreinstellung wird comms/mgetty+sendfax mit der Option AUTO_PPP
   konfiguriert und kompiliert. Dadurch kann mgetty die LCP Phase von
   PPP-Verbindungen erkennen und automatisch eine ppp-Shell starten. Da
   hierbei jedoch die Login/Passwort-Sequenz nicht durchlaufen wird, ist es
   notwendig, Benutzer durch PAP oder CHAP zu authentifizieren.

   In diesem Abschnitt wird davon ausgegangen, dass der Benutzer den Port
   comms/mgetty+sendfax auf seinem System kompiliert und installiert hat.

   Stellen Sie sicher, dass /usr/local/etc/mgetty+sendfax/login.config
   Folgendes entha:lt:

 /AutoPPP/ -     - /etc/ppp/ppp-pap-dialup

   Hierdurch wird mgetty angewiesen, ppp-pap-dialup fu:r die erkannten
   PPP-Verbindungen auszufu:hren.

   Erstellen Sie eine ausfu:hrbare Datei namens /etc/ppp/ppp-pap-dialup mit
   folgendem Inhalt:

 #!/bin/sh
 exec /usr/sbin/ppp -direct pap$IDENT

   Erstellen Sie bitte fu:r jede Einwa:hlverbindung, die Sie in /etc/ttys
   ermo:glicht haben, einen korrespondierenden Eintrag in der Datei
   /etc/ppp/ppp.conf. Diese Eintra:ge ko:nnen problemlos, mit den
   Definitionen die weiter oben gemacht wurden, koexistieren.

 pap:
   enable pap
   set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40
   enable proxy

   Jeder Benutzer, der sich auf diese Weise anmeldet, beno:tigt einen
   Benutzernamen und ein Passwort in der Datei /etc/ppp/ppp.secret. Sie haben
   auch die Mo:glichkeit, Benutzer mit Hilfe von PAP zu authentifizieren,
   indem Sie in /etc/passwd folgende Option hinzufu:gen:

 enable passwdauth

   Um bestimmten Benutzern eine statische IP-Adresse zuzuweisen, ko:nnen Sie
   die Adresse als drittes Argument in /etc/ppp/ppp.secret angeben. Beispiele
   finden Sie in /usr/share/examples/ppp/ppp.secret.sample.

26.3. Probleme bei PPP-Verbindungen

   Dieser Abschnitt behandelt Probleme, die auftauchen ko:nnen, wenn PPP
   u:ber ein Modem verwendet wird. Einige ISPs verwenden ssword, andere
   verwenden password. Wenn das Einwahlskript falsch ist, scheitert die
   Anmeldung. U:blicherweise suchen Sie nach Fehlern der PPP-Verbindung indem
   Sie sich manuell verbinden.

  26.3.1. Gera:tedateien u:berpru:fen

   Wenn Sie einen eigenen Kernel verwenden, stellen Sie sicher, dass die
   folgende Zeile in der Kernelkonfigurationsdatei vorhanden ist:

 device   uart

   Das uart-Gera:t ist bereits im GENERIC-Kernel vorhanden, deshalb sind in
   diesem Fall keine zusa:tzlichen Schritte vonno:ten. Kontrollieren Sie die
   Ausgabe von dmesg:

 # dmesg | grep uart

   In der Ausgabe sollten die entsprechenden uart-Gera:te, beispielsweise
   uart1 (COM2), angezeigt werden. Wird ein passendes Gera:t angezeigt,
   braucht der Kernel nicht neu erstellt werden. Wenn das Modem an uart1
   angeschlossen ist, ist /dev/cuau1 die dazugeho:rende Gera:tedatei.

  26.3.2. Manuelle Verbindungen

   Ein Verbindungsaufbau zum Internet durch manuelle Steuerung von ppp geht
   schnell, ist einfach und stellt einen guten Weg dar, eine Verbindung auf
   Fehler hin zu u:berpru:fen oder einfach Informationen daru:ber zu sammeln,
   wie der ISP Verbindungen handhabt. Lassen Sie uns PPP von der
   Kommandozeile aus starten. Beachten Sie, dass in allen Beispielen example
   der Hostname der Maschine ist, auf der PPP la:uft. ppp starten Sie wie
   folgt:

 # ppp

 ppp ON example> set device /dev/cuau1

   Mit dem zweiten Befehl wird das Gera:t cuau1 festgelegt.

 ppp ON example> set speed 115200

   Dieser Befehlt setzt die Verbindungsgeschwindigkeit auf 115200 kbps.

 ppp ON example> enable dns

   Dieser Befehl weist ppp an, den Resolver zu konfigurieren und in
   /etc/resolv.conf Eintra:ge fu:r den Nameserver hinzuzufu:gen. Falls ppp
   nicht in der Lage ist den Hostnamen selbst zu bestimmen, kann dieser auch
   spa:ter manuell eingetragen werden.

 ppp ON example> term

   Wechselt in den "Terminal"-Modus, um das Modem manuell kontrollieren zu
   ko:nnen.

 deflink: Entering terminal mode on /dev/cuau1
 type '~h' for help

 at
 OK
 atdt123456789

   Sie verwenden at zur Initialisierung des Modems und dann atdt sowie die
   Nummer des ISPs, um den Einwa:hlprozess zu starten.

 CONNECT

   Dies ist die Besta:tigung, dass eine Verbindung aufgebaut wurde. Falls wir
   Verbindungsprobleme bekommen, die nicht mit der Hardware zusammenha:ngen,
   werden wir an dieser Stelle ansetzen mu:ssen, um eine Lo:sung zu finden.

 ISP Login:myusername

   Hier werden Sie nach einem Benutzernamen gefragt. Geben Sie am Prompt den
   Namen ein, den Ihnen der ISP zur Verfu:gung gestellt hat.

 ISP Pass:mypassword

   An dieser Stelle mu:ssen Sie das Passwort angeben, das Ihnen vom ISP
   vorgegeben wurde. Das Passwort wird, analog dem normalen Anmeldevorgang,
   nicht angezeigt.

 Shell or PPP:ppp

   Abha:ngig vom ISP, kann es sein, dass dieser Prompt nicht erscheint. Wir
   werden hier gefragt, ob wir eine Shell beim Provider verwenden oder ppp
   starten wollen. Weil wir eine Internetverbindung aufbauen wollen, haben
   wir uns in diesem Beispiel fu:r ppp entschieden.

 Ppp ON example>

   Beachten Sie, dass sich in diesem Beispiel das erste p in einen
   Grossbuchstaben verwandelt hat. Dies zeigt, dass wir erfolgreich eine
   Verbindung zum ISP hergestellt haben.

 PPp ON example>

   An dieser Stelle haben wir uns erfolgreich beim ISP authentifiziert und
   warten darauf, dass uns eine IP-Adresse zugewiesen wird.

 PPP ON example>

   Wir haben uns mit der Gegenstelle auf eine IP-Adresse geeinigt und den
   Verbindungsaufbau erfolgreich abgeschlossen.

 PPP ON example> add default HISADDR

   Hier geben wir unsere Standardroute an. Weil zu diesem Zeitpunkt unsere
   einzige Verbindung zu unserer Gegenstelle besteht, mu:ssen wir dies tun,
   bevor wir Kontakt zur Aussenwelt aufnehmen ko:nnen. Falls dies aufgrund
   bestehender Routen nicht funktionieren sollte, ko:nnen Sie ein
   Ausrufungszeichen ! vor add setzen. Sie ko:nnen diese Standardroute aber
   auch vor dem eigentlichen Verbindungsaufbau angeben und PPP wird
   entsprechend eine neue Route aushandeln.

   Wenn alles gut ging, sollten wir nun eine aktive Internetverbindung haben,
   die wir mit Ctrl+z in den Hintergrund schicken ko:nnen. Wenn Sie
   feststellen, dass PPP wieder zu ppp wird, ist die Verbindung abgebrochen.
   Es ist gut dies zu wissen, weil dadurch der Verbindungsstatus angezeigt
   wird. Grosse Ps zeigen an, dass eine Verbindung zum ISP besteht und kleine
   ps zeigen an, dass keine Verbindung besteht.

  26.3.3. Fehlersuche

   Wenn keine Verbindung aufgebaut werden kann, schalten Sie die
   Hardware-Flusssteuerung CTS/RTS aus, indem Sie die Option set ctsrts off
   verwenden. Dies ist zumeist dann der Fall, wenn Sie mit einem PPP-fa:higen
   Terminalserver verbunden sind. Hier bleibt PPP bei dem Versuch ha:ngen,
   Daten u:ber die Nachrichtenverbindung zu schicken, weil auf einCTS-Signal
   (Clear-to-Send) gewartet wird, das vielleicht nie kommt. Wenn Sie diese
   Option jedoch gebrauchen, sollten Sie auch die Option set accmap
   verwenden, die erforderlich sein kann, um bestimmte Hardware zu
   kontrollieren, die auf die U:bertragung bestimmter Zeichen zwischen den
   Kommunikations-Endpunkten (zumeist XON/XOFF) angewiesen ist. Die
   Manualpage ppp(8) bietet mehr Informationen zu dieser Option und ihrer
   Verwendung.

   Fu:r ein a:lteres Modem beno:tigen Sie vielleicht die Option set parity
   even. Standardma:ssig wird keine Parita:t vorausgesetzt, sie ist aber fu:r
   die Fehlerpru:fung bei a:lteren Modems und bei bestimmten ISPs
   erforderlich.

   PPP kehrt mo:glicherweise nicht in den Befehlsmodus zuru:ck, was
   normalerweise auf einen Fehler bei der Aushandlung hinweist, wobei der ISP
   wartet, dass der Aushandlungsprozess beginnt. Die Option ~p erzwingt in
   diesem Fall den Beginn des Aushandlungsprozesses.

   Wenn der Login-Prompt nie erscheint, wird wahrscheinlich PAP oder CHAP
   fu:r die Authentifizierung beno:tigt. Um PAP oder CHAP zu verwenden,
   erga:nzen Sie PPP um folgende Optionen, bevor Sie in den Terminalmodus
   wechseln:

 ppp ON example> set authname myusername

   Hierbei sollte myusername durch den Benutzernamen ersetzt werden, den Sie
   vom ISP bekommen haben.

 ppp ON example> set authkey mypassword

   mypassword sollten Sie durch das Passwort ersetzen, das Ihnen der ISP
   zugewiesen hat.

   Wenn die Verbindung aufgebaut wird, Sie aber keine Rechner unter dem
   Doma:nen-Namen erreichen ko:nnen, versuchen Sie, einen Rechner mit ping(8)
   und seiner IP-Adresse zu erreichen. Wenn 100% der Pakete verloren gehen,
   ist es sehr wahrscheinlich, dass keine Standardroute zugewiesen wurde.
   U:berpru:fen Sie, ob wa:hrend des Verbindungsaufbaus die Option add
   default HISADDR gesetzt war. Wenn Sie zu einer entfernten IP-Adresse eine
   Verbindung aufbauen ko:nnen, ist es mo:glich, dass die Adresse eines
   Nameservers nicht in /etc/resolv.conf eingetragen wurde. Diese Datei
   sollte folgendermassen aussehen:

 domain example.com
 nameserver x.x.x.x
 nameserver y.y.y.y

   Dabei sollten x.x.x.x und y.y.y.y durch die IP-Adressen der DNS-Server des
   ISPs ersetzt werden.

   Mit syslog(3) kann die PPP-Verbindung protokolliert werden. Fu:gen Sie
   einfach die folgende Zeile in /etc/syslog.conf ein:

 !ppp
 *.*     /var/log/ppp.log

26.4. PPP over Ethernet (PPPoE)

   Dieser Abschnitt beschreibt, wie Sie PPP over Ethernet (PPPoE) einrichten.

   Dies ist ein Beispiel einer funktionierenden ppp.conf:

 default:
   set log Phase tun command # you can add more detailed logging if you wish
   set ifaddr 10.0.0.1/0 10.0.0.2/0

 name_of_service_provider:
   set device PPPoE:xl1 # replace xl1 with your Ethernet device
   set authname YOURLOGINNAME
   set authkey YOURPASSWORD
   set dial
   set login
   add default HISADDR

   Als root, geben Sie ein:

 # ppp -ddial name_of_service_provider

   Fu:gen Sie folgende Zeilen in /etc/rc.conf ein:

 ppp_enable="YES"
 ppp_mode="ddial"
 ppp_nat="YES"   # if you want to enable nat for your local network, otherwise NO
 ppp_profile="name_of_service_provider"

  26.4.1. Verwendung einer PPPoE-Dienstbezeichnung (service tag)

   Manchmal kann es notwendig sein, eine Dienstbezeichnung (service tag) zu
   verwenden, um eine Verbindung aufzubauen. Dienstbezeichnungen werden
   eingesetzt, um zwischen verschiedenen PPPoE-Servern unterscheiden zu
   ko:nnen, die einem bestehenden Netzwerk zugeteilt sind.

   Die erforderlichen Dienstbezeichnungen sollten in der Dokumentation, zu
   finden sein, die der ISP zur Verfu:gung gestellt hat.

   Als letzte Mo:glichkeit ko:nnten Sie versuchen, net/rr-pppoe zu
   installieren. Bedenken Sie aber, dass dadurch Daten Ihres Modems gelo:scht
   werden ko:nnen, so dass es nicht mehr benutzt werden kann. U:berlegen Sie
   also genau, ob Sie dies machen wollen. Installieren Sie einfach das
   Programm, das Ihnen der Provider zusammen mit dem Modem geliefert hat.
   Gehen Sie dann in das Menu: System dieses Programms. Der Name des Profils,
   sollte in der Liste aufgefu:hrt sein. Normalerweise ist dies ISP.

   Der Name des Profils (service tag) wird im Eintrag fu:r die
   PPPoE-Konfiguration in der Datei ppp.conf verwendet, als der Teil des
   Befehls set device (die Manualpage ppp(8) entha:lt Einzelheiten hierzu),
   der den Provider angibt. Dieser Eintrag sollte folgendermassen aussehen:

 set device PPPoE:xl1:ISP

   Vergessen Sie nicht, statt xl1 das richtige Gera:t fu:r die Netzwerkkarte
   anzugeben.

   Denken Sie auch daran, ISP durch das Profil zu ersetzen.

   Weitere Informationen finden Sie unter Cheaper Broadband with FreeBSD on
   DSL von Renaud Waldura.

  26.4.2. PPPoE mit einem 3Com(R) HomeConnect(R) ADSL Modem Dual Link

   Dieses Modem folgt nicht den in RFC 2516 festgelegten Spezifikationen.

   Um FreeBSD in die Lage zu versetzen, mit diesem Gera:t zu kommunizieren,
   muss ein sysctl Befehl angegeben werden. Dies kann beim Systemstart
   automatisch geschehen, indem die Datei /etc/sysctl.conf angepasst wird:

 net.graph.nonstandard_pppoe=1

   oder, wenn der Befehl unmittelbar wirksam werden soll, durch:

 # sysctl net.graph.nonstandard_pppoe=1

   Da hiermit eine systemweit gu:ltige Einstellung vorgenommen wird, ist es
   nicht mo:glich, gleichzeitig mit einem normalen PPPoE-Client oder Server
   und einem 3Com(R) HomeConnect(R) ADSL Modem zu kommunizieren.

26.5. PPP over ATM (PPPoA)

   Nachfolgend wird beschrieben, wie PPP over ATM (PPPoA) eingerichtet wird.
   PPPoA ist vor allem unter europa:ischen DSL-Providern popula:r.

  26.5.1. Die Verwendung von mpd

   Sie ko:nnen mpd verwenden, um zu einer Reihe von Diensten, insbesondere
   PPTP-Diensten eine Verbindung herzustellen. Das Programm kann aus den
   Ports oder als Paket net/mpd5 installiert werden. Viele ADSL Modems sind
   auf einen PPTP-Tunnel zwischen dem Modem und dem Rechner angewiesen.

   Sobald das Programm installiert ist, mu:ssen Sie es nach den Vorgaben des
   Providers konfigurieren. Der Port installiert auch einige gut
   dokumentierte Beispielkonfigurationsdateien in /usr/local/etc/mpd/. Ein
   kompletter Leitfaden zur Konfiguration von mpd ist unter
   /usr/local/share/doc/mpd/ zu finden. Hier ist eine Beispielkonfiguration,
   um mit mpd eine Verbindung zu einem ADSL-Dienst aufzubauen. Die
   Konfiguration ist auf zwei Dateien verteilt. Zuna:chst die Datei mpd.conf:

  Anmerkung:

   Dieses Beispiel fu:r mpd.conf funktioniert nur mit mpd 4.x.

 default:
     load adsl

 adsl:
     new -i ng0 adsl adsl
     set bundle authname username 1
     set bundle password password 2
     set bundle disable multilink

     set link no pap acfcomp protocomp
     set link disable chap
     set link accept chap
     set link keep-alive 30 10

     set ipcp no vjcomp
     set ipcp ranges 0.0.0.0/0 0.0.0.0/0

     set iface route default
     set iface disable on-demand
     set iface enable proxy-arp
     set iface idle 0

     open

   1 Der Benutzername, den Sie zur Authentifizierung bei Ihrem ISP verwenden. 
   2 Das Passwort, das Sie zur Authentifizierung bei Ihrem ISP verwenden.     

   Die Datei mpd.links entha:lt Informationen u:ber die Verbindung(en), die
   Sie aufbauen mo:chten. Eine Beispieldatei mpd.links, die das vorige
   Beispiel erga:nzt, wird unten angegeben:

 adsl:
     set link type pptp
     set pptp mode active
     set pptp enable originate outcall
     set pptp self 10.0.0.1 1
     set pptp peer 10.0.0.138 2

   1 Die IP-Adresse des FreeBSD-Rechners von dem aus Sie mpd verwenden.       
   2 Die IP-Adresse des ADSL-Modems. Das Alcatel SpeedTouch(TM) Home hat die  
     Adresse 10.0.0.138 voreingestellt.                                       

   Ein Verbindungsaufbau kann einfach durch Eingabe des folgenden Befehls als
   root gestartet werden:

 # mpd -b adsl

   Sie ko:nnen sich den Status der Verbindung durch folgenden Befehl anzeigen
   lassen:

 % ifconfig ng0
 ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
      inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff

   Die Verwendung von mpd ist der empfehlenswerteste Weg, um mit FreeBSD eine
   Verbindung zu einem ADSL-Dienst aufzubauen.

  26.5.2. Die Verwendung von pptpclient

   Es ist ausserdem mo:glich, mit FreeBSD eine Verbindung zu anderen
   PPPoA-Diensten aufzubauen. Dazu wird net/pptpclient verwendet.

   Um mit net/pptpclient eine Verbindung zu einem DSL-Dienst aufbauen zu
   ko:nnen, mu:ssen Sie den entsprechenden Port bzw. das Paket installieren
   und /etc/ppp/ppp.conf bearbeiten. Eine Beispieldatei fu:r ppp.conf ist
   weiter unten angegeben. Weitere Informationen zu den Optionen von ppp.conf
   finden Sie in ppp(8).

 adsl:
  set log phase chat lcp ipcp ccp tun command
  set timeout 0
  enable dns
  set authname username 1
  set authkey password 2
  set ifaddr 0 0
  add default HISADDR

   1   Der Benutzername fu:r den Zugang beim DSL-Provider.  
   2   Das Passwort fu:r Ihren Account.                     

  Warnung:

   Weil das Passwort in ppp.conf im Klartext hinzugefu:gt wird, sollten Sie
   sicherstellen, dass niemand den Inhalt dieser Datei lesen kann:

 # chown root:wheel /etc/ppp/ppp.conf
 # chmod 600 /etc/ppp/ppp.conf

   Dies wird einen Tunnel fu:r eine PPP-Session zum DSL-Router o:ffnen.
   Ethernet-DSL-Modems haben eine vorkonfigurierte LAN-IP-Adresse, mit der
   Sie eine Verbindung aufbauen. Im Falle des Alcatel SpeedTouch(TM) Home
   handelt es sich dabei um die Adresse 10.0.0.138. In der Dokumentation des
   Routers sollte angegeben sein, welche Adresse das Gera:t verwendet. Um den
   Tunnel zu o:ffnen und eine PPP-Session zu starten, fu:hren Sie folgenden
   Befehl aus:

 # pptp address adsl

  Tipp:

   Wenn Sie ein kaufma:nnisches Und ("&") an das Ende dieses Kommandos
   anfu:gen, wird pptp den Prompt zuru:ckgeben.

   Ein virtuelles Tunnel-Device tun wird fu:r das Zusammenspiel der Prozesse
   pptp und ppp geschaffen. Wenn Sie den Prompt zuru:ckerhalten haben oder
   der pptp-Prozess das Vorliegen einer Verbindung besta:tigt, ko:nnen Sie
   den Tunnel folgendermassen u:berpru:fen:

 % ifconfig tun0
 tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
         inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00
         Opened by PID 918

   Wenn die Verbindung fehlschla:gt, u:berpru:fen Sie die Konfiguration des
   Routers, den Sie normalerweise mit einem Web-Browser erreichen ko:nnen.
   Pru:fen Sie auch die Ausgabe des Befehls pptp und die Logdatei
   /var/log/ppp.log.

Kapitel 27. Elektronische Post (E-Mail)

   Urspru:glicher Text von Bill Lloyd.
   Neugeschrieben von Jim Mock.
   U:bersetzt von Robert Drehmel.
   Inhaltsverzeichnis

   27.1. Terminologie

   27.2. U:bersicht

   27.3. E-Mail Komponenten

   27.4. Sendmail-Konfigurationsdateien

   27.5. Wechseln des Mailu:bertragungs-Agenten

   27.6. Fehlerbehebung

   27.7. Weiterfu:hrende Themen

   27.8. Ausgehende E-Mail u:ber einen Relay versenden

   27.9. E-Mail u:ber Einwahl-Verbindungen

   27.10. SMTP-Authentifizierung

   27.11. E-Mail-Programme

   27.12. E-Mails mit fetchmail abholen

   27.13. E-Mails mit procmail filtern

27.1. Terminologie

   Das Akronym MTA steht fu:r Mail Transfer Agent was u:bersetzt
   "Mailu:bertragungs-Agent" bedeutet.

   Wa:hrend die Bezeichnung Server-Da:mon die Komponente eines MTA benennt,
   die fu:r eingehende Verbindungen zusta:ndig ist, wird mit dem Begriff
   Mailer o:fters die Komponente des MTA bezeichnet, die E-Mails versendet.

27.2. U:bersicht

   "Elektronische Post", besser bekannt als E-Mail, ist eine der am weit
   verbreitetsten Formen der Kommunikation heutzutage. Dieses Kapitel bietet
   eine grundlegende Einfu:hrung in das Betreiben eines E-Mail-Servers unter
   FreeBSD. Ebenfalls wird der Versand und Empfang von E-Mails unter FreeBSD
   behandelt. Eine umfassende Betrachtung zu diesem Thema finden Sie in den
   Bu:chern, die in Anhang B, Bibliografie aufgelistet sind.

   Dieses Kapitel behandelt die folgenden Punkte:

     * Welche Software-Komponenten beim Senden und Empfangen von
       elektronischer Post involviert sind.

     * Wo sich grundlegende Sendmail Konfigurationsdateien in FreeBSD
       befinden.

     * Den Unterschied zwischen entfernten und lokalen Postfa:chern.

     * Wie man Versender von Spam daran hindern kann, E-Mail-Server
       illegalerweise als Weiterleitung zu verwenden.

     * Wie man einen alternativen MTA installiert und konfiguriert, um
       Sendmail zu ersetzen.

     * Wie man oft auftretende E-Mail-Server Probleme behebt.

     * Wie E-Mails u:ber einen Relay verschickt werden.

     * Wie E-Mails u:ber eine Einwahlverbindung gehandhabt werden.

     * Wie SMTP-Authentifizierung einrichtet wird.

     * Den Empfang und den Versand von E-Mails mithilfe von Programmen wie
       mutt.

     * Wie E-Mails von einem entfernten Server mit POP oder IMAP abgeholt
       werden.

     * Wie eingehende E-Mail automatisch gefiltert wird.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Die Netzwerk-Verbindung richtig einrichten. (Kapitel 30,
       Weiterfu:hrende Netzwerkthemen).

     * Die DNS-Information fu:r einen E-Mail-Server einstellen (Kapitel 28,
       Netzwerkserver).

     * Wissen, wie man zusa:tzliche Dritthersteller-Software installiert
       (Kapitel 4, Installieren von Anwendungen: Pakete und Ports).

27.3. E-Mail Komponenten

   Es gibt fu:nf gro:ssere Komponenten die am Austausch von E-Mails beteiligt
   sind: der Mail User Agent (MUA), der Mail Transfer Agent (MTA), der Mail
   Host, ein entferntes oder lokales Postfach, sowie DNS. Dieser Abschnitt
   entha:lt eine U:bersicht u:ber diese Komponenten.

   Mail User Agent (MUA)

           Der Mail User Agent (MUA) ist das Benutzerprogramm zum Verfassen,
           Senden und Empfangen von E-Mails. Diese Anwendung kann ein
           Kommandozeilenprogramm sein, wie das in FreeBSD enthaltene
           Programm mail, oder ein Programm aus der Ports-Sammlung wie
           beispielsweise mutt, alpine oder elm. In der Ports-Sammlung sind
           auch dutzende von grafischen Programmen verfu:gbar, darunter
           ClawsMail, Evolution und Thunderbird. Einige Unternehmen bieten
           auch ein Web-Mail-Programm an, das u:ber einen Webbrowser
           verwaltet werden kann. Weitere Informationen zur Installation und
           Verwendung von MUAs unter FreeBSD finden Sie im Abschnitt 27.11,
           "E-Mail-Programme".

   Mail Transfer Agent (MTA)

           Der Mail Transfer Agent (MTA) ist ein E-Mail-Server Daemon,
           welcher fu:r dem Empfang von eingehenden E-Mails und fu:r den
           Versand von ausgehenden E-Mails verantwortlich ist. FreeBSD wird
           mit Sendmail als Standard-MTA ausgeliefert, aber es unterstu:tzt
           auch weitere E-Mail-Server, darunter Exim, Postfix und qmail. Die
           Konfiguration von Sendmail wird im Abschnitt 27.4,
           "Sendmail-Konfigurationsdateien" beschrieben. Wenn Sie einen
           anderen MTA aus der Ports-Sammlung installieren, lesen Sie die
           Nachrichten die nach der Installation der Anwendung ausgegeben
           werden, wenn Sie FreeBSD spezifische Informationen beno:tigen.
           Allgemeine Informationen zur Konfiguration finden Sie in der Regel
           auf der Webseite des Herstellers.

   Mail Host und Postfa:cher

           Der Mail Host ist fu:r die Zustellung und das Empfangen von
           E-Mails fu:r den Rechner oder eines Netzwerks zusta:ndig. Der Mail
           Host empfa:ngt alle E-Mails fu:r eine Doma:ne und speichert diese
           entweder im voreingestellten mbox-Format, oder im Maildir-Format.
           Diese E-Mails ko:nnen lokal mit einem Benutzerprogramm MUA gelesen
           werden. Mithilfe von Protokollen wie POP oder IMAP ko:nnen die
           E-Mails auch von entfernten Rechnern gelesen werden. Wenn die
           E-Mails direkt auf dem Mail Host gelesen werden, wird kein POP-
           oder IMAP-Server beno:tigt.

           Um auf entfernte Postfa:cher zuzugreifen, wird ein Zugang zu einem
           POP- oder IMAP-Server beno:tigt. Beide Protokolle ermo:glichen es
           Benutzern, auf ein entferntes Postfach zuzugreifen. IMAP bietet
           gegenu:ber POP einige Vorteiler. Dazu za:hlt die Fa:higkeit eine
           Kopie aller Nachrichten auf einem entfernten Server zu speichern,
           sowie gleichzeitig ablaufende Aktualisierungen. IMAP kann auch
           u:ber langsame Verbindungen nu:tzlich sein, da nicht gleich die
           komplette Nachricht heruntergeladen wird. Weiterhin ko:nnen
           E-Mails auf dem Server durchsucht werden, was den Datenverkehr
           zwischen Clients und dem Server minimiert.

           Die Ports-Sammlung entha:lt einige POP- und IMAP-Server, darunter
           mail/qpopper, mail/imap-uw, mail/courier-imap und mail/dovecot2.

  Warnung:

           Beachten Sie, dass sowohl POP als auch IMAP Daten, wie den
           Benutzernamen und das Passwort, im Klartext u:bertragen. Um die
           U:bermittlung von Daten u:ber diese Protokolle zu schu:tzen,
           ko:nnen Sie Sitzungen u:ber ssh(1) (Abschnitt 13.8.1.2,
           "SSH-Tunnel") tunneln oder SSL (Abschnitt 13.6, "OpenSSL")
           verwenden.

   Domain Name System (DNS)

           Das Domain Name System (DNS) und sein Daemon named spielen eine
           grosse Rolle bei der Auslieferung von E-Mails. Um E-Mails
           auszuliefern, fragt der MTA im DNS den Rechner ab, der E-Mails
           fu:r das Zielsystem entgegennimmt. Der gleiche Vorgang la:uft ab,
           wenn eine E-Mail von einem entfernten Server zum MTA zugestellt
           wird.

           Im DNS werden Rechnernamen auf IP-Adressen abgebildet. Daneben
           werden spezielle Informationen fu:r das Mail-System gespeichert,
           die MX-Eintra:ge (MX record) genannt werden. Der MX-Eintrag (von
           Mail eXchanger) gibt an, welche Rechner E-Mails fu:r eine Doma:ne
           annehmen.

           Mit host(1) ko:nnen die MX-Eintra:ge fu:r eine Doma:ne abgefragt
           werden:

 # host -t mx FreeBSD.org
 FreeBSD.org mail is handled by 10 mx1.FreeBSD.org

           Weitere Informationen zu DNS und dessen Konfiguration finden Sie
           im Abschnitt 28.7, "Domain Name System (DNS)".

27.4. Sendmail-Konfigurationsdateien

   Beigesteuert von Christopher Shumway.

   Sendmail ist der standardma:ssig in FreeBSD installierte MTA. Es nimmt
   E-Mails von E-Mail-Benutzerprogrammen (MUA) entgegen und liefert diese zu
   den entsprechenden Mail Hosts, die in der Konfigurationsdatei definiert
   sind. Sendmail kann auch Netzwerkverbindungen annehmen und E-Mails an
   lokale Mailboxen, oder an andere Programme ausliefern.

   Die Konfigurationsdateien von Sendmail befinden sich in /etc/mail. In
   diesem Abschnitt werden diese Dateien im Detail beschrieben.

   /etc/mail/access

           Diese Datenbank bestimmt, welche Rechner oder IP-Adressen Zugriff
           auf den lokalen Mail-Server haben und welche Art von Zugriff ihnen
           gestattet wird. Rechner die als OK aufgelistet sind, was der
           Standard ist, sind berechtigt E-Mails zu diesem Rechner zu
           schicken, solange die endgu:ltige Zieladresse der lokale Rechner
           ist. Rechner die als REJECT aufgelistet sind, werden abgelehnt.
           Rechner die als RELAY aufgelistet sind, wird es erlaubt Post fu:r
           jede Zieladresse durch diesen Mail-Server zu senden. Rechner die
           als ERROR aufgelistet sind, bekommen ihre E-Mail mit einem
           speziellen Fehler zuru:ck. Wenn ein Rechner als SKIP aufgelistet
           ist, wird Sendmail die aktuelle Suche abbrechen, ohne die E-Mail
           zu akzeptieren oder abzulehnen. E-Mails von Rechnern die als
           QUARANTAINE aufgelistet sind, werden vorerst zuru:ckgehalten. Dem
           sendenden Rechner wird ein festgelegter Text als Grund fu:r die
           Quaranta:ne zuru:ckgeschickt.

           Beispiele fu:r die Verwendung dieser Optionen fu:r IPv4- und
           IPv6-Adressen finden Sie in der Beispielkonfiguration
           /etc/mail/access.sample:

 # $FreeBSD$
 #
 # Mail relay access control list.  Default is to reject mail unless the
 # destination is local, or listed in /etc/mail/local-host-names
 #
 ## Examples (commented out for safety)
 #From:cyberspammer.com          ERROR:"550 We don't accept mail from spammers"
 #From:okay.cyberspammer.com     OK
 #Connect:sendmail.org           RELAY
 #To:sendmail.org                RELAY
 #Connect:128.32                 RELAY
 #Connect:128.32.2               SKIP
 #Connect:IPv6:1:2:3:4:5:6:7     RELAY
 #Connect:suspicious.example.com QUARANTINE:Mail from suspicious host
 #Connect:[127.0.0.3]            OK
 #Connect:[IPv6:1:2:3:4:5:6:7:8] OK

           Um die Datenbank zu konfigurieren, verwenden Sie das im Beispiel
           gezeigte Format, um Eintra:ge in /etc/mail/access hinzuzufu:gen,
           aber setzen Sie kein Kommentarsymbol (#) vor die Eintra:ge.
           Erstellen Sie einen Eintrag fu:r jeden Rechner, dessen Zugriff
           konfiguriert werden soll. E-Mail-Versender, die mit der linken
           Spalte der Tabelle u:bereinstimmen, sind betroffen von der Aktion
           in der rechten Spalte.

           Immer wenn diese Datei vera:ndert wurde, muss die Datenbank
           aktualisiert und Sendmail neu gestartet werden:

 # makemap hash /etc/mail/access < /etc/mail/access
 # service sendmail restart

   /etc/mail/aliases

           Diese Datenbank entha:lt eine Liste der virtuellen Mailboxen, die
           in andere Benutzer, Dateien, Programme oder andere Aliase
           expandiert werden. Hier sind ein paar Beispiele, die das
           Dateiformat verdeutlichen:

 root: localuser
 ftp-bugs: joe,eric,paul
 bit.bucket:  /dev/null
 procmail: "|/usr/local/bin/procmail"

           Der Name der Mailbox auf der linken Seite des Doppelpunkts wird
           mit den Zielen auf der rechten Seite ersetzt. Der erste Eintrag
           ersetzt die Mailbox root mit der Mailbox localuser, die dann in
           der Datenbank /etc/mail/aliases gesucht wird. Wird kein passender
           Eintrag gefunden, wird die Nachricht zum localuser geliefert. Der
           zweite Eintrag zeigt eine E-Mail-Verteilerliste. E-Mails an
           ftp-bugs werden zu den drei lokalen Mailboxen joe, eric und paul
           gesendet. Eine entfernte Mailbox kann auch als user@example.com
           angegeben werden. Der dritte Eintrag zeigt wie E-Mails in eine
           Datei geschrieben werden, in diesem Fall /dev/null. Der letzte
           Eintrag verdeutlicht das Senden von E-Mails an ein Programm. Hier
           wird die Nachricht u:ber eine UNIX(R) Pipe an
           /usr/local/bin/procmail gesendet. Weitere Informationen zu dem
           Format dieser Datei finden Sie in aliases(5).

           Wenn diese Datei gea:ndert wird, muss newaliases ausgefu:hrt
           werden, um die Datenbank zu aktualisieren.

   /etc/mail/sendmail.cf

           Dies ist die Hauptkonfigurations-Datei von Sendmail. Sie
           kontrolliert das allgemeine Verhalten von Sendmail,
           einschliesslich allem vom Umschreiben von E-Mail Adressen bis hin
           zum U:bertragen von Ablehnungsnachrichten an entfernte
           E-Mail-Server. Dementsprechend ist die Konfigurationsdatei
           ziemlich komplex. Glu:cklicherweise muss diese Datei selten fu:r
           Standard E-Mail-Server gea:ndert werden.

           Die Sendmail Hauptkonfigurationsdatei kann mit m4(1) Makros
           erstellt werden, die Eigenschaften und Verhalten von Sendmail
           definieren. Einige der Details finden Sie in
           /usr/src/contrib/sendmail/cf/README.

           Wenn A:nderungen an dieser Datei vorgenommen werden, muss Sendmail
           neu gestartet werden, damit die A:nderungen Wirkung zeigen.

   /etc/mail/virtusertable

           Diese Datenbank ordnet Adressen fu:r virtuelle Doma:nen und
           Benutzern reellen Mailboxen zu. Diese Mailboxen ko:nnen lokal, auf
           entfernten Systemen, Aliase in /etc/mail/aliases oder eine Datei
           sein. Dadurch ko:nnen mehrere virtuelle Domains auf einem Rechner
           gehostet werden.

           FreeBSD entha:lt eine Beispielkonfiguration in
           /etc/mail/virtusertable.sample, die das Format genauer beschreibt.
           Das folgende Beispiel zeigt, wie benutzerdefinierte Eintra:ge in
           diesem Format erstellt werden:

 root@example.com                root
 postmaster@example.com          postmaster@noc.example.net
 @example.com                    joe

           Diese Datei wird nach dem ersten u:bereinstimmenden Eintrag
           durchsucht. Wenn eine E-Mail-Adresse mit der Adresse auf der
           linken Seite u:bereinstimmt, wird sie dem Eintrag auf der rechten
           Seite zugeordnet. Der erste Eintrag in diesem Beispiel ordnet eine
           bestimmte E-Mail-Adresse einer lokalen Mailbox zu, wa:hrend der
           zweite Eintrag eine bestimmte E-Mail-Adresse einer entfernten
           Mailbox zuordnet. Zuletzt wird jede E-Mail-Adresse von
           example.com, welche nicht mit einem der vorherigen Eintra:ge
           u:bereinstimmt, mit dem letzten Eintrag u:bereinstimmen und der
           lokalen Mailbox joe zugeordnet. Benutzen Sie dieses Format, wenn
           Sie neue Eintra:ge in /etc/mail/virtusertable hinzufu:gen. Jedes
           Mal, wenn diese Datei bearbeitet wurde, muss die Datenbank
           aktualisiert und Sendmail neu gestartet werden:

 # makemap hash /etc/mail/virtusertable < /etc/mail/virusertable
 # service sendmail restart

   /etc/mail/relay-domains

           In der standardma:ssigen FreeBSD-Installation wird Sendmail nur
           dazu konfiguriert, E-Mails von dem Rechner, auf dem es la:uft, zu
           senden. Wenn zum Beispiel ein POP-Server installiert ist, ko:nnen
           Benutzer ihre E-Mails von entfernten Standorten u:berpru:fen. Sie
           werden jedoch keine E-Mails von aussen verschicken ko:nnen.
           Typischerweise wird ein paar Sekunden nach dem Versuch eine E-Mail
           von MAILER-DAEMON mit einer 5.7 Relaying Denied Fehlermeldung
           versendet werden.

           Die einfachste Lo:sung ist, wie im folgenden Beispiel gezeigt, den
           FQDN des Internet-Dienstanbieters und gegebenenfalls weitere
           Adressen in /etc/mail/relay-domains einzutragen:

 your.isq.example.com
 other.isp.example.net
 users.isp.example.org
 www.example.org

           Nachdem diese Datei erstellt oder editiert wurde, muss Sendmail
           mittels service sendmail restart neu gestartet werden.

           Ab jetzt wird jede E-Mail, die von einem in der Liste
           eingetragenen Rechner durch das System geschickt wird, ihr Ziel
           erreichen, vorausgesetzt der Benutzer hat einen Account auf dem
           System. Dies erlaubt es Benutzern aus der Ferne, E-Mails u:ber das
           System zu versenden, ohne dem Massenversand (SPAM) die Tu:r zu
           o:ffnen.

27.5. Wechseln des Mailu:bertragungs-Agenten

   Geschrieben von Andrew Boothman.
   Informationen entnommen aus E-Mails geschrieben von Gregory Neil Shapiro.

   FreeBSD entha:lt mit Sendmail bereits einen MTA, der fu:r die ein- und
   ausgehenden E-Mails verantwortlich ist. Der Systemadministrator kann aber
   den MTA des Systems wechseln. Eine grosse Auswahl an alternativen MTAs ist
   in der Kategorie mail der FreeBSD Ports-Sammlung verfu:gbar.

   Sobald ein neuer MTA installiert ist, ko:nnen Sie die neue Software
   konfigurieren und testen, bevor Sie Sendmail ersetzen. Informationen u:ber
   die Konfiguration des neu gewa:hlten MTA finden Sie in der dazugeho:rigen
   Dokumentation.

   Sobald der neue MTA wie gewu:nscht funktioniert, benutzen Sie die
   Anweisungen in diesem Abschnitt, um Sendmail zu deaktivieren und
   stattdessen den neuen MTA zu verwenden.

  27.5.1. Sendmail deaktivieren

  Warnung:

   Wenn der ausgehende Mail-Dienst von Sendmail deaktiviert ist, muss fu:r
   den E-Mail-Versand ein alternatives System installiert werden. Andernfalls
   sind Systemfunktionen wie periodic(8) nicht mehr in der Lage, ihre
   Resulate und Meldungen als E-Mail zu versenden. Aber auch viele andere
   Teile des Systems erwarten einen funktionalen MTA. Sind Programme auf die
   deaktivierten Sendmail-Bina:rdateien angewiesen, landen deren E-Mails
   ansonsten in einer inaktiven Sendmail-Warteschlange und ko:nnen nicht
   ausgeliefert werden.

   Um Sendmail komplett zu deaktivieren, mu:ssen folgende Zeilen in
   /etc/rc.conf hinzugefu:gt oder editiert werden:

 sendmail_enable="NO"
 sendmail_submit_enable="NO"
 sendmail_outbound_enable="NO"
 sendmail_msp_queue_enable="NO"

   Um lediglich die Funktion zum Empfang von E-Mails durch Sendmail zu
   deaktivieren, muss folgender Eintrag in /etc/rc.conf gesetzt werden:

 sendmail_enable="NO"

   Weitere Informationen zu den Startoptionen von Sendmail finden Sie in der
   Manualpage rc.sendmail(8).

  27.5.2. Den voreingestellten MTA ersetzen

   Wenn ein neuer MTA u:ber die Ports-Sammlung installiert wird, werden auch
   die Startskripten installiert. Die Anweisungen zum starten dieser Skripte
   werden in den Paketnachrichten erwa:hnt. Bevor Sie den neuen MTA in
   Betrieb nehmen, stoppen Sie alle laufenden Sendmail-Prozesse. In diesem
   Beispiel werden alle notwendigen Dienste gestoppt und danach der Postfix
   Dienst gestartet:

 # service sendmail stop
 # service postfix start

   Damit der angegebene MTA automatisch beim Hochfahren des Systems gestartet
   wird, fu:gen Sie dessen Konfigurationszeile in /etc/rc.conf hinzu. Dieser
   Eintrag startet den Postfix MTA:

 postfix_enable="YES"

   Da Sendmail allgegenwa:rtig ist und manche Anwendungen einfach davon
   ausgehen es bereits installiert und konfiguriert, wird einige zusa:tzliche
   Konfiguration beno:tigt. U:berpru:fen Sie /etc/periodic.conf und stellen
   Sie sicher, dass diese Werte auf NO gesetzt werden. Wenn die Datei nicht
   existiert, erstellen Sie sie mit folgenden Eintra:gen:

 daily_clean_hoststat_enable="NO"
 daily_status_mail_enable="NO"
 daily_status_include_submit_mailq="NO"
 daily_submit_queuerun="NO"

   Viele alternative MTAs stellen ihre eigenen kompatiblen Implementierungen
   der Sendmail Kommandozeilen-Schnittstelle zur Verfu:gung, was die
   Verwendung als "drop-in" Ersatz fu:r Sendmail vereinfacht. Allerdings
   versuchen einige MUAs Sendmails Standard-Dateien auszufu:hren, anstelle
   der Dateien des neuen MTAs. FreeBSD verwendet /etc/mail/mailer.conf um die
   erwarteten Sendmail Dateien auf die neuen Dateien abzubilden. Weitere
   Informationen u:ber diese Zuordnungen ko:nnen in mailwrapper(8) gefunden
   werden.

   In der Voreinstellung sieht /etc/mail/mailer.conf wie folgt aus:

 # $FreeBSD$
 #
 # Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
 #
 sendmail        /usr/libexec/sendmail/sendmail
 send-mail       /usr/libexec/sendmail/sendmail
 mailq           /usr/libexec/sendmail/sendmail
 newaliases      /usr/libexec/sendmail/sendmail
 hoststat        /usr/libexec/sendmail/sendmail
 purgestat       /usr/libexec/sendmail/sendmail

   Wenn eines der Kommandos auf der linken Seite ausgefu:hrt werden soll,
   fu:hrt das System tatsa:chlich den damit verbundenen Befehl auf der
   rechten Seite aus. Mit diesem System lassen sich Programme, die fu:r die
   Sendmail-Funktionen gestartet werden, leicht a:ndern.

   Einige MTAs aus der Ports-Sammlung ko:nnen diese Datei aktualisieren. Zum
   Beispiel wu:rde Postfix die Datei wie folgt aktualisieren:

 #
 # Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
 #
 sendmail        /usr/local/sbin/sendmail
 send-mail       /usr/local/sbin/sendmail
 mailq           /usr/local/sbin/sendmail
 newaliases      /usr/local/sbin/sendmail

   Falls die Installation des MTA nicht automatisch /etc/mail/mailer.conf
   aktualisiert, bearbeiten Sie diese Datei in einem Texteditor, so dass auf
   die neuen Dateien verwiesen wird. Dieses Beispiel zeigt auf die Dateien,
   die von mail/ssmtp installiert wurden:

 sendmail        /usr/local/sbin/ssmtp
 send-mail       /usr/local/sbin/ssmtp
 mailq           /usr/local/sbin/ssmtp
 newaliases      /usr/local/sbin/ssmtp
 hoststat        /usr/bin/true
 purgestat       /usr/bin/true

   Sobald alles konfiguriert ist, wird empfohlen, das System neu zu starten.
   Ein Neustart bietet auch die Mo:glichkeit sicherzustellen, dass das System
   korrekt konfiguriert wurde, um den neuen MTA automatisch beim Hochfahren
   zu starten.

27.6. Fehlerbehebung

   Hier finden sich ein paar ha:ufig gestellte Fragen und ihre Antworten, die
   von der FAQ u:bernommen wurden.

   27.6.1. Warum muss ich einen FQDN (fully-qualified domain name / voll
   ausgeschriebenen Doma:nennamen) fu:r meine Rechner verwenden?

   27.6.2. Wie kann ich einen E-Mail-Server auf einem Anwahl-PPP Rechner
   betreiben?

27.6.1. Warum muss ich einen FQDN (fully-qualified domain name / voll                
        ausgeschriebenen Doma:nennamen) fu:r meine Rechner verwenden?                
        Vielleicht befindet sich der Rechner in einer anderen Doma:ne. Um            
        beispielsweise von einem Rechner in foo.bar.edu einen Rechner namens mumble  
        in der Doma:ne foo.bar.edu zu erreichen, geben Sie seinen voll               
        ausgeschriebenen Doma:nennamen (FQDN) mumble.bar.edu, anstelle von mumble    
        an.                                                                          
                                                                                     
        Das liegt daran, dass die aktuelle Version von BIND, die mit FreeBSD         
        ausgeliefert wird, keine Standardabku:rzungen fu:r nicht komplett angegebene 
        Doma:nennamen ausserhalb der lokalen Doma:ne unterstu:tzt. Daher muss ein    
        nicht-qualifizierter Rechner, wie mumble, entweder als mumble.foo.bar.edu    
        gefunden werden, oder er wird in der root Doma:ne gesucht.                   
                                                                                     
        In a:lteren Versionen von BIND lief die Suche u:ber mumble.bar.edu und       
        mumble.edu. RFC 1535 erkla:rt, warum dieses Verhalten als schlechte Praxis   
        oder sogar als Sicherheitsloch angesehen wird.                               
                                                                                     
        Um das zu umgehen, setzen Sie die Zeile:                                     
                                                                                     
        search foo.bar.edu bar.edu                                                   
                                                                                     
        anstatt der vorherigen                                                       
                                                                                     
        domain foo.bar.edu                                                           
                                                                                     
        in /etc/resolv.conf ein. Stellen Sie jedoch sicher, dass die Suchordnung     
        nicht die Begrenzung von "lokaler und o:ffentlicher Administration", wie RFC 
        1535 sie nennt, u:berschreitet.                                              
27.6.2. Wie kann ich einen E-Mail-Server auf einem Anwahl-PPP Rechner betreiben?     
        Sie wollen sich mit einem FreeBSD E-Mail Gateway im LAN verbinden. Die       
        PPP-Verbindung ist keine Standleitung.                                       
                                                                                     
        Ein Weg dies zu tun ist, von einem immer mit dem Internet verbundenen Server 
        einen sekunda:ren MX-Dienst fu:r die Doma:ne zur Verfu:gung gestellt zu      
        bekommen. In diesem Beispiel heisst die Doma:ne example.com, und der         
        Internet-Dienstanbieter hat example.net so eingestellt, dass er fu:r die     
        Doma:ne einen sekunda:ren MX-Dienst zur Verfu:gung stellt:                   
                                                                                     
        example.com.            MX        10      bigco.com.                         
                                MX        20      example.net.                       
                                                                                     
        Nur ein Rechner sollte als Endempfa:nger angegeben sein. Sendmail fu:gen Sie 
        Cw example.com zu /etc/sendmail.cf auf example.com hinzu.                    
                                                                                     
        Wenn der MTA des Versenders versucht die E-Mail zuzustellen, wird es         
        versuchen das System example.com u:ber die PPP-Verbindung zu erreichen. Es   
        kommt zu einer Zeitu:berschreitung, wenn das Zielsystem offline ist. Der MTA 
        wird die E-Mail automatisch der sekunda:ren MX-Seite des Internet-Providers  
        example.net zustellen. Die sekunda:re MX-Seite wird periodisch versuchen,    
        eine Verbindung zur prima:ren MX-Seite example.com aufzubauen.               
                                                                                     
        Verwenden Sie etwas wie dies als Login-Skript:                               
                                                                                     
        #!/bin/sh                                                                    
        # Put me in /usr/local/bin/pppmyisp                                          
        ( sleep 60 ; /usr/sbin/sendmail -q ) &                                       
        /usr/sbin/ppp -direct pppmyisp                                               
                                                                                     
        Wenn Sie ein separates Login-Skript fu:r einen Benutzer erstellen, benutzen  
        Sie stattdessen sendmail -qRexample.com in dem oben gezeigten Skript. Das    
        erzwingt die sofortige Verarbeitung der E-Mails in der Warteschlange fu:r    
        example.com                                                                  
                                                                                     
        Eine weitere Verfeinerung der Situation kann an diesem Beispiel von FreeBSD  
        Internet service providers entnommen werden:                                 
                                                                                     
        > wir stellen einem Kunden den sekunda:ren MX zur Verfu:gung.                
        > Der Kunde verbindet sich mit unseren Diensten mehrmals am Tag              
        > automatisch um die E-Mails zu seinem prima:ren MX zu holen                 
        > (wir wa:hlen uns nicht bei ihm ein, wenn E-Mails fu:r seine                
        > Doma:ne eintreffen).  Unser sendmail sendet den Inhalt der                 
        > E-Mail-Warteschlange alle 30 Minuten.  Momentan muss er 30 Minuten         
        > eingewa:hlt bleiben um sicher zu sein, dass alle seine E-Mails             
        > beim prima:ren MX eingetroffen sind.                                       
        >                                                                            
        > Gibt es einen Befehl, der sendmail dazu bringt, alle E-Mails sofort        
        > zu senden? Der Benutzer hat natu:rlich keine root-Rechte auf               
        > unserer Maschine.                                                          
                                                                                     
        In der "privacy flags" Sektion von sendmail.cf befindet sich die             
        Definition Opgoaway,restrictqrun                                             
                                                                                     
        Entferne restrictqrun um nicht-root Benutzern zu erlauben, die Verarbeitung  
        der Nachrichten-Warteschlangen zu starten.  Mo:glicherweise willst du        
        auch die MX neu sortieren.  Wir sind der prima:re MX fu:r unsere             
        Kunden mit diesen Wu:nschen und haben definiert:                             
                                                                                     
        # Wenn wir der beste MX fu:r einen Rechner sind, versuche es direkt          
        # anstatt einen lokalen Konfigurationsfehler zu generieren.                  
        OwTrue                                                                       
                                                                                     
        Auf diesem Weg liefern Gegenstellen direkt zu dir, ohne die Kundenverbindung 
        zu versuchen.  Dann sendest du zu deinem Kunden.  Das funktioniert nur       
        fu:r "Rechner", du musst also deinen Kunden dazu bringen,                    
        ihre E-Mail Maschine "customer.com" zu nennen, sowie                         
        "hostname.customer.com" im DNS.  Setze einfach einen A-Eintrag               
        in den DNS fu:r "customer.com".                                              

27.7. Weiterfu:hrende Themen

   Dieser Abschnitt behandelt kompliziertere Themen wie E-Mail-Konfiguration
   und Einrichtung von E-Mail fu:r eine ganze Doma:ne.

  27.7.1. Grundlegende Konfiguration

   Mit der Software im Auslieferungszustand sollte es mo:glich sein, E-Mails
   an externe Rechner zu senden, vorausgesetzt /etc/resolv.conf ist
   konfiguriert, oder das Netzwerk hat Zugriff auf einen konfigurierten
   DNS-Server. Um E-Mails an den MTA auf dem Rechner auszuliefern, stehen
   zwei Mo:glichkeiten zur Auswahl:

     * Betreiben Sie einen DNS-Server fu:r die Doma:ne.

     * Lassen Sie die E-Mails direkt u:ber den FQDN des Rechners ausliefern.

   Um E-Mails direkt zu einem Rechner geliefert zu bekommen, wird eine
   permanente statische IP-Adresse (keine dynamische IP-Adresse) beno:tigt.
   Befindet sich das System hinter einer Firewall, muss diese den
   SMTP-Verkehr weiterleiten. Um E-Mails direkt am Rechner zu empfangen, muss
   eines der folgenden Dinge konfiguriert werden:

     * Vergewissern Sie sich, dass der MX-Eintrag mit der kleinsten Nummer im
       DNS auf die statische IP-Adresse des Rechners zeigt.

     * Stellen Sie sicher, dass fu:r den Rechner kein MX-Eintrag im DNS
       existiert.

   Jede der erwa:hnten Konfigurationsmo:glichkeiten erlaubt es, E-Mails
   direkt auf dem Rechner zu empfangen.

   Versuchen Sie das:

 # hostname
 example.FreeBSD.org
 # host example.FreeBSD.org
 example.FreeBSD.org has address 204.216.27.XX

   In diesem Beispiel sollte es funktionieren, E-Mails direkt an
   <yourlogin@example.FreeBSD.org> zu senden, vorausgesetzt dass Sendmail auf
   example.FreeBSD.org korrekt la:uft.

   In diesem Beispiel:

 # host example.FreeBSD.org
 example.FreeBSD.org has address 204.216.27.XX
 example.FreeBSD.org mail is handled (pri=10) by devnull.FreeBSD.org

   Hier wird jede an den Rechner example.FreeBSD.org gesandte E-Mail auf hub
   unter dem gleichen Benutzernamen gesammelt, anstatt diese direkt zu Ihrem
   Rechner zu senden.

   Die obige Information wird von einem DNS-Server verwaltet. Der
   DNS-Eintrag, der die Information zum E-Mail-Routing entha:lt, ist der
   MX-Eintrag. Existiert kein MX-Eintrag, werden E-Mails direkt u:ber die
   IP-Adresse an den Rechner geliefert.

   Der MX-Eintrag fu:r freefall.FreeBSD.org sah einmal so aus:

 freefall                MX      30      mail.crl.net
 freefall                MX      40      agora.rdrop.com
 freefall                MX      10      freefall.FreeBSD.org
 freefall                MX      20      who.cdrom.com

   freefall hatte viele MX-Eintra:ge. Die kleinste MX-Nummer definiert de
   Rechner, der die E-Mails direkt empfa:ngt, wobei die anderen Rechner
   tempora:r E-Mails in Warteschlangen einreihen, falls freefall bescha:ftigt
   oder unerreichbar ist.

   Es ist sehr sinnvoll, dass stellvertretende MX-Seiten separate
   Internet-Verbindungen verwenden. Ihr ISP kann diesen Dienst zur Verfu:gung
   stellen.

  27.7.2. E-Mails fu:r eine Doma:ne

   Wird ein MTA fu:r ein Netzwerk konfiguriert, dann sollte jede E-Mail die
   an einen Rechner in dieser Doma:ne geschickt wird, an den MTA umgeleitet
   werden, damit die Benutzer ihre E-Mails vom zentralen Mail-Server
   empfangen ko:nnen.

   Am einfachsten ist es, wenn Accounts mit gleichen Benutzernamen sowohl auf
   dem MTA, als auch auf dem System mit dem MUA existieren. Verwenden Sie
   adduser(8), um Benutzerkonten anzulegen.

   Der MTA muss auf jeder Workstation im Netzwerk als der zusta:ndige Rechner
   fu:r den E-Mail-Austausch gekennzeichnet werden. Dies wird in der
   DNS-Konfiguration u:ber den MX-Eintrag gesteuert:

 example.FreeBSD.org     A       204.216.27.XX           ; Workstation
                         MX      10 devnull.FreeBSD.org  ; Mailhost

   Diese Einstellung wird E-Mails fu:r die Workstations zum MTA weiterleiten,
   egal wo der A-Eintrag hinzeigt. Die E-Mails werden zum MX-Rechner
   gesendet.

   Diese Einstellung muss auf dem DNS-Server konfiguriert werden. Besitzt das
   Netzwerk keinen eigenen DNS-Server, kontaktieren Sie Ihren ISP oder
   DNS-Verwalter.

   Im Folgenden ist ein Beispiel fu:r virtuelles E-Mail-Hosting. Nehmen wir
   an, dass fu:r einen Kunden mit der Doma:ne customer1.org, alle E-Mails
   fu:r customer1.org an mail.myhost.com gesendet werden sollen. Der
   entsprechende DNS-Eintrag sollte wie folgt aussehen:

 customer1.org           MX      10      mail.myhost.com

   Wenn fu:r die Doma:ne nur E-Mails verarbeitet werden sollen, wird fu:r
   customer1.org kein A-Eintrag beno:tigt. Allerdings wird ein ping gegen
   customer1.org nur dann funktionieren, wenn ein A-Eintrag existiert.

   Teilen Sie dem MTA mit, fu:r welche Doma:nen bzw. Hostnamen Post
   entgegengenommen werden soll. Die beiden folgenden Methoden funktionieren
   fu:r Sendmail:

     * Fu:gen Sie die Rechnernamen in /etc/mail/local-host-names hinzu, wenn
       FEATURE(use_cw_file) verwendet wird.

     * Fu:gen Sie eine Zeile Cwyour.host.com in /etc/sendmail.cf hinzu.

27.8. Ausgehende E-Mail u:ber einen Relay versenden

   Beigetragen von Bill Moran.

   In vielen Fa:llen mo:chte man E-Mail nur u:ber einen Relay verschicken.
   Zum Beispiel:

     * Der Rechner ist ein Arbeitsplatzrechner und benutzt Programme wie
       send-pr(1) u:ber ein Relay des ISP.

     * Ein Server, der E-Mails nicht selbst verarbeitet, soll alle E-Mails zu
       einem Relay schicken.

   Obwohl jeder MTA diese Aufgabe erfu:llen kann, ist es oft schwierig einen
   vollwertigen MTA so zu konfigurieren, dass er lediglich ausgehende E-Mails
   weiterleitet. Es ist u:bertrieben, Programme wie Sendmail und Postfix nur
   fu:r diesen Zweck einzusetzen.

   Weiterhin kann es sein, dass die Bestimmungen des Internetzugangs es
   verbieten, einen eigenen Mail-Server zu betreiben.

   Um die hier beschriebenen Anforderungen zu erfu:llen, installieren Sie
   einfach den Port mail/ssmtp:

 # cd /usr/ports/mail/ssmtp
 # make install replace clean

   Nach der Installation kann mail/ssmtp u:ber
   /usr/local/etc/ssmtp/ssmtp.conf konfiguriert werden:

 root=yourrealemail@example.com
 mailhub=mail.example.com
 rewriteDomain=example.com
 hostname=_HOSTNAME_

   Verwenden Sie eine gu:ltige E-Mail-Adresse fu:r root. Geben Sie fu:r
   mail.example.com den Mail-Relay des ISPs an. Einige ISPs nennen den Relay
   "Postausgangsserver" oder "SMTP-Server".

   Deaktivieren Sie Sendmail, einschliesslich des Services fu:r den
   Postausgang. Details finden Sie in Abschnitt 27.5.1, "Sendmail
   deaktivieren".

   mail/ssmtp verfu:gt u:ber weitere Optionen. Die Beispiele in
   /usr/local/etc/ssmtp oder die Manualpage von ssmtp enthalten weitere
   Informationen.

   Wird ssmtp wie hier beschrieben eingerichtet, ko:nnen Anwendungen E-Mails
   von dem lokalen Rechner verschicken. Man versto:sst damit auch nicht gegen
   Bestimmungen des ISPs und la:uft nicht Gefahr, dass der Rechner zum
   Versenden von Spam missbraucht wird.

27.9. E-Mail u:ber Einwahl-Verbindungen

   Wird eine feste IP-Adresse verwendet, mu:ssen die Standardeinstellungen
   wahrscheinlich gar nicht gea:ndert werden. Stellen Sie den Hostnamen auf
   den entsprechend zugeordneten Internetnamen ein und Sendmail u:bernimmt
   das U:brige.

   Bei der Verwendung einer dynamisch zugewiesenen IP-Adresse und einer
   PPP-Wa:hlverbindung mit dem Internet, hat man in der Regel ein Postfach
   auf dem Mailserver des ISP. In diesem Beispiel ist die Doma:ne des ISP
   example.net, der Benutzername ist user, der Rechnername ist bsd.home und
   der ISP erlaubt es, relay.example.net als Mail-Relayhost zu benutzen.

   Um Mails aus der Mailbox des ISPs abzuholen, muss ein gesondertes Programm
   aus der Ports-Sammlung installiert werden. mail/fetchmail ist eine gute
   Wahl, weil es viele verschiedene Protokolle unterstu:tzt. Fu:r gewo:hnlich
   stellt der ISP POP zur Verfu:gung. Falls User-PPP verwendet wird, ko:nnen
   durch folgenden Eintrag in /etc/ppp/ppp.linkup E-Mails automatisch
   abgerufen werden, sobald eine Verbindung zum Netz aufgebaut wird:

 MYADDR:
 !bg su user -c fetchmail

   Wird Sendmail benutzt, um E-Mails an nicht-lokale Benutzer zu versenden,
   konfigurieren Sie es so, dass die Warteschlange abgearbeitet wird, sobald
   eine Verbindung mit dem Internet besteht. Um dies zu erreichen, mu:ssen
   folgende Zeilen nach dem fetchmail-Eintrag in /etc/ppp/ppp.linkup
   hinzugefu:gt werden.

 !bg su user -c "sendmail -q"

   In diesem Beispiel existiert auf bsd.home ein Benutzer user. Erstellen Sie
   auf bsd.home im Heimatverzeichnis von user die Datei .fetchmailrc mit
   folgender Zeile:

 poll example.net protocol pop3 fetchall pass MySecret;

   Diese Datei sollte fu:r niemandem ausser user lesbar sein, weil sie das
   Passwort MySecret entha:lt.

   Um Mails mit dem richtigen from:-Header zu versenden, mu:ssen Sie Sendmail
   so konfigurieren, dass es <user@example.net> und nicht <user@bsd.home>
   benutzen soll und das alle Mails u:ber relay.example.net versendet werden,
   um eine schnellere U:bertragung von Mails zu gewa:hrleisten.

   Die folgende .mc sollte ausreichen:

 VERSIONID(`bsd.home.mc version 1.0')
 OSTYPE(bsd4.4)dnl
 FEATURE(nouucp)dnl
 MAILER(local)dnl
 MAILER(smtp)dnl
 Cwlocalhost
 Cwbsd.home
 MASQUERADE_AS(`example.net')dnl
 FEATURE(allmasquerade)dnl
 FEATURE(masquerade_envelope)dnl
 FEATURE(nocanonify)dnl
 FEATURE(nodns)dnl
 define(`SMART_HOST', `relay.example.net')
 Dmbsd.home
 define(`confDOMAIN_NAME',`bsd.home')dnl
 define(`confDELIVERY_MODE',`deferred')dnl

   Im vorherigen Abschnitt finden Sie Details dazu, wie Sie diese Datei in
   das Format sendmail.cf konvertieren ko:nnen. Vergessen Sie nicht, Sendmail
   neu zu starten, nachdem sendmail.cf vera:ndert wurde.

27.10. SMTP-Authentifizierung

   Geschrieben von James Gorham.

   Die Konfiguration von SMTP-Authentifizierung auf dem MTA bietet einige
   Vorteile. Die erforderliche Authentifizierung erho:ht die Sicherheit von
   Sendmail und mobilen Benutzern, die auf entfernten Rechnern arbeiten.
   Diese Benutzer ko:nnen denselben MTA verwenden, ohne jedes Mal das
   Benutzerprogramm neu konfigurieren zu mu:ssen.

    1. Installieren Sie security/cyrus-sasl2 aus der Ports-Sammlung. Dieser
       Port verfu:gt u:ber einige Optionen, die wa:hrend der U:bersetzung
       festgelegt werden. Fu:r die in diesem Abschnitt beschriebene Methode
       zur SMTP-Authentifizierung muss die Option LOGIN aktiviert werden.

    2. Nach der Installation von security/cyrus-sasl2 editieren Sie
       /usr/local/lib/sasl2/Sendmail.conf. Erstellen Sie die Datei, wenn sie
       nicht existiert und fu:gen Sie die folgende Zeile hinzu:

 pwcheck_method: saslauthd

    3. Als na:chstes installieren Sie security/cyrus-sasl2-saslauthd, und
       fu:gen die folgende Zeile in /etc/rc.conf ein:

 saslauthd_enable="YES"

       Abschliessend starten Sie den saslauthd-Da:mon:

 # service saslauthd start

       Dieser Da:mon agiert als Broker zwischen Sendmail und der
       FreeBSD-passwd-Datenbank. Dadurch mu:ssen zum Versenden von E-Mails
       keine zusa:tzlichen Accounts und Passwo:rter angelegt werden. Die
       Benutzer verwenden dasselbe Passwort zum Anmelden wie zum Verschicken
       von E-Mails.

    4. Fu:gen Sie danach in /etc/make.conf die folgenden Zeilen hinzu:

 SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
 SENDMAIL_LDFLAGS=-L/usr/local/lib
 SENDMAIL_LDADD=-lsasl2

       Beim U:bersetzen von Sendmail werden damit die
       cyrus-sasl2-Bibliotheken benutzt. Stellen Sie daher vor dem
       U:bersetzen von Sendmail sicher, dass cyrus-sasl2 installiert ist.

    5. U:bersetzen Sie Sendmail mit den nachstehenden Kommandos:

 # cd /usr/src/lib/libsmutil
 # make cleandir && make obj && make
 # cd /usr/src/lib/libsm
 # make cleandir && make obj && make
 # cd /usr/src/usr.sbin/sendmail
 # make cleandir && make obj && make && make install

       Die U:bersetzung sollte keine Probleme bereiten, wenn /usr/src nicht
       umfangreich vera:ndert wurde und die beno:tigten Bibliotheken
       installiert sind.

    6. Nachdem Sendmail u:bersetzt und installiert wurde, editieren Sie
       /etc/mail/freebsd.mc beziehungsweise die lokale .mc-Datei. Viele
       Administratoren verwenden die Ausgabe von hostname(1), um der .mc
       einen eindeutigen Namen zu geben. Fu:gen Sie die folgenden Zeilen
       hinzu:

 dnl set SASL options
 TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
 define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl

       Diese Anweisungen konfigurieren die Methoden, die Sendmail zur
       Authentifizierung von Benutzern verwendet. Lesen Sie die Sendmail
       Dokumentation, wenn eine andere Methode als pwcheck verwendet werden
       soll.

    7. Abschliessend rufen Sie make(1) in /etc/mail auf. Damit wird aus der
       .mc-Datei eine neue .cf-Datei erzeugt. Der Name ist entweder
       freebsd.cf oder der Name der lokalen .mc-Datei. make install restart
       installiert die Datei nach /etc/mail/sendmail.cf und startet Sendmail
       neu. Weitere Informationen zu diesem Vorgang entnehmen Sie bitte
       /etc/mail/Makefile.

   Um die Konfiguration zu testen, verwenden Sie einen MUA, um eine
   Testnachricht zu senden. Mail-Benutzerprogramm das Passwort fu:r die
   Authentifizierung ein und versenden Sie zum Testen eine E-Mail. Zur
   Fehlersuche, setzen Sie den LogLevel von Sendmail auf 13 und untersuchen
   die Fehlermeldungen in /var/log/maillog.

   Weitere Information finden Sie unter SMTP-Authentifizierung.

27.11. E-Mail-Programme

   Beigetragen von Marc Silver.

   Anwendungen, die E-Mails versenden und empfangen, werden als
   E-Mail-Programme oder Mail-User-Agents (MUA) bezeichnet. Mit der
   Entwicklung und Ausbreitung von E-Mail wachsen auch die E-Mail-Programme
   und bieten Benutzern mehr Funktionen und ho:here Flexibilita:t. Die
   Kategorie mail der FreeBSD Ports-Sammlung entha:lt zahlreiche
   E-Mail-Programme. Dazu geho:ren grafische Programme, wie beispielsweise
   Evolution oder Balsa und Konsolen basierte Programme wie mutt oder alpine.

  27.11.1. mail

   Das standardma:ssig unter FreeBSD installierte E-Mail-Programm ist
   mail(1). Das Programm ist konsolenorientiert und entha:lt alle Funktionen,
   die zum Versand und Empfang textbasierter E-Mails erforderlich sind. Es
   bietet eine begrenzte Unterstu:tzung fu:r Anha:nge und kann auf lokale
   Postfa:cher zugreifen.

   mail kann nicht direkt auf POP- oder IMAP-Server zugreifen. Entfernte
   Postfa:cher ko:nnen aber mit einer Anwendung wie fetchmail in eine lokale
   mbox geladen werden.

   Um E-Mails zu versenden oder zu empfangen, starten Sie einfach mail wie im
   nachstehenden Beispiel:

 % mail

   mail liest automatisch den Inhalt des Benutzer-Postfachs im Verzeichnis
   /var/mail. Sollte das Postfach leer sein, beendet sich mail mit der
   Nachricht, dass keine E-Mails vorhanden sind. Wenn E-Mails vorhanden sind,
   wird die Benutzeroberfla:che gestartet und eine Liste der E-Mails
   angezeigt. Die E-Mails werden automatisch nummeriert wie im folgenden
   Beispiel gezeigt:

 Mail version 8.1 6/6/93.  Type ? for help.
 "/var/mail/marcs": 3 messages 3 new
 >N  1 root@localhost        Mon Mar  8 14:05  14/510   "test"
  N  2 root@localhost        Mon Mar  8 14:05  14/509   "user account"
  N  3 root@localhost        Mon Mar  8 14:05  14/509   "sample"

   Einzelne Nachrichten ko:nnen nun durch Eingabe von t gefolgt von der
   Nummer der Nachricht gelesen werden. Im nachstehenden Beispiel wird die
   erste E-Mail gelesen:

 & t 1
 Message 1:
 From root@localhost  Mon Mar  8 14:05:52 2004
 X-Original-To: marcs@localhost
 Delivered-To: marcs@localhost
 To: marcs@localhost
 Subject: test
 Date: Mon,  8 Mar 2004 14:05:52 +0200 (SAST)
 From: root@localhost (Charlie Root)

 Das ist eine Test-Nachricht.  Antworte bitte!

   Wie in diesem Beispiel zu sehen ist, wird die Nachricht zusammen mit dem
   vollsta:ndigen Nachrichtenkopf angezeigt. Um die Liste der E-Mails erneut
   zu sehen, dru:cken Sie wieder die Taste h.

   Um auf eine E-Mail zu antworten, benutzen Sie entweder R oder r. R weist
   mail an, dem Versender der Nachricht zu antworten, wa:hrend mit r allen
   Empfa:ngern der Nachricht geantwortet wird. Den Kommandos kann die Zahl
   der E-Mail, auf die geantwortet werden soll, mitgegeben werden. Nachdem
   die Antwort E-Mail verfasst worden ist, sollte die Eingabe mit einem
   einzelnen Punkt (.) auf einer neuen Zeile abgeschlossen werden. Hierzu ein
   Beispiel:

 & R 1
 To: root@localhost
 Subject: Re: test

 Danke, ich habe deine E-Mail erhalten.
 .
 EOT

   Neue E-Mails ko:nnen mit m, gefolgt von der E-Mail-Adresse des Empfa:ngers
   verschickt werden. Mehrere Empfa:nger werden durch Kommata (,) getrennt,
   angegeben. Der Betreff (subject) der Nachricht kann dann, gefolgt vom
   Inhalt der Nachricht eingegeben werden. Die Nachricht wird dann mit einem
   einzelnen Punkt (.) auf einer neuen Zeile abgeschlossen.

 & mail root@localhost
 Subject: Ich habe die E-Mails im Griff!

 Jetzt kann ich E-Mails versenden und empfangen ... :)
 .
 EOT

   Die Taste ? zeigt zu jeder Zeit einen Hilfetext an. Lesen Sie mail(1),
   wenn Sie weitere Hilfe zur Benutzung von mail erhalten mo:chten.

  Anmerkung:

   mail(1) wurde nicht fu:r den Umgang mit Anha:ngen entworfen und kann daher
   sehr schlecht mit Anha:ngen umgehen. Neuere MUAs gehen wesentlich besser
   mit Anha:ngen um. Benutzer, die mail bevorzugen, werden vielleicht den
   Port converters/mpack zu scha:tzen wissen.

  27.11.2. mutt

   mutt ist ein leistungsfa:higes E-Mail-Programm mit vielen Funktionen,
   darunter:

     * mutt kann den Verlauf einer Diskussion (threading) darstellen.

     * Unterstu:tzung von PGP fu:r das digitale signieren und verschlu:sseln
       von E-Mail.

     * MIME-Unterstu:tzung.

     * Maildir-Unterstu:tzung.

     * mutt la:sst sich im ho:chsten Masse an lokale Bedu:rfnisse anpassen.

   Mehr u:ber mutt erfahren Sie auf der Seite http://www.mutt.org.

   mutt kann u:ber den Port mail/mutt installiert werden. Nachdem der Port
   installiert ist, kann mutt mit dem folgenden Befehl gestartet werden:

 % mutt

   mutt liest automatisch den Inhalt des Benutzer-Postfachs im Verzeichnis
   /var/mail. Sind keine E-Mails vorhanden, wartet mutt auf Benutzereingaben.
   Das folgende Beispiel zeigt, wie mutt eine Nachrichten-Liste darstellt:

   Um eine E-Mail zu lesen, wa:hlen Sie die Nachricht einfach mit den
   Pfeiltasten aus und dru:cken Enter. mutt zeigt E-Mails wie folgt an:

   A:nlich wie mail(1), kann auch mutt verwendet werden, um nur dem Absender,
   oder auch allen anderen Empfa:ngern zu antworten. Um nur dem Absender der
   E-Mail zu antworten, dru:cken Sie r. Um sowohl dem Absender, als auch
   allen anderen Empfa:ngern zu antworten, dru:cken Sie g.

  Anmerkung:

   Zum Erstellen oder zum Beantworten von E-Mails ruft mutt den Editor vi(1)
   auf. Jeder Benutzer kann diese Einstellung anpassen, indem die Variable
   editor in .muttrc im Heimatverzeichnis gesetzt wird, oder die
   Umgebungsvariable EDITOR entsprechend angepasst wird. Weitere
   Informationen zur Konfiguration von mutt finden Sie unter
   http://www.mutt.org/.

   Dru:cken Sie m, um eine neue Nachricht zu verfassen. Nachdem der Betreff
   (subject) eingegeben wurde, startet mutt den vi(1) und die Nachricht kann
   verfasst werden. Wenn Sie fertig sind, speichern Sie die Nachricht und
   verlassen den vi(1). mutt wird dann wieder aktiv und zeigt eine
   Zusammenfassung der zu sendenden Nachricht an. Dru:cken Sie y, um die
   E-Mail zu versenden. Der nachstehende Bildschirmabzug zeigt die
   Zusammenfassung der E-Mail:

   mutt verfu:gt u:ber eine umfangreiche Hilfestellung. Aus fast jedem Menu:
   ko:nnen Hilfeseiten mit ? aufgerufen werden. In der oberen Statuszeile
   werden zudem die verfu:gbaren Tastenkombinationen angezeigt.

  27.11.3. alpine

   alpine wendet sich an Anfa:nger bietet aber ebenfalls einige Funktionen
   fu:r Profis.

  Warnung:

   In der Vergangenheit wurden in alpine mehrere Schwachstellen gefunden. Die
   Schwachstellen gestatteten entfernten Benutzern, durch das Versenden einer
   besonders verfassten E-Mail, Programme auf dem lokalen System laufen zu
   lassen. Alle bekannten Schwachstellen sind beseitigt worden, doch wird im
   Quellcode von alpine ein sehr riskanter Programmierstil verwendet, sodass
   der FreeBSD-Security-Officer von weiteren unbekannten Schwachstellen
   ausgeht. Benutzer installieren alpine auf eigene Verantwortung!

   Der Port mail/alpine entha:lt die aktuelle Version von alpine. Nach der
   Installation ko:nnen Sie alpine mit dem nachstehenden Kommando starten:

 % alpine

   Beim ersten Start von alpine, zeigt das Programm eine Seite mit einer
   kurzen Einfu:hrung an. Um die alpine-Benutzer zu za:hlen, bitten die
   Entwickler auf dieser Seite um eine anonyme E-Mail. Sie ko:nnen diese
   anonyme E-Mail senden, indem Sie Enter dru:cken oder den
   Begru:ssungsbildschirm mit der Taste E verlassen, ohne die anonyme E-Mail
   zu senden. Der Begru:ssungsbildschirm sieht wie folgt aus:

   Nach dem Begru:ssungsbildschirm wird das Hauptmenu: dargestellt, das sich
   mit den Pfeiltasten bedienen la:sst. U:ber Tastenkombinationen ko:nnen aus
   dem Hauptmenu: neue E-Mails erstellt, Postfa:cher angezeigt und das
   Adressbuch verwaltet werden. Unterhalb des Menu:s werden die
   Tastenkombinationen fu:r die verfu:gbaren Aktionen angezeigt.

   In der Voreinstellung o:ffnet alpine das Verzeichnis inbox. Die Taste I
   oder der Menu:punkt MESSAGE INDEX fu:hrt zu einer Nachrichten-Liste:

   Die Liste zeigt die Nachrichten im Arbeitsverzeichnis. Sie ko:nnen
   Nachrichten mit den Pfeiltasten markieren. Um eine Nachricht zu lesen,
   dru:cken Sie Enter.

   Im na:chsten Bildschirmabzug sehen Sie, wie alpine eine Nachricht
   darstellt. Die unteren Bildschirmzeilen zeigen die verfu:gbaren
   Tastenkombinationen. Mit r ko:nnen Sie zum Beispiel auf die gerade
   angezeigte Nachricht antworten.

   Zum Antworten auf eine E-Mail wird in alpine der Editor pico, der mit
   installiert wird, benutzt. pico ist leicht zu bedienen und gerade fu:r
   Anfa:nger besser geeignet als vi(1) oder mail(1). Die Antwort wird mit der
   Tastenkombination Ctrl+X versendet. Vor dem Versand bittet alpine noch um
   eine Besta:tigung.

   U:ber den Menu:punkt SETUP des Hauptmenu:s ko:nnen Sie alpine an Ihre
   Bedu:rfnisse anpassen. Erla:uterungen dazu finden Sie auf der Seite
   http://www.washington.edu/pine/.

27.12. E-Mails mit fetchmail abholen

   Beigetragen von Marc Silver.

   fetchmail ist ein vollwertiger IMAP- und POP-Client. Mit fetchmail ko:nnen
   Benutzer E-Mails von entfernten IMAP- und POP-Servern in leichter
   zuga:ngliche lokale Postfa:cher laden. fetchmail wird aus dem Port
   mail/fetchmail installiert. Das Programm bietet unter anderem folgende
   Funktionen:

     * fetchmail beherrscht die Protokolle POP3, APOP, KPOP, IMAP, ETRN und
       ODMR.

     * E-Mails ko:nnen mit SMTP weiterverarbeitet werden. Dadurch ist
       garantiert, dass Filter, Weiterleitungen und Aliase weiterhin
       funktionieren.

     * Das Programm kann als Dienst laufen und periodisch neue Nachrichten
       abrufen.

     * fetchmail kann mehrere Postfa:cher abfragen und je nach Konfiguration
       die E-Mails an verschiedene lokale Benutzer zustellen.

   Dieser Abschnitt erkla:rt einige grundlegende Funktionen von fetchmail.
   Das Programm beno:tigt eine Konfigurationsdatei .fetchmailrc im
   Heimatverzeichnis des Benutzers. In dieser Datei werden Informationen
   u:ber Server wie auch Benutzerdaten und Passwo:rter hinterlegt. Wegen des
   kritischen Inhalts dieser Datei ist es ratsam, diese nur fu:r den Benutzer
   lesbar zu machen:

 % chmod 600 .fetchmailrc

   Die folgende .fetchmailrc zeigt, wie das Postfach eines einzelnen
   Benutzers mit POP heruntergeladen wird. fetchmail wird angewiesen, eine
   Verbindung zu example.com herzustellen und sich dort als Benutzer joesoap
   mit dem Passwort XXX anzumelden. Das Beispiel setzt voraus, dass der
   Benutzer joesoap auch auf dem lokalen System existiert.

 poll example.com protocol pop3 username "joesoap" password "XXX"

   Im folgenden Beispiel werden mehrere POP- und IMAP-Server benutzt. Wo
   notwendig, werden E-Mails auf andere lokale Konten umgeleitet:

 poll example.com proto pop3:
 user "joesoap", with password "XXX", is "jsoap" here;
 user "andrea", with password "XXXX";
 poll example2.net proto imap:
 user "john", with password "XXXXX", is "myth" here;

   fetchmail kann als Da:mon gestartet werden. Verwendet wird dazu die
   Kommandozeilenoption -d gefolgt von einer Zeitspanne in Sekunden, die
   angibt, wie oft die Server aus .fetchmailrc abgefragt werden sollen. Mit
   dem nachstehenden Befehl fragt fetchmail die Server alle 600 Sekunden ab:

 % fetchmail -d 600

   Mehr u:ber fetchmail erfahren Sie auf der Seite
   http://www.fetchmail.info/.

27.13. E-Mails mit procmail filtern

   Beigetragen von Marc Silver.

   procmail ist ein ma:chtiges Werkzeug, mit dem sich eingehende E-Mails
   filtern lassen. Benutzer ko:nnen Regeln fu:r eingehende E-Mails
   definieren, die E-Mails zu anderen Postfa:chern oder anderen
   E-Mail-Adressen umleiten. procmail befindet sich im Port mail/procmail.
   procmail kann leicht in die meisten MTAs integriert werden. Lesen Sie dazu
   bitte die Dokumentation des verwendeten MTAs. Alternativ kann procmail in
   das E-Mail-System eingebunden werden, indem die nachstehende Zeile in die
   Datei .forward im Heimatverzeichnis eines Benutzers eingefu:gt wird:

 "|exec /usr/local/bin/procmail || exit 75"

   Der folgende Abschnitt zeigt einige einfache procmail-Regeln sowie eine
   kurze Beschreibung dessen, was sie tun. Regeln mu:ssen in .procmailrc im
   Heimatverzeichnis des Benutzers eingefu:gt werden.

   Den Grossteil dieser Regeln finden Sie auch in procmailex(5).

   Um E-Mails von <user@example.com> an die externe Adresse
   <goodmail@example2.com> weiterzuleiten:

 :0
 * ^From.*user@example.com
 ! goodmail@example2.com

   Um E-Mails, die ku:rzer als 1000 Bytes sind, an <goodmail@example2.com>
   weiterzuleiten:

 :0
 * < 1000
 ! goodmail@example2.com

   Um E-Mails, die an <alternate@example.com> geschickt werden, im Postfach
   alternate zu speichern:

 :0
 * ^TOalternate@example.com
 alternate

   Um E-Mails, die im Betreff Spam enthalten, nach /dev/null zu verschieben:

 :0
 ^Subject:.*Spam
 /dev/null

   Zuletzt ein nu:tzliches Rezept, das eingehende E-Mails von den
   FreeBSD.org-Mailinglisten in ein separates Postfach fu:r jede Liste
   einsortiert:

 :0
 * ^Sender:.owner-freebsd-\/[^@]+@FreeBSD.ORG
 {
         LISTNAME=${MATCH}
         :0
         * LISTNAME??^\/[^@]+
         FreeBSD-${MATCH}
 }

Kapitel 28. Netzwerkserver

   Inhaltsverzeichnis

   28.1. U:bersicht

   28.2. Der inetd "Super-Server"

   28.3. Network File System (NFS)

   28.4. Network Information System (NIS)

   28.5. Lightweight Access Directory Protocol (LDAP)

   28.6. Dynamic Host Configuration Protocol (DHCP)

   28.7. Domain Name System (DNS)

   28.8. Apache HTTP-Server

   28.9. File Transfer Protocol (FTP)

   28.10. Datei- und Druckserver fu:r Microsoft(R) Windows(R)-Clients (Samba)

   28.11. Die Uhrzeit mit NTP synchronisieren

   28.12. iSCSI Initiator und Target Konfiguration

28.1. U:bersicht

   Dieses Kapitel beschreibt einige der ha:ufiger verwendeten Netzwerkdienste
   auf UNIX(R)-Systemen. Dazu za:hlen Installation und Konfiguration sowie
   Test und Wartung verschiedener Netzwerkdienste. Zusa:tzlich sind im ganzen
   Kapitel Beispielkonfigurationen als Referenz enthalten.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie

     * Den inetd-Daemon konfigurieren ko:nnen.

     * Wissen, wie das Network File System (NFS) eingerichtet wird.

     * Einen Network Information Server (NIS) einrichten ko:nnen, um damit
       Benutzerkonten im Netzwerk zu verteilen.

     * Wissen, wie Sie FreeBSD einrichten, um als LDAP-Server oder -Client zu
       agieren.

     * Rechner durch Nutzung von DHCP automatisch fu:r ein Netzwerk
       konfigurieren ko:nnen.

     * In der Lage sein, einen Domain Name Server (DNS) einzurichten.

     * Den Apache HTTP-Server konfigurieren ko:nnen.

     * Wissen, wie man einen File Transfer Protocol (FTP)-Server einrichtet.

     * Mit Samba einen Datei- und Druckserver fu:r Windows(R)-Clients
       konfigurieren ko:nnen.

     * Unter Nutzung des NTP-Protokolls Datum und Uhrzeit synchronisieren
       sowie einen Zeitserver installieren ko:nnen.

     * Wissen, wie iSCSI eingerichtet wird.

   Dieses Kapitel setzt folgende Grundkenntnisse voraus:

     * /etc/rc-Skripte.

     * Netzwerkterminologie

     * Installation zusa:tzlicher Software von Drittanbietern (Kapitel 4,
       Installieren von Anwendungen: Pakete und Ports).

28.2. Der inetd "Super-Server"

   Der inetd(8)-Daemon wird manchmal auch als "Internet Super-Server"
   bezeichnet, weil er Verbindungen fu:r viele Dienste verwaltet. Anstatt
   mehrere Anwendungen zu starten, muss nur der inetd-Dienst gestartet
   werden. Wenn eine Verbindung fu:r einen Dienst eintrifft, der von inetd
   verwaltet wird, bestimmt inetd, welches Programm fu:r die eingetroffene
   Verbindung zusta: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 fu:hren.

   inetd wird vor allem dazu verwendet, andere Daemonen zu aktivieren, einige
   Protokolle werden aber auch intern verwaltet. Dazu geho:ren chargen, auth,
   time, echo, discard sowie daytime.

   Dieser Abschnitt beschreibt die Konfiguration von inetd.

  28.2.1. Konfigurationsdatei

   Die Konfiguration von inetd erfolgt u:ber /etc/inetd.conf Jede Zeile
   dieser Datei repra:sentiert eine Anwendung, die von inetd gestartet werden
   kann. In der Voreinstellung beginnt jede Zeile mit einem Kommentar (#),
   was bedeutet dass inetd keine Verbindungen fu:r Anwendungen akzeptiert.
   Entfernen Sie den Kommentar am Anfang der Zeile, damit inetd Verbindungen
   fu:r diese Anwendung entgegennimmt.

   Nachdem Sie die A:nderungen gespeichert haben, fu: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 fu:r die von Ihnen
   konfigurierten Dienste entgegennimmt:

 # service inetd start

   Sobald inetd gestartet ist, muss der Dienst benachrichtigt werden, wenn
   eine A:nderung in /etc/inetd.conf gemacht wird:

   Beispiel 28.1. Die Konfigurationsdatei von inetd neu einlesen

 # service inetd reload

   Normalerweise mu: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 fu:r ftpd(8) u:ber IPv4:

 ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l

   Die sieben Spalten in diesem Eintrag haben folgende Bedeutung:

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

   service-name

           Der Dienstname eines bestimmten Daemons. Er muss einem in
           /etc/services aufgelisteten Dienst entsprechen. Hier wird
           festgelegt, auf welchen Port inetd eingehende Verbindungen fu:r
           diesen Dienst entgegennimmt. Wenn ein neuer Dienst benutzt wird,
           muss er zuerst in /etc/services eingetragen werden.

   socket-type

           Entweder stream, dgram, raw, oder seqpacket. Nutzen Sie stream
           fu:r TCP-Verbindungen und dgram fu:r UDP-Dienste.

   protocol

           Benutzen Sie eines der folgenden Protokolle:

                Protokoll                        Bedeutung                    
           tcp oder tcp4       TCP (IPv4)                                     
           udp oder udp4       UDP (IPv4)                                     
           tcp6                TCP (IPv6)                                     
           udp6                UDP (IPv6)                                     
           tcp46               TCP sowohl unter IPv4 als auch unter IPv6      
           udp46               UDP sowohl unter IPv4 als auch unter IPv6      

   {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]

           In diesem Feld muss wait oder nowait angegeben werden. max-child,
           max-connections-per-ip-per-minute sowie max-child-per-ip sind
           optional.

           wait|nowait gibt an, ob der Dienst seinen eigenen Socket verwalten
           kann oder nicht. dgram-Sockets mu:ssen wait verwenden, wa:hrend
           Daemonen mit stream-Sockets, die normalerweise auch aus mehreren
           Threads bestehen, nowait verwenden sollten. wait gibt in der Regel
           mehrere Sockets an einen einzelnen Daemon weiter, wa:hrend nowait
           fu:r jeden neuen Socket einen Childdaemon erzeugt.

           Die maximale Anzahl an Child-Daemonen, die inetd erzeugen kann,
           wird durch die Option max-child festgelegt. Wenn ein bestimmter
           Daemon 10 Instanzen beno:tigt, wird der Wert /10 hinter die Option
           nowait gesetzt. Der Wert /0 gibt an, das es keine Beschra:nkung
           gibt.

           max-connections-per-ip-per-minute legt die maximale Anzahl von
           Verbindungsversuchen pro Minute fest, die von einer bestimmten
           IP-Adresse aus unternommen werden ko:nnen. Sobald das Limit
           erreicht ist, werden weitere Verbindungen von dieser IP-Adresse
           geblockt, bis die Minute voru:ber ist. Ein Wert von /10 wu:rde die
           maximale Anzahl der Verindungsversuche einer bestimmten IP-Adresse
           auf zehn Versuche in der Minute beschra:nken. max-child-per-ip
           legt fest, wie viele Child-Daemonen von einer bestimmten
           IP-Adresse aus gestartet werden ko:nnen. Durch diese Optionen
           lassen sich Ressourcenverbrauch sowie die Auswirkungen eines
           Denial of Service (DoS)-Angriffs begrenzen.

           Ein Beispiel finden Sie in den Voreinstellungen fu:r fingerd(8):

 finger stream  tcp     nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s

   user

           Der Benutzername, unter dem der jeweilige Daemon laufen soll.
           Meistens laufen Daemonen als root, daemon oder nobody.

   server-program

           Der vollsta:ndige Pfad des Daemons. Wird der Daemon von inetd
           intern bereitgestellt, verwenden Sie internal.

   server-program-arguments

           Dieser Eintrag legt die Argumente fest, die bei der Aktivierung an
           den Daemon u:bergeben werden. Wenn es sich beim Daemon um einen
           internen Dienst handelt, verwenden Sie wiederum internal.

  28.2.2. Kommandozeilenoptionen

   Wie die meisten anderen Server-Daemonen la:sst sich auch inetd u:ber
   verschiedene Optionen steuern. In der Voreinstellung wird inetd mit -wW -C
   60 gestartet. Durch das Setzen dieser Werte wird das TCP-Wrapping fu:r
   alle inetd-Dienste aktiviert. Zudem wird verhindert, dass eine IP-Adresse
   eine Dienst o:fter als 60 Mal pro Minute anfordern kann.

   Um die Voreinstellungen fu:r inetd zu a:ndern, fu:gen Sie einen Eintrag
   fu:r inetd_flags in /etc/rc.conf hinzu. Wenn inetd bereits ausgefu:hrt
   wird, starten Sie ihn mit service inetd restart neu.

   Die verfu:gbaren Optionen sind:

   -c maximum

           Legt die maximale Anzahl von parallelen Aufrufen eines Dienstes
           fest; in der Voreinstellung gibt es keine Einschra:nkung. Diese
           Einstellung kann fu:r jeden Dienst durch Setzen des Parameters
           max-child in /etc/inetd.conf festgelegt werden.

   -C rate

           Legt fest, wie oft ein Dienst von einer einzelnen IP-Adresse in
           einer Minute aufgerufen werden kann; in der Voreinstellung gibt es
           keine Einschra:nkung. Dieser Wert kann fu:r jeden Dienst durch das
           Setzen des Parameters max-connections-per-ip-per-minute in
           /etc/inetd.conf festgelegt werden.

   -R rate

           Legt fest, wie oft ein Dienst in der Minute aktiviert werden kann;
           in der Voreinstellung sind dies 256 Aktivierungen pro Minute. Ein
           Wert von 0 erlaubt unbegrenzt viele Aktivierungen.

   -s maximum

           Legt fest, wie oft ein Dienst in der Minute von einer einzelnen
           IP-Adresse aus aktiviert werden kann; in der Voreinstellung gibt
           es hier keine Beschra:nkung. Diese Einstellung kann fu:r jeden
           Dienst durch die Angabe von max-child-per-ip in /etc/inetd.conf
           angepasst werden.

   Es sind noch weitere Optionen verfu:gbar. Eine vollsta:ndige Liste der
   Optionen finden Sie in inetd(8).

  28.2.3. Sicherheitsbedenken

   Viele Daemonen, die von inetd verwaltet werden, sind nicht auf Sicherheit
   bedacht. Einige Damonen, wie beispielsweise fingerd, liefern
   Informationen, die fu:r einen Angreifer nu:tzlich sein ko:nnten.
   Aktivieren Sie nur erforderliche Dienste und u:berwachen Sie das System
   auf u:berma:ssige Verbindungsversuche. max-connections-per-ip-per-minute,
   max-child und max-child-per-ip ko:nnen verwendet werden, um solche
   Angriffe zu begrenzen.

   TCP-Wrapper ist in der Voreinstellung aktiviert. Lesen Sie
   hosts_access(5), wenn Sie weitere Informationen zum Setzen von
   TCP-Beschra:nkungen fu:r verschiedene von inetd aktivierte Daemonen
   beno:tigen.

28.3. Network File System (NFS)

   Reorganisiert und erweitert von Tom Rhodes.
   Geschrieben von Bill Swingle.

   FreeBSD unterstu:tzt das Netzwerkdateisystem NFS, das es einem Server
   erlaubt, Dateien und Verzeichnisse u:ber ein Netzwerk mit Clients zu
   teilen. Mit NFS ko:nnen Benutzer und Programme auf Daten entfernter
   Systeme zugreifen, und zwar so, als ob es sich um lokal gespeicherte Daten
   handeln wu:rde.

   Die wichtigsten Vorteile von NFS sind:

     * Daten, die sonst auf jeden Client dupliziert wu:rden, ko:nnen an einem
       zentralen Ort aufbewahrt, und von den Clients u:ber das Netzwerk
       aufgerufen werden.

     * Verschiedene Clients ko:nnen auf ein gemeinsames Verzeichnis
       /usr/ports/distfiles zugreifen. Die gemeinsame Nutzung dieses
       Verzeichnisses ermo:glicht einen schnellen Zugriff auf die
       Quelldateien, ohne sie auf jede Maschine zu kopieren zu mu:ssen.

     * In gro:sseren 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 Verfu:gung, unabha:ngig davon, an welchem Client
       im Netzwerk sie sich anmelden.

     * Die Verwaltung der NFS-Exporte wird vereinfacht. Zum Beispiel gibt es
       dann nur noch ein Dateisystem, fu:r das Sicherheits- oder
       Backup-Richtlinien festgelegt werden mu:ssen.

     * Wechselmedien ko:nnen von anderen Maschinen im Netzwerk verwendet
       werden. Dies reduziert die Anzahl von Gera:ten im Netzwerk und bietet
       einen zentralen Ort fu:r die Verwaltung. Oft ist es einfacher, u:ber
       ein zentrales Installationsmedium Software auf mehreren Computern zu
       installieren.

   NFS besteht aus einem Server und einem oder mehreren Clients. Der Client
   greift u:ber das Netzwerk auf die Daten zu, die auf dem Server gespeichert
   sind. Damit dies korrekt funktioniert, mu:ssen einige Prozesse
   konfiguriert und gestartet werden:

   Folgende Daemonen mu:ssen auf dem Server ausgefu:hrt werden:

   Daemon                             Beschreibung                            
   nfsd    Der NFS-Daemon. Er bearbeitet Anfragen der NFS-Clients.            
   mountd  Der NFS-Mount-Daemon. Er bearbeitet die Anfragen von nfsd.         
   rpcbind Der Portmapper-Daemon. Durch ihn erkennen die NFS-Clients, welchen 
           Port der NFS-Server verwendet.                                     

   Der Einsatz von nfsiod(8) ist nicht zwingend erforderlich, kann aber die
   Leistung auf dem Client verbessern.

  28.3.1. Konfiguration des Servers

   Die Dateisysteme, die der NFS-Server exportieren soll, werden in
   /etc/exports festgelegt. Jede Zeile in dieser Datei beschreibt ein zu
   exportierendes Dateisystem, Clients, die darauf Zugriff haben sowie alle
   Zugriffsoptionen. Die Optionen eines auf einen anderen Rechner
   exportierten Dateisystems mu:ssen alle in einer Zeile stehen. Wird in
   einer Zeile kein Rechner festgelegt, du:rfen alle Clients im Netzwerk das
   exportierte Dateisystem einha:ngen.

   Wie Dateisysteme exportiert werden, ist in der folgenden /etc/exports zu
   sehen. Diese Beispiele mu:ssen natu:rlich an die Arbeitsumgebung und die
   Netzwerkkonfiguration angepasst werden. Es existieren viele verschiedene
   Optionen, allerdings werden hier nur wenige von ihnen erwa:hnt. Eine
   vollsta:ndige Liste der Optionen findne Sie in exports(5).

   Dieses Beispiel exportiert /cdrom fu:r drei Clients, alpha, bravo und
   charlie:

 /cdrom -ro alpha bravo charlie

   Die Option -ro kennzeichnet das exportierte Dateisystem als
   schreibgeschu:tzt. Dadurch sind Clients nicht in der Lage, das exportierte
   Dateisystem zu vera:ndern. Dieses Beispiel geht davon aus, dass die
   Hostnamen entweder u:ber DNS oder u:ber /etc/hosts aufgelo:st werden
   ko:nnen. Lesen Sie hosts(5) falls das Netzwerk u:ber keinen DNS-Server
   verfu:gt.

   Das na:chste Beispiel exportiert /home auf drei durch IP-Adressen
   bestimmte Clients. Diese Einstellung kann fu:r Netzwerke ohne DNS-Server
   und /etc/hosts nu:tzlich sein. Die Option -alldirs ermo:glicht es, auch
   Unterverzeichnisse als Mountpunkte festzulegen. Dies bedeutet aber nicht,
   dass alle Unterverzeichnisse eingeha:ngt werden, vielmehr wird es dem
   Client ermo:glicht, nur diejenigen Verzeichnisse einzuha:ngen, die auch
   beno:tigt werden.

 /usr/home  -alldirs  10.0.0.2 10.0.0.3 10.0.0.4

   Das na:chste Beispiel exportiert /a, damit Clients von verschiedenen
   Doma:nen auf das Dateisystem zugreifen ko:nnen. Die Option -maproot=root
   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 Zugriffsbeschra:nkungen dieses Kontos.

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

   Ein Client kann fu:r jedes Dateisystem nur einmal definiert werden. Wenn
   beispielsweise /usr ein gesondertes Dateisystem ist, dann wa:ren die
   folgenden Eintra:ge falsch, da in beiden Eintra:gen der gleiche Rechner
   angegeben wird:

 #Nicht erlaubt, wenn /usr ein einziges Dateisystem ist
 /usr/src   client
 /usr/ports client

   Das richtige Format fu:r eine solche Situation ist:

 /usr/src /usr/ports  client

   Das Folgende ist ein Beispiel fu:r eine gu:ltige Exportliste, in der /usr
   und /exports lokale Dateisysteme sind:

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

   Damit die vom NFS-Server beno:tigen Prozesse beim Booten gestartet werden,
   fu:gen Sie folgende Optionen in /etc/rc.conf hinzu:

 rpcbind_enable="YES"
 nfs_server_enable="YES"
 mountd_flags="-r"

   Der Server kann jetzt mit diesem Kommando gestartet werden:

 # service nfsd start

   Wenn der NFS-Server startet, wird auch mountd automatisch gestartet.
   Allerdings liest mountd /etc/exports nur, wenn der Server gestartet wird.
   Um nachfolgende A:nderungen an /etc/exports wirksam werden zu lassen, kann
   mountd angewiesen werden, die Datei neu einzulesen:

 # service mountd reload

  28.3.2. Konfiguration des Clients

   Um den NFS-Client zu aktivieren, setzen Sie folgende Option in
   /etc/rc.conf auf jedem Client:

 nfs_client_enable="YES"

   Der Client ist nun in der Lage, ein entferntes Dateisystem einzuha:ngen.
   In diesen Beispielen ist der Name des Servers server und der Name des
   Clients client. Fu:gen Sie folgenden Befehl aus, um das Verzeichnis /home
   vom server auf dem client ins Verzeichnis /mnt einzuha:ngen:

 # mount server:/home /mnt

   Die Dateien und Verzeichnisse in /home stehen dem Rechner client nun im
   Verzeichnis /mnt zur Verfu:gung.

   Um ein entferntes Dateisystem bei jedem Systemstart automatisch
   einzuha:ngen, fu:gen Sie das Dateisystem in /etc/fstab ein:

 server:/home    /mnt    nfs     rw      0       0

   fstab(5) entha:lt eine Beschreibung aller Optionen.

  28.3.3. Dateien sperren (Locking)

   Einige Anwendungen erfordern die Sperrung von Dateien, damit sie korrekt
   arbeiten. Um diese Sperre zu aktivieren, mu:ssen diese Zeilen in
   /etc/rc.conf sowohl auf dem Client als auch auf dem Server hinzugefu:gt
   werden:

 rpc_lockd_enable="YES"
 rpc_statd_enable="YES"

   Danach starten Sie die beiden Anwendungen:

 # service lockd start
 # service statd start

   Wenn keine Dateisperren zwischen den NFS-Clients und dem NFS-Server
   beno:tigt werden, ko:nnen Sie den NFS-Client durch die U:bergabe der
   Option -L an mount zu einer lokalen Sperrung von Dateien zwingen. Weitere
   Details finden Sie in mount_nfs(8).

  28.3.4. Automatisches Einha:ngen mit amd(8)

   Beigetragen von Wylie Stilwell.
   U:berarbeitet von Chern Lee.

   amd(8) (Automatic Mounter Daemon) ha:ngt ein entferntes Dateisystem
   automatisch ein, wenn auf eine Datei oder ein Verzeichnis in diesem
   Dateisystem zugegriffen wird. Dateisysteme, die u:ber einen gewissen
   Zeitraum inaktiv sind, werden von amd automatisch abgeha:ngt.

   Dieser Damon ist eine Alternative zum dauerhaften Einha: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 ha:ngt das Dateisystem automatisch ein. /net wird zum
   Einha:ngen von exportierten Dateisystemen von einer IP-Adresse verwendet,
   wa:hrend /host zum Einha:ngen von exportierten Dateisystemen eines durch
   seinen Namen festgelegten Rechners dient. Ein Zugriff auf eine Datei in
   /host/foobar/usr wu:rde amd veranlassen, das von foobar exportierte
   Dateisystem /usr einzuha:ngen.

   Beispiel 28.2. Ein exportiertes Dateisystem mit amd in den Verzeichnisbaum
   einha:ngen

   showmount -e zeigt in diesem Beispiel die exportierten Dateisysteme des
   NFS-Servers foobar an:

 % showmount -e foobar
 Exports list on foobar:
 /usr                               10.10.10.0
 /a                                 10.10.10.0
 % cd /host/foobar/usr

   Die Ausgabe von showmount zeigt /usr als exportiertes Dateisystem an. Wenn
   man in das Verzeichnis /host/foobar/usr wechselt, fa:ngt amd die Anfrage
   ab und versucht den Rechnernamen foobar aufzulo:sen. Wenn dies gelingt,
   wird amd automatisch den gewu:nschten Export in den Verzeichnisbaum
   einha:ngen.

   Um amd beim Booten zu aktivieren, fu:gen Sie folgende Zeile in
   /etc/rc.conf ein:

 amd_enable="YES"

   Um amd direkt zu starten:

 # service amd start

   Individuelle Optionen ko:nnen u:ber die Umgebungsvariable amd_flags an amd
   u: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"

   Die Standardoptionen, mit denen exportierte Dateisysteme in den
   Verzeichnisbaum eingeha:ngt werden, werden in /etc/amd.map festgelegt.
   Einige der erweiterten Optionen von amd werden in /etc/amd.conf definiert.

   Weitere Informationen finden Sie in amd(8) und amd.conf(5).

  28.3.5. Automatisches Einha:ngen mit autofs(5)

  Anmerkung:

   autofs(5) wird seit FreeBSD 10.1-RELEASE unterstu:tzt. Um die
   Funktionalita:t des automatischen Einha:ngens in a:lteren
   FreeBSD-Versionen zu benutzen, verwenden Sie stattdessen amd(8). In diesem
   Kapitel wird nur das automatische Einha:ngen mit Hilfe von autofs(5)
   beschrieben.

   autofs(5) ist eine gebra:uchliche Bezeichnung fu:r verschiedene
   Komponenten, welche es erlauben, lokale und entfernte Dateisysteme
   automatisch einzuha:ngen, sobald auf eine Datei oder ein Verzeichnis in
   diesem Dateisystem zugegriffen wird. Es besteht aus einer
   Kernel-Komponente autofs(5) und mehreren Benutzerprogrammen: automount(8),
   automountd(8) und autounmountd(8). autofs(5) ist eine Alternative fu:r
   amd(8) aus fru:heren FreeBSD-Versionen. amd(8) steht nach wie vor zur
   Verfu:gung, da beide Programme ein unterschiedliches Format verwenden. Das
   Format welches autofs(5) verwendet ist das gleiche wie bei anderen SVR4
   Automountern, beispielsweise denen aus Solaris(TM), Mac OS(R) X und
   Linux(R).

   Das virtuelle autofs(5)-Dateisystem wird von automount(8) in einen
   bestimmten Mountpunkt eingeha:ngt. Dies geschieht gewo:hnlich wa:hrend des
   Bootens.

   Jedes Mal, wenn ein Prozess versucht auf eine Datei unterhalb des
   autofs(5)-Mountpunkts zuzugreifen, wird der Kernel den
   automountd(8)-Daemon benachrichtigen und den aktuellen Prozess anhalten.
   Der automountd(8)-Daemon wird dann die Anfrage des Kernels bearbeiten und
   das entsprechende Dateisystem einha:ngen. Anschliessend wird der Daemon
   den Kernel benachrichtigen, dass der angehaltene Prozess wieder
   freigegeben werden kann. Der autounmountd(8)-Daemon ha:ngt automatisch
   Dateisysteme nach einiger Zeit ab, sofern sie nicht mehr verwendet werden.

   Die prima:re Konfigurationsdatei von autofs ist /etc/auto_master. Sie
   entha:lt die einzelnen Zuordnungen zu den Mountpunkten. Eine Erkla:rung zu
   auto_master und der Syntax fu:r die Zuordnungen finden Sie in
   auto_master(5).

   Eine spezielle Automounter Zuordnung wird in /net eingeha:ngt. Wenn auf
   eine Datei in diesem Verzeichnis zugegriffen wird, ha:ngt autofs(5) einen
   bestimmten, entfernen Mountpunkt ein. Wenn beispielsweise auf eine Datei
   unterhalb von /net/foobar/usr zugegriffen werden soll, wu:rde
   automountd(8) das exportierte Dateisystem /usr von dem Rechner foobar
   einha:ngen.

   Beispiel 28.3. Ein exportiertes Dateisystem mit autofs(5) in den
   Verzeichnisbaum einha:ngen

   In diesem Beispiel zeigt showmount -e die exportierten Dateisysteme des
   NFS-Servers foobar:

 % showmount -e foobar
 Exports list on foobar:
 /usr                               10.10.10.0
 /a                                 10.10.10.0
 % cd /net/foobar/usr

   Die Ausgabe von showmount zeigt das exportierte Dateisystem /usr. Wenn in
   das Verzeichnis /host/foobar/usr gewechselt wird, fa:ngt automountd(8) die
   Anforderung ab und versucht, den Rechnernamen foobar aufzulo:sen. Gelingt
   dies, wird automountd(8) automatisch das exportierte Dateisystem
   einha:ngen.

   Um autofs(5) beim Booten zu aktivieren, fu:gen Sie diese Zeile in
   /etc/rc.conf ein:

 autofs_enable="YES"

   Danach kann autofs(5) gestartet werden:

 # service automount start
 # service automountd start
 # service autounmountd start

   Obwohl das Format von autofs(5) das gleiche ist wie in anderen
   Betriebssystemen, kann es wu:nschenswert sein, Informationen von anderen
   Betriebssystemen zu Rate zu ziehen, wie dieses Mac OS X Dokument.

   Weitere Informationen finden Sie in den Manualpages automount(8),
   automountd(8), autounmountd(8) und auto_master(5).

28.4. Network Information System (NIS)

   Das Network Information System (NIS) wurde entwickelt, um UNIX(R)-Systeme
   zentral verwalten zu ko:nnen. Dazu za:hlen beispielsweise Solaris(TM),
   HP-UX, AIX(R), Linux(R), NetBSD, OpenBSD und FreeBSD. NIS war
   urspru:nglich als Yellow Pages bekannt, aus markenrechtlichen Gru:nden
   wurde der Name aber gea:ndert. Dies ist der Grund, warum NIS-Kommandos mit
   yp beginnen.

   Bei NIS handelt es sich um ein RPC-basiertes Client/Server-System. Eine
   Gruppe von Rechnern greift dabei innerhalb einer NIS-Doma:ne auf
   gemeinsame Konfigurationsdateien zu. Dies erlaubt es einem
   Systemadministrator, NIS-Clients mit minimalem Aufwand einzurichten, sowie
   A:nderungen an der Systemkonfiguration von einem zentralen Ort aus
   durchzufu:hren.

   FreeBSD verwendet die Version 2 des NIS-Protokolls.

  28.4.1. NIS-Begriffe und -Prozesse

   Tabelle 30.1 fasst die Begriffe und Anwenderprozesse zusammen, die von NIS
   verwendet werden:

   Tabelle 28.1. NIS Begriffe

       Begriff                            Beschreibung                        
                    NIS-Masterserver und Clients benutzen einen gemeinsamen   
   NIS-Doma:nenname NIS-Doma:nennamen. In der Regel hat dieser Name nichts    
                    mit DNS zu tun.                                           
                    Dieser Dienst aktiviert RPC und muss gestartet sein,      
   rpcbind(8)       damit ein NIS-Server oder -Client ausgefu:hrt werden      
                    kann.                                                     
                    Dieser Dienst "bindet" einen NIS-Client an seinen         
                    NIS-Server. Der Client bezieht den NIS-Doma:nennamen vom  
                    System und stellt u:ber das RPC-Protokoll eine Verbindung 
   ypbind(8)        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.   
                    Dies ist der Prozess fu:r den NIS-Server. Wenn dieser     
                    Dienst nicht mehr la:uft, kann der Server nicht mehr auf  
                    NIS-Anforderungen reagieren. Wenn ein Slaveserver         
                    existiert, kann dieser als Ersatz fungieren. Einige       
   ypserv(8)        NIS-Systeme (allerdings nicht das von FreeBSD) versuchen  
                    allerdings erst gar nicht, sich mit einem anderen Server  
                    zu verbinden, wenn der Masterserver nicht mehr reagiert.  
                    Die einzige Lo:sung besteht darin, den Serverprozess oder 
                    den ypbind-Prozess auf dem Client neu zu starten.         
                    Dieser Prozess la:uft nur auf dem NIS-Masterserver. Es    
                    handelt sich um einen Daemonprozess, der es NIS-Clients   
   rpc.yppasswdd(8) ermo:glicht, ihre NIS-Passwo:rter zu a:ndern. Wenn dieser 
                    Daemon nicht la:uft, mu:ssen sich die Benutzer am         
                    NIS-Masterserver anmelden und ihre Passwo:rter dort       
                    a:ndern.                                                  

  28.4.2. Arten von NIS-Rechnern

     * NIS-Masterserver

       Dieser Server dient als zentraler Speicherort fu:r
       Rechnerkonfigurationen. Zudem verwaltet er die massgebliche 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 fu:r mehrere
       NIS-Doma:nen als Masterserver fungieren kann, wird diese Art von
       Konfiguration nicht behandelt, da sich dieser Abschnitt auf eine
       relativ kleine NIS-Umgebung konzentriert.

     * NIS-Slaveserver

       NIS-Slaveserver verwalten Kopien der Daten des NIS-Masterservers um
       Redundanz zu bieten. Zudem entlasten Slaveserver den Masterserver:
       NIS-Clients verbinden sich immer mit dem NIS-Server, welcher zuerst
       reagiert. Dieser Server kann auch ein Slaveserver sein.

     * NIS-Clients

       NIS-Clients identifizieren sich gegenu:ber dem NIS-Server wa:hrend der
       Anmeldung.

   Mit NIS ko:nnen Informationen aus verschiedenen Dateien von mehreren
   Rechnern gemeinsam verwendet werden. master.passwd, group, und hosts
   werden oft gemeinsam u:ber NIS verwendet. Immer, wenn ein Prozess auf
   einem Client auf Informationen zugreifen will, die normalerweise in
   lokalen Dateien vorhanden wa:ren, wird stattdessen eine Anfrage an den
   NIS-Server gestellt, an den der Client gebunden ist.

  28.4.3. Planung

   Dieser Abschnitt beschreibt eine einfache NIS-Umgebung, welche aus 15
   FreeBSD-Maschinen besteht, fu: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 fu:nfzehn Rechnern
   manuell erledigt werden.

   In Zukunft soll die Konfiguration wie folgt aussehen:

      Rechnername          IP-Adresse                Rechneraufgabe           
   ellington          10.0.0.2             NIS-Master                         
   coltrane           10.0.0.3             NIS-Slave                          
   basie              10.0.0.4             Workstation der Fakulta:t          
   bird               10.0.0.5             Clientrechner                      
   cli[1-11]          10.0.0.[6-17]        Verschiedene andere Clients        

   Wenn erstmalig ein NIS-Schema eingerichtet wird, sollte es im Voraus
   sorgfa:ltig geplant werden. Unabha:ngig von der Gro:sse des Netzwerks
   mu:ssen einige Entscheidungen im Rahmen des Planungsprozesses getroffen
   werden.

    28.4.3.1. Einen NIS-Doma:nennamen wa:hlen

   Wenn ein Client Informationen anfordert, ist in dieser Anforderung der
   Name der NIS-Doma:ne enthalten. Dadurch weiss jeder Server im Netzwerk,
   auf welche Anforderung er antworten muss. Stellen Sie sich den
   NIS-Doma:nennamen als einen Namen einer Gruppe von Rechnern vor.

   Manchmal wird der Name der Internetdoma:ne auch fu:r die NIS-Doma:ne
   verwendet. Dies ist allerdings nicht empfehlenswert, da es bei der
   Behebung von Problemen verwirrend sein kann. Der Name der NIS-Doma: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. ha:tte daher vielleicht die NIS-Doma:ne
   "acme-art". Fu:r dieses Beispiel wird der Name test-domain verwendet.

   Es gibt jedoch auch Betriebssysteme, die als NIS-Doma:nennamen den Namen
   der Internetdoma:ne verwenden. Wenn dies fu:r einen oder mehrere Rechner
   des Netzwerks zutrifft, muss der Name der Internetdoma:ne als
   NIS-Doma:nennamen verwendet werden.

    28.4.3.2. Anforderungen an den Server

   Bei der Wahl des NIS-Servers mu:ssen einige Dinge beachtet werden. Da die
   NIS-Clients auf die Verfu:gbarkeit des Servers angewiesen sind, sollten
   Sie einen Rechner wa:hlen, der nicht regelma:ssig 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 mo:glich, den NIS-Server als
   weiteren Dienst auf einem anderen Rechner laufen zu lassen. Wenn jedoch
   ein NIS-Server ausfa:llt, wirkt sich dies negativ auf alle NIS-Clients
   aus.

  28.4.4. Einen NIS-Masterserver konfigurieren

   Die verbindlichen Kopien aller NIS-Dateien befinden sich auf dem
   Masterserver. Die Datenbanken, in denen die Informationen gespeichert
   sind, bezeichnet man als NIS-Maps. Unter FreeBSD werden diese Maps unter
   /var/yp/[domainname] gespeichert, wobei [domainname] der Name der
   NIS-Doma:ne ist. Da ein NIS-Server mehrere Doma:nen verwalten kann,
   ko:nnen auch mehrere Verzeichnisse vorhanden sein. Jede Doma:ne verfu:gt
   u:ber ein eigenes Verzeichnis sowie einen eigenen, von anderen Doma:nen
   unabha:ngigen Satz von NIS-Maps.

   NIS-Master- und Slaveserver verwenden ypserv(8), um NIS-Anfragen zu
   bearbeiten. Dieser Daemon ist fu:r eingehende Anfragen der NIS-Clients
   verantwortlich. Er ermittelt aus der angeforderten Doma:ne und Map einen
   Pfad zur entsprechenden Datenbank und sendet die angeforderten Daten von
   der Datenbank zum Client.

   Abha:ngig von den Anforderungen ist die Einrichtung eines
   NIS-Masterservers relativ einfach, da NIS von FreeBSD bereits in der
   Standardkonfiguration unterstu:tzt wird. Es kann durch folgende Zeilen in
   /etc/rc.conf aktiviert werden:

 nisdomainname="test-domain">>>>>>>1
 nis_server_enable="YES">>>>>>>>>2
 nis_yppasswdd_enable="YES">>>>>>3

   1 Diese Zeile setzt den NIS-Doma:nennamen auf test-domain.                 
   2 Dadurch werden die NIS-Serverprozesse beim Systemstart automatisch       
     ausgefu:hrt.                                                             
   3 Durch diese Zeile wird der rpc.yppasswdd(8)-Daemon aktiviert, der die    
     A:nderung von NIS-Passwo:rtern von einem Client aus ermo:glicht.         

   Wird ypserv in einer Multi-Serverdoma: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 ko:nnten seltsame Fehler auftreten, wenn ein Server ausfa: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 Verzo:gerung kann betra:chtlich sein. Ausserdem kann
   der Fehler erneut auftreten, da sich die Server wiederum aneinander binden
   ko:nnten.

   Server, die auch als Client arbeiten, ko:nnen durch das Hinzufu: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
   ausgefu:hrt werden, um alles entsprechend den Vorgaben in /etc/rc.conf
   einzurichten. Bevor die NIS-Maps einrichtet werden ko:nnen, muss der
   ypserv(8)-Daemon manuell gestartet werden:

 # service ypserv start

    28.4.4.1. Die NIS-Maps initialisieren

   NIS-Maps Sie werden am NIS-Masterserver aus den Konfigurationsdateien
   unter /etc erzeugt. Einzige Ausnahme: /etc/master.passwd. Dies verhindert,
   dass die Passwo:rter fu:r root- oder andere Administratorkonten an alle
   Server in der NIS-Doma:ne verteilt werden. Deshalb werden die prima:ren
   Passwort-Dateien konfiguriert, bevor die NIS-Maps initialisiert werden:

 # cp /etc/master.passwd /var/yp/master.passwd
 # cd /var/yp
 # vi master.passwd

   Es ist ratsam, alle Eintra:ge fu:r Systemkonten sowie Benutzerkonten, die
   nicht an die NIS-Clients weitergegeben werden sollen, wie beispielsweise
   root und weitere administrative Konten, zu entfernen.

  Anmerkung:

   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 ko:nnen die NIS-Maps initialisiert werden. FreeBSD verwendet dafu:r
   das Skript ypinit(8). Geben Sie -m und den NIS-Doma:nennamen an, wenn Sie
   NIS-Maps fu:r den Masterserver erzeugen:

 ellington# 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 FreeBSD
   laufen. Da test-domain aber auch u:ber einen Slaveserver verfu:gt, muss
   /var/yp/Makefile entsprechend angepasst werden, sodass es mit einem
   Kommentar (#) beginnt:

 NOPUSH = "True"

    28.4.4.2. Neue Benutzer hinzufu:gen

   Jedes Mal, wenn ein neuer Benutzer angelegt wird, muss er am
   NIS-Masterserver hinzugefu:gt und die NIS-Maps anschliessend neu erzeugt
   werden. Wird dieser Punkt vergessen, kann sich der neue Benutzer nur am
   NIS-Masterserver anmelden. Um beispielsweise den neuen Benutzer jsmith zur
   Doma:ne test-domain hinzufu:gen wollen, mu:ssen folgende Kommandos auf dem
   Masterserver ausgefu:hrt werden:

 # pw useradd jsmith
 # cd /var/yp
 # make test-domain

   Statt pw useradd jsmith kann auch adduser jsmith verwendet werden.

  28.4.5. Einen NIS-Slaveserver einrichten

   Um einen NIS-Slaveserver einzurichten, melden Sie sich am Slaveserver an
   und bearbeiten Sie /etc/rc.conf analog zum Masterserver. Erzeugen Sie aber
   keine NIS-Maps, da diese bereits auf dem Server vorhanden sind. Wenn
   ypinit auf dem Slaveserver ausgefu:hrt wird, benutzen Sie -s (Slave) statt
   -m (Master). Diese Option beno:tigt den Namen des NIS-Masterservers und
   den Doma:nennamen, wie in diesem Beispiel zu sehen:

 coltrane# 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
   entha:lt. Durch hinzufu:gen der folgenden Zeilen in /etc/crontab wird der
   Slaveserver angewiesen, seine Maps mit den Maps des Masterservers zu
   synchronisieren:

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

   Diese Eintra:ge sind nicht zwingend notwendig, da der Masterserver
   automatisch versucht, alle A:nderungen seiner NIS-Maps an seine
   Slaveserver weiterzugeben. Da Passwortinformationen aber auch fu:r nur vom
   Slaveserver abha: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 unvollsta:ndig sein
   ko:nnten.

   Um die Konfiguration abzuschliessen, fu:hren Sie /etc/netstart auf dem
   Slaveserver aus, um die NIS-Dienste erneut zu starten.

  28.4.6. Einen NIS-Client einrichten

   Ein NIS-Client bindet sich unter Verwendung von ypbind an einen
   NIS-Server. Dieser Daemon sendet RPC-Anfragen auf dem lokalen Netzwerk.
   Diese Anfragen legen den Namen der Doma:ne fest, die auf dem Client
   konfiguriert ist. Wenn der Server der entsprechenden Doma:ne eine solche
   Anforderung erha:lt, schickt er eine Antwort an ypbind, das wiederum die
   Adresse des Servers speichert. Wenn mehrere Server verfu:gbar sind,
   verwendet der Client die erste erhaltene Adresse und richtet alle Anfragen
   an genau diesen Server. ypbind "pingt" den Server gelegentlich an, um
   sicherzustellen, dass der Server funktioniert. Antwortet der Server
   innerhalb eines bestimmten Zeitraums nicht (Timeout), markiert ypbind die
   Doma:ne als ungebunden und beginnt erneut, RPCs u:ber das Netzwerk zu
   verteilen, um einen anderen Server zu finden.

   Einen FreeBSD-Rechner als NIS-Client einrichten:

    1. Fu:gen Sie folgende Zeilen in /etc/rc.conf ein, um den
       NIS-Doma:nennamen festzulegen, und um ypbind(8) bei der
       Initialisierung des Netzwerks zu starten:

 nisdomainname="test-domain"
 nis_client_enable="YES"

    2. Um alle Passworteintra:ge des NIS-Servers zu importieren, lo:schen Sie
       alle Benutzerkonten in /etc/master.passwd mit vipw. Denken Sie daran,
       zumindest ein lokales Benutzerkonto zu behalten. Dieses Konto sollte
       ausserdem Mitglied der Gruppe wheel sein. Wenn es mit NIS Probleme
       gibt, ko:nnen Sie diesen Zugang verwenden, um sich als Superuser
       anzumelden und das Problem zu beheben. Bevor Sie die A:nderungen
       speichern, fu:gen Sie folgende Zeile am Ende der Datei hinzu:

 +:::::::::

       Diese Zeile legt fu:r alle gu:ltigen Benutzerkonten der
       NIS-Server-Maps einen Zugang an. Es gibt verschiedene Wege, den
       NIS-Client durch A:nderung dieser Zeile zu konfigurieren. Eine Methode
       wird in Abschnitt 28.4.8, "Netzgruppen verwenden" beschrieben. Weitere
       detaillierte Informationen finden Sie im Buch Managing NFS and NIS vom
       O'Reilly Verlag.

    3. Um alle mo:glichen Gruppeneintra:ge vom NIS-Server zu importieren,
       fu:gen Sie folgende Zeile in /etc/group ein:

 +:*::

   Um den NIS-Client direkt zu starten, fu:hren Sie als Superuser die
   folgenden Befehle aus:

 # /etc/netstart
 # service ypbind start

   Danach sollte bei der Eingabe von ypcat passwd auf dem Client die
   passwd-Map des NIS-Servers angezeigt werden.

  28.4.7. Sicherheit unter NIS

   Da RPC ein Broadcast-basierter Dienst ist, kann jedes System innerhalb der
   Doma:ne mittels ypbind den Inhalt der NIS-Maps abrufen. Um nicht
   autorisierte Transaktionen zu verhindern, unterstu:tzt ypserv(8) eine
   Funktion namens "securenets", durch die der Zugriff auf bestimmte Rechner
   beschra:nkt werden kann. In der Voreinstellung sind diese Informationen in
   /var/yp/securenets gespeichert, es sei denn, ypserv(8) wurde mit der
   Option -p und einem alternativen Pfad gestartet. Diese Datei entha:lt
   Eintra:ge, die aus einer Netzwerkadresse und einer Netzmaske bestehen.
   Kommentarzeilen beginnen mit "#". /var/yp/securnets ko:nnte beispielsweise
   so aussehen:

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

   Wenn ypserv(8) eine Anforderung von einer zu diesen Regeln passenden
   Adresse erha: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.

   Abschnitt 13.4, "TCP Wrapper" beschreibt eine alternative Methode zur
   Zugriffskontrolle. Obwohl beide Methoden einige Sicherheit gewa:hren, sind
   sie anfa:llig fu:r "IP-Spoofing"-Angriffe. Der NIS-Verkehr sollte daher
   von einer Firewall blockiert werden.

   Server, die securenets verwenden, ko: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 durchfu:hren oder ko:nnen die Subnetzmaske
   nicht auslesen, wenn sie die Broadcast-Adresse berechnen. Einige Probleme
   ko:nnen durch A: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.

   Die Verwendung der TCP-Wrapper verlangsamt die Reaktion des NIS-Servers.
   Diese zusa:tzliche Reaktionszeit kann in Clientprogrammen zu Timeouts
   fu:hren. Dies vor allem in Netzwerken, die stark ausgelastet sind, oder
   nur u:ber langsame NIS-Server verfu:gen. Wenn ein oder mehrere Clients
   dieses Problem aufweisen, sollten Sie die betreffenden Clients in
   NIS-Slaveserver umwandeln, und diese an sich selbst binden.

    28.4.7.1. Bestimmte Benutzer an der Anmeldung hindern

   In diesem Beispiel gibt es innerhalb der NIS-Doma:ne den Rechner basie,
   der nur fu:r Mitarbeiter der Fakulta:t bestimmt ist. Die passwd Datenbank
   des NIS-Masterservers entha:lt Benutzerkonten sowohl fu:r
   Fakulta:tsmitarbeiter als auch fu:r Studenten. Dieser Abschnitt
   beschreibt, wie Sie den Mitarbeitern der Fakulta:t die Anmeldung am System
   ermo:glichen, wa:hrend den Studenten die Anmeldung verweigert wird.

   Es gibt eine Mo: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, fu:r
   zugelassene Benutzer stehen. In diesem Beispiel wird die Anmeldung fu:r
   den Benutzer bill am Rechner basie blockiert:

 basie# 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#

  28.4.8. Netzgruppen verwenden

   Bestimmten Benutzern die Anmeldung an einzelnen Systemen zu verweigern,
   kann in grossen Netzwerken schnell unu:bersichtlich werden. Dadurch
   verlieren Sie den Hauptvorteil von NIS: die zentrale Verwaltung.

   Netzgruppen wurden entwickelt, um grosse, komplexe Netzwerke mit Hunderten
   Benutzern und Rechnern zu verwalten. Ihre Aufgabe ist vergleichbar mit
   UNIX(R) Gruppen. Die Hauptunterschiede sind das Fehlen einer numerischen
   ID sowie die Mo:glichkeit, Netzgruppen zu definieren, die sowohl Benutzer
   als auch andere Netzgruppen enthalten.

   Um das Beispiel in diesem Kapitel fortzufu:hren, wird die NIS-Doma:ne um
   zusa:tzliche Benutzer und Rechner erweitert:

   Tabelle 28.2. Zusa:tzliche Benutzer

             Benutzername(n)                        Beschreibung              
   alpha, beta                         Mitarbeiter der IT-Abteilung           
   charlie, delta                      Lehrlinge der IT-Abteilung             
   echo, foxtrott, golf, ...           Mitarbeiter                            
   able, baker, ...                    Praktikanten                           

   Tabelle 28.3. Zusa:tzliche Rechner

          Rechnername(n)                         Beschreibung                 
   war, death, famine, pollution Nur Mitarbeiter der IT-Abteilung du:rfen     
                                 sich an diesen Rechnern anmelden.            
   pride, greed, envy, wrath,    Nur Mitarbeiter und Lehrlinge der            
   lust, sloth                   IT-Abteilung du:rfen sich auf diesen         
                                 Rechnern anmelden.                           
   one, two, three, four, ...    Gewo:hnliche Arbeitsrechner fu:r             
                                 Mitarbeiter.                                 
                                 Ein sehr alter Rechner ohne kritische Daten. 
   trashcan                      Sogar Praktikanten du:rfen diesen Rechner    
                                 verwenden.                                   

   Bei der Verwendung von Netzgruppen wird jeder Benutzer einer oder mehreren
   Netzgruppen zugewiesen und die Anmeldung wird dann fu:r die Netzgruppe
   erlaubt oder verwehrt. Wenn ein neuer Rechner hinzugefu:gt wird, mu:ssen
   die Zugangsbeschra:nkungen nur fu:r die Netzgruppen festgelegt werden.
   Wird ein neuer Benutzer angelegt, muss er einer oder mehreren Netzgruppen
   zugewiesen werden. Wenn die Einrichtung von NIS sorgfa: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 Eintra:ge in den Klammern stehen
   entweder fu:r eine Gruppe von einem oder mehreren Benutzern, oder fu:r den
   Namen einer weiteren Netzgruppe. Wenn ein Benutzer angegeben wird, haben
   die drei Felder in der Klammer folgende Bedeutung:

    1. Der Name des Rechner(s), auf dem die weiteren Felder fu:r den Benutzer
       gu:ltig sind. Wird kein Rechnername festgelegt, ist der Eintrag auf
       allen Rechnern gu:ltig.

    2. Der Name des Benutzerkontos, der zu dieser Netzgruppe geho:rt.

    3. Die NIS-Doma:ne fu:r das Benutzerkonto. Benutzerkonten ko:nnen von
       anderen NIS-Doma:nen in eine Netzgruppe importiert werden.

   Wenn eine Gruppe mehrere Benutzer entha:lt, mu:ssen diese durch
   Leerzeichen getrennt werden. Daru:ber hinaus kann jedes Feld Wildcards
   enthalten. Weitere Einzelheiten finden Sie in netgroup(5).

   Netzgruppennamen sollten nicht la:nger als 8 Zeichen sein. Es wird
   zwischen Gross- und Kleinschreibung unterschieden. Die Verwendung von
   Grossbuchstaben fu:r Netzgruppennamen ermo:glicht eine leichte
   Unterscheidung zwischen Benutzern, Rechnern und Netzgruppen.

   Einige NIS-Clients (dies gilt nicht fu:r FreeBSD) ko:nnen keine
   Netzgruppen mit mehr als 15 Eintra:gen verwalten. Diese Grenze kann
   umgangen werden, indem mehrere Subnetzgruppen mit weniger als fu:nfzehn
   Benutzern angelegt werden und diese Subnetzgruppen wiederum in einer
   Netzgruppe zusammengefasst wird, wie in diesem Beispiel zu sehen:

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

   Wiederholen Sie diesen Vorgang, wenn mehr als 225 (15*15) Benutzer in
   einer einzigen Netzgruppe existieren.

   Die neue NIS-Map aktivieren und verteilen:

 ellington# cd /var/yp
 ellington# make

   Dadurch werden die NIS-Maps netgroup, netgroup.byhost und netgroup.byuser
   erzeugt. Pru:fen Sie die Verfu:gbarkeit der neuen NIS-Maps mit ypcat(1):

 ellington% ypcat -k netgroup
 ellington% ypcat -k netgroup.byhost
 ellington% ypcat -k netgroup.byuser

   Die Ausgabe des ersten Befehls gibt den Inhalt von /var/yp/netgroup
   wieder. Der zweite Befehl erzeugt nur dann eine Ausgabe, wenn
   rechnerspezifische Netzgruppen erzeugt wurden. Der dritte Befehl gibt die
   Netzgruppen nach Benutzern sortiert aus.

   Wenn Sie einen Client einrichten, verwenden Sie 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
   du:rfen sich an diesem Server anmelden.

   Diese Konfiguration gilt auch fu:r die ~-Funktion der Shell und fu:r alle
   Routinen, die auf Benutzernamen und numerische Benutzer-IDs zugreifen.
   Oder anders formuliert, cd ~Benutzer ist nicht mo: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,
   mu:ssen alle Benutzereintra:ge importiert werden, ohne ihnen jedoch zu
   erlauben, sich am Server anzumelden. Dies kann durch das Hinzufu:gen einer
   zusa:tzlichen Zeile erreicht werden:

 +:::::::::/sbin/nologin

   Diese Zeile weist den Client an, alle Eintra:ge zu importieren, aber die
   Shell in diesen Eintra:gen durch /sbin/nologin zu ersetzen.

   Stellen Sie sicher, dass die zusa: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 ko:nnen.

   Um die weniger wichtigen Server zu konfigurieren, ersetzen Sie den alten
   Eintrag +::::::::: auf den Servern mit diesen Zeilen:

 +@IT_EMP:::::::::
 +@IT_APP:::::::::
 +:::::::::/sbin/nologin

   Die entsprechenden Zeilen fu:r Arbeitspla:tze lauten:

 +@IT_EMP:::::::::
 +@USERS:::::::::
 +:::::::::/sbin/nologin

   NIS ist in der Lage, Netzgruppen aus anderen Netzgruppen zu bilden. Dies
   kann nu:tzlich sein, wenn sich die Firmenpolitik a:ndert. Eine
   Mo:glichkeit ist die Erzeugung rollenbasierter Netzgruppen. Sie ko:nnten
   eine Netzgruppe BIGSRV erzeugen, um den Zugang zu den wichtigsten Servern
   zu beschra:nken, eine weitere Gruppe SMALLSRV fu:r die weniger wichtigen
   Server und eine dritte Netzgruppe USERBOX fu:r die Arbeitsplatzrechner.
   Jede dieser Netzgruppen entha:lt die Netzgruppen, die sich auf diesen
   Rechnern anmelden du:rfen. Die Eintra:ge der Netzgruppen in der NIS-Map
   sollten a:hnlich den folgenden aussehen:

 BIGSRV    IT_EMP  IT_APP
 SMALLSRV  IT_EMP  IT_APP  ITINTERN
 USERBOX   IT_EMP  ITINTERN USERS

   Diese Methode funktioniert besonders gut, wenn Rechner in Gruppen mit
   identischen Beschra:nkungen eingeteilt werden ko:nnen. Unglu:cklicherweise
   ist dies die Ausnahme und nicht die Regel. Meistens wird die Mo:glichkeit
   zur rechnerspezischen Zugangsbeschra:nkung beno:tigt.

   Rechnerspezifische Netzgruppen sind eine weitere Mo:glichkeit, um mit den
   oben beschriebenen A:nderungen umzugehen. In diesem Szenario entha: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 du:rfen. Die zweite Zeile weist allen anderen
   Benutzern /sbin/nologin als Shell zu. Verwenden Sie auch hier (analog zu
   den Netzgruppen) Grossbuchstaben fu:r die Rechnernamen:

 +@BOXNAME:::::::::
 +:::::::::/sbin/nologin

   Sobald dies fu:r alle Rechner erledigt ist, mu:ssen die lokalen Versionen
   von /etc/master.passwd nie mehr vera:ndert werden. Alle weiteren
   A:nderungen geschehen u:ber die NIS-Maps. Nachfolgend ein Beispiel fu:r
   eine mo: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 mu:ssen,
   sollten rollenbasierte Netzgruppen verwendet werden, um die Gro:sse der
   NIS-Maps in Grenzen zu halten.

  28.4.9. Passwortformate

   Alle Rechner innerhalb der NIS-Doma:ne mu:ssen fu:r die Verschlu:sselung
   von Passwo:rtern das gleiche Format benutzen. Wenn Benutzer
   Schwierigkeiten bei der Authentifizierung auf einem NIS-Client haben,
   liegt dies mo:glicherweise an einem anderen Passwort-Format. In einem
   heterogenen Netzwerk muss das verwendete Format von allen Betriebssystemen
   unterstu: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 Eintra:ge]

   In diesem Beispiel verwendet das System das Format DES. Weitere mo:gliche
   Werte sind unter anderem blf und md5 (mit Blowfish und MD5 verschlu:sselte
   Passwo:rter).

   Wird auf einem Rechner das Format entsprechend der NIS-Doma:ne gea:ndert,
   muss anschliessend die Login-Capability Datenbank neu erstellt werden:

 # cap_mkdb /etc/login.conf

  Anmerkung:

   Das Format der schon bestehenden Passwo:rter wird erst aktualisiert, wenn
   ein Benutzer sein Passwort a:ndert, nachdem die Datenbank neu erstellt
   wurde.

28.5. Lightweight Access Directory Protocol (LDAP)

   Geschrieben von Tom Rhodes.
   U:bersetzt von Bjo:rn Heidotting.

   Das Lightweight Directory Access Protocol (LDAP) ist ein Protokoll der
   Anwendungsschicht, das verwendet wird um Objekte mithilfe eines verteilten
   Verzeichnisdienstes abzurufen, zu vera:ndern und zu authentifizieren.
   Betrachten Sie es als ein Telefonbuch, das homogene Informationen in
   mehreren hierarchischen Ebenen speichert. Es wird in Active Directory und
   OpenLDAP-Netzwerken eingesetzt, in denen Benutzer unter Verwendung eines
   einzigen Kontos auf diverse interne Informationen zugreifen.
   Beispielsweise kann E-Mail-Authentifizierung, Abfrage von
   Kontaktinformationen und Website-Authentifizierung u:ber ein einzelnes
   Benutzerkonto aus der Datenbank des LDAP-Servers erfolgen.

   Dieser Abschnitt entha:lt eine kompakte Anleitung, um einen LDAP-Server
   auf einem FreeBSD-System zu konfigurieren. Es wird vorausgesetzt, dass der
   Administrator bereits einen Plan erarbeitet hat, der verschiedene Punkte
   umfasst, unter anderem die Art der zu speichernden Informationen, fu:r was
   die Informationen verwendet werden, welche Benutzer Zugriff auf die
   Informationen haben und wie die Informationen vor unbefugtem Zugriff
   geschu:tzt werden.

  28.5.1. LDAP Terminologie und Struktur

   LDAP verwendet mehrere Begriffe die Sie verstehen sollten bevor Sie die
   Konfiguration beginnen. Alle Verzeichniseintra:ge bestehen aus einer
   Gruppe von Attributen. Jede Attributgruppe entha:lt einen eindeutigen
   Bezeichner, der als distinguished name (DN) bekannt ist. Dieser setzt sich
   normalerweise aus mehreren anderen Attributen, wie dem Relative
   Distinguished Name (RDN) zusammen. Wie bei Verzeichnissen gibt es auch
   hier absolute und relative Pfade. Betrachten Sie DN als absoluten Pfad und
   RDN als relativen Pfad.

   Beispielsweise ko:nnte ein LDAP-Eintrag wie folgt aussehen. Dieses
   Beispiel sucht nach dem Eintrag fu:r das angegebene Benutzerkonto (uid),
   Organisationseinheit (ou und Organisation (o):

 % 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: (123) 456-7890

 # search result
 search: 2
 result: 0 Success

 # numResponses: 2
 # numEntries:1

   Die Eintra:ge in diesem Beispiel zeigen die Werte fu:r die Attribute dn,
   mail, cn, uid und telephoneNumber. Das Attribut cn ist der RDN.

   Weitere Informationen u:ber LDAP und dessen Terminologie finden Sie unter
   http://www.openldap.org/doc/admin24/intro.html.

  28.5.2. Konfiguration eines LDAP-Servers

   FreeBSD integriert keinen LDAP-Server. Beginnen Sie die Konfiguration
   durch die Installation des Ports oder Pakets net/openldap24-server. Da der
   Port viele konfigurierbare Optionen hat, ist es empfehlenswert zu pru:fen,
   ob die Installation des Pakets ausreichend ist. Wenn Sie irgendwelche
   Optionen a:ndern mo:chten, ist es besser den Port zu u:bersetzen. In den
   meisten Fa:llen sollten die Standardwerte ausreichend sein. Wenn Sie
   jedoch SQL-Unterstu:tzung beno:tigen, muss diese Option aktiviert und der
   Port nach den Anweisungen in Abschnitt 4.5, "Benutzen der Ports-Sammlung"
   u:bersetzt werden.

   Als na:chstes muss ein Verzeichnis fu:r Daten sowie ein Verzeichnis fu:r
   die Zertifikate erstellt werden:

 # mkdir /var/db/openldap-data
 # mkdir /usr/local/etc/openldap/private

   Kopieren Sie die Konfigurationsdatei der Datenbank:

 # cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG

   Im na:chsten Schritt wird die Zertifizierungsstelle konfiguriert. Die
   folgenden Befehle mu:ssen in /usr/local/etc/openldap/private ausgefu:hrt
   werden. Dies ist wichtig, da die Dateiberechtigungen restriktiv gesetzt
   werden und Benutzer keinen direkten Zugriff auf diese Daten haben sollten.
   Geben Sie folgenden Befehl ein, um die Zertifizierungsstelle zu erstellen
   und folgen Sie den Anweisungen:

 # openssl req -days 365 -nodes -new -x509 -keyout ca.key -out ../ca.crt

   Diese Eintra:ge sind frei wa:hlbar, mit Ausnahme von Common Name. Hier
   muss etwas anderes als der Hostname des Systems eingetragen werden. Wenn
   ein selbstsigniertes Zertifikat verwendet wird, stellen Sie dem Hostnamen
   einfach das Pra:fix CA fu:r die Zertifizierungsstelle voran.

   Die na:chste Aufgabe besteht darin, einen
   Zertifikatsregistrierungsanforderung (CSR) sowie einen privaten Schlu:ssel
   zu erstellen. Geben Sie folgenden Befehl ein und folgen Sie den
   Anweisungen:

 # openssl req -days 365 -nodes -new -keyout server.key -out server.csr

   Stellen Sie hierbei sicher, dass Common Name richtig eingetragen wird.
   Anschliessend muss der Schlu:ssel signiert werden:

 # openssl x509 -req -days 365 -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserial

   Der letzte Schritt fu:r die Erstellung der Zertifikate besteht darin, die
   Client-Zertifikate zu erstellen und zu signieren:

 # openssl req -days 365 -nodes -new -keyout client.key -out client.csr
 # openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CAkey ca.key

   Achten Sie wieder auf das Attribut Common name. Stellen Sie ausserdem
   sicher, dass bei diesem Verfahren acht (8) neue Dateien erzeugt worden
   sind. Der na:chste Schritt besteht darin,
   /usr/local/etc/openldap/slapd.conf zu editieren und folgende Optionen
   hinzuzufu:gen:

 TLSCipherSuite HIGH:MEDIUM:+SSLv3
 TLSCertificateFile /usr/local/etc/openldap/server.crt
 TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key
 TLSCACertificateFile /usr/local/etc/openldap/ca.crt

   Danach bearbeiten Sie /usr/local/etc/openldap/ldap.conf und fu:gen
   folgende Zeilen hinzu:

 TLS_CACERT /usr/local/etc/openldap/ca.crt
 TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3

   Kommentieren Sie die folgenden Eintra:ge aus und setzen Sie sie auf die
   gewu:nschten Werte: BASE, URI, SIZELIMIT und TIMELIMIT. Setzen Sie bei URI
   ldap:// und ldaps:// ein. Fu:gen Sie danach zwei Eintra:ge ein, die auf
   die Zertifizierungsstelle verweisen. Wenn Sie fertig sind, sollten die
   Eintra:ge wie folgt aussehen:

 BASE    dc=example,dc=com
 URI     ldap:// ldaps://

 SIZELIMIT       12
 TIMELIMIT       15

 TLS_CACERT /usr/local/etc/openldap/ca.crt
 TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3

   Anschliessend sollte das Standardpasswort fu:r den Server gea:ndert
   werden:

 # slappasswd -h "{SHA}" >> /usr/local/etc/openldap/slapd.conf

   Dieser Befehl wird nach einem Passwort fragen und, wenn der Prozess nicht
   fehlschla:gt, ein Passwort-Hash an das Ende von slapd.conf hinzufu:gen. Es
   werden verschiedene Hash-Formate unterstu:tzt. Weitere Informationen
   hierzu finden Sie in der Manualpage von slappasswd.

   Als na:chstes bearbeiten Sie /usr/local/etc/openldap/slapd.conf und fu:gen
   folgende Zeilen hinzu:

 password-hash {sha}
 allow bind_v2

   Das Suffix in dieser Datei muss BASE aus /usr/local/etc/openldap/ldap.conf
   entsprechen. Zudem sollte die Option rootdn ebenfalls gesetzt werden. Ein
   guter Wert ist beispielsweise cn=Manager. Bevor die Datei gespeichert
   wird, setzen Sie die Passwortausgabe von slappasswd hinter die Option
   rootpw. 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 abschliessend OpenLDAP in /etc/rc.conf und setzen Sie die
   URI:

 slapd_enable="YES"
 slapd_flags="-4 -h ldaps:///"

   An dieser Stelle kann der Server gestartet und getestet werden:

 # service slapd start

   Wenn alles richtig konfiguriert ist, sollte eine Suche im Verzeichnis, wie
   in diesem Beispiel, eine erfolgreiche Verbindung mit einer Antwort
   liefern:

 # ldapsearch -Z
 # extended LDIF

 #
 # LDAPv3
 # base <dc=example,dc=com> (default) with scope subtree
 # filter: (objectclass=*)
 # requesting: ALL

 # search result
 search: 3
 result: 32 No such object

 # numResponses: 1

  Anmerkung:

   Wenn der Befehl fehlschla:gt, aber die Konfiguration richtig aussieht,
   stoppen Sie den slapd-Dienst. Starten Sie anschliessend den Dienst mit
   Debugging-Optionen:

 # service slapd stop
 # /usr/local/libexec/slapd -d -1

   Sobald der Dienst antwortet, kann das Verzeichnis mit dem Befehl ldapadd
   bestu:ckt werden. In diesem Beispiel gibt es eine Datei mit einer Liste
   von Benutzern, die diesem Verzeichnis hinzugefu:gt werden. Die Eintra:ge
   sollten das folgende Format haben:

 dn: dc=example,dc=com
 objectclass: dcObject
 objectclass: organization
 o: Example
 dc: Example

 dn: cn=Manager,dc=example,dc=com
 objectclass: organizationalRole
 cn: Manager

   Um diese Datei zu importieren, geben Sie den Dateinamen an. Bei dem
   folgenden Befehl werden Sie wieder zur Eingabe des Passworts aufgefordert,
   das Sie zuvor eingegeben haben. Die Ausgabe sollte wie folgt aussehen:

 # ldapadd -Z -D "cn=Manager,dc=example,dc=com" -W -f import.ldif
 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:

 % ldapsearch -Z
 # extended LDIF
 #
 # LDAPv3
 # base <dc=example,dc=com> (default) with scope subtree
 # filter: (objectclass=*)
 # requesting: ALL
 #

 # example.com
 dn: dc=example,dc=com
 objectClass: dcObject
 objectClass: organization
 o: Example
 dc: Example

 # Manager, example.com
 dn: cn=Manager,dc=example,dc=com
 objectClass: organizationalRole
 cn: Manager

 # search result
 search: 3
 result: 0 Success

 # numResponses: 3
 # numEntries: 2

   An dieser Stelle sollte der Server konfiguriert sein und ordnungsgema:ss
   funktionieren.

28.6. Dynamic Host Configuration Protocol (DHCP)

   Das Dynamic Host Configuration Protocol (DHCP) ermo:glicht es einem
   System, sich mit einem Netzwerk zu verbinden und die fu:r die
   Kommunikation mit diesem Netzwerk no:tigen Informationen zu beziehen.
   FreeBSD verwendet den von OpenBSD stammenden dhclient, um die
   Adressinformationen zu beziehen. FreeBSD installiert keinen DHCP-Server,
   aber es stehen einige Server in der FreeBSD Ports-Sammlung zu Verfu:gung.
   Das DHCP-Protokoll wird vollsta: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. Anschliessend wird erkla:rt, wie ein DHCP-Server zu
   installieren und konfigurieren ist.

  Anmerkung:

   Unter FreeBSD wird das Gera:t bpf(4) fu:r den DHCP-Server und den
   DHCP-Client beno:tigt. Das Gera:t ist bereits im GENERIC-Kernel enthalten.
   Benutzer, die es vorziehen einen angepassten Kernel zu erstellen, mu:ssen
   dieses Gera:t behalten, wenn DHCP verwendet wird.

   Es sei darauf hingewiesen, dass bpf es priviligierten Benutzern
   ermo:glicht einen Paket-Sniffer auf dem System auszufu:hren.

  28.6.1. Einen DHCP-Client konfigurieren

   Die Unterstu:tzung fu:r den DHCP-Client ist im Installationsprogramm von
   FreeBSD enthalten, sodass ein neu installiertes System automatisch die
   Adressinformationen des Netzwerks vom DHCP-Server erha:lt. In
   Abschnitt 2.8, "Arbeiten nach der Installation" finden Sie Beispiele fu:r
   eine Netzwerkkonfiguration.

   dhclient beginnt von einem Clientrechner aus u: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 u:ber das Netzwerk, wie Netzmasken, Router und
   DNS-Server mitteilt. Diese Informationen werden als DHCP-Lease bezeichnet
   und sind nur fu:r bestimmte Zeit, die vom Administrator des DHCP-Servers
   vorgegeben wird, gu:ltig. Dadurch fallen verwaiste IP-Adressen, deren
   Clients nicht mehr mit dem Netzwerk verbunden sind, automatisch an den
   Server zuru:ck. DHCP-Clients ko:nnen sehr viele Informationen von einem
   DHCP-Server erhalten. Eine ausfu:hrliche Liste finden Sie in
   dhcp-options(5).

   Das Gera:t bpf ist im GENERIC-Kernel bereits enthalten. Fu:r die Nutzung
   von DHCP muss also kein angepasster Kernel erzeugt werden. In einer
   angepassten Kernelkonfigurationsdatei muss das Gera:t enthalten sein,
   damit DHCP ordnungsgema:ss funktioniert.

   Standardma:ssig la:uft die DHCP-Konfiguration bei FreeBSD im Hintergrund
   oder auch asynchron. Andere Startskripte laufen weiter, wa: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
   beno: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
   Abschnitt 11.5, "Einrichten von Netzwerkkarten" beschrieben.

   Um stattdessen den synchronen Modus zu verwenden, der wa:hrend des
   Systemstarts pausiert bis die DHCP-Konfiguration abgeschlossen ist,
   benutzen Sie "SYNCDHCP":

 ifconfig_fxp0="SYNCDHCP"

   Es stehen weitere Optionen fu:r den Client zur Verfu:gung. Suchen Sie in
   rc.conf(5) nach dhclient, wenn Sie an Einzelheiten interessiert sind.

   Der DHCP-Client verwendet die folgenden Dateien:

     * /etc/dhclient.conf

       Die Konfigurationsdatei von dhclient. Diese Datei entha:lt
       normalerweise nur Kommentare, da die Vorgabewerte zumeist ausreichend
       sind. Diese Konfigurationsdatei wird in dhclient.conf(5) beschrieben.

     * /sbin/dhclient

       Weitere Informationen u:ber dieses Kommando finden Sie in dhclient(8).

     * /sbin/dhclient-script

       Das FreeBSD-spezifische Konfigurationsskript des DHCP-Clients. Es wird
       in dhclient-script(8) beschrieben und kann meist unvera:ndert
       u:bernommen werden.

     * /var/db/dhclient.leases.interface

       Der DHCP-Client verfu:gt u:ber eine Datenbank, die alle derzeit
       gu:ltigen Leases entha:lt und als Logdatei erzeugt wird. Diese Datei
       wird in dhclient.leases(5) beschrieben.

  28.6.2. Einen DHCP-Server installieren und einrichten

   Dieser Abschnitt beschreibt die Einrichtung eines FreeBSD-Systems als
   DHCP-Server. Dazu wird die DHCP-Implementation von ISC (Internet Systems
   Consortium) verwendet. Diese Implementation und die Dokumentation ko:nnen
   als Port oder Paket net/isc-dhcp43-server installiert werden.

   Der Port net/isc-dhcp43-server installiert eine
   Beispiel-Konfigurationsdatei. Kopieren Sie
   /usr/local/etc/dhcpd.conf.example nach /usr/local/etc/dhcpd.conf und
   nehmen Sie die A:nderungen an der neuen Datei vor.

   Diese Konfigurationsdatei umfasst Deklarationen fu:r Subnetze und Rechner,
   die den DHCP-Cleints zur Verfu:gung gestellt wird. Die folgenden Zeilen
   konfigurieren Folgendes:

 option domain-name "example.org";1
 option domain-name-servers ns1.example.org;2
 option subnet-mask 255.255.255.0;3

 default-lease-time 600;4
 max-lease-time 72400;5
 ddns-update-style none;6

 subnet 10.254.239.0 netmask 255.255.255.224 {
   range 10.254.239.10 10.254.239.20;7
   option routers rtr-239-0-1.example.org;8
 }

 host fantasia {
   hardware ethernet 08:00:07:26:c0:a5;9
   fixed-address fantasia.fugue.com;10
 }

   1  Diese Option beschreibt die Standardsuchdoma:ne, die den Clients        
      zugewiesen wird. Weitere Informationen finden Sie in resolv.conf(5).    
   2  Diese Option legt eine, durch Kommata getrennte Liste von DNS-Servern   
      fest, die von den Clients verwendet werden sollen. Die Server ko:nnen   
      u:ber den Namen (FQDN) oder die IP-Adresse spezifiziert werden.         
   3  Die den Clients zugewiesene Subnetzmaske.                               
   4  Die Voreinstellung fu:r die Ablaufzeit des Lease in Sekunden. Ein       
      Client kann diesen Wert in der Konfiguration u:berschreiben.            
   5  Die maximale Zeitdauer, fu:r die der Server Leases vergibt. Sollte ein  
      Client eine la:ngere Zeitspanne anfordern, wird dennoch nur der Wert    
      max-lease-time zugewiesen.                                              
   6  Die Voreinstellung none deaktiviert dynamische DNS-Updates. Bei der     
      Einstellung interim aktualisiert der DHCP-Server den DNS-Server, wenn   
      ein Lease vergeben oder zuru:ckgezogen wurde. A:ndern Sie die           
      Voreinstellung nicht, wenn der Server so konfiguriert wurde, dynamische 
      DNS-Updates zu unterstu:tzen.                                           
   7  Diese Zeile erstellt einen Pool der verfu:gbaren IP-Adressen, die fu:r  
      die Zuweisung der DHCP-Clients reserviert sind. Der Bereich muss fu:r   
      das angegebene Netz oder Subnetz aus der vorherigen Zeile gu:ltig sein. 
   8  Legt das Standard-Gateway fu:r das Netz oder Subnetz fest, das nach der 
      o:ffnenden Klammer { gu:ltig ist.                                       
   9  Bestimmt die Hardware-MAC-Adresse eines Clients, durch die der          
      DHCP-Server den Client erkennt, der eine Anforderung an ihn stellt.     
   10 Einem Rechner soll immer die gleiche IP-Adresse zugewiesen werden. Hier 
      ist auch ein Rechnername gu:ltig, da der DHCP-Server den Rechnernamen   
      auflo:st, bevor er das Lease zuweist.                                   

   Die Konfigurationsdatei unterstu:tzt viele weitere Optionen. Lesen Sie
   dhcpd.conf(5), die mit dem Server installiert wird, fu:r Details und
   Beispiele.

   Nachdem dhcpd.conf konfiguriert ist, aktivieren Sie den DHCP-Server in
   /etc/rc.conf:

 dhcpd_enable="YES"
 dhcpd_ifaces="dc0"

   Dabei mu:ssen Sie dc0 durch die Gera:tedatei (mehrere Gera:tedateien
   mu:ssen durch Leerzeichen getrennt werden) ersetzen, die der DHCP-Server
   auf Anfragen von DHCP-Clients hin u:berwachen soll.

   Starten Sie den Server mit folgenden Befehl:

 # service isc-dhcpd start

   Ku:nftige A:nderungen an der Konfiguration des Servers erfordern, dass der
   Dienst dhcpd gestoppt und anschliessend mit service(8) gestartet wird.

     * /usr/local/sbin/dhcpd

       Weitere Informationen zu dhcpd finden Sie in dhcpd(8).

     * /usr/local/etc/dhcpd.conf

       Die Konfigurationsdatei des Servers muss alle Informationen enthalten,
       die an die Clients weitergegeben werden soll. Ausserdem sind hier
       Informationen zur Konfiguration des Servers enthalten. Diese
       Konfigurationsdatei wird in dhcpd.conf(5) beschrieben.

     * /var/db/dhcpd.leases

       Der DHCP-Server hat eine Datenbank, die alle vergebenen Leases
       entha:lt. Diese wird als Logdatei erzeugt. dhcpd.leases(5) entha:lt
       eine ausfu:hrliche Beschreibung.

     * /usr/local/sbin/dhcrelay

       Dieser Daemon wird in komplexen Umgebungen verwendet, in denen ein
       DHCP-Server eine Anfrage eines Clients an einen DHCP-Server in einem
       separaten Netzwerk weiterleitet. Wenn Sie diese Funktion beno:tigen,
       mu:ssen Sie net/isc-dhcp43-relay installieren. Weitere Informationen
       zu diesem Thema finden Sie in dhcrelay(8).

28.7. Domain Name System (DNS)

   DNS ist das fu:r die Umwandlung von Rechnernamen in IP-Adressen
   zusta:ndige Protokoll. Im Internet wird DNS durch ein komplexes System von
   autoritativen Root-Nameservern, Top Level Domain-Servern (TLD) sowie
   anderen kleineren Nameservern verwaltet, die individuelle
   Domaininformationen speichern und untereinander abgleichen. Fu:r einfache
   DNS-Anfragen wird auf dem lokalen System kein Nameserver beno:tigt.

   In FreeBSD 10 wurde Berkeley Internet Name Domain (BIND) aus dem
   Basissystem entfernt und durch Unbound ersetzt. Unbound ist fu:r die
   lokale Namensauflo:sung zusta:ndig. In der Ports-Sammlung ist BIND immer
   noch als dns/bind99 und dns/bind98 verfu:gbar und in FreeBSD 9 und
   a:lteren Versionen ist BIND im Basissystem enthalten. Die Version in
   FreeBSD bietet erweiterte Sicherheitsfunktionen, ein neues
   Dateisystem-Layout und eine automatisierte chroot(8) Konfiguration. BIND
   wird betreut vom Internet Systems Consortium.

   Die folgende Tabelle beschreibt einige mit DNS verbundenen Begriffe:

   Tabelle 28.4. DNS-Begriffe

        Begriff                             Bedeutung                         
   Forward-DNS       Rechnernamen in IP-Adressen umwandeln.                   
   Origin (Ursprung) Die in einer bestimmten Zonendatei beschriebene Doma:ne. 
   named, BIND       Gebra:uchliche Namen fu:r das unter FreeBSD verwendete   
                     BIND-Nameserverpaket.                                    
   Resolver          Ein Systemprozess, durch den ein Rechner                 
                     Zoneninformationen von einem Nameserver anfordert.       
   Reverse-DNS       die Umwandlung von IP-Adressen in Rechnernamen           
                     Der Beginn der Internet-Zonenhierarchie. Alle Zonen      
                     befinden sich innerhalb der Root-Zone. Dies ist analog   
   Root-Zone         zu einem Dateisystem, in dem sich alle Dateien und       
                     Verzeichnisse innerhalb des Wurzelverzeichnisses         
                     befinden.                                                
   Zone              Eine individuelle Doma:ne, Unterdoma:ne, oder ein Teil   
                     von DNS, der von der gleichen Autorita:t verwaltet wird. 

   Es folgen nun einige Zonenbeispiele:

     * Innerhalb der Dokumentation wird die Root-Zone in der Regel mit .
       bezeichnet.

     * org. ist eine Top level Domain (TLD) innerhalb der Root-Zone.

     * example.org. ist eine Zone innerhalb der org.-TLD.

     * 1.168.192.in-addr.arpa. ist die Zone mit allen IP-Adressen des
       Bereichs 192.168.1.*.

   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., wa:hrend org.
   genauer als die Root-Zone ist. Jeder Teil des Rechnernamens hat
   A:hnlichkeiten mit einem Dateisystem, in dem etwa /dev dem
   Wurzelverzeichnis untergeordnet ist.

  28.7.1. Gru:nde fu:r die Verwendung eines Nameservers

   Es gibt zwei Arten von Nameservern: Autoritative Nameserver sowie
   zwischenspeichernde (cachende, auch bekannt als auflo:sende) Nameserver.

   Ein autoritativer Nameserver ist notwendig, wenn

     * Sie anderen verbindliche DNS-Ausku:nfte erteilen wollen.

     * eine Domain, beispielsweise example.org, registriert wird, und den zu
       dieser Domain geho:renden Rechnern IP-Adressen zugewiesen werden
       mu:ssen.

     * ein IP-Adressblock reverse-DNS-Eintra:ge beno:tigt, um IP-Adressen in
       Rechnernamen auflo:sen zu ko:nnen.

     * ein Backup-Nameserver (auch Slaveserver genannt) oder ein zweiter
       Nameserver auf Anfragen antworten soll.

   Ein cachender Nameserver ist notwendig, weil

     * ein lokaler DNS-Server Daten zwischenspeichern und daher schneller auf
       Anfragen reagieren kann als ein entfernter Server.

   Wird nach www.FreeBSD.org gesucht, leitet der Resolver diese Anfrage an
   den Nameserver des ISPs weiter und nimmt danach das Ergebnis der Abfrage
   entgegen. Existiert ein lokaler, zwischenspeichernder DNS-Server, muss
   dieser die Anfrage nur einmal nach aussen weitergeben. Fu:r alle weiteren
   Anfragen ist dies nicht mehr no:tig, da diese Information nun lokal
   gespeichert ist.

  28.7.2. DNS-Server Konfiguration in FreeBSD 10.0 und neueren Versionen

   In FreeBSD 10.0 wurde BIND durch Unbound ersetzt. Unbound ist lediglich
   ein validierender und cachender Resolver. Wenn ein autoritativer Server
   beno:tigt wird, stehen einige in der Ports-Sammlung zur Verfu:gung.

   Unbound ist im Basissystem von FreeBSD enthalten. In der Voreinstellung
   bietet es nur die DNS-Auflo:sung auf dem lokalen Rechner. Obwohl das im
   Basissystem enthaltene Unbound konfiguriert werden kann, um
   Namensauflo:sung u:ber den lokalen Rechner hinweg bereitzustellen, ist es
   empfehlenswert fu:r solche Anforderungen Unbound aus der FreeBSD
   Ports-Sammlung zu installieren.

   Um Unbound zu aktivieren, fu:gen Sie folgende Zeile in /etc/rc.conf ein:

 local_unbound_enable="YES"

   Alle vorhandenen Nameserver aus /etc/resolv.conf werden als Forwarder in
   der neuen Unbound-Konfiguration benutzt.

  Anmerkung:

   Wenn einer der aufgefu:hrten Nameserver kein DNSSEC unterstu:tzt, wird die
   lokale DNS-Auflo:sung nicht funktionieren. Testen Sie jeden Server und
   entfernen Sie die Server, die den Test nicht bestehen. Das folgende
   Beispiel zeigt einen Trust Tree beziehungsweise einen Fehler fu:r den
   Nameserver auf 192.168.1.1:

 # drill -S FreeBSD.org @192.168.1.1

   Nachdem jeder Server fu:r DNSSEC konfiguriert ist, starten Sie Unbound:

 # service local_unbound onestart

   Dieses Kommando sorgt fu:r die Aktualisierung von /etc/resolv.conf, so
   dass Abfragen fu:r DNSSEC gesicherte Domains jetzt funktionieren. Fu:hren
   Sie folgenden Befehl aus, um den DNSSEC Trust Tree fu:r FreeBSD.org zu
   u:berpru:fen:

 % drill -S FreeBSD.org
 ;; Number of trusted keys: 1
 ;; Chasing: freebsd.org. A

 DNSSEC Trust tree:
 freebsd.org. (A)
 |---freebsd.org. (DNSKEY keytag: 36786 alg: 8 flags: 256)
     |---freebsd.org. (DNSKEY keytag: 32659 alg: 8 flags: 257)
     |---freebsd.org. (DS keytag: 32659 digest type: 2)
         |---org. (DNSKEY keytag: 49587 alg: 7 flags: 256)
             |---org. (DNSKEY keytag: 9795 alg: 7 flags: 257)
             |---org. (DNSKEY keytag: 21366 alg: 7 flags: 257)
             |---org. (DS keytag: 21366 digest type: 1)
             |   |---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
             |       |---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
             |---org. (DS keytag: 21366 digest type: 2)
                 |---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
                     |---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
 ;; Chase successful

  28.7.3. DNS-Server Konfiguration in FreeBSD 9.X

  Wichtig:

   Dieses Kapitel gilt nur fu:r FreeBSD 9 und a:ltere Versionen. BIND9 ist
   seit FreeBSD 10 nicht mehr Bestandteil des Basissystems, wo es durch
   unbound ersetzt wurde.

   Unter FreeBSD wird der BIND-Daemon als named bezeichnet.

           Datei                             Beschreibung                     
   named                  Der BIND-Daemon.                                    
   rndc(8)                Das Steuerprogramm fu:r named.                      
   /etc/namedb            Das Verzeichnis, in dem sich die Zoneninformationen 
                          fu:r BIND befinden.                                 
   /etc/namedb/named.conf Die Konfigurationsdatei fu:r named.                 

   Je nachdem, wie eine Zone auf dem Server konfiguriert wurde, finden sich
   die zur Zone geho:rendenden Dateien in den Unterverzeichnissen master,
   slave, oder dynamic des Verzeichnisses /etc/namedb. Diese Dateien
   enthalten die DNS-Informationen, die der Nameserver fu:r die Beantwortung
   von Anfragen beno:tigt.

    28.7.3.1. BIND starten

   Da BIND automatisch installiert wird, ist die Konfiguration relativ
   einfach.

   In der Voreinstellung wird ein in einer chroot(8)-Umgebung betriebener
   named-Server zur einfachen Namensauflo: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:

 # service named onestart

   Um den named-Daemon beim Systemstart automatisch zu starten, fu: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 ko:nnen. Weitere
   Startoptionen von named unter FreeBSD finden Sie in den named_*-Flags in
   /etc/defaults/rc.conf sowie in rc.conf(5). Zusa:tzliche Informationen
   finden Sie im Abschnitt 11.4, "Dienste unter FreeBSD verwalten".

    28.7.3.2. Konfigurationsdateien

   Die Konfigurationsdateien von named finden sich unter /etc/namedb und
   mu:ssen in der Regel an Ihre Bedu:rfnisse angepasst werden. Es sei denn,
   Sie beno:tigen nur einen einfachen Resolver. Ein Grossteil der
   Konfigurationsarbeiten erfolgt dabei in diesem Verzeichnis.

      28.7.3.2.1. /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, ko: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 des Internetproviders zuerst abgefragt,
   um von dessen Cache zu profitieren. Wenn es sich um einen schnellen, viel
   benutzten Nameserver handelt, kann dies zu einer
   Geschwindigkeitssteigerung fu:hren.

  Warnung:

   127.0.0.1 funktioniert hier nicht. A: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-Eintra:ge fu:r eine Reverse- und
   Forward-DNS-Zone, die in der Datei named.conf definiert sind.

   Fu:r jede neue Zone muss ein zusa:tzlicher Eintrag in named.conf erstellt
   werden.

   Ein einfacher Eintrag fu:r eine Zone example.org ko:nnte beispielsweise so
   aussehen:

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

   Die Option type 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 file 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, verfu:gt der
   Slaveserver u:ber die transferierten Zoneninformationen und kann diese an
   andere Rechner weitergeben.

      28.7.3.2.2. Zonendateien

   Die in der Datei /etc/namedb/master/example.org definierte Zonendatei fu:r
   example.org ko: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, wa:hrend sich alles ohne einen abschliessenden "."
   relativ auf den Ursprung bezieht. ns1 steht daher beispielsweise fu:r
   ns1.example.org..

   Eine Zonendatei hat folgenden Aufbau:

 recordname      IN recordtype   value

   Die am ha:ufigsten verwendeten DNS-Eintra:ge sind:

   SOA

           Start der Zonenautorita:t

   NS

           Ein autoritativer Nameserver

   A

           Eine Rechneradresse

   CNAME

           Der kanonische Name eines Alias

   MX

           Mail Exchanger

   PTR

           Ein (bei Reverse-DNS verwendeter) Domain Name Pointer

 example.org. IN SOA ns1.example.org. admin.example.org. (
                         2006051501      ; Serial
                         10800           ; Refresh after 3 hours
                         3600            ; Retry after 1 hour
                         604800          ; Expire after 1 week
                         300 )           ; Negative Response TTL

   example.org.

           Der Name der Doma:ne und damit der Ursprung dieser Zonendatei.

   ns1.example.org.

           Der prima:re/autoritative Nameserver dieser Zone.

   admin.example.org.

           Die fu:r diese Zone verantwortliche Person. Das Zeichen "@" wird
           dabei ersetzt (<admin@example.org> wird also zu
           admin.example.org).

   2006051501

           Die Seriennummer der Datei. Sie muss stets inkrementiert werden,
           wenn die Zonendatei gea:ndert wird. Viele Administratoren
           bevorzugen ein JJJJMMTTRR-Format, um die Seriennummer festzulegen.
           2006051501 steht also fu:r den 15.05.2006, die beiden letzten
           Stellen fu:r die erste Modifikation der Zonendatei an diesem Tag.
           Die Seriennummer ist von grosser Bedeutung, da Slaveserver daran
           eine aktualisierte Zonendatei erkennen ko:nnen.

        IN NS           ns1.example.org.

   Ein NS-Eintrag. Jeder Nameserver, der fu:r eine Zone verantwortlich ist,
   muss u:ber einen solchen Eintrag verfu:gen.

 localhost       IN      A       127.0.0.1
 ns1             IN      A       192.168.1.2
 ns2             IN      A       192.168.1.3
 mx              IN      A       192.168.1.4
 mail            IN      A       192.168.1.5

   Der Eintrag A bezieht sich auf Rechnernamen. ns1.example.org wu:rde also
   zu 192.168.1.2 aufgelo:st werden.

                 IN      A       192.168.1.1

   Diese Zeile weist die IP-Adresse 192.168.1.1 dem aktuellen Ursprung, in
   diesem Fall also example.org, zu.

 www             IN CNAME        @

   Der Eintrag fu:r den kanonischen Namen wird dazu verwendet, Aliase fu:r
   einen Rechner zu vergeben. Im Beispiel ist www ein Alias fu:r den
   "Master"-Rechner, dessen Name dem Domainnamen example.org (oder
   192.168.1.1) entspricht. CNAMEs ko:nnen daher niemals gleichzeitig mit
   einem anderen Eintrag fu:r denselben Hostname eingerichtet werden.

                 IN MX   10      mail.example.org.

   Der MX-Eintrag legt fest, welcher Mailserver fu:r eintreffende Mails der
   Zone verantwortlich ist. mail.example.org ist der Rechnername des
   Mailservers, der eine Priorita:t von 10 hat.

   Es ko:nnen auch mehrere Mailserver mit verschiedener Priorita:t (10, 20,
   ...) vorhanden sein. Ein Mailserver, der eine Mail an example.org
   verschicken will, verwendet zuerst den MX mit der ho:chsten Priorita:t
   (das heisst den mit der niedrigsten Priorita:tsnummer), danach den mit der
   na:chstho:heren Priorita:t. Und dies solange, bis die E-Mail zugestellt
   werden kann.

   Fu: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 Doma: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.

    28.7.3.3. Zwischenspeichernde (cachende) Nameserver

   Ein cachender Nameserver hat prima:r die Aufgabe, rekursive Abfragen
   aufzulo:sen. Er stellt lediglich eigene Anfragen und speichert deren
   Ergebnisse ab.

    28.7.3.4. DNSSEC

   Domain Name System Security Extensions, oder kurz DNSSEC, ist eine
   Sammlung von Spezifikationen, um auflo:sende Nameserver von gefa:lschten
   DNS-Daten, wie beispielsweise vorgeta:uschte DNS-Eintra:ge, zu schu:tzen.
   Durch die Verwendung von digitalen Signaturen kann ein Resolver die
   Integrita:t des Eintrages u:berpru:fen. Wichtig dabei ist, dass DNSSEC nur
   die Integrita:t u:ber digital signierte Resource Records (RR)
   bereitstellt. Weder wird die Vertraulichkeit noch der Schutz vor falschen
   Annahmen des Endbenutzers sichergestellt. Dies bedeutet, dass es Benutzer
   nicht davor schu:tzen kann, zu example.net anstatt zu example.com zu
   gelangen. Das einzige, was DNSSEC tut, ist die Authentifizierung, dass die
   Daten wa:hrend der U:bertragung nicht vera:ndert wurden. Die Sicherheit
   von DNS ist ein wichtiger Schritt in der generellen Absicherung des
   Internets. Fu:r weitere, tiefergehende Details u:ber die Funktionsweise
   von DNSSEC sind die dazugeho:rigen RFCs ein guter Einstieg in die
   Thematik. Sehen Sie sich dazu die Liste in Abschnitt 28.7.3.6, "Weitere
   Informationsquellen" an.

   Der folgende Abschnitt wird zeigen, wie man DNSSEC fu: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 unterstu: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 gepru:ft werden. Der Grund dafu:r ist, dass
   fru:heren Versionen die Algorithmen fehlen, um die U:berpru:fung des
   Root-Zonenschlu:ssels zu aktivieren. Es wird dringend empfohlen, die
   letzte Version von BIND 9.7 oder ho:her einzusetzen, um von den Vorteilen
   der automatischen Schlu:sselaktualisierung des Root-Zonenschlu: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 ho:her werden an den betreffenden
   Stellen angesprochen.

      28.7.3.4.1. Rekursive DNS-Server Konfiguration

   Die Aktivierung der DNSSEC-U:berpru:fung von Anfragen, die von einem
   rekursiven DNS-Server stammen, beno:tigt ein paar A:nderungen in der
   named.conf. Bevor man jedoch diese A:nderungen durchfu:hrt, muss der
   Root-Zonenschlu:ssel oder Vertrauensanker erworben werden. Momentan ist
   der Root-Zonenschlu:ssel nicht in einem Dateiformat verfu:gbar, dass von
   BIND benutzt werden kann, so dass dieser manuell in das richtige Format
   konvertiert werden muss. Der Schlu:ssel selbst kann durch Abfrage an die
   Root-Zone erhalten werden, indem man dazu dig verwendet. Durch Aufruf von:

 % dig +multi +noall +answer DNSKEY . > root.dnskey

   wird der Schlu:ssel in root.dnskey abgelegt. Der Inhalt sollte so a:hnlich
   wie folgt aussehen:

 . 93910 IN DNSKEY 257 3 8 (
         AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
         bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
         /RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
         JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
         oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
         LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
         Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
         LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
         ) ; key id = 19036
 . 93910 IN DNSKEY 256 3 8 (
         AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69Hf
         UyuGBbRN0+HuTOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjE
         g58sRr4ZQ6Iu6b1xTBKgc193zUARk4mmQ/PPGxn7Cn5V
         EGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlFrXDW3tjt
 ) ; key id = 34525

   Seien Sie nicht alarmiert, wenn der von Ihnen bezogene Schlu:ssel anders
   als in diesem Beispiel aussieht. Diese ko:nnten sich in der Zwischenzeit
   gea:ndert haben. In dieser Ausgabe sind eigentlich zwei Schlu:ssel
   enthalten. Der erste Schu:ssel mit dem Wert 257 nach dem DNSKEY-Eintrag
   ist derjenige, der beno:tigt wird. Der Wert zeigt an, dass es sich um
   einen sicheren Einstiegspunkt (SEP), gemein auch als
   Schlu:sselsignierungsschlu:ssel (KSK) bekannt, handelt. Der zweite
   Schu:ssel mit dem Wert 256 ist der untergeordnete Schlu:ssel, im
   allgemeinen auch als Zonen-Signaturschlu:ssel (ZSK) bezeichnet. Weitere
   Schlu:sselarten werden spa:ter in Abschnitt 28.7.3.4.2, "Autoritative
   DNS-Server Konfiguration" erla:utert.

   Nun muss der Schlu:ssel verifiziert und so formatiert werden, dass BIND
   diesen verwenden kann. Um den Schlu:ssel zu verifizieren, erzeugen Sie
   einen DS RR-Satz. Erstellen Sie eine Datei, welche die RRs entha:lt,
   mittels:

 % dnssec-dsfromkey -f root.dnskey . > root.ds

   Diese Eintra:ge verwenden SHA-1 sowie SHA-256 und sollten a:hnlich zu
   folgendem Beispiel aussehen, in dem der la:ngere, SHA-256, benutzt wird.

 . IN DS 19036 8 1 B256BD09DC8DD59F0E0F0D8541B8328DD986DF6E
 . IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5

   Der SHA-256 RR kann nun mit dem Abriss in
   https://data.iana.org/root-anchors/root-anchors.xml verglichen werden. Um
   absolut sicher zu sein, dass der Schlu:ssel nicht zusammen mit den
   XML-Daten vera:ndert wurde, sollte die Datei mit einer passenden
   PGP-Signatur u:berpru:ft werden.

   Als na:chstes muss der Schlu:ssel in das passende Format gebracht werden.
   Dies unterscheidet sich ein bisschen von den BIND Versionen 9.6.2 und 9.7
   und ho:here. In Version 9.7 wurde die U:nterstu:tzung zur automatischen
   Verfolgung und notwendigen Aktualisierung von A:nderungen am Schlu:ssel
   eingebaut. Dies wird durch den Einsatz von managed-keys erreicht, wie in
   dem Beispiel unten gezeigt ist. Wenn die a:ltere Version eingesetzt wird,
   kann der Schlu:ssel durch eine trusted-keys-Anweisung eingebaut werden und
   die Aktualisierung muss ha: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-Schlu:ssel kann nun zu named.conf hinzugefu:gt werden, entweder
   direkt oder durch Inkludierung der Datei, die den Schlu:ssel entha:lt.
   Nachdem diese Schritte absolviert sind, muss BIND konfiguriert werden, um
   DNSSEC-Validierung fu:r Anfragen durchzufu:hren, indem named.conf
   bearbeitet und die folgende options-Direktive hinzugefu:gt wird:

 dnssec-enable yes;
 dnssec-validation yes;

   Um zu pru:fen, dass es tatsa: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:

 % dig @resolver +dnssec se ds

   sollte den DS RR fu:r die .se-Zone zuru: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.

      28.7.3.4.2. Autoritative DNS-Server Konfiguration

   Um einen autoritativen Nameserver dazu zu bringen, als eine
   DNSSEC-signierte Zone zu fungieren, ist ein wenig mehr Aufwand no:tig.
   Eine Zone ist durch kryptographische Schlu:ssel signiert, die erzeugt
   werden mu:ssen. Es ist mo:glich, nur einen Schlu:ssel dazu zu verwenden.
   Die vorgeschlagene Methode ist jedoch, einen starken, gut geschu:tzten
   Schlu:sselsignierungsschlu:ssel (KSK) einzusetzen, der nicht oft
   gewechselt wird und einen Zonensignierungsschlu:ssel (ZSK), der o:fter
   ausgewechselt wird. Informationen zu vorgeschlagenen Einsatzszenarien
   ko: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 Autorita:t fu:r die Daten, die diese Validierung
   beno:tigen, zu erschaffen und wird als solche auch als sicherer
   Einstiegspunkt (SEP)-Schlu:ssel bezeichnet. Ein Nachrichtenabriss dieses
   Schlu:ssels, der auch Delegation Signer (DS)-Eintrag genannt wird, muss in
   der Elternzone vero:ffentlicht werden, um die Vertrauenskette
   herzustellen. Wie dies erreicht wird, ha:ngt von dem Besitzer der
   Elternzone ab. Der ZSK wird verwendet, um die Zone zu signieren und muss
   nur dort o:ffentlich zuga:nglich gemacht werden.

   Um DNSSEC fu: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-Schlu:sselpaar zu generieren. Dieses
   Schlu:sselpaar kann unterschiedliche kryptographische Algorithmen nutzen.
   Es wird empfohlen, RSA/SHA256 fu:r die Schlu:ssel zu nutzen. Eine
   Schlu:ssella:nge von 2048 Bits sollte genu:gen. Um den KSK fu:r
   example.com zu generieren, geben Sie:

 % dnssec-keygen -f KSK -a RSASHA256 -b 2048 -n ZONE example.com

   ein und um den ZSK zu erzeugen, setzen Sie folgenden Befehl ab:

 % dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com

   dnssec-keygen gibt zwei Dateien aus, den o:ffentlichen und den privaten
   Schlu:ssel und zwar in Dateinamen, die a:hnlich lauten wie
   Kexample.com.+005+nnnnn.key (o:ffentlich) und
   Kexample.com.+005+nnnnn.private (privat). Der nnnnn-Teil des Dateinamens
   ist eine fu:nfstellige Schlu:sselkennung. Passen Sie genau auf, welche
   Kennung zu welchem Schlu:ssel geho:rt. Das ist besonders wichtig, wenn
   mehrere Schlu:ssel in einer Zone vorliegen. Es ist auch mo:glich, die
   Schlu:ssel umzubenennen. Fu:r jede KSK-Datei tun Sie folgendes:

 % mv Kexample.com.+005+nnnnn.key Kexample.com.+005+nnnnn.KSK.key
 % mv Kexample.com.+005+nnnnn.private Kexample.com.+005+nnnnn.KSK.private

   Fu:r die ZSK-Dateien ersetzen Sie KSK fu:r ZSK wenn no:tig. Die Dateien
   ko:nnen nun in der Zonendatei inkludiert werden, indem die $include
   Anweisung verwendet wird. Es sollte folgendermassen aussehen:

 $include Kexample.com.+005+nnnnn.KSK.key    ; KSK
 $include Kexample.com.+005+nnnnn.ZSK.key    ; ZSK

   Schliesslich signieren Sie die Zone und weisen BIND an, die signierte
   Zonendatei zu benutzen. Um eine Zone zu signieren, wird dnssec-signzone
   eingesetzt. Der Befehl, um eine Zone example.com zu signieren, die in
   example.com.db liegt, sollte wie folgt aussehen:

 % dnssec-signzone -o example.com -k Kexample.com.+005+nnnnn.KSK example.com.db Kexample.com.+005+nnnnn.ZSK.key

   Der Schlu:ssel, welcher mit dem Argument -k u:bergeben wird, ist der KSK
   und die andere Schlu:sseldatei ist der ZSK, welcher fu:r die Signatur
   benutzt werden soll. Es ist mo:glich, mehr als einen KSK und ZSK
   anzugeben, was das Ergebnis zur Folge hat, dass die Zone mit allen
   u:bergebenen Schlu:sseln signiert wird. Dies kann dann beno: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-Eintra:ge werden
   ebenfalls in eine separate Datei dsset-example.com geschrieben. Um diese
   signierte Zone zu verwenden, a:ndern Sie die Zonendirektive in named.conf,
   so dass example.com.db.signed benutzt wird. Standardma:ssig sind die
   Signaturen nur 30 Tage gu:ltig, was bedeutet, dass die Zone in etwa 15
   Tagen erneut signiert werden muss, um sicher zu stellen, dass Resolver
   keine Eintra:ge mit veralteten Signaturen zwischenspeichern. Es ist
   mo: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 Schlu:ssel vertraulich bleiben,
   genau wie mit allen anderen kryptographischen Schlu:sseln auch. Wenn ein
   Schlu:ssel gea:ndert wird, ist es gute Praxis den neuen Schlu:ssel in die
   Zone zu inkludieren, noch wa:hrend der alte Schlu:ssel noch zum signieren
   eingesetzt wird, um dann auf den neuen Schlu:ssel zum signieren zu
   wechseln. Nachdem diese Schritte erfolgt sind, kann der alte Schlu:ssel
   aus der Zone entfernt werden. Wenn das nicht geschieht, ko:nnen DNS-Daten
   fu:r einige Zeit nicht verfu:gbar sein, bis der neue Schlu:ssel durch die
   DNS-Hierarchie propagiert wurde. Fu:r weitere Informationen bezu:glich
   Schlu:sselu:bergabe und andere DNSSEC-Einsatzszenarien lesen Sie RFC 4641:
   DNSSEC Operational practices.

      28.7.3.4.3. Automatisierung mittels BIND 9.7 oder ho:her

   Beginnend mit der Version 9.7 von BIND wurde eine neue Eigenschaft
   vorgestellt, die Smart Signing genannt wird. Diese zielt darauf ab, das
   Schlu:sselmanagement und den Signierungsprozess einfacher zu gestalten und
   zu automatisieren. Durch ablegen der Schlu:ssel in ein Verzeichnis,
   genannt key repository und die Verwendung der neuen Option auto-dnssec,
   ist es mo:glich eine dynamische Zone zu erzeugen, welche dann bei Bedarf
   erneut signiert wird. Um diese Zone zu aktualisieren, benutzen Sie
   nsupdate mit der neuen Option -l. Es hat also rndc die Fa:higkeit
   gewonnen, Zonen mit Schlu:sseln im Key Repository zu verwenden, indem die
   Option sign eingesetzt wird. Um BIND anzuweisen, diese automatische
   Signierung und Zonenaktualisierung fu:r example.com zu nutzen, fu:gen Sie
   die folgenden Zeilen in 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 A:nderungen durchgefu:hrt wurden, erzeugen Sie die
   Schlu:ssel fu:r die Zone wie in Abschnitt 28.7.3.4.2, "Autoritative
   DNS-Server Konfiguration" beschrieben wird, legen diese Schlu:ssel im Key
   Repository ab, dass als Argument key-directory in der Zonenkonfiguration
   steht und die Zone wird automatisch signiert. Aktualisierungen fu: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
   hinzugefu:gten Daten ku:mmern wird. Fu:r weitere Details, lesen Sie
   Abschnitt 28.7.3.6, "Weitere Informationsquellen" und die Dokumentation
   von BIND.

    28.7.3.5. Sicherheit

   Obwohl BIND die am meisten verwendete Implementierung von DNS darstellt,
   werden dennoch manchmal neue Sicherheitsprobleme entdeckt.

   Zwar startet FreeBSD named automatisch in einer chroot(8)-Umgebung, es
   gibt aber noch weitere Sicherheitsmechanismen, mit denen Sie potentielle
   DNS-Serviceattacken erschweren ko:nnen.

   Es ist daher eine gute Idee, die Sicherheitshinweise von CERT zu lesen
   sowie die Mailingliste FreeBSD security notifications zu abonnieren, um
   sich u:ber Sicherheitsprobleme im Zusammenhang mit dem Internet und
   FreeBSD zu informieren.

  Tipp:

   Tritt ein Problem auf, kann es nie schaden, die Quellen zu aktualisieren
   und named neu zu kompilieren.

    28.7.3.6. Weitere Informationsquellen

   Hilfeseiten zu BIND/named: rndc(8) named(8) named.conf(5) nsupdate(1)
   dnssec-signzone(8) dnssec-keygen(8)

     * Offizielle ISC-Seite zu BIND

     * Offizielles Forum zu ISC-BIND

     * O'Reilly DNS and BIND 5th Edition

     * Root DNSSEC

     * DNSSEC Vertrauensanker-Publikation fu:r die Root-Zone

     * RFC 1034 - Domain Names - Concepts and Facilities

     * RFC 1035 - Domain Names - Implementation and Specification

     * RFC 4033 - DNS Security Introduction and Requirements

     * RFC 4034 - Resource Records for the DNS Security Extensions

     * RFC 4035 - Protocol Modifications for the DNS Security Extensions

     * RFC 4641 - DNSSEC Operational Practices

     * RFC 5011 - Automated Updates of DNS Security (DNSSEC) Trust Anchors

28.8. Apache HTTP-Server

   Beigetragen von Murray Stokely.

   Der Open Source Apache HTTP-Server ist der am weitesten verbreitete
   Webserver. Dieser Webserver ist nicht im Basissystem von FreeBSD
   enthalten, kann aber als Paket oder Port www/apache24 installiert werden.

   Dieser Abschnitt beschreibt die Konfiguration der Version 2.x des Apache
   HTTP-Server. Weiterfu:hrende Informationen und Konfigurationsanweisungen
   fu:r Apache 2.X finden Sie unter httpd.apache.org.

  28.8.1. Apache konfigurieren und starten

   Der Apache HTTP-Server wird unter FreeBSD prima: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 ha:ufigsten verwendeten Optionen sind:

   ServerRoot "/usr/local"

           Legt das Standardwurzelverzeichnis fu:r die Apache-Installation
           fest. Bina:rdateien werden in die Verzeichnisse bin und sbin
           unterhalb des Serverwurzelverzeichnisses installiert, wa:hrend
           sich Konfigurationsdateien im Unterverzeichnis etc/apache2x
           befinden.

   ServerAdmin you@example.com

           Die E-Mail-Adresse, an die Mitteilungen u:ber Serverprobleme
           geschickt werden. Diese Adresse erscheint auf vom Server erzeugten
           Seiten, beispielsweise auf Fehlerseiten.

   ServerName www.example.com:80

           Erlaubt dem Administrator, einen Rechnernamen festzulegen, den der
           Server an die Clients sendet. Beispielsweise ko:nnte www statt des
           richtigen Rechnernamens verwendet werden. Wenn das System keinen
           eingetragenen DNS-Namen hat, kann stattdessen die IP-Adresse
           eingetragen werden. Lauscht der Server auf einem anderen Port,
           tauschen Sie die 80 gegen eine entsprechende Portnummer.

   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 A:nderungen durchgefu:hrt werden. Wenn die Konfiguration
   von Apache abgeschlossen ist, speichern Sie die Datei und u:berpru:fen Sie
   die Konfiguration mit apachectl. Der Befehl apachectl configtest sollte
   Syntax OK zuru:ckgeben.

   Um den Apache beim Systemstart zu starten, fu:gen Sie folgende Zeile in
   /etc/rc.conf ein:

 apache24_enable="YES"

   Wenn Sie wa:hrend des Systemstarts weitere Parameter an den Apache
   u:bergeben wollen, ko:nnen Sie diese durch eine zusa:tzliche Zeile in
   rc.conf angeben:

 apache24_flags=""

   Wenn apachectl keine Konfigurationsfehler meldet, starten Sie httpd:

 # service apache24 start

   Sie ko:nnen den httpd-Dienst testen, indem Sie http://localhost in einen
   Browser eingeben, wobei Sie localhost durch den vollqualifizierten
   Domainnamen der Maschine ersetzen, auf dem der httpd la:uft. Die Standard
   Webseite, die angezeigt wird, ist /usr/local/www/apache24/data/index.html.

   Die Konfiguration von Apache kann bei nachfolgenden A:nderungen an der
   Konfigurationsdatei bei laufendem httpd, auf Fehler u:berpru:ft werden.
   Geben Sie dazu folgendes Kommando ein:

 # service apache24 configtest

  Anmerkung:

   Es ist wichitg zu beachten, dass configtest kein rc(8)-Standard ist, und
   somit nicht zwingend mit anderen rc(8)-Startskripten funktioniert.

  28.8.2. Virtual Hosting

   Virtual Hosting ermo:glicht es, mehrere Webseiten auf einem Apache-Server
   laufen zu lassen. Die virtuellen Hosts ko:nnen IP-basiert oder
   namensbasiert sein. IP-basiertes virtual Hosting verwendet eine IP-Adresse
   fu:r jede Webseite. Beim namensbasierten virtual Hosting wird der
   HTTP/1.1-Header der Clients dazu verwendet, den Rechnernamen zu bestimmen.
   Dadurch wird es mo:glich, mehrere Domains unter der gleichen IP-Adresse zu
   betreiben.

   Damit der Apache namenbasierte virtuelle Domains verwalten kann, fu:gen
   Sie fu:r jede Webseite einen separaten VirtualHost-Block ein. Wenn der
   Webserver beispielsweise www.domain.tld heisst und die virtuelle Domain
   www.someotherdomain.tld einrichtet werden soll, erga:nzen Sie httpd.conf
   um folgende Eintra:ge:

 <VirtualHost *>
     ServerName www.domain.tld
     DocumentRoot /www/domain.tld
 </VirtualHost>

 <VirtualHost *>
     ServerName www.someotherdomain.tld
     DocumentRoot /www/someotherdomain.tld
 </VirtualHost>

   Setzen Sie fu:r jeden virtuellen Host die entsprechenden Werte fu:r
   ServerName und DocumentRoot.

   Ausfu:hrliche Informationen zum Einrichten von virtuellen Hosts finden Sie
   in der offiziellen Apache-Dokumentation unter
   http://httpd.apache.org/docs/vhosts/.

  28.8.3. Ha:ufig verwendete Apache-Module

   Apache verwendet Module, die den Server um zusa:tzliche Funktionen
   erweitern. Eine vollsta:ndige Auflistung der zur Verfu:gung stehenden
   Module und Konfigurationsdetails finden Sie unter
   http://httpd.apache.org/docs/current/mod/.

   In FreeBSD ko:nnen einige Module mit dem Port www/apache24 kompiliert
   werden. Geben Sie in /usr/ports/www/apache24 make config ein, um zu sehen,
   welche Module zur Verfu:gung stehen und welche Module in der
   Voreinstellung aktiviert sind. Wenn ein Modul nicht zusammen mit dem Port
   kompiliert wird, bietet die Ports-Sammlung die Mo:glichkeit viele Module
   zu installieren. Dieser Abschnitt beschreibt drei der am ha:ufigsten
   verwendeten Module.

    28.8.3.1. mod_ssl

   Das Modul mod_ssl verwendet die OpenSSL-Bibliothek, um u:ber die
   Protokolle Secure Sockets Layer (SSLv3) sowie Transport Layer Security
   (TLSv1) eine starke Verschlu:sselung zu ermo:glichen. Mit diesem Modul
   ko:nnen Sie ein signiertes Zertifikat von einer Zertifizierungsstelle
   anfordern, damit Sie einen sicheren Webserver unter FreeBSD betreiben
   ko:nnen.

   Unter FreeBSD wird das Modul mod_ssl standardma:ssig im Port und auch im
   Paket aktiviert. Die verfu:gbaren Konfigurationsanweisungen werden in
   http://httpd.apache.org/docs/current/mod/mod_ssl.html beschrieben.

    28.8.3.2. mod_perl

   Das Modul mod_perl macht es mo:glich, vollsta:ndig in Perl geschriebene
   Apache-Module zu erzeugen. Da der Perl-Interpreter in den Server
   eingebettet wird, muss weder ein externer Interpreter noch Perl
   zusa:tzlich aufgerufen werden.

   mod_perl wird u:ber den Port oder das Paket www/mod_perl2 installiert.
   Dokumentation fu:r dieses Modul finden Sie unter
   http://perl.apache.org/docs/2.0/index.html.

    28.8.3.3. mod_php

   Geschrieben von Tom Rhodes.

   PHP: Hypertext Preprocessor (PHP) ist eine vielseitig verwendbare
   Skriptsprache, die besonders fu:r die Web-Entwicklung geeignet ist. PHP
   kann in HTML eingebettet werden und a:hnelt von der Syntax her Sprachen
   wie C, Java(TM) und Perl. Das Hauptanliegen von PHP ist es,
   Web-Entwicklern die rasche Erstellung von dynamisch erzeugten
   Internetseiten zu ermo:glichen.

   Damit der Apache-Webserver PHP5 unterstu:tzt, der Port oder das Paket
   lang/php56 installiert werden. Dies wird die Module installieren und
   konfigurieren, die fu:r die Unterstu:tzung von dynamischen PHP-Anwendungen
   beno:tigt werden. Die Installation wird automatisch folgende Zeilen in
   /usr/local/etc/apache24/httpd.conf hinzufu:gen:

 LoadModule php5_module        libexec/apache24/libphp5.so

   Danach rufen Sie apachectl auf, um das PHP-Modul zu laden:

 # apachectl graceful

   Die PHP-Unterstu:tzung von www/mod_php56 verfu:gt nur u:ber wenige
   Funktionen. Zusa:tzliche Funktionen ko:nnen mit dem Port
   lang/php56-extensions installiert werden. Der Port bietet ein
   Auswahlmenu:, u:ber das Sie verschiedene PHP-Erweiterungen installieren
   ko:nnen.

   Alternativ ko:nnen einzelne Erweiterungen u:ber den jeweiligen Port
   installieren. Um beispielsweise die Unterstu:tzung des Datenbankservers
   MySQL in PHP zu aktivieren, installieren Sie den Port
   databases/php56-mysql.

   Nachdem Sie eine Erweiterung installiert haben, mu:ssen Sie den
   Apache-Server neu starten, damit die Erweiterung auch erkannt wird:

 # apachectl graceful

   Ab nun wird MySQL von PHP unterstu:tzt.

  28.8.4. Dynamische Webseiten

   Neben mod_perl und mod_php stehen noch weitere Sprachen zur Erstellung von
   dynamischen Inhalten zur Verfu:gung. Dazu geho:ren auch Django und Ruby on
   Rails.

    28.8.4.1. Django

   Bei Django handelt es sich um ein unter der BSD-Lizenz verfu:gbares
   Framework zur schnellen Erstellung von ma:chtigen Internet-Applikationen.
   Es beinhaltet einen objekt-relationalen Mapper (wodurch Datentypen als
   Phyton-Objekte entwickelt werden ko:nnen) sowie eine API fu:r den
   dynamischen Datenbankzugriff auf diese Objekte, ohne dass Entwickler
   jemals SQL-Code schreiben mu:ssen. Zusa:tzlich existiert ein umfangreiches
   Template-System, wodurch die Programmlogik von der HTML-Pra:sentation
   getrennt werden kann.

   Django setzt das Modul mod_python und eine SQL-Datenbank voraus. In
   FreeBSD wird bei der Installation von www/py-django automatisch mod_python
   installiert. Als Datenbanken werden PostgreSQL, MySQL und SQLite
   unterstu:tzt, wobei SQLite die Voreinstellung ist. Wenn Sie die Datenbank
   a:ndern mo:chten, geben Sie in /usr/ports/www/py-django make config ein
   und installieren Sie den Port neu.

   Nachdem Django installiert ist, beno:tigt die Anwendung ein
   Projektverzeichnis und die Apache-Konfiguration, um den eingebetteten
   Python-Interpreter zu nutzen. Dieser Interpreter wird verwendet um die
   Anwendung fu:r spezifische URLs der Seite aufrufen.

   Damit Apache Anfragen fu:r bestimmte URLs an die Web-Applikation
   u:bergeben kann, mu:ssen Sie den vollsta:ndigen Pfad zum
   Projektverzeichnis in httpd.conf festlegen:

 <Location "/">
     SetHandler python-program
     PythonPath "['/pfad/zu/den/django/paketen/'] + sys.path"
     PythonHandler django.core.handlers.modpython
     SetEnv DJANGO_SETTINGS_MODULE mysite.settings
     PythonAutoReload On
     PythonDebug On
 </Location>

   Weitere Informationen zur Verwendung von Django finden Sie unter
   https://docs.djangoproject.com/en/1.6/.

    28.8.4.2. Ruby on Rails

   Ruby on Rails ist ein weiteres, als Open Source verfu:gbares Webframework.
   Es bietet einen kompletten Entwicklungsstack und erlaubt es
   Webentwicklern, umfangreiche und ma:chtige Applikationen in kurzer Zeit zu
   programmieren. Unter FreeBSD kann das Framework u:ber den Port oder das
   Paket www/rubygem-rails installiert werden.

   Weitere Informationen zur Verwendung von Ruby on Rails finden Sie unter
   http://rubyonrails.org/documentation.

28.9. File Transfer Protocol (FTP)

   Das File Transfer Protocol (FTP) ermo:glicht auf einfache Art und Weise
   den Dateiaustausch mit einem FTP-Server. Der FTP-Server ftpd ist bei
   FreeBSD bereits im Basisystem enthalten.

   FreeBSD verwendet mehrere Konfigurationsdateien, um den Zugriff auf den
   FTP zu kontrollieren. Dieser Abschnitt fasst diese Dateien zusammen. In
   ftpd(8) finden Sie weitere Inforamtionen u:ber den integrierten
   FTP-Server.

  28.9.1. Konfiguration

   Der wichtigste Punkt ist hier die Entscheidung daru:ber, welche Benutzer
   auf den FTP-Server zugreifen du:rfen. Ein FreeBSD-System verfu:gt u:ber
   diverse Systembenutzerkonten, die jedoch nicht auf den FTP-Server
   zugreifen sollen. Die Datei /etc/ftpusers entha:lt alle Benutzer, die vom
   FTP-Zugriff ausgeschlossen sind. In der Voreinstellung gilt dies auch die
   gerade erwa:hnten Systembenutzerkonten. Sie ko:nnen u:ber diese Datei
   weitere Benutzer vom FTP-Zugriff ausschliessen.

   In einigen Fa:llen kann es wu:nschenswert sein, den Zugang fu:r manche
   Benutzer einzuschra:nken, ohne dabei FTP komplett zu verbieten. Dazu
   passen Sie /etc/ftpchroot, wie in ftpchroot(5) beschrieben, entsprechend
   an. Diese Datei entha:lt Benutzer und Gruppen sowie die fu:r sie geltenden
   Einschra:nkungen fu:r FTP.

   Um anonymen FTP-Zugriff auf dem Server zu aktivieren, muss ein Benutzer
   ftp auf dem FreeBSD-System angelegt werden. Danach ko: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 chroot(2), um den Zugriff auf das Heimatverzeichnis des
   Benutzers ftp zu beschra: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 wu: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:

 # service ftpd start

   Testen Sie die Verbindung zum FTP-Server, indem Sie folgendes eingeben:

 % ftp localhost

  28.9.2. Wartung

   Der ftpd-Daemon verwendet syslog(3), um Protokolldateien zu erstellen. In
   der Voreinstellung werden alle FTP betreffenden Nachrichten nach
   /var/log/xferlog geschrieben. Dies la:sst sich aber durch das Einfu:gen
   der folgenden Zeile in /etc/syslog.conf a:ndern:

 ftp.info      /var/log/xferlog

  Anmerkung:

   Beachten Sie, dass mit dem Betrieb eines anonymen FTP-Servers verschiedene
   Sicherheitsrisiken verbunden sind. Problematisch ist hier vor allem die
   Erlaubnis zum anonymen Upload von Dateien. Dadurch ko: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 ko:nnen.

28.10. Datei- und Druckserver fu:r Microsoft(R) Windows(R)-Clients (Samba)

   Samba ist ein beliebtes Open Source Softwarepaket, das Datei- und
   Druckdienste u:ber das SMB/CIFS-Protokoll zur Verfu:gung stellt. Dieses
   Protokoll ist in Microsoft(R) Windows(R)-Systemen enthalten und kann u:ber
   die Installation der Samba-Client-Bibliotheken in andere Betriebssysteme
   integriert werden. Das Protokoll ermo:glicht es Clients auf freigegebene
   Daten und Drucker zuzugreifen, so als ob es sich um lokale Drucker und
   Festplatten handeln wu:rde.

   Unter FreeBSD ko:nnen die Samba-Client-Bibliotheken u:ber den Port oder
   das Paket net/samba-smbclient installiert werden. Der Client ermo:glicht
   es einem FreeBSD-System auf SMB/CIFS-Freigaben in einem
   Microsoft(R) Windows(R)-Netzwerk zuzugreifen.

   Ein FreeBSD-System kann auch als Samba-Server agieren, wenn Sie den Port
   oder das Paket net/samba46 installieren. Dies erlaubt es dem Administrator
   SMB/CIFS-Freigaben auf dem FreeBSD-System einzurichten, auf welche dann
   Clients mit Microsoft(R) Windows(R) oder den Samba-Client-Bibliotheken
   zugreifen ko:nnen.

  28.10.1. Konfiguration des Servers

   Samba wird in /usr/local/etc/smb4.conf konfiguriert. Diese Datei muss
   erstellt werden, bevor Samba benutzt werden kann.

   Eine einfache smb4.conf, wie hier gezeigt, stellt den Zugriff auf
   Verzeichnisse und Drucker fu:r Windows(R)-Clients in einer Arbeitsgruppe
   (engl. Workgroup) zur Verfu:gung. In aufwendigeren Installationen, in
   denen LDAP oder Active Directory zum Einsatz kommt, ist es einfacher die
   smb4.conf mit dem Werkzeug samba-tool(8) zu erstellen.

 [global]
 workgroup = WORKGROUP
 server string = Samba Server Version %v
 netbios name = ExampleMachine
 wins support = Yes
 security = user
 passdb backend = tdbsam

 # Example: share /usr/src accessible only to 'developer' user
 [src]
 path = /usr/src
 valid users = developer
 writable  = yes
 browsable = yes
 read only = no
 guest ok = no
 public = no
 create mask = 0666
 directory mask = 0755

    28.10.1.1. Globale Einstellungen

   Einstellungen fu:r das Netzwerk werden in /usr/local/etc/smb4.conf
   definiert:

   workgroup

           Der Name der Arbeitsgruppe.

   netbios name

           Der NetBIOS-Namen fest, unter dem der Samba-Server bekannt ist. In
           der Regel handelt es sich dabei um den ersten Teil des DNS-Namens
           des Servers.

   server string

           Legt die Beschreibung fest, die angezeigt wird, wenn mit net view
           oder anderen Netzwerkprogrammen Informationen u:ber den Server
           angefordert werden.

   wins support

           Legt fest, ob Samba als WINS-Server fungieren soll. Aktivieren Sie
           die Unterstu:tzung fu:r WINS auf maximal einem Server im Netzwerk.

    28.10.1.2. Samba absichern

   Die wichtigsten Einstellungen in /usr/local/etc/smb4.conf betreffen das zu
   verwendende Sicherheitsmodell sowie das Backend-Passwortformat. Die
   folgenden Direktiven steuern diese Optionen:

   security

           Die ha:ufigsten Optionen sind security = share und security =
           user. Wenn die Clients Benutzernamen verwenden, die den
           Benutzernamen auf dem FreeBSD-Rechner entsprechen, dann sollte die
           Einstellung user level verwendet werden. Dies ist die
           Standardeinstellung. Allerdings ist es dazu erforderlich, dass
           sich die Clients auf dem Rechner anmelden, bevor sie auf
           gemeinsame Ressourcen zugreifen ko:nnen.

           In der Einstellung share level mu:ssen sich Clients nicht unter
           Verwendung eines gu:ltigen Logins auf dem Rechner anmelden, bevor
           sie auf gemeinsame Ressourcen zugreifen ko:nnen. In fru:heren
           Samba-Versionen war dies die Standardeinstellung.

   passdb backend

           Samba erlaubt verschiedene Backend-Authentifizierungsmodelle.
           Clients ko:nnen sich durch LDAP, NIS+, eine SQL-Datenbank oder
           eine Passwortdatei authentifizieren. Die empfohlene
           Authentifizierungsmethode, tdbsam, ist ideal fu:r einfache
           Netzwerke und wird hier vorgestellt. Fu:r gro:ssere oder
           komplexere Netzwerke wird ldapsam empfohlen. smbpasswd war der
           fru:here Standard und gilt mittlerweile als veraltet.

    28.10.1.3. Samba Benutzer

   Damit Windows(R)-Clients auf die Freigaben zugreifen ko:nnen, mu:ssen die
   FreeBSD-Benutzerkonten in der SambaSAMAccount-Datenbank zugeordnet werden.
   Fu:r bereits vorhandene Benutzerkonten kann dazu pdbedit(8) benutzt
   werden:

 # pdbedit -a username

   Dieser Abschnitt beschreibt lediglich die am ha:ufigsten verwendeten
   Einstellungen. Ausfu:hrliche Informationen zur Konfiguration von Samba
   finden Sie im Official Samba HOWTO.

  28.10.2. Samba starten

   Damit Samba beim Systemstart automatisch aktiviert wird, fu:gen Sie die
   folgende Zeile in /etc/rc.conf ein:

 samba_enable="YES"

   Fu:r Samba4 verwenden Sie:

 samba_server_enable="YES"

   Jetzt kann Samba direkt gestartet werden:

 # service samba start
 Starting SAMBA: removing stale tdbs :
 Starting nmbd.
 Starting smbd.

   Samba verwendet drei Daemonen. Sowohl nmbd als auch smbd werden durch
   samba_enable gestartet. Wenn eine Namensauflo:sung u:ber winbind beno:tigt
   wird, setzen Sie zusa:tzlich:

 winbindd_enable="YES"

   Samba kann jederzeit durch folgenden Befehl beendet werden:

 # service samba stop

   Samba ist ein komplexes Softwarepaket mit umfassenden Funktionen, die eine
   weitreichende Integration von Microsoft(R) Windows(R)-Netzwerken
   ermo:glichen. Fu:r eine Beschreibung dieser Zusatzfunktionen sollten Sie
   sich auf http://www.samba.org umsehen.

28.11. Die Uhrzeit mit NTP synchronisieren

   Die interne Uhrzeit eines Computers ist nie ganz exakt. Dies ist
   problematisch, da viele Dienste darauf angewiesen sind, dass die Computer
   im Netzwerk die exakte Uhrzeit u:bermitteln. Die exakte Uhrzeit ist auch
   erforderlich um sicherzustellen, dass die Zeitstempel der Dateien
   konsistent bleiben. Das Network Time Protocol (NTP) bietet die
   Mo:glichkeit, die exakte Uhrzeit in einem Netzwerk zur Verfu:gung zu
   stellen.

   Mit ntpd(8) entha:lt FreeBSD ein Werkzeug, das andere NTP-Server abfragen
   kann um die Uhrzeit auf diesem Computer zu synchronisieren, oder um selbst
   die Uhrzeit fu:r andere Computer im Netzwerk bereitzustellen. Die Server,
   die abgefragt werden, ko:nnen lokal oder von einem ISP zur Verfu:gung
   gestellt werden. Daru:ber hinaus gibt es eine Liste von o:ffentlich
   zuga:nglichen NTP-Servern. Falls Sie sich fu:r einen solchen o:ffentlichen
   Server entscheiden, wa:hlen Sie einen nahegelegenen Server und pru:fen Sie
   die Nutzungsbedingungen.

   Die Auswahl von mehreren NTP-Servern wird empfohlen, falls sich ein Server
   nicht erreichbar ist oder sich als unzuverla:ssig herausstellt. ntpd
   verwendet die Antworten anderer Server, um zuverla:ssige Server zu
   bestimmen, die dann bevorzugt abgefragt werden.

   Dieser Abschnitt beschreibt die Konfiguration von ntpd unter FreeBSD.
   Zusa:tzliche Dokumentation im HTML-Format finden Sie in
   /usr/share/doc/ntp/.

  28.11.1. NTP konfigurieren

   FreeBSD entha:lt mit ntpd ein Werkzeug, das zur Synchronisation der
   Uhrzeit verwendet werden kann. Um ntpd beim Booten zu aktivieren, fu:gen
   Sie den Eintrag ntpd_enable="YES" in /etc/rc.conf ein. Zusa:tzliche
   Variablen ko:nnen ebenfalls in /etc/rc.conf gesetzt werden. Weitere
   Details finden Sie in rc.conf(5) und ntpd(8).

   Das Programm liest /etc/ntp.conf um herauszufinden, welche NTP-Server
   abgefragt werden mu:ssen. Hier ist ein einfaches Beispiel einer
   /etc/ntp.conf:

   Beispiel 28.4. Beispiel einer /etc/ntp.conf

 server ntplocal.example.com prefer
 server timeserver.example.org
 server ntp2a.example.net

 driftfile /var/db/ntp.drift

   Das Format dieser Datei wird in 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 fu:r sehr zuverla:ssige und genaue NTP-Server verwendet werden, die
   u:ber eine spezielle Hardware zur Zeitu:berwachung verfu: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 verfu:gbar ist. Weiterhin werden in dieser Datei
   Informationen u:ber fru:here Anworten von NTP-Server. Da diese Datei
   interne Informationen fu:r NTP entha:lt, sollte sie nicht vera:ndert
   werden.

   In der Voreinstellung ist der NTP-Server fu:r alle Rechner im Netzwerk
   erreichbar. Die Option restrict in /etc/ntp.conf steuert, welche Rechner
   auf den Server zugreifen ko:nnen. Wenn Sie beispielsweise alle Rechner vom
   Zugriff auf den NTP-Server ausschliessen wollen, fu:gen Sie folgende Zeile
   in /etc/ntp.conf ein:

 restrict default ignore

  Anmerkung:

   Dieser Eintrag verhindert auch den Zugriff von anderen NTP-Servern.
   Besteht die Notwendigkeit, sich mit einem externen NTP-Server zu
   synchronisieren, muss dieser Server explizit zugelassen werden. Weitere
   Informationen finden Sie in 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 fu:r andere Rechner dienen ko:nnen,
   fu:gen Sie folgende Zeile ein:

 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

   192.168.1.0 ist die lokale Adresse des Netzwerks, 255.255.255.0 ist die
   Netzmaske des Netzwerks.

   Es werden mehrere restict-Eintra:ge untstu:tzt. Weitere Details finden Sie
   im Abschnitt Access Control Support von ntp.conf(5).

   Sobald ntpd_enable="YES" in /etc/rc.conf hinzugefu:gt wurde, kann ntpd
   direkt gestartet werden:

 # service ntpd start

  28.11.2. NTP mit einer PPP-Verbindung verwenden

   ntpd beno:tigt keine sta:ndige Internetverbindung. Wenn Sie sich u:ber
   eine PPP-Verbindung ins Internet einwa:hlen, sollten Sie verhindern, dass
   NTP-Verkehr eine Verbindung aufbauen oder aufrechterhalten kann. Dies kann
   in den filter-Direktiven von /etc/ppp/ppp.conf festgelegt werden. Ein
   Beispiel:

 set filter dial 0 deny udp src eq 123
 # Prevent NTP traffic from initiating dial out
 set filter dial 1 permit 0 0
 set filter alive 0 deny udp src eq 123
 # Prevent incoming NTP traffic from keeping the connection open
 set filter alive 1 deny udp dst eq 123
 # Prevent outgoing NTP traffic from keeping the connection open
 set filter alive 2 permit 0/0 0/0

   Weitere Informationen finden Sie im Abschnitt PACKET FILTERING von ppp(8)
   sowie in den Beispielen unter /usr/share/examples/ppp/.

  Anmerkung:

   Einige Internetprovider blockieren Ports mit niedrigen Nummern. In solchen
   Fa:llen funktioniert NTP leider nicht, da Antworten eines NTP-Servers den
   Rechner nicht erreichen werden.

28.12. iSCSI Initiator und Target Konfiguration

   iSCSI bietet die Mo:glichkeit, Speicherkapazita:ten u:ber ein Netzwerk zu
   teilen. Im Gegensatz zu NFS, das auf Dateisystemebene arbeitet,
   funktioniert iSCSI auf Blockgera:tebene.

   In der iSCSI-Terminologie wird das System, das den Speicherplatz zur
   Verfu: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, repra: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 verfu:gbare Speicher als rohe, nicht formatierte
   Festplatte, die auch als LUN bezeichnet wird, zur Verfu:gung. Die
   Gera:tedateien fu:r die Festplatten erscheinen in /dev/ und mu:ssen
   separat formatiert und eingehangen werden.

   FreeBSD entha:lt einen nativen, kernelbasierten iSCSI Target und
   Initiator. Dieser Abschnitt beschreibt, wie ein FreeBSD-System als Target
   oder Initiator konfiguriert wird.

  28.12.1. Ein iSCSI-Target konfigurieren

   Um ein iSCSI-Target zu konfigurieren, erstellen Sie die
   Konfigurationsdatei /etc/ctl.conf und fu:gen Sie eine Zeile in
   /etc/rc.conf hinzu, um sicherzustellen, dass ctld(8) automatisch beim
   Booten gestartet wird. Starten Sie dann den Daemon.

   Das folgende Beispiel zeigt eine einfache /etc/ctl.conf. Eine
   vollsta:ndige Beschreibung dieser Datei und der verfu:gbaren Optionen
   finden Sie in 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 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 mu:ssen. Die dritte und vierte Zeilen konfigurieren
   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 no:tig ist, wa:hrend bei pg0 die Suche nach Targets
   immer erlaubt ist.

   Der zweite Eintrag definiert ein einzelnes Target. Ein Target hat zwei
   mo: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 fu:r Testzwecke geeignet. Fu:r den tatsa:chlichen Gebrauch a:ndern Sie
   com.example auf einen echten, ru:ckwa:rts geschriebenen Domainnamen.
   2012-06 steht fu: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 u:ber die Portalgruppe pg0 erreichbar.

   Die na:chste Sektion definiert die LUN. Jede LUN wird dem Initiator als
   separate Platte pra:sentiert. Fu:r jedes Target ko:nnen mehrere LUNs
   definiert werden. Jede LUN wird u: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 fu:r die LUN. Der Pfad muss
   vorhanden sein, bevor ctld(8) gestartet wird. Die zweite Zeile ist
   optional und gibt die Gro:sse der LUN an. Als na:chstes fu:gen Sie
   folgende Zeile in /etc/rc.conf ein, um ctld(8) automatisch beim Booten zu
   starten:

 ctld_enable="YES"

   Um ctld(8) jetzt zu starten, geben Sie dieses Kommando ein:

 # service ctld start

   Der 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 A:nderungen sofort wirksam werden:

 # service ctld reload

    28.12.1.1. Authentifizierung

   Die vorherigen Beispiele sind grundsa:tzlich unsicher, da keine
   Authentifizierung verwendet wird und jedermann vollen Zugriff auf alle
   Targets hat. Um fu:r den Zugriff auf die Targets einen Benutzernamen und
   ein Passwort vorauszusetzen, a: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 Passwo: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 fu: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
         }
 }

  28.12.2. Einen iSCSI-Initiator konfigurieren

  Anmerkung:

   Der in dieser Sektion beschriebene iSCSI-Initiator wird seit FreeBSD
   10.0-RELEASE unterstu:tzt. Lesen Sie iscontrol(8), wenn Sie den
   iSCSI-Initiator mit a:lteren Versionen benutzen mo:chten.

   Um den Initiator zu verwenden, muss zuna:chst ein iSCSI-Daemon gestartet
   sein. Der Daemon des Initiators beno:tigt keine Konfigurationsdatei. Um
   den Daemon automatisch beim Booten zu starten, fu:gen Sie folgende Zeile
   in /etc/rc.conf ein:

 iscsid_enable="YES"

   Um iscsid(8) jetzt zu starten, geben Sie dieses Kommando ein:

 # service iscsid start

   Die Verbindung mit einem Target kann mit, oder ohne eine
   Konfigurationsdatei /etc/iscsi.conf durchgefu:hrt werden. Dieser Abschnitt
   beschreibt beide Mo:glichkeiten.

    28.12.2.1. Verbindung zu einem Target herstellen - ohne Konfigurationsdatei

   Um einen Initiator mit einem Target zu verbinden, geben Sie die IP-Adresse
   des Portals und den Namen des Ziels an:

 # iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0

   Um zu u:berpru:fen, ob die Verbindung gelungen ist, rufen Sie iscsictl
   ohne Argumente auf. Die Ausgabe sollte in etwa wie folgt aussehen:

 Target name                                     Target portal   State
 iqn.2012-06.com.example:target0                 10.10.10.10     Connected: da0

   In diesem Beispiel wurde die iSCSI-Sitzung mit der LUN /dev/da0
   erfolgreich hergestellt. Wenn das Target iqn.2012-06.com.example:target0
   mehr als nur eine LUN exportiert, werden mehrere Gera: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
   iscsid(8)-Daemon nicht ausgefu:hrt wird:

 Target name                                     Target portal   State
 iqn.2012-06.com.example:target0                 10.10.10.10     Waiting for iscsid(8)

   Die folgende Meldung deutet auf ein Netzwerkproblem hin, zum Beispiel eine
   falsche IP-Adresse oder einen falschen Port:

 Target name                                     Target portal   State
 iqn.2012-06.com.example:target0                 10.10.10.11     Connection refused

   Diese Meldung bedeutet, dass der Name des Targets falsch angegeben wurde:

 Target name                                     Target portal   State
 iqn.2012-06.com.example:target0                 10.10.10.10     Not found

   Diese Meldung bedeutet, dass das Target eine Authentifizierung erfordert:

 Target name                                     Target portal   State
 iqn.2012-06.com.example:target0                 10.10.10.10     Authentication failed

   Verwenden Sie diese Syntax, um einen CHAP-Benutzernamen und ein Passwort
   anzugeben:

 # iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecret

    28.12.2.2. Verbindung mit einem Target herstellen - mit Konfigurationsdatei

   Wenn Sie fu:r die Verbindung eine Konfigurationsdatei verwenden mo: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 Eintra:ge legen die Parameter fest, die
   wa:hrend der Verbindung verwendet werden. TargetAddress und TargetName
   mu: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:

 # iscsictl -An t0

   Um sich stattdessen mit allen definierten Targets aus der
   Konfigurationsdatei zu verbinden, verwenden Sie:

 # iscsictl -Aa

   Damit sich der Initiator automatisch mit allen Targets aus /etc/iscsi.conf
   verbindet, fu:gen Sie folgendes in /etc/rc.conf hinzu:

 iscsictl_enable="YES"
 iscsictl_flags="-Aa"

Kapitel 29. Firewalls

   Beigetragen von Joseph J. Barbish.
   Nach SGML konvertiert und aktualisiert von Brad Davis.
   U:bersetzt von Michael Bunzel, Johann Kois, Benjamin Lukas und Bjo:rn
   Heidotting.
   Inhaltsverzeichnis

   29.1. Einfu:hrung

   29.2. Firewallkonzepte

   29.3. PF

   29.4. IPFW

   29.5. IPFILTER (IPF)

29.1. Einfu:hrung

   Firewalls ermo:glichen es, den ein- und ausgehenden Netzwerkverkehr eines
   Systems zu filtern. Dazu verwendet eine Firewall eine oder mehrere Gruppen
   von "Regeln", um ankommende Netzwerkpakete zu untersuchen und entweder
   durchzulassen oder zu blockieren. Die Regeln einer Firewall untersuchen
   charakteristische Eigenschaften von Datenpaketen, darunter den
   Protokolltyp, die Quell- und Zieladresse sowie den Quell- und Zielport.

   Firewalls ko:nnen die Sicherheit eines Rechners oder eines Netzwerks
   erho:hen, indem sie folgende Aufgaben u:bernehmen:

     * Den Schutz der Anwendungen, Dienste und Rechner eines internen
       Netzwerks vor unerwu:nschtem Datenverkehr aus dem Internet.

     * Die Beschra:nkung des Zugriffs von Rechnern des internen Netzwerks auf
       Rechner oder Dienste des o:ffentlichen Internets.

     * Den Einsatz von Network Address Translation (NAT), welches es durch
       die Verwendung von privaten IP-Adressen ermo:glicht, eine einzige
       gemeinsame Internetverbindung fu:r mehrere Rechner zu nutzen. Dies
       geschieht entweder u:ber eine einzige IP-Adresse oder u:ber eine
       Gruppe von jeweils automatisch zugewiesenen o:ffentlichen Adressen.

   Das Basissystem von FreeBSD entha:lt drei Firewalls: PF, IPFW und IPFILTER
   (auch als IPF bekannt). FreeBSD entha:lt ebenfalls zwei Traffic-Shaper zur
   Kontrolle der Bandbreite: altq(4) und dummynet(4). ALTQ ist traditionell
   eng an PF gebunden, wa:hrend dummynet zusammen mit IPFW verwendet wird.
   Gemeinsam ist allen Firewalls, dass sie Regeln einsetzen, um den Transfer
   von ein- und ausgehenden Datenpaketen des Systems zu steuern.
   Unterschiedlich ist aber die Art und Weise, wie dies realisiert wird. Auch
   die fu:r diese Regeln verwendete Syntax ist unterschiedlich.

   FreeBSD besitzt mehrere Firewalls, um den unterschiedlichen Anforderungen
   und Vorlieben von Benutzern gerecht zu werden. Jeder Benutzer sollte
   selbst beurteilen, welche Firewall seinen Bedu:rfnissen am besten
   entspricht.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie wissen:

     * Wie man Paketfilterregeln erstellt.

     * Was die Unterschiede zwischen den in FreeBSD eingebauten Firewalls
       sind.

     * Wie die PF-Firewall konfiguriert und einsetzt wird.

     * Wie die IPFW-Firewall konfiguriert und einsetzt wird.

     * Wie die IPFILTER-Firewall konfiguriert und einsetzt wird.

   Bevor Sie dieses Kapitel lesen, sollten Sie:

     * Die grundlegenden Konzepte von FreeBSD und dem Internet verstehen.

  Anmerkung:

   Da alle Firewalls auf der Inspektion ausgewa:hlter Kontrollfelder in
   Datenpaketen basieren, muss fu:r die Erstellung von Firewallregeln ein
   grundlegendes Versta:ndnis von TCP/IP vorhanden sein. Eine gute
   Einfu:hrung finden Sie in Daryl's TCP/IP Primer.

29.2. Firewallkonzepte

   Ein Regelsatz besteht aus einer Gruppe von Regeln, die Pakete basierend
   auf ihren Inhalt entweder blockieren oder durchlassen. Der bidirektionale
   Austausch von Paketen zwischen zwei Rechnern wird als Sitzung (Session)
   bezeichnet. Der Regelsatz verarbeitet sowohl ankommende Pakete aus dem
   Internet, als auch die vom System erzeugten Antwortpakete. Jeder
   TCP/IP-Dienst hat ein festgelegtes Protokoll und einen vorgegebenen Port.
   Pakete fu:r einen bestimmten Dienst stammen von einer Quelladresse und
   einem unprivilegierten Port und gehen an einen spezifischen Port auf der
   Zieladresse. Alle oben genannten Parameter ko:nnen als Selektionskriterien
   verwendet werden, um einen Regelsatz zu erstellen, der den Zugriff auf
   bestimmte Dienste gewa:hrt oder blockiert.

   Unbekannte Portnummern ko:nnen Sie in /etc/services nachschlagen.
   Alternativ finden Sie die Portnummern und deren Verwendungszweck auf
   http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers.

   Die Seite http://www.sans.org/security-resources/idfaq/oddports.php
   entha:lt eine Liste der Portnummern, die auch von Trojanern benutzt
   werden.

   FTP hat zwei Modi: Aktiv und Passiv. Unterschied liegt in der Bestimmung
   des Datenkanals. Der Passiv-Modus ist sicherer, da der Datenkanal vom
   Client bestimmt wird. Eine ausfu:hrliche Erkla:rung von FTP und den
   verschiedenen Modi finden Sie unter
   http://www.slacksite.com/other.ftp.html.

   Ein Firewall-Regelsatz kann entweder "einschliessend" (inclusive firewall)
   oder "ausschliessend" (exclusive Firewall) sein. Eine ausschliessende
   Firewall la:sst jeden Datenverkehr durch, der nicht durch eine Regel
   ausgeschlossen wurde. Eine einschliessende Firewall macht das genaue
   Gegenteil. Sie la:sst Datenverkehr nur dann passieren, wenn dieser einer
   der definierten Regeln entspricht.

   Eine einschliessende Firewall bietet eine wesentlich bessere Kontrolle des
   ausgehenden Verkehrs, was sie zur besseren Wahl fu:r Systeme macht, welche
   Dienste fu:r das Internet anbieten. Sie kontrolliert auch den Verkehr aus
   dem o:ffentlichen Internet zum privaten Netzwerk. Jeder Verkehr, der
   keiner Regel entspricht wird geblockt und protokolliert. Einschliessende
   Firewalls sind generell sicherer als ausschliessende Firewalls, da sie das
   Risiko, dass unerwu:nschter Verkehr hindurch geht, drastisch reduzieren.

  Anmerkung:

   Wenn nicht anders vermerkt, verwenden alle Konfigurationen und Regelsa:tze
   in diesem Kapitel einschliessende Firewalls.

   Die Sicherheit kann durch den Einsatz einer "zustandsorientierten
   Firewall" (stateful firewall) weiter erho:ht werden. Dieser Typ Firewall
   u:berwacht alle offenen Verbindungen und erlaubt nur Datenverkehr von
   bereits bestehenden Verbindungen oder wenn eine neue Verbindung aufgebaut
   wird.

   Eine zustandsorientierte Firewall behandelt den Verkehr als einen
   bidirektionalen Austausch von Paketen wa:hrend einer Session. Wenn ein
   Zustand fu:r eine passende Regel angegeben wird, erstellt die Firewall
   dynamisch interne Regeln fu:r jedes Paket, das wa:hrend dieser Session
   ausgetauscht wird. Die Firewall hat ausreichend Mo:glichkeiten, um zu
   bestimmen, ob ein Paket zu einer Session geho:rt. Alle Pakete, die nicht
   zu dieser Session passen, werden automatisch abgelehnt.

   Sobald die Session beendet ist, wird sie aus der dynamischen
   Zustandstabelle entfernt.

   Eine zustandsorientierte Filterung erlaubt es, sich auf die Sperrung bzw.
   Freigabe von neuen Sessions zu konzentrieren. Wenn eine neue Session
   genehmigt wird, werden alle nachfolgenden Pakete dieser Session
   automatisch erlaubt und betru:gerische Pakete werden automatisch
   abgelehnt. Wenn eine neue Session nicht genehmigt wird, werden alle
   nachfolgenden Pakete dieser Session abgelehnt. Die zustandsorientierte
   Filterung bietet fortgeschrittene Fa:higkeiten zur Abwehr von
   verschiedensten Angriffsmethoden, die von Angreifern eingesetzt werden.

   NAT steht fu:r Network Address Translation. Die NAT-Funktion ermo:glicht
   es einem privaten LAN hinter einer Firewall, sich eine einzelne vom ISP
   zugewiesene IP-Adresse zu teilen, auch wenn die Adresse dynamisch
   zugewiesen wird. NAT ermo:glicht den Internetzugriff fu:r jeden Rechner im
   LAN, ohne dass der ISP fu:r mehrere Internet-Konten bezahlt wird.

   NAT u:bersetzt automatisch die private IP-Adresse auf die o:ffentliche
   IP-Adresse, sobald ein Paket fu:r das o:ffentliche Internet die Firewall
   passiert. Zusa:tzlich fu:hrt es auch die U:bersetzung der Anwortpakete
   durch.

   Gema:ss RFC 1918 sind die folgenden IP-Adressbereiche fu:r private
   Netzwerke reserviert und werden nie ins o:ffentliche Internet
   weitergeleitet. Daher sind diese Bereiche fu:r den Einsatz mit NAT
   geeignet:

     * 10.0.0.0/8

     * 172.16.0.0/12

     * 192.168.0.0/16

  Warnung:

   Seien Sie a:usserst vorsichtig wenn Sie mit Firewallregeln arbeiten. Durch
   eine falsche Konfiguration kann der Administrator den Zugriff auf den
   Server verlieren. Um auf der sicheren Seite zu sein, sollten Sie die
   anfa:ngliche Konfiguration der Firewall von der lokalen Konsole
   durchfu:hren, anstatt dass Sie dies aus der Ferne u:ber ssh tun.

29.3. PF

   U:berarbeitet und aktualisiert von John Ferrell.

   In FreeBSD 5.3 wurde PF von OpenBSD in das Basissystem integriert. Bei PF
   handelt es sich um eine komplette, voll ausgestattete Firewall, die
   optional auch ALTQ (Alternatives Queuing) unterstu:tzt. ALTQ stellt
   Quality of Service (QoS) zur Verfu:gung.

   Das OpenBSD-Projekt pflegt die massgebliche Referenz von PF in der PF FAQ.
   Peter Hansteen betreut ein sehr ausfu:hrliches PF-Tutorial unter
   http://home.nuug.no/~peter/pf/.

  Warnung:

   Bedenken Sie beim Studium der PF FAQ, dass FreeBSD die PF-Version aus
   OpenBSD 4.5 entha:lt.

   Die FreeBSD packet filter mailing list ist ein guter Anlaufpunkt fu:r
   Fragen zur Konfiguration und dem Einsatz der PF-Firewall. U:berpru:fen Sie
   aber zuna:chst die Archive der Mailingliste, bevor Sie eine Frage stellen.
   Vielleicht wurde die Frage dort schon beantwortet.

   Weitere Informationen u:ber die Portierung von PF nach FreeBSD finden Sie
   unter http://pf4freebsd.love2party.net/.

   Dieser Abschnitt konzentriert sich auf PF in FreeBSD. Es wird beschrieben,
   wie PF und ALTQ aktiviert werden. Anschliessend wird demonstriert, wie
   Regelsa:tze auf einem FreeBSD-System erstellt werden.

  29.3.1. PF aktivieren

   Damit PF benutzt werden kann, muss zuna:chst das Kernelmodul geladen
   werden. Dieser Abschnitt beschreibt die Eintra:ge fu:r /etc/rc.conf, die
   verwendet werden ko:nnen um PF zu aktivieren.

   Beginnen Sie mit folgender Zeile in /etc/rc.conf:

 pf_enable="YES"

   pfctl(8) beschreibt zusa:tzliche Optionen, die beim Start an PF u:bergeben
   werden ko:nnen. Fu:gen Sie diesen Eintrag in /etc/rc.conf hinzu und
   schreiben Sie die beno:tigten Optionen zwischen die Anfu:hrungszeichen:

 pf_flags=""                     # additional flags for pfctl startup

   PF kann nicht gestartet werden, wenn es seine Konfigurationsdatei nicht
   findet. In der Voreinstellung existiert bereits ein Regelsatz namens
   /etc/pf.conf. Wenn bereits ein Regelsatz an anderer Stelle gespeichert
   wurde, fu:gen Sie in /etc/rc.conf einen Eintrag mit dem vollsta:ndigen
   Pfad zur Datei ein:

 pf_rules="/path/to/pf.conf"

   Protokollierungsfunktionen fu:r PF werden von pflog(4) zur Verfu:gung
   gestellt. Fu:gen Sie folgende Zeile in /etc/rc.conf ein, um diese Funktion
   zu aktivieren:

 pflog_enable="YES"

   Die folgenden Zeilen ko:nnen ebenfalls hinzugefu:gt werden, um den
   Speicherort der Protokolldatei zu bestimmen und weitere Optionen beim
   Start an pflog(4) zu u:bergeben:

 pflog_logfile="/var/log/pflog"  # where pflogd should store the logfile
 pflog_flags=""                  # additional flags for pflogd startup

   Falls ein LAN hinter der Firewall existiert und die Pakete an die Rechner
   im LAN weitergeleitet werden mu:ssen, oder wenn NAT beno:tigt wird, fu:gen
   Sie die folgende Option hinzu:

 gateway_enable="YES"            # Enable as LAN gateway

   Nachdem die A:nderungen gespeichert wurden, kann PF mit Unterstu:tzung
   fu:r Protokollierung gestartet werden:

 # service pf start
 # service pflog start

   In der Voreinstellung liest PF seine Konfiguration aus /etc/pf.conf und
   modifiziert, verwirft oder akzeptiert Pakete anhand der Definitionen in
   dieser Datei. FreeBSD entha:lt mehrere Beispieldateien unter
   /usr/share/examples/pf/. Auch die PF FAQ entha:lt sehr ausfu:hrliche
   Beispiele fu:r PF-Regeln.

   Zur Steuerung von PF wird pfctl verwendet. Tabelle 29.1, "Nu:tzliche pfctl
   Optionen" fasst einige nu:tzliche Optionen fu:r diesen Befehl zusammen.
   Eine Beschreibung aller verfu:gbaren Optionen finden Sie in pfctl(8).

   Tabelle 29.1. Nu:tzliche pfctl Optionen

             Kommando                              Aufgabe                    
   pfctl -e                     PF aktivieren                                 
   pfctl -d                     PF deaktivieren                               
                                Alle Filterregeln zuru:cksetzen (NAT, Filter, 
   pfctl -F all -f /etc/pf.conf Zustandstabelle) und /etc/pf.conf erneut      
                                einlesen.                                     
   pfctl -s [ rules | nat |     Zusammenfassung der Filterregeln, NAT-Regeln, 
   states ]                     oder der Zustandstabelle.                     
   pfctl -vnf /etc/pf.conf      U:berpru:ft /etc/pf.conf auf Fehler, la:dt    
                                aber die Filterregeln nicht neu.              

  Tipp:

   security/sudo ist nu:tzlich um Kommandos mit erho:hten Berechtigungen
   auszufu:hren, wie beispielsweise pfctl. Das Programm kann aus der
   Ports-Sammlung installiert werden.

   Um den ein- und ausgehenden Verkehr im Auge zu behalten, ko:nnen Sie ein
   Werkzeug wie sysutils/pftop benutzen. Sobald das Programm installiert ist,
   ko:nnen Sie pftop ausfu:hren, um einen Snapshot des Datenverkehrs zu
   sehen. Das Format der Ausgabe ist der von top(1) sehr a:hnlich.

  29.3.2. ALTQ aktivieren

   Unter FreeBSD kann ALTQ zusammen mit PF benutzt werden, um Quality of
   Service (QoS) bereitzustellen. Sobald ALTQ aktiviert ist, ko:nnen
   Warteschlangen definiert werden, mit denen Sie die Priorita:t fu:r
   ausgehende Pakete festlegen ko:nnen.

   Bevor Sie ALTQ aktivieren, sollten Sie altq(4) lesen und sicherstellen,
   das der Treiber der Netzwerkkarte diese Funktion unterstu:tzt.

   ALTQ steht nicht als ladbares Kernelmodul zur Verfu:gung. Wenn die
   Netzwerkkarte des Systems ALTQ unterstu:tzt, erstellen Sie nach den
   Anweisungen in Kapitel 8, Konfiguration des FreeBSD-Kernels einen
   angepassten Kernel. Als erstes muss ALTQ aktiviert werden. Zudem ist
   mindestens eine weitere Option no:tig, um den Algorithmus fu:r die
   Warteschlange zu bestimmen:

 options         ALTQ
 options         ALTQ_CBQ        # Class Based Queuing (CBQ)
 options         ALTQ_RED        # Random Early Detection (RED)
 options         ALTQ_RIO        # RED In/Out
 options         ALTQ_HFSC       # Hierarchical Packet Schedule (HFSC)
 options         ALTQ_PRIQ       # Priority Queuing (PRIQ)

   Die folgenden Algorithmen stehen zur Verfu:gung:

   CBQ

           Class Based Queuing (CBQ) erlaubt es, die Bandbreite einer
           Verbindung in verschiedene Klassen oder Warteschlangen zu
           unterteilen, um die Priorita:t von Datenpaketen basierend auf
           Filterregeln zu beeinflussen.

   RED

           Random Early Detection (RED) wird eingesetzt, um eine U:berlastung
           des Netzwerks zu vermeiden. Dazu ermittelt RED die Gro:sse der
           Warteschlange und vergleicht diesen Wert mit den minimalen und
           maximalen Grenzwerten der Warteschlange. Ist die Warteschlange
           gro:sser als das erlaubte Maximum, werden alle neuen Pakete nach
           dem Zufallsprinzip verworfen.

   RIO

           Random Early Detection In and Out (RIO). Dieser Modus verwaltet
           mehrere Warteschlangen durchschnittlicher Gro:sse mit mehreren
           Schwellwerten, eine fu:r jedes QoS-Level.

   HFSC

           Hierachical Fair Service Curve Packet Scheduler (HFSC) wird in
           http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html beschrieben.

   PRIQ

           Priority Queuing (PRIQ) la:sst den Verkehr einer Warteschlange mit
           ho:herer Priorita:t zuerst durch.

   Weitere Informationen u:ber diese Algorithmen und Beispiele fu:r
   Regelsa:tze finden Sie unter http://www.openbsd.org/faq/pf/queueing.html.

  29.3.3. PF Regelsa:tze

   Beigetragen von Peter N. M. Hansteen.

   Dieser Abschnitt beschreibt die Erstellung von angepassten Regelsa:tzen.
   Es wird mit dem einfachsten Regelsatz begonnen auf dem dann weitere
   aufgebaut werden, um die Konzepte und Funktionen von PF an einigen
   konkreten Beispielen zu verdeutlichen.

   Der einfachste Regelsatz gilt fu:r einen Rechner, der keine Dienste
   anbietet und Zugriff auf das Internet haben soll. Fu:r diesen minimalen
   Regelsatz wird /etc/pf.conf wie folgt konfiguriert:

 block in all
 pass out all keep state

   Die erste Regel blockiert jeglichen eingehenden Datenverkehr. Die zweite
   Regel erlaubt ausgehende Verbindungen von diesem Rechner, wa:hrend die
   Zustandsinformationen dieser Verbindungen gespeichert werden. Diese
   Zustandsinformationen machen es mo:glich, den Antwortverkehr fu:r diese
   Verbindungen zu erlauben. Der Regelsatz wird mit dem folgenden Befehl
   geladen:

 # pfctl -e ; pfctl -f /etc/pf.conf

   Neben den Zustandsinformationen verfu:gt PF u:ber Listen und Makros. Diese
   ko:nnen bei der Erstellung der Regeln definiert werden. Makros ko:nnen
   Listen enthalten und sie mu:ssen vor ihrer ersten Benutzung definiert
   sein. Fu:gen Sie beispielsweise folgende Zeilen an den Anfang des
   Regelsatzes:

 tcp_services = "{ ssh, smtp, domain, www, pop3, auth, pop3s }"
 udp_services = "{ domain }"

   PF versteht sowohl Portnamen als auch Portnummern, solange die Namen in
   /etc/services aufgefu:hrt sind. Dieses Beispiel erstellt zwei Makros. Das
   erste ist eine Liste mit sieben TCP-Portnamen, die zweite Liste entha:lt
   einen UDP-Portnamen. Sobald ein Makro definiert ist, kann es in den Regeln
   verwendet werden. In diesem Beispiel wird der gesamte Datenverkehr
   geblockt, mit Ausnahme der Verbindungen die von diesem Rechner initiiert
   wurden und sich auf einen der angegebenen TCP-Dienste oder den UDP-Dienst
   beziehen:

 tcp_services = "{ ssh, smtp, domain, www, pop3, auth, pop3s }"
 udp_services = "{ domain }"
 block all
 pass out proto tcp to any port $tcp_services keep state
 pass proto udp to any port $udp_services keep state

   Obwohl UDP als zustandsloses Protokoll betrachtet wird, ist PF in der Lage
   einige Zustandsinformationen zu verfolgen. Wenn beispielsweise eine
   UDP-Abfrage fu:r einen Nameserver das System verla:sst, wird PF nach der
   Antwort Ausschau halten und das Antwortpaket durch lassen.

   Nachdem der Regelsatz vera:ndert wurde, muss er neu geladen werden:

 # pfctl -f /etc/pf.conf

   Wenn keine Syntaxfehler festgestellt werden, wird pfctl keine Ausgabe
   erzeugen. Die Syntax kann auch getestet werden, bevor der Regelsatz
   geladen wird:

 # pfctl -nf /etc/pf.conf

   Die Option -n bewirkt, dass die Regeln nur interpretiert, jedoch nicht
   geladen werden. Dies bietet die Mo:glichkeit, alle Fehler zu korrigieren.
   Es wird immer der letzte gu:ltige Regelsatz geladen, bis PF entweder
   deaktiviert, oder ein neuer Regelsatz geladen wird.

  Tipp:

   Wenn Sie beim Laden oder Pru:fen des Regelsatzes noch die Option -v
   hinzufu:gen, wird pfctl den komplett interpretierten Regelsatz anzeigen.
   Dies ist a:usserst nu:tzlich, wenn Sie versuchen Fehler im Regelsatz zu
   finden.

    29.3.3.1. Einfaches Gateway mit NAT

   Dieser Abschnitt zeigt wie ein FreeBSD-System mit PF als Gateway
   konfiguriert wird. Das Gateway muss u:ber mindestens zwei Netzwerkkarten
   verfu:gen, die jeweils mit einem separaten Netzwerk verbunden sind. In
   diesem Beispiel ist xl1 mit dem Internet verbunden und xl0 ist mit dem
   internen Netzwerk verbunden.

   Aktivieren Sie zuna:chst das Gateway, damit der Rechner den
   Netzwerkverkehr von einer Schnittstelle zur na:chsten weiterleiten kann.
   Diese sysctl-Einstellung sorgt dafu:r, dass IPv4-Pakete weitergeleitet
   werden:

 # sysctl net.inet.ip.forwarding=1

   So leiten Sie IPv6-Datenverkehr weiter:

 # sysctl net.inet6.ip6.forwarding=1

   Um diese Einstellungen beim Systemstart zu aktivieren, fu:gen Sie folgende
   Zeilen in /etc/rc.conf ein:

 gateway_enable="YES"            #fu:r ipv4
 ipv6_gateway_enable="YES"       #fu:r ipv6

   Pru:fen Sie mit ifconfig, dass beide Schnittstellen vorhanden und aktiv
   sind.

   Als na:chstes erstellen Sie die no:tigen PF-Regeln, damit das Gateway den
   Datenverkehr weiterleiten kann. Die folgende Regel erlaubt den
   zustandsorientierten Verkehr aus dem Internet zu den Rechnern im Netzwerk:

 pass in on xl1 from xl1:network to xl0:network port $ports keep state

   Diese Regel erlaubt lediglich den Datenverkehr u:ber das Gateway auf der
   internen Schnittstelle. Damit die Pakete noch weiter gehen, wird eine
   passende Regel beno:tigt:

 pass out on xl0 from xl1:network to xl0:network port $ports keep state

   Obwohl diese beiden Regeln funktionieren, werden sie in der Praxis so
   spezifisch selten beno:tigt. Ein lesbarer Regelsatz ist oft ein sicherer
   Regelsatz. Der Rest dieses Abschnitts zeigt, wie Sie die Regeln so einfach
   und lesbar wie mo:glich halten. Zum Beispiel ko:nnten die beiden Regeln zu
   einer Regel zusammengefasst werden:

 pass from xl1:network to any port $ports keep state

   Die Notation interface:network kann durch ein Makro ersetzt werden, um den
   Regelsatz besser lesbar zu machen. Zum Beispiel ko:nnte fu:r das Netzwerk
   an der internen Schnittstelle (xl0:network) ein Makro namens $localnet
   definiert werden. Alternativ ko:nnte fu:r die Definition von $localnet
   auch eine IP-Adresse/Netzmaske Notation verwendet werden, um ein Netzwerk
   zu bezeichnen, beispielsweise 192.168.100.1/24 fu:r ein privates Subnetz.

   Bei Bedarf kann fu:r $localnet auch eine Liste von Netzwerken definiert
   werden. Abha:ngig von den Bedu:rfnissen kann $localnet auch fu:r eine
   typische Regel wie folgt verwendet werden:

 pass from $localnet to any port $ports keep state

   Der folgende Regelsatz erlaubt sa:mtlichen Verkehr, der von den Rechnern
   im internen Netzwerk initiiert wird. Zuna:chst werden zwei Makros
   definiert, die die externen und internen 3COM-Schnittstellen
   repra:sentieren.

  Anmerkung:

   Bei Einwa:hlverbindungen wird tun0 fu:r die externe Schnittstelle
   verwendet. Bei ADSL-Verbindungen, insbesondere denen die PPP over Ethernet
   (PPPoE) verwenden, ist die richtige externe Schnittstelle tun0 und nicht
   die physische Ethernet-Schnittstelle.

 ext_if = "xl0"  # macro for external interface - use tun0 for PPPoE
 int_if = "xl1"  # macro for internal interface
 localnet = $int_if:network
 # ext_if IP address could be dynamic, hence ($ext_if)
 nat on $ext_if from $localnet to any -> ($ext_if)
 block all
 pass from { lo0, $localnet } to any keep state

   Dieser Regelsatz fu:hrt die NAT-Regel ein, die verwendet wird, um die
   U:bersetzung der Netzwerkadressen von den nicht-routebaren Adressen im
   internen Netzwerk auf die IP-Adresse der externen Schnittstelle zu
   handhaben. Die Klammern im letzten Teil der NAT-Regel ($ext_if) werden
   angegeben, wenn die IP-Adresse der externen Schnittstelle dynamisch
   zugewiesen wird. Damit wird sichergestellt, dass der Netzwerkverkehr ohne
   schwerwiegende Unterbrechungen weiterla:uft, auch wenn sich die externe
   IP-Adresse a:ndert.

   Beachten Sie, dass dieser Regelsatz wahrscheinlich mehr Verkehr aus dem
   Netzwerk zula:sst, als eigentlich no:tig ist. Bei einem angemessenen
   Aufbau ko:nnte folgendes Makro erstellt werden:

 client_out = "{ ftp-data, ftp, ssh, domain, pop3, auth, nntp, http, \
     https, cvspserver, 2628, 5999, 8000, 8080 }"

   Dieses Makro wird dann in der Filterregel benutzt:

 pass inet proto tcp from $localnet to any port $client_out \
     flags S/SA keep state

   Weitere pass Regeln werden vielleicht noch beno:tigt. Diese Regel
   aktiviert SSH auf der externen Schnittstelle:

 pass in inet proto tcp to $ext_if port ssh

   Dieses Makrodefinition und Regel erlaubt DNS und NTP fu:r interne Clients:

 udp_services = "{ domain, ntp }"
 pass quick inet proto { tcp, udp } to any port $udp_services keep state

   Beachten Sie das Schlu:sselwort quick in dieser Regel. Da der Regelsatz
   aus mehreren Regeln besteht, ist es wichtig, die Beziehungen zwischen den
   einzelnen Regeln zu verstehen. Die Regeln werden von oben nach unten
   ausgewertet, in der Reihenfolge wie sie geschrieben sind. Fu:r jedes Paket
   oder jede Verbindung, das PF ausgewertet, wird die letzte
   u:bereinstimmende Regel im Regelsatz angewendet. Wenn jedoch ein Paket auf
   eine Regel passt, welche das Schlu:sselwort quick entha:lt, wird das Paket
   entsprechend dieser Regel behandelt und die Regelverarbeitung wird
   gestoppt. Diese Vorgehensweise ist sehr nu:tzlich, wenn eine Ausnahme von
   den allgemeinen Regeln erforderlich ist.

    29.3.3.2. Einen FTP-Proxy einrichten

   Die Konfiguration einer funktionierenden Regel fu:r FTP kann aufgrund der
   Beschaffenheit des FTP-Protokolls problematisch sein. FTP ist sehr viel
   a:lter als Firewalls und schon vom Design her unsicher. Die ha:ufigsten
   Argumente gegen eine Verwendung von FTP sind:

     * Passwo:rter werden im Klartext u:bertragen.

     * Das Protokoll erfordert die Verwendung von mindestens zwei
       TCP-Verbindungen (Steuerung und Daten) auf separaten Ports.

     * Wenn eine Sitzung aufgebaut wird, werden die Daten auf zufa:llig
       ausgewa:hlten Ports u:bermittelt.

   All diese Punkte stellen Herausforderungen dar, noch bevor die Client-
   oder Server-Software auf potenzielle Sicherheitslu:cken u:berpru:ft wurde.
   Es existieren aber auch sichere Alternativen fu:r die Dateiu:bertragung,
   wie sftp(1) oder scp(1), wo die Authentifizierung und die
   Datenu:bertragung u:ber eine verschlu:sselte Verbindung erfolgt.

   Fu:r Situationen, in denen FTP erforderlich ist, kann PF den
   FTP-Datenverkehr an ein kleines Proxy-Programm namens ftp-proxy(8)
   weiterleiten. Dieses Programm ist im Basissystem von FreeBSD enthalten.
   Die Aufgabe des Proxies ist das dynamische Einfu:gen und Entfernen von
   Regeln im Regelsatz. Dies wird durch den Einsatz von Ankern erreicht,
   damit der FTP-Verkehr korrekt verarbeitet werden kann.

   Fu:gen Sie folgende Zeilen in /etc/rc.conf ein, um den Proxy zu
   aktivieren:

 ftpproxy_enable="YES"

   Danach kann der Proxy mit service ftp-proxy start gestartet werden.

   Fu:r die Grundkonfiguration mu:ssen drei weitere Eintra:ge in /etc/pf.conf
   hinzugefu:gt werden. Zuna:chst werden die Anker hinzugefu:gt, die der
   Proxy fu:r die FTP-Sitzungen verwendet:

 nat-anchor "ftp-proxy/*"
 rdr-anchor "ftp-proxy/*"

   Dann wird eine pass-Regel beno:tigt, damit der FTP-Datenverkehr durch den
   Proxy geleitet werden kann.

   Die Regeln fu:r Umleitung und NAT mu:ssen vor den eigentlichen
   Filterregeln definiert werden. Fu:gen Sie diese rdr-Regel unmittelbar nach
   der NAT-Regel ein:

 rdr pass on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021

   Zum Schluss muss der umgeleitete Verkehr die Firewall passieren du:rfen:

 pass out proto tcp from $proxy to any port ftp

   $poxy entha:lt die Adresse, an dem der Proxy-Daemon gebunden ist.

   Speichern Sie /etc/pf.conf und laden Sie die Regeln neu. Pru:fen Sie von
   einem Client, ob die FTP-Verbindungen funktionieren:

 # pfctl -f /etc/pf.conf

   Dieses Beispiel umfasst eine Grundkonfiguration, in der die Rechner im
   lokalen Netzwerk Zugriff auf entfernte FTP-Server beno:tigen. Diese
   Konfiguration sollte mit den meisten FTP-Clients und -Servern gut
   funktionieren. Das Verhalten von ftp-proxy(8) kann durch diverse Optionen
   in ftpproxy_flags beeinflusst werden. Einige Clients und Server haben
   bestimmte Marotten, die bei der Konfiguration beru:cksichtigt werden
   mu:ssen. Es kann zum Beispiel notwendig sein, den FTP-Datenverkehr fu:r
   den Proxy einer bestimmten Warteschlange zuzuweisen.

   Es besteht auch die Mo:glichkeit einen FTP-Server mit PF und ftp-proxy(8)
   zu schu:tzen. Konfigurieren Sie einen separaten ftp-proxy mit -R fu:r den
   Reverse-Modus auf einem separaten Port und einer eigenen Umleitungsregel.

    29.3.3.3. ICMP verwalten

   Viele Werkzeuge zur Fehlerbehebung in TCP/IP-Netzwerken verlassen sich auf
   das Internet Control Message Protocol (ICMP), das speziell fu:r diese
   Zwecke entwickelt wurde.

   Das ICMP-Protokoll sendet und empfa:ngt Kontrollnachrichten zwischen
   Rechnern und Gateways, hauptsa:chlich um ungewo:hnliche Bedingungen auf
   dem Weg zum Zielrechner zu berichten. Router verwenden ICMP um
   Paketgro:ssen und andere U:bertragungsparameter zu ermitteln. Dieser
   Prozess ist auch als Path MTU Discovery bekannt.

   Aus der Sicht einer Firewall sind einige ICMP-Kontrollnachrichten
   anfa:llig fu:r bekannte Angriffsmethoden. Zwar ist die Fehlerbehebung
   einfacher, wenn alle ICMP-Pakete bedingungslos durch gelassen werden, aber
   dass macht es auch fu:r Angreifer leichter, Informationen u:ber das
   Netzwerk zu extrahieren. Aus diesen Gru:nden ist die folgende Regel nicht
   optimal:

 pass inet proto icmp from any to any

   Eine Lo:sung besteht darin, nur den ICMP-Verkehr aus dem lokalen Netz zu
   akzeptieren, wa:hrend ICMP-Pakete von ausserhalb des Netzwerks verworfen
   werden:

 pass inet proto icmp from $localnet to any keep state
 pass inet proto icmp from any to $ext_if keep state

   Es stehen noch weitere Optionen zur Verfu:gung, die die Flexibilita:t von
   PF demonstrieren. Anstatt beispielsweise alle ICMP-Nachrichten zu
   erlauben, kann man die Nachrichten angeben, die von ping(8) und
   traceroute(8) verwendet werden. Beginnen Sie damit, ein Makro fu:r diese
   Art von Nachrichten zu definieren:

 icmp_types = "echoreq"

   Erstellen Sie dann eine Regel, die das eben erstellte Makro benutzt:

 pass inet proto icmp all icmp-type $icmp_types keep state

   Wenn weitere Arten von ICMP-Nachrichten beno:tigt werden, kann die Liste
   icmp_types einfach erweitert werden. Geben Sie more
   /usr/src/contrib/pf/pfctl/pfctl_parser.c ein, um eine Liste der von PF
   unterstu:tzten ICMP-Nachrichten zu sehen. Die Webseite
   http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
   entha:lt eine Erkla:rung fu:r jeden Nachrichtentyp.

   Da UNIX(R) traceroute in der Voreinstellung UDP verwendet, wird eine
   weitere Regel beno:tigt:

 # allow out the default range for traceroute(8):
 pass out on $ext_if inet proto udp from any to any port 33433 >< 33626 keep state

   Da TRACERT.EXE unter Microsoft(R) Windows(R)-Systemen ICMP Echo Request
   Meldungen verwendet, ist nur die erste Regel notwendig um Traces fu:r
   solche Systeme zu ermo:glichen. UNIX(R) traceroute kann aber auch andere
   Protokolle verwenden, zum Beispiel ICMP Echo Request, wenn der Schalter -I
   benutzt wird. Details finden Sie in traceroute(8).

      29.3.3.3.1. Path MTU Discovery

   Internet-Protokolle sind so ausgelegt, dass sie gera:teunabha:ngig sind.
   Eine Folge davon ist, dass die optimale Paketgro:sse nicht immer
   zuverla:ssig vorhergesagt werden kann. Das gro:sste Hindernis ist hier die
   Maximum Transmission Unit (MTU), welche die Obergrenze fu:r die
   Paketgro:sse festlegt. Die MTU fu:r die Schnittstelle des Systems ko:nnen
   Sie sich mit ifconfig anzeigen lassen.

   TCP/IP benutzt ein Verfahren, das als path MTU discovery bekannt ist, um
   die korrekte Paketgro:sse fu:r eine Verbindung zu bestimmen. Dieses
   Verfahren sendet Pakete unterschiedlicher Gro:sse mit dem Flag "do not
   fragment" und erwartet ein ICMP-Antwortpaket vom Typ "type 3, code 4",
   wenn die Obergrenze erreicht worden ist. Typ 3 bedeutet "Ziel nicht
   erreichbar" und Code 4 ist die Abku:rzung fu:r "Fragmentierung no:tig,
   aber Do-not-Fragment Flag ist gesetzt". Um path MTU discovery zu erlauben
   und damit Verbindungen zu anderen MTUs zu unterstu:tzen, fu:gen Sie dem
   Makro icmp_types den Typ destination unreachable hinzu:

 icmp_types = "{ echoreq, unreach }"

   Da die pass-Regel bereits das Makro verwendet, braucht es nicht gea:ndert
   werden um den neuen ICMP-Typ zu unterstu:tzen:

 pass inet proto icmp all icmp-type $icmp_types keep state

   PF kann alle Variationen von ICMP-Typen und Codes filtern. Eine Liste der
   verfu:gbaren Typen und Codes ist in icmp(4) und icmp6(4) dokumentiert.

    29.3.3.4. Tabellen benutzen

   Manchmal sind bestimmte Daten fu:r die Filterung und Weiterleitung
   interessant, jedoch wa:re eine Definition einer solchen Filterregel fu:r
   einen Regelsatz viel zu lang. PF unterstu:tzt die Verwendung von Tabellen.
   Dies sind definierte Listen, die vera:ndert werden ko:nnen, ohne den
   gesamten Regelsatz neu laden zu mu:ssen. Zudem ko:nnen diese Listen sehr
   schnell durchsucht werden. Tabellennamen sind immer in < > eingeschlossen
   und sehen wie folgt aus:

 table <clients> { 192.168.2.0/24, !192.168.2.5 }

   In diesem Beispiel ist das Netzwerk 192.168.2.0/24 Teil der Tabelle.
   192.168.2.5 wurde im dem Operator ! ausgeschlossen und ist somit nicht
   Teil der Tabelle. Es ist auch mo:glich Tabellen aus Dateien zu laden, wo
   jeder Eintrag in einer separaten Zeile steht. Dieses Beispiel verwendet
   dazu die Datei /etc/clients:

 192.168.2.0/24
 !192.168.2.5

   Um sich auf diese Datei zu beziehen, definieren Sie die Tabelle wie folgt:

 table <clients> persist file "/etc/clients"

   Sobald die Tabelle definiert ist, kann eine Filterregel Bezug darauf
   nehmen:

 pass inet proto tcp from <clients> to any port $client_out flags S/SA keep state

   Die Inhalte einer Tabelle ko:nnen mit pfctl direkt vera:ndert werden.
   Dieses Beispiel fu:gt ein weiteres Netzwerk zur Tabelle hinzu:

 # pfctl -t clients -T add 192.168.1.0/16

   Beachten Sie, dass auf diese Weise vorgenommene A:nderungen direkt
   u:bernommen werden, jedoch bei einem Neustart des Systems oder bei einem
   Stromausfall verloren gehen. Um die A:nderungen dauerhaft zu speichern,
   mu:ssen sie in der Definition der Tabelle oder in der Datei, auf die sich
   die Tabelle bezieht, bearbeitet werden. Mit einem cron(8) Job und einem
   Befehl wie pfctl -t clients -T show >/etc/clients ko:nnen Sie auch eine
   Kopie der Tabelle auf Platte speichern und dann in regelma:ssigen
   Absta:nden aktualisieren. Alternativ kann /etc/clients auch mit den
   Tabelleneintra:gen, die sich aktuell im Speicher befinden, aktualisiert
   werden.

 # pfctl -t clients -T replace -f /etc/clients

    29.3.3.5. Verwendung von Tabellen zum Schutz von SSH

   Benutzer, die SSH auf einer externen Schnittstelle ausfu:hren, haben
   wahrscheinlich schon einmal a:hnliche Meldungen in den Protokolldateien
   gesehen:

 Sep 26 03:12:34 skapet sshd[25771]: Failed password for root from 200.72.41.31 port 40992 ssh2
 Sep 26 03:12:34 skapet sshd[5279]: Failed password for root from 200.72.41.31 port 40992 ssh2
 Sep 26 03:12:35 skapet sshd[5279]: Received disconnect from 200.72.41.31: 11: Bye Bye
 Sep 26 03:12:44 skapet sshd[29635]: Invalid user admin from 200.72.41.31
 Sep 26 03:12:44 skapet sshd[24703]: input_userauth_request: invalid user admin
 Sep 26 03:12:44 skapet sshd[24703]: Failed password for invalid user admin from 200.72.41.31 port 41484 ssh2

   Diese Meldungen deuten auf einen Brute-Force-Angriff hin, bei dem ein
   Angreifer oder ein Programm versucht, den Benutzernamen und das Passwort
   zu erraten, um Zugriff auf das System zu bekommen.

   Wenn der Zugriff u:ber SSH fu:r berechtigte Benutzer erforderlich ist,
   kann eine A:nderung des Standard-Ports fu:r SSH einen gewissen Schutz
   bieten. Allerdings bietet PF eine elegantere Lo:sung fu:r dieses Problem.
   pass-Regeln ko:nnen Einschra:nkungen fu:r Dinge enthalten, die ein
   verbindender Rechner tun kann. Bei einem Verstoss gegen diese
   Einschra:nkungen kann dann dem betroffenen Rechner der Zugriff teilweise
   oder ganz entzogen werden. Es ist sogar mo:glich, alle bestehenden
   Verbindungen zu trennen, falls die Grenze u:berschritten wird.

   Um dies zu konfigurieren, erstellen Sie folgende Tabelle im Regelsatz:

 table <bruteforce> persist

   Fu:gen Sie dann ziemlich am Anfang der Filterregeln folgende Regeln hinzu,
   um die Brute-Force-Angriffe zu blocken und gleichzeitig berechtigte
   Verbindungen zu erlauben:

 block quick from <bruteforce>
 pass inet proto tcp from any to $localnet port $tcp_services \
     flags S/SA keep state \
     (max-src-conn 100, max-src-conn-rate 15/5, \
     overload <bruteforce> flush global)

   Der Teil in Klammern definiert die Grenzwerte. Die Zahlen sollten an die
   lokalen Anforderungen angepasst werden. Die Zeilen ko:nnen wie folgt
   interpretiert werden:

   max-src-conn definiert die maximal erlaubte Anzahl gleichzeitiger
   Verbindungen von einem Rechner.

   max-src-conn-rate definiert die maximal erlaubte Anzahl neuer Verbindungen
   eines einzelnen Rechners (15) pro Anzahl von Sekunden (5).

   overload <bruteforce> bedeutet, dass jeder Rechner, der diesen Grenzwert
   u:berschreitet, zur Tabelle bruteforce hinzugefu:gt wird. Diese
   Filterregel blockiert jeglichen Datenverkehr von Adressen aus der Tabelle
   bruteforce.

   flush global besagt, dass alle (global) Verbindungen dieses Rechners
   getrennt (flush) werden, wenn der Grenzwert erreicht wird.

  Anmerkung:

   Diese Filterregeln helfen nicht bei langsamen Brute-Force-Angriffen, wie
   sie in http://home.nuug.no/~peter/hailmary2013/ beschrieben sind.

   Dieser Beispielregelsatz dient lediglich als Illustration. Wenn Sie
   allgemein eine grosse Anzahl an Verbindungen erlauben wollen, aber
   gleichzeitig bei SSH etwas restriktiver vorgehen mo:chten, ko:nnen Sie die
   obige Regel erga:nzen:

 pass quick proto { tcp, udp } from any to any port ssh \
     flags S/SA keep state \
     (max-src-conn 15, max-src-conn-rate 5/3, \
     overload <bruteforce> flush global)

  Es ist mo:glicherweise nicht notwendig, alle aggressiven Rechner zu
  blockieren:

   Es ist zu erwa:hnen, dass der overlaod-Mechanismus eine allgemeine Technik
   darstellt, die nicht auf SSH beschra:nkt ist. Ausserdem ist es nicht immer
   optimal, Datenverkehr von aggressiven Rechnern zu blockieren.

   Eine overload-Regel kann beispielsweise benutzt werden, um einen Mail-
   oder Webserver zu schu:tzen. Die overload-Tabelle ko:nnte dann in einer
   Regel verwendet werden, um aggressive Rechner einer Warteschlange mit
   geringerer Bandbreite zuzuweisen, oder den Rechner auf eine bestimtme
   Webseite umzuleiten.

   Im Laufe der Zeit werden die Tabellen durch die overload-Regeln immer
   gro:sser und belegen immer mehr Speicher. Manchmal wird eine geblockte
   IP-Adresse einem Rechner dynamisch zugewiesen, der eigentlich berechtigt
   ist, mit den Rechnern im lokalen Netzwerk zu kommunizieren.

   Fu:r solche Situationen bietet pfctl die Mo:glichkeit, Tabelleneintra:ge
   auslaufen zu lassen. Dieses Kommando wu:rde beispielsweise Eintra:ge aus
   der Tabelle <bruteforce> lo:schen, die seit 86400 Sekunden nicht mehr
   referenziert wurden:

 # pfctl -t bruteforce -T expire 86400

   Eine a:hnliche Funktionalita:t bietet security/expiretable, welches
   Eintra:ge entfernt, die fu:r einen bestimmten Zeitraum nicht referenziert
   wurden.

   Nach der Installation kann expiretable benutzt werden, um Eintra:ge aus
   der Tabelle <bruteforce> nach einer bestimmten Zeit zu entfernen. Dieses
   Beispiel entfernt alle Eintra:ge, die a:lter sind als 24 Stunden:

 /usr/local/sbin/expiretable -v -d -t 24h bruteforce

    29.3.3.6. Schutzt vor SPAM

   Im Gegensatz zum spamd-Daemon von spamassassin, kann mail/spamd zusammen
   mit PF den SPAM direkt an der Firewall abwehren. Dieser spamd wird in PF
   u:ber einen Satz von Umleitungen konfiguriert.

   Spammer neigen dazu, eine grosse Anzahl von Nachrichten zu versenden.
   Dabei nutzten Sie SPAM-freundliche Netzwerke und gekaperte Rechner, welche
   dann ziemlich schnell bei sogenannten Blacklists gemeldet werden.

   Wenn eine SMTP-Verbindung von einer Adresse in der Blacklist empfangen
   wird, pra:sentiert spamd einen Banner und schaltet sofort in einen Modus,
   in dem die Antworten auf den SMTP-Verkehr jeweils ein Byte gross sind.
   Diese Technik, die mo:glichst viel Zeit des Spammers verschwenden soll,
   wird Tarpitting genannt. Die spezifische Implementierung, welche ein Byte
   SMTP-Antworten verwendet, wird als Stuttering bezeichnet.

   Dieses Beispiel zeigt das grundlegende Verfahren zur Konfiguration von
   spamd mit automatisch aktualisierten Blacklists. Fu:r weitere
   Informationen lesen die Manualpages, die zusammen mit mail/spamd
   installiert werden.

   Prozedur 29.1. Konfiguration von spamd
    1. Installieren Sie das Paket oder den Port mail/spamd. Um spamd's
       Greylisting-Funktion zu nutzen, muss fdescfs(5) in /dev/fd eingeha:ngt
       werden. Fu:gen Sie folgende Zeile in /etc/fstab ein:

 fdescfs /dev/fd fdescfs rw 0 0

       Danach ha:ngen Sie das Dateisystem ein:

 # mount fdescfs

    2. Fu:gen Sie folgende Zeilen in den PF-Regelsatz ein:

 table <spamd> persist
 table <spamd-white> persist
 rdr pass on $ext_if inet proto tcp from <spamd> to \
     { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025
 rdr pass on $ext_if inet proto tcp from !<spamd-white> to \
     { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025

       Die beiden Tabellen <spamd> und <spam-white> sind von grosser
       Bedeutung. SMTP-Verkehr von einer Adresse, die in <spamd> aber nicht
       in <spamd-white> ist, wird an den spamd-Daemon auf Port 8025
       umgeleitet.

    3. Im na:chsten Schritt wird spamd in /usr/local/etc/spamd.conf
       konfiguriert und einige Parameter werden in /etc/rc.conf hinzugefu:gt.

       Die Installation von mail/spamd entha:lt eine Beispielkonfiguration
       (/usr/local/etc/spamd.conf.sample) und eine Manualpage fu:r
       spamd.conf. Beziehen Sie sich fu:r zusa:tzliche Konfigurationsoptionen
       auf diese Dokumentation.

       Die Konfigurationsdatei entha:lt einen Block, in dem die all-Liste
       definiert ist, die wiederum weitere Listen spezifiziert:

 all:\
     :traplist:whitelist:

       Dieser Eintrag fu:gt die gewu:nschten Blacklists, getrennt durch einen
       Doppelpunkt (:), hinzu. Um auch eine Whitelist zu verwenden, fu:gen
       Sie den Namen unmittelbar hinter dem Namen der Blacklist ein. Zum
       Beispiel: :Blacklist:Whitelist:.

       Danach folgt die Definition der verwendeten Blacklist:

 traplist:\
     :black:\
     :msg="SPAM. Your address %A has sent spam within the last 24 hours":\
     :method=http:\
     :file=www.openbsd.org/spamd/traplist.gz

       In der ersten Zeile steht der Name der Blacklist und die zweite Zeile
       gibt den Typ an. Das Feld msg entha:lt die Nachricht, die dem Absender
       wa:hrend des SMTP-Dialogs angezeigt wird. Das Feld mehtod legt fest,
       wie spamd-setup die Listen bezieht; unterstu:tzte Methoden sind http,
       ftp, file und ein externes Programm via exec. Im letzten Feld gibt
       file den Namen der Datei an, die spamd erwartet.

       Die Definition der Whitelist ist a:hnlich. Das Feld msg wird jedoch
       nicht definiert, da eine Meldung hier nicht erforderlich ist:

 whitelist:\
     :white:\
     :method=file:\
     :file=/var/mail/whitelist.txt

  Wa:hlen Sie die Datenquellen mit Sorgfalt::

       Bei der Verwendung von sa:mtlichen Blacklists aus der Beispieldatei
       spamd.conf wu:rden grosse Teile des Internets geblockt. Der
       Administrator muss diese Datei bearbeiten, um eine optimale
       Konfiguration zu erzielen. Dazu geho:rt auch die Auswahl von
       geeigneten Blacklists und, wenn no:tig, die Erstellung von
       benutzerdefinierten Listen.

       Als na:chstes fu:gen Sie folgenden Eintrag in /etc/rc.conf hinzu.
       Zusa:tzliche Optionen sind in der Manualpage beschrieben:

 spamd_flags="-v" # use "" and see spamd-setup(8) for flags

       Wenn Sie fertig sind, starten Sie spamd durch die Eingabe von service
       obspamd start. Fu:hren Sie die weitere Konfiguration mit spamd-setup
       durch. Erstellen Sie zum Schluss einen cron(8)-Job, der spamd-setup in
       regelma:ssigen Absta:nden aufruft, um die Listen zu aktualisieren.

   Auf einem typischen Gateway vor dem Mailserver, werden Rechner innerhalb
   von wenigen Minuten geblockt.

   PF unterstu:tzt auch Greylisting, das Nachrichten von unbekannten Rechnern
   voru:bergehend mit 45n-Codes ablehnt. Nachrichten von diesen Rechnern
   werden bei einem erneuten Versuch nach einer angemessenen Zeit
   durchgelassen. Nachrichten von Rechnern, die nach RFC 1123 und RFC 2821
   konfiguriert sind, werden sofort durchgelassen.

   Weitere Informationen u:ber Greylisting finden Sie unter greylisting.org.
   Das Erstaunlichste an Greylisting ist, neben der einfachen Benutzung, dass
   es immer noch funktioniert. Spammer und Malware-Autoren gelingt es bislang
   nur schwer, diese Technik zu umgehen.

   Die grundsa:tzliche Vorgehensweise zur Konfiguration von Greylisting ist
   wie folgt:

   Prozedur 29.2. Konfiguration von Greylisting
    1. Stellen Sie sicher, dass fdescfs(5) eingeha:ngt ist. Dies wird in
       Schritt 1 der vorherigen Prozedur beschrieben.

    2. Um spamd im Greylisting-Modus auszufu:hren, fu:gen Sie folgende Zeilen
       in /etc/rc.conf ein:

 spamd_grey="YES"  # use spamd greylisting if YES

       Lesen Sie die Manualpage von spamd fu:r Beschreibungen von
       zusa:tzlichen Parametern.

    3. Starten Sie die Dienste, um die Konfiguration von Greylisting
       abzuschliessen:

 # service obspamd restart
 # service spamlogd start

   Hinter den Kulissen fu:hren die spamdb-Datenbank und spamlogd wesentliche
   Aufgaben der Greylisting-Funktion aus. spamdb ist die Schnittstelle fu:r
   den Administrator, der u:ber den Inhalt der Datenbank /var/db/spamdb
   Blaklists, Whitelists und Greylists verwaltet.

    29.3.3.7. Netzwerk-Hygiene

   Dieser Abschnitt beschreibt die Verwendung von block-policy, scrub und
   antispoof, mit denen das Verhalten des Regelsatzes weiter optimiert werden
   kann.

   Die Option block-policy kann im Teil options des Regelwerks konfiguriert
   werden, vor den Umleitungen und den eigentlichen Filterregeln. Diese
   Option legt fest, welche Ru:ckmeldung PF an einen geblockten Rechner
   sendet. Es existieren zwei mo:gliche Werte: drop verwirft das Paket ohne
   Ru:ckmeldung und return gibt eine Statusmeldung, wie etwa Connection
   refused zuru:ck.

   Die Voreinstellung ist drop. Geben Sie den gewu:nschten Wert ein, um die
   block-policy-Richtlinie zu a:ndern:

 set block-policy return

   scrub ist ein Schlu:sselwort in PF, das die Paket-Normalisierung
   aktiviert. Dieser Prozess fu:gt fragmentierte Pakete wieder zusammen und
   blockt TCP-Pakete mit ungu:ltigen Flag-Kombinationen. Ein aktiviertes
   scrub bietet einen gewissen Schutz gegen Angriffe, die auf die falsche
   Handhabung von fragmentierten Paketen aufbauen. Es stehen viele Optionen
   zur Verfu:gung, jedoch sollte die einfachste Form fu:r die meisten
   Konfigurationen ausreichend sein:

 scrub in all

   Einige Dienste, wie beispielsweise NFS, erfordern eine bestimmte
   Handhabung von fragmentierten Paketen. Weitere Informationen finden Sie
   unter https://home.nuug.no/~peter/pf/en/scrub.html.

   Dieses Beispiel fu:gt fragmentierte Pakete wieder zusammen, lo:scht das
   "do not fragment"-Bit und setzt die maximale Segmentgro:sse auf 1440
   Bytes:

 scrub in all fragment reassemble no-df max-mss 1440

   Der antispoof-Mechanismus bietet einen Schutz gegen gefa:lschte
   IP-Adressen. Dabei werden hauptsa:chlich Pakete verworfen, die auf der
   falschen Schnittstellen ankommen.

   Folgende Regeln verwerfen gefa:lschte Adressen, wenn sie aus dem Internet
   oder dem lokalen Netzwerk stammen:

 antispoof for $ext_if
 antispoof for $int_if

    29.3.3.8. Handhabung von nicht-routebaren Adressen

   Sogar bei einem richtig konfigurierten NAT-Gateway mu:ssen Sie vielleicht
   die Fehlkonfiguration anderer Personen ausgleichen. Ein typischer Fehler
   besteht darin, nicht-routebare Adressen ins Internet zu lassen. Da der
   Verkehr von nicht-routebaren Adressen Teil eines DoS-Angriffs sein kann,
   sollten Sie in Betracht ziehen, diesen Verkehr explizit an der externen
   Schnittstelle des Netzwerks zu blockieren.

   In diesem Beispiel wird ein Makro erstellt, das die nicht-routebaren
   Adressen entha:lt. Datenverkehr von und zu diesen Adressen wird dann an
   der externen Schnittstelle des Gateways verworfen.

 martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
               10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
               0.0.0.0/8, 240.0.0.0/4 }"

 block drop in quick on $ext_if from $martians to any
 block drop out quick on $ext_if from any to $martians

29.4. IPFW

   IPFW ist eine Stateful-Firewall fu:r FreeBSD, die sowohl IPv4 als auch
   IPv6 unterstu:tzt. Die Firewall setzt sich aus mehreren Komponenten
   zusammen: dem Kernel Firewall Filter-Prozessor mit integriertem
   Paket-Accounting, Protokollfunktionen, NAT, dem dummynet(4)
   Traffic-Shaper, sowie Weiterleitungs-, Bridge- und ipstealth-Funktionen.

   FreeBSD entha:lt mit /etc/rc.firewall ein Beispielregelwerk, welches
   mehrere Firewall-Typen fu:r gebra:uchliche Szenarien definiert und
   unerfahrene Anwender dabei unterstu:tzen soll, ein geeignetes Regelwerk zu
   erstellen. IPFW besitzt eine leistungsstarke Syntax, mit der erfahrene
   Benutzer ihre eigenen Regeln anfertigen ko:nnen, um den
   Sicherheitsanforderungen der jeweiligen Umgebung gerecht zu werden.

   Diser Abschnitt beschreibt, wie IPFW aktiviert wird und bietet einen
   U:berblick u:ber die Regelsyntax. Zudem werden mehrere Regelsa:tze fu:r
   gebra:uchliche Konfigurationsszenarien vorgestellt.

  29.4.1. IPFW aktivieren

   Das FreeBSD Basissystem entha:lt fu:r IPFW ein ladbares Kernelmodul, was
   bedeutet, dass kein angepasster Kernel beno:tigt wird, um IPFW zu
   benutzen.

   Wenn Sie eine statische Unterstu:tzung fu:r IPFW in den Kernel kompilieren
   wollen, lesen Sie Kapitel 8, Konfiguration des FreeBSD-Kernels. Folgende
   Optionen ko:nnen in der Kernelkonfigurationsdatei verwendet werden:

 options    IPFIREWALL                   # enables IPFW
 options    IPFIREWALL_VERBOSE           # enables logging for rules with log keyword
 options    IPFIREWALL_VERBOSE_LIMIT=5   # limits number of logged packets per-entry
 options    IPFIREWALL_DEFAULT_TO_ACCEPT # sets default policy to pass what is not explicitly denied
 options    IPDIVERT                     # enables NAT

   Um IPFW beim Systemstart zu aktivieren, fu:gen Sie folgende Zeile in
   /etc/rc.conf ein:

 firewall_enable="YES"

   Wenn Sie einen der von FreeBSD zur Verfu:gung gestellten Firewall-Profile
   benutzen mo:chten, fu:gen Sie eine weitere Zeile hinzu, in der Sie das
   Profil bestimmen:

 firewall_type="open"

   Folgende Profile stehen zur Verfu:gung:

     * open: gestattet jeglichen Datenverkehr.

     * client: schu:tzt lediglich diesen Rechner.

     * simple: schu:tzt das gesamte Netzwerk.

     * closed: blockiert den gesamten IP-Datenverkehr, mit Ausnahme des
       Verkehrs u:ber die Loopback-Schnittstelle.

     * workstation: schu:tzt lediglich diesen Rechner und verwendet
       zustandsorientierte Regeln.

     * UNKNOWN: deaktiviert das Laden von Firewallregeln.

     * filename: absoluter Pfad zu einer Datei, in der die Firewallregeln
       definiert sind.

   Wenn Sie firewall_type auf client oder simple setzen, mu:ssen Sie die
   voreingestellten Regeln in /etc/rc.firewall anpassen, damit sie der
   Konfiguration des Systems entsprechen.

   Beachten Sie, dass das Profil filename verwendet wird, um ein
   benutzerdefiniertes Regelwerk zu laden.

   Eine alternative Mo:glichkeit, um ein benutzerdefiniertes Regelwerk zu
   laden, bietet die Variable firewall_script. Setzen Sie die Variable auf
   den absoluten Pfad eines ausfu:hrbaren Skripts, welches die Befehle fu:r
   IPFW entha:lt. Die Beispiele in diesem Abschnitt gehen davon aus, dass
   firewall_script auf /etc/ipfw.rules gesetzt ist.

 firewall_script="/etc/ipfw.rules"

   Die Protokollierung wird mit diesem Eintrag aktiviert:

 firewall_logging="YES"

   Es existiert keine Variable fu:r /etc/rc.conf, um die Protokollierung zu
   begrenzen. Um die Anzahl der Protokoll-Nachrichten pro Verbindungsversuch
   zu begrenzen, legen Sie die Anzahl der Eintra:ge in /etc/sysctl.conf fest:

 net.inet.ip.fw.verbose_limit=5

   Nachdem Sie die A:nderungen gespeichert haben, ko:nnen Sie die Firewall
   starten. Um auch die Anzahl der Protokoll-Nachrichten zu konfigurieren,
   setzen Sie mit sysctl den gewu:nschten Wert:

 # service firewall start
 # sysctl net.inet.ip.fw.verbose_limit=5

  29.4.2. IPFW Regel-Syntax

   Wenn ein Paket die Firewall "betritt", also von der Firewall gepru:ft und
   verarbeitet wird, wird die erste Regel des Regelwerkes auf das Paket
   angewandt. Auf diese Weise wird in aufsteigender Reihenfolge der
   Regelnummer mit allen weiteren Regeln verfahren. Falls die
   Selektionsparameter einer Regel auf ein Paket zutreffen, wird das
   Aktionsfeld der Regel ausgefu:hrt und die Pru:fung des Pakets beendet,
   nachfolgende Regeln werden also nicht mehr gepru:ft. Diese Suchmethode
   wird als "erster Treffer gewinnt" bezeichnet. Falls keine Regel auf das
   betreffende Paket zutrifft, wird die obligatorische IPFW-Ru:ckfallregel
   mit der Nummer 65535 angewendet und das Paket wird ohne Ru:ckantwort
   verworfen. Wenn das Paket jedoch einer Regel mit dem Schlu:sselwort count,
   skipto oder tee entspricht, wird die Pru:fung des Pakets weiter
   fortgefu:hrt. Weitere Details daru:ber, wie diese Schlu:sselwo:rter die
   Regelverarbeitung beeinflussen, finden Sie in ipfw(8).

   Bei der Erstellung der IPFW-Regeln mu:ssen die Schlu:sselwo:rter in der
   folgenden Reihenfolge geschrieben werden. Einige Schlu:sselwo:rter mu:ssen
   zwingend angegeben werden, wa:hrend andere optional sind. Die Wo:rter in
   Grossbuchstaben repra:sentieren Variablen und die Wo:rter in
   Kleinbuchstaben mu:ssen den Variablen vorangestellt werden. Das Zeichen #
   wird benutzt, um einen Kommentar einzuleiten und kann am Ende einer Regel
   oder in einer eigenen Zeile stehen. Leerzeilen werden ignoriert.

   CMD RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from SRC
   SRC_PORT to DST DST_PORT OPTIONS

   Dieser Abschnitt bietet einen U:berblick u:ber diese Schlu:sselwo:rter und
   deren Optionen. Es ist keine vollsta:ndige Liste aller verfu:gbaren
   Optionen. Eine vollsta:ndige Beschreibung der Regel-Syntax, die Sie
   verwenden ko:nnen um IPFW-Regeln zu erstellen, finden Sie in ipfw(8).

   CMD

           Jede Regel muss mit ipfw add beginnen.

   RULE_NUMBER

           Jede Regel geho:rt zu einer Nummer zwischen 1 und 65534. Die
           Nummer wird verwendet, um die Reihenfolge der Regelverarbeitung zu
           kennzeichnen. Es ist mo:glich, dass mehrere Regeln dieselbe Nummer
           haben. In diesem Fall werden sie entsprechend der Reihenfolge
           angewendet, in der sie aufgenommen wurden.

   SET_NUMBER

           Jede Regel ist einer Set-Nummer zwischen 0 und 31 zugeordnet. Sets
           ko:nnen einzeln aktiviert oder deaktiviert werden. Dies macht es
           mo:glich, eine Reihe von Regeln schnell hinzuzufu:gen oder zu
           lo:schen. Wenn SET_NUMBER nicht angegeben ist, wird die Regel zu
           Set 0 hinzugefu:gt.

   ACTION

           Eine Regel kann mit einer der folgenden Aktionen verknu:pft
           werden. Die festgelegte Aktion wird ausgefu:hrt, wenn das Paket
           den Selektionskriterien der Regel entspricht.

           allow | accept | pass | permit: All diese Aktionen sind
           gleichbedeutend und erlauben Pakete, die mit der Regel
           u:bereinstimmen.

           check-state: Diese Aktion u:berpru:ft die Regel in der dynamischen
           Zustandstabelle. Bei einer U:bereinstimmung wird die mit der
           dynamischen Regel verknu:pfte Aktion ausgefu:hrt, andernfalls wird
           mit der Pru:fung gegen die na:chste Regel fortgefahren. Die Regel
           check-state hat selbst kein Selektionskriterium. Sollte keine
           check-state-Regel im Regelwerk vorhanden sein, wird die dynamische
           Zustandstabelle beim ersten Vorkommen einer keep-state- oder
           limit-Regel u:berpru:ft.

           count: Aktualisiert die Za:hler fu:r alle Pakete, die mit dieser
           Regel u:bereinstimmen. Die Pru:fung wird mit der na:chsten Regel
           fortgesetzt.

           deny | drop: Diese Aktionen sind gleichbedeutend und verwerfen
           Pakete, die mit dieser Regel u:bereinstimmen.

           Es stehen noch weitere Aktionen zur Verfu:gung. Einzelheiten
           finden Sie in ipfw(8).

   LOG_AMOUNT

           Erfu:llt ein Paket die Selektionskriterien mit dem Schlu:sselwort
           log, wird dies von syslogd(8) mit der Annotation SECURITY
           protokolliert. Dies erfolgt allerdings nur, wenn die Anzahl der
           protokollierten Pakete der betreffenden Regel die definierte
           LOG_AMOUNT-Grenze nicht u:bersteigt. Wenn LOG_AMOUNT nicht
           definiert ist, wird die Grenze aus dem Wert von
           net.inet.ip.fw.verbose_limit benutzt. Ein Wert von 0 bedeutet eine
           unbegrenzte Protokollierung. Wird eine definierte Grenze erreicht,
           wird die Protokollierung fu:r diese Regel deaktiviert. Um die
           Protokollierung zu reaktivieren, ko:nnen Sie den Protokoll- oder
           Paketza:hler mit ipfw resetlog zuru:cksetzen.

  Anmerkung:

           Die Protokollierung findet statt, nachdem alle Selektionskriterien
           gepru:ft und bevor die endgu:ltige Aktion auf das Paket angewendet
           wird. Der Administrator entscheidet, welche Regel protokolliert
           werden soll.

   PROTO

           Dieser optionale Wert wird verwendet, um einen beliebigen
           Protokollnamen oder -nummer aus /etc/protocols gegen das Paket zu
           pru:fen.

   SRC

           Nach dem Schlu:sslwortfrom muss die Quelladresse stehen, oder ein
           Schlu:sselwort, das die Quelladresse darstellt. Eine Adresse wird
           dargestellt duch any, me (jede Adresse dieses Systems), me6 (jede
           IPv6-Adresse dieses Systems), oder table gefolgt von der Nummer
           der Tabelle, welche die Adressen entha:lt. IP-Adressen ko:nnen in
           CIDR-Notation geschrieben werden. Beispielsweise 1.2.3.4/25 oder
           1.2.3.4:255.255.255.128.

   SRC_PORT

           Optional kann ein Quellport u:ber eine Nummer oder einen Namen aus
           /etc/services spezifiziert werden.

   DST

           Nach dem Schlu:sselwort to muss die Zieladresse stehen, oder ein
           Schlu:sselwort, das die Zieladresse darstellt. Es ko:nnen die
           gleichen Schlu:sselwo:rter und Adressen benutzt werden, die
           bereits im SRC-Abschnitt beschrieben wurden.

   DST_PORT

           Optional kann ein Zielport u:ber eine Nummer oder einen Namen aus
           /etc/services spezifiziert werden.

   OPTIONS

           Nach der Quell- und Zieladresse ko:nnen noch weitere Optionen
           angegeben werden. Wie der Name bereits sagt, sind OPTIONS
           optional. Ha:ufig verwendete Optionen sind in oder out, mit denen
           die Richtug des Pakets bestimmt wird, icmptypes gefolgt vom Typ
           der ICMP-Nachricht, sowie keep-state.

           Wenn ein Paket auf eine keep-state-Regel zutrifft, wird die
           Firewall eine dynamische Regel erstellen, die dem bidirektionalen
           Datenverkehr zwischen den gleichen Quell- und Zieladressen mit dem
           gleichen Protokoll entspricht.

           Dynamische Regeln sind fu:r einen sogenannten SYN-flood-Angriff
           anfa:llig, bei dem eine riesige Anzahl an dynamischen Regeln
           erzeugt wird. Verwenden Sie die Option limit, um einen solchen
           Angriff entgegenzuwirken. Diese Option begrenzt die Anzahl der
           gleichzeitig mo:glichen Sitzungen. Es handelt sich dabei um einen
           Za:hler, der die Anzahl von dynamischen Regeln in Kombination mit
           der Quelladresse verfolgt. U:bersteigt der Za:hler den durch limit
           definierten Wert, wird das Paket verworfen.

           Es stehen noch viele weitere Optionen zur Verfu:gung. ipfw(8)
           entha:lt eine Beschreibung der einzelnen Optionen.

  29.4.3. Beispiel fu:r einen Regelsatz

   Dieser Abschnitt die Erstellung eines Firewall-Skripts namens
   /etc/ipfw.rules mit zustandsorientierten (stateful Regeln. Alle Regeln in
   diesem Beispiel verwenden die Optionen in und out, um die Richtung des
   Pakets zu verdeutlichen. Zusa:tzlich wird via interface-name benutzt, um
   die Schnittstelle fu:r das Paket zu pru:fen.

  Anmerkung:

   Bei den anfa:nglichen Tests mit dem Firewall-Regelsatz sollten Sie
   vielleicht folgende Einstellung vornehmen:

 net.inet.ip.fw.default_to_accept="1"

   Dies legt die Standardregel von ipfw(8) etwas grosszu:giger fest, als das
   voreingestellte default deny ip from any to any. Dadurch sinkt die Gefahr,
   sich nach einem Neustart des Systems auszusperren.

   Das Firewall-Skript beginnt mit einem Hinweis, dass es sich um ein Bourne
   Shell-Skript handelt. Danach werden alle vorhandenen Filterregeln
   gelo:scht. Anschliessend wird die Variable cmd erstellt, sodass ipfw add
   nicht jedes mal von Hand eingegeben werden muss. Die Variable pif
   repra:sentiert die mit dem Internet verbundene Schnittstelle.

 #!/bin/sh
 # Flush out the list before we begin.
 ipfw -q -f flush

 # Set rules command prefix
 cmd="ipfw -q add"
 pif="dc0"     # interface name of NIC attached to Internet

   Jetzt folgen die eigentlichen Filterregeln. Diese ersten beiden Regeln
   erlauben den Datenverkehr aus dem internen Netzwerk und u:ber die
   Loopback-Schnittstelle:

 # Change xl0 to LAN NIC interface name
 $cmd 00005 allow all from any to any via xl0

 # No restrictions on Loopback Interface
 $cmd 00010 allow all from any to any via lo0

   Die na:chste Regel erlaubt Pakete, fu:r die ein Eintrag in der dynamischen
   Zustandstabelle existiert:

 $cmd 00101 check-state

   Die na:chsten Regeln definieren, welche internen Rechner Verbindungen zu
   anderen Rechnern im Internet aufbauen du:rfen. Hier werden wieder
   zustandsorientierte Regeln verwendet:

 # Allow access to public DNS
 # Replace x.x.x.x with the IP address of a public DNS server
 # and repeat for each DNS server in /etc/resolv.conf
 $cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
 $cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state

 # Allow access to ISP's DHCP server for cable/DSL configurations.
 # Use the first rule and check log for IP address.
 # Then, uncomment the second rule, input the IP address, and delete the first rule
 $cmd 00120 allow log udp from any to any 67 out via $pif keep-state
 #$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state

 # Allow outbound HTTP and HTTPS connections
 $cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
 $cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state

 # Allow outbound email connections
 $cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
 $cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state

 # Allow outbound ping
 $cmd 00250 allow icmp from any to any out via $pif keep-state

 # Allow outbound NTP
 $cmd 00260 allow udp from any to any 123 out via $pif keep-state

 # Allow outbound SSH
 $cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state

 # deny and log all other outbound connections
 $cmd 00299 deny log all from any to any out via $pif

   Die folgenden Regeln steuern die Verbindungen von Rechern aus dem Internet
   ins interne Netzwerk. Zuerst werden Pakete verworfen, die typischerweise
   im Zusammenhang mit Angriffen stehen. Danach werden bestimmte Arten von
   Verbindungen erlaubt. Alle Dienste aus dem o:ffentlichen Internet
   beinhalten die Option limit, um Flooding zu unterbinden.

 # Deny all inbound traffic from non-routable reserved address spaces
 $cmd 00300 deny all from 192.168.0.0/16 to any in via $pif     #RFC 1918 private IP
 $cmd 00301 deny all from 172.16.0.0/12 to any in via $pif      #RFC 1918 private IP
 $cmd 00302 deny all from 10.0.0.0/8 to any in via $pif         #RFC 1918 private IP
 $cmd 00303 deny all from 127.0.0.0/8 to any in via $pif        #loopback
 $cmd 00304 deny all from 0.0.0.0/8 to any in via $pif          #loopback
 $cmd 00305 deny all from 169.254.0.0/16 to any in via $pif     #DHCP auto-config
 $cmd 00306 deny all from 192.0.2.0/24 to any in via $pif       #reserved for docs
 $cmd 00307 deny all from 204.152.64.0/23 to any in via $pif    #Sun cluster interconnect
 $cmd 00308 deny all from 224.0.0.0/3 to any in via $pif        #Class D & E multicast

 # Deny public pings$
 $cmd 00310 deny icmp from any to any in via $pif$
 $
 # Deny ident$
 $cmd 00315 deny tcp from any to any 113 in via $pif$
 $
 # Deny all Netbios services.$
 $cmd 00320 deny tcp from any to any 137 in via $pif$
 $cmd 00321 deny tcp from any to any 138 in via $pif$
 $cmd 00322 deny tcp from any to any 139 in via $pif$
 $cmd 00323 deny tcp from any to any 81 in via $pif$

 # Deny fragments
 $cmd 00330 deny all from any to any frag in via $pif

 # Deny ACK packets that did not match the dynamic rule table
 $cmd 00332 deny tcp from any to any established in via $pif

 # Allow traffic from ISP's DHCP server.
 # Replace x.x.x.x with the same IP address used in rule 00120.
 #$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state

 # Allow HTTP connections to internal web server
 $cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2

 # Allow inbound SSH connections
 $cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2

 # Reject and log all other incoming connections
 $cmd 00499 deny log all from any to any in via $pif

   Die letzte Regel protokolliert alle Pakete, die mit keiner Regel im
   Regelsatz u:bereinstimmen:

 # Everything else is denied and logged
 $cmd 00999 deny log all from any to any

  29.4.4. NAT Konfiguration

   Beigetragen von Chern Lee.

   FreeBSDs integrierter NAT-Daemon, natd(8), arbeitet in Verbindung mit
   IPFW, um Network Address Translation bereitzustellen. NAT wird verwendet,
   um mehreren internen Rechnern, u:ber eine einzige IP-Adresse, eine
   gemeinsame Verbindung zum Internet zu ermo:glichen.

   Um dies zu tun, muss der mit dem Internet verbundene FreeBSD-Rechner als
   Gateway eingerichtet sein. Das System muss u:ber zwei
   Netzwerkschnittstellen verfu:gen, wobei eine Schnittstelle mit dem
   Internet verbunden ist und die andere mit dem internen Netzwerk. Jeder
   Rechner im internen Netzwerk sollte eine RFC 1918 konforme Adresse
   zugewiesen bekommen. Zudem muss das Standard-Gateway der Rechner auf die
   interne IP-Adresse des natd(8)-Systems gesetzt werden.

   Es ist noch ein wenig Konfiguration no:tig, um die NAT-Funktion von IPFW
   zu aktivieren. Wenn das System einen angepassten Kernel hat, muss die
   Kernelkonfigurationsdatei die Zeile option IPDIVERT sowie weitere
   IPFIREWALL-Optionen, die in Abschnitt 29.4.1, "IPFW aktivieren"
   beschrieben sind, enthalten.

   Um die NAT-Unterstu:tzung beim Booten zu aktivieren, mu:ssen folgende
   Eintra:ge in /etc/rc.conf vorhanden sein:

 gateway_enable="YES"            # enables the gateway
 natd_enable="YES"               # enables NAT
 natd_interface="rl0"            # specify interface name of NIC attached to Internet
 natd_flags="-dynamic -m"        # -m = preserve port numbers; additional options are listed in natd(8)

  Anmerkung:

   Es ist auch mo:glich eine Konfigurationsdatei zu verwenden, welche die
   Optionen entha:lt, die an natd(8) u:bergeben werden:

 natd_flags="-f /etc/natd.conf"

   Die angegebene Datei muss die Konfigurationsoptionen enthalten, eine
   Option pro Zeile. Zum Beispiel:

 redirect_port tcp 192.168.0.2:6667 6667
 redirect_port tcp 192.168.0.3:80 80

   Weitere Informationen zu dieser Konfigurationsdatei finden Sie in natd(8).

   Als na:chstes werden die NAT-Regeln hinzugefu:gt. Wenn die Regeln
   zustandsorientiert sind, ist die Platzierung der NAT-Regeln sehr wichtig
   und die skipto-Aktion wird verwendet. Dies erfordert, dass jede Regel
   u:ber eine eindeutige Nummer verfu:gt, um eindeutige Sprungziele zu
   erhalten.

   Das folgende Beispiel baut auf dem im vorherigen Abschnitt gezeigten
   Firewall-Relgelsatz auf. Es werden einige neue Eintra:ge hinzugefu:gt und
   bestehende Regeln modifiziert, um NAT zu konfigurieren. Zuna:chst werden
   einige Variablen hinzugefu:gt, darunter Regelnummern, die
   keep-state-Option und eine Liste mit TCP-Ports um die Anzahl der Regeln zu
   reduzieren:

 #!/bin/sh
 ipfw -q -f flush
 cmd="ipfw -q add"
 skip="skipto 500"
 pif=dc0
 ks="keep-state"
 good_tcpo="22,25,37,53,80,443,110"

   Die NAT-Regel fu:r eingehende Pakete wird nach den beiden Regeln, die das
   interne Netzwerk und die Loopback-Schnittstelle erlauben und vor der
   check-state-Regel eingefu:gt. Es ist wichtig, dass die Nummer der
   NAT-Regel (in diesem Beispiel 100) ho:her ist, als die beiden vorherigen
   Regeln und niedriger, als die check-state-Regel:

 $cmd 005 allow all from any to any via xl0  # exclude LAN traffic
 $cmd 010 allow all from any to any via lo0  # exclude loopback traffic
 $cmd 100 divert natd ip from any to any in via $pif # NAT any inbound packets
 # Allow the packet through if it has an existing entry in the dynamic rules table
 $cmd 101 check-state

   Die Regeln fu:r den ausgehenden Verkehr werden ebenfalls modifiziert, um
   Aktionen mit der $skipto-Variable zu erlauben und anzuzeigen, dass die
   Pru:fung mit der Regel 500 fortgesetzt wird. Die sieben Regeln fu:r TCP
   wurden durch die Regel 125 ersetzt, da die sieben erlaubten ausgehenden
   Ports in der Variable $good_tcp0 enthalten sind.

 # Authorized outbound packets
 $cmd 120 $skip udp from any to x.x.x.x 53 out via $pif $ks
 $cmd 121 $skip udp from any to x.x.x.x 67 out via $pif $ks
 $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
 $cmd 130 $skip icmp from any to any out via $pif $ks

   Die eingehenden Regeln bleiben unvera:ndert, mit Ausnahme der letzten
   Regel, in der das via $pif entfert wird, um ein- und ausgehende Pakete
   pru:fen zu ko:nnen. Nach der letzten Regel fu:r ausgehende Pakete muss die
   NAT-Regel folgen. Die Regel muss eine ho:here Nummer als die letzte Regel
   haben und die Nummer muss u:ber die skipto-Aktion referenziert werden. In
   diesem Regelsatz leitet die Regel mit der Nummer 500 alle ausgehenden
   Pakete zur Weiterverarbeitung an natd(8) weiter. Die darauf folgende Regel
   la:sst alle von NAT verarbeiteten Pakete passieren.

 $cmd 499 deny log all from any to any
 $cmd 500 divert natd ip from any to any out via $pif # skipto location for outbound stateful rules
 $cmd 510 allow ip from any to any

   In diesem Beispiel steuern die Regeln 100, 101, 125, 500 und 510 die
   Adressu:bersetzung der ein- und ausgehende Pakete, so dass immer die
   private LAN IP-Adresse in der dynamische Zustandstabelle registriert
   werden.

   Nehmen wir beispielsweise einen Web-Browser, der neue HTTP-Sitzungen u:ber
   Port 80 aufbaut. Wenn nun das erste ausgehende Paket von der Firewall
   gepru:ft wird, trifft es nicht auf Regel 100 zu, da das Paket nach aussen
   geleitet wird und nicht nach innen. Das Paket trifft auch nicht auf Regel
   101 zu, da es das erste ist und somit noch nicht in der dynamischen
   Zustandstabelle enthalten ist. Das Paket entspricht schliesslich Regel
   125, da es ausgehend auf einem erlaubten Port gesendet wird und von einer
   IP-Adresse aus dem internen LAN stammt. Fu:r Pakete, die auf diese Regel
   zutreffen, werden zwei Aktionen ausgefu:hrt. Zuerst wird durch die Aktion
   keep-state ein dynamischer Eintrag in der Statustabelle erstellt und die
   angegebene Aktion skipto 500 ausgefu:hrt. Als na:chstes durchla:uft das
   Paket NAT und wird dann an das Internet gesendet. Nachdem dieses Paket am
   Webserver angekommen ist, wird dort eine Antwort erzeugt und
   zuru:ckgeschickt. Dieses Paket wird wieder von oben nach unten durch das
   Regelwerk gepru:ft. Dieses Mal trifft Regel 100 auf das Paket zu und die
   Zieladresse wird auf die zugeho:rige (lokale) LAN-Adresse abgebildet.
   Danach wird das Paket von der Regel check-state verarbeitet. Die
   Zustandstabelle erkennt, dass eine zugeho:rige aktive Sitzung vorliegt und
   das Paket wird freigegeben und in das LAN geleitet.

   Fu:r den eingehenden Datenverkehr muss der Regelsatz unerwu:nschte Pakete
   blockieren und Pakete fu:r autorisierte Dienste durchlassen. Ein Paket,
   das mit einer Regel fu:r den eingehenden Datenverkehr u:bereinstimmt, wird
   in der dynamischen Zustandstabelle eingetragen und dann an das LAN
   freigegeben. Das Antwortpaket wird von der Regel check-state als Paket
   einer aktiven Sitzung erkannt. Das Paket wird dann von Regel 500 per NAT
   verarbeitet, bevor es u:ber die externe Schnittstelle versendet wird.

    29.4.4.1. Weiterleitung von Ports

   Der Nachteil von natd(8) ist, dass die Rechner im LAN nicht aus dem
   Internet zuga:nglich sind. Diese Rechner ko:nnen zwar ausgehende
   Verbindungen zur Aussenwelt aufbauen, jedoch keine eingehenden
   Verbindungen empfangen. Dies stellt ein Problem dar, wenn Sie auf einem
   Rechner im LAN Dienste anbieten mo:chten, die aus dem Internet erreichbar
   sein sollen. In diesem Fall ko:nnen Sie die Ports, welche u:ber das
   Internet erreichbar sein sollen, u:ber die natd(8)-Maschine an den Rechner
   im LAN weiterleiten.

   Angenommen es gibt einen IRC-Server auf Rechner A und einen Webserver auf
   Rechner B. Damit dies funktioniert, mu:ssen die Verbindungen auf den Ports
   6667 (IRC) und 80 (HTTP) an die jeweiligen Rechner weitergeleitet werden.

   Die Syntax fu:r -redirect_port lautet:

 -redirect_port proto targetIP:targetPORT[-targetPORT]
                  [aliasIP:]aliasPORT[-aliasPORT]
                  [remoteIP[:remotePORT[-remotePORT]]]

   Fu:r das obige Beispiel sollten die Argumente wie folgt aussehen:

 -redirect_port tcp 192.168.0.2:6667 6667
 -redirect_port tcp 192.168.0.3:80 80

   Damit werden die entsprechenden TCP-Ports an die Rechner im LAN
   weitergeleitet.

   Portbereiche ko:nnen u:ber -redirect_port festgelegt werden. Zum Beispiel
   wu:rde tcp 192.168.0.2:2000-3000 2000-3000 alle Verbindungen auf die Ports
   2000 bis 3000 an die Ports 2000 bis 3000 an Rechner A weiterleiten.

   Diese Optionen ko:nnen u:ber natd_flags="" in /etc/rc.conf direkt beim
   Start an natd(8) u:bergeben werden. Alternativ ko:nnen die Optionen in
   eine Konfigurationsdatei eingetragen werden.

   Weitere Konfigurationsmo:glichkeiten sind in natd(8) beschrieben.

    29.4.4.2. Weiterleiten von Adressen

   Das Weiterleiten von Adressen ist nu:tzlich, wenn mehr als eine IP-Adresse
   zur Verfu:gung steht. Jeder Rechner im LAN kann u:ber natd(8) seine eigene
   externe IP-Adresse zugewiesen bekommen. natd(8) wird dann den ausgehenden
   Datenverkehr der Rechner aus dem LAN mit der entsprechenden externen
   IP-Adresse umschreiben. Auch der eingehenden Datenverkehr u:ber die
   externe IP-Adresse wird an die entsprechenden Rechner im LAN
   weitergeleitet. Diese Methode ist auch als statisches NAT bekannt. Wenn
   Ihnen beispielsweise die IP-Adressen 128.1.1.1, 128.1.1.2 und 128.1.1.3
   zur Verfu:gung stehen, kann 128.1.1.1 als externe Adresse der
   natd(8)-Maschine verwendet werden, wa:hrend 128.1.1.2 und 128.1.1.3 an
   Rechner A und Rechner B im LAN weitergeleitet werden.

   Die Syntax fu:r -redirect_address lautet:

 -redirect_address localIP publicIP

   localIP    Die interne IP-Adresse des Rechners im LAN.                     
   publicIP   Die externe IP-Adresse fu:r den entsprechenden Rechner im LAN.  

   Fu:r das obige Beispiel sollten die Argumente wie folgt aussehen:

 -redirect_address 192.168.0.2 128.1.1.2
 -redirect_address 192.168.0.3 128.1.1.3

   Genau wie bei -redirect_port, werden diese Argumente innerhalb der
   /etc/rc.conf-Option natd_flags="" angegeben, oder alternativ u:ber eine
   Konfigurationsdatei. Allerdings mu:ssen beim Weiterleiten von Adressen
   keine Ports umgeleitet werden, da der gesamte eingehende Datenverkehr
   einer bestimmte IP-Adresse weitergeleitet wird.

   Die externe IP-Adresse der natd(8)-Maschine muss auf der externen
   Schnittstelle aktiv und mit einem Alias versehen sein. Weitere
   Einzelheiten sind in natd(8) beschrieben.

  29.4.5. Das IPFW Kommando

   ipfw kann benutzt werden, um einzelne Regeln im laufenden Betrieb
   hinzuzufu:gen oder zu entfernen. Problematisch ist jedoch, dass diese
   A:nderungen bei einem Neustart des Systems verloren gehen. Daher ist es
   empfehlenswert, eigene Regeln in einer Datei zu definieren und diese zu
   laden, um die Regeln der Firewall im laufenden Betrieb anzupassen.

   ipfw ist auch hilfreich, um die geladenen Regeln der auf der Konsole
   auszugeben. IPFW erzeugt dynamisch einen Za:hler, der jedes Paket, auf das
   eine Regel zutrifft, za:hlt. Dadurch ist es mo:glich, die Funktion einer
   Regel zu u:berpru:fen.

   Eine Auflistung aller geladenen Regeln erhalten Sie mit:

 # ipfw list

   Eine Auflistung aller Regeln inklusive des letzten Treffers erhalten Sie
   mit:

 # ipfw -t list

   Das na:chste Beispiel zeigt Informationen u:ber die Anzahl der Pakete, die
   von einer Regel gefiltert wurden sowie die Regel selbst. Der erste Spalte
   zeigt die Nummer der Regel, gefolgt von der Anzahl der gefilterten Pakete
   und der Anzahl der Pakete in Bytes. Zum Schluss steht die Regel selbst:

 # ipfw -a list

   Das folgende Kommando zeigt zusa:tzlich alle dynamischen Regeln an:

 # ipfw -d list

   Um diese Auflistung um die "abgelaufenen" Regeln zu erweitern, geben Sie
   folgendes Kommando ein:

 # ipfw -d -e list

   Hiermit werden alle Za:hler auf Null zuru:ckgesetzt:

 # ipfw zero

   Es ist auch mo:glich, einen spezifischen Za:hler zuru:ckzusetzen:

 # ipfw zero NUM

    29.4.5.1. Protokollierung von Firewall-Nachrichten

   Auch bei aktivierter Protokollierung wird IPFW von selbst keine Regeln
   protokollieren. Der Administrator muss entscheiden, welche Regeln aus dem
   Regelwerk protokolliert werden sollen. In diesen Regeln muss dann das
   Schlu:sselwort log hinzugefu:gt werden. Normalerweise werden nur geblockte
   Pakete protokolliert. Es ist u:blich, die "ipfw default deny
   everything"-Regel am Ende des Regelwerks mit dem Schlu:sselwort log zu
   duplizieren. Dadurch ist es mo:glich, alle Pakete zu sehen, auf die keine
   Regel zutraf.

   Protokollierung ist allerdings ein zweischneidiges Schwert. Bei mangelnder
   Vorsicht oder einem DoS-Angriff wird die Festplatte mit einer enormen Flut
   von Protokolldaten belastet. Protokoll-Nachrichten werden nicht nur an
   syslogd(8) geschickt, sondern auch auf der Konsole angezeigt, was dann
   schnell la:stig werden kann.

   Die Kerneloption IPFIREWALL_VERBOSE_LIMIT=5 begrenzt die Anzahl
   identischer Nachrichten an syslogd(8) fu:r eine gegebene Regel auf fu:nf
   Nachrichten. Ist diese Option im Kernel aktiviert, wird nach Erreichen den
   festgelegten Anzahl die Protokollierung von aufeinanderfolgenden
   Nachrichten auf den festgelegten Wert begrenzt, da beispielsweise die
   Speicherung von 200 gleichen Protokoll-Nachrichten sinnlos ist. Daher
   werden durch diese Option nur fu:nf gleichartige Nachrichten
   protokolliert. Alle weiteren Nachrichten werden nur geza:hlt und deren
   Gesamtzahl wird schliesslich von syslogd(8) wie folgt ausgegeben:

 Last message repeated 45 times

   Alle protokollierten Pakete werden in der Voreinstellung in
   /var/log/security gespeichert. Dies wird in /etc/syslog.conf definiert.

    29.4.5.2. Ein Firewall-Regelwerk erstellen

   Die meisten fortgeschrittenen IPFW-Benutzer erzeugen eine Datei, welche
   die Regeln fu:r die Firewall entha:lt, um diese als Skript ausfu:hren zu
   ko:nnen. Der Vorteil einer derartigen Konfiguration besteht darin, dass
   dadurch mehrere Regeln gleichzeitig gea:ndert und aktiviert werden
   ko:nnen, ohne dass dazu das System neu gestartet werden muss. Dies ist
   zudem beim Testen von Regela:nderungen sehr hilfreich. Weil es sich bei
   der Datei um ein Skript handelt, ist es auch mo:glich, ha:ufig verwendete
   Befehle durch Aliase zu ersetzen und diese dann in mehreren Regeln zu
   nutzen.

   Die Syntax des folgenden Skripts entspricht der Syntax von sh(1), csh(1)
   sowie tcsh(1). Felder, die symbolisch substituiert werden, haben das
   Pra:fix $ (Dollarzeichen). Symbolische Felder haben das $-Pra:fix nicht.
   Der Wert, mit dem das symbolische Feld belegt wird, muss in doppelten
   Anfu:hrungszeichen ("") stehen.

   Die Datei mit den Regeln ko:nnte wie folgt aufgebaut sein:

 ############### start of example ipfw rules script #############
 #
 ipfw -q -f flush       # Delete all rules
 # Set defaults
 oif="tun0"             # out interface
 odns="192.0.2.11"      # ISP's DNS server IP address
 cmd="ipfw -q add "     # build rule prefix
 ks="keep-state"        # just too lazy to key this each time
 $cmd 00500 check-state
 $cmd 00502 deny all from any to any frag
 $cmd 00501 deny tcp from any to any established
 $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks
 $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks
 $cmd 00611 allow udp from any to $odns 53 out via $oif $ks
 ################### End of example ipfw rules script ############

   Die Regeln in diesem Beispiel sind nicht wichtig. Wichtig ist es, zu
   zeigen, wie die symbolische Substitution innerhalb der Regeln verwendet
   wird.

   Wenn dieses Beispiel in etc/ipfw.rules gespeichert wurde, so ko:nnten alle
   Regeln durch die Ausfu:hrung des folgenden Kommandos neu geladen werden:

 # sh /etc/ipfw.rules

   Anstelle von /etc/ipfw.rules kann ein beliebig anderer Name oder
   Speicherort verwendet werden.

   Alternativ ko:nnen die einzelnen Befehle dieses Skripts auch von Hand
   eingegeben werden:

 # ipfw -q -f flush
 # ipfw -q add check-state
 # ipfw -q add deny all from any to any frag
 # ipfw -q add deny tcp from any to any established
 # ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state
 # ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state
 # ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state

29.5. IPFILTER (IPF)

   IPFILTER, auch als IPF bekannt, ist eine plattformu:bergreifende Open
   Source Firewall, die auf mehrere Betriebssysteme portiert wurde,
   einschliesslich FreeBSD, NetBSD, OpenBSD und Solaris(TM).

   IPFILTER basiert auf einer kernelseitigen Firewall und einem
   NAT-Mechanismus, der durch Anwenderprogramme gesteuert und u:berwacht
   werden kann. Firewallregeln werden mit ipf gesetzt oder gelo:scht. Fu:r
   die Manipulation der NAT-Regeln wird ipnat benutzt. Mit ipfstat werden
   Laufzeitstatistiken der kernelseitigen Anteile von IPFILTER aufgelistet.
   Mit ipmon ko:nnen die Aktionen von IPFILTER in Protokolldateien
   gespeichert werden.

   IPF wurde urspru:nglich mit der Verarbeitungslogik "die letzte passende
   Regel gewinnt" geschrieben und verwendete ausschliesslich Regeln ohne
   feste Zusta:nde. Inzwischen wurde IPF modernisiert und unterstu:tzt nun
   auch die Optionen quick und keep state.

   Antworten auf ha:ufige Fragen finden Sie unter
   http://www.phildev.net/ipf/index.html. Ein Archiv der IPFILTER
   Mailingliste steht unter http://marc.info/?l=ipfilter zur Verfu:gung.

   Dieser Abschnitt des Handbuchs konzentriert sich auf IPF unter FreeBSD. Es
   werden auch Firewallregeln mit den Optionen quick und keep state
   vorgestellt.

  29.5.1. IPF aktivieren

   IPF ist in FreeBSD als ladbares Kernelmodul enthalten. Das bedeutet, dass
   Sie keinen angepassten Kernel erzeugen mu:ssen um IPF zu aktivieren.

   Benutzer, die IPF lieber statisch in den Kernel kompilieren, sollten den
   Anweisungen in Kapitel 8, Konfiguration des FreeBSD-Kernels folgen. Die
   folgenden Kerneloptionen stehen zur Verfu:gung:

 options IPFILTER
 options IPFILTER_LOG
 options IPFILTER_LOOKUP
 options IPFILTER_DEFAULT_BLOCK

   options IPFILTER aktiviert die Unterstu:tzung fu:r IPFILTER. options
   IPFILTER_LOG aktiviert die Protokollierung u:ber die Pseudo-Schnittstelle
   ipl fu:r Firewallrelgen, die das Schlu:sselwort log enthalten.
   IPFILTER_LOOKUP aktiviert IP-Pools, um die Suche nach IP-Adressen zu
   beschleunigen. IPFILTER_DEFAULT_BLOCK a:ndert das Verhalten der Firewall
   dahingehend, dass jedes Paket, das nicht explizit von einer pass-Regel
   Zugang erha:lt, geblockt wird.

   Um IPF wa:hrend des Bootens zu aktivieren, mu:ssen folgende Eintra:ge in
   /etc/rc.conf hinzugefu:gt werden. Diese Eintra:ge aktivieren ebenfalls die
   Protokollierung und die Regel default pass all. Um diese Voreinstellung zu
   a:ndern, ohne einen neuen Kernel zu u:bersetzen, mu:ssen Sie am Ende der
   Firewallregeln eine block all Regel hinzufu:gen.

 ipfilter_enable="YES"             # Start ipf firewall
 ipfilter_rules="/etc/ipf.rules"   # loads rules definition text file
 ipmon_enable="YES"                # Start IP monitor log
 ipmon_flags="-Ds"                 # D = start as daemon
                                   # s = log to syslog
                                   # v = log tcp window, ack, seq
                                   # n = map IP & port to names

   Wenn die NAT-Funktionalita:t beno:tigt wird, mu:ssen auch diese Zeilen
   hinzugefu:gt werden:

 gateway_enable="YES"              # Enable as LAN gateway
 ipnat_enable="YES"                # Start ipnat function
 ipnat_rules="/etc/ipnat.rules"    # rules definition file for ipnat

   Jetzt ko:nnen Sie IPF starten:

 # service ipfilter start

   Um die Firewallregeln zu laden, u:bergeben Sie den Namen des Regelwerks an
   ipf. Mit dem folgenden Kommando ersetzen Sie alle aktuell geladenen
   Regeln:

 # ipf -Fa -f /etc/ipf.rules

   -Fa lo:scht zuna:chst alle internen Regeln und mit -f wird die Datei
   angegeben, welche die zu ladenen Regeln entha:lt.

   Damit haben Sie die Mo:glichkeit, A:nderungen an der laufenden Firewall zu
   machen, ohne dass das System neu gestartet werden muss. Da dieser Vorgang
   beliebig oft wiederholt werden kann, ist es ein sehr bequemer Weg neue
   Regeln zu testen.

   Diese und weitere Optionen sind in ipf(8) beschrieben.

  29.5.2. IPF Regel-Syntax

   Mit der hier beschriebenen Regel-Syntax ko:nnen zustandsorientierte Regeln
   erstellt werden. Beim Erstellen von Regeln ist zu beachten, dass Regeln
   ohne das Schlu:sselwort quick der Reihe nach gepru:ft werden und "die
   letzte zutreffende Regel" angewendet wird. Das bedeutet, dass selbst dann,
   wenn die erste zutreffende Regel eine pass-Regel ist, das Paket dennoch
   geblockt wird, falls spa:ter eine block-Regel zutrifft.
   Beispielregelsa:tze finden Sie in /usr/share/examples/ipfilter.

   Beim Erstellen von Regeln wird das Zeichen # verwendet, um einen Kommentar
   bis zum Ende der Zeile einzuleiten. Leere Zeilen werden ignoriert.

   Die Schlu:sselwo:rter, die in den Regeln verwendet werden, mu:ssen in
   einer bestimmten Reihenfolge geschrieben werden, von links nach rechts.
   Einige Schlu:sselwo:rter sind verbindlich, andere sind optional. Einige
   Schlu:sselwo:rter haben Unteroptionen, die wiederum selbst
   Schlu:sselwo:rter sind und ebenfalls weitere Unteroptionen einschliessen
   ko:nnen. Die Reihenfolge der Schlu:sselwo:rter ist wie folgt, wobei die
   Wo:rter in Grossbuchstaben eine Variable darstellen und die Wo:rter in
   Kleinbuchstaben der Variable vorangestellt werden mu:ssen:

   ACTION DIRECTION OPTIONS proto PROTO_TYPE from SRC_ADDR SRC_PORT to
   DST_ADDR DST_PORT TCP_FLAG|ICMP_TYPE keep state STATE

   Dieser Abschnitt beschreibt jedes dieser Schlu:sselwo:rter und ihre
   Optionen. Es ist jedoch keine vollsta:ndige Liste aller mo:glichen
   Optionen. ipf(5) entha:lt eine vollsta:ndige Beschreibung der Syntax und
   einige Beispiele zur Erstellung von IPF-Regeln.

   ACTION

           Dieses Schlu:sselwort bestimmt, was mit dem Paket zu tun ist, wenn
           es auf eine Regel zutrifft. Jede Regel muss dieses Schlu:sselwort
           enthalten. Die folgenden Aktionen werden erkannt:

           block: Das Paket wird verworfen.

           pass: Das Paket wird durchgelassen.

           log: Das Paket wird protokolliert.

           count: Za:hlt die Anzahl der Pakete und die Bytes. Die kann einen
           Hinweis darauf geben, wie oft Pakete auf diese Regel zutreffen.

           auth: Das Paket geht in eine Warteschlange zur Weiterverarbeitung
           durch ein anderes Programm.

           call: Ermo:glicht den Zugriff auf eingebaute IPF-Funktionen, die
           komplexere Aktionen ermo:glichen.

           decapsulate: Entfernt alle Header, um den Inhalt des Pakets zu
           verarbeiten.

   DIRECTION

           Als na:chstes muss fu:r jede Regel explizit die Richtung mit einem
           der folgenden Schlu:sselwo:rter angegeben werden:

           in: Die Regel wird auf ein eingehendes Paket angewendet.

           out: Die Regel wird auf ein ausgehendes Paket angewendet.

           all: Die Regel gilt fu:r beide Richtungen.

           Wenn das System mehrere Schnittstellen ausweist, kann die
           Schnittstelle zusammen mit der Richtung angegeben werden. Ein
           Beispiel wa:re in on fxp0.

   OPTIONS

           Optionen mu:ssen nicht zwingend angegeben werden. Falls jedoch
           mehrere Optionen angegeben werden, mu:ssen sie in der hier
           gezeigten Reihenfolge verwendet werden.

           log: Wenn die Firewall die angegebene Aktion durchfu:hrt, werden
           die Kopfdaten des Pakets auf der Pseudo-Schnittstelle ipl(4)
           protokolliert.

           quick: Wenn ein Paket mit dieser Regel u:bereinstimmt, wird die
           Aktion fu:r diese Regel ausgefu:hrt und die Regelpru:fung stoppt
           an dieser Stelle.

           on: Auf dieses Schlu:sselwort muss der Name der Schnittstelle
           folgen. Die Regel trifft nur dann zu, wenn das Paket auf der
           angegebenen Schnittstelle in die angegebene Richtung geht.

           Wenn das Schlu:sselwort log verwendet wird, ko:nnen die folgenden
           Ausdru:cke in dieser Reihenfolge benutzt werden:

           body: die ersten 128 Bytes des Paketinhaltes werden zusa:tzlich zu
           den Kopfdaten protokolliert.

           first: trifft nur zu, wenn das Schlu:sselwort log zusammen mit
           keep-state verwendet wird. Es bestimmt, dass nur das auslo:sende
           Paket protokolliert wird und nicht jedes weitere Paket, dass von
           der gespeicherten Status-Regel betroffen ist.

           Es stehen noch weitere Optionen zur Ru:ckmeldung von Fehlern
           verfu:gbar. Ausfu:hrliche Details finden Sie in ipf(5).

   PROTO_TYPE

           Der Protokolltyp ist optional. Er ist jedoch zwingend
           erforderlich, falls die Regel einen SRC_PORT oder DST_PORT angeben
           muss da es den Typ des Protokolls bestimmt. Wenn Sie das Protokoll
           angeben, verwenden Sie das Schlu:sselwort proto, gefolgt von der
           Protokollnummer oder dem Namen aus /etc/protocols. Zum Beispiel
           tcp, udp, oder icmp. Wenn PROTO_TYPE angegeben wird und SCR_PORT
           oder DST_PORT ausgelassen werden, stimmen alle Portnummern fu:r
           dieses Protokoll mit dieser Regel u:berein.

   SRC_ADDR

           Das Schlu:sselwort from ist verpflichtend und darauf folgt das
           Schlu:sselwort, das die Quelle des Pakets darstellt. Die Quelle
           kann ein Rechnername, eine IP-Adresse gefolgt von der CIDR-Maske,
           ein Adresspool oder das Schlu:sselwort all sein. ipf(5) entha:lt
           einige Beispiele.

           IP-Bereiche ko:nnen nur in der CIDR-Notation angegeben werden. Der
           Port oder das Paket net-mgmt/ipcalc hilft bei der Berechnung der
           richtigen CIDR-Maske. Weiterfu:hrende Informationen finden Sie auf
           der Webseite http://jodies.de/ipcalc.

   SCR_PORT

           Die Portnummer der Quelle ist optional. Wenn sie jedoch verwendet
           wird, muss in der Regel zuerst PROTO_TYPE angegeben werden. Die
           Portnummer muss auch auf das Schlu:sselwort proto folgen.

           Es werden verschiedene Vergleichsoperatoren unterstu:tzt: =
           (gleich), != (nicht gleich), < (kleiner als), > (gro:sser als), <=
           (kleiner als oder gleich) >= (gro:sser als oder gleich).

           Um Portbereiche anzugeben, schreiben Sie zwei Portnummern zwischen
           <> (kleiner als und gro:sser als), >< (gro:sser als und kleiner
           als), oder : (gro:sser als oder gleich und kleiner als oder
           gleich).

   DST_ADDR

           Das Schlu:sselwort to ist verpflichtend und darauf folgt das
           Schlu:sselwort, welches das Ziel des Pakets darstellt. Dieses Ziel
           kann ein Rechnername, eine IP-Adresse gefolgt von der CIDR-Maske,
           ein Adresspool oder das Schlu:sselwort all sein.

   DST_PORT

           Die Portnummer des Ziels ist optional. Wenn sie jedoch verwendet
           wird, muss in der Regel zuerst PROTO_TYPE angegeben werden. Die
           Portnummer muss auch auf das Schlu:sselwort proto folgen.

   TCP_FLAG|ICMP_TYPE

           Wenn tcp als PROTO_TYPE verwendet wird, ko:nnen bestimmte
           TCP-Flags angegeben werden, die den Zustand einer Verbindung
           bestimmen. Mo:gliche Flags sind: S (SYN), A (ACK), P (PSH), F
           (FIN), U (URG), R (RST), C (CWN) und E (ECN).

           Wenn icmp als PROTO_TYPE verwendet wird, kann der ICMP-Typ mit
           angegeben werden. ipf(5) entha:lt eine Auflistung der zula:ssigen
           Typen.

   STATE

           Wenn eine pass-Regel das Schlu:sselwort keep state entha:lt, wird
           IPF einen Eintrag in der dynamischen Zustandstabelle hinzufu:gen,
           damit nachfolgende Pakete dieser Verbindung ebenfalls
           durchgelassen werden. IPF kann den Zustand fu:r TCP, UDP und
           ICMP-Sitzungen verfolgen. IPF wird jedes Paket, das zu einer
           aktiven Sitzung geho:rt, durchlassen, auch wenn ein anderes
           Protokoll verwendet wird.

           Pakete, die u:ber die Schnittstelle zum o:ffentlichen Internet
           raus gehen, werden von IPF zuerst gegen die dynamische
           Zustandstabelle gepru:ft. Wenn das na:chste Paket dieser aktiven
           Sitzung mit dem vorherigen Paket u:bereinstimmt, verla:sst dieses
           Paket die Firewall und der Status wird in der dynamischen
           Zustandstabelle aktualisiert. Pakete, die nicht zu einer aktiven
           Sitzung geho:ren, werden gegen ausgehende Regeln gepru:ft.
           Eingehende Pakete von der Schnittstelle zum o:ffentlichen Internet
           werden gegen die dynamische Zustandstabelle gepru:ft. Wenn das
           na:chste Paket mit der aktiven Sitzung u:bereinstimmt, verla:sst
           dieses Paket die Firewall und der Status wird in der dynamischen
           Zustandstabelle aktualisiert. Pakete, die nicht zu einer aktiven
           Sitzung geho:ren, werden gegen eingehende Regeln gepru:ft.

           Mehrere Schlu:sselwo:rter ko:nnen an keep state angefu:gt werden.
           Bei der Verwendung dieser Schlu:sselwo:rter werden verschiedene
           Optionen gesetzt, um die zustandsorientierte Filterung zu steuern.
           ipf(5) entha:lt eine Liste der verfu:gbaren Optionen und deren
           Beschreibungen.

  29.5.3. Beispielregelsatz

   Dieser Abschnitt beschreibt die Erstellung eines Regelsatzes, welcher nur
   entsprechende Dienste erlaubt und alle anderen Verbindungen blockiert.

   FreeBSD verwendet die Loopback-Schnittstelle (lo0) und die IP-Adresse
   127.0.0.1 zur internen Kommunikation. Der Regelsatz muss Regeln enthalten,
   die Pakete fu:r diesen internen Verkehr ermo:glichen:

 # no restrictions on the loopback interface
 pass in quick on lo0 all
 pass out quick on lo0 all

   Die mit dem Internet verbundene Schnittstelle wird fu:r die Autorisierung
   und den Zugriff aller ein- und ausgehenden Verbindungen verwendet. Wenn
   eine oder mehrere Schnittstellen mit privaten Netzwerken verbunden sind,
   mu:ssen Regeln existieren, die den Datenverkehr aus dem LAN zwischen den
   internen Netzwerken oder ins Internet erlauben. Der Regelsatz sollte in
   drei Bereiche unterteilt werden: vertrauenswu:rdige interne
   Schnittstellen, ausgehende Verbindungen u:ber die o:ffentlichen
   Schnittstellen und eingehende Verbindungen u:ber die o:ffentliche
   Schnittstelle.

   Diese beiden Regeln erlauben den gesamten Datenverkehr u:ber eine
   vertrauenswu:rdige LAN-Schnittstelle namens xl0:

 # no restrictions on inside LAN interface for private network
 pass out quick on xl0 all
 pass in quick on xl0 all

   Die Regeln fu:r den ein- und ausgehenden Verkehr der o:ffentlichen
   Schnittstelle sollten in einer bestimmten Reihenfolge geschrieben werden.
   Zuerst Regeln, die ha:ufiger u:bereinstimmen, danach Regeln, die seltener
   u:bereinstimmen. Die letzte Regel blockiert und protokolliert alle Pakete
   auf der Schnittstelle.

   Der folgende Regelsatz definiert die ausgehenden Regeln der o:ffentlichen
   Schnittstelle dc0. Die Regeln pru:fen den Zustand und identifizieren
   bestimmte Dienste, auf die die internen Systeme zugreifen du:rfen. Alle
   Regeln verwenden das Schlu:sselwort quick und geben die passenden
   Portnummern und ggf. auch die Zieladressen an.

 # interface facing Internet (outbound)
 # Matches session start requests originating from or behind the
 # firewall, destined for the Internet.

 # Allow outbound access to public DNS servers.
 # Replace x.x.x. with address listed in /etc/resolv.conf.
 # Repeat for each DNS server.
 pass out quick on dc0 proto tcp from any to x.x.x. port = 53 flags S keep state
 pass out quick on dc0 proto udp from any to xxx port = 53 keep state

 # Allow access to ISP's specified DHCP server for cable or DSL networks.
 # Use the first rule, then check log for the IP address of DHCP server.
 # Then, uncomment the second rule, replace z.z.z.z with the IP address,
 # and comment out the first rule
 pass out log quick on dc0 proto udp from any to any port = 67 keep state
 #pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state

 # Allow HTTP and HTTPS
 pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state
 pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state

 # Allow email
 pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state
 pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state

 # Allow NTP
 pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state

 # Allow FTP
 pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state

 # Allow SSH
 pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state

 # Allow ping
 pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state

 # Block and log everything else
 block out log first quick on dc0 all

   Die folgenden Beispielregeln fu:r den eingehenden Verkehr auf der
   o:ffentlichen Schnittstelle blockieren zuerst alle unerwu:nschten Pakete.
   Dies reduziert die Anzahl der Pakete, die durch die letzte Regel
   protokolliert werden.

 # interface facing Internet (inbound)
 # Block all inbound traffic from non-routable or reserved address spaces
 block in quick on dc0 from 192.168.0.0/16 to any    #RFC 1918 private IP
 block in quick on dc0 from 172.16.0.0/12 to any     #RFC 1918 private IP
 block in quick on dc0 from 10.0.0.0/8 to any        #RFC 1918 private IP
 block in quick on dc0 from 127.0.0.0/8 to any       #loopback
 block in quick on dc0 from 0.0.0.0/8 to any         #loopback
 block in quick on dc0 from 169.254.0.0/16 to any    #DHCP auto-config
 block in quick on dc0 from 192.0.2.0/24 to any      #reserved for docs
 block in quick on dc0 from 204.152.64.0/23 to any   #Sun cluster interconnect
 block in quick on dc0 from 224.0.0.0/3 to any       #Class D & E multicast

 # Block fragments and too short tcp packets
 block in quick on dc0 all with frags
 block in quick on dc0 proto tcp all with short

 # block source routed packets
 block in quick on dc0 all with opt lsrr
 block in quick on dc0 all with opt ssrr

 # Block OS fingerprint attempts and log first occurrence
 block in log first quick on dc0 proto tcp from any to any flags FUP

 # Block anything with special options
 block in quick on dc0 all with ipopts

 # Block public pings and ident
 block in quick on dc0 proto icmp all icmp-type 8
 block in quick on dc0 proto tcp from any to any port = 113

 # Block incoming Netbios services
 block in log first quick on dc0 proto tcp/udp from any to any port = 137
 block in log first quick on dc0 proto tcp/udp from any to any port = 138
 block in log first quick on dc0 proto tcp/udp from any to any port = 139
 block in log first quick on dc0 proto tcp/udp from any to any port = 81

   Wenn eine Regel mit der Option log first protokolliert wird, ko:nnen Sie
   mit ipfstat -hio pru:fen, wie viele U:bereinstimmungen es fu:r diese Regel
   gibt. Eine grosse Anzahl von U:bereinstimmungen kann darauf hindeuten,
   dass das System angegriffen wird.

   Die restlichen Regeln definieren, welche Verbindungen aus dem Internet
   kommend hergestellt werden du:rfen. Die letzte Regel blockiert alle
   Verbindungen, die nicht ausdru:cklich von vorhergehenden Regeln erlaubt
   wurden.

 # Allow traffic in from ISP's DHCP server. Replace z.z.z.z with
 # the same IP address used in the outbound section.
 pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state

 # Allow public connections to specified internal web server
 pass in quick on dc0 proto tcp from any to x.x.x.x port = 80 flags S keep state

 # Block and log only first occurrence of all remaining traffic.
 block in log first quick on dc0 all

  29.5.4. NAT Konfiguration

   Um NAT zu aktivieren, fu:gen Sie folgende Zeilen in /etc/rc.conf hinzu.
   Geben Sie den Namen der Datei an, welche die NAT-Regeln entha:lt:

 gateway_enable="YES"
 ipnat_enable="YES"
 ipnat_rules="/etc/ipnat.rules"

   NAT-Regeln sind sehr flexibel, um den Bedu:rfnissen von kommerziellen
   Anwendern und Heimanwendern gerecht zu werden. Die hier vorgestellte
   Regelsyntax wurde vereinfacht, um die gemeinsame Nutzung zu demonstrieren.
   Eine vollsta:ndige Beschreibung der Syntax finden Sie in ipnat(5).

   Die grundlegende Syntax fu:r eine NAT-Regel ist wie folgt. map leitet die
   Regel ein und IF sollte durch den Namen der externen Schnittstelle ersetzt
   werden:

 map IF LAN_IP_RANGE -> PUBLIC_ADDRESS

   LAN_IP_RANGE ist ein Bereich von IP-Adressen, der von den internen
   Rechnern verwendet wird. In der Regel ist dies ein privater Bereich,
   beispielsweise 192.168.1.0/24. PUBLIC_ADDRESS kann entweder eine statische
   externe IP-Adresse sein, oder das Schlu:sselwort 0/32, welches der
   zugewiesenen IP-Adresse fu:r IF entspricht.

   Wenn ein Paket aus dem LAN mit einem o:ffentlichen Ziel an der IPF
   Firewall ankommt, werden zuna:chst die Regeln fu:r den ausgehenden Verkehr
   gepru:ft. Danach wird das Paket an das NAT-Regelwerk geleitet, wo es von
   oben nach unten gelesen und gepru:ft wird, wobei die erste
   u:bereinstimmende Regel gewinnt. IPF testet jede NAT-Regel gegen die
   Schnittstelle und die Quell-IP-Adresse des Pakets. Wenn der
   Schnittstellenname des Pakets mit einer NAT-Regel u:bereinstimmt, wird
   gepru:ft, ob die Quell-IP-Adresse des Pakets auf den Bereich in
   LAN_IP_RANGE passt. Wenn dies der Fall ist, wird die Quell-IP-Adresse des
   Pakets mit der Adresse aus PUBLIC_ADDRESS u:berschrieben. IPF speichert
   die Eintra:ge in seiner internen NAT-Tabelle, so dass wenn das Paket aus
   dem Internet zuru:ckkehrt, es der urspru:nglichen privaten IP-Adresse
   zugeordnet werden kann, bevor es von den weiteren Firewallregeln gepru:ft
   wird.

   Bei Netzwerken mit einer grossen Anzahl von Systemen oder mehreren
   Subnetzen, steigert sich der Ressourcenverbrauch fu:r das Umschreiben der
   IP-Adressen. Es existieren zwei Methoden, um dieses Problem zu umgehen.

   Bei der ersten Methode wird ein Portbereich definiert, der fu:r die
   Quell-Ports verwendet wird. Durch das Hinzufu:gen des Schlu:sselworts
   portmap kann NAT angewiesen werden, nur Quell-Ports aus dem angegebenen
   Bereich zu benutzen:

 map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000

   Alternativ kann das Schlu:sselwort auto verwendet werden. Dadurch
   ermittelt NAT selbststa:ndig die zur Verfu:gung stehenden Ports:

 map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto

   Mit der zweiten Methode wird ein Pool von o:ffentlichen Adressen
   verwendet. Dies ist nu:tzlich, wenn es viele Systeme im Netzwerk gibt und
   ein Block o:ffentlicher IP-Adressen verfu:gbar ist. Aus diesem Pool kann
   NAT dann IP-Adressen fu:r die ausgehenden Pakete auswa:hlen.

   Der Bereich der o:ffentlichen IP-Adressen kann mit einer Netzmaske oder
   der CIDR-Notation festgelegt werden. Die folgenden Regeln sind identisch:

 map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0
 map dc0 192.168.1.0/24 -> 204.134.75.0/24

   Es ist ga:ngige Praxis, o:ffentlich zuga:ngliche Web- oder Mail-Server
   getrennt von den internen Netzwerksegmenten zu betreiben. Der Verkehr von
   diesen Servern muss dennoch von NAT bearbeitet werden und die
   Portumleitung ist erforderlich, um den eingehenden Datenverkehr an den
   richtigen Server zu leiten. Verwenden Sie beispielsweise folgende Regel,
   um den eingehenden Verkehr auf der o:ffentlichen IP-Adresse 20.20.20.5 dem
   internen Server mit der Adresse 10.0.10.25 zuzuordnen:

 rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80

   Wenn dies der einzige Webserver im Netz ist, wu:rde auch folgende Regel
   funktionieren, die alle HTTP-Anfragen an 10.0.10.25 umleitet:

 rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80

   IPF entha:lt einen FTP-Proxy, der zusammen mit NAT benutzt werden kann.
   Dieser Proxy u:berwacht den ausgehenden Datenverkehr fu:r aktive und
   passive Verbindungsanfragen und erstellt dynamische Filterregeln, welche
   die Portnummern des jeweiligen FTP-Datenkanal enthalten. Dadurch entfa:llt
   die Notwendigkeit, viele Ports fu:r FTP-Verbindungen zu o:ffnen.

   In diesem Beispiel verwendet die erste Regel den Proxy fu:r ausgehende
   FTP-Verbindungen aus dem internen LAN. Die zweite Regel u:bergibt den
   FTP-Datenverkehr von der Firewall an das Internet und die dritte Regel
   handhabt den restlichen Datenverkehr aus dem internen LAN:

 map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp
 map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp
 map dc0 10.0.10.0/29 -> 0/32

   FTP map-Regeln stehen vor den NAT-Regeln. Wenn ein Paket mit der FTP-Regel
   u:bereinstimmt, erstellt der FTP-Proxy eine tempora:re Filterregel, damit
   die Pakete durchgelassen und von NAT verarbeitet werden ko:nnen. Alle
   Pakte aus dem LAN, die nicht fu:r FTP bestimmt sind, werden von NAT
   verarbeitet, wenn sie mit der dritten Regel u:bereinstimmen.

   Ohne den FTP-Proxy wu:rden stattdessen folgende Regeln beno:tigt. Beachten
   Sie, dass ohne den Proxy alle Ports oberhalb von 1024 freigegeben werden
   mu:ssen:

 # Allow out LAN PC client FTP to public Internet
 # Active and passive modes
 pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state

 # Allow out passive mode data channel high order port numbers
 pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state$
 # Active mode let data channel in from FTP server
 pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state

   Nachdem die Datei mit den NAT-Regeln bearbeitet wurde, fu:hren Sie ipnat
   mit -CF aus, um die aktuellen NAT-Regeln und den Inhalt der dynamischen
   Zuordnungstabelle zu lo:schen. Geben Sie -f zusammen mit dem NAT-Regelsatz
   an:

 # ipnat -CF -f /etc/ipnat.rules

   Statistiken zu NAT lassen sich wie folgt anzeigen:

 # ipnat -s

   Die aktuellen Zuordnungen der NAT-Tabelle geben Sie mit diesem Kommando
   aus:

 # ipnat -l

   Ausfu:hrliche Informationen erhalten Sie mit:

 # ipnat -v

  29.5.5. IPF Statistiken

   IPF entha:lt mit ipfstat(8) ein Werkzeug, mit dem Statistiken abgerufen
   und angezeigt werden ko:nnen. Die Zahlen beziehen sich auf den Zeitpunkt,
   an dem die Firewall zuletzt gestartet wurde, beziehungsweise die Statistik
   mit ipf -Z zuru:ckgesetzt wurde.

   Die Ausgabe von ifstat sieht in etwa wie folgt aus:

 input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
 output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0
 input packets logged: blocked 99286 passed 0
 output packets logged: blocked 0 passed 0
 packets logged: input 0 output 0
 log failures: input 3898 output 0
 fragment state(in): kept 0 lost 0
 fragment state(out): kept 0 lost 0
 packet state(in): kept 169364 lost 0
 packet state(out): kept 431395 lost 0
 ICMP replies: 0 TCP RSTs sent: 0
 Result cache hits(in): 1215208 (out): 1098963
 IN Pullups succeeded: 2 failed: 0
 OUT Pullups succeeded: 0 failed: 0
 Fastroute successes: 0 failures: 0
 TCP cksum fails(in): 0 (out): 0
 Packet log flags set: (0)

   Es stehen viele Optionen zur Verfu:gung. Wird entweder -i (eingehend) oder
   -o (ausgehend) angegeben, wird der Befehl die entsprechende Liste mit den
   derzeit vom Kernel benutzten Filterregeln anzeigen. Um auch die
   Regelnummern zu sehen, muss -n angegeben werden. Zum Beispiel zeigt
   ipfstat -on die Tabelle fu:r ausgehende Regeln und die Regelnummer an:

 @1 pass out on xl0 from any to any
 @2 block out on dc0 from any to any
 @3 pass out quick on dc0 proto tcp/udp from any to any keep state

   Wenn Sie der Regel ein -h voranstellen, wird der Za:hler fu:r die
   jeweilige Regel ausgegeben. Zum Beispiel gibt ipfstat -oh die ausgehenden
   Regeln inklusive der Za:hler aus:

 2451423 pass out on xl0 from any to any
 354727 block out on dc0 from any to any
 430918 pass out quick on dc0 proto tcp/udp from any to any keep state

   Benutzen Sie ipfstat -t um die Zustandstabelle in einem top(1) a:hnlichen
   Format anzuzeigen. Unterliegt die Firewall einem Angriff, bietet diese
   Option die Mo:glichkeit, die entsprechenden Pakete zu identifizieren. Mit
   den optionalen Flags ko:nnen IP-Adressen, Ports oder Protokolle in
   Echtzeit u:berwacht werden. Lesen Sie ipfstat(8) fu:r weitere
   Informationen.

  29.5.6. IPF Protokollierung

   IPF entha:lt mit ipmon ein Werkzeug, mit dem die Protokolle der Firewall
   in menschenlesbarer Form gespeichert werden ko:nnen. Dies erfordert
   jedoch, dass options IPFILTER_LOG in die Kernelkonfigurationsdatei
   hinzugefu:gt wird. Folgen Sie dazu den Anweisungen in Kapitel 8,
   Konfiguration des FreeBSD-Kernels.

   Um eine kontinuierliche Protokolldatei bereitzustellen, la:uft dieses
   Kommando normalerweise im Daemon-Modus, damit auch a:ltere Ereignisse
   nachverfolgt werden ko:nnen. Da FreeBSD mit syslogd(8) ein Werkzeug
   besitzt, das automatisch Protokolldateien rotiert, wird in der
   Voreinstellung fu:r ipmon_flags -Ds in rc.conf verwendet:

 ipmon_flags="-Ds" # D = start as daemon
                   # s = log to syslog
                   # v = log tcp window, ack, seq
                   # n = map IP & port to names

   Protokollierung bietet die im Nachhinein die Mo:glichkeit festzustellen,
   welche Pakete verworfen wurden, von welchen Adressen diese Pakete kamen
   und wohin sie gehen sollten. Diese Informationen sind hilfreich beim
   Aufspu:ren von Angreifern.

   Nachdem die Protokollierung in /etc/rc.conf aktiviert und mit service
   ipmon start gestartet wurde, wird IPF Regeln aufzeichnen, welche das
   Schlu:sselwort log enthalten. Der Firewalladministrator entscheidet,
   welche Regeln protokolliert werden. In der Regel werden nur geblockte
   Pakete protokolliert. Es ist u:blich, das Schlu:sselwort log in der
   letzten Regel des Regelsatzes mit aufzunehmen. Dies macht es mo:glich,
   alle Pakete zu sehen, die mit keiner Regel des Regelsatzes
   u:bereinstimmten.

   In der Voreinstellung verwendet ipmon -Ds local0 als Protokoll-Facility.
   Die folgenden Level ko:nnen verwendet werden, um die erfassten Daten
   weiter aufzuspalten:

 LOG_INFO - packets logged using the "log" keyword as the action rather than pass or block.
 LOG_NOTICE - packets logged which are also passed
 LOG_WARNING - packets logged which are also blocked
 LOG_ERR - packets which have been logged and which can be considered short due to an incomplete header

   Damit IPF alle Daten protokolliert, legen Sie zuna:chst eine neue Datei
   /var/log/ipfilter.log an:

 # touch /var/log/ipfilter.log

   Um alle Nachrichten in der angegebenen Datei zu protokollieren, fu:gen Sie
   den folgenden Eintrag in /etc/syslog.conf ein:

 local0.* /var/log/ipfilter.log

   Fu:hren Sie service syslogd reload aus, damit syslogd(8) /etc/syslog.conf
   neu einliest, um die A:nderungen zu aktivieren.

   Denken Sie daran, auch /etc/newsyslog.conf anzupassen, damit das neue
   Protokoll rotiert wird.

   Die von ipmon generierten Nachrichten bestehen aus Daten, welche durch
   Leerzeichen getrennt sind. Alle Nachrichten enthalten die folgenden
   Felder:

    1. Das Datum, an dem das Paket empfangen wurde.

    2. Die Uhrzeit, wann das Paket empfangen wurde. Das Format ist HH:MM:SS.F
       (Stunden, Minuten, Sekunden und Sekundenbruchteile).

    3. Der Name der Schnittstelle, die das Paket verarbeitet hat.

    4. Die Gruppen- und Regelnummer im Format @0:17.

    5. Die Aktion: p fu:r durchgelassene Pakete, b fu:r blockierte Pakete, S
       fu:r kurze Pakete, n fu:r Pakete auf die keine Regel zutraf und L fu:r
       Pakete die protokolliert wurden.

    6. Die Adressen werden in drei Felder unterteilt: die Quelladresse und
       der Port getrennt durch Komma, das Zeichen ->, sowie die Zieladresse
       und Port. Zum Beispiel 209.53.17.22,80 -> 198.72.220.17,1722.

    7. PR, gefolgt vom Namen oder Nummer des Protokolls. Zum Beispiel PR tcp.

    8. len, gefolgt von der Gro:sse des Headers und der Gesamtgro:sse des
       Pakets. Zum Beispiel len 20 40.

   Wenn es sich beim dem Paket um ein TCP-Paket handelt, gibt es ein
   zusa:tzliches Feld, das mit einem Bindestrich beginnt und die Buchstaben
   der entsprechenden Flags entha:lt. Eine Liste der Flags und deren
   Buchstaben finden Sie in ipf(5).

   Wenn es sich beim dem Paket um ein ICMP-Paket handelt, gibt es zwei
   zusa:tzliche Felder: das erste Feld ist immer "icmp" und das zweite Feld
   entha:lt die ICMP-Nachricht und den Nachrichten-Code, getrennt durch einen
   Schra:gstrich. Beispielswiese icmp 3/3 fu:r die Nachricht Port
   unreachable.

Kapitel 30. Weiterfu:hrende Netzwerkthemen

   U:bersetzt von Johann Kois.
   U:berarbeitet von Bjo:rn Heidotting.
   Inhaltsverzeichnis

   30.1. U:bersicht

   30.2. Gateways und Routen

   30.3. Drahtlose Netzwerke

   30.4. USB Tethering

   30.5. Bluetooth

   30.6. LAN-Kopplung mit einer Bridge

   30.7. Link-Aggregation und Failover

   30.8. Plattenloser Betrieb mit PXE

   30.9. IPv6

   30.10. Common Address Redundancy Protocol (CARP)

   30.11. VLANs

30.1. U:bersicht

   Dieses Kapitel beschreibt verschiedene weiterfu:hrende Netzwerkthemen.

   Nachdem Sie dieses Kapitel gelesen haben, werden Sie

     * Die Grundlagen von Gateways und Routen kennen.

     * Wissen, wie man USB Tethering einrichtet.

     * Bluetooth(R)- sowie drahtlose, der Norm IEEE(R) 802.11 entsprechende,
       Gera:te mit FreeBSD verwenden ko:nnen.

     * Eine Bridge unter FreeBSD einrichten ko:nnen.

     * Wissen, wie man mithilfe von PXE u:ber ein Netzwerk von einem NFS
       Root-Dateisystem bootet.

     * IPv6 auf einem FreeBSD-Rechner einrichten ko:nnen.

     * Das Common Address Redundancy Protocol (CARP) unter FreeBSD einsetzen
       ko:nnen.

     * Wissen, wie VLANs unter FreeBSD konfiguriert werden.

   Bevor Sie dieses Kapitel lesen, sollten Sie

     * Die Grundlagen der /etc/rc-Skripte verstanden haben.

     * Mit der grundlegenden Netzwerkterminologie vertraut sein.

     * Einen neuen FreeBSD-Kernel konfigurieren und installieren ko:nnen
       (Kapitel 8, Konfiguration des FreeBSD-Kernels).

     * Wissen, wie man zusa:tzliche Software von Drittherstellern installiert
       (Kapitel 4, Installieren von Anwendungen: Pakete und Ports).

30.2. Gateways und Routen

   Beigetragen von Coranth Gryphon.

   Der Mechanismus mit dem ein Rechner einen Rechner u:ber ein Netzwerk
   finden kann, wird als Routing bezeichnet. Eine "Route" besteht aus einem
   definierten Adresspaar: Einem "Ziel" und einem "Gateway". Die Route zeigt
   an, dass Pakete u:ber das Gateway zum Ziel gelangen ko:nnen. Es gibt drei
   Arten von Zielen: Einzelne Rechner (Hosts), Subnetze und das
   "Standard"ziel. Die "Standardroute" wird verwendet, wenn keine andere
   Route zutrifft. Ausserdem gibt es drei Arten von Gateways: Einzelne
   Rechner (Hosts), Schnittstellen (Interfaces, auch als "Links" bezeichnet),
   sowie Ethernet Hardware-Adressen (MAC). Bekannte Adressen werden in einer
   Routingtabelle gespeichert.

   Dieser Abschnitt bietet einen U:berblick u:ber die Grundlagen des
   Routings. Er demonstriert, wie ein FreeBSD-System als Router konfiguriert
   werden kann und bietet einige Tipps zur Fehlerbehebung.

  30.2.1. Grundlagen des Routings

   netstat(1) zeigt die Routingtabellen eines FreeBSD-Systems an:

 % netstat -r
 Routing tables

 Internet:
 Destination      Gateway            Flags     Refs     Use     Netif Expire
 default          outside-gw         UGS        37      418       em0
 localhost        localhost          UH          0      181       lo0
 test0            0:e0:b5:36:cf:4f   UHLW        5    63288       re0     77
 10.20.30.255     link#1             UHLW        1     2421
 example.com      link#1             UC          0        0
 host1            0:e0:a8:37:8:1e    UHLW        3     4601       lo0
 host2            0:e0:a8:37:8:1e    UHLW        0        5       lo0 =>
 host2.example.com link#1            UC          0        0
 224              link#1             UC          0        0

   Die Eintra:ge in diesem Beispiel sind wie folgt:

   default

           Die erste Route in der Ausgabe gibt die Standardroute (default)
           an. Wenn sich der lokale Rechner mit einem entfernten Rechner
           verbinden will, wird die Routingtabelle u:berpru:ft, um
           festzustellen, ob bereits ein bekannter Pfad vorhanden ist. Wird
           fu:r den entfernten Rechner ein Eintrag in der Routingtabelle
           gefunden, so pru:ft das System ob es sich u:ber die angegebene
           Schnittstelle verbinden kann.

           Wenn das Zielsystem mit keinem Eintrag u:bereinstimmt, oder wenn
           alle bekannten Routen fehlschlagen, verwendet das System die
           Standardroute. Fu:r die Rechner im lokalen Netzwerk ist das Feld
           Gateway auf das System gesetzt, welches direkt mit dem Internet
           verbunden ist. UG in der Spalte Flags zeigt an, dass das Gateway
           einsatzbereit ist.

           Die Standardroute fu:r einen Rechner, der selbst als Gateway zur
           Aussenwelt fungiert, ist der Gateway-Rechner des Internetanbieters
           (ISP).

   localhost

           Die zweite Route zeigt die localhost Route. Die festgelegte
           Schnittstelle in der Netif-Spalte fu:r localhost ist lo0, das auch
           als loopback-Gera:t bekannt ist. Das bedeutet, dass der gesamte
           Datenverkehr fu:r dieses Ziel intern bleibt, anstatt ihn u:ber ein
           Netzwerk zu versenden.

   MAC-Adresse

           Bei den mit 0:e0: beginnenden Adressen handelt es sich um
           MAC-Adressen. FreeBSD identifiziert Rechner im lokalen Netz, im
           Beispiel test0, automatisch und fu:gt eine direkte Route u:ber die
           Ethernet-Schnittstelle re0 zu diesem Rechner hinzu. Ausserdem
           existiert in der Spalte Expire ein Timeout, der verwendet wird,
           wenn dieser Rechner in einem definierten Zeitraum nicht reagiert.
           Wenn dies passiert, wird die Route zu diesem Rechner automatisch
           gelo:scht. Rechner im lokalen Netz werden u:ber das Routing
           Information Protocol (RIP) identifiziert, welches den ku:rzesten
           Weg zu den jeweiligen Rechnern berechnet.

   Subnetz

           FreeBSD wird automatisch Subnetzrouten fu:r das lokale Subnetz
           hinzufu:gen. In diesem Beispiel ist 10.20.30.255 die
           Broadcast-Adresse fu:r das Subnetz 10.20.30, und example.com ist
           der zu diesem Subnetz geho:rige Domainname. Das Ziel link#1
           bezieht sich auf die erste Ethernet-Karte im Rechner.

           Routen fu:r Rechner im lokalen Netz und lokale Subnetze werden
           automatisch durch den routed(8) Daemon konfiguriert. Ist dieser
           nicht gestartet, existieren nur statische Routen, die vom
           Administrator definiert werden.

   Host

           Die Zeile host1 bezieht sich auf den Rechner, der durch seine
           Ethernetadresse bekannt ist. Da es sich um den sendenden Rechner
           handelt, verwendet FreeBSD automatisch das Loopback-Gera:t (lo0),
           anstatt den Datenverkehr u:ber die Ethernet-Schnittstelle zu
           senden.

           Die zwei host2 Zeilen repra:sentieren Aliase, die mit ifconfig(8)
           erstellt wurden. Das Symbol => nach der lo0-Schnittstelle sagt
           aus, dass zusa:tzlich zur Loopback-Adresse auch ein Alias
           eingestellt ist. Solche Routen sind nur auf Rechnern vorhanden,
           die den Alias bereitstellen. Alle anderen Rechner im lokalen Netz
           haben fu:r solche Routen nur eine link#1 Zeile.

   224

           Die letzte Zeile (Zielsubnetz 224) behandelt Multicasting.

   Schliesslich gibt es fu:r Routen noch verschiedene Attribute, die sich in
   der Spalte Flags befinden. Tabelle 30.1, "Allgemeine Attribute in
   Routingtabellen" fasst einige dieser Flags und deren Bedeutung zusammen:

   Tabelle 30.1. Allgemeine Attribute in Routingtabellen

   Attribut                             Bedeutung                             
   U        Die Route ist aktiv (up).                                         
   H        Das Ziel der Route ist ein einzelner Rechner (Host).              
   G        Alle Daten, die an dieses Ziel gesendet werden, werden von dem    
            Gateway an ihr jeweiliges Ziel weitergeleitet.                    
   S        Diese Route wurde statisch konfiguriert.                          
            Erzeugt eine neue Route, basierend auf der Route fu:r den         
   C        Rechner, mit dem wir uns verbinden. Diese Routenart wird          
            normalerweise fu:r lokale Netzwerke verwendet.                    
   W        Eine Route, die automatisch konfiguriert wurde. Sie basiert auf   
            einer lokalen Netzwerkroute (Clone).                              
   L        Die Route beinhaltet einen Verweis auf eine Ethernetkarte (Link). 

   In FreeBSD kann die Standardroute durch die Angabe der IP-Adresse des
   Standard-Gateways in /etc/rc.conf definiert werden:

 defaultrouter="10.20.30.1"

   Die Standardroute kann mit route auch manuell gesetzt werden:

 # route add default 10.20.30.1

   Beachten Sie, dass manuell hinzugefu:gte Routen bei einem Neustart des
   Systems verloren gehen. Weitere Informationen zum Bearbeiten von
   Netzwerk-Routingtabellen finden Sie in route(8).

  30.2.2. Statische Routen einrichten

   Beigetragen von Al Hoang.

   Ein FreeBSD-System kann als Standard-Gateway bzw. Router fu:r ein Netzwerk
   konfiguriert werden, wenn es sich um einen Dual-Homed-Host handelt. Ein
   Dual-Homed-Host ist ein Rechner, der sich in mindestens zwei verschiedenen
   Netzwerken befindet. Typischerweise ist jedes Netzwerk u:ber eine separate
   Netzwerkschnittstelle verbunden. Mit IP Aliasing ko:nnen mehrere Adressen,
   die jeweils zu einem andren Subnetz geho:ren, an eine physikalische
   Schnittstelle gebunden werden.

   Damit Pakete zwischen den Schnittstellen weitergeleitet werden ko:nnen,
   muss das FreeBSD-System als Router konfiguriert werden. Internetstandards
   und gute Ingenieurspraxis sorgten dafu:r, dass diese Funktion in FreeBSD
   in der Voreinstellung deaktiviert ist. Sie kann jedoch aktiviert werden,
   indem folgende Zeile in /etc/rc.conf hinzugefu:gt wird:

 gateway_enable="YES"          # Auf YES setzen, wenn der Rechner als Gateway arbeiten soll

   Um das Routing zu aktivieren, setzen Sie die sysctl(8)-Variable
   net.inet.ip.forwarding auf 1. Um das Routing zu stoppen, muss die Variable
   wieder auf 0 gesetzt werden.

   Die Routingtabelle eines Routers beno:tigt zusa:tzliche Routen, damit er
   weiss, wie er andere Netzwerke erreichen kann. Die Routen ko:nnen entweder
   manuell als statische Routen hinzugefu:gt werden, oder aber der Router
   lernt automatisch die Routen anhand des Routing-Protokolls. Statische
   Routen eignen sich fu:r kleine Netzwerke und dieser Abschnitt beschreibt,
   wie Sie eine statische Route fu:r ein kleines Netzwerk hinzufu:gen.

  Anmerkung:

   In grossen Netzwerken sind statische Routen schlecht skalierbar. FreeBSD
   beinhaltet den BSD-Routing-Daemon routed(8), der die Protokolle RIP
   (Version 1 und Version 2) sowie IRDP unterstu:tzt. Die Routing-Protokolle
   BGP und OSPF ko:nnen u:ber den Port oder das Paket net/zebra installiert
   werden.

   Nehmen wir an, dass wir u:ber folgendes Netzwerk verfu:gen:

   RouterA, ein FreeBSD-Rechner, dient als Router fu:r den Zugriff auf das
   Internet. Die Standardroute ist auf 10.0.0.1 gesetzt, damit ein Zugriff
   auf das Internet mo:glich wird. RouterB ist bereits konfiguriert, da er
   192.168.1.1 als Standard-Gateway benutzt.

   Bevor die statischen Routen hinzugefu:gt werden, sieht die Routingtabelle
   auf RouterA in etwa so aus:

 % netstat -nr
 Routing tables

 Internet:
 Destination        Gateway            Flags    Refs      Use  Netif  Expire
 default            10.0.0.1           UGS         0    49378    xl0
 127.0.0.1          127.0.0.1          UH          0        6    lo0
 10.0.0/24          link#1             UC          0        0    xl0
 192.168.1/24       link#2             UC          0        0    xl1

   Mit dieser Routingtabelle hat RouterA keine Route zum Netzwerk
   192.168.2.0/24. Der folgende Befehl wird das interne Netz 2 in die
   Routingtabelle von RouterA aufnehmen und dabei 192.168.1.2 als na:chsten
   Zwischenschritt (Hop) verwenden:

 # route add -net 192.168.2.0/24 192.168.1.2

   Ab sofort kann RouterA alle Rechner des Netzwerks 192.168.2.0/24
   erreichen. Allerdings gehen die Routing-Informationen verloren, wenn das
   FreeBSD-System neu gestartet wird. Um statische Routen dauerhaft
   einzurichten, mu:ssen diese in /etc/rc.conf eingetragen werden:

 # Add Internal Net 2 as a persistent static route
 static_routes="internalnet2"
 route_internalnet2="-net 192.168.2.0/24 192.168.1.2"

   Die Variable static_routes entha:lt eine Reihe von Strings, die durch
   Leerzeichen getrennt sind. Jeder String bezieht sich auf den Namen einer
   Route. Die Variable route_internalnet2 entha:lt die statische Route.

   Wird mit der Variablen static_routes mehr als eine Variable angegeben, so
   werden auch mehrere Routen angelegt. Im folgenden Beispiel werden
   statische Routen zu den Netzwerken 192.168.0.0/24 und 192.168.1.0/24
   angelegt.

 static_routes="net1 net2"
 route_net1="-net 192.168.0.0/24 192.168.0.1"
 route_net2="-net 192.168.1.0/24 192.168.1.1"

  30.2.3. Problembehandlung

   Wenn ein Adressraum einem Netzwerk zugeordnet wird, konfiguriert der
   Dienstanbieter seine Routing-Tabellen, so dass der gesamte Verkehr fu:r
   das Netzwerk u:ber die Verbindung zu der Seite gesendet wird. Aber woher
   wissen externe Webseiten, dass sie die Daten an das Netzwerk des ISP
   senden sollen?

   Es gibt ein System, das alle zugewiesenen Adressra:ume verwaltet und die
   Verbindung zum Internet-Backbone definiert. Der "Backbone" ist das Netz
   aus Hauptverbindungen, die den Internetverkehr in der ganzen Welt
   transportieren und verteilen. Jeder Backbone-Rechner verfu:gt u:ber eine
   Kopie von Master-Tabellen, die den Verkehr fu:r ein bestimmtes Netzwerk
   hierarchisch vom Backbone u:ber eine Kette von Dienstanbietern bis hin zu
   einem bestimmten Netzwerk leiten.

   Es ist die Aufgabe des Dienstanbieters, den Backbone-Seiten mitzuteilen,
   dass sie mit einer Seite verbunden wurden. Dieser Vorgang wird als
   Bekanntmachung von Routen (routing propagation) bezeichnet.

   Manchmal kommt es zu Problemen bei der Bekanntmachung von Routen, und
   einige Seiten sind nicht in der Lage, sich zu verbinden. Der vielleicht
   nu:tzlichste Befehl, um festzustellen wo das Routing nicht funktioniert,
   ist traceroute. Das Programm ist nu:tzlich, falls ping fehlschla:gt.

   Rufen Sie traceroute mit dem Namen des entfernten Rechners auf, mit dem
   eine Verbindung aufgebaut werden soll. Die Ausgabe zeigt die
   Gateway-Rechner entlang des Verbindungspfades an. Schliesslich wird der
   Zielrechner erreicht oder es kommt zu einem Verbindungsabbruch. Weitere
   Informationen finden Sie in traceroute(8).

  30.2.4. Multicast-Routing

   FreeBSD unterstu:tzt sowohl Multicast-Anwendungen als auch
   Multicast-Routing. Multicast-Anwendungen beno:tigen keine spezielle
   Konfiguration, um auf FreeBSD lauffa:hig zu sein. Damit Multicast-Routing
   unterstu:tzt wird, muss die folgende Option in der Kernelkonfiguration
   aktiviert werden:

 options MROUTING

   Der Multicast-Routing-Daemon mrouted kann als Port oder Paket net/mroute
   installiert werden. Dieser Daemon implementiert das DVMRP
   Multicast-Routing-Protokoll. Um die Tunnel und DVMRP einzurichten, muss
   /usr/local/etc/mrouted.conf bearbeitet werden. Bei der Installation von
   mrouted wird auch map-mbone und mrinfo sowie die zugeho:rigen Manualpages
   installiert, in denen Sie auch Konfigurationsbeispiele finden ko:nnen.

  Anmerkung:

   DVMRP wurde in vielen Multicast-Installationen weitgehend durch das
   PIM-Protokoll ersetzt. Weitere Informationen finden Sie in pim(4).

30.3. Drahtlose Netzwerke

   Loader, Marc Fonvieille und Murray Stokely.

  30.3.1. Grundlagen

   Die meisten drahtlosen Netzwerke basieren auf dem Standard IEEE(R) 802.11.
   Ein einfaches drahtloses Netzwerk besteht aus Stationen, die im 2,4 GHz-
   oder im 5 GHz-Band miteinander kommunizieren. Es ist aber auch mo:glich,
   dass regional andere Frequenzen, beispielsweise im 2,3 GHz- oder
   4,9 GHz-Band, verwendet werden.

   802.11-Netzwerke ko:nnen auf zwei verschiedene Arten aufgebaut sein: Im
   Infrastruktur-Modus agiert eine Station als Master, mit dem sich alle
   anderen Stationen verbinden. Die Summe aller Stationen wird als Basic
   Service Set (BSS), die Master-Station hingegen als Access Point (AP)
   bezeichnet. In einem BSS la:uft jedwede Kommunikation u:ber den Access
   Point. Die zweite Form drahtloser Netzwerke sind die sogenannten
   Ad-hoc-Netzwerke (auch als IBSS bezeichnet), in denen es keinen Access
   Point gibt und in denen die Stationen direkt miteinander kommunizieren.

   Die ersten 802.11-Netzwerke arbeiteten im 2,4 GHz-Band und nutzten dazu
   Protokolle der IEEE(R)-Standards 802.11 sowie 802.11b. Diese Standards
   legen unter anderem Betriebsfrequenzen sowie Merkmale des MAC-Layers (wie
   Frames und Transmissionsraten) fest. Spa:ter kam der Standard 802.11a
   hinzu, der im 5 GHz-Band, im Gegensatz zu den ersten beiden Standards aber
   mit unterschiedlichen Signalmechanismen und ho:heren Transmissionsraten
   arbeitet. Der neueste Standard 802.11g implementiert die Signal- und
   Transmissionsmechanismen von 802.11a im 2,4 GHz-Band, ist dabei aber
   abwa:rtskompatibel zu 802.11b-Netzwerken.

   Unabha:ngig von den zugrundeliegenden Transportmechanismen verfu:gen
   802.11-Netzwerke u:ber diverse Sicherheitsmechanismen. Der urspru:ngliche
   802.11-Standard definierte lediglich ein einfaches Sicherheitsprotokoll
   namens WEP. Dieses Protokoll verwendet einen fixen, gemeinsam verwendeten
   Schlu:ssel sowie die RC4-Kryptografie-Chiffre, um Daten verschlu:sselt
   u:ber das drahtlose Netzwerk zu senden. Alle Stationen des Netzwerks
   mu:ssen sich auf den gleichen fixen Schlu:ssel einigen, um miteinander
   kommunizieren zu ko:nnen. Dieses Schema ist sehr leicht zu knacken und
   wird deshalb heute kaum mehr eingesetzt. Aktuelle Sicherheitsmechanismen
   bauen auf dem Standard IEEE(R) 802.11i auf, der neue kryptographische
   Schlu:ssel (Chiffren), ein neues Protokoll fu:r die Anmeldung von
   Stationen an einem Access Point, sowie Mechanismen zum Austausch von
   Schlu:sseln als Vorbereitung der Kommunikation zwischen verschiedenen
   Gera:ten festlegt. Kryptografische Schlu:ssel werden in regelma:ssigen
   Absta:nden aktualisiert. Ausserdem gibt es Mechanismen zur Feststellung
   und Pra:vention von Einbruchsversuchen. Ein weiteres ha:ufig verwendetes
   Sicherheitsprotokoll ist WPA. Dabei handelt es sich um einen Vorla:ufer
   von 802.11i, der von einem Industriekonsortium als Zwischenlo:sung bis zur
   endgu:ltigen Verabschiedung von 802.11i entwickelt wurde. WPA definiert
   eine Untergruppe der Anforderungen des 802.11i-Standards und ist fu:r den
   Einsatz in a:lterer Hardware vorgesehen. WPA beno:tigt nur den
   TKIP-Chiffre, welcher auf dem urspru:nglichen WEP-Code basiert. 802.11i
   erlaubt zwar auch die Verwendung von TKIP, beno:tigt aber zusa:tzlich eine
   sta:rkere Chiffre (AES-CCM) fu:r die Datenverschlu:sselung. AES war fu:r
   WPA nicht vorgesehen, weil man es als zu rechenintensiv fu:r den Einsatz
   in a:lteren Gera:ten ansah.

   Ein weiterer zu beachtender Standard ist 802.11e. Dieser definiert
   Protokolle zur U:bertragung von Multimedia-Anwendungen, wie das Streaming
   von Videodateien oder Voice-over-IP (VoIP) in einem 802.11-Netzwerk.
   Analog zu 802.11i verfu:gt auch 802.11e u:ber eine vorla:ufige
   Spezifikation namens WMM (urspru:nglich WME), die von einem
   Industriekonsortium als Untergruppe von 802.11e spezifiziert wurde, um
   Multimedia-Anwendungen bereits vor der endgu:ltigen Verabschiedung des
   802.11e-Standards implementieren zu ko:nnen. 802.11e sowie WME/WMM
   erlauben eine Priorita:tenvergabe beim Datentransfer in einem drahtlosen
   Netzwerk. Mo:glich wird dies durch den Einsatz von Quality of
   Service-Protokollen (QoS) und erweiterten Medienzugriffsprotokollen.
   Werden diese Protokolle korrekt implementiert, erlauben sie hohe
   Datenu:bertragungsraten und einen priorisierten Datenfluss.

   FreeBSD unterstu:tzt die Standards 802.11a, 802.11b und 802.11g. Ebenfalls
   unterstu:tzt werden WPA sowie die Sicherheitsprotokolle gema:ss 802.11i
   (sowohl fu:r 11a, 11b als auch 11g). QoS und Verkehrspriorisierung, die
   von den WME/WMM-Protokollen beno:tigt werden, werden fu:r einen begrenzten
   Satz von drahtlosen Gera:ten unterstu:tzt.

  30.3.2. Schnellstartanleitung

   Ha:ufig soll ein Computer an ein vorhandenes Drahtlosnetzwerk
   angeschlossen werden. Diese Prozedur zeigt die dazu erforderlichen
   Schritte.

    1. Besorgen Sie sich vom Netzwerkadministrator die SSID (Service Set
       Identifier) und den PSK (Pre Shared Key) fu:r das Drahtlosnetzwerk.

    2. Ermitteln Sie den drahtlosen Adapter. Der GENERIC-Kernel von FreeBSD
       entha:lt Treiber fu:r viele ga:ngige Adapter. Wenn der drahtlose
       Adapter eines dieser Modelle ist, wird das in der Ausgabe von
       ifconfig(8) angezeigt:

 % ifconfig | grep -B3 -i wireless

       In FreeBSD 11 und neueren Versionen verwenden Sie stattdessen diesen
       Befehl:

 % sysctl net.wlan.devices

       Wenn der drahtlose Adapter nicht aufgefu:hrt wird, ko:nnte ein
       zusa:tzliches Kernelmodul erforderlich sein. Es besteht jedoch auch
       die Mo:glichkeit, dass der Adapter von FreeBSD nicht unterstu:tzt
       wird.

       Dieses Beispiel verwendet einen drahtlosen Atheros-Adapter ath0.

    3. Fu:gen Sie in /etc/wpa_supplicant.conf einen Eintrag fu:r das Netzwerk
       hinzu. Wenn die Datei nicht existiert, mu:ssen Sie diese erstellen.
       Ersetzen Sie myssid und psk durch die SSID und den PSK. Diese
       Informationen werden vom Netzwerkadministrator zur Verfu:gung
       gestellt.

 network={
         ssid="myssid"
         psk="mypsk"
 }

    4. Fu:gen Sie die entsprechenden Eintra:ge in /etc/rc.conf ein, um das
       Netzwerk beim Start zu konfigurieren:

 wlans_ath0="wlan0"
 ifconfig_wlan0="WPA SYNCDHCP"

    5. Starten Sie den Computer oder den Netzwerkdienst neu, um sich mit dem
       Netzwerk zu verbinden:

 # service netif restart

  30.3.3. Basiskonfiguration

    30.3.3.1. Kernelkonfiguration

   Um ein drahtloses Netzwerk zu nutzen, wird eine drahtlose Netzwerkkarte
   beno:tigt und ein Kernel, der drahtlose Netzwerke unterstu:tzt. Der Kernel
   unterstu:tzt den Einsatz von Kernelmodulen. Daher muss nur die
   Unterstu:tzung fu:r die verwendeten Gera:te aktiviert werden.

   Die meisten drahtlosen Gera:te verwenden Bauteile von Atheros und werden
   deshalb vom ath(4)-Treiber unterstu:tzt. Um diesen Treiber zu verwenden,
   muss die folgende Zeile in /boot/loader.conf hinzugefu:gt werden:

 if_ath_load="YES"

   Der Atheros-Treiber besteht aus drei Teilen: dem Treiber selbst (ath(4)),
   dem Hardware-Support-Layer fu:r die chip-spezifischen Funktionen
   (ath_hal(4)) sowie einem Algorithmus zur Auswahl der
   Frame-U:bertragungsrate (ath_rate_sample). Wenn diese Unterstu:tzung als
   Kernelmodul geladen wird, ku:mmert sich das Modul automatisch um
   Abha:ngigkeiten. Um die Unterstu:tzung fu:r ein anderes drahtloses Gera:t
   zu laden, geben Sie das entsprechende Modul fu:r dieses Gera:t an. Dieses
   Beispiel zeigt die Verwendung von Gera:ten, die auf Bauteilen von Intersil
   Prism basieren und den Treiber wi(4) beno:tigen:

 if_wi_load="YES"

  Anmerkung:

   Die Beispiele in diesem Abschnitt verwenden den ath(4)-Treiber. Verwenden
   Sie ein anderes Gera:t, muss der Gera:tename an die Konfiguration
   angepasst werden. Eine Liste aller verfu:gbaren Treiber und unterstu:tzten
   drahtlosen Gera:te finden sich in den FreeBSD Hardware Notes unter Release
   Information der FreeBSD Homepage. Gibt es keinen nativen FreeBSD-Treiber
   fu:r das drahtlose Gera:t, kann mo:glicherweise mit NDIS ein
   Windows(R)-Treiber verwendet werden.

   Zusa:tzlich mu:ssen die Module zur Verschlu:sselung des drahtlosen
   Netzwerks geladen werden. Diese werden normalerweise dynamisch vom
   wlan(4)-Modul geladen. Im folgenden Beispiel erfolgt allerdings eine
   manuelle Konfiguration. Folgende Module sind verfu:gbar: wlan_wep(4),
   wlan_ccmp(4) und wlan_tkip(4). Sowohl wlan_ccmp(4) als auch wlan_tkip(4)
   werden nur beno:tigt, wenn WPA und/oder die Sicherheitsprotokolle von
   802.11i verwendet werden. Wenn das Netzwerk keine Verschlu:sselung
   verwendet, wird die wlan_wep(4)-Unterstu:tzung nicht beno:tigt. Um diese
   Module beim Systemstart zu laden, fu:gen Sie folgende Zeilen in
   /boot/loader.conf ein:

 wlan_wep_load="YES"
 wlan_ccmp_load="YES"
 wlan_tkip_load="YES"

   Sobald diese Eintra:ge in /boot/loader.conf vorhanden sind, muss das
   FreeBSD-System neu gestartet werden. Alternativ ko:nnen die Kernelmodule
   auch manuell mit kldload(8) geladen werden.

  Anmerkung:

   Benutzer, die keine Kernelmodule verwenden wollen, ko:nnen die beno:tigten
   Treiber auch in den Kernel kompilieren. Dazu mu:ssen die folgenden Zeilen
   in die Kernelkonfigurationsdatei aufgenommen werden:

 device wlan              # 802.11 support
 device wlan_wep          # 802.11 WEP support
 device wlan_ccmp         # 802.11 CCMP support
 device wlan_tkip         # 802.11 TKIP support
 device wlan_amrr         # AMRR transmit rate control algorithm
 device ath               # Atheros pci/cardbus NIC's
 device ath_hal           # pci/cardbus chip support
 options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
 device ath_rate_sample   # SampleRate tx rate control for ath

   Mit diesen Informationen in der Kernelkonfigurationsdatei kann der Kernel
   neu gebaut, und das FreeBSD-System anschliessend neu gestartet werden.

   Informationen u:ber das drahtlose Gera:t sollten in den Boot-Meldungen
   folgendermassen angezeigt werden:

 ath0: <Atheros 5212> mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1
 ath0: [ITHREAD]
 ath0: AR2413 mac 7.9 RF2413 phy 4.5

  30.3.4. Infrastruktur-Modus

   Drahtlose Netzwerke werden in der Regel im Infrastruktur-Modus (BSS)
   betrieben. Dazu werden mehrere drahtlose Access Points zu einem
   gemeinsamen drahtlosen Netzwerk verbunden. Jedes dieser drahtlosen
   Netzwerke hat einen eigenen Namen, der als >SSID> bezeichnet wird. Alle
   Clients eines drahtlosen Netzwerks verbinden sich in diesem Modus mit
   einem Access Point.

    30.3.4.1. FreeBSD-Clients

      30.3.4.1.1. Einen Access Point finden

   Um nach verfu:gbaren drahtlosen Netzwerken zu suchen verwenden Sie
   ifconfig(8). Dieser Scanvorgang kann einen Moment dauern, da jede
   verfu:gbare Frequenz auf verfu:gbare Access Points hin u:berpru:ft werden
   muss. Nur der Super-User kann einen Scanvorgang starten:

 # ifconfig wlan0 create wlandev ath0
 # ifconfig wlan0 up scan
 SSID/MESH ID    BSSID              CHAN RATE   S:N     INT CAPS
 dlinkap         00:13:46:49:41:76   11   54M -90:96   100 EPS  WPA WME
 freebsdap       00:11:95:c3:0d:ac    1   54M -83:96   100 EPS  WPA

  Anmerkung:

   Die Netzwerkkarte muss in den Status up versetzt werden, bevor der erste
   Scanvorgang gestartet werden kann. Fu:r spa:tere Scans ist dies aber nicht
   mehr erforderlich.

   Als Ergebnis erhalten Sie eine Liste mit allen gefundenen
   BSS/IBSS-Netzwerken. Zusa:tzlich zum Namen des Netzwerks, der SSID, wird
   auch die BSSID ausgegeben. Dabei handelt es sich um die MAC-Adresse des
   Access Points. Das Feld CAPS gibt den Typ des Netzwerks sowie die
   Fa:higkeiten der Stationen innerhalb des Netzwerks an:

   Tabelle 30.2. Station Capability Codes

   Capability Code                         Bedeutung                          
                   Extended Service Set (ESS). Zeigt an, dass die Station     
   E               Teil eines Infrastruktur-Netzwerks ist, und nicht eines    
                   IBSS/Ad-hoc-Netzwerks.                                     
   I               IBSS/Ad-hoc-Netzwerk. Die Station ist Teil eines           
                   Ad-hoc-Netzwerks und nicht eines ESS-Netzwerks.            
                   Privacy. Alle Datenframes, die innerhalb des BSS           
   P               ausgetauscht werden, sind verschlu:sselt. Dieses BSS       
                   verwendet dazu kryptographische Verfahren wie WEP, TKIP    
                   oder AES-CCMP.                                             
                   Short Preamble. Das Netzwerk verwendet eine kurze          
                   Pra:ambel (definiert in 802.11b High Rate/DSSS PHY). Eine  
   S               kurze Pra:ambel verwendet ein 56 Bit langes Sync-Feld, im  
                   Gegensatz zu einer langen Pra:ambel, die ein 128 Bit       
                   langes Sync-Feld verwendet.                                
                   Short slot time. Das 802.11g-Netzwerk verwendet eine kurze 
   s               Slotzeit, da es in diesem Netzwerk keine veralteten        
                   (802.11b) Gera:te gibt.                                    

   Um eine Liste der bekannten Netzwerke auszugeben, verwenden Sie den
   folgenden Befehl:

 # ifconfig wlan0 list scan

   Diese Liste kann entweder automatisch durch das drahtlose Gera:t oder
   manuell durch eine scan-Aufforderung aktualisiert werden. Veraltete
   Informationen werden dabei automatisch entfernt.

      30.3.4.1.2. Basiseinstellungen

   Dieser Abschnitt beschreibt, wie Sie eine drahtlose Netzwerkkarte ohne
   Verschlu:sselung unter FreeBSD einrichten. Nachdem Sie sich mit den
   Informationen dieses Abschnitts vertraut gemacht haben, sollten Sie das
   drahtlose Netzwerk mit WPA verschlu:sseln.

   Das Einrichten eines drahtlosen Netzwerks erfolgt in drei Schritten: Der
   Auswahl eines Access Points, die Anmeldung der Station sowie der
   Konfiguration der IP-Adresse.

        30.3.4.1.2.1. Einen Access Point auswa:hlen

   Im Normalfall wird sich die Station automatisch mit einem der zur
   Verfu:gung stehenden Access Points verbinden. Dazu muss lediglich das
   drahtlose Gera:t aktiviert, oder in /etc/rc.conf eingetragen sein:

 wlans_ath0="wlan0"
 ifconfig_wlan0="DHCP"

   Stehen mehrere Access Points zur Verfu:gung, kann ein spezifischer durch
   Angabe der SSID gewa:hlt werden:

 wlans_ath0="wlan0"
 ifconfig_wlan0="ssid Ihre_SSID DHCP"

   Gibt es in einem Netzwerk mehrere Access Points mit der gleichen SSID, was
   das Routing vereinfacht, kann es notwendig sein, dass ein bestimmtes
   Gera:t verbunden werden muss. Dazu muss lediglich die BSSID des Access
   Points angeben werden. Die Angabe der SSID ist hierbei nicht zwingend
   notwendig:

 wlans_ath0="wlan0"
 ifconfig_wlan0="ssid Ihre_SSID bssid xx:xx:xx:xx:xx:xx DHCP"

   Es gibt noch weitere Mo:glichkeiten, den Zugriff auf bestimmte Access
   Point zu beschra:nken, beispielsweise durch die Begrenzung der Frequenzen,
   auf denen eine Station nach einem Access Point sucht. Sinnvoll ist ein
   solches Vorgehen beispielsweise, wenn das drahtlose Gera:t in
   verschiedenen Frequenzbereichen arbeiten kann, da in diesem Fall das
   Pru:fen aller Frequenzen sehr zeitintensiv sein kann. Um nur innerhalb
   eines bestimmten Frequenzbereichs nach einem Access Point zu suchen,
   verwenden Sie die Option mode:

 wlans_ath0="wlan0"
 ifconfig_wlan0="mode 11g ssid Ihre_SSID DHCP"

   In diesem Beispiel sucht das drahtlose Gera:t nur im 2,4 GHz-Band
   (802.11g), aber nicht innerhalb des 5 GHz-Bandes nach einem Access Point.
   Mit der Option channel kann eine bestimmte Frequenz vorgegeben werden, auf
   der gesucht werden soll. Die Option chanlist erlaubt die Angabe mehrerer
   erlaubter Frequenzen. Eine umfassende Beschreibung dieser Optionen finden
   Sie in ifconfig(8).

        30.3.4.1.2.2. Authentifizierung

   Sobald ein Access Point gefunden wurde, muss sich die Station am Access
   Point authentifizieren, bevor Daten u:bertragen werden ko:nnen. Dazu gibt
   es verschiedene Mo:glichkeiten. Am ha:ufigsten wird die sogenannte offene
   Authentifizierung verwendet. Dabei wird es jeder Station erlaubt, sich mit
   einem Netzwerk zu verbinden und Daten zu u:bertragen. Aus
   Sicherheitsgru:nden sollte diese Methode allerdings nur zu Testzwecken bei
   der erstmaligen Einrichtung eines drahtlosen Netzwerks verwendet werden.
   Andere Authentifizierungsmechanismen erfordern den Austausch
   kryptographischer Informationen, bevor sie die U:bertragung von Daten
   erlauben. Dazu geho:ren der Austausch fixer (vorher vereinbarter)
   Schlu:ssel oder Kennwo:rter, sowie der Einsatz komplexerer Verfahren mit
   Backend-Diensten wie RADIUS. Die offene Authentifizierung ist die
   Voreinstellung. Am zweitha:ufigsten kommt das im Abschnitt 30.3.4.1.3.1,
   "WPA-PSK" beschriebene WPA-PSK zum Einsatz, welches auch als WPA Personal
   bezeichnet wird.

  Anmerkung:

   Kommt eine Apple(R) AirPort(R) Extreme-Basisstation als Access Point zum
   Einsatz, muss sowohl die Shared-Key-Authentifizierung als auch ein
   WEP-Schlu:ssel konfiguriert werden. Die entsprechende Konfiguration
   erfolgt entweder in /etc/rc.conf oder u:ber das Programm
   wpa_supplicant(8). Fu:r eine einzelne AirPort(R)-Basisstation kann der
   Zugriff wie folgt konfiguriert werden:

 wlans_ath0="wlan0"
 ifconfig_wlan0="authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP"

   Normalerweise sollte Shared-Key-Authentifizierung nicht verwendet werden,
   da diese die Sicherheit des WEP-Schlu:ssel noch weiter verringert. Wenn
   WEP fu:r Kompatibilita:t mit a:lteren Gera:ten verwendet werden muss, ist
   es besser, WEP mit offener Authentifizierung zu verwenden. Weitere
   Informationen zu WEP finden Sie im Abschnitt 30.3.4.1.4, "WEP".

        30.3.4.1.2.3. Eine IP-Adresse u:ber DHCP beziehen

   Sobald ein Access Point ausgewa:hlt ist und die
   Authentifizierungsparameter festgelegt sind, wird eine IP-Adresse
   beno:tigt. In der Regel wird die IP-Adresse u:ber DHCP bezogen. Um dies zu
   erreichen, bearbeiten Sie /etc/rc.conf und fu:gen Sie DHCP fu:r das
   drahtlose Gera:t in die Konfiguration hinzu:

 wlans_ath0="wlan0"
 ifconfig_wlan0="DHCP"

   Das drahtlose Gera:t kann nun gestartet werden:

 # service netif start

   Nachdem das Gera:t aktiviert wurde, kann mit ifconfig(8) der Status des
   Gera:ts ath0 abgefragt werden:

 # ifconfig wlan0
 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         ether 00:11:95:d5:43:62
         inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
         media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
         status: associated
         ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76
         country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
         scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
         roam:rate 5 protmode CTS wme burst

   status: associated besagt, dass sich das Gera:t mit dem drahtlosen
   Netzwerk verbunden hat. bssid 00:13:46:49:41:76 ist die MAC-Adresse des
   Access Points und authmode OPEN zeigt an, dass die Kommunikation nicht
   verschlu:sselt wird.

        30.3.4.1.2.4. Statische IP-Adressen

   Wenn eine IP-Adresse nicht von einem DHCP-Server bezogen werden kann,
   vergeben Sie eine statische IP-Adresse. Ersetzten Sie dazu das oben
   gezeigte Schlu:sselwort DHCP durch die entsprechende IP-Adresse. Beachten
   Sie dabei, dass Sie die anderen Konfigurationsparameter nicht
   versehentlich vera:ndern:

 wlans_ath0="wlan0"
 ifconfig_wlan0="inet 192.168.1.100 netmask 255.255.255.0 ssid your_ssid_here"

      30.3.4.1.3. WPA

   Wi-Fi Protected Access (WPA) ist ein Sicherheitsprotokoll, das in
   802.11-Netzwerken verwendet wird, um die fehlende Authentifizierung und
   Schwa:chen von WEP zu vermeiden. WPA stellt das aktuelle
   802.1X-Authentifizierungsprotokoll dar und verwendet eine von mehreren
   Chiffren, um die Datensicherheit zu gewa:hrleisten. Die einzige Chiffre,
   die von WPA verlangt wird, ist Temporary Key Integrity Protocol (TKIP).
   TKIP ist eine Chiffre, die die von WEP verwendete RC4-Chiffre um
   Funktionen zur Pru:fung der Datenintegrita:t und zur Erkennung und
   Beka:mpfung von Einbruchsversuchen erweitert. TKIP ist durch
   Softwaremodifikationen auch unter veralteter Hardware lauffa:hig. Im
   Vergleich zu WEP ist WPA zwar sehr viel sicherer, es ist aber dennoch
   nicht vo:llig immun gegen Angriffe. WPA definiert mit AES-CCMP noch eine
   weitere Chiffre als Alternative zu TKIP. AES-CCMP, welches ha:ufig als
   WPA2 oder RSN bezeichnet wird, sollte bevorzugt eingesetzt werden.

   WPA definiert Authentifizierungs- und Verschlu:sselungsprotokolle. Die
   Authentifizierung erfolgt in der Regel u:ber eine der folgenden Techniken:
   802.1X gemeinsam mit einem Backend-Authentifizierungsdienst wie RADIUS,
   oder durch einen Minimal-Handshake zwischen der Station und dem Access
   Point mit einem vorher vereinbarten gemeinsamen Schlu:ssel. Die erste
   Technik wird als WPA Enterprise, die zweite hingegen als WPA Personal
   bezeichnet. Da sich der Aufwand fu:r das Aufsetzen eines
   RADIUS-Backend-Servers fu:r die meisten drahtlosen Netzwerke nicht lohnt,
   wird WPA in der Regel als WPA-PSK konfiguriert.

   Die Kontrolle der drahtlosen Verbindung sowie das Aushandeln des
   Schlu:ssel, oder die Authentifizierung mit einem Server, erfolgt u:ber
   wpa_supplicant(8). Dieses Programm beno:tigt eine Konfigurationsdatei,
   /etc/wpa_supplicant.conf. Weitere Informationen finden Sie in
   wpa_supplicant.conf(5).

        30.3.4.1.3.1. WPA-PSK

   WPA-PSK, das auch als WPA-Personal bekannt ist, basiert auf einem
   gemeinsamen, vorher vereinbarten Schlu:ssel (PSK), der aus einem Passwort
   generiert und danach als Master-Key des drahtlosen Netzwerks verwendet
   wird. Jeder Benutzer des drahtlosen Netzwerks verwendet daher den gleichen
   Schlu:ssel. WPA-PSK sollte nur in kleinen Netzwerken eingesetzt werden, in
   denen die Konfiguration eines Authentifizierungsservers nicht mo:glich
   oder erwu:nscht ist.

  Warnung:

   Achten Sie darauf, immer starke Passwo:rter zu verwenden, die ausreichend
   lang sind und auch Sonderzeichen enthalten, damit diese nicht leicht
   erraten oder umgangen werden ko:nnen.

   Der erste Schritt zum Einsatz von WPA-PSK ist die Konfiguration der SSID
   und des gemeinsamen Schlu:ssels des Netzwerks in /etc/wpa_supplicant.conf:

 network={
   ssid="freebsdap"
   psk="freebsdmall"
 }

   Danach wird in /etc/rc.conf definiert, dass WPA zur Verschlu:sselung
   eingesetzt werden soll und dass die IP-Adresse u:ber DHCP bezogen wird:

 wlans_ath0="wlan0"
 ifconfig_wlan0="WPA DHCP"

   Nun kann das drahtlose Gera:t aktiviert werden:

 # service netif start
 Starting wpa_supplicant.
 DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
 DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
 DHCPOFFER from 192.168.0.1
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67
 DHCPACK from 192.168.0.1
 bound to 192.168.0.254 -- renewal in 300 seconds.
 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
       status: associated
       ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
       AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
       bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
       wme burst roaming MANUAL

   Alternativ kann das drahtlose Gera:t manuell, mit Hilfe der Informationen
   aus /etc/wpa_supplicant.conf konfiguriert werden:

 # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
 Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)
 Associated with 00:11:95:c3:0d:ac
 WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP]
 CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 id_str=]

   Im zweiten Schritt starten Sie nun dhclient(8), um eine IP-Adresse vom
   DHCP-Server zu beziehen:

 # dhclient wlan0
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67
 DHCPACK from 192.168.0.1
 bound to 192.168.0.254 -- renewal in 300 seconds.
 # ifconfig wlan0
 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
       status: associated
       ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
       AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
       bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
       wme burst roaming MANUAL

  Anmerkung:

   Entha:lt /etc/rc.conf bereits die Zeile ifconfig_wlan0="DHCP", wird
   dhclient(8) automatisch gestartet, nachdem wpa_supplicant(8) sich mit dem
   Access Point verbunden hat.

   Sollte der Einsatz von DHCP nicht mo:glich oder nicht gewu:nscht sein,
   konfigurieren Sie eine statische IP-Adresse, nachdem wpa_supplicant(8) die
   Station authentifiziert hat:

 # ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0
 # ifconfig wlan0
 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
       status: associated
       ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
       AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
       bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
       wme burst roaming MANUAL

   Falls DHCP nicht verwendet wird, mu:ssen zusa:tzlich noch das
   Standard-Gateway sowie der Nameserver manuell festgelegt werden:

 # route add default your_default_router
 # echo "nameserver your_DNS_server" >> /etc/resolv.conf

        30.3.4.1.3.2. WPA und EAP-TLS

   Die zweite Mo:glichkeit, WPA einzusetzen, ist die Verwendung eines
   802.1X-Backend-Authentifizierungsservers. Diese Variante wird als
   WPA-Enterprise bezeichnet, um sie vom weniger sicheren WPA-Personal
   abzugrenzen. Die bei WPA-Enterprise verwendete Authentifizierung basiert
   auf dem Extensible Authentication Protocol (EAP).

   EAP selbst bietet keine Verschlu:sselung, sondern operiert in einem
   verschlu:sselten Tunnel. Es gibt verschiedene auf EAP basierende
   Authentifizierungsmethoden, darunter EAP-TLS, EAP-TTLS und EAP-PEAP.

   EAP mit Transport Layers Security (EAP-TLS) ist ein sehr gut
   unterstu:tztes Authentifizierungsprotokoll, da es sich dabei um die erste
   EAP-Methode handelt, die von der Wi-Fi Alliance zertifiziert wurde.
   EAP-TLS erfordert drei Zertifikate: Das auf allen Rechnern installierte
   CA-Zertifikat, das Server-Zertifikat des Authentifizierungsservers, sowie
   ein Client-Zertifikat fu:r jeden drahtlosen Client. Sowohl der
   Authentifizierungsservers als auch die drahtlosen Clients authentifizieren
   sich gegenseitig u:ber Zertifikate, wobei sie u:berpru:fen, ob diese
   Zertifikate auch von der Zertifizierungs-Authorita:t (CA) des jeweiligen
   Unternehmens signiert wurden.

   Die Konfiguration erfolgt (analog zu WPA-PSK) u:ber
   /etc/wpa_supplicant.conf:

 network={
   ssid="freebsdap" 1
   proto=RSN  2
   key_mgmt=WPA-EAP 3
   eap=TLS 4
   identity="loader" 5
   ca_cert="/etc/certs/cacert.pem" 6
   client_cert="/etc/certs/clientcert.pem" 7
   private_key="/etc/certs/clientkey.pem" 8
   private_key_passwd="freebsdmallclient" 9
 }

   1 Der Name des Netzwerks (SSID).                                           
   2 Das als WPA2 bekannte RSN IEEE(R) 802.11i Protokoll wird verwendet.      
   3 Die key_mgmt-Zeile bezieht sich auf das verwendete                       
     Key-Management-Protokoll. In diesem Beispiel wird WPA gemeinsam mit der  
     EAP-Authentifizierung verwendet.                                         
   4 Die fu:r die Verbindung verwendete EAP-Methode.                          
   5 Das identity-Feld entha:lt den von EAP verwendeten                       
     Identifizierungsstring.                                                  
   6 Das Feld ca_cert gibt den Pfad zum CA-Zertifikat an. Diese Datei wird    
     zur Verifizierung des Server-Zertifikats beno:tigt.                      
   7 Die client_cert-Zeile gibt den Pfad zum Client-Zertifikat an. Jeder      
     Client hat ein eigenes, innerhalb des Netzwerks eindeutiges, Zertifikat. 
   8 Das Feld private_key gibt den Pfad zum privaten Schlu:ssel des           
     Client-Zertifikat an.                                                    
   9 Das Feld private_key_passwd entha:lt die Passphrase fu:r den privaten    
     Schlu:ssel.                                                              

   Danach fu:gen Sie die folgende Zeile in /etc/rc.conf ein:

 wlans_ath0="wlan0"
 ifconfig_wlan0="WPA DHCP"

   Nun ko:nnen Sie das drahtlose Gera:t aktivieren:

 # service netif start
 Starting wpa_supplicant.
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
 DHCPACK from 192.168.0.20
 bound to 192.168.0.254 -- renewal in 300 seconds.
 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
       status: associated
       ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
       AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
       bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
       wme burst roaming MANUAL

   Alternativ kann das drahtlose Gera:t manuell mit wpa_supplicant(8) und
   ifconfig(8) aktiviert werden.

        30.3.4.1.3.3. WPA mit EAP-TTLS

   Bei EAP-TLS mu:ssen sowohl der Authentifizierungsserver als auch die
   Clients jeweils ein eigenes Zertifikat aufweisen. Bei EAP-TTLS ist das
   Client-Zertifikat optional. EAP-TTLS geht dabei vor wie ein Webserver, der
   einen sicheren SSL-Tunnel erzeugen kann, ohne dass der Besucher dabei
   u:ber ein clientseitiges Zertifikat verfu:gen muss. EAP-TTLS verwendet
   einen verschlu:sselten TLS-Tunnel zum sicheren Transport der
   Authentifizierungsdaten.

   Die erforderliche Konfiguration erfolgt in /etc/wpa_supplicant.conf:

 network={
   ssid="freebsdap"
   proto=RSN
   key_mgmt=WPA-EAP
   eap=TTLS 1
   identity="test" 2
   password="test" 3
   ca_cert="/etc/certs/cacert.pem" 4
   phase2="auth=MD5" 5
 }

   1 Die fu:r die Verbindung verwendete EAP-Methode.                          
   2 Das identity-Feld entha:lt den Identifizierungsstring fu:r die           
     EAP-Authentifizierung innerhalb des verschlu:sselten TLS-Tunnels.        
   3 Das password-Feld entha:lt die Passphrase fu:r die                       
     EAP-Authentifizierung.                                                   
   4 Das Feld ca_cert gibt den Pfad zum CA-Zertifikat an. Diese Datei wird    
     zur Verifizierung des Server-Zertifikats beno:tigt.                      
   6 Die innerhalb des verschlu:sselten TLS-Tunnels verwendete                
     Authentifizierungsmethode. In Fall von PEAP ist dies auth=MSCHAPV2.      

   Folgende Zeilen mu:ssen in /etc/rc.conf aufgenommen werden:

 wlans_ath0="wlan0"
 ifconfig_wlan0="WPA DHCP"

   Nun kann das drahtlose Gera:t aktiviert werden:

 # service netif start
 Starting wpa_supplicant.
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
 DHCPACK from 192.168.0.20
 bound to 192.168.0.254 -- renewal in 300 seconds.
 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
       status: associated
       ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
       AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
       bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
       wme burst roaming MANUAL

        30.3.4.1.3.4. WPA mit EAP-PEAP

  Anmerkung:

   PEAPv0/EAP-MSCHAPv2 ist die ga:ngigste PEAP-Methode. In diesem Kapitel
   wird der Begriff PEAP stellvertretend fu:r diese Methode verwendet.

   Protected EAP (PEAP) wurde als Alternative zu EAP-TTLS entwickelt und ist
   nach EAP-TLS der meist genutzte EAP-Standard. In einem Netzwerk mit
   verschiedenen Betriebssystemen sollte PEAP das am besten unterstu:tzte
   Standard nach EAP-TLS sein.

   PEAP arbeitet a:hnlich wie EAP-TTLS. Es verwendet ein serverseitiges
   Zertifikat, um einen verschlu:sselten TLS-Tunnel, u:ber den die sichere
   Authentifizierung zwischen den Clients und dem Authentifizierungsserver
   erfolgt. In Sachen Sicherheit unterscheiden sich EAP-TTLS und PEAP
   allerdings: PEAP u:bertra:gt den Benutzernamen im Klartext und
   verschlu:sselt nur das Passwort, wa:hrend EAP-TTLS sowohl den
   Benutzernamen, als auch das Passwort u:ber den TLS-Tunnel u:bertra:gt.

   Um EAP-PEAP zu konfigurieren, fu:gen Sie die folgenden Zeilen in
   /etc/wpa_supplicant.conf ein:

 network={
   ssid="freebsdap"
   proto=RSN
   key_mgmt=WPA-EAP
   eap=PEAP 1
   identity="test" 2
   password="test" 3
   ca_cert="/etc/certs/cacert.pem" 4
   phase1="peaplabel=0" 5
   phase2="auth=MSCHAPV2" 6
 }

   1 Die fu:r die Verbindung verwendete EAP-Methode.                          
   2 Das identity-Feld entha:lt den Identifizierungsstring fu:r die innerhalb 
     des verschlu:sselten TLS-Tunnels erfolgende EAP-Authentifizierung.       
   3 Das Feld password entha:lt die Passphrase fu:r die                       
     EAP-Authentifizierung.                                                   
   4 Das Feld ca_cert gibt den Pfad zum CA-Zertifikat an. Diese Datei wird    
     zur Verifizierung des Server-Zertifikats beno:tigt.                      
   5 Dieses Feld entha:lt die Parameter fu:r die erste Phase der              
     Authentifizierung, den TLS-Tunnel. Je nachdem, welcher                   
     Authentifizierungsserver benutzt wird, kann ein spezifisches Label fu:r  
     die Authentifizierung verwendet werden. Meistens lautet das Label        
     "client EAP encryption", dass durch peaplabel=0 gesetzt wird. Weitere    
     Informationen finden Sie in wpa_supplicant.conf(5).                      
   6 Das innerhalb des verschlu:sselten TLS-Tunnels verwendete                
     Authentifizierungsprotokoll. In unserem Beispiel handelt es sich dabei   
     um auth=MSCHAPV2.                                                        

   Danach fu:gen Sie die folgende Zeile in /etc/rc.conf ein:

 ifconfig_ath0="WPA DHCP"

   Nun kann das drahtlose Gera:t aktiviert werden.

 # service netif start
 Starting wpa_supplicant.
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
 DHCPACK from 192.168.0.20
 bound to 192.168.0.254 -- renewal in 300 seconds.
 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
       status: associated
       ssid freebsdap channel 1 (2412 MHz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
       AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
       bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
       wme burst roaming MANUAL

      30.3.4.1.4. WEP

   Wired Equivalent Privacy (WEP) ist Teil des urspru:nglichen
   802.11-Standards. Es entha:lt keinen Authentifzierungsmechanismus und
   verfu:gt lediglich u:ber eine schwache Zugriffskontrolle, die sehr leicht
   umgangen werden kann.

   WEP kann u:ber ifconfig(8) aktiviert werden:

 # ifconfig wlan0 create wlandev ath0
 # ifconfig wlan0 inet 192.168.1.100 netmask 255.255.255.0 \
             ssid my_net wepmode on weptxkey 3 wepkey 3:0x3456789012

     * weptxkey definiert den WEP-Schlu:ssel, der fu:r die Datenu:bertragung
       verwendet wird. Dieses Beispiel verwendet den dritten Schlu:ssel. Der
       gleiche Schlu:ssel muss auch am Access Point eingestellt sein. Kennen
       Sie den vom Access Point verwendeten Schlu:ssel nicht, sollten Sie
       zuerst den Wert 1 (den ersten Schlu:ssel) fu:r diese Variable
       verwenden.

     * wepkey legt den zu verwendenden WEP-Schlu:ssel in der Form
       Nummer:Schlu:ssel fest. Schlu:ssel 1 wird standardma:ssig verwendet.
       Die "Nummer" muss nur angegeben werden, wenn ein anderer als der erste
       Schlu:ssel verwendet werden soll.

  Anmerkung:

       Ersetzen Sie 0x3456789012 durch den am Access Point konfigurierten
       Schlu:ssel.

   Weitere Informationen finden Sie in ifconfig(8).

   Das Programm wpa_supplicant(8) eignet sich ebenfalls dazu, WEP fu:r
   drahtlose Gera:te zu aktivieren. Obige Konfiguration la:sst sich dabei
   durch die Aufnahme der folgenden Zeilen in /etc/wpa_supplicant.conf
   realisieren:

 network={
   ssid="my_net"
   key_mgmt=NONE
   wep_key3=3456789012
   wep_tx_keyidx=3
 }

   Danach mu:ssen Sie das Programm noch aufrufen:

 # wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
 Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)
 Associated with 00:13:46:49:41:76

  30.3.5. Ad-hoc-Modus

   Der IBSS-Modus, der auch als Ad-hoc-Modus bezeichnet wird, ist fu:r
   Punkt-zu-Punkt-Verbindungen vorgesehen. Um beispielsweise eine
   Ad-hoc-Verbindung zwischen den Rechnern A und B aufzubauen, werden
   lediglich zwei IP-Adressen und eine SSID beno:tigt.

   Auf Rechner A:

 # ifconfig wlan0 create wlandev ath0 wlanmode adhoc
 # ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap
 # ifconfig wlan0
   wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       ether 00:11:95:c3:0d:ac
       inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
       status: running
       ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
       country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
       protmode CTS wme burst

   Der adhoc-Parameter zeigt an, dass die Schnittstelle im IBSS-Modus la:uft.

   Rechner B sollte nun in der Lage sein, Rechner A zu finden:

 # ifconfig wlan0 create wlandev ath0 wlanmode adhoc
 # ifconfig wlan0 up scan
   SSID/MESH ID    BSSID              CHAN RATE   S:N     INT CAPS
   freebsdap       02:11:95:c3:0d:ac    2   54M -64:-96  100 IS   WME

   Der Wert I (Spalte CAPS) in dieser Ausgabe besta:tigt, dass sich Rechner A
   im Ad-hoc-Modus befindet. Nun mu:ssen Sie noch Rechner B eine andere
   IP-Adresse zuweisen:

 # ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
 # ifconfig wlan0
   wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
       status: running
       ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
       country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
       protmode CTS wme burst

   Damit sind die Rechner A und B bereit und ko:nnen untereinander Daten
   austauschen.

  30.3.6. FreeBSD Host Access Points

   FreeBSD kann als Access Point (AP) agieren. Dies verhindert, dass man sich
   einen Hardware AP kaufen oder ein Ad-hoc Netzwerk laufen lassen muss. Dies
   kann sinnvoll sein, falls der FreeBSD-Computer als Gateway zu einem
   anderen Netzwerk, wie dem Internet, fungiert.

    30.3.6.1. Grundeinstellungen

   Bevor Sie einen FreeBSD-Computer als AP konfigurieren, muss der Kernel mit
   der entsprechenden Netzwerkunterstu:tzung fu:r die drahtlose Karte, sowie
   die Sicherheitsprotokolle konfiguriert werden. Weitere Informationen
   finden Sie im Abschnitt 30.3.3, "Basiskonfiguration".

  Anmerkung:

   Die Verwendung der NDIS Treiber fu:r Windows(R) erlauben zur Zeit keinen
   AP-Modus. Nur die nativen FreeBSD-Wireless-Treiber unterstu:tzen den
   AP-Modus.

   Nachdem die Netzwerkunterstu:tzung geladen ist, u:berpru:fen Sie, ob das
   Wireless-Gera:t den hostbasierenden Access-Point Modus, der auch als
   hostap-Modus bekannt ist, unterstu:tzt:

 # ifconfig wlan0 create wlandev ath0
 # ifconfig wlan0 list caps
 drivercaps=6f85edc1<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG>
 cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC>

   Diese Ausgabe zeigt die Eigenschaften der Karte. Das Wort HOSTAP
   besta:tigt, dass diese Wireless-Karte als AP agieren kann. Die
   verschiedenen unterstu:tzten Algorithmen werden ebenfalls angezeigt: WEP,
   TKIP und AES. Diese Informationen zeigen an, welche Sicherheitsprotokolle
   auf dem AP nutzbar sind.

   Das Wireless-Gera:t kann nur wa:hrend der Erzeugung des Pseudo-Gera:ts in
   den hostap-Modus gesetzt werden. Zuvor erstellte Pseudo-Gera:te mu:ssen
   also vorher zersto:rt werden:

 # ifconfig wlan0 destroy

   Danach muss das Gera:t erneut erstellt werden, bevor die restlichen
   Netzwerkparameter konfiguriert werden ko:nnen:

 # ifconfig wlan0 create wlandev ath0 wlanmode hostap
 # ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1

   Benutzen Sie danach erneut ifconfig(8), um den Status der
   wlan0-Schnittstelle abzufragen:

 # ifconfig wlan0
   wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       ether 00:11:95:c3:0d:ac
       inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
       status: running
       ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
       protmode CTS wme burst dtimperiod 1 -dfs

   Die hostap-Parameter geben die Schnittstelle an, die im hostbasierenden
   Access Point Modus la:uft.

   Die Konfiguration der Schnittstelle kann durch Hinzufu:gen der folgenden
   Zeilen in die Datei /etc/rc.conf automatisch wa:hrend des Bootvorganges
   erfolgen:

 wlans_ath0="wlan0"
 create_args_wlan0="wlanmode hostap"
 ifconfig_wlan0="inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1"

    30.3.6.2. Hostbasierender Access Point ohne Authentifizierung oder
    Verschlu:sselung

   Obwohl es nicht empfohlen wird, einen AP ohne jegliche Authentifizierung
   oder Verschlu:sselung laufen zu lassen, ist es eine einfache Art zu
   testen, ob der AP funktioniert. Diese Konfiguration ist auch wichtig fu:r
   die Fehlersuche bei Client-Problemen.

   Nachdem der AP konfiguriert wurde, ist es mo:glich von einem anderen
   drahtlosen Computer eine Suche nach dem AP zu starten:

 # ifconfig wlan0 create wlandev ath0
 # ifconfig wlan0 up scan
 SSID/MESH ID    BSSID              CHAN RATE   S:N     INT CAPS
 freebsdap       00:11:95:c3:0d:ac    1   54M -66:-96  100 ES   WME

   Der Client-Rechner hat den AP gefunden und kann nun eine Verbindung
   aufbauen:

 # ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
 # ifconfig wlan0
   wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       ether 00:11:95:d5:43:62
       inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
       status: associated
       ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
       scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
       roam:rate 5 protmode CTS wme burst

    30.3.6.3. WPA2-hostbasierter Access Point

   Dieser Abschnitt bescha:ftigt sich mit der Konfiguration eines FreeBSD
   Access Point mit dem WPA2-Sicherheitsprotokoll. Weitere Einzelheiten zu
   WPA und der Konfiguration von Clients mit WPA finden Sie im
   Abschnitt 30.3.4.1.3, "WPA".

   Der hostapd(8)-Dienst wird genutzt, um die Client-Authentifizierung und
   das Schlu:sselmanagement auf dem AP mit aktiviertem WPA2 zu nutzen.

   Die folgende Konfiguration wird auf dem FreeBSD-Computer ausgefu:hrt, der
   als AP agiert. Nachdem der AP korrekt arbeitet, sollte hostapd(8)
   automatisch beim Booten durch folgende Zeile in /etc/rc.conf aktiviert
   werden:

 hostapd_enable="YES"

   Bevor Sie versuchen hostapd(8) zu konfigurieren, konfigurieren Sie
   zuna:chst die Grundeinstellungen, wie im Abschnitt 30.3.6.1,
   "Grundeinstellungen" beschrieben.

      30.3.6.3.1. WPA2-PSK

   WPA2-PSK ist fu:r kleine Netzwerke gedacht, in denen die Verwendung eines
   Authentifizierungs-Backend-Server nicht mo:glich oder nicht erwu:nscht
   ist.

   Die Konfiguration wird in /etc/hostapd.conf durchgefu:hrt:

 interface=wlan0                  1
 debug=1                          2
 ctrl_interface=/var/run/hostapd  3
 ctrl_interface_group=wheel       4
 ssid=freebsdap                   5
 wpa=2                            6
 wpa_passphrase=freebsdmall       7
 wpa_key_mgmt=WPA-PSK             8
 wpa_pairwise=CCMP                9

   1 Die Wireless-Schnittstelle, die fu:r den Access Point verwendet wird an. 
   2 Der debuglevel von hostapd(8) wa:hrend der Ausfu:hrung. Ein Wert von 1   
     ist der kleinste zula:ssige Wert.                                        
   3 Der Pfadname des Verzeichnisses, der von hostapd(8) genutzt wird, um die 
     Domain-Socket-Dateien zu speichern, die fu:r die Kommunikation mit       
     externen Programmen, wie z.B. hostapd_cli(8), benutzt werden. In diesem  
     Beispiel wird der Standardwert verwendet.                                
   4 Die Gruppe die Zugriff auf die Schnittstellendateien hat.                
   5 Der Name des drahtlosen Netzwerks (SSID).                                
   6 Aktiviert WPA und gibt an welches WPA-Authentifizierungprotokoll         
     beno:tigt wird. Ein Wert von 2 konfiguriert den AP mit WPA2. Setzen Sie  
     den Wert nur auf 1, wenn Sie das veraltete WPA beno:tigen.               
   7 Das ASCII-Passwort fu:r die WPA-Authentifizierung.                       
                                                                              
       Warnung:                                                               
                                                                              
     Achten Sie darauf, immer starke Passwo:rter zu verwenden, die mindestens 
     8 Zeichen lang sind und auch Sonderzeichen enthalten, damit diese nicht  
     leicht erraten oder umgangen werden ko:nnen.                             
   8 Das verwendete Schlu:sselmanagement-Protokoll. Dieses Beispiel nutzt     
     WPA-PSK.                                                                 
   9 Die zula:ssigen Verschlu:sselungsverfahren des Access-Points. In diesem  
     Beispiel wird nur CCMP (AES) akzeptiert. CCMP ist eine Alternative zu    
     TKIP und sollte wenn mo:glich eingesetzt werden. TKIP sollte nur da      
     eingesetzt werden, wo kein CCMP mo:glich ist.                            

   Als na:chstes wird hostapd gestartet:

 # service hostapd forcestart

 # ifconfig wlan0
 wlan0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
         ether 04:f0:21:16:8e:10
         inet6 fe80::6f0:21ff:fe16:8e10%wlan0 prefixlen 64 scopeid 0x9
         nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
         media: IEEE 802.11 Wireless Ethernet autoselect mode 11na <hostap>
         status: running
         ssid No5ignal channel 36 (5180 MHz 11a ht/40+) bssid 04:f0:21:16:8e:10
         country US ecm authmode WPA2/802.11i privacy MIXED deftxkey 2
         AES-CCM 2:128-bit AES-CCM 3:128-bit txpower 17 mcastrate 6 mgmtrate 6
         scanvalid 60 ampdulimit 64k ampdudensity 8 shortgi wme burst
         dtimperiod 1 -dfs
         groups: wlan

   Sobald der AP la:uft, ko:nnen sich die Clients mit ihm verbinden. Weitere
   Informationen finden Sie im Abschnitt 30.3.4.1.3, "WPA". Es ist mo:glich
   zu sehen, welche Stationen mit dem AP verbunden sind. Geben Sie dazu
   ifconfig wlan0 list sta ein.

    30.3.6.4. WEP-hostbasierter Access Point

   Es ist nicht empfehlenswert, einen AP mit WEP zu konfigurieren, da es
   keine Authentifikationsmechanismen gibt und WEP leicht zu knacken ist.
   Einige a:ltere drahtlose Karten unterstu:tzen nur WEP als
   Sicherheitsprotokoll. Diese Karten ko:nnen nur mit einem AP ohne
   Authentifikation oder Verschlu:sselung genutzt werden.

   Das Wireless-Gera:t kann nun in den hostap-Modus versetzt werden und mit
   der korrekten SSID und IP-Adresse konfiguriert werden:

 # ifconfig wlan0 create wlandev ath0 wlanmode hostap
 # ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 \
   ssid freebsdap wepmode on weptxkey 3 wepkey 3:0x3456789012 mode 11g

     * Der weptxkey zeigt an, welcher WEP-Schlu:ssel bei der U:bertragung
       benutzt wird. In diesem Beispiel wird der dritte Schlu:ssel benutzt,
       da die Nummerierung bei 1 beginnt. Dieser Parameter muss angegeben
       werden, damit die Daten verschlu:sselt werden.

     * Der wepkey gibt den gewa:hlten WEP-Schlu:ssel an. Er sollte im
       folgenden Format index:key vorliegen. Wenn kein Index vorhanden ist,
       wird der Schlu:ssel 1 benutzt. Ansonsten muss der Index manuell
       festgelegt werden.

   Benutzen Sie ifconfig(8) um den Status der wlan0-Schnittstelle erneut
   anzuzeigen:

 # ifconfig wlan0
   wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
       ether 00:11:95:c3:0d:ac
       inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
       media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
       status: running
       ssid freebsdap channel 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac
       country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit
       txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs

   Es ist mo:glich, von einem anderen drahtlosen Computer eine Suche nach dem
   AP zu starten:

 # ifconfig wlan0 create wlandev ath0
 # ifconfig wlan0 up scan
 SSID            BSSID              CHAN RATE  S:N   INT CAPS
 freebsdap       00:11:95:c3:0d:ac    1   54M 22:1   100 EPS

   Der Client-Rechner hat den AP gefunden und kann nun eine Verbindung
   aufbauen. Weitere Informationen finden Sie im Abschnitt 30.3.4.1.4, "WEP".

  30.3.7. Benutzung von drahtgebundenen und drahtlosen Verbindungen

   Eine Verbindung per Kabel bietet eine bessere Leistung und eine ho:here
   Zuverla:ssigkeit, wa:hrend die Wireless-Verbindung eine ho:here
   Flexibilita:t und Mobilita:t bietet. Benutzer von Laptops wollen
   normalerweise beides nutzen und zwischen beiden Verbindungen hin und her
   schalten.

   Unter FreeBSD ist es mo:glich zwei oder mehr Netzwerkschnittstellen in
   einem "failover"-Mode zu kombinieren. Diese Konfiguration nutzt die beste
   verfu:gbare Verbindung aus einer Gruppe von Netzwerkverbindungen. Sobald
   sich der Linkstatus a:ndert, wechselt das Betriebssystem automatisch auf
   eine andere Verbindung.

   Link-Aggregation und Failover werden im Abschnitt 30.7, "Link-Aggregation
   und Failover" behandelt. Ein Beispiel fu:r die Verwendung von
   kabelgebundenen und drahtlosen Verbindungen gibt es im Beispiel 30.3,
   "Failover Modus zwischen Ethernet- und Wireless-Schnittstellen".

  30.3.8. Problembehandlung

   Dieser Abschnitt beschreibt eine Reihe von Massnahmen zur Behebung von
   allta:glichen Problemen mit Drahtlosnetzwerken.

     * Wird der Access Point bei der Suche nicht gefunden, u:berpru:fen Sie,
       dass die Konfiguration des drahtlosen Gera:ts nicht die Anzahl der
       Kana:le beschra:nkt.

     * Wenn sich das Gera:t nicht mit dem Access Point verbinden kann,
       u:berpru:fen Sie, ob die Konfiguration der Station auch der des Access
       Points entspricht. Dazu geho:ren auch die Authentifzierungsmethode und
       die Sicherheitsprotokolle. Halten Sie die Konfiguration so einfach wie
       mo:glich. Wenn Sie ein Sicherheitsprotokoll wie WPA oder WEP
       verwenden, ko:nnen Sie testweise den Access Point auf offene
       Authentifizierung und keine Sicherheit einstellen.

       Fu:r die Fehlersuche steht wpa_supplicant(8) zur Verfu:gung. Starten
       Sie das Programm manuell mit der Option -dd und durchsuchen Sie
       anschliessend die Systemprotokolle nach eventuellen Fehlermeldungen.

     * Sobald sich das Gera:t mit dem Access Point verbinden kann, pru:fen
       Sie die Netzwerkkonfiguration mit einfachen Werkzeugen wie ping(8).

     * Zusa:tzlich gibt es auch zahlreiche Low-Level-Debugging-Werkzeuge. Die
       Ausgabe von Debugging-Informationen des 802.11 Protocol Support Layers
       lassen sich mit dem Programm wlandebug(8) aktivieren. Um
       beispielsweise wa:hrend der Suche nach Access Points und des Aufbaus
       von 802.11-Verbindungen (Handshake) auftretende Systemmeldungen auf
       die Konsole auszugeben, verwenden Sie den folgenden Befehl:

 # wlandebug -i wlan0 +scan+auth+debug+assoc
   net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan>

       Der 802.11-Layer liefert umfangreiche Statistiken, die mit dem
       Werkzeug wlanstats, das sich in /usr/src/tools/tools/net80211
       befindet, abgerufen werden ko:nnen. Diese Statistiken sollten alle
       Fehler identifizieren, die im 802.11-Layer auftreten. Beachten Sie
       aber, dass einige Fehler bereits im darunterliegenden Gera:tetreiber
       auftreten und daher in diesen Statistiken nicht enthalten sind. Wie
       Sie Probleme des Gera:tetreibers identifizieren, entnehmen Sie bitte
       der Dokumentation des Gera:tetreibers.

   Wenn die oben genannten Informationen nicht helfen das Problem zu kla:ren,
   erstellen Sie einen Problembericht, der die Ausgabe der weiter oben
   genannten Werkzeuge beinhaltet.

30.4. USB Tethering

   Viele Mobiltelefone bieten die Mo:glichkeit, ihre Datenverbindung u:ber
   USB (oft "Tethering" genannt) zu teilen. Diese Funktion verwendet entweder
   das RNDIS-, CDC- oder ein Apple(R) iPhone(R)/iPad(R)-Protokoll.

     * Android(TM)-Gera:te benutzen in der Regel den urndis(4)-Treiber.

     * Apple(R)-Gera:te benutzen den ipheth(4)-Treiber.

     * A:ltere Gera:te benutzen oft den cdce(4)-Treiber.

   Bevor Sie ein Gera:t anschliessen, laden Sie den entsprechenden Treiber in
   den Kernel:

 # kldload if_urndis
 # kldload if_cdce
 # kldload if_ipheth

   Sobald das Gera:t angeschlossen ist, steht es unter ue0 wie ein normales
   Netzwerkgera:t zur Verfu:gung. Stellen Sie sicher, dass die Option "USB
   Tethering" auf dem Gera:t aktiviert ist.

30.5. Bluetooth

   Beigetragen von Pav Lucistnik.

   Bluetooth ermo:glicht die Bildung von perso:nlichen Netzwerken u:ber
   drahtlose Verbindungen bei einer maximalen Reichweite von 10 Metern und
   operiert im unlizensierten 2,4-GHz-Band. Solche Netzwerke werden
   normalerweise spontan gebildet, wenn sich mobile Gera:te, wie
   Mobiltelefone, Handhelds oder Notebooks miteinander verbinden. Im
   Gegensatz zu Wireless LAN ermo:glicht Bluetooth auch ho:herwertige
   Dienste, wie FTP-a:hnliche Dateiserver, Filepushing, Sprachu:bertragung,
   Emulation von seriellen Verbindungen und mehr.

   Dieses Kapitel beschreibt die Verwendung von USB-Bluetooth-Adaptern in
   FreeBSD. Weiterhin werden verschiedene Bluetooth-Protokolle und Programme
   vorgestellt.

  30.5.1. Die Bluetooth-Unterstu:tzung aktivieren

   Der Bluetooth-Stack von FreeBSD verwendet das netgraph(4)-Framework. Viele
   Bluetooth-USB-Adapter werden durch den ng_ubt(4)-Treiber unterstu:tzt. Auf
   dem Chip BCM2033 von Broadcom basierende Bluetooth-Gera:te werden von den
   Treibern ubtbcmfw(4) sowie ng_ubt(4) unterstu:tzt. Die Bluetooth-PC-Card
   3CRWB60-A von 3Com verwendet den ng_bt3c(4)-Treiber. Serielle sowie auf
   UART basierende Bluetooth-Gera:te werden von sio(4), ng_h4(4) sowie
   hcseriald(8) unterstu:tzt.

   Bevor ein Gera:t angeschlossen wird, muss der entsprechende Treiber in den
   Kernel geladen werden. Hier verwendet das Gera:t den ng_ubt(4)-Treiber:

 # kldload ng_ubt

   Ist das Bluetooth-Gera:t beim Systemstart angeschlossen, kann das
   entsprechende Modul bei Booten geladen werden, indem der entsprechende
   Treiber in /boot/loader.conf hinzugefu:gt wird:

 ng_ubt_load="YES"

   Sobald der Treiber geladen ist, schliessen Sie den USB-Adapter an. Eine
   Meldung a:hnlich der folgenden wird auf der Konsole und in
   /var/log/messages erscheinen:

 ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
 ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
 ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
       wMaxPacketSize=49, nframes=6, buffer size=294

   Verwenden Sie das Startskript zum Starten und Beenden des
   Bluetooth-Stacks. Es ist empfehlenswert, den Bluetooth-Stack zu beenden,
   bevor Sie den Adapter entfernen. Wenn Sie den Bluetooth-Stack starten,
   erhalten Sie eine Meldung a:hnlich der folgenden:

 # service bluetooth start ubt0
 BD_ADDR: 00:02:72:00:d4:1a
 Features: 0xff 0xff 0xf 00 00 00 00 00
 <3-Slot> <5-Slot> <Encryption> <Slot offset>
 <Timing accuracy> <Switch> <Hold mode> <Sniff mode>
 <Park mode> <RSSI> <Channel quality> <SCO link>
 <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD>
 <Paging scheme> <Power control> <Transparent SCO data>
 Max. ACL packet size: 192 bytes
 Number of ACL packets: 8
 Max. SCO packet size: 64 bytes
 Number of SCO packets: 8

  30.5.2. Suche nach anderen Bluetooth-Gera:ten

   Das Host Controller Interface (HCI) bietet eine einheitliche Methode fu:r
   den Zugriff auf Bluetooth-Basisband-Funktionen. In FreeBSD wird ein
   netgraph HCI-Knoten fu:r jedes Bluetooth-Gera:t erstellt. Weitere
   Einzelheiten finden Sie in ng_hci(4).

   Eine der wichtigsten Aufgaben ist das Auffinden von sich in Reichweite
   befindenden Bluetooth-Gera:ten. Diese Funktion wird als inquiry
   bezeichnet. Inquiry sowie andere mit HCI in Verbindung stehende Funktionen
   werden von hccontrol(8) zur Verfu:gung gestellt. Das folgende Beispiel
   zeigt, wie man herausfindet, welche Bluetooth-Gera:te sich in Reichweite
   befinden. Eine solche Abfrage dauert nur wenige Sekunden. Beachten Sie,
   dass ein Gera:t nur dann antwortet, wenn es sich im Modus discoverable
   befindet.

 % hccontrol -n ubt0hci inquiry
 Inquiry result, num_responses=1
 Inquiry result #0
        BD_ADDR: 00:80:37:29:19:a4
        Page Scan Rep. Mode: 0x1
        Page Scan Period Mode: 00
        Page Scan Mode: 00
        Class: 52:02:04
        Clock offset: 0x78ef
 Inquiry complete. Status: No error [00]

   BD_ADDR stellt, a:hnlich der MAC-Adresse einer Netzwerkkarte, die
   eindeutige Adresse eines Bluetooth-Gera:tes dar. Diese Adresse ist fu:r
   die Kommunikation mit dem Gera:t no:tig. Es ist aber auch mo:glich,
   BD_ADDR einen Klartextnamen zuzuweisen. /etc/bluetooth/hosts entha:lt
   Informationen u:ber die bekannten Bluetooth-Rechner. Das folgende Beispiel
   zeigt, wie man den Klartextnamen eines entfernten Gera:ts in Erfahrung
   bringen kann:

 % hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4
 BD_ADDR: 00:80:37:29:19:a4
 Name: Pav's T39

   Wenn Sie ein entferntes Bluetooth-Gera:t abfragen, wird dieses den Rechner
   unter dem Namen "your.host.name (ubt0)" finden. Dieser Name kann aber
   jederzeit gea:ndert werden.

   Bluetooth ermo:glicht Punkt-zu-Punkt-Verbindungen an denen nur zwei
   Bluetooth-Gera:te beteiligt sind, aber auch
   Punkt-zu-Multipunkt-Verbindungen, bei denen eine Verbindung von mehreren
   Bluetooth-Gera:ten gemeinsam genutzt wird. Das folgende Beispiel zeigt,
   wie man die aktiven Basisbandverbindungen des lokalen Gera:tes anzeigen
   kann:

 % hccontrol -n ubt0hci read_connection_list
 Remote BD_ADDR    Handle Type Mode Role Encrypt Pending Queue State
 00:80:37:29:19:a4     41  ACL    0 MAST    NONE       0     0 OPEN

   Ein connection handle ist fu:r die Beendigung einer Basisbandverbindung
   nu:tzlich. Im Normalfall werden inaktive Verbindungen aber automatisch vom
   Bluetooth-Stack getrennt.

 # hccontrol -n ubt0hci disconnect 41
 Connection handle: 41
 Reason: Connection terminated by local host [0x16]

   Rufen Sie hccontrol help auf, wenn Sie eine komplette Liste aller
   verfu:gbaren HCI-Befehle beno:tigen. Die meisten dieser Befehle mu:ssen
   nicht als root ausgefu:hrt werden.

  30.5.3. Erstmaliger Verbindungsaufbau zwischen zwei Bluetooth-Gera:ten
  (Pairing)

   In der Voreinstellung nutzt Bluetooth keine Authentifizierung, daher kann
   sich jedes Bluetoothgera:t mit jedem anderen Gera:t verbinden. Ein
   Bluetoothgera:t, wie beispielsweise ein Mobiltelefon, kann jedoch fu:r
   einen bestimmten Dienst, etwa eine Einwa:hlverbindung, eine
   Authentifizierung anfordern. Bluetooth verwendet zu diesem Zweck
   PIN-Codes. Ein PIN-Code ist ein maximal 16 Zeichen langer ASCII-String.
   Damit eine Verbindung zustande kommt, muss auf beiden Gera:ten der gleiche
   PIN-Code verwendet werden. Nachdem der Code eingegeben wurde, erzeugen
   beide Gera:te einen link key, der auf den Gera:ten gespeichert wird. Beim
   na:chsten Verbindungsaufbau wird der zuvor erzeugte Link Key verwendet.
   Diesen Vorgang bezeichnet man als Pairing. Geht der Link Key auf einem
   Gera:t verloren, muss das Pairing wiederholt werden.

   Der hcsecd(8)-Daemon verarbeitet Bluetooth-Authentifzierungsanforderungen
   und wird u:ber die Datei /etc/bluetooth/hcsecd.conf konfiguriert. Der
   folgende Ausschnitt dieser Datei zeigt die Konfiguration fu:r ein
   Mobiltelefon, das den PIN-Code "1234" verwendet:

 device {
         bdaddr  00:80:37:29:19:a4;
         name    "Pav's T39";
         key     nokey;
         pin     "1234";
       }

   Von der La:nge abgesehen, unterliegen PIN-Codes keinen Einschra:nkungen.
   Einige Gera:te, beispielsweise Bluetooth-Headsets, haben einen festen
   PIN-Code eingebaut. Die Option -d sorgt dafu:r, dass der hcsecd(8)-Daemon
   im Vordergrund la:uft. Dadurch kann der Ablauf einfach verfolgt werden.
   Stellen Sie das entfernte Gera:t auf receive pairing und initiieren Sie
   die Bluetoothverbindung auf dem entfernten Gera:t. Sie erhalten die
   Meldung, dass Pairing akzeptiert wurde und der PIN-Code beno:tigt wird.
   Geben Sie den gleichen PIN-Code ein, den Sie in hcsecd.conf festgelegt
   haben. Der Computer und das entfernte Gera:t sind nun miteinander
   verbunden. Alternativ ko:nnen Sie das Pairing auch auf dem entfernten
   Gera:t initiieren.

   hcsecd(8) kann durch das Einfu:gen der folgenden Zeile in /etc/rc.conf
   beim Systemstart automatisch aktiviert werden:

 hcsecd_enable="YES"

   Es folgt nun eine beispielhafte Ausgabe des hcsecd(8)-Daemons:

 hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
 hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
 hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
 hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4

  30.5.4. Einwahlverbindungen und Netzwerkverbindungen mit PPP-Profilen
  einrichten

   Ein Dial-Up Networking-Profil (DUN) kann dazu benutzt werden, ein
   Mobiltelefon als drahtloses Modem zu nutzen, um sich u:ber einen
   Einwahlprovider mit dem Internet zu verbinden. Es kann auch dazu genutzt
   werden, einen Computer so zu konfigurieren, dass dieser Datenabfragen
   empfa:ngt.

   Der Zugriff auf ein Netzwerk u:ber ein PPP-Profil kann einen Zugriff auf
   das LAN fu:r ein oder mehrere Bluetooth-Gera:te bieten. Eine
   PC-zu-PC-Verbindung unter Verwendung einer PPP-Verbindung u:ber eine
   serielle Verbindung ist ebenfalls mo:glich.

   Diese Profile werden unter FreeBSD durch ppp(8) sowie rfcomm_pppd(8)
   implementiert - einem Wrapper, der Bluetooth-Verbindungen unter PPP
   nutzbar macht. Bevor ein Profil verwendet werden kann, muss ein neuer
   PPP-Abschnitt in /etc/ppp/ppp.conf erzeugt werden. Beispielkonfigurationen
   zu diesem Thema finden Sie in rfcomm_pppd(8).

   Dieses Beispiel verwendet rfcomm_pppd(8), um eine Verbindung zu einem
   entfernten Gera:t mit der BD_ADDR 00:80:37:29:19:a4 auf dem RFCOMM-Kanal
   DUN aufzubauen:

 # rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup

   Die aktuelle Kanalnummer des entfernten Gera:ts erhalten Sie u:ber das
   SDP-Protokoll. Es ist auch mo:glich, manuell einen RFCOMM-Kanal
   festzulegen. In diesem Fall fu:hrt rfcomm_pppd(8) keine SDP-Abfrage durch.
   Verwenden Sie sdpcontrol(8), um die RFCOMM-Kana:le des entfernten Gera:ts
   herauszufinden.

   Der sdpd(8)-Server muss laufen, damit ein Netzzugriff mit dem PPP
   LAN-Profil mo:glich ist. Ausserdem muss fu:r den LAN-Client ein neuer
   Eintrag in /etc/ppp/ppp.conf erzeugt werden. Beispielkonfigurationen zu
   diesem Thema finden Sie in rfcomm_pppd(8). Danach starten Sie den RFCOMM
   PPP-Server u:ber eine gu:ltige RFCOMM-Kanalnummer. Der RFCOMM PPP-Server
   bindet dadurch den Bluetooth-LAN-Dienst an den lokalen SDP-Daemon. Das
   folgende Beispiel zeigt, wie man den RFCOMM PPP-Server startet.

 # rfcomm_pppd -s -C 7 -l rfcomm-server

  30.5.5. Bluetooth-Protokolle

   Dieser Abschnitt gibt einen U:berblick u:ber die verschiedenen
   Bluetooth-Protokolle, ihre Funktionen sowie weitere Programme.

    30.5.5.1. Das Logical Link Control and Adaptation Protocol (L2CAP)

   Das Logical Link Control and Adaptation Protocol (L2CAP) bietet
   ho:herwertigen Protokollen verbindungsorientierte und verbindungslose
   Datendienste an. L2CAP erlaubt ho:herwertigen Protokollen und Programmen
   den Versand und Empfang von L2CAP-Datenpaketen mit einer La:nge von bis zu
   64 Kilobytes.

   L2CAP arbeitet kanalbasiert. Ein Kanal ist eine logische Verbindung
   innerhalb einer Basisbandverbindung. Jeder Kanal ist dabei an ein einziges
   Protokoll gebunden. Mehrere Gera:te ko:nnen an das gleiche Protokoll
   gebunden sein, es ist aber nicht mo:glich, einen Kanal an mehrere
   Protokolle zu binden. Jedes u:ber einen Kanal ankommende L2CAP-Paket wird
   an das entsprechende ho:herwertige Protokoll weitergeleitet. Mehrere
   Kana:le ko:nnen sich die gleiche Basisbandverbindung teilen.

   Unter FreeBSD wird eine netgraph-Gera:tedatei vom Typ l2cap fu:r jedes
   einzelne Bluetooth-Gera:t erzeugt. Diese Gera:tedatei ist normalerweise
   mit der Bluetooth-HCI-Gera:tedatei (downstream) sowie der
   Bluetooth-Socket-Gera:tedatei (upstream) verbunden. Der Standardname fu:r
   die L2CAP-Gera:tedatei lautet "devicel2cap". Weitere Details finden Sie in
   ng_l2cap(4).

   Ein nu:tzlicher Befehl zum Anpingen von anderen Gera:ten ist l2ping(8).
   Einige Bluetooth-Gera:te senden allerdings nicht alle erhaltenen Daten
   zuru:ck. Die Ausgabe 0 bytes im folgenden Beispiel ist also kein Fehler:

 # l2ping -a 00:80:37:29:19:a4
 0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0
 0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0
 0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0
 0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0

   Das Programm l2control(8) liefert Informationen u:ber L2CAP-Dateien. Das
   folgende Beispiel zeigt, wie man die Liste der logischen Verbindungen
   (Kana:le) sowie die Liste der Basisbandverbindungen abfragen kann:

 % l2control -a 00:02:72:00:d4:1a read_channel_list
 L2CAP channels:
 Remote BD_ADDR     SCID/ DCID   PSM  IMTU/ OMTU State
 00:07:e0:00:0b:ca    66/   64     3   132/  672 OPEN
 % l2control -a 00:02:72:00:d4:1a read_connection_list
 L2CAP connections:
 Remote BD_ADDR    Handle Flags Pending State
 00:07:e0:00:0b:ca     41 O           0 OPEN

   btsockstat(1) ist ein weiteres Diagnoseprogramm. Es funktioniert a:hnlich
   wie netstat(1), arbeitet aber mit Bluetooth-Datenstrukturen. Das folgende
   Beispiel zeigt die gleiche Liste der logischen Verbindungen wie
   l2control(8) im vorherigen Beispiel.

 % btsockstat
 Active L2CAP sockets
 PCB      Recv-Q Send-Q Local address/PSM       Foreign address   CID   State
 c2afe900      0      0 00:02:72:00:d4:1a/3     00:07:e0:00:0b:ca 66    OPEN
 Active RFCOMM sessions
 L2PCB    PCB      Flag MTU   Out-Q DLCs State
 c2afe900 c2b53380 1    127   0     Yes  OPEN
 Active RFCOMM sockets
 PCB      Recv-Q Send-Q Local address     Foreign address   Chan DLCI State
 c2e8bc80      0    250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3    6    OPEN

    30.5.5.2. Radio Frequency Communication (RFCOMM)

   Das RFCOMM-Protokoll emuliert serielle Verbindungen u:ber das
   L2CAP-Protokoll. Bei RFCOMM handelt es sich um ein einfaches
   Transportprotokoll, das um Funktionen zur Emulation der 9poligen
   Schaltkreise von mit RS-232 (EIATIA-232-E) kompatiblen seriellen Ports
   erga:nzt wurde. Es erlaubt bis zu 60 simultane Verbindungen
   (RFCOMM-Kana:le) zwischen zwei Bluetooth-Gera:ten.

   Eine RFCOMM-Kommunikation besteht aus zwei Anwendungen (den
   Kommunikationsendpunkten), die u:ber das Kommunikationssegment miteinander
   verbunden sind. RFCOMM unterstu:tzt Anwendungen, die auf serielle Ports
   angewiesen sind. Das Kommunikationssegment entspricht der direkten
   Bluetooth-Verbindung zwischen den beiden Gera:ten.

   RFCOMM ku:mmert sich um die direkte Verbindung von zwei Gera:ten, oder um
   die Verbindung zwischen einem Gera:t und einem Modem u:ber eine
   Netzwerkverbindung. RFCOMM unterstu:tzt auch andere Konfigurationen. Ein
   Beispiel dafu:r sind Module, die drahtlose Bluetooth-Gera:te mit einer
   verkabelten Schnittstelle verbinden ko:nnen.

   Unter FreeBSD ist das RFCOMM-Protokoll im Bluetooth Socket-Layer
   implementiert.

    30.5.5.3. Das Service Discovery Protocol (SDP)

   Das Service Discovery Protocol (SDP) erlaubt es Clientanwendungen, von
   Serveranwendungen angebotene Dienste sowie deren Eigenschaften abzufragen.
   Zu diesen Eigenschaften geho:ren die Art oder die Klasse der angebotenen
   Dienste sowie der Mechanismus oder das Protokoll, die zur Nutzung des
   Dienstes notwendig sind.

   SDP ermo:glicht Verbindungen zwischen einem SDP-Server und einem
   SDP-Client. Der Server entha:lt eine Liste mit den Eigenschaften der vom
   Server angebotenen Dienste. Jeder Eintrag beschreibt jeweils einen
   einzigen Serverdienst. Ein Client kann diese Informationen durch eine
   SDP-Anforderung vom SDP-Server beziehen. Wenn der Client oder eine
   Anwendung des Clients einen Dienst nutzen will, muss eine separate
   Verbindung mit dem Dienstanbieter aufgebaut werden. SDP bietet einen
   Mechanismus zum Auffinden von Diensten und deren Eigenschaften an, es
   bietet aber keine Mechanismen zur Verwendung dieser Dienste.

   Normalerweise sucht ein SDP-Client nur nach Diensten, die bestimmte
   geforderte Eigenschaften erfu:llen. Es ist aber auch mo:glich, anhand der
   Dienstbeschreibungen eine allgemeine Suche nach den von einem SDP-Server
   angebotenen Diensten durchzufu:hren. Diesen Vorgang bezeichnet man als
   Browsing.

   Der Bluetooth-SDP-Server sdpd(8) und der Kommandozeilenclient
   sdpcontrol(8) sind bereits in der Standardinstallation von FreeBSD
   enthalten. Das folgende Beispiel zeigt, wie eine SDP-Abfrage durchgefu:hrt
   wird:

 % sdpcontrol -a 00:01:03:fc:6e:ec browse
 Record Handle: 00000000
 Service Class ID List:
         Service Discovery Server (0x1000)
 Protocol Descriptor List:
         L2CAP (0x0100)
                 Protocol specific parameter #1: u/int/uuid16 1
                 Protocol specific parameter #2: u/int/uuid16 1

 Record Handle: 0x00000001
 Service Class ID List:
         Browse Group Descriptor (0x1001)

 Record Handle: 0x00000002
 Service Class ID List:
         LAN Access Using PPP (0x1102)
 Protocol Descriptor List:
         L2CAP (0x0100)
         RFCOMM (0x0003)
                 Protocol specific parameter #1: u/int8/bool 1
 Bluetooth Profile Descriptor List:
         LAN Access Using PPP (0x1102) ver. 1.0

   Beachten Sie, dass jeder Dienst eine Liste seiner Eigenschaften, wie etwa
   den RFCOMM-Kanal, zuru:ckgibt. Je nachdem, welche Dienste der Benutzer
   beno:tigt, sollten einige dieser Eigenschaften notiert werden. Einige
   Bluetooth-Implementationen unterstu:tzen kein Service Browsing und geben
   daher eine leere Liste zuru:ck. Ist dies der Fall, ist es dennoch
   mo:glich, nach einem bestimmten Dienst zu suchen. Das folgende Beispiel
   demonstriert die Suche nach dem OBEX Object Push (OPUSH) Dienst:

 % sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH

   Unter FreeBSD ist es die Aufgabe des sdpd(8)-Servers, Bluetooth-Clients
   verschiedene Dienste anzubieten. Sie ko:nnen diesen Server durch das
   Einfu:gen der folgenden Zeile in /etc/rc.conf aktivieren:

 sdpd_enable="YES"

   Nun kann der sdpd(8)-Daemon durch folgende Eingabe gestartet werden:

 # service sdpd start

   Der lokale Server, der den entfernten Clients Bluetooth-Dienste anbieten
   soll, bindet diese Dienste an den lokalen SDP-Daemon. Ein Beispiel fu:r
   eine solche Anwendung ist rfcomm_pppd(8). Einmal gestartet, wird der
   Bluetooth-LAN-Dienst an den lokalen SDP-Daemon gebunden.

   Die Liste der vorhandenen Dienste, die am lokalen SDP-Server registriert
   sind, la:sst sich durch eine SDP-Abfrage u:ber einen lokalen Kontrollkanal
   abfragen:

 # sdpcontrol -l browse

    30.5.5.4. OBEX Object-Push (OPUSH)

   OBEX ist ein ha:ufig verwendetes Protokoll fu:r den Dateitransfer zwischen
   Mobilgera:ten. Sein Hauptzweck ist die Kommunikation u:ber die
   Infrarotschnittstelle. Es dient daher zum Datentransfer zwischen Notebooks
   oder PDAs sowie zum Austausch von Visitenkarten oder Kalendereintra:gen
   zwischen Mobiltelefonen und anderen Gera:ten mit PIM-Funktionen.

   Server und Client von OBEX werden durch obexapp bereitgestellt, das als
   Paket oder Port comms/obexapp installiert werden kann.

   Mit dem OBEX-Client werden Objekte zum OBEX-Server geschickt oder
   angefordert. Ein Objekt kann etwa eine Visitenkarte oder ein Termin sein.
   Der OBEX-Client fordert u:ber SDP die Nummer des RFCOMM-Kanals vom
   entfernten Gera:t an. Dies kann auch durch die Verwendung des
   Servicenamens anstelle der RFCOMM-Kanalnummer erfolgen. Folgende Dienste
   werden unterstu:tzt: IrMC, FTRN und OPUSH. Es ist mo:glich, den
   RFCOMM-Kanal als Nummer anzugeben. Es folgt ein Beispiel fu:r eine
   OBEX-Sitzung, bei der ein Informationsobjekt vom Mobiltelefon angefordert
   und ein neues Objekt (hier eine Visitenkarte) an das Telefonbuch des
   Mobiltelefons geschickt wird:

 % obexapp -a 00:80:37:29:19:a4 -C IrMC
 obex> get telecom/devinfo.txt
 Success, response: OK, Success (0x20)
 obex> put new.vcf
 Success, response: OK, Success (0x20)
 obex> di
 Success, response: OK, Success (0x20)

   Um OBEX-Push-Dienste anbieten zu ko:nnen, muss der sdpd-Server gestartet
   sein. Ein Wurzelverzeichnis, in dem alle ankommenden Objekte gespeichert
   werden, muss zusa:tzlich angelegt werden. In der Voreinstellung ist dies
   /var/spool/obex. Starten Sie den OBEX-Server mit einer gu:ltigen
   Kanalnummer. Der OBEX-Server registriert nun den OBEX-Push-Dienst mit dem
   lokalen SDP-Daemon. Das folgende Beispiel zeigt, wie der OBEX-Server
   gestartet wird:

 # obexapp -s -C 10

    30.5.5.5. Das Serial-Port Profil (SPP)

   Das Serial Port Profile (SSP) ermo:glicht es Bluetooth-Gera:ten eine
   serielle Kabelverbindung zu emulieren. Anwendungen sind dadurch in der
   Lage, u:ber eine virtuelle serielle Verbindung Bluetooth als Ersatz fu:r
   eine Kabelverbindung zu nutzen.

   rfcomm_sppd(1) implementiert unter FreeBSD SSP und ein Pseudo-tty, das als
   virtuelle serielle Verbindung verwendet wird. Das folgende Beispiel zeigt,
   wie man eine Verbindung mit einem entfernten Serial-Port-Dienst herstellt.
   Ein RFCOMM-Kanal muss dabei nicht angegeben werden, da rfcomm_sppd(1) den
   Kanal u:ber SDP abfragen kann. Um dies zu umgehen, geben Sie einen
   RFCOMM-Kanal auf der Kommandozeile an.

 # rfcomm_sppd -a 00:07:E0:00:0B:CA -t
 rfcomm_sppd[94692]: Starting on /dev/pts/6...
 /dev/pts/6

   Sobald die Verbindung hergestellt ist, kann pseudo-tty als serieller Port
   verwenden werden.

 # cu -l /dev/pts/6

   Das pseudo-tty wird auf der Standardausgabe ausgegeben und kann von
   Wrapper-Skripten gelesen werden:

 PTS=`rfcomm_sppd -a 00:07:E0:00:0B:CA -t`
 cu -l $PTS

  30.5.6. Problembehandlung

   Wenn FreeBSD eine neue Verbindung akzeptiert, versucht es, die Rolle zu
   tauschen, um zum Master zu werden. Einige a:ltere Gera:te, die dies nicht
   unterstu:tzen, ko:nnen keine Verbindung aufbauen. Da der Rollentausch
   ausgefu:hrt wird sobald eine neue Verbindung aufgebaut wird, ist es nicht
   mo:glich, das entfernte Gera:t zu fragen ob es den Rollentausch
   unterstu:tzt. Es gibt jedoch eine HCI-Option, die dieses Verhalten
   deaktiviert:

 # hccontrol -n ubt0hci write_node_role_switch 0

   Verwenden Sie hcidump, das als Paket Port comms/hcidump installiert werden
   kann, um Bluetooth-Pakete anzuzeigen. Dieses Programm hat A:hnlichkeiten
   mit tcpdump(1) und kann zur Anzeige der Bluetooth-Pakete in einem
   Terminal, oder zur Speicherung von Paketen in einer Datei (Dump) verwendet
   werden.

30.6. LAN-Kopplung mit einer Bridge

   Geschrieben von Andrew Thompson.

   Manchmal ist es nu:tzlich, ein Netzwerk, wie ein Ethernetsegment, in
   separate Netzwerke aufzuteilen, ohne gleich IP-Subnetze zu erzeugen, die
   u:ber einen Router miteinander verbunden sind. Ein Gera:t, das zwei Netze
   auf diese Weise verbindet, wird als "Bridge" bezeichnet.

   Eine Bridge arbeitet, indem sie die MAC-Adressen der Gera:te in ihren
   Netzwerksegmenten lernt. Der Verkehr wird nur dann zwischen zwei Segmenten
   weitergeleitet, wenn sich Sender und Empfa:nger in verschiedenen
   Netzwerksegmenten befinden. Jedes FreeBSD-System mit zwei Netzwerkkarten
   kann als Bridge fungieren.

   Bridging kann in den folgenden Situationen sinnvoll sein:

   Verbinden von Netzwerken

           Die Hauptaufgabe einer Bridge ist die Verbindung von zwei oder
           mehreren Netzwerksegmenten. Es gibt viele Gru:nde, eine
           hostbasierte Bridge einzusetzen, anstelle von Netzwerkkomponenten,
           wie beispielsweise Kabelverbindungen oder Firewalls. Eine Bridge
           kann ausserdem ein drahtloses Gera:t mit einem Kabelnetzwerk
           verbinden. Diese Fa:higkeit der Bridge wird als HostAP-Modus
           bezeichnet. Die Bridge agiert in diesem Fall als Access Point fu:r
           das drahtlose Gera:t.

   Filtering / Traffic Shaping Firewall

           Eine Bridge kann eingesetzt werden, wenn Firewallfunktionen
           beno:tigt werden, ohne dabei Routing oder Network Adress
           Translation (NAT) zu verwenden.

           Ein Beispiel dafu:r wa:re ein kleines Unternehmen, das u:ber DSL
           oder ISDN an einen ISP angebunden ist. Es verfu:gt u:ber 13
           erreichbare IP-Adressen und das Netzwerk besteht aus 10 Rechnern.
           In dieser Situation ist der Einsatz von Subnetzen sowie einer
           routerbasierten Firewall aufgrund der IP-Adressierung schwierig.
           Eine Bridge-basierte Firewall kann hingegen ohne Probleme
           konfiguriert werden.

   Netzwerku:berwachung

           Eine Bridge kann zwei Netzwerksegmente miteinander verbinden und
           danach alle Ethernet-Rahmen u:berpru:fen, die zwischen den beiden
           Netzwerksegmenten ausgetauscht werden. Dazu verwendet man entweder
           bpf(4) und tcpdump(1) auf dem Netzgera:t der Bridge oder schickt
           Kopien aller Rahmen an ein zusa:tzliches Netzgera:t, das als Span
           Port bekannt ist.

   Layer 2 VPN

           Zwei Ethernetnetzwerke ko:nnen u:ber einen IP-Link miteinander
           verbunden werden, indem die beiden Netzwerke u:ber einen
           EtherIP-Tunnel gekoppelt werden, oder eine tap(4)-basierte Lo:sung
           wie OpenVPN eingesetzt wird.

   Layer 2 Redundanz

           Die Systeme eines Netzwerks ko:nnen u:ber das Spanning Tree
           Protocol (STP) redundant miteinander verbunden sein, um redundante
           Pfade zu blockieren.

   Dieser Abschnitt beschreibt, wie ein FreeBSD-System mit Hilfe von
   if_bridge(4) als Bridge konfiguriert wird. Ein netgraph-Bridge-Treiber ist
   ebenfalls verfu:gbar und wird in ng_bridge(4) beschrieben.

  Anmerkung:

   Paketfilter ko:nnen mit allen Firewallpaketen verwendet werden, die das
   pfil(9)-Framework benutzen. Eine Bridge kann auch als Traffic Shaper
   verwendet werden, wenn Sie altq(4) oder dummynet(4) einsetzen.

  30.6.1. Die Bridge aktivieren

   In FreeBSD handelt es sich bei if_bridge(4) um ein Kernelmodul, das von
   ifconfig(8) automatisch geladen wird, wenn eine Bridge-Schnittstelle
   erzeugt wird. Es ist auch mo:glich, die Unterstu:tzung fu:r den Treiber in
   den Kernel zu kompilieren, indem die Zeile device if_bridge in die
   Kernelkonfigurationsdatei hinzugefu:gt wird.

   Eine Bridge wird durch das Klonen von Schnittstellen erzeugt. Um eine
   Bridge zu erzeugen, verwenden Sie:

 # ifconfig bridge create
 bridge0
 # ifconfig bridge0
 bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
         ether 96:3d:4b:f1:79:7a
         id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
         maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
         root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0

   Wenn eine Bridge erzeugt wird, erha:lt sie automatisch eine zufa:llig
   generierte Ethernet-Adresse. Die Parameter maxaddr sowie timeout legen
   fest, wie viele MAC-Adressen die Bridge in ihrer Forward-Tabelle halten
   kann und wie viele Sekunden jeder Eintrag erhalten bleiben soll, nachdem
   er zuletzt verwendet wurde. Die restlichen Parameter sind fu:r die
   Konfiguration von STP notwendig.

   Im na:chsten Schritt werden die Schnittstellen, die die Bridge verbinden
   soll, zugewiesen. Damit die Bridge Datenpakete weiterleiten kann, mu:ssen
   sowohl die Bridge als auch die Schnittstellen der zu verbindenden
   Netzwerksegmente aktiviert sein:

 # ifconfig bridge0 addm fxp0 addm fxp1 up
 # ifconfig fxp0 up
 # ifconfig fxp1 up

   Jetzt ist die Bridge in der Lage, Ethernet-Rahmen zwischen den
   Schnittstellen fxp0 und fxp1 weiterzuleiten. Um diese Konfiguration beim
   Systemstart automatisch zu aktivieren, mu:ssen die folgenden Zeilen in
   /etc/rc.conf hinzugefu:gt werden:

 cloned_interfaces="bridge0"
 ifconfig_bridge0="addm fxp0 addm fxp1 up"
 ifconfig_fxp0="up"
 ifconfig_fxp1="up"

   Wenn die Bridge eine IP-Adresse beno:tigt, muss diese der Schnittstelle
   der Bridge zugewiesen werden und nicht der Schnittstelle der gekoppelten
   Netzwerksegmente. Die IP-Adresse kann manuell gesetzt, oder u:ber DHCP
   bezogen werden. Dieses Beispiel verwendet eine statische IP-Adresse:

 # ifconfig bridge0 inet 192.168.0.1/24

   Es ist auch mo:glich der Bridge-Schnittstelle eine IPv6-Adresse
   zuzuweisen. Um die A:nderungen dauerhaft zu speichern, fu:gen Sie die
   Adressinformationen in /etc/rc.conf ein.

  Anmerkung:

   Nachdem ein Paketfilter aktiviert wurde, ko:nnen Datenpakete, die von den
   Schnittstellen der gekoppelten Netzwerksegmente gesendet und empfangen
   werden, u:ber die Bridge weitergeleitet oder nach bestimmten Regeln
   gefiltert oder auch komplett geblockt werden. Ist die Richtung des
   Paketflusses wichtig, ist es am besten, eine Firewall auf den
   Schnittstellen der einzelnen Netzwerksegmente einzurichten und nicht auf
   der Bridge selbst.

   Eine Bridge verfu:gt u:ber verschiedene Optionen zur Weiterleitung von
   Nicht-IP- und IP-Paketen, sowie Paketfilterung auf Layer 2 mittels
   ipfw(8). Weitere Informationen finden Sie in if_bridge(4).

  30.6.2. Spanning Tree aktivieren

   Damit ein Ethernet-Netzwerk richtig funktioniert, kann nur ein aktiver
   Pfad zwischen zwei Gera:ten existieren. Das STP-Protokoll erkennt
   Schleifen in einer Netzwerktopologie und setzt redundante Pfade in einen
   blockierten Zustand. Sollte eine der aktiven Verbindungen ausfallen,
   berechnet STP einen anderen Baum und ermo:glicht es dann einem blockierten
   Pfad, alle Netzwerkverbindungen wiederherzustellen.

   Das Rapid Spanning Tree Protocol (RSTP oder 802.1w), ist
   abwa:rtskompatibel zum veralteten STP. RSTP arbeitet schneller und tauscht
   Informationen mit benachbarten Switchen aus, um Pakete korrekt
   weiterzuleiten und eine Schleifenbildung zu verhindern. FreeBSD
   unterstu:tzt die Betriebsmodi RSTP und STP, wobei RSTP als Standardmodus
   voreingestellt ist.

   STP kann auf den Schnittstellen der durch die Bridge verbundenen
   Netzwerksegmente mittels ifconfig(8) aktiviert werden. Fu:r eine Bridge,
   die die Schnittstellen fxp0 und fxp1 verbindet, aktivieren Sie STP wie
   folgt:

 # ifconfig bridge0 stp fxp0 stp fxp1
 bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         ether d6:cf:d5:a0:94:6d
         id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15
         maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
         root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0
         member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
                 port 3 priority 128 path cost 200000 proto rstp
                 role designated state forwarding
         member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
                 port 4 priority 128 path cost 200000 proto rstp
                 role designated state forwarding

   Diese Bridge hat die Spanning-Tree-ID 00:01:02:4b:d4:50 und die Priorita:t
   32768. Da diese ID mit der Root-ID identisch ist, handelt es sich um die
   Root-Bridge dieses Netzwerks.

   Auf einer anderen Bridge des Netzwerks ist STP ebenfalls aktiviert:

 bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         ether 96:3d:4b:f1:79:7a
         id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15
         maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
         root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4
         member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
                 port 4 priority 128 path cost 200000 proto rstp
                 role root state forwarding
         member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
                 port 5 priority 128 path cost 200000 proto rstp
                 role designated state forwarding

   Die Zeile root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4
   zeigt an, dass die Root-Bridge die ID 00:01:02:4b:d4:50 hat. Die
   Pfadkosten hin zur Root-Bridge betragen 400000, wobei der Pfad zur
   Root-Bridge u:ber port 4 geht, der wiederum der Schnittstelle fxp0
   entspricht.

  30.6.3. Parameter der Bridge-Schnittstelle

   Einige Parameter von ifconfig dienen ausschliesslich der Konfiguration von
   Bridge-Schnittstellen. Dieser Abschnitt fasst die Verwendung dieser
   Parameter zusammen. Die vollsta:ndige Liste der verfu:gbaren Parameter
   wird in ifconfig(8) beschrieben.

   private

           Eine private Schnittstelle leitet keine Daten an einen Port
           weiter, bei dem es sich ebenfalls um eine private Schnittstelle
           handelt. Der Datenverkehr wird dabei komplett blockiert, auch
           Ethernet-Rahmen und ARP-Pakete werden nicht weitergeleitet. Wollen
           Sie hingegen nur spezifische Datenpakete blockieren, sollten Sie
           eine Firewall einsetzen.

   span

           Ein Span Port u:bertragt eine Kopie jedes Ethernet-Rahmens, der an
           der Bridge ankommt. Auf einer Bridge ko:nnen beliebig viele Span
           Ports festgelegt werden. Wird eine Schnittstelle als Span Port
           konfiguriert, kann sie nicht mehr als normaler Bridge-Port
           verwendet werden. Eine derartige Konfiguration ist beispielsweise
           sinnvoll, um den Datenverkehr, der in einem Netzwerk u:ber die
           Bridge la:uft, auf einen Rechner zu u:bertragen, der mit einem
           Span Port der Bridge verbunden ist. Um beispielsweise eine Kopie
           aller Ethernet-Rahmen u:ber die Schnittstelle fxp0 zu u:bertragen:

 # ifconfig bridge0 span fxp4

   sticky

           Wenn die Schnittstelle eines u:ber eine Bridge verbundenen
           Netzwerksegments als sticky gekennzeichnet wird, werden alle
           dynamisch gelernten Adressen als statische Adressen behandelt,
           sobald sie in den Forward-Cache der Bridge aufgenommen wurden.
           Sticky-Eintra:ge werden niemals aus dem Cache entfernt oder
           ersetzt. Selbst dann nicht, wenn die Adresse von einer anderen
           Schnittstelle verwendet wird. Sie ko:nnen dadurch die Vorteile
           statischer Adresseintra:ge nutzen, ohne die Forward-Tabelle vor
           dem Einsatz der Bridge mit statischen Eintra:gen fu:llen zu
           mu:ssen. Clients, die sich in einem bestimmten von der Bridge
           verwalteten Segmente befinden, ko:nnen dabei nicht in ein anderes
           Segment wechseln.

           Ein Beispiel fu:r den Einsatz von Sticky-Adressen ist die
           Kombination einer Bridge mit mehreren VLANs, um einen Router zu
           konfigurieren, der einzelne Kundennetzwerke voneinander trennt,
           ohne dabei IP-Adressbereiche zu verschwenden. Fu:r das folgende
           Beispiel nehmen wir an, dass sich der Client CustomerA im VLAN
           vlan100 und der Client CustomerB im VLAN vlan101 befinden. Die
           Bridge hat die IP-Adresse 192.168.0.1:

 # ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101
 # ifconfig bridge0 inet 192.168.0.1/24

           In diesem Beispiel sehen beide Clients 192.168.0.1 als das
           Default-Gateway. Da der Bru:cken-Cache sticky ist, sind Sie nicht
           dazu in der Lage, die MAC-Adresse des anderen Kunden zu spoofen
           und dessen Datenverkehr abzufangen.

           Sie ko:nnen die Kommunikation zwischen den VLANs vollsta:ndig
           unterbinden, wenn Sie private Schnittstellen oder eine Firewall
           einsetzen:

 # ifconfig bridge0 private vlan100 private vlan101

           Die Kunden sind nun komplett voneinander isoliert und der
           komplette /24-Adressbereich kann zugewiesen werden, ohne dass
           Subnetze eingesetzt werden.

           Die maximale mo:gliche Anzahl an eindeutigen MAC-Adressen hinter
           einer Schnittstelle kann festgelegt werden. Sobald das Limit
           erreicht ist, werden Pakete mit einer unbekannten Quell-Adresse
           solange verworfen, bis ein existierender Eintrag gelo:scht wird
           oder abla:uft.

           Das folgende Beispiel setzt die maximale Anzahl von Netzgera:ten
           fu:r CustomerA fu:r das VLAN vlan100 auf 10.

 # ifconfig bridge0 ifmaxaddr vlan100 10

   Die Bridge unterstu:tzt auch den Monitormodus. Dabei werden alle Pakete
   verworfen, nachdem sie von bpf(4) verarbeitet wurden. In diesem Modus
   erfolgt keine weitere Bearbeitung und auch keine Weiterleitung von
   Datenpaketen. Es ist daher mo:glich, die Eingabe von zwei oder mehr
   Netzwerkschnittstellen in einen einzigen gemeinsamen bpf(4)-Stream zu
   vereinen. Ein solcher Datenstrom ist beispielsweise nu:tzlich, um den
   Datenverkehr fu:r "network taps" zu rekonstruieren, die ihre RX/TX-Signale
   u:ber verschiedene Schnittstellen senden. Um beispielsweise die Eingabe
   von vier Netzwerkschnittstellen in einzigen gemeinsamen Datenstrom zu
   vereinen:

 # ifconfig bridge0 addm fxp0 addm fxp1 addm fxp2 addm fxp3 monitor up
 # tcpdump -i bridge0

  30.6.4. SNMP-Monitoring

   Die Schnittstelle der Bridge sowie die STP-Parameter ko:nnen durch den im
   Basissystem enthaltenen bsnmpd(1) u:berwacht werden. Die exportierten
   Bridge-MIBs entsprechen den IETF-Standards, daher kann ein beliebiger
   SNMP-Client oder ein beliebiges Monitoring-Werkzeug eingesetzt werden, um
   die beno:tigten Daten zu erhalten.

   Um das Monitoring auf der Bridge zu aktivieren, kommentieren Sie diese
   Zeile in /etc/snmpd.config aus, indem Sie das Zeichen # entfernen:

 begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"

   Weitere Konfigurationsparameter wie Community-Namen und Zugriffslisten
   mu:ssen ebenfalls in dieser Datei angepasst werden. Weitere Informationen
   finden Sie in bsnmpd(1) und snmp_bridge(3). Nachdem die A:nderungen
   gespeichert wurden, fu:gen Sie folgende Zeile in /etc/rc.conf hinzu:

 bsnmpd_enable="YES"

   Danach starten Sie bsnmpd(1):

 # service bsnmpd start

   Die folgenden Beispiele verwenden das Softwarepaket Net-SNMP
   (net-mgmt/net-snmp), um die Bridge vom Client aus abzufragen. Alternativ
   kann auch der Port net-mgmt/bsnmptools benutzt werden. Auf dem SNMP-Client
   mu:ssen danach die folgenden Zeilen in $HOME/.snmp/snmp.conf hinzugefu:gt
   werden, um die MIB-Definitionen der Bridge in Net-SNMP zu importieren:

 mibdirs +/usr/share/snmp/mibs
 mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIB

   Um eine einzelne Bridge u:ber den IETF BRIDGE-MIB (RFC4188) zu
   u:berwachen:

 % snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge
 BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44
 BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports
 BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds
 BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2
 BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50
 ...
 BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5)
 BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1)
 BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000
 BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
 BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0
 BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
 BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80
 BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1
 RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2)

   Der Wert der Variable dot1dStpTopChanges.0 ist hier 2, die STP-Topologie
   der Bridge wurde also bereits zweimal gea:ndert. Unter einer A:nderung
   versteht man die Anpassung eines oder mehrerer Links und die Kalkulation
   eines neuen Baums. Der Wert der Variable dot1dStpTimeSinceTopologyChange.0
   gibt an, wann dies zuletzt geschah.

   Um mehrere Bridge-Schnittstellen zu u:berwachen, kann der private
   BEGEMOT-BRIDGE-MIB eingesetzt werden:

 % snmpwalk -v 2c -c public bridge1.example.com
 enterprises.fokus.begemot.begemotBridge
 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge0" = STRING: bridge0
 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge2" = STRING: bridge2
 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge0" = STRING: e:ce:3b:5a:9e:13
 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge2" = STRING: 12:5e:4d:74:d:fc
 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge0" = INTEGER: 1
 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge2" = INTEGER: 1
 ...
 BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge0" = Timeticks: (116927) 0:19:29.27 centi-seconds
 BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge2" = Timeticks: (82773) 0:13:47.73 centi-seconds
 BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge0" = Counter32: 1
 BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge2" = Counter32: 1
 BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge0" = Hex-STRING: 80 00 00 40 95 30 5E 31
 BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge2" = Hex-STRING: 80 00 00 50 8B B8 C6 A9

   Um die u:ber den mib-2.dot1dBridge-Subtree u:berwachte
   Bridge-Schnittstelle zu a:ndern:

 % snmpset -v 2c -c private bridge1.example.com
 BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2

30.7. Link-Aggregation und Failover

   Geschrieben von Andrew Thompson.
   U:bersetzt von Benedict Reuschling und Sharon Bahagi.

   Die von FreeBSD unterstu:tzte lagg(4)-Schnittstelle erlaubt die
   Gruppierung von mehreren Netzwerkadaptern als eine virtuelle
   Schnittstelle, mit dem Ziel, Ausfallsicherheit (Failover) und Link
   Aggregation bereitzustellen. Bei Failover kann der Verkehr auch dann
   weiter fliessen, wenn nur eine Schnittstelle verfu:gbar ist. Link
   Aggregation funktioniert am besten mit Switches, die LCAP unterstu:tzen,
   da dieses Protokoll den Datenverkehr bidirektional verteilt, wa:hrend es
   auch auf den Ausfall einzelner Verbindungen reagiert.

   Die von der lagg-Schnittstelle unterstu:tzten Protokolle bestimmen, welche
   Ports fu:r den ausgehenden Datenverkehr benutzt werden, und ob ein
   bestimmter Port eingehenden Datenverkehr akzeptiert. Die folgenden
   Protokolle werden von lagg(4) unterstu:tzt:

   Failover (Ausfallsicherheit)

           Dieser Modus sendet und empfa:ngt Datenverkehr nur auf dem
           Masterport. Sollte der Masterport nicht zur Verfu:gung stehen,
           wird der na:chste aktive Port verwendet. Der zuerst hinzugefu:gte
           Adapter der virtuellen Schnittstelle wird zum Masterport, jeder
           weitere Adapter dient als Gera:t zur Ausfallsicherheit. Wenn ein
           Failover auf einem Nicht-Master Port stattfindet, wird der
           urspru:ngliche Port wieder zum Master-Port, sobald er wieder
           verfu:gbar ist.

   fec / loadbalance (Lastverteilung)

           Cisco(R) Fast EtherChannel(R) (FEC) findet sich auf a:lteren
           Cisco(R) Switches. Es bietet eine statische Konfiguration und
           handelt weder Aggregation mit der Gegenstelle aus, noch werden
           Frames zur U:berwachung der Verbindung ausgetauscht. Wenn der
           Switch LACP unterstu:tzt, sollte diese Option auch verwendet
           werden.

   lacp

           Das IEEE(R) 802.3ad Link-Aggregation Control Protokoll (LACP). Mit
           LACP wird eine Menge von aggregierbaren Verbindungen mit der
           Gegenstelle in einer oder mehreren Link Aggregated Groups (LAG)
           ausgehandelt. Jede LAG besteht aus Ports der gleichen
           Geschwindigkeit, eingestellt auf Voll-Duplex-Betrieb. Der Verkehr
           wird u:ber die Ports in der LAG mit der gro:ssten
           Gesamtgeschwindigkeit balanciert. Typischerweise gibt es nur eine
           LAG, die alle Ports entha:lt. Im Falle von A:nderungen in der
           physischen Anbindung wird LACP schnell zu einer neuen
           Konfiguration konvergieren.

           LACP balanciert ausgehenden Verkehr u:ber die aktiven Ports
           basierend auf der gehashten Protokollheaderinformation und
           akzeptiert eingehenden Verkehr auf jedem aktiven Port. Der Hash
           beinhaltet die Ethernet-Quell- und Zieladresse, und, soweit
           verfu:gbar, den VLAN-Tag, sowie die IPv4 oder IPv6 Quell- und
           Zieladresse.

   roundrobin

           Dieser Modus verteilt ausgehenden Verkehr mittels einer
           Round-Robin-Zuteilung u:ber alle aktiven Ports und akzeptiert
           eingehenden Verkehr auf jedem aktiven Port. Da dieser Modus die
           Reihenfolge von Ethernet-Rahmen verletzt, sollte er mit Vorsicht
           eingesetzt werden.

  30.7.1. Beispiele

   Dieser Abschnitt zeigt, wie man einen Cisco(R) Switch und ein
   FreeBSD-System fu:r LACP Load Balancing konfiguriert. Weiterhin wird
   gezeigt, wie man zwei Ethernet-Schnittstellen, sowie eine Ethernet- und
   eine Drahtlos-Schnittstelle fu:r den Failover-Modus konfigurieren kann.

   Beispiel 30.1. LACP Aggregation mit einem Cisco(R) Switch

   Dieses Beispiel verbindet zwei fxp(4) Ethernet-Schnittstellen einer
   FreeBSD-Maschine zu den ersten zwei Ethernet-Ports auf einem Cisco(R)
   Switch als eine einzelne, lastverteilte und ausfallsichere Verbindung.
   Weitere Adapter ko:nnen hinzugefu:gt werden, um den Durchsatz zu erho:hen
   und die Ausfallsicherheit zu steigern. Ersetzen Sie die Namen der
   Cisco(R)-Ports, Ethernet-Gera:te, channel-group Nummern und IP-Adressen im
   Beispiel durch Namen, die mit Ihrer lokalen Konfiguration u:bereinstimmen.

   Da die Reihenfolge der Frames bei Ethernet zwingend eingehalten werden
   muss, fliesst auch jeglicher Verkehr zwischen zwei Stationen u:ber den
   gleichen physischen Kanal, was die maximale Geschwindigkeit der Verbindung
   auf die eines einzelnen Adapters beschra:nkt. Der U:bertragungsalgorithmus
   versucht, so viele Informationen wie mo:glich zu verwenden, um die
   verschiedenen Verkehrsflu:sse zu unterscheiden und balanciert diese u:ber
   die verfu:gbaren Adapter.

   Fu:gen Sie auf dem Cisco(R)-Switch die Adapter FastEthernet0/1 und
   FastEthernet0/2 zu der channel-group 1 hinzu:

 interface FastEthernet0/1
  channel-group 1 mode active
  channel-protocol lacp
 !
 interface FastEthernet0/2
  channel-group 1 mode active
  channel-protocol lacp

   Erstellen Sie auf der FreeBSD Maschine die lagg(4)-Schnittstelle unter
   Verwendung von fxp0 und fxp1 und starten Sie die Schnittstelle mit der
   IP-Adresse 10.0.0.3/24:

 # ifconfig fxp0 up
 # ifconfig fxp1 up
 # ifconfig lagg0 create
 # ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24

   U:berpru:fen Sie den Status der virtuellen Schnittstelle:

 # ifconfig lagg0
 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=8<VLAN_MTU>
         ether 00:05:5d:71:8d:b8
         inet 10.0.0.3 netmask 0xffffff00 broadcast 10.0.0.255
         media: Ethernet autoselect
         status: active
         laggproto lacp
         laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
         laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

   Ports, die als ACTIVE markiert sind, sind Teil der aktiven
   Aggregations-Gruppe, die mit dem Switch ausgehandelt wurde. Der Verkehr
   wird u:ber diese Gruppe u:bertragen und empfangen. Benutzen Sie
   ifconfig(8) mit -v, um sich die LAG-Bezeichner anzeigen zu lassen.

   Um den Status der Ports auf dem Switch anzuzeigen, benutzen Sie show lacp
   neighbor:

 switch# show lacp neighbor
 Flags:  S - Device is requesting Slow LACPDUs
         F - Device is requesting Fast LACPDUs
         A - Device is in Active mode       P - Device is in Passive mode

 Channel group 1 neighbors

 Partner's information:

                   LACP port                        Oper    Port     Port
 Port      Flags   Priority  Dev ID         Age     Key     Number   State
 Fa0/1     SA      32768     0005.5d71.8db8  29s    0x146   0x3      0x3D
 Fa0/2     SA      32768     0005.5d71.8db8  29s    0x146   0x4      0x3D

   Benutzen Sie show lacp neighbor detail, um weitere Informationen zu
   erhalten.

   Damit diese Konfiguration auch nach einem Neustart erhalten bleibt, fu:gen
   Sie auf dem FreeBSD-System folgende Eintra:ge in /etc/rc.conf hinzu:

 ifconfig_fxp0="up"
 ifconfig_fxp1="up"
 cloned_interfaces="lagg0
 ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24"

   Beispiel 30.2. Ausfallsicherer Modus

   Der ausfallsichere Modus kann verwendet werden, um zu einer zweiten
   Schnittstelle zu wechseln, sollte die Verbindung mit der
   Master-Schnittstelle ausfallen. Um den ausfallsicheren Modus zu
   konfigurieren, aktivieren Sie zuna:chst die zugrunde liegenden
   physikalischen Schnittstellen. Erstellen Sie dann die
   lagg(4)-Schnittstelle mit fxp0 als Master-Schnittstelle und fxp1 als
   sekunda:re Schnittstelle. Der virtuellen Schnittstelle wird die IP-Adresse
   10.0.0.15/24 zugewiesen:

 # ifconfig fxp0 up
 # ifconfig fxp1 up
 # ifconfig lagg0 create
 # ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24

   Die virtuelle Schnittstelle sollte in etwa so aussehen:

 # ifconfig lagg0
 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=8<VLAN_MTU>
         ether 00:05:5d:71:8d:b8
         inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255
         media: Ethernet autoselect
         status: active
         laggproto failover
         laggport: fxp1 flags=0<>
         laggport: fxp0 flags=5<MASTER,ACTIVE>

   Der Verkehr wird auf fxp0 u:bertragen und empfangen. Wenn die Verbindung
   auf fxp0 abbricht, wird fxp1 die Verbindung u:bernehmen. Sobald die
   Verbindung auf der Master-Schnittstelle wiederhergestellt ist, wird diese
   wieder als aktive Schnittstelle genutzt.

   Damit diese Konfiguration auch nach einem Neustart erhalten bleibt, fu:gen
   Sie folgende Eintra:ge in /etc/rc.conf hinzu:

 ifconfig_fxp0="up"
 ifconfig_fxp1="up"
 cloned_interfaces="lagg0
 ifconfig_lagg0="laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24"

   Beispiel 30.3. Failover Modus zwischen Ethernet- und
   Wireless-Schnittstellen

   Fu:r Laptop-Benutzer ist es normalerweise wu:nschenswert, "wireless" als
   sekunda:re Schnittstelle einzurichten, die verwendet wird, wenn die
   Ethernet-Verbindung nicht verfu:gbar ist. Mit lagg(4) ist es mo:glich, ein
   Failover mit einer IP-Adresse zu konfigurieren, welches die
   Ethernet-Verbindung aus Performance- und Sicherheitsgru:nden bevorzugt,
   wa:hrend es gleichzeitig mo:glich bleibt, Daten u:ber die drahtlose
   Verbindung zu u:bertragen.

   Dies wird durch das U:berschreiben der physikalischen MAC-Adresse der
   drahtlosen Schnittstelle, durch die der Ethernet-Schnittstelle erreicht.

   In diesem Beispiel ist die Ethernet-Schnittstelle bge0 die
   Master-Schnittstelle und die drahtlose Schnittstelle wlan0 die
   Failover-Schnittstelle. wlan0 wurde von der iwn0 mit der MAC-Adresse der
   Ethernet-Schnittstelle eingerichtet. Im ersten Schritt wird die
   MAC-Adresse der Ethernet-Schnittstelle ermittelt:

 # ifconfig bge0
 bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
         ether 00:21:70:da:ae:37
         inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2
         nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
         media: Ethernet autoselect (1000baseT <full-duplex>)
         status: active

   Ersetzen Sie bge0 durch den Namen der Ethernet-Schnittstelle des Systems.
   Die ether-Zeile wird die MAC-Adresse der angegebenen Schnittstelle
   enthalten. A:ndern Sie nun die MAC-Adresse der zugrunde liegenden
   drahtlosen Schnittstelle:

 # ifconfig iwn0 ether 00:21:70:da:ae:37

   Starten Sie die drahtlose Schnittstelle, aber ohne eine IP-Adresse zu
   setzen:

 # ifconfig wlan0 create wlandev iwn0 ssid my_router up

   Stellen Sie sicher, dass die bge0-Schnittstelle aktiv ist. Erstellen Sie
   die lagg(4)-Schnittstelle mit bge0 als Master und wlan0 als Failover:

 # ifconfig bge0 up
 # ifconfig lagg0 create
 # ifconfig lagg0 up laggproto failover laggport bge0 laggport wlan0

   Die virtuelle Schnittstelle sollte in etwa so aussehen:

 # ifconfig lagg0
 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=8<VLAN_MTU>
         ether 00:21:70:da:ae:37
         media: Ethernet autoselect
         status: active
         laggproto failover
         laggport: wlan0 flags=0<>
         laggport: bge0 flags=5<MASTER,ACTIVE>

   Starten Sie dann den DHCP-Client, um eine IP-Adresse zu erhalten:

 # dhclient lagg0

   Damit diese Konfiguration auch nach einem Neustart erhalten bleibt, fu:gen
   Sie folgende Eintra:ge in /etc/rc.conf hinzu:

 ifconfig_bge0="up"
 wlans_iwn0="wlan0"
 ifconfig_wlan0="WPA"
 create_args_wlan0="wlanaddr 00:21:70:da:ae:37"
 cloned_interfaces="lagg0"
 ifconfig_lagg0="up laggproto failover laggport bge0 laggport wlan0 DHCP"

30.8. Plattenloser Betrieb mit PXE

   Aktualisiert von Jean-Franc,ois Dockes.
   Reorganisiert und erweitert von Alex Dupre.

   Das Intel(R) Preboot eXecution Environment (PXE) erlaubt es dem
   Betriebssystem u:ber das Netzwerk zu starten. Zum Beispiel kann ein
   FreeBSD-System, ohne lokale Festplatte, u:ber das Netzwerk gestartet und
   betrieben werden. Die Dateisysteme werden dabei u:ber einen NFS-Server
   eingehangen. PXE-Unterstu:tzung steht in der Regel im BIOS zur Verfu:gung.
   Um PXE beim Systemstart zu verwenden, mu:ssen Sie im BIOS des Rechners die
   Option U:ber das Netzwerk starten aktivieren. Alternativ ko:nnen Sie
   wa:hrend der PC-Initialisierung auch eine Funktionstaste dru:cken.

   Um die notwendigen Dateien fu:r ein Betriebssystem fu:r den Start u:ber
   das Netzwerk bereitzustellen, beno:tigt ein PXE-Setup einen richtig
   konfigurierten DHCP-, TFTP- und NFS-Server, wobei:

     * Die initialen Parameter, wie IP-Adresse, Dateiname und Speicherort der
       ausfu:hrbaren Bootdateien, Servername sowie Root-Pfad vom DHCP-Server
       bezogen werden.

     * Der Loader fu:r das Betriebssystem u:ber TFTP gestartet wird.

     * Die Dateisysteme u:ber NFS geladen werden.

   Sobald das Gastsystem u:ber PXE startet, erha:lt es vom DHCP-Server
   Informationen, wo der initiale Bootloader per TFTP zu bekommen ist.
   Nachdem das Gastsystem diese Informationen erhalten hat, la:dt es den
   Bootloader u:ber TFTP herunter und fu:hrt diesen anschliessend aus. In
   FreeBSD ist /boot/pxeboot der Bootloader. Nachdem /boot/pxeboot
   ausgefu:hrt und der FreeBSD-Kernel geladen wurde, wird mit dem Rest der
   FreeBSD-Bootsequenz, wie in Kapitel 12, FreeBSDs Bootvorgang beschrieben,
   fortgefahren.

   Dieser Abschnitt beschreibt, wie Sie diese Dienste auf einem
   FreeBSD-System so konfigurieren, sodass andere Systeme FreeBSD u:ber PXE
   starten ko:nnen. Weitere Informationen finden Sie in diskless(8).

  Achtung:

   Wie beschrieben, ist das System, welches diese Dienste bereitstellt,
   unsicher. Daher sollte es in einem geschu:tzten Bereich des Netzwerks
   aufgestellt und von anderen Hosts als nicht vertrauenswu:rdig eingestuft
   werden.

  30.8.1. Konfiguration der PXE-Umgebung

   Beigetragen von Craig Rodrigues.

   Die in diesem Abschnitt dargestellten Schritte konfigurieren die in
   FreeBSD enthaltenen NFS- und TFTP-Server. Der folgende Abschnitt
   beschreibt die Installation und Konfiguration des DHCP-Servers. In diesem
   Beispiel verwenden wir /b/tftpboot/FreeBSD/install, welches die Dateien
   fu:r PXE-Benutzer entha:lt. Es ist wichtig, dass dieses Verzeichnis
   existiert und das der gleiche Verzeichnisname ebenfalls in /etc/inetd.conf
   und /usr/local/etc/dhcpd.conf gesetzt wird.

    1. Erstellen Sie das Root-Verzeichnis, welches eine FreeBSD-Installation
       entha:lt und u:ber NFS eingehangen werden kann:

 # export NFSROOTDIR=/b/tftpboot/FreeBSD/install
 # mkdir -p ${NFSROOTDIR}

    2. Aktivieren Sie den NFS-Server, indem Sie folgende Zeile in
       /etc/rc.conf hinzufu:gen:

 nfs_server_enable="YES"

       Exportieren Sie das Root-Verzeichnis u:ber NFS, indem Sie folgende
       Zeile in /etc/exports hinzufu:gen:

 /b -ro -alldirs -maproot=root

    3. Starten Sie den NFS-Server:

 # service nfsd start

    4. Aktivieren Sie inetd(8), indem Sie folgende Zeile in /etc/rc.conf
       hinzufu:gen:

 inetd_enable="YES"

    5. Kommentieren Sie die folgende Zeile in /etc/inetd.conf aus, indem Sie
       sicherstellen, dass die Zeile nicht mit einem #-Zeichen beginnt:

 tftp dgram udp wait root /usr/libexec/tftp tftp -l -s /b/tftpboot

  Anmerkung:

       Einige PXE-Versionen beno:tigen die TCP-Version von TFTP. In diesem
       Fall ko:nnen Sie die zweite tftp-Zeile, welche stream tcp entha:lt,
       auskommentieren.

    6. Starten Sie inetd(8):

 # service inetd start

    7. Installieren Sie das Basissystem nach ${NFSROOTDIR}, indem Sie die
       offiziellen Archive entpacken, oder ein neues Basissystem und einen
       FreeBSD-Kernel erstellen. Detaillierte Anweisungen hierzu finden Sie
       im Abschnitt 23.5, "FreeBSD aus den Quellen aktualisieren". Vergessen
       Sie jedoch nicht DESTDIR=${NFSROOTDIR} hinzuzufu:gen, wenn Sie die
       Kommandos make installkernel und make installworld ausfu:hren.

    8. Testen Sie den TFTP-Server und vergewissern Sie sich, dass Sie den
       Bootloader herunterladen ko:nnen, der u:ber PXE bereitgestellt wird:

 # tftp localhost
 tftp> get FreeBSD/install/boot/pxeboot
 Received 264951 bytes in 0.1 seconds

    9. Bearbeiten Sie ${NFSROOTDIR}/etc/fstab und erstellen Sie einen
       Eintrag, um das Root-Dateisystem u:ber NFS einzuha:ngen:

 # Device                                         Mountpoint    FSType   Options  Dump Pass$
             myhost.example.com:/b/tftpboot/FreeBSD/install       /         nfs      ro        0    0

       Ersetzen Sie myhost.example.com durch den Hostnamen oder die
       IP-Adresse des NFS-Servers. In diesem Beispiel wird das
       Root-Dateisystem schreibgeschu:tzt eingehangen, um ein potenzielles
       Lo:schen des Inhalts durch die NFS-Clients zu verhindern.

   10. Setzen Sie das root-Passwort in der PXE-Umgebung fu:r
       Client-Maschinen, die u:ber PXE starten:

 # chroot ${NFSROOTDIR}
 # passwd

   11. Falls erforderlich, aktivieren Sie ssh(1) root-Logins fu:r
       Client-Maschinen, die u:ber PXE starten, indem Sie die Option
       PermitRootLogin in ${NFSROOTDIR}/etc/ssh/sshd_config aktivieren. Dies
       ist in sshd_config(5) dokumentiert.

   12. Fu:hren Sie alle weiteren Anpassungen der PXE-Umgebung in
       ${NFSROOTDIR} durch, wie zum Beispiel die Installation weiterer
       Pakete, oder dass Bearbeiten der Passwortdatei mit vipw(8).

   Booten Sie von einem NFS-Root-Volume, so erkennt /etc/rc dies und startet
   daraufhin das /etc/rc.initdiskless Skript. Lesen Sie die Kommentare in
   diesem Skript um zu verstehen, was dort vor sich geht. Weil das
   NFS-Root-Verzeichnis schreibgeschu:tzt ist, wir aber Schreibzugriff fu:r
   /etc und /var beno:tigen, mu:ssen wir diese Verzeichnisse u:ber
   Speicher-Dateisysteme (memory backed file system) einbinden.

 # chroot ${NFSROOTDIR}
 # mkdir -p conf/base
 # tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc
 # tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var

   Wenn das System bootet, werden Speicher-Dateisysteme fu:r /etc und /var
   erstellt und eingehangen. Anschliessend wird der Inhalt der
   cpio.gz-Dateien in diese Dateisysteme kopiert. Standardma:ssig haben diese
   Dateisysteme eine maximale Kapazita:t von 5 Megabyte. Wenn die Archive
   nicht passen, was fu:r gewo:hnlich bei /var der Fall ist, erho:hen Sie die
   Kapazita:t indem Sie die Anzahl der beno:tigten 512 Byte Sektoren (5
   Megabyte sind 10240 Sektoren) in ${NFSROOTDIR}/conf/base/etc/md_size und
   ${NFSROOTDIR}/conf/base/var/md_size fu:r die Dateisysteme /etc und /var
   eintragen.

  30.8.2. Konfiguration des DHCP-Servers

   Der DHCP-Server muss nicht auf derselben Maschine laufen wie der TFTP- und
   NFS-Server, aber er muss u:ber das Netzwerk erreichbar sein.

   DHCP ist nicht Bestandteil des FreeBSD Basissystems, kann jedoch u:ber den
   Port net/isc-dhcp43-server oder als Paket nachinstalliert werden.

   Einmal installiert, bearbeiten Sie die Konfigurationsdatei
   /usr/local/etc/dhcpd.conf. Konfigurieren Sie die next-server, filename und
   root-path Einstellungen, wie in diesem Beispiel zu sehen ist:

 subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.2 192.168.0.3;
 option subnet-mask 255.255.255.0;
 option routers 192.168.0.1;
 option broadcast-address 192.168.0.255;
 option domain-name-servers 192.168.35.35, 192.168.35.36;
 option domain-name "example.com";

 # IP address of TFTP server
 next-server 192.168.0.1;

 # path of boot loader obtained via tftp
 filename "FreeBSD/install/boot/pxeboot";

 # pxeboot boot loader will try to NFS mount this directory for root FS
 option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/";
 }

   Die Anweisung next-server wird benutzt, um die IP-Adresse des TFTP-Servers
   anzugeben.

   Die Anweisung filename definiert den Pfad zu /boot/pxeboot. Da hier der
   relative Dateiname verwendet wird, bedeutet das, dass /b/tftpboot nicht im
   Pfad enthalten ist.

   Die Option root-path bestimmt den Pfad zum NFS root-Dateisystem.

   Sobald die A:nderungen gespeichert werden, aktivieren Sie DHCP beim
   Systemstart, indem Sie die folgende Zeile in /etc/rc.conf hinzufu:gen:

 dhcpd_enable="YES"

   Starten Sie anschliessend den DHCP-Dienst:

 # service isc-dhcpd start

  30.8.3. Fehlersuche bei PXE Problemen

   Sobald alle Dienste konfiguriert und gestartet wurden, sollten PXE-Clients
   in der Lage sein, FreeBSD automatisch u:ber das Netzwerk zu starten. Wenn
   ein bestimmter Client beim hochfahren keine Verbindung herstellen kann,
   sehen Sie im BIOS nach, ob die Option fu:r den Start u:ber das Netzwerk
   konfiguriert ist.

   Dieser Abschnitt gibt einige Tipps zu Fehlerbehebung und zeigt, wie Sie
   Konfigurationsprobleme eingrezen ko:nnen fu:r den Fall, dass PXE-Clients
   nicht in der Lage sind u:ber das Netzwerk zu starten.

    1. Benutzen Sie den net/wireshark Port um Fehler im Netzwerkverkehr
       wa:hrend des Bootvorgangs von PXE zu finden. Der Bootvorgang wird im
       folgenden Diagramm schematisch dargestellt.

       Abbildung 30.1. PXE-Bootvorgang mit NFS Root Mount
       PXE-Bootvorgang mit NFS Root Mount

       1 Client sendet eine DHCPDISCOVER Nachricht.                           
       2 Der DHCP-Server antwortet mit einer IP-Adresse, sowie den Werten     
         fu:r next-server, filename und root-path.                            
       3 Der Client sendet eine TFTP-Anfrage an next-server, mit der Bitte    
         filename zu empfangen.                                               
       4 Der TFTP-Server antwortet und sendet filename zum Client.            
       5 Der Client fu:hrt filename, sprich pxeboot(8) aus, was wiederum den  
         Kernel la:dt. Wenn der Kernel ausgefu:hrt wird, wird das             
         Root-Dateisystem, welches in root-path spezifiziert ist, u:ber NFS   
         eingebunden.                                                         

    2. Schauen Sie in /var/log/xferlog auf dem TFTP-Server und vergewissern
       Sie sich, dass die pxeboot-Datei von der richtigen Adresse
       heruntergeladen wurde. Um die obige Konfiguration von
       /usr/local/etc/dhcpd.conf zu testen, geben Sie folgendes ein:

 # tftp 192.168.0.1
 tftp> get FreeBSD/install/boot/pxeboot
 Received 264951 bytes in 0.1 seconds

       Weitere Informationen finden Sie in tftpd(8) und tftp(1). Die
       BUGS-Sektionen dieser Seiten dokumentieren einige Einschra:nkungen von
       TFTP.

    3. Achten Sie darauf, dass Sie das Root-Dateisystem u:ber NFS einha:ngen
       ko:nnen. Auch hier ko:nnen Sie Ihre Einstellungen aus
       /usr/local/etc/dhcpd.conf wie folgt testen:

 # mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt

30.9. IPv6

   Beigetragen von Aaron Kaplan.
   U:berarbeitet und erweitert von Tom Rhodes.
   Erweitert von Brad Davis.

   IPv6 ist die neueste Version des bekannten IP-Protokolls, das auch als
   IPv4 bezeichnet wird. IPv6 bietet gegenu:ber IPv4 mehrere Vorteile sowie
   viele neue Funktionen:

     * IPv6 hat einen 128 Bit grossen Adressraum, der
       340.282.366.920.938.463.463.374.607.431.768.211.456 Adressen erlaubt.
       Dies behebt das Problem der immer knapper werdenden IPv4-Adressen und
       einer eventuellen Erscho:pfung des IPv4-Adressraums.

     * Router speichern nur noch Netzwerk-Aggregationsadressen in ihren
       Routingtabellen. Dadurch reduziert sich die durchschnittliche Gro:sse
       einer Routingtabelle auf 8192 Eintra:ge. Dies ist mit den Problemen
       bei der Skalierbarkeit von IPv4 verbunden, da jeder zugeordnete Block
       von IPv4-Adressen erfordert, dass Routing-Informationen zwischen
       vielen Routern im Internet ausgetauscht werden mu:ssen. Die
       Routing-Tabellen wurden mit der Zeit so gross, dass ein effizientes
       Routing jetzt kaum noch mo:glich ist.

     * Die automatische Konfiguration von Adressen, die im RFC2462
       beschrieben wird.

     * Verpflichtende Multicast-Adressen.

     * Integriertes IPsec (IP-Security).

     * Eine vereinfachte Headerstruktur.

     * Unterstu:tzung fu:r mobile IP-Adressen.

     * Die Umwandlung von IPv4- in IPv6-Adressen.

   FreeBSD entha:lt die IPv6-Referenzimplementation von KAME und erfu:llt
   damit bereits alle fu:r die Nutzung von IPv6 no:tigen Voraussetzungen.
   Dieser Abschnitt konzentriert sich auf die Konfiguration und den Betrieb
   von IPv6.

  30.9.1. Hintergrundinformationen zu IPv6-Adressen

   Es gibt verschiedene Arten von IPv6-Adressen:

   Unicast

           Ein Paket, das an eine Unicast-Adresse gesendet wird, kommt nur an
           der Schnittstelle an, die dieser Adresse zugeordnet ist.

   Anycast

           Anycast-Adressen unterscheiden sich in ihrer Syntax nicht von
           Unicast-Adressen, sie wa:hlen allerdings aus mehreren
           Schnittstellen eine Schnittstelle aus. Ein fu:r eine
           Anycast-Adresse bestimmtes Paket kommt an der na:chstgelegenen
           (entsprechend der Router-Metrik) Schnittstelle an.
           Anycast-Adressen werden nur von Routern verwendet.

   Mulitcast

           Multicast-Adressen bestimmen Gruppen, denen mehrere Schnittstellen
           angeho:ren. Ein Paket, das an eine Multicast-Adresse geschickt
           wird, kommt an allen Schnittstellen an, die zur Multicast-Gruppe
           geho:ren. Die von IPv4 bekannte Broadcast-Adresse (normalerweise
           xxx.xxx.xxx.255) wird bei IPv6 durch Multicast-Adressen
           verwirklicht.

   Die kanonische Form einer IPv6-Adresse lautet x:x:x:x:x:x:x:x, wobei jedes
   "x" fu:r einen 16-Bit-Hexadezimalwert steht. Ein Beispiel fu:r eine
   IPv6-Adresse wa:re etwa FEBC:A574:382B:23C1:AA49:4592:4EFE:9982.

   Eine IPv6-Adresse entha:lt oft Teilzeichenfolgen aus lauter Nullen. Eine
   solche Zeichenfolge kann zu "::" verku:rzt werden. Bis zu drei fu:hrende
   Nullen eines Hexquads ko:nnen ebenfalls weggelassen werden. fe80::1
   entspricht also der Adresse fe80:0000:0000:0000:0000:0000:0000:0001.

   Eine weitere Mo:glichkeit ist die Darstellung der letzten 32 Bit in der
   bekannten IPv4-Notation. 2002::10.0.0.1 ist also eine andere Schreibweise
   fu:r die (hexadezimale) kanonische Form
   2002:0000:0000:0000:0000:0000:0a00:0001, die wiederum der Adresse
   2002::a00:1 entspricht.

   Benutzen Sie ifconfig(8), um die IPv6-Adresse eines FreeBSD-Systems
   anzuzeigen:

 # ifconfig
 rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
          inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
          inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
          ether 00:00:21:03:08:e1
          media: Ethernet autoselect (100baseTX )
          status: active

   Bei fe80::200:21ff:fe03:8e1%rl0 handelt es sich um eine automatisch
   konfigurierte link-local-Adresse. Sie wird im Rahmen der automatischen
   Konfiguration aus der MAC-Adresse erzeugt.

   Einige IPv6-Adressen sind reserviert. Eine Zusammenfassung dieser Adressen
   finden Sie in Tabelle 30.3, "Reservierte IPv6-Adressen":

   Tabelle 30.3. Reservierte IPv6-Adressen

     IPv6-Adresse   Pra:fixla:nge   Beschreibung          Anmerkungen         
   ::               128 Bit       nicht festgelegt entspricht 0.0.0.0 bei     
                                                   IPv4.                      
   ::1              128 Bit       Loopback-Adresse entspricht 127.0.0.1 bei   
                                                   IPv4.                      
                                  Eingebettete     Die niedrigen 32 Bit sind  
   ::00:xx:xx:xx:xx 96 Bit        IPv4-Adresse     die kompatiblen            
                                                   IPv4-Adressen.             
                                  Eine auf IPv6    Die niedrigen 32 Bit sind  
   ::ff:xx:xx:xx:xx 96 Bit        abgebildete      IPv4-Adressen fu:r Hosts,  
                                  IPv4-Adresse.    die kein IPv6              
                                                   unterstu:tzen.             
   fe80::/10        10 Bit        link-local       Entspricht 196.254.0.0/16  
                                                   bei IPv4.                  
                                                   Diese einzigartigen        
                                                   Adressen sind fu:r die     
                                                   lokale Kommunikation       
   fc00::/7         7 Bit         unique-local     bestimmt und werden nur    
                                                   innerhalb von abgegrenzten 
                                                   Standorten (Sites)         
                                                   weitergeleitet.            
   ff00::           8 Bit         Multicast                                   
                                                   Alle globalen              
   2000::-3fff::    3 Bit         Globaler Unicast Unicast-Adressen stammen   
                                                   aus diesem Pool. Die       
                                                   ersten 3 Bit lauten 001.   

   Weitere Informationen zum Aufbau von IPv6-Adressen finden Sie im RFC3513.

  30.9.2. IPv6 konfigurieren

   Um ein FreeBSD-System als IPv6-Client zu konfigurieren, fu:gen Sie
   folgende Zeile in /etc/rc.conf ein:

 ifconfig_rl0_ipv6="inet6 accept_rtadv"
 rtsold_enable="YES"

   Die erste Zeile ermo:glicht der angegebenen Schnittstelle,
   Router-Solicitation-Nachrichten zu empfangen. Die zweite Zeile aktiviert
   den Router-Solicitation-Daemon rtsold(8).

   Falls die Schnittstelle eine statisch zugewiesene IPv6-Adresse beno:tigt,
   fu:gen Sie einen Eintrag mit der statischen Adresse und dem zugeho:rigen
   Pra:fix fu:r das Subnetz hinzu:

 ifconfig_rl0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64"

   Um einen Standardrouter festzulegen, fu:gen Sie die Adresse hinzu:

 ipv6_defaultrouter="2001:db8:4672:6565::1"

  30.9.3. Verbindung zu einem Provider aufbauen

   Um sich mit anderen IPv6-Netzwerken zu verbinden, beno:tigen Sie einen
   Provider oder einen Tunnel, der IPv6 unterstu:tzt:

     * Fragen Sie einen Internetprovider, ob er IPv6 anbietet.

     * Hurricane Electric bietet weltweit IPv6-Tunnelverbindungen an.

  Anmerkung:

   Die Verwendung des Ports /usr/ports/net/freenet6 fu:r Einwahlverbindungen.

   Dieser Abschnitt beschreibt, wie Sie die Anweisungen eines
   Tunnel-Providers dauerhaft in /etc/rc.conf einrichten.

   Der erste Eintrag in /etc/rc.conf erzeugt die generische
   Tunnelschnittstelle gif0:

 cloned_interfaces="gif0"

   Als na:chstes konfigurieren Sie die IPv4-Adressen der lokalen und
   entfernten Endpunkte. Ersetzen Sie MY_IPv4_ADDR und REMOTE_IPv4_ADDR durch
   die tatsa:chlichen IPv4-Adressen:

 cloned_interfaces_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR"

   Um die zugewiesene IPv6-Adresse als Endpunkt fu:r den IPv6-Tunnel zu
   verwenden, fu:gen Sie folgende Zeile fu:r FreeBSD 9.x (und neuer) ein:

 ifconfig_gif0_ipv6="inet6 MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"

   Legen Sie dann die Standardroute fu:r das andere Ende des IPv6-Tunnels
   fest. Ersetzen Sie MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR mit der Adresse des
   Standard-Gateways des Providers:

 ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR"

   Wenn das FreeBSD-System IPv6-Verkehr zwischen dem Netzwerk und der
   Aussenwelt routen muss, aktivieren Sie das Gateway mit dieser Zeile:

 ipv6_gateway_enable="YES"

  30.9.4. Bekanntmachung von Routen und automatische Rechnerkonfiguration

   Dieser Abschnitt beschreibt die Einrichtung von rtadvd(8), das Sie bei der
   Bekanntmachung der IPv6-Standardroute unterstu:tzt.

   Um rtadvd(8) zu aktivieren, fu:gen Sie folgende Zeile in /etc/rc.conf ein:

 rtadvd_enable="YES"

   Es ist wichtig, die Schnittstelle anzugeben, u:ber die IPv6-Routen
   bekanntgemacht werden sollen. Soll rtadvd(8) rl0 verwenden, ist folgender
   Eintrag no:tig:

 rtadvd_interfaces="rl0"

   Danach erzeugen Sie die Konfigurationsdatei /etc/rtadvd.conf. Dazu ein
   Beispiel:

 rl0:\
     :addrs#1:addr="2001:db8:1f11:246::":prefixlen#64:tc=ether:

   Ersetzen Sie dabei fxp0 durch die zu verwendende Schnittstelle, und
   2001:db8:1f11:246:: durch das entsprechend zugewiesene Pra:fix.

   Bei einem /64-Subnetz mu:ssen keine weiteren Anpassungen vorgenommen
   werden. Anderenfalls muss prefixlen# auf den korrekten Wert gesetzt
   werden.

  30.9.5. IPv6 und Abbildung von IPv6-Adressen

   Wenn IPv6 auf einem Server aktiviert ist, kann es fu:r die Kommunikation
   erforderlich sein, IPv4-Adressen auf IPv6-Adressen abzubilden. Diese
   Kompatibilita:t erlaubt es, das IPv4-Adressen als IPv6-Adressen
   dargestellt werden. Die Kommunikation von IPv6-Anwendungen mit IPv4 und
   umgekehrt kann jedoch ein Sicherheitsrisiko darstellen.

   Diese Option dient nur der Kompatibilita:t und wird in den meisten Fa:llen
   nicht erforderlich sein. Die Option ermo:glicht es IPv6-Anwendungen
   zusammen mit IPv4 in einer Dual-Stack-Umgebung zu funktionieren. Dies ist
   besonders nu:tzlich fu:r Anwendungen von Drittanbietern, die evtl. keine
   IPv6-Umgebungen unterstu:tzen. Um diese Funktion zu aktivieren, fu:gen Sie
   folgendes in /etc/rc.conf hinzu:

 ipv6_ip4mapping="YES"

   Fu:r einige Administratoren ko:nnen die Informationen im RFC 3493 (Sektion
   3.6 und 3.7) und RFC 4038 (Sektion 4.2) hilfreich sein.

30.10. Common Address Redundancy Protocol (CARP)

   Beigetragen von Tom Rhodes.
   Aktualisiert von Allan Jude.

   Das Common Address Redundancy Protocol (CARP) erlaubt es, mehreren
   Rechnern die gleiche IP-Adresse und Virtual Host ID (VHID) zuzuweisen und
   Hochverfu:gbarkeit bereitzustellen. Das bedeutet, dass ein oder mehrere
   Rechner ausfallen ko:nnen und die anderen Rechner transparent einspringen,
   ohne dass die Benutzer etwas von einem Ausfall mitbekommen.

   Neben der gemeinsamen IP-Adresse, haben die jeweiligen Rechner auch eine
   eindeutige IP-Adresse zur Verwaltung und Konfiguration. Alle Maschinen,
   die sich eine IP-Adresse teilen, verwenden die gleiche VHID. Die VHID fu:r
   jede einzelne IP-Adresse muss, entsprechend der Broadcast-Doma:ne der
   Netzwerkschnittstelle, eindeutig sein.

   Hochverfu:gbarkeit mit CARP ist in FreeBSD enthalten, jedoch unterscheidet
   sich die Konfiguration von der eingesetzten FreeBSD-Version. Dieser
   Abschnitt entha:lt die gleichen Konfigurationsdateien fu:r verschiedene
   Versionen von FreeBSD.

   Dieses Beispiel konfiguriert eine Failover-Unterstu:tzung mit drei Servern
   (mit jeweils eigener, eindeutiger IP-Adresse), die alle den gleichen
   Web-Inhalt anbieten. Es werden zwei verschiedene Master namens
   hosta.example.org und hostb.example.org benutzt, mit einem gemeinsamen
   Backup namens hostc.example.org.

   Die Lastverteilung dieser Maschinen wird dabei u:ber Round Robin DNS
   konfiguriert. Mit Ausnahme des Hostnamens und der IP-Management-Adresse
   sind Master- und Backup-Maschinen identisch konfiguriert. Die Server
   mu:ssen die gleiche Konfiguration und die gleichen Dienste aktiviert
   haben. Tritt ein Failover auf, ko:nnen Anfragen an den Dienst mit der
   gemeinsam genutzten IP-Adresse nur dann richtig beantwortet werden, wenn
   der Backup-Server Zugriff auf denselben Inhalt hat. Die Backup-Maschine
   verfu:gt u:ber zwei zusa:tzliche CARP-Schnittstellen, eine fu:r jede
   IP-Adresse des Master-Content-Servers. Sobald ein Fehler auftritt,
   u:bernimmt der Backup-Server die IP-Adresse des ausgefallenen
   Master-Servers.

  30.10.1. CARP mit FreeBSD 10 (und neuer) benutzen

   Unterstu:tzung fu:r CARP erhalten Sie durch das Laden des Kernelmoduls
   carp.ko in /boot/loader.conf:

 carp_load="YES"

   So laden Sie das Modul ohne Neustart:

 # kldload carp

   Benutzer, die einen angepassten Kernel verwenden mo:chten, mu:ssen die
   folgende Zeile in die Konfigurationsdatei aufnehmen. Anschliessend muss
   der Kernel, wie in Kapitel 8, Konfiguration des FreeBSD-Kernels
   beschrieben, neu gebaut werden:

 device  carp

   Hostname, IP-Management-Adresse, Subnetzmaske, gemeinsame IP-Adresse und
   VHID werden durch Eintra:ge in /etc/rc.conf gesetzt. Dieses Beispiel ist
   fu:r hosta.example.org:

 hostname="hosta.example.org"
 ifconfig_em0="inet 192.168.1.3 netmask 255.255.255.0"
 ifconfig_em0_alias0="inet vhid 1 pass testpass alias 192.168.1.50/32"

   Die na:chsten Eintra:ge sind fu:r hostb.example.org. Da der Rechner einen
   zweiten Master darstellt, verwendet er eine andere gemeinsame IP-Adresse
   und VHID. Die mittels pass angegebenen Passwo:rter mu:ssen jedoch
   identisch sein, da CARP nur mit Systemen kommuniziert, die u:ber das
   richtige Passwort verfu:gen.

 hostname="hostb.example.org"
 ifconfig_em0="inet 192.168.1.4 netmask 255.255.255.0"
 ifconfig_em0_alias0="inet vhid 2 pass testpass alias 192.168.1.51/32"

   Die dritte Maschine, hostc.example.org ist so konfiguriert, das sie
   aktiviert wird, wenn einer der beiden Masterserver ausfa:llt. Diese
   Maschine ist mit zwei CARP VHIDs konfiguriert, eine fu:r jede virtuelle
   IP-Adresse der beiden Master-Server. Die CARP advertising skew, advskew
   wird gesetzt, um sicherzustellen, dass sich der Backup-Server spa:ter
   anku:ndigt wie der Master-Server, da advskew die Rangfolge steuert fu:r
   den Fall, dass mehrere Backup-Server zur Verfu:gung stehen.

 hostname="hostc.example.org"
 ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
 ifconfig_em0_alias0="inet vhid 1 advskew 100 pass testpass alias 192.168.1.50/32"
 ifconfig_em0_alias1="inet vhid 2 advskew 100 pass testpass alias 192.168.1.51/32"

   Durch die beiden konfigurierten CARP VHIDs ist hostc.example.org in der
   Lage festzustellen, wenn einer der Master-Server nicht mehr reagiert. Wenn
   der Master-Server sich spa:ter anku:ndigt als der Backup-Server,
   u:bernimmt der Backup-Server die gemeinsame IP-Adresse, bis der
   Master-Server erneut verfu:gbar ist.

   Preemption ist standardma:ssig deaktiviert. Wird Preemption aktiviert,
   kann es vorkommen, dass hostc.example.org die virtuelle IP-Adresse nicht
   wieder an den Master-Server zuru:ckgibt. Der Administrator kann jedoch den
   Backup-Server dazu zwingen, die u:bernommene IP-Adresse wieder an den
   Master-Server zuru:ckzugeben:

 # ifconfig em0 vhid 1 state backup

   Sobald die Konfiguration abgeschlossen ist, muss das Netzwerk oder die
   Maschine neu gestartet werden. Hochverfu:gbarkeit ist nun aktiviert.

   Die Funktionalita:t von CARP kann, wie in der Manualpage carp(4)
   beschrieben, u:ber verschiedene sysctl(8) Parameter kontrolliert werden.
   Mit dem Einsatz von devd(8) ko:nnen weitere Aktionen zu CARP-Ereignissen
   ausgelo:st werden.

  30.10.2. CARP mit FreeBSD 9 (und a:lter) benutzen

   Die Konfiguration fu:r diese Versionen von FreeBSD ist a:hnlich wie im
   vorhergehenden Abschnitt beschrieben, mit der Ausnahme, dass zuerst ein
   CARP-Gera:t in der Konfiguration erstellt und bezeichnet werden muss.

   Unterstu:tzung fu:r CARP erhalten Sie durch das Laden des Kernelmoduls
   carp.ko in /boot/loader.conf:

 if_carp_load="YES"

   So laden Sie das Modul ohne Neustart:

 # kldload carp

   Benutzer, die einen angepassten Kernel verwenden mo:chten, mu:ssen die
   folgende Zeile in die Konfigurationsdatei aufnehmen. Anschliessend muss
   der Kernel, wie in Kapitel 8, Konfiguration des FreeBSD-Kernels
   beschrieben, neu gebaut werden:

 device    carp

   Als na:chstes erstellen Sie auf jedem Rechner eine CARP-Schnittstelle:

 # ifconfig carp0 create

   Konfigurieren Sie Hostnamen, IP-Management-Adresse, die gemeinsam genutzte
   IP-Adresse und die VHID, indem Sie die erforderlichen Zeilen in
   /etc/rc.conf hinzufu:gen. Da anstelle eines Alias eine virtuelles
   CARP-Gera:t verwendet wird, wird die tatsa:chliche Subnetzmaske /24
   anstatt /32 benutzt. Hier sind die Eintra:ge fu:r hosta.example.org:

 hostname="hosta.example.org"
 ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"
 cloned_interfaces="carp0"
 ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24"

   Beispiel fu:r hostb.example.org:

 hostname="hostb.example.org"
 ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"
 cloned_interfaces="carp0"
 ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24"

   Die dritte Maschine, hostc.example.org ist so konfiguriert, das sie
   aktiviert wird, wenn einer der beiden Masterserver ausfa:llt:

 hostname="hostc.example.org"
 ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"
 cloned_interfaces="carp0 carp1"
 ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24"
 ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24"

  Anmerkung:

   Preemption ist im GENERIC-Kernel deaktiviert. Haben Sie jedoch Preemption
   in einem angepassten Kernel aktiviert, dass hostc.example.org die
   virtuelle IP-Adresse nicht wieder an den Master-Server zuru:ckgibt. Der
   Administrator kann jedoch den Backup-Server dazu zwingen, die u:bernommene
   IP-Adresse wieder an den Master-Server zuru:ckzugeben:

 # ifconfig carp0 down && ifconfig carp0 up

   Dieser Befehl muss auf dem carp-Gera:t ausgefu:hrt werden, dass dem
   betroffenen System zugeordnet ist.

   Sobald die Konfiguration abgeschlossen ist, muss das Netzwerk oder die
   Maschine neu gestartet werden. Hochverfu:gbarkeit ist nun aktiviert.

30.11. VLANs

   VLANs sind eine Mo:glichkeit ein Netzwerk in viele Subnetze zu
   unterteilen. Jedes Subnetz hat seine eigene Broadcast-Doma:ne und ist von
   den restlichen VLANs isoliert.

   Unter FreeBSD mu:ssen VLANs vom Treiber der Netzwerkkarte unterstu:tzt
   werden. vlan(4) entha:lt eine Liste von Treibern mit integrierter
   VLAN-Unterstu:tzung.

   Fu:r die Konfiguration eines VLAN werden zwei Informationen beno:tigt: die
   verwendete Netzwerkschnittstelle und das VLAN-Tag.

   Das folgende Kommando konfiguriert ein VLAN mit der Netzwerkschnittstelle
   em0 und dem VLAN-Tag 5:

 # ifconfig em0.5 create vlan 5 vlandev em0 inet 192.168.20.20/24

  Anmerkung:

   In diesem Beispiel fa:llt auf, dass der Name der Schnittstelle den
   Treibernamen und das VLAN-Tag entha:lt, getrennt durch einen Punkt. Diese
   Methode hat sich bewa:hrt, da sie die Konfiguration von Systemen mit
   mehreren VLANs deutlich erleichtert.

   Um VLANs beim Booten zu konfigurieren, muss /etc/rc.conf angepasst werden.
   Fu:r das obige Beispiel mu:ssten folgende Zeilen in die Konfiguration
   aufgenommen werden:

 vlans_em0="5"
 ifconfig_em0_5="inet 192.168.20.20/24"

   Das gleiche Schema kann benutzt werden, um weitere VLANs hinzuzufu:gen.

                                 Teil V. Anhang

   Inhaltsverzeichnis

   A. Bezugsquellen fu:r FreeBSD

                A.1. CD und DVD Sets

                A.2. FTP-Server

                A.3. Benutzen von Subversion

                A.4. Benutzen von rsync

   B. Bibliografie

                B.1. Bu:cher speziell fu:r FreeBSD

                B.2. Handbu:cher

                B.3. Administrations-Anleitungen

                B.4. Programmierhandbu:cher

                B.5. Betriebssystem-Interna

                B.6. Sicherheits-Anleitung

                B.7. Hardware-Anleitung

                B.8. UNIX(R) Geschichte

                B.9. Zeitschriften, Magazine und Journale

   C. Ressourcen im Internet

                C.1. Webseiten

                C.2. Mailinglisten

                C.3. Usenet-News

                C.4. Offizielle Spiegel

   D. OpenPGP-Schlu:ssel

                D.1. Ansprechpartner

Anhang A. Bezugsquellen fu:r FreeBSD

   Inhaltsverzeichnis

   A.1. CD und DVD Sets

   A.2. FTP-Server

   A.3. Benutzen von Subversion

   A.4. Benutzen von rsync

A.1. CD und DVD Sets

   Die FreeBSD-CDs und -DVDs werden von verschiedenen Online-Ha:ndlern
   angeboten:

     * FreeBSD Mall, Inc.
         2420 Sand Creek Rd C-1 #347
         Brentwood,
         CA
         94513
         USA
         Telefon: +1 925 240-6652
         Fax: +1 925 674-0821
         E-Mail: <info@freebsdmall.com>
         WWW: https://www.freebsdmall.com/

     * Getlinux
         78 Rue de la Croix Rochopt
         Epinay-sous-Senart
         91860
         France
         E-Mail: <contact@getlinux.fr>
         WWW: http://www.getlinux.fr/

     * Dr. Hinner EDV
         Kochelseestr. 11
         D-81371 Mu:nchen
         Germany
         Telefon: (0177) 428 419 0
         E-Mail: <infow@hinner.de>
         WWW: http://www.hinner.de/linux/freebsd.html

     * Linux Center
         Galernaya Street, 55
         Saint-Petersburg
         190000
         Russia
         Telefon: +7-812-309-06-86
         E-Mail: <info@linuxcenter.ru>
         WWW: http://linuxcenter.ru/shop/freebsd

A.2. FTP-Server

   Die offiziellen Quellen von FreeBSD sind mit anonymous FTP u:ber ein
   weltweites Netz von Spiegeln erha:ltlich. Die Seite
   ftp://ftp.FreeBSD.org/pub/FreeBSD/ ist u:ber HTTP und FTP erreichbar. Sie
   besteht aus mehreren Servern, die von den Cluster-Administratoren des
   Projekts u:ber GeoDNS betrieben wird, um Benutzer auf den na:chsten
   verfu:gbaren Spiegel umzuleiten.

   Sie ko:nnen FreeBSD auch u:ber anonymous FTP von den folgenden Spiegeln
   beziehen. Wenn Sie FreeBSD u:ber anonymous FTP beziehen wollen, wa:hlen
   Sie bitte einen Spiegel in Ihrer Na:he. Die unter "Haupt-Spiegel"
   aufgefu:hrten Spiegel stellen normalerweise das komplette FreeBSD-Archiv
   (alle momentan erha:ltlichen Versionen fu:r jede unterstu:tzte
   Architektur) zur Verfu:gung. Wahrscheinlich geht es aber schneller, wenn
   Sie einen Spiegel in Ihrer Na:he benutzen. Die La:nder-Spiegel stellen die
   neusten Versionen fu:r die beliebtesten Architekturen bereit, sie stellen
   aber unter Umsta:nden nicht das komplette FreeBSD-Archiv bereit. Auf alle
   Server kann mit anonymous FTP zugegriffen werden, einige Server bieten
   auch andere Zugriffsmethoden an. Die zur Verfu:gung stehenden
   Zugriffsmethoden sind bei jedem Server in Klammern angegeben.

   Hauptserver, Hauptspiegel, Armenien, Australien, Brasilien, China,
   Da:nemark, Deutschland, Estland, Finnland, Frankreich, Griechenland,
   Grossbritannien, Hong Kong, Irland, Japan, Korea, Lettland, Litauen,
   Neuseeland, Niederlande, Norwegen, O:sterreich, Polen, Russland, Saudi
   Arabien, Schweden, Schweiz, Slowenien, Spanien, Su:dafrika, Taiwan,
   Tschechische Republik, Ukraine, USA.

   (aktualisiert am: UTC)

   Hauptserver
              * ftp://ftp.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6 /
                http://ftp.FreeBSD.org/pub/FreeBSD/ /
                http://ftp.FreeBSD.org/pub/FreeBSD/)

   Hauptspiegel

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <mirror-admin@FreeBSD.org> dieser Domain.

              * ftp://ftp1.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp3.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp4.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6 /
                http://ftp4.FreeBSD.org/pub/FreeBSD/ /
                http://ftp4.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp5.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp6.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp7.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp10.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6 /
                http://ftp10.FreeBSD.org/pub/FreeBSD/ /
                http://ftp10.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp11.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp13.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp14.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp14.FreeBSD.org/pub/FreeBSD/)

   Armenien

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@am.FreeBSD.org> dieser Domain.

              * ftp://ftp1.am.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp1.am.FreeBSD.org/pub/FreeBSD/ / rsync)

   Australien

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@au.FreeBSD.org> dieser Domain.

              * ftp://ftp.au.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.au.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp3.au.FreeBSD.org/pub/FreeBSD/ (ftp)

   Brasilien

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@br.FreeBSD.org> dieser Domain.

              * ftp://ftp2.br.FreeBSD.org/FreeBSD/ (ftp /
                http://ftp2.br.FreeBSD.org/)

              * ftp://ftp3.br.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)

              * ftp://ftp4.br.FreeBSD.org/pub/FreeBSD/ (ftp)

   China

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@cn.FreeBSD.org> dieser Domain.

              * ftp://ftp.cn.FreeBSD.org/pub/FreeBSD/ (ftp)

   Da:nemark

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@dk.FreeBSD.org> dieser Domain.

              * ftp://ftp.dk.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6 /
                http://ftp.dk.FreeBSD.org/pub/FreeBSD/ /
                http://ftp.dk.FreeBSD.org/pub/FreeBSD/)

   Deutschland

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <de-bsd-hubs@de.FreeBSD.org> dieser Domain.

              * ftp://ftp.de.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp1.de.FreeBSD.org/freebsd/ (ftp /
                http://www1.de.FreeBSD.org/freebsd/ /
                rsync://rsync3.de.FreeBSD.org/freebsd/)

              * ftp://ftp2.de.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp2.de.FreeBSD.org/pub/FreeBSD/ / rsync)

              * ftp://ftp4.de.FreeBSD.org/FreeBSD/ (ftp /
                http://ftp4.de.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp5.de.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp7.de.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp7.de.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp8.de.FreeBSD.org/pub/FreeBSD/ (ftp)

   Estland

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@ee.FreeBSD.org> dieser Domain.

              * ftp://ftp.ee.FreeBSD.org/pub/FreeBSD/ (ftp)

   Finnland

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@fi.FreeBSD.org> dieser Domain.

              * ftp://ftp.fi.FreeBSD.org/pub/FreeBSD/ (ftp)

   Frankreich

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@fr.FreeBSD.org> dieser Domain.

              * ftp://ftp.fr.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp1.fr.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp1.fr.FreeBSD.org/pub/FreeBSD/ / rsync)

              * ftp://ftp3.fr.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp5.fr.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp6.fr.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)

              * ftp://ftp7.fr.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp8.fr.FreeBSD.org/pub/FreeBSD/ (ftp)

   Griechenland

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@gr.FreeBSD.org> dieser Domain.

              * ftp://ftp.gr.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.gr.FreeBSD.org/pub/FreeBSD/ (ftp)

   Grossbritannien

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@uk.FreeBSD.org> dieser Domain.

              * ftp://ftp.uk.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.uk.FreeBSD.org/pub/FreeBSD/ (ftp /
                rsync://ftp2.uk.FreeBSD.org/ftp.freebsd.org/pub/FreeBSD/)

              * ftp://ftp3.uk.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp4.uk.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp5.uk.FreeBSD.org/pub/FreeBSD/ (ftp)

   Hong Kong
              * ftp://ftp.hk.FreeBSD.org/pub/FreeBSD/ (ftp)

   Irland

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@ie.FreeBSD.org> dieser Domain.

              * ftp://ftp3.ie.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)

   Japan

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@jp.FreeBSD.org> dieser Domain.

              * ftp://ftp.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp3.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp4.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp5.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp6.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp7.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp8.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp9.jp.FreeBSD.org/pub/FreeBSD/ (ftp)

   Korea

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@kr.FreeBSD.org> dieser Domain.

              * ftp://ftp.kr.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)

              * ftp://ftp2.kr.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp2.kr.FreeBSD.org/pub/FreeBSD/)

   Lettland

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@lv.FreeBSD.org> dieser Domain.

              * ftp://ftp.lv.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.lv.FreeBSD.org/pub/FreeBSD/)

   Litauen

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@lt.FreeBSD.org> dieser Domain.

              * ftp://ftp.lt.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.lt.FreeBSD.org/pub/FreeBSD/)

   Neuseeland
              * ftp://ftp.nz.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.nz.FreeBSD.org/pub/FreeBSD/)

   Niederlande

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@nl.FreeBSD.org> dieser Domain.

              * ftp://ftp.nl.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.nl.FreeBSD.org/os/FreeBSD/ / rsync)

              * ftp://ftp2.nl.FreeBSD.org/pub/FreeBSD/ (ftp)

   Norwegen

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@no.FreeBSD.org> dieser Domain.

              * ftp://ftp.no.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)

   O:sterreich

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@at.FreeBSD.org> dieser Domain.

              * ftp://ftp.at.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6 /
                http://ftp.at.FreeBSD.org/pub/FreeBSD/ /
                http://ftp.at.FreeBSD.org/pub/FreeBSD/)

   Polen

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@pl.FreeBSD.org> dieser Domain.

              * ftp://ftp.pl.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp2.pl.FreeBSD.org

   Russland

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@ru.FreeBSD.org> dieser Domain.

              * ftp://ftp.ru.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.ru.FreeBSD.org/FreeBSD/ / rsync)

              * ftp://ftp2.ru.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp2.ru.FreeBSD.org/pub/FreeBSD/ / rsync)

              * ftp://ftp4.ru.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp5.ru.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp5.ru.FreeBSD.org/pub/FreeBSD/ / rsync)

              * ftp://ftp6.ru.FreeBSD.org/pub/FreeBSD/ (ftp)

   Saudi Arabien

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <ftpadmin@isu.net.sa> dieser Domain.

              * ftp://ftp.isu.net.sa/pub/ftp.freebsd.org/ (ftp)

   Schweden

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@se.FreeBSD.org> dieser Domain.

              * ftp://ftp.se.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.se.FreeBSD.org/pub/FreeBSD/ (ftp /
                rsync://ftp2.se.FreeBSD.org/)

              * ftp://ftp3.se.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp4.se.FreeBSD.org/pub/FreeBSD/ (ftp /
                ftp://ftp4.se.FreeBSD.org/pub/FreeBSD/ /
                http://ftp4.se.FreeBSD.org/pub/FreeBSD/ /
                http://ftp4.se.FreeBSD.org/pub/FreeBSD/ /
                rsync://ftp4.se.FreeBSD.org/pub/FreeBSD/ /
                rsync://ftp4.se.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp6.se.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp6.se.FreeBSD.org/pub/FreeBSD/)

   Schweiz

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@ch.FreeBSD.org> dieser Domain.

              * ftp://ftp.ch.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.ch.FreeBSD.org/pub/FreeBSD/)

   Slowenien

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@si.FreeBSD.org> dieser Domain.

              * ftp://ftp.si.FreeBSD.org/pub/FreeBSD/ (ftp)

   Spanien

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@es.FreeBSD.org> dieser Domain.

              * ftp://ftp.es.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.es.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp3.es.FreeBSD.org/pub/FreeBSD/ (ftp)

   Su:dafrika

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@za.FreeBSD.org> dieser Domain.

              * ftp://ftp.za.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.za.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp4.za.FreeBSD.org/pub/FreeBSD/ (ftp)

   Taiwan

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@tw.FreeBSD.org> dieser Domain.

              * ftp://ftp.tw.FreeBSD.org/pub/FreeBSD/ (ftp /
                ftp://ftp.tw.FreeBSD.org/pub/FreeBSD/ / rsync / rsyncv6)

              * ftp://ftp2.tw.FreeBSD.org/pub/FreeBSD/ (ftp /
                ftp://ftp2.tw.FreeBSD.org/pub/FreeBSD/ /
                http://ftp2.tw.FreeBSD.org/pub/FreeBSD/ /
                http://ftp2.tw.FreeBSD.org/pub/FreeBSD/ / rsync / rsyncv6)

              * ftp://ftp4.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp5.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp6.tw.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp6.tw.FreeBSD.org/ / rsync)

              * ftp://ftp7.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp8.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp11.tw.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp11.tw.FreeBSD.org/FreeBSD/)

              * ftp://ftp12.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp13.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp14.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp15.tw.FreeBSD.org/pub/FreeBSD/ (ftp)

   Tschechische Republik

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@cz.FreeBSD.org> dieser Domain.

              * ftp://ftp.cz.FreeBSD.org/pub/FreeBSD/ (ftp /
                ftp://ftp.cz.FreeBSD.org/pub/FreeBSD/ /
                http://ftp.cz.FreeBSD.org/pub/FreeBSD/ /
                http://ftp.cz.FreeBSD.org/pub/FreeBSD/ / rsync / rsyncv6)

              * ftp://ftp2.cz.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp2.cz.FreeBSD.org/pub/FreeBSD/)

   Ukraine
              * ftp://ftp.ua.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp.ua.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp6.ua.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp6.ua.FreeBSD.org/pub/FreeBSD /
                rsync://ftp6.ua.FreeBSD.org/FreeBSD/)

              * ftp://ftp7.ua.FreeBSD.org/pub/FreeBSD/ (ftp)

   USA

           Bei Problemen wenden Sie sich bitte an den Betreuer
           <hostmaster@us.FreeBSD.org> dieser Domain.

              * ftp://ftp1.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp2.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp3.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp4.us.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6 /
                http://ftp4.us.FreeBSD.org/pub/FreeBSD/ /
                http://ftp4.us.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp5.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp6.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp8.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp10.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp11.us.FreeBSD.org/pub/FreeBSD/ (ftp)

              * ftp://ftp13.us.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp13.us.FreeBSD.org/pub/FreeBSD/ / rsync)

              * ftp://ftp14.us.FreeBSD.org/pub/FreeBSD/ (ftp /
                http://ftp14.us.FreeBSD.org/pub/FreeBSD/)

              * ftp://ftp15.us.FreeBSD.org/pub/FreeBSD/ (ftp)

A.3. Benutzen von Subversion

  A.3.1. Einfu:hrung

   Seit Juli 2012 nutzt FreeBSD ausschliesslich Subversion als
   Versionskontrollsystem zur Speicherung des gesamten FreeBSD Quellcodes,
   der Dokumentation und der Ports-Sammlung.

  Anmerkung:

   Subversion ist hauptsa:chlich ein Werkzeug fu:r Entwickler. Die meisten
   Benutzer bevorzugen freebsd-update (Abschnitt 23.2, "FreeBSD-Update") um
   das FreeBSD Basissystem zu aktualisieren, und portsnap (Abschnitt 4.5,
   "Benutzen der Ports-Sammlung") um die FreeBSD Ports-Sammlung aktuell zu
   halten.

   Dieser Abschnitt zeigt, wie Subversion unter FreeBSD installiert wird und
   wie Sie damit eine lokale Kopie des FreeBSD Repositories erstellen.
   Weitere Informationen u:ber die Benutzung von Subversion sind ebenfalls
   enthalten.

  A.3.2. SSL Root-Zertifikate

   Die Installation von security/ca_root_nss erlaubt es Subversion die
   Identita:t des HTTPS-Repository-Servers zu u:berpru:fen. Die SSL
   Root-Zertifikate ko:nnen aus der Ports-Sammlung installiert werden:

 # cd /usr/ports/security/ca_root_nss
 # make install clean

   Alternativ kann das Paket installiert werden:

 # pkg install ca_root_nss

  A.3.3. Svnlite

   Mit svnlite entha:lt FreeBSD bereits eine vereinfachte Version von
   Subversion. Der Port oder das Paket ist nur erforderlich, wenn die Python
   oder Perl API beno:tigt wird, oder eine neuere Version von Subversion
   gewu:nscht ist.

   Der einzige Unterschied zum normalen Subversion ist, dass der Name des
   Kommandos svnlite lautet.

  A.3.4. Installation

   Falls svnlite nicht verfu:gbar ist, oder die komplette Version von
   Subversion beno:tigt wird, muss das Programm installiert werden.

   Subversion kann aus der Ports-Sammlung installiert werden:

 # cd /usr/ports/devel/subversion
 #make install clean

   Subversion kann auch als Paket installiert werden:

 # pkg install subversion

  A.3.5. Subversion benutzen

   Der svn Befehl wird verwendet, um eine Kopie der Quellen in ein lokales
   Verzeichnis zu holen. Die Dateien in diesem Verzeichnis werden lokale
   Arbeitskopie genannt.

  Warnung:

   Verschieben oder lo:schen Sie das Zielverzeichnis bevor Sie checkout
   benutzen.

   In ein bestehendes nicht-svn Verzeichnis auszuchecken kann zu Konflikten
   zwischen den vorhandenen Dateien und denen aus dem Respository fu:hren.

   In Subversion werden URLs in der Form von protocol://hostname/path
   verwendet, um ein Repository zu kennzeichnen. Die erste Komponente des
   Pfades ist das FreeBSD Repository auf welches zugegriffen wird. Es gibt
   drei verschiedene Repositories. base fu:r den Quellcode des FreeBSD
   Basissystems, ports fu:r die Ports-Sammlung und doc fu:r die
   Dokumentation. Als Beispiel spezifiziert die URL
   svn://svn.FreeBSD.org/ports/head/ den Hauptzweig des Port-Repositories auf
   dem Mirror svn.FreeBSD.org, u:ber das svn-Protokoll.

   Das Auschecken aus einem bestimmten Repository kann wie folgt
   durchgefu:hrt werden:

 # svn checkout https://svn.FreeBSD.org/repository/branch lcwdir

   wobei:

     * repository eines der Projekt-Repositories ist: base, ports oder doc.

     * branch vom verwendeten Repository abha:ngt. ports und doc werden meist
       im head Zweig aktualisiert, wa:hrend base die neueste Version von
       -CURRENT unter head und die jeweilige neueste Version des -STABLE
       Zweiges unter stable/9 (9.x) und stable/10 (10.x) verwaltet wird.

     * lcwdir das Zielverzeichnis ist, in dem die Inhalte des angegebenen
       Zweiges platziert werden sollen. Dies ist u:blicherweise /usr/ports
       fu:r ports, /usr/src fu:r base, und /usr/doc fu:r doc.

   Dieses Beispiel checkt die Ports-Sammlung aus dem Repositroy u:ber das
   HTTPS-Protokoll aus, und speichert die Arbeitskopie unter /usr/ports. Wenn
   /usr/ports bereits vorhanden ist, aber nicht von svn erstellt wurde,
   denken Sie vor dem Auschecken daran, das Verzeichnis umzubenennen oder zu
   lo:schen.

 # svn checkout https://svn.FreeBSD.org/ports/head /usr/ports

   Dies kann eine Weile dauern, da beim ersten Auschecken der komplette Zweig
   vom entfernten Repository heruntergeladen werden muss. Bitte haben Sie
   Geduld.

   Nach dem ersten Auschecken ko:nnen Sie Ihre lokale Arbeitskopie wie folgt
   aktualisieren:

 # svn update lcwdir

   Um /usr/ports aus dem oben erstellten Beispiel zu aktualisieren, benutzen
   Sie:

 # svn update /usr/ports

   Das Update ist viel schneller als ein Auschecken, da nur die Dateien
   u:bertragen werden mu:ssen, die sich auch gea:ndert haben.

   Eine alternative Mo:glichkeit zur Aktualisierung Ihrer Arbeitskopie nach
   dem Auschecken ist es, das bestehende Makefile in den Verzeichnissen
   /usr/ports, /usr/src, und /usr/doc zu nutzen. Setzen Sie dazu SVN_UPDATE
   und benutzen Sie das update Ziel. Zum Beispiel, um /usr/src zu
   aktualisieren:

 # cd /usr/src
 # make update SVN_UPDATE=yes

  A.3.6. Subversion Mirror Sites

   Das FreeBSD Subversion Repository ist:

 svn.FreeBSD.org

   Dies ist ein o:ffentlich zuga:ngliches Netzwerk aus Spiegeln, das GeoDNS
   verwendet, um einen entsprechenden Backend-Server auszuwa:hlen. Um das
   FreeBSD Subversion Repository u:ber einen Browser anzuzeigen, verwenden
   Sie http://svnweb.FreeBSD.org/.

   HTTPS ist das bevorzugte Protokoll, jedoch muss das Paket
   security/ca_root_nss installiert werden, um Zertifikate automatisch zu
   validieren.

  A.3.7. Weiterfu:hrende Informationen

   Weitere Informationen u:ber die Verwendung von Subversion finden Sie im
   "Subversion Buch" mit dem Namen Versionskontrolle mit Subversion, oder in
   der Subversion Dokumentation.

A.4. Benutzen von rsync

   rsync wird a:hnlich wie rcp(1) verwendet, besitzt aber mehr Optionen und
   verwendet das "rsync remote-update" Protokoll, das nur gea:nderte Dateien
   u:bertra:gt und damit viel schneller als ein normaler Kopiervorgang ist.
   rsync ist sehr nu:tzlich, wenn Sie einen FreeBSD FTP-Spiegel betreiben.
   Das Programm ist fu:r viele Betriebssysteme erha:ltlich, mit FreeBSD
   ko:nnen Sie den Port net/rsync oder das fertige Paket benutzen. Die
   folgenden Server stellen FreeBSD u:ber das rsync-Protokoll zur Verfu:gung:

   Grossbritannien

           rsync://rsync.mirrorservice.org/

           Verfu:gbare Sammlungen:

              * ftp.freebsd.org: Kompletter Spiegel des FreeBSD FTP-Servers.

   Niederlande

           rsync://ftp.nl.FreeBSD.org/

           Verfu:gbare Sammlungen:

              * FreeBSD: Kompletter Spiegel des FreeBSD FTP-Servers.

   Russland

           rsync://ftp.mtu.ru/

           Verfu:gbare Sammlungen:

              * FreeBSD: Kompletter Spiegel des FreeBSD FTP-Servers.

              * FreeBSD-Archive: Ein Spiegel des FreeBSD Archive-FTP-Servers.

   Schweden

           rsync://ftp4.se.freebsd.org/

           Verfu:gbare Sammlungen:

              * FreeBSD: Kompletter Spiegel des FreeBSD FTP-Servers.

   Taiwan

           rsync://ftp.tw.FreeBSD.org/

           rsync://ftp2.tw.FreeBSD.org/

           rsync://ftp6.tw.FreeBSD.org/

           Verfu:gbare Sammlungen:

              * FreeBSD: Kompletter Spiegel des FreeBSD FTP-Servers.

   Tschechische Republik

           rsync://ftp.cz.FreeBSD.org/

           Verfu:gbare Sammlungen:

              * ftp: Unvollsta:ndiger Spiegel des FreeBSD FTP-Servers.

              * FreeBSD: Vollsta:ndiger Spiegel des FreeBSD FTP-Servers.

   USA

           rsync://ftp-master.FreeBSD.org/

           Dieser Server darf nur von prima:ren Spiegeln benutzt werden.

           Verfu:gbare Sammlungen:

              * FreeBSD: Das Hauptarchiv des FreeBSD FTP-Servers.

              * acl: Die prima:re ACL-Liste.

           rsync://ftp13.FreeBSD.org/

           Verfu:gbare Sammlungen:

              * FreeBSD: Kompletter Spiegel des FreeBSD FTP-Servers.

Anhang B. Bibliografie

   Inhaltsverzeichnis

   B.1. Bu:cher speziell fu:r FreeBSD

   B.2. Handbu:cher

   B.3. Administrations-Anleitungen

   B.4. Programmierhandbu:cher

   B.5. Betriebssystem-Interna

   B.6. Sicherheits-Anleitung

   B.7. Hardware-Anleitung

   B.8. UNIX(R) Geschichte

   B.9. Zeitschriften, Magazine und Journale

   U:bersetzt von Frank Gru:nder <elwood@mc5sys.in-berlin.de>

   Wa:hrend die Manualpages eine definitive Referenz u:ber bestimmte Teile
   des FreeBSD-Betriebssystems bieten, so ko:nnen sie jedoch selten
   veranschaulichen, wie man die einzelnen Teile zusammenfu:gt, um ein
   vollsta:ndig laufendes Betriebssystem herzustellen. Daher gibt es keinen
   Ersatz fu:r ein gutes Buch oder Benutzerhandbuch u:ber die Administration
   von UNIX(R)-Systemen.

   In der Regel handelt es sich im folgenden Kapitel um englische Ausgaben
   der genannten Werke. U:bersetzungen oder Ausgaben in anderen Sprachen sind
   mit entsprechenden Hinweisen versehen.

B.1. Bu:cher speziell fu:r FreeBSD

   Internationale Bu:cher:

     * Using FreeBSD, herausgegeben von Drmaster, 1997 (in traditionellem
       Chinesisch). ISBN 9-578-39435-7.

     * FreeBSD Unleashed (in vereinfachtem Chinesisch), herausgegeben von
       China Press. ISBN 7-111-10201-0.

     * FreeBSD From Scratch Second Edition (in vereinfachtem Chinesisch),
       herausgegeben von China Press. ISBN 7-111-10286-X.

     * FreeBSD Handbook Second Edition (in vereinfachtem Chinesisch),
       herausgegeben von Posts & Telecom Press. ISBN 7-115-10541-3.

     * FreeBSD & Windows (in vereinfachtem Chinesisch), herausgegeben von
       China Railway Publishing House. ISBN 7-113-03845-X.

     * FreeBSD Internet Services HOWTO (in vereinfachtem Chinesisch),
       herausgegeben von China Railway Publishing House. ISBN 7-113-03423-3.

     * FreeBSD (in japanischer Sprache), herausgegeben von CUTT. ISBN
       4-906391-22-2 C3055 P2400E.

     * Complete Introduction to FreeBSD (in Japanese), published by Shoeisha
       Co., Ltd. ISBN 4-88135-473-6 P3600E.

     * Personal UNIX Starter Kit FreeBSD (in japanischer Sprache),
       herausgegeben von ASCII. ISBN 4-7561-1733-3 P3000E.

     * FreeBSD Handbook (japanische U:bersetzung), herausgegeben von ASCII.
       ISBN 4-7561-1580-2 P3800E.

     * FreeBSD mit Methode (in deutscher Sprache), herausgegeben von Computer
       und Literatur Verlag /Vertrieb Hanser, 1998. ISBN 3-932311-31-0.

     * FreeBSD de Luxe (in German), published by Verlag Modere Industrie,
       2003. ISBN 3-8266-1343-0.

     * FreeBSD Install and Utilization Manual (in japanischer Sprache),
       herausgegeben von Mainichi Communications Inc., 1998. ISBN
       4-8399-0112-0.

     * Onno W Purbo, Dodi Maryanto, Syahrial Hubbany, Widjil Widodo Building
       Internet Server with FreeBSD (in indonesischer Sprache), herausgegeben
       von Elex Media Komputindo.

     * Absolute BSD: The Ultimate Guide to FreeBSD (in traditionellem
       Chinesisch), herausgegeben von GrandTech Press, 2003. ISBN
       986-7944-92-5.

     * The FreeBSD 6.0 Book (in traditionellem Chinesisch, herausgegeben von
       Drmaster, 2006. ISBN 9-575-27878-X.

   Englischsprachige Bu:cher:

     * Absolute FreeBSD, 2nd Edition: The Complete Guide to FreeBSD,
       herausgegeben von No Starch Press, 2007. ISBN: 978-1-59327-151-0

     * The Complete FreeBSD, herausgegeben von O'Reilly, 2003. ISBN:
       0596005164

     * The FreeBSD Corporate Networker's Guide, herausgegeben von
       Addison-Wesley, 2002. ISBN: 0201704811

     * FreeBSD: An Open-Source Operating System for Your Personal Computer,
       herausgegeben von The Bit Tree Press, 2001. ISBN: 0971204500

     * Teach Yourself FreeBSD in 24 Hours, herausgegeben von Sams, 2002.
       ISBN: 0672324245

     * FreeBSD6 Unleashed, herausgegeben von Sams, 2006. ISBN: 0672328755

     * FreeBSD: The Complete Reference, herausgegeben von McGrawHill, 2003.
       ISBN: 0072224096

B.2. Handbu:cher

     * Die Ohio State University hat ein UNIX Introductory Course
       vero:ffentlicht, welcher auch online im HTML- und PostScriptformat
       verfu:gbar ist.

       Eine italienische U:bersetzung ist Teil des FreeBSD Italian
       Documentation Projects.

     * Jpman Project, Japan FreeBSD Users Group. FreeBSD User's Reference
       Manual (japanische U:bersetzung). Mainichi Communications Inc., 1998.
       ISBN4-8399-0088-4 P3800E.

     * Edinburgh University hat einen Online Guide fu:r Anfa:nger in Sachen
       UNIX geschrieben.

B.3. Administrations-Anleitungen

     * Jpman Project, Japan FreeBSD Users Group. FreeBSD System
       Administrator's Manual (japanische U:bersetzung). Mainichi
       Communications Inc., 1998. ISBN4-8399-0109-0 P3300E.

     * Dreyfus, Emmanuel. Cahiers de l'Admin: BSD 2nd Ed. (in French),
       Eyrolles, 2004. ISBN 2-212-11463-X.

B.4. Programmierhandbu:cher

     * Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's
       Reference Manual. O'Reilly & Associates, Inc., 1994. ISBN
       1-56592-078-3

     * Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's
       Supplementary Documents. O'Reilly & Associates, Inc., 1994. ISBN
       1-56592-079-1

     * Harbison, Samuel P. and Steele, Guy L. Jr. C: A Reference Manual. 4th
       Ed. Prentice Hall, 1995. ISBN 0-13-326224-3

     * Kernighan, Brian and Dennis M. Ritchie. The C Programming Language.
       2nd Ed., PTR Prentice Hall, 1988. ISBN 0-13-110362-9

     * Lehey, Greg. Porting UNIX Software. O'Reilly & Associates, Inc., 1995.
       ISBN 1-56592-126-7

     * Plauger, P. J. The Standard C Library. Prentice Hall, 1992. ISBN
       0-13-131509-9

     * Spinellis, Diomidis. Code Reading: The Open Source Perspective.
       Addison-Wesley, 2003. ISBN 0-201-79940-5

     * Spinellis, Diomidis. Code Quality: The Open Source Perspective.
       Addison-Wesley, 2006. ISBN 0-321-16607-8

     * Stevens, W. Richard and Stephen A. Rago. Advanced Programming in the
       UNIX Environment. 2nd Ed. Reading, Mass. : Addison-Wesley, 2005. ISBN
       0-201-43307-9

     * Stevens, W. Richard. UNIX Network Programming. 2nd Ed, PTR Prentice
       Hall, 1998. ISBN 0-13-490012-X

B.5. Betriebssystem-Interna

     * Andleigh, Prabhat K. UNIX System Architecture. Prentice-Hall, Inc.,
       1990. ISBN 0-13-949843-5

     * Jolitz, William. "Porting UNIX to the 386". Dr. Dobb's Journal.
       January 1991-July 1992.

     * Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and John
       Quarterman The Design and Implementation of the 4.3BSD UNIX Operating
       System. Reading, Mass. : Addison-Wesley, 1989. ISBN 0-201-06196-1

       Kapitel 2 dieses Buchs ist Teil des FreeBSD Documentation Projects und
       online erha:ltlich.

     * Leffler, Samuel J., Marshall Kirk McKusick, The Design and
       Implementation of the 4.3BSD UNIX Operating System: Answer Book.
       Reading, Mass. : Addison-Wesley, 1991. ISBN 0-201-54629-9

     * McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John
       Quarterman. The Design and Implementation of the 4.4BSD Operating
       System. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-54979-4

     * Marshall Kirk McKusick, George V. Neville-Neil. The Design and
       Implementation of the FreeBSD Operating System. Boston, Mass. :
       Addison-Wesley, 2004. ISBN 0-201-70245-2

     * Marshall Kirk McKusick, George V. Neville-Neil, Robert N. M. Watson
       The Design and Implementation of the FreeBSD Operating System, 2nd
       Ed.. Westford, Mass: Pearson Education, Ind., 2014. ISBN 0-321-96897-2

     * Stevens, W. Richard. TCP/IP Illustrated, Volume 1: The Protocols.
       Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63346-9

     * Schimmel, Curt. Unix Systems for Modern Architectures. Reading, Mass.
       : Addison-Wesley, 1994. ISBN 0-201-63338-8

     * Stevens, W. Richard. TCP/IP Illustrated, Volume 3: TCP for
       Transactions, HTTP, NNTP and the UNIX Domain Protocols. Reading, Mass.
       : Addison-Wesley, 1996. ISBN 0-201-63495-3

     * Vahalia, Uresh. UNIX Internals -- The New Frontiers. Prentice Hall,
       1996. ISBN 0-13-101908-2

     * Wright, Gary R. and W. Richard Stevens. TCP/IP Illustrated, Volume 2:
       The Implementation. Reading, Mass. : Addison-Wesley, 1995. ISBN
       0-201-63354-X

B.6. Sicherheits-Anleitung

     * Cheswick, William R. and Steven M. Bellovin. Firewalls and Internet
       Security: Repelling the Wily Hacker. Reading, Mass. : Addison-Wesley,
       1995. ISBN 0-201-63357-4

     * Garfinkel, Simson. PGP Pretty Good Privacy O'Reilly & Associates,
       Inc., 1995. ISBN 1-56592-098-8

B.7. Hardware-Anleitung

     * Anderson, Don and Tom Shanley. Pentium Processor System Architecture.
       2nd Ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40992-5

     * Ferraro, Richard F. Programmer's Guide to the EGA, VGA, and Super VGA
       Cards. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
       0-201-62490-7

     * Die Intel Corporation vero:ffentlicht Dokumentationen Ihrer CPUs,
       Chipsets und Standards auf ihrer developer web site, normalerweise als
       PDF-Dateien.

     * Shanley, Tom. 80486 System Architecture. 3rd Ed. Reading, Mass. :
       Addison-Wesley, 1995. ISBN 0-201-40994-1

     * Shanley, Tom. ISA System Architecture. 3rd Ed. Reading, Mass. :
       Addison-Wesley, 1995. ISBN 0-201-40996-8

     * Shanley, Tom. PCI System Architecture. 4th Ed. Reading, Mass. :
       Addison-Wesley, 1999. ISBN 0-201-30974-2

     * Van Gilluwe, Frank. The Undocumented PC, 2nd Ed. Reading, Mass:
       Addison-Wesley Pub. Co., 1996. ISBN 0-201-47950-8

     * Messmer, Hans-Peter. The Indispensable PC Hardware Book, 4th Ed.
       Reading, Mass: Addison-Wesley Pub. Co., 2002. ISBN 0-201-59616-4

B.8. UNIX(R) Geschichte

     * Lion, John Lion's Commentary on UNIX, 6th Ed. With Source Code. ITP
       Media Group, 1996. ISBN 1573980137

     * Raymond, Eric S. The New Hacker's Dictionary, 3rd edition. MIT Press,
       1996. ISBN 0-262-68092-0. Auch bekannt als das Jargon File

     * Salus, Peter H. A quarter century of UNIX. Addison-Wesley Publishing
       Company, Inc., 1994. ISBN 0-201-54777-5

     * Simon Garfinkel, Daniel Weise, Steven Strassmann. The UNIX-HATERS
       Handbook. IDG Books Worldwide, Inc., 1994. ISBN 1-56884-203-1. Online
       verfu:gbar.

     * Don Libes, Sandy Ressler Life with UNIX - special edition.
       Prentice-Hall, Inc., 1989. ISBN 0-13-536657-7

     * The BSD family tree.
       https://svnweb.freebsd.org/base/head/share/misc/bsd-family-tree=view=co
       oder unter /usr/share/misc/bsd-family-tree auf einem FreeBSD-System.

     * Networked Computer Science Technical Reports Library.
       http://www.ncstrl.org/

     * Old BSD releases from the Computer Systems Research group (CSRG).
       http://www.mckusick.com/csrg/: Das Paket mit 4 CD-ROMs entha:lt alle
       BSD-Versionen von 1BSD bis 4.4BSD und 4.4BSD-Lite2 (nicht aber
       2.11BSD). Die letzte CD beinhaltet auch die finalen Sourcen inklusive
       den SCCS Dateien.

B.9. Zeitschriften, Magazine und Journale

     * Admin Magazin (in deutscher Sprache), herausgegeben von Medialinx AG.
       ISSN: 2190-1066

     * BSD Magazine, herausgegeben von Software Press Sp. z o.o. SK. ISSN:
       1898-9144

     * BSD Now - Video Podcast, herausgegeben von Jupiter Broadcasting LLC

     * BSD Talk Podcast, von Will Backman

     * FreeBSD Journal, herausgegeben von S&W Publishing, gefo:rdert durch
       The FreeBSD Foundation. ISBN: 978-0-615-88479-0

Anhang C. Ressourcen im Internet

   Inhaltsverzeichnis

   C.1. Webseiten

   C.2. Mailinglisten

   C.3. Usenet-News

   C.4. Offizielle Spiegel

   Gedruckte Medien ko:nnen mit der schnellen Entwicklung von FreeBSD nicht
   Schritt halten. Elektronische Medien sind ha:ufig die einzige
   Mo:glichkeit, u:ber aktuelle Entwicklungen informiert zu sein. Da FreeBSD
   ein Projekt von Freiwilligen ist, gibt die Benutzergemeinde selbst auch
   technische Unterstu:tzung. Die Benutzergemeinde erreichen Sie am besten
   u:ber E-Mail, Internetforen oder Usenet-News.

   Die wichtigsten Wege, auf denen Sie die FreeBSD-Benutzergemeinde erreichen
   ko:nnen, sind unten dargestellt. Schicken Sie weitere Ressourcen, die hier
   fehlen, an die Mailingliste des FreeBSD documentation project, damit diese
   hier aufgenommen werden ko:nnen.

C.1. Webseiten

     * Die FreeBSD Foren dienen als webbasiertes Diskussionsforum fu:r Fragen
       und technische Diskussionen zu FreeBSD.

     * Planet FreeBSD bietet einen gesammelten Feed aus dutzenden von Blogs,
       die von den FreeBSD Entwicklern geschrieben werden. Viele Entwickler
       nutzen dies, um schnell Aufzeichnungen daru:ber zu vero:ffentlichen,
       woran sie gerade arbeiten, welche neuen Erweiterungen es gibt und
       andere Arbeiten, die gerade im Gange sind.

     * Der BSDConferences YouTube-Kanal beinhaltet eine Sammlung von
       qualitativ hochwertigen Videos von BSD Konferenzen aus der ganzen
       Welt. Dies ist eine ausgezeichnete Art und Weise, den Entwicklern beim
       Pra:sentieren von neuen Arbeiten an FreeBSD zuzuschauen.

C.2. Mailinglisten

   Die Mailinglisten sind der direkteste Weg, um Fragen an das gesamte
   FreeBSD Publikum zu stellen oder eine technische Diskussion zu beginnen.
   Es existiert eine grosse Vielfalt von Listen mit einer Reihe von
   verschiedenen FreeBSD Themen. Wenn Sie Fragen an die richtige Mailingliste
   richten ko:nnen Sie viel eher mit einer passenden Antwort darauf rechnen.

   Die Chartas der verschiedenen Listen sind unten wiedergegeben. Bevor Sie
   sich einer Mailingliste anschliessen oder E-Mails an eine Liste senden,
   lesen Sie bitte die Charta der Liste. Die meisten Mitglieder der
   Mailinglisten erhalten jeden Tag Hunderte E-Mails zum Thema FreeBSD. Die
   Chartas und Regeln, die den Gebrauch der Listen beschreiben, garantieren
   die hohe Qualita:t der Listen. Die Listen wu:rden ihren hohen Wert fu:r
   das Projekt verlieren, wenn wir weniger Regeln aufstellen wu:rden.

  Anmerkung:

   Um zu testen, ob Sie eine Nachricht an eine FreeBSD-Liste senden ko:nnen,
   verwenden Sie bitte die Liste freebsd-test. Schicken Sie derartige
   Nachrichten bitte nicht an eine der anderen Listen.

   Wenn Sie Sich nicht sicher sind, auf welcher Liste Sie Ihre Frage stellen
   sollen, sollten Sie den Artikel How to get best results from the
   FreeBSD-questions mailing list lesen.

   Bevor Sie eine Nachricht an eine Mailingliste senden, sollten Sie die
   korrekte Nutzung der Mailinglisten erlernen. Dazu geho:rt auch das
   Vermeiden von sich ha:ufig wiederholenden Diskussionen (lesen Sie deshalb
   zuerst die Mailing List Frequently Asked Questions).

   Alle Mailinglisten werden archiviert und ko:nnen auf dem FreeBSD World
   Wide Web Server durchsucht werden. Das nach Schlu:sselwo:rtern
   durchsuchbare Archiv bietet die hervorragende Mo:glichkeit, Antworten auf
   ha:ufig gestellte Fragen zu finden. Nutzen Sie bitte diese Mo:glichkeit,
   bevor Sie Fragen auf einer Liste stellen. Beachten Sie auch, dass das zur
   Folge hat, dass die Nachrichten an die FreeBSD Mailinglisten fu:r die
   Ewigkeit erhalten bleiben. Wenn Sie am Schutz Ihrer Privatspha:re
   interessiert sind, ziehen Sie die Verwendung einer Wegwerf-E-Mail-Adresse
   in Betracht und schreiben Sie nur solche Nachrichten, die fu:r die
   O:ffentlichkeit bestimmt sind.

  C.2.1. Beschreibung der Mailinglisten

   Allgemeine Listen: Jeder kann die folgenden allgemeinen Listen abonnieren
   (und ist dazu aufgefordert):

            Mailingliste                             Zweck                    
   freebsd-advocacy               Verbreitung von FreeBSD                     
   freebsd-announce               Wichtige Ereignisse und Meilensteine des    
                                  Projekts (moderiert)                        
   freebsd-arch                   Architektur und Design von FreeBSD          
                                  Diskussionen u:ber die Pflege der FreeBSD   
   freebsd-bugbusters             Fehlerberichte-Datenbank und die dazu       
                                  benutzten Werkzeuge                         
   freebsd-bugs                   Fehlerberichte                              
   freebsd-chat                   Nicht technische Themen, welche die         
                                  FreeBSD-Gemeinschaft betreffen              
   freebsd-chromium               Diskussionen zum Einsatz von Chromium unter 
                                  FreeBSD                                     
   freebsd-current                Gebrauch von FreeBSD-CURRENT                
   freebsd-isp                    Fu:r Internet-Service-Provider, die FreeBSD 
                                  benutzen                                    
   freebsd-jobs                   Anstellung und Beratung im FreeBSD-Umfeld   
   freebsd-questions              Benutzerfragen und technische               
                                  Unterstu:tzung                              
   freebsd-security-notifications Anku:ndigungen zum Thema Sicherheit         
                                  (moderiert)                                 
   freebsd-stable                 Gebrauch von FreeBSD-STABLE                 
   freebsd-test                   Schicken Sie Testnachrichten an diese Liste 
                                  anstelle der wirklichen Listen              

   Technische Listen: Auf den folgenden Listen werden technische Diskussionen
   gefu:hrt. Bevor Sie eine der Listen abonnieren oder Nachrichten an sie
   schicken, lesen Sie sich die Charta der Liste durch, da der Inhalt und
   Zweck dieser Listen genau festgelegt ist.

        Mailingliste                             Zweck                        
   freebsd-acpi           Entwicklung von ACPI                                
   freebsd-afs            Portierung von AFS nach FreeBSD                     
   freebsd-amd64          Portierung von FreeBSD auf AMD64-Systeme            
                          (moderiert)                                         
   freebsd-apache         Diskussion u:ber Ports, die mit Apache              
                          zusammenha:ngen.                                    
   freebsd-arm            Portierung von FreeBSD auf ARM(R)-Prozessoren       
   freebsd-atm            Benutzung von ATM-Netzen mit FreeBSD                
   freebsd-bluetooth      Bluetooth(R) unter FreeBSD verwenden                
   freebsd-cloud          FreeBSD auf Cloud-Plattformen (EC2, GCE, Azure,     
                          etc.)                                               
   freebsd-cluster        Benutzung von FreeBSD in einem Cluster              
   freebsd-database       Diskussion u:ber Datenbanken und                    
                          Datenbankprogrammierung unter FreeBSD               
   freebsd-desktop        FreeBSD als Desktop verwenden und verbessern        
   freebsd-doc            Erstellen der FreeBSD-Dokumentation                 
   freebsd-drivers        Gera:tetreiber fu:r FreeBSD schreiben               
   freebsd-dtrace         Entwicklung und Benutzung von DTrace unter FreeBSD  
   freebsd-eclipse        Fu:r FreeBSD-Anwender, welche die Eclipse IDE,      
                          deren Werkzeuge, Anwendungen und Ports einsetzen    
   freebsd-elastic        Diskussion zu ElasticSearch unter FreeBSD           
   freebsd-embedded       FreeBSD in eingebetteten Anwendungen einsetzen      
   freebsd-emulation      Emulation anderer Systeme wie Linux(R), MS-DOS(R)   
                          oder Windows(R)                                     
   freebsd-enlightenment  Portierung von Enlightenment und                    
                          Enlightenment-Applikationen                         
                          Support fu:r FreeBSD-bezogene Software, die vom     
   freebsd-eol            FreeBSD Project offiziell nicht mehr unterstu:tzt   
                          wird.                                               
   freebsd-firewire       Technische Diskussion u:ber FreeBSD FireWire(R)     
                          (iLink, IEEE 1394)                                  
   freebsd-fortran        Fortran unter FreeBSD                               
   freebsd-fs             Dateisysteme                                        
   freebsd-games          Unterstu:tzung fu:r Spiele unter FreeBSD            
   freebsd-gecko          Angelegenheiten zur Gecko Rendering Engine          
   freebsd-geom           Diskussion u:ber GEOM                               
   freebsd-git            Diskussionen zur Verwendung von git im FreeBSD      
                          Project                                             
   freebsd-gnome          Portierung von GNOME und GNOME-Anwendungen          
   freebsd-hackers        Allgemeine technische Diskussionen                  
   freebsd-hardware       Allgemeine Diskussion u:ber Hardware, auf der       
                          FreeBSD la:uft                                      
   freebsd-i18n           Internationalisierung von FreeBSD                   
   freebsd-ia32           FreeBSD fu:r die IA-32 (Intel(R) x86) Plattform     
   freebsd-ia64           Portierung von FreeBSD auf Intel(R)s neue           
                          IA64-Systeme                                        
   freebsd-infiniband     Infiniband unter FreeBSD                            
   freebsd-ipfw           Technische Diskussion u:ber die Neubearbeitung der  
                          IP-Firewall Quellen                                 
   freebsd-isdn           Fu:r Entwickler des ISDN-Systems                    
   freebsd-java           Fu:r Java(TM) Entwickler und Leute, die JDK(TM)s    
                          nach FreeBSD portieren                              
   freebsd-kde            Portierung von KDE und KDE-Anwendungen              
   freebsd-lfs            Portierung von LFS nach FreeBSD                     
   freebsd-mips           Portierung von FreeBSD zu MIPS(R)                   
   freebsd-mobile         Diskussionen u:ber mobiles Rechnen                  
   freebsd-mono           Mono und C# Anwendungen auf FreeBSD                 
   freebsd-multimedia     Multimedia Anwendungen                              
   freebsd-new-bus        Technische Diskussionen u:ber die Architektur von   
                          Bussen                                              
   freebsd-net            Diskussion u:ber Netzwerke und den TCP/IP Quellcode 
   freebsd-numerics       Diskussionen u:ber die Implementierung hochwertiger 
                          Funktionen in libm                                  
   freebsd-office         Office-Anwendungen fu:r FreeBSD                     
   freebsd-performance    Fragen zur Optimierung der Leistung stark           
                          ausgelasteter Systeme                               
   freebsd-perl           Pflege der portierten Perl-Anwendungen.             
   freebsd-pf             Diskussionen und Fragen zu packet filter als        
                          Firewallsystem.                                     
   freebsd-pkg            Diskussionen u:ber die Verwaltung von Bina:rpaketen 
                          und entsprechenden Werkzeugen                       
   freebsd-pkg-fallout    Protokolle von fehlgeschlagenen Paketbauvorga:ngen  
   freebsd-pkgbase        Paketierung des FreeBSD-Basissystems                
   freebsd-platforms      Portierungen von FreeBSD auf nicht-Intel(R)         
                          Architekturen                                       
   freebsd-ports          Diskussion u:ber die Ports-Sammlung                 
   freebsd-ports-announce Wichtige Neuigkeiten und Anweisungen zur            
                          Ports-Sammlung (moderiert)                          
   freebsd-ports-bugs     Diskussion u:ber Fehler und PRs der Ports           
   freebsd-ppc            Portierung von FreeBSD auf den PowerPC(R)           
   freebsd-proliant       Technische Diskussionen zum Einsatz von FreeBSD auf 
                          HP ProLiant-Serverplattformen                       
   freebsd-python         FreeBSD-spezifische Diskussionen zu Python          
   freebsd-rc             Diskussion u:ber das rc.d-System sowie dessen       
                          Weiterentwicklung                                   
   freebsd-realtime       Entwicklung von Echtzeiterweiterungen fu:r FreeBSD  
   freebsd-ruby           FreeBSD-spezifische Diskussionen zu Ruby            
   freebsd-scsi           Diskussion u:ber das SCSI-Subsystem                 
   freebsd-security       Sicherheitsthemen                                   
                          Gebrauch von FreeBSD in eingebetteten Systemen      
   freebsd-small          (obsolet; verwenden Sie stattdessen                 
                          freebsd-embedded)                                   
   freebsd-snapshots      Anku:ndigungen fu:r FreeBSD Entwickler-Snapshots    
   freebsd-sparc64        Portierung von FreeBSD auf SPARC(R) Systeme         
   freebsd-standards      Konformita:t von FreeBSD mit den C99- und           
                          POSIX(R)-Standards                                  
   freebsd-sysinstall     sysinstall(8) Entwicklung                           
   freebsd-tcltk          FreeBSD spezifische Tcl/TK Diskussionen             
   freebsd-testing        Tests unter FreeBSD                                 
   freebsd-tex            Portierung von TeX und dessen Anwendungen nach      
                          FreeBSD                                             
   freebsd-threads        Leichtgewichtige Prozesse (Threads) in FreeBSD      
   freebsd-tilera         Diskussionen zur Portierung von FreeBSD auf die     
                          Tilera-CPU-Familie                                  
   freebsd-tokenring      Token-Ring Unterstu:tzung in FreeBSD                
   freebsd-toolchain      Wartung der FreeBSD-Toolchain                       
   freebsd-translators    U:bersetzung von FreeBSD-Dokumenten und Programmen. 
   freebsd-transport      Diskussion u:ber Transportprotokolle in FreeBSD     
   freebsd-usb            USB-Unterstu:tzung in FreeBSD                       
                          Diskussion u:ber verschiedene                       
   freebsd-virtualization Virtualisierungsverfahren, die von FreeBSD          
                          unterstu:tzt werden                                 
   freebsd-vuxml          Diskussion u:ber die Infrastruktur von VuXML        
   freebsd-x11            Wartung und Unterstu:tzung von X11 auf FreeBSD      
   freebsd-xen            Diskussionen u:ber die FreeBSD Portierung auf       
                          Xen(TM) - Implementierung und Verwendung            
   freebsd-xfce           Portierung und Wartung von XFCE                     
   freebsd-zope           Zope fu:r FreeBSD - Portierung und Wartung          

   Eingeschra:nkte Listen: Die folgenden Listen wenden sich an Zielgruppen
   mit speziellen Anforderungen und sind nicht fu:r die O:ffentlichkeit
   gedacht. Bevor Sie eine dieser Listen abonnieren, sollten Sie einige der
   technischen Listen abonniert haben, um mit den Umgangsformen vertraut zu
   sein.

      Mailingliste                             Zweck                          
   freebsd-hubs        Betrieb von FreeBSD-Spiegeln                           
   freebsd-user-groups Koordination von Benutzergruppen                       
   freebsd-wip-status  Status von in Arbeit befindlichen FreeBSD-Ta:tigkeiten 
   freebsd-wireless    Diskussionen zum 802.11-Stack sowie zur Entwicklung    
                       von Tools und Gera:tetreibern                          

   Zusammenfassungen: Alle eben aufgeza:hlten Listen sind auch in
   zusammengefasster Form (digest) erha:ltlich. In den Einstellungen Ihres
   Accounts legen Sie fest, in welcher Form Sie die Listen empfangen.

   SVN Listen: Die folgenden Listen versenden die Log-Eintra:ge zu
   A:nderungen an verschiedenen Teilen des Quellbaums. Diese Listen sollen
   nur gelesen werden, schicken Sie bitte keine Nachrichten an eine der
   Listen.

       Mailingliste     Teil des Quellbaums           Beschreibung            
                                            A:nderungen im doc Subversion     
   svn-doc-all          /usr/doc            Repository (mit Ausnahme von      
                                            user, projects und translations)  
   svn-doc-head         /usr/doc            A:nderungen im "head"-Zweig des   
                                            doc Subversion Repository         
   svn-doc-projects     /usr/doc/projects   A:nderungen im projects-Bereich   
                                            des doc Subversion Repository     
                                            A:nderungen an den                
   svn-doc-svnadmin     /usr/doc            administrativen Skripten, Hooks   
                                            und anderen Konfigurationsdateien 
                                            des doc Subversion Repository     
   svn-ports-all        /usr/ports          Alle A:nderungen des ports        
                                            Subverison Repository             
   svn-ports-head       /usr/ports          A:nderungen im "head"-Zweig des   
                                            ports Subversion Repository       
                                            A:nderungen an den                
   svn-ports-svnadmin   /usr/ports          administrativen Skripten, Hooks   
                                            und anderen Konfigurationsdateien 
                                            des ports Subversion Repository   
                                            A:nderungen im src Subversion     
   svn-src-all          /usr/src            Repository (ausser fu:r user und  
                                            projects)                         
                                            A:nderungen im "head" Zweig des   
   svn-src-head         /usr/src            src Subversion Repository (der    
                                            FreeBSD-CURRENT Zweig)            
   svn-src-projects     /usr/projects       A:nderungen im projects Bereich   
                                            des src Subversion Repository     
   svn-src-release      /usr/src            A:nderungen im releases Bereich   
                                            des src Subversion Repository     
                                            A:nderungen im releng Zweig des   
   svn-src-releng       /usr/src            src Subversion Repository (der    
                                            security / release engineering    
                                            Zweige)                           
                                            A:nderungen an allen stable       
   svn-src-stable       /usr/src            Zweigen des src Subversion        
                                            Repository                        
   svn-src-stable-6     /usr/src            A:nderungen im stable/6 Zweig des 
                                            src Subversion Repository         
   svn-src-stable-7     /usr/src            A:nderungen im stable/7 Zweig des 
                                            src Subversion Repository         
   svn-src stable-8     /usr/src            A:nderungen im stable/8 Zweig des 
                                            src Subversion Repository         
   svn-src-stable-9     /usr/src            A:nderungen im stable/9 Zweig des 
                                            src Subversion Repository         
   svn-src-stable-10    /usr/src            A:nderungen im stable/10 Zweig    
                                            des src Subversion Repository     
   svn-src-stable-11    /usr/src            A:nderungen im stable/11 Zweig    
                                            des src Subversion Repository     
                                            A:nderungen an a:lteren stable    
   svn-src-stable-other /usr/src            Zweigen des src Subversion        
                                            Repository                        
                                            A:nderungen an den                
                                            administrativen Skripten, hooks,  
   svn-src-svnadmin     /usr/src            und anderen Daten zur             
                                            Konfiguration des src Subversion  
                                            Repository                        
                                            A:nderungen am experimentellen    
   svn-src-user         /usr/src            user Bereich des src Subversion   
                                            Repository                        
   svn-src-vendor       /usr/src            A:nderungen am Herstellerbereich  
                                            des src Subversion Repository     

  C.2.2. Mailinglisten abonnieren

   Um eine Liste zu abonnieren, besuchen die Webseite
   http://lists.FreeBSD.org/mailman/listinfo und klicken dort auf die Liste,
   die Sie abonnieren wollen. Sie gelangen dann auf die Webseite der Liste,
   die weitere Anweisungen fu:r diese Liste entha:lt.

   Um eine Nachricht an eine Mailingliste zu schicken, schreiben Sie einfach
   eine E-Mail an <Liste@FreeBSD.org>. Die E-Mail wird dann an alle
   Mitglieder der Mailingliste verteilt.

   Wenn Sie das Abonnement aufheben wollen, folgen Sie der URL, die am Ende
   jeder Mail der Liste angegeben ist. Sie ko:nnen das Abonnement auch mit
   einer E-Mail an <Liste-unsubscribe@FreeBSD.org> aufheben.

   Verwenden Sie bitte die technischen Listen ausschliesslich fu:r technische
   Diskussionen. Wenn Sie nur an wichtigen Anku:ndigungen interessiert sind,
   abonnieren Sie die Mailingliste FreeBSD announcements, auf der nur wenige
   Nachrichten versendet werden.

  C.2.3. Chartas der Mailinglisten

   Alle FreeBSD-Mailinglisten besitzen Grundregeln, die von jedem beachtet
   werden mu:ssen. Fu:r die ersten beiden Male, in denen ein Absender gegen
   diese Regeln versto:sst, erha:lt er jeweils eine Warnung vom
   FreeBSD-Postmaster <postmaster@FreeBSD.org>. Ein dritter Verstoss gegen
   die Regeln fu:hrt dazu, dass der Absender in allen FreeBSD-Mailinglisten
   gesperrt wird und weitere Nachrichten von ihm nicht mehr angenommen
   werden. Wir bedauern sehr, dass wir solche Massnahmen ergreifen mu:ssen,
   aber heutzutage ist das Internet eine recht rauhe Umgebung, in der immer
   weniger Leute Ru:cksicht aufeinander nehmen.

   Die Regeln:

     * Das Thema einer Nachricht soll der Charta der Liste, an die sie
       gesendet wird, entsprechen. Wenn Sie eine Nachricht an eine technische
       Liste schicken, sollte die Nachricht auch technische Inhalte haben.
       Fortwa:hrendes Geschwa:tz oder Streit mindern den Wert der Liste fu:r
       alle Mitglieder und wird nicht toleriert. Benutzen Sie FreeBSD chat
       fu:r allgemeine Diskussionen u:ber FreeBSD.

     * Eine Nachricht sollte an nicht mehr als zwei Mailinglisten gesendet
       werden. Schicken Sie eine Nachricht nur dann an zwei Listen, wenn das
       wirklich notwendig ist. Viele Leute haben mehrere Mailinglisten
       abonniert und Nachrichten sollten nur zu ungewo:hnlichen Kombinationen
       der Listen, wie "-stable" und "-scsi", gesendet werden. Wenn Sie eine
       Nachricht erhalten, die im Cc-Feld mehrere Listen entha:lt, sollten
       Sie das Feld ku:rzen, bevor Sie eine Antwort darauf verschicken.
       Unabha:ngig von dem urspru:nglichen Verteiler sind Sie fu:r Ihre
       eigenen Mehrfach-Sendungen selbst verantwortlich.

     * Perso:nliche Angriffe und Beschimpfungen sind in einer Diskussion
       nicht erlaubt. Dies gilt gleichermassen fu:r Benutzer wie Entwickler.
       Grobe Verletzungen der Netiquette, wie das Verschicken oder Zitieren
       von privater E-Mail ohne eine entsprechende Genehmigung, werden nicht
       gebilligt. Die Nachrichten werden aber nicht besonders auf
       Verletzungen der Netiquette untersucht. Es kann sein, dass eine
       Verletzung der Netiquette durchaus zu der Charta einer Liste passt,
       aber der Absender aufgrund der Verletzung eine Warnung erha:lt oder
       gesperrt wird.

     * Werbung fu:r Produkte oder Dienstleistungen, die nichts mit FreeBSD zu
       tun haben, sind verboten. Ist die Werbung als Spam verschickt worden,
       wird der Absender sofort gesperrt.

   Chartas einzelner Listen:

   freebsd-acpi

           Die Entwicklung von ACPI und Energieverwaltungsfunktionen.

   freebsd-afs

           Andrew File System

           Auf dieser Liste wird die Portierung des AFS von CMU/Transarc
           diskutiert.

   freebsd-announce

           Wichtige Ereignisse und Meilensteine

           Diese Liste ist fu:r Personen, die nur an den wenigen
           Anku:ndigungen wichtiger Ereignisse interessiert sind. Die
           Anku:ndigungen betreffen Schnappschu:sse und Releases, neue
           Merkmale von FreeBSD und die Suche nach freiwilligen Mitarbeitern.
           Auf der Liste herrscht wenig Verkehr und sie wird streng
           moderiert.

   freebsd-arch

           Architektur und Design von FreeBSD

           Auf dieser technischen Liste wird die FreeBSD-Architektur
           diskutiert. Beispiele fu:r angemessene Themen sind:

              * Wie das Bausystem zu vera:ndern ist, damit verschiedene
                La:ufe gleichzeitig mo:glich sind.

              * Was am VFS gea:ndert werden muss, damit Heidemann Schichten
                eingesetzt werden ko:nnen.

              * Wie die Schnittstelle der Gera:tetreiber angepasst werden
                muss, damit derselbe Treiber auf verschiedenen Bussen und
                Architekturen eingesetzt werden kann.

              * Wie ein Netzwerktreiber geschrieben wird.

   freebsd-bluetooth

           Bluetooth(R) unter FreeBSD

           Diese Liste diskutiert Probleme der Verwendung von Bluetooth(R)
           unter FreeBSD. Designprobleme, Implementierungsdetails, Patches,
           Fehler- und Statusberichte, Verbesserungsvorschla:ge sowie alle
           anderen mit Bluetooth(R) zusammenha:ngenden Themen werden hier
           behandelt.

   freebsd-bugbusters

           Bearbeitung der Fehlerberichte

           Auf dieser Liste wird die Bearbeitung der Fehlerberichte (PR,
           engl. problem report) koordiniert. Sie dient dem "Bugmeister" und
           allen Leuten, die ein Interesse an der Datenbank der
           Fehlerberichte haben, als Diskussionsforum. Auf dieser Liste
           werden keine spezifischen Fehler, Fehlerbehebungen oder PRs
           diskutiert.

   freebsd-bugs

           Fehlerberichte

           Auf dieser Liste werden Fehlerberichte gesammelt. Fehlerberichte
           sollten immer mit der Web-Schnittstelle erstellt werden.

   freebsd-chat

           Nicht technische Themen, welche die FreeBSD Gemeinschaft betreffen

           Auf dieser Liste werden nicht-technische soziale Themen
           diskutiert, die nicht auf die anderen Listen passen. Hier kann
           diskutiert werden, ob Jordan wie ein Frettchen aus einem
           Zeichentrickfilm aussieht oder nicht, ob grundsa:tzlich in
           Grossbuchstaben geschrieben werden soll, wer zuviel Kaffee trinkt,
           wo das beste Bier gebraut wird und wer Bier in seinem Keller
           braut. Gelegentlich ko:nnen auf den technischen Listen wichtige
           Ereignisse wie Feste, Hochzeiten oder Geburten angeku:ndigt
           werden, aber nachfolgende Nachrichten sollten auf die Liste
           FreeBSD chat gesendet werden.

   freebsd-chromium

           Diskussionen zum Einsatz von Chromium unter FreeBSD

           Auf dieser technischen Liste werden Fragen zur Entwicklung, zur
           Installation sowie zum Einsatz von Chromium unter FreeBSD
           diskutiert.

   freebsd-cloud

           FreeBSD auf verschiedenen Cloud-Plattformen betreiben

           Diese Liste diskutiert FreeBSD auf Amazon EC2, Google Compute
           Engine, Microsoft Azure und weiteren Cloud-Plattformen.

   freebsd-core

           FreeBSD Core Team

           Dies ist eine interne Mailingliste des FreeBSD Core Teams. Wenn in
           einer wichtigen Angelegenheit, die FreeBSD betrifft, entschieden
           werden muss oder die Angelegenheit einer genauen Pru:fung
           unterzogen werden muss, ko:nnen Nachrichten an diese Liste
           gesendet werden.

   freebsd-current

           Gebrauch von FreeBSD-CURRENT

           Diese Mailingliste ist fu:r die Benutzer von FreeBSD-CURRENT
           eingerichtet. Auf ihr finden sich Anku:ndigungen u:ber
           Besonderheiten von -CURRENT, von denen Benutzer betroffen sind.
           Sie entha:lt weiterhin Anweisungen, wie man ein System auf
           -CURRENT ha:lt. Jeder, der ein -CURRENT System besitzt, muss diese
           Liste lesen. Die Liste ist nur fu:r technische Inhalte bestimmt.

   freebsd-desktop

           FreeBSD als Desktop verwenden und verbessern

           Dies ist ein Forum fu:r Diskussionen um FreeBSD auf dem Desktop.
           Es wird prima:r von Desktop-Portierern und Nutzern verwendet, um
           Probleme und Verbesserungen zu FreeBSDs Einsatz auf dem Desktop zu
           besprechen.

   freebsd-doc

           Auf dieser Mailingliste werden Themen diskutiert, die im
           Zusammenhang mit der Erstellung der FreeBSD Dokumentation stehen.
           "The FreeBSD Documentation Project" besteht aus den Mitgliedern
           dieser Liste. Diese Liste steht jedem offen, Sie sind herzlich
           eingeladen teilzunehmen und mitzuhelfen.

   freebsd-drivers

           Gera:tetreiber fu:r FreeBSD schreiben

           Ein Forum fu:r technische Diskussionen u:ber das Schreiben von
           Gera:tetreibern fu:r FreeBSD. Daher werden hier vor allem Fragen
           behandelt, die sich um das Schreiben von Treibern, welche die APIs
           des Kernels nutzen, drehen.

   freebsd-dtrace

           Entwicklung und Benutzung von DTrace unter FreeBSD

           DTrace ist Bestandteil von FreeBSD und stellt
           Laufzeitinformationen vom Kernel und Anwendungsprogrammen zur
           Verfu:gung. Diese Liste ist fu:r Diskussionen von Entwicklern und
           Benutzern.

   freebsd-eclipse

           Fu:r FreeBSD-Anwender, welche die Eclipse IDE deren Werkzeuge,
           Anwendungen und Ports einsetzen

           Das Ziel dieser Liste ist es, Unterstu:tzung fu:r all jene zu
           bieten, die mit der Installation, Verwendung, Entwicklung und
           Wartung der Eclipse-IDE sowie deren Werkzeugen und Anwendungen
           unter FreeBSD zu tun haben. Ausserdem wird Hilfe bei der
           Portierung der IDE und deren Plugins auf FreeBSD geboten.

           Zusa:tzlich soll diese Liste einen Informationsaustausch zwischen
           der Eclipse- und der FreeBSD-Gemeinde ermo:glichen, von dem beide
           Seiten profitieren ko:nnen.

           Obwohl sich diese Liste auf die Anforderungen von Anwendern
           konzentriert, mo:chte sie auch Entwickler unterstu:tzen, die an
           der Entwicklung von FreeBSD-spezifischen Anwendungen unter Nutzung
           des Eclipse-Frameworks arbeiten.

   freebsd-embedded

           FreeBSD in eingebetteten Anwendungen einsetzen

           Diese Liste diskutiert Themen im Zusammenhang mit dem Einsatz von
           ungewo:hnlich kleinen und eingebetteten FreeBSD-Installationen.
           Auf dieser Liste werden ausschliesslich technische Diskussionen
           gefu:hrt. Unter eingebetteten Systemen versteht diese Liste
           Systeme, bei denen es sich nicht um Desktopsysteme handelt, und
           die in der Regel nur einem einzigen Zweck dienen (im Gegensatz zu
           Desktopsystemen, die fu:r die Bewa:ltigung verschiedenster
           Aufgaben geeignet sind). In die Gruppe der eingebetteten Systeme
           geho:ren beispielsweise Telefone, Netzwerkgera:te wie Router,
           Switche oder PBX-Systeme, PDAs, Verkaufsautomaten und andere mehr.

   freebsd-emulation

           Emulation anderer Systeme wie Linux(R), MS-DOS(R) oder Windows(R)

           Hier werden technische Diskussionen zum Einsatz von Programmen,
           die fu:r andere Betriebssysteme geschrieben wurden, gefu:hrt.

   freebsd-enlightenment

           Enlightenment Desktop-Umgebung fu:r FreeBSD-Systeme. Dies ist eine
           technische Liste, in der nur technische Inhalte erwartet werden.

   freebsd-eol

           Support fu:r FreeBSD-bezogene Software, die vom FreeBSD Project
           offiziell nicht mehr unterstu:tzt wird.

           Diese Liste ist fu:r all jene interessant, die Unterstu:tzung fu:r
           vom FreeBSD Project offiziell nicht mehr (in Form von Security
           Advisories oder Patches) unterstu:tzte Programme beno:tigen oder
           anbieten wollen.

   freebsd-firewire

           FireWire(R) (iLink, IEEE 1394)

           Auf dieser Liste wird das Design und die Implementierung eines
           FireWire(R)-Subsystems (auch IEEE 1394 oder iLink) fu:r FreeBSD
           diskutiert. Relevante Themen sind die Standards, Busse und ihre
           Protokolle, sowie Adapter, Karten und Chipsa:tze. Des Weiteren die
           Architektur und der Quellcode, die no:tig sind, diese Gera:te zu
           unterstu:tzen.

   freebsd-fortran

           Fortran unter FreeBSD

           Diese Liste ist fu:r Diskussionen rund um Fortran-Ports unter
           FreeBSD: Compiler, Bibliotheken, wissenschaftliche und technische
           Anwendungen von Laptops bis hin zu HPC-Clustern.

   freebsd-fs

           Dateisysteme

           Diskussionen u:ber FreeBSD-Dateisysteme. Dies ist eine technische
           Liste, in der nur technische Inhalte erwartet werden.

   freebsd-games

           Spiele unter FreeBSD

           Eine Liste fu:r technische Diskussionen im Zusammenhang mit
           Spielen unter FreeBSD. Die Liste ist fu:r Personen, die an
           Portierungen arbeiten und alternative Lo:sungen ero:rtern.
           Personen, die an technischen Diskussionen interessiert sind, sind
           ebenfalls willkommen.

   freebsd-gecko

           Angelegenheiten zur Gecko Rendering Engine

           Dies ist ein Forum u:ber Gecko-Anwendungen, die FreeBSD verwenden.

           Die Diskussion dreht sich um die Portierung von Gecko-Anwendungen,
           deren Installation, die Entwicklung sowie deren Unterstu:tzung
           innerhalb von FreeBSD.

   freebsd-geom

           GEOM

           Diskussion u:ber GEOM und verwandte Implementierungen. Dies ist
           eine technische Liste, in der nur technische Inhalte erwartet
           werden.

   freebsd-git

           Verwendung von git im FreeBSD Project

           Diskussionen u:ber die Verwendung von git in der FreeBSD
           Infrastruktur. Personen, die einen Spiegel aufsetzen wollen, oder
           allgemeine Fragen zu git unter FreeBSD haben, ko:nnen hier Fragen
           stellen.

   freebsd-gnome

           GNOME

           Diskussionen u:ber die grafische Benutzeroberfla:che GNOME. Dies
           ist eine technische Liste, in der nur technische Inhalte erwartet
           werden.

   freebsd-infiniband

           Infiniband unter FreeBSD

           Technische Liste mit Diskussionen u:ber Infiniband, OFED und
           OpenSM unter FreeBSD.

   freebsd-ipfw

           IP Firewall

           Diskussionen u:ber eine Neubearbeitung des IP-Firewall Quelltexts
           in FreeBSD. Dies ist eine technische Liste, in der nur technische
           Inhalte erwartet werden.

   freebsd-ia64

           Portierung von FreeBSD auf die IA64-Plattform

           Dies ist eine technische Liste fu:r diejenigen, die FreeBSD auf
           die IA-64 Plattform von Intel(R) portieren. Themen sind die
           Probleme bei der Portierung und deren Lo:sung. Interessierte, die
           der Diskussion folgen wollen, sind ebenfalls willkommen.

   freebsd-isdn

           ISDN Subsystem

           Mailingliste fu:r die Entwickler des ISDN Subsystems von FreeBSD.

   freebsd-java

           Java(TM) Entwicklung

           Mailingliste, auf der die Entwicklung von Java(TM) Anwendungen
           fu:r FreeBSD sowie die Portierung und Pflege von JDK(TM)s
           diskutiert wird.

   freebsd-jobs

           Stellenangebote und Stellengesuche

           In diesem Forum ko:nnen Sie Stellenangebote und Stellengesuche,
           die mit FreeBSD zu tun haben, aufgeben. Diese Mailingliste ist
           nicht der Ort, um u:ber allgemeine Bescha:ftigungsprobleme zu
           diskutieren; dazu gibt es anderswo geeignete Foren.

           Beachten Sie bitte, dass diese Liste, wie die anderen
           FreeBSD.org-Listen, weltweit gelesen wird. Geben Sie daher bitte
           den Arbeitsort genau an. Geben Sie bitte auch an, ob Telearbeit
           mo:glich ist und ob Hilfen fu:r einen Umzug angeboten werden.

           Benutzen Sie in der E-Mail bitte nur offene Formate - vorzugsweise
           nur das Textformat. Andere Formate, wie PDF oder HTML, werden von
           den Lesern akzeptiert. Nicht offene Formate wie Microsoft(R) Word
           (.doc) werden vom Server der Liste abgelehnt.

   freebsd-hackers

           Technische Diskussionen

           Dies ist ein Forum fu:r technische Diskussionen u:ber FreeBSD.
           Leute, die aktiv an FreeBSD arbeiten, ko:nnen hier Probleme und
           deren Lo:sungen diskutieren. Interessierte, die den Diskussionen
           folgen wollen, steht die Liste ebenfalls offen. Auf dieser Liste
           finden nur technische Diskussionen statt.

   freebsd-hardware

           Allgemeine Diskussionen u:ber Hardware

           Allgemeine Diskussionen u:ber die Hardware, auf der FreeBSD
           la:uft: Probleme und Ratschla:ge welche Hardware man kaufen sollte
           und welche nicht.

   freebsd-hubs

           FreeBSD-Spiegel

           Anku:ndigungen und Diskussionsforum fu:r Leute, die
           FreeBSD-Spiegel betreiben.

   freebsd-isp

           Themen fu:r Internet Service Provider

           Diese Liste ist fu:r Internet Service Provider (ISP), die FreeBSD
           benutzen. Auf dieser Liste finden nur technische Diskussionen
           statt.

   freebsd-mono

           Mono und C# Anwendungen auf FreeBSD

           Diese Liste beinhaltet Diskussionen u:ber das Mono
           Entwicklungsframework auf FreeBSD. Dies ist eine technische
           Mailingliste. Es ist fu:r Personen gedacht, die aktiv an der
           Portierung von Mono oder C# Anwendungen auf FreeBSD sind, um
           Probleme oder alternative Lo:sungen zu beratschlagen. Personen die
           der technischen Diskussion folgen mo:chten sind ebenso willkommen.

   freebsd-kde

           KDE

           Diskussionen u:ber KDE auf FreeBSD-Systemen. Dies ist eine
           technische Liste, in der nur technische Inhalte diskutiert werden.

   freebsd-ops-announce

           Projekt-Infrastruktur Anku:ndigungen

           Diese Liste fu:r Leute gedacht, die an Vera:nderungen im
           Zusammenhang der FreeBSD-Projekt Infrastruktur interessiert sind.

           Diese moderierte Liste wird ausschliesslich fu:r Anku:ndigungen
           verwendet. Sie ko:nnen keine Anfragen an diese Liste stellen und
           erhalten somit auch keine Antworten.

   freebsd-performance

           Diskussionsforum mit dem Ziel, die Leistung von FreeBSD zu
           verbessern.

           Auf dieser Liste diskutieren Hacker, Systemadministratoren und
           andere Interessierte die Leistung von FreeBSD. Zula:ssige Themen
           sind beispielsweise Systeme unter hoher Last, Systeme mit
           Leistungsproblemen oder Systeme, die Leistungsgrenzen von FreeBSD
           u:berwinden. Jeder, der mithelfen will, die Leistung von FreeBSD
           zu verbessern, sollte diese Liste abonnieren. Die Liste ist
           technisch anspruchsvoll und geeignet fu:r erfahrene
           FreeBSD-Benutzer, Hacker oder Administratoren, die FreeBSD
           schnell, robust und skalierbar halten wollen. Auf der Liste werden
           Beitra:ge gesammelt oder Fragen nach ungelo:sten Problemen
           beantwortet. Sie ist kein Ersatz fu:r das gru:ndliche Studium der
           Dokumentation.

   freebsd-pf

           Diskussionen und Fragen zu packet filter als Firewallsystem.

           FreeBSD-spezifische Diskussionen zur Benutzung von packet filter
           (pf) als Firewallsystem. Sowohl technische Diskussionen als auch
           Anwenderfragen sind auf dieser Liste willkommen. Fragen zum ALTQ
           QoS Framework ko:nnen ebenfalls gestellt werden.

   freebsd-pkg

           Diskussionen u:ber die Verwaltung von Bina:rpaketen und
           entsprechenden Werkzeugen

           Diskussionen u:ber die Verwendung von Bina:rpaketen, Werkzeuge zur
           Paketverwaltung, Entwicklung und Unterstu:tzung innerhalb von
           FreeBSD, Verwaltung der Paket-Repositories und die Verwaltung von
           Paketen von Drittherstellern.

           Beachten Sie, dass diese Liste nicht geeignet ist, um Probleme
           u:ber nicht gebaute Pakete zu melden. Diese Probleme werden im
           allgemeinen als Problem des Ports betrachtet.

   freebsd-pkg-fallout

           Protokolle von fehlgeschlagenen Paketbauvorga:ngen

           Alle Fehlerprotokolle aus dem Paketcluster.

   freebsd-pkgbase

           Paketierung des FreeBSD-Basissystems

           Diskussion u:ber die Implementierung und Probleme im Bezug auf die
           Paketierung des FreeBSD-Basissystems.

   freebsd-platforms

           Portierung auf nicht-Intel(R) Plattformen

           Plattformu:bergreifende Themen und Vorschla:ge fu:r die Portierung
           auf nicht-Intel(R) Plattformen. Auf dieser Liste finden nur
           technische Diskussionen statt.

   freebsd-ports

           Diskussion u:ber die Ports-Sammlung

           Diskussionen u:ber die FreeBSD-Ports-Sammlung und die
           Infrastruktur der Sammlung. Die Liste dient auch der allgemeinen
           Koordination der Dinge, welche die Ports-Sammlung betreffen. Auf
           dieser Liste finden nur technische Diskussionen statt.

   freebsd-ports-bugs

           Diskussion u:ber Fehler in den Ports

           Diskussion u:ber Fehler in der Ports-Sammlung (/usr/ports), neue
           Ports oder A:nderungen an bestehenden Ports. Auf dieser Liste
           finden nur technische Diskussionen statt.

   freebsd-proliant

           Technische Diskussionen zum Einsatz von FreeBSD auf HP
           ProLiant-Serverplattformen

           Diese Mailingliste bietet technische Diskussionen zum Einsatz von
           FreeBSD auf der ProLiant-Serverplattform von HP, darunter Fragen
           zu ProLiant-spezifischen Treibern, Konfigurationswerkzeugen sowie
           BIOS-Aktualisierungen. Daher ist sie die erste Anlaufstelle, um
           die Module hpasmd, hpasmcli, sowie hpacucli zu diskutieren.

   freebsd-python

           Python unter FreeBSD

           Diese technische Liste dient der Verbesserung der
           Python-Unterstu:tzung unter FreeBSD. Sie wird von Personen
           gelesen, die an der Portierung von Python, von Python-Modulen
           Dritter und von Zope nach FreeBSD arbeiten. Personen, die diese
           technischen Diskussion verfolgen wollen, sind ebenfalls
           willkommen.

   freebsd-questions

           Benutzerfragen

           Auf dieser Mailingliste ko:nnen Fragen zu FreeBSD gestellt werden.
           Fragen Sie bitte nicht nach Anleitungen, wenn Sie nicht sicher
           sind, dass Ihre Frage wirklich technischer Natur ist.

   freebsd-ruby

           Ruby unter FreeBSD

           Diese technische Liste dient der Verbesserung der
           Ruby-Unterstu:tzung unter FreeBSD. Sie wird von Personen gelesen,
           die an der Portierung von Ruby, von Bibliotheken Dritter und
           Frameworks arbeiten. Personen, die diese technischen Diskussionen
           verfolgen wollen, sind ebenfalls willkommen.

   freebsd-scsi

           SCSI Subsystem

           Diese Mailingliste ist fu:r die Entwickler des SCSI Subsystems von
           FreeBSD. Auf dieser Liste finden nur technische Diskussionen
           statt.

   freebsd-security

           Sicherheitsthemen

           Sicherheitsthemen, die FreeBSD betreffen, wie DES, Kerberos,
           bekannte Sicherheitslo:cher und Fehlerbehebungen. Stellen Sie
           bitte auf dieser Liste keine allgemeinen Fragen zum Thema
           Sicherheit. Willkommen sind allerdings Beitra:ge zur FAQ, das
           heisst eine Frage mit der passenden Antwort. Auf dieser Liste
           finden nur technische Diskussionen statt.

   freebsd-security-notifications

           Anku:ndigungen zum Thema Sicherheit

           Anku:ndigungen u:ber Sicherheitsprobleme von FreeBSD und deren
           Behebungen. Diese Liste ist kein Diskussionsforum, benutzen Sie
           FreeBSD security, um Sicherheitsthemen zu diskutieren.

   freebsd-small

           Gebrauch von FreeBSD in eingebetteten Systemen.

           Diese Liste fu:r ungewo:hnlich kleine FreeBSD Installation oder
           den Einsatz von FreeBSD in eingebetteten Systemen gedacht. Auf
           dieser Liste finden nur technische Diskussionen statt.

  Anmerkung:

           Diese Liste wurde durch freebsd-embedded ersetzt.

   freebsd-snapshots

           Anku:ndigungen fu:r FreeBSD Entwickler-Snapshots

           Diese Liste informiert u:ber die Verfu:gbarkeit von neuen
           FreeBSD-Snapshots aus den Zweigen head/ und stable/.

   freebsd-stable

           Gebrauch von FreeBSD-STABLE.

           Diese Mailingliste ist fu:r die Benutzer von FreeBSD-STABLE
           eingerichtet. -STABLE ist der Zweig, in dem die Entwicklung nach
           einen RELEASE stattfindet, einschliesslich Fehlerkorrekturen und
           neuer Funktionen. Die ABI wird wegen Bina:rkompatibilita:ten
           stabil gehalten. Auf der Liste finden sich Anku:ndigungen u:ber
           Besonderheiten von -STABLE, von denen Benutzer betroffen sind. Sie
           entha:lt weiterhin Anweisungen, wie man ein System auf -STABLE
           ha:lt. Jeder, der ein -STABLE System besitzt, muss diese Liste
           lesen. Die Liste ist nur fu:r technische Inhalte bestimmt.

   freebsd-standards

           Konformita:t von FreeBSD mit den C99- und POSIX(R) Standards

           Dieses Forum ist fu:r technische Diskussionen u:ber die
           Konformita:t von FreeBSD mit den C99- und POSIX(R)-Standards.

   freebsd-teaching

           Unterrichten mit FreeBSD

           Mailingliste, die das Unterrichten mit FreeBSD diskutiert.

   freebsd-testing

           Tests unter FreeBSD

           Technische Liste, auf der Tests unter FreeBSD diskutiert werden,
           einschliesslich ATF/Kyua, der Test/Build-Infrastruktur, und
           Portierungen von anderen Betriebssystemen (NetBSD, ...) nach
           FreeBSD.

   freebsd-tex

           Portierung von TeX und dessen Anwendungen nach FreeBSD

           Technische Liste fu:r Diskussionen im Zusammenhang mit TeX und
           dessen Anwendungen unter FreeBSD. Diese Liste ist fu:r Menschen,
           die an der Portierung von TeX nach FreeBSD arbeiten. Es werden
           aber auch Probleme und Lo:sungen ero:rtert. Personen, die an
           technischen Diskussionen interessiert sind, sind ebenfalls
           willkommen.

   freebsd-toolchain

           Wartung der FreeBSD-Toolchain

           Auf dieser Mailingliste werden alle Themen rund um die
           FreeBSD-Toolchain diskutiert. Dazu geho:ren der Status von Clang
           und GCC, aber auch Fragen zu Programmen wie Assemblern, Linkern
           und Debuggern.

   freebsd-translators

           U:bersetzung von FreeBSD-Dokumenten und Programmen

           Auf dieser Liste ko:nnen U:bersetzer von FreeBSD-Dokumenten u:ber
           die Methoden und Werkzeuge fu:r die U:bersetzung diskutieren. Neue
           Benutzer werden gebeten sich vorzustellen und die Sprache zu
           erwa:hnen, an dessen U:bersetzung sie interessiert sind.

   freebsd-transport

           Diskussion u:ber Transportprotokolle in FreeBSD

           Diese Liste behandelt die Probleme und das Design von FreeBSDs
           Netzwerkstack, darunter auch TCP, SCTP und UDP. Andere
           Netzwerkthemen sollten auf der FreeBSD networking diskutiert
           werden.

   freebsd-usb

           USB-Unterstu:tzung in FreeBSD.

           Auf dieser Liste finden nur technische Diskussionen statt.

   freebsd-user-groups

           Koordination von Benutzergruppen

           Diese Liste ist fu:r Koordinatoren lokaler Benutzergruppen und
           einem ausgesuchten Mitglied des Core Teams eingerichtet worden.
           Der Inhalt sollte Inhalte von Treffen und die Koordination von
           Projekten mehrerer Benutzergruppen beschra:nkt sein.

   freebsd-virtualization

           Diskussion u:ber verschiedene Virtualisierungsverfahren, die von
           FreeBSD unterstu:tzt werden

           Eine Liste, auf der die verschiedenen Virtualisierungsverfahren,
           die von FreeBSD unterstu:tzt werden, diskutiert werden. Auf der
           einen Seite liegt der Fokus auf der Implementierung der
           zugrundeliegenden Funktionalita:ten, ebenso wie das Hinzufu:gen
           neuer Eigenschaften. Auf der anderen Seite haben die Benutzer ein
           Forum, um Fragen bei Problemen zu stellen oder um ihre
           Anwendungsfa:lle zu besprechen.

   freebsd-wip-status

           Status von in Arbeit befindlichen FreeBSD-Ta:tigkeiten

           Diese Mailingliste kann dazu verwendet werden, eigene Kreationen
           und deren Fortschritt von FreeBSD-verwandten Ta:tigkeiten
           anzuku:ndigen. Die Nachrichten werden moderiert. Es wird
           empfohlen, die Nachricht "An:" eine mehr themenverwandte
           FreeBSD-Liste zu senden und diese Liste nur in Blindkopie zu
           setzen. Auf diese Weise kann ihre in Arbeit befindliche Ta:tigkeit
           auch auf der themenverwandten Liste diskutiert werden, da auf
           dieser Liste keine Diskussionen erlaubt sind.

           Sehen Sie sich das Archiv der Liste fu:r passende Nachrichten an.

           Redaktionelle Auszu:ge der Nachrichten an diese Liste werden
           eventuell alle paar Monate auf die FreeBSD Webseite als Teil der
           Statusberichte [4] gestellt. Weitere Beispiele und zuru:ckliegende
           Berichte ko:nnen Sie auch dort finden.

   freebsd-wireless

           Diskussionen zum 802.11-Stack sowie zur Entwicklung von Tools und
           Gera:tetreibern

           Die Mailingliste freebsd-wireless diskutiert Themen rund um den
           802.11-Stack (sys/net80211). Besprochen werden die Entwicklung von
           Tools und Gera:tetreibern sowie auftretende Probleme, neue
           Funktionen sowie die Wartung der existierenden Werkzeuge und
           Treiber.

   freebsd-xen

           Diskussionen u:ber die FreeBSD Portierung auf Xen(TM) -
           Implementierung und Verwendung

           Eine Liste, welche die FreeBSD Portierung auf Xen(TM) behandelt.
           Das erwartete Nachrichtenaufkommen ist klein genug, so dass es als
           Forum fu:r sowohl technische Diskussionen u:ber die
           Implementierung und Entwurfsdetails, als auch administrative
           Verteilaspekte ausgelegt ist.

   freebsd-xfce

           XFCE

           Eine Liste, auf der Fragen zum Einsatz von XFCE unter FreeBSD
           diskutiert werden. Es handelt sich um eine technische
           Mailingliste, die sich prima:r an Entwickler richtet, die aktiv an
           der Portierung von XFCE nach FreeBSD arbeiten. Aber auch Nutzer,
           die einfach nur die technischen Diskussionen verfolgen wollen,
           sind willkommen. Diskutiert werden vor allem bei der Portierung
           auftretende Probleme und mo:gliche Lo:sungswege.

   freebsd-zope

           Zope

           Ein Forum fu:r Diskussionen daru:ber, wie man die Zope-Umgebung
           auf FreeBSD portieren kann. Dies ist eine technische Mailingliste.
           Sie ist fu:r Leute gedacht, die aktiv an der Portierung von Zope
           auf FreeBSD arbeiten, um aufkommende Probleme oder alternative
           Lo:sungsansa:tze zu besprechen. Personen, die der technischen
           Diskussion folgen mo:chten, sind ebenfalls willkommen.

  C.2.4. Filter der Mailinglisten

   Um die Verbreitung von Spam, Viren und anderen nicht erwu:nschten E-Mails
   zu verhindern, werden auf den FreeBSD-Mailinglisten Filter eingesetzt.
   Dieser Abschnitt beschreibt nur einen Teil der zum Schutz der Listen
   eingesetzten Filter.

   Auf den Mailinglisten sind nur die unten aufgefu:hrten Anha:nge erlaubt.
   Anha:nge mit einem anderen MIME-Typ werden entfernt, bevor eine E-Mail an
   eine Liste verteilt wird.

     * application/octet-stream

     * application/pdf

     * application/pgp-signature

     * application/x-pkcs7-signature

     * message/rfc822

     * multipart/alternative

     * multipart/related

     * multipart/signed

     * text/html

     * text/plain

     * text/x-diff

     * text/x-patch

  Anmerkung:

   Einige Mailinglisten erlauben vielleicht Anha:nge mit anderem MIME-Typ.
   Fu:r die meisten Mailinglisten sollte die obige Aufza:hlung aber richtig
   sein.

   Wenn eine E-Mail sowohl aus einer HTML-Version wie auch aus einer
   Text-Version besteht, wird die HTML-Version entfernt. Wenn eine E-Mail nur
   im HTML-Format versendet wurde, wird sie in reinen Text umgewandelt.

C.3. Usenet-News

   Neben den Gruppen, die sich ausschliesslich mit BSD bescha:ftigen, gibt es
   viele weitere in denen u:ber FreeBSD diskutiert wird, oder die fu:r
   FreeBSD-Benutzer wichtig sind.

  C.3.1. BSD spezifische Gruppen

     * comp.unix.bsd.freebsd.announce

     * comp.unix.bsd.freebsd.misc

     * de.comp.os.unix.bsd (deutsch)

     * fr.comp.os.bsd (franzo:sisch)

     * it.comp.os.bsd (italienisch)

  C.3.2. Weitere UNIX Gruppen

     * comp.unix

     * comp.unix.questions

     * comp.unix.admin

     * comp.unix.programmer

     * comp.unix.shell

     * comp.unix.misc

     * comp.unix.bsd

  C.3.3. X Window System

     * comp.windows.x

     * comp.windows.x.apps

     * comp.windows.x.announce

     * comp.emulators.ms-windows.wine

C.4. Offizielle Spiegel

   Hauptserver, Armenien, Australien, Da:nemark, Deutschland, Finnland,
   Frankreich, Grossbritannien, Hong Kong, Irland, Japan, Lettland, Litauen,
   Niederlande, Norwegen, O:sterreich, Russland, Schweden, Schweiz,
   Slowenien, Spanien, Su:dafrika, Taiwan, Tschechische Republik, USA.

   (aktualisiert am: UTC)

     * Hauptserver

          * https://www.FreeBSD.org/

     * Armenien

          * http://www1.am.FreeBSD.org/ (IPv6)

     * Australien

          * http://www.au.FreeBSD.org/

          * http://www2.au.FreeBSD.org/

     * Da:nemark

          * http://www.dk.FreeBSD.org/ (IPv6)

     * Deutschland

          * http://www.de.FreeBSD.org/

     * Finnland

          * http://www.fi.FreeBSD.org/

     * Frankreich

          * http://www1.fr.FreeBSD.org/

     * Grossbritannien

          * http://www1.uk.FreeBSD.org/

          * http://www3.uk.FreeBSD.org/

     * Hong Kong

          * http://www.hk.FreeBSD.org/

     * Irland

          * http://www.ie.FreeBSD.org/

     * Japan

          * http://www.jp.FreeBSD.org/www.FreeBSD.org/ (IPv6)

     * Lettland

          * http://www.lv.FreeBSD.org/

     * Litauen

          * http://www.lt.FreeBSD.org/

     * Niederlande

          * http://www.nl.FreeBSD.org/

     * Norwegen

          * http://www.no.FreeBSD.org/

     * O:sterreich

          * http://www.at.FreeBSD.org/ (IPv6)

     * Russland

          * http://www.ru.FreeBSD.org/ (IPv6)

     * Schweden

          * http://www.se.FreeBSD.org/

     * Schweiz

          * http://www.ch.FreeBSD.org/ (IPv6)

          * http://www2.ch.FreeBSD.org/ (IPv6)

     * Slowenien

          * http://www.si.FreeBSD.org/

     * Spanien

          * http://www.es.FreeBSD.org/

          * http://www2.es.FreeBSD.org/

     * Su:dafrika

          * http://www.za.FreeBSD.org/

     * Taiwan

          * http://www.tw.FreeBSD.org/

          * http://www2.tw.FreeBSD.org/

          * http://www4.tw.FreeBSD.org/

          * http://www5.tw.FreeBSD.org/ (IPv6)

     * Tschechische Republik

          * http://www.cz.FreeBSD.org/ (IPv6)

     * USA

          * http://www5.us.FreeBSD.org/ (IPv6)

     ----------------------------------------------------------------------

   [4] http://www.freebsd.org/news/status/

Anhang D. OpenPGP-Schlu:ssel

   Inhaltsverzeichnis

   D.1. Ansprechpartner

   Verwenden Sie die nachstehenden Schlu:ssel, wenn Sie eine Signatur
   u:berpru:fen oder eine verschlu:sselte E-Mail an einen Ansprechpartner
   oder einen Entwickler schicken wollen. Eine vollsta:ndige Liste der
   FreeBSD OpenPGP-Schlu:ssel finden Sie im Artikel PGP Keys. Den
   vollsta:ndigen Schlu:sselring der Entwickler von FreeBSD finden Sie unter
   https://www.FreeBSD.org/doc/pgpkeyring.txt.

D.1. Ansprechpartner

  D.1.1. Security Officer Team <security-officer@FreeBSD.org>

 pub   rsa4096/D39792F49EA7E5C2 2017-08-16 [SC] [expires: 2023-01-02]
       Key fingerprint = FC0E 878A E5AF E788 028D  6355 D397 92F4 9EA7 E5C2
 uid                            FreeBSD Security Officer <security-officer@FreeBSD.org>
 sub   rsa4096/6DD0A349F26ADEFD 2017-08-16 [E] [expires: 2023-01-02]


 -----BEGIN PGP PUBLIC KEY BLOCK-----

 mQINBFmT2+ABEACrTVJ7Z/MuDeyKFqoTFnm5FrGG55k66RLeKivzQzq/tT/6RKO9
 K8DaEvSIqD9b0/xgK02KgLSdp0Bucq8HLDFYUk3McFa6Z3YwjobNCWkxc72ipvVl
 uAOGN4H6fuoYOpeg4cLK1H9pktUIrzONTCixaZzc/Bu6X+aX4ywGeCfsuu8g5v03
 fLCPBLLgf3Bm5wsyZ6ZaGmsmILrWzd+d/rbr35Mcc5BekdgywUI4R191qo1bdrw9
 mEJP1V7Ik3jpExOsNnuhMTvm5OQMeCTfUvVEOtBU15QtbT+1LXF5FIOgML0LwS5v
 RHZN+5w/xvzSnEULpj24UuMKLDs/u9rj8U/zET8QaE+oG7m/mr4jJWZEmdX8HKdO
 WrpnVj6UAppk72qdBIEfLsOW2xB/NOjJpppbCQH3+sw7DRYA2UnKE9Mptj/KKiE4
 cs4c8Cupo2WSu93lEZDC5rCrULpT2lFeEXnRYlC/5oIgY5w9sFide9VI4CzHkkWX
 Z2NPW/i1w3mFhoXjvnNLGOYMfAMKPxsRC2/Bn3bY0IhKvuIZ4rAeu7FTmKDDqFKQ
 YEcrUOW74ZVng17AB29xzjWr4zNJVvp/CybFiUb8JoKkwtVWRqAVZIEgenAjU40d
 G5+W4e+ccL0mfTQfEBbXRjnL2BL2tnaoBR42cTfbZGRucPHz7MrlKBEeZQARAQAB
 tDdGcmVlQlNEIFNlY3VyaXR5IE9mZmljZXIgPHNlY3VyaXR5LW9mZmljZXJARnJl
 ZUJTRC5vcmc+iQJUBBMBCgA+FiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAlmT2+AC
 GwMFCQoek4AFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQ05eS9J6n5cKd9A/9
 Fz3uGjNy28D0ALT1d/JJGzdQ2R3YwspHk9KHBr1LePkog9wf1WRalwCeNtPmA+g5
 cn24psuzOeh1tRElImTZ2eE2ENPZ9XzK/J0ok0nK42MvmIwmMCyz+CaWv9GXW+FK
 0oXnFmHi4YaQUVN3p+45TGkD9T+O5biVww7P47n/NnWsTfhLx0bzC7LyjPKXINai
 /LgPgtlcOgY65/YhW/qhADCkoU7qMp9is41jMjTu1WB3OBPJkUkNpHfu6r15y8FN
 Wqsk7K4W6Obr/WQ6VKGGXgh/a5mTcaEoFGMO16uHijAY4nXeb2HGZlBKxgmPH9Ur
 aT4A9Pz/n+rIRMrK+rs+msFPemQHHNBYxy+x99uBpRBNyT2Su6GouZIxu5J16aIM
 V0ZyOy/dy7m/uJ4sMhJPqKkd8a+MoQs/2L1M1y1EAzsO/QZqIrKrCluaftNN9k/B
 qU0XClSDqB6sRMF7HFzYqb+f+M6cwSL/3Cp1Yx4rZ/onEE/MdWp64+3R87dETTXd
 5tWXQw04qOhfPri5cBTI7r3t/qMO1iNXCGSG5RJbGkas6N6t6Mj83L4ItjI8doLf
 aSIWZjj1XP3/me2hFJ6h2G5y5A+khO4ZwhC0ATFSq1fYbVGHw5AtfthIgNn8FoWu
 +Sb8h7/RqTr7F6LgWagAoAh0GtVj02SVABZjcNZz/AKJAjcEEAEKACEWIQQc9/9v
 rfXKn74bjLLtZ+zWXc9q5wUCWZPcTAMFAngACgkQ7Wfs1l3PauflkRAAgYcaBX0Y
 ic4btxKoP/eOVpgUciOPPKEhDCiloQDyf4XQnZFDoMfjgcHpbLTBZ6kiAz2UzDGr
 fJ4yUqrD+xfixUfCd5YpwzsaSpCGzDzSxOBcP/SpuAFhe40awSOIf5MruQar9Mlf
 33JyslDLULXXeewAq2pcGk0/WrrOragI6Cs2vPGy9XP96VvLxyhjrWjlKmnO+//w
 UF8oIO5hhKoqbtoxxlcqJgsWVyHch0mnPzvr6GWwoPhFXocnh1oPdbLjX1AwmGm9
 ltEYMge4QxONIXlXJR0TvuDuJOaLNvTOC3OI8L97fdBcZS7eNJrG5FAYR5Ft3ISf
 KJowIsSLGDt/cYApqpyP2pv7FpCvnwHgXHYar7/q4zhngCFRxQ2DPUx1cIJQ3Bgh
 HZolKyK1X7XE5ZVDfZ3s3gcHSVKS89pipgHHZNr4sSmOanA8rXHcyHS4o2zSi1ie
 r4iBwnOk6cCd6UNzEIiq0y/XhP/sc7xeL0mn3wDuV7jDBP9sp65sexL1qtIAfnzL
 pLQevm0z41ifrUH5nNeL6RdbXpaoXc8M4PJJeQKJDu04KzLcQpZdUdCJsbS6QO9w
 srWR8enQXPEhz2CO4L77bM9TgYO29222jTqEPcbXcmxF/klxO1rpssTTHUnHHi1Z
 LUGYCbZPjt+laTJ2YPHTjUtN1Jw85vSKCEuJATMEEAEKAB0WIQS7KNQLNg7uk2rt
 FW/l97zLo73d+AUCWjSYRwAKCRDl97zLo73d+JKyB/9N5Ytao12nD5QzMLvceGh5
 otCLN99TUryYiDVDLoNkBivq3jHQA/hOX2rwEueFq0+LF8/2DnglJuUICNtCxIzL
 WXXf/Hr5iWBUQ0JxYNPQzzjdMSXGE0WMwYVpAbCGxHpIsetKLdHUCwneYhaywe3I
 KzmRJSDJGV1IJB0sAfoFtgybZXHgIR61jQjtnNmmyYXliYCd0wmIhXQDFN91tzzG
 +EZdJ3Fao9JsMC+x55jO6EOLVySZgRF5E8vCeKUWemQciKFC7EhKcljILPYAA21u
 NmHCAgRHKWU9JMdFK0w9lQuN2HQaNfkahjarTNM/Q6LwxY0dLG0vVYifE085WFAf
 uQINBFmT2+ABEACxi39m5nQZexzY3c9sg/w5mUYCD89ZNSkj427gduQMYYGn7YW6
 jSPfVJ/V3+PDK824c0a0XasyDapQFY1CPTZYrReRPoyjb8tJjsSVGXXCTFpJZlFU
 br6kS9mgcx58Sypke2PMVk73+W1N1Yco+nahfTECRuM2/T2zHHr0AdKuBPF28U+H
 TxyLatKoIgQwHDs4E/f4ZTbAoHvu3PixAl7XHVXCgz0cHaLhRljXizbZDXngOdGm
 lqdFlAIpL6/l8E3m1Er0m3IfFo6qSzWRHg/KaBGIL4YKetJ6ACjlkCe5qbatDpmk
 gWlg3Ux4RBVjyCK834Xh7eZpEcNf2iwpm28glWh7XMHGUplTHkU3PWQ4vGfNxXB8
 HBOd9r02/cHL6MiHwhCAfIzZGVtqR0i9Ira57TMdXTpJWNXUcgsCMsi/Bg2a+hsn
 aiYLrZc18uNL5nqOqsqKG3c1TcmeN7nbxVgnrNST4AjteulkhmB9p8tNOXA3u979
 OO0T5LPwdqIpobdZ0lfw4URnAGw4Wd4Sm9PtRw0RvuAk2M2e5KXNyxPWAuMVkoRR
 a7wG6h/R8pki54Gexyc+JkfB4ZcOrzHNLurw6DhxroyfRs8WEgX0wNIGmJvCXSBG
 54jb5w9qudYwzIg4YPfvuX8sfeY8MTNhal3rF0tvVloGj3l709wlaWlBYwARAQAB
 iQI8BBgBCgAmFiEE/A6HiuWv54gCjWNV05eS9J6n5cIFAlmT2+ACGwwFCQoek4AA
 CgkQ05eS9J6n5cKhWw/+PT0R4r2gPAxI8ESEe380BYOmneNAH24MFOgWXqWCj4zX
 Uz992BVnW2aL5nH4O5d822LGeCrYUC7SCpQvlifdHZHjobgtizLTwuu40bc3gSOz
 cxWlx2jKfx3Ezn6QQz2mhhK6fZ1AO0ObiQxQq25ldURep95L78E/C8XkCe11YlUR
 ng3wQKeHM7awZWRw/QBC92haHuVtU3cx7At+zQL7jTBKSZqd34zzs0uoXIhk2h94
 O07MMDZ8z8MeU337vdL+RKYtD2bljLwpf7/kqg1D/q44RJ4ZpZcha9G0GvtLaQg2
 +MAPlLg1vOWZ8wOTLaQHm+uzYRpkqxkIV8OuVd4UikCd8t3VNjNG5rG/YRNIAX0A
 UEzs6oMF5YOFE8LmykesbUHAbC07Vcb0AsT5u3XKixDiIpPdnYSwGlkvoOVVLdeh
 q/aXLK9V8BpViG5+a8xP2fdF1eMqdnrKAsiO4GEiq193PN/FA049VeIs3fd0izAa
 x7+ag1MGtoF5Pij5iTVJm6phH5SUd1P3FY3OmclxWj/MbL4ba/G/6FWcy5NXxdw9
 L1bRqaM2KEHJ67aF6NZz7UMldwExAWzFbUon1LUpKysAukxVf0EnntydBeVOQ+JO
 HdqEpirrVLMpxPttUB2xxbo947nMj7/Bnme2gvb0vxaC9xSGVxrpW9cg5iCwSdc=
 =8rds
 -----END PGP PUBLIC KEY BLOCK-----

  D.1.2. Security Team Secretary <secteam-secretary@FreeBSD.org>

 pub   4096R/3CB2EAFCC3D6C666 2013-09-24 [expires: 2018-01-01]
       Key fingerprint = FA97 AA04 4DF9 0969 D5EF  4ADA 3CB2 EAFC C3D6 C666
 uid                          FreeBSD Security Team Secretary <secteam-secretary@FreeBSD.org>
 sub   4096R/509B26612335EB65 2013-09-24 [expires: 2018-01-01]

 -----BEGIN PGP PUBLIC KEY BLOCK-----

 mQINBFJBjIIBEADadvvpXSkdnBOGV2xcsFwBBcSwAdryWuLk6v2VxjwsPcY6Lwqz
 NAZr2Ox1BaSgX7106Psa6v9si8nxoOtMc5BCM/ps/fmedFU48YtqOTGF+utxvACg
 Ou6SKintEMUa1eoPcww1jzDZ3mxx49bQaNAJLjVxeiAZoYHe9loTe1fxsprCONnx
 Era1hrI+YA2KjMWDORcwa0sSXRCI3V+b4PUnbMUOQa3fFVUriM4QjjUBU6hW0Ub0
 GDPcZq45nd7PoPPtb3/EauaYfk/zdx8Xt0OmuKTi9/vMkvB09AEUyShbyzoebaKH
 dKtXlzyAPCZoH9dihFM67rhUg4umckFLc8vc5P2tNblwYrnhgL8ymUaOIjZB/fOi
 Z2OZLVCiDeHNjjK3VZ6jLAiPyiYTG1Hrk9E8NaZDeUgIb9X/K06JXVBQIKNSGfX5
 LLp/j2wr+Kbg3QtEBkcStlUGBOzfcbhKpE2nySnuIyspfDb/6JbhD/qYqMJerX0T
 d5ekkJ1tXtM6aX2iTXgZ8cqv+5gyouEF5akrkLi1ySgZetQfjm+zhy/1x/NjGd0u
 35QbUye7sTbfSimwzCXKIIpy06zIO4iNA0P/vgG4v7ydjMvXsW8FRULSecDT19Gq
 xOZGfSPVrSRSAhgNxHzwUivxJbr05NNdwhJSbx9m57naXouLfvVPAMeJYwARAQAB
 tD9GcmVlQlNEIFNlY3VyaXR5IFRlYW0gU2VjcmV0YXJ5IDxzZWN0ZWFtLXNlY3Jl
 dGFyeUBGcmVlQlNELm9yZz6JAj0EEwEKACcFAlJBjIICGwMFCQgH7b8FCwkIBwMF
 FQoJCAsFFgIDAQACHgECF4AACgkQPLLq/MPWxmYt8Q/+IfFhPIbqglh4rwFzgR58
 8YonMZcq+5Op3qiUBh6tE6yRz6VEqBqTahyCQGIk4xGzrHSIOIj2e6gEk5a4zYtf
 0jNJprk3pxu2Og05USJmd8lPSbyBF20FVm5W0dhWMKHagL5dGS8zInlwRYxr6mMi
 UuJjj+2Hm3PoUNGAwL1SH2BVOeAeudtzu80vAlbRlujYVmjIDn/dWVjqnWgEBNHT
 SD+WpA3yW4mBJyxWil0sAJQbTlt5EM/XPORVZ2tvETxJIrXea/Sda9mFwvJ02pJn
 gHi6TGyOYydmbu0ob9Ma9AvUrRlxv8V9eN7eZUtvNa6n+IT8WEJj2+snJlO4SpHL
 D3Z+l7zwfYeM8FOdzGZdVFgxeyBU7t3AnPjYfHmoneqgLcCO0nJDKq/98ohz5T9i
 FbNR/vtLaEiYFBeX3C9Ee96pP6BU26BXhw+dRSnFeyIhD+4g+/AZ0XJ1CPF19D+5
 z0ojanJkh7lZn4JL+V6+mF1eOExiGrydIiiSXDA/p5FhavMMu8Om4S0sn5iaQ2aX
 wRUv2SUKhbHDqhIILLeQKlB3X26obx1Vg0nRhy47qNQn/xc9oSWLAQSVOgsShQeC
 6DSzrKIBdKB3V8uWOmuM7lWAoCP53bDRW+XIOu9wfpSaXN2VTyqzU7zpTq5BHX1a
 +XRw8KNHZGnCSAOCofZWnKyJAhwEEAEKAAYFAlJBjYgACgkQ7Wfs1l3PaudFcQ//
 UiM7EXsIHLwHxez32TzA/0uNMPWFHQN4Ezzg4PKB6Cc4amva5qbgbhoeCPuP+XPI
 2ELfRviAHbmyZ/zIgqplDC4nmyisMoKlpK0Yo1w4qbix9EVVZr2ztL8F43qN3Xe/
 NUSMTBgt/Jio7l5lYyhuVS3JQCfDlYGbq6NPk0xfYoYOMOZASoPhEquCxM5D4D0Z
 3J3CBeAjyVzdF37HUw9rVQe2IRlxGn1YAyMb5EpR2Ij612GFad8c/5ikzDh5q6JD
 tB9ApdvLkr0czTBucDljChSpFJ7ENPjAgZuH9N5Dmx2rRUj2mdBmi7HKqxAN9Kdm
 +pg/6vZ3vM18rBlXmw1poQdc3srAL+6MHmIfHHrq49oksLyHwyeL8T6BO4d4nTZU
 xObP7PLAeWrdrd1Sb3EWlZJ9HB/m2UL9w9Om1c6cb6X2DoCzQAStVypAE6SQCMBK
 pxkWRj90L41BS62snja+BlZTELuuLTHULRkWqS3fFkUxlDSMUn96QksWlwZLcxCv
 hKxJXOX+pHAiUuMIImaPQ0TBDBWWf5d8zOQlNPsyhSGFR5Skwzlg+m9ErQ+jy7Uz
 UmNCNztlYgRKeckXuvr73seoKoNXHrn7vWQ6qB1IRURj2bfphsqlmYuITmcBhfFS
 Dw0fdYXSDXrmG9wad98g49g4HwCJhPAl0j55f93gHLGIRgQQEQoABgUCUkGO5gAK
 CRAV1ogEymzfsol4AKCI7rOnptuoXgwYx2Z9HkUKuugSRwCgkyW9pxa5EovDijEF
 j1jG/cdxTOaJAhwEEAEKAAYFAlJBkdUACgkQkshDRW2mpm6aLxAAzpWNHMZVFt7e
 wQnCJnf/FMLTjduGTEhVFnVCkEtI+YKarveE6pclqKJfSRFDxruZ6PHGG2CDfMig
 J6mdDdmXCkN//TbIlRGowVgsxpIRg4jQVh4S3D0Nz50h+Zb7CHbjp6WAPVoWZz7b
 Myp+pN7qx/miJJwEiw22Eet4Hjj1QymKwjWyY146V928BV/wDBS/xiwfg3xIVPZr
 RqtiOGN/AGpMGeGQKKplkeITY7AXiAd+mL4H/eNf8b+o0Ce2Z9oSxSsGPF3DzMTL
 kIX7sWD3rjy3Xe2BM20stIDrJS2a1fbnIwFvqszS3Z3sF5bLc6W0iyPJdtbQ0pt6
 nekRl9nboAdUs0R+n/6QNYBkj4AcSh3jpZKe82NwnD/6WyzHWtC0SDRTVkcQWXPW
 EaWLmv8VqfzdBiw6aLcxlmXQSAr0cUA6zo6/bMQZosKwiCfGl3tR4Pbwgvbyjoii
 pF+ZXfz7rWWUqZ2C79hy3YTytwIlVMOnp3MyOV+9ubOsFhLuRDxAksIMaRTsO7ii
 5J4z1d+jzWMW4g1B50CoQ8W+FyAfVp/8qGwzvGN7wxN8P1iR+DZjtpCt7J+Xb9Pt
 L+lRKSO/aOgOfDksyt2fEKY4yEWdzq9A3VkRo1HCdUQY6SJ/qt7IyQHumxvL90F6
 vbB3edrR/fVGeJsz4vE10hzy7kI1QT65Ag0EUkGMggEQAMTsvyKEdUsgEehymKz9
 MRn9wiwfHEX5CLmpJAvnX9MITgcsTX8MKiPyrTBnyY/QzA0rh+yyhzkY/y55yxMP
 INdpL5xgJCS1SHyJK85HOdN77uKDCkwHfphlWYGlBPuaXyxkiWYXJTVUggSjuO4b
 jeKwDqFl/4Xc0XeZNgWVjqHtKF91wwgdXXgAzUL1/nwN3IglxiIR31y10GQdOQEG
 4T3ufx6gv73+qbFc0RzgZUQiJykQ3tZK1+Gw6aDirgjQYOc90o2Je0RJHjdObyZQ
 aQc4PTZ2DC7CElFEt2EHJCXLyP/taeLq+IdpKe6sLPckwakqtbqwunWVoPTbgkxo
 Q1eCMzgrkRu23B2TJaY9zbZAFP3cpL65vQAVJVQISqJvDL8K5hvAWJ3vi92qfBcz
 jqydAcbhjkzJUI9t44v63cIXTI0+QyqTQhqkvEJhHZkbb8MYoimebDVxFVtQ3I1p
 EynOYPfn4IMvaItLFbkgZpR/zjHYau5snErR9NC4AOIfNFpxM+fFFJQ7W88JP3cG
 JLl9dcRGERq28PDU/CTDH9rlk1kZ0xzpRDkJijKDnFIxT2ajijVOZx7l2jPL1njx
 s4xa1jK0/39kh6XnrCgK49WQsJM5IflVR2JAi8BLi2q/e0NQG2pgn0QL695Sqbbp
 NbrrJGRcRJD9sUkQTpMsLlQTABEBAAGJAiUEGAEKAA8FAlJBjIICGwwFCQgH7b8A
 CgkQPLLq/MPWxmZAew//et/LToMVR3q6/qP/pf9ob/QwQ3MgejkC0DY3Md7JBRl/
 6GWfySYnO0Vm5IoJofcv1hbhc/y3OeZTvK4s+BOQsNokYe34mCxZG4dypNaepkQi
 x0mLujeU/n4Y0p0LTLjhGLVdKina2dM9HmllgYr4KumT58g6eGjxs2oZD6z5ty0L
 viU5tx3lz3o0c3I9soH2RN2zNHVjXNW0EvWJwFLxFeLJbk/Y3UY1/kXCtcyMzLua
 S5L5012eUOEvaZr5iYDKjy+wOxY4SUCNYf0GPmSej8CBbwHOF2XCwXytSzm6hNb3
 5TRgCGbOSFTIy9MxfV5lpddQcdzijmuFSl8LySkL2yuJxjlI7uKNDN+NlfODIPMg
 rdH0hBSyKci6Uz7Nz/Up3qdE+aISq68k+Hk1fiKJG1UcBRJidheds29FCzj3hoyZ
 VDmf6OL60hL0YI1/4GjIkJyetlPzjMp8J7K3GweOUkfHcFihYZlbiMe7z+oIWEc7
 0fNScrAGF/+JN3L6mjXKB6Pv+ER5ztzpfuhBJ/j7AV5BaNMmDXAVO4aTphWl7Dje
 iecENuGTpkK8Ugv5cMJc4QJaWDkj/9sACc0EFgigPo68KjegvKg5R8jUPwb8E7T6
 lIjBtlclVhaUrE2uLx/yTz2Apbm+GAmD8M0dQ7IYsOFlZNBW9zjgLLCtWDW+p1A=
 =5gJ7
 -----END PGP PUBLIC KEY BLOCK-----

  D.1.3. Core Team Secretary <core-secretary@FreeBSD.org>

 pub   rsa4096/36A7C05FE1ECF9BB 2014-07-09 [SC] [expires: 2018-07-08]
       Key fingerprint = C07B F5E3 10AE 64BF 6120  B0F6 36A7 C05F E1EC F9BB
 uid                            FreeBSD Core Team Secretary <core-secretary@freebsd.org>
 uid                            Core Secretary <core-secretary@freebsd.org>
 sub   rsa4096/7B5150C8D7CE5D02 2014-07-09 [E] [expires: 2018-07-08]


 -----BEGIN PGP PUBLIC KEY BLOCK-----

 mQINBFO9HvEBEADRfuWeoNUwib7ZjNmhg0Kt1kjiGEEosf3O2yMDfYuAXt4De6qK
 S4KECe5+vZH2T8g+zmNLl/7JxdqHiWj9cnoZ6T3bqKh7w7pW7QzC/Q2k4mZsQkGl
 xzhStHvaHSPKw5808TME0d3ewAfs0dQkDuA0eari0HipCbOVzqHUMTIROr/syPXs
 jHxb2bj0KVzzq7wgy+vF4Cv25VzaAPBVgPv3HAoO/gLOr4SnXqBCw2vgprWx335t
 QX1JslWlsUDmwwq40q4+eMnSFPZ0ing1DgfhMb+Dnrl6Rbxhb0pwPhbwubppUKfe
 W6owOrTuUbATVoAhsfNySmUWQKc2p9w/8uFV/jJj9HOSgIMKrNONvqekPrjWOQn9
 /lcQtGhldWmtPbMogOfaQisBEn1XjMZ3VEOagQxIe/6LDjU7GGoYvSdwf8Z0wXUY
 /qDntPwudjJA4wQid1Tzf53gpUjr0tYq7aclpiBGs3F5EOs4HMXq5/xlwRGtBDHY
 i9RNAlbRSfSD2s1nGsfsImPowlpjtLa+3PqYs/cRLGDu51DsgV/p/CqtAyebG+9O
 WsF0Ydt4Q62jEuU8HY7SOj+AuKJVdUkyAZGk5vkPvsKzjdZUqRslurme7d3LqKai
 FjBGj8UyId/IomDCjth3baGc/Y4e+JKyx1XDXgFY2HoQ2KzEoANrizjy5QARAQAB
 tDhGcmVlQlNEIENvcmUgVGVhbSBTZWNyZXRhcnkgPGNvcmUtc2VjcmV0YXJ5QGZy
 ZWVic2Qub3JnPokCVAQTAQoAPgIbAwULCQgHAwUVCgkICwUWAwIBAAIeAQIXgBYh
 BMB79eMQrmS/YSCw9janwF/h7Pm7BQJZYPzzBQkHhRGCAAoJEDanwF/h7Pm7cMcP
 /jMsEmlRAdWd8rTUxYD2112aOpI8xqphqEiUh/U1xC0mqdMfEt0INe4QvXs4mk6O
 WcbNdTokVHKyHyNqHibpQ+TwOAuh0mW3vUmVrxvT2ueoPnJthfoXUiWGkB3gMlnO
 l76bcMBlSGAxvWa6f6pjflrfEb3k4Q+3hnV0xO2nL5sfukya2cFXnGJ2/AG3LgDW
 doXIFjTA+15tJkFz4hM+7CSKxlzco/SSVAHoICfTF8AiYz7YOGLi3sAhwyKVFe6r
 cDSZGTP39PAgOhG4y9xv2Jjq7fQq1E5Ylcs1XBmKsgcbCgi4ZHoaBd8n/3uq26RI
 Aqno4Bo1nFY2oUHMRE7zFlG/R7WBLPISEwJ3d15QV1twsjfPOAMCjEvS5csF7T0T
 ARrBSGZYxXpwXKr7gnRXqEOyzEgivgs/cFLd47uOwB3Ul4/eOKH6yDFFcPKaa9u3
 S8cVX2bllSU/hktwLWCDnpE3KimZSOGIYhLvYWvQxMR4Uc3Da37Xq1HL9DoU+VdQ
 MuCYqRCKjWMuVwL+1so7zbyS/ns95VHUMXquaAdk2z3uHh7fCxUc3yd1T5aaWwFP
 mWxun8OkeU2hJ/z4kfTY0gNLvEGGRVXkYJqt1P7eM4rCYt2SPydTlhvU/ko4VzZh
 eD8tZA1PG7eTnFCiwuYWmz5b3hn6W2g3CF8NepTOMcxGiQEcBBABAgAGBQJTvTXF
 AAoJEE1Y/c0spJd2Y4YIAMTJLPPhDrAqzH+AuIDKFg1sQluK/UyKvGGMhgY/0yo2
 nHEjX5DeS6PTUroQsgy4CF6GhA6BTgCywlDG7urvz6HPY7uz5XRLKX6m8Q6XbNQK
 ACY5h+V74FDvlkQSIg0G6HpI5cFUuF82n3QVnnkpRJbgR7KhP4DidEYdGAJMR9nl
 YeLeUaVotB1n2+It80oD8PGstbDD6OhM8gSFzd5TWaAOtyZ/Gj8v3kSZPJRrkG0T
 Ra4vBARpjwcnd4GAD1jXfS5u7PNjiMaXhII150zN4iugfDYGiB3dX4TloW0Z3yBl
 SNdevyszrJc+m20/YdzwGJ7ZhcjY19+rBWqkvR3Gje6JAhwEEAECAAYFAlO9NhEA
 CgkQwBMwnW1+RFxwzg/9FuDRbqXgo8VS/IpxQTqh1HChcTFEYd0b2pbxV/rG1bl5
 dRf8BmgKdcN/fJZa23GDM3V7yI1GHRph+41IVO4dwe63/HDoZnXKoBJu4OYZZDq5
 NvTIdhBzBDmKhpFplmjlymdKzSplSmetLN1TPJWaUqwP7W63T9nzIzxYZHKGmVZf
 R19cqdRTEkbKHgZBzZ1CifW+uyK4NMPaGvcRW56zuV7hZT5yx6BlMY+A+OFNIfpk
 0V0Ozhjko+K6eNfH5fpq88o9IkKcL1iU8yQjRFyiRUslb4rf7hCdupTybYyllZVp
 o6jmz08LHUjbTwQdDvsDsQAVg0Ws9ma1JXlfcGFTatg2hG7R+mw2okLfg6Lsl1l2
 mU+g7sUdEAIDJAnK/wpQbxVXMruboq386SrssFzxG68tClQdK/VnX19C8WBN6Azk
 9ymnf9+6X8dAghztdESUznt763yRuyhGk6Voprc6SXcqKxd2SxYHgW7pd1UCtj+M
 ghAazp0KlhqOFFlyOSMdQA+9j86oPaYFLCPRjA/RGgxW8Ucw/VyAHeCNoHfsD4Ml
 6IoRdNbMZ7V8oLVPEJw5RmytypedTLLbeUpX0JcLvNrd4Hbd08h9bMmcP0GxWBix
 6ZFUnHyvdK9AgvnOMpUNEC5Xcz8dsK1I6A7rwwTELRMUSX/ws8gxbyhUJjj6KqWJ
 AhwEEAEKAAYFAlO9LQIACgkQA29snufznr8ZNA/+MBCWq4N5zvwfJLPrOw2nb6Zj
 WazUhnnkeKkhHmZR9cnt9MQ9RwxPnpCVwve03eJilik620VRFxdctWgQnvLS+QW7
 EQ5sMysKb9zqkNa4aMJQCmQ/IXQRMhJ9eXImqEYrBSqVgL/pppmXk5xubGDqPQRd
 b9+lq1/vQDr8u8nblXGRN5CzaIr0vvG13uVC4+rjKMqP3gubpKt+X9adagc66ZTH
 Pr7O8/DaXO2BT9jkYUf5lYNK2BS5D1XT1d7hZK5G/2dklbtNgSBVhHiaIxARGxTX
 84h1GkPGe2XbZGfTiEtWdFrsuuMY4DkVlXE5UXuAMGSlQvAybBbPRpPYJ7D5ny4D
 OOqXCmmnOOOcPblEMyi8XQgSiz8TFfyRwUazIIcmoXr8J6bLgTpPpXbAjaoxWngJ
 1QJr92LU22dSXaK7qXhWuuSco0KJ+5dScFg+uz+zdMa59YMSfvbhlHh8BgLwxdyE
 a+RAiEigFvdjXy2Ljacr+q3v27egPhcWkgPhPD+2fiOBpeZd+3M8/vXImIqYrrMH
 g7sXnLTpRJ4dd/1il7lG+vL+mc28Bo5FvMLp2r4QDfX1saqoBVtLSrZqQDhxc5jT
 sOVhj3xnSjs3PoOWakbdwkRFR4/7oszSbB832nZE6mLpvpEE2suLUoBh9EtxAIhx
 rBMuGGeDP58XSMmpJrCJAhwEEAEKAAYFAlO9R1IACgkQ7Wfs1l3PaudfGw/9HxYe
 S7WfGMQup0z0zvYksPxQGVoAjAtK0PKGdO8trQY7p43SvZ4nX60byYoH49ko6823
 x5lxI7+SNS9MgEgu3t8C03UGGxamNDOf625VazgZWg9Cywzg3T0BhTPHyeLhvIAN
 jqf2XjOh/Yew+yNe+7D9vNhdy0pNDGCAPeezC0sZjerq6dh7AgKHJobwNK2KEUtx
 ciFdvBzoQ6p083dVbA0icb/rTZRM7Yt5egQz61NpeQTnU/mi0AJUffsBbRWqqHUb
 GSViUxgusoqf9ggFG8tVLkb73mIqzeAwmGdp4U0Paz12Y5NfIrJ9NR9+v9dMv89U
 lIJt2rCK5dlCnwnvsy1jImfXbrYfySjn06U+2q+kE27LByjT8XwE4W9JPDmxLwKZ
 TQQe/K6cpqh9LebEIV3YHQPNfz34ChhljsIpTw5i39WqGx+wvQL4Mvj5exyEE5Sh
 ODoeuobgXr36B6uQrg+zb3zi855Nd7ciqVg38Gf3ab2sbL08qSmobkLrDlfnwGC9
 95ZMCQzhffatkco6bJhIJ1ElDDswZJHbg5pYo+aAq8xofwxBonH2hJoCAXXLXz3b
 7KRUj2e0JXDLCSbE2DWV8y5UUzhWH2P4Ls6eCdtBuFi1sUb3TP3N+gyWff3PwpPb
 IM/gDseSXDTGaZPq3wp24YPa1+Zpbj6jP1q21PKJAhwEEAEKAAYFAlO9R2QACgkQ
 kshDRW2mpm4s1A/9FrNdO2TWaLGYt+6etJyCH/Ua1vpc9UNM/lIZv/wdV1jVr50M
 EKVQgAVsQBQEhwE7j81WVb26fggfKuLF0P+KMT8Kv8EwudIVTkSYcqfzI5zcG/p5
 NNFsnwRiu7QKPkx1IgCirwkoXwtvFtqEEXD1lIilEQ8aXGcojdMS4clCt5JlHTv8
 Y+TnSy5MrYJfHMSyThVl6xJOfC3/Wb6Gt23I2R7f7DLxHRSx74oqCZPOlD2mFzzC
 re6EcXMsnkdsTbVVEeAV3n6ixm5IO4ePDmj/NTmjQGr0MNjdNZc8P2WCopDY+Afk
 Mbqh32COmMl29elelyTTwckO7ZX67szNbmWye2EOxbf1hUtEPhnBklBrD7TAG4YM
 PFX7zHh9iFgmdcPxm1QcJDnoWVwzLMubTRZEs3EFImNG8fXaB6DnErclZnxXoJ75
 eG8gB24ORqO5QpCha9MzNhq+KpCF9XXNc023mvEM1P6MyLCcC0N4JNk8x8a/M4/D
 2xgHPlFRriWJU+saIRb+ycCFwwH0kMqMwCwoe8nAi8H1CtEL2zPokiASq/6OWx2S
 yURVTYAAuVwndC5eVbSP1nbqrSw0a3zkVWqFzgM7Je1mEpHlG7wvJzezBhGLah+7
 1GjJyrcvSzBwygac6KRFuPY+65F1CJSjMnuZPomY0XzKeXH/X67OeJWd4SWJAhwE
 EgEIAAYFAlQYNz4ACgkQ6rA8WL/cR48SlQ/+LansEu3Ku6MWbCvrDGu7wbYcFbJI
 V5FntgLmIfVkiIY8+Lue6KdYS/oVpbp1bx/OvCYnLSJSmy0ozwJR1HXQ9nrpSfoD
 3J+P0y5hJYENDDOR3fBInb4c8t5pOxyFvnjkJicgkFpQBbJ+5/Kh4Hb67cM1B3ig
 e/lx4jvzUPonSH0xTPVs2BXbDemu5sP2jzJxpS9eoesAOoNmJQDXNuWbX0CZskgl
 uB5RpcPyLCTKTaFEdJxV71ovN3YnhNc8hC30OP9WdbdMu9O0w8SWzVIz6lD3FgXc
 gHPkFZusy6TejeamwiKOz69+Ml2/vtBR7JPRSvR8nnFrvNbEKzkAykIUN0sZFbWP
 MViKkkEGENWTKUiOmvd6gghT9HFULp/l1NpbwZ5qymWXIlPwEp7nhH27+5/tA+Ai
 S5d0h1pniptt+0vG/IEmToDaBIz+wtip6ij7NHEqL6Uxn9nDwxRn8437ITVxxAkC
 TUYOoCFSzl/vMI9TrEEsV5eHP13psU8EZZnd3LuZloeAAsMapJ3bjSEiiSfDOodp
 ZkrmVZObMhVRRA9XVWfryy1xpWy5oV22cYe/8ky8CPUX1mUMNHBo/HQBNNdBsEjo
 mW8NDy7a1MohgSzC17P96eSNfV0AsWW1XkU1qu0hYaIdZjGQZVGWH9C0BvQ2wFTj
 /m5mRalbMbQa06eJAj0EEwEKACcFAlO9LMcCGwMFCQHhM4AFCwkIBwMFFQoJCAsF
 FgMCAQACHgECF4AACgkQNqfAX+Hs+btkeA/+KO0G/4Rc91xUYgS7XLK/r+QktX2I
 JFTdl6eNHTk7bfl6Nue/taEA7EujHDV0+10gBTk6xVvlyA/BgZ2OvmaUWM6J7TAi
 Xduahh8xgbNmhQP0Tn4Xb6TpIZ4MbGBvPfiDlI0ukkTahvOSK6OniO2S4vLM5xIW
 XZR9YxFh4iYRLmzr3HnVktc0h6TmcDSKckFeXdjt/xIQDiUVoMvFZnoHkCxoNM6n
 S6/TCn4PPzsDUJcrI67AOTEZ2TGQJupBDt/Nc2IPPkcHvh7bKcy/9XLuDO5OWgcN
 JmvJ0oYF06n4F/qcFtswQS/HONqeQ9yYeDnuykNShL8rGSRljuWY0faeCi7uPV9m
 JfXLg9yIuvjc/f3FJRBmjJuCPDd46UjR/hgo+5NVmvSljIdmcZlTuQDC/IeIPgO2
 k6jWrCqRuFy16XGd/LDsNv4ehtpMJ6wnpdVYgntGeKcXlveW8URKrOqZJMpu1s+L
 MheTJG2tLsBYVoOcwQDQbXl3zkv1lN3yxFnh172bvbeOL8rz/OKqmXzcwYc/abg1
 YpDwGOLomSuAUw5GGWa92DSiCMBEP643CUgymShienbBygUotKBsRWaQhPmDB/2a
 qoU0B4F2zCli4Ce8cUWCUv2qb4J03dQ3O83OSeyE+1wnTC9PkI/Hg+PA8MjLvrgA
 Kv9OPIsobv0fET+0K0NvcmUgU2VjcmV0YXJ5IDxjb3JlLXNlY3JldGFyeUBmcmVl
 YnNkLm9yZz6JAhwEEAEKAAYFAlO9H0EACgkQA29snufznr9AYBAA1/tCfcC9MHUK
 j2gK0qhtu0vE7H8UXDr+Od+6snFDZjXw33NM0nUoLMjylhtqeJxZAWpR8LXC7oWu
 dKU0ZC9bjrg2pwRESVsUTjWm+pf5Nvr905fTuYwFlgrzCAsNwcSOXiLs0e6vHUAo
 Dauj/m61G98iqaE/FwfCE2I/Ud7gwPU2CTKvGZFa07hUz32aFd2b6mX/xfC4Umt2
 Di/fqkTCzq1gmA/ANzzr9euZ4lPoY4JEVER3BefqixK+9VifHg/K2j/FMbkWbixr
 tLhvGC+9LOnb8v547gmk4Ze6GIgaF8TAhK1rXJ/XgYpNrhrRB36Cq6aXjJ3UMHJs
 2hrTNzP+wk4FQt78IsrNKzki4aR90fSizVYSN2pDsk9y3diLNvsjD+PVh+8Oacz6
 23cQxTUMnW21j35cHqlm+2NIc0CloM99J6LOy2mguV7eS8QIEnIQivm7+EvvZ1gR
 m0WJgWUdy9YiroqpYmUgms5ru8buvnzqqy2IbbvS0J5pU59lPmCso1wN/i9gSjEv
 7Y0pwdUDSuiBFY8zBJZltYQBoiKUr/oBXNzzGZ59kkQcfEfs+mtw+wfcw+k7CZaN
 +F4cEp8h8S7VSpYAP5xFCYT6MTPW9zoPNVR8DhzbuP38ZdP381CwFNqYLqtPdhRk
 paUW6UILedxHB/1lMZKyJPmoK5XUQKeJAlQEEwEKAD4CGwMFCwkIBwMFFQoJCAsF
 FgMCAQACHgECF4AWIQTAe/XjEK5kv2EgsPY2p8Bf4ez5uwUCWWD88wUJB4URggAK
 CRA2p8Bf4ez5uwziEACfqvM+99JXOoqnx2NzZ+BMfTgNBjYPwwobtCiqVOlkdHum
 xWO7/BW+Wjfufjxv7ZX4gfdf3lD9zOBv+Ev7zyh68N+O8v+aoOpGaXXlQ1ORhYBY
 xtCdhB8TVioGh4ztsPQ+8yV4pIGiBfMMqpPS7mGoZGNcNwRDyu+XM3a4qAyyOLR7
 KctM00WVSfL1UAettQQl/PLPs2+niQWET/7mm8rlAxtnCJSps+c/s9aWSms9mniO
 hns6g0yv06G1xHS9gziVCl8JeglYH+KYlrHl6q0KkoJ1O0S7NFQO2j3usX238bb5
 6h2S6q5l32u7fglp0ufH6vRQIqRbchq7ExfD2QdpW5ra1fdqdhJ/5bFBBNP2Joz3
 O3k/WIwcvAt5OxX2R2ltvqar2rUhEn1/PngjAvW288nwNOuhuyLja9PI+XqRFAkI
 VnEDnZogfs3tP1g25S7Kltnj1PLE+utyKHksCeLR0g6PhExESwKCp9iII8eoHcxX
 vZum4J8pkSYvrQhvbf7Ecy1GlZ6RNSOMw1SE+Aq0QPi40g6wRS4WpnckmxyGcxbN
 c/2MUH49owyCo5Zkf69gu2sDpXLJ1V4teeGxPB6VAR9fiNrOXtRA7ACbxqlsz1Qr
 KcxLHDUwCpHOirn1E5aMSJOyMxNfCVYRsiHO5nDyGHehsEXWi0uf0Wvkvk3u4YkC
 HAQQAQoABgUCU71HUgAKCRDtZ+zWXc9q51QnD/984eMuzKy51ed+qwdLQzjPpbD9
 1GA5nJVmZkxDWfq9BEjOGCcw4yjupbV4YfjHWKg3XWN76i57CkzWLjIyoruo3dBE
 8uE4cx8VYXMq4JdclscmkrHYuYDDp8DVQpR3zg+YGjhdI3USZy0yzLngBDN38jc0
 lIwThyaZPkXCFd6/7vC7zxVdqsC1mvd+72MHy0SfY2kLq+TJxFTlgc+wgdINRdOi
 QHC79ehcloiwjgcV2SXfe+JSlx3dshDJEpRdzn9al+RSOhStx0FPnOniXK1nOePv
 s74Fh2UzN0sGPYOa5ee1s/VaYtdxL+gKyCCBEPT9VYsCuM8lu/KxaDNPY7qh5DeL
 lAlrpNH+e1whZKwwP5+mAknwMUmF3NSPjCqQJv+sgWIgTacktyc+RxjtktEBrD7A
 XFBxhJjupP2em6CS8GggBsdnUkPOEeA0HhQHdzYwT2m9sUzZYrXDovsZ4nQiWaA1
 kKseXUi8C3jkbMNuYpDlq6FEtYan7Wthw556LuM7sqaaL9EPudCRhSSK4pfLL6FJ
 i37kpN11K5cTx4C+e1qeSvDTiFOLvw0rV+FGkbh0PlLvRlfnOq69xeOvjKKKlyEg
 MOXJv5AzMLjn0OBjqPCfwA1Hy0GumvyZ1hYN4W/64Lf5RycY2ZYjmcvBtPB8gXXT
 XygkwWrqhMj2Fkx84IkCHAQQAQoABgUCU71HZAAKCRCSyENFbaambv4NEADFxKvL
 Da2hDW98zvMIrHRNFGVzhrkHblw0q8KXtui/Zgkf7rI3lnhqmxvW+pj/nwMF8Zvw
 aL3ZBd21oLqNRgs87RB8vmkweL6MSOpRJ8gygfBht5pZFYzQGw41Yv4wmX3uk2ye
 sQ4V++t93nrNQJ/Lb4szB0a/s/M0N8ReDDY5cS82sDxO/wLObh2k+kNzYRkxshta
 BrFZTvKWKfe6dhP3eOJuiJWOVxMztgNnyKvtDeHXMvKJk1/D+HlGRZVHs0W22bTT
 /AL++4RElzu/YKZkIq/Xwuf6jAYCTft4gfTvlXAdEni5tE71FrUhVC6hHQ5CgKyz
 oGX9BzZ7Lu/629bUfc6kmDfILBdzLxdETR1HW8hIdfPS2U5mqcEsXGqFGD3KDgX8
 KNDKjLhLsgpDFkg+dwb7Gkm3LNjlimAKfqJbjNE65y7qd+zthvxG8ZjER2VVcrl+
 tKSEA1zuA4y6PbamzOjlDQhvtbShF+wbPRiM1C9psWdO9qhPMdQPnonUs8uU8dpx
 Owzrq84orr/BtyTxQ7S5FFbT8fYKssht8Jn04ZDApdY57rWA43raXgvC3COUvZhR
 PAVwZGu6hBGNfRiP9SyXHzCPJTJ9ejiE2L+P3MKljzG40jIOiaVgQhXbMUZiFooI
 CqHbei357hHIgoXo5PHsE3+v+O8+2lYXQZGGjokCHAQSAQgABgUCVBg3PgAKCRDq
 sDxYv9xHjwjNEACha5LdMFvmpvzvGcyHo0gmPobVopRgCGukRJOYL9NJNnSjwln+
 azTwF3kEQF+KiLZnd+Yc+3MxJZthFW68pQw/hfbjfMG5AjC3SHvPHGln6I9dpSQA
 gHdDYgUsCT4K2o7xEfdn69e9yN9XCk+ocFz+m4I1NyeByAnNYe4eY+4Pv2Enh1Gn
 D0omODLlwEGqOntgbRSO+yzsBbyBRXQhDHWQ8KB/u5SBfSPiq5u6IzBeX2rmkiuH
 t5C9NvULoCBWJYG+x3gxi5aJwUp+NGFz3p2nwIp9JTRljFlb90ije7cHjZChITFa
 FUXq6KY2KUYPpISmjLpsCfW3RpGD/I6uw8Ail8vydq3wlM7MlV+Rmu5Hk/GbZ8uE
 TumKhbU68q2okj68Q2UNBrepHNZt7vuL4fd6iZPn6FA0Ui1n1o5l/WkX/u/uM3bG
 ATq6bd7Wm+hal61uyHCPqfDwsgVuHP1h5FN2Fq3hG2ttQVxojA6MX4UPTsr0h7eh
 vJIDvfpPLEWP+/KBmMUeAGorfP2OeA5h5MmSknsLvekqNPkw5nG5HmrWrQ4a2rG4
 30C1sfN+t7Z0L5oVqcP26Vhpg0Ay1Ux5/TnF5XJBlNX4lDO+9tYOLNlHYo0zKcmF
 n7C02sTrox8sZMJAQbRldwwmrORKdijzH0joH92FbT0B/SGqLSUsPwOhXYkCPQQT
 AQoAJwUCU70e8QIbAwUJAeEzgAULCQgHAwUVCgkICwUWAwIBAAIeAQIXgAAKCRA2
 p8Bf4ez5u0LzEAChN6TN3uy6wx+vsbHWn8W/0cZ1cFCOhWqDd3SGUYyCIew8nels
 qQ+N/n+HOAHiF/m+/EbgrrvqGTDJB5OP2ODyEb+o8NcLhmuu4h6KRV8vSj2IxEDr
 S6bWVAKK6gutgs6FSccG6SD8NQJCgWoOxRSrYspkCm8UgJBJAjk2uuERfhRQyc1K
 m0UDyTDISkd+ZSf1t03zUEFYhf58nQ3TZkmPoGAD1PJKoceCuyvWpfQ1MFWvz3S9
 JeePQSzh85hXBLcOBUDhjGLeBpJmufujiDCTrqDPwAwFM+6nXFmGHbBZeNh8wu97
 uzBi3HxpBJXGSpB/LJ9s7irE07Uyg+a4S3yIrtd9ryu76qDjXSS3e1NV9gcIn/7m
 9cHu8eHhqJ2Y4SmoxDaQ96P9WNO9oC8vK5Wda+vyfhkPUxMFATVfDTTnwz79KcUz
 +jghTxxBQOLaBtK0QZuziMZkFxVpn8TE9zZ8Aajwrn1pTpttCYWlP6XnzwqhyVXP
 AKfpOv23Ld4jbgINW7oIBVQ1oPPbgahfb33RC4ggxd50WJuG0OktXFsb57uWqvTG
 XbeA3NVp00jX2Pf84yiVpht5or9Q9XqN30slSTWFX1c0NtyjDj8Ef43a+OxpXvP+
 TjN/Mz4Wfrwvlw//y6tP3PIjDt/QeKcENAW/BQIZP+lINHGG2qfpT1pGPrkCDQRT
 vR7xARAAsp25exIHESBlj+zuodTupq2FzWdiaSQYGKLKos3Qx8q7tp0EqzX4IsAD
 NX3gdjSyQtHKEM0TtbAytiT++9Pnit2YW1kj+QVjdraEhVRBpVaRliwRqHn2nmZ2
 QNtiA86TiIyIu4gvdiQbE1xErAaFfIhta8pUNeaXBNNyEBLrg7va+x/ESd70319X
 PmvgfDFB5+epJ90JHRtm5VdP94Ixaqmr2XjsWaQJsp/Z/VXN8ggj5GoLTUMJXjcm
 Tkji441aQY53BOnQE3Szo/OaYXzlOnjv9GzFwIE6+5mONRCKmKnT0GK2Pd8khoAb
 wZMjWh+QJQzWWcCeHXbQzBaD/J1IQaEa3+QKWMh3BJkl2oS31t2tqqz5v8OVSxBi
 7ed/+hmbxHraT/k7QSwMV+l2gtklwDq830mRDXWLfxMOhf3UwmettptHluuYlcEo
 tbDWQ9oTRT7P9dmtrXpuwwFqg9m4vAZbSkWzvvE+wQEcCJeYVxqufmJzvg4EyH+E
 mJErfGoj2MAwBd2EpM6YlJmaAUkbekm/bGd8yMaX567SxZknro84p8glTcxXZ/hy
 sWbyPTHN07/y6j67lblh7dQI/nsoB+W0WcOD07DDV9RcTPyvIUWPdQOhcqdxgpG+
 Uc6nRBrkjjQbHmmYqwtHfhGGeLJstY8nac8E9TvFY2OMIuQXYMEAEQEAAYkCPAQY
 AQoAJgIbDBYhBMB79eMQrmS/YSCw9janwF/h7Pm7BQJZYP0lBQkHhRG0AAoJEDan
 wF/h7Pm76ngP/0s33IzGYS/8kylJquBiIdURLj4r7DMNbHWmlc2i7KLYmkHIMtlr
 jstme0Hhh4F9SlVue+pyTf9+TeO5DfqY0xHk0Cevu/JQY40/BWTbrG7fNAF5cOpL
 RfijilDRqS9I6+FATt7qsONi3ZTwKkxYoPPRJR5v0XF7P1gapaOPJ3tXY/6kbChr
 RgHvk4QAfskp/BNYCfaCZjYtdhuMvsBxMONQUoZkiJ6g4R16WdajTr2z7zmtjF1K
 XGQMM/t9NYbgraeW+N6aw1GOAyZhPw6Y/sSsEXVcE+rwTFyHkw45j1BYDYb4Vm5m
 zHLwS0MZohJLhmAXrIJW5irHyW/I7seVcU1l7KtSP64JoMnmIRfhQZnCQBafLWGt
 NWRcP+kbAIwNpod2Lw0+JKAOl9sa7XZohwWZvvIVoIj+qdyBuz2+IsL4341p7ikq
 4t3Mr6C60MBzqi5Cx4mQikyxAsMPZ7hEtX1Y88+sqYGRcFPtlZfYFaUKTKmw+vZe
 WJgx3WxGJeRpWMeaz3rnWL/JRK0spqGEboWAPQzz2TLy2pOM/RaEnMWykLa8Mvbx
 w3U+Uo+bLIVd6lf4PtsTbU3NmDebPM8r0yBf7kMY4HtHjDlqvcrcMTF82R2zLZDr
 fF+R3IdOYqfk6hdiQBLK7Xgu/g0sH5IFtx+sUAr+1zksT+ODXkZB1wul
 =+zKf
 -----END PGP PUBLIC KEY BLOCK-----

  D.1.4. Ports Management Team Secretary <portmgr-secretary@FreeBSD.org>

 pub   rsa2048/D8294EC3BBC4D7D5 2012-07-24 [SC]
       Key fingerprint = FB37 45C8 6F15 E8ED AC81  32FC D829 4EC3 BBC4 D7D5
 uid                            FreeBSD Ports Management Team Secretary <portmgr-secretary@FreeBSD.org>
 sub   rsa2048/5CC117965F65CFE7 2012-07-24 [E]


 -----BEGIN PGP PUBLIC KEY BLOCK-----

 mQENBFAOzqYBCACYd+KGv0/DduIRpSEKWZG2yfDILStzWfdaQMD+8zdWihB0x7dd
 JDBUpV0o0Ixzt9mvu5CHybx+9lOHeFRhZshFXc+bIJOPyi+JrSs100o7Lo6jg6+c
 Si2vME0ixG4x9YjCi8DisXIGJ1kZiDXhmVWwCvL+vLInpeXrtJnK8yFkmszCOr4Y
 Q3GXuvdU0BF2tL/Wo/eCbSf+3U9syopVS2L2wKcP76bbYU0ioO35Y503rJEK6R5G
 TchwYvYjSXuhv4ec7N1/j3thrMC9GNpoqjVninTynOk2kn+YZuMpO3c6b/pfoNcq
 MxoizGlTu8VT4OO/SF1y52OkKjpAsENbFaNTABEBAAG0R0ZyZWVCU0QgUG9ydHMg
 TWFuYWdlbWVudCBUZWFtIFNlY3JldGFyeSA8cG9ydG1nci1zZWNyZXRhcnlARnJl
 ZUJTRC5vcmc+iQE4BBMBAgAiBQJQDs6mAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIe
 AQIXgAAKCRDYKU7Du8TX1QW2B/0coHe8utbTfGKpeM4BY9IyC+PFgkE58Hq50o8d
 shoB9gfommcUaK9PNwJPxTEJNlwiKPZy+VoKs/+dO8gahovchbRdSyP1ejn3CFy+
 H8pol0hDDU4n7Ldc50q54GLuZijdcJZqlgOloZqWOYtXFklKPZjdUvYN8KHAntgf
 u361rwM4DZ40HngYY9fdGc4SbXurGA5m+vLAURLzPv+QRQqHfaI1DZF6gzMgY49x
 qS1JBF4kPoicpgvs3o6CuX8MD9ewGFSAMM3EdzV6ZdC8pnpXC8+8Q+p6FjNqmtjk
 GpW39Zq/p8SJVg1RortCH6qWLe7dW7TaFYov7gF1V/DYwDN5iEYEEBECAAYFAlN2
 WksACgkQtzkaJjSHbFtuMwCg0MXdQTcGMMOma7LC3L5b4MEoZ+wAn0WyUHpHwHnn
 pn2oYDlfAbwTloWIiQEcBBABAgAGBQJQDuVrAAoJENk3EJekc8mQ3KwIAImNDMXA
 F8ajPwCZFpM6KDi3F/jpwyBPISGY1oWuYPEi1zN94k5jS90aZb3W8Y8x4JTh35Ew
 b6XODi3uGLSLCmnlqu2a80yPfXf5IuWmIQdFNQxvosj9UHrg+icZGFmm+f0hPJxM
 TsZREv3AvivQfnb/N3xIICxW4SjKSYXQcq4hr4ObhUx7GKnjayq+ofU2cRlujr87
 uOH0fO3xhOJG4+cX5mI1HGK38k0Csc1zqYa/66Qe5dnIZz+sNXpEPMLAHIt1a45U
 B967igJdZSDFN33bPl1QWmf3aUXU3d1VttiSyHkpm4kb9KgsDkUk1IJ5nUe9OXyd
 WtoqNW5afDa5N0aIRgQQEQIABgUCUA7lwwAKCRB59uBxdBRinNh2AJ41+zfsaQSR
 HWvSkqOXGcP/fgOduwCfUJDT+M1eXe2udmKof/9yzGYMirKJASIEEAECAAwFAlAa
 IT8FAwASdQAACgkQlxC4m8pXrXwCHAf+J7l+L7AvRpqlQcezjnjFS/zG1098qkDf
 lThHZlpVnrBMJZaXdvL6LzVgiIYVWZC5CSSazW9EWFjp9VjM7FBHdWFZNMV7GAuU
 t0jzx6gGXOWwi+/v/hs1P11RyDZN5hICHdPNmyZVupciDxe+sIEP9aEbVxcaiccq
 zM/pFzIVIMMP5tCiA42q6Mz3h0hy6hntUKptS8Uon6sje5cDVcVlKAUj1wO2cphC
 qkYlwMQfZV5J9f/hcW5ODriD3cBwK8SocA2Cq5JYF8kYDL1+pXnUutGnvAHUYt87
 RWvQdKmfXjzBcMFJ2LlPUB1+IFvwQ13V9R8j9B/EdLmSWQYT9qRA2okCHAQTAQoA
 BgUCV1XMpwAKCRCtu/hhCjeJt2CyD/9JLe+Ck23CJkeRSF8oC+4SFOUdSAmejSzn
 klPwmEClffABYd/kckO1T6um+2FUcXuJZQE1nKKUNvZ8pBWwsm1RDHsyroKi/XB1
 0a1Tdx/rvlU88ytbeLfUCLzoCrf6pkMQWoU6/3qS6elV0WwOlDufk+XjD1sja2wu
 sshG8y+1WCA5JjP3rZdD9NVdzo5DgkotTRUfuYN1LJIN4zlDgHj7FVP7wW7+R0cZ
 FoOiNsLJCA0FN8SiyU98UysjawLiIY9dTJz6XVA0DgB0TZWO3mWiDjITeKrdGcqf
 PNiJhmvUKBkn07YpTPNfkoTT/p/q5ChYmu0ubGeyS1ELKjmklJ+DzynfZLzvnXYX
 Ngo5ckeuqEqUNxM0J63v8lmfhDRROFveqHWdp0XMxXVmR5bMunSldg5EZsoLyQbN
 +ScIPnDTAEPGrCtf0t84RQxNQeET6/WBbZfzeSeAFmpBFCdicsZ6Mjwtwjr4+o15
 n1QMTZco1NaTqf8vXwzl9wM4aYtg1OkF4z8HdHuy50CHCet4mT5eJgwZUfFvXdbM
 pHXprEI0Y9OOL4aMinC1egF3dXt/0n57i6CE+E2k3UJPNvMrtp0HaDEnKZ8cfkBU
 EBzkUYi5wwqntHV2JRisqoRnHdvJT7ImlHMe7WaJsifBK874PnToaKg8P6K1Tph+
 FyLxULaYjYkCHAQSAQgABgUCVBg2zwAKCRDqsDxYv9xHj1klEADXYJdHC3zsdx7w
 DsJsttWdykcZoOd/VUKUdN0BAU72nLV0tLn4uFjETA6MhHZVxzwIDTeLB8kqyEpc
 fZnoVbqJIUJz1sJXMdOty7CwZzlZlAwmUaIfFiazJY1p398JbyYfSrVKNOpw9wCm
 Db7WP9dBritwvjaLzu8HQsiztO0S/5ha/EDfTU3qocBUTjbCtGR9LqAmPE4X8+li
 F2EfZMEoJd3rJWsYv2y/k6pSgC/MpQewnyr6f+JQ/781UoZB6PpxCxfu4D6xlOyd
 ERBUg+FfDAWYR+KX+DGOalRlUyaSz8Nvxl8/b0Im/AQhx9afqyEZxIDpg52zt8jJ
 t3wx23YP8EQGUgwF8pIrj3wFSBSG3a/cskiBNUIhChIR9hQrVPUahN/jx7DGAGxk
 /Ka9qsRGYTHfSr9jjTUQ+htfeFBRDR0nkZKMo5+Wk/cAcBKVbPlBpwvnzT3fh+wL
 cF3ErBbx5jp+BoFee8D6ATeUvQxMcgVbDPUkgMsy3EtKMVO10jhIoXoVV+Sg9GZ8
 zMEy1tORKn0zsd2ZgXC2sRJOm5ttCSdYQ4ddbM1A9jg6tiRx4hES16GDywvkL8P2
 M9+qyIfjQxjGU33f/r8zp9DyNT1VlrtwhFxtOoMdmrsbYOCTja4Xg14hK1hRac0k
 GB7bj6w97p8uMrQT3PlSMtoyrRyo7bkBDQRQDs6mAQgAzNxJYpf5PrqV8pdRXkn3
 6Fe45q671YtbZ2WrT7D0CVZ8Z+AZsxnP/tiY1SrM2MepCeA2xBAhKGsWBWo1aRk5
 mfZOksKsiXsi2XeBVhdZlCkrOMKBTVian7I1lH59ZnNIMX0Nl0tlj3L1IjeWWNvf
 ej43URV81S9EmSwpjaWboatr2A+1oJku5m7nPD9JIOckE1TzBsyhx7zIUN9w6MKr
 7gFw8DCzypwUKyYgKYToVm8QlkT/L3B0fuQHWhT6ROGk4o8SC71ia5tc1TzUzGEZ
 1AQO8bbnbmJLBDKveWHCoaeAkRzINzoD9wAn9z4pnilze59QtKC1cOqUksTvBSDh
 6wARAQABiQEfBBgBAgAJBQJQDs6mAhsMAAoJENgpTsO7xNfVOHoH/i5VyggVdwpq
 PX8YBmN5mXQziYZNQoiON8IhOsxpX4W2nXCj5m6MACV6nJDVV6wyUH8/VvDQC9nH
 arCe1oaNsHXJz0HamYt5gHJ0G1bYuBcuJp/FEjLa48XFI7nXQjJHn8rlwZMjK/PW
 j1lw2WZiekviuzTEDH8c3YStGJSa+gYe8Eyq3XJVAe2VQOhImoWgGDR3tWfgrya/
 IdEFb/jmjHSG5XUfbI0vNwqlf832BqSQKPG/Zix4MmBJgvAz4R71PH8WBmbmNFjD
 elxVyfz80+iMgEb9aL91MfeBNC2KB1pFmg91mQTsiq7ajwVLVJK8NplHAkdLmkBC
 O8MgMjzGhlE=
 =iw7d
 -----END PGP PUBLIC KEY BLOCK-----

                                FreeBSD Glossar

   Dieser Abschnitt entha:lt Begriffe und Abku:rzungen, die innerhalb des
   FreeBSD-Projekts sowie der zugeho:rigen Dokumentation verwendet werden.

  A

   ACL

           Siehe Access Control List.

   ACPI

           Siehe Advanced Configuration and Power Interface.

   AMD

           Siehe Automatic Mount Daemon.

   AML

           Siehe ACPI Machine Language.

   API

           Siehe Application Programming Interface.

   APIC

           Siehe Advanced Programmable Interrupt Controller.

   APM

           Siehe Advanced Power Management.

   APOP

           Siehe Authenticated Post Office Protocol.

   ASL

           Siehe ACPI Source Language.

   ATA

           Siehe Advanced Technology Attachment.

   ATM

           Siehe Asynchronous Transfer Mode.

   ACPI Machine Language

           Pseudocode, der von einer virtuellen Maschine innerhalb eines
           ACPI-konformen Betriebssystems ausgefu:hrt wird. Bietet eine
           Verbindungsschicht (Layer) zwischen der verwendeten Hardware und
           der dokumentierten Schnittstelle, auf die das Betriebssystem
           zugreift.

   ACPI Source Language

           Die Programmiersprache, in der die AML geschrieben ist.

   Access Control List

           Eine Liste von Zugriffsrechten, die einem Objekt, normalerweise
           eine Datei oder ein Gera:t im Netzwerk, angeha:ngt ist.

   Advanced Configuration and Power Interface

           Eine Spezifikation, die eine Abstrahierung der Schnittstelle
           darstellt, die Hardware und Betriebssystem verbindet. Dadurch
           beno:tigt das Betriebssystem keine Informationen u:ber die
           vorhandene Hardware, um diese einsetzen zu ko:nnen. ACPI ist eine
           Weiterentwicklung von APM, PNPBIOS und anderen Technologien und
           bietet Funktionen zur Kontrolle des Energieverbrauchs, zur
           Versetzung von Rechnern in den Ruhezustand, zur Aktivierung und
           Deaktivierung von Gera:ten und andere mehr.

   Application Programming Interface

           Eine Sammlung von Prozeduren, Protokollen und Werkzeugen, die das
           Zusammenspiel von verschiedenen Programmteilen festlegt. Wie, wann
           und warum arbeiten sie zusammen, welche Daten werden zwischen
           ihnen ausgetauscht und anderes mehr.

   Advanced Power Management

           Eine API, die es dem Betriebssystem ermo:glicht, zusammen mit dem
           BIOS die Stromversorgung zu verwalten. APM wurde fu:r die meisten
           Anwendungen durch die allgemeinere und leistungsfa:higere ACPI
           Spezifikation abgelo:st.

   Advanced Programmable Interrupt Controller

   Advanced Technology Attachment

   Asynchronous Transfer Mode

   Authenticated Post Office Protocol

   Automatic Mount Daemon

           Ein Daemon, der ein Dateisystem automatisch einha:ngt, wenn auf
           eine Datei oder ein Verzeichnis dieses Dateisystems zugegriffen
           wird.

  B

   BAR

           Siehe Base Address Register.

   BIND

           Siehe Berkeley Internet Name Domain.

   BIOS

           Siehe Basic Input/Output System.

   BSD

           Siehe Berkeley Software Distribution.

   Base Address Register

           Register, die den zu einem PCI-Gera:t geho:renden Adressbereich
           festlegen.

   Basic Input/Output System

           Die Bedeutung des Begriffs BIOS ha:ngt vom Kontext ab, in dem es
           verwendet wird. Einmal wird damit der ROM-Chip bezeichnet, der
           u:ber einen Basisbefehlssatz eine Schnittstelle zwischen Hard- und
           Software schafft. Aber auch die Routinen, die in diesen Chip
           implementiert wurden, und die dabei helfen, Ihr System zu starten,
           werden als BIOS bezeichnet. Und nicht zuletzt wird manchmal die
           Bildschirmmaske, u:ber die der Bootprozess konfiguriert werden
           kann, ebenfalls als BIOS bezeichnet. Der Begriff BIOS ist zwar
           PC-spezifisch, andere Systeme verfu:gen aber u:ber a:hnliche
           Systeme.

   Berkeley Internet Name Domain

           Eine Implementierung des DNS-Protokolls.

   Berkeley Software Distribution

           Diesen Namen gab die Computer Systems Research Group (CSRG) der
           The University of California at Berkeley den Verbesserungen und
           A:nderungen an AT&Ts 32V UNIX(R). FreeBSD beruht auf der Arbeit
           der CSRG.

   Bikeshed Building

           Die Beobachtung, dass viele Leute Meinungen zu unkomplizierten
           Themen a:ussern, wa:hrend gleichzeitig u:ber ein kompliziertes
           Thema gar nicht oder nur wenig diskutiert wird. Die Herkunft des
           Ausdrucks wird in den FAQ erla:utert.

  C

   CD

           Siehe Carrier Detect.

   CHAP

           Siehe Challenge Handshake Authentication Protocol.

   CLIP

           Siehe Classical IP over ATM.

   COFF

           Siehe Common Object File Format.

   CPU

           Siehe Central Processing Unit.

   CTS

           Siehe Clear To Send.

   CVS

           Siehe Concurrent Versions System.

   Carrier Detect

           Ein RS232C-Signal. Notwendig, um eine serielle Verbindung aufbauen
           zu ko:nnen.

   Central Processing Unit

           Auch als Prozessor bekannt. Dieser stellt das Gehirn eines
           Computers dar, in dem alle Berechnungen erfolgen. Es gibt
           verschiedene Prozessor-Architekturen, die u:ber verschiedene
           Befehlssa:tze verfu:gen, beispielsweise Intel-x86-, Sun SPARC-,
           PowerPC- und Alpha-Systeme.

   Challenge Handshake Authentication Protocol

           Eine Vorgehensweise, einen Benutzer anhand eines Geheimnisses zu
           authentisieren, dass zwischen Client und Server ausgetauscht wird.

   Classical IP over ATM

   Clear To Send

           Ein RS232C-Signal. Das entfernte System erha:lt durch dieses
           Signal die Erlaubnis, Daten zu senden.

           Siehe auch Request To Send.

   Common Object File Format

   Concurrent Versions System

           Ein Versionskontrollsystem, das es erlaubt, mit vielen
           verschiedenen Versionen einer Datei zu arbeiten und die an diesen
           Dateien durchgefu:hrten A:nderungen zu verfolgen. CVS ermo:glicht
           es, individuelle A:nderungen durchzufu:hren, in ein Repository
           einzubringen und auch wieder ru:ckga:ngig zu machen. Ausserdem ist
           es mo:glich, nachzuvollziehen, welche A:nderungen wann, von wem
           und warum erfolgten.

  D

   DAC

           Siehe Discretionary Access Control.

   DDB

           Siehe Debugger.

   DES

           Siehe Data Encryption Standard.

   DHCP

           Siehe Dynamic Host Configuration Protocol.

   DNS

           Siehe Domain Name System.

   DSDT

           Siehe Differentiated System Description Table.

   DSR

           Siehe Data Set Ready.

   DTR

           Siehe Data Terminal Ready.

   DVMRP

           Siehe Distance-Vector Multicast Routing Protocol.

   Discretionary Access Control

   Data Encryption Standard

           Eine Methode zur Verschlu:sselung von Informationen. Wird
           traditionellerweise zur Verschlu:sselung von UNIX(R)-Passwo:rtern
           und von crypt(3) verwendet.

   Data Set Ready

           Ein RS232C-Signal, das von einem Modem an einen Computer oder ein
           Terminal geschickt wird und die Sende- und Empfangsbereitschaft
           des Modems meldet.

           Siehe auch Data Terminal Ready.

   Data Terminal Ready

           Ein RS232C-Signal, das von einem Computer oder einem Terminal an
           das Modem geschickt wird und die Sende- und Empfangsbereitschaft
           des Computers oder des Terminals meldet.

   Debugger

           Eine interaktive, in den Kernel eingebaute Funktion, um den Status
           eines Systems zu untersuchen. Wird in der Regel nach einem
           Systemabsturz eingesetzt, um die Ursache fu:r den Absturz zu
           finden.

   Differentiated System Description Table

           Eine ACPI-Tabelle, die Informationen u:ber die Konfiguration des
           Basissystems entha:lt.

   Distance-Vector Multicast Routing Protocol

   Domain Name System

           Das System, dass Klartext-Rechnernamen (wie mail.example.net) in
           Internet-IP-Adressen (oder umgekehrt) konvertiert.

   Dynamic Host Configuration Protocol

           Ein Protokoll, das auf Anforderung dynamisch eine IP-Adresse an
           einen Rechner vergibt. Diese Adresszuweisung wird als "Lease"
           bezeichnet.

  E

   ECOFF

           Siehe Extended COFF.

   ELF

           Siehe Executable and Linking Format.

   ESP

           Siehe Encapsulated Security Payload.

   Encapsulated Security Payload

   Executable and Linking Format

   Extended COFF

  F

   FADT

           Siehe Fixed ACPI Description Table.

   FAT

           Siehe File Allocation Table.

   FAT16

           Siehe File Allocation Table (16-bit).

   FTP

           Siehe File Transfer Protocol.

   File Allocation Table

   File Allocation Table (16-bit)

   File Transfer Protocol

           Ein auf TCP aufsetzendes Protokoll, das zum Transfer von Daten
           u:ber ein TCP/IP-Netzwerk verwendet wird.

   Fixed ACPI Description Table

  G

   GUI

           Siehe Graphical User Interface.

   Giant

           Der Name fu:r einen wechselseitigen Ausschluss (mutual exclusion),
           der einen grossen Teil der Kernel-Ressourcen schu:tzt. Zu Zeiten,
           als auf einer Maschine nur ein paar Prozesse liefen und die
           Maschine nur eine Netzwerkkarte und insbesondere nur einen
           Prozessor besass, war dieser einfache Mechanismus zum Verriegeln
           (lock) einer Ressource vo:llig ausreichend. Heutzutage entstehen
           durch den wechselseitigen Ausschluss Geschwindigkeitsengpa:sse.
           Die FreeBSD-Entwickler arbeiten daran, Giant durch Locks zu
           ersetzten, die einzelne Ressourcen schu:tzen. Auf Einprozessor-
           und Mehrprozessor-Maschinen ko:nnen dadurch mehr Prozesse parallel
           ausgefu:hrt werden.

   Graphical User Interface

           Eine grafische Oberfla:che, u:ber die der Anwender mit dem System
           interagiert.

  H

   HTML

           Siehe HyperText Markup Language.

   HUP

           Siehe HangUp.

   HangUp

   HyperText Markup Language

           Die Auszeichnungssprache, mit der Internetseite erstellt werden
           ko:nnen.

  I

   I/O

           Siehe Input/Output.

   IASL

           Siehe Intel's ASL-Compiler.

   IMAP

           Siehe Internet Message Access Protocol.

   IP

           Siehe Internet Protocol.

   IPFW

           Siehe IP Firewall.

   IPP

           Siehe Internet Printing Protocol.

   IPv4

           Siehe IP Version 4.

   IPv6

           Siehe IP Version 6.

   ISP

           Siehe Internet Service Provider.

   IP Firewall

   IP Version 4

           Die IP-Protokollversion 4, die 32-Bit-Adressen einsetzt. Diese
           Version stellt derzeit noch den in der Praxis am meisten
           verwendeten Standard dar, sollt aber sukzessive durch IPv6 ersetzt
           werden.

           Siehe auch IP Version 6.

   IP Version 6

           Das neue IP-Protokoll. Es wurde entwickelt, weil der Adressraum
           von IPv4 nicht mehr ausreichend ist. IPv6 verwendet
           128-Bit-Adressen.

   Input/Output

   Intel's ASL-Compiler

           Intel's Compiler zur Konvertierung von ASL nach AML.

   Internet Message Access Protocol

           Ein Protokoll fu:r den Zugriff auf einen E-Mail-Server.
           Charakteristisch fu:r dieses Protokoll ist, dass die Nachrichten
           in der Regel auf dem Server verbleiben und nicht vom E-Mail-Client
           heruntergeladen werden.

           Siehe auch Post Office Protocol Version 3.

   Internet Printing Protocol

   Internet Protocol

           Das Standardprotokoll zur Paketu:bertragung im Internet. Wurde
           urspru:nglich vom U.S. Department of Defense entwickelt, und ist
           ein zentraler Bestandteile des TCP/IP-Stacks. Ohne das Internet
           Protocol wa:re das Internet in der heutigen Form nicht mo:glich.
           Das Internet Protocol ist im RFC 791 definiert.

   Internet Service Provider

           Ein Unternehmen, das anderen den Zugang zum Internet ermo:glicht.

  K

   KAME

           Japanisch fu:r "Schildkro:te". Der Begriff KAME wird in
           Computerkreisen fu:r das KAME Project verwendet, das an einer
           IPv6-Implementierung arbeitet.

   KDC

           Siehe Key Distribution Center.

   KLD

           Siehe Kernel ld(1).

   KSE

           Siehe Kernel Scheduler Entities.

   KVA

           Siehe Kernel Virtual Address.

   Kbps

           Siehe Kilo Bits Per Second.

   Kernel ld(1)

           Eine Methode, um den Kernel dynamisch um zusa:tzliche Funktionen
           zu erweitern, ohne das System neu zu starten.

   Kernel Scheduler Entities

           Threads, die im Kernel laufen. Na:heres entnehmen Sie der
           Home-Page des Projekts.

   Kernel Virtual Address

   Key Distribution Center

   Kilo Bits Per Second

           Masseinheit, in der die Bandbreite (also die Menge der Daten, die
           in einer bestimmten Zeit u:bertragen werden kann) angegeben wird.
           Statt Kilo ko:nnen auch Mega, Giga, Tera und weitere Pra:fixe
           verwendet werden.

  L

   LAN

           Siehe Local Area Network.

   LOR

           Siehe Lock Order Reversal.

   LPD

           Siehe Line Printer Daemon.

   Line Printer Daemon

   Local Area Network

           Ein Netzwerk, das nur in einem lokalen Bereich, wie einem Bu:ro,
           einen Unternehmen oder einem Haus, eingesetzt wird.

   Lock Order Reversal

           Der FreeBSD-Kernel benutzt eine Reihe von Ressource-Locks, um den
           Zugriff auf Ressourcen zu regeln. In FreeBSD-CURRENT-Kerneln
           (nicht in Release-Kerneln) befindet sich das Diagnose-System
           witness(4), das Verklemmungen (deadlock) zur Laufzeit erkennt.
           witness(4) ist vorsichtig: daher gibt es schon mal Falschmeldungen
           aus. Eine richtig erkannte Verklemmung bedeutet soviel wie "Wenn
           Sie Pech gehabt ha:tten, wa:re es jetzt zu einer Verklemmung
           gekommen".

           Richtig erkannte Verklemmungen (LOR) werden schnell behoben.
           Pru:fen Sie daher
           http://lists.FreeBSD.org/mailman/listinfo/freebsd-current und die
           Seite LORs Seen bevor Sie die Mailinglisten kontaktieren.

  M

   MAC

           Siehe Mandatory Access Control.

   MADT

           Siehe Multiple APIC Description Table.

   MFC

           Siehe Merge From Current.

   MFP4

           Siehe Merge From Perforce.

   MFS

           Siehe Merge From Stable.

   MIT

           Siehe Massachusetts Institute of Technology.

   MLS

           Siehe Multi-Level Security.

   MOTD

           Siehe Message Of The Day.

   MTA

           Siehe Mail Transfer Agent.

   MUA

           Siehe Mail User Agent.

   Mail Transfer Agent

           Eine Anwendung zum Transfer von E-Mails. Ein MTA war von jeher im
           BSD-Basissystem enthalten. Aktuell handelt es sich dabei um
           Sendmail. Es exisitieren aber auch zahlreiche andere MTAs,
           darunter postfix, qmail und Exim.

   Mail User Agent

           Ein Programm zur Anzeige und zum Verfassen von E-Mails.

   Mandatory Access Control

   Massachusetts Institute of Technology

   Merge From Current

           Das Einbringen von Funktionen oder Fehlerbehebungen aus dem
           -CURRENT-Zweig in einen anderen Zweig, meist -STABLE.

   Merge From Perforce

           Das Einbringen von Funktionen oder Fehlerbehebungen aus dem
           Perforce-Repository des -CURRENT-Zweigs.

           Siehe auch Perforce.

   Merge From Stable

           Normalerweise werden A:nderungen an FreeBSD zuerst im
           -CURRENT-Zweig getestet und dann in den -STABLE-Zweig u:bernommen.
           Selten kommt es vor, dass eine A:nderung zuerst im -STABLE-Zweig
           vorgenommen wird und anschliessend im -CURRENT-Zweig u:bernommen
           wird.

           Dieser Ausdruck wird auch benutzt, wenn eine Fehlerbehebung von
           -STABLE in einem der Sicherheitszweige u:bernommen wird.

           Siehe auch Merge From Current.

   Message Of The Day

           Eine Nachricht, die in der Regel beim Anmelden an einem System
           angezeigt wird. Entha:lt ha:ufig Informationen fu:r die Benutzer
           des Systems.

   Multi-Level Security

   Multiple APIC Description Table

  N

   NAT

           Siehe Network Address Translation.

   NDISulator

           Siehe Project Evil.

   NFS

           Siehe Network File System.

   NTFS

           Siehe New Technology File System.

   NTP

           Siehe Network Time Protocol.

   Network Address Translation

           Eine Technik, bei der IP-Pakete auf dem Weg durch ein Gateway
           umgeschrieben werden. Dadurch wird es mo:glich, dass sich mehrere
           Rechner hinter dem Gateway eine einzige IP-Addresse teilen.

   Network File System

   New Technology File System

           Ein von Microsoft entwickeltes Dateisystem, das in dessen "New
           Technology"-Betriebssystemen, wie Windows(R) 2000, Windows NT(R)
           und Windows(R) XP, eingesetzt wird.

   Network Time Protocol

           Ein Protokoll, um die Systemzeit u:ber ein Netzwerk zu
           synchronisieren.

  O

   OBE

           Siehe Overtaken By Events.

   ODMR

           Siehe On-Demand Mail Relay.

   OS

           Siehe Operating System.

   On-Demand Mail Relay

   Operating System

           Eine Sammlung von Programmen, Bibliotheken und Werkzeugen, die den
           Zugriff auf die Hardware eines Computers erlauben. Die Bandbreite
           aktueller Betriebssysteme reicht von einfachen Designs, die
           lediglich die Ausfu:hrung eines einzigen Programms und die Nutzung
           eines einzigen Gera:ts zur gleichen Zeit erlauben bis hin zu
           Multitasking- und Multiprozess-Systemen, die gleichzeitig Tausende
           Benutzer bedienen ko:nnen, von denen jeder wiederum Dutzende
           Programme laufen lassen kann.

   Overtaken By Events

           Zeigt an, dass eine gewu:nschte A:nderung (aus einem Fehlerbericht
           oder einer Anforderung) u:berholt ist. Die Ursache ko:nnen
           beispielsweise spa:tere A:nderungen in FreeBSD, gea:nderte
           Netzwerk-Standards oder jetzt veraltete Hardware sein.

  P

   p4

           Siehe Perforce.

   PAE

           Siehe Physical Address Extensions.

   PAM

           Siehe Pluggable Authentication Modules.

   PAP

           Siehe Password Authentication Protocol.

   PC

           Siehe Personal Computer.

   PCNSFD

           Siehe Personal Computer Network File System Daemon.

   PDF

           Siehe Portable Document Format.

   PID

           Siehe Process ID.

   POLA

           Siehe Principle Of Least Astonishment.

   POP

           Siehe Post Office Protocol.

   POP3

           Siehe Post Office Protocol Version 3.

   PPD

           Siehe PostScript Printer Description.

   PPP

           Siehe Point-to-Point Protocol.

   PPPoA

           Siehe PPP over ATM.

   PPPoE

           Siehe PPP over Ethernet.

   PPP over ATM

   PPP over Ethernet

   PR

           Siehe Problem Report.

   PXE

           Siehe Preboot eXecution Environment.

   Password Authentication Protocol

   Perforce

           Ein von Perforce Software entwickeltes Versionskontrollsystem, das
           mehr Funktionen als CVS aufweist. Obwohl es sich dabei nicht um
           Open-Source handelt, du:rfen Open-Source-Projekte wie FreeBSD die
           Software kostenlos einsetzen.

           Einige FreeBSD-Entwickler verwenden ein Perforce-Repository, um
           Quellcode zu verwalten, der selbst fu:r den -CURRENT-Zweig zu
           experimentell ist.

   Personal Computer

   Personal Computer Network File System Daemon

   Physical Address Extensions

           Eine Mo:glichkeit, um auf Systemen, die physikalisch nur u:ber
           einen 32-Bit-Adressraum verfu:gen, bis zu 64 GB RAM ansprechen zu
           ko:nnen. Ohne PAE wa:ren diese Systeme auf maximal 4 GB
           Hauptspeicher beschra:nkt.

   Pluggable Authentication Modules

   Point-to-Point Protocol

   Pointy Hat

           Ein Kopfschmuck, a:hnlich den Eselsohren, der FreeBSD-Committern
           gereicht wird, wenn sie den Bau kaputtmachen, Revisionsnummern
           verkleinern oder sonstigen Schaden im Quellbaum anrichten. Jeder
           Committer, der etwas taugt, besitzt schnell eine stattliche
           Sammlung. Der Begriff wird (meist?) scherzhaft verwendet.

   Portable Document Format

   Post Office Protocol

           Siehe auch Post Office Protocol Version 3.

   Post Office Protocol Version 3

           Ein Protokoll fu:r den Zugriff auf einen E-Mail-Server. Dadurch
           gekennzeichnet, dass neue Nachrichten vom E-Mail-Client
           heruntergeladen und nicht auf dem Server verbleiben.

           Siehe auch Internet Message Access Protocol.

   PostScript Printer Description

   Preboot eXecution Environment

   Principle Of Least Astonishment

           Prinzip der kleinsten U:berraschung

           A:nderungen an FreeBSD sollten nach Mo:glichkeit fu:r den Benutzer
           nachvollziehbar sein. Das willku:rliche Umordnen der Variablen in
           /etc/defaults/rc.conf verletzt zum Beispiel dieses Prinzip.
           Entwickler beachten das Prinzip, wenn Sie u:ber fu:r Benutzer
           sichtbare A:nderungen nachdenken.

   Problem Report

           Die Beschreibung eines Problems, das im FreeBSD-Quellcode oder in
           der Dokumentation gefunden wurde. Lesen Sie dazu auch den Artikel
           Writing FreeBSD Problem Reports.

   Process ID

           Eine eindeutige Zahl, die einem Prozess zugewiesen ist.
           Identifiziert den Prozess und erlaubt es, diesen Prozess zu
           bearbeiten.

   Project Evil

           Der Arbeitstitel des von Bill Paul geschriebenen NDISulator. Der
           Name bezieht sich darauf, dass es (philosophisch gesehen) schlimm
           ist, einen solchen Treiber u:berhaupt schreiben zu mu:ssen. Der
           NDISulator ist ein Kompatibilita:tsmodul, das es erlaubt,
           Microsoft Windows(TM) NDIS-Miniport-Netzwerktreiber mit
           FreeBSD/i386 zu benutzen. Fu:r gewo:hnlich ist dies die einzige
           Mo:glichkeit, Karten mit einem Treiber, dessen Quellen
           verschlossen sind, zu benutzen. Siehe
           src/sys/compat/ndis/subr_ndis.c.

  R

   RA

           Siehe Router Advertisement.

   RAID

           Siehe Redundant Array of Inexpensive Disks.

   RAM

           Siehe Random Access Memory.

   RD

           Siehe Received Data.

   RFC

           Siehe Request For Comments.

   RISC

           Siehe Reduced Instruction Set Computer.

   RPC

           Siehe Remote Procedure Call.

   RS232C

           Siehe Recommended Standard 232C.

   RTS

           Siehe Request To Send.

   Random Access Memory

   Revision Control System

           Das Revision Control System (RCS) ist eines der a:ltesten
           "Versionsverwaltungssysteme" fu:r reine Textdateien. Es erlaubt
           das Speichern, Laden, Archivieren, Protokollieren, Identifizieren
           sowie das Zusammenfu:hren von verschiedenen Revisionen einer
           Datei. Bei RCS handelt es sich um eine Sammlung von vielen kleinen
           zusammenarbeitenden Werkzeugen. Zwar fehlen im Vergleich zu CVS
           oder Subversion einige Funktionen, allerdings ist RCS sehr einfach
           zu installieren, zu konfigurieren und zu benutzen, solange die
           Anzahl der zu verwaltenden Dateien u:berschaubar bleibt. RCS ist
           dabei fu:r praktisch alle wichtigen UNIX-artigen Betriebssysteme
           verfu:gbar.

           Siehe auch Concurrent Versions System, Subversion.

   Received Data

           Ein RS232C-Pin oder -Draht, u:ber den neue Daten ankommen.

           Siehe auch Transmitted Data.

   Recommended Standard 232C

           Ein Standard fu:r die Kommunikation zwischen seriellen Gera:ten.

   Reduced Instruction Set Computer

           Ein Ansatz im Prozessordesign, bei dem die von der Hardware
           durchzufu:hrenden Operationen so weit als mo:glichst vereinfacht
           und verallgemeinert werden. Vorteile dieses Design sind ein
           geringerer Energieverbrauch, eine geringere Transistoranzahl und
           u:bersichtlicherer Code. Zu den RISC-Plattformen geho:ren Alpha,
           SPARC(R), ARM(R) sowie PowerPC(R).

   Redundant Array of Inexpensive Disks

   Remote Procedure Call

   repocopy

           Siehe Repository Copy.

   Repository Copy

           Eine direkte Kopie von Dateien innerhalb eines Repositories.

           Ohne eine Repocopy mu:sste ein Committer eine Datei mit cvs add an
           der neuen Position einfu:gen und mit cvs rm an der alten Position
           lo:schen.

           Der Nachteil dieser Methode wa:re allerdings, dass dabei die
           Datei-Historie (also die CVS-Logs) nicht an die neue Position
           kopiert werden wu:rde. Da das FreeBSD-Project diese Informationen
           als a:sserst nu:tzlich ansieht, wird stattdessen ha:fig eine
           Repocopy durchgefu:hrt. Bei diesem Prozess kopiert ein Repositoy
           Meister die Datei direkt innerhalb des Repository an die neue
           Position, statt cvs(1) einzusetzen.

   Request For Comments

           Eine Sammlung von Dokumenten, die wichtige Internetstandards,
           Protokolle und so weiter definieren und die unter
           www.rfc-editor.org zu finden sind.

           Kann aber auch allgemein verwendet werden, wenn jemand eine
           A:nderung vorschla:gt und dazu Feedback mo:chte.

   Request To Send

           Ein RS232C-Signal, das der Gegenstelle signalisiert, dass sie mit
           dem Senden der Daten beginnen kann.

           Siehe auch Clear To Send.

   Router Advertisement

  S

   SCI

           Siehe System Control Interrupt.

   SCSI

           Siehe Small Computer System Interface.

   SG

           Siehe Signal Ground.

   SMB

           Siehe Server Message Block.

   SMP

           Siehe Symmetric MultiProcessor.

   SMTP

           Siehe Simple Mail Transfer Protocol.

   SMTP AUTH

           Siehe SMTP Authentication.

   SSH

           Siehe Secure Shell.

   STR

           Siehe Suspend To RAM.

   SVN

           Siehe Subversion.

   SMTP Authentication

   Server Message Block

   Signal Ground

           Ein RS232-Pin oder -Draht, der als Untergrundreferenz fu:r das
           Signal verwendet wird.

   Simple Mail Transfer Protocol

   Secure Shell

   Small Computer System Interface

   Subversion

           Subversion ist ein Versionskontrollsystem, a:hnlich wie CVS, aber
           mit einer gro:sseren Liste von Eigenschaften.

           Siehe auch Concurrent Versions System.

   Suspend To RAM

   Symmetric MultiProcessor

   System Control Interrupt

  T

   TCP

           Siehe Transmission Control Protocol.

   TCP/IP

           Siehe Transmission Control Protocol/Internet Protocol.

   TD

           Siehe Transmitted Data.

   TFTP

           Siehe Trivial FTP.

   TGT

           Siehe Ticket-Granting Ticket.

   TSC

           Siehe Time Stamp Counter.

   Ticket-Granting Ticket

   Time Stamp Counter

           Ein interner Za:hler bei modernen Pentium(R)-Prozessoren, der die
           Ticks der core frequency clock bestimmt.

   Transmission Control Protocol

           Ein Protokoll, das auf dem IP-Protokoll aufsetzt. Es garantiert,
           dass Datenpakete zuverla:ssig und geordnet transportiert werden.

   Transmission Control Protocol/Internet Protocol

           Die Kombination aus TCP- und IP-Protokoll. Ein Grossteil des
           Internets basiert auf TCP/IP.

   Transmitted Data

           Ein RS232C-Pin oder -Draht, u:ber den Daten verschickt werden.

           Siehe auch Received Data.

   Trivial FTP

  U

   UDP

           Siehe User Datagram Protocol.

   UFS1

           Siehe Unix File System Version 1.

   UFS2

           Siehe Unix File System Version 2.

   UID

           Siehe User ID.

   URL

           Siehe Uniform Resource Locator.

   USB

           Siehe Universal Serial Bus.

   Uniform Resource Locator

           Eine Methode um eine Ressource, z.B. ein Dokument im Internet, zu
           lokalisieren und eine Art, diese Ressource zu identifizieren.

   Unix File System Version 1

           Das Original UNIX(R) Dateisystem, manchmal auch das Berkeley Fast
           File System genannt.

   Unix File System Version 2

           Eine Erweiterung fu:r UFS1, eingefu:hrt in FreeBSD5-CURRENT. UFS2
           entha:lt 64-bit Blockzeiger (durchbricht dadurch die 1T Grenze),
           Unterstu:tzung fu:r extended file storage und andere Merkmale.

   Universal Serial Bus

           Ein Hardware-Standard, der verwendet wird um eine grosse Vielfalt
           von Computerperipherie an eine einheitliche Schnittstelle
           anzuschliessen.

   User ID

           Eine eindeutige Nummer, die einem Benutzer eines Computers
           zugewiesen wird. Kann zur Identifizierung von zugewiesenen
           Ressourcen und Berechtigungen verwendet werden.

   User Datagram Protocol

           Ein einfaches, nicht-zuverla:ssiges Protokoll fu:r Datagramme, das
           beim Datenaustausch in einem TCP/IP Netzwerk benutzt wird. UDP
           entha:lt keine Fehleru:berpru:fung und -korrektur wie TCP.

  V

   VPN

           Siehe Virtual Private Network.

   Virtual Private Network

           Eine Methode ein o:ffentliches Netzwerk wie das Internet zu
           nutzen, um einen entfernten Zugriff auf ein lokales Netz, wie etwa
           ein Unternehmens-LAN, zu ermo:glichen.

                              Stichwortverzeichnis

  Symbole

   -CURRENT, Einem Entwicklungszweig folgen

                benutzen, FreeBSD-CURRENT

   -STABLE, Einem Entwicklungszweig folgen, FreeBSD-STABLE

                benutzen, FreeBSD-STABLE

   .k5login, Kerberos auf dem Client einrichten

   .k5users, Kerberos auf dem Client einrichten

   .rhosts, Sicherung von Dateisystemen

   /boot/kernel.old, Einen angepassten Kernel bauen und installieren

   /etc, Ein Partitionslayout entwerfen

   /etc/gettytab, /etc/gettytab

   /etc/groups, Gruppen

   /etc/login.conf, Login-Klassen konfigurieren

   /etc/mail/access, Sendmail-Konfigurationsdateien

   /etc/mail/aliases, Sendmail-Konfigurationsdateien

   /etc/mail/local-host-names, Sendmail-Konfigurationsdateien

   /etc/mail/mailer.conf, Sendmail-Konfigurationsdateien

   /etc/mail/mailertable, Sendmail-Konfigurationsdateien

   /etc/mail/sendmail.cf, Sendmail-Konfigurationsdateien

   /etc/mail/virtusertable, Sendmail-Konfigurationsdateien

   /etc/remote, AT-Befehle benutzen

   /etc/ttys, /etc/ttys

   /usr, Ein Partitionslayout entwerfen

   /usr/bin/login, U:berblick

   /usr/share/skel, adduser

   /var, Ein Partitionslayout entwerfen

   386BSD, Kurzer geschichtlicher Abriss zu FreeBSD

   386BSD Patchkit, Kurzer geschichtlicher Abriss zu FreeBSD

   4.3BSD-Lite, Kurzer geschichtlicher Abriss zu FreeBSD

   4.4BSD-Lite, Willkommen zu FreeBSD, Was kann FreeBSD?

   802.11 (Siehe drahtlose Netzwerke)

  A

   AbiWord, AbiWord

   Accounting

                Plattenplatz, Disk Quotas

   Accounts

                Benutzer-Accounts, Benutzer-Accounts

                daemon, Systembenutzer

                einschra:nken, Login-Klassen konfigurieren

                erstellen, adduser

                Gruppen, Gruppen

                lo:schen, rmuser

                nobody, Systembenutzer

                operator, Systembenutzer

                Passwort wechseln, passwd

                Superuser (root), Der Superuser-Account

                System-Accounts, Systembenutzer

                vera:ndern, Accounts vera:ndern

   ACL, Zugriffskontrolllisten fu:r Dateisysteme (ACL)

   ACPI, Energie- und Ressourcenverwaltung, Ha:ufige Probleme

                ASL, BIOS mit fehlerhaftem Bytecode, Die voreingestellte ASL
                u:berschreiben

                Fehlersuche, Abrufen und Einreichen von Informationen zur
                Fehlersuche

                Probleme mit, Ha:ufige Probleme, Abrufen und Einreichen von
                Informationen zur Fehlersuche

   adduser, adduser, Werkzeuge zum A:ndern der Login-Klasse

   AIX, Network Information System (NIS)

   amd, Automatisches Einha:ngen mit amd(8)

   Anti-aliasing, Anti-aliasing

   Anwender

                Grosse, bekannte FreeBSD-Anwender, Wer verwendet FreeBSD?

   Apache, Wer verwendet FreeBSD?, Apache HTTP-Server

                Konfigurationsdatei, Apache konfigurieren und starten

                Module, Ha:ufig verwendete Apache-Module

                Starten oder Beenden, Apache konfigurieren und starten

   Apache OpenOffice, Apache OpenOffice

   APIC

                deaktivieren, Systemha:nger

   APM, Energie- und Ressourcenverwaltung

   Apple, Wer verwendet FreeBSD?

   ASCII, Lokale Anpassungen benutzen

   AT&T, Kurzer geschichtlicher Abriss zu FreeBSD

   AUDIT, Einleitung

   Auslagerungsspeicher

                verschlu:sseln, Den Auslagerungsspeicher verschlu:sseln

   autofs, Automatisches Einha:ngen mit autofs(5)

   Automatic Mounter Daemon, Automatisches Einha:ngen mit amd(8)

   Automounter Subsystem, Automatisches Einha:ngen mit autofs(5)

   AutoPPP, Einwa:hlverbindungen konfigurieren

  B

   Backup-Software, Backup-Software von Drittanbietern

                cpio, Sicherung von Verzeichnissen

                dump / restore, Sicherung von Dateisystemen

                pax, Sicherung von Verzeichnissen

                tar, Sicherung von Verzeichnissen

   Bandmedien, Bandmedien benutzen

   Basic Input/Output System (Siehe BIOS)

   Beitragende, Das FreeBSD-Entwicklungsmodell

   Benutzer einschra:nken, Login-Klassen konfigurieren

                coredumpsize, Login-Klassen konfigurieren

                cputime, Login-Klassen konfigurieren

                filesize, Login-Klassen konfigurieren

                maxproc, Login-Klassen konfigurieren

                memorylocked, Login-Klassen konfigurieren

                memoryuse, Login-Klassen konfigurieren

                openfiles, Login-Klassen konfigurieren

                Quotas, Einschra:nkung von Ressourcen

                sbsize, Login-Klassen konfigurieren

                stacksize, Login-Klassen konfigurieren

   BGP, Statische Routen einrichten

   Bina:rkompatibilita:t

                BSD/OS, Was kann FreeBSD?

                Linux, Was kann FreeBSD?, U:bersicht

                NetBSD, Was kann FreeBSD?

                SCO, Was kann FreeBSD?

                SVR4, Was kann FreeBSD?

   BIND, Fehlerbehebung, Domain Name System (DNS)

                DNS security extensions, DNSSEC

                Konfigurationsdateien, Konfigurationsdateien

                Start, BIND starten

                Zonendatei, Zonendateien

                Zwischenspeichernde Nameserver, Zwischenspeichernde
                (cachende) Nameserver

   BIOS, FreeBSDs Bootvorgang

   bits-per-second, Begriffe und Hardware

   Bluetooth, Bluetooth

   Boot Loader, FreeBSDs Bootvorgang

   Boot Manager, FreeBSDs Bootvorgang, Der Boot-Manager

   boot-loader, Phase Drei

   booten, U:bersicht

   Bootstrap, U:bersicht

   Bridge, LAN-Kopplung mit einer Bridge

   Browser

                Web, Browser

   BSD Copyright, Ziele des FreeBSD-Projekts

   BSD Router, Wer verwendet FreeBSD?

   bsdlabel, Die Wiederherstellung in einem Notfall

  C

   Calligra, Calligra

   CARP, Common Address Redundancy Protocol (CARP)

   CD-Brenner

                ATAPI, Erstellen und Verwenden von CDs

                ATAPI/CAM Treiber, Unterstu:tzte Gera:te

   CD-ROM

                bootbare erstellen, Daten auf ISO-Dateisystem schreiben

                brennen, Eine CD brennen

   CD-ROMs

                brennen, Erstellen und Verwenden von CDs

   CHAP, Authentifizierung durch PAP und CHAP

   chpass, chpass

   Chromium, Chromium

   Cisco, Wer verwendet FreeBSD?

   Citrix, Wer verwendet FreeBSD?

   Codierungen, Lokale Anpassungen benutzen

   Committer, Das FreeBSD-Entwicklungsmodell

   Common Address Redundancy Protocol, Common Address Redundancy Protocol
   (CARP)

   Compiler, Was kann FreeBSD?

                C, Was kann FreeBSD?

                C++, Was kann FreeBSD?

   Computer Systems Research Group (CSRG), Was kann FreeBSD?

   Concurrent Versions System (Siehe CVS)

   Core Team, Das FreeBSD-Entwicklungsmodell

   cron

                konfigurieren, cron(8) konfigurieren

   cuau, Konfiguration der seriellen Schnittstelle

   CVS, Das FreeBSD-Entwicklungsmodell

   CVS-Repository, Das FreeBSD-Entwicklungsmodell

  D

   dangerously dedicated, Festplatten, Slices und Partitionen

   Dateiserver

                Unix-Clients, Network File System (NFS)

                Windows-Clients, Datei- und Druckserver fu:r
                Microsoft(R) Windows(R)-Clients (Samba)

   Dateisysteme

                abha:ngen, Verwendung von umount(8)

                anha:ngen, Verwendung von mount(8)

                fstab, Die fstab Datei

                ISO 9660, Erstellen und Verwenden von CDs, Daten auf
                ISO-Dateisystem schreiben

                Joliet, Daten auf ISO-Dateisystem schreiben

   Dateizugriffsrechte, Zugriffsrechte

   DCE, Begriffe und Hardware

   Dell KACE, Wer verwendet FreeBSD?

   Device Node, Fehlerbehebung

   device.hints, Konfiguration von Gera:ten

   DGA, Video-Schnittstellen

   DHCP

                dhcpd.conf, Einen DHCP-Server installieren und einrichten

                installieren, Einen DHCP-Server installieren und einrichten

                Konfigurationsdateien, Einen DHCP-Client konfigurieren, Einen
                DHCP-Server installieren und einrichten

                plattenloser Betrieb, Konfiguration des DHCP-Servers

                Server, Einen DHCP-Server installieren und einrichten

   Dienste, Start von Diensten

   Disk Labels, Das Labeln von Laufwerken

   Disk Mirroring, RAID1 - Spiegelung

   Disk Quotas, Disk Quotas

                Limits, Setzen von Quota-Limits

                u:berpru:fen, Disk Quotas aktivieren, U:berpru:fen von
                Quota-Limits und Plattennutzung

   Django, Django

   DNS, Hostnamen, Fortgeschrittene Konfiguration, E-Mail Komponenten, Domain
   Name System (DNS)

                Eintra:ge, Zonendateien

   DNS-Server, Was kann FreeBSD?

   Documentation (Siehe Updating and Upgrading)

   documentation package (Siehe Updating and Upgrading)

   Drucker, Russisch (KOI8-R Codierung)

   Druckserver

                Windows-Clients, Datei- und Druckserver fu:r
                Microsoft(R) Windows(R)-Clients (Samba)

   DSP, Fehlerbehebung

   DTE, Begriffe und Hardware

   DTrace, U:berblick

   DTrace support (Siehe DTrace)

   Dual-Homed-Hosts, Statische Routen einrichten

   dump, Sicherung von Dateisystemen

   DVD

                brennen, DVDs benutzen

                DVD+RW, DVD+RW-Medien benutzen

                DVD-RAM, DVD-RAM

                DVD-RW, DVD-RW-Medien benutzen

                DVD-Video, DVD-Videos brennen

   Dynamic Host Configuration Protocol (Siehe DHCP)

  E

   E-Mail, Was kann FreeBSD?, U:bersicht (Siehe E-Mail)

                MTA, wechseln, Wechseln des Mailu:bertragungs-Agenten

                Terminologie, Terminologie

   E-Mail-Programme, E-Mail-Programme

   E-Mail-Server, E-Mail Komponenten

   E-Mail-Server Da:monen

                Exim, E-Mail Komponenten

                Postfix, E-Mail Komponenten

                qmail, E-Mail Komponenten

                Sendmail, E-Mail Komponenten

   E-Mails

                empfangen, E-Mail Komponenten

   Editoren, Text-Editoren

   ee1, Text-Editoren

   Einmalpasswo:rter, Einmalpasswo:rter

   Einstellungen

                mit sysctl, Einstellungen mit sysctl(8)

                von Kernel Limits, Einstellungen von Kernel Limits

   Einwa:hlverbindungen, Einwa:hlverbindungen

   ELF, Weiterfu:hrende Themen

                Kennzeichnung, Weiterfu:hrende Themen

   emacs, Text-Editoren

   embedded, Was kann FreeBSD?

   ePDFView, ePDFView

   execution class loader, Weiterfu:hrende Themen

   Experts Exchange, Wer verwendet FreeBSD?

  F

   failover, Link-Aggregation und Failover

   FEC, Link-Aggregation und Failover

   fetchmail, E-Mails mit fetchmail abholen

   File Systems, U:bersicht

   File Systems Support (Siehe File Systems)

   Firefox, Firefox

   Firewall, Was kann FreeBSD?

                IPFILTER, IPFILTER (IPF)

                IPFW, IPFW

   firewall, Firewalls

                PF, PF

                Regelsatz, Firewallkonzepte

   Free Software Foundation, Kurzer geschichtlicher Abriss zu FreeBSD, GNU
   Info Dateien

   FreeBSD Projekt

                Entwicklungsmodell, Das FreeBSD-Entwicklungsmodell

                Geschichte, Kurzer geschichtlicher Abriss zu FreeBSD

                Ziele, Ziele des FreeBSD-Projekts

   FreeBSD Sicherheitshinweise, FreeBSD Sicherheitshinweise

   freebsd-update (Siehe updating-upgrading)

   FreeNAS, Wer verwendet FreeBSD?

   FreshPorts, Suchen einer Anwendung

   FTP

                anonymous, Konfiguration, Wartung

   FTP-Server, Was kann FreeBSD?, File Transfer Protocol (FTP)

  G

   Gateway, Gateways und Routen

   Geeqie, Geeqie

   Gemeinsam benutzte Bibliotheken, Manuelle Installation zusa:tzlicher
   Bibliotheken

   GEOM, U:bersicht, RAID0 - Striping, RAID1 - Spiegelung, RAID3 - Byte-Level
   Striping mit dedizierter Parita:t, Software RAID, Das Labeln von
   Laufwerken, UFS Journaling in GEOM

   GEOM Disk Framework (Siehe GEOM)

   Gera:tedatei, Fehlerbehebung

   getty, U:berblick

   GhostBSD, Wer verwendet FreeBSD?

   GNOME, Was kann FreeBSD?, GNOME

   GNU General Public License (GPL), Ziele des FreeBSD-Projekts

   GNU Lesser General Public License (LGPL), Ziele des FreeBSD-Projekts

   GNU Werkzeuge, Linux(R) ELF-Bina:rdateien installieren

   GnuCash, GnuCash

   Gnumeric, Gnumeric

   gpart, Hinzufu:gen von Laufwerken, Partitionen vergro:ssern

   grace period, U:berpru:fen von Quota-Limits und Plattennutzung

   Greenman, David, Kurzer geschichtlicher Abriss zu FreeBSD

   Grimes, Rod, Kurzer geschichtlicher Abriss zu FreeBSD

   Gro:sse der Swap-Partition, Ein Partitionslayout entwerfen

   Gruppen, Gruppen

   gv, gv

  H

   Hardlimit, Setzen von Quota-Limits

   HAST

                high availability, Highly Available Storage (HAST)

   HCI, Suche nach anderen Bluetooth-Gera:ten

   hostname, Hostnamen

   hosts, /etc/hosts

   HP-UX, Network Information System (NIS)

   Hubbard, Jordan, Kurzer geschichtlicher Abriss zu FreeBSD

   hw.ata.wc, hw.ata.wc

  I

   I/O port, Fehlerbehebung

   IEEE, Sicherung von Verzeichnissen

   IMAP, E-Mail Komponenten

   init8, FreeBSDs Bootvorgang, Die letzte Phase

   installation, U:bersicht

                troubleshooting, Fehlerbehebung

   Intel i810 Graphic Chipset, Konfiguration des Intel(R) i810 Graphics
   Chipsets

   Internationalisierung (Siehe Lokalisierung)

   Internet Systems Consortium (ISC), Dynamic Host Configuration Protocol
   (DHCP)

   Interrupt-Sturm, Systemha:nger

   IP-Aliase, Virtual Hosts

   IP-Subnetz, LAN-Kopplung mit einer Bridge

   IPFILTER

                aktivieren, IPF aktivieren

                Kerneloptionen, IPF aktivieren

                Protokollierung, IPF Protokollierung

                Regel-Syntax, IPF Regel-Syntax

                Statistiken, IPF Statistiken

   ipfstat, IPF Statistiken

   IPFW

                aktivieren, IPFW aktivieren

                Kerneloptionen, IPFW aktivieren

                Regel-Syntax, IPFW Regel-Syntax

   ipfw, Das IPFW Kommando

   ipmon, IPF Protokollierung

   IPsec, VPN mit IPsec

                AH, VPN mit IPsec

                ESP, VPN mit IPsec

   IRQ, Fehlerbehebung

   Isilon, Wer verwendet FreeBSD?

   ISO 9660, Erstellen und Verwenden von CDs

   iXsystems, Wer verwendet FreeBSD?

  J

   jails, Jails

   Jolitz, Bill, Kurzer geschichtlicher Abriss zu FreeBSD

   Journaling, UFS Journaling in GEOM

   Juniper, Wer verwendet FreeBSD?

  K

   KDE, Was kann FreeBSD?, KDE

                Display-Manager, KDE

   Kerberos5

                Beschra:nkungen, Beschra:nkungen von Kerberos

                Clients einrichten, Kerberos auf dem Client einrichten

                Dienste einrichten, Kerberos-Dienste auf dem Server
                einrichten

                Key Distribution Center, Das Heimdal KDC einrichten

                weiterfu:hrende Dokumentation, Weiterfu:hrende Dokumentation

   kern.cam.scsi_delay, SCSI_DELAY (kern.cam.scsi_delay)

   kern.ipc.soacceptqueue, kern.ipc.soacceptqueue

   kern.maxfiles, kern.maxfiles

   Kernel, FreeBSDs Bootvorgang

                bauen / installieren, Einen angepassten Kernel bauen und
                installieren

                Boot-Flags, Die letzte Phase

                Erstellen eines angepassten Kernels, U:bersicht

                Interaktion wa:hrend des Bootens, Phase Drei

                Konfiguration, Soundkarten einrichten

                Konfigurationsdatei, Die Kernelkonfigurationsdatei

                NOTES, Die Kernelkonfigurationsdatei

   Kerneloption

                IPSEC, VPN mit IPsec

                IPSEC_DEBUG, VPN mit IPsec

   Kerneloptionen

                COMPAT_LINUX, Konfiguration der
                Linux(R)-Bina:rkompatibilita:t

                IPFILTER, IPF aktivieren

                IPFILTER_DEFAULT_BLOCK, IPF aktivieren

                IPFILTER_LOG, IPF aktivieren

                IPFIREWALL, IPFW aktivieren

                IPFIREWALL_VERBOSE, IPFW aktivieren

                IPFIREWALL_VERBOSE_LIMIT, IPFW aktivieren

                MROUTING, Multicast-Routing

                SCSI DELAY, SCSI_DELAY (kern.cam.scsi_delay)

   keymap, Einrichten der Konsole

   KLD (kernel loadable object), Windows(R)-NDIS-Treiber einsetzen

   KMyMoney, KMyMoney

   Kommandozeile, Shells

   Konqueror, Konqueror

   Konsole, Virtuelle Konsolen und Terminals, Der Single-User Modus

  L

   L2CAP, Das Logical Link Control and Adaptation Protocol (L2CAP)

   LACP, Link-Aggregation und Failover

   lagg, Link-Aggregation und Failover

   La:ndercodes, Lokale Anpassungen benutzen

   Laufwerke

                hinzufu:gen, Hinzufu:gen von Laufwerken

                speicherbasierte, Ein- und Ausha:ngen von bestehenden
                Abbildern, Ein datei- oder speicherbasiertes Laufwerk
                erzeugen

                speicherbasiertes Laufwerk ausha:ngen, Ein- und Ausha:ngen
                von bestehenden Abbildern

   LCD, Anti-aliasing

   LCP, Einwa:hlverbindungen konfigurieren

   LDAP, Lightweight Access Directory Protocol (LDAP), Samba absichern

   LDAP Server, Konfiguration eines LDAP-Servers

   LibreOffice , LibreOffice

   Linux, Network Information System (NIS)

                ELF-Bina:rdatei, Linux(R) ELF-Bina:rdateien installieren

   Linux-Bina:rkompatibilita:t, U:bersicht

   Live-CD, Die Wiederherstellung in einem Notfall

   loadbalance, Link-Aggregation und Failover

   loader, Phase Drei

   loader Konfiguration, Phase Drei

   Locale, Einstellen der Locale fu:r die Login-Shell

   log management, Management und Rotation von Logdateien

   log rotation, Management und Rotation von Logdateien

   Logdateien

                FTP, Wartung

   Login-Klasse, Einstellen der Locale fu:r die Login-Shell, Werkzeuge zum
   A:ndern der Login-Klasse

   Lokalisierung, U:bersicht

                Deutsch, Weitere sprachspezifische Ressourcen

                Griechisch, Weitere sprachspezifische Ressourcen

                Japanisch, Weitere sprachspezifische Ressourcen

                Koreanisch, Weitere sprachspezifische Ressourcen

                russisch, Russisch (KOI8-R Codierung)

                traditionell chinesisch, Weitere sprachspezifische Ressourcen

   ls1, Zugriffsrechte

  M

   MAC, U:bersicht

                File System Firewall Policy, Das MAC Modul bsdextended

   MAC Biba Integrity Policy, Das MAC Modul Biba

   MAC Configuration Testing, Testen der Konfiguration

   MAC Interface Silencing Policy, Das MAC Modul ifoff

   MAC LOMAC, Das MAC Modul LOMAC

   MAC Multi-Level Security Policy, Das MAC Modul Multi-Level Security

   MAC Port Access Control List Policy, Das MAC Modul portacl

   MAC Process Partition Policy, Das MAC Modul partition

   MAC See Other UIDs Policy, Das MAC Modul seeotheruids

   MAC Troubleshooting, Fehler im MAC beheben

   MacOS, Erzeugen eines einzelnen Einmalpasswortes

   Mail-User-Agents, E-Mail-Programme

   Mandatory Access Control (Siehe MAC)

   Manualpages, Manualpages

   Master Boot Record (MBR), FreeBSDs Bootvorgang, Der Boot-Manager

   McAfee, Wer verwendet FreeBSD?

   Mehrbenutzerbetrieb, Was kann FreeBSD?

   Mehrbenutzermodus, Mehrbenutzermodus

   mencoder, MPlayer und MEncoder

   mfsBSD, Wer verwendet FreeBSD?

   mgetty, Einwa:hlverbindungen konfigurieren

   Microsoft Windows, Datei- und Druckserver fu:r
   Microsoft(R) Windows(R)-Clients (Samba)

   Microsoft Windows

                Gera:tetreiber, Windows(R)-NDIS-Treiber einsetzen

   MIME, Einstellen der Locale fu:r die Login-Shell

   Modem, Einwa:hlverbindungen

   mod_perl

                Perl, mod_perl

   mod_php

                PHP, mod_php

   mountd, Network File System (NFS)

   moused, Einrichten der Konsole

   MPlayer, MPlayer und MEncoder

   MS-DOS, Erzeugen eines einzelnen Einmalpasswortes

   Multicast-Routing, Multicast-Routing

   MX-Eintrag, E-Mail Komponenten, Fehlerbehebung, Grundlegende
   Konfiguration, Zonendateien

  N

   Nagios in a MAC Jail, Beispiel 1: Nagios in einer MAC Jail

   NAS4Free, Wer verwendet FreeBSD?

   NAT, Was kann FreeBSD?

                und IPFW, NAT Konfiguration

   NDIS, Windows(R)-NDIS-Treiber einsetzen

   NDISulator, Windows(R)-NDIS-Treiber einsetzen

   net.inet.ip.portrange.*, net.inet.ip.portrange.*

   Net/2, Kurzer geschichtlicher Abriss zu FreeBSD

   NetApp, Wer verwendet FreeBSD?

   NetBIOS, Fortgeschrittene Konfiguration, Globale Einstellungen

   NetBSD, Network Information System (NIS)

   Netcraft, Wer verwendet FreeBSD?

   NetEase, Wer verwendet FreeBSD?

   Netflix, Wer verwendet FreeBSD?

   Netzgruppen, Netzgruppen verwenden

   Netzwerke, drahtlos, Drahtlose Netzwerke

   Netzwerkkarten

                einrichten, Einrichten von Netzwerkkarten, Konfiguration von
                Netzwerkkarten

                Fehlersuche, Fehlersuche

                testen, Test der Ethernet-Karte

                Treiber, Bestimmen des richtigen Treibers

   newsyslog, Management und Rotation von Logdateien

   newsyslog.conf, Management und Rotation von Logdateien

   NFS, Quotas u:ber NFS, Network File System (NFS)

                Dateisysteme einha:ngen, Konfiguration des Clients

                einrichten, Konfiguration des Servers

                Export von Dateisystemen, Konfiguration des Servers

                Server, Network File System (NFS)

   nfsd, Network File System (NFS)

   NIS, Network Information System (NIS)

                Client, Arten von NIS-Rechnern

                Client konfigurieren, Einen NIS-Client einrichten

                Doma:nen, Network Information System (NIS)

                Doma:nenname, Einen NIS-Doma:nennamen wa:hlen

                maps, Die NIS-Maps initialisieren

                Masterserver, Arten von NIS-Rechnern

                Passwortformate, Passwortformate

                Serverkonfiguration, Einen NIS-Masterserver konfigurieren

                Slaveserver, Arten von NIS-Rechnern, Einen NIS-Slaveserver
                einrichten

   NIS+, Samba absichern

   NOTES, Die Kernelkonfigurationsdatei

   Novell, Kurzer geschichtlicher Abriss zu FreeBSD

   NTP

                ntp.conf, NTP konfigurieren

                ntpd, Die Uhrzeit mit NTP synchronisieren

   Nullmodemkabel, Kabel und Schnittstellen, Konfiguration der seriellen
   Konsole

  O

   OBEX, OBEX Object-Push (OPUSH)

   office suite

                LibreOffice , LibreOffice

   Office-Pakete

                Apache OpenOffice, Apache OpenOffice

                Calligra, Calligra

   Okular, Okular

   OpenBSD, Network Information System (NIS)

   OpenSSH, OpenSSH

                aktivieren, Den SSH-Server aktivieren

                Client, Die SSH Client-Werkzeuge benutzen

                secure copy, Die SSH Client-Werkzeuge benutzen

                Tunnel, SSH-Tunnel

   OpenSSL, OpenSSL

                Zertifikate erzeugen, Zertifikate erzeugen

   Opera, Opera

   OPNSense, Wer verwendet FreeBSD?

   OSPF, Statische Routen einrichten

  P

   Pair Networks, Wer verwendet FreeBSD?

   Pairing, Erstmaliger Verbindungsaufbau zwischen zwei Bluetooth-Gera:ten
   (Pairing)

   Pakete, U:bersicht

   PAP, Authentifizierung durch PAP und CHAP

   Partitionen, Festplatten, Slices und Partitionen, Hinzufu:gen von
   Laufwerken, Partitionen vergro:ssern

                vergro:ssern, Partitionen vergro:ssern

                verschlu:sseln, Partitionen verschlu:sseln

   Partitionslayout, Ein Partitionslayout entwerfen

   passwd, passwd

   Passwort, Authentifizierung durch PAP und CHAP

   pax, Sicherung von Verzeichnissen

   PCI, Soundkarten einrichten

   PDF

                anzeigen, Xpdf, gv, ePDFView, Okular

   pfSense, Wer verwendet FreeBSD?

   PGP-Schlu:ssel, OpenPGP-Schlu:ssel

   pkg, Sicherheitsprobleme in Software von Drittanbietern u:berwachen

                search, Suchen einer Anwendung

   plattenloser Arbeitsplatz, Plattenloser Betrieb mit PXE

   plattenloser Betrieb, Plattenloser Betrieb mit PXE

   POP, E-Mail Komponenten

   portmaster, Ports mit Portmaster aktualisieren

   Ports, U:bersicht

                aktualisieren, Ports aktualisieren

                entfernen, Entfernen installierter Ports

                installieren, Ports installieren

                Plattenplatz, Platzbedarf von Ports

                upgrading-tools, Werkzeuge fu:r die Aktualisierung und
                Verwaltung von Ports

   Ports-Sammlung, Konfiguration der Linux(R)-Bina:rkompatibilita:t

   portupgrade, Ports mit Portupgrade aktualisieren

   POSIX, Sicherung von Verzeichnissen, Einstellen der Locale fu:r die
   Login-Shell

   PostScript

                anzeigen, gv

   PPP, U:bersicht, Fehlerbehebung

                Erweiterungen von Microsoft, Fortgeschrittene Konfiguration

                Fehlersuche, Probleme bei PPP-Verbindungen

                Konfiguration, Abschliessende Systemkonfiguration

                mit fester IP-Adresse, Grundlegende Konfiguration

                NAT, PPP NAT benutzen

                over ATM, PPP over ATM (PPPoA)

                over Ethernet, U:bersicht, PPP over Ethernet (PPPoE)

   PPPoA, PPP over ATM (PPPoA)

   Pra:emptives Multitasking, Was kann FreeBSD?

   procmail, E-Mails mit procmail filtern

   Prozess-U:berwachung, Prozess-U:berwachung

   pw, pw, Werkzeuge zum A:ndern der Login-Klasse

   Python, Django

  Q

   Quellcode, Was kann FreeBSD?

   Quotas, Einschra:nkung von Ressourcen

  R

   RAID1, RAID1 - Spiegelung

   RAID3, RAID3 - Byte-Level Striping mit dedizierter Parita:t

   Rambler, Wer verwendet FreeBSD?

   rc-Dateien, Mehrbenutzermodus

                rc.conf, Systemspezifische Konfiguration

                rc.serial, Konfiguration der seriellen Schnittstelle,
                /etc/rc.d/serial

   resolv.conf, /etc/resolv.conf

   Resolver, Domain Name System (DNS)

   Ressourcen einschra:nken, Einschra:nkung von Ressourcen

   restore, Sicherung von Dateisystemen

   Reverse-DNS, Domain Name System (DNS)

   RFCOMM, Radio Frequency Communication (RFCOMM)

   RIP, Statische Routen einrichten

   rmuser, rmuser

   Root-Dateisystem, Anha:ngen und Abha:ngen von Dateisystemen

   Root-Zone, Domain Name System (DNS)

   roundrobin, Link-Aggregation und Failover

   routed, Abschliessende Systemkonfiguration

   Router, Was kann FreeBSD?, Statische Routen einrichten

   Routing, Gateways und Routen

   rpcbind, Network File System (NFS), NIS-Begriffe und -Prozesse

   RS-232C Kabel, Begriffe und Hardware, Kabel und Schnittstellen

   Ruby on Rails, Ruby on Rails

  S

   Samba-Server, Datei- und Druckserver fu:r Microsoft(R) Windows(R)-Clients
   (Samba)

   Sandvine, Wer verwendet FreeBSD?

   Scanner, Scanner

   Schnappschu:sse

                von Dateisystemen, Schnappschu:sse von Dateisystemen

   Schriftarten

                Absta:nde, Anti-aliasing

                Anti-aliasing, Anti-aliasing

                auf einem LCD, Anti-aliasing

                TrueType, TrueType(R)-Schriftarten

   scp1, Die SSH Client-Werkzeuge benutzen

   screenmap, Einrichten der Konsole

   SDL, Video-Schnittstellen

   SDP, Das Service Discovery Protocol (SDP)

   security

                firewalls, Firewalls

   Security Event Auditing (Siehe MAC)

   sendmail, Abschliessende Systemkonfiguration

   Sendmail, Sendmail-Konfigurationsdateien

   serielle Datenu:bertragung, U:bersicht

   serielle Konsole, Einrichten der seriellen Konsole

   Shells, Shells

                Bourne Shell, Shells

   shutdown8, Der Shutdown-Vorgang

   Sicherheit, Sicherheit

                Einmalpasswo:rter, Einmalpasswo:rter

                OpenSSH, OpenSSH

                OpenSSL, OpenSSL

                Sudo, Gemeinsame Administration mit Sudo

   Sina, Wer verwendet FreeBSD?

   Single-User Modus, Phase Drei, Der Single-User Modus

   Slices, Festplatten, Slices und Partitionen

   SMTP, Abschliessende Systemkonfiguration

   Soft Updates, Soft Updates

                Details, Details u:ber Soft Updates

   Softlimit, Setzen von Quota-Limits

   Software RAID

                Hardware RAID, Software RAID

   Solaris, Weiterfu:hrende Themen, Network Information System (NIS)

   Sony, Wer verwendet FreeBSD?

   Sony Japan, Wer verwendet FreeBSD?

   Sophos, Wer verwendet FreeBSD?

   Soundkarten, Soundkarten einrichten

   SourceForge, Suchen einer Anwendung

   Spectra Logic, Wer verwendet FreeBSD?

   Speicherschutz, Was kann FreeBSD?

   Sprachcodes, Lokale Anpassungen benutzen

   SQL database, Samba absichern

   SSL, mod_ssl

   statische IP-Adresse, PPP konfigurieren

   Stormshield, Wer verwendet FreeBSD?

   Striping, RAID0 - Striping

   Subnetz, Gateways und Routen

   Subversion, Das FreeBSD-Entwicklungsmodell, FreeBSD-STABLE, Benutzen von
   Subversion

   Subversion Repository

                Mirror Sites, Subversion Mirror Sites

   Subversion-Repository, Das FreeBSD-Entwicklungsmodell

   SVN (Siehe Subversion)

   Swap Partition, Ein Partitionslayout entwerfen

   Symmetrisches Multi-Processing (SMP), Was kann FreeBSD?

   sysctl, Einstellungen mit sysctl(8), sysctl.conf

   sysctl.conf, sysctl.conf

   syslog, Konfiguration der Systemprotokollierung, Wartung

   syslog.conf, Konfiguration der lokalen Protokollierung

   syslogd8, Konfiguration der Systemprotokollierung

   system logging, Konfiguration der Systemprotokollierung

   System-Konfiguration, U:bersicht

   System-Optimierung, U:bersicht

  T

   Tabellenkalkulation

                Gnumeric, Gnumeric

                KMyMoney, KMyMoney

   tar, Sicherung von Verzeichnissen

   TCP Bandwidth Delay Product Begrenzung

                net.inet.tcp.inflight.enable , TCP Bandwidth Delay Product
                Begrenzung

   TCP Wrapper, TCP Wrapper

   TCP-Wrapper, Sicherheit unter NIS

   TCP/IP-Netzwerkfa:higkeit, Was kann FreeBSD?

   TELEHOUSE America, Wer verwendet FreeBSD?

   Terminals, Virtuelle Konsolen und Terminals, Terminals

   tether, USB Tethering

   Text Editoren, Text-Editoren

                ee, Text-Editoren

   The GIMP, The GIMP

   The Weather Channel, Wer verwendet FreeBSD?

   traceroute8, Problembehandlung

   traditionelles Chinesisch

                BIG-5 Codierung, Lokalisierung in der Login-Klasse

   TrueOS, Wer verwendet FreeBSD?

   TrueType Schriftarten, TrueType(R)-Schriftarten

   ttyu, Konfiguration der seriellen Schnittstelle

   tunefs8, Soft Updates

   TV-Karten, TV-Karten

  U

   U.C. Berkeley, Kurzer geschichtlicher Abriss zu FreeBSD

   UDP, Einen DHCP-Client konfigurieren

   Umgebungsvariablen, Shells

   UNIX, Zugriffsrechte

   Updating and Upgrading, FreeBSD-Update, Aktualisieren der
   Dokumentationssammlung, Die Dokumentation aus den Ports aktualisieren

   USB

                Speichermedien, USB Speichermedien

  V

   Verisign, Wer verwendet FreeBSD?

   Verschlu:sselung, mod_ssl

   Verzeichnis Hierarchien, Verzeichnis-Strukturen

   Verzeichnisse, Zugriffsrechte

   vfs.hirunningspace, vfs.hirunningspace

   vfs.vmiodirenable, vfs.vmiodirenable

   vfs.write_behind, vfs.write_behind

   vi, Text-Editoren

   Video-Anwendungen, Video-Anwendungen

   vipw, Werkzeuge zum A:ndern der Login-Klasse

   virtual hosts, Virtual Hosts

   Virtual Private Network (Siehe VPN)

   virtuelle Konsole, Virtuelle Konsolen und Terminals

   Virtuelle LANs, VLANs

   virtueller Speicher, Was kann FreeBSD?

   VLANs, VLANs

   vm.swap_idle_enabled, vm.swap_idle_enabled

   Voxer, Wer verwendet FreeBSD?

   VPN, VPN mit IPsec

  W

   Walnut Creek CDROM, Kurzer geschichtlicher Abriss zu FreeBSD

   Weathernews, Wer verwendet FreeBSD?

   Webserver, Was kann FreeBSD?

                dynamisch, Dynamische Webseiten

                konfigurieren, Apache HTTP-Server

                Verschlu:sselung, mod_ssl

   WhatsApp, Wer verwendet FreeBSD?

   Wheel Systems, Wer verwendet FreeBSD?

   Widescreen-Monitor, Konfiguration, Einen Widescreen-Monitor einsetzen

   Williams, Nate, Kurzer geschichtlicher Abriss zu FreeBSD

   Windows, Erzeugen eines einzelnen Einmalpasswortes

   Windows-Treiber, Windows(R)-NDIS-Treiber einsetzen

  X

   X Input Method (XIM), Einrichtung von Xorg

   X-Display-Manager, Der X-Display-Manager

   X-Window-System, Was kann FreeBSD?

   XML, Anti-aliasing

   Xorg, Xorg konfigurieren

   Xorg anpassen, Fehlersuche

   xorg.conf, Fehlersuche

   Xpdf, Xpdf

   XVideo, Video-Schnittstellen

  Y

   Yahoo!, Wer verwendet FreeBSD?

   Yandex, Wer verwendet FreeBSD?

   yellow pages (Siehe NIS)

  Z

   Zonen

                Beispiele, Domain Name System (DNS)

   ZRouter, Wer verwendet FreeBSD?

   Zugriffsrechte, Zugriffsrechte

                symbolische, Symbolische Zugriffsrechte

                                    Kolophon

   Dieses Buch ist aus den Beitra:gen vieler Freiwilliger zum "FreeBSD
   Documentation Project" entstanden. Der Text ist in SGML entsprechend der
   Docbook DTD verfasst. Mit Hilfe von Jade, einem Open Source
   DSSSL-Prozessor, wird er in verschiedene Formate umgewandelt. Die
   Umwandlung wird von Norm Walsh's DSSSL Stylesheets und eigens entwickelten
   Stylesheets gesteuert. Die gedruckte Ausgabe des Buchs wa:re ohne die
   Satzbeschreibungssprache TeX von Donald Knuth, LaTeX von Leslie Lamport
   oder den JadeTeX-Makros von Sebastian Rahtz nicht mo:glich.
