Einrichten eines NFS-Mount unter Ubuntu 16.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 regelmäßig auf die freigegebenen Ressourcen zugegriffen wird.

In diesem Handbuch erfahren Sie, wie Sie NFS-Bereitstellungen konfigurieren.

Voraussetzungen

In diesem Tutorial werden zwei Server verwendet: Einer teilt einen Teil seines Dateisystems mit dem anderen.
Um mitzumachen, benötigen Sie:

Im gesamten Lernprogramm wird der Server, der seine Verzeichnisse gemeinsam nutzt, alshost und der Server, der diese Verzeichnisse bereitstellt, alsclient bezeichnet. 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,256

Sie sollten diese Werte durch Ihre eigenen Host- und Client-IP-Adressen ersetzen.

[[Schritt-1 - Herunterladen und Installieren der Komponenten]] == 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 wir das Paketnfs-kernel-server, mit dem wir unsere Verzeichnisse freigeben können. Da dies der erste Vorgang ist, den wir in dieser Sitzung mitapt ausführen, aktualisieren wir unseren lokalen Paketindex vor der Installation:

sudo apt-get update
sudo apt-get 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 namensnfs-common installieren, das NFS-Funktionalität bietet, ohne nicht benötigte Serverkomponenten einzuschließen. Auch hier aktualisieren wir den lokalen Paketindex vor der Installation, um sicherzustellen, dass wir über aktuelle Informationen verfügen:

sudo apt-get update
sudo apt-get install nfs-common

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

[[Schritt-2 - Erstellen der Freigabeverzeichnisse auf dem Host]] == Schritt 2 - Erstellen der Freigabeverzeichnisse 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 nicht neu zuweisen oder keine anderen Superuser-Aufgaben auf dem NFS-Mount ausführen können.

Manchmal gibt es jedoch vertrauenswürdige Benutzer auf dem Client-System, die in der Lage sein müssen, diese Aufgaben auf dem bereitgestellten Dateisystem auszuführen, aber keinen Superuser-Zugriff auf dem Host benötigen. Der NFS-Server kann so konfiguriert werden, dass dies möglich ist, obwohl dies ein Risikoelement darstellt, da ein solcher BenutzercouldRoot-Zugriff auf das gesamte Hostsystem erhält.

Beispiel 1: Exportieren einer Universalhalterung

Im ersten Beispiel erstellen wir einen universellen NFS-Mount, der das Standard-NFS-Verhalten verwendet, um einem Benutzer mit Root-Rechten auf dem Client-Computer die Interaktion mit dem Host mit diesen Client-Superuser-Rechten zu erschweren. Sie können so etwas verwenden, um die mit einem Content-Management-System hochgeladenen Dateien zu speichern oder um Speicherplatz für Benutzer zu schaffen, damit diese Projektdateien problemlos gemeinsam nutzen können.

Erstellen Sie zunächst ein Freigabeverzeichnis mit dem Namennfs:

sudo mkdir /var/nfs/general -p

Da wir es mitsudo erstellen, gehört das Verzeichnis root hier auf dem Host.

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

NFS übersetzt aus Sicherheitsgründen alleroot-Operationen auf dem Client in dienobody:nogroup-Anmeldeinformationen. Daher müssen wir den Verzeichnisbesitz ändern, um diesen Anmeldeinformationen zu entsprechen.

sudo chown nobody:nogroup /var/nfs/general

Dieses Verzeichnis kann jetzt exportiert werden.

Beispiel 2: Exportieren des Basisverzeichnisses

In unserem zweiten Beispiel besteht das Ziel darin, die auf dem Host gespeicherten Home-Verzeichnisse der Benutzer auf Client-Servern verfügbar zu machen und vertrauenswürdigen Administratoren dieser Client-Server den Zugriff zu ermöglichen, den sie zur bequemen Verwaltung von Benutzern 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 wirdid, würde dies alle möglichen Probleme für jeden verursachen, der ein Home-Verzeichnis auf dem Host-Computer hat.

[[Schritt 3 - Konfigurieren der NFS-Exporte auf dem Host-Server]] == Schritt 3 - Konfigurieren der NFS-Exporte auf dem Host-Server

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-Rechten:

sudo nano /etc/exports

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

/etc/exports

directory_to_share    client(share_option1,...,share_optionN)

Für jedes Verzeichnis, das wir freigeben möchten, müssen wir eine Zeile erstellen. Da unser Beispielclient eine IP von203.0.113.256 hat, sehen unsere Zeilen wie folgt aus. Stellen Sie sicher, dass Sie die IP-Adressen an Ihren Kunden anpassen:

/etc/exports

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

Wir verwenden für beide Verzeichnisse dieselben Konfigurationsoptionen mit Ausnahme vonno_root_squash. Werfen wir einen Blick auf die jeweiligen Bedeutungen.

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

  • 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 Status des Remote-Volumes widerspiegelt. Es verringert jedoch auch die Geschwindigkeit der Dateivorgänge.

  • no_subtree_check: Diese Option verhindert die Überprüfung von Teilbäumen. Hierbei muss der Host für jede Anforderung prüfen, ob die Datei 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 Hosts 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]] == 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 ist nur SSH-Datenverkehr zulässig. Daher müssen wir eine Regel für NFS-Datenverkehr hinzufügen.

