Configurer un serveur NFS sous Linux pour partager un répertoire via NFS
Niveau : Avancé
Durée estimée : ~30 minutes
Objectif : Configurer un serveur NFS sous Linux pour partager un répertoire avec plusieurs clients, afin de faciliter l'automatisation des tâches courantes et l'audit de sécurité proactif.
Introduction
La gestion d'un stockage partagé sur un parc de serveurs est une exigence fondamentale pour maintenir des environnements de production soumis à de fortes contraintes de disponibilité. Le protocole NFS (Network File System) permet à un système de partager un répertoire via NFS sur le réseau, à la manière d'un NAS (Network Attached Storage). En déployant un serveur NFS sous Linux, vous pouvez offrir un accès centralisé aux fichiers à plusieurs clients NFS simultanément. Ce tutoriel explique comment configurer un serveur NFS sous Linux efficacement, en utilisant NFSv4.2 par défaut.
Ce guide utilise le mode de sécurité sec=sys (AUTH_SYS). Dans ce mode, le serveur fait intrinsèquement confiance au client pour l'identification des utilisateurs (UID/GID), sans aucune authentification cryptographique. Le contrôle d'accès repose uniquement sur le filtrage par adresse IP dans /etc/exports et sur les permissions UNIX standard des fichiers. Cette configuration convient parfaitement aux réseaux internes de confiance (par exemple au sein d'un environnement virtuel Proxmox), mais elle n'est pas recommandée pour les réseaux non fiables. Pour renforcer la sécurité, envisagez de mettre en place l'authentification Kerberos (par exemple sec=krb5, sec=krb5i ou sec=krb5p).
Prérequis
Avant de commencer, assurez-vous que les conditions suivantes sont remplies :
- Système d'exploitation : Ubuntu 22.04/24.04 LTS, Debian 12/13 ou CentOS/RHEL 9/AlmaLinux 10
- Logiciel requis :
nfs-kernel-server(2.6+) pour Ubuntu/Debian ounfs-utils(2.x+) pour CentOS/RHEL/AlmaLinux - Accès : accès
sudoourootsur toutes les machines - Réseau : les serveurs doivent pouvoir communiquer via un réseau privé.
- Connaissances requises : aisance avec la ligne de commande Linux.
Terminologie
Familiarisez-vous avec les concepts fondamentaux suivants avant de poursuivre :
- NFS (Network File System) : protocole permettant d'accéder à des fichiers via un réseau comme s'ils étaient stockés localement.
- Serveur NFS : la machine centrale qui héberge les fichiers et les met à disposition sur le réseau.
- Client NFS : la machine distante qui se connecte au serveur pour accéder aux fichiers partagés.
- Répertoire partagé (Shared Directory) : le dossier local du serveur qui sera mis à la disposition des clients.
- Export : le processus consistant à rendre un répertoire local accessible aux clients via le réseau.
- /etc/exports : le principal fichier de configuration utilisé par le démon NFS pour déterminer quels répertoires exporter et selon quelles règles d'accès.
- Montage (Mounting) : le processus consistant à rattacher un partage réseau distant à l'arborescence locale.
- Point de montage (Mount Point) : le répertoire local du client sur lequel le système de fichiers distant est rattaché.
- nfs-utils : le paquet logiciel contenant les utilitaires et démons nécessaires au client et au serveur NFS.
- RPC (Remote Procedure Call) : protocole qu'un programme peut utiliser pour demander un service à un programme situé sur un autre ordinateur.
- Portmapper / rpcbind : service qui associe les numéros de programmes RPC à des numéros de ports réseau, nécessaire à NFS pour négocier les connexions.
- Permissions : droits d'accès qui déterminent qui peut lire, écrire ou exécuter des fichiers.
- Accès en lecture seule (RO) : état de permission permettant aux clients de consulter les fichiers sans les modifier.
- Accès en lecture-écriture (RW) : état de permission permettant aux clients de modifier les fichiers partagés.
- root_squash : fonction de sécurité qui associe les requêtes de l'utilisateur root distant à un utilisateur non privilégié (nobody) afin d'empêcher tout accès root non autorisé.
- Pare-feu (Firewall) : système de sécurité réseau qui surveille et contrôle le trafic réseau entrant et sortant.
- Système de fichiers Linux : la méthode structurée utilisée par Linux pour stocker et organiser les fichiers sur disque.
- Nom d'hôte (Hostname) : étiquette lisible par l'humain attribuée à un appareil connecté à un réseau informatique.
- Adresse IP : identifiant numérique unique attribué à chaque appareil connecté à un réseau.
- Automount (montage automatique) : pratique consistant à monter automatiquement les systèmes de fichiers au démarrage.
- NAS (Network Attached Storage) : architecture de stockage au niveau fichier qui rend les données accessibles via un réseau.
Étape 1 : Installer les paquets requis
Commencez par installer les logiciels nécessaires sur le serveur et sur les clients. Le paquet nfs-utils fournit les démons et les outils nécessaires pour gérer le système de fichiers. Les installations modernes doivent utiliser NFSv4.2 par défaut : ce protocole est avec état (stateful) et simplifie les règles de pare-feu.
Sur le serveur NFS (Debian/Ubuntu) :
sudo apt update sudo apt install nfs-kernel-server
Sur le serveur NFS (CentOS/RHEL/AlmaLinux) :
sudo dnf install nfs-utils sudo systemctl enable --now rpcbind nfs-server
Dans une configuration NFSv4 pure, le service rpcbind n'est techniquement pas nécessaire pour le montage NFS lui-même. Il le devient toutefois si vous comptez utiliser la commande showmount (comme indiqué à l'Étape 5) pour découvrir les exports, ou si vous devez prendre en charge d'anciens clients NFSv3.
Sur le client NFS (Debian/Ubuntu) :
sudo apt update sudo apt install nfs-common
Sur le client NFS (CentOS/RHEL/AlmaLinux) :
sudo dnf install nfs-utils
L'installation doit se terminer correctement. Les services RPC et NFS nécessaires sont désormais installés et en cours d'exécution.
Étape 2 : Créer le répertoire partagé et définir les permissions NFS
Créez sur le serveur le répertoire que vous souhaitez exporter :
sudo mkdir -p /mnt/nfs_share
Définissez les permissions NFS appropriées afin que les clients puissent accéder aux fichiers. Dans ce tutoriel, nous attribuerons la propriété à l'utilisateur de service dédié et non privilégié, et accorderons les permissions de groupe adéquates.
Debian/Ubuntu :
sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share
CentOS/RHEL/AlmaLinux :
sudo chown nobody:nobody /mnt/nfs_share sudo chmod 2775 /mnt/nfs_share
Cette configuration ne contourne pas le modèle de permissions local de Linux : le contrôle d'accès NFS n'est donc pas votre unique couche de sécurité. La permission 2775 permet la collaboration en groupe en toute sécurité, sans enfreindre le principe du moindre privilège.
Étape 3 : Configurer le serveur NFS sous Linux
Pour définir les règles d'export, vous devez modifier le fichier /etc/exports sur le serveur.
Ouvrez le fichier :
sudo nano /etc/exports
Ajoutez la ligne suivante pour autoriser l'accès à un sous-réseau de clients précis (par exemple <CLIENT_SUBNET>) :
/mnt/nfs_share <CLIENT_SUBNET>(rw,sync,no_subtree_check,root_squash)
Le serveur exportera alors le répertoire avec les options suivantes :
rw: accorde l'accès en lecture-écriture (RW). Utilisezropour un accès en lecture seule (RO).sync: force l'écriture des modifications sur le disque avant de répondre au client.no_subtree_check: désactive la vérification de sous-arborescence (subtree), ce qui améliore la fiabilité.root_squash: associe explicitement les requêtes de l'utilisateurrootdistant à un utilisateur non privilégié (nobody). C'est le comportement par défaut, mais il convient de toujours l'indiquer explicitement à des fins d'audit. N'utilisezno_root_squashque dans des environnements strictement contrôlés.
Vous pouvez spécifier plusieurs clients en ajoutant d'autres adresses IP ou sous-réseaux séparés par des espaces sur la même ligne, ce qui ouvre l'accès à plusieurs machines.
Appliquez la configuration d'export :
Debian/Ubuntu :
sudo exportfs -a sudo systemctl restart nfs-kernel-server
CentOS/RHEL/AlmaLinux :
sudo exportfs -a sudo systemctl restart nfs-server
Le serveur exporte désormais activement le répertoire sur le réseau.
Étape 4 : Configurer le pare-feu
Vous devez autoriser le trafic NFS à travers le pare-feu du serveur afin de permettre les connexions des clients.
Avec UFW (Debian/Ubuntu) :
Sur une installation neuve d'Ubuntu, UFW est inactif par défaut. Sur un système Debian 13 vierge, il peut même ne pas être installé. Si vous comptez utiliser UFW, vérifiez qu'il est installé (sudo apt install ufw) et explicitement activé avant d'ajouter vos règles :
sudo ufw enable sudo ufw allow from <CLIENT_SUBNET> to any port nfs
Avec Firewalld (CentOS/RHEL/AlmaLinux) :
sudo firewall-cmd --permanent --zone=public --add-service=nfs sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind sudo firewall-cmd --permanent --zone=public --add-service=mountd sudo firewall-cmd --reload
AlmaLinux/RHEL (SELinux) : sur une installation vierge d'AlmaLinux, SELinux est en mode Enforcing. Pour le chemin par défaut /mnt/nfs_share utilisé dans ce guide, le contexte existant mnt_t est compatible avec le démon nfsd. En revanche, si vous prévoyez d'exporter des chemins non standard (par exemple /srv, /data ou /home/...), NFS ne pourra pas y écrire tant que vous n'aurez pas configuré SELinux en conséquence. Vous pouvez soit activer le booléen global (sudo setsebool -P nfs_export_all_rw 1), soit définir le bon fcontext avec semanage.
Les clients du sous-réseau autorisé peuvent désormais accéder aux services NFS.
Étape 5 : Vérifier l'export avec la commande showmount
Sur le serveur, vérifiez de manière proactive les exports actifs et l'état d'audit interne afin de garantir la conformité en matière de sécurité. Exécutez la commande suivante pour contrôler les options d'export exactes appliquées par le démon NFS :
sudo cat /var/lib/nfs/etab
Vous pouvez également utiliser sudo exportfs -v pour afficher la liste détaillée des exports.
Ensuite, depuis la machine cliente, utilisez la commande showmount pour vérifier que l'export est visible sur le réseau. Remplacez <SERVER_IP> par l'adresse IP réelle de votre serveur NFS.
showmount nécessite que le port 111 (rpcbind) soit ouvert sur le serveur. Si vous utilisez une configuration NFSv4 pure et que vous n'avez pas ouvert ce port, ignorez cette étape : vérifiez les exports sur le serveur avec sudo exportfs -v et testez l'accessibilité depuis le client en effectuant le montage à l'Étape 6.
showmount -e <SERVER_IP>
Sortie attendue :
Export list for <SERVER_IP>: /mnt/nfs_share <CLIENT_SUBNET>
Si l'export figure dans la liste, la configuration du serveur est correcte et accessible depuis le client.
Étape 6 : Monter le système de fichiers NFS sur le client
Pour utiliser le partage, vous devez monter le système de fichiers NFS sur un point de montage local du client.
Créez le point de montage :
sudo mkdir -p /mnt/client_share
Montez le répertoire :
sudo mount -t nfs -o vers=4.2 <SERVER_IP>:/mnt/nfs_share /mnt/client_share
Le partage est maintenant monté. Vous pouvez le vérifier en exécutant df -h pour voir le lecteur réseau rattaché. Préciser vers=4.2 garantit que le client utilise explicitement la version la plus récente du protocole, au lieu de rétrograder silencieusement vers NFSv3 ou NFSv4.0.
Pour que le client monte le système de fichiers NFS automatiquement au démarrage, vous pouvez configurer un montage statique en ajoutant une entrée dans /etc/fstab. Notez qu'il s'agit d'un montage statique ; les véritables configurations Automount dynamiques sont généralement gérées en production via autofs (/etc/auto.master).
Ouvrez /etc/fstab :
sudo nano /etc/fstab
Ajoutez la ligne suivante :
<SERVER_IP>:/mnt/nfs_share /mnt/client_share nfs auto,nofail,noatime,_netdev,hard,vers=4.2,timeo=600 0 0
Cela évite que le client ne bloque le processus de démarrage si le serveur est temporairement injoignable.
Vérification
Pour confirmer que les permissions NFS et les paramètres réseau sont corrects, effectuez un test de lecture/écriture depuis le client :
touch /mnt/client_share/test_file.txt ls -l /mnt/client_share/
Sortie attendue :
-rw-r--r-- 1 nobody nogroup 0 May 24 12:00 test_file.txt
Selon le système d'exploitation du client, le propriétaire du fichier s'affichera comme nobody nogroup (Debian/Ubuntu) ou nobody nobody (RHEL/AlmaLinux). C'est le comportement attendu du mappage d'identités (idmapping) de NFSv4 lorsque les requêtes sont correctement associées à un utilisateur non privilégié. En cas de divergences, vérifiez que le paramètre Domain de /etc/idmapd.conf est identique sur le serveur et sur le client.
Si le fichier est créé avec succès, vos clients peuvent communiquer avec le serveur et écrire des données comme prévu.
Annulation des modifications
Pour démonter le partage sur le client :
sudo umount /mnt/client_share
Supprimez l'entrée de /etc/fstab sur le client si vous en avez ajouté une.
Pour arrêter le partage du répertoire sur le serveur, supprimez la ligne correspondante de /etc/exports et appliquez les modifications :
Debian/Ubuntu :
sudo exportfs -a sudo systemctl restart nfs-kernel-server
CentOS/RHEL/AlmaLinux :
sudo exportfs -a sudo systemctl restart nfs-server
Pour supprimer complètement les paquets installés :
Debian/Ubuntu :
sudo apt remove nfs-kernel-server nfs-common
CentOS/RHEL/AlmaLinux :
sudo dnf remove nfs-utils
Cette action désactivera entièrement les fonctionnalités NFS sur vos machines.
Conclusion
Vous avez appris avec succès à configurer un serveur NFS sous Linux. Avec une configuration adaptée, vous pouvez partager un répertoire via NFS en toute sécurité avec plusieurs clients NFS. Cette configuration constitue une base fiable pour automatiser les tâches d'administration courantes et centraliser les journaux en vue d'audits de sécurité proactifs.
Version du document : 1.0
Dernière mise à jour : mai 2026
Responsable : Équipe de documentation technique