nfs - network file system
deconfigurationserverfileservernfs-server

In die Datei /etc/exports oder in viele Dateien unter /etc/exports.d/*.conf werden Zeilenweise Freigaben eingetragen. Im folgenden Beispiel wird der mnt-Ordner exportiert, der mehrere Unterordner enthalten kann, in denen wegen der Option nohide auch Verzeichnisse gemountet sein dürfen:

# /etc/exports
/mnt 192.168.178.0/255.255.255.0(rw,no_subtree_check,nohide)

Außerdem kann als Option lt. man exports auch all_squash,anonuid=1000,anongid=1000 verwendet werden. Dadurch werden alle Änderungen per NFS in so fern anonymisiert, als das jede per NFS erstellte Datei die angegebe UID und GID bekommt. Nach jeder Änderung an der /etc/exports müssen die Änderungen noch in den Laufenden Deaemonprozess übernommen werden:

exportfs -av

Von einem anderen Rechner aus können die exports ausgelesen werden mittels:

showmount -e <NFS-Server>
nfsstat -m

Daemon

Damit der NFS-Server erreichbar ist, muss der Dienst gestartet werden.

systemctl start nfs-server
systemctl start nfs-lock
systemctl start nfs-idmap
systemctl start rpcbind

Damit das beim nächsten Systemstart automatisch passiert: Alle Befehle nochmal ausführen und start durch enable ersetzen. Falls beim Ausführen eines Befehls Fehler auftreten das start durch status ersetzen und herausfinden, woran das liegt. Überflüssige Leerzeichen in /etc/exports* sind oft Übeltäter.

Firewall

In der Firewall des Servers müssen ggf. Ports für nfs und rpc-bind und mountd freigegeben werden, falls der Rechner lokal erreichbar ist, aber nicht über das Netzwerk, also auf dem Client eine Fehlermeldung erscheint wie:

$ showmount -e [IP-ODER-NAME]
rpc mount export: RPC: Unable to receive; errno = No route to host

, während das auf dem NFS-Server so aussieht:

$ showmount -e localhost
Export list for localhost:
/home 192.168.178.0/255.255.255.0

SELinux

Der Zugriff auf Dateien wird von SELinux erst einmal pauschal verhindert. Eine Meldung wird auf dem Desktop des Fileservers angezeigt, wenn sealert installiert ist und ausgeführt wird. Das Programm befindet sich im Paket setroubleshoot-server. Um nfsd zu erlauben auf die Dateien zuzugreifen muss der SELinux-context-type geändert werden auf public_content_t oder public_content_rw_t. Festlegen kann man das auf vielerei Weisen, zum Beispiel:

# für einzelne Dateien...
chcon -t public_content_t /mnt/meine_datei.txt 
# Ordner mit Unterordnern (rekursiv)...
chcon -R -t public_content_t /mnt/

oder beim mounten ganzer Dateisysteme an der shell oder über die fstab:

mount -o context="system_u:object_r:public_content_rw_t:s0" /dev/sda1 /mnt/

Eine andere Möglichkeit besteht darin SELinux für nfs zu deaktivieren:

setsebool -P nfs_export_all_rw 1

fstab

Um die externe Festplatte (siehe oben) in der fstab an einem festen Ort einzubinden, muss ggf. der SELinux-Context so festgelegt werden, dass sie auch per NFS benutzt werden darf. Dazu dient public_content_rw:

# /etc/fstab
LABEL=ext_backup /mnt/ext_backup ext4 defaults,user,exec,nofail,context="system_u:object_r:public_content_rw_t:s0" 0 0

Den auf dem NFS-Server liegenden Ordner kann man auf einem Client fest in das Dateisystem einbinden mittels der fstab:

# /etc/fstab
nfs-server-name:/home /home nfs soft,intr,rw,dev,exec,acl,nosharecache,suid,async 0 0

Die Syntax ist also NAME DOPPELPUNKT ORDNER (so wie bei showmount -e angegeben), dann LEERZEICHEN, dann der Zielordner (hier lokales /home-Verzeichnis), dann ein paar Attribute, um das ganze zu tunen und schliesslich 0 0, weil das nur lokal interessant ist.

common problems and solutions

NFS stale file handle
use the umount -f switch if that makes sense for you
RPC: Program not registered when using showmount
nfs daemon is not running, restart it and watch for errors
top