Network File System (NFS) ist ein verteiltes Dateisystemprotokoll, mit dem Sie Remoteverzeichnisse ü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.
Das NFS-Protokoll ist standardmäßig nicht verschlüsselt und bietet im Gegensatz zu Samba keine Benutzerauthentifizierung. Der Zugriff auf den Server wird durch die IP-Adressen oder Hostnamen der Clients beschränkt.
In diesem Tutorial erfahren Sie, wie Sie einen NFSv4-Server unter Ubuntu 18.04 einrichten. Wir zeigen Ihnen auch, wie Sie ein NFS-Dateisystem auf dem Client mounten.
Voraussetzungen #
Dieses Beispiel geht davon aus, dass Sie einen Server haben, auf dem Ubuntu 18.04 ausgeführt wird, und einen anderen, auf dem eine andere Linux-Distribution ausgeführt wird. Der Server und die Clients sollten in der Lage sein, über ein privates Netzwerk miteinander zu kommunizieren. Wenn Ihr Hosting-Provider keine privaten IP-Adressen anbietet, können Sie die öffentlichen 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 #
Wir beginnen mit der Installation und Konfiguration des NFS-Servers.
Installieren des NFS-Servers #
Aktualisieren Sie den Paketindex und installieren Sie das NFS-Serverpaket:
sudo apt update
sudo apt install nfs-kernel-server
Sobald die Installation abgeschlossen ist, werden die NFS-Dienste automatisch gestartet.
Standardmäßig ist auf Ubuntu 18.04 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.
NFS-Serverkonfigurationsoptionen werden in /etc/default/nfs-kernel-server
festgelegt und /etc/default/nfs-common
Dateien. Die Standardeinstellungen sind in unserem Fall ausreichend.
Erstellen der Dateisysteme #
Bei der Konfiguration eines NFSv4-Servers empfiehlt es sich, ein globales NFS-Stammverzeichnis zu verwenden und die tatsächlichen Verzeichnisse an den Freigabe-Mount-Punkt zu binden. In diesem Beispiel verwenden wir /srv/nfs4
Verzeichnis als NFS-Root.
Wir teilen zwei Verzeichnisse (/var/www
und /opt/backups
), mit unterschiedlichen Konfigurationseinstellungen, um besser zu erklären, wie die NFS-Mounts konfiguriert werden können.
Erstellen Sie das Exportdateisystem mit mkdir
Befehl:
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
Mounten Sie die aktuellen Verzeichnisse:
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
Um die Bind-Mounts dauerhaft zu machen, öffnen Sie /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 Dateisysteme zu definieren, die vom NFS-Server exportiert werden, die Freigabeoptionen und die Clients, die auf diese Dateisysteme zugreifen dürfen. Öffnen Sie dazu die Datei /etc/exports
Datei:
sudo nano /etc/exports
Die Datei /etc/exports
Die Datei enthält auch Kommentare, die beschreiben, wie ein Verzeichnis exportiert wird.
In unserem Fall müssen wir www
exportieren und backups
Verzeichnisse und erlauben den Zugriff nur von Clients auf 192.168.33.0/24
Netzwerk:
/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.110(rw,sync,no_subtree_check)
Die erste Zeile enthält fsid=0
die das NFS-Stammverzeichnis /srv/nfs4
definieren . 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. Es exportiert die Datei /srv/nfs4/backups
Verzeichnis und erlaubt nur lesenden Zugriff auf die gesamte 192.168.33.0/24
Bereich und sowohl Lese- als auch Schreibzugriff auf 192.168.33.3
. Die sync
Option weist NFS an, Änderungen auf die Festplatte zu schreiben, bevor es antwortet.
Die letzte Zeile sollte selbsterklärend sein. 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 -ra
Sie müssen den obigen Befehl jedes Mal ausführen, wenn Sie /etc/exports
ändern Datei. Falls 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.110(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-Berechtigungen für die gemounteten Freigaben haben. Es wird Root UID
zuordnen 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 in Ihrem Netzwerk eine Firewall ausführen, müssen Sie eine Regel hinzufügen, die den Datenverkehr auf dem NFS-Port zulässt.
Angenommen, Sie verwenden UFW
zum Verwalten Ihrer Firewall, um den Zugriff von 192.168.33.0/24
zuzulassen subnet müssen Sie den folgenden Befehl ausführen:
sudo ufw allow from 192.168.33.0/24 to any port nfs
So überprüfen Sie den Änderungslauf:
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.
Sie können die NFS-Freigabe auch auf macOS- und Windows-Rechnern mounten, aber wir konzentrieren uns auf Linux-Systeme.
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
. Führen Sie zur Installation 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.110
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. Sie können diese Verzeichnisse an jedem beliebigen Ort erstellen.
sudo mkdir -p /backups
sudo mkdir -p /srv/www
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, aber er muss vom Clientcomputer aufgelöst werden können. Dies geschieht normalerweise durch Zuordnen des Hostnamens zur IP in /etc/hosts
Datei.
Beim Mounten eines NFSv4-Dateisystems müssen Sie das NFS-Root-Verzeichnis weglassen, also statt /srv/nfs4/backups
Sie müssen /backups
verwenden .
Ü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
/dev/mapper/VolGroup00-LogVol00 38G 1.7G 36G 5% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 244M 0 244M 0% /dev/shm
tmpfs 244M 4.5M 240M 2% /run
tmpfs 244M 0 244M 0% /sys/fs/cgroup
/dev/sda2 1014M 87M 928M 9% /boot
tmpfs 49M 0 49M 0% /run/user/1000
192.168.33.10:/backups 9.7G 1.2G 8.5G 13% /backups
192.168.33.10:/www 9.7G 1.2G 8.5G 13% /srv/www
Um die Mounts beim Neustart dauerhaft zu machen, öffnen Sie die Datei /etc/fstab
Datei:
sudo nano /etc/fstab
und fügen Sie die folgenden Zeilen hinzu:
/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 weitere Informationen zu den verfügbaren Optionen beim Mounten eines NFS-Dateisystems zu erhalten, geben Sie man nfs
ein in Ihrem Terminal.
Eine weitere Möglichkeit, die entfernten Dateisysteme einzuhängen, 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 an /var/www
erinnern 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 testen, ob Sie eine Datei als Benutzer www-data
erstellen mit:
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 Jun 23 22:18 .
drwxr-xr-x 3 root root 4096 Jun 23 22:29 ..
-rw-r--r-- 1 www-data www-data 0 Jun 23 21:58 index.html
-rw-r--r-- 1 www-data www-data 0 Jun 23 22:18 test.txt
Unmounten des NFS-Dateisystems #
Wenn Sie die Remote-NFS-Freigabe nicht mehr benötigen, können Sie sie wie jedes andere gemountete Dateisystem mit dem Befehl umount aushängen. Zum Beispiel, um /backup
zu unmounten share würdest du 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.