AFS am Linux-PC-Client-Server System der Universität Innsbruck

Mit Beginn des Sommersemesters 2003 werden die Heimatverzeichnisse des Linux-PC-Client-Server Systems am ZID der Universität Innsbruck über AFS serviert

Was ist AFS?

AFS (Andrew File System) ist einverteiltes Dateisystem, welches erlaubt, Dateibäume über das Netzwerk gemeinsam zu nutzen. Die Authentifizierung erfolgt dabei über Kerberos V. Dadurch diese Kombination wird eine wesentliche Verbesserung bei Datensicherheit und Zugriffsschutz gegenüber dem vorher verwendeten NFS erreicht. Auf den ersten Blick ergibt sich für den Benutzer keine Veränderung durch die Umstellung. Der Authentifizierungsprozess spielt sich beim Anmelden am System weiterhin im Hintergrund ab.

Was bringt mir Kerberos/AFS als Benutzer?

  • Der größte Vorteil von AFS gegenüber dem gewohnten UNIX-Dateisystem ist die wesentlich feinere Granularität der Zugriffskontrolle. Diese erfolgt unter AFS über sogenannte ACLs (Access Control List).
  • Tägliches Backup, erreichbar über das Heimatverzeichnis jedes Benutzers (siehe unten).
  • Erhöhung der Zugriffsschutzes für Ihre Dateien.

Was muss ich über die Zugriffsrechte unter AFS wissen?

Wie bereits erwähnt erfolgt die Zugriffskontrolle unter AFS über sogenannte ACLs. Von den gewohnten Unix-Dateirechten werden die 'group' und 'others' Bits ignoriert, nur die owner Bit's werden für den Dateizugriff verwendet. Es empfiehlt sich, davon nur das executable Bit zu verwenden und die anderen Attribute über ACLs zu setzen.

Was sind ACLs?

Im Gegensatz zu UNIX werden die Zugriffsrechte in AFS auf Verzeichnis-, nicht auf Dateiebene vergeben. Das heißt jedes Verzeichnis im AFS hat eine ACL, welchedie Zugriffsrechte für dieses Verzeichnis und alle darin enthaltenen Dateien bestimmt. Eine ACL kann bis zu zwanzig Einträge enthalten. Beim Erstellen von Unterverzeichnissen wird die ACL des übergeordneten Verzeichnis vererbt.

Es gibt sieben ACL Attribute, die man in zwei Gruppen einteilen kann:

  • Attribute, die für das Verzeichnis selbst gelten:
    • l, : Der Benutzer darf das Verzeichnis lesen, zum Beispiel den ls Befehl ausführen oder sich die ACL des Verzeichnisses anzeigen lassen. Das Lesen von Dateien im Verzeichnis bzw. das Lesen von Unterverzeichnissen wird dadurch nicht erlaubt. Zum Lesen von Unterverzeichnissen werden für jedes Unterverzeichnis jeweils wieder lookup-Rechte benötigt.
    • i, --insert: Der Benutzer darf neue Dateien in das Verzeichnis schreiben bzw. kopieren. Verändern darf er diese ohne das w-Recht nicht mehr. Außerdem darf er Unterverzeichnisse anlegen.
    • d, --delete: Der Benutzer darf Dateien aus dem Verzeichnis löschen bzw. verschieben.
    • a, --administer: Der Benutzer darf die ACL dieses Verzeichnisses verändern.
  • Attribute die für Dateien innerhalb des Verzeichnisses gelten:
    • r, --read: Der Benutzer darf den Inhalt der Datei lesen bzw. kopieren und sich mit 'ls -l' die Dateiattribute anzeigen lassen.
    • w, --write: Der Benutzer darf Dateien verändern und die Attribute der Datei mit chmod verändern. Die Datei muss dabei bereits existieren.
    • k, --lock: Der Benutzer darf ein lock auf Dateien in diesem Verzeichnis erlangen.

Wie kann ich ACLs auslesen bzw. verändern?

Zur allgemeinen Verwirrung werden mit dem 'ls' Kommando nur die Unix-Rechte angezeigt, obwohl diese wie oben beschrieben nur mehr beschränkte Gültigkeit haben. Zur Anzeige der ACL eines Verzeichnisses im AFS dient das Kommando:

fs listacl <dirname>

Eine typische Ausgabe ist z.B:

