So richtest du einen NFS-Mount unter Rocky Linux 8 ein

Network File System (NFS) ist ein verteiltes Dateisystemprotokoll, das es entfernten Hosts ermöglicht, Dateisysteme über ein Netzwerk einzubinden und Dateioperationen mit ihnen durchzuführen, als wären sie lokal eingebunden. Das ist besonders nützlich, wenn du Ressourcen von einem Server für mehrere Clients freigeben oder mehreren Clients erlauben willst, auf einen einzigen Speicherplatz zu schreiben.

In diesem Lernprogramm erfährst du, wie du NFS Server und NFS Clients auf Basis von Rocky Linux 8 installierst und konfigurierst. Dazu richten wir einen Host oder Server ein, um Dateien freizugeben, und einen Client, der über eine NFS-Einhängung auf die Host-Dateien zugreift.

Voraussetzungen

  • Zwei Rocky Linux 8 Server. Jeder von ihnen sollte über einen Nicht-Root-Benutzer mit sudo-Rechten verfügen.
  • Sowohl der Host als auch der Client sollten eine statische IP-Adresse haben. Du kannst sogar beide über ein privates Netzwerk einrichten. In unserem Lehrgang verwenden wir host_ip für die IP-Adresse des Hosts und client_ip für die IP-Adresse des Clients.

Schritt 1 – NFS auf dem Host und dem Client installieren

Host

Um NFS-Pakete zu installieren, musst du das Paket nfs-utils installieren. Es stellt einen Daemon für den NFS-Server und die dazugehörigen Werkzeuge bereit.

Installiere das Paket.

$ sudo dnf install nfs-utils

Aktiviere und starte den Dienst nfs-server. Die übrigen Dienste, die für die NFS-Montage und -Freigabe erforderlich sind, wie nfsd, nfs-idmapd, rpcbind, rpc.mountd, lockd, rpc.statd, rpc.quotad und rpc.idmapd starten automatisch mit.

$ sudo systemctl enable nfs-server --now

Überprüfe die Version der NFS-Installation.

$ sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

Die NFS-Versionen 3 und 4 sind standardmäßig aktiviert, während Version 2 deaktiviert ist. NFSv2 ist ziemlich alt und veraltet, deshalb siehst du das -ve-Zeichen vor dem Namen.

NFS speichert seine Konfigurationen in den Dateien /etc/nfsmount.conf und /etc/nfs.conf. Die Datei /etc/nfsmount.conf dient zur Konfiguration der NFS-Verbindungen, während /etc/nfs.conf den NFS-Daemon und die zugehörigen Werkzeuge konfiguriert. Die Standardeinstellungen sind für unseren Lehrgang ausreichend und müssen nicht geändert werden.

Client

Auf dem Client installierst du die Pakete nfs-utils und nfs4-acl-tools.

$ sudo dnf install nfs-utils nfs4-acl-tools

Schritt 2 – Erstellen der Freigabeverzeichnisse auf dem Host

Wir werden zwei Beispiele mit unterschiedlichen Konfigurationseinstellungen verwenden – eines mit einem allgemeinen Mount und eines mit der Freigabe des Home-Verzeichnisses des Hosts.

Per NFS gemountete Verzeichnisse sind nicht Teil des Clients. Daher kann NFS keine Aufgaben ausführen, die Superuser-Rechte für sie erfordern. Das bedeutet, dass der Klient den Eigentümer nicht ändern, nicht als Root-Benutzer darauf schreiben und keine hochrangigen Aufgaben ausführen kann. Es gibt jedoch Fälle, in denen ein vertrauenswürdiger Benutzer auf dem Client solche Aufgaben ausführen muss, ohne dass er Superuser-Zugriff auf dem Host benötigt. Der NFS-Server kann so konfiguriert werden, dass er dies zulässt, aber das birgt das Risiko, dass ein Client auf den Host zugreifen kann.

Arbeiten mit einem General Purpose Mount

Für unseren ersten Fall erstellen wir einen einfachen Mount, der das Standardverhalten von NFS verwendet, d.h. der Client kann keine Aufgaben ausführen, die Superuser-Rechte erfordern.

Erstelle ein Freigabeverzeichnis.

host:$ sudo mkdir /var/nfs/share -p

Dieses Verzeichnis gehört dem Root-Benutzer des Hosts, da wir es mit sudo erstellt haben.

host:$ ls -l /var/nfs
total 0
drwxr-xr-x. 2 root root 6 Dec 13 07:30 share

Aus Sicherheitsgründen übersetzt NFS alle Root-Operationen auf der Client-Seite in die nobody:nobody Anmeldedaten. Deshalb müssen wir sie auf der Hostseite anpassen.

host:$ sudo chown nobody:nobody /var/nfs/general

