4. Configurer le serveur NFS

Le rôle du serveur NFS est de mettre à disposition sur le réseau une partie de son système de fichiers local. On parle d'« exportation ».

Conformément à la présentation de la Section 2, « Protocole NFSv4 », on choisit une solution qui utilise les fonctions du noyau Linux.

4.1. Exporter une arborescence

Q66.

Quel est le paquet qui contient les outils nécessaires au fonctionnement du serveur NFS ? Installez ce paquet.

Interrogez les méta données du gestionnaire de paquets pour identifier le nom du paquet à installer.

Recherchez la chaîne nfs.*server avec le gestionnaire de paquets.

apt search --names-only nfs.*server
nfs-kernel-server/testing,now 1:2.8.3-1+b1 amd64 [installé]
  gestion du serveur NFS du noyau
sudo apt -y install nfs-kernel-server

Q67.

Quel est le fichier de configuration principal de gestion des exportations NFS ?

Recherchez dans le support Linux NFS-HOWTO.

Quel que soit le protocole utilisé, c'est toujours le fichier /etc/exports qui est employé. Ce fichier est présenté dans le guide Linux NFS-HOWTO. Le fichier fourni avec le paquet contient deux exemples complets de configuration NFSv3 et NFSv4 commentés. C'est ce dernier exemple que l'on adapte pour répondre aux questions suivantes.

cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
[Note] Note

Pour les tests à venir, les appels aux fonctions de sécurité Kerberos sont supprimés.

Q68.

Créez le répertoire /home/exports/home. Quelles sont les instructions d'exportation à ajouter au fichier de configuration pour ce répertoire ?

Consultez les supports Linux Linux NFS-HOWTO et Nfsv4 configuration. Vous pouvez également consulter les pages de manuel fournies avec le paquet du serveur NFS.

sudo mkdir -p /home/exports/home

En exploitant la documentation Nfsv4 configuration et l'exemple de configuration fournis dans le fichier de configuration, on applique les instructions de configuration suivantes dans le fichier /etc/exports :

Ajoutez les instructions d'exportation du dossier à destination de votre réseau IPv4.

cat << EOF | sudo tee -a /etc/exports

/home/exports           172.28.101.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
/home/exports/home      172.28.101.0/24(rw,sync,no_subtree_check)
EOF

Ajoutez aussi les instructions d'exportation du dossier à destination de votre réseau IPv6.

cat << EOF | sudo tee -a /etc/exports

/home/exports           2001:678:3fc:65::/64(rw,sync,fsid=0,crossmnt,no_subtree_check)
/home/exports/home      2001:678:3fc:65::/64(rw,sync,no_subtree_check)
EOF

Les adresses des réseaux IPv4 et IPv6 doivent bien sûr être adaptées à votre plan d'adressage.

Les options entre parenthèses sont documentées dans les pages de manuels exports : man 5 exports. Les éléments de la liste suivante sont extraits de cette documentation.

  • rw : autorise les requêtes en lecture et en écriture sur le volume NFS. Le comportement par défaut consiste à interdire toute requête susceptible de modifier le système de fichiers.

  • sync : ne répondre aux requêtes qu'après l'exécution de tous les changements sur le support réel.

  • fsid=0 : avec NFSv4, un système de fichiers particulier est la racine de tous les systèmes de fichiers partagés. Il est défini par fsid=root ou fsid=0, qui signifient exactement la même chose.

  • crossmnt : cette option permet aux clients de se déplacer du système de fichiers marqué crossmnt vers les systèmes de fichiers partagés montés dessus. Voir l'option nohide.

  • no_subtree_check : cette option neutralise la vérification des sous-répertoires, ce qui a des implications subtiles en matière de sécurité, mais peut améliorer la fiabilité dans certains cas. Si un sous-répertoire d'un système de fichiers est partagé, mais que le système de fichiers ne l'est pas, alors, à chaque requête NFS, le serveur doit non seulement vérifier que le fichier accédé se trouve dans le système de fichiers approprié (ce qui est facile), mais aussi qu'il se trouve dans l'arborescence partagée (ce qui est plus compliqué). Cette vérification s'appelle subtree_check.

