Login
Newsletter
Werbung

Mo, 19. April 2004, 00:00

shfs - Das sichere Netzwerkdateisystem

Der Artikel liefert eine Einführung in shfs, ein Netzwerkdateisystem, welches auf dem Server lediglich eine Bourne Shell oder Perl benötigt, dabei standardmäßig SSH zum Verbindungsaufbau verwendet und somit weitreichend einsetzbar ist, da es entfernte Verzeichnisse einfach über einen SSH-Account mounten kann. Anschließend setzt sich der Artikel mit Lösungen zur Ersetzung von NFS durch shfs auseinander.

Vorwort

Schon länger suchte ich nach einem Netzwerkdateisystem für mein Netzwerk. NFS konnte leider viele Anforderungen nicht erfüllen. So hat es normalerweise keine großartigen Authentifizierungsmöglichkeiten und die Abbildung der Besitzer und Gruppen zwischen Server und Client ist ohne einen Dienst wie NIS oft schwer korrekt zu halten. Viel störender noch fand ich jedoch die Tatsache, dass Programme, die auf ein gemountetes NFS-Verzeichnis zugriffen, einfach hängen blieben, wenn der NFS-Server gerade nicht erreichbar war. Dies ist zwar ein abschaltbares Verhalten, doch die Deaktivierung dessen birgt laut Manpage weitreichendere Probleme.

Auf der Suche nach einem Ersatz testete ich zunächst das Coda-Dateisystem, welches zunächst recht nett schien, da es auch bei getrennter Verbindung noch arbeiten konnte. Für den Einsatz in einem kleinen Netzwerk mit einem schwachen Server befand ich es jedoch komplett überdimensioniert, da es sehr hohe Anforderungen an den Server stellt und viel Kapazität zur Datenverwaltung benötigt. Nachdem ich kurz das Intermezzo-Dateisystem testete, kam ich zu shfs.

Was shfs ist

Bei SHFS handelt es sich um ein Netzwerkdateisystem, was einen Verbindungsaufbau ermöglicht, sobald es auf einem Server den Zugriff auf entweder eine Shell oder Perl erhalten kann. Dieser Zugriff geschieht standardmäßig über eine SSH-Verbindung, was noch zwei weitere Vorteile mit sich bringt:

  • Die Daten werden verschlüsselt übers Netzwerk übertragen.
  • Es steht eine Vielzahl sicherer Authentifizierungsmöglichkeiten zur Verfügung, wie zum Beispiel die Eingabe eines Passworts, die Verwendung von RSA/DSA-Schlüsseln oder die Authentifizierung durch PAM.

Anstelle von SSH kann außerdem jedes Programm verwendet werden, mit dem sich über Pipes eine Verbindung zur Shell/Perl der Gegenseite aufbauen lässt. Sowohl die Verwendung von Perl als auch der Shell bieten die gleichen Möglichkeiten, wobei die Perl-Mechanismen laut Aussagen der Entwickler schneller und robuster sind.

Aus diesen geringen Anforderungen an die Serverseite entstehen weitere Vorteile:

  • Fast ausnahmslos jedes System stellt eine Shell oder einen Perl-Interpreter zur Verfügung.
  • So kann von fast jedem Rechner jedes Verzeichnis gemountet werden (insofern Zugriffsberechtigung besteht), ganz gleich, um welches Betriebssystem es sich dort handelt.
  • Für die Einrichtung des Servers muss in den meisten Fällen gar nichts getan werden, weshalb es sehr einfach einzurichten ist.
  • Es wird kein zusätzliches Serverprogramm benötigt, welches mehr Potential für Sicherheitslücken schaffen könnte.

Um Zugriffe zu beschleunigen und die Netzwerklast gering zu halten, finden zahlreiche Caching-Methoden ihren Einsatz. Es gibt hier einerseits den Read-Write-Cache, der nicht bei jeder Anforderung des Dateisystems mit dem Server kommuniziert, da dies eine hohe Last verursachen würde, und den Directory-Cache, der wiederholte Verzeichniszugriffe beschleunigen soll.

