So richten Sie ein NFS-Mount unter Ubuntu 18.04 ein

Einführung

NFS oder Network File System ist ein verteiltes Dateisystemprotokoll, das es ermöglicht, entfernte Verzeichnisse auf Ihrem Server zu mounten. Dadurch können Sie Speicherplatz an einem anderen Ort verwalten und von mehreren Clients aus auf diesen Speicherplatz schreiben. NFS bietet eine relativ standardisierte und performante Möglichkeit, auf entfernte Systeme über ein Netzwerk zuzugreifen und funktioniert gut in Situationen, in denen die gemeinsam genutzten Ressourcen regelmäßig zugänglich sein müssen.

In diesem Leitfaden erfahren Sie, wie Sie die für die NFS-Funktionalität erforderliche Software unter Ubuntu 18.04 installieren, NFS-Mounts auf einem Server und einem Client konfigurieren sowie die entfernten Freigaben ein- und aushängen.

Voraussetzungen

Für dieses Tutorial verwenden wir zwei Server, wobei einer einen Teil seines Dateisystems mit dem anderen teilt. Um dieses Tutorial abzuschließen, benötigen Sie:

  • Zwei Ubuntu 18.04 Server. Auf jedem dieser Server sollte ein nicht-root-Benutzer mit sudo-Berechtigungen eingerichtet sein, eine Firewall mit UFW konfiguriert sein und ein privates Netzwerk vorhanden sein, falls verfügbar.

In diesem Tutorial bezeichnen wir den Server, der seine Verzeichnisse freigibt, als den Host und den Server, der diese Verzeichnisse einbindet, als den Client. Wir verwenden die folgenden IP-Adressen als Platzhalter für die Werte Host und Client:

  • Host: 203.0.113.0
  • Client: 203.0.113.24

Ersetzen Sie diese IP-Adressen durch Ihre eigenen jeweiligen Host und Client IP-Adressen, wenn sie in Befehlen und Konfigurationsdateien auftauchen.

Schritt 1 — Herunterladen und Installieren der Komponenten

Beginnen Sie zunächst mit der Installation der erforderlichen Komponenten auf jedem Server.

Auf dem Host

Auf dem Host-Server installieren Sie das Paket nfs-kernel-server, das es Ihnen ermöglicht, Ihre Verzeichnisse freizugeben. Da dies die erste Operation ist, die Sie in dieser Sitzung mit apt durchführen, aktualisieren Sie Ihren lokalen Paketindex vor der Installation:

  1. sudo apt update

Anschließend installieren Sie das Paket:

  1. sudo apt install nfs-kernel-server

Nachdem diese Pakete installiert sind, wechseln Sie zum Client-Server.

Auf dem Client

Auf dem Client-Server installieren Sie ein Paket namens nfs-common, das NFS-Funktionalität ohne Serverkomponenten bereitstellt. Aktualisieren Sie erneut den lokalen Paketindex vor der Installation, um sicherzustellen, dass Sie aktuelle Informationen haben:

  1. sudo apt update

Dann installieren Sie das Paket:

  1. sudo apt install nfs-common

Jetzt, da beide Server die erforderlichen Pakete haben, können Sie mit der Konfiguration beginnen.

Schritt 2 — Erstellen der Freigabeverzeichnisse auf dem Host

Wir werden zwei separate Verzeichnisse freigeben, die unterschiedliche Konfigurationseinstellungen haben, um zwei wesentliche Möglichkeiten zu veranschaulichen, wie NFS-Mounts in Bezug auf den Superuser-Zugriff konfiguriert werden können.

Superbenutzer können alles überall auf ihrem System tun. NFS-angebundene Verzeichnisse gehören jedoch nicht zum System, auf dem sie eingebunden sind. Daher verweigert der NFS-Server standardmäßig die Ausführung von Operationen, die Superuser-Berechtigungen erfordern. Diese Standardbeschränkung bedeutet, dass Superbenutzer auf dem Client keine Dateien als root schreiben, Besitz neu zuweisen oder andere Superuser-Aufgaben auf dem NFS-Mount ausführen können.

