So richten Sie einen NFS-Mount unter Ubuntu ein 18.04

Einführung

NFS (Network File System) ist ein verteiltes Dateisystemprotokoll, mit dem Sie Remoteverzeichnisse auf Ihrem Server bereitstellen können. Auf diese Weise können Sie Speicherplatz an einem anderen Speicherort verwalten und von mehreren Clients auf diesen Speicherplatz schreiben. NFS bietet eine relativ schnelle und einfache Möglichkeit, über ein Netzwerk auf Remote-Systeme zuzugreifen, und funktioniert auch in Situationen, in denen auf die freigegebenen Ressourcen regelmäßig zugegriffen werden muss.

In diesem Handbuch wird erläutert, wie Sie die für die NFS-Funktionalität erforderlichen Komponenten installieren, NFS-Bereitstellungen konfigurieren und die Bereitstellung einer NFS-Remotefreigabe aufheben.

Voraussetzungen

In diesem Lernprogramm werden zwei Server verwendet, von denen einer einen Teil des Dateisystems mit dem anderen teilt. Um mitzukommen, benötigen Sie:

In diesem Tutorial bezeichnen wir den Server, der seine Verzeichnisse als * Host * freigibt, und den Server, der diese Verzeichnisse als * Client * bereitstellt. Um sie klar zu halten, verwenden wir die folgenden IP-Adressen als Ersatz für die * Host * - und * Client * -Werte:

  • * Host *: + 203.0.113.0 +

  • * Client *: + 203.0.113.24 +

Wenn diese IP-Adressen in Befehlen und Konfigurationsdateien angezeigt werden, müssen Sie sie durch Ihre jeweiligen * Host * - und * Client * -IP-Adressen ersetzen.

Schritt 1 - Herunterladen und Installieren der Komponenten

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

Auf dem Host

Installieren Sie auf dem * Host * -Server das Paket + nfs-kernel-server +, mit dem Sie Ihre Verzeichnisse freigeben können. Da dies der erste Vorgang ist, den Sie in dieser Sitzung mit "+ apt +" ausführen, aktualisieren Sie Ihren lokalen Paketindex vor der Installation:

sudo apt update
sudo apt install nfs-kernel-server

Wechseln Sie nach der Installation dieser Pakete zum * Client * -Server.

Auf dem Client

Auf dem * Client * -Server müssen wir ein Paket mit dem Namen "+ nfs-common +" installieren, das NFS-Funktionalität bietet, ohne nicht benötigte Serverkomponenten einzuschließen. Aktualisieren Sie den lokalen Paketindex erneut vor der Installation, um sicherzustellen, dass Sie über aktuelle Informationen verfügen:

sudo apt update
sudo apt install nfs-common

Nachdem beide Server über die erforderlichen Pakete verfügen, können Sie mit der Konfiguration beginnen.

Schritt 2 - Erstellen der Freigabe-Verzeichnisse auf dem Host

Wir werden zwei separate Verzeichnisse mit unterschiedlichen Konfigurationseinstellungen gemeinsam nutzen, um zwei wichtige Möglichkeiten zu veranschaulichen, wie NFS-Bereitstellungen in Bezug auf den Superuser-Zugriff konfiguriert werden können.

Superuser können überall auf ihrem System arbeiten. Von NFS gemountete Verzeichnisse sind jedoch nicht Teil des Systems, auf dem sie gemountet werden. Daher lehnt der NFS-Server standardmäßig die Ausführung von Vorgängen ab, für die Superuser-Berechtigungen erforderlich sind. Diese Standardeinschränkung bedeutet, dass Superuser auf dem * Client * keine Dateien als * root * schreiben, den 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 bereitgestellten Dateisystem ausführen müssen, aber keinen Superuser-Zugriff auf dem * Host * benötigen. Sie können den NFS-Server so konfigurieren, dass dies zulässig ist, obwohl dies ein gewisses Risiko mit sich bringt, da ein solcher Benutzer Root-Zugriff auf das gesamte * Host * -System erhalten könnte.

Beispiel 1: Exportieren einer Universalhalterung

