Anleitung für Administratoren - web server
Anleitung für Administratoren - web server
Anleitung für Administratoren - web server
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
InstantAFS und AFS<br />
<strong>Anleitung</strong> <strong>für</strong> <strong>Administratoren</strong><br />
(Version 1.2)<br />
Frank Burkhardt<br />
Max–Planck–Institut <strong>für</strong><br />
Kognitions- und Neurowissenschaften ∗<br />
10. April 2007<br />
∗ http://instantafs.cbs.mpg.de
Inhaltsverzeichnis<br />
1 Einleitung 12<br />
1.1 Danksagungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
1.2 Vorraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
1.3 Was ist/macht InstantAFS <strong>für</strong> mich? . . . . . . . . . . . . . . . 13<br />
1.4 Ziele von InstantAFS . . . . . . . . . . . . . . . . . . . . . . . 14<br />
1.5 Konventionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2 Technische Grundlagen 16<br />
2.1 AFS in wenigen Worten . . . . . . . . . . . . . . . . . . . . . . 16<br />
2.2 Besonderheiten von AFS . . . . . . . . . . . . . . . . . . . . . 16<br />
2.3 Festlegungen und Einschränkungen . . . . . . . . . . . . . . . 18<br />
2.4 Anders als unter UNIX . . . . . . . . . . . . . . . . . . . . . . 19<br />
2.5 Grenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
2.6 Grundlegendes zu Volumes . . . . . . . . . . . . . . . . . . . . 21<br />
2.7 AFS-Kommunikation oberhalb Layer 4 . . . . . . . . . . . . . 22<br />
2.7.1 AFS-Clients . . . . . . . . . . . . . . . . . . . . . . . 22<br />
2.7.2 Datenbank<strong>server</strong> . . . . . . . . . . . . . . . . . . . . . 23<br />
2.7.3 AFS-Kommando-Familien . . . . . . . . . . . . . . . . 23<br />
2.7.4 Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
2.7.5 Anderes . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
2.8 Authentifikation, Autorisation, Sicherheit . . . . . . . . . . . . 24<br />
2.9 Wo werden Daten über die Benutzer gespeichert? . . . . . . . . 25<br />
2.10 Ablauf eines Filezugriffs auf das AFS . . . . . . . . . . . . . . 25<br />
2.11 DOs and DON’Ts . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
3 Technische Details zu AFS 27<br />
2<br />
3.1 Volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.1.1 RW-Volumes (RW-Instanzen) . . . . . . . . . . . . . . 27<br />
3.1.2 RO-Volumes (RO-Instanzen) . . . . . . . . . . . . . . . 27<br />
3.1.3 Backup-Volumes (Backup-Instanzen) . . . . . . . . . . 29<br />
3.1.4 Differenzielle Speicherung . . . . . . . . . . . . . . . . 29<br />
3.1.5 Temporäre differentiell gespeicherte Instanzen . . . . . 30<br />
3.1.6 Zusätzliche differenziell gespeicherte Instanzen . . . . . 31
3.1.7 Verschieben von Volumes im Produktionsbetrieb . . . . 31<br />
3.2 Volume-Mountpoints . . . . . . . . . . . . . . . . . . . . . . . 32<br />
3.2.1 Arten . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
3.2.2 Dynamische Mountpoints . . . . . . . . . . . . . . . . 34<br />
3.2.3 Punkt oder nicht Punkt... . . . . . . . . . . . . . . . . . 34<br />
3.2.4 Wie werden Mountpoints gespeichert? . . . . . . . . . . 34<br />
3.3 Die AFS-Datenbank . . . . . . . . . . . . . . . . . . . . . . . . 35<br />
3.3.1 Grundlegendes . . . . . . . . . . . . . . . . . . . . . . 35<br />
3.3.2 Synchronisation der DB-Server . . . . . . . . . . . . . 36<br />
3.3.3 Benötigte Prozesse auf den DB-Server-Maschinen . . . 37<br />
3.4 Die Zelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
3.4.1 Organellen . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
3.4.2 Das zentrale Zellenverzeichnis . . . . . . . . . . . . . . 38<br />
3.5 Der Cachemanager (AFS-Client) . . . . . . . . . . . . . . . . . 39<br />
3.5.1 Der Client-Cache . . . . . . . . . . . . . . . . . . . . . 39<br />
3.5.2 Kenngrößen des Caches . . . . . . . . . . . . . . . . . 39<br />
3.5.3 Verwaltung von Daten im Cache . . . . . . . . . . . . . 41<br />
3.5.4 Cache-Kohärenz . . . . . . . . . . . . . . . . . . . . . 42<br />
3.5.5 Sicherheitshinweise . . . . . . . . . . . . . . . . . . . . 42<br />
3.5.6 Konfigurationsoptionen . . . . . . . . . . . . . . . . . . 43<br />
3.6 Das AFS-Netzwerkprotokoll (Layer 3 und 4) . . . . . . . . . . 44<br />
3.6.1 Server/Clients mit mehreren IP-Adressen/Netzwerkkarten 45<br />
3.7 Das Sicherheitsmodell . . . . . . . . . . . . . . . . . . . . . . 47<br />
3.7.1 Der AFS-Key . . . . . . . . . . . . . . . . . . . . . . . 47<br />
3.7.2 Authentifikation . . . . . . . . . . . . . . . . . . . . . 47<br />
3.7.3 Autorisation . . . . . . . . . . . . . . . . . . . . . . . 51<br />
3.7.4 Sicherheitshinweise . . . . . . . . . . . . . . . . . . . . 54<br />
3.7.5 Der AFS-Superuser . . . . . . . . . . . . . . . . . . . . 54<br />
3.8 File<strong>server</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />
3.8.1 AFS-Volumes sind keine Shares oder Exports . . . . . . 57<br />
3.8.2 Die OpenAFS-File<strong>server</strong>typen . . . . . . . . . . . . . . 57<br />
3.8.3 Wirtspartitionen . . . . . . . . . . . . . . . . . . . . . 59<br />
3.8.4 Prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />
3.9 Der bos-Server . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
3.9.1 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
3.9.2 Authentifikation . . . . . . . . . . . . . . . . . . . . . 60<br />
3.10 Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
3
3.10.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
3.10.2 Der Principal . . . . . . . . . . . . . . . . . . . . . . . 62<br />
3.10.3 Keytabs . . . . . . . . . . . . . . . . . . . . . . . . . . 63<br />
3.10.4 Kerberos und AFS . . . . . . . . . . . . . . . . . . . . 64<br />
3.10.5 Server-Komponenten . . . . . . . . . . . . . . . . . . . 64<br />
3.10.6 Synchronisation . . . . . . . . . . . . . . . . . . . . . 64<br />
3.10.7 Gültigkeitsdauer von Tickets . . . . . . . . . . . . . . . 65<br />
4 Einrichtung einer AFS-Zelle 66<br />
4<br />
4.1 Vorüberlegungen . . . . . . . . . . . . . . . . . . . . . . . . . 66<br />
4.1.1 Standorte . . . . . . . . . . . . . . . . . . . . . . . . . 66<br />
4.1.2 Serverprozesse . . . . . . . . . . . . . . . . . . . . . . 66<br />
4.2 InstantAFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
4.2.1 Voraussetzungen, Prinzipien . . . . . . . . . . . . . . . 67<br />
4.2.2 Woher bekommt man die benötigten Pakete . . . . . . . 68<br />
4.2.3 Obligatorische Serverpakete . . . . . . . . . . . . . . . 68<br />
4.2.4 Obligatorische Clientpakete . . . . . . . . . . . . . . . 69<br />
4.3 Ablauf einer InstantAFS-Installation . . . . . . . . . . . . . . . 69<br />
4.3.1 Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
4.3.2 Allgemeine Informationen zum Ablauf . . . . . . . . . 70<br />
4.3.3 Definieren von Rechnern (hosts) . . . . . . . . . . . . . 71<br />
4.3.4 Auswahl der DNS-Server (dns) . . . . . . . . . . . . . 73<br />
4.3.5 Zeit<strong>server</strong>-Auswahl (time<strong>server</strong>s) . . . . . . . . . . . . 74<br />
4.3.6 Auswahl der AFS-DB-Server (db<strong>server</strong>s) . . . . . . . . 74<br />
4.3.7 Auswahl der AFS-File<strong>server</strong> (fs<strong>server</strong>s) . . . . . . . . . 75<br />
4.3.8 Auswahl eines Samba-Gateways (smbgateway) . . . . . 75<br />
4.3.9 SSH-Schlüssel <strong>für</strong> Datenbankupdates (ssh-keys) . . . . . 75<br />
4.3.10 Aufräumen vor der Installation (cleanup) . . . . . . . . 76<br />
4.3.11 Überprüfen der Konfiguration (check) . . . . . . . . . . 76<br />
4.3.12 Setup der DNS-Server (dns-<strong>server</strong>s) . . . . . . . . . . . 76<br />
4.3.13 Setup der DNS-Clients (dns-clients) . . . . . . . . . . . 76<br />
4.3.14 Setup der Zeit<strong>server</strong> (ntp-<strong>server</strong>s) . . . . . . . . . . . . 76<br />
4.3.15 Setup der NTP-Clients (ntp-clients) . . . . . . . . . . . 76<br />
4.3.16 Setup der Kerberos-Server (krb5-<strong>server</strong>s) . . . . . . . . 77<br />
4.3.17 Erzeugen der Service-Keytabs (keytabs) . . . . . . . . . 77<br />
4.3.18 Initialisieren der AFS-Server (afs-init) . . . . . . . . . . 77<br />
4.3.19 Initialisierung der AFS-Datenbank (afs-db) . . . . . . . 77<br />
4.3.20 Setup des ersten File<strong>server</strong>s (afs-fs1) . . . . . . . . . . . 77
4.3.21 Start der restlichen File<strong>server</strong> (afs-fs2) . . . . . . . . . . 77<br />
4.3.22 Setup des Samba-Gateways (samba-<strong>server</strong>) . . . . . . . 77<br />
4.3.23 Setup der acall-Server (acall) . . . . . . . . . . . . . . 77<br />
4.3.24 Abschließendes . . . . . . . . . . . . . . . . . . . . . . 78<br />
4.3.25 Ein kleiner Test... . . . . . . . . . . . . . . . . . . . . . 78<br />
4.4 Ablauf einer manuellen Grundinstallation . . . . . . . . . . . . 79<br />
4.4.1 DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />
4.4.2 Client-Konfiguration . . . . . . . . . . . . . . . . . . . 83<br />
4.4.3 Zeit<strong>server</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />
4.4.4 Die Kerberos-Server . . . . . . . . . . . . . . . . . . . 86<br />
4.4.5 Der erste AFS-DB-Server . . . . . . . . . . . . . . . . 89<br />
4.4.6 Der erste File<strong>server</strong> . . . . . . . . . . . . . . . . . . . . 91<br />
4.4.7 Start der AFS-Clients . . . . . . . . . . . . . . . . . . . 94<br />
4.4.8 Das Samba-Gateway . . . . . . . . . . . . . . . . . . . 96<br />
5 Backups und Ausfallsicherheit 98<br />
5.1 Welche Server <strong>für</strong> welche Volumes? . . . . . . . . . . . . . . . 98<br />
5.1.1 RO-Daten . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />
5.1.2 RW-Daten . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />
5.1.3 Gekoppelte Server . . . . . . . . . . . . . . . . . . . . 99<br />
5.2 Das AFS-Backup-System . . . . . . . . . . . . . . . . . . . . . 100<br />
5.2.1 Prinzipielles zu AFS-Backups . . . . . . . . . . . . . . 100<br />
5.2.2 Welche Instanzen sollte man zum Sichern verwenden? . 101<br />
5.2.3 Ablauf unter InstantAFS . . . . . . . . . . . . . . . . . 101<br />
5.3 Etwas Theorie zum InstantAFS-Backup . . . . . . . . . . . . . 107<br />
5.3.1 Kategorisierung von Dumps durch instantafs.vtapes . . . 107<br />
5.4 Backup “light” - die erste . . . . . . . . . . . . . . . . . . . . . 108<br />
5.5 Backup “light” - die zweite . . . . . . . . . . . . . . . . . . . . 109<br />
5.5.1 Backup light mit Shadow-Instanzen . . . . . . . . . . . 110<br />
5.6 Backup <strong>für</strong> Daten ausserhalb des AFS . . . . . . . . . . . . . . 110<br />
5.7 Wiederherstellen zerstörter RW-Instanzen . . . . . . . . . . . . 111<br />
5.7.1 ... aus einer RO-Instanz . . . . . . . . . . . . . . . . . . 111<br />
5.7.2 ... aus dem AFS-Backup-System . . . . . . . . . . . . . 112<br />
5.7.3 ... aus Volume-Dumps . . . . . . . . . . . . . . . . . . 113<br />
5
6 Tägliche Arbeit mit AFS 114<br />
6<br />
6.1 Manuelles Anlegen neuer Benutzer . . . . . . . . . . . . . . . . 114<br />
6.2 Ändern der Maximalgröße (Quota) eines Volumes . . . . . . . . 115<br />
6.2.1 Setzen der Quota als Superuser . . . . . . . . . . . . . . 115<br />
6.2.2 Setzen der Quota durch Benutzer . . . . . . . . . . . . 115<br />
6.3 Anlegen eines Volumes . . . . . . . . . . . . . . . . . . . . . . 116<br />
6.3.1 Anlegen eines Volumes durch den Superuser . . . . . . 116<br />
6.3.2 Anlegen eines Volumes durch einen normalen Benutzer . 117<br />
6.4 Hinzufügen eines File<strong>server</strong>s . . . . . . . . . . . . . . . . . . . 118<br />
6.5 Datenbank<strong>server</strong> hinzufügen, entfernen oder wechseln . . . . . 118<br />
6.5.1 Rechner und deren Sonderwünsche . . . . . . . . . . . 118<br />
6.5.2 Ablauf . . . . . . . . . . . . . . . . . . . . . . . . . . 119<br />
6.6 Ändern von Verzeichnisrechten im AFS . . . . . . . . . . . . . 120<br />
6.7 Arbeiten mit AFS-Gruppen . . . . . . . . . . . . . . . . . . . . 121<br />
6.8 Löschen eines Volumes oder einer Volume-Instanz . . . . . . . 122<br />
6.8.1 ... wenn’s keine Unregelmäßigkeiten gibt . . . . . . . . 122<br />
6.8.2 ... das der VLDB unbekannt ist . . . . . . . . . . . . . . 123<br />
6.8.3 ... das sich auch nach mehreren Versuchen nicht Löschen<br />
läßt . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />
6.8.4 ... aus der VLDB . . . . . . . . . . . . . . . . . . . . . 123<br />
6.9 Verschieben eines Volumes . . . . . . . . . . . . . . . . . . . . 123<br />
6.10 Einholen von Informationen... . . . . . . . . . . . . . . . . . . 124<br />
6.10.1 ... über Server . . . . . . . . . . . . . . . . . . . . . . . 124<br />
6.10.2 ... über Volumes . . . . . . . . . . . . . . . . . . . . . 127<br />
6.10.3 ... über den Client . . . . . . . . . . . . . . . . . . . . . 130<br />
6.10.4 ... über Verzeichnisse/Dateien . . . . . . . . . . . . . . 130<br />
6.10.5 ... über die Zelle . . . . . . . . . . . . . . . . . . . . . 130<br />
6.11 Load-Balancing . . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />
6.11.1 RO-Daten . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />
6.11.2 RW-Daten . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />
6.12 Server-Ranks definieren . . . . . . . . . . . . . . . . . . . . . . 136<br />
6.13 Sperren auf Volume-Ebene . . . . . . . . . . . . . . . . . . . . 137<br />
6.13.1 Gesperrte Volumes . . . . . . . . . . . . . . . . . . . . 137<br />
6.13.2 “Beschäftigte” Instanzen . . . . . . . . . . . . . . . . . 137<br />
6.13.3 Offline-Instanzen . . . . . . . . . . . . . . . . . . . . . 139
7 Rezepte 140<br />
7.1 Eine Beispiel-Zelle . . . . . . . . . . . . . . . . . . . . . . . . 140<br />
7.1.1 Verzeichnisstruktur . . . . . . . . . . . . . . . . . . . . 140<br />
7.1.2 Server . . . . . . . . . . . . . . . . . . . . . . . . . . . 141<br />
7.2 Administrationsarme Backups . . . . . . . . . . . . . . . . . . 141<br />
7.3 Sicher und Bequem - SSH ohne Passwort . . . . . . . . . . . . 142<br />
7.3.1 Einloggen per SSH mit Public-Key . . . . . . . . . . . 142<br />
7.3.2 Single-Sign-On mit Kerberos5 . . . . . . . . . . . . . . 143<br />
7.4 Wie kommt ein kerberosifizierter Dienst zu seinem Schlüssel? . 145<br />
7.5 Aufsetzen eines unspezialisierten AFS-Servers . . . . . . . . . 146<br />
7.6 Erhöhte Privilegien <strong>für</strong> einfache Benutzer . . . . . . . . . . . . 148<br />
7.6.1 Das Problem . . . . . . . . . . . . . . . . . . . . . . . 148<br />
7.6.2 Das Prinzip . . . . . . . . . . . . . . . . . . . . . . . . 149<br />
7.6.3 Der Ablauf eines acall-RPCs . . . . . . . . . . . . . . . 150<br />
7.6.4 Einrichten eines acall-Servers . . . . . . . . . . . . . . 151<br />
7.7 Dienste AFS-tauglich machen . . . . . . . . . . . . . . . . . . 152<br />
7.7.1 Rechner-basierte Authentifikation . . . . . . . . . . . . 152<br />
7.7.2 Tokens <strong>für</strong> Dienste . . . . . . . . . . . . . . . . . . . . 153<br />
7.7.3 Weiterleiten von Authentifikationsinformationen der Nutzer<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />
7.7.4 Lokal gespeicherte Benutzer-Keytabs . . . . . . . . . . 154<br />
7.8 Homedirectories im AFS . . . . . . . . . . . . . . . . . . . . . 154<br />
7.9 Benutzerverwaltung unter InstantAFS . . . . . . . . . . . . . . 155<br />
7.10 Praktische Anwendung der Volume-Replikation . . . . . . . . . 158<br />
7.11 Ein Projekt aus mehreren Volumes . . . . . . . . . . . . . . . . 159<br />
7.11.1 Wie wird ein Projekt prinzipiell aufgebaut? . . . . . . . 159<br />
7.11.2 Konkretes Beispiel: Vorüberlegungen . . . . . . . . . . 160<br />
7.11.3 Vorbereitung durch den Administrator . . . . . . . . . . 160<br />
7.11.4 Backups . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />
7.11.5 Acall-Einstellungen . . . . . . . . . . . . . . . . . . . . 162<br />
7.11.6 Komfort . . . . . . . . . . . . . . . . . . . . . . . . . . 163<br />
7.11.7 Tägliche Arbeit mit dem Projekt . . . . . . . . . . . . . 163<br />
7.12 Ein Debian-Server <strong>für</strong> Instantafs . . . . . . . . . . . . . . . . . 164<br />
7.13 Automatische Client-Installation mit instantafs-customclient . . 165<br />
7.14 Schutz des AFS-Keys mit Echtzeitverschlüsselung . . . . . . . 166<br />
7.14.1 InstantAFS neu paketieren . . . . . . . . . . . . . . . . 168<br />
7.15 Daten über die Zelle zentral sammeln . . . . . . . . . . . . . . 169<br />
7.15.1 Punkt oder nicht . . . . . . . . . . . . . . . . . . . . . 169<br />
7
7.16 Schnelles Kopieren eines Volumes . . . . . . . . . . . . . . . . 170<br />
7.17 Eine komplette AFS-Partition mit allen Volume-Instanzen verschieben<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170<br />
7.17.1 AFS-Boardmittel . . . . . . . . . . . . . . . . . . . . . 170<br />
7.17.2 Speichersubsystem umbauen . . . . . . . . . . . . . . . 170<br />
7.17.3 Manuelles Kopieren auf Dateiebene . . . . . . . . . . . 171<br />
7.18 AFS schneller machen . . . . . . . . . . . . . . . . . . . . . . 172<br />
7.18.1 File<strong>server</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />
7.19 AFS-Clients finden . . . . . . . . . . . . . . . . . . . . . . . . 172<br />
8 Problembehebung 173<br />
8<br />
8.1 Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . 173<br />
8.2 Fehler mit tokenmgr, kinit oder aklog . . . . . . . . . . . . . . 173<br />
8.2.1 aklog: Request is a replay while getting AFS tickets . . 173<br />
8.3 vos, pts oder bos liefern Fehlermeldungen . . . . . . . . . . . . 174<br />
8.3.1 u: no quorum elected . . . . . . . . . . . . . . . . . . . 174<br />
8.3.2 u: not synchronization site (should work on sync site) . . 174<br />
8.3.3 vsu_ClientInit: Could not get afs tokens, running unauthenticated.<br />
. . . . . . . . . . . . . . . . . . . . . . . 174<br />
8.3.4 bos: failed to [...] (you are not authorized for this operation)<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . 175<br />
8.3.5 libprot: no such entry Could not get afs tokens, running<br />
unauthenticated. . . . . . . . . . . . . . . . . . . . . . 175<br />
8.3.6 pts: Permission denied [...] . . . . . . . . . . . . . . . . 175<br />
8.3.7 VLDB: no permission access for call . . . . . . . . . . 175<br />
8.3.8 Failed to move data for the volume [...] . . . . . . . . . 175<br />
8.3.9 Could not remove <strong>server</strong> [...] from the VLDB . . . . . . 176<br />
8.4 Probleme im AFS-Dateisystem (AFS-Client) . . . . . . . . . . 176<br />
8.4.1 Zu viele AFS-Dateien sind auf einer Maschine geöffnet . 176<br />
8.4.2 In einem Verzeichnis lassen sich keine weiteren Dateien<br />
anlegen. . . . . . . . . . . . . . . . . . . . . . . . . . . 176<br />
8.4.3 Clientseitig ist kein Zugriff auf /afs möglich . . . . . . . 176<br />
8.4.4 ”Read-only file system”-Fehler beim Schreiben . . . . . 178<br />
8.4.5 In einem Verzeichnis haben alle Dateien unerwarteterweise<br />
die Größe 0 . . . . . . . . . . . . . . . . . . . . . 178<br />
8.4.6 Der MacOSX-AFS-Client stürzt beim Versuch ab, ein<br />
.dmg-file zu mounten . . . . . . . . . . . . . . . . . . . 179<br />
8.5 File<strong>server</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179<br />
8.5.1 Ein File<strong>server</strong> generiert undefinierte Fehler . . . . . . . 179
8.5.2 Ein File<strong>server</strong> ist ausgefallen, die /vicep-Partitionen jedoch<br />
intakt . . . . . . . . . . . . . . . . . . . . . . . . 179<br />
8.5.3 Ein File<strong>server</strong> wurde komplett zerstört . . . . . . . . . . 180<br />
8.5.4 Eine Volume-Instanz auf einem Server bleibt offline . . 181<br />
8.5.5 Eine Volume-Instanz auf einem Server ist löschresistent 182<br />
8.5.6 Eine Partition auf einem File<strong>server</strong> ist voll, nichts geht<br />
mehr . . . . . . . . . . . . . . . . . . . . . . . . . . . 183<br />
8.5.7 Volume-Instanzen names bogus.XXX tauchen auf File<strong>server</strong>n<br />
auf . . . . . . . . . . . . . . . . . . . . . . . . 183<br />
8.6 Ein File<strong>server</strong> registriert sich mit zu vielen (evtl. falschen) IP-<br />
Adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184<br />
8.7 Datenbank<strong>server</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 184<br />
8.7.1 Es ist überhaupt kein Zugriff auf die AFS-Datenbank<br />
möglich . . . . . . . . . . . . . . . . . . . . . . . . . . 184<br />
8.7.2 Schreibzugriffe sind nicht möglich . . . . . . . . . . . . 185<br />
8.7.3 Ein Volume läßt sich nicht aus der Datenbank löschen . 185<br />
8.8 Backup-Probleme . . . . . . . . . . . . . . . . . . . . . . . . . 186<br />
8.8.1 Der Speicher auf dem Backup-Server ist voll, das Backup<br />
läuft noch . . . . . . . . . . . . . . . . . . . . . . . . . 186<br />
8.9 acall-Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />
8.9.1 mk_req error: No credentials cache found . . . . . . . . 187<br />
8.9.2 E: acall(): Kerberos error in get_<strong>server</strong>_rcache(): Permission<br />
denied in replay cache code . . . . . . . . . . . 187<br />
8.9.3 E: Not authorized. . . . . . . . . . . . . . . . . . . . . 187<br />
8.9.4 mk_req error: Server not found in Kerberos database . . 188<br />
8.9.5 Der acall-Aufruf blockiert <strong>für</strong> immer . . . . . . . . . . 188<br />
8.10 Andere Dienste . . . . . . . . . . . . . . . . . . . . . . . . . . 188<br />
8.10.1 In einer SSH-Shell ist der Zugriff auf das AFS nicht<br />
möglich . . . . . . . . . . . . . . . . . . . . . . . . . . 188<br />
8.11 Localhost und die Hostnamensauflösung . . . . . . . . . . . . . 190<br />
8.11.1 /etc/hosts säubern . . . . . . . . . . . . . . . . . . . . . 190<br />
8.11.2 Schadensbeseitigung . . . . . . . . . . . . . . . . . . . 191<br />
9 AFS- Kerberos- und InstantAFS-Kommandos 192<br />
9.1 AFS-Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . 192<br />
9.1.1 Arbeiten an AFS-Serverprozessen . . . . . . . . . . . . 192<br />
9.2 InstantAFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194<br />
9.2.1 instantafs.acall (Kurzform: acall) . . . . . . . . . . . . 194<br />
9.2.2 instantafs.acall-backup (Kurzform: ia:backup) . . . . . . 194<br />
9.2.3 instantafs.acall-helloworld (Kurzform: ia:helloworld) . . 194<br />
9
9.2.4 instantafs.acall-release (Kurzform: ia:release) . . . . . . 195<br />
9.2.5 instantafs.acall-setquota . . . . . . . . . . . . . . . . . 195<br />
9.2.6 instantafs.acall-usermgr (Kurzform: ia:usermgr) . . . . . 195<br />
9.2.7 instantafs.acall-volcreate (Kurzform: ia:volcreate) . . . . 195<br />
9.2.8 instantafs.achmod (Kurzform: achmod) . . . . . . . . . 196<br />
9.2.9 instantafs.afsdir . . . . . . . . . . . . . . . . . . . . . . 197<br />
9.2.10 instantafs.backup . . . . . . . . . . . . . . . . . . . . . 197<br />
9.2.11 instantafs.bind-update . . . . . . . . . . . . . . . . . . 197<br />
9.2.12 instantafs.calcrestore . . . . . . . . . . . . . . . . . . . 197<br />
9.2.13 instantafs.cellcheck . . . . . . . . . . . . . . . . . . . . 200<br />
9.2.14 instantafs.<strong>server</strong>check . . . . . . . . . . . . . . . . . . 200<br />
9.2.15 instantafs.getvoldirs . . . . . . . . . . . . . . . . . . . 201<br />
9.2.16 instantafs.homedir . . . . . . . . . . . . . . . . . . . . 201<br />
9.2.17 instantafs.kcheckpass . . . . . . . . . . . . . . . . . . . 201<br />
9.2.18 instantafs.kerberos . . . . . . . . . . . . . . . . . . . . 201<br />
9.2.19 instantafs.release (Kurzform: iarel) . . . . . . . . . . . 202<br />
9.2.20 instantafs.remote . . . . . . . . . . . . . . . . . . . . . 202<br />
9.2.21 instantafs.setquota . . . . . . . . . . . . . . . . . . . . 203<br />
9.2.22 instantafs.setup . . . . . . . . . . . . . . . . . . . . . . 203<br />
9.2.23 instantafs.tokenmgr . . . . . . . . . . . . . . . . . . . . 203<br />
9.2.24 instantafs.tool (Kurzform: iat) . . . . . . . . . . . . . . 203<br />
9.2.25 instantafs.usermgr . . . . . . . . . . . . . . . . . . . . 204<br />
9.2.26 instantafs.volgrep (Kurzform: volgrep) . . . . . . . . . 204<br />
9.2.27 instantafs.vs<strong>server</strong> . . . . . . . . . . . . . . . . . . . . 205<br />
9.2.28 instantafs.vtapes . . . . . . . . . . . . . . . . . . . . . 206<br />
9.3 Wichtige AFS-bezogene Kommandos . . . . . . . . . . . . . . 206<br />
10 Andere Betriebssysteme und Plattformen 209<br />
10<br />
10.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />
10.1.1 Allgemeines zu 32bit-Windows . . . . . . . . . . . . . 209<br />
10.1.2 Allgemeines zu NT-basierten Windows-Versionen . . . 209<br />
10.1.3 Windows 3.11 . . . . . . . . . . . . . . . . . . . . . . 210<br />
10.1.4 Windows 95, 98, ME . . . . . . . . . . . . . . . . . . . 210<br />
10.1.5 Windows NT 4.0 . . . . . . . . . . . . . . . . . . . . . 210<br />
10.1.6 Windows 2000, XP . . . . . . . . . . . . . . . . . . . . 210<br />
10.1.7 Windows XP 64bit . . . . . . . . . . . . . . . . . . . . 214<br />
10.1.8 Windows Vista . . . . . . . . . . . . . . . . . . . . . . 214<br />
10.2 andere Linux-Distributionen . . . . . . . . . . . . . . . . . . . 214
10.3 Fedora Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214<br />
10.4 andere Unix-Derivate (z.B. MacOSX) . . . . . . . . . . . . . . 215<br />
10.4.1 MacOS X . . . . . . . . . . . . . . . . . . . . . . . . . 215<br />
10.4.2 Irix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217<br />
10.4.3 FreeBSD, NetBSD . . . . . . . . . . . . . . . . . . . . 217<br />
10.4.4 OpenBSD . . . . . . . . . . . . . . . . . . . . . . . . . 217<br />
10.5 andere Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . 217<br />
10.5.1 OS/2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 217<br />
Glossar 220<br />
A Anhang 222<br />
Anhang 222<br />
A.1 SSH-Login-Varianten . . . . . . . . . . . . . . . . . . . . . . . 222<br />
A.2 Die PTDB als NSS-Dienst nutzen . . . . . . . . . . . . . . . . 224<br />
A.2.1 Prinzipielle Grenzen . . . . . . . . . . . . . . . . . . . 225<br />
A.3 Simple Regular Expressions . . . . . . . . . . . . . . . . . . . 225<br />
A.4 Namenskonventionen <strong>für</strong> Volumes . . . . . . . . . . . . . . . . 226<br />
A.5 NAT-geroutete AFS-Clients . . . . . . . . . . . . . . . . . . . . 229<br />
A.6 Ein AFS-zu-SMB-Gateway unter Linux . . . . . . . . . . . . . 230<br />
A.6.1 Probleme . . . . . . . . . . . . . . . . . . . . . . . . . 230<br />
A.6.2 Lösung mit verringerter Sicherheit . . . . . . . . . . . . 231<br />
A.7 Dateinamen und Pfade . . . . . . . . . . . . . . . . . . . . . . 232<br />
A.8 AFS-Schlüssel aus einer laufenden Zelle besorgen . . . . . . . . 235<br />
A.9 Löschen des AFS-Caches eines AFS-Clients . . . . . . . . . . . 235<br />
A.10 File<strong>server</strong> mit mehreren IP-Adressen im selben logischen Netzwerk<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235<br />
11
1 Einleitung<br />
http://instantafs.cbs.mpg.de<br />
1.1 Danksagungen<br />
Dieses Dokument soll dazu dienen, dem geneigten Leser das Netzwerkdateisystem<br />
AFS näherzubringen. Im Rahmen dieser Dokumentation sind keine Vorkenntnisse<br />
zu AFS oder Kerberos nötig, jedoch sollten man grundsätzliche Dinge<br />
über die Administration von Linux und über Netzwerkdateisysteme wissen.<br />
Diese <strong>Anleitung</strong> richtet sich an (zukünftige) <strong>Administratoren</strong> von AFS-Zellen.<br />
Mit Schritt-<strong>für</strong>-Schritt-<strong>Anleitung</strong>en und zugehörigen Erklärungen wird der<br />
Aufbau und der Betrieb einer AFS-Zelle erläutert. Es sind keine AFS- oder<br />
Kerberos-Vorkenntnisse nötig.<br />
Es existiert auch noch eine <strong>Anleitung</strong> <strong>für</strong> normale Benutzer. Beide Dokumente<br />
werden aktiv weiterentwickelt und können unter folgender URL bezogen werden:<br />
Ich möchte mich vor allem bei folgendem Personen bedanken:<br />
Sascha Kiesewetter : der seine privaten Computer in einer AFS-Zelle betreibt und mir dadurch<br />
zahllose Erkenntnisse darüber beschert hat, was an InstantAFS noch besser/benutzerfreundlicher/anders<br />
werden muss/musste. Durch ihn ist die<br />
Unterstützung multipler Zellen in InstantAFS überhaupt erst möglich gewesen.<br />
Dr. Helmut Hayd : der das Geld <strong>für</strong> dieses Projekt organisiert hat, indem er es auf einzigartige<br />
Weise versteht, Menschen von einer guten Sache zu überzeugen.<br />
Jana Weissfuss : die als meine Freundin viel Geduld aufbringt, während ich an InstantAFS<br />
programmiere und die sich mit AFS auseinandersetzt, damit ich Erfahrungen<br />
einer einfachen Benutzerin in meine Arbeit einfliessen lassen<br />
kann, obwohl sie eigentlich nur Texte schreiben und im Internet surfen<br />
will.<br />
Torsten Zumpf : der diese <strong>Anleitung</strong> tapfer gebugfixt hat, wo andere an meiner zweifelhaften<br />
Orthographie und meiner hochgradig kreativen Grammatik längst<br />
gescheitert wären.<br />
Norbert Gruener : dem Programmierer der AFS-Perl-Bindings.<br />
Istvan-Tibor Nebel : <strong>für</strong> die Vorlage zur Windows XP-Installationsanleitung.<br />
Mitarbeitern des MPI/CBS : darunter Dr. Christoph Preul, Dr. Marc Tittgemeyer, Tim Wetzel und Reiner<br />
Hertwig, die InstantAFS täglich benutzen und durch ihr Feedback zur<br />
stetigen Verbesserung beitragen.<br />
1.2 Vorraussetzungen<br />
InstantAFS baut auf der Debian GNU/Linux-Distribution auf - die Homepage<br />
gibt’s unter http://www.debian.org. Benötigt wird mindestens Debian<br />
Sarge 3.1, erfolgreich getestet wurde InstantAFS jedoch auch auf Debian Sid<br />
12
1.3 Was ist/macht InstantAFS <strong>für</strong> mich? 13<br />
1.3 Was ist/macht InstantAFS <strong>für</strong> mich?<br />
(Stand 06.07.2006). Es funktioniert auch auf Debian Woody 3.0, jedoch werden<br />
im Rahmen von InstantAFS dann keine 2.6er-Kernel und lediglich OpenAFS<br />
1.2 bereitgestellt.<br />
InstantAFS ist keine AFS-Implementation. Es ist eine Sammlung von ineinandergreifenden<br />
Skripten, Bibliotheken (vor allem Perl-Klassen), Konzepten,<br />
Dokumentationen und Konfigurationsfiles, die zusammengenommen das Aufsetzen<br />
und den Betrieb einer AFS-Zelle stark vereinfachen.<br />
Viele Routineaufgaben werden mittels InstantAFS automatisiert, auf Fehler und<br />
mögliche Fussangeln, die beim Umgang mit AFS auftreten können, wird hingewiesen.<br />
Hier ist eine Liste der InstantAFS-Features:<br />
• Es kommt ausschliesslich freie Software zum Einsatz. Finanziell ist es<br />
also z.B. kein Unterschied, ob man 1 oder 100 Computer InstantAFSifizieren<br />
will.<br />
• Automatische Setup-Routine: Nach Eingabe einiger Parameter (IP-<br />
Adressen, Rollen der beteiligten Rechner, ...) wird eine arbeitsfähige<br />
Zelle aufgesetzt.<br />
• Automatisches Backup: Ein Programmaufruf genügt, um einen Server<br />
einzurichten, der ein Backup auf Platte automatisch durchführt. An zentraler<br />
Stelle definiert eine Konfigurationsdatei, welche Daten (Muster von<br />
Volumes) zu sichern sind.<br />
• Skripte warnen, wenn bestimmte Daten (AFS-Volumes) nicht redundant<br />
genug gespeichert sind. Welche Daten wie redundant gespeichert sein<br />
müssen, ist konfigurierbar.<br />
• Halbautomatische Datenwiederherstellung nach schwerem Servercrash:<br />
Ein komplett zerstörter File<strong>server</strong> kostet den InstantAFS-Administrator<br />
nur ein müdes Lächeln. Skripte kümmern sich um die manuell getriggerte<br />
und automatisch durchgeführte Ersetzung von defekten File<strong>server</strong>n. Bei<br />
richtig verteilten Daten (siehe InstantAFS-administrations-<strong>Anleitung</strong>)<br />
kann z.B. der Zustand des Vortages unabhängig von der Datenmenge in<br />
kürzester Zeit (Sekunden!) wiederhergestellt werden.<br />
• Eine InstantAFS-Zelle bringt eine einfache interaktive Benutzerverwaltung<br />
per ncurses gleich mit - kein LDAP-/NIS- oder NIS+-Server ist zu<br />
konfigurieren. Trotzdem ist die Integration in bestehende Benutzermanagement-<br />
Systeme leicht möglich, da alle InstantAFS-Funktionen per Kommandozeile<br />
ausgeführt werden können.<br />
• Das Kerberos-basierte RPC-Konzept acall ermöglicht Funktionsaufrufe<br />
normaler Benutzer auf Servern. Damit ist die kontrollierte Zuweisung von<br />
Privilegien an Benutzer ohne zusätzliche Einträge in den Superuserlisten<br />
von AFS-Servern möglich.<br />
Hinweise:<br />
– Durch dieses Konzept ergibt sich z.B. die Möglichkeit, auf sichere<br />
Weise Volumes durch einfache Benutzer anlegen zu lassen.<br />
– Zahlreiche andere acall-Funktionen (z.B. Setzen von Quotas, Synchronisation<br />
von Volumes, User-Management, ...) werden bereits<br />
mitgeliefert und konfiguriert.
14 1 Einleitung<br />
1.4 Ziele von InstantAFS<br />
1.5 Konventionen<br />
– Neue Funktionen sind leicht in Form von Skripten (vergleichbar<br />
dem CGI bei Web<strong>server</strong>n) implementierbar.<br />
• Es sind keine selbstdurchzuführenden Dirty Patches nötig - InstantAFS<br />
und alle Komponenten, die nicht per Default in Debian enthalten sind,<br />
werden als Debian-Softwarepakete 1 incl. Quellcode zur Verfügung gestellt.<br />
Ziele des InstantAFS-Projektes sind folgende:<br />
• Der Betrieb einer AFS-Zelle soll soweit wie möglich vereinfacht und automatisiert<br />
werden.<br />
• Das Aufsetzen einer AFS-Zelle soll kinderleicht gemacht werden. Die<br />
Installation ist ohne 2 jegliches AFS- und Kerberos-Knowhow möglich.<br />
Folgende Notation wird in diesem Dokument benutzt:<br />
Formatierung von Beispiel<br />
Dateinamen/Pfadnamen /afs/cbs.mpg.de/user<br />
Shell-Kommando user@host>ls -la<br />
Shell-Kommando als root root@host>reboot<br />
Shell-Kommando als Zellensuperuser admin@afs>vos lock root.cell<br />
Shell-Kommando mit Parametererläuterumg admin@afs>vos lock Volume<br />
Shell-Kommando mit Beispielen ernie@afsclient> echo ∼ernie<br />
Ausgabe eines Shell-Kommandos E: Fehler aufgetreten<br />
Eine Zeile aus einer Datei workgroup = CBS.MPG.DE<br />
Ein Debian-Paket instantafs-client .deb<br />
Eine C-Funktion (i.d.R. Kernel- oder Libc) stat()<br />
Ein Kerberos-Principal (Dienst oder Benutzer) afs@CBS.MPG.DE<br />
Ein AFS-Volume root.cell<br />
Muss in einem Kommando eine Partition angegeben werden, so ist damit<br />
immer die Zeichenkette (i.d.R. nur ein Buchstabe) hinter dem /vicep des Pfadnamens<br />
gemeint, der zu einer bestimmten AFS-Serverpartition führt.<br />
Der Begriff Volume wird im Zusammenhang mit AFS <strong>für</strong> zwei verschiedene<br />
Dinge verwendet, was in einigen Fällen verwirrend ist. In dieser Dokumentation<br />
wird deshalb <strong>für</strong> einzelne Kopien eines Volumes (Backup-Volume, RW-Volume,<br />
RO-Volume) der Begriff “Instanz” benutzt.<br />
Die Meldungen der Skripte, die im Zusammenhang mit InstantAFS entwickelt<br />
wurden, enthalten meist vorangestellte Wichtigkeits-Kennzeichen - z.B. “E: ”<br />
in<br />
E: Invalid AFSID/UID.<br />
Diese haben folgende Bedeutungen:<br />
1 Plattform i386<br />
2 Selbstverständlich sollte man sich jenes Knowhow unbedingt aneignen, wenn man eine AFS-<br />
Zelle dauerhaft betreiben will.
1.5 Konventionen 15<br />
Kennzeichen Bedeutung<br />
D Debug - Ein weiterführender Hinweis, der i.d.R. nur im Debug-<br />
Mode des Skriptes angezeigt wird<br />
E Error - Ein schwerer Fehler, der das Skript zum Abbruch zwingt<br />
I Information - Ein Hinweis (kein Fehler)<br />
V Verbose - Ein weiterführender Hinweis, der nur im - -verbose<br />
oder Debug-Mode (2x - -verbose) eines Skriptes angezeigt wird<br />
W Warning - Ein aufgetretener Fehler, der jedoch nur minderschweren<br />
Einfluss auf den weiteren Ablauf hat
2 Technische Grundlagen<br />
2.1 AFS in wenigen Worten<br />
2.2 Besonderheiten von AFS<br />
Das AFS ist ein verteiltes Netzwerkdateisystem, das auf globalen Betrieb<br />
ausgelegt ist. Es ist in Einheiten - genannt Zellen (vergleichbar mit Windows-<br />
Domänen) - eingeteilt, die unabhängig voneinander verwaltet werden. Zu jeder<br />
Zelle gehören Benutzer, ein oder mehrere Datenbank<strong>server</strong>, ein oder mehrere<br />
File<strong>server</strong>, AFS-Client-Computer sowie Volumes. Alle diese Objekte gehören<br />
jeweils zu genau einer AFS-Zelle.<br />
Auf den File<strong>server</strong>n befinden sich jeweils eine oder mehrere Datenpartitionen.<br />
Auf diesen Partitionen liegen Instanzen von Volumes. Welche Instanz wo liegt,<br />
ist zentral in den Datenbank<strong>server</strong>n verzeichnet.<br />
Volumes lassen sich über Mountpoints mineinander verknüpfen und spannen<br />
dadurch den AFS-Namensraum auf. Ein spezielles Volume wird unter /afs in<br />
das VFS aller AFS-Client-Computer gemountet. Dadurch ist Filesystemzugriff<br />
auf das AFS an allen Clients einheitlich möglich.<br />
Die Authentifikation in einer AFS-Zelle wird (wenn InstantAFS benutzt wird)<br />
durch eine Kerberos5-Realm realisiert, zu der mindestens ein Kerberos-KDC<br />
gehört. Eine Kerberos-Realm kann auch <strong>für</strong> mehrere AFS-Zellen verantwortlich<br />
sein.<br />
AFS ist ein globales Dateisystem. Es setzt sich aus AFS-Zellen (siehe 3.4, Seite<br />
38) zusammen, von denen jede unabhängig von allen anderen administriert<br />
werden kann. Jeder Computer gehört zu maximal einer Zelle. Der Name einer<br />
Zelle entspricht üblicherweise dem Namen der jeweiligen DNS-Domain,<br />
wobei jedoch hierarchische Strukturen zwischen den Zellen nur scheinbar existieren<br />
1 . Auf Daten im AFS kann man ausschließlich über AFS-Clients, eine<br />
freie Software, die <strong>für</strong> alle gängigen Betriebssysteme verfügbar ist, zugreifen.<br />
Die Metadaten werden über das AFS-Tool vos bearbeitet.<br />
An dieser Stelle seien die wichtigsten Vorteile von AFS genannt:<br />
• Das klassische AFS lässt sich mit einigen wenigen Kommandofamilien<br />
(bos, fs, pts, vos, backup, kas) komplett steuern (siehe 2.7.3, Seite<br />
23). Durch die Integration von Kerberos5 entfällt der kas-Befehl, jedoch<br />
sind noch einige weitere Befehle nötig (siehe 9.3, Seite 206).<br />
• AFS beherrscht die Replikation auf Volume-Ebene (siehe 2.6, Seite 21).<br />
Die Replikation muss (unabhängig von Zugriffen auf das Dateisystem)<br />
ausgelöst werden - es handelt sich nicht um Echtzeit-Replikation.<br />
• Autorisation von Filesystemzugriffen erfolgt im AFS über ACLs (siehe<br />
3.7.3, Seite 51). Die ACLs müssen auf den Servern nicht auf Filesystemebene,<br />
wie unter UNIX, durchgesetzt werden. Sie werden als Metadaten<br />
“irgendwie” vom File<strong>server</strong> gespeichert. Auf welche Weise das geschieht,<br />
muss den AFS-Client nicht interessieren.<br />
1 Die Zelle cbs.mpg.de ist vollkommen unabhängig von der Zelle mpg.de, jedoch kann die DNS-<br />
Domain cbs.mpg.de nur dann global erreichbar sein, wenn der Administrator des mpg.de-DNS-<br />
Servers das erlaubt.<br />
16
2.2 Besonderheiten von AFS 17<br />
• Der Administrator braucht sich idealerweise nicht darum zu kümmern,<br />
auf welchem Server welche Daten liegen. Man kann Programme damit<br />
beauftragen, automatisch Daten zwischen Servern zu verschieben - z.B.<br />
<strong>für</strong> Lastverteilung (siehe 6.11, Seite 132). Werden Daten im laufenden<br />
Betrieb von Server zu Server verschoben, so kann ein Nutzer, der per<br />
AFS-Client darauf zugreift, ohne Ausfälle weiterarbeiten - auch schreibend.<br />
Würde er direkt auf die Partition eines Servers zugreifen, könnte er<br />
das nicht - der Server ändert sich ja im Laufe der Aktion.<br />
• Ein Backup-Konzept ist in AFS bereits integriert. Man braucht dazu auch<br />
nicht unbedingt DLT-Laufwerke oder Bänder - viel Plattenplatz 2 reicht<br />
aus.<br />
• AFS setzt einen Cache auf Clientseite (deshalb wird der AFS-Client auch<br />
Cachemanager genannt) ein (siehe 3.5, Seite 39). Das entlastet die benutzten<br />
Server und spart Bandbreite, was vor allem dann hilfreich ist,<br />
wenn zwischen Client und Server dünne Leitungen liegen.<br />
• AFS benutzt feste UDP-Portnummern, keine Portmapper. Eine Firewall<br />
lässt sich leicht entsprechend konfigurieren (siehe 3.6, Seite 44).<br />
• Reguläre Benutzer können im AFS selbstständig Benutzergruppen bilden<br />
und verwalten (siehe 3.7.3.4, Seite 54).<br />
• Mit AFS werden Daten, auf die hauptsächlich lesend zugegriffen wird<br />
(RO-Daten, z.B. Executables) und Daten, die oft verändert werden (RW-<br />
Daten, z.B. Homedirectories), unterschiedlich behandelt, so dass Lastverteilung<br />
(siehe 6.11, Seite 132) und Ausfallsicherheit (siehe 5.1, Seite 98)<br />
jeweils optimal realisiert sind.<br />
Natürlich gibt es auch einige Schattenseiten:<br />
• Sicherheit kostet Zeit. Da alle Pakete signiert (bei entsprechender Einstellung<br />
auch verschlüsselt) werden, kann AFS prinzipiell nicht so schnell<br />
sein, wie ein unsicher arbeitendes Netzwerkdateisystem (z.B. NFS in der<br />
Grundeinstellung).<br />
• Das Callback-Prinzip (siehe 3.5, Seite 39) macht den Einsatz von AFS-<br />
Clients, die von einem privaten Netzwerk hinter einem Router mit<br />
Network Address Translation auf öffentlich erreichbare Server zugreifen,<br />
schwierig (siehe A.5, Seite 229).<br />
• Der AFS-Client ist nicht <strong>für</strong> so große Speichermengen ausgelegt, wie sie<br />
heute üblich sind und wirkt deshalb als Flaschenhals.<br />
• Der Linux-AFS-Client benötigt ein Kernelmodul (openafs-modulesxxx<br />
.deb ). Das Kernelmodul ist relativ empfindlich im Bezug auf falsche<br />
Handhabung. Das Start/Stop-Script /etc/init.d/openafs-client des Paketes<br />
openafs-client .deb berücksichtigt solche Eigenheiten.<br />
• Unix-Gruppen mit GIDs im Bereich von 0x7F 00 bis 0xBF 00 sollten 3<br />
nicht benutzt werden, wenn auf AFS-Clients im selben Netz PAGs (siehe<br />
3.7.2.3, Seite 49) zum Einsatz kommen, was sehr wahrscheinlich ist.<br />
• AFS unterstützt keine echten Byte-Range-Locks. Der Windows-Client<br />
simmuliert ab Version 1.4.1rc2 allerdings Byte-Range-Locks und setzt<br />
sie auf File-Locks um.<br />
2 Diese Dokumentation befasst sich ausschließlich mit dem Backup auf Platten.<br />
3 Einem Benutzer ist es u.U. möglich, sie unerlaubt in diese Gruppen einzuschleichen.
18 2 Technische Grundlagen<br />
2.3 Festlegungen und Einschränkungen<br />
• AFS-File<strong>server</strong> reagieren empfindlich, wenn Wirtspartitionen volllaufen<br />
- vor allem, wenn gerade eine RW-Instanz geklont wird (siehe 3.1.4, Seite<br />
29). InstantAFS bietet Tools, die alle File<strong>server</strong> überwachen und im<br />
Gefahrenfall Alarm schlagen können (siehe 9.2.13, Seite 200).<br />
• Ein logischer AFS-Server nur zu genau einer Zelle gehören. Virtualisierung<br />
(z.B. per Xen) kann Abhilfe schaffen.<br />
• File-Zugriffe auf Kernel-Ebene auf AFS-Objekte, die nicht anonym benutzbar<br />
sind, funktionieren nicht. Das betrifft z.B. Loop-Mounts unter<br />
Linux oder das Mounten von .dmg-Dateien unter MacOSX.<br />
Es sind einige Programme bekannt, die im Zusammenhang mit AFS Probleme<br />
haben. Unter folgender URL gibt’s dazu Informationen:<br />
http://fbo.no-ip.org/cgi-bin/twiki/view/Instantafs/<br />
ProgsHateAfs<br />
Folgende Festlegungen werden <strong>für</strong> InstantAFS - also diese Dokumentation, sowie<br />
die InstantAFS-Libraries und -Skripte getroffen:<br />
• Als AFS-Implementierung wird ausschließlich OpenAFS unterstützt. Es<br />
existieren jedoch weitere AFS-Varianten.<br />
• Zur Authentifikation kommt ausschließlich MIT-Kerberos5 zum Einsatz.<br />
Heimdal-Kerberos sowie Authentifikation per ka<strong>server</strong> werden nicht<br />
unterstützt. Es ist prinzipiell auch möglich, andere Kerberos-Versionen zu<br />
benutzen. Die Entscheidung zugunsten von MIT-Kerberos5 fiel, weil es<br />
die zukunftsträchtigste Implementierung ist und weil es bereits offizielle<br />
Debian-Pakete <strong>für</strong> dessen OpenAFS-Integration gibt.<br />
• Die Namen von Zelle, DNS-Domain und Realm müssen gleich sein, abgesehen<br />
davon, dass die komplett Realm groß, die anderen Namen jedoch<br />
vollständig klein geschrieben werden.<br />
• Als Server werden ausschließlich Linux-Systeme unterstützt. Dabei<br />
wird von Debian GNU/Linux 3.1 Sarge ausgegangen. Auch nachfolgende<br />
Debian-Ditributionen sollten kein Problem darstellen - unter Sid<br />
funktioniert es ebenfalls (Stand 13.10.2005). Clients können trotzdem<br />
unter anderen Betriebssystemen (andere Linux-Distributionen, andere<br />
Unix-Betriebssysteme sowie diverse Windows-Versionen) laufen.<br />
• Es kommen ausschließlich namei-File<strong>server</strong> zum Einsatz (siehe 3.8.2,<br />
Seite 57).<br />
• Die Kerberos5-Passwörter der Benutzer lassen sich nicht per kpasswd<br />
ändern. Diese Einschränkung ist nötig, um die Synchronisation mit anderen<br />
Datenbanken, die Passwörter speichern, sicherzustellen.<br />
• Clients ermitteln die Liste der Datenbank<strong>server</strong> von AFS-Zellen nicht<br />
per CellServDB-File, sondern erhalten die Adressen der AFS-DB-Server<br />
über das DNS.<br />
• Die erstellte Zelle ist nicht automatisch global bekannt - man muß bei<br />
Bedarf selbst da<strong>für</strong> sorgen. Dadurch, dass einige Max-Planck-Institute<br />
NAT-Router 4 benutzen und so die File<strong>server</strong> im jeweiligen Institutsnetz<br />
nicht weltweit erreichbar sind, hatte das keine Priorität.<br />
4 Es ist aufwändig AFS-Server und Clients zu benutzen, die durch NAT-Router getrennt sind.
2.4 Anders als unter UNIX 19<br />
2.4 Anders als unter UNIX<br />
• Pro Backup-Server kommt das InstantAFS-Backup-Konzept nur mit einem<br />
Tape-Controller-Prozess klar. AFS ist jedoch in der Lage mehrere<br />
davon pro Host zu verwalten.<br />
AFS unterscheidet sich in einigen Punkten von den klassischen UNIX-<br />
Filesystemen. Diese sollte man kennen, da es u.U. merkwürdige Effekte bei<br />
Programmen gibt, die sich auf bestimmte Eigenschaften des Filesystems<br />
verlassen, diese aber im AFS nicht bekommen.<br />
AFS benutzt im Gegensatz z.B. zu NFS eine eigene Methode, um Benutzernamen<br />
auf AFS-IDs abzubilden. Die AFSID wird vom AFS ähnlich der UID im<br />
normalen Unix-Dateisystem benutzt, um Dateien ihren Besitzern zuzuordnen.<br />
Die stat()-Funktion liefert innerhalb des AFS-Namensraumes keine UID,<br />
sondern jeweils eine AFSID zurück. Um z.B. mit ls sinnvolle Anzeigen zu erhalten,<br />
müssen die AFSIDs und die UIDs der Clients übereinstimmen. Da AFS<br />
ein globales Filesystem ist, kann das niemals perfekt funktionieren (siehe A.2.1,<br />
Seite 225).<br />
Die AFS-PT-Datenbank (PTDB) enthält die Loginnamen, die AFSID sowie<br />
die Gruppenzugehörigkeiten aller AFS-Nutzer, stellt jedoch keine Informationen<br />
wie Homedirectories oder Login-Shells zur Verfügung. Deshalb müssen<br />
diese aus einer anderen Benutzerdatenbank (z.B. NIS oder LDAP, es geht<br />
aber auch jeder andere NSS-Dienst) bezogen werden. Benutzt man das Paket<br />
libnss-ptdb .deb (siehe A.2, Seite 224) <strong>für</strong> die Namensauflösung, spart man<br />
diese zusätzliche Datenbank ein und kann auf eine Synchronisation mit der<br />
AFS-Datenbank verzichten.<br />
Die Datenbank des AFS wird durch spezielle Serverprozesse verwaltet und automatisch<br />
auf mehrere Server verteilt. Diese Datenbank<strong>server</strong> synchronisieren<br />
sich untereinander, so dass die Datenbank auch bei Netzunterbrechungen nutzbar<br />
bleibt.<br />
AFS bricht mit einigen Prinzipien klassischer Unix-Filesysteme. Hier eine<br />
Übersicht:<br />
• AFS stellt keine Shares/Exports zur Verfügung. Es ist also nicht möglich,<br />
die Wirtspartition der File<strong>server</strong> einfach mit einem alternativen Netzwerkdateisystem<br />
(NFS,Samba,...) zur Verfügung zu stellen.<br />
Faustregel: Auf Daten im AFS kann nur mit AFS-Tools (OpenAFS-<br />
Client, vos, ...) zugegriffen werden.<br />
Lösung: Server <strong>für</strong> andere Netzwerkdateisystem-Protokolle wie Samba<br />
(siehe A.6, Seite 230) können auf AFS-Clients laufen und so den<br />
AFS-Namensraum exportieren.<br />
• AFS kennt keine Gerätedateien, Sockets oder Pipes. Braucht man solche<br />
speziellen Objekte, muss man auf symbolische Links zurückgreifen, die<br />
dann auf ein anderes Filesystem zeigen. Das hat z.B.Konsequenzen <strong>für</strong><br />
Programme, die im Homedirectory eines AFS-Benutzers solche Objekte<br />
anlegen wollen. Beispiele <strong>für</strong> solche Programme sind<br />
– kile - der KDE-LaTeX-Editor<br />
– comodo - eine Skript-Entwicklungsumgebung der Firma Active-<br />
State<br />
• ACLs die AFS zur Autorisation von File-Zugriffen benutzt, sind weder<br />
Posix- noch NTFS-kompatibel. Klassische Unix-Modebits werden <strong>für</strong>
20 2 Technische Grundlagen<br />
2.5 Grenzen<br />
user@host>fs lq Verzeichnisname<br />
AFS- Dateisystemobjekte gespeichert, haben jedoch im AFS besondere<br />
Bedeutungen (siehe 3.7.3.3, Seite 52).<br />
• Autorisiert wird immer auf Verzeichnisebene. Die ACLs sind also<br />
zwangsläufig <strong>für</strong> alle Dateien in einem Verzeichnis gleich. Die ACLs<br />
werden nach unten vererbt.<br />
• Harte Links auf eine Datei müssen sich unter AFS immer im selben Verzeichnis<br />
befinden. Diese Einschränkung wurde eingeführt, da AFS-ACLs<br />
nicht an Dateien gebunden werden können. Die Zugriffsrechte <strong>für</strong> eine<br />
Datei mit harten Links in mehreren Verzeichnissen wären andernfalls<br />
u.U. nicht eindeutig.<br />
• Der AFS-Namensraum muss nicht baumförmig sein - er kann Zyklen<br />
enthalten.<br />
• Ein Benutzer definiert sich nicht durch seine UID und die Unix-Gruppen,<br />
in denen er Mitglied ist, sondern durch die im AFS-Token gespeicherte<br />
AFSID und die AFS-Gruppen, deren Zusammensetzung in einer AFS-<br />
Datenbank (PTServer) gespeichert ist 5 .<br />
• Die Benutzung von chown() (z.B. in den Kommandos chown oder<br />
tar) ist im AFS nur <strong>für</strong> Mitglieder der Gruppe system:administrators<br />
möglich, nicht <strong>für</strong> lokale Superuser.<br />
• Die Ermittlung des verfügbaren Speicherplatzes auf einem AFS-File<strong>server</strong><br />
ist nicht mit der statfs()-Funktion (z.B. von df benutzt) möglich.<br />
Stattdessen muss das Kommando<br />
benutzt werden, um den freien Speicher in einem bestimmten Verzeichnis<br />
innerhalb des AFS zu ermitteln.<br />
• Quotas werden unter AFS pro Volume (siehe 2.6, Seite 21) und nicht pro<br />
Benutzer oder pro Benutzergruppe definiert. Da üblicherweise jeder Benutzer<br />
unter AFS ein eigenes Homedirectory-Volume erhält, ist das unkritisch.<br />
Für projektorientiertes Arbeiten ist diese Art der Quotabestimmung<br />
sehr hilfreich.<br />
• AFS aktualisiert die atime von Files nicht. Da AFS als globales Filesystem<br />
mit Cache ausgelegt ist, wäre das nicht sinnvoll.<br />
• Files ohne harte Links sind unter AFS nicht möglich. Allerdings emuliert<br />
der AFS-Client eine solche Funktionalität ähnlich dem NFS-Client.<br />
Löscht man eine Datei während sie auf dem selben Client noch geöffnet<br />
ist, so benennt der Cache-Manager diese um in .afs + eine zufällige<br />
Zeichenfolge und löscht sie, sobald sie geschlossen wird.<br />
Hier einige Zahlen zu den derzeitigen Begrenzungen, die sich aus den von AFS<br />
benutzten Datenstrukturen ergeben:<br />
• Speicher wird unter AFS in Blöcken von je 1024 Byte verwaltet.<br />
• Dateien sind bei OpenAFS 1.2 auf eine Maximalgröße von 2 31 − 1 Byte<br />
(knapp 2GByte) beschränkt. OpenAFS 1.3 hebt diese Beschränkung auf.<br />
Das gilt jedoch nicht <strong>für</strong> den Windows-Client (Stand: 03.06.2005).<br />
5 Dadurch sind dynamische Gruppenmitgliedschaften, wie sie z.B. das PAM-Modul libpam_group.so<br />
ermöglicht, zwar nicht ausgeschlossen, sie bewirken jedoch im AFS-Namespace<br />
keine veränderten Rechte.
2.6 Grundlegendes zu Volumes 21<br />
2.6 Grundlegendes zu Volumes<br />
• Pro Verzeichnis stehen maximal 64435 Verzeichniseinträge zur Verfügung<br />
— solange alle Dateinamen kürzer als 15 Zeichen sind. Genaueres<br />
zur Maximalanzahl von Verzeichniseinträgen gibt’s unter 8.4.2 auf Seite<br />
176.<br />
• Volumes sind auf eine Maximalgröße von 2 31 − 1 Blöcke (knapp 2 Ti-<br />
Byte) beschränkt. Angeblich sind auch 4 TiByte möglich, das konnte jedoch<br />
mangels einer so grossen Partition nicht ausprobiert werden.<br />
• Die Größe einer Datenpartition eines OpenAFS-namei-File<strong>server</strong>s (siehe<br />
3.8.2, Seite 57) ist auf 2 TiByte begrenzt.<br />
• Der OpenAFS-File<strong>server</strong> unterstützt maximal 255 Datenpartitionen pro<br />
AFS-File<strong>server</strong>.<br />
• AFS unterstützt ein Maximum von 254 File<strong>server</strong>n.<br />
• Jedes Keyfile darf maximal 10 Schlüsselversionen enthalten. Das<br />
schränkt die Anzahl parallel unterstützter nicht-syncronisierter Kerberos-<br />
Realms ein, die nicht per Vertrauenspfad vernetzt sind.<br />
• OpenAFS unterstütz ein Maximum von insgesammt 13 in der VLDB registrierten<br />
Volume-Instanzen. Abzüglich RW- und Backup-Instanz ergibt<br />
sich ein Maximum von 11 RO-Instanzen.<br />
• Volume-Namen dürfen die Zeichen a-z, A-Z, 0-9, sowie die Sonderzeichen<br />
., - und _ enthalten. Die Länge ist auf 22 Zeichen begrenzt. Diese<br />
Grenze bezieht sich auf die Namen der jeweiligen RW-Instanz - die RW-<br />
Instanz volume- -mit-22-Zeichen kann also durchaus eine RO-Instanz<br />
volume- -mit-22-Zeichen.readonly besitzen. Achtung: Wenn man vorhat,<br />
das AFS-Backup-System zu benutzen, sollte man sich unbedingt auf 21<br />
Zeichen beschränken.<br />
• Zu jeder Zelle können minimal ein und maximal maximal fünf Datenbank<strong>server</strong><br />
gehören. Damit sind Datenbank<strong>server</strong> gemeint, die in der<br />
Lage sind, an dem Update-Prozess teilzunehmen. Zusätzlich können<br />
Readonly-Kopien von Datenbank<strong>server</strong>n im Netz gehalten werden.<br />
• Die PTS-IDs von AFS-Benutzern sind vorzeichenlose 31-bit-Integer.<br />
Man sollte tunlichst die Benutzung folgender IDs vermeiden:<br />
1 : Auch wenn man das theoretisch ändern kann, wird diese PTS-ID<br />
praktisch immer <strong>für</strong> den Zellensuperuser (admin) benutzt.<br />
32768-65536 : Hier liegen einige hart codierte PTS-IDs, die z.B. <strong>für</strong> anonyme Benutzer<br />
reserviert sind.<br />
Ansonsten ist alles bis 2147483647 erlaubt.<br />
• Die ACLs eines Verzeichnisses können jeweils maximal 20 Einträge enthalten.<br />
• AFS unterstützt kein IPv6 sondern ausschliesslich IPv4.<br />
Volumes sind logische Container, Verwaltungseinheiten in AFS. Für den Anfang<br />
ist es hilfreich, sich darunter eine Art Plattenpartition - allerdings mit vom<br />
Administrator im laufenden Betrieb anpassbarer Größe - vorzustellen. Ein Volume<br />
kann Daten in Form normaler Files, Verzeichnisse sowie Verweise auf<br />
andere Volumes enthalten. Jedes Volume besitzt zumindest eine Ausprägung<br />
- die RW-Instanz. Name sowie ID des Volumes sind mit Namen und ID der
22 2 Technische Grundlagen<br />
2.7 AFS-Kommunikation oberhalb Layer 4<br />
2.7.1 AFS-Clients<br />
RW-Instanz identisch. Unter 3.1, Seite 27 werden die verschiedenen Instanzen<br />
genauer erläutert.<br />
Volumes werden vom AFS-Client dynamisch ineinander gemountet - die<br />
Anwendung bemerkt nicht, wenn sie von einem Volume zum nächsten wechselt.<br />
Die Volumes werden wie Partitionen über spezielle Einstiegspunkte, die<br />
Volume-Mountpoints, zu einem übergeordneten Filesystem zusammengefügt.<br />
Ein Volume-Mountpoint ist vergleichbar mit einem symbolischen Link, der<br />
einem Verzeichnis ein Volume zuordnet. Volume-Mountpoints (siehe 3.2, Seite<br />
32) müssen einmalig mit einem speziellen AFS-Befehl angelegt werden, wobei<br />
lediglich der Name (oder die ID) des Zielvolumes definiert wird. Trifft der<br />
Client auf einen solchen Mountpoint ermittelt er selbstständig einen File<strong>server</strong>,<br />
auf dem die gesuchte Instanz eines Volumes zu finden ist. Dadurch ist es möglich,<br />
Volumes beliebig in der Zelle zu verschieben - sie sind nicht an bestimmte<br />
Server gebunden wie z.B. NFS-Exports oder Samba-Shares.<br />
Eine weitere Ausprägung eines Volumes ist die Readonly-Instanz. Von jedem<br />
Volume können maximal 11 solcher RO-Instanzen (Kopien der RW-Instanz) in<br />
der Zelle existieren, wodurch sich Lastverteilung und Ausfallsicherheit realisieren<br />
lassen. Mittels eines AFS-spezifischen Befehls wird der Inhalt der RW-<br />
Instanz mit den RO-Instanzen abgeglichen. Das passiert sequenziell. Multicasts,<br />
etc. zur Beschleunigung des Abgleichs sind nicht vorgesehen.<br />
Ein spezielles Volume namens root.afs 6 wird von jedem AFS-Client unter /afs<br />
statisch gemountet. Andere Volumes erreicht man, indem in diesem Volume<br />
Volume-Mountpoints (siehe 3.2, Seite 32) vom Administrator bei der Erstkonfiguration<br />
der Zelle angelegt werden, die auf andere Volumes zeigen.<br />
Die Volume-Mountpoints werden intern als eine spezielle Form von symbolischen<br />
Links verwaltet, die nur der AFS-Client auswertet - <strong>für</strong> AFS-Server haben<br />
die Mountpoints keine besondere Bedeutung. Volume-Mountpoints können<br />
auch auf Volumes anderer Zellen zeigen und diese dadurch in den eigenen Namensraum<br />
einbinden. Durch solche Links wird das AFS zu einem globalen Filesystem.<br />
Üblicherweise besteht eine AFS-Zelle aus vielen (je nach Größe aus<br />
vielen tausend) Volumes, die durch Mountpoints zu einem großen Filesystem<br />
verbunden sind.<br />
Die eigentlichen Dateien, Verzeichnisse und symbolischen Links werden in den<br />
Volumes zusammen mit den Volume-Mountpoints gespeichert. Normale Anwendungen<br />
können nicht zwischen Volume-Mountpoints und Verzeichnissen<br />
unterscheiden.<br />
Die Möglichkeit, Volumes beliebig untereinander zu vernetzen, ist auch der<br />
Grund da<strong>für</strong>, dass im AFS Zyklen auftreten können. Besitzt z.B. ein Volume<br />
a einen Volume-Mountpoint, der auf Volume a zeigt, ist bereits ein einfacher<br />
Zyklus vorhanden. Ein Zyklus kann sich natürlich auch über mehrere Volumes<br />
erstrecken (z.B.: a → b → c → a). Ob das eine gute Idee ist, soll hier lieber<br />
nicht diskutiert werden.<br />
AFS-Clients müssen 7 - um fehlerfrei hochfahren zu können - Zugriff auf mindestens<br />
einen AFS-Datenbank-Server und einen File<strong>server</strong> mit einer Kopie des<br />
AFS-Rootvolumes haben.<br />
6 in dieser Dokumentation wird es als AFS-Rootvolume bezeichnet<br />
7 ausgenommen Clients, mit der Startoption -dynroot (siehe 3.5.6.3, Seite 44)
2.7 AFS-Kommunikation oberhalb Layer 4 23<br />
2.7.2 Datenbank<strong>server</strong><br />
2.7.3 AFS-Kommando-Familien<br />
Durch Anfrage ans DNS 8 ermittelt der AFS-Client die AFS-DB-Server der Zelle.<br />
DNS ist nötig, /etc/hosts oder ein host-Map im NIS reichen nicht. Durch eine<br />
weitere Anfrage an einen AFS-DB-Server 9 erfährt der Client, auf welchen File<strong>server</strong>n<br />
eine Kopie des AFS-Rootvolumes zu finden ist. Das root-Volume wird<br />
anschließend statisch an /afs gemountet. Der AFS-Client versteift sich dabei<br />
nicht auf einen bestimmten File<strong>server</strong>. Fällt der File<strong>server</strong> aus, der eine Kopie<br />
eines bestimmten Volumes zur Verfügung stellt, benutzt der AFS-Client einen<br />
anderen. Die Anwendung merkt davon - abgesehen von einer angemessenen<br />
(zur Compilierzeit fest einprogrammierten) Wartezeit - nichts.<br />
Achtung: Die Volumes werden nicht in Echtzeit repliziert (siehe 3.1, Seite 27).<br />
Mountpoints in Volumes enthalten Verweise auf andere Volumes. Ein erster Zugriff<br />
auf einen solchen Mountpoint generiert eine Anfrage an einen der AFS-<br />
DB-Server. Auf das jeweilige Volume wird dann im Hintergrund zugegriffen -<br />
die Anwendung merkt nichts vom Eintritt 10 in ein neues Volume.<br />
Die AFS-Datenbank<strong>server</strong> kommunizieren untereinander. Unter anderem führen<br />
sie in regelmäßigen Abständen eine Wahl (siehe 3.3.2, Seite 36) durch, um<br />
einen Server zu bestimmen, der als Sync-Site berechtigt ist, Änderungen an der<br />
Datenbank durchzuführen. Außerdem werden die auf der Sync-Site (und nur<br />
dort) durchgeführten Änderungen an der Datenbank sofort auf alle erreichbaren<br />
anderen Datenbank<strong>server</strong> übertragen.<br />
AFS kennt mehrere Kommando-Familien mit zahlreichen Unterkommandos,<br />
die ggf. auch eine Netzwerkkommunikation auslösen:<br />
bos : Die bos-Kommandos kontrollieren die zahlreichen Serverprozesse auf<br />
AFS-Servern<br />
fs : Dieses Kommandos dienen der Kommunikation mit dem Cachemanager<br />
(also dem AFS-Client) und der Namensänderung im Filesystem. fs kommuniziert<br />
nicht direkt mit Servern im Netzwerk, sondern überlässt das<br />
dem Cachemanager.<br />
vos : Mit vos manipulierverwaltet man Volumes. Viele Unterkommandos setzen<br />
vorraus, dass der Rechner, auf dem sie benutzt werden, die Sync-Site<br />
der Volume-DB (VLDB) erreichen kann.<br />
pts : Die pts-Kommandos verwalten die Zugriffsrechte auf Volumes, indem<br />
sie Einträge in der Protection-DB machen.<br />
backup : Die backup-Kommandos kommunizieren mit einem beliebigen DB-<br />
Server, um Daten aus der Backup-DB (BDB) auszulesen. Zum Ändern<br />
von Daten benötigt der entsprechende Rechner Kontakt zur Sync-Site<br />
der BDB.<br />
kas : Die kas-Kommandos kommen unter InstantAFS nicht zum Einsatz.<br />
Ein Kommando beginnt immer mit der Kommando-Familie gefolgt von einem<br />
der meist zahlreichen Unterkommandos. Dieses kann auch abgekürzt werden.<br />
8 Es ist möglich, die IP-Adressen der DB-Server dem AFS-Client in einem File (CellServDB) zur<br />
Verfügung zu stellen. Bei vielen Rechnern ist das aber unpraktikabel.<br />
9 Welcher genau kontaktiert wird, hängt von einem Client-internen Ranking aller bekannten Datenbank<strong>server</strong><br />
ab. Ein ähnliches Ranking existiert auch <strong>für</strong> alle (bekannten) File<strong>server</strong>.<br />
10 Einer Anwendung ist es mit etwas Aufwand möglich, festzustellen, ob sie mit einem Verzeichnis<br />
auch das Volume wechselt. Der find-Befehl überquert z.B. per default keine Volume-Grenzen.
24 2 Technische Grundlagen<br />
2.7.4 Kerberos<br />
2.7.5 Anderes<br />
Zu jeder Kommando-Familie und den jeweiligen Unterkommandos gibt es online<br />
Hilfe. Beispiel:<br />
user@host>vos help<br />
vos: Commands are:<br />
addsite add a replication site<br />
apropos search by help text<br />
backup make backup of a volume<br />
...<br />
user@host>vos help addsite<br />
vos addsite: add a replication site<br />
Usage: vos addsite -<strong>server</strong> -partition ...<br />
Where: -noauth don’t authenticate<br />
-localauth use <strong>server</strong> tickets<br />
-verbose verbose<br />
-encrypt encrypt commands<br />
2.8 Authentifikation, Autorisation, Sicherheit<br />
Die Kerberos-Kommandos und -Bibliotheken kommunizieren mit den auf den<br />
AFS-DB-Servern installierten Kerberos-Serverprozessen. Dabei werden praktisch<br />
nie Daten auf dem Kerberos-Server geändert, weshalb es auch reicht, einen<br />
beliebigen Kerberos-Server (auf einer beliebigen AFS-DB-Servermaschine)<br />
erreichen zu können. Der Kerberos-Admin-Server, der auf einem beliebigen<br />
AFS-DB-Server installiert wird, muss nur dann erreichbar sein, wenn z.B. mit<br />
kadmin Änderungen an der Kerberos-Datenbank anstehen.<br />
Acall-Server (siehe 7.6.2, Seite 149) warten am TCP-Port 6999 auf Anfragen.<br />
Der PTDB-NSS-Dienst (siehe A.2, Seite 224) benutzt den UDP-Port 6998, jedoch<br />
ausschließlich lokal (also explizit an die Adresse 127.0.0.1 gebunden). Die<br />
PTDB-NSS-Clients (also die NSS-Module lokal laufender Anwendungen) benutzen<br />
jeweils einen beliebigen freien UDP-Port zur Kommunikation mit dem<br />
Dienst.<br />
AFS erkennt Benutzer anhand eines verschlüsselten Datenblocks, eines Tokens,<br />
der aus einem Kerberos-Ticket (siehe 3.10, Seite 61) errechnet wird - die Authentifikation<br />
basiert also auf Kerberos. Die Entwicklung geht jedoch dahin,<br />
dass Kerberos-Tickets direkt als Token verwendet werden können. Wie auch<br />
Kerberos-Tickets, haben Tokens eine zeitlich begrenzte Gültigkeit.<br />
Das Prinzip der Authentifikation unter AFS unterscheidet sich durch 2 Dinge<br />
von klassischen Methoden in Unix-Netzwerken:<br />
• Die Authentifikation von Dateisystemzugriffen erfolgt nicht an der<br />
Client-Maschine, sondern am Server. Der AFS-Client speichert lediglich<br />
das AFS-Token <strong>für</strong> den Benutzer und benutzt es <strong>für</strong> jeden Zugriff auf das<br />
AFS. Da das AFS-Token aus einem Kerberos-Ticket erzeugt wurde, das<br />
wiederum nur von einem (natürlich stark geschützten) Kerberos-Server<br />
ausgestellt werden kann, ist ein AFS-Token praktisch fälschungsicher -<br />
solange das Passwort eines Nutzers nicht geknackt wurde.<br />
In einem klassischen Unix-Netz wird lediglich die UID eines Benutzers<br />
vom Server zur Authentifikation genutzt - und die UID eines Benutzers<br />
ist leicht herauszufinden und zu übernehmen.
2.9 Wo werden Daten über die Benutzer gespeichert? 25<br />
• Die Authentifikation ist zeitlich begrenzt. Dies ist z.B. dann von Vorteil,<br />
wenn Benutzer vergessen sich auszuloggen. Da sowohl das Kerberos-<br />
Ticket wie auch der AFS-Token nach einer gewissen Zeit ablaufen, ist<br />
eine lange vergessene Login-Session praktisch wertlos. Es ist zwar noch<br />
möglich, Programme zu starten, jedoch ist mit dem Token auch das Recht<br />
auf nicht-anonymen Zugriff auf das AFS abgelaufen.<br />
An diesem Beispiel wird auch deutlich, dass man zwischen hohem Komfort<br />
<strong>für</strong> die Nutzer (lange Ticket-/Token-Gültigkeitsdauer) und hoher<br />
Sicherheit (kurze Gültigkeitsdauer) die Balance finden muss.<br />
Dieses Sicherheitskonzept ist natürlich wie jedes andere, das ohne Spezialhardware<br />
auskommt, in einer Hinsicht machtlos: Besitzt ein Angreifer die Kontrolle<br />
über eine Client-Maschine und loggt sich ein regulärer Benutzer ein, so kann<br />
der Angreifer das Passwort des Benutzers abhören. Damit kann er sich - bis der<br />
Benutzer sein Passwort ändert - im AFS im Namen des Benutzers bewegen.<br />
Alle Anfragen an die File<strong>server</strong> (d.h. alle Netzwerkübertragungen) werden vom<br />
AFS-Client signiert und sind somit schwer zu fälschen. Optional können auch<br />
alle Übertragungen verschlüsselt werden. Achtung: Das gilt nur, wenn man mit<br />
einem gültigen Token arbeitet.<br />
Zugriffe auf das Dateisystem selbst werden hauptsächlich per ACLs (siehe<br />
3.7.3, Seite 51) gesteuert - jedoch auch über Modebits (siehe 3.7.3.3, Seite 52).<br />
ACLs werden pro Verzeichnis gespeichert. Sollen also Dateien im gleichen Verzeichnis<br />
unterschiedliche Zugriffsrechte erhalten, muss mit symbolischen Links<br />
und zusätzlichen Verzeichnissen gearbeitet werden. AFS-ACLs ermöglichen<br />
eine feinere Einstellung der Rechte als Modebits oder Posix-ACLs.<br />
2.9 Wo werden Daten über die Benutzer gespeichert?<br />
Ein Benutzer, der interaktiv als ein normaler Benutzer auf das AFS zugreifen<br />
will muss in verschiedenen Datenbanken eingetragen sein:<br />
Kerberos5 : In der Kerberos5-Datenbank müssen <strong>für</strong> jeden Benutzer der Name sowie<br />
sein Passwort gespeichert sein. Das Passwort wird nicht im Klartext<br />
gespeichert.<br />
2.10 Ablauf eines Filezugriffs auf das AFS<br />
PTDB : (ProTectionDataBase) Diese AFS-Datenbank (siehe 3.3, Seite 35) wird<br />
von den File<strong>server</strong>n benutzt, um die in einem AFS-Token gespeicherten<br />
Kerberos-Namen in eine AFSID umzuwandeln. Hier muss also der Name<br />
und zellenweit eindeutige Zahl <strong>für</strong> jeden Benutzer gespeichert werden.<br />
NSS : (NameServiceSwitch) Hier kann eine beliebige Methode, die vom NSS<br />
unter Linux benutzt werden kann, um Benutzernamen auf UIDs und<br />
umgedreht abzubilden, eingesetzt werden. Diese Dokumentation beschränkt<br />
sich dabei auf das <strong>für</strong> dieses Projekt entwickelte NSS-Modul<br />
libnss-ptdb .deb (siehe A.2, Seite 224).<br />
Die Schritte, um einen neuen Benutzer anzulegen sind unter 6.1 auf Seite 114<br />
beschrieben und lassen sich leicht automatisieren.<br />
Soll eine Datei aus dem AFS gelesen werden, so muss der AFS-Client mehrere<br />
Server kontaktieren, um auf die Datei Zugriff zu erhalten. An einer Beispielzelle<br />
11 sollen die Aktivitäten beschrieben werden, die folgendes Kommando<br />
auslöst:<br />
cat /afs/cbs.mpg.de/test.txt<br />
11 Die Beispielzelle ist unter 7.1, Seite 140 genau beschrieben.
26 2 Technische Grundlagen<br />
2.11 DOs and DON’Ts<br />
1. Das cat-Kommando führt die Funktion open() aus, um lesend auf die<br />
Datei /afs/cbs.mpg.de/test.txt zuzugreifen.<br />
2. Das AFS-Rootvolume, das statisch unter /afs gemountet ist, wird nach<br />
dem Eintrag cbs.mpg.de durchsucht.<br />
3. Der Eintrag ist ein Mountpoint auf #root.cell. Gemäß der Mountpoint-<br />
Regeln (siehe 3.2, Seite 32) wird die RO-Instanz von root.cell an dieser<br />
Stelle benutzt. Hinweis: Je nach Einstellung auf dem AFS-Client kann<br />
auch ein dynamischer AFS-Root verwendet werden. Dabei handelt es<br />
sich um eine Art Automounter. In diesem Fall würde der AFS-Client<br />
bei Zugriff auf /afs/cbs.mpg.de On-the-Fly einen Mountpoint auf das<br />
Volume root.cell der Zelle cbs.mpg.de erzeugen.<br />
4. Um einen Server in Erfahrung zu bringen, auf dem eine RO-Instanz dieses<br />
Volumes liegt, wird ein DB-Server kontaktiert. Welcher das ist, wird<br />
durch die im Kernel gespeicherten Server-Ranks (siehe 6.12, Seite 136)<br />
entschieden.<br />
5. Der DB-Server antwortet mit einer Liste von Servern, auf denen die RO-<br />
Instanz zu finden ist.<br />
6. Der AFS-Client wählt aus den Servern dieser Liste den aus, der entsprechend<br />
seinem Rank (siehe 6.12, Seite 136) am besten scheint.<br />
7. Das root-Verzeichnis des Volumes root.cell wird nach test.txt durchsucht,<br />
die Daten kommen aus der RO-Instanz auf dem gewählten Server.<br />
8. Vom gewählten Server wird jetzt der Inhalt der Datei test.txt angefordert<br />
und im lokalen AFS-Cache (siehe 3.5.1, Seite 39) abgelegt.<br />
9. Die read()-Funktion des cat-Kommandos liefert den Inhalt der Datei<br />
zurück, anschließend wird sie nach STDOUT ausgegeben.<br />
Liegen die Volumes im selben LAN wie der AFS-Client, dauert dieser Vorgang<br />
nur Millisekunden. Sind die Volumes aber weiter entfernt (man kann AFS-<br />
Server bei bedarf im ganzen IPv4-tauglichen Internet verteilen), dauert es durch<br />
höhere Latenzzeiten und geringere Bandbreite natürlich länger.<br />
Hier einige Regel, die man sich tunlichst merken sollte, wenn man mit AFS<br />
arbeitet:<br />
• Die Zeit ist lebenswichtig. Achte immer auf korrekte Zeit auf AFS-<br />
Servern, Kerberos-Servern und AFS-Clients!<br />
• Kombiniere niemals AFS-File- und AFS-Datenbank<strong>server</strong> auf der selben<br />
Maschine! Für Testzellen ist das kein Problem, aber in Produktion ist das<br />
ein grosser Fehler.
3 Technische Details zu AFS<br />
3.1 Volumes<br />
3.1.1 RW-Volumes (RW-Instanzen)<br />
Der Begriff Volume bezieht sich unter AFS auf 2 Dinge:<br />
1. einen Eintrag in der VLDB (VoLumeDataBase), der beschreibt, welche<br />
Instanzen von einem Volume auf welchen Servern existieren und welche<br />
numerische ID diesen Instanzen jeweils zugeordnet ist,<br />
2. einzelne Instanz eines Volumes.<br />
Um Verwirrungen vorzubeugen, wird <strong>für</strong> das auf einer definierten Festplatte<br />
liegende Volume eines bestimmten Typs immer der Begriff Instanz benutzt.<br />
Die Länge des Namens der RW-Instanz und damit des Volumes ist auf 22 Zeichen<br />
begrenzt. Mit diesen kurzen Namen muss sich aber nur der Administrator<br />
herumschlagen. Der Benutzer bekommt nur die normalen Pfadnamen zu Gesicht,<br />
auf welche die Volumes gemountet sind.<br />
Legt man mit dem Befehl vos create ein neues Volume an, erstellt man<br />
damit nur eine RW-Instanz:<br />
admin@afs>vos create Servername Partition Name des Volumes<br />
Eine RW-Instanz ist die einzige Volume-Instanz, in der Änderungen möglich<br />
sind. Pro Volume gibt es immer nur eine RW-Instanz, RO-Instanzen hingegen<br />
kann es beliebig viele geben. Beispielsweise muss der Pfad zum Homedirectory<br />
eines Benutzer so aufgebaut sein (siehe 3.2, Seite 32), dass an dieser Stelle eine<br />
RW-Instanz gemountet wird. Erstellt man einen Mountpoint auf die RW-Instanz<br />
mit fs mkmount und setzt die ACLs darin mit fs setacl entsprechend,<br />
kann man darauf lesend und schreibend zugreifen:<br />
admin@afs>fs mkmount /afs/pfad/zum/volume mein_volume -rw<br />
3.1.2 RO-Volumes (RO-Instanzen)<br />
Hinweis: Beim Anlegen von RW-Instanzen (und damit von Volumes) sind weitere<br />
Dinge zu beachten, unter 6.3.1 auf Seite 116 findet man Details dazu.<br />
Eine der Stärken von AFS ist die Möglichkeit, Volumes bei Bedarf replizieren<br />
zu können. vos addsite setzt einen File<strong>server</strong> auf die Liste der Server,<br />
die die RO-Instanz (auch RO-Kopie oder RO-Volume genannt) eines Volumes<br />
aufnehmen sollen. Es wird noch nichts kopiert. Erst durch das Kommando vos<br />
release wird die RW-Instanz auf ihre RO-Instanzen repliziert:<br />
admin@afs>vos addsite Server Partition Volume<br />
admin@afs>vos release Volume<br />
Es können mehrere (derzeitig bis zu 12) RO-Instanzen zu jeder RW-Instanz<br />
existieren, jedoch immer nur eine pro Server.<br />
27
28 3 Technische Details zu AFS<br />
Beispiel:<br />
Es ist nicht möglich, nur ein RO-Volume zu erzeugen, indem man eine RO-<br />
Instanz anlegt - es muss zuerst ein RW-Volume angelegt werden.<br />
Der vos release-Befehl gleicht den Inhalt der RO-Instanz an den der<br />
RW-Instanz einmalig an. Auch jeder weitere Abgleich muss explizit mit diesem<br />
Kommando ausgelöst werden und geschieht niemals automatisch. Auch kann<br />
man RO-Instanzen, von denen pro Volume mehrere existieren können, nicht<br />
einzeln abgleichen 1 . Die RW-Instanz wird immer in alle RO-Instanzen auf<br />
einmal kopiert, wobei immer nur die Differenzen 2 übertragen werden. Ist ein<br />
Server, der eine der RO-Instanzen enthält, nicht erreichbar, wird die jeweilige<br />
Kopie ausgelassen. Um solche Instanzen ebenfalls zu synchronisieren, muss<br />
der entsprechende Server wieder verfügbar gemacht und das Volume erneut<br />
mit vos release abgeglichen werden. In der VLDB wird dann vermerkt,<br />
dass die entsprechende Kopie nicht up-to-date ist. Wie man die Replikation von<br />
Volumes nutzt, ist unter 7.10 (Seite 158) beschrieben.<br />
Eine Kopie von Ernies Home-Directory wird angelegt:<br />
admin@afs>vos addsite afsserv2 /vicepa user.ernie<br />
admin@afs>vos release user.ernie<br />
Beispiel:<br />
Das Kommando vos release kann nur von Zellensuperusern ausgeführt<br />
werden. Normale Benutzer müssen da<strong>für</strong> auf acall (siehe 7.6.2, Seite 149)<br />
zurückgreifen:<br />
user@host>acall db instantafs.acall-release user.ernie<br />
user@host>iarel -d ∼ernie<br />
3.1.2.1 Selbe Partition oder nicht<br />
oder komfortabler durch Angabe des Verzeichnisses mit<br />
Der Name einer RO-Instanz setzt sich immer aus dem Namen der entsprechenden<br />
RW-Instanz sowie dem Suffix .readonly zusammen.<br />
Auf einem File<strong>server</strong> können nicht mehrere RO-Instanzen eines Volumes existieren.<br />
Die Synchronisation der RO-Instanzen mit einer RW-Instanz ist ein verhältnismäßig<br />
komplexer Prozess. Existieren mehrere RO-Instanzen von einen Volume,<br />
dann ist sichergestellt, dass AFS-Clients immer auf wenigstens eine davon zugreifen<br />
können. Um das zugewährleisten, interagiert der Synchronisationsprozess<br />
stark mit der VLDB (auch schreibend!), weshalb die VLDB unbedingt im<br />
Zustand Quorum elected sein muss (siehe 3.3.2, Seite 36).<br />
RO-Instanzen, die auf der selben Partion 3 wie die RW-Instanz liegen, werden<br />
differentiell gespeichert (siehe 3.1.4, Seite 29). Man kann sie nicht als ein physisches<br />
Backup betrachten.<br />
RO-Instanzen, die nicht auf derselben Partition wie die RW-Instanz liegen, können<br />
als physisches Backup betrachtet werden (siehe 5.5, Seite 109).<br />
Man kann durch den Befehl<br />
admin@afs>vos convertROtoRW Server Partition Volume-Name<br />
1 Dies ist wohl eher ein Feature als ein Mangel, da andernfalls unterschiedliche Kopien entstehen<br />
würden. Ausserden gibt es <strong>für</strong> solche Zwecke die Backup-Volumes.<br />
2 Man sollte dabei nicht die Performance von optimierten Protokollen wie rsync erwarten. Es<br />
werden ganze Dateien und nicht nur veränderte Dateifragmente kopiert.<br />
3 also auch auf dem selben Server
3.1 Volumes 29<br />
3.1.3 Backup-Volumes (Backup-Instanzen)<br />
3.1.4 Differenzielle Speicherung<br />
aus einer RO-Instanz eine RW-Instanz machen. Dies ist die schnellste Form<br />
einen Backup “zurückzuspielen”.<br />
Die vollständige Synchronisation einer RW-Instanz mit allen RO-Instanzen<br />
dauert üblicherweise länger (vor allem, wenn viele Dateien enthalten sind),<br />
wenn auf der Partition der RW-Instanz keine RO-Instanz existiert.<br />
Zuerst ein wichtiger Hinweis: Backup-Instanzen schützen nicht vor Hardware-<br />
Schäden, da sie immer auf derselben Partition wie die RW-Instanz liegen müssen.<br />
Sie verhindern aber Schäden durch versehentliches Löschen oder durch<br />
clientseitige Softwarefehler 4 .<br />
Backup-Instanzen funktionieren wir RO-Instanzen, die auf der selben Partition<br />
wie die zugehörige RW-Instanz liegen - nur können sie unabhängig von einer<br />
evtl. vorhandenen RO-Instanz angesprochen und synchronisiert werden (siehe<br />
3.1.4, Seite 29). Anstelle von vos release wird vos backup verwendet,<br />
um die Synchronisation einer solchen Instanz mit der zugehörigen RW-Instanz<br />
durchzuführen.<br />
Wird eine RW-Instanz verschoben, so wird die Backup-Instanz gelöscht und<br />
muss bei Bedarf auf dem neuen Server mit vos backup neu angelegt werden.<br />
Die Bezeichnung Backup kommt nicht daher, dass diese Sorte Instanzen einen<br />
Backup darstellt, sondern dass sie <strong>für</strong> Backups verwendet werden sollten (siehe<br />
5.2.2, Seite 101), da sie einen eingefrorenen Zustand eines Volumes repräsentiert.<br />
Backup-Instanzen funktionieren in etwa wie RO-Instanzen, die auf derselben<br />
Partition wie die RW-Instanz liegen, jedoch werden sie durch vos release<br />
nicht verändert. Daten werden ebenfalls differenziell zur RW-Instanz gespeichert.<br />
Das Kommando, um eine Backup-Instanz mit der RW-Instanz zu synchronisieren<br />
lautet vos backup. Explizit anlegen muss man eine Backup-<br />
Instanz nicht, da es keine Wahlmöglichkeit gibt, wo sie angelegt werden soll.<br />
Existiert sie noch nicht, wird sie durch vos backup erzeugt.<br />
Mit Backup-Instanzen kann man ein besonders administrationsarmes Backup-<br />
System realisieren (siehe 7.2, Seite 141). Ein solches Backup lässt sich theoretisch<br />
auch mit RO-Instanzen realisieren, jedoch werden diese u.U. schon <strong>für</strong><br />
andere Zwecke gebraucht.<br />
Backup-Instanzen werden immer differentiell gespeichert (siehe 3.1.4, Seite 29)<br />
und liegen immer auf der Partition, auf der die RW-Instanz liegt.<br />
Die Synchronisation einer Backup-Instanz mit der RW-Instanz erfolgt, ohne<br />
dass Schreibzugriffe in die VLDB erforderlich sind. Aber Vorsicht: Synchronisation<br />
ist nicht gleichbedeutend mit “Anlegen einer Backup-instanz”. Anders<br />
gesagt: Nur wenn vos examine Volume anzeigt, dass das Volume eine<br />
Backup-ID (�= 0), dann ist vos backup Volume möglich, selbst wenn mehr<br />
als die Hälfte der AFS-Datenbank<strong>server</strong> ausgefallen oder nicht erreichbar ist 5 .<br />
Wird eine RO-Instanz auf derselben Partition oder eine Backup-Instanz zu einer<br />
RW-Instanz angelegt, kommt eine besondere Funktionalität von AFS zum<br />
Einsatz: Die Instanz wird zu einem Clone. Clone-Instanzen sind grundsätzlich<br />
4 z.B. ein abstürzendes MS-Word, das ein .doc-File in einem unbrauchbaren Zustand hinterlässt.<br />
5 Wenigstens einer muss natürlich erreichbar sein.
30 3 Technische Details zu AFS<br />
3.1.5 Temporäre differentiell gespeicherte Instanzen<br />
nur lesbar. Die die RW-Instanz zusammen mit ihren Clone-Instanzen nennt man<br />
Volume Group.<br />
Solche Instanzen benötigen unmittelbar nach einer Synchronisation praktisch<br />
keinen 6 Speicherplatz - egal wie groß die RW-Instanz ist, da sie zunächst nur<br />
Verweise auf die Objekte in der RW-Instanz enthalten. Wird nach der Replikation<br />
etwas an der RW-Instanz geändert, läuft das aus Sicht des File<strong>server</strong>s wie<br />
folgt ab:<br />
1. Das zu ändernde Objekt (also eine Datei oder ein verzeichnis), wird<br />
kopiert, das RW-Volume arbeitet anschliessend mit der Kopie. Dieser<br />
Vorgang heißt Copy-on-Write. Er spart viel Speicher (solange sich am<br />
Original wenig verändert) und Kopierzeit beim Synchronisieren der ROund<br />
Backup-Instanzen. Existieren mehrere Clone-Instanzen, so teilen<br />
sich diese anschliessend die Kopie des Objektes.<br />
2. Erst jetzt werden die Änderungen in das Objekt geschrieben.<br />
Für den Benutzer ist es jedoch ein ganz normaler Schreibzugriff, vom Copyon-Write<br />
bekommt er nur durch die Verzögerung bei der ersten Änderung (vor<br />
allem bei grossen Dateien) etwas mit.<br />
Diese Instanzen werden zwar auf File<strong>server</strong>n differenziell zur RW-Instanz gespeichert<br />
- nach außen hin 7 verhalten sie sich aber wie vollständige Volumes:<br />
• Diese Instanzen sind in den AFS-Namensraum integriert und beinhalten<br />
alle Dateien und Verzeichnisse der RW-Instanz plus die Differenzen, die<br />
im Speicherbereich der RO- oder Backup-Instanz gespeichert sind.<br />
• Sichert man solche Instanzen z.B. im Rahmen eines Backups (siehe 5.2,<br />
Seite 100), so wird das in der Instanz gespeicherte Abbild gesichert und<br />
nicht nur die physisch dort gespeicherten Differenzen, d.h. die Daten und<br />
nicht nur die Verweise.<br />
Diese Instanzen sind deshalb ein Abbild der RW-Instanz zu einem bestimmten<br />
Zeitpunkt, durch die differenzielle Speicherung werden sie up-to-date gehalten.<br />
RO- und Backup-Instanzen sind <strong>für</strong> Backups von besonderer Bedeutung (siehe<br />
5.2.2, Seite 101), da sie sich eben erst auf Befehl des Administrators hin ändern.<br />
Der Platzbedarf <strong>für</strong> die differenzielle Speicherung wächst nach der Synchronisation<br />
mit der RW-Instanz bei Schreibzugriffen an und kann die Größe der<br />
RW-Instanz erreichen, wenn diese in keiner Datei mehr mit dem Zustand bei<br />
der letzten Synchronisation übereinstimmt 8<br />
Für bestimmte Aktionen legt das AFS temporäre Clone-Instanzen an, die ebenfalls<br />
differentiell gespeichert werden, jedoch keinen Namen haben und auch<br />
nicht ins Filesystem eingemountet werden können. Die gestarteten Aktionen<br />
arbeiten dann nicht direkt auf der RW-Instanz, sondern auf diesem temporary<br />
clone.<br />
Solche Aktionen sind z.B.<br />
• vos move ohne -live-Option<br />
6 Es werden lediglich Tabellen angelegt, die über die differenzielle Speicherung Buch führen.<br />
7 Sprich: <strong>für</strong> Benutzer und auch z.B. beim Dumpen der instanz mit vos dump<br />
8 also wenn alle Verweise durch Kopien der alten Dateien ersetzt wurden.
3.1 Volumes 31<br />
• vos release Wenn auf der Partition der RW-Instanz eine RO-Instanz<br />
existiert, wird kein temporärer Clone angelegt, sondern direkt auf die RO-<br />
Instanz zugegriffen.<br />
• vos dump -clone<br />
3.1.6 Zusätzliche differenziell gespeicherte Instanzen<br />
Dieser Aufwand ist sinnvoll, da auf diese Weise mit einem konsistenten Image<br />
des Volumes gearbeitet werden kann. Schreibzugriffe, die nach dem Start der<br />
Aktion auf die RW-Instanz ausgeführt werden, haben keinen Einfluss mehr auf<br />
den Inhalt des Images.<br />
Ab OpenAFS 1.3 existiert die Möglichkeit, weitere differenziell gespeicherte<br />
Volumes auf der RW-Partition zu erzeugen. Dabei darf jedoch die maximale<br />
Anzahl von 6 Clone-Instanzen pro Volume nicht überschritten werden.<br />
Achtung: Der Administrator muss selbst da<strong>für</strong> sorgen, dass nicht zuviele Clones<br />
erzeugt werden! Auf der sicheren Seite ist man, wenn nicht mehr als 3<br />
zusätzliche Clones manuell benutzt.<br />
Das Kommando zum Erzeugen eines zusätzlichen Clones lautet:<br />
admin@afs>vos clone Volume Server Partition -toname Clone-Name<br />
3.1.7 Verschieben von Volumes im Produktionsbetrieb<br />
Der Name des Clones taucht dann lediglich in der Instanzenliste des File<strong>server</strong>s<br />
(vos listvol) auf, nicht jedoch in der VLDB. Es ist auch nicht möglich,<br />
den Clone per Mountpoint ins Filesystem einzubauen.<br />
Volume-Instanzen lassen sich im laufenden Betrieb on Server zu Server (oder<br />
auch zwischen 2 Partitionen des selben Servers verschieben).<br />
Diese Möglichkeit beschränkt sich allerdings auf RW-Instanzen, da RO-<br />
Instanzen auf andere Weise effizienter "verschoben"werden können - mehr<br />
dazu weiter unten.<br />
RW-Instanzen werden verschoben, während weiterhin Benutzer darauf arbeiten<br />
können. Der Ablauf dahinter ist wie folgt:<br />
1. Ein Move-Clone der RW-Instanz wird auf dem Quell<strong>server</strong> erzeugt (siehe<br />
3.1.6, Seite 31).<br />
2. Auf dem Ziel<strong>server</strong> wird eine neue Instanz angelegt, und der Move-Clone<br />
wird in diese Instanz kopiert.<br />
3. Die RW-Instanz auf dem Quell<strong>server</strong> wird jetzt auf Busy (siehe 6.13.2,<br />
Seite 137) geschaltet, wodurch weitere Zugriffe von Clients blockiert<br />
werden ohne das Timeouts auftreten können.<br />
4. Die RW-Instanz vom Quell<strong>server</strong> wird inkrementell in die neue Instanz<br />
auf dem Ziel<strong>server</strong> kopiert.<br />
5. Die neue Instanz auf dem Ziel<strong>server</strong> wird zur RW-Instanz gemacht und<br />
in der VLDB entsprechend registriert<br />
6. Die gesammte Volume-Group der alten RW-Instanz auf dem Quell<strong>server</strong><br />
wird gelöscht. Das umfasst die RW-Instanz, den Move-Clone und alle<br />
evtl. vorhandenen anderen Clones (z.B. eine Backup-Instanz).<br />
Ausnahme: Wenn auf der selben Partition noch eine RO-Instanz des Volumes<br />
lag, existiert dieses weiter.
32 3 Technische Details zu AFS<br />
7. Clients, die auf die alte RW-Instanz zugreifen, bekommen den Hinweis,<br />
dass die Instanz nicht mehr exitiert, wenden sich an die VLDB, erfahren<br />
dort, wo die RW-Instanz jetzt liegt und greifen sofort auf diese zu.<br />
Ausgelöst wird das Verschieben eines Volumes wie folgt:<br />
admin@afs>vos move Volume Quell<strong>server</strong> Quellpartition Ziel<strong>server</strong> Zielpartition<br />
RO-Instanzen "verschiebtman, indem man folgendes macht:<br />
admin@afs>vos addsite Ziel<strong>server</strong> Zielpartition Volume<br />
admin@afs>vos release Volume<br />
admin@afs>vos remove Quell<strong>server</strong> Quellpartition Volume.readonly<br />
3.2 Volume-Mountpoints<br />
3.2.1 Arten<br />
Volume-Mountpoints hängen die Volumes in den AFS-Namensraum ein. Sie<br />
werden vom Client ausgewertet. Mountpoints können - das “a”-Recht im entsprechenden<br />
Verzeichnis vorrausgesetzt (siehe 3.7.3.2, Seite 51) - von jedem<br />
Benutzer angelegt und gelöscht werden. Dadurch haben Benutzer eine gewisse<br />
Kontrolle über die Struktur des Namensraumes.<br />
Mountpoints sehen <strong>für</strong> normale Programme wie Verzeichnisse aus.<br />
An jedem Mountpoint muss der AFS-Client entscheiden, welche Art Volume<br />
und von welchem Server gemountet wird. Die Informationen im Mountpoint<br />
selbst reichen <strong>für</strong> diese Entscheidung oft noch nicht aus. Man unterscheidet 4<br />
verschiedene Arten von Mountpoints. Angegeben ist neben dem Befehl zum<br />
Anlegen des jeweiligen Mountpoints auch ein Beispieloutput, des Befehls fs<br />
lsm, angewandt auf einen solchen Mountpoint.<br />
Hinweis: Die Konstrukte, bei denen jeweils ein Verzeichnis und eines, das abgesehen<br />
von einem Punkt davor genauso heisst, in verschiedene Instanzen des<br />
selben Volumes führen, sind unter AFS üblich und unter 3.2.3 (Seite 34).<br />
Hier ist die Liste der Mountpoint-Typen:<br />
1. Der Befehl<br />
user@host>fs mkm Verzeichnis RO-Instanz<br />
generiert einen Mountpoint, der immer zu einer RO-Instanz eines Volumes<br />
führt. Auf der RO-Instanz kann man natürlich keine Dateien<br />
verändern. Ist keine RO-Instanz vorhanden, kann man nicht in das entsprechende<br />
Verzeichnis wechseln. Output:<br />
’vol’ is a mount point for volume ’#vol.readonly’<br />
2. Mit<br />
user@host>fs mkm Verzeichnis Backup-Instanz<br />
legt man Mountpoint an, der in eine Backup-Instanz 9 führt. Darin können<br />
ebenfalls keine Dateien verändert werden. Ist keine Backup-Instanz<br />
vorhanden, kann man nicht in das entsprechende Verzeichnis wechseln.<br />
9 Hinweis: Die Namen von Backup-Instanzen enden immer auf .backup
3.2 Volume-Mountpoints 33<br />
Output:<br />
’vol’ is a mount point for volume ’#vol.backup’<br />
3. Der Befehl<br />
user@host>fs mkm Verzeichnis Volume -rw<br />
erzeugt einen Mountpoint, so dass der Cachemanager beim Wechseln<br />
in das entsprechende Verzeichnis explizit auf eine RW-Instanz zugreift,<br />
wodurch man die enthaltenen Dateien bearbeiten kann. Ist das Volume<br />
nicht verfügbar (weil z.B. der Server ausgefallen ist) oder existiert keine<br />
RW-Instanz 10 , wird ein Fehler zurückgeliefert. RW-Mountpoints, die auf<br />
ein Volume verweisen, auf das hauptsächlich lesend zugegriffen wird<br />
(z.B. installierte Softwarepakete, Konfigurationsfiles, Archive), werden<br />
im AFS üblicherweise mit einem vorangestellten Punkt gekennzeichnet.<br />
Output:<br />
’.vol’ is a mount point for volume ’%vol’<br />
4. Mit<br />
user@host>fs mkm Verzeichnis Volume<br />
wird ein besonderer (dynmischer) Mountpoint angelegt, bei dem die Art<br />
des Instanz, in der der Mountpoint liegt, über die zu mountende Instanz<br />
entscheidet. Mehr dazu im folgdenden Abschnitt. Output:<br />
’vol’ is a mount point for volume ’#vol’<br />
Hinweise:<br />
• Ein Mountpoint kann immer angelegt werden - auch wenn das entsprechende<br />
Volume nicht existiert. Ein merkwürdiger Mechanismus verhindert<br />
das Anlegen von Mountpoints, auf die man keinen Zugriff hat - das<br />
ist jedoch sicherheitsmäßig nur heiße Luft (siehe 3.2.4, Seite 34)<br />
• Die Regeln, nach denen Volume-Instanzen gemountet werden, können<br />
u.U. verwirrend sein. Das Programm instantafs.afsdir schafft<br />
Abhilfe:<br />
user@host>instantafs.afsdir Verzeichnis im AFS<br />
Hinweis:<br />
Der Output besteht aus einer detailierten Angabe über die auf dem Pfad<br />
durchlaufenen Volumes sowie einer Begründung, warum die entsprechenden<br />
Volume-Instanzen jeweils gemountet wurden.<br />
• Anstelle des Namens eines Volumes kann das Ziel des Volume-Mountpoints<br />
auch die ID eines Volumes sein. Als Volumename wird dann einfach die<br />
ID (eine Dezimalzahl) benutzt und auch von fs lsm angezeigt.<br />
• Mountpoints können auch auf Volumes anderer Zellen zeigen. Der zusätzliche<br />
Parameter -cell Zellenname <strong>für</strong> das fs mkm-Kommando<br />
ist da<strong>für</strong> zuständig.<br />
Beispiel:<br />
admin@afs>fs mkm tu root.cell -cell tu-chemnitz.de<br />
admin@afs>fs lsm tu<br />
’tu’ is a mount point for volume ’#tu-chemnitz.de:root.cell’<br />
10 Das ist möglich, jedoch sehr ungewöhnlich.
34 3 Technische Details zu AFS<br />
3.2.2 Dynamische Mountpoints<br />
3.2.3 Punkt oder nicht Punkt...<br />
3.2.4 Wie werden Mountpoints gespeichert?<br />
• Es ist günstig, ein Standardschema zu benutzen, nach dem die zu einer<br />
RO-Instanz gehörige RW-Instanz im Namensraum des AFS erreicht werden<br />
kann (siehe 3.2.3, Seite 34).<br />
Wird der Mountpoint aus einer RW-Instanz aufgerufen, so wird versucht,<br />
wiederum eine RW-Instanz zu mounten. Wird er hingegen aus einer ROoder<br />
Backup-Instanz heraus aufgerufen, so wird eine RO-Instanz gemountet.<br />
Existiert zu dem angegebenen Volume keine RO-Instanz, wird immer<br />
die RW-Instanz benutzt. Existieren RO-Instanzen, sind jedoch (z.B. wegen<br />
Serverausfalls) nicht erreichbar, wird ein Fehler gemeldet.<br />
In neueren AFS-Versionen (bei 1.4 und höher z.B.) kann man dem AFS-<br />
Client eine Option mitgeben, die das Verhalten dynamischer Mountpoints<br />
ändert, wenn sie aus Backup-Instanzen herraus aufgerufen werden. Die Option<br />
-backuptree sorgt da<strong>für</strong>, dass ein aus einer Backup-Instanz aufgerufener<br />
dynamischer Mountpoint versucht, eine Backup-Instanz zu mounten. Existiert<br />
keine, wird die RW-instanz benutzt. Ist die Backup-Instanz nicht erreichbar,<br />
gibt’s einen Fehler.<br />
Verschiedene Volumes sollten per Default als RO-Instanzen gemountet werden<br />
- z.B. local.scripts (siehe 7.1, Seite 140), ein Verzeichnis <strong>für</strong> ausführbare<br />
Programme. Das Volume ist dann über /afs/cbs.mpg.de/local/scripts erreichbar.<br />
Soll sein Inhalt verändert werden, muß irgendwie die zugehörige RW-Instanz<br />
angesprochen werden. Da es i.d.R. nicht bei einem einzigen derartigen Volume<br />
bleibt, muss ein Schema her, nach dem die RW-Instanz zu einem Volume, das<br />
normalerweise nur in seiner RO-Ausführung von Interesse ist, leicht zu finden<br />
ist. Z.B. kann man definieren, das ein vor den Mountpoint gesetzter Punkt immer<br />
zur RW-Instanz führt. Im Beispiel wäre das: /afs/cbs.mpg.de/local/.scripts.<br />
Weitere Beispiele <strong>für</strong> diese Konstruktion sind:<br />
RO-Pfad RW-Pfad<br />
/afs/cbs.mpg.de /afs/.cbs.mpg.de<br />
/afs/user-backup /afs/.user-backup<br />
/afs/cbs.mpg.de/user /afs/cbs.mpg.de/.user<br />
Dabei ist der Mountpoint ohne Punkt vom Typ 4 (siehe Seite 33), der mit Punkt<br />
dagegen vom Typ 3. Unter 7.10 auf Seite 158 ist Schritt <strong>für</strong> Schritt beschrieben,<br />
wie man eine solche Konstruktion anlegt.<br />
Dadurch, dass standardmäßig die RO-Instanz benutzt wird, wird die durch das<br />
jeweilige Volume erzeugte Last, wenn mehrere RO-Instanzen existieren, auch<br />
auf mehrere Server verteilt (siehe 6.11.1, Seite 132). Damit einher geht Ausfallsicherheit<br />
(siehe 5.1.1, Seite 98).<br />
Mountpoints werden innerhalb des AFS als einfache symbolische Links gespeichert<br />
und lediglich vom AFS-Client ausgewertet. Man kann deshalb auch einen<br />
Mountpoint mit dem ln-Kommando anlegen, wobei das Linkziel jeweils dem<br />
Output des fs lsm-Kommandos mit einem zusätzlichen Punkt entspricht.<br />
Beispiel:
3.3 Die AFS-Datenbank 35<br />
user@host>fs mkm test root.cell<br />
• Ein Mountpoint wird angelegt:<br />
• So findet man herraus, wie der Mountpoint intern codiert ist:<br />
user@host>fs lsm test<br />
’test’ is a mount point for volume ’#root.cell’<br />
user@host>ln -s ’#root.cell.’ test<br />
3.3 Die AFS-Datenbank<br />
3.3.1 Grundlegendes<br />
• Man hätte ihn auch so anlegen können:<br />
Jede AFS-Zelle beinhaltet eine AFS-Datenbank. Die Datenbank ist auf jedem<br />
der AFS-Datenbank<strong>server</strong> vollständig gespeichert, wobei es bei Verbindungsproblemen<br />
möglich ist, dass die Datenbank auf einigen Rechnern nicht aktuell<br />
ist. “Einigen” steht dabei <strong>für</strong> “weniger als die Hälfte” - eine Eigenart des benutzten<br />
Synchronisationsprotokolls UBIK.<br />
Die Datenbank besteht aus mehreren Teilen:<br />
VLDB : Die Volume Database speichert Informationen über die Volumes und die<br />
Server, auf denen sie liegen. Der vl<strong>server</strong>-Prozess verwaltet diese Daten.<br />
PTDB : Die Protection Database beinhaltet Informationen über Benutzer und<br />
Benutzer-Gruppen:<br />
• Die Zuordnungen von AFSID 11 zu Benutzername.<br />
• Die Zuordnungen von AFSID 12 zu Gruppenname.<br />
• Eine Liste <strong>für</strong> jede Gruppe, welche Benutzer-AFSIDs zu ihr gehören.<br />
• Metainformationen von Einträgen – also von Benutzern und AFS-<br />
Gruppen (siehe 3.7.3.4, Seite 54):<br />
creator : Der Benutzer, der den jeweiligen Benutzer ursprünglich angelegt<br />
hat.<br />
owner : Der Besitzer des Eintrages. Dieser darf Metadaten des jeweiligen<br />
Eintrages ändern.<br />
membership : Bei Benutzern: die Anzahl der Gruppen, in denen der Benutzer<br />
Mitglied ist.<br />
Bei Gruppen: Die Anzahl der Benutzer, die in der Gruppe Mitglied<br />
sind.<br />
group quota : Dieser <strong>für</strong> jede AFSID spezifische Wert gibt an, wieviele zusätzliche<br />
Gruppen der entsprechende Benutzer anlegen darf.<br />
flags : Diese Rechte definieren, wer mit dem Benutzer was machen<br />
darf. In [ADMREF] sind die Flags genau beschrieben.<br />
11 Dabei ist die 0 keine gültige AFSID.<br />
12 Anhand des Vorzeichens einer AFSID kann man Gruppen und Benutzer-AFSIDs unterscheiden:<br />
Gruppen-IDs sind immer negativ.
36 3 Technische Details zu AFS<br />
Die PTDB wird von File<strong>server</strong>n kontaktiert, um z.B. festzustellen, ob ein<br />
Benutzer zu einer bestimmten Gruppe gehört, die in einer ACL erwähnt<br />
wird.<br />
BDB : Die Backup Database speichert Informationen über Daten, die über das<br />
AFS-Backup-System gesichert wurden. Dazu zählen:<br />
• Definitionen von Volume-Gruppen, sog. (Volume-Sets). Das AFS-<br />
Backup-System kann immer nur ganze Volume-Gruppen sichern,<br />
nicht einzelne Volumes. Eine Gruppe kann aber auch nur ein Volume<br />
enthalten.<br />
• Gesicherte Volume-Sets mit ihrem Sicherungszeitpunkt sowie dem<br />
Referenzzeitpunkt bei einer inkrementellen Sicherung.<br />
• Bänder 13 , auf die diese Volumes-Gruppen gesichert wurden.<br />
Der Prozess bu<strong>server</strong> ist <strong>für</strong> die Verwaltung verantwortlich. Zugriff<br />
auf diese Datenbank erhält man mit der backup-Kommando-Familie.<br />
Die verschiedenen Teile der Datenbank werden zwar von unterschiedlichen Prozessen<br />
verwaltet (pt<strong>server</strong>, vl<strong>server</strong>, bu<strong>server</strong>), jedoch benutzen alle<br />
diese Prozesse den selben Synchronisationsalgorithmus (mit unterschiedlichen<br />
Ports) und müssen immer zusammen auf den AFS-DB-Servern installiert sein.<br />
Deshalb kann man die AFS-Datenbank im Normalbetrieb als Einheit sehen.<br />
Man kann sich die DB-Server auflisten lassen:<br />
user@host>bos listhosts Servername<br />
wobei Servername der Name eines AFS-File- oder DB-Servers ist.<br />
Mit den nächsten beiden Befehlen kann man Datenbank<strong>server</strong>einträge (DB-Server)<br />
auf AFS-Servern (Servername) hinzufügen bzw. entfernen:<br />
admin@afs>bos addhost Servername DB-Server<br />
admin@afs>bos removehost Servername DB-Server<br />
Änderungen an der AFS-DB-“Serverfarm” müssen auf jedem DB-Server einzeln<br />
erfolgen - der entsprechende bos addhost/bos removehost-Befehl<br />
muss also einmal <strong>für</strong> jeden AFS-Server ausgeführt werden.<br />
Mit folgenden Kommando kann man den Zustand der Datenbank<strong>server</strong> gründlich<br />
testen:<br />
user@host>instantafs.<strong>server</strong>check -a dns<br />
3.3.2 Synchronisation der DB-Server<br />
Mit dem Kommando kann man noch mehr testen, fuer die Datenbank<strong>server</strong><br />
reicht aber dieser Aufruf.<br />
Die DB-Server einer Zelle wählen regelmäßig einen Sync-Server (so etwas wie<br />
einen Master-Server) aus, der als einziger in die Datenbank schreiben darf. Der<br />
gewählte Sync-Server, auch Sync-Site genannt, ist der einzige Rechner, an den<br />
sich ein Programm wenden kann, um Änderungen an den Daten durchzuführen.<br />
Können bestimmte Clients nicht mit dem Sync-Server kommunizieren, so<br />
können diese trotzdem das AFS als Filesystem nutzen, auch schreibend. Änderungen<br />
an der der Datenbank sind i.d.R. <strong>Administratoren</strong> vorbehalten, weshalb<br />
13 Das müssen nicht zwangsläufig echte Magnetbänder sein (siehe 9.2.28, Seite 206).
3.3 Die AFS-Datenbank 37<br />
fehlender Schreibzugriff auf die Datenbank dem normalen Benutzer nicht auffallen<br />
sollte.<br />
Damit die Wahl des Sync-Servers erfolgreich verläuft, müssen verschiedene<br />
Voraussetzungen erfüllt sein:<br />
1. Alle DB-Server müssen die gleiche Liste an DB-Servern besitzen,<br />
da sonst die zahlenmäßige Hälfte der DB-Server nicht mehr korrekt<br />
berechnet werden kann.<br />
2. Die Uhren der DB-Server müssen synchron laufen. Mehr als 10 Sekunden<br />
Differenz sind kritisch.<br />
3. Mehr als die Hälfte 14 der DB-Server müssen sich gegenseitig erreichen<br />
können.<br />
Warum diese Bedingungen sinnvoll sind, soll an einem Beispiel erklärt werden:<br />
Die erste Bedingung ist nötig, damit alle Datenbank<strong>server</strong> sicher feststellen<br />
können, ob sie mit anderen Datenbank<strong>server</strong>n eine Gruppe bilden können, die<br />
aus mindestens der Hälfte aller Datenbank<strong>server</strong> der Zelle entspricht.<br />
Es existieren in einer Außenstelle 2 Datenbank<strong>server</strong>, im zentralen Institut jedoch<br />
3 und die Verbindung zwischen beiden Institutsteilen ist unterbrochen.<br />
In der Zentrale können weiterhin Änderungen in die Datenbank geschrieben<br />
werden, während die Außenstelle das Nachsehen hat. Wird jetzt z.B. die Verbindung<br />
wiederhergestellt und plötzlich fallen 2 der zentralen Datenbank<strong>server</strong><br />
aus, so werden die 2 Server der Außenstelle und der eine aus der Zentrale eine<br />
Gruppe bilden, die größer als die Hälfte der DB-Server ist.<br />
Der Server in der Zentrale wird anhand der Update-Zeitstempel als der aktuellste<br />
erkannt und die Außenstellen-Server mit diesem synchronisiert. Während<br />
der Wahl wird geprüft, ob die Uhren synchron laufen. Würde die Wahl abgeschlossen<br />
werden und die Uhren der Außenstelle würden weit vorraus gehen,<br />
so könnte der einzelne Server der Institutszentrale nicht sicher als der aktuellste<br />
eingestuft werden - evtl. würde der Datenbankinhalt sogar “downgegraded”.<br />
Alle Datenbankteile (VLDB, PTDB, BDB) ermitteln jeweils unabhängig voneinander<br />
eine Sync-Site. Da der benutzte Algorithmus zur Ermittlung der Sync-<br />
Site jedoch immer derselbe ist, sollte im Normalfall (wenn kein einzelner Datenbankprozess<br />
abgestürzt ist) eine einzelne Maschine Sync-Site aller Datenbankteile<br />
sein.<br />
Das <strong>für</strong> die Synchronisation der Datenbank<strong>server</strong> untereinander verwendete<br />
Protokoll ist in der Lage, Netzwerkunterbrechungen zu handhaben. Mit<br />
udebug aus dem Paket openafs-client .deb können Informationen über den<br />
Stand der Wahl abgerufen werden:<br />
user@host>udebug Servername 7003<br />
3.3.3 Benötigte Prozesse auf den DB-Server-Maschinen<br />
Der Port-Parameter 7003 bewirkt, dass der vl<strong>server</strong> kontaktiert wird.<br />
Es ist auch möglich, die Ports (siehe 3.6, Seite 45) der anderen AFS-DB-<br />
Serverprozesse zu benutzen und damit die Synchronisation der anderen<br />
Datenbankteile zu prüfen.<br />
Auf einer DB-Servermaschine müssen folgende Prozesse laufen, von denen jeder<br />
genau einen AFS-Datenbankteil verwaltet:<br />
14 Der Datenbank<strong>server</strong> mit der
38 3 Technische Details zu AFS<br />
3.4 Die Zelle<br />
3.4.1 Organellen<br />
bos<strong>server</strong> : Der “init”-Prozess aller AFS-Dienste.<br />
vl<strong>server</strong> : Der vl<strong>server</strong> verwaltet die Volume-Datenbank (VLDB), synchronisiert<br />
diese auch mit jeweils allen anderen erreichbaren vl<strong>server</strong>-<br />
Prozessen auf anderen DB-Servermaschinen. Mit dem Kommando<br />
vos kann auf vl<strong>server</strong>-Funktionen zugegriffen werden, Logging-<br />
Informationen fließen nach /var/log/VLLog.<br />
pt<strong>server</strong> : Der Protection-Server (pt<strong>server</strong>) verwaltet die AFSIDs (die AFSinternen<br />
User-IDs). Mit dem Kommando pts kann man auf pt<strong>server</strong>-<br />
Prozesse zugreifen. Für die Benutzung von pts ist es, immer wenn das<br />
entsprechende Unterkommando bestimmte Privilegien erfordert, nötig,<br />
dass der OpenAFS-Client läuft. Der pt<strong>server</strong> schreibt das Logfile<br />
/var/log/openafs/PtLog.<br />
bu<strong>server</strong> : Der Backup-Server (bu<strong>server</strong>) verwaltet die Backup-Datenbank<br />
(BDB).<br />
Läuft einer dieser Prozesse nicht (z.B. der pt<strong>server</strong>), muss er mit einem<br />
Kommando folgender Form aktiviert werden:<br />
admin@afs>bos create -<strong>server</strong> Server -instance pt<strong>server</strong> -type simple -cmd<br />
/usr/lib/openafs/pt<strong>server</strong><br />
Den Prozess, der die Oberaufsicht führt - den bos<strong>server</strong> - startet man so:<br />
root@host>/etc/init.d/openafs-file<strong>server</strong> start<br />
3.4.2 Das zentrale Zellenverzeichnis<br />
AFS ist zwar ein globales Dateisystem, basiert jedoch auf eigenständig administrierten<br />
“kleinen” Untereinheiten - den sogenannten Zellen. Zu jeder Zelle<br />
existiert mindestens ein Superuser (i.d.R. admin), der universellen Zugriff auf<br />
alle Server und damit auf alle Datenbanken hat.<br />
Die Zelle enthält folgende Objekte:<br />
• Die AFS-Datenbanken VLDB und PTDB (Volume-, Protection-DB)<br />
• AFS-File-Server-Maschinen, die jeweils nur genau einer Zelle zugeordnet<br />
sein können.<br />
• AFS-Client-Computer, die ebenfalls nur zu genau einer Zelle gehören<br />
können.<br />
• Volumes auf den File<strong>server</strong>n.<br />
Um auf eine Zelle zugreifen zu können, benötigt ein AFS-Client die IP-<br />
Adressen der Datenbank<strong>server</strong> dieser Zelle. Diese Liste aller öffentlichen<br />
AFS-Zellen Adressen erhielt der AFS-Client ursprünglich in Form der Datei<br />
/etc/openafs/CellServDB. Es existiert eine offizielle Version dieses Files, verwaltet<br />
von Grand.Central. Die Datei ist unter<br />
http://grand.central.org/dl/cellservdb/CellServDB<br />
zu finden und wird allen neu gepackten OpenAFS-Client .deb -Paketen in der<br />
aktuellen Version beigelegt. Will man die eigene Zelle öffentlich bekannt<br />
machen, findet man unter<br />
http://www.central.org
3.5 Der Cachemanager (AFS-Client) 39<br />
3.5 Der Cachemanager (AFS-Client)<br />
3.5.1 Der Client-Cache<br />
3.5.2 Kenngrößen des Caches<br />
3.5.2.1 Größe eines Cache-Eintrages<br />
den entsprechenden Kontakt. Die Liste erhebt keineswegs Anspruch auf Vollständigkeit.<br />
Es gibt verschiedene Gründe, sich nicht in die offizielle CellServDB<br />
eintragen zu lassen:<br />
• Die Adressen der Datenbank<strong>server</strong> der eigenen lokalen Zelle werden per<br />
AFSDB-Records im DNS bekannt gemacht. Das ist wohl die eleganteste<br />
Methode. Neuere Clients können sich so immer die aktuellen Informationen<br />
zu den Datenbank<strong>server</strong>n verschiedener Zellen besorgen - ein Update<br />
der CellServDB ist dann weder bei Grand.Central noch auf AFS-Clients<br />
nötig.<br />
• Die eigene Zelle befindet sich hinter einer NAT-Firewall und kann damit<br />
nicht von Rechnern aus dem Internet erreicht werden.<br />
• Die eigene Zelle hat eine dynamische IP-Adresse. Zellen in der offiziellen<br />
CellServDB benötigen eine statische IP-Adresse, der DNS-Name eines<br />
Servers reicht nicht aus.<br />
• Die eigene Zelle soll der Öffentlichkeit nicht bekannt sein. Man kann auf<br />
eine solche Zelle trotzdem zugreifen - schließlich kann man die Daten<br />
der eigenen Zelle auf seinem lokalen Client manuell eintragen.<br />
Auf jedem Rechner, der direkt 15 auf das AFS zugreift, muss eine Client-<br />
Software, AFS-Client oder auch Cachemanager genannt, installiert werden.<br />
Unter 2.10 ist beschrieben, wie ein Zugriff des AFS-Clients auf das AFS<br />
prinzipiell abläuft.<br />
Der Cache ist integraler Bestandteil des AFS. Der AFS-Client wird deshalb<br />
auch Cache-Manager genannt. Der Cache verwaltet eine Liste von Dateistückchen<br />
im Verzeichnis /var/cache/openafs mit einer zum Startzeitpunkt des<br />
Clients festzulegenden Maximalgröße. Nur root sollte Zugriff auf die Cache-<br />
Files haben. Dateien im AFS sind zwar auf dem Server und wahlweise auch<br />
bei der Übertragung über’s Netzwerk gut gesichert, auf der Cache-Partition des<br />
Clients liegen sie jedoch unverschlüsselt.<br />
Der Cache-Manager besteht aus mehreren arbeitsteiligen Prozessen, deren Namen<br />
immer mit afs anfangen. Diese Prozesse werden als Einheit mittels des<br />
OpenAFS-init-Skriptes /etc/init.d/openafs-client gestartet und auch wieder beendet.<br />
Je nachdem, welche Aktionen auf der Maschine geplant sind, sollte man die<br />
Chunksize (die Maximalgröße eines gecachten Dateistückchens) einstellen, um<br />
die Performance zu verbessern. Default ist 2 16 Byte <strong>für</strong> Caches auf Platte und<br />
in der RAM-Disk.<br />
• Sollen z.B. Programme compiliert oder umfangreiche Datenbestände aus<br />
kleinen Textdateien durchsucht werden (große Dateimengen), sind kleinere<br />
Chunks besser (z.B. 32kB).<br />
15 Es existierten NFS-Gateways <strong>für</strong> Rechner, auf denen kein AFS-Client läuft. Diese Gateways laufen<br />
jedoch nur unter Solaris. Außerdem ist die Kommunikation NFS-Gateway ↔ Client natürlich<br />
weder signiert noch verschlüsselt.
40 3 Technische Details zu AFS<br />
3.5.2.2 Anzahl der gleichzeitig benutzten Volumes<br />
3.5.2.3 Größe des Caches<br />
3.5.2.4 Volume-Cache<br />
• Werden z.B. Videos (große Dateien) abgespielt, sind größere Chunks<br />
günstiger (z.B. 4MB).<br />
Die Chunksize ist nur als volle Zweierpotenz wählbar und wird mit der afsd-<br />
Option -chunksize definiert. Gültige Größen sind 2 0 (1 Byte) bis 2 30 (1<br />
GByte).<br />
Configfile: Geändert wird sie, indem man den Parameter -chunksize Größe<br />
in den OPTIONS-String in der Datei /etc/openafs/afs.conf auf dem gewünschten<br />
AFS-Client einträgt. Größe ist der Logarithmus dualis aus der gewünschten<br />
Chunk-Größe.<br />
Normalerweise sollte es nicht nötig sein, mit vielen Volumes gleichzeitig zu<br />
arbeiten, da der AFS-Namensraum üblicherweise eher tief als breit ist.<br />
Beispiel: Wenn ein Verzeichnis viele Volumes (z.B. 1000) eingemountet sind,<br />
dann trifft man mit der Debian-Standardeinstellung von 70 auf Probleme. Wenn<br />
man Informationen über die Volumes in einem solchen Verzeichnis einholt (z.B.<br />
mittels ls -la), dann verdrängen die aktuelle gelesenen Volumes immer andere,<br />
deren Daten noch gecacht werden - der Cache ist also vollkommen wirkungslos.<br />
Configfile: In /etc/openafs/afs.conf muss man den Wert ändern, der hinter<br />
-volumes steht.<br />
Empfehlung: Wie gross die Anzahl sein muss, hängt direkt davon ab, wie die<br />
jeweilige zelle konstruiert ist.<br />
Die Größe des Caches wird in ganzen 1kB-Blöcken in der Datei /etc/openafs/cacheinfo<br />
definiert. Sie darf unter Unix 95% der Größe des Filesystems, auf<br />
dem der Cache liegt, nicht überschreiten - der Cachemanager würde dann mit<br />
einer Warnung den Start verweigern.<br />
Die optimale Größe des Caches ist von den auf dem jeweiligen Rechner erwarteten<br />
Zugriffsmustern auf das AFS sowie vom Betriebssystem abhängig. Hier<br />
einige Faustregeln:<br />
• Wenn nicht oft auf das AFS zugegriffen wird, kommt man mit einem<br />
Cache von 15 MB aus.<br />
• Wird unter Unix im AFS viel mit großen Dateien gearbeitet, ist eine separate<br />
Partition mit 10GB oder größer sinnvoll.<br />
• Unter 32-bittigem Windows ist die sinnvoll nutzbare Cachegröße auf<br />
1GB begrenzt.<br />
• Bei den unter 64-bittigem-Windows möglichen Cachegrößen sollen man<br />
beachten, dass dem Cache immer eine gewisse Menge physischer Speicher<br />
gegenüberstehen muss. Laut Jeffrey Altman sind 12GB Cache mit<br />
1GB RAM ok, 20GB Cache mit GB RAM sind dagegen zuviel. Eine<br />
Maschine mit 8GB RAM sollte hingegen eine Cachegröße von 60GB<br />
verkraften.<br />
Der AFS-Client kann nur eine bestimmte Anzahl an Volume-Informationen<br />
speichern. Glücklicherweise kann man diese maximale Anzahl beim Start mit
3.5 Der Cachemanager (AFS-Client) 41<br />
3.5.3 Verwaltung von Daten im Cache<br />
dem Parameter -volumes Größe einstellen.<br />
Relevant ist diese Maximalzahl z.B. dann, wenn man oft in Verzeichnissen mit<br />
sehr vielen Mountpoints arbeitet. Ist der Volume-Cache dann zu klein, ist jedes<br />
ls -la eine Qual.<br />
Je nach Verwendungszweck des Clients kann man den Unix-Cachemanager anweisen,<br />
die Chunks auf eine der folgenden Arten zwischenzuspeichern:<br />
Speicher : Der Cache im Speicher (afsd-Option -memcache) ist prinzipiell<br />
schneller, als einer, der auf Filezugriffe angewiesen ist. Aus noch ungeklärtem<br />
Grund ist das aber nicht der Fall. Man sollte von dieser Option<br />
vorerst absehen (Stand OpenAFS 1.2.11). Der Cache verliert mit einem<br />
Neustart des Cachemanagers natürlich seinen Inhalt.<br />
Festplatte : Ein Cache auf einer Plattenpartition kann um Größenordnungen größer<br />
sein, als ein Cache im Speicher (viele Gigabyte). Vor allem, wenn auf<br />
Server zugegriffen werden soll, zu denen nur eine geringe Netzwerkbandbreite<br />
existiert, bietet es sich an, große Caches zu benutzen, die auch<br />
einen Neustart überstehen. Auch wenn auf größere Datensätze mehr als<br />
einmal nur lesend zugegriffen wird, lohnt sich diese Art von Cache.<br />
RAM-Disk : Eine RAM-Disk ist die schnellste Cache-Variante, jedoch ist auch sie<br />
durch die maximale Hauptspeichergröße limitiert. Die Benutzung von<br />
speziellen Speicher-Filesystemen wie tmpfs ist nicht möglich - ext2/ext3<br />
ist Pflicht.<br />
Installiert man das Paket openafs-ramdisk .deb<br />
root@host>apt-get install instantafs-ramdisk<br />
wird immer beim Booten direkt vor dem Start des openafs-client eine<br />
Ramdisk unter /var/cache/openafs gemountet.<br />
Kommt ein Platten- oder RAM-Disk-Cache zum Einsatz, greift der Cachemanager<br />
auf das Verzeichnis /var/cache/openafs zu. An dieser Stelle muss er<br />
ein ext2-Dateisystem vorfinden. Es ist möglich, die root-Partition als Cache<br />
zu benutzen. Da der Cachemanager aber von einer bestimmten (einstellbaren)<br />
Größe des Caches ausgeht und diese Größe nicht im laufenden Betrieb<br />
anpassen kann, ist es günstiger, eine eigene Partition exklusiv als Cache zu<br />
benutzen.<br />
Es ist selbstverständlich auch möglich, ein per Loopback gemountetes Filesystem,<br />
also eine einzelne Datei als Cache zu benutzen. Auf dieses Weise ist es<br />
möglich trotz eines nicht unterstützten root-Filesystems (XFS, Reiser, JFS, ...)<br />
einen Plattencache auf der root-Partition zu betreiben.<br />
Bei Benutzung von Platten- oder Ramdisk-Cache sind folgende Dinge unbedingt<br />
zu beachten:<br />
1. Es dürfen nur die Filesystemtypen ext2 und ext3 benutzt werden. Alle<br />
anderen führen mit hoher Wahrscheinlichkeit zu Datenverlust!<br />
2. Wird die Cachepartition durch einen anderen Prozess gefüllt, so dass der<br />
Cachemanager keinen freien Speicher mehr findet, dann droht Datenverlust.<br />
Aus diesem Grund ist dringend eine eigene Partition oder eine RAM-<br />
Disk <strong>für</strong> den Cache zu empfehlen.
42 3 Technische Details zu AFS<br />
3.5.4 Cache-Kohärenz<br />
3.5.4.1 Eine Aktualitätsgarantie vom AFS-Server<br />
3.5.5 Sicherheitshinweise<br />
Unter Windows wird als Cache immer ein einzelnes File benutzt, auf das per<br />
Memory-mapped-IO zugegriffen wird.<br />
Empfehlung <strong>für</strong> Linux: Benutzen Sie eine Ramdisk. Die Installation des Paketes<br />
openafs-ramdisk .deb erledigt das automatisch.<br />
AFS garantiert die volle Kohärenz der Caches auf allen Clients. Fordert der<br />
Cachemanager ein File von einem Server an, so garantiert der Server damit,<br />
dass er den Client benachrichtigt, wenn das File geändert wird. Sobald ein<br />
File auf dem Server geändert wird, schickt der Server an alle Clients, die eine<br />
“callback”-Garantie erhalten haben, einen Hinweis, dass das entsprechende<br />
File zu verwerfen ist.<br />
Schreibt ein Client in ein File im AFS, so werden die Zugriffe im Cache-<br />
Manager gepuffert. Der Cachemanager kontaktiert den File<strong>server</strong>, wenn<br />
mindestens eine der 3 Voraussetzungen erfüllt sind:<br />
• Das File wurde mit close() geschlossen<br />
• Die Funktion fsync() wurde auf das File angewandt. Diese Funktion<br />
blockiert, bis der File<strong>server</strong> die Bestätigung geschickt hat, dass das File<br />
erfolgreich gespeichert wurde.<br />
• Der Cachemanager benötigt freie Chunk-Slots, findet aber keine.<br />
Es gibt jedoch keine Garantie, dass der Cachemanager nicht trotzdem zwischendurch<br />
Teile von Dateien auf den File<strong>server</strong> schreibt.<br />
Wird der Cachemanager heruntergefahren, kontaktiert er schnell noch alle File<strong>server</strong>,<br />
von denen ihm vorher Callback-Garantien gegeben wurden und gibt diese<br />
Garantien zurück. In jedem anderen Fall würden die File<strong>server</strong> sonst evtl.<br />
unnötig versuchen, den jeweiligen Cachemanager bei Änderungen zu kontaktieren.<br />
Der Datencache des AFS-Clients bleibt nach einem Herunterfahren des Clients<br />
erhalten - nur der stat()-Cache wird gelöscht. Soll später eine Datei benutzt<br />
werden, die sich noch im Cache befindet, muß der Client zumindest eine<br />
stat()-Anfrage an den entsprechenden File<strong>server</strong> richten. Dadurch erfährt<br />
er, ob die Datei verändert wurde. Wurde sie es nicht, kann auf die Datei aus<br />
dem Datencache zugegriffen werden.<br />
Das Callback-Prinzip verursacht Probleme mit AFS-Clients hinter NAT-<br />
Routern (siehe A.5, Seite 229).<br />
Im Gegensatz z.B. zu NFS-Netzen ist eine kompromittierte 16 AFS-Client-<br />
Maschine unkritisch, solange kein Nutzer daran arbeitet. Natürlich kann auch<br />
das beste Netzwerkdateisystem nichts ausrichten, wenn ein Angreifer eine<br />
Client-Maschine (root-)kompromittiert und z.B. Tastatureingaben (und damit<br />
Passwörter) mitloggt.<br />
Der Cache (siehe 3.5.1, Seite 39) ist u.U. ebenfalls ein Sicherheitsrisiko. Wird<br />
als Cache eine Festplattenpartition benutzt, so kann ein mit einer Knoppix<br />
bewaffneter Angreifer ohne Authentifikation an die im Cache abgelegten<br />
16 z.B. wenn das Root-Passwort bekannt wurde,
3.5 Der Cachemanager (AFS-Client) 43<br />
3.5.6 Konfigurationsoptionen<br />
3.5.6.1 Verschlüsselung<br />
3.5.6.2 Fakestat<br />
root@host>fs setcrypt on<br />
root@host>fs setcrypt off<br />
Dateifragmente. In dem Cache-Verzeichnis kann man zwar keine Verzeichnisstrukturen<br />
oder Dateinamen einfach erkennen, jedoch liegen die Dateien<br />
im Cache im Klartext. Der Angreifer scheitert natürlich, wenn der Cache<br />
auf einer RAM-Disk oder direkt im Speicher liegt - zumindest, wenn er kein<br />
root-Passwort hat.<br />
Es besteht ausserdem noch die Moeglichkeit, den Plattencache mit einem Wegwerfpasswort<br />
zu verschlüsseln und bei jedem Booten neu anzulegen. Das Paket<br />
loop-aes-utils .deb unterstützt so etwas.<br />
Der Administrator hat bei der Konfiguration des AFS-Clients etwas Spielraum.<br />
Hier soll auf einige wichtige Konfigurationsoptionen eingegangen werden.<br />
AFS signiert immer alle übertragenen Daten. Die Verschlüsselung ist jedoch<br />
optional. Verschlüsselung <strong>für</strong> den aktuellen Client anschalten:<br />
Verschlüsselung abschalten:<br />
Beide Kommandos werden nur vom lokalen Superuser akzeptiert. Durch eine<br />
Zeile in /etc/openafs/afs.conf.client lässt sich steuern, ob Verschlüsselung benutzt<br />
werden soll.<br />
Verschlüsselung wird nur bei authentifiziertem Zugriff (also, wenn ein gültiges<br />
Token vorhanden ist) benutzt.<br />
Empfehlung: Es sollte aktiviert werden, die Performance wird nur geringfügig<br />
von der Verschlüsselung gedrosselt.<br />
Configfile: Verschlüsselung wird bei Start des Cachemanagers aktiviert, wenn<br />
in der Datei /etc/openafs/afs.conf.client die Zeile AFS_CRYPT=true steht.<br />
Die afsd-Option -fakestat bewirkt, dass beim Aufruf der stat()-<br />
Funktion <strong>für</strong> einen Volume-Mountpoint das entsprechende Volume nicht extra<br />
angefordert wird. Dadurch sind u.U. gezeigte Metadaten (mtime, modebits, ...)<br />
nicht korrekt, der Zeitgewinn kann jedoch enorm sein.<br />
Beispiel: Das AFS-Verzeichnis /afs/cbs.mpg.de/user enthält Mountpoints zu<br />
Homedirectories, jedes in einem eigenen Volume, von 1000 (!) verschiedenen<br />
Benutzern. Das Kommando<br />
user@host>ls -la /afs/cbs.mpg.de/user<br />
(oder auch z.B. das Anzeigen des Verzeichnisses in einem Filemanager) würde<br />
jetzt bewirken, dass der AFS-Client Informationen zu 1000 verschiedenen<br />
Volumes auf möglicherweise vielen verschiedenen Servern anfordert. Mit der<br />
-fakestat-Option wird nur ein Verzeichnis ausgelesen, als Metadaten der<br />
Mountpoints werden Default-Werte (mtime=01.01.1970, modebits=0755, ...)<br />
benutzt. Die Option lässt sich im File /etc/openafs/afs.conf.client aktivieren.<br />
Configfile: Fakestat wird beim Start des Cachemanagers aktiviert, wenn in der<br />
Datei /etc/openafs/afs.conf.client die Zeile AFS_FAKESTAT=true steht.
44 3 Technische Details zu AFS<br />
3.5.6.3 Dynamic Root<br />
3.5.6.4 SetUID<br />
Empfehlung: Es sollte aktiviert werden.<br />
Die -dynroot-Funktion bewirkt, dass unter /afs nicht das AFS-Rootvolume<br />
gemountet wird. An seine Stelle tritt ein virtuelles Verzeichnis, das Mountpoints<br />
<strong>für</strong> jede Zelle enthält, die in /etc/openafs/CellServDB erwähnt wird. Dadurch<br />
wird der Administrator von der Aufgabe befreit, das AFS-Rootvolume an neue<br />
Versionen der CellServDB anzupassen.<br />
Configfile: Der dynamische AFS-Root wird beim Start des Cachemanagers aktiviert,<br />
wenn in der Datei /etc/openafs/afs.conf.client die Zeile AFS_DYNROOT=true<br />
steht.<br />
Empfehlung: In einem per NAT ans Internet angeschlossenen Netzwerk sollte<br />
es abgeschaltet sein. In jedem anderen Fall bringt es Komfort-Pluspunkte beim<br />
Zugriff auf andere Zellen, wenn es aktiviert ist.<br />
Auf jedem Client-Computer lässt sich <strong>für</strong> jede Zelle separat einstellen, ob dem<br />
SetUID-Bit an Dateien in Volumes der entsprechenden Zelle zu trauen ist.<br />
SetUID-Auswertung anschalten:<br />
fs setcell Zellenname -suid<br />
SetUID-Auswertung ausschalten:<br />
fs setcell Zellenname -nosuid<br />
3.6 Das AFS-Netzwerkprotokoll (Layer 3 und 4)<br />
Beide Kommandos werden nur von lokalen Superusern akzeptiert. Das SetUID-<br />
Bit bewirkt nur eine Änderung der UID auf dem lokalen Rechner, nicht der<br />
AFS-Identität im Netzwerk.<br />
Empfehlung: Es sollte nur dann aktiviert werden, wenn man plant, SetUID-<br />
Binaries über das AFS zur Verfügung zu stellen.<br />
Sowohl AFS-Server als auch Clients kommunizieren ausschließlich per UDP/IP<br />
und arbeiten mit festen Portadressen. Daraus folgen 2 Dinge:<br />
• Pro öffentlicher IP-Adresse kann maximal ein AFS-Server erreichbar<br />
sein. AFS kennt keine virtuellen 17 Server. Deshalb kann unter einer<br />
öffentlichen IP auch nur maximal eine Zelle erreichbar sein.<br />
• Zellen, deren File<strong>server</strong> innerhalb eines per NAT maskierten Netzwerkes<br />
stehen, haben praktisch keine Chance, global erreichbar zu sein. Das kann<br />
man höchstens umgehen, indem die File<strong>server</strong> in einer mit öffentlichen<br />
IP-Adressen ausgestatten DMZ aufgebaut werden und der NAT-Router<br />
zwischen internem Netzwerk und DMZ lediglich routet und nicht masqueriert.<br />
Damit AFS-Clients in einem durch einen NAT-Router ans Internet gekoppelten<br />
Netz auf AFS-Server außerhalb des Netzes zugreifen können, müssen einige<br />
Dinge beachtet werden (siehe 3.5.4, Seite 42). Die von AFS benutzten Ports<br />
sind in Tabelle 3.6 aufgeführt.<br />
17 wie z.B. bei HTTP-Servern üblich
3.6 Das AFS-Netzwerkprotokoll (Layer 3 und 4) 45<br />
Prozess UDP-Port Benötigt auf ...<br />
bos<strong>server</strong> 7007 allen AFS-Servern<br />
Cachemanager 7001 allen Rechnern, die auf das AFS auf Datei-<br />
(Kernelmodul)<br />
systemebene zugreifen müssen (hauptsächlich<br />
Arbeitsplatzrechner)<br />
file<strong>server</strong> 7000 allen AFS-File<strong>server</strong>n (Die Funktionen der<br />
Prozesse sind unter 3.8.4 erläutert.)<br />
vol<strong>server</strong> 7005<br />
pt<strong>server</strong> 7002 allen AFS-Datenbank<strong>server</strong>n (Die Funktionen<br />
der Prozesse sind unter 3.3 erläutert.)<br />
Diese Portnummerm werden <strong>für</strong> das udebug-<br />
Kommando benötigt.<br />
vl<strong>server</strong> 7003<br />
bu<strong>server</strong> 7021<br />
butc 7025-<br />
7032<br />
dem Backup-Server (siehe 5.2.3.1, Seite 102)<br />
Tabelle 3.1: UDP-Ports von AFS-Client und -Server. Hinweis: Jeder butc<br />
braucht nur einen Port. Läuft nur z.B.ein butc-Prozess, wird auch nur Port<br />
7025 benutzt.<br />
Einige weitere Ports werden <strong>für</strong> Dienste rund um das AFS benutzt, sind jedoch<br />
nicht direkt AFS-spezifisch bzw. ausschliesslich lokal. In Tabelle 3.6 sind sie<br />
aufgelistet.<br />
Richten Sie Firewalls, die AFS-bezogene Pakete auf ihrem Weg zwischen<br />
Client und Server bzw. von Server zu Server passieren, entsprechend ein. Es<br />
sollte kein NAT zwischen Rechnern einer Zelle zum Einsatz kommen.<br />
Der AFS-Client braucht <strong>für</strong> Lesezugriff auf eine AFS-Zelle nur eine Information:<br />
den Namen der Zelle, zu der er gehört 18 . Für Schreibzugriffe benötigt der<br />
Client den Namen der Kerberos-Realm. Der Name der Kerberos-Realm kann<br />
u.U. vom Zellennamen abweichen. Dann sind zusätzliche Informationen in /etc/krb5.conf<br />
nötig. Auf diesen speziellen Fall wird diese Dokumentation jedoch<br />
nicht eingehen (siehe 2.3, Seite 18).<br />
Die Datenbanken des AFS und das Netzwerkprotokoll sind fest auf IPv4 eingestellt<br />
und können derzeitig nicht mit IPv6-Adressen umgehen.<br />
3.6.1 Server/Clients mit mehreren IP-Adressen/Netzwerkkarten<br />
Ist ein AFS-Client oder Server mit mehreren IP-Adressen ausgestattet (z.B.<br />
weil er gleichzeitig ein Router ist), kann es wünschenswert sein, die AFS-<br />
Kommunikation auf bestimmte Interfaces zu beschränken. AFS-Prozesse<br />
binden sich immer an alle IP-Adressen - das läßt sich nicht ändern.<br />
Allerdings ist es möglich, Hinweise zu geben, welche Adressen eines Rechners<br />
zu benutzen sind. Die zu benutzenden IP-Adressen schreibt man dazu (eine<br />
numerische IP-Adresse pro Zeile, jede Zeile durch \n terminiert) in die Datei<br />
NetInfo. Das korrekt Verzeichnis fuer dieses File zu bestimmen, ist etwas tricky<br />
und von der Umgebung abhängig:<br />
Debian Sarge (OpenAFS 1.3+) : /etc/openafs/<strong>server</strong>-local/NetInfo<br />
Debian Woody (OpenAFS 1.2) : /var/lib/openafs/NetInfo<br />
18 Ältere AFS-Client-Implementationen benötigen zusätzlich die Datei /etc/openafs/CellServDB,<br />
um die DB-Server der Zelle zu finden.
46 3 Technische Details zu AFS<br />
Protokoll Port Erklärung<br />
DNS 53 Sobald AFSDB-Records benutzt werden, was<br />
unter InstantAFS zwingend ist, wird DNS unbedingt<br />
benötigt.<br />
Achtung:Es geht wirklich kein anderer Namensdienst<br />
(NIS, NIS+, LDAP, ...).<br />
Kerberos5 88 Kerberos ist dann nötig, wenn authentifizierter<br />
Zugriff auf das AFS statfinden soll (sprich:<br />
fsync 2040/tcp<br />
(nur lokal)<br />
ptdb-nss 6998/udp<br />
(nur lokal)<br />
praktisch immer).<br />
Über diesen TCP-Kanal kommunizieren unter<br />
OpenAFS die Prozesse vol<strong>server</strong> und<br />
file<strong>server</strong>. z.B. kann der vol<strong>server</strong> so den<br />
file<strong>server</strong> anweisen, eine RO-Instanz zu sper-<br />
ren, wenn diese gerade upgedatet wird.<br />
Auf diesem Port lauscht ein lokaler Daemon,<br />
der <strong>für</strong> die Auslösung von AFS-Benutzern zu<br />
AFSIDs und umgekehrt zuständig ist (siehe<br />
A.2, Seite 224).<br />
acall 6999/tcp Auf diesem Port wartet auf jedem acall-<br />
Server (siehe 7.6.2, Seite 149) das Programm<br />
instantafs.acall-<strong>server</strong> auf Kommandos.<br />
Tabelle 3.2: TCP/UDP-Ports, die zusätzlich zu den Standard-AFS-Ports<br />
üblicherweise zum Einsatz kommen.<br />
Transarc-Pfade : /usr/vice/etc/NetInfo<br />
Das hat <strong>für</strong> AFS-Client und -Server-Prozesse unterschiedliche Auswirkungen:<br />
AFS-File<strong>server</strong> : File<strong>server</strong> registrieren sich bei jedem Neustart in der VLDB. Nur die<br />
angegebenen Adressen werden in der VLDB registriert.<br />
AFS-DB-Server : Datenbank<strong>server</strong> benutzen nur angegebene Adressen zur UBIK- Kommunikation.<br />
AFS-Clients : AFS-Clients senden normalerweise alle ihre IP-Adressen an File<strong>server</strong>,<br />
mit denen sie kommunizieren. Die File<strong>server</strong> benutzen dann diese Adressen,<br />
um im Falle von Änderungen an Daten im AFS-Cache des Clients<br />
Cache-Bereiche <strong>für</strong> ungültig zu erklären (siehe 3.5.4, Seite 42). Mit dem<br />
NetInfo-file kann man die Adressen einschränken, über die Callbacks entgegengenommen<br />
werden sollen.<br />
Hinweise:<br />
• Das NetInfo-File ändert nichts an den Port-Bindings. Alle anderen Adressen<br />
können trotzdem benutzt werden - die jeweiligen Ports bleiben an allen<br />
Netzwerkinterfaces offen. Wenn die entsprechenden Adressen wirklich<br />
geschützt werden sollen, muß ein Paketfilter her.<br />
• Nach einer Änderung an NetInfo sind die AFS-Prozesse auf dem entsprechendem<br />
Rechner neu zu starten (Rechnerneustart geht natürlich auch).<br />
• Clients, die bereits von einer Adresse eines Servers wissen, die später auf<br />
diesem Server durch Benutzung von NetInfo deaktiviert wird, benutzen<br />
diese Adresse auch weiterhin. Benutzer an solchen Clients merken keinen<br />
Unterschied zu vorher. Mit dem Neustart eines solchen Clients (oder dem<br />
Neustart des Cachemanagers auf ihm) werden dann jedoch nur noch die
3.7 Das Sicherheitsmodell 47<br />
3.7 Das Sicherheitsmodell<br />
3.7.1 Der AFS-Key<br />
3.7.2 Authentifikation<br />
gewünschten Server-IP-Adressen benutzt.<br />
• Manchmal funktioniert NetInfo nicht wie gewünscht. In diesem Fall legt<br />
man die Datei NetRestrict an und trägt dort die Adressen ein, die man<br />
explizit nicht veröffentlichen will.<br />
Die Sicherheit einer AFS-Zelle basiert darauf, dass ein zellenspezifischer<br />
symmetrischer Schlüssel 19 geheim bleibt. Pro Zelle existiert genau ein solcher<br />
Schlüssel. Der Schlüssel muss auf jedem File- und Datenbank-Server der Zelle<br />
im Klartext liegen. Die große Schwäche von AFS ist, dass, wenn dieser Schlüssel<br />
kompromitiert wurde, die ganze Zelle (und damit jeder einzelne Server) als<br />
geknackt gilt 20 .<br />
Der saubere 21 Weg ist dann, die Zelle mit einem neuen AFS-Key komplett neu<br />
zu installieren. Ansonsten muß man auf andere Weise sicherstellen, daß von<br />
einem Angreifer, dem dieser Schlüssel in die Hände fiel, keine Hintertüren installiert<br />
wurden.<br />
Die Authentifikation von Benutzern am AFS erfolgt ausschließlich über Kerberos.<br />
In den Anfangstagen von AFS kam da<strong>für</strong> ein spezieller Kerberos-Server<br />
(KA-Server) zum Einsatz. Heute sind auch andere Kerberos-Server nutzbar.<br />
Hier eine Liste, die keinen Anspruch auf Vollständigkeit erhebt:<br />
• AFS-ka<strong>server</strong>, der Original-AFS-Authentifikations<strong>server</strong>. Er basiert<br />
auf einer Vorversion des Kerberos4-Protokolls und sollte bei Neuinstallationen<br />
nicht mehr verwendet werden.<br />
• MIT-Kerberos5, die derzeitige Kerberos-Version vom MIT. In dieser Dokumentation<br />
wird ausschließlich auf diese Kerberos-Implementation eingegangen.<br />
• Heimdal-Kerberos - die Kerberos-Implementation der KTH Schweden<br />
• Andere Kerberos-Implementationen (z.B. von Microsoft)<br />
Alle Kerberos5-Server benötigen derzeitig noch einen Ticket-Konverter (krb524d 22<br />
bei MIT-Kerberos5), der auf allen Kerberos5-Servern laufen muss, da AFS intern<br />
nur mit Kerberos-4-Tickets arbeiten kann. Im Prinzip kann AFS jedoch mit<br />
allen ticketbasierten Authentifikationsprotokollen umgehen (z.B. GSSAPI), es<br />
muss nur jeweils eine Methode zur Verfügung gestellt werden, das Ticket <strong>für</strong><br />
den AFS-Dienst in einen Token umzuwandeln.<br />
Ziel der gesamten Prozedur ist dabei immer, ein gültiges AFS-Token zu erhalten.<br />
Das Token ist nötig, um authentifizierten Zugriff auf das Filesystem zu<br />
haben.<br />
19 der des-cbc-crc-Kerberos-Schlüssel des afs-Principals<br />
20 Abhilfe würden separate Schlüssel <strong>für</strong> jeden einzelnen Server schaffen (so wie unter DFS, dem<br />
aus anderen Grund gescheiterten Nachfolger von AFS) - das ist jedoch im AFS so nicht machbar.<br />
21 um evtl. installierte Hintertüren auszuschalten<br />
22 kerberos 5 to kerberos 4 daemon
48 3 Technische Details zu AFS<br />
3.7.2.1 Der Ablauf einer Authentifikation unter AFS<br />
user@host>kinit Benutzername<br />
3.7.2.2 Zeitlich begrenzte Authentifikation<br />
Eine Authentifikation läuft nun wie folgt ab:<br />
1. Der Benutzer fordert vom Kerberos-Server ein TGT (Ticket Granting<br />
Ticket). Das geht per PAM (mit dem libpam_krb5.so-Modul) oder manuell,<br />
mit dem folgendem Befehl 23 :<br />
Dieser Schritt ist die eigentlich Authentifikation.<br />
Das TGT berechtigt dazu, vom KDC 24 Tickets <strong>für</strong> spezielle Dienste anzufordern<br />
- solange das TGT nicht abgelaufen ist. Die Ablaufzeit eines<br />
angeforderten Tickets ist immer mit der des TGT identisch.<br />
2. Der Benutzer fordert ein Ticket <strong>für</strong> den Dienst afs in einer bestimmten<br />
Realm vom Kerberos-Server an.<br />
3. Das Ticket <strong>für</strong> afs wird in einen Token umgerechnet, der im Kernel des<br />
Clients abgelegt wird. Es können auch Tokens mehrerer Zellen gleichzeitig<br />
im Kernel liegen - mehrere Tokens der selben Zelle können nicht<br />
gleichzeit von einer Anwendung benutzt werden. Der Kernel kann jedoch<br />
Tokens mehrere Benutzer (auch aus der gleichen Zelle) enthalten.<br />
Die Schritte 2 und 3 können mit dem Kommando<br />
aklog 25 manuell ausgeführt werden.<br />
Eine einfachere Möglichkeit, mit Tokens zu arbeitet bietet tokenmgr, ein Perl-<br />
Skript, das im User-Primer genauer beschrieben ist. Außerdem sollten beim<br />
Einloggen die PAM-Module libpam_krb5.so und libpam_openafs_session.so<br />
die Authentifikation automatisch erledigen und TGT sowie anschließend das<br />
Token automatisch holen.<br />
Die Authentifikation geschieht normalerweise vom Benutzer unbemerkt während<br />
der Anmeldung (z.B. am Display-Manager kdm). Die pam-Module<br />
pam_krb5.so und pam_openafs_session.so sorgen da<strong>für</strong>. Da <strong>für</strong> die Authentifikation<br />
per Kerberos das Benutzerpasswort zwingend notwendig ist, kann eine<br />
Anmeldung am AFS auch nur dann automatisch erfolgen, wenn das Passwort 26<br />
zur Verfügung steht.<br />
Kerberos5 ist ein ticketbasiertes Authentifikationssystem. Tickets sind zeitlich<br />
nur begrenzt gültig. Der Administrator hat eine sinnvolle Gültigkeitsdauer <strong>für</strong><br />
die ausgestellten Tickets festzulegen. Dabei sind primär die maximale Gültigkeit<br />
von folgenden Tickets wichtig:<br />
TGT : Dieses Ticket berechtigt zum Anfordern der eigentlich interessanten<br />
Service-Tickets. Es wird benötigt, um ein afs-Ticket,also ein Ticket des<br />
Services afs, anzufordern.<br />
afs : Aus dem afs-Ticket wird der eigentlich interessante AFS-Token extrahiert.<br />
Der extrahierte Token läuft zum selben Zeitpunkt ab, wie das afs-<br />
Ticket.<br />
23 kinit wird auch von tokenmgr (siehe 9.2.23, Seite 203) benutzt<br />
24 Key Distribution Center - also ein Kerberos-Server<br />
25 aklog ist ein Zusatzprogramm aus dem AFS-Kerberos5-Migration-Kit (openafs-krb5 .deb ),<br />
AFS basiert eigentlich auf Kerberos4.<br />
26 Man kann auch sog. Keytabs einsetzen. Diese Methode ist <strong>für</strong> Benutzerlogins jedoch unpraktisch.
3.7 Das Sicherheitsmodell 49<br />
3.7.2.3 PAGs<br />
Basierend auf der Annahme, dass die meisten Arbeitnehmer ihren Tag im Büro<br />
relativ regelmäßig beginnen, ist 26h eine sinnvolle Gültigkeitsdauer. So kann<br />
man sich früh am Rechner einloggen und auch einmal (was jedoch nicht empfohlen<br />
ist) am Abend nur die Oberfläche sperren anstatt sich auszuloggen. Am<br />
nächsten Morgen ist dann das Ticket noch gültig - evtl. nachts laufende Programme<br />
wurden nicht durch ein ungültiges Token unterbrochen. Entsperrt der<br />
Benutzer nun die grafische Oberfläche, so kann das eingegebene Passwort verwendet<br />
werden, um eines neues TGT zu holen und daraus ein neues Token zu<br />
erzeugen.<br />
Die Gültigkeitsdauer von Kerberos5-Tickets beträgt per Default 10h, lässt sich<br />
aber beeinflussen (siehe 3.10.7, Seite 65).<br />
Eine PAG (Process Authentication Group) ist eine Gruppe zusammengehöriger<br />
Prozesse, die auf gemeinsame Authentifikationsinformationen zugreifen können.<br />
Unter Linux arbeitet ein AFS-Benutzer, der sich z.B. per XDM, KDM oder SSH<br />
einloggt, üblicherweise in einer PAG.<br />
Diese Prozesse besitzen dann alle Tokens gemeinsam - mit dem Effekt, dass<br />
wenn der Token in einem Prozess der Gruppe manipuliert 27 wird, es sich auch<br />
auf alle anderen Prozesse der Gruppe auswirkt.<br />
Unter OpenAFS werden PAGs durch die Mitgliedschaft in bestimmten 28 Unix-<br />
Gruppen gebildet.<br />
3.7.2.3.1 Wie weiss man, ob manuser@host>tokenmgr in einer PAG ist? -c<br />
3.7.2.3.2 Wozu das alles? Ohne PAGs wird ein Token der numerischen UID<br />
des Prozesses zugeordnet, der den Token angefordert hat. Alle anderen Prozesse<br />
mit der selben UID (die nicht in einer PAG sind!) können dann auf den Token<br />
zugreifen und im AFS mit diesem Token Dateien lesen/schreiben.<br />
Kritisch ist das z.B. in folgenden Fällen:<br />
• wenn unter einer UID (z.B. root) mehrere Serverprozesse (z.B. Web- und<br />
FTP-Server) mit unterschiedlichen Rechten (also unterschiedlichen AFS-<br />
Token) laufen sollen<br />
• wenn ein Benutzer mit su seine UID wechselt und dabei jedoch weiterhin<br />
authentifiziert auf das AFS Zugreifen will<br />
• wenn Kommandos mit anderen Rechten ausgeführt werden sollen, als die<br />
gerade benutzten, man jedoch trotzdem mit anderen Programmen weiterarbeiten<br />
will<br />
3.7.2.3.3 Wie benutzt man PAGs? Normale Benutzer, die nur eMail lesen<br />
wollen, werden mit PAGs nicht viel zu tun haben. Das OpenAFS-PAM-Modul<br />
sorgt beim Einloggen (z.B. per kdm oder an der Konsole) da<strong>für</strong>, dass die Session<br />
in einer PAG ausgeführt wird. Auch das <strong>für</strong> InstantAFS modifizierte ssh .deb -<br />
Paket sorgt <strong>für</strong> eine PAG beim Login.<br />
27 z.B. aktualisiert oder gelöscht<br />
28 Die Numerische GID dieser Gruppen haben bestimmte mathematische Eigenschaften.
50 3 Technische Details zu AFS<br />
user@host>su -<br />
Weitere Informationen findet man in der InstantAFS-<strong>Anleitung</strong> <strong>für</strong> Benutzer.<br />
3.7.2.3.4 Mehrere Tokens benutzen Eine PAG bindet eigentlich keinen Token<br />
direkt an eine Gruppe von Prozessen, sondern einen Tokencontainer. Da<br />
man auch mehrere Tokens (<strong>für</strong> unterschiedliche Zellen) gleichzeitig benutzen<br />
kann, macht es sinn, diese alle an eine PAG zu binden. Somit ist die PAG ein<br />
Gruppe von Prozessen mit dem selben Token-Behälter.<br />
3.7.2.3.5 Unter Linux zu beachten<br />
Ungewollte PAG-Mitgliedschaft Folgendes Szenario sei gegeben:<br />
Ein Benutzer ist auf einem Rechner eingeloggt, befindet sich in einer PAG und<br />
muß einen Serverprozess neu starten. Er wird zu root<br />
bleibt aber weiterhin in der PAG und starten den wichtigen Serverprozess neu:<br />
root@host>/etc/init.d/apache force-reload<br />
Der neue Serverprozess läuft jetzt in der PAG des Benutzers, hat also i.d.R.<br />
Rechte, die er nicht haben sollte.<br />
Lösungen:<br />
• Unter Kernel 2.4 schafft unpagsh (Paket openafs-tools .deb ), das jedoch<br />
nur als root eingesetzt werden kann, Abhilfe:<br />
user@host>su -<br />
root@host>tokenmgr -c<br />
We’re inside a PAG<br />
root@host>unpagsh<br />
root@host>tokenmgr -c<br />
No PAG detected.<br />
root@host>/etc/init.d/apache stop root@host>/etc/init.d/apache start<br />
Der Serverprozess läuft jetzt ohne besondere AFS-Rechte.<br />
• Ab Kernel 2.6 funktioniert das jedoch nicht mehr. Hier muss man sich<br />
durch Tricks behelfen - z.B. so:<br />
user@host>su -<br />
root@host>echo ’/etc/init.d/apache stop;/etc/init.d/apache start’ | at now<br />
Das geht natürlich nur solange, wie der at-Daemon selbst nicht innerhalb<br />
einer PAG läuft.<br />
Ungewollte Mitgliedschaft in Unix-Gruppen Wird eine neue PAG erzeugt<br />
(was jeder Benutzer beliebig oft machen darf), dann werden dem entsprechenden<br />
Prozess 2 neue GIDs in die Liste der Gruppenmitgliedschaften geschrieben.<br />
Diese GIDs kommen aus dem Bereich 0x7F 00 bis 0xBF 00 , haben aber gleiche<br />
Autorisationsfunktionen wie andere GIDs. Sind diese GIDs zufällig schon<br />
vergeben, dann ist der entsprechende Prozess plötzlich Mitglied in einer Unix-<br />
Gruppe und erhält dadurch u.U. Rechte, die ihm gar nicht zustehen. Durch geschicktes<br />
Erstellen von PAGs kann das ein Angreifer auch in gewünschte Bahnen<br />
lenken - also Mitglied einer bestimmten Gruppe werden.
3.7 Das Sicherheitsmodell 51<br />
3.7.3 Autorisation<br />
3.7.3.1 Zugriff auf das Filesystem<br />
3.7.3.2 Die verschiedenen ACL-Rechte<br />
Es hat sich gezeigt, dass vor allem die Praxis, jedem Benutzer auch gleich eine<br />
Gruppe zuzuweisen vor allem bei größeren Netzen dazu führt, dass die unerreichbar<br />
hohen GIDs plötzlich vergeben werden und mit dem Bereich der PAGs<br />
kollidieren.<br />
Lösung: GIDs aus dem Bereich 0x7F 00 bis 0xBF 00 nicht benutzen. In einer<br />
AFS-Zelle werden Unix-Gruppen <strong>für</strong> Filezugriffe sowieso nicht ausgewertet.<br />
AFS kennt nur Rechte <strong>für</strong> Verzeichnisse. Die Files in einem Verzeichnis erben<br />
automatisch die Rechte des Verzeichnisses. Sollen Dateien in einem Verzeichnis<br />
mit unterschiedlichen Rechten ausgestattet werden, können diese aber in<br />
andere Verzeichnisse verschoben werden und durch einen symbolischen Link<br />
im eigentlichen Verzeichnis ersetzt werden.<br />
Es existieren einige Besonderheiten, die bestimmten Nutzern implizit Rechte<br />
verleihen, die sie laut ACLs eigentlich gar nicht hätten (siehe 3.7.3.3, Seite 52).<br />
Zugriffe auf das Filesystem werden durch ACLs (Access Control Lists) geregelt.<br />
ACLs bestehen aus einer Liste von Benutzern oder AFS-Gruppen (siehe<br />
3.7.3.4, Seite 54), denen jeweils bestimmte Rechte zugeordnet sind. Jedem Verzeichnis<br />
sind 2 ACLs zugeordnet: eine positive (normal rights) und eine negative<br />
(negative rights). Beim Auswerten des Zugriffsrechts eines Benutzers auf<br />
eine Datei wird zuerst die positive ACL des Verzeichnisses abgearbeitet und alle<br />
Rechte, die am entsprechenden Benutzer bzw. an Gruppen, in denen er Mitglied<br />
ist, stehen, ihm angerechnet. Analog wird dann die negative ACL abgearbeitet,<br />
die dort jeweils gefundenen Rechte, von den in der positiven ACL evtl. erworbenen<br />
abgezogen.<br />
Das Kommando achmod (siehe 9.2.8, Seite 196) kann benutzt werden, um<br />
ACLs von Verzeichnissen anzuzeigen und zu manipulieren.<br />
Sicherheitstechnisch ist es nicht zu empfehlen, mit negativen Rechten zu arbeiten,<br />
da dadurch die Rechtelage relativ unübersichtlich wird.<br />
Wird ein Verzeichnis neu angelegt, so erbt es beide ACLs des Verzeichnisses, in<br />
dem es angelegt wurde. Wird ein Volume neu angelegt, so enthält die positive<br />
ACL des root-Directories dieses Volumes nur einen Eintrag:<br />
system:administrators => rlwidka<br />
(Mitglieder des Zellensuperusergruppe dürfen alles)<br />
Die Rechte in den ACLs des AFS sind feiner einstellbar, als im klassischen<br />
Unix-Schema (rwx). Die verfügbaren Rechte sind in Tabelle 3.3 aufgeführt.<br />
Tabelle 3.4 zeigt die <strong>für</strong> bestimmte Aktionen benötigten Rechte.<br />
Hinweise:<br />
• Gelegentlich gibt es Interesse an ”Append-only”-Funktionalität im AFS<br />
(vergleichbar mit dem ext2-a-Attribut). Das ist jedoch prinzipiell nicht<br />
möglich, da durch die Organisationsstruktur (Stichwort: Chunks) des<br />
Cache-Managers dazu praktisch immer read- und write-Rechte auf Serverseite<br />
nötig wären, auch wenn der Cache-Manager ”Append-only”<br />
simmulieren könnte.
52 3 Technische Details zu AFS<br />
Recht Erklärung<br />
l list Dieses Recht erlaubt, die Einträge in einem Verzeichnis zu listen (readdir()) und<br />
durch das Verzeichnis hindurchzuwechseln. Außerdem können Metadatan von Unterverzeichnissen<br />
des Verzeichnisses mit stat() und Inhalte von symbolischen Links<br />
mit readlink() ausgelesen werden.<br />
r read read erlaubt, Dateien sowie deren Metadaten (stat()) im entsprechenden Verzeichnis<br />
zu lesen.<br />
Um den Befehl fs listquota zu benutzen, muß man im Grundverzeichnis des entsprechenden<br />
Volumes dieses Recht besitzen.<br />
w write Mit write erhält man das Recht, in Dateien des entsprechenden Verzeichnisses beliebig<br />
zu schreiben.<br />
i insert Dieses Recht ermöglicht es, Dateien anzulegen und in diese zu schreiben, schließt jedoch<br />
nicht das Recht ein, sie später wieder zu ändern. D.h. nach close() auf eine<br />
frisch angelegte Datei ist das insert-Recht <strong>für</strong> dieses File wertlos.<br />
Dieses Recht ist z.B. <strong>für</strong> das /incoming-Verzeichnis eines FTP-Servers nützlich.<br />
Hinweis: Der Windows-XP-Client hat derzeitig (Stand OpenAFS-1.2.11) ein Problem<br />
mit dieser Funktion - um eine Datei einzufügen ist unter Windows immer auch das<br />
write-Recht nötig.<br />
d delete Mit diesem Recht ist es möglich, Dateien und Verzeichnisse in einem Verzeichnis zu<br />
löschen.<br />
k lock lock berechtigt dazu, Dateien im Verzeichnis zu sperren (flock()). Solche Sperren<br />
werden auf dem Server gesetzt und sind damit netzwerkweit gültig. Bestimmte Programme<br />
benötigen diese Funktion, um lock-Files benutzen zu können.<br />
a admin Dieses Recht ermöglicht das Ändern der ACLs sowie das Anlegen und Löschen von<br />
Volume-Mountpoints (nur wenn man auch die i bzw. d -Rechte hat) innerhalb eines<br />
Verzeichnisses.<br />
Tabelle 3.3: Die verschiedenen Rechte, die mit AFS-ACLs vergeben werden können<br />
3.7.3.3 Zusätzliche Rechte ausserhalb der ACLs<br />
Es gibt noch weitere reservierte Rechte, die jedoch auf File<strong>server</strong>n, die nicht<br />
speziell modifiziert wurden, keine Bedeutung haben.<br />
Es existieren einige Ausnahmen der Rechteverwaltung, die die vermuteten<br />
Rechte aus den ACLs beeinflussen:<br />
Admins dürfen alles : Alle Mitglieder der Gruppe system:administrators dürfen unabhängig<br />
von den ACLs immer alles. Mit dem Parameter -implicit des<br />
File<strong>server</strong>-Prozesses (file<strong>server</strong>) können diese implizit gewährten<br />
Rechte beschränkt werden. Das a-Recht wird jedoch trotz evtl.<br />
angegebenem -implicit immer gewährt.<br />
Volume-Besitzer : Der Besitzer eines AFS-Volumes (sprich: Der AFS-Benutzer mit der<br />
PTS-ID, die der Owner-UID des root-Verzeichnisses eines Volumes entspricht)<br />
besitzt implizit das a-Recht <strong>für</strong> alle Verzeichnisse des Volumes.<br />
Verzeichnis-Besitzer : Der Besitzer eines AFS-Verzeichnisses bekommt vom OpenAFS-1.2-<br />
File<strong>server</strong> immer implizit das a-Recht.<br />
Achtung: Dieses Verhalten war ein unerwünschter Nebeneffekt der<br />
Volume-Besitzer-Ausnahme. Ab OpenAFS-1.3 ist diese Ausnahme<br />
hinfällig.<br />
Datei-Besitzer : Hat man in einem Verzeichnis das i-Recht inne, erhält man implizit ein<br />
Schreibrecht <strong>für</strong> alle Dateien, die einem in diesem Verzeichnis gehören.
3.7 Das Sicherheitsmodell 53<br />
Aktion<br />
Datei, Link oder Verzeichnis anlegen<br />
Datei lesen<br />
Inhalt einer Datei verändern<br />
Daten an eine Datei anfügen<br />
Dateieigenschaften abfragen (stat())<br />
Datei oder Link löschen (unlink())<br />
r<br />
√<br />
√<br />
√<br />
l<br />
√<br />
√<br />
√<br />
√<br />
√<br />
√<br />
w<br />
√<br />
√<br />
i<br />
√<br />
√<br />
d<br />
√<br />
k a<br />
Verzeichnis löschen (zu löschendes Verzeichnis)<br />
Verzeichnis löschen (Parent-Directory)<br />
Mountpoint anlegen<br />
Mountpoint entfernen<br />
ACLs im Verzeichnis ändern<br />
√<br />
√<br />
√<br />
√<br />
√<br />
√<br />
√<br />
√<br />
√<br />
√<br />
Tabelle 3.4: Die verschiedenen Rechte, die <strong>für</strong> bestimmte Tätigkeiten im AFS benötigt werden<br />
u+r : Lesezugriffe auf Dateien ohne Bit 8 (u+r) sind nicht möglich.<br />
u+w : Schreibzugriffe auf Dateien ohne Bit 7 (u+w) sind nicht möglich.<br />
Datei-Modebits ändern : Die Modebits 0 bis 8 (ugo+rwx) einer Datei lassen sich nur ändern, wenn<br />
der jeweilige Benutzer die die Rechte w und l an dem Verzeichnis hat, in<br />
dem die Datei liegt.<br />
Verzeichnis-Modebits ändern : Die Modebits 0 bis 8 (ugo+rwx) eines Verzeichnisses lassen sich nur ändern,<br />
wenn der jeweilige Benutzer die Rechte l, i und d an diesem Verzeichnis<br />
hat.<br />
insert-Besonderheiten : Der File<strong>server</strong> erlaubt das Lesen von eigenen Dateien 29 , wenn das i-Recht<br />
gewährt wird. Das sollte vor allem bei der Absicherung einer global erreichbaren<br />
Zelle beachtet werden.<br />
Der Cache-Manager kennt diese Besonderheit allerdings nicht und verweigert<br />
plichtbewusst den Zugriffe auch auf eigene Dateien in einem solchen<br />
Verzeichnis, wobei der lokale Root natürlich direkt den Cache auslesen<br />
kann...<br />
Der Cache-Manager (also der AFS-Client) beachtet auch einige Metadaten von<br />
Dateien:<br />
• Dateien im AFS sind nur dann ausführbar, wenn die Modebits 6 und 8<br />
(u+rx) aktiviert gesetzt sind - Bit 6 alleine reicht nicht.<br />
• Wenn die Auswerdung von SetUID-Bits <strong>für</strong> die jeweilige Zelle aktiviert<br />
ist (und nur dann), wird das wie unter Unix üblich gehandhabt (Ausführung<br />
geschieht mit den Privilegien der Owner-ID der Datei). Dabei ist<br />
jedoch zu beachten, dass sich <strong>für</strong>als SetUID gestartete Programme lediglich<br />
die lokale UID ändert, nicht die AFS-Identität.<br />
Hinweise:<br />
• Das Sticky-Bit (t), die GID einer Datei sowie die unteren 6 Modebits<br />
(go+rwx) werden komplett ignoriert.<br />
• Die Bits 6 bis 8 (u+rwx) werden <strong>für</strong> Verzeichnisse komplett ignoriert.<br />
• Neue AFS-Dateien und -Verzeichnisse erhalten als User-ID die PTS-ID<br />
die dem Token des aktuellen Nutzers zugeordnet ist.<br />
29 Dateien, deren Besitzer mit der AFSID des aktuellen Tokens übereinstimen
54 3 Technische Details zu AFS<br />
3.7.3.4 AFS-Gruppen<br />
3.7.3.5 Serversteuerung<br />
• Neue AFS-Dateien erhalten die GID der primäre Gruppe des aktuellen<br />
Benutzers als GID zugeordnet.<br />
Die PTDB einer jeden Zelle enthält Gruppendefinitionen, die mit dem Kommando<br />
pts eingesehen und verändert werden können. Gruppen können genau<br />
wie Benutzer in AFS-Verzeichnis-ACLs benutzt werden. Der PT-Server verwaltet<br />
Zugriffsrechte <strong>für</strong> die einzelnen AFS-Gruppen und User. Neben den Zellensuperusern<br />
können unter AFS auch einfache Benutzer Gruppen anlegen und<br />
verwalten.<br />
Ab der OpenAFS-Version 1.3 wird es die Möglichkeit geben, Gruppen als Mitglieder<br />
in andere Gruppen aufzunehmen. Gruppen, die andere Gruppen enthalten,<br />
heissen supergroups.<br />
Einfache Benutzer sind bei der Wahl des Namens von neu anzulegenden Gruppen<br />
jedoch eingeschränkt: Der Gruppenname muss aus dem Namen des Nutzers,<br />
einem “:” und einem Namen aus Buchstaben und Zahlen bestehen. Unter<br />
6.7 auf Seite 121 ist beschrieben, wie man mit solchen Gruppen umgeht.<br />
Die Autorisation gegenüber AFS-Serverprozessen, wird z.B. von vos und<br />
bos benutzt, unterscheidet sich grundlegend von den ACLs, die beim AFS-<br />
Filesystemzugriff ausgewertet werden.<br />
AFS-Server verwenden Benutzerlisten 30 auf den einzelnen Servern. Diese<br />
müssen nicht auf allen Servern der Zelle gleich sein, jedoch gilt: Wer auf mindestens<br />
einer der Listen steht, kann problemlos Shellkommandos ausführen:<br />
admin@afs>bos exec Servername Kommando<br />
Da man auf diese Weise leicht in den Besitz des AFS-Keys (und somit der<br />
ganzen Zelle) gelangen kann, sollten einfache Benutzer niemals auch nur auf<br />
einer dieser Listen stehen.<br />
Zusätzlich zu den erlaubten Benutzern, kann jeder Superuser eines AFS-<br />
Servers der Zelle mit der Option -localauth beliebige bos-, vos und<br />
backup-Unterkommandos ausführen:<br />
root@host>bos exec Servername Kommando -localauth<br />
3.7.4 Sicherheitshinweise<br />
3.7.5 Der AFS-Superuser<br />
Aus ungeklärtem Grund ist das mit dem pts-Kommando nicht möglich.<br />
Achtung: Man sollte Zellensuperuserrechte - vor allem in automatisierten<br />
Skripten - nur dort verwenden, wo sie wirklich notwendig sind. Evtl. ist es<br />
günster bestimmte Kommandos in acall-Aufrufe (siehe 7.6.2, Seite 149) zu<br />
kapseln.<br />
Die Unterkommandos mancher AFS-Kommando-Familien benötigen Zellensuperuserrechte.<br />
Da<strong>für</strong> ist nicht zwangsläufig ein Token oder auch nur<br />
ein Kerberos-Ticket nötig. Liegt auf dem Rechner, auf dem das Kommando<br />
30 Unter 9.1.1 (Seite 192) ist beschrieben, wie man diese Listen manipuliert und ausliest.
3.7 Das Sicherheitsmodell 55<br />
3.7.5.1 Server oder Filesystem?<br />
3.7.5.2 Verschiedene Wege zu Superuserrechten<br />
ausgeführt werden soll, der gültige AFS-Zellenschlüssel (abgelegt in /etc/openafs/<strong>server</strong>/KeyFile),<br />
kann man den Kommandozeilenparameter -localauth<br />
benutzen und hat damit eine niemals ablaufende Zugangsberechtigung. Das<br />
funktioniert <strong>für</strong> die Kommandos vos, bos und backup.<br />
Leider kennt das pts-Kommando diese Option nicht. Will man es mit<br />
Superuser-Rechten benutzen, muss also immer ein gültiges Token erreichbar<br />
sein oder man muss acall benutzen.<br />
Superuser kann man auf zwei sich nicht gegenseitig bedingende Arten <strong>für</strong> unterschiedliche<br />
Aufgaben sein. Üblicherweise sind die Server-Superuserlisten jedoch<br />
deckungsgleich mit den Gruppenmitgliedern von system:administrators.<br />
3.7.5.1.1 Filesystem Benötigt man Superuserrechte im Filesystem (z.B.,<br />
weil im Root-Volume der Zelle ein Verzeichnis angelegt werden muss), muß<br />
man Mitglied der Gruppe system:administrators sein.<br />
3.7.5.1.2 Server Für Server-bezogene Aktionen (Anlegen von Volumes,<br />
Löschen und Durchführen von Backups, ...) muß man Superuser auf den beteiligten<br />
Servern sein. Dabei zählen nicht nur die File<strong>server</strong> sondern wirklich alle<br />
beteiligten Server - also z.B. auch Backup-Server und Datenbank-Server.<br />
Jeder Server unterhält unabhängig von allen anderen eine Liste mit Namen<br />
der AFS-Benutzer, die (anhand ihrer Token) als Superuser akzeptiert werden.<br />
Üblicherweise sind die Superuserlisten aller AFS-Server identisch. Sind Änderungen<br />
an den Superuserlisten nötig müssen diese Änderungen jedoch auf allen<br />
AFS-Servern durchgeführt werden (siehe 3.9.2, Seite 60).<br />
Unabhängig von dieser Liste kann jeder, der den AFS-Zellenschlüssel kennt mit<br />
der -localauth-Option Kommandos mit AFS-Superuserrechten ausführen.<br />
Zur Demonstration verschiedener Superuser-Authentifikationsarten soll das<br />
neue Volume local.scripts angelegt werden. Folgende Kommandos, die sich<br />
ihre Autorisierung auf 4 verschiedene Arten verschaffen, kommen da<strong>für</strong> in<br />
Frage:<br />
auf einem AFS-Server : Das Kommando benutzt den AFS-Schlüssel eines AFS-Servers. Ein<br />
laufender AFS-Client ist da<strong>für</strong> nicht nötig, da<strong>für</strong> aber Root-Rechte auf<br />
dem entsprechenden Server:<br />
root@host>vos create afsserv1 a local.scripts -localauth<br />
auf einem AFS-Client : Damit kann von einem beliebigen Rechner der Zelle aus das Volume angelegt<br />
werden. Es ist ein laufender AFS-Client nötig. Da ein neues TGT<br />
geholt werden muss, ist die Eingabe des admin-Passwortes nötig:<br />
user@host>kinit admin<br />
user@host>aklog<br />
admin@afs>vos create afsserv1 a local.scripts<br />
mit Tokenmgr auf einem Client : Der Befehl tokenmgr fasst die Ausführung von kinit und aklog zu einem<br />
Befehl zusammen und kümmert sich um die Beseitigung des TGTs nach<br />
Ausführung von vos create:
56 3 Technische Details zu AFS<br />
user@host>tokenmgr -S admin - - vos create afsserv1 a local.scripts<br />
Hinweis: Die -S-Option fasst ein ganzes Bündel kleinerer Optionen zusammen.<br />
Sie sorgt unter anderem da<strong>für</strong>, dass das angegebene Kommando<br />
in einer PAG (siehe 3.7.2.3, Seite 49) läuft.<br />
mit Frischhaltegarantie : Wie vorheriges Beispiel, jedoch startet tokenmgr eine Reauthentifikationsautomatik.<br />
Für vos create ist das nicht wichtig, braucht ein Kommando<br />
jedoch sehr lange (z.B: vos dump über eine langsame Leitung),<br />
kann es sein, dass das Token während der Ausführung abläuft und die Aktion<br />
unterbrochen wird. Mit dem -r-Parameter ist man davor geschützt.<br />
Beispiel:<br />
user@host>tokenmgr -rS admin - - vos dump local.scripts \<br />
-<strong>server</strong> afsserv1 -partition a<br />
3.7.5.3 Superuserrechte auf AFS-Servern<br />
3.7.5.4 Benutzer auf AFS-Servern<br />
Achtung: Man sollte den -r-Parameter nur verwenden, wo das absolut<br />
nötig ist. Er hebelt einen Teil des Ticket-Konzeptes aus, indem<br />
er tokenmgr veranlaßt, das Passwort eines Benutzers im Speicher zu<br />
halten.<br />
Das erste Kommando muss zwar immer auf einen AFS-Server als Root ausgeführt<br />
werden, hat jedoch den Vorteil, dass es keine zeitliche Begrenzung gibt -<br />
bei den beiden mittleren Beispielen muss die jeweilige Aktion vor Ablauf des<br />
Tokens beendet sein.<br />
AFS benutzt ein relativ sicheres Netzwerkprotokoll. Im Gegensatz zu Protokollen<br />
wie NFS 31 werden alle übers Netzwerk übertragenen Pakete kryptographisch<br />
signiert und optional auch verschlüsselt.<br />
AFS’ Schwachstelle sind die Server. Gelangt ein Angreifer mit Superuser-<br />
Rechten auf einen Server, gilt die Zelle als kompromittiert. Diese Situation<br />
wäre dann mit einem Rechner vergleichbar, auf dem der Root-Zugang kompromittiert<br />
wurde: Um mögliche installierte Hintertüren auszuschließen, müssten<br />
die Server eigentlich danach neu installiert werden.<br />
Der Grund <strong>für</strong> diese Schwachstelle ist, dass es pro Zelle genau einen symmetrischen<br />
Schlüssel gibt, von dem eine unverschlüsselte Kopie auf allen AFSsowie<br />
auf allen Kerberos-Servern existieren muss.<br />
Zuküftige AFS-Versionen sollen mehrere Schlüssel pro Zelle (also z.B. einer<br />
pro Server) zulassen - konkrete Zeitpläne gibt es aber nicht.<br />
Der AFS-Schlüssel auf den File<strong>server</strong>n ist per Unix-Modebits geschützt und<br />
nur dem Superuser zugänglich. Theoretisch ist es also unkritisch. Da man aber<br />
nie weiß, wann und wo der nächste buffer overflow gefunden wird, sollten sich<br />
keine Benutzer auf AFS-Servern einloggen können. Das kann man wie folgt<br />
einrichten:<br />
root@host>echo ’+:root:ALL’ > /etc/security/access.conf<br />
root@host>echo ’-:ALL:ALL’ >> /etc/security/access.conf<br />
31 NFS lässt sich auch relativ sicher einrichten, jedoch ist dann der Aufwand enorm.
3.8 File<strong>server</strong> 57<br />
3.8 File<strong>server</strong><br />
user@host>man pam_access<br />
3.8.1 AFS-Volumes sind keine Shares oder Exports<br />
PAM sorgt dann über das pam_access-Modul da<strong>für</strong>, daß sich nur root anmelden<br />
darf. Weitere Informationen bietet<br />
AFS-File<strong>server</strong>maschinen besitzen mindestens eine Datenpartition, die als /vicepx<br />
gemountet ist, wobei x <strong>für</strong> jeweils einen bzw. zwei beliebige kleinen Buchstaben<br />
steht. Die OpenAFS-File<strong>server</strong> schreiben nur auf dedizierte Partitionen.<br />
Legt man einfach nur ein Verzeichnis (z.B. /vicepx oder auch /vicepeg) an, so<br />
greift der jeweilige File<strong>server</strong> (zumindest ohne Tricks) nicht darauf zu.<br />
Die Art und Weise, wie der File<strong>server</strong> Volumes (und damit Files aus dem AFS-<br />
Namensraum) auf den Wirtspartitionen ablegt, ist spezifisch <strong>für</strong> den verwendeten<br />
File<strong>server</strong> (siehe 3.8.2, Seite 57). Man sollte auf keinen Fall Daten auf den<br />
Wirtspartitionen direkt ändern, sondern nur über geeignete AFS-Kommandos<br />
(mittels vos) bzw. durch Zugriffe auf /afs). I.d.R. gilt zwar, dass jeder Datei in<br />
einer RW-Instanz eine gleichgroße Datei in einer /vicepx-Partition gegenübersteht,<br />
jedoch gilt diese Regel schon <strong>für</strong> RO-Instanzen nicht mehr zwangsläufig.<br />
Auch werden die Verzeichnisstrukturen in Volumes auf inode-Servern nicht<br />
durch Verzeichnisse auf den Wirtspartitionen repräsentiert<br />
Hinweise:<br />
3.8.2 Die OpenAFS-File<strong>server</strong>typen<br />
3.8.2.1 Der inode-Server<br />
• Es ist möglich, das Verzeichnis einer Volume-Instanz auf der Datenpartition<br />
eines File<strong>server</strong>s zu ermitteln (siehe 9.2.15, Seite 201).<br />
• Die Volumes auf AFS-Servern sind nicht mit SMB-Freigaben oder NFS-<br />
Exports zu vergleichen. Der AFS-File<strong>server</strong> ist eher eine Blackbox mit<br />
definierten Schnittstellen: dem AFS-Client und vos.<br />
• Es gibt Programme 32 , die in der Lage sind, Teile des VFS als AFS-<br />
Volume zu exportieren. Die Programm liegen im globalen AFS-Namensraum<br />
<strong>für</strong> jedermann kopierbar:<br />
HostAFS : /afs/cs.cmu.edu/project/systems-jhutz/hostafs<br />
tafssrv : /afs/cs.cmu.edu/project/systems-jhutz/tafssrv<br />
Bei diesen lösungen muß man auf einige AFS-Goodies wie z.B. sichere<br />
Authentifikation verzichten.<br />
Man kann unter Linux zwischen 2 verschiedenen OpenAFS-File<strong>server</strong>typen<br />
wählen. Wenn Sie schnell etwas Über ihren File<strong>server</strong> wissen wollen, liegen sie<br />
in den meisten Fällen mit Abschnitt 3.8.2.2 richtig. Die vorbereiteten Pakete<br />
<strong>für</strong> Debian bringen ausschliesslich namei-File<strong>server</strong> mit.<br />
Der klassische AFS-File<strong>server</strong> (inode-Server) greift über inode-Nummern auf<br />
die Dateien im Wirtsfilesystem zu. Er greift dabei auf Kernelebene - unter Benutzung<br />
eines Kernelmoduls - auf Files in den /vicepx-Partitionen zu. Dabei<br />
umgeht er die zeitraubende Auflösung von Filenamen in inode-Nummern, was<br />
jedoch das Filesystem in einen inkonsistenten Zustand versetzt. Würde man<br />
32 eigenständige AFS-Server-Implementationen, die keine direkte Beziehung zu OpenAFS haben
58 3 Technische Details zu AFS<br />
3.8.2.2 Der namei-Server<br />
anschließend die Inkonsistenzen wieder entfernen (z.B. mit fsck), so gehen<br />
unweigerlich AFS-Daten verloren gehen. Ausserdem kann man nicht einfach<br />
mal so auf Filesystemebene auf die AFS-Daten zugreifen (z.B. zum Debuggen).<br />
Benutzt man diesen File<strong>server</strong>, muss auch eine modifizierte fsck-Version zum<br />
Einsatz kommen, woraus sich auch schon ableiten lässt, dass nicht jedes Filesystem<br />
geeignet ist. Unter Linux bietet sich z.B. nur ext2 an. Der inode-File<strong>server</strong><br />
unterstützt keine Dateien > 2GB.<br />
Der namei-Server ist nach der Kernel-Funktion zur Umwandlung eines Dateinamens<br />
in eine inode-Nummer (namei()) benannt. Er benötigt kein<br />
Kernelmodul mehr und läuft als reiner Userspace-Prozess. Es können beliebige<br />
Filesysteme 33 als /vicepx-Partitionen zum Einsatz kommen, modifizierte<br />
fsck-Versionen sind nicht länger nötig. Die Auflösung von Dateinamen zu<br />
inode-Nummern kostet Zeit und macht den Server etwas langsamer. Die mit<br />
diesem File<strong>server</strong> mögliche Benutzung von Journaling-Filesystems (xfs, ext3,<br />
Reiserfs, ...) macht diesen Makel 34 durch einen drastisch beschleunigten Filesystemcheck<br />
allerdings wieder wett. Der namei-File<strong>server</strong> ist unter Linux die<br />
einzig sinnvolle Wahl.<br />
3.8.2.2.1 Die Verzeichnisstruktur auf der Wirtspartition Wenn man sich<br />
die Datenpartition eines namei-File<strong>server</strong>s ansieht, wird man folgendes finden:<br />
Lock : hier liegen Dateien, anhand derer der File<strong>server</strong> sicherstellt, dass die Partition<br />
nicht mehrmals benutzt wird (also z.B. als /vicepa und vicepb)<br />
V12345678.vol : (die Zahl variiert) sind sog. Volume-Header. In diesen stehen einige Metainformationen<br />
der auf der Partition gespeicherten Volume-Instanzen.<br />
AFSIDat : enthält die eigentlich Daten.<br />
Das AFSIDat-Verzeichnis führt über zwei Unterverzeichnis-Ebenen an die<br />
Daten der Volume-Instanzen. Mit instantafs.getvoldirs kann man herrausfinden,<br />
wie der Pfad <strong>für</strong> ein gegebenes Volume lautet. Der Pfad besteht dabei aus<br />
base64-codierten Komponenten der (numerischen) Volume-ID. Der Rest des<br />
Pfades setzt sich dann aus base64-codierten Komponenten der inode-ID einer<br />
Datei oder eines Verzeichnisses zusammen.<br />
Achtung:<br />
• Die Dateien unter /vicepx/AFSIDat sind sehr empfindlich - der Namei-<br />
Server speichert auch in den Metadaten (Owner, Group, Modebits, ...)<br />
wichtige Informationen.<br />
• Unter MacOSX ist die Abbildung Volume-ID/Inode-ID auf die AFSIDat-<br />
Pfade anders als unter anderen Unix-Betriebssystemen. Das ist jedoch nur<br />
dann kritisch, wenn eine MacOSX-Platte an einen anderen Unix-Rechner<br />
angeschlossen werden soll - oder umgedreht.<br />
3.8.2.2.2 Forensik Wenn man eine Platte hat, die vorher eine /vice-Partition<br />
eines namei-File<strong>server</strong>s war, kann man trotz intaktem Filesystem nicht viel über<br />
den Inhalt sagen. Die Namen der Dateien darauf sind lediglich codierte AFSinode-Nummern.<br />
Sinnvolle Baumstrukturen sind gar nicht zu erkennen.<br />
33 die natürlich eine gewisse Unix-Kompatibilität aufweisen müssen. vfat geht z.B. nicht.<br />
34 <strong>für</strong> den hier leider keine vergleichenden Daten vorgelegt werden können.
3.8 File<strong>server</strong> 59<br />
Bevor man etwas mit der Platte anstellt, sollte man sie auf jeden Fall kopieren<br />
und am besten nur mit der Kopie arbeiten, wobei zu beachten ist, dass wirklich<br />
alles kopiert werden muss - also auch<br />
• Modebits und<br />
• Owner<br />
Achtung: Wenn man das nicht beachtet, gilt das auf einer /vice-Partition als<br />
Inkonsitenz und der salvager entfernt die entsprechenden Files.<br />
Man kann diese Festplatte nun in einen File<strong>server</strong> der eigenen Zelle ’reinschrauben<br />
und den File<strong>server</strong> mit<br />
admin@afs> vos syncvldb Servername<br />
bearbeiten. Damit setzt man die Zelle jedoch einem gewissen Risiko 35 aus.<br />
Besser ist es — z.B. mit InstantAFS — eine neue Mini-Zelle auf einem Rechner<br />
zu erstellen und die Platte in diese Zelle einzuhängen. Danach sollte man nicht<br />
vergessen, folgendes Kommando auszuführen:<br />
admin@afs>vos syncvldb File<strong>server</strong> mit Fremdplatte<br />
3.8.3 Wirtspartitionen<br />
3.8.4 Prozesse<br />
Unabhängig vom benutzten file<strong>server</strong>-Typ sind <strong>für</strong> die Datenpartitionen<br />
des AFS einige Dinge zu beachten:<br />
• Unter /vicepx (stellvertretend <strong>für</strong> ein beliebiges /vicep-Verzeichnis) wird<br />
immer ein eigens Filesystem (üblicherweise eine eigene Partition) erwartet<br />
(/vicepx muss also immer ein Mountpoint sein). Das lässt sich im<br />
Bedarfsfall übersteuern, indem die Datei /vicepx/AllwaysAttach angelegt<br />
wird.<br />
• Welche Filesystemtypen benutzt werden können, ist vom Typ des File<strong>server</strong>s<br />
abhängig (siehe 3.8.2, Seite 57).<br />
• Die <strong>für</strong> die Durchsetzung der AFS-Quotas optimale Blockgröße von<br />
Wirtspartitions-Filesystemen beträgt 1kByte, da Blöcke im AFS diese<br />
Größe haben. Werden größere Blöcke verwendet, ist evtl. (vor allem bei<br />
vielen kleine Dateien in einem oder mehreren Volumes) die angerechnete<br />
Quota kleiner als der auf der Wirtspartition benutzte Speicher.<br />
Auf jedem AFS-File<strong>server</strong> müssen zwei miteinander per TCP kommunizierende<br />
Prozesse immer laufen:<br />
file<strong>server</strong> : Dieser Prozess beantwortet Anfragen der AFS-Clients. Er ermöglicht Zugriff<br />
auf AFS-Daten auf Dateisystemebene. Es müssen 19 Prozesse mit<br />
dem Namen /usr/lib/openafs/file<strong>server</strong> laufen. Weniger<br />
dürfen es nur dann sein, wenn der file<strong>server</strong> gerade hochgefahren<br />
wird.<br />
Der file<strong>server</strong> schreibt Logging-Informationen nach /var/log/openafs/FileLog.<br />
vol<strong>server</strong> : Dieser Prozess bearbeitet Anfragen, die sich nicht auf Dateien im<br />
AFS-Namensraum, sondern auf ganze Volume-Instanzen beziehen (z.B.<br />
35 z.B. könnte die Partition ein Volume Names root.cell enthalten
60 3 Technische Details zu AFS<br />
vos remove oder vos move). Bevor ein Schreibzugriff auf eine<br />
Volume-Instanz erfolgt, wird der File<strong>server</strong> davon in Kenntnis gesetzt<br />
und die entsprechende Instanz auf “busy” (siehe 6.13.2, Seite 137) geschaltet.<br />
Logging-Informationen speichert dieser Prozess in /var/log/openafs/VolserLog.<br />
Ein weiterer Prozess wird nur bei Bedarf gestartet - der salvager. Dieser Prozess<br />
sucht nach Inkonsistenzen in den Datenstrukturen von Volume-Instanzen<br />
und versucht, diese zu korrigieren. Gestartet wird er, wenn<br />
admin@afs>bos salvage Servername<br />
3.9 Der bos-Server<br />
3.9.1 Aufgaben<br />
3.9.2 Authentifikation<br />
• ein privilegierter Benutzer es auslöst:<br />
• der file<strong>server</strong> abstürzt oder<br />
• der bos<strong>server</strong> gerade gestartet wurde (z.B. bei einem Neustart) 36 .<br />
Der vol<strong>server</strong> lässt sich über zahlreiche Unterkommandos von vos steuern.<br />
Er erhält dabei von vos jedoch keine komplexen Befehle wie “Verschiebe<br />
Volume-Instanz X zu Server B”. Die Steuerung von Transaktionen zwischen<br />
und auf File<strong>server</strong>n ist deshalb Aufgabe des zugreifenden Tools (vos), nicht<br />
des vol<strong>server</strong>s.<br />
Der bos<strong>server</strong> (Basic OverSeer Server 37 ) läuft auf ausnahmslos jedem<br />
AFS-Server. Er hat <strong>für</strong> AFS-Server eine vergleichbare Aufgabe wie der<br />
init-Prozess <strong>für</strong> das gesamte System:<br />
• Starten, Beenden, Überwachen sowie regelmäßiges Neustarten der<br />
eigentlichen Serverprozesse<br />
• Management der Liste der privilegierten Benutzer, die Zugriff auf den<br />
Server haben<br />
• Fernsteuerung<br />
• Management der AFS-Keys eines Servers<br />
• Authentifiziertes Ausführen von Shellkommandos auf der Servermaschine<br />
• einige andere (siehe [ADMREF])<br />
Der bos<strong>server</strong> lässt sich netzwerkweit fernsteuern - der Befehl bos steht da<strong>für</strong><br />
zur Verfügung. Der bos<strong>server</strong> kann auch zur Überwachung AFS-fremder<br />
Prozesse eingesetzt werden.<br />
Das bos-Kommando und auch andere AFS-Kommandofamilien benutzen den<br />
Token des aufrufenden Nutzers, um sich gegenüber dem ausgewählten Server<br />
36 Das lässt sich (<strong>für</strong> einen schnelleren Start des File<strong>server</strong>s) unterbinden, jedoch steigt dann das<br />
Risiko <strong>für</strong> Inkonsistenzen in Volume-Instanzen auf der entsprechenden File<strong>server</strong>maschine.<br />
37 dt. Aufseher
3.10 Kerberos 61<br />
3.10 Kerberos<br />
3.10.1 Übersicht<br />
zu authentifizieren (siehe 3.7.5.1.2, Seite 55). Dabei werden bestimmte Befehle<br />
nur von Benutzern akzeptiert, die sich in der <strong>server</strong>spezifischen Liste privilegierter<br />
Nutzer befinden. 3 Befehle ermöglichen vollen Zugriff auf die Liste<br />
eines einzelnen Servers.<br />
So zeigt man die Liste an:<br />
user@host>bos listusers afsserv1<br />
SUsers are: admin<br />
Ein neuer Nutzer bekommt folgendermaßen Zugriffsrechte <strong>für</strong> den Server:<br />
admin@afs>bos adduser afsserv1 ernie<br />
admin@afs>bos listusers afsserv1<br />
SUsers are: admin ernie<br />
... und schon sind sie wieder weg:<br />
admin@afs>bos removeuser afsserv1 ernie<br />
bos listusers afsserv1<br />
SUsers are: admin<br />
Es versteht sich von selbst, dass die Kommandos zum Hinzufügen und Entfernen<br />
von Benutzern nur von privilegierten Nutzern akzeptiert werden. Die<br />
Authentifikation erfolgt über den AFS-Token, nicht über das Kerberos-Ticket.<br />
Die spezielle bos-Option -localauth ermöglicht eine Authentifikation ohne<br />
ein Token. Dabei wird der AFS-Key aus der Datei /etc/openafs/<strong>server</strong>/KeyFile<br />
benutzt. Diese Option empfiehlt sich deshalb nur, wenn das bos-Kommando<br />
auf einem von regulären Benutzern abgeschotteten AFS-Server benutzt wird<br />
(z.B. bei der Installation der Zelle).<br />
Kerberos ist ein Authentifikationsmechanismus, der sich wie folgt charakterisieren<br />
lässt:<br />
• Kerberos arbeitet mit Tickets. Tickets sind wie zeitlich begrenzte Personalausweise:<br />
Solange das Gültigkeitsdatum nicht überschritten ist, kann<br />
ich mich damit ausweisen, danach nicht mehr.<br />
• Es gibt 2 Sorten von Tickets:<br />
ticket-granting ticket : Ist eine Art Berechtigungskarte <strong>für</strong> Kerberosdienste, die man gegen<br />
"Vorlage"des Passwortes bekommt.<br />
service ticket : auch nur Ticket genannt, erhält man <strong>für</strong> bestimmte Dienste gegen<br />
Vorlage des ticket-granting tickets.<br />
• Die Authentifikation erfolgt immer im Rahmen einer Kerberos-Realm.<br />
Eine Realm kann man sich ähnlich wie eine Windows-Domäne vorstellen:<br />
Hat man sich an einem Kerberos-Server authentifiziert, so gilt man<br />
<strong>für</strong> alle Rechner der Realm dieses Servers als authentifiziert. Sie ist der<br />
Herrschaftsbereich eines Kerberos-Master-Servers<br />
• Die Kerberos-Server kennen alle Passwörter 38 der Benutzer.<br />
38 Eigentlich werden Hashes der Passwörter der Kerberos-Benutzer abgespeichert - nicht die<br />
Passwörter selbst. Trotzdem gilt: Wer den Kerberos-Server knackt, darf damit alles, was jeder<br />
einzelne Benutzer darf.
62 3 Technische Details zu AFS<br />
3.10.2 Der Principal<br />
• Will ein Benutzer auf einen bestimmten Dienst zugreifen (z.B. AFS oder<br />
SSH auf rechner1), so benötigt er <strong>für</strong> diesen Dienst jeweils ein Kerberos-<br />
Ticket.<br />
• Kerberos-Tickets sind vom Kerberos-Server signierte Datenstrukturen,<br />
die einem Dienst auf einem Rechner der Realm vorgelegt werden können,<br />
um die eigene Identität nachzuweisen. Mit einer Ausnahme (dem<br />
TGT selbst) werden alle Tickets vom Kerberos-Server gegen Vorlage<br />
eines bestimmten Tickets - dem TGT (Ticket Granting Tickets) - erteilt.<br />
• Über’s Netzwerk wird das TGT ausschliesslich verschlüsselt übertragen.<br />
Erfolgreich entschlüsseln kann man es nur mit dem gültigen Benutzerpasswort.<br />
sein Passwort eingibt - verschlüsselt ist es nutzlos.<br />
• Kann man das TGT mit dem eigenen Passwort erfolgreich entschlüsseln,<br />
hat man damit auch eine Garantie, dass es vom richtigen"Kerberos-Server<br />
geschickt wurde (Mutual Authentication), da nur der Benutzer und der<br />
Kerberos-Server das Passwort, dass zum Verschlüsseln des TGT benutzt<br />
wird, kennen.<br />
• Die Gültigkeit von Tickets ist zeitlich begrenzt (siehe 3.10.7, Seite 65).<br />
• Jeder Benutzer besitzt <strong>für</strong> jede einzelne Session (Beispiel: KDE-Sitzung<br />
auf Computer A) einen Credentials-Cache (CC) - einen Speicherbereich<br />
39 , in dem seine Tickets gespeichert sind. Diesen Cache kann nur<br />
der jeweilige Benutzer (und der allmächtige root lesen). Kann ein Angreifer<br />
den CC auslesen, kann er im Namen des entsprechenden Nutzers<br />
handeln - solange, bis die im CC enthaltenen Tickets ablaufen.<br />
• Wird Zugriff auf einen Dienst benötigt (z.B. <strong>für</strong> ssh rechner1) dann<br />
fordert der Client (z.B. ssh) vom Kerberos-Server ein Ticket <strong>für</strong> diesen<br />
Dienst an 40 . Dazu benutzt der Client das TGT aus dem Credentials-<br />
Cache. Das dienstspezifische Ticket (z.B. host/rechner1@REALM <strong>für</strong><br />
ssh) wird übers Netzwerk dem benutzten Dienst vorgelegt. Damit ist man<br />
beim entsprechenden Dienst authentifiziert, was jedoch nicht zwangläufig<br />
bedeutet, dass man auch autorisiert ist.<br />
AFS benutzt z.B. zur Autorisation von Filezugriffen die ACLs in AFS-<br />
Directories (siehe 3.7.3, Seite 51) sowie die PTDB (siehe 3.3, Seite<br />
35).<br />
• Kerberos ist nur <strong>für</strong> die Authentifizierung zuständig, nicht <strong>für</strong> Autorisation.<br />
Jeder kerberosifizierte Dienst (z.B. SSH) kann <strong>für</strong> einen bereits authentifizierten<br />
Benutzer entscheiden, ob er diesem Zugriff gewährt oder<br />
nicht.<br />
AFS z.B. entscheidet darüber anhand der ACLs der Verzeichnisse (siehe<br />
3.7.3, Seite 51).<br />
Ein Kerberos5-Principal ist eine Datenstruktur, hinter der sich entweder ein Benutzer<br />
oder ein Dienst verbirgt, also etwas, was sich authentifizieren muss. Für<br />
jeden Principal sind einer oder mehrere Schlüssel gespeichert. Die Schlüssel<br />
sind symmetrisch und bestehen entweder aus einer Zufallszahl oder aus einem<br />
Passwort. Mit einem solchen Schlüssel kann sich ein Benutzer gegenüber dem<br />
Kerberos-Server und auch der Kerberos-Server gegenüber dem Benutzer ausweisen.<br />
Durch verschachtelte Verschlüsselungsebenen in den Tickets kann sich<br />
ein Benutzer auch gegenüber einem Dienst (z.B. dem AFS) ausweisen.<br />
39 unter Unix ist das eine geschützte Datei unter /tmp<br />
40 Wenn ein solches Ticket nicht schon im Credentials-Cache liegt.
3.10 Kerberos 63<br />
3.10.3 Keytabs<br />
Benötigt ein Benutzer Zugriff auf einen bestimmten Dienst, fordert der Client 41<br />
ein TGT vom Kerberos-Server an und benutzt dieses, um Tickets <strong>für</strong> andere<br />
Dienste zu bekommen. Jedem Dienst ist dabei ein Principal zugeordnet, der<br />
i.d.R. kein Passwort (siehe -randkey-Option im kadmin), sondern nur eine<br />
Zufallszahl als Schlüssel hat. Durch die Verschlüsselung mit dem Schlüssel des<br />
speziellen Dienstes (z.B. AFS), kann dieser Dienst später, wenn der Benutzer<br />
dem Dienst sein Ticket vorzeigt, feststellen, ob der Benutzer vom Kerberos5-<br />
Server authentifiziert wurde - schließlich kennt außer dem Dienst nur noch der<br />
Kerberos-Server die geheime Zufallszahl.<br />
Der AFS-Dienst wird in der Kerberos-Datenbank durch einen Principal repräsentiert.<br />
Dieser kann 2 Formate haben:<br />
• afs@[Realm] (z.B. afs@CBS.MPG.DE) kommt dann zum Einsatz, wenn<br />
gilt:<br />
Zellenname = Kerberos-Realm.<br />
• afs/[Zellenname]@[Realm] (z.B. afs/cbs.mpg.de@CBS.MPG.DE) sollte<br />
benutzt werden, wenn über die Realm mehrere Zellen verwaltet werden<br />
sollen. Da das flexibler ist, ist dieses Format Standard unter InstantAFS.<br />
Keytabs sind Dateien, die beliebig viele Schlüssel von beliebig vielen Principals<br />
enthalten können. Damit erfüllen sie jeweils eine von zwei Funktionen:<br />
• Sie speichern (meist in /etc/krb5.keytab) die Schlüssel von Kerberos-<br />
Dienst-Principals. Diese Schlüssel werden von den kerberosifizierten<br />
Diensten (z.B. sshd) benötigt, um die Gültigkeit von Kerberos-Tickets<br />
überprüfen zu können 42 .<br />
Keytabs von Service-Principals werden i.d.R. mit dem Kommando<br />
ktadd in der kadmin.local-Shell auf dem Kerberos5-Master-Server<br />
erzeugt:<br />
kadmin.local: ktadd -k Keytab-Datei Principal<br />
Dabei wird der Schlüssel des entsprechenden Principals mit jedem<br />
ktadd-Aufruf neu generiert, womit alle Schlüssel dieses Dienstes, die<br />
vorher in Keytabs gespeichert wurden, ungültig werden.<br />
Unter 7.4 auf Seite 145 ist erklärt, wie man mit Service-Keytabs umgeht.<br />
• Keytabs können auch die Schlüssel von Benutzern speichern. Eine solche<br />
Keytab hat <strong>für</strong> Kerberos den selben Wert wie das Passwort des Benutzers<br />
(auch wenn das Passwort daraus nicht ermittelt werden kann). Eine<br />
Benutzer-Keytab kann an tokenmgr oder kinit übergeben werden,<br />
um die Eingabe des Passwortes zu sparen. Dadurch lassen sich nichtinteraktive<br />
mit Kerberos authentifizierte und am AFS-angemeldete Prozesse<br />
realisieren.<br />
So wird eine Keytab erzeugt:<br />
41 Sowohl Client als auch Server müssen dabei explizit Kerberos-tauglich sein. Es ist nicht mit PAM<br />
vergleichbar.<br />
42 Hinweis: Ist die Keytab eines solchen Dienstes einem Angreifer bekannt, hat der Angreifer diesen<br />
speziellen Dienst geknackt.
64 3 Technische Details zu AFS<br />
user@host>ktutil<br />
ktutil: add_entry -password -p Principal@Realm -k 1 -e des3-hmac-sha1<br />
Password for Principal@Realm: Eingabe des Passwortes<br />
ktutil: write_kt Keytab-Datei<br />
3.10.4 Kerberos und AFS<br />
3.10.5 Server-Komponenten<br />
3.10.6 Synchronisation<br />
AFS arbeitet mit einem Kerberos-Principal pro Zelle. Dieser Principal darf derzeitig<br />
lediglich aus Schlüsseln der Typen<br />
• DES-CBC-CRC<br />
• DES-CBC-MD5 und<br />
• DES-CBC-MD4<br />
(ein Schlüssel reicht). Wenn man das nicht beachtet, werden Tokens von Benutzern<br />
nicht von AFS-File<strong>server</strong> akzeptiert. Diese Beschränkung ist dabei zu<br />
fallen. Enige Entwickler schreiben (Stand 30.08.2006) an einem Verschlüsselungsmodul<br />
<strong>für</strong> das von AFS verwendete RPC-Protokoll RX namens rxk5, das<br />
dann alle Schlüsseltypen von Kerberos5 unterstützen wird.<br />
Der Kerberos-Server besteht minimal lediglich aus dem KDC (Key Distribution<br />
Center), einem Daemon der als krb5kdc im Paket krb5-kdc .deb enthalten ist.<br />
Dieser Daemon greift ausschließlich lesend auf die Kerberos5-Datenbank, die<br />
eigentlich nur aus einer einfachen Liste besteht, zu. Die darin enthaltenen Principals<br />
sind verschlüsselt in der Datei /var/lib/krb5kdc/principal gespeichert, der<br />
nötige Schlüssel liegt in der Datei /etc/krb5kdc/stash.<br />
Eine <strong>für</strong> AFS zusätzlich benötigte Komponente ist der Kerberos4-Ticket-<br />
Konverter krb524d. Dieser Daemon läuft i.d.R. auf derselben Maschine wie<br />
krb5kdc und beantwortet Anfragen von Programmen, die auf Tickets nach<br />
altem Kerberos4-Standard bestehen. OpenAFS benötigt Kerberos4-Tickets.<br />
Das Programm aklog auf einem AFS-Client benutzt diesen Dienst, um<br />
Kerberos4-Tickets <strong>für</strong> den AFS-Dienst zu erhalten.<br />
Der Admin-Server kadmind (Paket krb5-admin-<strong>server</strong> .deb ) ist <strong>für</strong> Änderungen<br />
an der Kerberos-Datenbank zuständig. Darunter fallen Dinge wie:<br />
• Ändern von Passwörtern<br />
• Anlegen von Principals, was oft dem Anlegen eines Benutzers entspricht<br />
• Löschen von Principals, was oft dem Entfernen eines Benutzers entspricht<br />
• Anzeigen der in der Datenbank gespeicherten Principals<br />
Benutzt man Kerberos zur Authentifikation ist es besser, nicht nur den Master-<br />
Server, sondern noch ein oder mehrere Slave-Server zu betreiben. MIT-<br />
Kerberos5 besitzt (Stand 18.08.2005) keine automatische Synchronisationsfunktion.<br />
Ein regelmäßig aufgerufenes Script schafft Abhilfe - jedoch ist das<br />
Updateintervall dann auch die Zeit, die ein Benutzer u.U. warten muss 43 , bis<br />
sein neues Passwort akzeptiert wird.<br />
43 Mit dem alten Passwort geholte Tickets und Tokens bleiben weiterhin gültig.
3.10 Kerberos 65<br />
3.10.7 Gültigkeitsdauer von Tickets<br />
instantafs.kerberos (siehe 9.2.18, Seite 201) ist ein InstantAFS-Skript, dass<br />
sich um die Synchronisation kümmert.<br />
Der AFS-Administrator kann die Gültigkeitsdauer des Tokens <strong>server</strong>seitig beeinflussen.<br />
Sie ist das kleinste der folgenden Gültigkeitsmaxima:<br />
• Die maximale Lebensdauer von Tickets, die der Kerberos-KDC zu vergeben<br />
bereit ist (Option max_life in dem File /etc/krb5kdc/kdc.conf ) auf<br />
allen Kerberos-Servern. Die Einstellung ist lokal und gilt deshalb nur <strong>für</strong><br />
Tickets, die von dem entsprechenden Kerberos-Server ausgestellt werden.<br />
• Maximum ticket life des TGT-Principals (z.B. krbtgt/CBS.MPG.DE@CBS.MPG.DE),<br />
also die maximale Gültigkeitsdauer des TGT<br />
• Maximum ticket life des AFS-Server-Principals (z.B. afs@CBS.MPG.DE)<br />
• Maximum ticket life des Principals des anfordernden Benutzers (z.B.<br />
ernie@CBS.MPG.DE)<br />
• Die vom Client bei der Anforderung des TGT definierte maximale Ticket-<br />
Lifetime.<br />
Das Maximum ticket life-Feld eines Principals ist in der Kerberos-Datenbank<br />
gespeichert und kann z.B. mit modprinc in der Kerberos-Shell geändert werden.<br />
Leider muss auch am Kerberos-Client einiges konfiguriert werden, da sich<br />
Kerberos-Clients wegen des 10h-Defaults trotz evtl. <strong>server</strong>seitig längerer<br />
Gültigkeitsdauer in Selbstbeschränkung üben und nur 10h anfordern. Die<br />
clientseitig festgelegte Ticket-Lifetime kann wie folgt definiert werden:<br />
• Holt man das TGT mittels<br />
user@host>kinit -l Ticket-Lifetime<br />
user@host>man kinit<br />
user@host>kinit -l 1d<br />
kann man das 10h-Default-Limit umgehen. Das Format der Ticket-<br />
Lifetime ist unter<br />
beschrieben. Bsp:<br />
• Durch Änderungen im Quellcode des Kerberos-Clients. Das ist z.B. beim<br />
PAM-Modul nötig. Zu den InstantAFS-Paketen gibt es eine gepatchte<br />
Version von libpam-krb5 .deb , in der die 10h-Beschränkung aufgehoben<br />
wurde. Beim Einloggen werden 1000h Gültigkeit <strong>für</strong> das TGT<br />
angefordert. Dieser hohe Wert wird natürlich durch die oben genannten<br />
Gültigkeitsmaxima beschränkt - i.d.R. sollte libpam-krb5 .deb unter<br />
InstantAFS ein 26h-TGT bekommen.
4 Einrichtung einer AFS-Zelle<br />
4.1 Vorüberlegungen<br />
4.1.1 Standorte<br />
4.1.2 Serverprozesse<br />
Folgende Dinge sollten bekannt sein, bevor mit dem Aufbau der Zelle begonnen<br />
wird:<br />
File<strong>server</strong> : Natürlich gehören die Daten möglichst in die Nähe des Benutzers. Gibt<br />
es Außenstellen, sollte in diesen mindestens ein File<strong>server</strong> stehen - aus<br />
Gründen der Performance und Sicherheit (der Internet-Uplink kann<br />
schließlich ausfallen).<br />
AFS-Datenbank<strong>server</strong> : Jedes Teilnetz (z.B. das Netzwerk einer Außenstelle) sollte einen eigenen<br />
Datenbank<strong>server</strong> haben. Wenn die Verbindung zum Hauptnetz abbricht,<br />
können dann alle Benutzer im Teilnetz auf den Daten, die sich auf File<strong>server</strong>n<br />
in diesem Teilnetz befinden, weiterarbeiten.<br />
Achtung: Ohne eine Verbindung zu mindestens einem Datenbank<strong>server</strong> kann<br />
ein AFS-Clients nicht auf das AFS zugreifen - auch wenn alle File<strong>server</strong> verfügbar<br />
sind.<br />
Man sollte überlegen, welche Serverprozesse auf welchen Maschinen laufen<br />
sollen. Vor allem mit Blick auf eine mögliche Kompromittierung der AFS-Zelle<br />
ist es sicherer, nur die wichtigsten Dienste auf den AFS-Servern laufen zu lassen.<br />
• AFS-Datenbank<strong>server</strong> sollten mit möglichst wenigen zusätzlichen Prozessen<br />
belastet werden, da bekanntlich weniger Dienste auf einem Server<br />
weniger potentielle Sicherheitslücken nach sich ziehen.<br />
Es ist jedoch wichtig, dass der Kerberos5-Server zusammen mit dem<br />
Kerberos4-Ticket-Konverter auf allen Datenbank<strong>server</strong>n läuft. Ein<br />
kompromittierter Kerberos5-Server bedeutet ebenfalls, dass die Zelle<br />
kompromittiert ist - der AFS-Key liegt schließlich im Klartext in der<br />
Kerberos-Datenbank.<br />
Auf einer der Maschinen muß zusätzlich der Kerberos5-Master installiert<br />
werden. Im MIT-Kerberos5 ist eine automatische Synchronisation nicht<br />
vorgesehen - ein Skript (z.B. instantafs.krbkerberos) wird sich später<br />
darum kümmern, die Kerberos5-Slave-Server 1 up-to-date zu halten.<br />
• Der verfügbare Plattenplatz unter AFS skaliert sehr gut. Man kann sehr<br />
leicht zusätzliche AFS-Server in die Zelle aufnehmen und auch wieder<br />
entfernen. Man sollte auf diesen nur die AFS-Serverprozesse laufen lassen.<br />
Auch sollte man DB-Server und File<strong>server</strong> nicht kombinieren.<br />
• DNS-Server können beliebig auf andere Maschinen verteilt werden. Es<br />
ist ratsam, mehrere DNS-Servers im Netzwerk zu haben. Ein kompletter<br />
1 wenn vorhanden, was sehr zu empfehlen ist<br />
66
4.2 InstantAFS 67<br />
4.2 InstantAFS<br />
4.2.1 Voraussetzungen, Prinzipien<br />
Ausfall des DNS führt bereits dazu, dass sich kein Nutzer mehr anmelden<br />
2 kann.<br />
Bedenken sie, dass es verschiedene Problemsituationen gibt, auf die die Serverprozesse<br />
per eMail hinweisen müssen. Ein konfigurierter Mail<strong>server</strong> <strong>für</strong> die<br />
Domain der Zelle und installierte Mailforwarder (z.B. nullmailer .deb ) auf allen<br />
Servermaschinen sind sehr hilfreich.<br />
AFS ist ein mächtiges Netzwerkdateisystem mit sehr geringem Administrationsaufwand<br />
im laufenden Betrieb. Die Erstinstallation einer AFS-Zelle jedoch<br />
ist jedoch besonders <strong>für</strong> Neulinge aufwändig und mit zahlreichen Tücken versehen.<br />
InstantAFS ist der Name einer Script-Sammlung, die vor allem die Erstinstallation,<br />
jedoch auch Dinge der späteren Administration, wie das Anlegen von<br />
Benutzern oder das Hinzufügen von Servern, vereinfachen sollen. Es baut auf<br />
freier Standard-Software auf und kümmert sich um deren Konfiguration.<br />
Neben der Konfiguration von “richtigen” AFS-Zellen ist InstantAFS z.B. auch<br />
da<strong>für</strong> geeignet, vor kritischen Aktionen schnell eine Testzelle aufbauen zu können,<br />
<strong>für</strong> die im Extremfall nur ein einziger Rechner nötig ist.<br />
Die Konfiguration einer Zelle läuft wie folgt ab:<br />
1. InstantAFS setzt eine Standard-Installation des Betriebssystems Debian<br />
GNU/Linux Woody 3.0 bzw. Sarge 3.1 3 auf den zukünftigen Servern<br />
voraus. Zusätzlich werden einige InstantAFS-spezifische Pakete installiert.<br />
Vor der Installation der Rechner wird dringend die Lektüre des<br />
Abschnitts Sicherheitshinweise (siehe 3.7.4, Seite 54) empfohlen.<br />
2. Der Administrator wählt einen Rechner aus, von dem aus die Zelle eingerichtet<br />
werden soll. Dieser Rechner muss nicht zwangsläufig Teil der<br />
einzurichtenden Zelle sein. Einzige Vorraussetzung <strong>für</strong> den Rechner ist,<br />
das das Paket instantafs mit allen Abhängigkeiten auf ihm installiert<br />
wurde.<br />
3. Mit dem Kommando instantafs.setup (siehe 9.2.22, Seite 203)<br />
wird ein dialogorientiertes Tool gestartet. In diesem müssen die Server<br />
der zukünftigen Zelle definiert und deren zukünftige Funktionen zugewiesen<br />
werden.<br />
4. Alle nötigen Dienste werden durch dieses Tool auf den Servern der Zelle<br />
installiert. Dazu wird das Skript instantafs.remote (siehe 9.2.20,<br />
Seite 202) benutzt, dass mittels ssh auf den zukünftigen Servern aufgerufen<br />
wird.<br />
5. Das Ergebnis ist eine arbeitsfähige AFS-Zelle, die eine einfache Benutzerverwaltung<br />
per Kommandozeile gleich mitbringt. Diese Benutzerverwaltung<br />
sollte sich auf einfachste Weise auch in eine bestehende Benutzerverwaltung<br />
integrieren lassen.<br />
InstantAFS baut hauptsächlich auf die folgenden Softwarekomponenten der<br />
freien Linux-Distribution Debian GNU/Linux Woody:<br />
2 Ausgefallene Kerberos-Server hingegen verhindern nur das Anmelden. Bereits verteilte Tickets<br />
und Tokens bleiben uneingeschränkt gültig, das AFS funktioniert weiterhin.<br />
3 Auch der Betrieb auf Servern/Clients unter Debian GNU/Linux Sid sollte keine Probleme bereiten<br />
- das kann jedoch nicht garantiert werden.
68 4 Einrichtung einer AFS-Zelle<br />
OpenAFS : Diese Komponente enthält Client- und Server-Komponenten des AFS-<br />
Netzwerkprotokolls. Außerdem stellt sie Tools zur Manipulation der<br />
AFS-Datenbanken (pts, vos) sowie zur Benutzung spezieller AFS-<br />
Funktionen auf Dateisystemebene (fs) zur Verfügung.<br />
OpenSSH : Diese freie Implementation des SSH-Protokolls wird während der Installation<br />
von InstantAFS benutzt, um Kommandos auf anderen Rechnern<br />
auszuführen.)<br />
Kerberos5 : Kerberos wird als Authentifikationsdienst benutzt, der zusätzlich auch<br />
den AFS-Zellenschlüssel verwaltet.<br />
4.2.2 Woher bekommt man die benötigten Pakete<br />
4.2.3 Obligatorische Serverpakete<br />
Bind : Der DNS-Server bind wird benutzt, um Hostnamen der neuen Zelle<br />
aufzulösen. Außerdem werden die AFS-DB-Server und die Kerberos5-<br />
Server per DNS bekanntgegeben.<br />
Hinweis: Es ist auch möglich, einen bereits bestehenden DNS-Server zu<br />
benutzen. In diesem Fall ist bind nicht zwingend nötig.<br />
NTP : ntp wird benutzt, um die Zeit der Zelle zwischen allen Servern und<br />
Clients synchron zu halten.<br />
Viele von InstantAFS benutzten Pakete sind Teil der offiziellen Debian-<br />
Distribution. Die modifizierten Pakete sowie die InstantAFS-Pakete selbst<br />
werden vom Max Planck Instutut <strong>für</strong> Kognitions- und Neurowissenschaften zur<br />
Verfügung gestellt:<br />
http://instantafs.cbs.mpg.de<br />
Es gibt auch einen FTP-Server zum leechen:<br />
ftp://instantafs.cbs.mpg.de<br />
Die Servermaschinen der Zelle benötigen folgende Pakete:<br />
openafs-file<strong>server</strong> .deb : Programme <strong>für</strong> AFS-File- und AFS-DB-Server<br />
openafs-db<strong>server</strong> .deb : Programme <strong>für</strong> den AFS-DB-Server<br />
krb5-kdc .deb : MIT-Kerberos5-Server<br />
openafs-krb5 .deb : Schnittstelle zwischen MIT-Kerberos5 und OpenAFS)<br />
bind .deb : DNS-Server<br />
Man kann die benötigten Pakete einzeln installieren. Schneller geht es aber,<br />
wenn man stattdessen eines oder mehrere der folgende Meta-Pakete auf der jeweiligen<br />
Maschine installiert. Diese Pakete bestehen nur aus einer Liste von<br />
Abhängigkeiten, so dass bei deren Installation all die abhängigen Pakete nachgezogen<br />
werden.<br />
instantafs-afs<strong>server</strong> .deb <strong>für</strong> zukünftige AFS-Datenbank-Server und File<strong>server</strong><br />
instantafs-dns<strong>server</strong> .deb <strong>für</strong> alle zukünftigen DNS-Server<br />
instantafs-krb5<strong>server</strong> .deb <strong>für</strong> alle zukünftigen Kerberos5-Server<br />
instantafs-smb<strong>server</strong> .deb <strong>für</strong> den zukünftigen SMB2AFS-Gateway<br />
Beachten Sie, daß auf dem ersten AFS-File<strong>server</strong> auch das Paket instantafsclient<br />
.deb installiert werden muß.
4.3 Ablauf einer InstantAFS-Installation 69<br />
4.2.4 Obligatorische Clientpakete<br />
Auf allen AFS-Client-Computern müssen einige Pakete installiert werden.<br />
Zusätzlich benötigen folgende Rechner diese Pakete:<br />
• der erste AFS-DB-Server (=db-acall-Server)<br />
• das Samba-Gateway<br />
• der erste AFS-File<strong>server</strong> (nur zur Installation per instantafs.setup,<br />
später kann der AFS-Client wieder deinstalliert werden).<br />
Es existiert ein Meta-Paket namens instantafs-client .deb , das bei seiner Installation<br />
folgende Pakete, die <strong>für</strong> AFS-Clients benötigt werden, nachzieht:<br />
openafs-client .deb : Dieses Paket enthält den Cachemanager und einige Tools wie fs, vos<br />
und pts. Beachten Sie bei den debconf-Fragen 4 , dass der Client noch<br />
nicht gestartet werden darf.<br />
openafs-modules2 .deb : Dieses virtuelle Paket wird von allen Kernel-spezifischen OpenAFS-<br />
Modulpaketen bereitgestellt. Wenn ein solches Paket nicht vorhanden ist,<br />
gibt es mehrere Lösungen:<br />
1. Im Rahmen von InstantAFS werden Kernelpakete mit diversen Modulpaketen<br />
bereitgestellt. Die Kernel haben folgende Kennungen:<br />
2.4.27-f3 : ein Allerweltskernel (fuer 586-kompatible Rechner)<br />
2.4.27-f3p : ein P-IV-Kernel mit SMP-Support.<br />
Zu diesen Kerneln werden openafs-modules .deb -Pakete bereitgestellt,<br />
die man z.B. so installiert:<br />
root@host>dpkg -i openafs-modules-2.4.27-f3_1.2.11-3.1+rorw+2_i386.deb<br />
2. Man kann sich auch selbst Kernelpakete und ein passendes OpenAFS-<br />
Modulpaket bauen 5 .<br />
instantafs .deb : Dieses Paket enthält die <strong>für</strong> InstantAFS geschriebenen Skripte. Es zieht<br />
durch Abhängigkeiten weitere Pakete hinterher (vor allem Perl-Module).<br />
libpam-krb5 .deb : Dieses Paket stellt ein PAM-Plugin <strong>für</strong> die Authentifikation gegen<br />
Kerberos-Server bereit.<br />
libpam-openafs-session .deb : Dieses Paket wird benötigt, damit man bei der Anmeldung am Rechner<br />
gleich am AFS “angemeldet wird” (ein Token erhält).<br />
libnss-ptdb .deb : ein Namensdienst, der die PTDB zur Namensauflösung nutzt.<br />
4.3 Ablauf einer InstantAFS-Installation<br />
4.3.1 Start<br />
ntp .deb : das Zeitsynchronisationstool, das die Zeit innerhalb der Zelle abgleicht.<br />
InstantAFS stellt eine Installationsprozedur zur Verfügung, die nach Eingabe<br />
einiger Parameter AFS automatisch aufsetzt.<br />
4 debconf: Tool, das die Konfiguration der Software bei der Installation unterstützt<br />
5 Debian stellt Tools <strong>für</strong> diesen Zweck bereit, so dass ein Kernelpaket zu bauen kaum schwieriger<br />
ist als einen neuen Kernel zu compilieren.
70 4 Einrichtung einer AFS-Zelle<br />
user@host>instantafs.setup<br />
4.3.2 Allgemeine Informationen zum Ablauf<br />
Lesen Sie unbedingt vorher die Sicherheitshinweise (siehe 3.7.4, Seite 54) und<br />
installieren Sie alle nötigen Pakete (siehe 4.2.3, Seite 68) - möglichst vor der<br />
instantafs.setup-Installation. Wenn die neue Zelle auf einem einzelnen<br />
Rechner laufen soll, genügt die Installation von instantafs-all .deb - alle weiteren<br />
Pakete werden durch Abhängigkeiten ebenfalls installiert.<br />
Wählen Sie einen Rechner aus, von dem aus sie die Installation steuern wollen.<br />
Auf diesem Rechner wird dann instantafs.setup ausgeführt. Auf diesem<br />
Rechner muß lediglich instantafs .deb installiert sein.<br />
Ein zusätzlicher Parameter wird als Datei interpretiert, aus der eine vorher gespeicherte<br />
Konfiguration geladen werden soll. Das Hauptmenü (siehe 4.1) erscheint.<br />
Zur Darstellung der Oberfläche wird dialog benutzt.<br />
Alle bereits abgearbeiteten Menüpunkte sind jederzeit wieder auswählbar. Bei<br />
bestimmten Änderungen (z.B. Festlegung der DNS-Server), sind bereits abgearbeitete<br />
Konfigurationsschritte erneut durchzuführen (z.B. Einrichtung der DNS-<br />
Serverprozesse). Einige Menüpunkte sind immer “gefahrlos” wählbar:<br />
write-config : Hier kann man den aktuellen Zustand von instantafs.setup komplett<br />
speichern. Diese Funktion ist vor allem sinnvoll, wenn man verschiedene<br />
Konfigurationen der Zelle ausprobieren will und sie da<strong>für</strong> mehrmals<br />
hintereinander neu konfiguriert. Es werden immer 2 Dateien geschrieben<br />
- eine mit den geheimen Daten der Zelle und eine, die <strong>für</strong> die Allgemeinheit<br />
bestimmt ist (Endung: .public).<br />
read-config : Damit lässt sich eine vorher abgespeicherte Konfiguration wieder laden.<br />
Hinweis: Es lassen sich nur “geheime” Konfigurationsfiles laden (siehe<br />
write-config).<br />
show-config : Dieser Menüeintrag zeigt den internen Zustand des Setup-Tools an (Bsp.<br />
siehe Listing 4.2).<br />
options : Hier lassen sich einige Flags setzen oder löschen (z.B. Verbose-Mode<br />
ein/aus).<br />
cclient : Hier werden einige Optionen <strong>für</strong> instantafs-customclient .deb gesetzt.<br />
Das sollte nicht nötig sein, jedoch ist es u.U. hilfreich, wenn bestimmte<br />
Einstellungen auf den Clients von den InstantAFS-Vorgaben abweichen<br />
sollen.<br />
Die aktivierte debug-Option im options-Untermenü sorgt da<strong>für</strong>, dass alle benutzten<br />
Shell-Kommandos angezeigt werden. Außerdem bewirkt diese Option,<br />
dass nach den Konfigurationsschritten immer auf einen Druck der Enter-Taste<br />
gewartet wird. Das ist sinnvoll, um Hinweise und Warnungen zu sehen, die sonst<br />
durch die dialog-Dialoge sofort wieder überdeckt würden. Konnte ein Konfigurationsschritt<br />
nicht fehlerfrei ausgeführt werden, wird auch ohne debug um<br />
einen Tastendruck gebeten.<br />
Listing 4.1: Hauptmenü von instantafs.setup<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−InstantAFS−S e t u p t o o l −−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| c e l l −name : A c e l l i s an AFS−a d m i n i s t r a t i o n −domain . Each AFS−e n a b l e d |<br />
| Computer b e l o n g s t o e x a c t l y one AFS−C e l l . The c e l l name s h o u l d be e q u a l t o |<br />
| t h e domain name . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | c e l l −name Choose a name f o r t h e new c e l l | |<br />
| | | |<br />
| | w r i t e−c o n f i g Write a c e l l −c o n f i g u r a t i o n −f i l e | |
4.3 Ablauf einer InstantAFS-Installation 71<br />
| | read−c o n f i g Read a c e l l −c o n f i g u r a t i o n −f i l e | |<br />
| | show−c o n f i g An overview of your c o n f i g u r a t i o n d e c i s i o n s | |<br />
| | c c l i e n t C o n f i g u r e i n s t a n t a f s −c u s t o m c l i e n t o p t i o n s h e r e | |<br />
| | o p t i o n s S e l e c t o p t i o n s f o r t h e c e l l −c r e a t i o n −p r o c e s s | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < OK > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
Listing 4.2: Konfigurationsübersicht von instantafs.setup<br />
+−−−−−(+)−−−−−−−−−−−−−−C o n f i g u r a t i o n Overview−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| $VAR1 = { |<br />
| ’ f i l e s e r v e r s ’ => [ ] , |<br />
| ’ dns ’ => { |<br />
| ’ s e r v e r s ’ => [ ] , |<br />
| ’ f o r w a r d e r s ’ => [ ] |<br />
| } , |<br />
| ’ o p t i o n s ’ => { |<br />
| ’ r s s h ’ => 1 , |<br />
| ’ debug ’ => 1 |<br />
| } , |<br />
| ’ menustate ’ => 5 , |<br />
| ’ time ’ => { |<br />
| ’ s e r v e r s ’ => [ ] , |<br />
| ’ f o r w a r d e r s ’ => [ ] |<br />
| } , |<br />
| ’ p r i n c i p a l s ’ => { |<br />
+−−−−.(+)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−( 41%)−−+<br />
| < EXIT > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
4.3.3 Definieren von Rechnern (hosts)<br />
Jeder Menüpunkt führt entweder zu einem Dialogfeld oder zu einem Untermenü.<br />
Wurde ein Konfigurationsschritt erfolgreich 6 abgeschlossen, werden weitere<br />
Konfigurationsschritte freigeschaltet. Dabei werden u.U. auch mehrere Konfigurationsschritte<br />
freigeschaltet. Z.B. werden nach der Konfiguration der benötigten<br />
Recher (siehe 4.3.3, Seite 71) der Menüpunkt dns freigeschaltet.<br />
Alle in und von der Zelle benutzten Rechner müssen über den Menüpunkt<br />
hosts definiert werden, wobei jeweils der Name des Rechners (ohne Domainname,<br />
nur der Hostname) angegeben werden müssen.<br />
Alle hier angegebenen Rechner werden während der Konfiguration ins DNS<br />
aufgenommen bzw. 7 später als A-Records auf bestehenden DNS-Servern vorausgesetzt.<br />
Auch zellenfremde Maschinen wie DNS-Forwarder, Paket<strong>server</strong> oder Upstream-<br />
Zeit<strong>server</strong> müssen hier definiert werden - die benutzten Rechner müssen nicht<br />
zwingend Teil der neuen AFS-Zelle sein - sie werden nur in die DNS-Domain<br />
aufgenommen. Als DNS-Forwarder und Upstream-Zeit<strong>server</strong> können nur<br />
Rechner verwendet werden, die hier definiert wurden. Auf diesen Rechnern ist<br />
keine weitere Konfiguration <strong>für</strong> InstantAFS nötig.<br />
Die Liste der Rechner ist am Anfang leer (siehe Listing 4.3). Man kann Rechner<br />
hinzufügen (siehe Listing 4.4) (natürlich auch wieder entfernen), bis die Liste<br />
6 Die Konfiguration (z.B. des DNS) muss sinnvoll sein. Wurde kein DNS-Server konfiguriert, ist<br />
der Schritt nicht erfolgreich abgeschlossen.<br />
7 Wenn die DNS-Konfiguration manuell erfolgen soll (dns/dnscfg = manually)
72 4 Einrichtung einer AFS-Zelle<br />
alle Rechner enthält (z.B. wie in Listing 4.5, die man während der Installation<br />
benutzen will.<br />
Für jeden Rechner können bestimmte Flags gesetzt werden, die darüber entscheiden,<br />
ob InstantAFS darauf bestimmte Konfigurationen durchführen soll:<br />
afs-client : Der AFS-Cache-Manager soll auf diesem Computer konfiguriert werden.<br />
Das schliesst Einstellungen über den Zellennamen und die Konfiguration<br />
des Cache-Directories ein.<br />
dns-client : Die Option konfiguriert den Name Service Switch der libc so, dass er <strong>für</strong><br />
host-Auflösung DNS benutzt. Die Datei /etc/resolv.conf wird mit dem<br />
korrekten Domainnamen und mit den DNS-Server-IPs bestückt und letztendlich<br />
wird getestet, ob ein bei einem Lookup auf den eigenen Hostnamen<br />
die korrekte FQDN zurückgeliefert wird.<br />
ntp : Die Option steuert die Konfiguration eines lokalen NTP-Deamons (ntpd)<br />
sowie der einmaligen NTP-Synchronisation beim Booten (ntpdate).<br />
nss_passwd : Dieses Flag bewirkt, das der Name Service Switch der libc angewiesen<br />
wird, <strong>für</strong> den passwd-Dienst auf libnss-ptdb .deb zurückzugreifen.<br />
nss_justadd : Ist diese Option gesetzt, werden bei Änderungen an der NSS-Konfiguration<br />
(durch nss_passwd oder dns-client) die zu benutzenden Dienste hinzugefügt.<br />
Das ist. z.B. sinnvoll, wenn InstantAFS in einem bereits arbeitenden NIS-<br />
Netzwerk eingeführt werden , die Migration aber schrittweise erfolgen<br />
soll.<br />
krb5-client : Dieses Flag steuert die Konfiguration des Kerberos5-Clients. Das Läuft<br />
praktisch nur auf die Anpassung von /etc/krb5.conf hinaus.<br />
afs<strong>server</strong> : Diese Option konfiguriert den entsprechenden Rechner als einen AFS-<br />
Server (siehe 7.5, Seite 146). Die File- und DB-Server der Zelle werden<br />
automatisch zu AFS-Servern. Soll z.B. später noch ein Backup-Server<br />
eingerichtet werden, kann man ihn mit dieser Option vorbereiten.<br />
Hinweise:<br />
• Wenn man keine Sonderwünsche hat, sollte man am besten keines der<br />
Flags setzen. InstantAFS stellt später auf den Servern der Zelle automatisch<br />
ein, was unbedingt konfiguriert werden muss.<br />
• Sollen zusätzliche AFS-Clients konfiguriert werden folgende Konfigurationsoptionen<br />
benötigt:<br />
– afs-client<br />
– dns-client<br />
– ntp<br />
– nss_passwd<br />
– krb5-client<br />
Man kann allerdings auch einfach später das Paket instantafs-customclient .deb<br />
installieren (siehe 7.13, Seite 165).<br />
Listing 4.3: Liste der verfügbaren Rechner - noch leer<br />
+−−−−−−−−−−−−−−−−−−−−−−S e r v e r s f o r your new AFS−Cell−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| This i s t h e l i s t of your h o s t . Add more or d e l e t e some i f you l i k e . A l l |<br />
| h o s t s you e n t e r here , w i l l be known t o a l l of your c e l l h o s t s . You may |<br />
| want t o e n t e r some h o s t s n o t b e l o n g i n g t o your c e l l , t o o |
4.3 Ablauf einer InstantAFS-Installation 73<br />
| ( debian−package−s e r v e r s , u p s t r e a m t i m e s e r v e r s , . . . ) . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | ( no h o s t s e n t e r e d ) | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
| |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < Delete > < Add > < Done > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
Listing 4.4: Hinzufügen eines Rechners zur Liste<br />
+−−−−−−−−−−−−−−−Add a host , you want t o use w i t h i n your Cell−−−−−−−−−−−−−−−−−+<br />
| E n t e r Name and IP−a d d r e s s ( s e p e r a t e d by a t l e a s t one w h i t e s p a c e ) of a |<br />
| Computer i n s i d e your Network . The Name needn ’ t r e f l e c t i t s f u t u r e |<br />
| f u n c t i o n . Example : " zeus 1 0 . 0 . 2 . 1 " . A l t e r n a t i v e l y you may g i v e j u s t a |<br />
| hostname ( no FQDN ) . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | f i l e s e r v e r 1 1 0 . 0 . 5 3 . 1 5 5 | |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < OK > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
Listing 4.5: Liste der verfügbaren Rechner - gefüllt<br />
+−−−−−−−−−−−−−−−−−−−−−−S e r v e r s f o r your new AFS−Cell−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| This i s t h e l i s t of your h o s t . Add more or d e l e t e some i f you l i k e . A l l |<br />
| h o s t s you e n t e r here , w i l l be known t o a l l of your c e l l h o s t s . You may |<br />
| want t o e n t e r some h o s t s n o t b e l o n g i n g t o your c e l l , t o o |<br />
| ( debian−package−s e r v e r s , u p s t r e a m t i m e s e r v e r s , . . . ) . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | d a t e n b a n k 1 0 . 0 . 5 0 . 2 5 0 | |<br />
| | d n s f o r w a r d e r 1 0 . 0 . 5 2 . 1 | |<br />
| | e x t t i m e s e r v 1 0 . 0 . 5 3 . 1 6 8 | |<br />
| | f i l e s e r v e r 1 1 0 . 0 . 5 3 . 1 5 5 | |<br />
| | f i l e s e r v e r 2 1 0 . 0 . 5 8 . 1 | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
| |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < Delete > < Add > < Done > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
4.3.4 Auswahl der DNS-Server (dns)<br />
In diesem Dialog kann ausgewählt werden, ob InstantAFS neue DNS-Server<br />
aufsetzen soll, oder ob bereits existierende DNS-Server direkt benutzt werden<br />
sollen.<br />
Installation neuer DNS-Server durch InstantAFS (dnscfg=by InstantAFS)<br />
Bei dieser Installationsmethode müssen DNS-Server und optional<br />
DNS-Forwarder angegeben werden. Durch Auswahl des Hauptmenüpunktes<br />
dns-<strong>server</strong>s (später) werden die Server eingerichtet. DNS-Server liefern Informationen<br />
zur Domain der Zelle aus und leiten Anfragen an Rechner im<br />
Internet, oder an die optionalen DNS-Forwarder weiter. InstantAFS wird nichts<br />
an den DNS-Forwardern ändern.
74 4 Einrichtung einer AFS-Zelle<br />
4.3.5 Zeit<strong>server</strong>-Auswahl (time<strong>server</strong>s)<br />
Testen bereits existierender DNS-Server (dnscfg=manually) Wurde diese<br />
Methode gewählt zeigt InstantAFS bei Auswahl des Hauptmenüpunktes dns<strong>server</strong>s<br />
(später) evtl. fehlende DNS-Records an und wird die Installation fortsetzen,<br />
wenn die Records manuell auf den bereits existierenden DNS-Servern<br />
angelegt wurden.<br />
Hier müssen die zukünftigen NTP-Server der Zelle definiert werden. Die Zeit<strong>server</strong><br />
werden miteinander verbunden und greifen dann alle unabhängig voneinander<br />
zusätzlich auf die optionalen externen Zeit<strong>server</strong> (“forwarder“) zu,<br />
um sich global gültige Zeit zu holen.<br />
Hinweise:<br />
4.3.6 Auswahl der AFS-DB-Server (db<strong>server</strong>s)<br />
• Es ist ratsam, daß die (alle) AFS-DB-Server gleichzeitig Zeit<strong>server</strong> sind.<br />
• Wenn gerade keine frei zugänglichen Zeit<strong>server</strong> im Internet bekannt sind<br />
- hier ein Tip:<br />
ptbtime1.ptb.de und ptbtime2.ptb.de - die Zeit<strong>server</strong> der Physikalisch<br />
Technischen Bundesanstalt.<br />
Hier müssen einer oder mehrere AFS-Datenbank-Server <strong>für</strong> die neue Zelle<br />
ausgewählt werden (siehe Listing 4.6. Diese Server dienen gleichzeitig als<br />
Kerberos-Server. Von besonderer Bedeutung ist der primäre DB-Server. Eigentlich<br />
sind unter AFS alle DB-Server gleichwertig, jedoch muß es es einen<br />
DB-Server geben, der die Rolle des acall-db-Servers übernimmt. Ausserdem<br />
muß ein Kerberos-Server eine Sonderstellung einnehmen - nur auf diesem<br />
können Kerberos-Nutzer verändert (Passwort setzen, neu anlegen, löschen)<br />
werden.<br />
Listing 4.6: Die Liste der AFS-DB-Server<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−AFS−DB−s e r v e r s −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| This i s t h e l i s t of your DB−s e r v e r s . Each one w i l l c o n s i s t of |<br />
| AFS−DB−s e r v e r p r o c e s s e s ( p t s e r v e r , v l s e r v e r and b u s e r v e r ) and |<br />
| Kerberos−s e r v e r p r o c e s s e s ( krb5kdc , krb524d ) . The p a c k a g e s |<br />
| i n s t a n t a f s −a f s s e r v e r and i n s t a n t a f s −k r b 5 s e r v e r have t o be i n s t a l l e d on any |<br />
| AFS−DB−S e r v e r . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | d a t e n b a n k ( Primary ) 1 0 . 0 . 5 0 . 2 5 0 | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
| |<br />
| |<br />
| |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < D e l e t e > < Add > < Done > < Set_Primary > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
Hinweis:<br />
• Den Primären AFS-DB-Server definiert man mit Set_Primary.<br />
• Jeder Zeit<strong>server</strong> sollte ein AFS-DB-Server sein und umgedreht.
4.3 Ablauf einer InstantAFS-Installation 75<br />
4.3.7 Auswahl der AFS-File<strong>server</strong> (fs<strong>server</strong>s)<br />
In diesem Dialog werden die zukünftigen AFS-File<strong>server</strong> der Zelle definiert.<br />
Auf hier gibt es wieder einen hervorstechenden Server - den primären AFS-<br />
File<strong>server</strong>. Auf diesem wird InstantAFS 90% der Konfigurationsarbeit leisten -<br />
die Konfiguration dieses File<strong>server</strong>s ist deshalb auch (später) ein eigener Menüpunkt.<br />
Listing 4.7: Die Liste der AFS-File<strong>server</strong><br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−AFS−F i l e s e r v e r s −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| This i s t h e l i s t of your AFS−f i l e s e r v e r s . F i l e s e r v e r s w i l l p r o v i d e s t o r a g e |<br />
| f o r f i l e s r e s i d i n g i n AFS f i l e s p a c e . ’ i n s t a n t a f s −a f s s e r v e r ’ has t o be |<br />
| i n s t a l l e d on any AFS f i l e s e r v e r . The f i r s t f i l e s e r v e r you choose , w i l l |<br />
| c o n t a i n t h e most i m p o r t a n t volumes of t h e c e l l ( r o o t . a f s , r o o t . c e l l , . . . |<br />
| ) . Any f i l e s e r v e r must c o n t a i n a t l e a s t one / v i c e p∗− p a r t i t i o n ( s e e |<br />
| d o c u m e n t a t i o n ) . New volumes w i l l be c r e a t e d on t h e f i r s t p a r t i t i o n of t h e |<br />
| p r i m a r y f i l e s e r v e r by d e f a u l t . This r e q u i r e s t h a t t h e f i r s t f i l e s e r v e r has |<br />
| a ’ / v i c e a ’− p a r t i t i o n . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | f i l e s e r v e r 1 ( Primary ) 1 0 . 0 . 5 3 . 1 5 5 | |<br />
| | f i l e s e r v e r 2 1 0 . 0 . 5 8 . 1 | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < D e l e t e > < Add > < Done > < Set_Primary > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
4.3.8 Auswahl eines Samba-Gateways (smbgateway)<br />
Hier kann einem einzelnen Rechner die Rolle des Samba-Gateways zugewiesen.<br />
Dieser Rechner wird später das Äquivalent von Klartextpasswörtern der<br />
Kerberos-Nutzer speichern - er sollte entsprechend sicherheitsbewusst behandelt<br />
werden.<br />
Einige theoretische Details zu Samba-Gateway gibt’s unter A.6 auf Seite 230.<br />
Listing 4.8: Auswahl des Samba-Gateways<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−AFS2SMB−Gateways−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| You may choose e i t h e r a s i n g l e Samba gateway h o s t or none . That h o s t w i l l |<br />
| p r o v i d e AFS a c c e s s f o r Windows computers (= c l i e n t s s p e a k i n g SMB ) . I f you |<br />
| want t o l e t s i m p l e Windows NT c l i e n t s a c c e s s t h e AFS f i l e s p a c e , you won ’ t |<br />
| need a gateway − a ( more or l e s s ) n a t i v e AFS c l i e n t i s a v a i l a b l e f o r |<br />
| Windows NT/ 2 k / XP . Windows 3 . 1 1 / 9 5 / 9 8 and ME c l i e n t s s h o u l d use a gateway . |<br />
| I n s t a l l ’ i n s t a n t a f s −smb<strong>server</strong> ’ on t h e t h a t machine b e f o r e c o n t i n u i n g . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | f i l e s e r v e r 2 1 0 . 0 . 5 8 . 1 | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| | | |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
| |<br />
| |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < Delete > < Add > < Done > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
4.3.9 SSH-Schlüssel <strong>für</strong> Datenbankupdates (ssh-keys)<br />
An dieser Stelle werden die <strong>für</strong> DNS- und <strong>für</strong> Kerberos-Datenbankupdates<br />
benötigten SSH-Schlüssel erzeugt. Die Public-Keys werden jeweils auf den
76 4 Einrichtung einer AFS-Zelle<br />
4.3.10 Aufräumen vor der Installation (cleanup)<br />
Slave-Servern unter /root/.ssh/authorized_keys gespeichert. Die Private-Keys<br />
werden unter /etc/krb5kdc/syncsshkey (<strong>für</strong> Kerberos) bzw. unter /etc/bind/syncsshkey<br />
(<strong>für</strong> DNS) abgelegt.<br />
Die Schlüssel werden später jeweils von den Skripten instantafs.kerberos (siehe<br />
9.2.18, Seite 201) und instantafs.bind-update (siehe 9.2.11, Seite 197) benutzt,<br />
um die jeweilige Datenbank nach Veränderungen auf die Slave-Server zu<br />
kopieren.<br />
Wählt man den Menüpunkt cleanup aus, loggt sich instantafs.setup auf<br />
allen Rechnern ein, die als Zellenmitglieder ausgewiesen sind und entfernt<br />
bereits laufende AFS-Client-Prozesse, temporäre Files und ähnliche Dinge,<br />
die einer Installation mit InstantAFS im Wege stehen könnten. Es werden<br />
jedoch keine Daten von AFS-File<strong>server</strong>n gelöscht - diese Verantwortung wäre<br />
<strong>für</strong> ein Programm zu groß - der Benutzer wird lediglich darauf hingewiesen.<br />
Eventuell ist es dann nötig, alte Daten aus dem AFS manuell zu löschen. Je<br />
nach /vice-Partition muß dann ein Befehl in folgender Form eingegeben werden:<br />
root@afs<strong>server</strong>> cd /vicepa && rm -rf V*.vol AFSIDat Lock<br />
4.3.11 Überprüfen der Konfiguration (check)<br />
4.3.12 Setup der DNS-Server (dns-<strong>server</strong>s)<br />
4.3.13 Setup der DNS-Clients (dns-clients)<br />
4.3.14 Setup der Zeit<strong>server</strong> (ntp-<strong>server</strong>s)<br />
4.3.15 Setup der NTP-Clients (ntp-clients)<br />
Dieser spezielle Befehl löscht nur AFS-spezifische Dateien und Verzeichnisse.<br />
Mit Betätigung dieses Menüpunktes wird die Konfiguration überprüft. Dabei<br />
werden u.U. Hinweise und Warnungen ausgegeben. Ausserdem werden die<br />
host-Flags (siehe 4.3.3, Seite 71) <strong>für</strong> Server der neuen Zelle sinnvoll gesetzt.<br />
Je nach Einstellung (siehe 4.3.4, Seite 73) werden die DNS-Server der Zelle<br />
jetzt automatisch konfiguriert oder die bereits existierenden DNS-Server auf<br />
alle von InstantAFS benötigten DNS-Records überprüft.<br />
Das Setup-Tool logt sich bei Auswahl dieses Menüpunktes bei allen Rechnern,<br />
bei denen das Flag dns-client (siehe 4.3.3, Seite 71) gesetzt ist, ein und setzt die<br />
DNS-Einstellungen (in /etc/resolv.conf ) entsprechend.<br />
Hier werden die NTP-Server der Zelle konfiguriert. Wenn keine externen Referenzzeit<strong>server</strong><br />
definiert wurden bzw. das Internet nicht erreichbar ist, sollte man<br />
vorher die Zeit auf diesen Rechnern richtig einstellen.<br />
Dieser Menüpunkt sorgt <strong>für</strong> die Konfiguration der NTP-Clients auf den Rechnern<br />
der Zelle. Die NTP-Clients bestehen jeweils aus einem automatisch gestarteten<br />
Serverprozess (ntpd), der die Zeit durch Driften und durch sanfte Anpassungen<br />
konstant hält, sowie dem bei jedem Rechnerstart einmalig aufgerufenem<br />
Synchronisationstool ntpdate, das die Zeit auf einen Schlag synchronisiert.
4.3 Ablauf einer InstantAFS-Installation 77<br />
4.3.16 Setup der Kerberos-Server (krb5-<strong>server</strong>s)<br />
4.3.17 Erzeugen der Service-Keytabs (keytabs)<br />
4.3.18 Initialisieren der AFS-Server (afs-init)<br />
4.3.19 Initialisierung der AFS-Datenbank (afs-db)<br />
4.3.20 Setup des ersten File<strong>server</strong>s (afs-fs1)<br />
4.3.21 Start der restlichen File<strong>server</strong> (afs-fs2)<br />
4.3.22 Setup des Samba-Gateways (samba-<strong>server</strong>)<br />
4.3.23 Setup der acall-Server (acall)<br />
Hier wird die Konfiguration der Kerberos-Server durchgeführt. Die REALM<br />
der Zelle wird auf dem Kerberos-Master-Server (immer der primäre AFS-DB-<br />
Server) angelegt. Die Kerberos-Datenbank wird anschliessend auf die Slave-<br />
Server kopiert.<br />
Dieser Menüpunkt sorgt da<strong>für</strong>, dass die <strong>für</strong> die Zelle benötigten Kerberos-<br />
Keytabs auf dem Kerberos-Master-Server erzeugt und in den Konfigurationsbaum<br />
der Zelle eingebaut werden. Der Konfigurationsbaum befindet sich<br />
derzeitig noch im Speicher - instantafs.setup arbeitet damit. Später<br />
wird er im AFS abgelegt werden.<br />
Während der Erzeugung der Keytabs werden auch host-Principals <strong>für</strong> alle Rechner<br />
erzeugt, deren krb5-client-Flag (siehe 4.3.3, Seite 71) gesetzt ist. Dadurch<br />
ist ein komfortables Einloggen auf diesen Rechnern möglich (siehe A.1, Seite<br />
223).<br />
Hier werden alle AFS-Server der Zelle mit Grundeinstellungen versehen, sie erhalten<br />
jedoch noch keine spezifische Funktion (File<strong>server</strong>, DB-Server, Backup-<br />
Server, ...) (siehe 7.5, Seite 146).<br />
Diese Funktion sorgt da<strong>für</strong>, dass alle AFS-Datenbank<strong>server</strong> der Zelle konfiguriert<br />
werden. Die wichtigsten Principals (admin und acall) werden angelegt<br />
und mit Zellensuperuserrechten (Mitgliedschaft in system:administrators)<br />
ausgestattet. Ausserdem wird die BDB mit einer Beispiel-Dump-Hierarchie<br />
versehen.<br />
Hier wird der erste File<strong>server</strong> der Zelle aufgesetzt. Das erste Mal wird ein AFS-<br />
Client in der Zelle gestartet. Es werden sämmtliche benötigten Volumes angelegt,<br />
alle benötigten Rechte gesetzt.<br />
Außerdem wird der Demonstrationsbenutzer afstest komplett mit Homedirectory<br />
eingerichtet.<br />
Die anderen File<strong>server</strong> (alle bis auf den primären) werden aktiviert.<br />
Hier wird das Samba-Gateway konfiguriert und gestartet.<br />
Diese Funktion loggt sich auf folgenden Rechnern ein und richtet auf diesen<br />
instantafs.acall-<strong>server</strong> ein:<br />
• auf dem primären AFS-DB-Server<br />
• dem primären Kerberos5-Server
78 4 Einrichtung einer AFS-Zelle<br />
4.3.24 Abschließendes<br />
• dem Samba-Gateway<br />
Mit der Konfiguration des acall-Server ist die Zelle arbeitsfähig.<br />
Die Zelle sollte jetzt bereits arbeitsfähig sein. Hier noch einige Dinge, die zu<br />
beachten sind:<br />
• Wurden alle Server gegen Benutzer abgesichert (siehe 3.7.5.4, Seite 56)?<br />
• Wird ein Backup-System gebraucht (siehe 5.2, Seite 100)?<br />
Listing 4.9: Lohn der Mühe - das finish im Setup-Menü<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−InstantAFS−S e t u p t o o l −−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| f i n i s h : Your C e l l i s c o n f i g u r e d now . You may l e a v e t h i s s e t u p t o o l . |<br />
| +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| | f i n i s h E x i t program | |<br />
| | | |<br />
| | a c a l l Setup a c a l l −p r o c e s s e s on v i t a l s e r v e r s | |<br />
| | samba−s e r v e r Setup a t h e samba−gateway | |<br />
| | a f s−c l i e n t s S t a r t a l l openafs−c l i e n t s ( e x c e p t t h e f i r s t f i l e s e r v e r ) | |<br />
| | a f s−f s 2 Setup r e m a i n i n g AFS−FS−S e r v e r s | |<br />
| | a f s−f s 1 Setup f i r s t AFS−FS−S e r v e r s + a l l n e c e s s a r y volumes | |<br />
| | a f s−db Setup AFS−DB−S e r v e r s | |<br />
| | a f s−i n i t I n i t i a l i s i z e AFS−S e r v e r s | |<br />
| | k e y t a b s C r e a t e n e c e s s a r y Kerberos5−Keytabs on Kerberos−Master | |<br />
| | krb5−c l i e n t s Setup K e r b e r o s c l i e n t s | |<br />
| | krb5−s e r v e r s C r e a t e a s i m p l e k e r b e r o s−Realm | |<br />
| +.(+)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ |<br />
| |<br />
| |<br />
| |<br />
| |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
| < OK > |<br />
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
4.3.25 Ein kleiner Test...<br />
Praktisch alle Funktionen der Zelle lassen sich mit folgenden Kommandos<br />
testen, wobei davon ausgegangen wird, dass im Laufe der Installation der<br />
Rechner afsclient als AFS-Client konfiguriert wurde:<br />
user@host>ssh afstest@afsclient<br />
Password:Gewähltes Passwort von afstest<br />
afstest@afsclient><br />
Mit tokens kann überprüft werden, ob afstest beim Einloggen automatisch ein<br />
Token bekommen hat:<br />
afstest@afsclient> tokens<br />
Tokens held by the Cache Manager:<br />
User’s (AFS ID 1000) tokens for afs@cbs.mpg.de [Expires Oct 5 13:36]<br />
- -End of list- -<br />
afstest@afsclient> ssh afsclient<br />
Wichtig ist, dass eine Zeile, die mit User’s beginnt, angezeigt wird.<br />
Mit dem folgenden Kommando testet man, ob die automatische Weiterleitung<br />
des Kerberos-TGT über ssh per gssapi (siehe A.1, Seite 223)funktioniert:<br />
Im positiven Fall sollte man ohne ein Passwort einzugeben wieder auf afsclient<br />
eingeloggt sein. Das Kommando tokens sollte wiederum ein Token anzeigen –<br />
eines, das den selben Ablaufzeitpunkt wie das vorherige Token hat.
4.4 Ablauf einer manuellen Grundinstallation 79<br />
Das folgende Kommando testet, ob die acall-Schnittstelle funktioniert:<br />
afstest@afsclient> acall db ia:helloworld<br />
This is instanafs-acall’s innovative hello-world program.<br />
You’ve been identified as: ’afstest’<br />
Your Kerberos5-Principal is : ’afstest’<br />
This is the ’db’-acall-<strong>server</strong>.<br />
You didn’t send any arguments.<br />
4.4 Ablauf einer manuellen Grundinstallation<br />
4.4.1 DNS<br />
4.4.1.1 Installation<br />
Wenn acall oder das holen eines Tokens per ssh Probleme bereitet, könnte das<br />
an einer fehlenden Reverse-Lookup-Zone im DNS liegen. Hinweise, wie man<br />
sie aufsetzt, wurden während des Installationsprozesses nach<br />
/etc/bind/named.conf<br />
auf dem DNS-Server geschrieben.<br />
Lesen Sie unbedingt vorher die Sicherheitshinweise (siehe 3.7.4, Seite 54).<br />
Führen Sie die Installation der Zelle in der angegeben Reihenfolge durch. Beachten<br />
Sie, dass sowohl auf den Clients wie auf den Servern Debian Woody<br />
3.0 vorausgesetzt wird. In jedem anderen Fall ist die Installation trotzdem möglich,<br />
sie kann jedoch vor allem in Bezug auf die Pfade zu Konfigurationsfiles<br />
erheblich von dieser Beschreibung abweichen.<br />
Installieren Sie zuerst die benötigten Pakete (siehe 4.2.3, Seite 68) auf jeder<br />
Maschine. Sorgen Sie außerdem da<strong>für</strong>, dass Sie in Problemfällen - vor<br />
allem auf den zukünftigen Servern - weiterhin Pakete installieren können.<br />
Es kann z.B. hilfreich sein, ein /etc/apt/sources.list-File zur Hand zu haben,<br />
in dem der Paket<strong>server</strong> als numerische IP-Adresse angegeben ist, falls die<br />
DNS-Konfiguration auf dem Rechner von InstantAFS modifiziert wurde.<br />
Es wird vorsichtshalber davon ausgegangen, dass auch so grundlegende Dienste<br />
wie DNS erst noch eingerichtet werden müssen. Stehen diese Dienste bereits<br />
zur Verfügung, müssen lediglich die Konfigurationsdateien entsprechend erweitert<br />
werden.<br />
Dieser Dienst ist <strong>für</strong> alle anderen unverzichtbar und wird deshalb zuerst installiert:<br />
1. Die nötigen Softwarepakete werden auf dem Server installiert:<br />
root@dns<strong>server</strong>> apt-get install instantafs-dns<strong>server</strong><br />
2. Nötig ist mindestens ein Zonenfile (Format wie in Listing 4.10, Beispiel:<br />
siehe Listing 4.11), das im Verzeichnis /etc/bind/ angelegt werden und in<br />
/etc/bind/named.conf eingetragen werden muss.<br />
3. Beachten Sie, dass die IPs aller Rechner, bei einem Reverse-Lookup den<br />
korrekten FQDN zurückliefern müssen. Legen Sie deshalb ein oder mehrere<br />
Reverse-Lookup-Zonenfiles an (siehe Doku von bind .deb <strong>für</strong> weitere<br />
Informationen darüber).
80 4 Einrichtung einer AFS-Zelle<br />
Das Anlegen eines Reverse-Lookup-Zonenfiles lässt sich schwer automatisieren.<br />
InstantAFS richtet ein solches File nicht von selbst ein. Listing<br />
4.12 zeigt das Reverse-Lookup-Zonenfile der Beispielzelle, Listing 4.14<br />
die Integration in das Konfigurationsfile von bind .deb .<br />
Testen Sie nach der Einrichtung, ob der Reverse-Lookup funktioniert:<br />
user@host>host IP eines Rechners der Zelle<br />
$TTL 604800<br />
@ IN SOA ns . [ Zellenname ] . r o o t . [ Zellenname ] . (<br />
1 ; s e r i a l<br />
604800 ; r e f r e s h<br />
86400 ; r e t r y<br />
2419200 ; e x p i r e<br />
7200 ; t t l<br />
)<br />
IN NS ns1<br />
IN MX 10 [ Name des M a i l s e r v e r s ]<br />
l o c a l h o s t IN A 1 2 7 . 0 . 0 . 1<br />
ns1 IN A [ IP des DNS−S e r v e r s ]<br />
; W i c h t i g e s ab h i e r<br />
; Der Punkt h i n t e r dem Domainnamen i s t w i c h t i g .<br />
[ Name d e r Z e l l e ] . IN AFSDB 1 a f s d b 1<br />
[ Name d e r Z e l l e ] . IN AFSDB 1 a f s d b 2<br />
; . . . w e i t e r e AFS−DB−S e r v e r<br />
a f s d b 1 IN CNAME [ Name des 1 . D a t e n b a n k s e r v e r s ]<br />
a f s d b 2 IN CNAME [ Name des 2 . D a t e n b a n k s e r v e r s ]<br />
; . . . w e i t e r e AFS−DB−S e r v e r<br />
Wenn der erwartete FQDN (also der richtige Name des Rechners incl.<br />
Zellenname) zurückgeliefert wurde, ist das ein gutes Zeichen.<br />
Listing 4.10: Format des Zonenfiles <strong>für</strong> eine DNS-Domain, auf der eine AFS-<br />
Zelle aufgesetzt werden soll<br />
_ k e r b e r o s IN TXT " [ Name d e r Realm (DNS−Domainname i n G r o s s b u c h s t a b e n ) ] "<br />
_ k e r b e r o s−m a s t e r . _udp IN SRV 0 0 88 k e r b e r o s<br />
_ k e r b e r o s−adm . _ t c p IN SRV 0 0 749 k e r b e r o s<br />
_kpasswd . _udp IN SRV 0 0 464 k e r b e r o s<br />
k e r b e r o s 1 IN CNAME a f s d b 1<br />
k e r b e r o s 2 IN CNAME a f s d b 2<br />
; . . . w e i t e r e Kerberos−S e r v e r . . .<br />
_ k e r b e r o s . _udp IN SRV 0 0 88 k e r b e r o s 1<br />
IN SRV 0 0 88 k e r b e r o s 2<br />
; . . . w e i t e r e Kerberos−S e r v e r . . .<br />
k e r b e r o s IN CNAME k e r b e r o s 1<br />
; Das Samba−Gateway . . .<br />
sambaserv1 IN CNAME [ Name des Samba−S e r v e r s ]<br />
; Die a c a l l −S e r v e r . . .<br />
a c a l l . db IN CNAME a f s d b 1<br />
a c a l l . krb5 IN CNAME k e r b e r o s<br />
a c a l l . samba IN CNAME sambaserv1<br />
$TTL 604800<br />
@ IN SOA ns . cbs . mpg . de . r o o t . cbs . mpg . de . (<br />
1 ; s e r i a l<br />
604800 ; r e f r e s h<br />
86400 ; r e t r y<br />
2419200 ; e x p i r e<br />
7200 ; t t l<br />
)<br />
IN NS ns1<br />
IN MX 10 mail . cbs . mpg . de<br />
l o c a l h o s t IN A 1 2 7 . 0 . 0 . 1<br />
ns1 IN A 1 0 . 0 . 0 . 1 5<br />
ns2 IN A 1 0 . 0 . 0 . 1 6<br />
Listing 4.11: Beispiel eines Zonenfiles - die DNS-Domain der Zelle cbs.mpg.de
4.4 Ablauf einer manuellen Grundinstallation 81<br />
; Der Punkt h i n t e r dem Domainnamen i s t w i c h t i g !<br />
cbs . mpg . de . IN AFSDB 1 a f s d b 1<br />
cbs . mpg . de . IN AFSDB 1 a f s d b 2<br />
a f s d b 1 IN CNAME s e r v e r 5<br />
a f s d b 2 IN CNAME s e r v e r 6<br />
t i m e s e r v 1 IN CNAME s e r v e r 5<br />
t i m e s e r v 2 IN CNAME s e r v e r 6<br />
t i m e s e r v IN CNAME t i m e s e r v 1<br />
sambaserv1 IN CNAME s e r v e r 2 0<br />
_ k e r b e r o s IN TXT "CBS .MPG. DE"<br />
k e r b e r o s IN CNAME k e r b e r o s 1<br />
_ k e r b e r o s−m a s t e r . _udp IN SRV 0 0 88 k e r b e r o s<br />
_ k e r b e r o s−adm . _ t c p IN SRV 0 0 749 k e r b e r o s<br />
_kpasswd . _udp IN SRV 0 0 464 k e r b e r o s<br />
k e r b e r o s 1 IN CNAME a f s d b 1<br />
k e r b e r o s 2 IN CNAME a f s d b 2<br />
_ k e r b e r o s . _udp IN SRV 0 0 88 k e r b e r o s 1<br />
IN SRV 0 0 88 k e r b e r o s 2<br />
; Rechner d e r Z e l l e<br />
s e r v e r 5 IN A 1 0 . 0 . 0 . 5<br />
s e r v e r 6 IN A 1 0 . 0 . 0 . 6<br />
s e r v e r 1 0 IN A 1 0 . 0 . 0 . 1 0<br />
s e r v e r 1 1 IN A 1 0 . 0 . 0 . 1 1<br />
s e r v e r 1 5 IN A 1 0 . 0 . 0 . 1 5<br />
s e r v e r 1 6 IN A 1 0 . 0 . 0 . 1 6<br />
s e r v e r 2 0 IN A 1 0 . 0 . 0 . 2 0<br />
c l i e n t IN A 1 0 . 0 . 0 . 1 0 0<br />
; E x t e r n e Rechner<br />
d e b s e r v IN A 1 0 . 0 . 5 0 . 1 1 5<br />
p t b t i m e 1 IN A 1 9 2 . 5 3 . 1 0 3 . 1 0 3<br />
p t b t i m e 2 IN A 1 9 2 . 5 3 . 1 0 3 . 1 0 4<br />
e x t d n s s e r v 1 IN A 1 0 . 0 . 5 2 . 1<br />
e x t d n s s e r v 2 IN A 1 0 . 0 . 5 2 . 2<br />
; Die a c a l l −S e r v e r<br />
a c a l l . db IN CNAME a f s d b 1<br />
a c a l l . krb5 IN CNAME k e r b e r o s<br />
a c a l l . samba IN CNAME sambaserv1<br />
$TTL 604800<br />
@ IN SOA ns1 r o o t . cbs . mpg . de . (<br />
1 ; s e r i a l<br />
604800 ; r e f r e s h<br />
86400 ; r e t r y<br />
2419200 ; e x p i r e<br />
7200 ; t t l<br />
)<br />
IN NS ns1 . cbs . mpg . de .<br />
5 IN PTR s e r v e r 5<br />
6 IN PTR s e r v e r 6<br />
10 IN PTR s e r v e r 1 0<br />
11 IN PTR s e r v e r 1 1<br />
15 IN PTR s e r v e r 1 5<br />
16 IN PTR s e r v e r 1 6<br />
20 IN PTR s e r v e r 2 0<br />
100 IN PTR c l i e n t<br />
Listing 4.12: Ein Reverse-Lookup-Zonenfile am Beispiel der Zelle cbs.mpg.de<br />
Die AFSDB-Einträge werden vom AFS-Client benutzt, um die DB-Server<br />
zu finden. Die Konstruktionen mit dem afsdb1-CNAME (Listing 4.11) sind<br />
nicht unbedingt nötig, jedoch hilfreich, da man auf diese Weise schnell einen<br />
Rechner mit einer bestimmten Funktion benennen kann (z.B. afsdb1 - ein<br />
AFS-DB-Server). Die diversen Kerberos-bezogenen Records reichen <strong>für</strong> die<br />
Arbeitsplatzrechner, also <strong>für</strong> Kerberos-Client-Funktionen, als Konfiguration<br />
aus. Man kann dann mit einem generischen /etc/krb5.conf -File arbeiten und<br />
trotzdem die Kerberos5-Server bei Bedarf wechseln.<br />
Ein Eintrag in /etc/bind/named.conf wie in Listing 4.13 lässt bind auf das<br />
Zonenfile zugreifen - ein Beispiel ist im Listing 4.14 zu finden.
82 4 Einrichtung einer AFS-Zelle<br />
zone " [ Name d e r Z e l l e ] " {<br />
t y p e m a s t e r ;<br />
f i l e " / e t c / bind / [ Name des neuen Z o n e n f i l e s ] " ;<br />
n o t i f y no ;<br />
}<br />
; . . .<br />
[ Z o n e n e i n t r a g f u e r Reverse−Lookups ]<br />
; . . .<br />
; . . .<br />
zone " cbs . mpg . de " {<br />
t y p e m a s t e r ;<br />
f i l e " / e t c / bind / db . cbs . mpg . de " ;<br />
n o t i f y no ;<br />
}<br />
zone " 0 . 0 . 1 0 . in−addr . a r p a " {<br />
t y p e m a s t e r ;<br />
f i l e " / e t c / bind / r e v . 1 0 " ;<br />
n o t i f y no ;<br />
}<br />
; . . .<br />
4.4.1.2 Automatische Synchronisation der DNS-Server<br />
Listing 4.13: Zur Datei /etc/bind/named.conf hinzuzufügende Zeilen<br />
Listing 4.14: Zur Datei /etc/bind/named.conf hinzuzufügende Zeilen in der Beispielzelle<br />
cbs.mpg.de<br />
Ist noch kein redundantes DNS mit automatischer Synchronisation vorhanden,<br />
stellt instantafs .deb das Skript instantafs.bind-update zur Verfügung.<br />
Es ist in der Lage, einen DNS-Server auf beliebige andere Maschinen zu<br />
klonen. So funktioniert es:<br />
1. Man lege eine Datei /etc/bind/sync<strong>server</strong>s auf dem primären DNS-Server<br />
an, die zeilenweise die Adressen 8 aller (also incl. dem primären) DNS-<br />
Server enthält.<br />
2. Die ebenfalls anzulegende Datei (/etc/bind/syncfiles) muss die Namen aller<br />
zu kopierenden Files im Verzeichnis /etc/bind enthalten. Listing 4.15<br />
enthält ein Beispiel.<br />
3. Sollen weitere DNS-Server zum Einsatz kommen, müssen auf diesen<br />
Rechnern lediglich das Pakete instantafs-dns<strong>server</strong> .deb installiert<br />
werden.<br />
4. Die Synchronisation wird gestartet mit:<br />
root@dnsmaster> instantafs.bind-update<br />
Das Skript benutzt ssh, um die anderen DNS-Server upzudaten. Es versucht<br />
sie unter den in /etc/bind/sync<strong>server</strong>s aufgeführten Namen zu erreichen.<br />
Hinweis: Die Namen sollten sich zur Not ohne DNS-Server auflösen lassen<br />
(z.B. durch einen Eintrag in /etc/hosts). Es können auch IP-Adressen<br />
in /etc/bind/sync<strong>server</strong>s eingetragen werden.<br />
5. Um das Update nicht-interaktiv auszuführen (empfohlen), müssen Sie<br />
da<strong>für</strong> sorgen, dass sich SSH ohne ein Passwort auf den Slave-DNS-<br />
Servern einloggen kann - z.B. mittels Public-Key-Authentifikation (siehe<br />
8 Namen sind zwar OK, IP-Adressen jedoch besser - schliesslich könnte wärend der Synchronisation<br />
etwas schiefgehen, womit die Host-Namensauflösung unmöglich wird.
4.4 Ablauf einer manuellen Grundinstallation 83<br />
named . conf<br />
db . 0<br />
db . 1 2 7<br />
db . 2 5 5<br />
db . l o c a l<br />
db . r o o t<br />
db . cbs . mpg . de<br />
r e v . 1 0<br />
s y n c f i l e s<br />
s y n c s e r v e r s<br />
4.4.2 Client-Konfiguration<br />
4.4.2.1 DNS<br />
7.3.1, Seite 142), wobei dann der entsprechende private Schlüssel unter<br />
/root/.ssh/id_dsa liegen muss.<br />
6. Die automatische Synchronisation wird z.B. durch folgende Zeile in einem<br />
cron-File realisiert:<br />
1 * * * * root instantafs.bind-update<br />
Listing 4.15: Beispiel der Datei /etc/bind/syncfiles <strong>für</strong> die Zelle cbs.mpg.de<br />
Installieren Sie die benötigten Pakete mit:<br />
root@host>apt-get install instantafs-client<br />
n a m e s e r v e r [ IP des Name<strong>server</strong>s ]<br />
n a m e s e r v e r [ IP des 2 . Name<strong>server</strong>s ]<br />
# . . .<br />
s e a r c h [ Zellenname ]<br />
n a m e s e r v e r 1 0 . 0 . 5 8 . 3<br />
n a m e s e r v e r 1 0 . 0 . 5 8 . 6<br />
s e a r c h cbs . mpg . de<br />
4.4.2.2 Kerberos<br />
Beachten Sie, dass auch die AFS-Server dabei als DNS- sowie Kerberos-Clients<br />
gelten: auch auf diesen müssen die entsprechenden Client-Funktionen konfiguriert<br />
werden.<br />
Die Datei /etc/resolv.conf enthält Informationen über das DNS. Sie muss wie in<br />
Listing 4.16 aussehen - in der Beispielzelle wäre das wie in Listing 4.17.<br />
Listing 4.16: Format von /etc/resolv.conf<br />
Listing 4.17: Format von /etc/resolv.conf<br />
Bearbeiten Sie die Datei /etc/krb5.conf - das Format ist im Listing 4.18 skizziert.<br />
[ l i b d e f a u l t s ]<br />
d e f a u l t _ r e a l m = [ Name d e r Realm ]<br />
d e f a u l t _ t g s _ e n c t y p e s = des3−hmac−sha1 des−cbc−c r c des−cbc−md5<br />
d e f a u l t _ t k t _ e n c t y p e s = des3−hmac−sha1 des−cbc−c r c des−cbc−md5<br />
p e r m i t t e d _ e n c t y p e s = des3−hmac−sha1 des−cbc−c r c des−cbc−md5<br />
k r b 4 _ c o n f i g = / e t c / krb . conf<br />
k r b 4 _ r e a l m s = / e t c / krb . r e a l m s<br />
k d c _ t i m e s y n c = 1<br />
c c a c h e _ t y p e = 4<br />
t i c k e t _ l i f e t i m e = [ Maximale T i c k e t−G u e l t i g k e i t ]<br />
f o r w a r d a b l e = t r u e<br />
p r o x i a b l e = t r u e<br />
[ r e a l m s ]<br />
[ Name d e r Realm ] = {<br />
a d m i n _ s e r v e r = k e r b e r o s<br />
Listing 4.18: Format der Datei /etc/krb5.conf
}<br />
84 4 Einrichtung einer AFS-Zelle<br />
[ l o g i n ]<br />
k r b 4 _ c o n v e r t = t r u e<br />
k r b 4 _ g e t _ t i c k e t s = t r u e<br />
[ a p p d e f a u l t s ]<br />
a f s _ k r b 5 = {<br />
[ Name d e r Realm ] = {<br />
a f s = f a l s e<br />
}<br />
}<br />
Setzen sie jeweils <strong>für</strong> [Name der Realm] und [Zellenname] die entsprechenden<br />
Werte <strong>für</strong> ihre Zelle ein. Das Konstrukt unter [appdefaults]<br />
ist zur Aufwärtskompatibilität mit neueren Kerberos-Versionen nötig - stört jedoch<br />
unter Debian 3.0 Woody nicht.<br />
Hinweis: Die Zeile<br />
admin_<strong>server</strong> = kerberos<br />
ist theoretisch nicht nötig, da der Record<br />
_kerberos-adm._tcp IN SRV 0 0 749 kerberos<br />
im DNS diese Information bereits liefert. Zumindest das kpasswd-Kommando<br />
kann jedoch in der mit Woody gelieferten Kerberos-Version mit den entsprechenden<br />
DNS-Records nichts anfangen und verlässt sich auf die Einträge in<br />
/etc/krb5.conf.<br />
Listing 4.19 zeigt am Beispiel der Zelle cbs.mpg.de wie /etc/krb5.conf auszusehen<br />
hat.<br />
[ l i b d e f a u l t s ]<br />
d e f a u l t _ r e a l m = CBS .MPG. DE<br />
d e f a u l t _ t g s _ e n c t y p e s = des3−hmac−sha1 des−cbc−c r c des−cbc−md5<br />
d e f a u l t _ t k t _ e n c t y p e s = des3−hmac−sha1 des−cbc−c r c des−cbc−md5<br />
p e r m i t t e d _ e n c t y p e s = des3−hmac−sha1 des−cbc−c r c des−cbc−md5<br />
k r b 4 _ c o n f i g = / e t c / krb . conf<br />
k r b 4 _ r e a l m s = / e t c / krb . r e a l m s<br />
k d c _ t i m e s y n c = 1<br />
c c a c h e _ t y p e = 4<br />
t i c k e t _ l i f e t i m e = 93600<br />
f o r w a r d a b l e = t r u e<br />
p r o x i a b l e = t r u e<br />
[ r e a l m s ]<br />
CBS .MPG. DE = {<br />
a d m i n _ s e r v e r = k e r b e r o s<br />
}<br />
[ l o g i n ]<br />
k r b 4 _ c o n v e r t = t r u e<br />
k r b 4 _ g e t _ t i c k e t s = t r u e<br />
[ a p p d e f a u l t s ]<br />
a f s _ k r b 5 = {<br />
CBS .MPG. DE = {<br />
a f s = f a l s e<br />
}<br />
}<br />
4.4.2.3 NTP<br />
Listing 4.19: Beispiel der Datei /etc/krb5.conf anhand der Zelle cbs.mpg.de<br />
Das Zeitsynchronisationstool NTP (Network Time Protocol) benötigt die beiden<br />
Pakete ntp .deb und ntpdate .deb . Die Konfiguration der zu benutzenden Zeit<strong>server</strong><br />
erfolgt normalerweise bei der Paket-Installation. Nachträglich geht es<br />
natürlich auch:<br />
1. Die Datei /etc/default/ntp-<strong>server</strong>s muss eine einzelne Zeile enthalten, die<br />
wie folgt aussieht:<br />
NTPSERVERS=timeserv1 timeserv2"
4.4 Ablauf einer manuellen Grundinstallation 85<br />
In diesem Fall gibt es 2 Zeit<strong>server</strong>: timeserv1 und timeserv2.<br />
2. Die Datei /etc/ntp.conf muss wie in Listing 4.20 aussehen. Weitere Zeit<strong>server</strong><br />
müssen jeweils mit einer zusätzlichen <strong>server</strong>-Direktive bedacht<br />
werden.<br />
3. Mit folgenden Kommandos wird die Zeitsyncronisation gestartet:<br />
root@host>/etc/init.d/ntp-simple stop<br />
root@host>/etc/init.d/ntpdate start<br />
root@host>/etc/init.d/ntp-simple start<br />
l o g f i l e / v a r / l o g / ntpd<br />
d r i f t f i l e / v a r / l i b / n t p / n t p . d r i f t<br />
s t a t s d i r / v a r / l o g / n t p s t a t s /<br />
s t a t i s t i c s l o o p s t a t s p e e r s t a t s c l o c k s t a t s<br />
f i l e g e n l o o p s t a t s f i l e l o o p s t a t s t y p e day e n a b l e<br />
f i l e g e n p e e r s t a t s f i l e p e e r s t a t s t y p e day e n a b l e<br />
f i l e g e n c l o c k s t a t s f i l e c l o c k s t a t s t y p e day e n a b l e<br />
s e r v e r t i m e s e r v 1 . cbs . mpg . de<br />
4.4.2.4 AFS-Client<br />
Beachten Sie, dass Zeit<strong>server</strong> der Zelle eine etwas andere Konfigurationsdatei<br />
benötigen (siehe 4.4.3, Seite 86).<br />
Listing 4.20: Listing Beispiel <strong>für</strong> die Datei auf einem NTP-Client /etc/ntp.conf<br />
Für den AFS-Client sind folgende Konfigurations-Dateien auf den Client-<br />
Rechnern anzupassen:<br />
/etc/openafs/CellServDB : In dieser Datei sind im AFS die Namen sowie die IP-Adressen vieler<br />
weltweit erreichbarer Zellen gespeichert (siehe 3.4, Seite 38). Bei Benutzung<br />
der -afsdb-Option des AFS-Clients (empfohlen), muss diese<br />
Datei lediglich vorhanden sein:<br />
root@host>rm /etc/openafs/CellServDB && touch /etc/openafs/CellServDB<br />
Hinweis: Sind in dieser Datei Daten zur eigenen Zelle vorhanden, werden<br />
die Einstellungen im DNS damit übersteuert. Das sollte man vermeiden,<br />
wenn man die DB-Server per DNS bekannt machen will.<br />
/etc/openafs/afs.conf.client : Diese Datei steuert einige Eigenschaften des AFS-Clients und sieht z.B.<br />
wie folgt aus:<br />
AFS_AFSDB=true<br />
AFS_CRYPT=true<br />
AFS_DYNROOT=false<br />
AFS_FAKESTAT=true<br />
Die Erklärung zu den Optionen findet man unter 3.5.6, Seite 43. Die Option<br />
AFS_CLIENT=false<br />
bewirkt, dass AFS nicht beim Hochfahren des Rechners automatisch gestartet<br />
wird. Der automatische Start muss explizit deaktiviert sein, wenn<br />
die Zelle noch nicht einsatzfähig ist.<br />
/etc/openafs/ThisCell : Diese Datei muss genau eine (mit NewLine) abgeschlossene Zeile enthalten<br />
auf der der Name der Zelle steht. Beispiel:<br />
root@host>echo cbs.mpg.de > /etc/openafs/ThisCell
86 4 Einrichtung einer AFS-Zelle<br />
4.4.3 Zeit<strong>server</strong><br />
/etc/openafs/cacheinfo : Dieses File muss aus einer Zeile bestehen:<br />
/afs:/var/cache/openafs:[Cachegröße]<br />
Passen Sie diese Zeile je nach gewünschter Art und Größe des Caches an<br />
(siehe 3.5.1, Seite 39).<br />
Legen Sie außerdem einen Link im root-Verzeichnis an, der auf das root-<br />
Volume ihrer Zelle zeigt. Das geht z.B. <strong>für</strong> die Zelle cbs.mpg.de wie folgt:<br />
root@host>ln -s /afs/cbs.mpg.de /a<br />
l o g f i l e / v a r / l o g / ntpd<br />
d r i f t f i l e / v a r / l i b / n t p / n t p . d r i f t<br />
s t a t s d i r / v a r / l o g / n t p s t a t s /<br />
s t a t i s t i c s l o o p s t a t s p e e r s t a t s c l o c k s t a t s<br />
f i l e g e n l o o p s t a t s f i l e l o o p s t a t s t y p e day e n a b l e<br />
f i l e g e n p e e r s t a t s f i l e p e e r s t a t s t y p e day e n a b l e<br />
f i l e g e n c l o c k s t a t s f i l e c l o c k s t a t s t y p e day e n a b l e<br />
r e s t r i c t d e f a u l t kod n o t r a p nomodify n opeer<br />
r e s t r i c t t i m e s e r v 2 nomodify<br />
; . . . w e i t e r e r e s t r i c t −Z e i l e n f ü r Z e i t s e r v e r<br />
r e s t r i c t 1 2 7 . 0 . 0 . 1 nomodify<br />
s e r v e r p t b t i m e 1 . p t b . de<br />
s e r v e r p t b t i m e 2 . p t b . de<br />
p e e r t i m e s e r v 2<br />
; . . . w e i t e r e peer−Z e i l e n f ü r Z e i t s e r v e r<br />
4.4.4 Die Kerberos-Server<br />
4.4.4.1 Der Master<br />
Die NTP-Prozesse auf den Zellenzeit<strong>server</strong>n werden untereinander vernetzt.<br />
Die Konfiguration ist im Listing 4.21 veranschaulicht. Tragen Sie als <strong>server</strong>-<br />
Direktiven die Zeit<strong>server</strong> ein, von denen die Zeit<strong>server</strong> der neuen Zelle ihre<br />
Zeit erhalten sollen.<br />
Listing 4.21: Beispiel <strong>für</strong> die Datei /etc/ntp.conf auf einem NTP-Server<br />
Sind mehr als zwei Zeit<strong>server</strong> in der Zelle vorhanden, müssen <strong>für</strong> jeden weiteren<br />
jeweils diese beiden Zeilen eingetragen werden:<br />
restrict timeserv[Nummer] nomodify<br />
peer timeserv[Nummer]<br />
Man gehe wie folgt vor:<br />
1. Alle <strong>für</strong> den Kerberos-Server nötigen Pakete werden mit diesem Metapaket<br />
installiert:<br />
root@kerberos> apt-get install instantafs-krb5<strong>server</strong><br />
[ k d c d e f a u l t s ]<br />
k d c _ p o r t s = 750 ,88<br />
[ r e a l m s ]<br />
2. Die Datei /etc/krb5kdc/kdc.conf muss angelegt werden, so dass sie wie<br />
folgt aussieht (Ersetzen Sie [Name der Realm] durch den Namen<br />
der neuen Kerberos-Realm):<br />
Listing 4.22: /etc/krb5kdc/kdc.conf
4.4 Ablauf einer manuellen Grundinstallation 87<br />
[ Name d e r Realm ] = {<br />
database_name = / v a r / l i b / krb5kdc / p r i n c i p a l<br />
admin_keytab = FILE : / e t c / krb5kdc / kadm5 . k e y t a b<br />
a c l _ f i l e = / e t c / krb5kdc / kadm5 . a c l<br />
k e y _ s t a s h _ f i l e = / e t c / krb5kdc / s t a s h<br />
k d c _ p o r t s = 750 ,88<br />
m a x _ l i f e = 1d 2h 0m 0 s<br />
m a x _ r e n e w a b l e _ l i f e = 7d 0h 0m 0 s<br />
m a s t e r _ k e y _ t y p e = des3−hmac−sha1<br />
s u p p o r t e d _ e n c t y p e s = des3−hmac−sha1 : normal des−cbc−c r c : normal des : normal des : v4 des : norealm des : o n l y r e a l m des : a f s 3<br />
d e f a u l t _ p r i n c i p a l _ f l a g s = + p r e a u t h<br />
}<br />
root@kerberos> krb5_newrealm<br />
4.4.4.2 Erstellen des AFS-Keys<br />
3. Eine Kerberos-Realm wird angelegt:<br />
Man wird nun mit einer Passwortabfrage konfrontiert. Das Passwort sollte<br />
komplex sein, aufgeschrieben werden und anschließend in etwas gut<br />
Verschließbarem verschwinden - es wird im Produktionsbetrieb nicht benötigt.<br />
4. Die Kerberos-Realm ist damit eigentlich schon fertig - diverse Principals<br />
müssen jedoch noch angelegt werden.<br />
5. Richten sie auf dem Kerberos-Master-Server den krb5-acall-Server ein<br />
(siehe 7.6.4, Seite 151).<br />
Der AFS-Key (siehe 3.7.1, Seite 47) wird im Kerberos durch einen Principal<br />
repräsentiert. Hier ist beschrieben wie man den Key erzeugt.<br />
Achtung: Wenn man den Schlüssel neu aus der Kerberos-Datenbank extrahiert<br />
(ktadd [...]) wird dieser verändert. Macht man das in einer bereits arbeitenden<br />
AFS-Zelle, kann ab diesem Zeitpunkt kein Benutzer mehr gültige Tokens<br />
bekommen. Braucht man eine Keytab mit dem AFS-Key einer arbeitenden<br />
Zelle, hilft vielleicht A.8 auf Seite 235 weiter.<br />
1. Hinter dem Kommando kadmin.local verbirgt sich eine Shell, mit der<br />
der Kerberos-Server interaktiv gesteuert werden kann. Alle Kommandos<br />
können jedoch auch auf der Kommandozeile ausgelöst werden.<br />
kadmin.local wird jetzt benutzt, um den afs-Principal anzulegen:<br />
root@kerberos> kadmin.local -q ’addprinc -requires_preauth \<br />
-randkey -e des-cbc-crc:afs3 afs’<br />
2. Der Kerberos-Schlüssel muss in eine Datei gespeichert werden:<br />
root@kerberos> kadmin.local -q ’ktadd -k /tmp/afs.keytab’ \<br />
-e des-cbc-crc:afs3 afs’<br />
Achtung: Es handelt sich dabei nicht um eine Kopie des Schlüssels, vielmehr<br />
wird ein neuer Schlüssel erzeugt, jedoch nicht nur in der Kerberos-<br />
Datenbank, sondern zusätzlich in dem Keytab-File abgelegt. Führt man<br />
diesen Befehl erneut aus, sind damit alle vorher exportierten Keytabs dieses<br />
Principals ungültig!<br />
3. Zur Sicherheit sollte man die Keytabs überprüfen. Das geht z.B. so:
88 4 Einrichtung einer AFS-Zelle<br />
root@kerberos> (echo rkt /tmp/afs.keytab ; echo list) | \<br />
ktutil | egrep ’ˆ+[0-9]’<br />
1 1 afs@CBS.MPG.DE<br />
Jeder Schlüssel wird auf einer Zeile ausgegeben. Die zweite Zahl auf<br />
jeder Zeile zeigt dabei die KVNO (Key-Version-Number) an. Werden<br />
mehrere Schlüssel angezeigt, dann ist beim Exportieren (ktadd) des<br />
AFS-Keys im Kerberos etwas schief gegangen. Löschen Sie in diesem<br />
Fall den afs-Principal und die Keytab wieder:<br />
root@kerberos> rm -f afs.keytab<br />
root@kerberos> echo yes | kadmin.local -q ’delprinc afs@ CBS.MPG.DE ’<br />
4.4.4.3 Anlegen des Zellen-Superusers<br />
und fangen Sie noch einmal bei 1. an.<br />
Hinweis: Eine häufige Fehlerquelle ist, den -e-Parameter zu vergessen.<br />
Das afs.keytab-File muss gut aufgehoben werden - aus ihm wird später der afs-<br />
Key mittels asetkey extrahiert. Es ist wichtig, dass niemand unautorisiert den<br />
Inhalt von afs.keytab lesen kann - das wäre wie ein herumliegender beliebig<br />
leicht kopierbarer Generalschlüssel zur Zelle.<br />
Ein Principal wird das Recht erhalten, die Kerberos-Datenbank zu bearbeiten<br />
und im AFS als Zellensuperuser aufzutreten. So wird er eingerichtet:<br />
root@kerberos> kadmin.local -q ’addprinc -requires_preauth admin’<br />
Geben Sie zweimal das Passwort des Zellensuperusers ein. Die Datei<br />
/etc/krb5kdc/kadm5.acl muss aus einer einzelnen Zeile bestehen:<br />
admin *<br />
Jetzt muss der Kerberos-Admin-Server neu gestartet werden um /etc/krb5kdc/kadm5.acl<br />
neu einzulesen:<br />
root@kerberos> /etc/init.d/krb5-admin-<strong>server</strong> force-reload<br />
4.4.4.4 Der acall-Principal<br />
Der admin-Principal ist bis jetzt nur als Kerberos5-Principal vorhanden. Um ihn<br />
zu einem richtigen AFS-User zu machen, muss er noch in die AFS-Datenbank<br />
eingetragen werden. Das geht jedoch erst, wenn später die AFS-Datenbank konfiguriert<br />
wird.<br />
Für einige acall-Funktionen (siehe 7.6.2, Seite 149) wird ein eigener Principal<br />
benötigt. Man legt diesen wie folgt an:<br />
root@kerberos> kadmin.local -q ’addprinc -randkey acall’<br />
Anschliessend wird der Schlüssel des acall-Principals in eine Datei gespeichert:<br />
root@kerberos> kadmin.local -q ’ktadd -k /tmp/acall.keytab acall’<br />
Diese Keytab wird später auf dem db-acall-Server — also auf dem Kerberos-<br />
Master — benötigt.
4.4 Ablauf einer manuellen Grundinstallation 89<br />
4.4.4.5 Slave-Server-Konfiguration<br />
Die Datenbank von Slave-Kerberos-Servern muss möglichst immer exakt mit<br />
der auf dem Master-Server übereinstimmen. Da im MIT-Kerberos5 keine automatische<br />
Synchronisation vorgesehen ist, muss ein Skript einspringen.<br />
4.4.4.5.1 Einstellungen auf den Slave-Servern Folgendes ist dazu auf jedem<br />
der Kerberos-Slave-Server zu tun:<br />
1. Alle nötigen Pakete sind zu installieren:<br />
root@host>apt-get install instantafs-krb5<strong>server</strong><br />
2. Legen Sie die Datei /etc/krb5kdc/kdc.conf wie in Listing 4.22 an, ersetzen<br />
Sie [Name der Realm] durch den Namen der neuen Realm.<br />
4.4.4.5.2 Einstellungen auf dem Kerberos-Master Die Kerberos-Datenbank<br />
muß vom Master-Server auf alle Slave-Server kopiert werden. Das sollte man<br />
mindestens einmal von Hand machen, um die öffentlichen SSH-Schlüssel der<br />
Slave-Server zu bestätigen:<br />
root@kerberos> instantafs.kerberos -domain cbs.mpg.de -<strong>server</strong> <strong>server</strong>2,<strong>server</strong>3<br />
4.4.5 Der erste AFS-DB-Server<br />
4.4.5.1 Anlegen der Datenbank<br />
Die Namen <strong>server</strong>3 und kerberos-3 sind Beispiele - hier müssen die qualifizierten<br />
Namen (am besten FQDNs) der Slave-Server stehen - getrennt durch Kommas.<br />
Als Domain wird hier cbs.mpg.de verwendet - man muss in der eigenen<br />
Zelle dann den den eigenen Domainnamen angeben.<br />
Um das Update nicht-interaktiv auszuführen (empfohlen), müssen Sie da<strong>für</strong><br />
sorgen, dass sich SSH ohne ein Passwort auf den Slave-DNS-Servern einloggen<br />
kann - z.B. mittels Public-Key-Authentifikation (siehe 7.3.1, Seite 142).<br />
instantafs.kerberos versucht, den privaten Schlüssel /etc/krb5kdc/syncsshkey<br />
da<strong>für</strong> zu benutzen. Legen Sie also einen privaten SSH-Schlüssel an diese Position<br />
und platzieren sie die zugehörigen Public-Keys in den /root/.ssh/authorized_keys<br />
Ein automatisches Update kann man z.B. wie folgt aufsetzen:<br />
• Durch folgenden crontab-Eintrag wird einmal pro Tag ge-updated:<br />
1 * * * * root instantafs.kerberos -<strong>server</strong> <strong>server</strong>2,<strong>server</strong>3<br />
-domain cbs.mpg.de<br />
• Jetzt sollte man noch da<strong>für</strong> sorgen, dass die Datenbank nach jeder Änderung<br />
auf die Slave-Server kopiert wird. Dazu kann man mit einem<br />
/etc/inittab-Job arbeiten. Dazu ist diese Zeile in die Datei /etc/inittab<br />
einzutragen:<br />
iaku:23:respawn:/usr/bin/instantafs.kerberos -w<br />
60 -<strong>server</strong> <strong>server</strong>2,<strong>server</strong>3 -domain cbs.mpg.de<br />
Was -w bedeutet ist unter 9.2.18 erklärt.<br />
Richten Sie zuerst einen unspezialisierten AFS-Server ein (siehe 7.5, Seite 146).<br />
Die PTDB muss vor dem ersten Start des ersten Servers bereits einen definierten<br />
Zustand haben.
90 4 Einrichtung einer AFS-Zelle<br />
Folgendes Kommando sollte vorsichtshalber benutzt werden, um evtl. vorhandene<br />
Reste einer alten AFS-Datenbank zu entfernen:<br />
root@afsdb> rm -f /var/lib/openafs/db<br />
Die PTDB muss mit default-Werten initialisiert und der Zellenadministrator angelegt<br />
werden. Diese Werte lege man als Default in /tmp/ptdb.base ab:<br />
root@afsdb> cat /tmp/ptdb.base<br />
admin 128/20 1 -204 -204<br />
acall 128/20 2 -204 -204<br />
system:administrators 130/20 -204 -204 -204<br />
admin 1<br />
acall 2<br />
Achtung:Die Leerzeichen jeweils am Anfang der Zeilen unter system:administrators<br />
sind essentiell.<br />
Nun initialisiere man damit die PTDB:<br />
root@afsdb> pt_util -p /var/lib/openafs/db/prdb.DB0 -w < /tmp/ptdb.base<br />
4.4.5.2 Konfiguration der Serverprozesse<br />
VLDB und BDB werden beim ersten Start der jeweiligen Serverprozesse automatisch<br />
initialisiert, sie sind im Grundzustand leer.<br />
Richten Sie auf dem ersten AFS-DB-Server den db-acall-Server ein (siehe<br />
7.6.4, Seite 151).<br />
Dem AFS-DB-Server muß mitgeteilt werden, dass es in der Zelle vorerst nur<br />
ihn gibt:<br />
root@afsdb> bos addhost localhost Name des Rechners<br />
Dabei muss Name des Rechners der DNS-Name 9 der lokalen Maschine<br />
sein.<br />
Der pt<strong>server</strong> wird aktiviert...<br />
root@afsdb> bos create localhost pt<strong>server</strong> simple \<br />
/usr/lib/openafs/pt<strong>server</strong> -localauth<br />
... der vl<strong>server</strong> gestartet...<br />
root@afsdb> bos create localhost vl<strong>server</strong> simple \<br />
/usr/lib/openafs/vl<strong>server</strong> -localauth<br />
... und der bu<strong>server</strong> hochgefahren:<br />
root@afsdb> bos create localhost bu<strong>server</strong> simple \<br />
/usr/lib/openafs/bu<strong>server</strong> -localauth<br />
9 Vorzugsweise der FQDN
4.4 Ablauf einer manuellen Grundinstallation 91<br />
4.4.6 Der erste File<strong>server</strong><br />
Richten Sie einen unspezialisierten AFS-Server ein (siehe 7.5, Seite 146), wenn<br />
der Rechner nicht bereits ein arbeitender AFS-Server ihrer Zelle (z.B. ein DB-<br />
Server) ist.<br />
Sorgen Sie da<strong>für</strong>, dass das Speichersubsystem am Server angeschlossen und<br />
mindestens eine Partition entsprechend eingerichtet ist (siehe 3.8.3, Seite 59).<br />
Im folgenden wird davon ausgegangen, dass auf dem File<strong>server</strong> die Partition<br />
/vicepa als AFS-Datenpartition zur Verfügung steht.<br />
Der AFS-Client muss komplett (mit allen Basisdiensten wie DNS und Kerberos)<br />
konfiguriert sein bzw. konfiguriert werden, wenn er es noch nicht ist (siehe<br />
4.4.2, Seite 83).<br />
Achtung: Der Client darf noch nicht gestartet werden/sein.<br />
Der File<strong>server</strong> wird mit folgendem Kommando eingerichtet und aktiviert:<br />
root@afsserv1> bos create localhost -instance fs -type fs \<br />
-cmd /usr/lib/openafs/file<strong>server</strong> \<br />
-cmd /usr/lib/openafs/vol<strong>server</strong> \<br />
-cmd /usr/lib/openafs/salvager -localauth<br />
Das AFS-Rootvolume wird angelegt:<br />
root@afsserv1> vos create localhost a root.afs -localauth<br />
Das Zellen-Rootvolume wird angelegt:<br />
root@afsserv1> vos create localhost a root.cell -localauth<br />
Der AFS-Client wird gestartet. Das ist erst jetzt möglich, da das AFS-Root-<br />
Volume (root.afs) bereits angelegt sein muss.<br />
root@afsserv1> /etc/init.d/openafs-client force-start<br />
root@afsserv1> kinit admin<br />
root@afsserv1> aklog<br />
Jetzt wird das Token eines Zellensuperusers gebraucht. Zuerst wird ein<br />
Kerberos5-TGT organisiert:<br />
... anschliessend ein AFS-Ticket geholt und in einem Token umgerechnet...<br />
Hinweis: Lokale Superuserrechte sind ab jetzt eigentlich nicht mehr nötig - die<br />
Macht des Zellensuperusertokens reicht <strong>für</strong> alle AFS-Befehle.<br />
Das Zellenrootvolume wird in das AFS-Rootvolume gemountet...<br />
admin@afs>fs mkmount /afs/Zellenname root.cell<br />
... und ein alternativer Mountpoint nach root.cell angelegt, über den die RW-<br />
Instanz erreichbar ist (siehe 3.2.3, Seite 34):<br />
admin@afs>fs mkm /afs/.Zellenname root.cell -rw
92 4 Einrichtung einer AFS-Zelle<br />
Jetzt wird ein Mountpoint angelegt, über den die RW-Instanz des AFS-<br />
Rootvolumes erreicht werden kann:<br />
admin@afs>fs mkm /afs/.root.afs root.afs -rw<br />
Dieser Mountpoint wird nur dann benötigt, wenn weitere Zellen in den AFS-<br />
Namensraum eingebunden werden sollen.<br />
Die Verzeichnisrechte in den beiden Root-Volumes werden so gesetzt, dass<br />
jeder hindurchwechseln darf:<br />
admin@afs>fs sa -path /afs -path /afs/.Zellenname system:anyuser rl<br />
Von beiden Root-Volumes wird eine RO-Instanz auf dem ersten File<strong>server</strong> erstellt.<br />
Man sollte dringend weitere hinzufügen, wenn weitere File<strong>server</strong> verfügbar<br />
sind.<br />
admin@afs>vos addsite localhost Partition root.afs -localauth<br />
admin@afs>vos addsite localhost Partition root.cell -localauth<br />
Jetzt werden die neu angelegten RO-Instanzen noch mit den RWs synchronisiert:<br />
admin@afs>vos release root.afs<br />
admin@afs>vos release root.cell<br />
Hinweise:<br />
user@host>tokens<br />
user@host>kinit admin<br />
user@host>aklog<br />
admin@afs><br />
Wenn bei Schritt 4.4.6 ein Fehler auftritt, liegt das mit hoher Wahrscheinlichkeit<br />
an schlecht synchronisierter Zeit zwischen den Rechnern der Zelle oder aber<br />
daran, dass die auf den AFS-Servern installierten AFS-Keys nicht korrekt sind.<br />
Die AFS-Keys müssen auf allen Rechnern gleich sein und mit dem Schlüssel<br />
des afs-Principals in der Kerberos-Datenbank übereinstimmen. Beachten Sie<br />
dazu die Hinweise unter 4.4.4 und 7.5.<br />
Jetzt werden noch zusätzliche Volumes und Verzeichnisse angelegt, die Struktur<br />
der fertigen Zelle ist danach vergleichbar mit der Beispielzelle (siehe 7.1,<br />
Seite 140),abgesehen von den fehlenden Benutzer-Homedirectories von ernie<br />
und bert.<br />
• Es wird davon ausgegangen, dass das AFS-Token eines Zellensuperusers<br />
(i.d.R. admin) zur Verfügung steht. Das kann mit:<br />
überprüft werden.<br />
Damit ein Token zur Verfügung steht, muß der AFS-Client installiert,<br />
konfiguriert und gestartet sein. Das Token holt man mittels:<br />
• Diese Befehle müssen nicht zwangsläufig auf dem ersten AFS-Server<br />
eingegeben werden. Wenn man sie auf einem anderen Rechner ausführt,<br />
muß jedoch localhost durch den Namen eines AFS-Servers (z.B.<br />
afsserv1) ersetzt werden. Das kann ein beliebiger AFS-File<strong>server</strong><br />
sein.
4.4 Ablauf einer manuellen Grundinstallation 93<br />
Dieser Link verringert Tipparbeit und wird von einigen InstantAFS-Skripten<br />
benötigt:<br />
root@host>ln -s /afs/Zellenname /a<br />
Die Root-Volumes der Homedirectories (siehe 7.9, Seite 155) werden angelegt<br />
und in den AFS-Namensraum eingebaut:<br />
admin@afs>vos create localhost Partition user<br />
admin@afs>fs mkm /afs/.Zellenname /user user<br />
admin@afs>vos create localhost Partition user-backup<br />
admin@afs>fs mkm /afs/.Zellenname/user-backup user-backup<br />
admin@afs>for i in user{,-backup,-na}; do \<br />
> fs sa /afs/.Zellenname/$i;\<br />
> done<br />
admin@afs>mkdir /afs/.Zellenname/user-backup/{ro,backup}<br />
admin@afs>vos create localhost Partition user-na<br />
admin@afs>fs mkm /afs/.Zellenname /user-na user-na<br />
Jetzt noch die RW-Instanz-Mountpoints:<br />
admin@afs>fs mkm /afs/.Zellenname/.user user -rw<br />
admin@afs>fs mkm /afs/.Zellenname/.user-backup user-backup -rw<br />
admin@afs>fs mkm /afs/.Zellenname/.user-na user-na -rw<br />
... und die obligatorischen RO-Instanzen:<br />
admin@afs>for v in user{,-backup,-na}; \<br />
do \<br />
vos addsite localhost Partition $v; \<br />
vos release $v; \<br />
done<br />
Dieses Volume kann benutzt werden, um Kleinigkeiten zwischenzuspeichern<br />
(ein Netzwerk-/tmp-Verzeichnis). Die Quota kann man den eigenen Bedürfnissen<br />
anpassen.<br />
admin@afs>vos create localhost Partition tmp -maxquota 3000000<br />
admin@afs>fs mkm /afs/.Zellenname/tmp tmp -rw<br />
admin@afs>fs sa /afs/.Zellenname/tmp system:anyuser rlwid<br />
Dieses Volume wird Konfigurationsfiles aufnehmen, die die ganze Zelle betreffen.<br />
Einige InstantAFS-Skripte greifen später zwingend auf dieses Verzeichnis<br />
zu:<br />
admin@afs>vos create localhost Partition a.etc<br />
admin@afs>mkdir /afs/.Zellenname/admin<br />
admin@afs>fs mkm /afs/.Zellenname/admin/etc a.etc<br />
admin@afs>fs mkm /afs/.Zellenname/admin/.etc a.etc -rw<br />
admin@afs>fs sa /afs/Zellenname/admin/.etc system:anyuser rl<br />
Die Rechte werden gesetzt. Das Verzeichnis /a/a/etc/secret wird in einem seperaten<br />
Volume abgeriegelt - nur Zellensuperuser dürfen darauf zugreifen:
94 4 Einrichtung einer AFS-Zelle<br />
admin@afs>vos create localhost Partition a.etc.secret<br />
admin@afs>fs mkm /afs/.Zellenname/admin/.etc/secret a.etc.secret<br />
admin@afs>mkdir /afs/Zellenname/admin/.etc/secret<br />
admin@afs>fs sa /afs/Zellenname/admin/.etc/secret -clear<br />
Die etc-Volumes sind viel zu wichtig, um keine RO-Instanzen zu haben:<br />
admin@afs>vos addsite localhost partition a.etc<br />
admin@afs>vos addsite localhost partition a.etc.secret<br />
admin@afs>vos release a.etc<br />
admin@afs>vos release a.etc.secret<br />
Das cellinfo-Volume (siehe 7.15, Seite 169) wird angelegt - <strong>für</strong> den Anfang<br />
ohne RO-Instanz:<br />
admin@afs>vos create localhost Partition a.cellinfo<br />
admin@afs>fs mkm /afs/.Zellenname/admin a.cellinfo<br />
Ein Volume <strong>für</strong> Skripte wird fakultativ angelegt:<br />
admin@afs>vos create localhost Partition local.scripts<br />
admin@afs>mkdir /afs/.Zellenname/local<br />
admin@afs>fs mkm /afs/.Zellenname/local/scripts<br />
admin@afs>fs mkm /afs/.Zellenname/local/.scripts -rw<br />
admin@afs>vos addsite localhost Partition local.scripts<br />
admin@afs>vos release local.scripts<br />
Das Zellenrootvolume muss noch einmal released werden:<br />
admin@afs>vos release root.cell<br />
4.4.7 Start der AFS-Clients<br />
4.4.7.1 Voraussetzungen<br />
4.4.7.2 Start<br />
Die Struktur der fertigen Zelle ist danach (abgesehen von den Homedirectories<br />
der Beispiel-Benutzer) vergleichbar mit der Beispielzelle (siehe 7.1, Seite 140).<br />
Zuletzt wird der AFS-Client konfiguriert. Folgende Bedingungen sind vorher<br />
zu erfüllen:<br />
1. Es klingt trivial, ist aber wichtig: Der Computer muss Zugang zum<br />
Netzwerk haben (Netzwerkkabel eingesteckt, Netzwerkkarte konfiguriert)<br />
sonst kann der AFS-Client beim Hochfahren einen Kernelfehler<br />
(Kernel-OOPS)) verursachen.<br />
2. Die Zelle muss fertig konfiguriert sein, d.h. mindestens ein DB-Server<br />
und ein File<strong>server</strong> müssen existieren und mindestens eine RO-Instanz des<br />
AFS-Rootvolumes muss auf einem der File<strong>server</strong> liegen.<br />
In der Datei /etc/openafs/afs.conf.client muss die Zeile<br />
AFS_CLIENT=false<br />
durch<br />
AFS_CLIENT=true
4.4 Ablauf einer manuellen Grundinstallation 95<br />
4.4.7.3 Tests<br />
ersetzt werden, wenn der AFS-Client bei jedem Rechnerstart automatisch hochfahren<br />
soll. Nun kann man den AFS-Client starten:<br />
root@host>/etc/init.d/openafs-client force-start<br />
ptdbnssd (siehe A.2, Seite 224) muss noch eingerichtet werden. Dazu wird<br />
das ptdb-Modul <strong>für</strong> den passwd-Dienst in /etc/nsswitch.conf eingetragen. Es<br />
muß also z.B. die folgende Zeile hinein:<br />
passwd: files ptdb<br />
Mit folgenden Kommandos wird der ptdbnssd-Dienst dann gestartet:<br />
root@host>/etc/init.d/libnss-ptdb stop<br />
root@host>/etc/init.d/libnss-ptdb start<br />
user@host>kinit admin<br />
user@host>aklog<br />
4.4.7.3.1 Der AFS-Cache-Manager selbst Den nicht-authentifizierten Zugriff<br />
testet man, indem man nach /afs/[Zellenname] wechselt. Funktioniert das,<br />
arbeitet die Zelle bereits. Funktioniert es nicht, sollte man unter 8.4.3, Seite 176<br />
nachschlagen.<br />
Zum Testen des authentifizierten Zugriffs auf die neue Zelle, muss zuerst ein<br />
AFS-Token geholt werden:<br />
Das Kommando tokens sollte jetzt diese Ausgabe erzeugen:<br />
user@host>tokens<br />
User’s (AFS ID 1) tokens for afs@alpha [Expires Mar 3 01:35]<br />
user@host>touch /a/tmp/test<br />
Die Ablaufzeit kann natürlich variieren. Zeigt tokens den erwarteten Output,<br />
funktioniert das Kerberos.<br />
Das Anlegen einer Datei testet man mit:<br />
Mit ls testet man, ob der Zugriff authentifiziert war:<br />
user@host>ls -nla /a/tmp/test<br />
-rw-r-r- 1 1 65534 0 Jan 22 14:29 "/a/tmp/test"<br />
Wenn es nicht geklappt hat (man beachte die Zahl hinter der 1:<br />
user@host>ls -nla /a/temp/test<br />
-rw-r-r- 1 32766 65534 0 Jan 22 14:29 "/a/tmp/test"<br />
Die 32766 ist die AFSID von “anonymous” - in diesem Fall hat der File<strong>server</strong><br />
das Token nicht akzeptiert - der Zugriff erfolgte ohne gültige Authentifikation.<br />
Funktioniert es nicht, sollte man unter 8.4.3, Seite 176 nachschlagen.
96 4 Einrichtung einer AFS-Zelle<br />
4.4.7.3.2 Das NSS-PTDB-Modul Mit folgenden Kommandos kann man<br />
testen, ob das NSS-PTDB-Modul (siehe A.2, Seite 224) korrekt arbeitet:<br />
user@host>/usr/lib/libnss-ptdb/nsstest admin<br />
uid=1 name=’admin’ homedir=’/afs/alpha/user/admin’ gid=65534 passwd=’x’<br />
user@host>/usr/lib/libnss-ptdb/nsstest 1<br />
uid=1 name=’admin’ homedir=’/afs/alpha/user/admin’ gid=65534 passwd=’x’<br />
Hinweis: Homedirectory, gid und Passwort sind fake-Werte - generiert von<br />
libnss-ptdb .deb . Sie sind jedoch der entscheidende Anhaltspunkt da<strong>für</strong>, dass<br />
das NSS-PTDB-Modul funktioniert.<br />
Funktioniert es nicht, läßt sich mit cstest herrausfinden, ob es am ptdbnssd<br />
liegt:<br />
user@host>/usr/lib/libnss-ptdb/cstest 1<br />
E: Error talking to ptdbnssd.<br />
Das liegt mit hoher Wahrscheinlichkeit daran, dass der ptdbnssd nicht läuft.<br />
Folgendes ist dann zu tun:<br />
user@host>/etc/init.d/libnss-ptdb start<br />
Funktioniert es, sollte das Ergebnis wie folgt aussehen:<br />
user@host>/usr/lib/libnss-ptdb/cstest 1<br />
uid=1 name=admin<br />
4.4.8 Das Samba-Gateway<br />
[ g l o b a l ]<br />
workgroup = [ Name d e r Z e l l e ]<br />
s e r v e r s t r i n g = InstantAFS−Samba−Gateway a u f %h<br />
l o g f i l e = / v a r / l o g / samba / l o g .%m<br />
max l o g s i z e = 1000<br />
s y s l o g = 0<br />
p a n i c a c t i o n = / u s r / s h a r e / samba / panic−a c t i o n %d<br />
s e c u r i t y = u s e r<br />
e n c r y p t passwords = t r u e<br />
obey pam r e s t r i c t i o n s = yes<br />
i n v a l i d u s e r s = r o o t admin<br />
s o c k e t o p t i o n s = TCP_NODELAY<br />
[ homes ]<br />
Überprüfen Sie vorher, ob sie ein Samba-Gateway brauchen (siehe 10.1, Seite<br />
209). Die Theorie zu diesem Samba-Gateway steht unter A.6 auf Seite 230.<br />
Das Samba-Gateway muss auf einem Rechner installiert werden, auf dem der<br />
AFS-Client läuft.<br />
Sicherheitshinweis: Stellen Sie sicher, dass sich keine Benutzer interaktiv auf<br />
diesem Rechner einloggen können.<br />
Legen Sie die Datei /etc/samba/smb.conf wie folgt an und ersetzen sie die Zeichenkette<br />
[Name der Zelle] jeweils durch den Zellennamen:<br />
## Die n a e c h s t e Z e i l e f u e r Sarge oder h o e h e r auskommentieren<br />
# p assdb backend = tdbsam g u e s t<br />
comment = Home D i r e c t o r i e s im AFS<br />
p a t h =/ a f s / [ Zellenname ] / u s e r /%u<br />
b r o w s e a b l e = no<br />
w r i t a b l e = yes<br />
c r e a t e mask = 0700<br />
d i r e c t o r y mask = 0700<br />
l o c k i n g = yes<br />
Listing 4.23: /etc/samba/smb.conf
4.4 Ablauf einer manuellen Grundinstallation 97<br />
[ a f s ]<br />
p r e e x e c c l o s e = yes<br />
## Die n a e c h s t e Z e i l e f u e r Sarge oder h o e h e r auskommentieren . . .<br />
# p r e e x e c =/ u s r / b i n / tokenmgr −Kbr −w \"\% d \ " −p \"\% u \ " −k / v a r / l i b / samba / k e y t a b s /\"% u \ " . k e y t a b<br />
## Die n a e c h s t e Z e i l e f u e r Woody auskommentieren<br />
# p r e e x e c =/ u s r / b i n / tokenmgr −S \"\% u \ " −k / v a r / l i b / samba / k e y t a b s /\"% u \ " . k e y t a b<br />
comment = AFS−R o o t d i r e c t o r y d e r l o k a l e n Z e l l e<br />
p a t h =/ a f s / [ Zellenname ]<br />
b r o w s e a b l e = yes<br />
w r i t a b l e = yes<br />
c r e a t e mask = 0700<br />
d i r e c t o r y mask = 0700<br />
l o c k i n g = yes<br />
## Die n a e c h s t e Z e i l e f u e r Sarge o der h o e h e r auskommentieren . . .<br />
# p r e e x e c =/ u s r / b i n / tokenmgr −Kbr −w \"\% d \ " −p \"\% u \ " −k / v a r / l i b / samba / k e y t a b s /\"% u \ " . k e y t a b<br />
## Die n a e c h s t e Z e i l e f u e r Woody auskommentieren<br />
# p r e e x e c =/ u s r / b i n / tokenmgr −S \"\% u \ " −k / v a r / l i b / samba / k e y t a b s /\"% u \ " . k e y t a b<br />
Jetzt muss noch der acall-Server auf dem Samba-Gateway aktiviert werden. Der<br />
samba-acall-Server ist dazu auf dem Gateway einzurichten (siehe 7.6.4, Seite<br />
151).
5 Backups und Ausfallsicherheit<br />
5.1 Welche Server <strong>für</strong> welche Volumes?<br />
5.1.1 RO-Daten<br />
In diesem Kapitel werden zum einen die diversen Strategien diskutiert, die im<br />
Rahmen InstantAFS’ <strong>für</strong> Backups unterstützt werden. Zum anderen wird auch<br />
darauf eingegangen, wie man ganz allgemein mit den speziellen Möglichkeiten<br />
des AFS das Risko von Betriebsunterbrechungen und Datenverlust minimieren.<br />
Es gibt verschiedene Möglichkeiten, Backups unter AFS durchzuführen. Primär<br />
wird in diesem Abschnitt auf das AFS-Backup-System eingegangen. Zwei<br />
weitere Möglichkeiten werden kurz vorgestellt. Diese könnten zwar als eigenständige<br />
Backup-Systeme betrieben werden, bieten jedoch weniger komfortable<br />
Automatismen.<br />
Hinweis: Alles, was unter AFS mit Backups zu tun hat, muss mit Zellenadministratorrechten<br />
durchgeführt werden (siehe 3.7.5, Seite 54). Das ist schon allein<br />
deshalb vernünftig, da die aus Volume-Instanzen erstellten Dumps Zugriff auf<br />
alle Daten unter Umgehung der ACLs ermöglichen.<br />
Wie auch bei der Lastverteilung muss Ausfallsicherheit spezifisch <strong>für</strong> die Art<br />
der Daten 1 eingerichtet werden.<br />
Hinweis: Beachten Sie, dass mit Art der Daten nicht Typ der Volume-Instanz<br />
gemeint ist. Auch Daten, auf die praktisch nur lesend zugegriffen wird, haben<br />
üblicherweise eine RW-Instanz. Hier geht es jedoch um die primären Zugriffsmuster.<br />
Beispiele:<br />
Homedirectories : Keiner wird daran zweifeln, dass es sich dabei um Daten im Schreibzugriff<br />
handelt. Bereits das Einloggen unter einer grafischen Oberfläche wie<br />
KDE ist ohne Schreibzugriff unmöglich.<br />
Softwareverzeichnisse : Unix trennt i.d.R. die Speicherorte von Programmen und zugehörigen<br />
Daten sehr scharf. Softwarepakete, kann man deshalb i.d.R. so ablegen,<br />
dass nur lesend darauf zugegriffen werden - die eigentlichen Daten<br />
werden dann woanders gespeichert<br />
Ausfallsicherheit erreicht man bei Daten, die nicht oft verändert werden, indem<br />
man mehrere RO-Instanzen der entsprechenden Volumes im Netzwerk verteilt.<br />
Fällt ein File<strong>server</strong> aus, der eine RO-Instanz eines Volumes bereitstellt, so greifen<br />
die Clients (nach einem Timeout) auf andere File<strong>server</strong> zu.<br />
Auch wenn die RW-Instanz noch nicht wiederhergestellt ist, funktioniert der<br />
Zugriff auf die RO-Instanzen weiterhin, lediglich ein Update der RO-Instanzen<br />
(mit vos release) ist dann nicht möglich.<br />
1 Daten im Lesezugriff bzw. Daten im Schreibzugriff<br />
98
5.1 Welche Server <strong>für</strong> welche Volumes? 99<br />
5.1.2 RW-Daten<br />
AFS besitzt nicht die Fähigkeit der Echtzeitreplikation von Daten. Fällt eine<br />
RW-Instanz eines Volumes aus, kann sie nicht so einfach, wie eine RO-Instanz<br />
ersetzt werden.<br />
Es sollte versucht werden, die RW-Instanzen auf soviele File<strong>server</strong> wie möglich<br />
zu verteilen. Dadurch wird das Risiko, viele Volumes auf einmal zu verlieren,<br />
geringer. Der balancer (siehe 6.11.2, Seite 133) hilft dabei mit dem<br />
“bynumber-agent” (→ Verteilung, so dass danach auf allen File<strong>server</strong>n eine ausgewogene<br />
Anzahl an RW-Instanzen liegt).<br />
Legt man zu allen RW-Instanzen jeweils auf anderen Server RO-Instanzen<br />
an, kann man durch das Kommando vos convertROtoRW bei einem<br />
File<strong>server</strong>-Ausfall RO-Instanzen in RW-Instanzen umwandeln (siehe 8.5.3,<br />
Seite 180).<br />
Mit dem Kommando instantafs.calcrestore läßt sich ermitteln, wie<br />
kritisch der Ausfall eines Servers wäre 2 . Im folgenden Beispiel wird überprüft,<br />
welche Volumes vom Ausfall des Servers afsserv1 betroffen wären:<br />
user@host>instantafs.calcrestore -critical afsserv1/\*<br />
local.scripts<br />
user.ernie<br />
user@host>echo $?<br />
1<br />
Diese beiden Volumes sind nicht durch RO-Instanzen auf anderen Servern<br />
abgesichert. Das kann man leicht nachholen:<br />
admin@afs>vos addsite afsserv2 a user.ernie<br />
admin@afs>vos release user.ernie<br />
admin@afs>vos addsite afsserv2 a local.scripts<br />
admin@afs>vos release local.scripts<br />
Ein zweiter Versuch:<br />
user@host>instantafs.calcrestore -critical afsserv1/\*<br />
user@host>echo $?<br />
0<br />
5.1.3 Gekoppelte Server<br />
Der Ausfall dieses Server würde also keine Daten irreversibel vernichten.<br />
Teilen sich 2 Server einen gemeinsamen SPOF (Single Point of Failure), z.B.<br />
ein mit mehreren SCSI-Kanälen ausgestattetes Storage-System, sollte man<br />
auch den Ausfall beider Server simmulieren.<br />
Beispiel: Die Server afsserv1 und afsserv2 greifen auf 2 Partitionen des selben<br />
externen RAID-Systems zu:<br />
2 Genauer: welche RW-Instanzen nach dem Ausfall eines Server verloren wären.
100 5 Backups und Ausfallsicherheit<br />
user@host>instantafs.calcrestore -critical afsserv1/\* afsserv2/\*<br />
user.bert<br />
user.ernie<br />
root.afs<br />
root.cell<br />
...<br />
5.2 Das AFS-Backup-System<br />
5.2.1 Prinzipielles zu AFS-Backups<br />
In diesem Fall ist dringend zu empfehlen, weitere Server in die Zelle zu integrieren<br />
oder aber ein zweites Storage-System zu beschaffen, so dass nicht der<br />
Ausfall eines einzigen RAID-Systems die ganze Zelle in den Abgrund zieht.<br />
Unter AFS werden Backups immer von ganzen Volumes durchgeführt - ein<br />
Backup einzelner Dateien/Verzeichnisse ist nicht vorgesehen. Dabei wird wie<br />
folgt vorgegangen:<br />
1. Man wähle einen Instanz-Typ des zu sichernden Volumes. Per default benutzt<br />
instantafs.backup immer Backup-Instanzen. Hinweise siehe 5.2.2<br />
auf Seite 101.<br />
2. Die zu sichernden Volumes werden ge“dump”t - also in Dateien umgewandelt,<br />
die alle Informationen des jeweiligen Volumes enthalten.<br />
Das Dumpen kann auch inkrementell erfolgen. Es werden dann nur die<br />
Dateien und Verzeichnisse gesichert, die seit dem letzten Backup verändert<br />
wurden.<br />
3. Ein Steuerprozess (das Kommando backup dump) weist jeweils einen<br />
File<strong>server</strong> (genauer: einen vol<strong>server</strong>-Prozess) an, jeweils ein Volume<br />
an einen TapeController (Backup-Server) zu schicken. Auf diesem nimmt<br />
ein butc-Prozess 3 die Daten entgegen und speichert sie auf einem (virtuellen)<br />
Band.<br />
4. Es ist ökonomisch sinnvoll, die gedumpten Volumes noch zu komprimieren<br />
- das Backup-System macht das nicht selbstständig.<br />
5. InstantAFS stellt <strong>für</strong> die Steuerung dieses Prozesses das Kommando<br />
instantafs.backup zur Verfügung, das jedoch noch einige Zusätzliche<br />
Aufgaben hat (siehe 5.2.3, Seite 101).<br />
Das Backup-System besteht nun aus zwei Teilen:<br />
• einem (oder mehreren Backup-Servern), auf denen jeweils ein oder mehrere<br />
TapeController-Prozesse (butc) laufen. Tapecontroller nehmen Daten<br />
von File<strong>server</strong>n aus dem Netzwerk entgegen und leiten diese an Bandlaufwerke<br />
(oder auch an Dateien - also virtuelle Bänder - weiter)<br />
• der Backup-Datenbank (BDB), die von den bu<strong>server</strong>-Prozessen verwaltet<br />
wird. In dieser Datenbank werden primär die Zeitpunkte vermerkt,<br />
zu denen Volumes gesichert wurden. In Kombination mit an AFS-Files<br />
angebrachten Zeitmarken sind so inkrementelle Backups möglich. Ausserdem<br />
enthält sie eine Liste der beschriebenen Bänder (oder auch virtueller<br />
Bänder).<br />
3 BackUp TapeController
5.2 Das AFS-Backup-System 101<br />
5.2.2 Welche Instanzen sollte man zum Sichern verwenden?<br />
5.2.3 Ablauf unter InstantAFS<br />
Unter InstantAFS wird dieses Backup zum größten Teil über zwei Dateien gesteuert:<br />
• /etc/cron.d/instantafs-backup Dieses Datei wird von instantafs.vtapes<br />
beim Einrichten des Backup-Servers angelegt und mit einigen Beispielen/Kommentaren<br />
versehen.<br />
Durch diese crontab werden die regelmäßigen Backups mit instantafs.backup<br />
ausgelöst. Das ist jedoch auch auf jedem anderen AFS-Server der Zelle<br />
möglich.<br />
Ausserdem kümmert sich ein instantafs.vtapes-Job in diesem File um<br />
das regelmäßige Löschen alter virtueller Bänder. Das muss allerdings auf<br />
jedem Backup-Server einzeln geschehen, da Zugriffe auf das lokale Filesystem<br />
nötig sind.<br />
• /a/admin/etc/backup.conf In diesem File werden Volumes zu handlichen<br />
Gruppen zusammengefasst und jeweils einem speziellen TapeController<br />
zugewiesen. So läßt sich z.B. das Backup einer Zelle in zwei durch eine<br />
dünne Leitung voneinander getrennten Gebäuden mit jeweils einem<br />
Backup-Server leicht organisieren.<br />
Backup-Instanzen sowie RO-Instanzen auf der Partition ihrer RW-Instanz (siehe<br />
3.1.4, Seite 29) haben <strong>für</strong> Backups zwei Vorteile:<br />
• Im Gegensatz zu RW-Instanzen repräsentiert ihr Inhalt während des gesamten<br />
Zeitraumes, in dem das Backup läuft, ein konsistentes da unveränderliches<br />
Abbild der RW-Instanz zu dem Zeitpunkt als die letzte Synchronisation<br />
(vos release bzw. vos backup) lief.<br />
• Im Gegensatz zu RO-Instanzen, die nicht auf der Partition der RW-Instanz<br />
liegen, brauchen sie wenig Platz (siehe 3.1.4, Seite 29).<br />
Der Inhalt ist immer das exakte Abbild des RW-Volumes zu einem gewissen<br />
Zeitpunkt - der Abgleich mit der RW-Instanz ist atomar 4 , was ein<br />
Backup im laufenden Betrieb erst sicher macht. In jedem anderen Fall sind<br />
Race-Conditions durch den parallelen Zugriff von Backup-Prozess und Anwendungsprogrammen<br />
denkbar.<br />
Einstellen muß man die zu benutzende Instanz beim Aufruf von instantafs.backup,<br />
der üblicherweise auf dem Backup-Server unter /etc/cron.d/instantafs-backup<br />
zu finden ist.<br />
InstantAFS’ Backup-Konzept sieht vor, Daten ausschließlich auf Festplattenpartitionen<br />
zu sichern. Benötigt wird dazu ein Rechner mit angeschlossenen<br />
großen gemounteten Festplatten. Auf diesem Rechner muss ein butc-Prozess<br />
mit Zellenadministratorrechten laufen (siehe 3.7.5, Seite 54).<br />
InstantAFS’ Backup-Konzept kombiniert dabei i.d.R. 5 drei Dinge:<br />
• Regelmäßige Updates der Backup-Instanzen, wobei alle Beispiele immer<br />
von täglicher Synchronisation ausgehen (immer Nachts). Damit sind die<br />
“Benutzer-verwalteten Backups” abgedeckt (siehe 7.2, Seite 141).<br />
4 kann also nicht durch zugreifende Benutzer unterbrochen werden<br />
5 Man kann bei Bedarf auf beliebig viele davon verzichten.
102 5 Backups und Ausfallsicherheit<br />
5.2.3.1 Konfiguration des Backup-Servers<br />
• Regelmäßige Updates der RO-Instanzen, wobei alle Beispiele immer von<br />
wöchentlicher Synchronisation (jeden Freitagabend) ausgehen.<br />
• Regelmäßige Backups auf Festplatten. Dabei wird jeden Freitagabend ein<br />
Full-Backup gestartet 6 .<br />
Unter 5.2.3.2 ist beschrieben, wie man einstellt, welche Daten zu sichern sind.<br />
Während eines Backups passiert bei InstantAFS per default folgendes:<br />
• Das Programm instantafs.backup synchronisiert die <strong>für</strong> die Dumps benutzten<br />
Instanzen (siehe 5.2.2, Seite 101). Ein Nebeneffekt davon ist, dass<br />
man durch diese automatische Synchronisation den Grundstein <strong>für</strong> das<br />
Administrationsarme Backup (siehe 7.2, Seite 141) legt.<br />
• instantafs.backup erstellt Volume-Mengen-Einträge in der BDB, die<br />
sich 1 : 1 aus den definierten Volsets (siehe 5.2.3.2, Seite 104) aus der<br />
Datei /a/a/etc/backup.conf ableiten.<br />
• instantafs.backup benutzt die ihm übergebene Dump-Schedule (siehe<br />
5.2.3.3, Seite 105) und erstellt damit <strong>für</strong> jedes zu sichernde Volset einen<br />
Dump. Ein solcher Dump ist im Prinzip ein Datenstrom, der aus dem<br />
Inhalt mindestens eines 7 Volumes gebildet und auf dem Backup-Server<br />
in kleinen Stückchen (Bändern, vtapes) gesichert wird.<br />
• Auf dem Backup-Server wird von instantafs.backup das Hilfsprogramm<br />
butc (BackUp Tape Controller), aus dem Paket instantafsclient<br />
.deb ) aufgerufen. butc nimmt die zu sichernden Daten aus dem<br />
Netzwerk von den AFS-File<strong>server</strong>n entgegen und speichert sie in eine<br />
Datei definierter Größe.<br />
• Hat die Datei die definierte Größe erreicht, wird jeweils automatisch<br />
instantafs.vtapes aufgerufen, das die Datei komprimiert und<br />
in eine Baumstruktur einsortiert. Sollen Daten wiederhergestellt werden,<br />
sucht instantafs.vtapes die entsprechenden Dateien aus<br />
der Baumstruktur herraus und stellt sie dem AFS-Backup-System zur<br />
Rücksicherung zur Verfügung.<br />
• Stellt instantafs.vtapes fest, dass nicht mehr genug Speicher auf den<br />
Backup-Partitionen des Backup-Servers verfügbar ist, friert es den<br />
Backup-Vorgang ein und schickt eine eMail mit nützlichen Hinweisen,<br />
wie der Administrator nun vorzugehen hat.<br />
Dieses Skript ist also eine Art virtueller Bandwechselroboter.<br />
5.2.3.1.1 Theorie InstantAFS stellt das Skript instantafs.vtapes<br />
(siehe 9.2.28, Seite 206) bereit, das einen Backup-Server komplett konfigurieren<br />
kann. instantafs.vtapes ist <strong>für</strong> einen Backup in Dateien<br />
ausgelegt - arbeitet also nicht mit Magnetbändern. Dieses Skript wird nur in<br />
Ausnahmefällen manuell aufgerufen.<br />
Der Backup-Server wird dabei mit nur einem Tapecontroller ausgestattet (AFS<br />
lässt eigentlich auch mehrere zu).<br />
6 Schliesslich ist dann das ganze Wochende Zeit, um auch umfangreiche Daten zu sichern<br />
7 üblicherweise enthält er viele Volumes
5.2 Das AFS-Backup-System 103<br />
5.2.3.1.2 Der Ablauf Das Kommando zur Konfiguration des Backup-<br />
Servers lautet (die Bedeutung der Parameter wird weiter unten erklärt):<br />
root@backupserv> instantafs.vtapes - -init - -compression Methode \<br />
- -tapesize Megabytes - -tempdir Temp-Verzeichnis \<br />
- -storage Archiv-Verzeichnis - -days Tage \<br />
- -deletelimit Anzahl der Dumps - -mail eMail-Adresse<br />
instantafs.vtapes listet während der Einrichtung alle Dateien auf, die<br />
es anlegt oder verändert. Die Konfiguration lässt sich im Nachhinein verändern.<br />
Die Parameter werden in folgenden Dateien gespeichert:<br />
/etc/instantafs/vtapes.conf : die Konfigurationsdatei von instantafs.vtapes<br />
/var/lib/openafs/backup/tapeconfig : die allgemeine Konfigurationsdatei des Tape-Controllers (butc)<br />
/var/lib/openafs/backup/... : Die Konfigurationsdatei des virtuellen Bandlaufwerkes, das von<br />
instantafs.vtapes mit virtuellen Bändern bestückt wird.<br />
Die letzte Pfadkomponente ist von dem mit dem Parameter<br />
- -tempdir Temp-Verzeichnis übergebenen Verzeichnis abhängig.<br />
Hier einige Beispiele:<br />
- -tempdir Verzeichnis Konfigurationsdatei<br />
/AFSBACKUP /var/lib/openafs/backup/CFG_AFSBACKUP_vtape<br />
/var/tmp/instantafs /var/lib/openafs/backup/CFG_var_tmp_instantafs_vtape<br />
• Wählen Sie einen Rechner mit viel Plattenkapazität - die Platten müssen<br />
nicht besonders schnell sein.<br />
• Konfigurieren Sie den Rechner als Roh-AFS-Server (siehe 7.5, Seite<br />
146). Die Pfade zu den Filesystemen auf den entsprechenden Partitionen<br />
müssen mit - -storage Archiv-Verzeichnis angegeben werden<br />
- natürlich als absolute Pfade.<br />
• Ein temporäres Verzeichnis auf einer möglichst schnellen Festplatte wird<br />
zusätzlich benötigt. Dieses temporäre Verzeichnis muss groß genug sein,<br />
um ein Backup-File unkomprimiert speichern zu können.<br />
Das temporäre Verzeichnis muss mit - -tempdir Temp-Verzeichnis<br />
als absoluter Pfad angegeben werden. Achtung: Das temporäre Verzeichnis<br />
sollte nicht auf einem flüchtigen Datenträger (z.B. RAM-disk)<br />
liegen.<br />
• Die Backup-Dateien müssen eine definierte Maximalgröße
104 5 Backups und Ausfallsicherheit<br />
• Es stehen 3 Kompressionsmethoden <strong>für</strong> die Backup-Dateien zur Verfügung,<br />
von denen eine mit dem Parameter - -compression Methode<br />
angegeben werden muss:<br />
none : Keine Kompression. Das ist konkurrenzlos schnell, jedoch extrem<br />
unwirtschaftlich.<br />
gzip : Kompression mittels gzip (Lempel-Ziv). Diese Methode bietet eine<br />
gute Balance zwischen Geschwindigkeit und Kompressionseffizienz.<br />
bzip2 : Kompressions mittels bzip2 (Burrows-Wheeler und Huffman).<br />
Diese Methode ist langsamer als gzip, erreicht jedoch üblicherweise<br />
etwas bessere Kompressionsraten.<br />
• Backups kann man angesichts chronisch knapper Plattenkapazität nicht<br />
ewig aufheben. In /a/a/etc/backup.conf wird <strong>für</strong> jedes Volset festgelegt,<br />
wie lange es minimal aifgehoben werden muss. Backups, die älter sind,<br />
werden üblicherweise automatisch aus der BDB entfernt und die zugehörigen<br />
vtapes werden gelöscht.<br />
Sollte einmal während eines Backups nicht genug Speicher zur Verfügung<br />
stehen, wird sich instantafs.vtapes per eMail bei dem im Parameter<br />
- -mail eMail-Adresse angegebenen Empfänger wenden und<br />
Vorschläge unterbreiten, wie das Problem vom Administrator gelöst werden<br />
kann. Dieser Vorschlag läuft dann darauf hinaus, dass man die Minimalspeicherdauer<br />
der Volsets in /a/a/etc/backup.conf reduziert.<br />
• Ein cron-Job, der automatisch durch instantafs.vtapes konfiguriert<br />
wird, löscht einmal am Tag alle Metainformationen über Backups,<br />
die älter sind als in ihren entsprechenden Konfigurationszeilen in /a/a/etc/backup.conf<br />
angegeben. Anschliessend werden dann die entsprechenden<br />
vtapes entfernt, was jedoch auf allen Backup-Servern seperat geschehen<br />
muss. Die Anzahl der Dumps, die dabei entfernt werden dürfen, wird<br />
durch den Parameter - -deletelimit Anzahl der Dumps limitiert.<br />
Stellt das Backup-System fest, dass mehr Dumps als angegeben entfernt<br />
werden müssten, wird eine Warn-eMail generiert und keine Daten<br />
entfernt.<br />
Hinweis: Das ist eine Vorsichtsmaßnahme, die verhindern soll, dass ein<br />
kleiner Fehler die Löschung aller gespeicherten Backups auslöst.<br />
Hier ein Beispiel:<br />
root@backupserv> instantafs.vtapes - -init \<br />
- -compression gzip \<br />
- -tapesize 10 \<br />
- -tempdir /AFSBACKUP \<br />
- -storage /BIG_RAID - -storage /AFSBACKUP/PART2 \<br />
- -storage /AFSBACKUP/PART2 - -days 40<br />
5.2.3.2 Volume-Gruppen (Volume-Sets)<br />
Das Backupsystem sichert immer ganze Gruppen von Volume-Instanzen - keine<br />
einzelnen. Instanzen können auch in mehreren Gruppen enthalten sein. Eine<br />
Gruppe besteht dabei aus einer Liste von regulären Ausdrücken, die auf folgende<br />
Eigenschaften von Volume-Instanzen angewandt werden:<br />
• den Namen der Instanz,<br />
• den Server, auf dem sie liegt und
5.2 Das AFS-Backup-System 105<br />
5.2.3.3 Dump-Level<br />
• die Partition, auf der sie liegt.<br />
Es kommen simple reguläre Ausdrücke (siehe A.3, Seite 225) zum Einsatz.<br />
Die AFS-Volume-Gruppen werden automatisch aus den in /a/admin/etc/backup.conf<br />
definierten Volume-Gruppen aufgebaut und aktualisiert, wenn<br />
das Backup mit instantafs.backup durchgeführt wird. Bei der automatischen<br />
Installation wird eine Beispieldatei <strong>für</strong> /a/admin/etc/backup.conf angelegt,<br />
die auch die Syntax dieses Files beschreibt. Man kann z.B. Volume-Gruppen<br />
so definieren, dass nur die Volumes hineinfallen, deren RW-Instanzen auf bestimmten<br />
File<strong>server</strong>n oder bestimmten Partitionen liegen. Jeder Volume-Gruppe<br />
in /a/admin/etc/backup.conf ein bestimmter Tape-Controller zugeordnet werden.<br />
Das ermöglicht z.B. die unkomplizierte Sicherung einer Aussenstelle auf<br />
eigene Backup-Server, ohne die potentiell dünne Leitung zu dieser zu belasten.<br />
Dumplevel werden vom AFS-Backup-System benutzt, um das Verhalten inkrementeller<br />
Backups zu steuern. Dumplevel sind immer ein Pfad durch die<br />
Dump-Hierarchie der BDB. Sowohl <strong>für</strong> das AFS-eigene Kommando<br />
admin@afs>backup dump Dumplevel Volumeset<br />
als auch beim Backup mittels<br />
admin@afs>instantafs.backup -b Dumplevel Volumeset<br />
muss jeweils ein Dump-Level angegeben werden.<br />
Das Backup-System ermittelt anhand des Pfades durch die Dump-Hierarchie<br />
den Zeitpunkt, auf den sich ein inkrementelles Backup beziehen muss.<br />
Hier ein einfaches Beispiel:<br />
/week<br />
/week/mo<br />
/week/tu<br />
/week/we<br />
/week/th<br />
Diese Hierarchie ist z.B. geeignet, um von Homedirectories am Wochenende<br />
ein volles Backup zu machen (Pfad: /week). Außerdem wird am Ende eines<br />
jeden Tages ein inkrementelles Backups (Pfade: /week/mo, /week/tu, ...)<br />
gemacht. Die Referenz <strong>für</strong> das inkrementelle Backup ist dabei jeweils der Pfad<br />
durch die Dump-Hierarchie, der nach Abzug der letzten Komponente - bei<br />
diesem Beispiel also immer das volle Backup des letzten Wochenendes - nicht<br />
das Backup des letzten Tages. So wird diese Dump-Hierarchie angelegt:<br />
admin@afs>backup adddump /week<br />
admin@afs>for t in mo tu we th; do adddump /week/$i;done<br />
Es ist auch möglich, ein wöchentliches Backup zu machen, bei dem jeweils der<br />
letzte Tag die Referenz ist. Hier ein Beispiel:<br />
/week2<br />
/mo<br />
/tu<br />
/we<br />
/th
106 5 Backups und Ausfallsicherheit<br />
5.2.3.4 Verdrängungsstrategie<br />
Hier wäre der Pfad <strong>für</strong> das volle Backup /woche2, die inkrementellen Pfade<br />
durch die Hierarchie wären jedoch<br />
• /week/mo<br />
• /week/mo/tu<br />
• /week/mo/tu/we<br />
u.s.w. ...<br />
Beide Beispiel werden bereits während der Installation durch instantafs.setup<br />
automatisch angelegt.<br />
Über kurz oder lang werden sich die Storage-Directories füllen und der Platz<br />
wird knapp. instantafs.vtapes stellt eine Verdrängungsstrategie zur Verfügung:<br />
Entfernen von vtapes, die älter als n Tage sind.<br />
Der günstigste Wert <strong>für</strong> n ist dabei von verschiedenen Dingen abhängig:<br />
• der Menge der zu sichernden Daten,<br />
• wie oft sich die Daten in welchem Umfang ändern,<br />
• dem - -compression-Parameter der <strong>für</strong> instantafs.vtapes - -init<br />
benutzt wurde sowie<br />
• von der Größe der angeschlossenen Storage-Partitionen.<br />
Man sollte n am Anfang sehr großzügig festlegen (z.B. 100). Wenn der Speicher<br />
während des Backup-Prozesses knapp wird, meldet sich instantafs.vtapes<br />
per eMail und weist darauf hin. Das Kommando zum einmaligen Entfernen von<br />
alten vtapes lautet:<br />
root@backupserv> instantafs.vtapes - -remove Tage - -cleanup<br />
Tage ist dabei die das maximale Alter von Backups, die nicht entfernt werden<br />
sollen. Bei Tage=21 werden also alle Backups entfernt, die älter als 21 Tage<br />
sind.<br />
Um ein versehentliches Löschen des kompletten Backup-Datenbestandes zu<br />
verhindern, bricht instantafs.vtapes mit einem Hinweis ab, wenn mehr<br />
als 10 Dumps gleichzeitig gelöscht werden sollen. In diesem Fall muß man die<br />
Zeile modifizieren - z.B. so:<br />
root@backupserv> instantafs.vtapes - -remove 100 - -cleanup - -deletelimit 20<br />
Damit würde instantafs.vtapes alle Dumps aussortieren, die älter als 100 Tage<br />
sind und die dazugehörigen vtapes umgehend entfernen - jedoch nur dann,<br />
wenn dadurch maximal 20 Dumps entfernt werden.<br />
Sollen alte vtapes regelmäßig entfernt werden (das ist der Normalfall), so sollte<br />
der entsprechende instantafs.vtapes-Aufruf in einen cron-Job wandern. Bei<br />
der Einrichtung des Backup-Server mit instantafs.vtapes - -init<br />
wird ein entsprechender cron-Job bereits angelegt (siehe /etc/cron.d/instantafsbackup<br />
auf dem Backup-Server).
5.3 Etwas Theorie zum InstantAFS-Backup 107<br />
5.2.3.5 Regelmäßigkeit<br />
5.2.3.6 Mehrere Backup-Server<br />
5.3 Etwas Theorie zum InstantAFS-Backup<br />
5.3.1 Kategorisierung von Dumps durch instantafs.vtapes<br />
Sind Tapecontroller und die BDB konfiguriert, muss ein Rechner das Backup regelmäßig<br />
durchführen. Der Tapecontroller wird durch instantafs.vtapes<br />
bereits entsprechend konfiguriert - durch cron-Jobs in /etc/cron.d/instantafsbackup.<br />
Am Ende dieser Datei befindet sich auch ein bereits aktiviertes<br />
Beispiel <strong>für</strong> ein wöchentliches Backup der Volume-Sets users (alle Benutzer-<br />
Homedirectories) und cell (diverse Root-Volumes) befindet. Es sollte sofort<br />
funktionieren.<br />
Das Setup-Tool instantafs.setup von InstantAFS legt bei der Konfiguration<br />
der Zelle bereits die Datei /a/a/etc/backup.conf an. Auf die Einträge in<br />
diesem File müssen sich die Aufrufe der Backup-cron-Jobs beziehen. Alle zu<br />
sichernden Volumes müssen hier eingetragen sein, wobei reguläre Ausdrücke<br />
zur Verfügung stehen.<br />
Das Backup-System ist jetzt fertig konfiguriert. Auf die Wiederherstellung von<br />
Volumes wird unter 5.7.2 auf Seite 112 eingegangen.<br />
Es ist auch möglich, mehrere InstantAFS-Backup-Server zu benutzen. Bei weiteren<br />
zu konfigurierenden Servern muß bei der Konfiguration mit instantafs.vtapes<br />
immer der folgende Parameter angegeben werden:<br />
- -portoffset=Nummer des Backup<strong>server</strong>s<br />
Die Nummer ist dabei eine Zahl, die beim 1. Zusätzlichen Backup<strong>server</strong> 1,<br />
beim zweiten 2, usw. sein muss. Backups werden durch instantafs.backup<br />
immer parallel auf alle Backup<strong>server</strong> gleichzeitig durchgeführt. Die Steuerung<br />
der Backups muß nicht (kann aber) auf den einzelnen Backup-Servern erfolgen.<br />
Wichtig ist nur, daß der Recher, der das Backup steuert, ein AFS-Server<br />
der lokalen Zelle ist - er also auf den Zellenschlüssel unter /etc/openafs/<strong>server</strong>-<br />
/KeyFile zugreifen kann.<br />
In der Backup-Konfigurationsdatei /a/a/etc/backup.conf definierte Volume-<br />
Gruppen beziehen sich per default immer auf den ersten Backup-Server. Mit<br />
der Option tc=Hostname eines Backup-Servers kann man eine<br />
Volume-Gruppe an einen anderen Backup-Server binden.<br />
Achtung: Automatisches Wiederherstellen von Daten läßt sich nur dann leicht<br />
automatisieren, wenn Volumes immer auf dem gleich Backup-Server landen.<br />
Das muß man nur beachten, wenn man z.B. Volumes hat, die gelegtlich durch<br />
ihre pysische Position die Volume-Gruppe wechseln.<br />
instantafs.vtapes benutzt in Ausgaben und Fehlermeldungen verschiedene<br />
Begriffe, um Dump-Mengen zu beschreiben. Diese werden im folgenden näher<br />
erläutert:<br />
archived dump : Wenn ein Dump archived ist, bedeutet das, dass er (vertreten durch mindestens<br />
ein vtape) auf einer lokalen Storage-Partition liegt.<br />
bdb dump : Ein dump, der in der BDB vermerkt ist, heisst bdb dump.<br />
lost dump : Solche Dumps wurden auf den lokalen Datenpartitionen gefunden, sind<br />
jedoch nicht mehr in der BDB vermerkt. Das liegt i.d.R. daran, dass sie
108 5 Backups und Ausfallsicherheit<br />
mit<br />
root@backupserv> instantafs.vtapes - -remove Tage<br />
aus der BDB, jedoch noch nicht physisch entfernt wurden. Der Befehl<br />
root@backupserv> instantafs.vtapes - -cleanup<br />
entfernt alle lost dumps.<br />
redundant : Solche Dumps sind zwar in der BDB aufgeführt, können jedoch nicht<br />
auf einer Storage-Partition des lokalen Backup-Servers gefunden werden.<br />
Das kann z.B. daran liegen, dass sie auf einem anderen Backup-Server<br />
liegen oder aber, dass sie gelöscht wurden.<br />
timedout : Ein Dump, der durch die Option - -remove zur Vernichtung ausgewählt<br />
wurde.<br />
incomplete dump : Ein Dump gilt dann als incomplete (unvollständig), wenn nicht alle vtapes<br />
beginnend von Nr. 1 bis zur höchsten gefundenen Nummer auf den<br />
Storage-Partitionen des File<strong>server</strong>s gefunden wurden.<br />
Achtung: Die Existenz eines incomplete dumps ist ein Fehlerfall, der<br />
nicht auftreten sollte. InstantAFS kann solch einen Fehler nicht selbst beheben.<br />
5.4 Backup “light” - die erste<br />
Ein Dump kann in mehreren Dump-Mengen vertreten sein.<br />
Volume-Instanzen lassen sich komplett in ein einzelnes File schreiben:<br />
admin@afs>vos dump Name oder ID der Instanz > Dump-Datei<br />
Von der eigentlich <strong>für</strong> die Umleitung des Datenstromes in eine Datei vorgesehenen<br />
Option -file ist abzuraten. Man würde mit hoher Wahrscheinlichkeit<br />
über das 2GByte-Limit stolpern. Auch kann man ohne -file den Datenstrom<br />
gleich noch weiterbearbeiten, z.B. komprimieren:<br />
admin@afs>vos dump Name oder ID der Instanz | gzip > Dump-Datei<br />
Eine Sicherung der Unterschiede seit einem bestimmten Datum ist möglich. Die<br />
da<strong>für</strong> benötigte Option ist -time Zeitpunkt. Das Format von Zeitpunkt<br />
ist:<br />
mm/tt/jjjj hh:MM<br />
Die Entscheidung, welche Dateisystemobjekte gesichert werden, wird anhand<br />
eines <strong>für</strong> Benutzer nicht sichtbaren Zeitstempels gefällt - ist also nicht von der<br />
mtime abhängig, wie sie im VFS des AFS-Clients erscheint und kann deshalb<br />
auch nicht von Nutzern manipuliert werden.<br />
Mit dem Parameter Name oder ID der Instanz legt man fest, welche<br />
Instanz eines Volumes zu sichern ist. Man kann immer nur eine Instanz auf<br />
einmal sichern, paralleles Dumpen mehrerer Instanzen ist natürlich damit nicht<br />
ausgeschlossen.<br />
Hier einige Beispiele:<br />
• Sichern des Zellenrootvolume in eine Datei:<br />
admin@afs>vos dump root.cell.readonly > root.cell.dump
5.5 Backup “light” - die zweite 109<br />
• Sichern der Backup-Instanz des Homedirectories von ernie im komprimierter<br />
Form:<br />
admin@afs>vos dump user.ernie.backup | gzip -9 > user.ernie_full.dump.gz<br />
• Sichern aller Änderungen seit 00:00 am 02.05.2004 (wiederum komprimiert):<br />
admin@afs>vos dump user.ernie.backup -time “05/02/2004 00:00” | \<br />
gzip -9 > user.ernie_incr_1.dump.gz<br />
• Sichern des Homedirectories von bert in eine Datei:<br />
admin@afs>vos dump user.bert > user.bert.dump<br />
Achtung: Die RW-Instanz wird direkt gesichert, so dass Inkonsistenzen<br />
auftreten können, die es bei Verwendung der RO- oder Backup-Instanz<br />
nicht geben würde (siehe 5.2.2, Seite 101).<br />
Mit einem eigenen kleinen Skript kann man den Inhalt mehrere Volumes komplett<br />
oder inkrementell zu einem definierten Zeitpunkt sichern. Bei einer kleinen<br />
Zelle kann man so mit Hilfe eines cron-Jobs in Windeseile ein Backup-System<br />
aufsetzen, jedoch ist die Rücksicherung wenig komfortabel (siehe 5.7.3, Seite<br />
113).<br />
Der vos dump-Befehl ist auch <strong>für</strong> “das kleine Backup zwischendurch” sinnvoll.<br />
Alle Homedirectories zu sichern geht z.B. wie folgt:<br />
admin@afs>for v in ‘volgrep user.\*‘; \<br />
do \<br />
vos dump $v > $v.dump; \<br />
done<br />
oder auch so:<br />
admin@afs>for v in ‘volgrep user.\*‘; \<br />
do \<br />
vos backup $v; \<br />
vos dump $v > $v.dump; \<br />
done<br />
5.5 Backup “light” - die zweite<br />
Es ist möglich, Volumes lediglich durch Anlegen und Updaten von RO-<br />
Instanzen auf anderen Servern zu sichern. Ein solches Backup ist extrem leicht<br />
aufzusetzen und durchzuführen (kein Bandwechsel, keine teure Hardware),<br />
hat jedoch einen Nachteil: Es lässt sich immer nur ein Zeitpunkt sichern.<br />
Updatet man die RO-Instanz, wird die alte Version überschrieben. Dieser<br />
Nachteil wird jedoch durch eine sonst unerreichbare Geschwindigkeit bei der<br />
Wiederherstellung (siehe 5.7.1.0.3, Seite 111) ausgeglichen.<br />
Es handelt sich bei dieser Art des “Backups” eher um eine erhöhte Ausfallsicherheit,<br />
das Prinzip ist unter 5.1.2, Seite 99 beschrieben.<br />
Die automatische Installation mit instantafs.setup legt bereits einen<br />
Grundstein <strong>für</strong> diese Art von Backup
110 5 Backups und Ausfallsicherheit<br />
5.5.1 Backup light mit Shadow-Instanzen<br />
Ab OpenAFS 1.3 existiert die Möglichkeit, sog. shadow-Instanzen einer ER-<br />
Instanz anzulegen. Das Prinzip ist wie folgt:<br />
1. RW-Instanzen werden regelmäßig mit vos shadow auf einen entfernten<br />
Server synchronisiert. Die Synchronisation erfolgt inkrementell.<br />
2. Die Shadow-Instanz sieht üblicherweise (man kann es beeinflussen) wie<br />
eine RW-Instanz aus - hat sogar die selbe ID wie die RW-Instanz. Der<br />
einzige Unterschied ist, dass die Shadow-Instanz nicht in der VLDB aufgeführt<br />
ist.<br />
3. Stürzt jetzt der File<strong>server</strong> mit der RW-Instanz ab, kann man mit<br />
admin@afs> vos syncvldb Shadow-File<strong>server</strong><br />
5.6 Backup <strong>für</strong> Daten ausserhalb des AFS<br />
die vorher kopierte RW-Instanz mit O(1) wiederherstellen.<br />
Oft ist es nötig, Dinge zu sichern, die sich prinzipbedingt nicht im AFS befinden<br />
können (z.B: Root-Partitionen von wichtigen Servern).<br />
Das funktioniert ungefährt so:<br />
1. Man lege einen cron-Job an, der regelmäßig Dateien aus einem zu<br />
sichernden Verzeichnis in ein anderes (sprich: in ein da<strong>für</strong> angelegtes<br />
Verzeichnis in einem AFS-Volume) kopiert. Beispiel-cron-Job:<br />
0 10 * * * nobody rsync -av /wichtige/lokale/daten<br />
/afs/meine.zelle/locale-backups<br />
2. Der cron-job muss AFS-tauglich gemacht werden (<strong>Anleitung</strong> siehe 7.7<br />
auf Seite 152) — schliesslich soll nicht jeder, der Zugriff auf die Zelle<br />
hat, diese Daten manipulieren dürfen. Hat man den Kerberos-Principal<br />
und den AFS-Benutzer angelegt und die Keytab auf dem Rechner deponiert,<br />
auf dem der Prozess (in diesem Fall rsync) später laufen soll, muss<br />
man noch da<strong>für</strong> sorgen, dass der Unix-Nutzer (in diesem Fall nobody)<br />
auch an die Keytab kommt — z.B. so:<br />
root@host>chown nobody.root /etc/instantafs/local-backup.keytab<br />
root@host>chmod 400 /etc/instantafs/backup-buttler.keytab<br />
Die neue cron-Zeile muss dann z.B. so aussehen:<br />
0 10 * * * nobody tokenmgr -S backup-buttler -k<br />
/etc/instantafs/backup-buttler.keytab - - rsync<br />
-av /wichtige/lokale/daten /afs/meine.zelle/locale-backups<br />
3. Das Volume, in dem die gesicherten Daten liegen, kann nun wie jedes andere<br />
AFS-Volume regelmäßig auf verschiedene Weisen gesichert werden<br />
Hinweise:<br />
• Das AFS ist kein 100%ig Unix-kompatibles Dateisystem. Vor allem,<br />
wenn die Besitzer-Metadaten der zu sichernden Dateien wichtig sind,<br />
dann muss darf man das Backup nicht einfach als Kopie auslegen,<br />
sondern muss z.B. ein tar oder cpio-Archiv anlegen.<br />
• U.U. ist es nötig, dass der Prozess unter der Unix-UID (in diesem<br />
Fall nobody) läuft, die der AFSID des AFS-Benutzers (in diesem
5.7 Wiederherstellen zerstörter RW-Instanzen 111<br />
5.7 Wiederherstellen zerstörter RW-Instanzen<br />
5.7.1 ... aus einer RO-Instanz<br />
Fall backup-buttler) entspricht. rcs 9 ist ein Beispiel da<strong>für</strong>. In diesem<br />
fall muß man die cron-Zeile anpassen und auch den Besitzer von<br />
/etc/instantafs/backup-buttler.keytab entsprechend ändern.<br />
Manchmal ist es nötig, eine RW-Instanz aus den Daten einer RO-Instanz zu<br />
erstellen. Nach Ausfall eines Server, der RW-Instanzen speicherte, ist es z.B.<br />
sinnvoll.<br />
Es gibt 3 Möglichkeiten, das zu tun. An dieser Stelle wird auf die Wiederherstellung<br />
einzelner Instanzen eingegangen. Ist die Zeit ein kritischer Faktor bzw.<br />
sind viele Instanzen wiederherzustellen, lesen Sie besser unter 8.5.3 auf Seite<br />
180 weiter.<br />
5.7.1.0.1 dump/restore mit einer RO-Instanz Bei dieser Methode werden<br />
die Daten einer existierenden RO-Instanz über den vol<strong>server</strong>-Prozess des<br />
AFS-File<strong>server</strong>s ausgelesen, auf dem diese RO-Instanz liegt. Über eine Pipe<br />
wird dieser Datenstrom an das vos restore-Kommando geschickt, was die<br />
Daten an den vol<strong>server</strong> auf dem Ziel-File<strong>server</strong> weiterreicht, der dann die<br />
RW-Instanz neu erzeugt. Das ist eine sehr saubere, jedoch auch langsame Lösung.<br />
Hier ein Beispiel:<br />
Die RW-Instanz von user.ernie lag auf einem Server, der jetzt zerstört ist. Auf<br />
afsserv1 liegt glücklicherweise eine RO-Instanz:<br />
admin@afs>vos dump user.ernie.readonly -<strong>server</strong> afsserv1 -partition a | \<br />
vos restore afsserv2 a user.ernie<br />
Damit wurde die RW-Instanz wiederhergestellt und liegt jetzt auf afsserv2.<br />
Hinweis: Ab OpenAFS 1.3 geht das effizienter mit vos copy (siehe 7.16,<br />
Seite 170).<br />
5.7.1.0.2 Wiederherstellung mit klassischen Unix-Tools Es ist natürlich<br />
möglich, die Wiederherstellung im AFS-Namespace auf Dateisystemebene<br />
durchzuführen. Dazu legt man die RW-Instanz auf einem beliebigen Server neu<br />
an (siehe 6.3, Seite 116). Anschließend wechselt man in einen Pfad unter /afs,<br />
der in der RW-Instanz endet und kopiert die Daten z.B. mit cp, mit tar, dem<br />
Midnight Commander (mc) oder einem beliebigen anderen Programm, das in<br />
der Lage ist, Dateibäume zu kopieren. Diese Methode ist nur dann sinnvoll,<br />
wenn von dem wiederherzustellenden Volume nur wenige Daten noch benötigt<br />
werden, die noch existierende RO-Instanz jedoch große Datenmengen enthält.<br />
5.7.1.0.3 Wiederherstellung durch RO-RW-Umwandlung Es ist auch<br />
möglich, eine RO-Instanz in eine RW-Instanz umzuwandeln. Diese Funktion ist<br />
Teil eines inoffiziellen Patches gegen die OpenAFS-1.2.11-Quellen, hat jedoch<br />
bereits Einzug in die Entwicklerversion von OpenAFS (1.3.x) gehalten.<br />
Hier ein Beispiel:<br />
admin@afs>vos convertROtoRW -<strong>server</strong> afsserv1 -partition a -id user.ernie<br />
9 rcs wird z.B. von twiki .deb benutzt, das wiederum auf apache .deb aufsetzt. Wenn apache .deb<br />
afsifiziert wird, wirkt sich das auch auf rcs aus.
112 5 Backups und Ausfallsicherheit<br />
5.7.2 ... aus dem AFS-Backup-System<br />
Damit wird die RO-Instanz des Volumes user.ernie auf dem Rechner afsserv1<br />
(auf Partition a) in eine RW-Instanz umgewandelt.<br />
Das AFS-Backup-System kennt verschiedene Wiederherstellungsmodi:<br />
• backup volrestore restauriert ein einzelnes Volume. Beispiel:<br />
backup volrestore -<strong>server</strong> afsserv1 -partition a \<br />
-volume user.ernie -volume user.bert -extension .xx<br />
Damit werden die Homedirectories von ernie und bert wiederhergestellt<br />
- allerdings in die neuen Volumes user.ernie.xx und user.bert.xx. Die Angabe<br />
eines Suffixes mit -extension Erweiterung ist dann nötig,<br />
wenn nur wenige Daten aus einem Backup benötigt werden und die derzeitige<br />
RW-Instanz nicht überschrieben werden soll. In diesem Fall würden<br />
einfach Volumes mit neuen Namen angelegt werden.<br />
• Der Befehl backup volsetrestore restauriert alle Volumes eines<br />
bestimmten Volume-Sets (siehe 5.2.3.2, Seite 104). Es ist möglich, eine<br />
Datei anzugeben, in der <strong>für</strong> jedes Volume definiert ist, auf welche Partition<br />
welches Servers es wiederhergestellt werden soll (siehe [ADMREF]).<br />
Hier ein Beispiel:<br />
admin@afs>cat /tmp/home.restore<br />
afsserv1 a user.ernie<br />
afsserv2 a user.bert<br />
admin@afs>backup volsetrestore users -file /tmp/home.restore<br />
Damit würden die Homedirectories (und nur die) von ernie (auf den<br />
Rechner afsserv1) und bert (auf den Rechner afsserv2) wiederhergestellt.<br />
In der Datei /tmp/home.restore muss das wiederherzustellende Volume<br />
zusammen mit einem Ziel<strong>server</strong> und einer Zielpartition aufgeführt sein.<br />
• Ein besonders praktisches Kommando ist backup diskrestore.<br />
Damit kann eine komplette Partition eines File<strong>server</strong>s wiederhergestellt<br />
werden. Ein Beispiel:<br />
admin@afs>backup diskrestore -partition a -<strong>server</strong> afsserv2 \<br />
-newpartition a -new<strong>server</strong> afsserv1<br />
Damit würde die RW-Instanzen, die vorher auf dem jetzt zerstörten<br />
RAIDs /vicepa auf afsserv2 lagen, auf den Rechner afsserv1 wiederhergestellt.<br />
Bei Bedarf kann allen wiederhergestellen Volumes mit<br />
-extension Erweiterung ein Suffix angehängt werden.<br />
Zusätzliche Parameter<br />
• Der Parameter -n bewirkt, dass lediglich die wiederherzustellenden<br />
Volumes aufgelistet, nicht jedoch wiederhergestellt werden (Trockentraining).<br />
• Man kann auch einen Zeitpunkt angeben, der wiederhergestellt werden<br />
soll. Das Backupsystem wählt dann die entsprechenden Dumps aus,<br />
wobei kein Dump nach dem angegebenen Zeitpunkt benutzt wird.<br />
-date MM/TT/JJJJ hh:mm
5.7 Wiederherstellen zerstörter RW-Instanzen 113<br />
10 also z.B.:<br />
admin@afs>backup volrestore user.gert -extension .x -date 12/13/2005 00:00<br />
-<strong>server</strong> mekong -partition a<br />
5.7.3 ... aus Volume-Dumps<br />
• Mit -portoffset Portoffset des Servers kann man einen<br />
vom primären abweichenden Backup-Server <strong>für</strong> die Rücksicherung auswählen.<br />
Das ist unbedingt nötig, wenn die entsprechenden Daten nicht<br />
auf dem primären Backup-Server liegen.<br />
Soll ein Volume wiederhergestellt werden, müssen ein Full-dump sowie evtl.<br />
nötige inkrementelle Dumps des wiederherzustellenden Volumes zur Verfügung<br />
stehen. Je nachdem, wie die Volume-Dumps archiviert werden, ist dazu der Einsatz<br />
eines Kommandos der benutzten Backup-Software nötig. Die Wiederherstellung<br />
erfolgt zu einem definierten Server auf eine bestimmte Partition. Um<br />
das Volume wiederherzustellen, muss der Full-Dump und alle inkrementellen<br />
Dumps dekomprimiert und wiederhergestellt werden. Ein Beispiel (Das benutzte<br />
Skript ist als Listing 5.1 verfügbar):<br />
admin@afs>restore-volume.sh root.cell.restored afsserv1 a \<br />
root.cell_full.gz root.cell_incremental_1.gz<br />
# ! / b i n / bash<br />
#<br />
# S y n t a x : $0 [ Z i e l v o l u m e ] [ Z i e l s e r v e r ] [ p a r t i t i o n ]<br />
# [ Fulldump−F i l e ] { [ i n k r e m e n t e l l e s Dumpfile ] { . . . } }<br />
#<br />
s e t −e<br />
volume="$1" ; s h i f t<br />
s e r v e r ="$1" ; s h i f t<br />
p a r t i t i o n ="$1" ; s h i f t<br />
gunzip < "$1" | vos r e s t o r e −s e r v e r "$<strong>server</strong>" \<br />
−p a r t i t i o n "$partition" −name "$volume" \<br />
−o v e r w r i t e f u l l<br />
s h i f t<br />
f o r f i l e in "$@" ; do<br />
gunzip < "$file" | vos r e s t o r e −s e r v e r "$<strong>server</strong>" \<br />
−p a r t i t i o n "$partition" −name "$volume" \<br />
−o v e r w r i t e i n c r e m e n t a l<br />
done<br />
echo "Success."<br />
e x i t 0<br />
Listing 5.1: Einfaches Shellskript zur Wiederherstellung eines Volumes aus<br />
Dumps<br />
10 Datum und Uhrzeit sind wirklich 2 Parameter
6 Tägliche Arbeit mit AFS<br />
6.1 Manuelles Anlegen neuer Benutzer<br />
Dieses Kapitel beschreibt, wie täglich anfallende Aufgaben unter AFS zu erledigen<br />
sind.<br />
Hinweis: Hier wird beschrieben, wie ein Benutzer manuell angelegt wird. Es<br />
geht auch anders - über InstantAFS-Skripte (siehe 7.9, Seite 155). Diese Skripte<br />
sind in folgenden Fällen sinnvoll:<br />
• Wenn die Benutzerverwaltung zentralisiert/automatisiert werden soll<br />
(z.B. per Web-Interface),<br />
• wenn Benutzer auch Zugriff auf ein Samba-Gateway erhalten sollen oder<br />
• wenn die manuelle Methode nicht komfortabel genug ist.<br />
Manuell geht es wie folgt:<br />
1. Man verschafft dem Benutzer einen neuen Eintrag in der AFS-Datenbank:<br />
admin@afs>pts createuser Benutzername AFSID<br />
Beispiel:<br />
admin@afs>pts createuser ernie 1000<br />
2. Den Kerberos-Principal des Benutzers erzeugt man auf dem Kerberos-<br />
Master-Server. Beachten Sie, dass mit dieser Methode außer Zahlen und<br />
Buchstaben nur wenige Sonderzeichen (_ und - sind ok) als Passwort<br />
erlaubt sind.<br />
root@kerberos1> kadmin.local -p admin -q ’addprinc -requires_preauth \<br />
-pw Password Benutzername’<br />
oder am Beispiel:<br />
root@kerberos1> kadmin.local -p admin -q ’addprinc -requires_preauth \<br />
-pw Geh-Heim ernie’<br />
3. Der Benutzer muß evtl. noch in diverse AFS-Gruppen eingetragen werden.<br />
Das Kommando<br />
admin@afs>pts add Gruppenname Benutzername<br />
admin@afs>pts add users ernie<br />
114<br />
erledigt das <strong>für</strong> jeweils eine Gruppe. Beispiel:<br />
Hinweise:<br />
• Mehr Informationen dazu, wie man mit AFS-Gruppen umgeht, sind<br />
unter refPTDB-Groups (Seite 121) zu finden.
6.2 Ändern der Maximalgröße (Quota) eines Volumes 115<br />
• InstantAFS’ Benutzermanager (instantafs.usermgr) erkennt<br />
den Status von Benutzern an ihrer Mitgliedschaft entweder in<br />
der Gruppe users oder users-na (siehe 7.9, Seite 155).<br />
4. Ein Eintrag in einem NSS-Dienst (z.B. LDAP) ist nicht nötig, da per<br />
default libnss-ptdb .deb zum Einsatz kommt, das sich wiederum aus der<br />
PTDB bediehnt.<br />
5. Das Homedirectory-Volume user.[Benutzername] muss erstellt (siehe<br />
6.3, Seite 116) und in den AFS-Namespace eingebunden werden:<br />
admin@afs>fs mkm /afs/Zellenname/user/Benutzername user.Benutzername \<br />
-rw<br />
6. Eine Backup-Instanz sollte erzeugt und regelmäßig upgedatet werden<br />
(siehe 7.2, Seite 141). Die Backup-Instanz wird unter InstantAFS an eine<br />
genau definierte Stelle im Filesystem gemountet:<br />
admin@afs>fs mkm /afs/Zellenname/user-/Benutzername \<br />
user.Benutzername.backup<br />
6.2 Ändern der Maximalgröße (Quota) eines Volumes<br />
6.2.1 Setzen der Quota als Superuser<br />
7. Das Homedirectory muss mit sinnvollen default-Rechten versehen werden<br />
(siehe 7.8, Seite 154).<br />
Die Quota eines Volumes kann man mit dem Kommando fs sq anpassen.<br />
Dabei muß immer ein Verzeichnis angegeben werden - nicht das Volume selbst.<br />
Der AFS-Client ermittelt dann das zugehörige Volume und setzt die Maximalquota<br />
entsprechend:<br />
admin@host> fs sq Verzeichnis Maximalgröße<br />
also z.B.:<br />
admin@afsserv1> fs sq /afs/cbs.mpg.de/user/ernie 1000000<br />
Hinweise:<br />
• Man kann die Quota eines Volumes auch beim Anlegen des Volumes<br />
festlegen:<br />
admin@afs>vos create Server Partition Volume -maxquota Maximalgröße<br />
6.2.2 Setzen der Quota durch Benutzer<br />
• Die Maximalquota von Volumes, die über acall angelegt werden (siehe<br />
6.3.2, Seite 117), kann in der Konfigurationsdatei des Kommandos<br />
instantafs.acall-volcreate (siehe 9.2.7, Seite 195) eingestellt<br />
werden.<br />
Es ist u.U. nötig, dass einfache Benutzer die Quotas von Volumes setzen. Als<br />
einfacher Benutzer zählt z.B. auch ein automatisches Web-orientiertes Benutzermanagementsystem,<br />
dass auf Anfrage, Gnade walten lassen und die Quota<br />
kurzfristig erhöhen kann. InstantAFS’ acall-Schnittstelle (siehe 7.6.2, Seite<br />
149) bietet eine Möglichkeit dazu.
116 6 Tägliche Arbeit mit AFS<br />
6.3 Anlegen eines Volumes<br />
6.3.1 Anlegen eines Volumes durch den Superuser<br />
Der Administrator muß vorher die Datei /a/a/etc/acall.access entsprechend bearbeiten,<br />
so daß die gewünschten Nutzer entsprechenden Zugriff auf das Kommando<br />
instantafs.acall-setquota auf dem acall-Server db erhalten.<br />
Die Syntax ist an Beispielen in der Datei /usr/share/doc/examples/acall.access<br />
(Paket instantafs-doc .deb ) erklärt.<br />
Außerdem muß der Administrator in der Datei /a/a/etc/acall-setquota.conf<br />
einstellen, in welchem Bereich welcher Nutzer die Quota von welchen Volumes<br />
setzen darf. Die Syntax findet man an Beispielen in der Datei /usr/share/doc/examples/acallsetquota.conf<br />
im Paket instantafs-doc .deb<br />
Ein Volume wird angelegt, sobald die RW-Instanz desselben erstellt wird. Anschließend<br />
muss man das Volume noch in den Namensraum einhängen 1 .<br />
Wo : Eine Partition muss immer angegeben werden. Gültige Partitionen lassen<br />
sich wie folgt herausfinden, wobei man gleich den freien Speicher angezeigt<br />
bekommt:<br />
user@host>vos partinfo AFS-File<strong>server</strong><br />
Erzeugen : Mit vos create wird die RW-Instanz auf der entsprechenden Partition<br />
des angegebenen Servers erstellt. Die Option -maxquota ist nicht<br />
zwingend, aber in jedem Falle sinnvoll<br />
admin@afs>vos create Servername Partition Name des Volumes \<br />
-maxquota Quota in kB<br />
Mountpoint : Das Volume ist erst sichtbar, wenn es in den AFS-Namensraum eingebunden<br />
ist. Dazu muss ein Mountpoint angelegt werden:<br />
admin@afs>fs mkm Mount-Point Volumename -rw<br />
Freigeben : Üblicherweise muß jetzt noch das Volume, in dem der Mountpoint liegt,<br />
mit vos release bearbeitet werden, damit er auch in der jeweiligen<br />
RO-Instanz erscheint.<br />
admin@afs>vos release Mountpount-Volume<br />
Rechte : Die ACLs sind per default sehr restriktiv. Mit fs sa können sie neu<br />
gesetzt werden (siehe 6.6, Seite 120)<br />
RO-Instanz : Eine RO-Instanz auf einem zweiten Server bringt Redundanz. Man legt<br />
sie wie folgt an:<br />
admin@afs>vos addsite Zweiter Server Partition auf dem zweiten Server<br />
Volumename<br />
1 vergleichbar mit Mounten einer frisch formatierten Partition
6.3 Anlegen eines Volumes 117<br />
Jetzt das ganze an einem konkreten Beispiel:<br />
admin@afs>vos partinfo afsf<strong>server</strong>1<br />
Free space on partition /vicepa: 8773476 K blocks out of total 26245408<br />
admin@afs>vos create afs<strong>server</strong>1 a user.ernie -maxquota 300000<br />
admin@afs>fs mkm /afs/.cbs.mpg.de/users/ernie user.ernie -rw<br />
admin@afs>vos release user<br />
admin@afs>vos addsite afs<strong>server</strong> a user.ernie<br />
Mit folgender Zeile würde ernie volle Rechte über das Volume bekommen. Die<br />
Gruppe sesamstrasse dürfte lesend zugreifen.<br />
admin@afs>fs sa /afs/cbs.mpg.de/user/ernie ernie rlwidka sesamstrasse rl<br />
6.3.2 Anlegen eines Volumes durch einen normalen Benutzer<br />
Manchmal ist es nötig, Benutzern zu erlauben, Volumes anzulegen. InstantAFS’<br />
acall-Schnittstelle (siehe 7.6.2, Seite 149) bietet eine Möglichkeit dazu. Das<br />
unter 7.11 auf Seite 159 skizzierte Beispiel macht von dieser Möglichkeit gebrauch.<br />
Der Administrator muß vorher die Datei /a/a/etc/acall.access entsprechend<br />
bearbeiten, so daß die gewünschten Nutzer entsprechenden Zugriff auf das<br />
Kommando instantafs.acall-volcreate auf dem acall-Server db<br />
erhalten. Die Syntax ist an Beispielen in der Datei /usr/share/doc/examples/acall.access<br />
(Paket instantafs-doc .deb ) erklärt.<br />
Außerdem muß der Administrator einige Parameter festlegen, die beim Anlegen<br />
von Volumes durch die entsprechenden Benutzer beachtet werden sollen.<br />
Dazu ist die Datei /a/a/etc/acall-volcreate.conf anzupassen. Informationen zur<br />
Syntax findet man an Beispielen in der Datei /usr/share/doc/examples/acallvolcreate.conf<br />
im Paket instantafs-doc .deb<br />
Der Ablauf ist dabei wie folgt:<br />
1. Ein Benutzer legt ein Volume mittels acall an:<br />
user@host>acall db ia:volcreate Volumename<br />
also z.B.:<br />
ernie@afsclient> db ia:volcreate proj.sesam.1<br />
2. instantafs.acall-volcreate sucht die erste Zeile in dem File /a/a/etc/acallvolcreate.conf,<br />
auf die der aufrufende Benutzer sowie das anzulegende<br />
Volume passt. Das könnte z.B. die folgende sein:<br />
ernie proj\.sesam\.[0-9] quota=10000,location=afsserv1/a,<br />
acl=$CREATOR;rlwidka,rolocation=afsserv2/a,backup<br />
3. Das Volume wird genau mit den Optionen angelegt, die in dieser Zeile<br />
angegeben sind. Es gibt <strong>für</strong> den Nutzer keine Möglichkeit, Einfluß auf<br />
diese Optionen zu nehmen.<br />
Im Beispiel wird das Volume auf dem Rechner afsserv1 auf Partition a<br />
angelegt und eine RO-Instanz auf afsserv2 auf Partition a eingerichtet.<br />
Ausserdem wird eine Backup-Instanz angelegt, die Maximalgröße auf<br />
10MB festgelegt und die ACL im Grundverzeichnis des neuen Volumes<br />
so gesetzt, dass der erstellende Benutzer (in diesem Fall ernie) volle<br />
Rechte hat.<br />
Beispielfile: /usr/share/doc/instantafs-doc/examples/acall-volcreate.conf<br />
aus dem Debian-Paket instantafs-doc.
118 6 Tägliche Arbeit mit AFS<br />
6.4 Hinzufügen eines File<strong>server</strong>s<br />
4. Der Benutzer kann den Prozess nicht beeinflussen (kein Abbruch mittendrin,<br />
keine anderen Interaktionen, keine Signale).<br />
5. Auf Serverseite ist der Principal acall im Einsatz, um das Volume anzulegen,<br />
Rechte zu definieren und evtl. weitere (Backup- oder RO-) Instanzen<br />
anzulegen. Der acall-Principal hat gleiche Rechte wie admin.<br />
Bei diesem Vorgang wird kein Volume-Mountpoint auf das neue Volume angelegt.<br />
Das muss der Benutzer selbst machen, was natürlich nur in Verzeichnissen<br />
funktioniert, in denen er das a-Recht besitzt (siehe 3.7.3.2, Seite 51). Dabei<br />
kann ihm der Administrator durch das Schreiben kleiner Skripte zur Hand gehen<br />
(siehe 7.11.6, Seite 163).<br />
In einem Beispielprojekt wird von der Möglichkeit des Anlegens von Volumes<br />
durch Benutzer gebrauch gemacht (siehe 7.11, Seite 159).<br />
Reichen die File<strong>server</strong> der Zelle nicht mehr aus, können leicht weitere hinzugefügt<br />
werden. Man lege dazu einen unspezialisierten AFS-Server an (siehe 7.5,<br />
Seite 146).<br />
Achtung:<br />
• Wenn man sich mit AFS noch nicht besonders auskennt, sollte man die<br />
Anweisungen in 7.5 genau befolgen.<br />
• Die Anweisungen in 7.5 sind idempotent.<br />
Dieser sollte natürlich über mindestens eine große Massenspeicherpartition<br />
(siehe 3.8.3, Seite 59) verfügen, die dann unter /vicepa, usw. gemountet sein<br />
muß.<br />
Danach ist auf dem neuen Server noch folgendes Kommando auszuführen:<br />
root@host>bos create localhost fs fs -cmd /usr/lib/openafs/file<strong>server</strong> \<br />
-cmd /usr/lib/openafs/vol<strong>server</strong> -cmd /usr/lib/openafs/salvager \<br />
-localauth<br />
Benutzt wird der File<strong>server</strong>, sobald man Volumes auf ihm anlegt (siehe 6.3,<br />
Seite 116).<br />
6.5 Datenbank<strong>server</strong> hinzufügen, entfernen oder wechseln<br />
6.5.1 Rechner und deren Sonderwünsche<br />
Änderungen an der Liste der Datenbank<strong>server</strong> müssen immer gut geplant werden<br />
und sorgfältig durchgeführt werden. Wenn man sich an einige Regeln hält,<br />
funktioniert das jedoch, ohne die geringste Unterbrechung <strong>für</strong> die Benutzer.<br />
Man muss die verschiedenen Rechner der Zelle in der richtigen Reihenfolge an<br />
die neue Datenbank-Konfiguration anpassen. Dazu teilt man sie erst einmal in<br />
Klassen ein:<br />
DBonly : Reine Datenbank<strong>server</strong> auf denen kein File<strong>server</strong> läuft.<br />
DB-FS : Kombinierte Datenbank-/File<strong>server</strong>.<br />
FS : Reine File<strong>server</strong><br />
WRITE : Reine File<strong>server</strong> und AFS-Clients, die Schreibzugriff auf die Datenbank<br />
brauchen.
6.5 Datenbank<strong>server</strong> hinzufügen, entfernen oder wechseln 119<br />
6.5.2 Ablauf<br />
READ : Andere Rechner der Zelle, die keinen Schreibzugriff auf die AFS-<br />
Datenbank brauchen, worunter die meisten Workstations fallen dürften.<br />
Achtung:<br />
• Alle Rechner der Klassen DB-FS müssen immer die Adresse der aktuellen<br />
Sync-Site kennen - die entsprechende IP muss also zu jedem Zeitpunkt<br />
in der lokalen CellServDB stehen. Um das sicherzustellen, werden<br />
einige zusätzliche Schritte unternommen, die man bei etwas mehr Erfahrung<br />
teilweise auslassen kann.<br />
• Diese <strong>Anleitung</strong> geht davon aus, dass nicht sämmtliche aktuellen DB-<br />
Server entfernt/ersetzt werden. Sie funktioniert also nur dann, wenn min.<br />
1 DB-Server erhalten bleibt. Will man alle austauschen, muss man das<br />
Prozedure zweimal durchführen: Zuerst müssen die alten raus, beim<br />
zweiten Durchlauf die neuen rein.<br />
1. Da im Laufe dieses Prozesses die AFS-File<strong>server</strong>prozesse neu gestartet<br />
werden müssen, sollte man dieses Prozedure an einem Tag durchführen,<br />
an dem die Zelle möglichst wenig zu tun hat.<br />
2. Zuerst werden die AFSDB-Einträge neuer Datenbank<strong>server</strong> ins DNS eingetragen<br />
(siehe 4.4.1, Seite 79).<br />
3. Auf den WRITE-Rechnern werden die neuen Datenbank<strong>server</strong> in die<br />
Client-CellServDB (/etc/openafs/CellServDB) eingetragen wenn diese<br />
Datei nicht leer ist. Ausserdem muss der AFS-Client neu gestartet<br />
werden. Dadurch ist gesichert, dass die Rechner immer die aktuelle<br />
Sync-Site kennen - und Sync-Site kann schliesslich einer der neuen<br />
Datenbank<strong>server</strong> werden.<br />
4. Auf den FS-Rechnern werden die neuen Datenbank<strong>server</strong> in die Server-<br />
CellServDB (/etc/openafs/<strong>server</strong>/CellServDB) eingetragen.<br />
5. Auf den DBonly und den DB-FS-Servern werden jetzt die neuen Datenbank<strong>server</strong><br />
eingetragen - und zwar immer ein neuer Server nach dem<br />
anderen:<br />
(a) Man wähle einen der neuen Datenbank<strong>server</strong> aus. Die Datenbankprozesse<br />
auf diesem Rechner dürfen noch nicht laufen. Das /etc/openafs/<strong>server</strong>/CellServDB-File<br />
muss so aussehen, wie auf den anderen<br />
DBonly-Servern der Zelle. Der neue Datenbank<strong>server</strong> zählt<br />
ab sofort zur Rechnerklasse DBonly.<br />
(b) Es versteht sich von selbst, dass der neue Datenbank<strong>server</strong> einen<br />
gültigen AFS-Key haben muss (siehe A.8, Seite 235).<br />
(c) Der gewählte Datenbank<strong>server</strong> wird in /etc/openafs/<strong>server</strong>/Cell-<br />
ServDB auf allen vorhandenen DBonly- und DB-FS-Servern<br />
eingetragen.<br />
(d) Die Datenbankprozesse auf den restlichen Datenbank<strong>server</strong>n werden<br />
neu gestartet.<br />
(e) Die Datenbankprozesse auf dem neuen Server werden gestartet.<br />
(f) Man sollte jetzt sicherstellen, dass die Server eine Sync-Site gewählt<br />
haben (siehe 3.3.2, Seite 36). Das testet man mit:<br />
user@host>udebug beliebiger Datenbank<strong>server</strong> 7003
120 6 Tägliche Arbeit mit AFS<br />
6. Jetzt sollte man noch einmal absolut sicher sein, dass die VLDB wirklich<br />
eine Sync-Site hat:<br />
user@host>udebug beliebiger Datenbank<strong>server</strong> 7003<br />
Hat sie das nicht, können die File<strong>server</strong> nicht korrekt hochfahren.<br />
7. Auf allen FS- und DB-FS-Rechnern müssen die File<strong>server</strong>-Prozesse neu<br />
gestartet werden.<br />
8. Die AFSDB-Einträge der zu entfernenden Datenbank<strong>server</strong> werden aus<br />
dem DNS geworfen (siehe 4.4.1, Seite 79).<br />
9. Auf den DBonly und den DB-FS-Servern werden jetzt die zu entfernenden<br />
Datenbank<strong>server</strong> aus der Serverliste gelöscht - wieder muss man das<br />
<strong>für</strong> jeden zu entfernenden Datenbank<strong>server</strong> einzeln machen:<br />
(a) Man wähle einen der alten Datenbank<strong>server</strong> aus. Der alte Datenbank<strong>server</strong><br />
zählt ab sofort nicht mehr zur Rechnerklasse DBonly.<br />
(b) Die Datenbankprozesse auf dem gewählten Server werden gestoppt.<br />
(c) Der gewählte alte Datenbank<strong>server</strong> wird aus allen /etc/openafs/<strong>server</strong>/CellServDB<br />
auf allen vorhandenen DBonly- und DB-FS-<br />
Servern entfernt.<br />
(d) Die Datenbankprozesse auf allen DB- und DB-FS-Rechnern werden<br />
neu gestartet.<br />
(e) Man sollte sicherstellen, dass die Server eine Sync-Site gewählt<br />
haben (siehe 3.3.2, Seite 36). Das testet man mit:<br />
user@host>udebug beliebiger Datenbank<strong>server</strong> 7003<br />
10. Jetzt sollte man noch einmal absolut sicher sein, dass die VLDB wirklich<br />
eine Sync-Site hat:<br />
user@host>udebug beliebiger Datenbank<strong>server</strong> 7003<br />
6.6 Ändern von Verzeichnisrechten im AFS<br />
11. Auf den WRITE-Rechnern werden die entfernten Datenbank<strong>server</strong> aus<br />
der Client-CellServDB (/etc/openafs/CellServDB) geworfen wenn diese<br />
Datei nicht bereits leer ist. Dann wir der AFS-Client (mal wieder) neu<br />
gestartet. Das dient nur der Verringerung möglicher Timeouts - die WRI-<br />
TE-Rechner könnten auch ohne diese zwei Schritte problemlos weiterarbeiten.<br />
12. Auf den FS-Rechnern werden die entfernten Datenbank<strong>server</strong> aus der<br />
Server-CellServDB (/etc/openafs/<strong>server</strong>/CellServDB) geworfen. Neustart<br />
der File<strong>server</strong>prozesse ist nicht nötig.<br />
Das fs-Kommando kann benutzt werden, um die Zugriffsrechte von Benutzern<br />
oder Benutzergruppen auf Verzeichnisse zu definieren. Hier einige Beispiele:<br />
Der Benutzer ernie soll zusätzlich zu denen, die jetzt schon dürfen, Dateien im<br />
Verzeichnis /afs/cbs.mpg.de/local/scripts ändern und Hinzufügen dürfen:<br />
admin@afs>fs sa /afs/cbs.mpg.de/local/.scripts ernie rliw<br />
admin@afs>instantafs.release -d /afs/cbs.mpg.de/local/.scripts
6.7 Arbeiten mit AFS-Gruppen 121<br />
Der Benutzer ernie soll das Recht haben, Dateien unter /afs/cbs.mpg.de/local/scripts<br />
zu verwalten (Lesen/Schreiben/Löschen). Alle anderen Benutzer sollen jedoch<br />
Leserecht haben:<br />
admin@afs>fs sa /afs/cbs.mpg.de/local/.scripts ernie rliwd \<br />
system:anyuser rl -clear<br />
Man kann auch die Rechte aus einem anderen Verzeichnis in ein anderes kopieren.<br />
Folgendes Kommando setzt die Rechte im Scripts-Verzeichnis entsprechend<br />
der Rechte in ernie’s Homedirectory:<br />
root@host>fs ca /afs/cbs.mpg.de/user/ernie /afs/cbs.mpg.de/local/.scripts<br />
Hinweise:<br />
6.7 Arbeiten mit AFS-Gruppen<br />
• Das Kommando instantafs.achmod (siehe 9.2.8, Seite 196) steht<br />
<strong>für</strong> interaktives Bearbeiten von Verzeichnisrechten zur Verfügung.<br />
• Machen Sie - wo immer das möglich ist - von den Möglichkeiten der<br />
AFS-Gruppen (siehe 6.7, Seite 121) gebrauch.<br />
Gruppen legt man folgendermaßen an:<br />
Das ist eine Gruppe, die nur ein Superuser anlegen darf:<br />
admin@afs>pts creategroup sesamstrasse<br />
Solche Gruppen dürfen Benutzer (in diesem Fall ernie) anlegen:<br />
ernie@afsclient> pts creategroup ernie:sesamstrasse<br />
Die Zugriffsrechte auf einen Benutzereintrag oder eine Gruppe zeigt folgendes<br />
Kommando:<br />
admin@afs>pts examine ernie:sesamstrasse<br />
Name: ernie:sesamstrasse, id: -10001, owner: ernie, creator: ernie,<br />
membership: 0, flags: S-M-, group quota: 0.<br />
Besonders interessant sind die Flags 2 , die unter [ADMREF] näher beschrieben<br />
sind. Diese legen fest, welche Zugriffe auf die Gruppe von wem akzeptiert werden.<br />
Das group quota-Feld ist nur bei Benutzereinträgen von Bedeutung -<br />
es zeigt an, wieviele weitere Gruppen der jeweilige Benutzer anlegen darf.<br />
Benutzer lassen sich wie folgt hinzufügen:<br />
user@host>pts add bert ernie:sesamstrasse<br />
...und wieder entfernen:<br />
user@host>pts removeuser bert ernie:sesamstrasse<br />
...und wieder hinzufügen:<br />
user@host>pts add ernie ernie:sesamstrasse<br />
Mit pts membership läßt sich anzeigen, welche Mitglieder eine Gruppe hat<br />
bzw. in welchen Gruppen ein Benutzer Mitglied ist:<br />
2 eigentlich sind es Tristates und keine Flags
122 6 Tägliche Arbeit mit AFS<br />
user@host>pts membership ernie<br />
Groups ernie (id: 1000) is a member of:<br />
ernie:sesamstrasse<br />
user@host>pts membership ernie:sesamstrasse<br />
Members of ernie:sesamstrasse (id: -10001) are:<br />
ernie<br />
Welche Gruppen es so gibt, zeigt das Kommando<br />
admin@afs>pts listentries -groups<br />
Allerdings dürfen nur <strong>Administratoren</strong> 3 dieses Kommando ausführen.<br />
Hinweise:<br />
user@host>tokenmgr -l<br />
6.8 Löschen eines Volumes oder einer Volume-Instanz<br />
6.8.1 ... wenn’s keine Unregelmäßigkeiten gibt<br />
• Fügt man einen Benutzer einer Gruppe hinzu, kann es sein, daß der<br />
Benutzer sich ein neues Token holen muß, um auf Verzeichnisse zuzugreifen,<br />
auf die er nur durch die Gruppenmitgliedschaft Zugriff erhält:<br />
Analog gilt, daß ein Nutzer, der aus einer Gruppe entfernt wird, seine<br />
Rechte u.U. nicht sofort verliert, sondern erst, wenn er ein neues Token<br />
anfordert.<br />
Der Grund da<strong>für</strong> sind Cache-Mechanismen der AFS-File<strong>server</strong>.<br />
• pts listentries kann nur von Zellensuperusern ausgeführt werden.<br />
Je nach Situation bietet AFS verschiedene Möglichkeiten, einzelne Instanzen<br />
von Volumes zu entfernen. Ist die Zelle in einem perfekten Zustand (alle<br />
File<strong>server</strong> sind da, es existieren keine Inkonsistenzen), kommt der Befehl vos<br />
remove zum Einsatz. Es wird dabei immer eine konkrete Instanz auf einer<br />
bestimmten Partition entfernt - nicht z.B. alle RO-Instanzen eines Volumes.<br />
Wie man sich einen Überblick über die Instanzen eines Volumes verschafft,<br />
ist unter 6.10, Seite 124 beschrieben. Soll ein Volume komplett aus der Zelle<br />
entfernt werden, müssen dazu alle Instanzen entfernt werden (zuerst RO- und<br />
Backup-Instanzen, zuletzt die RW-Instanz). Mit der RW-Instanz wird dann auch<br />
der Eintrag in der VLDB getilgt.<br />
Hier einige Beispiele zur Benutzung des vos remove-Kommandos:<br />
• Die RO-Instanz des Volumes user.ernie wird mit<br />
admin@afs>vos remove afsserv2 a user.ernie<br />
vom File<strong>server</strong> afsserv2 entfernt. Das vos-Kommando verlangt die Angabe<br />
der Partition (in diesem Fall a) 4 .<br />
• Die Backup-Instanz von user.bert wird entfernt:<br />
admin@afs>vos remove afsserv1 a user.bert.backup<br />
3 Mitglieder von system:administratores<br />
4 obwohl das theoretisch nicht nötig sein sollte, da es nur eine RO-Instanz desselben Volumes auf<br />
einem Server geben darf
6.9 Verschieben eines Volumes 123<br />
6.8.2 ... das der VLDB unbekannt ist<br />
Der vos remove-Befehl versagt, wenn eine Instanz eines Volumes noch auf<br />
einem File<strong>server</strong> liegt, aber nicht mehr in der VLDB eingetragen ist. In diesem<br />
Fall gibt es zwei Möglichkeiten:<br />
admin@afs>vos syncvldb afsserv1<br />
• Synkronisiert man die VLDB mit dem betroffenen Server, werden solche<br />
Ungereimtheiten beseitigt. Bsp:<br />
Es ist auch möglich, die Synkronisation auf eine Partition oder sogar auf<br />
ein Volume zu beschränken. In [ADMREF] ist das genauer beschrieben.<br />
• Es ist möglich, eine Instanz unter kompletter Umgehung der VLDB zu<br />
entfernen:<br />
admin@afs>vos zap Servername Partition ID der Instanz<br />
6.8.3 ... das sich auch nach mehreren Versuchen nicht Löschen läßt<br />
6.8.4 ... aus der VLDB<br />
Das ist z.B. nötig, wenn das entsprechende Volume keinen Eintrag (also<br />
auch keinen Namen) mehr in der VLDB hat.<br />
Unter 8.5.5 auf Seite 182 ist beschrieben, wie man Volumes entfernen kann, die<br />
sich hartnäckig gegen Löschung mit Standardmitteln sträuben.<br />
Die vorher beschrieben Methoden des Instanzen-Löschens funktionieren allerdings<br />
nur, wenn der Server mit der entsprechenden Instanz auch erreichbar ist.<br />
Ist er z.B. defekt, kann man, je nachdem, ob es eine RO-Instanz oder aber den<br />
ganzen Volume-Eintrag der VLDB zu löschen gilt, einen der folgenden Befehle<br />
benutzen:<br />
• Mit vos remsite lassen sich VLDB-Einträge <strong>für</strong> RO-Instanzen entfernen.<br />
Es ist zu beachten, dass der Name bzw. die ID vom RW-Volume<br />
anzugeben ist - nicht von der RO-Instanz. Das Kommando ist dann sinnvoll,<br />
wenn man auf einen Server mit einer RO-Instanz eines wichtigen<br />
Volumes nicht mehr zugreifen kann, man die RW-Instanz selbst jedoch<br />
behalten will. Beispiel:<br />
admin@afs>vos remsite afsserv1 a user.ernie<br />
admin@afs>vos delentry user.ernie<br />
6.9 Verschieben eines Volumes<br />
• vos delentry entfernt den Eintrag eines Volumes komplett aus der<br />
VLDB. Evtl. vorhandene RO- und Backup-Instanzen stehen dann auch<br />
nicht mehr in der VLDB. Es sollte sichergestellt werden, dass vorher<br />
alle noch existierenden Kopien des Volumes entfernt wurden. Auf File<strong>server</strong>n<br />
vergessene Volume-Instanzen kosten schließlich Plattenspeicher.<br />
Beispiel:<br />
RW-Instanzen lassen sich mit dem Kommando vos move von einem AFS-<br />
File<strong>server</strong> zu einem anderen verschieben. Benutzer können während dieses Vorganges<br />
auf dem RW-Volume arbeiten.
124 6 Tägliche Arbeit mit AFS<br />
Hinweis: Während dieses Vorganges werden nicht zwangsläufig nur Daten von<br />
A nach B verschoben. Durch die Differenzielle Speicherung (siehe 3.1.4, Seite<br />
29) wird aus dem “Verschieben” u.U. “Kopieren”. Dieser feine Unterschied<br />
ist wichtig, wenn man Volumes verschieben will, um auf dem ursprünglichen<br />
File<strong>server</strong> mehr Speicher zu erhalten (siehe 8.5.6, Seite 183).<br />
RO-Instanzen lassen sich nicht verschieben. Das ist auch nicht nötig, da man<br />
ja üblicherweise nicht die exakten Daten aus einer RO-Instanz haben will,<br />
sondern nur eine weitere Kopie der RW-Instanz. Man kann das Verschieben auf<br />
einfache Weise “simulieren” - hier ein Beispiel:<br />
admin@afs>vos remove afsserv1 a user.ernie.readonly<br />
admin@afs>vos addsite afsserv2 a user.ernie<br />
admin@afs>vos release user.ernie<br />
6.10 Einholen von Informationen...<br />
6.10.1 ... über Server<br />
6.10.1.1 DB-Server<br />
Dabei werden allerdings alle RO-Instanzen von user.ernie auf den neuesten<br />
Stand gebracht - nicht nur die auf dem Ziel<strong>server</strong>.<br />
In diesem Abschnitt wird beschrieben, wie man welche Informationen über eine<br />
Zelle einholen kann. Alle hier genannten Methoden benötigen keine Authentifikation<br />
an den Servern (also kein gültiges Token), um zu funktionieren.<br />
Beachten Sie den feinen Unterschied zwischen den Informationen, die über Volumes<br />
auf einem File<strong>server</strong> gespeichert sind und den in der VLDB gespeicherten<br />
Informationen. Normalerweise sollte die VLDB exakt die Zustände auf den<br />
File<strong>server</strong>n abbilden, jedoch kann z.B. durch den Ausfall einer Serverpartition<br />
(durch den die VLDB nicht automatisch aktualisiert wird) die VLDB inaktuell<br />
sein.<br />
Mit Sicherheit ist die VLDB auf dem aktuellen Stand, wenn vos syncvldb<br />
<strong>für</strong> jeden einzelnen File<strong>server</strong> ausgeführt wird. Das geht wie folgt:<br />
admin@afs>for s in ‘vos listaddrs‘; do vos syncvldb $s;done<br />
Wenn die Daten der VLDB über die Instanzen auf den File<strong>server</strong> nicht übereinstimmen,<br />
ist das ein Fehler, der z.B. durch den Totalschaden eines Servers<br />
verursacht wurde - es ist keineswegs alltäglich.<br />
Das AFS verlangt, dass alle DB-Server eine vollständige Liste aller DB-Server<br />
kennen. Diese Liste lässt sich mit bos listhosts von jedem der DB-Server<br />
einzeln auslesen. Beispiel: bos listhosts afsdb1<br />
Mit udebug lassen sich Informationen über den einzelnen Datenbank<strong>server</strong>-<br />
Prozess, über die Sync-Site sowie über den Zustand des entsprechenden<br />
Datenbankteils abfragen. Dabei ist zu beachten, dass die einzelnen AFS-<br />
Datenbankteile unabhängig voneinander von verschiedenen Prozessen auf<br />
den Datenbank<strong>server</strong>n verwaltet werden. Die jeweiligen Portnummern sind in<br />
Tabelle 3.6, Seite 45 aufgeführt.<br />
Je nachdem, ob der Server gerade Sync-Site (siehe Listing 6.2) ist oder nicht<br />
(siehe Listing 6.1), zeigt udebug unterschiedliche Daten an.
6.10 Einholen von Informationen... 125<br />
Host ’ s a d d r e s s e s a r e : 1 0 . 0 . 5 8 . 6<br />
Host ’ s 1 0 . 0 . 5 8 . 6 time i s Tue May 18 1 3 : 4 9 : 2 7 2004<br />
Local time i s Tue May 18 1 3 : 4 9 : 2 7 2004 ( time d i f f e r e n t i a l 0 s e c s )<br />
L a s t yes v o t e f o r 1 0 . 0 . 5 8 . 2 was 8 s e c s ago ( sync s i t e ) ;<br />
L a s t v o t e s t a r t e d 7 s e c s ago ( a t Tue May 18 1 3 : 4 9 : 2 0 2004)<br />
Local db v e r s i o n i s 1079368316.2<br />
I am n o t sync s i t e<br />
Lowest h o s t 1 0 . 0 . 5 8 . 2 was s e t 8 s e c s ago<br />
Sync h o s t 1 0 . 0 . 5 8 . 2 was s e t 8 s e c s ago<br />
Sync s i t e ’ s db v e r s i o n i s 1079368316.2<br />
0 l o c k e d pages , 0 of them f o r w r i t e<br />
Listing 6.1: Beispieloutput von udebug, angewandt auf einen Rechner, der<br />
nicht Sync-Site ist<br />
Host ’ s a d d r e s s e s a r e : 1 0 . 0 . 5 8 . 2<br />
Host ’ s 1 0 . 0 . 5 8 . 2 time i s Tue May 18 1 3 : 3 7 : 2 9 2004<br />
Local time i s Tue May 18 1 3 : 3 7 : 3 1 2004 ( time d i f f e r e n t i a l 2 s e c s )<br />
L a s t yes v o t e f o r 1 0 . 0 . 5 8 . 2 was 8 s e c s ago ( sync s i t e ) ;<br />
L a s t v o t e s t a r t e d 9 s e c s ago ( a t Tue May 18 1 3 : 3 7 : 2 2 2004)<br />
Local db v e r s i o n i s 1079368316.2<br />
I am sync s i t e u n t i l 50 s e c s from now ( a t Tue May 18 1 3 : 3 8 : 2 1 2004) (2<br />
s e r v e r s )<br />
Recovery s t a t e 1 f<br />
Sync s i t e ’ s db v e r s i o n i s 1079368316.2<br />
0 l o c k e d pages , 0 of them f o r w r i t e<br />
Listing 6.2: Beispieloutput von udebug angewandt auf eine Sync-Site<br />
S e r v e r ( 1 0 . 0 . 5 8 . 6 ) : ( db 1079368316.2)<br />
l a s t v o t e r cvd 9 s e c s ago ( a t Tue May 18 1 3 : 3 7 : 2 2 2 0 0 4 ) ,<br />
l a s t beacon s e n t 8 s e c s ago ( a t Tue May 18 1 3 : 3 7 : 2 3 2 0 0 4 ) , l a s t v o t e was yes<br />
d b c u r r e n t =1 , up=1 b e a c o n S i n c e =1<br />
Folgende Informationen sind im udebug-Output enthalten:<br />
1. alle IP-Adressen des DB-Servers, der befragt wurde:<br />
Host’s address are: ...<br />
2. die aktuelle Zeit auf dem Server sowie die Differenz zur lokalen Zeit (auf<br />
dem Rechner, auf dem udebug aufgerufen wurde)<br />
3. die “Versionsnummer” (Zeitpunkt der letzten Änderung) der Datenbank,<br />
wobei der Zeitpunkt Unix-typisch in Sekunden seit 1.Januar 1970<br />
00:00:00 angegeben ist<br />
4. welcher DB-Server gerade Sync-Site ist bzw.<br />
5. welche anderen Server von der Sync-Site gefunden 5 wurden. Diese Information<br />
wird nur auf der Sync-Site angezeigt. Man muss also u.U. mit<br />
udebug die Sync-Site ermitteln, um dann udebug noch einmal auf die<br />
Sync-Site anzuwenden.<br />
6. die “Versionsnummer” der Datenbank auf der Sync-Site<br />
7. Einige Flags zum Zustand des entsprechenden Datenbank-Teils. Die<br />
Flags sind in den Bits einer Hexadezimalzahl hinter Recovery State<br />
codiert. Hier die Bedeutung der Bits, wenn sie gesetzt sind:<br />
bit 0 : Der Server ist Sync-Site (ist das Bit nicht gesetzt, wird Recovery<br />
State nicht angezeigt.<br />
bit 1 : Die Datenbankversionen der anderen DB-Server sind in Ordnung.<br />
bit 2 : Die Sync-Site ist bereits im Besitz der aktuellsten Datenbankversion.<br />
bit 3 : unbekannt (Zitat aus [UDEBUG]: (8) shows that it has changed the<br />
version number of its database.<br />
5 i.d.R. sollten das alle anderen DB-Server sein. Nur bei Netzunterbrechungen oder Ausfällen von<br />
DB-Servern werden nicht alle anderen gefunden.
126 6 Tägliche Arbeit mit AFS<br />
6.10.1.2 File<strong>server</strong><br />
admin@afs>vos listaddrs<br />
afsserv1.cbs.mpg.de<br />
afsserv2.cbs.mpg.de<br />
bit 4 : Seit der Rechner Sync-Site ist, hat er seine Datenbank bereits mindestens<br />
einmal an alle andere DB-Server verschickt.<br />
Die VLDB enthält die Liste aller Volume-Instanzen der Zelle, jeweils mit<br />
Angaben darüber, auf welchem Server und auf welcher Partition sie liegen.<br />
Das sind üblicherweise alle File<strong>server</strong> der Zelle, auf jeden Fall jedoch alle<br />
File<strong>server</strong>, auf die AFS-Clients zugreifen können 6 . Die Liste der bekannten<br />
Server sieht z.B. wie folgt aus:<br />
Fehlen File<strong>server</strong> in der Liste, was eigentlich nicht sein sollte, kann man das<br />
mit einem Befehl folgender Form korrigieren:<br />
admin@afs>vos syncvldb Servername<br />
Es gibt 2 Methoden, um eine Liste der AFS-Wirtspartitionen eines Servers zu<br />
erhalten:<br />
user@host>vos listpart afsserv1<br />
The partitions on the <strong>server</strong> are:<br />
/vicepa<br />
/vicepb<br />
Total: 1<br />
user@host>vos partinfo afsserv1<br />
Free space on partition /vicepa: 8773636 K blocks out of total 26245408<br />
Free space on partition /vicepb: 16773636 K blocks out of total 41214116<br />
vos partinfo zeigt zu den gefundenen Partitionen auch den verbrauchten<br />
sowie den freien Speicher auf den Partitionen an. Das macht es sehr einfach,<br />
ein Script zu schreiben, was alle Partitionen aller File<strong>server</strong> auf drohende<br />
Überfüllung prüft.<br />
Hinweis: Das Paket openafs-nagios-plugins .deb enthält ein Nagios-Skript,<br />
das da<strong>für</strong> verwendet werden kann.<br />
Mit vos listvol lässt sich anzeigen, welche Volumes wirklich auf einem<br />
File<strong>server</strong> liegen. Benutzt man die Option -fast, wird die VLDB dabei nicht<br />
konsultiert. Mehr zu diesem Kommando gibt’s unter 6.10.2, Seite 127.<br />
Bestimmte Signale veranlassen den File<strong>server</strong>, Debug-Informationen auszugeben.<br />
Das entsprechende Signal ist jeweils mit kill an den file<strong>server</strong>-<br />
Prozess zu schicken, der direkt vom bos<strong>server</strong> gestartet wurde. Das geht<br />
z.B. so (man beachte die Backticks):<br />
root@host>kill -Signalname ‘pgrep -P \‘pidof bos<strong>server</strong>\‘ file<strong>server</strong>‘<br />
Folgende Signale können benutzt werden:<br />
XCPU : Dieses Signal veranlasst den File<strong>server</strong>, im Verzeichnis /var/lib/openafs<br />
folgende Dateien anzulegen:<br />
6 AFS-Clients können nur Server benutzen, die in der VLDB vermerkt sind.
6.10 Einholen von Informationen... 127<br />
6.10.2 ... über Volumes<br />
6.10.2.1 ... per VLDB<br />
• hosts.dump - Informationen über AFS-Clients, die dem File<strong>server</strong><br />
bekannt sind<br />
• clients.dump - Informationen über die Benutzer auf den ihm bekannten<br />
AFS-Clients<br />
• callback.dump - Diese Datei enthält Informationen über die Callbacks,<br />
die der Server garantiert hat. Die Datei ist binär - das Programm<br />
cbd (siehe 9.3, Seite 206) ist in der Lage, sie zu interpretieren.<br />
TSTP : Dieses Signal erhöht den Debuglevel des File<strong>server</strong>s. Debuginformationen<br />
werden nach /var/log/openafs/FileLog geschrieben. Mehrmals angewandt,<br />
erhöht sich die geloggte Informationsmenge. Der Debug-Output<br />
ist sehr umfangreich und umfasst bereits bei Debuglevel 1 die Namen der<br />
Dateien, auf die AFS-Clients zugreifen.<br />
user@host>vos examine users<br />
HUP : Mit HUP setzt man den Debuglevel wieder auf 0 (= keine Debug-<br />
Informationen schreiben).<br />
Mit vos examine können Informationen über alle Instanzen eines Volumes<br />
gebündelt angezeigt werden. Dabei werden verschiedene Informationen aus der<br />
VLDB ausgelesen:<br />
1. Name und ID aller bekannten Instanzen des Volumes<br />
2. Namen der Server sowie die Partitionen, auf denen die Instanzen liegen<br />
3. Ob das Volumes gesperrt (LOCKED) ist oder nicht (siehe 6.13.1, Seite<br />
137).<br />
Listing 6.3 zeigt einen Beispieloutput dieses Kommandos, angewandt auf das<br />
Root-Volume des AFS-Namensraumes einer Zelle.<br />
Listing 6.3: Beispieloutput des von vos examine<br />
r o o t . a f s 536870912 RW 11 K On−l i n e<br />
a f s s e r v 1 . cbs . mpg . de / v i c e p a<br />
RWrite 536870912 ROnly 536870913 Backup 0<br />
MaxQuota 5000 K<br />
C r e a t i o n Tue Nov 19 1 7 : 1 0 : 5 4 2002<br />
L a s t Update Thu Mar 4 1 3 : 1 1 : 1 1 2004<br />
15 a c c e s s e s i n t h e p a s t day ( i . e . , vnode r e f e r e n c e s )<br />
RWrite : 536870912 ROnly : 536870913<br />
number of s i t e s −> 3<br />
s e r v e r a f s s e r v 1 . cbs . mpg . de p a r t i t i o n / v i c e p a RW S i t e<br />
s e r v e r a f s s e r v 1 . cbs . mpg . de p a r t i t i o n / v i c e p a RO S i t e<br />
s e r v e r a f s s e r v 2 . cbs . mpg . de p a r t i t i o n / v i c e p a RO S i t e<br />
Zusätzlich wird der File<strong>server</strong>, der die RW-Instanz speichert, kontaktiert, um<br />
dort u.a. folgende Informationen zu beschaffen:<br />
• Zeitpunkt des letzten Schreibzugriffes sowie der Erstellung des Volumes<br />
7 .<br />
Hinweis: Der Timestamp des letzten Schreibzugriffes wird nicht sofort<br />
nach einem Schreibzugriff aktualisiert. Garantiert ist lediglich, dass<br />
er aller 25 Minuten sowie zu Begin einer Volumebezogenen Aktion<br />
(Verschieben, Releasen, ...) korrekt ist.<br />
7 was i.d.R. dem Zeitpunkt der Erstellung der RW-Instanz entspricht
128 6 Tägliche Arbeit mit AFS<br />
• Statistische Informationen über Zugriffe auf die RW-Instanz. Diese Informationen<br />
können von Programmen ausgewertet werden, um durch das<br />
Verschieben von RW-Instanzen zwischen verschiedenen File<strong>server</strong>n eine<br />
Lastverteilung über diese zu erreichen.<br />
• Der maximale Speicherbedarf einer einzelnen Instanz des Volumes (die<br />
Quota des Volumes).<br />
Ist der File<strong>server</strong> der RW-Instanz nicht verfügbar, entsprechen die von vos<br />
examine gelieferten Informationen denen von<br />
user@host>vos listvldb Name oder ID der RW-Instanz<br />
6.10.2.2 ... direkt per File<strong>server</strong><br />
Der Befehl vos listvldb zeigt sämtliche Instanzen aller Volumes einer<br />
Zelle an. Das lässt sich durch Kommandozeilenparameter einschränken:<br />
• Mittels -<strong>server</strong> Servername werden nur Volumes angezeigt, von<br />
denen mindestens eine Instanz auf dem angegebenen Server liegt.<br />
• Die Option -partition Partition beschränkt in Kombination mit<br />
-<strong>server</strong> Servername die Ausgabe auf die Volumes, von denen Instanzen<br />
auf der Partition Partition des Servers Server liegen.<br />
• Die Option -locked bewirkt, dass nur gesperrte Volumes (siehe 6.13.1,<br />
Seite 137) angezeigt werden.<br />
Es lassen sich Volume-Instanzen anzeigen, die sich auf einem bestimmten File<strong>server</strong><br />
befinden (Beispieloutput siehe Listing 6.4):<br />
user@host>vos listvol Servername<br />
Im Gegensatz zu vos listvldb werden die auf dem File<strong>server</strong> enthaltenen<br />
Instanzen nicht über die VLDB sondern direkt über den Server ermittelt. Angezeigt<br />
werden dabei folgende Informationen zu den einzelnen Volumes:<br />
1. Die ID der Volume-Instanz<br />
2. Der Name 8 der Instanz<br />
3. Der Typ der Instanz (siehe 3.1, Seite 27)<br />
4. Die Größe der Instanz. Diese entspricht bei RO-Instanzen, die auf der selben<br />
Partition wie RW-Instanzen liegen sowie bei Backup-Instanzen nicht 9<br />
dem auf der entsprechenden Partition belegten Speicher, sondern vielmehr<br />
folgenden Speichermengen:<br />
• der Größe des Teilbaumes im AFS-Namespace, den die entsprechende<br />
Instanz repräsentiert.<br />
• der Größe eines Volume-Dumps von dieser Instanz<br />
5. Ob die Instanz online oder offline ist. Alle Instanzen sollten immer online<br />
sein. Ist eine Instanz nicht online, finden sich unter 8.5.4, Seite 181<br />
Hinweise zur Behebung.<br />
Zusätzlich werden Instanzen (nur durch ihre ID) angezeigt, die gerade in Benutzung,<br />
also “busy” (siehe 6.13.2, Seite 137) sind. Folgende Optionen werden<br />
von vos listvol akzeptiert:<br />
8 Der Name wird über die VLDB abgefragt und ist auch nur dort gespeichert. Ist die VLDB nicht<br />
verfügbar, so wird kein Name angezeigt.<br />
9 Das liegt an der differenziellen Speicherung bei diesen Volumes (siehe 3.1.4, Seite 29).
6.10 Einholen von Informationen... 129<br />
• Die Option -partition Partition beschränkt die Ausgabe auf Instanzen,<br />
die auf der Partition Partition des File<strong>server</strong>s liegen.<br />
• Bei angabe der Option -extended werden erweiterte Informationen zu<br />
den gefundenen Instanzen angezeigt (u.a. Zugriffsstatistiken).<br />
Listing 6.4: Beispiel-Output des vos listvol-Kommandos:Auf dem Rechner<br />
afsserv1 befinden sich die RW-Instanzen der Root-Volumes der Zelle, zusammen<br />
mit platzsparenden RO-Instanzen (siehe 3.1.4, Seite 29)<br />
T o t a l number of volumes on s e r v e r a f s s e r v 1 . cbs . mpg . de p a r t i t i o n / v i c e p a : 4<br />
r o o t . a f s 536870912 RW 11 K On−l i n e<br />
r o o t . a f s . r e a d o n l y 536870913 RO 11 K On−l i n e<br />
r o o t . c e l l 536870915 RW 9 K On−l i n e<br />
r o o t . c e l l . r e a d o n l y 536870916 RO 9 K On−l i n e<br />
T o t a l volumes onLine 4 ; T o t a l volumes o f f L i n e 0 ; T o t a l busy 0<br />
6.10.2.3 Die verschiedenen Timestamps von Volume-Instanzen<br />
Das instantafs .deb -Skript volgrep kann Volumes auflisten, die bestimmten<br />
Kriterien entsprechen (siehe 9.2.26, Seite 204). Das ist z.B. nützlich, wenn man<br />
diese Liste in Skripten einfach weiterverarbeiten will. Das Ausgabeformat der<br />
klassischen AFS-Tools ist da<strong>für</strong> eher ungeeignet.<br />
Im folgenden ist die Bedeutung der Timestamps erläutert, die einer jeden Instanz<br />
eines Volumes zugeordnet sind:<br />
Last Update : Zeitpunkt der letzten Änderung auf Dateisystemebene an der Instanz.<br />
Wenn es sich um eine RO- oder Backup-Instanz handelt, ist dieser Timestamp<br />
identisch mit dem der RW-Instanz zum Zeitpunkt des Abgleichs.<br />
Creation : Je nach Instanztyp unterschiedlich:<br />
RW : Der Zeitpunkt, zu dem die Instanz angelegt wurde.<br />
RO, Backup : Der Zeitpunkt der letzten Synchronisation (vos release bzw.<br />
vos backup)<br />
:<br />
Backup : Zeitpunkt der letzten Synchronisation der zugehörigen RW-Instanz mit<br />
der Backup-Instanz des Volumes. Daraus folgt, dass dieser Timestamp an<br />
einer Backup-Instanz immer gleich dem Creation-Timestamp ist.<br />
Copy : Je nach Instanztyp unterschiedlich:<br />
RW, RO auf nicht-RW-Partition : Bei nicht-differenziell gespeicherten Instanzen (siehe 3.1.4, Seite<br />
29), ist dieses Feld der Zeitpunkt, zu dem die Instanz angelegt wurde.<br />
Achtung: Eine RO-instanz wird nicht durch vos addsite angelegt,<br />
sondern durch das erste vos release danach.<br />
RO auf RW-Partition, Backup : Bei diesem Instanzen ist der Copy-Timestamp gleich dem Creation-<br />
Timestamp und damit der Zeitpunkt der letzten Synchronisation mit<br />
der RW-Instanz.<br />
6.10.2.4 Größe einer Volume-Instanz<br />
Es gibt verschiedene Merkmale einer jeden Volume-Instanz, die mit ihrer Speichergröße<br />
zu tun haben.<br />
Zum einen sind da die aktuelle Quota und die Summe des Speicherbedarfs der<br />
Dateien, die man sieht, wenn man sich die gemountete Volume-Instanz im VFS<br />
eines AFS-Clients ansieht.
130 6 Tägliche Arbeit mit AFS<br />
Eine weitere Größe wäre oft noch interessant: Der Speicherplatz, den eine<br />
Clone innterhalb einer Volume-Group zusätzlich zur RW-Instanz kostet. Leider<br />
läßt sich dieser prinzipiell nicht berechnen, wenn mehr als ein Clone innerhalb<br />
der Volume-Group liegen und auch wenn es nur einer ist, gibt es keine<br />
AFS-Funktion da<strong>für</strong>.<br />
Eine weitere Größe, die oft interessant ist, ist die erwartete Größe eines inkrementellen<br />
Volume-Dumps. Das vos size-Kommando kann so etwas:<br />
admin@afs>vos size Volumename oder ID -<strong>server</strong> Server -partition Partition -dump<br />
-time MM/TT/JJJJ<br />
6.10.3 ... über den Client<br />
Dabei werden die Größen von allen Dateien aufsummiert, die sich seit dem<br />
angegebenen Zeitpunkt verändert haben.<br />
Der AFS-Client verrät seine genaue Versionsnummer per RX-RPC:<br />
Hier ein Beispiel:<br />
user@host>rxdebug -version Rechnername afs3-callback<br />
Trying xxx.xxx.xxx.xxx (port 7001):<br />
AFS version: OpenAFS 1.4.2 built 2006-12-15<br />
6.10.4 ... über Verzeichnisse/Dateien<br />
6.10.5 ... über die Zelle<br />
6.10.5.1 Ermitteln der Volume-Mountpoints der Zelle<br />
# ! / b i n / bash<br />
Das funktioniert netzwerkweit - eine Liste inaktueller AFS-Clients zu erstellenm,<br />
ist also ein Kinderspiel.<br />
In diesem Abschnitt soll beleuchtet werden, was man alles über ein Verzeichnis<br />
herrausfinden kann, das im AFS liegt. Dabei wird auf das Homedirectory des<br />
gedachten Nutzers ernie zurückgegriffen. Benutzt man die aufgeführten Kommandos<br />
<strong>für</strong> Dateien, so werden jeweils Informationen zum Verzeichnis eingeholt,<br />
in dem sie liegen.<br />
AFS führt nicht zentral Buch über die Mountpoints, die in Volumes liegen. Deshalb<br />
ist es auf nicht ohne weiteres Möglich, Mountpoints auf nicht mehr existierende<br />
Volumes zu entfernen.<br />
Der salvager-Prozess auf File<strong>server</strong>n hat eine kleine Sonderfunktion: Er kann<br />
nach Mountpoints suchen - sogar ohne die durchsuchten Volumes herunterzufahren.<br />
Allerdings geht das nicht über das bos-Kommando, sondern muss lokal<br />
ausgelöst werden, was aber natürlich auch per SSH geschehen kann.<br />
Nachteilig ist, dass das auf jedem File<strong>server</strong> geschehen muss. Hier ist ein Beispielskript:<br />
Listing 6.5: Einfaches Shellskript, dass alle Mountpoints der aktuellen AFS-<br />
Zelle anzeigt<br />
# Read l i s t o f s e r v e r s − use t h e f i r s t NIC o n l y<br />
SERVERS=‘vos listaddrs -printuuid | grep -A 1 UUID | egrep -v ’^(UUID|--)’‘<br />
f o r s e r v e r in $SERVERS ; do<br />
s s h r o o t @ $ s e r v e r ’/usr/lib/openafs/salvager -showlog -showmounts’
6.10 Einholen von Informationen... 131<br />
done<br />
6.10.5.2 Speicher, Volumename<br />
Positives:<br />
• Es findet wirklich alle Mountpoints der aktuellen Zelle<br />
• Es geht im laufenden Betrieb - der Salvager führt keine Änderungen<br />
durch.<br />
Einschränkungen:<br />
• Das Skript läuft - vor allen, wenn die Zelle viele Dateien enthält - sehr<br />
lange.<br />
• Es werden nur Volumes der aktuellen Zelle erfasst.<br />
• Es sind root-Rechte auf allen File<strong>server</strong>n nötig. Achtung: Das ist nicht<br />
gleichbedeutend mit Administratorrechten im AFS.<br />
Das ist das Format, dass ausgegeben wird:<br />
02/06/2007 14:06:44 In volume 536875765 (volume1) found mountpoin<br />
Es gibt verschiedene Informationen, die man über das Volume eines Verzeichnisses<br />
herrausfinden kann. Meist gibt es mehrere Befehle da<strong>für</strong>. Z.B. lassen<br />
sich der Name des Volumes und Informationen zum Speicherbedarf auf verschiedenen<br />
Wegen herrausfinden:<br />
user@host>fs diskfree /afs/cbs.mpg.de/user/ernie<br />
Volume Name kbytes used avail %used<br />
user.ernie 722610020 50206735 672403285 7%<br />
user@host>fs examine /afs/cbs.mpg.de/user/ernie<br />
Volume status for vid = 536870927 named user.ernie<br />
Current disk quota is 100000<br />
Current blocks used are 45346<br />
The partition has 672403285 blocks available out of 722610020<br />
user@host>fs listquota /afs/cbs.mpg.de/user/ernie<br />
Volume Name Quota Used %Used Partition user.ernie 100000 45346 45% 7%<br />
6.10.5.3 Auf welchem File<strong>server</strong>?<br />
4 Werte zum Speicher existieren zu einem Volume - alle beziehen sich auf<br />
1024Byte-Blöcke:<br />
• Die Größe der Partition, auf der das Volume liegt (hier 722610020).<br />
• Der auf der Partition, auf der das Volume liegt, noch freie Speicher (hier<br />
672403285).<br />
• Der Speicher, den das Volume selbst belegt (hier 45346).<br />
• Der maximal zulässige Speicherbedarf des Volumes - die Quota (hier<br />
100000).<br />
Mit folgendem Kommando läßt sich herrausfinden, auf welchem File<strong>server</strong> ein<br />
bestimmtes Verzeichnis liegt:<br />
user@host>fs whereis /afs/cbs.mpg.de/user/ernie<br />
File /afs/cbs.mpg.de/user/ernie lives on host afs<strong>server</strong>1.cbs.mpg.de
132 6 Tägliche Arbeit mit AFS<br />
Wendet man dieses Kommando auf einen Pfad in einer RO-Instanz an, dann<br />
kann das Verzeichniss auch redundant auf mehreren Rechnern liegen:<br />
user@host>fs whereis /afs<br />
File /afs lives on hosts afs<strong>server</strong>1.cbs.mpg.de afs<strong>server</strong>2.cbs.mpg.de<br />
6.10.5.4 In welcher Zelle?<br />
Hinweis: Wird eine RW-Instanz gerade verschoben, so wird der ursprüngliche<br />
File<strong>server</strong> angezeigt - nicht etwa beide gleichzeitig.<br />
Folgendes Kommando kann benutzt werden, um herrauszufinden, in welcher<br />
Zelle ein bestimmtes AFS-Verzeichnis liegt:<br />
user@host>fs whichcell /afs/cbs.mpg.de/user/ernie<br />
File /afs/cbs.mpg.de/user/ernie lives in cell ’cbs.mpg.de’<br />
6.10.5.5 Welche Rechte gelten?<br />
Die beiden Access Control Lists von Verzeichnissen — also die Rechte —<br />
lassen sich mit folgendem Kommando anzeigen:<br />
user@host>fs listacl /afs/cbs.mpg.de/user/ernie<br />
Access list for /afs/cbs.mpg.de/user/ernie is<br />
Normal rights:<br />
system:administrators rlidwka<br />
system:anyuser l<br />
ernie rlidwka<br />
6.11 Load-Balancing<br />
6.11.1 RO-Daten<br />
Unter AFS sind je nach Art der Daten, um die es sich jeweils handelt, zwei Prinzipien<br />
der Lastverteilung möglich. Die Lastverteilung erfolgt nicht automatisch<br />
durch die AFS-Server, lässt sich jedoch auf sehr einfache Weise von Hand bzw.<br />
mit dem bereitgestellten Tool balancer realisieren.<br />
Eine Lastverteilung <strong>für</strong> Daten, auf die hauptsächlich lesend zugegriffen wird, ist<br />
unter AFS sehr einfach zu realisieren. Die Last wird auf Volume-Ebene verteilt.<br />
Das soll am Beispiel eines netzwerkweiten Verzeichnisses <strong>für</strong> Bash-Skripte gezeigt<br />
werden:<br />
1. Das Volume local.scripts wird zusammen mit seiner RW-Instanz auf<br />
afsserv1 angelegt:<br />
admin@afs>vos create afsserv1 a local.scripts<br />
2. Es wird mit zwei Mountpoints (Erklärung siehe 7.1, Seite 140) in den<br />
AFS-Namensraum eingebunden:<br />
admin@afs>fs mkm /afs/.cbs.mpg.de/local/scripts local.scripts<br />
admin@afs>fs mkm /afs/.cbs.mpg.de/local/.scripts local.scripts -rw<br />
admin@afs>instantafs.release /afs/.cbs.mpg.de/local
6.11 Load-Balancing 133<br />
6.11.2 RW-Daten<br />
6.11.2.1 Vorarbeit<br />
3. Jetzt wird auf beiden AFS-File<strong>server</strong>n jeweils eine RO-Instanz angelegt:<br />
admin@afs>vos addsite afsserv1 a local.scripts<br />
admin@afs>vos addsite afsserv2 a local.scripts<br />
admin@afs>vos release local.scripts<br />
Benutzer, die nun auf /afs/cbs.mpg.de/local/scripts zugreifen, benutzen<br />
nun je nach den lokalen Serverranks (siehe 6.12, Seite 136) unterschiedliche<br />
File<strong>server</strong>.<br />
Das Prinzip ist an einem Beispiel (siehe 7.10, Seite 158) verdeutlicht.<br />
Die Lastverteilung von RW-Daten beruht auf der Möglichkeit, die RW-<br />
Instanzen von Volumes leicht zwischen Servern verschieben zu können.<br />
Verteilt man die RW-Volumes der Zelle geschickt auf die File<strong>server</strong>, wird die<br />
Last sehr gut verteilt. Da File<strong>server</strong> Statistiken über die Zugriffshäufigkeit<br />
auf einzelne Instanzen führen, kann die Verteilung der Volumes sehr genau<br />
optimiert werden.<br />
Das Prinzip ist wie folgt:<br />
1. Per Hand werden Volumes so gestaltet (z.B. durch Zerlegung von sehr<br />
großen Volumes), dass sie sich leicht verschieben lassen.<br />
2. Das Programm balancer wird anschließend benutzt, um (ausschließlich)<br />
RW-Instanzen je nach Auslastung auf die verfügbaren File<strong>server</strong> zu<br />
verteilen.<br />
Wichtig <strong>für</strong> die Lastverteilung von RW-Zugriffen ist, dass die Daten der Zelle<br />
geschickt auf Volumes verteilt sind. Dabei ist es u.U. nötig, einzelne Volumes<br />
in mehrere zu zerteilen. Hier ein Beispiel:<br />
1. Das Homedirectoryvolume user.ernie des Benutzers ernie ist sehr<br />
groß (mehrere GB), die Hälfte besteht nur aus eMails im Verzeichnis<br />
/afs/cbs.mpg.de/user/ernie/Mail.<br />
2. Die eMails lagert man in ein separates Volume mail.ernie aus. Angelegt<br />
wird dieses z.B. mit<br />
admin@afs>vos create afsserv1 a mail.ernie<br />
3. Die Teilung eines Volumes lässt sich nicht ohne Race-Conditions im laufenden<br />
Betrieb durchführen, sollte also vorzugsweise zu einer Zeit geschehen,<br />
wenn der Benutzer ernie gerade nicht anwesend ist.<br />
4. Das alte Mail-Verzeichnis wird umbenannt<br />
admin@afs>mv ∼ernie/Mail ∼ernie/Mail.preafs<br />
und das neue Volume an seine Stelle gemountet<br />
admin@afs>fs mkm ∼ernie/Mail mail.ernie<br />
5. Jetzt muss man sich Gedanken darüber machen, wie die vorher einheitliche<br />
Quota des Homedirectories von ernie auf die beiden Volumes verteilt<br />
wird.
134 6 Tägliche Arbeit mit AFS<br />
Hinweis: Es ist nicht möglich, eine Maximalquota <strong>für</strong> die Summe des<br />
Speicherbedarfs zweier Volumes zu definieren. Das Volume user.ernie<br />
hatte vorher eine Quota von 4000MB:<br />
user@host>fs lq ∼ernie<br />
Volume Name Quota Used %Used Partition<br />
user.ernie 4000000 3566236 89% 75%<br />
admin@afs>fs sq ∼ernie/Mail 2000000<br />
Die Hälfte von ernie’s belegtem Speicherplatz besteht aus eMails - dem<br />
neuen Volume werden deshalb 2000MB als Quota zugewiesen:<br />
6. Das Volume mail.ernie wird mit vos move auf einen anderen Server<br />
verschoben, was den Server, auf dem user.ernie liegt, entlastet.<br />
7. Die eMails von ernie werden in das neue Volume kopiert:<br />
admin@afs>shopt -s dotglob<br />
admin@afs>cp -a ∼ernie/Mail.preafs/* ∼ernie/Mail<br />
admin@afs>shopt -u dotglob<br />
Die alten Mails werden gelöscht:<br />
admin@afs>rm -rf ∼ernie/Mail.preafs<br />
admin@afs>fs sq ∼/ernie 2000000<br />
user@host>fs lsm ∼ernie/Mail<br />
8. Die Quota des Homedirectory-Volumes von ernie wird nach unten korrigiert:<br />
9. ernie und sein Mailtool werden mit 2 Ausnahmen keinen Unterschied zur<br />
Situation vorher bemerken:<br />
• Das Kommando<br />
user@host>mv ∼ernie/Mail/Grosse_Datei.dat ∼<br />
user@host>cp ∼ernie/Mail/Grosse_Datei.dat ∼<br />
user@host>rm ∼ernie/Mail/Grosse_Datei.dat ∼<br />
enttarnt das Verzeichnis /afs/cbs.mpg.de/user/ernie/Mail als Volume-<br />
Mountpoint.<br />
• Das Verschieben eines Files innerhalb des Homedirectories zwischen<br />
den Volumes user.ernie und mail.ernie - z.B. mit<br />
dauert nach der Zerteilung des Volumes genauso lange wie<br />
Vor der Zerteilung wäre nur der Link auf das File in ein anderes Verzeichnis<br />
des selben Volumes verschoben worden - jetzt wird kopiert<br />
und danach gelöschte.<br />
Der Vorteil von kleinen Volumes ist, dass sie sich leichter im Netzwerk verschieben<br />
lassen. Es ist prinzipiell möglich, auch sehr große Volumes zu benutzen<br />
(100GB sind kein Problem), jedoch sind diese sehr unflexibel.<br />
Man sollte auch bedenken, dass Volumes zum Wachstum neigen
6.11 Load-Balancing 135<br />
6.11.2.2 Volumes automatisch verschieben<br />
# Der Name d e r Z e l l e . . .<br />
c e l l cbs . mpg . de ;<br />
6.11.2.2.1 ... mit balancer Das Programm balancer ist in der Lage,<br />
die Zugriffsstatistiken der File<strong>server</strong> auszulesen und daraus eine bessere Verteilung<br />
der RW-Instanzen zu errechnen. Ergebnis ist eine Folge von vos<br />
move-Kommandos, die die vom balancer errechnete bessere Verteilung der<br />
RW-Instanzen herbeiführt.<br />
Der balancer benötigt eine Konfigurationsdatei, die einige Eigenschaften der<br />
Zelle beschreibt (Beispiel siehe Listing 6.6.<br />
Listing 6.6: Beispielkonfigurationsdatei <strong>für</strong> balancer<br />
# Eingangs− und A u s g a n g s r e g e l n f u e r d i e F i l e s e r v e r p a r t i t i o n e n d e r<br />
# Z e l l e . P a r t i t i o n e n , d i e h i e r n i c h t a u f t a u c h e n werden vom b a l a n c e r n i c h t<br />
# b e a c h t e t .<br />
# Eine E i n g a n g s r e g e l i s t durch e i n ’ < ’ g e k e n n z e i c h e t . A l l e Volumes , d i e<br />
# ( Globber−Ausdruecke s i n d e r l a u b t ) d a h i n t e r a u f t a u c h e n , d u e r f e n a u f d i e s e<br />
# P a r t i t i o n f l i e s s e n .<br />
# A e h n l i c h e s g i l t f u e r d i e A u s g a n g s r e g e l ( durch ’ > ’ g e k e n n z e i c h e n t ) . Nur<br />
# d i e Volumes d a h i n t e r d u e r f e n den S e r v e r v e r l a s s e n .<br />
#<br />
# Bei b e i d e n R e g e l t y p e n koennen den e r l a u b t e n Volumes auch s o l c h e f o l g e n ,<br />
# d i e t r o t z v o r h e r i g e r Nennung a u s z u s c h l i e s s e n s i n d . Die a u s z u s c h l i e s s e n d e n<br />
# werden von den a n d e r e n durch ’ − ’ g e t r e n n t .<br />
# Das Volume u s e r . e r n i e wird i n d i e s e r K o n f i g u r a t i o n a u f den S e r v e r a f s s e r v 1<br />
# g e d r a e n g t − i s t es einmal a u f a f s s e r v 1 , wird es vom b a l a n c e r n i c h t mehr<br />
# v e r s c h o b e n .<br />
f s a f s s e r v 1 . cbs . mpg . de a<br />
< u s e r .∗<br />
> u s e r .∗ − u s e r . e r n i e ;<br />
f s a f s s e r v 2 . cbs . mpg . de a ;<br />
< u s e r .∗<br />
> u s e r . ∗ ;<br />
# P a r a m e t e r f u e r d i e e i n z e l n e n Module ( a g e n t s ) des b a l a n c e r s<br />
# Der "−p"−P a r a m e t e r g i b t d i e T o l e r a n z des B a l a n c e r s an . Das<br />
# i s t n o e t i g , um RW−I n s t a n z e n n i c h t dauernd h i n und herwandern<br />
# zu l a s s e n .<br />
# ’ b y s i z e ’ b e w i r k t , d a s s d e r b a l a n c e r den S p e i c h e r b e d a r f d e r<br />
# RW−I n s t a n z e n i n s e i n e Berechnung e i n b e z i e h t .<br />
a g e n t b y s i z e −p 3 0 ;<br />
# ’ byweekuse ’ b e a c h t e t d i e Z u g r i f f e d e r l e t z t e n Wochen b e i d e r<br />
# A u s b a l a n c i e r u n g d e r RW−I n s t a n z e n .<br />
a g e n t byweekuse −p 3 0 ;<br />
# ’ bynumber ’ b e w i r k t , d a s s d e r b a l a n c e r auch d i e Anzahl d e r<br />
# RW−I n s t a n z e n pro S e r v e r a l s O p t i m i e r u n g s k r i t e r i u m b e n u t z t .<br />
a g e n t bynumber −p 3 0 ;<br />
# Der B a l a n c e r h a t 15 Stunden Z e i t um f o l g e n d e s zu t u n :<br />
# ∗ Z u g r i f f s s t a t i s t i k e n einsammeln<br />
# ∗ B e s s e r e V o l u m e v e r t e i l u n g e r r e c h n e n<br />
# ∗ Volumes v e r s c h i e b e n<br />
r u n t i m e = 15h ;<br />
Für jeden File<strong>server</strong> muss in dem File ein Block existieren, der mit fs<br />
[Servername] beginnt und mit “;” endet. Mit den Zeichen “”<br />
werden dann jeweils Blöcke von Volumes angegeben, deren RW-Volumes verschoben<br />
werden sollen. Dabei sind Globber-Ausdrücke erlaubt. Ein innerhalb<br />
dieser Blöcke angegebenes “-” bewirkt, dass die im Block nach dem “-”<br />
angegebenen Volumes ausgeschlossen werden.<br />
Nach jedem Verschieben eines Volumes legt der balancer eine Backup-<br />
Instanz des Verschobenen Volumes an (wenn es auf dem Quell<strong>server</strong> bereits<br />
eine gab).<br />
Da das Verschieben einer RW-Instanz dazu führt, dass die Backup-Instanz neu<br />
synchronisiert wird, kann der balancer mit den Benutzer-Wiederherstellbaren
136 6 Tägliche Arbeit mit AFS<br />
6.12 Server-Ranks definieren<br />
Backups (siehe 7.2, Seite 141) interferieren. Er sollte deshalb möglichst am<br />
Wochenende laufen.<br />
6.11.2.2.2 ... etwas hochtrabender Russ Allbery hat ein Verfahren entwickelt,<br />
in dem die Verteilung der Volumes auf den File<strong>server</strong>n der Zelle auf<br />
eine lineare Optimierung zurückgeführt wird. Das ist mathematisch etwas<br />
anspruchsvoller, <strong>für</strong> kleine Zellen jedoch übertrieben. Außerdem benötigt man<br />
<strong>für</strong> seine spezielle Lösung ein kommerzielles Softwarepaket, das die lineare<br />
Optimierung errechnet.<br />
Mehr dazu unter http://www.eyrie.org/~eagle/notes/afs/<br />
balance.html<br />
Die AFS-Clients wählen selbstständig individuell aus, welchen Server sie mit<br />
welcher Priorität kontaktieren. Dabei kommen zwei im Kernel auf jedem Client<br />
unabhängig von allen anderen Clients gespeicherte Tabellen zum Einsatz, in<br />
der jedem Server ein “Rank” (eine Priorität) zugeordnet ist. Eine der Tabellen<br />
regelt den Zugriff auf Datenbank<strong>server</strong>, die andere den Zugriff auf File<strong>server</strong>.<br />
Dabei gelten folgende Regeln:<br />
• Server im selben Subnetz werden stark bevorzugt.<br />
• Server mit numerisch kleineren IP-Adressen werden bevorzugt.<br />
• Ist der beste Server nicht erreichbar, wird der nächst“schlechtere” benutzt.<br />
Die Serverranks lassen sich mit dem Kommando fs get<strong>server</strong>prefs<br />
auslesen. Mit der zusätzlichen Option -vl<strong>server</strong>s werden anstelle der<br />
File<strong>server</strong>-Ranks die Datenbank<strong>server</strong>-Ranks angezeigt. Niedrigere Werte<br />
bedeuten höhere Priorität.<br />
Gelegentlich ist es sinnvoll, die Ranks manuell zu definieren. Das kann jedoch<br />
nur ein lokaler Superuser auf dem jeweiligen Client. Das entsprechende Kommando<br />
lautet fs set<strong>server</strong>prefs. Hier einige Beispiele:<br />
root@host>fs set<strong>server</strong>prefs afsserv1 20001 afsserv2 20002<br />
weist den AFS-Client an, afsserv1 dem Rechner afsserv2 vorzuziehen, wenn<br />
eine angeforderte RO-Instanz auf beiden Rechnern liegt.<br />
root@host>fs set<strong>server</strong>prefs -vl<strong>server</strong>s afsdb1 20001 afsdb2 20002<br />
führt dazu, dass der AFS-Client Anfragen an die AFS-Datenbank bevorzugt an<br />
afsdb1 richtet.<br />
Serverranks sind solange gültig, bis der AFS-Client beendet wird. Sie werden<br />
nicht abgespeichert, müssen also bei Bedarf nach jedem Neustart des Clients<br />
(und somit bei jedem Bootvorgang) neu gesetzt werden. Das setzen der Serverranks<br />
ist nur durch den lokalen Superuser des AFS-Clients möglich. Fällt ein<br />
bevorzugter Rechner aus, werden die verbleibenden verwendet. Der AFS-Client<br />
merkt sich, welche Rechner erreichbar bzw. nicht erreichbar sind und überprüft<br />
das regelmäßig.
6.13 Sperren auf Volume-Ebene 137<br />
6.13 Sperren auf Volume-Ebene<br />
6.13.1 Gesperrte Volumes<br />
Für jedes Volume (mit all seinen Instanzen) kann in der VLDB ein Bit gesetzt<br />
werden, was von Tools, die auf Volumes-Ebene auf das AFS zugreifen (z.B.<br />
vos) als eine Sperre interpretiert wird. Diese Sperre ist ein Hinweis, kein hartes<br />
Hindernis. Sie verhindert, dass Transaktionen (z.B. das Verschieben einer RW-<br />
Instanz) durch konkurrierende Schreibzugriffe auf die Instanzen des Volumes<br />
oder auf die den entsprechenden VLDB-Eintrag gestört werden.<br />
Folgende Kommandos sind im Zusammenhang mit Volume-Sperren wichtig:<br />
• Mit vos lock wird ein Volume gesperrt. Ist das Volume bereits gesperrt,<br />
wird ein Fehler zurückgeliefert. Beispiel:<br />
admin@afs>vos lock root.cell<br />
Locked VLDB entry for volume root.cell<br />
admin@afs>echo $?<br />
0<br />
admin@afs>vos lock root.cell<br />
Could not lock VLDB entry for volume root.cell<br />
VLDB: vldb entry is already locked<br />
admin@afs>echo $?<br />
1<br />
user@host>vos listvldb -locked<br />
• Das Kommando vos unlock entsperrt ein Volume. War das Volume<br />
nicht gesperrt, ist der Rückgabewert von vos unlock trotzdem 0 (=erfolgreich).<br />
• Alle gesperrten Volumes einer Zelle lassen sich mit<br />
anzeigen. Im Normalfall (wenn gerade keine Backups durchgeführt oder<br />
Volumes verschoben/released werden) sollte die Liste leer sein:<br />
user@host>vos listvldb -locked<br />
VLDB entries for all <strong>server</strong>s which are locked:<br />
Total entries: 0<br />
admin@afs>vos unlockvldb<br />
6.13.2 “Beschäftigte” Instanzen<br />
• Es ist möglich, alle Volume-Sperren einer Zelle auf einmal aufzuheben:<br />
Normalerweise sollte es nicht nötig sein, am Locking von Volumes manuell<br />
etwas zu ändern. Es kommt vor allem in AFS-Kommandos zum Einsatz um exklusiv<br />
auf ein Volume zugreifen zu können. Bricht ein AFS-Kommando jedoch<br />
unerwartet ab und kann die Sperre eines Volumes nicht wieder aufheben, so<br />
muss der Administrator manuell eingreifen.<br />
Diese Sperre wird in der VLDB gespeichert - überlebt also z.B. einen Neustart<br />
aller Datenbank<strong>server</strong> der Zelle.<br />
Es ist möglich, eine ganz bestimmte Volume-Instanz zu sperren. Das ist dann<br />
nötig, wenn gerade auf Volume-Ebene schreibend auf diese zugegriffen wird.<br />
Das passiert z.B., wenn eine RW-Instanz mit vos release mit ihren RO-<br />
Instanzen synchronisiert wird. Eine solche Sperre verhindert weitere Zugriffe
138 6 Tägliche Arbeit mit AFS<br />
auf Volume-Ebene (also z.B. per vos dump) sowie Zugriffe auf Filesystemebene<br />
(über einen AFS-Client).<br />
Vor allem RW-Instanzen sind i.d.R. immer nur kurz “beschäftigt”, so dass Zugriffe<br />
nur um Sekunden verzögert werden. Der reguläre Benutzer merkt das nur<br />
durch eine kurze Wartezeit.<br />
Es ist möglich, dass ein AFS-Kommando “vergisst”, eine Instanz wieder freizugeben<br />
(z.B. durch einen Absturz des Kommandos). Leider lässt sich eine solche<br />
Sperre nicht direkt aufheben. Startet man jedoch die Serverprozesse des entsprechenden<br />
File<strong>server</strong>s neu, so werden alle Instanzen dieses File<strong>server</strong>s wieder<br />
entsperrt. Außerdem verfällt die Sperre nach einiger Zeit 10 .<br />
Achtung:Oft braucht ein Kommando lediglich sehr viel Zeit an einer Volume-<br />
Instanz. Bevor man schwere Geschütze auffährt und die Instanz zwangsweise<br />
aus dem Zustand “busy” holt, sollte man sich deshalb sicher sein, dass wirklich<br />
etwas schief läuft.<br />
Folgende Befehl sind im Zusammenhang mit Volume-Instanz-Sperren wichtig:<br />
Alle laufenden Transaktionen (und damit alle gesperrten Instanzen) eines<br />
File<strong>server</strong>s zeigt man mittels vos listvol oder zusammen mit Hintergrundinformationen<br />
durch vos status an. So sieht’s z.B. aus, wenn gerade<br />
keine Instanz busy ist:<br />
user@host>vos status afsserv1<br />
No active transactions on afsdb1<br />
user@host>vos listvol afsserv1<br />
Total number of volumes on <strong>server</strong> afsserv1 partition /vicepa: 1<br />
user.afstest 536870942 RW 2233 K On-line<br />
Total volumes onLine 1 ; Total volumes offLine 0 ; Total busy 0<br />
Wird gerade eine Instanz benutzt, sieht das z.B. wie folgt aus:<br />
user@host>vos status afsserv1<br />
Total transactions: 1<br />
------------------------transaction:<br />
115 created: Fri Aug 20 16:08:35 2004<br />
attachFlags: busy<br />
volume: 536870942 partition: /vicepa procedure: TransCreate<br />
-------------------------<br />
vos listvol zeigt unter den Instanz-Listen der einzelnen Partitionen jeweils<br />
an, wieviele Instanzen gesperrt (“busy”) sind. Beispiel:<br />
user@host>vos listvol afsserv1<br />
Total number of volumes on <strong>server</strong> afsserv1 partition /vicepa: 1<br />
**** Volume 536871192 is busy ****<br />
Total volumes onLine 0 ; Total volumes offLine 0 ; Total busy 1<br />
Mit folgendem Kommando kann man den voslerver neu starten und dabei<br />
10 10 Minuten sind im OpenAFS-Quellcode eingestellt. Der Wert lässt sich zur Laufzeit nicht än-<br />
dern.
6.13 Sperren auf Volume-Ebene 139<br />
root@file<strong>server</strong>> killall vol<strong>server</strong><br />
6.13.3 Offline-Instanzen<br />
alle “busy”-Instanzen wieder freigeben, ohne dass der Fileservice auf dem<br />
entsprechenden AFS-Server unterbrochen wird:<br />
Es ist möglich, einzelne Instanzen zu sperren. AFS-Clients greifen dann nicht<br />
auf sie zu. Man kann jedoch trotzdem mit Administrationstools wie vos dump<br />
auf solche Instanzen zugreifen (Bsp: siehe 5.4, Seite 108.<br />
Hier ein Beispiel - das Volume user.afstest ist zuerst Online, wird danach auf<br />
Offline und anschliessend wieder auf Online gesetzt:<br />
user@host>vos listvol afsserv1<br />
Total number of volumes on <strong>server</strong> afsserv1 partition /vicepa: 1<br />
user.afstest 536870942 RW 2233 K On-line<br />
Total volumes onLine 1 ; Total volumes offLine 0 ; Total busy 0<br />
user@host>vos offline afsserv1 a user.afstest<br />
user@host>vos listvol afsserv1<br />
Total number of volumes on <strong>server</strong> afsserv1 partition /vicepa: 1<br />
user.afstest 536870942 RW 2233 K Off-line<br />
Total volumes onLine 0 ; Total volumes offLine 1 ; Total busy 0<br />
user@host>vos online afsserv1 a user.afstest<br />
user@host>vos listvol afsserv1<br />
Total number of volumes on <strong>server</strong> afsserv1 partition /vicepa: 1<br />
user.afstest 536870942 RW 2233 K On-line<br />
Total volumes onLine 1 ; Total volumes offLine 0 ; Total busy 0<br />
Hinweise:<br />
• Es kommt vor, dass ein File<strong>server</strong> einzelne Volumes als Offline markiert.<br />
Das ist ein Problem, unter 8.5.4 auf Seite 181 gibt’s Tips zur Lösung.<br />
• Die Kommandos vos online und vos offline sind sonst nirgends<br />
dokumentiert.
7 Rezepte<br />
7.1 Eine Beispiel-Zelle<br />
7.1.1 Verzeichnisstruktur<br />
Pfad Volume B e s c h r e i b u n g<br />
+ M o u n t p o i n t t y p<br />
In diesem Abschnitt wird ein Zelle skizziert, die <strong>für</strong> einige der Rezepte als Umgebung<br />
dienen soll.<br />
Der Baum in 7.1 zeigt dabei zum einen die Struktur des Filesystems sowie die<br />
jeweiligen Ziele der Mountpoints.<br />
Listing 7.1: Verbundene Volumes in der Beispielzelle<br />
/ a f s r o o t . a f s Das AFS−Root−V e r z e i c h n i s<br />
|− cbs . mpg . de r o o t . c e l l Das Root−V e r z e i c h n i s d e r Z e l l e<br />
| |− u s e r u s e r Das Root−Volume f u e r Homedirs<br />
| | |− e r n i e u s e r . e r n i e (−rw ) Ein Homedirectory<br />
| | ‘− b e r t u s e r . b e r t (−rw ) . . . noch e i n Homedirectory<br />
| |− . u s e r u s e r (−rw )<br />
| | . . .<br />
| |− user−backup user−backup Backup−I n s t a n z e n d e r Homedirs<br />
| | ‘− b e r t u s e r . b e r t . backup Backup des Homedirs von b e r t<br />
| | . . .<br />
| |− . user−backup user−backup (−rw )<br />
| | . . .<br />
| |− user−na user−na D e a k t i v i e r t e Benutzer−Homedirs<br />
| |− . user−na user−na (−rw )<br />
| |− tmp tmp (−rw ) / tmp im AFS ( Z w i s c h e n a b l a g e )<br />
| |− admin<br />
| | |− e t c a . e t c K o n f i g u r a t i o n s d a t e i e n<br />
| | | ‘ s e c r e t Nicht−o e f f e n t l i c h e K o n f i g u r a t i o n s d a t e i e n<br />
| | |− tmp a . tmp (−rw ) Nicht−o e f f e n t l i c h e t e m p o r a e r e D a t e i e n<br />
| | ‘− . e t c a . e t c (−rw )<br />
| |− p r o j e c t s p r o j e c t s Root−Volume f u e r P r o j e k t e<br />
| |− . p r o j e c t s p r o j e c t s (−rw )<br />
| ‘− l o c a l<br />
| |− s c r i p t s l o c a l . s c r i p t s s e l b s t g e s t r i c k t e S k r i p t e<br />
| ‘− . s c r i p t s l o c a l . s c r i p t s (−rw )<br />
|− . cbs . mpg . de r o o t . c e l l (−rw ) Fuer Aenderungen an d e r Z e l l e n s t r u k t u r<br />
| . . .<br />
‘− . r o o t . a f s r o o t . a f s (−rw )<br />
root@host>vos release root.cell<br />
Anhand der Beispielzelle soll auch erklärt werden, wo<strong>für</strong> die verschiedenen<br />
Volume-Mountpoints (siehe 3.2, Seite 32) in der Praxis relevant sind.<br />
Das AFS-Rootvolume der lokalen Zelle wird vom AFS-Client immer ROgemountet.<br />
Das Zellen-Rootvolume der lokalen Zelle ist als RO-Instanz unter<br />
/afs/cbs.mpg.de zu erreichen, weil /afs auch RO-gemountet wird und der<br />
Mountpoint /afs/cbs.mpg.de nicht explizit auf eine RW-Instanz verweist. Soll<br />
etwas am Zellen-Rootvolume geändert, z.B. ein Verzeichnis angelegt werden,<br />
so muss diese Änderung unter /afs/.cbs.mpg.de, also in der RW-Instanz erfolgen<br />
und anschließend in die RO-Kopien des Zellen-Rootvolumes verteilt werden:<br />
Das klingt umständlich, hat aber einen einfachen Grund: RO-Instanzen können<br />
beliebig oft existieren. Wird per default eine RO-Instanz auf einem Pfad durchschritten,<br />
dann wird vom AFS-Client eine beliebige verfügbare RO-Instanz (von<br />
dem es auf jedem AFS-File<strong>server</strong> der Zelle eine geben kann) benutzt. Würde<br />
140
7.2 Administrationsarme Backups 141<br />
7.1.2 Server<br />
7.2 Administrationsarme Backups<br />
man eine RW-Instanz benutzen, so wäre das ein Single-Point-of-Failure, da es<br />
nur maximal eine RW-Instanz eines jeden Volumes gibt. Das Prinzip ist unter<br />
(siehe 3.2.3, Seite 34) beschrieben.<br />
Alle Nutzer der Zelle haben ihr Homedirectory unter<br />
/afs/cbs.mpg.de/user/. Die eigentlichen Homedirectory-Volumes<br />
sind explizit RW-gemountet. Wären die Volumes ohne RW-Option<br />
gemountet, so würde sich der AFS-Client <strong>für</strong> eine RO-Kopie entscheiden,<br />
schließlich ist das Parent-Directory (/afs/cbs.mpg.de/user) eine RO-Instanz<br />
des Volumes users, in dem die Mountpoints <strong>für</strong> alle Homedirectories liegen.<br />
Jeder Nutzer besitzt ein Homedirectory-Volume. Der Name setzt sich aus<br />
user. und dem Loginnamen zusammen. Alle Volumes einer “Art” (z.B. alle<br />
Homedirectory-Volumes) sollten den gleichen Präfix haben, um sie leicht<br />
mit Globber-Ausdrücken in Kommandos wie vos backupsys erfassen zu<br />
können.<br />
Die Beispielzelle besteht aus 4 Servern:<br />
1. afsserv1 - ein File<strong>server</strong><br />
2. afsserv2 - noch ein File<strong>server</strong><br />
3. afsdb1 - ein Datenbank<strong>server</strong><br />
4. afsdb2 - noch ein Datenbank<strong>server</strong><br />
Hinweis: Die Zelle enthält nur 2 DB-Server, was in einer wirklichen Zelle nicht<br />
zu raten ist. 3 sind das empfohlene Minimum. Die Anzahl der DB-Server sollte<br />
immer ungerade sein.<br />
AFS bietet mit seinen Backup-Instanzen und der damit verbundenen differenziellen<br />
Speicherung von Volumes eine Möglichkeit, Dateien und Verzeichnisse<br />
durch die Nutzer selbst wiederherstellen zu lassen, besonders wenn die Backups<br />
auf Platten gemacht werden. Wird diese Möglichkeit genutzt, sinkt der Administrationsaufwand<br />
<strong>für</strong> Probleme der Art Ich–hab’–da–gerade–diese–wichtige–<br />
Datei–gelöscht gegen Null.<br />
Man lege einfach <strong>für</strong> jedes, auf diese Weise zu sichernde, Volume eine Backup-<br />
Instanz an (siehe 3.1, Seite 27). Die Synchronisation der Backup-Instanz mit<br />
der RW-Instanz macht AFS nicht automatisch. Bei der Installation des Backup<strong>server</strong>s<br />
schreibt InstantAFS jedoch einen cron-Job auf dem Backup<strong>server</strong>, der<br />
durch Aufrufe von instantafs.backup die Synchronisation automatisch durchführen<br />
kann (siehe 5.2.3, Seite 101).<br />
Hier ein Beispiel, wobei die Beispielzelle (siehe 7.1, Seite 140) vorrausgesetzt<br />
wird:<br />
1. Der Benutzer ernie will Sicherheit <strong>für</strong> seine Daten und beantragt eine<br />
Backup-Instanz <strong>für</strong> sein Homedirectory-Volume. Natürlich sollte der<br />
Administrator in weiser Voraussicht <strong>für</strong> jeden Benutzer eine solche<br />
Instanz anlegen.<br />
Hinweis: InstantAFS’s Benutzermanagement legt per default 1 eine<br />
Backup-Instanz gleich mit dem Homedirectoryvolume neuer User an.<br />
Dreh- und Angelpunkt dieses Automatismus ist der Aufruf der acall-<br />
Funktion instantafs.acall-volcreate auf dem db-acall-Server.<br />
1 und je nach Inhalt der Datei /a/a/etc/acall-volcreate.conf
142 7 Rezepte<br />
root@host>vos backup user.ernie<br />
2. Der Administrator muß <strong>für</strong> ernie eine Backup-Instanz erzeugen. Diese<br />
liegt dann auf der selben Partition wie die RW-Instanz:<br />
3. Der Administrator muss nun das Doppelte des Quotas des Volumes<br />
user.ernie an Maximalspeicherverbrauch auf der entsprechenden Partition<br />
einplanen (worst case).<br />
4. Die Backup-Instanz von ernie’s Homedirectory-Volume user.ernie wird<br />
nicht automatisch aktualisiert. Es bietet sich an, zu einem definierten Zeitpunkt<br />
alle Backup-Instanzen, die mit Homedirectories zu tun haben, zu<br />
aktualisieren. InstantAFS bringt ein Konzept <strong>für</strong> diese Synchronisation<br />
mit, das mit dem Backup eng verbunden ist (siehe 5.2.3, Seite 101).<br />
5. Damit ernie Zugriff auf das Volume hat, wird ein neuer Mountpoint auf<br />
die Backup-Instanz von ernie’s Homedirectory-Volume erzeugt:<br />
admin@afs>fs mkm /afs/cbs.mpg.de/.user-backup/ernie user.ernie.backup<br />
admin@afs>vos release user-backup<br />
Jetzt muss die RW-Instanz von user-backup in seine RO-Instanzen synchronisiert<br />
werden, damit unter /afs/cbs.mpg.de/user-backup/ernie die<br />
Backup-Instanz sichtbar wird:<br />
6. Aus versehen löscht ernie die Datei /afs/cbs.mpg.de/user/ernie/wichtig.txt.<br />
7. Da er die Datei an vorherigen Tag bereits besessen hat 2 , kann ernie<br />
sie selbst wiederherstellen. Der Administrator muss sich nicht darum<br />
kümmern.<br />
ernie@afsclient> cp /afs/cbs.mpg.de/user-backup/ernie/wichtig.txt \<br />
/afs/cbs.mpg.de/user/ernie/wichtig.txt<br />
7.3 Sicher und Bequem - SSH ohne Passwort<br />
7.3.1 Einloggen per SSH mit Public-Key<br />
8. Wäre die Datei erstellt und gleich wieder gelöscht worden, also ohne,<br />
dass zwischendrin ein Synchronisationsprozess die Backup-Instanz upgedated<br />
hat, dann wäre diese Wiederherstellung nicht möglich gewesen.<br />
In diesem Abschnitt wird erklärt, wie man auf sichere Weise Kommandos auf<br />
anderen Rechnern ausführen kann. Dazu zählt auch das interaktive Einloggen<br />
per ssh sowie die Übertragung von Dateien mit sftp oder scp.<br />
Dieses Rezept ist nicht AFS-spezifisch, hilft jedoch beim Aufsetzen von Zellen,<br />
die aus mehr als einem Server bestehen. Diese Methode ist vor allem <strong>für</strong><br />
<strong>Administratoren</strong> interessant. Sie ist sehr robust und funktioniert im Gegensatz<br />
zu Kerberos-basierenden Lösungen auch, wenn die Zeit zwischen Client und<br />
Server nicht synchronisiert ist.<br />
Mittels ssh ist es möglich, ein Kommando auf einem entfernten Rechner sicher<br />
- ohne Eingabe eines Passwortes - auszuführen. Das ist von der Funktionalität<br />
her mit den Kommandos rsh/rexec vergleichbar - nur eben sicherer.<br />
2 und hier davon ausgegangen wird, dass sich ein nächtlicher cron-Job um die Synchronisation<br />
kümmert
7.3 Sicher und Bequem - SSH ohne Passwort 143<br />
Man braucht zwar kein Passwort einzugeben, eine Authentifikation ist allerdings<br />
trotzdem nötig. So geht es:<br />
1. Zuerst muss ein neues Schlüsselpaar erzeugt werden:<br />
user@host>ssh-keygen -f Dateiname -t dsa<br />
root@host>chmod 600 Dateiname<br />
root@host>chown root Dateiname<br />
Man wird nun zum zweimaligen Eingeben eines Passwortes aufgefordert<br />
- hier sollte man einfach Return drücken, ein leeres Passwort also.<br />
Danach enthält die Datei den privaten Schlüssel und<br />
.pub den öffentlichen.<br />
2. Den privaten Schlüssel legt man jetzt auf dem Rechner ab, von dem aus<br />
man sich auf dem entfernten Rechner einloggen will. Beachten Sie, die<br />
Leserechte so zu setzen, dass wirklich nur die Personen/Prozesse Zugriff<br />
auf die Datei haben, die das auch später haben sollen - also z.B. so:<br />
3. Der öffentlich Schlüssel besteht nur aus einer Zeile. Auf dem Rechner,<br />
auf dem man sich später passwortlos einloggen will, hängt man diese<br />
Zeile im Homedirectory des Benutzers, als der man sich einloggen will<br />
(z.B. root), an die Datei ∼/.ssh/authorized_keys an.<br />
4. Zum Testen führt man jetzt auf dem Rechner, auf dem der private Schlüssel<br />
liegt, folgendes Kommando aus:<br />
user@host>ssh -i Dateiname Benutzer@Rechner hostname<br />
7.3.2 Single-Sign-On mit Kerberos5<br />
Das auszuführende Kommando hostname wird auf der Gegenseite an<br />
/bin/sh übergeben.<br />
Wird jetzt der Name des entfernten Rechners ausgegeben, ohne dass ein<br />
Passwort eingegeben werden musste, hat alles geklappt.<br />
Hinweis:Wahrscheinlich ist der öffentliche Schlüssel des SSH-Servers<br />
noch durch Eingabe von yes (mit anschließendem Newline) zu bestätigen.<br />
5. Soll der private Schlüssel per default benutzt werden, muss er in<br />
∼.ssh/id_dsa des entsprechenden Benutzers 3 umbenannt (oder entsprechend<br />
verlinkt) werden.<br />
Mit Kerberos5 ist es möglich, den Benutzern der Zelle die Eingabe von<br />
Passwörtern beim Zugriff auf Dienste im Netzwerk zu ersparen. Das Prinzip<br />
ist unter 3.10 erklärt. Eine Anwendung (z.B. ssh) muss explizit Kerberos<br />
unterstützen, um die Authentifikation ohne Passwort zu ermöglichen.<br />
Unter AFS besteht die zusätzliche Schwierigkeit darin, dass auf Rechner, auf<br />
denen man über die Ferne (z.B. per ssh) arbeitet, meist ein AFS-Token benötigt<br />
wird. Um es auf den anderen Rechnern zu bekommen, existieren folgende<br />
theoretische Möglichkeiten, von denen die letzte (2b) die beste ist:<br />
1. Das Token kann (selbstverständlich nur über verschlüsselte Kanäle) zum<br />
entfernten Rechner geschickt und dort in den Kernel kopiert werden.<br />
3 Der Name des Benutzers auf dem Client, der den Schlüssel zur Authentifikation einsetzen will.<br />
Das hat nicht zwangsläufig etwas mit dem Loginnamen auf dem Ziel<strong>server</strong> zu tun.
144 7 Rezepte<br />
Da<strong>für</strong> ist keine spezielle Unterstützung durch Kerberos nötig - jedoch<br />
muss das im Netzwerk benutzte Protokoll (z.B. SSH) explizit dieses<br />
“AFS-Token-Forwarding” unterstützen.<br />
2. Das Token kann auf dem entfernten Rechner neu erzeugt werden. Beim<br />
Einsatz von AFS mit Kerberos5 gibt es da<strong>für</strong> zwei Möglichkeiten:<br />
(a) Der Benutzer gibt (entweder per PAM oder in ein entsprechendes<br />
Skript in einer bash-Konfigurationsdatei) ein Passwort ein, um<br />
ein neues TGT vom Kerberos-Server zu holen. Anschließend wird<br />
über den Zwischenschritt eines AFS-Service-Tickets ein neues<br />
AFS-Token erzeugt.<br />
Nachteil: Man muss ein Passwort eingeben, obwohl man ja eigentlich<br />
schon an der Kerberos-Realm authentifiziert ist.<br />
(b) Das TGT wird (selbstverständlich nur über verschlüsselte Kanäle)<br />
zum entfernten Rechner geschickt und dort im “Credentials Cache”<br />
abgelegt. Anschließend wird über den Zwischenschritt eines AFS-<br />
Service-Tickets ein neues AFS-Token erzeugt. Diese Methode ist<br />
sehr komfortabel. Da kein Passwort benötigt wird, können sich auch<br />
Skripte und Programme auf diese Weise auf anderen Rechner mit<br />
den Rechten eines Nutzers anmelden.<br />
Diese Methode wird empfohlen, da sie am komfortabelsten ist.<br />
Diese Methode ist gegenüber dem Token-Forwarding im Vorteil, da ...<br />
• ... sie ohne spezielle AFS-Unterstützung 4 in den beteiligten Programmen<br />
(z.B. ssh und sshd) auskommt und<br />
• ... weil damit sichergestellt ist, daß man auch auf der Gegenseite<br />
ohne weitere Passworteingabe gleich mit Kerberos arbeiten kann.<br />
Ein <strong>für</strong> Methode 2b modifiziertes ssh .deb steht <strong>für</strong> InstantAFS zur Verfügung.<br />
Es unterscheidet sich in folgenden Dingen vom Standard-Debian-SSH-Paket:<br />
• Das Authentifikationsmodul “gssapi-with-mic” wird unterstützt. Es ermöglicht<br />
das Einloggen mit Kerberos5-Ticket und die Weiterleitung des<br />
TGT an den entfernten Rechner. Es existiert bereits ein Kerberos–taugliches<br />
SSH-Paket <strong>für</strong> Debian (ssh-krb5 .deb ), jedoch ist dieses durch das<br />
verwendete Authentifikationsmodul (“gssapi”) nicht zukunftssicher 5 .<br />
• angepasste Versionen von /etc/ssh/ssh_config und /etc/ssh/sshd_config,<br />
damit’s auch gleich funktioniert<br />
• Das neue TGT wird mit einer Lifetime von 1000h (siehe 3.10.7, Seite 65)<br />
angefordert.<br />
• Das Kommando aklog wird von sshd selbst aufgerufen, um ein Token<br />
zu generieren 6 .<br />
Auf allen Rechnern, auf denen man sich auf diese Weise einloggen will,<br />
muss das modifizierte ssh .deb -Paket installiert werden. Außerdem muss jeder<br />
dieser Rechner einen Kerberos5-Principal erhalten. Komfortabler geht das mit<br />
instantafs.kerberos, das auf dem Kerberos-Master-Server auszuführen ist.<br />
4 Kerberos wird i.d.R. eher unterstützt als AFS<br />
5 “gssapi” ist nicht kompatibel zu “gssapi-with-mic”. Client und Server müssen zur erfolgreichen<br />
Authentifikation die gleichen Module benutzen.<br />
6 Das könnte theoretisch auch in der ∼/.bashrc passieren, jedoch würde dann <strong>für</strong> sftp und<br />
scp kein Token zur Verfügung stehen.
7.4 Wie kommt ein kerberosifizierter Dienst zu seinem Schlüssel? 145<br />
Hier ein Beispiel <strong>für</strong> die Zelle cbs.mpg.de:<br />
root@kerberos> instantafs.kerberos -G afsclient1<br />
Damit würde der Rechner afsclient1.cbs.mpg.de einen Schlüssel 7 <strong>für</strong> den Principal<br />
host/afsclient1.cbs.mpg.de@CBS.MPG.DE erhalten. Evtl. muss das root-<br />
Passwort von afsclient1 auf dem Kerberos-Master-Server bis zu zweimal eingegeben<br />
werden.<br />
7.4 Wie kommt ein kerberosifizierter Dienst zu seinem Schlüssel?<br />
root@host>ssh root@kerberos<br />
root@host>kadmin.local<br />
Jeder Dienst, der von einer Authentifikation per Kerberos profitieren will, muß<br />
über mindestens einen eigenen Schlüssel (und damit über einen Principal) in der<br />
Kerberos-Datenbank verfügen. Hier sind einige Beispiele <strong>für</strong> Dienst-Principals:<br />
• afs@CBS.MPG.DE<br />
• host/afsserv1.cbs.mpg.de@CBS.MPG.DE<br />
• acall/afsserv1.cbs.mpg.de@CBS.MPG.DE<br />
Bei vielen Diensten muss der Name des Rechners, auf dem sie laufen als Instanz,<br />
also vom eigentlichen Namen abgetrennt durch ein “/”, angegeben werden.<br />
Der Administrator muß sich selbst darum kümmern, den Principal des Dienstes<br />
anzulegen und dem Dienst den Schlüssel aus der Kerberos-Datenbank auf einem<br />
sicheren Weg (Diskette,Memorystick,SSH,...) zur Verfügung zu stellen.<br />
Kerberos5-Dienste erwarten, dass der Schlüssel in einer Keytab gespeichert ist<br />
- meist in der Datei /etc/krb5.keytab.<br />
Hinweis: AFS ist kein Kerberos5-, sondern ein Kerberos4-Dienst. AFS-Server<br />
benötigen zwar auch eine Kerberos5-Keytab, diese muß aber vor Benutzung<br />
umgewandelt werden (siehe 7.5, Seite 146).<br />
In folgenden Beispiel soll der SSH-Dienst des Rechners afsserv1.cbs.mpg.de<br />
mit einem host-Schlüssel versorgt werden - das erhöht den Komfort beim Einloggen<br />
(siehe 7.3.2, Seite 143). So geht das:<br />
root@host>addprinc ernie<br />
root@host>addprinc ernie@CBS.MPG.DE<br />
1. Ein Login auf dem Kerberos-Master-Server ist nötig:<br />
2. Eine kadmin-Shell wird auf dem Kerberos-Server gestartet:<br />
Evtl. ist ein Password einzugeben, um den ssh-Daemon glücklich zu<br />
machen. Bei der Angabe von Principals kann man i.d.R. den Namen der<br />
Realm weglassen. Die folgenden ktutil-Kommandos sind z.B. in der<br />
Realm CBS.MPG.DE äquivalent:<br />
3. In der kadmin-Shell wird der neue Principal angelegt:<br />
root@host>addprinc -randkey host/afsserv1.cbs.mpg.de<br />
Der -randkey-Parameter weist dem Principal anstelle eines Passwortes<br />
eine zufällige Zeichenfolge zu, was schwerer zu knacken ist.<br />
7 Der Schlüssel wird unter /etc/krb5.keytab abgelegt.
146 7 Rezepte<br />
4. Der/die Schlüssel des Principals werden in eine Keytab (siehe 3.10.3,<br />
Seite 63) geschrieben. Der Name der Keytab (hier /tmp/geheim.keytab)<br />
ist frei wählbar:<br />
root@host>ktadd -k /tmp/geheim.keytab host/afsserv1.cbs.mpg.de<br />
Achtung:<br />
• Wer die Keytab eines Dienstes in seinen Händen hält, kann sich<br />
unberechtigten Zugriff auf diesen einen Dienst verschaffen. Legen<br />
Sie diese deshalb nicht in ein öffentlich zugängliches Verzeichnis 8 .<br />
• Manche Dienste (z.B. AFS) können nur mit bestimmten Schlüsseltypen<br />
umgehen. Bei ktadd ist in diesem Fall noch der -e-<br />
Parameter zu benutzen. AFS benötigt z.B. unbedingt den Schlüsseltyp<br />
des-cbc-crc:afs3. Hier ein Beispiel:<br />
root@host>ktadd -k /tmp/afs.keytab -e des-cbc-crc:afs3 afs<br />
user@host>exit<br />
5. Die kadmin-Shell wird beendet:<br />
6. Die Keytab wird auf den Zielrechner übertragen:<br />
user@host>scp /tmp/geheim.keytab \<br />
root@afsserv1.cbs.mpg.de:/etc/krb5.keytab<br />
Achtung:<br />
• Mit diesem Kommando wird die evtl. vorher auf diesem Rechner<br />
vorhandene Keytab-Datei /etc/krb5.keytab mit allen in ihr gespeicherten<br />
Schlüssel überschrieben. Schlüssel zu einer bereits vorhandenen<br />
Keytab hinzuzufügen ist etwas aufwendiger.<br />
• Nicht alle Dienste benutzen /etc/krb5.keytab um hinterlegte Schlüssel<br />
zu laden.<br />
7. Der Dienst, der diesen Schlüssel benutzt, sollte neu gestartet werden - in<br />
diesem Fall der sshd auf afsserv1.cbs.mpg.de:<br />
root@afsserv1> /etc/init.d/ssh force-reload<br />
Für die Verteilung des host-Schlüssel eines Rechners auf dem entsprechenden<br />
Rechner, existiert ein Kommando, das die oben genannten Schritte automatisch<br />
ausführt. Es muss auf dem Kerberos-Master-Server ausgeführt werden:<br />
root@kerberos> instantafs.kerberos -G Rechnername<br />
7.5 Aufsetzen eines unspezialisierten AFS-Servers<br />
Achtung: Der Rechnername darf keinen Domainanteil enthalten.<br />
Dieses Rezept zeigt, was zu beachten ist, wenn eine neue AFS-Servermaschine<br />
in die Zelle integriert werden soll. Dabei ist es unwichtig, ob diese später ein<br />
File-, DB oder Backup-Server werden soll.<br />
1. Vorrausgesetzt wird ein installiertes Debian Sarge 3.1.<br />
8 /tmp ist eigentlich keine gute Idee, jedoch wird davon ausgegangen, daß sich kein normaler Benutzer<br />
auf dem Kerberos-Master einloggen kann.
7.5 Aufsetzen eines unspezialisierten AFS-Servers 147<br />
2. Mit der Zeile<br />
AFS_CLIENT=false<br />
in der Datei /etc/openafs/afs.conf.client stellt man sicher, dass der AFS-<br />
Client bei einem Neustart nicht versehentlich hochgefahren wird. Der<br />
nächste Punkt kann übersprungen werden, wenn die Datei nicht existiert.<br />
3. Ein evtl. noch laufender AFS-Client muss zuerst beendet werden:<br />
root@host>/etc/init.d/openafs-client stop<br />
U.U. sträubt sich der Client und reagiert mit einem Kernel-Oops. Das<br />
passiert z.B., wenn kein DB-Server verfügbar ist. In diesem Fall ist jetzt<br />
ein Neustart des Systems fällig.<br />
4. Mit folgendem Kommando werden alle nötigen Pakete installiert:<br />
root@host>apt-get install instantafs-afs<strong>server</strong><br />
. Die Fragen, die debconf jetzt stellt, kann man einfach weg-¨returnën, da<br />
sich das Paket instantafs-customclient .deb später darum kümmert.<br />
5. Ein evtl. noch laufender bos<strong>server</strong>-Prozess muss mitsamt aller Unterprozesse<br />
entfernt werden:<br />
root@host>/etc/init.d/openafs-file<strong>server</strong> stop<br />
root@host>killall bos<strong>server</strong><br />
6. Die Datei /etc/openafs/<strong>server</strong>/ThisCell sollte nur den eigenen Zellennamen<br />
auf einer Zeile enthalten - z.B. so:<br />
root@host>cat /etc/openafs/<strong>server</strong>/ThisCell<br />
cbs.mpg.de<br />
7. Die Datei /etc/openafs/<strong>server</strong>/CellServDB muss vorhanden aber leer sein:<br />
root@host>rm /etc/openafs/CellServDB<br />
root@host>touch /etc/openafs/CellServDB<br />
8. Die Dateien /etc/openafs/BosConfig und /etc/openafs/<strong>server</strong>/Keyfile müssen<br />
weg:<br />
root@host>rm -f /etc/openafs/BosConfig /etc/openafs/<strong>server</strong>/Keyfile<br />
9. Die Datei /etc/openafs/<strong>server</strong>/UserList muss wie folgt aussehen:<br />
root@host>cat /etc/openafs/<strong>server</strong>/UserList<br />
admin<br />
acall<br />
10. Auf sichere Weise muss die beim Kerberos-Setup erstellte Datei afs.keytab<br />
den Weg auf den neuen AFS-Server finden (z.B. per Diskette).<br />
11. Der AFS-Key muß aus der Keytab extrahiert werden. Diese Kommando<br />
erledigt das und stellt speichert den AFS-Key in die Datei /etc/openafs/<strong>server</strong>/KeyFile:<br />
root@host>asetkey add 2 afs.keytab afs<br />
Die “2” ist i.d.R. die KVNO (=Key Version Number Versionsnummer des<br />
Schlüssels dieses Principals) des Schlüssels im keytab-File.
148 7 Rezepte<br />
Meldet asetkey einen Fehler, müssen sie die korrekte KVNO mit<br />
kt_util ermitteln. Beispiel:<br />
user@host>echo -e ’rkt afs.keytab\nlist’ | ktutil<br />
ktutil: ktutil: slot KVNO Principal<br />
--- --- ------------------<br />
1 1 afs@CBS.MPG.DE<br />
Existiert mehr als ein Schlüssel <strong>für</strong> den afs-Principal in der Keytab, dann<br />
ist diese Keytab unbrauchbar. In diesem Fall sollte man die Keytab neu<br />
erzeugen und darauf achten, dass das Keytabfile, in das mittels ktadd<br />
-k [keytabfile] der Schlüssel gespeichert wird, vor dem ktadd-<br />
Aufruf nicht existiert.<br />
12. Vorsichtshalber sollte die Datei /var/lib/openafs/sysid entfernt werden:<br />
root@host>rm -f /var/lib/openafs/sysid<br />
Wenn der Rechner vorher bereits ein Server war und die Datei nicht<br />
entfernt wird, könnten die DB-Server den neuen Server fälschlicherweise<br />
“wiedererkennen” und unzutreffende Annahmen über seinen Zustand<br />
machen.<br />
13. Der offizielle Name des Rechners muß lokal korrekt zurückgelieferter<br />
werden. Informationen darüber, wie man das sicherstellt, findet man unter<br />
8.11 auf Seite 190<br />
14. Den bos<strong>server</strong> startet man nun mit:<br />
root@host>/etc/init.d/openafs-file<strong>server</strong> start<br />
Ist er korrekt hochgefahren, müsste der bos<strong>server</strong> ohne Unterprozesse<br />
laufen. Das kann man mit folgendem Kommando testen:<br />
user@host>pgrep -P ‘pgrep bos<strong>server</strong>‘ || echo Alles OK<br />
7.6 Erhöhte Privilegien <strong>für</strong> einfache Benutzer<br />
7.6.1 Das Problem<br />
Im Fehlerfall hilft ein Blick in /var/log/openafs/BosLog.<br />
Gelegentlich müssen normale Benutzer Kommandos ausführen, die eigentlich<br />
<strong>für</strong> Zellensuperuser reserviert sind. Z.B. macht das vos release-<br />
Kommando solche Privilegien nötig, wenn einfache Benutzer <strong>für</strong> statische<br />
Websites oder spezielle Softwarevolumes (Daten, die relativ selten verändert<br />
werden) verantwortlich sind. Da jedoch kein Benutzer das Zellensuperuserpasswort<br />
kennen sollte, gibt es nur zwei Lösungen:<br />
• Der Benutzer (Benutzergruppen sind nicht möglich) wird auf allen betroffenen<br />
File<strong>server</strong>n mit lokalen Superuserrechten ausgestattet:<br />
root@host>bos adduser Servername Benutzername<br />
“Betroffene File<strong>server</strong>” sind alle die, auf die zur Ausführung der benötigten<br />
Kommandos zugegriffen werden muss. Diese Methode ist hochgradig<br />
unsicher, da der Benutzer auf diese Weise leicht eine Root-Shell auf dem<br />
File<strong>server</strong> und somit auch leicht den AFS-Key bekommt.
7.6 Erhöhte Privilegien <strong>für</strong> einfache Benutzer 149<br />
7.6.2 Das Prinzip<br />
• Ein Daemon könnte auf einem gesicherten Server Kommandos von nichtprivilegierten<br />
Benutzern annehmen und anschließend mit Zellensuperuserrechten<br />
ausführen. Auf diese Lösung wird jetzt näher eingegangen.<br />
Hinweis: Es existiert bereits ein ähnliches Clilent/Server-Konzept (remctl,<br />
siehe http://www.eyrie.org/~eagle/software/remctl/), programmiert<br />
von Russ Allbery. Dieses kam aber nicht in Fragen, da InstantAFS<br />
die Möglichkeit der Übergabe von Parametern <strong>für</strong> die aufgerufenen Kommandos<br />
vorraussetzt.<br />
acall ist eine Methode, um auf entfernten Servern Shell-Kommandos auszuführen.<br />
Die Kommandos laufen dabei i.d.R. als root. Der Name soll andeuten, dass<br />
es sich um AFS-bezogene Aufrufe (calls) von Funktionen handelt.<br />
Alle Übertragungen über das Netzwerk werden DES verschlüsselt.<br />
Achtung: Die Shellkommandos sind auf dem Zielsystem gegen beliebiges Ausführen<br />
von Unterkommandos abzusichern.<br />
Es dürfen nur Kommandos ausgeführt werden, die mittels eines Konfigurationsfiles<br />
(/a/a/etc/acall.access) explizit da<strong>für</strong> vorgesehen sind. Dabei läßt sich genau<br />
einstellen, welche Benutzer welche Kommandos mit welchen Parametern ausführen<br />
dürfen. Eine kommentierte Beispiel-Datei liegt dem Paket instantafsdoc<br />
.deb unter /usr/share/doc/instantafs-doc/acall.access bei.<br />
Der Benutzer kann die Ausführung von per acall aufgerufenen Shell-<br />
Kommandos nicht unterbrechen oder anderweitig beeinflussen. Das ist wichtig,<br />
da z.B. ein abgebrochenes vos move-Kommando das entsprechende Volume<br />
in einem undefinierten Zustand hinterlassen kann.<br />
Der exit-Code des ausgeführten Kommandos sowie ausgegebener Text von<br />
STDOUT und STDERR, insgesammt maximal 4096 Zeichen, werden von<br />
instantafs.acall zurückgeliefert.<br />
InstantAFS baut bereits auf folgende 3 acall-Server auf:<br />
db : Der acall-<strong>server</strong> auf dem ersten AFS-DB-Server. Er wird benutzt um<br />
AFS-Benutzer (in der PTDB) und um Volumes anzulegen.<br />
krb5 : Dieser kommt auf dem Kerberos-Server zum Einsatz um Kerberos-<br />
Principals anzulegen.<br />
samba : Der samba-acall-<strong>server</strong> ist <strong>für</strong> das Management der Keytabs auf dem<br />
Samba-Gateway und <strong>für</strong> die Aktualisierung der /etc/samba/smbpasswd-<br />
Datei zuständig.<br />
db- und krb5-Server sind unter InstantAFS derzeitig zwangsweise identisch.<br />
InstantAFS stellt einige entsprechende Kommandos zu Verfügung:<br />
instantafs.acall-usermgr : verwaltet Einträge in Datenbanken, die irgendwie mit Benutzerinformationen<br />
zu tun haben (Kerberos, AFS-PTDB und Samba). Ausserdem können<br />
damit Homedirectories von Benutzern verwaltet (angelegt, deaktiviert<br />
und gelöscht) werden. (siehe 9.2.6, Seite 195)<br />
instantafs.acall-release : synchronisiert Volume-Instanzen mittels vos release (siehe 9.2.4,<br />
Seite 195)<br />
instantafs.acall-backup : synchronisiert die Backup-Instanz eines Volumes mit der RW-Instanz (<br />
vos backup ) (siehe 9.2.2, Seite 194).<br />
instantafs.acall-volcreate : legt Volumes an (siehe 9.2.7, Seite 195).
150 7 Rezepte<br />
instantafs.acall-helloworld : ein Testkommando, das per default jeder Benutzer auf jedem Server aufrufen<br />
darf (siehe 9.2.3, Seite 194).<br />
instantafs.acall-setquota : zum setzen der Quota von Volumes<br />
7.6.3 Der Ablauf eines acall-RPCs<br />
Nach einer Installation mittels instantafs.setup kann acall sofort benutzt<br />
werden. Die <strong>Anleitung</strong> zur manuellen Installation geht darauf ein, wie acall-<br />
Server manuell aufzusetzen sind.<br />
An einem Beispiel sei erläutert, was abläuft, wenn ein acall-RPC ausgeführt<br />
wird. Im RW-gemounteten Verzeichnis /afs/cbs.mpg.de/local/.scripts hat<br />
der Benutzer ernie Änderungen vorgenommen und will die Änderungen im<br />
korrespondierenden RO-gemounteten /afs/cbs.mpg.de/local/scripts sichtbar<br />
machen:<br />
1. Mit folgendem Kommando setzt ernie jetzt das Release in Gang:<br />
ernie@host> instantafs.release -d /afs/cbs.mpg.de/local/.scripts<br />
I: releasing volume ’local.scripts’<br />
2. Das Kommando instantafs.release ermittelt zunächst das Volume<br />
des angegeben Verzeichnisses (es heisst local.scripts), stellt fest, dass<br />
nur acall als Release-Methode in Frage kommt und führt selbstständig<br />
folgendes Unterkommando aus:<br />
instantafs.acall db instantafs.acall-release local.scripts<br />
Die Parameter haben folgende Bedeutung:<br />
db : Der anzusprechende acall-Server.<br />
instantafs.acall-release : Das auf dem acall-Server aufzurufende Kommando. Beginnt das<br />
Kommando mit der Zeichenkette instantafs.acall-, kann<br />
man stattdessen ia: benutzen - also z.B. ia:release anstelle<br />
von instantafs.acall-release.<br />
local.scripts : Ein Parameter <strong>für</strong> das aufzurufende Kommando - es können auch<br />
mehrere angegeben werden.<br />
3. Das Tool instantafs.acall erfragt den korrekten Namen (FQDN)<br />
von acall-db - die Antwort ist <strong>für</strong> dieses Beispiel <strong>server</strong>5.cbs.mpg.de.<br />
4. <strong>server</strong>5.cbs.mpg.de wird per TCP (Port 6999) kontaktiert.<br />
5. Beim acall-Server authentifiziert sich instantafs.acall mit dem<br />
Kerberos-Ticket acall/<strong>server</strong>5.cbs.mpg.de@CBS.MPG.DE und schickt<br />
das Kommando mit seinen Parametern verschlüsselt über den TCP-<br />
Kanal.<br />
6. Der acall-Server schickt, nachdem instantafs.acall-release<br />
ausgeführt wurde, die Ausgaben des Shell-Kommandos zusammen<br />
mit dem exit-Code verschlüsselt zurück zum Client und beendet die<br />
Verbindung.<br />
7. Auf dem Client werden die Ergebnisse ausgegeben:<br />
Released volume root.cell successfully<br />
ernie@host> echo $?<br />
0
7.6 Erhöhte Privilegien <strong>für</strong> einfache Benutzer 151<br />
7.6.4 Einrichten eines acall-Servers<br />
Jeder beliebige Rechner kann ein acall-Server sein - ohne Risiko 9 <strong>für</strong> die anderen<br />
acall-Server. Hier soll als Beispiel der Rechner mekong.cbs.mpg.de, der<br />
sich in der Realm CBS.MPG.DE befindet zum db- und zum krb5-acall-Server<br />
werden:<br />
1. Auf dem Kerberos-Master muss ein Schlüssel <strong>für</strong> den einzelnen Rechner<br />
angelegt werden:<br />
root@kerberos> kadmin.local -q ’addprinc -randkey acall/mekong.cbs.mpg.de’<br />
Der Schlüssel wird in eine keytab geschrieben:<br />
root@kerberos> kadmin.local -q ’ktadd -k /tmp/acall.mekong.keytab’<br />
user@host>acall db ia:helloworld<br />
2. Auf den DNS-Servern der Zelle müssen folgende Records zur Zonendatei<br />
der Domain cbs.mpg.de hinzugefügt werden:<br />
acall-db IN CNAME mekong<br />
acall-krb5 IN CNAME mekong<br />
Diese Records werden später von instantafs.acall benutzt, um<br />
jeweils den acall-Server zu ermitteln, der eine bestimmte Funktion anbietet<br />
- z.B. wird mittels<br />
der Server kontaktiert, der auf den DNS-Namen acall.db hört.<br />
3. Die Keytab muß auf den neu einzurichtenden acall-Server in die Datei<br />
/etc/instantafs/acall.local.keytab kopiert werden - z.B. so:<br />
root@mekong> scp root@kerberos:/tmp/acall.mekong.keytab<br />
/etc/instantafs/acall.local.keytab<br />
root@mekong> instantafs.acall-<strong>server</strong><br />
root@mekong> init q<br />
4. Der acall-Server-Prozess muß auf dem neuen acall-Server gestartet werden:<br />
Es bietet sich an, das automatisch bei jedem Rechnerstart zu erledigen -<br />
z.B. mit folgender Zeile in der Datei /etc/inittab<br />
iaac:23:respawn:/usr/bin/instantafs.acall-<strong>server</strong><br />
Die Kennung iaac wird auch von den InstantAFS-Skripten <strong>für</strong> diesen<br />
Zweck verwendet - sie sollte nicht verändert werden. Der init-Prozess<br />
muss jetzt noch reinitialisiert werden:<br />
Hinweis: Es ist prinzipiell möglich, einen acall-Server ohne einen AFS-Client<br />
zu betreiben, jedoch entfällt dann die komfortable zentrale Konfiguration. Per<br />
Default benutzt der instantafs.acall-<strong>server</strong> die Datei /a/a/etc/acall.access,<br />
um Zugriffe zu authorisieren. Der Parameter - -accessfile<br />
ermöglich es, eine andere Datei anzugeben - z.B. so:<br />
root@host>instantafs.acall-<strong>server</strong> - -accessfile /etc/instantafs.acall.access<br />
9 d.h.: es müssen keine gemeinsamen Schlüssel auf den acall-Servern liegen.
152 7 Rezepte<br />
Test eines acall-Servers<br />
ernie@host>kinit ernie<br />
Um sicherzustellen, dass sich bei der Installation eines acall-Servers keine<br />
Fehler eingeschlichen haben, sollte man ihn danach testen. acall-Server können<br />
ausschliesslich von Kerberos-authentifizierten Benutzern benutzt werden -<br />
anonymer Zugriff ist unmöglich. Für das Beispiel wurde der Benutzer ernie<br />
ausgewählt, am Test mitzuwirken. Nur mit Kerberos-Authentifikation ist acall<br />
nutzbar:<br />
oder auch<br />
ernie@afsclient>tokenmgr -l ernie<br />
Das Kerberos-TGT wird jetzt <strong>für</strong> den acall-Zugriff eingesetzt:<br />
ernie@host> acall db ia:helloworld hello world<br />
This is instanafs-acall’s innovative hello-world program.<br />
You’ve been identified as: ’ernie’<br />
Your Kerberos5-Principal is : ’ernie’<br />
This is the ’db’-acall-<strong>server</strong>.<br />
Those were your arguments:<br />
hello<br />
world<br />
7.7 Dienste AFS-tauglich machen<br />
7.7.1 Rechner-basierte Authentifikation<br />
Wenn das nicht funktioniert, hilft vielleicht ein Blick in Kapitel 8.9 auf Seite<br />
187.<br />
Manche Dienste/Prozesse müssen auf Dateien im AFS zugreifen, die nicht von<br />
jedermann erreichbar sein sollten. Beispiele da<strong>für</strong> sind:<br />
• FTP-Server<br />
• Einfache HTTP-Server.<br />
Solche Dienste haben, wenn sie als root auf einem Rechner gestartet werden,<br />
prinzipiell erst einmal keine Rechte, die sie im AFS nutzen könnten. Es gibt<br />
drei Möglichkeiten, das zu ändern:<br />
1. Der Computer, auf dem der Dienst läuft (oder auch das ganz Subnetz)<br />
kann in eine Gruppe aufgenommen werden. Diese Gruppe kann man dann<br />
in den ACL der benötigten Verzeichnisse aufnehmen und ihr Rechte zuweisen.<br />
2. Der Dienst kann in eine PAG (siehe 3.7.2.3, Seite 49) gekapselt und mit<br />
einem Token ausgestattet werden. Diese Methode ist besser, da man Netzwerkadressen<br />
im Gegensatz zu Tokens leichter fälschen kann.<br />
3. Der Dienst kann mit weitergeleiteten Authentifikationsinformationen von<br />
zugreifenden Nutzern arbeiten.<br />
Es ist möglich, Rechner zu AFS-PT-Gruppen zusammenzufassen (auch ein einzelner<br />
Rechner pro Gruppe ist OK) und diese Gruppen in ACLs zur Rechtever-
7.7 Dienste AFS-tauglich machen 153<br />
user@host>host ftp.cbs.mpg.de<br />
ftp.cbs.mpg.de A 10.0.0.100<br />
gabe zu nutzen. Im folgenden soll der Zugriff auf /afs/cbs.mpg.de/pub/ftp <strong>für</strong><br />
einen Prozess möglich sein, der auf dem Rechner ftp.cbs.mpg.de läuft:<br />
root@host>pts createuser 10.0.0.100<br />
1. Die IP-Adresse des Rechner wird ermittelt (Rechner können nicht per<br />
DNS-Namen eingefügt werden):<br />
2. Für den Rechner wird ein PT-Benutzer angelegt:<br />
3. Eine Gruppe wird angelegt:<br />
root@host>pts creategroup ftphosts<br />
4. Der Rechner wird in die neue Gruppe eingefügt:<br />
root@host>pts add 10.0.0.100 ftphosts<br />
5. Die ACL im zu benutzenden Verzeichnis wird angepasst:<br />
root@host>fs setacl /afs/cbs.mpg.de/pub/ftp ftphosts rl<br />
7.7.2 Tokens <strong>für</strong> Dienste<br />
root@host>pts createuser ftp<br />
Der FTP-Server-Prozess auf ftp.cbs.mpg.de kann jetzt (wie auch alle anderen<br />
Prozesse auf diesem Rechner) lesend auf /afs/cbs.mpg.de/pub/ftp zugreifen.<br />
Diese Methode ist etwas komplizierter aufzusetzen, bietet da<strong>für</strong> aber deutlich<br />
mehr Sicherheit. Am Beispiel des Prozesses proftpd auf afsserv1, der einen<br />
anonymen FTP-Server zur Verfügung stellen wird, soll hier demonstriert werden,<br />
wie das geht:<br />
1. Man benötigt einen neuen PT-Benutzer:<br />
2. Außerdem ist ein neuer Kerberos-Principal nötig. Auf dem Kerberos-<br />
Master-Server muß deshalb der neue Principal in der kadmin-Shell<br />
angelegt werden:<br />
root@host>kadmin.local<br />
kadmin.local: addprinc -randkey ftp<br />
kadmin.local: ktadd -k /tmp/ftp.keytab ftp<br />
kadmin.local: exit<br />
Die Keytab /tmp/ftp.keytab wird mit scp auf afsserv1 ins Verzeichnis /etc<br />
gelegt.<br />
3. Die Datei /etc/proftpd.conf muß folgende Zeile enthalten:<br />
ServerType standalone<br />
4. Mit folgenden Aufruf wird der Server auf afsserv1 nun gestartet:<br />
root@host>tokenmgr -rS ftp -k /etc/ftp.keytab - - /usr/sbin/proftpd -n<br />
Der Parameter -n bewirkt, dass proftpd keinen Background-fork()<br />
macht. Das ist nötig, weil sich tokenmgr sonst beenden würde. Der
154 7 Rezepte<br />
7.7.3 Weiterleiten von Authentifikationsinformationen der Nutzer<br />
7.7.4 Lokal gespeicherte Benutzer-Keytabs<br />
7.8 Homedirectories im AFS<br />
tokenmgr-Prozess ist jedoch wichtig, um das Token regelmäßig aufzufrischen.<br />
Diese Kommandozeile läßt sich auch z.B. über init starten. Dazu ist<br />
dieser Einzeiler in /etc/inittab einzutragen:<br />
ftp:23:respawn:/usr/bin/tokenmgr -rS ftp -k /etc/ftp.keytab<br />
- - /usr/sbin/proftpd -n<br />
Bestimmte Dienste sind in der Lage, Authentifikationsinformationen der Nutzer,<br />
die auf sie zugreifen, <strong>für</strong> den Zugriff auf das AFS einzusetzen. Im folgenden<br />
sind einige Dienste aufgeführt, die das unterstützen. Ausserdem ist beschrieben,<br />
wie das jeweils geschieht:<br />
sshd : OpenSSH ist in der Lage, Kerberos-Tickets von Benutzern zur Authentifikation<br />
heranzuziehen. Mit einigen Modifikationen am SSH können solche<br />
Tickets auch gleich in Tokens umgerechnet und somit <strong>für</strong> den Zugriff<br />
auf das AFS benutzt werden (siehe 7.3.2, Seite 143). Für die Benutzung<br />
von Kerberos-Tickets muß jedoch auf jeden Fall auch der SSH-Client<br />
diese Funktion explizit unterstützen.<br />
proftpd : Der ProFTPd besitzt keine eigene Kerberos-Unterstützung, kann jedoch<br />
in Verbindung mit libpam-krb5 .deb und libpam-openafs-session .deb<br />
aus einem übergebenen Passwort ein gültiges Token erzeugen.<br />
smbd : Samba kann wie auf ProFTPd die unverschlüsselten Passwörter der<br />
Nutzer per PAM-Module in Tokens umrechnen. Aktuelle Windows-<br />
Versionen weigern sich jedoch, unverschlüsselte Passwörter zur Authentifikation<br />
zu benutzen 10 . Für solche Fälle existiert eine weitere<br />
Möglichkeit der Authentifikation von Benutzern (siehe 7.7.4, Seite 154).<br />
Es ist möglich, lokal gespeicherte Kerberos-Keytabs der Benutzer einzusetzen,<br />
um im Namen von Benutzern auf das AFS zuzugreifen. Das ist z.B. <strong>für</strong> Samba<br />
sinnvoll, wenn LANMAN- oder NT-Hashes zur Authentifikation benutzt werden<br />
und dadurch das Passwort des Nutzers <strong>für</strong> die Erstellung eines Tokens nicht<br />
zur Verfügung steht. Einige Theoretische Betrachtungen darüber findet man unter<br />
A.6 auf Seite 230, die <strong>Anleitung</strong> zum Aufsetzen ist unter 4.4.8 auf Seite 96.<br />
Durch seine Pro-Verzeichnis-ACLs (siehe 3.7.3, Seite 51) sind im AFS einige<br />
Dinge beim Anlegen eines Homedirectories zu beachten. Bestimmte Dateien<br />
im Homedirectory sind um jeden Preis vor anderen Benutzern abzuschirmen<br />
(z.B. ∼/.ssh, E-Mail-Verzeichnis). Bei bestimmten Dateien ist es dagegen sinnvoll,<br />
anderen Benutzern 11 Zugriff darauf zu gewähren (z.B. ∼/public_html, Verzeichnis<br />
größerer Projekte). Dem kann man folgendermaßen Rechnung tragen:<br />
• Alle Benutzer dürfen sehen, was im Homedirectory liegt (“l”-Recht).<br />
• Das Lesen von Dateien ist jedoch per Default verboten (kein “r”-Recht).<br />
• Bestimmte Unterverzeichnisse des Homedirectories werden später explizit<br />
<strong>für</strong> andere Nutzer freigeschaltet.<br />
10 Oft läßt sich Windows durch Registry-Patches trotzdem zur Kooperation bewegen.<br />
11 Das Wort “Benutzer” schließt natürlich auch Prozesse ein. Der SSH-Server sshd muss z.B. das<br />
File ∼/.ssh/authorized_keys lesen können.
7.9 Benutzerverwaltung unter InstantAFS 155<br />
7.9 Benutzerverwaltung unter InstantAFS<br />
In diesem Zusammenhang können die Pro-Verzeichnis-ACLs und ihre Vererbung<br />
an nachgeordnete Daten zu einem echten Feature werden. Man kann beispielsweise<br />
Directories wie ∼/streng_privat und ∼/fuer_meine_Arbeitsgruppe<br />
anlegen und mit den entsprechenden ACLs ausstatten. Einfach durch die Ablage<br />
im richtigen Verzeichnis werden die Zugriffsrechte zweckmäßig gesetzt. 12<br />
Das Skript instantafs.homedir enthält Kommandos, um ein AFS-<br />
Homedirectory einzurichten. Es muss mit Zellensuperuserrechten ausgeführt<br />
werden - z.B. durch das acall-Kommando instantafs.acall-usermgr<br />
(siehe 9.2.6, Seite 195). Für einen Administrator ist es durchaus möglich, ein<br />
Homedirectory so zu konfigurieren, dass der Benutzer keine Unterschiede<br />
zum Nicht-AFS-Betrieb bemerkt, ohne auf den Sicherheitsgewinn von AFS<br />
zu verzichten. Wie das instantafs.homedir aber zeigt, sind da<strong>für</strong> oft<br />
symbolische Links nötig.<br />
Ist die acall-Schnittstelle (siehe 7.6.2, Seite 149) korrekt konfiguriert, läßt sich<br />
die Benutzerverwaltung durch InstantAFS stark automatisieren.<br />
InstantAFS beinhaltet das Tool instantafs.usermgr - ein interaktives<br />
Perl-Skript zum Verwalten von Benutzeraccounts. Alle Verwaltungsaufgaben<br />
werden per acall erledigt, wobei die folgenden acall-Funktionen zum Einsatz<br />
kommen:<br />
instantafs.acall-usermgr : zum Manipulieren der 4 Zustandstypen, die einen InstantAFS-Benutzer<br />
characterisieren.<br />
instantafs.acall-volcreate : zum Anlegen von neuen Homedirectory-Volumes.<br />
Es ist auch leicht möglich, die Befehle zum Anlegen und Löschen von Benutzern<br />
in bereits bestehende Benutzerverwaltungsanwendungen (z.B. Webformulare)<br />
zu integrieren, wenn das Ausführen von Shell-Kommandos möglich ist.<br />
Benutzer können unter InstantAFS in einem von drei Zuständen sein:<br />
NOTEXISTENT : Der Benutzer wurde noch nicht angelegt bzw. er wurde wieder gelöscht.<br />
NOTACTIVE : Der Benutzer wurde angelegt, ist jedoch nicht aktiviert. Solche Benutzer<br />
sind Mitglied der PT-Gruppe users-na. Sie haben keine Chance, sich in<br />
der Zelle einzuloggen, da der Kerberos-Server ihnen keine Tickets ausstellt.<br />
Unter /a/user-na/ liegt das Homedirectory eines<br />
solchen Nutzers. Typischerweise sind das User, deren Status sich in absehbarer<br />
Zeit in Aktiv ändert.<br />
ACTIVE : Der Benutzer hat einen gebrauchsfähigen Account, kann unter AFS arbeiten.<br />
Er ist Mitglied der PT-Gruppe users. Sein Homedirectory liegt unter<br />
/a/user/, die Version seines Homedirectories vom letzten<br />
Tag liegt unter /a/user-backup/.<br />
Es existieren noch zwei weitere spezielle Zustände:<br />
VAGUE : Der entsprechende Zustand des Benutzers kann nicht eindeutig identifiziert<br />
werden.<br />
Beispiel: Ein Benutzer ist zugleich in den PT-Gruppen users und<br />
users-na.<br />
UNKNOWN : Der entsprechende Zustand des Benutzers kann nicht ermittelt werden,<br />
weil ein Fehler auftrat.<br />
12 kein Fummeln an umask, kein mühsames chmod, kein Vergessen eben dieser Aktionen
156 7 Rezepte<br />
Hinweise:<br />
Beispiel: Alle Datenabank<strong>server</strong> sind nicht erreichbar und die Abfrage<br />
isGroupmember($user,’users’) greift ins Leere.<br />
• instantafs.usermgr ist nur ein kleines Demonstrationsskript. Man kann<br />
es natürlich benutzen, um die eigene Zelle zu verwalten, i.d.R. sollte man<br />
jedoch auf die acall-Funktionen, die dieses Tool aufruft direkt zugreifen<br />
und diese in das eigene (bereits vorhandene) Benutzermanagement integrieren.<br />
• Abhängig von der eigenen Zelle kann es gewünscht/nötig sein, dass die<br />
Zustanstypen eines Benutzer nicht alle übereinstimmen oder dass die Reihenfolge<br />
der Zustandsänderungen modifiziert werden muss.
7.9 Benutzerverwaltung unter InstantAFS 157
158 7 Rezepte<br />
7.10 Praktische Anwendung der Volume-Replikation<br />
Am Beispiel eines netzwerkweiten Verzeichnisses <strong>für</strong> selbstgeschriebene Skripte<br />
der Benutzer der Beispielzelle (siehe 7.1, Seite 140), soll erläutert werden,<br />
wie man RO-Instanzen praktisch einsetzen kann. Ein Skript-Verzeichnis eignet<br />
sich da<strong>für</strong> i.d.R. gut, da hauptsächlich aus ihm gelesen und relativ selten hinein<br />
geschrieben wird.<br />
Mit folgenden Befehlen wird das Volume angelegt und in den AFS-Namensraum<br />
integriert:<br />
1. Das Volume local.scripts wird mitsamt Lastverteilung angelegt (Erklärung<br />
siehe 6.11.1, Seite 132). Es wird eine Punkt-nicht-Punkt-<br />
Konstruktion benutzt (siehe 3.2.3, Seite 34):<br />
root@host>vos create afsserv1 /vicepa local.scripts<br />
root@host>vos addsite afsserv1 /vicepa local.scripts<br />
root@host>vos addsite afsserv2 a local.scripts<br />
root@host>fs mkmount /afs/.cbs.mpg.de/local/scripts local.scripts<br />
root@host>fs mkmount /afs/.cbs.mpg.de/local/.scripts l.scripts -rw<br />
root@host>vos release root.cell<br />
2. Da es sich um Daten handelt, die hauptsächlich gelesen werden, bedeutet<br />
die Lastverteilung gleichzeitig Ausfallsicherheit (siehe 5.1.1, Seite 98).<br />
3. Die AFS-File<strong>server</strong>, die RO-Instanzen des Zellen-Rootvolumes enthalten,<br />
informieren nach jedem vos release-Aufruf umgehend alle<br />
AFS-Clients, über die Updates in Volume root.cell. Dadurch sind die<br />
neuen Pfade<br />
/afs/cbs.mpg.de/local/scripts<br />
und<br />
/afs/cbs.mpg.de/local/.scripts<br />
sofort auf allen Clients sichtbar.<br />
4. Die User-Profiles (z.B. ∼/.profile oder /etc/profile) sollte man so einstellen,<br />
dass der Pfad /afs/cbs.mpg.de in die $PATH-Umgebungsvariable integriert<br />
wird - die Benutzer sollen schließlich die Skripte komfortable<br />
nutzen können. Die ∼.bashrc sollte also solch eine Zeile enthalten:<br />
PATH="$PATH:/a/local/scripts"<br />
5. Scripte in local.scripts sind im frisch angelegten Zustand nur <strong>für</strong> Zellensuperuser<br />
nutzbar. Man muss noch allen Benutzern Lese- und Ausführungsrechte<br />
auf dem Volume einräumen:<br />
root@host>fs setacl /afs/cbs.mpg.de/local/.scripts system:anyuser rl<br />
6. Soll z.B. der Benutzer ernie das Recht haben, Skripte in dem neuen Volume<br />
zu bearbeiten, muss man ihm in der entsprechenden ACL auch diese<br />
Recht noch erteilen:<br />
root@host>fs sa /a/local/.scripts ernie rlw<br />
Hinweis: Diese Änderung der ACL verschafft ernie noch nicht das Recht,<br />
neue Dateien anzulegen - dazu fehlt das “i”-Recht (siehe 3.7.3, Seite 51).<br />
7. Der Administrator muß ernie jetzt noch die Möglichkeit verschaffen,<br />
das local.scripts-Volume freizugeben. Dazu muß der Datei /a/a/etc/a-
7.11 Ein Projekt aus mehreren Volumes 159<br />
call.access diese Zeile hinzugefügt werden:<br />
db ernie instantafs.acall-release local.scripts<br />
8. Hat ernie Änderungen unter /afs/cbs.mpg.de/local/.scripts durchgeführt<br />
und hält sie <strong>für</strong> sinnvoll, stabil, fehlerfrei kann er die Änderungen in den<br />
Produktionsbereich der Zelle kopieren, d.h. das local.scripts-Volume synchronisieren.<br />
Das geht wie folgt:<br />
ernie@host> instantafs.release local.scripts<br />
oder auch, wenn ernie nichts von Volumes wissen will:<br />
ernie@host> iarel -d /afs/cbs.mpg.de/local/scripts<br />
7.11 Ein Projekt aus mehreren Volumes<br />
7.11.1 Wie wird ein Projekt prinzipiell aufgebaut?<br />
Projekte (Studien, Experimente) eines Institutes werden üblicherweise nicht<br />
von <strong>Administratoren</strong>, sondern von aus EDV-Sicht regulären, Benutzern verwaltet.<br />
An einigen Stellen sind dazu Zellensuperuserrechte nötig, die natürlich <strong>für</strong><br />
normale Benutzer stark eingeschränkt werden sollten.<br />
Speichert man die Daten des Projektes unter AFS ab, sind einige Punkte zu<br />
bedenken:<br />
1. Zuerst muß die Struktur der benötigten Daten ermittelt werden. Fallen<br />
viele große Datensätze an? Werden diese nur <strong>für</strong> dieses Projekt benutzt<br />
oder auch <strong>für</strong> andere?<br />
2. Ein root-Volume <strong>für</strong> dieses Projekt muß angelegt werden. In dieses Volume<br />
werden im AFS dann alle Daten, die mit dem Projekt zu tun haben,<br />
eingehängt, wohl gemerkt: nicht abgespeichert.<br />
3. Für die Autorisation von Zugriffen sollte mindestens eine Gruppe <strong>für</strong> das<br />
Projekt angelegt werden. U.U. sind auch mehrere Gruppen sinnvoll - z.B.<br />
eine <strong>für</strong> Personen mit Schreibrecht, eine <strong>für</strong> Personen mit Leserecht, eine<br />
<strong>für</strong> Personen mit eingeschränktem Leserecht, ... .<br />
4. Eine oder mehrere Personen (z.B. der Leiter der Arbeitsgruppe, die das<br />
Projekt bearbeitet) müssen besondere Rechte eingeräumt bekommen:<br />
• Neue Volumes anlegen: Das ist nur nötig, wenn die Menge oder<br />
die Struktur der Daten die Benutzung mehrerer Volumes sinnvoll<br />
erscheinen lassen.<br />
Der Administrator muß dabei gleich festlegen, auf welchen Servern<br />
die Volumes angelegt, wo Sicherheitskopien (RO-Instanzen) abgelegt<br />
werden und welche weiteren Parameter <strong>für</strong> die neuen Volumes<br />
gelten sollen.<br />
Der Vorgang des Anlegens und Einmountens eines Volumes umfasst<br />
mehrere Befehle - ein kleines Skript kann dem Projektleiter<br />
die Arbeit deutlich erleichtern.<br />
• Bearbeiten der Projekt-Benutzergruppen: Kommen z.B. neue Personen<br />
zur Arbeitsgruppe hinzu, kann der Projektleiter diesen nach<br />
eigenem Ermessen Rechte an dem Projekt einräumen und braucht<br />
sich nicht an <strong>Administratoren</strong> zu wenden.
160 7 Rezepte<br />
7.11.2 Konkretes Beispiel: Vorüberlegungen<br />
7.11.3 Vorbereitung durch den Administrator<br />
5. Das Projekt muss vom Backup-System erfasst werden. Folgende Dinge<br />
sind dabei zu koordinieren:<br />
• Das Erstellen von Backup-Instanzen (siehe 3.1.3, Seite 29), um tägliche<br />
Backups im schnellen Zugriff zu haben. (siehe 7.2, Seite 141)<br />
• Das Synchronisieren der RO-Instanzen mit den RW-Instanzen des<br />
Projektes, um maschinenübergreifende Redundanz der Daten zu haben.<br />
• Das Sichern der Projektvolumes auf die Platten des Backup-Servers<br />
(siehe 5.2.3, Seite 101).<br />
Am Beispiel eines fMRI 13 -Experiments soll demonstriert werden, wie man ein<br />
Projekt so organisiert, dass es von einem normalen Benutzer verwaltet werden<br />
kann. Hier sind einige Kenndaten zu diesem Projekt:<br />
• Man benötigt ein Kürzel <strong>für</strong> das Projekt. Ist es zu lang, kommt man mit<br />
den Volumenamen in Schwierigkeiten. Diese Studie wird fmri-1 heißen,<br />
das Projekt-Volume wird proj.fmri-1 genannt.<br />
• Die Benutzer ernie und bert arbeiten gemeinsam an der Studie, benötigen<br />
beide Schreibzugriff.<br />
• Der Benutzer kermit erhält lediglich Lesezugriff.<br />
• Für die Studie werden große Datensätze (1GByte pro Person) von Versuchspersonen<br />
nach der jeweiligen Messung gespeichert und ausgewertet.<br />
Für die Forschungsergebnisse und die Skripte zum Projekt sind 3GB<br />
Speicherplatz veranschlagt.<br />
• Es werden 40 Versuchspersonen erwartet.<br />
• Der Benutzer ernie leitet die Studie - muß deshalb mit mehr Rechten<br />
ausgestattet werden.<br />
• Die Datenmenge macht es unpraktisch, die komplette Studie in ein Volume<br />
zu legen (siehe 6.11.2, Seite 133). Die Studie bekommt deshalb ein<br />
root-Volume, die Probandendaten werden in eigene Volumes gelegt und<br />
in das Projekt-Root-Volume hineingemountet.<br />
Die Versuchspersonenvolumes werden proj.fmri-1.vpxx genannt, wobei<br />
xx eine zweistellige Zahl ist.<br />
Hinweis: Wenn die Daten der Versuchspersonen auch in weiteren Experimenten<br />
verwendet werden, ist es günstiger, sich <strong>für</strong> eine andere Struktur<br />
zu entscheiden und die Versuchspersonenvolumes z.B. vpxxxx zu nennen.<br />
Diese Volumes können dann je nach Bedarf in die diversen Projekte gemountet<br />
werden.<br />
Der Administrator muß vorher einiges einstellen. Werden oft Projekte angelegt,<br />
bietet sich hier ein kleines Shellskript an, das solche Aufgaben automatisiert -<br />
also ein Projekt-Generator.<br />
Der Administrator der Zelle benutzt tokenmgr, um eine Shell mit Zellensuperuserrechten<br />
zu starten:<br />
root@host>tokenmgr -S admin bash<br />
13 functional Magnetic Resonance Imaging; Funktionale Magnet-Resonanz-Tomographie
7.11 Ein Projekt aus mehreren Volumes 161<br />
7.11.4 Backups<br />
Das Projekt bekommt ein Root-Volume...<br />
root@host>vos create afsserv1 a proj.fmri-1<br />
... plus 2 RO-Instanzen...<br />
admin@afs>vos addsite afsserv1 a proj.fmri-1<br />
admin@afs>vos addsite afsserv2 a proj.fmri-1<br />
Das Projekt wird ins Dateisystem gemountet. Da an dem Projekt gearbeitet<br />
wird, sollte es einen RW-Mountpoint erhalten (siehe 3.2, Seite 32):<br />
admin@afs>fs mkm /a/.projects/fmri-1 -rw<br />
admin@afs>vos release projects<br />
Eine üppige Quota (3GByte) wird vergeben:<br />
root@host>fs sq /a/projects/fmri-1 3000000<br />
Achtung: Es handelt sich dabei nicht um die Quota <strong>für</strong> Daten der Probanden,<br />
sondern um die Quota des root-Volumes des Projektes.<br />
Speziell <strong>für</strong> das Projekt werden zur leichteren Administration 14 zwei von ernie<br />
verwaltete PT-Gruppen erstellt:<br />
admin@afs>pts creategroup -name proj.fmri-1.writers -owner ernie<br />
admin@afs>pts creategroup -name proj.fmri-1.readers -owner ernie<br />
... und Rechte <strong>für</strong> die Mitarbeiter zugewiesen. ernie erhält zusätzlich das a-<br />
Recht (siehe 3.7.3.2, Seite 51), damit er Mountpoints anlegen und ACLs ändern<br />
darf:<br />
admin@afs>fs sa /a/projects/fmri-1 ernie rlwidka proj.fmri-1 rlwidk<br />
Das neue Projektvolume erhält noch etwas Struktur:<br />
root@host>mkdir /a/projects/fmri-1/documents<br />
root@host>mkdir /a/projects/fmri-1/probands<br />
root@host>mkdir /a/projects/fmri-1/scripts<br />
Das Projekt wird ins Backup aufgenommen (siehe 5.2, Seite 100). Dazu wird<br />
folgende Zeilen in die Datei /a/a/etc/backup.conf eingefügt:<br />
proj-fmri - proj\.fmri-1 proj\.fmri-1\.prb\..* Die Volumes<br />
des Projektes werden durch diese Zeile zusammengefasst und können so<br />
leicht dem Backup-System übergeben werden.<br />
Beachten Sie, daß das Backup-System auch angewiesen werden muß, sich der<br />
Volumes des Projektes anzunehmen (siehe 5.2.3.5, Seite 107). Das geschieht in<br />
der Datei /etc/cron.d/instantafs-backup auf dem Backup-Server. Dabei gilt es,<br />
mehrere Fälle zu unterscheiden:<br />
Fall 1 Das Backup-System erfaßt bereits Volumes, die auf eine Weise gesichert<br />
werden, wie man sich das bei den Volumes des Projektes auch wünscht<br />
14 Weiteren Mitarbeitern können auf diese Weise leichter Rechte an dem Projekt zugewiesen wer-<br />
den.
162 7 Rezepte<br />
(z.B: 1x pro Woche full, sonst inkrementell). Die Beispielzeilen<br />
0 30 * * 6 root instantafs.backup -rob /week users cell<br />
0 30 * * 2 root instantafs.backup -ob /week/mo users cell<br />
0 30 * * 3 root instantafs.backup -ob /week/tu users cell<br />
0 30 * * 4 root instantafs.backup -ob /week/we users cell<br />
0 30 * * 5 root instantafs.backup -ob /week/th users cell<br />
müßten dann durch folgende ersetzt werden:<br />
0 30 * * 6 root instantafs.backup -rob /week users cell proj-fmri<br />
0 30 * * 2 root instantafs.backup -ob /week/mo users cell proj-fmri<br />
0 30 * * 3 root instantafs.backup -ob /week/tu users cell proj-fmri<br />
0 30 * * 4 root instantafs.backup -ob /week/we users cell proj-fmri<br />
0 30 * * 5 root instantafs.backup -ob /week/th users cell proj-fmri<br />
Fall 2 Das Backup-System erfaßt noch keine Volumes. Es müssen also neue<br />
instantafs-backup-Aufrufe in /etc/cron.d/instantafs-backup eingetragen<br />
werden:<br />
0 30 * * 6 root instantafs.backup -rob /week users cell proj-fmri<br />
0 30 * * 2 root instantafs.backup -ob /week/mo users cell proj-fmri<br />
0 30 * * 3 root instantafs.backup -ob /week/tu users cell proj-fmri<br />
0 30 * * 4 root instantafs.backup -ob /week/we users cell proj-fmri<br />
0 30 * * 5 root instantafs.backup -ob /week/th users cell proj-fmri<br />
Achtung: Wenn diese Datei noch nicht existiert, ist etwas nicht in Ordnung. Es<br />
könnte sein, daß Sie gerade nicht auf dem wirklich Backup-Server eingeloggt<br />
sind oder aber, daß das Backup-System noch nicht konfiguriert wurde (siehe<br />
5.2.3, Seite 101).<br />
Fall 3 Das Backup-System ist, wie in Beispiel 2 in der Datei /usr/share/doc/instantafsdoc/examples/instantafs-backup.cron<br />
im Paket instantafs-doc .deb beschrieben,<br />
darauf eingestellt, alle Volume-Gruppen in /a/a/etc/backup.conf zu erfassen -<br />
z.B. so:<br />
0 30 * * 6 root instantafs.backup -rob /woche -m<br />
0 30 * * 2 root instantafs.backup -ob /week/mo -m<br />
0 30 * * 3 root instantafs.backup -ob /week/tu -m<br />
0 30 * * 4 root instantafs.backup -ob /week/we -m<br />
0 30 * * 5 root instantafs.backup -ob /week/th -m<br />
7.11.5 Acall-Einstellungen<br />
In diesem Fall ist auf dem Backup-Server nichts mehr zu tun.<br />
Der Benutzer ernie bekommt Rechte zum Ausführen von acall-Kommandos<br />
(siehe 7.6.2, Seite 149) erteilt. Diese Zeile in der Datei /a/a/.etc/acall.access<br />
erlaubt es ernie, über die acall-Schnittstelle Volumes anzulegen (siehe 6.3.2,<br />
Seite 117):
7.11 Ein Projekt aus mehreren Volumes 163<br />
7.11.6 Komfort<br />
root@host>iarel -d /a/a/.etc<br />
# ! / b i n / bash<br />
# Anlegen e i n e s V e r s u c h s p e r s o n e n v o l u m e s<br />
db ernie instantafs.acall-volcreate \S+<br />
Mit der folgenden Konfigurationszeile wird genau definiert, welche Volumes<br />
ernie anlegen darf, auf welchem Rechner sie angelegt werden, welche ACLs<br />
im Root-Verzeichnis des neuen Volumes jeweils gesetzt werden. Ausserdem<br />
wird die Quota <strong>für</strong> neue Volumes festgelegt (1GByte <strong>für</strong> jede Versuchsperson)<br />
und eine Backup-Instanz angelegt. Die Zeile muß der Datei /a/a/.etc/acallvolcreate.conf<br />
hinzugefügt werden.<br />
Achtung:Es ist wirklich nur eine Zeile:<br />
s e t −e<br />
VP="$1"<br />
i f ! echo "$VP" | e g r e p −q ’^[0-9][0-9]$’ ; then<br />
echo "E: Bitte nur zweistellige Zahlen als Personen verwenden"<br />
e x i t 1<br />
f i<br />
# Anlegen des neuen Probandenvolumes<br />
i n s t a n t a f s . a c a l l db i n s t a n t a f s . a c a l l −v o l c r e a t e p r o j . fmri −1. prb . $VP<br />
rolocation1=afsserv1.cbs.mpg.de/a,rolocation2=afsserv2.cbs.mpg.de<br />
backup,quota=1000000,acl=ernie;rlwidka;proj.fmri-1.writers;rlwidk<br />
proj.fmri-1.readers;rl<br />
Diese Zeile legt die RW-Instanz jedes Volumes, das per acall von ernie erzeugt<br />
wird, auf dem Server afsserv1.cbs.mpg.de an. Ausserdem werden jeweils RO-<br />
Instanzen auf den Servern afsserv1.cbs.mpg.de und afsserv2.cbs.mpg.de angelegt.<br />
Hinweis: Das Volume, in dem /a/a/.etc liegt, muß danach released werden:<br />
Der User ernie ist sehr bequem und will sich keine komplizierten Kommandos<br />
merken. Deshalb legt der Administrator unter /a/projects/fmri-1/scripts/newvp.sh<br />
ein Skript an, mit dem Probandenvolumes erzeugt werden können:<br />
# Anlegen e i n e s M o u n t p o i n t s im fMRI−1−P r o j e k t v e r z e i c h n i s<br />
f s mkm / a f s / cbs . mpg . de / p r o j e c t s / fmri −1/ p r o b a n d s / $VP p r o j . fmri −1. prb . $VP<br />
echo "I: Das Verzeichnis der neuen Versuchsperson lautet:"<br />
echo "/afs/cbs.mpg.de/projects/fmri-1/probands/$VP"<br />
7.11.7 Tägliche Arbeit mit dem Projekt<br />
Listing 7.2: Das Beispielskript zum Anlegen von Volumes<br />
Alles weitere muß ernie selbst erledigen.<br />
Ein Proband wird im MRT untersucht, seine Daten müssen untergebracht<br />
werden. ernie legt eine neue Versuchsperson an:<br />
ernie@host> /afs/cbs.mpg.de/projects/fmri-1/scripts/newvp 01<br />
I: Das Verzeichnis der neuen Versuchsperson lautet:<br />
/afs/cbs.mpg.de/projects/fmri-1/probands/01
164 7 Rezepte<br />
Die Daten zur Versuchsperson werden in das neue Volume kopiert:<br />
ernie@host> cp -a /tmp/fmri_messdaten/* \<br />
/afs/cbs.mpg.de/projects/fmri-1/probands/01<br />
Je nachdem, in welcher der beiden Projektgruppen Benutzer sind, können sie<br />
nun auf die Daten des Projekts lesend bzw. lesend und schreibend zugreifen.<br />
ernie kann neue Probanden anlegen, löschen kann er sie jedoch nicht. Soll ein<br />
Versuchspersonen–Volume entfernt werden, muß er sich an den Administrator<br />
wenden.<br />
Die Struktur Beispielzelle (siehe 7.1, Seite 140) hat durch das fMRI-Projekt<br />
einige Änderungen erfahren:<br />
Pfad Volume B e s c h r e i b u n g<br />
+ M o u n t p o i n t t y p<br />
Listing 7.3: Volumestruktur im Beispielprojekt<br />
/ a f s r o o t . a f s Das AFS−Root−V e r z e i c h n i s<br />
|− cbs . mpg . de r o o t . c e l l Das Root−V e r z e i c h n i s d e r Z e l l e<br />
| |− p r o j e c t s p r o j e c t s Root−Volume f u e r P r o j e k t e<br />
| | ‘− fmri −1 p r o j . fmri −1 (−rw ) Das Root−Volume des fmri −1−P r o j e k t e s<br />
| | |− documents<br />
| | |− r e s u l t s<br />
| | |− s c r i p t s<br />
| | ‘− p r o b a n d s<br />
| | |− 01 p r o j . fmri −1. prb . 0 1 (−rw ) Datenvolume zu e i n e r V e r s u c h s p e r s o n<br />
| | ‘− 02 p r o j . fmri −1. prb . 0 2 (−rw ) Datenvolume zu e i n e r a n d e r e n VP .<br />
| |− . p r o j e c t s p r o j e c t s (−rw )<br />
| ‘− . . .<br />
‘− . . .<br />
ernie kann jederzeit neue Mitglieder in die PT-Gruppen des Projektes aufnehmen.<br />
Mit folgendem Befehl erhält z.B. kermit Schreibrechte:<br />
root@host>pts add kermit proj.fmri-1.writers<br />
Soll z.B. bert ausgeschlossen werden, ist folgendes einzugeben:<br />
root@host>pts remove bert proj.fmri-1.writers<br />
7.12 Ein Debian-Server <strong>für</strong> Instantafs<br />
Bert würde seine Rechte u.U. jedoch nicht sofort verlieren (siehe 3.7.3.4, Seite<br />
54).<br />
Es ist sinnvoll, alle Pakete, die <strong>für</strong> InstantAFS zusätzlich zu den original-<br />
Debian-Paketen benötigt werden, auf einen Server zu legen, so dass man auf<br />
den zu installierenden Rechnern bequem mit apt-get arbeiten kann. Dazu ist<br />
folgendes zu tun:<br />
root@host>apt-get install apt-utils<br />
1. Man wählt einen Rechner als Paket<strong>server</strong> aus - dieser sollte später kein<br />
AFS-Server der Zelle werden. Im Beispiel heisst er debserv.cbs.mpg.de<br />
2. Im InstantAFS-Wiki ist beschrieben, wo man die Pakete herunterladen<br />
kann.<br />
3. Man sollte die ganze Verzeichnisstruktur in ein Verzeichnis ablegen. Beispiel:<br />
/DEBSERV/instantafs-pakete<br />
4. Auf dem Paket<strong>server</strong> wird das Paket apt-utils .deb benötigt.
7.13 Automatische Client-Installation mit instantafs-customclient 165<br />
5. Für die InstantAFS-Pakete müssen das Packages- und das Sources-File<br />
erzeugt werden:<br />
root@host>cd /DEBSERV/instantafs-pakete<br />
root@host>apt-ftparchive packages . | tee Packages | gzip Packages.gz<br />
root@host>apt-ftparchive sources . | tee Sources | gzip Sources.gz<br />
6. Ein FTP-Server stellt dann das /DEBSERV-Verzeichnis zur Verfügung.<br />
Da<strong>für</strong> eignet sich z.B. proftpd .deb . Ein HTTP-Server (z.B. apache .deb )<br />
geht auch - dann müssen jedoch die URLs der sources.list-Einträge entsprechend<br />
angepaßt werden.<br />
7. Auf jedem Rechner, auf dem man InstantAFS-Pakete von diesem<br />
Debian-Server installieren will, müssen noch diese beiden Zeilen an die<br />
Datei /etc/apt/sources.list angefügt werden:<br />
deb ftp://debserv.cbs.mpg.de/instantafs-pakete/ /<br />
deb-src ftp://debserv.cbs.mpg.de/instantafs-pakete/ /<br />
root@host>apt-get update<br />
8. Schliesslich zieht man sich die Paketliste auf den Rechner:<br />
7.13 Automatische Client-Installation mit instantafs-customclient<br />
Das Paket instantafs-customclient .deb kann verwendet werden, um ein beliebig<br />
großes Netzwerk von Computern AFS-ready zu machen. So funktioniert<br />
es:<br />
1. Während einer InstantAFS-Installation (siehe 4.3, Seite 69) werden die<br />
Parameter der neuen Zelle als XML-File gespeichert. Das geht mit dem<br />
instantafs.setup-Menüpunkt write-config. Beachten Sie, dass dabei<br />
2 Dateien geschrieben werden. Für instantafs.customclient .deb ist<br />
die Datei mit der Endung .public 15 wichtig. Im folgenden wird angenommen,<br />
dass die Datei instantafs.xml gespeichert wurde - es wird also die<br />
Datei instantafs.xml.public benötigt.<br />
2. Beachten Sie, dass unter dem Menüpunkt ccoptions die Möglichkeit<br />
besteht, das Paket instanafs-customclient .deb zu steuern. In dem erscheinenden<br />
Untermenü lassen sich folgende Flags setzen:<br />
afsclient : Diese Option steuert, ob der AFS-Cachemanager konfiguriert und<br />
gestartet werden soll.<br />
dns : Wenn diese Option aktiviert ist, modifiziert das Paket<br />
instantafs-customclient .deb die Datei /etc/resolv.conf und trägt in<br />
diese die gewählten DNS-Server ein.<br />
ntp : Wenn diese Optione ausgewählt ist, wird der NTP-Client auf AFS-<br />
Clients automatisch eingerichtet.<br />
krb5client : Diese Option steuert, ob die Datei /etc/krb5.conf modifiziert werden<br />
soll. Das Sollte praktisch niemals nötig sein - aber man weiss ja nie.<br />
nss_host : steuert, ob die host-Zeile in /etc/nsswitch.conf modifiziert werden<br />
soll.<br />
15 Also die Datei, in der keine hochgeheimen Informationen über die Zelle stehen.
166 7 Rezepte<br />
Ist die Option gesetzt, wird DNS als host-Namensdienst eingetragen.<br />
Ist sie es nicht, wird nichts verändert, was z.B. dann sinnvoll<br />
ist, wenn host-Lookups per NIS oder LDAP durchgeführt werden<br />
sollen.<br />
nss_passwd : steuert, ob die passwd-Zeile in /etc/nsswitch.conf modifiziert<br />
werden soll.<br />
Das ist z.B. dann sinnvoll, wenn auf den reinen AFS-Client-<br />
Computer der Zelle ein anderer Benutzer-Namensdienst eingesetzt<br />
werden soll (z.B. LDAP oder NIS). Ist die Option gesetzt, aktiviert<br />
instantafs-customclient .deb libnss-ptdb .deb zur Namensauflösung.<br />
nss_justadd : steuert, ob die InstantAFS-default-Namensdienste (host:dns und<br />
passwd:ptdb) nur zu bereits definierten Namensdiensten hinzugefügt<br />
werden sollen. Das ist sinnvoll, wenn ein Netzwerk z.B.<br />
langsam von NIS/NFS auf AFS migriert werden soll - “Legacy”-<br />
Nutzer können sich so weiterhin anmelden, neu hinzukommende<br />
AFS-Nutzer jedoch auch.<br />
Alle Optionen werden in dem Konfigurations-XML-File gespeichert.<br />
3. Jetzt gibt’s 2 Möglichkeiten:<br />
HTTP : Man kann die Datei instantafs.xml.public auf einen Web<strong>server</strong><br />
legen, so dass sie unter der URL<br />
http://instantafs-config/instantafs.xml.public.<br />
net erreichbar ist.<br />
Eigenes Paket : Man kann instantafs.xml.public auch direkt in das instantafscustomclient<br />
.deb -Paket packen. Unter 7.14.1 ist erklärt, wie das<br />
geht.<br />
4. Auf den Clients installiert man nun das Paket:<br />
root@host>apt-get install instantafs-customclient<br />
5. Je nachdem, ob das Konfigurationsfile im Paket enthalten ist oder nicht,<br />
versucht instantafs-customclient .deb , die Konfiguration jetzt per wget<br />
vom Web<strong>server</strong> zu laden.<br />
6. Manchmal 16 ist jetzt noch ein Neustart auf dem Client fällig.<br />
7.14 Schutz des AFS-Keys mit Echtzeitverschlüsselung<br />
Ist man im Besitz des AFS-Schlüssels, kann man alle Server der Zelle kontrollieren.<br />
Natürlich kann man die Server gegen diverse Angriffsszenarien schützen.<br />
Wenn jedoch ein Server nicht verschlossen in einem Serverraum steht - besteht<br />
die Gefahr, dass durch Diebstahl oder unbemerktes Boot-CD-Starten der<br />
AFS-Schlüssel kompromitiert wird. Dagegen hilft nur Echtzeitverschlüsselung<br />
des Filesystems, auf dem der Schlüssel liegt.<br />
Das Paket instantafs-cryptofs .deb bietet eine komfortable Möglichkeit, kritische<br />
Daten auf AFS-Server zu sichern. Dabei werden Verzeichnisse durch sog.<br />
bind-Mounts auf ein verschlüsseltes Filesystem umgebogen:<br />
/etc/openafs/<strong>server</strong> : In diesem Verzeichnis liegt der AFS-Zellenschlüssel KeyFile.<br />
16 wenn der AFS-Cachemanager vorher lief und nicht korrekt heruntergefahren werden kann
7.14 Schutz des AFS-Keys mit Echtzeitverschlüsselung 167<br />
/var/lib/krb5kdc : In diesem Verzeichnis liegt auf AFS-DB-Servern üblicherweise die<br />
Kerberos-Datenbank.<br />
/vicepz : Dieses Verzeichnis stellt später eine verschlüsselte AFS-Datenpartition<br />
zur Verfügung. Hier können also auf einem AFS-File<strong>server</strong> Instanzen von<br />
Volumes mit extrem kritischen Daten (z.B. das Volume a.etc.secret) abgelegt<br />
werden.<br />
Das erwartet den Administrator eines mit instantafs-cryptofs .deb gesicherten<br />
Servers:<br />
1. Der Rechner wird eingeschaltet (oder neu gestartet)<br />
2. InstantAFS-CryptoFS meldet sich mit einem Prompt, hier muss das<br />
Passwort eingegeben werden. Alternativ kann auch eine Floppy benutzt<br />
werden (Details dazu gibt’s weiter unten). I.d.R. sorgt ein timeout (einzustellen<br />
in /etc/default/instantafs-cryptofs da<strong>für</strong>, dass nach einer gewissen<br />
Zeit ohne Crypto-Filesystem weitergebootet wird.<br />
3. instantafs.cryptofs setzt ein verschlüsselndes Loopback-Device ( /dev/loop0<br />
auf und mounted das verschlüsselte Image in der Datei /var/lib/instantafs/cryptofs/image<br />
unter /var/lib/instantafs/cryptofs/mnt.<br />
4. An die geschützten Pfade werden anschliessend die entsprechenden Unterverzeichnisse<br />
aus dem verschlüsselten Filesystem gemountet.<br />
5. Wurden alle geschützten Pfade erfolgreich gemountet, wird die Datei<br />
/var/lib/instantafs/cryptofs/ok erzeugt - andernfalls wird sie entfernt. Die<br />
Existens dieser Datei signalisiert später bestimmten Anwendungen, dass<br />
sie sicher starten können.<br />
6. Die init.d-Start-Skripte der Pakete openafs-file<strong>server</strong> .deb , krb5-kdc .deb<br />
und krb5-admin-<strong>server</strong> .deb werden aufgerufen, überprüfen die Existenz<br />
von /var/lib/instantafs/cryptofs/ok und starten bei Erfolg die jeweiligen<br />
Original-init.d-Skripte um den jeweiligen Dienst hochzufahren.<br />
Das ganze Procedure ist nötig, um die Dienste am Starten zu hindern,<br />
wenn das Crypto-Filesystem nicht gestartet wurde/werden konnte.<br />
So setzt man instantafs-cryptofs .deb auf:<br />
1. Das Paket muss mit<br />
root@host>apt-get install instantafs-cryptofs<br />
installiert werden.<br />
2. Mit folgendem Kommando wird das instantafs-cryptofs .deb initialisiert:<br />
root@host>instantafs.cryptofs - -mount - -init<br />
Man wird hier zur Eingabe eines Passwortes aufgefordert. Dieses sollte<br />
durchaus 50 Zeichen lang und mit Zahlen, Gross-/ Kleinschreibung und<br />
Sonderzeichen gespickt sein.<br />
Hinweise:<br />
• Komfortabel ist, das Passwort in eine Datei (als eine Zeile) zu<br />
schreiben und diese Datei auf eine msdos-formatierte Diskette zu<br />
speichern. Die Datei muss auf der Diskette iacrypto heissen. Wenn<br />
man nun nach einem Passwort gefragt wird, drückt man einfach<br />
Return und folgt den Anweisungen.<br />
• Eine solche Diskette ist sehr wertvoll. Man sollte mindests 2 identische<br />
davon haben. Auch könnte es hilfreich sein, dass Passwort in
168 7 Rezepte<br />
ausgedruckter Form zu haben.<br />
• Passwort/Diskette sollte(n) an einer Stelle gelagert werden, an die<br />
man nicht so leicht herankommt - ein Tresor z.B.<br />
• Den Schlüssel zu einem Tresor kann man verlegen - eine zweite<br />
Lagerstätte <strong>für</strong> Diskette/Passwort ist zu empfehlen - z.B. ein zweiter<br />
Tresor.<br />
3. Wenn das geklappt hat, sollte man jetzt, das verschlüsselnde Filesystem<br />
erst einmal wieder abschalten:<br />
root@host>instantafs.cryptofs - -umount<br />
root@host>instantafs.cryptofs - -mount<br />
7.14.1 InstantAFS neu paketieren<br />
, die Verzeichnisse /etc/openafs/<strong>server</strong> und /var/lib/krb5kdc löschen und<br />
anschliessend das verschlüsselte Dateisystem wieder starten:<br />
4. Durch Ändern der Zeile ENABLED=”no” in ENABLED=”yes” wird<br />
das verschlüsselnde Filesystem bei jedem Systemstart hochgefahren.<br />
Ziele der Verschlüsselung:<br />
• Der Diebstahl eines Servers soll sich nicht auf die Sicherheit aller Daten<br />
der Zelle auswirken können. Der AFS-Schlüssel und die Kerberos-<br />
Datenbank sind die Daten auf AFS-Servern, die ohne Verschlüsselung<br />
auf einem entwendeten Server Superuserrechte in der betroffenen Zelle<br />
bringen würden.<br />
• Auch eine Echtzeitverschlüsselung kann nicht vor lokalen Angriffen (z.B.<br />
durch Hardware-Keylogger) schützen.<br />
• Die Verschlüsselung soll (und kann) nicht vor Angriffen über das Netzwerk<br />
auf den laufenden Rechner schützten - schliesslich ist das verschlüsselte<br />
Filesystem im laufenden Betrieb einfach kopierbar.<br />
Haben sie die InstantAFS-Pakete bereits auf einem Paket<strong>server</strong> liegen (siehe<br />
7.12, Seite 164) und diesen in die lokale /etc/apt/sources.list-Datei eingetragen,<br />
wechselt man in ein leeres Verzeichnis und gibt ein:<br />
root@host>apt-get source instantafs<br />
Ein einzelnes Verzeichnis instantafs- sollte entstanden sein.<br />
In dieses Verzeichnis kopiert man die Konfigurationsdatei - sie muß dann instantafs.xml.public<br />
heißen. Ändern sie jetzt noch folgende Daten des Paketes:<br />
Versionsnummer : Damit das Paket möglichst unverwechselbar ist, sollte es eine eindeutige<br />
Versionskennung (zu finden in der Datei debian/changelog) bekommen.<br />
Beispiel: Die aktuelle Version (siehe erste Zeile) sei 1:0.9.7-2 und die<br />
neue Zelle soll eva.mpg.de heißen. Die Versionskennung 1:0.9.7-2+eva<br />
bietet sich an.<br />
Maintainer : Das selbstgepackt Paket sollte auf irgendeine Weise darauf hinweisen,<br />
wer es gepackt hat. Dazu trägt man in die Datei debian/control in der 4.<br />
Zeile und in der Datei debian/changelog in der ersten Zeile, die mit “<br />
- -” beginnt, die eigene eMail-Adresse ein.
7.15 Daten über die Zelle zentral sammeln 169<br />
InstantAFS benötigt u.U. noch einige Pakete, um gepackt werden zu können:<br />
root@host>apt-get build-dep instantafs dpkg-dev fakeroot<br />
Jetzt kann das neue InstantAFS-Paket gepackt werden:<br />
root@host>dpkg-buildpackage -rfakeroot<br />
7.15 Daten über die Zelle zentral sammeln<br />
7.15.1 Punkt oder nicht<br />
Die neu entstandenen Dateien werden zusätzlich auf den eigene Paket<strong>server</strong><br />
gelegt und die Paketlisten neu gescannt - evtl. hilft die Beschreibung unter 7.12<br />
auf Seite 164).<br />
Viele InstantAFS-Programme benötigen Informationen über die AFS-Zelle<br />
(Volumes, TapeController, ...). Natürlich können solche Informationen sobald<br />
sie gebraucht werden direkt von den AFS-Servern eingelesen werden.<br />
Es geht jedoch eleganter. instantafs.vs<strong>server</strong> (siehe 9.2.27, Seite 205) liesst<br />
alle Daten über die Zelle regelmäßig per default aller 7 Minuten ein und legt<br />
sie in einem komprimierten XML-File unter /a/a/.cellinfo ab - ein Pfad, der per<br />
default in dem Volume a.cellinfo liegt.<br />
Benötigt ein Programm nun Informationen über die Zelle, kann es dieses komprimierte<br />
XML-File einlesen. Die Daten werden aus einer Quelle gelesen, die<br />
durch RO-Replikation auch auf mehreren Rechnern liegen kann. Ist ein File<strong>server</strong><br />
ausgefallen, so ist das in dem XML-File vermerkt - das interessierte Programm<br />
muß nicht die potentiell langen Timeouts der vol<strong>server</strong>-Anfragen abwarten.<br />
Der Geschwindigkeitsvorteil kann dabei durchaus mehrere Größenordnungen<br />
betragen.<br />
Russ Allbery setzt ein ähnliches Verfahren ein, um Informationen über Volumes<br />
zentral zu sammeln, jedoch mit einigen Unterschieden zur InstantAFS- Lösung:<br />
• Die Daten werden in einer SQL-Datenbank und nicht als XML-File gespeichert.<br />
• Die InstantAFS-Lösung ist eher als Allheilmittel zur Geschwindigkeitssteigerung<br />
(vor allem bei Serverausfällen) gedacht, wohingegen Russ Allbery’s<br />
Methode wohl primär <strong>für</strong> statistische Auswertungen gedacht ist.<br />
• Alle Daten im InstantAFS-XML-File enthalten einen Zeitstempel, um zu<br />
definieren, ob und wann sie aus der Zelle ausgelesen wurden.<br />
Mehr Informationen gibt’s hier:<br />
http://www.eyrie.org/~eagle/notes/afs/afsdb.html<br />
Per default legt instantafs.vs<strong>server</strong> das XML-file in /a/a/.cellinfo ab, wohingegen<br />
Programme, die libafs-instant benutzen, auf /a/a/cellinfo zugreifen.<br />
Hintergedanke dieses Unterschiedes ist, dass es von Vorteil sein kann, das<br />
XML- File auf mehreren Servern abzulegen, wenn es z.B. eine langsam<br />
angebundene Außenstelle gibt, in der auch InstantAFS-Skripte arbeiten.<br />
instantafs.vs<strong>server</strong> würde dann das a.cellinfo-Volume regelmäßig in die<br />
Aussenstelle replizieren und die Clients dort auch auf diese Kopie zugreifen.<br />
Gibt es nur ein schnelles lokales Netz, kann man auf die RO-Replikation verzichten.
170 7 Rezepte<br />
7.16 Schnelles Kopieren eines Volumes<br />
Der Pfad /a/a/cellinfo kann so entweder in eine RO-Instanz oder direkt in die<br />
RW-Instanz von a.cellinfo führen, ohne dass die Zugriffe des instantafs.vs<strong>server</strong><br />
auf /a/a/.cellinfo beeinträchtigt werden.<br />
Gelegentlich ist es nötig, eine Instanz komplett von A nach B zu kopieren, wobei<br />
die neue Instanz jedoch nicht von der alten abhängig 17 sein soll. Im klassischen<br />
AFS kommt nun vos dump | vos restore zum, Einsatz, wobei<br />
die Daten jedoch 2 Mal 18 über’s Netzwerk geschickt werden. Seit OpenAFS 1.3<br />
existiert ein Kommando, was die selbe Funktionalität bietet, den Quellfile<strong>server</strong><br />
jedoch anweist, die Daten direkt zum Zielfile<strong>server</strong> zu schicken.<br />
So funktioniert’s:<br />
admin@afs> vos copy Quellvolume Quell<strong>server</strong> Quellpartition\<br />
Zielvolume Ziel<strong>server</strong> Zielpartition<br />
7.17 Eine komplette AFS-Partition mit allen Volume-Instanzen verschieben<br />
7.17.1 AFS-Boardmittel<br />
Da<strong>für</strong> gibt es mehrere Möglichkeiten - welche davon am günstigen ist, muss<br />
jeder selbst entscheiden. Partition kann man dabei immer auch auf mehrere Partitionen<br />
beziehen.<br />
Wenn man Zeit hat - z.B. weil der Server in absehbarer Zeit zugunsten eines<br />
neuen ausser Dienst gestellt werden soll - kann man einfach alle RW-Instanzen<br />
mit vos move verschieben und die vorhandenen RO-/Backup-Instanze neu<br />
anlegen. Da<strong>für</strong> kann man auch folgenden Befehl benutzen:<br />
admin@afs>iat evacuate Quell<strong>server</strong>/Quellpartition Ziel<strong>server</strong>/Zielpartition<br />
7.17.2 Speichersubsystem umbauen<br />
Vorteil: Es gibt praktisch keine Unterbrechung (abgesehen von der Zeit <strong>für</strong>’s<br />
erstellen der Move-Clone-Instanzen) <strong>für</strong> die Nutzer der Zelle.<br />
Nachteil: Es dauert sehr lange, da eine kryptografisch gesichert Übertragung<br />
zwischen den File<strong>server</strong>n statfindet.<br />
Man kann einfach das Speichersubsystem vom alten Server abkoppeln und an<br />
den neuen Server anschliessen. Das sorgt zwar <strong>für</strong> eine merkliche Unterbrechung<br />
<strong>für</strong> Nutzer (es seie denn, es steht ein Wartungsinterval - z.B. Nachts - zur<br />
Verfügung). So muss das ablaufen:<br />
1. Neuen File<strong>server</strong> einrichten (siehe 6.4, Seite 118).<br />
2. AFS-File<strong>server</strong> auf dem alten Server abschalten:<br />
admin@afs>bos stop Alter Servername fs<br />
3. Speichersubsystem abkoppeln. Je nach Speichersystem ist ein Neustart<br />
da<strong>für</strong> nötig.<br />
17 Es soll also keine RO-Instanz des alten sein<br />
18 Quellfile<strong>server</strong> ⇒ vos dump , vos restore ⇒ Zielfile<strong>server</strong>
7.17 Eine komplette AFS-Partition mit allen Volume-Instanzen verschieben 171<br />
4. AFS-File<strong>server</strong> auf dem alten Server wieder hochfahren:<br />
admin@afs>bos start Alter Servername fs<br />
5. Volume-Instanzen auf der verschobenen Partition aus der VLDB abmelden:<br />
admin@afs>vos syncvldb Alter Servername<br />
6. Alten Server endgültig stillegen.<br />
7. Speichersystem an den neuen Server anschliessen<br />
8. AFS-File<strong>server</strong> auf dem neuen Server starten:<br />
admin@afs>bos startup fs Neuer Servername<br />
9. Volume-Instanzen in der VLDB registrieren:<br />
admin@afs>vos syncvldb Neuer Servername<br />
7.17.3 Manuelles Kopieren auf Dateiebene<br />
Vorteil: Die nötige Zeit zum Verschieben aller Instanzen ist nicht von Speichermenge<br />
oder Anzahl der Instanzen abhängig - O(1) .<br />
Nachteil: Wenn man schnell ist und das Speichersubsystem ohne Neustart einund<br />
ausbaubar ist, kann man die Ausfallzeit im Sekundenbereich halten. Eine<br />
gewisse Ausfallzeit ist jedoch vorhanden.<br />
Die hier beschriebene Methode kann bei Unachtsamkeit leicht schiefgehen, jedoch<br />
bemerkt man das sofort und kann sie beliebig wiederholen oder auch zu<br />
einer anderen Methode greifen.<br />
Der Namei-File<strong>server</strong> (siehe 3.8.2.2, Seite 58) legt seine Daten als einfache Dateien<br />
ins Wirtsfilesystem, was es ermöglicht, einfach den ganzen Dateibaum<br />
der Wirtspartition zu kopieren. Dabei muss man jedoch aufpassen, dass auch<br />
die Standard-Metadaten der Dateien (Eigentümer, Gruppe, Modebits, Zugriffszeiten)<br />
exakt kopiert werden - ansonsten droht Datenkorruption.<br />
So geht’s:<br />
1. File<strong>server</strong> herunterfahren:<br />
admin@afs>bos stop File<strong>server</strong> fs<br />
2. Kopieren der Daten auf eine neue Partition - z.B. so:<br />
root@host>cd /vicepa tar -S -p - -atime-preserve - -numeric-owner -c | \<br />
( cd /vicepb && tar x )<br />
3. Die alte Partition muss jetzt unbedingt geummounted oder anderweitig<br />
aus dem Einflussbereich des AFS-File<strong>server</strong>s entfernt werden. Macht<br />
man das nicht, kommt die VLDB durcheinander.<br />
4. File<strong>server</strong> hochfahren:<br />
admin@afs>bos start File<strong>server</strong> fs<br />
admin@afs>vos syncvldb File<strong>server</strong><br />
5. Liegen die Daten danach nicht mehr auf der selben /vicep - Partition,<br />
muss die VLDB davon unterrichtet werden:
172 7 Rezepte<br />
7.18 AFS schneller machen<br />
7.18.1 File<strong>server</strong><br />
7.19 AFS-Clients finden<br />
Vorteil: Effizientes Kopieren ist innerhalb eines Server möglich - z.B. um eine<br />
laut S.M.A.R.T. defekte Festplatte auszutauschen.<br />
Nachteil: Die Instanzen auf der bearbeiteten Platte sind <strong>für</strong> einige Zeit nicht<br />
benutzbar. Diese Zeit ist von der Datenmenge und der Anzahl der Dateien in<br />
den einzelnen Volume-Instanzen abhängig.<br />
Sven Oehme schlägt folgende Einstellungen vor, um die Performance - vor allem<br />
in schnellen Netzen - zu verbessern:<br />
file<strong>server</strong> : -nojumbo -L -rxpck 400 -udpsize 1310720<br />
vol<strong>server</strong> : -nojumbo -log -udpsize 1310720<br />
Jim Rees nutzt etwas andere Parameter <strong>für</strong> den File<strong>server</strong>:<br />
-L -p 92 -rxpck 2400 -udpsize 524288 -l 1000 -s 1000<br />
-vc 1000 -nojumbo<br />
Die Einstellungen müssen ins bos-Konfigurationsfile /etc/openafs/BosConfig<br />
hinter die entsprechenden bnode-Kommandos geschrieben werden.<br />
Gelegentlich ist es von Interesse, herrauszufinden, welche Clients Teil der eigenen<br />
Zelle sind. Es gibt da<strong>für</strong> keine Patenlösung, aber zwei brauchbare Ansätze:<br />
• Man kann die Serverlogs auf File<strong>server</strong>n auswerten. Dazu muss man den<br />
Loglevel etwas erhöhen und (siehe 6.10.1.2, Seite 126) und die Datei<br />
/var/log/openafs/FileLog nach Client-Adressen Filtern.<br />
• Der zweite Ansatz ist, das eigene Netzwerk nach AFS-Client-Prozessen<br />
zu scannen. Dazu kann man rxdebug benutzen - z.B. so:<br />
user@host>for((host=1;host /dev/null && echo $ip;done<br />
Hinweis:Mit dem Parameter -version kann man per rxdebug sogar<br />
die benutzte AFS-Version herrausfinden.
8 Problembehebung<br />
8.1 Fehlermeldungen<br />
8.2 Fehler mit tokenmgr, kinit oder aklog<br />
8.2.1 aklog: Request is a replay while getting AFS tickets<br />
AFS ist ein komplexes System. In diesem Kapitel werden die Probleme, die<br />
beim Autor dieses Dokuments aufgetreten sind, mit den entsprechenden Lösungsvorschlägen<br />
verewigt. Wenn bei ihnen ein hier nicht aufgeführtes Problem<br />
auftreten sollte, schicken Sie bitte eine Mail mit einer möglichst genauen<br />
Beschreibung an burk[at]cbs.mpg.de. Ziel dabei ist, ein möglichst vollständiges<br />
FAQ zu allen möglichen Fehlfunktionen/Eigenheiten von AFS aufzubauen.<br />
Unabhängig davon existieren unter http://www.openafs.org einige<br />
Mailinglisten (English is spoken...), auf denen AFS-Nutzer und Entwickler<br />
miteinander kommunizieren. Kann diese Dokumentation nicht weiterhelfen,<br />
sind diese Mailinglisten die erste Adresse, die man aufsuchen sollte.<br />
Wer Echtzeitkommunikation bevorzugt, kann sich auch in einen IRC-Channel<br />
begeben - z.B #openafs im Freenode-Netzwerk ( siehe http://www.<br />
freenode.net ).<br />
Probleme mit Anwendungsprogrammen, die sich an den Besonderheiten von<br />
AFS stossen, sind der größeren Flexibilität halber auf einer Wiki-Seite aufgeführt:<br />
http://fbo.no-ip.org/cgi-bin/twiki/view/Instantafs/<br />
ProgsHateAfs<br />
Hier ist eine Liste von Fehlermeldungen, jeweils mit Hinweisen, was genau<br />
schief läuft und wo man Hilfe findet.<br />
8.1.0.0.3 afs: Lost contact with file <strong>server</strong> 127.0.0.1 in cell [...] Das liegt<br />
an falsch konfigurierter Libc-Host-Namensauflösung (siehe 8.11, Seite 190) .<br />
8.1.0.0.4 kernel: afs_NewVCache: warning none freed, using 3600 of 3600<br />
Es sind zu viele Dateien im AFS auf dem lokalen Rechner gleichzeitig geöffnet<br />
(siehe 8.4.1, Seite 176).<br />
Die Replay-Erkennung des Kerberos hat angeschlagen. Die Replay-Erkennung<br />
sorgt da<strong>für</strong>, dass der Kerberos-Server keine 2 Anfragen nacheinander akzeptiert,<br />
die exakt gleich sind. Exakt gleich heisst z.B., dass das gleiche Ticket <strong>für</strong><br />
den selben Principal zur selben Sekunde angefordert wird. Das ist eine Schutzmassnahme<br />
gegen sogenannte Replay-Angriffe.<br />
Vermutlich haben in diesem Fall 2 Prozesse zum exakt gleichen Zeitpunkt eine<br />
Anfrage an den selben Kerberos-Server gerichtet. Das kann z.B. durch zwei<br />
cron-Jobs passieren:<br />
173
174 8 Problembehebung<br />
root@host>cat /etc/instantafs/ernies_job<br />
0 1 * * * ernie tokenmgr -S ernie -k /etc/instantafs/ernie - - test<br />
0 1 * * * ernie tokenmgr -S ernie -k /etc/instantafs/ernie - - echo toast<br />
Beide Jobs würden immer 01:00 nachts ausgeführt. Mit einer gewissen Wahrscheinlichkeit<br />
(es wird nicht immer passieren), werden die entsprechenden<br />
Kerberos-Tickets zur gleichen Zeit angefordert. Abhilfe läßt sich durch einen<br />
leichten zeitlichen Versatz schaffen:<br />
root@host>cat /etc/instantafs/ernies_job<br />
0 1 * * * ernie tokenmgr -S ernie -k /etc/instantafs/ernie - - test<br />
1 1 * * * ernie tokenmgr -S ernie -k /etc/instantafs/ernie - - echo toast<br />
Der zweite Job startet nun eine Minute später.<br />
8.3 vos, pts oder bos liefern Fehlermeldungen<br />
8.3.1 u: no quorum elected<br />
8.3.2 u: not synchronization site (should work on sync site)<br />
Hier sind einige Fehlermeldungen der diversen AFS-Kommandos und Möglichkeiten<br />
der Beseitigung aufgeführt.<br />
Die Meldung bedeutet, dass die DB-Server der Zelle noch nicht abschließend<br />
geklärt haben, welche Server verfügbar sind. Das ist ein DB-Server-Problem<br />
(siehe 8.7.2, Seite 185).<br />
Diese Fehlermeldung deutet darauf hin, dass z.B. vos nicht die korrekte Liste<br />
der Datenbank<strong>server</strong> benutzt. Man sollte in diesem Fall folgendes überprüfen:<br />
user@host>bos listhosts Servername<br />
• Die Datei /etc/openafs/CellServDB überprüfen.<br />
Hinweis: InstantAFS benutzt das DNS, um die Liste der Datebank<strong>server</strong><br />
den AFS-Clients bekannt zu machen. In diesem Fall muss /etc/openafs/-<br />
CellServDB eine leere Datei sein.<br />
• Die Datei /etc/openafs/<strong>server</strong>/CellServDB auf allen beteiligten Servern<br />
(im Zweifelsfall auf allen AFS-Servern der Zelle).<br />
Hinweis: Man kann das mit folgendem Kommando (<strong>für</strong> jeden Server<br />
einmal ausführen) auch über das Netzwerk machen:<br />
8.3.3 vsu_ClientInit: Could not get afs tokens, running unauthenticated.<br />
vos gibt diese Meldung aus, wenn kein Token im Kernel gespeichert ist. Ob<br />
ein Token vorhanden ist, kann mit dem Kommando tokens überprüft werden.<br />
Ohne Token können einige vos-Unterkommandos nicht benutzt werden. Es<br />
gibt zwei Möglichkeiten, dieses Kommando ohne ein Token zu benutzen:<br />
• Wird das Kommando als root auf einem AFS-Server ausgeführt, kann<br />
man mit dem Parameter -localauth da<strong>für</strong> sorgen, dass der auf<br />
dem Server gespeicherte Zellenschlüssel (/etc/openafs/<strong>server</strong>/KeyFile)<br />
verwendet wird, um mit Superuserrechten auf den entfernten Server<br />
zuzugreifen.<br />
• Um die Warnung zu vermeiden und einfach anonym auf den entfernten<br />
Server zuzugreifen, kann man die Option -noauth benutzen.
8.3 vos, pts oder bos liefern Fehlermeldungen 175<br />
8.3.4 bos: failed to [...] (you are not authorized for this operation)<br />
Ursache und Lösung dieses Problems die selben, wie bei der vorherigen Fehlerbeschreibung.<br />
8.3.5 libprot: no such entry Could not get afs tokens, running unauthenticated.<br />
8.3.6 pts: Permission denied [...]<br />
Diese Meldung gibt pts aus, wenn kein Token im Kernel gespeichert ist. Man<br />
sollte sich in diesem Fall mit tokenmgr -l ein Token besorgen. Im Gegensatz<br />
zu vos und bos kennt pts jedoch die -localauth-Option nicht.<br />
Die Checkliste:<br />
user@host>tokenmgr -l Benutzername<br />
1. Ist überhaupt ein gültiges Token vorhanden? Einige Funktionen der<br />
PTDB können nur von bestimmten Benutzern (also nicht anonym) aufgerufen<br />
werden. Stellen Sie sicher, dass ein gültiges Token vorhanden<br />
ist. Mit folgendem Kommando geht das:<br />
also z.B.<br />
ernie@afsclient> tokenmgr -l ernie<br />
<strong>für</strong> den Benutzer ernie.<br />
2. Einige pts-Unterkommandos (z.B. pts listentries) können nur<br />
von Superusern (siehe 3.7.5, Seite 54) benutzt werden. Superuser sind<br />
<strong>für</strong> den pt<strong>server</strong> die Mitglieder der Gruppe system:administrators.<br />
Hinweise:<br />
• pts kennt die -localauth-Option nicht, die bei anderen AFS-<br />
Kommandos da<strong>für</strong> sorgt, dass man ohne Token arbeiten kann.<br />
• Der Principal acall ist in einer InstantAFS-Zelle mit genug Macht<br />
ausgestattet, um alle PTDB-Kommandos auszuführen. Auf dem<br />
ersten AFS-DB-Server der Zelle liegt die keytab von acall. Soll ein<br />
pts-Unterkommando mit Superuserrechten ausgeführt werden,<br />
geht das wie folgt:<br />
root@host>tokenmgr -S acall -k /etc/instantafs/acall.keytab - - pts<br />
Unterkommando Optionen<br />
8.3.7 VLDB: no permission access for call<br />
8.3.8 Failed to move data for the volume [...]<br />
Manche vos-Unterkommandos können nur von Superusern benutzt werden.<br />
Die Definition von “Superuser” ist äquivalent zu der in der vorhergehenden<br />
Fehlerbeschreibung.<br />
Wenn das vos move -Kommando fehlschlägt, kann das an folgendem liegen:<br />
Inkosistente Quellinstanz In diesem Fall hilft es meist weiter, per bos salvage die Quellpartition<br />
zu bearbeiten.<br />
Quota-Überschreitung Wenn die ursprüngliche Volume-Instanz auf dem Quell<strong>server</strong> over-Quota<br />
ist, versagt vos move. Lösung: Zuerst die Quota erhöhen, dann verschieben.
176 8 Problembehebung<br />
8.3.9 Could not remove <strong>server</strong> [...] from the VLDB<br />
Wenn ein File<strong>server</strong> aus der VLDB entfernt werden soll, dürfen ihm keine<br />
Volume-Instanzen mehr zugeordnet sein. Um zu sehen, welche Instanzen dem<br />
File<strong>server</strong> noch zugeordnet sind, hilft folgender Befehl:<br />
user@host>vos listvl -<strong>server</strong> Servername<br />
8.4 Probleme im AFS-Dateisystem (AFS-Client)<br />
8.4.1 Zu viele AFS-Dateien sind auf einer Maschine geöffnet<br />
Anschliessend kann man mit vos remsite, vos remove bzw. vos<br />
delentry der entsprechenden Volume-Instanz zuleibe rücken.<br />
Abhilfe schafft hier das erhöhen des -stat -Parameters des Unix-AFS-Clients.<br />
Unter Debian geht das in /etc/openafs/afs.conf, unter MacOSX in /var/db/openafs/etc/config/afsd.options.<br />
8.4.2 In einem Verzeichnis lassen sich keine weiteren Dateien anlegen.<br />
8.4.2.1 Erklärung<br />
8.4.2.2 Lösung<br />
8.4.3 Clientseitig ist kein Zugriff auf /afs möglich<br />
Wenn sich aus mysterioesem Grund in einem Verzeichnis keine weiteren<br />
Dateien oder Verzeichnisse anlegen lassen, liegt das u.U. daran, dass man das<br />
Verzeichniseinträge-Limit erreicht hat.<br />
AFS-Verzeichnisse besitzen maximal 64436 Slots, in die man Verzeichniseinträge<br />
(also Dateien oder Unterverzeichnisse) ablegen kann. Diese Beschränkung<br />
ist im AFS-Protokoll verankert und nicht direkt ein OpenAFS-Problem.<br />
Ein Verzeichniseintrag verbraucht mindestens einen Slot - wenn er maximal 15<br />
Zeichen lang ist. Ist der Dateiname länger, verbraucht er weitere Slots (einen<br />
<strong>für</strong> weitere angerissene 16 Zeichen), wobei sich die Anzahl der maximalen verzeichniseinträge<br />
reduziert.<br />
Alle Slots, die ein Eintrag einnimmt, müssen zusammenhängen. Es existiert<br />
leider kein Defragmentierungsprozess, der da<strong>für</strong> sorgen könnte. Wenn man also<br />
oft Lange Dateieinträge anlegt und löscht, kann das die Fragmentierung neue<br />
verzeichniseinträge mit >15 Zeichen komplett verhindern.<br />
Wenn ein solcher Fehler auftritt, muss das Verzeichnis schon sehr viele Dateien<br />
enthalten. Man sollte zuerst einmal über die Struktur des eigenen Filesystems<br />
nachdenken - es sollte eher tief als flach sein. Kurzfristig hilft es auch, die Dateien/Verzeichnisse<br />
in ein anderes Directory zu verschieben und das andere Directory<br />
dann zum ursprünglichen umzubenennen.<br />
Die Fehlermeldungen des Clients werden ins Syslog (/var/log/syslog) geschrieben.<br />
Dort finden man oft wichtige Hinweise. Einige davon sind hier beschrieben:<br />
• afs: Lost contact with file <strong>server</strong> 10.0.0.10 in<br />
cell cbs.mpg.de (all multi-homed ip addresses down<br />
for the <strong>server</strong>)
8.4 Probleme im AFS-Dateisystem (AFS-Client) 177<br />
user@host>tokenmgr -r<br />
Diese Zeile deutet an, dass der Kontakt zu einem AFS-File<strong>server</strong> abgerissen<br />
ist bzw. nicht hergestellt werden kann. Folgende Ursachen sind<br />
denkbar:<br />
– Generelles Netzwerkproblem auf dem Client oder auf dem Server<br />
(Netzwerkkarte kaputt, Netzwerkkabel nicht eingesteckt, Switch/Hub<br />
ausgefallen, Routing-Problem).<br />
– Der Server ist ausgefallen oder abgeschaltet.<br />
– Softwareproblem auf dem File<strong>server</strong> (siehe 8.5.1, Seite 179).<br />
– Eine Firewall zwischen Client und Server filtert AFS-Traffic (siehe<br />
3.6, Seite 44).<br />
Hinweis: Den Kontakt zu einem AFS-Server zu verlieren heißt, dass der<br />
file<strong>server</strong>-Prozess auf der Maschine nicht kontaktiert werden kann<br />
- also dass die Anfragen an den UDP-Port 7000 dieser Maschine nicht<br />
beantwortet werden.<br />
• afs: Lost contact with volume location <strong>server</strong> 10.0.0.5<br />
in cell cbs.mpg.de<br />
Die Zeile zeigt an, dass einer der Datenbank<strong>server</strong> nicht erreichbar ist.<br />
Die Ursachen da<strong>für</strong> sind ähnlich denen, die zu Kommunikationsproblemen<br />
mit dem File<strong>server</strong> führen. Folgende Szenarien sind denkbar:<br />
– Ein Netzwerkproblem verhindert die Kommunikation mit dem DB-<br />
Server.<br />
– Der entsprechende DB-Server ist ausgefallen.<br />
– Es laufen nicht alle nötigen Prozesse auf dem DB-Server (siehe<br />
8.7.1, Seite 184).<br />
• kernel: afs: Tokens for user of AFS id 1000 for<br />
cell test.cbs.mpg.de are discarded (rxkad error=19270405)<br />
Diese Zeile weist darauf hin, dass ein File<strong>server</strong> den Token eines Benutzers<br />
(hier mit der AFS-ID 1000), der am lokalen Rechner arbeitet,<br />
zurückgewiesen hat. Einer der folgenden Gründe ist meist da<strong>für</strong> verantwortlich:<br />
– Der Token des Benutzers ist ganz normal abgelaufen. Das passiert<br />
z.B., wenn ein Batch-Job zulange läuft und vergessen wird, das Token<br />
regelmäßig zu erneuern. Abhilfe schafft da<strong>für</strong> das Kommando<br />
(siehe auch “Einführung in die Benutzung von AFS an der MPG”,<br />
3.2. Batch-Jobs).<br />
– Die Uhren der Zelle laufen nicht synchron. Überprüfen Sie die<br />
Zeit auf den DB-Servern (eigentlich auf den Kerberos-Servern, bei<br />
Benutzung von InstantAFS sind Kerberos- und DB-Server jedoch<br />
gleich), auf dem File<strong>server</strong>, auf den gerade zugegriffen werden<br />
sollte und auf dem lokalen Rechner, auf dem die Fehlermeldung<br />
angezeigt wurde.<br />
Wenn vom Client gar kein Zugriff auf das AFS möglich ist, gehen Sie folgende<br />
Checkliste durch:<br />
• Das Paket instantafs-client .deb muss mit allen Abhängigkeiten installiert<br />
sein.
178 8 Problembehebung<br />
• Der openafs-client muss natürlich gestartet sein. Manuell kann er mit<br />
root@host>/etc/init.d/openafs-client force-start<br />
8.4.4 ”Read-only file system”-Fehler beim Schreiben<br />
hochgefahren werden. Automatisch wird er bei jedem Reboot gestartet,<br />
wenn die Datei<br />
/etc/openafs/afs.conf.client die Zeile<br />
AFS_CLIENT=true<br />
enthält.<br />
• In der Datei /etc/krb5.conf muss im Konfigurationsblock<br />
[libdefaults]<br />
eine Zeile in folgender Form stehen:<br />
default_realm = CBS.MPG.DE<br />
CBS.MPG.DE ist dabei der Name der Kerberos-Realm (also der Name<br />
der AFS-Zelle in Großbuchstaben).<br />
Dieser Fehler deutet darauf hin, dass versucht wurde, auf eine RO-Instanz eines<br />
Volumes zu schreiben. Auf RO-Instanzen kann prinzipiell nicht über das<br />
Filesystem geschrieben werden (auch <strong>Administratoren</strong> können das nicht).<br />
Beispiel: Folgendes geht nicht:<br />
user@host>touch /afs/cbs.mpg.de/local/scripts/test<br />
touch: cannot touch ‘/afs/cbs.mpg.de/local/scripts/test’:Read-onl<br />
allerding funktioniert (entsprechende Rechte vorrausgesetzt) das:<br />
user@host>touch /afs/cbs.mpg.de/local/.scripts/test<br />
genau wir folgendes Kommando:<br />
user@host>touch /afs/.cbs.mpg.de/local/scripts/test<br />
Beachten Sie die Arten der Mountpoints (siehe 3.2, Seite 32), die auf dem entsprechenden<br />
Pfad durchschritten werden. Die Arten der Mountpoints (nicht nur<br />
des letztens) sind entscheidend da<strong>für</strong>, auf welche Instanz am Ende zugegriffen<br />
wird. Mit dem Kommando<br />
user@host>instantafs.afsdir Verzeichnis<br />
(siehe 9.2.9, Seite 197) kann eine Begründung abgerufen werden, warum ein<br />
bestimmtes Verzeichnis in einem RO-Volume liegt. Beispiel:<br />
user@host>instantafs.afsdir /afs/cbs.mpg.de/local/scripts/test<br />
8.4.5 In einem Verzeichnis haben alle Dateien unerwarteterweise die Größe 0<br />
Das kann daran liegen, dass dem entsprechenden Benutzer die Rechte fehlen,<br />
stat()-Informationen von den Dateien einzuholen, was wiederum 2 Ursachen<br />
haben kann:<br />
• Das Token des Benutzers ist abgelaufen<br />
• Der Benutzer bekommt in den ACLs das r-Recht nicht verliehen. (siehe<br />
3.7.3.2, Seite 51).
8.5 File<strong>server</strong> 179<br />
In jedem Fall muss man sich ein neues Token besorgen.<br />
8.4.6 Der MacOSX-AFS-Client stürzt beim Versuch ab, ein .dmg-file zu mounten<br />
8.4.6.1 Problem<br />
8.4.6.2 Lösung<br />
8.5 File<strong>server</strong><br />
8.5.1 Ein File<strong>server</strong> generiert undefinierte Fehler<br />
.dmg-Dateien enthalten Dateisysteme, die als sog. loopback gemountet werden.<br />
Dabei simmuliert der Kernel die Blockdevice, desse Zugriffe auf die entsprechende<br />
Datei umgesetzt werden. Ein Filesystemtreiber des Kernels greift anschliessend<br />
auf das Blockdevice zu.<br />
Das .dmg-file ist nicht anonym erreichbar - man benötigt also ein Token, um<br />
darauf zuzugreifen. Der Kernel hat kein Token - nur der Benutzer hat eines.<br />
.dmg-File auf eine lokale Platte kopieren und dort öffnen.<br />
Auf dem File<strong>server</strong> müssen alle Prozesse korrekt gestartet werden (siehe 3.8.4,<br />
Seite 59). Suchen Sie in den entsprechenden Logfiles nach Hinweisen, was das<br />
korrekte Arbeiten des File<strong>server</strong>s behindert.<br />
8.5.2 Ein File<strong>server</strong> ist ausgefallen, die /vicep-Partitionen jedoch intakt<br />
Installieren Sie einen neuen unspezialisierten AFS-Server (siehe 7.5, Seite 146).<br />
Machen sie diesen danach mit folgendem Kommando zu einem AFS-File<strong>server</strong>:<br />
root@host>bos create localhost -instance fs -type fs \<br />
-cmd /usr/lib/openafs/file<strong>server</strong> -cmd /usr/lib/openafs/vol<strong>server</strong> \<br />
-cmd /usr/lib/openafs/salvager -localauth<br />
Beenden Sie die Serverprozesse erst einmal wieder:<br />
root@host>/etc/init.d/openafs-file<strong>server</strong> stop<br />
Soll der Ersatz<strong>server</strong> eine andere IP (oder auch mehrere andere IPs) als der<br />
ausgefallene benutzen, muss die VLDB davon in Kenntnis gesetzt werden:<br />
• Führen Sie das Kommando<br />
root@host>vos changeaddr Defekter Server Ersatz<strong>server</strong> -localauth<br />
auf einem noch intakten AFS-Server aus. Damit wird der VLDB vorgegaukelt,<br />
dass der defekte File<strong>server</strong> lediglich eine neue IP bekommen hat.<br />
• Besaß der defekte File<strong>server</strong> mehrere IPs, muss man vos changeaddr<br />
mehrmals anwenden. Besitzt der Ersatz<strong>server</strong> nicht soviele IP-Adressen<br />
wie der defekte File<strong>server</strong>, sollte man die restlichen Adressen des defekten<br />
Servers mit<br />
root@host>vos changeaddr Defekter Server -remove<br />
entfernen, damit Clients nicht versuchen, den Server über diese Adresse<br />
zu kontaktieren 1 .<br />
1 Das ist nicht unbedingt nötig, spart jedoch im Zweifelsfall Wartezeit auf den AFS-Clients.
180 8 Problembehebung<br />
Wenn von dem alten Server die Datei /var/lib/openafs/sysid zur Verfügung steht<br />
(z.B. aus einem Backup), sollte man diese jetzt an die selbe Stelle auf dem neuen<br />
Server legen. Die VLDB erkennt Server nicht anhand ihrer IP-Adressen,<br />
sondern anhand einer in dieser Datei gespeicherten Eindeutigen Zahl. Unterscheidet<br />
sich diese Zahl auf dem neuen Server von der auf dem alten, so bleiben<br />
die Volume-Instanzen des alten Servers in der VLDB gespeichert und müssen<br />
später manuell entfernt werden. Bis sie entfernt sind, führt das u.U. zu erhöhten<br />
Wartezeiten auf den AFS-Clients, die versuchen, auf den nicht mehr existierenden<br />
alten AFS-File<strong>server</strong> zuzugreifen.<br />
Schließen sie das Storage-System wieder an, mounten sie alle /vicepx-Partitionen.<br />
und starten sie die File<strong>server</strong>prozesse auf dem neuen Server:<br />
root@host>bos start localhost fs -localauth<br />
Die VLDB muss jetzt noch über die Volume-Instanzen auf dem neuen Server<br />
informiert werden:<br />
root@host>vos syncvldb -localauth Neuer Server<br />
8.5.3 Ein File<strong>server</strong> wurde komplett zerstört<br />
Achtung: Dieses Desaster-Recovery benötigt kein Backup-System, kann da<strong>für</strong><br />
aber nur die RW-Instanzen wiederherstellen, <strong>für</strong> die noch RO-Instanzen in<br />
der Zelle existieren. Ist ein Backup-System vorhanden, können natürlich noch<br />
mehr Daten wiederhergestellt werden (siehe 5.7.2, Seite 112).<br />
Folgender Befehl zeigt die Volumes an, die nicht wiederhergestellt werden<br />
können:<br />
user@host>instantafs.calcrestore -c Zerstörter Server/\*<br />
Ist ein File<strong>server</strong> mit allen Daten komplett verloren (z.B. durch Blitzschlag,<br />
Brand, Vandalismus oder Diebstahl), sind folgende Schritte durchzuführen:<br />
1. Man beschaffe einen Ersatz-Server (incl. einem mit dem Vorgängermodell<br />
vergleichbarem Storage-System), den man wie unter 7.5 (Seite 146)<br />
einrichtet. Die Vice-Partitionen müssen danach entsprechend dem letzten<br />
Server eingerichtet sein (d.h. alle Vice-Partitionen, die auf dem letzten<br />
Server waren, müssen auch auf dem neuen verfügbar sein und sollten 2<br />
jeweils mindestens die gleiche Kapazität wie vorher haben).<br />
2. Jetz wird ein Bash-Skript generiert, das den Restore-Vorgang später<br />
durchführt:<br />
admin@afs>instantafs.calcrestore -m Zerstörter Server/\* -s Neuer Server \<br />
-p Partition auf dem neuen Server > skript.sh<br />
admin@afs>sh ./skript.sh<br />
Hinweis: Mit der zusätzlichen Option - -rorw kann der Wiederherstellungsprozess<br />
erheblich beschleunigt werden. Sie bewirkt, dass<br />
RO-Instanzen auf den noch vorhandenen Server in RW-Instanzen umgewandelt<br />
werden. Dabei werden keine Daten über das Netzwerk geschickt,<br />
sondern nur die RO-Instanzen verändert.<br />
Das Skript wird dann einfach ausgeführt:<br />
3. Je nachdem, was <strong>für</strong> Daten auf dem Server lagen, ergeben sich verschiedene<br />
Konsequenzen:<br />
2 Das ist nur nötig, wenn instantafs.calcrestore ohne - -rorw aufgerufen wird.
8.5 File<strong>server</strong> 181<br />
Hinweise:<br />
(a) Lagen auf dem Server lediglich RO-Instanzen, so gibt es keinen Datenverlust.<br />
(b) Lagen auf dem Server RW-Instanzen, <strong>für</strong> die auf anderen Servern<br />
RO-Instanzen angelegt wurden, so können alle Daten zurück bis<br />
zum letzten Release des jeweiligen Volumes wiederhergestellt werden.<br />
Daten, die nach dem letzten Release des jeweiligen Volumes<br />
verändert wurden, sind verloren.<br />
(c) Befanden sich RW-Instanzen auf dem Server, von denen keine RO-<br />
Instanzen existieren, so können diese nicht wiederhergestellt werden.<br />
• Es ist möglich, die Wiederherstellung mit der Option - -volumepcre<br />
auf bestimmte Volumes zu beschränken (z.B. weil die Zeit zu knapp ist<br />
und nicht alle Volumes sofort wiederhergestellt werden müssen).<br />
• Das Kommando<br />
instantafs.calcrestore -c Servername/\*<br />
8.5.4 Eine Volume-Instanz auf einem Server bleibt offline<br />
zeigt alle Volumes an, die nicht wiederhergestellt werden können. Ersetzt<br />
man -c durch -n, so werden die Volumes angezeigt, die wiederhergestellt<br />
werden können.<br />
Instanzen eines Volumes die als offline markiert sind, stehen über einen File<strong>server</strong><br />
nicht zur Verfügung. Das kann verschiedene Ursachen haben - z.B. eine<br />
Inkonsistenz in den diversen Datenstrukten der Instanz. Ähnlich dem fsck existiert<br />
<strong>für</strong> AFS-Server ein Konzept, um solche Inkonsistenzen zu beseitigen.<br />
1. Zuerst sollte man versuchen, das Volume per Kommando in den Modus<br />
On-Line zu versetzen:<br />
admin@afs>vos online Server Partition Volume-Instanz<br />
admin@afs>vos exa Volume-Instanz<br />
2. Nach dem ersten und auch den weiteren Schritten sollte man jeweils<br />
testen, ob das Volume vielleicht schon wieder On-Line ist:<br />
Dieser Befehl bezieht sich immer auf alle Volume-Instanzen einer Klasse<br />
(RO, Backup, RW). Bei Backup und RW-Instanzen ist das unkritisch, bei<br />
RO-Instanzen werden jedoch immer alle aufgeführt.<br />
3. Jetzt sollte man versuchen, die Instanz zu reparieren:<br />
admin@afs>bos salvage Server Partition Volume-Instanz<br />
Sollte es nicht funktionieren, macht man das am besten mehrmals (bis zu<br />
3x).<br />
4. Man kann jetzt noch versuchen, die ganze Partition zu reparieren. Für die<br />
Dauer des Vorgangs kann kein AFS-Client auf die Volume-Instanzen, die<br />
auf der Partition liegen, zugreifen.<br />
admin@afs>bos salvage Server Partition
182 8 Problembehebung<br />
8.5.4.1 Extraktion von Dateien aus AFS-Dumps<br />
Auch diesen Vorgang sollte man bis zu 3x ausführen, wenn es nicht sofort<br />
klappt.<br />
Das bos salvage-Kommando kennt zahlreichen Optionen. Weitere Informationen<br />
finden sich in [ADMREF].<br />
Es ist auch möglich, dass sich eine Instanz gar nicht reparieren lässt. Existieren<br />
keine anderen Instanzen des Volumes kommt man nur über einen Umweg<br />
trotzdem an die Files in dieser Instanz. Die Instanz muss dazu mit vos dump<br />
in eine Datei gespeichert werden:<br />
admin@afs>vos dump user.ernie -<strong>server</strong> afsserv1 -partition a ><br />
/tmp/user.ernie.dump<br />
Mit dumptool (Paket openafs-tools .deb ) kann anschließend in dem Dump-<br />
File interaktiv nach Dateien gesucht und diese extrahiert werden:<br />
user@host>dumptool /tmp/user.ernie.dump<br />
Ein Programm, das allerdings nicht Teil von OpenAFS ist, macht es möglich,<br />
den ganzen Verzeichnisbaum eines Dump-Files zu extrahieren:<br />
user@host>afsdump_extract Dumpfile Zielverzeichnis<br />
Wurden alle Daten extrahiert, sollte man die defekte Volume-Instanz löschen<br />
und neu anlegen. Wenn sie sich nicht löschen läßt, findet man unter 8.5.5 Hilfe.<br />
Das Programm ist Teil des Paketes dumpscan .deb .<br />
8.5.5 Eine Volume-Instanz auf einem Server ist löschresistent<br />
Es kann vorkommen, dass sich Instanzen auf File<strong>server</strong>n gar nicht löschen lassen<br />
oder aber, dass sie nach dem Löschen und anschliessenden Neustart des<br />
File<strong>server</strong>s als Off-Line-Instanzen mit Namen wie bogus.536871547 ein Schattendasein<br />
führen, jedoch trotzdem Speicher 3 verbrauchen.<br />
Achtung: Auch wenn dabei noch nie etwas schiefgegangen ist 4 , kann dabei<br />
theoretisch etwas schiefgehen und andere Instanzen auf der selben Partition in<br />
Mitleidenschaft gezogen werden.<br />
Mit dem Tool instantafs.getvoldirs kann man das Verzeichnis einer Volume-<br />
Instanz ermitteln:<br />
user@host>instantafs.getvoldirs 536871547<br />
v=/v7++U<br />
Die ausgegebene Zeichenfolge ist das Verzeichnis zur bogus-Volume-Instanz,<br />
relativ zur AFS-Datenpartition. Die Sonderzeichen machen es vermutlich nötig,<br />
den Pfad zu quoten - am besten mit ’. Wäre die Instanz auf Partition a, wären<br />
folgende Befehle das Ende der Bogus-Instanz:<br />
3 Fälschlicherweise wird bei solchen Instanzen meist angezeigt, dass sie 0 kByte Speicher verbrauchen<br />
- das ist i.d.R. falsch!<br />
4 Der Author hat diese Methode bereits mehr als zehnmal ohne Nebeneffekte benutzt
8.5 File<strong>server</strong> 183<br />
root@afsserv> rm -rf ’/vicepa/v7++U’<br />
root@afsserv> rm /vicepa/V0536871547.vol<br />
8.5.6 Eine Partition auf einem File<strong>server</strong> ist voll, nichts geht mehr<br />
Ist eine /vicepx-Partition komplett gefüllt, kann es zu Problemen kommen, wenn<br />
auf dieser Partition Instanzen liegen, die differenziell gespeichert werden (siehe<br />
3.1.4, Seite 29). Das primäre Ziel ist dann, die RW-Instanzen auf der Partition<br />
arbeitsfähig zu erhalten bzw sie wieder benutzbar zu machen. Man geht jetzt in<br />
3 Schritten vor.<br />
1. Zuerst wird auf der vollen Partition Platz geschaffen:<br />
(a) Die Backup-Instanzen aller Volumes, deren RW-Instanzen auf<br />
dieser Partition liegen, sollten mit den RW-Instanzen synchronisiert<br />
werden. Durch die differenzielle Speicherung (siehe 3.1.4, Seite<br />
29) ist der Speicherbedarf direkt nach der Synchronisation am<br />
geringsten. Das geht z.B. mit diesem Befehl:<br />
admin@afs>iarel ‘volgrep rwlocation=Server/Partition \<br />
backup_exists=1‘<br />
(b) Alle differenziell gespeicherten RO-Instanzen auf der Partition<br />
sollten mit den entsprechenden RW-Instanzen (aus dem selben<br />
Grund wie bei den Backup-Instanzen) synchronisiert werden. Ein<br />
möglicher Befehl da<strong>für</strong> lautet:<br />
admin@afs>iarel ‘volgrep rolocation=Server/Partition<br />
rwlocation=Server/Partition‘<br />
(c) Sind RO-Instanzen von Volumes auf der Partition, von denen auch<br />
auf anderen Partitionen RO-Instanzen existieren, können diese entfernt<br />
werden. Clients, die auf RO-Instanzen des jeweiligen Volumes<br />
zugreifen wollen, benutzen dann einfach einen anderen Server.<br />
(d) Wenn ein kurzzeitiger Ausfall der Erreichbarkeit unkritisch ist,<br />
kann man auch die -live-Funktion benutzen, um bestimmte<br />
einzelne RW-Instanzen von der Partition zu verschieben. Normalerweise<br />
wird zum Verschieben ein move-Clone angelegt (siehe<br />
3.1.5, Seite 30). Durch die -live-Option wird kein Clone erzeugt,<br />
die RW-Instanz bleibt dann jedoch während des Verschiebens die<br />
ganze Zeit busy (siehe 6.13.2, Seite 137).<br />
2. Zur Sicherheit sollte man den salvager auf der betroffenen Partition<br />
laufen lassen:<br />
admin@afs>bos salvage Servername -partition Partition<br />
3. Man sollte in Betracht ziehen, einige RW-Instanzen auf andere Server zu<br />
verlagern (siehe 6.11.2, Seite 133).<br />
Hinweis:Das geht im laufenden Betrieb (siehe 6.9, Seite 123).<br />
8.5.7 Volume-Instanzen names bogus.XXX tauchen auf File<strong>server</strong>n auf<br />
Solche Volume-Instanzen werden generiert, wenn die Inkonsistenzen auf<br />
Wirtspartitionen die Heilungskräfte des Salvagers (siehe 3.8.4, Seite 59) übersteigen.<br />
Das Log-file /var/log/openafs/SalvageLog gibt Auskunft über solche<br />
Bogus-Instanzen, wenn sie generiert werden. Oft weiss der Salvager einfach
184 8 Problembehebung<br />
nur nicht, wie der korrekte Name der Instanz ist. Durch einen Abgleich des Inhaltes<br />
der VLDB mit den Instanzen der entsprechenden Partition sollte schnell<br />
geklärt sein, um welche Instanz es sich handelt - es seie denn, es gibt mehrere<br />
Bogus-Instanzen.<br />
Achtung: Bogus-Instanzen deuten nur auf einen unbekannten Instanz-Namen<br />
hin - nicht darauf, dass die Daten unwichtig wären. Auf einer Partition, die nur<br />
RO-Instanzen enthält, kann man diese problemlos löschen - die entsprechende<br />
RO-Instanz wird beim, nächsten vos release einfach neu erzeugt. Wenn es<br />
aber eine RW-Instanz sein könnte, darf man auf keinen Fall solche Instanzen<br />
einfach löschen.<br />
8.6 Ein File<strong>server</strong> registriert sich mit zu vielen (evtl. falschen) IP-Adressen<br />
root@file<strong>server</strong> ifconfig eth1 down<br />
Das ist besonders Lästig, wenn diese Adressen nicht geroutet werden - z.B. weil<br />
ein File<strong>server</strong> einfach noch eine zweite aktive Netzwerkkarte mit einer Dummy-<br />
Adresse hat. AFS-Clients versuchen dann, auch diese Adresse zu erreichen,<br />
fragen aber logischerweise beim Default-Gateway an.<br />
Wenn man nun diese Netzwerkkarte mit<br />
abschaltet und den File<strong>server</strong> mit<br />
root@file<strong>server</strong> bos restart localhost fs -localauth<br />
8.7 Datenbank<strong>server</strong><br />
neustartet, beißt man auf Granit - die Adresse bleibt weiterhin registriert - wie<br />
man mit<br />
user@host>vos listaddrs<br />
sehen kann. Nach dem Abschalten der Netzwerkkarte ist es wichtig, eine NetRestrict-Datei<br />
(siehe 3.6.1, Seite 45) mit der IP der nun abgeschalteten Netzwerkkarte<br />
anzulegen - dann entfernt der File<strong>server</strong> beim Neustart die entsprechende<br />
Adresse aus der VLDB.<br />
Um Ausfallzeiten zu minimieren, kann man sich den Neustart des File<strong>server</strong>s<br />
sparen - zumindest, wenn man den bos<strong>server</strong> angewiesen hat, den File<strong>server</strong><br />
regelmäßig automatisch neu zu starten (was der default ist).<br />
8.7.1 Es ist überhaupt kein Zugriff auf die AFS-Datenbank möglich<br />
Die AFS-Datenbank ist üblicherweise stark redundant ausgelegt. Lesezugriffe<br />
auf die AFS-Datenbank sind auch dann noch möglich, wenn nur noch ein<br />
einziger Datenbank<strong>server</strong> korrekt arbeitet. Folgendes Kommando kann benutzt<br />
werden, um zu analysieren, wo das Problem liegt:<br />
admin@afs>instantafs.<strong>server</strong>check - -cell Zellenname 1. DB-Server 2. DB-Server<br />
...<br />
Im Fall der Zelle cbs.mpg.de wäre das:<br />
admin@afs>instantafs.<strong>server</strong>check - -cell cbs.mpg.de <strong>server</strong>3 <strong>server</strong>4<br />
.
8.7 Datenbank<strong>server</strong> 185<br />
8.7.2 Schreibzugriffe sind nicht möglich<br />
Ist kein Schreibzugriff auf die VLDB, PTDB oder BDB möglich, liegt das mit<br />
hoher Wahrscheinlichkeit daran, dass die Kommunikation zwischen den DB-<br />
Servern gestört ist. Überprüfen Sie in diesem Fall folgendes:<br />
• Können die DB-Server ungestört kommunizieren (siehe 3.6, Seite 44)?<br />
• Laufen die Systemuhren der DB-Server synchron? Ab 10 Sekunden ist<br />
die Abweichung kritisch.<br />
• Sind auf allen DB-Servern alle anderen DB-Server korrekt eingetragen?<br />
Der Befehl bos listhosts Servername sollte auf jeden<br />
DB-Server angewandt die komplette Liste aller DB-Server ausgeben.<br />
• Sind auf allen DB-Servern aktuelle Versionen von openafs-db<strong>server</strong> .deb<br />
installiert? Die Software muss mindestens die Versionsnummer 1.2.11<br />
haben.<br />
Das Kommando<br />
user@host>udebug Server Portnummer<br />
8.7.3 Ein Volume läßt sich nicht aus der Datenbank löschen<br />
8.7.3.1 VLDB neu aufbauen<br />
ist hilfreich, um aktuelle Informationen über die Wahl der Sync-Site zu erhalten.<br />
Die jeweiligen Portnummern der einzelnen Datenbank-Prozesse sind in<br />
Tabelle 3.6, Seite 45 aufgeführt.<br />
Schneller geht’s mit instantafs.<strong>server</strong>check (siehe 9.2.14, Seite 200).<br />
Wenn sichergestellt ist, dass es sich nicht um das unter 8.7.2 beschriebene Problem<br />
handelt, könnte es sein, dass die VLDB inkonsistent ist. Es gibt 2 Lösungsansätze.<br />
Die AFS-Datenbank enthält keine wirklich wertvollen 5 Informationen.<br />
Wenn sich nur wenige 6 AFS-File- und Datenbank-Server in der Zelle befinden,<br />
kann man die VLDB einfach neu erstellen.<br />
Achtung: Bei dieser Methode gibt’s eine mehr oder weniger lange Downtime<br />
der Datenbank. Ist diese kurz genug, um auf Clients, die gerade Volume-<br />
Informationen abfragen, keinen Timeout zu triggern, ist das unkritisch. In jedem<br />
anderen Fall wird’s brenzlig, wenn gerade Benutzer im AFS arbeiten.<br />
So wird’s gemacht:<br />
1. Man fahre die Datenbank<strong>server</strong>-Prozesse <strong>für</strong> die vldb herunter. Dazu<br />
muss <strong>für</strong> jeden AFS-Datenbank<strong>server</strong> folgendes Kommando ausgeführt<br />
werden:<br />
admin@afs>bos stop Datenbank<strong>server</strong> vl<strong>server</strong><br />
2. Auf jedem der Datenbank<strong>server</strong> entfernt man nun die Dateien, in denen<br />
die VLDB liegt:<br />
root@afsdb> rm -f /var/lib/openafs/db/vldb.*<br />
5 Praktisch alle Informationen können mit wenigen Befehlen wiederhergestellt werden<br />
6 Sind es zu viele Server wird’s mühsam, so daß sich die andere Methode eher lohnt.
186 8 Problembehebung<br />
3. Die Datenbank<strong>server</strong> werden jetzt einer nach dem anderen wieder hochgefahren:<br />
admin@afs>bos stop Datenbank<strong>server</strong> vl<strong>server</strong><br />
admin@afs>vos syncvldb File<strong>server</strong><br />
8.7.3.2 VLDB reparieren<br />
4. Alle File<strong>server</strong> müssen jetzt angewiesen werden, Daten über ihre<br />
Volume-Instanzen bei der VLDB abzuliefern:<br />
Das Tool vlclient, kann benutzt werden, um bestimmte Schäden in der VLDB<br />
zu reparieren. Das geht im laufenden Betrieb, allerdings muss das Tool zuerst<br />
durch Compilierung der OpenAFS-Quellen selbst erstellt werden.<br />
So repariert man damit die VLDB:<br />
admin@afs>vlclient -cell Zellenname -host Sync-Site<br />
Die aktuelle VLDB-Sync-Site kann man mit<br />
user@host>udebug Beliebiger_Datenbank<strong>server</strong> 7003<br />
vl> checkhash unused<br />
vl> fixhash unused<br />
8.8 Backup-Probleme<br />
herrausfinden. Anschliessend arbeitet man auf dem vlclient-Prompt:<br />
8.8.1 Der Speicher auf dem Backup-Server ist voll, das Backup läuft noch<br />
instantafs.vtapes verschickt eine Warnungs-eMail, wenn nicht mehr genug<br />
Speicher zur Verfügung steht. Der Backup-Prozess läuft in diesem Fall noch<br />
und sollte auch möglichst nicht unterbrochen werden. Es gibt 3 Möglichkeiten,<br />
um fortzufahren:<br />
Alte Backups löschen : Mit einem manuellen Aufruf der Form<br />
root@backupserv> instantafs.vtapes - -remove 90 - -cleanup<br />
kann Platz geschaffen werden. Anschließend wird dem noch laufenden<br />
instantafs.vtapes-Prozess mit<br />
root@backupserv> touch instantafs.vtapes-Tempdir<br />
mitgeteilt, dass er den verfügbaren Speicher neu berechnen und das<br />
Backup fortsetzen soll.<br />
Zusätzlichen Platz zur Verfügung stellen : Läßt sich auf einfache Weise eine neue Festplatte ins Dateisystem des<br />
Backup-Servers integrieren (z.B. da bereits ein zusätzliches unbenutztes<br />
Speichersystem integriert ist), kann man diese dem Backup-System jetzt<br />
zur Verfügung stellen. Die Platte muß beschreibbar sein und in der Datei<br />
/etc/instantafs/vtapes.conf mit einem Eintrag der Form<br />
storagedir=/pfad/zur/grossen/platte
8.9 acall-Probleme 187<br />
verewigt werden. Anschliessend ist folgendes auszuführen:<br />
root@backupserv> touch instantafs.vtapes-Tempdir/iavt-resume<br />
wobei instantafs.vtapes-Tempdir das Temporäre Verzeichnis<br />
ist, das bei der Konfiguration des Backup-Servers mit<br />
instantafs.vtapes - -init - -tempdir Tempdir angegeben<br />
wurde. Mit folgendem Befehl läßt es sich herrausfinden:<br />
user@backupserv> grep ’tempdir=’ /etc/instantafs/vtapes.conf<br />
Aufgeben : Mit folgendem Kommando wird das AFS-Backup-System zur Aufgabe<br />
gezwungen - der aktuelle Dump wird dann abgebrochen:<br />
root@backupserv> touch instantafs.vtapes-Tempdir/iavt-abort<br />
8.9 acall-Probleme<br />
8.9.1 mk_req error: No credentials cache found<br />
Achtung: Es ist möglich, dass bereits andere Backup-Prozesse darauf<br />
warten, dass der Backup-Server wieder frei wird. Bricht man in<br />
solch einem Fall das aktuelle Backup ab, ist der Backup-Server direkt<br />
danach wieder frei und die nächste Warnungs-eMail ist nicht<br />
weit. Man sollte also dringend vorher den auslösenden Prozess (i.d.R.<br />
instantafs.backup auf dem Backup-Server) beenden.<br />
instantafs.acall kann auf keinerlei Kerberos-Tickets zugreifen.<br />
Lösung:<br />
user@host>tokenmgr -l Benutzername<br />
Wenn die entsprechende acall-Funktion automatisiert ausgeführt werden soll,<br />
greift man besser auf eine Keytab zurück (siehe 3.10.3, Seite 63) und authorisiert<br />
sich mit dieser. Beispiel:<br />
user@host>tokenmgr -lp volumemaster -k /etc/instantafs/volumemaster.keytab \<br />
- - acall db ia:volcreate wichtiges-volume<br />
8.9.2 E: acall(): Kerberos error in get_<strong>server</strong>_rcache(): Permission denied in replay cache code<br />
Dieser Fehler deutet darauf hin, dass sich unter /var/tmp viel Unrat angesammelt<br />
hat. Abhilfe schafft man wie folgt:<br />
root@host>rm -f /var/tmp/rc_client*<br />
8.9.3 E: Not authorized.<br />
Damit eine bestimmte acall-Funktion von einem Nutzer ausgeführt werden<br />
kann, muss das in mindestens einer Zeile der Konfigurationsdatei des jeweiligen<br />
acall-Servers 7 erlaubt sein. Wenn der Zugriff auf die Konfigurationsdatei<br />
nicht möglich ist, sind alle Zugriffe verboten.<br />
Mögliche Ursachen:<br />
7 i.d.R. ist das die globale Konfigurationsdatei /a/a/etc/acall.access
188 8 Problembehebung<br />
8.9.4 mk_req error: Server not found in Kerberos database<br />
• Die angegebene Konfigurationsdatei (bzw. /a/a/etc/acall.access, wenn<br />
keine angegeben wurde) existiert nicht.<br />
Lösung: Die genannte Datei anlegen. Eine Beispieldatei befindet sich<br />
unter /usr/share/doc/instantafs-doc/examples/acall.access im Paket<br />
instantafs-doc .deb .<br />
• Es befindet sich keine Regel in der Konfigurationsdatei, die dem entsprechenden<br />
Benutzer den Zugriff auf diese acall-Funktionen auf diesem Server<br />
erlaubt.<br />
Hinweise:<br />
– Ist im Feld acall-Server der richtige angegeben? Soll ein Kommando<br />
auf allen acall-Servern ausführbar sein, ist der PCRE .* die richrige<br />
Wahl.<br />
– Als aufzurufende Funktion kann kein PCRE angegeben werden.<br />
Dieser Fehler kann eine oder auch beide der folgenden Ursachen haben:<br />
Fehlender Principal : Der entsprechende Principal (in der Form acall/mein<strong>server</strong>.meinezelle<br />
existiert im Kerberos nicht. Dabei ist zu beachten, dass [mein<strong>server</strong>.meinezelle]<br />
zusammen der FQDN des Servers sein muss.<br />
FQDN-Unstimmigkeit : Das Reverse-Lookup des Servers könnte falsch konfiguriert sein (siehe<br />
4.4.1, Seite 79) - mit dem folgendem Befehl kann man das testen:<br />
user@host>host IP-Adresse<br />
8.9.5 Der acall-Aufruf blockiert <strong>für</strong> immer<br />
8.10 Andere Dienste<br />
Man sollte sich die Ausgaben von instantafs.acall-<strong>server</strong> auf Serverseite<br />
ansehen. Folgende mögliche Ausgaben sind von Interesse:<br />
8.10.1 In einer SSH-Shell ist der Zugriff auf das AFS nicht möglich<br />
• rd_req error: Wrong principal in request<br />
Das könnte daran liegen, dass der acall-Server seinen eigenen FQDN<br />
nicht korrekt ermitteln kann. Das liegt oft an der Datei /etc/hosts. Dieser<br />
sollte eine Zeile der Form<br />
[IP-Adresse des Servers] [FQDN] [evtl. weitere<br />
Aliase]<br />
enthalten - z.B. so:<br />
10.0.0.10 afsserv1.cbs.mpg.de afsserv1<br />
Die Reihenfolge ist wichtig. Diese Zeile wäre schon falsch: 10.0.0.10<br />
afsserv1 afsserv1.cbs.mpg.de<br />
Auch darf die FQDN und der Hostname in keiner anderen Zeile wie z.B.<br />
127.0.0.1 afsserv1 localhost<br />
auftauchen.<br />
Der SSH-Server ist per default nicht in der Lage, den <strong>für</strong> AFS-Zugriffe nötigen<br />
Token zu generieren. Loggt man sich also per ssh auf einem Rechner ein, so<br />
agiert man aus Sicht des AFS immer noch als anonymer Nutzer und erhält i.d.R.<br />
keinen Zugriff auf Homedirectories. Es gibt zwei Lösungen <strong>für</strong> dieses Problem:
8.10 Andere Dienste 189<br />
user@host>tokenmgr -l<br />
• Mit dem Kommando<br />
kann man direkt nach dem Login ein Token erstellen und damit arbeiten.<br />
• Die (<strong>für</strong> den Administrator) kompliziertere Lösung ist (<strong>für</strong> den Benutzer)<br />
jedoch komfortabler: SSH mit Kerberos-Support (siehe 7.3.2, Seite 143).<br />
Wenn Sie bereits SSH <strong>für</strong> Kerberos konfiguriert haben und es eigentlich funktionieren<br />
sollte, gehen sie folgende Checkliste durch:<br />
• Liegt in Reichweite des ssh-Prozesses auf dem SSH-Client ein gültiges<br />
Kerberos-TGT? Man kann das wie folgt testen:<br />
user@host>klist 2>/dev/null | grep krbtgt<br />
06/30/04 08:53:11 07/01/04 10:53:07 krbtgt/CBS.MPG.DE@CBS.MPG.DE<br />
user@host>date<br />
Wed Jun 30 12:41:07 CEST 2004<br />
In diesem Fall ist das TGT noch bis fast 10:53 des folgenden Tages gültig.<br />
• Die Tickets auf dem Client müssen unbedingt forwardable sein, damit<br />
sie zum SSH-Server weitergeleitet werden können. So kann man das<br />
testen:<br />
user@host>klist -f 2>/dev/null | grep -A1 krbtgt<br />
08/03/06 10:42:45 08/04/06 12:42:43 krbtgt/CBS.MPG.DE@CBS.MPG.DE<br />
Flags: FPIA<br />
user@host>tokenmgr -l<br />
Das Grosse F unter den Flags ist wichtig. Ist es nicht vorhanden, können<br />
keine Tickets weitergeleitet werden.<br />
• Die Versionsnummer des Host-Tickets auf dem SSH-Client könnte falsch<br />
(sprich: veraltet) sein. Es ist leichter, sicherzugehen, dass dem nicht so<br />
ist, als festzustellen, ob das wirklich der Fehler ist. Man besorge auf<br />
Client-Seite einfach ein neues Ticket/Token:<br />
• Kann man auf dem SSH-Server manuell mit kinit ein TGT holen?<br />
Wenn das nicht geht, kann es an folgendem liegen:<br />
– Ein Kerberos-Server läuft nicht oder ist falsch konfiguriert,<br />
– die DNS-Einträge <strong>für</strong> das Kerberos sind nicht korrekt oder<br />
– die Datei /etc/krb5.conf ist nicht korrekt.<br />
Unter 4.4 (Seite 79) findet man Informationen darüber, wie die DNS-<br />
Einträge und /etc/krb5.conf auszusehen haben.<br />
• Ist die Version des ssh .deb -Paketes in der Lage, mit Kerberos umzugehen?<br />
Man findet das wie folgt heraus:<br />
user@host>ssh -V<br />
OpenSSH_3.8.1p1 Debian 2:3.8.1p1-8+afs, OpenSSL 0.9.6l 04 Nov 2003<br />
Die Kerberos-fähige ssh .deb -Version von InstantAFS hat die Zeichenfolge<br />
“+afs” im Namen.<br />
• Liegt auf dem SSH-Server eine gültige Kerberos-Keytab? Mit dem Kommando<br />
instantafs.kerberos -G (siehe 9.2.18, Seite 201) kann
190 8 Problembehebung<br />
man da<strong>für</strong> sorgen.<br />
8.11 Localhost und die Hostnamensauflösung<br />
8.11.1 /etc/hosts säubern<br />
user@host>hostname -f<br />
afs<strong>server</strong>1.cbs.mpg.de<br />
user@host>hostname -i<br />
10.0.0.10<br />
• Ist die Zeit zwischen Kerberos-Server und dem SSH-Server synchron?<br />
Kerberos reagiert empfindlich auf schlecht synchronisierte Zeit.<br />
• Gibt’s vielleicht Probleme mit der Lokalen Host-Namensauflösung? (siehe<br />
8.11, Seite 190)<br />
• Evtl. hilft ein Blick in das Logfile (/var/log/auth.log) des Kerberos-<br />
Servers (oder der Kerberos-Server, wenn es mehrere gibt). In diesem<br />
Logfile wird z.B. jede fehlgeschlagene Anforderung eines Service-<br />
Principals mit der jeweiligen Ursache gelistet.<br />
Für einige Dienste wie z.B.<br />
• AFS-Datenbank<strong>server</strong> (pt<strong>server</strong>, vl<strong>server</strong>, ...)<br />
• acall-Server<br />
• SSH-Server<br />
ist es unerläßlich, daß die Auflösung der lokalen Hostnamen korrekt funktioniert.<br />
Oft sind ungeeignete Einträge in /etc/hosts vorhanden 8 , die die genannten<br />
Dienste einschränken oder vollkommen unbrauchbar machen.<br />
Hier einige Hinweise - am Beispiel des Rechners afsserv1.cbs.mpg.de - wie die<br />
Datei /etc/hosts aussehen muss:<br />
• Der Hostname darf in keiner Form (also weder verkürzt noch als FQDN)<br />
in einer Zeile erscheinen, die auf das lokale Netz (127.0.0.1/255.0.0.0)<br />
hindeutet. Hier einige Negativbeispiele:<br />
127.0.0.1 afsserv1 localhost localhost.localnet<br />
127.0.0.2 localhost afs<strong>server</strong>1<br />
• Der FQDN, also der Hostname mit angehängtem Domännamen, muß direkt<br />
hinter der IP-Adresse stehen. Also nicht so:<br />
10.0.0.10 afsserv1 afsserv1.cbs.mpg.de<br />
sondern so:<br />
10.0.0.10 afsserv1.cbs.mpg.de afsserv1<br />
Folgende Tests (wieder am Beispiel von afsserv1.cbs.mpg.de) stellen sicher,<br />
dass alles OK ist:<br />
Das hostname -f-Kommando muß die erwartete FQDN zurückliefern,<br />
hostname -i sollte die erwartete IP ausgeben.<br />
8 Natürlich können solche Einträge auch im DNS stehen, das kommt i.d.R. aber nicht vor.
8.11 Localhost und die Hostnamensauflösung 191<br />
8.11.2 Schadensbeseitigung<br />
Ein falscher /etc/hosts-Eintrag kann Fehler in der VLDB hinterlassen haben<br />
Wenn im Log-File eines AFS-Clients eine Zeile wie folgt auftaucht<br />
afs: Lost contact with file <strong>server</strong> 127.0.0.1 in cell [...]<br />
muss man den entsprechenden File<strong>server</strong>-Eintrag aus der VLDB werfen:<br />
admin@afs>vos changeaddr -remove 127.0.0.1
9 AFS- Kerberos- und InstantAFS-Kommandos<br />
9.1 AFS-Kommandos<br />
9.1.1 Arbeiten an AFS-Serverprozessen<br />
In diesem Kapitel werden alle relevanten Kommandos beschrieben, die <strong>für</strong> den<br />
Betrieb einer Zelle benötigt werden.<br />
Der bos<strong>server</strong> stellt einige Kommandos zur Verfügung, um die untergeordneten<br />
Prozesse zu manipulieren und um den Zugriff auf AFS-Serverprozesse zu<br />
steuern. Tabelle 9.1 (Seite 193) zeigt eine kurze Übersicht über die wichtigsten<br />
Kommandos. Weitere Informationen finden sich in [ADMREF].<br />
192
9.1 AFS-Kommandos 193<br />
Funktion Befehl Erklärung<br />
Starten eines neuen bos create Server -instance Dieses Kommando fügt einen neuen AFS-Serverprozess zur Liste<br />
Prozesses<br />
Bezeichnung des Prozesses der Bos<strong>server</strong>-Prozesse hinzu und startet den Prozess. Bei Prozessen<br />
-type Typ -cmd Kommando<br />
vom Typ fs, müssen mehrere -cmd-Parameter angegeben werden.<br />
Bezeichnung des Prozesses ist ein beliebiger Name <strong>für</strong> den Prozess.<br />
Üblicherweise werden die Namen pt<strong>server</strong>, vl<strong>server</strong>, bu<strong>server</strong> und<br />
fs benutzt.<br />
Herunterfahren aller bos shutdown Server Dieses Kommando beendet alle laufenden vom BOS-Server verwalteten Pro-<br />
Serverprozesse<br />
zesse auf dem Server.<br />
Starten aller Server- bos startup Server Mit diesem Befehl wird der bos<strong>server</strong> angewiesen, alle verwalteten Serverprozesseprozesse<br />
zu starten.<br />
Zustand der Server- bos status Server Dieses Kommando zeigt an, welche Prozesse auf dem Server (korrekt) laufen.<br />
prozesse<br />
Neustart aller Pro- bos restart Server -all Startet alle verwalteten Prozesse neu.<br />
zesse<br />
Automatischen Neu- bos setrestart Server -time<br />
start steuern Startzeitpunkt -general<br />
Dieser Befehl definiert, wann der bos<strong>server</strong> sich selbst und alle Prozesse<br />
(regelmäßig) neu startet. Startzeitpunkt kann dabei folgende Werte annehmen:<br />
• never Abschalten des automatischen Neustarts<br />
• Stunde:Minute Täglicher Neustart zur angegebenen Zeit<br />
• Startzeitpunkt Wöchentlicher Neustart am angebenen Tag zur angegebenen<br />
Zeit.<br />
Das folgende Beispiel führt zu einem<br />
Neustart an jedem Sontag 00:00:<br />
bos setrestart localhost<br />
-time ’sat 00:00’<br />
bos listusers Server Dieser Befehl zeigt die Nutzer an, die auf diesen Server zugreifen dürfen. Das<br />
hat nichts mit reinem Dateizugriff auf Files unter /afs zu tun (siehe 3.7.3.5,<br />
Seite 54) sondern mit Berechtigungen zur Ausführung bestimmter vos- bos<br />
und pts-Unterkommandos.<br />
Autorisierte Benutzer<br />
anzeigen<br />
Benutzer hinzufügen bos adduser Server Benutzer Mit diesem Befehl fügt man einen neuen Benutzer in die Liste der autorisierten<br />
Benutzer ein.<br />
Benutzer entfernen bos removeuser Server Dieses Kommando entfernt einen Benutzer von der Liste autorisierter Benut-<br />
Benutzer<br />
zer.<br />
Tabelle 9.1: Verwaltung von Prozessen über den bos<strong>server</strong> mittels des bos-Kommandos
194 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
9.2 InstantAFS<br />
9.2.1 instantafs.acall (Kurzform: acall)<br />
Die in diesem Abschnitt beschriebenen Kommandos (hauptsächlich Perl-<br />
Skripte) sind Teil von InstantAFS und befinden sich im Paket instantafs .deb .<br />
Die einzige Ausnahme ist das im Paket instantafs .deb enthaltene<br />
instantafs.kcheckpass.<br />
Dieses Kommando wird benutzt, um eine acall-Funktion (siehe 7.6.2, Seite<br />
149) auf einem Server im Netzwerk auszuführen. Die Syntax ist wie folgt:<br />
user@host>instantafs.acall acall-Server Funktion Parameter<br />
Also z.B.:<br />
user@host>instantafs.acall db ia:helloworld foo bar<br />
This is instanafs-acall’s innovative hello-world program.<br />
You’ve been identified as: ’ernie’<br />
Those were your arguments:<br />
foo<br />
bar<br />
In diesem Fall wurde das Programm instantafs.acall-helloworld 1 mit den Parametern<br />
foo und bar aufgerufen.<br />
Wer welche Kommandos ausführen darf, ist per default in /a/admin/etc/acall.access<br />
definiert. Es kann auch eine andere Datei zur Zugriffskontrolle<br />
benutzt werden, die über den Parameter - -accessfile Dateiname<br />
definiert werden muss.<br />
instantafs.acall-<strong>server</strong> setzt <strong>für</strong> ausgeführte Programme einige Umgebungsvariablen,<br />
damit diese evtl. weitere Zugriffseinschränkungen vornehmen können.<br />
Informationen über diese Variable sind on-line erhältlich:<br />
user@host>instantafs.acall-<strong>server</strong> - -help<br />
9.2.2 instantafs.acall-backup (Kurzform: ia:backup)<br />
9.2.3 instantafs.acall-helloworld (Kurzform: ia:helloworld)<br />
Einige acall-Funktionen, also Skripte, die sich zum Aufruf über acall eignen,<br />
sind in InstantAFS bereits enthalten - erkennbar an dem Namensmuster<br />
instantafs.acall-[Funktion].<br />
Dieses Skript wird auf dem db-acall-Server benutzt. Es ermöglicht einfachen<br />
Benutzern, die Backup-Instanzen von Volumes mit deren RW-Instanzen zu synchronisieren.<br />
Dieses Testprogramm demonstriert, zum einen, wie man leicht eigene acall-<br />
Funktionen schreiben kann. Ausserdem ist es per default jedem authentifizierten<br />
Nutzer gestattet, dieses Skript als acall-Funktion aufzurufen.<br />
1 “ia:” wird automatisch durch “instantafs.acall-” ersetzt.
9.2 InstantAFS 195<br />
9.2.4 instantafs.acall-release (Kurzform: ia:release)<br />
9.2.5 instantafs.acall-setquota<br />
9.2.6 instantafs.acall-usermgr (Kurzform: ia:usermgr)<br />
Dieses Kommando wird auf einem AFS-DB-Server (genauer: dem db-acall-<br />
Server) mittels acall aufgerufen. Es ermöglicht Benutzern, die RO-Instanzen<br />
bestimmter Volumes mit deren RW-Instanzen zu synchronisieren. Das ist z.B.<br />
sinnvoll, wenn ein Benutzer, der <strong>für</strong> ein bestimmtes Software-Verzeichnis verantwortlich<br />
ist, Änderungen an diesem Verzeichnis durchgeführt hat und die<br />
Änderungen nun allen anderen Benutzern zur Verfügung stellen will.<br />
Dieses Kommando ist die acall-Serverkomponente <strong>für</strong> instantafs.release.<br />
instantafs.acall-release überprüft nicht, ob ein Benutzer berechtigt ist,<br />
ein bestimmtes Volume zu synchronisieren. Diese Überprüfung muß vom<br />
instantafs.acall-<strong>server</strong> durchgeführt werden, wozu man die Datei /a/a/etc/acall.access<br />
entsprechend bearbeiten muß.<br />
Dieses Skript wird mittels acall (siehe 7.6.2, Seite 149) aufgerufen. Es<br />
ermöglicht Benutzern, Volumequotas in gewissen Grenzen zu setzen. Die Konfigurationsdatei,<br />
in denen diese Grenzen definiert werden, heisst /a/a/etc/acallsetquota.conf,<br />
ein Beispiel liegt unter /usr/share/doc/instantafs-doc/examples/acallsetquota.conf<br />
im Paket instantafs-doc .deb .<br />
Dieses Skript wird mittels acall (siehe 7.6.2, Seite 149) aufgerufen. Es verändert<br />
(oder zeigt an) mit jedem Aufruf jeweils einen Zustand eines Benutzers.<br />
Folgende Zustandstypen existieren zu jedem Benutzer:<br />
db : Der Zustand des Benutzers in der PTDB. In diesen Zustand fliesst u.a. die<br />
Mitgliedschaft in den Benutzergruppen users bzw. users-na ein.<br />
krb5 : Dieser Zustand sagt aus, ob der Benutzer ein gültiges Kerberos5-Konto<br />
hat.<br />
homedir : Je nach Position und Existenz des Homedirectory-Volumes errechnet sich<br />
der homedir-Zustand eines Benutzers.<br />
samba : Dieser Zustand zeigt an, ob ein Benutzer auf dem Samba-Gateway einen<br />
gültigen Account hat.<br />
Es ist <strong>für</strong> den Einsatz auf Servermaschinen mit den folgenden Serverprozessen<br />
sinnvoll:<br />
AFS-DB-Server : zum Verwalten der PTDB-Einträge von AFS-Benutzern und zum Verwalten<br />
von AFS-Homedirectories.<br />
Kerberos5-Master-Server : zur Manipulation der Principals in der Kerberos5-Datenbank<br />
Samba-Gateway : zum Generieren der User-Keytab (siehe 3.10.3, Seite 63) und der<br />
LANMAN-/NT-Hashes, die zur Authentifikation von SMB-Nutzern<br />
eingesetzt werden.<br />
9.2.7 instantafs.acall-volcreate (Kurzform: ia:volcreate)<br />
Dieses Skript ist Kern des InstantAFS-Usermanagements (siehe 7.9, Seite 155).<br />
instantafs.acall-volcreate wird benutzt, um Volumes von normalen Benutzern<br />
anlegen zu lassen. In der Konfigurationsdatei /a/a/etc/acall-volcreate.conf läßt<br />
sich definieren, wer welche Volumes wo und mit welchen Optionen anlegen<br />
darf. Der aufrufende Benutzer hat dabei (teilweise) Kontrolle über den Namen
196 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
des neuen Volumes. Alle anderen Parameter werden über die Konfigurationsdatei<br />
definiert. Im Beispielprojekt (siehe 7.11, Seite 159) wird u.a. beschrieben,<br />
wie man dieses acall-Kommando sinnvoll einsetzt. Die Syntax ist wie folgt:<br />
user@host>acall db ia:volcreate Volumename<br />
9.2.8 instantafs.achmod (Kurzform: achmod)<br />
Dieses interaktive Tool stellt eine ncurses-Overfläche zur Verfügung, mit der<br />
ACLs von AFS-Verzeichnissen bearbeitet werden können. Zusätzlich bietet es<br />
auch Funktionen <strong>für</strong> nicht-interaktive Manipulation von ACLs.<br />
Bei Bedarf lassen sich komplette Unterbäume, wenn gewünscht auch über Volumegrenzen<br />
hinweg, mit neuen ACLs versehen. Die man-Page hält weitere<br />
Informationen bereit.
9.2 InstantAFS 197<br />
9.2.9 instantafs.afsdir<br />
Dieses Tool zeigt an, durch welche Volumes ein angebener Verzeichnispfad<br />
im AFS führt, welche Instanzen dabei jeweils benutzt werden und vor allem<br />
warum. Beispiel:<br />
user@host>instantafs.afsdir /a/a/.etc<br />
Listing 9.1: instantafs.afsdir-Output<br />
Walking a l o n g t h e p a t h ’ / a / a / . e t c ’<br />
< / > ( VFS−D i r e c t o r y )<br />
[ / a ] ( Symbolic Link p o i n t i n g i n t o an AFS−p a t h )<br />
/ [ / a f s / a l p h a ] ( AFS−Mountpoint )<br />
|−Volume : r o o t . c e l l<br />
|− D e s c r i p t i o n : Das Z e l l e n−Rootvolume ( u n t e r / a zu e r r e i c h e n )<br />
|− Mountpoint−Type : magic , c e l l = a l p h a ( ’ # a l p h a : r o o t . c e l l ’ )<br />
|− I n s t a n c e : r e a d o n l y<br />
\ _Why : RO of ’ r o o t . c e l l ’ e x i s t s so i t was chosen i n f a v o u r of t h e RW.<br />
/ [ / a f s / a l p h a ] ( AFS−Mountpoint )<br />
|−Volume : r o o t . c e l l<br />
|− D e s c r i p t i o n : Das Z e l l e n−Rootvolume ( u n t e r / a zu e r r e i c h e n )<br />
|− Mountpoint−Type : magic , c e l l = a l p h a ( ’ # a l p h a : r o o t . c e l l ’ )<br />
|− I n s t a n c e : r e a d o n l y<br />
\ _Why : RO of ’ r o o t . c e l l ’ e x i s t s so i t was chosen i n f a v o u r of t h e RW.<br />
[ / a / a ] ( Symbolic Link p o i n t i n g i n t o an AFS−p a t h )<br />
[ / a / admin ] ( AFS−D i r e c t o r y )<br />
|−Volume : r o o t . c e l l<br />
|− D e s c r i p t i o n : Das Z e l l e n−Rootvolume ( u n t e r / a zu e r r e i c h e n )<br />
|− Mountpoint−L o c a t i o n : / a f s / a l p h a<br />
|− I n s t a n c e : r e a d o n l y<br />
\ _Why : ( n o t d i s p l a y e d ) : Type / a / a / s c r i p t s / i n s t a n t a f s . a f s d i r ’ / a / admin ’ t o f i n d o u t<br />
[ / a / admin ] ( AFS−D i r e c t o r y )<br />
/ [ / a / a / . e t c ] ( AFS−Mountpoint )<br />
|−Volume : a . e t c<br />
|− D e s c r i p t i o n : K o n f i g u r a t i o n s f i l e s d e r Z e l l e<br />
|− Mountpoint−Type : r e a d w r i t e (’% a . e t c ’ )<br />
|− I n s t a n c e : r e a d w r i t e<br />
\ _Why : This i n s t a n c e was e x p l i c i t l y r e q u e s t e d by t h e m o u n t p o i n t<br />
9.2.10 instantafs.backup<br />
9.2.11 instantafs.bind-update<br />
9.2.12 instantafs.calcrestore<br />
Dieses Skript fasst 3 Aktionen, die mit dem Backup zu tun haben, zusammen:<br />
1. Synchronisation der Backup-Instanz mit der RW-Instanz zu sichernder<br />
Volumes (siehe 7.2, Seite 141)<br />
2. Synchronisation der RO-Instanzen mit der RW-Instanz zu sichernder Volumes<br />
(siehe 5.5, Seite 109)<br />
3. Auslösen der echten Backups (über das AFS-Backup-System)<br />
I.d.R. wird dieses Tool als cron-Job auf dem Backup-Server aufgerufen - z.B.<br />
einmal pro Tag. Eine Beispieldatei, wie sie unter /etc/cron.d liegen könnte, ist<br />
unter /usr/share/doc/instantafs-doc/examples/instantafs-backup.cron erhältlich.<br />
Die zu sichernden Volumes werden zu Volume-Gruppen zusammengefasst in<br />
der Datei /a/a/etc/backup.conf.<br />
Dieses Skript startet ein manuelles Update der Datenfiles eines DNS-Master-<br />
Servers. Dabei werden alle Dateien (z.B. Zonenfiles und Konfigurationsfiles),<br />
die in /etc/bind/syncfiles aufgeführt sind, per ssh auf die Slave-Server kopiert<br />
und die bind-Instanzen auf den Slave-Servern neu gestartet.<br />
Dieses Skript ermittelt, welche Möglichkeiten bestehen, zerstörte RW-Instanzen<br />
wiederherzustellen. “Zerstört” bezieht sich dabei vor allem auf physische Zer-
198 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
störung (Brand, Diebstahl) sowie auf (z.B. durch Softwarefehler auf Serverseite)<br />
irreparable beschädigte Filesysteme auf den Wirtsplatten von AFS-Servern.<br />
Nicht geeignet ist es hingegen, um versehentliches Löschen durch Benutzer<br />
rückgängig zu machen. instantafs.calcrestore ist geeignet, große Mengen<br />
(viele tausend) von Volumes wiederherzustellen, kann jedoch auch <strong>für</strong> einzelne<br />
sinnvoll verwendet werden.<br />
instantafs.calcrestore analysiert die Zerstörung partitionsweise. Auf der<br />
Kommandozeile gibt man die zerstörten Partitionen an:<br />
admin@afs>instantafs.calcrestore Funktion Servername/Partition<br />
oder auch<br />
root@afs<strong>server</strong>> instantafs.calcrestore Funktion Servername/Partition \<br />
- -localauth<br />
Partition besteht dabei entweder aus einem Buchstaben (<strong>für</strong> die /vicepx-<br />
Partition) oder aus *, um den Server als komplett zerstört zu kennzeichnen.<br />
Es können beliebig viele Partitionen auf beliebig vielen Servern als zerstört<br />
gekennzeichnet werden.<br />
Bei allen Aktionen verlässt sich instantafs.calcrestore ausschließlich auf Daten<br />
aus der VLDB. Es benutzt die Kommandos vos listaddrs, um die Liste der<br />
AFS-File<strong>server</strong> und vos listvldb, um die Liste der Volumes und deren Instanzen<br />
zu erhalten. Es werden keine File<strong>server</strong> direkt kontaktiert. Es muss kein<br />
wirklicher Datenverlust stattgefunden haben, um dieses Tool sinnvoll einsetzen<br />
zu können. Vor allem die -c Option ist auch sinnvoll, um im Vorraus nach fehlender,<br />
jedoch gewünschter Daten-Redundanz im Netzwerk zu suchen.<br />
instantafs.calcrestore beherrscht 3 Modi - alle können ohne Zellensuperuserrechte<br />
benutzt werden. In allen Modi bedeutet ein Exit-Code von 0, dass alle<br />
Volumes wiederherstellbar sind:<br />
Anzeige kritischer Volumes : Der 1. Modus gibt eine Liste der Volumes aus, die nicht automatisch wiederhergestellt<br />
werden können:<br />
user@host>instantafs.calcrestore - -showcritical Server/Partition<br />
Anzeige unkritischer Volumes : Der nächste Modus arbeitet analog zu instantafs.calcrestore<br />
-c , zeigt jedoch genau die Volumes an, die wiederhergestellt werden<br />
können:<br />
user@host>instantafs.calcrestore - -shownoncritical Server/Partition<br />
Skriptgenerierung : Mit diesem Befehl wird ein Shell-Skript (Bourne-Shell) auf STDOUT<br />
geschrieben, das Befehle enthält, um die RW-Instanzen der Volumes von<br />
den zerstörten Partitionen wiederherzustellen:<br />
user@host>instantafs.calcrestore - -makescript Optionen Server/Partition<br />
Folgende Optionen steuern, welche Optionen den Befehlen in dem zu<br />
erzeugenden Shell-Skript mitgegeben werden:<br />
- -localauth : erzeugt AFS-Kommandos mit -localauth-Option. Dadurch ist<br />
es möglich, das erzeugte Skript auf einem AFS-Server ohne AFS-<br />
Client laufen zu lassen.
9.2 InstantAFS 199<br />
- -rorw : erzeugt Code, der vos convertROtoRW-Kommandos enthält.<br />
Damit wird ein sehr schnelles Verfahren 2 benutzt, um RO-Instanzen<br />
auf noch intakten File<strong>server</strong>n in RW-Instanzen zu verwandeln.<br />
-s Neuer Server -p Partition : weist instantafs.calcrestore an, die RW-Instanzen,<br />
die auf zerstörten Servern lagen, auf der angegebenen Partition des<br />
angegebenen Servers neu anzulegen. Entweder diese Option oder<br />
- -rorw muß angegeben werden.<br />
Beispiel:<br />
user@host>instantafs.calcrestore - -makescript - -rorw \<br />
’afsserv2/*’ > /tmp/restore.sh<br />
admin@afs>sh /tmp/restore.sh<br />
Die ersten beiden Modi sind vor allem sinnvoll, um die Datenverluste bei Zerstörung<br />
bestimmter Server abzuschätzen. Man kann sie zur Planung der Datenredundanz<br />
der Zelle einsetzen.<br />
Hinweise <strong>für</strong> alle Modi:<br />
• Die wiederhergestellten Daten sind i.d.R. nicht 100-prozentig aktuell. Sie<br />
spiegeln den Stand zum Zeitpunkt des letzten vos release-Aufrufes des<br />
entsprechenden Volumes wieder. Den Aufruf von vos release sollte man<br />
automatisiert regelmäßig (z.B. mittels cron) ablaufen lassen.<br />
• Es ist möglich, weitere, nicht mehr brauchbare Server oder Partitionen<br />
zu definieren, deren RW-Instanzen jedoch nicht wiederherzustellen sind<br />
(- -unavailable Server/Partition) bzw. die Wiederherstellungsversuche<br />
auf RO-Instanzen von bestimmten Servern/Partitionen zu<br />
beschränken (Option - -available/Partition). Beispiele:<br />
– Dieses Kommando geht auf den zerstörten Server afsserv1 ein,<br />
greift jedoch zur Wiederherstellung nicht auf Instanzen auf den<br />
Rechnern dontuse1 und dontuse2 zu:<br />
user@host>instantafs.calcrestore Funktion afsserv1/\* \<br />
- -unavailable dontuse1/* - -unavailable dontuse2/*<br />
– Dieses Kommando geht auf den zerstörten Server afsserv2 ein, benutzt<br />
jedoch zur Wiederherstellung nur Instanzen, auf den Rechnern<br />
lasthope1 und auf der Partition /vicepb des Rechners lasthope2:<br />
user@host>instantafs.calcrestore Funktion afsserv2/\* \<br />
- -available lasthope1/* - -available lasthope2/b<br />
• Das Skript kann man auf bestimmte Volumes beschränken. Mit der<br />
Option - -volumepcre PCRE kann man einen PCRE angeben, der auf<br />
alle zu bearbeitenden Volumes matchen muss.<br />
Beispiele:<br />
– Dieses Kommando überprüft, ob alle Homedirectories auf dem<br />
Server afsserv1 bei einem Crash wiederhergestellt werden könnten:<br />
admin@afs>instantafs.calcrestore -c - -volumepcre ’user\..*’ \<br />
afsserv1/\*<br />
2 Die Umwandlungszeit ist unabhängig von der Volumegröße
200 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
9.2.13 instantafs.cellcheck<br />
9.2.14 instantafs.<strong>server</strong>check<br />
• Es ist möglich, automatisch Ersatz <strong>für</strong> zerstörte RO-Instanzen zu schaffen.<br />
Die Option - -restorero bewirkt, dass, wenn auf den zerstörten<br />
Partitionen eine RO-Instanz lag, eine RO-Instanz des selben Volumes auf<br />
der durch -s und -p angegebenen Partition angelegt wird. Achtung:<br />
Diese Option ist noch experimentell.<br />
Dieses Programm testet die Einhaltung von Regeln, die der Administrator <strong>für</strong><br />
Daten im AFS festlegt. Hier einige Beispiele <strong>für</strong> solche Regeln:<br />
• Auf Partition /vicepa von File<strong>server</strong> orinoco müssen mindestens 15% des<br />
Speichers frei sein.<br />
• Auf Partition /vicepb von File<strong>server</strong> mekong darf die Summer der Quota<br />
nicht über 300% der Partitionsgröße liegen.<br />
• Volume root.cell muss mindestens 4mal physisch existieren, wobei die<br />
Speicherorte nicht keinerlei Single-Point-of-Failure 3 haben dürfen.<br />
• Volume root.cell muss einmal in der ersten und einmal in der 2. Etage liegen.<br />
Hintergrund: Wenn zwei Netze nur schwach verbunden sind (z.B.<br />
per VPN über das Internet), kann diese Verbindung schon einmal ausfallen.<br />
Eine solche regel stellt sicher, dass wichtige RO-Instanzen in jedem<br />
der dann getrennten Netze vorhanden sind.<br />
• ...<br />
Ein Beispielfile befindet sich im Paket instantafs.doc .deb . Mit man check.conf<br />
bekommt man Informationen zum Aufbau der Konfigurationsdatei check.conf,<br />
doe instantafs.cellcheck steuert.<br />
Dieses Skript kümmert sich nur um die Ebene der Daten und deren Verteilung<br />
in der AFS-Zelle. Will man den Zustand der Dienste und Server untersuchen,<br />
bietet sich instantafs.<strong>server</strong>check an.<br />
Mit diesem Programm können Probleme identifiziert werden, die mit den Serverprozessen<br />
selbst zu tun haben. Es untersucht alle Datenbankprozesse, alle<br />
File<strong>server</strong>prozesse und alle Backup-Server-Prozesse auf Unstimmigkeiten und<br />
Probleme (siehe 8.7, Seite 184) hin und macht Vorschläge, wie diese zu beseitigen<br />
sind. Außerdem überprüft es den Zustand der bos<strong>server</strong>-Prozesse auf<br />
allen AFS-Servern der Zelle und analysiert die AFSDB-Records des DNS. Hier<br />
einige Beispiele:<br />
als Zellensuperuser : Mit Zellensuperuserrechten geht es mit diesem Kommando. Achtung: ein<br />
laufender AFS-Client ist da<strong>für</strong> nötig!:<br />
admin@afs>instantafs.<strong>server</strong>check - -cell cbs.mpg.de <strong>server</strong>5 <strong>server</strong>6<br />
- -localauth : Als Root auf einem AFS-Server (kein AFS-Client nötig):<br />
admin@afs>instantafs.<strong>server</strong>check - -localauth - -cell cbs.mpg.de \<br />
<strong>server</strong>5 <strong>server</strong>6<br />
3 Es lassen sich Gruppen von AFS-Datenpartitionen definieren, die irgendwie zusammenhängen<br />
(z.B. weil sie auf das selbe RAID zugreifen)
9.2 InstantAFS 201<br />
- -nokeycheck : Ohne Superuserrechte. Dabei werden alle Überprüfungen übersprungen,<br />
bei denen AFS-Superuserrechte benötigt werden:<br />
admin@afs>instantafs.<strong>server</strong>check - -nocellroot - -cell cbs.mpg.de \<br />
<strong>server</strong>5 <strong>server</strong>6<br />
9.2.15 instantafs.getvoldirs<br />
9.2.16 instantafs.homedir<br />
9.2.17 instantafs.kcheckpass<br />
9.2.18 instantafs.kerberos<br />
Hinweise:<br />
• Es müssen unbedingt alle DB-Server angegeben werden. Das ist nötig,<br />
um zu überprüfen, ob im DNS und in den DB-Serverlisten der<br />
AFS-Server auch wirklich alle DB-Server eingetragen sind.<br />
• instantafs.dbcheck überprüft auch die bekannten AFS-Schlüssel der<br />
DB-Server. Dazu sind allerdings Zellenadministrator-Privilegien (entweder<br />
durch ein entsprechendes Token oder über einen lokal erreichbaren<br />
AFS-Schlüssel auf einem AFS-Server) nötig. Verfügt man beim Aufruf<br />
nicht über solche Privilegien, sollte man die Option - -nokeycheck<br />
anfügen um entsprechende Fehlermeldungen zu minimieren.<br />
• instantafs.<strong>server</strong>check überwacht die untere Ebene des AFS - also<br />
die Server selbst sowie die Dienste. Um alles darüber kümmert sich<br />
instantafs.cellcheck.<br />
Dieses Skript kann IDs von Volume-Instanzen in die entsprechenden Pfade auf<br />
dem AFS-File<strong>server</strong> umrechnen - also den Speicherort der Files eines Volumes<br />
im VFS des File<strong>server</strong>s ermitteln.<br />
Auch der umgedrehte Weg ist möglich - also die Ermittlung der Instanz-ID aus<br />
einem Pfad einer Datenpartition.<br />
Dieses Skript ist als Demonstration gedacht. Es dient dazu, ein bereits erstelltes<br />
Homedirectoryvolume mit sicheren Zugriffsrechten zu versehen. Es wird<br />
üblicherweise nur als Unterprogramm von instantafs.acall-usermgr<br />
(siehe 9.2.6, Seite 195) auf dem db-acall-Server (siehe 7.6.2, Seite 149) aufgerufen.<br />
Sie sollten dieses Skript auf dem db-acall-Server an die Gegebenheiten ihrer<br />
Zelle anpassen.<br />
Dieses Skript ist im Gegensatz zu den anderen InstantAFS-Skripten im Paket<br />
instantafs-client .deb enthalten. Wird instantafs-client .deb installiert, ersetzt es<br />
per dpkg-divert das unter KDE2 und KDE3 verwendete kcheckpass.<br />
Sperrt ein Benutzer seinen KDE-Desktop und gibt ihn danach per Eingabe seines<br />
Passwortes wieder frei, dann überprüft dieses Tool das Passwort und benutzt<br />
es, um den AFS-Token des Nutzers aufzufrischen.<br />
Dieses Skript hat mehrere Funktionen:
202 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
9.2.19 instantafs.release (Kurzform: iarel)<br />
user@host>iarel root.cell<br />
user@host>iarel -d ∼<br />
9.2.20 instantafs.remote<br />
• Mit ihm können auf komfortable Weise Kerberos-Keytabs (siehe 3.10.3,<br />
Seite 63) an Rechner einer AFS-Zelle verteilt werden. Damit sich Benutzer<br />
überall ohne Passwort einloggen können (siehe 7.3.2, Seite 143), sollte<br />
jeder Computer, vor allem jeder Arbeitsplatzrechner, einen Kerberos-<br />
Principal besitzen. Dieses Skript lässt sich auch auf eine größere Menge<br />
Computer anwenden. Außerdem lässt es sich leicht automatisieren.<br />
Sicherheitsbewusste werden anmerken, dass es keine gute Idee ist,<br />
Kerberos-Schlüssel übers Netz zu schicken. Man sollte jedoch bedenken,<br />
dass der Kerberos-Schlüssel eines Dienstes auf einer Workstation, zu der<br />
Benutzer physischen Zugang haben, sowieso unsicher gelagert wird. Der<br />
worst case wäre, dass sich ein Angreifer als root auf der Workstation<br />
einloggt, was auch mit einer Boot-CD (z.B. Knoppix) gelingt. Zugriff auf<br />
das AFS-Filesystem mit erhöhten Rechten ist so jedoch nicht möglich<br />
(siehe 7.3.1, Seite 142).<br />
• Es kann bei Bedarf (also bei einer Änderung), oder auf Wunsch, die<br />
Kerberos-Datenbank vom Master- zu den Slave-Servern kopieren werden.<br />
Dieses Skript wird bei Bedarf ausgelöst und updated dann die<br />
Kerberos-Slave-Server. Es kommt ausschließlich auf dem Kerberos-<br />
Master-Server zum Einsatz (siehe 4.4.4.5.2, Seite 89). Dieses Kommando<br />
benutzt nicht den kpropd sondern ausschließlich ssh, um die<br />
Kerberos-Datenbank an die Slave-Server der Zelle zu schicken.<br />
Dieses Kommando ist ein Wrapper um vos release, der automatisch eine funktionierende<br />
Authentifikationsmethode wählt. Folgendene Authentifikationsmethoden<br />
werden unterstützt:<br />
local : Authentifikation per -localauth-Option, also mittels eines lokal unter<br />
/etc/openafs/<strong>server</strong>/KeyFile gespeicherten AFS-Key<br />
token : Authentifikation mittels des aktuellen Tokens<br />
acall : Aufruf der acall-Funktion instantafs.acall-release auf dem acall-db-<br />
Server – die Einzige Methode, die normale Benutzer verwenden können.<br />
Dieses Kommando ist nützlich, um normalen Benutzern die Möglichkeit zu geben,<br />
einzelne Volumes zu verwalten (siehe 7.10, Seite 158).<br />
Hier einige Anwendungsbeispiele:<br />
• Das Root-Volume der Zelle releasen:<br />
• Das eigene Homedirectory releasen:<br />
Dieses Kommando wird von instantafs.setup und von einigen Routinen des<br />
instantafs-customclient .deb -Paketes (siehe 7.14.1, Seite 168) benutzt, um<br />
AFS-Clients, AFS-Server und andere Server, die <strong>für</strong> AFS notwendig sind, zu<br />
konfigurieren.<br />
Das funktioniert mit instantafs.setup z.B. wie folgt:
9.2 InstantAFS 203<br />
1. Der Administrator richtet eine Zelle mit instantafs.setup ein und wählt<br />
afsinit im Hauptmenü aus - die Funktion, <strong>für</strong> die Grundkonfiguration<br />
von AFS-Servern.<br />
2. instantafs.setup ruft die call_helper()-Funktion <strong>für</strong> jeden AFS-<br />
Server auf.<br />
3. call_helper() schickt die XML-Konfigurationsdatei der aktuellen<br />
Zellenkonfiguration zum Server:<br />
user@host>scp /tmp/config.xml root@10.2.1.1:/tmp/config.xml<br />
(vereinfacht)<br />
und startet ssh <strong>für</strong> jeden Aufruf in dieser Form:<br />
user@host>ssh root@10.2.1.1 instantafs.remote - -config /tmp/config.xml \<br />
afsinit<br />
9.2.21 instantafs.setquota<br />
9.2.22 instantafs.setup<br />
9.2.23 instantafs.tokenmgr<br />
9.2.24 instantafs.tool (Kurzform: iat)<br />
(vereinfacht)<br />
In Wirklichkeit werden i.d.R. einige zusätzliche Optionen an instantafs.remote<br />
übertragen. Auch werden u.U. spezielle Optionen <strong>für</strong> ssh benutzt.<br />
Letztendlich wird auch nicht /tmp benutzt, um die Konfigurationsdatei<br />
zwischenzuspeichern. Die genauen Kommandos werden angezeigt, wenn<br />
instantafs.setup im Debug-Modus läuft (Menüpunkt “options/debug”).<br />
4. instantafs.remote erkennt anhand des Schlüsselwortes afsinit, dass<br />
der Grundstein <strong>für</strong> eine AFS-Serverinstallation gelegt werden soll und<br />
richtet die nötigen Konfigurationsfiles entsprechend der Zellenkonfiguration<br />
in /tmp/config.xml ein.<br />
Mit diesem Programm können Volumequotas neu gesetzt werden. Dabei wird<br />
per acall die Funktion instantafs.acall-serquota aufgerufen, die wiederum anhand<br />
der Datei /a/admin/etc/acall-setquota.conf entscheidet, ob die Modifikation<br />
erlaubt ist, oder nicht.<br />
Diese Funktion ist vor allem <strong>für</strong> "kleine <strong>Administratoren</strong>", die zwar Benutzer<br />
verwalten sollen, jedoch nicht die volle Kontrolle über die Zelle bekommen<br />
dürfen.<br />
Dieses Tool ist das Setup-Programm von InstantAFS. Es besitzt eine dialogbasierte<br />
Benutzerschnittstelle und zeigt bei Bedarf jeden Schritt der Installation<br />
einzeln an. Der Ablauf der Installation ist unter 4.3 (Seite 69) beschrieben.<br />
Dieses Tool ist <strong>für</strong> die komfortable Handhabung von AFS-Tokens gedacht. Es<br />
kann ausschliesslich mit MIT-Kerberos5 arbeiten. Einige Beispiele sind in der<br />
man-Page enthalten. Es gibt auch eine ausführlichere <strong>Anleitung</strong> im Internet:<br />
http://fbo.no-ip.org/tokenmgr<br />
Dieses Tool enthält nützliche Funktionen, die vor allem zum schnellen Manuellen<br />
Analysieren und Manipulieren der eigenen AFS-Zelle dienen.
204 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
9.2.25 instantafs.usermgr<br />
Das umfasst z.B. Funktionen, die mit Volumes umgehen, dabei aber ein Batchfreundlicheres<br />
Format erwarten.<br />
Die man-page bietet weitere Informationen.<br />
Mit diesem interaktiven Tool können Benutzer verwaltet werden. Das umfasst<br />
die folgenden Tätigkeiten:<br />
• Anlegen von Benutzern<br />
• Löschen von Benutzern<br />
• Deaktivieren von Benutzern, d.h. vorrübergehendes Sperren des Zugangs<br />
• Aktivieren von Benutzern, d.h. Aufheben einer vorrübergehenden Sperre<br />
• Ändern von Benutzerpasswörtern<br />
Hinweise:<br />
9.2.26 instantafs.volgrep (Kurzform: volgrep)<br />
• Dieses Tool wird niemals Daten löschen. Homedirectories von neuen Benutzern<br />
werden zwar erzeugt, jedoch wird niemals ein Homedirectory gelöscht<br />
- es verbleibt vielmehr mit dem Namen user-na.<br />
auf dem File<strong>server</strong>.<br />
• Dieses Tool muß das Recht haben, auf verschiedenen Servern bestimmte<br />
acall-Funktionen (siehe 7.6.2, Seite 149) aufzurufen:<br />
ia:usermgr : wird benötigt, um den Kerberos-Account, den Eintrag in die PT-<br />
Datenbank und den Samba-Account eines Benutzers zu bearbeiten<br />
(siehe 9.2.6, Seite 195).<br />
ia:volcreate : wird eingesetzt, um das Homedirectory von neuen Benutzern anzulegen.<br />
InstantAFS setzt diese Rechte bei der Installation <strong>für</strong> den AFS-Benutzer<br />
uadmin. Man kann das auch manuell machen - die Beispiel-Files unter<br />
/usr/share/doc/instantafs-doc/examples helfen da weiter.<br />
• Mit der Option - -nosamba wird der Zugriff auf das Samba-Gateway<br />
verhindert. Das ist u.U. nötig, wenn kein Samba-Gateway vorhanden ist,<br />
da dann die entsprechenden Fehlermeldungen stören.<br />
Weitere Informationen finden man unter 7.9 auf Seite 155.<br />
Dieses Kommando zeigt eine Liste von Volumes an, die bestimmten zu definierenden<br />
Kriterien entsprechen. Die Syntax ist dabei folgende:<br />
user@host>volgrep Optionen Kriterium=Wert ...<br />
user@host>volgrep - -help<br />
Weitere Hilfe erhält man mit:<br />
Dieses Kommando zeigt auch alle gültigen Kriterien an, nach denen Volumes<br />
gefiltert werden können.
9.2 InstantAFS 205<br />
9.2.26.1 Selektionsbedingungen<br />
9.2.26.2 Anzeigemodi<br />
Format OptionErklärung<br />
Alle Instanzen -I Anzeige aller Instanzen matchender<br />
Volumes<br />
Alle instanzen (2) -u Anzeige aller Instanzen des Volumes<br />
als URLs<br />
Alle Informationen -l Ausgabe des gesammten Volume-<br />
Datenblocks als Perl-Code<br />
Alle Informationen -x Ausgabe des gesammten Volume-<br />
(XML)<br />
Datenblocks als XML<br />
RW-Instanzen -r Anzeige der URLs der RW-<br />
Größeninformationen -t<br />
Instanzen selektierter Volumes.<br />
Anzeige des Volume-Namens, sowie<br />
der Quota und der Groesse der<br />
RW-Instanz<br />
Tabelle 9.2: Anzeigeoptionen von instantafs.volgrep<br />
Es können beliebig viele Kriterium=Wert-Gruppen angegeben werden. Alle<br />
angezeigten Volumes müssen alle diese Ausdrücke erfüllen. Ausserdem kann<br />
man Globber-Ausdrücke, denen Volumes genügen müssen, ohne = angeben,<br />
solange sie kein =-Zeichen enthalten.<br />
Hier einige Beispiele:<br />
user@host>volgrep rolocation=afsserv1/a<br />
zeigt alle Volumes an, von denen auf afsserv1 auf Partition a eine RO-Instanz<br />
liegt.<br />
user@host>volgrep pcrename=’.[a-z].*’ ’rwlocation=afsserv2/*’<br />
user@host>volgrep user.\*<br />
zeigt alle Volumes, deren zweites Zeichen im Namen ein kleiner Buchstabe ist<br />
und deren RW-Instanz auf afsserv2 liegt.<br />
zeigt alle Volumes an, die mit user. beginnen.<br />
user@host>iarel ‘volgrep user.\* ‘<br />
9.2.27 instantafs.vs<strong>server</strong><br />
unterzieht alle Benutzerhomedirectories einem vos release.<br />
Die ausgewählten Volumes werden per default einfach mit Namen - eines pro<br />
Zeile - angezeigt. Durch Optionen (siehe Tabelle 9.2) läßt sich das Ausgabeformat<br />
ändern.<br />
Dieses Programm sammelt Informationen (z.B. Volumenamen, Quotainformationen,<br />
Zugriffsstatistiken und Daten über den verfügbaren Speicher) aus der<br />
Zelle ein und legt sie an definierter Stelle (/a/a/.cellinfo per default) in ein komprimiertes<br />
XML-File.
206 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
9.2.28 instantafs.vtapes<br />
Mehr dazu unter 7.15 auf Seite 169.<br />
9.3 Wichtige AFS-bezogene Kommandos<br />
instantafs.vtapes ist die Schnittstelle zwischen dem AFS-Backup-<br />
System und den auf einer oder mehreren großen Platten archivierten virtuellen<br />
Backup-Bändern (vtapes). Weiteres zu diesem Skript ist im Abschnitt Backup<br />
(siehe 5.2, Seite 100) beschrieben.<br />
In Tabelle 9.3 sind wichtige Kommandos aufgelistet, die <strong>für</strong> AFS-Benutzer und<br />
-<strong>Administratoren</strong> von Interesse sind. In Spalte BC ist vermerkt, ob InstantAFS<br />
<strong>für</strong> das entsprechende Programm Bash-Completion 4 ermöglicht.<br />
4 die automatische Vervollständigung von Parametern dieses Kommandos in der Bourne Again<br />
SHell
9.3 Wichtige AFS-bezogene Kommandos 207<br />
Kommando BC Paket Beschreibung<br />
aklog - openafs-krb5 .deb aklog holt mit dem im Credentials-Cache gespeicherten Kerberos5-TGT ein Ticket <strong>für</strong> den<br />
afs-Service. Anschließend wandelt es dieses Service-Ticket in einen Token um und legt es im<br />
Kernel ab. Dieses Kommando muss bei Benutzung von AFS nach kinit ausgeführt werden,<br />
um Zugriff auf das AFS zu erlangen.<br />
asetkey - openafs-krb5 .deb Dieses Kommando ist nötig, um eine MIT-Kerberos5-Keytab in eine AFS-Schlüsseldatei umzuwandeln.<br />
Außerdem können damit auch Schlüssel in einer AFS-Schlüsseldatei angezeigt<br />
bzw. gelöscht werden.<br />
backup - openafsclient<br />
.deb<br />
Mit backup wird die BDB manipuliert und werden AFS-Backups/Rücksicherungen ausgelöst.<br />
balance - balancer-afs .deb Dieses Programm wird <strong>für</strong> automatisches Loadbalancing <strong>für</strong> RW-Daten im AFS benutzt (siehe<br />
6.11.2, Seite 133).<br />
√<br />
bos<br />
openafsclient<br />
.deb<br />
Mit den zahlreichen Unterkommandos von bos wird der bos<strong>server</strong> auf AFS-Server-<br />
Maschinen gesteuert. In [ADMREF] sind alle Unterkommandos detailiert beschrieben. Onlinehilfe<br />
ist mit bos help abrufbar.<br />
cdb - (openafs-source) Dieses Tool kann benutzt werden um binäre Debug-Files von File<strong>server</strong>n (siehe 6.10.1.2, Seite<br />
126) im Klartext auszugeben.<br />
√<br />
dumptool<br />
(openafs-tools) Mit diesem Tool ist es möglich, aus Volume-Dumps einzelne Dateien zu extrahieren.<br />
√<br />
fs<br />
openafs-client Die Unterkommandos dieses Tools dienen der Steuerung des lokalen Cachemanagers. Außerdem<br />
lassen sich damit bestimmte AFS-spezifische Aktionen im AFS-Namensraum durchführen<br />
(z.B. Anlegen von Volume-Mountpoints). Die Unterkommandos von fs sind in<br />
[ADMREF] beschrieben. Onlinehilfe ist mit fs help abrufbar.
208 9 AFS- Kerberos- und InstantAFS-Kommandos<br />
√ .deb kadmin<br />
krb5-user Dieser Befehl ist eine kleine Shell, mit der sich die Kerberos-Datenbank auf einem entfernten<br />
Server (Berechtigung vorrausgesetzt) manipulieren lässt. Mit kadmin lassen sich z.B. Principals<br />
anlegen und Keytabs <strong>für</strong> Principals erzeugen.<br />
√<br />
kadmin.local krb5-admin<strong>server</strong><br />
.deb<br />
Dieser Befehl funktioniert ähnlich wie kadmin. Er kann nur auf dem Kerberos5-Master-<br />
Server eingesetzt werden und verlangt keine Authentifikation (root-Rechte auf dem Server<br />
vorrausgesetzt).<br />
√ .deb kinit<br />
krb5-user Dieses Kommando holt vom Kerberos5-Server ein TGT. Dazu ist i.d.R. die Eingabe eines<br />
Passwortes nötig.<br />
√<br />
pts<br />
openafsclient<br />
.deb<br />
Mit den Unterkommandos von pts ist der Zugriff auf die PTDB möglich (also die Manipulation<br />
und das Auslesen von Informationen über AFS-Benutzer und AFS-Benutzergruppen). Die<br />
Unterkommandos von pts sind in [ADMREF] beschrieben. Onlinehilfe ist mit pts help<br />
abrufbar.<br />
tokenmgr - instantafs .deb Mit tokenmgr lassen sich verschiedene häufig auftretende Prozeduren vereinfachen, die damit<br />
zu tun haben, einen AFS-Token zu holen und aktuell zu halten.<br />
unpagsh - openafs-tools .deb Dieses Kommando startet eine Shell, die sich in keiner PAG (siehe 3.7.2.3, Seite 49) befindet.<br />
Achtung: Das funktioniert nur unter Kernel 2.4.<br />
√<br />
udebug<br />
openafsclient<br />
.deb<br />
udebug zeigt Informationen über AFS-DB-Server an.<br />
√<br />
vos<br />
openafsclient<br />
.deb<br />
Die Unterkommandos von vos dienen dem Zugriff auf AFS-Daten auf Volume-Ebene sowie<br />
dem Auslesen und der Manipulation der VLDB. In [ADMREF] sind die Unterkommandos<br />
beschrieben. Informationen über vos convertROtoRW befinden sich unter 5.7.1, Seite 111.<br />
Onlinehilfe gibt’s mittels vos help.
10 Andere Betriebssysteme und Plattformen<br />
10.1 Windows<br />
10.1.1 Allgemeines zu 32bit-Windows<br />
10.1.2 Allgemeines zu NT-basierten Windows-Versionen<br />
AFS läuft auf vielen Betriebsystemen nativ. Da sich diese Dokumentation sonst<br />
primär auf Debian GNU/Linux konzentriert, sollen in diesem Kapitel einige<br />
Hinweise zur AFS-Installation auf anderen Systemen gegeben werden. Dabei<br />
geht es immer nur um AFS-Clients, nicht um Server.<br />
Jegliche Software, die <strong>für</strong> den Zugriff auf Windows-Clients benötigt wird, kann<br />
von der InstantAFS-Homepage heruntergeladen werden. Diese Clients wurden<br />
nicht im Rahmen des InstantAFS-Projektes entworfen - jedoch ist es in der<br />
Regel komfortabler, wenn man alles an einer Stelle findet. Die Original-URLs<br />
sind jeweils mit angegeben.<br />
Die 32bit-Versionen der Windows-Client-Software beinhalten jeweils ein grafisches<br />
Installationsprogramm. Außerdem ist ein grafisches Konfigurationsinterface<br />
enthalten. Hinweise:<br />
• Der AFS-Client ist ein Windows-Dienst, kann deshalb nur von <strong>Administratoren</strong><br />
gestartet werden.<br />
• Neben den Kommandozeilentools fs, vos, bos steht ein grafisches Interface<br />
<strong>für</strong> AFS-spezifische Filesystem-Operationen als Shell-Erweiterung<br />
(Rechte Maustaste auf ein Verzeichnis im Explorer ...) zur Verfügung.<br />
Damit können ACLs, Mountpoints und Quotas eingesehen und manipuliert<br />
werden.<br />
OpenAFS wird <strong>für</strong> Windows i.d.R. als Installierbares Paket vorkompiliert verteilt.<br />
Es ist auch möglich OpenAFS selbst zu übersetzen. Gleiches gilt <strong>für</strong> den<br />
Kerberos-Client.<br />
Die OpenAFS-Quellen enthalten Code, um OpenAFS-Server unter Windows<br />
betreiben zu können. Grundsätzlich ist aber davon abzuraten einen Windows-<br />
AFS-Server im Produktivbetrieb zu haben. Gründe sind:<br />
• Der Code wird nicht aktiv weiterentwickelt/gewartet.<br />
• Der Server funktioniert bei aktuellen OpenAFS-Versionen nicht.<br />
• Die Performance ist schlechter als auf einem Linux-Server<br />
• Man benutzt keine Windows-Server, wenn Unix-Server die selbe Aufgabe<br />
erfüllen können<br />
Für Bastelzwecke kann von der InstantAFS-Homepage trotzdem ein funktionsfähiger<br />
OpenAFS-Server <strong>für</strong> Windows heruntergeladen werden.<br />
209
210 10 Andere Betriebssysteme und Plattformen<br />
10.1.3 Windows 3.11<br />
10.1.4 Windows 95, 98, ME<br />
10.1.5 Windows NT 4.0<br />
10.1.5.1 Installationsanleitung<br />
10.1.6 Windows 2000, XP<br />
Für Windows 3.11 existiert kein nativer AFS-Client. Es wird auch nie einen<br />
geben. Solche Clients können jedoch per SMB über ein Samba-Gateway auf<br />
den AFS-Namensraum zugreifen, wobei auch authentifizierter Zugriff möglich<br />
ist. AFS-Sonderfunktionen wie das Auslesen von Quotainformationen oder das<br />
Setzen von ACLs können mit dieser Lösung jedoch nicht benutzt werden.<br />
Für Windows 98 steht ein simpler Client zur Verfügung, der jedoch nicht gepflegt<br />
wird. Auch unterstützt er keine Authentifikation via Kerberos5. Wenn ein<br />
Kerberos5-Server <strong>für</strong> die Zelle benutzt wird (was unter InstantAFS zwingend<br />
ist), ist deshalb nur anonymer Zugriff auf das AFS möglich.<br />
Für Windows NT 4.0 (alle Versionen) steht eine ältere Version von Open-<br />
AFS (1.2.9a) zur Verfügung. Der AFS-Client setzt zwar nur einen Rechner<br />
vorraus 1 , jedoch handelt es sich im Kern um einen lokal laufendes AFS-zu-<br />
SMB-Gateway. Um authentifiziert auf das AFS zugreifen zu können, ist die<br />
Installation des MIT-Kerberos5-Clients nötig.<br />
Hinweise:<br />
• Der NT4-AFS-Client wird nicht mehr gewartet. Wechseln sie auf eine<br />
aktuellere Windows-Version bzw. auf ein Unix-Betriebssystem.<br />
Gerüchte:<br />
• Dieser AFS-Client soll bei dieser alten Version Probleme mit sog. überlappenden<br />
Schreibzugriffen, wie sie u.a. von MS-Office Anwendungen<br />
durchgeführt werden, haben.<br />
• Die Unterscheidung verschiedener Benutzer - z.B. bei mehreren Sitzungen<br />
eines Terminal<strong>server</strong>s - soll Probleme bereiten. Benutzer können u.U.<br />
mit Rechten arbeiten, die eigentlich einem anderen gerade eingeloggten<br />
Benutzer zustehen. Dieses Problem ist in neueren Versionen behoben.<br />
Der Kerberos5-MIT-Client sowie der OpenAFS-Client sind manuell zu installieren.<br />
Alternativ stehen MSI-Pakete <strong>für</strong> beide Clients zur Verfügung.<br />
Für neuere Windows-Versionen auf NT-basis steht ein aktueller AFS-Client zur<br />
Verfügung, der vom Aufbau her mit der Windows NT4.0-Version vergleichbar<br />
ist. Folgende Windows-Versionen fallen darunter:<br />
• Windows 2000 Workstation und Server<br />
• Windows XP Home und Professional<br />
• Windows 2003 Server und R2 Server<br />
Dieser Client wird sehr aktiv weiterentwickelt, unter http://<strong>web</strong>.mit.<br />
edu/jaltman/Public/OpenAFS/ gibt’s immer die aktuellste Version<br />
- auch als MSI-Paket sowie als Debug-Version, die man benötigt, um den<br />
Entwicklern bei Problemen wichtige Informationen zukommen zu lassen.<br />
1 Im Gegensatz zum sog. AFS-Light-Gateway
10.1 Windows 211<br />
10.1.6.1 Installationanleitung<br />
Diese <strong>Anleitung</strong> deckt folgende AFS-spezifische Konfigurationen ab:<br />
• Authentifizierter und anonymer Zugriff auf das AFS<br />
• Zur Authentifikation wird der MIT-Kerberos5-Server benutzt - Active Directory<br />
ist nicht notwendig.<br />
• Automatisches Kerberos-TGT- und Token-Holen beim einloggen wenn<br />
Windows-Passwort und Kerberos-Passwort übereinstimmen.<br />
Diese <strong>Anleitung</strong> kann folgendes nicht 2 bieten:<br />
• Windows-Benutzerprofile im AFS<br />
• Wartungsarme Benutzereinrichtung. Alle Nutzer, die an einem gegebenen<br />
Rechner mit AFS arbeiten müssen, müssen von Hand als lokale Benutzer<br />
angelegt werden.<br />
Zuerst müssen alle benötigten Dateien heruntergeladen werden:<br />
• Der OpenAFS-Client<br />
• Der Kerberos-Client<br />
• Das afsk5log.exe -Binary sowie das dazugehörige Batch file afsk5log.bat.<br />
Beide werden ins Windows-Verzeichnis (also z.B. c:\windows gelegt)<br />
und müssen/dürfen nicht von Benutzern veränderbar sein.<br />
Die Installation beginnt mit dem OpenAFS-Client. Angemeldet muss man natürlich<br />
als benutzer mit lokalen Administratorrechten sein. Hier wird von einer<br />
manuellen Installation per Ausführbarem Installer-Binary ausgegangen - .msi-<br />
Pakete stehen auch zur Verfügung.<br />
Man wähle die Sprache English. Installiert werden müssen die Komponenten<br />
AFS Client und MS Loopback Adapter - letzterer erhöht die Stabilität bei wechselnden<br />
Netzwerkinterface-Zuständen wie sie z.B auf WLAN-tauglichen Notebooks<br />
oder auf DHCP-benutzenden Rechnern vorkommen. Als CellServDB<br />
kann man die dem Paket beiliegende nehmen - die eigene Zelle wir später per<br />
DNS erschlossen.<br />
Als Zellenname gibt man (kleingeschrieben!) die eigene Zelle ein und check<br />
sämmtliche Checkboxen an.<br />
2 Zumindest zum jetzigen Zeitpunkt
212 10 Andere Betriebssysteme und Plattformen<br />
Es folgt die Konfiguration des System-Tools, das als kleines Symbol z.B. auf<br />
abgelaufene Tickets hinweist. Hier müssen alle Checkboxen angecheckt sein -<br />
mit Ausnahme von Show credentials window on startup.<br />
Der OpenAFS-Installer beendet die Installation, ein Neustart ist fällig. Ohne<br />
den Neustart kann man den OpenAFS-Client nicht konfigurieren. Weiter macht<br />
man dann wieder als Nutzer mit Administratorrechten.<br />
In der Systemsteuerung ruft man die AFS Client Configuration auf. Im Tab<br />
General muss die Option Optain AFS tokens when logging into Windows:<br />
Im Tab Drive Letters wird definiert, welche Laufwerksbuchstaben auf welche<br />
AFS-Pfade zeigen sollen. Am MPI/CBS ist Standard, die lokale Zelle auf Laufwerk<br />
F zu legen. Es ist sinnvoll, wenn diese Verbindungbei jedem erneuten<br />
Einloggen wiederhergestellt wird, also wird Restore this mapping whenever I<br />
logon angecheckt. Der text im Submount-Feld wird später als Laufwerks-Label<br />
im Filemanager gezeigt - ÄFSïst ein sinnvoller Text.
10.1 Windows 213<br />
Im Tab Advanced werden jetzt noch nervice Hinweise deaktiviert, die auftauchen,<br />
wenn das Windows-Passwort nicht mit dem Kerberos5-Passwort übereinstimmt.<br />
Dazu wählt man Logon.. und setzt dort Fail Logins Silently auf Yes.<br />
Jetzt zur Kerberos-Installation. Wieder wird vom ausführbaren Installer ausgegangen.<br />
Dieser fragt nach einer Sprache und erhält vom Administrator English<br />
als Antwort.<br />
An Komponenten wird lediglich der KfW Client benötigt.<br />
Der Installer bietet an, ihn im vorraus mit Konfigurationsinformationen zu befüllen.<br />
Man lade die entsprechende Datei (krb5.ini) herunter. Dann wird das<br />
heruntergeladene File als Quelle <strong>für</strong> Konfigurationsinformationen angegeben.<br />
Achtung: Direkt aus dem Kerberos-Installer herunterladen ist aufwendiger.<br />
Im Dialog Kerberos Configuration müssen die Checkboxen Autostart the Leash<br />
ticket manager each time you Login to Windows und Ensure that Kerberos tickts<br />
are available throughout the Windows logon session [-autoinit] angecheckt
214 10 Andere Betriebssysteme und Plattformen<br />
sein.<br />
Eine Anpassung in der Registry sorgt da<strong>für</strong>, dass beim Windows-Logon wirklich<br />
ein TGT geholt wird und sich der Kerberos-Support nicht in Authentifikation<br />
erschöpft. Der Schlüssel<br />
HKLM/SYSTEM/CurrentControlSet/Control/Lsa/Kerberos/Parameters/AllowTGTSessionKey<br />
muss ein dword mit dem Wert 1 sein.<br />
Die Datei afsk5log.bat wird in den Autostart-Ordner <strong>für</strong> alle Benutzer per Verknüpfung<br />
verlinkt. Das stellt sicher, dass das TGT beim Logon in ein Token<br />
umgerechnet wird.<br />
Jetzt muss man Windows noch dazu bringen, mit einem non-MS-Kerberos-<br />
Server zusammenzuarbeiten. Dazu wird einige Aufrufe von ksetup.exe nötig:<br />
c:\>ksetup /SetRealm Kerberos-Realmname<br />
c:\>ksetup /MapUser * *<br />
Das folgende Kommando definiert die Kerberos-Server <strong>für</strong> eine bestimmte Domaine.<br />
Kerberos-Server werden hier nicht angegeben, was Windows veranlasst,<br />
im DNS nach KDCs zu suchen.<br />
c:\>ksetup /AddKdc Rechnername in Grossschreibung<br />
10.1.7 Windows XP 64bit<br />
10.1.8 Windows Vista<br />
Jetzt ist ein Reboot fällig. Anschliessend kann man sich als beliebiger normaler<br />
Nutzer einloggen Jedoch funktioniert das automatische Token-Holen erst bei<br />
zweiten einloggen eines jeden Nutzers. Beim Einloggen ist als Domäne der<br />
aktuelle Rechnername auszuwählen.<br />
Unter http://<strong>web</strong>.mit.edu/jaltman/Public/OpenAFS/ kann<br />
man MSI-Pakete <strong>für</strong> 64bit-Windows herunterladen.<br />
Windows Vista wird derzeitig von OpenAFS unterstützt, jedoch gibt es Komplikationen<br />
im Zusammenhang mit den Stromsparfunktionen. Wenn Windows in<br />
Sleep-Mode geht und die Netzwerkinterfaces herunterfahren, bricht der AFS-<br />
Client die Verbindung zu File<strong>server</strong>n ab, womit die AFS-Filehandles von offenen<br />
Dateien ungültig werden. Solange der Stromsparmodus nicht benutzt wird,<br />
gibt’s keine Probleme.<br />
(Stand: 09.01.2007)<br />
10.2 andere Linux-Distributionen<br />
10.3 Fedora Core<br />
Das Übersetzen von OpenAFS-Kernelmodulen <strong>für</strong> den laufenden Kernel geht<br />
so (nicht selbst getestet):<br />
1. Man besorge sich das neues Source-RPM-File - z.B. hier:<br />
http://www.openafs.org/release/latest.html<br />
Die OpenAFS-Client-Pakete findet man auch auf dieser Seite.
10.4 andere Unix-Derivate (z.B. MacOSX) 215<br />
2. Das Source-RPM wird übersetzt:<br />
user@host>rpmbuild - -rebuild - -target=i686 openafs-version.src.rpm<br />
10.4 andere Unix-Derivate (z.B. MacOSX)<br />
10.4.1 MacOS X<br />
Es stehen vorkompilierte Pakete <strong>für</strong> MaxOSX 10.1 (leider vollkommen ungetestet)<br />
bis MaxOSX 10.4 zur Verfügung. Alle Pakete können auf der InstantAFS-<br />
Homepage heruntergeladen werden. Getestet wurde die Installation nur unter<br />
MacOSX 10.3 und MacOSX 10.4. Für MacOSX 10.4 existiert ein Universal<br />
Binary - es läuft also auch auf Intel-Prozessoren.<br />
Im Rahmen von InstantAFS steht ein modifiziertes OpenSSH-Paket <strong>für</strong> Linux<br />
zur Verfügung, das es u.a. ermöglicht, sich passwortlos von einem MacOSX-<br />
System auf ein Linux-System und umgekehrt einzuloggen gssapi-mitm, wobei<br />
jeweils auch ein Token auf dem Zielsystem erzeugt wird.<br />
Hinweis: InstantAFS-Tools stehen unter MacOSX nicht zur Verfügung (Stand:<br />
01.12.2005) - die Zeit war einfach zu knapp. Prinzipiell sollte es jedoch funktionieren<br />
- Perl ist schliesslich sehr portabel.<br />
10.4.1.0.1 Installationsanleitung Die Installation ist ein wenig zerstückelt<br />
- man muss mehrere Pakete instalieren und einige Konfigurationsdateien anpassen,<br />
die man alle unter dieser URL findet:<br />
ftp://instantafs.cbs.mpg.de/instantafs/collection/<br />
clients/macosx<br />
Die zu installierenden Pakete sind dabei nach MacOSX-Version sortiert.<br />
Folgende Files muss man erstmal auf den MacOSX-Rechner kopieren:<br />
openafs-macosx(Version)-... : Das OpenAFS-Paket <strong>für</strong> MacOSX. Es sind verschiedene Versionen verfügbar:<br />
orig : Ein OpenAFS-Paket von http://www.openafs.org - also<br />
hochoffiziell.<br />
improved : Ein selbstgepacktes Paket, bei dem einige Modifikationen vorgenommen<br />
wurden. Mehr informationen zu diesen Modifikationen<br />
und zum Mac-Openafs-Selberpacken gibt’s unter:<br />
http://fbo.no-ip.org/cgi-bin/twiki/view/Instantafs/<br />
MacAfsBuild<br />
kerberos_extras-macosx.dmg : Das Ticket-Management-Tool, das auf dem MacOSX-eigenen Kerberos<br />
aufsetzt.<br />
Hinweis: Unter MacOS 10.4 Tiger erzeugt dieses Programm lediglich<br />
einen Link auf den vorhandenen aber gut versteckten systemeigene<br />
Ticket-Manager.<br />
aklog-kerberos-plugin-1.0.dmg : Ein Plugin <strong>für</strong> Kerberos, dass nach einer erfolgreichen Kerberos-<br />
Authentifikation automatisch ein AFS-Token generiert.<br />
Hinweis: Das Plugin befindet sich dann unter /Library/Kerberos Plug-<br />
Ins/aklog.loginLogout. Es ist in die Kerberos-Library integriert und nicht<br />
in ein spezielles Kerberos-Tool (z.B. kinit).<br />
aklog : Das aklog-Tool. Es ist <strong>für</strong> Einzellenbetrieb nicht unbedingt erforderlich,<br />
jedoch schadet es nicht.
216 10 Andere Betriebssysteme und Plattformen<br />
Jetzt muss man folgendes machen:<br />
1. Zuerst muss das OpenAFS-, danach das Kerberos-Paket installiert werden.<br />
2. Als root muss man einiges auf der Kommandozeile tun (Als Editor bietet<br />
sich vi an - der ist bei MacOSX dabei):<br />
• /var/db/openafs/etc/ThisCell muss den Namen der AFS-Zelle enthalten<br />
- z.B. rivers.de.<br />
• Die CellServDB sollte am besten gelöscht werden - die vielen<br />
Zellennamen verwirren sonst die Mac-User:<br />
root@host>echo -n > /var/db/openafs/etc/CellServDB<br />
[ l i b d e f a u l t s ]<br />
d e f a u l t _ r e a l m = RIVERS . DE<br />
n o a d d r e s s e s = TRUE<br />
l o g i n _ l o g o u t _ n o t i f i c a t i o n = " a k l o g "<br />
t i c k e t _ l i f e t i m e = 93600<br />
f o r w a r d a b l e = t r u e<br />
p r o x i a b l e = t r u e<br />
• In /var/db/openafs/etc/cacheinfo muss man als letztes Feld die gewünschte<br />
Cachegröße in kB angeben (siehe 3.5.2.3, Seite 40).<br />
• In /var/db/openafs/etc/config/afsd.options gibt man dem Cachemanager<br />
diverse Optionen mit. Folgende Konfiguration (siehe<br />
3.5.2, Seite 39) ist sinnvoll:<br />
-stat 2000 -dcache 800 -daemons 3 -volumes<br />
1200 -fakestat-all -afsdb.<br />
• Das File /Library/Preferences/edu.mit.Kerberos ist das Äquivalent<br />
von /etc/krb5.conf unter Linux. Es muss wie folgt aussehen (wobei<br />
der Beispiel-Realm-Name RIVERS.DE durch den gewünschten<br />
Namen ersetzt werden muss):<br />
Listing 10.1: /Library/Preferences/edu.mit.Kerberos<br />
3. Die Kerberos-Extras umfassen ein Programm, mit dem man komfortabel<br />
Tickets (und durch das aklog-Plugin auch Tokens holen kann).<br />
Hinweise:<br />
• Es ist vorteilhaft, sich dieses Tool (Siehe Programme/Dienstprogramme/Kerberos<br />
) ins Dock zu ziehen.<br />
• Das Dock-Icon zeigt die noch verfügbare Zeit des Tickets und<br />
des Tokens an ( Stunden:Minuten ) und warnt vor Ablauf des<br />
Tickets/Tokens.<br />
• Es ist nicht möglich, in einer InstantAFS-Zelle das Kerberos-<br />
Passwort in diesem Tool zu setzen (siehe 2.3, Seite 18).<br />
• Dieses Programm kann maximal 10h-gültige Tickets besorgen, obwohl<br />
in InstantAFS 26h der default sind. Benutzt man kinit -l 26h,<br />
ist diese Einschränkung nicht gegeben.<br />
Um MacOSX’ Versuche, Metadaten in Netzwerkverzeichnisse zu schreiben,<br />
abzuschalten (was zu empfehlen ist), muss folgendes gemacht werden:
10.5 andere Betriebssysteme 217<br />
10.4.2 Irix<br />
user@host>defaults write com.apple.desktopservices\<br />
DSDontWriteNetworkStores true<br />
user@host>cp ∼/Library/Preferences/com.apple.desktopservice.plist\<br />
/Library/Preferences<br />
Der Rechner muss jetzt einmal neu gestartet werden, um den AFS-Clilent hochzufahren.<br />
Das AFS ist anschliessend als Icon auf dem Desktop verfügbar. Nach<br />
dem Einloggen ins MacOS muss man sich jetzt noch am AFS authentifizieren.<br />
Dazu benutzt man das Kerberos-Tool, dass sich jetzt im Dock befindet.<br />
AFS soll unter Irix laufen - persönlich konnte das der Autor jedoch mangels<br />
Hardware nicht testen. Unter folgender URL gibt’s eine <strong>Anleitung</strong>:<br />
http://grand.central.org/twiki/bin/view/AFSLore/InstallingAdditionalClientMachines<br />
10.4.3 FreeBSD, NetBSD<br />
10.4.4 OpenBSD<br />
10.5 andere Betriebssysteme<br />
10.5.1 OS/2<br />
Das automatische Token-Holen bei Anmeldung (authlib) scheint nicht zu funktionieren.<br />
Für FreeBSD gibt’s zwar keinen OpenAFS-Client, jedoch soll der Arla-Client<br />
(siehe http://www.stacken.kth.se/project/arla/) darunter laufen,<br />
jedoch gilt das Nur <strong>für</strong> FreeBSD unter Version 9.<br />
Für OpenBSD kann man ebenfalls den Arla-Client benutzen (wie bei FreeBSD),<br />
jedoch ist er nicht gut getestet und sollte deshalb nicht produktiv eingesetzt<br />
werden.<br />
Für OS/2 existiert eine ältere OpenAFS-Client-Version. Diese beherrscht Kerberos5<br />
nicht und kann deshalb in einer Kerberos5-Umgebung (zwingend bei<br />
InstantAFS) lediglich anonymen Zugriff auf des AFS bieten.<br />
10.5.1.0.2 Installationsanleitung Die Installation ist wenig komfortabel:<br />
Das bereitgestellte ZIP-Archiv ist zu entpacken. Anschliessend führt eine<br />
README-Datei durch die manuelle Installation.
Glossar<br />
acall acall Ein einfaches Prinzip (siehe 7.6.2, Seite 149), um<br />
Shellkommandos auf AFS-Servern authentifiziert und authorisiert<br />
auszuführen. Es wird von diversen InstantAFS-<br />
Tools benutzt.<br />
ACL Access Control List Unter AFS: Ein Metadatum zu einem<br />
Verzeichnis, das die Rechte verschiedener Benutzer<br />
oder Benutzergruppen <strong>für</strong> Zugriffe auf dieses Verzeichnis<br />
definiert. Dabei können jedem auf der Liste eingetragenem<br />
Benutzer und jeder eingetragenen Benutzergruppe unterschiedliche<br />
Rechte an dem Objekt zugewiesen werden. Unter<br />
AFS besitzt jedes Verzeichnis genau 2 ACLs - eine normale<br />
(die Rechte gewährt) und eine negative (die Rechte<br />
aberkennt).<br />
BaseDN Base-Distinguished-Name Ein gemeinsamer Prefix bestimmter<br />
LDAP-Einträge. Die BaseDN lässt sich unter InstantAFS<br />
eindeutig aus dem Zellennamen ermitteln und<br />
fasst LDAP-Objekte (z.B. Benutzer), die zur Zelle gehören<br />
zusammen.<br />
Bash Completion<br />
Bash Completion Bash Completion ist ein flexibles Konzept,<br />
um Benutzern Parameter <strong>für</strong> Kommandozeilentools<br />
vorzuschlagen. z.B. könnte der Vorschlag <strong>für</strong> das cat-<br />
Kommando eine Liste von Dateien im aktuellen Verzeichnis<br />
sein, das ping-Kommando kann dagegen eher mit einer<br />
Liste bekannter Rechnernamen etwas anfangen.<br />
BDB Backup DataBase Der Teil der AFS-Datenbank einer Zelle,<br />
der Daten über die Sicherung von Volumes enthält, die <strong>für</strong><br />
das AFS-Backup-System relevant sind.<br />
butc BackUp Tape Coordinator Prozess der die in der Backup-<br />
DB gespeicherten Vorgaben umsetzt und das Backup-<br />
Device ansteuert.<br />
cc Credentials Cache Eine Datei, die von Kerberos-Clients<br />
benutzt wird, um Tickets zu speichern. Die Datei wird<br />
üblicherweise unter /tmp angelegt und läßt sich nur durch<br />
den jeweiligen Benutzer lesen.<br />
FQDN Full Qualified Domain Name Der vollständige Name eines<br />
Computers (also Rechnername plus Domainname).<br />
218
GLOSSAR 219<br />
Globber Globber-Ausdrücke Eine Form regulärer Ausdrücke, die<br />
jedoch stark eingeschränkt ist. Metazeichen sind “*” und<br />
“?”. Globber-Ausdrücke werden z.B. in praktisch jeder<br />
Unix-Shell benutzt. “*.txt” in dem Kommando rm -rf<br />
*.txt ist z.B. ein solcher Ausdruck.<br />
IP-ACLs IP-based-ACLs Es ist unter AFS möglich, ACLs nicht nur<br />
an Gruppen oder Benutzern festzumachen, man kann auch<br />
IP-Adressen (also Rechner) mit bestimmten Rechten versehen.<br />
Das hat allerdings starke unerwünschte Nebeneffekte.<br />
Mehr dazu gibt’s unter http://www.duke.edu/jhv/<br />
answers/afs-ip-acls.html.<br />
KDC Key Distribution Center Ein Prozess, der auf dem<br />
Kerberos-Server läuft. Dieser Prozess ist <strong>für</strong> die Erstellung<br />
und Verteilung von Tickets zuständig. I.d.R. laufen<br />
auf dem Kerberos-Server noch weitere Prozesse (z.B. der<br />
krb524d).<br />
keytab Kerberos-Keytab Eine Keytab ist eine Datei, in der<br />
Kerberos-Schlüssel gespeichert werden.<br />
KVNO Key Version Number Ein Attribut eines Schlüssels eines<br />
Kerberos-Principals. Dieser Wert wird mit jedem neu<br />
erzeugtem Schlüssel (z.B. bei Ausführung des ktadd-<br />
Kommandos innerhalb der kadmin-Shell) hochgezählt. Die<br />
KVNO stellt das friedliche Nebeneinander mehrerer unterschiedlicher<br />
Schlüssel des selben Prinzipals sicher.<br />
NAT Network Address Translation NAT bedeutet, dass n Adressen<br />
eines i.d.R. privaten Subnetzes auf der einen Seite des<br />
Routers auf eine oder mehrere i.d.R. öffentliche Addressen<br />
abgebildet werden. Dieses Prinzip wird vorrangig eingesetzt,<br />
um den knappen IP-Adressraum besser auszunutzen<br />
und mehreren Computer einen Internetzugang zur Verfügung<br />
zu stellen, ohne dass diese auf Proxies zurückgreifen<br />
müssen.<br />
NSS Name Service Switch Ein Plugin-Modell <strong>für</strong> Namensauflösung.<br />
Die libc benutzt dieses Modell, um Namensauflösung<br />
(Benutzer ↔ UID, Rechnername ↔ IP, Benutzergruppen<br />
↔ GID, ...) mit unterschiedlichen Diensten (lokale Dateien,<br />
NIS, LDAP, ...) zu ermöglichen.<br />
PAG Process Authentication Grouop Ein Gruppe von Prozessen,<br />
die identische Authentifikationsinformationen teilen (siehe<br />
3.7.2.3, Seite 49).<br />
PCRE Perl Compatible Regular Expression PCRE bezeichnet eine<br />
Klasse regulärer Ausdrücke. PCREs kommen z.B. in Perl<br />
zum Einsatz. Sie sind deutlich mächtiger als Standard-grepregexps.
220 GLOSSAR<br />
Principal Kerberos-Principal Ein Kerberos-Principal ist ein Eintrag<br />
in der Kerberos-Datenbank. Er repräsentiert entweder einen<br />
Benutzer oder einen Dienst. Zu jedem Principal sind einer<br />
oder mehrere Schlüssel gespeichert, die zur Shared-Secret-<br />
Authentifikation und zur Verschlüsselung von Tickets benutzt<br />
werden. Siehe auch 3.10.2, Seite 62.<br />
PTDB Protection DataBase Der Teil der AFS-Datenbank einer<br />
Zelle, der Informationen über die AFS-Benutzer der Zelle<br />
und deren Gruppenzugehörigkeiten speichert.<br />
Realm Kerberos-Realm (“Königreich”) Eine Kerberos-Realm ist<br />
der Gültigkeitsbereich eines bestimmten oder mehrerer verbundener<br />
Kerberos-Server.<br />
SetUID SetUID-Bit Dieses Bit ist ein Metadatum, das allen Unix-<br />
Dateisystemobjekten zugeordnet werden kann. Einer Datei<br />
zugeordnet bewirkt dieses Bit i.d.R., dass die Datei, wenn<br />
sie mit exec() gestartet wird, mit der effektiven UID<br />
des Besitzers der Datei ausgeführt wird. Dadurch lassen<br />
sich z.B. privilegierte Kommandos wie mount (i.d.R. eingeschränkt)<br />
durch normale User benutzen.<br />
SMB Server Message Block Ein Netzwerkdateisystemprotokoll<br />
<strong>für</strong> lokale Netze. Dieses Protokoll wird vor allem unter Betriebssystemen<br />
und Plattformen der Firma Microsoft eingesetzt.<br />
Sync-Site AFS-Sync-Site Der AFS-DB-Server, der in einer bestimmten<br />
Zelle zu einem bestimmten Zeitpunkt zum Update der<br />
VLDB berechtigt ist. Es kann davon in einer bestimmten<br />
Zelle nur jeweils einen geben. Die Sync-Site wird regelmäßig<br />
“gewählt”, was nur möglich ist, wenn mehr als die<br />
Hälfte aller Datenbank<strong>server</strong> einer Zelle miteinander kommunizieren<br />
können.<br />
TGT Ticket Granting Ticket Ein Kerberos-Ticket, das vor allen<br />
anderen Tickes von einem Kerberos-Server angefordert<br />
werden muß (siehe 3.10.1, Seite 61). Im Gegensatz zu<br />
Service-Tickes, erhält man dieses Ticket nur gegen ein gültiges<br />
Passwort oder eine passende Keytab.<br />
VLDB Volume DataBase Der Teil der AFS-Datenbank einer Zelle,<br />
der Informationen über die auf den File<strong>server</strong>n einer Zelle<br />
gespeicherten Volumes enthält.<br />
Volume-Set Volume-Set Ein Volume-Set ist eine Gruppe von Volumes,<br />
die in der BDB definiert wird. Die meisten AFS-Backup-<br />
Operationen lassen sich nur auf Volume-Sets anwenden,<br />
nicht auf einzelne Volumes (siehe 5.2.3.2, Seite 104).
Literaturverzeichnis<br />
[ADMREF] IBM Corporation - AFS 3.6 Administration Reference, 1. Edition<br />
http://www.openafs.org/pages/doc/AdminReference/<br />
auarf002.htm<br />
[ADMGUIDE] IBM Corporation - AFS 3.6 Administration Guide, 1. Edition<br />
http://www.openafs.org/pages/doc/AdminGuide/<br />
auagd002.htm<br />
[LMWeak] Philippe Oechslin - Making a Faster Cryptoanalytic Time-Memory<br />
Trade-Off<br />
PDF-File: http://lasecwww.epfl.ch/pub/lasec/doc/<br />
Oech03.pdf<br />
Homepage: http://lasecpc13.epfl.ch/ntcrack/<br />
[UDEBUG] AFS Debugging Tools: udebug<br />
http://www-1.ibm.com/support/docview.wss?rs=0&q=<br />
%2BAFS+Debugging&uid=swg21113428&loc=en_US&cs=<br />
utf-8&cc=US&lang=en<br />
[Knoppix] Klaus Knopper - die Knoppix http://www.knoppix.de<br />
[Demolinux] Demolinux http://www.demolinux.org/<br />
[OpenAFS] OpenAFS.org http://www.openafs.org<br />
221
Anhang A Anhang<br />
A.1 SSH-Login-Varianten<br />
Authentifikation per Passwort<br />
Soll per SSH eine Verbindung zu einem Account auf einem anderen Rechner<br />
hergestellt werden, können verschiedene Authentifikationsmethoden zum Einsatz<br />
kommen, die unterschiedliche Vor- und Nachteile haben. Auf host-basierte<br />
(hostbased) Authentifikation wird dabei bewusst verzichtet - schliesslich kann<br />
man einfachen Client-Computern in Zeiten von Demolinux und Knoppix nicht<br />
trauen...<br />
Die Authentifikation per Passwort ist am einfachsten aufzusetzen - sie funktioniert<br />
sofort. Außerdem steht mit dem eingegeben Passwort auf dem entfernten<br />
Rechner eine Möglichkeit zur Verfügung, ein Token zu erzeugen. SSH stellt<br />
zwei Möglichkeiten zur Auswahl, um sich per Passwort zu authentifizieren:<br />
password (ein ssh-Eigener Passwort-Check) und keyboard-interactive<br />
(Passwort-Überprüfung per PAM). keyboard-interactive ist dabei in der Lage,<br />
auch komplexe PAM-Passwortabfragen abzubilden.<br />
Problem: Aus nicht geklärten Gründen ist es nicht möglich, daß sich Benutzer,<br />
die keinen Kerberos-Principal besitzen per password authentifizieren<br />
- das schliesst üblicherweise auch root ein. Anderseits ist es nicht möglich,<br />
als Kerberos-Benutzer mittels keyboard-interactive ein neues Token zu erhalten.<br />
Lösungen:<br />
user@host>tokenmgr -S ernie<br />
1. Hat man keine wichtigen Nicht-Kerberos-Benutzer, kann man <strong>für</strong> die Fälle,<br />
in denen sich z.B. root per Passwort anmeldet, dass Skript rssh benutzen<br />
(Paket instantafs .deb ), das exakt wie ssh funktioniert.<br />
Nachteil: Man muß sich ein ungewöhnliches zweites Kommando merken.<br />
2. Man kann Benutzer, die sich per SSH mit Passwort 1 anmelden, dazu verdonnern,<br />
das Passwort ein zweites Mal einzugeben. Das können die Benutzer<br />
entweder manuell machen:<br />
oder sie schreiben folgende zusätzliche Zeile in ∼/.profile:<br />
tokenmgr -TP<br />
Nachteil: z.B. sftp funktioniert nur anonym 2 . Das Passwort muß <strong>für</strong><br />
interaktive Logins mehrmals eingegeben werden.<br />
Die erste Lösung ist deutlich komfortabler <strong>für</strong> einfache Benutzer und sollte benutzt<br />
werden.<br />
1 Es gibt noch andere Methoden<br />
2 Es steht ja kein Token zur Verfügung und ∼/.profile wird vom sftp-Server nicht abgearbeitet.<br />
222
SSH-Login-Varianten 223<br />
Authentifikation per Public-Key<br />
Authentifikation per GSSAPI<br />
TGT-Weiterleitung<br />
Bei der Public-Key-Authentifikation wird keine geheime benutzergebundene<br />
Information (Schlüssel/Passwort) über das Netzwerk übertragen. Die Identität<br />
des Clients wird dadurch überprüft, dass dieser eine Rechenoperation auf eine<br />
vom Server geschickte Zufallszahl korrekt ausführen muß. Das wiederum ist<br />
nur mit dem privaten Schlüssel des Clients möglich.<br />
Nachteil: Der Public-Key muß irgendwie auf den Server gelangen, bevor diese<br />
Methode das erste Mal genutzt werden kann. Unter 7.3.1 auf Seite 142 ist<br />
beschrieben, wie das gemacht wird.<br />
Die Authentifikationsmethode gssapi-with-mic kann benutzt werden, um sich<br />
mittels eines Kerberos-Tickets zu authentifizieren. Jeder SSH-Server, der das<br />
unterstützten soll, muß mit einem eigenen Kerberos-Principal ausgestattet<br />
werden ( host/Rechner.Domain@Realm ), dessen Schlüssel auf möglichst<br />
sichere Weise in Form einer Keytab auf dem SSH-Server unter /etc/krb5.keytab<br />
deponiert werden muß.<br />
Unter 7.3.2 ist beschrieben, wie das aufgesetzt wird.<br />
Tip: Es ist möglich, <strong>für</strong> einzelne Nutzer festzulegen, daß sich bestimmte<br />
Kerberos-Nutzer unter deren Namen einloggen dürfen. Das macht jedoch beim<br />
Einsatz von AFS nur <strong>für</strong> root Sinn. Beispiel:<br />
1. ernie muß gelegentlich auf afsserv1 arbeiten.<br />
2. Der Administrator legt die Datei /root/.k5login an und schreibt ernie<br />
hinein:<br />
root@host>echo ernie > /root/.k5login<br />
ernie@host> ssh root@afsserv1<br />
3. ernie kann sich jetzt mit afsserv1 verbinden:<br />
A.1.0.0.3 GSSAPI in alten OpenSSH-Versionen Vor der Version 3.8 von<br />
OpenSSH stand gssapi-with-mic noch nicht zur Verfügung. Statt dessen konnte<br />
man gssapi als Authentifikationsmethode benutzen, die jedoch gegen MITM-<br />
Angriffe anfällig ist.<br />
Unter Linux gibt es keinen Grund mehr, gssapi zu benutzen, unter MacOSX<br />
(Stand: MacOSX 10.3, 22.04.2005) sieht die Sache jedoch anders aus. Apple<br />
legt dem Panther (sowie dem Jaguar) OpenSSH-3.6 bei.<br />
Die im Rahmen von InstantAFS erstellten SSH-Pakete enthalten einen Patch,<br />
der es ermöglicht, unter Linux sowohl mit dem Client wie auch mit dem Server<br />
gssapi zu verwenden, wodurch passwortfreies einloggen zwischen MacOS und<br />
Linux möglich wird.<br />
SSH kann ein auf dem Client vorhandenes Kerberos-TGT an den SSH-Server<br />
weiterleiten. In Kombination mit der GSSAPI-Authentifikation bedeutet das <strong>für</strong><br />
normale Benutzer, daß sie sich nur noch einmal im Netzwerk anmelden müssen<br />
und sich dann per SSH mit jedem Computer sicher und ohne Passworteingabe<br />
verbinden können.
224 Die PTDB als NSS-Dienst nutzen<br />
Die TGT-Weiterleitung kann auch benutzt werden, wenn Public-Key-Authentifikation<br />
zum Einsatz kommt.<br />
Hinweise:<br />
• Ein TGT ist noch kein Token, läßt sich jedoch leicht in eines umwandeln.<br />
Die ssh .deb -Version, die in InstantAFS enthalten ist, wurde leicht modifiziert,<br />
so dass sie gleich ein Token aus dem Kerberos-Ticket erzeugt.<br />
• Damit ein Rechner ein weitergeleitetes Ticket benutzen kann, muss er<br />
einen Kerberos-host-Key haben. Das geht z.B. so:<br />
root@kerberos-master> instantafs.kerberos -G Rechnername<br />
A.2 Die PTDB als NSS-Dienst nutzen<br />
Die Idee<br />
Die Lösung<br />
Es wäre elegant, die PTDB zu nutzen, um Namensauflösung zu betreiben. Damit<br />
kann man auf einfache Art und Weise eine Namensdatenbank (LDAP, NIS,<br />
...) einsparen.<br />
In der PTDB sind nicht alle nötigen Informationen über interaktive Nutzer enthalten.<br />
Vorhanden sind lediglich:<br />
• AFSID<br />
• Loginname<br />
Die restlichen Informationen kann man jedoch theoretisch errechnen bzw. auf<br />
sinnvolle Default-Werte setzen (siehe Tabelle A.1).<br />
Feld Erklärung<br />
UID Die UID ist üblicherweise identisch mit der AFSID.<br />
GID Die Standardgruppe eines Nutzers hat in einer AFS-Zelle keine<br />
Bedeutung. Sie kann deshalb auch <strong>für</strong> alle Nutzer gleich sein.<br />
Passwort-Hash AFS-Authentifikation wird über Kerberos erledigt - der Hash<br />
sollte also <strong>für</strong> jeden Nutzer ein Wert sein, der möglichst zu keinem<br />
Passwort passt (z.B. “x”).<br />
Homedirectory Hat man die AFS-Zelle geschickt geplant, kann man das Homedirectory<br />
einfach aus dem Nutzernamen errechnen.<br />
Beispiel: /afs//user/<br />
Standard-Shell Da heute grafische Logins oft überwiegen, ist eine default-Shell<br />
<strong>für</strong> alle Nutzer i.d.R. ausreichend. Der Standard-Wert /bin/bash<br />
ist sinnvoll.<br />
Tabelle A.1: Mögliche default-Werte <strong>für</strong> Felder von Benutzerkonten<br />
Mit dem Paket libnss-ptdb .deb läßt sich das realisieren. Es besteht aus 2 Komponenten:<br />
1. einem dauerhaft laufender Serverprozess (ptdbnssd), der die Anfragen<br />
an die PTDB durchführt und seine Dienste per lokalem UDP anbietet und<br />
2. einem nss-Modul, das dynamisch mit der libc geladen wird und sich in<br />
die Funktionen getpwnam und getpwuid einschaltet.
Simple Regular Expressions 225<br />
Implementierung<br />
Benutzen kann man das Modul, indem man das Paket installiert...<br />
root@host>apt-get install libnss-ptdb<br />
A.2.1 Prinzipielle Grenzen<br />
... und in /etc/nsswitch.conf den Dienst ptdb <strong>für</strong> passwd-Auflösung z.B. wie<br />
folgt konfiguriert:<br />
passwd: files ptdb<br />
Das automatische Setup-Tool von InstantAFS setzt per default libnss-ptdb .deb<br />
als Namensdienst auf.<br />
Diese Trennung in 2 Komponenten hat folgende Vorteile:<br />
• Die AFS-Libraries werden statisch gelinkt. Wäre der Code <strong>für</strong> die Kommunikation<br />
mit der PTDB im nss-Modul, wäre er praktisch in jedem aufgerufenen<br />
Programm enthalten und würde den Speicherbedarf stark vergrößern.<br />
• Das vom AFS benutzte Threading-Modell LWP kollidiert mit dem im<br />
Debian sehr häufig benutzten Modell pthreads.<br />
Ein NSS-Modul kann nur dann korrekte Namen zu UIDs liefern, wenn es sich<br />
bei diesen UIDs um AFSIDs der lokalen Zelle handelt. Beispiel:<br />
user@host>ls -la /afs/cbs.mpg.de<br />
wird in der Zelle cbs.mpg.de sinnvolle Namen der Besitzer von Verzeichnissen<br />
und Dateien anzeigen, jedoch nicht<br />
user@host>ls -la /afs/ipp.mpg.de<br />
A.3 Simple Regular Expressions<br />
Namen der Besitzer von Dateien werden wie folgt aufgelöst:<br />
1. Mit stat() wird die UID des Besitzers einer Datei ermittelt.<br />
2. Die Funktion getpwuid() wird benutzt, um den Namen zur ermittelten<br />
UID herrauszufinden.<br />
3. getpwuid() leitet die Anfrage an das NSS-PTDB-Modul weiter.<br />
Problematisch ist nun, dass das NSS-PTDB-Modul keine Informationen darüber<br />
erhält, ob die zu ermittelnde UID zur lokalen Zelle gehört oder nicht.<br />
Da dieses Modul aber stets einen PT-Server der lokalen Zelle kontaktiert, werden<br />
mit extrem hoher Wahrscheinlichkeit die AFSIDs von Volumes anderer Zellen<br />
zu falschen Benutzernamen aufgelöst.<br />
Einige AFS-Kommandos können mit einfachen regulären Ausdrücken umgehen,<br />
um Volumegruppen durch Ausdrücke zu bilden. Das ist besser als Globber-<br />
Expressions oder Prefix-Matching zu benutzen, jedoch immer noch eine starke<br />
Einschränkung gegenüber mächtigen Klassen regulärer Ausdrücke wie z.B.<br />
Perl Compatible Regular Expressions (PCRE). In Tabelle A.2 sollen kurz die<br />
Möglichkeiten der Simple Regular Expressions beschrieben werden:
226 Namenskonventionen <strong>für</strong> Volumes<br />
A.4 Namenskonventionen <strong>für</strong> Volumes<br />
Element Erklärung<br />
Buchstaben, Zahlen Literale sind selbstverständlich erlaubt<br />
. Der Punkt matcht auf jedes Zeichen<br />
* Der Stern kann wie bei allen anderen regulären<br />
Ausdrücken verwendet werden - matcht also das<br />
vorhergehende Zeichen (oder die Zeichenklasse)<br />
beliebig oft (auch 0 mal).<br />
[...] Zeichenklassen dürfen definiert werden.<br />
[ˆ...] Zeichenklassen, bei denen die Nicht-matchenden<br />
Zeichen angegeben werden.<br />
Tabelle A.2: Elemente von Simple Regular Expressions<br />
Bestimmte AFS-Kommandos (siehe Tabelle A.3) sind in der Lage, Operationen<br />
auf Gruppen von Volumes auszuführen, wobei diese Kommandos unterschiedlich<br />
mächtige reguläre Ausdrücke bzw. Wildcards nur an bestimmten Positionen<br />
erlauben, um Volume-Gruppen zu definieren. Sind in einer Zelle sehr viele<br />
Volumes zu verwalten, lohnt es sich, bestimmte Namenskonventionen genau<br />
einzuhalten. Das Ziel dabei ist, gleichartige Volumes leicht ausdrücken zu können,<br />
was am besten mit gleichen Präfix <strong>für</strong> gleichartige Volumes zu erreichen<br />
ist. Manche administrative Befehle, die auf Gruppen von Volumes operieren,<br />
erlauben nur eingeschränkte Wildcard-Benutzung <strong>für</strong> Volume-Namen.<br />
vos backupsys ist ein Beispiel <strong>für</strong> ein Kommando, das nur über die simpelste<br />
Art (Prefix-Matching) Volume-Gruppen zu erfassen verfügt. Es wird deshalb<br />
hier als Beispiel <strong>für</strong> das Ausdrücken von Volume-Gruppen benutzt.<br />
Verdeutlichung am Beispiel: Die Benutzer ernie und bert brauchen Homedirectories.<br />
• Man könnte die entsprechenden Homedirectory-Volumes ernie und bert<br />
nennen. Das regelmäßige Synchronisieren der entsprechenden Backup-<br />
Instanzen (siehe 7.2, Seite 141) erfolgt mit einem cron-Job der Form<br />
admin@afs>for i in ernie bert; do vos backup $i; done<br />
• Kommen jedoch weitere Nutzer hinzu ist es schnell mühsam, jeden<br />
Nutzer angeben zu müssen, so dass man die Homedirectories besser<br />
user.ernie und user.bert nennt. So kann man die Schleife durch ein<br />
einzelnes Kommando ersetzen:<br />
admin@afs>vos backupsys -prefix user.<br />
Damit sind auch alle zukünftigen Nutzer versorgt.<br />
• Sollen jetzt z.B. <strong>für</strong> die Mail jedes Nutzers ein zusätzliches Volume angelegt<br />
werden, könnte man es user.ernie.mail bzw. user.bert.mail nennen.<br />
Das Kommando<br />
admin@afs>vos backupsys -prefix user.<br />
würde diese Volumes ebenfalls erfassen.<br />
Will man das nicht 3 , bieten sich z.B. die Volumenamen mail.bert und<br />
mail.ernie an. Damit könnten jetzt Mail- und Homedirectory-Volumes<br />
3 z.B. weil Mail häufiger gesichert werden soll, als der Rest des Homedirectories
Namenskonventionen <strong>für</strong> Volumes 227<br />
admin@afs>vos backupsys -prefix home.<br />
admin@afs>vos backupsys -prefix mail.<br />
separat erfasst und z.B. unterschiedlich oft synchronisiert werden:<br />
Tabelle A.4 zeigt, wie eine Namenskonvention aussehen könnte.<br />
Hinweis: Die Maximallänge <strong>für</strong> Volumenamen (also <strong>für</strong> die Namen der RW-<br />
Instanzen) ist auf 22 begrenzt.
228 Namenskonventionen <strong>für</strong> Volumes<br />
Tabelle A.3: AFS-Kommandos, die mit Volume-Gruppen arbeiten. Simple Regular Expressions sind eine stark eingeschränkte Klasse regulärer Ausdrücke (siehe A.3,<br />
Seite 225), PCREs sind die mächtigsten Ausdrücke und schränken bei der Wahl von Volume-Namen praktisch nicht ein.<br />
Kommando Gruppierung durch ... Beschreibung<br />
vos backupsys Prefix-Matching Dieses Kommando erstellt Backup-Instanzen von Volume-Gruppen. Prefix-Matching ist nicht sehr mächtig<br />
- alle Volumes, die bearbeitet werden sollen, müssen mit einer bestimmten oder einer von mehreren anzugebenden<br />
Zeichenketten beginnen. Außerdem ist es möglich, beliebig viele Zeichenketten anzugeben, mit<br />
denen Volumes explizit nicht beginnen dürfen, um bearbeitet zu werden.<br />
backup addvolentry Simple Regular Expressions Dieser Befehl fügt einem Volume-Set eine Menge an Volumes hinzu. Volume-Sets werden z.B. von<br />
backup dump benutzt, um Volumes mit gleichen Sicherheitsansprüchen zusammenzufassen und gemeinsam<br />
zu sichern. Volumes werden als reguläre Ausdrücke definiert, negatives Matching ist nicht möglich.<br />
balancer Globber-Expressions In der balancer-Konfigurationsdatei werden Volumes definiert, die zwischen File<strong>server</strong>n bewegt werden<br />
dürfen.<br />
instantafs.backup Simple Regular Expressions instantafs.backup (siehe 9.2.10, Seite 197) automatisiert verschiedene Backup-Prozesse. Darunter die<br />
Aufrufe von vos backup, vos release und backup dump. Der Aufruf von backup dump macht den<br />
Einsatz von Simple Regular Expressions nötig.<br />
instantafs.calcrestore PCREs Dieses Skript kann zur Wiederherstellung von Servern genutzt werden. Es läßt die Beschränkung auf Volumes<br />
zu, die einem zu definierenden PCRE genügen (siehe 9.2.12, Seite 197).<br />
instantafs.volgrep PCREs Mit instantafs.volgrep (siehe 9.2.26, Seite 204) lassen sich die Namen von Volumes ausgeben, die einem<br />
zu definierenden PCRE bzw. zu definierenden Globber-Expressions genügen.
NAT-geroutete AFS-Clients 229<br />
Muster IA Beschreibung<br />
√<br />
user.<br />
Homedirectories der regulären Benutzer<br />
user-na.<br />
√<br />
Homedirectories gelöschter oder inaktiver Benutzer<br />
(man kann sie ja vorsichtshalber noch 1/2<br />
Jahr aufheben ...)<br />
www.* - Websites<br />
local.* - (ähnlich /usr/local) Volumes, die Software und<br />
zellenspezifische Skripte enthalten<br />
p.. - Volumes von Projekten, die jeweils einer speziellen<br />
Arbeitsgruppe zugeordnet sind<br />
a.* - Alles, was mit der Administration der Zelle zu<br />
tun hat<br />
Tabelle A.4: Beispiel <strong>für</strong> eine Namenskonvention einer AFS-Zelle. Die Spalte IA zeigt an, ob diese Konvention<br />
in InstantAFS zwingend ist.<br />
A.5 NAT-geroutete AFS-Clients<br />
Hinweis: Es gibt im reinen AFS keine 4 wirkliche Vorgaben <strong>für</strong> die Namen von<br />
Volumes außer, dass sie nicht länger als 22 Zeichen sein dürfen. Sonderzeichen<br />
sind i.d.R. erlaubt, man sollte sich jedoch auf kleine Buchstaben, Zahlen 5 , “.”<br />
und “-” beschränken. Die Erfahrung zeigt, daß Sonderzeichen in Bezeichnern<br />
leicht zu Problemen führen.<br />
Clients innerhalb eines per NAT ans Internet gekoppelten privaten Netzes können<br />
mit externen Servern (auch von anderen Zellen) kommunizieren - es ist<br />
jedoch nicht ganz einfach. Der NAT-Router schaltet in diesem Fall jeweils eine<br />
zeitlich begrenzte UDP-“Verbindung” 6 zwischen dem internen Client und dem<br />
externen Server. Fließen über diese “Verbindung” eine Weile (default: 3 Minuten)<br />
keine Daten, wird sie gekappt. Durch die callback-Garantie der AFS-Server<br />
ist es jedoch u.U. nötig, Stunden oder Tage nach der letzten Anforderung von<br />
Daten, ein Paket zum Client zu schicken.<br />
Das Problem mit dem Timeout der dynamischen UDP-Portmappings lässt sich<br />
mit statischen Portmappings umgehen: eines <strong>für</strong> jeden AFS-Client hinter dem<br />
Router. Dabei verbraucht jeder Client einen UDP-Port an der öffentlichen IP —<br />
kein Problem, solange nicht viele tausend AFS-Clients im privaten Netz bedacht<br />
werden sollen. Zumindest unter Kernel 2.4 lässt sich jedoch etwas derartiges<br />
nicht mit Bordmitteln bewerkstelligen.<br />
Listing A.1: netfilter-Regel <strong>für</strong> AFS-spezifisches timeout-behaftetes UDP-NAT<br />
i p t a b l e s −t n a t −A POSTROUTING −p udp −s [ AFS−C l i e n t ] −−source−p o r t 7001 \<br />
−j SNAT −−to−s o u r c e [ ö f f e n t l i c h e IP ] : [ UDP−P o r t ]<br />
Es ist zwar möglich, wie in Listing A.1 eine feste Zuordnung von öffentlichem<br />
UDP-Port zum internen AFS-Client aufzubauen, jedoch greift dann das auf<br />
3 Minuten beschränkte Timeout <strong>für</strong> UDP-“Verbindungen”. Das Timeout lässt<br />
sich per sysctl (siehe /etc/sysctl.conf ) erhöhen. Die zu ändernden Variablen<br />
4 abgesehen von root.cell und root.afs<br />
5 nicht nur Zahlen, sonst wird der Volumename als ID interpretiert<br />
6 natürlich existieren keine wirklichen UDP-Verbindungen. Unter Linux (Kernel 2.4) handelt es<br />
sich dabei um einen Eintrag in der Tabelle des Connection Trackers (ip_conntrack.o).
230 Ein AFS-zu-SMB-Gateway unter Linux<br />
heissen net.ipv4.netfilter.ip_conntrack_udp_timeout und<br />
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream.<br />
Diese Änderung beeinflusst jedoch alle UDP-“Verbindungen” - also z.B. auch<br />
DNS-Anfragen eines internen Clients an einen externen DNS-Server. Die<br />
Tabelle des Connection Trackers könnte schnell überlaufen. Würde man UDP-<br />
NAT <strong>für</strong> alle anderen Protokolle außer AFS verbieten, wäre das kein Problem.<br />
Gäbe es eine iptables-Option, um das Timeout “Verbindungs”-spezifisch<br />
anzupassen, wäre das Problem ebenfalls gelöst.<br />
Eine weitere Lösung ist, auf dem AFS-Client selbst, den Server-Check-Interval<br />
herunterzusetzen - im Beispiel auf 30 Sekunden:<br />
root@host>fs check<strong>server</strong>s -interval 30<br />
Man könnte theoretisch das Connection Tracking umgehen und wie in Listing<br />
A.2 AFS-Datenverkehr manuell weiterleiten und verändern. Diese zweite Möglichkeit<br />
scheiterte jedoch daran, dass es keine entsprechenden netfilter-Module<br />
gibt 7 , um die IP-Adressen und Portnummern eines Paketes manuell zu ändern.<br />
Listing A.2: netfilter-Regeln <strong>für</strong> ein AFS-Client-spezifisches NAT<br />
# P a k e t e von a u s s e n a e n d e r n . . .<br />
i p t a b l e s −t n a t −A INPUT −p udp −s [ AFS−C l i e n t ] −−d e s t i n a t i o n −p o r t [UDP−P o r t ] \<br />
−j MANGLE_DESTINATION −−s e t −d e s t i n a t i o n [ AFS−C l i e n t ] −−s e t −d e s t i n a t i o n p o r t 7001<br />
# P a k e t e von i n n e n a e n d e r n . . .<br />
i p t a b l e s −t n a t −A POSTROUTING −p udp −s [ AFS−C l i e n t ] −−source−p o r t 7001 \<br />
−j MANGLE_SOURCE −−s e t −s o u r c e [ ö f f e n t l i c h e IP ] −−s e t −s o u r c e p o r t [UDP−P o r t ]<br />
A.6 Ein AFS-zu-SMB-Gateway unter Linux<br />
A.6.1 Probleme<br />
In einigen Fällen ist es nötig (siehe 10.1, Seite 209), ein Linux-Samba-Gateway<br />
- z.B. <strong>für</strong> Rechner mit alten Windows-Versionen - zu betreiben.<br />
Beim Betrieb eines AFS-zu-SMB-Gateways sind einige Hürden zu nehmen.<br />
Zentrales Problem ist dabei die Frage:<br />
“Wie leite ich die Authentifikationsinformationen des Benutzers durch den Samba<strong>server</strong><br />
hindurch zum AFS weiter?”<br />
Im Gegensatz zu einer interaktiven Session (z.B. ssh) kann man schliesslich<br />
nicht einfach das Passwort zur Erzeugung des Tokens noch einmal eingeben -<br />
das SMB-Protokoll läßt das nicht zu.<br />
LanMan- und NT-Hashes : Authentifiziert sich ein SMB-Client an einem SMB-Server, so kann<br />
das entweder durch die Übertragung des Passwortes im Klartext 8 (unsicher)<br />
oder durch Übertragung eines Hashes des Passwortes passieren.<br />
Dabei werden 2 Arten von Hashes unterstützt (LanMan- und NT-<br />
Hashes). Diese Methode ist sicherer, der LanMan-Hash ist jedoch durch<br />
Designschwächen angreifbar [LMWeak]. Diese Hashes stehen jedoch<br />
üblicherweise unter Unix nicht wie die Unix-Crypt-Hashes (z.B. per<br />
/etc/passwd oder per NIS) zur Verfügung. Samba benutzt deshalb eine<br />
lokale Datei, um diese Hashes zu speichern. Dabei muss jedoch bei jeder<br />
Änderung des Passwortes auch der entsprechende Hash in diesem File<br />
angepasst werden.<br />
Es gibt auch eine Möglichkeit, Samba die Hashes per LDAP zugänglich<br />
zu machen. Das geht jedoch erst ab Samba 3.<br />
7 zumindest ist mir keines bekannt, Stand 19.03.2004.<br />
8 Windows 3.11 und der MSDOS-SMB-Client von Microsoft unterstützten nur diese Methode
Ein AFS-zu-SMB-Gateway unter Linux 231<br />
AFS-Tokens unter Samba : Auf irgendeine Weise muss jeder Samba-Prozess den Token des jeweiligen<br />
Nutzers bekommen. Steht das Passwort des Nutzers zur Verfügung ist<br />
das leicht möglich. Da das Samba-Gateway jedoch mit Hashes 9 arbeiten<br />
sollte 10 , muss das <strong>für</strong> die Erzeugung des Tokens benötigte Kerberos5-<br />
TGT auf andere Weise geholt werden.<br />
Ablaufende AFS-Tokens : AFS-Tokens laufen nach einer gewissen Zeit ab (siehe 3.7.2.2, Seite 48),<br />
müssen also regelmäßig aufgefrischt werden. Der Ablauf einer Authentifikation<br />
ist bei einer SMB-Share nicht vorgesehen. Es gibt auf dem SMB-<br />
Client (i.d.R. ein Windows-Rechner) keine Mechanismen, um die Authentifikation<br />
zu erneuern.<br />
Ein im Hintergrund auf dem Samba-Server über den Samba-Prozess des<br />
jeweiligen Nutzers wachender Reauthentifikationsprozess könnte den Token<br />
des Nutzers unbegrenzt gültig halten.<br />
A.6.2 Lösung mit verringerter Sicherheit<br />
# ! / b i n / bash<br />
#<br />
# S y n t a x : makekeytab [ P r i n c i p a l ] [ Realm ] [ Passwort ] [ D a t e i ]<br />
(<br />
echo "addent -password -p ’$1$2’ -k 1 -e des3-hmac-sha1"<br />
echo "$3"<br />
echo "wkt $4"<br />
echo "quit"<br />
) | k t u t i l<br />
Es ist möglich, <strong>für</strong> jeden Benutzer des Samba-Gateways den Kerberos-<br />
Schlüssel auf dem Gateway zu hinterlegen. Es ist nicht möglich, aus diesem<br />
Schlüssel das Passwort wiederherzustellen, jedoch reicht der Schlüssel aus,<br />
um Kerberos-Tickets anzufordern. Die Kerberos-Schlüssel werden <strong>für</strong> jeden<br />
Benutzer einzeln in jeweils einem Keytab-File gespeichert. Benötigt wird der<br />
Loginname des Nutzers, sein Passwort im Klartext und der Name der Kerberos-<br />
Realm (also der Name der Domain in Großbuchstaben). Das folgende Listing<br />
zeigt ein Skript, mit dem solche Kerberos-Keytabs (immer eine pro Aufruf)<br />
angelegt werden können:<br />
Listing A.3: Kerberos-Keytabs anlegen<br />
Hinweis: Dieses Skript ist zur Veranschaulichung gedacht. Es funktioniert aufgrund<br />
einiger nicht nachvollziehbarer Mechanismen in ktutil nicht ohne weiteres<br />
- statt dessen kommt expect zum Einsatz.<br />
Zusätzlich muss <strong>für</strong> jeden Benutzer auf dem Samba-Gateway der LanMan- und<br />
der NT-Hash hinterlegt werden. Der Befehl da<strong>für</strong> lautet:<br />
root@host>smbpasswd -a Loginname Passwort<br />
In der Samba-Konfigurationsdatei /etc/samba/smb.conf sind <strong>für</strong> alle Shares, die<br />
AFS-Tokens benötigen (i.d.R. alle, deren Pfade im AFS liegen), preexec- und<br />
postexec-Einträge nötig, die vor dem Zugriff auf das AFS einen Token <strong>für</strong><br />
den jeweiligen Samba-Prozess holen.<br />
Auf einem solchen Gateway werden die Kerberos-Schlüssel der Zellenbenutzer<br />
abgelegt. Wird dieser Rechner geknackt, hat das folgende Konsequenzen:<br />
• Es ist davon auszugehen, dass der Angreifer danach die Passwörter der<br />
Benutzer im Klartext besitzt 11 . Alle Benutzer müssen neue Passwörter <strong>für</strong><br />
ihre Kerberos-Principals setzen.<br />
9 die smb.conf -Option da<strong>für</strong> lautet:<br />
encrypt passwords=true<br />
10 Im anderen Fall wandern die Kerberos-Passwörter im Klartext durch das Netzwerk!<br />
11 Das liegt am fehlenden Salt der LANMAN-Hashes
232 Dateinamen und Pfade<br />
A.7 Dateinamen und Pfade<br />
• Die Sicherheit der Zelle ist nicht direkt von einem solchen Angriff betroffen<br />
- solange man keine Keytabs von mächtigen Principals (z.B. acall<br />
oder afs) auf dem Server liegen hatte.<br />
Der Gateway ist natürlich ein Server - reguläre interaktive Logins sollten<br />
auf diesem nicht erlaubt sein (siehe 3.7.5.4, Seite 56), womit ein lokaler<br />
root-Exploit eher unkritisch ist. Durch den laufenden Samba-Server besteht<br />
allerdings ein Restrisiko.<br />
Unter 4.4.8 auf Seite 96 ist beschrieben, wie man das Samba-Gateway aufsetzt.<br />
Dieser Abschnitt enthällt eine vollständige Liste von Pfaden und Dateien sammt<br />
zugehöriger Erklärung, die von OpenAFS,InstantAFS und der in diesem Dokument<br />
besprochenen Software benutzt werden.<br />
/afs : Der AFS-Namensraum<br />
/etc/cron.d/instantafs-backup : instantafs.vtapes-init legt dieses File an und schreibt voll funktionsfähige<br />
Beispiel-cronjobs hinein, die das AFS-backup steuern. Erklärungen<br />
sind in Kommentaren darin enthalten.<br />
/etc/openafs : Das Konfigurationsbasisverzeichnis von OpenAFS unter Debian. Hinweis:<br />
Die Konfigurations files liegen nicht unter diesem Verzeichnis,<br />
wenn OpenAFS mit Transarc-Pfaden übersetzt wurde<br />
/etc/instantafs : Konfigurationsfiles <strong>für</strong> InstantAFS sowie Keytabs liegen hier<br />
/etc/instantafs/acall.keytab : Die Kerberos-Keytab des acall-Principals - also acall@MYCELL. Dieser<br />
Principal ist unter InstantAFS mit Superuserrechten versehen - die Keytab<br />
ist deshalb gleich schützenswert wie das Zellenadministrator-Passwort<br />
/etc/instantafs/acall.local.keytab : Die Service-Keytab des acall-Servers des Rechners, auf dem sie liegt -<br />
also z.B. der Principal acall/mekong.mycell@MYCELL.<br />
/etc/instantafs/users.nokrb5 : Die Liste der Benutzer (ein Benutzer pro Zeile), bei denen keine<br />
Kerberos-Authentifikation per PAM durchgeführt werden soll. Per<br />
default sieht die Datei so aus:<br />
root<br />
/etc/instantafs/pam.d : Alternative PAM-Konfigurationsfiles aus dem Paket instantafs-client .deb<br />
/etc/instantafs/pam.d/common-auth-afs : Dieses PAM-File wird von den Diensten benutzt, die darauf angewiesen<br />
sind, nach der Authentifikation ein Token vorzufinden (z.B. interaktive<br />
Logins, kdm, ...).<br />
/etc/instantafs/pam.d/common-auth : Dieses PAM-File wird von Diensten benutzt, die lediglich das passwort<br />
überprüfen wollen (z.B. su oder auch ein POP3-Server).<br />
/etc/instantafs/vtapes.conf : Das Konfigurationsfile <strong>für</strong> den virtuellen Bandwechsler instantafs.vtapes<br />
(siehe 9.2.28, Seite 206) des lokalen AFS-Tapecontrollers.<br />
/etc/krb5kdc : Das Konfigurationsdirectory der Kerberos-Serverprozesse. Hier sollte<br />
man nichts ändern, da sich instantafs.setup bereits darum kümmert.<br />
/etc/krb5kdc/kadm5.acl : In diesem File sind die Kerberos-Principals gelistet, die über die Ferne<br />
Änderungen an der Kerberos-Datenbank vornehmen dürfen. Unter<br />
InstantAFS ist dieses File per default leer, da sowieso nur lokale (per<br />
kadmin.local) gearbeitet wird - <strong>für</strong> Fernzugriff wird acall benutzt.)<br />
/etc/krb5kdc/kadm5.keytab : Die Service-Keytab des kadmind-Prozesses (Kerberos5-Admin-Deamon)<br />
/etc/krb5kdc/kdc.conf : Das Konfigurationsfile des Kerberos-Servers
Dateinamen und Pfade 233<br />
/etc/krb5kdc/stash : Der Schlüssel, mit dem die eigentliche Kerberos-Datenbank auf dem Platte<br />
gesichert ist<br />
/etc/krb5kdc/syncsshkey : Der SSH-Schlüssel, der von instantafs.kerberos benutzt wird, um die<br />
aktualisierte Kerberos-Datenbank vom Kerberos-Admin-Server auf die<br />
Slave-Server zu verteilen. Auf den Slave-Servern sorgen entsprechende<br />
Einträge in /root/.ssh/authorized_keys da<strong>für</strong>, dass der fernzugriff klappt.<br />
/etc/openafs/<strong>server</strong> : Hier liegen Konfigurationsfiles, die nur AFS-Serverprozesse auf dem lokalen<br />
Rechner interessieren. Es ist dringend zu empfehlen, dass der Inhalt<br />
dieses Verzeichnis auf sämmtlichen AFS-Servern (File-,Datenbank- und<br />
Backup-Server) absolut identisch ist.<br />
/etc/openafs/<strong>server</strong>/CellServDB : Diese Datei enthält die Liste sämmtlicher DB-Server der Zelle. Die Liste<br />
wird von UBIK-Server-Prozessen (vl<strong>server</strong>, pt<strong>server</strong>, ...) benutzt, um<br />
die Synchronisation sicherzustellen.<br />
Beispiel:<br />
>mycell<br />
10.0.1.1 # orinoco.mycell<br />
10.0.1.2 # rubicon<br />
/etc/openafs/<strong>server</strong>/krb.conf : Diese Datei muss - wenn die Kerberos-Realm nicht dem Zellennamen<br />
entspricht - den Namen der Kerberos-Realm enthalten. Das ist bei InstantAFS<br />
nicht vorgesehen - die Datei sollte also nicht existieren.<br />
/etc/openafs/<strong>server</strong>/ThisCell : Der Name der AFS-Zelle.<br />
Beispiel:<br />
mycell<br />
/etc/openafs/<strong>server</strong>/UserList : Die Liste der Benutzer, die privilegiert auf Serverprozesse dieses Rechners<br />
zugreifen dürfen (siehe 3.7.3.5, Seite 54). Unter InstantAFS müssen<br />
zwei Benutzer zwingend drinstehen: acall und admin<br />
Beispiel:<br />
admin<br />
acall<br />
/etc/openafs/<strong>server</strong>/KeyFile : Der AFS-Zellenschlüssel (siehe 3.7.1, Seite 47). Es handelt sich dabei um<br />
ein Schlüsselliste, die jedoch ein anderes Format als Kerberos-Keytabs<br />
hat. Üblicherweise ist nur ein Schlüssel drin. Mit asetkey kann die Liste<br />
bearbeitet werden.<br />
/etc/openafs/<strong>server</strong>-local : Ein Konfigurationsverzeichnis <strong>für</strong> AFS-Serverprozesse<br />
/etc/opebafs/<strong>server</strong>-local/sysid : Die UID des lokalen AFS-File<strong>server</strong>s. Die UID jedes File<strong>server</strong>s ist<br />
einzigartig und muss das auch sein (siehe auch vos listaddrs<br />
-printuuid). Wenn man einen File<strong>server</strong> clont, muss man darauf<br />
achten, dass dieses File vorher gelöscht wird. Existiert das File nicht,<br />
wenn der File<strong>server</strong> startet, wird ein neues angelegt.<br />
/etc/openafs/BosConfig : Das Konfigurationsfile des bos<strong>server</strong>-Prozesses. Dieses File definiert,<br />
welche Prozesse laufen müssen und wann sie neu gestartet werden<br />
sollen. Man muss dieses File i.d.R. nicht mit der Hand bearbeiten sonder<br />
mittels des bos-Kommandos (siehe 9.1.1, Seite 192). Auf einem reinem<br />
AFS-Datenbank<strong>server</strong> sieht die Datei z.B. so aus:<br />
restarttime 11 0 4 0 0<br />
checkbintime 3 0 5 0 0<br />
bnode simple vl<strong>server</strong> 1<br />
parm /usr/lib/openafs/vl<strong>server</strong><br />
end<br />
bnode simple pt<strong>server</strong> 1<br />
parm /usr/lib/openafs/pt<strong>server</strong>
234 Dateinamen und Pfade<br />
end<br />
bnode simple bu<strong>server</strong> 1<br />
parm /usr/lib/openafs/bu<strong>server</strong><br />
end<br />
/etc/openafs/CellServDB : Das Zellenverzeichnis. Diese Datei muss unter InstantAFS leer sein, da<br />
Datenbank<strong>server</strong> über das DNS gesucht werden. Ansonsten übersteuert<br />
dieses File die Daten im DNS.<br />
/etc/openafs/afs.conf : Dieses Debian-spezifische File ist zur leichteren Konfigurations des<br />
AFS-Cachemanagers gedacht. Hier lassen sich z.B. die diversen Cache-<br />
Parameter festlegen und der Debug-Modus aktivieren.<br />
/etc/openafs/afs.conf.client : Eine weitere Konfigurationsdatei des Cachemanagers (siehe 3.5.6, Seite<br />
43). Üblicherweise sieht diese Datei unter InstantAFS wie folgt aus:<br />
Beispiel:<br />
AFS_CLIENT=true<br />
AFS_AFSDB=true<br />
AFS_CRYPT=true<br />
AFS_DYNROOT=false<br />
AFS_FAKESTAT=true<br />
/etc/openafs/cacheinfo : Ein weiteres Konfigurationsfile des Cachemanagers. In diesem ist nur die<br />
Cachegroesse interessant, die ganz am Ende als kB-Angabe steht.<br />
Beispiel:<br />
/afs:/var/cache/openafs:100000<br />
/etc/krb5.conf : Das Konfigurationsfile <strong>für</strong> lokale Kerberos-Clients<br />
/etc/krb5.keytab : Das Keytab <strong>für</strong> lokale Dienste. Unter InstantAFS wird darin nur der host-<br />
Key gespeichert (also z.B. host/mekong.mycell@MYCELL).<br />
/var/cache/openafs : Das Cache-Verzeichnis des AFS-Cachemanagers<br />
/var/lib/openafs/backup : In diesem Verzeichnis lagern Konfigurations- und Logfiles des TapeControllers<br />
(butc), der Teil des AFS-Backup-Systems ist (siehe 5.2.3.1, Seite<br />
102). Normalerweise sollte man Änderungen an diesen Files dem Kommando<br />
instantafs.vtapes-init überlassen.<br />
/var/lib/openafs/backup/CFG_* : Das Konfigurationsfile eines Tapedevices<br />
/var/lib/openafs/backup/TE_* : Das Fehler-Logfile eines Tapedevices<br />
/var/lib/openafs/backup/TL_* : Das Logfile eines Tapedevices<br />
/var/lib/openafs/backup/tapeconfig : In diesem File befindet sich eine Liste der verfügbaren Tapedevices eines<br />
Rechners. Unter InstantAFS existiert in dieser Liste nur ein Eintrag, der<br />
jedoch auf eine Datei (oder auf nichts) zeigt und nicht auf ein physisches<br />
Gerät.<br />
/var/lib/openafs/db : Die AFS-Datenbanken<br />
/var/lib/openafs/db/bdb.DB0 : Die BDB (Backup DataBase)<br />
/var/lib/openafs/db/prdb.DB0 : Die PTDB (ProTection DataBase)<br />
/var/lib/openafs/db/vldb.DB0 : Die VLDB (VoLume DataBase)<br />
/var/lib/openafs/NetInfo : In diesem File wird bei Servern mit mehreren Adressen definiert, welche<br />
Adressen <strong>für</strong> AFS benutzt werden (siehe 3.6.1, Seite 45).
AFS-Schlüssel aus einer laufenden Zelle besorgen 235<br />
A.8 AFS-Schlüssel aus einer laufenden Zelle besorgen<br />
A.9 Löschen des AFS-Caches eines AFS-Clients<br />
root@host>fs setcache 1<br />
root@host>fs setcache 0<br />
Sollen neue File<strong>server</strong> oder Datenbank<strong>server</strong> in die Zelle eingebaut werden, so<br />
benötigt man einen gültigen AFS-Key. Kann diesen entweder aus einer gültigen<br />
Keytab (üblicherweise afs.keytab) extrahieren (mit asetkey add, darf<br />
dabei jedoch auf keinen Falldie Keytab mit ktadd [...] aus der Kerberos-<br />
Datenbank erstellen.<br />
Wenn man die Keytab nicht mehr findet, kann man auch einfach die Datei /etc/openafs/<strong>server</strong>/KeyFile<br />
von einem bereits arbeitenden Datenbank- oder File<strong>server</strong><br />
an die gleiche Stelle auf dem neuen Server kopieren.<br />
Ein direktes forciertes flushen des AFS-Caches ist nicht möglich, jedoch kann<br />
man folgenden Trick anwenden:<br />
Das erste Kommando setzt den Cache auf die Größe 1 (ein Chunk), was eine<br />
Weile dauern kann. Das zweite setzt die Cachegröße wieder auf den Wert, der<br />
in /etc/openafs/cacheinfo definiert ist.<br />
A.10 File<strong>server</strong> mit mehreren IP-Adressen im selben logischen Netzwerk<br />
File<strong>server</strong> können mit mehreren Netzwerkinterfaces umgehen und dadurch auch<br />
zusätzliche Ausfallsicherheit (-> gegen Ausfall von Netzwerkkarten) schaffen<br />
(siehe 3.6.1, Seite 45).<br />
Setzt man einen File<strong>server</strong> auf, der mehrere Netzwerkkarten besitzt und diese<br />
im selben logischen Netzwerk (z.B. 192.168.1.1 und 192.168.1.2 mit der<br />
Netzmaske 255.255.255.0) liegen, bekommt man nicht automatisch, was man<br />
erwartet. Alle ausgehenden Pakete werden immer über eine der Karten geroutet,<br />
da die Routingtabelle nicht speziell auf die Quelladresse von ausgehenden<br />
Paketen schaut.<br />
Abhilfe schafft Policy based routing. Hier ist beispielhaft beschrieben, wie man<br />
so etwas unter Debian ab Sarge einrichtet. Vorrausgesetzt ist ein aktueller Kernel<br />
(2.6.15.0 geht auf jeden Fall).<br />
Benötigt wird das nicht-Standard-Paket iproute .deb :<br />
root@host>apt-get install iproute<br />
Man benötigt ein kleines Skript - z.B. /etc/iproute2/ipr2, das sich darum kümmert,<br />
zwei unabhängige Routingtabellen einzurichten und entsprechend mit<br />
Quelladressen des Servers zu verbinden. Im Beispiel sind eth0 und eth1 die<br />
Netzwerkinterfaces und 192.168.1.10 das default-Gateway:<br />
ip route add 192.168.1.0/255.255.255.0 via 192.168.1.1 dev eth0 t<br />
ip route add 192.168.1.0/255.255.255.0 via 192.168.1.2 dev eth1 t<br />
ip route add default via 192.168.1.10 dev eth0 tab 1<br />
ip route add default via 192.168.1.10 dev eth1 tab 2<br />
ip rule add from 192.168.1.1/32 tab 1 priority 500
236 File<strong>server</strong> mit mehreren IP-Adressen im selben logischen Netzwerk<br />
ip rule add from 192.168.1.1/32 tab 2 priority 500<br />
Die passenden Rechte nicht vergessen...<br />
root@host>chmod 755 /etc/iproute2/ipr2<br />
...und folgende Zeile gleich unter dem ifup -a in der Datei /etc/init.d/networking<br />
eintragen:<br />
/etc/iproute2/ipr2