[cXXXYYY@zid-gpl ~]$ fs la /afs/zid1.uibk.ac.at/shares/cXXX/cXXXYYY/Proj1
Access list for /afs/zid1.uibk.ac.at/shares/cXXX/cXXXYYY/Proj1 is
Normal rights:
cXXXYYY:lpccs rl
cXXXZZZ rl
cXXXYYY rlidwka

An diesem Verzeichnis haben die Gruppe cXXXYYY:lpccs und der Benutzer cXXXZZZ Lese-Rechte (read und lookup), während der Benutzer cXXXYYY Schreibe-Rechte besitzt. Hier wird ersichtlich, dass im AFS ACL's für Benutzergruppen und für einzelne Benutzer vergeben werden können. Da jede ACL nur maximal 20 Einträge enthalten kann, gibt es für jeden Benutzer die Möglichkeit, eigene Gruppen zu definieren, die er für ACLs verwenden kann.

Zum verändern der ACL eines Verzeichnisses in AFS dient das Kommando:

fs setacl <dirname> <user bzw. group> <acl> [-clear] [-negative]

Dabei ist <dirname> der Name des Verzeichnisses in AFS, dessen ACLs verändert werden soll, <user> bzw. <group> ist der Benutzername bzw. Gruppenname für den die Rechte vergeben werden und <acl> ist eine Buchstabenkombination für die ACLs. Dabei verwendet man 'rlidwka' oder 'all' für alle Rechte, 'rl' oder 'read' für Leserechte auf das Verzeichnis, 'rlidwk' oder 'write' für die Schreibrechte auf das Verzeichnis (es fehlt dabei das Recht, die ACL zu verändern) usw. Mit 'none' für <acl> wird der entsprechende Benutzer bzw. Gruppe aus der ACL für das Verzeichnis gelöscht.

z.B.

[cXXXYYY@zid-gpl ~]$ fs setacl /afs/zid1.uibk.ac.at/shares/cXXX/cXXXYYY/Proj1 system:authuser none
[cXXXYYY@zid-gpl ~]$ fs setacl /afs/zid1.uibk.ac.at/shares/cXXX/cXXXYYY/Proj1 cXXXYYY:lpccs rl

Achten Sie darauf, dass Sie sich nicht selbst die Rechte nehmen dürfen, da Sie in diesem Fall wirklich keinen Zugriff mehr haben, sich die Rechte auch danach nicht mehr geben können!

Hilfe zum Befehl fs erhält man mit fs help bzw. mit fs help <command>

Wird ein Unterverzeichnis im AFS erstellt, erbt das Unterverzeichnis die ACL des übergeordeten Verzeichnisses.
Der Befehl fs enthält keine Option für rekursives Verändern von ACL's. Dies kann mit einem einfachen 'find' Befehl durchgeführt werden:

find <dirname> -type d -exec fs setacl {} <user> <acl> \;

Wie kann ich eigene Gruppen für ACL's erstellen?

Wie bereits erwähnt kann eine ACL maximal 20 Einträge umfassen. Deshalb ist es unumgänglich, mit Gruppen zu arbeiten, wenn vielen Benutzern Rechte am betreffenden Verzeichnis eingeräumt werden sollen. Mit dem Befehl:

pts creategroup <groupname>

kann jeder Benutzer eigene Gruppen anlegen. Mit dem Befehl:

pts adduser -user <username> -group <groupname>

können dieser Gruppe die Benutzer hinzugefügt werden. Dabei muss der Gruppenname dem Format groupowner:groupname genügen (z.B.) csaa5698:Testgruppe.

Mit dem Befehl:

pts membership <groupname>

werden die Mitglieder einer Gruppe ausgegeben. Eigene Gruppen löscht man mit:

pts delete <groupname>

Hilfe zum Befehl pts erhält man mit pts help bzw. mit pts help <command>

Wie kann ich im AFS meine Quota abfragen?

Mit dem Befehl (im Heimatverzeichnis):

fs listquota . oder fs quota .

wird die Quota bzw. der prozentuelle Verbrauch der Quota angezeigt.

Wie kann ich ein Volumen ein/aus-hängen?

Es kann jedes AFS Volumen innerhalb des AFS Filesystems mehrmals eingehängt werden. Dazu dient der Befehl:

fs mkmount -dir <directory> -vol <volume name> [-cell <cell name>]

wobei <directory> das neu zu erstellende Verzeichnis bezeichnet und davor nicht existieren darf. Um z.B. das Volumen shares.cXXXYYY in meinen HOME unter shareit einzuhängen, genügt die Zeile:

