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-server
Paket 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-common
Paket, 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:nogroup
Anmeldeinformationen 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/exports
auf 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/general
Freigabe.
$ 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_squash
Flag, 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/fstab
Datei bearbeiten.
Öffnen Sie die /etc/fstab
Datei 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
, umount
welches 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/fstab
Datei 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.