Tutorial

Einrichten eines NFS Mount auf Ubuntu 20.04

UbuntuNetworkingUbuntu 20.04

Einführung

NFS oder Network File System ist ein verteiltes Dateisystem, das es Ihnen ermöglicht, remote Verzeichnisse auf Ihrem Server bereitzustellen. Auf diese Weise können Sie Speicherplatz an einem anderen Ort verwalten und in diesen Speicherplatz aus mehreren Clients schreiben. NFS bietet eine relativ gute Standardmöglichkeit, auf Remote-Systeme über ein Netzwerk zuzugreifen, und funktioniert gut in Situationen, in denen regelmäßig auf die geteilten Ressourcen zugegriffen werden muss.

In diesem Leitfaden erfahren Sie, wie wir die für NFS benötigte Software auf Ubuntu 20.04 installieren, zwei NFS Mounts auf einem Server und Client installieren und die Remotefreigaben hinzufügen und entfernen.

Voraussetzungen

Wir nutzen in diesem Tutorial zwei Server. Davon teilt einer einen Teil seines Dateisystems mit dem anderen. Um dem Tutorial zu folgen, benötigen Sie Folgendes:

  • Zwei Ubuntu 20.04-Server. Jeder dieser Server sollte über einen Nicht-root-Benutzer mit sudo-Berechtigungen, eine mit UFW eingerichtete Firewall und ein privates Netzwerk verfügen, sofern dies Ihnen zur Verfügung steht.

In diesem Tutorial verweisen wir auf den Server, der seine Verzeichnisse als Host teilt, und den Server, der diese Verzeichnisse als Client verbindet. Sie müssen die IP-Adresse für beide kennen. Nutzen Sie bei Bedarf die private Netzwerkadresse, sofern verfügbar.

In diesem Tutorial verweisen wir auf diese IP-Adressen durch die Platzhalter host_ip und client_ip. Ersetzen Sie bei Bedarf.

Schritt 1 – Herunterladen und Installieren der Komponenten

Wir beginnen mit der Installation der erforderlichen Komponenten auf jedem Server.

Auf dem Host

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

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

Sobald diese Pakete installiert sind, wechseln zum Client-Server.

Auf dem Client

Auf dem Client-Server müssen wir ein Paket namens nfs-common installieren, das NFS bereitstellt, ohne Server-Komponenten. Aktualisieren Sie erneut den lokalen Paketindex vor der Installation, um sicherzustellen, dass Ihnen aktuelle Informationen angezeigt werden:

  • sudo apt update
  • sudo apt install nfs-common

Nachdem beide Server über die erforderlichen Pakete verfügen, können wir die Konfiguration starten.

Schritt 2 – Erstellen der Freigabeverzeichnisse auf dem Host

Wir werden zwei separate Verzeichnisse mit verschiedenen Konfigurationseinstellungen freigeben, um zwei wesentliche Varianten zu zeigen, wie NFS-Verbindungen hinsichtlich des Superuser-Zugriffs konfiguriert werden können.

Superuser können auf ihrem System alles überall tun. NFS-verbundene Verzeichnisse sind jedoch nicht Teil des Systems, auf dem sie verbunden werden. Standardmäßig lehnt der NFS-Server die Ausführung von Operationen ab, die Superuser-Berechtigungen erfordern. Diese Standardbeschränkung bedeutet, dass Superuser auf dem Client keine Dateien als root schreiben, die Eigentümerschaft nicht neu zuweisen oder sonstige andere Superuser-Aufgaben auf der NFS-Verbindung ausführen können.

Manchmal gibt es jedoch vertrauenswürdige Benutzer auf dem Client-System, die diese Aktionen auf dem verbundenen Dateisystem ausführen müssen, aber keinen Superuser Zugriff auf den Host benötigen. Sie können den NFS-Server so konfigurieren, dass er dies erlaubt, obwohl ein Risikoelement eingeführt wird, da ein Benutzer root-Zugriff auf das gesamte Host-System erhalten könnte.

Beispiel 1: Exportieren einer Allzweck-Verbindung

