02.01.2013 Aufrufe

Anleitung für Administratoren - web server

Anleitung für Administratoren - web server

Anleitung für Administratoren - web server

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!