Wie man NFS-Client und -Server unter Ubuntu 20.04 installiert

Netzwerk-Dateisystem oder kurz NFS ist ein verteiltes Dateisystemprotokoll, das es Ihnen erlaubt, entfernte Verzeichnisse auf Ihrem Server zu mounten. NFS ermöglicht es Ihnen, auf Dateien und Ordner von einem anderen Server oder Client aus zuzugreifen. Sie können von mehreren Clients oder entfernten Systemen über ein Netzwerk auf diesen Server schreiben. Diese Technologie gibt Ihnen die Flexibilität, eine Ressource über mehrere Systeme hinweg gemeinsam zu nutzen.

In diesem Tutorial werden wir lernen, wie man einen NFS-Server einrichtet und wie man NFS-Freigaben auf einem Client mit Ubuntu 20.04 mountet.

Voraussetzungen

  • Zwei Ubuntu 20.04-Systeme. Jeder Server sollte einen Nicht-Root-Benutzer mit sudo-Berechtigungen und UFW-Firewall-Set haben.
  • Sie können sowohl den Server als auch den Client über ein privates Netzwerk einrichten. Für unser Tutorial werde ich host_ip verwenden, um die host_ip-Adresse zu bezeichnen, und client_ip, um auf die IP-Adresse des Clients zu verweisen.

Schritt 1 – NFS auf Server und Client installieren

Host

Wir müssen das nfs-kernel-serverPaket auf dem Host installieren, um Ihre Verzeichnisse freizugeben.

$ sudo apt update
$ sudo apt install nfs-kernel-server

Kunde

Für den Client installieren wir das nfs-commonPaket, das es dem Client erlaubt, das Host-Verzeichnis zu mounten, aber das Verzeichnis selbst nicht hosten kann.

$ sudo apt update
$ sudo apt install nfs-common

Schritt 2 – Freigabeverzeichnisse auf dem Host erstellen

Es gibt zwei Möglichkeiten, wie Sie dem Client Zugriff auf Verzeichnisse auf dem Host gewähren können. Standardmäßig erlaubt der NFS-Server keine Operationen, die sudo-Privilegien erfordern. Das bedeutet, dass Superuser auf dem Client keine Dateien als Root schreiben, die Eigentümerschaft neu zuweisen oder irgendwelche Aufgaben ausführen können, die erhöhte Berechtigungen erfordern.

Aber manchmal muss ein Client bestimmte Operationen auf dem Host ausführen, die zwar erhöhte Privilegien erfordern, für die er aber keinen Superuser-Zugriff benötigt.

Erste Methode

Dies ist die Standardmethode zur gemeinsamen Nutzung von Verzeichnissen. Sie erschwert es einem Root-Benutzer auf dem Client, mit erhöhten Rechten mit dem Host zu interagieren.

Zuerst erstellen Sie das Freigabeverzeichnis.

$ sudo mkdir /var/nfs/general -p

Wenn Sie irgendwelche Root-Operationen auf dem Client durchführen, dann übersetzt NFS diese in nobody:nogroupAnmeldeinformationen auf dem Host-Rechner. Daher müssen wir dem freigegebenen Verzeichnis die entsprechenden Eigentumsrechte geben.

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

Zweite Methode

Hier werden wir das Home-Verzeichnis des Gastgebers mit dem Kunden teilen. Dies wird den Root-Benutzern auf dem Client einen ordnungsgemäßen Zugriff auf den Host ermöglichen.

Da das Home-Verzeichnis bereits auf dem Host-Server existiert, brauchen wir es nicht zu erstellen. Es besteht auch keine Notwendigkeit, die Berechtigungen darauf zu ändern, da es mehrere Ausgaben für Benutzer auf dem Host-Rechner erzeugt.

Schritt 3 – Konfigurieren von NFS auf dem Host

Es ist an der Zeit, NFS für die Einrichtung von Freigaben zu konfigurieren.

Öffnen Sie die Datei /etc/exportsauf dem Host-Server.

$ sudo nano /etc/exports