Bei vielen Anwendungen können Siesudo ufw app list verwenden und sie nach Namen aktivieren, abernfs gehört nicht dazu. Daufw auch/etc/services auf den Port und das Protokoll eines Dienstes überprüft, können wir NFS weiterhin nach Namen 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 Port 2049 auf dem Host zu öffnen, wobei Sie die IP-Adresse Ihres Clients ersetzen müssen:

sudo ufw allow from 203.0.113.256 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       203.0.113.256
OpenSSH (v6)               ALLOW       Anywhere (v6)

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

[[Schritt 5 - Erstellen der Mount-Punkte auf dem Client] == ​​Schritt 5 - Erstellen der Mount-Punkte auf dem Client

Nachdem der Hostserver konfiguriert ist und seine Freigaben bereitstellt, bereiten wir unseren Client vor.

Um die Remote-Freigaben auf dem Client verfügbar zu machen, müssen Sie das Host-Verzeichnis in einem leeren Client-Verzeichnis bereitstellen.

[.note] #Note: Wenn sich in Ihrem Bereitstellungspunkt Dateien und Verzeichnisse befinden, werden diese ausgeblendet, sobald Sie die NFS-Freigabe bereitstellen. Stellen Sie sicher, dass das Verzeichnis leer ist, wenn Sie in ein bereits vorhandenes Verzeichnis mounten.
#

Wir erstellen zwei Verzeichnisse für unsere Reittiere:

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

[[Schritt 6 - Bereitstellen der Verzeichnisse auf dem Client]] == Schritt 6 - Bereitstellen der Verzeichnisse auf dem Client

Nachdem wir einen Platz für die Remote-Freigaben haben und die Firewall geöffnet haben, können wir die Freigaben bereitstellen, indem wir uns an unseren Host-Server wenden, der in diesem Handbuch203.0.113.0 lautet:

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

Diese Befehle sollten die Freigaben vom Host-Computer auf dem Client-Computer bereitstellen. Sie können auf verschiedene Arten überprüfen, ob die Bereitstellung erfolgreich war. Sie können dies mit einem einfachen Befehlmount oderfindmnt überprüfen. Mitdf -h erhalten Sie jedoch eine besser lesbare Ausgabe, die zeigt, 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
203.0.113.0:/home      20G  1.2G   18G   7% /nfs/home
203.0.113.0:/var/nfs/general   20G  1.2G   18G   7% /nfs/general

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 Festplattenverwendungsbefehldu und den Pfad der Bereitstellung, um zu sehen, wie viel Speicherplatz tatsächlich unter jedem Bereitstellungspunkt verwendet wird. Das-s-Flag bietet eine Zusammenfassung der Verwendung, anstatt die Verwendung für jede Datei anzuzeigen. Mit-h wird eine vom Menschen lesbare Ausgabe gedruckt.

Zum Beispiel:

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

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

[[Schritt-7 - Testen des NFS-Zugriffs]] == Schritt 7 - 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 zunächst 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 gemountet haben, ohne das Standardverhalten von NFS zu ändern, und die Datei über den Befehlsudoals Root-Benutzer des Clientcomputers erstellt haben, ist der Besitz der Datei standardmäßig niemandem: 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 habenhome.test als root über den Befehlsudo erstellt, genauso wie wir die Dateigeneral.test erstellt haben. In diesem Fall gehört es jedoch root, da wir das Standardverhalten überschrieben haben, als wir die Optionno_root_squashauf diesem 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 müssen wir diesen Benutzern keinen Root-Zugriff auf dem Host gewähren.

[[Schritt-8 - Bereitstellen der Remote-NFS-Verzeichnisse beim Booten]] == Schritt 8 - Mounten der Remote-NFS-Verzeichnisse beim Booten

Wir können die Remote-NFS-Freigaben beim Booten automatisch bereitstellen, indem wir sie der Datei/etc/fstabauf dem Client hinzufügen.

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

sudo nano /etc/fstab

Am Ende der Datei wird für jede unserer Freigaben eine Zeile hinzugefügt. Sie werden so aussehen:

/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

[.note] #Note: Weitere Informationen zu den hier angegebenen Optionen finden Sie in der Manpage, in der die NFS-Bereitstellung infstab mit dem Befehlman nfs beschrieben wird.
#

Der Client-Server stellt die Remote-Partitionen beim Booten automatisch bereit. Es kann jedoch einen Moment dauern, bis die Verbindung hergestellt ist und die Freigaben verfügbar sind.

[[Schritt 9 - Aufheben der Bereitstellung einer NFS-Remote-Freigabe]] == Schritt 9 - 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 am Anfang der Zeile ein # -Symbol platzieren. Sie können das automatische Mounten auch verhindern, indem Sie die Optionauto entfernen, mit der Sie es manuell mounten 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 erheblichen Leistungseinbußen. Wenn die Leistung ein Problem darstellt, berücksichtigen SieSSHFS. 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.