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.