Manchmal gibt es jedoch vertrauenswürdige Benutzer auf dem Client-System, die diese Aktionen auf dem eingebundenen Dateisystem ausführen müssen, aber keine Superbenutzerzugriff auf den Host benötigen. Sie können den NFS-Server so konfigurieren, dass dies möglich ist, obwohl dies ein Risikoelement einführt, da ein solcher Benutzer Root-Zugriff auf das gesamte Host-System erlangen könnte.

Beispiel 1: Exportieren eines allgemeinen Mounts

Im ersten Beispiel erstellen Sie einen allgemeinen NFS-Mount, der das Standardverhalten von NFS verwendet, um es einem Benutzer mit Root-Privilegien auf dem Client-Rechner schwierig zu machen, über diese Client-Superuser-Berechtigungen mit dem Host zu interagieren. Sie könnten so etwas verwenden, um Dateien zu speichern, die mit einem Content-Management-System hochgeladen wurden, oder um Platz für Benutzer zum gemeinsamen Nutzen von Projektdateien zu schaffen.

Zuerst erstellen Sie ein gemeinsames Verzeichnis:

  1. sudo mkdir /var/nfs/general -p

Da Sie es mit sudo erstellen, gehört das Verzeichnis dem Root-Benutzer des Hosts:

  1. ls -la /var/nfs/general
Output
total 8 drwxr-xr-x 2 root root 4096 Feb 7 23:21 . drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..

NFS übersetzt alle Root-Operationen auf dem Client aus Sicherheitsgründen in die Anmeldeinformationen nobody:nogroup. Daher müssen Sie die Verzeichnisberechtigungen ändern, um diesen Anmeldeinformationen zu entsprechen:

  1. sudo chown nobody:nogroup /var/nfs/general

Jetzt können Sie dieses Verzeichnis exportieren.

Beispiel 2: Exportieren des Home-Verzeichnisses

In unserem zweiten Beispiel soll das Benutzer-Home-Verzeichnis, das auf dem Host gespeichert ist, auf Client-Servern verfügbar gemacht werden, wobei vertrauenswürdigen Administratoren dieser Client-Server der Zugriff ermöglicht wird, den sie benötigen, um Benutzer bequem zu verwalten.

Um dies zu erreichen, exportieren Sie das /home-Verzeichnis. Da es bereits existiert, müssen Sie es nicht erstellen. Sie ändern auch nicht die Berechtigungen. Wenn Sie dies tun würden, könnte es zu einer Reihe von Problemen für jeden mit einem Home-Verzeichnis auf dem Host-Rechner führen.

Schritt 3 – Konfigurieren der NFS-Exports auf dem Host-Server

Als nächstes werden wir uns mit der NFS-Konfigurationsdatei befassen, um die Freigabe dieser Ressourcen einzurichten.

Öffnen Sie auf dem Host-Rechner die Datei /etc/exports in Ihrem bevorzugten Texteditor mit Root-Privilegien. Hier verwenden wir nano:

  1. sudo nano /etc/exports

Die Datei enthält Kommentare, die die allgemeine Struktur jeder Konfigurationszeile zeigen. Die Syntax ist wie folgt:

/etc/exports
directory_to_share    client(share_option1,...,share_optionN)

Sie müssen eine Zeile für jeden der Verzeichnisse erstellen, die Sie freigeben möchten. Da unser Beispiel Client die IP-Adresse 203.0.113.24 hat, sehen unsere Zeilen wie folgt aus. Stellen Sie sicher, dass Sie die IP-Adresse auf die Ihres Clients ändern:

/etc/exports
/var/nfs/general    203.0.113.24(rw,sync,no_subtree_check)
/home       203.0.113.24(rw,sync,no_root_squash,no_subtree_check)

