Configuration et gestion du protocole NFS sous Linux

Fondamentaux du NFS

Le Network File System (NFS) est un protocole de partage de fichiers en réseau fonctionnant sur la couche TCP/IP. Il permet de dissocier le stockage du traitement applicatif, renforçant ainsi la sécurité et la centralisation des données. Contrairement à de nombreux services, NFS ne possède pas de port fixe : il s'appuie sur le service RPC (rpcbind) pour négocier dynamiquement les ports d'écoute.

Deux services sont impliqués :

  • rpcbind : agit comme un annuaire, mettant en relation le client et le serveur NFS.
  • nfs-server : orchestre l'ensemble des processus nécessaires au partage de fichiers.

Sur les distributions modernes, l'installation du paquet nfs-utils entraîne automatiquement celle de rpcbind en tant que dépendance.

Mécanisme de communication

  1. Le démon NFS côté serveur s'enregist auprès de rpcbind local en lui communiquant ses ports.
  2. Le client émet une requête vers son propre service rpcbind pour initier la connexion.
  3. Le rpcbind client interroge le rpcbind serveur pour récupérer les ports NFS enregistrés.
  4. Le serveur RPC répond au client avec les informations de port.
  5. Le client établit alors directement la communication avec le service NFS et monte le répertoire distant.

Note : rpcbind doit toujours être actif avant nfs-server. Les versions récentes des distributions gèrent cet ordre automatiquement.

Paramètres clés du fichier /etc/exports

Option Description
ro Accès en lecture seule
rw Accès en lecture/écriture (soumis aux permissions du système de fichiers)
root_squash Le root client est converti en utilisateur anonyme (no body) côté serveur
no_root_squash Le root client conserve ses privilèges (à éviter, risqué)
all_squash Tous les utilisateurs clients sont mappés vers un compte anonyme (recommandé)
no_all_squash Les identifiants des utilisateurs ordinaires sont conservés tels quels
anonuid / anongid Force le mappage vers un UID/GID précis (défaut : 65534/nobody)
sync Écriture synchrone en mémoire et sur disque (recommandé)
async Écriture asynchrone, plus rapide mais risquée en cas de crash

Mise en pratique : partage d'un répertoire

Côté serveur

Création du dossier destiné au partage :

[root@SRV01 ~]# mkdir -p /srv/nfs_partage

Définition de la politique de partage dans /etc/exports :

[root@SRV01 ~]# cat > /etc/exports << 'EOF'
/srv/nfs_partage 192.168.126.0/24(rw,all_squash,sync,anonuid=2000,anongid=2000)
EOF

Ici, tous les accès clients seront mappés vers l'UID 2000 et le GID 2000. Assurons-nous que le répertoire autorise l'écriture pour ce propriétaire :

[root@SRV01 ~]# groupadd -g 2000 nfsgrp
[root@SRV01 ~]# useradd -u 2000 -g 2000 -s /sbin/nologin nfsuser
[root@SRV01 ~]# chown -R nfsuser:nfsgrp /srv/nfs_partage
[root@SRV01 ~]# chmod 755 /srv/nfs_partage

Application de la configuration et démarrage du service :

[root@SRV01 ~]# exportfs -rav
exporting 192.168.126.0/24:/srv/nfs_partage
[root@SRV01 ~]# systemctl enable --now nfs-server.service

Côté client

Vérification des ressources disponibles sur le serveur :

[root@CLI01 ~]# showmount -e 192.168.126.100
Export list for 192.168.126.100:
/srv/nfs_partage 192.168.126.0/24

Création du point de montage et cnonexion :

[root@CLI01 ~]# mkdir -p /mnt/nfs_distant
[root@CLI01 ~]# mount -t nfs4 192.168.126.100:/srv/nfs_partage /mnt/nfs_distant
[root@CLI01 ~]# df -h /mnt/nfs_distant
Filesystem                      Size  Used Avail Use% Mounted on
192.168.126.100:/srv/nfs_partage  95G  2.8G   93G   3% /mnt/nfs_distant

Test d'écriture dans le partage :

