Ceci est une ancienne révision du document !
Table des matières
Dernière mise-à-jour : 2024/10/28 13:33
RH13408 - Gestion du Stockage en Réseau
Contenu du Module
- RH13408 - Gestion du Stockage en Réseau
- Présentation du Network File System (NFS)
- NFSv3
- Les Services et Processus Principaux du Serveur NFSv3
- Options d'un Partage NFSv3
- Commandes de Base de NFSv3
- NFSv4
- Différences entre NFSv4 et NFSv3
- LAB #1 - Configuration du Serveur NFSv4
- 1.1 - Désactivation de NFSv3
- 1.2 - Définition d'un Partage
- LAB #2 - Configuration du Client
- 2.1 - Montage Ephémère
- 2.2 - Montage Persistant
Présentation du Network File System (NFS)
Le Network File System (NFS) est un protocole Internet standard que Linux, UNIX et d'autres systèmes d'exploitation similaires utilisent comme système de fichiers réseau natif. NFS est une norme ouverte qui prend en charge les permissions Linux natives et les attributs du système de fichiers.
Par défaut, Red Hat 9 utilise la version 4.2 de NFS. RHEL prend entièrement en charge les protocoles NFSv3 et NFSv4. NFSv3 peut utiliser un protocole de transport TCP ou UDP, mais NFSv4 n'autorise que les connexions TCP.
Les serveurs NFS exportent des répertoires. Les clients NFS montent les répertoires exportés dans un répertoire local existant. Les clients NFS peuvent monter les répertoires exportés de plusieurs manières :
- Manuellement en utilisant la commande mount,
- De manière persistante au démarrage en configurant des entrées dans le fichier /etc/fstab,
- À la demande, en configurant une méthode de d'Automount.
Les méthodes d'Automount, comprennent :
- le service autofs,
- systemd.automount.
Il convient d'installer le paquet nfs-utils afin d'obtenir les outils clients pour le montage manuel, ou pour le montage automatique, des répertoires exportés.
Red Hat 9 prend également en charge le montage de répertoires partagés à partir de systèmes Microsoft Windows(R) en utilisant les mêmes méthodes que pour le protocole NFS, en utilisant les protocoles Server Message Block (SMB) ou Common Internet File System (CIFS). Les options de montage sont spécifiques au protocole et dépendent de la configuration du Windows ou du Samba.
NFSv3
Le protocole NFS a changé de manière significative entre NFSv3 et NFSv4. La méthode d'interrogation pour afficher les exportations disponibles est différente pour chaque version du protocole. NFSv3 utilise le protocole RPC, qui nécessite un serveur de fichiers prenant en charge les connexions NFSv3 pour exécuter le service rpcbind. Un client NFSv3 se connecte au service rpcbind sur le port 111 du serveur pour demander le service NFS. Le serveur répond en indiquant le port actuel du service NFS. La commande showmount est utilisée pour interroger les exportations disponibles sur un serveur NFSv3 basé sur RPC.
Les Services et Processus Principaux du Serveur NFSv3
La version NFSv3 utilise les services suivants :
Services | Fonction |
---|---|
nfsd | Démarre le service NFS ainsi que les processus RPC pour recevoir et traiter les demandes des clients |
nfslock | Démarre les processus RPC qui permettent aux clients de verrouiller les fichiers sur le serveur |
portmap | Gestion des réservations des ports pour les services RPC locaux afin que les services RPC distants puissent se connecter |
Options d'un Partage NFSv3
Certaines options, appliquées à un partage, modifient le comportement du serveur NFSv3 pour le partage concerné lors de son démarrage :
Option | Comportement |
---|---|
ro | Accès en lecture seule |
rw | Accès en lecture / écriture |
sync | Ecriture synchrone ( écriture immédiate sur disque ) |
async | Ecriture asynchrone ( écriture sur disque en utilisant une cache ) |
root_squash | Root perd ses prérogatives sur le partage concerné |
no_root_squash | Root garde ses prérogatives sur le partage concerné |
no_lock | Pas de verrous sur les fichiers accédés |
all_squash | Force la mapping de tous les utilisateurs vers l'utilisateur nobody |
anonuid | Fixe l'UID de l'utilisateur anonyme |
anongid | Fixe le GID de l'utilisateur anonyme |
Important : Si plusieurs options sont spécifiées, celles-ci doivent être séparées par des virgules.
Commandes de Base de NFSv3
Plusieurs commandes permettent de gérer et de s'informer sur l'activité du serveur NFSv3 :
Commande | Comportement |
---|---|
exportfs | Affiche les partages actifs sur le serveur courant |
nfsstat | Affiche les statistiques de l'activité NFS |
rpcinfo | Affiche les démons gérés en effectuant une requête RPC sur le serveur courant |
showmount | Affiche les partages actifs sur un serveur distant |
mount | Permet de monter un partage distant sur un répertoire local |
NFSv4
Différences entre NFSv4 et NFSv3
Le protocole NFSv4 a éliminé l'utilisation de l'ancien protocole RPC pour les transactions NFS. L'utilisation de la commande showmount sur un serveur qui ne prend en charge que NFSv4 s'interrompt sans recevoir de réponse car le service rpcbind n'est pas exécuté sur le serveur. Cependant, l'interrogation d'un serveur NFSv4 est plus simple que d'interroger un serveur NFSv3.
NFSv4 a introduit une arborescence d'exportation qui contient tous les chemins d'accès aux répertoires exportés par le serveur. Pour afficher tous les répertoires exportés, il convient de monter la racine (/) de l'arborescence d'exportation du serveur. Le montage de la racine de l'arborescence d'exportation permet de parcourir les chemins d'accès de tous les répertoires exportés, en tant qu'enfants du répertoire racine de l'arborescence mais ne monte aucun des répertoires exportés.
Le format de cette commande est le suivant :
# mkdir /mountpoint # mount -t nfs -o rw,sync server:/export /mountpoint
Important : L'option -o sync spécifie que toutes les transactions vers le système de fichiers exporté sont effectuées de manière synchrone, ce qui est fortement recommandée pour tous les montages réseau de production où les transactions doivent réussir sous peine d'être renvoyées en cas d'échec. Notez que seul, root, peut procéder aux montages.
Pour monter une exportation NFSv4 tout en parcourant l'arborescence de l'exportation montée, il convient de changer de répertoire pour prendre un chemin d'accès au répertoire exporté. Il est aussi possible utiliser la commande mount avec le nom complet du chemin d'accès d'un répertoire exporté pour monter un seul répertoire exporté.
A noter que, les répertoires exportés qui utilisent la sécurité Kerberos n'autorisent pas le montage ou l'accès à un répertoire lorsque vous parcourez une arborescence d'exportation, même si vous pouvez voir le chemin d'accès à l'exportation. Le montage de partages protégés par Kerberos nécessite une configuration supplémentaire du serveur et l'utilisation des informations d'identification de l'utilisateur Kerberos. Ce cas, ne fait pas partie de la certification RH134 mais est couvert dans la formation RH362 - Red Hat Security: Identity Management and Active Directory Integration.
LAB #1 - Configuration du Serveur NFSv4
[trainee@redhat9 ~]$ su - Password:
[root@redhat9 ~]# virsh list --all Id Name State ------------------------- 5 testvm1 running 8 testvm2 running
[root@redhat9 ~]# virsh console testvm2 Connected to domain 'testvm2' Escape character is ^] (Ctrl + ]) [Enter] [root@testvm2 ~]# systemctl enable --now nfs-server Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service. [root@testvm2 ~]# systemctl status nfs-server ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; prese> Active: active (exited) since Mon 2024-10-28 12:08:12 CET; 3s ago Docs: man:rpc.nfsd(8) man:exportfs(8) Process: 5309 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUC> Process: 5310 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Process: 5329 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then> Main PID: 5329 (code=exited, status=0/SUCCESS) CPU: 31ms Oct 28 12:08:12 testvm2.ittraining.loc systemd[1]: Starting NFS server and serv> Oct 28 12:08:12 testvm2.ittraining.loc systemd[1]: Finished NFS server and serv>
1.1 - Désactivation de NFSv3
[root@testvm2 ~]# nfsstat Server rpc stats: calls badcalls badfmt badauth badclnt 0 0 0 0 0
[root@testvm2 ~]# cat /etc/nfs.conf ... [nfsd] # debug=0 # threads=8 # host= # port=0 # grace-time=90 # lease-time=90 # udp=n # tcp=y # vers3=y # vers4=y # vers4.0=y # vers4.1=y # vers4.2=y rdma=y rdma-port=20049 ...
[root@testvm2 ~]# vi /etc/nfs.conf [root@testvm2 ~]# cat /etc/nfs.conf ... [nfsd] # debug=0 # threads=8 # host= # port=0 # grace-time=90 # lease-time=90 # udp=n # tcp=y vers3=n # vers4=y # vers4.0=y # vers4.1=y vers4.2=y rdma=y rdma-port=20049 ...
Disable all NFSv3-related services:
[root@testvm2 ~]# systemctl mask --now rpc-statd.service rpcbind.service rpcbind.socket Created symlink /etc/systemd/system/rpc-statd.service → /dev/null.ervice rpcbind.socket Created symlink /etc/systemd/system/rpcbind.service → /dev/null. Created symlink /etc/systemd/system/rpcbind.socket → /dev/null.
[root@testvm2 ~]# mkdir /etc/systemd/system/nfs-mountd.service.d [root@testvm2 ~]# vi /etc/systemd/system/nfs-mountd.service.d/v4only.conf [root@testvm2 ~]# cat /etc/systemd/system/nfs-mountd.service.d/v4only.conf [Service] ExecStart= ExecStart=/usr/sbin/rpc.mountd --no-tcp --no-udp
[root@testvm2 ~]# cat /proc/fs/nfsd/versions -3 +4 +4.1 +4.2
[root@testvm2 ~]# systemctl daemon-reload [root@testvm2 ~]# systemctl restart nfs-mountd [root@testvm2 ~]# systemctl status nfs-mountd ● nfs-mountd.service - NFS Mount Daemon Loaded: loaded (/usr/lib/systemd/system/nfs-mountd.service; static) Drop-In: /etc/systemd/system/nfs-mountd.service.d └─v4only.conf Active: active (running) since Mon 2024-10-28 12:44:22 CET; 10s ago Docs: man:rpc.mountd(8) Process: 1410 ExecStart=/usr/sbin/rpc.mountd --no-tcp --no-udp (code=exited> Main PID: 1412 (rpc.mountd) Tasks: 1 (limit: 11096) Memory: 940.0K CPU: 6ms CGroup: /system.slice/nfs-mountd.service └─1412 /usr/sbin/rpc.mountd --no-tcp --no-udp Oct 28 12:44:22 testvm2.ittraining.loc systemd[1]: Starting NFS Mount Daemon... Oct 28 12:44:22 testvm2.ittraining.loc rpc.mountd[1410]: mountd: No V2 or V3 li> Oct 28 12:44:22 testvm2.ittraining.loc rpc.mountd[1412]: Version 2.5.4 starting Oct 28 12:44:22 testvm2.ittraining.loc systemd[1]: Started NFS Mount Daemon.
1.2 - Définition d'un Partage
[root@testvm2 ~]# mkdir /mountpoint [root@testvm2 ~]# chmod 2770 /mountpoint [root@testvm2 ~]# chgrp users /mountpoint [root@testvm2 ~]# ls -ld /mountpoint/ drwxrws---. 2 root users 6 Oct 28 13:05 /mountpoint/
[root@testvm2 ~]# cd /mountpoint [root@testvm2 mountpoint]# touch test1.txt test2.txt [root@testvm2 mountpoint]# cd ~
[root@testvm2 ~]# vi /etc/exports [root@testvm2 ~]# cat /etc/exports /mountpoint 192.168.56.0/24(rw) 2001:db8::/32(rw)
[root@testvm2 ~]# firewall-cmd --permanent --add-service nfs success [root@testvm2 ~]# firewall-cmd --reload success
[root@testvm2 ~]# systemctl restart nfs-server [root@testvm2 ~]# systemctl status nfs-server ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; prese> Active: active (exited) since Mon 2024-10-28 13:10:35 CET; 10s ago Docs: man:rpc.nfsd(8) man:exportfs(8) Process: 1475 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUC> Process: 1476 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Process: 1486 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then> Main PID: 1486 (code=exited, status=0/SUCCESS) CPU: 30ms Oct 28 13:10:34 testvm2.ittraining.loc systemd[1]: Starting NFS server and serv> Oct 28 13:10:35 testvm2.ittraining.loc systemd[1]: Finished NFS server and serv>
LAB #2 - Configuration du Client NFSv4
<Code> [root@testvm2 ~]# [CTRL]+[VERR MAJ]+[5] [root@redhat9 ~]# </code>
[root@redhat9 ~]# virsh console testvm1 Connected to domain 'testvm1' Escape character is ^] (Ctrl + ]) [Enter] [root@testvm1 /]#
[root@testvm1 /]# rpm -qa | grep nfs-utils [root@testvm1 /]# dnf install -y nfs-utils
[root@testvm1 /]# groupadd trainee && useradd trainee -c Trainee -d /home/trainee -g trainee -G users -s /bin/bash
2.1 - Montage Ephémère
[root@testvm1 /]# mount -t nfs -o rw,sync 192.168.56.100:/mountpoint /mnt [172524.919003] FS-Cache: Loaded [172525.206140] Key type dns_resolver registered [172525.606078] NFS: Registering the id_resolver key type [172525.606089] Key type id_resolver registered [172525.606090] Key type id_legacy registered
[root@testvm1 /]# mount | grep mountpoint 192.168.56.100:/mountpoint on /mnt type nfs4 (rw,relatime,sync,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.56.50,local_lock=none,addr=192.168.56.100)
[root@testvm1 /]# ls -l /mnt ls: impossible d'ouvrir le répertoire '/mnt': Permission non accordée
[root@testvm1 /]# su - trainee [trainee@testvm1 ~]$ ls -l /mnt total 0 -rw-r--r--. 1 root users 0 28 oct. 13:59 test1.txt -rw-r--r--. 1 root users 0 28 oct. 13:59 test2.txt
[trainee@testvm1 ~]$ touch /mnt/test3.txt [trainee@testvm1 ~]$ ls -l /mnt total 0 -rw-r--r--. 1 root users 0 28 oct. 13:59 test1.txt -rw-r--r--. 1 root users 0 28 oct. 13:59 test2.txt -rw-r--r--. 1 trainee users 0 28 oct. 14:06 test3.txt
Copyright © 2024 Hugh Norris