Hier verwenden wir dieselben Konfigurationsoptionen für beide Verzeichnisse mit Ausnahme von no_root_squash. Lassen Sie uns überprüfen, was jede dieser Optionen bedeutet:

  • rw: Diese Option gibt dem Client-Computer Lese- und Schreibzugriff auf das Volume.
  • sync: Diese Option zwingt NFS, Änderungen vor dem Antworten auf die Festplatte zu schreiben. Dies führt zu einer stabileren und konsistenteren Umgebung, da die Antwort den tatsächlichen Zustand des entfernten Volumes widerspiegelt. Es verringert jedoch auch die Geschwindigkeit von Dateioperationen.
  • no_subtree_check: Diese Option verhindert die Überprüfung von Unterbäumen, bei der der Host überprüfen muss, ob die Datei tatsächlich noch im exportierten Baum für jede Anfrage verfügbar ist. Dies kann viele Probleme verursachen, wenn eine Datei umbenannt wird, während der Client sie geöffnet hat. In fast allen Fällen ist es besser, die Überprüfung von Unterbäumen zu deaktivieren.
  • no_root_squash: Standardmäßig übersetzt NFS Anfragen eines root-Benutzers remote in einen nicht privilegierten Benutzer auf dem Server. Dies wurde als Sicherheitsmerkmal gedacht, um zu verhindern, dass ein root-Konto auf dem Client das Dateisystem des Hosts als root verwendet. no_root_squash deaktiviert dieses Verhalten für bestimmte Freigaben.

Wenn Sie mit Ihren Änderungen fertig sind, speichern und schließen Sie die Datei. Wenn Sie nano verwenden, können Sie dies tun, indem Sie STRG + X drücken, dann Y und EINGABE. Anschließend müssen Sie den NFS-Server mit dem folgenden Befehl neu starten, um die Freigaben für die konfigurierten Clients verfügbar zu machen:

  1. sudo systemctl restart nfs-kernel-server

Bevor Sie die neuen Freigaben tatsächlich verwenden können, müssen Sie jedoch sicherstellen, dass der Datenverkehr zu den Freigaben durch Firewall-Regeln zugelassen wird.

Schritt 4 — Anpassen der Firewall auf dem Host

Zunächst überprüfen Sie den Firewall-Status, um zu bestätigen, ob er aktiviert ist, und prüfen dann, was derzeit erlaubt ist:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

Auf unserem System wird nur SSH-Verkehr zugelassen, daher müssen wir eine Regel für NFS-Verkehr hinzufügen.

Mit vielen Anwendungen können Sie sudo ufw app list verwenden und sie nach Namen aktivieren, aber nfs gehört nicht dazu. Da ufw jedoch auch /etc/services auf den Port und das Protokoll eines Dienstes überprüft, können Sie NFS trotzdem nach Namen hinzufügen. Bewährte Praxis empfiehlt, dass Sie die restriktivste Regel aktivieren, die den gewünschten Datenverkehr zulässt. Anstatt also den Datenverkehr von überall zu aktivieren, werden Sie spezifisch sein.

Verwenden Sie den folgenden Befehl, um den Port 2049 auf dem Host zu öffnen, und achten Sie darauf, Ihre Client-IP-Adresse zu ersetzen:

  1. sudo ufw allow from 203.0.113.24 to any port nfs

Sie können die Änderung überprüfen, indem Sie Folgendes ausführen:

  1. sudo ufw status

Sie sollten eine Liste des vom Port 2049 erlaubten Datenverkehrs in der Ausgabe erhalten:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

Dies bestätigt, dass UFW nur NFS-Datenverkehr auf Port 2049 von Ihrer Client-Maschine zulassen wird.

Schritt 5 — Erstellen von Einhängepunkten und Einhängen von Verzeichnissen auf dem Client

Da der Host-Server konfiguriert ist und seine Freigaben bereitstellt, werden Sie Ihren Client vorbereiten.