Beim Mounten eines Netzwerkverzeichnisses über shfs erhält der Client die Dateiberechtigungen, die auf dem Server für den angemeldeten Benutzer gelten. Mountet man zum Beispiel das Verzeichnis rvb@schrebbel:/usr/, so erhält man die Berechtigungen, die rvb auf schrebbel für das Verzeichnis /usr hat. Es gibt jedoch noch eine alternative Abbildung der Rechte, Besitzer und Gruppen auf das lokale System. Mit dieser steht mit shfs ein kompletter Ersatz zu NFS zur Verfügung: die Benutzer, Gruppen und Rechte können vom Remote-System beibehalten werden. Für diese Methode ist jedoch der root-Zugriff auf den shfs-Server vonnöten.

Der Vorteil gegenüber der SSH-Unterstützung in GnomeVFS, dem FISH-KIOSlave (FISH = FIle transfer over SHell filesystem), der FISH-Unterstützung im Midnight Commander oder der von lftp liegt auf der Hand: Der Zugriff ist transparent und jede Anwendung kann ihn nutzen und von den Vorteilen des Caching profitieren. So ist ein einheitlicher Zugriff auf das Remote-Dateisystem gewährt, ohne dass die Applikation selbst Unterstützung für GnomeVFS (o.a.) implementiert. Meiner Beobachtung zufolge ist shfs auch zuverlässiger als die genannten Alternativen.

Der momentane Nachteil von shfs ist, dass man ein zusätzliches Modul im Kernel benötigt, welches sich aber nicht in dessen Standarddistribution befindet. Dies wird sich hoffentlich bald ändern, da ich bisher keine Probleme mit dem Einsatz von shfs bemerken konnte - garantieren kann ich jedoch für nichts.

Die Installation

Auf der Seite des Servers

Hier wird lediglich ein Server benötigt, der das Einloggen von Benutzern ermöglicht und diesem eine Shell oder Perl zur Verfügung stellt. Die Shell sollte dabei zur Bourne Shell kompatibel sein.

Auf der Seite des Clients

Sollten Sie den Standardkernel ihrer Distribution verwenden, ist es gut möglich, dass diese auch das shfs-Modul und die nötigen Programme in einem Paket anbietet. Für Debian GNU/Linux heißt das Paket, welches die Tools zum Mounten enthält, shfs-utils. Sollte Ihre Distribution weder Pakete für die Anwendungen noch für das Kernelmodul bereit stellen, benötigen Sie neben den Quellen dieser beiden noch den Kernel-Quellcode, der Ihrer aktuellen Konfiguration entspricht. Zur Compilierung des Moduls ist es ratsam, die gleiche Compilerversion wie zur Übersetzung des Kernels zu verwenden. Die Quellen des shfs-Moduls befinden sich auch im Debian-Paket shfs-source.

Insofern die Anforderungen erfüllt sind, sollte die Installation mit folgenden Schritten gelingen:

tar xvfz shfs-x.xx.tar.gz
make
make install
depmod -a
modprobe shfs

Mittels make deb, make rpm und make patch ist es auch möglich, ein Debian- oder RPM-Paket und einen Kernelpatch zu erstellen, die mit Hilfe von dpkg -i oder rpm -ivh installiert werden können.

Die Anwendung

Die prinzipielle Anwendung geschieht entweder durch das Kommando shfsmount oder durch das normale mount mittels

mount -t shfs Benutzer@Rechner:Verzeichnis Mountpoint

Danach wird, insofern nicht andere Authentifikationsmöglichkeiten konfiguriert wurden, nach dem Passwort für den Benutzer auf dem Rechner gefragt. Wie die Problematik der Passworteingabe für ein Mounten zur Bootzeit gelöst werden kann, werde ich später erklären.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung