FreeBSD Handbuch

The FreeBSD German Documentation Project

            
          

Willkommen bei FreeBSD! Dieses Handbuch beschreibt die Installation und den täglichen Umgang mit FreeBSD 4.9-RELEASE und FreeBSD 5.1-RELEASE. Das Handbuch ist jederzeit unter Bearbeitung und das Ergebnis der Arbeit vieler Einzelpersonen. Manche Kapitel existieren noch nicht und andere Kapitel müssen auf den neusten Stand gebracht werden. Wenn Sie an diesem Projekt mithelfen möchten, senden Sie bitte eine E-Mail an die Mailingliste 'FreeBSD German Documentation Project' . Die aktuelle Version des Handbuchs ist immer auf dem FreeBSD Web Server verfügbar. Es kann außerdem in verschiedenen Formaten und in komprimierter Form vom FreeBSD FTP Server oder einem der vielen Spiegel herunter geladen werden. Vielleicht möchten Sie das Handbuch auch durchsuchen.

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 von Wind River Systems, Inc. Dies soll sich bald ändern.

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 Ländern.

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

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

Sound Blaster ist ein Warenzeichen von Creative Technology Ltd. in den Vereinigten Staaten und/oder in anderen Ländern.

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

IBM, AIX, OS/2, PowerPC, PS/2 und S/390 sind Warenzeichen der International Business Machines Corporation in den Vereinigten Staaten, anderen Lä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 Ländern.

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

Linux ist ein eingetragenes Warenzeichen von Linus Torvalds in den Vereinigten Staaten.

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

M-Systems und DiskOnChip sind Warenzeichen oder eingetragene Warenzeichen von M-Systems Flash Disk Pioneers, Ltd.

Macromedia, Flash und Shockwave sind Warenzeichen oder eingetragene Warenzeichen von Macromedia, Inc. in den Vereinigten Staaten und/oder in anderen Ländern.

Microsoft, FrontPage, 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 Ländern.

Netscape und Netscape Navigator sind eingetragene Warenzeichen der Netscape Communications Corporation in den Vereinigten Staaten und in anderen Lä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 Ländern.

Oracle ist ein eingetragenes Warenzeichen der Oracle Corporation.

PowerQuest und PartitionMagic sind eingetragene Warenzeichender PowerQuest Corporation in den Vereinigten Staaten und/oder anderen Lä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 Ländern.

SAP, R/3 und mySAP sind Warenzeichen oder eingetragene Warenzeichen der SAP AG in Deutschland und in anderen Ländern der Welt.

Sun, Sun Microsystems, Netra, StarOffice, Sun Blade, Sun Enterprise, Sun Fire, SunOS, Solaris, Ultra und Java sind Warenzeichen oder eingetragene Warenzeichen von Sun Microsystems, Inc. in den Vereinigten Staaten und in anderen Ländern.

Symantec und Ghost sind eingetragene Warenzeichen der Symantec Corporation in den Vereinigten Staaten und in anderen Ländern.

MATLAB ist ein eingetragenes Warenzeichen von The MathWorks, Inc.

SpeedTouch ist ein Warenzeichen von Thomson

U.S. Robotics und Sportster sind eingetragene Warenzeichen der U.S. Robotics Corporation.

VMware ist ein Warenzeichen von VMware, Inc

Waterloo Maple und Maple sind Warenzeichen oder eingetragene Warenzeichen von Waterloo Maple 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 Verkäufern sind Warenzeichen. Soweit dem FreeBSD Project das Warenzeichen bekannt ist, werden die in diesem Dokument vorkommenden Bezeichnungen mit dem Symbol ``™'' oder dem Symbol ``®'' gekennzeichnet.


Inhaltsverzeichnis
Vorwort
I. Erste Schritte
1. Einführung
1.1. Übersicht
1.2. Willkommen bei FreeBSD!
1.3. Das FreeBSD-Projekt
2. Installing FreeBSD (noch nicht übersetzt)
3. Grundlagen des UNIX Betriebssystems
3.1. Übersicht
3.2. Virtuelle Konsolen und Terminals
3.3. Zugriffsrechte
3.4. Verzeichnis-Strukturen
3.5. Prozesse
3.6. Dämonen, Signale und Stoppen von Prozessen
3.7. Festplatten, Slices und Partitionen
3.8. Anhängen und Abhängen von Dateisystemen
3.9. Shells
3.10. Text-Editoren
3.11. Geräte und Gerätedateien
3.12. Binärformate
3.13. Weitere Informationen
4. Installieren von Anwendungen: Pakete und Ports
4.1. Übersicht
4.2. Installation von Software
4.3. Suchen einer Anwendung
4.4. Benutzen des Paketsystems
4.5. Benutzen der Ports-Sammlung
4.6. Nach der Installation
4.7. Kaputte Ports
5. Das X-Window-System
5.1. Übersicht
5.2. X-Grundlagen
5.3. XFree86™ installieren
5.4. XFree86 konfigurieren
5.5. Schriftarten in XFree86 benutzen
5.6. Der X-Display-Manager
5.7. Grafische Oberflächen
II. System Administration
6. Konfiguration und Tuning
6.1. Übersicht
6.2. Vorbereitende Konfiguration
6.3. Basiskonfiguration
6.4. Konfiguration von Anwendungen
6.5. Start von Diensten
6.6. Programme mit cron starten
6.7. Das rc-System für Systemdienste
6.8. Einrichten von Netzwerkkarten
6.9. Virtual Hosts
6.10. Konfigurationsdateien
6.11. Einstellungen mit sysctl
6.12. Tuning von Laufwerken
6.13. Einstellungen von Kernel Limits
6.14. Hinzufügen von Swap-Bereichen
6.15. Energie- und Ressourcenverwaltung
7. FreeBSDs Bootvorgang
7.1. Übersicht
7.2. Das Problem des Bootens
7.3. Der MBR, und die Boot-Phasen Eins, Zwei und Drei
7.4. Kernel Interaktion während des Bootprozesses
7.5. Konfiguration von Geräten
7.6. Init: Initialisierung der Prozess-Kontrolle
7.7. Der Shutdown Vorgang
8. Benutzer und grundlegende Account-Verwaltung
8.1. Übersicht
8.2. Einführung
8.3. Der Superuser-Account
8.4. System-Accounts
8.5. Benutzer-Accounts
8.6. Accounts verändern
8.7. Benutzer einschränken
8.8. Benutzer personalisieren
8.9. Gruppen
9. Konfiguration des FreeBSD Kernels
9.1. Übersicht
9.2. Wieso einen eigenen Kernel bauen?
9.3. Erstellen und Installation eines angepassten Kernels
9.4. Die Kernelkonfigurationsdatei
9.5. Gerätedateien erstellen
9.6. Wenn etwas schiefgeht
10. Sicherheit
10.1. Übersicht
10.2. Einführung
10.3. Absichern von FreeBSD
10.4. DES, MD5, und crypt()
10.5. Einmalpasswörter
10.6. KerberosIV
10.7. Kerberos5
10.8. Firewalls
10.9. OpenSSL
10.10. VPNs mit IPsec
10.11. OpenSSH
10.12. Vorgeschriebene Zugriffskontrolle (MAC)
10.13. Zugriffskontrolllisten für Dateisysteme
11. Drucken
11.1. Übersicht
11.2. Einführung
11.3. Grund-Konfiguration
11.4. * Erweiterte Drucker-Konfiguration
11.5. * Drucken
11.6. * Alternativen zum Standard-LPD-System
11.7. * Fehlersuche und Problembehebung
12. Speichermedien
12.1. Übersicht
12.2. Gerätenamen
12.3. Hinzufügen von Laufwerken
12.4. RAID
12.5. Handhabung von optischen Speichermedien (CDs & DVDs)
12.6. Handhabung von Disketten
12.7. Handhabung von Bandmedien
12.8. Was ist mit Backups auf Disketten?
12.9. Datensicherung
12.10. Netzwerk-, speicher- und dateibasierte Dateisysteme
12.11. Schnappschüsse von Dateisystemen
12.12. Dateisystem-Quotas
12.13. Partitionen verschlüsseln
13. Vinum (noch nicht übersetzt)
14. Lokalisierung - I18N/L10N Einrichtung und Benutzung
14.1. Übersicht
14.2. Grundlagen
14.3. Lokale Anpassungen benutzen
14.4. I18N Programme übersetzen
14.5. Lokalisierung für einzelne Sprachen
15. Desktop-Anwendungen
15.1. Übersicht
15.2. Browser
15.3. Büroanwendungen
15.4. Anzeigen von Dokumenten
15.5. Finanzsoftware
15.6. Zusammenfassung
16. Sound
16.1. Zusammenfassung
16.2. Bestimmen des korrekten Geräts
16.3. Erstellen und Testen der Device Nodes
16.4. MP3 Audio
17. Serielle Datenübertragung
17.1. Übersicht
17.2. Einführung
17.3. Terminals
17.4. Einwählverbindungen
17.5. Verbindungen nach Außen
17.6. Einrichten der seriellen Konsole
18. PPP und SLIP
18.1. Übersicht
18.2. User-PPP
18.3. Kernel-PPP
18.4. Probleme bei PPP-Verbindungen
18.5. PPP over Ethernet (PPPoE)
18.6. PPP over ATM (PPPoA)
18.7. SLIP
19. Weiterführende Netzwerkthemen
19.1. Übersicht
19.2. Gateways und Routen
19.3. Drahtlose Netzwerke
19.4. LAN-Kopplung mit einer Bridge
19.5. NFS - Network File System
19.6. Start und Betrieb von FreeBSD über ein Netzwerk
19.7. ISDN - diensteintegrierendes digitales Netzwerk
19.8. NIS/YP (Network Information Service)
19.9. DHCP - Dynamic Host Configuration Protocol
19.10. DNS (Domain Name Service)
19.11. NTP (Network Time Protocol)
19.12. NATD (Network Address Translation Daemon)
19.13. inetd ``Super-Server''
19.14. Parallel Line IP (PLIP)
19.15. IPv6
20. Elektronische Post (E-Mail)
20.1. Terminologie
20.2. Übersicht
20.3. Elektronische Post benutzen
20.4. sendmail-Konfiguration
20.5. Wechseln des Mailübertragungs-Agenten
20.6. Fehlerbeseitigung
20.7. Weiterführende Themen
20.8. SMTP über UUCP
20.9. E-Mail über Einwahl-Verbindungen
20.10. SMTP-Authentifizierung
21. Das Neueste und Beste
21.1. Übersicht
21.2. FreeBSD-CURRENT vs. FreeBSD-STABLE
21.3. Synchronisation der Quellen
21.4. Bau mit make world
21.5. Installation mehrerer Maschinen
22. Linux-Binärkompatibilität
22.1. Übersicht
22.2. Installation
22.3. Mathematica® installieren
22.4. Maple™ installieren
22.5. MATLAB® installieren
22.6. Oracle® installieren
22.7. SAP® R/3® installieren
22.8. Weiterführende Themen
III. Anhang
A. Bezugsquellen für FreeBSD
A.1. CD-ROM und DVD Verleger
A.2. FTP-Server
A.3. Anonymous CVS
A.4. CTM
A.5. Benutzen von CVSup
A.6. CVS-Tags
A.7. AFS-Server
A.8. rsync-Server
B. Bibliografie
B.1. Bücher und Magazine speziell für FreeBSD
B.2. Handbücher
B.3. Administrations-Anleitungen
B.4. Programmierhandbücher
B.5. Betriebssystem-Interna
B.6. Sicherheits-Anleitung
B.7. Hardware-Anleitung
B.8. UNIX® Geschichte
B.9. Magazine und Journale
C. Ressourcen im Internet
C.1. Mailinglisten
C.2. Usenet-News
C.3. World Wide Web Server
C.4. E-Mail Adressen
C.5. Shell Accounts
D. PGP Schlüssel
D.1. Ansprechpartner
D.2. Mitglieder des Core Teams
D.3. Entwickler
Kolophon
Tabellenverzeichnis
3-1. Laufwerk-Codes
12-1. Namenskonventionen von physikalischen Laufwerken
Beispiele
3-1. Namen von Platten, Slices und Partitionen
3-2. Aufteilung einer Festplatte
4-1. Download vor Installation eines Pakets
6-1. Erstellen einer Swap-Datei mit FreeBSD 4.X
6-2. Erstellen einer Swap-Datei mit FreeBSD 5.X
7-1. boot0 Screenshot
7-2. boot2 Screenshot
7-3. Auf insecure gesetzte Konsole in /etc/ttys
8-1. adduser konfigurieren
8-2. Interaktives Löschen von Account mit rmuser
8-3. Interaktives chpass des Superusers
8-4. Interaktives chpass eines normalen Benutzers
8-5. Wechseln des Passworts
8-6. Als Superuser das Passwort eines anderen Accounts verändern
8-7. Hinzufügen einer Gruppe mit pw
8-8. Ein Gruppenmitglied mit pw hinzufügen
8-9. Mit id die Gruppenzugehörigkeit bestimmen
10-1. Mit SSH einen sicheren Tunnel für SMTP erstellen
12-1. dump mit ssh benutzen
12-2. Ein Beispielskript zum Erstellen eigener Bootdisketten
12-3. Einhängen eines existierenden Abbildes unter FreeBSD 4.X
12-4. Anlegen eines dateibasierten Laufwerks
12-5. Einhängen eines existierenden Abbildes unter FreeBSD 5.X
12-6. Erstellen eines dateibasierten Laufwerks mit mdconfig
12-7. Speicherbasiertes Laufwerk unter FreeBSD 4.X
12-8. Erstellen eines speicherbasierten Laufwerks mit mdconfig
12-9. Erstellen eines speicherbasierten Laufwerks mit mdmfs
17-1. Einträge in /etc/ttys hinzufügen
19-1. Ein exportiertes Dateisystem mit amd in den Verzeichnisbaum einhängen
19-2. Kleines Netzwerk (Privatnetz)
19-3. Großes Netzwerk (Firmennetz)
20-1. Konfigurieren der sendmail Zugriffsdatenbank
20-2. E-Mail Aliases
20-3. Beispiel einer virtuellen Domänen Zuordnung
A-1. ls(1) von -CURRENT auschecken und wieder löschen:
A-2. ls(1) aus dem 3.X-STABLE Zweig auschecken:
A-3. Änderungen in ls(1) zwischen 3.0 RELEASE und 3.4 RELEASE (als unified diff)
A-4. Gültige Modulnamen herausfinden:

Vorwort

Über dieses Buch

Der erste Teil dieses Buchs führt FreeBSD-Einsteiger durch den Installationsprozess und stellt leicht verständlich Konzepte und Konventionen vor, die UNIX® zu Grunde liegen. Sie müssen nur neugierig sein und bereitwillig neue Konzepte aufnehmen, wenn diese vorgestellt werden, um diesen Teil durchzuarbeiten.

Wenn Sie den ersten Teil bewältigt haben, bietet der umfangreichere zweite Teil eine verständliche Darstellung vieler Themen, die für FreeBSD-Administratoren relevant sind. Wenn Kapitel auf anderen Kapiteln aufbauen, wird das in der Übersicht am Anfang eines Kapitels erläutert.

Weitere Informationsquellen entnehmen Sie bitte Anhang B.

Änderungen seit der ersten Auflage

Die zweite Auflage ist das Ergebnis der engagierten Arbeit der Mitglieder des FreeBSD Documentation Projects über zwei Jahre. Die wichtigsten Änderungen gegenüber der ersten Auflage sind:

Gliederung

Dieses Buch ist in drei 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 übersprungen werden. Der zweite Abschnitt, System Administration behandelt weiterführende Themen für erfahrene Benutzer. Jeder Abschnitt beginnt mit einer kurzen Übersicht, die das Thema des Abschnitts und das nötige Vorwissen erläutert. Die Übersichten sollen dem Leser helfen, interessante Kapitel zu finden und das Stöbern im Handbuch erleichtern. Der dritte Abschnitt enthält Anhänge und Verweise auf weitere Informationen.

Kapitel 1, Einführung

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

Kapitel 2, Installation

Beschreibt den Ablauf der Installation. Spezielle Installationsmethoden, wie die Installation mit einer seriellen Konsole, werden ebenfalls behandelt.

Kapitel 3, Grundlagen des UNIX Betriebssystems

Erläutert die elementaren Kommandos und Funktionen von FreeBSD. Wenn Sie schon mit Linux oder einem anderen UNIX System vertraut sind, können Sie dieses Kapitel überspringen.

Kapitel 4, Installieren von Anwendungen

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

Kapitel 5, Das X Window System

Beschreibt das X Window System und geht speziell auf XFree86 unter FreeBSD ein. Weiterhin werden grafische Benutzeroberflächen wie KDE und GNOME behandelt.

Kapitel 6, Konfiguration und Tuning

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

Kapitel 7, FreeBSDs Bootvorgang

Erklärt den Bootprozess von FreeBSD und beschreibt die Optionen, mit denen sich der Bootprozess beeinflussen lässt.

Kapitel 8, Benutzer und grundlegende Account-Verwaltung

Beschreibt, wie Benutzer-Accounts angelegt, verändert und verwaltet werden. Weiterhin wird beschrieben, wie dem Benutzer zur Verfügung stehende Ressourcen beschränkt werden können.

Kapitel 9, Konfiguration des FreeBSD Kernels

Erklärt, warum Sie einen angepassten Kernel erzeugen sollten und gibt ausführliche Anweisungen wie Sie einen angepassten Kernel konfigurieren, bauen und installieren.

Kapitel 10, Sicherheit

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

Kapitel 11, Drucken

Beschreibt, wie Sie Drucker unter FreeBSD verwalten. Diskutiert werden Deckblätter, das Einrichten eines Druckers und ein Abrechnungssystem für ausgedruckte Seiten.

Kapitel 12, Speichermedien

Erläutert den Umgang mit Speichermedien und Dateisystemen. Behandelt werden Plattenlaufwerke, RAID-Systeme, optische Medien, Bandlaufwerke, RAM-Laufwerke und verteilte Dateisysteme.

Kapitel 13, Vinum

Beschreibt den Vinum Volume Manager, der virtuelle Laufwerke, RAID-0, RAID-1 und RAID-5 auf Software-Ebene zur Verfügung stellt.

Kapitel 14, Lokalisierung

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 15, Desktop-Anwendungen

Enthält eine Aufstellung verbreiteter Anwendungen wie Browser, Büroanwendungen und Office-Pakete und beschreibt wie diese Anwendungen installiert werden.

Kapitel 16, Multimedia

Erklärt, wie Sie auf Ihrem System Musik und Videos abspielen können. Beispielhaft werden auch Anwendungen aus dem Multimedia-Bereich beleuchtet.

Kapitel 17, Serielle Datenübertragung

Erläutert, wie Sie Terminals und Modems an Ihr FreeBSD System anschließen und sich so ein- und auswählen können.

Kapitel 18, PPP und SLIP

Erklärt wie Sie mit PPP, SLIP oder PPP über Ethernet ein FreeBSD System mit einem entfernten System verbinden.

Kapitel 19, Weiterführende Netzwerkthemen

Behandelt viele Netz-Themen zum Beispiel wie eine Internet-Verbindung anderen Rechnern im LAN zugänglich gemacht wird, wie Dateisysteme über das Netz genutzt werden, wie Account-Informationen mit NIS zugänglich gemacht werden oder wie ein Nameserver eingerichtet wird.

Kapitel 20, Electronic Mail

Erläutert die verschiedenen Bestandteile eines E-Mail Servers und zeigt einfache Konfigurationen für sendmail, dem meist genutzten E-Mail-Server.

Kapitel 21, Das Neueste und Beste

Erklärt die Unterschiede zwischen FreeBSD-STABLE, FreeBSD-CURRENT und FreeBSD Releases. Das Kapitel enthält Kriterien anhand derer Sie entscheiden können, ob es sich lohnt, ein Entwickler-System zu installieren und aktuell zu halten. Die Vorgehensweise dazu wird ebenfalls beschrieben.

Kapitel 22, Linux-Binärkompatibilität

Beschreibt die binäre Kompatibilität zu Linux. Weiterhin werden ausführliche Installationsanleitungen für Oracle, SAP R/3 und Mathematica gegeben.

Anhang A, Bezugsquellen für FreeBSD

Enthält eine Aufstellung der Quellen von denen Sie FreeBSD beziehen können: CD-ROM, DVD sowie Internet-Sites.

Anhang B, Bibliografie

Dieses Buch behandelt viele Themen und kann nicht alle Fragen erschöpfend beantworten. Die Bibliografie enthält weiterführende Bücher, die im Text zitiert werden.

Anhang C, Ressourcen im Internet

Enthält eine Aufstellung der Foren, die FreeBSD Benutzern für Fragen und Diskussionen zur Verfügung stehen.

Anhang D, PGP Schlüssel

Enthält PGP-Fingerabdrü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

Fü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, Gerä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 gedrückt werden müssen, werden durch ein + zwischen den einzelnen Tasten dargestellt:

Ctrl+Alt+Del

Tasten, die nacheinander gedrückt werden müssen, sind durch Kommas getrennt:

Ctrl+X, Ctrl+S

Das letzte Beispiel bedeutet, dass die Tasten Ctrl und X gleichzeitig betätigt werden und danach die Tasten Ctrl und S gleichzeitig gedrückt werden müssen.

Beispiele

Beispiele, die durch E:\> eingeleitet werden, zeigen ein MS-DOS® Kommando. Wenn nichts Anderes angezeigt wird, können diese Kommandos unter neuen Versionen von Microsoft® Windows® auch in einem DOS-Fenster ausgeführt werden.

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

Beispiele, die mit # beginnen, müssen unter FreeBSD mit Superuser-Rechten ausgefü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 ausgeführt. Sofern nichts Anderes angezeigt wird, verwenden die Beispiele die Syntax der C-Shell.

% top

Danksagung

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

Einige Firmen haben dieses Buch dadurch unterstützt, dass Sie Autoren in Vollzeit beschäftigt und die Veröffentlichung des Buchs finanziert haben. Besonders BSDi, das später von Wind River Systems übernommen wurde, beschäftigte Mitglieder des FreeBSD Documentation Projects, mit dem Ziel dieses Buch zu verbessern. Dadurch wurde die erste (englische) gedruckte Auflage im März 2000 möglich (ISBN 1-57176-241-8). Wind River Systems bezahlte dann weitere Autoren, die die zum Drucken nötige Infrastruktur verbesserten und zusätzliche Kapitel beisteuerten. Das Ergebnis dieser Arbeit ist die zweite (englische) Auflage vom November 2001 (ISBN 1-57176-303-1).

I. Erste Schritte

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

  • geben Ihnen eine Einführung in FreeBSD,

  • geleiten Sie durch den Installationsprozess,

  • erklären Ihnen die Grundlagen von UNIX Systemen,

  • zeigen Ihnen, wie Sie die Fülle der erhältlichen Anwendungen Dritter installieren und

  • führen Sie in X, der Benutzeroberfläche von UNIX Systemen ein. Es wird gezeigt, wie Sie den Desktop konfigurieren, um effektiver arbeiten zu können.

Wir haben uns bemüht, Referenzen auf weiter vorne liegende Textteile auf ein Minimum zu beschränken, so dass Sie diesen Teil des Handbuchs ohne viel Blättern durcharbeiten können.


Kapitel 1. Einführung

Neu zusammengestellt, umstrukturiert und um Abschnitte erweitert durch Jim Mock. Übersetzt von Sascha Edelburg.

1.1. Übersicht

Herzlichen Dank für Ihr Interesse an FreeBSD! Das folgende Kapitel behandelt verschiedene Aspekte des FreeBSD-Projekts wie dessen geschichtliche Entwicklung, dessen Ziele oder dessen Entwicklungsmodell.

Nach dem Durcharbeiten des Kapitels wissen Sie ü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 natürlich wo der Name ``FreeBSD'' herrührt


1.2. Willkommen bei FreeBSD!

FreeBSD ist ein auf 4.4BSD-Lite basierendes Betriebssystem für Intel (x86), DEC Alpha™ und Sun UltraSPARC® Rechner. An Portierungen zu anderen Architekturen wird derzeit gearbeitet. Mehr zu Geschichte von FreeBSD können Sie im kurzen geschichtlichen Abriss zu FreeBSD oder im Abschnitt Das aktuelle FreeBSD-Release nachlesen. Falls Sie das FreeBSD-Projekt unterstützen wollen (mit Quellcode, Hardware- oder Geldspenden) lesen Sie den Artikel Contributing to FreeBSD (derzeit nur in englischer Sprache verfügbar).


1.2.1. Was kann FreeBSD?

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

  • Präemptives Multitasking mit dynamischer Prioritätsanpassung zum reibungslosen und ausgeglichenen Teilen der Systemressourcen zwischen Anwendungen und Anwendern, selbst unter schwerster Last.

  • Der Mehrbenutzerbetrieb von FreeBSD erlaubt es, viele Anwender gleichzeitig am System mit verschiedenen Aufgaben arbeiten zu lassen. Beispielsweise Geräte wie Drucker oder Bandlaufwerke, die sich nur schwerlich unter allen Anwendern des Systems oder im Netzwerk teilen lassen, können durch Setzen von Verwendungsbeschränkungen auf Benutzer oder Benutzergruppen wichtige Systemressourcen vor Überbeanspruchung schützen.

  • Hervorragende TCP/IP-Netzwerkfähigkeit mit Unterstützung der Industriestandards wie SLIP, PPP, NFS, DHCP und NIS. Das heißt, Ihr FreeBSD-System kann in einfachster Weise mit anderen Systemen interagieren. Zudem kann es als Server-System im Unternehmen wichtige Aufgaben übernehmen, beispielsweise als NFS- oder E-Mail-Server oder es kann Ihren Betrieb durch HTTP- und FTP-Server beziehungsweise durch Routing und Firewalling Internet-fähig machen.

  • Der Speicherschutz stellt sicher, dass Anwendungen (oder Anwender) sich nicht gegenseitig stören. Stürzt eine Anwendung ab, hat das keine Auswirkung auf andere Prozesse.

  • FreeBSD ist ein 32-Bit-Betriebssystem (64-Bit auf Alpha und UltraSPARC) und wurde als solches von Grund auf neu entworfen.

  • Das X-Window-System (X11R6) als Industriestandard bietet eine grafische Benutzeroberfläche (GUI). Minimale Voraussetzung zur Verwendung ist lediglich eine Grafikkarte und ein Bildschirm, die beide den VGA-Modus unterstützen.

  • Binärkompatibilität mit vielen unter verschiedenen Betriebssystemen erstellten Programmen wie Linux, SCO, SVR4, BSDI und NetBSD.

  • Tausende von sofort lauffähigen Anwendungen sind aus den Ports- und Packages-Sammlungen für FreeBSD verfügbar. Warum mühselig im Netz Software suchen, wenn sie bereits hier vorhanden ist?

  • Tausende zusätzliche leicht zu portierende Anwendungen sind über das Internet zu beziehen. FreeBSD ist Quellcode-Kompatibel mit den meisten kommerziellen UNIX Systemen. Daher bedürfen Anwendungen häufig nur geringer oder gar keiner Anpassung, um auf einem FreeBSD-System zu kompilieren.

  • Seitenweise anforderbarer Virtueller Speicher und der ``merged VM/buffer cache''-Entwurf bedient effektiv den großen Speicherhunger mancher Anwendungen bei gleichzeitigem Aufrechterhalten der Bedienbarkeit des Systems für weitere Benutzer.

  • SMP-Unterstützung für Mehrprozessorsysteme

  • Ein voller Satz von C, C++, Fortran und Perl Entwicklungswerkzeugen. Viele zusätzliche Programmiersprachen für Wissenschaft und Entwicklung sind aus der Ports- und Packages-Sammlung zu haben.

  • Quellcode für das gesamte System bedeutet größtmögliche Kontrolle über Ihre Umgebung. Warum sollte man sich durch proprietäre Lö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.

FreeBSD basiert auf dem 4.4BSD-Lite-Release der Computer Systems Research Group (CSRG) der Universität von Kalifornien in Berkeley und führt die namhafte Tradition der Entwicklung von BSD-Systemen fort. Zusätzlich zu der herausragenden Arbeit der CSRG hat das FreeBSD-Projekt tausende weitere Arbeitsstunden investiert, um das System zu verfeinern und maximale Leistung und Zuverlässigkeit bei Alltagslast zu bieten. Während viele kommerzielle Riesen Probleme haben PC-Betriebssysteme mit derartigen Funktionen, Leistungpotential und Zuverlässigkeit anzubieten, kann FreeBSD damit schon jetzt aufwarten!

Die Anwendungsmöglichkeiten von FreeBSD werden nur durch Ihre Vorstellungskraft begrenzt. Von Software-Entwicklung bis zu Produktionsautomatisierung, von Lagerverwaltung über Abweichungskorrektur bei Satelliten; Falls etwas mit kommerziellen UNIX Produkten machbar ist, dann ist es höchstwahrscheinlich auch mit FreeBSD möglich. FreeBSD profitiert stark von tausenden hochwertigen Anwendungen aus wissenschaftlichen Instituten und Universitäten in aller Welt. Häufig sind diese für wenig Geld oder sogar kostenlos zu bekommen. Kommerzielle Anwendungen sind ebenso verfügbar und es werden täglich mehr.

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

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

    • FTP-Server

    • HTTP-Server (Standard-Web-Server oder mit SSL-Verschlüsselung)

    • Firewalls und NAT-Gateways (``IP-Masquerading'')

    • E-Mail-Server

    • Usenet-News und Foren (BBS)

    Zum Betreiben von FreeBSD reicht schon ein günstiger 386-PC. Wenn es das Wachstum Ihres Unternehmens verlangt, kann FreeBSD aber auch auf einem hochgerüsteten 4-Wege-System mit Xeon-Prozessoren und RAID-Plattenspeicher Verwendung finden.

  • Bildung: Sind Sie Informatikstudent oder Student eines verwandten Studiengangs? Die praktischen Einblicke in FreeBSD sind die beste Möglichkeit etwas über Betriebssysteme, Rechnerarchitektur und Netzwerke zu lernen. Einige frei erhältliche CAD-, mathematische und grafische Anwendungen sind sehr nützlich, gerade für diejenigen, die FreeBSD nicht zum Selbstzweck, sondern als Arbeitsmittel einsetzen.

  • Wissenschaft: Mit dem frei verfügbaren Quellcode fü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 räumlich getrennte Gruppen gemeinsam an einer Idee oder Entwicklung arbeiten. Das Konzept der freien Verfügbarkeit und -nutzung von FreeBSD ermöglicht so einen Gebrauch, auch ohne sich groß Gedanken über Lizenzbedingungen oder -beschränkungen machen zu müssen.

  • Netzwerkfä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 leistungsfähigen Router mit anspruchsvollen Packet-Filter-Fähigkeiten.

  • X-Window-Workstation: FreeBSD ist eine gute Wahl als kostengünstiges X-Terminal, egal ob mit dem frei erhältlichen XFree86 Server oder mit einem der exzellenten kommerziellen Server von Xi Graphics. Im Gegensatz zu einem X-Terminal erlaubt es FreeBSD, viele Anwendungen lokal laufen zu lassen, was die Last eines zentralen Servers erleichtern kann. FreeBSD kann selbst ``plattenlos'' starten, was einzelne Workstations noch günstiger macht und die Wartung erleichtert.

  • Software-Entwicklung: Das Standard-System von FreeBSD wird mit einem kompletten Satz an Entwicklungswerkzeugen bereitgestellt, unter anderem mit dem bekannten GNU C/C++-Kompiler und -Debugger.

FreeBSD ist sowohl in Form von Quellcode als auch in Binärform auf CD-ROM, DVD und über anonymous FTP erhältlich. Näheres zum Bezug von FreeBSD enthält Anhang A.


1.3. Das FreeBSD-Projekt

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


1.3.1. Kurzer geschichtlicher Abriss zu FreeBSD

Beigesteuert von Jordan Hubbard.

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 mir.

Unser eigentliches Ziel war es, einen zwischenzeitlichen Abzug von 386BSD zu erstellen, um ein paar Probleme zu beseitigen, die das Patchkit-Verfahren nicht lösen konnte. Einige von Ihnen werden sich in dem Zusammenhang noch an die frühen Arbeitstitel ``386BSD 0.5'' oder ``386BSD Interim'' erinnern.

386BSD war das Betriebssystem von Bill Jolitz. Dieses litt bis zu diesem Zeitpunkt heftig unter fast einjähriger Vernachlässigung. Als das Patchkit mit jedem Tag anschwoll und unhandlicher wurde, waren wir einhellig der Meinung, es müsse etwas geschehen. Wir entschieden uns Bill Jolitz zu helfen, indem wir den übergangsweise ``bereinigten'' Abzug zur Verfügung stellten. Diese Pläne wurden unschön durchkreuzt als Bill Jolitz plötzlich seine Zustimmung zu diesem Projekt zurückzog, ohne einen Hinweis darauf, was stattdessen geschehen sollte.

Es hat nicht lange gedauert zu entscheiden, dass das Ziel es wert war, weiterverfolgt zu werden, selbst ohne Bills Unterstützung. Also haben wir den von David Greenman geprägten Namen ``FreeBSD'' angenommen. Unsere anfänglichen Ziele setzten wir nach Rücksprache mit den damaligen Benutzern des Systems fest. Und als deutlich wurde, das Projekt würde möglicherweise Realität, nahm ich Kontakt mit Walnut Creek CDROM auf, mit einem Auge darauf, den Vertriebsweg für die vielen Missbegünstigten zu verbessern, die keinen einfachen Zugang zum Internet hatten. Walnut Creek CDROM unterstützte nicht nur die Idee des CD-ROM-Vertriebs, sondern stellte sogar dem Projekt einen Arbeitsrechner und eine schnelle Internetverbindung zur Verfügung. Ohne den beispiellosen Glauben von Walnut Creek CDROM in ein zu der Zeit absolut unbekanntes Projekt, gäbe es FreeBSD in der heutigen Form wohl nicht.

Die erste auf CD-ROM (und netzweit) verfügbare Veröffentlichung war FreeBSD 1.0 aus dem Dezember 1993. Diese basierte auf dem Band der 4.3BSD-Lite (``Net/2'') der Universität von Kalifornien in Berkeley. Viele Teile wurden aus der 386BSD und der Free Software Foundation gestellt. Gemessen am ersten Angebot, war das ein ziemlicher Erfolg und wir ließen dem das extrem erfolgreiche FreeBSD 1.1 im Mai 1994 folgen.

Zu der Zeit formierten sich unerwartete Gewitterwolken am Horizont, als Novell und die Universität von Kalifornien in Berkeley (UCB) ihren langen Rechtsstreit über den rechtlichen Status des Berkeley Net/2-Bandes mit einem Vergleich beilegten. Eine Bedingung dieser Einigung war es, dass die UCB große 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 endgültigen Verö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 eingeräumt, das auf Net/2-basierende Produkt nicht mehr zu vertreiben. Unter den Bedingungen dieser Ü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 Stück für Stück, aus einem neuen und ziemlich unvollständigen Satz von 4.4BSD-Lite-Teilen, wieder aufzubauen. Die ``Lite''-Veröffentlichungen waren deswegen leicht, weil Berkeleys CSRG große Code-Teile, die für ein start- und lauffähiges System gebraucht wurden, aufgrund diverser rechtlicher Anforderungen entfernen musste und weil die 4.4-Portierung für Intel-Rechner extrem unvollständig war. Das Projekt hat bis November 1994 gebraucht diesen Übergang zu vollziehen, was dann zu dem im Netz veröffentlichten FreeBSD 2.0 und zur CD-ROM-Version (im späten Dezember) führte. Obwohl FreeBSD gerade die ersten Hürden genommen hatte, war dieses Release ein maßgeblicher Erfolg. Diesem folgte im Juni 1995 das robustere und einfacher zu installierende FreeBSD 2.0.5.

Im August 1996 veröffentlichten wir FreeBSD 2.1.5. Es schien unter ISPs und der Wirtschaft beliebt genug zu sein, ein weiteres Release aus dem 2.1-STABLE-Zweig zu rechtfertigen. Das war FreeBSD 2.1.7.1. Es wurde im Februar 1997 veröffentlicht und bildete das Ende des Hauptentwicklungszweiges 2.1-STABLE. Derzeit unterliegt dieser Zweig dem Wartungsmodus, das heißt, es werden nur noch Sicherheitsverbesserungen und die Beseitigung von kritischen Fehlern vorgenommen (RELENG_2_1_0).

FreeBSD 2.2 entsprang dem Hauptentwicklungszweig (``-CURRENT'') im November 1996 als RELENG_2_2-Zweig und das erste komplette Release (2.2.1) wurde im April 1997 herausgegeben. Weitere Veröffentlichungen des 2.2-Zweiges gab es im Sommer und Herbst 1997. Das letzte Release des 2.2-Zweiges bildete die Version 2.2.8 und erschien im November 1998. Das erste offizielle 3.0-Release tauchte im Oktober 1998 auf und läutete das Endes des 2.2-Zweiges ein.

Am 20. Januar 1999 teilte sich der Quellbaum erneut und führte zu den Zweigen 4.0-CURRENT und 3.X-STABLE. Auf dem 3.X-STABLE-Zweig wurden folgende Releases erstellt: 3.1 am 15. Februar 1999, 3.2 am 15. Mai 1999, 3.3 am 16. September 1999, 3.4 am 20. Dezember 1999 und 3.5 am 24. Juni 2000 veröffentlicht. Dem letzten folgte ein paar Tage später das Release 3.5.1, welches einige akute Sicherheitslöcher von Kerberos stopfte. Es ist die letzte Veröffentlichung des 3.X-Zweiges.

Es folgte eine weitere Aufspaltung am 13. März 2000 aus dem der 4.X-STABLE-Zweig hervorging, welcher zurzeit als der ``stabile Zweig'' angesehen wird. Bis jetzt gab es mehrere Veröffentlichungen aus diesem Zweig: 4.0-RELEASE erschien im März 2000 und das neuste 4.9-RELEASE erschien im October 2003. Bis ins Jahr 2003 wird es weitere Veröffentlichungen aus dem 4.X-STABLE-Zweig (RELENG_4) geben.

Das lang erwartete 5.0-RELEASE wurde am 19. Januar 2003 veröffentlicht. Nach nahezu drei Jahren brachte diese Release weiterentwickelte Unterstützung für Mehrprozessor-Systeme und Unterstützung für Multithreading. Mit dieser Release lief FreeBSD erstmalig auf den Plattformen UltraSPARC und ia64. Im Juni 2003 folgte das 5.1-RELEASE. Neben neuen Funktionen brachten die 5.X-Releases auch weitreichende Änderungen der Systemarchitektur. Dadurch enthält das System eine enorme Menge neuen Code, der nicht weit gehend ausgetestet ist. Die 5.X-Releases werden daher als ``Neue Technik'' bezeichnet, während die 4.X-Releases als ``produktionsreif'' bezeichnet werden. Mit der Zeit wird sich der 5.X-Zweig stabilisieren, danach wird die Entwicklung auf einem neuen Zweig, 6.0-CURRENT, weitergeführt.

Zurzeit werden Projekte mit langem Entwicklungshorizont noch im Zweig 5.0-CURRENT verfolgt und Schnappschüsse von 5.0 auf CD-ROM (und natürlich im Netz) werden bei fortlaufender Entwicklung auf dem Snapshot-Server zur Verfügung gestellt.


1.3.2. Ziele des FreeBSD-Projekts

Beigesteuert von Jordan Hubbard.

Das FreeBSD-Projekt stellt Software her, die ohne Einschränkungen für beliebige Zwecke eingesetzt werden kann. Viele von uns haben beträchtlich in Quellcode und Projekt investiert und hätten sicher nichts dagegen, hin und wieder ein wenig finanziellen Ausgleich dafür zu bekommen. Aber in keinem Fall bestehen wir darauf. Wir glauben unsere erste und wichtigste ``Mission'' ist es, Software für jeden Interessierten und zu jedem Zweck zur Verfügung zu stellen, damit die Software größtmögliche Verbreitung erlangt und größtmöglichen Nutzen stiftet. Das ist, glaube ich, eines der grundlegenden Ziele freier Software, welche wir mit größter Begeisterung unterstützen.

Der Code in unserem Quellbaum, der unter die General Public License (GPL) oder die Library General Public License (LGPL) fällt, stellt geringfügig mehr Bedingungen. Das aber vielmehr im Sinne von eingefordertem Zugriff, als das übliche Gegenteil der Beschränkungen. Aufgrund zusätzlicher Abhä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 Entwicklungsmodell von FreeBSD

Beigesteuert von Satoshi Asami.

Die Entwicklung von FreeBSD ist ein offener und vielseitiger Prozess. FreeBSD besteht aus Beisteuerungen von Hunderten Leuten rund um die Welt, wie Sie aus der Liste der Beitragenden ersehen können. Die vielen Entwickler können aufgrund der Entwicklungs-Infrastruktur von FreeBSD über das Internet zusammenarbeiten. Wir suchen stä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 für wichtige Ankündigungen, die alle FreeBSD-Benutzer betreffen, zur Verfügung.

Unabhängig davon ob Sie alleine oder mit anderen eng zusammen arbeiten, enthält die folgende Aufstellung nützliche Informationen über das FreeBSD-Projekt und dessen Entwicklungsabläufe.

Das CVS-Repository

Der Hauptquellbaum von FreeBSD wird mit CVS gepflegt, einem frei erhältlichen Versionskontrollsystem, welches mit FreeBSD geliefert wird. Das Haupt- CVS-Repository läuft auf einer Maschine in Santa Clara, Kalifornien, USA. Von dort wird es auf zahlreiche Server in aller Welt gespiegelt. Der CVS-Quellbaum, der die Zweige -CURRENT und -STABLE enthält, kann einfach auf Ihr eigenes System gespiegelt werden. Näheres dazu können Sie im Handbuch unter Synchronisation der Quellen in Erfahrung bringen.

Die Committer-Liste

Die Committer sind Personen mit Schreibzugriff auf den CVS-Quellbaum (der Begriff ``Committer'' stammt vom cvs(1)-Befehl commit, der zum Einspeisen von Änderungen ins Repository gebraucht wird). Der beste Weg, Vorschläge zur Prüfung durch die Mitglieder der Committer-Liste einzureichen, bietet der Befehl send-pr(1). Sollte es unerwartete Probleme mit diesem Verfahren geben, besteht immer noch die Möglichkeit eine E-Mail an die Liste ``FreeBSD committers'' zu schicken.

Das FreeeBSD-Core-Team

Würde man das FreeBSD-Projekt mit einem Unternehmen vergleichen, so wäre das FreeBSD-Core-Team das Gegenstück zum Vorstand. Die Hauptaufgabe des Core-Teams ist es, das Projekt als Ganzes in gesunder Verfassung zu halten und die weitere Entwicklung in die richtige Bahn zu lenken. Das Anwerben leidenschaftlicher und verantwortungsbewusster Entwickler ist eine Aufgabe des Core-Team, genauso wie die Rekrutierung neuer Mitglieder für das Core-Team, im Falle, dass Altmitglieder aus dem Projekt aussteigen. Das derzeitige Core-Team wurde im Juni 2002 aus einem Kreis kandidierender Committer gewählt. Wahlen werden alle zwei Jahre abgehalten.

Einige Core-Team-Mitglieder haben auch spezielle Verantwortungsbereiche. Das bedeutet, Sie haben sich darauf festgelegt, sicherzustellen, dass ein größerer Teil des Systems so funktioniert wie ausgewiesen. Eine vollständige Liste an FreeBSD beteiligter Entwickler und ihrer Verantwortungsbereiche kann in der Liste der Beitragenden eingesehen werden.

Anmerkung: Die Mehrzahl der Mitglieder des Core-Teams sind Freiwillige in Bezug auf die FreeBSD-Entwicklung und profitieren nicht finanziell vom Projekt. Daher sollte ``Verpflichtung'' nicht als ``garantierter Support'' fehlinterpretiert werden. Der oben angeführte Vergleich mit einem Vorstand hinkt und es wäre angebrachter zu erwähnen, dass diese Leute - wider besseres Wissen - ihr eigenes Leben für FreeBSD aufgegeben haben!

Weitere Beitragende

Als letztes, aber mit Sicherheit nicht das Unwichtigste, ist die größte Gruppe der Entwickler - die Anwender selbst, die Rückmeldungen und Fehlerbehebungen in einem anhaltend hohen Maße an uns senden. Der bevorzugte Weg an dem weniger zentralisierten Bereich der FreeBSD-Entwicklung teilzuhaben, ist die Möglichkeit sich bei der Liste FreeBSD technical discussions anzumelden. Weitere Informationen über die verschiedenen FreeBSD-Mailinglisten erhalten Sie in Anhang C.

Die Liste der zu FreeBSD Beitragenden ist eine lange und wachsende. Also warum nicht selbst dort stehen, indem Sie gleich persönlich etwas zu FreeBSD beitragen?

Quellcode ist nicht der einzige Weg, etwas zum Projekt beizusteuern. Eine genauere Übersicht über offene Aufgaben finden Sie auf der FreeBSD-Web-Site.

Zusammengefasst bildet unser Entwicklungsmodell einen losen Verbund konzentrischer Kreise. Das zentralisierte Modell ist auf die Bedürfnisse der Anwender zugeschnitten, mit der einfachen Möglichkeit eine zentrale Code-Basis zu verfolgen und möglichen neuen Beitragenden nicht das Leben zu erschweren! Unser Ziel ist es, ein stabiles Betriebssystem mit einer großen Zahl passender Programme zu bieten, die der Anwender leicht installieren und anwenden kann. Und dieses Modell funktioniert für diese Aufgabe ziemlich gut.

Das Einzige was wir von möglichen neuen Mitgliedern fordern, ist die gleiche Hingabe, mit der die jetzigen Mitglieder am dauerhaften Erfolg arbeiten!


1.3.4. Das aktuelle FreeBSD-Release

FreeBSD ist ein (mit vollem Quellcode und ein frei erhältliches) auf 4.4BSD-Lite-basierendes Release für Intel i386™, i486™, Pentium®, Pentium Pro, Celeron®, Pentium II, Pentium III, Pentium 4 (oder ein dazu kompatibler Prozessor), Xeon™, DEC Alpha und Sun UltraSPARC Systeme. Es stützt sich zum größten Teil auf Software der Computer Systems Research Group (CSRG) der Universität von Kalifornien in Berkeley mit einigen Verbesserungen aus NetBSD, OpenBSD, 386BSD und der Free Software Foundation.

Seit unserem FreeBSD 2.0 vom Ende 1994, hat sich Leistung, Funktionsvielfalt und Stabilität dramatisch verbessert. Die größte Änderung erfuhr das virtuelle Speichermanagement durch eine Kopplung von virtuellem Speicher und dem Buffer-Cache, das nicht nur die Leistung steigert, sondern auch den Hauptspeicherverbrauch reduziert und ein 5 MB-System zu einem nutzbaren Minimal-System verhilft. Weitere Verbesserungen sind volle NIS-Client- und Server-Unterstützung, T/TCP, Dial-On-Demand-PPP, integriertes DHCP, ein verbessertes SCSI-Subsystem, ISDN-Support, Unterstützung für ATM-, FDDI-, Fast- und Gigabit-Ethernet-Karten (1000 Mbit), verbesserter Support der neusten Adaptec-Controller und tausende Fehlerkorrekturen.

Zusätzlich zur Standard-Distribution bietet FreeBSD eine Sammlung von portierter Software mit tausenden begehrten Programmen. Zum Verfassungszeitpunkt waren über 9,200 Anwendungen in der Ports-Sammlung! Das Spektrum der Ports-Sammlung reicht von HTTP-Servern über Spiele, Programmiersprachen, Editoren und so ziemlich allem dazwischen. Die gesamte Ports-Sammlung benötigt 300 MB an Speicherplatz, wobei jeder Port anhand eines ``Deltas'' zu den Quellen angegeben wird. Das macht es für uns erheblich leichter, Ports zu aktualisieren und es verringert den Plattenbedarf im Vergleich zur älteren 1.0-Port-Sammlung. Um ein Port zu übersetzen, müssen Sie einfach ins Verzeichnis des Programms wechseln und ein make install absetzen. Den Rest erledigt das System. Die originalen Quellen jedes zu installierenden Port werden dynamisch von CD-ROM oder einem FTP-Server bezogen. Es reicht also für genügend Plattenplatz zu sorgen, um die gewünschten Ports zu erstellen. Allen, die Ports nicht selbst kompilieren wollen: Es gibt zu fast jedem Port ein vorkompiliertes Paket, das einfach mit dem Befehl (pkg_add) installiert wird. Pakete und Ports werden in Kapitel 4 beschrieben.

Eine Reihe von weiteren Dokumenten, die sich als hilfreich bei der Installation oder dem Arbeiten mit FreeBSD erweisen könnten, liegen auf neueren FreeBSD-Systemen im Verzeichnis /usr/share/doc. Die lokal installierten Anleitungen lassen sich mit jedem HTML-fähigen Browser unter folgenden Adressen betrachten:

Es besteht auch die Möglichkeit, die (am häufigst-aktualisierten) Referenzdokumente unter http://www.FreeBSD.org/ anzusehen.


Kapitel 2. Installing FreeBSD (noch nicht übersetzt)

Dieses Kapitel ist noch nicht übersetzt. Lesen Sie bitte das Original in englischer Sprache.


Kapitel 3. Grundlagen des UNIX Betriebssystems

Umgeschrieben von Chris Shumway. Übersetzt von Uwe Pierau.

3.1. Übersicht

Das folgende Kapitel umfasst die grundlegenden Kommandos und Funktionsweisen des Betriebssystems FreeBSD. Viel von dem folgenden Material gilt auch für jedes andere UNIX System. Falls Sie mit dem Material schon vertraut sind, können Sie dieses Kapitel überlesen. Wenn FreeBSD neu für Sie ist, dann sollten Sie dieses Kapitel auf jeden Fall aufmerksam lesen.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

  • wie Sie mit virtuellen Konsolen umgehen.

  • wie Zugriffsrechte unter UNIX Systemen funktionieren,

  • wie Sie Zugriffskontrolllisten für Dateisysteme konfigurieren,

  • wie Dateisysteme unter FreeBSD organisiert sind,

  • wie Dateisysteme eingehangen und abgehangen werden,

  • was Prozesse, Dämonen und Signale sind,

  • was eine Shell ist und wie Sie die Login Umgebung ändern,

  • wie Sie mit Texteditoren umgehen,

  • was Geräte und Gerätedateien sind,

  • welches Binärformat in FreeBSD benutzt wird, und

  • wie Sie in den Manualpages nach weiteren Informationen suchen können.


3.2. Virtuelle Konsolen und Terminals

Sie können FreeBSD mit einem Terminal benutzen, der nur Text darstellen kann. Wenn Sie FreeBSD auf diese Weise benutzen, stehen Ihnen alle Möglichkeiten eines UNIX Betriebssystems zur Verfügung. Dieser Abschnitt beschreibt was Terminals und Konsolen sind und wie sie unter FreeBSD eingesetzt werden.


3.2.1. Die Konsole

Wenn Ihr FreeBSD System ohne eine graphische Benutzeroberfläche startet, wird am Ende des Systemstarts, nachdem die Startskripten gelaufen sind, ein Anmeldeprompt ausgegeben. Die letzten Startmeldungen sollten ähnlich wie die Folgenden aussehen:

Additional ABI support:.
Local package initialization:.
Additional TCP options:.

Fri Sep 20 13:01:06 EEST 2002

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

login:

Beachten Sie die letzten beiden Zeilen der Ausgabe, die vorletzte lautet:

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

Diese Zeile enthält einige Informationen über das gerade gestartete System. Die Ausgabe stammt von der FreeBSD-Konsole einer Maschine mit einem Intel oder Intel-kompatiblen Prozessor der x86-Architektur[1]. Der Name des Systems (jedes UNIX System besitzt einen Namen) ist pc3.example.org und die Ausgabe stammt von der Systemkonsole, dem Terminal ttyv0.

Das Ende der Ausgabe ist immer die Aufforderung zur Eingabe eines Benutzernamens:

login:

Der Anmeldevorgang wird im nächsten Abschnitt erläutert.


3.2.2. Der Anmeldevorgang

FreeBSD ist ein Mehrbenutzersystem, das Multitasking unterstützt. Das heißt mehrere Benutzer können gleichzeitig viele Programme auf einem System laufen lassen.

Jedes Mehrbenutzersystem muss die Benutzer voneinander unterscheiden können. In FreeBSD und allen anderen UNIX Betriebssystemen wird dies dadurch erreicht, dass sich die Benutzer anmelden müssen, bevor sie Programme laufen lassen können. Jeder Benutzer besitzt einen eindeutigen Namen (den Account) und ein dazugehörendes Passwort, die beide bei der Anmeldung abgefragt werden.

Nachdem FreeBSD gestartet ist und die Startskripten[2], gelaufen sind, erscheint eine Aufforderung zur Eingabe des Benutzernamens:

login:

Wenn Ihr Benutzername beispielsweise john ist, geben Sie jetzt john gefolgt von Enter ein. Sie sollten dann eine Aufforderung zur Eingabe des Passworts erhalten:

login: john
Password:

Geben Sie jetzt das Passwort von john gefolgt von Enter ein. Das Passwort wird aus Sicherheitsgründen nicht auf dem Bildschirm angezeigt.

Wenn Sie das richtige Passwort eingegeben haben, sind Sie am System angemeldet und können nun alle verfügbaren Kommandos absetzen.

Anmgemeldet sind Sie, wenn Sie die Tagesmeldungen (message of today) gefolgt von einer Eingabeaufforderung (dem Zeichen #, $ oder %) gesehen haben.


3.2.3. Virtuelle Konsolen

Da FreeBSD mehrere Programme gleichzeitig laufen lassen kann, ist eine einzige Konsole, an der Kommandos abgesetzt werden können, zu wenig. Abhilfe schaffen virtuelle Konsolen, die mehrere Konsolen zur Verfügung stellen.

Die Anzahl der virtuellen Konsolen unter FreeBSD können Sie einstellen. Zwischen den einzelnen Konsolen können Sie mit speziellen Tastenkombinationen wechseln. Jede Konsole verfügt über einen eigenen Ausgabekanal und FreeBSD ordnet die Tastatureingaben und Monitorausgaben der richtigen Konsole zu, wenn Sie zwischen den Konsolen wechseln.

Zum Umschalten der Konsolen stellt FreeBSD spezielle Tastenkombinationen bereit[3]. Benutzen Sie Alt-F1, Alt-F2 bis Alt-F8, um zwischen den verschiedenen Konsolen umzuschalten.

Wenn Sie zu einer anderen Konsole wechseln, sichert FreeBSD den Bildschirminhalt und gibt den Bildschirminhalt der neuen Konsole aus. Dies erzeugt die Illusion mehrerer Bildschirme und Tastaturen, an denen Sie Kommandos absetzen können. Wenn eine Konsole nicht sichtbar ist, weil Sie auf eine andere Konsole gewechselt haben, laufen die dort abgesetzten Kommandos weiter.


3.2.4. /etc/ttys

In der Voreinstellung stehen unter FreeBSD acht virtuelle Konsolen zur Verfügung, deren Anzahl Sie leicht erhöhen oder erniedrigen können. Die Anzahl und Art der Konsolen wird in /etc/ttys eingestellt.

Jede Zeile in /etc/ttys, die nicht mit # anfängt, konfiguriert einen Terminal oder eine virtuelle Konsole. In der Voreinstellung werden in dieser Datei neun virtuelle Konsolen definiert, von denen acht aktiviert sind. Die Konsolen sind in den Zeilen, die mit ttyv beginnen, definiert:

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

Die Hilfeseite ttys(5) enthält eine ausführliche Beschreibung der Spalten dieser Datei und der Optionen, die Sie zum Konfigurieren der virtuellen Konsolen benutzen können.


3.2.5. Die Konsole im Single-User-Modus

Eine eingehende Beschreibung des Single-User-Modus finden Sie in Abschnitt 7.6.2. Im Single-User-Modus steht Ihnen nur eine Konsole zur Verfügung. Die Definition dieser Konsole befindet sich ebenfalls in /etc/ttys. Suchen Sie nach einer Zeile, die mit console beginnt:

# 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

Anmerkung: In der Zeile, die mit console beginnt, können Sie secure durch insecure ersetzen. Wenn Sie danach in den Single-User-Modus booten, verlangt das System ebenfalls die Eingabe des root-Passworts.

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


3.3. Zugriffsrechte

FreeBSD, das ein direkter Abkömmling von BSD UNIX ist, stützt sich auf mehrere Grundkonzepte von UNIX Systemen. Das erste und ausgeprägteste: FreeBSD ist ein Mehrbenutzer Betriebssystem. Das System ermöglicht, dass mehrere Benutzer gleichzeitig an völlig verschiedenen und unabhängigen Aufgaben arbeiten können. Es ist verantwortlich für eine gerechte Auf- und Zuteilung von Nachfragen nach Hardware- und Peripheriegeräten, Speicher und CPU Zeit unter den Benutzern.

Da das System mehrere Benutzer unterstützt, hat alles, was das System verwaltet, einen Satz von Rechten, die bestimmen, wer die jeweilige Ressource lesen, schreiben oder ausführen darf. Diese Zugriffsrechte stehen in drei Achtergruppen, die in drei Teile unterteilt sind: einen für den Besitzer der Datei, einen für die Gruppe, zu der die Datei gehört und einen für alle anderen. Die numerische Darstellung sieht wie folgt aus:

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

Sie können -l auf der Kommandozeile von ls(1) angeben, um eine ausführliche Verzeichnisauflistung zu sehen, die in einer Spalte die Zugriffsrechte für den Besitzer, die Gruppe und alle anderen enthält. Die Ausgabe von ls -l kö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
...

Die erste Spalte der Ausgabe enthält die Zugriffsrechte:

-rw-r--r--

Das erste Zeichen von links ist ein Symbol, welches angibt, ob es sich um eine normale Datei, ein Verzeichnis, ein Character-Device, ein Socket oder irgendeine andere Pseudo-Datei handelt. In diesem Beispiel zeigt - eine normale Datei an. Die nächsten drei Zeichen, dargestellt als rw-, ergeben die Rechte für den Datei-Besitzer. Die drei Zeichen danach r-- die Rechte der Gruppe, zu der die Datei gehört. Die letzten drei Zeichen, r--, geben die Rechte für den Rest der Welt an. Ein Minus bedeutet, dass das Recht nicht gegeben ist. In diesem Fall sind die Zugriffsrechte also: der Eigentümer kann die Datei lesen und schreiben, die Gruppe kann lesen und alle anderen können auch nur lesen. Entsprechend obiger Tabelle wären die Zugriffsrechte für diese Datei 644, worin jede Ziffer die drei Teile der Zugriffsrechte dieser Datei verkörpert.

Das ist alles schön und gut, aber wie kontrolliert das System die Rechte von Hardware Geräten? FreeBSD behandelt die meisten Hardware Geräte als Dateien, welche Programme öffnen, lesen und mit Daten beschreiben können wie alle anderen Dateien auch. Diese Spezial-Dateien sind im Verzeichnis /dev gespeichert.

Verzeichnisse werden ebenfalls wie Dateien behandelt. Sie haben Lese-, Schreib- und Ausführ-Rechte. Das Ausführungs-Bit hat eine etwas andere Bedeutung für ein Verzeichnis als für eine Datei. Die Ausführbarkeit eines Verzeichnisses bedeutet, dass in das Verzeichnis zum Beispiel mit cd 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 löschen, müssen auf dem Verzeichnis Schreib- und Ausführ-Rechte gesetzt sein.

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


3.3.1. Symbolische Zugriffsrechte

Beigesteuert von Tom Rhodes.

Die Zugriffsrechte lassen sich auch über Symbole anstelle von oktalen Werten festlegen. Symbolische Zugriffsrechte werden in der Reihenfolge Wer, Aktion und Berechtigung angegeben. Die folgenden Symbole stehen zur Auswahl:

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

Symbolische Zugriffsrechte werden wie die numerischen mit dem Kommando chmod(1) vergeben. Wenn Sie beispielsweise allen anderen Benutzern den Zugriff auf die Datei FILE verbieten wollen, benutzen Sie den nachstehenden Befehl:

% chmod go= FILE

Wenn Sie mehr als eine Änderung der Rechte einer Datei vornehmen wollen, können Sie eine durch Kommata getrennte Liste der Rechte angeben. Das folgende Beispiel entzieht der Gruppe und der Welt (den anderen) die Schreibberechtigung auf die Datei FILE und fügt dann für alle Ausführungsrechte hinzu:

% chmod go-w,a+x FILE

3.4. Verzeichnis-Strukturen

Die FreeBSD Verzeichnis Hierarchie ist die Grundlange, um ein umfassendes Verständnis des Systems zu erlangen. Das wichtigste Konzept, das Sie verstehen sollten, ist das Root-Verzeichnis ``/''. Dieses Verzeichnis ist das erste, das während des Bootens eingehangen wird. Es enthält das notwendige Basissystem, um das System in den Mehrbenutzerbetrieb zu bringen. Das Root-Verzeichnis enthält auch die Mountpunkte anderer Dateisysteme, die später eingehangen werden.

Ein Mountpunkt ist ein Verzeichnis, in das zusätzliche Dateisysteme in das / Verzeichnis eingepflanzt werden können. Standard Mountpunkte beinhalten /usr, /var, /mnt und /cdrom. Auf diese Verzeichnisse verweisen üblicherweise Einträge in der Datei /etc/fstab. /etc/fstab ist eine Tabelle mit verschiedenen Dateisystemen und Mountpunkten als Referenz des Systems. Die meisten der Dateisysteme in /etc/fstab werden beim Booten automatisch durch das Skript rc(8) gemountet, wenn die zugehörigen Einträge nicht mit der Option noauto versehen sind. Konsultieren Sie die fstab(5) Manualpage für mehr Informationen über das Format der Datei /etc/fstab und den Optionen darin.

Eine vollständige Beschreibung der Dateisystem-Hierarchie finden Sie in hier(7). Als Beispiel sei eine kurze Übersicht über die gebräuchlisten Verzeichnisse gegeben:

Verzeichnis Beschreibung
/ Root-Verzeichnis des Dateisystems.
/bin/ Grundlegende Werkzeuge für den Single-User-Modus sowie den Mehrbenutzerbetrieb.
/boot/ Programme und Konfigurationsdateien, die während des Bootens benutzt werden.
/boot/defaults/ Vorgaben für die Boot-Konfiguration, siehe loader.conf(5).
/dev/ Gerätedateien, siehe intro(4).
/etc/ Konfigurationsdateien und Skripten des Systems.
/etc/defaults/ Vorgaben für die System Konfigurationsdateien, siehe rc(8).
/etc/mail/ Konfigurationsdateien von MTAs wie sendmail(8).
/etc/namedb/ Konfigurationsdateien von named, siehe named(8).
/etc/periodic/ Täglich, wöchentlich oder monatlich ablaufende Skripte, die von cron(8) gestartet werden. Siehe periodic(8).
/etc/ppp/ Konfigurationsdateien von ppp, siehe ppp(8).
/mnt/ Ein leeres Verzeichnis, das von Systemadministratoren häufig als temporärer Mountpunkt genutzt wird.
/proc/ Prozess Dateisystem, siehe procfs(5) und mount_procfs(8).
/root/ Home Verzeichnis von root.
/sbin/ Systemprogramme und administrative Werkzeuge, die grundlegend für den Single-User-Modus und den Mehrbenutzerbetrieb sind.
/stand/ Programme, die ohne andere Programme oder Bibliotheken laufen.
/tmp/ Temporäre Dateien, die für gewöhnlich nicht nach einem Reboot erhalten werden. Dies kann ein speicherbasiertes Dateisystem, siehe mfs(8), sein.
/usr/ Der Großteil der Benutzerprogramme und Anwendungen.
/usr/bin/ Gebräuchliche Werkzeuge, Programmierhilfen und Anwendungen.
/usr/include/ Standard C include-Dateien.
/usr/lib/ Bibliotheken.
/usr/libdata/ Daten verschiedener Werkzeuge.
/usr/libexec/ System-Dämonen und System-Werkzeuge, die von anderen Programmen ausgeführt werden.
/usr/local/ Lokale Programme, Bibliotheken usw. Die Ports-Sammlung benutzt dieses Verzeichnis als Zielverzeichnis für zu installierende Anwendungen. Innerhalb von /usr/local sollte das von hier(7) beschriebene Layout fü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 abhängiger Verzeichnisbaum, der durch das Bauen von /usr/src entsteht.
/usr/ports Die FreeBSD Ports-Sammlung (optional).
/usr/sbin/ System-Dämonen und System-Werkzeuge, die von Benutzern ausgeführt werden.
/usr/share/ Von der Architektur unabhängige Dateien.
/usr/src/ Quelldateien von BSD und/oder lokalen Ergänzungen.
/usr/X11R6/ Optionale X11R6 Programme und Bibliotheken.
/var/ Wird für mehrere Zwecke genutzt und enthält Logdateien, temporäre Daten und Spooldateien.
/var/log/ Verschiedene Logdateien des Systems.
/var/mail/ Postfächer der Benutzer.
/var/spool/ Verschiedene Spool-Verzeichnisse der Drucker- und Mailsysteme.
/var/tmp/ Temporäre Dateien, die über Reboots erhalten bleiben.
/var/yp NIS maps.



3.5. Prozesse

Da FreeBSD ein Multitasking Betriebssystem ist, sieht es so aus, als ob mehrere Prozesse zur gleichen Zeit laufen. Jedes Programm, das zu irgendeiner Zeit läuft, wird Prozess genannt. Jedes Kommando startet mindestens einen Prozess. Einige Systemprozesse laufen ständig und stellen die Funktion des Systems sicher.

Jeder Prozess wird durch eine eindeutige Nummer identifiziert, die Prozess-ID oder PID genannt wird. Prozesse haben ebenso wie Dateien einen Besitzer und eine Gruppe, die festlegen, welche Dateien und Geräte der Prozess benutzen kann. Dabei finden die vorher beschriebenen Zugriffsrechte Anwendung. Die meisten Prozesse haben auch einen Elternprozess, der sie gestartet hat. Wenn Sie in der Shell Kommandos eingeben, dann ist die Shell ein Prozess und jedes Kommando, das Sie starten, ist auch ein Prozess. Jeder Prozess, den Sie auf diese Weise starten, besitzt den Shell-Prozess als Elternprozess. Die Ausnahme hiervon ist ein spezieller Prozess, der init(8) heißt. init ist immer der erste Prozess und hat somit die PID 1. init wird vom Kernel beim Booten von FreeBSD gestartet.

Die Kommandos ps(1) und top(1) sind besonders nützlich, um sich die Prozesse auf einem System anzusehen. ps zeigt eine statische Liste der laufenden Prozesse und kann deren PID, Speicherverbrauch und die Kommandozeile, mit der sie gestartet wurden und vieles mehr anzeigen. top zeigt alle laufenden Prozesse an und aktualisiert die Anzeige, so dass Sie Ihrem Computer bei der Arbeit zuschauen können.

Normal zeigt Ihnen ps nur die laufenden Prozesse, die Ihnen gehören. Zum Beispiel:

% ps
  PID  TT  STAT      TIME COMMAND
  298  p0  Ss     0:01.10 tcsh
 7078  p0  S      2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
37393  p0  I      0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
48630  p0  S      2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
48730  p0  IW     0:00.00 (dns helper) (navigator-linux-)
72210  p0  R+     0:00.00 ps
  390  p1  Is     0:01.14 tcsh
 7059  p2  Is+    1:36.18 /usr/local/bin/mutt -y
 6688  p3  IWs    0:00.00 tcsh
10735  p4  IWs    0:00.00 tcsh
20256  p5  IWs    0:00.00 tcsh
  262  v0  IWs    0:00.00 -tcsh (tcsh)
  270  v0  IW+    0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
  280  v0  IW+    0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
  284  v0  IW     0:00.00 /bin/sh /home/nik/.xinitrc
  285  v0  S      0:38.45 /usr/X11R6/bin/sawfish

Wie Sie sehen, gibt ps(1) mehrere Spalten aus. In der PID Spalte findet sich die vorher besprochene Prozess-ID. PIDs werden von 1 beginnend bis 99999 zugewiesen und fangen wieder von vorne an, wenn die Grenze überschritten wird. Die Spalte TT zeigt den Terminal, auf dem das Programm läuft. STAT zeigt den Status des Programms an und kann für die Zwecke dieser Diskussion ebenso wie TT ignoriert werden. 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 hauptsächlich auf bestimmte Dinge warten, bevor sie wirklich CPU-Zeit verbrauchen. Unter der Spalte COMMAND finden Sie schließlich die Kommandozeile, mit der das Programm gestartet wurde.

ps(1) besitzt viele Optionen, um die angezeigten Informationen zu beeinflussen. Eine nützliche Kombination ist auxww. Mit a werden Information über alle laufenden Prozesse und nicht nur Ihrer eigenen angezeigt. Der Name des Besitzers des Prozesses, sowie Informationen über den Speicherverbrauch werden mit u angezeigt. x zeigt auch Dämonen-Prozesse an, und ww veranlasst ps(1) die komplette Kommandozeile anzuzeigen, anstatt sie abzuschneiden, wenn sie zu lang für die Bildschirmausgabe wird.

Die Ausgabe von top(1) sieht ähnlich aus:

% top
last pid: 72257;  load averages:  0.13,  0.09,  0.03    up 0+13:38:33  22:39:10
47 processes:  1 running, 46 sleeping
CPU states: 12.6% user,  0.0% nice,  7.8% system,  0.0% interrupt, 79.7% idle
Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
Swap: 256M Total, 38M Used, 217M Free, 15% Inuse

  PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
72257 nik       28   0  1960K  1044K RUN      0:00 14.86%  1.42% top
 7078 nik        2   0 15280K 10960K select   2:54  0.88%  0.88% xemacs-21.1.14
  281 nik        2   0 18636K  7112K select   5:36  0.73%  0.73% XF86_SVGA
  296 nik        2   0  3240K  1644K select   0:12  0.05%  0.05% xterm
48630 nik        2   0 29816K  9148K select   3:18  0.00%  0.00% navigator-linu
  175 root       2   0   924K   252K select   1:41  0.00%  0.00% syslogd
 7059 nik        2   0  7260K  4644K poll     1:38  0.00%  0.00% mutt
...

Die Ausgabe ist in zwei Abschnitte geteilt. In den ersten fü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 (im Beispiel 47), wie viel Speicher und Swap verbraucht wurde und wie viel Zeit das System in den verschiedenen CPU-Modi verbringt.

Darunter befinden sich einige Spalten mit ähnlichen Informationen wie in der Ausgabe von ps(1). Wie im vorigen Beispiel können Sie die PID, den Besitzer, die verbrauchte CPU-Zeit und das Kommando erkennen. top(1) zeigt auch den Speicherverbrauch des Prozesses an, der in zwei Spalten aufgeteilt ist. Die erste Spalte gibt den gesamten Speicherverbrauch des Prozesses an, in der zweiten Spalte wird der aktuelle Verbrauch angegeben. Netscape® hat im gezeigten Beispiel insgesamt 30 MB Speicher verbraucht. Momentan benutzt es allerdings nur 9 MB.

Die Anzeige wird von top(1) automatisch alle zwei Sekunden aktualisiert. Der Zeitraum kann mit -s eingestellt werden.


3.6. Dämonen, Signale und Stoppen von Prozessen

Wenn Sie einen Editor starten, können Sie ihn leicht bedienen und Dateien laden. Sie können das, weil der Editor dafür Vorsorge getroffen hat und auf einem Terminal läuft. Manche Programme erwarten keine Eingaben von einem Benutzer und lösen sich bei erster Gelegenheit von ihrem Terminal. Ein Web-Server zum Beispiel verbringt den ganzen Tag damit, auf Anfragen zu antworten und erwartet keine Eingaben von Ihnen. Programme, die E-Mail von einem Ort zu einem anderen Ort transportieren sind ein weiteres Beispiel für diesen Typ von Anwendungen.

Wir nennen diese Programme Dämonen. Dämonen stammen aus der griechischen Mythologie und waren weder gut noch böse. Sie waren kleine dienstbare Geister, die meistens nützliche Sachen für die Menschheit vollbrachten. Ähnlich wie heutzutage Web-Server und Mail-Server nützliche Dienste verrichten. Seit langer Zeit ist daher das BSD Maskottchen dieser fröhlich aussehende Dämon mit Turnschuhen und Dreizack.

Programme, die als Dämon laufen, werden entsprechend einer Konvention mit einem ``d'' am Ende benannt. BIND ist der Berkeley Internet Name Daemon und das tatsächlich laufende Programm heißt named. Der Apache Webserver wird httpd genannt, der Druckerspool-Dämon heißt lpd usw. Dies ist allerdings eine Konvention und keine unumstößliche Regel: Der Dämon der Anwendung sendmail heißt sendmail und nicht maild, wie Sie vielleicht gedacht hatten.

Manchmal müssen Sie mit einem Dämon kommunizieren und dazu benutzen Sie Signale. Sie können mit einem Dämonen oder jedem anderen laufenden Prozess kommunizieren, indem Sie diesem ein Signal schicken. Sie können verschiedene Signale verschicken - manche haben eine festgelegte Bedeutung, andere werden von der Anwendung interpretiert. Die Dokumentation zur fraglichen Anwendung wird erklären, wie die Anwendung Signale interpretiert. Sie können nur Signale zu Prozessen senden, die Ihnen gehören. Normale Benutzer haben nicht die Berechtigung, Prozessen anderer Benutzer mit kill(1) oder kill(2) Signale zu schicken. Der Benutzer root darf jedem Prozess Signale schicken.

In manchen Fällen wird FreeBSD Signale 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 den alarm(3) Systemaufruf benutzt hat, um nach einiger Zeit benachrichtigt zu werden, bekommt sie das Alarm Signal (SIGALRM) gesendet.

Zwei Signale können benutzt werden, um Prozesse zu stoppen: SIGTERM und SIGKILL. Mit SIGTERM fordern Sie den Prozess höflich zum Beenden auf. Der Prozess kann das Signal abfangen und merken, dass er sich beenden soll. Er hat dann Gelegenheit Logdateien zu schließen und die Aktion, die er vor der Aufforderung sich zu beenden durchführte, abzuschließen. Er kann sogar SIGTERM ignorieren, wenn er eine Aktion durchführt, die nicht unterbrochen werden darf.

SIGKILL kann von keinem Prozess ignoriert werden. Das Signal lässt sich mit ``Mich interessiert nicht, was du gerade machst, hör sofort auf damit!'' umschreiben. Wenn Sie einem Prozess SIGKILL schicken, dann wird FreeBSD diesen sofort beenden[4].

Andere Signale, die Sie vielleicht verschicken wollen, sind SIGHUP, SIGUSR1 und SIGUSR2. Diese Signale sind für allgemeine Zwecke vorgesehen und verschiedene Anwendungen werden unterschiedlich auf diese Signale reagieren.

Nehmen wir an, Sie haben die Konfiguration Ihres Webservers verändert und möchten dies dem Server mitteilen. Sie könnten den Server natürlich stoppen und httpd wieder starten. Die Folge wäre eine kurze Zeit, in der der Server nicht erreichbar ist. Die meisten Dämonen lesen Ihre Konfigurationsdatei beim Empfang eines SIGHUP neu ein. Da es keinen Standard gibt, der vorschreibt, wie auf diese Signale zu reagieren ist, lesen Sie bitte die Dokumentation zu dem in Frage kommenden Dämon.

Mit kill(1) können Sie, wie unten gezeigt, Signale verschicken.

Verschicken von Signalen

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

  1. Suchen Sie die Prozess-ID des Prozesses, dem Sie ein Signal schicken wollen. Benutzen Sie dazu ps(1) und grep(1). Mit grep(1) können Sie in einer Ausgabe nach einem String suchen. Da inetd(8) unter dem Benutzer root läuft und Sie das Kommando als normaler Benutzer absetzen, müssen Sie ps(1) mit ax aufrufen:

    % ps -ax | grep inetd
      198  ??  IWs    0:00.00 inetd -wW
    

    Die Prozess-ID von inetd(8) ist 198. In einigen Fällen werden Sie auch das grep inetd Kommando in der Ausgabe sehen. Dies hat damit zu tun, wie ps(1) die Liste der laufenden Prozesse untersucht.

  2. Senden Sie das Signal mit kill(1). Da inetd(8) unter dem Benutzer root läuft, müssen Sie zuerst mit su(1) root werden:

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

    kill(1) wird, wie andere Kommandos von UNIX Systemen auch, keine Ausgabe erzeugen, wenn das Kommando erfolgreich war. Wenn Sie versuchen, einem Prozess, der nicht Ihnen gehört, ein Signal zu senden, dann werden Sie die Meldung ``kill: PID: Operation not permitted'' sehen. Wenn Sie sich bei der Eingabe der PID vertippen, werden Sie das Signal dem falschen Prozess schicken, was schlecht sein kann. Wenn Sie Glück haben, existiert der Prozess nicht und Sie werden mit der Ausgabe ``kill: PID: No such process'' belohnt.

    Warum soll ich /bin/kill benutzen?: Viele Shells stellen kill als internes Kommando zur Verfügung, das heißt die Shell sendet das Signal direkt, anstatt /bin/kill zu starten. Das kann nützlich sein, aber die unterschiedlichen Shells benutzen eine verschiedene Syntax, um die Namen der Signale anzugeben. Anstatt jede Syntax zu lernen, kann es einfacher sein, /bin/kill ... direkt aufzurufen.

Andere Signale senden Sie auf die gleiche Weise, ersetzen Sie nur TERM oder KILL entsprechend.

Wichtig: Es kann gravierende Auswirkungen haben, wenn Sie zufällig Prozesse beenden. Insbesondere init(8) mit der Prozess-ID ist ein Spezialfall. Mit /bin/kill -s KILL 1 können Sie Ihr System schnell herunterfahren. Überprüfen Sie die Argumente von kill(1) immer zweimal bevor Sie Return drücken.


3.7. Festplatten, Slices und Partitionen

FreeBSD identifiziert Dateien anhand eines Dateinamens. In Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden: readme.txt und README.TXT bezeichnen daher zwei verschiedene Dateien. FreeBSD benutzt keine Dateiendungen wie .txt, um den Typ der Datei (ein Programm, ein Dokument oder andere Daten) zu bestimmen.

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

In Dateinamen werden Verzeichnisse durch einen Schrägstrich (/, Slash) getrennt. Wenn das Verzeichnis foo ein Verzeichnis bar enthält, in dem sich die Datei readme.txt befindet, lautet der vollständige Name der Datei (oder der Pfad zur Datei) foo/bar/readme.txt.

Verzeichnisse und Dateien werden in einem Dateisystem gespeichert. Jedes Dateisystem besitzt ein Wurzelverzeichnis (Root-Directory), das weitere Verzeichnisse enthalten kann.

Dieses Konzept kennen Sie vielleicht von anderen Betriebssystemen, aber es gibt einige Unterschiede: In DOS werden Datei- und Verzeichnisnamen mit dem Zeichen \ getrennt, Mac OS® benutzt dazu das Zeichen :.

FreeBSD kennt keine Laufwerksbuchstaben und in Pfaden werden keine Bezeichnungen für Laufwerke benutzt. Die Pfadangabe c:/foo/bar/readme.txt gibt es in FreeBSD nicht.

Stattdessen wird ein Dateisystem als Wurzeldateisystem (Root-Filesystem) ausgewählt. Das Wurzelverzeichnis dieses Dateisystems wird / genannt. Jedes andere Dateisystem wird unter dem Wurzeldateisystem eingehangen (mount). Daher scheint jedes Verzeichnis, unabhängig von der Anzahl der Platten, auf derselben Platte zu liegen.

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

Das Wurzeldateisystem soll A sein. Das Kommando ls 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 hä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 ü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 würde, sähe der Verzeichnisbaum so aus:

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

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

C könnte auch im Verzeichnis A1 eingehangen werden:

Der DOS-Befehl join kann Ähnliches bewirken.

Normalerweise müssen Sie sich nicht mit Dateisystemen beschäftigen. Während der Installation werden die Dateisysteme und die Stellen, in der sie eingehangen werden, festgelegt. Dateisysteme müssen Sie erst wieder anlegen, wenn Sie eine neue Platte hinzufügen.

Sie können sogar mit nur einem großen Dateisystem auskommen. Dies hat mehrere Nachteile und einen Vorteil.

Vorteile mehrerer Dateisysteme

  • Die Dateisysteme können mit unterschiedlichen Optionen (mount options) eingehangen werden. Bei sorgfältiger Planung können Sie beispielsweise das Wurzeldateisystem nur lesbar einhängen. Damit schützen Sie sich vor dem unabsichtlichen Löschen oder Editieren kritischer Dateien. Von Benutzern beschreibbare Dateisysteme wie /home können Sie mit der Option nosuid einhängen, 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 erhöht werden.

  • Die Lage von Dateien im Dateisystem wird, abhängig vom Gebrauch des Dateisystems, automatisch von FreeBSD optimiert. Ein Dateisystem mit vielen kleinen Dateien, die häufig geschrieben werden, wird anders behandelt als ein Dateisystem mit wenigen großen Dateien. Mit nur einem Dateisystem ist diese Optimierung unmöglich.

  • In der Regel übersteht ein FreeBSD-Dateisystem auch einen Stromausfall. Allerdings kann ein Stromausfall zu einem kritischen Zeitpunkt das Dateisystem beschädigen. Wenn die Daten über mehrere Dateisysteme verteilt sind, lässt sich das System mit hoher Wahrscheinlichkeit noch starten. Dies erleichtert das Zurückspielen von Datensicherungen.

Vorteil eines einzelnen Dateisystems

  • Die Größe von Dateisystemen liegt fest. Es kann passieren, dass Sie eine Partition vergrößern müssen. Dies ist nicht leicht: Sie müssen die Daten sichern, das Dateisystem vergrößert anlegen und die gesicherten Daten zurückspielen.

    Wichtig: Ab FreeBSD 4.4 existiert diese Beschränkung nicht mehr: Das Kommando growfs(8) kann Dateisysteme im laufenden Betrieb vergrößern.

Dateisysteme befinden sich in Partitionen (damit sind nicht die normalen DOS-Partitionen gemeint). Jede Partition wird mit einem Buchstaben von a bis h bezeichnet und kann nur ein Dateisystem enthalten. Dateisysteme können daher ü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 für den Swap-Bereich, der dem Rechner virtuellen Speicher zur Verfügung stellt. Dadurch kann der Rechner Anwendungen mehr Speicher zur Verfügung stellen als tatsächlich eingebaut ist. Wenn der Speicher knapp wird, kann FreeBSD nicht benutzte Daten in den Swap-Bereich auslagern. Die ausgelagerten Daten können später wieder in den Speicher geholt werden (dafür werden dann andere Daten ausgelagert).

Für einige Partitionen gelten besondere Konventionen:

Partition Konvention
a Enthält normalerweise das Wurzeldateisystem
b Enthält normalerweise den Swap-Bereich
c Ist normalerweise genauso groß wie die Slice in der die Partition liegt. Werkzeuge, die auf der kompletten Slice arbeiten, wie ein Bad-Block-Scanner, können so die c-Partition benutzen. Für gewöhnlich legen Sie in dieser Partition kein Dateisystem an.
d Früher hatte die d-Partition eine besondere Bedeutung. Bis heute haben einige Werkzeuge Schwierigkeiten mit der d-Partition, sodass sysinstall normalerweise keine d-Partition anlegt.

Jede Partition, die ein Dateisystem enthält, wird in einer Slice angelegt. Slice ist der Begriff, den FreeBSD für DOS-Partitionen verwendet. Slices werden von eins bis vier durchnummeriert.

Die Slice-Nummern werden mit vorgestelltem s hinter den Gerätenamen gestellt: ``da0s1'' ist die erste Slice auf dem ersten SCSI-Laufwerk. Auf einer Festplatte gibt es höchstens vier Slices. In einer Slice des passenden Typs kann es weitere logische Slices geben. Diese erweiterten Slices werden ab fünf durchnummeriert: ``ad0s5'' ist die erste erweiterte Slice auf einer IDE-Platte. Diese Geräte werden von Dateisystemen benutzt, die sich in einer kompletten Slice befinden müssen.

Slices, ``dangerously dedicated''-Festplatten und andere Platten enthalten Partitionen, die mit Buchstaben von a bis h bezeichnet werden. Der Buchstabe wird an den Gerätenamen gehangen: ``da0a'' ist die a-Partition des ersten da-Laufwerks. Dieses Laufwerk ist ``dangerously dedicated''. ``ad1s3e'' ist die fünfte Partition in der dritten Slice der zweiten IDE-Platte.

Schließlich 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. Gängige Festplatten-Namen sind in Tabelle 3-1 zusammengestellt.

Wenn Sie eine Partition angeben, erwartet FreeBSD dass Sie auch die Slice und die Platte angeben, in denen sich die Partition befindet. Wenn Sie eine Slice angeben, müssen Sie auch die Platte der Slice angeben. Setzen Sie den Namen aus dem Plattennamen gefolgt von einem s, der Slice-Nummer und dem Buchstaben der Partition zusammen. Einige Beispiele finden Sie in Beispiel 3-1.

Der Aufbau einer Festplatte wird in Beispiel 3-2 dargestellt.

Um FreeBSD zu installieren, müssen Sie zuerst Slices auf den Festplatten anlegen. Innerhalb der Slices, die Sie für FreeBSD verwenden wollen, müssen Sie dann Partitionen anlegen. In den Partitionen wiederum werden die Dateisysteme (oder der Auslagerungsbereich) angelegt. Für Dateisysteme müssen Sie schließlich noch festlegen, wo diese eingehangen werden (Mount-Point).

Tabelle 3-1. Laufwerk-Codes

Code Bedeutung
ad ATAPI (IDE) Festplatte
da SCSI-Festplatte
acd ATAPI (IDE) CD-ROM
cd SCSI-CD-ROM
fd Disketten-Laufwerk

Beispiel 3-1. Namen von Platten, Slices und Partitionen

Name Bedeutung
ad0s1a Die erste Partition (a) in der ersten Slice (s1) der ersten IDE-Festplatte (ad0).
da1s2e Die fünfte Partition (e) der zweiten Slice (s2) auf der zweiten SCSI-Festplatte (da1).

Beispiel 3-2. Aufteilung einer Festplatte

Das folgende Diagramm zeigt die Sicht von FreeBSD auf die erste IDE-Festplatte eines Rechners. Die Platte soll 4 GB groß sein und zwei Slices (DOS-Partitionen) mit je 2 GB besitzen. Die erste Slice enthält ein DOS-Laufwerk (C:), die zweite Slice wird von FreeBSD benutzt. Im Beispiel verwendet die FreeBSD-Installationen drei Partitionen und einen Auslagerungsbereich.

Jede der drei Partitionen enthält ein Dateisystem. Das Wurzeldateisystem ist die a-Partition. In der e-Partition befindet sich der /var-Verzeichnisbaum und in der f-Partition befindet sich der Verzeichnisbaum unterhalb von /usr.


3.8. Anhängen und Abhä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 können.

Es gibt verschiedene Gründe, bestimmte dieser Verzeichnisse auf eigenen Dateisystemen anzulegen. /var enthält log/, spool/ sowie verschiedene andere temporäre Dateien und kann sich daher schnell füllen. Es empfiehlt sich, /var von / zu trennen, da es schlecht ist, wenn das Root-Dateisystem voll läuft.

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


3.8.1. Die fstab Datei

Während des Boot Prozesses werden in /etc/fstab aufgeführte Verzeichnisse, sofern sie nicht mit der Option noauto versehen sind, automatisch angehangen.

Die Zeilen in /etc/fstab haben das folgende Format:

device   /mount-point   fstype   options   dumpfreq   passno
device

Ein existierender Gerätename wie in Abschnitt 12.2 beschrieben.

mount-point

Ein existierendes Verzeichnis, an das das Dateisystem angehangen wird.

fstype

Der Typ des Dateisystems, der an mount(8) weitergegeben wird. Das default FreeBSD Dateisystem ist ufs.

options

Entweder rw für beschreibbare Dateisysteme oder ro für schreibgeschützte Dateisysteme, gefolgt von weiteren benötigten Optionen. Eine häufig verwendete Option ist noauto für Dateisysteme, die während der normalen Bootsequenz nicht angehangen werden sollen. Weitere Optionen finden sich in mount(8).

dumpfreq

Gibt die Anzahl der Tage an, nachdem das Dateisystem gesichert werden soll. Fehlt der Wert, wird 0 angenommen.

passno

Bestimmt die Reihenfolge, in der die Dateisysteme überprüft werden sollen. Für Dateisysteme, die übersprungen werden sollen, ist passno auf null zu setzen. Für das Root-Dateisystem, das vor allen anderen überprüft werden muss, sollte der Wert von passno eins betragen. Allen anderen Dateisystemen sollten Werte größer eins zugewiesen werden. Wenn mehrere Dateisysteme den gleichen Wert besitzen, wird fsck(8) versuchen, diese parallel zu überprüfen.


3.8.2. Das mount Kommando

mount(8) hängt schließlich Dateisysteme an.

In der grundlegenden Form wird es wie folgt benutzt:

# mount device mountpoint

Viele Optionen werden in mount(8) beschrieben, die am häufigsten verwendeten sind:

Optionen von mount

-a

Hä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

Führt alles bis auf den mount-Systemaufruf aus. Nützlich ist diese Option in Verbindung mit -v. Damit wird angezeigt, was mount(8) tatsächlich versuchen würde, um das Dateisystem anzuhängen.

-f

Erzwingt das Anhängen eines unsauberen Dateisystems oder erzwingt die Rücknahme des Schreibzugriffs, wenn der Status des Dateisystems von beschreibbar auf schreibgeschützt geändert wird.

-r

Hängt das Dateisystem schreibgeschützt an. Das kann auch durch Angabe von rdonly zu der -o Option erreicht werden.

-t fstype

Hängt das Dateisystem mit dem angegebenen Typ an, oder hängt nur Dateisysteme mit dem angegebenen Typ an, wenn auch -a angegeben wurde.

Die Voreinstellung für den Typ des Dateisystems ist ``ufs''.

-u

Aktualisiert die Mountoptionen des Dateisystems.

-v

Geschwätzig sein.

-w

Hängt das Dateisystem beschreibbar an.

-o erwartet eine durch Kommata separierte Liste von Optionen, unter anderem die folgenden:

nodev

Beachtet keine Gerätedateien auf dem Dateisystem. Dies ist eine nützliche Sicherheitsfunktion.

noexec

Verbietet das Ausführen von binären Dateien auf dem Dateisystem. Dies ist eine nützliche Sicherheitsfunktion.

nosuid

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


3.8.3. Das umount Kommando

umount(8) akzeptiert als Parameter entweder einen Mountpoint, einen Gerätenamen, oder die Optionen -a oder -A.

Jede Form akzeptiert -f, um das Abhängen zu erzwingen, und -v, um etwas geschwätziger zu sein. Seien Sie bitte vorsichtig mit -f: Ihr Computer kann abstürzen oder es können Daten auf dem Dateisystem beschädigt werden, wenn Sie das Abhängen erzwingen.

-a und -A werden benutzt um alle Dateisysteme, deren Typ durch -t modifiziert werden kann, abzuhängen. -A hängt das Rootdateisystem nicht ab.


3.9. Shells

Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge mit der Kommandozeilen Schnittstelle der Shell erledigt. Die Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe anzunehmen und diese auszuführen. Viele Shells haben außerdem eingebaute Funktionen, die die tägliche Arbeit erleichtern, beispielsweise eine Dateiverwaltung, die Vervollständigung von Dateinamen (Globbing), einen Kommandozeileneditor, sowie Makros und Umgebungsvariablen. FreeBSD enthält die Shells sh (die Bourne Shell) und tcsh (die verbesserte C-Shell) im Basissystem. Viele andere Shells, wie zsh oder bash, befinden sich in der Ports-Sammlung.

Welche Shell soll ich benutzen? Das ist wirklich eine Geschmacksfrage. Sind Sie ein C Programmierer, finden Sie vielleicht eine C-artige Shell wie die tcsh angenehmer. Kommen Sie von Linux oder ist Ihnen der Umgang mit UNIX Systemen neu, so könnten Sie die bash probieren. Der Punkt ist, dass jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer bevorzugten Arbeitsumgebung harmonieren können oder nicht. Sie müssen sich eine Shell aussuchen.

Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Sie müssen nur einige Buchstaben eines Kommandos oder eines Dateinamen eingeben und die Shell vervollständigt den Rest automatisch durch drücken der Tab-Taste. Hier ist ein Beispiel. Angenommen, Sie haben zwei Dateien foobar und foo.bar. Die Datei foo.bar möchten Sie löschen. Nun würden Sie an der Tastatur eingeben: rm fo[Tab]. [Tab].

Die Shell würde dann rm foo[BEEP].bar ausgeben.

[BEEP] meint den Rechner-Piepser. Diesen gibt die Shell aus, um anzuzeigen, dass es den Dateinamen nicht vervollständigen konnte, da es mehrere Möglichkeiten gibt. Beide Dateien foobar und foo.bar beginnen mit fo, so konnte nur bis foo ergänzt werden. Nachdem Sie . eingaben und dann die Tab-Taste drückten, konnte die Shell den Rest für Sie ausfüllen.

Ein weiteres Merkmal der Shell ist der Gebrauch von Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare im Umgebungsraum der Shell, die jedes von der Shell aufgerufene Programm lesen kann. Daher enthält der Umgebungsraum viele Konfigurationsdaten für Programme. Die folgende Liste zeigt verbreitete Umgebungsvariablen und was sie bedeuten:

Variable Beschreibung
USER Name des angemeldeten Benutzers.
PATH Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen.
DISPLAY Wenn gesetzt der Netzwerkname des X11 Bildschirms für die Anzeige.
SHELL Die aktuelle Shell.
TERM Name des Terminals des Benutzers. Benutzt, um die Fähigkeiten des Terminals bestimmen.
TERMCAP Datenbankeintrag der Terminal Escape Codes, benötigt um verschieden Terminalfunktionen auszuführen.
OSTYPE Typ des Betriebsystems, beispielsweise FreeBSD.
MACHTYPE Die CPU Architektur auf dem das System läuft.
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 funktioniert von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man in C-artigen Shells wie der tcsh dazu setenv. Unter Bourne-Shells wie sh oder bash benutzen Sie zum Setzen von Umgebungsvariablen export. Um beispielsweise die Variable EDITOR mit csh oder tcsh auf /usr/local/bin/emacs zu setzen, setzen Sie das folgende Kommando ab:

% setenv EDITOR /usr/local/bin/emacs

Unter Bourne-Shells:

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

Sie können die meisten Shells Umgebungsvariablen expandieren lassen, in dem Sie in der Kommandozeile ein $ davor eingeben. Zum Beispiel gibt echo $TERM aus, worauf $TERM gesetzt ist, weil die Shell $TERM expandiert und das Ergebnis an echo gibt.

Shells behandeln viele Spezialzeichen, so genannte Metazeichen, als besondere Darstellungen für Daten. Das allgemeinste ist das Zeichen *, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Diese Metazeichen können zum Vervollständigen von Dateinamen (Globbing) benutzt werden. Beispielsweise liefert das Kommando echo * nahezu das gleiche wie die Eingabe von ls, da die Shell alle Dateinamen die mit * übereinstimmen, an echo weitergibt.

Um zu verhindern, dass die Shell diese Sonderzeichen interpretiert, kann man sie schützen, indem man ihnen einen Backslash (\) voranstellt. echo $TERM gibt aus, auf was auch immer Ihr Terminal gesetzt ist. echo \$TERM gibt $TERM genauso aus, wie es hier steht.


3.9.1. Ändern der Shell

Der einfachste Weg Ihre Shell zu ändern, ist das Kommando chsh zu benutzen. chsh platziert Sie im Editor, welcher durch Ihre Umgebungsvariable EDITOR gesetzt ist, im vi wenn die Variable nicht gesetzt ist. Ändern Sie die Zeile mit ``Shell:'' entsprechend Ihren Wünschen.

Sie können auch chsh mit der Option -s aufrufen, dann wird Ihre Shell gesetzt, ohne dass Sie in einen Editor gelangen. Um Ihre Shell zum Beispiel auf die bash zu ändern, geben Sie das folgende Kommando ein:

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

Dasselbe Ergebnis hätten Sie erzielt, wenn Sie einfach chsh ohne Optionen aufgerufen und die entsprechende Zeile editiert hätten.

Anmerkung: Die von Ihnen gewünschte Shell muss in /etc/shells aufgeführt sein. Haben Sie eine Shell aus der Ports Sammlung installiert, sollte das schon automatisch erledigt werden. Installierten Sie die Shell von Hand, so müssen Sie sie dort eintragen.

Haben Sie beispielsweise die bash nach /usr/local/bin installiert, wollen Sie dies tun:

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

Danach können Sie chsh aufrufen.


3.10. Text-Editoren

Eine Menge der Konfiguration bei 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.

Der am leichtesten und einfachsten zu erlernende Editor nennt sich ee, was für easy editor steht. Um ee zu starten, gibt man in der Kommandozeile ee filename ein, worin filename der Name der zu editierenden Datei ist. Um zum Beispiel /etc/rc.conf zu editieren, tippen Sie ee /etc/rc.conf. Einmal im Editor, finden Sie alle Editor-Funktionen oben im Display aufgelistet. Das Einschaltungszeichen ^ steht für die Ctrl (oder Strg) Taste, mit ^e ist also die Tastenkombination Ctrl+e gemeint. Um ee zu verlassen, drücken Sie Esc und wählen dann leave editor aus. Der Editor fragt nach, ob Sie speichern möchten, wenn die Datei verändert wurde.

FreeBSD verfügt über leistungsfähigere Editoren wie vi als Teil des Basissystems, andere Editoren wie emacs oder vim sind Teil der Ports Sammlung. Diese Editoren bieten höhere Funktionalität und Leistungsfähigkeit jedoch auf Kosten einer etwas schwierigeren Erlernbarkeit. Wenn Sie viel Textdateien editieren werden, sparen Sie auf lange Sicht mehr Zeit durch das Erlernen von Editoren wie vim oder emacs ein.


3.11. Geräte und Gerätedateien

Der Begriff Gerät wird meist in Verbindung mit Hardware wie Laufwerken, Druckern, Grafikkarten oder Tastaturen gebraucht. Der Großteil der Meldungen, die beim Booten von FreeBSD angezeigt werden, beziehen sich auf gefundene Geräte. Sie können sich die Bootmeldungen später in /var/run/dmesg.boot ansehen.

Gerätenamen, die Sie wahrscheinlich in den Bootmeldungen sehen werden, sind zum Beispiel acd0, das erste IDE CD-ROM oder kbd0, die Tastatur.

Auf die meisten Geräte wird unter UNIX Systemen über spezielle Gerätedateien im /dev Verzeichnis zugegriffen.


3.11.1. Anlegen von Gerätedateien

Wenn sie ein neues Gerät zu Ihrem System hinzufügen, oder die Unterstützung für zusätzliche Geräte kompilieren, müssen oft ein oder mehrere Gerätedateien erstellt werden.


3.11.1.1. MAKEDEV Skript

Auf Systemen ohne DEVFS (das sind alle Systeme vor FreeBSD 5.0) müssen Gerätedateien mit MAKEDEV(8) wie unten gezeigt angelegt werden:

# cd /dev
# sh MAKEDEV ad1
   

Im Beispiel werden alle Gerätedateien für das zweite IDE Laufwerk angelegt.


3.11.1.2. DEVFS (Gerätedateisystem)

Das Gerätedateisystem DEVFS ermöglicht durch den Namensraum des Dateisystems Zugriff auf den Namensraum der Geräte im Kernel. Damit müssen Gerätedateien nicht mehr extra angelegt werden, sondern werden von DEVFS verwaltet.

Weitere Informationen finden Sie in devfs(5).

DEVFS ist ab FreeBSD 5.0 in der Grundeinstellung aktiviert.


3.12. Binärformate

Um zu verstehen, warum FreeBSD das Format ELF benutzt, müssen Sie zunächst etwas über die drei gegenwärtig ``dominanten'' ausführbaren Formate für UNIX Systeme wissen:

  • a.out(5)

    Das älteste und ``klassische'' Objektformat von UNIX Systemen. Es benutzt einen kurzen, kompakten Header mit einer magischen Nummer am Anfang, die oft benutzt wird, um das Format zu charakterisieren (weitere Details finden Sie unter a.out(5)). Es enthält drei geladene Segmente: .text, .data und .bss, sowie eine Symboltabelle und eine Stringtabelle.

  • COFF

    Das Objektformat von SVR3. Der Header enthält nun eine ``Sectiontable''. Man kann also mit mehr als nur den Sections .text, .data und .bss arbeiten.

  • ELF

    Der Nachfolger von COFF. Kennzeichnend sind mehrere Sections und mögliche 32-Bit- oder 64-Bit-Werte. Ein wesentlicher Nachteil: ELF wurde auch unter der Annahme entworfen, dass es nur eine ABI (Application Binary Interface) pro Systemarchitektur geben wird. Tatsächlich ist diese Annahme falsch - nicht einmal für die kommerzielle SYSV-Welt (in der es mindestens drei ABIs gibt: SVR4, Solaris, SCO) trifft sie zu.

    FreeBSD versucht, dieses Problem zu umgehen, indem ein Werkzeug bereitgestellt wird, um ausführbare Dateien im ELF-Format mit Informationen über die ABI zu versehen, zu der sie passen. Weitere Informationen finden Sie in der Manualpage brandelf(1).

FreeBSD kommt aus dem ``klassischen'' Lager und verwendete traditionell das Format a.out(5), eine Technik, die bereits über viele BSD-Releases hinweg eingesetzt und geprüft worden ist. Obwohl es bereits seit einiger Zeit möglich war, auf einem FreeBSD-System auch Binaries (und Kernel) im ELF-Format zu erstellen und auszuführen, widersetzte FreeBSD sich anfangs dem ``Druck'', auf ELF als Standardformat umzusteigen. Warum? Nun, als das Linux-Lager die schmerzhafte Umstellung auf ELF durchführte, ging es nicht so sehr darum, dem ausführbaren Format a.out zu entkommen, als dem unflexiblen, auf Sprungtabellen basierten Mechanismus für ``Shared-Libraries'' der die Konstruktion von Shared-Libraries für Hersteller und Entwickler gleichermaßen sehr kompliziert machte. Da die verfügbaren ELF-Werkzeuge eine Lösung für das Problem mit den Shared-Libraries anboten und ohnehin generell als ``ein Schritt vorwärts'' angesehen wurden, wurde der Aufwand für die Umstellung als notwendig akzeptiert und die Umstellung wurde durchgeführt. In FreeBSD ist der Mechanismus von Shared-Libraries enger an den Stil des Shared-Library-Mechanismus von Suns SunOS™ angelehnt und von daher sehr einfach zu verwenden.

Ja, aber warum gibt es so viele unterschiedliche Formate?

In alter, grauer Vorzeit gab es simple Hardware. Diese simple Hardware unterstützte ein einfaches, kleines System. a.out war absolut passend für die Aufgabe, Binaries auf diesem simplen System (eine PDP-11) darzustellen. Als UNIX von diesem simplen System portiert wurde, wurde auch das a.out-Format beibehalten, weil es für die frühen Portierungen auf Architekturen wie den Motorola 68000 und VAX ausreichte.

Dann dachte sich ein schlauer Hardware-Ingenieur, dass, wenn er Software zwingen könnte, einige Tricks anzustellen, es ihm möglich wäre, ein paar Gatter im Design zu sparen, und seinen CPU-Kern schneller zu machen. Obgleich es dazu gebracht wurde, mit dieser neuen Art von Hardware (heute als RISC bekannt) zu arbeiten, war a.out für diese Hardware schlecht geeignet. Deshalb wurden viele neue Formate entwickelt, um eine bessere Leistung auf dieser Hardware zu erreichen, als mit dem begrenzten, simplen a.out-Format. Dinge wie COFF, ECOFF und einige andere obskure wurden erdacht und ihre Grenzen untersucht, bevor die Dinge sich in Richtung ELF entwickelten.

Hinzu kam, dass die Größe von Programmen gewaltig wurde und Festplatten sowie physikalischer Speicher immer noch relativ klein waren. Also wurde das Konzept von Shared-Libraries geboren. Das VM-System wurde auch immer fortgeschrittener. Obwohl bei jedem dieser Fortschritte das a.out-Format benutzt worden ist, wurde sein Nutzen mit jedem neuen Merkmal mehr und mehr gedehnt. Zusätzlich wollte man Dinge dynamisch zur Ausführungszeit laden, oder Teile ihres Programms nach der Initialisierung wegwerfen, um Hauptspeicher oder Swap-Speicher zu sparen. Programmiersprachen wurden immer fortschrittlicher und man wollte, dass Code automatisch vor der main-Funktion aufgerufen wird. Das a.out-Format wurde oft überarbeitet, um alle diese Dinge zu ermöglichen und sie funktionierten auch für einige Zeit. a.out konnte diese Probleme nicht ohne ein ständiges Ansteigen eines Overheads im Code und in der Komplexität handhaben. Obwohl ELF viele dieser Probleme löste, wäre es sehr aufwändig, ein System umzustellen, das im Grunde genommen funktionierte. Also musste ELF warten, bis es aufwändiger war, bei a.out zu bleiben, als zu ELF überzugehen.

Im Laufe der Zeit haben sich die Erstellungswerkzeuge, von denen FreeBSD seine Erstellungswerkzeuge abgeleitet hat (speziell der Assembler und der Loader), in zwei parallele Zweige entwickelt. Im FreeBSD-Zweig wurden Shared-Libraries hinzugefügt und einige Fehler behoben. Das GNU-Team, das diese Programme ursprünglich geschrieben hat, hat sie umgeschrieben und eine simplere Unterstützung zur Erstellung von Cross-Compilern durch beliebiges Einschalten verschiedener Formate usw. hinzugefügt. Viele Leute wollten Cross-Compiler für FreeBSD erstellen, aber sie hatten kein Glück, denn FreeBSD's ältere Sourcen für as und ld waren hierzu nicht geeignet. Die neuen GNU-Werkzeuge (binutils) unterstützen Cross-Compilierung, ELF, Shared-Libraries, C++-Erweiterungen und mehr. Weiterhin geben viele Hersteller ELF-Binaries heraus und es ist gut, wenn FreeBSD sie ausführen kann.

ELF ist ausdrucksfähiger als a.out und gestattet eine bessere Erweiterbarkeit des Basissystems. Die ELF-Werkzeuge werden besser gewartet und bieten Unterstützung von Cross-Compilierung, was für viele Leute wichtig ist. ELF mag etwas langsamer sein, als a.out, aber zu versuchen, das zu messen, könnte schwierig werden. Es gibt unzählige Details, in denen sich die beiden Formate unterscheiden, wie sie Pages abbilden, Initialisierungscode handhaben usw. Keins davon ist sehr wichtig, aber es sind Unterschiede. Irgendwann wird die Unterstützung für Programme im a.out-Format aus dem GENERIC-Kernel entfernt werden. Wenn es dann keinen oder kaum noch Bedarf für die Unterstützung dieses Formates gibt, werden die entsprechenden Routinen ganz entfernt werden.


3.13. Weitere Informationen

3.13.1. Manualpages

Die umfassendste Dokumentation rund um FreeBSD gibt es in Form von Manualpages. Annähernd jedes Programm im System bringt eine kurze Referenzdokumentation mit, die die grundsätzliche Funktion und verschiedene Parameter erklärt. Diese Dokumentationen kann man mit dem man Kommando benutzen. Die Benutzung des man Kommandos ist einfach:

% man Kommando

Kommando ist der Name des Kommandos, über das Sie etwas erfahren wollen. Um beispielsweise mehr über das Kommando ls zu lernen, geben Sie ein:

% man ls

Die Online-Dokumentation ist in nummerierte Sektionen unterteilt:

  1. Benutzerkommandos.

  2. Systemaufrufe und Fehlernummern.

  3. Funktionen der C Bibliothek.

  4. Gerätetreiber.

  5. Dateiformate.

  6. Spiele und andere Unterhaltung.

  7. Verschiedene Informationen.

  8. Systemverwaltung und -Kommandos.

  9. Kernel Entwickler.

In einigen Fällen kann dasselbe Thema in mehreren Sektionen auftauchen. Es gibt zum Beispiel ein chmod Benutzerkommando und einen chmod() Systemaufruf. In diesem Fall können Sie dem man Kommando sagen, aus welcher Sektion Sie die Information erhalten möchten, indem Sie die Sektion mit angeben:

% man 1 chmod

Dies wird Ihnen die Manualpage für das Benutzerkommando chmod zeigen. Verweise auf eine Sektion der Manualpages werden traditionell in Klammern gesetzt. So bezieht sich chmod(1) auf das Benutzerkommando chmod und mit chmod(2) ist der Systemaufruf gemeint.

Das ist nett, wenn Sie den Namen eines Kommandos wissen, und lediglich wissen wollen, wie es zu benutzen ist. Aber was tun Sie, wenn Sie Sich nicht an den Namen des Kommandos erinnern können? Sie können mit man nach Schlüsselbegriffen in den Kommandobeschreibungen zu suchen, indem Sie den Parameter -k benutzen:

% man -k mail

Mit diesem Kommando bekommen Sie eine Liste der Kommandos, deren Beschreibung das Schlüsselwort ``mail'' enthält. Diese Funktionalität erhalten Sie auch, wenn Sie das Kommando apropos benutzen.

Nun, Sie schauen Sich alle die geheimnisvollen Kommandos in /usr/bin an, haben aber nicht den blassesten Schimmer, wozu die meisten davon gut sind? Dann rufen Sie doch einfach das folgende Kommando auf:

% cd /usr/bin
% man -f *

Dasselbe erreichen Sie durch Eingabe von:

% cd /usr/bin
% whatis *

3.13.2. GNU Info Dateien

FreeBSD enthält viele Anwendungen und Utilities der Free Software Foundation (FSF). Zusätzlich zu den Manualpages bringen diese Programme ausführlichere Hypertext-Dokumente (info genannt) mit, welche man sich mit dem Kommando info ansehen kann. Wenn Sie emacs installiert haben, können Sie auch dessen info-Modus benutzen.

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

% info

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


Kapitel 4. Installieren von Anwendungen: Pakete und Ports

Übersetzt von Uwe Pierau.

4.1. Übersicht

FreeBSD enthält sehr viele Systemwerkzeuge, die Teil des Basissystems sind. Allerdings sind Sie früher oder später auf Software Dritter angewiesen, damit Sie bestimmte Arbeiten durchführen können. Um diese Software zu installieren, stellt FreeBSD zwei, sich ergänzende, Methoden zur Verfügung: Die Ports-Sammlung und binäre Softwarepakete. Sie können beide Methoden benutzen, um Ihre Lieblingsanwendungen von lokalen Medien oder über das Netzwerk zu installieren.

Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie wissen

  • wie Sie binäre Softwarepakete installieren,

  • wie Sie Software Dritter mit der Ports-Sammlung bauen,

  • wie Sie zuvor installierte Pakete oder Ports von einem System entfernen und

  • wie Sie die Voreinstellungen der Ports-Sammlung überschreiben.


4.2. Installation von Software

Wenn Sie schon einmal ein UNIX System benutzt haben, werden Sie wissen, dass zusätzliche Software meist wie folgt installiert wird:

  1. Download der Software, die als Quelltext oder im Binärformat vorliegen kann.

  2. Auspacken der Software, die typischerweise ein mit compress(1), gzip(1) oder bzip2(1) komprimiertes Tar-Archiv enthält.

  3. Durchsuchen der Dokumentation, die sich meist in Dateien wie 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 müssen Sie vielleicht das Makefile anpassen, oder configure laufen lassen, oder andere Arbeiten durchführen.

  5. Testen und installieren der Software.

Das beschreibt aber nur den optimalen Fall. Wenn Sie Software installieren, die nicht speziell für FreeBSD geschrieben wurde, müssen Sie vielleicht sogar den Quelltext anpassen, damit die Software funktioniert.

Wenn Sie unbedingt wollen, können Sie mit FreeBSD Software nach der ``althergebrachten'' Methode installieren. Mit Paketen oder Ports bietet Ihnen FreeBSD allerdings zwei Methoden an, die Ihnen sehr viel Zeit sparen können. Zurzeit werden über 9,200 Anwendungen Dritter über diese Methoden zur Verfügung gestellt.

Das FreeBSD Paket einer Anwendung besteht aus einer einzigen Datei, die Sie sich herunterladen müssen. Das Paket enthält schon übersetzte Kommandos der Anwendung, sowie zusätzliche Konfigurationsdateien oder Dokumentation. Zur Handhabung der Pakete stellt FreeBSD Kommandos wie pkg_add(1), pkg_delete(1) oder pkg_info(1) zur Verfügung. Mit diesem System können neue Anwendungen mit einem Kommando, pkg_add, installiert werden.

Der FreeBSD Port einer Anwendung ist eine Sammlung von Dateien, die das Kompilieren der Quelltexte einer Anwendung automatisieren.

Die Dateien eines Ports führen für Sie alle oben aufgeführten Schritte zum Installieren einer Anwendung durch. Mit einigen wenigen Kommandos wird der Quellcode der Anwendung automatisch heruntergeladen, ausgepackt, gepatcht, übersetzt und installiert.

Tatsächlich kann das Portsystem auch dazu benutzt werden, Pakete zu generieren, die Sie mit den gleich beschriebenen Kommandos, wie pkg_add, manipulieren können.

Pakete und Ports beachten Abhängigkeiten zwischen Anwendungen. Angenommen, Sie wollen eine Anwendung installieren, die von einer Bibliothek abhängt und die Anwendung wie die Bibliothek sind als Paket oder Port für FreeBSD verfügbar. Wenn Sie pkg_add oder das Portsystem benutzen, um die Anwendung zu installieren, werden Sie bemerken, dass die Bibliothek zuerst installiert wird, wenn sie nicht schon vorher installiert war.

Sie werden sich fragen, warum FreeBSD Pakete und Ports unterstützt, wo doch beide Methoden fast gleiches leisten. Beide Methoden haben ihre Stärken und welche Sie einsetzen, hängt letztlich von Ihren Vorlieben ab.

Vorteile von Paketen

  • Das komprimierte Paket einer Anwendung ist normalerweise kleiner als das komprimierte Archiv der Quelltexte.

  • Pakete müssen nicht mehr kompiliert werden. Dies ist ein Vorteil, wenn Sie große Pakete, wie Mozilla, KDE oder GNOME auf langsamen Maschinen installieren.

  • Wenn Sie Pakete verwenden, brauchen Sie nicht zu verstehen, wie Sie Software unter FreeBSD kompilieren.

Vorteile von Ports

  • Da die Pakete auf möglichst vielen System laufen sollen, werden Optionen beim Übersetzen zurückhaltend gesetzt. Wenn Sie eine Anwendung über die Ports installieren, können Sie die Angabe der Optionen optimieren. Zum Beispiel können Sie spezifischen Code für Pentium IV oder Athlon Prozessoren erzeugen.

  • Die Eigenschaften einiger Anwendungen werden über Optionen zum Zeitpunkt des Übersetzens festgelegt. Apache kann zum Beispiel über viele eingebaute Optionen konfiguriert werden. Wenn Sie das Portsystem benutzen, können Sie die Vorgaben für die Optionen überschreiben.

    Für einige Fälle existieren verschiedene Pakete einer Anwendung, die beim Übersetzen unterschiedlich konfiguriert wurden. Für Ghostscript gibt es ein ghostscript-Paket und ein ghostscript-nox11-Paket, die sich durch die X11 Unterstützung unterscheiden. Diese grobe Unterscheidung ist mit dem Paketsystem möglich, wird aber schnell unhandlich, wenn eine Anwendung mehr als ein oder zwei Optionen zum Zeitpunkt des Übersetzens besitzt.

  • Die Lizenzbestimmungen mancher Software verbietet ein Verbreiten in binärer Form. Diese Software muss als Quelltext ausgeliefert werden.

  • Einige Leute trauen binären Distributionen nicht. Wenn Sie den Quelltext besitzen, können Sie sich diesen (zumindest theoretisch) durchlesen und nach möglichen Problemen durchsuchen.

  • Wenn Sie eigene Anpassungen besitzen, benötigen Sie den Quelltext, um diese anzuwenden.

  • Manch einer besitzt gerne den Quelltext, um ihn zu lesen, wenn es einmal langweilig ist, ihn zu hacken, oder sich einfach ein paar Sachen abzugucken (natürlich nur, wenn es die Lizenzbestimmungen erlauben).

Wenn Sie über aktualisierte Ports informiert sein wollen, lesen Sie bitte die Mailinglisten FreeBSD ports und FreeBSD ports bugs.

Der Rest dieses Kapitels beschreibt, wie Sie Software Dritter mit Paketen oder Ports auf einem FreeBSD System installieren und verwalten.


4.3. Suchen einer Anwendung

Bevor Sie eine Anwendung installieren, müssen Sie deren Art und Namen kennen.

Die Anzahl der nach FreeBSD portierten Anwendungen steigt ständig. Zum Glück gibt es einige Wege, die richtige zu finden.

  • Eine aktuelle Liste verfügbarer Anwendungen, die sich auch durchsuchen lässt, finden Sie unter http://www.FreeBSD.org/ports/. Die Anwendungen sind in Kategorien unterteilt und Sie können sich alle Anwendungen einer Kategorie anzeigen lassen. Wenn Sie den Namen der Anwendung kennen, können Sie natürlich auch direkt nach dem Namen suchen.

  • FreshPorts, das von Dan Langille gepflegt wird, erreichen Sie unter http://www.FreshPorts.org/. FreshPorts verfolgt Änderungen an Anwendungen aus den Ports. Mit FreshPorts können Sie ein oder mehrere Ports beobachten und sich eine E-Mail schicken lassen, wenn ein Port aktualisiert wird.

  • Wenn Sie den Namen einer Anwendung nicht kennen, versuchen Sie eine Webseite wie FreshMeat (http://www.freshmeat.net/), um eine passende Anwendung zu finden. Schauen Sie dann auf der FreeBSD Webseite nach, ob die Anwendung schon portiert wurde.


4.4. Benutzen des Paketsystems

Beigesteuert von Chern Lee.

4.4.1. Installieren eines Pakets

Mit pkg_add(1) können Sie ein FreeBSD Paket von einer lokalen Datei oder über das Netzwerk installieren.

Beispiel 4-1. Download vor Installation eines Pakets

# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz

Wenn Sie die Pakete nicht lokal vorliegen haben (zum Beispiel auf den FreeBSD CD-ROMs), ist es wahrscheinlich einfacher den Schalter -r von pkg_add(1) zu verwenden. Das Werkzeug bestimmt dann automatisch das nötige Objektformat und die richtige Version des Pakets, lädt dieses dann von einem FTP-Server und installiert das Paket.

# pkg_add -r lsof

Das obige Beispiel würde ohne weitere Interaktion das richtige Paket herunterladen und installieren. Die Dateien werden mit fetch(3), das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt, heruntergeladen. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in fetch(3). Beachten Sie, dass im obigen Beispiel lsof anstelle von lsof-4.56.4 verwendet wird. Wenn Sie pkg_add(1) zum Herunterladen eines Pakets verwenden, darf die Versionsnummer des Pakets nicht angegeben werden, da automatisch die neuste Version der Anwendung geholt wird.

Pakete werden im .tgz- und .tbz-Format ausgeliefert. Sie finden Sie unter ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/ oder auf der FreeBSD CD-ROM Distribution. Jede CD der FreeBSD Distribution (oder des PowerPaks) enthält Pakete im Verzeichnis /packages. Die Struktur des Paketbaums entspricht dem /usr/ports Baum. Jede Kategorie besitzt ein eigenes Verzeichnis und alle Pakete befinden sich im Verzeichnis All.

Die Verzeichnisstruktur des Paketbaums ist ein Abbild der Ports, da beide Systeme eng zusammenarbeiten.


4.4.2. Verwalten von Paketen

pkg_info(1) zeigt alle installierten Pakete und deren Beschreibung an.

# pkg_info
cvsup-16.1          A general network file distribution system optimized for CV
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...

pkg_version(1) vergleicht die Version installierter Pakete mit der Version aus der Ports-Sammlung.

# pkg_version
cvsup                       =
docbook                     =
...

Die Symbole in der zweiten Spalte zeigen das Alter des Pakets im Vergleich zu der lokalen Version aus der Ports-Sammlung an.

Symbol Bedeutung
= Die Version des installierten Paketes stimmt mit der Version aus der lokalen Ports-Sammlung überein.
< Die installierte Version ist älter als die der verfügbaren Version aus der Ports-Sammlung.
> Die installierte Version ist neuer als die aus der Ports-Sammlung (Eventuell ist die lokale Ports-Sammlung veraltet).
? Das installierte Paket konnte in der Ports-Sammlung nicht gefunden werden. Das kann dadurch hervorgerufen werden, dass ein installierter Port aus der Ports-Sammlung entfernt wurde oder einen neuen Namen erhalten hat.
* In der Ports-Sammlung befinden sich mehrere Versionen der Anwendung.



4.4.3. Entfernen eines Pakets

Um ein zuvor installiertes Paket zu entfernen, benutzen Sie das Werkzeug pkg_delete(1).

# pkg_delete xchat-1.7.1

4.4.4. Verschiedenes

Informationen über alle installierte Pakete werden in /var/db/pkg abgelegt. Das Verzeichnis enthält Dateien, in denen sich die Beschreibungen der Pakete und Listen von Dateien, die zu einem Paket gehören, befinden.


4.5. Benutzen der Ports-Sammlung

Die folgenden Abschnitte stellen die grundlegenden Anweisungen vor, um Anwendungen aus der Ports-Sammlung auf Ihren Rechner zu installieren oder zu löschen.


4.5.1. Installation der Ports-Sammlung

Bevor Sie einen Port installieren können, müssen Sie zuerst die Ports-Sammlung installieren, die aus Makefiles, Patches und Beschreibungen besteht. Die Ports-Sammlung wird für gewöhnlich unter /usr/ports installiert.

Bei der FreeBSD Installation hatten Sie in Sysinstall die Möglichkeit, die Ports-Sammlung zu installieren. Wenn Sie die Sammlung damals nicht installiert haben, können Sie das mit den folgenden Anweisungen nachholen:

Installieren mit Sysinstall

Sie können die Ports-Sammlung nachträglich mit sysinstall installieren.

  1. Führen Sie als root /stand/sysinstall aus:

    # /stand/sysinstall
    
  2. Wählen Sie den Punkt Configure aus und drücken Sie Enter.

  3. Wählen Sie dann Distributions aus und drücken Sie Enter.

  4. In diesem Menü wählen Sie ports aus und drücken die Leertaste.

  5. Danach wählen Sie Exit aus und drücken Enter.

  6. Legen Sie nun ein geeignetes Installationsmedium, wie CD-ROM oder FTP, fest.

  7. Wählen Sie nun Exit aus und drücken Enter.

  8. Verlassen Sie sysinstall mit X.

Alternativ können Sie die Ports-Sammlung auch mit CVSup installieren und aktualisieren. Ein Beispiel für die Konfiguration von CVSup finden Sie in /usr/share/examples/cvsup/ports-supfile. Weitere Informationen über CVSup und dessen Konfiguration finden Sie in Benutzen von CVSup (Abschnitt A.5).

Installieren mit CVSup

Dies ist eine schnelle Methode um die Ports-Sammlung zu aktualisieren.

  1. Installieren Sie den net/cvsup Port. Weitere Informationen finden Sie in Installation von CVSup (Abschnitt A.5.2).

  2. Kopieren Sie als root /usr/share/examples/cvsup/ports-supfile an einen neuen Ort, beispielsweise nach /root oder in Ihr Heimatverzeichnis.

  3. Editieren Sie die Kopie von ports-supfile.

  4. Ersetzen Sie CHANGE_THIS.FreeBSD.org durch einen CVSup-Server in Ihrer Nähe. Eine vollständige Liste der CVSup-Spiegel finden Sie in CVSup Spiegel (Abschnitt A.5.7).

  5. Führen Sie cvsup aus:

    # cvsup -g -L 2 /root/ports-supfile
    
  6. Mit diesem Kommando können Sie später die Ports-Sammlung aktualisieren. Die installierten Ports werden mit diesem Kommando nicht aktualisiert.


4.5.2. Ports installieren

Was ist mit einem ``Gerüst'' im Zusammenhang mit der Ports-Sammlung gemeint? In aller Kürze: ein Gerüst eines Ports ist ein minimaler Satz von Dateien, mit denen das FreeBSD System eine Anwendung sauber übersetzen und installieren kann. Ein jeder Port beinhaltet:

  • Eine Datei Makefile. Das Makefile enthält verschiedene Anweisungen, die spezifizieren, wie eine Anwendung kompiliert wird und wo sie auf Ihrem System installiert werden sollte.

  • Eine Datei distinfo. Diese enthält Informationen, welche Dateien heruntergeladen werden müssen, sowie MD5-Prüfsummen, um sicher zu gehen, dass diese Dateien während des Herunterladens nicht beschädigt wurden.

  • Ein files Verzeichnis. Hierin liegen Patches, welche das Übersetzen und Installieren der Anwendung ermöglichen. Patches sind im Wesentlichen kleine Dateien, die Änderungen an speziellen Dateien spezifizieren. Sie liegen als reiner Text vor und sagen ungefähr: ``Lösche Zeile 10'' oder ``Ändere Zeile 26 zu ...''. Patches sind auch bekannt unter dem Namen ``diffs'', weil Sie mit dem Programm diff(1) erstellt werden.

    Dieses Verzeichnis kann auch noch andere Dateien enthalten, welche zum Bauen des Ports benutzt werden.

  • Eine Datei pkg-descr. Eine ausführlichere, oft mehrzeilige Beschreibung der Anwendung.

  • Eine Datei pkg-plist. Das ist eine Liste aller Dateien, die durch diesen Port installiert werden. Außerdem sind hier Informationen enthalten, die zum Entfernen des Ports benötigt werden.

Einige Ports besitzen noch andere Dateien, wie pkg-message, die vom Portsystem benutzt werden, um spezielle Situationen zu handhaben. Wenn Sie mehr über diese Dateien oder das Port-System erfahren sollen, lesen Sie bitte im FreeBSD FreeBSD Porter's Handbook weiter.

Nun haben Sie genug Hintergrund Informationen über die Ports-Sammlung und Sie können Ihren ersten Port installieren. Es gibt dazu zwei Möglichkeiten, die im Folgenden erläutert werden.

Bevor Sie damit beginnen, müssen Sie sich natürlich einen Port zum Installieren aussuchen. Sie können dazu mehrere Wege gehen, als einfachste Methode gibt es die Liste aller Ports auf dem FreeBSD Web-Server. Sie können dort suchen oder in der Liste schmökern. Jeder Port enthält außerdem eine Beschreibung, so dass Sie sich vor der Entscheidung, welchen Port Sie installieren wollen, über den Port informieren können.

Sie können einen Port auch mit whereis(1) suchen. Geben Sie einfach whereis Datei ein, wobei Datei der Name des Programms ist, das Sie suchen:

# whereis lsof
lsof: /usr/ports/sysutils/lsof

Damit haben wir herausgefunden, dass sich lsof, ein Systemwerkzeug, in /usr/ports/sysutils/lsof befindet.

Ein weiterer Weg, einen bestimmten Port zu finden, ist es, die eingebaute Suchfunktion der Ports-Sammlung zu benutzen. Dazu müssen Sie im Verzeichnis /usr/ports sein. Darin geben Sie make search name=Anwendungsname ein, worin Anwendungsname der Name der von Ihnen gesuchten Anwendung ist. Wenn Sie zum Beispiel nach lsof suchen:

# cd /usr/ports
# make search name=lsof
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps:
R-deps:

Der Teil der Ausgabe der Sie interessiert ist die Zeile, die mit ``Path:'' beginnt, weil sie Ihnen sagt, wo der Port zu finden ist. Die anderen Informationen werden zum Installieren des Ports nicht direkt benötigt, Sie brauchen sich darum jetzt nicht weiter zu kümmern.

Mit make search key=Text können Sie erweiterte Suchen durchführen. Damit werden Portnamen, Kommentare, Beschreibungen und Abhängigkeiten nach Text durchsucht. Dies kann sehr nützlich sein, wenn Sie den Namen des Programms, nach dem Sie suchen, nicht kennen.

In beiden Fällen wird Groß- und Kleinschreibung bei der Suche ignoriert. Die Suche nach ``LSOF'' wird dieselben Ergebnisse wie die Suche nach ``lsof'' liefern.

Anmerkung: Zum Installieren von Ports müssen Sie als Benutzer root angemeldet sein.

Jetzt, wo Sie den gewünschten Port gefunden haben, kann es mit der eigentlichen Installation losgehen. Der Port enthält Anweisungen, wie der Quelltext zu bauen ist, enthält aber nicht den Quelltext selbst. Den Quelltext erhalten Sie von einer CD-ROM oder aus dem Internet. Quelltexte werden in einem Format nach Wahl des jeweiligen Software-Autors ausgeliefert. Häufig ist dies ein gezipptes Tar-Archiv, aber es kann auch mit einem anderen Tool komprimiert oder gar nicht komprimiert sein. Der Quelltext, in welcher Form er auch immer vorliegen mag, wird ``Distfile'' genannt.


4.5.2.1. Installation von einer CD-ROM

Die offiziellen FreeBSD CD-ROMs enthalten keine Distfiles mehr, da diese sehr viel Platz beanspruchen, der besser von vorkompilierten Paketen genutzt werden kann. Andere FreeBSD CD-ROMs, wie der ``FreeBSD PowerPak'', enthalten Distfiles. Diese CD-ROMs können Sie über einen Händler wie FreeBSD Mall beziehen. Dieser Abschnitt geht davon aus, dass Sie eine solche CD-ROM Distribution besitzen.

# cd /usr/ports/sysutils/lsof

Im Verzeichnis lsof kann man das Gerüst erkennen. Der nächste Schritt ist das Übersetzen (auch Bauen genannt) des Ports. Dies wird durch Eingabe von make getan. Haben Sie das eingegeben, so werden Sie etwas lesen wie:

# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from file:/cdrom/ports/distfiles/.
===>  Extracting for lsof-4.57
...
[Ausgabe des Auspackens weggelassen]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[configure-Ausgabe weggelassen]
...
===>  Building for lsof-4.57
...
[Ausgabe der Übersetzung weggelassen]
...
#

Ist die Übersetzungsprozedur beendet, sind Sie wieder in der Kommandozeile und der nächste Schritt ist die Installation. Erweitern Sie dazu einfach die make-Kommandozeile um das Wort install:

# make install
===>  Installing for lsof-4.57
...
[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.
#

Wenn Sie wieder den Prompt haben, sollten Sie in der Lage sein, die gerade installierte Anwendung laufen zu lassen. Da lsof eine Anwendung ist, die mit erhöhten Rechten läuft, wird eine Sicherheitswarnung angezeigt. Sie sollten alle Warnungen während des Baus und der Installation eines Ports beachten.

Anmerkung: Sie können einen Schritt sparen, wenn Sie gleich make install anstelle von make und dem anschließenden make install eingeben.

Anmerkung: Um die Suche nach Kommandos zu beschleunigen, speichern einige Shells eine Liste der verfügbaren Kommandos in den durch die Umgebungsvariable PATH gegebenen Verzeichnissen. Nach der Installation eines Ports müssen Sie in einer solchen Shell vielleicht das Kommando rehash absetzen, um die neu installierten Kommandos benutzen zu können. Dies betrifft sowohl die beiden Shells des Basissystems, wie die tcsh, und Shells aus den Ports, zum Beispiel die shells/zsh.

Anmerkung: Beachten Sie bitte, dass die Lizenzen einiger Ports die Einbeziehung auf der CD-ROM verbieten. Das kann verschiedene Gründe haben. Beispielsweise eine Registrierung vor dem Herunterladen erforderlich oder die Weiterverteilung ist verboten. Wenn Sie einen Port installieren wollen, der nicht auf der CD-ROM enthalten ist, müssen Sie Online sein. Folgen Sie bitte den Anweisungen des nächsten Abschnitts.


4.5.2.2. Ports vom Internet installieren

Dieser Abschnitt setzt voraus, dass Sie eine Verbindung mit dem Internet haben. Haben Sie dies nicht, müssen Sie eine CD-ROM Installation durchführen oder das Distfile selber nach /usr/ports/distfiles stellen.

Das Installieren eines Ports vom Internet wird genauso durchgeführt wie das Installieren von CD-ROM. Der einzige Unterschied zwischen beiden ist, dass das Distfile des Ports vom Internet heruntergeladen und nicht von der CD-ROM gelesen wird.

Die durchgeführten Schritte sind identisch:

# make install
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps)
===>  Extracting for lsof-4.57
...
[Ausgabe des Auspackens weggelassen]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[configure-Ausgabe weggelassen]
...
===>  Building for lsof-4.57
...
[Ausgabe der Übersetzung weggelassen]
...
===>  Installing for lsof-4.57
...
[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.
#

Wie Sie sehen können, besteht der einzige Unterschied in der Zeile, die Ihnen sagt, woher das System den Quellcode holt.

Die Ports-Sammlung benutzt zum Herunterladen von Dateien fetch(3), das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen, oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in fetch(3).

Benutzer ohne eine ständige Internet-Verbindung werden das Kommando make fetch zu schätzen wissen. Das Kommando lädt alle benötigten Dateien eines Ports herunter. Sie können das Kommando im Verzeichnis /usr/ports laufen lassen. In diesem Fall werden alle Dateien heruntergeladen. Es ist auch möglich, make fetch nur in einem Teil des Baums, wie /usr/ports/net, aufzurufen. Die Dateien von allen abhängigen Ports werden mit diesem Kommando allerdings nicht heruntergeladen. Wenn Sie diese Dateien ebenfalls herunterladen wollen, ersetzen Sie im Kommando fetch durch fetch-recursive.

Anmerkung: Abhängig davon, in welchem Verzeichnis Sie make aufrufen, können Sie analog zu make fetch die Ports einer Kategorie oder alle Ports bauen. Beachten Sie allerdings, dass manche Ports nicht zusammen installiert werden können. Weiterhin gibt es Fälle, in denen zwei Ports unterschiedliche Inhalte in derselben Datei speichern wollen.

Manchmal ist es erforderlich, die benötigten Dateien von einem anderen Ort als den im Port vorgesehenen herunterzuladen. Der Ort wird durch die Variable MASTER_SITES vorgegeben, die Sie wie folgt überschreiben können:

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

Im Beispiel wurde MASTER_SITES mit dem Wert ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ überschrieben.

Anmerkung: Einige Ports besitzen Optionen, mit denen Sie zusätzliche Funktionen oder Sicherheitsoptionen einstellen können (oder manchmal auch müssen). Zusätzliche Optionen können beispielsweise für www/mozilla, security/gpgme und mail/sylpheed-claws angegeben werden. Wenn ein Port über zusätzliche Optionen verfügt, werden diese beim Bau des Ports auf der Konsole ausgegeben.


4.5.2.3. Vorgabe-Verzeichnisse ändern

Manchmal ist es nützlich (oder erforderlich), in anderen Verzeichnissen zu arbeiten. Die Verzeichnisse können Sie mit den Variablen PORTSDIR und PREFIX einstellen. Die Variable PORTSDIR gibt das Bauverzeichnis an:

# make PORTSDIR=/usr/home/example/ports install

Dieses Kommando baut den Port in /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 können beide Variablen auch zusammen benutzen:

# make PORTSDIR=../ports PREFIX=../local install

Die Kommandozeile ist zu lang, um sie hier komplett wiederzugeben, aber Sie sollten die zugrunde liegende Idee erkennen.


4.5.2.4. Probleme mit imake

Einige Ports, welche imake(1) (Teil des X Window Systems) benutzen, funktionieren nicht gut mit PREFIX und bestehen darauf, unter /usr/X11R6 installiert zu werden. In ähnlicher Weise verhalten sich einige Perl-Ports, die PREFIX ignorieren und sich in den Perl-Verzeichnisbaum installieren. Zu erreichen, dass solche Ports PREFIX beachten, ist schwierig oder sogar unmöglich.


4.5.3. Entfernen installierter Ports

Da Sie nun wissen, wie man einen Port installiert, wollen Sie sicher auch wissen, wie man einen Port entfernt, für den Fall, dass Sie versehentlich einen falschen installiert haben. Nun wollen wir mal unser vorheriges Beispiel wieder löschen (für alle die nicht aufgepasst haben, das war lsof). Wie beim Installieren wechseln Sie zuerst in das Verzeichnis des Ports /usr/ports/sysutils/lsof. Nachdem Sie das Verzeichnis gewechselt haben, können Sie lsof mit make deinstall entfernen:

# cd /usr/ports/sysutils/lsof
# make deinstall
===>  Deinstalling for lsof-4.57

Das war leicht, Sie haben lsof von Ihrem System entfernt. Möchten Sie den Port doch wieder neu installieren, geben Sie make reinstall im Verzeichnis /usr/ports/sysutils/lsof ein.

make deinstall und make reinstall funktionieren nicht mehr, wenn Sie einmal make clean ausgeführt haben. Wenn Sie dennoch einen Port nach einem make clean entfernen möchten, benutzen Sie pkg_delete(1) wie im Abschnitt Benutzen des Paketsystems beschrieben.


4.5.4. Platzbedarf von Ports

Die Ports-Sammlung kann sehr viel Plattenplatz verschlingen. Führen Sie nach dem Bau und der Installation eines Ports make clean aus, um die Arbeitsverzeichnisse zu löschen. Die Quelldateien im Verzeichnis distfiles können Sie ebenfalls löschen. Entfernen Sie nicht mehr benötigte Ports, um weiteren Plattenplatz freizugeben.

Wenn Sie die Ports-Sammlung mit CVSup synchronisieren, können Sie in der Datei refuse Kategorien angeben, die nicht heruntergeladen werden sollen.


4.5.5. Ports aktualisieren

Es kann sehr mühsam sein, einen Port zu aktualisieren: Sie müssen den Port im Port-Verzeichnis bauen, den alten Port entfernen, den neuen Port installieren und anschließend aufräumen. Stellen Sie sich vor, Sie müssten fünf Ports auf diese Weise aktualisieren! Viele Systemadministratoren haben sich über dieses aufwändige Verfahren beklagt. Mittlerweile gibt es aber den Port sysutils/portupgrade, der diese Aufgabe automatisiert. Installieren Sie den Port, wie jeden anderen, mit dem Kommando make install clean.

Das Werkzeug portupgrade benötigt eine Datenbank, die installierte Ports enthält. Das Kommando pkgdb -F erstellt diese Datenbank im Verzeichnis /var/db/pkg. Das Kommando portupgrade -a aktualisiert alle Ports des Systems. Dazu wird die Datenbank und die Datei INDEX der Ports-Sammlung gelesen. Anschließend werden die benötigten Quelldateien heruntergeladen, die Ports gebaut, gesichert und installiert. Zum Abschluß räumt portupgrade die Arbeitsverzeichnisse auf. Im Verzeichnis ports/sysutils finden Sie weitere Werkzeuge, mit denen Sie die Ports-Sammlung aktualisieren können.


4.6. Nach der Installation

Nach der Installation einer neuen Anwendung wollen Sie wahrscheinlich die mitgelieferte Dokumentation lesen und die Konfigurationsdateien der Anwendung anpassen. Wenn die Anwendung ein Dæmon ist, sollten Sie sicherstellen, dass die Anwendung beim Booten startet.

Die einzelnen Schritte sind natürlich von Anwendung zu Anwendung verschieden. Wenn Sie sich allerdings nach der Installation einer Anwendung die Frage ``Was nun?'' stellen, helfen die folgenden Hinweise vielleicht weiter.

  • Finden Sie mit pkg_info(1) heraus, welche Dateien die Anwendung wo installiert hat. Wenn Sie beispielsweise gerade die Version 1.0.0 von FooPackage installiert haben, zeigt Ihnen das folgende Kommando alle installierten Dateien des Pakets:

    # pkg_info -L foopackage-1.0.0 | less
    

    Achten Sie besonders auf die Manualpages, die Sie in man/ Verzeichnissen finden und auf Konfigurationsdateien, die in etc/ abgelegt werden. Manche Pakete enthalten in doc/ zusätzliche Dokumentation.

    Wenn Sie sich nicht sicher sind, welche Version einer Anwendung Sie gerade installiert haben, können Sie mit dem folgenden Kommando nach der Anwendung suchen:

    # pkg_info | grep -i foopackage
    

    Das Kommando zeigt alle installierten Pakete, deren Paketname foopackage enthält. Ersetzen Sie foopackage durch den Namen der Anwendung, die Sie suchen.

  • Nachdem Sie die Manualpages der Anwendung gefunden haben, lesen Sie diese bitte mit man(1). Schauen Sie sich auch die Beispiele für Konfigurationsdateien und die zusätzliche Dokumentation, wenn es welche gibt, an.

  • Wenn es für die Anwendung eine Webseite gibt, suchen Sie dort nach zusätzlicher Dokumentation wie FAQs (häufig gestellte Fragen). Wenn Sie die Adresse der Webseite nicht kennen, versuchen Sie das folgende Kommando:

    # pkg_info foopackage-1.0.0
    

    Die Ausgabe enthält oft eine Zeile, die mit WWW: beginnt und die URL der Webseite enthält.

  • Ports, die während des Systemstarts gestartet werden sollen, installieren meist ein Beispielskript im Verzeichnis /usr/local/etc/rc.d. Überprüfen Sie dieses Skript. Wenn nötig, passen Sie das Skript an und benennen Sie es um. Weitere Informationen finden Sie in Abschnitt 6.5.


4.7. Kaputte Ports

Stolpern Sie mal über einen Port, der bei Ihnen nicht funktioniert, könnten Sie zum Beispiel Folgendes tun:

  1. Reparieren Sie ihn! Das FreeBSD Porter's Handbook enthält eine detaillierte Beschreibung des Portsystems. Damit sind Sie in der Lage, einen gelegentlich kaputten Port zu reparieren oder einen eigenen Port zu erstellen.

  2. Rummeckern - nur mittels E-Mail! Senden Sie zuerst eine E-Mail an den Betreuer des Ports. 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 den Namen und die Version des Ports (schicken Sie die Zeile mit $FreeBSD: aus dem Makefile) und die Ausgabe bis zur Fehlermeldung mitzuschicken. Erhalten Sie vom Betreuer keine Resonanz, können mit send-pr(1) einen Fehler-Report senden.

  3. Holen Sie sich das Paket von einem FTP-Server in Ihrer Nähe. Die ``Basis'' Sammlung aller Pakete liegt auf ftp.de.FreeBSD.org im Verzeichnis packages. Aber versuchen Sie zuerst einen Spiegel in Ihrer Nähe! Benutzen Sie das Programm pkg_add(1), um Pakete auf Ihrem Rechner zu installieren. Dies hat zudem den Vorteil, dass es schneller geht.


Kapitel 5. Das X-Window-System

Übersetzt von Martin Heinen.

5.1. Übersicht

Mit XFree86 steht unter FreeBSD eine leistungsfähige grafische Benutzeroberfläche zur Verfügung. XFree86 ist eine Open-Source Realisierung des X-Window-Systems. Dieses Kapitel behandelt die Installation und Konfiguration von XFree86 auf einem FreeBSD-System. Weitere Informationen über XFree86 und unterstützte Video-Hardware finden Sie auf der XFree86 Website.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie

  • die Komponenten des X-Window-Systems und ihr Zusammenspiel kennen.

  • Wissen, wie XFree86 installiert und konfiguriert wird.

  • Wissen, wie Sie verschiedene Window-Manager installieren und benutzen.

  • Wissen, wie TrueType®-Schriftarten mit XFree86 benutzt werden.

  • Wissen, wie Sie die grafische Anmeldung (XDM) einrichten.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • wissen, wie Sie Software Dritter installieren (Kapitel 4).


5.2. X-Grundlagen

Anwendern anderer grafischer Benutzeroberflächen, wie Microsoft Windows oder Mac OS, kommt X beim ersten Mal oft befremdlich vor.

Man braucht kein weitreichendes Verständnis der X-Komponenten und Ihres Zusammenspiels, um X anzuwenden. Um die Stärken von X auszunutzen, sollten Sie allerdings die Grundlagen verstehen.


5.2.1. Warum heißt es X?

X ist nicht die erste grafische Benutzeroberfläche, die für UNIX geschrieben wurde. Die Entwickler von X arbeiteten vorher an einem anderen System, das W (von engl. window: Fenster) hieß. X ist schlicht der nächste Buchstabe im Alphabet.

X wird ``X'', ``X-Window-System'' oder ``X11'' genannt. Sagen Sie bitte nicht ``X-Windows'': das kommt bei einigen Leuten schlecht an (die Hilfeseite X(7) führt dies näher aus).


5.2.2. Das Client/Server-Modell von X

X wurde von Anfang an netzwerktransparent entworfen und verwendet ein Client-Server-Modell. In diesem Modell läuft der Server auf dem Rechner, an dem die Tastatur, der Bildschirm und die Maus angeschlossen ist. Der Server ist für Dinge wie die Verwaltung des Bildschirms und die Verarbeitung von Tastatur- und Maus-Eingaben verantwortlich. Jede X-Anwendung, beispielsweise ein XTerm oder Netscape ist ein 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 gedrückt''.

Wenn, wie oft in kleinen Umgebungen, nur ein Rechner zur Verfügung steht, laufen der X-Server und die X-Clients auf demselben Rechner. Es ist aber durchaus möglich, den X-Server auf einem weniger leistungsfähigen Arbeitsplatzrechner laufen zu lassen und die X-Anwendungen (die Clients) auf dem leistungsfähigen und teuren Server der Arbeitsgruppe zu betreiben. In diesem Fall kommunizieren der X-Server und die X-Clients über das Netz.

Dieses Modell verwirrt viele Leute, die erwarten, dass der X-Server der dicke Rechner im Maschinenraum und der X-Client ihr Arbeitsplatzrechner ist.

Merken Sie sich einfach, dass der X-Server der Rechner mit dem Bildschirm und der Maus ist und die X-Clients Programme sind, die in den Fenstern laufen.

Das X-Protokoll ist unabhängig vom verwendeten Betriebssystem und Rechnertyp. Ein X-Server kann durchaus auch unter Microsoft Windows oder Apples Mac OS betrieben werden, wie viele kostenlose und kommerzielle Anwendungen zeigen.

Der X-Server von FreeBSD heißt XFree86 und steht kostenlos unter einer Lizenz, die ähnlich der FreeBSD-Lizenz ist, zur Verfügung. Kommerzielle X-Server sind ebenfalls erhältlich.


5.2.3. Der Window-Manager

Die X-Philosophie ``Werkzeuge statt Richtlinien'' ist wie die UNIX-Philosophie. Es wird nicht vorgeschrieben, wie eine Aufgabe zu lösen ist, stattdessen erhält der Benutzer Werkzeuge, über die er frei verfügen kann.

Dies geht so weit, dass X nicht bestimmt, wie Fenster auf dem Bildschirm auszusehen haben, wie sie mit der Maus zu verschieben sind, welche Tastenkombination benutzt werden muss, um zwischen den Fenstern zu wechseln (z.B. Alt+Tab unter Microsoft Windows), oder ob die Fensterrahmen Schaltflächen zum Schließen haben.

X gibt die Verantwortung für all diese Sachen an eine Anwendung ab, die Window-Manager genannt wird. Unter X gibt es zahlreiche Window-Manager: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker um nur einige zu nennen. Jeder dieser Window-Manager sieht anders aus: manche stellen virtuelle Bildschirme zur Verfügung, in anderen lassen sich die Tastenkombinationen zur Verwaltung des Bildschirms anpassen, einige besitzen eine Startleiste oder etwas Ähnliches und in manchen läßt sich das Aussehen und Verhalten über die Anwendung von Themes beliebig einstellen. Die eben genannten Window-Manager und viele weitere finden Sie in der Kategorie x11-wm der Ports-Sammlung.

Die grafischen Benutzeroberflächen KDE und GNOME besitzen eigene Window-Manager, die in den grafischen Arbeitsplatz integriert sind.

Die Window-Manager werden unterschiedlich konfiguriert. Einige erwarten eine manuell erstellte Konfigurationsdatei, andere bieten grafische Werkzeuge für die meisten Konfigurations-Arbeiten an. Die Konfigurationsdatei von sawfish ist sogar in einem Lisp-Dialekt geschrieben.

Fokus: Weiterhin ist der Window-Manager für die Methode, mit der ein Fenster den Fokus bekommt, verantwortlich. 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 geläufige Methode, den Fokus zu wechseln, wird ``click-to-focus'' genannt. Die Methode wird in Microsoft Windows benutzt: Ein Fenster wird aktiv, wenn es mit der Maus angeklickt wird.

X legt nicht fest, wie der Fokus einzustellen ist, stattdessen bestimmt der Window-Manager welches Fenster den Fokus zu einem gegebenen Zeitpunkt erhält. Alle Window-Manager stellen die Methode ``click-to-focus'' bereit, die meisten stellen auch noch andere Methoden bereit.

Verbreitete Methoden, den Fokus einzustellen, sind:

focus-follows-mouse

Den Fokus hat das Fenster, unter dem sich der Mauszeiger befindet. Das muss nicht unbedingt das Fenster, sein, das sich vorne befindet. Wird der Mauszeiger in ein anderes Fenster bewegt, so erhält dieses Fenster den Fokus, ohne das es angeklickt werden muss.

sloppy-focus

Diese Methode erweitert die Methode ``focus-follows-mouse''. Wenn die Maus mit ``focus-follows-mouse'' aus dem Fenster auf die Oberfläche bewegt wird, verliert das aktive Fenster den Fokus. Da dann kein Fenster mehr den Fokus hat, gehen alle Eingaben verloren. Die Methode ``sloppy-focus'' wechselt den Fokus nur, wenn sich der Mauszeiger in ein neues Fenster bewegt und nicht, wenn er das aktive Fenster verläßt.

click-to-focus

Das aktive Fenster wird durch einen Mausklick festgelegt (dabei kann das Fenster vor alle anderen Fenster gesetzt werden). Alle Eingaben werden dann, unabhängig von der Position des Mauszeigers, dem aktiven Fenster zugeordnet.

Viele Window-Manager unterstützen noch andere Methoden, so wie Abwandlungen der hier vorgestellten Methoden. Schauen Sie sich dazu bitte die Hilfeseiten Ihres Window-Managers an.


5.2.4. Widgets

Die X-Philosophie dehnt sich auch auf die Widgets aus, die von den Anwendungen benutzt werden.

Ein Widget bezeichnet Objekte, die manipuliert werden können, wie buttons (Schaltflächen), check buttons (Mehrfachauswahlknopf), radio buttons (Einfachauswahlknopf), Icons und Auswahllisten. Unter Microsoft Windows werden Widgets Controls genannt.

Microsoft Windows und Apples Mac OS geben strenge Richtlinien für Widgets vor: Von den Entwicklern wird erwartet, dass Sie Anwendungen mit einheitlichem Aussehen und einheitlicher Bedienung (look and feel) entwickeln. X gibt weder einen Stil noch Widgets vor, die benutzt werden müssen.

Erwarten Sie daher nicht, dass alle X-Anwendungen gleich aussehen oder sich gleich bedienen lassen. Es gibt mehrere verbreitete Widget-Sammlungen, beispielsweise die Athena-Widgets vom MIT, Motif® (abgeschrägte Ecken und drei Grautöne, danach wurden die Widgets von Microsoft Windows entworfen) oder OpenLook.

Die meisten neuen X-Anwendungen benutzen heute modern aussehende Widgets, wie Qt, das von KDE benutzt wird oder GTK, das von GNOME benutzt wird. Damit wird eine gewisse Einheitlichkeit in Bedienung und Aussehen erreicht, die sicher neuen Benutzern die Arbeit erleichtert.


5.3. XFree86™ installieren

Legen Sie zuerst die XFree86-Version fest, die Sie einsetzen wollen. XFree86 3.X ist sehr stabil und unterstützt zahlreiche Grafikkarten, allerdings wird dieser Entwicklungszweig nicht mehr weiterentwickelt. XFree86 4.X wurde komplett neu entworfen und besitzt neue Merkmale wie die verbesserte Unterstützung von Schriftarten und Anti-aliasing. Leider mussten dafür auch die Grafiktreiber neu geschrieben werden und einige der alten Karten, die in 3.X unterstützt wurden, werden in 4.X noch nicht unterstützt. Da Treiber für neue Grafikkarten nur noch in XFree86 4.X erstellt werden, ist diese Version in FreeBSD voreingestellt.

Während Sie FreeBSD einrichten, haben Sie Gelegenheit XFree86 4.X zu installieren. XFree86 3.X müssen Sie nach dem Basissystem installieren. Aus der Ports-Sammlung installieren Sie XFree86 3.X wie folgt:

# cd /usr/ports/x11/XFree86
# make all install clean

Beide Versionen von XFree86 können Sie auch direkt mit den binären Distributionen von der XFree86 Website installieren. XFree86 4.X steht ebenfalls als Paket für pkg_add(1) zur Verfügung. Soll das Paket auch mit pkg_add(1) heruntergeladen werden, darf die Versionsnummer auf der Kommandozeile nicht verwendet werden, da pkg_add(1) automatisch die neuste Version herunterlädt. Die neuste Version von XFree86 4.X wird mit dem folgenden Kommando heruntergeladen und installiert:

# pkg_add -r XFree86

XFree86 4.X lässt sich auch aus der Ports-Sammlung installieren:

# cd /usr/ports/x11/XFree86-4
# make install clean

Anmerkung: Die obigen Beispiele installieren ein komplettes X (mit Servern, Clients und Schriftarten). Einzelne Komponenten von XFree86 4.X stehen auch als separates Paket oder als separater Port zur Verfügung.

Der Rest dieses Kapitels erklärt, wie Sie XFree86 konfigurieren und sich eine Arbeitsumgebung einrichten.


5.4. XFree86 konfigurieren

Beigetragen von Christopher Shumway.

5.4.1. Vorarbeiten

Bevor Sie XFree86 4.X konfigurieren, benötigen Sie folgende Informationen:

  • die Spezifikationen des Monitors

  • den Chipset des Grafikadapters

  • die Speichergröße des Grafikadapters

Aus den Spezifikationen des Monitors ermittelt XFree86 die Auflösung und die Wiederholrate für den Betrieb des X-Servers. Die Spezifikationen entnehmen Sie der Dokumentation des Monitors oder der Webseite des Herstellers. Sie benötigen die horizontale und die vertikale Synchronisationsfrequenz.

Der Chipsatz der Grafikkarte bestimmt den Treiber, den XFree86 verwendet. Die meisten Chipsätze werden automatisch erkannt, Sie brauchen die Information jedoch, wenn die Erkennung fehlschlägt.

Die Speichergröße der Grafikkarte bestimmt die maximal mögliche Auflösung und Farbtiefe.


5.4.2. XFree86 4.X konfigurieren

XFree86 4.X wird in mehreren Schritten konfiguriert. Mit der Option -configure von XFree86 wird zuerst eine Vorgabe für die Konfigurationsdatei erstellt. Setzen Sie dazu als root den folgenden Befehl ab:

# XFree86 -configure

Die Vorgabe-Konfiguration wird dann unter dem Namen XF86Config.new im Verzeichnis /root abgespeichert (das verwendete Verzeichnis wird durch die Umgebungsvariable $HOME bestimmt und hängt davon ab, wie Sie zu root gewechselt sind). XFree86 hat in diesem Schritt versucht, die Grafik-Hardware des Systems zu erkennen und eine Konfigurationsdatei ausgeschrieben, die die zur Hardware passenden Treiber lädt.

Im nächsten Schritt wird geprüft, ob XFree86 die Grafik-Hardware des Systems verwenden kann. Setzen Sie dazu den folgenden Befehl ab:

# XFree86 -xf86config XF86Config.new

Wenn jetzt ein graues Raster und der X-Mauszeiger erscheinen, war die Konfiguration erfolgreich. Beenden Sie den Test indem Sie Ctrl+Alt+Backspace drücken.

Anmerkung: Wenn die Maus nicht funktioniert, überprüfen Sie, ob die Maus konfiguriert wurde. Die Mauskonfiguration wird in Kapitel 2 beschrieben.

Als Nächstes passen Sie XF86Config.new an. Öffnen Sie die Datei in einem Editor, wie emacs(1) oder ee(1) und fügen Sie die Synchronisationsfrequenzen des Monitors ein. Die Frequenzen werden im Abschnitt "Monitor" eingetragen:

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
        HorizSync    30-107
        VertRefresh  48-120
EndSection

Unter Umständen fehlen die Schlüsselwörter HorizSync und VertRefresh, die Sie dann nachtragen müssen. Geben Sie, wie im Beispiel gezeigt, die horizontale Synchronisationsfrequenz hinter Horizsync und die vertikale Synchronisationsfrequenz hinter VertRefresh an.

X unterstützt die Energiesparfunktionen (DPMS, Energy Star) Ihres Monitors. Mit xset(1) können Sie Zeitschranken für die DPMS-Modi ``standby'', ``suspend'', ``off'' vorgeben, oder diese zwingend aktivieren. Die DPMS-Funktionen können Sie mit der nachstehenden Zeile im "Monitor"-Abschnitt aktivieren:

        Option       "DPMS"

Die gewünschte Auflösung und Farbtiefe stellen Sie im Abschnitt "Screen" ein:

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth 24
        SubSection "Display"
                Depth     24
                Modes     "1024x768"
        EndSubSection
EndSection

Mit DefaultDepth wird die Farbtiefe des X-Servers vorgegeben. Mit der Option -bpp von XFree86(1) lässt sich die vorgegebene Farbtiefe überschreiben. Modes gibt die Auflösung für die angegebene Farbtiefe an. Die Farbtiefe im Beispiel beträgt 24 Bits pro Pixel, die zugehörige Auflösung ist 1024x768 Pixel. Beachten Sie, dass in der Voreinstellung nur Standard-VESA-Modi der Grafikkarte angegeben werden können.

Sichern Sie die Konfigurationsdatei und testen Sie sie wie oben beschrieben. Installieren Sie dann die Datei an einen Ort, an dem XFree86(1) sie findet (typischerweise /etc/X11/XF86Config oder /usr/X11R6/etc/X11/XF86Config):

# cp XF86Config.new /etc/X11/XF86Config

Damit ist die Konfiguration beendet. Wenn Sie XFree86 4.X mit startx(1) starten wollen, müssen Sie noch den Port x11/wrapper installieren. Sie können XFree86 4.X aber auch mit xdm(1) starten.

Anmerkung: XFree86 4.X kann auch im Grafikmodus mit xf86cfg(1) konfiguriert werden. Mit dem interaktiven Werkzeug können Treiber ausgewählt und Einstellungen vorgenommen werden. Das Programm kann auch auf der Konsole benutzt werden, starten Sie es einfach mit xf86cfg -textmode. Weitere Informationen erhalten Sie in der Hilfeseite xf86cfg(1).


5.4.3. Spezielle Konfigurationen

5.4.3.1. Konfiguration des Intel® i810 Graphics Chipsets

Der Intel® i810 Chipset benötigt den Treiber agpgart, die AGP-Schnittstelle von XFree86. Der Treiber agp(4) befindet sich seit 4.8-RELEASE und 5.0-RELEASE in der Vorgabekonfiguration GENERIC. Wenn Sie eine frühere FreeBSD-Version benutzen müssen Sie Ihre Kernelkonfiguration um die nachstehende Zeile erweitern:

device agp

Anschließend müssen Sie einen neuen Kernel bauen. Sie können beim Systemstart das Modul agp.ko auch mit dem loader(8) aktivieren. Fügen Sie dazu einfach die nachstehende Zeile in /boot/loader.conf ein:

agp_load="YES"

Wenn Sie FreeBSD 4.X oder eine frühere Version benutzen, müssen Sie noch die Gerätedateien im Verzeichnis /dev erstellen:

# cd /dev
# sh MAKEDEV agpgart

Anmerkung: Wenn Sie FreeBSD 5.X oder eine neuere Version verwenden, werden die Gerätedateien automatisch von devfs(5) angelegt. Lassen Sie dann diesen Schritt aus.

Ab jetzt kann die Hardware wie jede andere Grafikkarte auch konfiguriert werden. Der Treiber agp(4) kann nicht nachträglich mit kldload(8) in einen laufenden Kernel geladen werden. Er muss entweder fest im Kernel eingebunden sein oder beim Systemstart über /boot/loader.conf geladen werden.

Ab XFree86 4.1.0 kann es sein, dass Sie Meldungen über ``unresolved symbols'' wie fbPictureInit erhalten. Fügen Sie in diesem Fall die nachstehende Zeile hinter Driver "i810" in der XFree86-Konfigurationsdatei ein:

Option "NoDDC"

5.5. Schriftarten in XFree86 benutzen

Beigetragen von Murray Stokely.

5.5.1. Type 1 Schriftarten

Die Schriftarten, die mit XFree86 geliefert werden, eignen sich ganz und gar nicht für Desktop-Publishing-Anwendungen. Große Schriftarten zeigen bei Präsentationen deutliche Treppenstufen und die kleinen Schriftarten in Netscape sind fast unleserlich. Es gibt allerdings mehrere hochwertige Type 1 Schriftarten (PostScript®), die mit XFree86 (Version 3.X oder 4.X) benutzt werden können. Beispielsweise enthalten die URW-Schriftarten (x11-fonts/urwfonts) hochwertige Versionen gängiger Type 1 Schriftarten (zum Beispiel Times Roman®, Helvetica®, Palatino®). Die Sammlung Freefonts (x11-fonts/freefonts) enthält noch mehr Schriftarten, doch sind diese für den Einsatz in Grafik-Programmen wie The Gimp gedacht. Es fehlen auch einige Schriftarten, so dass sich die Sammlung nicht für den alltäglichen Gebrauch eignet. Weiterhin kann XFree86 leicht so konfiguriert werden, dass es TrueType-Schriftarten verwendet (dies wird später im Abschnitt TrueType Schriftarten beschrieben).

Die Type 1 Schriftarten lassen sich aus der Ports-Sammlung wie folgt installieren:

# cd /usr/ports/x11-fonts/urwfonts
# make install clean

Analog lassen sich Freefont und andere Sammlungen installieren. Die neuen Schriftarten müssen dem X-Server in der Datei XF86Config bekannt gegeben werden. In der Version 3 von XFree86 befindet diese Datei in /etc, in Version 4 befindet sich die Datei im Verzeichnis /etc/X11/. Fügen Sie die folgende Zeile hinzu:

FontPath "/usr/X11R6/lib/X11/fonts/URW/"

Sie können aber auch in der X-Sitzung das folgende Kommando absetzen:

% xset fp+ /usr/X11R6/lib/X11/fonts/URW
% xset fp rehash

Dann kennt der X-Server die neuen Schriftarten nur bis zum Ende der Sitzung. Wenn die Änderung dauerhaft sein soll, müssen Sie die Kommandos in ~/.xinitrc eintragen, wenn Sie X mit startx starten, oder in ~/.xsession, wenn Sie XDM benutzen. Sie können die Schriftarten auch in die neue Datei XftConfig, die im Abschnitt Anti-aliasing beschrieben wird, eintragen.


5.5.2. TrueType®-Schriftarten

XFree86 4.X kann TrueType-Schriftarten mithilfe von zwei Modulen darstellen. Im folgenden Beispiel wird das Freetype-Modul benutzt, da es besser mit anderen Werkzeugen, die TrueType-Schriftarten darstellen, übereinstimmt. Das Freetype-Modul aktivieren Sie im Abschnitt "Module" von /etc/X11/XF86Config durch Einfügen der Zeile:

Load  "freetype"

XFree86 3.3.X benötigt einen gesonderten TrueType-Schriftserver. Üblicherweise wird dafür Xfstt verwendet, den Sie aus dem Port x11-servers/Xfstt installieren können.

Erstellen Sie ein Verzeichnis für die TrueType-Schriftarten (z.B. /usr/X11R6/lib/X11/fonts/TrueType) und kopieren Sie alle Schriftarten dorthin. Die Schriftarten müssen im UNIX/DOS/Windows-Format liegen, Schriftarten von einem Macintosh® können Sie nicht direkt übernehmen. Die Schriftarten müssen noch in der Datei fonts.dir katalogisiert werden. Den Katalog können Sie mit ttmkfdir aus dem Port x11-fonts/ttmkfdir erzeugen:

# cd /usr/X11R6/lib/X11/fonts/TrueType
# ttmkfdir > fonts.dir

Geben Sie dem System das TrueType-Verzeichnis, wie im Abschnitt Type 1 Schriftarten beschrieben, bekannt:

% xset fp+ /usr/X11R6/lib/X11/fonts/TrueType
% xset fp rehash

Oder fügen Sie eine FontPath-Zeile in XF86Config hinzu.

Das war's. Jetzt sollten Netscape, Gimp, StarOffice und alle anderen X-Anwendungen die TrueType-Schriftarten benutzen. Extrem kleine Schriftarten (Webseiten, die mit hoher Auflösung betrachtet werden) und sehr große Schriftarten (in StarOffice) sollten jetzt viel besser aussehen.


5.5.3. Anti-aliasing

Aktualisiert von Joe Marcus Clarke.

XFree86 beherrscht das Anti-aliasing-Verfahren seit der Version 4.0.2. Die Konfiguration der Schriftarten war vor XFree86 4.3.0 ziemlich schwierig. Ab der Version 4.3.0 stehen alle Schriftarten in /usr/X11R6/lib/X11/fonts/ und ~/.fonts/ automatisch für das Anti-aliasing-Verfahren mit Anwendungen, die Xft unterstützen, zur Verfügung. Es gibt schon viele Anwendungen, die Xft unterstützen, zum Beispiel: Qt 2.3 und höhere Versionen (das KDE-Toolkit), Gtk+ 2.0 und höhere Versionen (das GNOME-Toolkit) sowie Mozilla 1.2 und höhere Versionen.

In der Datei /usr/X11R6/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 Groß- und Kleinschreibung und darauf, dass alle Tags geschlossen sind. Die Datei beginnt mit der üblichen XML-Deklaration gefolgt von einer DOCTYPE-Definition und dem <fontconfig>-Tag:

        <?xml version="1.0"?>
        <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
        <fontconfig>
     

Wie vorher erwähnt, stehen schon alle Schriftarten in /usr/X11R6/lib/X11/fonts/ und ~/.fonts/ für Anwendungen, die Xft unterstützen, zur Verfügung. Wenn Sie ein Verzeichnis außerhalb dieser beiden Bäume benutzen wollen, fügen Sie eine Zeile wie die nachstehende zu /usr/X11R6/etc/fonts/local.conf hinzu:

<dir>/path/to/my/fonts</dir>

Wenn Sie neue Schriftarten hinzugefügt haben, müssen Sie den Schriftarten-Cache neu aufbauen:

# fc-cache -f

Das Anti-aliasing-Verfahren zeichnet Ränder leicht unscharf, dadurch werden kleine Schriften besser lesbar und der Treppenstufen-Effekt bei wird großen Schriften vermieden. Auf normale Schriftgrößen sollte das Verfahren aber nicht angewendet werden, da dies die Augen zu sehr anstrengt. Um kleinere Schriftgrößen als 14 Punkt von dem Verfahren auszunehmen, fü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>

Das Anti-aliasing-Verfahren kann die Abstände einiger Fixschriften falsch darstellen, dies fällt besonders unter KDE auf. Sie können das Problem umgehen, indem Sie die Abstände dieser Schriften auf den Wert 100 festsetzen. Fü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 gebräuchlichen Fixschriften auf "mono" abgebildet. Fü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, können Probleme mit dem Anti-Aliasing-Verfahren verursachen. In der Regel erscheinen diese Schriftarten dann vertikal halbiert. Im schlimmsten Fall stürzen Anwendungen, wie Mozilla, 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>       

Wenn Sie local.conf editiert haben, stellen Sie bitte sicher, dass die Datei mit dem Tag </fontconfig> endet. Ist das nicht der Fall, werden die Änderungen nicht berücksichtigt.

Die mit XFree86 gelieferten Schriftarten eignen sich nicht besonders für das Anti-Aliasing-Verfahren. Der Port x11-fonts/bitstream-vera enthält viel besser geeignete Schriftarten. Wenn sie noch nicht existiert, legt der Port die Datei /usr/X11R6/etc/fonts/local.conf an. Ansonsten erzeugt der Port die Datei /usr/X11R6/etc/fonts/local.conf-vera, deren Inhalt Sie in /usr/X11R6/etc/fonts/local.conf aufnehmen müssen. Danach werden die XFree86-Schriftarten Serif, Sans Serif und Monospaced durch die entsprechenden Bitstream-Schriftarten ersetzt.

Benutzer können eigene Einstellungen in der Datei ~/.fonts.conf vornehmen. Achten Sie auch hier auf die richtige XML-Syntax.

Mit einem LCD können Sie sub-pixel sampling anstelle von Anti-aliasing einsetzen. Dieses Verfahren behandelt die horizontal getrennten Rot-, Grün- und Blau-Komponenten eines Pixels gesondert und verbessert damit (teilweise sehr wirksam) die horizontale Auflö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>

Abhängig von der Organisation Ihres Bildschirms müssen Sie bgr anstelle von rgb verwenden. Experimentieren Sie und schauen Sie, was besser aussieht.

Der nächste Start des X-Servers aktiviert das Anti-aliasing-Verfahren. Beachten Sie, dass die Anwendungen dieses Verfahren auch benutzen müssen. Zurzeit wird das Verfahren von Qt und damit von KDE benutzt (Details finden Sie in Abschnitt 5.7.3.2). Gtk+ und GNOME können das Verfahren mit dem ``Font-capplet'' benutzen (Details entnehmen Sie bitte Abschnitt 5.7.1.3). Ab der Version 1.2 benutzt Mozilla automatisch das Anti-Aliasing Verfahren. Dies können Sie verhindern, wenn Sie beim Übersetzen von Mozilla die Option -DWITHOUT_XFT angeben.


5.6. Der X-Display-Manager

Beigetragen von Seth Kingsley.

5.6.1. Einführung

Der X-Display-Manager (XDM), eine optionale Komponente des X-Window-Systems, verwaltet Sitzungen. Er kann mit vielen Komponenten, wie minimal ausgestatteten X-Terminals, Arbeitsplatz-Rechnern und leistungsfähigen Netzwerkservern, nutzbringend eingesetzt werden. Da das X-Window-System netzwerktransparent ist, gibt es zahlreiche Möglichkeiten, X-Clients und X-Server auf unterschiedlichen Rechnern im Netz laufen zu lassen. XDM stellt eine grafische Anmeldemaske zur Verfügung, in der Sie den Rechner, auf dem eine Sitzung laufen soll, auswählen können und in der Sie die nötigen Autorisierungs-Informationen, wie Benutzername und Passwort, eingeben können.

Die Funktion des X-Display-Managers läßt sich mit der von getty(8) (siehe Abschnitt 17.3.2) vergleichen. Er meldet den Benutzer am ausgesuchten System an, startet ein Programm (meist einen Window-Manager) und wartet darauf, dass dieses Programm beendet wird, das heißt der Benutzer die Sitzung beendet hat. Nachdem die Sitzung beendet ist, zeigt XDM den grafischen Anmeldebildschirm für den nächsten Benutzer an.


5.6.2. XDM einrichten

Der XDM-Dæmon befindet sich in /usr/X11R6/bin/xdm und kann jederzeit von root gestartet werden. Er verwaltet dann den X-Bildschirm des lokalen Rechners. XDM läßt sich bequem mit einem Eintrag in /etc/ttys (siehe Abschnitt 17.3.2.1) bei jedem Start des Rechners aktivieren. In /etc/ttys sollte schon der nachstehende Eintrag vorhanden sein:

ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure

In der Voreinstellung ist dieser Eintrag nicht aktiv. Um den Eintrag zu aktivieren, ändern Sie den Wert in Feld 5 von off zu on und starten Sie init(8) entsprechend der Anleitung in Abschnitt 17.3.2.2 neu. Das erste Feld gibt den Namen des Terminals an, auf dem das Programm läuft. Im Beispiel wird ttyv8 verwendet, das heißt XDM läuft auf dem neunten virtuellen Terminal.


5.6.3. XDM konfigurieren

Das Verhalten und Aussehen von XDM steuern Sie mit Konfigurationsdateien, die im Verzeichnis /usr/X11R6/lib/X11/xdm stehen. Üblicherweise finden Sie dort die folgenden Dateien vor:

Datei Beschreibung
Xaccess Regelsatz, der zur Autorisierung von Clients benutzt wird.
Xresources Vorgabewerte für X-Ressourcen.
Xservers Liste mit lokalen und entfernten Bildschirmen, die verwaltet werden.
Xsession Vorgabe für das Startskript der Sitzung.
Xsetup_* Skript, das dazu dient, Anwendungen vor der Anmeldung zu starten.
xdm-config Konfiguration für alle auf der Maschine verwalteten Bildschirme.
xdm-errors Fehlermeldungen des Servers.
xdm-pid Die Prozess-ID des gerade laufenden XDM-Prozesses.

Im Verzeichnis /usr/X11R6/lib/X11/xdm befinden sich auch noch Skripten und Programme, die zum Einrichten der XDM-Oberfläche dienen. Der Zweck dieser Dateien und der Umgang mit ihnen wird in der Hilfeseite xdm(1) erklärt. Wir gehen im Folgenden nur kurz auf ein paar der Dateien ein.

Die vorgegebene Einstellung zeigt ein rechteckiges Anmeldefenster, in dem der Rechnername in großer Schrift steht. Darunter befinden sich die Eingabeaufforderungen Login: und Password:. Mit dieser Maske können Sie anfangen, wenn Sie das Erscheinungsbild von XDM verändern wollen.


5.6.3.1. Xaccess

Verbindungen zu XDM werden mit dem ``X Display Manager Connection Protocol'' (XDMCP) hergestellt. XDMCP-Verbindungen von entfernten Maschinen werden über den Regelsatz in Xaccess kontrolliert. In der Vorgabe sind alle Verbindungen erlaubt, doch muss auch xdm-config geändert werden, damit XDM Verbindungen entfernter Maschinen annimmt.


5.6.3.2. Xresources

In dieser Datei kann das Erscheinungsbild der Bildschirmauswahl und der Anmeldemasken festgelegt werden. Das Format entspricht den Dateien im Verzeichnis app-defaults, die in der XFree86-Dokumentation beschrieben sind.


5.6.3.3. Xservers

Diese Datei enthält eine Liste entfernter Maschinen, die in der Bildschirmauswahl angeboten werden.


5.6.3.4. Xsession

Dieses Skript wird vom XDM aufgerufen, nachdem sich ein Benutzer erfolgreich angemeldet hat. Üblicherweise besitzt jeder Benutzer eine angepasste Version dieses Skripts in ~/.xsession, das dann anstelle von Xsession ausgeführt wird.


5.6.3.5. Xsetup_*

Diese Skripten werden automatisch ausgeführt bevor die Bildschirmauswahl oder die Anmeldemasken angezeigt werden. Für jeden lokalen Bildschirm gibt es ein Skript, dessen Namen aus Xsetup_ gefolgt von der Bildschirmnummer gebildet wird (zum Beispiel Xsetup_0). Normalerweise werden damit ein oder zwei Programme, wie xconsole, im Hintergrund gestartet.


5.6.3.6. xdm-config

Diese Datei enthält Einstellungen, die für jeden verwalteten Bildschirm zutreffen. Das Format entspricht dem der Dateien aus app-defaults.


5.6.3.7. xdm-errors

Die Ausgaben jedes X-Servers, den XDM versucht zu starten, werden in dieser Datei gesammelt. Wenn ein von XDM verwalteter Bildschirm aus unbekannten Gründen hängen bleibt, sollten Sie in dieser Datei nach Fehlermeldungen suchen. Für jede Sitzung werden die Meldungen auch in die Datei ~/.xsession-errors des Benutzers geschrieben.


5.6.4. Einrichten eines Bildschirm-Servers auf dem Netzwerk

Damit sich Clients mit dem Bildschirm-Server verbinden können, muss der Zugriffsregelsatz editiert werden und der Listener aktiviert werden. Die Vorgabewerte sind sehr restriktiv eingestellt. Damit XDM Verbindungen annimmt, entfernen Sie einen Kommentar in xdm-config:

! 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

Starten Sie danach XDM neu. Beachten Sie, dass Kommentare in den Ressourcen-Konfigurationsdateien mit einem ! anstelle des sonst üblichen Zeichens # beginnen. Wenn Sie strengere Zugriffskontrollen einrichten wollen, sehen Sie sich die Beispiele in Xaccess und die Hilfeseite xdm(1) an.


5.6.5. XDM ersetzen

Es gibt mehrere Anwendungen, die XDM ersetzen können, zum Beispiel KDM, der Teil von KDE ist und später in diesem Kapitel besprochen wird. KDM ist ansprechender gestaltet und bietet neben einigen Schnörkeln die Möglichkeit, den zu verwendenden Window-Manager bei der Anmeldung auszuwählen.


5.7. Grafische Oberflächen

Beigetragen von Valentino Vaschetto.

Dieser Abschnitt beschreibt verschiedene grafische Oberflächen, die es für X unter FreeBSD gibt. Eine Oberfläche (desktop environment) kann alles von einem einfachen Window-Manager bis hin zu kompletten Anwendungen wie KDE oder GNOME sein.


5.7.1. GNOME

5.7.1.1. Über GNOME

GNOME ist eine benutzerfreundliche Oberfläche, mit der Rechner leicht benutzt und konfiguriert werden können. GNOME besitzt eine Leiste, mit der Anwendungen gestartet werden und die Statusinformationen anzeigen kann. Programme und Daten können auf der Oberfläche abgelegt werden und Standardwerkzeuge stehen zur Verfügung. Es gibt Konventionen, die es Anwendungen leicht machen, zusammenzuarbeiten und ein konsistentes Erscheinungsbild garantieren. Benutzer anderer Betriebssysteme oder anderer Arbeitsumgebungen sollten mit der leistungsfähigen grafischen Oberfläche von GNOME sehr gut zurechtkommen. Auf der Webseite FreeBSD GNOME Project finden Sie weitere Informationen über GNOME auf FreeBSD.


5.7.1.2. GNOME installieren

Am einfachsten installieren Sie GNOME während der Installation des FreeBSD Systems wie in Kapitel 2 beschrieben. Es ist aber ebenfalls leicht möglich, GNOME als Paket oder über die Ports-Sammlung zu installieren.

Wenn Sie das GNOME-Paket über das Netz installieren wollen, setzen Sie den nachstehenden Befehl ab:

# pkg_add -r gnome2

Wenn Sie den Quellcode von GNOME übersetzen wollen, benutzen Sie die Ports-Sammlung:

# cd /usr/ports/x11/gnome2
# make install clean

Nachdem GNOME installiert ist, muss der X-Server GNOME anstelle eines Window-Managers starten. Wenn Sie bereits eine angepasste .xinitrc besitzen, ersetzen Sie dort den Start des Window-Managers durch /usr/X11R6/bin/gnome-session. Wenn .xinitrc nicht gesondert angepasst wurde, reicht es, den nachstehenden Befehl abzusetzen:

% echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc

Rufen Sie dann startx auf, um die GNOME Oberfläche zu starten.

Anmerkung: Wenn Sie einen Display-Manager wie XDM verwenden, müssen Sie anders vorgehen. Legen Sie eine ausführbare .xsession an, die das Kommando zum Start von GNOME enthält. Ersetzen Sie dazu den Start des Window-Managers durch /usr/X11R6/bin/gnome-session:

% echo "#!/bin/sh" > ~/.xsession
% echo "/usr/X11R6/bin/gnome-session" >> ~/.xsession
% chmod +x ~/.xsession

Sie können auch den Display-Manager so konfigurieren, dass der Window-Manager beim Anmelden ausgesucht werden kann. Im Abschnitt Details zu KDE wird das für kdm, den Display-Manager von KDE erklärt.


5.7.1.3. Anti-aliasing-Verfahren mit GNOME

Ab der Version 4.0.2 beherrscht XFree86 mit der ``RENDER''-Erweiterung das Anti-Aliasing-Verfahren. Gtk+ 2.0 und spätere Versionen (das GNOME-Toolkit) kann dieses Verfahren benutzen. Die Konfiguration des Verfahrens ist in Abschnitt 5.5.3 beschrieben. Aktivieren Sie Anti-Aliasing im Menü Applications->Desktop Preferences->Font. Dort wählen Sie dann eine der Möglichkeiten Best shapes, Best contrast oder Subpixel smoothing (LCDs). Für Gtk+-Anwendungen, die nicht Teil von GNOME sind, setzen Sie die Umgebungsvariable GDK_USE_XFT vor dem Start der Anwendung auf den Wert 1.


5.7.2. KDE

5.7.2.1. Über KDE

KDE ist eine moderne, leicht zu benutzende Oberfläche, die unter anderem Folgendes bietet:

  • eine schöne und moderne Oberfläche,

  • eine Oberfläche, die völlig netzwerktransparent ist,

  • ein integriertes Hilfesystem, das bequem und konsistent Hilfestellungen bezüglich der Bedienung der KDE-Oberfläche und ihrer Anwendungen gibt,

  • ein konstantes Erscheinungsbild (look and feel) aller KDE-Anwendungen,

  • einheitliche Menüs, Werkzeugleisten, Tastenkombinationen und Farbschemata,

  • Internationalisierung: KDE ist in mehr als 40 Sprachen erhältlich,

  • durch Dialoge gesteuerte zentrale Konfiguration der Oberfläche,

  • viele nützliche KDE-Anwendungen.

In KDE ist ein Office-Paket integriert, das die ``KParts''-Technik benutzt. Das Paket enthält neben anderem eine Tabellenkalkulation, ein Präsentationsprogramm, einen Terminkalender und einen News-Client. Ein Webbrowser mit Namen Konqueror, der sich mit anderen Webbrowsern von UNIX Systemen messen kann, ist ebenfalls Bestandteil von KDE. Weitere Informationen über KDE erhalten Sie auf den KDE-Webseiten. Auf der Webseite FreeBSD-KDE team finden Sie weitere FreeBSD-spezifische Informationen über KDE.


5.7.2.2. KDE installieren

Am einfachsten installieren Sie KDE, wie jede andere grafische Oberfläche auch, während der Installation des FreeBSD Systems wie in Kapitel 2 beschrieben. Die Anwendung kann natürlich auch als Paket oder über die Ports-Sammlung installiert werden.

Um KDE über das Netz zu installieren, setzen Sie den nachstehenden Befehl ab:

# pkg_add -r kde

pkg_add(1) installiert automatisch die neuste Version einer Anwendung.

Benutzen Sie die Ports-Sammlung, wenn Sie den Quellcode von KDE übersetzen wollen:

# cd /usr/ports/x11/kde3
# make install clean

Nachdem KDE installiert ist, muss der X-Server KDE anstelle eines Window-Managers starten. Legen Sie dazu die Datei .xinitrc an:

% echo "exec startkde" > ~/.xinitrc

Wenn das X-Window-System danach mit startx gestartet wird, erscheint die KDE-Oberfläche.

Wird ein Display-Manager wie xdm benutzt, muss .xsession angepasst werden. Eine Anleitung für kdm folgt gleich in diesem Kapitel.


5.7.3. Details zu KDE

Wenn KDE erst einmal installiert ist, erschließen sich die meisten Sachen durch das Hilfesystem oder durch Ausprobieren. Benutzer von Windows oder Mac OS werden sich sehr schnell zurecht finden.

Die beste Referenz für KDE ist die Online-Dokumentation. KDE besitzt einen eigenen Webbrowser, sehr viele nützliche Anwendungen und ausführliche Dokumentation. Der Rest dieses Abschnitts beschäftigt sich daher mit Dingen, die schlecht durch einfaches Ausprobieren erlernbar sind.


5.7.3.1. Der KDE-Display-Manager

Der Administrator eines Mehrbenutzersystems will den Benutzern vielleicht eine grafische Anmeldung wie mit xdm ermöglichen. KDE besitzt einen eigenen Display-Manager, der schöner aussieht und auch über mehr Optionen verfügt. Insbesondere können sich die Benutzer die Oberfläche für die Sitzung (beispielsweise KDE oder GNOME) aussuchen.

Starten Sie das KDE Kontrollzentrum, kcontrol, als root. Lassen Sie bitte nicht die gesamte X-Umgebung unter root laufen, dies ist sehr unsicher. Öffnen Sie stattdessen als normaler Benutzer ein Terminalfenster (zum Beispiel einen xterm oder die konsole von KDE) und wechseln Sie darin mit su zu root (dazu muss der Benutzer der Gruppe wheel angehören). Rufen Sie dann kcontrol auf, um das Kontrollzentrum zu starten.

Klicken Sie auf das Icon System und dann auf Login manager. Auf der rechten Seite befinden sich verschiedene Optionen, die alle ausführlich im KDE-Handbuch beschrieben werden. Klicken Sie auf sessions und dann auf New type. Jetzt können Sie Namen für Window-Manager oder grafische Oberflächen eingeben. Die Namen müssen nicht mit den zu startenden Programmen übereinstimmen, so dass Sie KDE anstelle von startkde oder GNOME anstelle von gnome-session eingeben können. Legen Sie bitte auch eine Sitzung mit dem Namen failsafe an.

Sehen Sie sich auch die anderen Menüs an. Wenn Sie fertig sind, klicken Sie Apply und beenden Sie das Kontrollzentrum.

Damit kdm mit den vergebenen Namen (KDE, GNOME) etwas anfangen kann, editieren Sie die Dateien, die von xdm benutzt werden.

Anmerkung: Ab KDE 2.2 benutzt kdm eigene Konfigurationsdateien. Schauen Sie die Einzelheiten bitte in der KDE 2.2-Dokumentation nach.

Wechseln Sie in einem Terminalfenster zu root und editieren Sie die Datei /usr/X11R6/lib/X11/xdm/Xsession. Ungefähr in der Mitte Datei finden Sie einen Abschnitt wie den folgenden:

case $# in
1)
        case $1 in
        failsafe)
                exec xterm -geometry 80x24-0-0
                ;;
        esac
esac

Für die vergebenen Namen müssen nun einige Zeilen hinzugefügt werden. Wenn Sie ``KDE'' und ``GNOME'' verwendet haben, sollte der Abschnitt wie folgt aussehen:

case $# in
1)
        case $1 in
        kde)
                exec /usr/local/bin/startkde
                ;;
        GNOME)
                exec /usr/X11R6/bin/gnome-session
                ;;
        failsafe)
                exec xterm -geometry 80x24-0-0
                ;;
        esac
esac

Wenn Sie den KDE-Hintergrund schon während der Anmeldung benutzen wollen, fügen Sie die nachstehende Zeile in /usr/X11R6/lib/X11/xdm/Xsetup_0 ein:

/usr/local/bin/kdmdesktop

Damit kdm beim nächsten Systemstart gestartet wird, muss ein entsprechender Eintrag in /etc/ttys vorhanden sein. Folgen Sie dazu den Anweisungen aus dem Anschnitt über xdm und ersetzen Sie alle Bezüge auf /usr/X11R6/bin/xdm durch /usr/local/bin/kdm.


5.7.3.2. Anti-aliasing-Verfahren mit KDE

Ab der Version 4.0.2 beherrscht XFree86 durch die ``RENDER''-Erweiterung das Anti-aliasing-Verfahren. Die Erweiterung wird ab der Version 2.3 von Qt, dem KDE-Toolkit, benutzt. In Abschnitt 5.5.3 wird beschrieben wie das Anti-aliasing-Verfahren eingerichtet wird. Im KDE-Menü wählen Sie Preferences->Look and Feel->Fonts. Klicken Sie dann in das Kontrollkästchen Use Anti-Aliasing for Fonts and Icons. Für nicht zu KDE gehörende Qt-Anwendungen muss die Umgebungsvariable QT_XFT vor dem Start der Anwendung auf true gesetzt werden.


5.7.4. XFce

5.7.4.1. Über XFce

XFce ist eine grafische Oberfläche, die auf den GTK-Bibliotheken, die auch von GNOME benutzt werden, beruht. Die Oberfläche ist allerdings weniger aufwändig und für diejenigen gedacht, die eine schlichte und effiziente Oberfläche wollen, die dennoch einfach zu benutzen und zu konfigurieren ist. Die Oberfläche sieht ähnlich wie CDE aus, das in kommerziellen UNIX Systemen verwendet wird. Einige Merkmale von XFce sind:

  • eine schlichte einfach zu benutzende Oberfläche,

  • vollständig mit Mausoperationen konfigurierbar, Unterstützung von drag and drop,

  • ähnliche Hauptleiste wie CDE, die Menüs enthält und über die Anwendungen gestartet werden können,

  • integrierter Window-Manager, Datei-Manager und Sound-Manager, GNOME-compliance-Modul,

  • mit Themes anpassbar (da GTK benutzt wird),

  • schnell, leicht und effizient: ideal für ältere oder langsamere Maschinen oder Maschinen mit wenig Speicher.

Weitere Information über XFce erhalten Sie auf der XFce-Webseite.


5.7.4.2. XFce installieren

Das XFce-Paket installieren Sie mit dem nachstehenden Kommando:

# pkg_add -r xfce

Mit der Ports-Sammlung können Sie auch den Quellcode übersetzen:

# cd /usr/ports/x11-wm/xfce
# make install clean

Damit beim nächsten Start des X-Servers XFce benutzt wird, setzen Sie das folgende Kommando ab:

% echo "/usr/X11R6/bin/startxfce" > ~/.xinitrc

Wenn Sie einen Display-Manager benutzen, erstellen Sie die Datei .xsession, wie im GNOME Abschnitt beschrieben. Verwenden Sie jetzt allerdings das Kommando /usr/X11R6/bin/startxfce. Sie können auch den Display-Manager wie im kdm Abschnitt beschrieben, so konfigurieren, dass die Oberfläche für die Sitzung ausgewählt werden kann.

II. System Administration

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 für das Durcharbeiten des Kapitels erforderlich sind.

Diese Kapitel sollten Sie lesen, wenn Sie die Informationen darin benötigen. Sie brauchen Sie nicht in einer bestimmten Reihenfolge zu lesen, noch müssen Sie die Kapitel lesen, bevor Sie anfangen, FreeBSD zu benutzen.


Kapitel 6. Konfiguration und Tuning

Geschrieben von Chern Lee. Nach einem Tutorium von Mike Smith. Basiert ebenfalls auf tuning(7) von Matt Dillon. Übersetzt von Martin Heinen.

6.1. Übersicht

Ein korrekt konfiguriertes System kann die Arbeit, die bei der zukünftigen Pflege und bei Migrationen des Systems entsteht, erheblich reduzieren. Dieses Kapitel beschreibt die Konfiguration von FreeBSD sowie Maßnahmen zur Leistungssteigerung von FreeBSD Systemen.

Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie Folgendes wissen:

  • Wie Sie effizient Dateisysteme und Swap-Partitionen auf Ihrer Festplatte einrichten.

  • Die Grundlagen der Konfiguration mit rc.conf und des Systems zum Starten von Anwendungen in /usr/local/etc/rc.d.

  • Wie Sie Netzwerkkarten konfigurieren und testen.

  • Wie Sie virtuelle Hosts und Netzwerkgeräte konfigurieren.

  • Wie Sie die verschiedenen Konfigurationsdateien in /etc benutzen.

  • Wie Sie mit sysctl-Variablen FreeBSD einstellen können.

  • Wie Sie die Platten Performance einstellen und Kernel Parameter modifizieren können.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • die Grundlagen von UNIX und FreeBSD (Kapitel 3) verstehen.

  • Damit vertraut sein, wie Sie die FreeBSD-Quellen aktuell halten (Kapitel 21) und wissen, wie Sie einen Kernel konfigurieren und kompilieren (Kapitel 9).


6.2. Vorbereitende Konfiguration

6.2.1. Layout von Partitionen


6.2.1.1. Partitionen

Wenn Sie Dateisysteme mit disklabel(8) oder sysinstall(8) anlegen, sollten Sie beachten, dass Festplatten auf Daten in den äußeren Spuren schneller zugreifen können als auf Daten in den inneren Spuren. Daher sollten die kleineren oft benutzten Dateisysteme, wie das Root-Dateisystem oder die Swap-Partition, an den äußeren Rand der Platte gelegt werden. Die größeren Partitionen wie /usr sollten in die inneren Bereiche gelegt werden. Es empfiehlt sich, die Partitionen in einer ähnlichen Reihenfolge wie Root-Partition, Swap, /var und /usr anzulegen.

Die Größe von /var ist abhängig vom Zweck der Maschine. /var enthält hauptsächlich Postfächer, den Spoolbereich zum Drucken und Logdateien. Abhängig von der Anzahl der Systembenutzer und der Aufbewahrungszeit für Logdateien, können gerade die Postfächer und Logdateien zu ungeahnten Größen wachsen. Oft werden Sie mit weniger als einem Gigabyte auskommen, doch beachten Sie, dass /var/tmp für Pakete ausreichend dimensioniert ist.

Die /usr-Partition enthält den Hauptteil des Systems, die Ports-Sammlung (empfohlen) und die Quellen (optional). Im Laufe der Installation haben Sie die Möglichkeit, die Quellen und die Ports-Sammlung gleich mit zu installieren. Für die /usr-Partition sollten Sie mindestens zwei Gigabyte vorsehen.

Wenn Sie die Größe der Partitionen festlegen, beachten Sie bitte das Wachstum Ihres Systems. Wenn Sie den Platz auf einer Partition vollständig aufgebraucht haben, eine andere Partition aber kaum benutzen, kann die Handhabung des Systems schwierig werden.

Anmerkung: Die automatische Partitionierung von sysinstall(8) mit Auto-defaults legt manchmal zu kleine / und /var-Partition an. Partitionieren Sie weise und großzügig.


6.2.1.2. Swap Partition

Als Daumenregel sollten Sie doppelt soviel Speicher für die Swap-Partition vorsehen, als Sie Hauptspeicher haben. Verfügt die Maschine beispielsweise über 128 Megabyte Hauptspeicher, sollten Sie 256 Megabyte für den Swap-Bereich vorsehen. Systeme mit weniger Speicher werden wahrscheinlich mit viel mehr Swap mehr leisten. Es wird nicht empfohlen, weniger als 256 Megabyte Swap einzurichten. Außerdem sollten Sie künftige Speichererweiterungen beachten, wenn Sie die Swap-Partition einrichten. Die VM-Paging-Algorithmen im Kernel sind so eingestellt, dass Sie am besten laufen, wenn die Swap-Partition mindestens doppelt so groß wie der Hauptspeicher ist. Zu wenig Swap kann zu einer Leistungsverminderung im VM page scanning Code führen, sowie Probleme verursachen, wenn Sie später mehr Speicher in Ihre Maschine bauen.

Auf größeren Systemen mit mehreren SCSI-Laufwerken (oder mehreren IDE-Laufwerken an unterschiedlichen Controllern) empfehlen wir Ihnen, Swap-Bereiche auf bis zu vier Laufwerken einzurichten. Diese Swap-Partitionen sollten ungefähr dieselbe Größe haben. Der Kernel kann zwar mit beliebigen Größen umgehen, aber die internen Datenstrukturen skalieren bis zur vierfachen Größe der größten Partition. Ungefähr gleich große Swap-Partitionen erlauben es dem Kernel, den Swap-Bereich optimal über die Laufwerke zu verteilen. Große Swap-Bereiche, auch wenn sie nicht oft gebraucht werden, sind nützlich, da sich ein speicherfressendes Programm unter Umständen auch ohne einen Neustart des Systems beenden lässt.


6.2.1.3. Warum partitionieren?

Gegen eine einzelne Partition sprechen mehrere Gründe. Jede Partition hat im Betrieb unterschiedliche Eigenschaften und die Trennung der Partitionen erlaubt es, die Dateisysteme an diese Eigenschaften anzupassen. Die Root- und /usr-Partitionen weisen meist nur lesende Zugriffe auf, während /var und /var/tmp hauptsächlich beschrieben werden.

Indem Sie ein System richtig partitionieren, verhindern Sie, dass eine Fragmentierung in den häufig beschriebenen Partitionen auf die meist nur gelesenen Partitionen übergreift. Wenn Sie die häufig beschriebenen Partitionen an den Rand der Platte, legen, dann wird die I/O-Leistung diesen Partitionen steigen. Die I/O-Leistung ist natürlich auch für große Partitionen wichtig, doch erzielen Sie eine größere Leistungssteigerung, wenn Sie /var an den Rand der Platte legen. Schließlich sollten Sie noch die Stabilität des Systems beachten. Eine kleine Root-Partition, auf die meist nur lesend zugegriffen wird, überlebt einen schlimmen Absturz wahrscheinlich eher als eine große Partition.


6.3. Basiskonfiguration

Informationen zur Systemkonfiguration sind hauptsächlich in /etc/rc.conf, die meist beim Start des Systems verwendet wird, abgelegt. Der Name der Datei zeigt ihren Zweck an: Sie enthält die Konfigurationen für die rc* Dateien.

In rc.conf werden die Vorgabewerte aus /etc/defaults/rc.conf überschrieben. Die Vorgabedatei sollte nicht nach /etc kopiert werden, da sie die Vorgabewerte und keine Beispiele enthält. Jede systemspezifische Änderung wird in rc.conf vorgenommen.

Um den administrativen Aufwand gering zu halten, existieren in geclusterten Anwendungen mehrere Strategien, globale Konfigurationen von systemspezifischen Konfigurationen zu trennen. Der empfohlene Weg hält die globale Konfiguration in einer separaten Datei z.B. rc.conf.site. Diese Datei wird dann in /etc/rc.conf, die nur systemspezifische Informationen enthält, eingebunden.

Da rc.conf von sh(1) gelesen wird, ist das einfach zu erreichen:

  • rc.conf:

       . rc.conf.site
        hostname="node15.example.com"
        network_interfaces="fxp0 lo0"
        ifconfig_fxp0="inet 10.1.1.1"
    
  • rc.conf.site:

       defaultrouter="10.1.1.254"
        saver="daemon"
        blanktime="100"
    

rc.conf.site kann dann auf jedes System mit rsync verteilt werden, rc.conf bleibt dabei systemspezifisch.

Bei einem Upgrade des Systems mit sysinstall(8) oder make world wird rc.conf nicht überschrieben, so dass die Systemkonfiguration erhalten bleibt.


6.4. Konfiguration von Anwendungen

Installierte Anwendungen haben typischerweise eigene Konfigurationsdateien, die eine eigene Syntax verwenden. Damit diese Dateien leicht von der Paketverwaltung gefunden und verwaltet werden können, ist es wichtig, sie vom Basissystem zu trennen.

Für gewöhnlich werden diese Dateien in /usr/local/etc installiert. Besitzt eine Anwendung viele Konfigurationsdateien, werden diese in einem separaten Unterverzeichnis abgelegt.

Wenn ein Port oder ein Paket installiert wird, werden normalerweise auch Beispiele für die Konfigurationsdateien installiert. Diese erkennt man gewöhnlich an dem Suffix .default. Wenn keine Konfigurationsdateien für eine Anwendung existieren, werden sie durch Kopieren der .default Dateien erstellt.

Als Beispiel sei /usr/local/etc/apache gezeigt:

-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf
-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf.default
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf.default
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic.default
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types.default
-rw-r--r--  1 root  wheel   7980 May 20  1998 srm.conf
-rw-r--r--  1 root  wheel   7933 May 20  1998 srm.conf.default

Anhand der Dateigröße erkennen Sie, dass sich nur srm.conf geändert hat. Eine spätere Aktualisierung des Apache Ports überschreibt diese Datei nicht.


6.5. Start von Diensten

Es ist üblich, dass ein System mehrere Dienste zur Verfügung stellt. Diese können auf verschiedene Weisen, die jeweils andere Vorteile haben, gestartet werden.

Software, die von einem Port oder einem Paket installiert wurde, wird oft ein Skript in /usr/local/etc/rc.d stellen. Dieses wird beim Hochfahren des Systems mit dem Argument start und beim Herunterfahren mit dem Argument stop aufgerufen. Das ist der empfohlene Weg, systemweite Dienste, die unter root laufen oder unter root gestartet werden, zu starten. Die Skripten werden bei der Installation des Paketes registriert und entfernt, wenn das Paket entfernt wird.

Ein typisches Skript in /usr/local/etc/rc.d sieht wie folgt aus:

#!/bin/sh
echo -n ' FooBar'

case "$1" in
start)
        /usr/local/bin/foobar
        ;;
stop)
        kill -9 `cat /var/run/foobar.pid`
        ;;
*)
        echo "Usage: `basename $0` {start|stop}" >&2
        exit 64
        ;;
esac

exit 0
   

Die Startskripten von FreeBSD suchen in /usr/local/etc/rc.d nach Dateien mit dem Suffix .sh, die von root ausgeführt werden können. Die gefundenen Skripten werden beim Hochfahren des Systems mit der Option start und beim Herunterfahren mit der Option stop aufgerufen, damit sie die passenden Aktionen ausführen können. Wenn Sie das vorige Beispiel beim Systemstart verwenden wollen, sollten Sie es also als FooBar.sh in /usr/local/etc/rc.d speichern und sicherstellen, das das Skript ausführbar ist. Benutzen Sie chmod(1), um das Skript ausführbar zu machen:

# chmod 755 FooBar.sh

Manche Dienste werden von inetd(8) aufgerufen, wenn eine Verbindung auf dem passenden Port aufgebaut wird. Üblich ist das für Server von Mail-Clients (POP, IMAP, usw.). Diese Dienste werden durch das Editieren von /etc/inetd.conf aktiviert. Details dazu finden sich in inetd(8).

Weitere Systemdienste werden vielleicht nicht von /etc/rc.conf abgedeckt. Diese werden traditionell durch Kommandos in /etc/rc.local aktiviert. Seit FreeBSD 3.1 existiert keine Vorgabe für /etc/rc.local mehr. Wenn die Datei allerdings von einem Administrator angelegt wird, so wird sie auch ausgeführt. Beachten Sie bitte, dass /etc/rc.local als der letzte Weg, einen Dienst zu starten, angesehen wird. Wenn es eine andere Möglichkeit gibt, den Dienst zu starten, nehmen Sie diese bitte wahr.

Anmerkung: Fügen Sie bitte keine Kommandos in /etc/rc.conf ein. Starten Sie stattdessen Dæmons oder Kommandos beim Hochfahren mit Skripten in /usr/local/etc/rc.d.

Systemdienste können auch mit cron(8) gestartet werden. Dieser Ansatz hat einige Vorteile; nicht zuletzt, weil cron(8) die Prozesse unter dem Eigentümer der crontab startet, ist es möglich, dass Dienste von nicht-root Benutzern gestartet und gepflegt werden können.

Dies nutzt eine Eigenschaft von cron(8): Für die Zeitangabe kann @reboot eingesetzt werden. Damit wird das Kommando gestartet, wenn cron(8) kurz nach dem Systemboot gestartet wird.


6.6. Programme mit cron starten

Beigetragen von Tom Rhodes.

Ein sehr nützliches Werkzeug von FreeBSD ist cron(8). cron läuft im Hintergrund und überprüft fortlaufend die Datei /etc/crontab. Beim Start sucht cron neue crontab-Dateien im Verzeichnis /var/cron/tabs. In den crontab-Dateien wird festgelegt, welche Programme zu welchem Zeitpunkt laufen sollen.

Der folgende Auszug aus /etc/crontab zeigt den Aufbau einer crontab-Datei:

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
# (1)
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin (2)
HOME=/var/log
#
#
#minute hour    mday    month   wday    who command (3)
#
#
*/5 *   *   *   *   root    /usr/libexec/atrun (4)
(1)
Das Zeichen # leitet, wie in den meisten Konfigurationsdateien, einen Kommentar ein. Benutzen Sie Kommentare, um die Funktion eines Eintrags zu erläutern. Kommentare müssen in einer extra Zeile stehen. Sie können nicht in derselben Zeile wie ein Kommando stehen, da sie sonst Teil des Kommandos wären. Leerzeilen in dieser Datei werden ignoriert.
(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 Shell sh. Wird die Variable PATH nicht gesetzt, müssen alle Pfadangaben absolut sein, da es keinen Vorgabewert für PATH gibt. Der Vorgabewert für HOME ist das Heimatverzeichnis des Accounts, dem die crontab gehört.
(3)
In dieser Zeile werden sieben Felder beschrieben: minute, hour, mday, month, wday, who und command. Die ersten Felder legen den Zeitpunkt fest, an dem ein Kommando laufen soll. Das Feld minute legt die Minute fest, das Feld hour die Stunde, das Feld mday den Tag des Monats. Im Feld month wird der Monat und im Feld wday der Wochentag festgelegt. Alle Felder müssen numerische Werte enthalten und die Zeitangaben sind im 24-Stunden-Format. Das Feld who gibt es nur in der Datei /etc/crontab und gibt den Account an, unter dem das Kommando laufen soll. In den crontab-Dateien einzelner Accounts existiert dieses Feld nicht. Im letzten Feld wird schließlich das auszuführende Kommando angegeben.
(4)
Diese Zeile definiert die Zeitpunkte an denen das Kommando atrun laufen soll. Beachten Sie die Zeichenfolge */5 gefolgt von mehreren *-Zeichen. Das Zeichen * ist ein Platzhalter und steht für jede mögliche Zeit. Diese Zeile führt das Kommando atrun unter dem root-Account alle fünf Minuten aus. Weitere Informationen zu atrun erhalten Sie in der Hilfeseite atrun(8).

Bei den Kommandos können beliebige Optionen angegeben werden. Wenn das Kommando zu lang ist und auf der nächsten Zeile fortgesetzt werden soll, muss am Ende der Zeile das Fortsetzungszeichen (\) angegeben werden.

Bis auf das sechste Feld, das den Account angibt, sieht jede crontab-Datei so wie das Beispiel aus. Das sechste Feld existiert nur in der Systemdatei /etc/crontab. In den restlichen crontab-Dateien fehlt dieses Feld.


6.6.1. crontab installieren

Eine erstellte crontab-Datei installieren Sie mit dem nachstehenden Befehl:

# crontab crontab

Der Befehl crontab -l zeigt die installierte crontab-Datei an.

Benutzer, die eine eigene crontab-Datei ohne Vorlage erstellen wollen, können den Befehl crontab -e verwenden. Dieser Befehl ruft einen Editor auf und installiert beim Verlassen des Editors die crontab-Datei.


6.7. Das rc-System für Systemdienste

Beigetragen von Tom Rhodes.

Das rcNG-System von NetBSD zum Start von Systemdiensten wurde in FreeBSD integriert. Die zu diesem System gehörenden Dateien sind im Verzeichnis /etc/rc.d abgelegt. Die Skripten in diesem Verzeichnis akzeptieren die Optionen start, stop und restart. Beispielsweise kann sshd(8) mit dem nachstehenden Kommando neu gestartet werden:

# /etc/rc.d/sshd restart

Analog können Sie andere Dienste starten und stoppen. Normalerweise werden die Dienste über Einträge in der Datei rc.conf(5) gestartet. Der Network Address Translation Dæmon wird zum Beispiel mit dem folgenden Eintrag in /etc/rc.conf aktiviert:

natd_enable="YES"

Wenn dort bereits die Zeile natd_enable="NO" existiert, ändern Sie einfach NO in YES. Die rc-Skripten starten, wie unten beschrieben, auch abhängige Dienste.

Da das rcNG-System primä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 das Kommando 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 unabhängig von den Einstellungen in /etc/rc.conf benutzen wollen, müssen Sie den Optionen mit dem Präfix ``force'' verwenden. Um beispielsweise sshd unabhängig von den Einstellungen in /etc/rc.conf neu zu starten, benutzen Sie das nachstehende Kommando:

# /etc/rc.d/sshd forcerestart

Ob ein Dienst in /etc/rc.conf aktiviert ist, können Sie leicht herausfinden, indem Sie das entsprechende rc.d-Skript mit der Option rcvar aufrufen. Ein Administrator kann beispielsweise wie folgt prüfen, ob der sshd-Dienst in /etc/rc.conf aktiviert ist:

# /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YES

Anmerkung: Die zweite Zeile (# sshd) wird vom Kommando sshd ausgegeben; sie kennzeichnet nicht die Eingabeaufforderung von root.

Ob ein Dienst läuft, kann mit der Option status abgefragt werden. Das folgende Kommando überprüft, ob der sshd auch wirklich gestartet wurde:

# /etc/rc.d/sshd status
sshd is running as pid 433.

Die Option reload initialisiert einen Dienst neu. Dem Dienst wird über ein Signal mitgeteilt, dass er seine Konfigurationsdateien neu einlesen soll. Oft wird dazu das Signal SIGHUP verwendet.

Die meisten Systemdienste werden beim Systemstart vom rcNG-System gestartet. Zum Beispiel aktiviert das Skript bgfsck die Prüfung von Dateisystemen im Hintergrund. Das Skript gibt die folgende Meldung aus, wenn es gestartet wird:

Starting background file system checks in 60 seconds.

Viele Systemdienste hängen von anderen Diensten ab. NIS und andere RPC-basierende Systeme hängen beispielsweise von dem rpcbind-Dienst (portmapper) ab. Im Kopf der Startskripten befinden sich die Informationen über Abhängigkeiten von anderen Diensten und weitere Metadaten. Mithilfe dieser Daten bestimmt das Programm rcorder(8) beim Systemstart die Startreihenfolge der Dienste. Folgende Schlüsselwörter werden im Kopf der Startskripten verwendet:

  • PROVIDE: Gibt die Namen der Dienste an, die mit dieser Datei zur Verfügung gestellt werden.

  • REQUIRE: Gibt die Namen der Dienste an, von denen dieser Dienst abhängt. Diese Datei wird nach den angegebenen Diensten ausgeführt.

  • BEFORE: Zählt Dienste auf, die auf diesen Dienst angewiesen sind. Diese Datei wird vor den angegebenen Diensten ausgeführt.

  • KEYWORD: FreeBSD oder NetBSD. Unterscheidet Funktionen, die von der BSD-Variante abhängen.

Mit diesem System kann ein Administrator den Start von Systemdiensten einfach steuern, ohne mit den Schwierigkeiten des ``runlevel''-Systems anderer UNIX Systeme kämpfen zu müssen.


6.8. Einrichten von Netzwerkkarten

Beigetragen von Marc Fonvieille.

Ein Rechner ohne Netzanschluss ist heute nicht mehr vorstellbar. Die Konfiguration einer Netzwerkkarte gehört zu den alltäglichen Aufgaben eines FreeBSD Administrators.


6.8.1. Bestimmen des richtigen Treibers

Bevor Sie anfangen, sollten Sie das Modell Ihrer Karte kennen, wissen welchen Chip die Karte benutzt und bestimmen, ob es sich um eine PCI- oder ISA-Karte handelt. Eine Aufzählung der unterstützten PCI- und ISA-Karten finden Sie in der Liste der unterstützen Geräte. Schauen Sie nach, ob Ihre Karte dort aufgeführt ist.

Wenn Sie wissen, dass Ihre Karte unterstützt wird, müssen Sie den Treiber für Ihre Karte bestimmen. /usr/src/sys/i386/conf/LINT enthält eine Liste der verfügbaren Treiber mit Informationen zu den unterstützten Chipsätzen und Karten. Wenn Sie sich nicht sicher sind, ob Sie den richtigen Treiber ausgewählt haben, lesen Sie die Hilfeseite des Treibers. Die Hilfeseite enthält weitere Informationen über die unterstützten Geräte und macht auch auf mögliche Probleme aufmerksam.

Wenn Sie eine gebräuchliche Karte besitzen, brauchen Sie meistens nicht lange nach dem passenden Treiber zu suchen. Die Treiber zu diesen Karten sind schon im GENERIC-Kernel enthalten und die Karte sollte während des Systemstarts erkannt werden:

dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
dc0: Ethernet address: 00:a0:cc:da:da:da
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
dc1: Ethernet address: 00:a0:cc:da:da:db
miibus1: <MII bus> on dc1
ukphy1: <Generic IEEE 802.3u media interface> on miibus1
ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto

Im Beispiel erkennt das System zwei Karten, die den dc(4) Treiber benutzen.

Der richtige Treiber muss geladen sein, damit eine Netzwerkkarte benutzt werden kann. Der Treiber kann auf zwei Arten geladen werden: Am einfachsten laden Sie das Kernelmodul für Ihre Karte mit kldload(8). Für manche Netzwerkkarten gibt es kein Kernelmodul (beispielsweise für ISA-Karten, die den ed(4) Treiber benutzen). Die zweite Möglichkeit ist, die Unterstützung für Ihre Karte fest in den Kernel einzubinden. Schauen Sie sich dazu /usr/src/sys/i386/conf/LINT und die Hilfeseite des Treibers, den Sie in den Kernel einbinden möchten, an. Die Übersetzung des Kernels wird in Kapitel 9 beschrieben. Wenn Ihre Karte während des Systemstarts vom Kernel (GENERIC) erkannt wurde, müssen Sie den Kernel nicht neu übersetzen.


6.8.2. Konfiguration von Netzwerkkarten

Nachdem der richtige Treiber für die Karte geladen ist, muss die Karte konfiguriert werden. Unter Umständen ist die Karte schon während der Installation mit sysinstall konfiguriert worden.

Das nachstehende Kommando zeigt die Konfiguration der Karten eines Systems an:

% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
        ether 00:a0:cc:da:da:da
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
        ether 00:a0:cc:da:da:db
        media: Ethernet 10baseT/UTP
        status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

Anmerkung: In alten Versionen von FreeBSD müssen Sie vielleicht noch -a auf der Kommandozeile von ifconfig(8) angeben. Hinweise zum Gebrauch von ifconfig(8) entnehmen Sie bitte der Hilfeseite. Beachten Sie, dass in diesem Beispiel die IPv6-Ausgaben (inet6 etc.) ausgelassen wurden.

Im Beispiel werden Informationen zu den folgenden Geräten angezeigt:

  • dc0: Der erste Ethernet-Adapter

  • dc1: Der zweite Ethernet-Adapter

  • lp0: Die parallele Schnittstelle

  • lo0: Das Loopback-Gerät

  • tun0: Das von ppp benutzte Tunnel-Gerät

Der Name der Netzwerkkarte wird aus dem Namen des Treibers und einer Zahl zusammengesetzt. Die Zahl gibt die Reihenfolge an, in der die Geräte beim Systemstart erkannt wurden. Die dritte Karte, die den sis(4) Treiber benutzt, würde beispielsweise sis2 heißen.

Der Adapter dc0 aus dem Beispiel ist aktiv. Sie erkennen das an den folgenden Hinweisen:

  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 über die einstellbaren Medien entnehmen Sie bitte der Hilfeseite des Treibers.

  7. Der Verbindungsstatus (status) ist active, das heißt es wurde ein Trägersignal entdeckt. Für dc1 wird status: no carrier angezeigt. Das ist normal, wenn kein Kabel an der Karte angeschlossen ist.

Wäre die Karte nicht konfiguriert, würde die Ausgabe von ifconfig(8) so aussehen:

dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
            ether 00:a0:cc:da:da:da

Sie brauchen die Berechtigungen von root, um Ihre Karte zu konfigurieren. Die Konfiguration kann auf der Kommandozeile mit ifconfig(8) erfolgen, allerdings müsste sie dann nach jedem Neustart wiederholt werden. Dauerhaft wird die Karte in /etc/rc.conf konfiguriert.

Öffnen Sie /etc/rc.conf mit Ihrem Lieblingseditor und fügen Sie für jede Karte Ihres Systems eine Zeile hinzu. In dem hier diskutierten Fall wurden die nachstehenden Zeilen eingefügt:

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, dc1 usw. durch die Gerätenamen Ihrer Karten und setzen Sie die richtigen IP-Adressen ein. Die Hilfeseiten des Treibers und ifconfig(8) enthalten weitere Einzelheiten über verfügbare Optionen. Die Syntax von /etc/rc.conf wird in rc.conf(5) erklärt.

Wenn Sie das Netz während der Installation konfiguriert haben, existieren vielleicht schon Einträge für Ihre Karten. Überprüfen Sie /etc/rc.conf bevor Sie weitere Zeilen hinzufügen.

In /etc/hosts können Sie die Namen und IP-Adressen der Rechner Ihres LANs eintragen. Weitere Informationen entnehmen Sie bitte hosts(5) und /usr/share/examples/etc/hosts.


6.8.3. Test und Fehlersuche

Nachdem Sie die notwendigen Änderungen in /etc/rc.conf vorgenommen haben, führen Sie einen Neustart Ihres Systems durch. Dadurch werden die Adapter konfiguriert und Sie stellen sicher, dass der Start ohne Konfigurationsfehler erfolgt.

Wenn das System gestartet ist, sollten Sie die Netzwerkkarten testen.


6.8.3.1. Test der Ethernet-Karte

Mit zwei Tests können Sie prüfen, ob die Ethernet-Karte richtig konfiguriert ist. Testen Sie zuerst mit ping 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

Jetzt versuchen wir, eine andere Maschine im LAN zu erreichen:

% 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

Sie können auch den Namen der Maschine anstelle von 192.168.1.2 benutzen, wenn Sie /etc/hosts entsprechend eingerichtet haben.


6.8.3.2. Fehlersuche

Fehler zu beheben, ist immer sehr mühsam. Indem Sie die einfachen Sachen zuerst prüfen, erleichtern Sie sich die Aufgabe. Steckt das Netwerkkabel? Sind die Netzwerkdienste richtig konfiguriert? Funktioniert die Firewall? Wird die Netwerkkarte von FreeBSD unterstützt? Bevor Sie einen Fehlerbericht einsenden, sollten Sie sich immer die Hardware-Informationen des Releases durchlesen. Aktualisieren Sie Ihre FreeBSD-Version auf -STABLE. Suchen Sie in den Archiven der Mailinglisten oder auf dem Internet nach bekannten Lösungen.

Wenn die Karte funktioniert, die Verbindungen aber zu langsam sind, lesen Sie bitte die Hilfeseite tuning(7). Prüfen Sie auch die Netzwerkkonfiguration, da falsche Einstellungen die Ursache für langsame Verbindungen sein können.

Wenn Sie viele ``device timeout'' Meldungen in den Systemprotokollen finden, prüfen Sie, dass es keinen Konflikt zwischen der Netzwerkkarte und anderen Geräten Ihres Systems gibt. Überprüfen Sie nochmals die Verkabelung. Unter Umständen benötigen Sie eine neue Netzwerkkarte.

Wenn Sie in den Systemprotokollen ``watchdog timeout'' Fehlermeldungen finden, kontrollieren Sie zuerst die Verkabelung. Überprüfen Sie dann, ob der PCI-Steckplatz der Karte Bus Mastering unterstützt. Auf einigen älteren Motherboards ist das nur für einen Steckplatz (meistens Steckplatz 0) der Fall. Lesen Sie in der Dokumentation Ihrer Karte und Ihres Motherboards nach, ob das vielleicht die Ursache des Problems sein könnte.

Die Meldung ``No route to host'' erscheint, wenn Ihr 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 Route zu dem Zielsystem existiert. Wenn nicht, lesen Sie bitte das Kapitel 19.

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-Pakete. Weitere Informationen erhalten Sie in Abschnitt 10.8.

Falls die Leistung der Karte schlecht ist, setzen Sie die Medienerkennung von autoselect (automatisch) auf das richtige Medium. In vielen Fällen löst diese Maßnahme Leistungsprobleme. Wenn nicht, prüfen Sie nochmal die Netzwerkeinstellungen und lesen Sie die Hilfeseite tuning(7).


6.9. Virtual Hosts

Ein gebrä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 Einträge in /etc/rc.conf festgelegt.

Ein alias Eintrag für das Interface fxp0 sieht wie folgt aus:

ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"

Beachten Sie, dass die alias Einträge mit alias0 anfangen müssen und dann weiter hochgezählt werden, das heißt _alias1, _alias2, usw. Die Konfiguration der Aliase hört bei der ersten fehlenden Zahl auf.

Die Berechnung der Alias-Netzwerkmasken ist wichtig, doch zum Glück einfach. Für jedes Interface muss es eine Adresse geben, die die Netzwerkmaske des Netzwerkes richtig beschreibt. Alle anderen Adressen in diesem Netzwerk haben dann eine Netzwerkmaske, die mit 1 gefüllt ist.

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.

Die folgenden Einträge 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"

6.10. Konfigurationsdateien

6.10.1. /etc Layout

Konfigurationsdateien finden sich in einigen Verzeichnissen unter anderem in:

/etc Enthält generelle Konfigurationsinformationen, die Daten hier sind systemspezifisch.
/etc/defaults Default Versionen der Konfigurationsdateien.
/etc/mail Enthält die sendmail(8) Konfiguration und weitere MTA Konfigurationsdateien.
/etc/ppp Hier findet sich die Konfiguration für die User- und Kernel-ppp Programme.
/etc/namedb Das Vorgabeverzeichnis, in dem Daten von named(8) gehalten werden. Normalerweise werden hier named.conf und Zonendaten abgelegt.
/usr/local/etc Installierte Anwendungen legen hier ihre Konfigurationsdateien ab. Dieses Verzeichnis kann Unterverzeichnisse für bestimmte Anwendungen enthalten.
/usr/local/etc/rc.d Ort für Start- und Stopskripten installierter Anwendungen.
/var/db Automatisch generierte systemspezifische Datenbanken, wie die Paket-Datenbank oder die locate-Datenbank.

6.10.2. Hostnamen


6.10.2.1. /etc/resolv.conf

Wie der FreeBSD-Resolver auf das Internet Domain Name System (DNS) zugreift, wird in /etc/resolv.conf festgelegt.

Die gebräuchlichsten Einträge in /etc/resolv.conf sind:

nameserver Die IP-Adresse eines Nameservers, den der Resolver abfragen soll. Bis zu drei Server werden in der Reihenfolge, in der sie aufgezählt sind, abgefragt.
search Suchliste mit Domain-Namen zum Auflösen von Hostnamen. Die Liste wird normalerweise durch den Domain-Teil des lokalen Hostnamens festgelegt.
domain Der lokale Domain-Name.

Beispiel für eine typische 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, überschreibt dhclient(8) für gewöhnlich resolv.conf mit den Informationen vom DHCP-Server.


6.10.2.2. /etc/hosts

/etc/hosts ist eine einfache textbasierte Datenbank, die aus alten Internetzeiten stammt. Zusammen mit DNS und NIS stellt sie eine Abbildung zwischen Namen und IP-Adressen zur Verfügung. Anstatt named(8) zu konfigurieren, können hier lokale Rechner, die über ein LAN verbunden sind, eingetragen werden. Lokale Einträge für gebräuchliche Internet-Adressen in /etc/hosts verhindern die Abfrage eines externen Servers und beschleunigen die Namensauflösung.

# $FreeBSD$
#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# 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 myname.my.domain
127.0.0.1               localhost localhost.my.domain myname.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.  PLEASE PLEASE PLEASE do not try
# to invent your own network numbers but instead get one from your
# network provider (if any) or from the Internet Registry (ftp to
# rs.internic.net, directory `/templates').
#

/etc/hosts hat ein einfaches 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).


6.10.3. Konfiguration von Logdateien


6.10.3.1. syslog.conf

syslog.conf ist die Konfigurationsdatei von syslogd(8). Sie legt fest, welche syslog Meldungen in welche Logdateien geschrieben werden.

# $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.debug;auth.notice;mail.crit          /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.*                                      /var/log/security
mail.info                                       /var/log/maillog
lpr.info                                        /var/log/lpd-errs
cron.*                                          /var/log/cron
*.err                                           root
*.notice;news.err                               root
*.alert                                         root
*.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
#*.*                                            /var/log/all.log
# uncomment this to enable logging to a remote log host 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
!startslip
*.*                                             /var/log/slip.log
!ppp
*.*                                             /var/log/ppp.log

Weitere Informationen enthält syslog.conf(5).


6.10.3.2. newsyslog.conf

Die Konfigurationsdatei für newsyslog(8), das normalerweise von cron(8) aufgerufen wird, ist newsyslog.conf. newsyslog(8) stellt fest, ob Logdateien archiviert oder verschoben werden müssen. So wird logfile nach logfile.0 geschoben und logfile.0 nach logfile.1 usw. Zudem können Logdateien mit gzip(1) komprimiert werden. Die Namen der Logdateien sind dann logfile.0.gz, logfile.1.gz usw.

newsyslog.conf legt fest, welche Logdateien wann bearbeitet und wie viele Dateien behalten werden. Logdateien können auf Basis ihrer Größe oder zu einem gewissen Zeitpunkt archiviert bzw. umbenannt werden.

# configuration file for newsyslog
# $FreeBSD$
#
# filename          [owner:group]    mode count size when [ZB] [/pid_file] [sig_num]
/var/log/cron                           600  3     100  *     Z
/var/log/amd.log                        644  7     100  *     Z
/var/log/kerberos.log                   644  7     100  *     Z
/var/log/lpd-errs                       644  7     100  *     Z
/var/log/maillog                        644  7     *    @T00  Z
/var/log/sendmail.st                    644  10    *    168   B
/var/log/messages                       644  5     100  *     Z
/var/log/all.log                        600  7     *    @T00  Z
/var/log/slip.log                       600  3     100  *     Z
/var/log/ppp.log                        600  3     100  *     Z
/var/log/security                       600  10    100  *     Z
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/daily.log                      640  7     *    @T00  Z
/var/log/weekly.log                     640  5     1    $W6D0 Z
/var/log/monthly.log                    640  12    *    $M1D0 Z
/var/log/console.log                    640  5     100  *     Z

Um mehr zu erfahren, lesen Sie bitte newsyslog(8).


6.10.4. sysctl.conf

sysctl.conf sieht ähnlich wie rc.conf aus. Werte werden in der Form Variable=Wert gesetzt. Die angegebenen Werte werden gesetzt, nachdem sich das System im Mehrbenutzer Modus befindet, das heißt nicht alle Werte können in diesem Modus gesetzt werden.

In der folgenden sysctl.conf wird das Loggen von fatalen Signalen abgestellt und Linux Programmen wird klar gemacht, dass sie in Wirklichkeit unter FreeBSD laufen:

kern.logsigexit=0       # Do not log fatal signal exits (e.g. sig 11)
compat.linux.osname=FreeBSD
compat.linux.osrelease=4.3-STABLE

6.11. Einstellungen mit sysctl

Mit sysctl(8) können Sie Änderungen an einem laufenden FreeBSD System vornehmen. Unter anderem können Optionen des TCP/IP-Stacks oder des virtuellen Speichermanagements verändert werden. Unter der Hand eines erfahrenen Systemadministrators kann dies die Systemperformance erheblich verbessern. Über 500 Variablen können mit sysctl(8) gelesen und gesetzt werden.

Der Hauptzweck von sysctl(8) besteht darin, Systemeinstellungen zu lesen und zu verändern.

Alle auslesbaren Variablen werden wie folgt angezeigt:

% sysctl -a

Sie können auch eine spezielle Variable, z.B. kern.maxproc lesen:

% 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 können Sie Strings, Zahlen oder Boolean-Werte setzen. Bei Boolean-Werten setzen sie 1 für wahr und 0 für falsch.


6.11.1. Schreibgeschützte Variablen

Contributed by Tom Rhodes.

Manchmal ist es notwendig, obwohl es nicht empfohlen ist, schreibgeschützte sysctl-Variablen zu verändern.

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 lösen, muss eine schreibgeschützte sysctl-Variable verändert werden. Eine OID kann in der Datei /boot/loader.conf.local überschrieben werden. Die Datei /boot/defaults/loader.conf enthält Vorgabewwerte für sysctl-Variablen.

Das oben erwähnte Problem wird durch die Angabe von hw.pci.allow_unsupported_io_range=1 in /boot/loader.conf.local gelöst. Danach sollte cardbus(4) fehlerfrei funktionieren.


6.12. Tuning von Laufwerken

6.12.1. Sysctl Variablen

6.12.1.1. vfs.vmiodirenable

Die Variable vfs.vmiodirenable besitzt in der Voreinstellung den Wert 1. Die Variable kann auf den Wert 0 (ausgeschaltet) oder 1 (angeschaltet) 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. Im Buffer-Cache verbrauchen sie mit 512 Bytes noch weniger Platz. In der Voreinstellung wird der Buffer-Cache nur eine limitierte Anzahl Verzeichnisse zwischenspeichern, auch wenn das System über sehr viel Speicher verfügt. Wenn Sie diese Variable aktivieren, kann der Buffer-Cache den VM-Page-Cache benutzen, um Verzeichnisse zwischenzuspeichern. Der ganze Speicher steht damit zum Zwischenspeichern von Verzeichnissen zur Verfügung. Der Nachteil bei dieser Vorgehensweise ist, dass zum Zwischenspeichern eines Verzeichnisses mindestens eine physikalische Seite im Speicher, die normalerweise 4 kB groß ist, anstelle von 512 Bytes gebraucht wird. Wir empfehlen diese Option zu aktivieren, wenn Sie Dienste zur Verfügung stellen, die viele Dateien manipulieren. Beispiele für solche Dienste sind Web-Caches, große Mail-Systeme oder Netnews. Trotz des verschwendeten Speichers vermindert das Aktivieren dieser Variable in aller Regel nicht die Leistung des Systems, obwohl Sie das nachprüfen sollten.


6.12.1.2. vfs.write_behind

In der Voreinstellung besitzt die Variable vfs.write_behind den Wert 1 (aktiviert). Mit dieser Einstellung schreibt das Dateisystem anfallende vollständige Cluster, die besonders beim sequentiellen Schreiben großer Dateien auftreten, direkt auf das Medium aus. Dies verhindert, dass sich im Buffer-Cache veränderte Puffer (dirty buffers) ansammeln, die die I/O-Verarbeitung nicht mehr beschleunigen würden. Unter bestimmten Umständen blockiert diese Funktion allerdings Prozesse. Setzen Sie in diesem Fall die Variable vfs.write_behind auf den Wert 0.


6.12.1.3. vfs.hirunningspace

Die Variable vfs.hirunningspace bestimmt systemweit die Menge ausstehender Schreiboperationen, die dem Platten-Controller zu jedem beliebigen Zeitpunkt übergeben werden können. Normalerweise können Sie den Vorgabewert verwenden. Auf Systemen mit vielen Platten kann der Wert aber auf 4 bis 5 Megabyte erhöht werden. Beachten Sie, dass ein zu hoher Wert (größer als der Schreib-Schwellwert des Buffer-Caches) zu Leistungverlusten führen kann. Setzen Sie den Wert daher nicht zu hoch! Hohe Werte können auch Leseoperationen verzögern, die gleichzeitig mit Schreiboperationen ausgeführt werden.

Es gibt weitere Variablen, mit denen Sie den Buffer-Cache und den VM-Page-Cache beeinflussen können. Wir raten Ihnen allerdings davon ab, diese Variablen zu verändern: Seit FreeBSD 4.3 stellt sich die Verwaltung des virtuellen Speichers sehr gut selbst ein.


6.12.1.4. vm.swap_idle_enabled

Die Variable vm.swap_idle_enabled ist für große Mehrbenutzer-Systeme gedacht, auf denen sich viele Benutzer an- und abmelden und auf denen es viele Prozesse im Leerlauf (idle) gibt. Solche Systeme fragen kontinuierlich freien Speicher an. Wenn Sie die Variable vm.swap_idle_enabled aktivieren, können Sie die Auslagerungs-Hysterese von Seiten mit den Variablen vm.swap_idle_threshold1 und vm.swap_idle_threshold2 einstellen. Die Schwellwerte beider Variablen geben die Zeit in Sekunden an, in denen sich ein Prozess im Leerlauf befinden muss. Wenn die Werte so eingestellt sind, dass Seiten früher als nach dem normalen Algorithmus ausgelagert werden, verschafft das dem Auslagerungs-Prozess mehr Luft. Aktivieren Sie diese Funktion nur, wenn Sie sie wirklich benötigen: Die Speicherseiten werden eher früher als später ausgelagert. Der Platz im Swap-Bereich wird dadurch schneller verbraucht und die Plattenaktivitäten steigen an. Auf kleine Systeme hat diese Funktion spürbare Auswirkungen. Auf großen Systemen, die sowieso schon Seiten auslagern müssen, können ganze Prozesse leichter in den Speicher geladen oder ausgelagert werden.


6.12.1.5. hw.ata.wc

In FreeBSD 4.3 wurde versucht, den IDE-Schreib-Zwischenspeicher abzustellen. Obwohl dies die Bandbreite zum Schreiben auf IDE-Platten verringerte, wurde es aus Gründen der Datenkonsistenz als notwenig angesehen. Der Kern des Problems ist, dass IDE-Platten keine zuverlässige Aussage über das Ende eines Schreibvorgangs treffen. Wenn der Schreib-Zwischenspeicher aktiviert ist, werden die Daten nicht in der Reihenfolge ihres Eintreffens geschrieben. Es kann sogar passieren, dass das Schreiben mancher Blöcke im Fall von starker Plattenaktivität auf unbefristete Zeit verzögert wird. Ein Absturz oder Stromausfall zu dieser Zeit kann die Dateisysteme erheblich beschädigen. Wir entschieden uns daher für die sichere Variante und stellten den Schreib-Zwischenspeicher ab. Leider war damit auch ein großer Leistungsverlust verbunden, so dass wir die Variable nach dem Release wieder aktiviert haben. Sie sollten den Wert der Variable hw.ata.wc auf Ihrem System überprüfen. Wenn der Schreib-Zwischenspeicher abgestellt ist, können Sie ihn aktivieren, indem Sie die Variable auf den Wert 1 setzen. Dies muss zum Zeitpunkt des Systemstarts im Boot-Loader geschehen. Eine Änderung der Variable, nachdem der Kernel gestartet ist, hat keine Auswirkungen.

Weitere Informationen finden Sie in ata(4).


6.12.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 verzögert den Systemstart um 15 oder mehr Sekunden. Normalerweise kann dieser Wert, insbesondere mit modernen Laufwerken, auf 5 Sekunden heruntergesetzt werden. Ab FreeBSD 5.0 wird dazu die sysctl-Variable kern.cam.scsi_delay benutzt. Die Variable sowie die Kerneloption verwenden für die Zeitangabe Millisekunden und nicht Sekunden.


6.12.2. Soft Updates

Mit tunefs(8) lassen sich Feineinstellungen an Dateisystemen vornehmen. Das Programm hat verschiedene Optionen, von denen hier nur Soft Updates betrachtet werden. Soft Updates werden wie folgt ein- und ausgeschaltet:

# tunefs -n enable /filesystem
# tunefs -n disable /filesystem

Ein eingehängtes Dateisystem kann nicht mit tunefs(8) modifiziert werden. Soft Updates werden am besten im Single-User Modus aktiviert, bevor Partitionen eingehangen sind.

Anmerkung: Ab FreeBSD 4.5 können Sie Soft Updates mit der Option -U von newfs(8) beim Anlegen der Dateisysteme aktivieren.

Durch Einsatz eines Zwischenspeichers wird die Performance im Bereich der Metadaten, vorwiegend beim Anlegen und Löschen von Dateien, gesteigert. Wir empfehlen, Soft Updates auf allen Dateisystemen zu aktivieren. Allerdings sollten Sie sich über die zwei Nachteile von Soft Updates bewusst sein: Erstens garantieren Soft Updates zwar die Konsistenz der Daten im Fall eines Absturzes, aber es kann leicht passieren, dass das Dateisystem über mehrere Sekunden oder gar eine Minute nicht synchronisiert wurde. Im Fall eines Absturzes verlieren Sie mit Soft Updates unter Umständen mehr Daten als ohne. Zweitens verzögern Soft Updates die Freigabe von Datenblöcken. Eine größere Aktualisierung eines fast vollen Dateisystems, wie dem Root-Dateisystem, z.B. während eines make installworld, kann das Dateisystem vollaufen lassen. Dadurch würde die Aktualisierung fehlschlagen.


6.12.2.1. Details über Soft Updates

Es gibt zwei klassische Herangehensweisen, wie man die Metadaten des Dateisystems (also Daten über Dateien, wie inode Bereiche oder Verzeichniseinträge) aktualisiert auf die Platte zurückschreibt:

Das historisch übliche Verfahren waren synchrone Updates der Metadaten, d. h. wenn eine Änderung an einem Verzeichnis nötig war, wurde anschließend gewartet, bis diese Änderung tatsächlich auf die Platte zurückgeschrieben worden war. Der Inhalt der Dateien wurde im ``Buffer Cache'' zwischengespeichert und asynchron irgendwann später auf die Platte geschrieben. Der Vorteil dieser Implementierung ist, dass sie sicher funktioniert. Wenn während eines Updates ein Ausfall erfolgt, haben die Metadaten immer einen konsistenten Zustand. Eine Datei ist entweder komplett angelegt oder gar nicht. Wenn die Datenblöcke einer Datei im Fall eines Absturzes noch nicht den Weg aus dem ``Buffer Cache'' auf die Platte gefunden haben, kann fsck(8) das Dateisystem reparieren, indem es die Dateilänge einfach auf 0 setzt. Außerdem ist die Implementierung einfach und überschaubar. Der Nachteil ist, dass Änderungen der Metadaten sehr langsam vor sich gehen. Ein rm -r beispielsweise fasst alle Dateien eines Verzeichnisses der Reihe nach an, aber jede dieser Änderungen am Verzeichnis (Löschen einer Datei) wird einzeln synchron auf die Platte geschrieben. Gleiches beim Auspacken großer Hierarchien (tar -x).

Der zweite Fall sind asynchrone Metadaten-Updates. Das ist z. B. der Standard bei Linux/ext2fs oder die Variante mount -o async für *BSD UFS. Man schickt die Updates der Metadaten einfach auch noch über den ``Buffer Cache'', sie werden also zwischen die Updates der normalen Daten eingeschoben. Vorteil ist, dass man nun nicht mehr auf jeden Update warten muss, Operationen, die zahlreiche Metadaten ändern, werden also viel schneller. Auch hier ist die Implementierung sehr einfach und wenig anfällig für Fehler. Nachteil ist, dass keinerlei Konsistenz des Dateisystems mehr gesichert ist. Wenn mitten in einer Operation, die viele Metadaten ändert, ein Ausfall erfolgt (Stromausfall, drücken des Reset-Tasters), dann ist das Dateisystem anschließend in einem unbestimmten Zustand. Niemand kann genau sagen, was noch geschrieben worden ist und was nicht mehr; die Datenblöcke einer Datei können schon auf der Platte stehen, während die inode Tabelle oder das zugehörige Verzeichnis nicht mehr aktualisiert worden ist. Man kann praktisch kein fsck mehr implementieren, das diesen Zustand wieder reparieren kann, da die dazu nötigen Informationen einfach auf der Platte fehlen. Wenn ein Dateisystem derart beschädigt worden ist, kann man es nur neu erzeugen (newfs(8)) und die Daten vom Backup zurückspielen.

Der historische Ausweg aus diesem Dilemma war ein dirty region logging (auch als Journalling bezeichnet, wenngleich dieser Begriff nicht immer gleich benutzt und manchmal auch für andere Formen von Transaktionsprotokollen gebraucht wird). Man schreibt die Metadaten-Updates zwar synchron, aber nur in einen kleinen Plattenbereich, die logging area. Von da aus werden sie dann asynchron auf ihre eigentlichen Bereiche verteilt. Da die logging area ein kleines zusammenhängendes Stückchen ist, haben die Schreibköpfe der Platte bei massiven Operationen auf Metadaten keine allzu großen Wege zurückzulegen, so dass alles ein ganzes Stück schneller geht als bei klassischen synchronen Updates. Die Komplexität der Implementierung hält sich ebenfalls in Grenzen, somit auch die Anfälligkeit für Fehler. Als Nachteil ergibt sich, dass Metadaten zweimal auf die Platte geschrieben werden müssen (einmal in die logging area, einmal an die richtige Stelle), so dass das im Falle regulärer Arbeit (also keine gehäuften Metadatenoperationen) eine ``Pessimisierung'' des Falls der synchronen Updates eintritt, es wird alles langsamer. Dafür hat man als Vorteil, dass im Falle eines Crashes der konsistente Zustand dadurch erzielbar ist, dass die angefangenen Operationen aus dem dirty region log entweder zu Ende ausgeführt oder komplett verworfen werden, wodurch das Dateisystem schnell wieder zur Verfügung steht.

Die Lösung von Kirk McKusick, dem Schöpfer von Berkeley FFS, waren Soft Updates: die notwendigen Updates der Metadaten werden im Speicher gehalten und dann sortiert auf die Platte geschrieben (``ordered metadata updates''). Dadurch hat man den Effekt, dass im Falle massiver Metadaten-Änderungen spätere Operationen die vorhergehenden, noch nicht auf die Platte geschriebenen Updates desselben Elements im Speicher ``einholen''. Alle Operationen, auf ein Verzeichnis beispielsweise, werden also in der Regel noch im Speicher abgewickelt, bevor der Update überhaupt auf die Platte geschrieben wird (die dazugehörigen Datenblöcke werden natürlich auch so sortiert, dass sie nicht vor ihren Metadaten auf der Platte sind). Im Fall eines Absturzes hat man ein implizites ``log rewind'': alle Operationen, die noch nicht den Weg auf die Platte gefunden haben, sehen danach so aus, als hätten sie nie stattgefunden. Man hat so also den konsistenten Zustand von ca. 30 bis 60 Sekunden früher sichergestellt. Der verwendete Algorithmus garantiert dabei, dass alle tatsächlich benutzten Ressourcen auch in den entsprechenden Bitmaps (Block- und inode Tabellen) als belegt markiert sind. Der einzige Fehler, der auftreten kann, ist, dass Ressourcen noch als ``belegt'' markiert sind, die tatsächlich ``frei'' sind. fsck(8) erkennt dies und korrigiert diese nicht mehr belegten Ressourcen. Die Notwendigkeit eines Dateisystem-Checks darf aus diesem Grunde auch ignoriert und das Dateisystem mittels mount -f zwangsweise eingebunden werden. Um noch allozierte Ressourcen freizugeben muss später ein fsck(8) nachgeholt werden. Das ist dann auch die Idee des background fsck: beim Starten des Systems wird lediglich ein Schnappschuss des Filesystems gemacht, mit dem fsck(8) dann später arbeiten kann. Alle Dateisysteme dürfen ``unsauber'' eingebunden werden und das System kann sofort in den Multiuser-Modus gehen. Danach wird ein Hintergrund-fsck für die Dateisysteme gestartet, die dies benötigen, um möglicherweise irrtümlich belegte Ressourcen freizugeben. (Dateisysteme ohne Soft Updates benötigen natürlich immer noch den üblichen (Vordergrund-)fsck, bevor sie eingebunden werden können.)

Der Vorteil ist, dass die Metadaten-Operationen beinahe so schnell ablaufen wie im asynchronen Fall (also durchaus auch schneller als beim ``logging'', das ja die Metadaten immer zweimal schreiben muss). Als Nachteil stehen dem die Komplexität des Codes (mit einer erhöhten Fehlerwahrscheinlichkeit in einem bezüglich Datenverlust hoch sensiblen Bereich) und ein erhöhter Speicherverbrauch entgegen. Außerdem muss man sich an einige Eigenheiten gewöhnen: Nach einem Absturz ist ein etwas älterer Stand auf der Platte - statt einer leeren, aber bereits angelegten Datei (wie nach einem herkömmlichen fsck 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 -r nicht sofort wieder als verfügbar markiert werden, sondern erst dann, wenn der Update auch auf die Platte vermittelt worden ist. Dies kann besonders dann Probleme bereiten, wenn große Datenmengen in einem Dateisystem ersetzt werden, das nicht genügend Platz hat, um alle Dateien zweimal unterzubringen.


6.13. Einstellungen von Kernel Limits


6.13.1. Datei und Prozeß Limits

6.13.1.1. kern.maxfiles

Abhängig von den Anforderungen Ihres Systems kann kern.maxfiles erhöht oder erniedrigt werden. Die Variable legt die maximale Anzahl von Dateideskriptoren auf Ihrem System fest. Wenn die Dateideskriptoren aufgebraucht sind, werden Sie die Meldung ``file: table is full'' wiederholt im Puffer für Systemmeldungen sehen. Den Inhalt des Puffers können Sie sich mit dmesg anzeigen lassen.

Jede offene Datei, jedes Socket und jede FIFO verbraucht einen Dateideskriptor. Auf ``dicken'' Produktionsservern können leicht Tausende Dateideskriptoren benötigt werden, abhängig von der Art und Anzahl der gleichzeitig laufenden Dienste.

Die Voreinstellung von kern.maxfile wird von MAXUSERS aus Ihrer Kernelkonfiguration bestimmt. kern.maxfiles wächst proportional mit dem Wert von MAXUSERS. Wenn Sie einen angepassten Kernel kompilieren, empfiehlt es sich diese Option entsprechend der maximalen Benutzerzahl Ihres Systems einzustellen. Obwohl auf einer Produktionsmaschine vielleicht nicht 256 Benutzer gleichzeitig angemeldet sind, können die benötigten Ressourcen ähnlich denen eines großen Webservers sein.

Anmerkung: Ab FreeBSD 4.5 können Sie MAXUSERS in der Kernelkonfiguration auf 0 setzen. Das System setzt dann automatisch einen passenden Wert, der von der Größe Ihres Hauptspeichers abhängt, ein.


6.13.1.2. kern.ipc.somaxconn

Die Variable kern.ipc.somaxconn beschränkt die Größe der Warteschlange (Listen-Queue) für neue TCP-Verbindungen. Der Vorgabewert von 128 ist normalerweise zu klein, um neue Verbindungen auf einem stark ausgelasteten Webserver zuverlässig zu handhaben. Auf solchen Servern sollte der Wert auf 1024 oder höher gesetzt werden. Ein Dienst (z.B. sendmail(8), oder Apache) kann die Größe der Queue selbst einschränken. Oft gibt es die Möglichkeit, die Größe der Listen-Queue in einer Konfigurationsdatei einzustellen. Eine große Listen-Queue übersteht vielleicht auch einen Denial of Service Angriff (DoS).


6.13.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 ungefähr 2 kB Speicher in Anspruch, so dass ein Wert von 1024 insgesamt 2 Megabyte Speicher für Netzwerkpuffer im System reserviert. Wie viele Cluster benötigt werden, lässt sich durch eine einfache Berechnung herausfinden. Wenn Sie einen Webserver besitzen, der maximal 1000 gleichzeitige Verbindungen servieren soll und jede der Verbindungen je einen 16 kB großen Puffer zum Senden und Empfangen braucht, brauchen Sie ungefähr 32 MB Speicher für Netzwerkpuffer. Als Daumenregel verdoppeln Sie diese Zahl, so dass sich für NMBCLUSTERS der Wert 2x32 MB / 2 kB = 32768 ergibt. Für Maschinen mit viel Speicher sollten Werte zwischen 4096 und 32768 genommen werden. Sie können diesen Wert nicht willkürlich erhöhen, da dies bereits zu einem Absturz beim Systemstart führen kann. Mit der Option -m von netstat(1) können Sie den Gebrauch der Netzwerkpuffer kontrollieren.

Die Netzwerkpuffer können beim Systemstart mit der Loader-Variablen kern.ipc.nmbclusters eingestellt werden. Nur auf älteren FreeBSD-Systemen müssen Sie die Kerneloption NMBCLUSTERS verwenden.

Die Anzahl der sendfile(2) Puffer muss auf ausgelasteten Servern, die den Systemaufruf sendfile(2) oft verwenden, vielleicht erhöht werden. Dazu können Sie die Kerneloption NSFBUFS verwenden oder die Anzahl der Puffer in /boot/loader.conf (siehe loader(8)) setzen. Die Puffer sollten erhöht werden, wenn Sie Prozesse im Zustand ``sfbufa'' sehen. Die schreibgeschützte sysctl-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.


6.13.2.1. net.inet.ip.portrange.*

Die sysctl-Variable net.inet.ip.portrange.* legt die Portnummern für TCP- und UDP-Sockets fest. Es gibt drei Bereiche: den niedrigen Bereich, den normalen Bereich und den hohen Bereich. Die meisten Netzprogramme benutzen den normalen Bereich. Dieser Bereich umfasst in der Voreinstellung die Portnummern 500 bis 5000 und wird durch die Variablen net.inet.ip.portrange.first und net.inet.ip.portrange.last festgelegt. Die festgelegten Bereiche für Portnummern werden von ausgehenden Verbindungen benutzt. Unter bestimmten Umständen, beispielsweise auf stark ausgelasteten Proxy-Servern, sind alle Portnummern für ausgehende Verbindungen belegt. Bereiche für Portnummern spielen auf Servern keine Rolle, die hauptsächlich eingehende Verbindungen verarbeiten (wie ein normaler Webserver) oder nur eine begrenzte Anzahl ausgehender Verbindungen öffnen (beispielsweise ein Mail-Relay). Wenn Sie keine freien Portnummern mehr haben, sollten Sie die Variable net.inet.ip.portrange.last langsam erhöhen. Ein Wert von 10000, 20000 oder 30000 ist angemessen. Beachten Sie auch eine vorhandene Firewall, wenn Sie die Bereiche für Portnummern ändern. Einige Firewalls sperren große Bereiche (normalerweise aus den kleinen Portnummern) und erwarten, dass hohe Portnummern für ausgehende Verbindungen verwendet werden. Daher kann es erforderlich sein, den Wert von net.inet.ip.portrange.first zu erhöhen.


6.13.2.2. TCP Bandwidth Delay Product Begrenzung

Die TCP Bandwidth Delay Product Begrenzung gleicht TCP/Vegas von NetBSD. Die Begrenzung wird aktiviert, indem Sie die sysctl-Variable net.inet.tcp.inflight_enable auf den Wert 1 setzen. Das System wird dann versuchen, für jede Verbindung, das Produkt aus der Übertragungsrate und der Verzögerungszeit zu bestimmen. Dieses Produkt begrenzt die Datenmenge, die für einen optimales Durchsatz zwischengespeichert werden muss.

Diese Begrenzung ist nützlich, wenn Sie Daten über Verbindungen mit einem hohen Produkt aus Übertragungsrate und Verzögerungszeit wie Modems, Gigabit-Ethernet oder schnellen WANs, zur Verfügung stellen. Insbesondere wirkt sich die Begrenzung aus, wenn die Verbindung die TCP-Option Window-scaling verwendet oder große Sende-Fenster (send window) benutzt. Schalten Sie die Debug-Meldungen aus, wenn Sie die Begrenzung aktiviert haben. Dazu setzen Sie die Variable net.inet.tcp.inflight_debug auf 0. Auf Produktions-Systemen sollten Sie zudem die Variable net.inet.tcp.inflight_min mindestens auf den Wert 6144 setzen. Allerdings kann ein zu hoher Wert, abhängig von der Verbindung, die Begrenzungsfunktion unwirksam machen. Die Begrenzung reduziert die Datenmenge in den Queues von Routern und Switches, sowie die Datenmenge in der Queue der lokalen Netzwerkkarte. Die Verzögerungszeit (Round Trip Time) für interaktive Anwendungen sinkt, da weniger Pakete zwischengespeichert werden. Dies gilt besonders für Verbindungen über langsame Modems. Die Begrenzung wirkt sich allerdings nur auf das Versenden von Daten aus (Uploads, Server). Auf den Empfang von Daten (Downloads) hat die Begrenzung keine Auswirkungen.

Die Variable net.inet.tcp.inflight_stab sollte nicht angepasst werden. Der Vorgabewert der Variablen beträgt 20, das heißt es werden maximal zwei Pakete zu dem Produkt aus Übertragungsrate und Verzögerungszeit addiert. Dies stabilisiert den Algorithmus und verbessert die Reaktionszeit auf Veränderungen. Bei langsamen Verbindungen können sich aber die Laufzeiten der Pakete erhöhen (ohne diesen Algorithmus wären sie allerdings noch höher). In solchen Fällen können Sie versuchen, den Wert der Variablen auf 15, 10 oder 5 zu erniedrigen. Gleichzeitig müssen Sie vielleicht auch net.inet.tcp.inflight_min auf einen kleineren Wert (beispielsweise 3500) setzen. Ändern Sie diese Variablen nur ab, wenn Sie keine anderen Möglichkeiten mehr haben.


6.14. Hinzufügen von Swap-Bereichen

Egal wie vorausschauend Sie planen, manchmal entspricht ein System einfach nicht Ihren Erwartungen. Es ist leicht, mehr Swap-Bereiche hinzuzufügen. Dazu stehen Ihnen drei Wege offen: Sie können eine neue Platte einbauen, den Swap-Bereich über NFS ansprechen oder eine Swap-Datei auf einer existierenden Partition einrichten.


6.14.1. Swap auf einer neuen Festplatte

Der einfachste Weg, zusätzlich einen Swap-Bereich einzurichten, ist der Einbau einer neuen Platte, da Sie ja immer eine neue Platte einbauen können. Nachdem Sie das getan haben, lesen Sie bitte noch einmal den Abschnitt Swap Partition aus dem Kapitel Vorbereitende Konfiguration des Handbuchs. Dort finden Sie Vorschläge, wie Sie den Swap-Bereich am besten einrichten.


6.14.2. Swap-Bereiche über NFS

Swap-Bereiche über NFS sollten Sie nur dann einsetzen, wenn Sie über keine lokale Platte verfügen. In FreeBSD Versionen vor 4.X ist dies zudem sehr langsam und nicht effizient. Ab FreeBSD 4.0 ist das Nutzen von Swap über NFS genügend schnell und effizient, doch wird es durch die zur Verfügung stehende Bandbreite limitiert und belastet zusätzlich den NFS-Server.


6.14.3. Swap-Dateien

Sie können eine Datei festgelegter Größe als Swap-Bereich nutzen. Im folgenden Beispiel werden wir eine 64 MB große Datei mit dem Namen /usr/swap0 benutzen, Sie können natürlich einen beliebigen Namen für den Swap-Bereich benutzen.

Beispiel 6-1. Erstellen einer Swap-Datei mit FreeBSD 4.X

  1. Zuerst stellen Sie bitte sicher, dass Ihr Kernel den vnode-Treiber enthält. In neueren Versionen von GENERIC ist dieser nicht enthalten.

    pseudo-device   vn 1   #Vnode driver (turns a file into a device)
    
  2. Erstellen Sie das vn-Gerät:

    # cd /dev
    # sh MAKEDEV vn0
    
  3. Legen Sie die Swap-Datei /usr/swap0 an:

    # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
    
  4. Setzen Sie die richtigen Berechtigungen für /usr/swap0:

    # chmod 0600 /usr/swap0
    
  5. Aktivieren Sie die Swap-Datei in /etc/rc.conf:

    swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired.
    
  6. Um die Swap-Datei zu aktivieren, führen Sie entweder einen Neustart durch oder geben das folgende Kommando ein:

    # vnconfig -e /dev/vn0b /usr/swap0 swap
    

Beispiel 6-2. Erstellen einer Swap-Datei mit FreeBSD 5.X

  1. Stellen Sie sicher, dass der Kernel RAM-Disks (md(4)) unterstützt. Dies ist in der GENERIC-Konfiguration voreingestellt.

    device   md   # Memory "disks"
    
  2. Legen Sie die Swap-Datei /usr/swap0 an:

    # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
    
  3. Setzen Sie die richtigen Berechtigungen für /usr/swap0:

    # chmod 0600 /usr/swap0
    
  4. Aktivieren Sie die Swap-Datei /etc/rc.conf:

    swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired.
    
  5. Um die Swap-Datei zu aktivieren, führen Sie entweder einen Neustart durch oder geben das folgende Kommando ein:

    # mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0
    

6.15. Energie- und Ressourcenverwaltung

Verfasst von Hiten Pandya und Tom Rhodes.

Es ist sehr wichtig, Hardware effizient einzusetzen. Vor der Einführung des Advanced Configuration and Power Interface (ACPI) konnten der Stromverbrauch und die Wärmeabgabe eines Systems nur sehr schlecht von Betriebssystemen gesteuert werden. Die Hardware wurde mit BIOS-Funktionen, wie Plug and Play BIOS (PNPBIOS) oder Advanced Power Management (APM), gesteuert. Das Betriebssystem soll aber das System überwachen können und auf Ereignisse, beispielsweise einen unerwarteten Temperaturanstieg, reagieren können.

Dieser Abschnitt erklärt das Advanced Configuration and Power Interface (ACPI). Beachten Sie, dass Sie das ACPI erst ab FreeBSD 5.X als Kernelmodul zur Verfügung steht. In FreeBSD 4.9 können Sie ACPI aktivieren, indem Sie die nachstehende Zeile in die Kernelkonfigurationsdatei aufnehmen und den Kernel neu übersetzen:

device          acpi

6.15.1. Was ist ACPI?

Advanced Configuration and Power Interface (ACPI) ist ein Standard verschiedener Hersteller, der die Verwaltung von Hardware und Energiesparfunktionen festlegt. Die ACPI-Funktionen können von einem Betriebssystem gesteuert werden. Der Vorgänger des ACPI, ``Advanced Power Management'' (APM), der auch in FreeBSD 4.X verwendet wird, erwies sich in modernen Systemen als unzureichend.


6.15.2. Mängel des Advanced Power Managements (APM)

Das Advanced Power Management (APM) steuert den Energieverbrauch eines Systems auf Basis der Systemaktivität. Das APM-BIOS wird von dem Hersteller des Systems zur Verfügung gestellt und ist auf die spezielle Hardware angepasst. Der APM-Treiber des Betriebssystems greift auf das APM Software Interface zu, das den Energieverbrauch regelt.

Das APM hat hauptsächlich vier Probleme. Erstens läuft die Energieverwaltung unabhängig vom Betriebssystem in einem (herstellerspezifischen) BIOS. Beispielsweise kann das APM-BIOS die Festplatten nach einer konfigurierbaren Zeit ohne die Zustimmung des Betriebssystems herunterfahren. Zweitens befindet sich die ganze APM-Logik im BIOS; das Betriebssystem hat gar keine APM-Komponenten. Bei Problemen mit dem APM-BIOS muss das Flash-ROM aktualisiert werden. Diese Prozedur ist gefährlich, da sie im Fehlerfall das System unbrauchbar machen kann. Zum Dritten ist APM eine Technik, die herstellerspezifisch ist und nicht koordiniert wird. Fehler im BIOS eines Herstellers werden nicht unbedingt im BIOS anderer Hersteller korrigiert. Das letzte Problem ist, dass im APM-BIOS nicht genügend Platz vorhanden ist, um eine durchdachte oder eine auf den Zweck der Maschine zugeschnittene Energieverwaltung zu implementieren.

Das Plug and Play BIOS (PNPBIOS) war ebenfalls unzureichend. Das PNPBIOS verwendet eine 16-Bit-Technik. Damit das Betriebssystem das PNPBIOS ansprechen kann, muss es in einer 16-Bit-Emulation laufen.

Der APM-Treiber von FreeBSD ist in der Hilfeseite apm(4) beschrieben.


6.15.3. Konfiguration des ACPI

Das Modul acpi.ko wird standardmäß beim Systemstart vom loader(8) geladen und sollte daher nicht fest in den Kernel eingebunden werden. Dadurch kann acpi.ko ohne einen Neubau des Kernels ersetzt werden und das Modul ist leichter zu testen. Wenn Sie in der Ausgabe von dmesg(8) das Wort ACPI sehen, ist das Modul geladen worden. Es ist nicht sinnvoll, das Modul im laufenden Betrieb zu laden, dies kann sogar manchmal fatale Folgen haben. Das Modul kann im laufenden Betrieb nicht entfernt werden, da es zur Kommunikation mit der Hardware verwendet wird. Mit acpiconf(8) können Sie das ACPI konfigurieren (unter anderem können Sie damit auch die Energieverwaltung deaktivieren).

Anmerkung: ACPI und APM können nicht zusammen verwendet werden. Das zuletzt geladene Modul beendet sich, sobald es bemerkt, dass das andere Modul geladen ist.

Mit acpiconf(8) können Sie das System in einen Ruhemodus (sleep mode) versetzen. Es gibt verschiedene Modi (von 1 bis 5), die Sie auf der Kommandozeile mit -s angeben können. Für die meisten Anwender ist der Modus 1 völlig ausreichend. Der Modus 5 schaltet das System aus (Soft-off) und entspricht dem Ausführen des folgenden Befehls:

# halt -p

Weitere Informationen entnehmen Sie bitte der Hilfeseite acpiconf(8).


6.15.4. Fehlersuche und ACPI ausschalten

Meist werden Sie erst etwas von ACPI merken, wenn etwas nicht funktioniert. Der acpi(4)-Treiber besitzt viele Optionen zur Fehlersuche. Es ist sogar möglich, einzelne Teile des ACPI-Systems auszuschalten. Weitere Informationen zur Fehlersuche erhalten Sie in der Hilfeseite acpi(4).

Manchmal muss das acpi.ko-Modul entfernt werden. Dies ist nur mit dem loader(8) während des Systemstarts möglich. An der Eingabeaufforderung von loader(8) können Sie das Modul mit dem Befehl unset acpi_load entfernen. Wenn Sie den Befehl nicht bei jedem Start absetzen wollen, können Sie verhindern, dass der acpi(4)-Treiber überhaupt geladen wird. Dazu fügen Sie die folgende Zeile in /boot/loader.conf ein:

exec="unset acpi_load"

Ab FreeBSD 5.1-RELEASE gibt es ein Boot-Menü, das den Bootvorgang von FreeBSD steuert. Darin kann ACPI abgestellt werden: Wählen Sie dazu einfach die Option 2. Boot FreeBSD with ACPI disabled aus.


Kapitel 7. FreeBSDs Bootvorgang

Übersetzt von Hans-Christian Ebke.

7.1. Übersicht

Das Starten des Computers und das Laden des Betriebssystems wird im Allgemeinen als ``Bootstrap Vorgang'' bezeichnet, oder einfach als ``Booten''. FreeBSDs Bootvorgang ermöglicht große Flexibilitä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 gewählt werden.

Dieses Kapitel zeigt die zur Verfügung stehenden Konfigurationsmöglichkeiten und wie man den Bootvorgang anpasst. Dies schließt alles ein, bis der Kernel gestartet worden ist, der dann alle Geräte gefunden hat und init(8) gestartet hat. Falls Sie sich nicht ganz sicher sind, wann dies passiert: Es passiert, wenn die Farbe des Textes während des Bootvorgangs von weiß zu Hellgrau wechselt.

Dieses Kapitel informiert über folgende Punkte:

  • Die Komponenten des FreeBSD Bootstraps und deren Interaktion.

  • Die Optionen, mit denen Sie den FreeBSD Bootvorgang steuern können.

  • Wie Geräte mit device.hints(5) konfiguriert werden.

nur x86: Dieses Kapitel erklärt den Bootvorgang von FreeBSD auf Intel X86 Plattformen.


7.2. Das Problem des Bootens

Wenn der Computer eingeschaltet wird und das Betriebssystem gestartet werden soll, entsteht ein interessantes Dilemma, denn der Computer weiß per Definition nicht, wie er irgendetwas tut, bis das Betriebssystem gestartet wurde. Das schließt das Starten von Programmen, die sich auf der Festplatte befinden, ein. Wenn nun der Computer kein Programm von der Festplatte starten kann, sich das Betriebssystem aber dummerweise genau dort befindet, wie wird es dann gestartet?

Dieses Problem ähnelt einer Geschichte des Barons von Mü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 und wurde hinterher mit booten abgekürzt.

Auf x86 Plattformen ist das BIOS (Basic Input/Output System) dafür verantwortlich, das Betriebssystem zu laden. Dazu liest das BIOS den Master Bootsektor (MBR; Master Boot Record) aus, der sich an einer bestimmten Stelle auf der Festplatte/Diskette befinden muss. Das BIOS kann den MBR selbstständig laden und ausführen und geht davon aus, dass der die restlichen Dinge, die für das Laden des Betriebssystems notwendig sind, selber erledigen kann.

Falls nur ein Betriebssystem installiert ist, ist der Standard MBR ausreichend. Dieser MBR sucht nach dem ersten bootbaren Slice auf dem Laufwerk und führt ihn aus, um das restliche Betriebssystem zu laden.

Falls mehrere Betriebssysteme installiert sind, sollte man einen anderen MBR installieren, der eine Liste der verfügbaren Betriebssysteme anzeigt und einen wählen lässt, welches man booten möchte. FreeBSD liegt ein solcher MBR bei und andere Hersteller bieten Alternativen an.

Das restliche FreeBSD Bootstrap System ist in drei Phasen unterteilt. Die erste Phase wird vom MBR durchgeführt, der gerade genug Funktionalität besitzt um den Computer in einen bestimmten Status zu verhelfen und die zweite Phase zu starten. Die zweite Phase führt ein wenig mehr Operationen durch und startet schließlich die dritte Phase, die das Laden des Betriebssystems abschließt. Der ganze Prozess wird in drei Phasen durchgeführt, weil der PC Standard die Größe der Programme, die in Phase eins und zwei ausgeführt werden, limitiert. Durch das Verketten der durchzuführenden Aufgaben wird es FreeBSD möglich, ein sehr flexibles Ladeprogramm zu besitzen.

Als nächstes wird der Kernel gestartet, der zunächst nach Geräten sucht und sie für den Gebrauch initialisiert. Nach dem Booten des Kernels ü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 für die Kommunikation mit dem Netzwerk bereit und startet generell alle Prozesse, die auf einem FreeBSD System normalerweise beim Hochfahren gestartet werden.


7.3. Der MBR, und die Boot-Phasen Eins, Zwei und Drei

7.3.1. Der MBR, /boot/boot0

Eine Kopie des Master Boot Records (MBR) von FreeBSD befindet sich in /boot/boot0. Der richtige MBR wird in einem nicht benutzbaren Teil des Laufwerks gespeichert.

boot0 ist ein ziemlich simples Programm, und zwar aus dem einfachen Grund, dass der MBR nur 512 Bytes groß sein darf. Falls Sie den FreeBSD MBR installiert haben und sich mehrere Betriebssysteme auf Ihrer Festplatte befinden, werden Sie beim Starten des Computers eine Anzeige sehen, ähnlich der Folgenden:

Beispiel 7-1. boot0 Screenshot

F1 DOS
F2 FreeBSD
F3 Linux
F4 ??
F5 Drive 1

Default: F2

Diverse Betriebssysteme, insbesondere Windows 95 und Nachfolger, überschreiben den MBR ungefragt mit ihrem eigenen. Falls einem dies passiert sein sollte, kann man mit folgendem Kommando den momentanen MBR durch den FreeBSD MBR ersetzen:

# fdisk -B -b /boot/boot0 Gerät

Wobei Gerät das Gerät ist, von dem gebootet wird, also z.B. ad0 für die erste IDE Festplatte, ad2 für die erste IDE Festplatte am zweiten IDE Controller, da0 für die erste SCSI Festplatte, usw.

Wenn Sie auf demselben Rechner FreeBSD und Linux benutzen möchten, können Sie den FreeBSD Boot-Manager oder LILO benutzen. Wollen Sie den MBR von LILO benutzen, wählen Sie bei der FreeBSD Installation im Boot Manager Menü Leave The Master Boot Record Untouched aus. Damit Sie das FreeBSD System aus LILO booten können, tragen Sie in /etc/lilo.conf die folgenden Zeilen Zeilen ein:

other=/dev/diskXY
table=/dev/diskX
loader=/boot/chain.b
label=FreeBSD

Ersetzen Sie dabei diskXY mit hdXY, wenn Sie ein IDE-Laufwerk benutzen, oder mit sdXY, wenn Sie ein SCSI-Laufwerk benutzen. Mit XY geben Sie die Slice des FreeBSD Systems, zum Beispiel /dev/hdb1, an. Wenn sich beide Betriebssysteme auf derselben Platte befinden, können Sie loader=/boot/chain.b auch weglassen. Mit table geben Sie das Gerät an, auf dem die Partitionstabelle liegt, /dev/hdb bezeichnet zum Beispiel das zweite IDE-Laufwerk. Die Änderungen können Sie nun mit /sbin/lilo -v aktivieren. Achten Sie dabei auf die Bildschirmausgabe, die den Erfolg der Operation anzeigt.


7.3.2. Phase Eins, /boot/boot1 und Phase Zwei, /boot/boot2

Im Prinzip sind die erste und die zweite Phase Teile desselben Programms, im selben Bereich auf der Festplatte. Aufgrund von Speicherplatz-Beschränkungen wurden sie aufgeteilt, aber man installiert sie eigentlich generell zusammen.

Sie befinden sich beide im Bootsektor des Boot-Slices, wo boot0 und jedes andere Programm im MBR das Programm erwartet, das den weiteren Bootvorgang durchführt. Die Dateien im Verzeichnis /boot sind nur Kopien der eigentlichen Dateien, die sich außerhalb FreeBSDs Dateisystems befinden.

boot1 ist ebenfalls ein sehr simples Programm, da es auch nur 512 Bytes groß sein darf, und es besitzt gerade genug Funktionalität um FreeBSDs disklabel, das Informationen über den Slice enthält, auszulesen um boot2 zu finden und auszuführen.

boot2 ist schon ein wenig umfangreicher und besitzt genügend Funktionalität um Dateien in FreeBSDs Dateisystem zu finden. Außerdem hat es eine einfache Schnittstelle, die es ermöglicht, den zu ladenden Kernel oder Loader auszuwählen.

Da der Loader einen weitaus größeren Funktionsumfang hat und eine schöne und einfach zu bedienende Boot-Konfigurations-Schnittstelle zur Verfügung stellt, wird er gewöhnlich von boot2 anstatt des Kernels gestartet. Früher war es jedoch dazu da den Kernel direkt zu starten.

Beispiel 7-2. boot2 Screenshot

>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/kernel
boot:

Um das installierte boot1 und boot2 zu ersetzen, benutzt man disklabel(8):

# disklabel -B Slice

Wobei Slice das Laufwerk und die Slice darstellt, von dem gebootet wird, beispielsweise ad0s1 für die erste Slice auf der ersten IDE Festplatte.

Dangerously Dedicated Mode: Wenn man nur den Festplatten-Namen, also z.B. ad0, in disklabel(8) benutzt wird eine "dangerously dedicated disk" erstellt, ohne Slices. Das ist ein Zustand, den man meistens nicht hervorrufen möchte. Aus diesem Grund sollte man ein disklabel(8) Kommando noch einmal prüfen, bevor man Return betätigt.


7.3.3. Phase drei, /boot/loader

Der boot-loader ist der letzte von drei Schritten im Bootstrap Prozess und kann im Dateisystem normalerweise unter /boot/loader gefunden werden.

Der Loader soll eine benutzerfreundliche Konfigurations-Schnittstelle sein mit einem einfach zu bedienenden eingebauten Befehlssatz, ergänzt durch einen umfangreichen Interpreter mit einem komplexeren Befehlssatz.


7.3.3.1. Loader Ablauf

Der Loader sucht wä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 die Datei /boot/loader.rc aus, welche ihn standardmäßig anweist /boot/defaults/loader.conf zu lesen, wo sinnvolle Standardeinstellungen für diverse Variablen festgelegt werden und wiederum /boot/loader.conf für lokale Änderungen an diesen Variablen ausgelesen wird. Anschließend arbeitet dann loader.rc entsprechend dieser Variablen und lädt die ausgewählten Module und den gewünschten Kernel.

In der Voreinstellung wartet der Loader 10 Sekunden lang auf eine Tastatureingabe und bootet den Kernel, falls keine Taste betätigt wurde. Falls doch eine Taste betätigt wurde wird dem Benutzer eine Eingabeaufforderung angezeigt. Sie nimmt einen einfach zu bedienenden Befehlssatz entgegen, der es dem Benutzer erlaubt, Änderungen an Variablen vorzunehmen, Module zu laden, alle Module zu entladen oder schließlich zu booten bzw. neu zu booten.


7.3.3.2. Die eingebauten Befehle des Loaders

Hier werden nur die gebräuchlichsten Befehle bearbeitet. Für eine erschöpfende Diskussion aller verfügbaren Befehle konsultieren Sie bitte loader(8).

autoboot Sekunden

Es wird mit dem Booten des Kernels fortgefahren, falls keine Taste in der gegebenen Zeitspanne betätigt wurde. In der gegebenen Zeitspanne, Vorgabe sind 10 Sekunden, wird ein Countdown angezeigt.

boot [-options] [Kernelname]

Bewirkt das sofortige Booten des Kernels mit den gegebenen Optionen, falls welche angegeben wurden, und mit den angegebenen Kernel, falls denn einer angegeben wurde.

boot-conf

Bewirkt die automatische Konfiguration der Module, abhängig von den entsprechenden Variablen. Dieser Vorgang ist identisch zu dem Vorgang, den der Bootloader ausführt und daher nur sinnvoll, wenn zuvor unload benutzt wurde und Variablen (gewöhnlich kernel) verändert wurden.

help [Thema]

Zeigt die Hilfe an, die zuvor aus der Datei /boot/loader.help gelesen wird. Falls index als Thema angegeben wird, wird die Liste der zur Verfügung stehenden Hilfe-Themen angezeigt.

include Dateiname ...

Verarbeitet die angegebene Datei. Das Einlesen und Interpretieren geschieht Zeile für Zeile und wird im Falle eines Fehlers umgehend unterbrochen.

load [-t Typ] Dateiname

Lädt den Kernel, das Kernel-Modul, oder die Datei des angegebenen Typs. Optionen, die auf den Dateinamen folgen, werden der Datei übergeben.

ls [-l] [Pfad]

Listet die Dateien im angegebenen Pfad auf, oder das root-Verzeichnis(/), falls kein Pfad angegeben wurde. Die Option -l bewirkt, dass die Dateigrössen ebenfalls angezeigt werden.

lsdev [-v]

Listet alle Geräte auf, für die Module geladen werden können. Die Option -v bewirkt eine detailreichere Ausgabe.

lsmod [-v]

Listet alle geladenen Module auf. Die Option -v bewirkt eine detailreichere 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 Variable=Wert

Setzt die Umgebungsvariablen des Loaders.

unload

Entlädt sämtliche geladenen Module.


7.3.3.3. Beispiele für die Loader Bedienung

Hier ein paar praktische Beispiele für die Bedienung des Loaders.

  • Um den gewöhnlichen Kernel im Single-User Modus zu starten:

    boot -s
    
  • Um alle gewöhnlichen Kernelmodule zu entladen und dann nur den alten (oder jeden beliebigen anderen) Kernel zu laden:

    unload
    load kernel.old
    

    Es kann kernel.GENERIC verwendet werden, um den allgemeinen, Kernel zu bezeichnen, der vorinstalliert wird. kernel.old bezeichnet den Kernel, der vor dem aktuellen installiert war (falls man einen neuen Kernel compiliert und installiert hat, zum Beispiel).

    Anmerkung: Der folgende Befehl lädt die gewöhnlichen Module mit einem anderen Kernel:

    unload
    set kernel="kernel.old"
    boot-conf
    
  • Folgendes lädt ein Kernelkonfigurations-Skript (ein automatisiertes Skript, dass dasselbe tut, was der Benutzer normalerweise von Hand an der Eingabeaufforderung durchführen würde):

    load -t userconfig_script /boot/kernel.conf
    

7.4. Kernel Interaktion während des Bootprozesses

Wenn der Kernel einmal geladen ist, entweder durch den Loader (die Standardmethode) oder durch boot2 (den Loader umgehend), verhält sich gemäß seiner Boot-Flags, falls es welche gibt.


7.4.1. Kernel Boot-Flags

Es folgt eine Auflistung der gebräuchlichsten Boot-Flags:

-a

Bewirkt, dass der Benutzer während der Kernel-Initialisierung gefragt wird, welches Gerät als Root-Dateisystem gemounted werden soll.

-C

Es wird von CD-ROM gebootet.

-c

UserConfig, das Boot-Zeit Konfigurationsprogramm, wird gestartet.

-s

Bewirkt den Start des Single-User Modus.

-v

Zeigt mehr Informationen während des Starten des Kernels an.

Anmerkung: Andere Boot-Flags sind in der Hilfeseite boot(8) erläutert.


7.5. Konfiguration von Geräten

Beigetragen von Tom Rhodes.

Anmerkung: Diese Funktion steht erst ab FreeBSD 5.0 zur Verfügung.

Der Boot-Loader liest während des Systemstarts die Datei device.hints(5), die Variablen, auch ``device hints'' genannt, zur Konfiguration von Geräten enthält.

Die Variablen können auch mit Kommandos in der Phase 3 des Boot-Loaders bearbeitet werden. Neue Variablen werden mit set gesetzt, unset löscht schon definierte Variablen und show zeigt Variablen an. Variablen aus /boot/device.hints können zu diesem Zeitpunkt überschrieben werden. Die hier durchgeführten Änderungen sind nicht permanent und beim nächsten Systemstart nicht mehr gültig.

Nach dem Systemstart können alle Variablen mit kenv(1) angezeigt werden.

Pro Zeile enthält /boot/device.hints eine Variable. Kommentare werden, wie üblich, 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 Gerätetreiber wird mit driver, die Nummer des Geräts mit unit angegeben. keyword ist eine Option aus der folgenden Liste:

  • at: Gibt den Bus, auf dem sich das Gerä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 Geräts.

  • flags: Setzt verschiedene gerätespezifische Optionen.

  • disabled: Deaktiviert das Gerät, wenn der Wert auf 1 gesetzt wird.

Ein Gerätetreiber kann mehr Optionen, als die hier beschriebenen, besitzen oder benötigen. Schlagen Sie die Optionen bitte in der Online-Hilfe des Treibers nach. Weitere Informationen erhalten Sie in device.hints(5), kenv(1), loader.conf(5) und loader(8).


7.6. Init: Initialisierung der Prozess-Kontrolle

Nachdem der Kernel den Bootprozess abgeschlossen hat, ü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.


7.6.1. Der automatische Reboot-Vorgang

Der automatische Reboot-Vorgang stellt sicher, dass alle Dateisysteme des Systems konsistent sind. Falls dies nicht der Fall ist und die Inkonsistenz nicht durch fsck(8) behebbar ist, schaltet init(8) das System in den Single-User Modus, damit der Systemadministrator sich des Problems annehmen kann.


7.6.2. Der Single-User Modus

Das Schalten in diesen Modus kann erreicht werden durch den automatischen Reboot-Vorgang, durch das Booten mit der Option -s oder das Setzen der boot_single Variable in Loader.

Weiterhin kann der Single-User Modus aus dem Mehrbenutzer Modus heraus durch den Befehl shutdown(8) ohne die reboot (-r) oder halt (-h) Option erreicht werden.

Falls die System-Konsole (console) in /etc/ttys auf insecure (dt.: unsicher) gesetzt ist, fordert das System allerdings zur Eingabe des Passworts von root auf, bevor es den Single-User Modus aktiviert.

Beispiel 7-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

Anmerkung: 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 können. Es bedeutet nicht, dass die Konsole "unsicher" laufen wird. Daher sollte man insecure wählen, wenn man auf Sicherheit bedacht ist, nicht secure.


7.6.3. Mehrbenutzer Modus

Stellt init(8) fest, dass das Dateisystem in Ordnung ist, oder der Benutzer den Single-User Modus beendet, schaltet das System in den Mehrbenutzer Modus, in dem dann die Ressourcen Konfiguration des Systems gestartet wird.


7.6.3.1. Ressourcen Konfiguration, rc-Dateien

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 gemäß /etc/fstab, startet die Netzwerkdienste, diverse System Daemons und führt schließlich die Start-Skripten der lokal installierten Anwendungen aus.

Die rc(8) Handbuch Seite ist eine gute Quelle für Informationen über das Ressourcen Konfigurationssystem und ebenso über die Skripte an sich.


7.7. Der Shutdown Vorgang

Im Falle eines regulären Herunterfahrens durch shutdown(8) führt init(8) /etc/rc.shutdown aus, sendet dann sämtlichen Prozessen ein TERM Signal und schließlich ein KILL Signal an alle Prozesse, die sich nicht schnell genug beendet haben.

FreeBSD Systeme, die Energieverwaltungsfunktionen unterstützen, können Sie mit dem Kommando shutdown -p now ausschalten. Zum Neustart des Systems benutzen Sie shutdown -r now. Das Kommando shutdown(8) kann nur von root oder Mitgliedern der Gruppe operator benutzt werden. Sie können auch die Kommandos halt(8) und reboot(8) verwenden. Weitere Informationen finden Sie in den Hilfeseiten der drei Kommandos.

Anmerkung: Mit FreeBSD 5.0 müssen Sie die acpi(4)-Unterstützung im Kernel aktivieren oder das Modul geladen haben, damit Sie die Energieverwaltungsfunktionen benutzen können. Mit FreeBSD 4.0 benötigen Sie die apm(4)-Unterstützung.


Kapitel 8. Benutzer und grundlegende Account-Verwaltung

Beigetragen von Neil Blakey-Milner. Übersetzt von Robert Drehmel.

8.1. Übersicht

Einen FreeBSD Computer können mehrere Benutzer zur selben Zeit benutzen, allerdings kann immer nur einer vor der Konsole sitzen [5], über das Netzwerk können beliebig viele Benutzer angemeldet sein. Jeder Benutzer muss einen Account haben, um das System benutzen zu können.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie

  • die verschiedenen Account-Typen von FreeBSD kennen,

  • wissen, wie Accounts angelegt werden,

  • wissen, wie Sie Accounts löschen,

  • wie Sie Attribute eines Accounts, wie den Loginnamen oder die Login-Shell ändern,

  • wissen, wie Sie Limits für einen Account setzen, um beispielsweise Ressourcen, wie Speicher oder CPU-Zeit, einzuschränken,

  • wie Sie mit Gruppen die Verwaltung der Accounts vereinfachen.

Vor dem Lesen dieses Kapitels sollten Sie

  • die Grundlagen von UNIX und FreeBSD (Kapitel 3) verstanden haben.


8.2. Einführung

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

Mit jedem Account eines FreeBSD Systems sind bestimmte Informationen verknüpft, die diesen Account identifizieren.

Loginnamen

Den Loginnamen geben Sie bei der Anmeldung ein, wenn Sie dazu mit login: aufgefordert werden. Loginnamen müssen auf dem System eindeutig sein, das heißt auf einem System kann es nicht zwei Accounts mit demselben Loginnamen geben. In passwd(5) wird beschrieben, wie ein gültiger Loginname gebildet wird. Normalerweise sollten Sie Namen verwenden, die aus Kleinbuchstaben bestehen und bis zu acht Zeichen lang sind.

Passwort

Mit jedem Account ist ein Passwort verknüpft. Wenn das Passwort leer ist, wird es bei der Anmeldung nicht abgefragt. Das ist allerdings nicht zu empfehlen, daher sollte jeder Account ein Passwort besitzen.

User ID (UID)

Die UID ist eine Zahl zwischen 0 und 65536, die einen Account eindeutig identifiziert. Intern verwendet FreeBSD nur die UID, Loginnamen werden zuerst in eine UID umgewandelt, mit der das System dann weiter arbeitet. Das bedeutet, dass Sie Accounts mit unterschiedlichen Loginnamen aber gleicher UID einrichten können. Vom Standpunkt des Systems handelt es sich dabei um denselben Account. In der Praxis werden Sie diese Eigenschaft des Systems wahrscheinlich nicht benutzen.

Group ID (GID)

Die GID ist eine Zahl zwischen 0 und 65536, die eine Gruppe eindeutig identifiziert. Mit Gruppen kann der Zugriff auf Ressourcen über die GID anstelle der UID geregelt werden. Einige Konfigurationsdateien werden durch diesen Mechanismus deutlich kleiner. Ein Account kann mehreren Gruppen zugehören.

Login-Klasse

Login-Klassen erweitern das Gruppenkonzept. Sie erhöhen die Flexibilität des Systems in der Handhabung der verschiedenen Accounts.

Gültigkeit von Passwörtern

Ein regelmäßiges Ändern des Passworts wird in der Voreinstellung von FreeBSD nicht erzwungen. Sie können allerdings einen Passwortwechsel nach einer gewissen Zeit auf Basis einzelner Accounts erzwingen.

Verfallszeit eines Accounts

In der Voreinstellung verfallen unter FreeBSD keine Accounts. Wenn Sie Accounts einrichten, die nur für eine bestimmte Zeit gültig sein sollen, beispielsweise Accounts für Teilnehmer eines Praktikums, können Sie angeben, wie lange der Account gültig sein soll. Nachdem die angegebene Zeitspanne verstrichen ist, kann dieser Account nicht mehr zum Anmelden verwendet werden, obwohl alle Verzeichnisse und Dateien, die diesem Account gehören, noch vorhanden sind.

vollständiger Benutzername

FreeBSD identifiziert einen Account eindeutig über den Loginnamen, der aber keine Ähnlichkeit mit dem richtigen Namen des Benutzers haben muss. Der vollständige Benutzername kann daher beim Einrichten eines Accounts angegeben werden.

Heimatverzeichnis

Das Heimatverzeichnis gibt den vollständigen Pfad zu dem Verzeichnis an, in dem sich der Benutzer nach erfolgreicher Anmeldung befindet. Es ist ü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

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

Es gibt drei Haupttypen von Accounts: Der Superuser, Systembenutzer und Benutzer-Accounts. Der Superuser-Account, normalerweise root genannt, wird benutzt, um das System ohne Beschränkungen auf Privilegien zu verwalten. Systembenutzer starten Dienste. Abschließend werden Benutzer-Accounts von echten Menschen genutzt, die sich einloggen, Mails lesen und so weiter.


8.3. Der Superuser-Account

Der Superuser-Account, normalerweise root genannt, ist vorkonfiguriert und erleichtert die Systemverwaltung, sollte aber nicht für alltägliche Aufgaben wie das Verschicken und Empfangen von Mails, Entdecken des Systems oder Programmierung benutzt werden.

Das ist so, da der Superuser im Gegensatz zu normalen Benutzer-Accounts ohne Beschränkungen operiert und falsche Anwendung des Superuser-Accounts in spektakulären Katastrophen resultieren kann. Benutzer-Accounts sind nicht in der Lage, das System versehentlich zu zerstören, deswegen ist es generell am besten normale Benutzer-Accounts zu verwenden, solange man nicht hauptsächlich die extra Privilegien benötigt.

Kommandos, die Sie als Superuser eingeben, sollten Sie immer doppelt und dreifach überprüfen, da ein zusätzliches Leerzeichen oder ein fehlender Buchstabe irreparablen Datenverlust bedeuten kann.

Das erste, das Sie tun sollten, nachdem Sie dieses Kapitel gelesen haben, ist einen unprivilegierten Benutzer für Ihre eigene normale Benutzung zu erstellen, wenn Sie das nicht bereits getan haben. Das trifft immer zu, egal ob Sie ein Mehrbenutzersystem oder ein System laufen haben, welches Sie alleine benutzen. Später in diesem Kapitel besprechen wir, wie man zusätzliche Accounts erstellt und wie man zwischen dem normalen Benutzer und dem Superuser wechselt.


8.4. System-Accounts

Systembenutzer starten Dienste wie DNS, Mail-Server, Web-Server und so weiter. Der Grund dafür ist die Sicherheit; wenn die Programme von dem Superuser gestartet werden, können Sie ohne Einschränkungen handeln.

Beispiele von Systembenutzern sind daemon, operator, bind (für den Domain Name Service) und news. Oft erstellen Systemadministratoren den Benutzer httpd, um Web-Server laufen zu lassen, die sie installieren.

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


8.5. Benutzer-Accounts

Benutzer-Account sind das primäre Mittel des Zugriffs für echte Menschen auf das System und isolieren Benutzer und Umgebung, schützen die Benutzer davor, das System oder Daten anderer Benutzer zu beschädigen und erlauben Benutzern ihre Umgebung selbst einzurichten, ohne das sich dies auf andere auswirkt.

Jede Person, die auf Ihr System zugreift, sollte ihren eigenen Account besitzen. Das erlaubt Ihnen herauszufinden, wer was macht und hält Leute davon ab, die Einstellungen der anderen zu verändern oder Mails zu lesen, die nicht für sie bestimmt waren.

Jeder Benutzer kann sich eine eigene Umgebung mit alternativen Shells, Editoren, Tastaturbelegungen und Sprachen einrichten.


8.6. Accounts verändern

Unter UNIX gibt es verschiedene Kommandos, um Accounts zu verändern. Die gebräuchlichsten Kommandos sind unten, gefolgt von einer detaillierten Beschreibung, zusammengefasst.

Kommando Zusammenfassung
adduser(8) Das empfohlene Werkzeug, um neue Accounts zu erstellen.
rmuser(8) Das empfohlene Werkzeug, um Accounts zu löschen.
chpass(1) Ein flexibles Werkzeug, um Informationen in der Account-Datenbank zu verändern.
passwd(1) Ein einfaches Werkzeug, um Passwörter von Accounts zu ändern.
pw(8) Ein mächtiges und flexibles Werkzeug um alle Informationen über Accounts zu ändern.

8.6.1. adduser

adduser(8) ist ein einfaches Programm um neue Benutzer hinzuzufügen. Es erstellt passwd und group Einträge für den Benutzer, genauso wie ein home Verzeichnis, kopiert ein paar vorgegebene Dotfiles aus /usr/share/skel und kann optional dem Benutzer eine ,,Willkommen``-Nachricht zuschicken.

Um die anfängliche Konfigurationsdatei zu erstellen, benutzen Sie: adduser -s -config_create. [6] Zunächst konfigurieren wir Voreinstellungen von adduser(8) und erstellen unseren ersten Benutzer-Account, da es böse und unangenehm ist, root für normale Aufgaben zu verwenden.

Beispiel 8-1. adduser konfigurieren

# adduser -v
Use option ``-silent'' if you don't want to see all warnings and questions.
Check /etc/shells
Check /etc/master.passwd
Check /etc/group
Enter your default shell: csh date no sh tcsh zsh [sh]: zsh
Your default shell is: zsh -> /usr/local/bin/zsh
Enter your default HOME partition: [/home]:
Copy dotfiles from: /usr/share/skel no [/usr/share/skel]:
Send message from file: /etc/adduser.message no
[/etc/adduser.message]: no
Do not send message
Use passwords (y/n) [y]: y

Write your changes to /etc/adduser.conf? (y/n) [n]: y

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username [a-z0-9_-]: jru
Enter full name []: J. Random User
Enter shell csh date no sh tcsh zsh [zsh]:
Enter home directory (full path) [/home/jru]:
Uid [1001]:
Enter login class: default []:
Login group jru [jru]:
Login group is ``jru''. Invite jru into other groups: guest no
[no]: wheel
Enter password []:
Enter password again []:

Name:     jru
Password: ****
Fullname: J. Random User
Uid:      1001
Gid:      1001 (jru)
Class:
Groups:   jru wheel
HOME:     /home/jru
Shell:    /usr/local/bin/zsh
OK? (y/n) [y]: y
Added user ``jru''
Copy files from /usr/share/skel to /home/jru
Add another user? (y/n) [y]: n
Goodbye!
#

Zusammengefasst haben wir die vorgegebene Shell in zsh (eine zusätzliche Shell aus der Ports-Sammlung) geändert und das Senden einer ,,Willkommen``-Nachricht an neue Benutzer abgeschaltet. Danach haben wir die Konfiguration abgespeichert und anschließend einen Account für jru eingerichtet und sichergestellt, dass jru in der Gruppe wheel ist, so dass Sie mit su(1) zu root wechseln kann.

Anmerkung: Wenn Sie das Passwort eingeben, werden weder Passwort noch Sternchen angezeigt. Passen Sie auf, dass Sie das Passwort nicht zweimal falsch eingeben.

Anmerkung: Benutzen Sie ab jetzt adduser(8) ohne Argumente, dann müssen Sie nicht jedes mal die Vorgaben neu einstellen. Wenn das Programm Sie fragt, ob Sie die Vorgaben ändern wollen, verlassen und starten Sie es erneut mit der -s Option.


8.6.2. rmuser

Benutzen Sie rmuser(8), um einen Account vollständig aus dem System zu entfernen. rmuser(8) fü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 gehören.

  3. Schließt alle Prozesse des Benutzers.

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

  5. Entfernt das Heimatverzeichnis des Benutzers (falls es dem Benutzer gehört).

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

  7. Entfernt alle Dateien des Benutzers aus temporären Dateispeicherbereichen wie /tmp.

  8. Entfernt den Loginnamen von allen Gruppen, zu denen er gehört, aus /etc/group.

    Anmerkung: Wenn eine Gruppe leer wird und der Gruppenname mit dem Loginnamen identisch ist, wird die Gruppe entfernt; das ergänzt sich mit den einzelnen Benutzer-Gruppen, die von adduser(8) für jeden neuen Benutzer erstellt werden.



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

Als Vorgabe wird ein interaktiver Modus benutzt, der sicherzustellen versucht, dass Sie wissen, was Sie tun.

Beispiel 8-2. Interaktives Löschen von Account 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
Updating password file, updating databases, done.
Updating group file: trusted (removing group jru -- personal group is empty) done.
Removing user's incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done.
Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
#

8.6.3. chpass

chpass(1) ändert Informationen der Benutzerdatenbank wie Passwörter, Shells und persönliche Informationen.

Nur Systemadministratoren, mit Superuser-Rechten, können die Informationen und Passwörter der anderen Benutzer mit chpass(1) verändern.

Werden keine Optionen neben dem optionalen Loginnamen angegeben, zeigt chpass(1) einen Editor mit Account-Informationen an und aktualisiert die Account-Datenbank, wenn dieser Editor beendet wird.

Beispiel 8-3. Interaktives chpass des Superusers

#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:

Der normale Benutzer kann nur einen kleinen Teil dieser Informationen verändern und natürlich nur die Daten des eigenen Accounts.

Beispiel 8-4. Interaktives chpass eines normalen Benutzers

#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: chfn(1) und chsh(1) sind nur Verweise auf chpass(1) genauso wie ypchpass(1), ypchfn(1) und ypchsh(1). NIS wird automatisch unterstützt, deswegen ist es nicht notwendig das yp vor dem Kommando einzugeben. NIS wird später in Kapitel 19 besprochen.


8.6.4. passwd

passwd(1) ist der übliche Weg, Ihr eigenes Passwort als Benutzer zu ändern oder das Passwort eines anderen Benutzers als Superuser.

Anmerkung: Benutzer müssen ihr ursprüngliches Passwort eingeben, bevor sie es wechseln, um eine nicht autorisierte Person davon abzuhalten ihr Passwort zu ändern, wenn der Benutzer gerade nicht an seinem Gerät ist.

Beispiel 8-5. Wechseln des Passworts

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

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

Beispiel 8-6. Als Superuser das Passwort eines anderen Accounts verä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 unterstützt.


8.6.5. pw

pw(8) ist ein Kommandozeilenprogramm, mit dem man Accounts und Gruppen erstellen, entfernen, verändern und anzeigen kann. Dieses Kommando dient als Schnittstelle zu den Benutzer- und Gruppendateien des Systems. pw(8) besitzt eine Reihe mächtiger Kommandozeilenschalter, die es für die Benutzung in Shell-Skripten geeignet machen, doch finden neue Benutzer die Bedienung des Kommandos komplizierter, als die der anderen hier vorgestellten Kommandos.


8.7. Benutzer einschränken

Wenn ein System von mehreren Benutzern verwendet wird, ist es vielleicht notwendig, den Gebrauch des Systems zu beschränken. FreeBSD bietet dem Systemadministrator mehrere Möglichkeiten die System-Ressourcen, die ein einzelner Benutzer verwenden kann, einzuschränken. Diese Limitierungen sind in zwei Kategorien eingeteilt: Festplattenkontingente und andere Ressourcenbeschränkungen.

Festplatten-Kontingente schränken den Plattenplatz, der einem Benutzer zur Verfügung steht, ein. Sie bieten zudem, ohne aufwändige Berechnung, einen schnellen Überblick über den verbrauchten Plattenplatz. Kontingente werden in Abschnitt 12.12 diskutiert.

Die Login-Klassen werden in /etc/login.conf definiert. Auf die präzisen Semantiken gehen wir hier nicht weiter ein, sie können jedoch in login.conf(5) nachgelesen werden. Es ist ausreichend zu sagen, dass jeder Benutzer einer Login-Klasse zugewiesen wird (standardmäßig default) und dass jede Login-Klasse mit einem Satz von Login-Fähigkeiten verbunden ist. Eine Login-Fähigkeit ist ein Name=Wert Paar, in dem Name die Fähigkeit bezeichnet und Wert ein willkürlicher Text ist, der je nach Name entsprechend verarbeitet wird. Login-Klassen und -Fähigkeiten zu definieren ist fast schon selbsterklärend und wird auch in login.conf(5) beschrieben.

Ressourcenbeschränkungen unterscheiden sich von normalen Login-Fähigkeiten zweifach. Erstens gibt es für jede Beschränkung ein aktuelles und ein maximales Limit. Das aktuelle Limit kann vom Benutzer oder einer Anwendung beliebig bis zum maximalen Limit verändert werden. Letzteres kann der Benutzer nur heruntersetzen. Zweitens gelten die meisten Ressourcenbeschränkungen für jeden vom Benutzer gestarteten Prozess, nicht für den Benutzer selbst. Beachten Sie jedoch, dass diese Unterschiede durch das spezifische Einlesen der Limits und nicht durch das System der Login-Fähigkeiten entstehen (das heißt, Ressourcenbeschränkungen sind keine Login-Fähigkeiten).

Hier befinden sich die am häufigsten benutzten Ressourcenbeschränkungen (der Rest kann zusammen mit den anderen Login-Fähigkeiten in login.conf(5) gefunden werden):

coredumpsize

Das Limit der Größe einer core-Datei, die von einem Programm generiert wird, unterliegt aus offensichtlichen Gründen anderen Limits der Festplattenbenutzung (zum Beispiel filesize oder Festplattenkontingenten). Es wird aber trotzdem oft als weniger harte Methode zur Kontrolle des Festplattenplatz-Verbrauchs verwendet: Da Benutzer die core-Dateien nicht selbst erstellen, und sie oft nicht löschen, kann sie diese Option davor retten, dass ihnen kein Festplattenspeicher mehr zur Verfügung steht, sollte ein großes Programm, wie emacs, abstürzen.

cputime

Die maximale Rechenzeit, die ein Prozess eines Benutzers verbrauchen darf. Überschreitet der Prozess diesen Wert, wird er vom Kernel beendet.

Anmerkung: Die Rechenzeit wird limitiert, nicht die prozentuale Prozessorenbenutzung, wie es in einigen Feldern in top(1) und ps(1) dargestellt wird. Letzteres war zu der Zeit, als dies hier geschrieben wurde nicht möglich und würde eher nutzlos sein: Ein Compiler - ein wahrscheinlich legitimer Vorgang - kann leicht fast 100% des Prozessors in Anspruch nehmen.



filesize

Hiermit lässt sich die maximale Größe einer Datei bestimmen, die der Benutzer besitzen darf. Im Gegensatz zu Festplattenkontingenten ist diese Beschränkung nur für jede einzelne Datei gültig und nicht für den Platz, den alle Dateien eines Benutzers verwenden.

maxproc

Das ist die maximale Anzahl von Prozessen, die ein Benutzer starten darf, und beinhaltet sowohl Vordergrund- als auch Hintergrundprozesse. Natürlich darf dieser Wert nicht höher sein als das System-Limit, das in kern.maxproc angegeben ist. Vergessen Sie auch nicht, dass ein zu kleiner Wert den Benutzer in seiner Produktivität einschränken könnte; es ist oft nützlich, mehrfach eingeloggt zu sein, oder Pipelines [7] zu verwenden. Ein paar Aufgaben, wie die Kompilierung eines großen Programms, starten mehrere Prozesse (zum Beispiel make(1), cc(1) und andere).

memorylocked

Dieses Limit gibt an, wie viel virtueller Speicher von einem Prozess maximal im Arbeitsspeicher festgesetzt werden kann. (siehe auch mlock(2)). Ein paar systemkritische Programme, wie amd(8), verhindern damit einen Systemzusammenbruch, der auftreten könnte, wenn sie aus dem Speicher genommen werden.

memoryuse

Bezeichnet den maximalen Speicher, den ein Prozess benutzen darf und beinhaltet sowohl Arbeitsspeicher-, als auch Swap- Benutzung. Es ist kein allübergreifendes Limit für den Speicherverbrauch, aber ein guter Anfang.

openfiles

Mit diesem Limit lässt sich die maximale Anzahl der von einem Prozess des Benutzers geöffneten Dateien festlegen. In FreeBSD werden Dateien auch verwendet, um Sockets und IPC-Kanäle [8] darzustellen. Setzen Sie es deshalb nicht zu niedrig. Das System-Limit ist im kern.maxfiles sysctl(8) definiert.

sbsize

Dieses Limit beschränkt den Netzwerk-Speicher, und damit die mbufs, die ein Benutzer verbrauchen darf. Es stammt aus einer Antwort auf einen DoS-Angriff, bei dem viele Netzwerk-Sockets geöffnet wurden, kann aber generell dazu benutzt werden Netzwerk-Verbindungen zu beschränken.

stacksize

Das ist die maximale Größe, auf die der Stack eines Prozesses heranwachsen darf. Das allein ist natürlich nicht genug, um den Speicher zu beschränken, den ein Programm verwenden darf. Es sollte deshalb in Verbindung mit anderen Limits gesetzt werden.

Beim Setzen von Ressourcenbeschränkungen sind noch andere Dinge zu beachten. Nachfolgend ein paar generelle Tipps, Empfehlungen und verschiedene Kommentare.

  • Von /etc/rc beim Hochfahren des Systems gestartete Prozesse werden der daemon Login-Klasse zugewiesen.

  • Obwohl das mitgelieferte /etc/login.conf eine Quelle von vernünftigen Limits darstellt, können nur Sie, der Administrator, wissen, was für Ihr System angebracht ist. Ein Limit zu hoch anzusetzen könnte Ihr System für Missbrauch öffnen, und ein zu niedriges Limit der Produktivität einen Riegel vorschieben.

  • Benutzer des X-Window Systems (X11) sollten wahrscheinlich mehr Ressourcen zugeteilt bekommen als andere Benutzer. X11 beansprucht selbst schon eine Menge Ressourcen, verleitet die Benutzer aber auch, mehrere Programme gleichzeitig laufen zu lassen.

  • Bedenken Sie, dass viele Limits für einzelne Prozesse gelten und nicht für den Benutzer selbst. Setzt man zum Beispiel openfiles auf 50, kann jeder Prozess des Benutzers bis zu 50 Dateien öffnen. Dadurch ist die maximale Anzahl von Dateien, die von einem Benutzer geöffnet werden können, openfiles mal maxproc. Das gilt auch für den Speicherverbrauch.

Weitere Informationen über Ressourcenbeschränkungen, Login-Klassen und -Fähigkeiten enthalten die Hilfeseiten cap_mkdb(1), getrlimit(2) und login.conf(5).


8.8. Benutzer personalisieren

Die Lokalisierung ist eine Umgebung, die vom Systemadministrator oder Benutzer eingerichtet wird, um verschiedene Sprachen, Zeichensätze, Datum- und Zeitstandards und so weiter unterzubringen. Dies wird im Kapitel über die Lokalisierung besprochen.


8.9. Gruppen

Eine Gruppe ist einfach eine Zusammenfassung von Accounts. Gruppen werden durch den Gruppennamen und die GID (group ID) identifiziert. Der Kernel von FreeBSD (und den meisten anderen UNIX Systemen) entscheidet anhand der UID und der Gruppenmitgliedschaft eines Prozesses, ob er dem Prozess etwas erlaubt oder nicht. Im Unterschied zur UID kann ein Prozess zu einer Reihe von Gruppen gehören. 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 enthält ein verschlüsseltes Passwort, das dritte gibt die GID an und das vierte besteht aus einer Komma separierten Liste der Mitglieder der Gruppe. Diese Datei kann einfach editiert werden (natürlich nur, wenn Sie dabei keine Syntaxfehler machen). Eine ausführliche Beschreibung der Syntax dieser Datei finden Sie in group(5).

Wenn Sie /etc/group nicht händisch editieren möchten, können Sie pw(8) zum Editieren benutzen. Das folgende Beispiel zeigt das Hinzufügen einer Gruppe mit dem Namen teamtwo:

Beispiel 8-7. Hinzufügen einer Gruppe mit pw

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

Die Zahl 1100 ist die GID der Gruppe teamtwo. Momentan hat teamtwo noch keine Mitglieder und ist daher ziemlich nutzlos. Um das zu ändern, nehmen wir nun jru in teamtwo auf.

Beispiel 8-8. Ein Gruppenmitglied mit pw hinzufü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 Sie in die Gruppe aufnehmen möchten. Aus den vorherigen Abschnitten ist bekannt, dass die Passwort-Datei ebenfalls eine Gruppe für jeden Benutzer enthä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 ähnlichen Werkzeugen angezeigt. Das heißt, dass pw(8) nur /etc/group manipuliert, es wird nicht versuchen, zusätzliche Informationen aus /etc/passwd zu lesen.

Beispiel 8-9. Mit id die Gruppenzugehörigkeit bestimmen

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

Wie Sie sehen, ist jru Mitglied von jru und teamtwo.

Weitere Informationen entnehmen Sie bitte pw(8).


Kapitel 9. Konfiguration des FreeBSD Kernels

Erweitert und neu strukturiert von Jim Mock. Ursprünglich veröffentlicht von Jake Hamby. Übersetzt von Robert Altschaffel.

9.1. Übersicht

Der Kernel ist das Herz des FreeBSD Betriebssystems. Er ist verantwortlich für die Speicherverwaltung, das Durchsetzen von Sicherheitsdirektiven, Netzwerkfähigkeit, Festplattenzugriffen und vieles mehr. Obwohl FreeBSD es immer mehr ermöglicht, dynamisch konfiguriert zu werden, ist es ab und an notwendig, den Kernel neu zu konfigurieren und zu kompilieren.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

  • Wieso Sie Ihren Kernel neu konfigurieren sollten.

  • Wie Sie eine Kernelkonfigurationsdatei erstellen oder verändern.

  • Wie Sie mit der Konfigurationsdatei einen neuen Kernel kompilieren.

  • Wie Sie den neuen Kernel installieren.

  • Wie sie die benötigten Einträge in /dev erstellen.

  • Was zu tun ist, falls etwas schiefgeht.


9.2. Wieso einen eigenen Kernel bauen?

Traditionell besaß FreeBSD einen monolithischen Kernel. Das bedeutet, dass der Kernel ein einziges großes Programm war, das eine bestimmte Auswahl an Hardware unterstützte. Also musste man immer, wenn man das Kernelverhalten verändern wollte, zum Beispiel wenn man neue Hardware hinzufügen wollte, einen neuen Kernel kompilieren, installieren und das System neu starten.

Heutzutage vertritt FreeBSD immer mehr die Idee eines modularen Kernels, bei dem bestimmte Funktionen, je nach Bedarf, als Module geladen werden können. Ein bekanntes Beispiel dafür sind die Module für die PCMCIA-Karten in Laptops, die zum Starten nicht zwingend benötigt werden, und erst bei Bedarf geladen werden. Diese Module nennt man KLDs (kernel loadable modules).

Trotzdem ist es noch immer nötig, einige statische Kernelkonfigurationen durchzuführen. In einigen Fällen ist die Funktion zu systemnah, um durch ein Modul zu realisiert werden. In anderen Fällen hat eventuell noch niemand ein ladbares Kernelmodul für diese Funktion geschrieben.

Das Erstellen eines angepaßten Kernels ist eines der wichtigsten Rituale, das nahezu jeder Benutzer eines UNIX Systems erdulden muss. Obwohl dieser Prozess recht viel Zeit in Anspruch nimmt, bringt er doch viele Vorteile für Ihr FreeBSD System. Der GENERIC Kernel muss eine Vielzahl unterschiedlicher Hardware unterstützen, im Gegensatz dazu unterstützt ein angepasster Kernel nur Ihre Hardware. Dies hat einige Vorteile:

  • Schnellerer Bootvorgang. Da der Kernel nach weniger Geräten sucht, ist die Boot-Sequenz weitaus schneller.

  • Geringere Speicherausnutzung. Ein eigener Kernel benötigt in der Regel weniger Speicher als ein GENERIC Kernel, was vorteilhaft ist, da der Kernel immer im RAM verweilt. Insbesondere profitieren Systeme mit wenig RAM davon.

  • Zusätzliche Hardwareunterstützung. Ein angepasster Kernel kann Unterstützung für Geräte wie Soundkarten bieten, die im GENERIC Kernel nicht unterstützt werden.


9.3. Erstellen und Installation eines angepassten Kernels

Zuerst erläutern wir die Verzeichnisstruktur, in der der Kernel gebaut wird. Die im Folgenden genannten Verzeichnisse sind relativ zu /usr/src/sys angegeben, das Sie auch über /sys erreichen können. Es existieren mehrere Unterverzeichnisse, die bestimmte Teile des Kernels darstellen, aber die für uns wichtigsten sind arch/conf, in dem Sie die Konfigurationsdatei für den angepassten Kernel erstellen werden, und compile, in dem der Kernel gebaut wird. arch kann entweder i386, alpha oder pc98 (eine in Japan beliebte Architektur) sein. Alles in diesen Verzeichnissen ist nur für die jeweilige Architektur relevant, während der Rest des Codes für alle Plattformen, auf die FreeBSD portiert werden kann, gleich ist. Beachten Sie die Verzeichnisstruktur, die jedem unterstützten Gerät, jedem Dateisystem und jeder Option ein eigenes Verzeichnis zuordnet. Ab FreeBSD 5.X wird die sparc64-Architektur unterstützt und es existieren Verzeichnisse für weitere Architekturen, an denen allerdings noch gearbeitet wird.

Anmerkung: Falls Sie kein /usr/src/sys Verzeichnis vorfinden, so sind die Kernelquellen nicht installiert. Der einfachste Weg dies nachzuholen, ist /stand/sysinstall als root auszuführen. Dort wählen Sie Configure, dann Distributions, dann src und schließlich sys. Wenn Sie eine Aversion gegen sysinstall haben und eine ``offizielle'' FreeBSD CD-ROM besitzen, können Sie die Kernelquellen auch von der Kommandozeile installieren:

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

Als nächstes wechseln sie in das Verzeichnis, in dem die GENERIC Konfigurationsdatei liegt und kopieren diese in eine Datei mit dem Namen, den Sie Ihrem Kernel geben wollen:

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

Traditionell ist der Name des Kernels immer in Großbuchstaben. Wenn Sie mehrere FreeBSD mit unterschiedlicher Hardware warten, ist es nützlich, wenn Sie Konfigurationsdatei nach dem Hostnamen der Maschinen benennen. Im Beispiel verwenden wir den Namen MYKERNEL.

Tipp: Es ist nicht zu empfehlen die Konfigurationsdatei direkt unterhalb von /usr/src abzuspeichern. Wenn Sie Probleme haben, könnten Sie der Versuchung erliegen, /usr/src einfach zu löschen und wieder von vorne anzufangen. Fünf Sekunden später werden Sie dann feststellen, dass Sie soeben Ihre Kernelkonfigurationsdatei gelöscht haben.

Editieren Sie immer eine Kopie von GENERIC. Änderungen an GENERIC können verloren gehen, wenn der Quellbaum aktualisiert wird.

Sie sollten die Konfigurationsdatei an anderer Stelle aufheben und in i386 einen Link auf die Datei erstellen.

Beispiel:

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

Anmerkung: Diese und die folgenden Kommandos müssen Sie als root ausführen, da Sie sonst permission denied Fehler erhalten.

Jetzt editieren Sie MYKERNEL mit einem Texteditor Ihres Vertrauens. Wenn Sie gerade neu anfangen, ist Ihnen vielleicht nur der vi Editor bekannt, der allerdings zu komplex ist, um hier erklärt zu werden. Er wird aber in vielen Büchern aus der Bibliographie gut erklärt. FreeBSD bietet aber auch einen leichter zu benutzenden Editor, den ee an, den Sie, wenn Sie Anfänger sind, benutzen sollten. Sie können die Kommentare am Anfang der Konfigurationsdatei ändern, um die Änderungen gegenüber GENERIC zu dokumentieren.

Falls Sie schon einmal einen Kernel unter SunOS oder einem anderen BSD kompiliert haben, werden Sie diese Konfigurationsdatei bereits kennen. Wenn Sie mit einem anderen Betriebssystem wie DOS vertraut sind, könnte die GENERIC Konfigurationsdatei Sie verschrecken. In diesen Fall sollten Sie den Beschreibungen im Abschnitt über die Konfigurationsdatei langsam und vorsichtig folgen.

Anmerkung: Wenn Sie die FreeBSD Quellen synchronisieren, sollten Sie immer, bevor Sie etwas verändern, /usr/src/UPDATING durchlesen. Diese Datei enthält alle wichtigen Informationen, die Sie beim Aktualisieren beachten müssen. Da /usr/src/UPDATING immer zu Ihrer Version der FreeBSD Quellen passt, sind die Informationen dort genauer, als in diesem Handbuch.

Nun müssen Sie die Kernelquellen kompilieren. Dazu gibt es zwei Verfahren. Welches Verfahren Sie nehmen, hängt davon ab, warum Sie den Kernel neu bauen und welche Version von FreeBSD Sie verwenden.

  • Wenn Sie nur die Kernelquellen installiert haben, benutzen Sie das Verfahren 1.

  • Wenn Sie eine FreeBSD Version vor 4.0 benutzen und nicht auf FreeBSD 4.0 oder höher mit make world migrieren, benutzen Sie Verfahren 1.

  • Wenn Sie einen neuen Kernel bauen wollen, ohne dabei den Quellcode zu aktualisieren, weil Sie vielleicht nur eine neue Option wie IPFIREWALL hinzugefügt haben, können Sie jedes der Verfahren einsetzen.

  • Wenn Sie als Teil eines make world den Kernel aktualisieren, benutzen Sie das Verfahren 2.

Verfahren 1. Bau eines Kernels mit der ``herkömmlichen'' Methode

  1. Generieren Sie die Kernel Quellen mit config(8).

    # /usr/sbin/config MYKERNEL
    
  2. Das vorige Kommando gibt das Bauverzeichnis aus. Wechseln Sie jetzt in das Bauverzeichnis:

    # cd ../compile/MYKERNEL
    

    Wenn Sie eine FreeBSD-Version vor 5.0 verwenden, wechseln Sie wie folgt in das Bauverzeichnis:

    # cd ../../compile/MYKERNEL
    
  3. Kompilieren Sie den Kernel.

    # make depend
    # make
    
  4. Installieren Sie den neuen Kernel.

    # make install
    

Verfahren 2. Bau eines Kernels mit der ``neuen'' Methode

  1. Wechseln Sie in das usr/src Verzeichnis.

    # cd /usr/src
    
  2. Kompilieren Sie den Kernel.

    # make buildkernel KERNCONF=MYKERNEL
    
  3. Installieren Sie den neuen Kernel.

    # make installkernel KERNCONF=MYKERNEL
    

Anmerkung: Mit FreeBSD 4.2 und älteren Versionen müssen Sie KERNCONF durch KERNEL ersetzen. 4.2-STABLE nach dem 2. Februar 2001 erkennt die Option KERNCONF.

Wenn Sie die Quellen nicht auf irgendeine Weise aktualisiert haben, das heißt, Sie haben nicht CVSup, CTM oder anoncvs benutzt, dann können Sie die Sequenz config, make depend, make, make install benutzen.

Der neue Kernel wird nach /kernel kopiert, während der alte Kernel nach /kernel.old verschoben wird. Um den neuen Kernel zu benutzen, sollten Sie die Maschine jetzt rebooten. Falls etwas schief geht, sehen Sie bitte in dem Abschnitt zur Fehlersuche am Ende dieses Kapitels nach. Dort sollten Sie auch unbedingt den Abschnitt lesen, der erklärt, was zu tun ist, wenn der neue Kernel nicht bootet.

Anmerkung: Ab FreeBSD 5.0 werden der neue Kernel und die Module in das Verzeichnis /boot/kernel installiert. Der alte Kernel und die dazugehörenden Module werden in das Verzeichnis /boot/kernel.old gesichert. Im Verzeichnis /boot werden auch andere Dateien, die zum Systemstart benötigt werden, wie der Boot-Loader (loader(8)) und dessen Konfiguration, abgelegt. Module von Fremdherstellern oder angepasste Module werden in /boot/modules abgelegt. Beachten Sie bitte, dass diese Module immer zu dem verwendeten Kernel passen müssen, da Module, die nicht zu dem verwendeten Kernel passen, die Stabilität des Systems gefährden.

Anmerkung: Wenn Sie neue Geräte, wie Soundkarten, hinzugefügt haben und FreeBSD 4.X oder eine frühere Version benutzen, müssen Sie unter Umständen Gerätedateien in /dev erstellen, bevor Sie die Geräte benutzen können. Weitere Informationen finden Sie in Erstellen von Gerätedateien später in diesem Kapitel.


9.4. Die Kernelkonfigurationsdatei

Das Format der Konfigurationsdatei ist recht einfach. Jede Zeile enthält ein Schlüsselwort und ein oder mehrere Argumente. Eine Zeile, die von einen # eingeleitet wird, gilt als Kommentar und wird ignoriert. Die folgenden Abschnitte beschreiben jedes Schlüsselwort in der Reihenfolge, in der es in GENERIC auftaucht. Manche zusammengehörende Schlüsselwörter werden in einem Abschnitt beschrieben, obwohl Sie über GENERIC verstreut sind. Eine ausführliche Liste aller Optionen mit detaillierten Erklärungen finden Sie in der Konfigurationsdatei LINT, die sich in demselben Verzeichnis wie GENERIC befindet. Wenn Sie sich über den Zweck oder die Notwendigkeit einer Zeile im Unklaren sind, überprüfen Sie bitte diese bitte zuerst in LINT.

Anmerkung: Ab FreeBSD 5.X ist die Datei LINT durch die Datei NOTES ersetzt worden. Hauptsächlich architekturunabhängige Optionen werden zudem in /usr/src/sys/conf/NOTES gespeichert. Schauen Sie sich bitte auch diese Optionen an.

Das folgende Beispiel zeigt eine GENERIC Konfigurationsdatei, die, wo notwendig, zusätzliche Kommentare enthält. Sie sollte der Datei /usr/src/sys/i386/conf/GENERIC auf Ihrem System sehr ähnlich sein. Für detaillierte Informationen über alle möglichen Optionen sehen Sie sich bitte /usr/src/sys/i386/conf/LINT an.

#
# GENERIC -- Generic kernel configuration file for FreeBSD/i386
#
# For more information on this file, please read the handbook section on
# Kernel Configuration Files:
#
#    http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.380 2003/03/29 13:36:41 mdodd Exp $

Die folgenden Schlüsselwörter sind für jeden Kernel, den Sie bauen, zwingend erforderlich:

machine        i386

Gibt die Architektur der Maschine an und muss entweder i386, pc98, sparc64, alpha, ia64, amd64 oder powerpc sein.

cpu          I486_CPU
cpu          I586_CPU
cpu          I686_CPU

Die vorigen Zeilen geben den Typ der CPU Ihres Systems an. Sie können mehrere CPU Typen angeben, wenn Sie sich zum Beispiel nicht sicher sind, ob Sie I586_CPU oder I686_CPU benutzen sollen. Für einen angepassten Kernel ist es aber am besten, wenn Sie nur die CPU angeben, die sich in der Maschine befindet. Der CPU-Typ wird in den Boot-Meldungen ausgegeben, die in der Datei /var/run/dmesg.boot gespeichert sind.

In den Quellen von FreeBSD ist die Option I386_CPU noch enthalten, doch ist die Option sowohl in -STABLE wie auch in -CURRENT deaktiviert. Das heißt Sie haben die folgenden Möglichkeiten, FreeBSD auf einem 386-System zu installieren:

  • Installieren Sie ein älteres FreeBSD-Release und aktualisieren Sie das System mit den Quellen wie in Abschnitt 9.3 beschrieben.

  • Bauen Sie das Userland und den Kernel auf einer neueren Maschine und installieren Sie die übersetzten Dateien aus /usr/obj. Weitere Details entnehmen Sie bitte Abschnitt 21.5.

  • Bauen Sie Ihr eigenes FreeBSD-Release, dessen Installations-CD einen Kernel enthält der die Option I386_CPU unterstützt.

Die einfachste Möglichkeit ist sicher die erste. Sie benötigen dazu allerdings sehr viel Plattenplatz, der auf 386-Systemen vielleicht nicht vorhanden ist.

ident          GENERIC

Gibt den Namen Ihres Kernels an. Hier sollten Sie den Namen einsetzen, den Sie Ihrer Konfigurationsdatei gegeben haben. In unserem Beispiel ist das MYKERNEL. Der Wert, den Sie ident zuweisen, wird beim Booten des neuen Kernels ausgegeben. Wenn Sie den Kernel von Ihrem normal verwendeten Kernel unterscheiden wollen, weil Sie zum Beispiel einen Kernel zum Testen bauen, ist es nützlich, hier einen anderen Namen anzugeben.

maxusers          n

Die Größe wichtiger Systemtabellen wird von maxusers bestimmt. Der Wert dieser Variablen sollte ungefähr der Anzahl der Benutzer des Systems entsprechen.

Ab FreeBSD 4.5 kann das System diesen Wert selbst setzen, wenn Sie in der Konfigurationsdatei den Wert 0[9] angeben. Ab FreeBSD 5.X wird maxusers auf 0 gesetzt, wenn die Option nicht angegeben wird. Wenn Sie eine frühere Version als FreeBSD 4.5 einsetzen, oder den Wert selbst bestimmen wollen, sollten Sie maxusers mindestens auf 4 setzen, insbesondere wenn Sie beabsichtigen, das X Window System zu benutzen oder Software zu kompilieren. Der Grund dafür ist, dass der wichtigste Wert, der von maxusers bestimmt wird, die maximale Anzahl an Prozessen ist, die auf 20 + 16 * maxusers gesetzt wird. Wenn Sie also maxusers auf 1 setzen, können gleichzeitig nur 36 Prozesse laufen, von denen ungefähr 18 schon beim Booten des Systems gestartet werden und nochmal etwa 15 Prozesse dazukommen, wenn Sie das X Window System starten. Selbst eine einfache Aufgabe, wie das Lesen einer Manualpage, braucht neun Prozesse zum Filtern, Dekomprimieren und Anschauen. Für die meisten Benutzer sollte es ausreichen, maxusers auf 64 zu setzen, womit 1044 gleichzeitige Prozesse zur Verfügung stehen.Wenn Sie allerdings den gefürchteten proc table full Fehler, beim Versuch ein Programm zu starten oder auf einem Server mit einer großen Benutzerzahl (wie ftp.FreeBSD.org) sehen, dann sollten Sie den Wert erhöhen und den Kernel neu bauen.

Anmerkung: Die Anzahl der Benutzer, die sich auf einer Maschine anmelden können, wird nicht durch maxusers begrenzt. Der Wert dieser Variablen zusammen mit einer angenommenen Anzahl Prozesse pro Benutzer legt sinnvolle Größen für bestimmte Systemtabellen fest. Die Option pseudo-device pty 16 legt die Anzahl der erlaubten Anmeldungen von entfernten Systemen und X-Terminals fest.

# Floating point support - do not disable.
device          npx0     at nexus? port IO_NPX irq 13

npx0 ist die Schnittstelle zur Fließkomma-Einheit in FreeBSD. Dies kann entweder ein Coprozessor oder eine mathematische Software-Emulation sein. Die Angabe dieser Option ist verpflichtend.

# Pseudo devices - the number indicates how many units to allocate.
pseudo-device   loop          # Network loopback

Das TCP/IP Loopback Device. Wenn Sie eine Telnet oder FTP Verbindung zu localhost (a.k.a., 127.0.0.1) aufbauen, erstellen Sie eine Verbindung zu sich selbst durch dieses Pseudo-Device. Die Angabe dieser Option ist verpflichtend.

Das Folgende ist mehr oder weniger optional. Mehr Informationen enthalten die Anmerkungen unter oder neben den diskutierten Optionen.

#To statically compile in device wiring instead of /boot/device.hints
#hints          "GENERIC.hints"         #Default places to look for devices.

Ab FreeBSD 5.X werden Geräte mit device.hints(5) konfiguriert. In der Voreinstellung überprüft loader(8) beim Systemstart die Datei /boot/device.hints. Die Option hints erlaubt es, die Gerätekonfiguration statisch in den Kernel einzubinden, sodass die Datei device.hints in /boot nicht benötigt wird.

#makeoptions     DEBUG=-g          #Build kernel with gdb(1) debug symbols

Der normale Bauprozess von FreeBSD erstellt einen Kernel, der keine Debugging-Informationen enthält. Nachdem der Kernel gebunden ist, werden die meisten Symbole entfernt, um bei der Installation Platz zu sparen. Wenn Sie Kernel auf dem -CURRENT-Zweig testen oder eigene Änderungen im Kernel vornehmen, sollten Sie vielleicht diese Zeile aktivieren. gcc(1) wird dann mit der Option -g aufgerufen und erzeugt die Debugging-Informationen. Erstellen Sie den Kernel mit der herkömmlichen Methode (siehe Abschnitt 9.3), erreichen Sie dasselbe, wenn Sie config(8) mit der Option -g aufrufen.

options          MATH_EMULATE      #Support for x87 emulation

Diese Zeile schaltet die Software-Emulation eines mathematischen Coprozessors für den Fall, das Ihre Maschine keinen besitzt (386 oder 486SX), ein. Wenn Sie einen 386 oder 486SX mit dem dazugehörigen Coprozessor (387 oder 487), einen 486DX oder besser (wie Pentium, Pentium II) besitzen, können Sie diese Zeile auskommentieren.

Anmerkung: Die normalen Emulationsroutinen für den Coprozessor in FreeBSD sind nicht sehr genau. Wenn Sie keinen Coprozessor besitzen, sollten Sie hier GPL_MATH_EMULATE einsetzen, um die Unterstützung der GNU Routinen zu aktivieren. Wegen der damit verbundenen Lizenz, ist diese Option in der Voreinstellung nicht aktiviert.

Ab FreeBSD 5.0 ist die Emulation eines mathematischen Coprozessors in der Voreinstellung ausgeschaltet, da heute nicht mehr so viele alte CPUs ohne Coprozessor eingesetzt werden. Damit der GENERIC-Kernel mit diesen CPUs zusammenarbeitet, müssen oft noch weitere Optionen aktiviert werden.

options          INET          #InterNETworking

Netzwerkunterstützung. Auch wenn Sie nicht planen, den Rechner mit einem Netzwerk zu verbinden, sollten Sie diese Option aktiviert lassen. Die meisten Programme sind mindestens auf die Loopback Unterstützung (Verbindungen mit sich selbst) angewiesen. Damit ist diese Option im Endeffekt notwendig.

options          INET6          #IPv6 communications protocols

Aktiviert die Unterstützung für das IPv6 Protokoll.

options          FFS          #Berkeley Fast Filesystem
options          FFS_ROOT     #FFS usable as root device [keep this!]

Das Dateisystem für Festplatten. Wenn Sie von einer Festplatte booten wollen, lassen Sie diese Option aktiviert.

Anmerkung: Ab FreeBSD 5.0 wird FFS_ROOT nicht mehr benötigt.

options          UFS_ACL      #Support for access control lists

Diese Option, die es erst ab FreeBSD 5.0 gibt, aktiviert Zugriffskontrolllisten (ACL). Die ACLs hängen von erweiterten Attributen und UFS2 ab, eine genaue Beschreibung finden Sie in Abschnitt 10.13. Die Zugriffskontrolllisten sind in der Voreinstellung aktiviert und sollten auch nicht deaktiviert werden, wenn Sie schon einmal auf einem Dateisystem verwendet wurden, da dies die Zugriffsrechte auf Dateien in unvorhersehbarer Art und Weise ändern kann.

options          UFS_DIRHASH  #Improve performance on big directories

Diese Option steigert die Geschwindigkeit von Plattenzugriffen auf großen Verzeichnissen. Dadurch verbraucht das System etwas mehr Speicher als vorher. Für stark beschäftigte Server oder Arbeitsplatzrechner sollten Sie diese Option aktiviert lassen. Auf kleineren Systemen, bei denen Speicher eine kostbare Ressource darstellt oder Systemen, auf denen die Geschwindigkeit der Plattenzugriffe nicht wichtig ist, wie Firewalls, können Sie diese Option abstellen.

options          SOFTUPDATES  #Enable FFS Soft Updates support

Mit dieser Option wird die Unterstützung für Soft Updates, die Schreibzugriffe beschleunigen, in den Kernel eingebunden. Auch wenn die Funktion im Kernel ist, muss sie für einzelne Dateisysteme explizit aktiviert werden. Überprüfen Sie mit mount(8), ob die Dateisysteme Soft Updates benutzen. Wenn die Option soft-updates nicht aktiviert ist, können Sie die Option nachträglich mit tunefs(8) aktivieren. Für neue Dateisysteme können Sie Option beim Anlegen mit newfs(8) aktivieren.

options          MFS          #Memory Filesystem
options          MD_ROOT      #MD is a potential root device

Das speicherbasierte Dateisystem. Dies ist eine RAM-Disk, die zum schnellen Zugriff auf temporäre Dateien dient und nützlich ist, wenn Sie über viel Speicher verfügen. Eine MFS-Partition eignet sich sehr gut für das /tmp Verzeichnis, da dort sehr viele Programme temporäre Daten speichern. Um eine MFS RAM-Disk auf /tmp einzurichten, fügen Sie die folgende Zeile in /etc/fstab hinzu:

/dev/ad1s2b    /tmp mfs rw 0 0

Um das Dateisystem einzuhängen, können Sie nun booten oder rufen das Kommando mount /tmp auf.

Anmerkung: Ab FreeBSD 5.0 werden RAM-disks mit md(4) erstellt, daher wird die Option MFS nicht mehr unterstützt. Wie RAM-disks eingerichtet werden, beschreiben die Hilfeseiten mdconfig(8) und mdmfs(8) sowie Abschnitt 12.10.

options          NFS          #Network Filesystem
options          NFS_ROOT     #NFS usable as root device, NFS required

Das Network Filesystem. Wenn Sie keine Partitionen von einem UNIX File-Server über TCP/IP einhängen wollen, können Sie diese Zeile auskommentieren.

options          MSDOSFS      #MSDOS Filesystem

Das MS-DOS Dateisystem. Sie können diese Zeile auskommentieren, wenn Sie nicht vorhaben, eine DOS-Partition beim Booten einzuhängen. Das nötige Modul wird ansonsten automatisch geladen, wenn Sie das erste mal eine DOS-Partition einhängen. Außerdem können Sie mit den ausgezeichneten mtools aus der Ports-Sammlung auf DOS-Floppies zugreifen, ohne diese an- und abhängen zu müssen (MSDOSFS wird in diesem Fall nicht benötigt).

options          CD9660       #ISO 9660 Filesystem
options          CD9660_ROOT  #CD-ROM usable as root, CD9660 required

Das ISO 9660 Dateisystem für CD-ROMs. Sie können diese Zeile auskommentieren, wenn Sie kein CD-ROM-Laufwerk besitzen oder nur ab und an CDs einhängen. Das Modul wird automatisch geladen, sobald Sie das erste Mal eine CD einhängen. Für Audio-CDs benötigen Sie dieses Dateisystem nicht.

options          PROCFS       #Process filesystem

Das Prozeß-Dateisystem. Dies ist ein Pseudo-Dateisystem, das auf /proc eingehangen wird und es Programmen wie ps(1) erlaubt, mehr Informationen über laufende Prozesse auszugeben. Ab FreeBSD 5.0 sollte PROCFS nicht mehr benötigt werden, da die meisten Debug- und Überwachungs-Werkzeuge nicht mehr darauf angewiesen sind. Wenn PROCFS mit FreeBSD 5.0 benutzt werden soll, wird zusätzlich noch die Option PSEUDOFS benötigt:

options          PSEUDOFS     #Pseudo-filesystem framework

PSEUDOFS steht unter FreeBSD 4.X nicht zur Verfügung. Im Gegensatz zu FreeBSD 4.X wird ab FreeBSD 5.0 das Prozeß-Dateisystem nicht mehr per Voreinstellung eingehangen.

options          COMPAT_43    #Compatible with BSD 4.3 [KEEP THIS!]

Stellt die Kompatibilität zu 4.3BSD sicher. Belassen Sie diese Option, da sich manche Programme recht sonderbar verhalten werden, wenn Sie diese auskommentieren.

options          COMPAT_FREEBSD4     #Compatible with FreeBSD4

Mit FreeBSD 5.X stellt diese Option auf i386- und Alpha-Systemen sicher, dass Anwendungen, die auf älteren FreeBSD Versionen übersetzt wurden und alte Systemaufrufe verwenden, noch lauffähig sind. Wir empfehlen, diese Option auf allen i386- und Alpha-Systemen zu verwenden, auf denen vielleicht noch ältere Anwendungen laufen sollen. Auf Plattformen, die erst ab FreeBSD 5.0 unterstützt werden (wie ia64 und Sparc®), wird diese Option nicht benötigt.

options          SCSI_DELAY=15000    #Delay (in ms) before probing SCSI

Dies weist den Kernel an, 15 Sekunden zu warten, bevor er anfängt nach SCSI-Geräten auf dem System zu suchen. Wenn Sie nur IDE-Geräte besitzen, können Sie die Anweisung ignorieren. Sie können versuchen, den Wert auf 5 Sekunden senken, um den Startvorgang zu beschleunigen. Wenn FreeBSD dann Schwierigkeiten hat, Ihre SCSI-Geräte zu erkennen, sollten Sie den Wert natürlich wieder erhöhen.

options          UCONSOLE            #Allow users to grab the console

Erlaubt es Benutzern, die Konsolenausgabe umzulenken. Starten Sie einen xterm mit xterm -C, um Ausgaben von write(1), talk(1) oder Kernelmeldungen auf der Konsole darin zu sehen.

Anmerkung: Ab FreeBSD 5.0 wird UCONSOLE nicht mehr benötigt.

options          USERCONFIG          #boot -c editor

Diese Option erlaubt es Ihnen, den Konfigurationseditor aus dem Bootmenü zu starten.

options          VISUAL_USERCONFIG   #visual boot -c editor

Diese Option erlaubt es Ihnen, den Visual-Konfigurationseditor aus dem Bootmenü zu starten.

Anmerkung: Ab FreeBSD 5.0 werden Geräte mit device.hints(5) anstelle des Konfigurationseditors konfiguriert, dies wird in Abschnitt 7.5 erklärt.

options          KTRACE              #ktrace(1) support

Dies schaltet die Kernel-Prozessverfolgung (engl. kernel process tracing) ein, die sehr nützlich bei der Fehlersuche ist.

options          SYSVSHM             #SYSV-style shared memory

Diese Option aktiviert die Unterstützung für System V Shared-Memory. Die XSHM-Erweiterung von X benötigt diese Option und viele Graphik-Programme werden die Erweiterung automatisch benutzen und schneller laufen. Wenn Sie X benutzen, sollten Sie diese Option auf jeden Fall aktivieren.

options          SYSVSEM             #SYSV-style semaphores

Unterstützung für System V Semaphoren. Dies wird selten gebraucht, vergrößert aber den Kernel nur um einige hundert Bytes.

options          SYSVMSG             #SYSV-style message queues

Unterstützung für System V Messages. Vergrößert den Kernel wiederum nur um einige hundert Bytes.

Anmerkung: Programme, die diese System V Erweiterungen benutzen, können Sie sich mit ipcs(1) anzeigen lassen.

options    P1003_1B        #Posix P1003_1B real-time extensions
options     _KPOSIX_PRIORITY_SCHEDULING

Echtzeit-Erweiterungen, die 1993 zu POSIX® hinzugefügt wurden. Bestimmte Programme wie StarOffice benutzen diese Erweiterungen.

Anmerkung: Ab FreeBSD 5.0 werden diese Funktionen von _KPOSIX_PRIORITY_SCHEDULING alleine zur Verfügung gestellt. P1003_1B wird nicht mehr benötigt.

options        ICMP_BANDLIM        #Rate limit bad replies

Diese Option aktiviert die ICMP Bandbreitenbegrenzung für Antworten. Diese Option sollten Sie aktiviert lassen, da sie Ihre Maschine vor Denial of Service Angriffen schützt.

Anmerkung: In der Voreinstellung von FreeBSD 5.X ist diese Funktion aktiviert. ICMP_BANDLIM muss daher nicht extra angegeben werden.

# To make an SMP kernel, the next two are needed
#options        SMP                     # Symmetric MultiProcessor Kernel
#options        APIC_IO                 # Symmetric (APIC) I/O

Beide Option werden für SMP Unterstützung benötigt.

device          isa

Alle von FreeBSD unterstützten PCs benötigen diese Zeile. FreeBSD unterstützt den IBM PS/2 (Microchannel Architektur) nur eingeschränkt. Weitere Informationen über die Microchannel Unterstützung entnehmen Sie bitte /usr/src/sys/i386/conf/LINT.

device          eisa

Fügen Sie diese Zeile ein, wenn Sie ein EISA-Motherboard besitzen. Dies aktiviert die Erkennung und Konfiguration von allen Geräten auf dem EISA Bus.

device          pci

Wenn Sie ein PCI-Motherboard besitzen, fügen Sie diese Zeile ein. Dies aktiviert die Erkennung von PCI-Karten und die PCI-ISA bridge.

device          agp

Fügen Sie diese Zeile ein, wenn Sie eine AGP-Karte besitzen. Damit werden Motherboards mit AGP und AGP GART unterstützt.

# Floppy drives
device          fdc0        at isa? port IO_FD1 irq 6 drq 2
device          fd0         at fdc0 drive 0
device          fd1         at fdc0 drive 1

Der Floppy-Controller. fd0 ist das A: Laufwerk und fd1 ist das B: Laufwerk.

device          ata

Dieser Treiber unterstützt alle ATA und ATAPI Geräte. Eine device ata Zeile reicht aus und der Kernel wird auf modernen Maschinen alle PCI ATA/ATAPI Geräte entdecken.

device          atadisk                 # ATA disk drives

Für ATA Plattenlaufwerke brauchen Sie diese Zeile zusammen mit device ata.


device          atapicd                 # ATAPI CDROM drives

Zusammen mit device ata wird dies für ATAPI CD-ROM Laufwerke benötigt.

device          atapifd                 # ATAPI floppy drives

Zusammen mit device ata wird dies für ATAPI Floppy Laufwerke benötigt.

device          atapist                 # ATAPI tape drives

Zusammen mit device ata wird dies für ATAPI Bandlaufwerke benötigt.

options         ATA_STATIC_ID           #Static device numbering

Erzwingt wie der alte Treiber eine statische Gerätenummer für den Controller. Ist diese Option nicht aktiviert, werden die Gerätenummern dynamisch zugeordnet.

# ATA and ATAPI devices
device          ata0        at isa? port IO_WD1 irq 14
device          ata1        at isa? port IO_WD2 irq 15

Benutzen Sie die obigen Zeilen für ältere Systeme ohne einen PCI Bus.

# SCSI Controllers
device          ahb        # EISA AHA1742 family
device          ahc        # AHA2940 and onboard AIC7xxx devices
device          amd        # AMD 53C974 (Teckram DC-390(T))
device          dpt        # DPT Smartcache - See LINT for options!
device          isp        # Qlogic family
device          ncr        # NCR/Symbios Logic
device          sym        # NCR/Symbios Logic (newer chipsets)

device          adv0       at isa?
device          adw
device          bt0        at isa?
device          aha0       at isa?
device          aic0       at isa?

SCSI Controller. Kommentieren Sie alle Controller aus, die sich nicht in Ihrem System befinden. Wenn Sie ein IDE-System besitzen, können Sie alle Einträge entfernen.

# SCSI peripherals
device          scbus      # SCSI bus (required)
device          da         # Direct Access (disks)
device          sa         # Sequential Access (tape etc)
device          cd         # CD
device          pass       # Passthrough device (direct SCSI
access)

SCSI Peripheriegeräte. Kommentieren Sie wieder alle Geräte aus, die Sie nicht besitzen. Besitzer von IDE-Systemen können alle Einträge entfernen.

# RAID controllers
device          ida        # Compaq Smart RAID
device          amr        # AMI MegaRAID
device          mlx        # Mylex DAC960 family

Unterstützte RAID Controller. Wenn Sie keinen der aufgeführten Controller besitzen, kommentieren Sie die Einträge aus oder entfernen sie.

# atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc0    at isa? port IO_KBD

Der Tastatur-Controller (atkbdc) ist für die Ein- und Ausgabe von AT-Tastaturen und PS/2 Zeigegeräten (z.B. einer Maus) verantwortlich. Dieser Controller wird vom Tastaturtreiber (atkbd) und dem PS/2 Gerätetreiber (psm) benötigt.

device          atkbd0     at atkbdc? irq 1

Zusammen mit dem atkbdc Controller bietet der atkbd Treiber Zugriff auf AT-Tastaturen.

device          psm0       at atkbdc? irq 12

Benutzen Sie dieses Gerät, wenn Sie eine Maus mit PS/2 Anschluss besitzen.

device          vga0        at isa?

Der Grafikkartentreiber.

# splash screen/screen saver
pseudo-device          splash

Zeigt einen ``Splash Screen'' beim Booten. Diese Zeile wird auch von den Bildschirmschonern benötigt.

# syscons is the default console driver, resembling an SCO console
device          sc0          at isa?

sc0 ist in der Voreinstellung der Treiber für die Konsole, die der SCO-Konsole ähnelt. Da die meisten bildschirmorientierten Programme auf die Konsole mit Hilfe einer Datenbank wie termcap zugreifen, sollte es keine Rolle spielen, ob Sie diesen Treiber oder vt0, den VT220 kompatiblen Konsolentreiber einsetzen. Wenn Sie Probleme mit bildschirmorientierten Anwendungen unter dieser Konsole haben, setzen Sie beim Anmelden die Variable TERM auf den Wert VT220.

# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device          vt0     at isa?
#options         XSERVER          # support for X server on a vt console
#options         FAT_CURSOR       # start with block cursor
# If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
#options         PCVT_SCANSET=2   # IBM keyboards are non-std

Der VT220 kompatible Konsolentreiber ist kompatibel zu VT100/102. Auf einigen Laptops, die aufgrund der Hardware inkompatibel zum sc0 Treiber sind, funktioniert dieser Treiber gut. Beim Anmelden sollten Sie die Variable TERM auf den Wert vt100 setzen. Dieser Treiber kann sich als nützlich erweisen, wenn Sie sich über das Netzwerk auf vielen verschiedenen Maschinen anmelden, da dort oft Einträge in termcap oder terminfo für das sc0 Gerät fehlen. Dagegen sollte vt100 auf jeder Plattform unterstützt werden.

# Power management support (see LINT for more options)
device          apm0     at nexus? disable flags 0x20  # Advanced Power Management

Unterstützung zur Energieverwaltung. Nützlich für Laptops.

# PCCARD (PCMCIA) support
device          card
device          pcic0    at isa? irq 10 port 0x3e0 iomem 0xd0000
device          pcic1    at isa? irq 11 port 0x3e2 iomem 0xd4000 disable

PCMCIA Unterstützung. Wenn Sie einen Laptop benutzen, brauchen Sie diese Zeile.

# Serial (COM) ports
device          sio0     at isa? port IO_COM1 flags 0x10 irq 4
device          sio1     at isa? port IO_COM2 irq 3
device          sio2     at isa? disable port IO_COM3 irq 5
device          sio3     at isa? disable port IO_COM4 irq 9

Es gibt vier serielle Schnittstellen, die in der MS-DOS und Windows Welt COM1 bis COM4 genannt werden.

Anmerkung: Wenn Sie ein internes Modem, das COM4 benutzt, besitzen und eine serielle Schnittstelle haben, die auf COM2 liegt, müssen Sie den IRQ des Modems auf 2 setzen (wegen undurchsichtigen technischen Gründen ist IRQ2 =IRQ9). Wenn Sie eine serielle Multiport-Karte besitzen, sehen Sie die korrekten Werte für diese Zeilen in sio(4) nach. Einige Graphikkarten, besonders die auf S3-Chips basierten, benutzen IO-Adressen der Form 0x*2e8 und manche billige serielle Karten dekodieren den 16-Bit IO-Adressraum nicht sauber. Dies führt zu Konflikten und blockiert dann die COM4 Schnittstelle.

Jeder seriellen Schnittstelle muss ein eigener IRQ zugewiesen werden (wenn Sie eine Multiport-Karte verwenden, bei der das Teilen von Interrupts unterstützt wird, muss das nicht der Fall sein), daher können in der Voreinstellung COM3 und COM4 nicht benutzt werden.

# Parallel port
device          ppc0    at isa? irq 7

Die parallele Schnittstelle auf dem ISA Bus.

device          ppbus      # Parallel port bus (required)

Unterstützung für den Bus auf der parallelen Schnittstelle.

device          lpt        # Printer

Unterstützung für Drucker über die parallele Schnittstelle.

Anmerkung: Sie brauchen jede der drei Zeilen, um die Unterstützung für einen Drucker an der parallelen Schnittstelle zu aktivieren.

device          plip       # TCP/IP over parallel

Der Treiber für das Netzwerkinterface über die parallele Schnittstelle.

device          ppi        # Parallel port interface device

Allgemeine I/O (``geek port'') und IEEE1284 I/O Unterstützung.

#device         vpo        # Requires scbus and da

Dies aktiviert den Treiber für ein Iomega Zip Laufwerk. Zusätzlich benötigen Sie noch die Unterstützung für scbus und da. Die beste Performance erzielen Sie, wenn Sie die Schnittstelle im EPP 1.9 Modus betreiben.

# PCI Ethernet NICs.
device          de         # DEC/Intel DC21x4x (``Tulip'')
device          fxp        # Intel EtherExpress PRO/100B (82557, 82558)
device          tx         # SMC 9432TX (83c170 ``EPIC'')
device          vx         # 3Com 3c590, 3c595 (``Vortex'')
device          wx         # Intel Gigabit Ethernet Card (``Wiseman'')

Verschiedene Treiber für PCI-Netzwerkkarten. Geräte, die sich nicht in Ihrem System befinden, können Sie entfernen oder auskommentieren.

# PCI Ethernet NICs that use the common MII bus controller code.
device          miibus     # MII bus support

Einige PCI 10/100 Ethernet Netzwerkkarten, besonders die, die MII-fähige Transceiver verwenden oder Transceiver-Steuerungen implementieren, die ähnlich wie MII funktionieren, benötigen die Unterstützung für den MII-Bus. Die Zeile device miibus fügt dem Kernel die Unterstützung für das allgemeine miibus API und allen PHY-Treibern hinzu.

device          dc         # DEC/Intel 21143 and various workalikes
device          rl         # RealTek 8129/8139
device          sf         # Adaptec AIC-6915 (``Starfire'')
device          sis        # Silicon Integrated Systems SiS 900/SiS 7016
device          ste        # Sundance ST201 (D-Link DFE-550TX)
device          tl         # Texas Instruments ThunderLAN
device          vr         # VIA Rhine, Rhine II
device          wb         # Winbond W89C840F
device          xl         # 3Com 3c90x (``Boomerang'', ``Cyclone'')

Treiber, die den MII Bus Controller Code benutzen.

# ISA Ethernet NICs.
device          ed0    at isa? port 0x280 irq 10 iomem 0xd8000
device          ex
device          ep
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device          wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device          an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device          ie0    at isa? port 0x300 irq 10 iomem 0xd0000
device          fe0    at isa? port 0x300
device          le0    at isa? port 0x300 irq 5 iomem 0xd0000
device          lnc0   at isa? port 0x280 irq 10 drq 0
device          cs0    at isa? port 0x300
device          sn0    at isa? port 0x300 irq 10
# requires PCCARD (PCMCIA) support to be activated
#device         xe0    at isa?

Treiber für ISA Ethernet Karten. Schauen Sie in /usr/src/sys/i386/conf/LINT nach, um zu sehen, welche Karte von welchem Treiber unterstützt wird.

pseudo-device   ether         # Ethernet support

ether brauchen Sie nur, wenn Sie eine Ethernet-Karte besitzen. Der Treiber unterstützt das Ethernet-Protokoll.

pseudo-device   sl      1     # Kernel SLIP

sl aktiviert die SLIP Unterstützung. SLIP ist fast vollständig von PPP verdrängt worden, da letzteres leichter zu konfigurieren, besser geeignet für Modem zu Modem Kommunikation und mächtiger ist. Die Zahl hinter sl gibt der Anzahl der gleichzeitigen SLIP-Verbindungen an, die unterstützt werden.

pseudo-device   ppp     1     # Kernel PPP

Dies ist Kernel Unterstützung für PPP Wählverbindungen. Es existiert auch eine PPP Version im Userland, die den tun Treiber benutzt. Die Userland Version ist flexibler und bietet mehr Option wie die Auswahl auf Anforderung. Die Zahl hinter ppp gibt die Anzahl gleichzeitiger PPP Verbindungen an, die unterstützt werden.

pseudo-device   tun           # Packet tunnel.

Dies wird vom der Userland PPP benutzt. Die Zahl hinter tun gibt die Anzahl der unterstützten gleichzeitigen Verbindungen an. Weitere Informationen erhalten Sie im Abschnitt PPP dieses Handbuchs.


pseudo-device   pty           # Pseudo-ttys (telnet etc)

Dies ist ein ``Pseudo-Terminal'' oder simulierter Login-Terminal. Er wird von einkommenden telnet und rlogin Verbindungen, xterm und anderen Anwendungen wie Emacs benutzt. Eine Zahl hinter pty gibt die Anzahl der zu erstellenden ptys an. Wenn Sie mehr Verbindungen als die 16 erlaubten in der Voreinstellung brauchen, erhöhen Sie diesen Wert bis zu einem Maximum von 256.

pseudo-device   md            # Memory ``disks''

Pseudo-Gerät für Speicher-Laufwerke.

pseudo-device   gif

oder

pseudo-device   gif     4     # IPv6 and IPv4 tunneling

Dieses Gerät tunnelt IPv6 über IPv4, IPv4 über IPv6, IPv4 über IPv4 oder IPv6 über IPv6. Ab FreeBSD 4.4 kann die Anzahl der benötigten Geräte vom System bestimmt werden, so dass Sie die erste Zeile (ohne eine Zahl hinter gif) verwenden sollten. Auf früheren Systemen ist die Angabe der Anzahl der Geräte verpflichtend.

pseudo-device   faith   1     # IPv6-to-IPv4 relaying (translation)

Dieses Pseudo-Gerät fängt zu ihm gesendete Pakete ab und leitet Sie zu einem Dæmon weiter, der Verkehr zwischen IPv4 und IPv6 vermittelt.

# The `bpf' pseudo-device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
pseudo-device   bpf           # Berkeley packet filter

Das ist der Berkeley Paketfilter. Dieses Pseudo-Gerät kann Netzwerkkarten in den ``promiscuous'' Modus setzen und erlaubt es damit, Pakete auf einem Broadcast Netzwerk (z.B. einem Ethernet) einzufangen. Die Pakete können auf der Festplatte gespeichert und mit tcpdump(1) untersucht werden.

Anmerkung: Das bpf-Pseudo-Gerät wird von dhclient(8) genutzt, um die IP-Adresse des Default-Routers zu bekommen. Wenn Sie DHCP benutzen, lassen Sie diese Option bitte aktiviert.

# USB support
#device         uhci          # UHCI PCI->USB interface
#device         ohci          # OHCI PCI->USB interface
#device         usb           # USB Bus (required)
#device         ugen          # Generic
#device         uhid          # ``Human Interface Devices''
#device         ukbd          # Keyboard
#device         ulpt          # Printer
#device         umass         # Disks/Mass storage - Requires scbus and da
#device         ums           # Mouse
# USB Ethernet, requires mii
#device         aue           # ADMtek USB ethernet
#device         cue           # CATC USB ethernet
#device         kue           # Kawasaki LSI USB ethernet

Unterstützung für verschiedene USB Geräte.

Mehr Informationen und weitere von FreeBSD unterstützte Geräte entnehmen Sie bitte /usr/src/sys/i386/conf/LINT.


9.4.1. Die 4 GB Speicherbeschränkung aufheben

In der Vergangenheit konnte FreeBSD Speicher über vier Gigabyte nicht benutzen. Für Besitzer von Maschinen, die mehr als vier Gigabyte Speicher verwalten können, war das unangenehm. Mithilfe des pae(4)-Treibers können jetzt bis zu 64 Gigabyte Speicher angesprochen werden. Um den Treiber zu aktivieren, fügen Sie die nachstehende Zeile in die Kernelkonfigurationsdatei ein:

options        PAE

Anmerkung: Diese Option ist noch nicht ganz ausgetestet und kann Probleme verursachen. Es kann sein, dass der virtuelle Adressraum des Kernels erhöht werden muss. Fügen Sie in diesem Fall die Option KVA_PAGES aus der Datei NOTES in die Kernelkonfiguration ein. Der Vorgabewert von 260 muss wahrscheinlich erhöht werden. Gleichzeitig ist es vielleicht erforderlich, den Wert von kern.maxvnodes mit sysctl zu erniedrigen. Lesen Sie bitte auf jeden Fall die Hilfeseite tuning(7).


9.5. Gerätedateien erstellen

Anmerkung: Ab FreeBSD 5.0 werden die Gerätedateien automatisch von devfs(5) erzeugt. Überspringen Sie diesen Abschnitt, wenn Sie FreeBSD 5.0 oder eine neuere Version benutzen.

Zu fast jedem Gerät gehört eine Datei in /dev, die zwar wie eine reguläre Datei aussieht, tatsächlich aber eine Schnittstelle zum Kernel ist, die Programme benutzen, um Zugriff auf das Gerät zu erlangen. Das Shellskript /dev/MAKEDEV, das auch bei der Installation des Systems ausgeführt wird, erstellt fast alle unterstützten Gerätedateien. Es legt aber nicht alle Gerätedateien an, das heißt, wenn Sie im Kernel Unterstützung für ein neues Gerät hinzugefügt haben, sollten Sie überprüfen, ob die entsprechenden Einträge in dev vorhanden sind. Wenn nicht, dann legen Sie sie, wie im folgenden Beispiel einfach an.

Angenommen, Sie wollen den Kernel um Unterstützung für IDE-CD-ROMs erweitern. Dann müssen Sie folgende Zeile in der Konfigurationsdatei einfügen:

device acd0

Nun suchen Sie in /dev nach Dateien, die mit acd0 beginnen, möglicherweise mit c enden oder ein r vorgestellt haben (der Eintrag für das ``rohe'' Gerät). Wenn Sie die Einträge nicht finden, wechseln Sie in /dev und führen dort das folgende Kommando aus:

# sh MAKEDEV acd0

Nun sollten die Einträge acd0c und racd0c in /dev vorhanden sein.

Das folgende Kommando legt die passenden Einträge für Soundkarten an:

# sh MAKEDEV snd0

Anmerkung: Wenn Sie Gerätedateien für Geräte wie Soundkarten erstellen und andere Leute Zugriff auf Ihren Rechner haben, wollen Sie vielleicht diese Geräte vor Zugriffen von außen schützen. Sie erreichen dies, in dem Sie das Gerät in /etc/fbtab aufnehmen. Weitere Informationen stellt fbtab(5) zur Verfügung.

Folgen Sie dieser Prozedur für alle Geräte, die nicht in GENERIC eingetragen sind.

Da alle SCSI Controller die gleichen Einträge in /dev benutzen, brauchen Sie diese nicht erstellen. Weiterhin haben Netzwerkkarten sowie SLIP/PPP-Pseudo-Geräte keine Einträge in /dev.


9.6. Wenn etwas schiefgeht

Es gibt fünf Hauptfehlerquellen beim Erstellen eines angepassten Kernels:

config verursacht Fehler:

Wenn config(8) misslingt, liegen Fehler in der Kernelkonfigurationsdatei vor. Zum Glück gibt config(8) die die Zeilennummer der Fehlerstelle an, so dass Sie diese schnell in vi finden können. Beispielsweise könnten Sie folgende Fehlermeldung sehen:

config: line 17: syntax error

Im Befehlsmodus von vi können Sie sofort zur fraglichen Stelle springen, in dem Sie 17G eingeben. Überprüfen Sie dort durch Vergleichen mit GENERIC, ob das Schlüsselwort richtig geschrieben ist.

make verursacht Fehler:

Wenn make misslingt, liegen meistens ebenfalls Fehler in der Konfigurationsdatei vor, die aber so speziell sind, dass config(8) sie nicht findet. Überprüfen Sie wiederum Ihre Konfiguration und wenn Sie keinen Fehler entdecken können, schicken Sie eine Mail mit Ihrer Kernelkonfiguration an die Mailingliste 'Fragen und Antworten zu FreeBSD' . Sie sollten dann schnell Hilfe erhalten.

Der neue Kernel lässt sich nicht installieren:

Wenn das Übersetzen des Kernels geklappt hat aber die Installation nicht, weil make install oder make installkernel fehlgeschlagen ist, sollten Sie zuerst überprüfen, ob Ihr System in der Sicherheitsstufe 1 (engl. secure level) läuft (siehe init(8)). Ihr alter Kernel ist durch die Immutable Option vor Veränderungen geschützt und die Installationsprozedur versucht, diese Option vom alten Kernel zu entfernen und auf den neuen Kernel zu setzen. Da in der Sicherheitsstufe 1 die Immutable Option nicht gesetzt werden kann, muss die Installation des Kernels in der Sicherheitsstufe 0 oder einer niedrigeren stattfinden.

Der Kernel bootet nicht:

Wenn der Kernel nicht booten will, ist das noch lange kein Grund zur Panik. Denn FreeBSD besitzt exzellente Mechanismen zur Wiederherstellung nach dem Einsatz inkompatibler Kernel. Den Kernel, mit dem Sie booten wollen, können Sie sich im FreeBSD Boot Loader aussuchen. In den Loader gelangen Sie, in dem Sie einfach eine Taste außer Enter drücken, wenn das System von 10 herunterzählt. Geben Sie dann unload ein und mit boot kernel.old booten Sie den alten Kernel. Sie können hier natürlich auch den Dateinamen eines anderen Kernels, der sauber bootet angeben. Für alle Fälle sollten Sie immer einen Kernel, der garantiert bootet, bereit halten.

Nun können Sie die Konfiguration noch einmal überprüfen und den Kernel neu kompilieren. Dazu ist /var/log/messages sehr nützlich, da hier sämtliche Kernelmeldungen von jedem erfolgreichen Bootvorgang gespeichert werden. dmesg(8) gibt Ihnen die Kernelmeldungen vom letzten Bootvorgang aus.

Anmerkung: Heben Sie sich immer einen GENERIC oder einen anderen Kernel, der garantiert bootet, für den Fall, dass Sie Probleme bei dem Bau des Kernels bekommen, auf. Der Name dieses Kernels sollte so gewählt sein, dass er beim nächsten Bau nicht überschrieben wird. Sie können sich nicht auf kernel.old verlassen, da dieser Kernel durch den zuletzt installierten Kernel, der vielleicht schon kaputt war, ersetzt wird, wenn Sie installieren. Kopieren Sie einen laufenden Kernel so schnell wie möglich an die richtige Stelle (/kernel), oder Kommandos wie ps(1) werden nicht richtig funktionieren. Um einen anderen Kernel an die richtige Stelle zu schieben, müssen Sie zuerst die Immutable Option von dem Kernel entfernen, den make installiert hat:

# chflags noschg /kernel

Wenn Sie den Befehl nicht ausführen können, befinden Sie sich in einer höheren Sicherheitsstufe als 0. Setzen Sie in /etc/rc.conf die Variable kern_securelevel auf -1 und booten Sie danach. Wenn der neue Kernel funktioniert, können Sie die Variable wieder auf Ihren alten Wert zurücksetzen.

Wenn Sie den neuen Kernel, oder allgemein eine Datei, mit der Immutable Option versehen wollen, um sie vor Veränderungen zu schützen, führen Sie folgenden Befehl aus:

# chflags schg /kernel

Ab FreeBSD 5.0 werden die Kernel nicht mehr mit der Immutable Option installiert. Probleme an dieser Stelle werden also nicht mehr von der fehlenden Schreibberechtigung verursacht.

Der Kernel ist in Ordnung, aber ps geht nicht mehr:

Wenn Sie eine andere Version des Kernels installiert haben als die, mit der Ihre Systemwerkzeuge gebaut wurden (beispielsweise einen 4.X Kernel auf einem 3.X System), werden Programme wie ps(1) und vmstat(8) nicht mehr funktionieren. Sie müssen nun die libkvm und die entsprechenden Programme neu kompilieren. Das ist ein Grund dafür, warum man nie einen Kernel, der nicht zur Systemversion passt, benutzten sollte.


Kapitel 10. Sicherheit

Viel von diesem Kapitel stammt aus der security(7) Manualpage von Matthew Dillon. Übersetzt von Martin Heinen.

10.1. Übersicht

Dieses Kapitel bietet eine Einführung in die Konzepte der Systemsicherheit. Neben einigen Daumenregeln werden weiterführende Themen wie S/Key, OpenSSL und Kerberos diskutiert. Die meisten der hier besprochenen Punkte treffen sowohl auf die Systemsicherheit sowie die Internetsicherheit zu. Das Internet hat aufgehört ein ``friedlicher'' Ort zu sein, an dem Sie nur nette Leute finden werden. Es ist unumgänglich, dass Sie Ihre Daten, Ihr geistiges Eigentum, Ihre Zeit und vieles mehr vor dem Zugriff von Hackern schützen.

FreeBSD besitzt eine Reihe von Werkzeugen und Mechanismen, um die Integrität und die Sicherheit Ihrer Systeme und Netzwerke zu gewährleisten.

Nach dem Sie dieses Kapitel durchgearbeitet haben, werden Sie:

  • Grundlegende auf FreeBSD bezogene Sicherheitsaspekte kennen.

  • Die verschiedenen Verschlüsselungsmechanismen von FreeBSD, wie DES oder MD5, kennen.

  • Wissen, wie Sie ein Einmalpasswörter zur Authentifizierung verwenden.

  • Wissen, wie Sie KerberosIV vor 5.0-Release einrichten.

  • Wissen, wie Sie Kerberos5 ab 5.0-Release einrichten.

  • Firewalls mit IPFW erstellen können.

  • Wissen, wie Sie IPsec konfigurieren und ein VPN zwischen FreeBSD/Windows Systemen einrichten,

  • OpenSSH, FreeBSDs Implementierung von SSH, konfigurieren und benutzen können.

  • Wie sie mithilfe des TrustedBSD-MAC-Frameworks Zugrifsskontrollen konfigurieren.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • Grundlegende Konzepte von FreeBSD und dem Internet verstehen.


10.2. Einführung

Sicherheit ist ein Konzept, das beim Systemadministrator anfängt und aufhört. Obwohl alle BSD UNIX Mehrbenutzersysteme über Sicherheitsfunktionen verfügen, ist es wohl eine der größten Aufgaben eines Systemadministrators zusätzliche Sicherheitsmechanismen zu erstellen und zu pflegen. Maschinen sind nur so sicher wie sie gemacht werden und Sicherheitsanforderungen stehen oft der Benutzerfreundlichkeit entgegen. Auf UNIX Systemen können sehr viele Prozesse gleichzeitig laufen und viele dieser Prozesse sind Server, das heißt von außen kann auf sie zugegriffen werden. In einer Zeit, in der die Minicomputer und Mainframes von gestern die Desktops von heute sind und Rechner immer mehr vernetzt werden, kommt der Sicherheit eine große Bedeutung zu.

Sicherheit wird am besten in mehreren Schichten implementiert. Kurz gesagt wollen Sie eine angemessene Anzahl Schichten einrichten, und dann das System auf Einbrüche hin beobachten. Die Sicherheitsmaßnahmen sollten nicht überzogen werden, da sie sonst das Entdecken von Einbrüchen stören und die Möglichkeit, Einbrüche zu entdecken, ist einer der wichtigsten Aspekte einer Sicherheitsmaßnahme. Es macht zum Beispiel wenig Sinn, jedes Programm mit der schg Option (siehe auch chflags(1)) zu schützen, weil dies verhindert, dass ein Angreifer eine leicht zu entdeckende Veränderung vornimmt und vielleicht dazu führt, dass Ihre Sicherheitsvorkehrungen den Angreifer überhaupt nicht entdecken.

Zur Systemsicherheit gehört auch die Beschäftigung mit verschiedenen Arten von Angriffen, auch solchen, die versuchen, ein System still zu legen, oder sonst unbrauchbar zu machen ohne root zu kompromittieren. Sicherheitsaspekte lassen sich in mehrere Kategorien unterteilen:

  1. Denial-of-Service Angriffe.

  2. Kompromittierte Accounts.

  3. Kompromittierter root-Account durch zugreifbare Server.

  4. Kompromittierter root-Account durch kompromittierte Accounts.

  5. Einrichten von Hintertüren.

Ein Denial-of-Service (Verhinderung von Diensten, DoS) Angriff entzieht einer Maschine Ressourcen, die sie zur Bereitstellung von Diensten benötigt. Meist versuchen Denial-of-Service Angriffe die Dienste oder den Netzwerkstack einer Maschine zu überlasten, um so die Maschine auszuschalten oder nicht nutzbar zu machen. Einige Angriffe versuchen, Fehler im Netzwerkstack auszunutzen, und die Maschine mit einem einzigen Paket auszuschalten. Diese Art des Angriffs kann nur verhindert werden, indem der entsprechende Fehler im Kernel behoben wird. Oft können Angriffe auf Dienste durch die Angabe von Optionen verhindert werden, die die Last, die ein Dienst auf das System unter widrigen Umständen ausüben kann, begrenzt. Angriffen auf das Netzwerk ist schwerer zu begegnen. Außer durch Trennen der Internetverbindung ist zum Beispiel einem Angriff mit gefälschten Paketen nicht zu begegnen. Diese Art von Angriff wird Ihr System zwar nicht unbrauchbar machen, kann aber die Internetverbindung sättigen.

Kompromittierte Accounts kommen noch häufiger als DoS Angriffe vor. Viele Systemadministratoren lassen auf ihren Maschinen noch die Dienste telnetd, rlogind, rshd und ftpd laufen. Verbindungen zu diesen Servern werden nicht verschlüsselt. Wenn Sie eine größere Benutzerzahl auf Ihrem System haben, die sich von einem entfernten System anmelden, ist die Folge davon, dass das Passwort eines oder mehrerer Benutzer ausgespäht wurde. Ein aufmerksamer Systemadministrator wird die Logs über Anmeldungen von entfernten Systemen auf verdächtige Quelladressen, auch für erfolgreiche Anmeldungen, untersuchen.

Es ist immer davon auszugehen, dass ein Angreifer, der Zugriff auf einen Account hat, Zugang zum root-Account erlangt. Allerdings gibt der Zugriff auf einen Account auf einem gut gesicherten und gepflegten System nicht notwendig Zugriff auf den root-Account. Diese Unterscheidung ist wichtig, da ein Angreifer, der keinen Zugang zu root besitzt, seine Spuren nicht verwischen kann. Er kann höchstens die Dateien des betreffenden Benutzers verändern oder die Maschine stilllegen. Kompromittierte Accounts sind sehr häufig, da Benutzer meist nicht dieselben Vorsichtsmaßnahmen wie Administratoren treffen.

Es gibt viele Wege, Zugang zum root-Account eines Systems zu bekommen: Ein Angreifer kann das Passwort von root kennen, er kann einen Fehler in einem Server entdecken, der unter root läuft und dann über eine Netzwerkverbindung zu diesem Server einbrechen. Oder er kennt einen Fehler in einem SUID-root Programm, der es ihm erlaubt, root zu werden, wenn er einmal einen Account kompromittiert hat. Wenn ein Angreifer einen Weg gefunden hat, root zu werden, braucht er vielleicht keine Hintertür auf dem System installieren. Viele der heute bekannten und geschlossenen Sicherheitslöcher, die zu einem root Zugriff führen, verlangen vom Angreifer einen erheblichen Aufwand, um seine Spuren zu verwischen. Aus diesem Grund wird er sich wahrscheinlich entschließen, eine Hintertür (engl. Backdoor) zu installieren. Eine Hintertür erlaubt es dem Angreifer leicht auf den root-Account zuzugreifen. Einem klugen Systemadministrator erlaubt sie allerdings auch, den Einbruch zu entdecken. Wenn Sie es einem Angreifer verwehren, Hintertüren zu installieren, kann das schädlich für Ihre Sicherheit sein, da es vielleicht verhindert, dass die Lücke, die der Angreifer für den Einbruch ausgenutzt hat, entdeckt wird.

Sicherheitsmaßnahmen sollten immer in mehreren Schichten angelegt werden. Die Schichten können wie folgt eingeteilt werden:

  1. Absichern von root und Accounts.

  2. Absichern von unter root laufenden Servern und SUID/SGID Programmen.

  3. Absichern von Accounts.

  4. Absichern der Passwort-Datei.

  5. Absichern des Kernels, der Geräte und von Dateisystemen.

  6. Schnelles Aufdecken von unbefugten Veränderungen des Systems.

  7. Paranoia.

Die einzelnen Punkte der obigen Liste werden im nächsten Abschnitt genauer behandelt.


10.3. Absichern von FreeBSD

Kommandos und Protokolle: In diesem Abschnitt wird fett verwendet, um Kommandos oder Anwendungen zu kennzeichnen. Zum Beispiel wird SSH so gekennzeichnet, da es sowohl ein Protokoll wie auch ein Kommando ist.

Die folgenden Abschnitte behandeln die im letzten Abschnitt erwähnten Methoden Ihr FreeBSD-System zu sichern.


10.3.1. Absichern von root und Accounts

Zuallererst, kümmern Sie sich nicht um die Absicherung von Accounts, wenn Sie root noch nicht abgesichert haben. Auf den meisten Systemen ist root ein Passwort zugewiesen. Sie sollten immer davon ausgehen, dass dieses Passwort kompromittiert ist. Das heißt nicht, dass Sie das Passwort entfernen sollten, da es meist für den Konsolenzugriff notwendig ist. Vielmehr heißt es, dass Sie das Passwort nicht außerhalb der Konsole, auch nicht zusammen mit su(1), verwenden sollten. Stellen Sie sicher, dass Ihre PTYs in ttys als unsicher markiert sind und damit Anmeldungen von root mit telnet oder rlogin verboten sind. Wenn Sie andere Anwendungen wie SSH zum Anmelden benutzen, vergewissern Sie sich, dass dort ebenfalls Anmeldungen als root verboten sind. Für SSH editieren Sie /etc/ssh/sshd_config und überprüfen, dass PermitRootLogin auf NO gesetzt ist. Beachten Sie jede Zugriffsmethode - Dienste wie FTP werden oft vergessen. Nur an der Systemkonsole sollte ein direktes Anmelden als root möglich sein.

Natürlich müssen Sie als Systemadministrator root-Zugriff erlangen können. Dieser sollte aber durch zusätzliche Passwörter geschützt sein. Ein Weg, Zugang zu root zu ermöglichen, ist es, berechtigte Mitarbeiter in /etc/group in die Gruppe wheel aufzunehmen. Die Personen, die Mitglieder in der Gruppe wheel sind, können mit su zu root wechseln. Ihre Mitarbeiter sollten niemals die Gruppe wheel als primäre Gruppe in /etc/passwd besitzen. Mitarbeiter sollten der Gruppe staff angehören und über /etc/group in wheel aufgenommen werden. Es sollten auch nur die Mitarbeiter, die wirklich root Zugriff benötigen in wheel aufgenommen werden. Mit anderen Authentifizierungsmethoden müssen Sie niemanden in wheel aufnehmen. Wenn Sie z.B. Kerberos benutzen, wechseln Sie mit ksu(1) zu root und der Zugriff wird mit der Datei .k5login geregelt. Dies ist vielleicht eine bessere Lösung, da es der wheel-Mechanismus einem Angreifer immer noch möglich macht, den root-Account zu knacken, nachdem er einen Mitarbeiter-Account geknackt hat. Obwohl der wheel-Mechanismus besser als gar nichts ist, ist er nicht unbedingt die sicherste Lösung.

Indirekt können Sie die Accounts von Mitarbeitern und damit auch den Zugriff auf root schützen, indem Sie eine alternative Zugangsmethode verwenden und die Accounts der Mitarbeiter mit einem ungültigen verschlüsselten Passwort versehen. Mit vipw(8) können Sie jedes verschlüsselte Passwort mit einem ``*'' Zeichen ersetzen. Das Kommando wird /etc/master.passwd und die Benutzer/Passwort Datenbank aktualisieren und die Passwort Authentifizierung abstellen.

Ein Account wie

foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh

sollte wie folgt abgeändert werden:

foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh

Da ein verschlüsseltes Passwort niemals ein ``*'' sein kann, verhindert dies die normale Anmeldung. Damit müssen sich die Mitarbeiter mit anderen Mechanismen wie kerberos(1) oder ssh(1) authentifizieren. Wenn Sie etwas wie Kerberos benutzen, müssen Sie die Maschinen, die die Kerberos-Server beheimaten und die Maschinen der Benutzer absichern. Wenn Sie öffentliche/private Schlüssel mit SSH benutzen, muss die Maschine von der die Anmeldung gestartet wird, gesichert werden. Als zusätzliche Sicherheitsschicht können Sie das Schlüsselpaar beim Erstellen mit ssh-keygen(1) durch ein Passwort schützen. Dadurch, dass Sie die Passwörter Ihrer Mitarbeiter als ungültig markiert haben, stellen Sie sicher, dass sich die Mitarbeiter nur mit den sicheren Methoden, die Sie aufgesetzt haben, anmelden können. Dies zwingt alle Mitarbeiter, verschlüsselte Verbindungen für ihre Sitzungen zu verwenden, und schließt ein wichtiges Loch, dass gerne von Angreifern ausgenutzt wird: Das Abhören des Netzwerks von einer anderen weniger gesicherten Maschine.

Die indirekten Sicherheitsmechanismen setzen voraus, dass Sie sich von einer restriktiven Maschine auf einer weniger restriktiven Maschine anmelden. Wenn zum Beispiel auf Ihrem Hauptrechner alle möglichen Arten von Servern laufen, so sollten auf Ihrer Workstation keine Server laufen. Um Ihre Workstation vernünftig abzusichern, sollten auf Ihr so wenig Server wie möglich bis hin zu keinem Server laufen. Sie sollten zudem über einen Bildschirmschoner verfügen, der mit einem Passwort gesichert ist. Natürlich kann ein Angreifer, der physikalischen Zugang zu einer Maschine hat, jede Art von Sicherheitsmechanismen umgehen. Dieses Problem sollten Sie daher auch in Ihren Überlegungen berücksichtigen. Beachten Sie dabei aber, dass der Großteil der Einbrüche über das Netzwerk erfolgt und die Einbrecher keinen Zugang zu der Maschine besitzen.

Mit Kerberos können Sie das Passwort eines Mitarbeiters an einer Stelle ändern und alle Maschinen, auf denen der Mitarbeiter einen Account hat, beachten die Änderung sofort. Wird der Account eines Mitarbeiters einmal kompromittiert, so sollte die Fähigkeit, das Passwort mit einem Schlag auf allen Maschinen zu ändern, nicht unterschätzt werden. Mit einzelnen Passwörtern wird es schwierig, das Passwort auf N Maschinen zu ändern. Mit Kerberos können Sie auch Beschränkungen für Passwörter festlegen: Nicht nur das Ticket kann nach einiger Zeit ungültig werden, Sie können auch festlegen, dass ein Benutzer nach einer bestimmten Zeit, z.B. nach einem Monat, das Passwort wechseln muss.


10.3.2. Absichern von unter root laufenden Servern und SUID/SGID Programmen

Ein kluger Systemadministrator lässt nur die Dienste, die er wirklich braucht, laufen; nicht mehr und auch nicht weniger. Beachten Sie, dass Server von Dritten die fehleranfälligsten sind. Wenn Sie z.B. eine alte Version von imapd oder popper laufen lassen, ist das so, als würden Sie der ganzen Welt freien Zugang zu root geben. Lassen Sie keine Server laufen, die Sie vorher nicht genau überprüft haben. Viele Server müssen nicht unter root laufen, zum Beispiel können ntalk, comsat und finger in speziellen Sandkästen unter einem Benutzer laufen. Ein Sandkasten ist keine perfekte Lösung, wenn Sie nicht eine Menge Arbeit in die Konfiguration investieren, doch bewährt sich hier das Prinzip, die Sicherheit in Schichten aufzubauen. Wenn es einem Angreifer gelingt, in einen Server, der in einem Sandkasten läuft, einzubrechen, dann muss er immer noch aus dem Sandkasten selber ausbrechen. Je mehr Schichten der Angreifer zu durchbrechen hat, desto kleiner sind seine Aussichten auf Erfolg. In der Vergangenheit wurden praktisch in jedem Server, der unter root läuft, Lücken gefunden, die zu einem root Zugriff führten. Dies betrifft selbst die grundlegenden Systemdienste. Wenn Sie eine Maschine betreiben, auf der man sich nur mit SSH anmelden kann, dann stellen Sie die Dienste telnetd, rshd oder rlogind ab!

In der Voreinstellung laufen unter FreeBSD ntalkd, comsat und finger nun in einem Sandkasten. Ein weiteres Programm, das in einem Sandkasten laufen sollte, ist named(8). In /etc/defaults/rc.conf sind die notwendigen Argumente, um named in einem Sandkasten laufen zu lassen, in kommentierter Form schon enthalten. Abhängig davon, ob Sie ein neues System installieren oder ein altes System aktualisieren, sind die hierfür benötigten Benutzer noch nicht installiert. Ein kluger Systemadministrator sollte immer nach Möglichkeiten suchen, Server in einem Sandkasten laufen zu lassen.

Einige Server wie sendmail, popper, imapd und ftpd werden normalerweise nicht in Sandkästen betrieben. Zu einigen Servern gibt es Alternativen, aber diese wollen Sie vielleicht wegen der zusätzlich nötigen Arbeit nicht installieren (ein weiteres Beispiel für den Widerspruch zwischen Sicherheit und Benutzerfreundlichkeit). In diesem Fall müssen Sie die Server unter root laufen lassen und auf die eingebauten Mechanismen vertrauen, Einbrüche zu entdecken.

Weitere potentielle Löcher, die zu einem root-Zugriff führen können, sind die auf dem System installierten SUID- und SGID-Programme. Die meisten dieser Programme wie rlogin stehen in /bin, /sbin, /usr/bin, oder /usr/sbin. Obwohl nichts 100% sicher ist, können Sie davon ausgehen, dass die SUID- und SGID-Programme des Basissystems ausreichend sicher sind. Allerdings werden ab und an in diesen Programmen Löcher gefunden. 1998 wurde in Xlib ein Loch gefunden, das xterm, der normal mit SUID installiert wird, verwundbar machte. Es ist besser auf der sicheren Seite zu sein, als sich später zu beklagen, darum wird ein kluger Systemadministrator den Zugriff auf SUID-Programme mit einer Gruppe, auf die nur Mitarbeiter zugreifen können, beschränken. SUID-Programme, die niemand benutzt, sollten mit chmod 000 deaktiviert werden. Zum Beispiel braucht ein Server ohne Bildschirm kein xterm Programm. SGID-Programme sind vergleichbar gefährlich. Wenn ein Einbrecher Zugriff auf SGID-kmem Programm erhält, kann er vielleicht /dev/kmem und damit die verschlüsselte Passwortdatei lesen. Dies kompromittiert unter Umständen jeden Account, der mit einem Passwort geschützt ist. Alternativ kann ein Einbrecher, der in die Gruppe kmem eingebrochen ist, die Tastendrücke auf PTYs verfolgen. Dies schließt auch PTYs mit ein, auf denen sich ein Benutzer mit sicheren Methoden anmeldet. Ein Einbrecher, der Zugriff auf die tty Gruppe hat, kann auf fast jeden Terminal anderer Benutzer schreiben. Wenn der Benutzer einen Terminal-Emulator benutzt, der über eine Tastatur-Simulation verfügt, könnte der Angreifer Daten generieren, die den Terminal veranlassen, ein Kommando unter diesem Benutzer laufen zu lassen.


10.3.3. Absichern von Accounts

Accounts sind für gewöhnlich sehr schwierig abzusichern. Während Sie drakonische Beschränkungen für Ihre Mitarbeiter einrichten und deren Passwörter als ungültig markieren können, werden Sie das vielleicht bei den normalen Accounts nicht durchsetzen. Wenn Sie über ausreichend Macht verfügen, gelingt es Ihnen vielleicht doch, ansonsten müssen Sie diese Accounts aufmerksam überwachen. Wegen der zusätzlichen Administrationsarbeit und der nötigen technischen Unterstützung ist die Verwendung von SSH und Kerberos mit normalen Accounts erschwert, obwohl das natürlich sicherer als die Verwendung von verschlüsselten Passwörtern ist.


10.3.4. Absichern der Passwort-Datei

Der einzig sichere Weg ist, so viele Accounts wie möglich als ungültig zu markieren und SSH oder Kerberos zu benutzen, um auf sie zuzugreifen. Obwohl die Datei /etc/spwd.db, die die verschlüsselten Passwörter enthält, nur von root gelesen werden kann, mag ein Angreifer lesenden Zugriff auf diese Datei erlangen, ohne die Fähigkeit sie auch zu beschreiben.

Ihre Überwachungsskripten sollten Änderungen an der Passwort-Datei melden (siehe Überprüfen der Integrität von Dateien weiter unten).


10.3.5. Absichern des Kernels, der Geräte und von Dateisystemen

Wenn ein Angreifer root-Zugriff erlangt, kann er so ziemlich alles mit Ihrem System anstellen, doch sollten Sie es ihm nicht zu leicht machen. Die meisten modernen Kernel haben zum Beispiel einen Gerätetreiber, der es erlaubt, Pakete abzuhören. Unter FreeBSD wird das Gerät bpf genannt. Für gewöhnlich wird ein Angreifer versuchen, dieses Gerät zu nutzen, um Pakete abzuhören. Sie sollten ihm diese Gelegenheit nicht geben und auf den meisten Systemen ist das Gerät bpf nicht nötig.

Auch wenn Sie bpf nicht verwenden, müssen Sie sich immer noch um /dev/mem und /dev/kmem sorgen. Außerdem kann der Angreifer immer noch auf die rohen Geräte (raw devices) schreiben. Weiterhin gibt es ein Programm zum Nachladen von Modulen in den Kernel: kldload(8). Ein unternehmungslustiger Angreifer kann dies benutzen, um sein eigenes bpf oder ein anderes zum Abhören geeignetes Gerät in den laufenden Kernel einzubringen. Um diese Probleme zu vermeiden, müssen Sie den Kernel auf einer höheren Sicherheitsstufe, mindestens 1, laufen lassen. Die Sicherheitsstufe wird durch die Variable kern.securelevel, die mit sysctl gesetzt werden kann, angegeben. Nachdem Sie die Sicherheitsstufe auf 1 gesetzt haben, sind schreibende Zugriffe auf rohe Geräte verboten und die speziellen chflags Optionen, wie schg werden erzwungen. Sie müssen sicherstellen, dass die schg Option auf allen kritischen Programmen, Verzeichnissen und Skripten, die bis zum Setzen der Option laufen, aktiviert ist. Das mag übertrieben sein da eine Migration des Systems erschwert wird, wenn Sie auf einer höheren Sicherheitsstufe arbeiten. Sie können einen Kompromiss erreichen, indem Sie das System auf einer erhöhten Sicherheitsstufe laufen lassen, aber die schg Option nicht für jede Datei und jedes Verzeichnis auf der Welt setzen. Eine andere Möglichkeit besteht darin, / und /usr einfach schreibgeschützt einzuhängen. Bedenken Sie, dass Sie das Aufdecken eines Einbruchs vielleicht verhindern, wenn Sie zu drastische Maßnahmen zum Schutz Ihres Systems verwenden.


10.3.6. Überprüfen der Integrität von Dateien

Sie können die Systemkonfiguration und die Dateien nur so weit schützen, wie es die Benutzbarkeit des Systems nicht einschränkt. Wenn Sie zum Beispiel mit chflags die Option schg auf die meisten Dateien in / und /usr setzen, kann das Ihre Arbeit mehr behindern als nützen. Die Maßnahme schützt zwar die Dateien, schließt aber auch eine Möglichkeit, Veränderungen zu entdecken, aus. Die letzte Schicht des Sicherheitsmodells - das Aufdecken von Einbrüchen - ist sicherlich die wichtigste. Alle Sicherheitsmaßnahmen sind nichts wert, oder wiegen Sie in falscher Sicherheit, wenn Sie nicht in der Lage sind, einen möglichen Einbruch zu entdecken. Die Hälfte der Sicherheitsmaßnahmen hat die Aufgabe, einen Einbruch zu verlangsamen, um es zu ermöglichen, den Einbrecher auf frischer Tat zu ertappen.

Der beste Weg, einen Einbruch zu entdecken, ist es, nach veränderten, fehlenden oder unerwarteten Dateien zu suchen. Der wiederum beste Weg, nach veränderten Dateien zu suchen, ist es, die Suche von einem anderen (oft zentralen) besonders geschützten System durchzuführen. Es ist wichtig, dass Ihre Sicherheitsüberprüfungen vor einem Angreifer verborgen bleiben und daher sind sie auf einem besonders geschützten System gut aufgehoben. Um dies optimal auszunutzen, müssen Sie dem besonders geschützten System Zugriffsrechte auf die zu schützenden Systeme geben. Sie können die Dateisysteme der zu schützenden Systeme schreibgeschützt für das besonders geschützte System exportieren, oder Sie können der besonders geschützten Maschine SSH auf die anderen Maschinen erlauben, indem Sie SSH Schlüsselpaare installieren. Mit Ausnahme des verursachten Netzwerkverkehrs ist die NFS-Methode die am wenigsten sichtbare. Sie erlaubt es Ihnen, nahezu unentdeckt die Dateisysteme der Clients zu beobachten. Wenn Ihr besonders geschütztes System mit den Clients über einen Switch verbunden ist, ist die NFS-Methode oft das Mittel der Wahl. Wenn das besonders geschützte System allerdings mit einem Hub verbunden ist, oder der Zugriff über mehrere Router geschieht, ist die NFS-Methode aus der Netzwerksicht zu unsicher. In einem solchen Fall ist SSH besser geeignet, auch wenn es deutliche Spuren hinterlässt.

Wenn das besonders geschützte System lesenden Zugriff auf die Clients hat, müssen Sie Skripten schreiben, die die Überwachung durchführen. Wenn Sie die NFS-Methode verwenden, können Sie dazu einfache Systemwerkzeuge wie find(1) und md5(1) benutzen. Am besten berechnen Sie einmal am Tag MD5-Prüfsummen der Dateien, Konfigurationsdateien in /etc und /usr/local/etc sollten öfter überprüft werden. Wenn Unstimmigkeiten zwischen den auf der besonders geschützten Maschine gehaltenen MD5-Prüfsummen und den ermittelten Prüfsummen festgestellt werden, sollte Ihr System einen Systemadministrator benachrichtigen, der den Unstimmigkeiten dann nachgehen sollte. Ein gutes Skript überprüft das System auch auf verdächtige SUID-Programme sowie gelöschte oder neue Dateien in / und /usr.

Wenn Sie SSH anstelle von NFS benutzen, wird das Erstellen der Skripten schwieriger. Sie müssen die Skripten und die Programme wie find mit scp auf den Client kopieren. Damit machen Sie die Überprüfung für einen Angreifer sichtbar. Außerdem kann der SSH-Client auf dem Zielsystem schon kompromittiert sein. Zusammenfassend, kann der Einsatz von SSH nötig sein, wenn Sie über ungesicherte Verbindungen arbeiten, aber der Umgang mit dieser Methode ist auch sehr viel schwieriger.

Ein gutes Sicherheitsskript wird auch Dateien von Benutzern, die den Zugriff auf ein System ermöglichen, wie .rhosts, .shosts, .ssh/authorized_keys usw., auf Veränderungen untersuchen, die über die Möglichkeiten einer Überprüfung mit MD5, die ja nur Veränderungen feststellen kann, hinausgehen.

Wenn Sie über große Partitionen verfügen, kann es zu lange dauern, jede Datei zu überprüfen. In diesem Fall sollten Sie beim Einhängen des Dateisystems Optionen setzen, die das Ausführen von SUID-Programmen und den Zugriff auf Geräte verbieten. mount(8) stellt dazu die Optionen nodev und nosuid zur Verfügung. Sie sollten diese Dateien aber trotzdem mindestens einmal die Woche überprüfen, da das Ziel dieser Schicht das Aufdecken eines Einbruchs, auch wenn er nicht erfolgreich war, ist.

Die Prozessüberwachung (siehe accton(8)) des Betriebssystems steht ein günstiges Werkzeug zur Verfügung, dass sich bei der Analyse eines Einbruchs als nützlich erweisen kann. Insbesondere können Sie damit herausfinden, wie der Einbrecher in das System eingedrungen ist, vorausgesetzt die Dateien der Prozessüberwachung sind noch alle intakt.

Schließlich sollten die Sicherheitsskripten die Logdateien analysieren. Dies sollte so sicher wie möglich durchgeführt werden, nützlich ist das Schreiben von Logdateien auf entfernte Systeme mit syslog. Ein Einbrecher wird versuchen, seine Spuren zu verwischen. Die Logdateien sind wichtig für den Systemadministrator, da er aus ihnen den Zeitpunkt und die Art des Einbruchs bestimmen kann. Eine Möglichkeit, die Logdateien unverändert aufzuheben, ist es, die Systemkonsole auf einen seriellen Port zu legen und die Informationen dort von einer gesicherten Maschine auszulesen.


10.3.7. Paranoia

Es schadet nicht, ein bisschen paranoid zu sein. Grundsätzlich darf ein Systemadministrator jede Sicherheitsmaßnahme treffen, die die Bedienbarkeit des Systems nicht einschränkt. Er kann auch Maßnahmen treffen, die die Bedienbarkeit einschränken, wenn er diese vorher genau durchdacht hat. Was noch wichtiger ist: Halten Sie sich nicht sklavisch an dieses Dokument, sondern führen Sie eigene Maßnahmen ein, um nicht einem künftigen Angreifer, der auch Zugriff auf dieses Dokument hat, alle Ihre Methoden zu verraten.


10.3.8. Denial-of-Service Angriffe

Dieser Abschnitt behandelt Denial-of-Service Angriffe (DoS). Ein DoS-Angriff findet typischerweise auf der Paketebene statt. Während Sie nicht viel gegen moderne Angriffe mit falschen Paketen, die das Netzwerk sättigen, ausrichten können, können Sie allerdings den Schaden in der Hinsicht begrenzen, dass Ihre Server von einem solchen Angriff nicht gestoppt werden.

  1. Begrenzen von fork() Aufrufen.

  2. Begrenzen von Sprungbrett-Angriffen (ICMP response Angriffen, ping zu Broadcast-Adressen usw.).

  3. Kernel-Cache für Routen.

Ein häufiger DoS-Angriff gegen forkende Server versucht den Server dazu zu bringen, möglichst viele Prozesse, viele Dateideskriptoren und viel Speicher zu verbrauchen, bis hin zu dem Punkt, an dem die Maschine ausfällt. inetd(8) besitzt einige Optionen, um diese Art von Angriffen zu begrenzen. Beachten Sie bitte, dass es möglich ist, einen Ausfall einer Maschine zu verhindern, doch ist es generell nicht möglich, den Ausfall eines Dienstes bei dieser Art von Angriffen zu verhindern. Lesen Sie sich bitte die Manualpages von inetd gut durch und achten Sie speziell auf die Optionen -c, -C und -R. Angriffe mit gefälschten IP-Adressen umgehen -C, so dass normalerweise eine Kombination der Optionen benutzt werden muss. Manche Server, die nicht von inetd gestartet werden, besitzen Optionen, um den Start über fork() einzuschränken.

Sendmail besitzt die Option -OMaxDaemonChildren, die besser als die eingebauten Optionen zur Begrenzung der Systemauslastung funktioniert. Sie sollten beim Start von sendmail MaxDaemonChildren so hoch setzen, dass Sie die erwartete Auslastung gut abfangen können. Allerdings sollten Sie den Wert nicht so hoch setzen, dass der Rechner über seine eigenen Füße fällt. Es ist auch klug, sendmail im Queue-Modus (-ODeliveryMode=queued) laufen zu lassen. Der Dæmon (sendmail -bd) sollte getrennt von den Queue-Läufen (sendmail -q15m) laufen. Wenn Sie trotzdem eine sofortige Auslieferung der Post wünschen, können Sie die Queue in einem geringeren Intervall, etwa -q1m, abarbeiten. Geben Sie für dieses sendmail aber einen vernünftigen Wert für MaxDaemonChildren an, um Fehler zu verhindern.

Syslogd kann direkt angegriffen werden. Daher empfehlen wir Ihnen unbedingt die Option -s zu benutzen. Sollte das nicht möglich sein, benutzen Sie bitte -a.

Vorsicht ist auch mit Diensten geboten, die automatisch eine Rückverbindung eröffnen, wie der reverse-identd der tcpwrapper. Diese Funktion der tcpwrapper sollten Sie normalerweise nicht benutzen.

Es empfiehlt sich sehr, interne Dienste vor externen Zugriffen durch eine Firewall an der Grenze Ihres Netzwerks zu schützen. Dahinter steckt mehr die Idee, das Netzwerk vor Überlastung durch Angriffe von außen zu schützen, als interne Dienste vor einem root-Zugriff aus dem Netz zu schützen. Konfigurieren Sie immer eine Firewall, die alle Zugriffe blockiert, das heißt blockieren Sie alles außer den Ports A, B, C, D und M-Z. Damit können Sie Zugriffe auf alle niedrigen Ports blockieren und Zugriffe auf spezielle Dienste wie named, wenn Sie den primären Namensdienst für eine Zone anbieten, ntalkd oder sendmail erlauben. Wenn Sie die Firewall so konfigurieren, das sie in der Voreinstellung alle Zugriffe erlaubt, ist es sehr wahrscheinlich, dass Sie vergessen, eine Reihe von Diensten zu blockieren bzw. einen internen Dienst einführen und dann vergessen die Firewall zu aktualisieren. Sie können immer die höheren Portnummern öffnen, ohne die niedrigen Portnummern, die nur von root benutzt werden dürfen, zu kompromittieren. Beachten Sie bitte auch, dass es FreeBSD erlaubt, die Portnummern, die für dynamische Verbindungen zur Verfügung stehen, zu konfigurieren. Mit sysctl lassen sich verschiedene Bereiche der net.inet.ip.portrange Variablen setzen (eine Liste erhalten Sie mit sysctl -a | fgrep portrange). So können Sie zum Beispiel die Portnummern 4000 bis 5000 für den normalen Bereich und die Nummern 49152 bis 65535 für den hohen Bereich vorsehen. Dies erleichtert Ihnen die Konfiguration der Firewall, da Sie nun Zugriffe auf Ports unterhalb von 4000, mit Ausnahme der Dienste, die von außen erreichbar sein sollen, blockieren können.

Eine andere Form eines DoS-Angriffs nutzt einen Server als Sprungbrett, der Server wird dabei so angegriffen, dass seine Antworten ihn selber, das lokale Netzwerk oder einen anderen Server überlasten. Der am häufigsten verwendete Angriff dieser Art ist der ICMP ping broadcast Angriff. Der Angreifer fälscht dazu ping-Pakete, die zu der Broadcast-Adresse Ihres LANs gesendet werden, indem er darin als Quelladresse die Adresse des Opfers einsetzt. Wenn die Router an der Grenze Ihres Netzwerks ping-Pakete auf Broadcast-Adressen nicht abwehren, wird Ihr LAN genügend Netzwerkverkehr generieren, um das Ziel des Angriffs zu überlasten. Dies kann besonders effektiv sein, wenn der Angreifer diese Methode mit mehreren Dutzend Broadcast-Adressen über mehrere Netzwerke einsetzt. Es wurden schon Broadcast-Angriffe mit über 120 Megabit pro Sekunde gemessen. Ein zweiter Sprungbrett-Angriff wird gegen das Fehlerbehandlungssystem von ICMP eingesetzt. Indem ein Angreifer Pakete konstruiert, die eine ICMP-Fehlermeldung hervorrufen, kann er das einkommende Netzwerk des Servers sättigen und diesen wiederum veranlassen sein ausgehendes Netzwerk mit ICMP-Antworten zu sättigen. Diese Art des Angriffs kann alle mbuf-Strukturen auf dem Server aufbrauchen und damit den Server stilllegen, insbesondere wenn der Server nicht in der Lage ist, die generierten ICMP-Antworten schnell genug abzuführen. Der FreeBSD-Kernel besitzt eine neue Option ICMP_BANDLIM, die die Auswirkungen von solchen Angriffen begrenzen kann. Die letzte weit verbreitete Form von Sprungbrett-Angriffen verwendet interne inetd-Dienste wie den UDP echo-Dienst. Der Angreifer fälscht dazu einfach ein UDP-Paket, indem er als Quellport den echo-Port von Server A und als Zielport den echo-Port von Server B angibt, wobei beide Server in Ihrem LAN stehen. Die beiden Server werden nun dieses Paket zwischen sich hin und her schicken. Der Angreifer kann die beiden Server und das LAN einfach damit überlasten, dass er mehrere Pakete dieser Art generiert. Ähnliche Probleme gibt es mit dem internen chargen-Port, daher sollten Sie die internen inetd-Testdienste abstellen.

Gefälschte IP-Pakete können dazu benutzt werden, den Kernel-Cache für Routen zu überlasten. Schauen Sie sich bitte die sysctl-Parameter net.inet.ip.rtexpire, rtminexpire und rtmaxcache an. Ein Angriff der gefälschte Pakete mit zufälligen Quelladressen einsetzt, bewirkt, dass der Kernel eine Route im Route-Cache anlegt, die Sie sich mit netstat -rna | fgrep W3 ansehen können. Diese Routen verfallen für gewöhnlich nach 1600 Sekunden. Wenn der Kernel feststellt, dass die Routingtabelle im Cache zu groß geworden ist, wird er dynamisch den Wert von rtexpire verringern. Dieser Wert wird aber nie kleiner werden als rtminexpire. Daraus ergeben sich zwei Probleme:

  1. Der Kernel reagiert nicht schnell genug, wenn ein Server mit einer niedrigen Grundlast plötzlich angegriffen wird.

  2. rtminexpire ist nicht klein genug, um einen anhaltenden Angriff zu überstehen.

Wenn Ihre Server über eine T3 oder eine noch schnellere Leitung mit dem Internet verbunden sind, ist es klug, mit sysctl(8) die Werte für rtexpire und rtminexpire händisch zu setzen. Setzen Sie bitte keinen der Werte auf Null, außer Sie wollen die Maschine zum Erliegen bringen. Ein Wert von 2 Sekunden für beide Parameter sollte ausreichen, um die Routingtabelle vor einem Angriff zu schützen.


10.3.9. Anmerkungen zum Zugriff mit Kerberos und SSH

Es gibt ein paar Punkte, die Sie beachten sollten, wenn Sie Kerberos oder SSH einsetzen wollen. Kerberos V ist ein ausgezeichnetes Authentifizierungsprotokoll. Leider gibt es Fehler, in den für Kerberos angepassten Versionen von telnet und rlogin, die sie ungeeignet für den Umgang mit binären Datenströmen machen. Weiterhin verschlüsselt Kerberos Ihre Sitzung nicht, wenn Sie nicht die -x Option verwenden, mit SSH wird dagegen alles verschlüsselt.

Ein Problem mit SSH sind Weiterleitungen von Verbindungen. Wenn Sie von einer sicheren Maschine, auf der sich Ihre Schlüssel befinden, eine Verbindung zu einer ungesicherten Maschine aufmachen, wird für die Dauer der Sitzung ein Port für Weiterleitungen geöffnet. Ein Angreifer, der auf der unsicheren Maschine Zugang zu root hat, kann diesen Port benutzen, um Zugriff auf andere Maschinen zu erlangen, die mit Ihren Schlüsseln zugänglich sind.

Wir empfehlen Ihnen, für die Logins Ihrer Mitarbeiter immer SSH zusammen mit Kerberos einzusetzen. Damit reduzieren Sie die Abhängigkeit von potentiell gefährdeten Schlüsseln und schützen gleichzeitig die Passwörter mit Kerberos. SSH-Schlüsselpaare sollten nur für automatisierte Aufgaben von einem besonders gesicherten Server eingesetzt werden (Kerberos kann für diese Art von Aufgaben nicht eingesetzt werden). Weiterhin empfehlen wir Ihnen, das Weiterreichen von Schlüsseln in der SSH-Konfiguration abzustellen bzw. die from=IP/DOMAIN Option in authorized_keys zu verwenden, die den Schlüssel nur von bestimmten Maschinen aus nutzbar macht.


10.4. DES, MD5, und crypt()

Teile umgeschrieben und aktualisiert von Bill Swingle.

Jedem Benutzer eines UNIX Systems ist ein Passwort zugeordnet. Es scheint offensichtlich, dass das Passwort nur dem Benutzer und dem System bekannt sein muss. Um die Passwörter geheim zu halten, werden sie mit einer nicht umkehrbaren Hash-Funktion verschlüsselt, das heißt sie können leicht verschlüsselt aber nicht entschlüsselt werden. Was wir gerade als offensichtlich dargestellt haben, ist also nicht wahr: Das Betriebssystem kennt das Passwort wirklich nicht, es kennt nur das verschlüsselte Passwort. Die einzige Möglichkeit, das originale Passwort herauszufinden, besteht darin, alle möglichen Passwörter auszuprobieren (brute force Suche).

Zu der Zeit als UNIX entstanden ist, war die einzig sichere Möglichkeit Passwörter zu verschlüsseln, leider DES (Data Encryption Standard). Für die Einwohner der USA stellte das kein Problem dar, aber da der Quellcode von DES nicht aus den USA exportiert werden durfte, musste ein Weg gefunden werden, der die Gesetze der USA nicht verletzte und gleichzeitig die Kompatibilität mit anderen UNIX Systemen, die immer noch DES benutzten, wahrte.

Die Lösung bestand darin, die Verschlüsselungsbibliotheken aufzuspalten. Benutzer in den USA konnten die DES-Bibliotheken installieren und nutzen. In der Grundeinstellung benutzt FreeBSD MD5 als Verschlüsselungsmethode, das exportiert werden durfte und damit von jedem genutzt werden konnte. Es wird davon ausgegangen, dass MD5 sicherer als DES ist, so dass DES nur aus Kompatibilitätsgründen installiert werden sollte.


10.4.1. Erkennen der Verschlüsselungsmethode

Vor FreeBSD 4.4 war libcrypt.a ein symbolischer Link, der auf die Library zeigte, die die Verschlüsselungsroutinen enthielt. Seit FreeBSD 4.4 enthält libcrypt.a verschiedene Hash-Funktionen, deren Anwendung sich konfigurieren lässt. Momentan werden DES-, MD5- und Blowfish-Hash Funktionen unterstützt. In der Voreinstellung benutzt FreeBSD die MD5-Hash Funktion.

Sie können leicht herausfinden, welche Verschlüsselungsmethode von FreeBSD verwendet wird. Ein Weg besteht darin, die verschlüsselten Passwörter in /etc/master.passwd zu untersuchen. Passwörter, die mit MD5 verschlüsselt wurden, sind länger als die mit DES verschlüsselten und beginnen mit den Zeichen $1$. Passwörter, die mit $2$ anfangen, wurden mit der Blowfish-Funktion verschlüsselt. DES Passwörter besitzen keine offensichtlichen Merkmale, an denen sie identifiziert werden könnten. Sie sind aber kürzer als MD5-Passwörter und sind in einem 64 Zeichen umfassenden Alphabet kodiert, das das $-Zeichen nicht enthält. Ein relativ kurzes Passwort, das nicht mit einem $-Zeichen anfängt, ist wahrscheinlich ein DES-Passwort.

Die Verschlüsselungsmethode für neue Passwörter wird durch passwd_format in /etc/login.conf bestimmt. Der Wert dieser Variablen kann entweder des, md5 oder blf sein. Näheres schlagen Sie bitte in login.conf(5) nach.


10.5. Einmalpasswörter

S/Key ist ein Einmalpasswort System, das auf einer nicht umkehrbaren Hash-Funktion basiert. Aus Kompatibilitätsgründen benutzt FreeBSD MD4-Hashes, andere Systeme benutzen MD5 und DES-MAC. S/Key ist seit Version 1.1.5 Teil des FreeBSD Basissystems und wird auch auf einer wachsenden Anzahl anderer Systeme benutzt. S/Key ist eine geschützte Warenmarke von Bell Communications Research, Inc.

Ab der FreeBSD Version 5.0 wurde S/Key durch OPIE (One-time Passwords In Everything), das die gleichen Funktionen bietet, abgelöst. OPIE benutzt MD5 Hash-Funktionen.

Im Folgenden werden drei verschiedene Passwörter verwendet. Das Erste ist Ihr normales System- oder Kerberos-Passwort und wird im Folgenden ``System-Passwort'' genannt. Das Zweite ist das Einmalpasswort, das bei S/Key von key oder bei OPIE von opiekey generiert wird. Dieses Passwort wird von den Programmen keyinit oder opiepasswd und dem Login-Programm akzeptiert. Im Folgenden wird es ``Einmalpasswort'' genannt. Das Dritte Passwort ist das geheime Passwort, das Sie mit den Programmen key/opiekey (manchmal auch mit keyinit/opiepasswd) zum Erstellen der Einmalpasswörter verwenden. Dieses Passwort werden wir im Folgenden ``geheimes Passwort'' oder schlicht ``Passwort'' nennen.

Das geheime Passwort steht in keiner Beziehung zu Ihrem System-Passwort, beide können gleich sein, obwohl das nicht empfohlen wird. Die geheimen Passwörter von S/Key oder OPIE sind nicht auf eine Länge von 8 Zeichen, wie alte UNIX Passwörter[10], beschränkt. Sie können so lang sein, wie Sie wollen. Gebräuchlich sind Passwörter, die sich aus sechs bis sieben Wörtern zusammensetzen. Das S/Key oder OPIE System arbeitet größtenteils unabhängig von den auf UNIX Systemen verwendeten Passwort-Mechanismen.

Neben dem Passwort gibt es noch zwei Werte, die für S/Key und OPIE wichtig sind. Der erste ist der ``Initialwert'' (engl. seed oder key), der aus zwei Buchstaben und fünf Ziffern besteht. Der andere Wert ist der ``Iterationszähler'', der eine Zahl zwischen 1 und 100 ist. S/Key generiert das Einmalpasswort, indem es den Initialwert und das geheime Passwort aneinander hängt und dann die MD4/MD5 Hash-Funktion so oft, wie durch den Iterationszähler gegeben, anwendet. Das Ergebnis wird in sechs englische Wörter umgewandelt, die Ihr Einmalpasswort sind. Das Authentifizierungssystem (meistens PAM) merkt sich das zuletzt benutzte Einmalpasswort und Sie sind authentisiert, wenn die Hash-Funktion des Passworts dem vorigen Passwort entspricht. Da nicht umkehrbare Hash-Funktionen benutzt werden, ist es unmöglich, aus einem bekannten Passwort weitere gültige Einmalpasswörter zu berechnen. Der Iterationszähler wird nach jeder erfolgreichen Anmeldung um eins verringert und stellt so die Synchronisation zwischen Benutzer und Login-Programm sicher. Wenn der Iterationszähler den Wert 1 erreicht, müssen S/Key und OPIE neu initialisiert werden.

In jedem System werden drei Programme verwendet, die weiter unten beschrieben werden. Die Programme key und opiekey verlangen einen Iterationszähler, einen Initialwert und ein geheimes Passwort. Daraus generieren sie ein Einmalpasswort oder eine Liste von Einmalpasswörtern. Die Programme keyinit und opiepasswd werden benutzt, um S/Key bzw. OPIE zu initialisieren. Mit ihnen können Passwörter, Iterationszähler oder Initialwerte geändert werden. Als Parameter verlangen sie entweder ein geheimes Passwort oder einen Iterationszähler oder einen Initialwert und ein Einmalpasswort. Die Programme keyinfo und opieinfo geben den momentanen Iterationszähler und Initialwert eines Benutzers aus. Diese werden aus den Dateien /etc/skeykeys bzw. /etc/opiekeys ermittelt.

Im Folgenden werden vier verschiedene Tätigkeiten beschrieben. Zuerst wird erläutert, wie keyinit oder opiepasswd über eine gesicherte Verbindung eingesetzt werden, um Einmalpasswörter das erste Mal zu konfigurieren oder das Passwort oder den Initialwert zu ändern. Als nächstes wird erklärt, wie keyinit oder opiepasswd über eine nicht gesicherte Verbindung, zusammen mit key oder opiekey über eine gesicherte Verbindung, eingesetzt werden, um dasselbe zu erreichen. Als drittes wird beschrieben, wie key/opiekey genutzt werden, um sich über eine nicht gesicherte Verbindung anzumelden. Die vierte Tätigkeit beschreibt, wie mit key oder opiekey eine Reihe von Schlüsseln generiert werden, die Sie sich aufschreiben oder ausdrucken können, um sich von Orten anzumelden, die über keine gesicherten Verbindungen verfügen.


10.5.1. Einrichten über eine gesicherte Verbindung

Benutzen Sie keyinit um S/Key das erste Mal einzurichten, das Passwort oder den Initialwert zu ändern, während Sie über eine gesicherte Verbindung, das heißt an der Konsole oder über SSH angemeldet, sind:

% keyinit
Adding unfurl:
Reminder - Only use this method if you are directly connected.
If you are using telnet or rlogin exit with no password and use keyinit -s.
Enter secret password:
Again secret password:

ID unfurl s/key is 99 to17757
DEFY CLUB PRO NASH LACE SOFT

Mit OPIE benutzen Sie stattdessen opiepasswd:

% 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

Nach der Aufforderung Enter new secret pass phrase: oder Enter secret password: geben Sie bitte Ihr Passwort ein. Dies ist nicht das Passwort, mit dem Sie sich anmelden, sondern es wird genutzt, um das Einmalpasswort zu generieren. Die Zeile, die mit ``ID'' anfängt, enthält Ihren Login-Namen, den Iterationszähler und den Initialwert. Diese Werte müssen Sie sich nicht behalten, da das System sie zeigen wird, wenn Sie sich anmelden. In der letzten Zeile steht das Einmalpasswort, das aus diesen Parametern und Ihrem geheimen Passwort ermittelt wurde. Wenn sie sich jetzt wieder anmelden wollten, dann müssten Sie dieses Passwort benutzen.


10.5.2. Einrichten über eine nicht gesicherte Verbindung

Um Einmalpasswörter über eine nicht gesicherte Verbindung einzurichten, oder das geheime Passwort zu ändern, müssen Sie über eine gesicherte Verbindung zu einer Stelle verfügen, an der Sie die Kommandos key oder opiekey ausführen. Dies kann ein ``Desk Accessory'' auf einem Macintosh oder die Eingabeaufforderung auf einer Maschine, der Sie vertrauen, sein. Zudem müssen Sie einen Iterationszähler vorgeben (100 ist ein guter Wert) und einen Initialwert wählen, wobei Sie auch einen zufällig generierten benutzen können. Benutzen Sie keyinit -s über die ungesicherte Verbindung zu der Maschine, die Sie einrichten wollen:

% keyinit -s
Updating unfurl:
Old key: to17758
Reminder you need the 6 English words from the key command.
Enter sequence count from 1 to 9999: 100
Enter new key [default to17759]:
s/key 100 to 17759
s/key access password:
s/key access password:CURE MIKE BANE HIM RACY GORE

Mit OPIE benutzen Sie opiepasswd:

% 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

Drücken Sie Return, um die Vorgabe für den Initialwert, der von keyinit key genannt wird, zu akzeptieren. Bevor Sie nun das Zugriffspasswort (engl. access password) eingeben, rufen Sie über die gesicherte Verbindung key mit denselben Parametern auf:

% key 100 to17759
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password: <secret password>
CURE MIKE BANE HIM RACY GORE

Mit OPIE benutzen Sie opiekey:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Gehen Sie nun zurück zu der nicht gesicherten Verbindung und geben dort das eben generierte Einmalpasswort ein.


10.5.3. Erzeugen eines einzelnen Einmalpasswortes

Nachdem Sie S/Key oder OPIE eingerichtet haben, werden Sie beim nächsten Anmelden wie folgt begrüßt:

% telnet example.com
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.

FreeBSD/i386 (example.com) (ttypa)

login: <username>
s/key 97 fw13894
Password:

OPIE begrüßt Sie wie folgt:

% 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:

Anmerkung: S/Key und OPIE besitzen eine nützliche Eigenschaft, die hier nicht gezeigt ist. Wenn Sie an der Eingabeaufforderung Return eingeben, wird die echo-Funktion eingeschaltet, das heißt Sie sehen, was Sie tippen. Dies ist besonders nützlich, wenn Sie ein generiertes Passwort von einem Ausdruck abtippen müssen.

Jetzt müssen Sie Ihr Einmalpasswort generieren, um der Anmeldeaufforderung nachzukommen. Dies muss auf einem gesicherten System geschehen, auf dem Sie key oder opiekey ausführen können. Diese Programme gibt es übrigens auch für DOS, Windows und Mac OS. Beide Programme benötigen den Iterationszähler sowie den Initialwert als Parameter, die Sie mittels ``cut-and-paste'' direkt von der Login Aufforderung nehmen können.

Auf dem sicheren System:

% key 97 fw13894
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:
WELD LIP ACTS ENDS ME HAAG

Mit OPIE:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Mit dem jetzt generierten Einmalpasswort können Sie die Anmeldeprozedur fortsetzen:

login: <username>
s/key 97 fw13894
Password: <return to enable echo>
s/key 97 fw13894
Password [echo on]: WELD LIP ACTS ENDS ME HAAG
Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...

10.5.4. Erzeugen von mehreren Einmalpasswörtern

Manchmal müssen Sie sich an Orte begeben, an denen Sie keinen Zugriff auf eine sichere Maschine oder eine sichere Verbindung haben. In diesem Fall können Sie vorher mit key oder opiekey einige Einmalpasswörter generieren, die Sie sich ausdrucken und mitnehmen können. Zum Beispiel:

% key -n 5 30 zz99999
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password: <secret password>
26: SODA RUDE LEA LIND BUDD SILT
27: JILT SPY DUTY GLOW COWL ROT
28: THEM OW COLA RUNT BONG SCOT
29: COT MASH BARR BRIM NAN FLAG
30: CAN KNEE CAST NAME FOLK BILK

Mit OPIE:

% opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response.
Reminder: Don't 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 fünf Passwörter der Reihe nach an. Der letzte Iterationszähler wird durch 30 gegeben. Beachten Sie bitte, dass die Passwörter in der umgekehrten Reihenfolge, in der sie zu benutzen sind, ausgeben werden. Wenn Sie wirklich paranoid sind, schreiben Sie sich jetzt die Passwörter auf, ansonsten drucken Sie sie mit lpr aus. Beachten Sie, dass jede Zeile den Iterationszähler und das Einmalpasswort zeigt, trotzdem finden Sie es vielleicht hilfreich, eine Zeile nach Gebrauch durchzustreichen.


10.5.5. Einschränken der Benutzung von System-Passwörtern

Mit S/Key können Sie die Verwendung von System-Passwörtern, basierend auf dem Hostnamen, Benutzernamen, Terminal oder IP-Adresse, einschränken. Die Beschränkungen werden in /etc/skey.access definiert. Die Manualpage skey.access(5) beschreibt das Format dieser Datei sowie einige Vorsichtsmaßnahmen, die Sie treffen sollten, bevor Sie diese Datei einsetzen.

Wenn /etc/skey.access nicht existiert (wie auf FreeBSD 4.X Systemen), dann dürfen sich alle Benutzer mit ihren System-Passwörtern anmelden. Wenn die Datei existiert, dann müssen alle Benutzer S/Key zum Anmelden benutzen. Ausnahmen müssen explizit in skey.access konfiguriert werden. In allen Fällen werden System-Passwörter beim Anmelden auf der Konsole erlaubt.

Das folgende Beispiel für skey.access zeigt die drei geläufigsten Konfigurationsoptionen:

Das folgende Beispiel zeigt die drei häufigsten Ausnahmen:

permit internet 192.168.0.0 255.255.0.0
permit user fnord
permit port ttyd0

Die erste Zeile (permit internet) erlaubt es Benutzern, deren IP-Adresse, die immer noch gefälscht werden kann, mit dem angegebenen Wert und der angegebenen Maske übereinstimmt, System-Passwörter zu benutzen. Dies sollte nicht als Sicherheitsmechanismus missverstanden werden, sondern sollte autorisierte Benutzer daran erinnern, dass sie ein ungesichertes Netzwerk benutzen und sich mit S/Key anmelden müssen.

Die zweite Zeile (permit user) erlaubt es dem angegebenen Benutzer, hier fnord, jederzeit System-Passwörter zu verwenden. Dies sollte allerdings nur für Benutzer konfiguriert werden, die das key Programm nicht benutzen können (Leute mit ``dumb'' Terminals oder wirklich uneinsichtige).

Die dritte Zeile (permit port) erlaubt allen Benutzern, die sich an dem angegebenen Terminal anmelden, System-Passwörter zu benutzen. Sie sollte für Einwählverbindungen genutzt werden.

Wie S/Key kann OPIE die Verwendung von System-Passwörtern abhängig von der Quell-IP-Adresse einschränken. Die dazu nötigen Einstellungen werden in der Datei /etc/opieaccess vorgenommen, die auf Systemen ab FreeBSD 5.0 vorhanden ist. Weitere Informationen über diese Datei und Sicherheitshinweise zu ihrer Verwendung entnehmen Sie bitte der Hilfeseite opieaccess(5).

Die Datei opieaccess kö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 Quell-IP-Adressen anmelden, ihr System-Passwort zu verwenden. Beachten Sie bitte, dass eine Quell-IP-Adresse leicht gefälscht werden kann.

Findet sich in opieaccess kein passender Eintrag, muss die Anmeldung mit OPIE erfolgen.


10.6. KerberosIV

Beigesteuert von Mark Murray. Basiert auf einem Beitrag von Mark Dapoz.

Kerberos ist ein zusätzliches Netzwerkprotokoll, das es Benutzern erlaubt, sich über einen sicheren Server zu authentifizieren. Dienste wie rlogin, rcp oder das sichere Kopieren von Dateien zwischen Systemen und andere risikoreiche Tätigkeiten werden durch Kerberos erheblich sicherer und kontrollierbarer.

Die folgende Anleitung kann nur als Wegweiser dazu dienen, wie Sie Kerberos für FreeBSD konfigurieren. Für eine komplette Beschreibung des Systems, sollten Sie sich auf jeden Fall die entsprechenden Manualpage ansehen.


10.6.1. Installation von KerberosIV

Kerberos ist eine optionale Komponente von FreeBSD. Am leichtesten installieren Sie die Software, wenn Sie bei der ersten Installation von FreeBSD in sysinstall die Distribution krb4 oder krb5 auswählen. Damit installieren Sie entweder die ``eBones'' (KerberosIV) oder ``Heimdal'' (Kerberos5) Version von Kerberos. Beide Versionen werden mit FreeBSD ausgeliefert, da sie außerhalb von den USA oder Kanada entwickelt werden. Sie unterliegen deshalb auch nicht den restriktiven Exportbeschränkungen der USA und sind auch für Bewohner anderer Länder zugänglich.

Als Alternative steht die MIT Variante von Kerberos in der Ports-Kollektion unter security/krb5 zur Verfügung.


10.6.2. Erstellen der initialen Datenbank

Die folgenden Schritte werden nur auf dem Kerberos-Server durchgeführt. Stellen Sie bitte vorher sicher, dass keine alten Kerberos-Datenbanken mehr vorhanden sind. Im Verzeichnis /etc/kerberosIV sollten sich nur die folgenden Dateien befinden:

# cd /etc/kerberosIV
# ls
README      krb.conf        krb.realms

Wenn noch andere Dateien, wie principal.* oder master_key, existieren, müssen Sie die alte Kerberos-Datenbank mit kdb_destroy löschen. Wenn Kerberos nicht läuft, können Sie die Dateien auch einfach löschen.

Sie sollten nun die Dateien krb.conf und krb.realms editieren, um Ihr Kerberos-Realm zu definieren. Das folgende Beispiel zeigt dies für das Realm EXAMPLE.COM auf dem Server grunt.example.com. krb.conf sollte wie folgt aussehen:

# cat krb.conf
EXAMPLE.COM
EXAMPLE.COM grunt.example.com admin server
CS.BERKELEY.EDU okeeffe.berkeley.edu
ATHENA.MIT.EDU kerberos.mit.edu
ATHENA.MIT.EDU kerberos-1.mit.edu
ATHENA.MIT.EDU kerberos-2.mit.edu
ATHENA.MIT.EDU kerberos-3.mit.edu
LCS.MIT.EDU kerberos.lcs.mit.edu
TELECOM.MIT.EDU bitsy.mit.edu
ARC.NASA.GOV trident.arc.nasa.gov

Die zusätzlich aufgeführten Realms brauchen Sie nicht anzulegen. Sie zeigen hier nur, wie man Kerberos dazu bringt, andere Realms zu erkennen. Sie können Sie also auch weglassen.

Die erste Zeile benennt das Realm, in dem das System arbeitet. Die anderen Zeilen enthalten Realm/Host Paare. Der erste Wert jeder Zeile ist das Realm, der zweite Teil ein Host, der in diesem Realm ``Key Distribution Center'' ist. Die Schlüsselwörter admin server nach einem Hostnamen bedeuten, dass dieser Host auch einen administrativen Datenbankserver zur Verfügung stellt. Weitere Erklärungen zu diesen Begriffen finden Sie in den Kerberos Manualpages.

Als nächstes muss grunt.example.com in das Realm EXAMPLE.COM aufgenommen werden. Des Weiteren erstellen wir einen Eintrag, der alle Rechner der Domäne .example.com in das Realm EXAMPLE.COM aufnimmt. krb.realms sollte danach so aussehen:

# cat krb.realms
grunt.example.com EXAMPLE.COM
.example.com EXAMPLE.COM
.berkeley.edu CS.BERKELEY.EDU
.MIT.EDU ATHENA.MIT.EDU
.mit.edu ATHENA.MIT.EDU

Die zusätzlichen Realms sind hier wieder als Beispiel gedacht. Sie können sie der Einfachheit halber auch weglassen.

Die erste Zeile nimmt ein einzelnes System in das Realm auf. Die anderen Zeilen zeigen, wie bestimmte Subdomänen einem bestimmten Realm zugeordnet werden.

Das folgende Kommando muss nur auf dem Kerberos-Server (oder ``Key Distribution Center'') laufen. Mit kdb_init können wir die Datenbank anlegen:

# kdb_init
Realm name [default  ATHENA.MIT.EDU ]: EXAMPLE.COM
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.

Enter Kerberos master key:

Anschließend muss der Schlüssel gespeichert werden, damit Server auf der lokalen Maschine darauf zugreifen können. Dies geschieht mit kstash:

# kstash

Enter Kerberos master key:

Current Kerberos master key version is 1.

Master key entered. BEWARE!

Das verschlüsselte Master-Passwort wurde in /etc/kerberosIV/master_key gesichert.


10.6.3. Anlegen von Prinzipals

Für jedes System, das mit Kerberos gesichert werden soll, müssen zwei Prinzipale in die Datenbank eingetragen werden. Ihre Namen sind kpasswd und rcmd. Beide Prinzipale müssen für jedes System angelegt werden, wobei die Instanz der Name des jeweiligen Systems ist.

Die Dæmonen kpasswd und rcmd erlauben es anderen Systemen, Kerberos-Passwörter zu ändern und Kommandos wie rcp(1), rlogin(1) und rsh(1) laufen zu lassen.

Beide Einträge werden im Folgenden angelegt:

# kdb_edit
Opening database...

Enter Kerberos master key:

Current Kerberos master key version is 1.

Master key entered.  BEWARE!
Previous or default values are in [brackets] ,
enter return to leave the same, or new value.

Principal name: passwd
Instance: grunt

<Not found>, Create [y] ? y

Principal: passwd, Instance: grunt, kdc_key_ver: 1
New Password:                    <---- geben Sie hier Zufallswerte ein
Verifying password

New Password: <---- geben Sie hier Zufallswerte ein

Random password [y] ? y

Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.
Principal name: rcmd
Instance: grunt

<Not found>, Create [y] ?

Principal: rcmd, Instance: grunt, kdc_key_ver: 1
New Password:       <---- geben Sie hier Zufallswerte ein
Verifying password

New Password:           <---- geben Sie hier Zufallswerte ein

Random password [y] ?

Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.
Principal name:         <---- geben Sie nichts an, um das Programm zu verlassen

10.6.4. Erstellen der Server-Datei

Wir müssen nun für jede Maschine die Instanzen, die Dienste definieren, aus der Datenbank mit ext_srvtab extrahieren. Die erstelle Datei muss auf einem sicheren Weg in das /etc/kerberosIV Verzeichnis jedes Clients kopiert werden. Die Datei muss auf jedem Server und auf jedem Client vorhanden sein und ist unabdingbar für Kerberos.

# ext_srvtab grunt
Enter Kerberos master key:

Current Kerberos master key version is 1.

Master key entered. BEWARE!
Generating 'grunt-new-srvtab'....

Das Kommando erzeugt Dateien mit einem temporären Namen, der es anderen Servern erlaubt, ihre Datei abzuholen. Die Datei muss auf dem entsprechenden System in srvtab umbenannt werden. Auf dem originalen System können Sie mv(1) benutzen, um die Datei umzubenennen:

# mv grunt-new-srvtab srvtab

Wenn die Datei für ein Client-System bestimmt ist und das Netzwerk nicht sicher ist, kopieren Sie die Datei auf ein bewegliches Medium und transportieren sie physikalisch. Kopieren Sie die Datei auf den Client in das Verzeichnis /etc/kerberosIV. Benennen Sie die Datei in srvtab um und setzen Sie schließlich noch die Berechtigungen auf 600:

# mv grumble-new-srvtab srvtab
# chmod 600 srvtab

10.6.5. Füllen der Datenbank

Wir können nun Benutzer in der Datenbank anlegen. Mit kdb_edit legen wir zuerst die Benutzerin jane an:

# kdb_edit
Opening database...

Enter Kerberos master key:

Current Kerberos master key version is 1.

Master key entered.  BEWARE!
Previous or default values are in [brackets] ,
enter return to leave the same, or new value.

Principal name: jane
Instance:

<Not found>, Create [y] ? y

Principal: jane, Instance: , kdc_key_ver: 1
New Password:                <---- geben Sie ein sicheres Passwort ein
Verifying password

New Password:                <---- wiederholen Sie die Eingabe
Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 255 ] ?
Attributes [ 0 ] ?
Edit O.K.
Principal name:          <---- geben Sie nichts an, um das Programm zu verlassen

10.6.6. Testen

Zuerst müssen die Kerberos-Dæmonen gestartet sein. Wenn Sie /etc/rc.conf richtig angepasst haben, passiert das automatisch, wenn Sie booten. Dieser Schritt ist nur auf dem Kerberos-Server notwendig, die Clients bekommen alles was sie brauchen aus dem /etc/kerberosIV Verzeichnis.

# kerberos &
Kerberos server starting
Sleep forever on error
Log file is /var/log/kerberos.log
Current Kerberos master key version is 1.

Master key entered. BEWARE!

Current Kerberos master key version is 1
Local realm: EXAMPLE.COM
# kadmind -n &
KADM Server KADM0.0A initializing
Please do not use 'kill -9' to kill this job, use a
regular kill instead

Current Kerberos master key version is 1.

Master key entered.  BEWARE!

Jetzt können wir mit kinit versuchen, ein Ticket für die ID jane, die wir oben angelegt haben, zu erhalten:

% kinit jane
MIT Project Athena (grunt.example.com)
Kerberos Initialization for "jane"
Password:

Mit klist können Sie sich vergewissern, dass Sie die Tickets auch erhalten haben:

% klist
Ticket file:    /tmp/tkt245
Principal:      jane@EXAMPLE.COM

  Issued           Expires          Principal
Apr 30 11:23:22  Apr 30 19:23:22  krbtgt.EXAMPLE.COM@EXAMPLE.COM

Versuchen Sie nun das Passwort mit passwd(1) zu ändern, um zu überprüfen, dass der kpasswd Dæmon auch auf der Kerberos-Datenbank autorisiert ist:

% passwd
realm EXAMPLE.COM
Old password for jane:
New Password for jane:
Verifying password
New Password for jane:
Password changed.

10.6.7. Anlegen von su Privilegien

Mit Kerberos kann jedem Benutzer, der root-Privilegien braucht, ein eigenes Passwort für su(1) zugewiesen werden. Dies wird dadurch erreicht, dass die Instanz eines Prinzipals root ist. Mit kbd_edit legen wir nun den Eintrag jane.root in der Kerberos-Datenbank an:

# kdb_edit
Opening database...

Enter Kerberos master key:

Current Kerberos master key version is 1.

Master key entered.  BEWARE!
Previous or default values are in [brackets] ,
enter return to leave the same, or new value.

Principal name: jane
Instance: root

<Not found>, Create [y] ? y

Principal: jane, Instance: root, kdc_key_ver: 1
New Password:                    <---- geben Sie ein sicheres Passwort ein
Verifying password

New Password:            <---- geben Sie das Passwort erneut ein

Principal's new key version = 1
Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ?
Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- Keep this short!
Attributes [ 0 ] ?
Edit O.K.
Principal name:                <---- geben Sie nichts an, um das Programm zu verlassen

Versuchen Sie nun, für diesen Prinzipal Tickets zu bekommen:

# kinit jane.root
MIT Project Athena (grunt.example.com)
Kerberos Initialization for "jane.root"
Password:

Als nächstes fügen wir den Prinzipal in .klogin von root ein:

# cat /root/.klogin
jane.root@EXAMPLE.COM

Jetzt benutzen wir su(1):

% su
Password:

und kontrollieren, welche Tickets wir haben:

# klist
Ticket file:    /tmp/tkt_root_245
Principal:      jane.root@EXAMPLE.COM

  Issued           Expires          Principal
May  2 20:43:12  May  3 04:43:12  krbtgt.EXAMPLE.COM@EXAMPLE.COM

10.6.8. Weitere Kommandos

In einem der Beispiele haben wir einen Prinzipal mit dem Namen jane und der Instanz root angelegt. Der Prinzipal entstand aus einem Benutzer mit dem gleichen Namen. Unter Kerberos ist es Standard, dass ein principal.instance der Form username.root es dem Benutzer username erlaubt, mit su(1) root zu werden, wenn die entsprechenden Einträge in .klogin von root existieren:

# cat /root/.klogin
jane.root@EXAMPLE.COM

Das gilt auch für die .klogin-Datei im Heimatverzeichnis eines Benutzers:

% cat ~/.klogin
jane@EXAMPLE.COM
jack@EXAMPLE.COM

Die Einträge erlauben jedem, der sich im Realm EXAMPLE.COM als jane oder jack mit kinit authentifiziert hat, mittels rlogin(1), rsh(1) oder rcp(1) auf den Account jane und dessen Dateien zuzugreifen.

Im folgenden Beispiel meldet sich jane mit Kerberos auf grunt an:

% kinit
MIT Project Athena (grunt.example.com)
Password:
% rlogin grunt
Last login: Mon May  1 21:14:47 from grumble
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.

FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

Im folgenden Beispiel wurde der Prinzipal jack mit einer Instanz null angelegt. Mit der obigen .klogin-Datei kann er sich nun auf derselben Maschine als jane anmelden:

% kinit
% rlogin grunt -l jane
MIT Project Athena (grunt.example.com)
Password:
Last login: Mon May  1 21:16:55 from grumble
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.
FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995

10.7. Kerberos5

Beigetragen von Tillman Hodgson. Beruht auf einem Beitrag von Mark Murray.

Das Basissystem enthält ab FreeBSD 5.1 nur noch Kerberos5. Die Konfiguration von Kerberos5 ist der Konfiguration von KerberosIV sehr ähnlich. Wenn Sie KerberosIV benötigen, installieren Sie den Port security/krb4. Der folgende Abschnitt beschreibt ausschließlich Kerberos5 für FreeBSD-Releases ab 5.0.

Kerberos ist ein Netzwerk-Protokoll, das Benutzer mithilfe eines sicheren Servers authentifiziert. Mit Risiken behaftete Dienste, wie das Anmelden an entfernten Systemen oder das Kopieren von Daten auf entfernte Systeme, werden durch Kerberos erheblich sicherer und lassen sich leichter steuern.

Kerberos hat eine Aufgabe: Die sichere Prüfung der Identität eines Benutzers (Authentifizierung) über das Netzwerk. Das System überprüft weder die Berechtigungen der Benutzer (Autorisierung), noch verfolgt es die durchgeführten Aktionen (Audit). Daher sollte Kerberos zusammen mit anderen Sicherheits-Systemen eingesetzt werden, die diese Funktionen bereitstellen. Die Daten einer Kommunikation können verschlüsselt werden, nachdem die Kommunikationspartner mit Kerberos ihre Identität geprüft haben.

Die folgenden Anweisungen beschreiben, wie Sie das mit FreeBSD gelieferte Kerberos einrichten. Eine vollständige Beschreibung des Systems entnehmen Sie bitte den entsprechenden Hilfeseiten.

Die Beschreibung der Kerberos-Installation benutzt folgende Namensräume:

  • Die DNS-Domain (Zone) heißt example.org.

  • Das Kerberos-Realm heißt 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.


10.7.1. Geschichte

Das MIT entwickelte Kerberos, um Sicherheitsprobleme auf dem Netzwerk zu lösen. Das Kerberos-Protokoll verwendet starke Kryptographie, sodass ein Server die Identität eines Clients (der umgekehrte Vorgang ist auch möglich) über ein unsicheres Netzwerk feststellen kann.

Der Begriff Kerberos wird sowohl für das Protokoll als auch für Programme verwendet, die Kerberos benutzen (wie Kerberos-Telnet). Die aktuelle Protokollversion ist 5 und wird in RFC 1510 beschrieben.

Mehrere Implementierungen des Protokolls stehen frei zur Verfügung und decken viele Betriebssysteme ab. Das Massachusetts Institute of Technology (MIT), an dem Kerberos ursprünglich entwickelt wurde, entwickelt seine Kerberos-Version weiter. In den USA wird diese Version häufig eingesetzt, unterlag aber Export-Beschränkungen, da sie in den USA entwickelt wurde. Die MIT-Version von Kerberos befindet sich im Port security/krb5. Heimdal ist eine weitere Implementierung der Protokollversion 5. Sie wurde außerhalb der USA entwickelt und unterliegt daher keinen Export-Beschränkungen. Heimdal-Kerberos befindet sich im Port security/heimdal und das Basissystem von FreeBSD enthält eine minimale Installation von Heimdal.

Um möglichst viele Benutzer anzusprechen, verwenden die folgenden Beispiele die in FreeBSD enthaltene Heimdal-Distribution.


10.7.2. 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 Identität eines Benutzers feststellen kann. Alle Mitglieder eines Kerberos-Realms vertrauen dem KDC, daher gelten für das KDC erhöhte Sicherheitsanforderungen.

Obwohl das KDC wenig Ressourcen eines Rechners benötigt, sollte es wegen der Sicherheitsanforderungen auf einem separaten Rechner installiert werden.

Das KDC wird in /etc/rc.conf wie folgt aktiviert:

kerberos5_server_enable="YES"
kadmind5_server_enable="YES"
kerberos_stash="YES"

Anmerkung: Die Option kerberos_stash gibt es nur in FreeBSD 4.X.

Danach wird die Konfigurationsdatei von Kerberos, /etc/krb5.conf, erstellt:

[libdefaults]
    default_realm = EXAMPLE.ORG
[realms]
    EXAMPLE.ORG = {
        kdc = kerberos.example.org
    }
[domain_realm]
    .example.org = EXAMPLE.ORG

Diese Einstellungen setzen voraus, dass der voll qualifizierte Name des KDCs kerberos.example.org ist. Wenn Ihr KDC einen anderen Namen hat, müssen Sie in der DNS-Zone einen Alias-Eintrag (CNAME-Record) für das KDC hinzufügen.

Anmerkung: Auf großen Netzwerken mit einem ordentlich konfigurierten BIND DNS-Server kann die Datei verkürzt werden:

[libdefaults]
      default_realm = 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.

Im nächsten Schritt wird die Kerberos-Datenbank eingerichtet. Die Datenbank enthält die Schlüssel aller Prinzipale und ist mit einem Passwort geschützt. Dieses Passwort brauchen Sie nicht zu behalten, da ein davon abgeleiteter Schlüssel in der Datei /var/heimdal/m-key gespeichert wird. Den Schlüssel erstellen Sie, indem Sie das Programm kstash aufrufen und ein Passwort eingeben.

Nachdem Sie den Schlüssel in /var/heimdal/m-key erstellt haben, können Sie die Datenbank mit dem Kommando kadmin initialisieren. Verwenden Sie hierbei die Option -l (lokal). Mit dieser Option wird die Datenbank lokal modifiziert. Normal würde der kadmind-Dienst benutzt, der aber zu diesem Zeitpunkt noch nicht läuft. An der Eingabeaufforderung von kadmin können Sie mit dem Kommando init die Datenbank des Realms einrichten.

Zuletzt erstellen Sie mit dem Kommando add Ihren ersten Prinzipal. Benutzen Sie die voreingestellten Optionen; Sie können die Einstellungen später mit dem Kommando modify ändern. An der Eingabeaufforderung zeigt das Kommando ? Hilfetexte an.

Zusammengefasst wird die Datenbank wie folgt eingerichtet:

# kstash
Master key: xxxxxxxx
Verifying password - Master key: xxxxxxxx

# kadmin -l
kadmin> init EXAMPLE.ORG
Realm max ticket life [unlimited]:
kadmin> add tillman
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
Password: xxxxxxxx
Verifying password - Password: xxxxxxxx

Jetzt kann das KDC gestartet werden. Führen Sie zum Start der Dienste die Kommandos /etc/rc.d/kerberos start und /etc/rc.d/kadmind start aus. Obwohl zu diesem Zeitpunkt noch keine kerberisierten Dienste laufen, können Sie die Funktion des KDCs schon überprüfen. Für den eben angelegten Benutzer können Sie sich vom KDC Tickets holen und diese Tickets anzeigen:

% k5init tillman
tillman@EXAMPLE.ORG's Password:

% k5list
Credentials cache: FILE: /tmp/krb5cc_500
Principal: tillman@EXAMPLE.ORG

        Issued           Expires          Principal
        Aug 27 15:37:58  Aug 28 01:37:58  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG
        Aug 27 15:37:58  Aug 28 01:37:58  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG

v4-ticket file: /tmp/tkt500
k5list: No ticket file (tf_util)

10.7.3. Kerberos-Dienste einrichten

Alle Rechner, die kerberisierte Dienste anbieten, müssen eine Kopie der Kerberos-Konfigurationsdatei /etc/krb5.conf besitzen. Sie können die Datei einfach vom KDC kopieren.

Anschließend müssen Sie die Datei /etc/krb5.keytab erzeugen. Im Gegensatz zu normalen Workstations benötigt jeder Server eine keytab. Diese Datei enthält den Schlüssel des Servers, mit dem sich der Server und das KDC gegenseitig authentifizieren können. Die Datei muss sicher auf den Server transportiert werden (beispielsweise mit scp(1) oder einer Diskette). Unter keinen Umständen darf die Datei im Klartext, zum Beispiel mit FTP, übertragen werden, da sonst die Sicherheit des Servers gefährdet ist.

Sie können die keytab auch mit dem Programm kadmin übertragen. Da Sie mit kadmin sowieso einen Host-Prinzipal für den Server einrichten müssen, ist das ganz praktisch.

Sie müssen allerdings schon ein Ticket besitzen und berechtigt sein, kadmin auszuführen. Die Berechtigung erhalten Sie durch einen Eintrag in der Zugriffskontrollliste kadmind.acl. Weitere Informationen über Zugriffskontrolllisten erhalten Sie in den Heimdal-Info-Seiten (info heimdal) im Abschnitt ``Remote administration''. Wenn der Zugriff auf kadmin von entfernten Maschinen verboten ist, müssen Sie sich sicher auf dem KDC anmelden (lokale Konsole, ssh(1) oder kerberisiertes Telnet) und die keytab lokal mit kadmin -l erzeugen.

Nachdem Sie die Datei /etc/krb5.conf installiert haben, können Sie das Kommando kadmin benutzen. An der Eingabeaufforderung von kadmin erstellt das Kommando add --random-key den Host-Prinzipal und das Kommando ext extrahiert den Schlüssel des Prinzipals in eine Datei:

# kadmin
kadmin> add --random-key host/myserver.EXAMPLE.ORG
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
kadmin> ext host/myserver.EXAMPLE.ORG
kadmin> exit

Das Kommando ext (von extract) speichert den extrahierten Schlüssel in der Datei /etc/krb5.keytab.

Wenn auf dem KDC, vielleicht aus Sicherheitsgründen, kadmind nicht läuft, können Sie das Kommando kadmin von entfernten Rechnern nicht benutzen. In diesem Fall legen Sie den Host-Prinzipal host/myserver.EXAMPLE.ORG direkt auf dem KDC an. Den Schlüssel extrahieren Sie in eine temporäre Datei (damit die Datei /etc/krb5.keytab nicht überschrieben wird):

# kadmin
kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exit

Anschließend müssen Sie die erzeugte example.keytab sicher auf den Server kopieren (mit scp oder mithilfe einer Diskette). Geben Sie auf jeden Fall einen anderen Namen für die keytab an, weil sonst die keytab des KDCs überschrieben würde.

Wegen der Datei krb5.conf kann der Server nun mit dem KDC kommunizieren und seine Identität mithilfe der Datei krb5.keytab nachweisen. Jetzt können wir kerberisierte Dienste aktivieren. Für telnet muss die folgende Zeile in /etc/inetd.conf eingefügt werden:

telnet    stream  tcp     nowait  root    /usr/libexec/telnetd  telnetd -a user

Ausschlaggebend ist, dass die Authentifizierungs-Methode mit -a auf user gesetzt wird. Weitere Details entnehmen Sie bitte der Hilfeseite telnetd(8).

Nachdem sie die Zeile in /etc/inetd.conf eingefügt haben, starten Sie inetd(8) mit dem Kommando /etc/rc.d/inetd restart durch.


10.7.4. Kerberos-Clients einrichten

Ein Client lässt sich leicht einrichten. Sie benötigen nur die Kerberos-Konfigurationsdatei /etc/krb5.conf. Kopieren Sie die Konfigurationsdatei einfach vom KDC auf den Client.

Sie können jetzt mit kinit Tickets anfordern, mit klist Tickets anzeigen und mit kdestroy Tickets löschen. Sie können mit Kerberos-Anwendungen kerberisierte Server ansprechen. Wenn das nicht funktioniert, Sie aber Tickets anfordern können, hat wahrscheinlich der kerberisierte Server ein Problem und nicht der Client oder das KDC.

Wenn Sie eine Anwendung wie telnet testen, können Sie mit einem Paket-Sniffer (beispielsweise tcpdump(1)) überprüfen, dass Passwörter verschlüsselt übertragen werden. Probieren Sie auch die Option -x von telnet, die den gesamten Datenverkehr verschlüsselt (analog zu ssh).

Die Kerberos-Basisanwendungen kinit, klist, kdestroy und kpasswd gehören zum FreeBSD-Basissystem. Beachten Sie, dass die Programme vor FreeBSD 5.0 in k5init, k5list, k5destroy, k5passwd und k5stash umbenannt wurden.

Zu Heimdal gehören noch weitere Anwendungen. Allerdings enthält das FreeBSD-Basissystem eine minimale Heimdal-Installation und nur eine kerberisierte Anwendung: telnet.

Der Heimdal-Port enthält noch mehr kerberisierte Anwendungen wie ftp, rsh, rcp und rlogin. Der MIT-Port enthält ebenfalls weitere kerberisierte Anwendungen.


10.7.5. .k5login und .k5users

Normalerweise wird ein Kerberos-Prinzipal wie tillman@EXAMPLE.ORG auf ein lokales Benutzerkonto, beispielsweise tillman, abgebildet. Daher benötigen Client-Anwendungen (zum Beispiel telnet) keinen Benutzernamen.

Manchmal wird aber Zugriff auf ein lokales Benutzerkonto benötigt, zu dem es keinen passenden Kerberos-Prinzipal gibt. Der Prinzipal tillman@EXAMPLE.ORG bräuchte beispielsweise Zugriff auf das Konto webdevelopers. Ebenso könnten andere Prinzipale auf dieses Konto zugreifen wollen.

Die Dateien .k5login und .k5users im Heimatverzeichnis eines Benutzerkontos gewähren Zugriffe ähnlich wie die Dateien .hosts und .rhosts. Um den Prinzipalen tillman@example.org und jdoe@example.org auf das Konto webdevelopers zu geben, wird im Heimatverzeichnis von webdevelopers die Datei .k5login mit folgendem Inhalt angelegt:

tillman@example.org
jdoe@example.org

Die angegebenen Prinzipale haben nun ohne ein gemeinsames Passwort Zugriff auf das Konto.

Einzelheiten entnehmen Sie bitte den Hilfeseiten zu diesen Dateien. Die Datei .k5users wird in der Hilfeseite des Kommandos ksu beschrieben.


10.7.6. Tipps und Fehlersuche

  • Wenn Sie den Heimdal-Port oder den MIT-Port benutzen, muss in der Umgebungsvariable PATH der Pfad zu den Programmen des Ports vor dem Pfad zu den Kerberos-Programmen des Systems stehen.

  • Sind die Uhrzeiten der Systeme synchronisiert? Ist die Zeitdifferenz zu groß (normalerweise größer 5 Minuten), dann schlägt die Authentifizierung fehl.

  • Die MIT- und Heimdal-Systeme arbeiten bis auf kadmin gut zusammen. Für kadmin wurde das Protokoll nicht normiert.

  • Wenn Sie den Namen eines Rechners ändern, müssen Sie auch den host/-Prinzipal ändern und die Datei keytab aktualisieren. Dies betrifft auch spezielle Einträge wie den Prinzipal für Apaches www/mod_auth_kerb.

  • Die Rechnernamen müssen vor- und rückwärts aufgelöst werden (im DNS oder in /etc/hosts). CNAME-Einträge im DNS funktionieren, aber die entsprechenden A- und PTR-Einträge müssen vorhanden und richtig sein. Wenn sich Namen nicht auflö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 für root. Das mag aus Sicherheitsgründen richtig sein, doch funktioniert ksu dann nicht. Dies ist kein Fehler des KDCs.

  • Wenn Sie für einen Prinzipal unter MIT-Kerberos Tickets mit einer längeren Gültigkeit als der vorgegebenen zehn Stunden einrichten wollen, müssen Sie zwei Sachen ändern. Benutzen Sie das modify_principal von kadmin, um die maximale Gültigkeitsdauer für den Prinzipal selbst und den Prinzipal krbtgt zu erhöhen.

  • Mit einem Packet-Sniffer können Sie feststellen, dass Sie sofort nach dem Aufruf von kinit eine Antwort vom KDC bekommen - noch bevor Sie überhaupt ein Passwort eingegeben haben! Das ist in Ordnung: Das KDC händigt ein Ticket-Granting-Ticket (TGT) auf Anfrage aus, da es durch einen vom Passwort des Benutzers abgeleiteten Schlüssel geschützt ist. Wenn das Passwort eingegeben wird, wird es nicht zum KDC gesendet, sondern zum Entschlüsseln der Antwort des KDCs benutzt, die kinit schon erhalten hat. Wird die Antwort erfolgreich entschlüsselt, erhält der Benutzer einen Sitzungs-Schlüssel für die künftige verschlüsselte Kommunikation mit dem KDC und das Ticket-Granting-Ticket. Das Ticket-Granting-Ticket wiederum ist mit dem Schlüssel des KDCs verschlüsselt. Diese Verschlüsselung ist für den Benutzer völlig transparent und erlaubt dem KDC, die Echtheit jedes einzelnen TGT zu prüfen.

  • Die Zeit innerhalb des Realms muss synchronisiert sein. Für die Synchronisation setzen Sie am besten NTP (siehe Abschnitt 19.11) ein.

  • Wenn Sie OpenSSH verwenden und Tickets mir einer langen Gültigkeit (beispielsweise einer Woche) benutzen, setzen Sie die Option TicketCleanup in der Datei sshd_config auf no. Ansonsten werden Ihre Tickets gelöscht, wenn Sie sich abmelden.

  • Host-Prinzipale können ebenfalls Tickets mit längerer Gültigkeit besitzen. Wenn der Prinzipal eines Benutzers über ein Ticket verfügt, das eine Woche gültig ist, das Ticket des Host-Prinzipals aber nur neun Stunden gü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 Passwörter verhindern wollen, geht das nur mit Prinzipalen, denen eine Passwort-Policy zugewiesen wurde. Die Hilfeseite von kadmind beschreibt kurz, wie krb5.dict verwendet wird. Das Format von krb5.dict ist einfach: Die Datei enthält pro Zeile ein Wort. Sie können daher einen symbolischen Link auf /usr/share/dict/words erstellen.


10.7.7. Unterschiede zum MIT-Port

Der Hauptunterschied zwischen MIT-Kerberos und Heimdal-Kerberos ist das Kommando kadmin. Die Befehlssätze des Kommandos (obwohl funktional gleichwertig) und das verwendete Protokoll unterscheiden sich in beiden Varianten. Das KDC lässt sich nur mit dem kadmin Kommando der passenden Kerberos-Variante verwalten.

Für dieselbe Funktion können auch die Client-Anwendungen leicht geänderte Kommandozeilenoptionen besitzen. Folgen Sie bitte der Anleitung auf der Kerberos-Seite (http://web.mit.edu/Kerberos/www/) des MITs. Achten Sie besonders auf den Suchpfad für Anwendungen. Der MIT-Port wird standardmäßig in /usr/local/ installiert. Wenn die Umgebungsvariable PATH zuerst die Systemverzeichnisse enthält, werden die Systemprogramme anstelle der MIT-Programme ausgeführt.

Anmerkung: Wenn Sie den MIT-Port security/krb5 verwenden, erscheint bei der Anmeldung mit telnetd und klogind die Fehlermeldung ``incorrect permissions on cache file''. Lesen Sie dazu bitte die im Port enthaltene Datei /usr/local/share/doc/krb5/README.FreeBSD. Wichtig ist, dass zur Authentifizierung die Binärdatei login.krb5 verwendet wird, die für durchgereichte Berechtigungen die Eigentümer korrekt ändert.


10.7.8. Beschränkungen von Kerberos


10.7.8.1. Kerberos muss ganzheitlich verwendet werden

Jeder über das Netzwerk angebotetene Dienst muss mit Kerberos zusammenarbeiten oder auf anderen Wegen gegen Angriffe aus dem Netzwerk geschützt sein. Andernfalls können Berechtigungen gestohlen und wiederverwendet werden. Es ist beispielsweise nicht sinnvoll, für Anmeldungen mit rsh und telnet Kerberos zu benutzen, dagegen aber POP3-Zugriff auf einen Mail-Server zu erlauben, da POP3 Passwörter im Klartext versendet.


10.7.8.2. Kerberos ist für Einbenutzer-Systeme gedacht

In Mehrbenutzer-Umgebungen ist Kerberos unsicherer als in Einbenutzer-Umgebungen, da die Tickets im für alle lesbaren Verzeichnis /tmp gespeichert werden. Wenn ein Rechner von mehreren Benutzern verwendet wird, ist es möglich, dass Tickets gestohlen werden.

Dieses Problem können Sie lösen, indem Sie mit der Kommandozeilenoption -c oder besser mit der Umgebungsvariablen KRB5CCNAME einen Ort für die Tickets vorgeben. Diese Vorgehensweise wird leider selten benutzt. Es reicht, die Tickets im Heimatverzeichnis eines Benutzers zu speichern und mit Zugriffsrechten zu schützen.


10.7.8.3. Das KDC ist verwundbar

Das KDC muss genauso abgesichert werden wie die auf ihm befindliche Passwort-Datenbank. Auf dem KDC dürfen keine anderen Dienste laufen und der Rechner sollte physikalisch gesichert sein. Die Gefahr ist groß, da Kerberos alle Passwörter mit einem Schlüssel, dem Haupt-Schlüssel, verschlüsselt. Der Haupt-Schlüssel wiederum wird in einer Datei auf dem KDC gespeichert.

Ein kompromittierter Haupt-Schlüssel ist nicht ganz so schlimm wie allgemein angenommen. Der Haupt-Schlüssel wird nur zum Verschlü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-Schlüssel anfangen.

Wenn das KDC nicht zur Verfügung steht, vielleicht wegen eines Denial-of-Service Angriffs oder wegen eines Netzwerkproblems, ist eine Authentifizierung unmöglich. Damit können die Netzwerk-Dienste nicht benutzt werden; das KDC ist also ein optimales Ziel für einen Denial-of-Service Angriff. Sie können diesem Angriff ausweichen, indem Sie mehrere KDCs (einen Master und einen oder mehrere Slaves) verwenden. Der Rückfall auf ein sekundäres KDC oder eine andere Authentifizierungs-Methode (dazu ist PAM bestens geeignet) muss sorgfältig eingerichtet werden.


10.7.8.4. Mängel von Kerberos

Mit Kerberos können sich Benutzer, Rechner und Dienste gegenseitig authentifizieren. Allerdings existiert kein Mechanismus, der das KDC gegenüber Benutzern, Rechnern oder Diensten authentifiziert. Ein verändertes kinit könnte beispielsweise alle Benutzernamen und Passwörter abfangen. Die von veränderten Programmen ausgehende Gefahr können Sie lindern, indem Sie die Integrität von Dateien mit Werkzeugen wie security/tripwire prüfen.


10.8. Firewalls

Beigetragen von Gary Palmer und Alex Nash.

Firewalls sind sehr wichtig für Leute, die mit dem Internet verbunden sind. Weiterhin halten sie Einzug in private Netzwerke, um dort die Sicherheit zu verbessern. Dieser Abschnitt erklärt, was Firewalls sind, wie sie benutzt werden und wie man die Möglichkeiten von FreeBSD benutzen kann, um eine Firewall zu implementieren.

Anmerkung: Es wird oft gedacht, dass eine Firewall zwischen dem internen Netzwerk und dem ``weiten, schlechten Internet'' alle Sicherheitsprobleme löst. Eine Firewall kann die Sicherheit erhöhen, doch eine schlecht aufgesetzte Firewall ist ein größeres Sicherheitsrisiko als gar keine Firewall. Eine Firewall ist nur eine weitere Sicherheitsschicht, sie verhindert aber nicht, dass ein wirklich entschlossener Cracker in Ihr internes Netz eindringt. Wenn Sie Ihre interne Sicherheit vernachlässigen, weil Sie Ihre Firewall für undurchdringlich halten, machen Sie den Crackern die Arbeit leichter.


10.8.1. Was ist eine Firewall?

Auf dem Internet sind momentan zwei Arten von Firewalls gebräuchlich. Die erste Art ist ein Paketfilter, in dem ein Kernel auf einer Maschine mit mehreren Netzwerkkarten auf Grund von Regeln entscheidet, ob er ein Paket weiterleitet oder nicht. Der zweite Typ sind Proxy-Server, die auf Dæmonen angewiesen sind. Die Dæmonen authentifizieren Benutzer und leiten Pakete weiter, das heißt sie können auf Maschinen mit mehreren Netzwerkverbindungen laufen, auf denen das Weiterleiten von Paketen durch den Kernel ausgeschaltet ist.

Manchmal werden beide Arten einer Firewall kombiniert und es ist nur einer besonderen Maschine, die Bastion Host genannt wird, erlaubt, Pakete in das interne Netzwerk über einen Paketfilter zu schicken. Auf dem Bastion Host laufen Proxy-Dienste, die im Allgemeinen sicherer als normale Authentifizierungsmechanismen sind.

FreeBSD besitzt einen Kernel-Paketfilter (IPFW), der im Rest dieses Abschnitts behandelt wird. Proxy-Server können mithilfe Software Dritter auf FreeBSD eingerichtet werden. Da es so viele unterschiedliche Proxy-Server gibt, können wir sie nicht in diesem Abschnitt besprechen.


10.8.1.1. Paketfilter

Ein Router ist eine Maschine, die Pakete zwischen zwei oder mehr Netzwerken weiterleitet. Ein Paketfilter ist ein spezieller Router, der mit einem Regelwerk entscheidet, ob er Pakete weiterleitet. Um den Filter zu aktivieren, müssen Sie zuerst die Regeln definieren, die festlegen, ob ein Paket weitergeleitet wird oder nicht.

Um zu entscheiden, ob ein Paket weitergeleitet wird, sucht die Firewall eine Regel, die auf den Inhalt des Paketheaders passt. Wenn eine passende Regel gefunden wurde, wird die Aktion der Regel ausgeführt. Die Aktion kann das Paket blockieren, weiterleiten oder auch dem Sender eine ICMP-Nachricht schicken. Die Regeln werden der Reihenfolge nach durchsucht und nur die erste passende Regel wird angewandt. Daher wird auch von einer ``Regelkette'' gesprochen.

Die Kriterien, nach denen Sie ein Paket spezifizieren können, hängen von der eingesetzten Software ab. Typischerweise können Sie Pakete nach der Quell IP-Adresse, der Ziel IP-Adresse, dem Quellport, dem Zielport (bei Protokollen, die diese unterscheiden) oder dem Pakettyp (UDP, TCP, ICMP) unterscheiden.


10.8.1.2. Proxy-Server

Auf Proxy-Servern werden die normalen Systemdienste, wie telnetd oder ftpd, durch besondere Server ersetzt. Diese Server werden Proxy-Server genannt, da sie normalerweise nur weitergehende Verbindungen erlauben (proxy engl. für Stellvertreter). Zum Beispiel können Sie auf Ihrer Firewall einen Proxy-Server für telnet laufen lassen, der Verbindungen aus dem Internet erlaubt. Ein Authentifizierungsmechanismus auf dem Proxy-Server erlaubt dann den Zugriff auf Ihr internes Netzwerk. Für den umgekehrten Weg können Sie natürlich auch Proxy-Server einsetzen.

Proxy-Server sind in aller Regel sicherer als normale Server und bieten oft eine Reihe von Authentifizierungsmechanismen. Dazu gehören Einmalpasswort Systeme, bei denen das zum Anmelden verwendete Passwort sofort ungültig wird und nicht zu einer weiteren Anmeldung benutzt werden kann, auch wenn es abgehört wurde. Da Proxy-Server den Benutzern keinen Zugang zu dem System geben, wird es für einen Angreifer sehr schwer, Hintertüren zur Umgehung Ihres Sicherheitssystems zu installieren.

Mit Proxy-Servern lassen sich die Zugriffe meist noch weiter beschränken. Der Zugriff kann auf bestimmte Rechner eingeschränkt werden und oft ist es möglich, festzulegen, welcher Benutzer mit welcher Zielmaschine kommunizieren darf. Welche Möglichkeiten Sie haben, hängt stark von der Proxy-Software ab, die Sie einsetzen.


10.8.2. Was kann ich mit IPFW machen?

IPFW, das von FreeBSD zur Verfügung gestellt wird, ist ein Paketfilter und ein Accounting-System, das im Kernel läuft und mit ipfw(8) ein Werkzeug im Userland zur Verfügung stellt. Beide Teile zusammen erlauben es Ihnen, die Regeln für Routing Entscheidungen im Kernel zu definieren oder abzufragen.

In IPFW gibt es zwei zusammenhängende Teile: Die Firewall filtert Pakete und das IP-Accounting-Modul überwacht mit einem Regelwerk, ähnlich dem der Firewall, die Nutzung Ihres Routers. Damit können Sie zum Beispiel sehen, wie viel Verkehr auf Ihrem Router von einer bestimmten Maschine kommt oder wie viel WWW (World Wide Web) Verkehr durch Ihren Router geht.

Durch das Design von IPFW können Sie IPFW auch auf Maschinen, die keine Router sind, einsetzen und einen Paketfilter für eingehende und ausgehende Verbindungen konfigurieren. Dies ist ein Spezialfall der normalen Verwendung von IPFW und daher werden dieselben Kommandos und Techniken benutzt.


10.8.3. Aktivieren von IPFW

Der größte Teil des IPFW-Systems befindet sich im Kernel, daher müssen Sie die Konfigurationsdatei des Kernels editieren und anschließend den Kernel neu übersetzen. Das Kapitel Konfiguration des FreeBSD Kernels beschreibt, wie Sie dazu vorzugehen haben.

Warnung: In der Voreinstellung verbietet IPFW alle Verbindungen. Sie haben sich ausgesperrt, wenn Sie den Kernel mit Firewall-Unterstützung starten und keine eigenen Regeln, die einen Zugriff erlauben, definiert haben. Zum ersten Überprüfen der Firewall-Funktion können Sie die Firewall öffnen, indem Sie firewall_type=open in /etc/rc.conf eintragen und danach, wenn alles funktioniert hat, die Regeln in /etc/rc.firewall anpassen. Um zu vermeiden, dass Sie sich aus Versehen aussperren, konfigurieren Sie die Firewall nicht über eine SSH-Verbindung sondern an der Konsole. Sie können auch in der Voreinstellung alle Verbindungen zulassen, indem Sie die Option IPFIREWALL_DEFAULT_TO_ACCEPT in die Kernelkonfiguration aufnehmen.

Momentan gibt es vier Optionen in der Kernelkonfiguration, die IPFW betreffen:

options IPFIREWALL

Fügt den Paketfilter-Code in den Kernel ein.

options IPFIREWALL_VERBOSE

Aktiviert das Loggen von Paketen mit syslogd(8). Ohne diese Option werden keine Pakete geloggt, auch wenn Sie in den Filterregeln das Loggen angeben.

options IPFIREWALL_VERBOSE_LIMIT=10

Begrenzt die Anzahl der über syslogd(8) geschriebenen Einträge. Die Option ist in Umgebungen mit hoher Aktivität nützlich, in denen Sie die Firewall Aktivitäten loggen möchten, aber einem Angreifer nicht die Möglichkeit eines Denial-of-Service Angriffs durch das Überlasten von syslog geben wollen.

Erreicht eine Regel der Regelkette die angegebene Grenze, so wird für diesen Eintrag das Loggen abgestellt. Um das Loggen von Paketen wieder zu aktivieren, müssen Sie den Zähler mit ipfw(8) zurücksetzen:

# ipfw zero 4500

Hier ist 4500 die Nummer der Regel in der Regelkette, für die Sie das Log weiterführen möchten.

options IPFIREWALL_DEFAULT_TO_ACCEPT

Ändert die Voreinstellung der Firewall, sodass alle Verbindungen erlaubt anstatt verboten sind. Diese Einstellung vermeidet, dass Sie sich aussperren, wenn Sie einen Kernel mit IPFIREWALL und ohne eigene Regeln starten. Wenn Sie ipfw(8) wie einen Filter zum Lösen spezieller Probleme bei deren Auftreten verwenden, kann diese Option sehr nützlich sein. Diese Einstellung öffnet die Firewall und verändert ihre Arbeitsweise. Gehen Sie daher sehr vorsichtig mit ihr um.

Anmerkung: Frühere Versionen von FreeBSD stellten die Option IPFIREWALL_ACCT zur Verfügung. Die Option ist mittlerweile überholt, da der Firewall Code automatisch Accounting Möglichkeiten bereitstellt.


10.8.4. Konfiguration von IPFW

Mit ipfw(8) konfigurieren Sie die IPFW-Software. Die Syntax dieses Kommandos sieht ziemlich kompliziert aus, doch wenn Sie einmal den Aufbau der Kommandos verstanden haben, ist es sehr einfach.

Das Kommando unterstützt vier verschiedene Operationen: Hinzufügen/Löschen, Anzeigen und Zurücksetzen von Regeln, sowie das Zurücksetzen von Paketzählern. Die Operationen Hinzufügen/Löschen werden genutzt, um die Regeln, nach denen Pakete akzeptiert, blockiert oder geloggt werden, zu erstellen. Die Operation Anzeigen zeigt die Regelkette und die Paketzähler an. Die Operation Zurücksetzen löscht alle Regeln der Regelkette. Mit der letzten Operation können Sie ein oder mehrere Paketzähler auf den Wert Null zurücksetzen.


10.8.4.1. Ändern der IPFW-Regeln

Die Syntax für diese Operation lautet:

ipfw [-N] Kommando [index] Aktion [log] Protokoll Adressen [Optionen]



Dieser Aufruf unterstützt eine Option:

-N

Löst Adressen und Namen von Diensten in der Ausgabe auf.

Kommando kann auf die kürzeste eindeutige Länge reduziert werden. Gültig sind die Werte:

add

Fügt einen Eintrag in die Firewall/Accounting Regelkette ein.

delete

Löscht einen Eintrag in der Firewall/Accounting Regelkette.

Frühere Versionen von IPFW verfügten über getrennte Firewall- und Accounting-Einträge in der Regelkette. In der jetzigen Version steht das Accounting für jeden Eintrag in der Firewall-Regelkette zur Verfügung.

Wenn ein Wert für index angegeben ist, so wird die Regel an entsprechender Stelle in die Regelkette eingefügt. Ansonsten wird die Regel an das Ende der Kette gestellt, wobei der Index um 100 größer ist als der Index der letzten Regel (die voreingestellte letzte Regel mit der Nummer 65535 wird in diesem Verfahren nicht berücksichtigt).

Wenn der Kernel mit IPFIREWALL_VERBOSE erstellt wurde, gibt die Regel mit der Option log Meldungen auf der Systemkonsole aus.

Gültige Werte für Aktion sind:

reject

Blockiert das Paket und schickt dem Sender die ICMP-Nachricht ``host or port unreachable''.

allow

Leitet das Paket normal weiter. Zulässige Aliase sind pass, permit und accept.

deny

Blockiert das Paket und benachrichtigt den Sender nicht mit einer ICMP-Nachricht. Dem Sender kommt es so vor, als hätte das Paket sein Ziel nie erreicht.

count

Erhöht den Paketzähler für diese Regel, trifft aber keine Entscheidung wie mit dem Paket zu verfahren ist, das heißt die nächste Regel der Kette wird auf das Paket angewendet.

Es ist möglich, die kürzeste eindeutige Form der Aktion anzugeben.

Für Protokoll können die folgenden Werte angegeben werden:

all

Trifft auf jedes IP-Paket zu.

icmp

Passt auf jedes ICMP-Paket.

tcp

Passt auf jedes TCP-Paket.

udp

Trifft auf jedes UDP-Paket zu.

Die Syntax für Adresse lautet:

from Adresse/Maske [Port] to Adresse/Maske [Port] [via Interface]

Port können Sie nur angeben, wenn das Protokoll auch Ports unterstützt (UDP und TCP).

via ist optional und gibt die IP-Adresse, den Domainnamen eines lokalen Interfaces oder den Namen des Interfaces (z.B. ed0) an und trifft nur auf Pakete zu, die durch dieses Interface gehen. Die Nummern der Interfaces können mit einem Platzhalter angegeben werden, ppp* trifft auf alle Kernel-PPP Interfaces zu.

Adresse/Maske können Sie wie folgt angeben:

Adresse
oder
Adresse/Bitmaske
oder
Adresse:Maskenmuster


Anstelle einer IP-Adresse können Sie einen gültigen Hostnamen angeben. Bitmaske ist eine dezimale Zahl, die angibt, wie viele Bits in der Adressmaske gesetzt werden sollen. Die Angabe 192.216.222.1/24 erstellt eine Maske, die auf jede Adresse des Klasse C Subnetzes 192.216.222 zutrifft. Das Maskenmuster wird mit der gegebenen IP-Adresse logisch UND verknüpft. Das Schlüsselwort any trifft auf jede IP-Adresse zu.

Die Portnummern werden wie folgt angegeben:

Port [,Port [,Port [...]]]

Dies gibt entweder einen Port oder eine Liste von Ports an.

Port-Port

Gibt einen Portbereich an. Sie können einen einzelnen Bereich mit einer Liste kombinieren, müssen aber den Bereich immer zuerst angeben.

Die verfügbaren Optionen sind:

frag

Trifft auf Pakete zu, die nicht das erste Fragment eines Datagrams sind.

in

Trifft auf eingehende Pakete zu.

out

Trifft auf ausgehende Pakete zu.

ipoptions spec

Trifft auf alle IP-Pakete zu, deren Header die in spec angegebenen, durch Kommata separierte, Optionen enthalten. Die unterstützten IP-Optionen sind: ssrr (strict source route), lsrr (loose source route), rr (record packet route), und ts (time stamp). Ein führendes ! trifft auf alle Pakete zu, die diese Option nicht gesetzt haben.

established

Trifft auf alle Pakete zu, die zu einer schon bestehenden TCP-Verbindung gehören, das heißt das RST- oder ACK-Bit ist gesetzt. Sie können den Durchsatz der Firewall verbessern, wenn Sie die established Regeln soweit wie möglich an den Anfang der Regelkette stellen.

setup

Passt auf alle Pakete, die versuchen eine TCP-Verbindung aufzubauen, das heißt das SYN-Bit ist gesetzt und das ACK-Bit ist nicht gesetzt.

tcpflags flags

Trifft auf alle Pakete zu, die im TCP-Header eine der durch Kommata getrennten Option gesetzt haben. Die gültigen Optionen sind: fin, syn, rst, psh, ack und urg. Mit einem führenden ! kann die Abwesenheit einer Option angegeben werden.

icmptypes types

Trifft auf ICMP-Pakete vom Typ types. Hier kann eine Kommata separierte Aufzählung von Bereichen oder einzelnen Typen angegeben werden. Gebräuchliche Typen sind: 0 echo reply (ping reply), 3 destination unreachable, 5 redirect, 8 echo request (ping request) und 11 time exceeded, das die Überschreitung der TTL angibt und zum Beispiel von traceroute(8) genutzt wird.


10.8.4.2. Anzeigen der IPFW-Regeln

Die Syntax für dieses Kommando lautet:

ipfw [-a] [-c] [-d] [-e] [-t] [-N] [-S] list



Sieben Optionen sind für diese Form gültig:

-a

Zeigt die Paketzähler zu den Regeln an. Diese Option ist die einzige Möglichkeit, die Zähler zu sehen.

-c

Zeigt die Regeln in einer kompakten Darstellung an.

-d

Zeigt zusätzlich zu den statischen Regeln die dynamischen Regeln an.

-e

Zeigt auch abgelaufene dynamische Regeln an, wenn die Option zusammen mit -d angegeben wird.

-t

Zeigt die Zeit, zu der die Regel zuletzt aktiviert wurde. Die Syntax dieser Ausgabe ist nicht kompatibel mit der Eingabesyntax von ipfw(8).

-N

Versucht Adressen und Namen von Diensten aufzulösen.

-S

Zeigt den Regelsatz an, zu dem die Regel gehört. Inaktive Regeln werden ohne diesen Schalter nicht angezeigt.


10.8.4.3. Zurücksetzen der IPFW-Regeln

Die Regeln setzen Sie wie folgt zurück:

ipfw flush



Damit werden alle Regeln der Regelkette, mit Ausnahme der Vorgaberegel 65535 gelöscht. Seien Sie vorsichtig, wenn Sie die Regeln zurücksetzen. Die Vorgabe für die Regel 65535 ist es, alle Pakete zu blockieren, das heißt, das System ist solange vom Netzwerk abgeschnitten, bis wieder neue Regeln in die Kette eingefügt werden.


10.8.4.4. Zurücksetzen der Paketzähler

Um einen oder mehrere Paketzähler zurückzusetzen, verwenden Sie folgende Syntax:

ipfw zero [index]



Wenn Sie das Argument index nicht angeben, werden alle Paketzähler zurückgesetzt. Wenn Sie das Argument angeben, wird nur der Zähler der angegebenen Regel zurückgesetzt.


10.8.5. Beispiel für ipfw Kommandozeilen

Das folgende Kommando blockiert alle Pakete, die von dem Host evil.crackers.org auf den Telnet-Port von nice.people.org gehen:

# ipfw add deny tcp from evil.crackers.org to nice.people.org 23

Das nächste Beispiel verbietet jeden IP-Verkehr von dem ganzen crackers.org Klasse C Netzwerk zu der Maschine nice.people.org:

# ipfw add deny log tcp from evil.crackers.org/24 to nice.people.org

Wenn Sie X-Sitzungen zu Ihrem internen Netzwerk, einem Subnetz eines C Klasse Netzwerkes, verbieten wollen, wenden Sie das folgende Kommando an:

# ipfw add deny tcp from any to my.org/28 6000 setup

Um die Accounting Einträge zu sehen:

# ipfw -a list
oder kürzer
# ipfw -a l


Den Zeitpunkt, an dem eine Regel das letzte Mal aktiviert wurde, sehen Sie mit:

# ipfw -at l

10.8.6. Aufbau einer Firewall mit Paketfiltern

Anmerkung: Beachten Sie bitte, dass die folgenden Vorschläge wirklich nur Vorschläge sind. Die Anforderungen jeder Firewall sind verschieden und wir können Ihnen wirklich nicht sagen, wie Sie Ihre maßgeschneiderte Firewall einrichten müssen.

Wenn Sie Ihre Firewall außerhalb eines kontrollierten Testumfelds aufbauen, empfehlen wir Ihnen dringend, das Loggen der Regeln im Kernel zu aktivieren und Regeln zu verwenden, die loggen. Das macht es Ihnen leichter, Fehler zu finden und diese ohne große Unterbrechungen zu beheben. Auch nachdem Sie die Firewall aufgesetzt haben, empfehlen wir Ihnen, die `deny'-Regeln zu loggen. Dies macht es leichter, Angriffen nachzugehen und das Regelwerk Ihrer Firewall zu ändern, wenn sich die Anforderungen einmal ändern.

Anmerkung: Wenn Sie Pakete der accept-Regel loggen, denken Sie bitte daran, dass Sie leicht sehr große Datenmengen erzeugen können, da jedes durchgelassene Paket einen Eintrag im Log generiert. Es kann vorkommen, das große FTP oder HTTP Übertragungen das System langsamer machen. Weiterhin wird für jedes der betroffenen Pakete die Latenzzeit erhöht, da von Seiten des Kernels mehr Arbeit zum Weiterleiten des Paketes erforderlich ist. Da alle Daten auf die Platte ausgeschrieben werden wird syslogd auch mehr Prozessorzeit beanspruchen und es kann leicht passieren, dass die Partition, die /var/log enthält voll läuft.

Sie sollten Ihre Firewall aus /etc/rc.conf.local oder /etc/rc.conf aktivieren. Die entsprechende Manualpage zeigt Ihnen, welche Einstellungen Sie vornehmen müssen und zeigt einige vorgegebene Firewall-Konfigurationen. Wenn Sie keine der Vorgaben verwenden, können Sie Ihre Regelkette mit ipfw list in eine Datei ausgeben und diese Datei in /etc/rc.conf angeben. Wenn sie weder /etc/rc.conf.local oder /etc/rc.conf benutzen, um Ihre Firewall zu aktivieren, stellen Sie bitte sicher, dass die Firewall aktiviert ist, bevor die IP-Interfaces konfiguriert werden.

Als nächstes müssen Sie festlegen, was Ihre Firewall machen soll. Das wird sehr stark davon abhängen welche Zugriffe Sie von außen auf Ihr Netzwerk erlauben wollen und welche Zugriffe von innen nach außen erlaubt sein sollen. Einige gebräuchliche Regeln sind:

  • Blockieren Sie jeden einkommenden Zugriff auf Ports unter 1024 für TCP. Dort befinden sich die meisten der sicherheitsrelevanten Dienste wie finger, SMTP (Post) und telnet.

  • Blockieren Sie jeden einkommenden UDP-Verkehr. Es gibt wenige nützliche UDP-Dienste und die, die nützlich sind, stellen meist eine Bedrohung der Sicherheit dar (z.B. die RPC- und NFS-Protokolle von Sun). Dies bringt allerdings auch Nachteile mit sich. Da UDP ein verbindungsloses Protokoll ist, verbieten Sie auch die Antworten auf ausgehende UDP-Pakete, wenn Sie eingehende UDP-Verbindungen blockieren. Dies kann zum Beispiel Probleme für Anwender des internen Netzwerks hervorrufen, wenn diese einen externen Archie-Server (prospero) verwenden. Wenn Sie den Zugriff auf Archie erlauben wollen, müssen Sie Pakete von den Ports 191 und 1525 zu jedem internen UDP-Port durch Ihre Firewall lassen. Ein anderer Dienst, den Sie vielleicht erlauben wollen, ist ntp, der vom Port 123 ausgeht.

  • Verbieten Sie Verkehr von außen zum Port 6000. Der Port 6000 wird für den Zugriff auf X-Server genutzt und kann eine Bedrohung der Sicherheit darstellen, insbesondere wenn die Anwender gewohnt sind xhost + zu benutzen. Tatsächlich kann X einen Bereich von Ports verwenden, der bei 6000 anfängt. Die Obergrenze ist durch die Anzahl der Displays, die auf einer Maschine laufen, gegeben. Laut RFC 1700 (Assigned Numbers) hat der höchst mögliche Port die Nummer 6063.

  • Überprüfen Sie, welche Ports von internen Servern (z.B. SQL-Servern) benutzt werden. Da diese normalerweise aus dem oben angesprochenen Bereich von 1-1024 fallen, ist es wahrscheinlich gut, diese Ports ebenfalls zu blockieren.

Eine Checkliste zum Aufbau einer Firewall ist vom CERT unter http://www.cert.org/tech_tips/packet_filtering.html erhältlich.

Wie oben schon gesagt, können wir Ihnen nur Richtlinien geben. Sie müssen selbst entscheiden, welche Regeln Sie auf Ihrer Firewall einsetzen wollen. Wir übernehmen keine Verantwortung dafür, dass jemand in Ihr Netzwerk eindringt, auch wenn Sie die obigen Ratschläge befolgt haben.


10.8.7. IPFW Overhead und Optimierungen

Viele Leute wollen wissen, wie viel zusätzliche Last IPFW auf einem System erzeugt. Hauptsächlich hängt dies von der Art der Regelkette und der Geschwindigkeit des Prozessors ab. Für die meisten Anwendungen mit einer kleinen Regelkette auf einem Ethernet ist der Aufwand vernachlässigbar klein. Wenn Sie genaue Zahlen brauchen, lesen Sie bitte weiter.

Die folgenden Messungen wurden auf einem 486-66 mit 2.2.5-STABLE durchgeführt. Obwohl sich IPFW in späteren FreeBSD Versionen leicht geändert hat, läuft es doch mit vergleichbarer Geschwindigkeit. Zur Durchführung der Messungen wurde in IPFW die verbrauchte Zeit in der Routine ip_fw_chk gemessen. Die Ergebnisse wurden alle 1000 Pakete auf der Konsole ausgegeben.

Zwei Regelsätze mit je 1000 Regeln wurden getestet. Der erste Regelsatz sollte den schlimmsten Fall durch wiederholte Anwendung der folgenden Regel demonstrieren:

# ipfw add deny tcp from any to any 55555

Da ein Großteil der Routine, die die Pakete überprüft, durchlaufen werden muss, bevor entschieden werden kann, ob das Paket wegen der Portnummer nicht auf die Regel passt, wird mit dieser Regel der schlimmste Fall gut simuliert. Nach 999 Wiederholungen dieser Regel folgte die Regel allow ip from any to any.

Der zweite Regelsatz wurde so entworfen, dass die Überprüfung der Regel schnell abgeschlossen werden kann:

# ipfw add deny ip from 1.2.3.4 to 1.2.3.4

Die Regel kann aufgrund einer nicht passenden IP-Adresse sehr schnell verlassen werden. Nach 999 Wiederholungen dieser Regel folgte wie im ersten Fall die Regel allow ip from any to any.

Im ersten Fall betrug der zusätzliche Aufwand 2,703 ms pro Paket also ungefähr 2,7 µs pro Regel. Damit könnten maximal ungefähr 370 Pakete pro Sekunde verarbeitet werden. Mit einem 10 Mbps Ethernet und Paketen, die ungefähr 1500 Bytes groß sind, entspricht dies einer Ausnutzung von 55% der zur Verfügung stehenden Bandbreite.

Im letzten Fall wurde jedes Paket in 1,172 ms abgearbeitet, was ungefähr 1,2 µs pro Regel entspricht. In diesem Fall könnten maximal 853 Pakete pro Sekunde verarbeitet werden, was die Bandbreite eines 10 Mbps Ethernet vollständig ausnutzt.

Die große Anzahl und die Beschaffenheit der Regeln in den Beispielen entsprechen nicht der Wirklichkeit. Die Regeln dienten nur der Messung der Geschwindigkeit. Wenn Sie eine effiziente Regelkette aufbauen wollen, sollten Sie die folgenden Ratschläge berücksichtigen:

  • Setzen Sie eine established Regel so früh wie möglich in die Regelkette, um den Großteil des TCP Verkehrs abzudecken. Vor dieser Regel sollten Sie keine allow tcp Regeln stehen haben.

  • Plazieren Sie häufig benutzte Regeln vor selten benutzten Regeln, ohne dabei den Sinn der Regelkette zu ändern. Welche Regeln häufig durchlaufen werden, können Sie den Paketzählern mit ipfw -a l entnehmen.


10.9. OpenSSL

Das OpenSSL-Toolkit ist seit FreeBSD 4.0 Teil des Basissystems. OpenSSL stellt eine universale Kryptographie Bibliothek sowie die Protokolle Secure Sockets Layer v2/v3 (SSLv2/SSLv3) und Transport Layer Security v1 (TLSv1) zur Verfügung.

Einer der Algorithmen, namentlich IDEA, in OpenSSL ist durch Patente in den USA und anderswo geschützt und daher nicht frei verfügbar. IDEA ist Teil des Quellcodes von OpenSSL wird aber in der Voreinstellung nicht kompiliert. Wenn Sie den Algorithmus benutzen wollen und die Lizenzbedingungen erfüllen, können Sie MAKE_IDEA in /etc/make.conf aktivieren und das System mit make world neu bauen.

Der RSA-Algorithmus ist heute in den USA und anderen Ländern frei verfügbar. Früher wurde er ebenfalls durch ein Patent geschützt.


10.9.1. Installation des Quellcodes

OpenSSL ist Teil der src-crypto und src-secure CVSup-Kollektionen. Mehr Informationen über die Erhältlichkeit und das Aktualisieren des FreeBSD Quellcodes erhalten Sie im Abschnitt Bezugsquellen für FreeBSD.


10.10. VPNs mit IPsec

Geschrieben von Nik Clayton.

Dieser Abschnitt beschreibt, wie Sie mit FreeBSD-Gateways ein Virtual-Private-Network (VPN) einrichten. Als Beispiel wird ein VPN zwischen zwei Netzen verwendet, die über das Internet miteinander verbunden sind.


10.10.1. IPsec Grundlagen

Geschrieben von Hiten M. Pandya.

Dieser Abschnitt zeigt Ihnen, wie Sie IPsec einrichten und damit FreeBSD-Systeme und Microsoft Windows 2000/XP Systeme sicher miteinander verbinden. Um IPsec einzurichten, sollten Sie einen neuen Kernel erzeugen können (siehe Kapitel 9).

IPsec ist ein Protokoll, das auf dem Internet-Protokoll (IP) aufbaut. Mit IPsec können mehrere Systeme geschützt miteinander kommunizieren. Das in FreeBSD realisierte IPsec-Protokoll baut auf der KAME-Implementierung auf und unterstützt sowohl IPv4 als auch IPv6.

Anmerkung: FreeBSD 5.X enthält eine von Hardware beschleunigte Variante des IPsec-Protokolls. Diese Variante wurde von OpenBSD übernommen und wird ``Fast-IPsec'' genannt. Das crypto(4)-Subsystem arbeitet mit Kryptographie-Hardware zusammen, die IPsec beschleunigt. Das Subsystem ist neu und bietet noch nicht alle Funktionen, die KAME-IPsec bietet. Wenn Sie die Hardware-Beschleunigung nutzen wollen, fügen Sie folgende Zeile der Kernelkonfiguration hinzu:

options      FAST_IPSEC  # new IPsec (cannot define w/ IPSEC)

Momentan können Sie ``Fast-IPsec'' nicht zusammen mit KAME-IPsec benutzen. Weiteres zu ``Fast-IPsec'' erfahren Sie in der Hilfeseite fast_ipsec(4).

IPsec besteht wiederum aus zwei Protokollen:

  • Encapsulated Security Payload (ESP) verschlüsselt IP-Pakete mit einem symmetrischen Verfahren (beispielsweise Blowfish oder 3DES). Damit werden die Pakete vor Manipulationen Dritter geschützt.

  • Der Authentication Header (AH) enthät eine kryptographische Prüsumme, die sicher stellt, dass ein IP-Paket nicht verändert wurde. Der Authentication-Header folgt nach dem normalen IP-Header und erlaubt dem Empfänger eines IP-Paketes, dessen Integrität zu prüfen.

ESP und AH können, je nach Situation, zusammen oder einzeln verwendet werden.

IPsec kann in zwei Modi betrieben werden: Der Transport-Modus verschlüsselt die Daten zwischen zwei Systemen. Der Tunnel-Modus verbindet zwei Subnetze miteinander. Durch einen Tunnel können dann beispielsweise verschlüsselte Daten übertragen werden. Ein Tunnel wird auch als Virtual-Private-Network (VPN) bezeichnet. Detaillierte Informationen über das IPsec-Subsystem von FreeBSD enthält die Hilfeseite ipsec(4).

Die folgenden Optionen in der Kernelkonfiguration aktivieren IPsec:

options   IPSEC        #IP security
options   IPSEC_ESP    #IP security (crypto; define w/ IPSEC)

Wenn Sie zur Fehlersuche im IPsec-Subsystem Unterstützung wünschen, sollten Sie die folgende Option ebenfalls aktivieren:

options   IPSEC_DEBUG  #debug for IP security

10.10.2. Was ist ein VPN?

Es gibt keinen Standard, der festlegt, was ein Virtual-Private-Network ist. VPNs können mit verschiedenen Techniken, die jeweils eigene Vor- und Nachteile besitzen, implementiert werden. Dieser Abschnitt stellt eine Möglichkeit vor, ein VPN aufzubauen.


10.10.3. Szenario I: Zwei Netzwerke verbunden über das Internet

Dieses Szenario hat die folgenden Vorausetzungen:

  • Es müssen zwei Netzwerke vorhanden sein.

  • Beide Netzwerke müssen intern IP benutzen.

  • Beide Netzwerke sind über einen FreeBSD-Gateway mit dem Internet verbunden.

  • Der Gateway jedes Netzwerks besitzt mindestens eine öffentliche IP-Adresse.

  • Die intern verwendeten IP-Adressen können private oder öffentliche Adressen sein. Der Gateway kann, wenn nötig, IP-Adressen mit NAT umschreiben.

  • Die IP-Adressen der internen Netzwerke dürfen nicht überlappen. Mit NAT ließe sich diese Anforderung zwar umgehen, doch wäre die Konfiguration und Pflege des resultierenden Netzwerks zu aufwändig.

Wenn die zu verbindenden Netzwerke intern dieselben IP-Adressen benutzen (beispielsweise 192.168.1.x), müssen einem der Netzwerke neue IP-Adressen zugewiesen werden.

Die Netzwerktopologie sieht wie folgt aus:

Beachten Sie die beiden öffentlichen IP-Adressen. Im Folgenden werden sie durch Buchstaben (als Platzhalter) gekennzeichnet. Setzen Sie hierfür Ihre eigenen öffentlichen IP-Adressen ein. Beide Gateways besitzen die interne Adresse x.x.x.1 und beide Netzwerke besitzen unterschiedliche private IP-Adressen: 192.168.1.x und 192.168.2.x. Die Default-Route aller internen Systeme ist jeweils die Gateway-Maschine (x.x.x.1).

Aus der Sicht der Systeme sollen jetzt beide Netzwerke wie über einen Router, der in diesem Fall etwas langsamer ist, verbunden werden.

Auf dem Rechner 192.168.1.20 soll also beispielsweise der folgende Befehl funktionieren:

ping 192.168.2.34

Windows-Systeme sollen die Systeme auf dem anderen Netzwerk erkennen und Shares sollen funktionieren. Alles soll genauso wie in lokalen Netzwerken funktionieren.

Zusätzlich soll die Kommunikation zwischen beiden Netzwerken noch verschlüsselt werden.

Das VPN wird in mehreren Schritten aufgebaut:

  1. Zuerst wird eine virtuelle Verbindung zwischen beiden Netzwerken über das Internet eingerichtet. Die virtuelle Verbindung können Sie mit Werkzeugen wie ping(8) prüfen.

  2. Danach wird eine Sicherheitsrichtlinie (Security-Policy) festgelegt, die automatisch den Datenverkehr zwischen beiden Netzwerken verschlüsselt und entschlüsselt. Mit Werkzeugen wie tcpdump(1) können Sie überprüfen, dass die Daten tatsächlich verschlüsselt werden.

  3. Wenn sich Windows-Systeme im VPN gegenseitig erkennen sollen, so sind noch weitere Konfigurationsschritte notwendig, die aber nicht in diesem Abschnitt beschrieben werden.


10.10.3.1. Schritt 1: Die virtuelle Verbindung einrichten

Nehmen wir an, sie wollten von der Gateway-Maschine im Netzwerk #1 (öffentliche IP-Adresse A.B.C.D, private IP-Adresse 192.168.1.1) das Kommando ping 192.168.2.1 absetzen. 192.168.2.1 ist die private IP-Adresse des Systems W.X.Y.Z im Netzwerk #2. Welche Voraussetzungen müssen erfüllt sein, damit der Befehl funktioniert?

  1. Die Gateway-Maschine muss das System 192.168.2.1 erreichen können. Das heißt, eine Route zu diesem System muss existieren.

  2. Private IP-Adressen, wie der Bereich 192.168.x, sollten im Internet nicht verwendet werden. Jedes Paket zu 192.168.2.1 muss daher in ein anderes Paket gepackt werden, das von A.B.C.D kommt und zu W.X.Y.Z geschickt wird. Das erneute Verpacken der Pakete wird als Kapselung bezeichnet.

  3. Wenn das Paket W.X.Y.Z erreicht, muss es dort ausgepackt und an 192.168.2.1 ausgeliefert werden.

Sie können sich diese Prozedur so vorstellen, dass ein Tunnel zwischen beiden Netzwerken existiert. Die beiden Tunnel-Enden besitzen die IP-Adressen A.B.C.D und W.X.Y.Z. Der Tunnel muss zudem Verkehr zwischen den privaten IP-Adressen erlauben und transportiert so Daten zwischen privaten IP-Adressen über das Internet.

Unter FreeBSD wird der Tunnel mit gif-Geräten (generic interface) erstellt. Auf jedem Gateway muss das gif-Gerät mit vier IP-Adressen eingerichtet werden: Zwei öffentliche IP-Adressen und zwei private IP-Adressen.

Die gif-Geräte werden vom Kernel bereitgestellt und müssen in der Kernelkonfigurationsdatei auf beiden Maschinen angegeben werden:

pseudo-device gif

Wie gewöhnlich müssen Sie danach einen neuen Kernel erstellen, installieren und das System neu starten.

Der Tunnel wird in zwei Schritten aufgebaut. Mit gifconfig(8) werden zuerst die öffentlichen IP-Adressen konfiguriert. Anschließend werden die privaten IP-Adressen mit ifconfig(8) eingerichtet.

Auf der Gateway-Maschine im Netzwerk #1 bauen Sie den Tunnel mit den folgenden Kommandos auf:

gifconfig gif0 A.B.C.D W.X.Y.Z
ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff

Auf dem anderen Gateway benutzen Sie dieselben Kommandos, allerdings mit vertauschten IP-Adressen:

gifconfig gif0 W.X.Y.Z A.B.C.D
ifconfig gif0 inet 192.168.2.1 192.168.1.1 netmask 0xffffffff

Die Konfiguration können Sie anschließend mit dem folgenden Kommando überprüfen:

gifconfig gif0

Auf dem Gateway in Netzwerk #1 sollten Sie beispielsweise die nachstehende Ausgabe erhalten:

# gifconfig gif0
gif0: flags=8011<UP,POINTTOPOINT,MULTICAST> mtu 1280
inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff
physical address inet A.B.C.D --> W.X.Y.Z

Wie Sie sehen, ist ein Tunnel zwischen den IP-Adressen A.B.C.D und W.X.Y.Z aufgebaut worden, der Verkehr zwischen den Adressen 192.168.1.1 und 192.168.2.1 zulässt.

Gleichzeitig wurde ein Eintrag in der Routing-Tabelle erstellt, den Sie sich mit netstat -rn ansehen können. Auf der Gateway-Maschine in Netzwerk #1 sieht das so aus:

# netstat -rn
Routing tables

Internet:
Destination      Gateway       Flags    Refs    Use    Netif  Expire
...
192.168.2.1      192.168.1.1   UH        0        0    gif0
...

Die Route ist eine Host-Route, wie in der Spalte ``Flags'' angegeben. Das heißt die beiden Gateways wissen wie sie einander erreichen, sie kennen allerdings nicht das Netzwerk auf der anderen Seite. Dieses Problem werden wir gleich angehen.

Wahrscheinlich ist auf beiden Gateways eine Firewall eingerichtet. Für den VPN-Verkehr muss die Firewall umgegangen werden. Sie können generell den Verkehr zwischen beiden Netzwerken erlauben oder Regeln erstellen, die beide Tunnel-Enden des VPNs voreinander schützen.

Der Test des VPNs wird erheblich leichter, wenn Sie jeden Verkehr zwischen den Tunnel-Enden in der Firewall erlauben. Wenn Sie auf der Gateway-Maschine ipfw(8) einsetzen, erlaubt die folgende Regel jeden Verkehr zwischen den Tunnel-Enden, ohne die anderen Regeln zu beeinflussen:

ipfw add 1 allow ip from any to any via gif0

Diese Regel muss offensichtlich auf beiden Gateway-Maschinen existieren.

Damit sollten Sie das Kommando ping jetzt absetzen können. Auf dem System 192.168.1.1 sollte der nachstehende Befehl Antworten erhalten:

ping 192.168.2.1

Denselben Test können Sie auch auf der anderen Gateway-Maschine ausführen.

Allerdings können Sie noch nicht die anderen internen Maschinen auf den Netzwerken erreichen. Die Ursache ist das Routing - die Gateway kennen sich zwar gegenseitig, wissen aber noch nichts von den Netzwerken hinter dem anderen Gateway.

Um die Netzwerke bekannt zu geben, muss auf jeder Gateway-Maschine noch eine statische Route hinzugefügt werden. Auf der ersten Gateway-Maschine setzen Sie dazu das folgende Kommando ab:

route add 192.168.2.0 192.168.2.1 netmask 0xffffff00

Dies entspricht der Anweisung: ``Um Rechner auf dem Netz 192.168.2.0 zu erreichen, schicke die Pakete zum†System 192.168.2.1''. Auf dem anderen Gateway muss das analoge Kommando (mit den IP-Adressen 192.168.1.x) abgesetzt werden.

Damit ist jetzt der IP-Verkehr zwischen beiden Netzwerken möglich.

Zwei Drittel des VPNs zwischen beiden Netzen ist nun eingerichtet. Es ist ``virtuell'' und es ist ein ``Netzwerk''. Es ist allerdings noch nicht ``privat''. Dies können Sie mit ping(8) und tcpdump(1) überprüfen. Setzen Sie auf dem ersten Gateway den folgenden Befehl ab:

tcpdump dst host 192.168.2.1

Starten Sie dann, ebenfalls auf dem ersten Gateway, den folgenden Befehl:

ping 192.168.2.1

Sie werden die nachstehende Ausgabe erhalten:

16:10:24.018080 192.168.1.1 > 192.168.2.1: icmp: echo request
16:10:24.018109 192.168.1.1 > 192.168.2.1: icmp: echo reply
16:10:25.018814 192.168.1.1 > 192.168.2.1: icmp: echo request
16:10:25.018847 192.168.1.1 > 192.168.2.1: icmp: echo reply
16:10:26.028896 192.168.1.1 > 192.168.2.1: icmp: echo request
16:10:26.029112 192.168.1.1 > 192.168.2.1: icmp: echo reply

Die ICMP-Nachrichten werden unverschlüsselt übertragen. Mit der Option -s von tcpdump(1) können Sie sich weitere Daten der Pakete anzeigen lassen.

Die Daten sollen aber automatisch verschlüsselt werden. Wie das geht, wird im nächsten Abschnitt erläutert.

Zusammenfassung:

  • Richten sie in beiden Kerneln das gif-Gerät ein.

  • Fügen Sie auf dem Gateway in Netzwerk #1 folgende Zeilen in /etc/rc.conf ein:

    gifconfig_gif0="A.B.C.D W.X.Y.Z"
    ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff"
    static_routes="vpn"
    route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00"
    

    Setzen Sie dabei die richtigen IP-Adressen für die Platzhalter ein.

  • Fügen Sie auf beiden Gateways die nachstehende Regel in das Firewall-Skript (zum Beispiel /etc/rc.firewall) ein:

    ipfw add 1 allow ip from any to any via gif0
    
  • Nehmen Sie in /etc/rc.conf auf dem Gateway #2 analoge Änderungen, die IP-Adressen müssen vertauscht werden, vor.


10.10.3.2. Schritt 2: Die Verbindung mit IPsec schützen

Um die Verbindung zu schützen, verwenden wir IPsec. IPsec bietet einen Mechanismus, mit dem sich zwei Systeme auf einen Schlüssel einigen können. Mit diesem Schlüssel wird dann der Datenverkehr zwischen beiden Systemen verschlüsselt.

Es gibt hierbei zwei Sachen die konfiguriert werden müssen:

  1. Die Security-Association bestimmt, mit welchen Methoden der Verkehr zwischen beiden Systemen verschlüsselt wird.

  2. Die Security-Policy bestimmt, was verschlüsselt wird. Es soll ja nicht der gesamte Datenverkehr nach außen verschlüsselt werden, sondern nur der Teil des Verkehrs, der zum VPN gehört.

Die Security-Association wie auch die Security-Policy werden vom Kernel verwaltet und können von Anwendungen verändert werden. Dazu müssen allerdings zuerst IPsec und das Encapsulated-Security-Payload (ESP) Protokoll in die Kernelkonfigurationsdatei eingetragen werden:

options IPSEC
options IPSEC_ESP

Wie üblich, müssen Sie danach den Kernel übersetzen, installieren und das System neu starten. Die Kernel müssen auf beiden Gateway-Maschinen neu erstellt werden.

Sie können die Security-Association auf zwei Arten konfigurieren: Manuell, dann müssen Sie den Verschlüsselungsalgorithmus, die Schlüssel und alles Weitere selbst konfigurieren. Oder automatisch, mithilfe eines Dæmons, der das Internet-Key-Exchange Protokoll (IKE) beherrscht.

Im Allgemeinen wird die letzte Variante bevorzugt. Sie ist auch wesentlich leichter einzurichten.

Mit setkey(8) können Sie Security-Policies editieren und anzeigen. Die Beziehung von setkey und der Tabelle der Security-Policies im Kernel entspricht dem Verhältnis von route(8) und der Routing-Tabelle. Die momentanen Security-Associations lassen sich ebenfalls mit setkey anzeigen; setkey verhält sich in diesem Fall wie netstat -r, um die Analogie fortzuführen.

Sie haben die Wahl zwischen mehreren Programmen, wenn Sie Security-Associations mit FreeBSD verwalten wollen. Im Folgenden wird racoon beschrieben. racoon lässt sich in gewohnter Weise aus der Ports-Collection installieren. Sie finden das Programm unter security/racoon.

Auf beiden Gateway-Maschinen muss racoon laufen. Auf jedem System wird es mit der IP-Adresse der Gegenstelle und einem geheimen Schlüssel konfiguriert. Auf beiden Gateway-Maschinen muss der gleiche Schlüssel verwendet werden.

Die beiden raccon-Daemonen prüfen mithilfe des geheimen Schlüssels gegenseitig ihre Identität. Anschließend generieren Sie einen neuen geheimen Schlüssel, mit dem dann der Datenverkehr im VPN verschlüsselt wird. Dieser Schlüssel wird von Zeit zu Zeit geändert. Ein Angreifer, der einen der Schlüssel geknackt hat - das ist schon ziemlich unwahrscheinlich - kann somit nicht viel mit diesem Schlüssel anfangen, da schon wieder ein anderer Schlüssel verwendet wird.

Die Konfiguration von racoon befindet sich in ${PREFIX}/etc/racoon. In der dort befindlichen Konfigurationsdatei sollten Sie nicht allzu viele Änderungen vornehmen müssen. Sie müssen allerdings den so genannten ``Pre-Shared-Key'' (den vorher ausgetauschten Schlüssel) ändern.

In der Voreinstellung befindet sich dieser Schlüssel in der Datei ${PREFIX}/etc/racoon/psk.txt. Dieser Schlüssel wird nicht zum Verschlüsseln des Datenverkehrs verwendet. Er dient lediglich der Authentifizierung der beiden racoon-Daemonen.

Für jeden entfernten Kommunikationspartner enthält psk.txt eine Zeile. Damit besteht die Datei psk.txt in unserem Beispiel aus einer Zeile (wir verwenden einen entfernten Kommunikationspartner).

Auf dem Gateway #1 sieht diese Zeile wie folgt aus:

W.X.Y.Z            geheim

Die Zeile besteht aus der öffentlichen IP-Adresse der Gegenstelle, Leerzeichen und dem geheimen Schlüssel. Sie sollten natürlich nicht geheim verwenden. Für den geheimen Schlüssel gelten dieselben Regeln wie für Passwörter.

Auf dem anderen Gateway sieht die Zeile folgendermaßen aus:

A.B.C.D            geheim

Die Zeile besteht aus der öffentlichen IP-Adresse der Gegenstelle, Leerzeichen und dem geheimen Schlüssel. Die Zugriffsrechte von psk.txt müssen auf 0600 (Lese- und Schreibzugriff nur für root) gesetzt sein, bevor racoon gestartet wird.

Auf beiden Gateway-Maschinen muss racoon laufen. Sie brauchen ebenfalls Firewall-Regeln, die IKE-Verkehr erlauben. IKE verwendet UDP, um Nachrichten zum ISAKMP-Port (Internet Security Association Key Management Protocol) zu schicken. Die Regeln sollten früh in der Regelkette auftauchen:

ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp
ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp

Wenn racoon läuft, können Sie versuchen, mit ping von einem Gateway-Rechner aus den anderen Gateway zu erreichen. Die Verbindung wird zwar immer noch nicht verschlüsselt, aber racoon wird die Security-Association zwischen beiden Systemen einrichten. Dies kann eine Weile dauern, und Sie bemerken vielleicht eine kleine Verzögerung, bevor die Antworten von der Gegenstelle kommen.

Die Security-Association können Sie sich auf einem der beiden Gateway-Systeme mit setkey(8) ansehen:

setkey -D

Damit ist die erste Hälfte der Arbeit getan. Jetzt muss noch die Security-Policy konfiguriert werden.

Damit wir eine sinnvolle Security-Policy erstellen können, fassen wir das bisher geleistete zusammen. Die Diskussion gilt für beide Enden des Tunnels.

Jedes gesendete IP-Paket enthält im Header Informationen über das Paket selbst. Im Header befinden sich die IP-Adressen des Senders und des Empfängers. Wie wir bereits wissen, dürfen private IP-Adressen, wie 192.168.x.y nicht auf das Internet gelangen. Pakete zu privaten IP-Adressen müssen zuerst in einem anderen Paket gekapselt werden. In diesem Paket werden die privaten IP-Adressen durch öffentliche IP-Adressen ersetzt.

Das ausgehende Paket hat beispielsweise wie folgt ausgesehen:

Es wird in ein anderes Paket umgepackt (gekapselt) und sieht danach wie folgt aus:

Die Kapselung wird vom gif-Gerät vorgenommen. Das neue Paket enthält im Header eine öffentliche IP-Adresse und der Datenteil des Pakets enthält das ursprüngliche Paket.

Natürlich soll der gesamte Datenverkehr des VPNs verschlüsselt werden. Dies kann man wie folgt ausdrücken:

``Wenn ein Paket von A.B.C.D zu W.X.Y.Z geschickt wird, verschlüssele es entsprechend der Security-Association.''

``Wenn ein Paket von W.X.Y.Z kommt und für A.B.C.D bestimmt ist, entschlüssele es entsprechend der Security-Association.''

Das ist fast richtig. Mit diesen Regeln würde der ganze Verkehr von und zu W.X.Y.Z verschlüsselt, auch wenn er nicht zum VPN gehört. Die richtige Formulierung lautet:

``Wenn ein Paket, das ein gekapseltes Paket enthält, von A.B.C.D zu W.X.Y.Z geschickt wird, verschlüssele es entsprechend der Security-Association.''

``Wenn ein Paket, das ein gekapseltes Paket enthält, von W.X.Y.Z kommt und für A.B.C.D bestimmt ist, entschlüssele es entsprechend der Security-Association.''

Dies ist eine zwar subtile aber eine notwendige Änderung.

Die Security-Policy können Sie mit setkey(8) erstellen. setkey(8) besitzt eine Konfigurations-Syntax zur Erstellung der Security-Policy. Sie können die Konfiguration über die Standardeingabe oder in einer Datei, die Sie mit der Option -f angeben, erstellen.

Gateway #1 (öffentliche IP-Adresse: A.B.C.D) muss folgendermaßen konfiguriert werden, um alle ausgehenden Pakete an W.X.Y.Z zu verschlüsseln:

spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;

Speichern Sie dieses Kommando in einer Datei, beispielsweise /etc/ipsec.conf ab. Rufen Sie anschließend das nachstehende Kommando auf:

# setkey -f /etc/ipsec.conf

spdadd weist setkey(8) an, der Security-Policy-Datenbank eine Regel hinzuzufügen. Der Rest der Zeile gibt an, auf welche Pakete diese Regel zutrifft. A.B.C.D/32 und W.X.Y.Z/32 sind die IP-Adressen und Netzmasken, die Systeme angeben, auf die diese Regel zutrifft. Im Beispiel gilt die Regel für die beiden Gateway-Systeme. ipencap zeigt an, dass die Regel nur für Pakete gilt, die gekapselte Pakete enthalten. -P out legt fest, dass die Regel nur für ausgehende Pakete gilt.

ipsec gibt an, dass die Pakete geschützt werden. Das benutzte Protokoll wird durch esp angegeben. tunnel kapselt das Paket in ein IPsec-Paket. Die nochmalige Angabe von A.B.C.D und W.X.Y.Z gibt die Security-Association an. Das abschließende require erzwingt die Verschlüsselung der Pakete.

Diese Regel gilt nur für ausgehende Pakete. Sie brauchen eine analoge Regel für eingehende Pakete:

spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;

In dieser Regel wird in anstelle von out benutzt und die IP-Adressen sind notwendigerweise umgekehrt angegeben.

Das zweite Gateway-System mit der IP-Adresse W.X.Y.Z braucht entsprechende Regeln:

spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;
       spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;

Schließlich brauchen Sie auf beiden Gateway-Systemen noch Firewall-Regeln, die ESP- und IPENCAP-Pakete in beide Richtungen erlauben:

ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z
ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D
ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z
ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D

Da die Regeln symmetrisch sind, können sie auf beiden Systemen verwendet werden.

Damit sehen ausgehende Pakete wie folgt aus:

Am anderen Ende des VPNs werden die Pakete zuerst entsprechend der von racoon ausgehandelten Security-Association entschlüsselt. Das gif-Interface entfernt dann die zweite Schicht, damit das ursprüngliche Paket zum Vorschein kommt. Dieses kann dann in das interne Netzwerk transportiert werden.

Dass die Pakete wirklich verschlüsselt werden, können Sie wieder mit ping(8) überprüfen. Melden Sie sich auf dem Gateway A.B.C.D an und rufen das folgende Kommando auf:

tcpdump dst host 192.168.2.1

Auf demselben Rechner setzen Sie dann noch das nachstehende Kommando ab:

ping 192.168.2.1

Dieses Mal wird die Ausgabe wie folgt aussehen:

XXX tcpdump output

Jetzt zeigt tcpdump(1) ESP-Pakete an. Auch wenn Sie diese mit der Option -s untersuchen, werden Sie wegen der Verschlüsselung nur unverständliche Zeichen sehen.

Herzlichen Glückwunsch. Sie haben soeben ein VPN zwischen zwei entfernten Netzen eingerichtet.

Zusammenfassung

  • IPsec muss in beiden Kernelkonfigurationsdateien enthalten sein:

    options IPSEC
    options IPSEC_ESP
    
  • Installieren Sie security/racoon. Tragen Sie auf beiden Rechnern in ${PREFIX}/etc/racoon/psk.txt jeweils die IP-Adresse des entfernten Gateways und den geheimen Schlüssel ein. Setzen Sie die Zugriffsrechte der Datei auf 0600.

  • Fügen Sie auf jedem Rechner die folgenden Zeilen zu /etc/rc.conf hinzu:

    ipsec_enable="YES"
    ipsec_file="/etc/ipsec.conf"
    
  • Erstellen Sie auf jedem Rechner die Datei /etc/ipsec.conf mit den nötigen spadd-Zeilen. Auf dem Gateway #1 hat die Datei folgenden Inhalt:

    spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec
      esp/tunnel/A.B.C.D-W.X.Y.Z/require;
    spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec
      esp/tunnel/W.X.Y.Z-A.B.C.D/require;
    

    Auf dem Gateway #2 sieht die Datei so aus:

    spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec
      esp/tunnel/W.X.Y.Z-A.B.C.D/require;
    spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec
      esp/tunnel/A.B.C.D-W.X.Y.Z/require;
    
  • Fügen Sie auf beiden Rechnern Firewall-Regeln hinzu, die IKE-, ESP- und IPENCAP-Verkehr erlauben:

    ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp
    ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp
    ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z
    ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D
    ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z
    ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D
    

Das VPN wurde in zwei Schritten eingerichtet. Maschinen auf beiden Netzen können miteinander kommunizieren und der Datenverkehr zwischen beiden Netzen wird automatisch verschlüsselt.


10.11. OpenSSH

Beigetragen von Chern Lee.

OpenSSH stellt Werkzeuge bereit, um sicher auf entfernte Maschinen zuzugreifen. Die Kommandos rlogin, rsh, rcp und telnet können durch OpenSSH ersetzt werden. Zusätzlich können andere TCP/IP-Verbindungen sicher durch SSH weitergeleitet (getunnelt) werden. Mit SSH werden alle Verbindungen verschlüsselt, dadurch wird verhindert, dass die Verbindung zum Beispiel abgehört oder übernommen (Hijacking) werden kann.

OpenSSH wird vom OpenBSD-Projekt gepflegt und basiert auf SSH v1.2.12 mit allen aktuellen Fixen und Aktualisierungen. OpenSSH ist mit den SSH-Protokollen der Versionen 1 und 2 kompatibel. Seit FreeBSD 4.0 ist die OpenSSH Teil des Basissystems.


10.11.1. Vorteile von OpenSSH

Mit telnet(1) oder rlogin(1) werden Daten in einer unverschlüsselten Form über das Netzwerk gesendet. Daher besteht die Gefahr, das Benutzer/Passwort Kombinationen oder alle Daten an beliebiger Stelle zwischen dem Client und dem Server abgehört werden. Mit OpenSSH stehen eine Reihe von Authentifizierungs- und Verschlüsselungsmethoden zur Verfügung, um das zu verhindern.


10.11.2. Aktivieren von sshd

Stellen Sie sicher, dass /etc/rc.conf die folgende Zeile enthält:

sshd_enable="YES"

Dadurch wird sshd(8), der Dæmon von OpenSSH bei dem nächsten Neustart geladen. Alternativ können Sie den Dæmon auch direkt starten, indem Sie auf der Kommandozeile das Kommando sshd absetzen.


10.11.3. SSH Client

ssh(1) arbeitet ähnlich wie rlogin(1):

# ssh user@example.com
Host key not found from the list of known hosts.
Are you sure you want to continue connecting (yes/no)? yes
Host 'example.com' added to the list of known hosts.
user@example.com's password: *******

Der Anmeldevorgang wird danach, wie von rlogin oder telnet gewohnt, weiterlaufen. SSH speichert einen Fingerabdruck des Serverschlüssels. Die Aufforderung, yes einzugeben, erscheint nur bei der ersten Verbindung zu einem Server. Weitere Verbindungen zu dem Server werden gegen den gespeicherten Fingerabdruck des Schlüssels geprüft und der Client gibt eine Warnung aus, wenn sich der empfangene Fingerabdruck von dem gespeicherten unterscheidet. Die Fingerabdrücke der Version 1 werden in ~/.ssh/known_hosts, die der Version 2 in ~/.ssh/known_hosts2 gespeichert.

In der Voreinstellung akzeptieren OpenSSH-Server Verbindungen mit SSH v1 und SSH v2. Die Clients können sich aber das Protokoll auswählen, dabei wird die Protokollversion 2 als robuster und sicherer als die Vorgängerversion angesehen.

Mit den Optionen -1 oder -2 kann die Protokollversion, die ssh verwendet, erzwungen werden.


10.11.4. Secure Copy

Mit scp(1) lassen sich Dateien analog wie mit rcp(1) auf entfernte Maschinen kopieren. Mit scp werden die Dateien allerdings in einer sicheren Weise übertragen.

# scp user@example.com:/COPYRIGHT COPYRIGHT
user@example.com's password:
COPYRIGHT            100% |*****************************|  4735
00:00
#

Da der Fingerabdruck schon im vorigen Beispiel abgespeichert wurde, wird er bei der Verwendung von scp in diesem Beispiel überprüft. Da die Fingerabdrücke übereinstimmen, wird keine Warnung ausgegeben.

Die Argumente, die scp ü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 über das Netzwerk kopiert werden, können ein oder mehrere Argumente die Form user@host:<path_to_remote_file> besitzen.


10.11.5. Konfiguration

Die für das ganze System gültigen Konfigurationsdateien des OpenSSH-Dæmons und des Clients finden sich in dem Verzeichnis /etc/ssh.

Die Client-Konfiguration befindet sich in ssh_config, die des Servers befindet sich in sshd_config.

Das SSH-System lässt sich weiterhin über die Anweisungen sshd_program (Vorgabe ist /usr/sbin/sshd) und sshd_flags in /etc/rc.conf konfigurieren.


10.11.6. ssh-keygen

Mit ssh-keygen(1) können RSA-Schlüssel für einen Benutzer erzeugt werden, die anstelle von Passwörtern verwendet werden können:

% ssh-keygen -t rsa1
Initializing random number generator...
Generating p:  .++ (distance 66)
Generating q:  ..............................++ (distance 498)
Computing the keys...
Key generation complete.
Enter file in which to save the key (/home/user/.ssh/identity):
Enter passphrase:
Enter the same passphrase again:
Your identification has been saved in /home/user/.ssh/identity.
...

ssh-keygen(1) erzeugt einen öffentlichen und einen privaten Schlüssel für die Authentifizierung. Der private Schlüssel wird in ~/.ssh/identity, der öffentliche Schlüssel in ~/.ssh/identity.pub gespeichert. Damit die RSA-Schlüssel zur Authentifizierung verwendet werden können, muss der öffentliche Schlüssel in der Datei ~/.ssh/authorized_keys auf der entfernten Maschine abgelegt werden.

Damit werden Verbindungen zu der entfernten Maschine über den RSA-Mechanismus anstelle von Passwörtern authentifiziert.

Anmerkung: Die -t rsa1 erstellt RSA-Schlüssel für die Version 1 des SSH-Protokolls. RSA-Schlüssel für die Version 2 des SSH-Protokolls erstellen Sie mit dem Kommando ssh-keygen -t rsa.

Wenn bei der Erstellung der Schlüssel mit ssh-keygen(1) ein Passwort angegeben wurde, wird der Benutzer bei jeder Anmeldung zur Eingabe des Passworts aufgefordert.

Zum gleichen Zweck kann ein DSA-Schlüssel für Version 2 des SSH-Protokolls mit dem Kommando ssh-keygen -t dsa erstellt werden. Dies erzeugt ein DSA-Schlüsselpaar, das nur in Sitzungen der Protokollversion 2 verwendet wird. Der öffentliche Schlüssel wird in ~/.ssh/id_dsa.pub, der private Schlüssel in ~/.ssh/id_dsa gespeichert.

Die öffentlichen DSA-Schlüssel werden auch in ~/.ssh/authorized_keys auf der entfernten Maschine abgelegt.

Mit ssh-agent(1) und ssh-add(1) können Sie mehrere durch Passwörter geschützte private Schlüssel verwalten.

Warnung: Die Kommandozeilemoptionen und Dateinamen sind abhängig von der OpenSSH-Version. Die für Ihr System gültigen Optionen finden Sie in der Hilfeseite ssh-keygen(1).


10.11.7. SSH-Tunnel

Mit OpenSSH ist es möglich, einen Tunnel zu erstellen, in dem ein anderes Protokoll verschlüsselt übertragen wird.

Das folgende Kommando erzeugt einen Tunnel für telnet:

% ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
%

Dabei wurden die folgenden Optionen von ssh verwendet:

-2

Erzwingt die Version 2 des Protokolls (Benutzen Sie die Option nicht mit langsamen SSH-Servern).

-N

Zeigt an, dass ein Tunnel erstellt werden soll. Ohne diese Option würde ssh eine normale Sitzung ö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 entfernten SSH server an.

Ein SSH-Tunnel erzeugt ein Socket auf localhost und dem angegebenen Port. Jede Verbindung, die auf dem angegebenen Socket aufgemacht wird, wird dann auf den spezifizierten entfernten Rechner und Port weitergeleitet.

Im Beispiel wird der Port 5023 auf die entfernte Maschine und dort auf localhost Port 23 weitergeleitet. Da der Port 23 für Telnet reserviert ist, erzeugt das eine sichere Telnet-Verbindung durch einen SSH-Tunnel.

Diese Vorgehensweise kann genutzt werden, um jedes unsichere TCP-Protokoll wie SMTP, POP3, FTP, usw. weiterzuleiten.

Beispiel 10-1. Mit SSH einen sicheren Tunnel fü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(1) und zusätzlichen Benutzer-Accounts können Sie leicht benutzbare SSH-Tunnel aufbauen. Anstelle von Passwörtern können Sie Schlüssel benutzen und jeder Tunnel kann unter einem eigenen Benutzer laufen.


10.11.7.1. Beispiel für SSH-Tunnel

10.11.7.1.1. Sicherer Zugriff auf einen POP3-Server

Nehmen wir an, an Ihrer Arbeitsstelle gibt es einen SSH-Server, der Verbindungen von außen akzeptiert. Auf dem Netzwerk Ihrer Arbeitsstelle soll sich zudem noch ein Mail-Server befinden, der POP3 spricht. Das Netzwerk oder die Verbindung von Ihrem Haus zu Ihrer Arbeitsstelle ist unsicher und daher müssen Sie Ihre E-Mail über eine gesicherte Verbindung abholen können. Die Lösung zu diesem Problem besteht darin, eine SSH-Verbindung von Ihrem Haus zu dem SSH-Server an Ihrer Arbeitsstelle aufzubauen, und von dort weiter zum Mail-Server zu tunneln.

% 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 Ihren Mail-Client so, dass er POP3 Anfragen zu localhost Port 2110 sendet. Die Verbindung wird dann sicher zu mail.example.com weitergeleitet.


10.11.7.1.2. Umgehen einer strengen Firewall

Einige Netzwerkadministratoren stellen sehr drakonische Firewall-Regeln auf, die nicht nur einkommende Verbindungen filtern, sondern auch ausgehende. Es kann sein, dass Sie externe Maschinen nur über die Ports 22 und 80 (SSH und Web) erreichen.

Sie wollen auf einen Dienst, der vielleicht nichts mit Ihrer Arbeit zu tun hat, wie einen Ogg Vorbis Musik-Server, zugreifen. Wenn der Ogg Vorbis Server nicht auf den Ports 22 oder 80 läuft, können Sie aber nicht auf ihn zugreifen.

Die Lösung hier ist es, eine SSH-Verbindung zu einer Maschine außerhalb der Firewall aufzumachen und durch diese zum Ogg Vorbis Server zu tunneln.

% ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
user@unfirewalled-system.example.org's password: *******

Konfigurieren Sie Ihren Client so, dass er localhost und Port 8888 benutzt. Die Verbindung wird dann zu music.example.com Port 8000 weitergeleitet und Sie haben die Firewall erfolgreich umgangen.


10.12. Vorgeschriebene Zugriffskontrolle (MAC)

Gefördert von DARPA und Network Associates Laboratories. Beigetragen von Robert Watson.

In FreeBSD 5.0 wurde ein neues kernelbasiertes Sicherheitssystem eingeführt: das TrustedBSD-MAC-Framework. Das MAC-Framework erlaubt die Erweiterung der Zugriffskontrollen des Kernels beim Übersetzen, beim Systemstart und zur Laufzeit. Damit lassen sich Module laden, die vorgeschriebene Zugriffskontrollen (Mandatory Access Control, MAC) bereitstellen, oder angepasste Module laden, die zur Systemhärtung eingesetzt werden können. Das MAC-Framework befindet sich noch im Teststadium und sollte daher erst nach sorgfältigen Überlegungen auf produktiven Systemen eingesetzt werden. Voraussichtlich wird das MAC-Framework ab FreeBSD 5.2 produktionsreif sein.

Wenn das MAC-Framework im Kernel aktiviert ist, können Sicherheitsmodule die Zugriffskontrollen des Kernels erweitern und damit Zugriffe auf Systemdienste oder Systemobjekte einschränken. Beispielsweise erweitert das mac_bsdextended(4)-Modul die Zugriffskontrollen auf Dateisysteme und erlaubt es, Regelsätze, wie sie analog in Firewalls verwendet werden, aufzustellen, die Zugriffe auf Dateisystemobjekte anhand der Benutzer-ID und der Zugehörigkeit zu Gruppen regeln. Einige Module, wie das mac_seeotheruids(4)-Modul, müssen gar nicht oder nur minimal konfiguriert werden, andere Module, wie das mac_biba(4)-Modul oder das mac_mls(4)-Modul, sind aufwändig zu konfigurieren, da sie Objekte systemweit kennzeichnen.

Fügen Sie die nachstehende Zeile der Kernelkonfiguration hinzu, um das MAC-Framework zu aktivieren:

options MAC

Die Sicherheitsmodule des Basissystems können Sie mit kldload(8) oder während des Systemstarts mit loader(8) laden oder mit den nachstehenden Optionen fest in den Kernel einbinden.

Die Zugriffsrichtlinien (policy) der Module werden unterschiedlich konfiguriert. Oft lässt sich ein Modul über den Namensraum security.mac der sysctl(8)-MIB konfigurieren. Richtlinien, die vom Dateisystem oder bestimmten Kennzeichen abhängen, erfordern vielleicht eine initiale Konfiguration, in der Systemobjekten Kennzeichen zugeordnet werden müssen oder eine Konfigurationsdatei für die Richtlinie erstellt werden muss. Die erforderlichen Schritte werden in den Hilfeseiten des betreffenden Moduls beschrieben.

Zur Konfiguration des MAC-Frameworks und der Kennzeichen, die von verschiedenen Richtlinien verwendet werden, stehen eine Reihe von Werkzeugen zur Verfügung. Das Anmeldeverfahren und die Verwaltung von Berechtigungsnachweisen (setusercontext(3)) wurden erweitert, so dass Kennzeichen für Benutzerkonten mit login.conf(5) eingerichtet werden können. Um Kennzeichen auf Prozessen, Dateien und Adaptern lesen und schreiben zu können, wurden su(1), ps(1), ls(1) und ifconfig(8) geändert. Zur Verwaltung der Kennzeichen wurden neue Werkzeuge eingeführt, beispielsweise getfmac(8), setfmac(8) und setfsmac(8) zur Verwaltung von Dateikennzeichen oder getpmac(8) und setpmac(8).

Die folgende Aufstellung beschreibt alle mit FreeBSD 5.0 ausgelieferten Sicherheitsmodule.


10.12.1. Biba-Richtlinie zur Sicherung der Integrität (mac_biba)

Hersteller: TrustedBSD Project

Modulname: mac_biba.ko

Kerneloption: MAC_BIBA

Die Biba-Richtlinie (Biba Integrity Policy, mac_biba(4)) kennzeichnet die Integrität aller Systemobjekte (die Kennzeichnung kann hierarchisch oder nicht-hierarchisch erfolgen) und erzwingt einen Informationsfluß, der verhindert, dass Objekte mit hoher Integrität von Subjekten mit niedriger Integrität verändert werden. Die Integrität der Objekte wird dadurch sichergestellt, dass Subjekte mit hoher Integrität (üblicherweise Prozesse) nicht lesend auf Objekte niedrigerer Integrität (häufig Dateien) zugreifen dürfen und Subjekte niedrigerer Integrität nicht schreibend auf Objekte höherer Integrität zugreifen dürfen. Diese Richtlinie dient häufig zum Schutz der Trusted Code Base in kommerziellen Sicherheitssystemen. Da die Biba-Richtlinie systemweite Kennzeichen zur Verfügung stellt, muss Sie fest in den Kernel integriert sein oder zum Zeitpunkt des Systemstarts geladen werden.


10.12.2. Dateisystem-Richtlinie (mac_bsdextended)

Hersteller: TrustedBSD Project

Modulname: mac_bsdextended.ko

Kerneloption: MAC_BSDEXTENDED

Die Dateisystem-Richtlinie (File System Firewall Policy, mac_bsdextended(4)) erweitert die Zugriffsrechte des BSD-Dateisystems. Ein Administrator kann für Zugriffe auf Dateisystemobjekte anderer Benutzer und Gruppen Regelsätze, analog den von Firewalls verwendeten, definieren. Die Regelsätze, die mit ugidfw(8) verwaltet werden, beschränken den Zugriff auf Dateien und Verzeichnisse aufgrund der UID und der GID des zugreifenden Prozesses sowie dem Besitzer und der Gruppe des Objekts auf das zugegriffen werden soll. Da alle Regeln die möglichen Zugriffe beschränken, können sie in beliebiger Reihenfolge angelegt werden. Diese Richtlinie erfordert keine gesonderte Konfiguration oder die Vergabe von Kennzeichen und mag für Mehrbenutzer-Umgebungen geeignet sein, in denen vorgeschriebene Zugriffskontrollen für den Datenaustausch zwischen Benutzern erforderlich sind. Seien Sie vorsichtig, wenn Sie die Zugriffe auf Dateien von root oder anderen System-Accounts einschränken. Viele nützliche Programme und Verzeichnisse gehören diesen Benutzern und die falsche Anwendung der Dateisystem-Richtlinie kann, wie ein falscher Regelsatz einer Firewall, das System unbrauchbar machen. Mithilfe der Bibliothek libugidfw(3) können leicht neue Werkzeuge zur Verwaltung der Regelsätze geschrieben werden.


10.12.3. Interface-silencing-Richtlinie (mac_ifoff)

Hersteller: TrustedBSD Project

Modulname: mac_ifoff.ko

Kerneloption: MAC_IFOFF

Die Interface-silencing-Richtlinie (mac_ifoff(4)) verhindert, das die Netzwerkkarte vom Systemstart an bis zu dem Zeitpunkt, an dem sie explizit aktiviert wird, benutzt werden kann. Damit verhindert die Richtlinie ungewollte Antworten auf eingehende Pakete. Diese Richtlinie eignet sich für Umgebungen, in denen der Netzverkehr passiv, das heißt ohne eigene Pakete zu erzeugen, beobachtet werden soll.


10.12.4. Low-Watermark Mandatory Access Control (mac_lomac)

Hersteller: Network Associates Laboratories

Modulname: mac_lomac.ko

Kerneloption: MAC_LOMAC

Wie die Biba-Richtlinie kennzeichnet die LOMAC-Richtlinie (mac_lomac(4)) systemweit die Integrität aller Objekte. Im Gegensatz zur Biba-Richtlinie können allerdings Subjekte hoher Integrität lesend auf Objekte niedrigerer Integrität zugreifen. In diesem Fall wird aber die Integrität des lesenden Subjekts heruntergesetzt, damit dieses nicht mehr schreibend auf Objekte mit hoher Integrität zugreifen kann. Diese Richtlinie ist leichter als die Biba-Richtlinie zu benutzen und zu konfigurieren. Da sie allerdings systemweit die Objekte kennzeichnet, muss sie, wie die Biba-Richtlinie, fest in den Kernel eingebunden sein oder beim Systemstart geladen werden.


10.12.5. Multi-Level-Security Richtlinie (mac_mls)

Hersteller: TrustedBSD Project

Modulname: mac_mls.ko

Kerneloption: MAC_MLS

Die Multi-Level-Security Richtlinie (MLS, mac_mls(4)) stellt systemweit hierarchische und nicht-hierarchische Kennzeichen zur Markierung der Vertraulichkeit von Objekten zur Verfügung. Die Richtlinie stellt einen Informationsfluß sicher, der garantiert, dass vertrauliche Daten nicht unberechtigt weitergeleitet werden. Die MLS-Richtlinie wird häufig zusammen mit der Biba-Richtlinie in sicheren kommerziellen Mehrbenutzerumgebungen verwendet. Mit hierarchischen Kennzeichen können Zugangsberechtigungen zu Verschlusssachen (Einteilung in ``streng geheim'', ``geheim'', usw.) abgebildet werden. Nicht-hierarchische Kennzeichen dienen zur Verwirklichung des Prinzips ``Kenntnis nur, wenn nötig'' (need to know). Alle Systemobjekte müssen wie bei der Biba-Richtlinie vorher gekennzeichnet werden, so dass die Richtlinie fest in den Kernel eingebunden werden muss oder beim Systemstart als Modul geladen werden muss. Der Konfigurationsaufwand der MLS-Richtlinie kann analog zur Biba-Richtlinie sehr hoch sein.


10.12.6. Rumpf-Richtlinie (mac_none)

Hersteller: TrustedBSD Project

Modulname: mac_none.ko

Kerneloption: MAC_NONE

Die Rumpf-Richtlinie (MAC Stub Policy, mac_none(4)) ist als Beispiel für Entwickler gedacht. Sie stellt alle benötigten Funktionen zur Verfügung, ohne die Zugriffsrechte im System zu verändern. Auf einem Produktionssystem ist die Anwendung dieser Richtlinie nicht sehr sinnvoll.


10.12.7. Partitions-Richtlinie (mac_partition)

Hersteller: TrustedBSD Project

Modulname: mac_partition.ko

Kerneloption: MAC_PARTITION

Die Partitions-Richtlinie (Process Partition Policy, mac_partition(4)) schränkt die Sichtbarkeit von Prozessen ein, indem Prozessen Partitionsnummern zugewiesen werden. Besitzt ein Prozess keine Partitionsnummer, so kann er alle Prozesse auf dem System sehen, besitzt er hingegen eine Partitionsnummer, so kann er nur Prozesse in derselben Partition sehen. Die Richtlinie kann fest in den Kernel eingebunden werden, beim Systemstart oder zur Laufzeit geladen werden.


10.12.8. See Other Uids (mac_seeotheruids)

Hersteller: TrustedBSD Project

Modulname: mac_seeotheruids.ko

Kerneloption: MAC_SEEOTHERUIDS

Die Richtlinie See Other Uids (mac_seeotheruids(4)) schränkt wie mac_partition(4) die Sichtbarkeit von Prozessen ein. Allerdings wird die Sichtbarkeit anderer Prozesse von den Berechtigungen eines Prozesses anstelle einer Partitionsnummer bestimmt. Die Richtlinie kann so konfiguriert werden, dass sie für bestimmte Accounts oder Gruppen nicht gilt, so dass beispielsweise Systemverwalter alle Prozesse sehen können. Die Richtlinie kann fest in den Kernel eingebunden werden, beim Systemstart oder zur Laufzeit geladen werden.


10.12.9. Test-Richtlinie (mac_test)

Hersteller: TrustedBSD Project

Modulname: mac_test.ko

Kerneloption: MAC_TEST

Die Test-Richtlinie (MAC Framework Test Policy, mac_test(4)) stellt einen Regressions-Test für das MAC-Framework bereit. Die Richtlinie führt zu einem Systemstopp für den Fall, dass interne Prüfungen auf korrekte Kennzeichen fehlschlagen. Sie kann fest in den Kernel eingebunden werden, beim Systemstart oder zur Laufzeit geladen werden.


10.13. Zugriffskontrolllisten für Dateisysteme

Beigetragen von Tom Rhodes.

Zusammen mit anderen Verbesserungen des Dateisystems wie Schnappschüsse gibt es ab FreeBSD 5.0 Zugriffskontrolllisten (access control list, ACL).

Zugriffskontrolllisten erweitern die normalen Zugriffsrechte von UNIX Systemen auf eine kompatible (POSIX.1e) Weise und bieten feiner granulierte Sicherheitsmechanismen.

Zugriffskontrolllisten für Dateisysteme werden mit der nachstehenden Zeile in der Kernelkonfiguration aktiviert:

options UFS_ACL

Diese Option ist in der GENERIC-Konfiguration aktiviert. Das System gibt eine Warnung aus, wenn ein Dateisystem mit ACLs eingehangen werden soll und die Unterstützung für ACLs nicht im Kernel aktiviert ist. Das Dateisystem muss weiterhin erweiterte Attribute zur Verfügung stellen, damit ACLs verwendet werden können. Das neue UNIX-Dateisystem UFS2 stellt diese Attribute standardmäßig zur Verfügung.

Anmerkung: Die Konfiguration erweiterter Attribute auf UFS1 ist mit einem höheren Aufwand als die Konfiguration erweiterter Attribute auf UFS2 verbunden. Zudem ist UFS2 mit erweiterten Attributen leistungsfähiger als UFS1. Zugriffskontrolllisten sollten daher mit UFS2 verwendet werden.

Die Angabe der Option acl in /etc/fstab aktiviert Zugriffskontrolllisten für ein Dateisystem. Die bevorzugte Möglichkeit ist die Verwendung von Zugriffskontrolllisten mit tunefs(8) (Option -a), im Superblock des Dateisystems festzuschreiben. Diese Möglichkeit hat mehrere Vorteile:

  • Nochmaliges Einhängen eines Dateisystems (Option -u von mount(8)) verändert den Status der Zugriffskontrolllisten nicht. Die Verwendung von Zugriffskontrolllisten kann nur durch Abhängen und erneutes Einhängen eines Dateisystems verändert werden. Das heißt auch, dass Zugriffskontrolllisten nicht nachträglich auf dem Root-Dateisystem aktiviert werden können.

  • Die Zugriffskontrolllisten auf den Dateisystemen sind, unabhängig von den Option in /etc/fstab oder Namensänderungen der Geräte, immer aktiv. Dies verhindert auch, dass Zugriffskontrolllisten aus Versehen auf Dateisystem ohne Zugriffskontrolllisten aktiviert werden und durch falsche Zugriffsrechte Sicherheitsprobleme entstehen.

Anmerkung: Es kann sein, dass sich der Status von Zugriffskontrolllisten später durch nochmaliges Einhängen des Dateisystems (Option -u von mount(8)) ändern lässt. Die momentane Variante ist aber sicherer, da der Status der Zugriffskontrolllisten nicht versehentlich geändert werden kann. Allgemein sollten Zugriffskontrolllisten auf einem Dateisystem, auf dem sie einmal verwendet wurden, nicht deaktiviert werden, da danach die Zugriffsrechte falsch sein können. Werden Zugriffskontrolllisten auf einem solchen Dateisystem wieder aktiviert, werden die Zugriffsrechte von Dateien, die sich zwischenzeitlich geändert haben, überschrieben, was zu erneuten Problemen führt.

Die Zugriffsrechte einer Datei werden durch ein + (Plus) gekennzeichnet, wenn die Datei durch Zugriffskontrolllisten geschü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

Die Verzeichnisse directory1, directory2 und directory3 sind durch Zugriffskontrolllisten geschützt, das Verzeichnis public_html nicht.


10.13.1. Zugriffskontrolllisten benutzen

Das Werkzeug getfacl(1) 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--

Das Werkzeug setfacl(1) ändert oder entfernt ACLs auf Dateien. Zum Beispiel:

% setfacl -k test

Die Option -k entfernt alle ACLs einer Datei oder eines Dateisystems. Besser wäre es, die Option -b zu verwenden, da sie die erforderlichen Felder beibehält.

% setfacl -m u:trhodes:rwx,g:web:r--,o::--- test

Mit dem vorstehenden 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.


Kapitel 11. Drucken

Beigetragen von Sean Kelly. Restrukturiert und aktualisiert durch Jim Mock. Übersetzt von Stefan Bethke.

11.1. Übersicht

Mit FreeBSD können Sie viele unterschiedliche Drucker benutzen, von den ältesten Nadeldruckern bis zu den neuesten Laserdruckern, und allen möglichen Geräten dazwischen. Auf diese Weise können Sie hochwertige Ausdrucke mit Ihren Programmen erzeugen.

Sie können FreeBSD auch so konfigurieren, dass es Druckaufträge von anderen Computern über Ihr lokales Netzwerk entgegennimmt, seien es Windows-, Mac OS- oder andere FreeBSD-Computer. FreeBSD stellt sicher, dass die Druckaufträge in der richtigen Reihenfolge bearbeitet werden und kann optional eine Titelseite mit dem Namen des Auftraggebers eines Druckauftrags aufgeben. FreeBSD kann auch Statistiken über die Computer und Benutzer führen, die Ausdrucke in Auftrag geben.

In diesem Kapitel erfahren Sie, wie Sie:

  • FreeBSD-Druckerwarteschlangen einrichten.

  • Druckfilter installieren, die Druckaufträge je nach Bedarf besonders behandeln und z.B. Dokumente automatisch in eine Form umwandeln, die Ihr Drucker versteht.

  • Druckaufträge mit einer Titelseite versehen können.

  • Auf einem Drucker drucken können, der an einen anderen Computer angeschlossen ist.

  • Auf einem Drucker drucken können, der direkt an das Netzwerk angeschlossen ist.

  • die Größe von Druckaufträgen beschränken können, oder bestimmte Benutzer von den Benutzung des Drucksystems ausschließen können.

  • Statistiken aufzeichnen und die Benutzung des Drucksystems nach Benutzern und Computern aufschlüsseln können.

  • Probleme beim Drucken diagnostizieren und beheben können.

Bevor Sie dieses Kapitel lesen:

  • Machen Sie sich mit der Konfiguration und Installation eines neuen Kernels vertraut (Kapitel 9).


11.2. Einführung

Um einen Drucker mit FreeBSD zu benutzen, müssen Sie das Berkeley Line Printer Spooling System, auch als LPD-Drucksystem bekannt, konfigurieren. Dieses System zur Verwaltung von Druckaufträgen ist das Standardsystem in FreeBSD. Dieses Kapitel führt Sie in das LPD-Drucksystem ein, und zeigt Ihnen die Konfiguration.

Wenn Sie bereits mit LPD oder einem anderen Drucksystem vertraut sind, können Sie direkt im Abschnitt Einrichten des Drucksystems weiterlesen.

LPD steuert alle Aspekte rund um die Drucker, die an den Computer angeschlossen sind. Es ist verantwortlich für:

  • Die Zugriffskontrolle für direkt und über das Netzwerk angeschlossene Drucker.

  • Die Entgegennahme von Dateien, die gedruckt werden sollen; eine so an das Drucksystem übergebene Datei wird als Druckauftrag bezeichnet.

  • Den gleichzeitigen Zugriff von mehreren Benutzern auf einen Drucker. Alle Druckaufträge werden in einer Druckerwarteschlange gesammelt, und nacheinander abgearbeitet.

  • Den Druck von Titelseiten (auch als Banner- oder Burst-Seiten bezeichnet), damit Benutzer ihre Druckaufträge schnell innerhalb eines Stapels von ausgedruckten Dokumenten finden können.

  • Das Einstellen der korrekten Kommunikations-Parameter für Drucker, die seriell angeschlossen sind.

  • Das Senden von Druckaufträgen an ein LPD-System auf einem anderen Computer.

  • Das Ausführen von speziellen Filtern, um Druckaufträge in die unterschiedlichen Seitenbeschreibungssprachen umzusetzen oder an die Fähigkeiten eines Druckers anzupassen.

  • Die Erfassung von Abrechnungsdaten für Druckaufträge.

Sie können LPD alle diese Funktionen, oder auch nur einen Teil davon, ausführen lassen, indem Sie die Konfigurationsdatei (/etc/printcap) anpassen, und indem Sie spezielle Filterprogramme bereitstellen.


11.2.1. Vorteile des Drucksystems

Wenn Sie der einzige Benutzer sind, der mit Ihrem Computer arbeitet, fragen Sie sich vielleicht, warum Sie die Konfigurationsarbeit für das Drucksystem auf sich nehmen sollten, wenn Sie Titelseiten, Abrechnunsdaten oder Zugriffskontrolle nicht benötigen. Obwohl Sie direkt auf den Drucker zugreifen können, bietet LPD eine Reihe von Vorteilen:

  • LPD druckt im Hintergrund; Sie müssen nicht erst darauf warten, dass Ihr Druckauftrag an den Drucker übermittelt worden ist.

  • LPD kann Druckaufträge mit Kopf- oder Fußzeilen versehen, oder ein spezielles Dateiformat, wie TeX-DVI, automatisch in ein für den Drucker verständliches Format umwandeln; Sie müssen diese Schritte nicht manuell ausführen.

  • Viele freie und kommerzielle Programme, mit denen Sie drucken können, erwarten, mithilfe des LPD-Drucksystems zu drucken. Wenn Sie das Drucksystem konfiguriert haben, können Sie einfacher mit neuer oder auch vorhandener Software drucken.


11.3. Grund-Konfiguration

Um einen Drucker mit dem LPD-Drucksystem benutzen zu können, müssen Sie sowohl Ihren Drucker und die Drucker-Schnittstelle als auch das LPD-Drucksystem konfigurieren. Dieser Abschnitt beschreibt zwei Konfigurationen:

  • Abschnitt Einfache Drucker-Konfiguration beschreibt, wie Sie einen Drucker an Ihren Computer anschließen und LPD so konfigurieren, dass Sie Textdateien zum Drucker senden können.

  • Abschnitt Erweiterte Drucker-Konfiguration beschreibt, wie Sie mit speziellen Dateiformaten umgehen können, wie Sie Titelseiten drucken können, wie Sie den Zugriff auf Drucker einschränken können, und wie Sie Abrechnungsdaten aufzeichnen können.


11.3.1. Einfache Drucker-Konfiguration

Dieser Abschnitt beschreibt, wie Sie die LPD-Software konfigurieren, um Ihren Drucker zu benutzen. Diese Grundlagen werden erklärt:

Wenn Sie einen Drucker einrichten möchten, der über das Netzwerk angeschlossen ist (anstatt über die serielle oder parallele Schnittstelle), lesen Sie bitte Abschnitt Drucker mit direkter TCP-Schnittstelle.

Obwohl dieser Abschnitt ``Grund-Konfiguration'' heißt, ist die Konfiguration relativ komplex. Es ist vergleichsweise schwierig, einen Drucker mit Ihrem Computer und dem LPD-Drucksystem zu verbinden. Die weiteren Optionen, wie Kopfzeile oder Titelseiten, sind einfach zu konfigurieren, sobald die Grund-Konfiguration erfolgreich abgeschlossen ist.


11.3.1.1. Hardware-Konfiguration

Dieser Abschnitt beschreibt, über welche Schnittstellen Sie einen Drucker mit Ihrem Computer verbinden können. Er behandelt sowohl die Schnittstellen und Kabel, als auch die Kerneloptionen, die Sie benötigen, um FreeBSD mit Ihrem Drucker kommunizieren zu lassen.

Wenn Sie Ihren Drucker bereits erfolgreich mit einem anderen Betriebssystem auf Ihrem PC eingesetzt haben, können Sie wahrscheinlich mit dem Abschnitt Software-Konfiguration fortfahren.


11.3.1.1.1. Schnittstellen und Kabel

Praktisch alle Drucker unterstützen eine dieser Schnittstellen:

  • Seriell angeschlossene Drucker werden über eine serielle Schnittstelle mit Ihrem Computer verbunden. Diese Schnittstelle wird von vielen unterschiedlichen Systemen verwendet. Serielle Kabel sind leicht erhältlich und können auch einfach selbst hergestellt werden. Einige Drucker erfordern möglicherweise ein spezielles Kabel oder besondere Kommunikationseinstellungen.

  • Parallel angeschlossene Drucker werden über eine parallele Schnittstelle mit Ihrem Computer verbunden. Diese Schnittstelle wird hauptsächlich von PCs und Workstations benutzt. Kabel sind leicht erhältlich, sind aber vergleichsweise schwer selbst herzustellen. Üblicherweise brauchen keine Kommunikationsparameter festgelegt zu werden; dies macht die Einrichtung sehr einfach.

    Die parallele Schnittstelle wird auch als ``Centronics''-Schnittstelle bezeichnet, nach dem Namen des Steckverbinders, der hier häufig zum Einsatz kommt.

Im Allgemeinen sind serielle Schnittstellen langsamer als parallele. Parallele Schnittstellen bieten aber häufig nur Kommunikation in einer Richtung, vom Computer zum Drucker. Viele moderne Parallelschnittstellen können auch bi-direktional Daten nach dem Standard IEEE 1284 übertragen.

Die bi-direktionale Kommunikation wird üblicherweise nur für PostScript-Drucker benötigt. Da ein PostScript-Druckauftrag ein komplettes Programm ist, kann es auch Daten an den Computer zurückliefern, ohne überhaupt eine Seite Papier zu bedrucken. Auf diesem Wege werden auch Probleme wie z.B. ein Papierstau vom Drucker an den Computer übermittelt. Darüberhinaus ist dies die effektivste Methode, um die tatsächlich gedruckte Anzahl an Seiten vom Drucker abzufragen: ein PostScript-Programm ermittelt jeweils vor und direkt nach einem Druckauftrag den Seitenzähler des Druckers, und vergleicht die beiden Zählerwerte.


11.3.1.1.2. Parallele Schnittstellen

Um einen Drucker mit paralleler Schnittstelle an Ihren Computer anzuschließen, verbinden Sie den Drucker mit einer parallelen Schnittstelle Ihres Computers. Die Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen hier weiterhelfen.

Notieren Sie sich, mit welcher parallelen Schnittstelle des Computers Sie den Drucker verbunden haben. Die meisten Computer haben lediglich eine parallele Schnittstelle. Der FreeBSD-Gerätename der ersten Schnittstelle lautet /dev/ppc0, der der zweiten /dev/ppc1, und so weiter. Der Gerätename für den Drucker an der ersten parallelen Schnittstelle folgt dem selben Schema und lautet /dev/lpt0, usw.


11.3.1.1.3. Serielle Schnittstellen

Um einen Drucker mit serieller Schnittstelle an Ihren Computer anzuschließen, verbinden Sie den Drucker mit einer seriellen Schnittstelle Ihres Computers. Die Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen hier weiterhelfen.

Sollten Sie sich nicht sicher sein, welches das ``richtige Kabel'' ist, können Sie eine dieser Alternativen ausprobieren:

  • Ein Modemkabel verbindet alle Anschlüsse an einem Ende des Kabels eins-zu-eins mit den Anschlüssen am anderen Ende des Kabels. Ein solches Kabel wird auch als (engl.) ``DTE-to-DCE-'' oder ``DEE-zu-DÜE-''Kabel bezeichnet.

  • Ein Nullmodemkabel verbindet einige Signale eins-zu-eins, andere über Kreuz (z.B. Sende- und Empfangsleitung), und verbindet einige weitere direkt im Stecker miteinander. Ein solches Kabel wird auch als (engl.) ``DTE-to-DTE-'' oder ``DEE-zu-DEE-''Kabel bezeichnet.

  • Ein Serielles Druckerkabel schließlich, das für einige spezielle Drucker benötigt wird, verbindet zusätzliche Signale miteinander, anstatt sie im Stecker zurückzuführen.

Sie sollten auch die Kommunikationsparameter am Drucker einstellen; üblicherweise gibt es dazu DIP-Schalter, oder eine Option in der Menüführung am Drucker. Wählen Sie die höchste Bitrate (auch als bps Bits pro Sekunde oder Baudrate bezeichnet), die sowohl Ihr Drucker als auch Ihr Computer unterstützen. Wählen Sie 7 oder 8 Bits, gerade, ungerade oder keine Parität, und ein oder zwei Stoppbits. Wählen Sie die Art der Flusssteuerung: keine, XON/XOFF (auch als ``in-band-'' oder ``Software''-Flusssteuerung bezeichnet), oder Hardware. Notieren Sie sich diese Einstellungen, damit Sie sie später bei der Software-Konfiguration zur Verfügung haben.


11.3.1.2. Software-Konfiguration

Dieser Abschnitt beschreibt die notwendigen Konfigurationsschritte, damit Sie mit dem FreeBSD-LPD-System drucken können.

Diese Schritte müssen Sie ausführen:

  1. Konfigurieren Sie Ihren Kernel, soweit notwendig, um die Schnittstelle benutzen zu können, an die Ihr Drucker angeschlossen ist. Abschnitt Kernel-Konfiguration erklärt, welche Optionen Sie benötigen.

  2. Konfigurieren Sie die Kommunikationseinstellungen für die parallele Schnittstelle, sofern Sie sie benutzen. Abschnitt Kommunikationseinstellungen für die parallele Schnittstelle enthält die Details.

  3. Prüfen Sie, ob Sie Daten an den Drucker senden können. Abschnitt Prüfen der Drucker-Kommunikation führt eine Reihe von Möglichkeiten auf.

  4. Konfigurieren Sie LPD für Ihren Drucker, indem Sie die Konfigurationsdatei /etc/printcap anpassen. Details dazu finden Sie im Abschnitt LPD aktivieren: die /etc/printcap-Datei.


11.3.1.2.1. Kernel-Konfiguration

Der Betriebssystem-Kernel ist für eine bestimmte Kombination aus Geräten kompiliert. Dies schließt Ihre seriellen oder parallelen Schnittstellen mit ein. Dementsprechend kann es notwendig sein, die Kernelkonfiguration um weitere Schnittstellen zu erweitern.

So können Sie prüfen, ob Ihr Kernel die serielle Schnittstelle unterstützt, an die Sie den Drucker angeschlossen haben:

# grep sioN /var/run/dmesg.boot

Ersetzen Sie N durch die Nummer der seriellen Schnittstelle, beginnend bei Null. Wenn Sie eine Ausgabe ähnlich der folgenden erhalten, unterstützt ihr Kernel diese Schnittstelle:

sio2 at port 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A

Erhalten Sie keine Ausgabe, oder eine Fehlermeldung, wird die Schnittstelle nicht korrekt unterstützt.

So können Sie prüfen, ob Ihr Kernel die parallele Schnittstelle unterstützt, an die Sie den Drucker angeschlossen haben:

# grep ppcN /var/run/dmesg.boot

Ersetzen Sie N durch die Nummer der parallelen Schnittstelle, beginnend bei Null. Wenn Sie eine Ausgabe ähnlich der folgenden erhalten, unterstützt ihr Kernel diese Schnittstelle:

ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/8 bytes threshold

Erhalten Sie keine Ausgabe, oder eine Fehlermeldung, wird die Schnittstelle nicht korrekt unterstützt.

Gegebenenfalls müssen Sie Ihren Kernel umkonfigurieren und neu kompilieren, damit die von Ihnen gewählte Schnittstelle unterstützt wird.

Um Unterstützung für eine serielle Schnittstelle hinzuzufügen, lesen Sie bitte Kapitel Konfiguration des FreeBSD Kernels. Um eine parallele Schnittstelle hinzuzufügen, lesen Sie bitte ebenfalls jenes Kapitel als auch den folgenden Abschnitt Kommunikationseinstellungen für die parallele Schnittstelle.


11.3.1.3. Hinzufügen der /dev-Einträge für die Schnittstelle

Anmerkung: FreeBSD 5.0 verfügt über das devfs-Dateisystem, das die notwendigen Gerätedateien automatisch anlegt. Wenn Sie FreeBSD mit aktiviertem devfs benutzen, können Sie diesen Abschnitt überspringen.

Damit Programme auf die Schnittstelle zugreifen können, muss nicht nur der Kernel richtig konfiguriert sein, sondern es muss auch eine Gerätedatei im /dev-Verzeichnis angelegt werden.

So legen Sie eine Gerätedatei im /dev-Verzeichnis an:

  1. Werden Sie root mithilfe des su(1)-Befehls. Geben Sie das Kennwort von root ein, sobald Sie dazu aufgefordert werden.

  2. Wechseln Sie in das /dev-Verzeichnis:

    # cd /dev
    
  3. Geben Sie ein:

    # ./MAKEDEV Schnittstelle
    

    Schnittstelle ist der Gerätename für die Schnittstelle, die Sie einrichten. Benutzen Sie lpt0 für einen Drucker an der ersten parallelen Schnittstelle, lpt1 für einen Drucker an der zweiten, usw. Benutzen Sie ttyd0 für die erste serielle Schnittstelle, ttyd1 für die zweite, usw.

  4. Um zu prüfen, ob die Gerätedateien angelegt wurden, geben Sie ein:

    # ls -l Schnittstelle
    

11.3.1.3.1. Kommunikationseinstellungen für die parallele Schnittstelle

Wenn Sie die parallele Schnittstelle zur Kommunikation mit Ihrem Drucker benutzen, haben Sie die Wahl zwischen Interrupt-gesteuerter oder Polling-Datenübertragung. Der generische Druckergerätetreiber lpt(4) in FreeBSD 4.X und 5.X benutzt das ppbus(4)-System, das die parallele Schnittstelle mithilfe des ppc(4)-Treibers steuert.

  • Die Interrupt-gesteuerte Datenübertragung ist die Voreinstellung im GENERIC-Kernel. Der Treiber benutzt eine IRQ-Leitung, um zu erfahren, wann der Drucker weitere Daten empfangen kann.

  • Bei der Polling-Methode prüft der Treiber in regelmäßigen Abständen, ob weitere Daten übertragen werden können.

Die Interrupt-gesteuerte Methode ist überlicherweise schneller und verbraucht weniger Rechenzeit als die Polling-Methode, es wird jedoch eine eigene IRQ-Leitung für die Schnittstelle benötigt. Darüberhinaus kann es mit einigen Druckermodellen zu Problemen kommen, wenn die Interrupt-gesteuerte Übertragung zum Einsatz kommt.

Die können die Kommunikationseinstellung entweder in der Kernel-Konfiguration wählen, oder mittels des lptcontrol(8)-Programms zur Laufzeit einstellen.

So legen Sie die Kommunikationseinstellung in der Kernel-Konfiguration fest:

  1. Ändern Sie Ihre Kernel-Konfigurationsdatei. Finden Sie die Zeile, die mit device ppc0 beginnt. Wenn Sie die zweite parallele Schnittstelle konfigurieren möchten, suchen Sie nach device ppc1, für die dritte Schnittstelle ppc2, usw.

    • Um die Interrupt-Steuerung in FreeBSD 4.X zu aktivieren, fügen Sie die irq-Angabe hinzu:

      device ppc0 at isa? irq N
      

      Ersetzen Sie N durch die Nummer der IRQ-Leitung, die dieser parallelen Schnittstelle zugewiesen ist.

      In FreeBSD 5.X ändern Sie in der Datei /boot/device.hints die Zeile:

      hint.ppc.0.irq="N"
      

      Ersetzen Sie N durch die Nummer der IRQ-Leitung, die dieser parallelen Schnittstelle zugewiesen ist. Stellen Sie sicher, dass Ihre Kernel-Konfigurationsdatei den ppc(4)-Treiber enthält:

      device ppc
      
    • Wenn Sie den Polling-Modus verwenden möchten, lassen Sie die irq-Angabe weg:

      Benutzen Sie folgende Zeile für FreeBSD 4.X:

      device ppc0 at isa?
      

      In FreeBSD 5.X entfernen Sie diese Zeile aus /boot/device.hints, oder kommentieren Sie sie aus:

      hint.ppc.0.irq="N"
      

      Sollte der Treiber die Schnittstelle dennoch im Interrupt-Modus betreiben, könnte dies an der Aktivierung durch das acpi(4)-System in FreeBSD 5.X liegen. Bitte prüfen Sie die ACPI- und die BIOS-Konfiguration.

  2. Wenn Sie Ihre Kernel-Konfigurationsdatei angepasst haben, kompilieren und installieren Sie nun einen neuen Kernel. Das Kapitel Konfiguration des FreeBSD-Kernels enthält weitere Details dazu.

So können Sie die Kommunikationseinstellung mit lptcontrol(8) ändern:

  1. Um die Interrupt-Steuerung für die Schnittstelle N zu aktivieren, geben Sie ein:

    # lptcontrol -i -d /dev/lptN
    
  2. Um den Polling-Modus für die Schnittstelle N zu aktivieren, geben Sie ein:

    # lptcontrol -p -d /dev/lptN
    

Sie können diesen Befehl in /etc/rc.local aufnehmen, damit er bei jedem Systemstart automatisch ausgeführt wird. lptcontrol(8) enthält weitere Informationen.


11.3.1.3.2. Kommunikation mit den Drucker prüfen

Bevor Sie mit der Konfiguration des LPD-Drucksystems fortfahren, sollten Sie sicherstellen, das Sie erfolgreich Daten an Ihren Drucker senden können. Es ist deutlich einfacher, Kommunikations- und Konfigurationsprobleme unabhängig voneinander zu lösen.

Der Drucker kann mit einem Probeausdruck getestet werden. Für alle Drucker, die normalen Text unmittelbar drucken können, bietet sich das Programm lptest(1) an: es produziert alle 96 druckbaren ASCII-Zeichen auf 96 Zeilen.

Für einen PostScript-Drucker (oder andere Drucker, die eine Seitenbeschreibungssprache verwenden) muss ein passendes Programm an den Drucker gesendet werden, z.B. dieses:

%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto /Helvetica findfont 12 scalefont setfont
(Funktioniert dieser Drucker?) show
showpage

Sie können dieses ProstScript-Programm in einer Datei speichern, und mit den Beispielen in den folgenden Abschnitt verwenden.

Anmerkung: Nicht alle Drucker, die eine Seitenbeschreibungssprache verwenden, benötigen ein Test-Programm: z.B. HPs PCL (das auch in vielen kompatiblen Druckern zum Einsatz zu kommt), versteht normalen Text. Besondere Escape-Sequenzen werden benutzt, um die erweiterten Möglichkeiten aufzurufen. PostScript-Drucker können in der Regel keinen normalen Text direkt verarbeiten, weil sie ein PostScript-Programm erwarten, das eine Seite produziert.


11.3.1.3.2.1. Einen Paralleldrucker prüfen

Dieser Abschnitt führt vor, wie Sie die Kommunikation mit Ihrem Drucker über die parallele Schnittstelle prüfen können.

So testen Sie einen Drucker an einer parallelen Schnittstelle:

  1. Werden Sie root mithilfe des su(1)-Befehls.

  2. Senden Sie Testdaten an den Drucker.

    • Wenn Ihr Drucker reinen Text direkt drucken kann, verwenden Sie lptest(1):

      # lptest > /dev/lptN
      

      Ersetzen Sie N durch die Nummer der parallelen Schnittstelle, an die der Drucker angeschlossen ist (angefangen bei Null).

    • Wenn Ihr Drucker PostScript (oder eine andere Seitenbeschreibungssprache) versteht, senden Sie ein passendes Testprogramm an den Drucker. Geben Sie folgenden Befehl ein:

      # cat > /dev/lptN
      

      Ersetzen Sie N durch die Nummer der parallelen Schnittstelle, an die der Drucker angeschlossen ist (angefangen bei Null). Geben Sie nun das Testprogramm ein, Zeile für Zeile. Kontrollieren Sie jede Zeile, bevor Sie die Eingabetaste drücken: Sie können die Zeile später nicht mehr ändern. Zum Schluss tippen Sie Ctrl+D. Wenn Sie ein anderes Zeichen nutzen, um das Ende der Datei anzuzeigen, müssen Sie natürlich die entsprechende Tastenkombination für dieses Zeichen betätigen.

      Sie können das Testprogramm auch in einer Datei speichern, und dann diesen Befehl aufrufen:

      # cat Testprogramm > /dev/lptN
      

      Ersetzen Sie Testprogramm durch den Dateinamen, unter dem Sie das Testprogramm gespeichert haben.

Der Drucker sollte einige Zeilen oder eine Seite drucken. Machen Sie sich keine Sorgen über falsche Formatierungen: die Software-Konfiguration enthält Informationen zum Umformatieren von Druckaufträgen.


11.3.1.3.2.2. Einen seriellen Drucker prüfen

Dieser Abschnitt führt vor, wie Sie die Kommunikation mit Ihrem Drucker über die parallele Schnittstelle prüfen können.

So testen Sie einen Drucker an einer seriellen Schnittstelle:

  1. Werden Sie root mithilfe des su(1)-Befehls.

  2. Ändern Sie die Datei /etc/remote. Fügen Sie den folgenden Eintrag hinzu:

    printer:dv=/dev/Gerät:br#Baudrate:pa=Parität
    

    Ersetzen Sie Gerät durch den Gerätenamen der seriellen Schnittstelle (ttyd0 für die erste, ttyd1 für die zweite, usw.), Baudrate ist die Geschwindigkeit und Parität die Parität (even für gerade, odd für ungerade oder none für keine), die Sie am Drucker eingestellt haben.

    Hier ein Beispieleintrag für einen Drucker, der über die dritte serielle Schnittstelle angeschlossen ist, mit 19.200 Baud kommuniziert und keine Parität verwendet:

    printer:dv=/dev/ttyd2:br#19200:pa=none
    
  3. Verbinden Sie sich mit dem Drucker über den Befehl tip(1):

    # tip printer
    

    Kommt es hierbei zu einer Fehlermeldung, ändern Sie den Eintrag in /etc/remote und verwenden Sie /dev/cuaaN statt /dev/ttydN.

  4. Senden Sie Testdaten an den Drucker.

    • Wenn Ihr Drucker reinen Text direkt drucken kann, verwenden Sie lptest(1):

      % $lptest
      
    • Wenn Ihr Drucker PostScript (oder eine andere Seitenbeschreibungssprache) versteht, senden Sie ein passendes Testprogramm an den Drucker. Geben Sie das Testprogramm ein, Zeile für Zeile. Kontrollieren Sie jede Zeile, bevor Sie die Eingabetaste drücken: Sie können die Zeile später nicht mehr ändern. Zum Schluss tippen Sie Control-D.

      Sie können das Testprogramm auch in einer Datei speichern, und dann diesen Befehl aufrufen:

      % >Testprogramm
      

      Ersetzen Sie Testprogramm durch den Dateinamen, unter dem Sie das Testprogramm gespeichert haben. Nachdem tip(1) die Datei gesendet hat, tippen Sie Control-D.

Der Drucker sollte einige Zeilen oder eine Seite drucken. Machen Sie sich keine Sorgen über falsche Formatierungen: die Software-Konfiguration enthält Informationen zum Umformatieren von Druckaufträgen.


11.3.1.4. LPD aktivieren: die /etc/printcap-Datei

Nachdem Sie Ihren Drucker angeschlossen haben, Ihren Kernel richtig konfiguriert haben und erfolgreich einen Testausdruck produziert haben, können Sie nun das LPD-System konfigurieren.

Sie konfigurieren LPD, indem Sie die Datei /etc/printcap anpassen. Da LPD die Datei jedes Mal liest, wenn eine Aktion durchgeführt wird, werden Änderungen an der Konfiguration sofort aktiv.

Die printcap(5)-Datei ist einfach aufgebaut. Sie können /etc/printcap mit Ihrem bevorzugten Texteditor bearbeiten. Sie verwendet dasselbe Format wie auch /usr/share/misc/termcap oder /etc/remote. Informationen zum Format finden Sie in cgetent(3).

Die Grund-Konfiguration des LPD-Systems beinhaltet diese Schritte:

  1. Wählen Sie einen Namen (und einige praktische Abkürzungen) für die Druckerwarteschlage, und tragen Sie ihn in die /etc/printcap-Datei ein. Abschnitt Einen Namen wählen enthält weitere Informationen.

  2. Schalten Sie den Druck von Titelseiten aus (dies ist standardmäßig eingeschaltet), indem Sie das Attribut sh setzen. Abschnitt Den Druck von Titelseiten ausschalten erklärt, wie Sie dies tun können.

  3. Legen Sie ein Pufferverzeichnis für die Warteschlange an, und geben Sie den Pfad mittels des sd-Attributs an: siehe Abschnitt Das Pufferverzeichnis anlegen.

  4. Geben Sie den Gerätenamen für Ihren Drucker mittels des lp-Attributs an: siehe Abschnitt Festlegen der Drucker-Gerätedatei. Ist Ihr Drucker über eine serielle Schnittstelle angeschlossen, benutzen Sie das Attribut ms#, wie dies in Abschnitt Festlegen der Kommunikationsparameter beschrieben ist.

  5. Installieren Sie einen Filter für reinen Text: siehe Abschnitt Den Textfilter installieren.

  6. Testen Sie die Konfiguration, indem Sie etwas mit dem lpr(1)-Befehl drucken. Die Abschnitte Die Konfiguration testen und Fehlersuche und Problembehebung enthalten weitere Informationen.

Anmerkung: Drucker, die eine Seitenbeschreibungssprache wie PostScript verwenden, können keinen reinen Text drucken. Es wird deshalb angenommen, dass Sie nur solche Dateien drucken, die Ihr Drucker verarbeiten kann.

Viele Anwender erwarten, dass sie normalen Text auf allen Druckern drucken können. Viele Programme, die mit LPD zusammenarbeiten, gehen ebenfalls von dieser Annahme aus. Wenn Sie einen PostScript-Drucker installieren, und Sie sowohl PostScript- als auch Textdateien drucken möchten, sollten Sie einen weiteren Konfigurationsschritt ausführen und einen Text-zu-PostScript-Filter installieren. Der Abschnitt Drucken von reinen Textdateien auf einem PostScript-Drucker erklärt, wie Sie dies tun können.


11.3.1.4.1. Einen Namen wählen

Der erste einfache Schritt ist, einen Namen für Ihren Drucker zu wählen. Sie können diesen Namen frei wählen, Sie sollten allerdings keine Sonderzeichen oder Umlaute verwenden. Sie können mehrere Alias-Namen vergeben.

Ein Drucker in /etc/printcap sollte den Alias lp haben. Dieser Name wird standardmäßig von allen Druckbefehlen verwendet, wenn auf der Befehlszeile oder in der PRINTER-Umgebungsvariablen kein anderer Drucker angegeben ist.

Ebenso ist es üblich, eine ausführliche Beschreibung des Druckermodells als letzten Alias-Namen zu verwenden.

Sobald Sie einen Namen und einige einfache Alias-Namen ausgewählt haben, tragen Sie sie in die Datei /etc/printcap ein. Beginnen Sie die Zeile mit dem Namen des Druckers und fügen Sie alle Alias-Namen an. Trennen Sie die Namen durch den senkrechten Strich |. Fügen Sie an das Ende der Zeile einen Doppelpunkt : an.

Das folgende Beispiel definiert zwei Drucker, einen Diablo 630 Zeilendrucker, und einen Panasonic KX-P4455 PostScript-Laserdrucker:

#
#  /etc/printcap for host rose
#
rattan|line|diablo|lp|Diablo 630 Line Printer:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:

Der erste Drucker hat den Namen rattan, und hat die Alias-Namen line, diablo, lp und Diablo 630 Line Printer. Da er den Alias-Namen lp trägt, wird er standardmäßig von den Druckprogrammen verwendet. Der zweite Drucker heißt bamboo, und hat die Alias-Namen ps, PS, S, panasonic und Panasonic KX-P4455 PostScript v51.4.


11.3.1.4.2. Keine Titelseiten drucken

Standardmäßig druckt das LPD-System eine Titelseite vor jedem Druckauftrag, die den Namen des Druckauftrags, den Benutzer und den Computer angibt. Während der Einrichtung des Systems und beim Testen stört die Titelseite allerdings, weshalb Sie sie zunächst deaktivieren sollten.

Um den Druck der Titelseite zu deaktivieren, fügen Sie das Attribut sh zur Druckerdefinition in /etc/printcap hinzu. Hier ein Beispiel:

#
#  /etc/printcap for host rose - no header pages anywhere
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:

Beachten Sie die korrekte Formatierung: die beiden Definitionen beginnen auf einer Zeile; weitere Zeilen der Definition sind mit einem Tab-Zeichen eingerückt, und alle Zeilen einer Definition, bis auf die letzte, enden mit dem Backslash \.


11.3.1.4.3. Das Pufferverzeichnis anlegen

Der nächste Schritt ist, das Pufferverzeichnis anzulegen. In diesem Verzeichnis werden Druckaufträge zwischengespeichert, während sie gedruckt werden. Gleichzeitig werden hier auch einige Verwaltungsdateien des Systems abgelegt.

Da sich die Dateien in diesem Verzeichnis häufig ändern, ist es üblich, das Verzeichnis unter /var/spool anzulegen. Es ist nicht notwendig, Sicherungskopien der Dateien herzustellen; das Verzeichnis kann nötigenfalls leicht mit mkdir(1) wieder angelegt werden.

Es ist auch üblich, dem Verzeichnis denselben Namen wie dem Drucker zu geben:

# mkdir /var/spool/Druckername

Wenn Sie viele Drucker verwenden, ist es am besten, wenn Sie für die Pufferverzeichnisse ein eigenes Unterverzeichnis in /var/spool anlegen, wie dies hier für die beiden Beispieldrucker rattan und bamboo gezeigt wird:

# mkdir /var/spool/lpd
# mkdir /var/spool/lpd/rattan
# mkdir /var/spool/lpd/bamboo

Anmerkung: Um zu verhindern, dass alle Benutzer den Inhalt aller Druckaufträge einsehen können, sollten Sie die Rechte auf den Pufferverzeichnissen einschränken. Die Verzeichnisse sollten dem Benutzer daemon und der Gruppe daemon gehören, und auch nur vom Benutzer und der Gruppe les-, schreib- und durchsuchbar sein. Für unsere Beispieldrucker:

# chown daemon:daemon /var/spool/lpd/rattan
# chown daemon:daemon /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan
# chmod 770 /var/spool/lpd/bamboo

Schließlich müssen Sie dem LPD-System noch mitteilen, wo Sie die Pufferverzeichnisse angelegt haben. Dazu geben Sie in der Definition das Attribut sd an:

#
#  /etc/printcap for host rose - added spooling directories
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:

Beachten Sie, dass der Druckername in der ersten Spalte beginnt, und dass alle Folgezeilen mit einem Tab eingerückt sind.

Wenn Sie das sd-Attribut nicht angeben, verwendet das System /var/spool/lpd als Verzeichnis.


11.3.1.4.4. Festlegen der Drucker-Gerätedatei

Im Abschnitt Hinzufügen der /dev-Einträge für die Schnittstelle haben Sie die korrekten Gerätedatei für die Schnittstelle identifiziert und angelegt. Das LPD-System muss nun erfahren, welche Gerätedatei es für die Datenübertragung zum Drucker verwenden soll.

Geben Sie die Gerätedatei durch das Attribut lp in /etc/printcap an.

Wenn rattan an die erste parallele Schnittstelle angeschlossen ist, und bamboo an die sechste serielle, dann sieht /etc/printcap so aus:

#
#  /etc/printcap for host rose - identified what devices to use
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:

Wenn Sie lp nicht angeben, versucht LPD die Gerätedatei /dev/lp zu verwenden. /dev/lp ist zurzeit in FreeBSD nicht definiert.

Wenn Ihr Drucker über eine parallele Schnittstelle angeschlossen ist, können Sie mit dem Abschnitt Den Textfilter installieren fortfahren. Verwenden Sie eine serielle Schnittstelle, beachten Sie bitte den folgenden Abschnitt.


11.3.1.4.5. Kommunikationsparameter festlegen

Für seriell angeschlossene Drucker kann LPD die Geschwindigkeit, Parität und weitere Kommunikationsparameter einstellen. Dies hat folgende Vorteile:

  • Sie können die Parameter einfach in /etc/printcap ändern, ohne das Ausgabe-Filterprogramm anpassen zu müssen.

  • Dasselbe Ausgabe-Filterprogramm kann für unterschiedliche Drucker verwendet werden, auch wenn diese unterschiedliche Kommunikationseinstellungen benötigen.

Die folgenden Attribute legen die seriellen Kommunikationsparameter fest:

br#Baudrate

Setzt die Übertragungsgeschwindigkeit auf Baudrate. Baudrate kann üblicherweise 50, 75, 110, 134.5, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, oder 115200 Bit pro Sekunde betragen.

ms#stty-Modi

Setzt die Eigenschaften für das Gerät, nachdem es geöffnet wurde. Die verfügbaren Eigenschaften sind in stty(1) aufgeführt.

Wenn LPD das mit lp angegebene Gerät öffnet, setzt es die mit ms# angegebenen Eigenschaften. Von besonderem Interesse sind hier die Modi parenb, parodd, cs5, cs6, cs7, cs8, cstopb, crtscts und ixon, die in der stty(1)-Handbuchseite erläutert werden.

Für den über die sechste serielle Schnittstelle angeschlossenen Laserdrucker beträgt die Geschwindigkeit 38.400 Baud, und es werden diese Kommunikationseinstellungen verwendet: keine Parität (-parenb), 8-Bit-Zeichen (cs8), keine Modemsteuerung (clocal) und Hardware-Flusssteuerung (crtscts):

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:

11.3.1.4.6. Den Textfilter installieren

Ein Textfilter, auch als Eingangsfilter bezeichnet, ist ein Programm, das von LPD aufgerufen wird, wenn ein Druckauftrag verarbeitet wird. Dabei wird die Standardeingabe des Programms mit der zu druckenden Datei verbunden, und die Standardausgabe mit dem im lp-Attribut angegebenen Gerät. Das Programm sollte nun die Datei einlesen, alle Übersetzungen durchführen, die für den Drucker notwendig sind, und das Ergebnis über die Standardausgabe an den Drucker senden. Textfilter werden im Abschnitt Filter genauer erläutert.

Um einen einfachen Test durchzuführen, reicht ein kleines Filterprogramm, dass schlicht /bin/cat aufruft, um die Daten unverändert und den Drucker zu schicken. FreeBSD verfügt über das Programm lpf, das Unterstreichung und Fettdruck für solche Drucker ermöglicht, die ansonsten dazu nicht in der Lage wären. Darüberhinaus gibt es viele andere Filter, die Sie einsetzen können. lpf wird im Abschnitt lpf: ein Textfilter ausführlich beschrieben.

Legen Sie zunächst das folgende Shell-Skript als /usr/local/libexec/if-simple mit Ihrem bevorzugten Texteditor an:

#!/bin/sh
#
# if-simple - Simple text input filter for lpd
# Installed in /usr/local/libexec/if-simple
#
# Simply copies stdin to stdout.  Ignores all filter arguments.

/bin/cat && exit 0
exit 2

Machen Sie die Datei ausführbar:

# chmod 555 /usr/local/libexec/if-simple

Konfigurieren Sie nun den Textfilter für Ihren Drucker in /etc/printcap, indem Sie das if-Attribut hinzufügen. Hier die Konfiguration unserer beiden Beispieldrucker:

#
#  /etc/printcap for host rose - added text filter
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:\
        :if=/usr/local/libexec/if-simple:

11.3.1.4.7. LPD aktivieren

lpd(8) wird von /etc/rc gestartet, wenn die rc.conf(5)-Variable lpd_enable auf YES gesetzt ist. Fügen Sie dazu diese Zeile in /etc/rc.conf hinzu:

lpd_enable="YES"

Starten Sie Ihren Computer neu, oder starten Sie lpd(8) von Hand:

# lpd

11.3.1.4.8. Die Konfiguration testen

Damit ist die einfache Konfiguration abgeschlossen. Noch muss die Konfiguration aber getestet werden und etwaige Probleme müssen behoben werden. Um die Konfiguration zu testen, sollten Sie einen Probeausdruck mithilfe des Programms lpr(1) produzieren. lpr(1) übergibt Druckaufträge an das LPD-System.

Sie können lpr(1) mit lptest(1) kombinieren, um Testdaten zu drucken. lptest(1) wurde im Abschnitt Kommunikation mit den Drucker prüfen vorgestellt.

So testen Sie die einfache LPD-Konfiguration:

# lptest 20 5 | lpr -PDruckername

Ersetzen Sie Druckername durch den Namen des Druckers, den Sie testen möchten. Wenn Sie den Standard-Drucker testen möchten, rufen Sie lpr(1) ohne die Option -P auf. Wenn Sie einen Drucker testen möchten, der nur PostScript versteht, müssen Sie ein PostScript-Testprogramm an lpr(1) übergeben. Ein Testprogramm, das Sie in einer Datei gespeichert haben, können Sie mit dem Befehl lpr Dateiname an das LPD-System übergeben.

Bei einem PostScript-Drucker hängt das Ergebnis naturgemäß vom Testprogramm ab. Wenn Sie lptest(1) verwenden, sollte das Ergebnis ungefähr so aussehen:

!"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
#$%&'()*+,-./0123456
$%&'()*+,-./01234567
%&'()*+,-./012345678

Um sicherzustellen, dass alles richtig funktioniert, sollten Sie jetzt ein größeres PostScript-Programm senden. Mit lptest(1) können Sie größere Datenmengen z.B. mit dem Befehl lptest 80 60 erzeugen: lptest(1) produziert 60 Zeilen mit je 80 Zeichen.

Wenn Sie nicht erfolgreich drucken können, finden Sie im Abschnitt Fehlersuche und Problembehebung weitere Informationen.


11.6. * Alternativen zum Standard-LPD-System

Dieser Abschnitt ist noch nicht übersetzt. Lesen Sie bitte das Original in englischer Sprache.


11.7. * Fehlersuche und Problembehebung

Dieser Abschnitt ist noch nicht übersetzt. Lesen Sie bitte das Original in englischer Sprache.


Kapitel 12. Speichermedien

Übersetzt von Bernd Warken und Martin Heinen.

12.1. Übersicht

Dieses Kapitel behandelt die Benutzung von Laufwerken unter FreeBSD. Laufwerke können speichergestützte Laufwerke, Netzwerklaufwerke oder normale SCSI/IDE Geräte sein.

Nachdem Sie dieses Kapitel gelesen haben, werden Sie Folgendes wissen:

  • Die Begriffe, die FreeBSD verwendet, um die Organisation der Daten auf einem physikalischen Laufwerk zu beschreiben (Partitionen und Slices).

  • Wie Sie ein weiteres Laufwerk zu Ihrem System hinzufügen.

  • Wie virtuelle Dateisysteme, zum Beispiel RAM-Disks, eingerichtet werden.

  • Wie Sie mit Quotas die Benutzung von Laufwerken einschränken können.

  • Wie Sie Partitionen verschlüsseln, um Ihre Daten zu schützen.

  • Wie unter FreeBSD CDs und DVDs gebrannt werden.

  • Sie werden die Speichermedien, die Sie für Backups einsetzen können, kennen.

  • Wie Sie die unter FreeBSD erhältlichen Backup Programme benutzen.

  • Wie Sie ein Backup mit Disketten erstellen.

  • Was Schnappschüsse sind und wie sie eingesetzt werden.


12.2. Gerätenamen

Die folgende Tabelle zeigt die von FreeBSD unterstützten Speichergeräte und deren Gerätenamen.

Tabelle 12-1. Namenskonventionen von physikalischen Laufwerken

Laufwerkstyp Gerätename
IDE-Festplatten ad
IDE-CD-ROM Laufwerke acd
SCSI-Festplatten und USB-Speichermedien da
SCSI-CD-ROM Laufwerke cd
Verschiedene proprietäre CD-ROM-Laufwerke mcd Mitsumi CD-ROM, scd Sony CD-ROM, matcd Matsushita/Panasonic CD-ROM [a]
Diskettenlaufwerke fd
SCSI-Bandlaufwerke sa
IDE-Bandlaufwerke ast
Flash-Laufwerke fla für DiskOnChip® Flash-Device
RAID-Laufwerke aacd für Adaptec® AdvancedRAID, mlxd und mlyd für Mylex®, amrd für AMI MegaRAID®, idad für Compaq Smart RAID, twed für 3ware® RAID.
Bemerkungen:
a. Der matcd(4)-Treiber wurde am 5. Oktober vom FreeBSD 4.X Zweig entfernt und existiert in FreeBSD 5.0 und 5.1-RELEASE nicht. Am 16. Juni 2003 wurde der Treiber wieder in den FreeBSD 5.X-Zweig integriert.

12.3. Hinzufügen von Laufwerken

Im Original von David O'Brian.

Angenommen, Sie wollen ein neues SCSI-Laufwerk zu einer Maschine hinzufü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 Laufwerk Herstellers. Den genauen Ablauf können wir wegen der großen Abweichungen leider nicht beschreiben.

Nachdem Sie das Laufwerk installiert haben, melden Sie sich als Benutzer root an und kontrollieren Sie /var/run/dmesg.boot, um sicherzustellen, dass das neue Laufwerk gefunden wurde. Das neue Laufwerk wird, um das Beispiel fortzuführen, da1 heißen und soll unter /1 angehangen werden. Fügen Sie eine IDE-Platte hinzu, wird sie wd1 auf FreeBSD Systemen vor 4.0 und ad1 auf den meisten 4.X Systemen heißen.

Da FreeBSD auf IBM-PC kompatiblen Rechnern läuft, muss es die PC BIOS-Partitionen, die verschieden von den traditionellen BSD-Partitionen sind, berücksichtigen. Eine PC Platte kann bis zu vier BIOS-Partitionen enthalten. Wenn die Platte ausschließlich für FreeBSD verwendet wird, können Sie den dedicated Modus benutzen, ansonsten muss FreeBSD in eine der BIOS-Partitionen installiert werden. In FreeBSD heißen die PC BIOS-Partitionen Slices, um sie nicht mit den traditionellen BSD-Partitionen zu verwechseln. Sie können auch Slices auf einer Platte verwenden, die ausschließlich von FreeBSD benutzt wird, sich aber in einem Rechner befindet, der noch ein anderes Betriebssystem installiert hat. Dadurch stellen Sie sicher, dass Sie fdisk des anderen Betriebssystems noch benutzen können.

Im Fall von Slices wird die Platte als /dev/da1s1e hinzugefügt. Das heißt: SCSI-Platte, Einheit 1 (die zweite SCSI-Platte), Slice 1 (PC BIOS-Partition 1) und die e BSD-Partition. Wird die Platte ausschließlich für FreeBSD verwendet (``dangerously dedicated''), wird sie einfach als /dev/da1e hinzugefügt.


12.3.1. Verwenden von sysinstall(8)

  1. Das sysinstall Menü

    Um ein Laufwerk zu partitionieren und zu labeln, kann das menügestützte /stand/sysinstall benutzt werden. Dazu melden Sie sich als root an oder benutzen su, um root zu werden. Starten Sie /stand/sysinstall und wählen das Configure Menü, wählen Sie dort den Punkt Fdisk aus.

  2. Partitionieren mit fdisk

    Innerhalb von fdisk geben Sie A ein, um die ganze Platte für FreeBSD zu benutzen. Beantworten Sie die Frage ``remain cooperative with any future possible operating systems'' mit YES. W schreibt die Änderung auf die Platte, danach können Sie fdisk mit q verlassen. Da Sie eine Platte zu einem schon laufenden System hinzugefügt haben, beantworten Sie die Frage nach dem Master Boot Record mit None.

  3. Disk-Label-Editor

    Als nächstes müssen Sie sysinstall verlassen und es erneut starten. Folgen Sie dazu bitte den Anweisungen von oben, aber wählen Sie dieses Mal die Option Label, um in den Disk Label Editor zu gelangen. Hier werden die traditionellen BSD-Partitionen erstellt. Ein Laufwerk kann acht Partitionen, die mit den Buchstaben a-h gekennzeichnet werden, besitzen. Einige Partitionen sind für spezielle Zwecke reserviert. Die a Partition ist für die Root-Partition (/) reserviert. Deshalb sollte nur das Laufwerk, von dem gebootet wird, eine a Partition besitzen. Die b Partition wird für Swap-Partitionen benutzt, wobei Sie diese auf mehreren Platten benutzen dürfen. Im ``dangerously dedicated'' Modus spricht die c Partition die gesamte Platte an, werden Slices verwendet, wird damit die ganze Slice angesprochen. Die anderen Partitionen sind für allgemeine Zwecke verwendbar.

    Der Label Editor von sysinstall bevorzugt die e Partition für Partitionen, die weder Root-Partitionen noch Swap-Partitionen sind. Im Label Editor können Sie ein einzelnes Dateisystem mit C erstellen. Wählen Sie FS, wenn Sie gefragt werden, ob Sie ein FS (Dateisystem) oder Swap erstellen wollen, und geben Sie einen Mountpoint z.B. /mnt an. Wenn Sie nach einer FreeBSD Installation ein Dateisystem mit sysinstall erzeugen, so werden die Einträge in /etc/fstab nicht erzeugt, so dass die Angabe des Mountpoints nicht wichtig ist.

    Sie können nun das Label auf das Laufwerk schreiben und das Dateisystem erstellen, indem Sie W drücken. Ignorieren Sie die Meldung von sysinstall, dass die neue Partition nicht angehangen werden konnte, und verlassen Sie den Label Editor sowie sysinstall.

  4. Ende

    Im letzten Schritt fügen Sie noch in /etc/fstab den Eintrag für das neue Laufwerk ein.


12.3.2. Die Kommandozeile

12.3.2.1. Anlegen von Slices

Mit der folgenden Vorgehensweise wird eine Platte mit anderen Betriebssystemen, die vielleicht auf Ihrem Rechner installiert sind, zusammenarbeiten und nicht das fdisk Programm anderer Betriebssysteme stören. Bitte benutzen Sie den dedicated Modus nur dann, wenn Sie dazu einen guten Grund haben!

# dd if=/dev/zero of=/dev/da1 bs=1k count=1
# fdisk -BI da1 # Initialisieren der neuen Platte
# disklabel -B -w -r da1s1 auto # Labeln
# disklabel -e da1s1 # Editieren des Disklabels und Hinzufügen von Partitionen
# mkdir -p /1
# newfs /dev/da1s1e # Wiederholen Sie diesen Schritt für jede Partition
# mount /dev/da1s1e /1 # Anhängen der Partitionen
# vi /etc/fstab # Ändern Sie /etc/fstab entsprechend

Wenn Sie ein IDE-Laufwerk besitzen, ändern Sie da in ad. Auf Systemen vor 4.0 benutzen Sie wd.


12.3.2.2. Dedicated

Wenn das neue Laufwerk nicht von anderen Betriebssystemen benutzt werden soll, können Sie es im dedicated Modus betreiben. Beachten Sie bitte, dass Microsoft Betriebssysteme mit diesem Modus eventuell nicht zurechtkommen, aber es entsteht kein Schaden am Laufwerk. Im Gegensatz dazu wird IBMs OS/2® versuchen, jede ihm nicht bekannte Partition zu reparieren.

# dd if=/dev/zero of=/dev/da1 bs=1k count=1
# disklabel -Brw da1 auto
# disklabel -e da1 # Erstellen der `e' Partition
# newfs -d0 /dev/da1e
# mkdir -p /1
# vi /etc/fstab # /dev/da1e hinzufügen
# mount /1

Eine alternative Methode:

# dd if=/dev/zero of=/dev/da1 count=2
# disklabel /dev/da1 | disklabel -BrR da1 /dev/stdin
# newfs /dev/da1e
# mkdir -p /1
# vi /etc/fstab # /dev/da1e hinzufügen
# mount /1

Anmerkung: Ab FreeBSD 5.1-RELEASE wurde disklabel(8) durch bsdlabel(8) ersetzt. In bsdlabel wurden veraltete Optionen entfernt. Entfernen Sie die Option -r in den obigen Beispielen, wenn Sie bsdlabel verwenden. Weiteres entnehmen Sie bitte der Hilfeseite bsdlabel(8).


12.4. RAID

12.4.1. Software-RAID

12.4.1.1. Concatenated-Disk (CCD) konfigurieren

Original von Christopher Shumway. Überarbeitet von Jim Brown.

Die wichtigsten Faktoren bei der Auswahl von Massenspeichern sind Geschwindigkeit, Zuverlässigkeit und Preis. Selten findet sich eine ausgewogene Mischung aller drei Faktoren. Schnelle und zuverlässige Massenspeicher sind für gewöhnlich teuer. Um die Kosten zu senken, muss entweder an der Geschwindigkeit oder an der Zuverlässigkeit gespart werden.

Das unten beschriebene System sollte vor allem preiswert sein. Der nächst wichtige Faktor war die Geschwindigkeit gefolgt von der Zuverlässigkeit. Die Geschwindigkeit war nicht so wichtig, da über das Netzwerk auf das System zugegriffen wird. Da alle Daten schon auf CD-Rs gesichert sind, war die Zuverlässigkeit, obwohl wichtig, ebenfalls nicht von entscheidender Bedeutung.

Die Bewertung der einzelnen Faktoren ist der erste Schritt bei der Auswahl von Massenspeichern. Wenn Sie vor allem ein schnelles und zuverlässiges Medium benötigen und der Preis nicht wichtig ist, werden Sie ein anderes System als das hier beschriebene zusammenstellen.


12.4.1.1.1. Installation der Hardware

Neben der IDE-Systemplatte besteht das System aus drei Western Digital IDE-Festplatten mit 5400 RPM und einer Kapazität von je 30 GB. Insgesamt stehen also 90 GB Speicherplatz zur Verfügung. Im Idealfall sollte jede Festplatte an einen eigenen Controller angeschlossen werden. Um Kosten zu sparen, wurde bei diesem System darauf verzichtet und an jeden IDE-Controller eine Master- und eine Slave-Platte angeschlossen.

Beim Reboot wurde das BIOS so konfiguriert, dass es die angeschlossenen Platten automatisch erkennt und FreeBSD erkannte die Platten ebenfalls:

ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

Anmerkung: Wenn FreeBSD die Platten nicht erkennt, überprüfen Sie, ob die Jumper korrekt konfiguriert sind. Die meisten IDE-Festplatten verfügen über einen ``Cable Select''-Jumper. Die Master- und Slave-Platten werden mit einem anderen Jumper konfiguriert. Bestimmen Sie den richtigen Jumper mithilfe der Dokumentation Ihrer Festplatte.

Als nächstes sollten Sie überlegen, auf welche Art der Speicher zur Verfügung gestellt werden soll. Schauen Sie sich dazu vinum(8) (Kapitel 13) und ccd(4) an. Im hier beschriebenen System wird ccd(4) eingesetzt.


12.4.1.1.2. Konfiguration von CCD

Mit ccd(4) können mehrere gleiche Platten zu einem logischen Dateisystem zusammengefasst werden. Um ccd(4) zu benutzen, muss der Kernel mit der entsprechenden Unterstützung übersetzt werden. Ergänzen Sie die Kernelkonfiguration um die nachstehende Zeile. Anschließend müssen Sie den Kernel neu übersetzen und installieren.

pseudo-device   ccd     4

Für 5.X-Systeme verwenden Sie die folgende Zeile:

pseudo-device   ccd

Anmerkung: Ab FreeBSD 5.0 muss die gewünschte Geräteanzahl nicht mehr angegeben werden, da die Geräte automatisch zur Laufzeit erzeugt werden.

Ab FreeBSD 3.0 kann ccd(4) auch als Kernelmodul geladen werden.

Um ccd(4) zu benutzen, müssen die Laufwerke zuerst mit einem Label versehen werden. Die Label werden mit disklabel(8) erstellt:

disklabel -r -w ad1 auto
disklabel -r -w ad2 auto
disklabel -r -w ad3 auto

Anmerkung: Ab FreeBSD 5.1-RELEASE wurde disklabel(8) durch bsdlabel(8) ersetzt. In bsdlabel wurden veraltete Optionen entfernt. Entfernen Sie die Option -r in den obigen Beispielen, wenn Sie bsdlabel verwenden. Weiteres entnehmen Sie bitte der Hilfeseite bsdlabel(8).

Damit wurden die Label ad1c, ad2c und ad3c erstellt, die jeweils das gesamte Laufwerk umfassen.

Im nächsten Schritt muss der Typ des Labels geändert werden. Die Labels können Sie mit disklabel(8) editieren:

disklabel -e ad1
disklabel -e ad2
disklabel -e ad3

Für jedes Label startet dies den durch EDITOR gegebenen Editor, typischerweise vi(1).

Ein unverändertes Label sieht zum Beispiel wie folgt aus:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)

Erstellen Sie eine e-Partition für ccd(4). Dazu können Sie normalerweise die Zeile der c-Partition kopieren, allerdings muss fstype auf 4.2BSD gesetzt werden. Das Ergebnis sollte wie folgt aussehen:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)
  e: 60074784        0    4.2BSD        0     0     0   # (Cyl.    0 - 59597)

12.4.1.1.3. Erstellen des Dateisystems

Wenn die Gerätedatei für ccd0c noch nicht existiert, erstellen Sie diese wie folgt:

cd /dev
sh MAKEDEV ccd0

Anmerkung: Ab FreeBSD 5.0 werden die Gerätedateien automatisch von devfs(5) erzeugt. MAKEDEV muss also nicht aufgerufen werden.

Nachdem alle Platten ein Label haben, kann das ccd(4)-RAID aufgebaut werden. Dies geschieht mit ccdconfig(8):

ccdconfig ccd0(1) 32(2) 0(3) /dev/ad1e(4) /dev/ad2e /dev/ad3e

Die folgende Aufstellung erklärt die verwendeten Kommandozeilenargumente:

(1)
Das erste Argument gibt das zu konfigurierende Gerät, hier /dev/ccd0c, an. Die Angabe von /dev/ ist dabei optional.
(2)
Der Interleave für das Dateisystem. Der Interleave definiert die Größe eines Streifens in Blöcken, die normal 512 Bytes groß sind. Ein Interleave von 32 ist demnach 16384 Bytes groß.
(3)
Weitere Argumente für ccdconfig(8). Wenn Sie spiegeln wollen, können Sie das hier angeben. Die gezeigte Konfiguration verwendet keine Spiegel, sodass der Wert 0 angegeben ist.
(4)
Das letzte Argument gibt die Geräte des Plattenverbundes an. Benutzen Sie für jedes Gerät den kompletten Pfadnamen.

Nach Abschluß von ccdconfig(8) ist der Plattenverbund konfiguriert und es können Dateisysteme auf dem Plattenverbund angelegt werden. Das Anlegen von Dateisystemen wird in der Hilfeseite newfs(8) beschrieben. Für das Beispiel genügt der folgende Befehl:

newfs /dev/ccd0c

12.4.1.1.4. Automatisierung

Damit ccd(4) beim Start automatisch aktiviert wird, ist die Datei /etc/ccd.conf mit dem folgenden Kommando zu erstellen:

ccdconfig -g > /etc/ccd.conf

Wenn /etc/ccd.conf existiert, wird beim Reboot ccdconfig -C von /etc/rc aufgerufen. Damit wird ccd(4) eingerichtet und die darauf befindlichen Dateisysteme können angehängt werden.

Anmerkung: Wenn Sie in den Single-User Modus booten, müssen Sie den Verbund erst konfigurieren, bevor Sie darauf befindliche Dateisysteme anhängen können:

ccdconfig -C

In /etc/fstab ist noch ein Eintrag für das auf dem Verbund befindliche Dateisystem zu erstellen, damit dieses beim Start des Systems immer angehängt wird:

/dev/ccd0c              /media       ufs     rw      2       2

12.4.1.2. Der Vinum-Volume-Manager

Der Vinum Volume Manager ist ein Block-Gerätetreiber, der virtuelle Platten zur Verfügung stellt. Er trennt die Verbindung zwischen der Festplatte und dem zugehörigen Block-Gerät auf. Im Gegensatz zur konventionellen Aufteilung einer Platte in Slices lassen sich dadurch Daten flexibler, leistungsfähiger und zuverlässiger verwalten. vinum(8) stellt RAID-0, RAID-1 und RAID-5 sowohl einzeln wie auch in Kombination zur Verfügung.

Mehr Informationen über vinum(8) erhalten Sie in Kapitel 13.


12.4.2. Hardware-RAID

FreeBSD unterstützt eine Reihe von RAID-Controllern. Diese Geräte verwalten einen Plattenverbund; zusätzliche Software wird nicht benötigt.

Der Controller steuert mithilfe eines BIOS auf der Karte die Plattenoperationen. Wie ein RAID System eingerichtet wird, sei kurz am Beispiel des Promise IDE RAID-Controllers gezeigt. Nachdem die Karte eingebaut ist und der Rechner neu gestartet wurde, erscheint eine Eingabeaufforderung. Wenn Sie den Anweisungen auf dem Bildschirm folgen, gelangen Sie in eine Maske, in der Sie mit den vorhandenen Festplatten ein RAID-System aufbauen können. FreeBSD behandelt das RAID-System wie eine einzelne Festplatte.


12.4.3. Wiederherstellen eines ATA-RAID-1 Verbunds

Mit FreeBSD können Sie eine ausgefallene Platte in einem RAID-Verbund während des Betriebs auswechseln, vorausgesetzt Sie bemerken den Ausfall vor einem Neustart.

Einen Ausfall erkennen Sie, wenn in der Datei /var/log/messages oder in der Ausgabe von dmesg(8) Meldungen wie die folgenden auftauchen:

ad6 on monster1 suffered a hard error.
ad6: READ command timeout tag=0 serv=0 - resetting
ad6: trying fallback to PIO mode
ata3: resetting devices .. done
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11) status=59 error=40
ar0: WARNING - mirror lost

Überprüfen Sie den RAID-Verbund mit atacontrol(8):

# atacontrol list
ATA channel 0:
    Master:      no device present
    Slave:   acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0

ATA channel 1:
    Master:      no device present
    Slave:       no device present

ATA channel 2:
    Master:  ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:       no device present

ATA channel 3:
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:       no device present

# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
  1. Damit Sie die Platte ausbauen können, muss sie zuerst aus dem Verbund entfernt werden:

    # atacontrol detach 3
    
  2. Ersetzen Sie dann die Platte.

  3. Nehmen Sie die neue Platte in den Verbund auf:

    # atacontrol attach 3
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:   no device present
    
  4. Stellen Sie die Organisation des Verbunds wieder her:

    # atacontrol rebuild ar0
    
  5. Das Kommando blockiert den Terminal bis der Verbund wiederhergestellt ist. Den Fortgang des Prozesses können Sie in einem anderen Terminal (die Tastenkombination Alt+Fn schaltet auf einen anderen Terminal um) mit den folgenden Befehlen kontrollieren:

    # dmesg | tail -10
    [output removed]
    ad6: removed from configuration
    ad6: deleted from ar0 disk1
    ad6: inserted into ar0 disk1 as spare
    
    # atacontrol status ar0
    ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
    
  6. Warten Sie bis die Wiederherstellung beendet ist.


12.5. Handhabung von optischen Speichermedien (CDs & DVDs)

Beigesteuert von Mike Meyer.

12.5.1. Einführung

CDs besitzen einige Eigenschaften, die sie von konventionellen Laufwerken unterscheiden. Zuerst konnten sie nicht beschrieben werden. Sie wurden so entworfen, dass sie ununterbrochen, ohne Verzögerungen durch Kopfbewegungen zwischen den Spuren, gelesen werden können. Sie konnten früher auch leichter als vergleichbar große Medien zwischen Systemen bewegt werden.

CDs besitzen Spuren, aber damit ist der Teil Daten gemeint, der ununterbrochen gelesen wird, und nicht eine physikalische Eigenschaft der CD. Um eine CD mit FreeBSD zu erstellen, werden die Daten jeder Spur der CD in Dateien vorbereitet und dann die Spuren auf die CD geschrieben.

Das ISO 9660-Dateisystem wurde entworfen, um mit diesen Unterschieden umzugehen. Leider hat es auch damals übliche Grenzen für Dateisysteme implementiert. Glücklicherweise existiert ein Erweiterungsmechanismus, der es korrekt geschriebenen CDs erlaubt, diese Grenzen zu überschreiten und dennoch auf Systemen zu funktionieren, die diese Erweiterungen nicht unterstützen.

Mit sysutils/mkisofs wird eine Datei erstellt, die ein ISO 9660-Dateisystem enthält. Das Kommando hat Optionen, um verschiedene Erweiterungen zu unterstützen, und wird unten beschrieben. Sie können es aus dem Port sysutils/mkisofs installieren.

Welches Tool Sie zum Brennen von CDs benutzen, hängt davon ab, ob Ihr CD-Brenner ein ATAPI Gerät ist oder nicht. Mit ATAPI-CD-Brennern wird burncd benutzt, das Teil des Basissystems ist. SCSI und USB CD-Brenner werden mit cdrecord aus sysutils/cdrtools benutzt.

Von burncd wird nur eine beschränkte Anzahl von Laufwerken unterstützt. Um herauszufinden, ob ein Laufwerk unterstützt wird, sehen Sie bitte unter CD-R/RW supported drives nach.

Anmerkung: Wenn Sie FreeBSD 5.X oder FreeBSD 4.8-RELEASE und spätere Versionen benutzen, können Sie mithilfe des ATAPI/CAM Treibers die Werkzeuge für SCSI-Laufwerke, wie cdrecord, benutzen.


12.5.2. mkisofs

sysutils/mkisofs erstellt ein ISO 9660-Dateisystem, das ein Abbild eines Verzeichnisbaumes des Dateisystems ist. Die einfachste Anwendung ist wie folgt:

# mkisofs -o Imagedatei /path/to/tree

Dieses Kommando erstellt eine Imagedatei, die ein ISO 9660-Dateisystem enthält, das eine Kopie des Baumes unter /path/to/tree ist. Dabei werden die Dateinamen auf Namen abgebildet, die den Restriktionen des ISO 9660-Dateisystems entsprechen. Dateien mit Namen, die im ISO 9660-Dateisystem nicht gültig sind, bleiben unberücksichtigt.

Es einige Optionen, um diese Beschränkungen zu überwinden. Die unter UNIX Systemen üblichen Rock Ridge Erweiterungen werden durch -R aktiviert, -J aktiviert die von Microsoft Systemen benutzten Joliet Erweiterungen und -hfs dient dazu, um das von Mac OS benutzte HFS zu erstellen.

Für CDs, die nur auf FreeBSD-Systemen verwendet werden sollen, kann -U genutzt werden, um alle Beschränkungen für Dateinamen aufzuheben. Zusammen mit -R wird ein Abbild des Dateisystems, ausgehend von dem Startpunkt im FreeBSD-Dateibaum, erstellt, obwohl dies den ISO 9660 Standard verletzen kann.

Die letzte ü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. Wenn /tmp/myboot ein bootbares FreeBSD-System enthält, dessen Bootimage sich in /tmp/myboot/boot/cdboot befindet, können Sie ein Abbild eines ISO 9660-Dateisystems in /tmp/bootable.iso wie folgt erstellen:

# mkisofs -U -R -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot

Wenn Sie vn (mit FreeBSD 4.X) oder md (mit FreeBSD 5.X) in Ihrem Kernel konfiguriert haben, können Sie danach das Dateisystem einhängen. Mit FreeBSD 4.X setzen Sie dazu die nachstehenden Kommandos ab:

# vnconfig -e vn0c /tmp/bootable.iso
# mount -t cd9660 /dev/vn0c /mnt

Mit FreeBSD 5.X verwenden Sie die Kommandos:

# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0
# mount -t cd9660 /dev/md0 /mnt

Jetzt können Sie überprüfen, dass /mnt und /tmp/myboot identisch sind.

Sie können das Verhalten von sysutils/mkisofs mit einer Vielzahl von Optionen beeinflussen. Insbesondere können Sie das ISO 9660 Dateisystem modifizieren und Joliet- oder HFS-Dateisysteme brennen. Details dazu entnehmen Sie bitte der Manualpage von sysutils/mkisofs.


12.5.3. burncd

Wenn Sie einen ATAPI-CD-Brenner besitzen, können Sie burncd benutzen, um ein ISO-Image auf CD zu brennen. burncd ist Teil des Basissystems und unter /usr/sbin/burncd installiert. Da es nicht viele Optionen hat, ist es leicht zu benutzen:

# burncd -f cddevice data imagefile.iso fixate

Dieses Kommando brennt eine Kopie von imagefile.iso auf das Gerät cddevice. In der Grundeinstellung wird das Gerät /dev/acd0c benutzt. burncd(8) beschreibt, wie die Schreibgeschwindigkeit gesetzt wird, die CD ausgeworfen wird und Audio Daten geschrieben werden.


12.5.4. cdrecord

Wenn Sie keinen ATAPI-CD-Brenner besitzen, benutzen Sie cdrecord, um CDs zu brennen. cdrecord ist nicht Bestandteil des Basissystems. Sie müssen es entweder aus den Ports in sysutils/cdrtools oder dem passenden Paket installieren. Änderungen im Basissystem können Fehler im binären Programm verursachen und führen möglicherweise dazu, dass Sie einen ``Untersetzer'' brennen. Sie sollten daher den Port aktualisieren, wenn Sie Ihr System aktualisieren bzw. wenn Sie STABLE verfolgen, den Port aktualisieren, wenn es eine neue Version gibt.

Obwohl cdrecord viele Optionen besitzt, ist die grundlegende Anwendung einfacher als burncd. Ein ISO 9660 Image erstellen Sie mit:

# cdrecord dev=device imagefile.iso

Der Knackpunkt in der Benutzung von cdrecord besteht darin, das richtige Argument zu dev zu finden. Benutzen Sie dazu den -scanbus Schalter von cdrecord, der eine ähnliche Ausgabe wie die folgende produziert:

# cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling
Using libscg version 'schily-0.1'
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) *

Für die aufgeführten Geräte in der Liste wird das passende Argument zu dev gegeben. Benutzen Sie die drei durch Kommas separierten Zahlen, die zu Ihrem CD-Brenner angegeben sind, als Argument für dev. Im Beispiel ist das CDRW Gerät 1,5,0, so dass die passende Eingabe dev=1,5,0 wäre. Einfachere Wege das Argument anzugeben, sind in cdrecord(1) beschrieben. Dort sollten Sie auch nach Informationen über Audio Spuren, das Einstellen der Geschwindigkeit und ähnlichem suchen.


12.5.5. Kopieren von Audio-CDs

Um eine Kopie einer Audio-CD zu erstellen, kopieren Sie die Stücke der CD in einzelne Dateien und brennen diese Dateien dann auf eine leere CD. Das genaue Verfahren hängt davon ab, ob Sie ATAPI-Laufwerke oder SCSI-Laufwerke verwenden.

SCSI-Laufwerke

  1. Kopieren Sie die Audio-Daten mit cdda2wav:

    % cdda2wav -v255 -D2,0 -B -Owav
    
  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 Gerät an, das Sie, wie in Abschnitt 12.5.4 beschrieben, ermitteln können.

ATAPI-Laufwerke

  1. Der ATAPI-CD-Treiber stellt die einzelnen Stücke der CD über die Dateien /dev/acddtnn, zur Verfügung. d bezeichnet die Laufwerksnummer und nn ist die Nummer des Stücks. Die Nummer ist immer zweistellig, das heißt es wird, wenn nötig, eine führende Null ausgegeben. Die Datei /dev/acd0t01 ist also das erste Stück des ersten CD-Laufwerks. /dev/acd0t02 ist das zweite Stück und /dev/acd0t03 das dritte.

    Die entsprechenden Dateien in /dev erstellen Sie mit MAKEDEV:

    # cd /dev
    # sh MAKEDEV acd0t99
    

    Anmerkung: Ab FreeBSD 5.0 werden die Gerätedateien automatisch von devfs(5) erzeugt, so dass Sie MAKEDEV nicht laufen lassen müssen.

  2. Die einzelnen Stücke kopieren Sie mit dd(1). Sie müssen dazu eine spezielle Blockgröße angeben:

    # dd if=/dev/acd0t01 of=track1.cdr bs=2352
    # dd if=/dev/acd0t02 of=track2.cdr bs=2352
    ...
    
  3. Die kopierten Dateien können Sie dann mit burncd brennen. Auf der Kommandozeile müssen Sie angeben, dass Sie Audio-Daten brennen wollen und dass das Medium fixiert werden soll:

    # burncd -f /dev/acd0c audio track1.cdr track2.cdr ... fixate
    

12.5.6. Kopieren von Daten-CDs

Sie können eine Daten-CD in eine Datei kopieren, die einem Image entspricht, das mit sysutils/mkisofs erstellt wurde. Mit Hilfe dieses Images können Sie jede Daten-CD kopieren. Das folgende Beispiel verwendet acd0 für das CD-ROM Gerät. Wenn Sie ein anderes Laufwerk benutzen, setzen Sie bitte den richtigen Namen ein. An den Gerätenamen muss ein c angehangen werden, um die ganze Partition, in diesem Fall ist das die ganze CD-ROM, anzusprechen.

# dd if=/dev/acd0c of=file.iso bs=2048

Danach haben Sie ein Image, das Sie wie oben beschrieben, auf eine CD brennen können.


12.5.7. Einhängen von Daten-CDs

Nachdem Sie eine Daten-CD gebrannt haben, wollen Sie wahrscheinlich auch die Daten auf der CD lesen. Dazu müssen Sie die CD in den Dateibaum einhängen. Die Voreinstellung für den Typ des Dateisystems von mount(8) ist UFS. Das System wird die Fehlermeldung ``Incorrect super block'' ausgeben, wenn Sie versuchen, die CD mit dem folgenden Kommando einzuhängen:

# mount /dev/cd0c /mnt

Auf der CD befindet sich ja kein UFS Dateisystem, so dass der Versuch, die CD einzuhängen fehlschlägt. Sie müssen mount(8) sagen, dass es ein Dateisystem vom Typ ISO9660 verwenden soll. Dies erreichen Sie durch die Angabe von -t cd9660 auf der Kommandozeile. Wenn Sie also die CD-ROM /dev/cd0c in /mnt einhängen wollen, führen Sie folgenden Befehl aus:

# mount -t cd9660 /dev/cd0c /mnt

Abhängig vom verwendeten CD-ROM kann der Gerätename von dem im Beispiel (/dev/cd0c) abweichen. Die Angabe von -t cd9660 führt mount_cd9660(8) aus, so dass das Beispiel verkürzt werden kann:

# mount_cd9660 /dev/cd0c /mnt

Auf diese Weise können Sie Daten-CDs von jedem Hersteller verwenden. 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. Der FreeBSD Kernel unterstützt zurzeit noch kein Unicode und manche Sonderzeichen werden als Fragezeichen dargestellt. Ab FreeBSD 4.3 sind im CD9660-Treiber Möglichkeiten vorgesehen, eine Konvertierungstabelle zur Laufzeit zu laden. Module für die gebräuchlisten Kodierungen finden Sie im Port sysutils/cd9660_unicode.

Manchmal werden Sie die Meldung ``Device not configured'' erhalten, wenn Sie versuchen, eine CD-ROM einzuhängen. Für gewöhnlich liegt das daran, dass das Laufwerk meint es sei keine CD eingelegt, oder dass das Laufwerk auf dem Bus nicht erkannt wird. Es kann einige Sekunden dauern, bevor das Laufwerk merkt, dass eine CD eingelegt wurde. Seien Sie also geduldig.

Manchmal wird ein SCSI-CD-ROM nicht erkannt, weil es keine Zeit hatte, auf das Zurücksetzen des Busses zu antworten. Wenn Sie ein SCSI-CD-ROM besitzen, sollten Sie die folgende Zeile in Ihre Kernelkonfiguration aufnehmen und einen neuen Kernel bauen:

options SCSI_DELAY=15000

Die Zeile bewirkt, dass nach dem Zurücksetzen des SCSI-Busses beim Booten 15 Sekunden gewartet wird, um dem CD-ROM-Laufwerk genügend Zeit zu geben, darauf zu antworten.


12.5.8. Brennen von rohen CDs

Sie können eine Datei auch direkt auf eine CD brennen, ohne vorher auf ihr ein ISO 9660 Dateisystem einzurichten. Einige Leute nutzen dies, um Datensicherungen durchzuführen. Diese Vorgehensweise hat den Vorteil, dass Sie schneller als das Brennen einer normalen CD ist.

# burncd -f /dev/acd1c -s 12 data archive.tar.gz fixate

Wenn Sie die Daten von einer solchen CD wieder zurückbekommen wollen, müssen Sie sie direkt von dem rohen Gerät lesen:

# tar xzvf /dev/acd1c

Eine auf diese Weise gefertigte CD können Sie nicht in das Dateisystem einhängen. Sie können Sie auch nicht auf einem anderen Betriebssystem lesen. Wenn Sie die erstellten CDs in das Dateisystem einhängen oder mit anderen Betriebssystemen austauschen wollen, müssen Sie sysutils/mkisofs, wie oben beschrieben, benutzen.


12.5.9. Der ATAPI/CAM Treiber

Mit diesem Treiber kann auf ATAPI-Geräte (wie CD-ROM-, CD-RW- oder DVD-Laufwerke) mithilfe des SCSI-Subsystems zugegriffen werden. Damit können Sie SCSI-Werkzeuge, wie sysutils/cdrdao oder cdrecord(1), zusammen mit einem ATAPI-Gerät benutzen.

Wenn Sie den Treiber benutzen wollen, fügen Sie die nachstehenden Zeilen zu der Kernelkonfiguration hinzu:

device atapicam
device scbus
device cd
device pass

Die folgenden Zeilen werden ebenfalls benötigt, sollten aber schon Teil der Kernelkonfiguration sein:

device ata
device atapicd

Übersetzen und installieren Sie dann den neuen Kernel. Der CD-Brenner sollte beim Neustart des Systems erkannt werden:

acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4
cd0 at ata1 bus 0 target 0 lun 0
cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device
cd0: 16.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

Über den Gerätenamen /dev/cd0 können Sie nun auf das Laufwerk zugreifen. Wenn Sie beispielsweise eine CD-ROM in /mnt einhängen wollen, benutzen Sie das nachstehende Kommando:

# mount -t cd9660 /dev/cd0c /mnt

Die SCSI-Adresse des Brenners können Sie als root wie folgt ermitteln:

# camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00>   at scbus1 target 0 lun 0 (pass0,cd0)

Die SCSI-Adresse 1,0,0 können Sie mit den SCSI-Werkzeugen, zum Beispiel cdrecord(1), verwenden.

Weitere Informationen über das ATAPI/CAM- und das SCSI-System erhalten Sie in den Hilfeseiten atapicam(4) und cam(4).


12.6. Handhabung von Disketten

Original von Julio Merino. Umgeschrieben von Martin Karlsson.

Disketten sind nützlich, wenn kein anderes bewegliches Speichermedium vorhanden ist oder wenn nur kleine Datenmengen transferiert werden sollen.

Dieser Abschnitt beschreibt die Handhabung von Disketten unter FreeBSD. Hauptsächlich geht es um die Formatierung und Benutzung von 3,5 Zoll Disketten, doch lassen sich die Konzepte leicht auf Disketten anderer Formate übertragen.


12.6.1. Disketten formatieren

12.6.1.1. Die Gerätedateien

Wie auf jedes andere Gerät auch, greifen Sie auf Disketten über Einträge im Verzeichnis /dev zu. Unter FreeBSD 4.X und früheren Versionen greifen Sie auf das Laufwerk über die Gerätedateien /dev/fdN (N ist Laufwerksnummer, für gewöhnlich 0) oder /dev/fdNX (X ist ein Buchstabe) zu.

Unter FreeBSD 5.0 oder neueren Versionen verwenden Sie einfach die Datei /dev/fdN.


12.6.1.1.1. Diskettenkapazitäten unter 4.X oder früher

Es gibt Gerätedateien der Form /dev/fdX.Größe. Größe gibt die Kapazität der Diskette in Kilobytes an. Diese Einträge bestimmen bei der Low-Level-Formatierung die Speicherkapazität der Diskette. In den folgenden Beispiel wird die Größe 1440 kb verwendet.

Manchmal müssen die Gerätedateien in /dev (neu) erstellt werden. Dies geschieht mit dem folgenden Befehl:

# cd /dev && ./MAKEDEV "fd*"

12.6.1.1.2. Diskettenkapazitäten unter 5.0 oder neueren Versionen

Unter FreeBSD 5.X werden die Gerätedateien von devfs(5) verwaltet. Der Befehl MAKEDEV wird nicht mehr benötigt.

Die gewünschte Kapazität wird fdformat(1) über die Option -f mitgeteilt. Die unterstützten Kapazitäten sind in der Hilfeseite fdcontrol(8) aufgezählt. 1440 kB ist eine gängige Kapazität und funktioniert am besten.


12.6.1.2. Formatierung

Bevor eine Diskette benutzt werden kann, muss Sie (low-level) formatiert werden, was normalerweise der Hersteller schon gemacht hat. Sie können die Diskette allerdings noch einmal formatieren, um das Medium zu überprüfen. Es ist möglich, die Kapazität der Diskette zu verändern, allerdings sind die meisten Disketten auf 1440 kB ausgelegt.

Mit fdformat(1) formatieren Sie eine Diskette. Das Kommando erwartet die Angabe eines Gerätenamens.

Achten Sie bei der Formatierung auf Fehlermeldungen, die schlechte Speichermedien anzeigen.


12.6.1.2.1. Formatierung unter 4.X oder früheren Versionen

Die Disketten werden mithilfe der Gerätedatei /dev/fdX.Größe formatiert. Legen Sie eine 3,5 Zoll Diskette in Ihr Laufwerk ein und führen das folgende Kommando aus:

# /usr/sbin/fdformat /dev/fd0.1440

12.6.1.2.2. Formatierung unter 5.X oder neueren Versionen

Die Disketten werden mithilfe der Gerätedatei /dev/fdN formatiert. Legen Sie eine 3,5 Zoll Diskette in Ihr Laufwerk ein und führen das folgende Kommando aus:

# /usr/sbin/fdformat -f 1440 /dev/fd0

12.6.2. Das Disklabel

Nach dem Formatieren muss auf der Diskette ein Disklabel erstellt werden. Das Disklabel wird später zerstört, ist aber notwendig, um die Größe und Geometrie der Diskette zu erkennen.

Das Disklabel gilt für die ganze Diskette und enthält alle Informationen über die Geometrie der Diskette. Eine Liste der möglichen Geometrien finden Sie in /etc/disktab.

Erstellen Sie nun das Label mit disklabel(8):

# /sbin/disklabel -B -r -w /dev/fd0 fd1440

Anmerkung: Ab FreeBSD 5.1-RELEASE wurde disklabel(8) durch bsdlabel(8) ersetzt. In bsdlabel wurden veraltete Optionen entfernt. Entfernen Sie die Option -r in den obigen Beispielen, wenn Sie bsdlabel verwenden. Weiteres entnehmen Sie bitte der Hilfeseite bsdlabel(8).


12.6.3. Das Dateisystem

Auf der Diskette muss nun ein Dateisystem erstellt werden (high-level Formatierung), damit FreeBSD von der Diskette lesen und auf sie schreiben kann. Das Disklabel wird durch das Anlegen eines Dateisystems zerstört. Falls Sie die Diskette später erneut formatieren wollen, müssen Sie dann auch ein neues Disklabel anlegen.

Sie können entweder UFS oder FAT als Dateisystem verwenden. Für Floppies ist FAT das beste Dateisystem.

Das folgende Kommando legt ein Dateisystem auf der Diskette an:

# /sbin/newfs_msdos /dev/fd0

Die Diskette kann nun benutzt werden.


12.6.4. Verwenden der Diskette

Unter FreeBSD 4.X und früheren Versionen können Sie die Diskette mit mount_msdos(8) in den Dateibaum einhängen. Unter FreeBSD 5.X und neueren Versionen verwenden Sie dazu den Befehl mount_msdosfs(8). Sie können auch den Port emulators/mtools verwenden, um mit der Diskette zu arbeiten.


12.7. Handhabung von Bandmedien

Die wichtigsten Bandmedien sind 4mm, 8mm, QIC, Mini-Cartridge und DLT.


12.7.1. 4mm (DDS: Digital Data Storage)

Die 4mm-Bänder ersetzen mehr und mehr das QIC-Format als Backupmedium der Wahl für Workstations. Dieser Trend nahm stark zu, als Conner die Firma Archive, einen führenden Hersteller von QIC-Laufwerken, aufkaufte und die Produktion von QIC-Laufwerken stoppte. 4mm-Laufwerke sind klein und ruhig, haben aber nicht den gleichen Ruf der Zuverlässigkeit, den die 8mm-Laufwerke genießen. Die 4mm-Kassetten sind preiswerter und mit den Maßen 76,2 x 50,8 x 12,7 mm (3 x 2 x 0,5 Inch) kleiner als die 8mm-Kassetten. Sowohl die 4mm- als auch die 8mm-Magnetköpfe haben eine relativ kurze Lebensdauer, weil beide die gleiche Helical-Scan-Technologie benutzen.

Der Datendurchsatz dieser Laufwerke beginnt bei etwa 150 kByte/s, Spitzenwerte liegen bei etwa 500 kByte/s. Die Datenkapazität liegt zwischen 1,3 GB und 2 GB. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Es gibt Multi-Drive-Einheiten für Bandbibliotheken mit bis zu 6 Laufwerken in einem Gehäuse und automatischem Bandwechsel. Die Kapazität einer solchen Bibliothek liegt bei 240 GB.

Der Standard DDS-3 unterstützt nun Bandkapazitäten bis zu 12 GB (oder komprimiert 24 GB).

4mm-Laufwerke, ebenso wie 8mm-Laufwerke, verwenden Helical-Scan. Alle Vor- und Nachteile von Helical-Scan gelten sowohl für 4mm- als auch für 8mm-Laufwerke.

Bänder sollten nach 2.000 Banddurchläufen oder 100 vollen Backups ersetzt werden.


12.7.2. 8mm (Exabyte)

8mm-Bänder sind die verbreitetsten SCSI-Bandlaufwerke; sie sind das geeignetste Bandformat zum Austausch von Bändern. Fast an jedem Standort gibt es ein 8mm-Bandlaufwerk mit 2 GB. 8mm-Bänder sind zuverlässig, gut zu handhaben und arbeiten leise. Bandkassetten sind preiswert und klein mit 122 x 84 x 15 mm (4,8 x 3,3 x 0,6 Inch). Ein Nachteil der 8mm-Technologie ist die relativ kurze Lebensdauer des Schreib-/Lesekopfs und der Bänder auf Grund der hohen Relativgeschwindigkeit des Bandes über die Köpfe hinweg.

Der Datendurchsatz liegt ungefähr zwischen 250 kByte/s und 500 kByte/s. Die Datenkapazität beginnt bei 300 MB und erreicht bis zu 7 GB bei den Spitzengeräten. Die meisten Geräte haben eine Hardwarekompression eingebaut, die die Kapazität ungefähr verdoppelt. Diese Laufwerke sind erhältlich in Form von Einzelgeräten oder als Multi-Drive-Bandbibliotheken mit 6 Laufwerken und 120 Bändern in einem Gehäuse. Die Bänder werden von der Geräteeinheit automatisch gewechselt. Die Kapazität einer solchen Bibliothek liegt bei 840 GB und mehr.

Das Exabyte-Modell ``Mammoth'' unterstützt 12 GB auf einem Band (24 GB mit Kompression) und kostet etwa doppelt so viel wie ein konventionelles Bandlaufwerk.

Die Daten werden mittels Helical-Scan auf das Band aufgezeichnet, die Köpfe sind leicht schräg zum Medium angebracht (mit einem Winkel von etwa 6 Grad). Das Band wickelt sich 270 Grad um die Spule, die die Köpfe trägt. Die Spule dreht sich, während das Band darüberläuft. Das Resultat ist eine hohe Datendichte und eng gepackte Spuren, die von einem Rand des Bands zum gegenüberliegenden quer über das Band abgewinkelt verlaufen.


12.7.3. QIC

QIC-150-Bänder und -Laufwerke sind wohl der am weitesten verbreitete Bandtyp überhaupt. QIC-Bandlaufwerke sind die preiswertesten ``seriösen'' Backupgeräte, die angeboten werden. Der Nachteil dabei ist der hohe Preis der Bänder. QIC-Bänder sind im Vergleich zu 8mm- oder 4mm-Bändern bis zu fünf Mal teurer, wenn man den Preis auf 1 GB Datenkapazität umrechnet. Aber wenn Ihr Bedarf mit einem halben Dutzend Bänder abgedeckt werden kann, mag QIC die richtige Wahl sein.

QIC ist der gängigste Bandlaufwerkstyp. Jeder Standort hat ein QIC-Laufwerk der einen oder anderen Dichte. Aber gerade das ist der Haken an der Sache, QIC bietet eine große Anzahl verschiedener Datendichten auf physikalisch ähnlichen (manchmal gleichen) Bändern. QIC-Laufwerke sind nicht leise. Diese Laufwerke suchen lautstark die richtige Bandstelle, bevor sie mit der Datenaufzeichnung beginnen. Sie sind während des Lesens, Schreibens und Suchens deutlich hörbar.

Die Abmessungen der QIC-Kassetten betragen 152.4 x 101.6 x 17.78 mm (6 x 4 x 0,7 Inch), die QIC-Bandbreite beträgt 6,35 mm (1/4 Inch). Mini-Cartridges, die die gleiche Bandbreite verwenden, werden gesondert vorgestellt. Bandbibliotheken und Bandwechselgeräte gibt es im QIC-Format keine.

Der Datendurchsatz liegt ungefähr zwischen 150 kByte/s und 500 kByte/s. Die Datenkapazität reicht von 40 MB bis zu 15 GB. Hardwarekompression ist in vielen der neueren QIC-Laufwerke eingebaut. QIC-Laufwerke werden heute seltener eingesetzt; sie werden von den DAT-Laufwerken abgelöst.

Die Daten werden auf dem Band in Spuren aufgezeichnet. Die Spuren verlaufen entlang der Längsachse des Bandmediums von einem Ende zum anderen. Die Anzahl der Spuren, und damit auch die Breite einer Spur, variiert mit der Kapazität des Laufwerks. Die meisten, wenn nicht alle neueren Laufwerke sind rückwärtskompatibel, zumindest zum Lesen (aber oft auch zum Schreiben). QIC hat einen guten Ruf bezüglich der Datensicherheit (die Mechanik ist einfacher und robuster als diejenige der Helical-Scan-Laufwerke).

Bänder sollten nach 5,000 Backups ersetzt werden.


12.7.5. DLT

DLT hat die schnellste Datentransferrate von allen hier aufgelisteten Gerätetypen. Das 1/2-Inch-Band (12,7 mm) befindet sich in einer Spulkassette mit den Abmessungen 101,6 x 101,6 x 25,4 mm (4 x 4 x 1 Inch). Die eine Seite der Kassette hat eine bewegliche Abdeckung. Der Laufwerksmechanismus öffnet diese Abdeckung und zieht die Bandführung heraus. Die Bandführung trägt ein ovales Loch, die das Laufwerk zum ``Einhängen'' des Bandes benutzt. Die Aufwickelspule befindet sich im Innern des Bandlaufwerks. Bei allen anderen hier besprochenen Bandkassetten (9-Spur-Bänder sind die einzige Ausnahme) befinden sich sowohl die Auf- als auch die Abwickelspule im Inneren der Bandkassette.

Der Datendurchsatz liegt bei etwa 1,5 MBytes/s, der dreifache Durchsatz der 4mm-, 8mm- oder QIC-Bandlaufwerke. Die Datenkapazität reicht von 10 GB bis 20 GB für Einfachlaufwerke. Auch Mehrfachbandgeräte sind erhältlich, sowohl als Bandwechsler wie auch als Multi-Drive-Bandbibliotheken, die Platz für 5 bis 900 Bänder verteilt auf 1 bis 20 Laufwerke enthalten, mit einer Speicherkapazität von 50 GB bis 9 TB.

Mit Kompression unterstützt das Format DLT Type IV bis zu 70 GB Kapazität.

Die Daten werden auf dem Band in Spuren aufgezeichnet, die parallel zur Bewegungsrichtung verlaufen (gerade so wie bei den QIC-Bändern). Zwei Spuren werden dabei gleichzeitig beschrieben. Die Lebenszeit der Lese- und Schreibköpfe sind relativ lang; denn sobald das Band anhält, gibt es keine Relativbewegung mehr zwischen den Köpfen und dem Band.


12.7.6. AIT

AIT ist ein neues Format von Sony, das (mit Kompression) bis zu 50 GB pro Band speichern kann. Die Bänder haben einen Speicherchip, der einen Index mit dem Inhalt des Bandes anlegt. Dieser Index kann vom Bandlaufwerk zur schnellen Bestimmung der Lage von Dateien auf dem Band benutzt werden, während andere Bänder einige Minuten zur Lokalisierung benötigen.

Entsprechende Software wie etwa SAMS:Alexandria können 40 oder mehr AIT-Bandbibliotheken verarbeiten, indem sie direkt mit dem Speicherchip des Bandes kommunizieren, wenn der Bandinhalt am Bildschirm dargestellt werden soll oder bestimmt werden soll, welche Dateien auf welchem Band gespeichert sind, oder um das richtige Band zu lokalisieren, zu laden und Daten vom Band zurückzuspielen. Bibliotheken dieser Art liegen in der Preiskategorie von $20,000, womit sie etwas aus dem Hobbymarkt herausfallen.


12.7.7. Die erste Benutzung eines neuen Bands

Der Versuch ein neues, vollkommen leeres Band ohne weiteres zu lesen oder zu beschreiben wird schief gehen. Auf der Konsole werden dann Meldungen ähnlich wie folgt ausgegeben:

sa0(ncr1:4:0): NOT READY asc:4,1
0(ncr1:4:0): Logical unit is in process of becoming ready

Das Band enthält nämlich keinen Identifier-Block (Blocknummer 0). Alle QIC-Bandlaufwerke seit der Einführung des QIC-525-Standards schreiben einen Identifier-Block auf das Band. Es gibt zwei Lösungen:

  • mt fsf 1 veranlasst das Bandlaufwerk einen Identifier-Block auf das Band zu schreiben.

  • Das Band durch Drücken des Bandauswurfknopfs an der Vorderseite des Bandgeräts auswerfen.

    Danach das Band wieder einlegen und mit dump Daten auf das Band übertragen.

    Das Kommando dump gibt die Meldung ``DUMP: End of tape detected'' zurück und die Konsole zeigt: ``HARDWARE FAILURE info:280 asc:80,96''.

    Das Band zurückspulen mit dem Kommando: mt rewind.

    Nachfolgende Bandoperationen werden dann erfolgreich ausgeführt.


12.8. Was ist mit Backups auf Disketten?

12.8.1. Kann ich Disketten zum Backup meiner Daten verwenden?

Disketten sind kein wirklich geeignetes Medium für Backups aus folgenden Gründen:

  • Disketten sind unzuverlässig, besonders langfristig.

  • Speichern und Wiederherstellen ist sehr langsam.

  • Sie haben eine sehr eingeschränkte Kapazität (Die Zeiten sind längst vorbei, wo eine ganze Festplatte auf ein Dutzend Floppies oder so gespeichert werden konnte).

Wenn jedoch keine andere Möglichkeit zum Datenbackup vorhanden ist, dann sind Disketten immer noch besser als gar kein Backup.

Wenn man gezwungen ist Disketten zu verwenden, dann sollte man auf eine gute Qualität achten. Floppies, die schon einige Jahre im Büro herumgelegen haben, sind eine schlechte Wahl. Ideal sind neue Disketten von einem renommierten Hersteller.


12.8.2. Wie mache ich ein Backup auf Disketten?

Die beste Art eines Diskettenbackups ist der Befehl tar(1) mit der Mehrfachband-Option -M, die es ermöglicht ein Backup über mehrere Floppies zu verteilen.

Ein Backup aller Dateien im aktuellen Verzeichnis einschließlich aller Unterverzeichnisse wird durch den folgenden Befehl veranlasst (als root):

# tar Mcvf /dev/fd0 *

Wenn die erste Floppy voll ist, meldet sich tar(1) und verlangt einen Diskettenwechsel (weil tar(1) unabhängig vom Medium arbeitet, wird das nächste Band (Volume) verlangt, was in diesem Zusammenhang eine Diskette bedeutet), in etwa wie folgt:

Prepare volume #2 for /dev/fd0 and hit return:

Dies wird mit steigender Volumenzahl wiederholt, bis alle angegebenen Dateien archiviert sind.


12.8.3. Können Diskettenbackups komprimiert werden?

Leider erlaubt es tar(1) nicht, die Option -z für Multi-Volume-Archive zu verwenden. Man kann natürlich alle Dateien mit gzip(1) komprimieren, sie mit tar(1) auf die Floppies aufspielen, und dann die Dateien wieder gunzip(1) entkomprimieren!


12.8.4. Wie werden Diskettenbackups wieder hergestellt?

Zur Wiederherstellung des gesamten Archivs verwendet man:

# tar Mxvf /dev/fd0

Eine Methode um nur bestimmte Dateien wieder her zu stellen ist mit der ersten Diskette den folgenden Befehl auszuführen:

# tar Mxvf /dev/fd0 filename

tar(1) wird dann die folgenden Disketten anfordern, bis die benötigte Datei gefunden ist.

Wenn man die Diskette kennt, auf der sich die Datei befindet, kann man alternativ diese Diskette auch direkt einlegen und den gleichen Befehl wie oben verwenden. Man beachte, dass, falls die erste Datei eine Fortsetzung einer Datei von einer der vorigen Disketten ist, tar(1) die Warnung ausgibt, dass diese Datei nicht wiederhergestellt werden kann, selbst dann, wenn dies gar nicht verlangt wurde!


12.9. Datensicherung

Die drei wichtigsten Programme zur Sicherung von Daten sind dump(8), tar(1) und cpio(1).


12.9.1. Sichern und Wiederherstellen

dump und restore sind die traditionellen Backupprogramme in UNIX Systemen. Sie betrachten das Laufwerk als eine Ansammlung von Blöcken, operieren also unterhalb dem Abstraktionslevel von Dateien, Links und Verzeichnissen, die die Grundlage des Dateisystemkonzepts bilden. dump sichert ein ganzes Dateisystem auf einem Gerät, es ist nicht möglich nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfasst zu sichern. dump schreibt keine Dateien oder Verzeichnisse auf das Band, sondern die Blöcke, aus denen Dateien und Verzeichnisse bestehen.

Anmerkung: Wenn Sie mit dump das Root-Verzeichnis sichern, werden /home, /usr und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind.

dump hat einige Eigenarten, die noch aus den frühen Tagen der Version 6 von AT&T UNIX (ca. 1975) stammen. Die Parameter sind für 9-Spur-Bänder (6250 bpi) voreingestellt, nicht auf die heute üblichen Medien hoher Dichte (bis zu 62.182 ftpi). Bei der Verwendung der Kapazitäten moderner Bandlaufwerke muss diese Voreinstellung auf der Kommandozeile überschrieben werden.

rdump und rrestore können Daten über Netzwerk auf ein Band, das sich in einem Laufwerk eines anderen Computers befindet, überspielen. Beide Programme benutzen die Befehle rcmd und ruserok zum Zugriff auf das entfernte Bandlaufwerk. Daher muss der Anwender, der das Backup durchführt, auf dem entfernten Rechner in .rhosts eingetragen sein.

Die Argumente zu rdump und rrestore müssen zur Verwendung auf dem entfernten Computer geeignet sein. Wenn Sie zum Beispiel mit rdump von einem FreeBSD Rechner aus auf ein Exabyte Bandlaufwerk einer Sun mit Namen komodo zugreifen möchten, setzen Sie das folgende Kommando ab:

# /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1

Zum Ausführen dieses Kommandos müssen Sie auf dem entfernten Rechner in .rhosts eingetragen sein. Die r-Kommandos sind ein großes Sicherheitsrisiko, daher sollten Sie deren Verwendung sorgfältig abwägen.

Es ist auch möglich, dump und restore über eine gesicherte Verbindung mit ssh einzusetzen:

Beispiel 12-1. dump mit ssh benutzen

# /sbin/dump -0uan -f - /usr | gzip -2 | ssh1 -c blowfish \
      targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz

12.9.2. tar

tar(1) stammt ebenfalls aus Version 6 von AT&T UNIX (ca. 1975). tar arbeitet mit dem Dateisystem, denn es schreibt Dateien und Verzeichnisse auf das Band. tar unterstützt zwar nicht den vollen Umfang von Optionen, die bei cpio(1) zur Verfügung stehen, aber dafür erfordert tar nicht die ungewöhnliche Kommando-Pipeline, die cpio verwendet.

Die meisten Versionen von tar unterstützen keine Backups über das Netzwerk. Die GNU-Version von tar die in FreeBSD verwendet wird, unterstützt jedoch entfernte Geräte mit der gleichen Syntax wie rdump. Um tar für ein Exabyte-Bandlaufwerk auf einer Sun namens komodo auszuführen, muss folgendes Kommando aufgerufen werden:

# /usr/bin/tar cf komodo:/dev/nsa8 . 2>&1

Bei den Versionen ohne Unterstützung für entfernte Geräte kann man die Daten über eine Pipeline und rsh an ein entferntes Laufwerk senden.

# tar cf - . | rsh hostname dd of=tape-device obs=20b

Wenn Sie Bedenken bezüglich der Sicherheit beim Backup über das Netz haben, sollten Sie ssh anstatt rsh benutzen.


12.9.3. Cpio

cpio(1) ist das ursprüngliche Programm von UNIX Systemen zum Dateitransfer mit magnetischen Medien. cpio hat (neben vielen anderen Leistungsmerkmalen) Optionen zum Byte-Swapping, zum Schreiben einer Anzahl verschiedener Archivformate und zum Weiterleiten von Daten an andere Programme über eine Pipeline. Dieses letzte Leistungsmerkmal macht cpio zu einer ausgezeichneten Wahl für Installationsmedien. Leider kann cpio keine Dateibäume durchlaufen, so dass eine Liste der zu bearbeitenden Dateien über stdin angegeben werden muss.

cpio unterstützt keine Backups über das Netzwerk. Man kann aber eine Pipeline und rsh verwenden, um Daten an ein entferntes Bandlaufwerk zu senden.

# for f in directory_list; do
find $f >> backup.list
done
# cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"

Dabei steht directory_list für eine Aufzählung der Verzeichnisse, die Sie sichern wollen. user@host gibt den Benutzer auf dem Zielrechner an, der die Sicherung laufen lässt. Der Ort der Sicherung wird durch backup_device angegeben (z.B. /dev/nsa0).


12.9.4. pax

pax(1) ist die Antwort von IEEE/POSIX auf tar und cpio. Über die Jahre hinweg sind die verschiedenen Versionen von tar und cpio leicht inkompatibel geworden. Daher hat POSIX, statt eine Standardisierung zwischen diesen auszufechten, ein neues Archivprogramm geschaffen. pax versucht viele der unterschiedlichen cpio- und tar-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate. Die Kommandostruktur ähnelt eher cpio als tar.


12.9.5. Amanda

Amanda (Advanced Maryland Network Disk Archiver) ist ein Client/Server-Backupsystem, nicht nur ein einzelnes Programm. Ein Amanda-Server kann auf einem einzigen Bandlaufwerk Datensicherungen von jeder beliebigen Anzahl von Computern speichern, sofern auf diesen jeweils ein Amanda-Client läuft und sie über Netzwerk mit dem Amanda-Server verbunden sind.

Ein häufiges Problem bei Standorten mit einer Anzahl großer Festplatten ist, dass das Kopieren der Daten auf Band langsamer vor sich geht als solche Daten anfallen. Amanda löst dieses Problem durch Verwendung einer ``Holding Disk'', einer Festplatte zum gleichzeitigen Zwischenspeichern mehrerer Dateisysteme.

Für Datensicherungen über einen längeren Zeitraum erzeugt Amanda ``Archivsets'' von allen Dateisystemen, die in Amandas Konfigurationsdatei genannt werden. Ein Archivset ist eine Gruppe von Bändern mit vollen Backups und Reihen von inkrementellen (oder differentiellen) Backups, die jeweils nur die Unterschiede zum vorigen Backup enthalten. Zur Wiederherstellung von beschädigten Dateisystemen benötigt man Das Letzte volle Backup und alle darauf folgenden inkrementellen Backups.

Die Konfigurationsdatei ermöglicht die Feineinstellung der Backups und des Netzwerkverkehrs von Amanda. Amanda kann zum Schreiben der Daten auf das Band jedes der oben beschriebenen Backuprogramme verwenden. Amanda ist nicht Teil des Basissystems, Sie müssen Amanda über die Ports-Sammlung oder als Paket installieren.


12.9.6. Tue nichts

``Tue nichts'' ist kein Computerprogramm, sondern die am häufigsten angewendete Backupstrategie. Diese kostet nichts, man muss keinen Backupplan befolgen, einfach nur nein sagen. Wenn etwas passiert, einfach grinsen und ertragen!

Wenn Ihre Zeit und Ihre Daten nicht so wichtig sind, dann ist die Strategie ``Tue nichts'' das geeignetste Backupprogramm für Ihren Computer. Aber UNIX ist ein nützliches Werkzeug, Sie müssen damit rechnen, dass Sie innerhalb von sechs Monaten eine Sammlung von Dateien haben, die für Sie wertvoll geworden sind.

``Tue nichts'' ist die richtige Backupmethode für /usr/obj und andere Verzeichnisbäume, die vom Computer exakt wiedererzeugt werden können. Ein Beispiel sind die Dateien, die diese Handbuchseiten darstellen - sie wurden aus Quelldateien im Format SGML erzeugt. Es ist nicht nötig, Sicherheitskopien der Dateien in den sekundären Formaten wie etwa HTML zu erstellen. Die Quelldateien in SGML sollten jedoch in die regelmäßigen Backups mit einbezogen werden.


12.9.7. Welches Backup-Programm ist am Besten?

dump, Punkt und Schluss. Elizabeth D. Zwicky hat alle hier genannten Backup-Programme bis zur Erschöpfung ausgetestet. Ihre eindeutige Wahl zur Sicherung aller Daten mit Berücksichtigung aller Besonderheiten von UNIX Dateisystemen ist dump.

Elizabeth erzeugte Dateisysteme mit einer großen Vielfalt ungewöhnlicher Bedingungen (und einiger gar nicht so ungewöhnlicher) und testete jedes Programm durch ein Backup und eine Wiederherstellung dieser Dateisysteme. Unter den Besonderheiten waren Dateien mit Löchern, Dateien mit Löchern und einem Block mit Null-Zeichen, Dateien mit ausgefallenen Buchstaben im Dateinamen, unlesbare und nichtschreibbare Dateien, Gerätedateien, Dateien, deren Länge sich während des Backups ändert, Dateien, die während des Backups erzeugt und gelöscht werden, u.v.m. Sie berichtete über ihre Ergebnisse in LISA V im Oktober 1991, s. Torture-testing Backup and Archive Programs.


12.9.8. Die Wiederherstellung in einem Notfall

12.9.8.1. Vor dem Unglück

Es sind nur vier Vorkehrungen zu treffen, um auf jedes erdenkliche Unglück vorbereitet zu sein.

Als erstes drucken Sie das Disklabel jeder Ihrer Festplatten (z.B. mittels disklabel da0 | lpr), die Partitions- und Dateisystemtabelle jeder Festplatte (mit /etc/fstab) sowie alle Bootmeldungen, jeweils in zweifacher Ausfertigung.

Zweitens, überzeugen Sie sich, dass sowohl die Bootdiskette als auch die Reparaturdiskette (boot.flp bzw. fixit.flp) all Ihre Geräte ansprechen können. Die einfachste Methode dies nachzuprüfen ist, Ihren Rechner mit der Boot-Diskette im Floppylaufwerk neu zu starten und die Bootmeldungen zu durchzusehen. Wenn all Ihre Geräte aufgelistet sind und funktionieren, können Sie weiter zu Schritt drei gehen.

Ist das nicht der Fall, müssen Sie sich eine eigene Version der beiden zum Booten benötigten Disketten erstellen. Diese müssen einen Kernel enthalten, der all Ihre Platten mounten kann und Zugriff auf Ihr Bandlaufwerk gestattet. Diese Disketten müssen ferner folgende Programme enthalten: fdisk, disklabel, newfs, mount sowie jedes Backup-Programm, das Sie verwenden. Diese Programme müssen statisch gelinkt sein. Falls Sie dump verwenden, muss die Diskette auch restore enthalten.

Drittens, machen Sie oft Backups auf Band. Jede Änderung seit Ihrem letzten Backup kann unwiederbringlich verloren gehen. Versehen Sie die Backup-Bänder mit Schreibschutz.

Viertens, testen Sie aus, wie die Disketten (entweder boot.flp und fixit.flp oder Ihre beiden eigenen Disketten aus Schritt zwei) und die Bänder mit den Backups zu behandeln sind. Machen Sie sich Notizen zu diesem Test. Bewahren Sie diese Notizen zusammen mit den Bootdisketten, den Ausdrucken und den Bändern mit den Backups auf. Wenn der Ernstfall eintritt, werden Sie vielleicht so genervt sein, dass Sie ohne Ihre Notizen vielleicht das Backup auf Ihren Bändern zerstören. (Wie das geht? Man braucht nur unglücklicherweise den Befehl tar cvf /dev/sa0 einzugeben um ein Band zu überschreiben).

Als zusätzliche Sicherheitsvorkehrung, kann man jeweils die Disketten und Bänder zweifach erstellen. Eine der Kopien sollte an einem entfernten Standort aufbewahrt werden. Ein entfernter Standort ist NICHT der Keller im gleichen Bürogebäude. Eine Anzahl von Firmen im World Trade Center musste diese Lektion auf die harte Tour lernen. Ein entfernter Standort sollte von Ihrem Computer und Ihren Festplatten physikalisch durch eine erhebliche Entfernung getrennt sein.

Beispiel 12-2. Ein Beispielskript zum Erstellen eigener Bootdisketten

#!/bin/sh
#
# Erstellen einer Diskette zur Wiederherstellung eines Backups
#
# Diskette formatieren
#
PATH=/bin:/sbin:/usr/sbin:/usr/bin

fdformat -q fd0
if [ $? -ne 0 ]
then
echo "Bad floppy, please use a new one"
exit 1
fi

# Die Bootbloecke auf die Diskette schreiben
#
disklabel -w -B /dev/fd0c fd1440

#
# Dateisystem fuer die (einzige) Partition auf der Diskette
#
newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a

#
# Diskette mounten
#
mount /dev/fd0a /mnt

#
# Benoetigte Verzeichnisse erstellen
#
mkdir /mnt/dev
mkdir /mnt/bin
mkdir /mnt/sbin
mkdir /mnt/etc
mkdir /mnt/root
mkdir /mnt/mnt          # fuer die Root-Partition
mkdir /mnt/tmp
mkdir /mnt/var

#
# die Verzeichnisse bevoelkern
#
if [ ! -x /sys/compile/MINI/kernel ]
then
cat << EOM
Der MINI_Kernel existiert nicht, bitte einen erzeugen.
Hier ein Beispiel einer Konfigurationsdatei:
#
# MINI -- Ein FreeBSD-Kernel, der auf die Diskette passt.
#
machine     "i386"
cpu     "I486_CPU"
ident       MINI
maxusers    5

options     INET            # notwendig fuer _tcp _icmpstat _ipstat
#               _udpstat _tcpstat _udb
options     FFS         #Berkeley Fast File System
options     FAT_CURSOR      #Blockcursor in syscons oder pccons
options     SCSI_DELAY=15       #traue nicht Joe's SCSI-Geraet
options     NCONS=2             #2 virtuelle Konsolen
options     USERCONFIG      #Konfiguration mit -c XXX zulassen


config      kernel  root on da0 swap on da0 and da1 dumps on da0

controller  isa0
controller  pci0

controller  fdc0    at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
disk        fd0 at fdc0 drive 0

controller  ncr0

controller  scbus0

device      sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
device      npx0    at isa? port "IO_NPX" irq 13 vector npxintr

device      da0
device      da1
device      da2

device      sa0

pseudo-device   loop        # von INET benoetigt
pseudo-device   gzip        # komprimierte a.out-Dateien ausfuehren
EOM
exit 1
fi

cp -f /sys/compile/MINI/kernel /mnt

gzip -c -best /sbin/init > /mnt/sbin/init
gzip -c -best /sbin/fsck > /mnt/sbin/fsck
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt
gzip -c -best /sbin/restore > /mnt/sbin/restore

gzip -c -best /bin/sh > /mnt/bin/sh
gzip -c -best /bin/sync > /mnt/bin/sync

cp /root/.profile /mnt/root

cp -f /dev/MAKEDEV /mnt/dev
chmod 755 /mnt/dev/MAKEDEV

chmod 500 /mnt/sbin/init
chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
chmod 555 /mnt/bin/sh /mnt/bin/sync
chmod 6555 /mnt/sbin/restore

#
# Geraetedateien erstellen
#
cd /mnt/dev
./MAKEDEV std
./MAKEDEV da0
./MAKEDEV da1
./MAKEDEV da2
./MAKEDEV sa0
./MAKEDEV pty0
cd /

#
# Minimale Dateisystemtabelle erstellen
#
cat > /mnt/etc/fstab <<EOM
/dev/fd0a   /   ufs rw 1 1
EOM

#
# Minimale Passwortdatei erstellen
#
cat > /mnt/etc/passwd <<EOM
root:*:0:0:Charlie &:/root:/bin/sh
EOM

cat > /mnt/etc/master.passwd <<EOM
root::0:0::0:0:Charlie &:/root:/bin/sh
EOM

chmod 600 /mnt/etc/master.passwd
chmod 644 /mnt/etc/passwd
/usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd

#
# Die Diskette aushaengen und den Benutzer informieren
#
/sbin/umount /mnt
echo "Die Diskette wurde ausgehaengt und ist jetzt bereit."

12.9.8.2. Nach dem Unglück

Die Schlüsselfrage ist, ob Ihre Hardware überlebt hat. Denn da Sie ja regelmäßig Backups angefertigt haben, brauchen Sie sich um die Software keine Sorgen zu machen.

Falls die Hardware beschädigt wurde, ersetzen Sie zuerst die defekten Teile bevor Sie den Computer benutzen.

Falls die Hardware funktioniert, überprüfen Sie die Disketten. Wenn Sie eigene Bootdisketten verwenden, booten Sie im Single-User-Modus (geben dazu Sie -s am Boot-Prompt boot: ein). Überspringen Sie den folgenden Paragrafen.

Wenn Sie die Standarddisketten boot.flp und fixit.flp verwenden, lesen Sie hier weiter. Legen Sie die Bootdiskette boot.flp in das erste Floppylaufwerk ein und starten Sie den Computer. Wie üblich wird dann das originale Installationsmenü von FreeBSD gestartet. Wählen Sie die Option Fixit--Repair mode with CD-ROM or floppy. Legen Sie die Diskette fixit.flp ein, wenn danach gefragt wird. restore und die anderen Programme, die Sie benötigen, befinden sich dann in /mnt2/stand.

Stellen Sie die Dateisysteme nacheinander, getrennt von einander, wieder her.

Versuchen Sie die Root-Partition Ihrer ersten Festplatte einzuhängen (z.B. mit mount /dev/sd0a /mnt). Wenn das Disklabel beschädigt wurde, benutzen Sie disklabel um die Platte neu zu partitionieren und zu benennen und zwar so, dass die Festplatte mit dem Label übereinstimmt, das Sie ausgedruckt und aufbewahrt haben.

Verwenden Sie newfs um neue Dateisysteme auf den Partitionen anzulegen. Hängen Sie nun die Root-Partition der Festplatte mit Schreibzugriff ein (mit mount -u -o rw /mnt). Benutzen Sie Ihr Backup-Programm um die Daten für das jeweilige Dateisystem aus den Backup-Bändern wieder her zu stellen (z.B. durch restore vrf /dev/sta). Hängen Sie das Dateisystem wieder aus (z.B. durch umount /mnt). Wiederholen Sie diesen Ablauf für jedes betroffene Dateisystem.

Sobald Ihr System wieder läuft, machen Sie gleich wieder ein vollständiges Backup auf neue Bänder. Denn die Ursache für den Absturz oder den Datenverlust kann wieder zuschlagen. Eine weitere Stunde, die Sie jetzt noch dranhängen, kann Ihnen später ein weiteres Missgeschick ersparen.


12.10. Netzwerk-, speicher- und dateibasierte Dateisysteme

Verbessert und neu strukturiert von Marc Fonvieille.

Neben Laufwerken, die sich physikalisch im Rechner befinden wie Floppylaufwerke, CDs, Festplatten usw., kann FreeBSD auch mit anderen Laufwerken, den virtuellen Laufwerken, umgehen.

Dazu zählen Netzwerkdateisysteme wie Network Filesystem und Coda, speicher- und dateibasierte Dateisysteme.

Abhängig von der verwendeten FreeBSD Version werden speicher- und dateibasierte Dateisysteme mit unterschiedlichen Werkzeugen angelegt.

Anmerkung: In FreeBSD 4.X werden Gerätedateien mit MAKEDEV(8) angelegt. FreeBSD 5.X erzeugt Gerätedateien automatisch mithilfe von devfs(5).


12.10.1. Dateibasierte Laufwerke unter FreeBSD 4.X

Mit vnconfig(8) werden vnode Pseudo-Platten konfiguriert und aktiviert. Ein vnode stellt eine Datei dar, auf der Dateioperationen ablaufen. Das bedeutet, dass vnconfig(8) Dateien benutzt, um ein Dateisystem zu erstellen und zu verwalten. Damit ist es z.B. möglich, Dateien, die Abbilder von Floppies oder CDs enthalten, anzuhängen.

In der Kernelkonfiguration muss die vn(4)-Unterstützung aktiviert sein, damit vnconfig(8) funktioniert:

pseudo-device vn

Um ein existierendes Abbild eines Dateisystems einzuhängen:

Beispiel 12-3. Einhängen eines existierenden Abbildes unter FreeBSD 4.X

# vnconfig vn0 diskimage
# mount /dev/vn0c /mnt

Um ein neues Dateisystem mit vnconfig(8) anzulegen:

Beispiel 12-4. Anlegen eines dateibasierten Laufwerks

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# vnconfig -s labels -c vn0 newimage
# disklabel -r -w vn0 auto
# newfs vn0c
Warning: 2048 sector(s) in last cylinder unallocated
/dev/vn0c:     10240 sectors in 3 cylinders of 1 tracks, 4096 sectors
        5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g)
super-block backups (for fsck -b #) at:
 32
# mount /dev/vn0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/vn0c        4927        1     4532     0%    /mnt

12.10.2. Dateibasierte Laufwerke unter FreeBSD 5.X

Unter FreeBSD 5.0 werden virtuelle Laufwerke (md(4)) mit mdconfig(8) erzeugt. Dazu muss das Modul md(4) geladen sein oder das entsprechende Gerät in der Kernelkonfiguration aktiviert sein:

device md

Mit mdconfig(8) können drei verschiedene virtuelle Laufwerke angelegt werden: speicherbasierte Laufwerke, deren Speicher von malloc(9) zur Verfügung gestellt wird, oder dateibasierte Laufwerke, deren Speicher von einer Datei oder dem Swap-Bereich zur Verfügung gestellt wird. Eine mögliche Anwendung ist das Einhängen von Dateien, die Abbilder von CD-ROMs oder Floppies enthalten.

Das Abbild eines Dateisystems wird wie folgt eingehangen:

Beispiel 12-5. Einhängen eines existierenden Abbildes unter FreeBSD 5.X

# mdconfig -a -t vnode -f diskimage -u 0
# mount /dev/md0c /mnt

Ein neues Dateisystem-Abbild erstellen Sie mit mdconfig(8) wie folgt:

Beispiel 12-6. Erstellen eines dateibasierten Laufwerks mit mdconfig

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdconfig -a -t vnode -f newimage -u 0
# disklabel -r -w md0 auto
# newfs md0c
/dev/md0c: 5.0MB (10240 sectors) block size 16384, fragment size 2048
    using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes.
super-block backups (for fsck -b #) at:
 32, 2624, 5216, 7808
# mount /dev/md0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/md0c        4846        2     4458     0%    /mnt

Wenn Sie keine Gerätenummer mit dem Schalter -u angeben, wird von md(4) automatisch eine ungenutzte Gerätenummer zugewiesen. Das zugewiesene Gerät wird auf der Standardausgabe ausgegeben (zum Beispiel md4). Weitere Informationen entnehmen Sie bitte der Hilfeseite mdconfig(8).

Anmerkung: Ab FreeBSD 5.1-RELEASE wurde disklabel(8) durch bsdlabel(8) ersetzt. In bsdlabel wurden veraltete Optionen entfernt. Entfernen Sie die Option -r in den obigen Beispielen, wenn Sie bsdlabel verwenden. Weiteres entnehmen Sie bitte der Hilfeseite bsdlabel(8).

Das Werkzeug mdconfig(8) ist sehr nützlich, doch muss man viele Kommandos absetzen, um ein dateibasiertes Dateisystem zu erstellen. FreeBSD enthält das Werkzeug mdmfs(8), das die notwendigen Schritte in einem Befehl zusammenfasst. Es konfiguriert mit mdconfig(8) ein md(4)-Laufwerk, erstellt darauf mit newfs(8) ein Dateisystem und hängt es anschließend mit mount(8) ein. Das virtuelle Laufwerk aus dem obigen Beispiel kann somit einfach mit den nachstehenden Befehlen erstellt werden:

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records in
5120+0 records out
# mdmfs -F newimage -s 5m md0 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md0        4846    2  4458     0%    /mnt

Wenn sie die Option md ohne Gerätenummer verwenden, wählt md(4) automatisch ein ungenutztes Gerät aus. Weitere Einzelheiten entnehmen Sie bitte der Hilfeseite mdmfs(8).


12.10.3. Speicherbasierte Laufwerke unter FreeBSD 4.X

Mit dem Gerätetreiber md(4) lassen sich unter FreeBSD 4.X leicht speicherbasierte Laufwerke (RAM-disks) anlegen. Der dazu nötige Speicher wird mit malloc(9) belegt.

Nehmen Sie einfach ein Dateisystem, dass Sie z.B. mit vnconfig(8) vorbereitet haben:

Beispiel 12-7. Speicherbasiertes Laufwerk unter FreeBSD 4.X

# dd if=newimage of=/dev/md0
5120+0 records in
5120+0 records out
# mount /dev/md0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/md0c        4927        1     4532     0%    /mnt

Weitere Einzelheiten entnehmen Sie bitte der Hilfeseite md(4).


12.10.4. Speicherbasierte Laufwerke unter FreeBSD 5.X

Speicher- und dateibasierte Laufwerke werden in FreeBSD 5.0 mit denselben Werkzeugen erstellt: mdconfig(8) oder mdmfs(8). Der Speicher für speicherbasierte Laufwerke (RAM-disks) wird mit malloc(9) belegt.

Beispiel 12-8. Erstellen eines speicherbasierten Laufwerks mit mdconfig

# mdconfig -a -t malloc -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, 256 inodes.
    with soft updates
super-block backups (for fsck -b #) at:
 32, 2624, 5216, 7808
# mount /dev/md1 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md1        4846    2  4458     0%    /mnt

Beispiel 12-9. Erstellen eines speicherbasierten Laufwerks mit mdmfs

# mdmfs -M -s 5m md2 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md2        4846    2  4458     0%    /mnt

Der Speicher für das Dateisystem muss nicht mit malloc(9) zugewiesen werden, sondern kann auch aus dem Swap-Bereich stammen. Auf der Kommandozeile von mdconfig(8) ist dazu malloc durch swap zu ersetzen. Ohne Angabe des Schalters -M verwendet mdmfs(8) Speicher aus dem Swap-Bereich. Weitere Informationen entnehmen Sie bitte den Hilfeseiten mdconfig(8) und mdmfs(8).


12.10.5. Virtuelle Laufwerke freigeben

Wenn ein virtuelles Laufwerk nicht mehr gebraucht wird, sollten Sie dem System die belegten Ressourcen zurückgeben. Hängen Sie dazu zuerst das Dateisystem ab und geben Sie dann die benutzten Ressourcen mit mdconfig(8) frei.

Alle von /dev/md4 belegten Ressourcen werden mit dem nachstehenden Kommando freigegeben:

# mdconfig -d -u 4

Eingerichtete md(4)-Geräte werden mit dem Befehl mdconfig -l angezeigt.

Unter FreeBSD 4.X geben Sie die Ressourcen mit vnconfig(8) frei. Die von /dev/vn4 belegten Ressourcen geben Sie wie folgt frei:

# vnconfig -u vn4

12.11. Schnappschüsse von Dateisystemen

Beigetragen von Tom Rhodes.

Zusammen mit Soft Updates bietet FreeBSD 5.0 eine neue Funktion: Schnappschüsse von Dateisystemen.

Schnappschüsse sind Dateien, die ein Abbild eines Dateisystems enthalten und müssen auf dem jeweiligen Dateisystem erstellt werden. Pro Dateisystem darf es maximal 20 Schnappschüsse, die im Superblock vermerkt werden, geben. Schnappschüsse bleiben erhalten, wenn das Dateisystem abgehangen, neu eingehangen oder das System neu gestartet wird. Wenn Sie einen Schnappschuss nicht mehr benötigen, können Sie ihn mit rm(1) löschen. Es ist egal, in welcher Reihenfolge Schnappschüsse gelöscht werden. Es kann allerdings vorkommen, dass nicht der gesamte Speicherplatz wieder freigegeben wird, da ein anderer Schnappschuss einen Teil der entfernten Blöcke für sich beanspruchen kann.

Schnappschüsse werden mit dem schg Flag (siehe chflags(1)) angelegt, um sicherzustellen, das nicht einmal root den Schnappschuss beschreiben kann. In unlink(1) wird allerdings für Schnappschüsse eine Ausnahme gemacht: Sie dürfen gelöscht werden, ohne das das schg Flag vorher entfernt werden muss.

Schnappschü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

Nachdem ein Schnappschuss erstellt wurde, können Sie ihn für verschiedene Zwecke benutzen:

  • Sie können den Schnappschuss für die Datensicherung benutzen und ihn auf eine CD oder ein Band schreiben.

  • Sie können den Schnappschuss mit fsck(8) prüfen. Wenn das Dateisystem zum Zeitpunkt der Erstellung des Schnappschusses in Ordnung war, sollte fsck(8) immer erfolgreich durchlaufen.

  • Sie kö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 für die Sicherung einen Schnappschuss und entfernt diesen am Ende der Sicherung wieder.

  • Sie können einen Schnappschuss in den Verzeichnisbaum einhängen und sich dann den Zustand des Dateisystems zu dem Zeitpunkt ansehen, an dem der Schnappschuss erstellt wurde. Der folgende Befehl hängt den Schnappschuss /var/snapshot/snap ein:

    # mdconfig -a -t vnode -f /var/snapshot/snap -u 4
    
    # mount -r /dev/md4 /mnt
    

Sie können sich nun den eingefrorenen Stand des /var Dateisystems unterhalb von /mnt ansehen. Mit Ausnahme der früheren Schnappschüsse, die als leere Dateien auftauchen, wird alles so aussehen, wie zu dem Zeitpunkt als der Schnappschuss erstellt wurde. Wenn Sie den Schnappschuss nicht mehr benötigen, können Sie ihn, wie nachfolgend gezeigt, abhängen:

# umount /mnt
# mdconfig -d -u 4

Weitere Informationen über Soft Updates und Schnappschüsse von Dateisystemen sowie technische Artikel finden Sie auf der Webseite von Marshall Kirk McKusick.


12.12. Dateisystem-Quotas

Quotas sind eine optionale Funktion des Betriebssystems, die es Ihnen erlauben, den Plattenplatz und/oder die Anzahl der Dateien eines Benutzers oder der Mitglieder einer Gruppe, auf Dateisystemebene zu beschränken. Oft wird dies auf Timesharing-Systemen (Mehrbenutzersystemen) genutzt, da es dort erwünscht ist, die Ressourcen, die ein Benutzer oder eine Gruppe von Benutzern belegen können, zu limitieren. Das verhindert, dass ein Benutzer oder eine Gruppe von Benutzern den ganzen verfügbaren Plattenplatz belegt.


12.12.1. Konfiguration des Systems, um Quotas zu aktivieren

Bevor Quotas benutzt werden können, müssen sie im Kernel konfiguriert werden, wozu die folgende Zeile der Kernelkonfiguration hinzugefügt wird:

options QUOTA

Im gewöhnlichen GENERIC Kernel sind Quotas nicht aktiviert, so dass Sie einen angepassten Kernel konfigurieren und bauen müssen, um Quotas zu benutzen. Weitere Informationen finden Sie in Kapitel 9.

Durch Hinzufügen der folgenden Zeile in /etc/rc.conf wird das Quota-System aktiviert:

enable_quotas="YES"

Um den Start des Quota-Systems zu beeinflussen, steht eine weitere Variable zur Verfügung. Normalerweise wird beim Booten die Integrität der Quotas auf allen Dateisystemen mit quotacheck(8) überprüft. quotacheck(8) stellt sicher, dass die Quota-Datenbank mit den Daten auf einem Dateisystem übereinstimmt. Dies ist allerdings ein sehr zeitraubender Prozess, der die Zeit, die das System zum Booten braucht, signifikant beeinflusst. Eine Variable in /etc/rc.config erlaubt es Ihnen, diesen Schritt zu überspringen:

check_quotas="NO"

Wenn Sie ein FreeBSD vor 3.2-RELEASE benutzen, ist die Konfiguration einfacher. In /etc/rc.conf setzen Sie nur eine Variable:

check_quotas="YES"

Schließlich müssen Sie noch in /etc/fstab die Plattenquotas auf Dateisystemebene aktivieren. Dort können Sie für alle Dateisysteme Quotas für Benutzer, Gruppen oder für beide aktivieren.

Um Quotas pro Benutzer für ein Dateisystem zu aktivieren, geben Sie für dieses Dateisystem die Option userquota im Feld Optionen von /etc/fstab an. Beispiel:

/dev/da1s2g   /home    ufs rw,userquota 1 2

Um Quotas für Gruppen einzurichten, verwenden Sie groupquota anstelle von userquota. Um Quotas für Benutzer und Gruppen einzurichten, ändern Sie den Eintrag wie folgt ab:

/dev/da1s2g    /home    ufs rw,userquota,groupquota 1 2

Die Quotas werden jeweils im Rootverzeichnis des Dateisystems unter dem Namen quota.user für Benutzer-Quotas und quota.group für Gruppen-Quotas abgelegt. Obwohl fstab(5) beschreibt, dass diese Dateien an anderer Stelle gespeichert werden können, wird das nicht empfohlen, da es den Anschein hat, dass die verschiedenen Quota-Utilities das nicht richtig unterstützen.

Jetzt sollten Sie Ihr System mit dem neuen Kernel booten. /etc/rc wird dann automatisch die richtigen Kommandos aufrufen, die die Quota-Dateien für alle Quotas, die Sie in /etc/fstab definiert haben, anlegen. Deshalb müssen vorher auch keine leeren Quota-Dateien angelegt werden.

Normalerweise brauchen Sie die Kommandos quotacheck(8), quotaon(8) oder quotaoff(8) nicht händisch aufzurufen, obwohl Sie vielleicht die entsprechenden Seiten im Manual lesen sollten, um sich mit ihnen vertraut zu machen.


12.12.2. Setzen von Quota-Limits

Nachdem Sie Quotas in Ihrem System aktiviert haben, sollten Sie überprüfen, dass Sie auch tatsächlich aktiviert sind. Führen Sie dazu einfach den folgenden Befehl aus:

# quota -v

Für jedes Dateisystem, auf dem Quotas aktiviert sind, sollten Sie eine Zeile mit der Plattenauslastung und den aktuellen Quota-Limits sehen.

Mit edquota(8) können Sie nun Quota-Limits setzen.

Sie haben mehrere Möglichkeiten, die Limits für den Plattenplatz, den ein Benutzer oder eine Gruppe verbrauchen kann, oder die Anzahl der Dateien, die angelegt werden dürfen, festzulegen. Die Limits können auf dem Plattenplatz (Block-Quotas) oder der Anzahl der Dateien (Inode-Quotas) oder einer Kombination von beiden basieren. Jedes dieser Limits wird weiterhin in zwei Kategorien geteilt: Hardlimits und Softlimits.

Ein Hardlimit kann nicht ü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 Blöcken auf einem Dateisystem und benutzt davon 490 Blöcke, so kann er nur noch 10 weitere Blöcke beanspruchen. Der Versuch, weitere 11 Blöcke zu beanspruchen, wird fehlschlagen.

Im Gegensatz dazu können Softlimits für eine befristete Zeit überschritten werden. Diese Frist beträgt in der Grundeinstellung eine Woche. Hat der Benutzer das Softlimit über die Frist hinaus ü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 zurückgesetzt.

Das folgende Beispiel zeigt die Benutzung von edquota(8). Wenn edquota(8) aufgerufen wird, wird der Editor gestartet, der durch EDITOR gegeben ist oder vi falls EDITOR nicht gesetzt ist. In dem Editor können Sie die Limits eingeben.

# edquota -u test
Quotas for user test:
/usr: blocks in use: 65, limits (soft = 50, hard = 75)
        inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
        inodes in use: 0, limits (soft = 50, hard = 60)

Für jedes Dateisystem, auf dem Quotas aktiv sind, sehen Sie zwei Zeilen, eine für die Block-Quotas und die andere für die Inode-Quotas. Um ein Limit zu modifizieren, ändern Sie einfach den angezeigten Wert. Um beispielsweise das Blocklimit dieses Benutzers von einem Softlimit von 50 und einem Hardlimit von 75 auf ein Softlimit von 500 und ein Hardlimit von 600 zu erhöhen, ändern Sie die Zeile

/usr: blocks in use: 65, limits (soft = 50, hard = 75)

zu:

 /usr: blocks in use: 65, limits (soft = 500, hard = 600)

Die neuen Limits sind wirksam, wenn Sie den Editor verlassen.

Manchmal ist es erwünscht, die Limits für einen Bereich von UIDs zu setzen. Dies kann mit der -p Option von edquota(8) bewerkstelligt werden. Weisen Sie dazu die Limits einem Benutzer zu und rufen danach edquota -p protouser startuid-enduid auf. Besitzt beispielsweise der Benutzer test die gewünschten Limits, können diese mit dem folgenden Kommando für die UIDs 10.000 bis 19.999 dupliziert werden:

# edquota -p test 10000-19999

Weitere Informationen erhalten Sie in edquota(8).


12.12.3. Überprüfen von Quota-Limits und Plattennutzung

Sie können quota(1) oder repquota(8) benutzen, um Quota-Limits und Plattennutzung zu überprüfen. Um die Limits oder die Plattennutzung individueller Benutzer und Gruppen zu überprüfen, kann quota(1) benutzt werden. Ein Benutzer kann nur die eigenen Quotas und die Quotas der Gruppe, der er angehört untersuchen. Nur der Superuser darf sich alle Limits ansehen. Mit repquota(8) erhalten Sie eine Zusammenfassung von allen Limits und der Plattenausnutzung für alle Dateisysteme, auf denen Quotas aktiv sind.

Das folgende Beispiel zeigt die Ausgabe von quota -v für einen Benutzer, der Quota-Limits auf zwei Dateisystemen besitzt:

Disk quotas for user test (uid 1002):
     Filesystem  blocks   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 Blöcke über dem Softlimit von 50 Blöcken und hat noch 5 Tage seiner Frist übrig. Der Stern * zeigt an, dass der Benutzer sein Limit überschritten hat.

In der Ausgabe von quota(1) werden Dateisysteme, auf denen ein Benutzer keinen Platz verbraucht, nicht angezeigt, auch wenn diesem Quotas zugewiesen wurden. Mit -v werden diese Dateisysteme, wie /usr/var im obigen Beispiel, angezeigt.


12.12.4. Quotas über NFS

Quotas werden von dem Quota-Subsystem auf dem NFS Server erzwungen. Der rpc.rquotad(8) Dæmon stellt quota(1) die Quota Informationen auf dem NFS Client zur Verfügung, so dass Benutzer auf diesen Systemen ihre Quotas abfragen können.

Aktivieren Sie rpc.rquotad in /etc/inetd.conf wie folgt:

rquotad/1      dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad

Anschließend starten Sie inetd neu:

# kill -HUP `cat /var/run/inetd.pid`

12.13. Partitionen verschlüsseln

Beigetragen von Lucky Green.

FreeBSD bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe Abschnitt 10.12) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte einfach in ein anderes System einbauen und dort die Daten analysieren.

GEOM Based Disk Encryption (gbde) schützt Daten auf Dateisystemen auch vor hoch motivierten Angreifern, die über erhebliche Mittel verfügen. Der Schutz ist unabhängig von der Art und Weise, auf der ein Angreifer Zugang zu einer Festplatte oder zu einem Rechner erlangt hat. Im Gegensatz zu schwerfälligen Systemen, die einzelne Dateien verschlüsseln, verschlüsselt gbde transparent ganze Dateisysteme. Auf der Festplatte werden keine Daten im Klartext gespeichert.


12.13.1. gbde im Kernel einrichten

  1. Wechseln sie zu root

    Sie benötigen Superuser-Rechte, um gbde einzurichten.

    % su -
    Password:
    
  2. Überprüfen Sie die FreeBSD-Version

    gbde(4) benötigt FreeBSD 5.0 oder höher.

    # uname -r
    5.0-RELEASE
    
  3. Aktivieren Sie gbde(4) in der Kernelkonfiguration

    Fügen Sie mit Ihrem Lieblingseditor die folgende Zeile in die Kernelkonfiguration ein:

    options GEOM_BDE

    Übersetzen und installieren Sie den FreeBSD-Kernel. In Kapitel 9 werden die dazu notwendigen Schritte erklärt.

    Starten sie das System neu, um den neuen Kernel zu benutzen.


12.13.2. Einrichten eines verschlüsselten Dateisystems

Das folgende Beispiel beschreibt, wie ein Dateisystem auf einer neuen Festplatte verschlüsselt wird. Das Dateisystem wird in /private eingehangen. Mit gbde könnten auch /home und /var/mail verschlüsselt werden. Die dazu nötigen Schritte können allerdings in dieser Einführung nicht behandelt werden.

  1. Installieren der Festplatte

    Installieren Sie die Festplatte wie in Abschnitt 12.3 beschrieben. Im Beispiel verwenden wir die Partition /dev/ad4s1c. Die Gerä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 für gbde-Lock-Dateien anlegen

    # mkdir /etc/gbde
    

    Die Lock-Dateien sind für den Zugriff von gbde auf verschlüsselte Partitionen notwendig. Ohne die Lock-Dateien können die Daten nur mit erheblichem manuellen Aufwand wieder entschlüsselt werden (dies wird auch von der Software nicht unterstützt). Jede verschlüsselte Partition benötigt eine gesonderte Lock-Datei.

  3. Vorbereiten der gbde-Partition

    Eine von gbde benutzte Partition muss einmalig vorbereitet werden:

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c
    

    gbde(8) öffnet eine Vorlage in Ihrem Editor, in der Sie verschiedene Optionen einstellen können. Setzen Sie sector_size auf 2048, wenn Sie UFS1 oder UFS2 benutzen.

    $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk 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
    [...]
    

    gbde(8) fragt dann zweimal eine Passphrase zum Schutz der Daten ab. Die Passphrase muss beides Mal gleich eingegeben werden. Die Sicherheit der Daten hängt alleine von der Qualität der gewählten Passphrase ab. [11]

    Mit gbde init wurde im Beispiel auch die Lock-Datei /etc/gbde/ad4s1c angelegt.

    Achtung: Sichern Sie die Lock-Dateien von gbde immer zusammen mit den verschlüsselten Dateisystemen. Ein entschlossener Angreifer kann die Daten vielleicht auch ohne die Lock-Datei entschlüsseln. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen. Dies ist nur noch mit erheblichem manuellen Aufwand möglich, der weder von gbde(8) noch seinem Entwickler unterstützt wird.

  4. Einbinden der verschlüsselten Partition in den Kernel

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    Das Kommando fragt die Passphrase ab, die Sie beim Vorbereiten der Partition eingegeben haben. Das neue Gerät erscheint danach als /dev/device_name.bde im Verzeichnis /dev:

    # 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 verschlüsselten Gerät anlegen

    Wenn der Kernel die verschlüsselte Partition kennt, können Sie ein Dateisystem auf ihr anlegen. Benutzen Sie dazu den Befehl newfs(8). Da ein Dateisystem vom Typ UFS2 sehr viel schneller als eins vom Typ UFS1 angelegt wird, empfehlen wir Ihnen, die Option -O2 zu benutzen.

    Anmerkung: Ab FreeBSD 5.1-RELEASE wird -O2 als Voreinstellung verwendet.

    # newfs -U -O2 /dev/ad4s1c.bde
    

    Anmerkung: newfs(8) muss auf einer dem Kernel bekannten gbde-Partition (einem Gerät mit dem Namen *.bde laufen.

  6. Einhängen der verschlüsselten Partition

    Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an:

    # mkdir /private
    

    Hängen Sie das verschlüsselte Dateisystem ein:

    # mount /dev/ad4s1c.bde /private
    
  7. Überprüfen des verschlüsselten Dateisystem

    Das verschlüsselte Dateisystem sollte jetzt von df(1) erkannt werden und benutzt werden kö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
    

12.13.3. Einhängen eines existierenden verschlüsselten Dateisystems

Nach jedem Neustart müssen verschlüsselte Dateisysteme dem Kernel wieder bekannt gemacht werden, auf Fehler überprüft werden und eingehangen werden. Die dazu nötigen Befehle müssen als root durchgeführt werden.

  1. gbde-Partition im Kernel bekannt geben

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    Das Kommando fragt nach der Passphrase, die Sie beim Vorbereiten der Partition eingegeben haben.

  2. Prüfen des Dateisystems

    Das verschlüsselte Dateisystem kann noch nicht automatisch über /etc/fstab eingehangen werden. Daher muss es vor dem Einhängen mit fsck(8) geprüft werden:

    # fsck -p -t ffs /dev/ad4s1c.bde
    
  3. Einhängen des verschlüsselten Dateisystems

    # mount /dev/ad4s1c.bde /private
    

    Das verschlüsselte Dateisystem steht danach zur Verfügung.


12.13.3.1. Verschlüsselte Dateisysteme automatisch einhängen

Mit einem Skript können verschlüsselte Dateisysteme automatisch bekannt gegeben, geprüft und eingehangen werden. Wir raten Ihnen allerdings aus Sicherheitsgründen davon ab. Starten Sie das Skript manuell an der Konsole oder in einer ssh(1)-Sitzung.


12.13.4. Kryptographische Methoden von gbde

gbde(8) benutzt den 128-Bit AES im CBC-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem unterschiedlichen AES-Schlüssel verschlüsselt. Mehr Informationen, unter anderem wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, erhalten Sie in gbde(4).


12.13.5. Kompatibilität

sysinstall(8) kann nicht mit verschlüsselten gbde-Geräten umgehen. Vor dem Start von sysinstall(8) sind alle *.bde-Geräte zu deaktivieren, da sysinstall(8) sonst bei der Gerätesuche abstürzt. Das im Beispiel verwendete Gerät wird mit dem folgenden Befehl deaktiviert:

# gbde detach /dev/ad4s1c

Anmerkung: Sie können gbde nicht zusammen mit vinum benutzen, da vinum(4) das geom(4)-Subsystem nicht benutzt.


Kapitel 13. Vinum (noch nicht übersetzt)

Dieses Kapitel ist noch nicht übersetzt. Lesen Sie bitte das Original in englischer Sprache.


Kapitel 14. Lokalisierung - I18N/L10N Einrichtung und Benutzung

Beigesteuert von Andrey A. Chernov. Überarbeitet von Michael C. Wu. Übersetzt von Alexander Langer und Martin Heinen.

14.1. Übersicht

FreeBSD ist ein über die ganze Welt verteiltes Projekt. Dieses Kapitel behandelt die Internationalisierung und Lokalisierung von FreeBSD, mit denen nicht englisch sprechende Benutzer FreeBSD an ihre Bedürfnisse anpassen können. Die Internationalisierung betrifft sowohl die System- als auch die Anwendungsebene, daher wird im Laufe des Texts auf genauere Anwendungsdokumentationen verwiesen.

Nachdem Sie dieses Kapitel durchgearbeitet haben, werden Sie wissen

  • wie verschiedene Sprachen und Lokalisierungen in modernen Betriebssystemen codiert werden,

  • wie Sie die Locale Ihrer Login-Shell setzen,

  • wie Sie die Konsole für nicht-englische Sprachen konfigurieren,

  • wie Sie das X Window System mit verschiedenen Sprachen benutzen,

  • wo Sie mehr Informationen über das Erstellen von I18N konformen Anwendungen erhalten.

Bevor Sie dieses Kapitel lesen, sollten Sie

  • wissen, wie Sie zusätzliche Anwendungen installieren (Kapitel 4).


14.2. Grundlagen

14.2.1. Was ist I18N/L10N?

Entwickler kürzen das Wort internationalization (englisch für Internationalisierung) mit I18N ab, weil sich zwischen dem ersten und letzten Buchstaben des Worts 18 Buchstaben befinden. L10N benutzt die gleiche Namensgebung und ist eine Abkürzung des Worts