Im ersten Beispiel erstellen wir eine Allzweck-NFS-Verbindung, die das Standard-NFS-Verhalten nutzt, das es einem Benutzer mit root-Berechtigungen auf dem Client-Computer erschwert, mit dem Host über diese Client-Superuser-Berechtigungen zu interagieren. Sie könnten etwas in dieser Art nutzen, um Dateien zu speichern, die über ein Content-Management-System hochgeladen wurden, oder um einen Platz für Benutzer zu erstellen, wo sie einfach Projektdateien teilen können.

Erstellen Sie zuerst das Freigabe-Verzeichnis:

  • sudo mkdir /var/nfs/general -p

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

  • ls -la /var/nfs/general
Output
drwxr-xr-x 2 root root 4096 May 14 18:36 .

NFS übersetzt alle root Operationen auf dem Client als Sicherheitsmaßnahme in die Berechtigungsdaten nobody:nogroup. Wir müssen daher die Verzeichniseigentümerschaft auf diese Berechtigungsdaten abstimmen.

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

Sie können dieses Verzeichnis nun exportieren.

Beispiel 2: Exportieren des Home-Verzeichnisses

In unserem zweiten Beispiel geht es darum, Benutzerhauptverzeichnisse, die auf dem Host gespeichert sind, auf Client-Servern zur Verfügung zu stellen, wobei vertrauenswürdige Administratoren dieser Client-Server der Zugriff genehmigt wird, den sie brauchen, um Benutzer einfach zu verwalten.

Dazu exportieren wir das Verzeichnis /home. Da es bereits vorhanden ist, müssen wir es nicht erstellen. Wir werden auch die Berechtigungen nicht ändern. Andernfalls könnte dies zu einer Reihe von Problemen für jeden mit einem Home-Verzeichnis auf dem Host-Computer führen.

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

Als Nächstes nehmen wir uns die NFS Konfigurationsdatei vor, um die Freigabe dieser Ressourcen einzurichten.

Öffnen Sie die Datei /etc/exports auf dem Host-Computer in Ihrem Texteditor mit root-Berechtigungen:

  • sudo nano /etc/exports

Die Datei enthält Kommentare, die die allgemeine Struktur der einzelnen Konfigurationszeilen zeigen. Die Syntax lautet wie folgt:

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

Wir müssen eine Zeile für jedes der Verzeichnisse erstellen, die wir freigeben möchten. Stellen Sie sicher, dass der hier gezeigte Platzhalter client_ip in Ihre tatsächliche IP-Adresse geändert wird:

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

Wir nutzen hier die gleichen Konfigurationsoptionen für beide Verzeichnisse mit Ausnahme von no_root_squash. Wir wollen uns ansehen, was jede dieser Optionen bedeutet:

  • rw: Diese Option gibt dem Client-Computer sowohl den Lese- als auch den Schreibzugriff auf das Laufwerk.
  • sync: Diese Option zwingt NFS, vor dem Antworten Änderungen auf die Festplatte zu schreiben. Dies führt zu einer stabileren und konsistenteren Umgebung, da die Antwort den tatsächlichen Zustand des entfernten Laufwerks widerspiegelt. Es reduziert jedoch auch die Geschwindigkeit der Dateioperationen.
  • no_subtree_check: Diese Option verhindert die Teilbaum-Prüfung, ein Prozess, bei dem der Host überprüfen muss, ob die Datei für jede Anfrage tatsächlich auch immer noch im exportierten Baum verfügbar ist. Dies kann bei der Umbenennung einer Datei viele Probleme verursachen, wenn der Client sie geöffnet hat. In fast allen Fällen ist es besser, die Teilbaum-Prüfung zu deaktivieren.
  • no_root_squash: Standardmäßig übersetzt NFS Anfragen von einem root-Benutzer remote in einen nicht berechtigten Benutzer auf dem Server. Dies war als Sicherheitsfunktion bestimmt, um zu verhindern, dass ein root-Konto auf dem Client das Dateisystem des Host als root verwendet. no_root_squash deaktiviert dieses Verhalten für bestimmte Freigaben.

