Network File System oder NFS ist ein verteiltes Dateisystemprotokoll, das es entfernten Hosts ermöglicht, Dateisysteme über ein Netzwerk zu mounten und Dateioperationen auf ihnen auszuführen, als ob sie lokal gemountet wären. Dies ist besonders nützlich, wenn Sie Ressourcen von einem Server auf mehrere Clients verteilen oder mehreren Clients erlauben möchten, auf einen einzigen Speicherplatz zu schreiben.
In diesem Tutorial erfahren Sie, wie Sie den NFS-Server und die NFS-Clients basierend auf Rocky Linux 8 installieren und konfigurieren. Dazu richten wir einen Host oder Server zum Freigeben von Dateien und einen Client zum Zugreifen auf die Host-Dateien über ein NFS-Mount ein .
Voraussetzungen
- Zwei Rocky Linux 8-Server. Jeder von ihnen sollte einen Nicht-Root-Benutzer mit sudo-Berechtigungen haben.
- Sowohl der Host als auch der Client sollten eine statische IP-Adresse haben. Sie können sogar beide über ein privates Netzwerk einrichten. Für unser Tutorial verwenden wir host_ip um die IP-Adresse des Hosts und client_ip anzugeben um auf die IP-Adresse des Clients zu verweisen.
Schritt 1 – NFS auf Host und Client installieren
Host
Um NFS-Pakete zu installieren, müssen Sie die nfs-utils
installieren Paket. Es bietet einen Daemon für den NFS-Server und zugehörige Tools.
Installieren Sie das Paket.
$ sudo dnf install nfs-utils
Aktivieren und starten Sie den nfs-server
Service. Verbleibende Dienste, die für das Einhängen und Freigeben von NFS erforderlich sind, wie z. B. nfsd
, nfs-idmapd
, rpcbind
, rpc.mountd
, lockd
, rpc.statd
, rpc.quotad
und rpc.idmapd
automatisch mit starten.
$ sudo systemctl enable nfs-server --now
Überprüfen Sie 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 und Version 2 ist deaktiviert. NFSv2 ist ziemlich alt und veraltet, und daher können Sie das -ve sehen Zeichen davor.
NFS speichert seine Konfigurationen in /etc/nfsmount.conf
und /etc/nfs.conf
Dateien. Die /etc/nfsmount.conf
ist, NFS-Mounts zu konfigurieren, während /etc/nfs.conf
besteht darin, den NFS-Daemon und die zugehörigen Tools zu konfigurieren. Die Standardeinstellungen sind für unser Tutorial ausreichend und es sind keine Änderungen erforderlich.
Kunde
Installieren Sie auf dem Client die nfs-utils
und nfs4-acl-tools
Pakete.
$ sudo dnf install nfs-utils nfs4-acl-tools
Schritt2 – Erstellen Sie die Freigabeverzeichnisse auf dem Host
Wir werden zwei Beispiele mit unterschiedlichen Konfigurationseinstellungen verwenden - eines mit einem Allzweck-Mount und eines durch gemeinsame Nutzung des Home-Verzeichnisses des Hosts.
NFS-gemountete Verzeichnisse sind nicht Teil des Clients. Daher kann NFS keine Aufgaben ausführen, für die Superuser-Berechtigungen erforderlich sind. Dies bedeutet, dass der Client die Eigentümerschaft nicht ändern, als Root-Benutzer darauf schreiben oder Aufgaben auf hoher Ebene ausführen kann. Es gibt jedoch Fälle, in denen ein vertrauenswürdiger Benutzer auf dem Client solche Aufgaben ausführen muss, ohne dass Superuser-Zugriff auf den Host erforderlich ist. Der NFS-Server kann so konfiguriert werden, dass dies möglich ist, aber es besteht die Gefahr, dass ein Client auf den Host zugreifen kann.
Arbeiten mit einem Allzweck-Reittier
Für unseren ersten Fall erstellen wir einen einfachen Mount, der das standardmäßige NFS-Verhalten verwendet, was bedeutet, dass der Client keine Aufgaben ausführen kann, die Superuser-Privilegien erfordern.
Erstellen Sie ein Freigabeverzeichnis.
host:$ sudo mkdir /var/nfs/share -p
Der Root-Benutzer des Hosts wird dieses Verzeichnis besitzen, da wir sudo
verwendet haben um es zu erstellen.
host:$ ls -l /var/nfstotal 0drwxr-xr-x. 2 root root 6 Dez. 13 07:30 Aktie
NFS übersetzt alle Root-Operationen auf der Client-Seite in nobody:nobody
Zugangsdaten aus Sicherheitsgründen. Daher müssen wir sie auf der Hostseite abgleichen.
host:$ sudo chown niemand:nobody /var/nfs/general
Arbeiten mit dem Home-Verzeichnis
In unserem zweiten Fall stellen wir dem Client das Home-Verzeichnis auf dem Host zur Verfügung. Wir müssen es nicht erstellen, da es bereits existiert. Wir müssen keine Berechtigungen ändern, da dies Auswirkungen auf Benutzer auf dem Hostcomputer hätte.
Schritt 3 – NFS-Exporte auf dem Host konfigurieren
Öffnen Sie die Datei /etc/exports
auf dem Host-Rechner zum Bearbeiten.
host:$ sudo nano /etc/exports
Fügen Sie 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 separaten Zeile stehen. Ersetzen Sie die client_ip
Wert durch die tatsächliche IP-Adresse des Client-Rechners.
Lassen Sie uns alle Optionen für NFS-Exporte durchgehen.
- w - gibt dem Client-Rechner Lese- und Schreibzugriff auf das NFS-Volume.
- synchronisieren - Diese Option zwingt NFS, Änderungen auf die Festplatte zu schreiben, bevor es antwortet. Diese Option gilt als zuverlässiger. Es verringert jedoch auch die Geschwindigkeit von Dateioperationen.
- no_subtree_check - Diese Option verhindert die Unterbaumprüfung, ein Prozess, bei dem der Host prüfen muss, ob die Datei zusammen mit den Berechtigungen für jede Anfrage verfügbar ist. Es kann auch Probleme verursachen, wenn eine Datei auf dem Host umbenannt wird, während sie auf dem Client noch geöffnet ist. Durch Deaktivieren wird die Zuverlässigkeit von NFS verbessert.
- 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 vorsichtig verwendet werden, um dem Client den Zugriff auf den Host zu ermöglichen.
Wenn Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein wenn Sie dazu aufgefordert werden.
Führen Sie den folgenden Befehl aus, um die Freigaben zu exportieren.
host:$ sudo exportfs -arvexporting client_ip:/homeexporting 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 in
/var/lib/nfs/etab
erstellt wird Verzeichnis. Diese Option wird verwendet, um die Exportliste mit allen Änderungen zu aktualisieren, die an/etc/exports
vorgenommen wurden . - -v - aktiviert die ausführliche Ausgabe.
Führen Sie den folgenden Befehl aus, um alle exportierten Verzeichnisse aufzulisten. Es zeigt alle Optionen, einschließlich der Standardoptionen, die nicht in /etc/exports
angegeben wurden Datei.
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 – Konfigurieren der Firewall auf dem Host
Rocky Linux verwendet Firewalld Firewall. Überprüfen Sie den Status der Firewall.
host:$ sudo firewall-cmd --staterunning
Dies zeigt an, dass es erfolgreich ausgeführt wird.
Die Firewall arbeitet mit verschiedenen Zonen, und die öffentliche Zone ist die Standardzone, die wir verwenden werden. Listet alle Dienste und Ports auf, die auf der Firewall aktiv sind.
host:$ sudo firewall-cmd --permanent --list-services
Es sollte die folgende Ausgabe zeigen.
cockpit dhcpv6-client ssh
Als nächstes müssen wir den Datenverkehr zu den erforderlichen NFS-Diensten zulassen - mountd
, nfs
und rpc-bind
. Wir müssen auch den Zugriff von der Client-IP zulassen. Wenn sich Ihre Clients und Hostserver im selben Subnetz befinden, müssen Sie die IP-Adresse des Clients nicht hinzufügen.
host:$ sudo firewall-cmd --permanent --add-service=nfshost:$ sudo firewall-cmd --permanent --add-service=rpc-bindhost:$ sudo firewall-cmd --permanent --add -service=mountdhost:$ sudo firewall-cmd --permanent --add-source=client_IP
Laden Sie die Firewall neu, um die Änderungen zu übernehmen.
host:$ sudo firewall-cmd --reload
Schritt 5 – Erstellen von Mountpunkten und Verzeichnissen auf dem Client
Nachdem der NFS-Server/Host nun konfiguriert ist, besteht der nächste Schritt darin, Mount-Punkte und Verzeichnisse auf dem Client einzurichten. Sie können showmount
ausführen Befehl auf dem Client, um die Liste der exportierten Dateisysteme auf dem Host zu überprüfen.
client:$ showmount -e host_ipExportiere Liste für host_ip:/home host_ip/var/nfs/share host_ip
Erstellen Sie immer ein neues Verzeichnis als Einhängepunkte auf dem Client oder verwenden Sie ein vorhandenes leeres Verzeichnis. Wenn es eine Datei in einem Verzeichnis gibt, das Sie mounten, wird sie versteckt.
Erstellen Sie die Mount-Verzeichnisse.
client:$ sudo mkdir -p /nfs/shareclient:$ sudo mkdir -p /nfs/home
Hängen Sie die Freigaben mit der IP-Adresse des Hosts ein.
client:$ sudo mount host_ip:/var/nfs/share /nfs/shareclient:$ sudo mount host_ip:/home /nfs/home
Überprüfen Sie, ob das Mounten erfolgreich war.
client:$ df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 370M 0 370M 0% /devtmpfs 405M 0 405M 0% /dev/shmtmpfs 405M 16M 389M 4% /runtmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 2.4G 23G 10% /tmpfs 81M 0 81M 0% /run/user/1000host_ip:/var/nfs/share 25G 2.4G 23G 10% /nfs/sharehost_ip:/home 25G 2.4G 23G 10% / nfs/home
Beide Freigaben werden vom selben Dateisystem gemountet. Daher zeigen sie die gleiche Festplattennutzung.
Sie können auch den mount
verwenden Befehl zur Überprüfung.
client:$ mount | grep nfsrpc_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 – NFS-Zugriff testen
Allgemeine Freigabe testen
Schreiben Sie eine Testdatei nach /var/nfs/share
teilen.
client:$ sudo touch /nfs/share/test.txt
Überprüfen Sie die Inhaberschaft.
client:$ ls -l /nfs/share/test.txt-rw-r--r--. 1 niemand niemand 0 Dez. 13 08:08 /nfs/share/test.txt
Da wir dieses Volume mit den Standard-NFS-Einstellungen gemountet und die Datei auf dem Client mit sudo
erstellt haben , ist der Besitz der Datei standardmäßig nobody:nobody
. Client-Superuser können keine administrativen Aufgaben auf der Freigabe ausführen.
Testen der Home-Verzeichnisfreigabe
Schreiben Sie eine Testdatei nach /nfs/home
teilen.
client:$ sudo touch /nfs/home/home.txt
Überprüfen Sie die Inhaberschaft.
client:$ ls -l /nfs/home/home.txt-rw-r--r--. 1 root root 0 Dez. 13 08:09 /nfs/home/home.txt
Da wir den no_root_squash
verwendet haben Option erlaubte es dem Root-Benutzer des Clients, auf der Freigabe selbst als Root zu fungieren.
Schritt 7 – Machen Sie die Mount-Punkte dauerhaft
NFS-Freigaben sind standardmäßig temporär und müssen beim Booten gemountet werden. Wir können sie dauerhaft machen, indem wir /etc/fstab
bearbeiten Datei auf dem Client.
Öffnen Sie die Datei /etc/fstab
zum Bearbeiten.
client:$ sudo nano /etc/fstab
Fügen Sie die folgenden Zeilen am Ende der Datei ein.
Sie können mehr über die oben aufgeführten Optionen erfahren, indem Sie die folgenden Befehle ausführen.
client:$ man nfsclient:$ man mount
Wenn Sie sie online lesen möchten, können Sie den Begriff man nfs
googeln und man mount
um mehr über diese Optionen zu erfahren.
Schritt 8 – Unmounten der NFS-Freigabe
Wenn Sie die Remote-Mounts nicht mehr auf Ihrem System haben möchten, können Sie sie mit umount
aushängen Befehl. Beachten Sie, dass der Befehl umount heißt und nicht aushängen das ist ein häufiger Fehler.
Bewegen Sie sich aus den gemeinsam genutzten Bereitstellungen heraus und heben Sie die Bereitstellung auf.
client:$ cd ~client:$ sudo umount /nfs/shareclient:$ sudo umount /nfs/home
Wenn Sie die Freigaben beim Neustart nicht mehr benötigen, kommentieren Sie die entsprechenden Einträge in /etc/fstab
unbedingt aus Datei durch Einfügen eines #
Zeichen vor ihnen.
Schlussfolgerung
In diesem Tutorial haben wir gelernt, wie man einen NFS-Hostserver erstellt und Verzeichnisse damit einbindet, die wir mit einem NFS-Client geteilt haben. Wenn Sie es in einem privaten Netzwerk implementieren, sollte es kein Problem geben, aber wenn Sie es in der Produktion verwenden, sollten Sie daran denken, dass das Protokoll nicht verschlüsselt ist, und Sie sollten eine Authentifizierung implementieren, um Ihre Daten zu schützen.
Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.