NFS oder Network File System ist ein verteiltes Dateisystemprotokoll, mit dem Sie Verzeichnisse über ein Netzwerk gemeinsam nutzen können. Mit NFS können Sie entfernte Verzeichnisse auf Ihrem System einhängen und mit den Dateien auf dem entfernten Rechner arbeiten, als wären es lokale Dateien.
Standardmäßig ist das NFS-Protokoll nicht verschlüsselt und bietet keine Benutzerauthentifizierung. Der Zugriff auf den Server wird durch die IP-Adressen oder Hostnamen des Clients beschränkt.
Dieser Artikel erklärt, wie man einen NFSv4-Server auf Ubuntu 20.04 einrichtet. Wir zeigen Ihnen auch, wie Sie ein NFS-Dateisystem auf dem Client-Rechner mounten.
Voraussetzungen #
Wir verwenden zwei Maschinen, eine mit Ubuntu 20.04, die als NFS-Server fungiert, und eine andere mit einer anderen Linux-Distribution, auf der wir die Freigabe bereitstellen. Der Server und die Clients sollten in der Lage sein, über ein privates Netzwerk miteinander zu kommunizieren. Sie können öffentliche IP-Adressen verwenden und die Server-Firewall so konfigurieren, dass Datenverkehr auf Port 2049
zugelassen wird nur aus vertrauenswürdigen Quellen.
Die Computer in diesem Beispiel haben die folgenden IPs:
NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range
Richten Sie den NFS-Server ein #
Der erste Schritt besteht darin, den NFS-Server einzurichten. Wir installieren die erforderlichen Pakete, erstellen und exportieren die NFS-Verzeichnisse und konfigurieren die Firewall.
Installieren des NFS-Servers #
Das NFS-Serverpaket bietet Unterstützung für den Benutzerbereich, die zum Ausführen des NFS-Kernelservers erforderlich ist. Um das Paket zu installieren, führen Sie Folgendes aus:
sudo apt update
sudo apt install nfs-kernel-server
Sobald die Installation abgeschlossen ist, werden die NFS-Dienste automatisch gestartet.
Unter Ubuntu 20.04 ist NFS Version 2 deaktiviert. Die Versionen 3 und 4 sind aktiviert. Sie können dies überprüfen, indem Sie den folgenden cat
ausführen Befehl:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2 ist jetzt ziemlich alt und es gibt keinen Grund, es zu aktivieren.
Die NFS-Serverkonfiguration wird in /etc/default/nfs-kernel-server
definiert und /etc/default/nfs-common
Dateien. Die Standardeinstellungen sind für die meisten Situationen ausreichend.
Erstellen der Dateisysteme #
Der NFSv4-Server verwendet ein globales Stammverzeichnis, und die exportierten Verzeichnisse sind relativ zu diesem Verzeichnis. Sie können den Freigabe-Mount-Punkt mit den Verzeichnissen verknüpfen, die Sie exportieren möchten, indem Sie Bind-Mounts verwenden.
In diesem Beispiel legen wir den /srv/nfs4
fest Verzeichnis als NFS-Root. Um besser zu erklären, wie die NFS-Mounts konfiguriert werden können, teilen wir zwei Verzeichnisse (/var/www
und /opt/backups
) mit unterschiedlichen Konfigurationseinstellungen. Der /var/www/
gehört dem Benutzer www-data
, und /opt/backups
gehört root
.
Erstellen Sie zuerst das Root-Verzeichnis und die Freigabe-Mount-Punkte:
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
Binden Sie die Verzeichnisse an die Freigabe-Mount-Punkte:
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
Um die Bind-Mounts über Neustarts hinweg dauerhaft zu machen, öffnen Sie die Datei /etc/fstab
Datei:
sudo nano /etc/fstab
und fügen Sie die folgenden Zeilen hinzu:
/etc/fstab/opt/backups /srv/nfs4/backups none bind 0 0
/var/www /srv/nfs4/www none bind 0 0
Exportieren der Dateisysteme #
Der nächste Schritt besteht darin, die zu exportierenden Dateisysteme und die Clients, die auf diese Freigaben zugreifen dürfen, zu /etc/exports
hinzuzufügen Datei.
Jede Zeile für ein exportiertes Dateisystem hat folgende Form:
export host(options)
Wobei export
ist das exportierte Verzeichnis, host
ist ein Hostname oder eine IP-Adresse/ein Bereich, der auf den Export zugreifen kann, und options
sind die Host-Optionen.
Öffnen Sie /etc/exports
Datei und fügen Sie die folgenden Zeilen hinzu:
sudo nano /etc/exports
/etc/exports/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www 192.168.33.20(rw,sync,no_subtree_check)
Die erste Zeile enthält den fsid=0
Option, die das NFS-Stammverzeichnis (/srv/nfs4
). Der Zugriff auf dieses NFS-Volume ist nur den Clients von 192.168.33.0/24
erlaubt Subnetz. Die crossmnt
Option ist erforderlich, um Verzeichnisse freizugeben, die Unterverzeichnisse eines exportierten Verzeichnisses sind.
Die zweite Zeile zeigt, wie Sie mehrere Exportregeln für ein Dateisystem festlegen. Der Lesezugriff ist auf die gesamte 192.168.33.0/24
erlaubt Bereich und Lese- und Schreibzugriff nur auf 192.168.33.3
IP Adresse. Die sync
Option weist NFS an, Änderungen auf die Festplatte zu schreiben, bevor es antwortet.
Die letzte Zeile ist selbsterklärend. Für weitere Informationen zu allen verfügbaren Optionen geben Sie man exports
ein in Ihrem Terminal.
Speichern Sie die Datei und exportieren Sie die Freigaben:
sudo exportfs -ar
Sie müssen den obigen Befehl jedes Mal ausführen, wenn Sie /etc/exports
ändern Datei. Wenn Fehler oder Warnungen vorliegen, werden diese auf dem Terminal angezeigt.
Verwenden Sie zum Anzeigen der aktuellen aktiven Exporte und ihres Status:
sudo exportfs -v
Die Ausgabe enthält alle Aktien mit ihren Optionen. Wie Sie sehen, gibt es auch Optionen, die wir nicht in /etc/exports
definiert haben Datei. Dies sind Standardoptionen und wenn Sie sie ändern möchten, müssen Sie diese Optionen explizit festlegen.
/srv/nfs4/backups
192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4 192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
Unter Ubuntu root_squash
ist standardmäßig aktiviert. Dies ist eine der wichtigsten Optionen in Bezug auf die NFS-Sicherheit. Es verhindert, dass Root-Benutzer, die von den Clients verbunden sind, Root-Rechte auf den gemounteten Freigaben haben, indem es Root-UID
zuordnet und GID
an nobody
/nogroup
UID
/GID
.
Damit die Benutzer auf den Client-Computern Zugriff haben, erwartet NFS, dass die Benutzer- und Gruppen-IDs des Clients mit denen auf dem Server übereinstimmen. Eine weitere Option ist die Verwendung der NFSv4-ID-Mapping-Funktion, die Benutzer- und Gruppen-IDs in Namen übersetzt und umgekehrt.
Das ist es. An diesem Punkt haben Sie einen NFS-Server auf Ihrem Ubuntu-Server eingerichtet. Sie können jetzt zum nächsten Schritt übergehen und die Clients konfigurieren und sich mit dem NFS-Server verbinden.
Firewall-Konfiguration #
Wenn Sie Jenkins auf einem Remote-Ubuntu-Server installieren, der durch eine Firewall geschützt ist, müssen Sie den Datenverkehr auf dem NFS-Port aktivieren:
sudo ufw allow from 192.168.33.0/24 to any port nfs
Überprüfen Sie die Änderung:
sudo ufw status
Die Ausgabe sollte zeigen, dass der Datenverkehr auf Port 2049
erfolgt ist erlaubt:
To Action From
-- ------ ----
2049 ALLOW 192.168.33.0/24
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Richten Sie die NFS-Clients ein #
Nachdem der NFS-Server eingerichtet und die Freigaben exportiert wurden, besteht der nächste Schritt darin, die Clients zu konfigurieren und die Remote-Dateisysteme einzuhängen.
Wir konzentrieren uns auf Linux-Systeme, aber Sie können die NFS-Freigabe auch auf MacOS- und Windows-Rechnern mounten.
Installieren des NFS-Clients #
Auf den Client-Rechnern müssen wir nur die Tools installieren, die zum Mounten eines entfernten NFS-Dateisystems erforderlich sind.
-
Installieren Sie den NFS-Client auf Debian und Ubuntu
Der Name des Pakets, das Programme zum Mounten von NFS-Dateisystemen auf Debian-basierten Distributionen enthält, ist
nfs-common
. Um es zu installieren, führen Sie Folgendes aus:sudo apt update
sudo apt install nfs-common
-
Installieren Sie den NFS-Client auf CentOS und Fedora
Installieren Sie auf Red Hat und seinen Derivaten die
nfs-utils
Paket:sudo yum install nfs-utils
Dateisysteme werden eingebunden #
Wir arbeiten auf dem Client-Rechner mit der IP 192.168.33.20
, die Lese- und Schreibzugriff auf /srv/nfs4/www
hat Dateisystem und Lesezugriff auf /srv/nfs4/backups
Dateisystem.
Erstellen Sie zwei neue Verzeichnisse für die Einhängepunkte:
sudo mkdir -p /backups
sudo mkdir -p /srv/www
Sie können die Verzeichnisse an jedem beliebigen Ort erstellen.
Mounten Sie die exportierten Dateisysteme mit dem mount
Befehl:
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www
Wobei 192.168.33.10
ist die IP des NFS-Servers. Sie können auch den Hostnamen anstelle der IP-Adresse verwenden, dieser muss jedoch vom Clientcomputer aufgelöst werden können. Dies geschieht normalerweise durch Zuordnen des Hostnamens zur IP in /etc/hosts
Datei.
Lassen Sie beim Mounten eines NFSv4-Dateisystems das NFS-Stammverzeichnis weg. Verwenden Sie /backups
, statt /srv/nfs4/backups
.
Überprüfen Sie, ob die Remote-Dateisysteme erfolgreich gemountet wurden, indem Sie entweder mount oder df
verwenden Befehl:
df -h
Der Befehl druckt alle gemounteten Dateisysteme. Die letzten beiden Zeilen sind die gemounteten Freigaben:
Filesystem Size Used Avail Use% Mounted on
udev 951M 0 951M 0% /dev
tmpfs 199M 676K 199M 1% /run
/dev/sda3 124G 2.8G 115G 3% /
tmpfs 994M 0 994M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 456M 197M 226M 47% /boot
tmpfs 199M 0 199M 0% /run/user/1000
192.168.33.10:/backups 124G 2.8G 115G 3% /backups
192.168.33.10:/www 124G 2.8G 115G 3% /srv/www
Um die Mounts beim Neustart dauerhaft zu machen, öffnen Sie die Datei /etc/fstab
Datei und fügen Sie die folgenden Zeilen hinzu::
sudo nano /etc/fstab
/etc/fstab192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0
192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
Um Informationen zu den verfügbaren Optionen beim Mounten eines NFS-Dateisystems zu erhalten, geben Sie man nfs
ein in Ihrem Terminal.
Eine weitere Option zum Mounten von Remote-Dateisystemen ist die Verwendung von autofs
Tool oder zum Erstellen einer systemd-Unit.
Teste NFS-Zugriff #
Testen wir den Zugriff auf die Freigaben, indem wir auf jeder von ihnen eine neue Datei erstellen.
Versuchen Sie zunächst, eine Testdatei im Verzeichnis /backups
zu erstellen Verzeichnis mit touch
Befehl:
sudo touch /backups/test.txt
Die Datei /backup
Dateisystem als schreibgeschützt exportiert und wie erwartet wird ein Permission denied
angezeigt Fehlermeldung:
touch: cannot touch ‘/backups/test’: Permission denied
Versuchen Sie als Nächstes, eine Testdatei in /srv/www
zu erstellen Verzeichnis als root mit sudo
Befehl:
sudo touch /srv/www/test.txt
Auch hier sehen Sie Permission denied
Nachricht.
touch: cannot touch ‘/srv/www’: Permission denied
Wenn Sie sich erinnern, /var/www
Verzeichnis gehört www-data
Benutzer, und diese Freigabe hat root_squash
Optionssatz, der den Root-Benutzer dem nobody
zuordnet user und nogroup
Gruppe, die keine Schreibberechtigungen für die Remote-Freigabe hat.
Angenommen, Sie haben eine www-data
Verwendung auf dem Client-Rechner mit derselben UID
und GID
Wie auf dem Remote-Server (was der Fall sein sollte, wenn Sie beispielsweise nginx auf beiden Maschinen installiert haben), können Sie versuchen, eine Datei als Benutzer www-data
zu erstellen :
sudo -u www-data touch /srv/www/test.txt
Der Befehl zeigt keine Ausgabe, was bedeutet, dass die Datei erfolgreich erstellt wurde.
Um dies zu überprüfen, listen Sie die Dateien in /srv/www
auf Verzeichnis:
ls -la /srv/www
Die Ausgabe sollte die neu erstellte Datei zeigen:
drwxr-xr-x 3 www-data www-data 4096 Apr 10 22:18 .
drwxr-xr-x 3 root root 4096 Apr 10 22:29 ..
-rw-r--r-- 1 www-data www-data 0 Apr 10 21:58 index.html
-rw-r--r-- 1 www-data www-data 0 Apr 10 22:18 test.txt
Unmounten des NFS-Dateisystems #
Wenn die Remote-NFS-Freigabe nicht mehr benötigt wird, können Sie sie wie jedes andere gemountete Dateisystem mit umount
aushängen Befehl.
Zum Beispiel, um /backup
zu unmounten teilen, würden Sie Folgendes ausführen:
sudo umount /backups
Wenn der Einhängepunkt in /etc/fstab
definiert ist entfernen Sie die Zeile oder kommentieren Sie sie aus, indem Sie #
hinzufügen am Anfang der Zeile.