Wenn Sie mit diesen Änderungen fertig sind, speichern und schließen Sie die Datei. Um die Freigaben den von Ihnen konfigurierten Clients dann zur Verfügung zu stellen, starten Sie den NFS-Server mit dem folgenden Befehl neu:

  • sudo systemctl restart nfs-kernel-server

Bevor Sie jedoch die neuen Freigaben tatsächlich nutzen können, müssen Sie sicher sein, dass der Verkehr zu den Freigaben durch Firewall-Regeln zugelassen ist.

Schritt 4 – Anpassen der Firewall auf dem Host

Wir wollen zuerst den Firewall-Status überprüfen, ob dieser aktiviert ist, und wenn ja, sehen, was derzeit zugelassen ist:

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

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

Bei vielen Anwendungen können Sie sudo ufw app list nutzen und sie nach dem Namen aktivieren, aber nfs gehört nicht dazu. Da ufw jedoch auch /etc/services für den Port und das Protokoll eines Dienstes überprüft, können wir auch weiterhin NFS nach dem Namen hinzufügen. Es wird empfohlen, die restriktivste Regel zu aktivieren, die den Datenverkehr, den Sie zulassen möchten, weiterhin erlaubt, statt Datenverkehr von überall her zuzulassen.

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

  • sudo ufw allow from client_ip to any port nfs

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

  • sudo ufw status

Sie sollten der zulässigen Verkehr von Port 2049 in der Ausgabe sehen:

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

Damit wird bestätigt, dass UFW nur NFS-Verkehr an Port 2049 von unserem Client-Computer zulassen wird.

Schritt 5 — Erstellen von Bereitstellungspunkten und Bereitstellen von Verzeichnissen auf dem Client

Nachdem der Host-Server konfiguriert ist und seine Freigaben bedient, bereiten wir unseren Client vor.

Um die Remote-Freigaben auf dem Client verfügbar zu machen, müssen wir die Verzeichnisse auf dem Host, die wir freigeben möchten, in leere Verzeichnisse auf dem Client bereitstellen.

Anmerkung: Wenn es Dateien und Verzeichnisse in Ihrem Bereitstellungspunkt gibt, werden sie versteckt, wenn Sie die NFS-Freigabe bereitstellen. Um den Verlust wichtiger Dateien zu vermeiden, stellen Sie sicher, dass das vorhandene Verzeichnis, in das Sie bereitstellen möchten, leer ist.

Wir erstellen zwei Verzeichnisse für unsere Bereitstellungen:

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

Nachdem wir nun einen Ort haben, um die remote Freigaben zu platzieren und die Firewall geöffnet haben, können wir die Berechtigungen mit der IP-Adresse unseres Host-Servers bereitstellen:

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

Über diese Befehle werden die Freigaben vom Host-Computer auf dem Client-Computer bereitgestellt. Es gibt mehrere Möglichkeiten, um zu überprüfen, ob die Bereitstellung erfolgreich war. Sie können dies mit einem mount- oder findmnt-Befehl überprüfen, df -h bietet jedoch eine besser lesbare Ausgabe:

  • df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000 10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general 10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home

Beide bereitgestellten Freigaben erscheinen unten. Da sie von dem gleichen Dateisystem bereitgestellt wurden, zeigen sie die gleiche Festplattennutzung. Um zu sehen, wie viel Speicherplatz tatsächlich in jedem Bereitstellungspunkt genutzt wird, verwenden Sie den Bereitstellungsbefehl du und den Pfad der Bereitstellung. Die Markierung -s liefert eine Zusammenfassung der Nutzung und nicht die Darstellung der Verwendung jeder Datei. -h druckt eine lesbare Ausgabe.

Beispiel:

  • du -sh /nfs/home
Output
36K /nfs/home

Das zeigt uns, dass der Inhalt des gesamten Home-Verzeichnisses nur 36K des verfügbaren Platzes verwendet.

Schritt 6 — Testen von NFS

Als Nächstes testen wir den Zugriff auf die Freigaben, indem wir in jede von ihnen schreiben.

Beispiel 1: Die Allzweck-Freigabe

Schreiben Sie als erstes eine Testdatei in die Freigabe /var/nfs/general:

  • sudo touch /nfs/general/general.test

