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 Instrument, aber man darf seine Unzulänglichkeiten nicht außer Acht lassen, insbesondere wo es um Sicherheitsangelegenheiten geht: alle Daten laufen im Klartext über das Netzwerk (ein Sniffer kann sie abfangen); der Server verhängt Zugangsbeschränkungen aufgrund der IP-Adresse eines Benutzers (die vorgetäuscht sein kann); und schließlich kann, wenn einem Client-Rechner Zugriff auf eine falsch konfigurierte NFS-Freigabe gewährt wird, der Root-Benutzer des Clients auf alle Dateien dieser Freigabe zugreifen (selbst auf die, die anderen Benutzern gehören), da der Server dem Benutzernamen vertraut, den er vom Client erhält (dies ist ein historisches Handicap des Protokolls).

11.4.1. NFS absichern

Da NFS der Information vertraut, die es vom Netzwerk erhält, muss unbedingt sichergestellt sein, dass sich nur die Rechner, die es benutzen dürfen, mit den verschiedenen erforderlichen RPC-Servern verbinden können. 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.
Weitere RPC-Dienste können erforderlich sein, damit NFS optimal funktioniert, einschließlich rpc.mountd, rpc.statd und lockd. Jedoch verwenden diese Dienste standardmäßig zufällige Ports (vom portmapper zugewiesen), wodurch es schwierig ist, Datenverkehr, der diese Dienste zum Ziel hat, zu filtern. Die Falcot Corp. Administratoren haben die unten beschriebene Problemumgehung gefunden.
Die beiden ersten der oben genannten Dienste werden durch Programme auf Anwendungsebene umgesetzt, gestartet durch /etc/init.d/nfs-kernel-server beziehungsweise /etc/init.d/nfs-common. Sie stellen Konfigurationsoptionen zur festen Einstellung bestimmter Ports bereit; die Dateien, die zur Festlegung dieser Optionen geändert werden müssen, sind /etc/default/nfs-kernel-server und /etc/default/nfs-common.
Beispiel 11.23. Die Datei /etc/default/nfs-kernel-server
# Number of servers to start up
RPCNFSDCOUNT=8

# Options for rpc.mountd
RPCMOUNTDOPTS="-p 2048"

Beispiel 11.24. Die Datei /etc/default/nfs-common
# Options for rpc.statd.
#   Should rpc.statd listen on a specific port?
#   If so, set this variable to a statd argument like: "--port 1000".
STATDOPTS="-p 2046 -o 2047"

# Are you _sure_ that your kernel does or does not need a lockd daemon?
# If so, set this variable to either "yes" or "no".
NEED_LOCKD=

Sobald diese Veränderungen vorgenommen und die Dienste neu gestartet sind, verwendet rpc.mountd Port 2048; rpc.statd wartet an Port 2046 auf Anfragen und benutzt Port 2047 für ausgehende Verbindungen.
Der Dienst lockd wird durch einen Kernel-Thread (einen leichtgewichtigen Prozess) gehandhabt; dieses Leistungsmerkmal ist als Modul in Debian-Kernel eingebaut. Das Modul bietet zwei Optionen, um die dauerhafte Einstellung desselben Ports zu ermöglichen, nlm_udpport und nlm_tcpport. Damit diese Optionen konsequent benutzt werden, muss eine Datei namens /etc/modprobe.d/lockd wie die folgende vorhanden sein:
Beispiel 11.25. Die Datei /etc/modprobe.d/lockd
options lockd nlm_udpport=2045 nlm_tcpport=2045

Sobald diese Parameter eingestellt sind, wird es einfacher, von der Firewall aus den Zugang zum NFS-Dienst in fein eingestellter Weise durch das Filtern des Zugangs zu den Ports 111 und 2045 bis 2049 (sowohl UDP als auch TCP) zu kontrollieren.