fs mkmount -dir $HOME/shareit -vol shares.cXXXYYY

oder z.B. zum einhängen des backup des eigenen shares volumes:

fs mkmount -dir $HOME/shares.backup -vol shares.$USER.backup 

Die Abfrage des zugehörigen Volumens eines AFS Mountpoints lautet:

fs lsmount -dir <directory>

Das Entfernen des Verzeichnisses eines Mountpoints erfolgt durch:

fs rmmount -dir <directory>

z.B. fs rmmount -dir $HOME/shareit

Was ändert sich durch den Einsatz von Kerberos?

Kerberos dient als Authentifizierungssystem, welches den Zugriff auf AFS erst ermöglicht. Die Authentifizierung läuft weiterhin im Hintergrund ab, für den Benutzer ändert sich auf den ersten Blick nichts. Jedoch sind einige Hintergrundinformationen zu Kerberos recht nützlich:

Nach erfolgreichem Anmelden am System (gültige Benutzerkennung und Password) erhält der Benutzer von Kerberos ein sogenanntes Ticket. Mithilfe dieses Ticket erhält der Benutzer Berechtigungen an verschiedenen Diensten. Bei uns erhält der Benutzer mit diesem Ticket (beim Anmelden automatisch) die Berechtigung zum Zugriff auf AFS. Diese Berechtigung ist wiederum ein Ticket, wird aber innerhalb von AFS als Token bezeichnet.

Tickets haben auf unserem System eine Gültigkeit von 16 Stunden. Nach Ablauf dieser Frist erlischt die Zugriffsberechtigung auf AFS und man muss sich neu anmelden. Benötigt man mehr Zeit (z.B. bei lang laufenden Prozessen), muss man das Ticket vor dieser Frist verlängern. Man kann ein Ticket immer für weitere 16 Stunden verlängern (bis zu einem Maximum von 10 Tagen). Danach muss man sich wieder mit dem Password anmelden um ein neues Ticket zu erhalten.

Anzeigen der Ticket(s) und deren Ablaufdatum:

klist

Anzeigen des AFS-Token (besitzt dasselbe Ablaufdatum wie das Ticket):

tokens

Verlängern des Kerberos-Tickets und des AFS-Tokens:

kinit -R
aklog

Wie ändere ich mein Password?

Wie gewohnt kann jeder Benutzer sein Password mit:

passwd

ändern. Dabei ist zu beachten, dass das neue Password aus mindestens zwei 'Buchstaben-Klassen' bestehen soll - also z.B. aus Buchstaben und Zahlen oder Sonderzeichen oder Groß- und Kleinbuchstaben usw.

Wie erreiche ich mein Backup?

Im AFS besteht die Möglichkeit, auf den Zustand des Homeverzeichnis vom Vortag zuzugreifen. Dafür wird jede Nacht ein Backup erstellt, das unter /afs/zid1.uibk.ac.at/backups/*/$USER und $HOME/.BACKUP eingemountet ist. Werden versehentlich Dateien gelöscht, kann somit sofort deren Zustand vom Vortag wiederhergestellt werden. Werden in dringenden Fällen Daten von einem weiter zurückliegenden Zeitpunkt benötigt, wenden Sie sich bitte an zid-service@uibk.ac.at da diese händisch eingespielt werden müssen.

Was gilt es bei der Verwendung von AFS zu beachten?

  • Im AFS sind Hard Links nur innerhalb ein und desselben Verzeichnisses möglich. Symbolische Links sind ebenso wie in einem Unix-Filesystem beliebig setzbar.
  • AFS unterstützt keine FIFOs
  • AFS verfügt über einen Client-seitigen Cache (bei uns 100MB). Dies erlaubt einen schnelleren Zugriff auf bereits vorher gelesene oder geschriebene Daten.
    AFS praktiziert 'write-on-close', d.h. die Datei wird zunächst im Cache bearbeitet, aber erst beim Schließen auf den AFS-Server synchronisiert. Wenn eine Datei von einem laufenden Programm nach und nach geschrieben wird (aber nie geschlossen), sieht die Datei auf verschiedenen Rechnern, auf denen dasselbe Verzeichis eingemountet ist zur gleichen Zeit unterschiedlich aus. Sobald die Datei geschlossen wird, sieht die Datei auf allen Klienten gleich aus.