Überprüfen Sie dann den Eigentümer:

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

Da wir dieses Volumen bereitgestellt haben, ohne das Standardverhalten von NFS zu ändern, und die Datei als root-Benutzer des Client-Computers über den sudo-Befehl erstellt haben, ist der Standardeigentümer nobody:nogroup. Client-Superuser können keine typischen administrativen Aktionen ausführen, wie z. B. das Ändern des Dateieigentümers oder das Erstellen eines neuen Verzeichnisses für eine Gruppe von Benutzern auf der NFS-bereitgestellten Freigabe.

Beispiel 2: Die Home-Verzeichnis-Freigabe

Um die Berechtigungen der Allzweck-Freigabe mit der Home-Verzeichnis-Freigabe zu vergleichen, erstellen Sie eine Datei auf gleiche Weise in /nfs/home:

  • sudo touch /nfs/home/home.test

Sehen Sie sich dann den Eigentümer der Datei an:

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

Wir haben home.test als root über den Befehl sudo erstellt, genau so, wie wie wir auch die Datei general.test erstellt haben. In diesem Fall ist der Eigentümer jedoch root, da wir das Standardverhalten überschrieben haben, als wir die Option no_root_squash in dieser Bereitstellung angaben. Dadurch können unsere root-Benutzer auf dem Client-Computer als root agieren, was die Verwaltung von Benutzerkonten wesentlich einfacher macht. Gleichzeitig bedeutet es, dass wir diesen Benutzern keinen root-Zugriff auf dem Host geben müssen.

Schritt 7 — Bereitstellen der Remote-NFS-Verzeichnisse beim Boot

Wir können die Remote-NFS-Freigaben automatisch beim Boot bereitstellen, indem wir sie in die /etc/fstab-Datei auf dem Client hinzufügen.

Öffnen Sie diese Datei mit root-Berechtigungen in Ihrem Texteditor:

  • sudo nano /etc/fstab

Fügen Sie am Ende der Datei eine Zeile für jede unserer Freigaben hinzu Sie werden ungefähr so aussehen:

/etc/fstab
. . .
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

Anmerkung: Sie können mehr über die Optionen, die wir hier angeben, auf der NFS-Hauptseite finden. Sie können auf diese zugreifen, indem Sie den folgenden Befehl ausführen:

  • man nfs

Der Client wird die Remote-Partitionen automatisch beim Start bereitstellen. Es kann jedoch einige Momente dauern, bis die Verbindung hergestellt ist und die Freigaben verfügbar sind.

Schritt 8 — Entfernen einer NFS-Remote-Freigabe

Wenn Sie nicht mehr möchten, dass das Remote-Verzeichnis auf Ihrem System bereitgestellt wird, können Sie es entfernen, indem Sie die Verzeichnisstruktur der Freigabe folgendermaßen verlassen und entfernen:

  • cd ~
  • sudo umount /nfs/home
  • sudo umount /nfs/general

Beachten Sie, dass der Befehl umount, nicht unmount lautet, wie Sie möglicherweise erwarten.

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

  • df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 936K 98M 1% /run /dev/vda1 25G 1.8G 23G 8% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi tmpfs 99M 0 99M 0% /run/user/1000

Wenn Sie verhindern möchten, dass sie beim nächsten Neustart wieder hergestellt werden, bearbeiten Sie /etc/fstab und löschen oder kommentieren Sie die Zeile, indem Sie ein #-Zeichen am Anfang der Zeile einfügen. Außerdem können Sie eine automatische Bereitstellung verhindern, indem Sie die Option auto entfernen. Sie können immer noch eine manuelle Bereitstellung vornehmen.

Zusammenfassung

In diesem Tutorial haben wir einen NFS-Host erstellt und einige wichtige Verhaltensweisen von NFS gezeigt, indem wir zwei verschiedene NFS-Bereitstellungen erstellt haben, die wir mit einem NFS-Client teilten.

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 über ein privates Netzwerk freigeben, ist dies kein Problem. In anderen Fällen ist ein VPN oder ein anderer verschlüsselter Tunnel erforderlich, um Ihre Daten zu schützen.

Creative Commons License