Einführung in NFS
Ein Netzwerkdateisystem (NFS) ermöglicht es einem Server, Verzeichnishierarchien (Dateisysteme) mit entfernten Systemen über ein Netzwerk gemeinsam zu nutzen. NFS-Server exportieren das Verzeichnis und NFS-Clients mounten das exportierte Verzeichnis. Das Serververzeichnis erscheint den Client-Systemen dann so, als wären es lokale Verzeichnisse. NFS reduziert den Speicherbedarf und verbessert die Datenkonsistenz und -zuverlässigkeit, da Benutzer auf Dateien zugreifen, die auf einem zentralisierten Server gespeichert sind.
RedHat Linux 7 unterstützt NFS Version 2 (NFSv2) nicht. Die folgenden zwei Versionen werden unterstützt:
NFS-Version 3 (NFSv3).
NFS-Version 4 (NFSv4).
NFS basiert auf Remote Procedure Calls (RPC) zwischen Clients und Servern. RPC-Dienste werden vom rpcbind-Dienst gesteuert. Der rpcbind-Dienst ersetzt portmap, das in früheren Linux-Versionen verwendet wurde, um RPC-Programmnummern Kombinationen von IP-Adressen-Port-Nummern zuzuordnen. rpcbind antwortet auf Anfragen für RPC-Dienste und baut Verbindungen zum angeforderten RPC-Dienst auf. rpcbind wird mit NFSv4 nicht verwendet, da der Server auf dem bekannten TCP-Port 2049 lauscht. Die Mount- und Locking-Protokolle wurden ebenfalls in das NFSv4-Protokoll integriert, daher interagiert NFSv4 auch nicht mit den lockd- und rpc.statd-Daemons.
NFS-Server und RPC-Prozesse
Durch Starten des nfs-server-Dienstes werden der NFS-Server und andere RPC-Prozesse gestartet, die zum Bearbeiten von Anforderungen für gemeinsam genutzte NFS-Dateisysteme erforderlich sind. Sie können den Kurznamen „nfs verwenden “ statt „nfs-server “ beim Starten des Dienstes. Beispiel:
# systemctl start nfs
Dies ist der NFS-Serverprozess, der den Teil des NFS-Dienstes auf Benutzerebene implementiert. Die Hauptfunktionalität wird vom Kernelmodul nfsd übernommen. Das User-Space-Programm gibt lediglich an, auf welchen Sockets der Kernel-Server lauscht, welche NFS-Versionen er unterstützt und wie viele nfsd-Kernel-Threads er verwendet. Verwenden Sie den Befehl ps –e, um die Anzahl der laufenden Threads anzuzeigen.
# ps -ef | grep nfs root 9093 2 0 11:21 ? 00:00:00 [nfsd4_callbacks] root 9099 2 0 11:21 ? 00:00:00 [nfsd] root 9100 2 0 11:21 ? 00:00:00 [nfsd] root 9101 2 0 11:21 ? 00:00:00 [nfsd] root 9102 2 0 11:21 ? 00:00:00 [nfsd] root 9103 2 0 11:21 ? 00:00:00 [nfsd] root 9104 2 0 11:21 ? 00:00:00 [nfsd] root 9105 2 0 11:21 ? 00:00:00 [nfsd] root 9106 2 0 11:21 ? 00:00:00 [nfsd]
Die Anzahl der auszuführenden nfsd-Threads wird in /proc/fs/nfsd/threads definiert Datei. In diesem Beispiel werden 8 nfsd-Threads angegeben:
# cat /proc/fs/nfsd/threads 8
Das Starten des nfs-server-Dienstes startet auch die RPC-Prozesse. Sie können den Befehl ps –e verwenden, um die Namen der RPC-Prozesse anzuzeigen.
# ps -e | grep -i rpc 177 ? 00:00:00 rpciod 9080 ? 00:00:00 rpc.statd 9081 ? 00:00:00 rpc.idmapd 9082 ? 00:00:00 rpcbind 9083 ? 00:00:00 rpc.mountd 9084 ? 00:00:00 rpc.rquotad
rpc.statd
Dieser Prozess implementiert das NSM-RPC-Protokoll (Network Status Monitor), das NFS-Clients benachrichtigt, wenn ein NFS-Server neu gestartet wird, ohne ordnungsgemäß heruntergefahren zu werden. Dies wird nicht mit NFSv4 verwendet.
rpc.mountd
Dies ist der NFS-Mount-Daemon, der die Serverseite der Mount-Anforderungen von NFSv3-Clients implementiert. Es überprüft, ob die angeforderte NFS-Freigabe derzeit vom NFS-Server exportiert wird und ob der Client darauf zugreifen darf. Für NFSv4 ist der rpc.mountd-Daemon nur auf dem NFS-Server erforderlich, um die Exporte einzurichten.
rpc.idmapd
Dadurch werden NFSv4-Client- und -Server-Upcalls bereitgestellt, die zwischen On-the-Wire-NFSv4-Namen (bei denen es sich um Zeichenfolgen in Form von Benutzer@Domäne handelt) und lokalen UIDs und GIDs zugeordnet werden. Damit idmapd mit NFSv4 funktioniert, muss /etc/idmapd.conf konfiguriert werden. Dieser Dienst ist für die Verwendung mit NFSv4 erforderlich, jedoch nicht, wenn alle Hosts denselben DNS-Domänennamen verwenden.
rpc.rquotad
Dieser Prozess stellt Benutzerkontingentinformationen für Remotebenutzer bereit. Es wird automatisch vom nfs-Dienst gestartet und erfordert keine Benutzerkonfiguration. Die Ergebnisse werden vom Befehl quota verwendet, um Benutzerquoten für entfernte Dateisysteme anzuzeigen, und vom Befehl edquota, um Quoten für entfernte Dateisysteme festzulegen.
gesperrt
Dies ist ein Kernel-Thread, der sowohl auf Clients als auch auf Servern ausgeführt wird. Es implementiert das Network Lock Manager (NLM)-Protokoll, das es NFSv3-Clients ermöglicht, Dateien auf dem Server zu sperren. Es wird automatisch gestartet, wenn der NFS-Server ausgeführt wird und wenn ein NFS-Dateisystem gemountet wird.
nfslock
Das Starten dieses Dienstes startet die RPC-Prozesse, die es NFS-Clients ermöglichen, Dateien auf dem Server zu sperren.
NFS-Serverkonfiguration
Um mit der Konfiguration eines Systems als NFS-Server zu beginnen, installieren Sie das Paket nfs-utils:
# yum install nfs-utils
Die Hauptkonfigurationsdatei für den NFS-Server ist /etc/exports . Diese Datei speichert eine Liste exportierter Verzeichnishierarchien, die entfernte Systeme einhängen können. Das Format für Einträge ist:
export-point client1(options) [client2(options) ... ]
Der Exportpunkt ist der absolute Pfadname der zu exportierenden Verzeichnishierarchie. Export-Point kann von einem oder mehreren Client-Systemen mit jeweils spezifischen Optionen gemountet werden. Zwischen dem Kundenattribut und der offenen Klammer stehen keine Leerzeichen. Wenn keine Clientoptionen angegeben sind, gelten die folgenden Standardeinstellungen:
- ro:Schreibgeschützt . Client-Hosts können die im Dateisystem freigegebenen Daten nicht ändern. Um Client-Hosts zu erlauben, Änderungen am Dateisystem vorzunehmen, geben Sie die Option rw (Lesen/Schreiben) an.
- synchronisieren :Der NFS-Server antwortet nur auf Anfragen, nachdem Änderungen, die durch vorherige Anfragen vorgenommen wurden, auf die Festplatte geschrieben wurden. async gibt an, dass der Server nicht warten muss.
- wdelay :Der NFS-Server verzögert das Festschreiben von Schreibanforderungen, wenn er vermutet, dass eine weitere Schreibanforderung unmittelbar bevorsteht. Um die Verzögerung zu deaktivieren, verwenden Sie die Option no_wdelay. no_wdelay ist nur verfügbar, wenn auch die Standard-Synchronisierungsoption angegeben ist.
- root_squash :Verhindert, dass remote verbundene Root-Benutzer Root-Rechte haben, wodurch die Befugnisse des Remote-Root-Benutzers effektiv „gequetscht“ werden. Anfragen scheinen vom Benutzer nfsnobody zu kommen, einem nicht privilegierten Benutzer auf dem lokalen System, oder wie von anonuid angegeben. Um Root-Squash zu deaktivieren, geben Sie die Option no_root_squash an.
- no_all_squash :Ändert nicht die Zuordnung von Remote-Benutzern. Um jeden entfernten Benutzer (einschließlich Root) zu komprimieren, verwenden Sie die Option all_squash.
Um die Benutzer-ID (UID) und Gruppen-ID (GID) anzugeben, die der NFS-Server entfernten Benutzern zuweist, verwenden Sie die Optionen anonuid und anongid wie folgt:
export-point client(anonuid=uid,anongid=gid)
Mit den Optionen anonuid und anongid können Sie ein spezielles Benutzer- und Gruppenkonto erstellen, das entfernte NFS-Benutzer gemeinsam nutzen können. Standardmäßig werden Access Control Lists (ACLs) von NFS unterstützt. Um diese Funktion zu deaktivieren, geben Sie beim Exportieren des Dateisystems die Option no_acl an.
Sie können Platzhalterzeichen wie (*) und (?) in Clientnamen verwenden. Sie können auch Verzeichnisse zu allen Hosts in einem IP-Netzwerk exportieren. Geben Sie dazu als Adresse/Netzmaske ein Paar aus IP-Adresse und Netzmaske an. Jede der folgenden Formen ist gültig:
192.168.1.0/24 192.168.1.0/255.255.255.0
/etc/exports Beispiele
Im folgenden Beispiel kann ein Client-System mit der IP-Adresse 192.0.2.102 das Verzeichnis /export/ mit Lese-/Schreibberechtigungen mounten. Alle Schreibvorgänge auf die Festplatte sind asynchron:
/export/directory 192.0.2.102(rw,async)
Das folgende Beispiel exportiert das Verzeichnis /exports/apps auf alle Clients, konvertiert alle verbindenden Benutzer in den lokalen anonymen Benutzer nfsnobody und macht das Verzeichnis schreibgeschützt:
/exports/apps *(all_squash, ro)
Das folgende Beispiel exportiert das Verzeichnis /spreadsheets/proj1 mit Nur-Lese-Berechtigungen für alle Clients im Subnetz 192.168.1.0 und Lese-/Schreibberechtigungen für das Client-System mit dem Namen mgmtpc:
/spreadsheets/proj1 192.168.1.0/24(ro) mgmtpc(rw)
Starten des NFS-Dienstes
Der rpcbind-Dienst muss vor dem Start von nfs gestartet werden. Der folgende Befehl prüft, ob der rpcbind-Dienst aktiviert ist und ausgeführt wird.
# systemctl status rpcbind
Wenn der rpcbind-Dienst läuft, kann der nfs-Dienst gestartet werden. Starten Sie nfs neu, nachdem Sie Konfigurationsänderungen in /etc/exports vorgenommen haben, oder führen Sie den Befehl exportfs -a aus.
# systemctl start nfs
Überprüfen Sie, ob der nfslock-Dienst aktiviert ist und ausgeführt wird. Das Starten dieses Dienstes startet die RPC-Prozesse, die es NFS-Clients ermöglichen, Dateien auf dem Server zu sperren.
# systemctl status nfslock
Verwenden Sie den Befehl systemctl enable, um die Dienste beim Booten automatisch zu starten. Verwenden Sie den vollständigen Namen von nfs-server, wenn Sie den NFS-Dienst aktivieren.
# systemctl enable nfs-server
Geben Sie Konfigurationsoptionen und -argumente an, indem Sie sie in /etc/sysconfig/nfs platzieren . Diese Datei enthält mehrere Kommentare, die Sie bei der Angabe von Optionen als Argumente unterstützen. Verwenden Sie den Befehl showmount –e, um exportierte Dateisysteme anzuzeigen:
# showmount –e
exportfs-Dienstprogramm
Sie können einen NFS-Server auch über die Befehlszeile konfigurieren, indem Sie exportfs verwenden. Mit diesem Befehl kann der Root-Benutzer Verzeichnisse selektiv exportieren oder deexportieren, ohne /etc/exports zu ändern und ohne den NFS-Dienst neu zu starten. Die Syntax für den Befehl lautet:
# exportfs [options] [client:dir ...]
Das client-Argument ist der Name des Client-Systems, in das dir exportiert wird. Das Argument dir ist der absolute Pfadname des exportierten Verzeichnisses. Im Folgenden finden Sie eine Liste einiger Optionen:
- -r :Exportieren Sie die Einträge in /etc/exports erneut und synchronisieren Sie /var/lib/nfs/etab mit /etc/exports. Die Datei /var/lib/nfs/etab ist die Master-Exporttabelle. rpc.mountd liest diese Datei, wenn ein Client einen NFS-Mount-Befehl sendet.
- -a :Exportieren Sie die Einträge in /etc/exports, aber synchronisieren Sie nicht /var/lib/nfs/etab. Führen Sie exportfs –a aus, nachdem Sie Konfigurationsänderungen vorgenommen haben.
- -ich :Ignorieren Sie die Einträge in /etc/exports und verwenden Sie nur Kommandozeilenargumente.
- -u :Der Export eines oder mehrerer Verzeichnisse rückgängig machen.
- -o :Geben Sie die Client-Optionen wie in /etc/exports. angegeben an
NFS-Client-Konfiguration
Um mit der Konfiguration eines Systems als NFS-Client zu beginnen, installieren Sie das Paket nfs-utils:
# yum install nfs-utils
Verwenden Sie den Befehl mount, um exportierte Dateisysteme (NFS-Freigaben) auf der Clientseite einzuhängen. Syntax für den Befehl ist:
# mount -t nfs -o options host:/remote/export /local/directory
Im Folgenden finden Sie Beschreibungen der Argumente:
- -t nfs :Gibt an, dass der Dateisystemtyp nfs ist. Mit dieser Option verwendet mount NFSv4, wenn der Server dies unterstützt; andernfalls wird NFSv3 verwendet.
- -o Optionen :Eine durch Kommas getrennte Liste von Mount-Optionen
- Host :/remote/export:Der Hostname, der das Dateisystem exportiert, gefolgt von einem Doppelpunkt, gefolgt vom absoluten Pfadnamen der NFS-Freigabe
- /local/directory :Der Einhängepunkt auf dem Client-System
Um beispielsweise das von Host abc exportierte /home-Verzeichnis mit Nur-Lese-Berechtigungen (Option ro) auf dem lokalen Einhängepunkt /abc_home einzuhängen und zu verhindern, dass entfernte Benutzer höhere Privilegien erlangen, indem sie ein setuid-Programm ausführen (Option nosuid):
# mount -t nfs -o ro,nosuid abc:/home /abc_home
Um NFS-Freigaben beim Booten zu mounten, fügen Sie Einträge zur Dateisystem-Mount-Tabelle /etc/fstab hinzu. Einträge haben folgendes Format:
# vi /etc/fstab server:/exported-filesystem local_mount_point nfs options 0 0
Beispielsweise lautet der /etc/fstab-Eintrag, der den Mount-Befehl auf der vorherigen Seite repliziert:
# vi /etc/fstab abc:/home /abc_home nfs ro,nosuid 0 0
Der Befehl df zeigt gemountete Dateisysteme an, einschließlich NFS-gemountete Dateisysteme. Bei NFS-Mounts zeigt die Spalte „Dateisystem“ die Informationen server:/exported-filesystem an. Verwenden Sie das -T Option zum Einfügen einer „Typ“-Spalte:
# df -hT Filesystem Type Size Used Avail Use% Mounted on host03:/Dev nfs4 976M 2.5M 907M 1% /remote_devCentOS / RHEL 7 :Konfiguration eines NFS-Servers und NFS-Clients