Q69.

Comment l'exportation NFS effective ? Comment vérifier que les paramètres actifs sont corrects ?

Recherchez dans la liste des outils fournis avec le paquet nfs-kernel-server la commande qui permet de connaître l'état courant des exportations NFS.

On identifie la commande exportfs dans la liste des binaires fournis avec le paquet serveur NFS.

dpkg -L nfs-kernel-server | grep bin
/usr/sbin
/usr/sbin/exportfs
/usr/sbin/fsidd
/usr/sbin/nfsdcld
/usr/sbin/nfsdclddb
/usr/sbin/nfsdclnts
/usr/sbin/nfsdctl
/usr/sbin/nfsref
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
[Important] Important

Il est essentiel de redémarrer le service concerné après chaque modification d'un fichier de configuration.

sudo systemctl restart nfs-server
systemctl status nfs-server
● nfs-server.service - NFS server and services
     Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; preset: enabled)
     Active: active (exited) since Mon 2025-09-15 08:56:44 CEST; 27s ago
 Invocation: 9056b4826f4d4be688cb4ee9f1490f23
       Docs: man:rpc.nfsd(8)
             man:exportfs(8)
    Process: 2495 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
    Process: 2496 ExecStart=/bin/sh -c /usr/sbin/nfsdctl autostart || /usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
   Main PID: 2496 (code=exited, status=0/SUCCESS)
   Mem peak: 2.3M
        CPU: 38ms

sept. 15 08:56:44 srvr systemd[1]: Starting nfs-server.service - NFS server and services...
sept. 15 08:56:44 srvr sh[2498]: nfsdctl: lockd configuration failure
sept. 15 08:56:44 srvr systemd[1]: Finished nfs-server.service - NFS server and services.
[Note] Note

Le message d'erreur à propos du démon lockd est sans importance pour la version NFSv4.

Consultez la liste des entrées exportées via NFS avec la commande exportfs.

sudo exportfs
/home/exports   172.28.101.0/24
/home/exports   2001:678:3fc:65::/64
/home/exports/home
                172.28.101.0/24
/home/exports/home
                2001:678:3fc:65::/64

Vérifiez que la liste des exportations est visible et identique côté client en utilisant la commande showmount.

sudo showmount -e fe80::baad:caff:fefe:5
Export list for fe80::baad:caff:fefe:5:
/home/exports/home 2001:678:3fc:65::/64,172.28.101.0/24
/home/exports      2001:678:3fc:65::/64,172.28.101.0/24

4.2. utiliser la même arborescence entre clients et serveur

Il est impératif d'assurer la cohérence du nommage des arborescences entre les clients et le serveur. Cela évite toute confusion entre les différents interlocuteurs, d'un point de vue administration et support.

Il faut également garantir l'évolutivité en utilisant un point de montage dédié côté serveur. Ainsi, il est possible de déplacer ou de migrer le volume de stockage du serveur sans impacter les clients.

Q70.

Quel est le rôle du répertoire /home/exports/ dans l'exportation NFS ?

Recherchez la signification du paramètre fsid=0 dans les supports Linux NFS-HOWTO et Nfsv4 configuration.

On peut établir une analogie entre un serveur Web et un serveur NFS. L'option fsid=0 de la configuration du serveur NFS permet de définir une racine de montage, à l'instar d'un serveur Web. Le paramètre de configuration DocumentRoot /var/www du serveur Apache désigne la racine à partir de laquelle les pages Web publiées sont référencées. Cette racine est indépendante de l'arborescence du système de fichiers local du serveur.

Dans les deux cas, les clients des serveurs Web ou NFS n'ont aucune connaissance de l'arborescence de stockage du serveur.

Q71.

Comment créer le point de montage logique /ahome ?

Recherchez, dans les pages de manuels de la commande mount, les informations sur l'option bind.

Complétez le fichier système qui contient la liste des montages statiques et activez le nouveau montage du nouveau dossier /ahome.

