Product SiteDocumentation Site

11.4. NFS-Dateiserver

NFS (Network File System) is a protocol allowing remote access to a filesystem through the network. All Unix systems can work with this protocol.
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.
In order to not give root access to the filesystem to any NFS client, all queries appearing to come from a root user are considered by the server as coming from the nobody user. This behavior corresponds to the root_squash option, and is enabled by default. The no_root_squash option, which disables this behavior, is risky and should only be used in controlled environments. If all users should be mapped to the user nobody, use all_squash. The anonuid=uid and anongid=gid options allow specifying another fake user to be used instead of UID/GID 65534 (which corresponds to user nobody and group nogroup).
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

As with other filesystems, integrating an NFS share into the system hierarchy requires mounting (and the nfs-common package). Since this filesystem has its peculiarities, a few adjustments were required in the syntaxes of the mount command and the /etc/fstab file.

Beispiel 11.19. Manuelles Einhängen mit dem Befehl mount

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

Beispiel 11.20. 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 NFS directory /shared/ 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.