Zurück zum Blog

Einrichten eines NFS-Mounts auf Ubuntu 20.04

Einrichten eines NFS-Mounts auf Ubuntu 20.04

Das Network File System (NFS) ist eine verteilte Speicherlösung. Es handelt sich um ein Dateisystemprotokoll, das es ermöglicht, entfernte Verzeichnisse auf dem lokalen Server einzubinden und so zu nutzen, als handele es sich um lokalen Speicher. NFS ermöglicht es mehreren Clients, gemeinsamen Remote-Speicher zu nutzen. Es eignet sich gut für Umgebungen, die regelmäßig gemeinsam genutzte Ressourcen benötigen. NFS basiert auf dem ONC RPC (Open Network Computing Remote Procedure Call)-System. Es ist ein offener Standard, der in RFC (Request for Comments) definiert ist. Dies ermöglicht es jedem, das Protokoll zu implementieren.

In dieser Anleitung werden wir die Schritte zur Einrichtung und Konfiguration eines NFS-Mounts auf Ubuntu 20.04 durchgehen.

Voraussetzungen

Wie die Beschreibung von NFS vermuten lässt, besteht die NFS-Konfiguration aus zwei Teilen:

  • Host: Speichert die Daten physisch und teilt den Speicher mit „Client“-Systemen.

  • Client: Das System, das sich mit dem „Host“ verbindet und den Remote-Speicher so nutzt, als wäre er lokal.

Für unsere Demonstration verwenden wir zwei Server, die beide mit Ubuntu 20.04 konfiguriert sind. Hier ist eine einfache Anleitung, wie Sie Ihren Ubuntu-Server einrichten. Im Verlauf dieser Anleitung werden diese Server als Host und Client bezeichnet. Beachten Sie, dass die Schritte für den Client dieselben sind, selbst wenn es mehr als einen gibt.

Den Servern sind die folgenden IP-Adressen zugewiesen. Diese Server werden von CloudSigma gehostet:

  • Host: 31.171.240.79

  • Client: 31.171.250.109

Stellen Sie sicher, dass Sie diese durch die entsprechenden IP-Adressen ersetzen.

NFS installieren

NFS ist in den offiziellen Ubuntu-Repositories leicht verfügbar. Es gibt verschiedene Softwarepakete für die Host- und Client-Systeme.

  • NFS auf dem Host installieren

Auf dem Host benötigen wir die Komponenten, die den Rechner in die Lage versetzen, als NFS- Host zu dienen. Dies geschieht in Form des Pakets nfs-kernel-server. Ubuntu verwendet APT als Paketmanager. Starten Sie zuerst das Terminal und aktualisieren Sie die APT-Paketdatenbank:

Server Apt Update

Installieren Sie als Nächstes das Paket nfs-kernel-server. Falls erforderlich, wird APT sich um alle zusätzlichen Abhängigkeiten kümmern:

Install nfs kernel server

  • NFS auf dem Client installieren

Auf dem Client-System benötigen wir die Funktionalität, um uns über das Netzwerk mit den Verzeichnissen des Hosts zu verbinden. Die NFS-Serverfunktionalität ist dafür nicht erforderlich. Unter Ubuntu ist dies im Paket nfs-common gebündelt. Aktualisieren Sie die APT-Paketdatenbank:

Client apt update

Installieren Sie dann das Paket nfs-common:

Install nfs common

Freigegebene Verzeichnisse auf dem Host

Als Nächstes werden wir zwei separate Verzeichnisse freigeben, jedes mit einer anderen Konfiguration. Wir werden zwei wesentliche Funktionsweisen von NFS-Mounts im Hinblick auf den Superuser-Zugriff demonstrieren. Standardmäßig haben Superuser das Recht, alles auf dem gesamten System auszuführen. Die über NFS eingebundenen Verzeichnisse sind jedoch nicht Teil des Systems, auf dem sie eingebunden sind. Der NFS-Server verweigert jede Operation, die Superuser-Rechte erfordert. Diese Einschränkung bedeutet, dass Clients keine Berechtigung haben, auf den NFS-Mounts zu schreiben, Eigentumsrechte neu zuzuweisen und andere Superuser-Aufgaben auszuführen.

Es ist möglich, bestimmten vertrauenswürdigen Benutzern die Ausführung dieser Aufgaben auf den eingebundenen Dateisystemen zu gestatten. Dies birgt jedoch ein gewisses Risiko, da ein solcher Client potenziell vollen Zugriff auf den Host erlangen kann. Dies kann durch eine ordnungsgemäße Verwaltung der Benutzerberechtigungen gemildert werden. Unter Linux steuert die sudoers-Datei alle Benutzerrechte auf dem System. Weitere Informationen finden Sie in unserem Tutorial über wie man die Linux-sudoers-Datei konfiguriert.

  • Allzweck-Mount