Um die entfernten Freigaben auf dem Client verfügbar zu machen, müssen Sie die Verzeichnisse auf dem Host, die Sie freigeben möchten, in leere Verzeichnisse auf dem Client einhängen.

Wenn sich Dateien und Verzeichnisse in Ihrem Mount-Punkt befinden, werden sie sofort verborgen, sobald Sie das NFS-Freigabe einbinden. Um den Verlust wichtiger Dateien zu vermeiden, stellen Sie sicher, dass das Verzeichnis, in das Sie einbinden, leer ist, falls es bereits existiert.

Erstellen Sie zwei Verzeichnisse für Ihre Einbindungen. Führen Sie den folgenden Befehl aus, um das erste zu erstellen::

  1. sudo mkdir -p /nfs/general

Dann führen Sie diesen Befehl aus, um das zweite zu erstellen::

  1. sudo mkdir -p /nfs/home

Jetzt, da Sie einen Ort haben, um die entfernten Freigaben zu platzieren und die Firewall geöffnet haben, können Sie die Freigaben einbinden, indem Sie die IP-Adresse Ihres Host-Servers verwenden, der in dieser Anleitung 203.0.113.0 ist:

  1. sudo mount 203.0.113.0:/var/nfs/general /nfs/general
  2. sudo mount 203.0.113.0:/home /nfs/home

Diese Befehle binden die Freigaben vom Hostcomputer auf die Client-Maschine ein. Sie können überprüfen, ob sie erfolgreich eingebunden wurden, auf verschiedene Arten. Dies können Sie mit einem mount– oder findmnt-Befehl überprüfen, aber df -h liefert eine übersichtlichere Ausgabe, die veranschaulicht, wie die Festplattennutzung für die NFS-Freigaben unterschiedlich angezeigt wird:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.6M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general 203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home

Beide der von Ihnen eingebundenen Freigaben erscheinen unten. Da sie vom selben Dateisystem eingebunden wurden, zeigen sie die gleiche Festplattennutzung an. Um zu überprüfen, wie viel Speicherplatz tatsächlich unter jedem Einbindungs-Punkt verwendet wird, verwenden Sie den Befehl zur Festplattennutzung du und den Pfad des Einbindungs-Punkts. Die Option -s liefert eine Zusammenfassung der Nutzung, anstatt die Nutzung für jede Datei anzuzeigen. Die Option -h gibt eine für Menschen lesbare Ausgabe:

  1. du -sh /nfs/home
Output
44K /nfs/home

Dies zeigt Ihnen, dass der gesamte Inhalt des Home-Verzeichnisses nur 44K des verfügbaren Speicherplatzes verwendet.

Schritt 6 — Überprüfung des NFS-Zugriffs

Als nächstes testen Sie den Zugriff auf die Freigaben, indem Sie etwas in jede davon schreiben.

Beispiel 1: Die Allgemeine Freigabe

Schreiben Sie zunächst eine Testdatei zur Freigabe /var/nfs/general:

  1. sudo touch /nfs/general/general.test

Überprüfen Sie dann deren Besitz:

  1. ls -l /nfs/general/general.test
Output
-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test

Weil Sie dieses Volume ohne Änderung des Standardverhaltens von NFS eingehängt haben und die Datei als Benutzer root der Client-Maschine über das sudo-Kommando erstellt haben, ist der Besitz der Datei standardmäßig auf nobody:nogroup gesetzt. Client-Superbenutzer können auf dieser NFS-eingehängten Freigabe keine typischen Administrationsaktionen wie das Ändern des Besitzers einer Datei oder das Erstellen eines neuen Verzeichnisses für eine Gruppe von Benutzern durchführen.

Beispiel 2: Die Heimverzeichnis-Freigabe

Zum Vergleich der Berechtigungen der Allgemeinen Freigabe mit der Heimverzeichnis-Freigabe erstellen Sie auf dieselbe Weise eine Datei in /nfs/home:

  1. sudo touch /nfs/home/home.test

Dann überprüfen Sie den Besitz der Datei:

  1. ls -l /nfs/home/home.test
