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