NFS : partage réseau sécurisé et rapide
Mise à jour :
Le Network File System, plus connu sous le nom de NFS, est un protocole qui permet de partager des fichiers sur un réseau comme s’ils étaient stockés localement. Il a été développé à l’origine par Sun Microsystems et reste aujourd’hui un pilier du partage de fichiers dans les environnements Unix et Linux. Grâce à NFS, on peut centraliser le stockage tout en facilitant l’accès aux données depuis plusieurs machines.
Dans ce guide, je vais expliquer comment installer, configurer, sécuriser et optimiser un serveur NFS, tout en partageant des conseils concrets pour l’utiliser efficacement au quotidien.
Un peu d’histoire
NFS a été introduit en 1984 par Sun Microsystems. Dès le départ, son objectif était clair : offrir un moyen standardisé pour accéder à des fichiers sur un réseau, sans se soucier des détails sous-jacents. Au fil du temps, le protocole a évolué. Les premières versions, comme NFS v2, étaient limitées et peu sécurisées. NFS v3 a apporté des améliorations majeures, notamment la prise en charge de fichiers plus volumineux. Puis est arrivée NFS v4, avec des fonctionnalités de sécurité avancées, la gestion des états et une meilleure compatibilité avec Internet.
Pourquoi utiliser NFS ?
À mon avis, l’un des plus grands atouts de NFS, c’est sa simplicité. Il ne
nécessite pas de logiciel client spécifique et s’intègre naturellement au
système de fichiers. On peut monter un répertoire distant via une simple
commande mount et il devient immédiatement accessible, comme n’importe quel
autre répertoire local.
NFS est encore largement utilisé dans les entreprises pour plusieurs raisons :
- Il permet de centraliser les fichiers : plus besoin de copier des données sur chaque poste.
- Il facilite la sauvegarde et la restauration : les données étant stockées en un seul endroit, il suffit de sauvegarder le serveur.
- Il améliore la collaboration entre utilisateurs : plusieurs postes peuvent accéder au même fichier simultanément.
- Il s’intègre facilement avec d’autres services Linux, comme les quotas disque, SELinux ou encore Kerberos pour la sécurité.
Bref, que ce soit dans un petit labo ou dans un centre de données, NFS reste une solution simple, efficace et éprouvée pour le partage de fichiers.
Installation et configuration de NFS sur Linux
Configurer un serveur NFS sous Linux est un processus assez direct, mais il demande une certaine rigueur. À mon avis, c’est une bonne occasion d’automatiser un peu son infrastructure avec des scripts ou des outils comme Ansible. Commençons par la base.
Sur les systèmes basés sur Debian (comme Ubuntu) :
sudo apt updatesudo apt install nfs-kernel-serverSur les distributions basées sur Red Hat (comme CentOS ou Rocky Linux) :
sudo dnf install nfs-utilsIl faut aussi s’assurer que le service est activé et démarré :
sudo systemctl enable --now nfs-serverConfiguration de NFS
NFS v4 a introduit un certain nombre d’options spécifiques pour affiner
la configuration des exports, des montages et du comportement du protocole. Ces
paramètres sont utilisés dans les fichiers /etc/exports, /etc/fstab, ou en
ligne de commande avec mount. À mon avis, bien comprendre ces options est
indispensable pour un déploiement propre, performant et sécurisé.
Paramètres du fichier /etc/exports coté serveur
Ce fichier contrôle ce que le serveur NFS partage et comment.
Syntaxe générale :
<répertoire> <hôte>(<options>)Options principales :
rw: autorise lecture et écriture.ro: partage en lecture seule.sync: écrit les modifications sur disque immédiatement (plus sûr, moins rapide).async: répond avant d’écrire les modifications (meilleures performances, plus risqué).no_root_squash: autorise root du client à agir comme root sur le serveur (dangereux).root_squash: transforme root du client en utilisateur anonyme (par défaut).all_squash: transforme tous les utilisateurs en utilisateur anonyme (nobody).anonuid=UID,anongid=GID: UID/GID à utiliser pour l’utilisateur anonyme.no_subtree_check: désactive la vérification du sous-arbre exporté (recommandé).subtree_check: vérifie que les fichiers exportés appartiennent au bon sous-répertoire.fsid=0: désigne la racine exportée (obligatoire pour NFSv4).crossmnt: autorise la traversée des systèmes de fichiers montés sous la racine.sec=krb5|krb5i|krb5p: force l’utilisation de Kerberos pour l’authentification.insecure: autorise les connexions depuis des ports clients supérieurs à 1024 (non recommandé).
Exemple :
/srv/nfs4 192.168.1.0/24(rw,fsid=0,no_subtree_check,crossmnt,sec=krb5p)Paramètres de montage (mount et /etc/fstab) coté client
Ces options sont passées par le client lors du montage du partage NFS.
Options de base :
vers=4,vers=4.1,vers=4.2: force la version NFS.minorversion=1: précise la version mineure (utile avec certains noyaux).nfsvers=4: équivalent àvers=4.proto=tcp: protocole utilisé (TCP obligatoire avec NFSv4).port=n: spécifie un port personnalisé (rarement utilisé avec v4).nolock: désactive le verrouillage de fichiers (inutile en NFSv4).hard: tentatives infinies en cas de coupure réseau (comportement par défaut).soft: échoue après un délai en cas de coupure (moins sûr).intr: permet d’interrompre un processus bloqué sur NFS (obsolète dans v4).noatime: n’enregistre pas la date de dernier accès (améliore les performances).rsize=xxx,wsize=xxx: taille des blocs de lecture/écriture (en octets).timeo=n: délai avant re-tentative RPC (en dixièmes de seconde).retrans=n: nombre de tentatives RPC avant échec.sec=krb5|krb5i|krb5p: niveau de sécurité Kerberos (à synchroniser avec le serveur).nconnect=n: nombre de connexions TCP simultanées (améliore les performances).lookupcache=all|positive|none: comportement du cache de recherche de fichiers.
Exemple optimisé :
mount -t nfs4 -o vers=4.1,sec=krb5p,rsize=1048576,wsize=1048576,nconnect=4,noatime serveur:/ /mnt/nfsParamètres liés à idmapd (résolution des UID/GID)
Le fichier /etc/idmapd.conf permet de mapper les UID et GID entre client et
serveur.
Sections principales :
[General]Domain = example.com: doit être identique sur tous les hôtes.
[Mapping]Nobody-User = nobodyNobody-Group = nogroup
Important : l’absence de correspondance UID/GID entre machines provoque des
erreurs de permission visibles sous forme de fichiers appartenant à nobody.
Commandes utiles pour vérifier les options actives
- Voir les exports côté serveur :
sudo exportfs -v- Voir les montages actifs côté client :
mount | grep nfs- Tester les performances de lecture/écriture :
dd if=/dev/zero of=/mnt/nfs/testfile bs=1M count=100 oflag=directOptimisation des performances avec NFSv4 (avec détails des paramètres)
Options de montage recommandées
Voici une ligne optimisée à ajouter dans /etc/fstab :
192.168.1.10:/ /mnt/nfs nfs4 defaults,noatime,tcp,rsize=1048576,wsize=1048576,minorversion=1,nconnect=4 0 0Détail des options :
noatime: supprime la mise à jour de la date d’accès à chaque lecture, réduit les écritures disque.tcp: impose le protocole TCP, obligatoire avec NFSv4 (plus fiable que UDP).rsize=1048576: définit la taille des blocs de lecture à 1 Mo (à tester selon la bande passante).wsize=1048576: idem pour les blocs d’écriture.minorversion=1: active NFSv4.1 (ou2pour NFSv4.2 si supporté).nconnect=4: ouvre 4 connexions TCP en parallèle pour le transfert (utile sur les réseaux à faible latence).
Ajustement du système
Augmenter les buffers pour le réseau :
echo 262144 > /proc/sys/net/core/rmem_defaultecho 262144 > /proc/sys/net/core/wmem_defaultEt dans /etc/sysctl.conf :
net.core.rmem_default = 262144net.core.wmem_default = 262144Appliquer les changements :
sudo sysctl -pSurveillance des performances
nfsstat: affiche les appels RPC et les erreurs.iostat -x 1: surveille le disque et la latence.dstatounmon: vue d’ensemble de l’activité système.
Exemples :
nfsstat -s # côté serveurnfsstat -c # côté clientCes optimisations peuvent être ajustées en fonction du matériel, du type de fichiers échangés et de la fréquence d’accès.
Sécurisation de NFSv4 avec Kerberos
L’un des apports majeurs de NFSv4, c’est sa capacité à gérer nativement l’authentification sécurisée via Kerberos. Contrairement à NFSv3, qui repose sur la confiance du réseau local, NFSv4 permet de contrôler l’identité des utilisateurs et de garantir l’intégrité et la confidentialité des données échangées. À mon avis, dès qu’on sort du cadre domestique ou qu’on travaille en entreprise, il est indispensable d’activer cette sécurité.
Principe de l’authentification Kerberos
Kerberos repose sur un serveur central appelé KDC (Key Distribution Center). Lorsqu’un utilisateur ou un service veut accéder à une ressource, il s’authentifie auprès du KDC qui lui fournit un ticket. Ce ticket est ensuite utilisé pour prouver son identité au serveur NFS.
Il existe trois niveaux de sécurité avec NFSv4 :
sec=krb5: authentification uniquement (pas d’intégrité ni de chiffrement).sec=krb5i: inclut l’intégrité des données (prévention des altérations).sec=krb5p: ajoute la confidentialité (chiffrement complet des échanges).
Prérequis pour activer Kerberos avec NFSv4
Avant de configurer NFS, il faut :
- Un KDC fonctionnel (par exemple MIT Kerberos ou FreeIPA).
- Le serveur et les clients doivent avoir des horloges synchronisées (via NTP).
- Le DNS doit être configuré proprement, car Kerberos utilise les noms FQDN.
Configuration côté serveur
- Installer les paquets nécessaires :
sudo apt install krb5-user nfs-kernel-server- Créer un principal pour le serveur NFS dans le KDC :
kadmin -q "addprinc -randkey nfs/serveur.example.com"- Exporter les clés dans un fichier keytab :
kadmin -q "ktadd -k /etc/krb5.keytab nfs/serveur.example.com"- Configurer le fichier
/etc/idmapd.conf:
[General]Domain = example.com
[Mapping]Nobody-User = nobodyNobody-Group = nogroup- Redémarrer les services :
sudo systemctl restart nfs-serverConfiguration côté client
- Installer les paquets :
sudo apt install krb5-user nfs-common- Obtenir un ticket Kerberos :
kinit utilisateur@EXAMPLE.COM- Monter le partage NFS avec l’option de sécurité :
sudo mount -t nfs4 -o sec=krb5p serveur.example.com:/ /mnt/nfsVérification de l’authentification
Pour vérifier que le partage utilise bien Kerberos, on peut utiliser :
mount | grep nfs4Et vérifier que le champ sec=krb5p est bien présent.
On peut aussi consulter les tickets Kerberos :
klistRecommandations
- Utiliser
krb5ppour des données sensibles ou des connexions sur réseaux non sécurisés. - Préférer
krb5idans les environnements où la performance prime mais où l’intégrité est nécessaire. - Limiter l’accès au fichier
keytab:
chmod 600 /etc/krb5.keytabchown root:root /etc/krb5.keytabDépannage des problèmes courants avec NFSv4
Même avec une configuration rigoureuse, NFSv4 peut rencontrer des problèmes liés au réseau, aux permissions ou aux services. À mon avis, ce protocole est robuste, mais très sensible aux erreurs de configuration. Voici les cas que je rencontre le plus souvent et comment je les corrige.
Problème 1 : Montage échoue ou reste bloqué
Symptôme : La commande mount ne répond pas ou échoue avec une erreur.
Vérifications à faire :
- Le service NFS est-il démarré côté serveur ?
sudo systemctl status nfs-server- Le partage est-il bien exporté ?
sudo exportfs -v- Le client peut-il résoudre le nom du serveur ?
ping serveur.example.comAstuce : Si le client tente de monter sans option explicite nfs4, il peut
utiliser par défaut NFSv3. Forcer la version avec :
sudo mount -t nfs4 serveur:/ /mnt/nfsProblème 2 : Erreur de permissions sur les fichiers
Symptôme : Les fichiers montés sont accessibles uniquement par nobody ou
ont des droits incohérents.
Causes possibles :
- Mauvaise correspondance des UID/GID entre serveur et client.
- Le démon
idmapdn’est pas lancé ou mal configuré.
Solution :
- Vérifier que
rpc.idmapdtourne :
ps aux | grep idmapd- Vérifier que le fichier
/etc/idmapd.confcontient le bon domaine :
[General]Domain = example.comEt que ce domaine est identique sur le serveur et tous les clients.
Redémarrer le service :
sudo systemctl restart nfs-idmapdProblème 3 : “Permission denied” au montage
Symptôme : L’accès est refusé malgré une configuration d’exports correcte.
Vérifications à faire :
- L’IP du client est-elle bien dans la plage autorisée du fichier
/etc/exports? - Les ports NFS sont-ils ouverts côté pare-feu ?
Ports à ouvrir avec ufw ou firewalld :
sudo ufw allow from 192.168.1.0/24 to any port nfsOu avec firewalld :
sudo firewall-cmd --add-service=nfs --permanentsudo firewall-cmd --reloadProblème 4 : Kerberos ne fonctionne pas
Symptôme : Erreur lors du montage avec sec=krb5p, ou kinit échoue.
Pistes :
- Vérifier que les tickets sont valides :
klist- S’assurer que
/etc/krb5.confpointe vers le bon KDC. - Que le fichier
/etc/krb5.keytabest lisible uniquement par root et contient bien le bon principal :
sudo klist -k /etc/krb5.keytab- Synchroniser l’heure :
sudo systemctl restart chronyd # ou ntp, selon la configProblème 5 : Problèmes de performance ou lenteur
Symptôme : Accès lent, transferts bloqués ou retardés.
Diagnostics à faire :
- Statistiques NFS :
nfsstat -c # côté clientnfsstat -s # côté serveur- Charge du serveur :
top, htop, iostat, vmstat- Réseau saturé ou avec des pertes :
iperf, mtr, ping -fSolutions possibles :
- Augmenter
rsizeetwsizecôté client. - Utiliser
nconnectpour paralléliser les connexions TCP. - Passer en
asynctemporairement si la latence d’écriture est trop pénalisante (attention à la fiabilité).
À retenir :
Le dépannage NFSv4 repose sur une bonne maîtrise des logs, une configuration réseau propre et une cohérence des UID/GID. Quand un problème surgit, je commence toujours par remonter la chaîne : client → réseau → serveur → configuration des exports. C’est méthodique et ça évite de tourner en rond.
Conclusion
NFS est un service puissant pour le partage de fichiers en réseau. Avec une configuration soignée, il peut offrir des performances élevées et une sécurité renforcée. En suivant les bonnes pratiques et en restant vigilant sur les mises à jour, on peut tirer le meilleur parti de ce protocole éprouvé.