Chemnitzer (AFS)-login

Ausgangssituation

Die unbefriedigende Integration der AFS-Authentisierung in den Login-Vorgang auf UNIX-Systemen unter verschiedenen Bedingungen war Anlaß für uns, ausgehend von einer frei verfügbaren login-Implementation (aus dem logdaemon-Paket, Quelle: ftp://ftp.win.tue.nl/pub/security ) eine eigene, auf unsere Bedingungen zugeschnittene, Implementation des login-Programms zu schaffen.

Ziel

Diese Implementation soll folgendes leisten:

Authentisierungsvorgang

Der Authentisierungsvorgang läuft folgendermaßen ab:

  1. prüfen, ob es einen passwd-Eintrag für den Nutzer gibt (lokal in /etc/passwd oder im NIS)
  2. Erzeugen einer Process Authentication Group (PAG)
  3. prüfen, ob der Nutzer einen Eintrag in der SKEY-Datenbasis besitzt (/etc/skeykeys)
  4. prüfen, ob das eingegebene Passwort das richtige One-Time-Passwort war
  5. prüfen, ob das eingegebene Passwort das AFS-Passwort ist
  6. prüfen, ob das eingegebene Passwort, das richtige UNIX-Passwort ist
  7. prüfen, ob der Nutzer einen AFS-Account besitzt (dieser Zweig wird nur durchlaufen, wenn der Nutzer entweder einen Eintrag in der SKEY-Datenbasis besitzt und zuerst das richtige One-Time-Passwort eingegeben hat - Schritte 3 und 4 - oder sich das lokale/NIS-Passwort und das AFS-Passwort des Nutzers unterscheiden und der Nutzer zuerst das richtige lokale/NIS-Passwort eingegeben hat - Schritte 5 und 6)
  8. erneute Abfrage und Test des AFS-Passworts ("Enter AFS Password:"), falls das Passwort richtig war, beschaffen eines Tokens und Übergeben an den Cache Manager, falls nicht, entsprechenden Hinweis auf nicht beschafftes AFS-Token geben, in jedem Fall weiter bei Schritt 9
  9. komplettieren des Login-Vorgangs durch

Von diesem Authentisierungsvorgang wird unter der folgenden Bedingung abgewichen:

Beachten Sie:

Da zur Authentisierung der lokal verwaltete Nutzereintrag (aus /etc/passwd bzw. der NIS-Map) zuerst in Verbindung mit der AFS-Authentisierung benutzt wird (Schritt 5), sollte dieses Login-Programm nur an Maschinen eingesetzt werden, an denen die AFS-Zelle identisch mit der Verwaltung von /etc/passwd bzw. der NIS-Domain gehalten wird.


Für Maschinen außerhalb des URZ ist daher genau zu prüfen, ob dieses Login-Programm verwendet werden kann!

systemunabhängige Konfigurationsfiles

/etc/login.access

Dieses File wird ausgewertet nachdem der Authentisierungsvorgang abgeschlossen ist. Es enthält eine Zugangssteuertabelle, in der festgelegt werden kann, welche Nutzerkennzeichen zum login von welchen entfernten Hosts aus oder an welchen lokal angeschlossenen Terminals erlaubt bzw. verboten sind. Die Auswertung erfolgt so, daß der erste Eintrag, der auf eine (user, host) Kombination bzw. (user, tty) Kombination zutrifft, die login-Berechtigung angibt. Jeder Eintrag besteht aus drei Feldern

permission : users : origins

Das erste Feld (permission) muß eines der Zeichen '+' (Zugang erlauben) oder '-' (Zugang verbieten) sein.

Das zweite Feld (users) enthält eine Liste von einem oder mehreren

Das dritte Feld (origins) enthält eine Liste von einem oder mehreren

Mit Hilfe des Schlüsselwortes EXCEPT können sehr kompakte Zugangslisten erstellt werden, etwa in der Form

- : ALL EXCEPT hinz kunz : ALL

Mit folgender Bedeutung: das Login ist für alle Nutzerkennzeichen verboten, außer für die Kennzeichen hinz und kunz.

Das folgende Beispiel beschreibt eine Maschine, an der folgende Regeln gelten sollen:

+ : root : console
+ : @urz_mitarbeiter : ALL
- : ALL : ALL

/etc/skey.access

Dieses File steuert die Zulässigkeit der Verwendung von Klartext-Passworten.
Aus der Beschreibung des Authentisierungsvorgangs geht hervor, daß selbst dann, wenn ein Nutzer einen Eintrag in der SKEY-Datenbasis besitzt und er die Aufforderung erhält, ein One-Time-Passwort einzugeben, auch die Eingabe eines Klartext-Passwortes akzeptiert wird. Das trifft jedoch nur zu, wenn es das File /etc/skey.access nicht gibt. Sobald dieses File existiert, werden von solchen Nutzern nur noch One-Time-Passworte akzeptiert, es sei denn, das Login erfolgt an der Console.

In diesem File können Regeln formuliert werden, die angeben, unter welchen Bedingungen von diesen Nutzern auch Klartext-Passworte akzeptiert werden. Es wird so ausgewertet, daß der erste zutreffende Eintrag das Verhalten von login bestimmt.
Die Einträge haben die folgende Form:

permit condition condition...
deny condition condition...

Nach den Schlüsselworten permit und deny kann eine Liste von Bedingungen (condition) angegeben werden. Diese Liste kann auch leer sein, dann wird die Verwendung von Klartext-Passworten entweder generell erlaubt (permit) oder verboten (deny).
Die Bedingungen werden folgendermaßen angegeben:

Das folgende Beispiel beschreibt eine Maschine, an der die Nutzer hinz und kunz bei Anmelden immer ein One-Time-Passwort angeben müssen, alle anderen Nutzer dürfen ihr Klartext-Passwort angeben, es sein, sie kommen von einem Rechner außerhalb des Subnetzes 134.109.0.0.

deny user hinz
deny user kunz
deny internet 134.109.0.0 255.255.0.0
permit

In Kombination mit dem oben stehenden Beispiel für /etc/login.access und dem Einsatz des ESRA-telnetd kann man so folgendes erreichen:

/etc/fbtab

Dieses File wird verwendet, um während des Login-Vorgangs bestimmte Files und Geräte dem sich anmeldenden Nutzer zuzuordnen. Sinnvollerweise sind das die Geräte, die ohnehin nur durch direkten Zugriff benutzt werden können, wie Floppy- und CD-ROM-Laufwerke, Keyboard, Maus, Framebuffer, etc.
Die Idee für dieses Konfigurationsfile stammt aus dem Login-Programm von SunOS 4.x. Diese Login-Version führt diesen Mechanismus auch für andere Systeme ein. Der Aufbau dieses Files entspricht dem Aufbau von /etc/logindevperm(4) im Solaris 2.x.

systemabhängige Konfigurationsfiles

Solaris 2

Environment-Variablen

Von login werden mindestens diese Environment-Variablen gesetzt.

HOME Pfadname des Home-Verzeichnisses
LOGNAME Login-Kennzeichen
MAIL Pfadname der Mailbox
PATH Suchpfad für Kommandos (systemabhängig)
SHELL Pfadname der Login-Shell
TERM Terminaltyp
REMOTEHOST nur bei login von entferntem Rechner: vollständiger Hostname des entfernten Rechners
DISPLAY nur wenn der Client auf dem entfernten Rechner diese Variable "durchreicht"

Von diesem login werden security-relevante Umgebungsvariablen (IFS, LD_LIBRARY_PATH, ...; siehe auch CERT-Advisory CA-95:14) zurückgesetzt.

Verfügbarkeit

Das Programm ist derzeit für folgende Plattformen verfügbar:

Besonderheiten

Solaris 2

Installation und Verwendung

Das login-Programm ist in verschiedenen Versionen im Pfad /uni/global/bin für die Plattformen, für es bisher verfügbar ist, zu finden. Dort liegen die folgenden Programme:

Zur Installation ist das ausgewählte login-Programm (also login.afs oder login.noafs) anstelle des systemeigenen login-Programms zu installieren. Die Rechte müssen dabei genauso gesetzt werden, wie beim systemeigenen login. Wenn dieses login-Programm auch vom ESRA-telnetd benutzt werden soll, so muß es unter dem Namen sralogin erreichbar sein, siehe auch ESRA .

Auf AFS-Maschinen (nicht für Linux) ist dieses Programm auch als /usr/afsws/bin/login (siehe Verfügbarkeit) erreichbar.


Thomas Müller, 24. November 1995, 4. Oktober 1996