Product SiteDocumentation Site

11.4. NFS-Dateiserver

NFS (Network File System) ist ein Protokoll, das den Fernzugriff auf ein Dateisystem über ein Netzwerk ermöglicht. Alle Unix-Systeme sind in der Lage, mit diesem Protokoll umzugehen; wenn Windows-Systeme beteiligt sind, muss stattdessen Samba eingesetzt werden.
NFS ist ein sehr nützliches Werkzeug, hat aber in der Vergangenheit unter vielen Einschränkungen gelitten, von denen die meisten mit Version 4 des Protokolls gelöst wurden. Der Nachteil ist, dass die neueste Version von NFS schwieriger zu konfigurieren ist, wenn Sie grundlegende Sicherheitsfunktionen wie Authentifizierung und Verschlüsselung nutzen wollen, da sie dafür auf Kerberos basiert. Ohne diese muss das NFS-Protokoll auf ein vertrauenswürdiges lokales Netzwerk beschränkt werden, da Daten unverschlüsselt über das Netzwerk gehen (ein Sniffer kann es abfangen) und Zugriffsrechte basierend auf der IP-Adresse des Clients vergeben werden (die gefälscht werden kann).

11.4.1. NFS absichern

Wenn Sie die Kerberos-basierten Sicherheitsfunktionen nicht verwenden, ist es wichtig sicherzustellen, dass nur die Maschinen, die NFS verwenden dürfen, eine Verbindung zu den verschiedenen erforderlichen RPC-Servern herstellen können, da das Basisprotokoll den vom Netzwerk empfangenen Daten vertraut. Die Firewall muss außerdem IP spoofing blockieren, um so einen externen Rechner daran zu hindern, sich als interner auszugeben, und der Zugang zu den passenden Ports muss auf die Rechner beschränkt bleiben, die Zugriff auf die NFS-Freigaben haben sollen.
Ältere Versionen des Protokolls erforderten andere RPC-Dienste, die dynamisch zugewiesene Ports verwendeten. Glücklicherweise werden bei NFS Version 4 nur Port 2049 (für NFS) und 111 (für den Portmapper) benötigt und sind somit einfach per Firewall zu sichern.

11.4.2. NFS-Server