Das erste Beispiel ist ein Allzweck-NFS-Mount mit Standard-NFS-Verhalten. Bei diesem Ansatz ist es für den Client äußerst schwierig, Superuser-Aktionen auf den Mounts auszuführen. Diese Art von NFS-Mount wird häufig für Dateispeicherung, Uploads über ein CMS (Content Management System) oder die Freigabe von Projektdateien usw. eingesetzt.

Die folgenden Schritte sind auf dem Host-System durchzuführen. Erstellen Sie zuerst ein Verzeichnis für die Freigabe mit dem Namen nfs:

Create nfs general dir

Da das Verzeichnis mit sudo -Berechtigungen erstellt wurde, ist der Besitzer root:

List nfs general

In der Standardkonfiguration übersetzt NFS jede Root-Operation von der Client-Seite in die nobody:nogroup-Anmeldedaten aus Sicherheitsgründen. Ändern Sie aus Konsistenzgründen den Besitzer des Verzeichnisses so, dass er mit den Anmeldedaten übereinstimmt:

Change owner nogroup

  • Home-Verzeichnis

Das zweite Beispiel besteht darin, das Home-Verzeichnis des host-Benutzers für Clients verfügbar zu machen. Vertrauenswürdige Administratoren der ausgewählten Clients können darauf zugreifen, um Benutzer bequem zu verwalten. Das /home-Verzeichnis existiert standardmäßig, sodass kein Verzeichnis erstellt werden muss. Was die Verzeichnisberechtigungen betrifft, sind keine Änderungen erforderlich, da dies mehr Probleme als Nutzen verursachen würde.

NFS-Exports konfigurieren

Die freizugebenden Verzeichnisse sind nun erstellt. Als Nächstes muss NFS so konfiguriert werden, dass sie für Clients verfügbar sind. NFS verwendet eine Konfigurationsdatei, um zu verfolgen, welche Verzeichnisse freigegeben werden sollen. Öffnen Sie die folgende NFS-Konfigurationsdatei in einem Texteditor Ihrer Wahl:

exports file

Der Kommentarbereich der Datei beschreibt die allgemeine Syntaxstruktur der Konfiguration. Kurz gesagt muss jedes Verzeichnis im folgenden Format deklariert werden:

Für die beiden Verzeichnisse, die wir freigeben möchten, sieht die Konfiguration wie folgt aus. Beide Verzeichnisse haben fast dieselben Konfigurationsoptionen:

exports file mod

Hier ist eine kurze Übersicht über die Konfigurationsoptionen:

  • rw: Dem Client werden sowohl Lese- als auch Schreibberechtigungen für das Volume erteilt.

  • sync: Zwingt NFS, die Änderungen auf die Festplatte zu schreiben, bevor geantwortet wird. Dies bietet eine stabilere und konsistentere Benutzererfahrung. Die Antwort spiegelt den tatsächlichen Zustand des Remote-Volumes wider. Die Dateioperationen sind jedoch langsamer.

  • no_subtree_check: Verhindert die Überprüfung von Unterverzeichnissen (Subtree Checking). Wenn dies nicht deaktiviert ist, müssen Hosts bei jeder einzelnen Anfrage des Clients prüfen, ob die Datei im exportierten Verzeichnisbaum existiert. Dies kann zu vielen Problemen führen, beispielsweise wenn eine Datei umbenannt wird, während der Client sie verwendet. In den meisten Fällen ist das Deaktivieren der Unterverzeichnisprüfung die beste Wahl.

  • no_root_squash: Wie bereits erwähnt, übersetzt NFS jede Anfrage des Remote-Root-Benutzers in einen nicht privilegierten Benutzer. Dies ist eine beabsichtigte Sicherheitsfunktion, um unerwünschten Zugriff auf das Host-System zu verhindern. Die Verwendung dieser Option deaktiviert jedoch dieses Verhalten.

Speichern Sie die Konfigurationsdatei und beenden Sie den Editor. Um die Änderungen wirksam zu machen, starten Sie den NFS-Server neu:

Restart nfs kernel server

Firewall anpassen

Für jeden Server ist eine ordnungsgemäße Firewall-Konfiguration ein Muss. Angenommen, Sie haben Ihren Ubuntu 20.04-Server entsprechend konfiguriert, sollte die UFW-Firewall aktiv sein. Es ist eine einfache, aber leistungsstarke Firewall, die bei den meisten Linux-Distributionen standardmäßig enthalten ist. Für Anfänger gibt es hier eine kurze Anleitung, die UFW erklärt, wie sie funktioniert und die gängige UFW-Nutzung anhand von Beispielen veranschaulicht.

Standardmäßig blockiert die Firewall jeglichen eingehenden und ausgehenden Datenverkehr. Um sicherzustellen, dass der NFS-Server eine Verbindung herstellen und Datenverkehr ordnungsgemäß austauschen kann, müssen wir eine Ausnahme für das NFS-Protokoll hinzufügen. Überprüfen Sie zuerst den Status der Firewall. Dadurch werden auch alle aktuellen Regeln ausgegeben:

ufw status

