NFS4 Kerberos und ssh

NFS4 und ssh

NFS4, Kerberos und ssh scheinen auf den ersten Blick nicht viel miteinander zu tun zu haben, insbesondere aus der Sicht von  Windows-Benutzern. Aber auch für Linux-Nutzer ist der Zusammenhang nicht direkt erkennbar.

Die Verbindung beider Services an der Uni Koblenz liegt darin, das die Home-Verzeichnisse aller Benutzer über NFS4 angebunden sind. In dem Home-Verzeichnis eines Benutzers, der ssh verwendet, legt ssh verschiedene Dateien insbesondere auch für ssh-Schlüssel an. Für Windows-Benutzer ist das hier gesagte nur dann interessant, wenn Sie ssh-basierte Werkzeuge wie putty oder WinScp verwenden, da dann ebenfalls von ssh Dateien im Home-Verzeichnis des Benutzers gelesen bzw. geschrieben werden.

Da Dateien im Homeverzeichnis bei der Verwendung von NFS4 immer nur dann gelesen und geschrieben werden können, wenn der Benutzer über ein Kerberos-Ticket verfügt, kann es bei der Nutzung von ssh zu unerwarteten Effekten kommen.

Grundsätzlich muß man bei einer genaueren Betrachtung der Auswirkungen des Zusammenspiels von NFS4 und Kerberos mit ssh  Unterscheiden ob ein Benutzer sich mit seiner Benutzerkennung und seinem Passwort via ssh anmeldet, oder ob er für die Anmeldung einen ssh-key verwendet.

ssh-Anmeldung mit Benutzerkennung und Passwort

Meldet sich ein Benutzer mit seiner Benutzerkennung und seinem Passwort an einem Linux-System wie z.B. penguin2.uni-koblenz.de (aka linux) an, ist der Ablauf nicht anders als bei einer lokalen Anmeldung. Bei der Authentifizierung überprüft der Zielrechner mit Hilfe des Kerberos-Servers, ob die Anmeldung korrekt war (Benutzer ist bekannt und das Passwort ist korrekt) und stellt in diesem Fall ein Kerberos-Ticket für den sich gerade anmeldenden Benutzer aus. Dadurch ist der Zugriff z.B. auf das  Home-Verzeichnis und andere via NFS4 verfügbaren Verzeichnisse, auf die der Benutzer zumindest ein Leserecht hat über NFS4 problemlos möglich.

 

ssh Anmeldung mit Hilfe eines ssh-keys

Mit Hilfe von ssh-keys ist es möglich, die Anmeldung an einem entfernen System sicherer zu machen, als das bei der einfachen Benutzer/Passwort Authentifizierung möglich ist,  Der Grund dafür ist, das der öffentliche Teil eines kryptographischen Schlüssel einmalig zum Zielsystem kopiert werden muß (ssh-copy-id). Dessen Gegenstück, der private Schlüssel muß  lokal auf dem System liegen, von dem aus sich der Benutzer an dem entfernten Linux-System anmelden möchte. Dies bedeutet, das eine Anmeldung nur dann möglich ist, wenn man auf dem lokalen System über den privaten Teil des eigenen Schlüssel verfügt und auf dem Zielsystem der öffentliche Teil abgelegt ist.  Angreifer von außen haben aber in den Regel weder  auf den Privaten, noch auf den öffentlichen Schlüssel Zugriff, was eben zu einer höheren Sicherheit bei der Verwendung von ssh im Vergleich zur Benutzer/Passwort Authentifizierung führt. Das Erraten oder Ausspionieren eines Passworts reicht in diesem Fall nicht aus, um sich unberechtigt anmelden zu können.

Die Schlüssel-gestützte Anmeldung kann passwortlos erfolgen oder der Schlüssel wird  mit einem Passwort versehen, das dann bei der Anmeldung neben dem Vorhandensein und der Korrektheit des Schlüssels zusätzlich geprüft wird.