Der NFS-Server ist Teil des Linux-Kernels; in den von Debian bereitgestellten Kerneln ist er als Kernel-Modul eingebaut. Falls der NFS-Server beim Hochfahren automatisch anlaufen soll, sollte das Paket nfs-kernel-server installiert werden; es enthält die entsprechenden Start-Skripten.
Die Konfigurationsdatei des NFS-Servers, /etc/exports, listet die Verzeichnisse auf, die über das Netzwerk zur Verfügung gestellt werden (exported). Zu jeder NFS-Freigabe wird nur den Rechnern Zugang gewährt, die auf dieser Liste stehen. Eine feiner eingestellte Zugangskontrolle kann durch einige Optionen erzielt werden. Die Syntax dieser Datei ist recht einfach:
/freizugebendes/verzeichnis rechner1(option1,option2,...) rechner2(...) ...
Beachten Sie, dass bei NFSv4 alle exportierten Verzeichnisse Teil einer einzigen Hierarchie sein müssen und dass das Wurzelverzeichnis dieser Hierarchie exportiert und mit der Option fsid=0 oder fsid=root identifiziert werden muss.
Jeder Rechner kann entweder durch seinen DNS-Namen oder seine IP-Adresse bestimmt werden. Ganze Rechnergruppen können auch festgelegt werden, indem entweder eine Syntax wie *.falcot.com oder ein IP-Adressbereich wie 192.168.0.0/255.255.255.0 oder 192.168.0.0/24 verwendet wird.
Verzeichnisse werden in der Standardeinstellung (oder durch die Option ro) schreibgeschützt bereitgestellt. Die Option rw ermöglicht Schreibzugriff. NFS-Clients nehmen typischerweise über einen Port Verbindung auf, der Administratorrechte erfordert (mit anderen Worten, unterhalb von 1024); diese Einschränkung kann mit der Option insecure aufgehoben werden (die Option secure ist stillschweigend eingestellt, kann aber auch ausdrücklich angegeben werden, wenn dies der Deutlichkeit halber erforderlich ist).
Standardmäßig beantwortet der Server eine NFS-Anfrage nur dann, wenn der gegenwärtige Plattenzugriff beendet ist (Option sync); dies kann durch die Option async abgestellt werden. Asynchrones Schreiben erhöht die Leistung ein wenig, es verringert jedoch die Zuverlässigkeit, da die Gefahr eines Datenverlusts besteht, falls der Server zwischen der Annahmebestätigung des Schreibauftrags und dem tatsächlichen Schreibvorgang auf der Festplatte abstürzt. Da der voreingestellte Wert (im Vergleich zur früheren Einstellung von NFS) kürzlich geändert wurde, empfiehlt es sich, ihn ausdrücklich einzustellen.
Um einem NFS-Client keinen Root-Zugriff auf das Dateisystem zu geben, werden alle Anfragen, die von einem Root-Benutzer zu kommen scheinen, vom Server so angesehen, als kämen sie vom Benutzer nobody. Dieses Verhalten entspricht der Option root_squash und ist standardmäßig aktiviert. Die Option no_root_squash, die dieses Verhalten abstellt, ist gefährlich und sollte nur in überwachten Umgebungen eingesetzt werden. Die Optionen anonuid=uid und anongid=gid ermöglichen es, anstelle von UID/GID 65534 (was dem User nobody und der Gruppe nogroup entspricht) einen anderen fingierten Benutzer anzugeben.
Mit NFSv4 können Sie die Option sec hinzufügen, um die gewünschte Sicherheitsstufe anzugeben: sec=sys ist der Standard ohne spezielle Sicherheitsmerkmale, sec=krb5 aktiviert nur die Authentifizierung, sec=krb5i fügt Integritätsschutz hinzu, und sec=krb5p ist die umfassendste Stufe, die Datenschutz (mit Datenverschlüsselung) enthält. Damit dies funktioniert, benötigen Sie ein funktionierendes Kerberos-Setup (dieser Service wird in diesem Buch nicht behandelt).
Weitere Optionen stehen zur Verfügung; sie sind auf der Handbuchseite exports(5) dokumentiert.

11.4.3. NFS-Client

Wie bei anderen Dateisystemen, so erfordert auch das Einbinden einer NFS-Freigabe in die Systemhierarchie, dass sie eingehängt wird. Da dieses Dateisystem seine Besonderheiten hat, waren einige Anpassungen in den Syntaxen des Befehls mount und der Datei /etc/fstab erforderlich.

Beispiel 11.22. Manuelles Einhängen mit dem Befehl mount

          # mount -t nfs4 -o rw,nosuid arrakis.internal.falcot.com:/shared /srv/shared

Beispiel 11.23. NFS-Eintrag in der Datei /etc/fstab

arrakis.internal.falcot.com:/shared /srv/shared nfs4 rw,nosuid 0 0
Der oben dargestellte Eintrag hängt beim Hochfahren des Systems das NFS-Verzeichnis /shared/ des Servers arrakis in das lokale Verzeichnis /srv/shared/ ein. Schreibzugriff ist erwünscht (daher der Parameter rw). Die Option nosuid ist eine Schutzmaßnahme, die jegliches setuid- oder setgid-Bit von Programmen, die auf der Freigabe gespeichert sind, entfernt. Falls die NFS-Freigabe nur zum Speichern von Dokumenten dienen soll, ist noexec eine weitere empfehlenswerte Option, die das Ausführen von auf der Freigabe gespeicherten Programmen verhindert. Beachten Sie, dass auf dem Server das Verzeichnis shared unterhalb des NFSv4-Root-Exports liegt (zum Beispiel /export/shared), es ist kein Top-Level-Verzeichnis.
Die Handbuchseite nfs(5) beschreibt alle Optionen näher.