Network File System oder kurz NFS ist ein verteiltes Dateisystemprotokoll, mit dem Sie Remote-Verzeichnisse auf Ihrem Server einhängen können. NFS ermöglicht Ihnen den Zugriff auf Dateien und Ordner von einem anderen Server oder Client. 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 lernen wir, wie man einen NFS-Server einrichtet und NFS-Freigaben auf einem Client mit Ubuntu 20.04 einbindet.
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 zu bezeichnen Adresse und client_ip um auf die IP-Adresse des Clients zu verweisen.
Schritt 1 – NFS auf Server und Client installieren
Host
Wir müssen den nfs-kernel-server
installieren Paket auf dem Host, um Ihre Verzeichnisse freizugeben.
$ sudo apt update
$ sudo apt install nfs-kernel-server
Kunde
Für den Client installieren wir den nfs-common
Paket, das 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 – Share-Verzeichnisse 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 lässt der NFS-Server keine Operationen zu, die sudo-Berechtigungen erfordern. Das bedeutet, dass Superuser auf dem Client keine Dateien als Root schreiben, die Eigentümerschaft neu zuweisen oder Aufgaben ausführen können, die erhöhte Berechtigungen erfordern.
Aber manchmal muss ein Client bestimmte Operationen auf dem Host ausführen, die erhöhte Berechtigungen erfordern, aber keinen Superuser-Zugriff dafür benötigen.
Erste Methode
Dies ist die Standardmethode zum Freigeben von Verzeichnissen. Es erschwert es einem Root-Benutzer auf dem Client, mit erhöhten Rechten mit dem Host zu interagieren.
Erstellen Sie zuerst das Freigabeverzeichnis.
$ sudo mkdir /var/nfs/general -p
Wenn Sie Root-Operationen auf dem Client ausführen, übersetzt NFS diese in nobody:nogroup
Anmeldeinformationen auf dem Hostcomputer. Daher müssen wir dem gemeinsam genutzten Verzeichnis die entsprechenden Eigentumsrechte zuweisen.
$ sudo chown nobody:nogroup /var/nfs/general
Zweite Methode
Hier teilen wir das Host-Home-Verzeichnis mit dem Client. Dies ermöglicht Root-Benutzern auf dem Client den richtigen Zugriff auf den Host.
Da das Home-Verzeichnis bereits auf dem Host-Server vorhanden ist, müssen wir es nicht erstellen. Es besteht auch keine Notwendigkeit, die Berechtigungen darauf zu ändern, da es mehrere Probleme für Benutzer auf dem Host-Rechner schafft.
Schritt 3 – NFS auf dem Host konfigurieren
Es ist an der Zeit, NFS zu konfigurieren, um die Freigabe einzurichten.
Ö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 freigegebene Verzeichnis.
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)
Lassen Sie uns all diese Optionen und ihre Bedeutung durchgehen.
- w :Dies gibt dem Client Lese- und Schreibzugriff auf die Host-Verzeichnisse.
- synchronisieren :Diese Option zwingt NFS, Änderungen zu schreiben, bevor es antwortet. Dies bedeutet, dass NFS zuerst das Schreiben in das Hostverzeichnis abschließt und dann dem Client antwortet. Dies stellt sicher, dass der aktuelle Status des Hostservers wiedergegeben wird, kann jedoch die Geschwindigkeit von Dateivorgängen verlangsamen.
- no_subtree_check :Diese Option deaktiviert die Teilbaumprüfung. Die Teilbaumprüfung ist eine Operation, bei der der Server bei jeder NFS-Anfrage prüfen muss, ob die Datei, auf die zugegriffen wird, vorhanden ist und sich in der exportierten Baumstruktur befindet. Dieser Vorgang verursacht Probleme, wenn die Dateien, auf die ein Client zugreift, umbenannt werden. Daher ist es am besten, es in den meisten Fällen deaktiviert zu lassen. Es hat einige geringfügige 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, an 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 geben Sie Y ein wenn Sie dazu aufgefordert werden.
Starten Sie den NFS-Server neu, um die Änderungen zu übernehmen.
$ sudo systemctl restart nfs-kernel-server
Schritt 4 – Host-Firewall konfigurieren
Best Practice bei NFS ist es, es speziell für die IP-Adresse jedes Clients separat zu aktivieren, anstatt den Zugriff darauf von überall zuzulassen.
NFS verwendet Port 2049. Aktivieren Sie den Zugriff für NFS mit dem folgenden Befehl.
$ sudo ufw allow from client_ip to any port nfs
Überprüfen Sie den Status zur Bestätigung.
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 167.100.34.78
OpenSSH (v6) ALLOW Anywhere (v6)
Schritt 5 – Bereitstellungspunkte auf dem Client erstellen
Nachdem unser Host nun konfiguriert ist, ist es an der Zeit, den Client einzurichten.
Erstellen Sie zwei Verzeichnisse für Mounts auf dem Client.
$ 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 unter Verwendung der 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 beide gemounteten Freigaben am Ende der Liste sehen. Da beide von demselben Dateisystem gemountet wurden, zeigen sie die vollständige Festplattennutzung und nicht die tatsächliche Nutzung der gemounteten Verzeichnisse.
Verwenden Sie den folgenden Befehl, um zu sehen, wie viel tatsächlicher Speicherplatz unter jedem Mount verwendet wird.
$ du -sh /nfs/general
36K /nfs/general
Schritt 6 – NFS-Freigabe testen
Erstellen Sie eine Testdatei in /var/nfs/general
teilen.
$ sudo touch /nfs/general/general.test
Überprüfen Sie die Inhaberschaft.
$ ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test
Dies wurde mit den standardmäßigen NFS-Optionen gemountet, und da wir die Datei mit root vom Client-Rechner erstellt haben, wurde der Besitz auf dem Host auf nobody:nogroup
übertragen . Hier kann der Client-Benutzer keine Verwaltungsaufgaben auf dem Rechner des Hosts ausführen.
Erstellen Sie eine Testdatei für die Freigabe /nfs/home`.
$ sudo touch /nfs/home/home.test
Überprüfen Sie die Inhaberschaft.
$ 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 erstellt haben, wurde der Besitz auf dem Host-Rechner beibehalten. Das lag daran, dass wir no_root_squash
verwendet haben Flag, das Root-Benutzer auf dem Client-Rechner auch als Root-Benutzer auf dem Host-Rechner erlaubt.
Schritt 7 – NFS-Freigaben während des Bootvorgangs bereitstellen
Diese Mounts werden nicht beibehalten, wenn Sie den Client-Rechner booten. Um sie dauerhaft zu machen, müssen wir die /etc/fstab
bearbeiten Datei.
Öffnen Sie die /etc/fstab
Datei zum Bearbeiten.
$ sudo nano /etc/fstab
Fügen Sie die folgenden Zeilen am Ende der Datei ein. Jede Zeile entspricht jedem Verzeichnis, das beim Booten gemountet 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 Manpage von nfs
.
$ man nfs
Speichern Sie die Datei, indem Sie Strg + X drücken und geben Sie Y ein 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 prü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 – Unmounten von NFS-Freigaben
Sobald Sie NFS-Mounts nicht mehr benötigen, können Sie sie mit dem folgenden Befehl aushängen.
$ sudo umount /nfs/home
$ sudo umount /nfs/general
Ein häufiger Fehler ist die Verwendung von unmount
statt umount
das ist der eigentliche Befehl.
Stellen Sie sicher, dass 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 /etc/fstab
löschen Datei, damit sie beim Booten nicht neu gemountet werden. Sie können ihre Einträge auch einfach auskommentieren, indem Sie ein #
setzen Zeichen voran, falls Sie die Reittiere wiederverwenden müssen.
Schlussfolgerung
Damit ist unser Tutorial abgeschlossen, in dem wir gelernt haben, wie man NFS-Mounts auf einem Host-Rechner erstellt und wie man von verschiedenen Client-Rechnern darauf zugreift. Wenn Sie Fragen haben, schreiben Sie sie in die Kommentare unten.