Im ersten Beispiel erstellen wir einen universellen NFS-Mount, der das Standard-NFS-Verhalten verwendet, um es einem Benutzer mit Root-Rechten auf dem * Client * -Rechner zu erschweren, mit dem * Host * unter Verwendung dieser * Client * -Superuser-Rechte zu interagieren . Sie können so etwas verwenden, um Dateien zu speichern, die mit einem Content-Management-System hochgeladen wurden, oder um Speicherplatz für Benutzer zu schaffen, damit diese Projektdateien problemlos gemeinsam nutzen können.

Erstellen Sie zunächst ein Freigabeverzeichnis mit dem Namen "+ nfs +":

sudo mkdir /var/nfs/general -p

Da wir es mit "+ sudo +" erstellen, befindet sich das Verzeichnis im Besitz des * root * -Benutzers auf dem * Host *.

ls -la /var/nfs/general
Output4 drwxr-xr-x  2 root   root    4096 Jul 25 15:26 .

NFS übersetzt alle * root * -Operationen auf dem * Client * als Sicherheitsmaßnahme in die Anmeldeinformationen + nobody: nogroup +. Daher müssen wir den Verzeichnisbesitz ändern, um diesen Anmeldeinformationen zu entsprechen.

sudo chown nobody:nogroup /var/nfs/general

Sie können dieses Verzeichnis jetzt exportieren.

Beispiel 2: Exportieren des Basisverzeichnisses

In unserem zweiten Beispiel besteht das Ziel darin, die auf dem * Host * gespeicherten Home-Verzeichnisse der Benutzer auf den * Client * -Servern verfügbar zu machen und vertrauenswürdigen Administratoren dieser * Client * -Server den Zugriff zu ermöglichen, den sie zur bequemen Verwaltung der Benutzer benötigen.

Dazu exportieren wir das Verzeichnis "+ / home". Da es bereits vorhanden ist, müssen wir es nicht erstellen. Auch die Berechtigungen werden nicht geändert. Wenn wir das getan haben, könnte dies zu einer Reihe von Problemen für jeden mit einem Ausgangsverzeichnis auf dem * Host * -Maschine führen.

Schritt 3 - Konfigurieren der NFS-Exporte auf dem Hostserver

Als Nächstes gehen wir in die NFS-Konfigurationsdatei ein, um die gemeinsame Nutzung dieser Ressourcen einzurichten.

Öffnen Sie die Datei "+ / etc / exports +" in Ihrem Texteditor mit * root * -Privilegien:

sudo nano /etc/exports

Die Datei enthält Kommentare zum allgemeinen Aufbau der einzelnen Konfigurationszeilen. Die Syntax lautet grundsätzlich:

/ etc / exports

   (,,)

Für jedes Verzeichnis, das wir freigeben möchten, müssen wir eine Zeile erstellen. Da unser Beispiel * client * eine IP von + 203.0.113.24 + hat, sehen unsere Zeilen wie folgt aus. Stellen Sie sicher, dass Sie die hier angezeigte IP-Adresse in die Ihres * Kunden * ändern:

/ etc / exports

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

Hier verwenden wir die gleichen Konfigurationsoptionen für beide Verzeichnisse mit Ausnahme von "+ no_root_squash +". Werfen wir einen Blick darauf, was jede dieser Optionen bedeutet:

  • + rw +: Mit dieser Option erhält der * Client * -Computer Lese- und Schreibzugriff auf das Volume.

  • + sync +: Diese Option zwingt NFS, Änderungen auf die Festplatte zu schreiben, bevor es antwortet. Dies führt zu einer stabileren und konsistenteren Umgebung, da die Antwort den tatsächlichen Status des Remote-Volumes widerspiegelt. Es verringert jedoch auch die Geschwindigkeit der Dateivorgänge.

  • + no_subtree_check +: Diese Option verhindert die Prüfung von Teilbäumen. Hierbei muss der * host * prüfen, ob die Datei für jede Anforderung tatsächlich noch im exportierten Baum 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 Teilbaumprüfung zu deaktivieren.

  • + no_root_squash +: Standardmäßig übersetzt NFS Anforderungen von einem * root * -Benutzer remote in einen nicht privilegierten Benutzer auf dem Server. Dies war als Sicherheitsfunktion gedacht, 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 den Änderungen fertig sind, speichern und schließen Sie die Datei. Starten Sie anschließend den NFS-Server mit dem folgenden Befehl neu, um die Freigaben für die von Ihnen konfigurierten Clients verfügbar zu machen:

sudo systemctl restart nfs-kernel-server

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

Schritt 4 - Anpassen der Firewall auf dem Host

Überprüfen Sie zunächst den Firewall-Status, um festzustellen, ob er aktiviert ist, und, falls ja, um festzustellen, was derzeit zulässig ist:

sudo ufw status
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.

Bei vielen Anwendungen können Sie "+ sudo ufw app list " verwenden und sie nach Namen aktivieren, aber " nfs " ist keine davon. Da ` ufw` auch` + / etc / services` auf den Port und das Protokoll eines Dienstes prüft, können wir NFS weiterhin namentlich hinzufügen. Es wird empfohlen, die restriktivste Regel zu aktivieren, die weiterhin den von Ihnen gewünschten Datenverkehr zulässt. Anstatt den Datenverkehr von jedem beliebigen Ort aus zuzulassen, werden wir uns darauf beschränken.

Verwenden Sie den folgenden Befehl, um den Port "+ 2049 +" auf dem * Host * zu öffnen und dabei die * IP-Adresse Ihres * Clients * zu ersetzen:

sudo ufw allow from  to any port nfs

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

sudo ufw status

In der Ausgabe sollte der Verkehr von Port "+ 2049 +" zugelassen sein:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
2049                       ALLOW
OpenSSH (v6)               ALLOW       Anywhere (v6)

Dies bestätigt, dass UFW nur ​​NFS-Datenverkehr von unserem * Client * -Rechner auf Port + 2049 + zulässt.

Schritt 5 - Erstellen von Einhängepunkten und Einhängeverzeichnissen auf dem Client

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

Um die Remote-Freigaben auf dem * Client * verfügbar zu machen, müssen die Verzeichnisse auf dem * Host * bereitgestellt werden, den wir freigeben möchten, um die Verzeichnisse auf dem * Client * zu leeren.

Wir erstellen zwei Verzeichnisse für unsere Reittiere:

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

Nachdem wir nun einen Speicherort für die Remotefreigaben haben und die Firewall geöffnet haben, können wir die Freigaben bereitstellen, indem wir unseren * Host * -Server ansprechen, der in diesem Handbuch "+ 203.0.113.0 +" lautet:

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

Diese Befehle mounten die Freigaben vom Host-Computer auf dem * Client * -Maschine. Sie können auf verschiedene Arten überprüfen, ob die Bereitstellung erfolgreich war. Sie können dies mit einem einfachen Befehl + mount + oder + findmnt + überprüfen, aber + df -h + bietet eine besser lesbare Ausgabe, die veranschaulicht, wie die Festplattennutzung für die NFS-Freigaben unterschiedlich angezeigt wird:

df -h
OutputFilesystem                Size  Used Avail Use% Mounted on
udev                      238M     0  238M   0% /dev
tmpfs                      49M  628K   49M   2% /run
/dev/vda1                  20G  1.2G   18G   7% /
tmpfs                     245M     0  245M   0% /dev/shm
tmpfs                     5.0M     0  5.0M   0% /run/lock
tmpfs                     245M     0  245M   0% /sys/fs/cgroup
tmpfs                      49M     0   49M   0% /run/user/0

Die beiden von uns gemounteten Shares werden unten angezeigt. Da sie über dasselbe Dateisystem bereitgestellt wurden, weisen sie dieselbe Datenträgerverwendung auf. Verwenden Sie den Befehl "+ du " und den Pfad des Mount, um zu sehen, wie viel Speicherplatz unter den einzelnen Mountpunkten tatsächlich verwendet wird. Das " -s " - Flag liefert eine Zusammenfassung der Verwendung, anstatt die Verwendung für jede Datei anzuzeigen. Das ` -h +` druckt eine lesbare Ausgabe.

Zum Beispiel:

du -sh /nfs/home
Output36K /nfs/home

Dies zeigt uns, dass der Inhalt des gesamten Basisverzeichnisses nur 36 KB des verfügbaren Speicherplatzes belegt.

Schritt 6 - Testen des NFS-Zugriffs

Als Nächstes testen wir den Zugriff auf die Freigaben, indem wir jeweils etwas in die Freigaben schreiben.

Beispiel 1: Die General Purpose Share

Schreiben Sie zuerst eine Testdatei in die + / var / nfs / general + Freigabe:

sudo touch /nfs/general/general.test

Überprüfen Sie dann seinen Besitz:

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 Volume bereitgestellt haben, ohne das Standardverhalten von NFS zu ändern, und die Datei mit dem Befehl "+ sudo " als * root * -User des * Client * -Rechners erstellt haben, ist der Besitz der Datei standardmäßig " nobody: nogroup +". * Client * -Superuser können auf dieser über NFS bereitgestellten Freigabe keine typischen Verwaltungsaktionen ausführen, z. B. den Eigentümer einer Datei ändern oder ein neues Verzeichnis für eine Gruppe von Benutzern erstellen.

Beispiel 2: Die Freigabe des Basisverzeichnisses

Um die Berechtigungen der Allzweckfreigabe mit der Basisverzeichnisfreigabe zu vergleichen, erstellen Sie auf die gleiche Weise ein Basisverzeichnis:

sudo touch /nfs/home/home.test

Dann schauen Sie sich den Besitz 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 * mit dem Befehl` + sudo` erstellt, genauso wie wir die Datei + general.test + erstellt haben. In diesem Fall ist es jedoch Eigentum von * root *, da wir das Standardverhalten überschrieben, als wir die Option + no_root_squash + für diesen Mount angegeben haben. Dies ermöglicht unseren * root * -Benutzern auf dem * client * -Computer, als * root * zu fungieren, und erleichtert die Verwaltung von Benutzerkonten erheblich. Gleichzeitig bedeutet dies, dass wir diesen Benutzern keinen Root-Zugriff auf den * Host * gewähren müssen.

Schritt 7 - Mounten der Remote-NFS-Verzeichnisse beim Booten

Wir können die Remote-NFS-Freigaben automatisch beim Booten bereitstellen, indem wir sie zur Datei "+ / etc / fstab +" auf dem * client * hinzufügen.

Öffnen Sie diese Datei mit Root-Rechten in Ihrem Texteditor:

sudo nano /etc/fstab

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

/ etc / fstab

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

Der * Client * -Server stellt die Remote-Partitionen beim Booten automatisch bereit, obwohl es einige Momente dauern kann, bis die Verbindung hergestellt ist und die Freigaben verfügbar sind.

Schritt 8 - Aufheben der Bereitstellung einer NFS-Remote-Freigabe

Wenn Sie nicht mehr möchten, dass das Remote-Verzeichnis auf Ihrem System bereitgestellt wird, können Sie die Bereitstellung aufheben, indem Sie die Verzeichnisstruktur der Freigabe verlassen und die Bereitstellung wie folgt aufheben:

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

Dadurch werden die Remotefreigaben entfernt, sodass nur auf Ihren lokalen Speicher zugegriffen werden kann:

df -h
Output
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  1.3G   55G   3% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G   12K  2.0G   1% /dev
tmpfs           396M  320K  396M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user

Wenn Sie auch verhindern möchten, dass sie beim nächsten Neustart erneut bereitgestellt werden, bearbeiten Sie "+ / etc / fstab " und löschen Sie die Zeile oder kommentieren Sie sie aus, indem Sie ein # -Symbol am Zeilenanfang einfügen. Sie können die automatische Bereitstellung auch verhindern, indem Sie die Option " auto +" entfernen, mit der Sie sie manuell bereitstellen können.

Fazit

In diesem Lernprogramm haben wir einen NFS-Host erstellt und einige wichtige NFS-Verhaltensweisen veranschaulicht, indem wir zwei verschiedene NFS-Bereitstellungen erstellt haben, die wir mit unserem 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 öffentlich zugängliche Dateien freigeben, verursacht dies keine ernsthaften Probleme.

Wenn Sie jedoch NFS für private Daten verwenden, müssen Sie entscheiden, wie Sie diese Daten schützen möchten. Möglicherweise können Sie NFS über SSH oder eine VPN-Verbindung weiterleiten, um eine sicherere Umgebung zu schaffen. Dies führt jedoch häufig zu einer erheblichen Leistungsminderung. Wenn die Leistung ein Problem darstellt, lesen Sie SSHFS. Es ist etwas langsamer als unverschlüsselter NFS-Verkehr, aber in der Regel viel schneller als getunnelter NFS. Kerberos-authentifizierte Verschlüsselung für NFS ist eine weitere zu untersuchende Option.