Output
-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test

Sie haben home.test als root mit dem sudo-Befehl erstellt, genau wie Sie die Datei general.test erstellt haben. In diesem Fall gehört sie jedoch root, weil Sie das Standardverhalten außer Kraft gesetzt haben, als Sie die Option no_root_squash bei diesem Mount angegeben haben. Dadurch können Ihre root-Benutzer auf dem Client-Rechner als root agieren und die Verwaltung von Benutzerkonten wesentlich bequemer machen. Gleichzeitig bedeutet dies, dass Sie diesen Benutzern keine root-Zugriffsrechte auf dem Host geben müssen.

Schritt 7 — Einhängen der entfernten NFS-Verzeichnisse beim Booten

Sie können die entfernten NFS-Freigaben beim Booten automatisch einhängen, indem Sie sie zur /etc/fstab-Datei auf dem Client hinzufügen.

Öffnen Sie die folgende Datei mit Root-Berechtigungen in Ihrem bevorzugten Texteditor:

  1. sudo nano /etc/fstab

Fügen Sie am Ende der Datei eine Zeile für jede Ihrer Freigaben hinzu, wie folgt:

/etc/fstab
. . .
203.0.113.0:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home       /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Hinweis: Weitere Informationen zu den hier angegebenen Optionen finden Sie in der NFS-man-Seite. Sie können darauf zugreifen, indem Sie den folgenden Befehl ausführen:

  1. man nfs

Der Client-Server wird die entfernten Partitionen automatisch beim Booten mounten, obwohl es einige Momente dauern kann, um die Verbindung herzustellen und die Freigaben verfügbar zu machen.

Schritt 8 — Aushängen einer NFS-Remotefreigabe

Wenn Sie das entfernte Verzeichnis nicht mehr auf Ihrem System eingehängt haben möchten, können Sie es aushängen, indem Sie das Verzeichnis der Freigabe verlassen und das Aushängen durchführen.

Wechseln Sie zunächst in das Home-Verzeichnis:

  1. cd ~

Dann hängen Sie /nfs/home aus. Beachten Sie, dass der Befehl umount heißt und nicht unmount, wie Sie es vielleicht erwarten würden:

  1. sudo umount /nfs/home

Dann hängen Sie /nfs/general aus:

  1. sudo umount /nfs/general

Dadurch werden die entfernten Freigaben entfernt, sodass nur noch Ihr lokaler Speicher zugänglich ist:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 5.5M 94M 6% /run /dev/vda1 25G 1.3G 23G 6% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/vda15 105M 4.4M 100M 5% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

Wenn Sie außerdem verhindern möchten, dass sie beim nächsten Neustart erneut eingehängt werden, bearbeiten Sie die Datei /etc/fstab und löschen Sie die Zeile oder kommentieren Sie sie aus, indem Sie ein #-Zeichen am Anfang der Zeile platzieren. Sie können auch das automatische Einhängen verhindern, indem Sie die Option auto entfernen, was es Ihnen ermöglicht, es manuell einzuhängen.

Fazit

In diesem Tutorial haben Sie einen NFS-Host erstellt und einige wichtige NFS-Verhaltensweisen veranschaulicht, indem Sie zwei verschiedene NFS-Mounts erstellt haben, die Sie mit Ihrem NFS Client geteilt haben. Wenn Sie NFS in der Produktion implementieren möchten, ist es wichtig zu beachten, dass das Protokoll selbst nicht verschlüsselt ist. In Fällen, in denen Sie Dateien über ein privates Netzwerk teilen, mag dies kein Problem darstellen. In anderen Fällen wird jedoch ein VPN oder eine andere Art von verschlüsseltem Tunnel erforderlich sein, um Ihre Daten zu schützen. Beachten Sie, dass dies oft zu einer erheblichen Leistungsminderung führt. Wenn die Leistung ein Problem darstellt, sollten Sie SSHFS in Betracht ziehen.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04