Wie wir sehen können, ist nur SSH-Datenverkehr zum System zugelassen. Wir müssen eine Ausnahme hinzufügen, um NFS-Datenverkehr zuzulassen.

In den meisten Fällen wird dringend empfohlen, die restriktivste Regel zu verwenden, die den erforderlichen Datenverkehr noch zulässt. Daher erlauben wir nur den ausgewählten Clients, eine Verbindung zum Host herzustellen:

ufw allow ports

Überprüfen Sie danach erneut den Firewall-Status:

ufw status after change

Mountpoint erstellen

Der Server ist nun bereit, dem Client-System zu erlauben, sich mit dem NFS-Protokoll zu verbinden. Als Nächstes müssen wir den Client vorbereiten. Um auf das Remote-Volume zuzugreifen, muss es lokal auf dem Client gemountet werden. Als Mountpoint wird empfohlen, ein dediziertes leeres Verzeichnis zu verwenden.

Erstellen Sie für die beiden Remote-Volumes zwei separate Mountpoints:

Create client nfs general directory

Create client nfs home directory

Da die Mountpoints nun bereit sind, müssen Sie die Remote-Volumes mounten:

Mount general directory on client

Mount home directory on client

Wir können überprüfen, ob das Mounten erfolgreich war. Überprüfen Sie die Liste aller gemounteten Volumes:

Disk free in client

Voila! Die Remote-Volumes wurden erfolgreich gemountet. Wir können den Speicherplatzverbrauch auch mit dem folgenden Befehl überprüfen:

Disk usage in client home

NFS-Zugriff testen

Bisher wurden die Remote-Volumes ordnungsgemäß gemountet. Es nützt jedoch nichts, wenn der Client keine Daten auf dem Remote-Volume lesen/schreiben kann. Erstellen Sie zur Überprüfung eine Dummy-Datei auf dem/den NFS-Mount(s). Hier wird die Datei mit root Rechten erstellt, um zu testen, ob die root-spezifischen Konfigurationen ordnungsgemäß funktionieren:

Create file in nfs

Überprüfen Sie als Nächstes den Besitzer der Datei:

Check ownership of file created

Wie wir sehen können, übersetzt NFS den Dateibesitzer in nobody:nogroup. Das Verzeichnis /var/nfs/ general gehört nobody:nogroup, daher übersetzt NFS den Dateibesitz. Zeit, den anderen NFS-Mount zu testen:

Create home file

Überprüfen Sie die Existenz und den Besitzer der Datei:

Check ownership of home file

In diesem Fall hat NFS den Besitzer der Datei nicht übersetzt. Dieser Client wurde so konfiguriert, dass er administrative Aktionen durchführen kann. Zudem gehört das ursprüngliche Host-Verzeichnis /home nicht nobody:nogroup.

Zusätzliche Tricks

  • Mounten beim Systemstart

Bisher mussten wir das NFS-Volume manuell in ein lokales Verzeichnis mounten. Wenn sie nicht ungemountet werden, bleiben die NFS-Mounts bis zum Neustart des Systems bestehen. Wenn das NFS-Volume regelmäßig verwendet wird, wird das manuelle Mounten extrem mühsam. Bei mehreren NFS-Mounts ist es unpraktisch, diese manuell nacheinander zu mounten.

Mithilfe der Datei /etc/fstab können wir den Prozess automatisieren. Beim Booten mountet dieses Skript die NFS-Volumes automatisch auf den Ziel-Mountpoints. Öffnen Sie die Datei in einem Texteditor:

fstab file

Fügen Sie die folgenden Zeilen hinzu, um die Remote-Volumes des Host-Systems zu mounten:

fstab file after change

Speichern Sie das Skript und schließen Sie den Texteditor. Beim nächsten Booten wird Linux die Remote-Volumes automatisch mounten. Beachten Sie, dass das Booten des Systems einige Zeit in Anspruch nehmen kann, da es die Volumes verbindet und mountet.

  • NFS-Volume unmounten

Wenn das Remote-Volume nicht mehr benötigt wird, werden die Volumes durch das Aushängen aus dem Client-System entfernt. Stellen Sie vor dem Aushängen jedoch sicher, dass keine Anwendung und kein Skript das Remote-Volume verwendet. Das Aushängen von NFS-Mounts ähnelt dem Aushängen aller anderen Mounts. Hängen Sie in diesem Fall /nfs/home und /nfs/general:

Unmount nfs

Überprüfen Sie anschließend die Aktion:

Disks after unmount

Abschließende Gedanken

In dieser Anleitung haben wir einen NFS-Server erstellt und einige Grundlagen der NFS-Remotefreigabe demonstriert. Wenn Sie NFS in einer Produktionsumgebung implementieren möchten, denken Sie bitte daran, dass das NFS-Protokoll nicht verschlüsselt ist. Dies kann Sicherheitsrisiken bergen, wie beispielsweise Man-in-the-Middle-Angriffe.

Viel Spaß beim Computing!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.