[root@CLI01 ~]# echo "test" > /mnt/nfs_distant/fichier_test.txt
[root@CLI01 ~]# ls -l /mnt/nfs_distant/fichier_test.txt
-rw-r--r-- 1 2000 2000 5 Nov  1 20:00 /mnt/nfs_distant/fichier_test.txt

Côté serveur, le fichier appartient bien à nfsuser :

[root@SRV01 ~]# ls -l /srv/nfs_partage/fichier_test.txt
-rw-r--r-- 1 nfsuser nfsgrp 5 Nov  1 20:00 /srv/nfs_partage/fichier_test.txt

Persistance au démarrage via /etc/fstab

Pour que le montage soit effectué automatiquement à chaque boot, on peut ajouter une entrée dans /etc/fstab :

[root@CLI01 ~]# echo "192.168.126.100:/srv/nfs_partage /mnt/nfs_distant nfs4 defaults,_netdev 0 0" >> /etc/fstab

Cette approche présente un risque : si le serveur NFS est injoignable au boot, le client peut se bloquer. Une alternative consiste à utiliser un script de démarrage :

[root@CLI01 ~]# echo "mount -t nfs4 192.168.126.100:/srv/nfs_partage /mnt/nfs_distant" >> /etc/rc.d/rc.local
[root@CLI01 ~]# chmod +x /etc/rc.d/rc.local

Montage dynamique avec autofs

L'outil autofs permet de monter les partages NFS à la demande, c'est-à-dire uniquement lorsque l'on accède au point de montage. Après un délai d'inactivité configurable, le montage est automatiquement libéré.

Installation et démarrage :

[root@CLI01 ~]# yum install -y autofs
[root@CLI01 ~]# systemctl enable --now autofs

Ajustement du délai avant démontage automatique (exprimé en secondes) :

[root@CLI01 ~]# sed -i 's/^timeout.*/timeout = 10/' /etc/autofs.conf

Montage par découverte automatique

Le fichier /etc/auto.master définit les points de montage racine gérés par autofs :

[root@CLI01 ~]# cat >> /etc/auto.master << 'EOF'
/net    -hosts
EOF
[root@CLI01 ~]# systemctl restart autofs

On peut alors parcourir directement le partage en accédant au répertoire du serveur :

[root@CLI01 ~]# cd /net/192.168.126.100/srv/nfs_partage
[root@CLI01 nfs_partage]# ls
fichier_test.txt
[root@CLI01 ~]# mount | grep autofs
-hosts on /net/192.168.126.100/srv/nfs_partage type autofs (rw,relatime,fd=13,pgrp=2300,timeout=10,minproto=5,maxproto=5,offset,pipe_ino=45023)

Après 10 secondes sans accès, le montage disparaît de la liste des systèmes de fichiers actifs.

Montage ciblé avec sous-configuration

Pour un point de montage personnalisé, on crée une entrée dédiée dans /etc/auto.master ainsi qu'un fichier de map séparé :

[root@CLI01 ~]# cat >> /etc/auto.master << 'EOF'
/mnt/nfs_on_demand /etc/auto.nfs_custom
EOF

[root@CLI01 ~]# cat > /etc/auto.nfs_custom << 'EOF'
partage_srv  -fstype=nfs4  192.168.126.100:/srv/nfs_partage
EOF

[root@CLI01 ~]# systemctl restart autofs

L'accès au sous-répertoire déclenche le montage :

[root@CLI01 ~]# cd /mnt/nfs_on_demand/partage_srv
[root@CLI01 partage_srv]# df -h .
Filesystem                      Size  Used Avail Use% Mounted on
192.168.126.100:/srv/nfs_partage  95G  2.8G   93G   3% /mnt/nfs_on_demand/partage_srv

Après fermeture du répertoire et expiration du délai, le montage est libéré automatiquement :

[root@CLI01 ~]# cd ~
[root@CLI01 ~]# sleep 12 && df -h /mnt/nfs_on_demand/partage_srv
df: /mnt/nfs_on_demand/partage_srv: No such file or directory

Étiquettes: nfs Linux autofs rpcbind systemd

Publié le 12 juillet à 04h24