Wo aber liegt hier die Verbindung von ssh und NFS4? Die Verbindung liegt darin, das ssh-Schlüssel in Dateien gespeichert sind und ssh diese Dateien im Home-Verzeichnis des jeweiligen Benutzers ablegt. Das führt zu einem Henne-Ei Problem. Möchte sich ein Benutzer  mittels eines ssh-Schlüssels von einem lokalen Rechner an dem er sitzt auf einem Linux-System an der Uni anmelden, muß ja überprüft werden, ob der private, lokale liegende Schlüssel und der öffentliche, im Home-Verzeichnis des Benutzers an der Uni liegende  Schlüssel zusammen passen und die Anmeldung somit erfolgreich ist. Daher muß ssh auf dem Zielsystem auf die Datei zugreifen können, die den öffentlichen Schlüssel enthält. Diese Datei  liegt im Homeverzeichnis des Benutzer. Darauf ist der Zugriff wegen der Security-Eigenschaften von NFS4  aber erst dann möglich, wenn der Benutzer sich erfolgreich gegenüber dem Kerberos-Server authentifiziert hat. Hier beißt sich die Katze also in den Schwanz.

Der erste Anmeldeversuch

Eine Anmeldung via ssh-Schlüssel ist an einem Linux-System der Uni nicht direkt möglich, da die ssh schon vor der Anmeldung auf die ssh-Schlüssel-Dateien Zugriff haben müßte, NFS4 aber Zugriff auf Dateien eines Benutzers erst dann erlaubt, wenn dieser sich bereits erfolgreich authentifiziert hat.  Der Effekt nach außen ist, das die ssh einfach auf die Benutzer/Passwort-Authentifizierung zurück fällt und nach einem Passwort fragt.

Weitere Anmeldeversuche

Anders sieht es bei einem weiteren Anmeldeversuch zum gleichen Zielrechner unter Verwendung eines  ssh-Schlüssels  aus. War die erste Anmeldung mittels Benutzerkennung und Passwort erfolgreich, hat der Benutzer automatisch ein Kerberos-Ticket für den NFS4-Zugriff erhalten. Dieses Ticket wird immer in einer Datei unter /tmp/krb5cc_<uid>  des Zielrechners abgelegt und ist minimal für 10 Stunden gültig. Bei einem weiteren  Anmeldeversuch mit Hilfe von ssh-Schlüsseln, ist ssh auf dem Zielsystem  jetzt in der Lage die benötigte Schlüsseldatei im Home-Verzeichnis des Benutzers zu lesen, weil ja das dafür notwendige Kerberos-Ticket bereits unter /tmp/ vorliegt. Mit Hilfe des Kommando klist kann man jederzeit nachschauen, wie lange das eigene Kerberos-Ticket noch gültig ist. In aller Regel ist diese Frist länger als 10h, da das Ticket automatisch bis maximal 1 Woche verlängert werden kann.

Wer aus Sicherheitsgründen dafür sorgen möchte möchte, das das Kerberos Ticket beim Abmelden vom System gelöscht wird kann das kdestroy-Kommando nutzen.  Für Nutzer der bash kann /usr/lib/mit/bin/kdestroy z.B. in die Datei .bash_logout eingetragen werden, wo es bei der Abmeldung vom System automatisch ausgeführt wird. Wird eine andere Shell (csh, tcsh) verwendet, muß in den Manual-Seiten der Shell  nach der entsprechenden-Datei gesucht werden, die beim Abmelden vom System ausgeführt wird.

Passwortfreies ssh-login zwischen zwei Rechnern mit Kerberos

Möchte man sich ohne die Eingabe eines Passworts mittels ssh von einem lokalen auf einen anderen Rechner an der Uni anmelden, sind wie gerade beschrieben ssh-Schlüssel nur eingeschränkt verwendbar.

Eine Alternative ist die rein Kerberos-basierte ssh-Authentifizierung (GSSAPIAuthentication). Diese Methode funktioniert nur, wenn der Lokale und der Zielrechner eine Kerberos-basierte Authentifizierung im gleichen Kerberos-Realm ausführen können. Daher wäre es z.B. möglich von einem unter Linux-laufenden Rechner in den Rechner-Pools eine passwortfreie Verbindung mit dem Rechner penguin2.uni-koblenz.de durchzuführen. Nicht möglich ist hingegen das passwortfreie Anmelden via ssh von einem Uni-externen Rechner aus, da dieser nicht Teil des Kerberos-Realms an der Uni ist.

Das passwortfreie Anmelden via ssh auf Basis einer Kerberosauthentifizierung erfolgt mit der Option -K  (großes K), z.B:

$ ssh -K penguin2.uni-koblenz.de