Qu'est-ce que NFS ?
Network File System (NFS) est l'un des plus anciens produits de partage de fichiers informatiques existant à ce jour. C'est toujours le plus populaire pour partager des répertoires de fichiers entre les systèmes UNIX et Linux. NFS permet aux serveurs de désigner des répertoires spécifiques à mettre à la disposition des hôtes désignés, puis permet aux systèmes clients de se connecter à ces répertoires en les montant localement.
NFS peut être sécurisé à l'aide de règles de pare-feu (iptables), de wrappers TCP (pour autoriser et refuser l'accès à l'hôte) et de SELinux (pour limiter la façon dont les protocoles de partage de fichiers peuvent partager les ressources NFS). Bien que NFS ait été intrinsèquement non sécurisé lors de sa création (les données sont partagées sans chiffrement et l'accès des utilisateurs est assez ouvert), les fonctionnalités de la version 4 de NFS ont contribué à améliorer la sécurité globale de NFS.
Qu'est-ce que le serveur NFS et les processus RPC ?
Le démarrage du service nfs-server démarre le serveur NFS et les autres processus RPC nécessaires pour traiter les demandes de systèmes de fichiers NFS partagés. Vous pouvez utiliser le nom abrégé "nfs " plutôt que "nfs-server ” lors du démarrage du service. Exemple :
# systemctl start nfs
Il s'agit du processus serveur NFS qui implémente la partie utilisateur du service NFS. La fonctionnalité principale est gérée par le module noyau nfsd. Le programme de l'espace utilisateur spécifie simplement le type de sockets sur lequel le serveur du noyau écoute, les versions NFS qu'il prend en charge et le nombre de threads du noyau nfsd qu'il utilise. Utilisez la commande ps –e pour afficher le nombre de threads en cours d'exécution.
# 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]
Le nombre de threads nfsd à exécuter est défini dans le /proc/fs/nfsd/threads dossier. Dans cet exemple, 8 threads nfsd sont spécifiés :
# cat /proc/fs/nfsd/threads 8
Le démarrage du service nfs-server démarre également les processus RPC. Vous pouvez utiliser la commande ps –e pour afficher les noms des processus RPC.
# 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
Ce processus implémente le protocole RPC Network Status Monitor (NSM), qui avertit les clients NFS lorsqu'un serveur NFS est redémarré sans être gracieusement arrêté. Ceci n'est pas utilisé avec NFSv4.
rpc.mountd
Il s'agit du démon de montage NFS qui implémente le côté serveur des demandes de montage des clients NFSv3. Il vérifie que le partage NFS demandé est actuellement exporté par le serveur NFS et que le client est autorisé à y accéder. Pour NFSv4, le démon rpc.mountd est requis uniquement sur le serveur NFS pour configurer les exportations.
rpc.idmapd
Cela fournit des appels ascendants de client et de serveur NFSv4, qui mappent entre les noms NFSv4 sur le fil (qui sont des chaînes sous la forme d'utilisateur @ domaine) et les UID et GID locaux. Pour que idmapd fonctionne avec NFSv4, /etc/idmapd.conf doit être configuré. Ce service est requis pour une utilisation avec NFSv4, mais pas lorsque tous les hôtes partagent le même nom de domaine DNS.
rpc.rquotad
Ce processus fournit des informations sur les quotas d'utilisateurs pour les utilisateurs distants. Il est lancé automatiquement par le service nfs et ne nécessite aucune configuration utilisateur. Les résultats sont utilisés par la commande quota pour afficher les quotas d'utilisateurs pour les systèmes de fichiers distants et par la commande edquota pour définir des quotas sur les systèmes de fichiers distants.
verrouillé
Il s'agit d'un thread du noyau qui s'exécute à la fois sur les clients et sur les serveurs. Il implémente le protocole Network Lock Manager (NLM), qui permet aux clients NFSv3 de verrouiller des fichiers sur le serveur. Il est démarré automatiquement chaque fois que le serveur NFS est exécuté et chaque fois qu'un système de fichiers NFS est monté.
nfslock
Le démarrage de ce service démarre les processus RPC qui permettent aux clients NFS de verrouiller les fichiers sur le serveur.
Comment configurer le serveur NFS et le client NFS dans CentOS/RHEL ?
Veuillez lire les messages ci-dessous pour configurer le serveur NFS et les machines clientes.
Guide du débutant sur NFS dans CentOS / RHELCentOS / RHEL 7 :Configuration d'un serveur NFS et d'un client NFS
Que sont les fichiers de configuration pour le serveur NFS ?
La configuration principale du serveur NFS est le fichier /etc/exports. Il s'agit du fichier que vous utilisez pour spécifier les répertoires que vous souhaitez partager avec les clients NFS. La syntaxe de ce fichier est :
Directory hostname(options)
La valeur de Directory doit être remplacée par le nom du répertoire que vous souhaitez partager (par exemple, /usr/share/doc). La valeur hostname doit être un nom d'hôte client qui peut être résolu en une adresse IP. La valeur des options est utilisée pour spécifier comment la ressource doit être partagée.
Par exemple, l'entrée suivante dans le fichier /etc/exports partagerait le répertoire /usr/share/doc avec le client NFS client01 (avec les options de lecture-écriture) et le client NFS client02 (avec l'option de lecture seule ):
# vi /etc/exports /usr/share/doc client01(rw) client02(ro)
Notez qu'il y a un espace entre les noms/options client01 et client02, mais pas d'espace entre le nom d'hôte et son option correspondante.
Comprendre le fichier /etc/exportsQuelles sont les options de partage NFS les plus couramment utilisées dans /etc/exports
Il existe de nombreuses options de partage NFS, notamment :
- rw :Partager en lecture-écriture. Gardez à l'esprit que les autorisations Linux normales s'appliquent toujours. (Notez qu'il s'agit d'une option par défaut.)
- ro :Partager en lecture seule.
- synchroniser :les modifications de données de fichiers sont apportées immédiatement au disque, ce qui a un impact sur les performances, mais est moins susceptible d'entraîner une perte de données. Sur certaines distributions, c'est la valeur par défaut.
- asynchrone :Le contraire de la synchronisation ; les modifications des données du fichier sont initialement apportées à la mémoire. Cela accélère les performances, mais est plus susceptible d'entraîner une perte de données. Sur certaines distributions, c'est la valeur par défaut.
- root_squash :Mappez l'utilisateur racine et le compte de groupe du client NFS aux comptes anonymes, généralement le compte personne ou le compte nfsnobody. Reportez-vous à la section suivante, « Mappage de l'ID utilisateur », pour plus de détails. (Notez qu'il s'agit d'une option par défaut.)
- no_root_squash :Mappez l'utilisateur racine et le compte de groupe du client NFS vers les comptes racine et de groupe locaux.
Comment obtenir des informations sur les performances des partages NFS ?
La commande nfsiostat fonctionne comme la commande iostat sauf uniquement pour les points de montage NFS. Le nfsiostat obtient une entrée de /proc/self/mountstats et fournit des informations sur les performances d'entrée/sortie des partages NFS montés dans le système. La commande nfsiostat est fournie par nfs-utils paquet.
Vous trouverez ci-dessous un exemple de sortie de la commande nfsiostat.
Le tableau ci-dessous affiche une brève description de chaque colonne dans la sortie about.
Champ | Description |
---|---|
op/s | C'est le nombre d'opérations par seconde. |
rpc bklog | Il s'agit de la longueur de la file d'attente du backlog. |
Ko/s | Il s'agit du nombre de Ko écrits/lus par seconde. |
Ko/opération | Il s'agit du nombre de Ko écrits/lus pour chaque opération. |
retransmettre | Il s'agit du nombre de retransmissions. |
RTT moyen (ms) | Il s'agit de la durée entre le moment où le noyau du client envoie la requête RPC et le moment où il reçoit la réponse. |
exe moyen (ms) | Il s'agit de la durée entre le moment où le client NFS envoie la requête RPC à son noyau et celui où la requête RPC est terminée, cela inclut le temps RTT ci-dessus. |
Vous trouverez ci-dessous une syntaxe pour utiliser la commande nfsiostat.
# nfsiostat --help Usage: nfsiostat [interval] [count] [options] [mount point] Options: --version show program's version number and exit -h, --help show this help message and exit Statistics Options: File I/O is displayed unless one of the following is specified: -a, --attr displays statistics related to the attribute cache -d, --dir displays statistics related to directory operations -p, --page displays statistics related to the page cache Display Options: Options affecting display format: -s, --sort Sort NFS mount points by ops/second -l LIST, --list=LIST only print stats for first LIST mount points
Ici,
intervalle – temps en secondes entre chaque rapport.
compter – nombre de rapports à générer à [intervalle] secondes d'intervalle. Si vous ne spécifiez pas le nombre ici, le rapport sera généré en continu à l'intervalle spécifié.
options – Les différentes options sont expliquées dans les exemples ci-dessous.
mount_point – vous pouvez spécifier un point de montage NFS spécifique pour lequel les statistiques doivent être affichées. Dans ce cas, seul le rapport pour le point de montage spécifié est généré.
Comment afficher les partages NFS actuellement partagés ?
La commande exportfs peut être utilisée sur le serveur NFS pour afficher ce qui est actuellement partagé :
# exportfs /share [world]
Comment partager une ressource NFS à l'aide de la ligne de commande ?
La commande exportfs peut également être utilisée pour partager temporairement une ressource, en supposant que les services NFS ont déjà été démarrés :
# exportfs -o ro 192.168.1.100:/usr/share/doc # exportfs /usr/share/doc 192.168.1.100 /share [world]
Le -o option est utilisée pour spécifier les options de partage. L'argument inclut le nom des systèmes avec lesquels partager, ainsi que le répertoire à partager, séparés par un caractère deux-points (:).
Si vous apportez des modifications au fichier /etc/exports, tout partage nouvellement ajouté sera activé après un redémarrage. Si vous souhaitez activer ces modifications immédiatement, exécutez la commande suivante :
# exportfs –a
Comment monter le partage NFS sur les systèmes clients ?
Une fois le partage NFS exporté depuis le serveur NFS, il peut être monté sur les clients éligibles à l'aide de la syntaxe de commande ci-dessous :
# mount [NFS server IP or hostname]:/share/path /client/path
Par exemple, si /exports/downloads est partagé à partir du serveur NFS 10.10.10.100, nous pouvons le monter sur le serveur client en tant que répertoire /mnt/downloads à l'aide de la commande ci-dessous :
# mount 10.10.10.100:/exports/downloads /mnt/downloads
Comment démonter un système de fichiers NFS ?
Une fois qu'un système de fichiers NFS est monté, le démonter est simple. Vous utilisez la commande umount avec le point de montage local ou le nom du système de fichiers distant. Par exemple :
# umount /mnt/nfs_mnt
ou :
# umount 10.10.10.100:/nfs_share
Comment obtenir une liste des clients connectés au serveur NFS ?
Pour obtenir une liste des clients connectés au serveur NFS, utilisez la commande showmount à partir d'une invite de terminal. Pour afficher également les répertoires auxquels les clients sont connectés, utilisez :
# showmount -a
Quel est le port par défaut utilisé par le serveur NFS ?
Par défaut, le serveur NFS utilise le port 2049.
Quels ports doivent être ouverts dans le pare-feu pour que NFS fonctionne ?
Les ports TCP et UDP 2049 (nfs) et 111 (rpcbind) doivent être ouverts pour qu'un serveur NFS fonctionne correctement. Le serveur doit également ouvrir les ports TCP et UDP 20048 pour que la commande showmount puisse interroger les répertoires partagés NFS disponibles à partir de rpc.mountd sur le serveur.
Comment afficher les partages NFS à partir des systèmes clients ?
À partir d'un système Linux client, vous pouvez utiliser la commande showmount pour voir quels répertoires partagés sont disponibles à partir d'un ordinateur sélectionné, comme dans cet exemple :
$ showmount -e server.example.com /export/myshare client.example.com /mnt/public *
La sortie de showmount montre que le répertoire partagé nommé /export/myshare est disponible uniquement pour l'hôte client.example.com. Le répertoire partagé /mnt/public, cependant, est accessible à tous.
Comment afficher les points de montage NFS montés sur le client NFS ?
Utilisez la commande ci-dessous pour afficher les points de montage NFS montés sur un serveur client NFS :
# mount -t nfs4
Exemple de sortie :
# mount -t nfs4 10.10.10.100:/mnt on /mnt/fed type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.20.200,local_lock=none,addr=10.10.20.200)
La sortie de la commande mount -t nfs4 affiche uniquement les systèmes de fichiers montés à partir de serveurs de fichiers NFS.
Comment monter des systèmes de fichiers NFS au démarrage ?
Pour configurer un système de fichiers NFS pour qu'il se monte automatiquement sur un point de montage spécifié chaque fois que vous démarrez votre système Linux, vous devez ajouter une entrée pour ce système de fichiers NFS au fichier /etc/fstab.
Voici le format pour ajouter un système de fichiers NFS à votre système local :
host:directory mountpoint nfs options 0 0
Le premier élément (hôte:répertoire) identifie l'ordinateur serveur NFS et le répertoire partagé. mountpoint est le point de montage local sur lequel le répertoire NFS est monté. Il est suivi du type de système de fichiers (nfs). Toutes les options liées au montage apparaissent ensuite dans une liste séparée par des virgules. (Les deux derniers zéros configurent le système pour ne pas vider le contenu du système de fichiers et pour ne pas exécuter fsck sur le système de fichiers.)
Voici des exemples d'entrées NFS dans /etc/fstab :
# vi /etc/fstab nfs_server01:/data /mnt/data nfs bg,rsize=8192,wsize=8192 0 0
Comment utiliser autofs pour monter des systèmes de fichiers NFS à la demande ?
La fonction autofs monte les systèmes de fichiers réseau à la demande lorsque quelqu'un essaie d'utiliser les systèmes de fichiers. Avec la fonction autofs configurée et activée, vous pouvez faire en sorte que tous les répertoires partagés NFS disponibles soient montés à la demande. Pour utiliser la fonction autofs, vous devez avoir installé le package autofs.
Avec autofs activé, si vous connaissez le nom d'hôte et le répertoire partagés par un autre ordinateur hôte, remplacez simplement (cd) par le répertoire de montage autofs (/net ou /var/autofs par défaut). Cela entraîne le montage automatique de la ressource partagée et sa mise à votre disposition. Les étapes suivantes expliquent comment activer la fonction autofs dans Fedora ou RHEL :
1. En tant qu'utilisateur root, ouvrez le fichier /etc/auto.master fichier et recherchez la ligne suivante :
# vi /etc/auto.master /net -hosts
Ainsi, le répertoire /net agit comme point de montage pour les répertoires partagés NFS auxquels vous souhaitez accéder sur le réseau.
2. Pour démarrer le service autofs dans CentOS/RHEL 7 ou un système ultérieur, saisissez ce qui suit en tant qu'utilisateur root :
# systemctl start autofs.service
3. Sur CentOS/RHEL 7 ou un système ultérieur, configurez le service autofs pour qu'il redémarre à chaque démarrage de votre système :
# systemctl enable autofs
Comment configurer firewalld sur le serveur NFS ?
Pour que le serveur NFS fonctionne, activez les services nfs, mountd et rpc-bind dans la zone appropriée de l'application firewall-config ou en utilisant firewall-cmd :
# firewall-cmd --add-service=nfs --zone=internal --permanent # firewall-cmd --add-service=mountd --zone=internal --permanent # firewall-cmd --add-service=rpc-bind --zone=internal --permanent