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.
-
Zur Hilfe beim Einrichten eines nicht-root-Benutzers mit sudo-Berechtigungen und einer Firewall folgen Sie unserer Anleitung Erstkonfiguration des Servers mit Ubuntu 18.04.
-
Wenn Sie DigitalOcean-Droplets für Ihren Server und Client verwenden, lesen Sie Wie man ein VPC erstellt, um ein privates Netzwerk einzurichten.
-
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:
Anschließend installieren Sie das Paket:
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:
Dann installieren Sie das Paket:
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:
Da Sie es mit sudo
erstellen, gehört das Verzeichnis dem Root-Benutzer des Hosts:
Outputtotal 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:
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
:
Die Datei enthält Kommentare, die die allgemeine Struktur jeder Konfigurationszeile zeigen. Die Syntax ist wie folgt:
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:
/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:
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:
OutputStatus: 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:
Sie können die Änderung überprüfen, indem Sie Folgendes ausführen:
Sie sollten eine Liste des vom Port 2049
erlaubten Datenverkehrs in der Ausgabe erhalten:
OutputStatus: 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.
Erstellen Sie zwei Verzeichnisse für Ihre Einbindungen. Führen Sie den folgenden Befehl aus, um das erste zu erstellen::
Dann führen Sie diesen Befehl aus, um das zweite zu erstellen::
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:
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:
OutputFilesystem 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:
Output44K /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
:
Überprüfen Sie dann deren Besitz:
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
:
Dann überprüfen Sie den Besitz der Datei:
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:
Fügen Sie am Ende der Datei eine Zeile für jede Ihrer Freigaben hinzu, wie folgt:
. . .
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:
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:
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:
Dann hängen Sie /nfs/general
aus:
Dadurch werden die entfernten Freigaben entfernt, sodass nur noch Ihr lokaler Speicher zugänglich ist:
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