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

If you don't use the Kerberos-based security features, it is vital to ensure that only the machines allowed to use NFS can connect to the various required RPC servers, because the basic protocol trusts the data received from the network. The firewall must also block IP spoofing so as to prevent an outside machine from acting as an inside one, and access to the appropriate ports must be restricted to the machines meant to access the NFS shares.
Ä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).
By default, the server only answers an NFS query when the current disk operation is complete (sync option); this can be disabled with the async option. Asynchronous writes increase performance a bit, but they decrease reliability since there is a data loss risk in case of the server crashing between the acknowledgment of the write and the actual write on disk. Since the default value changed recently (as compared to the historical value of NFS), an explicit setting is recommended.
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
The entry described above mounts, at system startup, the /shared/ NFS directory from the arrakis server into the local /srv/shared/ directory. Read-write access is requested (hence the rw parameter). The nosuid option is a protection measure that wipes any setuid or setgid bit from programs stored on the share. If the NFS share is only meant to store documents, another recommended option is noexec, which prevents executing programs stored on the share. Note that on the server, the shared directory is below the NFSv4 root export (for example /export/shared), it is not a top-level directory.
Die Handbuchseite nfs(5) beschreibt alle Optionen näher.