Fügen Sie unten die folgenden Zeilen hinzu, jeweils eine für jedes Verzeichnis, das Sie freigeben.

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

Lassen Sie uns durch all diese Optionen gehen und was sie bedeuten.

  • rw: Dadurch erhält der Client-Benutzer Lese- und Schreibzugriff auf die Host-Verzeichnisse.
  • synchronisieren: Diese Option zwingt NFS, Änderungen zu schreiben, bevor es antwortet. Das bedeutet, dass NFS zuerst das Schreiben in das Host-Verzeichnis beendet und dann dem Klienten antwortet. Dies stellt sicher, dass der tatsächliche Zustand des Host-Servers wiedergegeben wird, kann aber die Geschwindigkeit der Dateioperationen verlangsamen.
  • no_subtree_check: Diese Option deaktiviert den Subtreecheck. Die Teilbaumprüfung ist eine Operation, bei der der Server bei jeder NFS-Anforderung prüfen muss, ob die Datei, auf die zugegriffen wird, vorhanden ist und sich im exportierten Baum befindet. Diese Operation verursacht Probleme, wenn die Dateien, auf die von einem Client zugegriffen wird, umbenannt werden. Daher ist es in den meisten Fällen am besten, sie deaktiviert zu lassen. Sie hat einige leichte Auswirkungen auf die Sicherheit, kann aber die Zuverlässigkeit verbessern.
  • no_root_squash: Standardmäßig übersetzt NFS alle Operationen, die vom Client als root ausgeführt werden, in einen nicht privilegierten Benutzer auf dem Server. Dies geschieht mit der Absicht, die Sicherheit zu verbessern. Diese Option deaktiviert dieses Verhalten für bestimmte Freigaben.

Wenn Sie fertig sind, schließen Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie den NFS-Server neu, um die Änderungen zu übernehmen.

$ sudo systemctl restart nfs-kernel-server

Schritt 4 – Konfigurieren der Host-Firewall

Die beste Praxis bei NFS besteht darin, es speziell für die IP-Adresse jedes Clients separat zu aktivieren, anstatt den Zugriff darauf von überall her zuzulassen.

NFS verwendet Port 2049. Aktivieren Sie den Zugriff für NFS durch den folgenden Befehl.

$ sudo ufw allow from client_ip to any port nfs

Überprüfen Sie den Status zur Verifizierung.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                 
2049                       ALLOW       167.100.34.78        
OpenSSH (v6)               ALLOW       Anywhere (v6)

Schritt 5 – Mount-Punkte auf dem Client erstellen

Jetzt, da unser Host-Rechner konfiguriert ist, ist es an der Zeit, den Client einzurichten.

Erstellen Sie auf dem Client zwei Verzeichnisse für Mounts.

$ sudo mkdir -p /nfs/general
$ sudo mkdir -p /nfs/home

Nachdem wir nun alles auf der Seite des Hosts eingestellt haben, können wir die Freigaben über die IP-Adresse des Hosts mounten.

$ sudo mount host_ip:/var/nfs/general /nfs/general
$ sudo mount host_ip:/home /nfs/home

Sie können mit dem folgenden Befehl überprüfen, ob sie erfolgreich gemountet wurden.

$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
udev                            448M     0  448M   0% /dev
tmpfs                            99M  664K   98M   1% /run
/dev/vda1                        25G  3.2G   21G  14% /
tmpfs                           491M     0  491M   0% /dev/shm
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                           491M     0  491M   0% /sys/fs/cgroup
tmpfs                            99M     0   99M   0% /run/user/1000
123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home

Sie können die beiden eingebundenen Aktien am Ende der Liste sehen. Da beide von demselben Dateisystem gemountet wurden, zeigen sie die volle Plattennutzung und nicht die tatsächliche Nutzung der gemounteten Verzeichnisse an.

Um zu sehen, wie viel Platz unter jeder Montierung tatsächlich genutzt wird, verwenden Sie den folgenden Befehl.

$ du -sh /nfs/general
36K     /nfs/general

Schritt 6 – NFS-Freigabe testen