Dans le cadre de ces travaux pratiques, les répertoires utilisateurs doivent être référencés à partir d'une racine nommée /ahome/. Ce nom logique doit rester constant, même si les volumes de stockage physique migrent, se déplacent, sont étendus, etc.

L'utilisation d'un montage local avec l'option bind de la commande mount permet de mettre en cohérence l'arborescence du serveur et de ses clients. Ainsi, le répertoire /ahome/ présente les mêmes objets, que l'on soit connecté au serveur ou à un client. Le schéma de nommage est donc cohérent.

Créez le répertoire de montage.

sudo mkdir /ahome

Associez le répertoire exporté par le service NFS au point de montage.

sudo mount --bind /home/exports/home /ahome

Enregistrez ce montage dans la configuration système permanente en éditant le fichier /etc/fstab.

cat << EOF | sudo tee -a /etc/fstab

/home/exports/home     /ahome  none    defaults,bind    0    0
EOF

Vérifiez l'ajout de la nouvelle entrée dans le fichier /etc/fstab.

grep -v ^# /etc/fstab
PARTUUID=95ed2e41-f56c-4cc0-a79e-c93a07e93c79 / ext4 rw,discard,errors=remount-ro,x-systemd.growfs 0 1
PARTUUID=71f5d30c-8e21-4372-81f6-11eb66815669 /boot/efi vfat defaults,umask=077 0 2

/home/exports/home     /ahome  none    defaults,bind    0    0

Activez le nouveau point de montage.

sudo mount -a

4.3. Créer un compte utilisateur sur le serveur

Dans cette section, vous créez un compte utilisateur local sur le serveur ainsi qu'un fichier lui appartenant. L'objectif est de préparer l'analyse de la correspondance entre les valeurs UID et GID entre le client et le serveur NFS. Voir Section 6, « Gérer les droits sur le système de fichiers NFS ».

Q72.

Comment créer un compte utilisateur local baptisé etu-nfs avec un répertoire utilisateur situé sous la racine /ahome ?

Recherchez dans les paramètres de la commande adduser celui qui permet de désigner le répertoire utilisateur.

Créez le compte utilisateur en utilisant l'option --home.

sudo adduser --home /ahome/etu-nfs etu-nfs
Nouveau mot de passe :
Retapez le nouveau mot de passe :
passwd : mot de passe mis à jour avec succès
Modifier les informations associées à un utilisateur pour etu-nfs
Entrer la nouvelle valeur, ou appuyer sur ENTER pour la valeur par défaut
        NOM []: NFS user
        Numéro de chambre []:
        Téléphone professionnel []:
        Téléphone personnel []:
        Autre []:
Is the information correct? [Y/n]

Affichez les attributs du compte utilisateur créé.

getent passwd etu-nfs
etu-nfs:x:1002:1002:NFS user,,,:/ahome/etu-nfs:/bin/bash

Les valeurs numériques des identifiants uid/gid jouent un rôle important dans la suite des manipulations. Voir Section 6, « Gérer les droits sur le système de fichiers NFS ».

Q73.

Comment créer un fichier avec l'identité de l'utilisateur etu-nfs côté serveur ?

Recherchez comment utiliser la commande su ou login pour prendre l'identité du nouvel utilisateur.

Utilisez l'une des deux commandes suivantes pour prendre l'identité de l'utilisateur etu-nfs.

  • sudo login

  • su - etu-nfs

Prenez l'identité de l'utilisateur etu-nfs.

su - etu-nfs
Mot de passe :
id
uid=1002(etu-nfs) gid=1002(etu-nfs) groupes=1002(etu-nfs),100(users)

Vérifiez que le chemin du répertoire utilisateur est correct.

pwd
/ahome/etu-nfs

Créez un fichier texte dans le répertoire utilisateur et affichez son masque de permissions.

echo "This file is mine" > myTextFile
ls -lAh myTextFile
-rw-rw-r-- 1 etu-nfs etu-nfs 18 15 sept. 15:00 myTextFile

Vous pouvez revenir à l'identité précédente en quittant la session avec la commande exit.