Network File System (NFS) ist ein verteiltes Dateisystemprotokoll, mit dem Sie entfernte Verzeichnisse über ein Netzwerk freigeben 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 eingeschränkt.
In dieser Anleitung gehen wir darauf ein, wie Sie einen NFSv4-Server unter Ubuntu 18.04 einrichten. Außerdem zeigen wir Ihnen, wie Sie ein NFS-Dateisystem auf dem Client einhängen.
Voraussetzungen
Dieses Beispiel setzt voraus, dass Sie einen Server mit Ubuntu 18.04 und einen weiteren mit einer beliebigen anderen Linux-Distribution haben. Der Server und die Clients sollten über ein privates Netzwerk miteinander kommunizieren können. Wenn Ihr Hosting-Provider keine privaten IP-Adressen anbietet, können Sie die öffentlichen IP-Adressen verwenden und die Server-Firewall so konfigurieren, dass der Verkehr auf Port 2049
nur von vertrauenswürdigen Quellen zugelassen wird.
Die Rechner in diesem Beispiel haben folgende IPs:
NFS Server IP: 192.168.33.10NFS Clients IPs: From the 192.168.33.0/24 range
Einrichten des NFS-Servers
Zunächst installieren und konfigurieren wir den NFS-Server.
Installation des NFS-Servers #
Erneuern Sie den Paketindex und installieren Sie das NFS-Server-Paket:
sudo apt update
sudo apt install nfs-kernel-server
Nach Abschluss der Installation werden die NFS-Dienste automatisch gestartet.
Standardmäßig ist unter Ubuntu 18.04 NFS Version 2 deaktiviert. Die Versionen 3 und 4 sind aktiviert. Sie können das überprüfen, indem Sie den folgenden cat
Befehl ausführen:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2 ist mittlerweile ziemlich alt und es gibt keinen Grund, es zu aktivieren.
Die Konfigurationsoptionen des NFS-Servers werden in /etc/default/nfs-kernel-server
und /etc/default/nfs-common
Dateien eingestellt. Die Standardeinstellungen sind in unserem Fall ausreichend.
Anlegen der Dateisysteme
Bei der Konfiguration eines NFSv4-Servers ist es eine gute Praxis, ein globales NFS-Root-Verzeichnis zu verwenden und die eigentlichen Verzeichnisse an den Freigabe-Einhängepunkt zu binden. In diesem Beispiel werden wir das /srv/nfs4
-Verzeichnis als NFS-Root verwenden.
Wir werden zwei Verzeichnisse (/var/www
und /opt/backups
) mit unterschiedlichen Konfigurationseinstellungen freigeben, um besser zu erklären, wie die NFS-Mounts konfiguriert werden können.
Das /var/www/
gehört dem Benutzer und der Gruppe www-data
und das /opt/backups
gehört dem Benutzer root
.
Erzeugen Sie das Export-Dateisystem mit dem 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 Bindungen dauerhaft zu machen, öffnen Sie die /etc/fstab
Datei:
sudo nano /etc/fstab
und fügen Sie die folgenden Zeilen ein:
/opt/backups /srv/nfs4/backups none bind 0 0/var/www /srv/nfs4/www none bind 0 0
Exportieren der Dateisysteme
Im nächsten Schritt definieren Sie die Dateisysteme, die vom NFS-Server exportiert werden sollen, die Freigabeoptionen und die Clients, die auf diese Dateisysteme zugreifen dürfen. Öffnen Sie dazu die Datei /etc/exports
:
sudo nano /etc/exports
/etc/exports
enthält auch Kommentare, die beschreiben, wie man ein Verzeichnis exportiert.In unserem Fall müssen wir die Verzeichnisse www
und backups
exportieren und den Zugriff nur von Clients aus dem 192.168.33.0/24
Netzwerk erlauben:
/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-Root-Verzeichnis /srv/nfs
definiert. Der Zugriff auf dieses NFS-Volume ist nur den Clients aus dem 192.168.33.0/24
Subnetz erlaubt. Die Option crossmnt
wird benötigt, um Verzeichnisse freizugeben, die Unterverzeichnisse eines exportierten Verzeichnisses sind.
In der zweiten Zeile wird gezeigt, wie Sie mehrere Exportregeln für ein Dateisystem festlegen. Sie exportiert das Verzeichnis /srv/nfs4/backups
und erlaubt nur Lesezugriff auf den gesamten 192.168.33.0/24
-Bereich und sowohl Lese- als auch Schreibzugriff auf 192.168.33.3
. Die Option sync
weist NFS an, Änderungen auf die Platte zu schreiben, bevor es antwortet.
Die letzte Zeile sollte selbsterklärend sein. Für weitere Informationen über alle verfügbaren Optionen geben Sie man exports
in Ihr Terminal ein.
Speichern Sie die Datei und exportieren Sie die Freigaben:
sudo exportfs -ra
Sie müssen den obigen Befehl jedes Mal ausführen, wenn Sie die /etc/exports
-Datei ändern. Wenn es irgendwelche Fehler oder Warnungen gibt, werden diese im Terminal angezeigt.
Um die aktuell aktiven Exporte und deren Status zu sehen, verwenden Sie:
sudo exportfs -v
Die Ausgabe enthält alle Freigaben mit ihren Optionen. Wie Sie sehen können, gibt es auch Optionen, die wir in der /etc/exports
-Datei nicht definiert haben. Das sind Standardoptionen und wenn Sie sie ändern wollen, müssen Sie diese Optionen explizit setzen.
/srv/nfs4/backups192.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/backups192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
Unter Ubuntu ist root_squash
standardmäßig aktiviert. Dies ist eine der wichtigsten Optionen bezüglich der NFS-Sicherheit. Sie verhindert, dass Root-Benutzer, die von den Clients aus verbunden sind, Root-Rechte auf den eingehängten Freigaben haben. Es wird Root UID
und GID
auf nobody
nogroup
UID
GID
zuordnen.
Damit die Benutzer auf den Client-Rechnern Zugriff haben, erwartet NFS, dass die Benutzer- und Gruppen-IDs der Clients mit denen des Servers übereinstimmen. Eine andere Möglichkeit ist die Verwendung der NFSv4-Funktion idmapping, die Benutzer- und Gruppen-IDs in Namen übersetzt und umgekehrt.
Das war’s. An diesem Punkt haben Sie einen NFS-Server auf Ihrem Ubuntu-Server eingerichtet. Sie können nun zum nächsten Schritt übergehen und die Clients konfigurieren und mit dem NFS-Server verbinden.
Firewall-Konfiguration
Wenn Sie eine Firewall in Ihrem Netzwerk betreiben, müssen Sie eine Regel hinzufügen, die den Verkehr auf dem NFS-Port freigibt.
Angenommen, Sie verwenden UFW
zur Verwaltung Ihrer Firewall, um den Zugriff aus dem 192.168.33.0/24
-Subnetz zu erlauben, müssen Sie den folgenden Befehl ausführen:
sudo ufw allow from 192.168.33.0/24 to any port nfs
Um die Änderung zu überprüfen, führen Sie aus:
sudo ufw status
Die Ausgabe sollte zeigen, dass der Verkehr auf Port 2049
erlaubt ist:
To Action From-- ------ ----2049 ALLOW 192.168.33.0/24 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6)
Einrichten der NFS-Clients
Nun, da der NFS-Server eingerichtet ist und Freigaben exportiert wurden, werden im nächsten Schritt die Clients konfiguriert und die entfernten Dateisysteme eingehängt.
Sie können die NFS-Freigabe auch auf macOS- und Windows-Rechnern einhängen, aber wir werden uns auf Linux-Systeme konzentrieren.
Installieren des NFS-Clients
Auf den Client-Rechnern müssen wir nur die Tools installieren, die zum Einhängen eines entfernten NFS-Dateisystems erforderlich sind.
-
NFS-Client auf Debian und Ubuntu installieren
Der Name des Pakets, das Programme zum Einhängen von NFS-Dateisystemen auf Debian-basierten Distributionen enthält, lautet
nfs-common
. Zur Installation führen Sie aus:sudo apt update
sudo apt install nfs-common
-
NFS-Client auf CentOS und Fedora installieren
Auf Red Hat und seinen Derivaten installieren Sie das Paket
nfs-utils
:sudo yum install nfs-utils
Dateisysteme einhängen
Wir arbeiten auf dem Client-Rechner mit IP 192.168.33.110
der Lese- und Schreibzugriff auf das /srv/nfs4/www
-Dateisystem und nur Lesezugriff auf das /srv/nfs4/backups
-Dateisystem hat.
Erstellen Sie zwei neue Verzeichnisse für die Einhängepunkte. Sie können diese Verzeichnisse an einem beliebigen Ort anlegen.
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
die IP des NFS-Servers ist. Sie können auch den Hostnamen anstelle der IP-Adresse verwenden, aber er muss vom Client-Rechner auflösbar sein. Dies geschieht in der Regel durch Zuordnung des Hostnamens zur IP in der /etc/hosts
Datei.
Wenn Sie ein NFSv4-Dateisystem einhängen, müssen Sie das NFS-Root-Verzeichnis weglassen, also müssen Sie statt /srv/nfs4/backups
/backups
verwenden.
Überprüfen Sie, ob die entfernten Dateisysteme erfolgreich eingehängt wurden, indem Sie entweder den Befehl mount oder df
verwenden:
df -h
Der Befehl gibt alle eingehängten Dateisysteme aus. Die letzten beiden Zeilen sind die eingehängten Freigaben:
Filesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup00-LogVol00 38G 1.7G 36G 5% /devtmpfs 236M 0 236M 0% /devtmpfs 244M 0 244M 0% /dev/shmtmpfs 244M 4.5M 240M 2% /runtmpfs 244M 0 244M 0% /sys/fs/cgroup/dev/sda2 1014M 87M 928M 9% /boottmpfs 49M 0 49M 0% /run/user/1000192.168.33.10:/backups 9.7G 1.2G 8.5G 13% /backups192.168.33.10:/www 9.7G 1.2G 8.5G 13% /srv/www
Um die Einhängungen bei einem Neustart dauerhaft zu machen, öffnen Sie die /etc/fstab
Datei:
sudo nano /etc/fstab
und fügen Sie die folgenden Zeilen hinzu:
192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev0 0192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev0 0
Um weitere Informationen über die verfügbaren Optionen beim Einhängen eines NFS-Dateisystems zu erhalten, geben Sie man nfs
in Ihr Terminal ein.
Eine weitere Möglichkeit, die entfernten Dateisysteme einzuhängen, besteht darin, entweder das Werkzeug autofs
zu verwenden oder eine systemd-Unit zu erstellen.
Testen des NFS-Zugriffs
Lassen Sie uns den Zugriff auf die Freigaben testen, indem wir für jede von ihnen eine neue Datei erstellen.
Zunächst versuchen Sie, mit dem touch
Befehl eine Testdatei im /backups
Verzeichnis zu erstellen:
sudo touch /backups/test.txt
Das /backup
Dateisystem wird als schreibgeschützt exportiert und Sie erhalten erwartungsgemäß eine Permission denied
Fehlermeldung:
touch: cannot touch ‘/backups/test’: Permission denied
Als Nächstes versuchen Sie, mit dem sudo
Befehl eine Testdatei im /srv/www
Verzeichnis als Root zu erstellen:
sudo touch /srv/www/test.txt
Auch hier erhalten Sie die Permission denied
Meldung.
touch: cannot touch ‘/srv/www’: Permission denied
Wenn Sie sich erinnern, dass das /var/www
-Verzeichnis dem www-data
-Benutzer gehört und diese Freigabe die root_squash
Option gesetzt, die den Root-Benutzer auf den nobody
-Benutzer und die nogroup
-Gruppe abbildet, die keine Schreibrechte auf die entfernte Freigabe hat.
Angenommen, Sie haben auf dem Client-Rechner einen www-data
mit den gleichen UID
und GID
wie auf dem Remote-Server (was der Fall sein sollte, wenn bspw, Sie nginx auf beiden Rechnern installiert haben), können Sie testen, ob Sie eine Datei als Benutzer www-data
erstellen können:
sudo -u www-data touch /srv/www/test.txt
Der Befehl zeigt keine Ausgabe, was bedeutet, dass die Datei erfolgreich erstellt wurde.
Um das zu überprüfen, listen Sie die Dateien im /srv/www
Verzeichnis auf:
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
NFS-Dateisystem aushängen
Wenn Sie die entfernte NFS-Freigabe nicht mehr benötigen, können Sie sie wie jedes andere eingehängte Dateisystem mit dem Befehl umount aushängen. Um zum Beispiel die /backup
-Freigabe auszuhängen, würden Sie ausführen:
sudo umount /backups
Wenn der Einhängepunkt in der Datei /etc/fstab
definiert ist, stellen Sie sicher, dass Sie die Zeile entfernen oder auskommentieren, indem Sie #
am Anfang der Zeile hinzufügen.
Abschluss
In dieser Anleitung haben wir Ihnen gezeigt, wie Sie einen NFS-Server einrichten und wie Sie die entfernten Dateisysteme auf den Client-Rechnern einhängen. Wenn Sie NFS in der Produktion einsetzen und sensible Daten freigeben, ist es eine gute Idee, die Kerberos-Authentifizierung zu aktivieren.
Als Alternative zu NFS können Sie SSHFS verwenden, um entfernte Verzeichnisse über eine SSH-Verbindung einzuhängen. SSHFS ist standardmäßig verschlüsselt und viel einfacher zu konfigurieren und zu verwenden.