Erstellen Sie eine Testdatei für die /var/nfs/generalFreigabe.

$ sudo touch /nfs/general/general.test

Überprüfen Sie seine Eigentümerschaft.

$ ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test

Es wurde mit den Standard-NFS-Optionen gemountet, und da wir die Datei unter Verwendung von root auf dem Client-Rechner erstellt haben, wurde die Eigentümerschaft auf dem Host übertragennobody:nogroup. Hier kann der Client-Benutzer keine administrativen Aufgaben auf dem Rechner des Hosts ausführen.

Erstellen Sie eine Testdatei in der Freigabe /nfs/home`.

$ sudo touch /nfs/home/home.test

Überprüfen Sie die Eigentumsverhältnisse.

$ ls -l /nfs/home/home.test
-rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test

Da wir hier die Testdatei mit Root vom Client-Rechner aus erstellt haben, blieb das Eigentum auf dem Host-Rechner erhalten. Das lag daran, dass wir das no_root_squashFlag, das den Benutzer root auf dem Client-Rechner erlaubte, auch als Root-Benutzer auf dem Host-Rechner verwendet haben.

Schritt 7 – NFS-Freigaben während des Bootens einbinden

Diese Mounts werden nicht beibehalten, sobald Sie den Client-Rechner hochfahren. Um sie dauerhaft zu machen, müssen wir die /etc/fstabDatei bearbeiten.

Öffnen Sie die /etc/fstabDatei zum Bearbeiten.

$ sudo nano /etc/fstab

Fügen Sie die folgenden Zeilen unten in die Datei ein. Jede Zeile entspricht jedem Verzeichnis, das beim Booten eingebunden werden soll.

. . .
host_ip:/var/nfs/general    /nfs/general   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

Um mehr über diese Optionen zu erfahren, lesen Sie die Man Page von nfs.

$ man nfs

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie den Server neu, um die Mounts zu überprüfen.

$ sudo reboot

Melden Sie sich beim Client-Server an und überprüfen Sie, ob die Mounts vorhanden sind.

$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
udev                            448M     0  448M   0% /dev
tmpfs                            99M  664K   98M   1% /run
/dev/vda1                        25G  3.2G   21G  14% /
tmpfs                           491M     0  491M   0% /dev/shm
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                           491M     0  491M   0% /sys/fs/cgroup
tmpfs                            99M     0   99M   0% /run/user/1000
123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home

Schritt 8 – NFS-Freigaben aushängen

Wenn Sie keine NFS-Einhängungen benötigen, können Sie diese mit dem folgenden Befehl aushängen.

$ sudo umount /nfs/home
$ sudo umount /nfs/general

Ein häufiger Fehler ist es, statt dessen zu verwendenunmount, umountwelches der eigentliche Befehl ist.

Überprüfen Sie, ob sie ordnungsgemäß ausgehängt wurden.

$ df -h
Filesystem                      Size  Used Avail Use% Mounted on
udev                            448M     0  448M   0% /dev
tmpfs                            99M  664K   98M   1% /run
/dev/vda1                        25G  3.2G   21G  14% /
tmpfs                           491M     0  491M   0% /dev/shm
tmpfs                           5.0M     0  5.0M   0% /run/lock
tmpfs                           491M     0  491M   0% /sys/fs/cgroup
tmpfs                            99M     0   99M   0% /run/user/1000

Sie müssen auch ihre Einträge aus der /etc/fstabDatei löschen, damit sie beim Booten nicht erneut gemountet werden. Sie können ihre Einträge auch einfach auskommentieren, indem Sie ein #Zeichen davor setzen, für den Fall, dass Sie die Mounts wiederverwenden müssen.

Schlussfolgerung

Hiermit schließen wir unser Tutorial ab, in dem wir gelernt haben, wie man NFS-Verbindungen auf einem Host-Rechner erstellt und wie man von verschiedenen Client-Rechnern aus auf sie zugreift. Wenn Sie irgendwelche Fragen haben, schießen Sie sie in den Kommentaren unten ab.

Das könnte dich auch interessieren …