Arbeiten mit dem Home-Verzeichnis

In unserem zweiten Fall machen wir das Home-Verzeichnis auf dem Host für den Client verfügbar. Wir brauchen es nicht zu erstellen, da es bereits existiert. Wir müssen auch keine Berechtigungen ändern, da dies die Benutzer auf dem Host-Rechner betreffen würde.

Schritt 3 – Konfigurieren der NFS-Exporte auf dem Host

Öffne die Datei /etc/exports auf dem Host-Rechner, um sie zu bearbeiten.

host:$ sudo nano /etc/exports

Füge den folgenden Code in die Datei ein.

/var/nfs/share      client_ip(rw,sync,no_subtree_check)
/home               client_ip(rw,sync,no_root_squash,no_subtree_check)

Jedes Verzeichnis und seine Konfiguration müssen in einer eigenen Zeile stehen. Ersetze den Wert client_ip durch die tatsächliche IP-Adresse des Client-Rechners.

Gehen wir alle Optionen für NFS-Exporte durch.

  • rw – gibt dem Client-Rechner Lese- und Schreibzugriff auf das NFS-Volumen.
  • sync – diese Option zwingt NFS dazu, Änderungen auf den Datenträger zu schreiben, bevor es antwortet. Diese Option gilt als zuverlässiger. Allerdings verringert sie auch die Geschwindigkeit der Dateioperationen.
  • no_subtree_check – diese Option verhindert die Teilbaumprüfung, bei der der Host bei jeder Anfrage prüfen muss, ob die Datei mitsamt den Berechtigungen verfügbar ist. Dies kann auch zu Problemen führen, wenn eine Datei auf dem Host umbenannt wird, während sie auf dem Client noch geöffnet ist. Die Deaktivierung dieser Funktion verbessert die Zuverlässigkeit von NFS.
  • no_root_squash – Standardmäßig übersetzt NFS Anfragen von einem Root-Benutzer auf dem Client in einen nicht privilegierten Benutzer auf dem Host. Diese Option deaktiviert dieses Verhalten und sollte mit Bedacht eingesetzt werden, um dem Client den Zugriff auf den Host zu ermöglichen.

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Um die Freigaben zu exportieren, führe den folgenden Befehl aus.

host:$ sudo exportfs -arv
exporting client_ip:/home
exporting client_ip:/var/nfs/share
  • -a – diese Option bewirkt, dass alle Verzeichnisse exportiert werden.
  • -r – diese Option bewirkt, dass alle Verzeichnisse exportiert werden, indem eine neue Liste im Verzeichnis /var/lib/nfs/etab erstellt wird. Diese Option wird verwendet, um die Exportliste mit allen Änderungen zu aktualisieren, die an /etc/exports vorgenommen wurden.
  • -v – aktiviert die ausführliche Ausgabe.

Um alle exportierten Verzeichnisse aufzulisten, führe den folgenden Befehl aus. Er zeigt alle Optionen an, einschließlich der Standardoptionen, die nicht in der Datei /etc/exports angegeben wurden.

host:$ sudo exportfs -s
/var/nfs/share  client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/home  client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

Schritt 4 – Firewall auf dem Host konfigurieren

Rocky Linux verwendet die Firewalld Firewall. Überprüfe den Status der Firewall.

host:$ sudo firewall-cmd --state
running

Dieser zeigt an, dass sie erfolgreich läuft.

Die Firewall arbeitet mit verschiedenen Zonen, wobei die öffentliche Zone die Standardzone ist, die wir verwenden werden. Zeige alle aktiven Dienste und Ports der Firewall an.

host:$ sudo firewall-cmd --permanent --list-services

Es sollte die folgende Ausgabe erscheinen.

cockpit dhcpv6-client ssh

Als Nächstes müssen wir den Verkehr zu den erforderlichen NFS-Diensten mountd, nfs und rpc-bind zulassen. Außerdem müssen wir den Zugriff von der Client-IP erlauben. Wenn sich deine Clients und Hostserver im selben Subnetz befinden, musst du die IP-Adresse des Clients nicht hinzufügen.

host:$ sudo firewall-cmd --permanent --add-service=nfs
host:$ sudo firewall-cmd --permanent --add-service=rpc-bind
host:$ sudo firewall-cmd --permanent --add-service=mountd
host:$ sudo firewall-cmd --permanent --add-source=client_IP 

Lade die Firewall neu, um die Änderungen zu übernehmen.

host:$ sudo firewall-cmd --reload

Schritt 5 – Einhängepunkte und Verzeichnisse auf dem Client erstellen

Nachdem der NFS Server/Host konfiguriert ist, musst du im nächsten Schritt Einhängepunkte und Verzeichnisse auf dem Client einrichten. Du kannst den Befehl showmount auf dem Client ausführen, um die Liste der exportierten Dateisysteme auf dem Host zu überprüfen.

client:$ showmount -e host_ip
Export list for host_ip:
/home          host_ip
/var/nfs/share host_ip

Erstelle immer ein neues Verzeichnis als Einhängepunkte auf dem Client oder verwende ein bestehendes leeres Verzeichnis. Wenn sich in einem Verzeichnis, das du mountest, eine Datei befindet, wird sie versteckt.

Erstelle die Mount-Verzeichnisse.

client:$ sudo mkdir -p /nfs/share
client:$ sudo mkdir -p /nfs/home

Hänge die Freigaben unter Verwendung der IP-Adresse des Hosts ein.

client:$ sudo mount host_ip:/var/nfs/share /nfs/share
client:$ sudo mount host_ip:/home /nfs/home

Überprüfe, ob der Mount erfolgreich war.

client:$ df -h
Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   370M     0  370M   0% /dev
tmpfs                      405M     0  405M   0% /dev/shm
tmpfs                      405M   16M  389M   4% /run
tmpfs                      405M     0  405M   0% /sys/fs/cgroup
/dev/vda1                   25G  2.4G   23G  10% /
tmpfs                       81M     0   81M   0% /run/user/1000
host_ip:/var/nfs/share      25G  2.4G   23G  10% /nfs/share
host_ip:/home               25G  2.4G   23G  10% /nfs/home

Beide Freigaben werden von demselben Dateisystem gemountet. Daher zeigen sie die gleiche Festplattennutzung an.

Du kannst auch den Befehl mount verwenden, um dies zu überprüfen.

client:$ mount | grep nfs
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)

Schritt 6 – Test des NFS-Zugriffs

Testen der Allzweckfreigabe

Schreibe eine Testdatei in die Freigabe /var/nfs/share.

client:$ sudo touch /nfs/share/test.txt

Überprüfe die Eigentümerschaft.

client:$ ls -l /nfs/share/test.txt
-rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txt

Da wir diesen Datenträger mit den Standard-NFS-Einstellungen gemountet und die Datei auf dem Client mit sudo erstellt haben, liegt die Eigentümerschaft für die Datei standardmäßig bei nobody:nobody. Superuser des Clients können keine Verwaltungsaufgaben auf der Freigabe durchführen.

Testen der Home Directory-Freigabe

Schreibe eine Testdatei auf die Freigabe /nfs/home.

client:$ sudo touch /nfs/home/home.txt

Überprüfe die Eigentümerschaft.

client:$ ls -l /nfs/home/home.txt
-rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txt

Da wir die Option no_root_squash verwendet haben, konnte der Root-Benutzer des Clients auf der Freigabe selbst als Root agieren.

Schritt 7 – Die Einhängepunkte dauerhaft machen

NFS-Freigaben sind standardmäßig temporär und müssen beim Booten eingehängt werden. Wir können sie dauerhaft machen, indem wir die Datei /etc/fstab auf dem Client bearbeiten.

Öffne die Datei /etc/fstab zum Bearbeiten.

client:$ sudo nano /etc/fstab

Füge die folgenden Zeilen am Ende der Datei ein.

. . .
host_ip:/var/nfs/share      /nfs/share     nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Du kannst mehr über die oben aufgeführten Optionen herausfinden, indem du die folgenden Befehle ausführst.

client:$ man nfs
client:$ man mount

Wenn du sie online nachlesen möchtest, kannst du die Begriffe man nfs und man mount googeln, um mehr über diese Optionen zu erfahren.

Schritt 8 – NFS-Freigabe aushängen

Wenn du die entfernten Freigaben nicht mehr auf deinem System haben willst, kannst du sie mit dem Befehl umount aushängen. Beachte, dass der Befehl umount und nicht unmount heißt, was ein häufiger Fehler ist.

Entferne dich von den Freigaben und hänge sie aus.

client:$ cd ~
client:$ sudo umount /nfs/share
client:$ sudo umount /nfs/home

Wenn du die Freigaben beim Neustart nicht mehr brauchst, musst du die entsprechenden Einträge in der Datei /etc/fstab auskommentieren, indem du ihnen ein # Zeichen voranstellst.

Fazit

In diesem Lehrgang haben wir gelernt, wie man einen NFS-Hostserver erstellt und Verzeichnisse einhängt, die wir mit einem NFS-Client teilen. Wenn du das in einem privaten Netzwerk implementierst, sollte es keine Probleme geben, aber wenn du es in der Produktion einsetzt, solltest du daran denken, dass das Protokoll nicht verschlüsselt ist und du eine Authentifizierung einführen solltest, um deine Daten zu schützen.

Wenn du Fragen hast, schreibe sie unten in die Kommentare.

Das könnte dich auch interessieren …